diff --git a/packages/ui/.gitignore b/packages/ui/.gitignore new file mode 100644 index 00000000..a0f2c2ca --- /dev/null +++ b/packages/ui/.gitignore @@ -0,0 +1,28 @@ +# Logs +logs +systems +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* +node_modules +ref + +*.local +playwright-report +test-results +dist +dist-in + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/packages/ui/dist-lib/MilkdownEditorInternal-CrHTBrS2.js b/packages/ui/dist-lib/MilkdownEditorInternal-CrHTBrS2.js new file mode 100644 index 00000000..2e7aa810 --- /dev/null +++ b/packages/ui/dist-lib/MilkdownEditorInternal-CrHTBrS2.js @@ -0,0 +1,41763 @@ +var R4 = (t) => { + throw TypeError(t); +}; +var cd = (t, e, n) => e.has(t) || R4("Cannot " + n); +var T = (t, e, n) => (cd(t, e, "read from private field"), n ? n.call(t) : e.get(t)), Z = (t, e, n) => e.has(t) ? R4("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(t) : e.set(t, n), V = (t, e, n, r) => (cd(t, e, "write to private field"), r ? r.call(t, n) : e.set(t, n), n), vu = (t, e, n) => (cd(t, e, "access private method"), n); +import { g as J9, c as Jp, f as Yp, o as Zp, p as Xp, a as Qa, s as Y9, b as z4, j as Z9 } from "./lib-export-CI8auKfP.js"; +import { useRef as xs, useEffect as hd } from "react"; +var Mn = /* @__PURE__ */ ((t) => (t.docTypeError = "docTypeError", t.contextNotFound = "contextNotFound", t.timerNotFound = "timerNotFound", t.ctxCallOutOfScope = "ctxCallOutOfScope", t.createNodeInParserFail = "createNodeInParserFail", t.stackOverFlow = "stackOverFlow", t.parserMatchError = "parserMatchError", t.serializerMatchError = "serializerMatchError", t.getAtomFromSchemaFail = "getAtomFromSchemaFail", t.expectDomTypeError = "expectDomTypeError", t.callCommandBeforeEditorView = "callCommandBeforeEditorView", t.missingRootElement = "missingRootElement", t.missingNodeInSchema = "missingNodeInSchema", t.missingMarkInSchema = "missingMarkInSchema", t.ctxNotBind = "ctxNotBind", t.missingYjsDoc = "missingYjsDoc", t))(Mn || {}); +class qn extends Error { + constructor(e, n) { + super(n), this.name = "MilkdownError", this.code = e; + } +} +const X9 = (t, e) => typeof e == "function" ? "[Function]" : e, bh = (t) => JSON.stringify(t, X9); +function Q9(t) { + return new qn( + Mn.docTypeError, + `Doc type error, unsupported type: ${bh(t)}` + ); +} +function ew(t) { + return new qn( + Mn.contextNotFound, + `Context "${t}" not found, do you forget to inject it?` + ); +} +function tw(t) { + return new qn( + Mn.timerNotFound, + `Timer "${t}" not found, do you forget to record it?` + ); +} +function wh() { + return new qn( + Mn.ctxCallOutOfScope, + "Should not call a context out of the plugin." + ); +} +function nw(t, e, n) { + const i = `Cannot create node for ${"name" in t ? t.name : t}`, s = (c) => { + if (c == null) return "null"; + if (Array.isArray(c)) + return `[${c.map(s).join(", ")}]`; + if (typeof c == "object") + return "toJSON" in c && typeof c.toJSON == "function" ? JSON.stringify(c.toJSON()) : "spec" in c ? JSON.stringify(c.spec) : JSON.stringify(c); + if (typeof c == "string" || typeof c == "number" || typeof c == "boolean") + return JSON.stringify(c); + if (typeof c == "function") + return `[Function: ${c.name || "anonymous"}]`; + try { + return String(c); + } catch { + return "[Unserializable]"; + } + }, o = ["[Description]", i], l = ["[Attributes]", e], a = [ + "[Content]", + (n ?? []).map((c) => c ? typeof c == "object" && "type" in c ? `${c}` : s(c) : "null") + ], u = [o, l, a].reduce( + (c, [h, d]) => { + const f = `${h}: ${s(d)}.`; + return c.concat(f); + }, + [] + ); + return new qn( + Mn.createNodeInParserFail, + u.join(` +`) + ); +} +function v7() { + return new qn( + Mn.stackOverFlow, + "Stack over flow, cannot pop on an empty stack." + ); +} +function rw(t) { + return new qn( + Mn.parserMatchError, + `Cannot match target parser for node: ${bh(t)}.` + ); +} +function iw(t) { + return new qn( + Mn.serializerMatchError, + `Cannot match target serializer for node: ${bh(t)}.` + ); +} +function sw(t, e) { + return new qn( + Mn.getAtomFromSchemaFail, + `Cannot get ${t}: ${e} from schema.` + ); +} +function Cr(t) { + return new qn( + Mn.expectDomTypeError, + `Expect to be a dom, but get: ${bh(t)}.` + ); +} +function dd() { + return new qn( + Mn.callCommandBeforeEditorView, + "You're trying to call a command before editor view initialized, make sure to get commandManager from ctx after editor view has been initialized" + ); +} +function ow(t) { + return new qn( + Mn.missingNodeInSchema, + `Missing node in schema, milkdown cannot find "${t}" in schema.` + ); +} +function lw(t) { + return new qn( + Mn.missingMarkInSchema, + `Missing mark in schema, milkdown cannot find "${t}" in schema.` + ); +} +class b7 { + constructor() { + this.sliceMap = /* @__PURE__ */ new Map(), this.get = (e) => { + const n = typeof e == "string" ? [...this.sliceMap.values()].find((r) => r.type.name === e) : this.sliceMap.get(e.id); + if (!n) { + const r = typeof e == "string" ? e : e.name; + throw ew(r); + } + return n; + }, this.remove = (e) => { + const n = typeof e == "string" ? [...this.sliceMap.values()].find((r) => r.type.name === e) : this.sliceMap.get(e.id); + n && this.sliceMap.delete(n.type.id); + }, this.has = (e) => typeof e == "string" ? [...this.sliceMap.values()].some((n) => n.type.name === e) : this.sliceMap.has(e.id); + } +} +var lr, ai, Qo, y7; +let aw = (y7 = class { + /// @internal + constructor(e, n, r) { + Z(this, lr); + /// @internal + Z(this, ai); + Z(this, Qo); + V(this, lr, []), V(this, Qo, () => { + T(this, lr).forEach((i) => i(T(this, ai))); + }), this.set = (i) => { + V(this, ai, i), T(this, Qo).call(this); + }, this.get = () => T(this, ai), this.update = (i) => { + V(this, ai, i(T(this, ai))), T(this, Qo).call(this); + }, this.type = r, V(this, ai, n), e.set(r.id, this); + } + /// Add a watcher for changes in the slice. + /// Returns a function to remove the watcher. + on(e) { + return T(this, lr).push(e), () => { + V(this, lr, T(this, lr).filter((n) => n !== e)); + }; + } + /// Add a one-time watcher for changes in the slice. + /// The watcher will be removed after it is called. + /// Returns a function to remove the watcher. + once(e) { + const n = this.on((r) => { + e(r), n(); + }); + return n; + } + /// Remove a watcher. + off(e) { + V(this, lr, T(this, lr).filter((n) => n !== e)); + } + /// Remove all watchers. + offAll() { + V(this, lr, []); + } +}, lr = new WeakMap(), ai = new WeakMap(), Qo = new WeakMap(), y7); +class uw { + /// Create a slice type with a default value and a name. + /// The name should be unique in the container. + constructor(e, n) { + this.id = /* @__PURE__ */ Symbol(`Context-${n}`), this.name = n, this._defaultValue = e, this._typeInfo = () => { + throw wh(); + }; + } + /// Create a slice with a container. + /// You can also pass a value to override the default value. + create(e, n = this._defaultValue) { + return new aw(e, n, this); + } +} +const Ve = (t, e) => new uw(t, e); +var k0, x0, S0, Fs, el, Wi, tl, nl, rl; +class cw { + /// Create an inspector with container, clock and metadata. + constructor(e, n, r) { + /// @internal + Z(this, k0); + /// @internal + Z(this, x0); + /// @internal + Z(this, S0); + Z(this, Fs); + Z(this, el); + Z(this, Wi); + Z(this, tl); + Z(this, nl); + Z(this, rl); + V(this, Fs, /* @__PURE__ */ new Set()), V(this, el, /* @__PURE__ */ new Set()), V(this, Wi, /* @__PURE__ */ new Map()), V(this, tl, /* @__PURE__ */ new Map()), this.read = () => ({ + metadata: T(this, k0), + injectedSlices: [...T(this, Fs)].map((i) => ({ + name: typeof i == "string" ? i : i.name, + value: T(this, nl).call(this, i) + })), + consumedSlices: [...T(this, el)].map((i) => ({ + name: typeof i == "string" ? i : i.name, + value: T(this, nl).call(this, i) + })), + recordedTimers: [...T(this, Wi)].map( + ([i, { duration: s }]) => ({ + name: i.name, + duration: s, + status: T(this, rl).call(this, i) + }) + ), + waitTimers: [...T(this, tl)].map(([i, { duration: s }]) => ({ + name: i.name, + duration: s, + status: T(this, rl).call(this, i) + })) + }), this.onRecord = (i) => { + T(this, Wi).set(i, { start: Date.now(), duration: 0 }); + }, this.onClear = (i) => { + T(this, Wi).delete(i); + }, this.onDone = (i) => { + const s = T(this, Wi).get(i); + s && (s.duration = Date.now() - s.start); + }, this.onWait = (i, s) => { + const o = Date.now(); + s.finally(() => { + T(this, tl).set(i, { duration: Date.now() - o }); + }).catch(console.error); + }, this.onInject = (i) => { + T(this, Fs).add(i); + }, this.onRemove = (i) => { + T(this, Fs).delete(i); + }, this.onUse = (i) => { + T(this, el).add(i); + }, V(this, nl, (i) => T(this, x0).get(i).get()), V(this, rl, (i) => T(this, S0).get(i).status), V(this, x0, e), V(this, S0, n), V(this, k0, r); + } +} +k0 = new WeakMap(), x0 = new WeakMap(), S0 = new WeakMap(), Fs = new WeakMap(), el = new WeakMap(), Wi = new WeakMap(), tl = new WeakMap(), nl = new WeakMap(), rl = new WeakMap(); +var ui, ci, C0, Un; +const Fg = class Fg { + /// Create a ctx object with container and clock. + constructor(e, n, r) { + /// @internal + Z(this, ui); + /// @internal + Z(this, ci); + /// @internal + Z(this, C0); + /// @internal + Z(this, Un); + this.produce = (i) => i && Object.keys(i).length ? new Fg(T(this, ui), T(this, ci), { ...i }) : this, this.inject = (i, s) => { + var l; + const o = i.create(T(this, ui).sliceMap); + return s != null && o.set(s), (l = T(this, Un)) == null || l.onInject(i), this; + }, this.remove = (i) => { + var s; + return T(this, ui).remove(i), (s = T(this, Un)) == null || s.onRemove(i), this; + }, this.record = (i) => { + var s; + return i.create(T(this, ci).store), (s = T(this, Un)) == null || s.onRecord(i), this; + }, this.clearTimer = (i) => { + var s; + return T(this, ci).remove(i), (s = T(this, Un)) == null || s.onClear(i), this; + }, this.isInjected = (i) => T(this, ui).has(i), this.isRecorded = (i) => T(this, ci).has(i), this.use = (i) => { + var s; + return (s = T(this, Un)) == null || s.onUse(i), T(this, ui).get(i); + }, this.get = (i) => this.use(i).get(), this.set = (i, s) => this.use(i).set(s), this.update = (i, s) => this.use(i).update(s), this.timer = (i) => T(this, ci).get(i), this.done = (i) => { + var s; + this.timer(i).done(), (s = T(this, Un)) == null || s.onDone(i); + }, this.wait = (i) => { + var o; + const s = this.timer(i).start(); + return (o = T(this, Un)) == null || o.onWait(i, s), s; + }, this.waitTimers = async (i) => { + await Promise.all(this.get(i).map((s) => this.wait(s))); + }, V(this, ui, e), V(this, ci, n), V(this, C0, r), r && V(this, Un, new cw(e, n, r)); + } + /// Get metadata of the ctx. + get meta() { + return T(this, C0); + } + /// Get the inspector of the ctx. + get inspector() { + return T(this, Un); + } +}; +ui = new WeakMap(), ci = new WeakMap(), C0 = new WeakMap(), Un = new WeakMap(); +let Df = Fg; +class hw { + constructor() { + this.store = /* @__PURE__ */ new Map(), this.get = (e) => { + const n = this.store.get(e.id); + if (!n) throw tw(e.name); + return n; + }, this.remove = (e) => { + this.store.delete(e.id); + }, this.has = (e) => this.store.has(e.id); + } +} +var il, Ui, sl, hi, ol, N0; +class dw { + /// @internal + constructor(e, n) { + Z(this, il); + Z(this, Ui); + /// @internal + Z(this, sl); + Z(this, hi); + Z(this, ol); + Z(this, N0); + V(this, il, null), V(this, Ui, null), V(this, hi, "pending"), this.start = () => (T(this, il) ?? V(this, il, new Promise((r, i) => { + V(this, Ui, (s) => { + s instanceof CustomEvent && s.detail.id === T(this, sl) && (V(this, hi, "resolved"), T(this, ol).call(this), s.stopImmediatePropagation(), r()); + }), T(this, N0).call(this, () => { + T(this, hi) === "pending" && V(this, hi, "rejected"), T(this, ol).call(this), i(new Error(`Timing ${this.type.name} timeout.`)); + }), V(this, hi, "pending"), addEventListener(this.type.name, T(this, Ui)); + })), T(this, il)), this.done = () => { + const r = new CustomEvent(this.type.name, { + detail: { id: T(this, sl) } + }); + dispatchEvent(r); + }, V(this, ol, () => { + T(this, Ui) && removeEventListener(this.type.name, T(this, Ui)); + }), V(this, N0, (r) => { + setTimeout(() => { + r(); + }, this.type.timeout); + }), V(this, sl, Symbol(n.name)), this.type = n, e.set(n.id, this); + } + /// The status of the timer. + /// Can be `pending`, `resolved` or `rejected`. + get status() { + return T(this, hi); + } +} +il = new WeakMap(), Ui = new WeakMap(), sl = new WeakMap(), hi = new WeakMap(), ol = new WeakMap(), N0 = new WeakMap(); +class fw { + /// Create a timer type with a name and a timeout. + /// The name should be unique in the clock. + constructor(e, n = 3e3) { + this.create = (r) => new dw(r, this), this.id = /* @__PURE__ */ Symbol(`Timer-${e}`), this.name = e, this.timeout = n; + } +} +const jr = (t, e = 3e3) => new fw(t, e); +function jt(t) { + this.content = t; +} +jt.prototype = { + constructor: jt, + find: function(t) { + for (var e = 0; e < this.content.length; e += 2) + if (this.content[e] === t) return e; + return -1; + }, + // :: (string) → ?any + // Retrieve the value stored under `key`, or return undefined when + // no such key exists. + get: function(t) { + var e = this.find(t); + return e == -1 ? void 0 : this.content[e + 1]; + }, + // :: (string, any, ?string) → OrderedMap + // Create a new map by replacing the value of `key` with a new + // value, or adding a binding to the end of the map. If `newKey` is + // given, the key of the binding will be replaced with that key. + update: function(t, e, n) { + var r = n && n != t ? this.remove(n) : this, i = r.find(t), s = r.content.slice(); + return i == -1 ? s.push(n || t, e) : (s[i + 1] = e, n && (s[i] = n)), new jt(s); + }, + // :: (string) → OrderedMap + // Return a map with the given key removed, if it existed. + remove: function(t) { + var e = this.find(t); + if (e == -1) return this; + var n = this.content.slice(); + return n.splice(e, 2), new jt(n); + }, + // :: (string, any) → OrderedMap + // Add a new key to the start of the map. + addToStart: function(t, e) { + return new jt([t, e].concat(this.remove(t).content)); + }, + // :: (string, any) → OrderedMap + // Add a new key to the end of the map. + addToEnd: function(t, e) { + var n = this.remove(t).content.slice(); + return n.push(t, e), new jt(n); + }, + // :: (string, string, any) → OrderedMap + // Add a key after the given key. If `place` is not found, the new + // key is added to the end. + addBefore: function(t, e, n) { + var r = this.remove(e), i = r.content.slice(), s = r.find(t); + return i.splice(s == -1 ? i.length : s, 0, e, n), new jt(i); + }, + // :: ((key: string, value: any)) + // Call the given function for each key/value pair in the map, in + // order. + forEach: function(t) { + for (var e = 0; e < this.content.length; e += 2) + t(this.content[e], this.content[e + 1]); + }, + // :: (union) → OrderedMap + // Create a new map by prepending the keys in this map that don't + // appear in `map` before the keys in `map`. + prepend: function(t) { + return t = jt.from(t), t.size ? new jt(t.content.concat(this.subtract(t).content)) : this; + }, + // :: (union) → OrderedMap + // Create a new map by appending the keys in this map that don't + // appear in `map` after the keys in `map`. + append: function(t) { + return t = jt.from(t), t.size ? new jt(this.subtract(t).content.concat(t.content)) : this; + }, + // :: (union) → OrderedMap + // Create a map containing all the keys in this map that don't + // appear in `map`. + subtract: function(t) { + var e = this; + t = jt.from(t); + for (var n = 0; n < t.content.length; n += 2) + e = e.remove(t.content[n]); + return e; + }, + // :: () → Object + // Turn ordered map into a plain object. + toObject: function() { + var t = {}; + return this.forEach(function(e, n) { + t[e] = n; + }), t; + }, + // :: number + // The amount of keys in this map. + get size() { + return this.content.length >> 1; + } +}; +jt.from = function(t) { + if (t instanceof jt) return t; + var e = []; + if (t) for (var n in t) e.push(n, t[n]); + return new jt(e); +}; +function w7(t, e, n) { + for (let r = 0; ; r++) { + if (r == t.childCount || r == e.childCount) + return t.childCount == e.childCount ? null : n; + let i = t.child(r), s = e.child(r); + if (i == s) { + n += i.nodeSize; + continue; + } + if (!i.sameMarkup(s)) + return n; + if (i.isText && i.text != s.text) { + for (let o = 0; i.text[o] == s.text[o]; o++) + n++; + return n; + } + if (i.content.size || s.content.size) { + let o = w7(i.content, s.content, n + 1); + if (o != null) + return o; + } + n += i.nodeSize; + } +} +function k7(t, e, n, r) { + for (let i = t.childCount, s = e.childCount; ; ) { + if (i == 0 || s == 0) + return i == s ? null : { a: n, b: r }; + let o = t.child(--i), l = e.child(--s), a = o.nodeSize; + if (o == l) { + n -= a, r -= a; + continue; + } + if (!o.sameMarkup(l)) + return { a: n, b: r }; + if (o.isText && o.text != l.text) { + let u = 0, c = Math.min(o.text.length, l.text.length); + for (; u < c && o.text[o.text.length - u - 1] == l.text[l.text.length - u - 1]; ) + u++, n--, r--; + return { a: n, b: r }; + } + if (o.content.size || l.content.size) { + let u = k7(o.content, l.content, n - 1, r - 1); + if (u) + return u; + } + n -= a, r -= a; + } +} +let re = class tn { + /** + @internal + */ + constructor(e, n) { + if (this.content = e, this.size = n || 0, n == null) + for (let r = 0; r < e.length; r++) + this.size += e[r].nodeSize; + } + /** + Invoke a callback for all descendant nodes between the given two + positions (relative to start of this fragment). Doesn't descend + into a node when the callback returns `false`. + */ + nodesBetween(e, n, r, i = 0, s) { + for (let o = 0, l = 0; l < n; o++) { + let a = this.content[o], u = l + a.nodeSize; + if (u > e && r(a, i + l, s || null, o) !== !1 && a.content.size) { + let c = l + 1; + a.nodesBetween(Math.max(0, e - c), Math.min(a.content.size, n - c), r, i + c); + } + l = u; + } + } + /** + Call the given callback for every descendant node. `pos` will be + relative to the start of the fragment. The callback may return + `false` to prevent traversal of a given node's children. + */ + descendants(e) { + this.nodesBetween(0, this.size, e); + } + /** + Extract the text between `from` and `to`. See the same method on + [`Node`](https://prosemirror.net/docs/ref/#model.Node.textBetween). + */ + textBetween(e, n, r, i) { + let s = "", o = !0; + return this.nodesBetween(e, n, (l, a) => { + let u = l.isText ? l.text.slice(Math.max(e, a) - a, n - a) : l.isLeaf ? i ? typeof i == "function" ? i(l) : i : l.type.spec.leafText ? l.type.spec.leafText(l) : "" : ""; + l.isBlock && (l.isLeaf && u || l.isTextblock) && r && (o ? o = !1 : s += r), s += u; + }, 0), s; + } + /** + Create a new fragment containing the combined content of this + fragment and the other. + */ + append(e) { + if (!e.size) + return this; + if (!this.size) + return e; + let n = this.lastChild, r = e.firstChild, i = this.content.slice(), s = 0; + for (n.isText && n.sameMarkup(r) && (i[i.length - 1] = n.withText(n.text + r.text), s = 1); s < e.content.length; s++) + i.push(e.content[s]); + return new tn(i, this.size + e.size); + } + /** + Cut out the sub-fragment between the two given positions. + */ + cut(e, n = this.size) { + if (e == 0 && n == this.size) + return this; + let r = [], i = 0; + if (n > e) + for (let s = 0, o = 0; o < n; s++) { + let l = this.content[s], a = o + l.nodeSize; + a > e && ((o < e || a > n) && (l.isText ? l = l.cut(Math.max(0, e - o), Math.min(l.text.length, n - o)) : l = l.cut(Math.max(0, e - o - 1), Math.min(l.content.size, n - o - 1))), r.push(l), i += l.nodeSize), o = a; + } + return new tn(r, i); + } + /** + @internal + */ + cutByIndex(e, n) { + return e == n ? tn.empty : e == 0 && n == this.content.length ? this : new tn(this.content.slice(e, n)); + } + /** + Create a new fragment in which the node at the given index is + replaced by the given node. + */ + replaceChild(e, n) { + let r = this.content[e]; + if (r == n) + return this; + let i = this.content.slice(), s = this.size + n.nodeSize - r.nodeSize; + return i[e] = n, new tn(i, s); + } + /** + Create a new fragment by prepending the given node to this + fragment. + */ + addToStart(e) { + return new tn([e].concat(this.content), this.size + e.nodeSize); + } + /** + Create a new fragment by appending the given node to this + fragment. + */ + addToEnd(e) { + return new tn(this.content.concat(e), this.size + e.nodeSize); + } + /** + Compare this fragment to another one. + */ + eq(e) { + if (this.content.length != e.content.length) + return !1; + for (let n = 0; n < this.content.length; n++) + if (!this.content[n].eq(e.content[n])) + return !1; + return !0; + } + /** + The first child of the fragment, or `null` if it is empty. + */ + get firstChild() { + return this.content.length ? this.content[0] : null; + } + /** + The last child of the fragment, or `null` if it is empty. + */ + get lastChild() { + return this.content.length ? this.content[this.content.length - 1] : null; + } + /** + The number of child nodes in this fragment. + */ + get childCount() { + return this.content.length; + } + /** + Get the child node at the given index. Raise an error when the + index is out of range. + */ + child(e) { + let n = this.content[e]; + if (!n) + throw new RangeError("Index " + e + " out of range for " + this); + return n; + } + /** + Get the child node at the given index, if it exists. + */ + maybeChild(e) { + return this.content[e] || null; + } + /** + Call `f` for every child node, passing the node, its offset + into this parent node, and its index. + */ + forEach(e) { + for (let n = 0, r = 0; n < this.content.length; n++) { + let i = this.content[n]; + e(i, r, n), r += i.nodeSize; + } + } + /** + Find the first position at which this fragment and another + fragment differ, or `null` if they are the same. + */ + findDiffStart(e, n = 0) { + return w7(this, e, n); + } + /** + Find the first position, searching from the end, at which this + fragment and the given fragment differ, or `null` if they are + the same. Since this position will not be the same in both + nodes, an object with two separate positions is returned. + */ + findDiffEnd(e, n = this.size, r = e.size) { + return k7(this, e, n, r); + } + /** + Find the index and inner offset corresponding to a given relative + position in this fragment. The result object will be reused + (overwritten) the next time the function is called. @internal + */ + findIndex(e) { + if (e == 0) + return bu(0, e); + if (e == this.size) + return bu(this.content.length, e); + if (e > this.size || e < 0) + throw new RangeError(`Position ${e} outside of fragment (${this})`); + for (let n = 0, r = 0; ; n++) { + let i = this.child(n), s = r + i.nodeSize; + if (s >= e) + return s == e ? bu(n + 1, s) : bu(n, r); + r = s; + } + } + /** + Return a debugging string that describes this fragment. + */ + toString() { + return "<" + this.toStringInner() + ">"; + } + /** + @internal + */ + toStringInner() { + return this.content.join(", "); + } + /** + Create a JSON-serializeable representation of this fragment. + */ + toJSON() { + return this.content.length ? this.content.map((e) => e.toJSON()) : null; + } + /** + Deserialize a fragment from its JSON representation. + */ + static fromJSON(e, n) { + if (!n) + return tn.empty; + if (!Array.isArray(n)) + throw new RangeError("Invalid input for Fragment.fromJSON"); + return new tn(n.map(e.nodeFromJSON)); + } + /** + Build a fragment from an array of nodes. Ensures that adjacent + text nodes with the same marks are joined together. + */ + static fromArray(e) { + if (!e.length) + return tn.empty; + let n, r = 0; + for (let i = 0; i < e.length; i++) { + let s = e[i]; + r += s.nodeSize, i && s.isText && e[i - 1].sameMarkup(s) ? (n || (n = e.slice(0, i)), n[n.length - 1] = s.withText(n[n.length - 1].text + s.text)) : n && n.push(s); + } + return new tn(n || e, r); + } + /** + Create a fragment from something that can be interpreted as a + set of nodes. For `null`, it returns the empty fragment. For a + fragment, the fragment itself. For a node or array of nodes, a + fragment containing those nodes. + */ + static from(e) { + if (!e) + return tn.empty; + if (e instanceof tn) + return e; + if (Array.isArray(e)) + return this.fromArray(e); + if (e.attrs) + return new tn([e], e.nodeSize); + throw new RangeError("Can not convert " + e + " to a Fragment" + (e.nodesBetween ? " (looks like multiple versions of prosemirror-model were loaded)" : "")); + } +}; +re.empty = new re([], 0); +const fd = { index: 0, offset: 0 }; +function bu(t, e) { + return fd.index = t, fd.offset = e, fd; +} +function _c(t, e) { + if (t === e) + return !0; + if (!(t && typeof t == "object") || !(e && typeof e == "object")) + return !1; + let n = Array.isArray(t); + if (Array.isArray(e) != n) + return !1; + if (n) { + if (t.length != e.length) + return !1; + for (let r = 0; r < t.length; r++) + if (!_c(t[r], e[r])) + return !1; + } else { + for (let r in t) + if (!(r in e) || !_c(t[r], e[r])) + return !1; + for (let r in e) + if (!(r in t)) + return !1; + } + return !0; +} +class qe { + /** + @internal + */ + constructor(e, n) { + this.type = e, this.attrs = n; + } + /** + Given a set of marks, create a new set which contains this one as + well, in the right position. If this mark is already in the set, + the set itself is returned. If any marks that are set to be + [exclusive](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) with this mark are present, + those are replaced by this one. + */ + addToSet(e) { + let n, r = !1; + for (let i = 0; i < e.length; i++) { + let s = e[i]; + if (this.eq(s)) + return e; + if (this.type.excludes(s.type)) + n || (n = e.slice(0, i)); + else { + if (s.type.excludes(this.type)) + return e; + !r && s.type.rank > this.type.rank && (n || (n = e.slice(0, i)), n.push(this), r = !0), n && n.push(s); + } + } + return n || (n = e.slice()), r || n.push(this), n; + } + /** + Remove this mark from the given set, returning a new set. If this + mark is not in the set, the set itself is returned. + */ + removeFromSet(e) { + for (let n = 0; n < e.length; n++) + if (this.eq(e[n])) + return e.slice(0, n).concat(e.slice(n + 1)); + return e; + } + /** + Test whether this mark is in the given set of marks. + */ + isInSet(e) { + for (let n = 0; n < e.length; n++) + if (this.eq(e[n])) + return !0; + return !1; + } + /** + Test whether this mark has the same type and attributes as + another mark. + */ + eq(e) { + return this == e || this.type == e.type && _c(this.attrs, e.attrs); + } + /** + Convert this mark to a JSON-serializeable representation. + */ + toJSON() { + let e = { type: this.type.name }; + for (let n in this.attrs) { + e.attrs = this.attrs; + break; + } + return e; + } + /** + Deserialize a mark from JSON. + */ + static fromJSON(e, n) { + if (!n) + throw new RangeError("Invalid input for Mark.fromJSON"); + let r = e.marks[n.type]; + if (!r) + throw new RangeError(`There is no mark type ${n.type} in this schema`); + let i = r.create(n.attrs); + return r.checkAttrs(i.attrs), i; + } + /** + Test whether two sets of marks are identical. + */ + static sameSet(e, n) { + if (e == n) + return !0; + if (e.length != n.length) + return !1; + for (let r = 0; r < e.length; r++) + if (!e[r].eq(n[r])) + return !1; + return !0; + } + /** + Create a properly sorted mark set from null, a single mark, or an + unsorted array of marks. + */ + static setFrom(e) { + if (!e || Array.isArray(e) && e.length == 0) + return qe.none; + if (e instanceof qe) + return [e]; + let n = e.slice(); + return n.sort((r, i) => r.type.rank - i.type.rank), n; + } +} +qe.none = []; +class Rc extends Error { +} +class ae { + /** + Create a slice. When specifying a non-zero open depth, you must + make sure that there are nodes of at least that depth at the + appropriate side of the fragment—i.e. if the fragment is an + empty paragraph node, `openStart` and `openEnd` can't be greater + than 1. + + It is not necessary for the content of open nodes to conform to + the schema's content constraints, though it should be a valid + start/end/middle for such a node, depending on which sides are + open. + */ + constructor(e, n, r) { + this.content = e, this.openStart = n, this.openEnd = r; + } + /** + The size this slice would add when inserted into a document. + */ + get size() { + return this.content.size - this.openStart - this.openEnd; + } + /** + @internal + */ + insertAt(e, n) { + let r = S7(this.content, e + this.openStart, n); + return r && new ae(r, this.openStart, this.openEnd); + } + /** + @internal + */ + removeBetween(e, n) { + return new ae(x7(this.content, e + this.openStart, n + this.openStart), this.openStart, this.openEnd); + } + /** + Tests whether this slice is equal to another slice. + */ + eq(e) { + return this.content.eq(e.content) && this.openStart == e.openStart && this.openEnd == e.openEnd; + } + /** + @internal + */ + toString() { + return this.content + "(" + this.openStart + "," + this.openEnd + ")"; + } + /** + Convert a slice to a JSON-serializable representation. + */ + 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; + } + /** + Deserialize a slice from its JSON representation. + */ + static fromJSON(e, n) { + if (!n) + return ae.empty; + let r = n.openStart || 0, i = n.openEnd || 0; + if (typeof r != "number" || typeof i != "number") + throw new RangeError("Invalid input for Slice.fromJSON"); + return new ae(re.fromJSON(e, n.content), r, i); + } + /** + Create a slice from a fragment by taking the maximum possible + open value on both side of the fragment. + */ + static maxOpen(e, n = !0) { + let r = 0, i = 0; + for (let s = e.firstChild; s && !s.isLeaf && (n || !s.type.spec.isolating); s = s.firstChild) + r++; + for (let s = e.lastChild; s && !s.isLeaf && (n || !s.type.spec.isolating); s = s.lastChild) + i++; + return new ae(e, r, i); + } +} +ae.empty = new ae(re.empty, 0, 0); +function x7(t, e, n) { + let { index: r, offset: i } = t.findIndex(e), s = t.maybeChild(r), { index: o, offset: l } = t.findIndex(n); + if (i == e || s.isText) { + if (l != n && !t.child(o).isText) + throw new RangeError("Removing non-flat range"); + return t.cut(0, e).append(t.cut(n)); + } + if (r != o) + throw new RangeError("Removing non-flat range"); + return t.replaceChild(r, s.copy(x7(s.content, e - i - 1, n - i - 1))); +} +function S7(t, e, n, r) { + let { index: i, offset: s } = t.findIndex(e), o = t.maybeChild(i); + if (s == e || o.isText) + return r && !r.canReplace(i, i, n) ? null : t.cut(0, e).append(n).append(t.cut(e)); + let l = S7(o.content, e - s - 1, n, o); + return l && t.replaceChild(i, o.copy(l)); +} +function pw(t, e, n) { + if (n.openStart > t.depth) + throw new Rc("Inserted content deeper than insertion position"); + if (t.depth - n.openStart != e.depth - n.openEnd) + throw new Rc("Inconsistent open depths"); + return C7(t, e, n, 0); +} +function C7(t, e, n, r) { + let i = t.index(r), s = t.node(r); + if (i == e.index(r) && r < t.depth - n.openStart) { + let o = C7(t, e, n, r + 1); + return s.copy(s.content.replaceChild(i, o)); + } else if (n.content.size) + if (!n.openStart && !n.openEnd && t.depth == r && e.depth == r) { + let o = t.parent, l = o.content; + return Xs(o, l.cut(0, t.parentOffset).append(n.content).append(l.cut(e.parentOffset))); + } else { + let { start: o, end: l } = mw(n, t); + return Xs(s, M7(t, o, l, e, r)); + } + else return Xs(s, zc(t, e, r)); +} +function N7(t, e) { + if (!e.type.compatibleContent(t.type)) + throw new Rc("Cannot join " + e.type.name + " onto " + t.type.name); +} +function _f(t, e, n) { + let r = t.node(n); + return N7(r, e.node(n)), r; +} +function Zs(t, e) { + let n = e.length - 1; + n >= 0 && t.isText && t.sameMarkup(e[n]) ? e[n] = t.withText(e[n].text + t.text) : e.push(t); +} +function Oa(t, e, n, r) { + let i = (e || t).node(n), s = 0, o = e ? e.index(n) : i.childCount; + t && (s = t.index(n), t.depth > n ? s++ : t.textOffset && (Zs(t.nodeAfter, r), s++)); + for (let l = s; l < o; l++) + Zs(i.child(l), r); + e && e.depth == n && e.textOffset && Zs(e.nodeBefore, r); +} +function Xs(t, e) { + return t.type.checkContent(e), t.copy(e); +} +function M7(t, e, n, r, i) { + let s = t.depth > i && _f(t, e, i + 1), o = r.depth > i && _f(n, r, i + 1), l = []; + return Oa(null, t, i, l), s && o && e.index(i) == n.index(i) ? (N7(s, o), Zs(Xs(s, M7(t, e, n, r, i + 1)), l)) : (s && Zs(Xs(s, zc(t, e, i + 1)), l), Oa(e, n, i, l), o && Zs(Xs(o, zc(n, r, i + 1)), l)), Oa(r, null, i, l), new re(l); +} +function zc(t, e, n) { + let r = []; + if (Oa(null, t, n, r), t.depth > n) { + let i = _f(t, e, n + 1); + Zs(Xs(i, zc(t, e, n + 1)), r); + } + return Oa(e, null, n, r), new re(r); +} +function mw(t, e) { + let n = e.depth - t.openStart, i = e.node(n).copy(t.content); + for (let s = n - 1; s >= 0; s--) + i = e.node(s).copy(re.from(i)); + return { + start: i.resolveNoCache(t.openStart + n), + end: i.resolveNoCache(i.content.size - t.openEnd - n) + }; +} +class e0 { + /** + @internal + */ + constructor(e, n, r) { + this.pos = e, this.path = n, this.parentOffset = r, this.depth = n.length / 3 - 1; + } + /** + @internal + */ + resolveDepth(e) { + return e == null ? this.depth : e < 0 ? this.depth + e : e; + } + /** + The parent node that the position points into. Note that even if + a position points into a text node, that node is not considered + the parent—text nodes are ‘flat’ in this model, and have no content. + */ + get parent() { + return this.node(this.depth); + } + /** + The root node in which the position was resolved. + */ + get doc() { + return this.node(0); + } + /** + The ancestor node at the given level. `p.node(p.depth)` is the + same as `p.parent`. + */ + node(e) { + return this.path[this.resolveDepth(e) * 3]; + } + /** + The index into the ancestor at the given level. If this points + at the 3rd node in the 2nd paragraph on the top level, for + example, `p.index(0)` is 1 and `p.index(1)` is 2. + */ + index(e) { + return this.path[this.resolveDepth(e) * 3 + 1]; + } + /** + The index pointing after this position into the ancestor at the + given level. + */ + indexAfter(e) { + return e = this.resolveDepth(e), this.index(e) + (e == this.depth && !this.textOffset ? 0 : 1); + } + /** + The (absolute) position at the start of the node at the given + level. + */ + start(e) { + return e = this.resolveDepth(e), e == 0 ? 0 : this.path[e * 3 - 1] + 1; + } + /** + The (absolute) position at the end of the node at the given + level. + */ + end(e) { + return e = this.resolveDepth(e), this.start(e) + this.node(e).content.size; + } + /** + The (absolute) position directly before the wrapping node at the + given level, or, when `depth` is `this.depth + 1`, the original + position. + */ + before(e) { + if (e = this.resolveDepth(e), !e) + throw new RangeError("There is no position before the top-level node"); + return e == this.depth + 1 ? this.pos : this.path[e * 3 - 1]; + } + /** + The (absolute) position directly after the wrapping node at the + given level, or the original position when `depth` is `this.depth + 1`. + */ + after(e) { + if (e = this.resolveDepth(e), !e) + throw new 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; + } + /** + When this position points into a text node, this returns the + distance between the position and the start of the text node. + Will be zero for positions that point between nodes. + */ + get textOffset() { + return this.pos - this.path[this.path.length - 1]; + } + /** + Get the node directly after the position, if any. If the position + points into a text node, only the part of that node after the + position is returned. + */ + get nodeAfter() { + let e = this.parent, n = this.index(this.depth); + if (n == e.childCount) + return null; + let r = this.pos - this.path[this.path.length - 1], i = e.child(n); + return r ? e.child(n).cut(r) : i; + } + /** + Get the node directly before the position, if any. If the + position points into a text node, only the part of that node + before the position is returned. + */ + get nodeBefore() { + let e = this.index(this.depth), n = this.pos - this.path[this.path.length - 1]; + return n ? this.parent.child(e).cut(0, n) : e == 0 ? null : this.parent.child(e - 1); + } + /** + Get the position at the given index in the parent node at the + given depth (which defaults to `this.depth`). + */ + posAtIndex(e, n) { + n = this.resolveDepth(n); + let r = this.path[n * 3], i = n == 0 ? 0 : this.path[n * 3 - 1] + 1; + for (let s = 0; s < e; s++) + i += r.child(s).nodeSize; + return i; + } + /** + Get the marks at this position, factoring in the surrounding + marks' [`inclusive`](https://prosemirror.net/docs/ref/#model.MarkSpec.inclusive) property. If the + position is at the start of a non-empty node, the marks of the + node after it (if any) are returned. + */ + marks() { + let e = this.parent, n = this.index(); + if (e.content.size == 0) + return qe.none; + if (this.textOffset) + return e.child(n).marks; + let r = e.maybeChild(n - 1), i = e.maybeChild(n); + if (!r) { + let l = r; + r = i, i = l; + } + let s = r.marks; + for (var o = 0; o < s.length; o++) + s[o].type.spec.inclusive === !1 && (!i || !s[o].isInSet(i.marks)) && (s = s[o--].removeFromSet(s)); + return s; + } + /** + Get the marks after the current position, if any, except those + that are non-inclusive and not present at position `$end`. This + is mostly useful for getting the set of marks to preserve after a + deletion. Will return `null` if this position is at the end of + its parent node or its parent node isn't a textblock (in which + case no marks should be preserved). + */ + marksAcross(e) { + let n = this.parent.maybeChild(this.index()); + if (!n || !n.isInline) + return null; + let r = n.marks, i = e.parent.maybeChild(e.index()); + for (var s = 0; s < r.length; s++) + r[s].type.spec.inclusive === !1 && (!i || !r[s].isInSet(i.marks)) && (r = r[s--].removeFromSet(r)); + return r; + } + /** + The depth up to which this position and the given (non-resolved) + position share the same parent nodes. + */ + sharedDepth(e) { + for (let n = this.depth; n > 0; n--) + if (this.start(n) <= e && this.end(n) >= e) + return n; + return 0; + } + /** + Returns a range based on the place where this position and the + given position diverge around block content. If both point into + the same textblock, for example, a range around that textblock + will be returned. If they point into different blocks, the range + around those blocks in their shared ancestor is returned. You can + pass in an optional predicate that will be called with a parent + node to see if a range into that parent is acceptable. + */ + blockRange(e = this, n) { + if (e.pos < this.pos) + return e.blockRange(this); + for (let r = this.depth - (this.parent.inlineContent || this.pos == e.pos ? 1 : 0); r >= 0; r--) + if (e.pos <= this.end(r) && (!n || n(this.node(r)))) + return new T7(this, e, r); + return null; + } + /** + Query whether the given position shares the same parent node. + */ + sameParent(e) { + return this.pos - this.parentOffset == e.pos - e.parentOffset; + } + /** + Return the greater of this and the given position. + */ + max(e) { + return e.pos > this.pos ? e : this; + } + /** + Return the smaller of this and the given position. + */ + min(e) { + return e.pos < this.pos ? e : this; + } + /** + @internal + */ + toString() { + let e = ""; + for (let n = 1; n <= this.depth; n++) + e += (e ? "/" : "") + this.node(n).type.name + "_" + this.index(n - 1); + return e + ":" + this.parentOffset; + } + /** + @internal + */ + static resolve(e, n) { + if (!(n >= 0 && n <= e.content.size)) + throw new RangeError("Position " + n + " out of range"); + let r = [], i = 0, s = n; + for (let o = e; ; ) { + let { index: l, offset: a } = o.content.findIndex(s), u = s - a; + if (r.push(o, l, i + a), !u || (o = o.child(l), o.isText)) + break; + s = u - 1, i += a + 1; + } + return new e0(n, r, s); + } + /** + @internal + */ + static resolveCached(e, n) { + let r = P4.get(e); + if (r) + for (let s = 0; s < r.elts.length; s++) { + let o = r.elts[s]; + if (o.pos == n) + return o; + } + else + P4.set(e, r = new gw()); + let i = r.elts[r.i] = e0.resolve(e, n); + return r.i = (r.i + 1) % yw, i; + } +} +class gw { + constructor() { + this.elts = [], this.i = 0; + } +} +const yw = 12, P4 = /* @__PURE__ */ new WeakMap(); +class T7 { + /** + Construct a node range. `$from` and `$to` should point into the + same node until at least the given `depth`, since a node range + denotes an adjacent set of nodes in a single parent node. + */ + constructor(e, n, r) { + this.$from = e, this.$to = n, this.depth = r; + } + /** + The position at the start of the range. + */ + get start() { + return this.$from.before(this.depth + 1); + } + /** + The position at the end of the range. + */ + get end() { + return this.$to.after(this.depth + 1); + } + /** + The parent node that the range points into. + */ + get parent() { + return this.$from.node(this.depth); + } + /** + The start index of the range in the parent node. + */ + get startIndex() { + return this.$from.index(this.depth); + } + /** + The end index of the range in the parent node. + */ + get endIndex() { + return this.$to.indexAfter(this.depth); + } +} +const vw = /* @__PURE__ */ Object.create(null); +class Xn { + /** + @internal + */ + constructor(e, n, r, i = qe.none) { + this.type = e, this.attrs = n, this.marks = i, this.content = r || re.empty; + } + /** + The array of this node's child nodes. + */ + get children() { + return this.content.content; + } + /** + The size of this node, as defined by the integer-based [indexing + scheme](https://prosemirror.net/docs/guide/#doc.indexing). For text nodes, this is the + amount of characters. For other leaf nodes, it is one. For + non-leaf nodes, it is the size of the content plus two (the + start and end token). + */ + get nodeSize() { + return this.isLeaf ? 1 : 2 + this.content.size; + } + /** + The number of children that the node has. + */ + get childCount() { + return this.content.childCount; + } + /** + Get the child node at the given index. Raises an error when the + index is out of range. + */ + child(e) { + return this.content.child(e); + } + /** + Get the child node at the given index, if it exists. + */ + maybeChild(e) { + return this.content.maybeChild(e); + } + /** + Call `f` for every child node, passing the node, its offset + into this parent node, and its index. + */ + forEach(e) { + this.content.forEach(e); + } + /** + Invoke a callback for all descendant nodes recursively between + the given two positions that are relative to start of this + node's content. The callback is invoked with the node, its + position relative to the original node (method receiver), + its parent node, and its child index. When the callback returns + false for a given node, that node's children will not be + recursed over. The last parameter can be used to specify a + starting position to count from. + */ + nodesBetween(e, n, r, i = 0) { + this.content.nodesBetween(e, n, r, i, this); + } + /** + Call the given callback for every descendant node. Doesn't + descend into a node when the callback returns `false`. + */ + descendants(e) { + this.nodesBetween(0, this.content.size, e); + } + /** + Concatenates all the text nodes found in this fragment and its + children. + */ + get textContent() { + return this.isLeaf && this.type.spec.leafText ? this.type.spec.leafText(this) : this.textBetween(0, this.content.size, ""); + } + /** + Get all text between positions `from` and `to`. When + `blockSeparator` is given, it will be inserted to separate text + from different block nodes. If `leafText` is given, it'll be + inserted for every non-text leaf node encountered, otherwise + [`leafText`](https://prosemirror.net/docs/ref/#model.NodeSpec.leafText) will be used. + */ + textBetween(e, n, r, i) { + return this.content.textBetween(e, n, r, i); + } + /** + Returns this node's first child, or `null` if there are no + children. + */ + get firstChild() { + return this.content.firstChild; + } + /** + Returns this node's last child, or `null` if there are no + children. + */ + get lastChild() { + return this.content.lastChild; + } + /** + Test whether two nodes represent the same piece of document. + */ + eq(e) { + return this == e || this.sameMarkup(e) && this.content.eq(e.content); + } + /** + Compare the markup (type, attributes, and marks) of this node to + those of another. Returns `true` if both have the same markup. + */ + sameMarkup(e) { + return this.hasMarkup(e.type, e.attrs, e.marks); + } + /** + Check whether this node's markup correspond to the given type, + attributes, and marks. + */ + hasMarkup(e, n, r) { + return this.type == e && _c(this.attrs, n || e.defaultAttrs || vw) && qe.sameSet(this.marks, r || qe.none); + } + /** + Create a new node with the same markup as this node, containing + the given content (or empty, if no content is given). + */ + copy(e = null) { + return e == this.content ? this : new Xn(this.type, this.attrs, e, this.marks); + } + /** + Create a copy of this node, with the given set of marks instead + of the node's own marks. + */ + mark(e) { + return e == this.marks ? this : new Xn(this.type, this.attrs, this.content, e); + } + /** + Create a copy of this node with only the content between the + given positions. If `to` is not given, it defaults to the end of + the node. + */ + cut(e, n = this.content.size) { + return e == 0 && n == this.content.size ? this : this.copy(this.content.cut(e, n)); + } + /** + Cut out the part of the document between the given positions, and + return it as a `Slice` object. + */ + slice(e, n = this.content.size, r = !1) { + if (e == n) + return ae.empty; + let i = this.resolve(e), s = this.resolve(n), o = r ? 0 : i.sharedDepth(n), l = i.start(o), u = i.node(o).content.cut(i.pos - l, s.pos - l); + return new ae(u, i.depth - o, s.depth - o); + } + /** + Replace the part of the document between the given positions with + the given slice. The slice must 'fit', meaning its open sides + must be able to connect to the surrounding content, and its + content nodes must be valid children for the node they are placed + into. If any of this is violated, an error of type + [`ReplaceError`](https://prosemirror.net/docs/ref/#model.ReplaceError) is thrown. + */ + replace(e, n, r) { + return pw(this.resolve(e), this.resolve(n), r); + } + /** + Find the node directly after the given position. + */ + nodeAt(e) { + for (let n = this; ; ) { + let { index: r, offset: i } = n.content.findIndex(e); + if (n = n.maybeChild(r), !n) + return null; + if (i == e || n.isText) + return n; + e -= i + 1; + } + } + /** + Find the (direct) child node after the given offset, if any, + and return it along with its index and offset relative to this + node. + */ + childAfter(e) { + let { index: n, offset: r } = this.content.findIndex(e); + return { node: this.content.maybeChild(n), index: n, offset: r }; + } + /** + Find the (direct) child node before the given offset, if any, + and return it along with its index and offset relative to this + node. + */ + childBefore(e) { + if (e == 0) + return { node: null, index: 0, offset: 0 }; + let { index: n, offset: r } = this.content.findIndex(e); + if (r < e) + return { node: this.content.child(n), index: n, offset: r }; + let i = this.content.child(n - 1); + return { node: i, index: n - 1, offset: r - i.nodeSize }; + } + /** + Resolve the given position in the document, returning an + [object](https://prosemirror.net/docs/ref/#model.ResolvedPos) with information about its context. + */ + resolve(e) { + return e0.resolveCached(this, e); + } + /** + @internal + */ + resolveNoCache(e) { + return e0.resolve(this, e); + } + /** + Test whether a given mark or mark type occurs in this document + between the two given positions. + */ + rangeHasMark(e, n, r) { + let i = !1; + return n > e && this.nodesBetween(e, n, (s) => (r.isInSet(s.marks) && (i = !0), !i)), i; + } + /** + True when this is a block (non-inline node) + */ + get isBlock() { + return this.type.isBlock; + } + /** + True when this is a textblock node, a block node with inline + content. + */ + get isTextblock() { + return this.type.isTextblock; + } + /** + True when this node allows inline content. + */ + get inlineContent() { + return this.type.inlineContent; + } + /** + True when this is an inline node (a text node or a node that can + appear among text). + */ + get isInline() { + return this.type.isInline; + } + /** + True when this is a text node. + */ + get isText() { + return this.type.isText; + } + /** + True when this is a leaf node. + */ + get isLeaf() { + return this.type.isLeaf; + } + /** + True when this is an atom, i.e. when it does not have directly + editable content. This is usually the same as `isLeaf`, but can + be configured with the [`atom` property](https://prosemirror.net/docs/ref/#model.NodeSpec.atom) + on a node's spec (typically used when the node is displayed as + an uneditable [node view](https://prosemirror.net/docs/ref/#view.NodeView)). + */ + get isAtom() { + return this.type.isAtom; + } + /** + Return a string representation of this node for debugging + purposes. + */ + 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() + ")"), E7(this.marks, e); + } + /** + Get the content match in this node at the given index. + */ + contentMatchAt(e) { + let n = this.type.contentMatch.matchFragment(this.content, 0, e); + if (!n) + throw new Error("Called contentMatchAt on a node with invalid content"); + return n; + } + /** + Test whether replacing the range between `from` and `to` (by + child index) with the given replacement fragment (which defaults + to the empty fragment) would leave the node's content valid. You + can optionally pass `start` and `end` indices into the + replacement fragment. + */ + canReplace(e, n, r = re.empty, i = 0, s = r.childCount) { + let o = this.contentMatchAt(e).matchFragment(r, i, s), l = o && o.matchFragment(this.content, n); + if (!l || !l.validEnd) + return !1; + for (let a = i; a < s; a++) + if (!this.type.allowsMarks(r.child(a).marks)) + return !1; + return !0; + } + /** + Test whether replacing the range `from` to `to` (by index) with + a node of the given type would leave the node's content valid. + */ + canReplaceWith(e, n, r, i) { + if (i && !this.type.allowsMarks(i)) + return !1; + let s = this.contentMatchAt(e).matchType(r), o = s && s.matchFragment(this.content, n); + return o ? o.validEnd : !1; + } + /** + Test whether the given node's content could be appended to this + node. If that node is empty, this will only return true if there + is at least one node type that can appear in both nodes (to avoid + merging completely incompatible nodes). + */ + canAppend(e) { + return e.content.size ? this.canReplace(this.childCount, this.childCount, e.content) : this.type.compatibleContent(e.type); + } + /** + Check whether this node and its descendants conform to the + schema, and raise an exception when they do not. + */ + check() { + this.type.checkContent(this.content), this.type.checkAttrs(this.attrs); + let e = qe.none; + for (let n = 0; n < this.marks.length; n++) { + let r = this.marks[n]; + r.type.checkAttrs(r.attrs), e = r.addToSet(e); + } + if (!qe.sameSet(e, this.marks)) + throw new RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map((n) => n.type.name)}`); + this.content.forEach((n) => n.check()); + } + /** + Return a JSON-serializeable representation of this node. + */ + toJSON() { + let e = { type: this.type.name }; + for (let n 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((n) => n.toJSON())), e; + } + /** + Deserialize a node from its JSON representation. + */ + static fromJSON(e, n) { + if (!n) + throw new RangeError("Invalid input for Node.fromJSON"); + let r; + if (n.marks) { + if (!Array.isArray(n.marks)) + throw new RangeError("Invalid mark data for Node.fromJSON"); + r = n.marks.map(e.markFromJSON); + } + if (n.type == "text") { + if (typeof n.text != "string") + throw new RangeError("Invalid text node in JSON"); + return e.text(n.text, r); + } + let i = re.fromJSON(e, n.content), s = e.nodeType(n.type).create(n.attrs, i, r); + return s.type.checkAttrs(s.attrs), s; + } +} +Xn.prototype.text = void 0; +let bw = class Rf extends Xn { + /** + @internal + */ + constructor(e, n, r, i) { + if (super(e, n, null, i), !r) + throw new RangeError("Empty text nodes are not allowed"); + this.text = r; + } + toString() { + return this.type.spec.toDebugString ? this.type.spec.toDebugString(this) : E7(this.marks, JSON.stringify(this.text)); + } + get textContent() { + return this.text; + } + textBetween(e, n) { + return this.text.slice(e, n); + } + get nodeSize() { + return this.text.length; + } + mark(e) { + return e == this.marks ? this : new Rf(this.type, this.attrs, this.text, e); + } + withText(e) { + return e == this.text ? this : new Rf(this.type, this.attrs, e, this.marks); + } + cut(e = 0, n = this.text.length) { + return e == 0 && n == this.text.length ? this : this.withText(this.text.slice(e, n)); + } + eq(e) { + return this.sameMarkup(e) && this.text == e.text; + } + toJSON() { + let e = super.toJSON(); + return e.text = this.text, e; + } +}; +function E7(t, e) { + for (let n = t.length - 1; n >= 0; n--) + e = t[n].type.name + "(" + e + ")"; + return e; +} +class uo { + /** + @internal + */ + constructor(e) { + this.validEnd = e, this.next = [], this.wrapCache = []; + } + /** + @internal + */ + static parse(e, n) { + let r = new ww(e, n); + if (r.next == null) + return uo.empty; + let i = O7(r); + r.next && r.err("Unexpected trailing text"); + let s = Tw(Mw(i)); + return Ew(s, r), s; + } + /** + Match a node type, returning a match after that node if + successful. + */ + matchType(e) { + for (let n = 0; n < this.next.length; n++) + if (this.next[n].type == e) + return this.next[n].next; + return null; + } + /** + Try to match a fragment. Returns the resulting match when + successful. + */ + matchFragment(e, n = 0, r = e.childCount) { + let i = this; + for (let s = n; i && s < r; s++) + i = i.matchType(e.child(s).type); + return i; + } + /** + @internal + */ + get inlineContent() { + return this.next.length != 0 && this.next[0].type.isInline; + } + /** + Get the first matching node type at this match position that can + be generated. + */ + get defaultType() { + for (let e = 0; e < this.next.length; e++) { + let { type: n } = this.next[e]; + if (!(n.isText || n.hasRequiredAttrs())) + return n; + } + return null; + } + /** + @internal + */ + compatible(e) { + for (let n = 0; n < this.next.length; n++) + for (let r = 0; r < e.next.length; r++) + if (this.next[n].type == e.next[r].type) + return !0; + return !1; + } + /** + Try to match the given fragment, and if that fails, see if it can + be made to match by inserting nodes in front of it. When + successful, return a fragment of inserted nodes (which may be + empty if nothing had to be inserted). When `toEnd` is true, only + return a fragment if the resulting match goes to the end of the + content expression. + */ + fillBefore(e, n = !1, r = 0) { + let i = [this]; + function s(o, l) { + let a = o.matchFragment(e, r); + if (a && (!n || a.validEnd)) + return re.from(l.map((u) => u.createAndFill())); + for (let u = 0; u < o.next.length; u++) { + let { type: c, next: h } = o.next[u]; + if (!(c.isText || c.hasRequiredAttrs()) && i.indexOf(h) == -1) { + i.push(h); + let d = s(h, l.concat(c)); + if (d) + return d; + } + } + return null; + } + return s(this, []); + } + /** + Find a set of wrapping node types that would allow a node of the + given type to appear at this position. The result may be empty + (when it fits directly) and will be null when no such wrapping + exists. + */ + findWrapping(e) { + for (let r = 0; r < this.wrapCache.length; r += 2) + if (this.wrapCache[r] == e) + return this.wrapCache[r + 1]; + let n = this.computeWrapping(e); + return this.wrapCache.push(e, n), n; + } + /** + @internal + */ + computeWrapping(e) { + let n = /* @__PURE__ */ Object.create(null), r = [{ match: this, type: null, via: null }]; + for (; r.length; ) { + let i = r.shift(), s = i.match; + if (s.matchType(e)) { + let o = []; + for (let l = i; l.type; l = l.via) + o.push(l.type); + return o.reverse(); + } + for (let o = 0; o < s.next.length; o++) { + let { type: l, next: a } = s.next[o]; + !l.isLeaf && !l.hasRequiredAttrs() && !(l.name in n) && (!i.type || a.validEnd) && (r.push({ match: l.contentMatch, type: l, via: i }), n[l.name] = !0); + } + } + return null; + } + /** + The number of outgoing edges this node has in the finite + automaton that describes the content expression. + */ + get edgeCount() { + return this.next.length; + } + /** + Get the _n_​th outgoing edge from this node in the finite + automaton that describes the content expression. + */ + edge(e) { + if (e >= this.next.length) + throw new RangeError(`There's no ${e}th edge in this content match`); + return this.next[e]; + } + /** + @internal + */ + toString() { + let e = []; + function n(r) { + e.push(r); + for (let i = 0; i < r.next.length; i++) + e.indexOf(r.next[i].next) == -1 && n(r.next[i].next); + } + return n(this), e.map((r, i) => { + let s = i + (r.validEnd ? "*" : " ") + " "; + for (let o = 0; o < r.next.length; o++) + s += (o ? ", " : "") + r.next[o].type.name + "->" + e.indexOf(r.next[o].next); + return s; + }).join(` +`); + } +} +uo.empty = new uo(!0); +class ww { + constructor(e, n) { + this.string = e, this.nodeTypes = n, 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 new SyntaxError(e + " (in content expression '" + this.string + "')"); + } +} +function O7(t) { + let e = []; + do + e.push(kw(t)); + while (t.eat("|")); + return e.length == 1 ? e[0] : { type: "choice", exprs: e }; +} +function kw(t) { + let e = []; + do + e.push(xw(t)); + while (t.next && t.next != ")" && t.next != "|"); + return e.length == 1 ? e[0] : { type: "seq", exprs: e }; +} +function xw(t) { + let e = Nw(t); + for (; ; ) + if (t.eat("+")) + e = { type: "plus", expr: e }; + else if (t.eat("*")) + e = { type: "star", expr: e }; + else if (t.eat("?")) + e = { type: "opt", expr: e }; + else if (t.eat("{")) + e = Sw(t, e); + else + break; + return e; +} +function B4(t) { + /\D/.test(t.next) && t.err("Expected number, got '" + t.next + "'"); + let e = Number(t.next); + return t.pos++, e; +} +function Sw(t, e) { + let n = B4(t), r = n; + return t.eat(",") && (t.next != "}" ? r = B4(t) : r = -1), t.eat("}") || t.err("Unclosed braced range"), { type: "range", min: n, max: r, expr: e }; +} +function Cw(t, e) { + let n = t.nodeTypes, r = n[e]; + if (r) + return [r]; + let i = []; + for (let s in n) { + let o = n[s]; + o.isInGroup(e) && i.push(o); + } + return i.length == 0 && t.err("No node type or group '" + e + "' found"), i; +} +function Nw(t) { + if (t.eat("(")) { + let e = O7(t); + return t.eat(")") || t.err("Missing closing paren"), e; + } else if (/\W/.test(t.next)) + t.err("Unexpected token '" + t.next + "'"); + else { + let e = Cw(t, t.next).map((n) => (t.inline == null ? t.inline = n.isInline : t.inline != n.isInline && t.err("Mixing inline and block content"), { type: "name", value: n })); + return t.pos++, e.length == 1 ? e[0] : { type: "choice", exprs: e }; + } +} +function Mw(t) { + let e = [[]]; + return i(s(t, 0), n()), e; + function n() { + return e.push([]) - 1; + } + function r(o, l, a) { + let u = { term: a, to: l }; + return e[o].push(u), u; + } + function i(o, l) { + o.forEach((a) => a.to = l); + } + function s(o, l) { + if (o.type == "choice") + return o.exprs.reduce((a, u) => a.concat(s(u, l)), []); + if (o.type == "seq") + for (let a = 0; ; a++) { + let u = s(o.exprs[a], l); + if (a == o.exprs.length - 1) + return u; + i(u, l = n()); + } + else if (o.type == "star") { + let a = n(); + return r(l, a), i(s(o.expr, a), a), [r(a)]; + } else if (o.type == "plus") { + let a = n(); + return i(s(o.expr, l), a), i(s(o.expr, a), a), [r(a)]; + } else { + if (o.type == "opt") + return [r(l)].concat(s(o.expr, l)); + if (o.type == "range") { + let a = l; + for (let u = 0; u < o.min; u++) { + let c = n(); + i(s(o.expr, a), c), a = c; + } + if (o.max == -1) + i(s(o.expr, a), a); + else + for (let u = o.min; u < o.max; u++) { + let c = n(); + r(a, c), i(s(o.expr, a), c), a = c; + } + return [r(a)]; + } else { + if (o.type == "name") + return [r(l, void 0, o.value)]; + throw new Error("Unknown expr type"); + } + } + } +} +function A7(t, e) { + return e - t; +} +function L4(t, e) { + let n = []; + return r(e), n.sort(A7); + function r(i) { + let s = t[i]; + if (s.length == 1 && !s[0].term) + return r(s[0].to); + n.push(i); + for (let o = 0; o < s.length; o++) { + let { term: l, to: a } = s[o]; + !l && n.indexOf(a) == -1 && r(a); + } + } +} +function Tw(t) { + let e = /* @__PURE__ */ Object.create(null); + return n(L4(t, 0)); + function n(r) { + let i = []; + r.forEach((o) => { + t[o].forEach(({ term: l, to: a }) => { + if (!l) + return; + let u; + for (let c = 0; c < i.length; c++) + i[c][0] == l && (u = i[c][1]); + L4(t, a).forEach((c) => { + u || i.push([l, u = []]), u.indexOf(c) == -1 && u.push(c); + }); + }); + }); + let s = e[r.join(",")] = new uo(r.indexOf(t.length - 1) > -1); + for (let o = 0; o < i.length; o++) { + let l = i[o][1].sort(A7); + s.next.push({ type: i[o][0], next: e[l.join(",")] || n(l) }); + } + return s; + } +} +function Ew(t, e) { + for (let n = 0, r = [t]; n < r.length; n++) { + let i = r[n], s = !i.validEnd, o = []; + for (let l = 0; l < i.next.length; l++) { + let { type: a, next: u } = i.next[l]; + o.push(a.name), s && !(a.isText || a.hasRequiredAttrs()) && (s = !1), r.indexOf(u) == -1 && r.push(u); + } + s && e.err("Only non-generatable nodes (" + o.join(", ") + ") in a required position (see https://prosemirror.net/docs/guide/#generatable)"); + } +} +function I7(t) { + let e = /* @__PURE__ */ Object.create(null); + for (let n in t) { + let r = t[n]; + if (!r.hasDefault) + return null; + e[n] = r.default; + } + return e; +} +function D7(t, e) { + let n = /* @__PURE__ */ Object.create(null); + for (let r in t) { + let i = e && e[r]; + if (i === void 0) { + let s = t[r]; + if (s.hasDefault) + i = s.default; + else + throw new RangeError("No value supplied for attribute " + r); + } + n[r] = i; + } + return n; +} +function _7(t, e, n, r) { + for (let i in e) + if (!(i in t)) + throw new RangeError(`Unsupported attribute ${i} for ${n} of type ${i}`); + for (let i in t) { + let s = t[i]; + s.validate && s.validate(e[i]); + } +} +function R7(t, e) { + let n = /* @__PURE__ */ Object.create(null); + if (e) + for (let r in e) + n[r] = new Aw(t, r, e[r]); + return n; +} +let Pc = class z7 { + /** + @internal + */ + constructor(e, n, r) { + this.name = e, this.schema = n, this.spec = r, this.markSet = null, this.groups = r.group ? r.group.split(" ") : [], this.attrs = R7(e, r.attrs), this.defaultAttrs = I7(this.attrs), this.contentMatch = null, this.inlineContent = null, this.isBlock = !(r.inline || e == "text"), this.isText = e == "text"; + } + /** + True if this is an inline type. + */ + get isInline() { + return !this.isBlock; + } + /** + True if this is a textblock type, a block that contains inline + content. + */ + get isTextblock() { + return this.isBlock && this.inlineContent; + } + /** + True for node types that allow no content. + */ + get isLeaf() { + return this.contentMatch == uo.empty; + } + /** + True when this node is an atom, i.e. when it does not have + directly editable content. + */ + get isAtom() { + return this.isLeaf || !!this.spec.atom; + } + /** + Return true when this node type is part of the given + [group](https://prosemirror.net/docs/ref/#model.NodeSpec.group). + */ + isInGroup(e) { + return this.groups.indexOf(e) > -1; + } + /** + The node type's [whitespace](https://prosemirror.net/docs/ref/#model.NodeSpec.whitespace) option. + */ + get whitespace() { + return this.spec.whitespace || (this.spec.code ? "pre" : "normal"); + } + /** + Tells you whether this node type has any required attributes. + */ + hasRequiredAttrs() { + for (let e in this.attrs) + if (this.attrs[e].isRequired) + return !0; + return !1; + } + /** + Indicates whether this node allows some of the same content as + the given node type. + */ + compatibleContent(e) { + return this == e || this.contentMatch.compatible(e.contentMatch); + } + /** + @internal + */ + computeAttrs(e) { + return !e && this.defaultAttrs ? this.defaultAttrs : D7(this.attrs, e); + } + /** + Create a `Node` of this type. The given attributes are + checked and defaulted (you can pass `null` to use the type's + defaults entirely, if no required attributes exist). `content` + may be a `Fragment`, a node, an array of nodes, or + `null`. Similarly `marks` may be `null` to default to the empty + set of marks. + */ + create(e = null, n, r) { + if (this.isText) + throw new Error("NodeType.create can't construct text nodes"); + return new Xn(this, this.computeAttrs(e), re.from(n), qe.setFrom(r)); + } + /** + Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but check the given content + against the node type's content restrictions, and throw an error + if it doesn't match. + */ + createChecked(e = null, n, r) { + return n = re.from(n), this.checkContent(n), new Xn(this, this.computeAttrs(e), n, qe.setFrom(r)); + } + /** + Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but see if it is + necessary to add nodes to the start or end of the given fragment + to make it fit the node. If no fitting wrapping can be found, + return null. Note that, due to the fact that required nodes can + always be created, this will always succeed if you pass null or + `Fragment.empty` as content. + */ + createAndFill(e = null, n, r) { + if (e = this.computeAttrs(e), n = re.from(n), n.size) { + let o = this.contentMatch.fillBefore(n); + if (!o) + return null; + n = o.append(n); + } + let i = this.contentMatch.matchFragment(n), s = i && i.fillBefore(re.empty, !0); + return s ? new Xn(this, e, n.append(s), qe.setFrom(r)) : null; + } + /** + Returns true if the given fragment is valid content for this node + type. + */ + validContent(e) { + let n = this.contentMatch.matchFragment(e); + if (!n || !n.validEnd) + return !1; + for (let r = 0; r < e.childCount; r++) + if (!this.allowsMarks(e.child(r).marks)) + return !1; + return !0; + } + /** + Throws a RangeError if the given fragment is not valid content for this + node type. + @internal + */ + checkContent(e) { + if (!this.validContent(e)) + throw new RangeError(`Invalid content for node ${this.name}: ${e.toString().slice(0, 50)}`); + } + /** + @internal + */ + checkAttrs(e) { + _7(this.attrs, e, "node", this.name); + } + /** + Check whether the given mark type is allowed in this node. + */ + allowsMarkType(e) { + return this.markSet == null || this.markSet.indexOf(e) > -1; + } + /** + Test whether the given set of marks are allowed in this node. + */ + allowsMarks(e) { + if (this.markSet == null) + return !0; + for (let n = 0; n < e.length; n++) + if (!this.allowsMarkType(e[n].type)) + return !1; + return !0; + } + /** + Removes the marks that are not allowed in this node from the given set. + */ + allowedMarks(e) { + if (this.markSet == null) + return e; + let n; + for (let r = 0; r < e.length; r++) + this.allowsMarkType(e[r].type) ? n && n.push(e[r]) : n || (n = e.slice(0, r)); + return n ? n.length ? n : qe.none : e; + } + /** + @internal + */ + static compile(e, n) { + let r = /* @__PURE__ */ Object.create(null); + e.forEach((s, o) => r[s] = new z7(s, n, o)); + let i = n.spec.topNode || "doc"; + if (!r[i]) + throw new RangeError("Schema is missing its top node type ('" + i + "')"); + if (!r.text) + throw new RangeError("Every schema needs a 'text' type"); + for (let s in r.text.attrs) + throw new RangeError("The text node type should not have attributes"); + return r; + } +}; +function Ow(t, e, n) { + let r = n.split("|"); + return (i) => { + let s = i === null ? "null" : typeof i; + if (r.indexOf(s) < 0) + throw new RangeError(`Expected value of type ${r} for attribute ${e} on type ${t}, got ${s}`); + }; +} +class Aw { + constructor(e, n, r) { + this.hasDefault = Object.prototype.hasOwnProperty.call(r, "default"), this.default = r.default, this.validate = typeof r.validate == "string" ? Ow(e, n, r.validate) : r.validate; + } + get isRequired() { + return !this.hasDefault; + } +} +class kh { + /** + @internal + */ + constructor(e, n, r, i) { + this.name = e, this.rank = n, this.schema = r, this.spec = i, this.attrs = R7(e, i.attrs), this.excluded = null; + let s = I7(this.attrs); + this.instance = s ? new qe(this, s) : null; + } + /** + Create a mark of this type. `attrs` may be `null` or an object + containing only some of the mark's attributes. The others, if + they have defaults, will be added. + */ + create(e = null) { + return !e && this.instance ? this.instance : new qe(this, D7(this.attrs, e)); + } + /** + @internal + */ + static compile(e, n) { + let r = /* @__PURE__ */ Object.create(null), i = 0; + return e.forEach((s, o) => r[s] = new kh(s, i++, n, o)), r; + } + /** + When there is a mark of this type in the given set, a new set + without it is returned. Otherwise, the input set is returned. + */ + removeFromSet(e) { + for (var n = 0; n < e.length; n++) + e[n].type == this && (e = e.slice(0, n).concat(e.slice(n + 1)), n--); + return e; + } + /** + Tests whether there is a mark of this type in the given set. + */ + isInSet(e) { + for (let n = 0; n < e.length; n++) + if (e[n].type == this) + return e[n]; + } + /** + @internal + */ + checkAttrs(e) { + _7(this.attrs, e, "mark", this.name); + } + /** + Queries whether a given mark type is + [excluded](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) by this one. + */ + excludes(e) { + return this.excluded.indexOf(e) > -1; + } +} +class Iw { + /** + Construct a schema from a schema [specification](https://prosemirror.net/docs/ref/#model.SchemaSpec). + */ + constructor(e) { + this.linebreakReplacement = null, this.cached = /* @__PURE__ */ Object.create(null); + let n = this.spec = {}; + for (let i in e) + n[i] = e[i]; + n.nodes = jt.from(e.nodes), n.marks = jt.from(e.marks || {}), this.nodes = Pc.compile(this.spec.nodes, this), this.marks = kh.compile(this.spec.marks, this); + let r = /* @__PURE__ */ Object.create(null); + for (let i in this.nodes) { + if (i in this.marks) + throw new RangeError(i + " can not be both a node and a mark"); + let s = this.nodes[i], o = s.spec.content || "", l = s.spec.marks; + if (s.contentMatch = r[o] || (r[o] = uo.parse(o, this.nodes)), s.inlineContent = s.contentMatch.inlineContent, s.spec.linebreakReplacement) { + if (this.linebreakReplacement) + throw new RangeError("Multiple linebreak nodes defined"); + if (!s.isInline || !s.isLeaf) + throw new RangeError("Linebreak replacement nodes must be inline leaf nodes"); + this.linebreakReplacement = s; + } + s.markSet = l == "_" ? null : l ? F4(this, l.split(" ")) : l == "" || !s.inlineContent ? [] : null; + } + for (let i in this.marks) { + let s = this.marks[i], o = s.spec.excludes; + s.excluded = o == null ? [s] : o == "" ? [] : F4(this, o.split(" ")); + } + this.nodeFromJSON = (i) => Xn.fromJSON(this, i), this.markFromJSON = (i) => qe.fromJSON(this, i), this.topNodeType = this.nodes[this.spec.topNode || "doc"], this.cached.wrappings = /* @__PURE__ */ Object.create(null); + } + /** + Create a node in this schema. The `type` may be a string or a + `NodeType` instance. Attributes will be extended with defaults, + `content` may be a `Fragment`, `null`, a `Node`, or an array of + nodes. + */ + node(e, n = null, r, i) { + if (typeof e == "string") + e = this.nodeType(e); + else if (e instanceof Pc) { + if (e.schema != this) + throw new RangeError("Node type from different schema used (" + e.name + ")"); + } else throw new RangeError("Invalid node type: " + e); + return e.createChecked(n, r, i); + } + /** + Create a text node in the schema. Empty text nodes are not + allowed. + */ + text(e, n) { + let r = this.nodes.text; + return new bw(r, r.defaultAttrs, e, qe.setFrom(n)); + } + /** + Create a mark with the given type and attributes. + */ + mark(e, n) { + return typeof e == "string" && (e = this.marks[e]), e.create(n); + } + /** + @internal + */ + nodeType(e) { + let n = this.nodes[e]; + if (!n) + throw new RangeError("Unknown node type: " + e); + return n; + } +} +function F4(t, e) { + let n = []; + for (let r = 0; r < e.length; r++) { + let i = e[r], s = t.marks[i], o = s; + if (s) + n.push(s); + else + for (let l in t.marks) { + let a = t.marks[l]; + (i == "_" || a.spec.group && a.spec.group.split(" ").indexOf(i) > -1) && n.push(o = a); + } + if (!o) + throw new SyntaxError("Unknown mark type: '" + e[r] + "'"); + } + return n; +} +function Dw(t) { + return t.tag != null; +} +function _w(t) { + return t.style != null; +} +class co { + /** + Create a parser that targets the given schema, using the given + parsing rules. + */ + constructor(e, n) { + this.schema = e, this.rules = n, this.tags = [], this.styles = []; + let r = this.matchedStyles = []; + n.forEach((i) => { + if (Dw(i)) + this.tags.push(i); + else if (_w(i)) { + let s = /[^=]*/.exec(i.style)[0]; + r.indexOf(s) < 0 && r.push(s), this.styles.push(i); + } + }), this.normalizeLists = !this.tags.some((i) => { + if (!/^(ul|ol)\b/.test(i.tag) || !i.node) + return !1; + let s = e.nodes[i.node]; + return s.contentMatch.matchType(s); + }); + } + /** + Parse a document from the content of a DOM node. + */ + parse(e, n = {}) { + let r = new H4(this, n, !1); + return r.addAll(e, qe.none, n.from, n.to), r.finish(); + } + /** + Parses the content of the given DOM node, like + [`parse`](https://prosemirror.net/docs/ref/#model.DOMParser.parse), and takes the same set of + options. But unlike that method, which produces a whole node, + this one returns a slice that is open at the sides, meaning that + the schema constraints aren't applied to the start of nodes to + the left of the input and the end of nodes at the end. + */ + parseSlice(e, n = {}) { + let r = new H4(this, n, !0); + return r.addAll(e, qe.none, n.from, n.to), ae.maxOpen(r.finish()); + } + /** + @internal + */ + matchTag(e, n, r) { + for (let i = r ? this.tags.indexOf(r) + 1 : 0; i < this.tags.length; i++) { + let s = this.tags[i]; + if (Pw(e, s.tag) && (s.namespace === void 0 || e.namespaceURI == s.namespace) && (!s.context || n.matchesContext(s.context))) { + if (s.getAttrs) { + let o = s.getAttrs(e); + if (o === !1) + continue; + s.attrs = o || void 0; + } + return s; + } + } + } + /** + @internal + */ + matchStyle(e, n, r, i) { + for (let s = i ? this.styles.indexOf(i) + 1 : 0; s < this.styles.length; s++) { + let o = this.styles[s], l = o.style; + if (!(l.indexOf(e) != 0 || o.context && !r.matchesContext(o.context) || // Test that the style string either precisely matches the prop, + // or has an '=' sign after the prop, followed by the given + // value. + l.length > e.length && (l.charCodeAt(e.length) != 61 || l.slice(e.length + 1) != n))) { + if (o.getAttrs) { + let a = o.getAttrs(n); + if (a === !1) + continue; + o.attrs = a || void 0; + } + return o; + } + } + } + /** + @internal + */ + static schemaRules(e) { + let n = []; + function r(i) { + let s = i.priority == null ? 50 : i.priority, o = 0; + for (; o < n.length; o++) { + let l = n[o]; + if ((l.priority == null ? 50 : l.priority) < s) + break; + } + n.splice(o, 0, i); + } + for (let i in e.marks) { + let s = e.marks[i].spec.parseDOM; + s && s.forEach((o) => { + r(o = $4(o)), o.mark || o.ignore || o.clearMark || (o.mark = i); + }); + } + for (let i in e.nodes) { + let s = e.nodes[i].spec.parseDOM; + s && s.forEach((o) => { + r(o = $4(o)), o.node || o.ignore || o.mark || (o.node = i); + }); + } + return n; + } + /** + Construct a DOM parser using the parsing rules listed in a + schema's [node specs](https://prosemirror.net/docs/ref/#model.NodeSpec.parseDOM), reordered by + [priority](https://prosemirror.net/docs/ref/#model.GenericParseRule.priority). + */ + static fromSchema(e) { + return e.cached.domParser || (e.cached.domParser = new co(e, co.schemaRules(e))); + } +} +const P7 = { + 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 +}, Rw = { + head: !0, + noscript: !0, + object: !0, + script: !0, + style: !0, + title: !0 +}, B7 = { ol: !0, ul: !0 }, t0 = 1, zf = 2, Aa = 4; +function V4(t, e, n) { + return e != null ? (e ? t0 : 0) | (e === "full" ? zf : 0) : t && t.whitespace == "pre" ? t0 | zf : n & ~Aa; +} +class wu { + constructor(e, n, r, i, s, o) { + this.type = e, this.attrs = n, this.marks = r, this.solid = i, this.options = o, this.content = [], this.activeMarks = qe.none, this.match = s || (o & Aa ? null : e.contentMatch); + } + findWrapping(e) { + if (!this.match) { + if (!this.type) + return []; + let n = this.type.contentMatch.fillBefore(re.from(e)); + if (n) + this.match = this.type.contentMatch.matchFragment(n); + else { + let r = this.type.contentMatch, i; + return (i = r.findWrapping(e.type)) ? (this.match = r, i) : null; + } + } + return this.match.findWrapping(e.type); + } + finish(e) { + if (!(this.options & t0)) { + let r = this.content[this.content.length - 1], i; + if (r && r.isText && (i = /[ \t\r\n\u000c]+$/.exec(r.text))) { + let s = r; + r.text.length == i[0].length ? this.content.pop() : this.content[this.content.length - 1] = s.withText(s.text.slice(0, s.text.length - i[0].length)); + } + } + let n = re.from(this.content); + return !e && this.match && (n = n.append(this.match.fillBefore(re.empty, !0))), this.type ? this.type.create(this.attrs, n, this.marks) : n; + } + inlineContext(e) { + return this.type ? this.type.inlineContent : this.content.length ? this.content[0].isInline : e.parentNode && !P7.hasOwnProperty(e.parentNode.nodeName.toLowerCase()); + } +} +class H4 { + constructor(e, n, r) { + this.parser = e, this.options = n, this.isOpen = r, this.open = 0, this.localPreserveWS = !1; + let i = n.topNode, s, o = V4(null, n.preserveWhitespace, 0) | (r ? Aa : 0); + i ? s = new wu(i.type, i.attrs, qe.none, !0, n.topMatch || i.type.contentMatch, o) : r ? s = new wu(null, null, qe.none, !0, null, o) : s = new wu(e.schema.topNodeType, null, qe.none, !0, null, o), this.nodes = [s], this.find = n.findPositions, this.needsBlock = !1; + } + get top() { + return this.nodes[this.open]; + } + // Add a DOM node to the content. Text is inserted as text node, + // otherwise, the node is passed to `addElement` or, if it has a + // `style` attribute, `addElementWithStyles`. + addDOM(e, n) { + e.nodeType == 3 ? this.addTextNode(e, n) : e.nodeType == 1 && this.addElement(e, n); + } + addTextNode(e, n) { + let r = e.nodeValue, i = this.top, s = i.options & zf ? "full" : this.localPreserveWS || (i.options & t0) > 0, { schema: o } = this.parser; + if (s === "full" || i.inlineContext(e) || /[^ \t\r\n\u000c]/.test(r)) { + if (s) + if (s === "full") + r = r.replace(/\r\n?/g, ` +`); + else if (o.linebreakReplacement && /[\r\n]/.test(r) && this.top.findWrapping(o.linebreakReplacement.create())) { + let l = r.split(/\r?\n|\r/); + for (let a = 0; a < l.length; a++) + a && this.insertNode(o.linebreakReplacement.create(), n, !0), l[a] && this.insertNode(o.text(l[a]), n, !/\S/.test(l[a])); + r = ""; + } else + r = r.replace(/\r?\n|\r/g, " "); + else if (r = r.replace(/[ \t\r\n\u000c]+/g, " "), /^[ \t\r\n\u000c]/.test(r) && this.open == this.nodes.length - 1) { + let l = i.content[i.content.length - 1], a = e.previousSibling; + (!l || a && a.nodeName == "BR" || l.isText && /[ \t\r\n\u000c]$/.test(l.text)) && (r = r.slice(1)); + } + r && this.insertNode(o.text(r), n, !/\S/.test(r)), this.findInText(e); + } else + this.findInside(e); + } + // Try to find a handler for the given tag and use that to parse. If + // none is found, the element's content nodes are added directly. + addElement(e, n, r) { + let i = this.localPreserveWS, s = this.top; + (e.tagName == "PRE" || /pre/.test(e.style && e.style.whiteSpace)) && (this.localPreserveWS = !0); + let o = e.nodeName.toLowerCase(), l; + B7.hasOwnProperty(o) && this.parser.normalizeLists && zw(e); + let a = this.options.ruleFromNode && this.options.ruleFromNode(e) || (l = this.parser.matchTag(e, this, r)); + e: if (a ? a.ignore : Rw.hasOwnProperty(o)) + this.findInside(e), this.ignoreFallback(e, n); + else if (!a || a.skip || a.closeParent) { + a && a.closeParent ? this.open = Math.max(0, this.open - 1) : a && a.skip.nodeType && (e = a.skip); + let u, c = this.needsBlock; + if (P7.hasOwnProperty(o)) + s.content.length && s.content[0].isInline && this.open && (this.open--, s = this.top), u = !0, s.type || (this.needsBlock = !0); + else if (!e.firstChild) { + this.leafFallback(e, n); + break e; + } + let h = a && a.skip ? n : this.readStyles(e, n); + h && this.addAll(e, h), u && this.sync(s), this.needsBlock = c; + } else { + let u = this.readStyles(e, n); + u && this.addElementByRule(e, a, u, a.consuming === !1 ? l : void 0); + } + this.localPreserveWS = i; + } + // Called for leaf DOM nodes that would otherwise be ignored + leafFallback(e, n) { + e.nodeName == "BR" && this.top.type && this.top.type.inlineContent && this.addTextNode(e.ownerDocument.createTextNode(` +`), n); + } + // Called for ignored nodes + ignoreFallback(e, n) { + e.nodeName == "BR" && (!this.top.type || !this.top.type.inlineContent) && this.findPlace(this.parser.schema.text("-"), n, !0); + } + // Run any style parser associated with the node's styles. Either + // return an updated array of marks, or null to indicate some of the + // styles had a rule with `ignore` set. + readStyles(e, n) { + let r = e.style; + if (r && r.length) + for (let i = 0; i < this.parser.matchedStyles.length; i++) { + let s = this.parser.matchedStyles[i], o = r.getPropertyValue(s); + if (o) + for (let l = void 0; ; ) { + let a = this.parser.matchStyle(s, o, this, l); + if (!a) + break; + if (a.ignore) + return null; + if (a.clearMark ? n = n.filter((u) => !a.clearMark(u)) : n = n.concat(this.parser.schema.marks[a.mark].create(a.attrs)), a.consuming === !1) + l = a; + else + break; + } + } + return n; + } + // Look up a handler for the given node. If none are found, return + // false. Otherwise, apply it, use its return value to drive the way + // the node's content is wrapped, and return true. + addElementByRule(e, n, r, i) { + let s, o; + if (n.node) + if (o = this.parser.schema.nodes[n.node], o.isLeaf) + this.insertNode(o.create(n.attrs), r, e.nodeName == "BR") || this.leafFallback(e, r); + else { + let a = this.enter(o, n.attrs || null, r, n.preserveWhitespace); + a && (s = !0, r = a); + } + else { + let a = this.parser.schema.marks[n.mark]; + r = r.concat(a.create(n.attrs)); + } + let l = this.top; + if (o && o.isLeaf) + this.findInside(e); + else if (i) + this.addElement(e, r, i); + else if (n.getContent) + this.findInside(e), n.getContent(e, this.parser.schema).forEach((a) => this.insertNode(a, r, !1)); + else { + let a = e; + typeof n.contentElement == "string" ? a = e.querySelector(n.contentElement) : typeof n.contentElement == "function" ? a = n.contentElement(e) : n.contentElement && (a = n.contentElement), this.findAround(e, a, !0), this.addAll(a, r), this.findAround(e, a, !1); + } + s && this.sync(l) && this.open--; + } + // Add all child nodes between `startIndex` and `endIndex` (or the + // whole node, if not given). If `sync` is passed, use it to + // synchronize after every block element. + addAll(e, n, r, i) { + let s = r || 0; + for (let o = r ? e.childNodes[r] : e.firstChild, l = i == null ? null : e.childNodes[i]; o != l; o = o.nextSibling, ++s) + this.findAtPoint(e, s), this.addDOM(o, n); + this.findAtPoint(e, s); + } + // Try to find a way to fit the given node type into the current + // context. May add intermediate wrappers and/or leave non-solid + // nodes that we're in. + findPlace(e, n, r) { + let i, s; + for (let o = this.open, l = 0; o >= 0; o--) { + let a = this.nodes[o], u = a.findWrapping(e); + if (u && (!i || i.length > u.length + l) && (i = u, s = a, !u.length)) + break; + if (a.solid) { + if (r) + break; + l += 2; + } + } + if (!i) + return null; + this.sync(s); + for (let o = 0; o < i.length; o++) + n = this.enterInner(i[o], null, n, !1); + return n; + } + // Try to insert the given node, adjusting the context when needed. + insertNode(e, n, r) { + if (e.isInline && this.needsBlock && !this.top.type) { + let s = this.textblockFromContext(); + s && (n = this.enterInner(s, null, n)); + } + let i = this.findPlace(e, n, r); + if (i) { + this.closeExtra(); + let s = this.top; + s.match && (s.match = s.match.matchType(e.type)); + let o = qe.none; + for (let l of i.concat(e.marks)) + (s.type ? s.type.allowsMarkType(l.type) : q4(l.type, e.type)) && (o = l.addToSet(o)); + return s.content.push(e.mark(o)), !0; + } + return !1; + } + // Try to start a node of the given type, adjusting the context when + // necessary. + enter(e, n, r, i) { + let s = this.findPlace(e.create(n), r, !1); + return s && (s = this.enterInner(e, n, r, !0, i)), s; + } + // Open a node of the given type + enterInner(e, n, r, i = !1, s) { + this.closeExtra(); + let o = this.top; + o.match = o.match && o.match.matchType(e); + let l = V4(e, s, o.options); + o.options & Aa && o.content.length == 0 && (l |= Aa); + let a = qe.none; + return r = r.filter((u) => (o.type ? o.type.allowsMarkType(u.type) : q4(u.type, e)) ? (a = u.addToSet(a), !1) : !0), this.nodes.push(new wu(e, n, a, i, null, l)), this.open++, r; + } + // Make sure all nodes above this.open are finished and added to + // their parents + closeExtra(e = !1) { + let n = this.nodes.length - 1; + if (n > this.open) { + for (; n > this.open; n--) + this.nodes[n - 1].content.push(this.nodes[n].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 n = this.open; n >= 0; n--) { + if (this.nodes[n] == e) + return this.open = n, !0; + this.localPreserveWS && (this.nodes[n].options |= t0); + } + return !1; + } + get currentPos() { + this.closeExtra(); + let e = 0; + for (let n = this.open; n >= 0; n--) { + let r = this.nodes[n].content; + for (let i = r.length - 1; i >= 0; i--) + e += r[i].nodeSize; + n && e++; + } + return e; + } + findAtPoint(e, n) { + if (this.find) + for (let r = 0; r < this.find.length; r++) + this.find[r].node == e && this.find[r].offset == n && (this.find[r].pos = this.currentPos); + } + findInside(e) { + if (this.find) + for (let n = 0; n < this.find.length; n++) + this.find[n].pos == null && e.nodeType == 1 && e.contains(this.find[n].node) && (this.find[n].pos = this.currentPos); + } + findAround(e, n, r) { + if (e != n && this.find) + for (let i = 0; i < this.find.length; i++) + this.find[i].pos == null && e.nodeType == 1 && e.contains(this.find[i].node) && n.compareDocumentPosition(this.find[i].node) & (r ? 2 : 4) && (this.find[i].pos = this.currentPos); + } + findInText(e) { + if (this.find) + for (let n = 0; n < this.find.length; n++) + this.find[n].node == e && (this.find[n].pos = this.currentPos - (e.nodeValue.length - this.find[n].offset)); + } + // Determines whether the given context string matches this context. + matchesContext(e) { + if (e.indexOf("|") > -1) + return e.split(/\s*\|\s*/).some(this.matchesContext, this); + let n = e.split("/"), r = this.options.context, i = !this.isOpen && (!r || r.parent.type == this.nodes[0].type), s = -(r ? r.depth + 1 : 0) + (i ? 0 : 1), o = (l, a) => { + for (; l >= 0; l--) { + let u = n[l]; + if (u == "") { + if (l == n.length - 1 || l == 0) + continue; + for (; a >= s; a--) + if (o(l - 1, a)) + return !0; + return !1; + } else { + let c = a > 0 || a == 0 && i ? this.nodes[a].type : r && a >= s ? r.node(a - s).type : null; + if (!c || c.name != u && !c.isInGroup(u)) + return !1; + a--; + } + } + return !0; + }; + return o(n.length - 1, this.open); + } + textblockFromContext() { + let e = this.options.context; + if (e) + for (let n = e.depth; n >= 0; n--) { + let r = e.node(n).contentMatchAt(e.indexAfter(n)).defaultType; + if (r && r.isTextblock && r.defaultAttrs) + return r; + } + for (let n in this.parser.schema.nodes) { + let r = this.parser.schema.nodes[n]; + if (r.isTextblock && r.defaultAttrs) + return r; + } + } +} +function zw(t) { + for (let e = t.firstChild, n = null; e; e = e.nextSibling) { + let r = e.nodeType == 1 ? e.nodeName.toLowerCase() : null; + r && B7.hasOwnProperty(r) && n ? (n.appendChild(e), e = n) : r == "li" ? n = e : r && (n = null); + } +} +function Pw(t, e) { + return (t.matches || t.msMatchesSelector || t.webkitMatchesSelector || t.mozMatchesSelector).call(t, e); +} +function $4(t) { + let e = {}; + for (let n in t) + e[n] = t[n]; + return e; +} +function q4(t, e) { + let n = e.schema.nodes; + for (let r in n) { + let i = n[r]; + if (!i.allowsMarkType(t)) + continue; + let s = [], o = (l) => { + s.push(l); + for (let a = 0; a < l.edgeCount; a++) { + let { type: u, next: c } = l.edge(a); + if (u == e || s.indexOf(c) < 0 && o(c)) + return !0; + } + }; + if (o(i.contentMatch)) + return !0; + } +} +class bo { + /** + Create a serializer. `nodes` should map node names to functions + that take a node and return a description of the corresponding + DOM. `marks` does the same for mark names, but also gets an + argument that tells it whether the mark's content is block or + inline content (for typical use, it'll always be inline). A mark + serializer may be `null` to indicate that marks of that type + should not be serialized. + */ + constructor(e, n) { + this.nodes = e, this.marks = n; + } + /** + Serialize the content of this fragment to a DOM fragment. When + not in the browser, the `document` option, containing a DOM + document, should be passed so that the serializer can create + nodes. + */ + serializeFragment(e, n = {}, r) { + r || (r = pd(n).createDocumentFragment()); + let i = r, s = []; + return e.forEach((o) => { + if (s.length || o.marks.length) { + let l = 0, a = 0; + for (; l < s.length && a < o.marks.length; ) { + let u = o.marks[a]; + if (!this.marks[u.type.name]) { + a++; + continue; + } + if (!u.eq(s[l][0]) || u.type.spec.spanning === !1) + break; + l++, a++; + } + for (; l < s.length; ) + i = s.pop()[1]; + for (; a < o.marks.length; ) { + let u = o.marks[a++], c = this.serializeMark(u, o.isInline, n); + c && (s.push([u, i]), i.appendChild(c.dom), i = c.contentDOM || c.dom); + } + } + i.appendChild(this.serializeNodeInner(o, n)); + }), r; + } + /** + @internal + */ + serializeNodeInner(e, n) { + let { dom: r, contentDOM: i } = ju(pd(n), this.nodes[e.type.name](e), null, e.attrs); + if (i) { + if (e.isLeaf) + throw new RangeError("Content hole not allowed in a leaf node spec"); + this.serializeFragment(e.content, n, i); + } + return r; + } + /** + Serialize this node to a DOM node. This can be useful when you + need to serialize a part of a document, as opposed to the whole + document. To serialize a whole document, use + [`serializeFragment`](https://prosemirror.net/docs/ref/#model.DOMSerializer.serializeFragment) on + its [content](https://prosemirror.net/docs/ref/#model.Node.content). + */ + serializeNode(e, n = {}) { + let r = this.serializeNodeInner(e, n); + for (let i = e.marks.length - 1; i >= 0; i--) { + let s = this.serializeMark(e.marks[i], e.isInline, n); + s && ((s.contentDOM || s.dom).appendChild(r), r = s.dom); + } + return r; + } + /** + @internal + */ + serializeMark(e, n, r = {}) { + let i = this.marks[e.type.name]; + return i && ju(pd(r), i(e, n), null, e.attrs); + } + static renderSpec(e, n, r = null, i) { + return ju(e, n, r, i); + } + /** + Build a serializer using the [`toDOM`](https://prosemirror.net/docs/ref/#model.NodeSpec.toDOM) + properties in a schema's node and mark specs. + */ + static fromSchema(e) { + return e.cached.domSerializer || (e.cached.domSerializer = new bo(this.nodesFromSchema(e), this.marksFromSchema(e))); + } + /** + Gather the serializers in a schema's node specs into an object. + This can be useful as a base to build a custom serializer from. + */ + static nodesFromSchema(e) { + let n = j4(e.nodes); + return n.text || (n.text = (r) => r.text), n; + } + /** + Gather the serializers in a schema's mark specs into an object. + */ + static marksFromSchema(e) { + return j4(e.marks); + } +} +function j4(t) { + let e = {}; + for (let n in t) { + let r = t[n].spec.toDOM; + r && (e[n] = r); + } + return e; +} +function pd(t) { + return t.document || window.document; +} +const W4 = /* @__PURE__ */ new WeakMap(); +function Bw(t) { + let e = W4.get(t); + return e === void 0 && W4.set(t, e = Lw(t)), e; +} +function Lw(t) { + let e = null; + function n(r) { + if (r && typeof r == "object") + if (Array.isArray(r)) + if (typeof r[0] == "string") + e || (e = []), e.push(r); + else + for (let i = 0; i < r.length; i++) + n(r[i]); + else + for (let i in r) + n(r[i]); + } + return n(t), e; +} +function ju(t, e, n, r) { + if (typeof e == "string") + return { dom: t.createTextNode(e) }; + if (e.nodeType != null) + return { dom: e }; + if (e.dom && e.dom.nodeType != null) + return e; + let i = e[0], s; + if (typeof i != "string") + throw new RangeError("Invalid array passed to renderSpec"); + if (r && (s = Bw(r)) && s.indexOf(e) > -1) + throw new 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 l, a = n ? t.createElementNS(n, i) : t.createElement(i), u = e[1], c = 1; + if (u && typeof u == "object" && u.nodeType == null && !Array.isArray(u)) { + c = 2; + for (let h in u) + if (u[h] != null) { + let d = h.indexOf(" "); + d > 0 ? a.setAttributeNS(h.slice(0, d), h.slice(d + 1), u[h]) : h == "style" && a.style ? a.style.cssText = u[h] : a.setAttribute(h, u[h]); + } + } + for (let h = c; h < e.length; h++) { + let d = e[h]; + if (d === 0) { + if (h < e.length - 1 || h > c) + throw new RangeError("Content hole must be the only child of its parent node"); + return { dom: a, contentDOM: a }; + } else { + let { dom: f, contentDOM: m } = ju(t, d, n, r); + if (a.appendChild(f), m) { + if (l) + throw new RangeError("Multiple content holes"); + l = m; + } + } + } + return { dom: a, contentDOM: l }; +} +const Fw = {}; +function Qp(t, e) { + const n = Fw, r = typeof n.includeImageAlt == "boolean" ? n.includeImageAlt : !0, i = typeof n.includeHtml == "boolean" ? n.includeHtml : !0; + return L7(t, r, i); +} +function L7(t, e, n) { + if (Vw(t)) { + if ("value" in t) + return t.type === "html" && !n ? "" : t.value; + if (e && "alt" in t && t.alt) + return t.alt; + if ("children" in t) + return U4(t.children, e, n); + } + return Array.isArray(t) ? U4(t, e, n) : ""; +} +function U4(t, e, n) { + const r = []; + let i = -1; + for (; ++i < t.length; ) + r[i] = L7(t[i], e, n); + return r.join(""); +} +function Vw(t) { + return !!(t && typeof t == "object"); +} +const G4 = document.createElement("i"); +function e1(t) { + const e = "&" + t + ";"; + G4.innerHTML = e; + const n = G4.textContent; + return n.charCodeAt(n.length - 1) === 59 && t !== "semi" || n === e ? !1 : n; +} +function Hn(t, e, n, r) { + const i = t.length; + let s = 0, o; + if (e < 0 ? e = -e > i ? 0 : i + e : e = e > i ? i : e, n = n > 0 ? n : 0, r.length < 1e4) + o = Array.from(r), o.unshift(e, n), t.splice(...o); + else + for (n && t.splice(e, n); s < r.length; ) + o = r.slice(s, s + 1e4), o.unshift(e, 0), t.splice(...o), s += 1e4, e += 1e4; +} +function Jn(t, e) { + return t.length > 0 ? (Hn(t, t.length, 0, e), t) : e; +} +const K4 = {}.hasOwnProperty; +function F7(t) { + const e = {}; + let n = -1; + for (; ++n < t.length; ) + Hw(e, t[n]); + return e; +} +function Hw(t, e) { + let n; + for (n in e) { + const i = (K4.call(t, n) ? t[n] : void 0) || (t[n] = {}), s = e[n]; + let o; + if (s) + for (o in s) { + K4.call(i, o) || (i[o] = []); + const l = s[o]; + $w( + // @ts-expect-error Looks like a list. + i[o], + Array.isArray(l) ? l : l ? [l] : [] + ); + } + } +} +function $w(t, e) { + let n = -1; + const r = []; + for (; ++n < e.length; ) + (e[n].add === "after" ? t : r).push(e[n]); + Hn(t, 0, 0, r); +} +function V7(t, e) { + const n = Number.parseInt(t, e); + return ( + // C0 except for HT, LF, FF, CR, space. + n < 9 || n === 11 || n > 13 && n < 32 || // Control character (DEL) of C0, and C1 controls. + n > 126 && n < 160 || // Lone high surrogates and low surrogates. + n > 55295 && n < 57344 || // Noncharacters. + n > 64975 && n < 65008 || /* eslint-disable no-bitwise */ + (n & 65535) === 65535 || (n & 65535) === 65534 || /* eslint-enable no-bitwise */ + // Out of range + n > 1114111 ? "�" : String.fromCodePoint(n) + ); +} +function yr(t) { + return t.replace(/[\t\n\r ]+/g, " ").replace(/^ | $/g, "").toLowerCase().toUpperCase(); +} +const sn = ms(/[A-Za-z]/), xn = ms(/[\dA-Za-z]/), qw = ms(/[#-'*+\--9=?A-Z^-~]/); +function Bc(t) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + t !== null && (t < 32 || t === 127) + ); +} +const Pf = ms(/\d/), jw = ms(/[\dA-Fa-f]/), Ww = ms(/[!-/:-@[-`{-~]/); +function xe(t) { + return t !== null && t < -2; +} +function rt(t) { + return t !== null && (t < 0 || t === 32); +} +function He(t) { + return t === -2 || t === -1 || t === 32; +} +const xh = ms(new RegExp("\\p{P}|\\p{S}", "u")), ho = ms(/\s/); +function ms(t) { + return e; + function e(n) { + return n !== null && n > -1 && t.test(String.fromCharCode(n)); + } +} +function je(t, e, n, r) { + const i = r ? r - 1 : Number.POSITIVE_INFINITY; + let s = 0; + return o; + function o(a) { + return He(a) ? (t.enter(n), l(a)) : e(a); + } + function l(a) { + return He(a) && s++ < i ? (t.consume(a), l) : (t.exit(n), e(a)); + } +} +const Uw = { + tokenize: Gw +}; +function Gw(t) { + const e = t.attempt(this.parser.constructs.contentInitial, r, i); + let n; + return e; + function r(l) { + if (l === null) { + t.consume(l); + return; + } + return t.enter("lineEnding"), t.consume(l), t.exit("lineEnding"), je(t, e, "linePrefix"); + } + function i(l) { + return t.enter("paragraph"), s(l); + } + function s(l) { + const a = t.enter("chunkText", { + contentType: "text", + previous: n + }); + return n && (n.next = a), n = a, o(l); + } + function o(l) { + if (l === null) { + t.exit("chunkText"), t.exit("paragraph"), t.consume(l); + return; + } + return xe(l) ? (t.consume(l), t.exit("chunkText"), s) : (t.consume(l), o); + } +} +const Kw = { + tokenize: Jw +}, J4 = { + tokenize: Yw +}; +function Jw(t) { + const e = this, n = []; + let r = 0, i, s, o; + return l; + function l(N) { + if (r < n.length) { + const B = n[r]; + return e.containerState = B[1], t.attempt(B[0].continuation, a, u)(N); + } + return u(N); + } + function a(N) { + if (r++, e.containerState._closeFlow) { + e.containerState._closeFlow = void 0, i && C(); + const B = e.events.length; + let _ = B, A; + for (; _--; ) + if (e.events[_][0] === "exit" && e.events[_][1].type === "chunkFlow") { + A = e.events[_][1].end; + break; + } + w(r); + let L = B; + for (; L < e.events.length; ) + e.events[L][1].end = { + ...A + }, L++; + return Hn(e.events, _ + 1, 0, e.events.slice(B)), e.events.length = L, u(N); + } + return l(N); + } + function u(N) { + if (r === n.length) { + if (!i) + return d(N); + if (i.currentConstruct && i.currentConstruct.concrete) + return m(N); + e.interrupt = !!(i.currentConstruct && !i._gfmTableDynamicInterruptHack); + } + return e.containerState = {}, t.check(J4, c, h)(N); + } + function c(N) { + return i && C(), w(r), d(N); + } + function h(N) { + return e.parser.lazy[e.now().line] = r !== n.length, o = e.now().offset, m(N); + } + function d(N) { + return e.containerState = {}, t.attempt(J4, f, m)(N); + } + function f(N) { + return r++, n.push([e.currentConstruct, e.containerState]), d(N); + } + function m(N) { + if (N === null) { + i && C(), w(0), t.consume(N); + return; + } + return i = i || e.parser.flow(e.now()), t.enter("chunkFlow", { + _tokenizer: i, + contentType: "flow", + previous: s + }), y(N); + } + function y(N) { + if (N === null) { + b(t.exit("chunkFlow"), !0), w(0), t.consume(N); + return; + } + return xe(N) ? (t.consume(N), b(t.exit("chunkFlow")), r = 0, e.interrupt = void 0, l) : (t.consume(N), y); + } + function b(N, B) { + const _ = e.sliceStream(N); + if (B && _.push(null), N.previous = s, s && (s.next = N), s = N, i.defineSkip(N.start), i.write(_), e.parser.lazy[N.start.line]) { + let A = i.events.length; + for (; A--; ) + if ( + // The token starts before the line ending… + i.events[A][1].start.offset < o && // …and either is not ended yet… + (!i.events[A][1].end || // …or ends after it. + i.events[A][1].end.offset > o) + ) + return; + const L = e.events.length; + let K = L, J, P; + for (; K--; ) + if (e.events[K][0] === "exit" && e.events[K][1].type === "chunkFlow") { + if (J) { + P = e.events[K][1].end; + break; + } + J = !0; + } + for (w(r), A = L; A < e.events.length; ) + e.events[A][1].end = { + ...P + }, A++; + Hn(e.events, K + 1, 0, e.events.slice(L)), e.events.length = A; + } + } + function w(N) { + let B = n.length; + for (; B-- > N; ) { + const _ = n[B]; + e.containerState = _[1], _[0].exit.call(e, t); + } + n.length = N; + } + function C() { + i.write([null]), s = void 0, i = void 0, e.containerState._closeFlow = void 0; + } +} +function Yw(t, e, n) { + return je(t, t.attempt(this.parser.constructs.document, e, n), "linePrefix", this.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4); +} +function Tl(t) { + if (t === null || rt(t) || ho(t)) + return 1; + if (xh(t)) + return 2; +} +function Sh(t, e, n) { + const r = []; + let i = -1; + for (; ++i < t.length; ) { + const s = t[i].resolveAll; + s && !r.includes(s) && (e = s(e, n), r.push(s)); + } + return e; +} +const Bf = { + name: "attention", + resolveAll: Zw, + tokenize: Xw +}; +function Zw(t, e) { + let n = -1, r, i, s, o, l, a, u, c; + for (; ++n < t.length; ) + if (t[n][0] === "enter" && t[n][1].type === "attentionSequence" && t[n][1]._close) { + for (r = n; r--; ) + if (t[r][0] === "exit" && t[r][1].type === "attentionSequence" && t[r][1]._open && // If the markers are the same: + e.sliceSerialize(t[r][1]).charCodeAt(0) === e.sliceSerialize(t[n][1]).charCodeAt(0)) { + if ((t[r][1]._close || t[n][1]._open) && (t[n][1].end.offset - t[n][1].start.offset) % 3 && !((t[r][1].end.offset - t[r][1].start.offset + t[n][1].end.offset - t[n][1].start.offset) % 3)) + continue; + a = t[r][1].end.offset - t[r][1].start.offset > 1 && t[n][1].end.offset - t[n][1].start.offset > 1 ? 2 : 1; + const h = { + ...t[r][1].end + }, d = { + ...t[n][1].start + }; + Y4(h, -a), Y4(d, a), o = { + type: a > 1 ? "strongSequence" : "emphasisSequence", + start: h, + end: { + ...t[r][1].end + } + }, l = { + type: a > 1 ? "strongSequence" : "emphasisSequence", + start: { + ...t[n][1].start + }, + end: d + }, s = { + type: a > 1 ? "strongText" : "emphasisText", + start: { + ...t[r][1].end + }, + end: { + ...t[n][1].start + } + }, i = { + type: a > 1 ? "strong" : "emphasis", + start: { + ...o.start + }, + end: { + ...l.end + } + }, t[r][1].end = { + ...o.start + }, t[n][1].start = { + ...l.end + }, u = [], t[r][1].end.offset - t[r][1].start.offset && (u = Jn(u, [["enter", t[r][1], e], ["exit", t[r][1], e]])), u = Jn(u, [["enter", i, e], ["enter", o, e], ["exit", o, e], ["enter", s, e]]), u = Jn(u, Sh(e.parser.constructs.insideSpan.null, t.slice(r + 1, n), e)), u = Jn(u, [["exit", s, e], ["enter", l, e], ["exit", l, e], ["exit", i, e]]), t[n][1].end.offset - t[n][1].start.offset ? (c = 2, u = Jn(u, [["enter", t[n][1], e], ["exit", t[n][1], e]])) : c = 0, Hn(t, r - 1, n - r + 3, u), n = r + u.length - c - 2; + break; + } + } + for (n = -1; ++n < t.length; ) + t[n][1].type === "attentionSequence" && (t[n][1].type = "data"); + return t; +} +function Xw(t, e) { + const n = this.parser.constructs.attentionMarkers.null, r = this.previous, i = Tl(r); + let s; + return o; + function o(a) { + return s = a, t.enter("attentionSequence"), l(a); + } + function l(a) { + if (a === s) + return t.consume(a), l; + const u = t.exit("attentionSequence"), c = Tl(a), h = !c || c === 2 && i || n.includes(a), d = !i || i === 2 && c || n.includes(r); + return u._open = !!(s === 42 ? h : h && (i || !d)), u._close = !!(s === 42 ? d : d && (c || !h)), e(a); + } +} +function Y4(t, e) { + t.column += e, t.offset += e, t._bufferIndex += e; +} +const Qw = { + name: "autolink", + tokenize: ek +}; +function ek(t, e, n) { + let r = 0; + return i; + function i(f) { + return t.enter("autolink"), t.enter("autolinkMarker"), t.consume(f), t.exit("autolinkMarker"), t.enter("autolinkProtocol"), s; + } + function s(f) { + return sn(f) ? (t.consume(f), o) : f === 64 ? n(f) : u(f); + } + function o(f) { + return f === 43 || f === 45 || f === 46 || xn(f) ? (r = 1, l(f)) : u(f); + } + function l(f) { + return f === 58 ? (t.consume(f), r = 0, a) : (f === 43 || f === 45 || f === 46 || xn(f)) && r++ < 32 ? (t.consume(f), l) : (r = 0, u(f)); + } + function a(f) { + return f === 62 ? (t.exit("autolinkProtocol"), t.enter("autolinkMarker"), t.consume(f), t.exit("autolinkMarker"), t.exit("autolink"), e) : f === null || f === 32 || f === 60 || Bc(f) ? n(f) : (t.consume(f), a); + } + function u(f) { + return f === 64 ? (t.consume(f), c) : qw(f) ? (t.consume(f), u) : n(f); + } + function c(f) { + return xn(f) ? h(f) : n(f); + } + function h(f) { + return f === 46 ? (t.consume(f), r = 0, c) : f === 62 ? (t.exit("autolinkProtocol").type = "autolinkEmail", t.enter("autolinkMarker"), t.consume(f), t.exit("autolinkMarker"), t.exit("autolink"), e) : d(f); + } + function d(f) { + if ((f === 45 || xn(f)) && r++ < 63) { + const m = f === 45 ? d : h; + return t.consume(f), m; + } + return n(f); + } +} +const J0 = { + partial: !0, + tokenize: tk +}; +function tk(t, e, n) { + return r; + function r(s) { + return He(s) ? je(t, i, "linePrefix")(s) : i(s); + } + function i(s) { + return s === null || xe(s) ? e(s) : n(s); + } +} +const H7 = { + continuation: { + tokenize: rk + }, + exit: ik, + name: "blockQuote", + tokenize: nk +}; +function nk(t, e, n) { + const r = this; + return i; + function i(o) { + if (o === 62) { + const l = r.containerState; + return l.open || (t.enter("blockQuote", { + _container: !0 + }), l.open = !0), t.enter("blockQuotePrefix"), t.enter("blockQuoteMarker"), t.consume(o), t.exit("blockQuoteMarker"), s; + } + return n(o); + } + function s(o) { + return He(o) ? (t.enter("blockQuotePrefixWhitespace"), t.consume(o), t.exit("blockQuotePrefixWhitespace"), t.exit("blockQuotePrefix"), e) : (t.exit("blockQuotePrefix"), e(o)); + } +} +function rk(t, e, n) { + const r = this; + return i; + function i(o) { + return He(o) ? je(t, s, "linePrefix", r.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4)(o) : s(o); + } + function s(o) { + return t.attempt(H7, e, n)(o); + } +} +function ik(t) { + t.exit("blockQuote"); +} +const $7 = { + name: "characterEscape", + tokenize: sk +}; +function sk(t, e, n) { + return r; + function r(s) { + return t.enter("characterEscape"), t.enter("escapeMarker"), t.consume(s), t.exit("escapeMarker"), i; + } + function i(s) { + return Ww(s) ? (t.enter("characterEscapeValue"), t.consume(s), t.exit("characterEscapeValue"), t.exit("characterEscape"), e) : n(s); + } +} +const q7 = { + name: "characterReference", + tokenize: ok +}; +function ok(t, e, n) { + const r = this; + let i = 0, s, o; + return l; + function l(h) { + return t.enter("characterReference"), t.enter("characterReferenceMarker"), t.consume(h), t.exit("characterReferenceMarker"), a; + } + function a(h) { + return h === 35 ? (t.enter("characterReferenceMarkerNumeric"), t.consume(h), t.exit("characterReferenceMarkerNumeric"), u) : (t.enter("characterReferenceValue"), s = 31, o = xn, c(h)); + } + function u(h) { + return h === 88 || h === 120 ? (t.enter("characterReferenceMarkerHexadecimal"), t.consume(h), t.exit("characterReferenceMarkerHexadecimal"), t.enter("characterReferenceValue"), s = 6, o = jw, c) : (t.enter("characterReferenceValue"), s = 7, o = Pf, c(h)); + } + function c(h) { + if (h === 59 && i) { + const d = t.exit("characterReferenceValue"); + return o === xn && !e1(r.sliceSerialize(d)) ? n(h) : (t.enter("characterReferenceMarker"), t.consume(h), t.exit("characterReferenceMarker"), t.exit("characterReference"), e); + } + return o(h) && i++ < s ? (t.consume(h), c) : n(h); + } +} +const Z4 = { + partial: !0, + tokenize: ak +}, X4 = { + concrete: !0, + name: "codeFenced", + tokenize: lk +}; +function lk(t, e, n) { + const r = this, i = { + partial: !0, + tokenize: _ + }; + let s = 0, o = 0, l; + return a; + function a(A) { + return u(A); + } + function u(A) { + const L = r.events[r.events.length - 1]; + return s = L && L[1].type === "linePrefix" ? L[2].sliceSerialize(L[1], !0).length : 0, l = A, t.enter("codeFenced"), t.enter("codeFencedFence"), t.enter("codeFencedFenceSequence"), c(A); + } + function c(A) { + return A === l ? (o++, t.consume(A), c) : o < 3 ? n(A) : (t.exit("codeFencedFenceSequence"), He(A) ? je(t, h, "whitespace")(A) : h(A)); + } + function h(A) { + return A === null || xe(A) ? (t.exit("codeFencedFence"), r.interrupt ? e(A) : t.check(Z4, y, B)(A)) : (t.enter("codeFencedFenceInfo"), t.enter("chunkString", { + contentType: "string" + }), d(A)); + } + function d(A) { + return A === null || xe(A) ? (t.exit("chunkString"), t.exit("codeFencedFenceInfo"), h(A)) : He(A) ? (t.exit("chunkString"), t.exit("codeFencedFenceInfo"), je(t, f, "whitespace")(A)) : A === 96 && A === l ? n(A) : (t.consume(A), d); + } + function f(A) { + return A === null || xe(A) ? h(A) : (t.enter("codeFencedFenceMeta"), t.enter("chunkString", { + contentType: "string" + }), m(A)); + } + function m(A) { + return A === null || xe(A) ? (t.exit("chunkString"), t.exit("codeFencedFenceMeta"), h(A)) : A === 96 && A === l ? n(A) : (t.consume(A), m); + } + function y(A) { + return t.attempt(i, B, b)(A); + } + function b(A) { + return t.enter("lineEnding"), t.consume(A), t.exit("lineEnding"), w; + } + function w(A) { + return s > 0 && He(A) ? je(t, C, "linePrefix", s + 1)(A) : C(A); + } + function C(A) { + return A === null || xe(A) ? t.check(Z4, y, B)(A) : (t.enter("codeFlowValue"), N(A)); + } + function N(A) { + return A === null || xe(A) ? (t.exit("codeFlowValue"), C(A)) : (t.consume(A), N); + } + function B(A) { + return t.exit("codeFenced"), e(A); + } + function _(A, L, K) { + let J = 0; + return P; + function P(ge) { + return A.enter("lineEnding"), A.consume(ge), A.exit("lineEnding"), ie; + } + function ie(ge) { + return A.enter("codeFencedFence"), He(ge) ? je(A, ne, "linePrefix", r.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4)(ge) : ne(ge); + } + function ne(ge) { + return ge === l ? (A.enter("codeFencedFenceSequence"), _e(ge)) : K(ge); + } + function _e(ge) { + return ge === l ? (J++, A.consume(ge), _e) : J >= o ? (A.exit("codeFencedFenceSequence"), He(ge) ? je(A, De, "whitespace")(ge) : De(ge)) : K(ge); + } + function De(ge) { + return ge === null || xe(ge) ? (A.exit("codeFencedFence"), L(ge)) : K(ge); + } + } +} +function ak(t, e, n) { + const r = this; + return i; + function i(o) { + return o === null ? n(o) : (t.enter("lineEnding"), t.consume(o), t.exit("lineEnding"), s); + } + function s(o) { + return r.parser.lazy[r.now().line] ? n(o) : e(o); + } +} +const md = { + name: "codeIndented", + tokenize: ck +}, uk = { + partial: !0, + tokenize: hk +}; +function ck(t, e, n) { + const r = this; + return i; + function i(u) { + return t.enter("codeIndented"), je(t, s, "linePrefix", 5)(u); + } + function s(u) { + const c = r.events[r.events.length - 1]; + return c && c[1].type === "linePrefix" && c[2].sliceSerialize(c[1], !0).length >= 4 ? o(u) : n(u); + } + function o(u) { + return u === null ? a(u) : xe(u) ? t.attempt(uk, o, a)(u) : (t.enter("codeFlowValue"), l(u)); + } + function l(u) { + return u === null || xe(u) ? (t.exit("codeFlowValue"), o(u)) : (t.consume(u), l); + } + function a(u) { + return t.exit("codeIndented"), e(u); + } +} +function hk(t, e, n) { + const r = this; + return i; + function i(o) { + return r.parser.lazy[r.now().line] ? n(o) : xe(o) ? (t.enter("lineEnding"), t.consume(o), t.exit("lineEnding"), i) : je(t, s, "linePrefix", 5)(o); + } + function s(o) { + const l = r.events[r.events.length - 1]; + return l && l[1].type === "linePrefix" && l[2].sliceSerialize(l[1], !0).length >= 4 ? e(o) : xe(o) ? i(o) : n(o); + } +} +const dk = { + name: "codeText", + previous: pk, + resolve: fk, + tokenize: mk +}; +function fk(t) { + let e = t.length - 4, n = 3, r, i; + if ((t[n][1].type === "lineEnding" || t[n][1].type === "space") && (t[e][1].type === "lineEnding" || t[e][1].type === "space")) { + for (r = n; ++r < e; ) + if (t[r][1].type === "codeTextData") { + t[n][1].type = "codeTextPadding", t[e][1].type = "codeTextPadding", n += 2, e -= 2; + break; + } + } + for (r = n - 1, e++; ++r <= e; ) + i === void 0 ? r !== e && t[r][1].type !== "lineEnding" && (i = r) : (r === e || t[r][1].type === "lineEnding") && (t[i][1].type = "codeTextData", r !== i + 2 && (t[i][1].end = t[r - 1][1].end, t.splice(i + 2, r - i - 2), e -= r - i - 2, r = i + 2), i = void 0); + return t; +} +function pk(t) { + return t !== 96 || this.events[this.events.length - 1][1].type === "characterEscape"; +} +function mk(t, e, n) { + let r = 0, i, s; + return o; + function o(h) { + return t.enter("codeText"), t.enter("codeTextSequence"), l(h); + } + function l(h) { + return h === 96 ? (t.consume(h), r++, l) : (t.exit("codeTextSequence"), a(h)); + } + function a(h) { + return h === null ? n(h) : h === 32 ? (t.enter("space"), t.consume(h), t.exit("space"), a) : h === 96 ? (s = t.enter("codeTextSequence"), i = 0, c(h)) : xe(h) ? (t.enter("lineEnding"), t.consume(h), t.exit("lineEnding"), a) : (t.enter("codeTextData"), u(h)); + } + function u(h) { + return h === null || h === 32 || h === 96 || xe(h) ? (t.exit("codeTextData"), a(h)) : (t.consume(h), u); + } + function c(h) { + return h === 96 ? (t.consume(h), i++, c) : i === r ? (t.exit("codeTextSequence"), t.exit("codeText"), e(h)) : (s.type = "codeTextData", u(h)); + } +} +class gk { + /** + * @param {ReadonlyArray | null | undefined} [initial] + * Initial items (optional). + * @returns + * Splice buffer. + */ + constructor(e) { + this.left = e ? [...e] : [], this.right = []; + } + /** + * Array access; + * does not move the cursor. + * + * @param {number} index + * Index. + * @return {T} + * Item. + */ + get(e) { + if (e < 0 || e >= this.left.length + this.right.length) + throw new RangeError("Cannot access index `" + e + "` in a splice buffer of size `" + (this.left.length + this.right.length) + "`"); + return e < this.left.length ? this.left[e] : this.right[this.right.length - e + this.left.length - 1]; + } + /** + * The length of the splice buffer, one greater than the largest index in the + * array. + */ + get length() { + return this.left.length + this.right.length; + } + /** + * Remove and return `list[0]`; + * moves the cursor to `0`. + * + * @returns {T | undefined} + * Item, optional. + */ + shift() { + return this.setCursor(0), this.right.pop(); + } + /** + * Slice the buffer to get an array; + * does not move the cursor. + * + * @param {number} start + * Start. + * @param {number | null | undefined} [end] + * End (optional). + * @returns {Array} + * Array of items. + */ + slice(e, n) { + const r = n ?? Number.POSITIVE_INFINITY; + return r < this.left.length ? this.left.slice(e, r) : e > this.left.length ? this.right.slice(this.right.length - r + this.left.length, this.right.length - e + this.left.length).reverse() : this.left.slice(e).concat(this.right.slice(this.right.length - r + this.left.length).reverse()); + } + /** + * Mimics the behavior of Array.prototype.splice() except for the change of + * interface necessary to avoid segfaults when patching in very large arrays. + * + * This operation moves cursor is moved to `start` and results in the cursor + * placed after any inserted items. + * + * @param {number} start + * Start; + * zero-based index at which to start changing the array; + * negative numbers count backwards from the end of the array and values + * that are out-of bounds are clamped to the appropriate end of the array. + * @param {number | null | undefined} [deleteCount=0] + * Delete count (default: `0`); + * maximum number of elements to delete, starting from start. + * @param {Array | null | undefined} [items=[]] + * Items to include in place of the deleted items (default: `[]`). + * @return {Array} + * Any removed items. + */ + splice(e, n, r) { + const i = n || 0; + this.setCursor(Math.trunc(e)); + const s = this.right.splice(this.right.length - i, Number.POSITIVE_INFINITY); + return r && Zl(this.left, r), s.reverse(); + } + /** + * Remove and return the highest-numbered item in the array, so + * `list[list.length - 1]`; + * Moves the cursor to `length`. + * + * @returns {T | undefined} + * Item, optional. + */ + pop() { + return this.setCursor(Number.POSITIVE_INFINITY), this.left.pop(); + } + /** + * Inserts a single item to the high-numbered side of the array; + * moves the cursor to `length`. + * + * @param {T} item + * Item. + * @returns {undefined} + * Nothing. + */ + push(e) { + this.setCursor(Number.POSITIVE_INFINITY), this.left.push(e); + } + /** + * Inserts many items to the high-numbered side of the array. + * Moves the cursor to `length`. + * + * @param {Array} items + * Items. + * @returns {undefined} + * Nothing. + */ + pushMany(e) { + this.setCursor(Number.POSITIVE_INFINITY), Zl(this.left, e); + } + /** + * Inserts a single item to the low-numbered side of the array; + * Moves the cursor to `0`. + * + * @param {T} item + * Item. + * @returns {undefined} + * Nothing. + */ + unshift(e) { + this.setCursor(0), this.right.push(e); + } + /** + * Inserts many items to the low-numbered side of the array; + * moves the cursor to `0`. + * + * @param {Array} items + * Items. + * @returns {undefined} + * Nothing. + */ + unshiftMany(e) { + this.setCursor(0), Zl(this.right, e.reverse()); + } + /** + * Move the cursor to a specific position in the array. Requires + * time proportional to the distance moved. + * + * If `n < 0`, the cursor will end up at the beginning. + * If `n > length`, the cursor will end up at the end. + * + * @param {number} n + * Position. + * @return {undefined} + * Nothing. + */ + setCursor(e) { + if (!(e === this.left.length || e > this.left.length && this.right.length === 0 || e < 0 && this.left.length === 0)) + if (e < this.left.length) { + const n = this.left.splice(e, Number.POSITIVE_INFINITY); + Zl(this.right, n.reverse()); + } else { + const n = this.right.splice(this.left.length + this.right.length - e, Number.POSITIVE_INFINITY); + Zl(this.left, n.reverse()); + } + } +} +function Zl(t, e) { + let n = 0; + if (e.length < 1e4) + t.push(...e); + else + for (; n < e.length; ) + t.push(...e.slice(n, n + 1e4)), n += 1e4; +} +function j7(t) { + const e = {}; + let n = -1, r, i, s, o, l, a, u; + const c = new gk(t); + for (; ++n < c.length; ) { + for (; n in e; ) + n = e[n]; + if (r = c.get(n), n && r[1].type === "chunkFlow" && c.get(n - 1)[1].type === "listItemPrefix" && (a = r[1]._tokenizer.events, s = 0, s < a.length && a[s][1].type === "lineEndingBlank" && (s += 2), s < a.length && a[s][1].type === "content")) + for (; ++s < a.length && a[s][1].type !== "content"; ) + a[s][1].type === "chunkText" && (a[s][1]._isInFirstContentOfListItem = !0, s++); + if (r[0] === "enter") + r[1].contentType && (Object.assign(e, yk(c, n)), n = e[n], u = !0); + else if (r[1]._container) { + for (s = n, i = void 0; s--; ) + if (o = c.get(s), o[1].type === "lineEnding" || o[1].type === "lineEndingBlank") + o[0] === "enter" && (i && (c.get(i)[1].type = "lineEndingBlank"), o[1].type = "lineEnding", i = s); + else if (!(o[1].type === "linePrefix" || o[1].type === "listItemIndent")) break; + i && (r[1].end = { + ...c.get(i)[1].start + }, l = c.slice(i, n), l.unshift(r), c.splice(i, n - i + 1, l)); + } + } + return Hn(t, 0, Number.POSITIVE_INFINITY, c.slice(0)), !u; +} +function yk(t, e) { + const n = t.get(e)[1], r = t.get(e)[2]; + let i = e - 1; + const s = []; + let o = n._tokenizer; + o || (o = r.parser[n.contentType](n.start), n._contentTypeTextTrailing && (o._contentTypeTextTrailing = !0)); + const l = o.events, a = [], u = {}; + let c, h, d = -1, f = n, m = 0, y = 0; + const b = [y]; + for (; f; ) { + for (; t.get(++i)[1] !== f; ) + ; + s.push(i), f._tokenizer || (c = r.sliceStream(f), f.next || c.push(null), h && o.defineSkip(f.start), f._isInFirstContentOfListItem && (o._gfmTasklistFirstContentOfListItem = !0), o.write(c), f._isInFirstContentOfListItem && (o._gfmTasklistFirstContentOfListItem = void 0)), h = f, f = f.next; + } + for (f = n; ++d < l.length; ) + // Find a void token that includes a break. + l[d][0] === "exit" && l[d - 1][0] === "enter" && l[d][1].type === l[d - 1][1].type && l[d][1].start.line !== l[d][1].end.line && (y = d + 1, b.push(y), f._tokenizer = void 0, f.previous = void 0, f = f.next); + for (o.events = [], f ? (f._tokenizer = void 0, f.previous = void 0) : b.pop(), d = b.length; d--; ) { + const w = l.slice(b[d], b[d + 1]), C = s.pop(); + a.push([C, C + w.length - 1]), t.splice(C, 2, w); + } + for (a.reverse(), d = -1; ++d < a.length; ) + u[m + a[d][0]] = m + a[d][1], m += a[d][1] - a[d][0] - 1; + return u; +} +const vk = { + resolve: wk, + tokenize: kk +}, bk = { + partial: !0, + tokenize: xk +}; +function wk(t) { + return j7(t), t; +} +function kk(t, e) { + let n; + return r; + function r(l) { + return t.enter("content"), n = t.enter("chunkContent", { + contentType: "content" + }), i(l); + } + function i(l) { + return l === null ? s(l) : xe(l) ? t.check(bk, o, s)(l) : (t.consume(l), i); + } + function s(l) { + return t.exit("chunkContent"), t.exit("content"), e(l); + } + function o(l) { + return t.consume(l), t.exit("chunkContent"), n.next = t.enter("chunkContent", { + contentType: "content", + previous: n + }), n = n.next, i; + } +} +function xk(t, e, n) { + const r = this; + return i; + function i(o) { + return t.exit("chunkContent"), t.enter("lineEnding"), t.consume(o), t.exit("lineEnding"), je(t, s, "linePrefix"); + } + function s(o) { + if (o === null || xe(o)) + return n(o); + const l = r.events[r.events.length - 1]; + return !r.parser.constructs.disable.null.includes("codeIndented") && l && l[1].type === "linePrefix" && l[2].sliceSerialize(l[1], !0).length >= 4 ? e(o) : t.interrupt(r.parser.constructs.flow, n, e)(o); + } +} +function W7(t, e, n, r, i, s, o, l, a) { + const u = a || Number.POSITIVE_INFINITY; + let c = 0; + return h; + function h(w) { + return w === 60 ? (t.enter(r), t.enter(i), t.enter(s), t.consume(w), t.exit(s), d) : w === null || w === 32 || w === 41 || Bc(w) ? n(w) : (t.enter(r), t.enter(o), t.enter(l), t.enter("chunkString", { + contentType: "string" + }), y(w)); + } + function d(w) { + return w === 62 ? (t.enter(s), t.consume(w), t.exit(s), t.exit(i), t.exit(r), e) : (t.enter(l), t.enter("chunkString", { + contentType: "string" + }), f(w)); + } + function f(w) { + return w === 62 ? (t.exit("chunkString"), t.exit(l), d(w)) : w === null || w === 60 || xe(w) ? n(w) : (t.consume(w), w === 92 ? m : f); + } + function m(w) { + return w === 60 || w === 62 || w === 92 ? (t.consume(w), f) : f(w); + } + function y(w) { + return !c && (w === null || w === 41 || rt(w)) ? (t.exit("chunkString"), t.exit(l), t.exit(o), t.exit(r), e(w)) : c < u && w === 40 ? (t.consume(w), c++, y) : w === 41 ? (t.consume(w), c--, y) : w === null || w === 32 || w === 40 || Bc(w) ? n(w) : (t.consume(w), w === 92 ? b : y); + } + function b(w) { + return w === 40 || w === 41 || w === 92 ? (t.consume(w), y) : y(w); + } +} +function U7(t, e, n, r, i, s) { + const o = this; + let l = 0, a; + return u; + function u(f) { + return t.enter(r), t.enter(i), t.consume(f), t.exit(i), t.enter(s), c; + } + function c(f) { + return l > 999 || f === null || f === 91 || f === 93 && !a || // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + f === 94 && !l && "_hiddenFootnoteSupport" in o.parser.constructs ? n(f) : f === 93 ? (t.exit(s), t.enter(i), t.consume(f), t.exit(i), t.exit(r), e) : xe(f) ? (t.enter("lineEnding"), t.consume(f), t.exit("lineEnding"), c) : (t.enter("chunkString", { + contentType: "string" + }), h(f)); + } + function h(f) { + return f === null || f === 91 || f === 93 || xe(f) || l++ > 999 ? (t.exit("chunkString"), c(f)) : (t.consume(f), a || (a = !He(f)), f === 92 ? d : h); + } + function d(f) { + return f === 91 || f === 92 || f === 93 ? (t.consume(f), l++, h) : h(f); + } +} +function G7(t, e, n, r, i, s) { + let o; + return l; + function l(d) { + return d === 34 || d === 39 || d === 40 ? (t.enter(r), t.enter(i), t.consume(d), t.exit(i), o = d === 40 ? 41 : d, a) : n(d); + } + function a(d) { + return d === o ? (t.enter(i), t.consume(d), t.exit(i), t.exit(r), e) : (t.enter(s), u(d)); + } + function u(d) { + return d === o ? (t.exit(s), a(o)) : d === null ? n(d) : xe(d) ? (t.enter("lineEnding"), t.consume(d), t.exit("lineEnding"), je(t, u, "linePrefix")) : (t.enter("chunkString", { + contentType: "string" + }), c(d)); + } + function c(d) { + return d === o || d === null || xe(d) ? (t.exit("chunkString"), u(d)) : (t.consume(d), d === 92 ? h : c); + } + function h(d) { + return d === o || d === 92 ? (t.consume(d), c) : c(d); + } +} +function Ia(t, e) { + let n; + return r; + function r(i) { + return xe(i) ? (t.enter("lineEnding"), t.consume(i), t.exit("lineEnding"), n = !0, r) : He(i) ? je(t, r, n ? "linePrefix" : "lineSuffix")(i) : e(i); + } +} +const Sk = { + name: "definition", + tokenize: Nk +}, Ck = { + partial: !0, + tokenize: Mk +}; +function Nk(t, e, n) { + const r = this; + let i; + return s; + function s(f) { + return t.enter("definition"), o(f); + } + function o(f) { + return U7.call( + r, + t, + l, + // Note: we don’t need to reset the way `markdown-rs` does. + n, + "definitionLabel", + "definitionLabelMarker", + "definitionLabelString" + )(f); + } + function l(f) { + return i = yr(r.sliceSerialize(r.events[r.events.length - 1][1]).slice(1, -1)), f === 58 ? (t.enter("definitionMarker"), t.consume(f), t.exit("definitionMarker"), a) : n(f); + } + function a(f) { + return rt(f) ? Ia(t, u)(f) : u(f); + } + function u(f) { + return W7( + t, + c, + // Note: we don’t need to reset the way `markdown-rs` does. + n, + "definitionDestination", + "definitionDestinationLiteral", + "definitionDestinationLiteralMarker", + "definitionDestinationRaw", + "definitionDestinationString" + )(f); + } + function c(f) { + return t.attempt(Ck, h, h)(f); + } + function h(f) { + return He(f) ? je(t, d, "whitespace")(f) : d(f); + } + function d(f) { + return f === null || xe(f) ? (t.exit("definition"), r.parser.defined.push(i), e(f)) : n(f); + } +} +function Mk(t, e, n) { + return r; + function r(l) { + return rt(l) ? Ia(t, i)(l) : n(l); + } + function i(l) { + return G7(t, s, n, "definitionTitle", "definitionTitleMarker", "definitionTitleString")(l); + } + function s(l) { + return He(l) ? je(t, o, "whitespace")(l) : o(l); + } + function o(l) { + return l === null || xe(l) ? e(l) : n(l); + } +} +const Tk = { + name: "hardBreakEscape", + tokenize: Ek +}; +function Ek(t, e, n) { + return r; + function r(s) { + return t.enter("hardBreakEscape"), t.consume(s), i; + } + function i(s) { + return xe(s) ? (t.exit("hardBreakEscape"), e(s)) : n(s); + } +} +const Ok = { + name: "headingAtx", + resolve: Ak, + tokenize: Ik +}; +function Ak(t, e) { + let n = t.length - 2, r = 3, i, s; + return t[r][1].type === "whitespace" && (r += 2), n - 2 > r && t[n][1].type === "whitespace" && (n -= 2), t[n][1].type === "atxHeadingSequence" && (r === n - 1 || n - 4 > r && t[n - 2][1].type === "whitespace") && (n -= r + 1 === n ? 2 : 4), n > r && (i = { + type: "atxHeadingText", + start: t[r][1].start, + end: t[n][1].end + }, s = { + type: "chunkText", + start: t[r][1].start, + end: t[n][1].end, + contentType: "text" + }, Hn(t, r, n - r + 1, [["enter", i, e], ["enter", s, e], ["exit", s, e], ["exit", i, e]])), t; +} +function Ik(t, e, n) { + let r = 0; + return i; + function i(c) { + return t.enter("atxHeading"), s(c); + } + function s(c) { + return t.enter("atxHeadingSequence"), o(c); + } + function o(c) { + return c === 35 && r++ < 6 ? (t.consume(c), o) : c === null || rt(c) ? (t.exit("atxHeadingSequence"), l(c)) : n(c); + } + function l(c) { + return c === 35 ? (t.enter("atxHeadingSequence"), a(c)) : c === null || xe(c) ? (t.exit("atxHeading"), e(c)) : He(c) ? je(t, l, "whitespace")(c) : (t.enter("atxHeadingText"), u(c)); + } + function a(c) { + return c === 35 ? (t.consume(c), a) : (t.exit("atxHeadingSequence"), l(c)); + } + function u(c) { + return c === null || c === 35 || rt(c) ? (t.exit("atxHeadingText"), l(c)) : (t.consume(c), u); + } +} +const Dk = [ + "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", + "h1", + "h2", + "h3", + "h4", + "h5", + "h6", + "head", + "header", + "hr", + "html", + "iframe", + "legend", + "li", + "link", + "main", + "menu", + "menuitem", + "nav", + "noframes", + "ol", + "optgroup", + "option", + "p", + "param", + "search", + "section", + "summary", + "table", + "tbody", + "td", + "tfoot", + "th", + "thead", + "title", + "tr", + "track", + "ul" +], Q4 = ["pre", "script", "style", "textarea"], _k = { + concrete: !0, + name: "htmlFlow", + resolveTo: Pk, + tokenize: Bk +}, Rk = { + partial: !0, + tokenize: Fk +}, zk = { + partial: !0, + tokenize: Lk +}; +function Pk(t) { + let e = t.length; + for (; e-- && !(t[e][0] === "enter" && t[e][1].type === "htmlFlow"); ) + ; + return e > 1 && t[e - 2][1].type === "linePrefix" && (t[e][1].start = t[e - 2][1].start, t[e + 1][1].start = t[e - 2][1].start, t.splice(e - 2, 2)), t; +} +function Bk(t, e, n) { + const r = this; + let i, s, o, l, a; + return u; + function u(O) { + return c(O); + } + function c(O) { + return t.enter("htmlFlow"), t.enter("htmlFlowData"), t.consume(O), h; + } + function h(O) { + return O === 33 ? (t.consume(O), d) : O === 47 ? (t.consume(O), s = !0, y) : O === 63 ? (t.consume(O), i = 3, r.interrupt ? e : E) : sn(O) ? (t.consume(O), o = String.fromCharCode(O), b) : n(O); + } + function d(O) { + return O === 45 ? (t.consume(O), i = 2, f) : O === 91 ? (t.consume(O), i = 5, l = 0, m) : sn(O) ? (t.consume(O), i = 4, r.interrupt ? e : E) : n(O); + } + function f(O) { + return O === 45 ? (t.consume(O), r.interrupt ? e : E) : n(O); + } + function m(O) { + const gt = "CDATA["; + return O === gt.charCodeAt(l++) ? (t.consume(O), l === gt.length ? r.interrupt ? e : ne : m) : n(O); + } + function y(O) { + return sn(O) ? (t.consume(O), o = String.fromCharCode(O), b) : n(O); + } + function b(O) { + if (O === null || O === 47 || O === 62 || rt(O)) { + const gt = O === 47, Rt = o.toLowerCase(); + return !gt && !s && Q4.includes(Rt) ? (i = 1, r.interrupt ? e(O) : ne(O)) : Dk.includes(o.toLowerCase()) ? (i = 6, gt ? (t.consume(O), w) : r.interrupt ? e(O) : ne(O)) : (i = 7, r.interrupt && !r.parser.lazy[r.now().line] ? n(O) : s ? C(O) : N(O)); + } + return O === 45 || xn(O) ? (t.consume(O), o += String.fromCharCode(O), b) : n(O); + } + function w(O) { + return O === 62 ? (t.consume(O), r.interrupt ? e : ne) : n(O); + } + function C(O) { + return He(O) ? (t.consume(O), C) : P(O); + } + function N(O) { + return O === 47 ? (t.consume(O), P) : O === 58 || O === 95 || sn(O) ? (t.consume(O), B) : He(O) ? (t.consume(O), N) : P(O); + } + function B(O) { + return O === 45 || O === 46 || O === 58 || O === 95 || xn(O) ? (t.consume(O), B) : _(O); + } + function _(O) { + return O === 61 ? (t.consume(O), A) : He(O) ? (t.consume(O), _) : N(O); + } + function A(O) { + return O === null || O === 60 || O === 61 || O === 62 || O === 96 ? n(O) : O === 34 || O === 39 ? (t.consume(O), a = O, L) : He(O) ? (t.consume(O), A) : K(O); + } + function L(O) { + return O === a ? (t.consume(O), a = null, J) : O === null || xe(O) ? n(O) : (t.consume(O), L); + } + function K(O) { + return O === null || O === 34 || O === 39 || O === 47 || O === 60 || O === 61 || O === 62 || O === 96 || rt(O) ? _(O) : (t.consume(O), K); + } + function J(O) { + return O === 47 || O === 62 || He(O) ? N(O) : n(O); + } + function P(O) { + return O === 62 ? (t.consume(O), ie) : n(O); + } + function ie(O) { + return O === null || xe(O) ? ne(O) : He(O) ? (t.consume(O), ie) : n(O); + } + function ne(O) { + return O === 45 && i === 2 ? (t.consume(O), Re) : O === 60 && i === 1 ? (t.consume(O), fe) : O === 62 && i === 4 ? (t.consume(O), Qe) : O === 63 && i === 3 ? (t.consume(O), E) : O === 93 && i === 5 ? (t.consume(O), nt) : xe(O) && (i === 6 || i === 7) ? (t.exit("htmlFlowData"), t.check(Rk, Ue, _e)(O)) : O === null || xe(O) ? (t.exit("htmlFlowData"), _e(O)) : (t.consume(O), ne); + } + function _e(O) { + return t.check(zk, De, Ue)(O); + } + function De(O) { + return t.enter("lineEnding"), t.consume(O), t.exit("lineEnding"), ge; + } + function ge(O) { + return O === null || xe(O) ? _e(O) : (t.enter("htmlFlowData"), ne(O)); + } + function Re(O) { + return O === 45 ? (t.consume(O), E) : ne(O); + } + function fe(O) { + return O === 47 ? (t.consume(O), o = "", ye) : ne(O); + } + function ye(O) { + if (O === 62) { + const gt = o.toLowerCase(); + return Q4.includes(gt) ? (t.consume(O), Qe) : ne(O); + } + return sn(O) && o.length < 8 ? (t.consume(O), o += String.fromCharCode(O), ye) : ne(O); + } + function nt(O) { + return O === 93 ? (t.consume(O), E) : ne(O); + } + function E(O) { + return O === 62 ? (t.consume(O), Qe) : O === 45 && i === 2 ? (t.consume(O), E) : ne(O); + } + function Qe(O) { + return O === null || xe(O) ? (t.exit("htmlFlowData"), Ue(O)) : (t.consume(O), Qe); + } + function Ue(O) { + return t.exit("htmlFlow"), e(O); + } +} +function Lk(t, e, n) { + const r = this; + return i; + function i(o) { + return xe(o) ? (t.enter("lineEnding"), t.consume(o), t.exit("lineEnding"), s) : n(o); + } + function s(o) { + return r.parser.lazy[r.now().line] ? n(o) : e(o); + } +} +function Fk(t, e, n) { + return r; + function r(i) { + return t.enter("lineEnding"), t.consume(i), t.exit("lineEnding"), t.attempt(J0, e, n); + } +} +const Vk = { + name: "htmlText", + tokenize: Hk +}; +function Hk(t, e, n) { + const r = this; + let i, s, o; + return l; + function l(E) { + return t.enter("htmlText"), t.enter("htmlTextData"), t.consume(E), a; + } + function a(E) { + return E === 33 ? (t.consume(E), u) : E === 47 ? (t.consume(E), _) : E === 63 ? (t.consume(E), N) : sn(E) ? (t.consume(E), K) : n(E); + } + function u(E) { + return E === 45 ? (t.consume(E), c) : E === 91 ? (t.consume(E), s = 0, m) : sn(E) ? (t.consume(E), C) : n(E); + } + function c(E) { + return E === 45 ? (t.consume(E), f) : n(E); + } + function h(E) { + return E === null ? n(E) : E === 45 ? (t.consume(E), d) : xe(E) ? (o = h, fe(E)) : (t.consume(E), h); + } + function d(E) { + return E === 45 ? (t.consume(E), f) : h(E); + } + function f(E) { + return E === 62 ? Re(E) : E === 45 ? d(E) : h(E); + } + function m(E) { + const Qe = "CDATA["; + return E === Qe.charCodeAt(s++) ? (t.consume(E), s === Qe.length ? y : m) : n(E); + } + function y(E) { + return E === null ? n(E) : E === 93 ? (t.consume(E), b) : xe(E) ? (o = y, fe(E)) : (t.consume(E), y); + } + function b(E) { + return E === 93 ? (t.consume(E), w) : y(E); + } + function w(E) { + return E === 62 ? Re(E) : E === 93 ? (t.consume(E), w) : y(E); + } + function C(E) { + return E === null || E === 62 ? Re(E) : xe(E) ? (o = C, fe(E)) : (t.consume(E), C); + } + function N(E) { + return E === null ? n(E) : E === 63 ? (t.consume(E), B) : xe(E) ? (o = N, fe(E)) : (t.consume(E), N); + } + function B(E) { + return E === 62 ? Re(E) : N(E); + } + function _(E) { + return sn(E) ? (t.consume(E), A) : n(E); + } + function A(E) { + return E === 45 || xn(E) ? (t.consume(E), A) : L(E); + } + function L(E) { + return xe(E) ? (o = L, fe(E)) : He(E) ? (t.consume(E), L) : Re(E); + } + function K(E) { + return E === 45 || xn(E) ? (t.consume(E), K) : E === 47 || E === 62 || rt(E) ? J(E) : n(E); + } + function J(E) { + return E === 47 ? (t.consume(E), Re) : E === 58 || E === 95 || sn(E) ? (t.consume(E), P) : xe(E) ? (o = J, fe(E)) : He(E) ? (t.consume(E), J) : Re(E); + } + function P(E) { + return E === 45 || E === 46 || E === 58 || E === 95 || xn(E) ? (t.consume(E), P) : ie(E); + } + function ie(E) { + return E === 61 ? (t.consume(E), ne) : xe(E) ? (o = ie, fe(E)) : He(E) ? (t.consume(E), ie) : J(E); + } + function ne(E) { + return E === null || E === 60 || E === 61 || E === 62 || E === 96 ? n(E) : E === 34 || E === 39 ? (t.consume(E), i = E, _e) : xe(E) ? (o = ne, fe(E)) : He(E) ? (t.consume(E), ne) : (t.consume(E), De); + } + function _e(E) { + return E === i ? (t.consume(E), i = void 0, ge) : E === null ? n(E) : xe(E) ? (o = _e, fe(E)) : (t.consume(E), _e); + } + function De(E) { + return E === null || E === 34 || E === 39 || E === 60 || E === 61 || E === 96 ? n(E) : E === 47 || E === 62 || rt(E) ? J(E) : (t.consume(E), De); + } + function ge(E) { + return E === 47 || E === 62 || rt(E) ? J(E) : n(E); + } + function Re(E) { + return E === 62 ? (t.consume(E), t.exit("htmlTextData"), t.exit("htmlText"), e) : n(E); + } + function fe(E) { + return t.exit("htmlTextData"), t.enter("lineEnding"), t.consume(E), t.exit("lineEnding"), ye; + } + function ye(E) { + return He(E) ? je(t, nt, "linePrefix", r.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4)(E) : nt(E); + } + function nt(E) { + return t.enter("htmlTextData"), o(E); + } +} +const t1 = { + name: "labelEnd", + resolveAll: Wk, + resolveTo: Uk, + tokenize: Gk +}, $k = { + tokenize: Kk +}, qk = { + tokenize: Jk +}, jk = { + tokenize: Yk +}; +function Wk(t) { + let e = -1; + const n = []; + for (; ++e < t.length; ) { + const r = t[e][1]; + if (n.push(t[e]), r.type === "labelImage" || r.type === "labelLink" || r.type === "labelEnd") { + const i = r.type === "labelImage" ? 4 : 2; + r.type = "data", e += i; + } + } + return t.length !== n.length && Hn(t, 0, t.length, n), t; +} +function Uk(t, e) { + let n = t.length, r = 0, i, s, o, l; + for (; n--; ) + if (i = t[n][1], s) { + if (i.type === "link" || i.type === "labelLink" && i._inactive) + break; + t[n][0] === "enter" && i.type === "labelLink" && (i._inactive = !0); + } else if (o) { + if (t[n][0] === "enter" && (i.type === "labelImage" || i.type === "labelLink") && !i._balanced && (s = n, i.type !== "labelLink")) { + r = 2; + break; + } + } else i.type === "labelEnd" && (o = n); + const a = { + type: t[s][1].type === "labelLink" ? "link" : "image", + start: { + ...t[s][1].start + }, + end: { + ...t[t.length - 1][1].end + } + }, u = { + type: "label", + start: { + ...t[s][1].start + }, + end: { + ...t[o][1].end + } + }, c = { + type: "labelText", + start: { + ...t[s + r + 2][1].end + }, + end: { + ...t[o - 2][1].start + } + }; + return l = [["enter", a, e], ["enter", u, e]], l = Jn(l, t.slice(s + 1, s + r + 3)), l = Jn(l, [["enter", c, e]]), l = Jn(l, Sh(e.parser.constructs.insideSpan.null, t.slice(s + r + 4, o - 3), e)), l = Jn(l, [["exit", c, e], t[o - 2], t[o - 1], ["exit", u, e]]), l = Jn(l, t.slice(o + 1)), l = Jn(l, [["exit", a, e]]), Hn(t, s, t.length, l), t; +} +function Gk(t, e, n) { + const r = this; + let i = r.events.length, s, o; + for (; i--; ) + if ((r.events[i][1].type === "labelImage" || r.events[i][1].type === "labelLink") && !r.events[i][1]._balanced) { + s = r.events[i][1]; + break; + } + return l; + function l(d) { + return s ? s._inactive ? h(d) : (o = r.parser.defined.includes(yr(r.sliceSerialize({ + start: s.end, + end: r.now() + }))), t.enter("labelEnd"), t.enter("labelMarker"), t.consume(d), t.exit("labelMarker"), t.exit("labelEnd"), a) : n(d); + } + function a(d) { + return d === 40 ? t.attempt($k, c, o ? c : h)(d) : d === 91 ? t.attempt(qk, c, o ? u : h)(d) : o ? c(d) : h(d); + } + function u(d) { + return t.attempt(jk, c, h)(d); + } + function c(d) { + return e(d); + } + function h(d) { + return s._balanced = !0, n(d); + } +} +function Kk(t, e, n) { + return r; + function r(h) { + return t.enter("resource"), t.enter("resourceMarker"), t.consume(h), t.exit("resourceMarker"), i; + } + function i(h) { + return rt(h) ? Ia(t, s)(h) : s(h); + } + function s(h) { + return h === 41 ? c(h) : W7(t, o, l, "resourceDestination", "resourceDestinationLiteral", "resourceDestinationLiteralMarker", "resourceDestinationRaw", "resourceDestinationString", 32)(h); + } + function o(h) { + return rt(h) ? Ia(t, a)(h) : c(h); + } + function l(h) { + return n(h); + } + function a(h) { + return h === 34 || h === 39 || h === 40 ? G7(t, u, n, "resourceTitle", "resourceTitleMarker", "resourceTitleString")(h) : c(h); + } + function u(h) { + return rt(h) ? Ia(t, c)(h) : c(h); + } + function c(h) { + return h === 41 ? (t.enter("resourceMarker"), t.consume(h), t.exit("resourceMarker"), t.exit("resource"), e) : n(h); + } +} +function Jk(t, e, n) { + const r = this; + return i; + function i(l) { + return U7.call(r, t, s, o, "reference", "referenceMarker", "referenceString")(l); + } + function s(l) { + return r.parser.defined.includes(yr(r.sliceSerialize(r.events[r.events.length - 1][1]).slice(1, -1))) ? e(l) : n(l); + } + function o(l) { + return n(l); + } +} +function Yk(t, e, n) { + return r; + function r(s) { + return t.enter("reference"), t.enter("referenceMarker"), t.consume(s), t.exit("referenceMarker"), i; + } + function i(s) { + return s === 93 ? (t.enter("referenceMarker"), t.consume(s), t.exit("referenceMarker"), t.exit("reference"), e) : n(s); + } +} +const Zk = { + name: "labelStartImage", + resolveAll: t1.resolveAll, + tokenize: Xk +}; +function Xk(t, e, n) { + const r = this; + return i; + function i(l) { + return t.enter("labelImage"), t.enter("labelImageMarker"), t.consume(l), t.exit("labelImageMarker"), s; + } + function s(l) { + return l === 91 ? (t.enter("labelMarker"), t.consume(l), t.exit("labelMarker"), t.exit("labelImage"), o) : n(l); + } + function o(l) { + return l === 94 && "_hiddenFootnoteSupport" in r.parser.constructs ? n(l) : e(l); + } +} +const Qk = { + name: "labelStartLink", + resolveAll: t1.resolveAll, + tokenize: ex +}; +function ex(t, e, n) { + const r = this; + return i; + function i(o) { + return t.enter("labelLink"), t.enter("labelMarker"), t.consume(o), t.exit("labelMarker"), t.exit("labelLink"), s; + } + function s(o) { + return o === 94 && "_hiddenFootnoteSupport" in r.parser.constructs ? n(o) : e(o); + } +} +const gd = { + name: "lineEnding", + tokenize: tx +}; +function tx(t, e) { + return n; + function n(r) { + return t.enter("lineEnding"), t.consume(r), t.exit("lineEnding"), je(t, e, "linePrefix"); + } +} +const Wu = { + name: "thematicBreak", + tokenize: nx +}; +function nx(t, e, n) { + let r = 0, i; + return s; + function s(u) { + return t.enter("thematicBreak"), o(u); + } + function o(u) { + return i = u, l(u); + } + function l(u) { + return u === i ? (t.enter("thematicBreakSequence"), a(u)) : r >= 3 && (u === null || xe(u)) ? (t.exit("thematicBreak"), e(u)) : n(u); + } + function a(u) { + return u === i ? (t.consume(u), r++, a) : (t.exit("thematicBreakSequence"), He(u) ? je(t, l, "whitespace")(u) : l(u)); + } +} +const pn = { + continuation: { + tokenize: ox + }, + exit: ax, + name: "list", + tokenize: sx +}, rx = { + partial: !0, + tokenize: ux +}, ix = { + partial: !0, + tokenize: lx +}; +function sx(t, e, n) { + const r = this, i = r.events[r.events.length - 1]; + let s = i && i[1].type === "linePrefix" ? i[2].sliceSerialize(i[1], !0).length : 0, o = 0; + return l; + function l(f) { + const m = r.containerState.type || (f === 42 || f === 43 || f === 45 ? "listUnordered" : "listOrdered"); + if (m === "listUnordered" ? !r.containerState.marker || f === r.containerState.marker : Pf(f)) { + if (r.containerState.type || (r.containerState.type = m, t.enter(m, { + _container: !0 + })), m === "listUnordered") + return t.enter("listItemPrefix"), f === 42 || f === 45 ? t.check(Wu, n, u)(f) : u(f); + if (!r.interrupt || f === 49) + return t.enter("listItemPrefix"), t.enter("listItemValue"), a(f); + } + return n(f); + } + function a(f) { + return Pf(f) && ++o < 10 ? (t.consume(f), a) : (!r.interrupt || o < 2) && (r.containerState.marker ? f === r.containerState.marker : f === 41 || f === 46) ? (t.exit("listItemValue"), u(f)) : n(f); + } + function u(f) { + return t.enter("listItemMarker"), t.consume(f), t.exit("listItemMarker"), r.containerState.marker = r.containerState.marker || f, t.check( + J0, + // Can’t be empty when interrupting. + r.interrupt ? n : c, + t.attempt(rx, d, h) + ); + } + function c(f) { + return r.containerState.initialBlankLine = !0, s++, d(f); + } + function h(f) { + return He(f) ? (t.enter("listItemPrefixWhitespace"), t.consume(f), t.exit("listItemPrefixWhitespace"), d) : n(f); + } + function d(f) { + return r.containerState.size = s + r.sliceSerialize(t.exit("listItemPrefix"), !0).length, e(f); + } +} +function ox(t, e, n) { + const r = this; + return r.containerState._closeFlow = void 0, t.check(J0, i, s); + function i(l) { + return r.containerState.furtherBlankLines = r.containerState.furtherBlankLines || r.containerState.initialBlankLine, je(t, e, "listItemIndent", r.containerState.size + 1)(l); + } + function s(l) { + return r.containerState.furtherBlankLines || !He(l) ? (r.containerState.furtherBlankLines = void 0, r.containerState.initialBlankLine = void 0, o(l)) : (r.containerState.furtherBlankLines = void 0, r.containerState.initialBlankLine = void 0, t.attempt(ix, e, o)(l)); + } + function o(l) { + return r.containerState._closeFlow = !0, r.interrupt = void 0, je(t, t.attempt(pn, e, n), "linePrefix", r.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4)(l); + } +} +function lx(t, e, n) { + const r = this; + return je(t, i, "listItemIndent", r.containerState.size + 1); + function i(s) { + const o = r.events[r.events.length - 1]; + return o && o[1].type === "listItemIndent" && o[2].sliceSerialize(o[1], !0).length === r.containerState.size ? e(s) : n(s); + } +} +function ax(t) { + t.exit(this.containerState.type); +} +function ux(t, e, n) { + const r = this; + return je(t, i, "listItemPrefixWhitespace", r.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 5); + function i(s) { + const o = r.events[r.events.length - 1]; + return !He(s) && o && o[1].type === "listItemPrefixWhitespace" ? e(s) : n(s); + } +} +const e2 = { + name: "setextUnderline", + resolveTo: cx, + tokenize: hx +}; +function cx(t, e) { + let n = t.length, r, i, s; + for (; n--; ) + if (t[n][0] === "enter") { + if (t[n][1].type === "content") { + r = n; + break; + } + t[n][1].type === "paragraph" && (i = n); + } else + t[n][1].type === "content" && t.splice(n, 1), !s && t[n][1].type === "definition" && (s = n); + const o = { + type: "setextHeading", + start: { + ...t[r][1].start + }, + end: { + ...t[t.length - 1][1].end + } + }; + return t[i][1].type = "setextHeadingText", s ? (t.splice(i, 0, ["enter", o, e]), t.splice(s + 1, 0, ["exit", t[r][1], e]), t[r][1].end = { + ...t[s][1].end + }) : t[r][1] = o, t.push(["exit", o, e]), t; +} +function hx(t, e, n) { + const r = this; + let i; + return s; + function s(u) { + let c = r.events.length, h; + for (; c--; ) + if (r.events[c][1].type !== "lineEnding" && r.events[c][1].type !== "linePrefix" && r.events[c][1].type !== "content") { + h = r.events[c][1].type === "paragraph"; + break; + } + return !r.parser.lazy[r.now().line] && (r.interrupt || h) ? (t.enter("setextHeadingLine"), i = u, o(u)) : n(u); + } + function o(u) { + return t.enter("setextHeadingLineSequence"), l(u); + } + function l(u) { + return u === i ? (t.consume(u), l) : (t.exit("setextHeadingLineSequence"), He(u) ? je(t, a, "lineSuffix")(u) : a(u)); + } + function a(u) { + return u === null || xe(u) ? (t.exit("setextHeadingLine"), e(u)) : n(u); + } +} +const dx = { + tokenize: fx +}; +function fx(t) { + const e = this, n = t.attempt( + // Try to parse a blank line. + J0, + r, + // Try to parse initial flow (essentially, only code). + t.attempt(this.parser.constructs.flowInitial, i, je(t, t.attempt(this.parser.constructs.flow, i, t.attempt(vk, i)), "linePrefix")) + ); + return n; + function r(s) { + if (s === null) { + t.consume(s); + return; + } + return t.enter("lineEndingBlank"), t.consume(s), t.exit("lineEndingBlank"), e.currentConstruct = void 0, n; + } + function i(s) { + if (s === null) { + t.consume(s); + return; + } + return t.enter("lineEnding"), t.consume(s), t.exit("lineEnding"), e.currentConstruct = void 0, n; + } +} +const px = { + resolveAll: J7() +}, mx = K7("string"), gx = K7("text"); +function K7(t) { + return { + resolveAll: J7(t === "text" ? yx : void 0), + tokenize: e + }; + function e(n) { + const r = this, i = this.parser.constructs[t], s = n.attempt(i, o, l); + return o; + function o(c) { + return u(c) ? s(c) : l(c); + } + function l(c) { + if (c === null) { + n.consume(c); + return; + } + return n.enter("data"), n.consume(c), a; + } + function a(c) { + return u(c) ? (n.exit("data"), s(c)) : (n.consume(c), a); + } + function u(c) { + if (c === null) + return !0; + const h = i[c]; + let d = -1; + if (h) + for (; ++d < h.length; ) { + const f = h[d]; + if (!f.previous || f.previous.call(r, r.previous)) + return !0; + } + return !1; + } + } +} +function J7(t) { + return e; + function e(n, r) { + let i = -1, s; + for (; ++i <= n.length; ) + s === void 0 ? n[i] && n[i][1].type === "data" && (s = i, i++) : (!n[i] || n[i][1].type !== "data") && (i !== s + 2 && (n[s][1].end = n[i - 1][1].end, n.splice(s + 2, i - s - 2), i = s + 2), s = void 0); + return t ? t(n, r) : n; + } +} +function yx(t, e) { + let n = 0; + for (; ++n <= t.length; ) + if ((n === t.length || t[n][1].type === "lineEnding") && t[n - 1][1].type === "data") { + const r = t[n - 1][1], i = e.sliceStream(r); + let s = i.length, o = -1, l = 0, a; + for (; s--; ) { + const u = i[s]; + if (typeof u == "string") { + for (o = u.length; u.charCodeAt(o - 1) === 32; ) + l++, o--; + if (o) break; + o = -1; + } else if (u === -2) + a = !0, l++; + else if (u !== -1) { + s++; + break; + } + } + if (e._contentTypeTextTrailing && n === t.length && (l = 0), l) { + const u = { + type: n === t.length || a || l < 2 ? "lineSuffix" : "hardBreakTrailing", + start: { + _bufferIndex: s ? o : r.start._bufferIndex + o, + _index: r.start._index + s, + line: r.end.line, + column: r.end.column - l, + offset: r.end.offset - l + }, + end: { + ...r.end + } + }; + r.end = { + ...u.start + }, r.start.offset === r.end.offset ? Object.assign(r, u) : (t.splice(n, 0, ["enter", u, e], ["exit", u, e]), n += 2); + } + n++; + } + return t; +} +const vx = { + 42: pn, + 43: pn, + 45: pn, + 48: pn, + 49: pn, + 50: pn, + 51: pn, + 52: pn, + 53: pn, + 54: pn, + 55: pn, + 56: pn, + 57: pn, + 62: H7 +}, bx = { + 91: Sk +}, wx = { + [-2]: md, + [-1]: md, + 32: md +}, kx = { + 35: Ok, + 42: Wu, + 45: [e2, Wu], + 60: _k, + 61: e2, + 95: Wu, + 96: X4, + 126: X4 +}, xx = { + 38: q7, + 92: $7 +}, Sx = { + [-5]: gd, + [-4]: gd, + [-3]: gd, + 33: Zk, + 38: q7, + 42: Bf, + 60: [Qw, Vk], + 91: Qk, + 92: [Tk, $7], + 93: t1, + 95: Bf, + 96: dk +}, Cx = { + null: [Bf, px] +}, Nx = { + null: [42, 95] +}, Mx = { + null: [] +}, Tx = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + attentionMarkers: Nx, + contentInitial: bx, + disable: Mx, + document: vx, + flow: kx, + flowInitial: wx, + insideSpan: Cx, + string: xx, + text: Sx +}, Symbol.toStringTag, { value: "Module" })); +function Ex(t, e, n) { + let r = { + _bufferIndex: -1, + _index: 0, + line: n && n.line || 1, + column: n && n.column || 1, + offset: n && n.offset || 0 + }; + const i = {}, s = []; + let o = [], l = []; + const a = { + attempt: L(_), + check: L(A), + consume: C, + enter: N, + exit: B, + interrupt: L(A, { + interrupt: !0 + }) + }, u = { + code: null, + containerState: {}, + defineSkip: y, + events: [], + now: m, + parser: t, + previous: null, + sliceSerialize: d, + sliceStream: f, + write: h + }; + let c = e.tokenize.call(u, a); + return e.resolveAll && s.push(e), u; + function h(ie) { + return o = Jn(o, ie), b(), o[o.length - 1] !== null ? [] : (K(e, 0), u.events = Sh(s, u.events, u), u.events); + } + function d(ie, ne) { + return Ax(f(ie), ne); + } + function f(ie) { + return Ox(o, ie); + } + function m() { + const { + _bufferIndex: ie, + _index: ne, + line: _e, + column: De, + offset: ge + } = r; + return { + _bufferIndex: ie, + _index: ne, + line: _e, + column: De, + offset: ge + }; + } + function y(ie) { + i[ie.line] = ie.column, P(); + } + function b() { + let ie; + for (; r._index < o.length; ) { + const ne = o[r._index]; + if (typeof ne == "string") + for (ie = r._index, r._bufferIndex < 0 && (r._bufferIndex = 0); r._index === ie && r._bufferIndex < ne.length; ) + w(ne.charCodeAt(r._bufferIndex)); + else + w(ne); + } + } + function w(ie) { + c = c(ie); + } + function C(ie) { + xe(ie) ? (r.line++, r.column = 1, r.offset += ie === -3 ? 2 : 1, P()) : ie !== -1 && (r.column++, r.offset++), r._bufferIndex < 0 ? r._index++ : (r._bufferIndex++, r._bufferIndex === // Points w/ non-negative `_bufferIndex` reference + // strings. + /** @type {string} */ + o[r._index].length && (r._bufferIndex = -1, r._index++)), u.previous = ie; + } + function N(ie, ne) { + const _e = ne || {}; + return _e.type = ie, _e.start = m(), u.events.push(["enter", _e, u]), l.push(_e), _e; + } + function B(ie) { + const ne = l.pop(); + return ne.end = m(), u.events.push(["exit", ne, u]), ne; + } + function _(ie, ne) { + K(ie, ne.from); + } + function A(ie, ne) { + ne.restore(); + } + function L(ie, ne) { + return _e; + function _e(De, ge, Re) { + let fe, ye, nt, E; + return Array.isArray(De) ? ( + /* c8 ignore next 1 */ + Ue(De) + ) : "tokenize" in De ? ( + // Looks like a construct. + Ue([ + /** @type {Construct} */ + De + ]) + ) : Qe(De); + function Qe(lt) { + return bt; + function bt(dt) { + const Lt = dt !== null && lt[dt], $t = dt !== null && lt.null, Xt = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...Array.isArray(Lt) ? Lt : Lt ? [Lt] : [], + ...Array.isArray($t) ? $t : $t ? [$t] : [] + ]; + return Ue(Xt)(dt); + } + } + function Ue(lt) { + return fe = lt, ye = 0, lt.length === 0 ? Re : O(lt[ye]); + } + function O(lt) { + return bt; + function bt(dt) { + return E = J(), nt = lt, lt.partial || (u.currentConstruct = lt), lt.name && u.parser.constructs.disable.null.includes(lt.name) ? Rt() : lt.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + ne ? Object.assign(Object.create(u), ne) : u, + a, + gt, + Rt + )(dt); + } + } + function gt(lt) { + return ie(nt, E), ge; + } + function Rt(lt) { + return E.restore(), ++ye < fe.length ? O(fe[ye]) : Re; + } + } + } + function K(ie, ne) { + ie.resolveAll && !s.includes(ie) && s.push(ie), ie.resolve && Hn(u.events, ne, u.events.length - ne, ie.resolve(u.events.slice(ne), u)), ie.resolveTo && (u.events = ie.resolveTo(u.events, u)); + } + function J() { + const ie = m(), ne = u.previous, _e = u.currentConstruct, De = u.events.length, ge = Array.from(l); + return { + from: De, + restore: Re + }; + function Re() { + r = ie, u.previous = ne, u.currentConstruct = _e, u.events.length = De, l = ge, P(); + } + } + function P() { + r.line in i && r.column < 2 && (r.column = i[r.line], r.offset += i[r.line] - 1); + } +} +function Ox(t, e) { + const n = e.start._index, r = e.start._bufferIndex, i = e.end._index, s = e.end._bufferIndex; + let o; + if (n === i) + o = [t[n].slice(r, s)]; + else { + if (o = t.slice(n, i), r > -1) { + const l = o[0]; + typeof l == "string" ? o[0] = l.slice(r) : o.shift(); + } + s > 0 && o.push(t[i].slice(0, s)); + } + return o; +} +function Ax(t, e) { + let n = -1; + const r = []; + let i; + for (; ++n < t.length; ) { + const s = t[n]; + let o; + if (typeof s == "string") + o = s; + else switch (s) { + case -5: { + o = "\r"; + break; + } + case -4: { + o = ` +`; + break; + } + case -3: { + o = `\r +`; + break; + } + case -2: { + o = e ? " " : " "; + break; + } + case -1: { + if (!e && i) continue; + o = " "; + break; + } + default: + o = String.fromCharCode(s); + } + i = s === -2, r.push(o); + } + return r.join(""); +} +function Ix(t) { + const r = { + constructs: ( + /** @type {FullNormalizedExtension} */ + F7([Tx, ...(t || {}).extensions || []]) + ), + content: i(Uw), + defined: [], + document: i(Kw), + flow: i(dx), + lazy: {}, + string: i(mx), + text: i(gx) + }; + return r; + function i(s) { + return o; + function o(l) { + return Ex(r, s, l); + } + } +} +function Dx(t) { + for (; !j7(t); ) + ; + return t; +} +const t2 = /[\0\t\n\r]/g; +function _x() { + let t = 1, e = "", n = !0, r; + return i; + function i(s, o, l) { + const a = []; + let u, c, h, d, f; + for (s = e + (typeof s == "string" ? s.toString() : new TextDecoder(o || void 0).decode(s)), h = 0, e = "", n && (s.charCodeAt(0) === 65279 && h++, n = void 0); h < s.length; ) { + if (t2.lastIndex = h, u = t2.exec(s), d = u && u.index !== void 0 ? u.index : s.length, f = s.charCodeAt(d), !u) { + e = s.slice(h); + break; + } + if (f === 10 && h === d && r) + a.push(-3), r = void 0; + else + switch (r && (a.push(-5), r = void 0), h < d && (a.push(s.slice(h, d)), t += d - h), f) { + case 0: { + a.push(65533), t++; + break; + } + case 9: { + for (c = Math.ceil(t / 4) * 4, a.push(-2); t++ < c; ) a.push(-1); + break; + } + case 10: { + a.push(-4), t = 1; + break; + } + default: + r = !0, t = 1; + } + h = d + 1; + } + return l && (r && a.push(-5), e && a.push(e), a.push(null)), a; + } +} +const Rx = /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi; +function Y7(t) { + return t.replace(Rx, zx); +} +function zx(t, e, n) { + if (e) + return e; + if (n.charCodeAt(0) === 35) { + const i = n.charCodeAt(1), s = i === 120 || i === 88; + return V7(n.slice(s ? 2 : 1), s ? 16 : 10); + } + return e1(n) || t; +} +function Da(t) { + return !t || typeof t != "object" ? "" : "position" in t || "type" in t ? n2(t.position) : "start" in t || "end" in t ? n2(t) : "line" in t || "column" in t ? Lf(t) : ""; +} +function Lf(t) { + return r2(t && t.line) + ":" + r2(t && t.column); +} +function n2(t) { + return Lf(t && t.start) + "-" + Lf(t && t.end); +} +function r2(t) { + return t && typeof t == "number" ? t : 1; +} +const Z7 = {}.hasOwnProperty; +function Px(t, e, n) { + return typeof e != "string" && (n = e, e = void 0), Bx(n)(Dx(Ix(n).document().write(_x()(t, e, !0)))); +} +function Bx(t) { + const e = { + transforms: [], + canContainEols: ["emphasis", "fragment", "heading", "paragraph", "strong"], + enter: { + autolink: s(ee), + autolinkProtocol: J, + autolinkEmail: J, + atxHeading: s(F), + blockQuote: s($t), + characterEscape: J, + characterReference: J, + codeFenced: s(Xt), + codeFencedFenceInfo: o, + codeFencedFenceMeta: o, + codeIndented: s(Xt, o), + codeText: s(ks, o), + codeTextData: J, + data: J, + codeFlowValue: J, + definition: s(x), + definitionDestinationString: o, + definitionLabelString: o, + definitionTitleString: o, + emphasis: s(I), + hardBreakEscape: s(W), + hardBreakTrailing: s(W), + htmlFlow: s(j, o), + htmlFlowData: J, + htmlText: s(j, o), + htmlTextData: J, + image: s(q), + label: o, + link: s(ee), + listItem: s(te), + listItemValue: d, + listOrdered: s(X, h), + listUnordered: s(X), + paragraph: s(U), + reference: O, + referenceString: o, + resourceDestinationString: o, + resourceTitleString: o, + setextHeading: s(F), + strong: s(ve), + thematicBreak: s(pe) + }, + exit: { + atxHeading: a(), + atxHeadingSequence: _, + autolink: a(), + autolinkEmail: Lt, + autolinkProtocol: dt, + blockQuote: a(), + characterEscapeValue: P, + characterReferenceMarkerHexadecimal: Rt, + characterReferenceMarkerNumeric: Rt, + characterReferenceValue: lt, + characterReference: bt, + codeFenced: a(b), + codeFencedFence: y, + codeFencedFenceInfo: f, + codeFencedFenceMeta: m, + codeFlowValue: P, + codeIndented: a(w), + codeText: a(ge), + codeTextData: P, + data: P, + definition: a(), + definitionDestinationString: B, + definitionLabelString: C, + definitionTitleString: N, + emphasis: a(), + hardBreakEscape: a(ne), + hardBreakTrailing: a(ne), + htmlFlow: a(_e), + htmlFlowData: P, + htmlText: a(De), + htmlTextData: P, + image: a(fe), + label: nt, + labelText: ye, + lineEnding: ie, + link: a(Re), + listItem: a(), + listOrdered: a(), + listUnordered: a(), + paragraph: a(), + referenceString: gt, + resourceDestinationString: E, + resourceTitleString: Qe, + resource: Ue, + setextHeading: a(K), + setextHeadingLineSequence: L, + setextHeadingText: A, + strong: a(), + thematicBreak: a() + } + }; + X7(e, (t || {}).mdastExtensions || []); + const n = {}; + return r; + function r(R) { + let $ = { + type: "root", + children: [] + }; + const ue = { + stack: [$], + tokenStack: [], + config: e, + enter: l, + exit: u, + buffer: o, + resume: c, + data: n + }, de = []; + let Ie = -1; + for (; ++Ie < R.length; ) + if (R[Ie][1].type === "listOrdered" || R[Ie][1].type === "listUnordered") + if (R[Ie][0] === "enter") + de.push(Ie); + else { + const et = de.pop(); + Ie = i(R, et, Ie); + } + for (Ie = -1; ++Ie < R.length; ) { + const et = e[R[Ie][0]]; + Z7.call(et, R[Ie][1].type) && et[R[Ie][1].type].call(Object.assign({ + sliceSerialize: R[Ie][2].sliceSerialize + }, ue), R[Ie][1]); + } + if (ue.tokenStack.length > 0) { + const et = ue.tokenStack[ue.tokenStack.length - 1]; + (et[1] || i2).call(ue, void 0, et[0]); + } + for ($.position = { + start: Ii(R.length > 0 ? R[0][1].start : { + line: 1, + column: 1, + offset: 0 + }), + end: Ii(R.length > 0 ? R[R.length - 2][1].end : { + line: 1, + column: 1, + offset: 0 + }) + }, Ie = -1; ++Ie < e.transforms.length; ) + $ = e.transforms[Ie]($) || $; + return $; + } + function i(R, $, ue) { + let de = $ - 1, Ie = -1, et = !1, wt, ft, fn, sr; + for (; ++de <= ue; ) { + const Ge = R[de]; + switch (Ge[1].type) { + case "listUnordered": + case "listOrdered": + case "blockQuote": { + Ge[0] === "enter" ? Ie++ : Ie--, sr = void 0; + break; + } + case "lineEndingBlank": { + Ge[0] === "enter" && (wt && !sr && !Ie && !fn && (fn = de), sr = void 0); + break; + } + case "linePrefix": + case "listItemValue": + case "listItemMarker": + case "listItemPrefix": + case "listItemPrefixWhitespace": + break; + default: + sr = void 0; + } + if (!Ie && Ge[0] === "enter" && Ge[1].type === "listItemPrefix" || Ie === -1 && Ge[0] === "exit" && (Ge[1].type === "listUnordered" || Ge[1].type === "listOrdered")) { + if (wt) { + let Tt = de; + for (ft = void 0; Tt--; ) { + const Qt = R[Tt]; + if (Qt[1].type === "lineEnding" || Qt[1].type === "lineEndingBlank") { + if (Qt[0] === "exit") continue; + ft && (R[ft][1].type = "lineEndingBlank", et = !0), Qt[1].type = "lineEnding", ft = Tt; + } else if (!(Qt[1].type === "linePrefix" || Qt[1].type === "blockQuotePrefix" || Qt[1].type === "blockQuotePrefixWhitespace" || Qt[1].type === "blockQuoteMarker" || Qt[1].type === "listItemIndent")) break; + } + fn && (!ft || fn < ft) && (wt._spread = !0), wt.end = Object.assign({}, ft ? R[ft][1].start : Ge[1].end), R.splice(ft || de, 0, ["exit", wt, Ge[2]]), de++, ue++; + } + if (Ge[1].type === "listItemPrefix") { + const Tt = { + type: "listItem", + _spread: !1, + start: Object.assign({}, Ge[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: void 0 + }; + wt = Tt, R.splice(de, 0, ["enter", Tt, Ge[2]]), de++, ue++, fn = void 0, sr = !0; + } + } + } + return R[$][1]._spread = et, ue; + } + function s(R, $) { + return ue; + function ue(de) { + l.call(this, R(de), de), $ && $.call(this, de); + } + } + function o() { + this.stack.push({ + type: "fragment", + children: [] + }); + } + function l(R, $, ue) { + this.stack[this.stack.length - 1].children.push(R), this.stack.push(R), this.tokenStack.push([$, ue || void 0]), R.position = { + start: Ii($.start), + // @ts-expect-error: `end` will be patched later. + end: void 0 + }; + } + function a(R) { + return $; + function $(ue) { + R && R.call(this, ue), u.call(this, ue); + } + } + function u(R, $) { + const ue = this.stack.pop(), de = this.tokenStack.pop(); + if (de) + de[0].type !== R.type && ($ ? $.call(this, R, de[0]) : (de[1] || i2).call(this, R, de[0])); + else throw new Error("Cannot close `" + R.type + "` (" + Da({ + start: R.start, + end: R.end + }) + "): it’s not open"); + ue.position.end = Ii(R.end); + } + function c() { + return Qp(this.stack.pop()); + } + function h() { + this.data.expectingFirstListItemValue = !0; + } + function d(R) { + if (this.data.expectingFirstListItemValue) { + const $ = this.stack[this.stack.length - 2]; + $.start = Number.parseInt(this.sliceSerialize(R), 10), this.data.expectingFirstListItemValue = void 0; + } + } + function f() { + const R = this.resume(), $ = this.stack[this.stack.length - 1]; + $.lang = R; + } + function m() { + const R = this.resume(), $ = this.stack[this.stack.length - 1]; + $.meta = R; + } + function y() { + this.data.flowCodeInside || (this.buffer(), this.data.flowCodeInside = !0); + } + function b() { + const R = this.resume(), $ = this.stack[this.stack.length - 1]; + $.value = R.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, ""), this.data.flowCodeInside = void 0; + } + function w() { + const R = this.resume(), $ = this.stack[this.stack.length - 1]; + $.value = R.replace(/(\r?\n|\r)$/g, ""); + } + function C(R) { + const $ = this.resume(), ue = this.stack[this.stack.length - 1]; + ue.label = $, ue.identifier = yr(this.sliceSerialize(R)).toLowerCase(); + } + function N() { + const R = this.resume(), $ = this.stack[this.stack.length - 1]; + $.title = R; + } + function B() { + const R = this.resume(), $ = this.stack[this.stack.length - 1]; + $.url = R; + } + function _(R) { + const $ = this.stack[this.stack.length - 1]; + if (!$.depth) { + const ue = this.sliceSerialize(R).length; + $.depth = ue; + } + } + function A() { + this.data.setextHeadingSlurpLineEnding = !0; + } + function L(R) { + const $ = this.stack[this.stack.length - 1]; + $.depth = this.sliceSerialize(R).codePointAt(0) === 61 ? 1 : 2; + } + function K() { + this.data.setextHeadingSlurpLineEnding = void 0; + } + function J(R) { + const ue = this.stack[this.stack.length - 1].children; + let de = ue[ue.length - 1]; + (!de || de.type !== "text") && (de = le(), de.position = { + start: Ii(R.start), + // @ts-expect-error: we’ll add `end` later. + end: void 0 + }, ue.push(de)), this.stack.push(de); + } + function P(R) { + const $ = this.stack.pop(); + $.value += this.sliceSerialize(R), $.position.end = Ii(R.end); + } + function ie(R) { + const $ = this.stack[this.stack.length - 1]; + if (this.data.atHardBreak) { + const ue = $.children[$.children.length - 1]; + ue.position.end = Ii(R.end), this.data.atHardBreak = void 0; + return; + } + !this.data.setextHeadingSlurpLineEnding && e.canContainEols.includes($.type) && (J.call(this, R), P.call(this, R)); + } + function ne() { + this.data.atHardBreak = !0; + } + function _e() { + const R = this.resume(), $ = this.stack[this.stack.length - 1]; + $.value = R; + } + function De() { + const R = this.resume(), $ = this.stack[this.stack.length - 1]; + $.value = R; + } + function ge() { + const R = this.resume(), $ = this.stack[this.stack.length - 1]; + $.value = R; + } + function Re() { + const R = this.stack[this.stack.length - 1]; + if (this.data.inReference) { + const $ = this.data.referenceType || "shortcut"; + R.type += "Reference", R.referenceType = $, delete R.url, delete R.title; + } else + delete R.identifier, delete R.label; + this.data.referenceType = void 0; + } + function fe() { + const R = this.stack[this.stack.length - 1]; + if (this.data.inReference) { + const $ = this.data.referenceType || "shortcut"; + R.type += "Reference", R.referenceType = $, delete R.url, delete R.title; + } else + delete R.identifier, delete R.label; + this.data.referenceType = void 0; + } + function ye(R) { + const $ = this.sliceSerialize(R), ue = this.stack[this.stack.length - 2]; + ue.label = Y7($), ue.identifier = yr($).toLowerCase(); + } + function nt() { + const R = this.stack[this.stack.length - 1], $ = this.resume(), ue = this.stack[this.stack.length - 1]; + if (this.data.inReference = !0, ue.type === "link") { + const de = R.children; + ue.children = de; + } else + ue.alt = $; + } + function E() { + const R = this.resume(), $ = this.stack[this.stack.length - 1]; + $.url = R; + } + function Qe() { + const R = this.resume(), $ = this.stack[this.stack.length - 1]; + $.title = R; + } + function Ue() { + this.data.inReference = void 0; + } + function O() { + this.data.referenceType = "collapsed"; + } + function gt(R) { + const $ = this.resume(), ue = this.stack[this.stack.length - 1]; + ue.label = $, ue.identifier = yr(this.sliceSerialize(R)).toLowerCase(), this.data.referenceType = "full"; + } + function Rt(R) { + this.data.characterReferenceType = R.type; + } + function lt(R) { + const $ = this.sliceSerialize(R), ue = this.data.characterReferenceType; + let de; + ue ? (de = V7($, ue === "characterReferenceMarkerNumeric" ? 10 : 16), this.data.characterReferenceType = void 0) : de = e1($); + const Ie = this.stack[this.stack.length - 1]; + Ie.value += de; + } + function bt(R) { + const $ = this.stack.pop(); + $.position.end = Ii(R.end); + } + function dt(R) { + P.call(this, R); + const $ = this.stack[this.stack.length - 1]; + $.url = this.sliceSerialize(R); + } + function Lt(R) { + P.call(this, R); + const $ = this.stack[this.stack.length - 1]; + $.url = "mailto:" + this.sliceSerialize(R); + } + function $t() { + return { + type: "blockquote", + children: [] + }; + } + function Xt() { + return { + type: "code", + lang: null, + meta: null, + value: "" + }; + } + function ks() { + return { + type: "inlineCode", + value: "" + }; + } + function x() { + return { + type: "definition", + identifier: "", + label: null, + title: null, + url: "" + }; + } + function I() { + return { + type: "emphasis", + children: [] + }; + } + function F() { + return { + type: "heading", + // @ts-expect-error `depth` will be set later. + depth: 0, + children: [] + }; + } + function W() { + return { + type: "break" + }; + } + function j() { + return { + type: "html", + value: "" + }; + } + function q() { + return { + type: "image", + title: null, + url: "", + alt: null + }; + } + function ee() { + return { + type: "link", + title: null, + url: "", + children: [] + }; + } + function X(R) { + return { + type: "list", + ordered: R.type === "listOrdered", + start: null, + spread: R._spread, + children: [] + }; + } + function te(R) { + return { + type: "listItem", + spread: R._spread, + checked: null, + children: [] + }; + } + function U() { + return { + type: "paragraph", + children: [] + }; + } + function ve() { + return { + type: "strong", + children: [] + }; + } + function le() { + return { + type: "text", + value: "" + }; + } + function pe() { + return { + type: "thematicBreak" + }; + } +} +function Ii(t) { + return { + line: t.line, + column: t.column, + offset: t.offset + }; +} +function X7(t, e) { + let n = -1; + for (; ++n < e.length; ) { + const r = e[n]; + Array.isArray(r) ? X7(t, r) : Lx(t, r); + } +} +function Lx(t, e) { + let n; + for (n in e) + if (Z7.call(e, n)) + switch (n) { + case "canContainEols": { + const r = e[n]; + r && t[n].push(...r); + break; + } + case "transforms": { + const r = e[n]; + r && t[n].push(...r); + break; + } + case "enter": + case "exit": { + const r = e[n]; + r && Object.assign(t[n], r); + break; + } + } +} +function i2(t, e) { + throw t ? new Error("Cannot close `" + t.type + "` (" + Da({ + start: t.start, + end: t.end + }) + "): a different token (`" + e.type + "`, " + Da({ + start: e.start, + end: e.end + }) + ") is open") : new Error("Cannot close document, a token (`" + e.type + "`, " + Da({ + start: e.start, + end: e.end + }) + ") is still open"); +} +function Ff(t) { + const e = this; + e.parser = n; + function n(r) { + return Px(r, { + ...e.data("settings"), + ...t, + // Note: these options are not in the readme. + // The goal is for them to be set by plugins on `data` instead of being + // passed by users. + extensions: e.data("micromarkExtensions") || [], + mdastExtensions: e.data("fromMarkdownExtensions") || [] + }); + } +} +const s2 = {}.hasOwnProperty; +function Fx(t, e) { + const n = e || {}; + function r(i, ...s) { + let o = r.invalid; + const l = r.handlers; + if (i && s2.call(i, t)) { + const a = String(i[t]); + o = s2.call(l, a) ? l[a] : r.unknown; + } + if (o) + return o.call(this, i, ...s); + } + return r.handlers = n.handlers || {}, r.invalid = n.invalid, r.unknown = n.unknown, r; +} +const Vx = {}.hasOwnProperty; +function Q7(t, e) { + let n = -1, r; + if (e.extensions) + for (; ++n < e.extensions.length; ) + Q7(t, e.extensions[n]); + for (r in e) + if (Vx.call(e, r)) + switch (r) { + case "extensions": + break; + case "unsafe": { + o2(t[r], e[r]); + break; + } + case "join": { + o2(t[r], e[r]); + break; + } + case "handlers": { + Hx(t[r], e[r]); + break; + } + default: + t.options[r] = e[r]; + } + return t; +} +function o2(t, e) { + e && t.push(...e); +} +function Hx(t, e) { + e && Object.assign(t, e); +} +function $x(t, e, n, r) { + const i = n.enter("blockquote"), s = n.createTracker(r); + s.move("> "), s.shift(2); + const o = n.indentLines( + n.containerFlow(t, s.current()), + qx + ); + return i(), o; +} +function qx(t, e, n) { + return ">" + (n ? "" : " ") + t; +} +function e6(t, e) { + return l2(t, e.inConstruct, !0) && !l2(t, e.notInConstruct, !1); +} +function l2(t, e, n) { + if (typeof e == "string" && (e = [e]), !e || e.length === 0) + return n; + let r = -1; + for (; ++r < e.length; ) + if (t.includes(e[r])) + return !0; + return !1; +} +function a2(t, e, n, r) { + let i = -1; + for (; ++i < n.unsafe.length; ) + if (n.unsafe[i].character === ` +` && e6(n.stack, n.unsafe[i])) + return /[ \t]/.test(r.before) ? "" : " "; + return `\\ +`; +} +function jx(t, e) { + const n = String(t); + let r = n.indexOf(e), i = r, s = 0, o = 0; + if (typeof e != "string") + throw new TypeError("Expected substring"); + for (; r !== -1; ) + r === i ? ++s > o && (o = s) : s = 1, i = r + e.length, r = n.indexOf(e, i); + return o; +} +function Vf(t, e) { + return !!(e.options.fences === !1 && t.value && // If there’s no info… + !t.lang && // And there’s a non-whitespace character… + /[^ \r\n]/.test(t.value) && // And the value doesn’t start or end in a blank… + !/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(t.value)); +} +function Wx(t) { + const e = t.options.fence || "`"; + if (e !== "`" && e !== "~") + throw new Error( + "Cannot serialize code with `" + e + "` for `options.fence`, expected `` ` `` or `~`" + ); + return e; +} +function Ux(t, e, n, r) { + const i = Wx(n), s = t.value || "", o = i === "`" ? "GraveAccent" : "Tilde"; + if (Vf(t, n)) { + const h = n.enter("codeIndented"), d = n.indentLines(s, Gx); + return h(), d; + } + const l = n.createTracker(r), a = i.repeat(Math.max(jx(s, i) + 1, 3)), u = n.enter("codeFenced"); + let c = l.move(a); + if (t.lang) { + const h = n.enter(`codeFencedLang${o}`); + c += l.move( + n.safe(t.lang, { + before: c, + after: " ", + encode: ["`"], + ...l.current() + }) + ), h(); + } + if (t.lang && t.meta) { + const h = n.enter(`codeFencedMeta${o}`); + c += l.move(" "), c += l.move( + n.safe(t.meta, { + before: c, + after: ` +`, + encode: ["`"], + ...l.current() + }) + ), h(); + } + return c += l.move(` +`), s && (c += l.move(s + ` +`)), c += l.move(a), u(), c; +} +function Gx(t, e, n) { + return (n ? "" : " ") + t; +} +function n1(t) { + const e = t.options.quote || '"'; + if (e !== '"' && e !== "'") + throw new Error( + "Cannot serialize title with `" + e + "` for `options.quote`, expected `\"`, or `'`" + ); + return e; +} +function Kx(t, e, n, r) { + const i = n1(n), s = i === '"' ? "Quote" : "Apostrophe", o = n.enter("definition"); + let l = n.enter("label"); + const a = n.createTracker(r); + let u = a.move("["); + return u += a.move( + n.safe(n.associationId(t), { + before: u, + after: "]", + ...a.current() + }) + ), u += a.move("]: "), l(), // If there’s no url, or… + !t.url || // If there are control characters or whitespace. + /[\0- \u007F]/.test(t.url) ? (l = n.enter("destinationLiteral"), u += a.move("<"), u += a.move( + n.safe(t.url, { before: u, after: ">", ...a.current() }) + ), u += a.move(">")) : (l = n.enter("destinationRaw"), u += a.move( + n.safe(t.url, { + before: u, + after: t.title ? " " : ` +`, + ...a.current() + }) + )), l(), t.title && (l = n.enter(`title${s}`), u += a.move(" " + i), u += a.move( + n.safe(t.title, { + before: u, + after: i, + ...a.current() + }) + ), u += a.move(i), l()), o(), u; +} +function Jx(t) { + const e = t.options.emphasis || "*"; + if (e !== "*" && e !== "_") + throw new Error( + "Cannot serialize emphasis with `" + e + "` for `options.emphasis`, expected `*`, or `_`" + ); + return e; +} +function ss(t) { + return "&#x" + t.toString(16).toUpperCase() + ";"; +} +function Lc(t, e, n) { + const r = Tl(t), i = Tl(e); + return r === void 0 ? i === void 0 ? ( + // Letter inside: + // we have to encode *both* letters for `_` as it is looser. + // it already forms for `*` (and GFMs `~`). + n === "_" ? { inside: !0, outside: !0 } : { inside: !1, outside: !1 } + ) : i === 1 ? ( + // Whitespace inside: encode both (letter, whitespace). + { inside: !0, outside: !0 } + ) : ( + // Punctuation inside: encode outer (letter) + { inside: !1, outside: !0 } + ) : r === 1 ? i === void 0 ? ( + // Letter inside: already forms. + { inside: !1, outside: !1 } + ) : i === 1 ? ( + // Whitespace inside: encode both (whitespace). + { inside: !0, outside: !0 } + ) : ( + // Punctuation inside: already forms. + { inside: !1, outside: !1 } + ) : i === void 0 ? ( + // Letter inside: already forms. + { inside: !1, outside: !1 } + ) : i === 1 ? ( + // Whitespace inside: encode inner (whitespace). + { inside: !0, outside: !1 } + ) : ( + // Punctuation inside: already forms. + { inside: !1, outside: !1 } + ); +} +t6.peek = Yx; +function t6(t, e, n, r) { + const i = Jx(n), s = n.enter("emphasis"), o = n.createTracker(r), l = o.move(i); + let a = o.move( + n.containerPhrasing(t, { + after: i, + before: l, + ...o.current() + }) + ); + const u = a.charCodeAt(0), c = Lc( + r.before.charCodeAt(r.before.length - 1), + u, + i + ); + c.inside && (a = ss(u) + a.slice(1)); + const h = a.charCodeAt(a.length - 1), d = Lc(r.after.charCodeAt(0), h, i); + d.inside && (a = a.slice(0, -1) + ss(h)); + const f = o.move(i); + return s(), n.attentionEncodeSurroundingInfo = { + after: d.outside, + before: c.outside + }, l + a + f; +} +function Yx(t, e, n) { + return n.options.emphasis || "*"; +} +const Ch = ( + // Note: overloads in JSDoc can’t yet use different `@template`s. + /** + * @type {( + * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) & + * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) & + * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) & + * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) & + * ((test?: Test) => Check) + * )} + */ + /** + * @param {Test} [test] + * @returns {Check} + */ + function(t) { + if (t == null) + return eS; + if (typeof t == "function") + return Nh(t); + if (typeof t == "object") + return Array.isArray(t) ? Zx(t) : ( + // Cast because `ReadonlyArray` goes into the above but `isArray` + // narrows to `Array`. + Xx( + /** @type {Props} */ + t + ) + ); + if (typeof t == "string") + return Qx(t); + throw new Error("Expected function, string, or object as test"); + } +); +function Zx(t) { + const e = []; + let n = -1; + for (; ++n < t.length; ) + e[n] = Ch(t[n]); + return Nh(r); + function r(...i) { + let s = -1; + for (; ++s < e.length; ) + if (e[s].apply(this, i)) return !0; + return !1; + } +} +function Xx(t) { + const e = ( + /** @type {Record} */ + t + ); + return Nh(n); + function n(r) { + const i = ( + /** @type {Record} */ + /** @type {unknown} */ + r + ); + let s; + for (s in t) + if (i[s] !== e[s]) return !1; + return !0; + } +} +function Qx(t) { + return Nh(e); + function e(n) { + return n && n.type === t; + } +} +function Nh(t) { + return e; + function e(n, r, i) { + return !!(tS(n) && t.call( + this, + n, + typeof r == "number" ? r : void 0, + i || void 0 + )); + } +} +function eS() { + return !0; +} +function tS(t) { + return t !== null && typeof t == "object" && "type" in t; +} +const n6 = [], nS = !0, Hf = !1, $f = "skip"; +function r1(t, e, n, r) { + let i; + typeof e == "function" && typeof n != "function" ? (r = n, n = e) : i = e; + const s = Ch(i), o = r ? -1 : 1; + l(t, void 0, [])(); + function l(a, u, c) { + const h = ( + /** @type {Record} */ + a && typeof a == "object" ? a : {} + ); + if (typeof h.type == "string") { + const f = ( + // `hast` + typeof h.tagName == "string" ? h.tagName : ( + // `xast` + typeof h.name == "string" ? h.name : void 0 + ) + ); + Object.defineProperty(d, "name", { + value: "node (" + (a.type + (f ? "<" + f + ">" : "")) + ")" + }); + } + return d; + function d() { + let f = n6, m, y, b; + if ((!e || s(a, u, c[c.length - 1] || void 0)) && (f = rS(n(a, c)), f[0] === Hf)) + return f; + if ("children" in a && a.children) { + const w = ( + /** @type {UnistParent} */ + a + ); + if (w.children && f[0] !== $f) + for (y = (r ? w.children.length : -1) + o, b = c.concat(w); y > -1 && y < w.children.length; ) { + const C = w.children[y]; + if (m = l(C, y, b)(), m[0] === Hf) + return m; + y = typeof m[1] == "number" ? m[1] : y + o; + } + } + return f; + } + } +} +function rS(t) { + return Array.isArray(t) ? t : typeof t == "number" ? [nS, t] : t == null ? n6 : [t]; +} +function wo(t, e, n, r) { + let i, s, o; + typeof e == "function" && typeof n != "function" ? (s = void 0, o = e, i = n) : (s = e, o = n, i = r), r1(t, s, l, i); + function l(a, u) { + const c = u[u.length - 1], h = c ? c.children.indexOf(a) : void 0; + return o(a, h, c); + } +} +function r6(t, e) { + let n = !1; + return wo(t, function(r) { + if ("value" in r && /\r?\n|\r/.test(r.value) || r.type === "break") + return n = !0, Hf; + }), !!((!t.depth || t.depth < 3) && Qp(t) && (e.options.setext || n)); +} +function iS(t, e, n, r) { + const i = Math.max(Math.min(6, t.depth || 1), 1), s = n.createTracker(r); + if (r6(t, n)) { + const c = n.enter("headingSetext"), h = n.enter("phrasing"), d = n.containerPhrasing(t, { + ...s.current(), + before: ` +`, + after: ` +` + }); + return h(), c(), d + ` +` + (i === 1 ? "=" : "-").repeat( + // The whole size… + d.length - // Minus the position of the character after the last EOL (or + // 0 if there is none)… + (Math.max(d.lastIndexOf("\r"), d.lastIndexOf(` +`)) + 1) + ); + } + const o = "#".repeat(i), l = n.enter("headingAtx"), a = n.enter("phrasing"); + s.move(o + " "); + let u = n.containerPhrasing(t, { + before: "# ", + after: ` +`, + ...s.current() + }); + return /^[\t ]/.test(u) && (u = ss(u.charCodeAt(0)) + u.slice(1)), u = u ? o + " " + u : o, n.options.closeAtx && (u += " " + o), a(), l(), u; +} +i6.peek = sS; +function i6(t) { + return t.value || ""; +} +function sS() { + return "<"; +} +s6.peek = oS; +function s6(t, e, n, r) { + const i = n1(n), s = i === '"' ? "Quote" : "Apostrophe", o = n.enter("image"); + let l = n.enter("label"); + const a = n.createTracker(r); + let u = a.move("!["); + return u += a.move( + n.safe(t.alt, { before: u, after: "]", ...a.current() }) + ), u += a.move("]("), l(), // If there’s no url but there is a title… + !t.url && t.title || // If there are control characters or whitespace. + /[\0- \u007F]/.test(t.url) ? (l = n.enter("destinationLiteral"), u += a.move("<"), u += a.move( + n.safe(t.url, { before: u, after: ">", ...a.current() }) + ), u += a.move(">")) : (l = n.enter("destinationRaw"), u += a.move( + n.safe(t.url, { + before: u, + after: t.title ? " " : ")", + ...a.current() + }) + )), l(), t.title && (l = n.enter(`title${s}`), u += a.move(" " + i), u += a.move( + n.safe(t.title, { + before: u, + after: i, + ...a.current() + }) + ), u += a.move(i), l()), u += a.move(")"), o(), u; +} +function oS() { + return "!"; +} +o6.peek = lS; +function o6(t, e, n, r) { + const i = t.referenceType, s = n.enter("imageReference"); + let o = n.enter("label"); + const l = n.createTracker(r); + let a = l.move("!["); + const u = n.safe(t.alt, { + before: a, + after: "]", + ...l.current() + }); + a += l.move(u + "]["), o(); + const c = n.stack; + n.stack = [], o = n.enter("reference"); + const h = n.safe(n.associationId(t), { + before: a, + after: "]", + ...l.current() + }); + return o(), n.stack = c, s(), i === "full" || !u || u !== h ? a += l.move(h + "]") : i === "shortcut" ? a = a.slice(0, -1) : a += l.move("]"), a; +} +function lS() { + return "!"; +} +l6.peek = aS; +function l6(t, e, n) { + let r = t.value || "", i = "`", s = -1; + for (; new RegExp("(^|[^`])" + i + "([^`]|$)").test(r); ) + i += "`"; + for (/[^ \r\n]/.test(r) && (/^[ \r\n]/.test(r) && /[ \r\n]$/.test(r) || /^`|`$/.test(r)) && (r = " " + r + " "); ++s < n.unsafe.length; ) { + const o = n.unsafe[s], l = n.compilePattern(o); + let a; + if (o.atBreak) + for (; a = l.exec(r); ) { + let u = a.index; + r.charCodeAt(u) === 10 && r.charCodeAt(u - 1) === 13 && u--, r = r.slice(0, u) + " " + r.slice(a.index + 1); + } + } + return i + r + i; +} +function aS() { + return "`"; +} +function a6(t, e) { + const n = Qp(t); + return !!(!e.options.resourceLink && // If there’s a url… + t.url && // And there’s a no title… + !t.title && // And the content of `node` is a single text node… + t.children && t.children.length === 1 && t.children[0].type === "text" && // And if the url is the same as the content… + (n === t.url || "mailto:" + n === t.url) && // And that starts w/ a protocol… + /^[a-z][a-z+.-]+:/i.test(t.url) && // And that doesn’t contain ASCII control codes (character escapes and + // references don’t work), space, or angle brackets… + !/[\0- <>\u007F]/.test(t.url)); +} +u6.peek = uS; +function u6(t, e, n, r) { + const i = n1(n), s = i === '"' ? "Quote" : "Apostrophe", o = n.createTracker(r); + let l, a; + if (a6(t, n)) { + const c = n.stack; + n.stack = [], l = n.enter("autolink"); + let h = o.move("<"); + return h += o.move( + n.containerPhrasing(t, { + before: h, + after: ">", + ...o.current() + }) + ), h += o.move(">"), l(), n.stack = c, h; + } + l = n.enter("link"), a = n.enter("label"); + let u = o.move("["); + return u += o.move( + n.containerPhrasing(t, { + before: u, + after: "](", + ...o.current() + }) + ), u += o.move("]("), a(), // If there’s no url but there is a title… + !t.url && t.title || // If there are control characters or whitespace. + /[\0- \u007F]/.test(t.url) ? (a = n.enter("destinationLiteral"), u += o.move("<"), u += o.move( + n.safe(t.url, { before: u, after: ">", ...o.current() }) + ), u += o.move(">")) : (a = n.enter("destinationRaw"), u += o.move( + n.safe(t.url, { + before: u, + after: t.title ? " " : ")", + ...o.current() + }) + )), a(), t.title && (a = n.enter(`title${s}`), u += o.move(" " + i), u += o.move( + n.safe(t.title, { + before: u, + after: i, + ...o.current() + }) + ), u += o.move(i), a()), u += o.move(")"), l(), u; +} +function uS(t, e, n) { + return a6(t, n) ? "<" : "["; +} +c6.peek = cS; +function c6(t, e, n, r) { + const i = t.referenceType, s = n.enter("linkReference"); + let o = n.enter("label"); + const l = n.createTracker(r); + let a = l.move("["); + const u = n.containerPhrasing(t, { + before: a, + after: "]", + ...l.current() + }); + a += l.move(u + "]["), o(); + const c = n.stack; + n.stack = [], o = n.enter("reference"); + const h = n.safe(n.associationId(t), { + before: a, + after: "]", + ...l.current() + }); + return o(), n.stack = c, s(), i === "full" || !u || u !== h ? a += l.move(h + "]") : i === "shortcut" ? a = a.slice(0, -1) : a += l.move("]"), a; +} +function cS() { + return "["; +} +function i1(t) { + const e = t.options.bullet || "*"; + if (e !== "*" && e !== "+" && e !== "-") + throw new Error( + "Cannot serialize items with `" + e + "` for `options.bullet`, expected `*`, `+`, or `-`" + ); + return e; +} +function hS(t) { + const e = i1(t), n = t.options.bulletOther; + if (!n) + return e === "*" ? "-" : "*"; + if (n !== "*" && n !== "+" && n !== "-") + throw new Error( + "Cannot serialize items with `" + n + "` for `options.bulletOther`, expected `*`, `+`, or `-`" + ); + if (n === e) + throw new Error( + "Expected `bullet` (`" + e + "`) and `bulletOther` (`" + n + "`) to be different" + ); + return n; +} +function dS(t) { + const e = t.options.bulletOrdered || "."; + if (e !== "." && e !== ")") + throw new Error( + "Cannot serialize items with `" + e + "` for `options.bulletOrdered`, expected `.` or `)`" + ); + return e; +} +function h6(t) { + const e = t.options.rule || "*"; + if (e !== "*" && e !== "-" && e !== "_") + throw new Error( + "Cannot serialize rules with `" + e + "` for `options.rule`, expected `*`, `-`, or `_`" + ); + return e; +} +function fS(t, e, n, r) { + const i = n.enter("list"), s = n.bulletCurrent; + let o = t.ordered ? dS(n) : i1(n); + const l = t.ordered ? o === "." ? ")" : "." : hS(n); + let a = e && n.bulletLastUsed ? o === n.bulletLastUsed : !1; + if (!t.ordered) { + const c = t.children ? t.children[0] : void 0; + if ( + // Bullet could be used as a thematic break marker: + (o === "*" || o === "-") && // Empty first list item: + c && (!c.children || !c.children[0]) && // Directly in two other list items: + n.stack[n.stack.length - 1] === "list" && n.stack[n.stack.length - 2] === "listItem" && n.stack[n.stack.length - 3] === "list" && n.stack[n.stack.length - 4] === "listItem" && // That are each the first child. + n.indexStack[n.indexStack.length - 1] === 0 && n.indexStack[n.indexStack.length - 2] === 0 && n.indexStack[n.indexStack.length - 3] === 0 && (a = !0), h6(n) === o && c + ) { + let h = -1; + for (; ++h < t.children.length; ) { + const d = t.children[h]; + if (d && d.type === "listItem" && d.children && d.children[0] && d.children[0].type === "thematicBreak") { + a = !0; + break; + } + } + } + } + a && (o = l), n.bulletCurrent = o; + const u = n.containerFlow(t, r); + return n.bulletLastUsed = o, n.bulletCurrent = s, i(), u; +} +function pS(t) { + const e = t.options.listItemIndent || "one"; + if (e !== "tab" && e !== "one" && e !== "mixed") + throw new Error( + "Cannot serialize items with `" + e + "` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`" + ); + return e; +} +function mS(t, e, n, r) { + const i = pS(n); + let s = n.bulletCurrent || i1(n); + e && e.type === "list" && e.ordered && (s = (typeof e.start == "number" && e.start > -1 ? e.start : 1) + (n.options.incrementListMarker === !1 ? 0 : e.children.indexOf(t)) + s); + let o = s.length + 1; + (i === "tab" || i === "mixed" && (e && e.type === "list" && e.spread || t.spread)) && (o = Math.ceil(o / 4) * 4); + const l = n.createTracker(r); + l.move(s + " ".repeat(o - s.length)), l.shift(o); + const a = n.enter("listItem"), u = n.indentLines( + n.containerFlow(t, l.current()), + c + ); + return a(), u; + function c(h, d, f) { + return d ? (f ? "" : " ".repeat(o)) + h : (f ? s : s + " ".repeat(o - s.length)) + h; + } +} +function gS(t, e, n, r) { + const i = n.enter("paragraph"), s = n.enter("phrasing"), o = n.containerPhrasing(t, r); + return s(), i(), o; +} +const yS = ( + /** @type {(node?: unknown) => node is Exclude} */ + Ch([ + "break", + "delete", + "emphasis", + // To do: next major: removed since footnotes were added to GFM. + "footnote", + "footnoteReference", + "image", + "imageReference", + "inlineCode", + // Enabled by `mdast-util-math`: + "inlineMath", + "link", + "linkReference", + // Enabled by `mdast-util-mdx`: + "mdxJsxTextElement", + // Enabled by `mdast-util-mdx`: + "mdxTextExpression", + "strong", + "text", + // Enabled by `mdast-util-directive`: + "textDirective" + ]) +); +function vS(t, e, n, r) { + return (t.children.some(function(o) { + return yS(o); + }) ? n.containerPhrasing : n.containerFlow).call(n, t, r); +} +function bS(t) { + const e = t.options.strong || "*"; + if (e !== "*" && e !== "_") + throw new Error( + "Cannot serialize strong with `" + e + "` for `options.strong`, expected `*`, or `_`" + ); + return e; +} +d6.peek = wS; +function d6(t, e, n, r) { + const i = bS(n), s = n.enter("strong"), o = n.createTracker(r), l = o.move(i + i); + let a = o.move( + n.containerPhrasing(t, { + after: i, + before: l, + ...o.current() + }) + ); + const u = a.charCodeAt(0), c = Lc( + r.before.charCodeAt(r.before.length - 1), + u, + i + ); + c.inside && (a = ss(u) + a.slice(1)); + const h = a.charCodeAt(a.length - 1), d = Lc(r.after.charCodeAt(0), h, i); + d.inside && (a = a.slice(0, -1) + ss(h)); + const f = o.move(i + i); + return s(), n.attentionEncodeSurroundingInfo = { + after: d.outside, + before: c.outside + }, l + a + f; +} +function wS(t, e, n) { + return n.options.strong || "*"; +} +function kS(t, e, n, r) { + return n.safe(t.value, r); +} +function xS(t) { + const e = t.options.ruleRepetition || 3; + if (e < 3) + throw new Error( + "Cannot serialize rules with repetition `" + e + "` for `options.ruleRepetition`, expected `3` or more" + ); + return e; +} +function SS(t, e, n) { + const r = (h6(n) + (n.options.ruleSpaces ? " " : "")).repeat(xS(n)); + return n.options.ruleSpaces ? r.slice(0, -1) : r; +} +const s1 = { + blockquote: $x, + break: a2, + code: Ux, + definition: Kx, + emphasis: t6, + hardBreak: a2, + heading: iS, + html: i6, + image: s6, + imageReference: o6, + inlineCode: l6, + link: u6, + linkReference: c6, + list: fS, + listItem: mS, + paragraph: gS, + root: vS, + strong: d6, + text: kS, + thematicBreak: SS +}, CS = [NS]; +function NS(t, e, n, r) { + if (e.type === "code" && Vf(e, r) && (t.type === "list" || t.type === e.type && Vf(t, r))) + return !1; + if ("spread" in n && typeof n.spread == "boolean") + return t.type === "paragraph" && // Two paragraphs. + (t.type === e.type || e.type === "definition" || // Paragraph followed by a setext heading. + e.type === "heading" && r6(e, r)) ? void 0 : n.spread ? 1 : 0; +} +const Ss = [ + "autolink", + "destinationLiteral", + "destinationRaw", + "reference", + "titleQuote", + "titleApostrophe" +], MS = [ + { character: " ", after: "[\\r\\n]", inConstruct: "phrasing" }, + { character: " ", before: "[\\r\\n]", inConstruct: "phrasing" }, + { + character: " ", + inConstruct: ["codeFencedLangGraveAccent", "codeFencedLangTilde"] + }, + { + character: "\r", + inConstruct: [ + "codeFencedLangGraveAccent", + "codeFencedLangTilde", + "codeFencedMetaGraveAccent", + "codeFencedMetaTilde", + "destinationLiteral", + "headingAtx" + ] + }, + { + character: ` +`, + inConstruct: [ + "codeFencedLangGraveAccent", + "codeFencedLangTilde", + "codeFencedMetaGraveAccent", + "codeFencedMetaTilde", + "destinationLiteral", + "headingAtx" + ] + }, + { character: " ", after: "[\\r\\n]", inConstruct: "phrasing" }, + { character: " ", before: "[\\r\\n]", inConstruct: "phrasing" }, + { + character: " ", + inConstruct: ["codeFencedLangGraveAccent", "codeFencedLangTilde"] + }, + // An exclamation mark can start an image, if it is followed by a link or + // a link reference. + { + character: "!", + after: "\\[", + inConstruct: "phrasing", + notInConstruct: Ss + }, + // A quote can break out of a title. + { character: '"', inConstruct: "titleQuote" }, + // A number sign could start an ATX heading if it starts a line. + { atBreak: !0, character: "#" }, + { character: "#", inConstruct: "headingAtx", after: `(?:[\r +]|$)` }, + // Dollar sign and percentage are not used in markdown. + // An ampersand could start a character reference. + { character: "&", after: "[#A-Za-z]", inConstruct: "phrasing" }, + // An apostrophe can break out of a title. + { character: "'", inConstruct: "titleApostrophe" }, + // A left paren could break out of a destination raw. + { character: "(", inConstruct: "destinationRaw" }, + // A left paren followed by `]` could make something into a link or image. + { + before: "\\]", + character: "(", + inConstruct: "phrasing", + notInConstruct: Ss + }, + // A right paren could start a list item or break out of a destination + // raw. + { atBreak: !0, before: "\\d+", character: ")" }, + { character: ")", inConstruct: "destinationRaw" }, + // An asterisk can start thematic breaks, list items, emphasis, strong. + { atBreak: !0, character: "*", after: `(?:[ \r +*])` }, + { character: "*", inConstruct: "phrasing", notInConstruct: Ss }, + // A plus sign could start a list item. + { atBreak: !0, character: "+", after: `(?:[ \r +])` }, + // A dash can start thematic breaks, list items, and setext heading + // underlines. + { atBreak: !0, character: "-", after: `(?:[ \r +-])` }, + // A dot could start a list item. + { atBreak: !0, before: "\\d+", character: ".", after: `(?:[ \r +]|$)` }, + // Slash, colon, and semicolon are not used in markdown for constructs. + // A less than can start html (flow or text) or an autolink. + // HTML could start with an exclamation mark (declaration, cdata, comment), + // slash (closing tag), question mark (instruction), or a letter (tag). + // An autolink also starts with a letter. + // Finally, it could break out of a destination literal. + { atBreak: !0, character: "<", after: "[!/?A-Za-z]" }, + { + character: "<", + after: "[!/?A-Za-z]", + inConstruct: "phrasing", + notInConstruct: Ss + }, + { character: "<", inConstruct: "destinationLiteral" }, + // An equals to can start setext heading underlines. + { atBreak: !0, character: "=" }, + // A greater than can start block quotes and it can break out of a + // destination literal. + { atBreak: !0, character: ">" }, + { character: ">", inConstruct: "destinationLiteral" }, + // Question mark and at sign are not used in markdown for constructs. + // A left bracket can start definitions, references, labels, + { atBreak: !0, character: "[" }, + { character: "[", inConstruct: "phrasing", notInConstruct: Ss }, + { character: "[", inConstruct: ["label", "reference"] }, + // A backslash can start an escape (when followed by punctuation) or a + // hard break (when followed by an eol). + // Note: typical escapes are handled in `safe`! + { character: "\\", after: "[\\r\\n]", inConstruct: "phrasing" }, + // A right bracket can exit labels. + { character: "]", inConstruct: ["label", "reference"] }, + // Caret is not used in markdown for constructs. + // An underscore can start emphasis, strong, or a thematic break. + { atBreak: !0, character: "_" }, + { character: "_", inConstruct: "phrasing", notInConstruct: Ss }, + // A grave accent can start code (fenced or text), or it can break out of + // a grave accent code fence. + { atBreak: !0, character: "`" }, + { + character: "`", + inConstruct: ["codeFencedLangGraveAccent", "codeFencedMetaGraveAccent"] + }, + { character: "`", inConstruct: "phrasing", notInConstruct: Ss }, + // Left brace, vertical bar, right brace are not used in markdown for + // constructs. + // A tilde can start code (fenced). + { atBreak: !0, character: "~" } +]; +function TS(t) { + return t.label || !t.identifier ? t.label || "" : Y7(t.identifier); +} +function ES(t) { + if (!t._compiled) { + const e = (t.atBreak ? "[\\r\\n][\\t ]*" : "") + (t.before ? "(?:" + t.before + ")" : ""); + t._compiled = new RegExp( + (e ? "(" + e + ")" : "") + (/[|\\{}()[\]^$+*?.-]/.test(t.character) ? "\\" : "") + t.character + (t.after ? "(?:" + t.after + ")" : ""), + "g" + ); + } + return t._compiled; +} +function OS(t, e, n) { + const r = e.indexStack, i = t.children || [], s = []; + let o = -1, l = n.before, a; + r.push(-1); + let u = e.createTracker(n); + for (; ++o < i.length; ) { + const c = i[o]; + let h; + if (r[r.length - 1] = o, o + 1 < i.length) { + let m = e.handle.handlers[i[o + 1].type]; + m && m.peek && (m = m.peek), h = m ? m(i[o + 1], t, e, { + before: "", + after: "", + ...u.current() + }).charAt(0) : ""; + } else + h = n.after; + s.length > 0 && (l === "\r" || l === ` +`) && c.type === "html" && (s[s.length - 1] = s[s.length - 1].replace( + /(\r?\n|\r)$/, + " " + ), l = " ", u = e.createTracker(n), u.move(s.join(""))); + let d = e.handle(c, t, e, { + ...u.current(), + after: h, + before: l + }); + a && a === d.slice(0, 1) && (d = ss(a.charCodeAt(0)) + d.slice(1)); + const f = e.attentionEncodeSurroundingInfo; + e.attentionEncodeSurroundingInfo = void 0, a = void 0, f && (s.length > 0 && f.before && l === s[s.length - 1].slice(-1) && (s[s.length - 1] = s[s.length - 1].slice(0, -1) + ss(l.charCodeAt(0))), f.after && (a = h)), u.move(d), s.push(d), l = d.slice(-1); + } + return r.pop(), s.join(""); +} +function AS(t, e, n) { + const r = e.indexStack, i = t.children || [], s = e.createTracker(n), o = []; + let l = -1; + for (r.push(-1); ++l < i.length; ) { + const a = i[l]; + r[r.length - 1] = l, o.push( + s.move( + e.handle(a, t, e, { + before: ` +`, + after: ` +`, + ...s.current() + }) + ) + ), a.type !== "list" && (e.bulletLastUsed = void 0), l < i.length - 1 && o.push( + s.move(IS(a, i[l + 1], t, e)) + ); + } + return r.pop(), o.join(""); +} +function IS(t, e, n, r) { + let i = r.join.length; + for (; i--; ) { + const s = r.join[i](t, e, n, r); + if (s === !0 || s === 1) + break; + if (typeof s == "number") + return ` +`.repeat(1 + s); + if (s === !1) + return ` + + + +`; + } + return ` + +`; +} +const DS = /\r?\n|\r/g; +function _S(t, e) { + const n = []; + let r = 0, i = 0, s; + for (; s = DS.exec(t); ) + o(t.slice(r, s.index)), n.push(s[0]), r = s.index + s[0].length, i++; + return o(t.slice(r)), n.join(""); + function o(l) { + n.push(e(l, i, !l)); + } +} +function RS(t, e, n) { + const r = (n.before || "") + (e || "") + (n.after || ""), i = [], s = [], o = {}; + let l = -1; + for (; ++l < t.unsafe.length; ) { + const c = t.unsafe[l]; + if (!e6(t.stack, c)) + continue; + const h = t.compilePattern(c); + let d; + for (; d = h.exec(r); ) { + const f = "before" in c || !!c.atBreak, m = "after" in c, y = d.index + (f ? d[1].length : 0); + i.includes(y) ? (o[y].before && !f && (o[y].before = !1), o[y].after && !m && (o[y].after = !1)) : (i.push(y), o[y] = { before: f, after: m }); + } + } + i.sort(zS); + let a = n.before ? n.before.length : 0; + const u = r.length - (n.after ? n.after.length : 0); + for (l = -1; ++l < i.length; ) { + const c = i[l]; + c < a || c >= u || c + 1 < u && i[l + 1] === c + 1 && o[c].after && !o[c + 1].before && !o[c + 1].after || i[l - 1] === c - 1 && o[c].before && !o[c - 1].before && !o[c - 1].after || (a !== c && s.push(u2(r.slice(a, c), "\\")), a = c, /[!-/:-@[-`{-~]/.test(r.charAt(c)) && (!n.encode || !n.encode.includes(r.charAt(c))) ? s.push("\\") : (s.push(ss(r.charCodeAt(c))), a++)); + } + return s.push(u2(r.slice(a, u), n.after)), s.join(""); +} +function zS(t, e) { + return t - e; +} +function u2(t, e) { + const n = /\\(?=[!-/:-@[-`{-~])/g, r = [], i = [], s = t + e; + let o = -1, l = 0, a; + for (; a = n.exec(s); ) + r.push(a.index); + for (; ++o < r.length; ) + l !== r[o] && i.push(t.slice(l, r[o])), i.push("\\"), l = r[o]; + return i.push(t.slice(l)), i.join(""); +} +function PS(t) { + const e = t || {}, n = e.now || {}; + let r = e.lineShift || 0, i = n.line || 1, s = n.column || 1; + return { move: a, current: o, shift: l }; + function o() { + return { now: { line: i, column: s }, lineShift: r }; + } + function l(u) { + r += u; + } + function a(u) { + const c = u || "", h = c.split(/\r?\n|\r/g), d = h[h.length - 1]; + return i += h.length - 1, s = h.length === 1 ? s + d.length : 1 + d.length + r, c; + } +} +function BS(t, e) { + const n = e || {}, r = { + associationId: TS, + containerPhrasing: HS, + containerFlow: $S, + createTracker: PS, + compilePattern: ES, + enter: s, + // @ts-expect-error: GFM / frontmatter are typed in `mdast` but not defined + // here. + handlers: { ...s1 }, + // @ts-expect-error: add `handle` in a second. + handle: void 0, + indentLines: _S, + indexStack: [], + join: [...CS], + options: {}, + safe: qS, + stack: [], + unsafe: [...MS] + }; + Q7(r, n), r.options.tightDefinitions && r.join.push(VS), r.handle = Fx("type", { + invalid: LS, + unknown: FS, + handlers: r.handlers + }); + let i = r.handle(t, void 0, r, { + before: ` +`, + after: ` +`, + now: { line: 1, column: 1 }, + lineShift: 0 + }); + return i && i.charCodeAt(i.length - 1) !== 10 && i.charCodeAt(i.length - 1) !== 13 && (i += ` +`), i; + function s(o) { + return r.stack.push(o), l; + function l() { + r.stack.pop(); + } + } +} +function LS(t) { + throw new Error("Cannot handle value `" + t + "`, expected node"); +} +function FS(t) { + const e = ( + /** @type {Nodes} */ + t + ); + throw new Error("Cannot handle unknown node `" + e.type + "`"); +} +function VS(t, e) { + if (t.type === "definition" && t.type === e.type) + return 0; +} +function HS(t, e) { + return OS(t, this, e); +} +function $S(t, e) { + return AS(t, this, e); +} +function qS(t, e) { + return RS(this, t, e); +} +function qf(t) { + const e = this; + e.compiler = n; + function n(r) { + return BS(r, { + ...e.data("settings"), + ...t, + // Note: this option is not in the readme. + // The goal is for it to be set by plugins on `data` instead of being + // passed by users. + extensions: e.data("toMarkdownExtensions") || [] + }); + } +} +function c2(t) { + if (t) + throw t; +} +var Uu = Object.prototype.hasOwnProperty, f6 = Object.prototype.toString, h2 = Object.defineProperty, d2 = Object.getOwnPropertyDescriptor, f2 = function(e) { + return typeof Array.isArray == "function" ? Array.isArray(e) : f6.call(e) === "[object Array]"; +}, p2 = function(e) { + if (!e || f6.call(e) !== "[object Object]") + return !1; + var n = Uu.call(e, "constructor"), r = e.constructor && e.constructor.prototype && Uu.call(e.constructor.prototype, "isPrototypeOf"); + if (e.constructor && !n && !r) + return !1; + var i; + for (i in e) + ; + return typeof i > "u" || Uu.call(e, i); +}, m2 = function(e, n) { + h2 && n.name === "__proto__" ? h2(e, n.name, { + enumerable: !0, + configurable: !0, + value: n.newValue, + writable: !0 + }) : e[n.name] = n.newValue; +}, g2 = function(e, n) { + if (n === "__proto__") + if (Uu.call(e, n)) { + if (d2) + return d2(e, n).value; + } else return; + return e[n]; +}, jS = function t() { + var e, n, r, i, s, o, l = arguments[0], a = 1, u = arguments.length, c = !1; + for (typeof l == "boolean" && (c = l, l = arguments[1] || {}, a = 2), (l == null || typeof l != "object" && typeof l != "function") && (l = {}); a < u; ++a) + if (e = arguments[a], e != null) + for (n in e) + r = g2(l, n), i = g2(e, n), l !== i && (c && i && (p2(i) || (s = f2(i))) ? (s ? (s = !1, o = r && f2(r) ? r : []) : o = r && p2(r) ? r : {}, m2(l, { name: n, newValue: t(c, o, i) })) : typeof i < "u" && m2(l, { name: n, newValue: i })); + return l; +}; +const yd = /* @__PURE__ */ J9(jS); +function jf(t) { + if (typeof t != "object" || t === null) + return !1; + const e = Object.getPrototypeOf(t); + return (e === null || e === Object.prototype || Object.getPrototypeOf(e) === null) && !(Symbol.toStringTag in t) && !(Symbol.iterator in t); +} +function WS() { + const t = [], e = { run: n, use: r }; + return e; + function n(...i) { + let s = -1; + const o = i.pop(); + if (typeof o != "function") + throw new TypeError("Expected function as last argument, not " + o); + l(null, ...i); + function l(a, ...u) { + const c = t[++s]; + let h = -1; + if (a) { + o(a); + return; + } + for (; ++h < i.length; ) + (u[h] === null || u[h] === void 0) && (u[h] = i[h]); + i = u, c ? US(c, l)(...u) : o(null, ...u); + } + } + function r(i) { + if (typeof i != "function") + throw new TypeError( + "Expected `middelware` to be a function, not " + i + ); + return t.push(i), e; + } +} +function US(t, e) { + let n; + return r; + function r(...o) { + const l = t.length > o.length; + let a; + l && o.push(i); + try { + a = t.apply(this, o); + } catch (u) { + const c = ( + /** @type {Error} */ + u + ); + if (l && n) + throw c; + return i(c); + } + l || (a && a.then && typeof a.then == "function" ? a.then(s, i) : a instanceof Error ? i(a) : s(a)); + } + function i(o, ...l) { + n || (n = !0, e(o, ...l)); + } + function s(o) { + i(null, o); + } +} +class Tn extends Error { + /** + * Create a message for `reason`. + * + * > 🪦 **Note**: also has obsolete signatures. + * + * @overload + * @param {string} reason + * @param {Options | null | undefined} [options] + * @returns + * + * @overload + * @param {string} reason + * @param {Node | NodeLike | null | undefined} parent + * @param {string | null | undefined} [origin] + * @returns + * + * @overload + * @param {string} reason + * @param {Point | Position | null | undefined} place + * @param {string | null | undefined} [origin] + * @returns + * + * @overload + * @param {string} reason + * @param {string | null | undefined} [origin] + * @returns + * + * @overload + * @param {Error | VFileMessage} cause + * @param {Node | NodeLike | null | undefined} parent + * @param {string | null | undefined} [origin] + * @returns + * + * @overload + * @param {Error | VFileMessage} cause + * @param {Point | Position | null | undefined} place + * @param {string | null | undefined} [origin] + * @returns + * + * @overload + * @param {Error | VFileMessage} cause + * @param {string | null | undefined} [origin] + * @returns + * + * @param {Error | VFileMessage | string} causeOrReason + * Reason for message, should use markdown. + * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace] + * Configuration (optional). + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns + * Instance of `VFileMessage`. + */ + // eslint-disable-next-line complexity + constructor(e, n, r) { + super(), typeof n == "string" && (r = n, n = void 0); + let i = "", s = {}, o = !1; + if (n && ("line" in n && "column" in n ? s = { place: n } : "start" in n && "end" in n ? s = { place: n } : "type" in n ? s = { + ancestors: [n], + place: n.position + } : s = { ...n }), typeof e == "string" ? i = e : !s.cause && e && (o = !0, i = e.message, s.cause = e), !s.ruleId && !s.source && typeof r == "string") { + const a = r.indexOf(":"); + a === -1 ? s.ruleId = r : (s.source = r.slice(0, a), s.ruleId = r.slice(a + 1)); + } + if (!s.place && s.ancestors && s.ancestors) { + const a = s.ancestors[s.ancestors.length - 1]; + a && (s.place = a.position); + } + const l = s.place && "start" in s.place ? s.place.start : s.place; + this.ancestors = s.ancestors || void 0, this.cause = s.cause || void 0, this.column = l ? l.column : void 0, this.fatal = void 0, this.file = "", this.message = i, this.line = l ? l.line : void 0, this.name = Da(s.place) || "1:1", this.place = s.place || void 0, this.reason = this.message, this.ruleId = s.ruleId || void 0, this.source = s.source || void 0, this.stack = o && s.cause && typeof s.cause.stack == "string" ? s.cause.stack : "", this.actual = void 0, this.expected = void 0, this.note = void 0, this.url = void 0; + } +} +Tn.prototype.file = ""; +Tn.prototype.name = ""; +Tn.prototype.reason = ""; +Tn.prototype.message = ""; +Tn.prototype.stack = ""; +Tn.prototype.column = void 0; +Tn.prototype.line = void 0; +Tn.prototype.ancestors = void 0; +Tn.prototype.cause = void 0; +Tn.prototype.fatal = void 0; +Tn.prototype.place = void 0; +Tn.prototype.ruleId = void 0; +Tn.prototype.source = void 0; +const Or = { basename: GS, dirname: KS, extname: JS, join: YS, sep: "/" }; +function GS(t, e) { + if (e !== void 0 && typeof e != "string") + throw new TypeError('"ext" argument must be a string'); + Y0(t); + let n = 0, r = -1, i = t.length, s; + if (e === void 0 || e.length === 0 || e.length > t.length) { + for (; i--; ) + if (t.codePointAt(i) === 47) { + if (s) { + n = i + 1; + break; + } + } else r < 0 && (s = !0, r = i + 1); + return r < 0 ? "" : t.slice(n, r); + } + if (e === t) + return ""; + let o = -1, l = e.length - 1; + for (; i--; ) + if (t.codePointAt(i) === 47) { + if (s) { + n = i + 1; + break; + } + } else + o < 0 && (s = !0, o = i + 1), l > -1 && (t.codePointAt(i) === e.codePointAt(l--) ? l < 0 && (r = i) : (l = -1, r = o)); + return n === r ? r = o : r < 0 && (r = t.length), t.slice(n, r); +} +function KS(t) { + if (Y0(t), t.length === 0) + return "."; + let e = -1, n = t.length, r; + for (; --n; ) + if (t.codePointAt(n) === 47) { + if (r) { + e = n; + break; + } + } else r || (r = !0); + return e < 0 ? t.codePointAt(0) === 47 ? "/" : "." : e === 1 && t.codePointAt(0) === 47 ? "//" : t.slice(0, e); +} +function JS(t) { + Y0(t); + let e = t.length, n = -1, r = 0, i = -1, s = 0, o; + for (; e--; ) { + const l = t.codePointAt(e); + if (l === 47) { + if (o) { + r = e + 1; + break; + } + continue; + } + n < 0 && (o = !0, n = e + 1), l === 46 ? i < 0 ? i = e : s !== 1 && (s = 1) : i > -1 && (s = -1); + } + return i < 0 || n < 0 || // We saw a non-dot character immediately before the dot. + s === 0 || // The (right-most) trimmed path component is exactly `..`. + s === 1 && i === n - 1 && i === r + 1 ? "" : t.slice(i, n); +} +function YS(...t) { + let e = -1, n; + for (; ++e < t.length; ) + Y0(t[e]), t[e] && (n = n === void 0 ? t[e] : n + "/" + t[e]); + return n === void 0 ? "." : ZS(n); +} +function ZS(t) { + Y0(t); + const e = t.codePointAt(0) === 47; + let n = XS(t, !e); + return n.length === 0 && !e && (n = "."), n.length > 0 && t.codePointAt(t.length - 1) === 47 && (n += "/"), e ? "/" + n : n; +} +function XS(t, e) { + let n = "", r = 0, i = -1, s = 0, o = -1, l, a; + for (; ++o <= t.length; ) { + if (o < t.length) + l = t.codePointAt(o); + else { + if (l === 47) + break; + l = 47; + } + if (l === 47) { + if (!(i === o - 1 || s === 1)) if (i !== o - 1 && s === 2) { + if (n.length < 2 || r !== 2 || n.codePointAt(n.length - 1) !== 46 || n.codePointAt(n.length - 2) !== 46) { + if (n.length > 2) { + if (a = n.lastIndexOf("/"), a !== n.length - 1) { + a < 0 ? (n = "", r = 0) : (n = n.slice(0, a), r = n.length - 1 - n.lastIndexOf("/")), i = o, s = 0; + continue; + } + } else if (n.length > 0) { + n = "", r = 0, i = o, s = 0; + continue; + } + } + e && (n = n.length > 0 ? n + "/.." : "..", r = 2); + } else + n.length > 0 ? n += "/" + t.slice(i + 1, o) : n = t.slice(i + 1, o), r = o - i - 1; + i = o, s = 0; + } else l === 46 && s > -1 ? s++ : s = -1; + } + return n; +} +function Y0(t) { + if (typeof t != "string") + throw new TypeError( + "Path must be a string. Received " + JSON.stringify(t) + ); +} +const QS = { cwd: eC }; +function eC() { + return "/"; +} +function Wf(t) { + return !!(t !== null && typeof t == "object" && "href" in t && t.href && "protocol" in t && t.protocol && // @ts-expect-error: indexing is fine. + t.auth === void 0); +} +function tC(t) { + if (typeof t == "string") + t = new URL(t); + else if (!Wf(t)) { + const e = new TypeError( + 'The "path" argument must be of type string or an instance of URL. Received `' + t + "`" + ); + throw e.code = "ERR_INVALID_ARG_TYPE", e; + } + if (t.protocol !== "file:") { + const e = new TypeError("The URL must be of scheme file"); + throw e.code = "ERR_INVALID_URL_SCHEME", e; + } + return nC(t); +} +function nC(t) { + if (t.hostname !== "") { + const r = new TypeError( + 'File URL host must be "localhost" or empty on darwin' + ); + throw r.code = "ERR_INVALID_FILE_URL_HOST", r; + } + const e = t.pathname; + let n = -1; + for (; ++n < e.length; ) + if (e.codePointAt(n) === 37 && e.codePointAt(n + 1) === 50) { + const r = e.codePointAt(n + 2); + if (r === 70 || r === 102) { + const i = new TypeError( + "File URL path must not include encoded / characters" + ); + throw i.code = "ERR_INVALID_FILE_URL_PATH", i; + } + } + return decodeURIComponent(e); +} +const vd = ( + /** @type {const} */ + [ + "history", + "path", + "basename", + "stem", + "extname", + "dirname" + ] +); +class rC { + /** + * Create a new virtual file. + * + * `options` is treated as: + * + * * `string` or `Uint8Array` — `{value: options}` + * * `URL` — `{path: options}` + * * `VFile` — shallow copies its data over to the new file + * * `object` — all fields are shallow copied over to the new file + * + * Path related fields are set in the following order (least specific to + * most specific): `history`, `path`, `basename`, `stem`, `extname`, + * `dirname`. + * + * You cannot set `dirname` or `extname` without setting either `history`, + * `path`, `basename`, or `stem` too. + * + * @param {Compatible | null | undefined} [value] + * File value. + * @returns + * New instance. + */ + constructor(e) { + let n; + e ? Wf(e) ? n = { path: e } : typeof e == "string" || iC(e) ? n = { value: e } : n = e : n = {}, this.cwd = "cwd" in n ? "" : QS.cwd(), this.data = {}, this.history = [], this.messages = [], this.value, this.map, this.result, this.stored; + let r = -1; + for (; ++r < vd.length; ) { + const s = vd[r]; + s in n && n[s] !== void 0 && n[s] !== null && (this[s] = s === "history" ? [...n[s]] : n[s]); + } + let i; + for (i in n) + vd.includes(i) || (this[i] = n[i]); + } + /** + * Get the basename (including extname) (example: `'index.min.js'`). + * + * @returns {string | undefined} + * Basename. + */ + get basename() { + return typeof this.path == "string" ? Or.basename(this.path) : void 0; + } + /** + * Set basename (including extname) (`'index.min.js'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be nullified (use `file.path = file.dirname` instead). + * + * @param {string} basename + * Basename. + * @returns {undefined} + * Nothing. + */ + set basename(e) { + wd(e, "basename"), bd(e, "basename"), this.path = Or.join(this.dirname || "", e); + } + /** + * Get the parent path (example: `'~'`). + * + * @returns {string | undefined} + * Dirname. + */ + get dirname() { + return typeof this.path == "string" ? Or.dirname(this.path) : void 0; + } + /** + * Set the parent path (example: `'~'`). + * + * Cannot be set if there’s no `path` yet. + * + * @param {string | undefined} dirname + * Dirname. + * @returns {undefined} + * Nothing. + */ + set dirname(e) { + y2(this.basename, "dirname"), this.path = Or.join(e || "", this.basename); + } + /** + * Get the extname (including dot) (example: `'.js'`). + * + * @returns {string | undefined} + * Extname. + */ + get extname() { + return typeof this.path == "string" ? Or.extname(this.path) : void 0; + } + /** + * Set the extname (including dot) (example: `'.js'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be set if there’s no `path` yet. + * + * @param {string | undefined} extname + * Extname. + * @returns {undefined} + * Nothing. + */ + set extname(e) { + if (bd(e, "extname"), y2(this.dirname, "extname"), e) { + if (e.codePointAt(0) !== 46) + throw new Error("`extname` must start with `.`"); + if (e.includes(".", 1)) + throw new Error("`extname` cannot contain multiple dots"); + } + this.path = Or.join(this.dirname, this.stem + (e || "")); + } + /** + * Get the full path (example: `'~/index.min.js'`). + * + * @returns {string} + * Path. + */ + get path() { + return this.history[this.history.length - 1]; + } + /** + * Set the full path (example: `'~/index.min.js'`). + * + * Cannot be nullified. + * You can set a file URL (a `URL` object with a `file:` protocol) which will + * be turned into a path with `url.fileURLToPath`. + * + * @param {URL | string} path + * Path. + * @returns {undefined} + * Nothing. + */ + set path(e) { + Wf(e) && (e = tC(e)), wd(e, "path"), this.path !== e && this.history.push(e); + } + /** + * Get the stem (basename w/o extname) (example: `'index.min'`). + * + * @returns {string | undefined} + * Stem. + */ + get stem() { + return typeof this.path == "string" ? Or.basename(this.path, this.extname) : void 0; + } + /** + * Set the stem (basename w/o extname) (example: `'index.min'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be nullified (use `file.path = file.dirname` instead). + * + * @param {string} stem + * Stem. + * @returns {undefined} + * Nothing. + */ + set stem(e) { + wd(e, "stem"), bd(e, "stem"), this.path = Or.join(this.dirname || "", e + (this.extname || "")); + } + // Normal prototypal methods. + /** + * Create a fatal message for `reason` associated with the file. + * + * The `fatal` field of the message is set to `true` (error; file not usable) + * and the `file` field is set to the current file path. + * The message is added to the `messages` field on `file`. + * + * > 🪦 **Note**: also has obsolete signatures. + * + * @overload + * @param {string} reason + * @param {MessageOptions | null | undefined} [options] + * @returns {never} + * + * @overload + * @param {string} reason + * @param {Node | NodeLike | null | undefined} parent + * @param {string | null | undefined} [origin] + * @returns {never} + * + * @overload + * @param {string} reason + * @param {Point | Position | null | undefined} place + * @param {string | null | undefined} [origin] + * @returns {never} + * + * @overload + * @param {string} reason + * @param {string | null | undefined} [origin] + * @returns {never} + * + * @overload + * @param {Error | VFileMessage} cause + * @param {Node | NodeLike | null | undefined} parent + * @param {string | null | undefined} [origin] + * @returns {never} + * + * @overload + * @param {Error | VFileMessage} cause + * @param {Point | Position | null | undefined} place + * @param {string | null | undefined} [origin] + * @returns {never} + * + * @overload + * @param {Error | VFileMessage} cause + * @param {string | null | undefined} [origin] + * @returns {never} + * + * @param {Error | VFileMessage | string} causeOrReason + * Reason for message, should use markdown. + * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace] + * Configuration (optional). + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {never} + * Never. + * @throws {VFileMessage} + * Message. + */ + fail(e, n, r) { + const i = this.message(e, n, r); + throw i.fatal = !0, i; + } + /** + * Create an info message for `reason` associated with the file. + * + * The `fatal` field of the message is set to `undefined` (info; change + * likely not needed) and the `file` field is set to the current file path. + * The message is added to the `messages` field on `file`. + * + * > 🪦 **Note**: also has obsolete signatures. + * + * @overload + * @param {string} reason + * @param {MessageOptions | null | undefined} [options] + * @returns {VFileMessage} + * + * @overload + * @param {string} reason + * @param {Node | NodeLike | null | undefined} parent + * @param {string | null | undefined} [origin] + * @returns {VFileMessage} + * + * @overload + * @param {string} reason + * @param {Point | Position | null | undefined} place + * @param {string | null | undefined} [origin] + * @returns {VFileMessage} + * + * @overload + * @param {string} reason + * @param {string | null | undefined} [origin] + * @returns {VFileMessage} + * + * @overload + * @param {Error | VFileMessage} cause + * @param {Node | NodeLike | null | undefined} parent + * @param {string | null | undefined} [origin] + * @returns {VFileMessage} + * + * @overload + * @param {Error | VFileMessage} cause + * @param {Point | Position | null | undefined} place + * @param {string | null | undefined} [origin] + * @returns {VFileMessage} + * + * @overload + * @param {Error | VFileMessage} cause + * @param {string | null | undefined} [origin] + * @returns {VFileMessage} + * + * @param {Error | VFileMessage | string} causeOrReason + * Reason for message, should use markdown. + * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace] + * Configuration (optional). + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {VFileMessage} + * Message. + */ + info(e, n, r) { + const i = this.message(e, n, r); + return i.fatal = void 0, i; + } + /** + * Create a message for `reason` associated with the file. + * + * The `fatal` field of the message is set to `false` (warning; change may be + * needed) and the `file` field is set to the current file path. + * The message is added to the `messages` field on `file`. + * + * > 🪦 **Note**: also has obsolete signatures. + * + * @overload + * @param {string} reason + * @param {MessageOptions | null | undefined} [options] + * @returns {VFileMessage} + * + * @overload + * @param {string} reason + * @param {Node | NodeLike | null | undefined} parent + * @param {string | null | undefined} [origin] + * @returns {VFileMessage} + * + * @overload + * @param {string} reason + * @param {Point | Position | null | undefined} place + * @param {string | null | undefined} [origin] + * @returns {VFileMessage} + * + * @overload + * @param {string} reason + * @param {string | null | undefined} [origin] + * @returns {VFileMessage} + * + * @overload + * @param {Error | VFileMessage} cause + * @param {Node | NodeLike | null | undefined} parent + * @param {string | null | undefined} [origin] + * @returns {VFileMessage} + * + * @overload + * @param {Error | VFileMessage} cause + * @param {Point | Position | null | undefined} place + * @param {string | null | undefined} [origin] + * @returns {VFileMessage} + * + * @overload + * @param {Error | VFileMessage} cause + * @param {string | null | undefined} [origin] + * @returns {VFileMessage} + * + * @param {Error | VFileMessage | string} causeOrReason + * Reason for message, should use markdown. + * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace] + * Configuration (optional). + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {VFileMessage} + * Message. + */ + message(e, n, r) { + const i = new Tn( + // @ts-expect-error: the overloads are fine. + e, + n, + r + ); + return this.path && (i.name = this.path + ":" + i.name, i.file = this.path), i.fatal = !1, this.messages.push(i), i; + } + /** + * Serialize the file. + * + * > **Note**: which encodings are supported depends on the engine. + * > For info on Node.js, see: + * > . + * + * @param {string | null | undefined} [encoding='utf8'] + * Character encoding to understand `value` as when it’s a `Uint8Array` + * (default: `'utf-8'`). + * @returns {string} + * Serialized file. + */ + toString(e) { + return this.value === void 0 ? "" : typeof this.value == "string" ? this.value : new TextDecoder(e || void 0).decode(this.value); + } +} +function bd(t, e) { + if (t && t.includes(Or.sep)) + throw new Error( + "`" + e + "` cannot be a path: did not expect `" + Or.sep + "`" + ); +} +function wd(t, e) { + if (!t) + throw new Error("`" + e + "` cannot be empty"); +} +function y2(t, e) { + if (!t) + throw new Error("Setting `" + e + "` requires `path` to be set too"); +} +function iC(t) { + return !!(t && typeof t == "object" && "byteLength" in t && "byteOffset" in t); +} +const sC = ( + /** + * @type {new , Result>(property: string | symbol) => (...parameters: Parameters) => Result} + */ + /** @type {unknown} */ + /** + * @this {Function} + * @param {string | symbol} property + * @returns {(...parameters: Array) => unknown} + */ + function(t) { + const r = ( + /** @type {Record} */ + // Prototypes do exist. + // type-coverage:ignore-next-line + this.constructor.prototype + ), i = r[t], s = function() { + return i.apply(s, arguments); + }; + return Object.setPrototypeOf(s, r), s; + } +), oC = {}.hasOwnProperty; +class o1 extends sC { + /** + * Create a processor. + */ + constructor() { + super("copy"), this.Compiler = void 0, this.Parser = void 0, this.attachers = [], this.compiler = void 0, this.freezeIndex = -1, this.frozen = void 0, this.namespace = {}, this.parser = void 0, this.transformers = WS(); + } + /** + * Copy a processor. + * + * @deprecated + * This is a private internal method and should not be used. + * @returns {Processor} + * New *unfrozen* processor ({@linkcode Processor}) that is + * configured to work the same as its ancestor. + * When the descendant processor is configured in the future it does not + * affect the ancestral processor. + */ + copy() { + const e = ( + /** @type {Processor} */ + new o1() + ); + let n = -1; + for (; ++n < this.attachers.length; ) { + const r = this.attachers[n]; + e.use(...r); + } + return e.data(yd(!0, {}, this.namespace)), e; + } + /** + * Configure the processor with info available to all plugins. + * Information is stored in an object. + * + * Typically, options can be given to a specific plugin, but sometimes it + * makes sense to have information shared with several plugins. + * For example, a list of HTML elements that are self-closing, which is + * needed during all phases. + * + * > **Note**: setting information cannot occur on *frozen* processors. + * > Call the processor first to create a new unfrozen processor. + * + * > **Note**: to register custom data in TypeScript, augment the + * > {@linkcode Data} interface. + * + * @example + * This example show how to get and set info: + * + * ```js + * import {unified} from 'unified' + * + * const processor = unified().data('alpha', 'bravo') + * + * processor.data('alpha') // => 'bravo' + * + * processor.data() // => {alpha: 'bravo'} + * + * processor.data({charlie: 'delta'}) + * + * processor.data() // => {charlie: 'delta'} + * ``` + * + * @template {keyof Data} Key + * + * @overload + * @returns {Data} + * + * @overload + * @param {Data} dataset + * @returns {Processor} + * + * @overload + * @param {Key} key + * @returns {Data[Key]} + * + * @overload + * @param {Key} key + * @param {Data[Key]} value + * @returns {Processor} + * + * @param {Data | Key} [key] + * Key to get or set, or entire dataset to set, or nothing to get the + * entire dataset (optional). + * @param {Data[Key]} [value] + * Value to set (optional). + * @returns {unknown} + * The current processor when setting, the value at `key` when getting, or + * the entire dataset when getting without key. + */ + data(e, n) { + return typeof e == "string" ? arguments.length === 2 ? (Sd("data", this.frozen), this.namespace[e] = n, this) : oC.call(this.namespace, e) && this.namespace[e] || void 0 : e ? (Sd("data", this.frozen), this.namespace = e, this) : this.namespace; + } + /** + * Freeze a processor. + * + * Frozen processors are meant to be extended and not to be configured + * directly. + * + * When a processor is frozen it cannot be unfrozen. + * New processors working the same way can be created by calling the + * processor. + * + * It’s possible to freeze processors explicitly by calling `.freeze()`. + * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`, + * `.stringify()`, `.process()`, or `.processSync()` are called. + * + * @returns {Processor} + * The current processor. + */ + freeze() { + if (this.frozen) + return this; + const e = ( + /** @type {Processor} */ + /** @type {unknown} */ + this + ); + for (; ++this.freezeIndex < this.attachers.length; ) { + const [n, ...r] = this.attachers[this.freezeIndex]; + if (r[0] === !1) + continue; + r[0] === !0 && (r[0] = void 0); + const i = n.call(e, ...r); + typeof i == "function" && this.transformers.use(i); + } + return this.frozen = !0, this.freezeIndex = Number.POSITIVE_INFINITY, this; + } + /** + * Parse text to a syntax tree. + * + * > **Note**: `parse` freezes the processor if not already *frozen*. + * + * > **Note**: `parse` performs the parse phase, not the run phase or other + * > phases. + * + * @param {Compatible | undefined} [file] + * file to parse (optional); typically `string` or `VFile`; any value + * accepted as `x` in `new VFile(x)`. + * @returns {ParseTree extends undefined ? Node : ParseTree} + * Syntax tree representing `file`. + */ + parse(e) { + this.freeze(); + const n = ku(e), r = this.parser || this.Parser; + return kd("parse", r), r(String(n), n); + } + /** + * Process the given file as configured on the processor. + * + * > **Note**: `process` freezes the processor if not already *frozen*. + * + * > **Note**: `process` performs the parse, run, and stringify phases. + * + * @overload + * @param {Compatible | undefined} file + * @param {ProcessCallback>} done + * @returns {undefined} + * + * @overload + * @param {Compatible | undefined} [file] + * @returns {Promise>} + * + * @param {Compatible | undefined} [file] + * File (optional); typically `string` or `VFile`]; any value accepted as + * `x` in `new VFile(x)`. + * @param {ProcessCallback> | undefined} [done] + * Callback (optional). + * @returns {Promise | undefined} + * Nothing if `done` is given. + * Otherwise a promise, rejected with a fatal error or resolved with the + * processed file. + * + * The parsed, transformed, and compiled value is available at + * `file.value` (see note). + * + * > **Note**: unified typically compiles by serializing: most + * > compilers return `string` (or `Uint8Array`). + * > Some compilers, such as the one configured with + * > [`rehype-react`][rehype-react], return other values (in this case, a + * > React tree). + * > If you’re using a compiler that doesn’t serialize, expect different + * > result values. + * > + * > To register custom results in TypeScript, add them to + * > {@linkcode CompileResultMap}. + * + * [rehype-react]: https://github.com/rehypejs/rehype-react + */ + process(e, n) { + const r = this; + return this.freeze(), kd("process", this.parser || this.Parser), xd("process", this.compiler || this.Compiler), n ? i(void 0, n) : new Promise(i); + function i(s, o) { + const l = ku(e), a = ( + /** @type {HeadTree extends undefined ? Node : HeadTree} */ + /** @type {unknown} */ + r.parse(l) + ); + r.run(a, l, function(c, h, d) { + if (c || !h || !d) + return u(c); + const f = ( + /** @type {CompileTree extends undefined ? Node : CompileTree} */ + /** @type {unknown} */ + h + ), m = r.stringify(f, d); + aC(m) ? d.value = m : d.result = m, u( + c, + /** @type {VFileWithOutput} */ + d + ); + }); + function u(c, h) { + c || !h ? o(c) : s ? s(h) : n(void 0, h); + } + } + } + /** + * Process the given file as configured on the processor. + * + * An error is thrown if asynchronous transforms are configured. + * + * > **Note**: `processSync` freezes the processor if not already *frozen*. + * + * > **Note**: `processSync` performs the parse, run, and stringify phases. + * + * @param {Compatible | undefined} [file] + * File (optional); typically `string` or `VFile`; any value accepted as + * `x` in `new VFile(x)`. + * @returns {VFileWithOutput} + * The processed file. + * + * The parsed, transformed, and compiled value is available at + * `file.value` (see note). + * + * > **Note**: unified typically compiles by serializing: most + * > compilers return `string` (or `Uint8Array`). + * > Some compilers, such as the one configured with + * > [`rehype-react`][rehype-react], return other values (in this case, a + * > React tree). + * > If you’re using a compiler that doesn’t serialize, expect different + * > result values. + * > + * > To register custom results in TypeScript, add them to + * > {@linkcode CompileResultMap}. + * + * [rehype-react]: https://github.com/rehypejs/rehype-react + */ + processSync(e) { + let n = !1, r; + return this.freeze(), kd("processSync", this.parser || this.Parser), xd("processSync", this.compiler || this.Compiler), this.process(e, i), b2("processSync", "process", n), r; + function i(s, o) { + n = !0, c2(s), r = o; + } + } + /** + * Run *transformers* on a syntax tree. + * + * > **Note**: `run` freezes the processor if not already *frozen*. + * + * > **Note**: `run` performs the run phase, not other phases. + * + * @overload + * @param {HeadTree extends undefined ? Node : HeadTree} tree + * @param {RunCallback} done + * @returns {undefined} + * + * @overload + * @param {HeadTree extends undefined ? Node : HeadTree} tree + * @param {Compatible | undefined} file + * @param {RunCallback} done + * @returns {undefined} + * + * @overload + * @param {HeadTree extends undefined ? Node : HeadTree} tree + * @param {Compatible | undefined} [file] + * @returns {Promise} + * + * @param {HeadTree extends undefined ? Node : HeadTree} tree + * Tree to transform and inspect. + * @param {( + * RunCallback | + * Compatible + * )} [file] + * File associated with `node` (optional); any value accepted as `x` in + * `new VFile(x)`. + * @param {RunCallback} [done] + * Callback (optional). + * @returns {Promise | undefined} + * Nothing if `done` is given. + * Otherwise, a promise rejected with a fatal error or resolved with the + * transformed tree. + */ + run(e, n, r) { + v2(e), this.freeze(); + const i = this.transformers; + return !r && typeof n == "function" && (r = n, n = void 0), r ? s(void 0, r) : new Promise(s); + function s(o, l) { + const a = ku(n); + i.run(e, a, u); + function u(c, h, d) { + const f = ( + /** @type {TailTree extends undefined ? Node : TailTree} */ + h || e + ); + c ? l(c) : o ? o(f) : r(void 0, f, d); + } + } + } + /** + * Run *transformers* on a syntax tree. + * + * An error is thrown if asynchronous transforms are configured. + * + * > **Note**: `runSync` freezes the processor if not already *frozen*. + * + * > **Note**: `runSync` performs the run phase, not other phases. + * + * @param {HeadTree extends undefined ? Node : HeadTree} tree + * Tree to transform and inspect. + * @param {Compatible | undefined} [file] + * File associated with `node` (optional); any value accepted as `x` in + * `new VFile(x)`. + * @returns {TailTree extends undefined ? Node : TailTree} + * Transformed tree. + */ + runSync(e, n) { + let r = !1, i; + return this.run(e, n, s), b2("runSync", "run", r), i; + function s(o, l) { + c2(o), i = l, r = !0; + } + } + /** + * Compile a syntax tree. + * + * > **Note**: `stringify` freezes the processor if not already *frozen*. + * + * > **Note**: `stringify` performs the stringify phase, not the run phase + * > or other phases. + * + * @param {CompileTree extends undefined ? Node : CompileTree} tree + * Tree to compile. + * @param {Compatible | undefined} [file] + * File associated with `node` (optional); any value accepted as `x` in + * `new VFile(x)`. + * @returns {CompileResult extends undefined ? Value : CompileResult} + * Textual representation of the tree (see note). + * + * > **Note**: unified typically compiles by serializing: most compilers + * > return `string` (or `Uint8Array`). + * > Some compilers, such as the one configured with + * > [`rehype-react`][rehype-react], return other values (in this case, a + * > React tree). + * > If you’re using a compiler that doesn’t serialize, expect different + * > result values. + * > + * > To register custom results in TypeScript, add them to + * > {@linkcode CompileResultMap}. + * + * [rehype-react]: https://github.com/rehypejs/rehype-react + */ + stringify(e, n) { + this.freeze(); + const r = ku(n), i = this.compiler || this.Compiler; + return xd("stringify", i), v2(e), i(e, r); + } + /** + * Configure the processor to use a plugin, a list of usable values, or a + * preset. + * + * If the processor is already using a plugin, the previous plugin + * configuration is changed based on the options that are passed in. + * In other words, the plugin is not added a second time. + * + * > **Note**: `use` cannot be called on *frozen* processors. + * > Call the processor first to create a new unfrozen processor. + * + * @example + * There are many ways to pass plugins to `.use()`. + * This example gives an overview: + * + * ```js + * import {unified} from 'unified' + * + * unified() + * // Plugin with options: + * .use(pluginA, {x: true, y: true}) + * // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`): + * .use(pluginA, {y: false, z: true}) + * // Plugins: + * .use([pluginB, pluginC]) + * // Two plugins, the second with options: + * .use([pluginD, [pluginE, {}]]) + * // Preset with plugins and settings: + * .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}}) + * // Settings only: + * .use({settings: {position: false}}) + * ``` + * + * @template {Array} [Parameters=[]] + * @template {Node | string | undefined} [Input=undefined] + * @template [Output=Input] + * + * @overload + * @param {Preset | null | undefined} [preset] + * @returns {Processor} + * + * @overload + * @param {PluggableList} list + * @returns {Processor} + * + * @overload + * @param {Plugin} plugin + * @param {...(Parameters | [boolean])} parameters + * @returns {UsePlugin} + * + * @param {PluggableList | Plugin | Preset | null | undefined} value + * Usable value. + * @param {...unknown} parameters + * Parameters, when a plugin is given as a usable value. + * @returns {Processor} + * Current processor. + */ + use(e, ...n) { + const r = this.attachers, i = this.namespace; + if (Sd("use", this.frozen), e != null) if (typeof e == "function") + a(e, n); + else if (typeof e == "object") + Array.isArray(e) ? l(e) : o(e); + else + throw new TypeError("Expected usable value, not `" + e + "`"); + return this; + function s(u) { + if (typeof u == "function") + a(u, []); + else if (typeof u == "object") + if (Array.isArray(u)) { + const [c, ...h] = ( + /** @type {PluginTuple>} */ + u + ); + a(c, h); + } else + o(u); + else + throw new TypeError("Expected usable value, not `" + u + "`"); + } + function o(u) { + if (!("plugins" in u) && !("settings" in u)) + throw new Error( + "Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither" + ); + l(u.plugins), u.settings && (i.settings = yd(!0, i.settings, u.settings)); + } + function l(u) { + let c = -1; + if (u != null) if (Array.isArray(u)) + for (; ++c < u.length; ) { + const h = u[c]; + s(h); + } + else + throw new TypeError("Expected a list of plugins, not `" + u + "`"); + } + function a(u, c) { + let h = -1, d = -1; + for (; ++h < r.length; ) + if (r[h][0] === u) { + d = h; + break; + } + if (d === -1) + r.push([u, ...c]); + else if (c.length > 0) { + let [f, ...m] = c; + const y = r[d][1]; + jf(y) && jf(f) && (f = yd(!0, y, f)), r[d] = [u, f, ...m]; + } + } + } +} +const Uf = new o1().freeze(); +function kd(t, e) { + if (typeof e != "function") + throw new TypeError("Cannot `" + t + "` without `parser`"); +} +function xd(t, e) { + if (typeof e != "function") + throw new TypeError("Cannot `" + t + "` without `compiler`"); +} +function Sd(t, e) { + if (e) + throw new Error( + "Cannot call `" + t + "` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`." + ); +} +function v2(t) { + if (!jf(t) || typeof t.type != "string") + throw new TypeError("Expected node, got `" + t + "`"); +} +function b2(t, e, n) { + if (!n) + throw new Error( + "`" + t + "` finished async. Use `" + e + "` instead" + ); +} +function ku(t) { + return lC(t) ? t : new rC(t); +} +function lC(t) { + return !!(t && typeof t == "object" && "message" in t && "messages" in t); +} +function aC(t) { + return typeof t == "string" || uC(t); +} +function uC(t) { + return !!(t && typeof t == "object" && "byteLength" in t && "byteOffset" in t); +} +var p6 = (t) => { + throw TypeError(t); +}, m6 = (t, e, n) => e.has(t) || p6("Cannot " + n), Fe = (t, e, n) => (m6(t, e, "read from private field"), n ? n.call(t) : e.get(t)), Et = (t, e, n) => e.has(t) ? p6("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(t) : e.set(t, n), at = (t, e, n, r) => (m6(t, e, "write to private field"), e.set(t, n), n), Er, aa, Gu, Ku, Ju, ua, ca, Qr, ha, Yu, Zu, da, Xu, fa, Qu, ec, Ro, Is, tc, pa; +class g6 { +} +class y6 { + constructor() { + this.elements = [], this.size = () => this.elements.length, this.top = () => this.elements.at(-1), this.push = (e) => { + var n; + (n = this.top()) == null || n.push(e); + }, this.open = (e) => { + this.elements.push(e); + }, this.close = () => { + const e = this.elements.pop(); + if (!e) throw v7(); + return e; + }; + } +} +class l1 extends g6 { + constructor(e, n, r) { + super(), this.type = e, this.content = n, this.attrs = r; + } + push(e, ...n) { + this.content.push(e, ...n); + } + pop() { + return this.content.pop(); + } + static create(e, n, r) { + return new l1(e, n, r); + } +} +const Gf = class extends y6 { + /// @internal + constructor(e) { + super(), Et(this, Er), Et(this, aa), Et(this, Gu), Et(this, Ku), Et(this, Ju), Et(this, ua), Et(this, ca), at(this, Er, qe.none), at(this, aa, (n) => n.isText), at(this, Gu, (n, r) => { + if (Fe(this, aa).call(this, n) && Fe(this, aa).call(this, r) && qe.sameSet(n.marks, r.marks)) + return this.schema.text(n.text + r.text, n.marks); + }), at(this, Ku, (n) => { + const r = Object.values({ + ...this.schema.nodes, + ...this.schema.marks + }).find((i) => i.spec.parseMarkdown.match(n)); + if (!r) throw rw(n); + return r; + }), at(this, Ju, (n) => { + const r = Fe(this, Ku).call(this, n); + r.spec.parseMarkdown.runner(this, n, r); + }), this.injectRoot = (n, r, i) => (this.openNode(r, i), this.next(n.children), this), this.openNode = (n, r) => (this.open(l1.create(n, [], r)), this), at(this, ua, () => { + at(this, Er, qe.none); + const n = this.close(); + return Fe(this, ca).call(this, n.type, n.attrs, n.content); + }), this.closeNode = () => { + try { + Fe(this, ua).call(this); + } catch (n) { + console.error(n); + } + return this; + }, at(this, ca, (n, r, i) => { + const s = n.createAndFill(r, i, Fe(this, Er)); + if (!s) throw nw(n, r, i); + return this.push(s), s; + }), this.addNode = (n, r, i) => { + try { + Fe(this, ca).call(this, n, r, i); + } catch (s) { + console.error(s); + } + return this; + }, this.openMark = (n, r) => { + const i = n.create(r); + return at(this, Er, i.addToSet(Fe(this, Er))), this; + }, this.closeMark = (n) => (at(this, Er, n.removeFromSet(Fe(this, Er))), this), this.addText = (n) => { + try { + const r = this.top(); + if (!r) throw v7(); + const i = r.pop(), s = this.schema.text(n, Fe(this, Er)); + if (!i) + return r.push(s), this; + const o = Fe(this, Gu).call(this, i, s); + return o ? (r.push(o), this) : (r.push(i, s), this); + } catch (r) { + return console.error(r), this; + } + }, this.build = () => { + let n; + do + n = Fe(this, ua).call(this); + while (this.size()); + return n; + }, this.next = (n = []) => ([n].flat().forEach((r) => Fe(this, Ju).call(this, r)), this), this.toDoc = () => this.build(), this.run = (n, r) => { + const i = n.runSync( + n.parse(r), + r + ); + return this.next(i), this; + }, this.schema = e; + } +}; +Er = /* @__PURE__ */ new WeakMap(); +aa = /* @__PURE__ */ new WeakMap(); +Gu = /* @__PURE__ */ new WeakMap(); +Ku = /* @__PURE__ */ new WeakMap(); +Ju = /* @__PURE__ */ new WeakMap(); +ua = /* @__PURE__ */ new WeakMap(); +ca = /* @__PURE__ */ new WeakMap(); +Gf.create = (t, e) => { + const n = new Gf(t); + return (r) => (n.run(e, r), n.toDoc()); +}; +let cC = Gf; +const Kf = class extends g6 { + constructor(e, n, r, i = {}) { + super(), this.type = e, this.children = n, this.value = r, this.props = i, this.push = (s, ...o) => { + this.children || (this.children = []), this.children.push(s, ...o); + }, this.pop = () => { + var s; + return (s = this.children) == null ? void 0 : s.pop(); + }; + } +}; +Kf.create = (t, e, n, r = {}) => new Kf(t, e, n, r); +let w2 = Kf; +const hC = (t) => Object.prototype.hasOwnProperty.call(t, "size"), Jf = class extends y6 { + /// @internal + constructor(e) { + super(), Et(this, Qr), Et(this, ha), Et(this, Yu), Et(this, Zu), Et(this, da), Et(this, Xu), Et(this, fa), Et(this, Qu), Et(this, ec), Et(this, Ro), Et(this, Is), Et(this, tc), Et(this, pa), at(this, Qr, qe.none), at(this, ha, (n) => { + const r = Object.values({ + ...this.schema.nodes, + ...this.schema.marks + }).find((i) => i.spec.toMarkdown.match(n)); + if (!r) throw iw(n.type); + return r; + }), at(this, Yu, (n) => Fe(this, ha).call(this, n).spec.toMarkdown.runner(this, n)), at(this, Zu, (n, r) => Fe(this, ha).call(this, n).spec.toMarkdown.runner(this, n, r)), at(this, da, (n) => { + const { marks: r } = n, i = (l) => l.type.spec.priority ?? 50; + [...r].sort((l, a) => i(l) - i(a)).every((l) => !Fe(this, Zu).call(this, l, n)) && Fe(this, Yu).call(this, n), r.forEach((l) => Fe(this, pa).call(this, l)); + }), at(this, Xu, (n, r) => { + var a; + if (n.type === r || ((a = n.children) == null ? void 0 : a.length) !== 1) return n; + const i = (u) => { + var h; + if (u.type === r) return u; + if (((h = u.children) == null ? void 0 : h.length) !== 1) return null; + const [c] = u.children; + return c ? i(c) : null; + }, s = i(n); + if (!s) return n; + const o = s.children ? [...s.children] : void 0, l = { ...n, children: o }; + return l.children = o, s.children = [l], s; + }), at(this, fa, (n) => { + const { children: r } = n; + return r && (n.children = r.reduce((i, s, o) => { + if (o === 0) return [s]; + const l = i.at(-1); + if (l && l.isMark && s.isMark) { + s = Fe(this, Xu).call(this, s, l.type); + const { children: a, ...u } = s, { children: c, ...h } = l; + if (s.type === l.type && a && c && JSON.stringify(u) === JSON.stringify(h)) { + const d = { + ...h, + children: [...c, ...a] + }; + return i.slice(0, -1).concat(Fe(this, fa).call(this, d)); + } + } + return i.concat(s); + }, [])), n; + }), at(this, Qu, (n) => { + const r = { + ...n.props, + type: n.type + }; + return n.children && (r.children = n.children), n.value && (r.value = n.value), r; + }), this.openNode = (n, r, i) => (this.open(w2.create(n, void 0, r, i)), this), at(this, ec, (n, r) => { + let i = "", s = ""; + const o = n.children; + let l = -1, a = -1; + const u = (h) => { + h && h.forEach((d, f) => { + d.type === "text" && d.value && (l < 0 && (l = f), a = f); + }); + }; + if (o) { + u(o); + const h = o == null ? void 0 : o[a], d = o == null ? void 0 : o[l]; + if (h && h.value.endsWith(" ")) { + const f = h.value, m = f.trimEnd(); + s = f.slice(m.length), h.value = m; + } + if (d && d.value.startsWith(" ")) { + const f = d.value, m = f.trimStart(); + i = f.slice(0, f.length - m.length), d.value = m; + } + } + i.length && Fe(this, Is).call(this, "text", void 0, i); + const c = r(); + return s.length && Fe(this, Is).call(this, "text", void 0, s), c; + }), at(this, Ro, (n = !1) => { + const r = this.close(), i = () => Fe(this, Is).call(this, r.type, r.children, r.value, r.props); + return n ? Fe(this, ec).call(this, r, i) : i(); + }), this.closeNode = () => (Fe(this, Ro).call(this), this), at(this, Is, (n, r, i, s) => { + const o = w2.create(n, r, i, s), l = Fe(this, fa).call(this, Fe(this, Qu).call(this, o)); + return this.push(l), l; + }), this.addNode = (n, r, i, s) => (Fe(this, Is).call(this, n, r, i, s), this), at(this, tc, (n, r, i, s) => n.isInSet(Fe(this, Qr)) ? this : (at(this, Qr, n.addToSet(Fe(this, Qr))), this.openNode(r, i, { ...s, isMark: !0 }))), at(this, pa, (n) => { + n.isInSet(Fe(this, Qr)) && (at(this, Qr, n.type.removeFromSet(Fe(this, Qr))), Fe(this, Ro).call(this, !0)); + }), this.withMark = (n, r, i, s) => (Fe(this, tc).call(this, n, r, i, s), this), this.closeMark = (n) => (Fe(this, pa).call(this, n), this), this.build = () => { + let n = null; + do + n = Fe(this, Ro).call(this); + while (this.size()); + return n; + }, this.next = (n) => hC(n) ? (n.forEach((r) => { + Fe(this, da).call(this, r); + }), this) : (Fe(this, da).call(this, n), this), this.toString = (n) => n.stringify(this.build()), this.run = (n) => (this.next(n), this), this.schema = e; + } +}; +Qr = /* @__PURE__ */ new WeakMap(); +ha = /* @__PURE__ */ new WeakMap(); +Yu = /* @__PURE__ */ new WeakMap(); +Zu = /* @__PURE__ */ new WeakMap(); +da = /* @__PURE__ */ new WeakMap(); +Xu = /* @__PURE__ */ new WeakMap(); +fa = /* @__PURE__ */ new WeakMap(); +Qu = /* @__PURE__ */ new WeakMap(); +ec = /* @__PURE__ */ new WeakMap(); +Ro = /* @__PURE__ */ new WeakMap(); +Is = /* @__PURE__ */ new WeakMap(); +tc = /* @__PURE__ */ new WeakMap(); +pa = /* @__PURE__ */ new WeakMap(); +Jf.create = (t, e) => { + const n = new Jf(t); + return (r) => (n.run(r), n.toString(e)); +}; +let dC = Jf; +const v6 = 65535, b6 = Math.pow(2, 16); +function fC(t, e) { + return t + e * b6; +} +function k2(t) { + return t & v6; +} +function pC(t) { + return (t - (t & v6)) / b6; +} +const w6 = 1, k6 = 2, nc = 4, x6 = 8; +class Yf { + /** + @internal + */ + constructor(e, n, r) { + this.pos = e, this.delInfo = n, this.recover = r; + } + /** + Tells you whether the position was deleted, that is, whether the + step removed the token on the side queried (via the `assoc`) + argument from the document. + */ + get deleted() { + return (this.delInfo & x6) > 0; + } + /** + Tells you whether the token before the mapped position was deleted. + */ + get deletedBefore() { + return (this.delInfo & (w6 | nc)) > 0; + } + /** + True when the token after the mapped position was deleted. + */ + get deletedAfter() { + return (this.delInfo & (k6 | nc)) > 0; + } + /** + Tells whether any of the steps mapped through deletes across the + position (including both the token before and after the + position). + */ + get deletedAcross() { + return (this.delInfo & nc) > 0; + } +} +class Bn { + /** + Create a position map. The modifications to the document are + represented as an array of numbers, in which each group of three + represents a modified chunk as `[start, oldSize, newSize]`. + */ + constructor(e, n = !1) { + if (this.ranges = e, this.inverted = n, !e.length && Bn.empty) + return Bn.empty; + } + /** + @internal + */ + recover(e) { + let n = 0, r = k2(e); + if (!this.inverted) + for (let i = 0; i < r; i++) + n += this.ranges[i * 3 + 2] - this.ranges[i * 3 + 1]; + return this.ranges[r * 3] + n + pC(e); + } + mapResult(e, n = 1) { + return this._map(e, n, !1); + } + map(e, n = 1) { + return this._map(e, n, !0); + } + /** + @internal + */ + _map(e, n, r) { + let i = 0, s = this.inverted ? 2 : 1, o = this.inverted ? 1 : 2; + for (let l = 0; l < this.ranges.length; l += 3) { + let a = this.ranges[l] - (this.inverted ? i : 0); + if (a > e) + break; + let u = this.ranges[l + s], c = this.ranges[l + o], h = a + u; + if (e <= h) { + let d = u ? e == a ? -1 : e == h ? 1 : n : n, f = a + i + (d < 0 ? 0 : c); + if (r) + return f; + let m = e == (n < 0 ? a : h) ? null : fC(l / 3, e - a), y = e == a ? k6 : e == h ? w6 : nc; + return (n < 0 ? e != a : e != h) && (y |= x6), new Yf(f, y, m); + } + i += c - u; + } + return r ? e + i : new Yf(e + i, 0, null); + } + /** + @internal + */ + touches(e, n) { + let r = 0, i = k2(n), s = this.inverted ? 2 : 1, o = this.inverted ? 1 : 2; + for (let l = 0; l < this.ranges.length; l += 3) { + let a = this.ranges[l] - (this.inverted ? r : 0); + if (a > e) + break; + let u = this.ranges[l + s], c = a + u; + if (e <= c && l == i * 3) + return !0; + r += this.ranges[l + o] - u; + } + return !1; + } + /** + Calls the given function on each of the changed ranges included in + this map. + */ + forEach(e) { + let n = this.inverted ? 2 : 1, r = this.inverted ? 1 : 2; + for (let i = 0, s = 0; i < this.ranges.length; i += 3) { + let o = this.ranges[i], l = o - (this.inverted ? s : 0), a = o + (this.inverted ? 0 : s), u = this.ranges[i + n], c = this.ranges[i + r]; + e(l, l + u, a, a + c), s += c - u; + } + } + /** + Create an inverted version of this map. The result can be used to + map positions in the post-step document to the pre-step document. + */ + invert() { + return new Bn(this.ranges, !this.inverted); + } + /** + @internal + */ + toString() { + return (this.inverted ? "-" : "") + JSON.stringify(this.ranges); + } + /** + Create a map that moves all positions by offset `n` (which may be + negative). This can be useful when applying steps meant for a + sub-document to a larger document, or vice-versa. + */ + static offset(e) { + return e == 0 ? Bn.empty : new Bn(e < 0 ? [0, -e, 0] : [0, 0, e]); + } +} +Bn.empty = new Bn([]); +class n0 { + /** + Create a new mapping with the given position maps. + */ + constructor(e, n, r = 0, i = e ? e.length : 0) { + this.mirror = n, this.from = r, this.to = i, this._maps = e || [], this.ownData = !(e || n); + } + /** + The step maps in this mapping. + */ + get maps() { + return this._maps; + } + /** + Create a mapping that maps only through a part of this one. + */ + slice(e = 0, n = this.maps.length) { + return new n0(this._maps, this.mirror, e, n); + } + /** + Add a step map to the end of this mapping. If `mirrors` is + given, it should be the index of the step map that is the mirror + image of this one. + */ + appendMap(e, n) { + this.ownData || (this._maps = this._maps.slice(), this.mirror = this.mirror && this.mirror.slice(), this.ownData = !0), this.to = this._maps.push(e), n != null && this.setMirror(this._maps.length - 1, n); + } + /** + Add all the step maps in a given mapping to this one (preserving + mirroring information). + */ + appendMapping(e) { + for (let n = 0, r = this._maps.length; n < e._maps.length; n++) { + let i = e.getMirror(n); + this.appendMap(e._maps[n], i != null && i < n ? r + i : void 0); + } + } + /** + Finds the offset of the step map that mirrors the map at the + given offset, in this mapping (as per the second argument to + `appendMap`). + */ + getMirror(e) { + if (this.mirror) { + for (let n = 0; n < this.mirror.length; n++) + if (this.mirror[n] == e) + return this.mirror[n + (n % 2 ? -1 : 1)]; + } + } + /** + @internal + */ + setMirror(e, n) { + this.mirror || (this.mirror = []), this.mirror.push(e, n); + } + /** + Append the inverse of the given mapping to this one. + */ + appendMappingInverted(e) { + for (let n = e.maps.length - 1, r = this._maps.length + e._maps.length; n >= 0; n--) { + let i = e.getMirror(n); + this.appendMap(e._maps[n].invert(), i != null && i > n ? r - i - 1 : void 0); + } + } + /** + Create an inverted version of this mapping. + */ + invert() { + let e = new n0(); + return e.appendMappingInverted(this), e; + } + /** + Map a position through this mapping. + */ + map(e, n = 1) { + if (this.mirror) + return this._map(e, n, !0); + for (let r = this.from; r < this.to; r++) + e = this._maps[r].map(e, n); + return e; + } + /** + Map a position through this mapping, returning a mapping + result. + */ + mapResult(e, n = 1) { + return this._map(e, n, !1); + } + /** + @internal + */ + _map(e, n, r) { + let i = 0; + for (let s = this.from; s < this.to; s++) { + let o = this._maps[s], l = o.mapResult(e, n); + if (l.recover != null) { + let a = this.getMirror(s); + if (a != null && a > s && a < this.to) { + s = a, e = this._maps[a].recover(l.recover); + continue; + } + } + i |= l.delInfo, e = l.pos; + } + return r ? e : new Yf(e, i, null); + } +} +const Cd = /* @__PURE__ */ Object.create(null); +class Zt { + /** + Get the step map that represents the changes made by this step, + and which can be used to transform between positions in the old + and the new document. + */ + getMap() { + return Bn.empty; + } + /** + Try to merge this step with another one, to be applied directly + after it. Returns the merged step when possible, null if the + steps can't be merged. + */ + merge(e) { + return null; + } + /** + Deserialize a step from its JSON representation. Will call + through to the step class' own implementation of this method. + */ + static fromJSON(e, n) { + if (!n || !n.stepType) + throw new RangeError("Invalid input for Step.fromJSON"); + let r = Cd[n.stepType]; + if (!r) + throw new RangeError(`No step type ${n.stepType} defined`); + return r.fromJSON(e, n); + } + /** + To be able to serialize steps to JSON, each step needs a string + ID to attach to its JSON representation. Use this method to + register an ID for your step classes. Try to pick something + that's unlikely to clash with steps from other modules. + */ + static jsonID(e, n) { + if (e in Cd) + throw new RangeError("Duplicate use of step JSON ID " + e); + return Cd[e] = n, n.prototype.jsonID = e, n; + } +} +class At { + /** + @internal + */ + constructor(e, n) { + this.doc = e, this.failed = n; + } + /** + Create a successful step result. + */ + static ok(e) { + return new At(e, null); + } + /** + Create a failed step result. + */ + static fail(e) { + return new At(null, e); + } + /** + Call [`Node.replace`](https://prosemirror.net/docs/ref/#model.Node.replace) with the given + arguments. Create a successful result if it succeeds, and a + failed one if it throws a `ReplaceError`. + */ + static fromReplace(e, n, r, i) { + try { + return At.ok(e.replace(n, r, i)); + } catch (s) { + if (s instanceof Rc) + return At.fail(s.message); + throw s; + } + } +} +function a1(t, e, n) { + let r = []; + for (let i = 0; i < t.childCount; i++) { + let s = t.child(i); + s.content.size && (s = s.copy(a1(s.content, e, s))), s.isInline && (s = e(s, n, i)), r.push(s); + } + return re.fromArray(r); +} +class mi extends Zt { + /** + Create a mark step. + */ + constructor(e, n, r) { + super(), this.from = e, this.to = n, this.mark = r; + } + apply(e) { + let n = e.slice(this.from, this.to), r = e.resolve(this.from), i = r.node(r.sharedDepth(this.to)), s = new ae(a1(n.content, (o, l) => !o.isAtom || !l.type.allowsMarkType(this.mark.type) ? o : o.mark(this.mark.addToSet(o.marks)), i), n.openStart, n.openEnd); + return At.fromReplace(e, this.from, this.to, s); + } + invert() { + return new zr(this.from, this.to, this.mark); + } + map(e) { + let n = e.mapResult(this.from, 1), r = e.mapResult(this.to, -1); + return n.deleted && r.deleted || n.pos >= r.pos ? null : new mi(n.pos, r.pos, this.mark); + } + merge(e) { + return e instanceof mi && e.mark.eq(this.mark) && this.from <= e.to && this.to >= e.from ? new mi(Math.min(this.from, e.from), Math.max(this.to, e.to), this.mark) : null; + } + toJSON() { + return { + stepType: "addMark", + mark: this.mark.toJSON(), + from: this.from, + to: this.to + }; + } + /** + @internal + */ + static fromJSON(e, n) { + if (typeof n.from != "number" || typeof n.to != "number") + throw new RangeError("Invalid input for AddMarkStep.fromJSON"); + return new mi(n.from, n.to, e.markFromJSON(n.mark)); + } +} +Zt.jsonID("addMark", mi); +class zr extends Zt { + /** + Create a mark-removing step. + */ + constructor(e, n, r) { + super(), this.from = e, this.to = n, this.mark = r; + } + apply(e) { + let n = e.slice(this.from, this.to), r = new ae(a1(n.content, (i) => i.mark(this.mark.removeFromSet(i.marks)), e), n.openStart, n.openEnd); + return At.fromReplace(e, this.from, this.to, r); + } + invert() { + return new mi(this.from, this.to, this.mark); + } + map(e) { + let n = e.mapResult(this.from, 1), r = e.mapResult(this.to, -1); + return n.deleted && r.deleted || n.pos >= r.pos ? null : new zr(n.pos, r.pos, this.mark); + } + merge(e) { + return e instanceof zr && e.mark.eq(this.mark) && this.from <= e.to && this.to >= e.from ? new zr(Math.min(this.from, e.from), Math.max(this.to, e.to), this.mark) : null; + } + toJSON() { + return { + stepType: "removeMark", + mark: this.mark.toJSON(), + from: this.from, + to: this.to + }; + } + /** + @internal + */ + static fromJSON(e, n) { + if (typeof n.from != "number" || typeof n.to != "number") + throw new RangeError("Invalid input for RemoveMarkStep.fromJSON"); + return new zr(n.from, n.to, e.markFromJSON(n.mark)); + } +} +Zt.jsonID("removeMark", zr); +class Yi extends Zt { + /** + Create a node mark step. + */ + constructor(e, n) { + super(), this.pos = e, this.mark = n; + } + apply(e) { + let n = e.nodeAt(this.pos); + if (!n) + return At.fail("No node at mark step's position"); + let r = n.type.create(n.attrs, null, this.mark.addToSet(n.marks)); + return At.fromReplace(e, this.pos, this.pos + 1, new ae(re.from(r), 0, n.isLeaf ? 0 : 1)); + } + invert(e) { + let n = e.nodeAt(this.pos); + if (n) { + let r = this.mark.addToSet(n.marks); + if (r.length == n.marks.length) { + for (let i = 0; i < n.marks.length; i++) + if (!n.marks[i].isInSet(r)) + return new Yi(this.pos, n.marks[i]); + return new Yi(this.pos, this.mark); + } + } + return new fo(this.pos, this.mark); + } + map(e) { + let n = e.mapResult(this.pos, 1); + return n.deletedAfter ? null : new Yi(n.pos, this.mark); + } + toJSON() { + return { stepType: "addNodeMark", pos: this.pos, mark: this.mark.toJSON() }; + } + /** + @internal + */ + static fromJSON(e, n) { + if (typeof n.pos != "number") + throw new RangeError("Invalid input for AddNodeMarkStep.fromJSON"); + return new Yi(n.pos, e.markFromJSON(n.mark)); + } +} +Zt.jsonID("addNodeMark", Yi); +class fo extends Zt { + /** + Create a mark-removing step. + */ + constructor(e, n) { + super(), this.pos = e, this.mark = n; + } + apply(e) { + let n = e.nodeAt(this.pos); + if (!n) + return At.fail("No node at mark step's position"); + let r = n.type.create(n.attrs, null, this.mark.removeFromSet(n.marks)); + return At.fromReplace(e, this.pos, this.pos + 1, new ae(re.from(r), 0, n.isLeaf ? 0 : 1)); + } + invert(e) { + let n = e.nodeAt(this.pos); + return !n || !this.mark.isInSet(n.marks) ? this : new Yi(this.pos, this.mark); + } + map(e) { + let n = e.mapResult(this.pos, 1); + return n.deletedAfter ? null : new fo(n.pos, this.mark); + } + toJSON() { + return { stepType: "removeNodeMark", pos: this.pos, mark: this.mark.toJSON() }; + } + /** + @internal + */ + static fromJSON(e, n) { + if (typeof n.pos != "number") + throw new RangeError("Invalid input for RemoveNodeMarkStep.fromJSON"); + return new fo(n.pos, e.markFromJSON(n.mark)); + } +} +Zt.jsonID("removeNodeMark", fo); +class Ft extends Zt { + /** + The given `slice` should fit the 'gap' between `from` and + `to`—the depths must line up, and the surrounding nodes must be + able to be joined with the open sides of the slice. When + `structure` is true, the step will fail if the content between + from and to is not just a sequence of closing and then opening + tokens (this is to guard against rebased replace steps + overwriting something they weren't supposed to). + */ + constructor(e, n, r, i = !1) { + super(), this.from = e, this.to = n, this.slice = r, this.structure = i; + } + apply(e) { + return this.structure && Zf(e, this.from, this.to) ? At.fail("Structure replace would overwrite content") : At.fromReplace(e, this.from, this.to, this.slice); + } + getMap() { + return new Bn([this.from, this.to - this.from, this.slice.size]); + } + invert(e) { + return new Ft(this.from, this.from + this.slice.size, e.slice(this.from, this.to)); + } + map(e) { + let n = e.mapResult(this.from, 1), r = e.mapResult(this.to, -1); + return n.deletedAcross && r.deletedAcross ? null : new Ft(n.pos, Math.max(n.pos, r.pos), this.slice, this.structure); + } + merge(e) { + if (!(e instanceof Ft) || e.structure || this.structure) + return null; + if (this.from + this.slice.size == e.from && !this.slice.openEnd && !e.slice.openStart) { + let n = this.slice.size + e.slice.size == 0 ? ae.empty : new ae(this.slice.content.append(e.slice.content), this.slice.openStart, e.slice.openEnd); + return new Ft(this.from, this.to + (e.to - e.from), n, this.structure); + } else if (e.to == this.from && !this.slice.openStart && !e.slice.openEnd) { + let n = this.slice.size + e.slice.size == 0 ? ae.empty : new ae(e.slice.content.append(this.slice.content), e.slice.openStart, this.slice.openEnd); + return new Ft(e.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; + } + /** + @internal + */ + static fromJSON(e, n) { + if (typeof n.from != "number" || typeof n.to != "number") + throw new RangeError("Invalid input for ReplaceStep.fromJSON"); + return new Ft(n.from, n.to, ae.fromJSON(e, n.slice), !!n.structure); + } +} +Zt.jsonID("replace", Ft); +class Yt extends Zt { + /** + Create a replace-around step with the given range and gap. + `insert` should be the point in the slice into which the content + of the gap should be moved. `structure` has the same meaning as + it has in the [`ReplaceStep`](https://prosemirror.net/docs/ref/#transform.ReplaceStep) class. + */ + constructor(e, n, r, i, s, o, l = !1) { + super(), this.from = e, this.to = n, this.gapFrom = r, this.gapTo = i, this.slice = s, this.insert = o, this.structure = l; + } + apply(e) { + if (this.structure && (Zf(e, this.from, this.gapFrom) || Zf(e, this.gapTo, this.to))) + return At.fail("Structure gap-replace would overwrite content"); + let n = e.slice(this.gapFrom, this.gapTo); + if (n.openStart || n.openEnd) + return At.fail("Gap is not a flat range"); + let r = this.slice.insertAt(this.insert, n.content); + return r ? At.fromReplace(e, this.from, this.to, r) : At.fail("Content does not fit in gap"); + } + getMap() { + return new Bn([ + this.from, + this.gapFrom - this.from, + this.insert, + this.gapTo, + this.to - this.gapTo, + this.slice.size - this.insert + ]); + } + invert(e) { + let n = this.gapTo - this.gapFrom; + return new Yt(this.from, this.from + this.slice.size + n, this.from + this.insert, this.from + this.insert + n, e.slice(this.from, this.to).removeBetween(this.gapFrom - this.from, this.gapTo - this.from), this.gapFrom - this.from, this.structure); + } + map(e) { + let n = e.mapResult(this.from, 1), r = e.mapResult(this.to, -1), i = this.from == this.gapFrom ? n.pos : e.map(this.gapFrom, -1), s = this.to == this.gapTo ? r.pos : e.map(this.gapTo, 1); + return n.deletedAcross && r.deletedAcross || i < n.pos || s > r.pos ? null : new Yt(n.pos, r.pos, i, s, 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; + } + /** + @internal + */ + static fromJSON(e, n) { + if (typeof n.from != "number" || typeof n.to != "number" || typeof n.gapFrom != "number" || typeof n.gapTo != "number" || typeof n.insert != "number") + throw new RangeError("Invalid input for ReplaceAroundStep.fromJSON"); + return new Yt(n.from, n.to, n.gapFrom, n.gapTo, ae.fromJSON(e, n.slice), n.insert, !!n.structure); + } +} +Zt.jsonID("replaceAround", Yt); +function Zf(t, e, n) { + let r = t.resolve(e), i = n - e, s = r.depth; + for (; i > 0 && s > 0 && r.indexAfter(s) == r.node(s).childCount; ) + s--, i--; + if (i > 0) { + let o = r.node(s).maybeChild(r.indexAfter(s)); + for (; i > 0; ) { + if (!o || o.isLeaf) + return !0; + o = o.firstChild, i--; + } + } + return !1; +} +function mC(t, e, n, r) { + let i = [], s = [], o, l; + t.doc.nodesBetween(e, n, (a, u, c) => { + if (!a.isInline) + return; + let h = a.marks; + if (!r.isInSet(h) && c.type.allowsMarkType(r.type)) { + let d = Math.max(u, e), f = Math.min(u + a.nodeSize, n), m = r.addToSet(h); + for (let y = 0; y < h.length; y++) + h[y].isInSet(m) || (o && o.to == d && o.mark.eq(h[y]) ? o.to = f : i.push(o = new zr(d, f, h[y]))); + l && l.to == d ? l.to = f : s.push(l = new mi(d, f, r)); + } + }), i.forEach((a) => t.step(a)), s.forEach((a) => t.step(a)); +} +function gC(t, e, n, r) { + let i = [], s = 0; + t.doc.nodesBetween(e, n, (o, l) => { + if (!o.isInline) + return; + s++; + let a = null; + if (r instanceof kh) { + let u = o.marks, c; + for (; c = r.isInSet(u); ) + (a || (a = [])).push(c), u = c.removeFromSet(u); + } else r ? r.isInSet(o.marks) && (a = [r]) : a = o.marks; + if (a && a.length) { + let u = Math.min(l + o.nodeSize, n); + for (let c = 0; c < a.length; c++) { + let h = a[c], d; + for (let f = 0; f < i.length; f++) { + let m = i[f]; + m.step == s - 1 && h.eq(i[f].style) && (d = m); + } + d ? (d.to = u, d.step = s) : i.push({ style: h, from: Math.max(l, e), to: u, step: s }); + } + } + }), i.forEach((o) => t.step(new zr(o.from, o.to, o.style))); +} +function u1(t, e, n, r = n.contentMatch, i = !0) { + let s = t.doc.nodeAt(e), o = [], l = e + 1; + for (let a = 0; a < s.childCount; a++) { + let u = s.child(a), c = l + u.nodeSize, h = r.matchType(u.type); + if (!h) + o.push(new Ft(l, c, ae.empty)); + else { + r = h; + for (let d = 0; d < u.marks.length; d++) + n.allowsMarkType(u.marks[d].type) || t.step(new zr(l, c, u.marks[d])); + if (i && u.isText && n.whitespace != "pre") { + let d, f = /\r?\n|\r/g, m; + for (; d = f.exec(u.text); ) + m || (m = new ae(re.from(n.schema.text(" ", n.allowedMarks(u.marks))), 0, 0)), o.push(new Ft(l + d.index, l + d.index + d[0].length, m)); + } + } + l = c; + } + if (!r.validEnd) { + let a = r.fillBefore(re.empty, !0); + t.replace(l, l, new ae(a, 0, 0)); + } + for (let a = o.length - 1; a >= 0; a--) + t.step(o[a]); +} +function yC(t, e, n) { + return (e == 0 || t.canReplace(e, t.childCount)) && (n == t.childCount || t.canReplace(0, n)); +} +function Mh(t) { + let n = t.parent.content.cutByIndex(t.startIndex, t.endIndex); + for (let r = t.depth, i = 0, s = 0; ; --r) { + let o = t.$from.node(r), l = t.$from.index(r) + i, a = t.$to.indexAfter(r) - s; + if (r < t.depth && o.canReplace(l, a, n)) + return r; + if (r == 0 || o.type.spec.isolating || !yC(o, l, a)) + break; + l && (i = 1), a < o.childCount && (s = 1); + } + return null; +} +function vC(t, e, n) { + let { $from: r, $to: i, depth: s } = e, o = r.before(s + 1), l = i.after(s + 1), a = o, u = l, c = re.empty, h = 0; + for (let m = s, y = !1; m > n; m--) + y || r.index(m) > 0 ? (y = !0, c = re.from(r.node(m).copy(c)), h++) : a--; + let d = re.empty, f = 0; + for (let m = s, y = !1; m > n; m--) + y || i.after(m + 1) < i.end(m) ? (y = !0, d = re.from(i.node(m).copy(d)), f++) : u++; + t.step(new Yt(a, u, o, l, new ae(c.append(d), h, f), c.size - h, !0)); +} +function c1(t, e, n = null, r = t) { + let i = bC(t, e), s = i && wC(r, e); + return s ? i.map(x2).concat({ type: e, attrs: n }).concat(s.map(x2)) : null; +} +function x2(t) { + return { type: t, attrs: null }; +} +function bC(t, e) { + let { parent: n, startIndex: r, endIndex: i } = t, s = n.contentMatchAt(r).findWrapping(e); + if (!s) + return null; + let o = s.length ? s[0] : e; + return n.canReplaceWith(r, i, o) ? s : null; +} +function wC(t, e) { + let { parent: n, startIndex: r, endIndex: i } = t, s = n.child(r), o = e.contentMatch.findWrapping(s.type); + if (!o) + return null; + let a = (o.length ? o[o.length - 1] : e).contentMatch; + for (let u = r; a && u < i; u++) + a = a.matchType(n.child(u).type); + return !a || !a.validEnd ? null : o; +} +function kC(t, e, n) { + let r = re.empty; + for (let o = n.length - 1; o >= 0; o--) { + if (r.size) { + let l = n[o].type.contentMatch.matchFragment(r); + if (!l || !l.validEnd) + throw new RangeError("Wrapper type given to Transform.wrap does not form valid content of its parent wrapper"); + } + r = re.from(n[o].type.create(n[o].attrs, r)); + } + let i = e.start, s = e.end; + t.step(new Yt(i, s, i, s, new ae(r, 0, 0), n.length, !0)); +} +function xC(t, e, n, r, i) { + if (!r.isTextblock) + throw new RangeError("Type given to setBlockType should be a textblock"); + let s = t.steps.length; + t.doc.nodesBetween(e, n, (o, l) => { + let a = typeof i == "function" ? i(o) : i; + if (o.isTextblock && !o.hasMarkup(r, a) && SC(t.doc, t.mapping.slice(s).map(l), r)) { + let u = null; + if (r.schema.linebreakReplacement) { + let f = r.whitespace == "pre", m = !!r.contentMatch.matchType(r.schema.linebreakReplacement); + f && !m ? u = !1 : !f && m && (u = !0); + } + u === !1 && C6(t, o, l, s), u1(t, t.mapping.slice(s).map(l, 1), r, void 0, u === null); + let c = t.mapping.slice(s), h = c.map(l, 1), d = c.map(l + o.nodeSize, 1); + return t.step(new Yt(h, d, h + 1, d - 1, new ae(re.from(r.create(a, null, o.marks)), 0, 0), 1, !0)), u === !0 && S6(t, o, l, s), !1; + } + }); +} +function S6(t, e, n, r) { + e.forEach((i, s) => { + if (i.isText) { + let o, l = /\r?\n|\r/g; + for (; o = l.exec(i.text); ) { + let a = t.mapping.slice(r).map(n + 1 + s + o.index); + t.replaceWith(a, a + 1, e.type.schema.linebreakReplacement.create()); + } + } + }); +} +function C6(t, e, n, r) { + e.forEach((i, s) => { + if (i.type == i.type.schema.linebreakReplacement) { + let o = t.mapping.slice(r).map(n + 1 + s); + t.replaceWith(o, o + 1, e.type.schema.text(` +`)); + } + }); +} +function SC(t, e, n) { + let r = t.resolve(e), i = r.index(); + return r.parent.canReplaceWith(i, i + 1, n); +} +function CC(t, e, n, r, i) { + let s = t.doc.nodeAt(e); + if (!s) + throw new RangeError("No node at given position"); + n || (n = s.type); + let o = n.create(r, null, i || s.marks); + if (s.isLeaf) + return t.replaceWith(e, e + s.nodeSize, o); + if (!n.validContent(s.content)) + throw new RangeError("Invalid content for node type " + n.name); + t.step(new Yt(e, e + s.nodeSize, e + 1, e + s.nodeSize - 1, new ae(re.from(o), 0, 0), 1, !0)); +} +function _a(t, e, n = 1, r) { + let i = t.resolve(e), s = i.depth - n, o = r && r[r.length - 1] || i.parent; + if (s < 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 u = i.depth - 1, c = n - 2; u > s; u--, c--) { + let h = i.node(u), d = i.index(u); + if (h.type.spec.isolating) + return !1; + let f = h.content.cutByIndex(d, h.childCount), m = r && r[c + 1]; + m && (f = f.replaceChild(0, m.type.create(m.attrs))); + let y = r && r[c] || h; + if (!h.canReplace(d + 1, h.childCount) || !y.type.validContent(f)) + return !1; + } + let l = i.indexAfter(s), a = r && r[0]; + return i.node(s).canReplaceWith(l, l, a ? a.type : i.node(s + 1).type); +} +function NC(t, e, n = 1, r) { + let i = t.doc.resolve(e), s = re.empty, o = re.empty; + for (let l = i.depth, a = i.depth - n, u = n - 1; l > a; l--, u--) { + s = re.from(i.node(l).copy(s)); + let c = r && r[u]; + o = re.from(c ? c.type.create(c.attrs, o) : i.node(l).copy(o)); + } + t.step(new Ft(e, e, new ae(s.append(o), n, n), !0)); +} +function Th(t, e) { + let n = t.resolve(e), r = n.index(); + return TC(n.nodeBefore, n.nodeAfter) && n.parent.canReplace(r, r + 1); +} +function MC(t, e) { + e.content.size || t.type.compatibleContent(e.type); + let n = t.contentMatchAt(t.childCount), { linebreakReplacement: r } = t.type.schema; + for (let i = 0; i < e.childCount; i++) { + let s = e.child(i), o = s.type == r ? t.type.schema.nodes.text : s.type; + if (n = n.matchType(o), !n || !t.type.allowsMarks(s.marks)) + return !1; + } + return n.validEnd; +} +function TC(t, e) { + return !!(t && e && !t.isLeaf && MC(t, e)); +} +function EC(t, e, n) { + let r = null, { linebreakReplacement: i } = t.doc.type.schema, s = t.doc.resolve(e - n), o = s.node().type; + if (i && o.inlineContent) { + let c = o.whitespace == "pre", h = !!o.contentMatch.matchType(i); + c && !h ? r = !1 : !c && h && (r = !0); + } + let l = t.steps.length; + if (r === !1) { + let c = t.doc.resolve(e + n); + C6(t, c.node(), c.before(), l); + } + o.inlineContent && u1(t, e + n - 1, o, s.node().contentMatchAt(s.index()), r == null); + let a = t.mapping.slice(l), u = a.map(e - n); + if (t.step(new Ft(u, a.map(e + n, -1), ae.empty, !0)), r === !0) { + let c = t.doc.resolve(u); + S6(t, c.node(), c.before(), t.steps.length); + } + return t; +} +function OC(t, e, n) { + let r = t.resolve(e); + if (r.parent.canReplaceWith(r.index(), r.index(), n)) + return e; + if (r.parentOffset == 0) + for (let i = r.depth - 1; i >= 0; i--) { + let s = r.index(i); + if (r.node(i).canReplaceWith(s, s, n)) + return r.before(i + 1); + if (s > 0) + return null; + } + if (r.parentOffset == r.parent.content.size) + for (let i = r.depth - 1; i >= 0; i--) { + let s = r.indexAfter(i); + if (r.node(i).canReplaceWith(s, s, n)) + return r.after(i + 1); + if (s < r.node(i).childCount) + return null; + } + return null; +} +function AC(t, e, n) { + let r = t.resolve(e); + if (!n.content.size) + return e; + let i = n.content; + for (let s = 0; s < n.openStart; s++) + i = i.firstChild.content; + for (let s = 1; s <= (n.openStart == 0 && n.size ? 2 : 1); s++) + for (let o = r.depth; o >= 0; o--) { + let l = o == r.depth ? 0 : r.pos <= (r.start(o + 1) + r.end(o + 1)) / 2 ? -1 : 1, a = r.index(o) + (l > 0 ? 1 : 0), u = r.node(o), c = !1; + if (s == 1) + c = u.canReplace(a, a, i); + else { + let h = u.contentMatchAt(a).findWrapping(i.firstChild.type); + c = h && u.canReplaceWith(a, a, h[0]); + } + if (c) + return l == 0 ? r.pos : l < 0 ? r.before(o + 1) : r.after(o + 1); + } + return null; +} +function Eh(t, e, n = e, r = ae.empty) { + if (e == n && !r.size) + return null; + let i = t.resolve(e), s = t.resolve(n); + return N6(i, s, r) ? new Ft(e, n, r) : new IC(i, s, r).fit(); +} +function N6(t, e, n) { + return !n.openStart && !n.openEnd && t.start() == e.start() && t.parent.canReplace(t.index(), e.index(), n.content); +} +class IC { + constructor(e, n, r) { + this.$from = e, this.$to = n, this.unplaced = r, this.frontier = [], this.placed = re.empty; + for (let i = 0; i <= e.depth; i++) { + let s = e.node(i); + this.frontier.push({ + type: s.type, + match: s.contentMatchAt(e.indexAfter(i)) + }); + } + for (let i = e.depth; i > 0; i--) + this.placed = re.from(e.node(i).copy(this.placed)); + } + get depth() { + return this.frontier.length - 1; + } + fit() { + for (; this.unplaced.size; ) { + let u = this.findFittable(); + u ? this.placeNodes(u) : this.openMore() || this.dropNode(); + } + let e = this.mustMoveInline(), n = this.placed.size - this.depth - this.$from.depth, r = this.$from, i = this.close(e < 0 ? this.$to : r.doc.resolve(e)); + if (!i) + return null; + let s = this.placed, o = r.depth, l = i.depth; + for (; o && l && s.childCount == 1; ) + s = s.firstChild.content, o--, l--; + let a = new ae(s, o, l); + return e > -1 ? new Yt(r.pos, e, this.$to.pos, this.$to.end(), a, n) : a.size || r.pos != this.$to.pos ? new Ft(r.pos, i.pos, a) : null; + } + // Find a position on the start spine of `this.unplaced` that has + // content that can be moved somewhere on the frontier. Returns two + // depths, one for the slice and one for the frontier. + findFittable() { + let e = this.unplaced.openStart; + for (let n = this.unplaced.content, r = 0, i = this.unplaced.openEnd; r < e; r++) { + let s = n.firstChild; + if (n.childCount > 1 && (i = 0), s.type.spec.isolating && i <= r) { + e = r; + break; + } + n = s.content; + } + for (let n = 1; n <= 2; n++) + for (let r = n == 1 ? e : this.unplaced.openStart; r >= 0; r--) { + let i, s = null; + r ? (s = Nd(this.unplaced.content, r - 1).firstChild, i = s.content) : i = this.unplaced.content; + let o = i.firstChild; + for (let l = this.depth; l >= 0; l--) { + let { type: a, match: u } = this.frontier[l], c, h = null; + if (n == 1 && (o ? u.matchType(o.type) || (h = u.fillBefore(re.from(o), !1)) : s && a.compatibleContent(s.type))) + return { sliceDepth: r, frontierDepth: l, parent: s, inject: h }; + if (n == 2 && o && (c = u.findWrapping(o.type))) + return { sliceDepth: r, frontierDepth: l, parent: s, wrap: c }; + if (s && u.matchType(s.type)) + break; + } + } + } + openMore() { + let { content: e, openStart: n, openEnd: r } = this.unplaced, i = Nd(e, n); + return !i.childCount || i.firstChild.isLeaf ? !1 : (this.unplaced = new ae(e, n + 1, Math.max(r, i.size + n >= e.size - r ? n + 1 : 0)), !0); + } + dropNode() { + let { content: e, openStart: n, openEnd: r } = this.unplaced, i = Nd(e, n); + if (i.childCount <= 1 && n > 0) { + let s = e.size - n <= n + i.size; + this.unplaced = new ae(ma(e, n - 1, 1), n - 1, s ? n - 1 : r); + } else + this.unplaced = new ae(ma(e, n, 1), n, r); + } + // Move content from the unplaced slice at `sliceDepth` to the + // frontier node at `frontierDepth`. Close that frontier node when + // applicable. + placeNodes({ sliceDepth: e, frontierDepth: n, parent: r, inject: i, wrap: s }) { + for (; this.depth > n; ) + this.closeFrontierNode(); + if (s) + for (let y = 0; y < s.length; y++) + this.openFrontierNode(s[y]); + let o = this.unplaced, l = r ? r.content : o.content, a = o.openStart - e, u = 0, c = [], { match: h, type: d } = this.frontier[n]; + if (i) { + for (let y = 0; y < i.childCount; y++) + c.push(i.child(y)); + h = h.matchFragment(i); + } + let f = l.size + e - (o.content.size - o.openEnd); + for (; u < l.childCount; ) { + let y = l.child(u), b = h.matchType(y.type); + if (!b) + break; + u++, (u > 1 || a == 0 || y.content.size) && (h = b, c.push(M6(y.mark(d.allowedMarks(y.marks)), u == 1 ? a : 0, u == l.childCount ? f : -1))); + } + let m = u == l.childCount; + m || (f = -1), this.placed = ga(this.placed, n, re.from(c)), this.frontier[n].match = h, m && f < 0 && r && r.type == this.frontier[this.depth].type && this.frontier.length > 1 && this.closeFrontierNode(); + for (let y = 0, b = l; y < f; y++) { + let w = b.lastChild; + this.frontier.push({ type: w.type, match: w.contentMatchAt(w.childCount) }), b = w.content; + } + this.unplaced = m ? e == 0 ? ae.empty : new ae(ma(o.content, e - 1, 1), e - 1, f < 0 ? o.openEnd : e - 1) : new ae(ma(o.content, e, u), o.openStart, o.openEnd); + } + mustMoveInline() { + if (!this.$to.parent.isTextblock) + return -1; + let e = this.frontier[this.depth], n; + if (!e.type.isTextblock || !Md(this.$to, this.$to.depth, e.type, e.match, !1) || this.$to.depth == this.depth && (n = this.findCloseLevel(this.$to)) && n.depth == this.depth) + return -1; + let { depth: r } = this.$to, i = this.$to.after(r); + for (; r > 1 && i == this.$to.end(--r); ) + ++i; + return i; + } + findCloseLevel(e) { + e: for (let n = Math.min(this.depth, e.depth); n >= 0; n--) { + let { match: r, type: i } = this.frontier[n], s = n < e.depth && e.end(n + 1) == e.pos + (e.depth - (n + 1)), o = Md(e, n, i, r, s); + if (o) { + for (let l = n - 1; l >= 0; l--) { + let { match: a, type: u } = this.frontier[l], c = Md(e, l, u, a, !0); + if (!c || c.childCount) + continue e; + } + return { depth: n, fit: o, move: s ? e.doc.resolve(e.after(n + 1)) : e }; + } + } + } + close(e) { + let n = this.findCloseLevel(e); + if (!n) + return null; + for (; this.depth > n.depth; ) + this.closeFrontierNode(); + n.fit.childCount && (this.placed = ga(this.placed, n.depth, n.fit)), e = n.move; + for (let r = n.depth + 1; r <= e.depth; r++) { + let i = e.node(r), s = i.type.contentMatch.fillBefore(i.content, !0, e.index(r)); + this.openFrontierNode(i.type, i.attrs, s); + } + return e; + } + openFrontierNode(e, n = null, r) { + let i = this.frontier[this.depth]; + i.match = i.match.matchType(e), this.placed = ga(this.placed, this.depth, re.from(e.create(n, r))), this.frontier.push({ type: e, match: e.contentMatch }); + } + closeFrontierNode() { + let n = this.frontier.pop().match.fillBefore(re.empty, !0); + n.childCount && (this.placed = ga(this.placed, this.frontier.length, n)); + } +} +function ma(t, e, n) { + return e == 0 ? t.cutByIndex(n, t.childCount) : t.replaceChild(0, t.firstChild.copy(ma(t.firstChild.content, e - 1, n))); +} +function ga(t, e, n) { + return e == 0 ? t.append(n) : t.replaceChild(t.childCount - 1, t.lastChild.copy(ga(t.lastChild.content, e - 1, n))); +} +function Nd(t, e) { + for (let n = 0; n < e; n++) + t = t.firstChild.content; + return t; +} +function M6(t, e, n) { + if (e <= 0) + return t; + let r = t.content; + return e > 1 && (r = r.replaceChild(0, M6(r.firstChild, e - 1, r.childCount == 1 ? n - 1 : 0))), e > 0 && (r = t.type.contentMatch.fillBefore(r).append(r), n <= 0 && (r = r.append(t.type.contentMatch.matchFragment(r).fillBefore(re.empty, !0)))), t.copy(r); +} +function Md(t, e, n, r, i) { + let s = t.node(e), o = i ? t.indexAfter(e) : t.index(e); + if (o == s.childCount && !n.compatibleContent(s.type)) + return null; + let l = r.fillBefore(s.content, !0, o); + return l && !DC(n, s.content, o) ? l : null; +} +function DC(t, e, n) { + for (let r = n; r < e.childCount; r++) + if (!t.allowsMarks(e.child(r).marks)) + return !0; + return !1; +} +function _C(t) { + return t.spec.defining || t.spec.definingForContent; +} +function RC(t, e, n, r) { + if (!r.size) + return t.deleteRange(e, n); + let i = t.doc.resolve(e), s = t.doc.resolve(n); + if (N6(i, s, r)) + return t.step(new Ft(e, n, r)); + let o = E6(i, s); + o[o.length - 1] == 0 && o.pop(); + let l = -(i.depth + 1); + o.unshift(l); + for (let d = i.depth, f = i.pos - 1; d > 0; d--, f--) { + let m = i.node(d).type.spec; + if (m.defining || m.definingAsContext || m.isolating) + break; + o.indexOf(d) > -1 ? l = d : i.before(d) == f && o.splice(1, 0, -d); + } + let a = o.indexOf(l), u = [], c = r.openStart; + for (let d = r.content, f = 0; ; f++) { + let m = d.firstChild; + if (u.push(m), f == r.openStart) + break; + d = m.content; + } + for (let d = c - 1; d >= 0; d--) { + let f = u[d], m = _C(f.type); + if (m && !f.sameMarkup(i.node(Math.abs(l) - 1))) + c = d; + else if (m || !f.type.isTextblock) + break; + } + for (let d = r.openStart; d >= 0; d--) { + let f = (d + c + 1) % (r.openStart + 1), m = u[f]; + if (m) + for (let y = 0; y < o.length; y++) { + let b = o[(y + a) % o.length], w = !0; + b < 0 && (w = !1, b = -b); + let C = i.node(b - 1), N = i.index(b - 1); + if (C.canReplaceWith(N, N, m.type, m.marks)) + return t.replace(i.before(b), w ? s.after(b) : n, new ae(T6(r.content, 0, r.openStart, f), f, r.openEnd)); + } + } + let h = t.steps.length; + for (let d = o.length - 1; d >= 0 && (t.replace(e, n, r), !(t.steps.length > h)); d--) { + let f = o[d]; + f < 0 || (e = i.before(f), n = s.after(f)); + } +} +function T6(t, e, n, r, i) { + if (e < n) { + let s = t.firstChild; + t = t.replaceChild(0, s.copy(T6(s.content, e + 1, n, r, s))); + } + if (e > r) { + let s = i.contentMatchAt(0), o = s.fillBefore(t).append(t); + t = o.append(s.matchFragment(o).fillBefore(re.empty, !0)); + } + return t; +} +function zC(t, e, n, r) { + if (!r.isInline && e == n && t.doc.resolve(e).parent.content.size) { + let i = OC(t.doc, e, r.type); + i != null && (e = n = i); + } + t.replaceRange(e, n, new ae(re.from(r), 0, 0)); +} +function PC(t, e, n) { + let r = t.doc.resolve(e), i = t.doc.resolve(n), s = E6(r, i); + for (let o = 0; o < s.length; o++) { + let l = s[o], a = o == s.length - 1; + if (a && l == 0 || r.node(l).type.contentMatch.validEnd) + return t.delete(r.start(l), i.end(l)); + if (l > 0 && (a || r.node(l - 1).canReplace(r.index(l - 1), i.indexAfter(l - 1)))) + return t.delete(r.before(l), i.after(l)); + } + for (let o = 1; o <= r.depth && o <= i.depth; o++) + if (e - r.start(o) == r.depth - o && n > r.end(o) && i.end(o) - n != i.depth - o && r.start(o - 1) == i.start(o - 1) && r.node(o - 1).canReplace(r.index(o - 1), i.index(o - 1))) + return t.delete(r.before(o), n); + t.delete(e, n); +} +function E6(t, e) { + let n = [], r = Math.min(t.depth, e.depth); + for (let i = r; i >= 0; i--) { + let s = t.start(i); + if (s < t.pos - (t.depth - i) || e.end(i) > e.pos + (e.depth - i) || t.node(i).type.spec.isolating || e.node(i).type.spec.isolating) + break; + (s == e.start(i) || i == t.depth && i == e.depth && t.parent.inlineContent && e.parent.inlineContent && i && e.start(i - 1) == s - 1) && n.push(i); + } + return n; +} +class Uo extends Zt { + /** + Construct an attribute step. + */ + constructor(e, n, r) { + super(), this.pos = e, this.attr = n, this.value = r; + } + apply(e) { + let n = e.nodeAt(this.pos); + if (!n) + return At.fail("No node at attribute step's position"); + let r = /* @__PURE__ */ Object.create(null); + for (let s in n.attrs) + r[s] = n.attrs[s]; + r[this.attr] = this.value; + let i = n.type.create(r, null, n.marks); + return At.fromReplace(e, this.pos, this.pos + 1, new ae(re.from(i), 0, n.isLeaf ? 0 : 1)); + } + getMap() { + return Bn.empty; + } + invert(e) { + return new Uo(this.pos, this.attr, e.nodeAt(this.pos).attrs[this.attr]); + } + map(e) { + let n = e.mapResult(this.pos, 1); + return n.deletedAfter ? null : new Uo(n.pos, this.attr, this.value); + } + toJSON() { + return { stepType: "attr", pos: this.pos, attr: this.attr, value: this.value }; + } + static fromJSON(e, n) { + if (typeof n.pos != "number" || typeof n.attr != "string") + throw new RangeError("Invalid input for AttrStep.fromJSON"); + return new Uo(n.pos, n.attr, n.value); + } +} +Zt.jsonID("attr", Uo); +class r0 extends Zt { + /** + Construct an attribute step. + */ + constructor(e, n) { + super(), this.attr = e, this.value = n; + } + apply(e) { + let n = /* @__PURE__ */ Object.create(null); + for (let i in e.attrs) + n[i] = e.attrs[i]; + n[this.attr] = this.value; + let r = e.type.create(n, e.content, e.marks); + return At.ok(r); + } + getMap() { + return Bn.empty; + } + invert(e) { + return new r0(this.attr, e.attrs[this.attr]); + } + map(e) { + return this; + } + toJSON() { + return { stepType: "docAttr", attr: this.attr, value: this.value }; + } + static fromJSON(e, n) { + if (typeof n.attr != "string") + throw new RangeError("Invalid input for DocAttrStep.fromJSON"); + return new r0(n.attr, n.value); + } +} +Zt.jsonID("docAttr", r0); +let El = class extends Error { +}; +El = function t(e) { + let n = Error.call(this, e); + return n.__proto__ = t.prototype, n; +}; +El.prototype = Object.create(Error.prototype); +El.prototype.constructor = El; +El.prototype.name = "TransformError"; +class O6 { + /** + Create a transform that starts with the given document. + */ + constructor(e) { + this.doc = e, this.steps = [], this.docs = [], this.mapping = new n0(); + } + /** + The starting document. + */ + get before() { + return this.docs.length ? this.docs[0] : this.doc; + } + /** + Apply a new step in this transform, saving the result. Throws an + error when the step fails. + */ + step(e) { + let n = this.maybeStep(e); + if (n.failed) + throw new El(n.failed); + return this; + } + /** + Try to apply a step in this transformation, ignoring it if it + fails. Returns the step result. + */ + maybeStep(e) { + let n = e.apply(this.doc); + return n.failed || this.addStep(e, n.doc), n; + } + /** + True when the document has been changed (when there are any + steps). + */ + get docChanged() { + return this.steps.length > 0; + } + /** + @internal + */ + addStep(e, n) { + this.docs.push(this.doc), this.steps.push(e), this.mapping.appendMap(e.getMap()), this.doc = n; + } + /** + Replace the part of the document between `from` and `to` with the + given `slice`. + */ + replace(e, n = e, r = ae.empty) { + let i = Eh(this.doc, e, n, r); + return i && this.step(i), this; + } + /** + Replace the given range with the given content, which may be a + fragment, node, or array of nodes. + */ + replaceWith(e, n, r) { + return this.replace(e, n, new ae(re.from(r), 0, 0)); + } + /** + Delete the content between the given positions. + */ + delete(e, n) { + return this.replace(e, n, ae.empty); + } + /** + Insert the given content at the given position. + */ + insert(e, n) { + return this.replaceWith(e, e, n); + } + /** + Replace a range of the document with a given slice, using + `from`, `to`, and the slice's + [`openStart`](https://prosemirror.net/docs/ref/#model.Slice.openStart) property as hints, rather + than fixed start and end points. This method may grow the + replaced area or close open nodes in the slice in order to get a + fit that is more in line with WYSIWYG expectations, by dropping + fully covered parent nodes of the replaced region when they are + marked [non-defining as + context](https://prosemirror.net/docs/ref/#model.NodeSpec.definingAsContext), or including an + open parent node from the slice that _is_ marked as [defining + its content](https://prosemirror.net/docs/ref/#model.NodeSpec.definingForContent). + + This is the method, for example, to handle paste. The similar + [`replace`](https://prosemirror.net/docs/ref/#transform.Transform.replace) method is a more + primitive tool which will _not_ move the start and end of its given + range, and is useful in situations where you need more precise + control over what happens. + */ + replaceRange(e, n, r) { + return RC(this, e, n, r), this; + } + /** + Replace the given range with a node, but use `from` and `to` as + hints, rather than precise positions. When from and to are the same + and are at the start or end of a parent node in which the given + node doesn't fit, this method may _move_ them out towards a parent + that does allow the given node to be placed. When the given range + completely covers a parent node, this method may completely replace + that parent node. + */ + replaceRangeWith(e, n, r) { + return zC(this, e, n, r), this; + } + /** + Delete the given range, expanding it to cover fully covered + parent nodes until a valid replace is found. + */ + deleteRange(e, n) { + return PC(this, e, n), this; + } + /** + Split the content in the given range off from its parent, if there + is sibling content before or after it, and move it up the tree to + the depth specified by `target`. You'll probably want to use + [`liftTarget`](https://prosemirror.net/docs/ref/#transform.liftTarget) to compute `target`, to make + sure the lift is valid. + */ + lift(e, n) { + return vC(this, e, n), this; + } + /** + Join the blocks around the given position. If depth is 2, their + last and first siblings are also joined, and so on. + */ + join(e, n = 1) { + return EC(this, e, n), this; + } + /** + Wrap the given [range](https://prosemirror.net/docs/ref/#model.NodeRange) in the given set of wrappers. + The wrappers are assumed to be valid in this position, and should + probably be computed with [`findWrapping`](https://prosemirror.net/docs/ref/#transform.findWrapping). + */ + wrap(e, n) { + return kC(this, e, n), this; + } + /** + Set the type of all textblocks (partly) between `from` and `to` to + the given node type with the given attributes. + */ + setBlockType(e, n = e, r, i = null) { + return xC(this, e, n, r, i), this; + } + /** + Change the type, attributes, and/or marks of the node at `pos`. + When `type` isn't given, the existing node type is preserved, + */ + setNodeMarkup(e, n, r = null, i) { + return CC(this, e, n, r, i), this; + } + /** + Set a single attribute on a given node to a new value. + The `pos` addresses the document content. Use `setDocAttribute` + to set attributes on the document itself. + */ + setNodeAttribute(e, n, r) { + return this.step(new Uo(e, n, r)), this; + } + /** + Set a single attribute on the document to a new value. + */ + setDocAttribute(e, n) { + return this.step(new r0(e, n)), this; + } + /** + Add a mark to the node at position `pos`. + */ + addNodeMark(e, n) { + return this.step(new Yi(e, n)), this; + } + /** + Remove a mark (or all marks of the given type) from the node at + position `pos`. + */ + removeNodeMark(e, n) { + let r = this.doc.nodeAt(e); + if (!r) + throw new RangeError("No node at position " + e); + if (n instanceof qe) + n.isInSet(r.marks) && this.step(new fo(e, n)); + else { + let i = r.marks, s, o = []; + for (; s = n.isInSet(i); ) + o.push(new fo(e, s)), i = s.removeFromSet(i); + for (let l = o.length - 1; l >= 0; l--) + this.step(o[l]); + } + return this; + } + /** + Split the node at the given position, and optionally, if `depth` is + greater than one, any number of nodes above that. By default, the + parts split off will inherit the node type of the original node. + This can be changed by passing an array of types and attributes to + use after the split (with the outermost nodes coming first). + */ + split(e, n = 1, r) { + return NC(this, e, n, r), this; + } + /** + Add the given mark to the inline content between `from` and `to`. + */ + addMark(e, n, r) { + return mC(this, e, n, r), this; + } + /** + Remove marks from inline nodes between `from` and `to`. When + `mark` is a single mark, remove precisely that mark. When it is + a mark type, remove all marks of that type. When it is null, + remove all marks of any type. + */ + removeMark(e, n, r) { + return gC(this, e, n, r), this; + } + /** + Removes all marks and nodes from the content of the node at + `pos` that don't match the given new parent node type. Accepts + an optional starting [content match](https://prosemirror.net/docs/ref/#model.ContentMatch) as + third argument. + */ + clearIncompatible(e, n, r) { + return u1(this, e, n, r), this; + } +} +const Td = /* @__PURE__ */ Object.create(null); +class Pe { + /** + Initialize a selection with the head and anchor and ranges. If no + ranges are given, constructs a single range across `$anchor` and + `$head`. + */ + constructor(e, n, r) { + this.$anchor = e, this.$head = n, this.ranges = r || [new A6(e.min(n), e.max(n))]; + } + /** + The selection's anchor, as an unresolved position. + */ + get anchor() { + return this.$anchor.pos; + } + /** + The selection's head. + */ + get head() { + return this.$head.pos; + } + /** + The lower bound of the selection's main range. + */ + get from() { + return this.$from.pos; + } + /** + The upper bound of the selection's main range. + */ + get to() { + return this.$to.pos; + } + /** + The resolved lower bound of the selection's main range. + */ + get $from() { + return this.ranges[0].$from; + } + /** + The resolved upper bound of the selection's main range. + */ + get $to() { + return this.ranges[0].$to; + } + /** + Indicates whether the selection contains any content. + */ + get empty() { + let e = this.ranges; + for (let n = 0; n < e.length; n++) + if (e[n].$from.pos != e[n].$to.pos) + return !1; + return !0; + } + /** + Get the content of this selection as a slice. + */ + content() { + return this.$from.doc.slice(this.from, this.to, !0); + } + /** + Replace the selection with a slice or, if no slice is given, + delete the selection. Will append to the given transaction. + */ + replace(e, n = ae.empty) { + let r = n.content.lastChild, i = null; + for (let l = 0; l < n.openEnd; l++) + i = r, r = r.lastChild; + let s = e.steps.length, o = this.ranges; + for (let l = 0; l < o.length; l++) { + let { $from: a, $to: u } = o[l], c = e.mapping.slice(s); + e.replaceRange(c.map(a.pos), c.map(u.pos), l ? ae.empty : n), l == 0 && N2(e, s, (r ? r.isInline : i && i.isTextblock) ? -1 : 1); + } + } + /** + Replace the selection with the given node, appending the changes + to the given transaction. + */ + replaceWith(e, n) { + let r = e.steps.length, i = this.ranges; + for (let s = 0; s < i.length; s++) { + let { $from: o, $to: l } = i[s], a = e.mapping.slice(r), u = a.map(o.pos), c = a.map(l.pos); + s ? e.deleteRange(u, c) : (e.replaceRangeWith(u, c, n), N2(e, r, n.isInline ? -1 : 1)); + } + } + /** + Find a valid cursor or leaf node selection starting at the given + position and searching back if `dir` is negative, and forward if + positive. When `textOnly` is true, only consider cursor + selections. Will return null when no valid selection position is + found. + */ + static findFrom(e, n, r = !1) { + let i = e.parent.inlineContent ? new Ce(e) : zo(e.node(0), e.parent, e.pos, e.index(), n, r); + if (i) + return i; + for (let s = e.depth - 1; s >= 0; s--) { + let o = n < 0 ? zo(e.node(0), e.node(s), e.before(s + 1), e.index(s), n, r) : zo(e.node(0), e.node(s), e.after(s + 1), e.index(s) + 1, n, r); + if (o) + return o; + } + return null; + } + /** + Find a valid cursor or leaf node selection near the given + position. Searches forward first by default, but if `bias` is + negative, it will search backwards first. + */ + static near(e, n = 1) { + return this.findFrom(e, n) || this.findFrom(e, -n) || new Sn(e.node(0)); + } + /** + Find the cursor or leaf node selection closest to the start of + the given document. Will return an + [`AllSelection`](https://prosemirror.net/docs/ref/#state.AllSelection) if no valid position + exists. + */ + static atStart(e) { + return zo(e, e, 0, 0, 1) || new Sn(e); + } + /** + Find the cursor or leaf node selection closest to the end of the + given document. + */ + static atEnd(e) { + return zo(e, e, e.content.size, e.childCount, -1) || new Sn(e); + } + /** + Deserialize the JSON representation of a selection. Must be + implemented for custom classes (as a static class method). + */ + static fromJSON(e, n) { + if (!n || !n.type) + throw new RangeError("Invalid input for Selection.fromJSON"); + let r = Td[n.type]; + if (!r) + throw new RangeError(`No selection type ${n.type} defined`); + return r.fromJSON(e, n); + } + /** + To be able to deserialize selections from JSON, custom selection + classes must register themselves with an ID string, so that they + can be disambiguated. Try to pick something that's unlikely to + clash with classes from other modules. + */ + static jsonID(e, n) { + if (e in Td) + throw new RangeError("Duplicate use of selection JSON ID " + e); + return Td[e] = n, n.prototype.jsonID = e, n; + } + /** + Get a [bookmark](https://prosemirror.net/docs/ref/#state.SelectionBookmark) for this selection, + which is a value that can be mapped without having access to a + current document, and later resolved to a real selection for a + given document again. (This is used mostly by the history to + track and restore old selections.) The default implementation of + this method just converts the selection to a text selection and + returns the bookmark for that. + */ + getBookmark() { + return Ce.between(this.$anchor, this.$head).getBookmark(); + } +} +Pe.prototype.visible = !0; +class A6 { + /** + Create a range. + */ + constructor(e, n) { + this.$from = e, this.$to = n; + } +} +let S2 = !1; +function C2(t) { + !S2 && !t.parent.inlineContent && (S2 = !0, console.warn("TextSelection endpoint not pointing into a node with inline content (" + t.parent.type.name + ")")); +} +class Ce extends Pe { + /** + Construct a text selection between the given points. + */ + constructor(e, n = e) { + C2(e), C2(n), super(e, n); + } + /** + Returns a resolved position if this is a cursor selection (an + empty text selection), and null otherwise. + */ + get $cursor() { + return this.$anchor.pos == this.$head.pos ? this.$head : null; + } + map(e, n) { + let r = e.resolve(n.map(this.head)); + if (!r.parent.inlineContent) + return Pe.near(r); + let i = e.resolve(n.map(this.anchor)); + return new Ce(i.parent.inlineContent ? i : r, r); + } + replace(e, n = ae.empty) { + if (super.replace(e, n), n == ae.empty) { + let r = this.$from.marksAcross(this.$to); + r && e.ensureMarks(r); + } + } + eq(e) { + return e instanceof Ce && e.anchor == this.anchor && e.head == this.head; + } + getBookmark() { + return new Oh(this.anchor, this.head); + } + toJSON() { + return { type: "text", anchor: this.anchor, head: this.head }; + } + /** + @internal + */ + static fromJSON(e, n) { + if (typeof n.anchor != "number" || typeof n.head != "number") + throw new RangeError("Invalid input for TextSelection.fromJSON"); + return new Ce(e.resolve(n.anchor), e.resolve(n.head)); + } + /** + Create a text selection from non-resolved positions. + */ + static create(e, n, r = n) { + let i = e.resolve(n); + return new this(i, r == n ? i : e.resolve(r)); + } + /** + Return a text selection that spans the given positions or, if + they aren't text positions, find a text selection near them. + `bias` determines whether the method searches forward (default) + or backwards (negative number) first. Will fall back to calling + [`Selection.near`](https://prosemirror.net/docs/ref/#state.Selection^near) when the document + doesn't contain a valid text position. + */ + static between(e, n, r) { + let i = e.pos - n.pos; + if ((!r || i) && (r = i >= 0 ? 1 : -1), !n.parent.inlineContent) { + let s = Pe.findFrom(n, r, !0) || Pe.findFrom(n, -r, !0); + if (s) + n = s.$head; + else + return Pe.near(n, r); + } + return e.parent.inlineContent || (i == 0 ? e = n : (e = (Pe.findFrom(e, -r, !0) || Pe.findFrom(e, r, !0)).$anchor, e.pos < n.pos != i < 0 && (e = n))), new Ce(e, n); + } +} +Pe.jsonID("text", Ce); +class Oh { + constructor(e, n) { + this.anchor = e, this.head = n; + } + map(e) { + return new Oh(e.map(this.anchor), e.map(this.head)); + } + resolve(e) { + return Ce.between(e.resolve(this.anchor), e.resolve(this.head)); + } +} +class Ne extends Pe { + /** + Create a node selection. Does not verify the validity of its + argument. + */ + constructor(e) { + let n = e.nodeAfter, r = e.node(0).resolve(e.pos + n.nodeSize); + super(e, r), this.node = n; + } + map(e, n) { + let { deleted: r, pos: i } = n.mapResult(this.anchor), s = e.resolve(i); + return r ? Pe.near(s) : new Ne(s); + } + content() { + return new ae(re.from(this.node), 0, 0); + } + eq(e) { + return e instanceof Ne && e.anchor == this.anchor; + } + toJSON() { + return { type: "node", anchor: this.anchor }; + } + getBookmark() { + return new h1(this.anchor); + } + /** + @internal + */ + static fromJSON(e, n) { + if (typeof n.anchor != "number") + throw new RangeError("Invalid input for NodeSelection.fromJSON"); + return new Ne(e.resolve(n.anchor)); + } + /** + Create a node selection from non-resolved positions. + */ + static create(e, n) { + return new Ne(e.resolve(n)); + } + /** + Determines whether the given node may be selected as a node + selection. + */ + static isSelectable(e) { + return !e.isText && e.type.spec.selectable !== !1; + } +} +Ne.prototype.visible = !1; +Pe.jsonID("node", Ne); +class h1 { + constructor(e) { + this.anchor = e; + } + map(e) { + let { deleted: n, pos: r } = e.mapResult(this.anchor); + return n ? new Oh(r, r) : new h1(r); + } + resolve(e) { + let n = e.resolve(this.anchor), r = n.nodeAfter; + return r && Ne.isSelectable(r) ? new Ne(n) : Pe.near(n); + } +} +class Sn extends Pe { + /** + Create an all-selection over the given document. + */ + constructor(e) { + super(e.resolve(0), e.resolve(e.content.size)); + } + replace(e, n = ae.empty) { + if (n == ae.empty) { + e.delete(0, e.doc.content.size); + let r = Pe.atStart(e.doc); + r.eq(e.selection) || e.setSelection(r); + } else + super.replace(e, n); + } + toJSON() { + return { type: "all" }; + } + /** + @internal + */ + static fromJSON(e) { + return new Sn(e); + } + map(e) { + return new Sn(e); + } + eq(e) { + return e instanceof Sn; + } + getBookmark() { + return BC; + } +} +Pe.jsonID("all", Sn); +const BC = { + map() { + return this; + }, + resolve(t) { + return new Sn(t); + } +}; +function zo(t, e, n, r, i, s = !1) { + if (e.inlineContent) + return Ce.create(t, n); + for (let o = r - (i > 0 ? 0 : 1); i > 0 ? o < e.childCount : o >= 0; o += i) { + let l = e.child(o); + if (l.isAtom) { + if (!s && Ne.isSelectable(l)) + return Ne.create(t, n - (i < 0 ? l.nodeSize : 0)); + } else { + let a = zo(t, l, n + i, i < 0 ? l.childCount : 0, i, s); + if (a) + return a; + } + n += l.nodeSize * i; + } + return null; +} +function N2(t, e, n) { + let r = t.steps.length - 1; + if (r < e) + return; + let i = t.steps[r]; + if (!(i instanceof Ft || i instanceof Yt)) + return; + let s = t.mapping.maps[r], o; + s.forEach((l, a, u, c) => { + o == null && (o = c); + }), t.setSelection(Pe.near(t.doc.resolve(o), n)); +} +const M2 = 1, xu = 2, T2 = 4; +class LC extends O6 { + /** + @internal + */ + constructor(e) { + super(e.doc), this.curSelectionFor = 0, this.updated = 0, this.meta = /* @__PURE__ */ Object.create(null), this.time = Date.now(), this.curSelection = e.selection, this.storedMarks = e.storedMarks; + } + /** + The transaction's current selection. This defaults to the editor + selection [mapped](https://prosemirror.net/docs/ref/#state.Selection.map) through the steps in the + transaction, but can be overwritten with + [`setSelection`](https://prosemirror.net/docs/ref/#state.Transaction.setSelection). + */ + 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; + } + /** + Update the transaction's current selection. Will determine the + selection that the editor gets when the transaction is applied. + */ + setSelection(e) { + if (e.$from.doc != this.doc) + throw new RangeError("Selection passed to setSelection must point at the current document"); + return this.curSelection = e, this.curSelectionFor = this.steps.length, this.updated = (this.updated | M2) & ~xu, this.storedMarks = null, this; + } + /** + Whether the selection was explicitly updated by this transaction. + */ + get selectionSet() { + return (this.updated & M2) > 0; + } + /** + Set the current stored marks. + */ + setStoredMarks(e) { + return this.storedMarks = e, this.updated |= xu, this; + } + /** + Make sure the current stored marks or, if that is null, the marks + at the selection, match the given set of marks. Does nothing if + this is already the case. + */ + ensureMarks(e) { + return qe.sameSet(this.storedMarks || this.selection.$from.marks(), e) || this.setStoredMarks(e), this; + } + /** + Add a mark to the set of stored marks. + */ + addStoredMark(e) { + return this.ensureMarks(e.addToSet(this.storedMarks || this.selection.$head.marks())); + } + /** + Remove a mark or mark type from the set of stored marks. + */ + removeStoredMark(e) { + return this.ensureMarks(e.removeFromSet(this.storedMarks || this.selection.$head.marks())); + } + /** + Whether the stored marks were explicitly set for this transaction. + */ + get storedMarksSet() { + return (this.updated & xu) > 0; + } + /** + @internal + */ + addStep(e, n) { + super.addStep(e, n), this.updated = this.updated & ~xu, this.storedMarks = null; + } + /** + Update the timestamp for the transaction. + */ + setTime(e) { + return this.time = e, this; + } + /** + Replace the current selection with the given slice. + */ + replaceSelection(e) { + return this.selection.replace(this, e), this; + } + /** + Replace the selection with the given node. When `inheritMarks` is + true and the content is inline, it inherits the marks from the + place where it is inserted. + */ + replaceSelectionWith(e, n = !0) { + let r = this.selection; + return n && (e = e.mark(this.storedMarks || (r.empty ? r.$from.marks() : r.$from.marksAcross(r.$to) || qe.none))), r.replaceWith(this, e), this; + } + /** + Delete the selection. + */ + deleteSelection() { + return this.selection.replace(this), this; + } + /** + Replace the given range, or the selection if no range is given, + with a text node containing the given string. + */ + insertText(e, n, r) { + let i = this.doc.type.schema; + if (n == null) + return e ? this.replaceSelectionWith(i.text(e), !0) : this.deleteSelection(); + { + if (r == null && (r = n), !e) + return this.deleteRange(n, r); + let s = this.storedMarks; + if (!s) { + let o = this.doc.resolve(n); + s = r == n ? o.marks() : o.marksAcross(this.doc.resolve(r)); + } + return this.replaceRangeWith(n, r, i.text(e, s)), !this.selection.empty && this.selection.to == n + e.length && this.setSelection(Pe.near(this.selection.$to)), this; + } + } + /** + Store a metadata property in this transaction, keyed either by + name or by plugin. + */ + setMeta(e, n) { + return this.meta[typeof e == "string" ? e : e.key] = n, this; + } + /** + Retrieve a metadata property for a given name or plugin. + */ + getMeta(e) { + return this.meta[typeof e == "string" ? e : e.key]; + } + /** + Returns true if this transaction doesn't contain any metadata, + and can thus safely be extended. + */ + get isGeneric() { + for (let e in this.meta) + return !1; + return !0; + } + /** + Indicate that the editor should scroll the selection into view + when updated to the state produced by this transaction. + */ + scrollIntoView() { + return this.updated |= T2, this; + } + /** + True when this transaction has had `scrollIntoView` called on it. + */ + get scrolledIntoView() { + return (this.updated & T2) > 0; + } +} +function E2(t, e) { + return !e || !t ? t : t.bind(e); +} +class ya { + constructor(e, n, r) { + this.name = e, this.init = E2(n.init, r), this.apply = E2(n.apply, r); + } +} +const FC = [ + new ya("doc", { + init(t) { + return t.doc || t.schema.topNodeType.createAndFill(); + }, + apply(t) { + return t.doc; + } + }), + new ya("selection", { + init(t, e) { + return t.selection || Pe.atStart(e.doc); + }, + apply(t) { + return t.selection; + } + }), + new ya("storedMarks", { + init(t) { + return t.storedMarks || null; + }, + apply(t, e, n, r) { + return r.selection.$cursor ? t.storedMarks : null; + } + }), + new ya("scrollToSelection", { + init() { + return 0; + }, + apply(t, e) { + return t.scrolledIntoView ? e + 1 : e; + } + }) +]; +class Ed { + constructor(e, n) { + this.schema = e, this.plugins = [], this.pluginsByKey = /* @__PURE__ */ Object.create(null), this.fields = FC.slice(), n && n.forEach((r) => { + if (this.pluginsByKey[r.key]) + throw new RangeError("Adding different instances of a keyed plugin (" + r.key + ")"); + this.plugins.push(r), this.pluginsByKey[r.key] = r, r.spec.state && this.fields.push(new ya(r.key, r.spec.state, r)); + }); + } +} +class Wo { + /** + @internal + */ + constructor(e) { + this.config = e; + } + /** + The schema of the state's document. + */ + get schema() { + return this.config.schema; + } + /** + The plugins that are active in this state. + */ + get plugins() { + return this.config.plugins; + } + /** + Apply the given transaction to produce a new state. + */ + apply(e) { + return this.applyTransaction(e).state; + } + /** + @internal + */ + filterTransaction(e, n = -1) { + for (let r = 0; r < this.config.plugins.length; r++) + if (r != n) { + let i = this.config.plugins[r]; + if (i.spec.filterTransaction && !i.spec.filterTransaction.call(i, e, this)) + return !1; + } + return !0; + } + /** + Verbose variant of [`apply`](https://prosemirror.net/docs/ref/#state.EditorState.apply) that + returns the precise transactions that were applied (which might + be influenced by the [transaction + hooks](https://prosemirror.net/docs/ref/#state.PluginSpec.filterTransaction) of + plugins) along with the new state. + */ + applyTransaction(e) { + if (!this.filterTransaction(e)) + return { state: this, transactions: [] }; + let n = [e], r = this.applyInner(e), i = null; + for (; ; ) { + let s = !1; + for (let o = 0; o < this.config.plugins.length; o++) { + let l = this.config.plugins[o]; + if (l.spec.appendTransaction) { + let a = i ? i[o].n : 0, u = i ? i[o].state : this, c = a < n.length && l.spec.appendTransaction.call(l, a ? n.slice(a) : n, u, r); + if (c && r.filterTransaction(c, o)) { + if (c.setMeta("appendedTransaction", e), !i) { + i = []; + for (let h = 0; h < this.config.plugins.length; h++) + i.push(h < o ? { state: r, n: n.length } : { state: this, n: 0 }); + } + n.push(c), r = r.applyInner(c), s = !0; + } + i && (i[o] = { state: r, n: n.length }); + } + } + if (!s) + return { state: r, transactions: n }; + } + } + /** + @internal + */ + applyInner(e) { + if (!e.before.eq(this.doc)) + throw new RangeError("Applying a mismatched transaction"); + let n = new Wo(this.config), r = this.config.fields; + for (let i = 0; i < r.length; i++) { + let s = r[i]; + n[s.name] = s.apply(e, this[s.name], this, n); + } + return n; + } + /** + Accessor that constructs and returns a new [transaction](https://prosemirror.net/docs/ref/#state.Transaction) from this state. + */ + get tr() { + return new LC(this); + } + /** + Create a new state. + */ + static create(e) { + let n = new Ed(e.doc ? e.doc.type.schema : e.schema, e.plugins), r = new Wo(n); + for (let i = 0; i < n.fields.length; i++) + r[n.fields[i].name] = n.fields[i].init(e, r); + return r; + } + /** + Create a new state based on this one, but with an adjusted set + of active plugins. State fields that exist in both sets of + plugins are kept unchanged. Those that no longer exist are + dropped, and those that are new are initialized using their + [`init`](https://prosemirror.net/docs/ref/#state.StateField.init) method, passing in the new + configuration object.. + */ + reconfigure(e) { + let n = new Ed(this.schema, e.plugins), r = n.fields, i = new Wo(n); + for (let s = 0; s < r.length; s++) { + let o = r[s].name; + i[o] = this.hasOwnProperty(o) ? this[o] : r[s].init(e, i); + } + return i; + } + /** + Serialize this state to JSON. If you want to serialize the state + of plugins, pass an object mapping property names to use in the + resulting JSON object to plugin objects. The argument may also be + a string or number, in which case it is ignored, to support the + way `JSON.stringify` calls `toString` methods. + */ + toJSON(e) { + let n = { doc: this.doc.toJSON(), selection: this.selection.toJSON() }; + if (this.storedMarks && (n.storedMarks = this.storedMarks.map((r) => r.toJSON())), e && typeof e == "object") + for (let r in e) { + if (r == "doc" || r == "selection") + throw new RangeError("The JSON fields `doc` and `selection` are reserved"); + let i = e[r], s = i.spec.state; + s && s.toJSON && (n[r] = s.toJSON.call(i, this[i.key])); + } + return n; + } + /** + Deserialize a JSON representation of a state. `config` should + have at least a `schema` field, and should contain array of + plugins to initialize the state with. `pluginFields` can be used + to deserialize the state of plugins, by associating plugin + instances with the property names they use in the JSON object. + */ + static fromJSON(e, n, r) { + if (!n) + throw new RangeError("Invalid input for EditorState.fromJSON"); + if (!e.schema) + throw new RangeError("Required config field 'schema' missing"); + let i = new Ed(e.schema, e.plugins), s = new Wo(i); + return i.fields.forEach((o) => { + if (o.name == "doc") + s.doc = Xn.fromJSON(e.schema, n.doc); + else if (o.name == "selection") + s.selection = Pe.fromJSON(s.doc, n.selection); + else if (o.name == "storedMarks") + n.storedMarks && (s.storedMarks = n.storedMarks.map(e.schema.markFromJSON)); + else { + if (r) + for (let l in r) { + let a = r[l], u = a.spec.state; + if (a.key == o.name && u && u.fromJSON && Object.prototype.hasOwnProperty.call(n, l)) { + s[o.name] = u.fromJSON.call(a, e, n[l], s); + return; + } + } + s[o.name] = o.init(e, s); + } + }), s; + } +} +function I6(t, e, n) { + for (let r in t) { + let i = t[r]; + i instanceof Function ? i = i.bind(e) : r == "handleDOMEvents" && (i = I6(i, e, {})), n[r] = i; + } + return n; +} +class Dt { + /** + Create a plugin. + */ + constructor(e) { + this.spec = e, this.props = {}, e.props && I6(e.props, this, this.props), this.key = e.key ? e.key.key : D6("plugin"); + } + /** + Extract the plugin's state field from an editor state. + */ + getState(e) { + return e[this.key]; + } +} +const Od = /* @__PURE__ */ Object.create(null); +function D6(t) { + return t in Od ? t + "$" + ++Od[t] : (Od[t] = 0, t + "$"); +} +class Nt { + /** + Create a plugin key. + */ + constructor(e = "key") { + this.key = D6(e); + } + /** + Get the active plugin with this key, if any, from an editor + state. + */ + get(e) { + return e.config.pluginsByKey[this.key]; + } + /** + Get the plugin's state from an editor state. + */ + getState(e) { + return e[this.key]; + } +} +const d1 = (t, e) => t.selection.empty ? !1 : (e && e(t.tr.deleteSelection().scrollIntoView()), !0); +function _6(t, e) { + let { $cursor: n } = t.selection; + return !n || (e ? !e.endOfTextblock("backward", t) : n.parentOffset > 0) ? null : n; +} +const R6 = (t, e, n) => { + let r = _6(t, n); + if (!r) + return !1; + let i = f1(r); + if (!i) { + let o = r.blockRange(), l = o && Mh(o); + return l == null ? !1 : (e && e(t.tr.lift(o, l).scrollIntoView()), !0); + } + let s = i.nodeBefore; + if (B6(t, i, e, -1)) + return !0; + if (r.parent.content.size == 0 && (Ol(s, "end") || Ne.isSelectable(s))) + for (let o = r.depth; ; o--) { + let l = Eh(t.doc, r.before(o), r.after(o), ae.empty); + if (l && l.slice.size < l.to - l.from) { + if (e) { + let a = t.tr.step(l); + a.setSelection(Ol(s, "end") ? Pe.findFrom(a.doc.resolve(a.mapping.map(i.pos, -1)), -1) : Ne.create(a.doc, i.pos - s.nodeSize)), e(a.scrollIntoView()); + } + return !0; + } + if (o == 1 || r.node(o - 1).childCount > 1) + break; + } + return s.isAtom && i.depth == r.depth - 1 ? (e && e(t.tr.delete(i.pos - s.nodeSize, i.pos).scrollIntoView()), !0) : !1; +}, VC = (t, e, n) => { + let r = _6(t, n); + if (!r) + return !1; + let i = f1(r); + return i ? HC(t, i, e) : !1; +}; +function HC(t, e, n) { + let r = e.nodeBefore, i = r, s = e.pos - 1; + for (; !i.isTextblock; s--) { + if (i.type.spec.isolating) + return !1; + let c = i.lastChild; + if (!c) + return !1; + i = c; + } + let o = e.nodeAfter, l = o, a = e.pos + 1; + for (; !l.isTextblock; a++) { + if (l.type.spec.isolating) + return !1; + let c = l.firstChild; + if (!c) + return !1; + l = c; + } + let u = Eh(t.doc, s, a, ae.empty); + if (!u || u.from != s || u instanceof Ft && u.slice.size >= a - s) + return !1; + if (n) { + let c = t.tr.step(u); + c.setSelection(Ce.create(c.doc, s)), n(c.scrollIntoView()); + } + return !0; +} +function Ol(t, e, n = !1) { + for (let r = t; r; r = e == "start" ? r.firstChild : r.lastChild) { + if (r.isTextblock) + return !0; + if (n && r.childCount != 1) + return !1; + } + return !1; +} +const z6 = (t, e, n) => { + let { $head: r, empty: i } = t.selection, s = r; + if (!i) + return !1; + if (r.parent.isTextblock) { + if (n ? !n.endOfTextblock("backward", t) : r.parentOffset > 0) + return !1; + s = f1(r); + } + let o = s && s.nodeBefore; + return !o || !Ne.isSelectable(o) ? !1 : (e && e(t.tr.setSelection(Ne.create(t.doc, s.pos - o.nodeSize)).scrollIntoView()), !0); +}; +function f1(t) { + if (!t.parent.type.spec.isolating) + for (let e = t.depth - 1; e >= 0; e--) { + if (t.index(e) > 0) + return t.doc.resolve(t.before(e + 1)); + if (t.node(e).type.spec.isolating) + break; + } + return null; +} +function $C(t, e) { + let { $cursor: n } = t.selection; + return !n || (e ? !e.endOfTextblock("forward", t) : n.parentOffset < n.parent.content.size) ? null : n; +} +const qC = (t, e, n) => { + let r = $C(t, n); + if (!r) + return !1; + let i = P6(r); + if (!i) + return !1; + let s = i.nodeAfter; + if (B6(t, i, e, 1)) + return !0; + if (r.parent.content.size == 0 && (Ol(s, "start") || Ne.isSelectable(s))) { + let o = Eh(t.doc, r.before(), r.after(), ae.empty); + if (o && o.slice.size < o.to - o.from) { + if (e) { + let l = t.tr.step(o); + l.setSelection(Ol(s, "start") ? Pe.findFrom(l.doc.resolve(l.mapping.map(i.pos)), 1) : Ne.create(l.doc, l.mapping.map(i.pos))), e(l.scrollIntoView()); + } + return !0; + } + } + return s.isAtom && i.depth == r.depth - 1 ? (e && e(t.tr.delete(i.pos, i.pos + s.nodeSize).scrollIntoView()), !0) : !1; +}, jC = (t, e, n) => { + let { $head: r, empty: i } = t.selection, s = r; + if (!i) + return !1; + if (r.parent.isTextblock) { + if (n ? !n.endOfTextblock("forward", t) : r.parentOffset < r.parent.content.size) + return !1; + s = P6(r); + } + let o = s && s.nodeAfter; + return !o || !Ne.isSelectable(o) ? !1 : (e && e(t.tr.setSelection(Ne.create(t.doc, s.pos)).scrollIntoView()), !0); +}; +function P6(t) { + if (!t.parent.type.spec.isolating) + for (let e = t.depth - 1; e >= 0; e--) { + let n = t.node(e); + if (t.index(e) + 1 < n.childCount) + return t.doc.resolve(t.after(e + 1)); + if (n.type.spec.isolating) + break; + } + return null; +} +const WC = (t, e) => { + let { $head: n, $anchor: r } = t.selection; + return !n.parent.type.spec.code || !n.sameParent(r) ? !1 : (e && e(t.tr.insertText(` +`).scrollIntoView()), !0); +}; +function p1(t) { + for (let e = 0; e < t.edgeCount; e++) { + let { type: n } = t.edge(e); + if (n.isTextblock && !n.hasRequiredAttrs()) + return n; + } + return null; +} +const UC = (t, e) => { + let { $head: n, $anchor: r } = t.selection; + if (!n.parent.type.spec.code || !n.sameParent(r)) + return !1; + let i = n.node(-1), s = n.indexAfter(-1), o = p1(i.contentMatchAt(s)); + if (!o || !i.canReplaceWith(s, s, o)) + return !1; + if (e) { + let l = n.after(), a = t.tr.replaceWith(l, l, o.createAndFill()); + a.setSelection(Pe.near(a.doc.resolve(l), 1)), e(a.scrollIntoView()); + } + return !0; +}, GC = (t, e) => { + let n = t.selection, { $from: r, $to: i } = n; + if (n instanceof Sn || r.parent.inlineContent || i.parent.inlineContent) + return !1; + let s = p1(i.parent.contentMatchAt(i.indexAfter())); + if (!s || !s.isTextblock) + return !1; + if (e) { + let o = (!r.parentOffset && i.index() < i.parent.childCount ? r : i).pos, l = t.tr.insert(o, s.createAndFill()); + l.setSelection(Ce.create(l.doc, o + 1)), e(l.scrollIntoView()); + } + return !0; +}, KC = (t, e) => { + let { $cursor: n } = t.selection; + if (!n || n.parent.content.size) + return !1; + if (n.depth > 1 && n.after() != n.end(-1)) { + let s = n.before(); + if (_a(t.doc, s)) + return e && e(t.tr.split(s).scrollIntoView()), !0; + } + let r = n.blockRange(), i = r && Mh(r); + return i == null ? !1 : (e && e(t.tr.lift(r, i).scrollIntoView()), !0); +}; +function JC(t) { + return (e, n) => { + let { $from: r, $to: i } = e.selection; + if (e.selection instanceof Ne && e.selection.node.isBlock) + return !r.parentOffset || !_a(e.doc, r.pos) ? !1 : (n && n(e.tr.split(r.pos).scrollIntoView()), !0); + if (!r.depth) + return !1; + let s = [], o, l, a = !1, u = !1; + for (let f = r.depth; ; f--) + if (r.node(f).isBlock) { + a = r.end(f) == r.pos + (r.depth - f), u = r.start(f) == r.pos - (r.depth - f), l = p1(r.node(f - 1).contentMatchAt(r.indexAfter(f - 1))), s.unshift(a && l ? { type: l } : null), o = f; + break; + } else { + if (f == 1) + return !1; + s.unshift(null); + } + let c = e.tr; + (e.selection instanceof Ce || e.selection instanceof Sn) && c.deleteSelection(); + let h = c.mapping.map(r.pos), d = _a(c.doc, h, s.length, s); + if (d || (s[0] = l ? { type: l } : null, d = _a(c.doc, h, s.length, s)), !d) + return !1; + if (c.split(h, s.length, s), !a && u && r.node(o).type != l) { + let f = c.mapping.map(r.before(o)), m = c.doc.resolve(f); + l && r.node(o - 1).canReplaceWith(m.index(), m.index() + 1, l) && c.setNodeMarkup(c.mapping.map(r.before(o)), l); + } + return n && n(c.scrollIntoView()), !0; + }; +} +const YC = JC(), ZC = (t, e) => (e && e(t.tr.setSelection(new Sn(t.doc))), !0); +function XC(t, e, n) { + let r = e.nodeBefore, i = e.nodeAfter, s = e.index(); + return !r || !i || !r.type.compatibleContent(i.type) ? !1 : !r.content.size && e.parent.canReplace(s - 1, s) ? (n && n(t.tr.delete(e.pos - r.nodeSize, e.pos).scrollIntoView()), !0) : !e.parent.canReplace(s, s + 1) || !(i.isTextblock || Th(t.doc, e.pos)) ? !1 : (n && n(t.tr.join(e.pos).scrollIntoView()), !0); +} +function B6(t, e, n, r) { + let i = e.nodeBefore, s = e.nodeAfter, o, l, a = i.type.spec.isolating || s.type.spec.isolating; + if (!a && XC(t, e, n)) + return !0; + let u = !a && e.parent.canReplace(e.index(), e.index() + 1); + if (u && (o = (l = i.contentMatchAt(i.childCount)).findWrapping(s.type)) && l.matchType(o[0] || s.type).validEnd) { + if (n) { + let f = e.pos + s.nodeSize, m = re.empty; + for (let w = o.length - 1; w >= 0; w--) + m = re.from(o[w].create(null, m)); + m = re.from(i.copy(m)); + let y = t.tr.step(new Yt(e.pos - 1, f, e.pos, f, new ae(m, 1, 0), o.length, !0)), b = y.doc.resolve(f + 2 * o.length); + b.nodeAfter && b.nodeAfter.type == i.type && Th(y.doc, b.pos) && y.join(b.pos), n(y.scrollIntoView()); + } + return !0; + } + let c = s.type.spec.isolating || r > 0 && a ? null : Pe.findFrom(e, 1), h = c && c.$from.blockRange(c.$to), d = h && Mh(h); + if (d != null && d >= e.depth) + return n && n(t.tr.lift(h, d).scrollIntoView()), !0; + if (u && Ol(s, "start", !0) && Ol(i, "end")) { + let f = i, m = []; + for (; m.push(f), !f.isTextblock; ) + f = f.lastChild; + let y = s, b = 1; + for (; !y.isTextblock; y = y.firstChild) + b++; + if (f.canReplace(f.childCount, f.childCount, y.content)) { + if (n) { + let w = re.empty; + for (let N = m.length - 1; N >= 0; N--) + w = re.from(m[N].copy(w)); + let C = t.tr.step(new Yt(e.pos - m.length, e.pos + s.nodeSize, e.pos + b, e.pos + s.nodeSize - b, new ae(w, m.length, 0), 0, !0)); + n(C.scrollIntoView()); + } + return !0; + } + } + return !1; +} +function L6(t) { + return function(e, n) { + let r = e.selection, i = t < 0 ? r.$from : r.$to, s = i.depth; + for (; i.node(s).isInline; ) { + if (!s) + return !1; + s--; + } + return i.node(s).isTextblock ? (n && n(e.tr.setSelection(Ce.create(e.doc, t < 0 ? i.start(s) : i.end(s)))), !0) : !1; + }; +} +const QC = L6(-1), eN = L6(1); +function m1(t, e = null) { + return function(n, r) { + let { $from: i, $to: s } = n.selection, o = i.blockRange(s), l = o && c1(o, t, e); + return l ? (r && r(n.tr.wrap(o, l).scrollIntoView()), !0) : !1; + }; +} +function i0(t, e = null) { + return function(n, r) { + let i = !1; + for (let s = 0; s < n.selection.ranges.length && !i; s++) { + let { $from: { pos: o }, $to: { pos: l } } = n.selection.ranges[s]; + n.doc.nodesBetween(o, l, (a, u) => { + if (i) + return !1; + if (!(!a.isTextblock || a.hasMarkup(t, e))) + if (a.type == t) + i = !0; + else { + let c = n.doc.resolve(u), h = c.index(); + i = c.parent.canReplaceWith(h, h + 1, t); + } + }); + } + if (!i) + return !1; + if (r) { + let s = n.tr; + for (let o = 0; o < n.selection.ranges.length; o++) { + let { $from: { pos: l }, $to: { pos: a } } = n.selection.ranges[o]; + s.setBlockType(l, a, t, e); + } + r(s.scrollIntoView()); + } + return !0; + }; +} +function tN(t, e, n, r) { + for (let i = 0; i < e.length; i++) { + let { $from: s, $to: o } = e[i], l = s.depth == 0 ? t.inlineContent && t.type.allowsMarkType(n) : !1; + if (t.nodesBetween(s.pos, o.pos, (a, u) => { + if (l) + return !1; + l = a.inlineContent && a.type.allowsMarkType(n); + }), l) + return !0; + } + return !1; +} +function Ah(t, e = null, n) { + return function(r, i) { + let { empty: s, $cursor: o, ranges: l } = r.selection; + if (s && !o || !tN(r.doc, l, t)) + return !1; + if (i) + if (o) + t.isInSet(r.storedMarks || o.marks()) ? i(r.tr.removeStoredMark(t)) : i(r.tr.addStoredMark(t.create(e))); + else { + let a, u = r.tr; + a = !l.some((c) => r.doc.rangeHasMark(c.$from.pos, c.$to.pos, t)); + for (let c = 0; c < l.length; c++) { + let { $from: h, $to: d } = l[c]; + if (!a) + u.removeMark(h.pos, d.pos, t); + else { + let f = h.pos, m = d.pos, y = h.nodeAfter, b = d.nodeBefore, w = y && y.isText ? /^\s*/.exec(y.text)[0].length : 0, C = b && b.isText ? /\s*$/.exec(b.text)[0].length : 0; + f + w < m && (f += w, m -= C), u.addMark(f, m, t.create(e)); + } + } + i(u.scrollIntoView()); + } + return !0; + }; +} +function zl(...t) { + return function(e, n, r) { + for (let i = 0; i < t.length; i++) + if (t[i](e, n, r)) + return !0; + return !1; + }; +} +let Ad = zl(d1, R6, z6), O2 = zl(d1, qC, jC); +const si = { + Enter: zl(WC, GC, KC, YC), + "Mod-Enter": UC, + Backspace: Ad, + "Mod-Backspace": Ad, + "Shift-Backspace": Ad, + Delete: O2, + "Mod-Delete": O2, + "Mod-a": ZC +}, F6 = { + "Ctrl-h": si.Backspace, + "Alt-Backspace": si["Mod-Backspace"], + "Ctrl-d": si.Delete, + "Ctrl-Alt-Backspace": si["Mod-Delete"], + "Alt-Delete": si["Mod-Delete"], + "Alt-d": si["Mod-Delete"], + "Ctrl-a": QC, + "Ctrl-e": eN +}; +for (let t in si) + F6[t] = si[t]; +const nN = typeof navigator < "u" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform) : typeof os < "u" && os.platform ? os.platform() == "darwin" : !1, rN = nN ? F6 : si; +class jn { + /** + Create an input rule. The rule applies when the user typed + something and the text directly in front of the cursor matches + `match`, which should end with `$`. + + The `handler` can be a string, in which case the matched text, or + the first matched group in the regexp, is replaced by that + string. + + Or a it can be a function, which will be called with the match + array produced by + [`RegExp.exec`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec), + as well as the start and end of the matched range, and which can + return a [transaction](https://prosemirror.net/docs/ref/#state.Transaction) that describes the + rule's effect, or null to indicate the input was not handled. + */ + constructor(e, n, r = {}) { + this.match = e, this.match = e, this.handler = typeof n == "string" ? iN(n) : n, this.undoable = r.undoable !== !1, this.inCode = r.inCode || !1, this.inCodeMark = r.inCodeMark !== !1; + } +} +function iN(t) { + return function(e, n, r, i) { + let s = t; + if (n[1]) { + let o = n[0].lastIndexOf(n[1]); + s += n[0].slice(o + n[1].length), r += o; + let l = r - i; + l > 0 && (s = n[0].slice(o - l, o) + s, r = i); + } + return e.tr.insertText(s, r, i); + }; +} +const sN = (t, e) => { + let n = t.plugins; + for (let r = 0; r < n.length; r++) { + let i = n[r], s; + if (i.spec.isInputRules && (s = i.getState(t))) { + if (e) { + let o = t.tr, l = s.transform; + for (let a = l.steps.length - 1; a >= 0; a--) + o.step(l.steps[a].invert(l.docs[a])); + if (s.text) { + let a = o.doc.resolve(s.from).marks(); + o.replaceWith(s.from, s.to, t.schema.text(s.text, a)); + } else + o.delete(s.from, s.to); + e(o); + } + return !0; + } + } + return !1; +}; +new jn(/--$/, "—", { inCodeMark: !1 }); +new jn(/\.\.\.$/, "…", { inCodeMark: !1 }); +new jn(/(?:^|[\s\{\[\(\<'"\u2018\u201C])(")$/, "“", { inCodeMark: !1 }); +new jn(/"$/, "”", { inCodeMark: !1 }); +new jn(/(?:^|[\s\{\[\(\<'"\u2018\u201C])(')$/, "‘", { inCodeMark: !1 }); +new jn(/'$/, "’", { inCodeMark: !1 }); +function g1(t, e, n = null, r) { + return new jn(t, (i, s, o, l) => { + let a = n instanceof Function ? n(s) : n, u = i.tr.delete(o, l), c = u.doc.resolve(o), h = c.blockRange(), d = h && c1(h, e, a); + if (!d) + return null; + u.wrap(h, d); + let f = u.doc.resolve(o - 1).nodeBefore; + return f && f.type == e && Th(u.doc, o - 1) && (!r || r(s, f)) && u.join(o - 1), u; + }); +} +function V6(t, e, n = null) { + return new jn(t, (r, i, s, o) => { + let l = r.doc.resolve(s), a = n instanceof Function ? n(i) : n; + return l.node(-1).canReplaceWith(l.index(-1), l.indexAfter(-1), e) ? r.tr.delete(s, o).setBlockType(s, s, e, a) : null; + }); +} +const ls = typeof navigator < "u" ? navigator : null, A2 = typeof document < "u" ? document : null, gs = ls && ls.userAgent || "", Xf = /Edge\/(\d+)/.exec(gs), H6 = /MSIE \d/.exec(gs), Qf = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(gs), Ih = !!(H6 || Qf || Xf), oN = H6 ? document.documentMode : Qf ? +Qf[1] : Xf ? +Xf[1] : 0, $6 = !Ih && /gecko\/(\d+)/i.test(gs), lN = $6 && +(/Firefox\/(\d+)/.exec(gs) || [0, 0])[1], ep = !Ih && /Chrome\/(\d+)/.exec(gs), aN = !!ep, uN = ep ? +ep[1] : 0, q6 = !Ih && !!ls && /Apple Computer/.test(ls.vendor), j6 = q6 && (/Mobile\/\w+/.test(gs) || !!ls && ls.maxTouchPoints > 2), cN = j6 || (ls ? /Mac/.test(ls.platform) : !1), hN = /Android \d/.test(gs), W6 = !!A2 && "webkitFontSmoothing" in A2.documentElement.style, dN = W6 ? +(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0; +var Su = /* @__PURE__ */ Object.freeze({ + __proto__: null, + android: hN, + chrome: aN, + chrome_version: uN, + gecko: $6, + gecko_version: lN, + ie: Ih, + ie_version: oN, + ios: j6, + mac: cN, + safari: q6, + webkit: W6, + webkit_version: dN +}); +function Id(t, e, n, r, i, s) { + if (t.composing) return !1; + const o = t.state, l = o.doc.resolve(e); + if (l.parent.type.spec.code) return !1; + const a = l.parent.textBetween( + Math.max(0, l.parentOffset - 500), + l.parentOffset, + void 0, + "" + ) + r; + for (let u of i) { + const c = u, h = c.match.exec(a), d = h && h[0] && c.handler(o, h, e - (h[0].length - r.length), n); + if (d) + return c.undoable !== !1 && d.setMeta(s, { transform: d, from: e, to: n, text: r }), t.dispatch(d), !0; + } + return !1; +} +const fN = new Nt("MILKDOWN_CUSTOM_INPUTRULES"); +function pN({ rules: t }) { + const e = new Dt({ + key: fN, + isInputRules: !0, + state: { + init() { + return null; + }, + apply(n, r) { + const i = n.getMeta(this); + return i || (n.selectionSet || n.docChanged ? null : r); + } + }, + props: { + handleTextInput(n, r, i, s) { + return Id(n, r, i, s, t, e); + }, + handleDOMEvents: { + compositionend: (n) => (setTimeout(() => { + const { $cursor: r } = n.state.selection; + r && Id(n, r.pos, r.pos, "", t, e); + }), !1) + }, + handleKeyDown(n, r) { + if (r.key !== "Enter") return !1; + const { $cursor: i } = n.state.selection; + return i ? Id(n, i.pos, i.pos, ` +`, t, e) : !1; + } + } + }); + return e; +} +function Z0(t, e, n = {}) { + return new jn(t, (r, i, s, o) => { + var l, a, u, c; + const { tr: h } = r, d = i.length; + let f = i[d - 1], m = i[0], y = [], b = o; + const w = { + group: f, + fullMatch: m, + start: s, + end: o + }, C = (l = n.updateCaptured) == null ? void 0 : l.call(n, w); + if (Object.assign(w, C), { group: f, fullMatch: m, start: s, end: o } = w, m === null || (f == null ? void 0 : f.trim()) === "") return null; + if (f) { + const N = m.search(/\S/), B = s + m.indexOf(f), _ = B + f.length; + y = (a = h.storedMarks) != null ? a : [], _ < o && h.delete(_, o), B > s && h.delete(s + N, B), b = s + N + f.length; + const A = (u = n.getAttr) == null ? void 0 : u.call(n, i); + h.addMark(s, b, e.create(A)), h.setStoredMarks(y), (c = n.beforeDispatch) == null || c.call(n, { match: i, start: s, end: o, tr: h }); + } + return h; + }); +} +var mN = Object.defineProperty, gN = Object.defineProperties, yN = Object.getOwnPropertyDescriptors, I2 = Object.getOwnPropertySymbols, vN = Object.prototype.hasOwnProperty, bN = Object.prototype.propertyIsEnumerable, D2 = (t, e, n) => e in t ? mN(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n, wN = (t, e) => { + for (var n in e || (e = {})) + vN.call(e, n) && D2(t, n, e[n]); + if (I2) + for (var n of I2(e)) + bN.call(e, n) && D2(t, n, e[n]); + return t; +}, kN = (t, e) => gN(t, yN(e)); +function _2(t = 0, e = 0, n = 0) { + return Math.min(Math.max(t, e), n); +} +function U6(t, e, n) { + const i = t.state.doc.content.size, s = _2(e, 0, i), o = _2(n, 0, i), l = t.coordsAtPos(s), a = t.coordsAtPos(o, -1), u = Math.min(l.top, a.top), c = Math.max(l.bottom, a.bottom), h = Math.min(l.left, a.left), d = Math.max(l.right, a.right), f = d - h, m = c - u, w = { + top: u, + bottom: c, + left: h, + right: d, + width: f, + height: m, + x: h, + y: u + }; + return kN(wN({}, w), { + toJSON: () => w + }); +} +function G6(t) { + return Object.assign(Object.create(t), t).setTime(Date.now()); +} +function xN(t, e) { + return Array.isArray(t) && t.includes(e.type) || e.type === t; +} +function SN(t) { + if (t.content.childCount === 1) { + const e = t.content.firstChild; + if ((e == null ? void 0 : e.type.name) === "text" && e.marks.length === 0) return e; + if ((e == null ? void 0 : e.type.name) === "paragraph" && e.childCount === 1) { + const n = e.firstChild; + if ((n == null ? void 0 : n.type.name) === "text" && n.marks.length === 0) return n; + } + } + return !1; +} +function y1(t) { + return (e) => { + for (let n = e.depth; n > 0; n -= 1) { + const r = e.node(n); + if (t(r)) { + const i = e.before(n), s = e.after(n); + return { + from: i, + to: s, + node: r + }; + } + } + }; +} +function CN(t, e) { + return y1((n) => n.type === e)(t); +} +function NN(t, e) { + const n = e.nodes[t]; + if (!n) throw sw("node", t); + return n; +} +function K6(t) { + return (e) => { + for (let n = e.depth; n > 0; n--) { + const r = e.node(n); + if (t(r)) + return { + pos: n > 0 ? e.before(n) : 0, + start: e.start(n), + depth: n, + node: r + }; + } + }; +} +function MN(t) { + return (e) => K6(t)(e.$from); +} +function TN(t, e) { + if (!(t instanceof Ne)) return; + const { node: n, $from: r } = t; + if (xN(e, n)) + return { + node: n, + pos: r.pos, + start: r.start(r.depth), + depth: r.depth + }; +} +const J6 = (t, e) => { + const { selection: n, doc: r } = t; + if (n instanceof Ne) + return { + hasNode: n.node.type === e, + pos: n.from, + target: n.node + }; + const { from: i, to: s } = n; + let o = !1, l = -1, a = null; + return r.nodesBetween(i, s, (u, c) => a ? !1 : u.type === e ? (o = !0, l = c, a = u, !1) : !0), { + hasNode: o, + pos: l, + target: a + }; +}; +var as = { + 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: "'" +}, Fc = { + 48: ")", + 49: "!", + 50: "@", + 51: "#", + 52: "$", + 53: "%", + 54: "^", + 55: "&", + 56: "*", + 57: "(", + 59: ":", + 61: "+", + 173: "_", + 186: ":", + 187: "+", + 188: "<", + 189: "_", + 190: ">", + 191: "?", + 192: "~", + 219: "{", + 220: "|", + 221: "}", + 222: '"' +}, EN = typeof navigator < "u" && /Mac/.test(navigator.platform), ON = typeof navigator < "u" && /MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent); +for (var Wt = 0; Wt < 10; Wt++) as[48 + Wt] = as[96 + Wt] = String(Wt); +for (var Wt = 1; Wt <= 24; Wt++) as[Wt + 111] = "F" + Wt; +for (var Wt = 65; Wt <= 90; Wt++) + as[Wt] = String.fromCharCode(Wt + 32), Fc[Wt] = String.fromCharCode(Wt); +for (var Dd in as) Fc.hasOwnProperty(Dd) || (Fc[Dd] = as[Dd]); +function AN(t) { + var e = EN && t.metaKey && t.shiftKey && !t.ctrlKey && !t.altKey || ON && t.shiftKey && t.key && t.key.length == 1 || t.key == "Unidentified", n = !e && t.key || (t.shiftKey ? Fc : as)[t.keyCode] || t.key || "Unidentified"; + return n == "Esc" && (n = "Escape"), n == "Del" && (n = "Delete"), n == "Left" && (n = "ArrowLeft"), n == "Up" && (n = "ArrowUp"), n == "Right" && (n = "ArrowRight"), n == "Down" && (n = "ArrowDown"), n; +} +const IN = typeof navigator < "u" && /Mac|iP(hone|[oa]d)/.test(navigator.platform), DN = typeof navigator < "u" && /Win/.test(navigator.platform); +function _N(t) { + let e = t.split(/-(?!$)/), n = e[e.length - 1]; + n == "Space" && (n = " "); + let r, i, s, o; + for (let l = 0; l < e.length - 1; l++) { + let a = e[l]; + if (/^(cmd|meta|m)$/i.test(a)) + o = !0; + else if (/^a(lt)?$/i.test(a)) + r = !0; + else if (/^(c|ctrl|control)$/i.test(a)) + i = !0; + else if (/^s(hift)?$/i.test(a)) + s = !0; + else if (/^mod$/i.test(a)) + IN ? o = !0 : i = !0; + else + throw new Error("Unrecognized modifier name: " + a); + } + return r && (n = "Alt-" + n), i && (n = "Ctrl-" + n), o && (n = "Meta-" + n), s && (n = "Shift-" + n), n; +} +function RN(t) { + let e = /* @__PURE__ */ Object.create(null); + for (let n in t) + e[_N(n)] = t[n]; + return e; +} +function _d(t, e, n = !0) { + return e.altKey && (t = "Alt-" + t), e.ctrlKey && (t = "Ctrl-" + t), e.metaKey && (t = "Meta-" + t), n && e.shiftKey && (t = "Shift-" + t), t; +} +function zN(t) { + return new Dt({ props: { handleKeyDown: Y6(t) } }); +} +function Y6(t) { + let e = RN(t); + return function(n, r) { + let i = AN(r), s, o = e[_d(i, r)]; + if (o && o(n.state, n.dispatch, n)) + return !0; + if (i.length == 1 && i != " ") { + if (r.shiftKey) { + let l = e[_d(i, r, !1)]; + if (l && l(n.state, n.dispatch, n)) + return !0; + } + if ((r.altKey || r.metaKey || r.ctrlKey) && // Ctrl-Alt may be used for AltGr on Windows + !(DN && r.ctrlKey && r.altKey) && (s = as[r.keyCode]) && s != i) { + let l = e[_d(s, r)]; + if (l && l(n.state, n.dispatch, n)) + return !0; + } + } + return !1; + }; +} +const Ut = function(t) { + for (var e = 0; ; e++) + if (t = t.previousSibling, !t) + return e; +}, Al = function(t) { + let e = t.assignedSlot || t.parentNode; + return e && e.nodeType == 11 ? e.host : e; +}; +let tp = null; +const ri = function(t, e, n) { + let r = tp || (tp = document.createRange()); + return r.setEnd(t, n ?? t.nodeValue.length), r.setStart(t, e || 0), r; +}, PN = function() { + tp = null; +}, po = function(t, e, n, r) { + return n && (R2(t, e, n, r, -1) || R2(t, e, n, r, 1)); +}, BN = /^(img|br|input|textarea|hr)$/i; +function R2(t, e, n, r, i) { + for (var s; ; ) { + if (t == n && e == r) + return !0; + if (e == (i < 0 ? 0 : Yn(t))) { + let o = t.parentNode; + if (!o || o.nodeType != 1 || X0(t) || BN.test(t.nodeName) || t.contentEditable == "false") + return !1; + e = Ut(t) + (i < 0 ? 0 : 1), t = o; + } else if (t.nodeType == 1) { + let o = t.childNodes[e + (i < 0 ? -1 : 0)]; + if (o.nodeType == 1 && o.contentEditable == "false") + if (!((s = o.pmViewDesc) === null || s === void 0) && s.ignoreForSelection) + e += i; + else + return !1; + else + t = o, e = i < 0 ? Yn(t) : 0; + } else + return !1; + } +} +function Yn(t) { + return t.nodeType == 3 ? t.nodeValue.length : t.childNodes.length; +} +function LN(t, e) { + for (; ; ) { + if (t.nodeType == 3 && e) + return t; + if (t.nodeType == 1 && e > 0) { + if (t.contentEditable == "false") + return null; + t = t.childNodes[e - 1], e = Yn(t); + } else if (t.parentNode && !X0(t)) + e = Ut(t), t = t.parentNode; + else + return null; + } +} +function FN(t, e) { + for (; ; ) { + if (t.nodeType == 3 && e < t.nodeValue.length) + return t; + if (t.nodeType == 1 && e < t.childNodes.length) { + if (t.contentEditable == "false") + return null; + t = t.childNodes[e], e = 0; + } else if (t.parentNode && !X0(t)) + e = Ut(t) + 1, t = t.parentNode; + else + return null; + } +} +function VN(t, e, n) { + for (let r = e == 0, i = e == Yn(t); r || i; ) { + if (t == n) + return !0; + let s = Ut(t); + if (t = t.parentNode, !t) + return !1; + r = r && s == 0, i = i && s == Yn(t); + } +} +function X0(t) { + let e; + for (let n = t; n && !(e = n.pmViewDesc); n = n.parentNode) + ; + return e && e.node && e.node.isBlock && (e.dom == t || e.contentDOM == t); +} +const Dh = function(t) { + return t.focusNode && po(t.focusNode, t.focusOffset, t.anchorNode, t.anchorOffset); +}; +function Ps(t, e) { + let n = document.createEvent("Event"); + return n.initEvent("keydown", !0, !0), n.keyCode = t, n.key = n.code = e, n; +} +function HN(t) { + let e = t.activeElement; + for (; e && e.shadowRoot; ) + e = e.shadowRoot.activeElement; + return e; +} +function $N(t, e, n) { + if (t.caretPositionFromPoint) + try { + let r = t.caretPositionFromPoint(e, n); + if (r) + return { node: r.offsetNode, offset: Math.min(Yn(r.offsetNode), r.offset) }; + } catch { + } + if (t.caretRangeFromPoint) { + let r = t.caretRangeFromPoint(e, n); + if (r) + return { node: r.startContainer, offset: Math.min(Yn(r.startContainer), r.startOffset) }; + } +} +const Vr = typeof navigator < "u" ? navigator : null, z2 = typeof document < "u" ? document : null, ys = Vr && Vr.userAgent || "", np = /Edge\/(\d+)/.exec(ys), Z6 = /MSIE \d/.exec(ys), rp = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(ys), Cn = !!(Z6 || rp || np), Qi = Z6 ? document.documentMode : rp ? +rp[1] : np ? +np[1] : 0, Qn = !Cn && /gecko\/(\d+)/i.test(ys); +Qn && +(/Firefox\/(\d+)/.exec(ys) || [0, 0])[1]; +const ip = !Cn && /Chrome\/(\d+)/.exec(ys), Vt = !!ip, X6 = ip ? +ip[1] : 0, Kt = !Cn && !!Vr && /Apple Computer/.test(Vr.vendor), Il = Kt && (/Mobile\/\w+/.test(ys) || !!Vr && Vr.maxTouchPoints > 2), Kn = Il || (Vr ? /Mac/.test(Vr.platform) : !1), Q6 = Vr ? /Win/.test(Vr.platform) : !1, gi = /Android \d/.test(ys), Q0 = !!z2 && "webkitFontSmoothing" in z2.documentElement.style, qN = Q0 ? +(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0; +function jN(t) { + let e = t.defaultView && t.defaultView.visualViewport; + return e ? { + left: 0, + right: e.width, + top: 0, + bottom: e.height + } : { + left: 0, + right: t.documentElement.clientWidth, + top: 0, + bottom: t.documentElement.clientHeight + }; +} +function Yr(t, e) { + return typeof t == "number" ? t : t[e]; +} +function WN(t) { + let e = t.getBoundingClientRect(), n = e.width / t.offsetWidth || 1, r = e.height / t.offsetHeight || 1; + return { + left: e.left, + right: e.left + t.clientWidth * n, + top: e.top, + bottom: e.top + t.clientHeight * r + }; +} +function P2(t, e, n) { + let r = t.someProp("scrollThreshold") || 0, i = t.someProp("scrollMargin") || 5, s = t.dom.ownerDocument; + for (let o = n || t.dom; o; ) { + if (o.nodeType != 1) { + o = Al(o); + continue; + } + let l = o, a = l == s.body, u = a ? jN(s) : WN(l), c = 0, h = 0; + if (e.top < u.top + Yr(r, "top") ? h = -(u.top - e.top + Yr(i, "top")) : e.bottom > u.bottom - Yr(r, "bottom") && (h = e.bottom - e.top > u.bottom - u.top ? e.top + Yr(i, "top") - u.top : e.bottom - u.bottom + Yr(i, "bottom")), e.left < u.left + Yr(r, "left") ? c = -(u.left - e.left + Yr(i, "left")) : e.right > u.right - Yr(r, "right") && (c = e.right - u.right + Yr(i, "right")), c || h) + if (a) + s.defaultView.scrollBy(c, h); + else { + let f = l.scrollLeft, m = l.scrollTop; + h && (l.scrollTop += h), c && (l.scrollLeft += c); + let y = l.scrollLeft - f, b = l.scrollTop - m; + e = { left: e.left - y, top: e.top - b, right: e.right - y, bottom: e.bottom - b }; + } + let d = a ? "fixed" : getComputedStyle(o).position; + if (/^(fixed|sticky)$/.test(d)) + break; + o = d == "absolute" ? o.offsetParent : Al(o); + } +} +function UN(t) { + let e = t.dom.getBoundingClientRect(), n = Math.max(0, e.top), r, i; + for (let s = (e.left + e.right) / 2, o = n + 1; o < Math.min(innerHeight, e.bottom); o += 5) { + let l = t.root.elementFromPoint(s, o); + if (!l || l == t.dom || !t.dom.contains(l)) + continue; + let a = l.getBoundingClientRect(); + if (a.top >= n - 20) { + r = l, i = a.top; + break; + } + } + return { refDOM: r, refTop: i, stack: ey(t.dom) }; +} +function ey(t) { + let e = [], n = t.ownerDocument; + for (let r = t; r && (e.push({ dom: r, top: r.scrollTop, left: r.scrollLeft }), t != n); r = Al(r)) + ; + return e; +} +function GN({ refDOM: t, refTop: e, stack: n }) { + let r = t ? t.getBoundingClientRect().top : 0; + ty(n, r == 0 ? 0 : r - e); +} +function ty(t, e) { + for (let n = 0; n < t.length; n++) { + let { dom: r, top: i, left: s } = t[n]; + r.scrollTop != i + e && (r.scrollTop = i + e), r.scrollLeft != s && (r.scrollLeft = s); + } +} +let Eo = null; +function KN(t) { + if (t.setActive) + return t.setActive(); + if (Eo) + return t.focus(Eo); + let e = ey(t); + t.focus(Eo == null ? { + get preventScroll() { + return Eo = { preventScroll: !0 }, !0; + } + } : void 0), Eo || (Eo = !1, ty(e, 0)); +} +function ny(t, e) { + let n, r = 2e8, i, s = 0, o = e.top, l = e.top, a, u; + for (let c = t.firstChild, h = 0; c; c = c.nextSibling, h++) { + let d; + if (c.nodeType == 1) + d = c.getClientRects(); + else if (c.nodeType == 3) + d = ri(c).getClientRects(); + else + continue; + for (let f = 0; f < d.length; f++) { + let m = d[f]; + if (m.top <= o && m.bottom >= l) { + o = Math.max(m.bottom, o), l = Math.min(m.top, l); + let y = m.left > e.left ? m.left - e.left : m.right < e.left ? e.left - m.right : 0; + if (y < r) { + n = c, r = y, i = y && n.nodeType == 3 ? { + left: m.right < e.left ? m.right : m.left, + top: e.top + } : e, c.nodeType == 1 && y && (s = h + (e.left >= (m.left + m.right) / 2 ? 1 : 0)); + continue; + } + } else m.top > e.top && !a && m.left <= e.left && m.right >= e.left && (a = c, u = { left: Math.max(m.left, Math.min(m.right, e.left)), top: m.top }); + !n && (e.left >= m.right && e.top >= m.top || e.left >= m.left && e.top >= m.bottom) && (s = h + 1); + } + } + return !n && a && (n = a, i = u, r = 0), n && n.nodeType == 3 ? JN(n, i) : !n || r && n.nodeType == 1 ? { node: t, offset: s } : ny(n, i); +} +function JN(t, e) { + let n = t.nodeValue.length, r = document.createRange(), i; + for (let s = 0; s < n; s++) { + r.setEnd(t, s + 1), r.setStart(t, s); + let o = Ri(r, 1); + if (o.top != o.bottom && v1(e, o)) { + i = { node: t, offset: s + (e.left >= (o.left + o.right) / 2 ? 1 : 0) }; + break; + } + } + return r.detach(), i || { node: t, offset: 0 }; +} +function v1(t, e) { + return t.left >= e.left - 1 && t.left <= e.right + 1 && t.top >= e.top - 1 && t.top <= e.bottom + 1; +} +function YN(t, e) { + let n = t.parentNode; + return n && /^li$/i.test(n.nodeName) && e.left < t.getBoundingClientRect().left ? n : t; +} +function ZN(t, e, n) { + let { node: r, offset: i } = ny(e, n), s = -1; + if (r.nodeType == 1 && !r.firstChild) { + let o = r.getBoundingClientRect(); + s = o.left != o.right && n.left > (o.left + o.right) / 2 ? 1 : -1; + } + return t.docView.posFromDOM(r, i, s); +} +function XN(t, e, n, r) { + let i = -1; + for (let s = e, o = !1; s != t.dom; ) { + let l = t.docView.nearestDesc(s, !0), a; + if (!l) + return null; + if (l.dom.nodeType == 1 && (l.node.isBlock && l.parent || !l.contentDOM) && // Ignore elements with zero-size bounding rectangles + ((a = l.dom.getBoundingClientRect()).width || a.height) && (l.node.isBlock && l.parent && !/^T(R|BODY|HEAD|FOOT)$/.test(l.dom.nodeName) && (!o && a.left > r.left || a.top > r.top ? i = l.posBefore : (!o && a.right < r.left || a.bottom < r.top) && (i = l.posAfter), o = !0), !l.contentDOM && i < 0 && !l.node.isText)) + return (l.node.isBlock ? r.top < (a.top + a.bottom) / 2 : r.left < (a.left + a.right) / 2) ? l.posBefore : l.posAfter; + s = l.dom.parentNode; + } + return i > -1 ? i : t.docView.posFromDOM(e, n, -1); +} +function ry(t, e, n) { + let r = t.childNodes.length; + if (r && n.top < n.bottom) + for (let i = Math.max(0, Math.min(r - 1, Math.floor(r * (e.top - n.top) / (n.bottom - n.top)) - 2)), s = i; ; ) { + let o = t.childNodes[s]; + if (o.nodeType == 1) { + let l = o.getClientRects(); + for (let a = 0; a < l.length; a++) { + let u = l[a]; + if (v1(e, u)) + return ry(o, e, u); + } + } + if ((s = (s + 1) % r) == i) + break; + } + return t; +} +function QN(t, e) { + let n = t.dom.ownerDocument, r, i = 0, s = $N(n, e.left, e.top); + s && ({ node: r, offset: i } = s); + let o = (t.root.elementFromPoint ? t.root : n).elementFromPoint(e.left, e.top), l; + if (!o || !t.dom.contains(o.nodeType != 1 ? o.parentNode : o)) { + let u = t.dom.getBoundingClientRect(); + if (!v1(e, u) || (o = ry(t.dom, e, u), !o)) + return null; + } + if (Kt) + for (let u = o; r && u; u = Al(u)) + u.draggable && (r = void 0); + if (o = YN(o, e), r) { + if (Qn && r.nodeType == 1 && (i = Math.min(i, r.childNodes.length), i < r.childNodes.length)) { + let c = r.childNodes[i], h; + c.nodeName == "IMG" && (h = c.getBoundingClientRect()).right <= e.left && h.bottom > e.top && i++; + } + let u; + Q0 && i && r.nodeType == 1 && (u = r.childNodes[i - 1]).nodeType == 1 && u.contentEditable == "false" && u.getBoundingClientRect().top >= e.top && i--, r == t.dom && i == r.childNodes.length - 1 && r.lastChild.nodeType == 1 && e.top > r.lastChild.getBoundingClientRect().bottom ? l = t.state.doc.content.size : (i == 0 || r.nodeType != 1 || r.childNodes[i - 1].nodeName != "BR") && (l = XN(t, r, i, e)); + } + l == null && (l = ZN(t, o, e)); + let a = t.docView.nearestDesc(o, !0); + return { pos: l, inside: a ? a.posAtStart - a.border : -1 }; +} +function B2(t) { + return t.top < t.bottom || t.left < t.right; +} +function Ri(t, e) { + let n = t.getClientRects(); + if (n.length) { + let r = n[e < 0 ? 0 : n.length - 1]; + if (B2(r)) + return r; + } + return Array.prototype.find.call(n, B2) || t.getBoundingClientRect(); +} +const eM = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; +function iy(t, e, n) { + let { node: r, offset: i, atom: s } = t.docView.domFromPos(e, n < 0 ? -1 : 1), o = Q0 || Qn; + if (r.nodeType == 3) + if (o && (eM.test(r.nodeValue) || (n < 0 ? !i : i == r.nodeValue.length))) { + let a = Ri(ri(r, i, i), n); + if (Qn && i && /\s/.test(r.nodeValue[i - 1]) && i < r.nodeValue.length) { + let u = Ri(ri(r, i - 1, i - 1), -1); + if (u.top == a.top) { + let c = Ri(ri(r, i, i + 1), -1); + if (c.top != a.top) + return Xl(c, c.left < u.left); + } + } + return a; + } else { + let a = i, u = i, c = n < 0 ? 1 : -1; + return n < 0 && !i ? (u++, c = -1) : n >= 0 && i == r.nodeValue.length ? (a--, c = 1) : n < 0 ? a-- : u++, Xl(Ri(ri(r, a, u), c), c < 0); + } + if (!t.state.doc.resolve(e - (s || 0)).parent.inlineContent) { + if (s == null && i && (n < 0 || i == Yn(r))) { + let a = r.childNodes[i - 1]; + if (a.nodeType == 1) + return Rd(a.getBoundingClientRect(), !1); + } + if (s == null && i < Yn(r)) { + let a = r.childNodes[i]; + if (a.nodeType == 1) + return Rd(a.getBoundingClientRect(), !0); + } + return Rd(r.getBoundingClientRect(), n >= 0); + } + if (s == null && i && (n < 0 || i == Yn(r))) { + let a = r.childNodes[i - 1], u = a.nodeType == 3 ? ri(a, Yn(a) - (o ? 0 : 1)) : a.nodeType == 1 && (a.nodeName != "BR" || !a.nextSibling) ? a : null; + if (u) + return Xl(Ri(u, 1), !1); + } + if (s == null && i < Yn(r)) { + let a = r.childNodes[i]; + for (; a.pmViewDesc && a.pmViewDesc.ignoreForCoords; ) + a = a.nextSibling; + let u = a ? a.nodeType == 3 ? ri(a, 0, o ? 0 : 1) : a.nodeType == 1 ? a : null : null; + if (u) + return Xl(Ri(u, -1), !0); + } + return Xl(Ri(r.nodeType == 3 ? ri(r) : r, -n), n >= 0); +} +function Xl(t, e) { + if (t.width == 0) + return t; + let n = e ? t.left : t.right; + return { top: t.top, bottom: t.bottom, left: n, right: n }; +} +function Rd(t, e) { + if (t.height == 0) + return t; + let n = e ? t.top : t.bottom; + return { top: n, bottom: n, left: t.left, right: t.right }; +} +function sy(t, e, n) { + let r = t.state, i = t.root.activeElement; + r != e && t.updateState(e), i != t.dom && t.focus(); + try { + return n(); + } finally { + r != e && t.updateState(r), i != t.dom && i && i.focus(); + } +} +function tM(t, e, n) { + let r = e.selection, i = n == "up" ? r.$from : r.$to; + return sy(t, e, () => { + let { node: s } = t.docView.domFromPos(i.pos, n == "up" ? -1 : 1); + for (; ; ) { + let l = t.docView.nearestDesc(s, !0); + if (!l) + break; + if (l.node.isBlock) { + s = l.contentDOM || l.dom; + break; + } + s = l.dom.parentNode; + } + let o = iy(t, i.pos, 1); + for (let l = s.firstChild; l; l = l.nextSibling) { + let a; + if (l.nodeType == 1) + a = l.getClientRects(); + else if (l.nodeType == 3) + a = ri(l, 0, l.nodeValue.length).getClientRects(); + else + continue; + for (let u = 0; u < a.length; u++) { + let c = a[u]; + if (c.bottom > c.top + 1 && (n == "up" ? o.top - c.top > (c.bottom - o.top) * 2 : c.bottom - o.bottom > (o.bottom - c.top) * 2)) + return !1; + } + } + return !0; + }); +} +const nM = /[\u0590-\u08ac]/; +function rM(t, e, n) { + let { $head: r } = e.selection; + if (!r.parent.isTextblock) + return !1; + let i = r.parentOffset, s = !i, o = i == r.parent.content.size, l = t.domSelection(); + return l ? !nM.test(r.parent.textContent) || !l.modify ? n == "left" || n == "backward" ? s : o : sy(t, e, () => { + let { focusNode: a, focusOffset: u, anchorNode: c, anchorOffset: h } = t.domSelectionRange(), d = l.caretBidiLevel; + l.modify("move", n, "character"); + let f = r.depth ? t.docView.domAfterPos(r.before()) : t.dom, { focusNode: m, focusOffset: y } = t.domSelectionRange(), b = m && !f.contains(m.nodeType == 1 ? m : m.parentNode) || a == m && u == y; + try { + l.collapse(c, h), a && (a != c || u != h) && l.extend && l.extend(a, u); + } catch { + } + return d != null && (l.caretBidiLevel = d), b; + }) : r.pos == r.start() || r.pos == r.end(); +} +let L2 = null, F2 = null, V2 = !1; +function iM(t, e, n) { + return L2 == e && F2 == n ? V2 : (L2 = e, F2 = n, V2 = n == "up" || n == "down" ? tM(t, e, n) : rM(t, e, n)); +} +const er = 0, H2 = 1, Bs = 2, Hr = 3; +class eu { + constructor(e, n, r, i) { + this.parent = e, this.children = n, this.dom = r, this.contentDOM = i, this.dirty = er, r.pmViewDesc = this; + } + // Used to check whether a given description corresponds to a + // widget/mark/node. + matchesWidget(e) { + return !1; + } + matchesMark(e) { + return !1; + } + matchesNode(e, n, r) { + return !1; + } + matchesHack(e) { + return !1; + } + // When parsing in-editor content (in domchange.js), we allow + // descriptions to determine the parse rules that should be used to + // parse them. + parseRule() { + return null; + } + // Used by the editor's event handler to ignore events that come + // from certain descs. + stopEvent(e) { + return !1; + } + // The size of the content represented by this desc. + get size() { + let e = 0; + for (let n = 0; n < this.children.length; n++) + e += this.children[n].size; + return e; + } + // For block nodes, this represents the space taken up by their + // start/end tokens. + 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 n = 0, r = this.posAtStart; ; n++) { + let i = this.children[n]; + if (i == e) + return r; + r += i.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, n, r) { + if (this.contentDOM && this.contentDOM.contains(e.nodeType == 1 ? e : e.parentNode)) + if (r < 0) { + let s, o; + if (e == this.contentDOM) + s = e.childNodes[n - 1]; + else { + for (; e.parentNode != this.contentDOM; ) + e = e.parentNode; + s = e.previousSibling; + } + for (; s && !((o = s.pmViewDesc) && o.parent == this); ) + s = s.previousSibling; + return s ? this.posBeforeChild(o) + o.size : this.posAtStart; + } else { + let s, o; + if (e == this.contentDOM) + s = e.childNodes[n]; + else { + for (; e.parentNode != this.contentDOM; ) + e = e.parentNode; + s = e.nextSibling; + } + for (; s && !((o = s.pmViewDesc) && o.parent == this); ) + s = s.nextSibling; + return s ? this.posBeforeChild(o) : this.posAtEnd; + } + let i; + if (e == this.dom && this.contentDOM) + i = n > Ut(this.contentDOM); + else if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) + i = e.compareDocumentPosition(this.contentDOM) & 2; + else if (this.dom.firstChild) { + if (n == 0) + for (let s = e; ; s = s.parentNode) { + if (s == this.dom) { + i = !1; + break; + } + if (s.previousSibling) + break; + } + if (i == null && n == e.childNodes.length) + for (let s = e; ; s = s.parentNode) { + if (s == this.dom) { + i = !0; + break; + } + if (s.nextSibling) + break; + } + } + return i ?? r > 0 ? this.posAtEnd : this.posAtStart; + } + nearestDesc(e, n = !1) { + for (let r = !0, i = e; i; i = i.parentNode) { + let s = this.getDesc(i), o; + if (s && (!n || s.node)) + if (r && (o = s.nodeDOM) && !(o.nodeType == 1 ? o.contains(e.nodeType == 1 ? e : e.parentNode) : o == e)) + r = !1; + else + return s; + } + } + getDesc(e) { + let n = e.pmViewDesc; + for (let r = n; r; r = r.parent) + if (r == this) + return n; + } + posFromDOM(e, n, r) { + for (let i = e; i; i = i.parentNode) { + let s = this.getDesc(i); + if (s) + return s.localPosFromDOM(e, n, r); + } + return -1; + } + // Find the desc for the node after the given pos, if any. (When a + // parent node overrode rendering, there might not be one.) + descAt(e) { + for (let n = 0, r = 0; n < this.children.length; n++) { + let i = this.children[n], s = r + i.size; + if (r == e && s != r) { + for (; !i.border && i.children.length; ) + for (let o = 0; o < i.children.length; o++) { + let l = i.children[o]; + if (l.size) { + i = l; + break; + } + } + return i; + } + if (e < s) + return i.descAt(e - r - i.border); + r = s; + } + } + domFromPos(e, n) { + if (!this.contentDOM) + return { node: this.dom, offset: 0, atom: e + 1 }; + let r = 0, i = 0; + for (let s = 0; r < this.children.length; r++) { + let o = this.children[r], l = s + o.size; + if (l > e || o instanceof ly) { + i = e - s; + break; + } + s = l; + } + if (i) + return this.children[r].domFromPos(i - this.children[r].border, n); + for (let s; r && !(s = this.children[r - 1]).size && s instanceof oy && s.side >= 0; r--) + ; + if (n <= 0) { + let s, o = !0; + for (; s = r ? this.children[r - 1] : null, !(!s || s.dom.parentNode == this.contentDOM); r--, o = !1) + ; + return s && n && o && !s.border && !s.domAtom ? s.domFromPos(s.size, n) : { node: this.contentDOM, offset: s ? Ut(s.dom) + 1 : 0 }; + } else { + let s, o = !0; + for (; s = r < this.children.length ? this.children[r] : null, !(!s || s.dom.parentNode == this.contentDOM); r++, o = !1) + ; + return s && o && !s.border && !s.domAtom ? s.domFromPos(0, n) : { node: this.contentDOM, offset: s ? Ut(s.dom) : this.contentDOM.childNodes.length }; + } + } + // Used to find a DOM range in a single parent for a given changed + // range. + parseRange(e, n, r = 0) { + if (this.children.length == 0) + return { node: this.contentDOM, from: e, to: n, fromOffset: 0, toOffset: this.contentDOM.childNodes.length }; + let i = -1, s = -1; + for (let o = r, l = 0; ; l++) { + let a = this.children[l], u = o + a.size; + if (i == -1 && e <= u) { + let c = o + a.border; + if (e >= c && n <= u - a.border && a.node && a.contentDOM && this.contentDOM.contains(a.contentDOM)) + return a.parseRange(e, n, c); + e = o; + for (let h = l; h > 0; h--) { + let d = this.children[h - 1]; + if (d.size && d.dom.parentNode == this.contentDOM && !d.emptyChildAt(1)) { + i = Ut(d.dom) + 1; + break; + } + e -= d.size; + } + i == -1 && (i = 0); + } + if (i > -1 && (u > n || l == this.children.length - 1)) { + n = u; + for (let c = l + 1; c < this.children.length; c++) { + let h = this.children[c]; + if (h.size && h.dom.parentNode == this.contentDOM && !h.emptyChildAt(-1)) { + s = Ut(h.dom); + break; + } + n += h.size; + } + s == -1 && (s = this.contentDOM.childNodes.length); + break; + } + o = u; + } + return { node: this.contentDOM, from: e, to: n, fromOffset: i, toOffset: s }; + } + emptyChildAt(e) { + if (this.border || !this.contentDOM || !this.children.length) + return !1; + let n = this.children[e < 0 ? 0 : this.children.length - 1]; + return n.size == 0 || n.emptyChildAt(e); + } + domAfterPos(e) { + let { node: n, offset: r } = this.domFromPos(e, 0); + if (n.nodeType != 1 || r == n.childNodes.length) + throw new RangeError("No node after pos " + e); + return n.childNodes[r]; + } + // View descs are responsible for setting any selection that falls + // entirely inside of them, so that custom implementations can do + // custom things with the selection. Note that this falls apart when + // a selection starts in such a node and ends in another, in which + // case we just use whatever domFromPos produces as a best effort. + setSelection(e, n, r, i = !1) { + let s = Math.min(e, n), o = Math.max(e, n); + for (let f = 0, m = 0; f < this.children.length; f++) { + let y = this.children[f], b = m + y.size; + if (s > m && o < b) + return y.setSelection(e - m - y.border, n - m - y.border, r, i); + m = b; + } + let l = this.domFromPos(e, e ? -1 : 1), a = n == e ? l : this.domFromPos(n, n ? -1 : 1), u = r.root.getSelection(), c = r.domSelectionRange(), h = !1; + if ((Qn || Kt) && e == n) { + let { node: f, offset: m } = l; + if (f.nodeType == 3) { + if (h = !!(m && f.nodeValue[m - 1] == ` +`), h && m == f.nodeValue.length) + for (let y = f, b; y; y = y.parentNode) { + if (b = y.nextSibling) { + b.nodeName == "BR" && (l = a = { node: b.parentNode, offset: Ut(b) + 1 }); + break; + } + let w = y.pmViewDesc; + if (w && w.node && w.node.isBlock) + break; + } + } else { + let y = f.childNodes[m - 1]; + h = y && (y.nodeName == "BR" || y.contentEditable == "false"); + } + } + if (Qn && c.focusNode && c.focusNode != a.node && c.focusNode.nodeType == 1) { + let f = c.focusNode.childNodes[c.focusOffset]; + f && f.contentEditable == "false" && (i = !0); + } + if (!(i || h && Kt) && po(l.node, l.offset, c.anchorNode, c.anchorOffset) && po(a.node, a.offset, c.focusNode, c.focusOffset)) + return; + let d = !1; + if ((u.extend || e == n) && !(h && Qn)) { + u.collapse(l.node, l.offset); + try { + e != n && u.extend(a.node, a.offset), d = !0; + } catch { + } + } + if (!d) { + if (e > n) { + let m = l; + l = a, a = m; + } + let f = document.createRange(); + f.setEnd(a.node, a.offset), f.setStart(l.node, l.offset), u.removeAllRanges(), u.addRange(f); + } + } + ignoreMutation(e) { + return !this.contentDOM && e.type != "selection"; + } + get contentLost() { + return this.contentDOM && this.contentDOM != this.dom && !this.dom.contains(this.contentDOM); + } + // Remove a subtree of the element tree that has been touched + // by a DOM change, so that the next update will redraw it. + markDirty(e, n) { + for (let r = 0, i = 0; i < this.children.length; i++) { + let s = this.children[i], o = r + s.size; + if (r == o ? e <= o && n >= r : e < o && n > r) { + let l = r + s.border, a = o - s.border; + if (e >= l && n <= a) { + this.dirty = e == r || n == o ? Bs : H2, e == l && n == a && (s.contentLost || s.dom.parentNode != this.contentDOM) ? s.dirty = Hr : s.markDirty(e - l, n - l); + return; + } else + s.dirty = s.dom == s.contentDOM && s.dom.parentNode == this.contentDOM && !s.children.length ? Bs : Hr; + } + r = o; + } + this.dirty = Bs; + } + markParentsDirty() { + let e = 1; + for (let n = this.parent; n; n = n.parent, e++) { + let r = e == 1 ? Bs : H2; + n.dirty < r && (n.dirty = r); + } + } + get domAtom() { + return !1; + } + get ignoreForCoords() { + return !1; + } + get ignoreForSelection() { + return !1; + } + isText(e) { + return !1; + } +} +class oy extends eu { + constructor(e, n, r, i) { + let s, o = n.type.toDOM; + if (typeof o == "function" && (o = o(r, () => { + if (!s) + return i; + if (s.parent) + return s.parent.posBeforeChild(s); + })), !n.type.spec.raw) { + if (o.nodeType != 1) { + let l = document.createElement("span"); + l.appendChild(o), o = l; + } + o.contentEditable = "false", o.classList.add("ProseMirror-widget"); + } + super(e, [], o, null), this.widget = n, this.widget = n, s = this; + } + matchesWidget(e) { + return this.dirty == er && e.type.eq(this.widget.type); + } + parseRule() { + return { ignore: !0 }; + } + stopEvent(e) { + let n = this.widget.spec.stopEvent; + return n ? n(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; + } +} +class sM extends eu { + constructor(e, n, r, i) { + super(e, [], n, null), this.textDOM = r, this.text = i; + } + get size() { + return this.text.length; + } + localPosFromDOM(e, n) { + return e != this.textDOM ? this.posAtStart + (n ? this.size : 0) : this.posAtStart + n; + } + domFromPos(e) { + return { node: this.textDOM, offset: e }; + } + ignoreMutation(e) { + return e.type === "characterData" && e.target.nodeValue == e.oldValue; + } +} +class mo extends eu { + constructor(e, n, r, i, s) { + super(e, [], r, i), this.mark = n, this.spec = s; + } + static create(e, n, r, i) { + let s = i.nodeViews[n.type.name], o = s && s(n, i, r); + return (!o || !o.dom) && (o = bo.renderSpec(document, n.type.spec.toDOM(n, r), null, n.attrs)), new mo(e, n, o.dom, o.contentDOM || o.dom, o); + } + parseRule() { + return this.dirty & Hr || this.mark.type.spec.reparseInView ? null : { mark: this.mark.type.name, attrs: this.mark.attrs, contentElement: this.contentDOM }; + } + matchesMark(e) { + return this.dirty != Hr && this.mark.eq(e); + } + markDirty(e, n) { + if (super.markDirty(e, n), this.dirty != er) { + let r = this.parent; + for (; !r.node; ) + r = r.parent; + r.dirty < this.dirty && (r.dirty = this.dirty), this.dirty = er; + } + } + slice(e, n, r) { + let i = mo.create(this.parent, this.mark, !0, r), s = this.children, o = this.size; + n < o && (s = op(s, n, o, r)), e > 0 && (s = op(s, 0, e, r)); + for (let l = 0; l < s.length; l++) + s[l].parent = i; + return i.children = s, i; + } + ignoreMutation(e) { + return this.spec.ignoreMutation ? this.spec.ignoreMutation(e) : super.ignoreMutation(e); + } + destroy() { + this.spec.destroy && this.spec.destroy(), super.destroy(); + } +} +class es extends eu { + constructor(e, n, r, i, s, o, l, a, u) { + super(e, [], s, o), this.node = n, this.outerDeco = r, this.innerDeco = i, this.nodeDOM = l; + } + // By default, a node is rendered using the `toDOM` method from the + // node type spec. But client code can use the `nodeViews` spec to + // supply a custom node view, which can influence various aspects of + // the way the node works. + // + // (Using subclassing for this was intentionally decided against, + // since it'd require exposing a whole slew of finicky + // implementation details to the user code that they probably will + // never need.) + static create(e, n, r, i, s, o) { + let l = s.nodeViews[n.type.name], a, u = l && l(n, s, () => { + if (!a) + return o; + if (a.parent) + return a.parent.posBeforeChild(a); + }, r, i), c = u && u.dom, h = u && u.contentDOM; + if (n.isText) { + if (!c) + c = document.createTextNode(n.text); + else if (c.nodeType != 3) + throw new RangeError("Text must be rendered as a DOM text node"); + } else c || ({ dom: c, contentDOM: h } = bo.renderSpec(document, n.type.spec.toDOM(n), null, n.attrs)); + !h && !n.isText && c.nodeName != "BR" && (c.hasAttribute("contenteditable") || (c.contentEditable = "false"), n.type.spec.draggable && (c.draggable = !0)); + let d = c; + return c = cy(c, r, n), u ? a = new oM(e, n, r, i, c, h || null, d, u, s, o + 1) : n.isText ? new _h(e, n, r, i, c, d, s) : new es(e, n, r, i, c, h || null, d, s, 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 n = this.children.length - 1; n >= 0; n--) { + let r = this.children[n]; + if (this.dom.contains(r.dom.parentNode)) { + e.contentElement = r.dom.parentNode; + break; + } + } + e.contentElement || (e.getContent = () => re.empty); + } + return e; + } + matchesNode(e, n, r) { + return this.dirty == er && e.eq(this.node) && Vc(n, this.outerDeco) && r.eq(this.innerDeco); + } + get size() { + return this.node.nodeSize; + } + get border() { + return this.node.isLeaf ? 0 : 1; + } + // Syncs `this.children` to match `this.node.content` and the local + // decorations, possibly introducing nesting for marks. Then, in a + // separate step, syncs the DOM inside `this.contentDOM` to + // `this.children`. + updateChildren(e, n) { + let r = this.node.inlineContent, i = n, s = e.composing ? this.localCompositionInfo(e, n) : null, o = s && s.pos > -1 ? s : null, l = s && s.pos < 0, a = new aM(this, o && o.node, e); + hM(this.node, this.innerDeco, (u, c, h) => { + u.spec.marks ? a.syncToMarks(u.spec.marks, r, e, c) : u.type.side >= 0 && !h && a.syncToMarks(c == this.node.childCount ? qe.none : this.node.child(c).marks, r, e, c), a.placeWidget(u, e, i); + }, (u, c, h, d) => { + a.syncToMarks(u.marks, r, e, d); + let f; + a.findNodeMatch(u, c, h, d) || l && e.state.selection.from > i && e.state.selection.to < i + u.nodeSize && (f = a.findIndexWithChild(s.node)) > -1 && a.updateNodeAt(u, c, h, f, e) || a.updateNextNode(u, c, h, e, d, i) || a.addNode(u, c, h, e, i), i += u.nodeSize; + }), a.syncToMarks([], r, e, 0), this.node.isTextblock && a.addTextblockHacks(), a.destroyRest(), (a.changed || this.dirty == Bs) && (o && this.protectLocalComposition(e, o), ay(this.contentDOM, this.children, e), Il && dM(this.dom)); + } + localCompositionInfo(e, n) { + let { from: r, to: i } = e.state.selection; + if (!(e.state.selection instanceof Ce) || r < n || i > n + this.node.content.size) + return null; + let s = e.input.compositionNode; + if (!s || !this.dom.contains(s.parentNode)) + return null; + if (this.node.inlineContent) { + let o = s.nodeValue, l = fM(this.node.content, o, r - n, i - n); + return l < 0 ? null : { node: s, pos: l, text: o }; + } else + return { node: s, pos: -1, text: "" }; + } + protectLocalComposition(e, { node: n, pos: r, text: i }) { + if (this.getDesc(n)) + return; + let s = n; + for (; s.parentNode != this.contentDOM; s = s.parentNode) { + for (; s.previousSibling; ) + s.parentNode.removeChild(s.previousSibling); + for (; s.nextSibling; ) + s.parentNode.removeChild(s.nextSibling); + s.pmViewDesc && (s.pmViewDesc = void 0); + } + let o = new sM(this, s, n, i); + e.input.compositionNodes.push(o), this.children = op(this.children, r, r + i.length, e, o); + } + // If this desc must be updated to match the given node decoration, + // do so and return true. + update(e, n, r, i) { + return this.dirty == Hr || !e.sameMarkup(this.node) ? !1 : (this.updateInner(e, n, r, i), !0); + } + updateInner(e, n, r, i) { + this.updateOuterDeco(n), this.node = e, this.innerDeco = r, this.contentDOM && this.updateChildren(i, this.posAtStart), this.dirty = er; + } + updateOuterDeco(e) { + if (Vc(e, this.outerDeco)) + return; + let n = this.nodeDOM.nodeType != 1, r = this.dom; + this.dom = uy(this.dom, this.nodeDOM, sp(this.outerDeco, this.node, n), sp(e, this.node, n)), this.dom != r && (r.pmViewDesc = void 0, this.dom.pmViewDesc = this), this.outerDeco = e; + } + // Mark this node as being the selected node. + selectNode() { + this.nodeDOM.nodeType == 1 && (this.nodeDOM.classList.add("ProseMirror-selectednode"), (this.contentDOM || !this.node.type.spec.draggable) && (this.nodeDOM.draggable = !0)); + } + // Remove selected node marking from this node. + 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 $2(t, e, n, r, i) { + cy(r, e, t); + let s = new es(void 0, t, e, n, r, r, r, i, 0); + return s.contentDOM && s.updateChildren(i, 0), s; +} +class _h extends es { + constructor(e, n, r, i, s, o, l) { + super(e, n, r, i, s, null, o, l, 0); + } + parseRule() { + let e = this.nodeDOM.parentNode; + for (; e && e != this.dom && !e.pmIsDeco; ) + e = e.parentNode; + return { skip: e || !0 }; + } + update(e, n, r, i) { + return this.dirty == Hr || this.dirty != er && !this.inParent() || !e.sameMarkup(this.node) ? !1 : (this.updateOuterDeco(n), (this.dirty != er || e.text != this.node.text) && e.text != this.nodeDOM.nodeValue && (this.nodeDOM.nodeValue = e.text, i.trackWrites == this.nodeDOM && (i.trackWrites = null)), this.node = e, this.dirty = er, !0); + } + inParent() { + let e = this.parent.contentDOM; + for (let n = this.nodeDOM; n; n = n.parentNode) + if (n == e) + return !0; + return !1; + } + domFromPos(e) { + return { node: this.nodeDOM, offset: e }; + } + localPosFromDOM(e, n, r) { + return e == this.nodeDOM ? this.posAtStart + Math.min(n, this.node.text.length) : super.localPosFromDOM(e, n, r); + } + ignoreMutation(e) { + return e.type != "characterData" && e.type != "selection"; + } + slice(e, n, r) { + let i = this.node.cut(e, n), s = document.createTextNode(i.text); + return new _h(this.parent, i, this.outerDeco, this.innerDeco, s, s, r); + } + markDirty(e, n) { + super.markDirty(e, n), this.dom != this.nodeDOM && (e == 0 || n == this.nodeDOM.nodeValue.length) && (this.dirty = Hr); + } + get domAtom() { + return !1; + } + isText(e) { + return this.node.text == e; + } +} +class ly extends eu { + parseRule() { + return { ignore: !0 }; + } + matchesHack(e) { + return this.dirty == er && this.dom.nodeName == e; + } + get domAtom() { + return !0; + } + get ignoreForCoords() { + return this.dom.nodeName == "IMG"; + } +} +class oM extends es { + constructor(e, n, r, i, s, o, l, a, u, c) { + super(e, n, r, i, s, o, l, u, c), this.spec = a; + } + // A custom `update` method gets to decide whether the update goes + // through. If it does, and there's a `contentDOM` node, our logic + // updates the children. + update(e, n, r, i) { + if (this.dirty == Hr) + return !1; + if (this.spec.update && (this.node.type == e.type || this.spec.multiType)) { + let s = this.spec.update(e, n, r); + return s && this.updateInner(e, n, r, i), s; + } else return !this.contentDOM && !e.isLeaf ? !1 : super.update(e, n, r, i); + } + selectNode() { + this.spec.selectNode ? this.spec.selectNode() : super.selectNode(); + } + deselectNode() { + this.spec.deselectNode ? this.spec.deselectNode() : super.deselectNode(); + } + setSelection(e, n, r, i) { + this.spec.setSelection ? this.spec.setSelection(e, n, r.root) : super.setSelection(e, n, r, i); + } + 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 ay(t, e, n) { + let r = t.firstChild, i = !1; + for (let s = 0; s < e.length; s++) { + let o = e[s], l = o.dom; + if (l.parentNode == t) { + for (; l != r; ) + r = q2(r), i = !0; + r = r.nextSibling; + } else + i = !0, t.insertBefore(l, r); + if (o instanceof mo) { + let a = r ? r.previousSibling : t.lastChild; + ay(o.contentDOM, o.children, n), r = a ? a.nextSibling : t.firstChild; + } + } + for (; r; ) + r = q2(r), i = !0; + i && n.trackWrites == t && (n.trackWrites = null); +} +const Ra = function(t) { + t && (this.nodeName = t); +}; +Ra.prototype = /* @__PURE__ */ Object.create(null); +const Ls = [new Ra()]; +function sp(t, e, n) { + if (t.length == 0) + return Ls; + let r = n ? Ls[0] : new Ra(), i = [r]; + for (let s = 0; s < t.length; s++) { + let o = t[s].type.attrs; + if (o) { + o.nodeName && i.push(r = new Ra(o.nodeName)); + for (let l in o) { + let a = o[l]; + a != null && (n && i.length == 1 && i.push(r = new Ra(e.isInline ? "span" : "div")), l == "class" ? r.class = (r.class ? r.class + " " : "") + a : l == "style" ? r.style = (r.style ? r.style + ";" : "") + a : l != "nodeName" && (r[l] = a)); + } + } + } + return i; +} +function uy(t, e, n, r) { + if (n == Ls && r == Ls) + return e; + let i = e; + for (let s = 0; s < r.length; s++) { + let o = r[s], l = n[s]; + if (s) { + let a; + l && l.nodeName == o.nodeName && i != t && (a = i.parentNode) && a.nodeName.toLowerCase() == o.nodeName || (a = document.createElement(o.nodeName), a.pmIsDeco = !0, a.appendChild(i), l = Ls[0]), i = a; + } + lM(i, l || Ls[0], o); + } + return i; +} +function lM(t, e, n) { + for (let r in e) + r != "class" && r != "style" && r != "nodeName" && !(r in n) && t.removeAttribute(r); + for (let r in n) + r != "class" && r != "style" && r != "nodeName" && n[r] != e[r] && t.setAttribute(r, n[r]); + if (e.class != n.class) { + let r = e.class ? e.class.split(" ").filter(Boolean) : [], i = n.class ? n.class.split(" ").filter(Boolean) : []; + for (let s = 0; s < r.length; s++) + i.indexOf(r[s]) == -1 && t.classList.remove(r[s]); + for (let s = 0; s < i.length; s++) + r.indexOf(i[s]) == -1 && t.classList.add(i[s]); + t.classList.length == 0 && t.removeAttribute("class"); + } + if (e.style != n.style) { + if (e.style) { + let r = /\s*([\w\-\xa1-\uffff]+)\s*:(?:"(?:\\.|[^"])*"|'(?:\\.|[^'])*'|\(.*?\)|[^;])*/g, i; + for (; i = r.exec(e.style); ) + t.style.removeProperty(i[1]); + } + n.style && (t.style.cssText += n.style); + } +} +function cy(t, e, n) { + return uy(t, t, Ls, sp(e, n, t.nodeType != 1)); +} +function Vc(t, e) { + if (t.length != e.length) + return !1; + for (let n = 0; n < t.length; n++) + if (!t[n].type.eq(e[n].type)) + return !1; + return !0; +} +function q2(t) { + let e = t.nextSibling; + return t.parentNode.removeChild(t), e; +} +class aM { + constructor(e, n, r) { + this.lock = n, this.view = r, this.index = 0, this.stack = [], this.changed = !1, this.top = e, this.preMatch = uM(e.node.content, e); + } + // Destroy and remove the children between the given indices in + // `this.top`. + destroyBetween(e, n) { + if (e != n) { + for (let r = e; r < n; r++) + this.top.children[r].destroy(); + this.top.children.splice(e, n - e), this.changed = !0; + } + } + // Destroy all remaining children in `this.top`. + destroyRest() { + this.destroyBetween(this.index, this.top.children.length); + } + // Sync the current stack of mark descs with the given array of + // marks, reusing existing mark descs when possible. + syncToMarks(e, n, r, i) { + let s = 0, o = this.stack.length >> 1, l = Math.min(o, e.length); + for (; s < l && (s == o - 1 ? this.top : this.stack[s + 1 << 1]).matchesMark(e[s]) && e[s].type.spec.spanning !== !1; ) + s++; + for (; s < o; ) + this.destroyRest(), this.top.dirty = er, this.index = this.stack.pop(), this.top = this.stack.pop(), o--; + for (; o < e.length; ) { + this.stack.push(this.top, this.index + 1); + let a = -1, u = this.top.children.length; + i < this.preMatch.index && (u = Math.min(this.index + 3, u)); + for (let c = this.index; c < u; c++) { + let h = this.top.children[c]; + if (h.matchesMark(e[o]) && !this.isLocked(h.dom)) { + a = c; + break; + } + } + if (a > -1) + a > this.index && (this.changed = !0, this.destroyBetween(this.index, a)), this.top = this.top.children[this.index]; + else { + let c = mo.create(this.top, e[o], n, r); + this.top.children.splice(this.index, 0, c), this.top = c, this.changed = !0; + } + this.index = 0, o++; + } + } + // Try to find a node desc matching the given data. Skip over it and + // return true when successful. + findNodeMatch(e, n, r, i) { + let s = -1, o; + if (i >= this.preMatch.index && (o = this.preMatch.matches[i - this.preMatch.index]).parent == this.top && o.matchesNode(e, n, r)) + s = this.top.children.indexOf(o, this.index); + else + for (let l = this.index, a = Math.min(this.top.children.length, l + 5); l < a; l++) { + let u = this.top.children[l]; + if (u.matchesNode(e, n, r) && !this.preMatch.matched.has(u)) { + s = l; + break; + } + } + return s < 0 ? !1 : (this.destroyBetween(this.index, s), this.index++, !0); + } + updateNodeAt(e, n, r, i, s) { + let o = this.top.children[i]; + return o.dirty == Hr && o.dom == o.contentDOM && (o.dirty = Bs), o.update(e, n, r, s) ? (this.destroyBetween(this.index, i), this.index++, !0) : !1; + } + findIndexWithChild(e) { + for (; ; ) { + let n = e.parentNode; + if (!n) + return -1; + if (n == this.top.contentDOM) { + let r = e.pmViewDesc; + if (r) { + for (let i = this.index; i < this.top.children.length; i++) + if (this.top.children[i] == r) + return i; + } + return -1; + } + e = n; + } + } + // Try to update the next node, if any, to the given data. Checks + // pre-matches to avoid overwriting nodes that could still be used. + updateNextNode(e, n, r, i, s, o) { + for (let l = this.index; l < this.top.children.length; l++) { + let a = this.top.children[l]; + if (a instanceof es) { + let u = this.preMatch.matched.get(a); + if (u != null && u != s) + return !1; + let c = a.dom, h, d = this.isLocked(c) && !(e.isText && a.node && a.node.isText && a.nodeDOM.nodeValue == e.text && a.dirty != Hr && Vc(n, a.outerDeco)); + if (!d && a.update(e, n, r, i)) + return this.destroyBetween(this.index, l), a.dom != c && (this.changed = !0), this.index++, !0; + if (!d && (h = this.recreateWrapper(a, e, n, r, i, o))) + return this.destroyBetween(this.index, l), this.top.children[this.index] = h, h.contentDOM && (h.dirty = Bs, h.updateChildren(i, o + 1), h.dirty = er), this.changed = !0, this.index++, !0; + break; + } + } + return !1; + } + // When a node with content is replaced by a different node with + // identical content, move over its children. + recreateWrapper(e, n, r, i, s, o) { + if (e.dirty || n.isAtom || !e.children.length || !e.node.content.eq(n.content) || !Vc(r, e.outerDeco) || !i.eq(e.innerDeco)) + return null; + let l = es.create(this.top, n, r, i, s, o); + if (l.contentDOM) { + l.children = e.children, e.children = []; + for (let a of l.children) + a.parent = l; + } + return e.destroy(), l; + } + // Insert the node as a newly created node desc. + addNode(e, n, r, i, s) { + let o = es.create(this.top, e, n, r, i, s); + o.contentDOM && o.updateChildren(i, s + 1), this.top.children.splice(this.index++, 0, o), this.changed = !0; + } + placeWidget(e, n, r) { + let i = this.index < this.top.children.length ? this.top.children[this.index] : null; + if (i && i.matchesWidget(e) && (e == i.widget || !i.widget.type.toDOM.parentNode)) + this.index++; + else { + let s = new oy(this.top, e, n, r); + this.top.children.splice(this.index++, 0, s), this.changed = !0; + } + } + // Make sure a textblock looks and behaves correctly in + // contentEditable. + addTextblockHacks() { + let e = this.top.children[this.index - 1], n = this.top; + for (; e instanceof mo; ) + n = e, e = n.children[n.children.length - 1]; + (!e || // Empty textblock + !(e instanceof _h) || /\n$/.test(e.node.text) || this.view.requiresGeckoHackNode && /\s$/.test(e.node.text)) && ((Kt || Vt) && e && e.dom.contentEditable == "false" && this.addHackNode("IMG", n), this.addHackNode("BR", this.top)); + } + addHackNode(e, n) { + if (n == this.top && this.index < n.children.length && n.children[this.index].matchesHack(e)) + this.index++; + else { + let r = document.createElement(e); + e == "IMG" && (r.className = "ProseMirror-separator", r.alt = ""), e == "BR" && (r.className = "ProseMirror-trailingBreak"); + let i = new ly(this.top, [], r, null); + n != this.top ? n.children.push(i) : n.children.splice(this.index++, 0, i), this.changed = !0; + } + } + isLocked(e) { + return this.lock && (e == this.lock || e.nodeType == 1 && e.contains(this.lock.parentNode)); + } +} +function uM(t, e) { + let n = e, r = n.children.length, i = t.childCount, s = /* @__PURE__ */ new Map(), o = []; + e: for (; i > 0; ) { + let l; + for (; ; ) + if (r) { + let u = n.children[r - 1]; + if (u instanceof mo) + n = u, r = u.children.length; + else { + l = u, r--; + break; + } + } else { + if (n == e) + break e; + r = n.parent.children.indexOf(n), n = n.parent; + } + let a = l.node; + if (a) { + if (a != t.child(i - 1)) + break; + --i, s.set(l, i), o.push(l); + } + } + return { index: i, matched: s, matches: o.reverse() }; +} +function cM(t, e) { + return t.type.side - e.type.side; +} +function hM(t, e, n, r) { + let i = e.locals(t), s = 0; + if (i.length == 0) { + for (let u = 0; u < t.childCount; u++) { + let c = t.child(u); + r(c, i, e.forChild(s, c), u), s += c.nodeSize; + } + return; + } + let o = 0, l = [], a = null; + for (let u = 0; ; ) { + let c, h; + for (; o < i.length && i[o].to == s; ) { + let b = i[o++]; + b.widget && (c ? (h || (h = [c])).push(b) : c = b); + } + if (c) + if (h) { + h.sort(cM); + for (let b = 0; b < h.length; b++) + n(h[b], u, !!a); + } else + n(c, u, !!a); + let d, f; + if (a) + f = -1, d = a, a = null; + else if (u < t.childCount) + f = u, d = t.child(u++); + else + break; + for (let b = 0; b < l.length; b++) + l[b].to <= s && l.splice(b--, 1); + for (; o < i.length && i[o].from <= s && i[o].to > s; ) + l.push(i[o++]); + let m = s + d.nodeSize; + if (d.isText) { + let b = m; + o < i.length && i[o].from < b && (b = i[o].from); + for (let w = 0; w < l.length; w++) + l[w].to < b && (b = l[w].to); + b < m && (a = d.cut(b - s), d = d.cut(0, b - s), m = b, f = -1); + } else + for (; o < i.length && i[o].to < m; ) + o++; + let y = d.isInline && !d.isLeaf ? l.filter((b) => !b.inline) : l.slice(); + r(d, y, e.forChild(s, d), f), s = m; + } +} +function dM(t) { + if (t.nodeName == "UL" || t.nodeName == "OL") { + let e = t.style.cssText; + t.style.cssText = e + "; list-style: square !important", window.getComputedStyle(t).listStyle, t.style.cssText = e; + } +} +function fM(t, e, n, r) { + for (let i = 0, s = 0; i < t.childCount && s <= r; ) { + let o = t.child(i++), l = s; + if (s += o.nodeSize, !o.isText) + continue; + let a = o.text; + for (; i < t.childCount; ) { + let u = t.child(i++); + if (s += u.nodeSize, !u.isText) + break; + a += u.text; + } + if (s >= n) { + if (s >= r && a.slice(r - e.length - l, r - l) == e) + return r - e.length; + let u = l < r ? a.lastIndexOf(e, r - l - 1) : -1; + if (u >= 0 && u + e.length + l >= n) + return l + u; + if (n == r && a.length >= r + e.length - l && a.slice(r - l, r - l + e.length) == e) + return r; + } + } + return -1; +} +function op(t, e, n, r, i) { + let s = []; + for (let o = 0, l = 0; o < t.length; o++) { + let a = t[o], u = l, c = l += a.size; + u >= n || c <= e ? s.push(a) : (u < e && s.push(a.slice(0, e - u, r)), i && (s.push(i), i = void 0), c > n && s.push(a.slice(n - u, a.size, r))); + } + return s; +} +function b1(t, e = null) { + let n = t.domSelectionRange(), r = t.state.doc; + if (!n.focusNode) + return null; + let i = t.docView.nearestDesc(n.focusNode), s = i && i.size == 0, o = t.docView.posFromDOM(n.focusNode, n.focusOffset, 1); + if (o < 0) + return null; + let l = r.resolve(o), a, u; + if (Dh(n)) { + for (a = o; i && !i.node; ) + i = i.parent; + let h = i.node; + if (i && h.isAtom && Ne.isSelectable(h) && i.parent && !(h.isInline && VN(n.focusNode, n.focusOffset, i.dom))) { + let d = i.posBefore; + u = new Ne(o == d ? l : r.resolve(d)); + } + } else { + if (n instanceof t.dom.ownerDocument.defaultView.Selection && n.rangeCount > 1) { + let h = o, d = o; + for (let f = 0; f < n.rangeCount; f++) { + let m = n.getRangeAt(f); + h = Math.min(h, t.docView.posFromDOM(m.startContainer, m.startOffset, 1)), d = Math.max(d, t.docView.posFromDOM(m.endContainer, m.endOffset, -1)); + } + if (h < 0) + return null; + [a, o] = d == t.state.selection.anchor ? [d, h] : [h, d], l = r.resolve(o); + } else + a = t.docView.posFromDOM(n.anchorNode, n.anchorOffset, 1); + if (a < 0) + return null; + } + let c = r.resolve(a); + if (!u) { + let h = e == "pointer" || t.state.selection.head < l.pos && !s ? 1 : -1; + u = w1(t, c, l, h); + } + return u; +} +function hy(t) { + return t.editable ? t.hasFocus() : fy(t) && document.activeElement && document.activeElement.contains(t.dom); +} +function vi(t, e = !1) { + let n = t.state.selection; + if (dy(t, n), !!hy(t)) { + if (!e && t.input.mouseDown && t.input.mouseDown.allowDefault && Vt) { + let r = t.domSelectionRange(), i = t.domObserver.currentSelection; + if (r.anchorNode && i.anchorNode && po(r.anchorNode, r.anchorOffset, i.anchorNode, i.anchorOffset)) { + t.input.mouseDown.delayedSelectionSync = !0, t.domObserver.setCurSelection(); + return; + } + } + if (t.domObserver.disconnectSelection(), t.cursorWrapper) + mM(t); + else { + let { anchor: r, head: i } = n, s, o; + j2 && !(n instanceof Ce) && (n.$from.parent.inlineContent || (s = W2(t, n.from)), !n.empty && !n.$from.parent.inlineContent && (o = W2(t, n.to))), t.docView.setSelection(r, i, t, e), j2 && (s && U2(s), o && U2(o)), n.visible ? t.dom.classList.remove("ProseMirror-hideselection") : (t.dom.classList.add("ProseMirror-hideselection"), "onselectionchange" in document && pM(t)); + } + t.domObserver.setCurSelection(), t.domObserver.connectSelection(); + } +} +const j2 = Kt || Vt && X6 < 63; +function W2(t, e) { + let { node: n, offset: r } = t.docView.domFromPos(e, 0), i = r < n.childNodes.length ? n.childNodes[r] : null, s = r ? n.childNodes[r - 1] : null; + if (Kt && i && i.contentEditable == "false") + return zd(i); + if ((!i || i.contentEditable == "false") && (!s || s.contentEditable == "false")) { + if (i) + return zd(i); + if (s) + return zd(s); + } +} +function zd(t) { + return t.contentEditable = "true", Kt && t.draggable && (t.draggable = !1, t.wasDraggable = !0), t; +} +function U2(t) { + t.contentEditable = "false", t.wasDraggable && (t.draggable = !0, t.wasDraggable = null); +} +function pM(t) { + let e = t.dom.ownerDocument; + e.removeEventListener("selectionchange", t.input.hideSelectionGuard); + let n = t.domSelectionRange(), r = n.anchorNode, i = n.anchorOffset; + e.addEventListener("selectionchange", t.input.hideSelectionGuard = () => { + (n.anchorNode != r || n.anchorOffset != i) && (e.removeEventListener("selectionchange", t.input.hideSelectionGuard), setTimeout(() => { + (!hy(t) || t.state.selection.visible) && t.dom.classList.remove("ProseMirror-hideselection"); + }, 20)); + }); +} +function mM(t) { + let e = t.domSelection(); + if (!e) + return; + let n = t.cursorWrapper.dom, r = n.nodeName == "IMG"; + r ? e.collapse(n.parentNode, Ut(n) + 1) : e.collapse(n, 0), !r && !t.state.selection.visible && Cn && Qi <= 11 && (n.disabled = !0, n.disabled = !1); +} +function dy(t, e) { + if (e instanceof Ne) { + let n = t.docView.descAt(e.from); + n != t.lastSelectedViewDesc && (G2(t), n && n.selectNode(), t.lastSelectedViewDesc = n); + } else + G2(t); +} +function G2(t) { + t.lastSelectedViewDesc && (t.lastSelectedViewDesc.parent && t.lastSelectedViewDesc.deselectNode(), t.lastSelectedViewDesc = void 0); +} +function w1(t, e, n, r) { + return t.someProp("createSelectionBetween", (i) => i(t, e, n)) || Ce.between(e, n, r); +} +function K2(t) { + return t.editable && !t.hasFocus() ? !1 : fy(t); +} +function fy(t) { + let e = t.domSelectionRange(); + if (!e.anchorNode) + return !1; + try { + return t.dom.contains(e.anchorNode.nodeType == 3 ? e.anchorNode.parentNode : e.anchorNode) && (t.editable || t.dom.contains(e.focusNode.nodeType == 3 ? e.focusNode.parentNode : e.focusNode)); + } catch { + return !1; + } +} +function gM(t) { + let e = t.docView.domFromPos(t.state.selection.anchor, 0), n = t.domSelectionRange(); + return po(e.node, e.offset, n.anchorNode, n.anchorOffset); +} +function lp(t, e) { + let { $anchor: n, $head: r } = t.selection, i = e > 0 ? n.max(r) : n.min(r), s = i.parent.inlineContent ? i.depth ? t.doc.resolve(e > 0 ? i.after() : i.before()) : null : i; + return s && Pe.findFrom(s, e); +} +function Pi(t, e) { + return t.dispatch(t.state.tr.setSelection(e).scrollIntoView()), !0; +} +function J2(t, e, n) { + let r = t.state.selection; + if (r instanceof Ce) + if (n.indexOf("s") > -1) { + let { $head: i } = r, s = i.textOffset ? null : e < 0 ? i.nodeBefore : i.nodeAfter; + if (!s || s.isText || !s.isLeaf) + return !1; + let o = t.state.doc.resolve(i.pos + s.nodeSize * (e < 0 ? -1 : 1)); + return Pi(t, new Ce(r.$anchor, o)); + } else if (r.empty) { + if (t.endOfTextblock(e > 0 ? "forward" : "backward")) { + let i = lp(t.state, e); + return i && i instanceof Ne ? Pi(t, i) : !1; + } else if (!(Kn && n.indexOf("m") > -1)) { + let i = r.$head, s = i.textOffset ? null : e < 0 ? i.nodeBefore : i.nodeAfter, o; + if (!s || s.isText) + return !1; + let l = e < 0 ? i.pos - s.nodeSize : i.pos; + return s.isAtom || (o = t.docView.descAt(l)) && !o.contentDOM ? Ne.isSelectable(s) ? Pi(t, new Ne(e < 0 ? t.state.doc.resolve(i.pos - s.nodeSize) : i)) : Q0 ? Pi(t, new Ce(t.state.doc.resolve(e < 0 ? l : l + s.nodeSize))) : !1 : !1; + } + } else return !1; + else { + if (r instanceof Ne && r.node.isInline) + return Pi(t, new Ce(e > 0 ? r.$to : r.$from)); + { + let i = lp(t.state, e); + return i ? Pi(t, i) : !1; + } + } +} +function Hc(t) { + return t.nodeType == 3 ? t.nodeValue.length : t.childNodes.length; +} +function za(t, e) { + let n = t.pmViewDesc; + return n && n.size == 0 && (e < 0 || t.nextSibling || t.nodeName != "BR"); +} +function Oo(t, e) { + return e < 0 ? yM(t) : vM(t); +} +function yM(t) { + let e = t.domSelectionRange(), n = e.focusNode, r = e.focusOffset; + if (!n) + return; + let i, s, o = !1; + for (Qn && n.nodeType == 1 && r < Hc(n) && za(n.childNodes[r], -1) && (o = !0); ; ) + if (r > 0) { + if (n.nodeType != 1) + break; + { + let l = n.childNodes[r - 1]; + if (za(l, -1)) + i = n, s = --r; + else if (l.nodeType == 3) + n = l, r = n.nodeValue.length; + else + break; + } + } else { + if (py(n)) + break; + { + let l = n.previousSibling; + for (; l && za(l, -1); ) + i = n.parentNode, s = Ut(l), l = l.previousSibling; + if (l) + n = l, r = Hc(n); + else { + if (n = n.parentNode, n == t.dom) + break; + r = 0; + } + } + } + o ? ap(t, n, r) : i && ap(t, i, s); +} +function vM(t) { + let e = t.domSelectionRange(), n = e.focusNode, r = e.focusOffset; + if (!n) + return; + let i = Hc(n), s, o; + for (; ; ) + if (r < i) { + if (n.nodeType != 1) + break; + let l = n.childNodes[r]; + if (za(l, 1)) + s = n, o = ++r; + else + break; + } else { + if (py(n)) + break; + { + let l = n.nextSibling; + for (; l && za(l, 1); ) + s = l.parentNode, o = Ut(l) + 1, l = l.nextSibling; + if (l) + n = l, r = 0, i = Hc(n); + else { + if (n = n.parentNode, n == t.dom) + break; + r = i = 0; + } + } + } + s && ap(t, s, o); +} +function py(t) { + let e = t.pmViewDesc; + return e && e.node && e.node.isBlock; +} +function bM(t, e) { + for (; t && e == t.childNodes.length && !X0(t); ) + e = Ut(t) + 1, t = t.parentNode; + for (; t && e < t.childNodes.length; ) { + let n = t.childNodes[e]; + if (n.nodeType == 3) + return n; + if (n.nodeType == 1 && n.contentEditable == "false") + break; + t = n, e = 0; + } +} +function wM(t, e) { + for (; t && !e && !X0(t); ) + e = Ut(t), t = t.parentNode; + for (; t && e; ) { + let n = t.childNodes[e - 1]; + if (n.nodeType == 3) + return n; + if (n.nodeType == 1 && n.contentEditable == "false") + break; + t = n, e = t.childNodes.length; + } +} +function ap(t, e, n) { + if (e.nodeType != 3) { + let s, o; + (o = bM(e, n)) ? (e = o, n = 0) : (s = wM(e, n)) && (e = s, n = s.nodeValue.length); + } + let r = t.domSelection(); + if (!r) + return; + if (Dh(r)) { + let s = document.createRange(); + s.setEnd(e, n), s.setStart(e, n), r.removeAllRanges(), r.addRange(s); + } else r.extend && r.extend(e, n); + t.domObserver.setCurSelection(); + let { state: i } = t; + setTimeout(() => { + t.state == i && vi(t); + }, 50); +} +function Y2(t, e) { + let n = t.state.doc.resolve(e); + if (!(Vt || Q6) && n.parent.inlineContent) { + let i = t.coordsAtPos(e); + if (e > n.start()) { + let s = t.coordsAtPos(e - 1), o = (s.top + s.bottom) / 2; + if (o > i.top && o < i.bottom && Math.abs(s.left - i.left) > 1) + return s.left < i.left ? "ltr" : "rtl"; + } + if (e < n.end()) { + let s = t.coordsAtPos(e + 1), o = (s.top + s.bottom) / 2; + if (o > i.top && o < i.bottom && Math.abs(s.left - i.left) > 1) + return s.left > i.left ? "ltr" : "rtl"; + } + } + return getComputedStyle(t.dom).direction == "rtl" ? "rtl" : "ltr"; +} +function Z2(t, e, n) { + let r = t.state.selection; + if (r instanceof Ce && !r.empty || n.indexOf("s") > -1 || Kn && n.indexOf("m") > -1) + return !1; + let { $from: i, $to: s } = r; + if (!i.parent.inlineContent || t.endOfTextblock(e < 0 ? "up" : "down")) { + let o = lp(t.state, e); + if (o && o instanceof Ne) + return Pi(t, o); + } + if (!i.parent.inlineContent) { + let o = e < 0 ? i : s, l = r instanceof Sn ? Pe.near(o, e) : Pe.findFrom(o, e); + return l ? Pi(t, l) : !1; + } + return !1; +} +function X2(t, e) { + if (!(t.state.selection instanceof Ce)) + return !0; + let { $head: n, $anchor: r, empty: i } = t.state.selection; + if (!n.sameParent(r)) + return !0; + if (!i) + return !1; + if (t.endOfTextblock(e > 0 ? "forward" : "backward")) + return !0; + let s = !n.textOffset && (e < 0 ? n.nodeBefore : n.nodeAfter); + if (s && !s.isText) { + let o = t.state.tr; + return e < 0 ? o.delete(n.pos - s.nodeSize, n.pos) : o.delete(n.pos, n.pos + s.nodeSize), t.dispatch(o), !0; + } + return !1; +} +function Q2(t, e, n) { + t.domObserver.stop(), e.contentEditable = n, t.domObserver.start(); +} +function kM(t) { + if (!Kt || t.state.selection.$head.parentOffset > 0) + return !1; + let { focusNode: e, focusOffset: n } = t.domSelectionRange(); + if (e && e.nodeType == 1 && n == 0 && e.firstChild && e.firstChild.contentEditable == "false") { + let r = e.firstChild; + Q2(t, r, "true"), setTimeout(() => Q2(t, r, "false"), 20); + } + return !1; +} +function xM(t) { + let e = ""; + return t.ctrlKey && (e += "c"), t.metaKey && (e += "m"), t.altKey && (e += "a"), t.shiftKey && (e += "s"), e; +} +function SM(t, e) { + let n = e.keyCode, r = xM(e); + if (n == 8 || Kn && n == 72 && r == "c") + return X2(t, -1) || Oo(t, -1); + if (n == 46 && !e.shiftKey || Kn && n == 68 && r == "c") + return X2(t, 1) || Oo(t, 1); + if (n == 13 || n == 27) + return !0; + if (n == 37 || Kn && n == 66 && r == "c") { + let i = n == 37 ? Y2(t, t.state.selection.from) == "ltr" ? -1 : 1 : -1; + return J2(t, i, r) || Oo(t, i); + } else if (n == 39 || Kn && n == 70 && r == "c") { + let i = n == 39 ? Y2(t, t.state.selection.from) == "ltr" ? 1 : -1 : 1; + return J2(t, i, r) || Oo(t, i); + } else { + if (n == 38 || Kn && n == 80 && r == "c") + return Z2(t, -1, r) || Oo(t, -1); + if (n == 40 || Kn && n == 78 && r == "c") + return kM(t) || Z2(t, 1, r) || Oo(t, 1); + if (r == (Kn ? "m" : "c") && (n == 66 || n == 73 || n == 89 || n == 90)) + return !0; + } + return !1; +} +function k1(t, e) { + t.someProp("transformCopied", (f) => { + e = f(e, t); + }); + let n = [], { content: r, openStart: i, openEnd: s } = e; + for (; i > 1 && s > 1 && r.childCount == 1 && r.firstChild.childCount == 1; ) { + i--, s--; + let f = r.firstChild; + n.push(f.type.name, f.attrs != f.type.defaultAttrs ? f.attrs : null), r = f.content; + } + let o = t.someProp("clipboardSerializer") || bo.fromSchema(t.state.schema), l = wy(), a = l.createElement("div"); + a.appendChild(o.serializeFragment(r, { document: l })); + let u = a.firstChild, c, h = 0; + for (; u && u.nodeType == 1 && (c = by[u.nodeName.toLowerCase()]); ) { + for (let f = c.length - 1; f >= 0; f--) { + let m = l.createElement(c[f]); + for (; a.firstChild; ) + m.appendChild(a.firstChild); + a.appendChild(m), h++; + } + u = a.firstChild; + } + u && u.nodeType == 1 && u.setAttribute("data-pm-slice", `${i} ${s}${h ? ` -${h}` : ""} ${JSON.stringify(n)}`); + let d = t.someProp("clipboardTextSerializer", (f) => f(e, t)) || e.content.textBetween(0, e.content.size, ` + +`); + return { dom: a, text: d, slice: e }; +} +function my(t, e, n, r, i) { + let s = i.parent.type.spec.code, o, l; + if (!n && !e) + return null; + let a = !!e && (r || s || !n); + if (a) { + if (t.someProp("transformPastedText", (d) => { + e = d(e, s || r, t); + }), s) + return l = new ae(re.from(t.state.schema.text(e.replace(/\r\n?/g, ` +`))), 0, 0), t.someProp("transformPasted", (d) => { + l = d(l, t, !0); + }), l; + let h = t.someProp("clipboardTextParser", (d) => d(e, i, r, t)); + if (h) + l = h; + else { + let d = i.marks(), { schema: f } = t.state, m = bo.fromSchema(f); + o = document.createElement("div"), e.split(/(?:\r\n?|\n)+/).forEach((y) => { + let b = o.appendChild(document.createElement("p")); + y && b.appendChild(m.serializeNode(f.text(y, d))); + }); + } + } else + t.someProp("transformPastedHTML", (h) => { + n = h(n, t); + }), o = TM(n), Q0 && EM(o); + let u = o && o.querySelector("[data-pm-slice]"), c = u && /^(\d+) (\d+)(?: -(\d+))? (.*)/.exec(u.getAttribute("data-pm-slice") || ""); + if (c && c[3]) + for (let h = +c[3]; h > 0; h--) { + let d = o.firstChild; + for (; d && d.nodeType != 1; ) + d = d.nextSibling; + if (!d) + break; + o = d; + } + if (l || (l = (t.someProp("clipboardParser") || t.someProp("domParser") || co.fromSchema(t.state.schema)).parseSlice(o, { + preserveWhitespace: !!(a || c), + context: i, + ruleFromNode(d) { + return d.nodeName == "BR" && !d.nextSibling && d.parentNode && !CM.test(d.parentNode.nodeName) ? { ignore: !0 } : null; + } + })), c) + l = OM(e5(l, +c[1], +c[2]), c[4]); + else if (l = ae.maxOpen(NM(l.content, i), !0), l.openStart || l.openEnd) { + let h = 0, d = 0; + for (let f = l.content.firstChild; h < l.openStart && !f.type.spec.isolating; h++, f = f.firstChild) + ; + for (let f = l.content.lastChild; d < l.openEnd && !f.type.spec.isolating; d++, f = f.lastChild) + ; + l = e5(l, h, d); + } + return t.someProp("transformPasted", (h) => { + l = h(l, t, a); + }), l; +} +const CM = /^(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 NM(t, e) { + if (t.childCount < 2) + return t; + for (let n = e.depth; n >= 0; n--) { + let i = e.node(n).contentMatchAt(e.index(n)), s, o = []; + if (t.forEach((l) => { + if (!o) + return; + let a = i.findWrapping(l.type), u; + if (!a) + return o = null; + if (u = o.length && s.length && yy(a, s, l, o[o.length - 1], 0)) + o[o.length - 1] = u; + else { + o.length && (o[o.length - 1] = vy(o[o.length - 1], s.length)); + let c = gy(l, a); + o.push(c), i = i.matchType(c.type), s = a; + } + }), o) + return re.from(o); + } + return t; +} +function gy(t, e, n = 0) { + for (let r = e.length - 1; r >= n; r--) + t = e[r].create(null, re.from(t)); + return t; +} +function yy(t, e, n, r, i) { + if (i < t.length && i < e.length && t[i] == e[i]) { + let s = yy(t, e, n, r.lastChild, i + 1); + if (s) + return r.copy(r.content.replaceChild(r.childCount - 1, s)); + if (r.contentMatchAt(r.childCount).matchType(i == t.length - 1 ? n.type : t[i + 1])) + return r.copy(r.content.append(re.from(gy(n, t, i + 1)))); + } +} +function vy(t, e) { + if (e == 0) + return t; + let n = t.content.replaceChild(t.childCount - 1, vy(t.lastChild, e - 1)), r = t.contentMatchAt(t.childCount).fillBefore(re.empty, !0); + return t.copy(n.append(r)); +} +function up(t, e, n, r, i, s) { + let o = e < 0 ? t.firstChild : t.lastChild, l = o.content; + return t.childCount > 1 && (s = 0), i < r - 1 && (l = up(l, e, n, r, i + 1, s)), i >= n && (l = e < 0 ? o.contentMatchAt(0).fillBefore(l, s <= i).append(l) : l.append(o.contentMatchAt(o.childCount).fillBefore(re.empty, !0))), t.replaceChild(e < 0 ? 0 : t.childCount - 1, o.copy(l)); +} +function e5(t, e, n) { + return e < t.openStart && (t = new ae(up(t.content, -1, e, t.openStart, 0, t.openEnd), e, t.openEnd)), n < t.openEnd && (t = new ae(up(t.content, 1, n, t.openEnd, 0, 0), t.openStart, n)), t; +} +const by = { + thead: ["table"], + tbody: ["table"], + tfoot: ["table"], + caption: ["table"], + colgroup: ["table"], + col: ["table", "colgroup"], + tr: ["table", "tbody"], + td: ["table", "tbody", "tr"], + th: ["table", "tbody", "tr"] +}; +let t5 = null; +function wy() { + return t5 || (t5 = document.implementation.createHTMLDocument("title")); +} +let Pd = null; +function MM(t) { + let e = window.trustedTypes; + return e ? (Pd || (Pd = e.defaultPolicy || e.createPolicy("ProseMirrorClipboard", { createHTML: (n) => n })), Pd.createHTML(t)) : t; +} +function TM(t) { + let e = /^(\s*]*>)*/.exec(t); + e && (t = t.slice(e[0].length)); + let n = wy().createElement("div"), r = /<([a-z][^>\s]+)/i.exec(t), i; + if ((i = r && by[r[1].toLowerCase()]) && (t = i.map((s) => "<" + s + ">").join("") + t + i.map((s) => "").reverse().join("")), n.innerHTML = MM(t), i) + for (let s = 0; s < i.length; s++) + n = n.querySelector(i[s]) || n; + return n; +} +function EM(t) { + let e = t.querySelectorAll(Vt ? "span:not([class]):not([style])" : "span.Apple-converted-space"); + for (let n = 0; n < e.length; n++) { + let r = e[n]; + r.childNodes.length == 1 && r.textContent == " " && r.parentNode && r.parentNode.replaceChild(t.ownerDocument.createTextNode(" "), r); + } +} +function OM(t, e) { + if (!t.size) + return t; + let n = t.content.firstChild.type.schema, r; + try { + r = JSON.parse(e); + } catch { + return t; + } + let { content: i, openStart: s, openEnd: o } = t; + for (let l = r.length - 2; l >= 0; l -= 2) { + let a = n.nodes[r[l]]; + if (!a || a.hasRequiredAttrs()) + break; + i = re.from(a.create(r[l + 1], i)), s++, o++; + } + return new ae(i, s, o); +} +const un = {}, cn = {}, AM = { touchstart: !0, touchmove: !0 }; +class IM { + 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 = /* @__PURE__ */ Object.create(null), this.hideSelectionGuard = null; + } +} +function DM(t) { + for (let e in un) { + let n = un[e]; + t.dom.addEventListener(e, t.input.eventHandlers[e] = (r) => { + RM(t, r) && !x1(t, r) && (t.editable || !(r.type in cn)) && n(t, r); + }, AM[e] ? { passive: !0 } : void 0); + } + Kt && t.dom.addEventListener("input", () => null), cp(t); +} +function Zi(t, e) { + t.input.lastSelectionOrigin = e, t.input.lastSelectionTime = Date.now(); +} +function _M(t) { + t.domObserver.stop(); + for (let e in t.input.eventHandlers) + t.dom.removeEventListener(e, t.input.eventHandlers[e]); + clearTimeout(t.input.composingTimeout), clearTimeout(t.input.lastIOSEnterFallbackTimeout); +} +function cp(t) { + t.someProp("handleDOMEvents", (e) => { + for (let n in e) + t.input.eventHandlers[n] || t.dom.addEventListener(n, t.input.eventHandlers[n] = (r) => x1(t, r)); + }); +} +function x1(t, e) { + return t.someProp("handleDOMEvents", (n) => { + let r = n[e.type]; + return r ? r(t, e) || e.defaultPrevented : !1; + }); +} +function RM(t, e) { + if (!e.bubbles) + return !0; + if (e.defaultPrevented) + return !1; + for (let n = e.target; n != t.dom; n = n.parentNode) + if (!n || n.nodeType == 11 || n.pmViewDesc && n.pmViewDesc.stopEvent(e)) + return !1; + return !0; +} +function zM(t, e) { + !x1(t, e) && un[e.type] && (t.editable || !(e.type in cn)) && un[e.type](t, e); +} +cn.keydown = (t, e) => { + let n = e; + if (t.input.shiftKey = n.keyCode == 16 || n.shiftKey, !xy(t, n) && (t.input.lastKeyCode = n.keyCode, t.input.lastKeyCodeTime = Date.now(), !(gi && Vt && n.keyCode == 13))) + if (n.keyCode != 229 && t.domObserver.forceFlush(), Il && n.keyCode == 13 && !n.ctrlKey && !n.altKey && !n.metaKey) { + let r = Date.now(); + t.input.lastIOSEnter = r, t.input.lastIOSEnterFallbackTimeout = setTimeout(() => { + t.input.lastIOSEnter == r && (t.someProp("handleKeyDown", (i) => i(t, Ps(13, "Enter"))), t.input.lastIOSEnter = 0); + }, 200); + } else t.someProp("handleKeyDown", (r) => r(t, n)) || SM(t, n) ? n.preventDefault() : Zi(t, "key"); +}; +cn.keyup = (t, e) => { + e.keyCode == 16 && (t.input.shiftKey = !1); +}; +cn.keypress = (t, e) => { + let n = e; + if (xy(t, n) || !n.charCode || n.ctrlKey && !n.altKey || Kn && n.metaKey) + return; + if (t.someProp("handleKeyPress", (i) => i(t, n))) { + n.preventDefault(); + return; + } + let r = t.state.selection; + if (!(r instanceof Ce) || !r.$from.sameParent(r.$to)) { + let i = String.fromCharCode(n.charCode), s = () => t.state.tr.insertText(i).scrollIntoView(); + !/[\r\n]/.test(i) && !t.someProp("handleTextInput", (o) => o(t, r.$from.pos, r.$to.pos, i, s)) && t.dispatch(s()), n.preventDefault(); + } +}; +function Rh(t) { + return { left: t.clientX, top: t.clientY }; +} +function PM(t, e) { + let n = e.x - t.clientX, r = e.y - t.clientY; + return n * n + r * r < 100; +} +function S1(t, e, n, r, i) { + if (r == -1) + return !1; + let s = t.state.doc.resolve(r); + for (let o = s.depth + 1; o > 0; o--) + if (t.someProp(e, (l) => o > s.depth ? l(t, n, s.nodeAfter, s.before(o), i, !0) : l(t, n, s.node(o), s.before(o), i, !1))) + return !0; + return !1; +} +function Go(t, e, n) { + if (t.focused || t.focus(), t.state.selection.eq(e)) + return; + let r = t.state.tr.setSelection(e); + r.setMeta("pointer", !0), t.dispatch(r); +} +function BM(t, e) { + if (e == -1) + return !1; + let n = t.state.doc.resolve(e), r = n.nodeAfter; + return r && r.isAtom && Ne.isSelectable(r) ? (Go(t, new Ne(n)), !0) : !1; +} +function LM(t, e) { + if (e == -1) + return !1; + let n = t.state.selection, r, i; + n instanceof Ne && (r = n.node); + let s = t.state.doc.resolve(e); + for (let o = s.depth + 1; o > 0; o--) { + let l = o > s.depth ? s.nodeAfter : s.node(o); + if (Ne.isSelectable(l)) { + r && n.$from.depth > 0 && o >= n.$from.depth && s.before(n.$from.depth + 1) == n.$from.pos ? i = s.before(n.$from.depth) : i = s.before(o); + break; + } + } + return i != null ? (Go(t, Ne.create(t.state.doc, i)), !0) : !1; +} +function FM(t, e, n, r, i) { + return S1(t, "handleClickOn", e, n, r) || t.someProp("handleClick", (s) => s(t, e, r)) || (i ? LM(t, n) : BM(t, n)); +} +function VM(t, e, n, r) { + return S1(t, "handleDoubleClickOn", e, n, r) || t.someProp("handleDoubleClick", (i) => i(t, e, r)); +} +function HM(t, e, n, r) { + return S1(t, "handleTripleClickOn", e, n, r) || t.someProp("handleTripleClick", (i) => i(t, e, r)) || $M(t, n, r); +} +function $M(t, e, n) { + if (n.button != 0) + return !1; + let r = t.state.doc; + if (e == -1) + return r.inlineContent ? (Go(t, Ce.create(r, 0, r.content.size)), !0) : !1; + let i = r.resolve(e); + for (let s = i.depth + 1; s > 0; s--) { + let o = s > i.depth ? i.nodeAfter : i.node(s), l = i.before(s); + if (o.inlineContent) + Go(t, Ce.create(r, l + 1, l + 1 + o.content.size)); + else if (Ne.isSelectable(o)) + Go(t, Ne.create(r, l)); + else + continue; + return !0; + } +} +function C1(t) { + return $c(t); +} +const ky = Kn ? "metaKey" : "ctrlKey"; +un.mousedown = (t, e) => { + let n = e; + t.input.shiftKey = n.shiftKey; + let r = C1(t), i = Date.now(), s = "singleClick"; + i - t.input.lastClick.time < 500 && PM(n, t.input.lastClick) && !n[ky] && t.input.lastClick.button == n.button && (t.input.lastClick.type == "singleClick" ? s = "doubleClick" : t.input.lastClick.type == "doubleClick" && (s = "tripleClick")), t.input.lastClick = { time: i, x: n.clientX, y: n.clientY, type: s, button: n.button }; + let o = t.posAtCoords(Rh(n)); + o && (s == "singleClick" ? (t.input.mouseDown && t.input.mouseDown.done(), t.input.mouseDown = new qM(t, o, n, !!r)) : (s == "doubleClick" ? VM : HM)(t, o.pos, o.inside, n) ? n.preventDefault() : Zi(t, "pointer")); +}; +class qM { + constructor(e, n, r, i) { + this.view = e, this.pos = n, this.event = r, this.flushed = i, this.delayedSelectionSync = !1, this.mightDrag = null, this.startDoc = e.state.doc, this.selectNode = !!r[ky], this.allowDefault = r.shiftKey; + let s, o; + if (n.inside > -1) + s = e.state.doc.nodeAt(n.inside), o = n.inside; + else { + let c = e.state.doc.resolve(n.pos); + s = c.parent, o = c.depth ? c.before() : 0; + } + const l = i ? null : r.target, a = l ? e.docView.nearestDesc(l, !0) : null; + this.target = a && a.nodeDOM.nodeType == 1 ? a.nodeDOM : null; + let { selection: u } = e.state; + (r.button == 0 && s.type.spec.draggable && s.type.spec.selectable !== !1 || u instanceof Ne && u.from <= o && u.to > o) && (this.mightDrag = { + node: s, + pos: o, + addAttr: !!(this.target && !this.target.draggable), + setUneditable: !!(this.target && Qn && !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()), e.root.addEventListener("mouseup", this.up = this.up.bind(this)), e.root.addEventListener("mousemove", this.move = this.move.bind(this)), Zi(e, "pointer"); + } + done() { + this.view.root.removeEventListener("mouseup", this.up), this.view.root.removeEventListener("mousemove", this.move), 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(() => vi(this.view)), this.view.input.mouseDown = null; + } + up(e) { + if (this.done(), !this.view.dom.contains(e.target)) + return; + let n = this.pos; + this.view.state.doc != this.startDoc && (n = this.view.posAtCoords(Rh(e))), this.updateAllowDefault(e), this.allowDefault || !n ? Zi(this.view, "pointer") : FM(this.view, n.pos, n.inside, e, this.selectNode) ? e.preventDefault() : e.button == 0 && (this.flushed || // Safari ignores clicks on draggable elements + Kt && this.mightDrag && !this.mightDrag.node.isAtom || // Chrome will sometimes treat a node selection as a + // cursor, but still report that the node is selected + // when asked through getSelection. You'll then get a + // situation where clicking at the point where that + // (hidden) cursor is doesn't change the selection, and + // thus doesn't get a reaction from ProseMirror. This + // works around that. + Vt && !this.view.state.selection.visible && Math.min(Math.abs(n.pos - this.view.state.selection.from), Math.abs(n.pos - this.view.state.selection.to)) <= 2) ? (Go(this.view, Pe.near(this.view.state.doc.resolve(n.pos))), e.preventDefault()) : Zi(this.view, "pointer"); + } + move(e) { + this.updateAllowDefault(e), Zi(this.view, "pointer"), e.buttons == 0 && this.done(); + } + updateAllowDefault(e) { + !this.allowDefault && (Math.abs(this.event.x - e.clientX) > 4 || Math.abs(this.event.y - e.clientY) > 4) && (this.allowDefault = !0); + } +} +un.touchstart = (t) => { + t.input.lastTouch = Date.now(), C1(t), Zi(t, "pointer"); +}; +un.touchmove = (t) => { + t.input.lastTouch = Date.now(), Zi(t, "pointer"); +}; +un.contextmenu = (t) => C1(t); +function xy(t, e) { + return t.composing ? !0 : Kt && Math.abs(e.timeStamp - t.input.compositionEndedAt) < 500 ? (t.input.compositionEndedAt = -2e8, !0) : !1; +} +const jM = gi ? 5e3 : -1; +cn.compositionstart = cn.compositionupdate = (t) => { + if (!t.composing) { + t.domObserver.flush(); + let { state: e } = t, n = e.selection.$to; + if (e.selection instanceof Ce && (e.storedMarks || !n.textOffset && n.parentOffset && n.nodeBefore.marks.some((r) => r.type.spec.inclusive === !1) || Vt && Q6 && WM(t))) + t.markCursor = t.state.storedMarks || n.marks(), $c(t, !0), t.markCursor = null; + else if ($c(t, !e.selection.empty), Qn && e.selection.empty && n.parentOffset && !n.textOffset && n.nodeBefore.marks.length) { + let r = t.domSelectionRange(); + for (let i = r.focusNode, s = r.focusOffset; i && i.nodeType == 1 && s != 0; ) { + let o = s < 0 ? i.lastChild : i.childNodes[s - 1]; + if (!o) + break; + if (o.nodeType == 3) { + let l = t.domSelection(); + l && l.collapse(o, o.nodeValue.length); + break; + } else + i = o, s = -1; + } + } + t.input.composing = !0; + } + Sy(t, jM); +}; +function WM(t) { + let { focusNode: e, focusOffset: n } = t.domSelectionRange(); + if (!e || e.nodeType != 1 || n >= e.childNodes.length) + return !1; + let r = e.childNodes[n]; + return r.nodeType == 1 && r.contentEditable == "false"; +} +cn.compositionend = (t, e) => { + t.composing && (t.input.composing = !1, t.input.compositionEndedAt = e.timeStamp, t.input.compositionPendingChanges = t.domObserver.pendingRecords().length ? t.input.compositionID : 0, t.input.compositionNode = null, t.input.badSafariComposition ? t.domObserver.forceFlush() : t.input.compositionPendingChanges && Promise.resolve().then(() => t.domObserver.flush()), t.input.compositionID++, Sy(t, 20)); +}; +function Sy(t, e) { + clearTimeout(t.input.composingTimeout), e > -1 && (t.input.composingTimeout = setTimeout(() => $c(t), e)); +} +function Cy(t) { + for (t.composing && (t.input.composing = !1, t.input.compositionEndedAt = GM()); t.input.compositionNodes.length > 0; ) + t.input.compositionNodes.pop().markParentsDirty(); +} +function UM(t) { + let e = t.domSelectionRange(); + if (!e.focusNode) + return null; + let n = LN(e.focusNode, e.focusOffset), r = FN(e.focusNode, e.focusOffset); + if (n && r && n != r) { + let i = r.pmViewDesc, s = t.domObserver.lastChangedTextNode; + if (n == s || r == s) + return s; + if (!i || !i.isText(r.nodeValue)) + return r; + if (t.input.compositionNode == r) { + let o = n.pmViewDesc; + if (!(!o || !o.isText(n.nodeValue))) + return r; + } + } + return n || r; +} +function GM() { + let t = document.createEvent("Event"); + return t.initEvent("event", !0, !0), t.timeStamp; +} +function $c(t, e = !1) { + if (!(gi && t.domObserver.flushingSoon >= 0)) { + if (t.domObserver.forceFlush(), Cy(t), e || t.docView && t.docView.dirty) { + let n = b1(t), r = t.state.selection; + return n && !n.eq(r) ? t.dispatch(t.state.tr.setSelection(n)) : (t.markCursor || e) && !r.$from.node(r.$from.sharedDepth(r.to)).inlineContent ? t.dispatch(t.state.tr.deleteSelection()) : t.updateState(t.state), !0; + } + return !1; + } +} +function KM(t, e) { + if (!t.dom.parentNode) + return; + let n = t.dom.parentNode.appendChild(document.createElement("div")); + n.appendChild(e), n.style.cssText = "position: fixed; left: -10000px; top: 10px"; + let r = getSelection(), i = document.createRange(); + i.selectNodeContents(e), t.dom.blur(), r.removeAllRanges(), r.addRange(i), setTimeout(() => { + n.parentNode && n.parentNode.removeChild(n), t.focus(); + }, 50); +} +const s0 = Cn && Qi < 15 || Il && qN < 604; +un.copy = cn.cut = (t, e) => { + let n = e, r = t.state.selection, i = n.type == "cut"; + if (r.empty) + return; + let s = s0 ? null : n.clipboardData, o = r.content(), { dom: l, text: a } = k1(t, o); + s ? (n.preventDefault(), s.clearData(), s.setData("text/html", l.innerHTML), s.setData("text/plain", a)) : KM(t, l), i && t.dispatch(t.state.tr.deleteSelection().scrollIntoView().setMeta("uiEvent", "cut")); +}; +function JM(t) { + return t.openStart == 0 && t.openEnd == 0 && t.content.childCount == 1 ? t.content.firstChild : null; +} +function YM(t, e) { + if (!t.dom.parentNode) + return; + let n = t.input.shiftKey || t.state.selection.$from.parent.type.spec.code, r = t.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 = t.input.shiftKey && t.input.lastKeyCode != 45; + setTimeout(() => { + t.focus(), r.parentNode && r.parentNode.removeChild(r), n ? o0(t, r.value, null, i, e) : o0(t, r.textContent, r.innerHTML, i, e); + }, 50); +} +function o0(t, e, n, r, i) { + let s = my(t, e, n, r, t.state.selection.$from); + if (t.someProp("handlePaste", (a) => a(t, i, s || ae.empty))) + return !0; + if (!s) + return !1; + let o = JM(s), l = o ? t.state.tr.replaceSelectionWith(o, r) : t.state.tr.replaceSelection(s); + return t.dispatch(l.scrollIntoView().setMeta("paste", !0).setMeta("uiEvent", "paste")), !0; +} +function Ny(t) { + let e = t.getData("text/plain") || t.getData("Text"); + if (e) + return e; + let n = t.getData("text/uri-list"); + return n ? n.replace(/\r?\n/g, " ") : ""; +} +cn.paste = (t, e) => { + let n = e; + if (t.composing && !gi) + return; + let r = s0 ? null : n.clipboardData, i = t.input.shiftKey && t.input.lastKeyCode != 45; + r && o0(t, Ny(r), r.getData("text/html"), i, n) ? n.preventDefault() : YM(t, n); +}; +class My { + constructor(e, n, r) { + this.slice = e, this.move = n, this.node = r; + } +} +const ZM = Kn ? "altKey" : "ctrlKey"; +function Ty(t, e) { + let n = t.someProp("dragCopies", (r) => !r(e)); + return n ?? !e[ZM]; +} +un.dragstart = (t, e) => { + let n = e, r = t.input.mouseDown; + if (r && r.done(), !n.dataTransfer) + return; + let i = t.state.selection, s = i.empty ? null : t.posAtCoords(Rh(n)), o; + if (!(s && s.pos >= i.from && s.pos <= (i instanceof Ne ? i.to - 1 : i.to))) { + if (r && r.mightDrag) + o = Ne.create(t.state.doc, r.mightDrag.pos); + else if (n.target && n.target.nodeType == 1) { + let h = t.docView.nearestDesc(n.target, !0); + h && h.node.type.spec.draggable && h != t.docView && (o = Ne.create(t.state.doc, h.posBefore)); + } + } + let l = (o || t.state.selection).content(), { dom: a, text: u, slice: c } = k1(t, l); + (!n.dataTransfer.files.length || !Vt || X6 > 120) && n.dataTransfer.clearData(), n.dataTransfer.setData(s0 ? "Text" : "text/html", a.innerHTML), n.dataTransfer.effectAllowed = "copyMove", s0 || n.dataTransfer.setData("text/plain", u), t.dragging = new My(c, Ty(t, n), o); +}; +un.dragend = (t) => { + let e = t.dragging; + window.setTimeout(() => { + t.dragging == e && (t.dragging = null); + }, 50); +}; +cn.dragover = cn.dragenter = (t, e) => e.preventDefault(); +cn.drop = (t, e) => { + try { + XM(t, e, t.dragging); + } finally { + t.dragging = null; + } +}; +function XM(t, e, n) { + if (!e.dataTransfer) + return; + let r = t.posAtCoords(Rh(e)); + if (!r) + return; + let i = t.state.doc.resolve(r.pos), s = n && n.slice; + s ? t.someProp("transformPasted", (f) => { + s = f(s, t, !1); + }) : s = my(t, Ny(e.dataTransfer), s0 ? null : e.dataTransfer.getData("text/html"), !1, i); + let o = !!(n && Ty(t, e)); + if (t.someProp("handleDrop", (f) => f(t, e, s || ae.empty, o))) { + e.preventDefault(); + return; + } + if (!s) + return; + e.preventDefault(); + let l = s ? AC(t.state.doc, i.pos, s) : i.pos; + l == null && (l = i.pos); + let a = t.state.tr; + if (o) { + let { node: f } = n; + f ? f.replace(a) : a.deleteSelection(); + } + let u = a.mapping.map(l), c = s.openStart == 0 && s.openEnd == 0 && s.content.childCount == 1, h = a.doc; + if (c ? a.replaceRangeWith(u, u, s.content.firstChild) : a.replaceRange(u, u, s), a.doc.eq(h)) + return; + let d = a.doc.resolve(u); + if (c && Ne.isSelectable(s.content.firstChild) && d.nodeAfter && d.nodeAfter.sameMarkup(s.content.firstChild)) + a.setSelection(new Ne(d)); + else { + let f = a.mapping.map(l); + a.mapping.maps[a.mapping.maps.length - 1].forEach((m, y, b, w) => f = w), a.setSelection(w1(t, d, a.doc.resolve(f))); + } + t.focus(), t.dispatch(a.setMeta("uiEvent", "drop")); +} +un.focus = (t) => { + t.input.lastFocus = Date.now(), t.focused || (t.domObserver.stop(), t.dom.classList.add("ProseMirror-focused"), t.domObserver.start(), t.focused = !0, setTimeout(() => { + t.docView && t.hasFocus() && !t.domObserver.currentSelection.eq(t.domSelectionRange()) && vi(t); + }, 20)); +}; +un.blur = (t, e) => { + let n = e; + t.focused && (t.domObserver.stop(), t.dom.classList.remove("ProseMirror-focused"), t.domObserver.start(), n.relatedTarget && t.dom.contains(n.relatedTarget) && t.domObserver.currentSelection.clear(), t.focused = !1); +}; +un.beforeinput = (t, e) => { + if (Vt && gi && e.inputType == "deleteContentBackward") { + t.domObserver.flushSoon(); + let { domChangeCount: r } = t.input; + setTimeout(() => { + if (t.input.domChangeCount != r || (t.dom.blur(), t.focus(), t.someProp("handleKeyDown", (s) => s(t, Ps(8, "Backspace"))))) + return; + let { $cursor: i } = t.state.selection; + i && i.pos > 0 && t.dispatch(t.state.tr.delete(i.pos - 1, i.pos).scrollIntoView()); + }, 50); + } +}; +for (let t in cn) + un[t] = cn[t]; +function l0(t, e) { + if (t == e) + return !0; + for (let n in t) + if (t[n] !== e[n]) + return !1; + for (let n in e) + if (!(n in t)) + return !1; + return !0; +} +class qc { + constructor(e, n) { + this.toDOM = e, this.spec = n || Qs, this.side = this.spec.side || 0; + } + map(e, n, r, i) { + let { pos: s, deleted: o } = e.mapResult(n.from + i, this.side < 0 ? -1 : 1); + return o ? null : new Gt(s - r, s - r, this); + } + valid() { + return !0; + } + eq(e) { + return this == e || e instanceof qc && (this.spec.key && this.spec.key == e.spec.key || this.toDOM == e.toDOM && l0(this.spec, e.spec)); + } + destroy(e) { + this.spec.destroy && this.spec.destroy(e); + } +} +class ts { + constructor(e, n) { + this.attrs = e, this.spec = n || Qs; + } + map(e, n, r, i) { + let s = e.map(n.from + i, this.spec.inclusiveStart ? -1 : 1) - r, o = e.map(n.to + i, this.spec.inclusiveEnd ? 1 : -1) - r; + return s >= o ? null : new Gt(s, o, this); + } + valid(e, n) { + return n.from < n.to; + } + eq(e) { + return this == e || e instanceof ts && l0(this.attrs, e.attrs) && l0(this.spec, e.spec); + } + static is(e) { + return e.type instanceof ts; + } + destroy() { + } +} +class N1 { + constructor(e, n) { + this.attrs = e, this.spec = n || Qs; + } + map(e, n, r, i) { + let s = e.mapResult(n.from + i, 1); + if (s.deleted) + return null; + let o = e.mapResult(n.to + i, -1); + return o.deleted || o.pos <= s.pos ? null : new Gt(s.pos - r, o.pos - r, this); + } + valid(e, n) { + let { index: r, offset: i } = e.content.findIndex(n.from), s; + return i == n.from && !(s = e.child(r)).isText && i + s.nodeSize == n.to; + } + eq(e) { + return this == e || e instanceof N1 && l0(this.attrs, e.attrs) && l0(this.spec, e.spec); + } + destroy() { + } +} +class Gt { + /** + @internal + */ + constructor(e, n, r) { + this.from = e, this.to = n, this.type = r; + } + /** + @internal + */ + copy(e, n) { + return new Gt(e, n, this.type); + } + /** + @internal + */ + eq(e, n = 0) { + return this.type.eq(e.type) && this.from + n == e.from && this.to + n == e.to; + } + /** + @internal + */ + map(e, n, r) { + return this.type.map(e, this, n, r); + } + /** + Creates a widget decoration, which is a DOM node that's shown in + the document at the given position. It is recommended that you + delay rendering the widget by passing a function that will be + called when the widget is actually drawn in a view, but you can + also directly pass a DOM node. `getPos` can be used to find the + widget's current document position. + */ + static widget(e, n, r) { + return new Gt(e, e, new qc(n, r)); + } + /** + Creates an inline decoration, which adds the given attributes to + each inline node between `from` and `to`. + */ + static inline(e, n, r, i) { + return new Gt(e, n, new ts(r, i)); + } + /** + Creates a node decoration. `from` and `to` should point precisely + before and after a node in the document. That node, and only that + node, will receive the given attributes. + */ + static node(e, n, r, i) { + return new Gt(e, n, new N1(r, i)); + } + /** + The spec provided when creating this decoration. Can be useful + if you've stored extra information in that object. + */ + get spec() { + return this.type.spec; + } + /** + @internal + */ + get inline() { + return this.type instanceof ts; + } + /** + @internal + */ + get widget() { + return this.type instanceof qc; + } +} +const Po = [], Qs = {}; +class ct { + /** + @internal + */ + constructor(e, n) { + this.local = e.length ? e : Po, this.children = n.length ? n : Po; + } + /** + Create a set of decorations, using the structure of the given + document. This will consume (modify) the `decorations` array, so + you must make a copy if you want need to preserve that. + */ + static create(e, n) { + return n.length ? jc(n, e, 0, Qs) : Jt; + } + /** + Find all decorations in this set which touch the given range + (including decorations that start or end directly at the + boundaries) and match the given predicate on their spec. When + `start` and `end` are omitted, all decorations in the set are + considered. When `predicate` isn't given, all decorations are + assumed to match. + */ + find(e, n, r) { + let i = []; + return this.findInner(e ?? 0, n ?? 1e9, i, 0, r), i; + } + findInner(e, n, r, i, s) { + for (let o = 0; o < this.local.length; o++) { + let l = this.local[o]; + l.from <= n && l.to >= e && (!s || s(l.spec)) && r.push(l.copy(l.from + i, l.to + i)); + } + for (let o = 0; o < this.children.length; o += 3) + if (this.children[o] < n && this.children[o + 1] > e) { + let l = this.children[o] + 1; + this.children[o + 2].findInner(e - l, n - l, r, i + l, s); + } + } + /** + Map the set of decorations in response to a change in the + document. + */ + map(e, n, r) { + return this == Jt || e.maps.length == 0 ? this : this.mapInner(e, n, 0, 0, r || Qs); + } + /** + @internal + */ + mapInner(e, n, r, i, s) { + let o; + for (let l = 0; l < this.local.length; l++) { + let a = this.local[l].map(e, r, i); + a && a.type.valid(n, a) ? (o || (o = [])).push(a) : s.onRemove && s.onRemove(this.local[l].spec); + } + return this.children.length ? QM(this.children, o || [], e, n, r, i, s) : o ? new ct(o.sort(eo), Po) : Jt; + } + /** + Add the given array of decorations to the ones in the set, + producing a new set. Consumes the `decorations` array. Needs + access to the current document to create the appropriate tree + structure. + */ + add(e, n) { + return n.length ? this == Jt ? ct.create(e, n) : this.addInner(e, n, 0) : this; + } + addInner(e, n, r) { + let i, s = 0; + e.forEach((l, a) => { + let u = a + r, c; + if (c = Oy(n, l, u)) { + for (i || (i = this.children.slice()); s < i.length && i[s] < a; ) + s += 3; + i[s] == a ? i[s + 2] = i[s + 2].addInner(l, c, u + 1) : i.splice(s, 0, a, a + l.nodeSize, jc(c, l, u + 1, Qs)), s += 3; + } + }); + let o = Ey(s ? Ay(n) : n, -r); + for (let l = 0; l < o.length; l++) + o[l].type.valid(e, o[l]) || o.splice(l--, 1); + return new ct(o.length ? this.local.concat(o).sort(eo) : this.local, i || this.children); + } + /** + Create a new set that contains the decorations in this set, minus + the ones in the given array. + */ + remove(e) { + return e.length == 0 || this == Jt ? this : this.removeInner(e, 0); + } + removeInner(e, n) { + let r = this.children, i = this.local; + for (let s = 0; s < r.length; s += 3) { + let o, l = r[s] + n, a = r[s + 1] + n; + for (let c = 0, h; c < e.length; c++) + (h = e[c]) && h.from > l && h.to < a && (e[c] = null, (o || (o = [])).push(h)); + if (!o) + continue; + r == this.children && (r = this.children.slice()); + let u = r[s + 2].removeInner(o, l + 1); + u != Jt ? r[s + 2] = u : (r.splice(s, 3), s -= 3); + } + if (i.length) { + for (let s = 0, o; s < e.length; s++) + if (o = e[s]) + for (let l = 0; l < i.length; l++) + i[l].eq(o, n) && (i == this.local && (i = this.local.slice()), i.splice(l--, 1)); + } + return r == this.children && i == this.local ? this : i.length || r.length ? new ct(i, r) : Jt; + } + forChild(e, n) { + if (this == Jt) + return this; + if (n.isLeaf) + return ct.empty; + let r, i; + for (let l = 0; l < this.children.length; l += 3) + if (this.children[l] >= e) { + this.children[l] == e && (r = this.children[l + 2]); + break; + } + let s = e + 1, o = s + n.content.size; + for (let l = 0; l < this.local.length; l++) { + let a = this.local[l]; + if (a.from < o && a.to > s && a.type instanceof ts) { + let u = Math.max(s, a.from) - s, c = Math.min(o, a.to) - s; + u < c && (i || (i = [])).push(a.copy(u, c)); + } + } + if (i) { + let l = new ct(i.sort(eo), Po); + return r ? new $i([l, r]) : l; + } + return r || Jt; + } + /** + @internal + */ + eq(e) { + if (this == e) + return !0; + if (!(e instanceof ct) || this.local.length != e.local.length || this.children.length != e.children.length) + return !1; + for (let n = 0; n < this.local.length; n++) + if (!this.local[n].eq(e.local[n])) + return !1; + for (let n = 0; n < this.children.length; n += 3) + if (this.children[n] != e.children[n] || this.children[n + 1] != e.children[n + 1] || !this.children[n + 2].eq(e.children[n + 2])) + return !1; + return !0; + } + /** + @internal + */ + locals(e) { + return M1(this.localsInner(e)); + } + /** + @internal + */ + localsInner(e) { + if (this == Jt) + return Po; + if (e.inlineContent || !this.local.some(ts.is)) + return this.local; + let n = []; + for (let r = 0; r < this.local.length; r++) + this.local[r].type instanceof ts || n.push(this.local[r]); + return n; + } + forEachSet(e) { + e(this); + } +} +ct.empty = new ct([], []); +ct.removeOverlap = M1; +const Jt = ct.empty; +class $i { + constructor(e) { + this.members = e; + } + map(e, n) { + const r = this.members.map((i) => i.map(e, n, Qs)); + return $i.from(r); + } + forChild(e, n) { + if (n.isLeaf) + return ct.empty; + let r = []; + for (let i = 0; i < this.members.length; i++) { + let s = this.members[i].forChild(e, n); + s != Jt && (s instanceof $i ? r = r.concat(s.members) : r.push(s)); + } + return $i.from(r); + } + eq(e) { + if (!(e instanceof $i) || e.members.length != this.members.length) + return !1; + for (let n = 0; n < this.members.length; n++) + if (!this.members[n].eq(e.members[n])) + return !1; + return !0; + } + locals(e) { + let n, r = !0; + for (let i = 0; i < this.members.length; i++) { + let s = this.members[i].localsInner(e); + if (s.length) + if (!n) + n = s; + else { + r && (n = n.slice(), r = !1); + for (let o = 0; o < s.length; o++) + n.push(s[o]); + } + } + return n ? M1(r ? n : n.sort(eo)) : Po; + } + // Create a group for the given array of decoration sets, or return + // a single set when possible. + static from(e) { + switch (e.length) { + case 0: + return Jt; + case 1: + return e[0]; + default: + return new $i(e.every((n) => n instanceof ct) ? e : e.reduce((n, r) => n.concat(r instanceof ct ? r : r.members), [])); + } + } + forEachSet(e) { + for (let n = 0; n < this.members.length; n++) + this.members[n].forEachSet(e); + } +} +function QM(t, e, n, r, i, s, o) { + let l = t.slice(); + for (let u = 0, c = s; u < n.maps.length; u++) { + let h = 0; + n.maps[u].forEach((d, f, m, y) => { + let b = y - m - (f - d); + for (let w = 0; w < l.length; w += 3) { + let C = l[w + 1]; + if (C < 0 || d > C + c - h) + continue; + let N = l[w] + c - h; + f >= N ? l[w + 1] = d <= N ? -2 : -1 : d >= c && b && (l[w] += b, l[w + 1] += b); + } + h += b; + }), c = n.maps[u].map(c, -1); + } + let a = !1; + for (let u = 0; u < l.length; u += 3) + if (l[u + 1] < 0) { + if (l[u + 1] == -2) { + a = !0, l[u + 1] = -1; + continue; + } + let c = n.map(t[u] + s), h = c - i; + if (h < 0 || h >= r.content.size) { + a = !0; + continue; + } + let d = n.map(t[u + 1] + s, -1), f = d - i, { index: m, offset: y } = r.content.findIndex(h), b = r.maybeChild(m); + if (b && y == h && y + b.nodeSize == f) { + let w = l[u + 2].mapInner(n, b, c + 1, t[u] + s + 1, o); + w != Jt ? (l[u] = h, l[u + 1] = f, l[u + 2] = w) : (l[u + 1] = -2, a = !0); + } else + a = !0; + } + if (a) { + let u = eT(l, t, e, n, i, s, o), c = jc(u, r, 0, o); + e = c.local; + for (let h = 0; h < l.length; h += 3) + l[h + 1] < 0 && (l.splice(h, 3), h -= 3); + for (let h = 0, d = 0; h < c.children.length; h += 3) { + let f = c.children[h]; + for (; d < l.length && l[d] < f; ) + d += 3; + l.splice(d, 0, c.children[h], c.children[h + 1], c.children[h + 2]); + } + } + return new ct(e.sort(eo), l); +} +function Ey(t, e) { + if (!e || !t.length) + return t; + let n = []; + for (let r = 0; r < t.length; r++) { + let i = t[r]; + n.push(new Gt(i.from + e, i.to + e, i.type)); + } + return n; +} +function eT(t, e, n, r, i, s, o) { + function l(a, u) { + for (let c = 0; c < a.local.length; c++) { + let h = a.local[c].map(r, i, u); + h ? n.push(h) : o.onRemove && o.onRemove(a.local[c].spec); + } + for (let c = 0; c < a.children.length; c += 3) + l(a.children[c + 2], a.children[c] + u + 1); + } + for (let a = 0; a < t.length; a += 3) + t[a + 1] == -1 && l(t[a + 2], e[a] + s + 1); + return n; +} +function Oy(t, e, n) { + if (e.isLeaf) + return null; + let r = n + e.nodeSize, i = null; + for (let s = 0, o; s < t.length; s++) + (o = t[s]) && o.from > n && o.to < r && ((i || (i = [])).push(o), t[s] = null); + return i; +} +function Ay(t) { + let e = []; + for (let n = 0; n < t.length; n++) + t[n] != null && e.push(t[n]); + return e; +} +function jc(t, e, n, r) { + let i = [], s = !1; + e.forEach((l, a) => { + let u = Oy(t, l, a + n); + if (u) { + s = !0; + let c = jc(u, l, n + a + 1, r); + c != Jt && i.push(a, a + l.nodeSize, c); + } + }); + let o = Ey(s ? Ay(t) : t, -n).sort(eo); + for (let l = 0; l < o.length; l++) + o[l].type.valid(e, o[l]) || (r.onRemove && r.onRemove(o[l].spec), o.splice(l--, 1)); + return o.length || i.length ? new ct(o, i) : Jt; +} +function eo(t, e) { + return t.from - e.from || t.to - e.to; +} +function M1(t) { + let e = t; + for (let n = 0; n < e.length - 1; n++) { + let r = e[n]; + if (r.from != r.to) + for (let i = n + 1; i < e.length; i++) { + let s = e[i]; + if (s.from == r.from) { + s.to != r.to && (e == t && (e = t.slice()), e[i] = s.copy(s.from, r.to), n5(e, i + 1, s.copy(r.to, s.to))); + continue; + } else { + s.from < r.to && (e == t && (e = t.slice()), e[n] = r.copy(r.from, s.from), n5(e, i, r.copy(s.from, r.to))); + break; + } + } + } + return e; +} +function n5(t, e, n) { + for (; e < t.length && eo(n, t[e]) > 0; ) + e++; + t.splice(e, 0, n); +} +function Bd(t) { + let e = []; + return t.someProp("decorations", (n) => { + let r = n(t.state); + r && r != Jt && e.push(r); + }), t.cursorWrapper && e.push(ct.create(t.state.doc, [t.cursorWrapper.deco])), $i.from(e); +} +const tT = { + childList: !0, + characterData: !0, + characterDataOldValue: !0, + attributes: !0, + attributeOldValue: !0, + subtree: !0 +}, nT = Cn && Qi <= 11; +class rT { + 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; + } +} +class iT { + constructor(e, n) { + this.view = e, this.handleDOMChange = n, this.queue = [], this.flushingSoon = -1, this.observer = null, this.currentSelection = new rT(), this.onCharData = null, this.suppressingSelectionUpdates = !1, this.lastChangedTextNode = null, this.observer = window.MutationObserver && new window.MutationObserver((r) => { + for (let i = 0; i < r.length; i++) + this.queue.push(r[i]); + Cn && Qi <= 11 && r.some((i) => i.type == "childList" && i.removedNodes.length || i.type == "characterData" && i.oldValue.length > i.target.nodeValue.length) ? this.flushSoon() : Kt && e.composing && r.some((i) => i.type == "childList" && i.target.nodeName == "TR") ? (e.input.badSafariComposition = !0, this.flushSoon()) : this.flush(); + }), nT && (this.onCharData = (r) => { + this.queue.push({ target: r.target, type: "characterData", oldValue: r.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, tT)), 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 n = 0; n < e.length; n++) + this.queue.push(e[n]); + 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 (K2(this.view)) { + if (this.suppressingSelectionUpdates) + return vi(this.view); + if (Cn && Qi <= 11 && !this.view.state.selection.empty) { + let e = this.view.domSelectionRange(); + if (e.focusNode && po(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 n = /* @__PURE__ */ new Set(), r; + for (let s = e.focusNode; s; s = Al(s)) + n.add(s); + for (let s = e.anchorNode; s; s = Al(s)) + if (n.has(s)) { + r = s; + break; + } + let i = r && this.view.docView.nearestDesc(r); + if (i && i.ignoreMutation({ + type: "selection", + target: r.nodeType == 3 ? r.parentNode : r + })) + 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 n = this.pendingRecords(); + n.length && (this.queue = []); + let r = e.domSelectionRange(), i = !this.suppressingSelectionUpdates && !this.currentSelection.eq(r) && K2(e) && !this.ignoreSelectionChange(r), s = -1, o = -1, l = !1, a = []; + if (e.editable) + for (let c = 0; c < n.length; c++) { + let h = this.registerMutation(n[c], a); + h && (s = s < 0 ? h.from : Math.min(h.from, s), o = o < 0 ? h.to : Math.max(h.to, o), h.typeOver && (l = !0)); + } + if (Qn && a.length) { + let c = a.filter((h) => h.nodeName == "BR"); + if (c.length == 2) { + let [h, d] = c; + h.parentNode && h.parentNode.parentNode == d.parentNode ? d.remove() : h.remove(); + } else { + let { focusNode: h } = this.currentSelection; + for (let d of c) { + let f = d.parentNode; + f && f.nodeName == "LI" && (!h || lT(e, h) != f) && d.remove(); + } + } + } else if ((Vt || Kt) && a.some((c) => c.nodeName == "BR") && (e.input.lastKeyCode == 8 || e.input.lastKeyCode == 46)) { + for (let c of a) + if (c.nodeName == "BR" && c.parentNode) { + let h = c.nextSibling; + h && h.nodeType == 1 && h.contentEditable == "false" && c.parentNode.removeChild(c); + } + } + let u = null; + s < 0 && i && e.input.lastFocus > Date.now() - 200 && Math.max(e.input.lastTouch, e.input.lastClick.time) < Date.now() - 300 && Dh(r) && (u = b1(e)) && u.eq(Pe.near(e.state.doc.resolve(0), 1)) ? (e.input.lastFocus = 0, vi(e), this.currentSelection.set(r), e.scrollToSelection()) : (s > -1 || i) && (s > -1 && (e.docView.markDirty(s, o), sT(e)), e.input.badSafariComposition && (e.input.badSafariComposition = !1, aT(e, a)), this.handleDOMChange(s, o, l, a), e.docView && e.docView.dirty ? e.updateState(e.state) : this.currentSelection.eq(r) || vi(e), this.currentSelection.set(r)); + } + registerMutation(e, n) { + if (n.indexOf(e.target) > -1) + return null; + let r = this.view.docView.nearestDesc(e.target); + if (e.type == "attributes" && (r == this.view.docView || e.attributeName == "contenteditable" || // Firefox sometimes fires spurious events for null/empty styles + e.attributeName == "style" && !e.oldValue && !e.target.getAttribute("style")) || !r || r.ignoreMutation(e)) + return null; + if (e.type == "childList") { + for (let c = 0; c < e.addedNodes.length; c++) { + let h = e.addedNodes[c]; + n.push(h), h.nodeType == 3 && (this.lastChangedTextNode = h); + } + if (r.contentDOM && r.contentDOM != r.dom && !r.contentDOM.contains(e.target)) + return { from: r.posBefore, to: r.posAfter }; + let i = e.previousSibling, s = e.nextSibling; + if (Cn && Qi <= 11 && e.addedNodes.length) + for (let c = 0; c < e.addedNodes.length; c++) { + let { previousSibling: h, nextSibling: d } = e.addedNodes[c]; + (!h || Array.prototype.indexOf.call(e.addedNodes, h) < 0) && (i = h), (!d || Array.prototype.indexOf.call(e.addedNodes, d) < 0) && (s = d); + } + let o = i && i.parentNode == e.target ? Ut(i) + 1 : 0, l = r.localPosFromDOM(e.target, o, -1), a = s && s.parentNode == e.target ? Ut(s) : e.target.childNodes.length, u = r.localPosFromDOM(e.target, a, 1); + return { from: l, to: u }; + } else return e.type == "attributes" ? { from: r.posAtStart - r.border, to: r.posAtEnd + r.border } : (this.lastChangedTextNode = e.target, { + from: r.posAtStart, + to: r.posAtEnd, + // An event was generated for a text change that didn't change + // any text. Mark the dom change to fall back to assuming the + // selection was typed over with an identical value if it can't + // find another change. + typeOver: e.target.nodeValue == e.oldValue + }); + } +} +let r5 = /* @__PURE__ */ new WeakMap(), i5 = !1; +function sT(t) { + if (!r5.has(t) && (r5.set(t, null), ["normal", "nowrap", "pre-line"].indexOf(getComputedStyle(t.dom).whiteSpace) !== -1)) { + if (t.requiresGeckoHackNode = Qn, i5) + 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."), i5 = !0; + } +} +function s5(t, e) { + let n = e.startContainer, r = e.startOffset, i = e.endContainer, s = e.endOffset, o = t.domAtPos(t.state.selection.anchor); + return po(o.node, o.offset, i, s) && ([n, r, i, s] = [i, s, n, r]), { anchorNode: n, anchorOffset: r, focusNode: i, focusOffset: s }; +} +function oT(t, e) { + if (e.getComposedRanges) { + let i = e.getComposedRanges(t.root)[0]; + if (i) + return s5(t, i); + } + let n; + function r(i) { + i.preventDefault(), i.stopImmediatePropagation(), n = i.getTargetRanges()[0]; + } + return t.dom.addEventListener("beforeinput", r, !0), document.execCommand("indent"), t.dom.removeEventListener("beforeinput", r, !0), n ? s5(t, n) : null; +} +function lT(t, e) { + for (let n = e.parentNode; n && n != t.dom; n = n.parentNode) { + let r = t.docView.nearestDesc(n, !0); + if (r && r.node.isBlock) + return n; + } + return null; +} +function aT(t, e) { + var n; + let { focusNode: r, focusOffset: i } = t.domSelectionRange(); + for (let s of e) + if (((n = s.parentNode) === null || n === void 0 ? void 0 : n.nodeName) == "TR") { + let o = s.nextSibling; + for (; o && o.nodeName != "TD" && o.nodeName != "TH"; ) + o = o.nextSibling; + if (o) { + let l = o; + for (; ; ) { + let a = l.firstChild; + if (!a || a.nodeType != 1 || a.contentEditable == "false" || /^(BR|IMG)$/.test(a.nodeName)) + break; + l = a; + } + l.insertBefore(s, l.firstChild), r == s && t.domSelection().collapse(s, i); + } else + s.parentNode.removeChild(s); + } +} +function uT(t, e, n) { + let { node: r, fromOffset: i, toOffset: s, from: o, to: l } = t.docView.parseRange(e, n), a = t.domSelectionRange(), u, c = a.anchorNode; + if (c && t.dom.contains(c.nodeType == 1 ? c : c.parentNode) && (u = [{ node: c, offset: a.anchorOffset }], Dh(a) || u.push({ node: a.focusNode, offset: a.focusOffset })), Vt && t.input.lastKeyCode === 8) + for (let b = s; b > i; b--) { + let w = r.childNodes[b - 1], C = w.pmViewDesc; + if (w.nodeName == "BR" && !C) { + s = b; + break; + } + if (!C || C.size) + break; + } + let h = t.state.doc, d = t.someProp("domParser") || co.fromSchema(t.state.schema), f = h.resolve(o), m = null, y = d.parse(r, { + topNode: f.parent, + topMatch: f.parent.contentMatchAt(f.index()), + topOpen: !0, + from: i, + to: s, + preserveWhitespace: f.parent.type.whitespace == "pre" ? "full" : !0, + findPositions: u, + ruleFromNode: cT, + context: f + }); + if (u && u[0].pos != null) { + let b = u[0].pos, w = u[1] && u[1].pos; + w == null && (w = b), m = { anchor: b + o, head: w + o }; + } + return { doc: y, sel: m, from: o, to: l }; +} +function cT(t) { + let e = t.pmViewDesc; + if (e) + return e.parseRule(); + if (t.nodeName == "BR" && t.parentNode) { + if (Kt && /^(ul|ol)$/i.test(t.parentNode.nodeName)) { + let n = document.createElement("div"); + return n.appendChild(document.createElement("li")), { skip: n }; + } else if (t.parentNode.lastChild == t || Kt && /^(tr|table)$/i.test(t.parentNode.nodeName)) + return { ignore: !0 }; + } else if (t.nodeName == "IMG" && t.getAttribute("mark-placeholder")) + return { ignore: !0 }; + return null; +} +const hT = /^(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 dT(t, e, n, r, i) { + let s = t.input.compositionPendingChanges || (t.composing ? t.input.compositionID : 0); + if (t.input.compositionPendingChanges = 0, e < 0) { + let L = t.input.lastSelectionTime > Date.now() - 50 ? t.input.lastSelectionOrigin : null, K = b1(t, L); + if (K && !t.state.selection.eq(K)) { + if (Vt && gi && t.input.lastKeyCode === 13 && Date.now() - 100 < t.input.lastKeyCodeTime && t.someProp("handleKeyDown", (P) => P(t, Ps(13, "Enter")))) + return; + let J = t.state.tr.setSelection(K); + L == "pointer" ? J.setMeta("pointer", !0) : L == "key" && J.scrollIntoView(), s && J.setMeta("composition", s), t.dispatch(J); + } + return; + } + let o = t.state.doc.resolve(e), l = o.sharedDepth(n); + e = o.before(l + 1), n = t.state.doc.resolve(n).after(l + 1); + let a = t.state.selection, u = uT(t, e, n), c = t.state.doc, h = c.slice(u.from, u.to), d, f; + t.input.lastKeyCode === 8 && Date.now() - 100 < t.input.lastKeyCodeTime ? (d = t.state.selection.to, f = "end") : (d = t.state.selection.from, f = "start"), t.input.lastKeyCode = null; + let m = mT(h.content, u.doc.content, u.from, d, f); + if (m && t.input.domChangeCount++, (Il && t.input.lastIOSEnter > Date.now() - 225 || gi) && i.some((L) => L.nodeType == 1 && !hT.test(L.nodeName)) && (!m || m.endA >= m.endB) && t.someProp("handleKeyDown", (L) => L(t, Ps(13, "Enter")))) { + t.input.lastIOSEnter = 0; + return; + } + if (!m) + if (r && a instanceof Ce && !a.empty && a.$head.sameParent(a.$anchor) && !t.composing && !(u.sel && u.sel.anchor != u.sel.head)) + m = { start: a.from, endA: a.to, endB: a.to }; + else { + if (u.sel) { + let L = o5(t, t.state.doc, u.sel); + if (L && !L.eq(t.state.selection)) { + let K = t.state.tr.setSelection(L); + s && K.setMeta("composition", s), t.dispatch(K); + } + } + return; + } + t.state.selection.from < t.state.selection.to && m.start == m.endB && t.state.selection instanceof Ce && (m.start > t.state.selection.from && m.start <= t.state.selection.from + 2 && t.state.selection.from >= u.from ? m.start = t.state.selection.from : m.endA < t.state.selection.to && m.endA >= t.state.selection.to - 2 && t.state.selection.to <= u.to && (m.endB += t.state.selection.to - m.endA, m.endA = t.state.selection.to)), Cn && Qi <= 11 && m.endB == m.start + 1 && m.endA == m.start && m.start > u.from && u.doc.textBetween(m.start - u.from - 1, m.start - u.from + 1) == "  " && (m.start--, m.endA--, m.endB--); + let y = u.doc.resolveNoCache(m.start - u.from), b = u.doc.resolveNoCache(m.endB - u.from), w = c.resolve(m.start), C = y.sameParent(b) && y.parent.inlineContent && w.end() >= m.endA; + if ((Il && t.input.lastIOSEnter > Date.now() - 225 && (!C || i.some((L) => L.nodeName == "DIV" || L.nodeName == "P")) || !C && y.pos < u.doc.content.size && (!y.sameParent(b) || !y.parent.inlineContent) && y.pos < b.pos && !/\S/.test(u.doc.textBetween(y.pos, b.pos, "", ""))) && t.someProp("handleKeyDown", (L) => L(t, Ps(13, "Enter")))) { + t.input.lastIOSEnter = 0; + return; + } + if (t.state.selection.anchor > m.start && pT(c, m.start, m.endA, y, b) && t.someProp("handleKeyDown", (L) => L(t, Ps(8, "Backspace")))) { + gi && Vt && t.domObserver.suppressSelectionUpdates(); + return; + } + Vt && m.endB == m.start && (t.input.lastChromeDelete = Date.now()), gi && !C && y.start() != b.start() && b.parentOffset == 0 && y.depth == b.depth && u.sel && u.sel.anchor == u.sel.head && u.sel.head == m.endA && (m.endB -= 2, b = u.doc.resolveNoCache(m.endB - u.from), setTimeout(() => { + t.someProp("handleKeyDown", function(L) { + return L(t, Ps(13, "Enter")); + }); + }, 20)); + let N = m.start, B = m.endA, _ = (L) => { + let K = L || t.state.tr.replace(N, B, u.doc.slice(m.start - u.from, m.endB - u.from)); + if (u.sel) { + let J = o5(t, K.doc, u.sel); + J && !(Vt && t.composing && J.empty && (m.start != m.endB || t.input.lastChromeDelete < Date.now() - 100) && (J.head == N || J.head == K.mapping.map(B) - 1) || Cn && J.empty && J.head == N) && K.setSelection(J); + } + return s && K.setMeta("composition", s), K.scrollIntoView(); + }, A; + if (C) + if (y.pos == b.pos) { + Cn && Qi <= 11 && y.parentOffset == 0 && (t.domObserver.suppressSelectionUpdates(), setTimeout(() => vi(t), 20)); + let L = _(t.state.tr.delete(N, B)), K = c.resolve(m.start).marksAcross(c.resolve(m.endA)); + K && L.ensureMarks(K), t.dispatch(L); + } else if ( + // Adding or removing a mark + m.endA == m.endB && (A = fT(y.parent.content.cut(y.parentOffset, b.parentOffset), w.parent.content.cut(w.parentOffset, m.endA - w.start()))) + ) { + let L = _(t.state.tr); + A.type == "add" ? L.addMark(N, B, A.mark) : L.removeMark(N, B, A.mark), t.dispatch(L); + } else if (y.parent.child(y.index()).isText && y.index() == b.index() - (b.textOffset ? 0 : 1)) { + let L = y.parent.textBetween(y.parentOffset, b.parentOffset), K = () => _(t.state.tr.insertText(L, N, B)); + t.someProp("handleTextInput", (J) => J(t, N, B, L, K)) || t.dispatch(K()); + } else + t.dispatch(_()); + else + t.dispatch(_()); +} +function o5(t, e, n) { + return Math.max(n.anchor, n.head) > e.content.size ? null : w1(t, e.resolve(n.anchor), e.resolve(n.head)); +} +function fT(t, e) { + let n = t.firstChild.marks, r = e.firstChild.marks, i = n, s = r, o, l, a; + for (let c = 0; c < r.length; c++) + i = r[c].removeFromSet(i); + for (let c = 0; c < n.length; c++) + s = n[c].removeFromSet(s); + if (i.length == 1 && s.length == 0) + l = i[0], o = "add", a = (c) => c.mark(l.addToSet(c.marks)); + else if (i.length == 0 && s.length == 1) + l = s[0], o = "remove", a = (c) => c.mark(l.removeFromSet(c.marks)); + else + return null; + let u = []; + for (let c = 0; c < e.childCount; c++) + u.push(a(e.child(c))); + if (re.from(u).eq(t)) + return { mark: l, type: o }; +} +function pT(t, e, n, r, i) { + if ( + // The content must have shrunk + n - e <= i.pos - r.pos || // newEnd must point directly at or after the end of the block that newStart points into + Ld(r, !0, !1) < i.pos + ) + return !1; + let s = t.resolve(e); + if (!r.parent.isTextblock) { + let l = s.nodeAfter; + return l != null && n == e + l.nodeSize; + } + if (s.parentOffset < s.parent.content.size || !s.parent.isTextblock) + return !1; + let o = t.resolve(Ld(s, !0, !0)); + return !o.parent.isTextblock || o.pos > n || Ld(o, !0, !1) < n ? !1 : r.parent.content.cut(r.parentOffset).eq(o.parent.content); +} +function Ld(t, e, n) { + let r = t.depth, i = e ? t.end() : t.pos; + for (; r > 0 && (e || t.indexAfter(r) == t.node(r).childCount); ) + r--, i++, e = !1; + if (n) { + let s = t.node(r).maybeChild(t.indexAfter(r)); + for (; s && !s.isLeaf; ) + s = s.firstChild, i++; + } + return i; +} +function mT(t, e, n, r, i) { + let s = t.findDiffStart(e, n); + if (s == null) + return null; + let { a: o, b: l } = t.findDiffEnd(e, n + t.size, n + e.size); + if (i == "end") { + let a = Math.max(0, s - Math.min(o, l)); + r -= o + a - s; + } + if (o < s && t.size < e.size) { + let a = r <= s && r >= o ? s - r : 0; + s -= a, s && s < e.size && l5(e.textBetween(s - 1, s + 1)) && (s += a ? 1 : -1), l = s + (l - o), o = s; + } else if (l < s) { + let a = r <= s && r >= l ? s - r : 0; + s -= a, s && s < t.size && l5(t.textBetween(s - 1, s + 1)) && (s += a ? 1 : -1), o = s + (o - l), l = s; + } + return { start: s, endA: o, endB: l }; +} +function l5(t) { + if (t.length != 2) + return !1; + let e = t.charCodeAt(0), n = t.charCodeAt(1); + return e >= 56320 && e <= 57343 && n >= 55296 && n <= 56319; +} +class Iy { + /** + Create a view. `place` may be a DOM node that the editor should + be appended to, a function that will place it into the document, + or an object whose `mount` property holds the node to use as the + document container. If it is `null`, the editor will not be + added to the document. + */ + constructor(e, n) { + 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 IM(), this.prevDirectPlugins = [], this.pluginViews = [], this.requiresGeckoHackNode = !1, this.dragging = null, this._props = n, this.state = n.state, this.directPlugins = n.plugins || [], this.directPlugins.forEach(d5), 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 = c5(this), u5(this), this.nodeViews = h5(this), this.docView = $2(this.state.doc, a5(this), Bd(this), this.dom, this), this.domObserver = new iT(this, (r, i, s, o) => dT(this, r, i, s, o)), this.domObserver.start(), DM(this), this.updatePluginViews(); + } + /** + Holds `true` when a + [composition](https://w3c.github.io/uievents/#events-compositionevents) + is active. + */ + get composing() { + return this.input.composing; + } + /** + The view's current [props](https://prosemirror.net/docs/ref/#view.EditorProps). + */ + get props() { + if (this._props.state != this.state) { + let e = this._props; + this._props = {}; + for (let n in e) + this._props[n] = e[n]; + this._props.state = this.state; + } + return this._props; + } + /** + Update the view's props. Will immediately cause an update to + the DOM. + */ + update(e) { + e.handleDOMEvents != this._props.handleDOMEvents && cp(this); + let n = this._props; + this._props = e, e.plugins && (e.plugins.forEach(d5), this.directPlugins = e.plugins), this.updateStateInner(e.state, n); + } + /** + Update the view by updating existing props object with the object + given as argument. Equivalent to `view.update(Object.assign({}, + view.props, props))`. + */ + setProps(e) { + let n = {}; + for (let r in this._props) + n[r] = this._props[r]; + n.state = this.state; + for (let r in e) + n[r] = e[r]; + this.update(n); + } + /** + Update the editor's `state` prop, without touching any of the + other props. + */ + updateState(e) { + this.updateStateInner(e, this._props); + } + updateStateInner(e, n) { + var r; + let i = this.state, s = !1, o = !1; + e.storedMarks && this.composing && (Cy(this), o = !0), this.state = e; + let l = i.plugins != e.plugins || this._props.plugins != n.plugins; + if (l || this._props.plugins != n.plugins || this._props.nodeViews != n.nodeViews) { + let f = h5(this); + yT(f, this.nodeViews) && (this.nodeViews = f, s = !0); + } + (l || n.handleDOMEvents != this._props.handleDOMEvents) && cp(this), this.editable = c5(this), u5(this); + let a = Bd(this), u = a5(this), c = i.plugins != e.plugins && !i.doc.eq(e.doc) ? "reset" : e.scrollToSelection > i.scrollToSelection ? "to selection" : "preserve", h = s || !this.docView.matchesNode(e.doc, u, a); + (h || !e.selection.eq(i.selection)) && (o = !0); + let d = c == "preserve" && o && this.dom.style.overflowAnchor == null && UN(this); + if (o) { + this.domObserver.stop(); + let f = h && (Cn || Vt) && !this.composing && !i.selection.empty && !e.selection.empty && gT(i.selection, e.selection); + if (h) { + let m = Vt ? this.trackWrites = this.domSelectionRange().focusNode : null; + this.composing && (this.input.compositionNode = UM(this)), (s || !this.docView.update(e.doc, u, a, this)) && (this.docView.updateOuterDeco(u), this.docView.destroy(), this.docView = $2(e.doc, u, a, this.dom, this)), m && (!this.trackWrites || !this.dom.contains(this.trackWrites)) && (f = !0); + } + f || !(this.input.mouseDown && this.domObserver.currentSelection.eq(this.domSelectionRange()) && gM(this)) ? vi(this, f) : (dy(this, e.selection), this.domObserver.setCurSelection()), this.domObserver.start(); + } + this.updatePluginViews(i), !((r = this.dragging) === null || r === void 0) && r.node && !i.doc.eq(e.doc) && this.updateDraggedNode(this.dragging, i), c == "reset" ? this.dom.scrollTop = 0 : c == "to selection" ? this.scrollToSelection() : d && GN(d); + } + /** + @internal + */ + scrollToSelection() { + let e = this.domSelectionRange().focusNode; + if (!(!e || !this.dom.contains(e.nodeType == 1 ? e : e.parentNode))) { + if (!this.someProp("handleScrollToSelection", (n) => n(this))) if (this.state.selection instanceof Ne) { + let n = this.docView.domAfterPos(this.state.selection.from); + n.nodeType == 1 && P2(this, n.getBoundingClientRect(), e); + } else + P2(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 n = 0; n < this.directPlugins.length; n++) { + let r = this.directPlugins[n]; + r.spec.view && this.pluginViews.push(r.spec.view(this)); + } + for (let n = 0; n < this.state.plugins.length; n++) { + let r = this.state.plugins[n]; + r.spec.view && this.pluginViews.push(r.spec.view(this)); + } + } else + for (let n = 0; n < this.pluginViews.length; n++) { + let r = this.pluginViews[n]; + r.update && r.update(this, e); + } + } + updateDraggedNode(e, n) { + let r = e.node, i = -1; + if (this.state.doc.nodeAt(r.from) == r.node) + i = r.from; + else { + let s = r.from + (this.state.doc.content.size - n.doc.content.size); + (s > 0 && this.state.doc.nodeAt(s)) == r.node && (i = s); + } + this.dragging = new My(e.slice, e.move, i < 0 ? void 0 : Ne.create(this.state.doc, i)); + } + someProp(e, n) { + let r = this._props && this._props[e], i; + if (r != null && (i = n ? n(r) : r)) + return i; + for (let o = 0; o < this.directPlugins.length; o++) { + let l = this.directPlugins[o].props[e]; + if (l != null && (i = n ? n(l) : l)) + return i; + } + let s = this.state.plugins; + if (s) + for (let o = 0; o < s.length; o++) { + let l = s[o].props[e]; + if (l != null && (i = n ? n(l) : l)) + return i; + } + } + /** + Query whether the view has focus. + */ + hasFocus() { + if (Cn) { + 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 the editor. + */ + focus() { + this.domObserver.stop(), this.editable && KN(this.dom), vi(this), this.domObserver.start(); + } + /** + Get the document root in which the editor exists. This will + usually be the top-level `document`, but might be a [shadow + DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Shadow_DOM) + root if the editor is inside one. + */ + get root() { + let e = this._root; + if (e == null) { + for (let n = this.dom.parentNode; n; n = n.parentNode) + if (n.nodeType == 9 || n.nodeType == 11 && n.host) + return n.getSelection || (Object.getPrototypeOf(n).getSelection = () => n.ownerDocument.getSelection()), this._root = n; + } + return e || document; + } + /** + When an existing editor view is moved to a new document or + shadow tree, call this to make it recompute its root. + */ + updateRoot() { + this._root = null; + } + /** + Given a pair of viewport coordinates, return the document + position that corresponds to them. May return null if the given + coordinates aren't inside of the editor. When an object is + returned, its `pos` property is the position nearest to the + coordinates, and its `inside` property holds the position of the + inner node that the position falls inside of, or -1 if it is at + the top level, not in any node. + */ + posAtCoords(e) { + return QN(this, e); + } + /** + Returns the viewport rectangle at a given document position. + `left` and `right` will be the same number, as this returns a + flat cursor-ish rectangle. If the position is between two things + that aren't directly adjacent, `side` determines which element + is used. When < 0, the element before the position is used, + otherwise the element after. + */ + coordsAtPos(e, n = 1) { + return iy(this, e, n); + } + /** + Find the DOM position that corresponds to the given document + position. When `side` is negative, find the position as close as + possible to the content before the position. When positive, + prefer positions close to the content after the position. When + zero, prefer as shallow a position as possible. + + Note that you should **not** mutate the editor's internal DOM, + only inspect it (and even that is usually not necessary). + */ + domAtPos(e, n = 0) { + return this.docView.domFromPos(e, n); + } + /** + Find the DOM node that represents the document node after the + given position. May return `null` when the position doesn't point + in front of a node or if the node is inside an opaque node view. + + This is intended to be able to call things like + `getBoundingClientRect` on that DOM node. Do **not** mutate the + editor DOM directly, or add styling this way, since that will be + immediately overriden by the editor as it redraws the node. + */ + nodeDOM(e) { + let n = this.docView.descAt(e); + return n ? n.nodeDOM : null; + } + /** + Find the document position that corresponds to a given DOM + position. (Whenever possible, it is preferable to inspect the + document structure directly, rather than poking around in the + DOM, but sometimes—for example when interpreting an event + target—you don't have a choice.) + + The `bias` parameter can be used to influence which side of a DOM + node to use when the position is inside a leaf node. + */ + posAtDOM(e, n, r = -1) { + let i = this.docView.posFromDOM(e, n, r); + if (i == null) + throw new RangeError("DOM position not inside the editor"); + return i; + } + /** + Find out whether the selection is at the end of a textblock when + moving in a given direction. When, for example, given `"left"`, + it will return true if moving left from the current cursor + position would leave that position's parent textblock. Will apply + to the view's current state by default, but it is possible to + pass a different state. + */ + endOfTextblock(e, n) { + return iM(this, n || this.state, e); + } + /** + Run the editor's paste logic with the given HTML string. The + `event`, if given, will be passed to the + [`handlePaste`](https://prosemirror.net/docs/ref/#view.EditorProps.handlePaste) hook. + */ + pasteHTML(e, n) { + return o0(this, "", e, !1, n || new ClipboardEvent("paste")); + } + /** + Run the editor's paste logic with the given plain-text input. + */ + pasteText(e, n) { + return o0(this, e, null, !0, n || new ClipboardEvent("paste")); + } + /** + Serialize the given slice as it would be if it was copied from + this editor. Returns a DOM element that contains a + representation of the slice as its children, a textual + representation, and the transformed slice (which can be + different from the given input due to hooks like + [`transformCopied`](https://prosemirror.net/docs/ref/#view.EditorProps.transformCopied)). + */ + serializeForClipboard(e) { + return k1(this, e); + } + /** + Removes the editor from the DOM and destroys all [node + views](https://prosemirror.net/docs/ref/#view.NodeView). + */ + destroy() { + this.docView && (_M(this), this.destroyPluginViews(), this.mounted ? (this.docView.update(this.state.doc, [], Bd(this), this), this.dom.textContent = "") : this.dom.parentNode && this.dom.parentNode.removeChild(this.dom), this.docView.destroy(), this.docView = null, PN()); + } + /** + This is true when the view has been + [destroyed](https://prosemirror.net/docs/ref/#view.EditorView.destroy) (and thus should not be + used anymore). + */ + get isDestroyed() { + return this.docView == null; + } + /** + Used for testing. + */ + dispatchEvent(e) { + return zM(this, e); + } + /** + @internal + */ + domSelectionRange() { + let e = this.domSelection(); + return e ? Kt && this.root.nodeType === 11 && HN(this.dom.ownerDocument) == this.dom && oT(this, e) || e : { focusNode: null, focusOffset: 0, anchorNode: null, anchorOffset: 0 }; + } + /** + @internal + */ + domSelection() { + return this.root.getSelection(); + } +} +Iy.prototype.dispatch = function(t) { + let e = this._props.dispatchTransaction; + e ? e.call(this, t) : this.updateState(this.state.apply(t)); +}; +function a5(t) { + let e = /* @__PURE__ */ Object.create(null); + return e.class = "ProseMirror", e.contenteditable = String(t.editable), t.someProp("attributes", (n) => { + if (typeof n == "function" && (n = n(t.state)), n) + for (let r in n) + r == "class" ? e.class += " " + n[r] : r == "style" ? e.style = (e.style ? e.style + ";" : "") + n[r] : !e[r] && r != "contenteditable" && r != "nodeName" && (e[r] = String(n[r])); + }), e.translate || (e.translate = "no"), [Gt.node(0, t.state.doc.content.size, e)]; +} +function u5(t) { + if (t.markCursor) { + let e = document.createElement("img"); + e.className = "ProseMirror-separator", e.setAttribute("mark-placeholder", "true"), e.setAttribute("alt", ""), t.cursorWrapper = { dom: e, deco: Gt.widget(t.state.selection.from, e, { raw: !0, marks: t.markCursor }) }; + } else + t.cursorWrapper = null; +} +function c5(t) { + return !t.someProp("editable", (e) => e(t.state) === !1); +} +function gT(t, e) { + let n = Math.min(t.$anchor.sharedDepth(t.head), e.$anchor.sharedDepth(e.head)); + return t.$anchor.start(n) != e.$anchor.start(n); +} +function h5(t) { + let e = /* @__PURE__ */ Object.create(null); + function n(r) { + for (let i in r) + Object.prototype.hasOwnProperty.call(e, i) || (e[i] = r[i]); + } + return t.someProp("nodeViews", n), t.someProp("markViews", n), e; +} +function yT(t, e) { + let n = 0, r = 0; + for (let i in t) { + if (t[i] != e[i]) + return !0; + n++; + } + for (let i in e) + r++; + return n != r; +} +function d5(t) { + if (t.spec.state || t.spec.filterTransaction || t.spec.appendTransaction) + throw new RangeError("Plugins passed directly to the view must not have a state component"); +} +function Mi(t, e) { + return t.meta = { + package: "@milkdown/core", + group: "System", + ...e + }, t; +} +const Dy = { + text: (t, e, n, r) => { + const i = t.value; + return /^[^*_\\]*\s+$/.test(i) ? i : n.safe(i, { ...r, encode: [] }); + }, + strong: (t, e, n, r) => { + const i = t.marker || n.options.strong || "*", s = n.enter("strong"), o = n.createTracker(r); + let l = o.move(i + i); + return l += o.move( + n.containerPhrasing(t, { + before: l, + after: i, + ...o.current() + }) + ), l += o.move(i + i), s(), l; + }, + emphasis: (t, e, n, r) => { + const i = t.marker || n.options.emphasis || "*", s = n.enter("emphasis"), o = n.createTracker(r); + let l = o.move(i); + return l += o.move( + n.containerPhrasing(t, { + before: l, + after: i, + ...o.current() + }) + ), l += o.move(i), s(), l; + } +}, ln = Ve({}, "editorView"), va = Ve({}, "editorState"), Fd = Ve([], "initTimer"), hp = Ve({}, "editor"), a0 = Ve([], "inputRules"), us = Ve([], "prosePlugins"), u0 = Ve( + [], + "remarkPlugins" +), c0 = Ve([], "nodeView"), h0 = Ve([], "markView"), to = Ve( + Uf().use(Ff).use(qf), + "remark" +), Pa = Ve( + { + handlers: Dy, + encode: [] + }, + "remarkStringifyOptions" +), rc = jr("ConfigReady"); +function vT(t) { + const e = (n) => (n.record(rc), async () => (await t(n), n.done(rc), () => { + n.clearTimer(rc); + })); + return Mi(e, { + displayName: "Config" + }), e; +} +const no = jr("InitReady"); +function bT(t) { + const e = (n) => (n.inject(hp, t).inject(us, []).inject(u0, []).inject(a0, []).inject(c0, []).inject(h0, []).inject(Pa, { + handlers: Dy, + encode: [] + }).inject(to, Uf().use(Ff).use(qf)).inject(Fd, [rc]).record(no), async () => { + await n.waitTimers(Fd); + const r = n.get(Pa); + return n.set( + to, + Uf().use(Ff).use(qf, r) + ), n.done(no), () => { + n.remove(hp).remove(us).remove(u0).remove(a0).remove(c0).remove(h0).remove(Pa).remove(to).remove(Fd).clearTimer(no); + }; + }); + return Mi(e, { + displayName: "Init" + }), e; +} +const an = jr("SchemaReady"), Vd = Ve([], "schemaTimer"), Fr = Ve({}, "schema"), Ba = Ve([], "nodes"), La = Ve([], "marks"); +function f5(t) { + var e; + return { + ...t, + parseDOM: (e = t.parseDOM) == null ? void 0 : e.map((n) => ({ priority: t.priority, ...n })) + }; +} +const _y = (t) => (t.inject(Fr, {}).inject(Ba, []).inject(La, []).inject(Vd, [no]).record(an), async () => { + await t.waitTimers(Vd); + const e = t.get(to), r = t.get(u0).reduce( + (l, a) => l.use(a.plugin, a.options), + e + ); + t.set(to, r); + const i = Object.fromEntries( + t.get(Ba).map(([l, a]) => [l, f5(a)]) + ), s = Object.fromEntries( + t.get(La).map(([l, a]) => [l, f5(a)]) + ), o = new Iw({ nodes: i, marks: s }); + return t.set(Fr, o), t.done(an), () => { + t.remove(Fr).remove(Ba).remove(La).remove(Vd).clearTimer(an); + }; +}); +Mi(_y, { + displayName: "Schema" +}); +var Vs, Gn; +class Ry { + constructor() { + Z(this, Vs); + Z(this, Gn); + V(this, Vs, new b7()), V(this, Gn, null), this.setCtx = (e) => { + V(this, Gn, e); + }, this.chain = () => { + if (T(this, Gn) == null) throw dd(); + const e = T(this, Gn), n = [], r = this.get.bind(this), i = { + run: () => { + const o = zl(...n), l = e.get(ln); + return o(l.state, l.dispatch, l); + }, + inline: (o) => (n.push(o), i), + pipe: s.bind(this) + }; + function s(o, l) { + const a = r(o); + return n.push(a(l)), i; + } + return i; + }; + } + get ctx() { + return T(this, Gn); + } + /// Register a command into the manager. + create(e, n) { + const r = e.create(T(this, Vs).sliceMap); + return r.set(n), r; + } + get(e) { + return T(this, Vs).get(e).get(); + } + remove(e) { + return T(this, Vs).remove(e); + } + call(e, n) { + if (T(this, Gn) == null) throw dd(); + const i = this.get(e)(n), s = T(this, Gn).get(ln); + return i(s.state, s.dispatch, s); + } + /// Call an inline command. + inline(e) { + if (T(this, Gn) == null) throw dd(); + const n = T(this, Gn).get(ln); + return e(n.state, n.dispatch, n); + } +} +Vs = new WeakMap(), Gn = new WeakMap(); +function wT(t = "cmdKey") { + return Ve(() => () => !1, t); +} +const me = Ve(new Ry(), "commands"), Hd = Ve([an], "commandsTimer"), Fa = jr("CommandsReady"), zy = (t) => { + const e = new Ry(); + return e.setCtx(t), t.inject(me, e).inject(Hd, [an]).record(Fa), async () => (await t.waitTimers(Hd), t.done(Fa), () => { + t.remove(me).remove(Hd).clearTimer(Fa); + }); +}; +Mi(zy, { + displayName: "Commands" +}); +function kT(t) { + const e = zl( + sN, + d1, + VC, + z6 + ); + return t.Backspace = e, t; +} +var Hs, mn; +class Py { + constructor() { + Z(this, Hs); + Z(this, mn); + V(this, Hs, null), V(this, mn, []), this.setCtx = (e) => { + V(this, Hs, e); + }, this.add = (e) => (T(this, mn).push(e), () => { + V(this, mn, T(this, mn).filter((n) => n !== e)); + }), this.addObjectKeymap = (e) => { + const n = []; + return Object.entries(e).forEach(([r, i]) => { + if (typeof i == "function") { + const s = { + key: r, + onRun: () => i + }; + T(this, mn).push(s), n.push(() => { + V(this, mn, T(this, mn).filter((o) => o !== s)); + }); + } else + T(this, mn).push(i), n.push(() => { + V(this, mn, T(this, mn).filter((s) => s !== i)); + }); + }), () => { + n.forEach((r) => r()); + }; + }, this.addBaseKeymap = () => { + const e = kT(rN); + return this.addObjectKeymap(e); + }, this.build = () => { + const e = {}; + return T(this, mn).forEach((r) => { + e[r.key] = [...e[r.key] || [], r]; + }), Object.fromEntries( + Object.entries(e).map(([r, i]) => { + const s = i.sort( + (l, a) => (a.priority ?? 50) - (l.priority ?? 50) + ); + return [r, (l, a, u) => { + const c = T(this, Hs); + if (c == null) throw wh(); + const h = s.map((f) => f.onRun(c)); + return zl(...h)(l, a, u); + }]; + }) + ); + }; + } + get ctx() { + return T(this, Hs); + } +} +Hs = new WeakMap(), mn = new WeakMap(); +const Wc = Ve(new Py(), "keymap"), $d = Ve([an], "keymapTimer"), Va = jr("KeymapReady"), xT = (t) => { + const e = new Py(); + return e.setCtx(t), t.inject(Wc, e).inject($d, [an]).record(Va), async () => (await t.waitTimers($d), t.done(Va), () => { + t.remove(Wc).remove($d).clearTimer(Va); + }); +}, ic = jr("ParserReady"), By = () => { + throw wh(); +}, Ha = Ve(By, "parser"), qd = Ve([], "parserTimer"), Ly = (t) => (t.inject(Ha, By).inject(qd, [an]).record(ic), async () => { + await t.waitTimers(qd); + const e = t.get(to), n = t.get(Fr); + return t.set(Ha, cC.create(n, e)), t.done(ic), () => { + t.remove(Ha).remove(qd).clearTimer(ic); + }; +}); +Mi(Ly, { + displayName: "Parser" +}); +const $a = jr("SerializerReady"), jd = Ve( + [], + "serializerTimer" +), Fy = () => { + throw wh(); +}, Ko = Ve( + Fy, + "serializer" +), Vy = (t) => (t.inject(Ko, Fy).inject(jd, [an]).record($a), async () => { + await t.waitTimers(jd); + const e = t.get(to), n = t.get(Fr); + return t.set(Ko, dC.create(n, e)), t.done($a), () => { + t.remove(Ko).remove(jd).clearTimer($a); + }; +}); +Mi(Vy, { + displayName: "Serializer" +}); +const sc = Ve("", "defaultValue"), Wd = Ve( + (t) => t, + "stateOptions" +), Ud = Ve( + [], + "editorStateTimer" +), oc = jr("EditorStateReady"); +function ST(t, e, n) { + if (typeof t == "string") return e(t); + if (t.type === "html") + return co.fromSchema(n).parse(t.dom); + if (t.type === "json") + return Xn.fromJSON(n, t.value); + throw Q9(t); +} +const CT = new Nt("MILKDOWN_STATE_TRACKER"), Hy = (t) => (t.inject(sc, "").inject(va, {}).inject(Wd, (e) => e).inject(Ud, [ + ic, + $a, + Fa, + Va +]).record(oc), async () => { + await t.waitTimers(Ud); + const e = t.get(Fr), n = t.get(Ha), r = t.get(a0), i = t.get(Wd), s = t.get(us), o = t.get(sc), l = ST(o, n, e), a = t.get(Wc), u = a.addBaseKeymap(), c = [ + ...s, + new Dt({ + key: CT, + state: { + init: () => { + }, + apply: (f, m, y, b) => { + t.set(va, b); + } + } + }), + pN({ rules: r }), + zN(a.build()) + ]; + t.set(us, c); + const h = i({ + schema: e, + doc: l, + plugins: c + }), d = Wo.create(h); + return t.set(va, d), t.done(oc), () => { + u(), t.remove(sc).remove(va).remove(Wd).remove(Ud).clearTimer(oc); + }; +}); +Mi(Hy, { + displayName: "EditorState" +}); +const d0 = Ve([], "pasteRule"), Gd = Ve([an], "pasteRuleTimer"), lc = jr("PasteRuleReady"), $y = (t) => (t.inject(d0, []).inject(Gd, [an]).record(lc), async () => (await t.waitTimers(Gd), t.done(lc), () => { + t.remove(d0).remove(Gd).clearTimer(lc); +})); +Mi($y, { + displayName: "PasteRule" +}); +const ac = jr("EditorViewReady"), Kd = Ve( + [], + "editorViewTimer" +), qa = Ve( + {}, + "editorViewOptions" +), uc = Ve(null, "root"), dp = Ve(null, "rootDOM"), fp = Ve( + {}, + "rootAttrs" +); +function NT(t, e) { + const n = document.createElement("div"); + n.className = "milkdown", t.appendChild(n), e.set(dp, n); + const r = e.get(fp); + return Object.entries(r).forEach( + ([i, s]) => n.setAttribute(i, s) + ), n; +} +function MT(t) { + t.classList.add("editor"), t.setAttribute("role", "textbox"); +} +const TT = new Nt("MILKDOWN_VIEW_CLEAR"), qy = (t) => (t.inject(uc, document.body).inject(ln, {}).inject(qa, {}).inject(dp, null).inject(fp, {}).inject(Kd, [oc, lc]).record(ac), async () => { + await t.wait(no); + const e = t.get(uc) || document.body, n = typeof e == "string" ? document.querySelector(e) : e; + t.update(us, (a) => [ + new Dt({ + key: TT, + view: (u) => { + const c = n ? NT(n, t) : void 0; + return (() => { + if (c && n) { + const d = u.dom; + n.replaceChild(c, d), c.appendChild(d); + } + })(), { + destroy: () => { + c != null && c.parentNode && (c == null || c.parentNode.replaceChild(u.dom, c)), c == null || c.remove(); + } + }; + } + }), + ...a + ]), await t.waitTimers(Kd); + const r = t.get(va), i = t.get(qa), s = Object.fromEntries(t.get(c0)), o = Object.fromEntries(t.get(h0)), l = new Iy(n, { + state: r, + nodeViews: s, + markViews: o, + transformPasted: (a, u, c) => (t.get(d0).sort((h, d) => (d.priority ?? 50) - (h.priority ?? 50)).map((h) => h.run).forEach((h) => { + a = h(a, u, c); + }), a), + ...i + }); + return MT(l.dom), t.set(ln, l), t.done(ac), () => { + l == null || l.destroy(), t.remove(uc).remove(ln).remove(qa).remove(dp).remove(fp).remove(Kd).clearTimer(ac); + }; +}); +Mi(qy, { + displayName: "EditorView" +}); +var Uc = /* @__PURE__ */ ((t) => (t.Idle = "Idle", t.OnCreate = "OnCreate", t.Created = "Created", t.OnDestroy = "OnDestroy", t.Destroyed = "Destroyed", t))(Uc || {}), $s, zn, di, ll, M0, T0, gn, fi, qs, E0, js, al, O0, Gi, ul; +const Vg = class Vg { + constructor() { + Z(this, $s); + Z(this, zn); + Z(this, di); + Z(this, ll); + Z(this, M0); + Z(this, T0); + Z(this, gn); + Z(this, fi); + Z(this, qs); + Z(this, E0); + Z(this, js); + Z(this, al); + Z(this, O0); + Z(this, Gi); + Z(this, ul); + V(this, $s, !1), V(this, zn, "Idle"), V(this, di, []), V(this, ll, () => { + }), V(this, M0, new b7()), V(this, T0, new hw()), V(this, gn, /* @__PURE__ */ new Map()), V(this, fi, /* @__PURE__ */ new Map()), V(this, qs, new Df(T(this, M0), T(this, T0))), V(this, E0, () => { + const e = vT(async (r) => { + await Promise.all( + T(this, di).map((i) => Promise.resolve(i(r))) + ); + }), n = [ + _y, + Ly, + Vy, + zy, + xT, + $y, + Hy, + qy, + bT(this), + e + ]; + T(this, js).call(this, n, T(this, fi)); + }), V(this, js, (e, n) => { + e.forEach((r) => { + const i = T(this, qs).produce( + T(this, $s) ? r.meta : void 0 + ), s = r(i); + n.set(r, { ctx: i, handler: s, cleanup: void 0 }); + }); + }), V(this, al, (e, n = !1) => Promise.all( + [e].flat().map(async (r) => { + const i = T(this, gn).get(r), s = i == null ? void 0 : i.cleanup; + return n ? T(this, gn).delete(r) : T(this, gn).set(r, { + ctx: void 0, + handler: void 0, + cleanup: void 0 + }), typeof s == "function" ? s() : s; + }) + )), V(this, O0, async () => { + await Promise.all( + [...T(this, fi).entries()].map(async ([e, { cleanup: n }]) => typeof n == "function" ? n() : n) + ), T(this, fi).clear(); + }), V(this, Gi, (e) => { + V(this, zn, e), T(this, ll).call(this, e); + }), V(this, ul, (e) => [...e.entries()].map(async ([n, r]) => { + const { ctx: i, handler: s } = r; + if (!s) return; + const o = await s(); + e.set(n, { ctx: i, handler: s, cleanup: o }); + })), this.enableInspector = (e = !0) => (V(this, $s, e), this), this.onStatusChange = (e) => (V(this, ll, e), this), this.config = (e) => (T(this, di).push(e), this), this.removeConfig = (e) => (V(this, di, T(this, di).filter((n) => n !== e)), this), this.use = (e) => { + const n = [e].flat(); + return n.flat().forEach((r) => { + T(this, gn).set(r, { + ctx: void 0, + handler: void 0, + cleanup: void 0 + }); + }), T(this, zn) === "Created" && T(this, js).call(this, n, T(this, gn)), this; + }, this.remove = async (e) => T(this, zn) === "OnCreate" ? (console.warn( + "[Milkdown]: You are trying to remove plugins when the editor is creating, this is not recommended, please check your code." + ), new Promise((n) => { + setTimeout(() => { + n(this.remove(e)); + }, 50); + })) : (await T(this, al).call(this, [e].flat(), !0), this), this.create = async () => T(this, zn) === "OnCreate" ? this : (T(this, zn) === "Created" && await this.destroy(), T(this, Gi).call(this, "OnCreate"), T(this, E0).call(this), T(this, js).call(this, [...T(this, gn).keys()], T(this, gn)), await Promise.all( + [ + T(this, ul).call(this, T(this, fi)), + T(this, ul).call(this, T(this, gn)) + ].flat() + ), T(this, Gi).call(this, "Created"), this), this.destroy = async (e = !1) => T(this, zn) === "Destroyed" || T(this, zn) === "OnDestroy" ? this : T(this, zn) === "OnCreate" ? new Promise((n) => { + setTimeout(() => { + n(this.destroy(e)); + }, 50); + }) : (e && V(this, di, []), T(this, Gi).call(this, "OnDestroy"), await T(this, al).call(this, [...T(this, gn).keys()], e), await T(this, O0).call(this), T(this, Gi).call(this, "Destroyed"), this), this.action = (e) => e(T(this, qs)), this.inspect = () => T(this, $s) ? [...T(this, fi).values(), ...T(this, gn).values()].map(({ ctx: e }) => { + var n; + return (n = e == null ? void 0 : e.inspector) == null ? void 0 : n.read(); + }).filter((e) => !!e) : (console.warn( + "[Milkdown]: You are trying to collect inspection when inspector is disabled, please enable inspector by `editor.enableInspector()` first." + ), []); + } + /// Create a new editor instance. + static make() { + return new Vg(); + } + /// Get the ctx of the editor. + get ctx() { + return T(this, qs); + } + /// Get the status of the editor. + get status() { + return T(this, zn); + } +}; +$s = new WeakMap(), zn = new WeakMap(), di = new WeakMap(), ll = new WeakMap(), M0 = new WeakMap(), T0 = new WeakMap(), gn = new WeakMap(), fi = new WeakMap(), qs = new WeakMap(), E0 = new WeakMap(), js = new WeakMap(), al = new WeakMap(), O0 = new WeakMap(), Gi = new WeakMap(), ul = new WeakMap(); +let pp = Vg, ET = (t) => crypto.getRandomValues(new Uint8Array(t)), OT = (t, e, n) => { + let r = (2 << Math.log2(t.length - 1)) - 1, i = -~(1.6 * r * e / t.length); + return (s = e) => { + let o = ""; + for (; ; ) { + let l = n(i), a = i | 0; + for (; a--; ) + if (o += t[l[a] & r] || "", o.length >= s) return o; + } + }; +}, jy = (t, e = 21) => OT(t, e | 0, ET); +jy("abcedfghicklmn", 10); +function Ee(t, e) { + const n = wT(t), r = (i) => async () => { + r.key = n, await i.wait(Fa); + const s = e(i); + return i.get(me).create(n, s), r.run = (o) => i.get(me).call(t, o), () => { + i.get(me).remove(n); + }; + }; + return r; +} +function En(t) { + const e = (n) => async () => { + await n.wait(an); + const r = t(n); + return n.update(a0, (i) => [...i, r]), e.inputRule = r, () => { + n.update(a0, (i) => i.filter((s) => s !== r)); + }; + }; + return e; +} +function AT(t) { + const e = (n) => async () => { + await n.wait(an); + const r = t(n); + return n.update(d0, (i) => [...i, r]), e.pasteRule = r, () => { + n.update(d0, (i) => i.filter((s) => s !== r)); + }; + }; + return e; +} +function IT(t, e) { + const n = (r) => async () => { + const i = e(r); + return r.update(La, (s) => [ + ...s.filter((o) => o[0] !== t), + [t, i] + ]), n.id = t, n.schema = i, () => { + r.update(La, (s) => s.filter(([o]) => o !== t)); + }; + }; + return n.type = (r) => { + const i = r.get(Fr).marks[t]; + if (!i) throw lw(t); + return i; + }, n; +} +function T1(t, e) { + const n = (r) => async () => { + const i = e(r); + return r.update(Ba, (s) => [ + ...s.filter((o) => o[0] !== t), + [t, i] + ]), n.id = t, n.schema = i, () => { + r.update(Ba, (s) => s.filter(([o]) => o !== t)); + }; + }; + return n.type = (r) => { + const i = r.get(Fr).nodes[t]; + if (!i) throw ow(t); + return i; + }, n; +} +function hn(t) { + let e; + const n = (r) => async () => (await r.wait(an), e = t(r), r.update(us, (i) => [...i, e]), () => { + r.update(us, (i) => i.filter((s) => s !== e)); + }); + return n.plugin = () => e, n.key = () => e.spec.key, n; +} +function Wy(t) { + const e = (n) => async () => { + await n.wait(Va); + const r = n.get(Wc), i = t(n), s = r.addObjectKeymap(i); + return e.keymap = i, () => { + s(); + }; + }; + return e; +} +function DT(t, e) { + const n = (r) => async () => { + await r.wait(an); + const i = e(r); + return t.type(r) instanceof Pc ? r.update(c0, (s) => [ + ...s, + [t.id, i] + ]) : r.update(h0, (s) => [ + ...s, + [t.id, i] + ]), n.view = i, n.type = t, () => { + t.type(r) instanceof Pc ? r.update(c0, (s) => s.filter((o) => o[0] !== t.id)) : r.update(h0, (s) => s.filter((o) => o[0] !== t.id)); + }; + }; + return n; +} +function vt(t, e) { + const n = Ve(t, e), r = (i) => (i.inject(n), () => () => { + i.remove(n); + }); + return r.key = n, r; +} +function Mt(t, e) { + const n = vt(e, t), r = T1(t, (s) => s.get(n.key)(s)), i = [n, r]; + return i.id = r.id, i.node = r, i.type = (s) => r.type(s), i.ctx = n, i.key = n.key, i.extendSchema = (s) => { + const o = s(e); + return Mt(t, o); + }, i; +} +function Pl(t, e) { + const n = vt(e, t), r = IT(t, (s) => s.get(n.key)(s)), i = [n, r]; + return i.id = r.id, i.mark = r, i.type = (s) => r.type(s), i.ctx = n, i.key = n.key, i.extendSchema = (s) => { + const o = s(e); + return Pl(t, o); + }, i; +} +function On(t, e) { + const n = Object.fromEntries( + Object.entries(e).map( + ([o, { shortcuts: l, priority: a }]) => [o, { shortcuts: l, priority: a }] + ) + ), r = vt(n, `${t}Keymap`), i = Wy((o) => { + const l = o.get(r.key), a = Object.entries(e).flatMap( + ([u, { command: c }]) => { + const h = l[u], d = [h.shortcuts].flat(), f = h.priority; + return d.map( + (m) => [ + m, + { + key: m, + onRun: c, + priority: f + } + ] + ); + } + ); + return Object.fromEntries(a); + }), s = [r, i]; + return s.ctx = r, s.shortcuts = i, s.key = r.key, s.keymap = i.keymap, s; +} +const Nr = (t, e = () => ({})) => vt(e, `${t}Attr`), tu = (t, e = () => ({})) => vt(e, `${t}Attr`); +function vs(t, e, n) { + const r = vt({}, t), i = (o) => async () => { + await o.wait(no); + const a = { + plugin: e(o), + options: o.get(r.key) + }; + return o.update(u0, (u) => [...u, a]), () => { + o.update(u0, (u) => u.filter((c) => c !== a)); + }; + }, s = [r, i]; + return s.id = t, s.plugin = i, s.options = r, s; +} +function _T(t) { + return (e) => { + const n = e.get(ln); + return e.get(Fr), e.get(Ko)(n.state.doc); + }; +} +function mp(t) { + if (!t) return !1; + if (Array.isArray(t)) + return t.length > 1 ? !1 : mp(t[0]); + const e = t.content; + return e ? mp(e) : t.type === "text"; +} +function RT(t, e) { + return Object.assign(t, { + meta: { + package: "@milkdown/plugin-clipboard", + ...e + } + }), t; +} +const Uy = hn((t) => { + const e = t.get(Fr); + t.update(qa, (i) => ({ + ...i, + editable: i.editable ?? (() => !0) + })); + const n = new Nt("MILKDOWN_CLIPBOARD"); + return new Dt({ + key: n, + props: { + handlePaste: (i, s) => { + var w, C; + const o = t.get(Ha), l = (C = (w = i.props).editable) == null ? void 0 : C.call(w, i.state), { clipboardData: a } = s; + if (!l || !a || i.state.selection.$from.node().type.spec.code) return !1; + const c = a.getData("text/plain"), h = a.getData("vscode-editor-data"); + if (h) { + const N = JSON.parse(h), B = N == null ? void 0 : N.mode; + if (c && B) { + const { tr: _ } = i.state, A = NN("code_block", e); + return _.replaceSelectionWith(A.create({ language: B })).setSelection( + Ce.near( + _.doc.resolve(Math.max(0, _.selection.from - 2)) + ) + ).insertText(c.replace(/\r\n?/g, ` +`)), i.dispatch(_), !0; + } + } + const d = a.getData("text/html"); + if (d.length === 0 && c.length === 0) return !1; + const f = co.fromSchema(e); + let m; + if (d.length === 0) { + const N = o(c); + if (!N || typeof N == "string") return !1; + m = bo.fromSchema(e).serializeFragment( + N.content + ); + } else { + const N = document.createElement("template"); + N.innerHTML = d, m = N.content.cloneNode(!0), N.remove(); + } + const y = f.parseSlice(m), b = SN(y); + if (b) + return i.dispatch(i.state.tr.replaceSelectionWith(b, !0)), !0; + try { + return i.dispatch(i.state.tr.replaceSelection(y)), !0; + } catch { + return !1; + } + }, + clipboardTextSerializer: (i) => { + const s = t.get(Ko); + if (mp(i.content.toJSON())) + return i.content.textBetween( + 0, + i.content.size, + ` + +` + ); + const l = e.topNodeType.createAndFill(void 0, i.content); + return l ? s(l) : ""; + } + } + }); +}); +RT(Uy, { displayName: "Prose" }); +var Gc = 200, Ht = function() { +}; +Ht.prototype.append = function(e) { + return e.length ? (e = Ht.from(e), !this.length && e || e.length < Gc && this.leafAppend(e) || this.length < Gc && e.leafPrepend(this) || this.appendInner(e)) : this; +}; +Ht.prototype.prepend = function(e) { + return e.length ? Ht.from(e).append(this) : this; +}; +Ht.prototype.appendInner = function(e) { + return new zT(this, e); +}; +Ht.prototype.slice = function(e, n) { + return e === void 0 && (e = 0), n === void 0 && (n = this.length), e >= n ? Ht.empty : this.sliceInner(Math.max(0, e), Math.min(this.length, n)); +}; +Ht.prototype.get = function(e) { + if (!(e < 0 || e >= this.length)) + return this.getInner(e); +}; +Ht.prototype.forEach = function(e, n, r) { + n === void 0 && (n = 0), r === void 0 && (r = this.length), n <= r ? this.forEachInner(e, n, r, 0) : this.forEachInvertedInner(e, n, r, 0); +}; +Ht.prototype.map = function(e, n, r) { + n === void 0 && (n = 0), r === void 0 && (r = this.length); + var i = []; + return this.forEach(function(s, o) { + return i.push(e(s, o)); + }, n, r), i; +}; +Ht.from = function(e) { + return e instanceof Ht ? e : e && e.length ? new Gy(e) : Ht.empty; +}; +var Gy = /* @__PURE__ */ function(t) { + function e(r) { + t.call(this), this.values = r; + } + t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e; + var n = { length: { configurable: !0 }, depth: { configurable: !0 } }; + return e.prototype.flatten = function() { + return this.values; + }, e.prototype.sliceInner = function(i, s) { + return i == 0 && s == this.length ? this : new e(this.values.slice(i, s)); + }, e.prototype.getInner = function(i) { + return this.values[i]; + }, e.prototype.forEachInner = function(i, s, o, l) { + for (var a = s; a < o; a++) + if (i(this.values[a], l + a) === !1) + return !1; + }, e.prototype.forEachInvertedInner = function(i, s, o, l) { + for (var a = s - 1; a >= o; a--) + if (i(this.values[a], l + a) === !1) + return !1; + }, e.prototype.leafAppend = function(i) { + if (this.length + i.length <= Gc) + return new e(this.values.concat(i.flatten())); + }, e.prototype.leafPrepend = function(i) { + if (this.length + i.length <= Gc) + return new e(i.flatten().concat(this.values)); + }, n.length.get = function() { + return this.values.length; + }, n.depth.get = function() { + return 0; + }, Object.defineProperties(e.prototype, n), e; +}(Ht); +Ht.empty = new Gy([]); +var zT = /* @__PURE__ */ function(t) { + function e(n, r) { + t.call(this), this.left = n, this.right = r, this.length = n.length + r.length, this.depth = Math.max(n.depth, r.depth) + 1; + } + return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.flatten = function() { + return this.left.flatten().concat(this.right.flatten()); + }, e.prototype.getInner = function(r) { + return r < this.left.length ? this.left.get(r) : this.right.get(r - this.left.length); + }, e.prototype.forEachInner = function(r, i, s, o) { + var l = this.left.length; + if (i < l && this.left.forEachInner(r, i, Math.min(s, l), o) === !1 || s > l && this.right.forEachInner(r, Math.max(i - l, 0), Math.min(this.length, s) - l, o + l) === !1) + return !1; + }, e.prototype.forEachInvertedInner = function(r, i, s, o) { + var l = this.left.length; + if (i > l && this.right.forEachInvertedInner(r, i - l, Math.max(s, l) - l, o + l) === !1 || s < l && this.left.forEachInvertedInner(r, Math.min(i, l), s, o) === !1) + return !1; + }, e.prototype.sliceInner = function(r, i) { + if (r == 0 && i == this.length) + return this; + var s = this.left.length; + return i <= s ? this.left.slice(r, i) : r >= s ? this.right.slice(r - s, i - s) : this.left.slice(r, s).append(this.right.slice(0, i - s)); + }, e.prototype.leafAppend = function(r) { + var i = this.right.leafAppend(r); + if (i) + return new e(this.left, i); + }, e.prototype.leafPrepend = function(r) { + var i = this.left.leafPrepend(r); + if (i) + return new e(i, this.right); + }, e.prototype.appendInner = function(r) { + return this.left.depth >= Math.max(this.right.depth, r.depth) + 1 ? new e(this.left, new e(this.right, r)) : new e(this, r); + }, e; +}(Ht); +const PT = 500; +class fr { + constructor(e, n) { + this.items = e, this.eventCount = n; + } + // Pop the latest event off the branch's history and apply it + // to a document transform. + popEvent(e, 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, s; + n && (i = this.remapping(r, this.items.length), s = i.maps.length); + let o = e.tr, l, a, u = [], c = []; + return this.items.forEach((h, d) => { + if (!h.step) { + i || (i = this.remapping(r, d + 1), s = i.maps.length), s--, c.push(h); + return; + } + if (i) { + c.push(new Ar(h.map)); + let f = h.step.map(i.slice(s)), m; + f && o.maybeStep(f).doc && (m = o.mapping.maps[o.mapping.maps.length - 1], u.push(new Ar(m, void 0, void 0, u.length + c.length))), s--, m && i.appendMap(m, s); + } else + o.maybeStep(h.step); + if (h.selection) + return l = i ? h.selection.map(i.slice(s)) : h.selection, a = new fr(this.items.slice(0, r).append(c.reverse().concat(u)), this.eventCount - 1), !1; + }, this.items.length, 0), { remaining: a, transform: o, selection: l }; + } + // Create a new branch with the given transform added. + addTransform(e, n, r, i) { + let s = [], o = this.eventCount, l = this.items, a = !i && l.length ? l.get(l.length - 1) : null; + for (let c = 0; c < e.steps.length; c++) { + let h = e.steps[c].invert(e.docs[c]), d = new Ar(e.mapping.maps[c], h, n), f; + (f = a && a.merge(d)) && (d = f, c ? s.pop() : l = l.slice(0, l.length - 1)), s.push(d), n && (o++, n = void 0), i || (a = d); + } + let u = o - r.depth; + return u > LT && (l = BT(l, u), o -= u), new fr(l.append(s), o); + } + remapping(e, n) { + let r = new n0(); + return this.items.forEach((i, s) => { + let o = i.mirrorOffset != null && s - i.mirrorOffset >= e ? r.maps.length - i.mirrorOffset : void 0; + r.appendMap(i.map, o); + }, e, n), r; + } + addMaps(e) { + return this.eventCount == 0 ? this : new fr(this.items.append(e.map((n) => new Ar(n))), this.eventCount); + } + // When the collab module receives remote changes, the history has + // to know about those, so that it can adjust the steps that were + // rebased on top of the remote changes, and include the position + // maps for the remote changes in its array of items. + rebased(e, n) { + if (!this.eventCount) + return this; + let r = [], i = Math.max(0, this.items.length - n), s = e.mapping, o = e.steps.length, l = this.eventCount; + this.items.forEach((d) => { + d.selection && l--; + }, i); + let a = n; + this.items.forEach((d) => { + let f = s.getMirror(--a); + if (f == null) + return; + o = Math.min(o, f); + let m = s.maps[f]; + if (d.step) { + let y = e.steps[f].invert(e.docs[f]), b = d.selection && d.selection.map(s.slice(a + 1, f)); + b && l++, r.push(new Ar(m, y, b)); + } else + r.push(new Ar(m)); + }, i); + let u = []; + for (let d = n; d < o; d++) + u.push(new Ar(s.maps[d])); + let c = this.items.slice(0, i).append(u).append(r), h = new fr(c, l); + return h.emptyItemCount() > PT && (h = h.compress(this.items.length - r.length)), h; + } + emptyItemCount() { + let e = 0; + return this.items.forEach((n) => { + n.step || e++; + }), e; + } + // Compressing a branch means rewriting it to push the air (map-only + // items) out. During collaboration, these naturally accumulate + // because each remote change adds one. The `upto` argument is used + // to ensure that only the items below a given level are compressed, + // because `rebased` relies on a clean, untouched set of items in + // order to associate old items with rebased steps. + compress(e = this.items.length) { + let n = this.remapping(0, e), r = n.maps.length, i = [], s = 0; + return this.items.forEach((o, l) => { + if (l >= e) + i.push(o), o.selection && s++; + else if (o.step) { + let a = o.step.map(n.slice(r)), u = a && a.getMap(); + if (r--, u && n.appendMap(u, r), a) { + let c = o.selection && o.selection.map(n.slice(r)); + c && s++; + let h = new Ar(u.invert(), a, c), d, f = i.length - 1; + (d = i.length && i[f].merge(h)) ? i[f] = d : i.push(h); + } + } else o.map && r--; + }, this.items.length, 0), new fr(Ht.from(i.reverse()), s); + } +} +fr.empty = new fr(Ht.empty, 0); +function BT(t, e) { + let n; + return t.forEach((r, i) => { + if (r.selection && e-- == 0) + return n = i, !1; + }), t.slice(n); +} +class Ar { + constructor(e, n, r, i) { + this.map = e, this.step = n, this.selection = r, this.mirrorOffset = i; + } + merge(e) { + if (this.step && e.step && !e.selection) { + let n = e.step.merge(this.step); + if (n) + return new Ar(n.getMap().invert(), n, this.selection); + } + } +} +class Bi { + constructor(e, n, r, i, s) { + this.done = e, this.undone = n, this.prevRanges = r, this.prevTime = i, this.prevComposition = s; + } +} +const LT = 20; +function FT(t, e, n, r) { + let i = n.getMeta(ro), s; + if (i) + return i.historyState; + n.getMeta($T) && (t = new Bi(t.done, t.undone, null, 0, -1)); + let o = n.getMeta("appendedTransaction"); + if (n.steps.length == 0) + return t; + if (o && o.getMeta(ro)) + return o.getMeta(ro).redo ? new Bi(t.done.addTransform(n, void 0, r, cc(e)), t.undone, p5(n.mapping.maps), t.prevTime, t.prevComposition) : new Bi(t.done, t.undone.addTransform(n, void 0, r, cc(e)), null, t.prevTime, t.prevComposition); + if (n.getMeta("addToHistory") !== !1 && !(o && o.getMeta("addToHistory") === !1)) { + let l = n.getMeta("composition"), a = t.prevTime == 0 || !o && t.prevComposition != l && (t.prevTime < (n.time || 0) - r.newGroupDelay || !VT(n, t.prevRanges)), u = o ? Jd(t.prevRanges, n.mapping) : p5(n.mapping.maps); + return new Bi(t.done.addTransform(n, a ? e.selection.getBookmark() : void 0, r, cc(e)), fr.empty, u, n.time, l ?? t.prevComposition); + } else return (s = n.getMeta("rebased")) ? new Bi(t.done.rebased(n, s), t.undone.rebased(n, s), Jd(t.prevRanges, n.mapping), t.prevTime, t.prevComposition) : new Bi(t.done.addMaps(n.mapping.maps), t.undone.addMaps(n.mapping.maps), Jd(t.prevRanges, n.mapping), t.prevTime, t.prevComposition); +} +function VT(t, e) { + if (!e) + return !1; + if (!t.docChanged) + return !0; + let n = !1; + return t.mapping.maps[0].forEach((r, i) => { + for (let s = 0; s < e.length; s += 2) + r <= e[s + 1] && i >= e[s] && (n = !0); + }), n; +} +function p5(t) { + let e = []; + for (let n = t.length - 1; n >= 0 && e.length == 0; n--) + t[n].forEach((r, i, s, o) => e.push(s, o)); + return e; +} +function Jd(t, e) { + if (!t) + return null; + let n = []; + for (let r = 0; r < t.length; r += 2) { + let i = e.map(t[r], 1), s = e.map(t[r + 1], -1); + i <= s && n.push(i, s); + } + return n; +} +function HT(t, e, n) { + let r = cc(e), i = ro.get(e).spec.config, s = (n ? t.undone : t.done).popEvent(e, r); + if (!s) + return null; + let o = s.selection.resolve(s.transform.doc), l = (n ? t.done : t.undone).addTransform(s.transform, e.selection.getBookmark(), i, r), a = new Bi(n ? l : s.remaining, n ? s.remaining : l, null, 0, -1); + return s.transform.setSelection(o).setMeta(ro, { redo: n, historyState: a }); +} +let Yd = !1, m5 = null; +function cc(t) { + let e = t.plugins; + if (m5 != e) { + Yd = !1, m5 = e; + for (let n = 0; n < e.length; n++) + if (e[n].spec.historyPreserveItems) { + Yd = !0; + break; + } + } + return Yd; +} +const ro = new Nt("history"), $T = new Nt("closeHistory"); +function qT(t = {}) { + return t = { + depth: t.depth || 100, + newGroupDelay: t.newGroupDelay || 500 + }, new Dt({ + key: ro, + state: { + init() { + return new Bi(fr.empty, fr.empty, null, 0, -1); + }, + apply(e, n, r) { + return FT(n, r, e, t); + } + }, + config: t, + props: { + handleDOMEvents: { + beforeinput(e, n) { + let r = n.inputType, i = r == "historyUndo" ? Jy : r == "historyRedo" ? Yy : null; + return !i || !e.editable ? !1 : (n.preventDefault(), i(e.state, e.dispatch)); + } + } + } + }); +} +function Ky(t, e) { + return (n, r) => { + let i = ro.getState(n); + if (!i || (t ? i.undone : i.done).eventCount == 0) + return !1; + if (r) { + let s = HT(i, n, t); + s && r(e ? s.scrollIntoView() : s); + } + return !0; + }; +} +const Jy = Ky(!1, !0), Yy = Ky(!0, !0); +function Bl(t, e) { + return Object.assign(t, { + meta: { + package: "@milkdown/plugin-history", + ...e + } + }), t; +} +const E1 = Ee("Undo", () => () => Jy); +Bl(E1, { + displayName: "Command" +}); +const O1 = Ee("Redo", () => () => Yy); +Bl(O1, { + displayName: "Command" +}); +const A1 = vt({}, "historyProviderConfig"); +Bl(A1, { + displayName: "Ctx" +}); +const Zy = hn( + (t) => qT(t.get(A1.key)) +); +Bl(Zy, { + displayName: "Ctx" +}); +const I1 = On("historyKeymap", { + Undo: { + shortcuts: "Mod-z", + command: (t) => { + const e = t.get(me); + return () => e.call(E1.key); + } + }, + Redo: { + shortcuts: ["Mod-y", "Shift-Mod-z"], + command: (t) => { + const e = t.get(me); + return () => e.call(O1.key); + } + } +}); +Bl(I1.ctx, { + displayName: "KeymapCtx" +}); +Bl(I1.shortcuts, { + displayName: "Keymap" +}); +const jT = [ + A1, + Zy, + I1, + E1, + O1 +].flat(); +function WT(t, e) { + const { doc: n, selection: r } = t; + if (!n || !r || !(r instanceof Ce || r instanceof Sn)) + return t; + const { to: i } = r, s = e.type === "space" ? Array(e.size).fill(" ").join("") : " "; + return t.insertText(s, i); +} +const zh = vt( + { type: "space", size: 2 }, + "indentConfig" +); +zh.meta = { + package: "@milkdown/plugin-indent", + displayName: "Ctx" +}; +const Xy = Wy((t) => ({ + Tab: (e, n) => { + const r = t.get(zh.key), { tr: i } = e, s = WT(i, r); + return s.docChanged ? (n == null || n(s), !0) : !1; + } +})); +Xy.meta = { + package: "@milkdown/plugin-indent", + displayName: "Shortcut" +}; +const UT = [zh, Xy]; +var GT = typeof global == "object" && global && global.Object === Object && global, KT = typeof self == "object" && self && self.Object === Object && self, Qy = GT || KT || Function("return this")(), Kc = Qy.Symbol, e8 = Object.prototype, JT = e8.hasOwnProperty, YT = e8.toString, Ql = Kc ? Kc.toStringTag : void 0; +function ZT(t) { + var e = JT.call(t, Ql), n = t[Ql]; + try { + t[Ql] = void 0; + var r = !0; + } catch { + } + var i = YT.call(t); + return r && (e ? t[Ql] = n : delete t[Ql]), i; +} +var XT = Object.prototype, QT = XT.toString; +function eE(t) { + return QT.call(t); +} +var tE = "[object Null]", nE = "[object Undefined]", g5 = Kc ? Kc.toStringTag : void 0; +function rE(t) { + return t == null ? t === void 0 ? nE : tE : g5 && g5 in Object(t) ? ZT(t) : eE(t); +} +function iE(t) { + return t != null && typeof t == "object"; +} +var sE = "[object Symbol]"; +function oE(t) { + return typeof t == "symbol" || iE(t) && rE(t) == sE; +} +var lE = /\s/; +function aE(t) { + for (var e = t.length; e-- && lE.test(t.charAt(e)); ) + ; + return e; +} +var uE = /^\s+/; +function cE(t) { + return t && t.slice(0, aE(t) + 1).replace(uE, ""); +} +function Jc(t) { + var e = typeof t; + return t != null && (e == "object" || e == "function"); +} +var y5 = NaN, hE = /^[-+]0x[0-9a-f]+$/i, dE = /^0b[01]+$/i, fE = /^0o[0-7]+$/i, pE = parseInt; +function v5(t) { + if (typeof t == "number") + return t; + if (oE(t)) + return y5; + if (Jc(t)) { + var e = typeof t.valueOf == "function" ? t.valueOf() : t; + t = Jc(e) ? e + "" : e; + } + if (typeof t != "string") + return t === 0 ? t : +t; + t = cE(t); + var n = dE.test(t); + return n || fE.test(t) ? pE(t.slice(2), n ? 2 : 8) : hE.test(t) ? y5 : +t; +} +var Zd = function() { + return Qy.Date.now(); +}, mE = "Expected a function", gE = Math.max, yE = Math.min; +function D1(t, e, n) { + var r, i, s, o, l, a, u = 0, c = !1, h = !1, d = !0; + if (typeof t != "function") + throw new TypeError(mE); + e = v5(e) || 0, Jc(n) && (c = !!n.leading, h = "maxWait" in n, s = h ? gE(v5(n.maxWait) || 0, e) : s, d = "trailing" in n ? !!n.trailing : d); + function f(A) { + var L = r, K = i; + return r = i = void 0, u = A, o = t.apply(K, L), o; + } + function m(A) { + return u = A, l = setTimeout(w, e), c ? f(A) : o; + } + function y(A) { + var L = A - a, K = A - u, J = e - L; + return h ? yE(J, s - K) : J; + } + function b(A) { + var L = A - a, K = A - u; + return a === void 0 || L >= e || L < 0 || h && K >= s; + } + function w() { + var A = Zd(); + if (b(A)) + return C(A); + l = setTimeout(w, y(A)); + } + function C(A) { + return l = void 0, d && r ? f(A) : (r = i = void 0, o); + } + function N() { + l !== void 0 && clearTimeout(l), u = 0, r = a = i = l = void 0; + } + function B() { + return l === void 0 ? o : C(Zd()); + } + function _() { + var A = Zd(), L = b(A); + if (r = arguments, i = this, a = A, L) { + if (l === void 0) + return m(a); + if (h) + return clearTimeout(l), l = setTimeout(w, e), f(a); + } + return l === void 0 && (l = setTimeout(w, e)), o; + } + return _.cancel = N, _.flush = B, _; +} +var vE = "Expected a function"; +function t8(t, e, n) { + var r = !0, i = !0; + if (typeof t != "function") + throw new TypeError(vE); + return Jc(n) && (r = "leading" in n ? !!n.leading : r, i = "trailing" in n ? !!n.trailing : i), D1(t, e, { + leading: r, + maxWait: e, + trailing: i + }); +} +class n8 { + constructor() { + this.beforeMountedListeners = [], this.mountedListeners = [], this.updatedListeners = [], this.selectionUpdatedListeners = [], this.markdownUpdatedListeners = [], this.blurListeners = [], this.focusListeners = [], this.destroyListeners = [], this.beforeMount = (e) => (this.beforeMountedListeners.push(e), this), this.mounted = (e) => (this.mountedListeners.push(e), this), this.updated = (e) => (this.updatedListeners.push(e), this); + } + /// A getter to get all [subscribers](#interface-subscribers). You should not use this method directly. + get listeners() { + return { + beforeMount: this.beforeMountedListeners, + mounted: this.mountedListeners, + updated: this.updatedListeners, + markdownUpdated: this.markdownUpdatedListeners, + blur: this.blurListeners, + focus: this.focusListeners, + destroy: this.destroyListeners, + selectionUpdated: this.selectionUpdatedListeners + }; + } + /// Subscribe to the markdownUpdated event. + /// This event will be triggered after the editor state is updated and **the document is changed**. + /// The second parameter is the current markdown and the third parameter is the previous markdown. + markdownUpdated(e) { + return this.markdownUpdatedListeners.push(e), this; + } + /// Subscribe to the blur event. + /// This event will be triggered when the editor is blurred. + blur(e) { + return this.blurListeners.push(e), this; + } + /// Subscribe to the focus event. + /// This event will be triggered when the editor is focused. + focus(e) { + return this.focusListeners.push(e), this; + } + /// Subscribe to the destroy event. + /// This event will be triggered before the editor is destroyed. + destroy(e) { + return this.destroyListeners.push(e), this; + } + /// Subscribe to the selectionUpdated event. + /// This event will be triggered when the editor selection is updated. + selectionUpdated(e) { + return this.selectionUpdatedListeners.push(e), this; + } +} +const Yc = Ve( + new n8(), + "listener" +), bE = new Nt("MILKDOWN_LISTENER"), r8 = (t) => (t.inject(Yc, new n8()), async () => { + await t.wait(no); + const e = t.get(Yc), { listeners: n } = e; + n.beforeMount.forEach((a) => a(t)), await t.wait($a); + const r = t.get(Ko); + let i = null, s = null, o = null; + const l = new Dt({ + key: bE, + view: () => ({ + destroy: () => { + n.destroy.forEach((a) => a(t)); + } + }), + props: { + handleDOMEvents: { + focus: () => (n.focus.forEach((a) => a(t)), !1), + blur: () => (n.blur.forEach((a) => a(t)), !1) + } + }, + state: { + init: (a, u) => { + i = u.doc, s = r(u.doc); + }, + apply: (a) => { + const u = a.selection; + return (!o && u || o && !u.eq(o)) && (n.selectionUpdated.forEach((h) => { + h(t, u, o); + }), o = u), !(a.docChanged || a.storedMarksSet) || a.getMeta("addToHistory") === !1 ? void 0 : D1(() => { + const { doc: h } = a; + if (n.updated.length > 0 && i && !i.eq(h) && n.updated.forEach((d) => { + d(t, h, i); + }), n.markdownUpdated.length > 0 && i && !i.eq(h)) { + const d = r(h); + n.markdownUpdated.forEach((f) => { + f(t, d, s); + }), s = d; + } + i = h; + }, 200)(); + } + } + }); + t.update(us, (a) => a.concat(l)), await t.wait(ac), n.mounted.forEach((a) => a(t)); +}); +r8.meta = { + package: "@milkdown/plugin-listener", + displayName: "Listener" +}; +const _1 = vt( + { + shouldAppend: (t) => !(!t || ["heading", "paragraph"].includes(t.type.name)), + getNode: (t) => t.schema.nodes.paragraph.create() + }, + "trailingConfig" +); +_1.meta = { + package: "@milkdown/plugin-trailing", + displayName: "Ctx" +}; +const i8 = hn((t) => { + const e = new Nt("MILKDOWN_TRAILING"), { shouldAppend: n, getNode: r } = t.get(_1.key), i = new Dt({ + key: e, + state: { + init: (s, o) => { + const l = o.tr.doc.lastChild; + return n(l, o); + }, + apply: (s, o, l, a) => { + if (!s.docChanged) return o; + const u = s.doc.lastChild; + return n(u, a); + } + }, + appendTransaction: (s, o, l) => { + const { doc: a, tr: u } = l, c = r == null ? void 0 : r(l), h = i.getState(l), d = a.content.size; + if (!(!h || !c)) + return u.insert(d, c); + } + }); + return i; +}); +i8.meta = { + package: "@milkdown/plugin-trailing", + displayName: "Prose" +}; +const wE = [_1, i8]; +function kE(t, e) { + return function(n, r) { + let { $from: i, $to: s, node: o } = n.selection; + if (o && o.isBlock || i.depth < 2 || !i.sameParent(s)) + return !1; + let l = i.node(-1); + if (l.type != t) + return !1; + if (i.parent.content.size == 0 && i.node(-1).childCount == i.indexAfter(-1)) { + if (i.depth == 3 || i.node(-3).type != t || i.index(-2) != i.node(-2).childCount - 1) + return !1; + if (r) { + let h = re.empty, d = i.index(-1) ? 1 : i.index(-2) ? 2 : 3; + for (let w = i.depth - d; w >= i.depth - 3; w--) + h = re.from(i.node(w).copy(h)); + let f = i.indexAfter(-1) < i.node(-2).childCount ? 1 : i.indexAfter(-2) < i.node(-3).childCount ? 2 : 3; + h = h.append(re.from(t.createAndFill())); + let m = i.before(i.depth - (d - 1)), y = n.tr.replace(m, i.after(-f), new ae(h, 4 - d, 0)), b = -1; + y.doc.nodesBetween(m, y.doc.content.size, (w, C) => { + if (b > -1) + return !1; + w.isTextblock && w.content.size == 0 && (b = C + 1); + }), b > -1 && y.setSelection(Pe.near(y.doc.resolve(b))), r(y.scrollIntoView()); + } + return !0; + } + let a = s.pos == i.end() ? l.contentMatchAt(0).defaultType : null, u = n.tr.delete(i.pos, s.pos), c = a ? [null, { type: a }] : void 0; + return _a(u.doc, i.pos, 2, c) ? (r && r(u.split(i.pos, 2, c).scrollIntoView()), !0) : !1; + }; +} +function xE(t) { + return function(e, n) { + let { $from: r, $to: i } = e.selection, s = r.blockRange(i, (o) => o.childCount > 0 && o.firstChild.type == t); + return s ? n ? r.node(s.depth - 1).type == t ? SE(e, n, t, s) : CE(e, n, s) : !0 : !1; + }; +} +function SE(t, e, n, r) { + let i = t.tr, s = r.end, o = r.$to.end(r.depth); + s < o && (i.step(new Yt(s - 1, o, s, o, new ae(re.from(n.create(null, r.parent.copy())), 1, 0), 1, !0)), r = new T7(i.doc.resolve(r.$from.pos), i.doc.resolve(o), r.depth)); + const l = Mh(r); + if (l == null) + return !1; + i.lift(r, l); + let a = i.doc.resolve(i.mapping.map(s, -1) - 1); + return Th(i.doc, a.pos) && a.nodeBefore.type == a.nodeAfter.type && i.join(a.pos), e(i.scrollIntoView()), !0; +} +function CE(t, e, n) { + let r = t.tr, i = n.parent; + for (let f = n.end, m = n.endIndex - 1, y = n.startIndex; m > y; m--) + f -= i.child(m).nodeSize, r.delete(f - 1, f + 1); + let s = r.doc.resolve(n.start), o = s.nodeAfter; + if (r.mapping.map(n.end) != n.start + s.nodeAfter.nodeSize) + return !1; + let l = n.startIndex == 0, a = n.endIndex == i.childCount, u = s.node(-1), c = s.index(-1); + if (!u.canReplace(c + (l ? 0 : 1), c + 1, o.content.append(a ? re.empty : re.from(i)))) + return !1; + let h = s.pos, d = h + o.nodeSize; + return r.step(new Yt(h - (l ? 1 : 0), d + (a ? 1 : 0), h + 1, d - 1, new ae((l ? re.empty : re.from(i.copy(re.empty))).append(a ? re.empty : re.from(i.copy(re.empty))), l ? 0 : 1, a ? 0 : 1), l ? 0 : 1)), e(r.scrollIntoView()), !0; +} +function NE(t) { + return function(e, n) { + let { $from: r, $to: i } = e.selection, s = r.blockRange(i, (u) => u.childCount > 0 && u.firstChild.type == t); + if (!s) + return !1; + let o = s.startIndex; + if (o == 0) + return !1; + let l = s.parent, a = l.child(o - 1); + if (a.type != t) + return !1; + if (n) { + let u = a.lastChild && a.lastChild.type == l.type, c = re.from(u ? t.create() : null), h = new ae(re.from(t.create(null, re.from(l.type.create(null, c)))), u ? 3 : 1, 0), d = s.start, f = s.end; + n(e.tr.step(new Yt(d - (u ? 3 : 1), f, d, f, h, 1, !0)).scrollIntoView()); + } + return !0; + }; +} +function ME(t) { + const e = /* @__PURE__ */ new Map(); + if (!t || !t.type) + throw new Error("mdast-util-definitions expected node"); + return wo(t, "definition", function(r) { + const i = b5(r.identifier); + i && !e.get(i) && e.set(i, r); + }), n; + function n(r) { + const i = b5(r); + return e.get(i); + } +} +function b5(t) { + return String(t || "").toUpperCase(); +} +function TE() { + return function(t) { + const e = ME(t); + wo(t, function(n, r, i) { + if (n.type === "definition" && i !== void 0 && typeof r == "number") + return i.children.splice(r, 1), [$f, r]; + if (n.type === "imageReference" || n.type === "linkReference") { + const s = e(n.identifier); + if (s && i && typeof r == "number") + return i.children[r] = n.type === "imageReference" ? { type: "image", url: s.url, title: s.title, alt: n.alt } : { + type: "link", + url: s.url, + title: s.title, + children: n.children + }, [$f, r]; + } + }); + }; +} +function s8(t, e) { + var i; + if (!(e.childCount >= 1 && ((i = e.lastChild) == null ? void 0 : i.type.name) === "hardbreak")) { + t.next(e.content); + return; + } + const r = []; + e.content.forEach((s, o, l) => { + l !== e.childCount - 1 && r.push(s); + }), t.next(re.fromArray(r)); +} +function H(t, e) { + return Object.assign(t, { + meta: { + package: "@milkdown/preset-commonmark", + ...e + } + }), t; +} +const R1 = tu("emphasis"); +H(R1, { + displayName: "Attr", + group: "Emphasis" +}); +const ko = Pl("emphasis", (t) => ({ + attrs: { + marker: { + default: t.get(Pa).emphasis || "*", + validate: "string" + } + }, + parseDOM: [ + { tag: "i" }, + { tag: "em" }, + { style: "font-style", getAttrs: (e) => e === "italic" } + ], + toDOM: (e) => ["em", t.get(R1.key)(e)], + parseMarkdown: { + match: (e) => e.type === "emphasis", + runner: (e, n, r) => { + e.openMark(r, { marker: n.marker }), e.next(n.children), e.closeMark(r); + } + }, + toMarkdown: { + match: (e) => e.type.name === "emphasis", + runner: (e, n) => { + e.withMark(n, "emphasis", void 0, { + marker: n.attrs.marker + }); + } + } +})); +H(ko.mark, { + displayName: "MarkSchema", + group: "Emphasis" +}); +H(ko.ctx, { + displayName: "MarkSchemaCtx", + group: "Emphasis" +}); +const Ph = Ee("ToggleEmphasis", (t) => () => Ah(ko.type(t))); +H(Ph, { + displayName: "Command", + group: "Emphasis" +}); +const o8 = En((t) => Z0(/(?:^|[^*])\*([^*]+)\*$/, ko.type(t), { + getAttr: () => ({ + marker: "*" + }), + updateCaptured: ({ fullMatch: e, start: n }) => e.startsWith("*") ? {} : { fullMatch: e.slice(1), start: n + 1 } +})); +H(o8, { + displayName: "InputRule|Star", + group: "Emphasis" +}); +const l8 = En((t) => Z0(/\b_(?![_\s])(.*?[^_\s])_\b/, ko.type(t), { + getAttr: () => ({ + marker: "_" + }), + updateCaptured: ({ fullMatch: e, start: n }) => e.startsWith("_") ? {} : { fullMatch: e.slice(1), start: n + 1 } +})); +H(l8, { + displayName: "InputRule|Underscore", + group: "Emphasis" +}); +const z1 = On("emphasisKeymap", { + ToggleEmphasis: { + shortcuts: "Mod-i", + command: (t) => { + const e = t.get(me); + return () => e.call(Ph.key); + } + } +}); +H(z1.ctx, { + displayName: "KeymapCtx", + group: "Emphasis" +}); +H(z1.shortcuts, { + displayName: "Keymap", + group: "Emphasis" +}); +const P1 = tu("strong"); +H(P1, { + displayName: "Attr", + group: "Strong" +}); +const Ll = Pl("strong", (t) => ({ + attrs: { + marker: { + default: t.get(Pa).strong || "*", + validate: "string" + } + }, + parseDOM: [ + // This works around a Google Docs misbehavior where + // pasted content will be inexplicably wrapped in `` + // tags with a font-weight normal. + { + tag: "b", + getAttrs: (e) => e.style.fontWeight != "normal" && null + }, + { tag: "strong" }, + { style: "font-style", getAttrs: (e) => e === "bold" }, + { style: "font-weight=400", clearMark: (e) => e.type.name == "strong" }, + { + style: "font-weight", + getAttrs: (e) => /^(bold(er)?|[5-9]\d{2,})$/.test(e) && null + } + ], + toDOM: (e) => ["strong", t.get(P1.key)(e)], + parseMarkdown: { + match: (e) => e.type === "strong", + runner: (e, n, r) => { + e.openMark(r, { marker: n.marker }), e.next(n.children), e.closeMark(r); + } + }, + toMarkdown: { + match: (e) => e.type.name === "strong", + runner: (e, n) => { + e.withMark(n, "strong", void 0, { + marker: n.attrs.marker + }); + } + } +})); +H(Ll.mark, { + displayName: "MarkSchema", + group: "Strong" +}); +H(Ll.ctx, { + displayName: "MarkSchemaCtx", + group: "Strong" +}); +const Bh = Ee("ToggleStrong", (t) => () => Ah(Ll.type(t))); +H(Bh, { + displayName: "Command", + group: "Strong" +}); +const a8 = En((t) => Z0( + new RegExp("(? ({ + marker: e[0].startsWith("*") ? "*" : "_" + }) + } +)); +H(a8, { + displayName: "InputRule", + group: "Strong" +}); +const B1 = On("strongKeymap", { + ToggleBold: { + shortcuts: ["Mod-b"], + command: (t) => { + const e = t.get(me); + return () => e.call(Bh.key); + } + } +}); +H(B1.ctx, { + displayName: "KeymapCtx", + group: "Strong" +}); +H(B1.shortcuts, { + displayName: "Keymap", + group: "Strong" +}); +const L1 = tu("inlineCode"); +H(L1, { + displayName: "Attr", + group: "InlineCode" +}); +const yi = Pl("inlineCode", (t) => ({ + priority: 100, + code: !0, + parseDOM: [{ tag: "code" }], + toDOM: (e) => ["code", t.get(L1.key)(e)], + parseMarkdown: { + match: (e) => e.type === "inlineCode", + runner: (e, n, r) => { + e.openMark(r), e.addText(n.value), e.closeMark(r); + } + }, + toMarkdown: { + match: (e) => e.type.name === "inlineCode", + runner: (e, n, r) => { + e.withMark(n, "inlineCode", r.text || ""); + } + } +})); +H(yi.mark, { + displayName: "MarkSchema", + group: "InlineCode" +}); +H(yi.ctx, { + displayName: "MarkSchemaCtx", + group: "InlineCode" +}); +const Lh = Ee( + "ToggleInlineCode", + (t) => () => (e, n) => { + const { selection: r, tr: i } = e; + if (r.empty) return !1; + const { from: s, to: o } = r; + return e.doc.rangeHasMark(s, o, yi.type(t)) ? (n == null || n(i.removeMark(s, o, yi.type(t))), !0) : (Object.keys(e.schema.marks).filter( + (u) => u !== yi.type.name + ).map((u) => e.schema.marks[u]).forEach((u) => { + i.removeMark(s, o, u); + }), n == null || n(i.addMark(s, o, yi.type(t).create())), !0); + } +); +H(Lh, { + displayName: "Command", + group: "InlineCode" +}); +const u8 = En((t) => Z0(/(?:`)([^`]+)(?:`)$/, yi.type(t))); +H(u8, { + displayName: "InputRule", + group: "InlineCode" +}); +const F1 = On("inlineCodeKeymap", { + ToggleInlineCode: { + shortcuts: "Mod-e", + command: (t) => { + const e = t.get(me); + return () => e.call(Lh.key); + } + } +}); +H(F1.ctx, { + displayName: "KeymapCtx", + group: "InlineCode" +}); +H(F1.shortcuts, { + displayName: "Keymap", + group: "InlineCode" +}); +const V1 = tu("link"); +H(V1, { + displayName: "Attr", + group: "Link" +}); +const ns = Pl("link", (t) => ({ + attrs: { + href: { validate: "string" }, + title: { default: null, validate: "string|null" } + }, + parseDOM: [ + { + tag: "a[href]", + getAttrs: (e) => { + if (!(e instanceof HTMLElement)) throw Cr(e); + return { + href: e.getAttribute("href"), + title: e.getAttribute("title") + }; + } + } + ], + toDOM: (e) => ["a", { ...t.get(V1.key)(e), ...e.attrs }], + parseMarkdown: { + match: (e) => e.type === "link", + runner: (e, n, r) => { + const i = n.url, s = n.title; + e.openMark(r, { href: i, title: s }), e.next(n.children), e.closeMark(r); + } + }, + toMarkdown: { + match: (e) => e.type.name === "link", + runner: (e, n) => { + e.withMark(n, "link", void 0, { + title: n.attrs.title, + url: n.attrs.href + }); + } + } +})); +H(ns.mark, { + displayName: "MarkSchema", + group: "Link" +}); +const c8 = Ee( + "ToggleLink", + (t) => (e = {}) => Ah(ns.type(t), e) +); +H(c8, { + displayName: "Command", + group: "Link" +}); +const h8 = Ee( + "UpdateLink", + (t) => (e = {}) => (n, r) => { + if (!r) return !1; + let i, s = -1; + const { selection: o } = n, { from: l, to: a } = o; + if (n.doc.nodesBetween(l, l === a ? a + 1 : a, (m, y) => { + if (ns.type(t).isInSet(m.marks)) + return i = m, s = y, !1; + }), !i) return !1; + const u = i.marks.find(({ type: m }) => m === ns.type(t)); + if (!u) return !1; + const c = s, h = s + i.nodeSize, { tr: d } = n, f = ns.type(t).create({ ...u.attrs, ...e }); + return f ? (r( + d.removeMark(c, h, u).addMark(c, h, f).setSelection(new Ce(d.selection.$anchor)).scrollIntoView() + ), !0) : !1; + } +); +H(h8, { + displayName: "Command", + group: "Link" +}); +const d8 = T1("doc", () => ({ + content: "block+", + parseMarkdown: { + match: ({ type: t }) => t === "root", + runner: (t, e, n) => { + t.injectRoot(e, n); + } + }, + toMarkdown: { + match: (t) => t.type.name === "doc", + runner: (t, e) => { + t.openNode("root"), t.next(e.content); + } + } +})); +H(d8, { + displayName: "NodeSchema", + group: "Doc" +}); +function EE(t) { + return r1( + t, + (e) => { + var n; + return e.type === "html" && ["
", "
", "
", "
"].includes( + (n = e.value) == null ? void 0 : n.trim() + ); + }, + (e, n) => { + if (!n.length) return; + const r = n[n.length - 1]; + if (!r) return; + const i = r.children.indexOf(e); + i !== -1 && r.children.splice(i, 1); + }, + !0 + ); +} +const Fh = vs( + "remark-preserve-empty-line", + () => () => EE +); +H(Fh.plugin, { + displayName: "Remark", + group: "Remark" +}); +H(Fh.options, { + displayName: "RemarkConfig", + group: "Remark" +}); +const H1 = Nr("paragraph"); +H(H1, { + displayName: "Attr", + group: "Paragraph" +}); +const Mr = Mt("paragraph", (t) => ({ + content: "inline*", + group: "block", + parseDOM: [{ tag: "p" }], + toDOM: (e) => ["p", t.get(H1.key)(e), 0], + parseMarkdown: { + match: (e) => e.type === "paragraph", + runner: (e, n, r) => { + e.openNode(r), n.children ? e.next(n.children) : e.addText(n.value || ""), e.closeNode(); + } + }, + toMarkdown: { + match: (e) => e.type.name === "paragraph", + runner: (e, n) => { + var s; + const i = (s = t.get(ln).state) == null ? void 0 : s.doc.lastChild; + e.openNode("paragraph"), (!n.content || n.content.size === 0) && n !== i && OE(t) ? e.addNode("html", void 0, "
") : s8(e, n), e.closeNode(); + } + } +})); +function OE(t) { + let e = !1; + try { + t.get(Fh.id), e = !0; + } catch { + e = !1; + } + return e; +} +H(Mr.node, { + displayName: "NodeSchema", + group: "Paragraph" +}); +H(Mr.ctx, { + displayName: "NodeSchemaCtx", + group: "Paragraph" +}); +const $1 = Ee( + "TurnIntoText", + (t) => () => i0(Mr.type(t)) +); +H($1, { + displayName: "Command", + group: "Paragraph" +}); +const q1 = On("paragraphKeymap", { + TurnIntoText: { + shortcuts: "Mod-Alt-0", + command: (t) => { + const e = t.get(me); + return () => e.call($1.key); + } + } +}); +H(q1.ctx, { + displayName: "KeymapCtx", + group: "Paragraph" +}); +H(q1.shortcuts, { + displayName: "Keymap", + group: "Paragraph" +}); +const AE = Array(6).fill(0).map((t, e) => e + 1); +function IE(t) { + return t.textContent.toLowerCase().trim().replace(/\s+/g, "-"); +} +const Vh = vt( + IE, + "headingIdGenerator" +); +H(Vh, { + displayName: "Ctx", + group: "Heading" +}); +const j1 = Nr("heading"); +H(j1, { + displayName: "Attr", + group: "Heading" +}); +const Pn = Mt("heading", (t) => { + const e = t.get(Vh.key); + return { + content: "inline*", + group: "block", + defining: !0, + attrs: { + id: { + default: "", + validate: "string" + }, + level: { + default: 1, + validate: "number" + } + }, + parseDOM: AE.map((n) => ({ + tag: `h${n}`, + getAttrs: (r) => { + if (!(r instanceof HTMLElement)) throw Cr(r); + return { level: n, id: r.id }; + } + })), + toDOM: (n) => [ + `h${n.attrs.level}`, + { + ...t.get(j1.key)(n), + id: n.attrs.id || e(n) + }, + 0 + ], + parseMarkdown: { + match: ({ type: n }) => n === "heading", + runner: (n, r, i) => { + const s = r.depth; + n.openNode(i, { level: s }), n.next(r.children), n.closeNode(); + } + }, + toMarkdown: { + match: (n) => n.type.name === "heading", + runner: (n, r) => { + n.openNode("heading", void 0, { depth: r.attrs.level }), s8(n, r), n.closeNode(); + } + } + }; +}); +H(Pn.node, { + displayName: "NodeSchema", + group: "Heading" +}); +H(Pn.ctx, { + displayName: "NodeSchemaCtx", + group: "Heading" +}); +const f8 = En((t) => V6( + /^(?#+)\s$/, + Pn.type(t), + (e) => { + var o, l; + const n = ((l = (o = e.groups) == null ? void 0 : o.hashes) == null ? void 0 : l.length) || 0, r = t.get(ln), { $from: i } = r.state.selection, s = i.node(); + if (s.type.name === "heading") { + let a = Number(s.attrs.level) + Number(n); + return a > 6 && (a = 6), { level: a }; + } + return { level: n }; + } +)); +H(f8, { + displayName: "InputRule", + group: "Heading" +}); +const Li = Ee("WrapInHeading", (t) => (e) => (e ?? (e = 1), e < 1 ? i0(Mr.type(t)) : i0(Pn.type(t), { level: e }))); +H(Li, { + displayName: "Command", + group: "Heading" +}); +const W1 = Ee( + "DowngradeHeading", + (t) => () => (e, n, r) => { + const { $from: i } = e.selection, s = i.node(); + if (s.type !== Pn.type(t) || !e.selection.empty || i.parentOffset !== 0) + return !1; + const o = s.attrs.level - 1; + return o ? (n == null || n( + e.tr.setNodeMarkup(e.selection.$from.before(), void 0, { + ...s.attrs, + level: o + }) + ), !0) : i0(Mr.type(t))(e, n, r); + } +); +H(W1, { + displayName: "Command", + group: "Heading" +}); +const U1 = On("headingKeymap", { + TurnIntoH1: { + shortcuts: "Mod-Alt-1", + command: (t) => { + const e = t.get(me); + return () => e.call(Li.key, 1); + } + }, + TurnIntoH2: { + shortcuts: "Mod-Alt-2", + command: (t) => { + const e = t.get(me); + return () => e.call(Li.key, 2); + } + }, + TurnIntoH3: { + shortcuts: "Mod-Alt-3", + command: (t) => { + const e = t.get(me); + return () => e.call(Li.key, 3); + } + }, + TurnIntoH4: { + shortcuts: "Mod-Alt-4", + command: (t) => { + const e = t.get(me); + return () => e.call(Li.key, 4); + } + }, + TurnIntoH5: { + shortcuts: "Mod-Alt-5", + command: (t) => { + const e = t.get(me); + return () => e.call(Li.key, 5); + } + }, + TurnIntoH6: { + shortcuts: "Mod-Alt-6", + command: (t) => { + const e = t.get(me); + return () => e.call(Li.key, 6); + } + }, + DowngradeHeading: { + shortcuts: ["Delete", "Backspace"], + command: (t) => { + const e = t.get(me); + return () => e.call(W1.key); + } + } +}); +H(U1.ctx, { + displayName: "KeymapCtx", + group: "Heading" +}); +H(U1.shortcuts, { + displayName: "Keymap", + group: "Heading" +}); +const G1 = Nr("blockquote"); +H(G1, { + displayName: "Attr
", + group: "Blockquote" +}); +const Fl = Mt( + "blockquote", + (t) => ({ + content: "block+", + group: "block", + defining: !0, + parseDOM: [{ tag: "blockquote" }], + toDOM: (e) => ["blockquote", t.get(G1.key)(e), 0], + parseMarkdown: { + match: ({ type: e }) => e === "blockquote", + runner: (e, n, r) => { + e.openNode(r).next(n.children).closeNode(); + } + }, + toMarkdown: { + match: (e) => e.type.name === "blockquote", + runner: (e, n) => { + e.openNode("blockquote").next(n.content).closeNode(); + } + } + }) +); +H(Fl.node, { + displayName: "NodeSchema
", + group: "Blockquote" +}); +H(Fl.ctx, { + displayName: "NodeSchemaCtx
", + group: "Blockquote" +}); +const p8 = En( + (t) => g1(/^\s*>\s$/, Fl.type(t)) +); +H(p8, { + displayName: "InputRule", + group: "Blockquote" +}); +const K1 = Ee( + "WrapInBlockquote", + (t) => () => m1(Fl.type(t)) +); +H(K1, { + displayName: "Command", + group: "Blockquote" +}); +const J1 = On("blockquoteKeymap", { + WrapInBlockquote: { + shortcuts: "Mod-Shift-b", + command: (t) => { + const e = t.get(me); + return () => e.call(K1.key); + } + } +}); +H(J1.ctx, { + displayName: "KeymapCtx
", + group: "Blockquote" +}); +H(J1.shortcuts, { + displayName: "Keymap
", + group: "Blockquote" +}); +const Y1 = Nr("codeBlock", () => ({ + pre: {}, + code: {} +})); +H(Y1, { + displayName: "Attr", + group: "CodeBlock" +}); +const go = Mt("code_block", (t) => ({ + content: "text*", + group: "block", + marks: "", + defining: !0, + code: !0, + attrs: { + language: { + default: "", + validate: "string" + } + }, + parseDOM: [ + { + tag: "pre", + preserveWhitespace: "full", + getAttrs: (e) => { + if (!(e instanceof HTMLElement)) throw Cr(e); + return { language: e.dataset.language }; + } + } + ], + toDOM: (e) => { + const n = t.get(Y1.key)(e), r = e.attrs.language, i = r && r.length > 0 ? { "data-language": r } : void 0; + return [ + "pre", + { + ...n.pre, + ...i + }, + ["code", n.code, 0] + ]; + }, + parseMarkdown: { + match: ({ type: e }) => e === "code", + runner: (e, n, r) => { + const i = n.lang ?? "", s = n.value; + e.openNode(r, { language: i }), s && e.addText(s), e.closeNode(); + } + }, + toMarkdown: { + match: (e) => e.type.name === "code_block", + runner: (e, n) => { + var r; + e.addNode("code", void 0, ((r = n.content.firstChild) == null ? void 0 : r.text) || "", { + lang: n.attrs.language + }); + } + } +})); +H(go.node, { + displayName: "NodeSchema", + group: "CodeBlock" +}); +H(go.ctx, { + displayName: "NodeSchemaCtx", + group: "CodeBlock" +}); +const m8 = En( + (t) => V6( + /^```(?[a-z]*)?[\s\n]$/, + go.type(t), + (e) => { + var n; + return { + language: ((n = e.groups) == null ? void 0 : n.language) ?? "" + }; + } + ) +); +H(m8, { + displayName: "InputRule", + group: "CodeBlock" +}); +const Z1 = Ee( + "CreateCodeBlock", + (t) => (e = "") => i0(go.type(t), { language: e }) +); +H(Z1, { + displayName: "Command", + group: "CodeBlock" +}); +const DE = Ee( + "UpdateCodeBlockLanguage", + () => ({ pos: t, language: e } = { + pos: -1, + language: "" + }) => (n, r) => t >= 0 ? (r == null || r(n.tr.setNodeAttribute(t, "language", e)), !0) : !1 +); +H(DE, { + displayName: "Command", + group: "CodeBlock" +}); +const X1 = On("codeBlockKeymap", { + CreateCodeBlock: { + shortcuts: "Mod-Alt-c", + command: (t) => { + const e = t.get(me); + return () => e.call(Z1.key); + } + } +}); +H(X1.ctx, { + displayName: "KeymapCtx", + group: "CodeBlock" +}); +H(X1.shortcuts, { + displayName: "Keymap", + group: "CodeBlock" +}); +const Q1 = Nr("image"); +H(Q1, { + displayName: "Attr", + group: "Image" +}); +const Vl = Mt("image", (t) => ({ + inline: !0, + group: "inline", + selectable: !0, + draggable: !0, + marks: "", + atom: !0, + defining: !0, + isolating: !0, + attrs: { + src: { default: "", validate: "string" }, + alt: { default: "", validate: "string" }, + title: { default: "", validate: "string" } + }, + parseDOM: [ + { + tag: "img[src]", + getAttrs: (e) => { + if (!(e instanceof HTMLElement)) throw Cr(e); + return { + src: e.getAttribute("src") || "", + alt: e.getAttribute("alt") || "", + title: e.getAttribute("title") || e.getAttribute("alt") || "" + }; + } + } + ], + toDOM: (e) => ["img", { ...t.get(Q1.key)(e), ...e.attrs }], + parseMarkdown: { + match: ({ type: e }) => e === "image", + runner: (e, n, r) => { + const i = n.url, s = n.alt, o = n.title; + e.addNode(r, { + src: i, + alt: s, + title: o + }); + } + }, + toMarkdown: { + match: (e) => e.type.name === "image", + runner: (e, n) => { + e.addNode("image", void 0, void 0, { + title: n.attrs.title, + url: n.attrs.src, + alt: n.attrs.alt + }); + } + } +})); +H(Vl.node, { + displayName: "NodeSchema", + group: "Image" +}); +H(Vl.ctx, { + displayName: "NodeSchemaCtx", + group: "Image" +}); +const g8 = Ee( + "InsertImage", + (t) => (e = {}) => (n, r) => { + if (!r) return !0; + const { src: i = "", alt: s = "", title: o = "" } = e, l = Vl.type(t).create({ src: i, alt: s, title: o }); + return l && r(n.tr.replaceSelectionWith(l).scrollIntoView()), !0; + } +); +H(g8, { + displayName: "Command", + group: "Image" +}); +const y8 = Ee( + "UpdateImage", + (t) => (e = {}) => (n, r) => { + const i = TN( + n.selection, + Vl.type(t) + ); + if (!i) return !1; + const { node: s, pos: o } = i, l = { ...s.attrs }, { src: a, alt: u, title: c } = e; + return a !== void 0 && (l.src = a), u !== void 0 && (l.alt = u), c !== void 0 && (l.title = c), r == null || r( + n.tr.setNodeMarkup(o, void 0, l).scrollIntoView() + ), !0; + } +); +H(y8, { + displayName: "Command", + group: "Image" +}); +const _E = En( + (t) => new jn( + /!\[(?.*?)]\((?.*?)\s*(?="|\))"?(?[^"]+)?"?\)/, + (e, n, r, i) => { + const [s, o, l = "", a] = n; + return s ? e.tr.replaceWith( + r, + i, + Vl.type(t).create({ src: l, alt: o, title: a }) + ) : null; + } + ) +); +H(_E, { + displayName: "InputRule<insertImageInputRule>", + group: "Image" +}); +const Zc = Nr("hardbreak", (t) => ({ + "data-type": "hardbreak", + "data-is-inline": t.attrs.isInline +})); +H(Zc, { + displayName: "Attr<hardbreak>", + group: "Hardbreak" +}); +const io = Mt("hardbreak", (t) => ({ + inline: !0, + group: "inline", + attrs: { + isInline: { + default: !1, + validate: "boolean" + } + }, + selectable: !1, + parseDOM: [ + { tag: "br" }, + { + tag: 'span[data-type="hardbreak"]', + getAttrs: () => ({ isInline: !0 }) + } + ], + toDOM: (e) => e.attrs.isInline ? ["span", t.get(Zc.key)(e), " "] : ["br", t.get(Zc.key)(e)], + parseMarkdown: { + match: ({ type: e }) => e === "break", + runner: (e, n, r) => { + var i; + e.addNode(r, { + isInline: !!((i = n.data) != null && i.isInline) + }); + } + }, + leafText: () => ` +`, + toMarkdown: { + match: (e) => e.type.name === "hardbreak", + runner: (e, n) => { + n.attrs.isInline ? e.addNode("text", void 0, ` +`) : e.addNode("break"); + } + } +})); +H(io.node, { + displayName: "NodeSchema<hardbreak>", + group: "Hardbreak" +}); +H(io.ctx, { + displayName: "NodeSchemaCtx<hardbreak>", + group: "Hardbreak" +}); +const em = Ee( + "InsertHardbreak", + (t) => () => (e, n) => { + var s; + const { selection: r, tr: i } = e; + if (!(r instanceof Ce)) return !1; + if (r.empty) { + const o = r.$from.node(); + if (o.childCount > 0 && ((s = o.lastChild) == null ? void 0 : s.type.name) === "hardbreak") + return n == null || n( + i.replaceRangeWith( + r.to - 1, + r.to, + e.schema.node("paragraph") + ).setSelection(Pe.near(i.doc.resolve(r.to))).scrollIntoView() + ), !0; + } + return n == null || n( + i.setMeta("hardbreak", !0).replaceSelectionWith(io.type(t).create()).scrollIntoView() + ), !0; + } +); +H(em, { + displayName: "Command<insertHardbreakCommand>", + group: "Hardbreak" +}); +const tm = On("hardbreakKeymap", { + InsertHardbreak: { + shortcuts: "Shift-Enter", + command: (t) => { + const e = t.get(me); + return () => e.call(em.key); + } + } +}); +H(tm.ctx, { + displayName: "KeymapCtx<hardbreak>", + group: "Hardbreak" +}); +H(tm.shortcuts, { + displayName: "Keymap<hardbreak>", + group: "Hardbreak" +}); +const nm = Nr("hr"); +H(nm, { + displayName: "Attr<hr>", + group: "Hr" +}); +const Hl = Mt("hr", (t) => ({ + group: "block", + parseDOM: [{ tag: "hr" }], + toDOM: (e) => ["hr", t.get(nm.key)(e)], + parseMarkdown: { + match: ({ type: e }) => e === "thematicBreak", + runner: (e, n, r) => { + e.addNode(r); + } + }, + toMarkdown: { + match: (e) => e.type.name === "hr", + runner: (e) => { + e.addNode("thematicBreak"); + } + } +})); +H(Hl.node, { + displayName: "NodeSchema<hr>", + group: "Hr" +}); +H(Hl.ctx, { + displayName: "NodeSchemaCtx<hr>", + group: "Hr" +}); +const v8 = En( + (t) => new jn(/^(?:---|___\s|\*\*\*\s)$/, (e, n, r, i) => { + const { tr: s } = e; + return n[0] && s.replaceWith(r - 1, i, Hl.type(t).create()), s; + }) +); +H(v8, { + displayName: "InputRule<insertHrInputRule>", + group: "Hr" +}); +const b8 = Ee( + "InsertHr", + (t) => () => (e, n) => { + if (!n) return !0; + const r = Mr.node.type(t).create(), { tr: i, selection: s } = e, { from: o } = s, l = Hl.type(t).create(); + if (!l) return !0; + const a = i.replaceSelectionWith(l).insert(o, r), u = Pe.findFrom(a.doc.resolve(o), 1, !0); + return u && n(a.setSelection(u).scrollIntoView()), !0; + } +); +H(b8, { + displayName: "Command<insertHrCommand>", + group: "Hr" +}); +const rm = Nr("bulletList"); +H(rm, { + displayName: "Attr<bulletList>", + group: "BulletList" +}); +const xo = Mt("bullet_list", (t) => ({ + content: "listItem+", + group: "block", + attrs: { + spread: { + default: !1, + validate: "boolean" + } + }, + parseDOM: [ + { + tag: "ul", + getAttrs: (e) => { + if (!(e instanceof HTMLElement)) throw Cr(e); + return { + spread: e.dataset.spread === "true" + }; + } + } + ], + toDOM: (e) => [ + "ul", + { + ...t.get(rm.key)(e), + "data-spread": e.attrs.spread + }, + 0 + ], + parseMarkdown: { + match: ({ type: e, ordered: n }) => e === "list" && !n, + runner: (e, n, r) => { + const i = n.spread != null ? `${n.spread}` : "false"; + e.openNode(r, { spread: i }).next(n.children).closeNode(); + } + }, + toMarkdown: { + match: (e) => e.type.name === "bullet_list", + runner: (e, n) => { + e.openNode("list", void 0, { + ordered: !1, + spread: n.attrs.spread + }).next(n.content).closeNode(); + } + } +})); +H(xo.node, { + displayName: "NodeSchema<bulletList>", + group: "BulletList" +}); +H(xo.ctx, { + displayName: "NodeSchemaCtx<bulletList>", + group: "BulletList" +}); +const w8 = En( + (t) => g1(/^\s*([-+*])\s$/, xo.type(t)) +); +H(w8, { + displayName: "InputRule<wrapInBulletListInputRule>", + group: "BulletList" +}); +const im = Ee( + "WrapInBulletList", + (t) => () => m1(xo.type(t)) +); +H(im, { + displayName: "Command<wrapInBulletListCommand>", + group: "BulletList" +}); +const sm = On("bulletListKeymap", { + WrapInBulletList: { + shortcuts: "Mod-Alt-8", + command: (t) => { + const e = t.get(me); + return () => e.call(im.key); + } + } +}); +H(sm.ctx, { + displayName: "KeymapCtx<bulletListKeymap>", + group: "BulletList" +}); +H(sm.shortcuts, { + displayName: "Keymap<bulletListKeymap>", + group: "BulletList" +}); +const om = Nr("orderedList"); +H(om, { + displayName: "Attr<orderedList>", + group: "OrderedList" +}); +const So = Mt("ordered_list", (t) => ({ + content: "listItem+", + group: "block", + attrs: { + order: { + default: 1, + validate: "number" + }, + spread: { + default: !1, + validate: "boolean" + } + }, + parseDOM: [ + { + tag: "ol", + getAttrs: (e) => { + if (!(e instanceof HTMLElement)) throw Cr(e); + return { + spread: e.dataset.spread, + order: e.hasAttribute("start") ? Number(e.getAttribute("start")) : 1 + }; + } + } + ], + toDOM: (e) => [ + "ol", + { + ...t.get(om.key)(e), + ...e.attrs.order === 1 ? {} : e.attrs.order, + "data-spread": e.attrs.spread + }, + 0 + ], + parseMarkdown: { + match: ({ type: e, ordered: n }) => e === "list" && !!n, + runner: (e, n, r) => { + const i = n.spread != null ? `${n.spread}` : "true"; + e.openNode(r, { spread: i }).next(n.children).closeNode(); + } + }, + toMarkdown: { + match: (e) => e.type.name === "ordered_list", + runner: (e, n) => { + e.openNode("list", void 0, { + ordered: !0, + start: 1, + spread: n.attrs.spread === "true" + }), e.next(n.content), e.closeNode(); + } + } +})); +H(So.node, { + displayName: "NodeSchema<orderedList>", + group: "OrderedList" +}); +H(So.ctx, { + displayName: "NodeSchemaCtx<orderedList>", + group: "OrderedList" +}); +const k8 = En( + (t) => g1( + /^\s*(\d+)\.\s$/, + So.type(t), + (e) => ({ order: Number(e[1]) }), + (e, n) => n.childCount + n.attrs.order === Number(e[1]) + ) +); +H(k8, { + displayName: "InputRule<wrapInOrderedListInputRule>", + group: "OrderedList" +}); +const lm = Ee( + "WrapInOrderedList", + (t) => () => m1(So.type(t)) +); +H(lm, { + displayName: "Command<wrapInOrderedListCommand>", + group: "OrderedList" +}); +const am = On("orderedListKeymap", { + WrapInOrderedList: { + shortcuts: "Mod-Alt-7", + command: (t) => { + const e = t.get(me); + return () => e.call(lm.key); + } + } +}); +H(am.ctx, { + displayName: "KeymapCtx<orderedList>", + group: "OrderedList" +}); +H(am.shortcuts, { + displayName: "Keymap<orderedList>", + group: "OrderedList" +}); +const um = Nr("listItem"); +H(um, { + displayName: "Attr<listItem>", + group: "ListItem" +}); +const Wr = Mt("list_item", (t) => ({ + group: "listItem", + content: "paragraph block*", + attrs: { + label: { + default: "•", + validate: "string" + }, + listType: { + default: "bullet", + validate: "string" + }, + spread: { + default: !0, + validate: "boolean" + } + }, + defining: !0, + parseDOM: [ + { + tag: "li", + getAttrs: (e) => { + if (!(e instanceof HTMLElement)) throw Cr(e); + return { + label: e.dataset.label, + listType: e.dataset.listType, + spread: e.dataset.spread === "true" + }; + } + } + ], + toDOM: (e) => [ + "li", + { + ...t.get(um.key)(e), + "data-label": e.attrs.label, + "data-list-type": e.attrs.listType, + "data-spread": e.attrs.spread + }, + 0 + ], + parseMarkdown: { + match: ({ type: e }) => e === "listItem", + runner: (e, n, r) => { + const i = n.label != null ? `${n.label}.` : "•", s = n.label != null ? "ordered" : "bullet", o = n.spread != null ? `${n.spread}` : "true"; + e.openNode(r, { label: i, listType: s, spread: o }), e.next(n.children), e.closeNode(); + } + }, + toMarkdown: { + match: (e) => e.type.name === "list_item", + runner: (e, n) => { + e.openNode("listItem", void 0, { + spread: n.attrs.spread + }), e.next(n.content), e.closeNode(); + } + } +})); +H(Wr.node, { + displayName: "NodeSchema<listItem>", + group: "ListItem" +}); +H(Wr.ctx, { + displayName: "NodeSchemaCtx<listItem>", + group: "ListItem" +}); +const cm = Ee( + "SinkListItem", + (t) => () => NE(Wr.type(t)) +); +H(cm, { + displayName: "Command<sinkListItemCommand>", + group: "ListItem" +}); +const hm = Ee( + "LiftListItem", + (t) => () => xE(Wr.type(t)) +); +H(hm, { + displayName: "Command<liftListItemCommand>", + group: "ListItem" +}); +const dm = Ee( + "SplitListItem", + (t) => () => kE(Wr.type(t)) +); +H(dm, { + displayName: "Command<splitListItemCommand>", + group: "ListItem" +}); +function RE(t) { + return (e, n, r) => { + const { selection: i } = e; + if (!(i instanceof Ce)) return !1; + const { empty: s, $from: o } = i; + return !s || o.parentOffset !== 0 || o.node(-1).type !== Wr.type(t) ? !1 : R6(e, n, r); + }; +} +const fm = Ee( + "LiftFirstListItem", + (t) => () => RE(t) +); +H(fm, { + displayName: "Command<liftFirstListItemCommand>", + group: "ListItem" +}); +const pm = On("listItemKeymap", { + NextListItem: { + shortcuts: "Enter", + command: (t) => { + const e = t.get(me); + return () => e.call(dm.key); + } + }, + SinkListItem: { + shortcuts: ["Tab", "Mod-]"], + command: (t) => { + const e = t.get(me); + return () => e.call(cm.key); + } + }, + LiftListItem: { + shortcuts: ["Shift-Tab", "Mod-["], + command: (t) => { + const e = t.get(me); + return () => e.call(hm.key); + } + }, + LiftFirstListItem: { + shortcuts: ["Backspace", "Delete"], + command: (t) => { + const e = t.get(me); + return () => e.call(fm.key); + } + } +}); +H(pm.ctx, { + displayName: "KeymapCtx<listItem>", + group: "ListItem" +}); +H(pm.shortcuts, { + displayName: "Keymap<listItem>", + group: "ListItem" +}); +const x8 = T1("text", () => ({ + group: "inline", + parseMarkdown: { + match: ({ type: t }) => t === "text", + runner: (t, e) => { + t.addText(e.value); + } + }, + toMarkdown: { + match: (t) => t.type.name === "text", + runner: (t, e) => { + t.addNode("text", void 0, e.text); + } + } +})); +H(x8, { + displayName: "NodeSchema<text>", + group: "Text" +}); +const mm = Nr("html"); +H(mm, { + displayName: "Attr<html>", + group: "Html" +}); +const gm = Mt("html", (t) => ({ + atom: !0, + group: "inline", + inline: !0, + attrs: { + value: { + default: "", + validate: "string" + } + }, + toDOM: (e) => { + const n = document.createElement("span"), r = { + ...t.get(mm.key)(e), + "data-value": e.attrs.value, + "data-type": "html" + }; + return n.textContent = e.attrs.value, ["span", r, e.attrs.value]; + }, + parseDOM: [ + { + tag: 'span[data-type="html"]', + getAttrs: (e) => ({ + value: e.dataset.value ?? "" + }) + } + ], + parseMarkdown: { + match: ({ type: e }) => e === "html", + runner: (e, n, r) => { + e.addNode(r, { value: n.value }); + } + }, + toMarkdown: { + match: (e) => e.type.name === "html", + runner: (e, n) => { + e.addNode("html", void 0, n.attrs.value); + } + } +})); +H(gm.node, { + displayName: "NodeSchema<html>", + group: "Html" +}); +H(gm.ctx, { + displayName: "NodeSchemaCtx<html>", + group: "Html" +}); +const zE = [ + d8, + H1, + Mr, + Vh, + j1, + Pn, + Zc, + io, + G1, + Fl, + Y1, + go, + nm, + Hl, + Q1, + Vl, + rm, + xo, + om, + So, + um, + Wr, + R1, + ko, + P1, + Ll, + L1, + yi, + V1, + ns, + mm, + gm, + x8 +].flat(), PE = [ + p8, + w8, + k8, + m8, + v8, + f8 +].flat(), BE = [ + o8, + l8, + u8, + a8 +], Bo = Ee( + "IsMarkSelected", + () => (t) => (e) => { + if (!t) return !1; + const { doc: n, selection: r } = e; + return n.rangeHasMark(r.from, r.to, t); + } +), S8 = Ee( + "IsNoteSelected", + () => (t) => (e) => t ? J6(e, t).hasNode : !1 +), qt = Ee( + "ClearTextInCurrentBlock", + () => () => (t, e) => { + let n = t.tr; + const { $from: r, $to: i } = n.selection, { pos: s } = r, { pos: o } = i, l = s - r.node().content.size; + return l < 0 ? !1 : (n = n.deleteRange(l, o), e == null || e(n), !0); + } +), ei = Ee( + "SetBlockType", + () => (t) => (e, n) => { + const { nodeType: r, attrs: i = null } = t ?? {}; + if (!r) return !1; + const s = e.tr, { from: o, to: l } = s.selection; + try { + s.setBlockType(o, l, r, i); + } catch { + return !1; + } + return n == null || n(s), !0; + } +), ba = Ee( + "WrapInBlockType", + () => (t) => (e, n) => { + const { nodeType: r, attrs: i = null } = t ?? {}; + if (!r) return !1; + let s = e.tr; + try { + const { $from: o, $to: l } = s.selection, a = o.blockRange(l), u = a && c1(a, r, i); + if (!u) return !1; + s = s.wrap(a, u); + } catch { + return !1; + } + return n == null || n(s), !0; + } +), wa = Ee( + "AddBlockType", + () => (t) => (e, n) => { + const { nodeType: r, attrs: i = null } = t ?? {}; + if (!r) return !1; + const s = e.tr; + try { + const o = r instanceof Xn ? r : r.createAndFill(i); + if (!o) return !1; + s.replaceSelectionWith(o); + } catch { + return !1; + } + return n == null || n(s), !0; + } +), C8 = Ee( + "SelectTextNearPos", + () => (t) => (e, n) => { + const { pos: r } = t ?? {}; + if (r == null) return !1; + const i = (o, l, a) => Math.min(Math.max(o, l), a), s = e.tr; + try { + const o = e.doc.resolve(i(r, 0, e.doc.content.size)); + s.setSelection(Ce.near(o)); + } catch { + return !1; + } + return n == null || n(s.scrollIntoView()), !0; + } +), LE = [ + $1, + K1, + Li, + W1, + Z1, + em, + b8, + g8, + y8, + lm, + im, + cm, + dm, + hm, + fm, + Ph, + Lh, + Bh, + c8, + h8, + Bo, + S8, + qt, + ei, + ba, + wa, + C8 +], FE = [ + J1, + X1, + tm, + U1, + pm, + am, + sm, + q1, + z1, + F1, + B1 +].flat(), ym = vs( + "remarkAddOrderInList", + () => () => (t) => { + wo(t, "list", (e) => { + if (e.ordered) { + const n = e.start ?? 1; + e.children.forEach((r, i) => { + r.label = i + n; + }); + } + }); + } +); +H(ym.plugin, { + displayName: "Remark<remarkAddOrderInListPlugin>", + group: "Remark" +}); +H(ym.options, { + displayName: "RemarkConfig<remarkAddOrderInListPlugin>", + group: "Remark" +}); +const vm = vs( + "remarkLineBreak", + () => () => (t) => { + const e = /[\t ]*(?:\r?\n|\r)/g; + wo( + t, + "text", + (n, r, i) => { + if (!n.value || typeof n.value != "string") return; + const s = []; + let o = 0; + e.lastIndex = 0; + let l = e.exec(n.value); + for (; l; ) { + const u = l.index; + o !== u && s.push({ + type: "text", + value: n.value.slice(o, u) + }), s.push({ type: "break", data: { isInline: !0 } }), o = u + l[0].length, l = e.exec(n.value); + } + if (s.length > 0 && i && typeof r == "number") + return o < n.value.length && s.push({ type: "text", value: n.value.slice(o) }), i.children.splice(r, 1, ...s), r + s.length; + } + ); + } +); +H(vm.plugin, { + displayName: "Remark<remarkLineBreak>", + group: "Remark" +}); +H(vm.options, { + displayName: "RemarkConfig<remarkLineBreak>", + group: "Remark" +}); +const bm = vs( + "remarkInlineLink", + () => TE +); +H(bm.plugin, { + displayName: "Remark<remarkInlineLinkPlugin>", + group: "Remark" +}); +H(bm.options, { + displayName: "RemarkConfig<remarkInlineLinkPlugin>", + group: "Remark" +}); +const VE = (t) => !!t.children, HE = (t) => t.type === "html"; +function $E(t, e) { + return n(t, 0, null)[0]; + function n(r, i, s) { + if (VE(r)) { + const o = []; + for (let l = 0, a = r.children.length; l < a; l++) { + const u = r.children[l]; + if (u) { + const c = n(u, l, r); + if (c) + for (let h = 0, d = c.length; h < d; h++) { + const f = c[h]; + f && o.push(f); + } + } + } + r.children = o; + } + return e(r, i, s); + } +} +const qE = ["root", "blockquote", "listItem"], wm = vs( + "remarkHTMLTransformer", + () => () => (t) => { + $E(t, (e, n, r) => HE(e) ? (r && qE.includes(r.type) && (e.children = [{ ...e }], delete e.value, e.type = "paragraph"), [e]) : [e]); + } +); +H(wm.plugin, { + displayName: "Remark<remarkHtmlTransformer>", + group: "Remark" +}); +H(wm.options, { + displayName: "RemarkConfig<remarkHtmlTransformer>", + group: "Remark" +}); +const km = vs( + "remarkMarker", + () => () => (t, e) => { + const n = (r) => e.value.charAt(r.position.start.offset); + wo( + t, + (r) => ["strong", "emphasis"].includes(r.type), + (r) => { + r.marker = n(r); + } + ); + } +); +H(km.plugin, { + displayName: "Remark<remarkMarker>", + group: "Remark" +}); +H(km.options, { + displayName: "RemarkConfig<remarkMarker>", + group: "Remark" +}); +const N8 = hn(() => { + let t = !1; + const e = new Nt( + "MILKDOWN_INLINE_NODES_CURSOR" + ), n = new Dt({ + key: e, + state: { + init() { + return !1; + }, + apply(r) { + if (!r.selection.empty) return !1; + const i = r.selection.$from, s = i.nodeBefore, o = i.nodeAfter; + return !!(s && o && s.isInline && !s.isText && o.isInline && !o.isText); + } + }, + props: { + handleDOMEvents: { + compositionend: (r, i) => t ? (t = !1, requestAnimationFrame(() => { + if (n.getState(r.state)) { + const o = r.state.selection.from; + i.preventDefault(), r.dispatch(r.state.tr.insertText(i.data || "", o)); + } + }), !0) : !1, + compositionstart: (r) => (n.getState(r.state) && (t = !0), !1), + beforeinput: (r, i) => { + if (n.getState(r.state) && i instanceof InputEvent && i.data && !t) { + const o = r.state.selection.from; + return i.preventDefault(), r.dispatch(r.state.tr.insertText(i.data || "", o)), !0; + } + return !1; + } + }, + decorations(r) { + if (n.getState(r)) { + const o = r.selection.$from.pos, l = document.createElement("span"), a = Gt.widget(o, l, { + side: -1 + }), u = document.createElement("span"), c = Gt.widget(o, u); + return setTimeout(() => { + l.contentEditable = "true", u.contentEditable = "true"; + }), ct.create(r.doc, [a, c]); + } + return ct.empty; + } + } + }); + return n; +}); +H(N8, { + displayName: "Prose<inlineNodesCursorPlugin>", + group: "Prose" +}); +const M8 = hn((t) => new Dt({ + key: new Nt("MILKDOWN_HARDBREAK_MARKS"), + appendTransaction: (e, n, r) => { + if (!e.length) return; + const [i] = e; + if (!i) return; + const [s] = i.steps; + if (i.getMeta("hardbreak")) { + if (!(s instanceof Ft)) return; + const { from: a } = s; + return r.tr.setNodeMarkup( + a, + io.type(t), + void 0, + [] + ); + } + if (s instanceof mi) { + let a = r.tr; + const { from: u, to: c } = s; + return r.doc.nodesBetween(u, c, (h, d) => { + h.type === io.type(t) && (a = a.setNodeMarkup( + d, + io.type(t), + void 0, + [] + )); + }), a; + } + } +})); +H(M8, { + displayName: "Prose<hardbreakClearMarkPlugin>", + group: "Prose" +}); +const xm = vt( + ["table", "code_block"], + "hardbreakFilterNodes" +); +H(xm, { + displayName: "Ctx<hardbreakFilterNodes>", + group: "Prose" +}); +const T8 = hn((t) => { + const e = t.get(xm.key); + return new Dt({ + key: new Nt("MILKDOWN_HARDBREAK_FILTER"), + filterTransaction: (n, r) => { + const i = n.getMeta("hardbreak"), [s] = n.steps; + if (i && s) { + const { from: o } = s, l = r.doc.resolve(o); + let a = l.depth, u = !0; + for (; a > 0; ) + e.includes(l.node(a).type.name) && (u = !1), a--; + return u; + } + return !0; + } + }); +}); +H(T8, { + displayName: "Prose<hardbreakFilterPlugin>", + group: "Prose" +}); +const E8 = hn((t) => { + const e = new Nt("MILKDOWN_HEADING_ID"), n = (r) => { + if (r.composing) return; + const i = t.get(Vh.key), s = r.state.tr.setMeta("addToHistory", !1); + let o = !1; + const l = {}; + r.state.doc.descendants((a, u) => { + if (a.type === Pn.type(t)) { + if (a.textContent.trim().length === 0) return; + const c = a.attrs; + let h = i(a); + l[h] ? (l[h] += 1, h += `-#${l[h]}`) : l[h] = 1, c.id !== h && (o = !0, s.setMeta(e, !0).setNodeMarkup(u, void 0, { + ...c, + id: h + })); + } + }), o && r.dispatch(s); + }; + return new Dt({ + key: e, + view: (r) => (n(r), { + update: (i, s) => { + i.state.doc.eq(s.doc) || n(i); + } + }) + }); +}); +H(E8, { + displayName: "Prose<syncHeadingIdPlugin>", + group: "Prose" +}); +const O8 = hn((t) => { + const e = (n, r, i) => { + if (!i.selection || n.some( + (h) => h.getMeta("addToHistory") === !1 || !h.isGeneric + )) + return null; + const s = So.type(t), o = xo.type(t), l = Wr.type(t), a = (h, d) => { + let f = !1; + const m = `${d + 1}.`; + return h.label !== m && (h.label = m, f = !0), f; + }; + let u = i.tr, c = !1; + return i.doc.descendants( + (h, d, f, m) => { + if (h.type === o) { + const y = h.maybeChild(0); + (y == null ? void 0 : y.type) === l && y.attrs.listType === "ordered" && (c = !0, u.setNodeMarkup(d, s, { spread: "true" }), h.descendants( + (b, w, C, N) => { + if (b.type === l) { + const B = { ...b.attrs }; + a(B, N) && (u = u.setNodeMarkup(w, void 0, B)); + } + return !1; + } + )); + } else if (h.type === l && (f == null ? void 0 : f.type) === s) { + const y = { ...h.attrs }; + let b = !1; + y.listType !== "ordered" && (y.listType = "ordered", b = !0), (f == null ? void 0 : f.maybeChild(0)) && (b = a(y, m)), b && (u = u.setNodeMarkup(d, void 0, y), c = !0); + } + } + ), c ? u.setMeta("addToHistory", !1) : null; + }; + return new Dt({ + key: new Nt("MILKDOWN_KEEP_LIST_ORDER"), + appendTransaction: e + }); +}); +H(O8, { + displayName: "Prose<syncListOrderPlugin>", + group: "Prose" +}); +const jE = [ + M8, + xm, + T8, + N8, + ym, + bm, + vm, + wm, + km, + Fh, + E8, + O8 +].flat(), WE = [ + zE, + PE, + BE, + LE, + FE, + jE +].flat(); +let gp, yp; +if (typeof WeakMap < "u") { + let t = /* @__PURE__ */ new WeakMap(); + gp = (e) => t.get(e), yp = (e, n) => (t.set(e, n), n); +} else { + const t = []; + let n = 0; + gp = (r) => { + for (let i = 0; i < t.length; i += 2) if (t[i] == r) return t[i + 1]; + }, yp = (r, i) => (n == 10 && (n = 0), t[n++] = r, t[n++] = i); +} +var Xe = class { + constructor(t, e, n, r) { + this.width = t, this.height = e, this.map = n, this.problems = r; + } + findCell(t) { + for (let e = 0; e < this.map.length; e++) { + const n = this.map[e]; + if (n != t) continue; + const r = e % this.width, i = e / this.width | 0; + let s = r + 1, o = i + 1; + for (let l = 1; s < this.width && this.map[e + l] == n; l++) s++; + for (let l = 1; o < this.height && this.map[e + this.width * l] == n; l++) o++; + return { + left: r, + top: i, + right: s, + bottom: o + }; + } + throw new RangeError(`No cell with offset ${t} found`); + } + colCount(t) { + for (let e = 0; e < this.map.length; e++) if (this.map[e] == t) return e % this.width; + throw new RangeError(`No cell with offset ${t} found`); + } + nextCell(t, e, n) { + const { left: r, right: i, top: s, bottom: o } = this.findCell(t); + return e == "horiz" ? (n < 0 ? r == 0 : i == this.width) ? null : this.map[s * this.width + (n < 0 ? r - 1 : i)] : (n < 0 ? s == 0 : o == this.height) ? null : this.map[r + this.width * (n < 0 ? s - 1 : o)]; + } + rectBetween(t, e) { + const { left: n, right: r, top: i, bottom: s } = this.findCell(t), { left: o, right: l, top: a, bottom: u } = this.findCell(e); + return { + left: Math.min(n, o), + top: Math.min(i, a), + right: Math.max(r, l), + bottom: Math.max(s, u) + }; + } + cellsInRect(t) { + const e = [], n = {}; + for (let r = t.top; r < t.bottom; r++) for (let i = t.left; i < t.right; i++) { + const s = r * this.width + i, o = this.map[s]; + n[o] || (n[o] = !0, !(i == t.left && i && this.map[s - 1] == o || r == t.top && r && this.map[s - this.width] == o) && e.push(o)); + } + return e; + } + positionAt(t, e, n) { + for (let r = 0, i = 0; ; r++) { + const s = i + n.child(r).nodeSize; + if (r == t) { + let o = e + t * this.width; + const l = (t + 1) * this.width; + for (; o < l && this.map[o] < i; ) o++; + return o == l ? s - 1 : this.map[o]; + } + i = s; + } + } + static get(t) { + return gp(t) || yp(t, UE(t)); + } +}; +function UE(t) { + if (t.type.spec.tableRole != "table") throw new RangeError("Not a table node: " + t.type.name); + const e = GE(t), n = t.childCount, r = []; + let i = 0, s = null; + const o = []; + for (let u = 0, c = e * n; u < c; u++) r[u] = 0; + for (let u = 0, c = 0; u < n; u++) { + const h = t.child(u); + c++; + for (let m = 0; ; m++) { + for (; i < r.length && r[i] != 0; ) i++; + if (m == h.childCount) break; + const y = h.child(m), { colspan: b, rowspan: w, colwidth: C } = y.attrs; + for (let N = 0; N < w; N++) { + if (N + u >= n) { + (s || (s = [])).push({ + type: "overlong_rowspan", + pos: c, + n: w - N + }); + break; + } + const B = i + N * e; + for (let _ = 0; _ < b; _++) { + r[B + _] == 0 ? r[B + _] = c : (s || (s = [])).push({ + type: "collision", + row: u, + pos: c, + n: b - _ + }); + const A = C && C[_]; + if (A) { + const L = (B + _) % e * 2, K = o[L]; + K == null || K != A && o[L + 1] == 1 ? (o[L] = A, o[L + 1] = 1) : K == A && o[L + 1]++; + } + } + } + i += b, c += y.nodeSize; + } + const d = (u + 1) * e; + let f = 0; + for (; i < d; ) r[i++] == 0 && f++; + f && (s || (s = [])).push({ + type: "missing", + row: u, + n: f + }), c++; + } + (e === 0 || n === 0) && (s || (s = [])).push({ type: "zero_sized" }); + const l = new Xe(e, n, r, s); + let a = !1; + for (let u = 0; !a && u < o.length; u += 2) o[u] != null && o[u + 1] < n && (a = !0); + return a && KE(l, o, t), l; +} +function GE(t) { + let e = -1, n = !1; + for (let r = 0; r < t.childCount; r++) { + const i = t.child(r); + let s = 0; + if (n) for (let o = 0; o < r; o++) { + const l = t.child(o); + for (let a = 0; a < l.childCount; a++) { + const u = l.child(a); + o + u.attrs.rowspan > r && (s += u.attrs.colspan); + } + } + for (let o = 0; o < i.childCount; o++) { + const l = i.child(o); + s += l.attrs.colspan, l.attrs.rowspan > 1 && (n = !0); + } + e == -1 ? e = s : e != s && (e = Math.max(e, s)); + } + return e; +} +function KE(t, e, n) { + t.problems || (t.problems = []); + const r = {}; + for (let i = 0; i < t.map.length; i++) { + const s = t.map[i]; + if (r[s]) continue; + r[s] = !0; + const o = n.nodeAt(s); + if (!o) throw new RangeError(`No cell with offset ${s} found`); + let l = null; + const a = o.attrs; + for (let u = 0; u < a.colspan; u++) { + const c = e[(i + u) % t.width * 2]; + c != null && (!a.colwidth || a.colwidth[u] != c) && ((l || (l = JE(a)))[u] = c); + } + l && t.problems.unshift({ + type: "colwidth mismatch", + pos: s, + colwidth: l + }); + } +} +function JE(t) { + if (t.colwidth) return t.colwidth.slice(); + const e = []; + for (let n = 0; n < t.colspan; n++) e.push(0); + return e; +} +function w5(t, e) { + if (typeof t == "string") return {}; + const n = t.getAttribute("data-colwidth"), r = n && /^\d+(,\d+)*$/.test(n) ? n.split(",").map((o) => Number(o)) : null, i = Number(t.getAttribute("colspan") || 1), s = { + colspan: i, + rowspan: Number(t.getAttribute("rowspan") || 1), + colwidth: r && r.length == i ? r : null + }; + for (const o in e) { + const l = e[o].getFromDOM, a = l && l(t); + a != null && (s[o] = a); + } + return s; +} +function k5(t, e) { + const n = {}; + t.attrs.colspan != 1 && (n.colspan = t.attrs.colspan), t.attrs.rowspan != 1 && (n.rowspan = t.attrs.rowspan), t.attrs.colwidth && (n["data-colwidth"] = t.attrs.colwidth.join(",")); + for (const r in e) { + const i = e[r].setDOMAttr; + i && i(t.attrs[r], n); + } + return n; +} +function YE(t) { + if (t !== null) { + if (!Array.isArray(t)) throw new TypeError("colwidth must be null or an array"); + for (const e of t) if (typeof e != "number") throw new TypeError("colwidth must be null or an array of numbers"); + } +} +function ZE(t) { + const e = t.cellAttributes || {}, n = { + colspan: { + default: 1, + validate: "number" + }, + rowspan: { + default: 1, + validate: "number" + }, + colwidth: { + default: null, + validate: YE + } + }; + for (const r in e) n[r] = { + default: e[r].default, + validate: e[r].validate + }; + return { + table: { + content: "table_row+", + tableRole: "table", + isolating: !0, + group: t.tableGroup, + parseDOM: [{ tag: "table" }], + toDOM() { + return ["table", ["tbody", 0]]; + } + }, + table_row: { + content: "(table_cell | table_header)*", + tableRole: "row", + parseDOM: [{ tag: "tr" }], + toDOM() { + return ["tr", 0]; + } + }, + table_cell: { + content: t.cellContent, + attrs: n, + tableRole: "cell", + isolating: !0, + parseDOM: [{ + tag: "td", + getAttrs: (r) => w5(r, e) + }], + toDOM(r) { + return [ + "td", + k5(r, e), + 0 + ]; + } + }, + table_header: { + content: t.cellContent, + attrs: n, + tableRole: "header_cell", + isolating: !0, + parseDOM: [{ + tag: "th", + getAttrs: (r) => w5(r, e) + }], + toDOM(r) { + return [ + "th", + k5(r, e), + 0 + ]; + } + } + }; +} +function tr(t) { + let e = t.cached.tableNodeTypes; + if (!e) { + e = t.cached.tableNodeTypes = {}; + for (const n in t.nodes) { + const r = t.nodes[n], i = r.spec.tableRole; + i && (e[i] = r); + } + } + return e; +} +const qi = new Nt("selectingCells"); +function Dl(t) { + for (let e = t.depth - 1; e > 0; e--) if (t.node(e).type.spec.tableRole == "row") return t.node(0).resolve(t.before(e + 1)); + return null; +} +function ir(t) { + const e = t.selection.$head; + for (let n = e.depth; n > 0; n--) if (e.node(n).type.spec.tableRole == "row") return !0; + return !1; +} +function Hh(t) { + const e = t.selection; + if ("$anchorCell" in e && e.$anchorCell) return e.$anchorCell.pos > e.$headCell.pos ? e.$anchorCell : e.$headCell; + if ("node" in e && e.node && e.node.type.spec.tableRole == "cell") return e.$anchor; + const n = Dl(e.$head) || XE(e.$head); + if (n) return n; + throw new RangeError(`No cell found around position ${e.head}`); +} +function XE(t) { + for (let e = t.nodeAfter, n = t.pos; e; e = e.firstChild, n++) { + const r = e.type.spec.tableRole; + if (r == "cell" || r == "header_cell") return t.doc.resolve(n); + } + for (let e = t.nodeBefore, n = t.pos; e; e = e.lastChild, n--) { + const r = e.type.spec.tableRole; + if (r == "cell" || r == "header_cell") return t.doc.resolve(n - e.nodeSize); + } +} +function vp(t) { + return t.parent.type.spec.tableRole == "row" && !!t.nodeAfter; +} +function QE(t) { + return t.node(0).resolve(t.pos + t.nodeAfter.nodeSize); +} +function Sm(t, e) { + return t.depth == e.depth && t.pos >= e.start(-1) && t.pos <= e.end(-1); +} +function A8(t, e, n) { + const r = t.node(-1), i = Xe.get(r), s = t.start(-1), o = i.nextCell(t.pos - s, e, n); + return o == null ? null : t.node(0).resolve(s + o); +} +function yo(t, e, n = 1) { + const r = { + ...t, + colspan: t.colspan - n + }; + return r.colwidth && (r.colwidth = r.colwidth.slice(), r.colwidth.splice(e, n), r.colwidth.some((i) => i > 0) || (r.colwidth = null)), r; +} +function eO(t, e, n = 1) { + const r = { + ...t, + colspan: t.colspan + n + }; + if (r.colwidth) { + r.colwidth = r.colwidth.slice(); + for (let i = 0; i < n; i++) r.colwidth.splice(e, 0, 0); + } + return r; +} +function tO(t, e, n) { + const r = tr(e.type.schema).header_cell; + for (let i = 0; i < t.height; i++) if (e.nodeAt(t.map[n + i * t.width]).type != r) return !1; + return !0; +} +var ut = class ti extends Pe { + constructor(e, n = e) { + const r = e.node(-1), i = Xe.get(r), s = e.start(-1), o = i.rectBetween(e.pos - s, n.pos - s), l = e.node(0), a = i.cellsInRect(o).filter((c) => c != n.pos - s); + a.unshift(n.pos - s); + const u = a.map((c) => { + const h = r.nodeAt(c); + if (!h) throw new RangeError(`No cell with offset ${c} found`); + const d = s + c + 1; + return new A6(l.resolve(d), l.resolve(d + h.content.size)); + }); + super(u[0].$from, u[0].$to, u), this.$anchorCell = e, this.$headCell = n; + } + map(e, n) { + const r = e.resolve(n.map(this.$anchorCell.pos)), i = e.resolve(n.map(this.$headCell.pos)); + if (vp(r) && vp(i) && Sm(r, i)) { + const s = this.$anchorCell.node(-1) != r.node(-1); + return s && this.isRowSelection() ? ti.rowSelection(r, i) : s && this.isColSelection() ? ti.colSelection(r, i) : new ti(r, i); + } + return Ce.between(r, i); + } + content() { + const e = this.$anchorCell.node(-1), n = Xe.get(e), r = this.$anchorCell.start(-1), i = n.rectBetween(this.$anchorCell.pos - r, this.$headCell.pos - r), s = {}, o = []; + for (let a = i.top; a < i.bottom; a++) { + const u = []; + for (let c = a * n.width + i.left, h = i.left; h < i.right; h++, c++) { + const d = n.map[c]; + if (s[d]) continue; + s[d] = !0; + const f = n.findCell(d); + let m = e.nodeAt(d); + if (!m) throw new RangeError(`No cell with offset ${d} found`); + const y = i.left - f.left, b = f.right - i.right; + if (y > 0 || b > 0) { + let w = m.attrs; + if (y > 0 && (w = yo(w, 0, y)), b > 0 && (w = yo(w, w.colspan - b, b)), f.left < i.left) { + if (m = m.type.createAndFill(w), !m) throw new RangeError(`Could not create cell with attrs ${JSON.stringify(w)}`); + } else m = m.type.create(w, m.content); + } + if (f.top < i.top || f.bottom > i.bottom) { + const w = { + ...m.attrs, + rowspan: Math.min(f.bottom, i.bottom) - Math.max(f.top, i.top) + }; + f.top < i.top ? m = m.type.createAndFill(w) : m = m.type.create(w, m.content); + } + u.push(m); + } + o.push(e.child(a).copy(re.from(u))); + } + const l = this.isColSelection() && this.isRowSelection() ? e : o; + return new ae(re.from(l), 1, 1); + } + replace(e, n = ae.empty) { + const r = e.steps.length, i = this.ranges; + for (let o = 0; o < i.length; o++) { + const { $from: l, $to: a } = i[o], u = e.mapping.slice(r); + e.replace(u.map(l.pos), u.map(a.pos), o ? ae.empty : n); + } + const s = Pe.findFrom(e.doc.resolve(e.mapping.slice(r).map(this.to)), -1); + s && e.setSelection(s); + } + replaceWith(e, n) { + this.replace(e, new ae(re.from(n), 0, 0)); + } + forEachCell(e) { + const n = this.$anchorCell.node(-1), r = Xe.get(n), i = this.$anchorCell.start(-1), s = r.cellsInRect(r.rectBetween(this.$anchorCell.pos - i, this.$headCell.pos - i)); + for (let o = 0; o < s.length; o++) e(n.nodeAt(s[o]), i + s[o]); + } + isColSelection() { + const e = this.$anchorCell.index(-1), n = this.$headCell.index(-1); + if (Math.min(e, n) > 0) return !1; + const r = e + this.$anchorCell.nodeAfter.attrs.rowspan, i = n + this.$headCell.nodeAfter.attrs.rowspan; + return Math.max(r, i) == this.$headCell.node(-1).childCount; + } + static colSelection(e, n = e) { + const r = e.node(-1), i = Xe.get(r), s = e.start(-1), o = i.findCell(e.pos - s), l = i.findCell(n.pos - s), a = e.node(0); + return o.top <= l.top ? (o.top > 0 && (e = a.resolve(s + i.map[o.left])), l.bottom < i.height && (n = a.resolve(s + i.map[i.width * (i.height - 1) + l.right - 1]))) : (l.top > 0 && (n = a.resolve(s + i.map[l.left])), o.bottom < i.height && (e = a.resolve(s + i.map[i.width * (i.height - 1) + o.right - 1]))), new ti(e, n); + } + isRowSelection() { + const e = this.$anchorCell.node(-1), n = Xe.get(e), r = this.$anchorCell.start(-1), i = n.colCount(this.$anchorCell.pos - r), s = n.colCount(this.$headCell.pos - r); + if (Math.min(i, s) > 0) return !1; + const o = i + this.$anchorCell.nodeAfter.attrs.colspan, l = s + this.$headCell.nodeAfter.attrs.colspan; + return Math.max(o, l) == n.width; + } + eq(e) { + return e instanceof ti && e.$anchorCell.pos == this.$anchorCell.pos && e.$headCell.pos == this.$headCell.pos; + } + static rowSelection(e, n = e) { + const r = e.node(-1), i = Xe.get(r), s = e.start(-1), o = i.findCell(e.pos - s), l = i.findCell(n.pos - s), a = e.node(0); + return o.left <= l.left ? (o.left > 0 && (e = a.resolve(s + i.map[o.top * i.width])), l.right < i.width && (n = a.resolve(s + i.map[i.width * (l.top + 1) - 1]))) : (l.left > 0 && (n = a.resolve(s + i.map[l.top * i.width])), o.right < i.width && (e = a.resolve(s + i.map[i.width * (o.top + 1) - 1]))), new ti(e, n); + } + toJSON() { + return { + type: "cell", + anchor: this.$anchorCell.pos, + head: this.$headCell.pos + }; + } + static fromJSON(e, n) { + return new ti(e.resolve(n.anchor), e.resolve(n.head)); + } + static create(e, n, r = n) { + return new ti(e.resolve(n), e.resolve(r)); + } + getBookmark() { + return new nO(this.$anchorCell.pos, this.$headCell.pos); + } +}; +ut.prototype.visible = !1; +Pe.jsonID("cell", ut); +var nO = class I8 { + constructor(e, n) { + this.anchor = e, this.head = n; + } + map(e) { + return new I8(e.map(this.anchor), e.map(this.head)); + } + resolve(e) { + const n = e.resolve(this.anchor), r = e.resolve(this.head); + return n.parent.type.spec.tableRole == "row" && r.parent.type.spec.tableRole == "row" && n.index() < n.parent.childCount && r.index() < r.parent.childCount && Sm(n, r) ? new ut(n, r) : Pe.near(r, 1); + } +}; +function rO(t) { + if (!(t.selection instanceof ut)) return null; + const e = []; + return t.selection.forEachCell((n, r) => { + e.push(Gt.node(r, r + n.nodeSize, { class: "selectedCell" })); + }), ct.create(t.doc, e); +} +function iO({ $from: t, $to: e }) { + if (t.pos == e.pos || t.pos < e.pos - 6) return !1; + let n = t.pos, r = e.pos, i = t.depth; + for (; i >= 0 && !(t.after(i + 1) < t.end(i)); i--, n++) ; + for (let s = e.depth; s >= 0 && !(e.before(s + 1) > e.start(s)); s--, r--) ; + return n == r && /row|table/.test(t.node(i).type.spec.tableRole); +} +function sO({ $from: t, $to: e }) { + let n, r; + for (let i = t.depth; i > 0; i--) { + const s = t.node(i); + if (s.type.spec.tableRole === "cell" || s.type.spec.tableRole === "header_cell") { + n = s; + break; + } + } + for (let i = e.depth; i > 0; i--) { + const s = e.node(i); + if (s.type.spec.tableRole === "cell" || s.type.spec.tableRole === "header_cell") { + r = s; + break; + } + } + return n !== r && e.parentOffset === 0; +} +function oO(t, e, n) { + const r = (e || t).selection, i = (e || t).doc; + let s, o; + if (r instanceof Ne && (o = r.node.type.spec.tableRole)) { + if (o == "cell" || o == "header_cell") s = ut.create(i, r.from); + else if (o == "row") { + const l = i.resolve(r.from + 1); + s = ut.rowSelection(l, l); + } else if (!n) { + const l = Xe.get(r.node), a = r.from + 1, u = a + l.map[l.width * l.height - 1]; + s = ut.create(i, a + 1, u); + } + } else r instanceof Ce && iO(r) ? s = Ce.create(i, r.from) : r instanceof Ce && sO(r) && (s = Ce.create(i, r.$from.start(), r.$from.end())); + return s && (e || (e = t.tr)).setSelection(s), e; +} +const lO = new Nt("fix-tables"); +function D8(t, e, n, r) { + const i = t.childCount, s = e.childCount; + e: for (let o = 0, l = 0; o < s; o++) { + const a = e.child(o); + for (let u = l, c = Math.min(i, o + 3); u < c; u++) if (t.child(u) == a) { + l = u + 1, n += a.nodeSize; + continue e; + } + r(a, n), l < i && t.child(l).sameMarkup(a) ? D8(t.child(l), a, n + 1, r) : a.nodesBetween(0, a.content.size, r, n + 1), n += a.nodeSize; + } +} +function aO(t, e) { + let n; + const r = (i, s) => { + i.type.spec.tableRole == "table" && (n = uO(t, i, s, n)); + }; + return e ? e.doc != t.doc && D8(e.doc, t.doc, 0, r) : t.doc.descendants(r), n; +} +function uO(t, e, n, r) { + const i = Xe.get(e); + if (!i.problems) return r; + r || (r = t.tr); + const s = []; + for (let a = 0; a < i.height; a++) s.push(0); + for (let a = 0; a < i.problems.length; a++) { + const u = i.problems[a]; + if (u.type == "collision") { + const c = e.nodeAt(u.pos); + if (!c) continue; + const h = c.attrs; + for (let d = 0; d < h.rowspan; d++) s[u.row + d] += u.n; + r.setNodeMarkup(r.mapping.map(n + 1 + u.pos), null, yo(h, h.colspan - u.n, u.n)); + } else if (u.type == "missing") s[u.row] += u.n; + else if (u.type == "overlong_rowspan") { + const c = e.nodeAt(u.pos); + if (!c) continue; + r.setNodeMarkup(r.mapping.map(n + 1 + u.pos), null, { + ...c.attrs, + rowspan: c.attrs.rowspan - u.n + }); + } else if (u.type == "colwidth mismatch") { + const c = e.nodeAt(u.pos); + if (!c) continue; + r.setNodeMarkup(r.mapping.map(n + 1 + u.pos), null, { + ...c.attrs, + colwidth: u.colwidth + }); + } else if (u.type == "zero_sized") { + const c = r.mapping.map(n); + r.delete(c, c + e.nodeSize); + } + } + let o, l; + for (let a = 0; a < s.length; a++) s[a] && (o == null && (o = a), l = a); + for (let a = 0, u = n + 1; a < i.height; a++) { + const c = e.child(a), h = u + c.nodeSize, d = s[a]; + if (d > 0) { + let f = "cell"; + c.firstChild && (f = c.firstChild.type.spec.tableRole); + const m = []; + for (let b = 0; b < d; b++) { + const w = tr(t.schema)[f].createAndFill(); + w && m.push(w); + } + const y = (a == 0 || o == a - 1) && l == a ? u + 1 : h - 1; + r.insert(r.mapping.map(y), m); + } + u = h; + } + return r.setMeta(lO, { fixTables: !0 }); +} +function _8(t) { + const e = Xe.get(t), n = [], r = e.height, i = e.width; + for (let s = 0; s < r; s++) { + const o = []; + for (let l = 0; l < i; l++) { + const a = s * i + l, u = e.map[a]; + if (s > 0) { + const c = a - i; + if (u === e.map[c]) { + o.push(null); + continue; + } + } + if (l > 0) { + const c = a - 1; + if (u === e.map[c]) { + o.push(null); + continue; + } + } + o.push(t.nodeAt(u)); + } + n.push(o); + } + return n; +} +function R8(t, e) { + const n = [], r = Xe.get(t), i = r.height, s = r.width; + for (let o = 0; o < i; o++) { + const l = t.child(o), a = []; + for (let c = 0; c < s; c++) { + const h = e[o][c]; + if (!h) continue; + const d = r.map[o * r.width + c], f = t.nodeAt(d); + if (!f) continue; + const m = f.type.createChecked(h.attrs, h.content, h.marks); + a.push(m); + } + const u = l.type.createChecked(l.attrs, a, l.marks); + n.push(u); + } + return t.type.createChecked(t.attrs, n, t.marks); +} +function z8(t, e, n, r) { + const i = e[0] > n[0] ? -1 : 1, s = t.splice(e[0], e.length), o = s.length % 2 === 0 ? 1 : 0; + let l; + return l = i === -1 ? n[0] : n[n.length - 1] - o, t.splice(l, 0, ...s), t; +} +function nu(t) { + return cO((e) => e.type.spec.tableRole === "table", t); +} +function cO(t, e) { + for (let n = e.depth; n >= 0; n -= 1) { + const r = e.node(n); + if (t(r)) return { + node: r, + pos: n === 0 ? 0 : e.before(n), + start: e.start(n), + depth: n + }; + } + return null; +} +function Lo(t, e) { + const n = nu(e.$from); + if (!n) return; + const r = Xe.get(n.node); + if (!(t < 0 || t > r.width - 1)) + return r.cellsInRect({ + left: t, + right: t + 1, + top: 0, + bottom: r.height + }).map((i) => { + const s = n.node.nodeAt(i), o = i + n.start; + return { + pos: o, + start: o + 1, + node: s, + depth: n.depth + 2 + }; + }); +} +function Fo(t, e) { + const n = nu(e.$from); + if (!n) return; + const r = Xe.get(n.node); + if (!(t < 0 || t > r.height - 1)) + return r.cellsInRect({ + left: 0, + right: r.width, + top: t, + bottom: t + 1 + }).map((i) => { + const s = n.node.nodeAt(i), o = i + n.start; + return { + pos: o, + start: o + 1, + node: s, + depth: n.depth + 2 + }; + }); +} +function x5(t, e, n = e) { + let r = e, i = n; + for (let c = e; c >= 0; c--) { + const h = Lo(c, t.selection); + h && h.forEach((d) => { + const f = d.node.attrs.colspan + c - 1; + f >= r && (r = c), f > i && (i = f); + }); + } + for (let c = e; c <= i; c++) { + const h = Lo(c, t.selection); + h && h.forEach((d) => { + const f = d.node.attrs.colspan + c - 1; + d.node.attrs.colspan > 1 && f > i && (i = f); + }); + } + const s = []; + for (let c = r; c <= i; c++) { + const h = Lo(c, t.selection); + h && h.length > 0 && s.push(c); + } + r = s[0], i = s[s.length - 1]; + const o = Lo(r, t.selection), l = Fo(0, t.selection); + if (!o || !l) return; + const a = t.doc.resolve(o[o.length - 1].pos); + let u; + for (let c = i; c >= r; c--) { + const h = Lo(c, t.selection); + if (h && h.length > 0) { + for (let d = l.length - 1; d >= 0; d--) if (l[d].pos === h[0].pos) { + u = h[0]; + break; + } + if (u) break; + } + } + if (u) + return { + $anchor: a, + $head: t.doc.resolve(u.pos), + indexes: s + }; +} +function S5(t, e, n = e) { + let r = e, i = n; + for (let c = e; c >= 0; c--) { + const h = Fo(c, t.selection); + h && h.forEach((d) => { + const f = d.node.attrs.rowspan + c - 1; + f >= r && (r = c), f > i && (i = f); + }); + } + for (let c = e; c <= i; c++) { + const h = Fo(c, t.selection); + h && h.forEach((d) => { + const f = d.node.attrs.rowspan + c - 1; + d.node.attrs.rowspan > 1 && f > i && (i = f); + }); + } + const s = []; + for (let c = r; c <= i; c++) { + const h = Fo(c, t.selection); + h && h.length > 0 && s.push(c); + } + r = s[0], i = s[s.length - 1]; + const o = Fo(r, t.selection), l = Lo(0, t.selection); + if (!o || !l) return; + const a = t.doc.resolve(o[o.length - 1].pos); + let u; + for (let c = i; c >= r; c--) { + const h = Fo(c, t.selection); + if (h && h.length > 0) { + for (let d = l.length - 1; d >= 0; d--) if (l[d].pos === h[0].pos) { + u = h[0]; + break; + } + if (u) break; + } + } + if (u) + return { + $anchor: a, + $head: t.doc.resolve(u.pos), + indexes: s + }; +} +function C5(t) { + return t[0].map((e, n) => t.map((r) => r[n])); +} +function hO(t) { + var e, n; + const { tr: r, originIndex: i, targetIndex: s, select: o, pos: l } = t, a = nu(r.doc.resolve(l)); + if (!a) return !1; + const u = (e = x5(r, i)) === null || e === void 0 ? void 0 : e.indexes, c = (n = x5(r, s)) === null || n === void 0 ? void 0 : n.indexes; + if (!u || !c || u.includes(s)) return !1; + const h = dO(a.node, u, c); + if (r.replaceWith(a.pos, a.pos + a.node.nodeSize, h), !o) return !0; + const d = Xe.get(h), f = a.start, m = s, y = d.positionAt(d.height - 1, m, h), b = r.doc.resolve(f + y), w = d.positionAt(0, m, h), C = r.doc.resolve(f + w); + return r.setSelection(ut.colSelection(b, C)), !0; +} +function dO(t, e, n, r) { + let i = C5(_8(t)); + return i = z8(i, e, n), i = C5(i), R8(t, i); +} +function fO(t) { + var e, n; + const { tr: r, originIndex: i, targetIndex: s, select: o, pos: l } = t, a = nu(r.doc.resolve(l)); + if (!a) return !1; + const u = (e = S5(r, i)) === null || e === void 0 ? void 0 : e.indexes, c = (n = S5(r, s)) === null || n === void 0 ? void 0 : n.indexes; + if (!u || !c || u.includes(s)) return !1; + const h = pO(a.node, u, c); + if (r.replaceWith(a.pos, a.pos + a.node.nodeSize, h), !o) return !0; + const d = Xe.get(h), f = a.start, m = s, y = d.positionAt(m, d.width - 1, h), b = r.doc.resolve(f + y), w = d.positionAt(m, 0, h), C = r.doc.resolve(f + w); + return r.setSelection(ut.rowSelection(b, C)), !0; +} +function pO(t, e, n, r) { + let i = _8(t); + return i = z8(i, e, n), R8(t, i); +} +function bs(t) { + const e = t.selection, n = Hh(t), r = n.node(-1), i = n.start(-1), s = Xe.get(r); + return { + ...e instanceof ut ? s.rectBetween(e.$anchorCell.pos - i, e.$headCell.pos - i) : s.findCell(n.pos - i), + tableStart: i, + map: s, + table: r + }; +} +function P8(t, { map: e, tableStart: n, table: r }, i) { + let s = i > 0 ? -1 : 0; + tO(e, r, i + s) && (s = i == 0 || i == e.width ? null : 0); + for (let o = 0; o < e.height; o++) { + const l = o * e.width + i; + if (i > 0 && i < e.width && e.map[l - 1] == e.map[l]) { + const a = e.map[l], u = r.nodeAt(a); + t.setNodeMarkup(t.mapping.map(n + a), null, eO(u.attrs, i - e.colCount(a))), o += u.attrs.rowspan - 1; + } else { + const a = s == null ? tr(r.type.schema).cell : r.nodeAt(e.map[l + s]).type, u = e.positionAt(o, i, r); + t.insert(t.mapping.map(n + u), a.createAndFill()); + } + } + return t; +} +function mO(t, e) { + if (!ir(t)) return !1; + if (e) { + const n = bs(t); + e(P8(t.tr, n, n.left)); + } + return !0; +} +function gO(t, e) { + if (!ir(t)) return !1; + if (e) { + const n = bs(t); + e(P8(t.tr, n, n.right)); + } + return !0; +} +function yO(t, { map: e, table: n, tableStart: r }, i) { + const s = t.mapping.maps.length; + for (let o = 0; o < e.height; ) { + const l = o * e.width + i, a = e.map[l], u = n.nodeAt(a), c = u.attrs; + if (i > 0 && e.map[l - 1] == a || i < e.width - 1 && e.map[l + 1] == a) t.setNodeMarkup(t.mapping.slice(s).map(r + a), null, yo(c, i - e.colCount(a))); + else { + const h = t.mapping.slice(s).map(r + a); + t.delete(h, h + u.nodeSize); + } + o += c.rowspan; + } +} +function vO(t, e) { + if (!ir(t)) return !1; + if (e) { + const n = bs(t), r = t.tr; + if (n.left == 0 && n.right == n.map.width) return !1; + for (let i = n.right - 1; yO(r, n, i), i != n.left; i--) { + const s = n.tableStart ? r.doc.nodeAt(n.tableStart - 1) : r.doc; + if (!s) throw new RangeError("No table found"); + n.table = s, n.map = Xe.get(s); + } + e(r); + } + return !0; +} +function bO(t, { map: e, table: n, tableStart: r }, i) { + let s = 0; + for (let u = 0; u < i; u++) s += n.child(u).nodeSize; + const o = s + n.child(i).nodeSize, l = t.mapping.maps.length; + t.delete(s + r, o + r); + const a = /* @__PURE__ */ new Set(); + for (let u = 0, c = i * e.width; u < e.width; u++, c++) { + const h = e.map[c]; + if (!a.has(h)) { + if (a.add(h), i > 0 && h == e.map[c - e.width]) { + const d = n.nodeAt(h).attrs; + t.setNodeMarkup(t.mapping.slice(l).map(h + r), null, { + ...d, + rowspan: d.rowspan - 1 + }), u += d.colspan - 1; + } else if (i < e.height && h == e.map[c + e.width]) { + const d = n.nodeAt(h), f = d.attrs, m = d.type.create({ + ...f, + rowspan: d.attrs.rowspan - 1 + }, d.content), y = e.positionAt(i + 1, u, n); + t.insert(t.mapping.slice(l).map(r + y), m), u += f.colspan - 1; + } + } + } +} +function wO(t, e) { + if (!ir(t)) return !1; + if (e) { + const n = bs(t), r = t.tr; + if (n.top == 0 && n.bottom == n.map.height) return !1; + for (let i = n.bottom - 1; bO(r, n, i), i != n.top; i--) { + const s = n.tableStart ? r.doc.nodeAt(n.tableStart - 1) : r.doc; + if (!s) throw new RangeError("No table found"); + n.table = s, n.map = Xe.get(n.table); + } + e(r); + } + return !0; +} +function kO(t, e) { + return function(n, r) { + if (!ir(n)) return !1; + const i = Hh(n); + if (i.nodeAfter.attrs[t] === e) return !1; + if (r) { + const s = n.tr; + n.selection instanceof ut ? n.selection.forEachCell((o, l) => { + o.attrs[t] !== e && s.setNodeMarkup(l, null, { + ...o.attrs, + [t]: e + }); + }) : s.setNodeMarkup(i.pos, null, { + ...i.nodeAfter.attrs, + [t]: e + }), r(s); + } + return !0; + }; +} +function xO(t) { + return function(e, n) { + if (!ir(e)) return !1; + if (n) { + const r = tr(e.schema), i = bs(e), s = e.tr, o = i.map.cellsInRect(t == "column" ? { + left: i.left, + top: 0, + right: i.right, + bottom: i.map.height + } : t == "row" ? { + left: 0, + top: i.top, + right: i.map.width, + bottom: i.bottom + } : i), l = o.map((a) => i.table.nodeAt(a)); + for (let a = 0; a < o.length; a++) l[a].type == r.header_cell && s.setNodeMarkup(i.tableStart + o[a], r.cell, l[a].attrs); + if (s.steps.length === 0) for (let a = 0; a < o.length; a++) s.setNodeMarkup(i.tableStart + o[a], r.header_cell, l[a].attrs); + n(s); + } + return !0; + }; +} +function N5(t, e, n) { + const r = e.map.cellsInRect({ + left: 0, + top: 0, + right: t == "row" ? e.map.width : 1, + bottom: t == "column" ? e.map.height : 1 + }); + for (let i = 0; i < r.length; i++) { + const s = e.table.nodeAt(r[i]); + if (s && s.type !== n.header_cell) return !1; + } + return !0; +} +function Cm(t, e) { + return e = e || { useDeprecatedLogic: !1 }, e.useDeprecatedLogic ? xO(t) : function(n, r) { + if (!ir(n)) return !1; + if (r) { + const i = tr(n.schema), s = bs(n), o = n.tr, l = N5("row", s, i), a = N5("column", s, i), u = (t === "column" ? l : t === "row" && a) ? 1 : 0, c = t == "column" ? { + left: 0, + top: u, + right: 1, + bottom: s.map.height + } : t == "row" ? { + left: u, + top: 0, + right: s.map.width, + bottom: 1 + } : s, h = t == "column" ? a ? i.cell : i.header_cell : t == "row" ? l ? i.cell : i.header_cell : i.cell; + s.map.cellsInRect(c).forEach((d) => { + const f = d + s.tableStart, m = o.doc.nodeAt(f); + m && o.setNodeMarkup(f, h, m.attrs); + }), r(o); + } + return !0; + }; +} +Cm("row", { useDeprecatedLogic: !0 }); +Cm("column", { useDeprecatedLogic: !0 }); +Cm("cell", { useDeprecatedLogic: !0 }); +function SO(t, e) { + if (e < 0) { + const n = t.nodeBefore; + if (n) return t.pos - n.nodeSize; + for (let r = t.index(-1) - 1, i = t.before(); r >= 0; r--) { + const s = t.node(-1).child(r), o = s.lastChild; + if (o) return i - 1 - o.nodeSize; + i -= s.nodeSize; + } + } else { + if (t.index() < t.parent.childCount - 1) return t.pos + t.nodeAfter.nodeSize; + const n = t.node(-1); + for (let r = t.indexAfter(-1), i = t.after(); r < n.childCount; r++) { + const s = n.child(r); + if (s.childCount) return i + 1; + i += s.nodeSize; + } + } + return null; +} +function B8(t) { + return function(e, n) { + if (!ir(e)) return !1; + const r = SO(Hh(e), t); + if (r == null) return !1; + if (n) { + const i = e.doc.resolve(r); + n(e.tr.setSelection(Ce.between(i, QE(i))).scrollIntoView()); + } + return !0; + }; +} +function CO(t, e) { + const n = t.selection.$anchor; + for (let r = n.depth; r > 0; r--) if (n.node(r).type.spec.tableRole == "table") + return e && e(t.tr.delete(n.before(r), n.after(r)).scrollIntoView()), !0; + return !1; +} +function Cu(t, e) { + const n = t.selection; + if (!(n instanceof ut)) return !1; + if (e) { + const r = t.tr, i = tr(t.schema).cell.createAndFill().content; + n.forEachCell((s, o) => { + s.content.eq(i) || r.replace(r.mapping.map(o + 1), r.mapping.map(o + s.nodeSize - 1), new ae(i, 0, 0)); + }), r.docChanged && e(r); + } + return !0; +} +function NO(t) { + return (e, n) => { + const { from: r, to: i, select: s = !0, pos: o = e.selection.from } = t, l = e.tr; + return fO({ + tr: l, + originIndex: r, + targetIndex: i, + select: s, + pos: o + }) ? (n == null || n(l), !0) : !1; + }; +} +function MO(t) { + return (e, n) => { + const { from: r, to: i, select: s = !0, pos: o = e.selection.from } = t, l = e.tr; + return hO({ + tr: l, + originIndex: r, + targetIndex: i, + select: s, + pos: o + }) ? (n == null || n(l), !0) : !1; + }; +} +function TO(t) { + if (t.size === 0) return null; + let { content: e, openStart: n, openEnd: r } = t; + for (; e.childCount == 1 && (n > 0 && r > 0 || e.child(0).type.spec.tableRole == "table"); ) + n--, r--, e = e.child(0).content; + const i = e.child(0), s = i.type.spec.tableRole, o = i.type.schema, l = []; + if (s == "row") for (let a = 0; a < e.childCount; a++) { + let u = e.child(a).content; + const c = a ? 0 : Math.max(0, n - 1), h = a < e.childCount - 1 ? 0 : Math.max(0, r - 1); + (c || h) && (u = bp(tr(o).row, new ae(u, c, h)).content), l.push(u); + } + else if (s == "cell" || s == "header_cell") l.push(n || r ? bp(tr(o).row, new ae(e, n, r)).content : e); + else return null; + return EO(o, l); +} +function EO(t, e) { + const n = []; + for (let i = 0; i < e.length; i++) { + const s = e[i]; + for (let o = s.childCount - 1; o >= 0; o--) { + const { rowspan: l, colspan: a } = s.child(o).attrs; + for (let u = i; u < i + l; u++) n[u] = (n[u] || 0) + a; + } + } + let r = 0; + for (let i = 0; i < n.length; i++) r = Math.max(r, n[i]); + for (let i = 0; i < n.length; i++) + if (i >= e.length && e.push(re.empty), n[i] < r) { + const s = tr(t).cell.createAndFill(), o = []; + for (let l = n[i]; l < r; l++) o.push(s); + e[i] = e[i].append(re.from(o)); + } + return { + height: e.length, + width: r, + rows: e + }; +} +function bp(t, e) { + const n = t.createAndFill(); + return new O6(n).replace(0, n.content.size, e).doc; +} +function OO({ width: t, height: e, rows: n }, r, i) { + if (t != r) { + const s = [], o = []; + for (let l = 0; l < n.length; l++) { + const a = n[l], u = []; + for (let c = s[l] || 0, h = 0; c < r; h++) { + let d = a.child(h % a.childCount); + c + d.attrs.colspan > r && (d = d.type.createChecked(yo(d.attrs, d.attrs.colspan, c + d.attrs.colspan - r), d.content)), u.push(d), c += d.attrs.colspan; + for (let f = 1; f < d.attrs.rowspan; f++) s[l + f] = (s[l + f] || 0) + d.attrs.colspan; + } + o.push(re.from(u)); + } + n = o, t = r; + } + if (e != i) { + const s = []; + for (let o = 0, l = 0; o < i; o++, l++) { + const a = [], u = n[l % e]; + for (let c = 0; c < u.childCount; c++) { + let h = u.child(c); + o + h.attrs.rowspan > i && (h = h.type.create({ + ...h.attrs, + rowspan: Math.max(1, i - h.attrs.rowspan) + }, h.content)), a.push(h); + } + s.push(re.from(a)); + } + n = s, e = i; + } + return { + width: t, + height: e, + rows: n + }; +} +function AO(t, e, n, r, i, s, o) { + const l = t.doc.type.schema, a = tr(l); + let u, c; + if (i > e.width) for (let h = 0, d = 0; h < e.height; h++) { + const f = n.child(h); + d += f.nodeSize; + const m = []; + let y; + f.lastChild == null || f.lastChild.type == a.cell ? y = u || (u = a.cell.createAndFill()) : y = c || (c = a.header_cell.createAndFill()); + for (let b = e.width; b < i; b++) m.push(y); + t.insert(t.mapping.slice(o).map(d - 1 + r), m); + } + if (s > e.height) { + const h = []; + for (let m = 0, y = (e.height - 1) * e.width; m < Math.max(e.width, i); m++) { + const b = m >= e.width ? !1 : n.nodeAt(e.map[y + m]).type == a.header_cell; + h.push(b ? c || (c = a.header_cell.createAndFill()) : u || (u = a.cell.createAndFill())); + } + const d = a.row.create(null, re.from(h)), f = []; + for (let m = e.height; m < s; m++) f.push(d); + t.insert(t.mapping.slice(o).map(r + n.nodeSize - 2), f); + } + return !!(u || c); +} +function M5(t, e, n, r, i, s, o, l) { + if (o == 0 || o == e.height) return !1; + let a = !1; + for (let u = i; u < s; u++) { + const c = o * e.width + u, h = e.map[c]; + if (e.map[c - e.width] == h) { + a = !0; + const d = n.nodeAt(h), { top: f, left: m } = e.findCell(h); + t.setNodeMarkup(t.mapping.slice(l).map(h + r), null, { + ...d.attrs, + rowspan: o - f + }), t.insert(t.mapping.slice(l).map(e.positionAt(o, m, n)), d.type.createAndFill({ + ...d.attrs, + rowspan: f + d.attrs.rowspan - o + })), u += d.attrs.colspan - 1; + } + } + return a; +} +function T5(t, e, n, r, i, s, o, l) { + if (o == 0 || o == e.width) return !1; + let a = !1; + for (let u = i; u < s; u++) { + const c = u * e.width + o, h = e.map[c]; + if (e.map[c - 1] == h) { + a = !0; + const d = n.nodeAt(h), f = e.colCount(h), m = t.mapping.slice(l).map(h + r); + t.setNodeMarkup(m, null, yo(d.attrs, o - f, d.attrs.colspan - (o - f))), t.insert(m + d.nodeSize, d.type.createAndFill(yo(d.attrs, 0, o - f))), u += d.attrs.rowspan - 1; + } + } + return a; +} +function E5(t, e, n, r, i) { + let s = n ? t.doc.nodeAt(n - 1) : t.doc; + if (!s) throw new Error("No table found"); + let o = Xe.get(s); + const { top: l, left: a } = r, u = a + i.width, c = l + i.height, h = t.tr; + let d = 0; + function f() { + if (s = n ? h.doc.nodeAt(n - 1) : h.doc, !s) throw new Error("No table found"); + o = Xe.get(s), d = h.mapping.maps.length; + } + AO(h, o, s, n, u, c, d) && f(), M5(h, o, s, n, a, u, l, d) && f(), M5(h, o, s, n, a, u, c, d) && f(), T5(h, o, s, n, l, c, a, d) && f(), T5(h, o, s, n, l, c, u, d) && f(); + for (let m = l; m < c; m++) { + const y = o.positionAt(m, a, s), b = o.positionAt(m, u, s); + h.replace(h.mapping.slice(d).map(y + n), h.mapping.slice(d).map(b + n), new ae(i.rows[m - l], 0, 0)); + } + f(), h.setSelection(new ut(h.doc.resolve(n + o.positionAt(l, a, s)), h.doc.resolve(n + o.positionAt(c - 1, u - 1, s)))), e(h); +} +const IO = Y6({ + ArrowLeft: Nu("horiz", -1), + ArrowRight: Nu("horiz", 1), + ArrowUp: Nu("vert", -1), + ArrowDown: Nu("vert", 1), + "Shift-ArrowLeft": Mu("horiz", -1), + "Shift-ArrowRight": Mu("horiz", 1), + "Shift-ArrowUp": Mu("vert", -1), + "Shift-ArrowDown": Mu("vert", 1), + Backspace: Cu, + "Mod-Backspace": Cu, + Delete: Cu, + "Mod-Delete": Cu +}); +function hc(t, e, n) { + return n.eq(t.selection) ? !1 : (e && e(t.tr.setSelection(n).scrollIntoView()), !0); +} +function Nu(t, e) { + return (n, r, i) => { + if (!i) return !1; + const s = n.selection; + if (s instanceof ut) return hc(n, r, Pe.near(s.$headCell, e)); + if (t != "horiz" && !s.empty) return !1; + const o = L8(i, t, e); + if (o == null) return !1; + if (t == "horiz") return hc(n, r, Pe.near(n.doc.resolve(s.head + e), e)); + { + const l = n.doc.resolve(o), a = A8(l, t, e); + let u; + return a ? u = Pe.near(a, 1) : e < 0 ? u = Pe.near(n.doc.resolve(l.before(-1)), -1) : u = Pe.near(n.doc.resolve(l.after(-1)), 1), hc(n, r, u); + } + }; +} +function Mu(t, e) { + return (n, r, i) => { + if (!i) return !1; + const s = n.selection; + let o; + if (s instanceof ut) o = s; + else { + const a = L8(i, t, e); + if (a == null) return !1; + o = new ut(n.doc.resolve(a)); + } + const l = A8(o.$headCell, t, e); + return l ? hc(n, r, new ut(o.$anchorCell, l)) : !1; + }; +} +function DO(t, e) { + const n = t.state.doc, r = Dl(n.resolve(e)); + return r ? (t.dispatch(t.state.tr.setSelection(new ut(r))), !0) : !1; +} +function _O(t, e, n) { + if (!ir(t.state)) return !1; + let r = TO(n); + const i = t.state.selection; + if (i instanceof ut) { + r || (r = { + width: 1, + height: 1, + rows: [re.from(bp(tr(t.state.schema).cell, n))] + }); + const s = i.$anchorCell.node(-1), o = i.$anchorCell.start(-1), l = Xe.get(s).rectBetween(i.$anchorCell.pos - o, i.$headCell.pos - o); + return r = OO(r, l.right - l.left, l.bottom - l.top), E5(t.state, t.dispatch, o, l, r), !0; + } else if (r) { + const s = Hh(t.state), o = s.start(-1); + return E5(t.state, t.dispatch, o, Xe.get(s.node(-1)).findCell(s.pos - o), r), !0; + } else return !1; +} +function RO(t, e) { + var n; + if (e.button != 0 || e.ctrlKey || e.metaKey) return; + const r = O5(t, e.target); + let i; + if (e.shiftKey && t.state.selection instanceof ut) + s(t.state.selection.$anchorCell, e), e.preventDefault(); + else if (e.shiftKey && r && (i = Dl(t.state.selection.$anchor)) != null && ((n = Xd(t, e)) === null || n === void 0 ? void 0 : n.pos) != i.pos) + s(i, e), e.preventDefault(); + else if (!r) return; + function s(a, u) { + let c = Xd(t, u); + const h = qi.getState(t.state) == null; + if (!c || !Sm(a, c)) if (h) c = a; + else return; + const d = new ut(a, c); + if (h || !t.state.selection.eq(d)) { + const f = t.state.tr.setSelection(d); + h && f.setMeta(qi, a.pos), t.dispatch(f); + } + } + function o() { + t.root.removeEventListener("mouseup", o), t.root.removeEventListener("dragstart", o), t.root.removeEventListener("mousemove", l), qi.getState(t.state) != null && t.dispatch(t.state.tr.setMeta(qi, -1)); + } + function l(a) { + const u = a, c = qi.getState(t.state); + let h; + if (c != null) h = t.state.doc.resolve(c); + else if (O5(t, u.target) != r && (h = Xd(t, e), !h)) + return o(); + h && s(h, u); + } + t.root.addEventListener("mouseup", o), t.root.addEventListener("dragstart", o), t.root.addEventListener("mousemove", l); +} +function L8(t, e, n) { + if (!(t.state.selection instanceof Ce)) return null; + const { $head: r } = t.state.selection; + for (let i = r.depth - 1; i >= 0; i--) { + const s = r.node(i); + if ((n < 0 ? r.index(i) : r.indexAfter(i)) != (n < 0 ? 0 : s.childCount)) return null; + if (s.type.spec.tableRole == "cell" || s.type.spec.tableRole == "header_cell") { + const o = r.before(i), l = e == "vert" ? n > 0 ? "down" : "up" : n > 0 ? "right" : "left"; + return t.endOfTextblock(l) ? o : null; + } + } + return null; +} +function O5(t, e) { + for (; e && e != t.dom; e = e.parentNode) if (e.nodeName == "TD" || e.nodeName == "TH") return e; + return null; +} +function Xd(t, e) { + const n = t.posAtCoords({ + left: e.clientX, + top: e.clientY + }); + if (!n) return null; + let { inside: r, pos: i } = n; + return r >= 0 && Dl(t.state.doc.resolve(r)) || Dl(t.state.doc.resolve(i)); +} +var zO = class { + constructor(t, e) { + this.node = t, this.defaultCellMinWidth = e, this.dom = document.createElement("div"), this.dom.className = "tableWrapper", this.table = this.dom.appendChild(document.createElement("table")), this.table.style.setProperty("--default-cell-min-width", `${e}px`), this.colgroup = this.table.appendChild(document.createElement("colgroup")), wp(t, this.colgroup, this.table, e), this.contentDOM = this.table.appendChild(document.createElement("tbody")); + } + update(t) { + return t.type != this.node.type ? !1 : (this.node = t, wp(t, this.colgroup, this.table, this.defaultCellMinWidth), !0); + } + ignoreMutation(t) { + return t.type == "attributes" && (t.target == this.table || this.colgroup.contains(t.target)); + } +}; +function wp(t, e, n, r, i, s) { + let o = 0, l = !0, a = e.firstChild; + const u = t.firstChild; + if (u) { + for (let h = 0, d = 0; h < u.childCount; h++) { + const { colspan: f, colwidth: m } = u.child(h).attrs; + for (let y = 0; y < f; y++, d++) { + const b = i == d ? s : m && m[y], w = b ? b + "px" : ""; + if (o += b || r, b || (l = !1), a) + a.style.width != w && (a.style.width = w), a = a.nextSibling; + else { + const C = document.createElement("col"); + C.style.width = w, e.appendChild(C); + } + } + } + for (; a; ) { + var c; + const h = a.nextSibling; + (c = a.parentNode) === null || c === void 0 || c.removeChild(a), a = h; + } + l ? (n.style.width = o + "px", n.style.minWidth = "") : (n.style.width = "", n.style.minWidth = o + "px"); + } +} +const Ln = new Nt("tableColumnResizing"); +function PO({ handleWidth: t = 5, cellMinWidth: e = 25, defaultCellMinWidth: n = 100, View: r = zO, lastColumnResizable: i = !0 } = {}) { + const s = new Dt({ + key: Ln, + state: { + init(o, l) { + var a; + const u = (a = s.spec) === null || a === void 0 || (a = a.props) === null || a === void 0 ? void 0 : a.nodeViews, c = tr(l.schema).table.name; + return r && u && (u[c] = (h, d) => new r(h, n, d)), new BO(-1, !1); + }, + apply(o, l) { + return l.apply(o); + } + }, + props: { + attributes: (o) => { + const l = Ln.getState(o); + return l && l.activeHandle > -1 ? { class: "resize-cursor" } : {}; + }, + handleDOMEvents: { + mousemove: (o, l) => { + LO(o, l, t, i); + }, + mouseleave: (o) => { + FO(o); + }, + mousedown: (o, l) => { + VO(o, l, e, n); + } + }, + decorations: (o) => { + const l = Ln.getState(o); + if (l && l.activeHandle > -1) return WO(o, l.activeHandle); + }, + nodeViews: {} + } + }); + return s; +} +var BO = class dc { + constructor(e, n) { + this.activeHandle = e, this.dragging = n; + } + apply(e) { + const n = this, r = e.getMeta(Ln); + if (r && r.setHandle != null) return new dc(r.setHandle, !1); + if (r && r.setDragging !== void 0) return new dc(n.activeHandle, r.setDragging); + if (n.activeHandle > -1 && e.docChanged) { + let i = e.mapping.map(n.activeHandle, -1); + return vp(e.doc.resolve(i)) || (i = -1), new dc(i, n.dragging); + } + return n; + } +}; +function LO(t, e, n, r) { + if (!t.editable) return; + const i = Ln.getState(t.state); + if (i && !i.dragging) { + const s = $O(e.target); + let o = -1; + if (s) { + const { left: l, right: a } = s.getBoundingClientRect(); + e.clientX - l <= n ? o = A5(t, e, "left", n) : a - e.clientX <= n && (o = A5(t, e, "right", n)); + } + if (o != i.activeHandle) { + if (!r && o !== -1) { + const l = t.state.doc.resolve(o), a = l.node(-1), u = Xe.get(a), c = l.start(-1); + if (u.colCount(l.pos - c) + l.nodeAfter.attrs.colspan - 1 == u.width - 1) return; + } + F8(t, o); + } + } +} +function FO(t) { + if (!t.editable) return; + const e = Ln.getState(t.state); + e && e.activeHandle > -1 && !e.dragging && F8(t, -1); +} +function VO(t, e, n, r) { + var i; + if (!t.editable) return !1; + const s = (i = t.dom.ownerDocument.defaultView) !== null && i !== void 0 ? i : window, o = Ln.getState(t.state); + if (!o || o.activeHandle == -1 || o.dragging) return !1; + const l = t.state.doc.nodeAt(o.activeHandle), a = HO(t, o.activeHandle, l.attrs); + t.dispatch(t.state.tr.setMeta(Ln, { setDragging: { + startX: e.clientX, + startWidth: a + } })); + function u(h) { + s.removeEventListener("mouseup", u), s.removeEventListener("mousemove", c); + const d = Ln.getState(t.state); + d != null && d.dragging && (qO(t, d.activeHandle, I5(d.dragging, h, n)), t.dispatch(t.state.tr.setMeta(Ln, { setDragging: null }))); + } + function c(h) { + if (!h.which) return u(h); + const d = Ln.getState(t.state); + if (d && d.dragging) { + const f = I5(d.dragging, h, n); + D5(t, d.activeHandle, f, r); + } + } + return D5(t, o.activeHandle, a, r), s.addEventListener("mouseup", u), s.addEventListener("mousemove", c), e.preventDefault(), !0; +} +function HO(t, e, { colspan: n, colwidth: r }) { + const i = r && r[r.length - 1]; + if (i) return i; + const s = t.domAtPos(e); + let o = s.node.childNodes[s.offset].offsetWidth, l = n; + if (r) + for (let a = 0; a < n; a++) r[a] && (o -= r[a], l--); + return o / l; +} +function $O(t) { + for (; t && t.nodeName != "TD" && t.nodeName != "TH"; ) t = t.classList && t.classList.contains("ProseMirror") ? null : t.parentNode; + return t; +} +function A5(t, e, n, r) { + const i = n == "right" ? -r : r, s = t.posAtCoords({ + left: e.clientX + i, + top: e.clientY + }); + if (!s) return -1; + const { pos: o } = s, l = Dl(t.state.doc.resolve(o)); + if (!l) return -1; + if (n == "right") return l.pos; + const a = Xe.get(l.node(-1)), u = l.start(-1), c = a.map.indexOf(l.pos - u); + return c % a.width == 0 ? -1 : u + a.map[c - 1]; +} +function I5(t, e, n) { + const r = e.clientX - t.startX; + return Math.max(n, t.startWidth + r); +} +function F8(t, e) { + t.dispatch(t.state.tr.setMeta(Ln, { setHandle: e })); +} +function qO(t, e, n) { + const r = t.state.doc.resolve(e), i = r.node(-1), s = Xe.get(i), o = r.start(-1), l = s.colCount(r.pos - o) + r.nodeAfter.attrs.colspan - 1, a = t.state.tr; + for (let u = 0; u < s.height; u++) { + const c = u * s.width + l; + if (u && s.map[c] == s.map[c - s.width]) continue; + const h = s.map[c], d = i.nodeAt(h).attrs, f = d.colspan == 1 ? 0 : l - s.colCount(h); + if (d.colwidth && d.colwidth[f] == n) continue; + const m = d.colwidth ? d.colwidth.slice() : jO(d.colspan); + m[f] = n, a.setNodeMarkup(o + h, null, { + ...d, + colwidth: m + }); + } + a.docChanged && t.dispatch(a); +} +function D5(t, e, n, r) { + const i = t.state.doc.resolve(e), s = i.node(-1), o = i.start(-1), l = Xe.get(s).colCount(i.pos - o) + i.nodeAfter.attrs.colspan - 1; + let a = t.domAtPos(i.start(-1)).node; + for (; a && a.nodeName != "TABLE"; ) a = a.parentNode; + a && wp(s, a.firstChild, a, r, l, n); +} +function jO(t) { + return Array(t).fill(0); +} +function WO(t, e) { + const n = [], r = t.doc.resolve(e), i = r.node(-1); + if (!i) return ct.empty; + const s = Xe.get(i), o = r.start(-1), l = s.colCount(r.pos - o) + r.nodeAfter.attrs.colspan - 1; + for (let u = 0; u < s.height; u++) { + const c = l + u * s.width; + if ((l == s.width - 1 || s.map[c] != s.map[c + 1]) && (u == 0 || s.map[c] != s.map[c - s.width])) { + var a; + const h = s.map[c], d = o + h + i.nodeAt(h).nodeSize - 1, f = document.createElement("div"); + f.className = "column-resize-handle", !((a = Ln.getState(t)) === null || a === void 0) && a.dragging && n.push(Gt.node(o + h, o + h + i.nodeAt(h).nodeSize, { class: "column-resize-dragging" })), n.push(Gt.widget(d, f)); + } + } + return ct.create(t.doc, n); +} +function UO({ allowTableNodeSelection: t = !1 } = {}) { + return new Dt({ + key: qi, + state: { + init() { + return null; + }, + apply(e, n) { + const r = e.getMeta(qi); + if (r != null) return r == -1 ? null : r; + if (n == null || !e.docChanged) return n; + const { deleted: i, pos: s } = e.mapping.mapResult(n); + return i ? null : s; + } + }, + props: { + decorations: rO, + handleDOMEvents: { mousedown: RO }, + createSelectionBetween(e) { + return qi.getState(e.state) != null ? e.state.selection : null; + }, + handleTripleClick: DO, + handleKeyDown: IO, + handlePaste: _O + }, + appendTransaction(e, n, r) { + return oO(r, aO(r, n), t); + } + }); +} +var Xc = typeof navigator < "u" ? navigator : null, Nm = Xc && Xc.userAgent || "", GO = /Edge\/(\d+)/.exec(Nm), KO = /MSIE \d/.exec(Nm), JO = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(Nm), YO = !!(KO || JO || GO), ZO = !YO && !!Xc && /Apple Computer/.test(Xc.vendor), V8 = new Nt("safari-ime-span"), kp = !1, XO = { + key: V8, + props: { + decorations: QO, + handleDOMEvents: { + compositionstart: () => { + kp = !0; + }, + compositionend: () => { + kp = !1; + } + } + } +}; +function QO(t) { + const { $from: e, $to: n, to: r } = t.selection; + if (kp && e.sameParent(n)) { + const i = Gt.widget(r, eA, { + ignoreSelection: !0, + key: "safari-ime-span" + }); + return ct.create(t.doc, [i]); + } +} +function eA(t) { + const e = t.dom.ownerDocument.createElement("span"); + return e.className = "ProseMirror-safari-ime-span", e; +} +var tA = new Dt(ZO ? XO : { key: V8 }); +function _5(t, e) { + const n = String(t); + if (typeof e != "string") + throw new TypeError("Expected character"); + let r = 0, i = n.indexOf(e); + for (; i !== -1; ) + r++, i = n.indexOf(e, i + e.length); + return r; +} +function nA(t) { + if (typeof t != "string") + throw new TypeError("Expected a string"); + return t.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d"); +} +function rA(t, e, n) { + const i = Ch((n || {}).ignore || []), s = iA(e); + let o = -1; + for (; ++o < s.length; ) + r1(t, "text", l); + function l(u, c) { + let h = -1, d; + for (; ++h < c.length; ) { + const f = c[h], m = d ? d.children : void 0; + if (i( + f, + m ? m.indexOf(f) : void 0, + d + )) + return; + d = f; + } + if (d) + return a(u, c); + } + function a(u, c) { + const h = c[c.length - 1], d = s[o][0], f = s[o][1]; + let m = 0; + const b = h.children.indexOf(u); + let w = !1, C = []; + d.lastIndex = 0; + let N = d.exec(u.value); + for (; N; ) { + const B = N.index, _ = { + index: N.index, + input: N.input, + stack: [...c, u] + }; + let A = f(...N, _); + if (typeof A == "string" && (A = A.length > 0 ? { type: "text", value: A } : void 0), A === !1 ? d.lastIndex = B + 1 : (m !== B && C.push({ + type: "text", + value: u.value.slice(m, B) + }), Array.isArray(A) ? C.push(...A) : A && C.push(A), m = B + N[0].length, w = !0), !d.global) + break; + N = d.exec(u.value); + } + return w ? (m < u.value.length && C.push({ type: "text", value: u.value.slice(m) }), h.children.splice(b, 1, ...C)) : C = [u], b + C.length; + } +} +function iA(t) { + const e = []; + if (!Array.isArray(t)) + throw new TypeError("Expected find and replace tuple or list of tuples"); + const n = !t[0] || Array.isArray(t[0]) ? t : [t]; + let r = -1; + for (; ++r < n.length; ) { + const i = n[r]; + e.push([sA(i[0]), oA(i[1])]); + } + return e; +} +function sA(t) { + return typeof t == "string" ? new RegExp(nA(t), "g") : t; +} +function oA(t) { + return typeof t == "function" ? t : function() { + return t; + }; +} +const Qd = "phrasing", ef = ["autolink", "link", "image", "label"]; +function lA() { + return { + transforms: [pA], + enter: { + literalAutolink: uA, + literalAutolinkEmail: tf, + literalAutolinkHttp: tf, + literalAutolinkWww: tf + }, + exit: { + literalAutolink: fA, + literalAutolinkEmail: dA, + literalAutolinkHttp: cA, + literalAutolinkWww: hA + } + }; +} +function aA() { + return { + unsafe: [ + { + character: "@", + before: "[+\\-.\\w]", + after: "[\\-.\\w]", + inConstruct: Qd, + notInConstruct: ef + }, + { + character: ".", + before: "[Ww]", + after: "[\\-.\\w]", + inConstruct: Qd, + notInConstruct: ef + }, + { + character: ":", + before: "[ps]", + after: "\\/", + inConstruct: Qd, + notInConstruct: ef + } + ] + }; +} +function uA(t) { + this.enter({ type: "link", title: null, url: "", children: [] }, t); +} +function tf(t) { + this.config.enter.autolinkProtocol.call(this, t); +} +function cA(t) { + this.config.exit.autolinkProtocol.call(this, t); +} +function hA(t) { + this.config.exit.data.call(this, t); + const e = this.stack[this.stack.length - 1]; + e.type, e.url = "http://" + this.sliceSerialize(t); +} +function dA(t) { + this.config.exit.autolinkEmail.call(this, t); +} +function fA(t) { + this.exit(t); +} +function pA(t) { + rA( + t, + [ + [/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/gi, mA], + [new RegExp("(?<=^|\\s|\\p{P}|\\p{S})([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)", "gu"), gA] + ], + { ignore: ["link", "linkReference"] } + ); +} +function mA(t, e, n, r, i) { + let s = ""; + if (!H8(i) || (/^w/i.test(e) && (n = e + n, e = "", s = "http://"), !yA(n))) + return !1; + const o = vA(n + r); + if (!o[0]) return !1; + const l = { + type: "link", + title: null, + url: s + e + o[0], + children: [{ type: "text", value: e + o[0] }] + }; + return o[1] ? [l, { type: "text", value: o[1] }] : l; +} +function gA(t, e, n, r) { + return ( + // Not an expected previous character. + !H8(r, !0) || // Label ends in not allowed character. + /[-\d_]$/.test(n) ? !1 : { + type: "link", + title: null, + url: "mailto:" + e + "@" + n, + children: [{ type: "text", value: e + "@" + n }] + } + ); +} +function yA(t) { + const e = t.split("."); + return !(e.length < 2 || e[e.length - 1] && (/_/.test(e[e.length - 1]) || !/[a-zA-Z\d]/.test(e[e.length - 1])) || e[e.length - 2] && (/_/.test(e[e.length - 2]) || !/[a-zA-Z\d]/.test(e[e.length - 2]))); +} +function vA(t) { + const e = /[!"&'),.:;<>?\]}]+$/.exec(t); + if (!e) + return [t, void 0]; + t = t.slice(0, e.index); + let n = e[0], r = n.indexOf(")"); + const i = _5(t, "("); + let s = _5(t, ")"); + for (; r !== -1 && i > s; ) + t += n.slice(0, r + 1), n = n.slice(r + 1), r = n.indexOf(")"), s++; + return [t, n]; +} +function H8(t, e) { + const n = t.input.charCodeAt(t.index - 1); + return (t.index === 0 || ho(n) || xh(n)) && // If it’s an email, the previous character should not be a slash. + (!e || n !== 47); +} +$8.peek = TA; +function bA() { + this.buffer(); +} +function wA(t) { + this.enter({ type: "footnoteReference", identifier: "", label: "" }, t); +} +function kA() { + this.buffer(); +} +function xA(t) { + this.enter( + { type: "footnoteDefinition", identifier: "", label: "", children: [] }, + t + ); +} +function SA(t) { + const e = this.resume(), n = this.stack[this.stack.length - 1]; + n.type, n.identifier = yr( + this.sliceSerialize(t) + ).toLowerCase(), n.label = e; +} +function CA(t) { + this.exit(t); +} +function NA(t) { + const e = this.resume(), n = this.stack[this.stack.length - 1]; + n.type, n.identifier = yr( + this.sliceSerialize(t) + ).toLowerCase(), n.label = e; +} +function MA(t) { + this.exit(t); +} +function TA() { + return "["; +} +function $8(t, e, n, r) { + const i = n.createTracker(r); + let s = i.move("[^"); + const o = n.enter("footnoteReference"), l = n.enter("reference"); + return s += i.move( + n.safe(n.associationId(t), { after: "]", before: s }) + ), l(), o(), s += i.move("]"), s; +} +function EA() { + return { + enter: { + gfmFootnoteCallString: bA, + gfmFootnoteCall: wA, + gfmFootnoteDefinitionLabelString: kA, + gfmFootnoteDefinition: xA + }, + exit: { + gfmFootnoteCallString: SA, + gfmFootnoteCall: CA, + gfmFootnoteDefinitionLabelString: NA, + gfmFootnoteDefinition: MA + } + }; +} +function OA(t) { + let e = !1; + return t && t.firstLineBlank && (e = !0), { + handlers: { footnoteDefinition: n, footnoteReference: $8 }, + // This is on by default already. + unsafe: [{ character: "[", inConstruct: ["label", "phrasing", "reference"] }] + }; + function n(r, i, s, o) { + const l = s.createTracker(o); + let a = l.move("[^"); + const u = s.enter("footnoteDefinition"), c = s.enter("label"); + return a += l.move( + s.safe(s.associationId(r), { before: a, after: "]" }) + ), c(), a += l.move("]:"), r.children && r.children.length > 0 && (l.shift(4), a += l.move( + (e ? ` +` : " ") + s.indentLines( + s.containerFlow(r, l.current()), + e ? q8 : AA + ) + )), u(), a; + } +} +function AA(t, e, n) { + return e === 0 ? t : q8(t, e, n); +} +function q8(t, e, n) { + return (n ? "" : " ") + t; +} +const IA = [ + "autolink", + "destinationLiteral", + "destinationRaw", + "reference", + "titleQuote", + "titleApostrophe" +]; +j8.peek = PA; +function DA() { + return { + canContainEols: ["delete"], + enter: { strikethrough: RA }, + exit: { strikethrough: zA } + }; +} +function _A() { + return { + unsafe: [ + { + character: "~", + inConstruct: "phrasing", + notInConstruct: IA + } + ], + handlers: { delete: j8 } + }; +} +function RA(t) { + this.enter({ type: "delete", children: [] }, t); +} +function zA(t) { + this.exit(t); +} +function j8(t, e, n, r) { + const i = n.createTracker(r), s = n.enter("strikethrough"); + let o = i.move("~~"); + return o += n.containerPhrasing(t, { + ...i.current(), + before: o, + after: "~" + }), o += i.move("~~"), s(), o; +} +function PA() { + return "~"; +} +function BA(t) { + return t.length; +} +function LA(t, e) { + const n = e || {}, r = (n.align || []).concat(), i = n.stringLength || BA, s = [], o = [], l = [], a = []; + let u = 0, c = -1; + for (; ++c < t.length; ) { + const y = [], b = []; + let w = -1; + for (t[c].length > u && (u = t[c].length); ++w < t[c].length; ) { + const C = FA(t[c][w]); + if (n.alignDelimiters !== !1) { + const N = i(C); + b[w] = N, (a[w] === void 0 || N > a[w]) && (a[w] = N); + } + y.push(C); + } + o[c] = y, l[c] = b; + } + let h = -1; + if (typeof r == "object" && "length" in r) + for (; ++h < u; ) + s[h] = R5(r[h]); + else { + const y = R5(r); + for (; ++h < u; ) + s[h] = y; + } + h = -1; + const d = [], f = []; + for (; ++h < u; ) { + const y = s[h]; + let b = "", w = ""; + y === 99 ? (b = ":", w = ":") : y === 108 ? b = ":" : y === 114 && (w = ":"); + let C = n.alignDelimiters === !1 ? 1 : Math.max( + 1, + a[h] - b.length - w.length + ); + const N = b + "-".repeat(C) + w; + n.alignDelimiters !== !1 && (C = b.length + C + w.length, C > a[h] && (a[h] = C), f[h] = C), d[h] = N; + } + o.splice(1, 0, d), l.splice(1, 0, f), c = -1; + const m = []; + for (; ++c < o.length; ) { + const y = o[c], b = l[c]; + h = -1; + const w = []; + for (; ++h < u; ) { + const C = y[h] || ""; + let N = "", B = ""; + if (n.alignDelimiters !== !1) { + const _ = a[h] - (b[h] || 0), A = s[h]; + A === 114 ? N = " ".repeat(_) : A === 99 ? _ % 2 ? (N = " ".repeat(_ / 2 + 0.5), B = " ".repeat(_ / 2 - 0.5)) : (N = " ".repeat(_ / 2), B = N) : B = " ".repeat(_); + } + n.delimiterStart !== !1 && !h && w.push("|"), n.padding !== !1 && // Don’t add the opening space if we’re not aligning and the cell is + // empty: there will be a closing space. + !(n.alignDelimiters === !1 && C === "") && (n.delimiterStart !== !1 || h) && w.push(" "), n.alignDelimiters !== !1 && w.push(N), w.push(C), n.alignDelimiters !== !1 && w.push(B), n.padding !== !1 && w.push(" "), (n.delimiterEnd !== !1 || h !== u - 1) && w.push("|"); + } + m.push( + n.delimiterEnd === !1 ? w.join("").replace(/ +$/, "") : w.join("") + ); + } + return m.join(` +`); +} +function FA(t) { + return t == null ? "" : String(t); +} +function R5(t) { + const e = typeof t == "string" ? t.codePointAt(0) : 0; + return e === 67 || e === 99 ? 99 : e === 76 || e === 108 ? 108 : e === 82 || e === 114 ? 114 : 0; +} +function VA() { + return { + enter: { + table: HA, + tableData: z5, + tableHeader: z5, + tableRow: qA + }, + exit: { + codeText: jA, + table: $A, + tableData: nf, + tableHeader: nf, + tableRow: nf + } + }; +} +function HA(t) { + const e = t._align; + this.enter( + { + type: "table", + align: e.map(function(n) { + return n === "none" ? null : n; + }), + children: [] + }, + t + ), this.data.inTable = !0; +} +function $A(t) { + this.exit(t), this.data.inTable = void 0; +} +function qA(t) { + this.enter({ type: "tableRow", children: [] }, t); +} +function nf(t) { + this.exit(t); +} +function z5(t) { + this.enter({ type: "tableCell", children: [] }, t); +} +function jA(t) { + let e = this.resume(); + this.data.inTable && (e = e.replace(/\\([\\|])/g, WA)); + const n = this.stack[this.stack.length - 1]; + n.type, n.value = e, this.exit(t); +} +function WA(t, e) { + return e === "|" ? e : t; +} +function UA(t) { + const e = t || {}, n = e.tableCellPadding, r = e.tablePipeAlign, i = e.stringLength, s = n ? " " : "|"; + return { + unsafe: [ + { character: "\r", inConstruct: "tableCell" }, + { character: ` +`, inConstruct: "tableCell" }, + // A pipe, when followed by a tab or space (padding), or a dash or colon + // (unpadded delimiter row), could result in a table. + { atBreak: !0, character: "|", after: "[ :-]" }, + // A pipe in a cell must be encoded. + { character: "|", inConstruct: "tableCell" }, + // A colon must be followed by a dash, in which case it could start a + // delimiter row. + { atBreak: !0, character: ":", after: "-" }, + // A delimiter row can also start with a dash, when followed by more + // dashes, a colon, or a pipe. + // This is a stricter version than the built in check for lists, thematic + // breaks, and setex heading underlines though: + // <https://github.com/syntax-tree/mdast-util-to-markdown/blob/51a2038/lib/unsafe.js#L57> + { atBreak: !0, character: "-", after: "[:|-]" } + ], + handlers: { + inlineCode: d, + table: o, + tableCell: a, + tableRow: l + } + }; + function o(f, m, y, b) { + return u(c(f, y, b), f.align); + } + function l(f, m, y, b) { + const w = h(f, y, b), C = u([w]); + return C.slice(0, C.indexOf(` +`)); + } + function a(f, m, y, b) { + const w = y.enter("tableCell"), C = y.enter("phrasing"), N = y.containerPhrasing(f, { + ...b, + before: s, + after: s + }); + return C(), w(), N; + } + function u(f, m) { + return LA(f, { + align: m, + // @ts-expect-error: `markdown-table` types should support `null`. + alignDelimiters: r, + // @ts-expect-error: `markdown-table` types should support `null`. + padding: n, + // @ts-expect-error: `markdown-table` types should support `null`. + stringLength: i + }); + } + function c(f, m, y) { + const b = f.children; + let w = -1; + const C = [], N = m.enter("table"); + for (; ++w < b.length; ) + C[w] = h(b[w], m, y); + return N(), C; + } + function h(f, m, y) { + const b = f.children; + let w = -1; + const C = [], N = m.enter("tableRow"); + for (; ++w < b.length; ) + C[w] = a(b[w], f, m, y); + return N(), C; + } + function d(f, m, y) { + let b = s1.inlineCode(f, m, y); + return y.stack.includes("tableCell") && (b = b.replace(/\|/g, "\\$&")), b; + } +} +function GA() { + return { + exit: { + taskListCheckValueChecked: P5, + taskListCheckValueUnchecked: P5, + paragraph: JA + } + }; +} +function KA() { + return { + unsafe: [{ atBreak: !0, character: "-", after: "[:|-]" }], + handlers: { listItem: YA } + }; +} +function P5(t) { + const e = this.stack[this.stack.length - 2]; + e.type, e.checked = t.type === "taskListCheckValueChecked"; +} +function JA(t) { + const e = this.stack[this.stack.length - 2]; + if (e && e.type === "listItem" && typeof e.checked == "boolean") { + const n = this.stack[this.stack.length - 1]; + n.type; + const r = n.children[0]; + if (r && r.type === "text") { + const i = e.children; + let s = -1, o; + for (; ++s < i.length; ) { + const l = i[s]; + if (l.type === "paragraph") { + o = l; + break; + } + } + o === n && (r.value = r.value.slice(1), r.value.length === 0 ? n.children.shift() : n.position && r.position && typeof r.position.start.offset == "number" && (r.position.start.column++, r.position.start.offset++, n.position.start = Object.assign({}, r.position.start))); + } + } + this.exit(t); +} +function YA(t, e, n, r) { + const i = t.children[0], s = typeof t.checked == "boolean" && i && i.type === "paragraph", o = "[" + (t.checked ? "x" : " ") + "] ", l = n.createTracker(r); + s && l.move(o); + let a = s1.listItem(t, e, n, { + ...r, + ...l.current() + }); + return s && (a = a.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/, u)), a; + function u(c) { + return c + o; + } +} +function ZA() { + return [ + lA(), + EA(), + DA(), + VA(), + GA() + ]; +} +function XA(t) { + return { + extensions: [ + aA(), + OA(t), + _A(), + UA(t), + KA() + ] + }; +} +const QA = { + tokenize: sI, + partial: !0 +}, W8 = { + tokenize: oI, + partial: !0 +}, U8 = { + tokenize: lI, + partial: !0 +}, G8 = { + tokenize: aI, + partial: !0 +}, eI = { + tokenize: uI, + partial: !0 +}, K8 = { + name: "wwwAutolink", + tokenize: rI, + previous: Y8 +}, J8 = { + name: "protocolAutolink", + tokenize: iI, + previous: Z8 +}, Ti = { + name: "emailAutolink", + tokenize: nI, + previous: X8 +}, Ur = {}; +function tI() { + return { + text: Ur + }; +} +let Cs = 48; +for (; Cs < 123; ) + Ur[Cs] = Ti, Cs++, Cs === 58 ? Cs = 65 : Cs === 91 && (Cs = 97); +Ur[43] = Ti; +Ur[45] = Ti; +Ur[46] = Ti; +Ur[95] = Ti; +Ur[72] = [Ti, J8]; +Ur[104] = [Ti, J8]; +Ur[87] = [Ti, K8]; +Ur[119] = [Ti, K8]; +function nI(t, e, n) { + const r = this; + let i, s; + return o; + function o(h) { + return !xp(h) || !X8.call(r, r.previous) || Mm(r.events) ? n(h) : (t.enter("literalAutolink"), t.enter("literalAutolinkEmail"), l(h)); + } + function l(h) { + return xp(h) ? (t.consume(h), l) : h === 64 ? (t.consume(h), a) : n(h); + } + function a(h) { + return h === 46 ? t.check(eI, c, u)(h) : h === 45 || h === 95 || xn(h) ? (s = !0, t.consume(h), a) : c(h); + } + function u(h) { + return t.consume(h), i = !0, a; + } + function c(h) { + return s && i && sn(r.previous) ? (t.exit("literalAutolinkEmail"), t.exit("literalAutolink"), e(h)) : n(h); + } +} +function rI(t, e, n) { + const r = this; + return i; + function i(o) { + return o !== 87 && o !== 119 || !Y8.call(r, r.previous) || Mm(r.events) ? n(o) : (t.enter("literalAutolink"), t.enter("literalAutolinkWww"), t.check(QA, t.attempt(W8, t.attempt(U8, s), n), n)(o)); + } + function s(o) { + return t.exit("literalAutolinkWww"), t.exit("literalAutolink"), e(o); + } +} +function iI(t, e, n) { + const r = this; + let i = "", s = !1; + return o; + function o(h) { + return (h === 72 || h === 104) && Z8.call(r, r.previous) && !Mm(r.events) ? (t.enter("literalAutolink"), t.enter("literalAutolinkHttp"), i += String.fromCodePoint(h), t.consume(h), l) : n(h); + } + function l(h) { + if (sn(h) && i.length < 5) + return i += String.fromCodePoint(h), t.consume(h), l; + if (h === 58) { + const d = i.toLowerCase(); + if (d === "http" || d === "https") + return t.consume(h), a; + } + return n(h); + } + function a(h) { + return h === 47 ? (t.consume(h), s ? u : (s = !0, a)) : n(h); + } + function u(h) { + return h === null || Bc(h) || rt(h) || ho(h) || xh(h) ? n(h) : t.attempt(W8, t.attempt(U8, c), n)(h); + } + function c(h) { + return t.exit("literalAutolinkHttp"), t.exit("literalAutolink"), e(h); + } +} +function sI(t, e, n) { + let r = 0; + return i; + function i(o) { + return (o === 87 || o === 119) && r < 3 ? (r++, t.consume(o), i) : o === 46 && r === 3 ? (t.consume(o), s) : n(o); + } + function s(o) { + return o === null ? n(o) : e(o); + } +} +function oI(t, e, n) { + let r, i, s; + return o; + function o(u) { + return u === 46 || u === 95 ? t.check(G8, a, l)(u) : u === null || rt(u) || ho(u) || u !== 45 && xh(u) ? a(u) : (s = !0, t.consume(u), o); + } + function l(u) { + return u === 95 ? r = !0 : (i = r, r = void 0), t.consume(u), o; + } + function a(u) { + return i || r || !s ? n(u) : e(u); + } +} +function lI(t, e) { + let n = 0, r = 0; + return i; + function i(o) { + return o === 40 ? (n++, t.consume(o), i) : o === 41 && r < n ? s(o) : o === 33 || o === 34 || o === 38 || o === 39 || o === 41 || o === 42 || o === 44 || o === 46 || o === 58 || o === 59 || o === 60 || o === 63 || o === 93 || o === 95 || o === 126 ? t.check(G8, e, s)(o) : o === null || rt(o) || ho(o) ? e(o) : (t.consume(o), i); + } + function s(o) { + return o === 41 && r++, t.consume(o), i; + } +} +function aI(t, e, n) { + return r; + function r(l) { + return l === 33 || l === 34 || l === 39 || l === 41 || l === 42 || l === 44 || l === 46 || l === 58 || l === 59 || l === 63 || l === 95 || l === 126 ? (t.consume(l), r) : l === 38 ? (t.consume(l), s) : l === 93 ? (t.consume(l), i) : ( + // `<` is an end. + l === 60 || // So is whitespace. + l === null || rt(l) || ho(l) ? e(l) : n(l) + ); + } + function i(l) { + return l === null || l === 40 || l === 91 || rt(l) || ho(l) ? e(l) : r(l); + } + function s(l) { + return sn(l) ? o(l) : n(l); + } + function o(l) { + return l === 59 ? (t.consume(l), r) : sn(l) ? (t.consume(l), o) : n(l); + } +} +function uI(t, e, n) { + return r; + function r(s) { + return t.consume(s), i; + } + function i(s) { + return xn(s) ? n(s) : e(s); + } +} +function Y8(t) { + return t === null || t === 40 || t === 42 || t === 95 || t === 91 || t === 93 || t === 126 || rt(t); +} +function Z8(t) { + return !sn(t); +} +function X8(t) { + return !(t === 47 || xp(t)); +} +function xp(t) { + return t === 43 || t === 45 || t === 46 || t === 95 || xn(t); +} +function Mm(t) { + let e = t.length, n = !1; + for (; e--; ) { + const r = t[e][1]; + if ((r.type === "labelLink" || r.type === "labelImage") && !r._balanced) { + n = !0; + break; + } + if (r._gfmAutolinkLiteralWalkedInto) { + n = !1; + break; + } + } + return t.length > 0 && !n && (t[t.length - 1][1]._gfmAutolinkLiteralWalkedInto = !0), n; +} +const cI = { + tokenize: vI, + partial: !0 +}; +function hI() { + return { + document: { + 91: { + name: "gfmFootnoteDefinition", + tokenize: mI, + continuation: { + tokenize: gI + }, + exit: yI + } + }, + text: { + 91: { + name: "gfmFootnoteCall", + tokenize: pI + }, + 93: { + name: "gfmPotentialFootnoteCall", + add: "after", + tokenize: dI, + resolveTo: fI + } + } + }; +} +function dI(t, e, n) { + const r = this; + let i = r.events.length; + const s = r.parser.gfmFootnotes || (r.parser.gfmFootnotes = []); + let o; + for (; i--; ) { + const a = r.events[i][1]; + if (a.type === "labelImage") { + o = a; + break; + } + if (a.type === "gfmFootnoteCall" || a.type === "labelLink" || a.type === "label" || a.type === "image" || a.type === "link") + break; + } + return l; + function l(a) { + if (!o || !o._balanced) + return n(a); + const u = yr(r.sliceSerialize({ + start: o.end, + end: r.now() + })); + return u.codePointAt(0) !== 94 || !s.includes(u.slice(1)) ? n(a) : (t.enter("gfmFootnoteCallLabelMarker"), t.consume(a), t.exit("gfmFootnoteCallLabelMarker"), e(a)); + } +} +function fI(t, e) { + let n = t.length; + for (; n--; ) + if (t[n][1].type === "labelImage" && t[n][0] === "enter") { + t[n][1]; + break; + } + t[n + 1][1].type = "data", t[n + 3][1].type = "gfmFootnoteCallLabelMarker"; + const r = { + type: "gfmFootnoteCall", + start: Object.assign({}, t[n + 3][1].start), + end: Object.assign({}, t[t.length - 1][1].end) + }, i = { + type: "gfmFootnoteCallMarker", + start: Object.assign({}, t[n + 3][1].end), + end: Object.assign({}, t[n + 3][1].end) + }; + i.end.column++, i.end.offset++, i.end._bufferIndex++; + const s = { + type: "gfmFootnoteCallString", + start: Object.assign({}, i.end), + end: Object.assign({}, t[t.length - 1][1].start) + }, o = { + type: "chunkString", + contentType: "string", + start: Object.assign({}, s.start), + end: Object.assign({}, s.end) + }, l = [ + // Take the `labelImageMarker` (now `data`, the `!`) + t[n + 1], + t[n + 2], + ["enter", r, e], + // The `[` + t[n + 3], + t[n + 4], + // The `^`. + ["enter", i, e], + ["exit", i, e], + // Everything in between. + ["enter", s, e], + ["enter", o, e], + ["exit", o, e], + ["exit", s, e], + // The ending (`]`, properly parsed and labelled). + t[t.length - 2], + t[t.length - 1], + ["exit", r, e] + ]; + return t.splice(n, t.length - n + 1, ...l), t; +} +function pI(t, e, n) { + const r = this, i = r.parser.gfmFootnotes || (r.parser.gfmFootnotes = []); + let s = 0, o; + return l; + function l(h) { + return t.enter("gfmFootnoteCall"), t.enter("gfmFootnoteCallLabelMarker"), t.consume(h), t.exit("gfmFootnoteCallLabelMarker"), a; + } + function a(h) { + return h !== 94 ? n(h) : (t.enter("gfmFootnoteCallMarker"), t.consume(h), t.exit("gfmFootnoteCallMarker"), t.enter("gfmFootnoteCallString"), t.enter("chunkString").contentType = "string", u); + } + function u(h) { + if ( + // Too long. + s > 999 || // Closing brace with nothing. + h === 93 && !o || // Space or tab is not supported by GFM for some reason. + // `\n` and `[` not being supported makes sense. + h === null || h === 91 || rt(h) + ) + return n(h); + if (h === 93) { + t.exit("chunkString"); + const d = t.exit("gfmFootnoteCallString"); + return i.includes(yr(r.sliceSerialize(d))) ? (t.enter("gfmFootnoteCallLabelMarker"), t.consume(h), t.exit("gfmFootnoteCallLabelMarker"), t.exit("gfmFootnoteCall"), e) : n(h); + } + return rt(h) || (o = !0), s++, t.consume(h), h === 92 ? c : u; + } + function c(h) { + return h === 91 || h === 92 || h === 93 ? (t.consume(h), s++, u) : u(h); + } +} +function mI(t, e, n) { + const r = this, i = r.parser.gfmFootnotes || (r.parser.gfmFootnotes = []); + let s, o = 0, l; + return a; + function a(m) { + return t.enter("gfmFootnoteDefinition")._container = !0, t.enter("gfmFootnoteDefinitionLabel"), t.enter("gfmFootnoteDefinitionLabelMarker"), t.consume(m), t.exit("gfmFootnoteDefinitionLabelMarker"), u; + } + function u(m) { + return m === 94 ? (t.enter("gfmFootnoteDefinitionMarker"), t.consume(m), t.exit("gfmFootnoteDefinitionMarker"), t.enter("gfmFootnoteDefinitionLabelString"), t.enter("chunkString").contentType = "string", c) : n(m); + } + function c(m) { + if ( + // Too long. + o > 999 || // Closing brace with nothing. + m === 93 && !l || // Space or tab is not supported by GFM for some reason. + // `\n` and `[` not being supported makes sense. + m === null || m === 91 || rt(m) + ) + return n(m); + if (m === 93) { + t.exit("chunkString"); + const y = t.exit("gfmFootnoteDefinitionLabelString"); + return s = yr(r.sliceSerialize(y)), t.enter("gfmFootnoteDefinitionLabelMarker"), t.consume(m), t.exit("gfmFootnoteDefinitionLabelMarker"), t.exit("gfmFootnoteDefinitionLabel"), d; + } + return rt(m) || (l = !0), o++, t.consume(m), m === 92 ? h : c; + } + function h(m) { + return m === 91 || m === 92 || m === 93 ? (t.consume(m), o++, c) : c(m); + } + function d(m) { + return m === 58 ? (t.enter("definitionMarker"), t.consume(m), t.exit("definitionMarker"), i.includes(s) || i.push(s), je(t, f, "gfmFootnoteDefinitionWhitespace")) : n(m); + } + function f(m) { + return e(m); + } +} +function gI(t, e, n) { + return t.check(J0, e, t.attempt(cI, e, n)); +} +function yI(t) { + t.exit("gfmFootnoteDefinition"); +} +function vI(t, e, n) { + const r = this; + return je(t, i, "gfmFootnoteDefinitionIndent", 5); + function i(s) { + const o = r.events[r.events.length - 1]; + return o && o[1].type === "gfmFootnoteDefinitionIndent" && o[2].sliceSerialize(o[1], !0).length === 4 ? e(s) : n(s); + } +} +function bI(t) { + let n = (t || {}).singleTilde; + const r = { + name: "strikethrough", + tokenize: s, + resolveAll: i + }; + return n == null && (n = !0), { + text: { + 126: r + }, + insideSpan: { + null: [r] + }, + attentionMarkers: { + null: [126] + } + }; + function i(o, l) { + let a = -1; + for (; ++a < o.length; ) + if (o[a][0] === "enter" && o[a][1].type === "strikethroughSequenceTemporary" && o[a][1]._close) { + let u = a; + for (; u--; ) + if (o[u][0] === "exit" && o[u][1].type === "strikethroughSequenceTemporary" && o[u][1]._open && // If the sizes are the same: + o[a][1].end.offset - o[a][1].start.offset === o[u][1].end.offset - o[u][1].start.offset) { + o[a][1].type = "strikethroughSequence", o[u][1].type = "strikethroughSequence"; + const c = { + type: "strikethrough", + start: Object.assign({}, o[u][1].start), + end: Object.assign({}, o[a][1].end) + }, h = { + type: "strikethroughText", + start: Object.assign({}, o[u][1].end), + end: Object.assign({}, o[a][1].start) + }, d = [["enter", c, l], ["enter", o[u][1], l], ["exit", o[u][1], l], ["enter", h, l]], f = l.parser.constructs.insideSpan.null; + f && Hn(d, d.length, 0, Sh(f, o.slice(u + 1, a), l)), Hn(d, d.length, 0, [["exit", h, l], ["enter", o[a][1], l], ["exit", o[a][1], l], ["exit", c, l]]), Hn(o, u - 1, a - u + 3, d), a = u + d.length - 2; + break; + } + } + for (a = -1; ++a < o.length; ) + o[a][1].type === "strikethroughSequenceTemporary" && (o[a][1].type = "data"); + return o; + } + function s(o, l, a) { + const u = this.previous, c = this.events; + let h = 0; + return d; + function d(m) { + return u === 126 && c[c.length - 1][1].type !== "characterEscape" ? a(m) : (o.enter("strikethroughSequenceTemporary"), f(m)); + } + function f(m) { + const y = Tl(u); + if (m === 126) + return h > 1 ? a(m) : (o.consume(m), h++, f); + if (h < 2 && !n) return a(m); + const b = o.exit("strikethroughSequenceTemporary"), w = Tl(m); + return b._open = !w || w === 2 && !!y, b._close = !y || y === 2 && !!w, l(m); + } + } +} +class wI { + /** + * Create a new edit map. + */ + constructor() { + this.map = []; + } + /** + * Create an edit: a remove and/or add at a certain place. + * + * @param {number} index + * @param {number} remove + * @param {Array<Event>} add + * @returns {undefined} + */ + add(e, n, r) { + kI(this, e, n, r); + } + // To do: add this when moving to `micromark`. + // /** + // * Create an edit: but insert `add` before existing additions. + // * + // * @param {number} index + // * @param {number} remove + // * @param {Array<Event>} add + // * @returns {undefined} + // */ + // addBefore(index, remove, add) { + // addImplementation(this, index, remove, add, true) + // } + /** + * Done, change the events. + * + * @param {Array<Event>} events + * @returns {undefined} + */ + consume(e) { + if (this.map.sort(function(s, o) { + return s[0] - o[0]; + }), this.map.length === 0) + return; + let n = this.map.length; + const r = []; + for (; n > 0; ) + n -= 1, r.push(e.slice(this.map[n][0] + this.map[n][1]), this.map[n][2]), e.length = this.map[n][0]; + r.push(e.slice()), e.length = 0; + let i = r.pop(); + for (; i; ) { + for (const s of i) + e.push(s); + i = r.pop(); + } + this.map.length = 0; + } +} +function kI(t, e, n, r) { + let i = 0; + if (!(n === 0 && r.length === 0)) { + for (; i < t.map.length; ) { + if (t.map[i][0] === e) { + t.map[i][1] += n, t.map[i][2].push(...r); + return; + } + i += 1; + } + t.map.push([e, n, r]); + } +} +function xI(t, e) { + let n = !1; + const r = []; + for (; e < t.length; ) { + const i = t[e]; + if (n) { + if (i[0] === "enter") + i[1].type === "tableContent" && r.push(t[e + 1][1].type === "tableDelimiterMarker" ? "left" : "none"); + else if (i[1].type === "tableContent") { + if (t[e - 1][1].type === "tableDelimiterMarker") { + const s = r.length - 1; + r[s] = r[s] === "left" ? "center" : "right"; + } + } else if (i[1].type === "tableDelimiterRow") + break; + } else i[0] === "enter" && i[1].type === "tableDelimiterRow" && (n = !0); + e += 1; + } + return r; +} +function SI() { + return { + flow: { + null: { + name: "table", + tokenize: CI, + resolveAll: NI + } + } + }; +} +function CI(t, e, n) { + const r = this; + let i = 0, s = 0, o; + return l; + function l(P) { + let ie = r.events.length - 1; + for (; ie > -1; ) { + const De = r.events[ie][1].type; + if (De === "lineEnding" || // Note: markdown-rs uses `whitespace` instead of `linePrefix` + De === "linePrefix") ie--; + else break; + } + const ne = ie > -1 ? r.events[ie][1].type : null, _e = ne === "tableHead" || ne === "tableRow" ? A : a; + return _e === A && r.parser.lazy[r.now().line] ? n(P) : _e(P); + } + function a(P) { + return t.enter("tableHead"), t.enter("tableRow"), u(P); + } + function u(P) { + return P === 124 || (o = !0, s += 1), c(P); + } + function c(P) { + return P === null ? n(P) : xe(P) ? s > 1 ? (s = 0, r.interrupt = !0, t.exit("tableRow"), t.enter("lineEnding"), t.consume(P), t.exit("lineEnding"), f) : n(P) : He(P) ? je(t, c, "whitespace")(P) : (s += 1, o && (o = !1, i += 1), P === 124 ? (t.enter("tableCellDivider"), t.consume(P), t.exit("tableCellDivider"), o = !0, c) : (t.enter("data"), h(P))); + } + function h(P) { + return P === null || P === 124 || rt(P) ? (t.exit("data"), c(P)) : (t.consume(P), P === 92 ? d : h); + } + function d(P) { + return P === 92 || P === 124 ? (t.consume(P), h) : h(P); + } + function f(P) { + return r.interrupt = !1, r.parser.lazy[r.now().line] ? n(P) : (t.enter("tableDelimiterRow"), o = !1, He(P) ? je(t, m, "linePrefix", r.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4)(P) : m(P)); + } + function m(P) { + return P === 45 || P === 58 ? b(P) : P === 124 ? (o = !0, t.enter("tableCellDivider"), t.consume(P), t.exit("tableCellDivider"), y) : _(P); + } + function y(P) { + return He(P) ? je(t, b, "whitespace")(P) : b(P); + } + function b(P) { + return P === 58 ? (s += 1, o = !0, t.enter("tableDelimiterMarker"), t.consume(P), t.exit("tableDelimiterMarker"), w) : P === 45 ? (s += 1, w(P)) : P === null || xe(P) ? B(P) : _(P); + } + function w(P) { + return P === 45 ? (t.enter("tableDelimiterFiller"), C(P)) : _(P); + } + function C(P) { + return P === 45 ? (t.consume(P), C) : P === 58 ? (o = !0, t.exit("tableDelimiterFiller"), t.enter("tableDelimiterMarker"), t.consume(P), t.exit("tableDelimiterMarker"), N) : (t.exit("tableDelimiterFiller"), N(P)); + } + function N(P) { + return He(P) ? je(t, B, "whitespace")(P) : B(P); + } + function B(P) { + return P === 124 ? m(P) : P === null || xe(P) ? !o || i !== s ? _(P) : (t.exit("tableDelimiterRow"), t.exit("tableHead"), e(P)) : _(P); + } + function _(P) { + return n(P); + } + function A(P) { + return t.enter("tableRow"), L(P); + } + function L(P) { + return P === 124 ? (t.enter("tableCellDivider"), t.consume(P), t.exit("tableCellDivider"), L) : P === null || xe(P) ? (t.exit("tableRow"), e(P)) : He(P) ? je(t, L, "whitespace")(P) : (t.enter("data"), K(P)); + } + function K(P) { + return P === null || P === 124 || rt(P) ? (t.exit("data"), L(P)) : (t.consume(P), P === 92 ? J : K); + } + function J(P) { + return P === 92 || P === 124 ? (t.consume(P), K) : K(P); + } +} +function NI(t, e) { + let n = -1, r = !0, i = 0, s = [0, 0, 0, 0], o = [0, 0, 0, 0], l = !1, a = 0, u, c, h; + const d = new wI(); + for (; ++n < t.length; ) { + const f = t[n], m = f[1]; + f[0] === "enter" ? m.type === "tableHead" ? (l = !1, a !== 0 && (B5(d, e, a, u, c), c = void 0, a = 0), u = { + type: "table", + start: Object.assign({}, m.start), + // Note: correct end is set later. + end: Object.assign({}, m.end) + }, d.add(n, 0, [["enter", u, e]])) : m.type === "tableRow" || m.type === "tableDelimiterRow" ? (r = !0, h = void 0, s = [0, 0, 0, 0], o = [0, n + 1, 0, 0], l && (l = !1, c = { + type: "tableBody", + start: Object.assign({}, m.start), + // Note: correct end is set later. + end: Object.assign({}, m.end) + }, d.add(n, 0, [["enter", c, e]])), i = m.type === "tableDelimiterRow" ? 2 : c ? 3 : 1) : i && (m.type === "data" || m.type === "tableDelimiterMarker" || m.type === "tableDelimiterFiller") ? (r = !1, o[2] === 0 && (s[1] !== 0 && (o[0] = o[1], h = Tu(d, e, s, i, void 0, h), s = [0, 0, 0, 0]), o[2] = n)) : m.type === "tableCellDivider" && (r ? r = !1 : (s[1] !== 0 && (o[0] = o[1], h = Tu(d, e, s, i, void 0, h)), s = o, o = [s[1], n, 0, 0])) : m.type === "tableHead" ? (l = !0, a = n) : m.type === "tableRow" || m.type === "tableDelimiterRow" ? (a = n, s[1] !== 0 ? (o[0] = o[1], h = Tu(d, e, s, i, n, h)) : o[1] !== 0 && (h = Tu(d, e, o, i, n, h)), i = 0) : i && (m.type === "data" || m.type === "tableDelimiterMarker" || m.type === "tableDelimiterFiller") && (o[3] = n); + } + for (a !== 0 && B5(d, e, a, u, c), d.consume(e.events), n = -1; ++n < e.events.length; ) { + const f = e.events[n]; + f[0] === "enter" && f[1].type === "table" && (f[1]._align = xI(e.events, n)); + } + return t; +} +function Tu(t, e, n, r, i, s) { + const o = r === 1 ? "tableHeader" : r === 2 ? "tableDelimiter" : "tableData", l = "tableContent"; + n[0] !== 0 && (s.end = Object.assign({}, Vo(e.events, n[0])), t.add(n[0], 0, [["exit", s, e]])); + const a = Vo(e.events, n[1]); + if (s = { + type: o, + start: Object.assign({}, a), + // Note: correct end is set later. + end: Object.assign({}, a) + }, t.add(n[1], 0, [["enter", s, e]]), n[2] !== 0) { + const u = Vo(e.events, n[2]), c = Vo(e.events, n[3]), h = { + type: l, + start: Object.assign({}, u), + end: Object.assign({}, c) + }; + if (t.add(n[2], 0, [["enter", h, e]]), r !== 2) { + const d = e.events[n[2]], f = e.events[n[3]]; + if (d[1].end = Object.assign({}, f[1].end), d[1].type = "chunkText", d[1].contentType = "text", n[3] > n[2] + 1) { + const m = n[2] + 1, y = n[3] - n[2] - 1; + t.add(m, y, []); + } + } + t.add(n[3] + 1, 0, [["exit", h, e]]); + } + return i !== void 0 && (s.end = Object.assign({}, Vo(e.events, i)), t.add(i, 0, [["exit", s, e]]), s = void 0), s; +} +function B5(t, e, n, r, i) { + const s = [], o = Vo(e.events, n); + i && (i.end = Object.assign({}, o), s.push(["exit", i, e])), r.end = Object.assign({}, o), s.push(["exit", r, e]), t.add(n + 1, 0, s); +} +function Vo(t, e) { + const n = t[e], r = n[0] === "enter" ? "start" : "end"; + return n[1][r]; +} +const MI = { + name: "tasklistCheck", + tokenize: EI +}; +function TI() { + return { + text: { + 91: MI + } + }; +} +function EI(t, e, n) { + const r = this; + return i; + function i(a) { + return ( + // Exit if there’s stuff before. + r.previous !== null || // Exit if not in the first content that is the first child of a list + // item. + !r._gfmTasklistFirstContentOfListItem ? n(a) : (t.enter("taskListCheck"), t.enter("taskListCheckMarker"), t.consume(a), t.exit("taskListCheckMarker"), s) + ); + } + function s(a) { + return rt(a) ? (t.enter("taskListCheckValueUnchecked"), t.consume(a), t.exit("taskListCheckValueUnchecked"), o) : a === 88 || a === 120 ? (t.enter("taskListCheckValueChecked"), t.consume(a), t.exit("taskListCheckValueChecked"), o) : n(a); + } + function o(a) { + return a === 93 ? (t.enter("taskListCheckMarker"), t.consume(a), t.exit("taskListCheckMarker"), t.exit("taskListCheck"), l) : n(a); + } + function l(a) { + return xe(a) ? e(a) : He(a) ? t.check({ + tokenize: OI + }, e, n)(a) : n(a); + } +} +function OI(t, e, n) { + return je(t, r, "whitespace"); + function r(i) { + return i === null ? n(i) : e(i); + } +} +function AI(t) { + return F7([ + tI(), + hI(), + bI(t), + SI(), + TI() + ]); +} +const II = {}; +function DI(t) { + const e = ( + /** @type {Processor<Root>} */ + this + ), n = t || II, r = e.data(), i = r.micromarkExtensions || (r.micromarkExtensions = []), s = r.fromMarkdownExtensions || (r.fromMarkdownExtensions = []), o = r.toMarkdownExtensions || (r.toMarkdownExtensions = []); + i.push(AI(n)), s.push(ZA()), o.push(XA(n)); +} +function Me(t, e) { + return Object.assign(t, { + meta: { + package: "@milkdown/preset-gfm", + ...e + } + }), t; +} +const Tm = tu("strike_through"); +Me(Tm, { + displayName: "Attr<strikethrough>", + group: "Strikethrough" +}); +const $l = Pl("strike_through", (t) => ({ + parseDOM: [ + { tag: "del" }, + { + style: "text-decoration", + getAttrs: (e) => e === "line-through" + } + ], + toDOM: (e) => ["del", t.get(Tm.key)(e)], + parseMarkdown: { + match: (e) => e.type === "delete", + runner: (e, n, r) => { + e.openMark(r), e.next(n.children), e.closeMark(r); + } + }, + toMarkdown: { + match: (e) => e.type.name === "strike_through", + runner: (e, n) => { + e.withMark(n, "delete"); + } + } +})); +Me($l.mark, { + displayName: "MarkSchema<strikethrough>", + group: "Strikethrough" +}); +Me($l.ctx, { + displayName: "MarkSchemaCtx<strikethrough>", + group: "Strikethrough" +}); +const $h = Ee( + "ToggleStrikeThrough", + (t) => () => Ah($l.type(t)) +); +Me($h, { + displayName: "Command<ToggleStrikethrough>", + group: "Strikethrough" +}); +const Q8 = En((t) => Z0( + new RegExp("(?<![\\w:/])(~{1,2})(.+?)\\1(?!\\w|\\/)"), + $l.type(t) +)); +Me(Q8, { + displayName: "InputRule<strikethrough>", + group: "Strikethrough" +}); +const Em = On("strikeThroughKeymap", { + ToggleStrikethrough: { + shortcuts: "Mod-Alt-x", + command: (t) => { + const e = t.get(me); + return () => e.call($h.key); + } + } +}); +Me(Em.ctx, { + displayName: "KeymapCtx<strikethrough>", + group: "Strikethrough" +}); +Me(Em.shortcuts, { + displayName: "Keymap<strikethrough>", + group: "Strikethrough" +}); +const ru = ZE({ + tableGroup: "block", + cellContent: "paragraph", + cellAttributes: { + alignment: { + default: "left", + getFromDOM: (t) => t.style.textAlign || "left", + setDOMAttr: (t, e) => { + e.style = `text-align: ${t || "left"}`; + } + } + } +}), Co = Mt("table", () => ({ + ...ru.table, + content: "table_header_row table_row+", + disableDropCursor: !0, + parseMarkdown: { + match: (t) => t.type === "table", + runner: (t, e, n) => { + const r = e.align, i = e.children.map((s, o) => ({ + ...s, + align: r, + isHeader: o === 0 + })); + t.openNode(n), t.next(i), t.closeNode(); + } + }, + toMarkdown: { + match: (t) => t.type.name === "table", + runner: (t, e) => { + var i; + const n = (i = e.content.firstChild) == null ? void 0 : i.content; + if (!n) return; + const r = []; + n.forEach((s) => { + r.push(s.attrs.alignment); + }), t.openNode("table", void 0, { align: r }), t.next(e.content), t.closeNode(); + } + } +})); +Me(Co.node, { + displayName: "NodeSchema<table>", + group: "Table" +}); +Me(Co.ctx, { + displayName: "NodeSchemaCtx<table>", + group: "Table" +}); +const qh = Mt("table_header_row", () => ({ + ...ru.table_row, + disableDropCursor: !0, + content: "(table_header)*", + parseDOM: [ + { tag: "tr[data-is-header]" }, + { + tag: "tr", + getAttrs: (t) => t instanceof HTMLElement && t.querySelector("th") ? {} : !1 + } + ], + toDOM() { + return ["tr", { "data-is-header": !0 }, 0]; + }, + parseMarkdown: { + match: (t) => !!(t.type === "tableRow" && t.isHeader), + runner: (t, e, n) => { + const r = e.align, i = e.children.map((s, o) => ({ + ...s, + align: r[o], + isHeader: e.isHeader + })); + t.openNode(n), t.next(i), t.closeNode(); + } + }, + toMarkdown: { + match: (t) => t.type.name === "table_header_row", + runner: (t, e) => { + t.openNode("tableRow", void 0, { isHeader: !0 }), t.next(e.content), t.closeNode(); + } + } +})); +Me(qh.node, { + displayName: "NodeSchema<tableHeaderRow>", + group: "Table" +}); +Me(qh.ctx, { + displayName: "NodeSchemaCtx<tableHeaderRow>", + group: "Table" +}); +const iu = Mt("table_row", () => ({ + ...ru.table_row, + disableDropCursor: !0, + content: "(table_cell)*", + parseMarkdown: { + match: (t) => t.type === "tableRow", + runner: (t, e, n) => { + const r = e.align, i = e.children.map((s, o) => ({ + ...s, + align: r[o] + })); + t.openNode(n), t.next(i), t.closeNode(); + } + }, + toMarkdown: { + match: (t) => t.type.name === "table_row", + runner: (t, e) => { + e.content.size !== 0 && (t.openNode("tableRow"), t.next(e.content), t.closeNode()); + } + } +})); +Me(iu.node, { + displayName: "NodeSchema<tableRow>", + group: "Table" +}); +Me(iu.ctx, { + displayName: "NodeSchemaCtx<tableRow>", + group: "Table" +}); +const su = Mt("table_cell", () => ({ + ...ru.table_cell, + disableDropCursor: !0, + parseMarkdown: { + match: (t) => t.type === "tableCell" && !t.isHeader, + runner: (t, e, n) => { + const r = e.align; + t.openNode(n, { alignment: r }).openNode(t.schema.nodes.paragraph).next(e.children).closeNode().closeNode(); + } + }, + toMarkdown: { + match: (t) => t.type.name === "table_cell", + runner: (t, e) => { + t.openNode("tableCell").next(e.content).closeNode(); + } + } +})); +Me(su.node, { + displayName: "NodeSchema<tableCell>", + group: "Table" +}); +Me(su.ctx, { + displayName: "NodeSchemaCtx<tableCell>", + group: "Table" +}); +const ou = Mt("table_header", () => ({ + ...ru.table_header, + disableDropCursor: !0, + parseMarkdown: { + match: (t) => t.type === "tableCell" && !!t.isHeader, + runner: (t, e, n) => { + const r = e.align; + t.openNode(n, { alignment: r }), t.openNode(t.schema.nodes.paragraph), t.next(e.children), t.closeNode(), t.closeNode(); + } + }, + toMarkdown: { + match: (t) => t.type.name === "table_header", + runner: (t, e) => { + t.openNode("tableCell"), t.next(e.content), t.closeNode(); + } + } +})); +Me(ou.node, { + displayName: "NodeSchema<tableHeader>", + group: "Table" +}); +Me(ou.ctx, { + displayName: "NodeSchemaCtx<tableHeader>", + group: "Table" +}); +function Om(t, e = 3, n = 3) { + const r = Array(n).fill(0).map(() => su.type(t).createAndFill()), i = Array(n).fill(0).map(() => ou.type(t).createAndFill()), s = Array(e).fill(0).map( + (o, l) => l === 0 ? qh.type(t).create(null, i) : iu.type(t).create(null, r) + ); + return Co.type(t).create(null, s); +} +function ev(t) { + return (e, n) => (r) => { + n = n ?? r.selection.from; + const i = r.doc.resolve(n), s = K6( + (a) => a.type.name === "table" + )(i), o = s ? { + node: s.node, + from: s.start + } : void 0, l = t === "row"; + if (o) { + const a = Xe.get(o.node); + if (e >= 0 && e < (l ? a.height : a.width)) { + const u = a.positionAt( + l ? e : a.height - 1, + l ? a.width - 1 : e, + o.node + ), c = r.doc.resolve(o.from + u), h = l ? ut.rowSelection : ut.colSelection, d = a.positionAt( + l ? e : 0, + l ? 0 : e, + o.node + ), f = r.doc.resolve(o.from + d); + return G6( + r.setSelection( + h(c, f) + ) + ); + } + } + return r; + }; +} +const _I = ev("row"), RI = ev("col"); +function tv(t, e, { map: n, tableStart: r, table: i }, s) { + const o = Array(s).fill(0).reduce((a, u, c) => a + i.child(c).nodeSize, r), l = Array(n.width).fill(0).map((a, u) => { + const c = i.nodeAt(n.map[u]); + return su.type(t).createAndFill({ alignment: c == null ? void 0 : c.attrs.alignment }); + }); + return e.insert(o, iu.type(t).create(null, l)), e; +} +function zI(t) { + const e = nu(t.$from); + if (!e) return; + const n = Xe.get(e.node); + return n.cellsInRect({ + left: 0, + right: n.width, + top: 0, + bottom: n.height + }).map((i) => { + const s = e.node.nodeAt(i), o = i + e.start; + return { pos: o, start: o + 1, node: s }; + }); +} +function PI(t) { + const e = zI(t.selection); + if (e && e[0]) { + const n = t.doc.resolve(e[0].pos), r = e[e.length - 1]; + if (r) { + const i = t.doc.resolve(r.pos); + return G6(t.setSelection(new ut(i, n))); + } + } + return t; +} +const Am = Ee( + "GoToPrevTableCell", + () => () => B8(-1) +); +Me(Am, { + displayName: "Command<goToPrevTableCellCommand>", + group: "Table" +}); +const Im = Ee( + "GoToNextTableCell", + () => () => B8(1) +); +Me(Im, { + displayName: "Command<goToNextTableCellCommand>", + group: "Table" +}); +const Dm = Ee( + "ExitTable", + (t) => () => (e, n) => { + if (!ir(e)) return !1; + const { $head: r } = e.selection, i = CN(r, Co.type(t)); + if (!i) return !1; + const { to: s } = i, o = e.tr.replaceWith( + s, + s, + Mr.type(t).createAndFill() + ); + return o.setSelection(Pe.near(o.doc.resolve(s), 1)).scrollIntoView(), n == null || n(o), !0; + } +); +Me(Dm, { + displayName: "Command<breakTableCommand>", + group: "Table" +}); +const nv = Ee( + "InsertTable", + (t) => ({ row: e, col: n } = {}) => (r, i) => { + const { selection: s, tr: o } = r, { from: l } = s, a = Om(t, e, n), u = o.replaceSelectionWith(a), c = Pe.findFrom(u.doc.resolve(l), 1, !0); + return c && u.setSelection(c), i == null || i(u), !0; + } +); +Me(nv, { + displayName: "Command<insertTableCommand>", + group: "Table" +}); +const rv = Ee( + "MoveRow", + () => ({ from: t, to: e, pos: n } = {}) => NO({ + from: t ?? 0, + to: e ?? 0, + pos: n + }) +); +Me(rv, { + displayName: "Command<moveRowCommand>", + group: "Table" +}); +const iv = Ee( + "MoveCol", + () => ({ from: t, to: e, pos: n } = {}) => MO({ + from: t ?? 0, + to: e ?? 0, + pos: n + }) +); +Me(iv, { + displayName: "Command<moveColCommand>", + group: "Table" +}); +const sv = Ee( + "SelectRow", + () => (t = { index: 0 }) => (e, n) => { + const { tr: r } = e; + return !!(n == null ? void 0 : n(_I(t.index, t.pos)(r))); + } +); +Me(sv, { + displayName: "Command<selectRowCommand>", + group: "Table" +}); +const ov = Ee( + "SelectCol", + () => (t = { index: 0 }) => (e, n) => { + const { tr: r } = e; + return !!(n == null ? void 0 : n(RI(t.index, t.pos)(r))); + } +); +Me(ov, { + displayName: "Command<selectColCommand>", + group: "Table" +}); +const lv = Ee( + "SelectTable", + () => () => (t, e) => { + const { tr: n } = t; + return !!(e == null ? void 0 : e(PI(n))); + } +); +Me(lv, { + displayName: "Command<selectTableCommand>", + group: "Table" +}); +const av = Ee( + "DeleteSelectedCells", + () => () => (t, e) => { + const { selection: n } = t; + if (!(n instanceof ut)) return !1; + const r = n.isRowSelection(), i = n.isColSelection(); + return r && i ? CO(t, e) : i ? vO(t, e) : wO(t, e); + } +); +Me(av, { + displayName: "Command<deleteSelectedCellsCommand>", + group: "Table" +}); +const uv = Ee( + "AddColBefore", + () => () => mO +); +Me(uv, { + displayName: "Command<addColBeforeCommand>", + group: "Table" +}); +const cv = Ee( + "AddColAfter", + () => () => gO +); +Me(cv, { + displayName: "Command<addColAfterCommand>", + group: "Table" +}); +const hv = Ee( + "AddRowBefore", + (t) => () => (e, n) => { + if (!ir(e)) return !1; + if (n) { + const r = bs(e); + n(tv(t, e.tr, r, r.top)); + } + return !0; + } +); +Me(hv, { + displayName: "Command<addRowBeforeCommand>", + group: "Table" +}); +const dv = Ee( + "AddRowAfter", + (t) => () => (e, n) => { + if (!ir(e)) return !1; + if (n) { + const r = bs(e); + n(tv(t, e.tr, r, r.bottom)); + } + return !0; + } +); +Me(dv, { + displayName: "Command<addRowAfterCommand>", + group: "Table" +}); +const fv = Ee( + "SetAlign", + () => (t = "left") => kO("alignment", t) +); +Me(fv, { + displayName: "Command<setAlignCommand>", + group: "Table" +}); +const pv = En( + (t) => new jn( + /^\|(?<col>\d+)[xX](?<row>\d+)\|\s$/, + (e, n, r, i) => { + var u, c; + const s = e.doc.resolve(r); + if (!s.node(-1).canReplaceWith( + s.index(-1), + s.indexAfter(-1), + Co.type(t) + )) + return null; + const o = Math.max(Number(((u = n.groups) == null ? void 0 : u.row) ?? 0), 2), l = Om(t, o, Number((c = n.groups) == null ? void 0 : c.col)), a = e.tr.replaceRangeWith(r, i, l); + return a.setSelection(Ce.create(a.doc, r + 3)).scrollIntoView(); + } + ) +); +Me(pv, { + displayName: "InputRule<insertTableInputRule>", + group: "Table" +}); +const mv = AT((t) => ({ + run: (e, n, r) => { + if (r) + return e; + let i = e.content; + return e.content.forEach((s, o, l) => { + var b; + if ((s == null ? void 0 : s.type) !== Co.type(t)) + return; + const a = s.childCount, u = ((b = s.lastChild) == null ? void 0 : b.childCount) ?? 0; + if (a === 0 || u === 0) { + i = i.replaceChild( + l, + Mr.type(t).create() + ); + return; + } + const c = s.firstChild; + if (!(u > 0 && c && c.childCount === 0)) + return; + const d = Array(u).fill(0).map(() => ou.type(t).createAndFill()), f = new ae(re.from(d), 0, 0), m = c.replace(0, 0, f), y = s.replace( + 0, + c.nodeSize, + new ae(re.from(m), 0, 0) + ); + i = i.replaceChild(l, y); + }), new ae(re.from(i), e.openStart, e.openEnd); + } +})); +Me(mv, { + displayName: "PasteRule<table>", + group: "Table" +}); +const _m = On("tableKeymap", { + NextCell: { + priority: 100, + shortcuts: ["Mod-]", "Tab"], + command: (t) => { + const e = t.get(me); + return () => e.call(Im.key); + } + }, + PrevCell: { + shortcuts: ["Mod-[", "Shift-Tab"], + command: (t) => { + const e = t.get(me); + return () => e.call(Am.key); + } + }, + ExitTable: { + shortcuts: ["Mod-Enter", "Enter"], + command: (t) => { + const e = t.get(me); + return () => e.call(Dm.key); + } + } +}); +Me(_m.ctx, { + displayName: "KeymapCtx<table>", + group: "Table" +}); +Me(_m.shortcuts, { + displayName: "Keymap<table>", + group: "Table" +}); +const rf = "footnote_definition", L5 = "footnoteDefinition", Rm = Mt( + "footnote_definition", + () => ({ + group: "block", + content: "block+", + defining: !0, + attrs: { + label: { + default: "", + validate: "string" + } + }, + parseDOM: [ + { + tag: `dl[data-type="${rf}"]`, + getAttrs: (t) => { + if (!(t instanceof HTMLElement)) throw Cr(t); + return { + label: t.dataset.label + }; + }, + contentElement: "dd" + } + ], + toDOM: (t) => { + const e = t.attrs.label; + return [ + "dl", + { + // TODO: add a prosemirror plugin to sync label on change + "data-label": e, + "data-type": rf + }, + ["dt", e], + ["dd", 0] + ]; + }, + parseMarkdown: { + match: ({ type: t }) => t === L5, + runner: (t, e, n) => { + t.openNode(n, { + label: e.label + }).next(e.children).closeNode(); + } + }, + toMarkdown: { + match: (t) => t.type.name === rf, + runner: (t, e) => { + t.openNode(L5, void 0, { + label: e.attrs.label, + identifier: e.attrs.label + }).next(e.content).closeNode(); + } + } + }) +); +Me(Rm.ctx, { + displayName: "NodeSchemaCtx<footnodeDef>", + group: "footnote" +}); +Me(Rm.node, { + displayName: "NodeSchema<footnodeDef>", + group: "footnote" +}); +const sf = "footnote_reference", zm = Mt( + "footnote_reference", + () => ({ + group: "inline", + inline: !0, + atom: !0, + attrs: { + label: { + default: "", + validate: "string" + } + }, + parseDOM: [ + { + tag: `sup[data-type="${sf}"]`, + getAttrs: (t) => { + if (!(t instanceof HTMLElement)) throw Cr(t); + return { + label: t.dataset.label + }; + } + } + ], + toDOM: (t) => { + const e = t.attrs.label; + return [ + "sup", + { + // TODO: add a prosemirror plugin to sync label on change + "data-label": e, + "data-type": sf + }, + e + ]; + }, + parseMarkdown: { + match: ({ type: t }) => t === "footnoteReference", + runner: (t, e, n) => { + t.addNode(n, { + label: e.label + }); + } + }, + toMarkdown: { + match: (t) => t.type.name === sf, + runner: (t, e) => { + t.addNode("footnoteReference", void 0, void 0, { + label: e.attrs.label, + identifier: e.attrs.label + }); + } + } + }) +); +Me(zm.ctx, { + displayName: "NodeSchemaCtx<footnodeRef>", + group: "footnote" +}); +Me(zm.node, { + displayName: "NodeSchema<footnodeRef>", + group: "footnote" +}); +const Pm = Wr.extendSchema( + (t) => (e) => { + const n = t(e); + return { + ...n, + attrs: { + ...n.attrs, + checked: { + default: null, + validate: "boolean|null" + } + }, + parseDOM: [ + { + tag: 'li[data-item-type="task"]', + getAttrs: (r) => { + if (!(r instanceof HTMLElement)) throw Cr(r); + return { + label: r.dataset.label, + listType: r.dataset.listType, + spread: r.dataset.spread, + checked: r.dataset.checked ? r.dataset.checked === "true" : null + }; + } + }, + ...(n == null ? void 0 : n.parseDOM) || [] + ], + toDOM: (r) => n.toDOM && r.attrs.checked == null ? n.toDOM(r) : [ + "li", + { + "data-item-type": "task", + "data-label": r.attrs.label, + "data-list-type": r.attrs.listType, + "data-spread": r.attrs.spread, + "data-checked": r.attrs.checked + }, + 0 + ], + parseMarkdown: { + match: ({ type: r }) => r === "listItem", + runner: (r, i, s) => { + if (i.checked == null) { + n.parseMarkdown.runner(r, i, s); + return; + } + const o = i.label != null ? `${i.label}.` : "•", l = i.checked != null ? !!i.checked : null, a = i.label != null ? "ordered" : "bullet", u = i.spread != null ? `${i.spread}` : "true"; + r.openNode(s, { label: o, listType: a, spread: u, checked: l }), r.next(i.children), r.closeNode(); + } + }, + toMarkdown: { + match: (r) => r.type.name === "list_item", + runner: (r, i) => { + if (i.attrs.checked == null) { + n.toMarkdown.runner(r, i); + return; + } + const s = i.attrs.label, o = i.attrs.listType, l = i.attrs.spread === "true", a = i.attrs.checked; + r.openNode("listItem", void 0, { + label: s, + listType: o, + spread: l, + checked: a + }), r.next(i.content), r.closeNode(); + } + } + }; + } +); +Me(Pm.node, { + displayName: "NodeSchema<taskListItem>", + group: "ListItem" +}); +Me(Pm.ctx, { + displayName: "NodeSchemaCtx<taskListItem>", + group: "ListItem" +}); +const gv = En(() => new jn( + /^\[(?<checked>\s|x)\]\s$/, + (t, e, n, r) => { + var c; + const i = t.doc.resolve(n); + let s = 0, o = i.node(s); + for (; o && o.type.name !== "list_item"; ) + s--, o = i.node(s); + if (!o || o.attrs.checked != null) return null; + const l = ((c = e.groups) == null ? void 0 : c.checked) === "x", a = i.before(s), u = t.tr; + return u.deleteRange(n, r).setNodeMarkup(a, void 0, { + ...o.attrs, + checked: l + }), u; + } +)); +Me(gv, { + displayName: "InputRule<wrapInTaskListInputRule>", + group: "ListItem" +}); +const BI = [ + Em, + _m +].flat(), LI = [ + pv, + gv +], FI = [Q8], VI = [mv], yv = hn(() => tA); +Me(yv, { + displayName: "Prose<autoInsertSpanPlugin>", + group: "Prose" +}); +const HI = hn(() => PO({})); +Me(HI, { + displayName: "Prose<columnResizingPlugin>", + group: "Prose" +}); +const vv = hn( + () => UO({ allowTableNodeSelection: !0 }) +); +Me(vv, { + displayName: "Prose<tableEditingPlugin>", + group: "Prose" +}); +const Bm = vs("remarkGFM", () => DI); +Me(Bm.plugin, { + displayName: "Remark<remarkGFMPlugin>", + group: "Remark" +}); +Me(Bm.options, { + displayName: "RemarkConfig<remarkGFMPlugin>", + group: "Remark" +}); +const $I = new Nt("MILKDOWN_KEEP_TABLE_ALIGN_PLUGIN"); +function qI(t, e) { + let n = 0; + return e.forEach((r, i, s) => { + r === t && (n = s); + }), n; +} +const bv = hn(() => new Dt({ + key: $I, + appendTransaction: (t, e, n) => { + let r; + const i = (s, o) => { + if (r || (r = n.tr), s.type.name !== "table_cell") return; + const l = n.doc.resolve(o), a = l.node(l.depth), c = l.node(l.depth - 1).firstChild; + if (!c) return; + const h = qI(s, a), d = c.maybeChild(h); + if (!d) return; + const f = d.attrs.alignment, m = s.attrs.alignment; + f !== m && r.setNodeMarkup(o, void 0, { ...s.attrs, alignment: f }); + }; + return e.doc !== n.doc && n.doc.descendants(i), r; + } +})); +Me(bv, { + displayName: "Prose<keepTableAlignPlugin>", + group: "Prose" +}); +const jI = [ + bv, + yv, + Bm, + vv +].flat(), WI = [ + Pm, + Co, + qh, + iu, + ou, + su, + Rm, + zm, + Tm, + $l +].flat(), UI = [ + Im, + Am, + Dm, + nv, + rv, + iv, + sv, + ov, + lv, + av, + hv, + dv, + uv, + cv, + fv, + $h +], GI = [ + WI, + LI, + VI, + FI, + BI, + UI, + jI +].flat(), KI = Ve([], "FeaturesCtx"), JI = Ve({}, "CrepeCtx"); +var wv = (t) => { + throw TypeError(t); +}, kv = (t, e, n) => e.has(t) || wv("Cannot " + n), In = (t, e, n) => (kv(t, e, "read from private field"), n ? n.call(t) : e.get(t)), of = (t, e, n) => e.has(t) ? wv("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(t) : e.set(t, n), lf = (t, e, n, r) => (kv(t, e, "write to private field"), e.set(t, n), n), _n, fc, ka; +class YI { + /// The constructor of the crepe builder. + /// You can pass configs to the builder to configure the editor. + constructor({ root: e, defaultValue: n = "" } = {}) { + of(this, _n), of(this, fc), of(this, ka, !0), this.addFeature = (i, s) => (i(In(this, _n), s), this), this.create = () => In(this, _n).create(), this.destroy = () => In(this, _n).destroy(), this.setReadonly = (i) => (lf(this, ka, !i), In(this, _n).action((s) => { + In(this, _n).status === Uc.Created && s.get(ln).setProps({ + editable: () => !i + }); + }), this), this.getMarkdown = () => In(this, _n).action(_T()), this.on = (i) => In(this, _n).status !== Uc.Created ? (In(this, _n).config((s) => { + const o = s.get(Yc); + i(o); + }), this) : (In(this, _n).action((s) => { + const o = s.get(Yc); + i(o); + }), this); + var r; + lf(this, fc, (r = typeof e == "string" ? document.querySelector(e) : e) != null ? r : document.body), lf(this, _n, pp.make().config((i) => { + i.inject(JI, this), i.inject(KI, []); + }).config((i) => { + i.set(uc, In(this, fc)), i.set(sc, n), i.set(qa, { + editable: () => In(this, ka) + }), i.update(zh.key, (s) => ({ + ...s, + size: 4 + })); + }).use(WE).use(r8).use(jT).use(UT).use(wE).use(Uy).use(GI)); + } + /// Get the milkdown editor instance. + get editor() { + return In(this, _n); + } + /// Get the readonly state of the editor. + get readonly() { + return !In(this, ka); + } +} +_n = /* @__PURE__ */ new WeakMap(); +fc = /* @__PURE__ */ new WeakMap(); +ka = /* @__PURE__ */ new WeakMap(); +function lu(t, e) { + return Object.assign(t, { + meta: { + package: "@milkdown/plugin-block", + ...e + } + }), t; +} +const ZI = (t) => !y1((n) => n.type.name === "table")(t), jh = vt( + { filterNodes: ZI }, + "blockConfig" +); +lu(jh, { + displayName: "Ctx<blockConfig>" +}); +function XI(t, e, n) { + var i; + if (!t.dom.parentElement) return null; + try { + const s = (i = t.posAtCoords({ + left: e.x, + top: e.y + })) == null ? void 0 : i.inside; + if (s == null || s < 0) return null; + let o = t.state.doc.resolve(s), l = t.state.doc.nodeAt(s), a = t.nodeDOM(s); + const u = (h) => { + const d = o.depth >= 1 && o.index(o.depth) === 0; + if (!(h || d)) return; + const m = o.before(o.depth); + l = t.state.doc.nodeAt(m), a = t.nodeDOM(m), o = t.state.doc.resolve(m), n(o, l) || u(!0); + }, c = n(o, l); + return u(!c), !a || !l ? null : { node: l, $pos: o, el: a }; + } catch { + return null; + } +} +const F5 = Su.ie && Su.ie_version < 15 || Su.ios && Su.webkit_version < 604, V5 = 20; +var cl, A0, Ws, ar, hl, ur, dr, xv, Ds, Us, Gs, I0, dl, fl, pl, ml, D0, Ki; +class QI { + constructor() { + Z(this, dr); + /// @internal + Z(this, cl); + Z(this, A0); + Z(this, Ws); + Z(this, ar); + Z(this, hl); + Z(this, ur); + /// @internal + Z(this, Us); + Z(this, Gs); + Z(this, I0); + Z(this, dl); + Z(this, fl); + Z(this, pl); + Z(this, ml); + Z(this, D0); + Z(this, Ki); + V(this, A0, () => { + if (!T(this, ar)) return null; + const e = T(this, ar), n = T(this, dr, Ds); + if (n && Ne.isSelectable(e.node)) { + const r = Ne.create( + n.state.doc, + e.$pos.pos + ); + return n.dispatch(n.state.tr.setSelection(r)), n.focus(), V(this, Ws, r), r; + } + return null; + }), V(this, Ws, null), V(this, ar, null), V(this, hl, void 0), V(this, ur, !1), V(this, Gs, () => { + var e; + (e = T(this, Us)) == null || e.call(this, { type: "hide" }), V(this, ar, null); + }), V(this, I0, (e) => { + var n; + V(this, ar, e), (n = T(this, Us)) == null || n.call(this, { type: "show", active: e }); + }), this.bind = (e, n) => { + V(this, cl, e), V(this, Us, n); + }, this.addEvent = (e) => { + e.addEventListener("mousedown", T(this, dl)), e.addEventListener("mouseup", T(this, fl)), e.addEventListener("dragstart", T(this, pl)), e.addEventListener("dragend", T(this, ml)); + }, this.removeEvent = (e) => { + e.removeEventListener("mousedown", T(this, dl)), e.removeEventListener("mouseup", T(this, fl)), e.removeEventListener("dragstart", T(this, pl)), e.removeEventListener("dragend", T(this, ml)); + }, this.unBind = () => { + V(this, Us, void 0); + }, V(this, dl, () => { + var e; + V(this, hl, (e = T(this, ar)) == null ? void 0 : e.el.getBoundingClientRect()), T(this, A0).call(this); + }), V(this, fl, () => { + if (!T(this, ur)) { + requestAnimationFrame(() => { + var e; + T(this, hl) && ((e = T(this, dr, Ds)) == null || e.focus()); + }); + return; + } + V(this, ur, !1), V(this, Ws, null); + }), V(this, pl, (e) => { + var i; + V(this, ur, !0); + const n = T(this, dr, Ds); + if (!n) return; + n.dom.dataset.dragging = "true"; + const r = T(this, Ws); + if (e.dataTransfer && r) { + const s = r.content(); + e.dataTransfer.effectAllowed = "copyMove"; + const { dom: o, text: l } = n.serializeForClipboard(s); + e.dataTransfer.clearData(), e.dataTransfer.setData( + F5 ? "Text" : "text/html", + o.innerHTML + ), F5 || e.dataTransfer.setData("text/plain", l); + const a = (i = T(this, ar)) == null ? void 0 : i.el; + a && e.dataTransfer.setDragImage(a, 0, 0), n.dragging = { + slice: s, + move: !0 + }; + } + }), V(this, ml, () => { + T(this, dr, Ds) && T(this, Ki).call(this, T(this, dr, Ds)); + }), this.keydownCallback = (e) => (T(this, Gs).call(this), V(this, ur, !1), e.dom.dataset.dragging = "false", !1), V(this, D0, t8((e, n) => { + if (!e.editable) return; + const r = e.dom.getBoundingClientRect(), i = r.left + r.width / 2; + if (!(e.root.elementFromPoint(i, n.clientY) instanceof Element)) { + T(this, Gs).call(this); + return; + } + const o = T(this, dr, xv); + if (!o) return; + const l = XI( + e, + { x: i, y: n.clientY }, + o + ); + if (!l) { + T(this, Gs).call(this); + return; + } + T(this, I0).call(this, l); + }, 200)), this.mousemoveCallback = (e, n) => (e.composing || !e.editable || T(this, D0).call(this, e, n), !1), this.dragoverCallback = (e, n) => { + var r; + if (T(this, ur)) { + const i = (r = T(this, dr, Ds)) == null ? void 0 : r.dom.parentElement; + if (!i) return !1; + const s = i.scrollHeight > i.clientHeight, o = i.getBoundingClientRect(); + if (s) { + if (i.scrollTop > 0 && Math.abs(n.y - o.y) < V5) { + const u = i.scrollTop > 10 ? i.scrollTop - 10 : 0; + return i.scrollTop = u, !1; + } + const l = Math.round(e.dom.getBoundingClientRect().height); + if (Math.round(i.scrollTop + o.height) < l && Math.abs(n.y - (o.height + o.y)) < V5) { + const u = i.scrollTop + 10; + return i.scrollTop = u, !1; + } + } + } + return !1; + }, this.dragenterCallback = (e) => { + e.dragging && (V(this, ur, !0), e.dom.dataset.dragging = "true"); + }, this.dragleaveCallback = (e, n) => { + const r = n.clientX, i = n.clientY; + (r < 0 || i < 0 || r > window.innerWidth || i > window.innerHeight) && (V(this, ar, null), T(this, Ki).call(this, e)); + }, this.dropCallback = (e) => (T(this, Ki).call(this, e), !1), this.dragendCallback = (e) => { + T(this, Ki).call(this, e); + }, V(this, Ki, (e) => { + V(this, ur, !1), e.dom.dataset.dragging = "false"; + }); + } +} +cl = new WeakMap(), A0 = new WeakMap(), Ws = new WeakMap(), ar = new WeakMap(), hl = new WeakMap(), ur = new WeakMap(), dr = new WeakSet(), xv = function() { + var e; + try { + return (e = T(this, cl)) == null ? void 0 : e.get(jh.key).filterNodes; + } catch { + return; + } +}, Ds = function() { + var e; + return (e = T(this, cl)) == null ? void 0 : e.get(ln); +}, Us = new WeakMap(), Gs = new WeakMap(), I0 = new WeakMap(), dl = new WeakMap(), fl = new WeakMap(), pl = new WeakMap(), ml = new WeakMap(), D0 = new WeakMap(), Ki = new WeakMap(); +const Lm = vt(() => new QI(), "blockService"), Wh = vt( + {}, + "blockServiceInstance" +); +lu(Lm, { + displayName: "Ctx<blockService>" +}); +lu(Wh, { + displayName: "Ctx<blockServiceInstance>" +}); +const Uh = vt({}, "blockSpec"); +lu(Uh, { + displayName: "Ctx<blockSpec>" +}); +const Fm = hn((t) => { + const e = new Nt("MILKDOWN_BLOCK"), r = t.get(Lm.key)(); + t.set(Wh.key, r); + const i = t.get(Uh.key); + return new Dt({ + key: e, + ...i, + props: { + ...i.props, + handleDOMEvents: { + drop: (s) => r.dropCallback(s), + pointermove: (s, o) => r.mousemoveCallback(s, o), + keydown: (s) => r.keydownCallback(s), + dragover: (s, o) => r.dragoverCallback(s, o), + dragleave: (s, o) => r.dragleaveCallback(s, o), + dragenter: (s) => r.dragenterCallback(s), + dragend: (s) => r.dragendCallback(s) + } + } + }); +}); +lu(Fm, { + displayName: "Prose<block>" +}); +var yn, pi, Ks, Js, _0, gl, R0, z0, yl, vl, bl, gh, Sv; +class eD { + constructor(e) { + Z(this, gh); + /// @internal + Z(this, yn); + /// @internal + Z(this, pi); + /// @internal + Z(this, Ks); + Z(this, Js); + /// @internal + Z(this, _0); + Z(this, gl); + /// @internal + Z(this, R0); + /// @internal + Z(this, z0); + /// @internal + Z(this, yl); + /// @internal + Z(this, vl); + /// @internal + Z(this, bl); + V(this, Js, null), V(this, gl, !1), this.update = () => { + requestAnimationFrame(() => { + if (!T(this, gl)) + try { + vu(this, gh, Sv).call(this), V(this, gl, !0); + } catch { + } + }); + }, this.destroy = () => { + var n, r; + (n = T(this, Ks)) == null || n.unBind(), (r = T(this, Ks)) == null || r.removeEvent(T(this, yn)), T(this, yn).remove(); + }, this.show = (n) => { + const r = n.el, i = T(this, pi).get(ln).dom, s = { + ctx: T(this, pi), + active: n, + editorDom: i, + blockDom: T(this, yn) + }, o = { + contextElement: r, + getBoundingClientRect: () => T(this, vl) ? T(this, vl).call(this, s) : r.getBoundingClientRect() + }, l = [Yp()]; + if (T(this, yl)) { + const a = T(this, yl).call(this, s), u = Zp(a); + l.push(u); + } + Jp(o, T(this, yn), { + placement: T(this, bl) ? T(this, bl).call(this, s) : "left", + middleware: [...l, ...T(this, R0)], + ...T(this, z0) + }).then(({ x: a, y: u }) => { + Object.assign(T(this, yn).style, { + left: `${a}px`, + top: `${u}px` + }), T(this, yn).dataset.show = "true"; + }).catch(console.error); + }, this.hide = () => { + T(this, yn).dataset.show = "false"; + }, V(this, pi, e.ctx), V(this, yn, e.content), V(this, yl, e.getOffset), V(this, vl, e.getPosition), V(this, bl, e.getPlacement), V(this, R0, e.middleware ?? []), V(this, z0, e.floatingUIOptions ?? {}), V(this, _0, e.root), this.hide(); + } + /// The context of current active node. + get active() { + return T(this, Js); + } +} +yn = new WeakMap(), pi = new WeakMap(), Ks = new WeakMap(), Js = new WeakMap(), _0 = new WeakMap(), gl = new WeakMap(), R0 = new WeakMap(), z0 = new WeakMap(), yl = new WeakMap(), vl = new WeakMap(), bl = new WeakMap(), gh = new WeakSet(), /// @internal +Sv = function() { + const e = T(this, pi).get(ln); + (T(this, _0) ?? e.dom.parentElement ?? document.body).appendChild(T(this, yn)); + const r = T(this, pi).get(Wh.key); + r.bind(T(this, pi), (i) => { + i.type === "hide" ? (this.hide(), V(this, Js, null)) : i.type === "show" && (this.show(i.active), V(this, Js, i.active)); + }), V(this, Ks, r), T(this, Ks).addEvent(T(this, yn)), T(this, yn).draggable = !0; +}; +const Gh = [ + Uh, + jh, + Lm, + Wh, + Fm +]; +Gh.key = Uh.key; +Gh.pluginKey = Fm.key; +/** +* @vue/shared v3.5.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +// @__NO_SIDE_EFFECTS__ +function Ei(t) { + const e = /* @__PURE__ */ Object.create(null); + for (const n of t.split(",")) e[n] = 1; + return (n) => n in e; +} +const tt = process.env.NODE_ENV !== "production" ? Object.freeze({}) : {}, ja = process.env.NODE_ENV !== "production" ? Object.freeze([]) : [], Ot = () => { +}, Cv = () => !1, au = (t) => t.charCodeAt(0) === 111 && t.charCodeAt(1) === 110 && // uppercase letter +(t.charCodeAt(2) > 122 || t.charCodeAt(2) < 97), Qc = (t) => t.startsWith("onUpdate:"), St = Object.assign, Vm = (t, e) => { + const n = t.indexOf(e); + n > -1 && t.splice(n, 1); +}, tD = Object.prototype.hasOwnProperty, $e = (t, e) => tD.call(t, e), Ae = Array.isArray, Jo = (t) => Kh(t) === "[object Map]", nD = (t) => Kh(t) === "[object Set]", Oe = (t) => typeof t == "function", Ct = (t) => typeof t == "string", ql = (t) => typeof t == "symbol", it = (t) => t !== null && typeof t == "object", Hm = (t) => (it(t) || Oe(t)) && Oe(t.then) && Oe(t.catch), rD = Object.prototype.toString, Kh = (t) => rD.call(t), $m = (t) => Kh(t).slice(8, -1), iD = (t) => Kh(t) === "[object Object]", qm = (t) => Ct(t) && t !== "NaN" && t[0] !== "-" && "" + parseInt(t, 10) === t, Wa = /* @__PURE__ */ Ei( + // the leading comma is intentional so empty string "" is also included + ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted" +), sD = /* @__PURE__ */ Ei( + "bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo" +), Jh = (t) => { + const e = /* @__PURE__ */ Object.create(null); + return (n) => e[n] || (e[n] = t(n)); +}, oD = /-\w/g, vr = Jh( + (t) => t.replace(oD, (e) => e.slice(1).toUpperCase()) +), lD = /\B([A-Z])/g, cs = Jh( + (t) => t.replace(lD, "-$1").toLowerCase() +), Yh = Jh((t) => t.charAt(0).toUpperCase() + t.slice(1)), _s = Jh( + (t) => t ? `on${Yh(t)}` : "" +), rs = (t, e) => !Object.is(t, e), ea = (t, ...e) => { + for (let n = 0; n < t.length; n++) + t[n](...e); +}, eh = (t, e, n, r = !1) => { + Object.defineProperty(t, e, { + configurable: !0, + enumerable: !1, + writable: r, + value: n + }); +}, aD = (t) => { + const e = parseFloat(t); + return isNaN(e) ? t : e; +}; +let H5; +const is = () => H5 || (H5 = typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : typeof window < "u" ? window : typeof global < "u" ? global : {}); +function jm(t) { + if (Ae(t)) { + const e = {}; + for (let n = 0; n < t.length; n++) { + const r = t[n], i = Ct(r) ? dD(r) : jm(r); + if (i) + for (const s in i) + e[s] = i[s]; + } + return e; + } else if (Ct(t) || it(t)) + return t; +} +const uD = /;(?![^(]*\))/g, cD = /:([^]+)/, hD = /\/\*[^]*?\*\//g; +function dD(t) { + const e = {}; + return t.replace(hD, "").split(uD).forEach((n) => { + if (n) { + const r = n.split(cD); + r.length > 1 && (e[r[0].trim()] = r[1].trim()); + } + }), e; +} +function Wm(t) { + let e = ""; + if (Ct(t)) + e = t; + else if (Ae(t)) + for (let n = 0; n < t.length; n++) { + const r = Wm(t[n]); + r && (e += r + " "); + } + else if (it(t)) + for (const n in t) + t[n] && (e += n + " "); + return e.trim(); +} +const fD = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot", pD = "svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view", mD = "annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics", gD = /* @__PURE__ */ Ei(fD), yD = /* @__PURE__ */ Ei(pD), vD = /* @__PURE__ */ Ei(mD), bD = "itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly", wD = /* @__PURE__ */ Ei(bD); +function Nv(t) { + return !!t || t === ""; +} +/** +* @vue/reactivity v3.5.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +function kr(t, ...e) { + console.warn(`[Vue warn] ${t}`, ...e); +} +let vn; +class kD { + constructor(e = !1) { + this.detached = e, this._active = !0, this._on = 0, this.effects = [], this.cleanups = [], this._isPaused = !1, this.parent = vn, !e && vn && (this.index = (vn.scopes || (vn.scopes = [])).push( + this + ) - 1); + } + get active() { + return this._active; + } + pause() { + if (this._active) { + this._isPaused = !0; + let e, n; + if (this.scopes) + for (e = 0, n = this.scopes.length; e < n; e++) + this.scopes[e].pause(); + for (e = 0, n = this.effects.length; e < n; e++) + this.effects[e].pause(); + } + } + /** + * Resumes the effect scope, including all child scopes and effects. + */ + resume() { + if (this._active && this._isPaused) { + this._isPaused = !1; + let e, n; + if (this.scopes) + for (e = 0, n = this.scopes.length; e < n; e++) + this.scopes[e].resume(); + for (e = 0, n = this.effects.length; e < n; e++) + this.effects[e].resume(); + } + } + run(e) { + if (this._active) { + const n = vn; + try { + return vn = this, e(); + } finally { + vn = n; + } + } else process.env.NODE_ENV !== "production" && kr("cannot run an inactive effect scope."); + } + /** + * This should only be called on non-detached scopes + * @internal + */ + on() { + ++this._on === 1 && (this.prevScope = vn, vn = this); + } + /** + * This should only be called on non-detached scopes + * @internal + */ + off() { + this._on > 0 && --this._on === 0 && (vn = this.prevScope, this.prevScope = void 0); + } + stop(e) { + if (this._active) { + this._active = !1; + let n, r; + for (n = 0, r = this.effects.length; n < r; n++) + this.effects[n].stop(); + for (this.effects.length = 0, n = 0, r = this.cleanups.length; n < r; n++) + this.cleanups[n](); + if (this.cleanups.length = 0, this.scopes) { + for (n = 0, r = this.scopes.length; n < r; n++) + this.scopes[n].stop(!0); + this.scopes.length = 0; + } + if (!this.detached && this.parent && !e) { + const i = this.parent.scopes.pop(); + i && i !== this && (this.parent.scopes[this.index] = i, i.index = this.index); + } + this.parent = void 0; + } + } +} +function xD() { + return vn; +} +let Ze; +const af = /* @__PURE__ */ new WeakSet(); +class Mv { + constructor(e) { + this.fn = e, this.deps = void 0, this.depsTail = void 0, this.flags = 5, this.next = void 0, this.cleanup = void 0, this.scheduler = void 0, vn && vn.active && vn.effects.push(this); + } + pause() { + this.flags |= 64; + } + resume() { + this.flags & 64 && (this.flags &= -65, af.has(this) && (af.delete(this), this.trigger())); + } + /** + * @internal + */ + notify() { + this.flags & 2 && !(this.flags & 32) || this.flags & 8 || Ev(this); + } + run() { + if (!(this.flags & 1)) + return this.fn(); + this.flags |= 2, $5(this), Ov(this); + const e = Ze, n = br; + Ze = this, br = !0; + try { + return this.fn(); + } finally { + process.env.NODE_ENV !== "production" && Ze !== this && kr( + "Active effect was not restored correctly - this is likely a Vue internal bug." + ), Av(this), Ze = e, br = n, this.flags &= -3; + } + } + stop() { + if (this.flags & 1) { + for (let e = this.deps; e; e = e.nextDep) + Km(e); + this.deps = this.depsTail = void 0, $5(this), this.onStop && this.onStop(), this.flags &= -2; + } + } + trigger() { + this.flags & 64 ? af.add(this) : this.scheduler ? this.scheduler() : this.runIfDirty(); + } + /** + * @internal + */ + runIfDirty() { + Sp(this) && this.run(); + } + get dirty() { + return Sp(this); + } +} +let Tv = 0, Ua, Ga; +function Ev(t, e = !1) { + if (t.flags |= 8, e) { + t.next = Ga, Ga = t; + return; + } + t.next = Ua, Ua = t; +} +function Um() { + Tv++; +} +function Gm() { + if (--Tv > 0) + return; + if (Ga) { + let e = Ga; + for (Ga = void 0; e; ) { + const n = e.next; + e.next = void 0, e.flags &= -9, e = n; + } + } + let t; + for (; Ua; ) { + let e = Ua; + for (Ua = void 0; e; ) { + const n = e.next; + if (e.next = void 0, e.flags &= -9, e.flags & 1) + try { + e.trigger(); + } catch (r) { + t || (t = r); + } + e = n; + } + } + if (t) throw t; +} +function Ov(t) { + for (let e = t.deps; e; e = e.nextDep) + e.version = -1, e.prevActiveLink = e.dep.activeLink, e.dep.activeLink = e; +} +function Av(t) { + let e, n = t.depsTail, r = n; + for (; r; ) { + const i = r.prevDep; + r.version === -1 ? (r === n && (n = i), Km(r), SD(r)) : e = r, r.dep.activeLink = r.prevActiveLink, r.prevActiveLink = void 0, r = i; + } + t.deps = e, t.depsTail = n; +} +function Sp(t) { + for (let e = t.deps; e; e = e.nextDep) + if (e.dep.version !== e.version || e.dep.computed && (Iv(e.dep.computed) || e.dep.version !== e.version)) + return !0; + return !!t._dirty; +} +function Iv(t) { + if (t.flags & 4 && !(t.flags & 16) || (t.flags &= -17, t.globalVersion === f0) || (t.globalVersion = f0, !t.isSSR && t.flags & 128 && (!t.deps && !t._dirty || !Sp(t)))) + return; + t.flags |= 2; + const e = t.dep, n = Ze, r = br; + Ze = t, br = !0; + try { + Ov(t); + const i = t.fn(t._value); + (e.version === 0 || rs(i, t._value)) && (t.flags |= 128, t._value = i, e.version++); + } catch (i) { + throw e.version++, i; + } finally { + Ze = n, br = r, Av(t), t.flags &= -3; + } +} +function Km(t, e = !1) { + const { dep: n, prevSub: r, nextSub: i } = t; + if (r && (r.nextSub = i, t.prevSub = void 0), i && (i.prevSub = r, t.nextSub = void 0), process.env.NODE_ENV !== "production" && n.subsHead === t && (n.subsHead = i), n.subs === t && (n.subs = r, !r && n.computed)) { + n.computed.flags &= -5; + for (let s = n.computed.deps; s; s = s.nextDep) + Km(s, !0); + } + !e && !--n.sc && n.map && n.map.delete(n.key); +} +function SD(t) { + const { prevDep: e, nextDep: n } = t; + e && (e.nextDep = n, t.prevDep = void 0), n && (n.prevDep = e, t.nextDep = void 0); +} +let br = !0; +const Dv = []; +function xr() { + Dv.push(br), br = !1; +} +function Sr() { + const t = Dv.pop(); + br = t === void 0 ? !0 : t; +} +function $5(t) { + const { cleanup: e } = t; + if (t.cleanup = void 0, e) { + const n = Ze; + Ze = void 0; + try { + e(); + } finally { + Ze = n; + } + } +} +let f0 = 0; +class CD { + constructor(e, n) { + this.sub = e, this.dep = n, this.version = n.version, this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0; + } +} +class Jm { + // TODO isolatedDeclarations "__v_skip" + constructor(e) { + this.computed = e, this.version = 0, this.activeLink = void 0, this.subs = void 0, this.map = void 0, this.key = void 0, this.sc = 0, this.__v_skip = !0, process.env.NODE_ENV !== "production" && (this.subsHead = void 0); + } + track(e) { + if (!Ze || !br || Ze === this.computed) + return; + let n = this.activeLink; + if (n === void 0 || n.sub !== Ze) + n = this.activeLink = new CD(Ze, this), Ze.deps ? (n.prevDep = Ze.depsTail, Ze.depsTail.nextDep = n, Ze.depsTail = n) : Ze.deps = Ze.depsTail = n, _v(n); + else if (n.version === -1 && (n.version = this.version, n.nextDep)) { + const r = n.nextDep; + r.prevDep = n.prevDep, n.prevDep && (n.prevDep.nextDep = r), n.prevDep = Ze.depsTail, n.nextDep = void 0, Ze.depsTail.nextDep = n, Ze.depsTail = n, Ze.deps === n && (Ze.deps = r); + } + return process.env.NODE_ENV !== "production" && Ze.onTrack && Ze.onTrack( + St( + { + effect: Ze + }, + e + ) + ), n; + } + trigger(e) { + this.version++, f0++, this.notify(e); + } + notify(e) { + Um(); + try { + if (process.env.NODE_ENV !== "production") + for (let n = this.subsHead; n; n = n.nextSub) + n.sub.onTrigger && !(n.sub.flags & 8) && n.sub.onTrigger( + St( + { + effect: n.sub + }, + e + ) + ); + for (let n = this.subs; n; n = n.prevSub) + n.sub.notify() && n.sub.dep.notify(); + } finally { + Gm(); + } + } +} +function _v(t) { + if (t.dep.sc++, t.sub.flags & 4) { + const e = t.dep.computed; + if (e && !t.dep.subs) { + e.flags |= 20; + for (let r = e.deps; r; r = r.nextDep) + _v(r); + } + const n = t.dep.subs; + n !== t && (t.prevSub = n, n && (n.nextSub = t)), process.env.NODE_ENV !== "production" && t.dep.subsHead === void 0 && (t.dep.subsHead = t), t.dep.subs = t; + } +} +const Cp = /* @__PURE__ */ new WeakMap(), so = /* @__PURE__ */ Symbol( + process.env.NODE_ENV !== "production" ? "Object iterate" : "" +), Np = /* @__PURE__ */ Symbol( + process.env.NODE_ENV !== "production" ? "Map keys iterate" : "" +), p0 = /* @__PURE__ */ Symbol( + process.env.NODE_ENV !== "production" ? "Array iterate" : "" +); +function Pt(t, e, n) { + if (br && Ze) { + let r = Cp.get(t); + r || Cp.set(t, r = /* @__PURE__ */ new Map()); + let i = r.get(n); + i || (r.set(n, i = new Jm()), i.map = r, i.key = n), process.env.NODE_ENV !== "production" ? i.track({ + target: t, + type: e, + key: n + }) : i.track(); + } +} +function Rr(t, e, n, r, i, s) { + const o = Cp.get(t); + if (!o) { + f0++; + return; + } + const l = (a) => { + a && (process.env.NODE_ENV !== "production" ? a.trigger({ + target: t, + type: e, + key: n, + newValue: r, + oldValue: i, + oldTarget: s + }) : a.trigger()); + }; + if (Um(), e === "clear") + o.forEach(l); + else { + const a = Ae(t), u = a && qm(n); + if (a && n === "length") { + const c = Number(r); + o.forEach((h, d) => { + (d === "length" || d === p0 || !ql(d) && d >= c) && l(h); + }); + } else + switch ((n !== void 0 || o.has(void 0)) && l(o.get(n)), u && l(o.get(p0)), e) { + case "add": + a ? u && l(o.get("length")) : (l(o.get(so)), Jo(t) && l(o.get(Np))); + break; + case "delete": + a || (l(o.get(so)), Jo(t) && l(o.get(Np))); + break; + case "set": + Jo(t) && l(o.get(so)); + break; + } + } + Gm(); +} +function Ao(t) { + const e = /* @__PURE__ */ Le(t); + return e === t ? e : (Pt(e, "iterate", p0), /* @__PURE__ */ Nn(t) ? e : e.map(xi)); +} +function Ym(t) { + return Pt(t = /* @__PURE__ */ Le(t), "iterate", p0), t; +} +function Fi(t, e) { + return /* @__PURE__ */ $r(t) ? m0(/* @__PURE__ */ oo(t) ? xi(e) : e) : xi(e); +} +const ND = { + __proto__: null, + [Symbol.iterator]() { + return uf(this, Symbol.iterator, (t) => Fi(this, t)); + }, + concat(...t) { + return Ao(this).concat( + ...t.map((e) => Ae(e) ? Ao(e) : e) + ); + }, + entries() { + return uf(this, "entries", (t) => (t[1] = Fi(this, t[1]), t)); + }, + every(t, e) { + return Zr(this, "every", t, e, void 0, arguments); + }, + filter(t, e) { + return Zr( + this, + "filter", + t, + e, + (n) => n.map((r) => Fi(this, r)), + arguments + ); + }, + find(t, e) { + return Zr( + this, + "find", + t, + e, + (n) => Fi(this, n), + arguments + ); + }, + findIndex(t, e) { + return Zr(this, "findIndex", t, e, void 0, arguments); + }, + findLast(t, e) { + return Zr( + this, + "findLast", + t, + e, + (n) => Fi(this, n), + arguments + ); + }, + findLastIndex(t, e) { + return Zr(this, "findLastIndex", t, e, void 0, arguments); + }, + // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement + forEach(t, e) { + return Zr(this, "forEach", t, e, void 0, arguments); + }, + includes(...t) { + return cf(this, "includes", t); + }, + indexOf(...t) { + return cf(this, "indexOf", t); + }, + join(t) { + return Ao(this).join(t); + }, + // keys() iterator only reads `length`, no optimization required + lastIndexOf(...t) { + return cf(this, "lastIndexOf", t); + }, + map(t, e) { + return Zr(this, "map", t, e, void 0, arguments); + }, + pop() { + return ta(this, "pop"); + }, + push(...t) { + return ta(this, "push", t); + }, + reduce(t, ...e) { + return q5(this, "reduce", t, e); + }, + reduceRight(t, ...e) { + return q5(this, "reduceRight", t, e); + }, + shift() { + return ta(this, "shift"); + }, + // slice could use ARRAY_ITERATE but also seems to beg for range tracking + some(t, e) { + return Zr(this, "some", t, e, void 0, arguments); + }, + splice(...t) { + return ta(this, "splice", t); + }, + toReversed() { + return Ao(this).toReversed(); + }, + toSorted(t) { + return Ao(this).toSorted(t); + }, + toSpliced(...t) { + return Ao(this).toSpliced(...t); + }, + unshift(...t) { + return ta(this, "unshift", t); + }, + values() { + return uf(this, "values", (t) => Fi(this, t)); + } +}; +function uf(t, e, n) { + const r = Ym(t), i = r[e](); + return r !== t && !/* @__PURE__ */ Nn(t) && (i._next = i.next, i.next = () => { + const s = i._next(); + return s.done || (s.value = n(s.value)), s; + }), i; +} +const MD = Array.prototype; +function Zr(t, e, n, r, i, s) { + const o = Ym(t), l = o !== t && !/* @__PURE__ */ Nn(t), a = o[e]; + if (a !== MD[e]) { + const h = a.apply(t, s); + return l ? xi(h) : h; + } + let u = n; + o !== t && (l ? u = function(h, d) { + return n.call(this, Fi(t, h), d, t); + } : n.length > 2 && (u = function(h, d) { + return n.call(this, h, d, t); + })); + const c = a.call(o, u, r); + return l && i ? i(c) : c; +} +function q5(t, e, n, r) { + const i = Ym(t); + let s = n; + return i !== t && (/* @__PURE__ */ Nn(t) ? n.length > 3 && (s = function(o, l, a) { + return n.call(this, o, l, a, t); + }) : s = function(o, l, a) { + return n.call(this, o, Fi(t, l), a, t); + }), i[e](s, ...r); +} +function cf(t, e, n) { + const r = /* @__PURE__ */ Le(t); + Pt(r, "iterate", p0); + const i = r[e](...n); + return (i === -1 || i === !1) && /* @__PURE__ */ th(n[0]) ? (n[0] = /* @__PURE__ */ Le(n[0]), r[e](...n)) : i; +} +function ta(t, e, n = []) { + xr(), Um(); + const r = (/* @__PURE__ */ Le(t))[e].apply(t, n); + return Gm(), Sr(), r; +} +const TD = /* @__PURE__ */ Ei("__proto__,__v_isRef,__isVue"), Rv = new Set( + /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((t) => t !== "arguments" && t !== "caller").map((t) => Symbol[t]).filter(ql) +); +function ED(t) { + ql(t) || (t = String(t)); + const e = /* @__PURE__ */ Le(this); + return Pt(e, "has", t), e.hasOwnProperty(t); +} +class zv { + constructor(e = !1, n = !1) { + this._isReadonly = e, this._isShallow = n; + } + get(e, n, r) { + if (n === "__v_skip") return e.__v_skip; + const i = this._isReadonly, s = this._isShallow; + if (n === "__v_isReactive") + return !i; + if (n === "__v_isReadonly") + return i; + if (n === "__v_isShallow") + return s; + if (n === "__v_raw") + return r === (i ? s ? Hv : Vv : s ? Fv : Lv).get(e) || // receiver is not the reactive proxy, but has the same prototype + // this means the receiver is a user proxy of the reactive proxy + Object.getPrototypeOf(e) === Object.getPrototypeOf(r) ? e : void 0; + const o = Ae(e); + if (!i) { + let a; + if (o && (a = ND[n])) + return a; + if (n === "hasOwnProperty") + return ED; + } + const l = Reflect.get( + e, + n, + // if this is a proxy wrapping a ref, return methods using the raw ref + // as receiver so that we don't have to call `toRaw` on the ref in all + // its class methods + /* @__PURE__ */ It(e) ? e : r + ); + if ((ql(n) ? Rv.has(n) : TD(n)) || (i || Pt(e, "get", n), s)) + return l; + if (/* @__PURE__ */ It(l)) { + const a = o && qm(n) ? l : l.value; + return i && it(a) ? /* @__PURE__ */ Tp(a) : a; + } + return it(l) ? i ? /* @__PURE__ */ Tp(l) : /* @__PURE__ */ Zm(l) : l; + } +} +class Pv extends zv { + constructor(e = !1) { + super(!1, e); + } + set(e, n, r, i) { + let s = e[n]; + const o = Ae(e) && qm(n); + if (!this._isShallow) { + const u = /* @__PURE__ */ $r(s); + if (!/* @__PURE__ */ Nn(r) && !/* @__PURE__ */ $r(r) && (s = /* @__PURE__ */ Le(s), r = /* @__PURE__ */ Le(r)), !o && /* @__PURE__ */ It(s) && !/* @__PURE__ */ It(r)) + return u ? (process.env.NODE_ENV !== "production" && kr( + `Set operation on key "${String(n)}" failed: target is readonly.`, + e[n] + ), !0) : (s.value = r, !0); + } + const l = o ? Number(n) < e.length : $e(e, n), a = Reflect.set( + e, + n, + r, + /* @__PURE__ */ It(e) ? e : i + ); + return e === /* @__PURE__ */ Le(i) && (l ? rs(r, s) && Rr(e, "set", n, r, s) : Rr(e, "add", n, r)), a; + } + deleteProperty(e, n) { + const r = $e(e, n), i = e[n], s = Reflect.deleteProperty(e, n); + return s && r && Rr(e, "delete", n, void 0, i), s; + } + has(e, n) { + const r = Reflect.has(e, n); + return (!ql(n) || !Rv.has(n)) && Pt(e, "has", n), r; + } + ownKeys(e) { + return Pt( + e, + "iterate", + Ae(e) ? "length" : so + ), Reflect.ownKeys(e); + } +} +class Bv extends zv { + constructor(e = !1) { + super(!0, e); + } + set(e, n) { + return process.env.NODE_ENV !== "production" && kr( + `Set operation on key "${String(n)}" failed: target is readonly.`, + e + ), !0; + } + deleteProperty(e, n) { + return process.env.NODE_ENV !== "production" && kr( + `Delete operation on key "${String(n)}" failed: target is readonly.`, + e + ), !0; + } +} +const OD = /* @__PURE__ */ new Pv(), AD = /* @__PURE__ */ new Bv(), ID = /* @__PURE__ */ new Pv(!0), DD = /* @__PURE__ */ new Bv(!0), Mp = (t) => t, Eu = (t) => Reflect.getPrototypeOf(t); +function _D(t, e, n) { + return function(...r) { + const i = this.__v_raw, s = /* @__PURE__ */ Le(i), o = Jo(s), l = t === "entries" || t === Symbol.iterator && o, a = t === "keys" && o, u = i[t](...r), c = n ? Mp : e ? m0 : xi; + return !e && Pt( + s, + "iterate", + a ? Np : so + ), St( + // inheriting all iterator properties + Object.create(u), + { + // iterator protocol + next() { + const { value: h, done: d } = u.next(); + return d ? { value: h, done: d } : { + value: l ? [c(h[0]), c(h[1])] : c(h), + done: d + }; + } + } + ); + }; +} +function Ou(t) { + return function(...e) { + if (process.env.NODE_ENV !== "production") { + const n = e[0] ? `on key "${e[0]}" ` : ""; + kr( + `${Yh(t)} operation ${n}failed: target is readonly.`, + /* @__PURE__ */ Le(this) + ); + } + return t === "delete" ? !1 : t === "clear" ? void 0 : this; + }; +} +function RD(t, e) { + const n = { + get(i) { + const s = this.__v_raw, o = /* @__PURE__ */ Le(s), l = /* @__PURE__ */ Le(i); + t || (rs(i, l) && Pt(o, "get", i), Pt(o, "get", l)); + const { has: a } = Eu(o), u = e ? Mp : t ? m0 : xi; + if (a.call(o, i)) + return u(s.get(i)); + if (a.call(o, l)) + return u(s.get(l)); + s !== o && s.get(i); + }, + get size() { + const i = this.__v_raw; + return !t && Pt(/* @__PURE__ */ Le(i), "iterate", so), i.size; + }, + has(i) { + const s = this.__v_raw, o = /* @__PURE__ */ Le(s), l = /* @__PURE__ */ Le(i); + return t || (rs(i, l) && Pt(o, "has", i), Pt(o, "has", l)), i === l ? s.has(i) : s.has(i) || s.has(l); + }, + forEach(i, s) { + const o = this, l = o.__v_raw, a = /* @__PURE__ */ Le(l), u = e ? Mp : t ? m0 : xi; + return !t && Pt(a, "iterate", so), l.forEach((c, h) => i.call(s, u(c), u(h), o)); + } + }; + return St( + n, + t ? { + add: Ou("add"), + set: Ou("set"), + delete: Ou("delete"), + clear: Ou("clear") + } : { + add(i) { + !e && !/* @__PURE__ */ Nn(i) && !/* @__PURE__ */ $r(i) && (i = /* @__PURE__ */ Le(i)); + const s = /* @__PURE__ */ Le(this); + return Eu(s).has.call(s, i) || (s.add(i), Rr(s, "add", i, i)), this; + }, + set(i, s) { + !e && !/* @__PURE__ */ Nn(s) && !/* @__PURE__ */ $r(s) && (s = /* @__PURE__ */ Le(s)); + const o = /* @__PURE__ */ Le(this), { has: l, get: a } = Eu(o); + let u = l.call(o, i); + u ? process.env.NODE_ENV !== "production" && j5(o, l, i) : (i = /* @__PURE__ */ Le(i), u = l.call(o, i)); + const c = a.call(o, i); + return o.set(i, s), u ? rs(s, c) && Rr(o, "set", i, s, c) : Rr(o, "add", i, s), this; + }, + delete(i) { + const s = /* @__PURE__ */ Le(this), { has: o, get: l } = Eu(s); + let a = o.call(s, i); + a ? process.env.NODE_ENV !== "production" && j5(s, o, i) : (i = /* @__PURE__ */ Le(i), a = o.call(s, i)); + const u = l ? l.call(s, i) : void 0, c = s.delete(i); + return a && Rr(s, "delete", i, void 0, u), c; + }, + clear() { + const i = /* @__PURE__ */ Le(this), s = i.size !== 0, o = process.env.NODE_ENV !== "production" ? Jo(i) ? new Map(i) : new Set(i) : void 0, l = i.clear(); + return s && Rr( + i, + "clear", + void 0, + void 0, + o + ), l; + } + } + ), [ + "keys", + "values", + "entries", + Symbol.iterator + ].forEach((i) => { + n[i] = _D(i, t, e); + }), n; +} +function Zh(t, e) { + const n = RD(t, e); + return (r, i, s) => i === "__v_isReactive" ? !t : i === "__v_isReadonly" ? t : i === "__v_raw" ? r : Reflect.get( + $e(n, i) && i in r ? n : r, + i, + s + ); +} +const zD = { + get: /* @__PURE__ */ Zh(!1, !1) +}, PD = { + get: /* @__PURE__ */ Zh(!1, !0) +}, BD = { + get: /* @__PURE__ */ Zh(!0, !1) +}, LD = { + get: /* @__PURE__ */ Zh(!0, !0) +}; +function j5(t, e, n) { + const r = /* @__PURE__ */ Le(n); + if (r !== n && e.call(t, r)) { + const i = $m(t); + kr( + `Reactive ${i} contains both the raw and reactive versions of the same object${i === "Map" ? " as keys" : ""}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.` + ); + } +} +const Lv = /* @__PURE__ */ new WeakMap(), Fv = /* @__PURE__ */ new WeakMap(), Vv = /* @__PURE__ */ new WeakMap(), Hv = /* @__PURE__ */ new WeakMap(); +function FD(t) { + switch (t) { + case "Object": + case "Array": + return 1; + case "Map": + case "Set": + case "WeakMap": + case "WeakSet": + return 2; + default: + return 0; + } +} +function VD(t) { + return t.__v_skip || !Object.isExtensible(t) ? 0 : FD($m(t)); +} +// @__NO_SIDE_EFFECTS__ +function Zm(t) { + return /* @__PURE__ */ $r(t) ? t : Xh( + t, + !1, + OD, + zD, + Lv + ); +} +// @__NO_SIDE_EFFECTS__ +function HD(t) { + return Xh( + t, + !1, + ID, + PD, + Fv + ); +} +// @__NO_SIDE_EFFECTS__ +function Tp(t) { + return Xh( + t, + !0, + AD, + BD, + Vv + ); +} +// @__NO_SIDE_EFFECTS__ +function Pr(t) { + return Xh( + t, + !0, + DD, + LD, + Hv + ); +} +function Xh(t, e, n, r, i) { + if (!it(t)) + return process.env.NODE_ENV !== "production" && kr( + `value cannot be made ${e ? "readonly" : "reactive"}: ${String( + t + )}` + ), t; + if (t.__v_raw && !(e && t.__v_isReactive)) + return t; + const s = VD(t); + if (s === 0) + return t; + const o = i.get(t); + if (o) + return o; + const l = new Proxy( + t, + s === 2 ? r : n + ); + return i.set(t, l), l; +} +// @__NO_SIDE_EFFECTS__ +function oo(t) { + return /* @__PURE__ */ $r(t) ? /* @__PURE__ */ oo(t.__v_raw) : !!(t && t.__v_isReactive); +} +// @__NO_SIDE_EFFECTS__ +function $r(t) { + return !!(t && t.__v_isReadonly); +} +// @__NO_SIDE_EFFECTS__ +function Nn(t) { + return !!(t && t.__v_isShallow); +} +// @__NO_SIDE_EFFECTS__ +function th(t) { + return t ? !!t.__v_raw : !1; +} +// @__NO_SIDE_EFFECTS__ +function Le(t) { + const e = t && t.__v_raw; + return e ? /* @__PURE__ */ Le(e) : t; +} +function $D(t) { + return !$e(t, "__v_skip") && Object.isExtensible(t) && eh(t, "__v_skip", !0), t; +} +const xi = (t) => it(t) ? /* @__PURE__ */ Zm(t) : t, m0 = (t) => it(t) ? /* @__PURE__ */ Tp(t) : t; +// @__NO_SIDE_EFFECTS__ +function It(t) { + return t ? t.__v_isRef === !0 : !1; +} +// @__NO_SIDE_EFFECTS__ +function kt(t) { + return $v(t, !1); +} +// @__NO_SIDE_EFFECTS__ +function qD(t) { + return $v(t, !0); +} +function $v(t, e) { + return /* @__PURE__ */ It(t) ? t : new jD(t, e); +} +class jD { + constructor(e, n) { + this.dep = new Jm(), this.__v_isRef = !0, this.__v_isShallow = !1, this._rawValue = n ? e : /* @__PURE__ */ Le(e), this._value = n ? e : xi(e), this.__v_isShallow = n; + } + get value() { + return process.env.NODE_ENV !== "production" ? this.dep.track({ + target: this, + type: "get", + key: "value" + }) : this.dep.track(), this._value; + } + set value(e) { + const n = this._rawValue, r = this.__v_isShallow || /* @__PURE__ */ Nn(e) || /* @__PURE__ */ $r(e); + e = r ? e : /* @__PURE__ */ Le(e), rs(e, n) && (this._rawValue = e, this._value = r ? e : xi(e), process.env.NODE_ENV !== "production" ? this.dep.trigger({ + target: this, + type: "set", + key: "value", + newValue: e, + oldValue: n + }) : this.dep.trigger()); + } +} +function WD(t) { + return /* @__PURE__ */ It(t) ? t.value : t; +} +const UD = { + get: (t, e, n) => e === "__v_raw" ? t : WD(Reflect.get(t, e, n)), + set: (t, e, n, r) => { + const i = t[e]; + return /* @__PURE__ */ It(i) && !/* @__PURE__ */ It(n) ? (i.value = n, !0) : Reflect.set(t, e, n, r); + } +}; +function qv(t) { + return /* @__PURE__ */ oo(t) ? t : new Proxy(t, UD); +} +class GD { + constructor(e, n, r) { + this.fn = e, this.setter = n, this._value = void 0, this.dep = new Jm(this), this.__v_isRef = !0, this.deps = void 0, this.depsTail = void 0, this.flags = 16, this.globalVersion = f0 - 1, this.next = void 0, this.effect = this, this.__v_isReadonly = !n, this.isSSR = r; + } + /** + * @internal + */ + notify() { + if (this.flags |= 16, !(this.flags & 8) && // avoid infinite self recursion + Ze !== this) + return Ev(this, !0), !0; + process.env.NODE_ENV; + } + get value() { + const e = process.env.NODE_ENV !== "production" ? this.dep.track({ + target: this, + type: "get", + key: "value" + }) : this.dep.track(); + return Iv(this), e && (e.version = this.dep.version), this._value; + } + set value(e) { + this.setter ? this.setter(e) : process.env.NODE_ENV !== "production" && kr("Write operation failed: computed value is readonly"); + } +} +// @__NO_SIDE_EFFECTS__ +function KD(t, e, n = !1) { + let r, i; + Oe(t) ? r = t : (r = t.get, i = t.set); + const s = new GD(r, i, n); + return process.env.NODE_ENV, s; +} +const Au = {}, nh = /* @__PURE__ */ new WeakMap(); +let Rs; +function JD(t, e = !1, n = Rs) { + if (n) { + let r = nh.get(n); + r || nh.set(n, r = []), r.push(t); + } else process.env.NODE_ENV !== "production" && !e && kr( + "onWatcherCleanup() was called when there was no active watcher to associate with." + ); +} +function YD(t, e, n = tt) { + const { immediate: r, deep: i, once: s, scheduler: o, augmentJob: l, call: a } = n, u = (_) => { + (n.onWarn || kr)( + "Invalid watch source: ", + _, + "A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types." + ); + }, c = (_) => i ? _ : /* @__PURE__ */ Nn(_) || i === !1 || i === 0 ? ji(_, 1) : ji(_); + let h, d, f, m, y = !1, b = !1; + if (/* @__PURE__ */ It(t) ? (d = () => t.value, y = /* @__PURE__ */ Nn(t)) : /* @__PURE__ */ oo(t) ? (d = () => c(t), y = !0) : Ae(t) ? (b = !0, y = t.some((_) => /* @__PURE__ */ oo(_) || /* @__PURE__ */ Nn(_)), d = () => t.map((_) => { + if (/* @__PURE__ */ It(_)) + return _.value; + if (/* @__PURE__ */ oo(_)) + return c(_); + if (Oe(_)) + return a ? a(_, 2) : _(); + process.env.NODE_ENV !== "production" && u(_); + })) : Oe(t) ? e ? d = a ? () => a(t, 2) : t : d = () => { + if (f) { + xr(); + try { + f(); + } finally { + Sr(); + } + } + const _ = Rs; + Rs = h; + try { + return a ? a(t, 3, [m]) : t(m); + } finally { + Rs = _; + } + } : (d = Ot, process.env.NODE_ENV !== "production" && u(t)), e && i) { + const _ = d, A = i === !0 ? 1 / 0 : i; + d = () => ji(_(), A); + } + const w = xD(), C = () => { + h.stop(), w && w.active && Vm(w.effects, h); + }; + if (s && e) { + const _ = e; + e = (...A) => { + _(...A), C(); + }; + } + let N = b ? new Array(t.length).fill(Au) : Au; + const B = (_) => { + if (!(!(h.flags & 1) || !h.dirty && !_)) + if (e) { + const A = h.run(); + if (i || y || (b ? A.some((L, K) => rs(L, N[K])) : rs(A, N))) { + f && f(); + const L = Rs; + Rs = h; + try { + const K = [ + A, + // pass undefined as the old value when it's changed for the first time + N === Au ? void 0 : b && N[0] === Au ? [] : N, + m + ]; + N = A, a ? a(e, 3, K) : ( + // @ts-expect-error + e(...K) + ); + } finally { + Rs = L; + } + } + } else + h.run(); + }; + return l && l(B), h = new Mv(d), h.scheduler = o ? () => o(B, !1) : B, m = (_) => JD(_, !1, h), f = h.onStop = () => { + const _ = nh.get(h); + if (_) { + if (a) + a(_, 4); + else + for (const A of _) A(); + nh.delete(h); + } + }, process.env.NODE_ENV !== "production" && (h.onTrack = n.onTrack, h.onTrigger = n.onTrigger), e ? r ? B(!0) : N = h.run() : o ? o(B.bind(null, !0), !0) : h.run(), C.pause = h.pause.bind(h), C.resume = h.resume.bind(h), C.stop = C, C; +} +function ji(t, e = 1 / 0, n) { + if (e <= 0 || !it(t) || t.__v_skip || (n = n || /* @__PURE__ */ new Map(), (n.get(t) || 0) >= e)) + return t; + if (n.set(t, e), e--, /* @__PURE__ */ It(t)) + ji(t.value, e, n); + else if (Ae(t)) + for (let r = 0; r < t.length; r++) + ji(t[r], e, n); + else if (nD(t) || Jo(t)) + t.forEach((r) => { + ji(r, e, n); + }); + else if (iD(t)) { + for (const r in t) + ji(t[r], e, n); + for (const r of Object.getOwnPropertySymbols(t)) + Object.prototype.propertyIsEnumerable.call(t, r) && ji(t[r], e, n); + } + return t; +} +/** +* @vue/runtime-core v3.5.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +const lo = []; +function pc(t) { + lo.push(t); +} +function mc() { + lo.pop(); +} +let hf = !1; +function se(t, ...e) { + if (hf) return; + hf = !0, xr(); + const n = lo.length ? lo[lo.length - 1].component : null, r = n && n.appContext.config.warnHandler, i = ZD(); + if (r) + jl( + r, + n, + 11, + [ + // eslint-disable-next-line no-restricted-syntax + t + e.map((s) => { + var o, l; + return (l = (o = s.toString) == null ? void 0 : o.call(s)) != null ? l : JSON.stringify(s); + }).join(""), + n && n.proxy, + i.map( + ({ vnode: s }) => `at <${fu(n, s.type)}>` + ).join(` +`), + i + ] + ); + else { + const s = [`[Vue warn]: ${t}`, ...e]; + i.length && s.push(` +`, ...XD(i)), console.warn(...s); + } + Sr(), hf = !1; +} +function ZD() { + let t = lo[lo.length - 1]; + if (!t) + return []; + const e = []; + for (; t; ) { + const n = e[0]; + n && n.vnode === t ? n.recurseCount++ : e.push({ + vnode: t, + recurseCount: 0 + }); + const r = t.component && t.component.parent; + t = r && r.vnode; + } + return e; +} +function XD(t) { + const e = []; + return t.forEach((n, r) => { + e.push(...r === 0 ? [] : [` +`], ...QD(n)); + }), e; +} +function QD({ vnode: t, recurseCount: e }) { + const n = e > 0 ? `... (${e} recursive calls)` : "", r = t.component ? t.component.parent == null : !1, i = ` at <${fu( + t.component, + t.type, + r + )}`, s = ">" + n; + return t.props ? [i, ...e_(t.props), s] : [i + s]; +} +function e_(t) { + const e = [], n = Object.keys(t); + return n.slice(0, 3).forEach((r) => { + e.push(...jv(r, t[r])); + }), n.length > 3 && e.push(" ..."), e; +} +function jv(t, e, n) { + return Ct(e) ? (e = JSON.stringify(e), n ? e : [`${t}=${e}`]) : typeof e == "number" || typeof e == "boolean" || e == null ? n ? e : [`${t}=${e}`] : /* @__PURE__ */ It(e) ? (e = jv(t, /* @__PURE__ */ Le(e.value), !0), n ? e : [`${t}=Ref<`, e, ">"]) : Oe(e) ? [`${t}=fn${e.name ? `<${e.name}>` : ""}`] : (e = /* @__PURE__ */ Le(e), n ? e : [`${t}=`, e]); +} +const Xm = { + sp: "serverPrefetch hook", + bc: "beforeCreate hook", + c: "created hook", + bm: "beforeMount hook", + m: "mounted hook", + bu: "beforeUpdate hook", + u: "updated", + bum: "beforeUnmount hook", + um: "unmounted hook", + a: "activated hook", + da: "deactivated hook", + ec: "errorCaptured hook", + rtc: "renderTracked hook", + rtg: "renderTriggered hook", + 0: "setup function", + 1: "render function", + 2: "watcher getter", + 3: "watcher callback", + 4: "watcher cleanup function", + 5: "native event handler", + 6: "component event handler", + 7: "vnode hook", + 8: "directive hook", + 9: "transition hook", + 10: "app errorHandler", + 11: "app warnHandler", + 12: "ref function", + 13: "async component loader", + 14: "scheduler flush", + 15: "component update", + 16: "app unmount cleanup function" +}; +function jl(t, e, n, r) { + try { + return r ? t(...r) : t(); + } catch (i) { + uu(i, e, n); + } +} +function qr(t, e, n, r) { + if (Oe(t)) { + const i = jl(t, e, n, r); + return i && Hm(i) && i.catch((s) => { + uu(s, e, n); + }), i; + } + if (Ae(t)) { + const i = []; + for (let s = 0; s < t.length; s++) + i.push(qr(t[s], e, n, r)); + return i; + } else process.env.NODE_ENV !== "production" && se( + `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof t}` + ); +} +function uu(t, e, n, r = !0) { + const i = e ? e.vnode : null, { errorHandler: s, throwUnhandledErrorInProduction: o } = e && e.appContext.config || tt; + if (e) { + let l = e.parent; + const a = e.proxy, u = process.env.NODE_ENV !== "production" ? Xm[n] : `https://vuejs.org/error-reference/#runtime-${n}`; + for (; l; ) { + const c = l.ec; + if (c) { + for (let h = 0; h < c.length; h++) + if (c[h](t, a, u) === !1) + return; + } + l = l.parent; + } + if (s) { + xr(), jl(s, null, 10, [ + t, + a, + u + ]), Sr(); + return; + } + } + t_(t, n, i, r, o); +} +function t_(t, e, n, r = !0, i = !1) { + if (process.env.NODE_ENV !== "production") { + const s = Xm[e]; + if (n && pc(n), se(`Unhandled error${s ? ` during execution of ${s}` : ""}`), n && mc(), r) + throw t; + console.error(t); + } else { + if (i) + throw t; + console.error(t); + } +} +const rn = []; +let Ir = -1; +const Yo = []; +let Vi = null, Ho = 0; +const Wv = /* @__PURE__ */ Promise.resolve(); +let rh = null; +const n_ = 100; +function r_(t) { + const e = rh || Wv; + return t ? e.then(this ? t.bind(this) : t) : e; +} +function i_(t) { + let e = Ir + 1, n = rn.length; + for (; e < n; ) { + const r = e + n >>> 1, i = rn[r], s = g0(i); + s < t || s === t && i.flags & 2 ? e = r + 1 : n = r; + } + return e; +} +function Qh(t) { + if (!(t.flags & 1)) { + const e = g0(t), n = rn[rn.length - 1]; + !n || // fast path when the job id is larger than the tail + !(t.flags & 2) && e >= g0(n) ? rn.push(t) : rn.splice(i_(e), 0, t), t.flags |= 1, Uv(); + } +} +function Uv() { + rh || (rh = Wv.then(Jv)); +} +function Gv(t) { + Ae(t) ? Yo.push(...t) : Vi && t.id === -1 ? Vi.splice(Ho + 1, 0, t) : t.flags & 1 || (Yo.push(t), t.flags |= 1), Uv(); +} +function W5(t, e, n = Ir + 1) { + for (process.env.NODE_ENV !== "production" && (e = e || /* @__PURE__ */ new Map()); n < rn.length; n++) { + const r = rn[n]; + if (r && r.flags & 2) { + if (t && r.id !== t.uid || process.env.NODE_ENV !== "production" && Qm(e, r)) + continue; + rn.splice(n, 1), n--, r.flags & 4 && (r.flags &= -2), r(), r.flags & 4 || (r.flags &= -2); + } + } +} +function Kv(t) { + if (Yo.length) { + const e = [...new Set(Yo)].sort( + (n, r) => g0(n) - g0(r) + ); + if (Yo.length = 0, Vi) { + Vi.push(...e); + return; + } + for (Vi = e, process.env.NODE_ENV !== "production" && (t = t || /* @__PURE__ */ new Map()), Ho = 0; Ho < Vi.length; Ho++) { + const n = Vi[Ho]; + process.env.NODE_ENV !== "production" && Qm(t, n) || (n.flags & 4 && (n.flags &= -2), n.flags & 8 || n(), n.flags &= -2); + } + Vi = null, Ho = 0; + } +} +const g0 = (t) => t.id == null ? t.flags & 2 ? -1 : 1 / 0 : t.id; +function Jv(t) { + process.env.NODE_ENV !== "production" && (t = t || /* @__PURE__ */ new Map()); + const e = process.env.NODE_ENV !== "production" ? (n) => Qm(t, n) : Ot; + try { + for (Ir = 0; Ir < rn.length; Ir++) { + const n = rn[Ir]; + if (n && !(n.flags & 8)) { + if (process.env.NODE_ENV !== "production" && e(n)) + continue; + n.flags & 4 && (n.flags &= -2), jl( + n, + n.i, + n.i ? 15 : 14 + ), n.flags & 4 || (n.flags &= -2); + } + } + } finally { + for (; Ir < rn.length; Ir++) { + const n = rn[Ir]; + n && (n.flags &= -2); + } + Ir = -1, rn.length = 0, Kv(t), rh = null, (rn.length || Yo.length) && Jv(t); + } +} +function Qm(t, e) { + const n = t.get(e) || 0; + if (n > n_) { + const r = e.i, i = r && Eb(r.type); + return uu( + `Maximum recursive updates exceeded${i ? ` in component <${i}>` : ""}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`, + null, + 10 + ), !0; + } + return t.set(e, n + 1), !1; +} +let pr = !1; +const gc = /* @__PURE__ */ new Map(); +process.env.NODE_ENV !== "production" && (is().__VUE_HMR_RUNTIME__ = { + createRecord: df(Yv), + rerender: df(l_), + reload: df(a_) +}); +const vo = /* @__PURE__ */ new Map(); +function s_(t) { + const e = t.type.__hmrId; + let n = vo.get(e); + n || (Yv(e, t.type), n = vo.get(e)), n.instances.add(t); +} +function o_(t) { + vo.get(t.type.__hmrId).instances.delete(t); +} +function Yv(t, e) { + return vo.has(t) ? !1 : (vo.set(t, { + initialDef: ih(e), + instances: /* @__PURE__ */ new Set() + }), !0); +} +function ih(t) { + return Ob(t) ? t.__vccOpts : t; +} +function l_(t, e) { + const n = vo.get(t); + n && (n.initialDef.render = e, [...n.instances].forEach((r) => { + e && (r.render = e, ih(r.type).render = e), r.renderCache = [], pr = !0, r.job.flags & 8 || r.update(), pr = !1; + })); +} +function a_(t, e) { + const n = vo.get(t); + if (!n) return; + e = ih(e), U5(n.initialDef, e); + const r = [...n.instances]; + for (let i = 0; i < r.length; i++) { + const s = r[i], o = ih(s.type); + let l = gc.get(o); + l || (o !== n.initialDef && U5(o, e), gc.set(o, l = /* @__PURE__ */ new Set())), l.add(s), s.appContext.propsCache.delete(s.type), s.appContext.emitsCache.delete(s.type), s.appContext.optionsCache.delete(s.type), s.ceReload ? (l.add(s), s.ceReload(e.styles), l.delete(s)) : s.parent ? Qh(() => { + s.job.flags & 8 || (pr = !0, s.parent.update(), pr = !1, l.delete(s)); + }) : s.appContext.reload ? s.appContext.reload() : typeof window < "u" ? window.location.reload() : console.warn( + "[HMR] Root or manually mounted instance modified. Full reload required." + ), s.root.ce && s !== s.root && s.root.ce._removeChildStyle(o); + } + Gv(() => { + gc.clear(); + }); +} +function U5(t, e) { + St(t, e); + for (const n in t) + n !== "__file" && !(n in e) && delete t[n]; +} +function df(t) { + return (e, n) => { + try { + return t(e, n); + } catch (r) { + console.error(r), console.warn( + "[HMR] Something went wrong during Vue component hot-reload. Full reload required." + ); + } + }; +} +let mr, xa = [], Ep = !1; +function cu(t, ...e) { + mr ? mr.emit(t, ...e) : Ep || xa.push({ event: t, args: e }); +} +function eg(t, e) { + var n, r; + mr = t, mr ? (mr.enabled = !0, xa.forEach(({ event: i, args: s }) => mr.emit(i, ...s)), xa = []) : /* handle late devtools injection - only do this if we are in an actual */ /* browser environment to avoid the timer handle stalling test runner exit */ /* (#4815) */ typeof window < "u" && // some envs mock window but not fully + window.HTMLElement && // also exclude jsdom + // eslint-disable-next-line no-restricted-syntax + !((r = (n = window.navigator) == null ? void 0 : n.userAgent) != null && r.includes("jsdom")) ? ((e.__VUE_DEVTOOLS_HOOK_REPLAY__ = e.__VUE_DEVTOOLS_HOOK_REPLAY__ || []).push((s) => { + eg(s, e); + }), setTimeout(() => { + mr || (e.__VUE_DEVTOOLS_HOOK_REPLAY__ = null, Ep = !0, xa = []); + }, 3e3)) : (Ep = !0, xa = []); +} +function u_(t, e) { + cu("app:init", t, e, { + Fragment: kn, + Text: hu, + Comment: wr, + Static: wc + }); +} +function c_(t) { + cu("app:unmount", t); +} +const h_ = /* @__PURE__ */ tg( + "component:added" + /* COMPONENT_ADDED */ +), Zv = /* @__PURE__ */ tg( + "component:updated" + /* COMPONENT_UPDATED */ +), d_ = /* @__PURE__ */ tg( + "component:removed" + /* COMPONENT_REMOVED */ +), f_ = (t) => { + mr && typeof mr.cleanupBuffer == "function" && // remove the component if it wasn't buffered + !mr.cleanupBuffer(t) && d_(t); +}; +// @__NO_SIDE_EFFECTS__ +function tg(t) { + return (e) => { + cu( + t, + e.appContext.app, + e.uid, + e.parent ? e.parent.uid : void 0, + e + ); + }; +} +const p_ = /* @__PURE__ */ Xv( + "perf:start" + /* PERFORMANCE_START */ +), m_ = /* @__PURE__ */ Xv( + "perf:end" + /* PERFORMANCE_END */ +); +function Xv(t) { + return (e, n, r) => { + cu(t, e.appContext.app, e.uid, e, n, r); + }; +} +function g_(t, e, n) { + cu( + "component:emit", + t.appContext.app, + t, + e, + n + ); +} +let Vn = null, Qv = null; +function sh(t) { + const e = Vn; + return Vn = t, Qv = t && t.type.__scopeId || null, e; +} +function y_(t, e = Vn, n) { + if (!e || t._n) + return t; + const r = (...i) => { + r._d; + const s = sh(e); + let o; + try { + o = t(...i); + } finally { + sh(s), r._d; + } + return (process.env.NODE_ENV !== "production" || __VUE_PROD_DEVTOOLS__) && Zv(e), o; + }; + return r._n = !0, r._c = !0, r._d = !0, r; +} +function eb(t) { + sD(t) && se("Do not use built-in directive ids as custom directive id: " + t); +} +function Ns(t, e, n, r) { + const i = t.dirs, s = e && e.dirs; + for (let o = 0; o < i.length; o++) { + const l = i[o]; + s && (l.oldValue = s[o].value); + let a = l.dir[r]; + a && (xr(), qr(a, n, 8, [ + t.el, + l, + t, + e + ]), Sr()); + } +} +function v_(t, e) { + if (process.env.NODE_ENV !== "production" && (!zt || zt.isMounted) && se("provide() can only be used inside setup()."), zt) { + let n = zt.provides; + const r = zt.parent && zt.parent.provides; + r === n && (n = zt.provides = Object.create(r)), n[t] = e; + } +} +function yc(t, e, n = !1) { + const r = Nb(); + if (r || Zo) { + let i = Zo ? Zo._context.provides : r ? r.parent == null || r.ce ? r.vnode.appContext && r.vnode.appContext.provides : r.parent.provides : void 0; + if (i && t in i) + return i[t]; + if (arguments.length > 1) + return n && Oe(e) ? e.call(r && r.proxy) : e; + process.env.NODE_ENV !== "production" && se(`injection "${String(t)}" not found.`); + } else process.env.NODE_ENV !== "production" && se("inject() can only be used inside setup() or functional components."); +} +const b_ = /* @__PURE__ */ Symbol.for("v-scx"), w_ = () => { + { + const t = yc(b_); + return t || process.env.NODE_ENV !== "production" && se( + "Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build." + ), t; + } +}; +function tb(t, e) { + return ng(t, null, e); +} +function vc(t, e, n) { + return process.env.NODE_ENV !== "production" && !Oe(e) && se( + "`watch(fn, options?)` signature has been moved to a separate API. Use `watchEffect(fn, options?)` instead. `watch` now only supports `watch(source, cb, options?) signature." + ), ng(t, e, n); +} +function ng(t, e, n = tt) { + const { immediate: r, deep: i, flush: s, once: o } = n; + process.env.NODE_ENV !== "production" && !e && (r !== void 0 && se( + 'watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.' + ), i !== void 0 && se( + 'watch() "deep" option is only respected when using the watch(source, callback, options?) signature.' + ), o !== void 0 && se( + 'watch() "once" option is only respected when using the watch(source, callback, options?) signature.' + )); + const l = St({}, n); + process.env.NODE_ENV !== "production" && (l.onWarn = se); + const a = e && r || !e && s !== "post"; + let u; + if (y0) { + if (s === "sync") { + const f = w_(); + u = f.__watcherHandles || (f.__watcherHandles = []); + } else if (!a) { + const f = () => { + }; + return f.stop = Ot, f.resume = Ot, f.pause = Ot, f; + } + } + const c = zt; + l.call = (f, m, y) => qr(f, c, m, y); + let h = !1; + s === "post" ? l.scheduler = (f) => { + Rn(f, c && c.suspense); + } : s !== "sync" && (h = !0, l.scheduler = (f, m) => { + m ? f() : Qh(f); + }), l.augmentJob = (f) => { + e && (f.flags |= 4), h && (f.flags |= 2, c && (f.id = c.uid, f.i = c)); + }; + const d = YD(t, e, l); + return y0 && (u ? u.push(d) : a && d()), d; +} +function k_(t, e, n) { + const r = this.proxy, i = Ct(t) ? t.includes(".") ? nb(r, t) : () => r[t] : t.bind(r, r); + let s; + Oe(e) ? s = e : (s = e.handler, n = e); + const o = du(this), l = ng(i, s.bind(r), n); + return o(), l; +} +function nb(t, e) { + const n = e.split("."); + return () => { + let r = t; + for (let i = 0; i < n.length && r; i++) + r = r[n[i]]; + return r; + }; +} +const x_ = /* @__PURE__ */ Symbol("_vte"), S_ = (t) => t.__isTeleport, C_ = /* @__PURE__ */ Symbol("_leaveCb"); +function rg(t, e) { + t.shapeFlag & 6 && t.component ? (t.transition = e, rg(t.component.subTree, e)) : t.shapeFlag & 128 ? (t.ssContent.transition = e.clone(t.ssContent), t.ssFallback.transition = e.clone(t.ssFallback)) : t.transition = e; +} +// @__NO_SIDE_EFFECTS__ +function Wl(t, e) { + return Oe(t) ? ( + // #8236: extend call and options.name access are considered side-effects + // by Rollup, so we have to wrap it in a pure-annotated IIFE. + St({ name: t.name }, e, { setup: t }) + ) : t; +} +function rb(t) { + t.ids = [t.ids[0] + t.ids[2]++ + "-", 0, 0]; +} +const G5 = /* @__PURE__ */ new WeakSet(), oh = /* @__PURE__ */ new WeakMap(); +function Ka(t, e, n, r, i = !1) { + if (Ae(t)) { + t.forEach( + (y, b) => Ka( + y, + e && (Ae(e) ? e[b] : e), + n, + r, + i + ) + ); + return; + } + if (Ja(r) && !i) { + r.shapeFlag & 512 && r.type.__asyncResolved && r.component.subTree.component && Ka(t, e, n, r.component.subTree); + return; + } + const s = r.shapeFlag & 4 ? hg(r.component) : r.el, o = i ? null : s, { i: l, r: a } = t; + if (process.env.NODE_ENV !== "production" && !l) { + se( + "Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function." + ); + return; + } + const u = e && e.r, c = l.refs === tt ? l.refs = {} : l.refs, h = l.setupState, d = /* @__PURE__ */ Le(h), f = h === tt ? Cv : (y) => process.env.NODE_ENV !== "production" && ($e(d, y) && !/* @__PURE__ */ It(d[y]) && se( + `Template ref "${y}" used on a non-ref value. It will not work in the production build.` + ), G5.has(d[y])) ? !1 : $e(d, y), m = (y) => process.env.NODE_ENV === "production" || !G5.has(y); + if (u != null && u !== a) { + if (K5(e), Ct(u)) + c[u] = null, f(u) && (h[u] = null); + else if (/* @__PURE__ */ It(u)) { + m(u) && (u.value = null); + const y = e; + y.k && (c[y.k] = null); + } + } + if (Oe(a)) + jl(a, l, 12, [o, c]); + else { + const y = Ct(a), b = /* @__PURE__ */ It(a); + if (y || b) { + const w = () => { + if (t.f) { + const C = y ? f(a) ? h[a] : c[a] : m(a) || !t.k ? a.value : c[t.k]; + if (i) + Ae(C) && Vm(C, s); + else if (Ae(C)) + C.includes(s) || C.push(s); + else if (y) + c[a] = [s], f(a) && (h[a] = c[a]); + else { + const N = [s]; + m(a) && (a.value = N), t.k && (c[t.k] = N); + } + } else y ? (c[a] = o, f(a) && (h[a] = o)) : b ? (m(a) && (a.value = o), t.k && (c[t.k] = o)) : process.env.NODE_ENV !== "production" && se("Invalid template ref type:", a, `(${typeof a})`); + }; + if (o) { + const C = () => { + w(), oh.delete(t); + }; + C.id = -1, oh.set(t, C), Rn(C, n); + } else + K5(t), w(); + } else process.env.NODE_ENV !== "production" && se("Invalid template ref type:", a, `(${typeof a})`); + } +} +function K5(t) { + const e = oh.get(t); + e && (e.flags |= 8, oh.delete(t)); +} +is().requestIdleCallback; +is().cancelIdleCallback; +const Ja = (t) => !!t.type.__asyncLoader, ig = (t) => t.type.__isKeepAlive; +function N_(t, e) { + ib(t, "a", e); +} +function M_(t, e) { + ib(t, "da", e); +} +function ib(t, e, n = zt) { + const r = t.__wdc || (t.__wdc = () => { + let i = n; + for (; i; ) { + if (i.isDeactivated) + return; + i = i.parent; + } + return t(); + }); + if (ed(e, r, n), n) { + let i = n.parent; + for (; i && i.parent; ) + ig(i.parent.vnode) && T_(r, e, n, i), i = i.parent; + } +} +function T_(t, e, n, r) { + const i = ed( + e, + t, + r, + !0 + /* prepend */ + ); + sg(() => { + Vm(r[e], i); + }, n); +} +function ed(t, e, n = zt, r = !1) { + if (n) { + const i = n[t] || (n[t] = []), s = e.__weh || (e.__weh = (...o) => { + xr(); + const l = du(n), a = qr(e, n, t, o); + return l(), Sr(), a; + }); + return r ? i.unshift(s) : i.push(s), s; + } else if (process.env.NODE_ENV !== "production") { + const i = _s(Xm[t].replace(/ hook$/, "")); + se( + `${i} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` + ); + } +} +const Oi = (t) => (e, n = zt) => { + (!y0 || t === "sp") && ed(t, (...r) => e(...r), n); +}, E_ = Oi("bm"), O_ = Oi("m"), A_ = Oi( + "bu" +), I_ = Oi("u"), D_ = Oi( + "bum" +), sg = Oi("um"), __ = Oi( + "sp" +), R_ = Oi("rtg"), z_ = Oi("rtc"); +function P_(t, e = zt) { + ed("ec", t, e); +} +const B_ = /* @__PURE__ */ Symbol.for("v-ndc"), Op = (t) => t ? Mb(t) ? hg(t) : Op(t.parent) : null, ao = ( + // Move PURE marker to new line to workaround compiler discarding it + // due to type annotation + /* @__PURE__ */ St(/* @__PURE__ */ Object.create(null), { + $: (t) => t, + $el: (t) => t.vnode.el, + $data: (t) => t.data, + $props: (t) => process.env.NODE_ENV !== "production" ? /* @__PURE__ */ Pr(t.props) : t.props, + $attrs: (t) => process.env.NODE_ENV !== "production" ? /* @__PURE__ */ Pr(t.attrs) : t.attrs, + $slots: (t) => process.env.NODE_ENV !== "production" ? /* @__PURE__ */ Pr(t.slots) : t.slots, + $refs: (t) => process.env.NODE_ENV !== "production" ? /* @__PURE__ */ Pr(t.refs) : t.refs, + $parent: (t) => Op(t.parent), + $root: (t) => Op(t.root), + $host: (t) => t.ce, + $emit: (t) => t.emit, + $options: (t) => __VUE_OPTIONS_API__ ? lb(t) : t.type, + $forceUpdate: (t) => t.f || (t.f = () => { + Qh(t.update); + }), + $nextTick: (t) => t.n || (t.n = r_.bind(t.proxy)), + $watch: (t) => __VUE_OPTIONS_API__ ? k_.bind(t) : Ot + }) +), og = (t) => t === "_" || t === "$", ff = (t, e) => t !== tt && !t.__isScriptSetup && $e(t, e), sb = { + get({ _: t }, e) { + if (e === "__v_skip") + return !0; + const { ctx: n, setupState: r, data: i, props: s, accessCache: o, type: l, appContext: a } = t; + if (process.env.NODE_ENV !== "production" && e === "__isVue") + return !0; + if (e[0] !== "$") { + const d = o[e]; + if (d !== void 0) + switch (d) { + case 1: + return r[e]; + case 2: + return i[e]; + case 4: + return n[e]; + case 3: + return s[e]; + } + else { + if (ff(r, e)) + return o[e] = 1, r[e]; + if (__VUE_OPTIONS_API__ && i !== tt && $e(i, e)) + return o[e] = 2, i[e]; + if ($e(s, e)) + return o[e] = 3, s[e]; + if (n !== tt && $e(n, e)) + return o[e] = 4, n[e]; + (!__VUE_OPTIONS_API__ || Ap) && (o[e] = 0); + } + } + const u = ao[e]; + let c, h; + if (u) + return e === "$attrs" ? (Pt(t.attrs, "get", ""), process.env.NODE_ENV !== "production" && ah()) : process.env.NODE_ENV !== "production" && e === "$slots" && Pt(t, "get", e), u(t); + if ( + // css module (injected by vue-loader) + (c = l.__cssModules) && (c = c[e]) + ) + return c; + if (n !== tt && $e(n, e)) + return o[e] = 4, n[e]; + if ( + // global properties + h = a.config.globalProperties, $e(h, e) + ) + return h[e]; + process.env.NODE_ENV !== "production" && Vn && (!Ct(e) || // #1091 avoid internal isRef/isVNode checks on component instance leading + // to infinite warning loop + e.indexOf("__v") !== 0) && (i !== tt && og(e[0]) && $e(i, e) ? se( + `Property ${JSON.stringify( + e + )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.` + ) : t === Vn && se( + `Property ${JSON.stringify(e)} was accessed during render but is not defined on instance.` + )); + }, + set({ _: t }, e, n) { + const { data: r, setupState: i, ctx: s } = t; + return ff(i, e) ? (i[e] = n, !0) : process.env.NODE_ENV !== "production" && i.__isScriptSetup && $e(i, e) ? (se(`Cannot mutate <script setup> binding "${e}" from Options API.`), !1) : __VUE_OPTIONS_API__ && r !== tt && $e(r, e) ? (r[e] = n, !0) : $e(t.props, e) ? (process.env.NODE_ENV !== "production" && se(`Attempting to mutate prop "${e}". Props are readonly.`), !1) : e[0] === "$" && e.slice(1) in t ? (process.env.NODE_ENV !== "production" && se( + `Attempting to mutate public property "${e}". Properties starting with $ are reserved and readonly.` + ), !1) : (process.env.NODE_ENV !== "production" && e in t.appContext.config.globalProperties ? Object.defineProperty(s, e, { + enumerable: !0, + configurable: !0, + value: n + }) : s[e] = n, !0); + }, + has({ + _: { data: t, setupState: e, accessCache: n, ctx: r, appContext: i, props: s, type: o } + }, l) { + let a; + return !!(n[l] || __VUE_OPTIONS_API__ && t !== tt && l[0] !== "$" && $e(t, l) || ff(e, l) || $e(s, l) || $e(r, l) || $e(ao, l) || $e(i.config.globalProperties, l) || (a = o.__cssModules) && a[l]); + }, + defineProperty(t, e, n) { + return n.get != null ? t._.accessCache[e] = 0 : $e(n, "value") && this.set(t, e, n.value, null), Reflect.defineProperty(t, e, n); + } +}; +process.env.NODE_ENV !== "production" && (sb.ownKeys = (t) => (se( + "Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead." +), Reflect.ownKeys(t))); +function L_(t) { + const e = {}; + return Object.defineProperty(e, "_", { + configurable: !0, + enumerable: !1, + get: () => t + }), Object.keys(ao).forEach((n) => { + Object.defineProperty(e, n, { + configurable: !0, + enumerable: !1, + get: () => ao[n](t), + // intercepted by the proxy so no need for implementation, + // but needed to prevent set errors + set: Ot + }); + }), e; +} +function F_(t) { + const { + ctx: e, + propsOptions: [n] + } = t; + n && Object.keys(n).forEach((r) => { + Object.defineProperty(e, r, { + enumerable: !0, + configurable: !0, + get: () => t.props[r], + set: Ot + }); + }); +} +function V_(t) { + const { ctx: e, setupState: n } = t; + Object.keys(/* @__PURE__ */ Le(n)).forEach((r) => { + if (!n.__isScriptSetup) { + if (og(r[0])) { + se( + `setup() return property ${JSON.stringify( + r + )} should not start with "$" or "_" which are reserved prefixes for Vue internals.` + ); + return; + } + Object.defineProperty(e, r, { + enumerable: !0, + configurable: !0, + get: () => n[r], + set: Ot + }); + } + }); +} +function J5(t) { + return Ae(t) ? t.reduce( + (e, n) => (e[n] = null, e), + {} + ) : t; +} +function H_() { + const t = /* @__PURE__ */ Object.create(null); + return (e, n) => { + t[n] ? se(`${e} property "${n}" is already defined in ${t[n]}.`) : t[n] = e; + }; +} +let Ap = !0; +function $_(t) { + const e = lb(t), n = t.proxy, r = t.ctx; + Ap = !1, e.beforeCreate && Y5(e.beforeCreate, t, "bc"); + const { + // state + data: i, + computed: s, + methods: o, + watch: l, + provide: a, + inject: u, + // lifecycle + created: c, + beforeMount: h, + mounted: d, + beforeUpdate: f, + updated: m, + activated: y, + deactivated: b, + beforeDestroy: w, + beforeUnmount: C, + destroyed: N, + unmounted: B, + render: _, + renderTracked: A, + renderTriggered: L, + errorCaptured: K, + serverPrefetch: J, + // public API + expose: P, + inheritAttrs: ie, + // assets + components: ne, + directives: _e, + filters: De + } = e, ge = process.env.NODE_ENV !== "production" ? H_() : null; + if (process.env.NODE_ENV !== "production") { + const [fe] = t.propsOptions; + if (fe) + for (const ye in fe) + ge("Props", ye); + } + if (u && q_(u, r, ge), o) + for (const fe in o) { + const ye = o[fe]; + Oe(ye) ? (process.env.NODE_ENV !== "production" ? Object.defineProperty(r, fe, { + value: ye.bind(n), + configurable: !0, + enumerable: !0, + writable: !0 + }) : r[fe] = ye.bind(n), process.env.NODE_ENV !== "production" && ge("Methods", fe)) : process.env.NODE_ENV !== "production" && se( + `Method "${fe}" has type "${typeof ye}" in the component definition. Did you reference the function correctly?` + ); + } + if (i) { + process.env.NODE_ENV !== "production" && !Oe(i) && se( + "The data option must be a function. Plain object usage is no longer supported." + ); + const fe = i.call(n, n); + if (process.env.NODE_ENV !== "production" && Hm(fe) && se( + "data() returned a Promise - note data() cannot be async; If you intend to perform data fetching before component renders, use async setup() + <Suspense>." + ), !it(fe)) + process.env.NODE_ENV !== "production" && se("data() should return an object."); + else if (t.data = /* @__PURE__ */ Zm(fe), process.env.NODE_ENV !== "production") + for (const ye in fe) + ge("Data", ye), og(ye[0]) || Object.defineProperty(r, ye, { + configurable: !0, + enumerable: !0, + get: () => fe[ye], + set: Ot + }); + } + if (Ap = !0, s) + for (const fe in s) { + const ye = s[fe], nt = Oe(ye) ? ye.bind(n, n) : Oe(ye.get) ? ye.get.bind(n, n) : Ot; + process.env.NODE_ENV !== "production" && nt === Ot && se(`Computed property "${fe}" has no getter.`); + const E = !Oe(ye) && Oe(ye.set) ? ye.set.bind(n) : process.env.NODE_ENV !== "production" ? () => { + se( + `Write operation failed: computed property "${fe}" is readonly.` + ); + } : Ot, Qe = dg({ + get: nt, + set: E + }); + Object.defineProperty(r, fe, { + enumerable: !0, + configurable: !0, + get: () => Qe.value, + set: (Ue) => Qe.value = Ue + }), process.env.NODE_ENV !== "production" && ge("Computed", fe); + } + if (l) + for (const fe in l) + ob(l[fe], r, n, fe); + if (a) { + const fe = Oe(a) ? a.call(n) : a; + Reflect.ownKeys(fe).forEach((ye) => { + v_(ye, fe[ye]); + }); + } + c && Y5(c, t, "c"); + function Re(fe, ye) { + Ae(ye) ? ye.forEach((nt) => fe(nt.bind(n))) : ye && fe(ye.bind(n)); + } + if (Re(E_, h), Re(O_, d), Re(A_, f), Re(I_, m), Re(N_, y), Re(M_, b), Re(P_, K), Re(z_, A), Re(R_, L), Re(D_, C), Re(sg, B), Re(__, J), Ae(P)) + if (P.length) { + const fe = t.exposed || (t.exposed = {}); + P.forEach((ye) => { + Object.defineProperty(fe, ye, { + get: () => n[ye], + set: (nt) => n[ye] = nt, + enumerable: !0 + }); + }); + } else t.exposed || (t.exposed = {}); + _ && t.render === Ot && (t.render = _), ie != null && (t.inheritAttrs = ie), ne && (t.components = ne), _e && (t.directives = _e), J && rb(t); +} +function q_(t, e, n = Ot) { + Ae(t) && (t = Ip(t)); + for (const r in t) { + const i = t[r]; + let s; + it(i) ? "default" in i ? s = yc( + i.from || r, + i.default, + !0 + ) : s = yc(i.from || r) : s = yc(i), /* @__PURE__ */ It(s) ? Object.defineProperty(e, r, { + enumerable: !0, + configurable: !0, + get: () => s.value, + set: (o) => s.value = o + }) : e[r] = s, process.env.NODE_ENV !== "production" && n("Inject", r); + } +} +function Y5(t, e, n) { + qr( + Ae(t) ? t.map((r) => r.bind(e.proxy)) : t.bind(e.proxy), + e, + n + ); +} +function ob(t, e, n, r) { + let i = r.includes(".") ? nb(n, r) : () => n[r]; + if (Ct(t)) { + const s = e[t]; + Oe(s) ? vc(i, s) : process.env.NODE_ENV !== "production" && se(`Invalid watch handler specified by key "${t}"`, s); + } else if (Oe(t)) + vc(i, t.bind(n)); + else if (it(t)) + if (Ae(t)) + t.forEach((s) => ob(s, e, n, r)); + else { + const s = Oe(t.handler) ? t.handler.bind(n) : e[t.handler]; + Oe(s) ? vc(i, s, t) : process.env.NODE_ENV !== "production" && se(`Invalid watch handler specified by key "${t.handler}"`, s); + } + else process.env.NODE_ENV !== "production" && se(`Invalid watch option: "${r}"`, t); +} +function lb(t) { + const e = t.type, { mixins: n, extends: r } = e, { + mixins: i, + optionsCache: s, + config: { optionMergeStrategies: o } + } = t.appContext, l = s.get(e); + let a; + return l ? a = l : !i.length && !n && !r ? a = e : (a = {}, i.length && i.forEach( + (u) => lh(a, u, o, !0) + ), lh(a, e, o)), it(e) && s.set(e, a), a; +} +function lh(t, e, n, r = !1) { + const { mixins: i, extends: s } = e; + s && lh(t, s, n, !0), i && i.forEach( + (o) => lh(t, o, n, !0) + ); + for (const o in e) + if (r && o === "expose") + process.env.NODE_ENV !== "production" && se( + '"expose" option is ignored when declared in mixins or extends. It should only be declared in the base component itself.' + ); + else { + const l = j_[o] || n && n[o]; + t[o] = l ? l(t[o], e[o]) : e[o]; + } + return t; +} +const j_ = { + data: Z5, + props: X5, + emits: X5, + // objects + methods: Sa, + computed: Sa, + // lifecycle + beforeCreate: nn, + created: nn, + beforeMount: nn, + mounted: nn, + beforeUpdate: nn, + updated: nn, + beforeDestroy: nn, + beforeUnmount: nn, + destroyed: nn, + unmounted: nn, + activated: nn, + deactivated: nn, + errorCaptured: nn, + serverPrefetch: nn, + // assets + components: Sa, + directives: Sa, + // watch + watch: U_, + // provide / inject + provide: Z5, + inject: W_ +}; +function Z5(t, e) { + return e ? t ? function() { + return St( + Oe(t) ? t.call(this, this) : t, + Oe(e) ? e.call(this, this) : e + ); + } : e : t; +} +function W_(t, e) { + return Sa(Ip(t), Ip(e)); +} +function Ip(t) { + if (Ae(t)) { + const e = {}; + for (let n = 0; n < t.length; n++) + e[t[n]] = t[n]; + return e; + } + return t; +} +function nn(t, e) { + return t ? [...new Set([].concat(t, e))] : e; +} +function Sa(t, e) { + return t ? St(/* @__PURE__ */ Object.create(null), t, e) : e; +} +function X5(t, e) { + return t ? Ae(t) && Ae(e) ? [.../* @__PURE__ */ new Set([...t, ...e])] : St( + /* @__PURE__ */ Object.create(null), + J5(t), + J5(e ?? {}) + ) : e; +} +function U_(t, e) { + if (!t) return e; + if (!e) return t; + const n = St(/* @__PURE__ */ Object.create(null), t); + for (const r in e) + n[r] = nn(t[r], e[r]); + return n; +} +function ab() { + return { + app: null, + config: { + isNativeTag: Cv, + performance: !1, + globalProperties: {}, + optionMergeStrategies: {}, + errorHandler: void 0, + warnHandler: void 0, + compilerOptions: {} + }, + mixins: [], + components: {}, + directives: {}, + provides: /* @__PURE__ */ Object.create(null), + optionsCache: /* @__PURE__ */ new WeakMap(), + propsCache: /* @__PURE__ */ new WeakMap(), + emitsCache: /* @__PURE__ */ new WeakMap() + }; +} +let G_ = 0; +function K_(t, e) { + return function(r, i = null) { + Oe(r) || (r = St({}, r)), i != null && !it(i) && (process.env.NODE_ENV !== "production" && se("root props passed to app.mount() must be an object."), i = null); + const s = ab(), o = /* @__PURE__ */ new WeakSet(), l = []; + let a = !1; + const u = s.app = { + _uid: G_++, + _component: r, + _props: i, + _container: null, + _context: s, + _instance: null, + version: u3, + get config() { + return s.config; + }, + set config(c) { + process.env.NODE_ENV !== "production" && se( + "app.config cannot be replaced. Modify individual options instead." + ); + }, + use(c, ...h) { + return o.has(c) ? process.env.NODE_ENV !== "production" && se("Plugin has already been applied to target app.") : c && Oe(c.install) ? (o.add(c), c.install(u, ...h)) : Oe(c) ? (o.add(c), c(u, ...h)) : process.env.NODE_ENV !== "production" && se( + 'A plugin must either be a function or an object with an "install" function.' + ), u; + }, + mixin(c) { + return __VUE_OPTIONS_API__ ? s.mixins.includes(c) ? process.env.NODE_ENV !== "production" && se( + "Mixin has already been applied to target app" + (c.name ? `: ${c.name}` : "") + ) : s.mixins.push(c) : process.env.NODE_ENV !== "production" && se("Mixins are only available in builds supporting Options API"), u; + }, + component(c, h) { + return process.env.NODE_ENV !== "production" && Pp(c, s.config), h ? (process.env.NODE_ENV !== "production" && s.components[c] && se(`Component "${c}" has already been registered in target app.`), s.components[c] = h, u) : s.components[c]; + }, + directive(c, h) { + return process.env.NODE_ENV !== "production" && eb(c), h ? (process.env.NODE_ENV !== "production" && s.directives[c] && se(`Directive "${c}" has already been registered in target app.`), s.directives[c] = h, u) : s.directives[c]; + }, + mount(c, h, d) { + if (a) + process.env.NODE_ENV !== "production" && se( + "App has already been mounted.\nIf you want to remount the same app, move your app creation logic into a factory function and create fresh app instances for each mount - e.g. `const createMyApp = () => createApp(App)`" + ); + else { + process.env.NODE_ENV !== "production" && c.__vue_app__ && se( + "There is already an app instance mounted on the host container.\n If you want to mount another app on the same host container, you need to unmount the previous app by calling `app.unmount()` first." + ); + const f = u._ceVNode || gr(r, i); + return f.appContext = s, d === !0 ? d = "svg" : d === !1 && (d = void 0), process.env.NODE_ENV !== "production" && (s.reload = () => { + const m = hs(f); + m.el = null, t(m, c, d); + }), t(f, c, d), a = !0, u._container = c, c.__vue_app__ = u, (process.env.NODE_ENV !== "production" || __VUE_PROD_DEVTOOLS__) && (u._instance = f.component, u_(u, u3)), hg(f.component); + } + }, + onUnmount(c) { + process.env.NODE_ENV !== "production" && typeof c != "function" && se( + `Expected function as first argument to app.onUnmount(), but got ${typeof c}` + ), l.push(c); + }, + unmount() { + a ? (qr( + l, + u._instance, + 16 + ), t(null, u._container), (process.env.NODE_ENV !== "production" || __VUE_PROD_DEVTOOLS__) && (u._instance = null, c_(u)), delete u._container.__vue_app__) : process.env.NODE_ENV !== "production" && se("Cannot unmount an app that is not mounted."); + }, + provide(c, h) { + return process.env.NODE_ENV !== "production" && c in s.provides && ($e(s.provides, c) ? se( + `App already provides property with key "${String(c)}". It will be overwritten with the new value.` + ) : se( + `App already provides property with key "${String(c)}" inherited from its parent element. It will be overwritten with the new value.` + )), s.provides[c] = h, u; + }, + runWithContext(c) { + const h = Zo; + Zo = u; + try { + return c(); + } finally { + Zo = h; + } + } + }; + return u; + }; +} +let Zo = null; +const J_ = (t, e) => e === "modelValue" || e === "model-value" ? t.modelModifiers : t[`${e}Modifiers`] || t[`${vr(e)}Modifiers`] || t[`${cs(e)}Modifiers`]; +function Y_(t, e, ...n) { + if (t.isUnmounted) return; + const r = t.vnode.props || tt; + if (process.env.NODE_ENV !== "production") { + const { + emitsOptions: c, + propsOptions: [h] + } = t; + if (c) + if (!(e in c)) + (!h || !(_s(vr(e)) in h)) && se( + `Component emitted event "${e}" but it is neither declared in the emits option nor as an "${_s(vr(e))}" prop.` + ); + else { + const d = c[e]; + Oe(d) && (d(...n) || se( + `Invalid event arguments: event validation failed for event "${e}".` + )); + } + } + let i = n; + const s = e.startsWith("update:"), o = s && J_(r, e.slice(7)); + if (o && (o.trim && (i = n.map((c) => Ct(c) ? c.trim() : c)), o.number && (i = n.map(aD))), (process.env.NODE_ENV !== "production" || __VUE_PROD_DEVTOOLS__) && g_(t, e, i), process.env.NODE_ENV !== "production") { + const c = e.toLowerCase(); + c !== e && r[_s(c)] && se( + `Event "${c}" is emitted in component ${fu( + t, + t.type + )} but the handler is registered for "${e}". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "${cs( + e + )}" instead of "${e}".` + ); + } + let l, a = r[l = _s(e)] || // also try camelCase event handler (#2249) + r[l = _s(vr(e))]; + !a && s && (a = r[l = _s(cs(e))]), a && qr( + a, + t, + 6, + i + ); + const u = r[l + "Once"]; + if (u) { + if (!t.emitted) + t.emitted = {}; + else if (t.emitted[l]) + return; + t.emitted[l] = !0, qr( + u, + t, + 6, + i + ); + } +} +const Z_ = /* @__PURE__ */ new WeakMap(); +function ub(t, e, n = !1) { + const r = __VUE_OPTIONS_API__ && n ? Z_ : e.emitsCache, i = r.get(t); + if (i !== void 0) + return i; + const s = t.emits; + let o = {}, l = !1; + if (__VUE_OPTIONS_API__ && !Oe(t)) { + const a = (u) => { + const c = ub(u, e, !0); + c && (l = !0, St(o, c)); + }; + !n && e.mixins.length && e.mixins.forEach(a), t.extends && a(t.extends), t.mixins && t.mixins.forEach(a); + } + return !s && !l ? (it(t) && r.set(t, null), null) : (Ae(s) ? s.forEach((a) => o[a] = null) : St(o, s), it(t) && r.set(t, o), o); +} +function td(t, e) { + return !t || !au(e) ? !1 : (e = e.slice(2).replace(/Once$/, ""), $e(t, e[0].toLowerCase() + e.slice(1)) || $e(t, cs(e)) || $e(t, e)); +} +let Dp = !1; +function ah() { + Dp = !0; +} +function Q5(t) { + const { + type: e, + vnode: n, + proxy: r, + withProxy: i, + propsOptions: [s], + slots: o, + attrs: l, + emit: a, + render: u, + renderCache: c, + props: h, + data: d, + setupState: f, + ctx: m, + inheritAttrs: y + } = t, b = sh(t); + let w, C; + process.env.NODE_ENV !== "production" && (Dp = !1); + try { + if (n.shapeFlag & 4) { + const _ = i || r, A = process.env.NODE_ENV !== "production" && f.__isScriptSetup ? new Proxy(_, { + get(L, K, J) { + return se( + `Property '${String( + K + )}' was accessed via 'this'. Avoid using 'this' in templates.` + ), Reflect.get(L, K, J); + } + }) : _; + w = hr( + u.call( + A, + _, + c, + process.env.NODE_ENV !== "production" ? /* @__PURE__ */ Pr(h) : h, + f, + d, + m + ) + ), C = l; + } else { + const _ = e; + process.env.NODE_ENV !== "production" && l === h && ah(), w = hr( + _.length > 1 ? _( + process.env.NODE_ENV !== "production" ? /* @__PURE__ */ Pr(h) : h, + process.env.NODE_ENV !== "production" ? { + get attrs() { + return ah(), /* @__PURE__ */ Pr(l); + }, + slots: o, + emit: a + } : { attrs: l, slots: o, emit: a } + ) : _( + process.env.NODE_ENV !== "production" ? /* @__PURE__ */ Pr(h) : h, + null + ) + ), C = e.props ? l : X_(l); + } + } catch (_) { + uu(_, t, 1), w = gr(wr); + } + let N = w, B; + if (process.env.NODE_ENV !== "production" && w.patchFlag > 0 && w.patchFlag & 2048 && ([N, B] = cb(w)), C && y !== !1) { + const _ = Object.keys(C), { shapeFlag: A } = N; + if (_.length) { + if (A & 7) + s && _.some(Qc) && (C = Q_( + C, + s + )), N = hs(N, C, !1, !0); + else if (process.env.NODE_ENV !== "production" && !Dp && N.type !== wr) { + const L = Object.keys(l), K = [], J = []; + for (let P = 0, ie = L.length; P < ie; P++) { + const ne = L[P]; + au(ne) ? Qc(ne) || K.push(ne[2].toLowerCase() + ne.slice(3)) : J.push(ne); + } + J.length && se( + `Extraneous non-props attributes (${J.join(", ")}) were passed to component but could not be automatically inherited because component renders fragment or text or teleport root nodes.` + ), K.length && se( + `Extraneous non-emits event listeners (${K.join(", ")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the "emits" option.` + ); + } + } + } + return n.dirs && (process.env.NODE_ENV !== "production" && !e3(N) && se( + "Runtime directive used on component with non-element root node. The directives will not function as intended." + ), N = hs(N, null, !1, !0), N.dirs = N.dirs ? N.dirs.concat(n.dirs) : n.dirs), n.transition && (process.env.NODE_ENV !== "production" && !e3(N) && se( + "Component inside <Transition> renders non-element root node that cannot be animated." + ), rg(N, n.transition)), process.env.NODE_ENV !== "production" && B ? B(N) : w = N, sh(b), w; +} +const cb = (t) => { + const e = t.children, n = t.dynamicChildren, r = lg(e, !1); + if (r) { + if (process.env.NODE_ENV !== "production" && r.patchFlag > 0 && r.patchFlag & 2048) + return cb(r); + } else return [t, void 0]; + const i = e.indexOf(r), s = n ? n.indexOf(r) : -1, o = (l) => { + e[i] = l, n && (s > -1 ? n[s] = l : l.patchFlag > 0 && (t.dynamicChildren = [...n, l])); + }; + return [hr(r), o]; +}; +function lg(t, e = !0) { + let n; + for (let r = 0; r < t.length; r++) { + const i = t[r]; + if (_l(i)) { + if (i.type !== wr || i.children === "v-if") { + if (n) + return; + if (n = i, process.env.NODE_ENV !== "production" && e && n.patchFlag > 0 && n.patchFlag & 2048) + return lg(n.children); + } + } else + return; + } + return n; +} +const X_ = (t) => { + let e; + for (const n in t) + (n === "class" || n === "style" || au(n)) && ((e || (e = {}))[n] = t[n]); + return e; +}, Q_ = (t, e) => { + const n = {}; + for (const r in t) + (!Qc(r) || !(r.slice(9) in e)) && (n[r] = t[r]); + return n; +}, e3 = (t) => t.shapeFlag & 7 || t.type === wr; +function eR(t, e, n) { + const { props: r, children: i, component: s } = t, { props: o, children: l, patchFlag: a } = e, u = s.emitsOptions; + if (process.env.NODE_ENV !== "production" && (i || l) && pr || e.dirs || e.transition) + return !0; + if (n && a >= 0) { + if (a & 1024) + return !0; + if (a & 16) + return r ? t3(r, o, u) : !!o; + if (a & 8) { + const c = e.dynamicProps; + for (let h = 0; h < c.length; h++) { + const d = c[h]; + if (o[d] !== r[d] && !td(u, d)) + return !0; + } + } + } else + return (i || l) && (!l || !l.$stable) ? !0 : r === o ? !1 : r ? o ? t3(r, o, u) : !0 : !!o; + return !1; +} +function t3(t, e, n) { + const r = Object.keys(e); + if (r.length !== Object.keys(t).length) + return !0; + for (let i = 0; i < r.length; i++) { + const s = r[i]; + if (e[s] !== t[s] && !td(n, s)) + return !0; + } + return !1; +} +function tR({ vnode: t, parent: e }, n) { + for (; e; ) { + const r = e.subTree; + if (r.suspense && r.suspense.activeBranch === t && (r.el = t.el), r === t) + (t = e.vnode).el = n, e = e.parent; + else + break; + } +} +const hb = {}, db = () => Object.create(hb), fb = (t) => Object.getPrototypeOf(t) === hb; +function nR(t, e, n, r = !1) { + const i = {}, s = db(); + t.propsDefaults = /* @__PURE__ */ Object.create(null), pb(t, e, i, s); + for (const o in t.propsOptions[0]) + o in i || (i[o] = void 0); + process.env.NODE_ENV !== "production" && gb(e || {}, i, t), n ? t.props = r ? i : /* @__PURE__ */ HD(i) : t.type.props ? t.props = i : t.props = s, t.attrs = s; +} +function rR(t) { + for (; t; ) { + if (t.type.__hmrId) return !0; + t = t.parent; + } +} +function iR(t, e, n, r) { + const { + props: i, + attrs: s, + vnode: { patchFlag: o } + } = t, l = /* @__PURE__ */ Le(i), [a] = t.propsOptions; + let u = !1; + if ( + // always force full diff in dev + // - #1942 if hmr is enabled with sfc component + // - vite#872 non-sfc component used by sfc component + !(process.env.NODE_ENV !== "production" && rR(t)) && (r || o > 0) && !(o & 16) + ) { + if (o & 8) { + const c = t.vnode.dynamicProps; + for (let h = 0; h < c.length; h++) { + let d = c[h]; + if (td(t.emitsOptions, d)) + continue; + const f = e[d]; + if (a) + if ($e(s, d)) + f !== s[d] && (s[d] = f, u = !0); + else { + const m = vr(d); + i[m] = _p( + a, + l, + m, + f, + t, + !1 + ); + } + else + f !== s[d] && (s[d] = f, u = !0); + } + } + } else { + pb(t, e, i, s) && (u = !0); + let c; + for (const h in l) + (!e || // for camelCase + !$e(e, h) && // it's possible the original props was passed in as kebab-case + // and converted to camelCase (#955) + ((c = cs(h)) === h || !$e(e, c))) && (a ? n && // for camelCase + (n[h] !== void 0 || // for kebab-case + n[c] !== void 0) && (i[h] = _p( + a, + l, + h, + void 0, + t, + !0 + )) : delete i[h]); + if (s !== l) + for (const h in s) + (!e || !$e(e, h)) && (delete s[h], u = !0); + } + u && Rr(t.attrs, "set", ""), process.env.NODE_ENV !== "production" && gb(e || {}, i, t); +} +function pb(t, e, n, r) { + const [i, s] = t.propsOptions; + let o = !1, l; + if (e) + for (let a in e) { + if (Wa(a)) + continue; + const u = e[a]; + let c; + i && $e(i, c = vr(a)) ? !s || !s.includes(c) ? n[c] = u : (l || (l = {}))[c] = u : td(t.emitsOptions, a) || (!(a in r) || u !== r[a]) && (r[a] = u, o = !0); + } + if (s) { + const a = /* @__PURE__ */ Le(n), u = l || tt; + for (let c = 0; c < s.length; c++) { + const h = s[c]; + n[h] = _p( + i, + a, + h, + u[h], + t, + !$e(u, h) + ); + } + } + return o; +} +function _p(t, e, n, r, i, s) { + const o = t[n]; + if (o != null) { + const l = $e(o, "default"); + if (l && r === void 0) { + const a = o.default; + if (o.type !== Function && !o.skipFactory && Oe(a)) { + const { propsDefaults: u } = i; + if (n in u) + r = u[n]; + else { + const c = du(i); + r = u[n] = a.call( + null, + e + ), c(); + } + } else + r = a; + i.ce && i.ce._setProp(n, r); + } + o[ + 0 + /* shouldCast */ + ] && (s && !l ? r = !1 : o[ + 1 + /* shouldCastTrue */ + ] && (r === "" || r === cs(n)) && (r = !0)); + } + return r; +} +const sR = /* @__PURE__ */ new WeakMap(); +function mb(t, e, n = !1) { + const r = __VUE_OPTIONS_API__ && n ? sR : e.propsCache, i = r.get(t); + if (i) + return i; + const s = t.props, o = {}, l = []; + let a = !1; + if (__VUE_OPTIONS_API__ && !Oe(t)) { + const c = (h) => { + a = !0; + const [d, f] = mb(h, e, !0); + St(o, d), f && l.push(...f); + }; + !n && e.mixins.length && e.mixins.forEach(c), t.extends && c(t.extends), t.mixins && t.mixins.forEach(c); + } + if (!s && !a) + return it(t) && r.set(t, ja), ja; + if (Ae(s)) + for (let c = 0; c < s.length; c++) { + process.env.NODE_ENV !== "production" && !Ct(s[c]) && se("props must be strings when using array syntax.", s[c]); + const h = vr(s[c]); + n3(h) && (o[h] = tt); + } + else if (s) { + process.env.NODE_ENV !== "production" && !it(s) && se("invalid props options", s); + for (const c in s) { + const h = vr(c); + if (n3(h)) { + const d = s[c], f = o[h] = Ae(d) || Oe(d) ? { type: d } : St({}, d), m = f.type; + let y = !1, b = !0; + if (Ae(m)) + for (let w = 0; w < m.length; ++w) { + const C = m[w], N = Oe(C) && C.name; + if (N === "Boolean") { + y = !0; + break; + } else N === "String" && (b = !1); + } + else + y = Oe(m) && m.name === "Boolean"; + f[ + 0 + /* shouldCast */ + ] = y, f[ + 1 + /* shouldCastTrue */ + ] = b, (y || $e(f, "default")) && l.push(h); + } + } + } + const u = [o, l]; + return it(t) && r.set(t, u), u; +} +function n3(t) { + return t[0] !== "$" && !Wa(t) ? !0 : (process.env.NODE_ENV !== "production" && se(`Invalid prop name: "${t}" is a reserved property.`), !1); +} +function oR(t) { + return t === null ? "null" : typeof t == "function" ? t.name || "" : typeof t == "object" && t.constructor && t.constructor.name || ""; +} +function gb(t, e, n) { + const r = /* @__PURE__ */ Le(e), i = n.propsOptions[0], s = Object.keys(t).map((o) => vr(o)); + for (const o in i) { + let l = i[o]; + l != null && lR( + o, + r[o], + l, + process.env.NODE_ENV !== "production" ? /* @__PURE__ */ Pr(r) : r, + !s.includes(o) + ); + } +} +function lR(t, e, n, r, i) { + const { type: s, required: o, validator: l, skipCheck: a } = n; + if (o && i) { + se('Missing required prop: "' + t + '"'); + return; + } + if (!(e == null && !o)) { + if (s != null && s !== !0 && !a) { + let u = !1; + const c = Ae(s) ? s : [s], h = []; + for (let d = 0; d < c.length && !u; d++) { + const { valid: f, expectedType: m } = uR(e, c[d]); + h.push(m || ""), u = f; + } + if (!u) { + se(cR(t, e, h)); + return; + } + } + l && !l(e, r) && se('Invalid prop: custom validator check failed for prop "' + t + '".'); + } +} +const aR = /* @__PURE__ */ Ei( + "String,Number,Boolean,Function,Symbol,BigInt" +); +function uR(t, e) { + let n; + const r = oR(e); + if (r === "null") + n = t === null; + else if (aR(r)) { + const i = typeof t; + n = i === r.toLowerCase(), !n && i === "object" && (n = t instanceof e); + } else r === "Object" ? n = it(t) : r === "Array" ? n = Ae(t) : n = t instanceof e; + return { + valid: n, + expectedType: r + }; +} +function cR(t, e, n) { + if (n.length === 0) + return `Prop type [] for prop "${t}" won't match anything. Did you mean to use type Array instead?`; + let r = `Invalid prop: type check failed for prop "${t}". Expected ${n.map(Yh).join(" | ")}`; + const i = n[0], s = $m(e), o = r3(e, i), l = r3(e, s); + return n.length === 1 && i3(i) && !hR(i, s) && (r += ` with value ${o}`), r += `, got ${s} `, i3(s) && (r += `with value ${l}.`), r; +} +function r3(t, e) { + return e === "String" ? `"${t}"` : e === "Number" ? `${Number(t)}` : `${t}`; +} +function i3(t) { + return ["string", "number", "boolean"].some((n) => t.toLowerCase() === n); +} +function hR(...t) { + return t.some((e) => e.toLowerCase() === "boolean"); +} +const ag = (t) => t === "_" || t === "_ctx" || t === "$stable", ug = (t) => Ae(t) ? t.map(hr) : [hr(t)], dR = (t, e, n) => { + if (e._n) + return e; + const r = y_((...i) => (process.env.NODE_ENV !== "production" && zt && !(n === null && Vn) && !(n && n.root !== zt.root) && se( + `Slot "${t}" invoked outside of the render function: this will not track dependencies used in the slot. Invoke the slot function inside the render function instead.` + ), ug(e(...i))), n); + return r._c = !1, r; +}, yb = (t, e, n) => { + const r = t._ctx; + for (const i in t) { + if (ag(i)) continue; + const s = t[i]; + if (Oe(s)) + e[i] = dR(i, s, r); + else if (s != null) { + process.env.NODE_ENV !== "production" && se( + `Non-function value encountered for slot "${i}". Prefer function slots for better performance.` + ); + const o = ug(s); + e[i] = () => o; + } + } +}, vb = (t, e) => { + process.env.NODE_ENV !== "production" && !ig(t.vnode) && se( + "Non-function value encountered for default slot. Prefer function slots for better performance." + ); + const n = ug(e); + t.slots.default = () => n; +}, Rp = (t, e, n) => { + for (const r in e) + (n || !ag(r)) && (t[r] = e[r]); +}, fR = (t, e, n) => { + const r = t.slots = db(); + if (t.vnode.shapeFlag & 32) { + const i = e._; + i ? (Rp(r, e, n), n && eh(r, "_", i, !0)) : yb(e, r); + } else e && vb(t, e); +}, pR = (t, e, n) => { + const { vnode: r, slots: i } = t; + let s = !0, o = tt; + if (r.shapeFlag & 32) { + const l = e._; + l ? process.env.NODE_ENV !== "production" && pr ? (Rp(i, e, n), Rr(t, "set", "$slots")) : n && l === 1 ? s = !1 : Rp(i, e, n) : (s = !e.$stable, yb(e, i)), o = e; + } else e && (vb(t, e), o = { default: 1 }); + if (s) + for (const l in i) + !ag(l) && o[l] == null && delete i[l]; +}; +let na, oi; +function Io(t, e) { + t.appContext.config.performance && uh() && oi.mark(`vue-${e}-${t.uid}`), (process.env.NODE_ENV !== "production" || __VUE_PROD_DEVTOOLS__) && p_(t, e, uh() ? oi.now() : Date.now()); +} +function Do(t, e) { + if (t.appContext.config.performance && uh()) { + const n = `vue-${e}-${t.uid}`, r = n + ":end", i = `<${fu(t, t.type)}> ${e}`; + oi.mark(r), oi.measure(i, n, r), oi.clearMeasures(i), oi.clearMarks(n), oi.clearMarks(r); + } + (process.env.NODE_ENV !== "production" || __VUE_PROD_DEVTOOLS__) && m_(t, e, uh() ? oi.now() : Date.now()); +} +function uh() { + return na !== void 0 || (typeof window < "u" && window.performance ? (na = !0, oi = window.performance) : na = !1), na; +} +function mR() { + const t = []; + if (typeof __VUE_OPTIONS_API__ != "boolean" && (process.env.NODE_ENV !== "production" && t.push("__VUE_OPTIONS_API__"), is().__VUE_OPTIONS_API__ = !0), typeof __VUE_PROD_DEVTOOLS__ != "boolean" && (process.env.NODE_ENV !== "production" && t.push("__VUE_PROD_DEVTOOLS__"), is().__VUE_PROD_DEVTOOLS__ = !1), typeof __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ != "boolean" && (process.env.NODE_ENV !== "production" && t.push("__VUE_PROD_HYDRATION_MISMATCH_DETAILS__"), is().__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ = !1), process.env.NODE_ENV !== "production" && t.length) { + const e = t.length > 1; + console.warn( + `Feature flag${e ? "s" : ""} ${t.join(", ")} ${e ? "are" : "is"} not explicitly defined. You are running the esm-bundler build of Vue, which expects these compile-time feature flags to be globally injected via the bundler config in order to get better tree-shaking in the production bundle. + +For more details, see https://link.vuejs.org/feature-flags.` + ); + } +} +const Rn = wR; +function gR(t) { + return yR(t); +} +function yR(t, e) { + mR(); + const n = is(); + n.__VUE__ = !0, (process.env.NODE_ENV !== "production" || __VUE_PROD_DEVTOOLS__) && eg(n.__VUE_DEVTOOLS_GLOBAL_HOOK__, n); + const { + insert: r, + remove: i, + patchProp: s, + createElement: o, + createText: l, + createComment: a, + setText: u, + setElementText: c, + parentNode: h, + nextSibling: d, + setScopeId: f = Ot, + insertStaticContent: m + } = t, y = (x, I, F, W = null, j = null, q = null, ee = void 0, X = null, te = process.env.NODE_ENV !== "production" && pr ? !1 : !!I.dynamicChildren) => { + if (x === I) + return; + x && !ra(x, I) && (W = dt(x), O(x, j, q, !0), x = null), I.patchFlag === -2 && (te = !1, I.dynamicChildren = null); + const { type: U, ref: ve, shapeFlag: le } = I; + switch (U) { + case hu: + b(x, I, F, W); + break; + case wr: + w(x, I, F, W); + break; + case wc: + x == null ? C(I, F, W, ee) : process.env.NODE_ENV !== "production" && N(x, I, F, ee); + break; + case kn: + _e( + x, + I, + F, + W, + j, + q, + ee, + X, + te + ); + break; + default: + le & 1 ? A( + x, + I, + F, + W, + j, + q, + ee, + X, + te + ) : le & 6 ? De( + x, + I, + F, + W, + j, + q, + ee, + X, + te + ) : le & 64 || le & 128 ? U.process( + x, + I, + F, + W, + j, + q, + ee, + X, + te, + Xt + ) : process.env.NODE_ENV !== "production" && se("Invalid VNode type:", U, `(${typeof U})`); + } + ve != null && j ? Ka(ve, x && x.ref, q, I || x, !I) : ve == null && x && x.ref != null && Ka(x.ref, null, q, x, !0); + }, b = (x, I, F, W) => { + if (x == null) + r( + I.el = l(I.children), + F, + W + ); + else { + const j = I.el = x.el; + if (I.children !== x.children) + if (process.env.NODE_ENV !== "production" && pr && I.patchFlag === -1 && "__elIndex" in x) { + const q = F.childNodes, ee = l(I.children), X = q[I.__elIndex = x.__elIndex]; + r(ee, F, X), i(X); + } else + u(j, I.children); + } + }, w = (x, I, F, W) => { + x == null ? r( + I.el = a(I.children || ""), + F, + W + ) : I.el = x.el; + }, C = (x, I, F, W) => { + [x.el, x.anchor] = m( + x.children, + I, + F, + W, + x.el, + x.anchor + ); + }, N = (x, I, F, W) => { + if (I.children !== x.children) { + const j = d(x.anchor); + _(x), [I.el, I.anchor] = m( + I.children, + F, + j, + W + ); + } else + I.el = x.el, I.anchor = x.anchor; + }, B = ({ el: x, anchor: I }, F, W) => { + let j; + for (; x && x !== I; ) + j = d(x), r(x, F, W), x = j; + r(I, F, W); + }, _ = ({ el: x, anchor: I }) => { + let F; + for (; x && x !== I; ) + F = d(x), i(x), x = F; + i(I); + }, A = (x, I, F, W, j, q, ee, X, te) => { + if (I.type === "svg" ? ee = "svg" : I.type === "math" && (ee = "mathml"), x == null) + L( + I, + F, + W, + j, + q, + ee, + X, + te + ); + else { + const U = x.el && x.el._isVueCE ? x.el : null; + try { + U && U._beginPatch(), P( + x, + I, + j, + q, + ee, + X, + te + ); + } finally { + U && U._endPatch(); + } + } + }, L = (x, I, F, W, j, q, ee, X) => { + let te, U; + const { props: ve, shapeFlag: le, transition: pe, dirs: R } = x; + if (te = x.el = o( + x.type, + q, + ve && ve.is, + ve + ), le & 8 ? c(te, x.children) : le & 16 && J( + x.children, + te, + null, + W, + j, + pf(x, q), + ee, + X + ), R && Ns(x, null, W, "created"), K(te, x, x.scopeId, ee, W), ve) { + for (const ue in ve) + ue !== "value" && !Wa(ue) && s(te, ue, null, ve[ue], q, W); + "value" in ve && s(te, "value", null, ve.value, q), (U = ve.onVnodeBeforeMount) && Tr(U, W, x); + } + (process.env.NODE_ENV !== "production" || __VUE_PROD_DEVTOOLS__) && (eh(te, "__vnode", x, !0), eh(te, "__vueParentComponent", W, !0)), R && Ns(x, null, W, "beforeMount"); + const $ = vR(j, pe); + $ && pe.beforeEnter(te), r(te, I, F), ((U = ve && ve.onVnodeMounted) || $ || R) && Rn(() => { + U && Tr(U, W, x), $ && pe.enter(te), R && Ns(x, null, W, "mounted"); + }, j); + }, K = (x, I, F, W, j) => { + if (F && f(x, F), W) + for (let q = 0; q < W.length; q++) + f(x, W[q]); + if (j) { + let q = j.subTree; + if (process.env.NODE_ENV !== "production" && q.patchFlag > 0 && q.patchFlag & 2048 && (q = lg(q.children) || q), I === q || kb(q.type) && (q.ssContent === I || q.ssFallback === I)) { + const ee = j.vnode; + K( + x, + ee, + ee.scopeId, + ee.slotScopeIds, + j.parent + ); + } + } + }, J = (x, I, F, W, j, q, ee, X, te = 0) => { + for (let U = te; U < x.length; U++) { + const ve = x[U] = X ? Hi(x[U]) : hr(x[U]); + y( + null, + ve, + I, + F, + W, + j, + q, + ee, + X + ); + } + }, P = (x, I, F, W, j, q, ee) => { + const X = I.el = x.el; + (process.env.NODE_ENV !== "production" || __VUE_PROD_DEVTOOLS__) && (X.__vnode = I); + let { patchFlag: te, dynamicChildren: U, dirs: ve } = I; + te |= x.patchFlag & 16; + const le = x.props || tt, pe = I.props || tt; + let R; + if (F && Ms(F, !1), (R = pe.onVnodeBeforeUpdate) && Tr(R, F, I, x), ve && Ns(I, x, F, "beforeUpdate"), F && Ms(F, !0), process.env.NODE_ENV !== "production" && pr && (te = 0, ee = !1, U = null), (le.innerHTML && pe.innerHTML == null || le.textContent && pe.textContent == null) && c(X, ""), U ? (ie( + x.dynamicChildren, + U, + X, + F, + W, + pf(I, j), + q + ), process.env.NODE_ENV !== "production" && bc(x, I)) : ee || nt( + x, + I, + X, + null, + F, + W, + pf(I, j), + q, + !1 + ), te > 0) { + if (te & 16) + ne(X, le, pe, F, j); + else if (te & 2 && le.class !== pe.class && s(X, "class", null, pe.class, j), te & 4 && s(X, "style", le.style, pe.style, j), te & 8) { + const $ = I.dynamicProps; + for (let ue = 0; ue < $.length; ue++) { + const de = $[ue], Ie = le[de], et = pe[de]; + (et !== Ie || de === "value") && s(X, de, Ie, et, j, F); + } + } + te & 1 && x.children !== I.children && c(X, I.children); + } else !ee && U == null && ne(X, le, pe, F, j); + ((R = pe.onVnodeUpdated) || ve) && Rn(() => { + R && Tr(R, F, I, x), ve && Ns(I, x, F, "updated"); + }, W); + }, ie = (x, I, F, W, j, q, ee) => { + for (let X = 0; X < I.length; X++) { + const te = x[X], U = I[X], ve = ( + // oldVNode may be an errored async setup() component inside Suspense + // which will not have a mounted element + te.el && // - In the case of a Fragment, we need to provide the actual parent + // of the Fragment itself so it can move its children. + (te.type === kn || // - In the case of different nodes, there is going to be a replacement + // which also requires the correct parent container + !ra(te, U) || // - In the case of a component, it could contain anything. + te.shapeFlag & 198) ? h(te.el) : ( + // In other cases, the parent container is not actually used so we + // just pass the block element here to avoid a DOM parentNode call. + F + ) + ); + y( + te, + U, + ve, + null, + W, + j, + q, + ee, + !0 + ); + } + }, ne = (x, I, F, W, j) => { + if (I !== F) { + if (I !== tt) + for (const q in I) + !Wa(q) && !(q in F) && s( + x, + q, + I[q], + null, + j, + W + ); + for (const q in F) { + if (Wa(q)) continue; + const ee = F[q], X = I[q]; + ee !== X && q !== "value" && s(x, q, X, ee, j, W); + } + "value" in F && s(x, "value", I.value, F.value, j); + } + }, _e = (x, I, F, W, j, q, ee, X, te) => { + const U = I.el = x ? x.el : l(""), ve = I.anchor = x ? x.anchor : l(""); + let { patchFlag: le, dynamicChildren: pe, slotScopeIds: R } = I; + process.env.NODE_ENV !== "production" && // #5523 dev root fragment may inherit directives + (pr || le & 2048) && (le = 0, te = !1, pe = null), R && (X = X ? X.concat(R) : R), x == null ? (r(U, F, W), r(ve, F, W), J( + // #10007 + // such fragment like `<></>` will be compiled into + // a fragment which doesn't have a children. + // In this case fallback to an empty array + I.children || [], + F, + ve, + j, + q, + ee, + X, + te + )) : le > 0 && le & 64 && pe && // #2715 the previous fragment could've been a BAILed one as a result + // of renderSlot() with no valid children + x.dynamicChildren && x.dynamicChildren.length === pe.length ? (ie( + x.dynamicChildren, + pe, + F, + j, + q, + ee, + X + ), process.env.NODE_ENV !== "production" ? bc(x, I) : ( + // #2080 if the stable fragment has a key, it's a <template v-for> that may + // get moved around. Make sure all root level vnodes inherit el. + // #2134 or if it's a component root, it may also get moved around + // as the component is being moved. + (I.key != null || j && I === j.subTree) && bc( + x, + I, + !0 + /* shallow */ + ) + )) : nt( + x, + I, + F, + ve, + j, + q, + ee, + X, + te + ); + }, De = (x, I, F, W, j, q, ee, X, te) => { + I.slotScopeIds = X, x == null ? I.shapeFlag & 512 ? j.ctx.activate( + I, + F, + W, + ee, + te + ) : ge( + I, + F, + W, + j, + q, + ee, + te + ) : Re(x, I, te); + }, ge = (x, I, F, W, j, q, ee) => { + const X = x.component = ER( + x, + W, + j + ); + if (process.env.NODE_ENV !== "production" && X.type.__hmrId && s_(X), process.env.NODE_ENV !== "production" && (pc(x), Io(X, "mount")), ig(x) && (X.ctx.renderer = Xt), process.env.NODE_ENV !== "production" && Io(X, "init"), AR(X, !1, ee), process.env.NODE_ENV !== "production" && Do(X, "init"), process.env.NODE_ENV !== "production" && pr && (x.el = null), X.asyncDep) { + if (j && j.registerDep(X, fe, ee), !x.el) { + const te = X.subTree = gr(wr); + w(null, te, I, F), x.placeholder = te.el; + } + } else + fe( + X, + x, + I, + F, + j, + q, + ee + ); + process.env.NODE_ENV !== "production" && (mc(), Do(X, "mount")); + }, Re = (x, I, F) => { + const W = I.component = x.component; + if (eR(x, I, F)) + if (W.asyncDep && !W.asyncResolved) { + process.env.NODE_ENV !== "production" && pc(I), ye(W, I, F), process.env.NODE_ENV !== "production" && mc(); + return; + } else + W.next = I, W.update(); + else + I.el = x.el, W.vnode = I; + }, fe = (x, I, F, W, j, q, ee) => { + const X = () => { + if (x.isMounted) { + let { next: le, bu: pe, u: R, parent: $, vnode: ue } = x; + { + const ft = bb(x); + if (ft) { + le && (le.el = ue.el, ye(x, le, ee)), ft.asyncDep.then(() => { + x.isUnmounted || X(); + }); + return; + } + } + let de = le, Ie; + process.env.NODE_ENV !== "production" && pc(le || x.vnode), Ms(x, !1), le ? (le.el = ue.el, ye(x, le, ee)) : le = ue, pe && ea(pe), (Ie = le.props && le.props.onVnodeBeforeUpdate) && Tr(Ie, $, le, ue), Ms(x, !0), process.env.NODE_ENV !== "production" && Io(x, "render"); + const et = Q5(x); + process.env.NODE_ENV !== "production" && Do(x, "render"); + const wt = x.subTree; + x.subTree = et, process.env.NODE_ENV !== "production" && Io(x, "patch"), y( + wt, + et, + // parent may have changed if it's in a teleport + h(wt.el), + // anchor may have changed if it's in a fragment + dt(wt), + x, + j, + q + ), process.env.NODE_ENV !== "production" && Do(x, "patch"), le.el = et.el, de === null && tR(x, et.el), R && Rn(R, j), (Ie = le.props && le.props.onVnodeUpdated) && Rn( + () => Tr(Ie, $, le, ue), + j + ), (process.env.NODE_ENV !== "production" || __VUE_PROD_DEVTOOLS__) && Zv(x), process.env.NODE_ENV !== "production" && mc(); + } else { + let le; + const { el: pe, props: R } = I, { bm: $, m: ue, parent: de, root: Ie, type: et } = x, wt = Ja(I); + Ms(x, !1), $ && ea($), !wt && (le = R && R.onVnodeBeforeMount) && Tr(le, de, I), Ms(x, !0); + { + Ie.ce && // @ts-expect-error _def is private + Ie.ce._def.shadowRoot !== !1 && Ie.ce._injectChildStyle(et), process.env.NODE_ENV !== "production" && Io(x, "render"); + const ft = x.subTree = Q5(x); + process.env.NODE_ENV !== "production" && Do(x, "render"), process.env.NODE_ENV !== "production" && Io(x, "patch"), y( + null, + ft, + F, + W, + x, + j, + q + ), process.env.NODE_ENV !== "production" && Do(x, "patch"), I.el = ft.el; + } + if (ue && Rn(ue, j), !wt && (le = R && R.onVnodeMounted)) { + const ft = I; + Rn( + () => Tr(le, de, ft), + j + ); + } + (I.shapeFlag & 256 || de && Ja(de.vnode) && de.vnode.shapeFlag & 256) && x.a && Rn(x.a, j), x.isMounted = !0, (process.env.NODE_ENV !== "production" || __VUE_PROD_DEVTOOLS__) && h_(x), I = F = W = null; + } + }; + x.scope.on(); + const te = x.effect = new Mv(X); + x.scope.off(); + const U = x.update = te.run.bind(te), ve = x.job = te.runIfDirty.bind(te); + ve.i = x, ve.id = x.uid, te.scheduler = () => Qh(ve), Ms(x, !0), process.env.NODE_ENV !== "production" && (te.onTrack = x.rtc ? (le) => ea(x.rtc, le) : void 0, te.onTrigger = x.rtg ? (le) => ea(x.rtg, le) : void 0), U(); + }, ye = (x, I, F) => { + I.component = x; + const W = x.vnode.props; + x.vnode = I, x.next = null, iR(x, I.props, W, F), pR(x, I.children, F), xr(), W5(x), Sr(); + }, nt = (x, I, F, W, j, q, ee, X, te = !1) => { + const U = x && x.children, ve = x ? x.shapeFlag : 0, le = I.children, { patchFlag: pe, shapeFlag: R } = I; + if (pe > 0) { + if (pe & 128) { + Qe( + U, + le, + F, + W, + j, + q, + ee, + X, + te + ); + return; + } else if (pe & 256) { + E( + U, + le, + F, + W, + j, + q, + ee, + X, + te + ); + return; + } + } + R & 8 ? (ve & 16 && bt(U, j, q), le !== U && c(F, le)) : ve & 16 ? R & 16 ? Qe( + U, + le, + F, + W, + j, + q, + ee, + X, + te + ) : bt(U, j, q, !0) : (ve & 8 && c(F, ""), R & 16 && J( + le, + F, + W, + j, + q, + ee, + X, + te + )); + }, E = (x, I, F, W, j, q, ee, X, te) => { + x = x || ja, I = I || ja; + const U = x.length, ve = I.length, le = Math.min(U, ve); + let pe; + for (pe = 0; pe < le; pe++) { + const R = I[pe] = te ? Hi(I[pe]) : hr(I[pe]); + y( + x[pe], + R, + F, + null, + j, + q, + ee, + X, + te + ); + } + U > ve ? bt( + x, + j, + q, + !0, + !1, + le + ) : J( + I, + F, + W, + j, + q, + ee, + X, + te, + le + ); + }, Qe = (x, I, F, W, j, q, ee, X, te) => { + let U = 0; + const ve = I.length; + let le = x.length - 1, pe = ve - 1; + for (; U <= le && U <= pe; ) { + const R = x[U], $ = I[U] = te ? Hi(I[U]) : hr(I[U]); + if (ra(R, $)) + y( + R, + $, + F, + null, + j, + q, + ee, + X, + te + ); + else + break; + U++; + } + for (; U <= le && U <= pe; ) { + const R = x[le], $ = I[pe] = te ? Hi(I[pe]) : hr(I[pe]); + if (ra(R, $)) + y( + R, + $, + F, + null, + j, + q, + ee, + X, + te + ); + else + break; + le--, pe--; + } + if (U > le) { + if (U <= pe) { + const R = pe + 1, $ = R < ve ? I[R].el : W; + for (; U <= pe; ) + y( + null, + I[U] = te ? Hi(I[U]) : hr(I[U]), + F, + $, + j, + q, + ee, + X, + te + ), U++; + } + } else if (U > pe) + for (; U <= le; ) + O(x[U], j, q, !0), U++; + else { + const R = U, $ = U, ue = /* @__PURE__ */ new Map(); + for (U = $; U <= pe; U++) { + const Ge = I[U] = te ? Hi(I[U]) : hr(I[U]); + Ge.key != null && (process.env.NODE_ENV !== "production" && ue.has(Ge.key) && se( + "Duplicate keys found during update:", + JSON.stringify(Ge.key), + "Make sure keys are unique." + ), ue.set(Ge.key, U)); + } + let de, Ie = 0; + const et = pe - $ + 1; + let wt = !1, ft = 0; + const fn = new Array(et); + for (U = 0; U < et; U++) fn[U] = 0; + for (U = R; U <= le; U++) { + const Ge = x[U]; + if (Ie >= et) { + O(Ge, j, q, !0); + continue; + } + let Tt; + if (Ge.key != null) + Tt = ue.get(Ge.key); + else + for (de = $; de <= pe; de++) + if (fn[de - $] === 0 && ra(Ge, I[de])) { + Tt = de; + break; + } + Tt === void 0 ? O(Ge, j, q, !0) : (fn[Tt - $] = U + 1, Tt >= ft ? ft = Tt : wt = !0, y( + Ge, + I[Tt], + F, + null, + j, + q, + ee, + X, + te + ), Ie++); + } + const sr = wt ? bR(fn) : ja; + for (de = sr.length - 1, U = et - 1; U >= 0; U--) { + const Ge = $ + U, Tt = I[Ge], Qt = I[Ge + 1], Kl = Ge + 1 < ve ? ( + // #13559, #14173 fallback to el placeholder for unresolved async component + Qt.el || wb(Qt) + ) : W; + fn[U] === 0 ? y( + null, + Tt, + F, + Kl, + j, + q, + ee, + X, + te + ) : wt && (de < 0 || U !== sr[de] ? Ue(Tt, F, Kl, 2) : de--); + } + } + }, Ue = (x, I, F, W, j = null) => { + const { el: q, type: ee, transition: X, children: te, shapeFlag: U } = x; + if (U & 6) { + Ue(x.component.subTree, I, F, W); + return; + } + if (U & 128) { + x.suspense.move(I, F, W); + return; + } + if (U & 64) { + ee.move(x, I, F, Xt); + return; + } + if (ee === kn) { + r(q, I, F); + for (let le = 0; le < te.length; le++) + Ue(te[le], I, F, W); + r(x.anchor, I, F); + return; + } + if (ee === wc) { + B(x, I, F); + return; + } + if (W !== 2 && U & 1 && X) + if (W === 0) + X.beforeEnter(q), r(q, I, F), Rn(() => X.enter(q), j); + else { + const { leave: le, delayLeave: pe, afterLeave: R } = X, $ = () => { + x.ctx.isUnmounted ? i(q) : r(q, I, F); + }, ue = () => { + q._isLeaving && q[C_]( + !0 + /* cancelled */ + ), le(q, () => { + $(), R && R(); + }); + }; + pe ? pe(q, $, ue) : ue(); + } + else + r(q, I, F); + }, O = (x, I, F, W = !1, j = !1) => { + const { + type: q, + props: ee, + ref: X, + children: te, + dynamicChildren: U, + shapeFlag: ve, + patchFlag: le, + dirs: pe, + cacheIndex: R + } = x; + if (le === -2 && (j = !1), X != null && (xr(), Ka(X, null, F, x, !0), Sr()), R != null && (I.renderCache[R] = void 0), ve & 256) { + I.ctx.deactivate(x); + return; + } + const $ = ve & 1 && pe, ue = !Ja(x); + let de; + if (ue && (de = ee && ee.onVnodeBeforeUnmount) && Tr(de, I, x), ve & 6) + lt(x.component, F, W); + else { + if (ve & 128) { + x.suspense.unmount(F, W); + return; + } + $ && Ns(x, null, I, "beforeUnmount"), ve & 64 ? x.type.remove( + x, + I, + F, + Xt, + W + ) : U && // #5154 + // when v-once is used inside a block, setBlockTracking(-1) marks the + // parent block with hasOnce: true + // so that it doesn't take the fast path during unmount - otherwise + // components nested in v-once are never unmounted. + !U.hasOnce && // #1153: fast path should not be taken for non-stable (v-for) fragments + (q !== kn || le > 0 && le & 64) ? bt( + U, + I, + F, + !1, + !0 + ) : (q === kn && le & 384 || !j && ve & 16) && bt(te, I, F), W && gt(x); + } + (ue && (de = ee && ee.onVnodeUnmounted) || $) && Rn(() => { + de && Tr(de, I, x), $ && Ns(x, null, I, "unmounted"); + }, F); + }, gt = (x) => { + const { type: I, el: F, anchor: W, transition: j } = x; + if (I === kn) { + process.env.NODE_ENV !== "production" && x.patchFlag > 0 && x.patchFlag & 2048 && j && !j.persisted ? x.children.forEach((ee) => { + ee.type === wr ? i(ee.el) : gt(ee); + }) : Rt(F, W); + return; + } + if (I === wc) { + _(x); + return; + } + const q = () => { + i(F), j && !j.persisted && j.afterLeave && j.afterLeave(); + }; + if (x.shapeFlag & 1 && j && !j.persisted) { + const { leave: ee, delayLeave: X } = j, te = () => ee(F, q); + X ? X(x.el, q, te) : te(); + } else + q(); + }, Rt = (x, I) => { + let F; + for (; x !== I; ) + F = d(x), i(x), x = F; + i(I); + }, lt = (x, I, F) => { + process.env.NODE_ENV !== "production" && x.type.__hmrId && o_(x); + const { bum: W, scope: j, job: q, subTree: ee, um: X, m: te, a: U } = x; + s3(te), s3(U), W && ea(W), j.stop(), q && (q.flags |= 8, O(ee, x, I, F)), X && Rn(X, I), Rn(() => { + x.isUnmounted = !0; + }, I), (process.env.NODE_ENV !== "production" || __VUE_PROD_DEVTOOLS__) && f_(x); + }, bt = (x, I, F, W = !1, j = !1, q = 0) => { + for (let ee = q; ee < x.length; ee++) + O(x[ee], I, F, W, j); + }, dt = (x) => { + if (x.shapeFlag & 6) + return dt(x.component.subTree); + if (x.shapeFlag & 128) + return x.suspense.next(); + const I = d(x.anchor || x.el), F = I && I[x_]; + return F ? d(F) : I; + }; + let Lt = !1; + const $t = (x, I, F) => { + let W; + x == null ? I._vnode && (O(I._vnode, null, null, !0), W = I._vnode.component) : y( + I._vnode || null, + x, + I, + null, + null, + null, + F + ), I._vnode = x, Lt || (Lt = !0, W5(W), Kv(), Lt = !1); + }, Xt = { + p: y, + um: O, + m: Ue, + r: gt, + mt: ge, + mc: J, + pc: nt, + pbc: ie, + n: dt, + o: t + }; + return { + render: $t, + hydrate: void 0, + createApp: K_($t) + }; +} +function pf({ type: t, props: e }, n) { + return n === "svg" && t === "foreignObject" || n === "mathml" && t === "annotation-xml" && e && e.encoding && e.encoding.includes("html") ? void 0 : n; +} +function Ms({ effect: t, job: e }, n) { + n ? (t.flags |= 32, e.flags |= 4) : (t.flags &= -33, e.flags &= -5); +} +function vR(t, e) { + return (!t || t && !t.pendingBranch) && e && !e.persisted; +} +function bc(t, e, n = !1) { + const r = t.children, i = e.children; + if (Ae(r) && Ae(i)) + for (let s = 0; s < r.length; s++) { + const o = r[s]; + let l = i[s]; + l.shapeFlag & 1 && !l.dynamicChildren && ((l.patchFlag <= 0 || l.patchFlag === 32) && (l = i[s] = Hi(i[s]), l.el = o.el), !n && l.patchFlag !== -2 && bc(o, l)), l.type === hu && (l.patchFlag !== -1 ? l.el = o.el : l.__elIndex = s + // take fragment start anchor into account + (t.type === kn ? 1 : 0)), l.type === wr && !l.el && (l.el = o.el), process.env.NODE_ENV !== "production" && l.el && (l.el.__vnode = l); + } +} +function bR(t) { + const e = t.slice(), n = [0]; + let r, i, s, o, l; + const a = t.length; + for (r = 0; r < a; r++) { + const u = t[r]; + if (u !== 0) { + if (i = n[n.length - 1], t[i] < u) { + e[r] = i, n.push(r); + continue; + } + for (s = 0, o = n.length - 1; s < o; ) + l = s + o >> 1, t[n[l]] < u ? s = l + 1 : o = l; + u < t[n[s]] && (s > 0 && (e[r] = n[s - 1]), n[s] = r); + } + } + for (s = n.length, o = n[s - 1]; s-- > 0; ) + n[s] = o, o = e[o]; + return n; +} +function bb(t) { + const e = t.subTree.component; + if (e) + return e.asyncDep && !e.asyncResolved ? e : bb(e); +} +function s3(t) { + if (t) + for (let e = 0; e < t.length; e++) + t[e].flags |= 8; +} +function wb(t) { + if (t.placeholder) + return t.placeholder; + const e = t.component; + return e ? wb(e.subTree) : null; +} +const kb = (t) => t.__isSuspense; +function wR(t, e) { + e && e.pendingBranch ? Ae(t) ? e.effects.push(...t) : e.effects.push(t) : Gv(t); +} +const kn = /* @__PURE__ */ Symbol.for("v-fgt"), hu = /* @__PURE__ */ Symbol.for("v-txt"), wr = /* @__PURE__ */ Symbol.for("v-cmt"), wc = /* @__PURE__ */ Symbol.for("v-stc"); +function _l(t) { + return t ? t.__v_isVNode === !0 : !1; +} +function ra(t, e) { + if (process.env.NODE_ENV !== "production" && e.shapeFlag & 6 && t.component) { + const n = gc.get(e.type); + if (n && n.has(t.component)) + return t.shapeFlag &= -257, e.shapeFlag &= -513, !1; + } + return t.type === e.type && t.key === e.key; +} +const kR = (...t) => Sb( + ...t +), xb = ({ key: t }) => t ?? null, kc = ({ + ref: t, + ref_key: e, + ref_for: n +}) => (typeof t == "number" && (t = "" + t), t != null ? Ct(t) || /* @__PURE__ */ It(t) || Oe(t) ? { i: Vn, r: t, k: e, f: !!n } : t : null); +function xR(t, e = null, n = null, r = 0, i = null, s = t === kn ? 0 : 1, o = !1, l = !1) { + const a = { + __v_isVNode: !0, + __v_skip: !0, + type: t, + props: e, + key: e && xb(e), + ref: e && kc(e), + scopeId: Qv, + slotScopeIds: null, + children: n, + component: null, + suspense: null, + ssContent: null, + ssFallback: null, + dirs: null, + transition: null, + el: null, + anchor: null, + target: null, + targetStart: null, + targetAnchor: null, + staticCount: 0, + shapeFlag: s, + patchFlag: r, + dynamicProps: i, + dynamicChildren: null, + appContext: null, + ctx: Vn + }; + return l ? (cg(a, n), s & 128 && t.normalize(a)) : n && (a.shapeFlag |= Ct(n) ? 8 : 16), process.env.NODE_ENV !== "production" && a.key !== a.key && se("VNode created with invalid key (NaN). VNode type:", a.type), a; +} +const gr = process.env.NODE_ENV !== "production" ? kR : Sb; +function Sb(t, e = null, n = null, r = 0, i = null, s = !1) { + if ((!t || t === B_) && (process.env.NODE_ENV !== "production" && !t && se(`Invalid vnode type when creating vnode: ${t}.`), t = wr), _l(t)) { + const l = hs( + t, + e, + !0 + /* mergeRef: true */ + ); + return n && cg(l, n), l.patchFlag = -2, l; + } + if (Ob(t) && (t = t.__vccOpts), e) { + e = SR(e); + let { class: l, style: a } = e; + l && !Ct(l) && (e.class = Wm(l)), it(a) && (/* @__PURE__ */ th(a) && !Ae(a) && (a = St({}, a)), e.style = jm(a)); + } + const o = Ct(t) ? 1 : kb(t) ? 128 : S_(t) ? 64 : it(t) ? 4 : Oe(t) ? 2 : 0; + return process.env.NODE_ENV !== "production" && o & 4 && /* @__PURE__ */ th(t) && (t = /* @__PURE__ */ Le(t), se( + "Vue received a Component that was made a reactive object. This can lead to unnecessary performance overhead and should be avoided by marking the component with `markRaw` or using `shallowRef` instead of `ref`.", + ` +Component that was made reactive: `, + t + )), xR( + t, + e, + n, + r, + i, + o, + s, + !0 + ); +} +function SR(t) { + return t ? /* @__PURE__ */ th(t) || fb(t) ? St({}, t) : t : null; +} +function hs(t, e, n = !1, r = !1) { + const { props: i, ref: s, patchFlag: o, children: l, transition: a } = t, u = e ? NR(i || {}, e) : i, c = { + __v_isVNode: !0, + __v_skip: !0, + type: t.type, + props: u, + key: u && xb(u), + ref: e && e.ref ? ( + // #2078 in the case of <component :is="vnode" ref="extra"/> + // if the vnode itself already has a ref, cloneVNode will need to merge + // the refs so the single vnode can be set on multiple refs + n && s ? Ae(s) ? s.concat(kc(e)) : [s, kc(e)] : kc(e) + ) : s, + scopeId: t.scopeId, + slotScopeIds: t.slotScopeIds, + children: process.env.NODE_ENV !== "production" && o === -1 && Ae(l) ? l.map(Cb) : l, + target: t.target, + targetStart: t.targetStart, + targetAnchor: t.targetAnchor, + staticCount: t.staticCount, + shapeFlag: t.shapeFlag, + // if the vnode is cloned with extra props, we can no longer assume its + // existing patch flag to be reliable and need to add the FULL_PROPS flag. + // note: preserve flag for fragments since they use the flag for children + // fast paths only. + patchFlag: e && t.type !== kn ? o === -1 ? 16 : o | 16 : o, + dynamicProps: t.dynamicProps, + dynamicChildren: t.dynamicChildren, + appContext: t.appContext, + dirs: t.dirs, + transition: a, + // These should technically only be non-null on mounted VNodes. However, + // they *should* be copied for kept-alive vnodes. So we just always copy + // them since them being non-null during a mount doesn't affect the logic as + // they will simply be overwritten. + component: t.component, + suspense: t.suspense, + ssContent: t.ssContent && hs(t.ssContent), + ssFallback: t.ssFallback && hs(t.ssFallback), + placeholder: t.placeholder, + el: t.el, + anchor: t.anchor, + ctx: t.ctx, + ce: t.ce + }; + return a && r && rg( + c, + a.clone(c) + ), c; +} +function Cb(t) { + const e = hs(t); + return Ae(t.children) && (e.children = t.children.map(Cb)), e; +} +function CR(t = " ", e = 0) { + return gr(hu, null, t, e); +} +function hr(t) { + return t == null || typeof t == "boolean" ? gr(wr) : Ae(t) ? gr( + kn, + null, + // #3666, avoid reference pollution when reusing vnode + t.slice() + ) : _l(t) ? Hi(t) : gr(hu, null, String(t)); +} +function Hi(t) { + return t.el === null && t.patchFlag !== -1 || t.memo ? t : hs(t); +} +function cg(t, e) { + let n = 0; + const { shapeFlag: r } = t; + if (e == null) + e = null; + else if (Ae(e)) + n = 16; + else if (typeof e == "object") + if (r & 65) { + const i = e.default; + i && (i._c && (i._d = !1), cg(t, i()), i._c && (i._d = !0)); + return; + } else { + n = 32; + const i = e._; + !i && !fb(e) ? e._ctx = Vn : i === 3 && Vn && (Vn.slots._ === 1 ? e._ = 1 : (e._ = 2, t.patchFlag |= 1024)); + } + else Oe(e) ? (e = { default: e, _ctx: Vn }, n = 32) : (e = String(e), r & 64 ? (n = 16, e = [CR(e)]) : n = 8); + t.children = e, t.shapeFlag |= n; +} +function NR(...t) { + const e = {}; + for (let n = 0; n < t.length; n++) { + const r = t[n]; + for (const i in r) + if (i === "class") + e.class !== r.class && (e.class = Wm([e.class, r.class])); + else if (i === "style") + e.style = jm([e.style, r.style]); + else if (au(i)) { + const s = e[i], o = r[i]; + o && s !== o && !(Ae(s) && s.includes(o)) && (e[i] = s ? [].concat(s, o) : o); + } else i !== "" && (e[i] = r[i]); + } + return e; +} +function Tr(t, e, n, r = null) { + qr(t, e, 7, [ + n, + r + ]); +} +const MR = ab(); +let TR = 0; +function ER(t, e, n) { + const r = t.type, i = (e ? e.appContext : t.appContext) || MR, s = { + uid: TR++, + vnode: t, + type: r, + parent: e, + appContext: i, + root: null, + // to be immediately set + next: null, + subTree: null, + // will be set synchronously right after creation + effect: null, + update: null, + // will be set synchronously right after creation + job: null, + scope: new kD( + !0 + /* detached */ + ), + render: null, + proxy: null, + exposed: null, + exposeProxy: null, + withProxy: null, + provides: e ? e.provides : Object.create(i.provides), + ids: e ? e.ids : ["", 0, 0], + accessCache: null, + renderCache: [], + // local resolved assets + components: null, + directives: null, + // resolved props and emits options + propsOptions: mb(r, i), + emitsOptions: ub(r, i), + // emit + emit: null, + // to be set immediately + emitted: null, + // props default value + propsDefaults: tt, + // inheritAttrs + inheritAttrs: r.inheritAttrs, + // state + ctx: tt, + data: tt, + props: tt, + attrs: tt, + slots: tt, + refs: tt, + setupState: tt, + setupContext: null, + // suspense related + suspense: n, + suspenseId: n ? n.pendingId : 0, + asyncDep: null, + asyncResolved: !1, + // lifecycle hooks + // not using enums here because it results in computed properties + isMounted: !1, + isUnmounted: !1, + isDeactivated: !1, + bc: null, + c: null, + bm: null, + m: null, + bu: null, + u: null, + um: null, + bum: null, + da: null, + a: null, + rtg: null, + rtc: null, + ec: null, + sp: null + }; + return process.env.NODE_ENV !== "production" ? s.ctx = L_(s) : s.ctx = { _: s }, s.root = e ? e.root : s, s.emit = Y_.bind(null, s), t.ce && t.ce(s), s; +} +let zt = null; +const Nb = () => zt || Vn; +let ch, zp; +{ + const t = is(), e = (n, r) => { + let i; + return (i = t[n]) || (i = t[n] = []), i.push(r), (s) => { + i.length > 1 ? i.forEach((o) => o(s)) : i[0](s); + }; + }; + ch = e( + "__VUE_INSTANCE_SETTERS__", + (n) => zt = n + ), zp = e( + "__VUE_SSR_SETTERS__", + (n) => y0 = n + ); +} +const du = (t) => { + const e = zt; + return ch(t), t.scope.on(), () => { + t.scope.off(), ch(e); + }; +}, o3 = () => { + zt && zt.scope.off(), ch(null); +}, OR = /* @__PURE__ */ Ei("slot,component"); +function Pp(t, { isNativeTag: e }) { + (OR(t) || e(t)) && se( + "Do not use built-in or reserved HTML elements as component id: " + t + ); +} +function Mb(t) { + return t.vnode.shapeFlag & 4; +} +let y0 = !1; +function AR(t, e = !1, n = !1) { + e && zp(e); + const { props: r, children: i } = t.vnode, s = Mb(t); + nR(t, r, s, e), fR(t, i, n || e); + const o = s ? IR(t, e) : void 0; + return e && zp(!1), o; +} +function IR(t, e) { + const n = t.type; + if (process.env.NODE_ENV !== "production") { + if (n.name && Pp(n.name, t.appContext.config), n.components) { + const i = Object.keys(n.components); + for (let s = 0; s < i.length; s++) + Pp(i[s], t.appContext.config); + } + if (n.directives) { + const i = Object.keys(n.directives); + for (let s = 0; s < i.length; s++) + eb(i[s]); + } + n.compilerOptions && DR() && se( + '"compilerOptions" is only supported when using a build of Vue that includes the runtime compiler. Since you are using a runtime-only build, the options should be passed via your build tool config instead.' + ); + } + t.accessCache = /* @__PURE__ */ Object.create(null), t.proxy = new Proxy(t.ctx, sb), process.env.NODE_ENV !== "production" && F_(t); + const { setup: r } = n; + if (r) { + xr(); + const i = t.setupContext = r.length > 1 ? RR(t) : null, s = du(t), o = jl( + r, + t, + 0, + [ + process.env.NODE_ENV !== "production" ? /* @__PURE__ */ Pr(t.props) : t.props, + i + ] + ), l = Hm(o); + if (Sr(), s(), (l || t.sp) && !Ja(t) && rb(t), l) { + if (o.then(o3, o3), e) + return o.then((a) => { + l3(t, a, e); + }).catch((a) => { + uu(a, t, 0); + }); + if (t.asyncDep = o, process.env.NODE_ENV !== "production" && !t.suspense) { + const a = fu(t, n); + se( + `Component <${a}>: setup function returned a promise, but no <Suspense> boundary was found in the parent component tree. A component with async setup() must be nested in a <Suspense> in order to be rendered.` + ); + } + } else + l3(t, o, e); + } else + Tb(t, e); +} +function l3(t, e, n) { + Oe(e) ? t.type.__ssrInlineRender ? t.ssrRender = e : t.render = e : it(e) ? (process.env.NODE_ENV !== "production" && _l(e) && se( + "setup() should not return VNodes directly - return a render function instead." + ), (process.env.NODE_ENV !== "production" || __VUE_PROD_DEVTOOLS__) && (t.devtoolsRawSetupState = e), t.setupState = qv(e), process.env.NODE_ENV !== "production" && V_(t)) : process.env.NODE_ENV !== "production" && e !== void 0 && se( + `setup() should return an object. Received: ${e === null ? "null" : typeof e}` + ), Tb(t, n); +} +const DR = () => !0; +function Tb(t, e, n) { + const r = t.type; + if (t.render || (t.render = r.render || Ot), __VUE_OPTIONS_API__) { + const i = du(t); + xr(); + try { + $_(t); + } finally { + Sr(), i(); + } + } + process.env.NODE_ENV !== "production" && !r.render && t.render === Ot && !e && (r.template ? se( + 'Component provided template option but runtime compilation is not supported in this build of Vue. Configure your bundler to alias "vue" to "vue/dist/vue.esm-bundler.js".' + ) : se("Component is missing template or render function: ", r)); +} +const a3 = process.env.NODE_ENV !== "production" ? { + get(t, e) { + return ah(), Pt(t, "get", ""), t[e]; + }, + set() { + return se("setupContext.attrs is readonly."), !1; + }, + deleteProperty() { + return se("setupContext.attrs is readonly."), !1; + } +} : { + get(t, e) { + return Pt(t, "get", ""), t[e]; + } +}; +function _R(t) { + return new Proxy(t.slots, { + get(e, n) { + return Pt(t, "get", "$slots"), e[n]; + } + }); +} +function RR(t) { + const e = (n) => { + if (process.env.NODE_ENV !== "production" && (t.exposed && se("expose() should be called only once per setup()."), n != null)) { + let r = typeof n; + r === "object" && (Ae(n) ? r = "array" : /* @__PURE__ */ It(n) && (r = "ref")), r !== "object" && se( + `expose() should be passed a plain object, received ${r}.` + ); + } + t.exposed = n || {}; + }; + if (process.env.NODE_ENV !== "production") { + let n, r; + return Object.freeze({ + get attrs() { + return n || (n = new Proxy(t.attrs, a3)); + }, + get slots() { + return r || (r = _R(t)); + }, + get emit() { + return (i, ...s) => t.emit(i, ...s); + }, + expose: e + }); + } else + return { + attrs: new Proxy(t.attrs, a3), + slots: t.slots, + emit: t.emit, + expose: e + }; +} +function hg(t) { + return t.exposed ? t.exposeProxy || (t.exposeProxy = new Proxy(qv($D(t.exposed)), { + get(e, n) { + if (n in e) + return e[n]; + if (n in ao) + return ao[n](t); + }, + has(e, n) { + return n in e || n in ao; + } + })) : t.proxy; +} +const zR = /(?:^|[-_])\w/g, PR = (t) => t.replace(zR, (e) => e.toUpperCase()).replace(/[-_]/g, ""); +function Eb(t, e = !0) { + return Oe(t) ? t.displayName || t.name : t.name || e && t.__name; +} +function fu(t, e, n = !1) { + let r = Eb(e); + if (!r && e.__file) { + const i = e.__file.match(/([^/\\]+)\.\w+$/); + i && (r = i[1]); + } + if (!r && t) { + const i = (s) => { + for (const o in s) + if (s[o] === e) + return o; + }; + r = i(t.components) || t.parent && i( + t.parent.type.components + ) || i(t.appContext.components); + } + return r ? PR(r) : n ? "App" : "Anonymous"; +} +function Ob(t) { + return Oe(t) && "__vccOpts" in t; +} +const dg = (t, e) => { + const n = /* @__PURE__ */ KD(t, e, y0); + if (process.env.NODE_ENV !== "production") { + const r = Nb(); + r && r.appContext.config.warnRecursiveComputed && (n._warnRecursive = !0); + } + return n; +}; +function ze(t, e, n) { + try { + const r = arguments.length; + return r === 2 ? it(e) && !Ae(e) ? _l(e) ? gr(t, null, [e]) : gr(t, e) : gr(t, null, e) : (r > 3 ? n = Array.prototype.slice.call(arguments, 2) : r === 3 && _l(n) && (n = [n]), gr(t, e, n)); + } finally { + } +} +function BR() { + if (process.env.NODE_ENV === "production" || typeof window > "u") + return; + const t = { style: "color:#3ba776" }, e = { style: "color:#1677ff" }, n = { style: "color:#f5222d" }, r = { style: "color:#eb2f96" }, i = { + __vue_custom_formatter: !0, + header(h) { + if (!it(h)) + return null; + if (h.__isVue) + return ["div", t, "VueInstance"]; + if (/* @__PURE__ */ It(h)) { + xr(); + const d = h.value; + return Sr(), [ + "div", + {}, + ["span", t, c(h)], + "<", + l(d), + ">" + ]; + } else { + if (/* @__PURE__ */ oo(h)) + return [ + "div", + {}, + ["span", t, /* @__PURE__ */ Nn(h) ? "ShallowReactive" : "Reactive"], + "<", + l(h), + `>${/* @__PURE__ */ $r(h) ? " (readonly)" : ""}` + ]; + if (/* @__PURE__ */ $r(h)) + return [ + "div", + {}, + ["span", t, /* @__PURE__ */ Nn(h) ? "ShallowReadonly" : "Readonly"], + "<", + l(h), + ">" + ]; + } + return null; + }, + hasBody(h) { + return h && h.__isVue; + }, + body(h) { + if (h && h.__isVue) + return [ + "div", + {}, + ...s(h.$) + ]; + } + }; + function s(h) { + const d = []; + h.type.props && h.props && d.push(o("props", /* @__PURE__ */ Le(h.props))), h.setupState !== tt && d.push(o("setup", h.setupState)), h.data !== tt && d.push(o("data", /* @__PURE__ */ Le(h.data))); + const f = a(h, "computed"); + f && d.push(o("computed", f)); + const m = a(h, "inject"); + return m && d.push(o("injected", m)), d.push([ + "div", + {}, + [ + "span", + { + style: r.style + ";opacity:0.66" + }, + "$ (internal): " + ], + ["object", { object: h }] + ]), d; + } + function o(h, d) { + return d = St({}, d), Object.keys(d).length ? [ + "div", + { style: "line-height:1.25em;margin-bottom:0.6em" }, + [ + "div", + { + style: "color:#476582" + }, + h + ], + [ + "div", + { + style: "padding-left:1.25em" + }, + ...Object.keys(d).map((f) => [ + "div", + {}, + ["span", r, f + ": "], + l(d[f], !1) + ]) + ] + ] : ["span", {}]; + } + function l(h, d = !0) { + return typeof h == "number" ? ["span", e, h] : typeof h == "string" ? ["span", n, JSON.stringify(h)] : typeof h == "boolean" ? ["span", r, h] : it(h) ? ["object", { object: d ? /* @__PURE__ */ Le(h) : h }] : ["span", n, String(h)]; + } + function a(h, d) { + const f = h.type; + if (Oe(f)) + return; + const m = {}; + for (const y in h.ctx) + u(f, y, d) && (m[y] = h.ctx[y]); + return m; + } + function u(h, d, f) { + const m = h[f]; + if (Ae(m) && m.includes(d) || it(m) && d in m || h.extends && u(h.extends, d, f) || h.mixins && h.mixins.some((y) => u(y, d, f))) + return !0; + } + function c(h) { + return /* @__PURE__ */ Nn(h) ? "ShallowRef" : h.effect ? "ComputedRef" : "Ref"; + } + window.devtoolsFormatters ? window.devtoolsFormatters.push(i) : window.devtoolsFormatters = [i]; +} +const u3 = "3.5.27", bi = process.env.NODE_ENV !== "production" ? se : Ot; +process.env.NODE_ENV; +process.env.NODE_ENV; +/** +* @vue/runtime-dom v3.5.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +let Bp; +const c3 = typeof window < "u" && window.trustedTypes; +if (c3) + try { + Bp = /* @__PURE__ */ c3.createPolicy("vue", { + createHTML: (t) => t + }); + } catch (t) { + process.env.NODE_ENV !== "production" && bi(`Error creating trusted types policy: ${t}`); + } +const Ab = Bp ? (t) => Bp.createHTML(t) : (t) => t, LR = "http://www.w3.org/2000/svg", FR = "http://www.w3.org/1998/Math/MathML", ii = typeof document < "u" ? document : null, h3 = ii && /* @__PURE__ */ ii.createElement("template"), VR = { + insert: (t, e, n) => { + e.insertBefore(t, n || null); + }, + remove: (t) => { + const e = t.parentNode; + e && e.removeChild(t); + }, + createElement: (t, e, n, r) => { + const i = e === "svg" ? ii.createElementNS(LR, t) : e === "mathml" ? ii.createElementNS(FR, t) : n ? ii.createElement(t, { is: n }) : ii.createElement(t); + return t === "select" && r && r.multiple != null && i.setAttribute("multiple", r.multiple), i; + }, + createText: (t) => ii.createTextNode(t), + createComment: (t) => ii.createComment(t), + setText: (t, e) => { + t.nodeValue = e; + }, + setElementText: (t, e) => { + t.textContent = e; + }, + parentNode: (t) => t.parentNode, + nextSibling: (t) => t.nextSibling, + querySelector: (t) => ii.querySelector(t), + setScopeId(t, e) { + t.setAttribute(e, ""); + }, + // __UNSAFE__ + // Reason: innerHTML. + // Static content here can only come from compiled templates. + // As long as the user only uses trusted templates, this is safe. + insertStaticContent(t, e, n, r, i, s) { + const o = n ? n.previousSibling : e.lastChild; + if (i && (i === s || i.nextSibling)) + for (; e.insertBefore(i.cloneNode(!0), n), !(i === s || !(i = i.nextSibling)); ) + ; + else { + h3.innerHTML = Ab( + r === "svg" ? `<svg>${t}</svg>` : r === "mathml" ? `<math>${t}</math>` : t + ); + const l = h3.content; + if (r === "svg" || r === "mathml") { + const a = l.firstChild; + for (; a.firstChild; ) + l.appendChild(a.firstChild); + l.removeChild(a); + } + e.insertBefore(l, n); + } + return [ + // first + o ? o.nextSibling : e.firstChild, + // last + n ? n.previousSibling : e.lastChild + ]; + } +}, HR = /* @__PURE__ */ Symbol("_vtc"); +function $R(t, e, n) { + const r = t[HR]; + r && (e = (e ? [e, ...r] : [...r]).join(" ")), e == null ? t.removeAttribute("class") : n ? t.setAttribute("class", e) : t.className = e; +} +const d3 = /* @__PURE__ */ Symbol("_vod"), qR = /* @__PURE__ */ Symbol("_vsh"), jR = /* @__PURE__ */ Symbol(process.env.NODE_ENV !== "production" ? "CSS_VAR_TEXT" : ""), WR = /(?:^|;)\s*display\s*:/; +function UR(t, e, n) { + const r = t.style, i = Ct(n); + let s = !1; + if (n && !i) { + if (e) + if (Ct(e)) + for (const o of e.split(";")) { + const l = o.slice(0, o.indexOf(":")).trim(); + n[l] == null && xc(r, l, ""); + } + else + for (const o in e) + n[o] == null && xc(r, o, ""); + for (const o in n) + o === "display" && (s = !0), xc(r, o, n[o]); + } else if (i) { + if (e !== n) { + const o = r[jR]; + o && (n += ";" + o), r.cssText = n, s = WR.test(n); + } + } else e && t.removeAttribute("style"); + d3 in t && (t[d3] = s ? r.display : "", t[qR] && (r.display = "none")); +} +const GR = /[^\\];\s*$/, f3 = /\s*!important$/; +function xc(t, e, n) { + if (Ae(n)) + n.forEach((r) => xc(t, e, r)); + else if (n == null && (n = ""), process.env.NODE_ENV !== "production" && GR.test(n) && bi( + `Unexpected semicolon at the end of '${e}' style value: '${n}'` + ), e.startsWith("--")) + t.setProperty(e, n); + else { + const r = KR(t, e); + f3.test(n) ? t.setProperty( + cs(r), + n.replace(f3, ""), + "important" + ) : t[r] = n; + } +} +const p3 = ["Webkit", "Moz", "ms"], mf = {}; +function KR(t, e) { + const n = mf[e]; + if (n) + return n; + let r = vr(e); + if (r !== "filter" && r in t) + return mf[e] = r; + r = Yh(r); + for (let i = 0; i < p3.length; i++) { + const s = p3[i] + r; + if (s in t) + return mf[e] = s; + } + return e; +} +const m3 = "http://www.w3.org/1999/xlink"; +function g3(t, e, n, r, i, s = wD(e)) { + r && e.startsWith("xlink:") ? n == null ? t.removeAttributeNS(m3, e.slice(6, e.length)) : t.setAttributeNS(m3, e, n) : n == null || s && !Nv(n) ? t.removeAttribute(e) : t.setAttribute( + e, + s ? "" : ql(n) ? String(n) : n + ); +} +function y3(t, e, n, r, i) { + if (e === "innerHTML" || e === "textContent") { + n != null && (t[e] = e === "innerHTML" ? Ab(n) : n); + return; + } + const s = t.tagName; + if (e === "value" && s !== "PROGRESS" && // custom elements may use _value internally + !s.includes("-")) { + const l = s === "OPTION" ? t.getAttribute("value") || "" : t.value, a = n == null ? ( + // #11647: value should be set as empty string for null and undefined, + // but <input type="checkbox"> should be set as 'on'. + t.type === "checkbox" ? "on" : "" + ) : String(n); + (l !== a || !("_value" in t)) && (t.value = a), n == null && t.removeAttribute(e), t._value = n; + return; + } + let o = !1; + if (n === "" || n == null) { + const l = typeof t[e]; + l === "boolean" ? n = Nv(n) : n == null && l === "string" ? (n = "", o = !0) : l === "number" && (n = 0, o = !0); + } + try { + t[e] = n; + } catch (l) { + process.env.NODE_ENV !== "production" && !o && bi( + `Failed setting prop "${e}" on <${s.toLowerCase()}>: value ${n} is invalid.`, + l + ); + } + o && t.removeAttribute(i || e); +} +function JR(t, e, n, r) { + t.addEventListener(e, n, r); +} +function YR(t, e, n, r) { + t.removeEventListener(e, n, r); +} +const v3 = /* @__PURE__ */ Symbol("_vei"); +function ZR(t, e, n, r, i = null) { + const s = t[v3] || (t[v3] = {}), o = s[e]; + if (r && o) + o.value = process.env.NODE_ENV !== "production" ? w3(r, e) : r; + else { + const [l, a] = XR(e); + if (r) { + const u = s[e] = tz( + process.env.NODE_ENV !== "production" ? w3(r, e) : r, + i + ); + JR(t, l, u, a); + } else o && (YR(t, l, o, a), s[e] = void 0); + } +} +const b3 = /(?:Once|Passive|Capture)$/; +function XR(t) { + let e; + if (b3.test(t)) { + e = {}; + let r; + for (; r = t.match(b3); ) + t = t.slice(0, t.length - r[0].length), e[r[0].toLowerCase()] = !0; + } + return [t[2] === ":" ? t.slice(3) : cs(t.slice(2)), e]; +} +let gf = 0; +const QR = /* @__PURE__ */ Promise.resolve(), ez = () => gf || (QR.then(() => gf = 0), gf = Date.now()); +function tz(t, e) { + const n = (r) => { + if (!r._vts) + r._vts = Date.now(); + else if (r._vts <= n.attached) + return; + qr( + nz(r, n.value), + e, + 5, + [r] + ); + }; + return n.value = t, n.attached = ez(), n; +} +function w3(t, e) { + return Oe(t) || Ae(t) ? t : (bi( + `Wrong type passed as event handler to ${e} - did you forget @ or : in front of your prop? +Expected function or array of functions, received type ${typeof t}.` + ), Ot); +} +function nz(t, e) { + if (Ae(e)) { + const n = t.stopImmediatePropagation; + return t.stopImmediatePropagation = () => { + n.call(t), t._stopped = !0; + }, e.map( + (r) => (i) => !i._stopped && r && r(i) + ); + } else + return e; +} +const k3 = (t) => t.charCodeAt(0) === 111 && t.charCodeAt(1) === 110 && // lowercase letter +t.charCodeAt(2) > 96 && t.charCodeAt(2) < 123, rz = (t, e, n, r, i, s) => { + const o = i === "svg"; + e === "class" ? $R(t, r, o) : e === "style" ? UR(t, n, r) : au(e) ? Qc(e) || ZR(t, e, n, r, s) : (e[0] === "." ? (e = e.slice(1), !0) : e[0] === "^" ? (e = e.slice(1), !1) : iz(t, e, r, o)) ? (y3(t, e, r), !t.tagName.includes("-") && (e === "value" || e === "checked" || e === "selected") && g3(t, e, r, o, s, e !== "value")) : /* #11081 force set props for possible async custom element */ t._isVueCE && (/[A-Z]/.test(e) || !Ct(r)) ? y3(t, vr(e), r, s, e) : (e === "true-value" ? t._trueValue = r : e === "false-value" && (t._falseValue = r), g3(t, e, r, o)); +}; +function iz(t, e, n, r) { + if (r) + return !!(e === "innerHTML" || e === "textContent" || e in t && k3(e) && Oe(n)); + if (e === "spellcheck" || e === "draggable" || e === "translate" || e === "autocorrect" || e === "sandbox" && t.tagName === "IFRAME" || e === "form" || e === "list" && t.tagName === "INPUT" || e === "type" && t.tagName === "TEXTAREA") + return !1; + if (e === "width" || e === "height") { + const i = t.tagName; + if (i === "IMG" || i === "VIDEO" || i === "CANVAS" || i === "SOURCE") + return !1; + } + return k3(e) && Ct(n) ? !1 : e in t; +} +const sz = /* @__PURE__ */ St({ patchProp: rz }, VR); +let x3; +function oz() { + return x3 || (x3 = gR(sz)); +} +const nd = (...t) => { + const e = oz().createApp(...t); + process.env.NODE_ENV !== "production" && (az(e), uz(e)); + const { mount: n } = e; + return e.mount = (r) => { + const i = cz(r); + if (!i) return; + const s = e._component; + !Oe(s) && !s.render && !s.template && (s.template = i.innerHTML), i.nodeType === 1 && (i.textContent = ""); + const o = n(i, !1, lz(i)); + return i instanceof Element && (i.removeAttribute("v-cloak"), i.setAttribute("data-v-app", "")), o; + }, e; +}; +function lz(t) { + if (t instanceof SVGElement) + return "svg"; + if (typeof MathMLElement == "function" && t instanceof MathMLElement) + return "mathml"; +} +function az(t) { + Object.defineProperty(t.config, "isNativeTag", { + value: (e) => gD(e) || yD(e) || vD(e), + writable: !1 + }); +} +function uz(t) { + { + const e = t.config.isCustomElement; + Object.defineProperty(t.config, "isCustomElement", { + get() { + return e; + }, + set() { + bi( + "The `isCustomElement` config option is deprecated. Use `compilerOptions.isCustomElement` instead." + ); + } + }); + const n = t.config.compilerOptions, r = 'The `compilerOptions` config option is only respected when using a build of Vue.js that includes the runtime compiler (aka "full build"). Since you are using the runtime-only build, `compilerOptions` must be passed to `@vue/compiler-dom` in the build setup instead.\n- For vue-loader: pass it via vue-loader\'s `compilerOptions` loader option.\n- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader\n- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-sfc'; + Object.defineProperty(t.config, "compilerOptions", { + get() { + return bi(r), n; + }, + set() { + bi(r); + } + }); + } +} +function cz(t) { + if (Ct(t)) { + const e = document.querySelector(t); + return process.env.NODE_ENV !== "production" && !e && bi( + `Failed to mount app: mount target selector "${t}" returned null.` + ), e; + } + return process.env.NODE_ENV !== "production" && window.ShadowRoot && t instanceof window.ShadowRoot && t.mode === "closed" && bi( + 'mounting on a ShadowRoot with `{mode: "closed"}` may lead to unpredictable bugs' + ), t; +} +/** +* vue v3.5.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +function hz() { + BR(); +} +process.env.NODE_ENV !== "production" && hz(); +function dz(t) { + const e = vt( + {}, + `${t}_SLASH_SPEC` + ), n = hn((i) => { + const s = i.get(e.key); + return new Dt({ + key: new Nt(`${t}_SLASH`), + ...s + }); + }), r = [e, n]; + return r.key = e.key, r.pluginKey = n.key, e.meta = { + package: "@milkdown/plugin-slash", + displayName: `Ctx<slashSpec>|${t}` + }, n.meta = { + package: "@milkdown/plugin-slash", + displayName: `Prose<slash>|${t}` + }, r; +} +var wl, P0, B0, L0, F0, Ys, V0, kl, H0, $0, yh, Ib; +class fz { + constructor(e) { + Z(this, yh); + Z(this, wl); + /// @internal + Z(this, P0); + /// @internal + Z(this, B0); + /// @internal + Z(this, L0); + /// @internal + Z(this, F0); + /// @internal + Z(this, Ys); + /// @internal + Z(this, V0); + /// @internal + Z(this, kl); + /// The offset to get the block. Default is 0. + Z(this, H0); + Z(this, $0); + V(this, wl, !1), this.onShow = () => { + }, this.onHide = () => { + }, V(this, $0, (n, r) => { + const { state: i, composing: s } = n, { selection: o, doc: l } = i, { ranges: a } = o, u = Math.min(...a.map((f) => f.$from.pos)), c = Math.max(...a.map((f) => f.$to.pos)), h = r && r.doc.eq(l) && r.selection.eq(o); + if (T(this, wl) || ((T(this, L0) ?? n.dom.parentElement ?? document.body).appendChild(this.element), V(this, wl, !0)), s || h) return; + if (!T(this, V0).call(this, n, r)) { + this.hide(); + return; + } + Jp({ + getBoundingClientRect: () => U6(n, u, c) + }, this.element, { + placement: "bottom-start", + middleware: [Yp(), Zp(T(this, H0)), ...T(this, P0)], + ...T(this, B0) + }).then(({ x: f, y: m }) => { + Object.assign(this.element.style, { + left: `${f}px`, + top: `${m}px` + }); + }).catch(console.error), this.show(); + }), this.update = (n, r) => { + T(this, kl).call(this, n, r); + }, this.getContent = (n, r = (i) => i.type.name === "paragraph") => { + const { selection: i } = n.state, { empty: s, $from: o } = i, l = n.state.selection instanceof Ce; + if (typeof document > "u") return; + const a = this.element.contains(document.activeElement), u = !n.hasFocus() && !a, c = !n.editable, d = !MN(r)(n.state.selection); + if (!(u || c || !s || !l || d)) + return o.parent.textBetween( + Math.max(0, o.parentOffset - 500), + o.parentOffset, + void 0, + "" + ); + }, this.destroy = () => { + T(this, kl).cancel(); + }, this.show = () => { + this.element.dataset.show = "true", this.onShow(); + }, this.hide = () => { + this.element.dataset.show = "false", this.onHide(); + }, this.element = e.content, V(this, F0, e.debounce ?? 200), V(this, V0, e.shouldShow ?? vu(this, yh, Ib)), V(this, Ys, e.trigger ?? "/"), V(this, H0, e.offset), V(this, P0, e.middleware ?? []), V(this, B0, e.floatingUIOptions ?? {}), V(this, L0, e.root), V(this, kl, D1(T(this, $0), T(this, F0))); + } +} +wl = new WeakMap(), P0 = new WeakMap(), B0 = new WeakMap(), L0 = new WeakMap(), F0 = new WeakMap(), Ys = new WeakMap(), V0 = new WeakMap(), kl = new WeakMap(), H0 = new WeakMap(), $0 = new WeakMap(), yh = new WeakSet(), /// @internal +Ib = function(e) { + const n = this.getContent(e); + if (!n) return !1; + const r = n.at(-1); + return r ? Array.isArray(T(this, Ys)) ? T(this, Ys).includes(r) : T(this, Ys) === r : !1; +}; +function v0({ icon: t, class: e, onClick: n }) { + return /* @__PURE__ */ ze( + "span", + { + class: Qa("milkdown-icon", e), + onPointerdown: n, + innerHTML: t ? Xp.sanitize(t.trim()) : void 0 + } + ); +} +v0.props = { + icon: { + type: String, + required: !1 + }, + class: { + type: String, + required: !1 + }, + onClick: { + type: Function, + required: !1 + } +}; +var pz = Object.defineProperty, S3 = Object.getOwnPropertySymbols, mz = Object.prototype.hasOwnProperty, gz = Object.prototype.propertyIsEnumerable, C3 = (t, e, n) => e in t ? pz(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n, yz = (t, e) => { + for (var n in e || (e = {})) + mz.call(e, n) && C3(t, n, e[n]); + if (S3) + for (var n of S3(e)) + gz.call(e, n) && C3(t, n, e[n]); + return t; +}; +function pu(t, e) { + return Object.assign(t, { + meta: yz({ + package: "@milkdown/components" + }, e) + }), t; +} +const vz = { + imageIcon: "🌌", + captionIcon: "💬", + uploadButton: "Upload file", + confirmButton: "Confirm ⏎", + uploadPlaceholderText: "or paste the image link ...", + captionPlaceholderText: "Image caption", + onUpload: (t) => Promise.resolve(URL.createObjectURL(t)) +}, Db = vt( + vz, + "imageBlockConfigCtx" +); +pu(Db, { + displayName: "Config<image-block>", + group: "ImageBlock" +}); +function bz(t) { + return wo( + t, + "paragraph", + (e, n, r) => { + var i, s; + if (((i = e.children) == null ? void 0 : i.length) !== 1) return; + const o = (s = e.children) == null ? void 0 : s[0]; + if (!o || o.type !== "image") return; + const { url: l, alt: a, title: u } = o, c = { + type: "image-block", + url: l, + alt: a, + title: u + }; + r.children.splice(n, 1, c); + } + ); +} +const _b = vs( + "remark-image-block", + () => () => bz +); +pu(_b.plugin, { + displayName: "Remark<remarkImageBlock>", + group: "ImageBlock" +}); +pu(_b.options, { + displayName: "RemarkConfig<remarkImageBlock>", + group: "ImageBlock" +}); +var wz = Object.defineProperty, N3 = Object.getOwnPropertySymbols, kz = Object.prototype.hasOwnProperty, xz = Object.prototype.propertyIsEnumerable, M3 = (t, e, n) => e in t ? wz(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n, Sz = (t, e) => { + for (var n in e || (e = {})) + kz.call(e, n) && M3(t, n, e[n]); + if (N3) + for (var n of N3(e)) + xz.call(e, n) && M3(t, n, e[n]); + return t; +}; +const Lp = "image-block", fg = Mt("image-block", () => ({ + inline: !1, + group: "block", + selectable: !0, + draggable: !0, + isolating: !0, + marks: "", + atom: !0, + priority: 100, + attrs: { + src: { default: "", validate: "string" }, + caption: { default: "", validate: "string" }, + ratio: { default: 1, validate: "number" } + }, + parseDOM: [ + { + tag: `img[data-type="${Lp}"]`, + getAttrs: (t) => { + var e; + if (!(t instanceof HTMLElement)) throw Cr(t); + return { + src: t.getAttribute("src") || "", + caption: t.getAttribute("caption") || "", + ratio: Number((e = t.getAttribute("ratio")) != null ? e : 1) + }; + } + } + ], + toDOM: (t) => ["img", Sz({ "data-type": Lp }, t.attrs)], + parseMarkdown: { + match: ({ type: t }) => t === "image-block", + runner: (t, e, n) => { + const r = e.url, i = e.title; + let s = Number(e.alt || 1); + (Number.isNaN(s) || s === 0) && (s = 1), t.addNode(n, { + src: r, + caption: i, + ratio: s + }); + } + }, + toMarkdown: { + match: (t) => t.type.name === "image-block", + runner: (t, e) => { + t.openNode("paragraph"), t.addNode("image", void 0, void 0, { + title: e.attrs.caption, + url: e.attrs.src, + alt: `${Number.parseFloat(e.attrs.ratio).toFixed(2)}` + }), t.closeNode(); + } + } +})); +pu(fg.node, { + displayName: "NodeSchema<image-block>", + group: "ImageBlock" +}); +function Ya({ icon: t, class: e, onClick: n }) { + return /* @__PURE__ */ ze( + "span", + { + class: Qa("milkdown-icon", e), + onPointerdown: n, + innerHTML: t ? Xp.sanitize(t.trim()) : void 0 + } + ); +} +Ya.props = { + icon: { + type: String, + required: !1 + }, + class: { + type: String, + required: !1 + }, + onClick: { + type: Function, + required: !1 + } +}; +const Cz = jy("abcdefg", 8), Nz = /* @__PURE__ */ Wl({ + props: { + src: { + type: Object, + required: !0 + }, + selected: { + type: Object, + required: !0 + }, + readonly: { + type: Object, + required: !0 + }, + setLink: { + type: Function, + required: !0 + }, + imageIcon: { + type: String, + required: !1 + }, + uploadButton: { + type: String, + required: !1 + }, + confirmButton: { + type: String, + required: !1 + }, + uploadPlaceholderText: { + type: String, + required: !1 + }, + onUpload: { + type: Function, + required: !0 + } + }, + setup({ + readonly: t, + src: e, + setLink: n, + onUpload: r, + imageIcon: i, + uploadButton: s, + confirmButton: o, + uploadPlaceholderText: l, + className: a + }) { + var u, c; + const h = /* @__PURE__ */ kt(!1), d = /* @__PURE__ */ kt(), f = /* @__PURE__ */ kt((u = e.value) != null ? u : ""), m = /* @__PURE__ */ kt(Cz()), y = /* @__PURE__ */ kt(((c = e.value) == null ? void 0 : c.length) !== 0), b = (B) => { + const A = B.target.value; + y.value = A.length !== 0, f.value = A; + }, w = (B) => { + var _, A; + B.key === "Enter" && n((A = (_ = d.value) == null ? void 0 : _.value) != null ? A : ""); + }, C = () => { + var B, _; + n((_ = (B = d.value) == null ? void 0 : B.value) != null ? _ : ""); + }, N = (B) => { + var _; + const A = (_ = B.target.files) == null ? void 0 : _[0]; + A && r(A).then((L) => { + L && (n(L), y.value = !0); + }).catch((L) => { + console.error("An error occurred while uploading image"), console.error(L); + }); + }; + return () => /* @__PURE__ */ ze("div", { class: Qa("image-edit", a) }, /* @__PURE__ */ ze(Ya, { icon: i, class: "image-icon" }), /* @__PURE__ */ ze("div", { class: Qa("link-importer", h.value && "focus") }, /* @__PURE__ */ ze( + "input", + { + ref: d, + draggable: "true", + onDragstart: (B) => { + B.preventDefault(), B.stopPropagation(); + }, + disabled: t.value, + class: "link-input-area", + value: f.value, + onInput: b, + onKeydown: w, + onFocus: () => h.value = !0, + onBlur: () => h.value = !1 + } + ), !y.value && /* @__PURE__ */ ze("div", { class: "placeholder" }, /* @__PURE__ */ ze( + "input", + { + disabled: t.value, + class: "hidden", + id: m.value, + type: "file", + accept: "image/*", + onChange: N + } + ), /* @__PURE__ */ ze("label", { class: "uploader", for: m.value }, /* @__PURE__ */ ze(Ya, { icon: s })), /* @__PURE__ */ ze("span", { class: "text", onClick: () => { + var B; + return (B = d.value) == null ? void 0 : B.focus(); + } }, l))), f.value && /* @__PURE__ */ ze("div", { class: "confirm", onClick: () => C() }, /* @__PURE__ */ ze(Ya, { icon: o }))); + } +}), Mz = /* @__PURE__ */ Wl({ + props: { + src: { + type: Object, + required: !0 + }, + caption: { + type: Object, + required: !0 + }, + ratio: { + type: Object, + required: !0 + }, + selected: { + type: Object, + required: !0 + }, + readonly: { + type: Object, + required: !0 + }, + setAttr: { + type: Function, + required: !0 + }, + config: { + type: Object, + required: !0 + } + }, + setup({ src: t, caption: e, ratio: n, readonly: r, setAttr: i, config: s }) { + var o; + const l = /* @__PURE__ */ kt(), a = /* @__PURE__ */ kt(), u = /* @__PURE__ */ kt(!!((o = e.value) != null && o.length)), c = /* @__PURE__ */ kt(0), h = () => { + var C; + const N = l.value; + if (!N) return; + const B = N.closest(".milkdown-image-block"); + if (!B) return; + const _ = B.getBoundingClientRect().width; + if (!_) return; + const A = N.height, L = N.width, K = L < _ ? A : _ * (A / L), J = (K * ((C = n.value) != null ? C : 1)).toFixed(2); + N.dataset.origin = K.toFixed(2), N.dataset.height = J, N.style.height = `${J}px`; + }, d = (C) => { + C.preventDefault(), C.stopPropagation(), !r.value && (u.value = !u.value); + }, f = (C) => { + const B = C.target.value; + c.value && window.clearTimeout(c.value), c.value = window.setTimeout(() => { + i("caption", B); + }, 1e3); + }, m = (C) => { + const B = C.target.value; + c.value && (window.clearTimeout(c.value), c.value = 0), i("caption", B); + }, y = (C) => { + C.preventDefault(); + const N = l.value; + if (!N) return; + const B = N.getBoundingClientRect().top, _ = C.clientY - B, A = Number(_ < 100 ? 100 : _).toFixed(2); + N.dataset.height = A, N.style.height = `${A}px`; + }, b = () => { + window.removeEventListener("pointermove", y), window.removeEventListener("pointerup", b); + const C = l.value; + if (!C) return; + const N = Number(C.dataset.origin), B = Number(C.dataset.height), _ = Number.parseFloat( + Number(B / N).toFixed(2) + ); + Number.isNaN(_) || i("ratio", _); + }, w = (C) => { + r.value || (C.preventDefault(), C.stopPropagation(), window.addEventListener("pointermove", y), window.addEventListener("pointerup", b)); + }; + return () => /* @__PURE__ */ ze(kn, null, /* @__PURE__ */ ze("div", { class: "image-wrapper" }, /* @__PURE__ */ ze("div", { class: "operation" }, /* @__PURE__ */ ze("div", { class: "operation-item", onPointerdown: d }, /* @__PURE__ */ ze(Ya, { icon: s.captionIcon }))), /* @__PURE__ */ ze( + "img", + { + ref: l, + "data-type": Lp, + onLoad: h, + src: t.value, + alt: e.value + } + ), /* @__PURE__ */ ze( + "div", + { + ref: a, + class: "image-resize-handle", + onPointerdown: w + } + )), u.value && /* @__PURE__ */ ze( + "input", + { + draggable: "true", + onDragstart: (C) => { + C.preventDefault(), C.stopPropagation(); + }, + class: "caption-input", + placeholder: s == null ? void 0 : s.captionPlaceholderText, + onInput: f, + onBlur: m, + value: e.value + } + )); + } +}); +var Tz = Object.defineProperty, T3 = Object.getOwnPropertySymbols, Ez = Object.prototype.hasOwnProperty, Oz = Object.prototype.propertyIsEnumerable, E3 = (t, e, n) => e in t ? Tz(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n, Az = (t, e) => { + for (var n in e || (e = {})) + Ez.call(e, n) && E3(t, n, e[n]); + if (T3) + for (var n of T3(e)) + Oz.call(e, n) && E3(t, n, e[n]); + return t; +}; +const Iz = /* @__PURE__ */ Wl({ + props: { + src: { + type: Object, + required: !0 + }, + caption: { + type: Object, + required: !0 + }, + ratio: { + type: Object, + required: !0 + }, + selected: { + type: Object, + required: !0 + }, + readonly: { + type: Object, + required: !0 + }, + setAttr: { + type: Function, + required: !0 + }, + config: { + type: Object, + required: !0 + } + }, + setup(t) { + const { src: e } = t; + return () => { + var n; + return (n = e.value) != null && n.length ? /* @__PURE__ */ ze(Mz, Az({}, t)) : /* @__PURE__ */ ze( + Nz, + { + src: t.src, + selected: t.selected, + readonly: t.readonly, + setLink: (r) => t.setAttr("src", r), + imageIcon: t.config.imageIcon, + uploadButton: t.config.uploadButton, + confirmButton: t.config.confirmButton, + uploadPlaceholderText: t.config.uploadPlaceholderText, + onUpload: t.config.onUpload + } + ); + }; + } +}), Dz = DT( + fg.node, + (t) => (e, n, r) => { + const i = /* @__PURE__ */ kt(e.attrs.src), s = /* @__PURE__ */ kt(e.attrs.caption), o = /* @__PURE__ */ kt(e.attrs.ratio), l = /* @__PURE__ */ kt(!1), a = /* @__PURE__ */ kt(!n.editable), u = (b, w) => { + if (!n.editable) return; + const C = r(); + C != null && n.dispatch( + n.state.tr.setNodeAttribute( + C, + b, + b === "src" ? Xp.sanitize(w) : w + ) + ); + }, c = t.get(Db.key), h = nd(Iz, { + src: i, + caption: s, + ratio: o, + selected: l, + readonly: a, + setAttr: u, + config: c + }), d = document.createElement("div"); + d.className = "milkdown-image-block"; + const f = tb(() => { + l.value ? d.classList.add("selected") : d.classList.remove("selected"); + }), m = c.proxyDomURL, y = (b) => { + if (!m) + i.value = b.attrs.src; + else { + const w = m(b.attrs.src); + typeof w == "string" ? i.value = w : w.then((C) => { + i.value = C; + }).catch(console.error); + } + o.value = b.attrs.ratio, s.value = b.attrs.caption, a.value = !n.editable; + }; + return y(e), h.mount(d), { + dom: d, + update: (b) => b.type !== e.type ? !1 : (y(b), !0), + stopEvent: (b) => b.target instanceof HTMLInputElement, + selectNode: () => { + l.value = !0; + }, + deselectNode: () => { + l.value = !1; + }, + destroy: () => { + f(), h.unmount(), d.remove(); + } + }; + } +); +pu(Dz, { + displayName: "NodeView<image-block>", + group: "ImageBlock" +}); +function Rb(t) { + return t.use("FeaturesCtx"); +} +function _z(t) { + return (e) => { + Rb(e).update((n) => n.includes(t) ? n : [...n, t]); + }; +} +var Za = /* @__PURE__ */ ((t) => (t.CodeMirror = "code-mirror", t.ListItem = "list-item", t.LinkTooltip = "link-tooltip", t.Cursor = "cursor", t.ImageBlock = "image-block", t.BlockEdit = "block-edit", t.Toolbar = "toolbar", t.Placeholder = "placeholder", t.Table = "table", t.Latex = "latex", t))(Za || {}); +const Rz = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_8070)"> + <path + d="M4 10.5C3.17 10.5 2.5 11.17 2.5 12C2.5 12.83 3.17 13.5 4 13.5C4.83 13.5 5.5 12.83 5.5 12C5.5 11.17 4.83 10.5 4 10.5ZM4 4.5C3.17 4.5 2.5 5.17 2.5 6C2.5 6.83 3.17 7.5 4 7.5C4.83 7.5 5.5 6.83 5.5 6C5.5 5.17 4.83 4.5 4 4.5ZM4 16.5C3.17 16.5 2.5 17.18 2.5 18C2.5 18.82 3.18 19.5 4 19.5C4.82 19.5 5.5 18.82 5.5 18C5.5 17.18 4.83 16.5 4 16.5ZM8 19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17H8C7.45 17 7 17.45 7 18C7 18.55 7.45 19 8 19ZM8 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11H8C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13ZM7 6C7 6.55 7.45 7 8 7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H8C7.45 5 7 5.45 7 6Z" + /> + </g> + <defs> + <clipPath id="clip0_977_8070"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`, zz = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_8081)"> + <path + d="M9.4 16.6L4.8 12L9.4 7.4L8 6L2 12L8 18L9.4 16.6ZM14.6 16.6L19.2 12L14.6 7.4L16 6L22 12L16 18L14.6 16.6Z" + /> + </g> + <defs> + <clipPath id="clip0_977_8081"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`, Pz = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_7900)"> + <path + fill-rule="evenodd" + clip-rule="evenodd" + d="M19 13H5C4.45 13 4 12.55 4 12C4 11.45 4.45 11 5 11H19C19.55 11 20 11.45 20 12C20 12.55 19.55 13 19 13Z" + /> + </g> + <defs> + <clipPath id="clip0_977_7900"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`, Bz = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_992_5553)"> + <path + d="M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM12 17H14V7H10V9H12V17Z" + /> + </g> + <defs> + <clipPath id="clip0_992_5553"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`, Lz = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_992_5559)"> + <path + d="M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15H11V13H13C14.1 13 15 12.11 15 11V9C15 7.89 14.1 7 13 7H9V9H13V11H11C9.9 11 9 11.89 9 13V17H15V15Z" + /> + </g> + <defs> + <clipPath id="clip0_992_5559"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`, Fz = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_992_5565)"> + <path + d="M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15V13.5C15 12.67 14.33 12 13.5 12C14.33 12 15 11.33 15 10.5V9C15 7.89 14.1 7 13 7H9V9H13V11H11V13H13V15H9V17H13C14.1 17 15 16.11 15 15Z" + /> + </g> + <defs> + <clipPath id="clip0_992_5565"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`, Vz = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_7757)"> + <path + d="M19.04 3H5.04004C3.94004 3 3.04004 3.9 3.04004 5V19C3.04004 20.1 3.94004 21 5.04004 21H19.04C20.14 21 21.04 20.1 21.04 19V5C21.04 3.9 20.14 3 19.04 3ZM19.04 19H5.04004V5H19.04V19ZM13.04 17H15.04V7H13.04V11H11.04V7H9.04004V13H13.04V17Z" + /> + </g> + <defs> + <clipPath id="clip0_977_7757"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`, Hz = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_7760)"> + <path + d="M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15V13C15 11.89 14.1 11 13 11H11V9H15V7H9V13H13V15H9V17H13C14.1 17 15 16.11 15 15Z" + /> + </g> + <defs> + <clipPath id="clip0_977_7760"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`, $z = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_7763)"> + <path + d="M11 17H13C14.1 17 15 16.11 15 15V13C15 11.89 14.1 11 13 11H11V9H15V7H11C9.9 7 9 7.89 9 9V15C9 16.11 9.9 17 11 17ZM11 13H13V15H11V13ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19Z" + /> + </g> + <defs> + <clipPath id="clip0_977_7763"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`, qz = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_8075)"> + <path + d="M19 5V19H5V5H19ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM14.14 11.86L11.14 15.73L9 13.14L6 17H18L14.14 11.86Z" + /> + </g> + <defs> + <clipPath id="clip0_977_8075"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`, jz = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_971_7680)"> + <path + d="M11 18C11 19.1 10.1 20 9 20C7.9 20 7 19.1 7 18C7 16.9 7.9 16 9 16C10.1 16 11 16.9 11 18ZM9 10C7.9 10 7 10.9 7 12C7 13.1 7.9 14 9 14C10.1 14 11 13.1 11 12C11 10.9 10.1 10 9 10ZM9 4C7.9 4 7 4.9 7 6C7 7.1 7.9 8 9 8C10.1 8 11 7.1 11 6C11 4.9 10.1 4 9 4ZM15 8C16.1 8 17 7.1 17 6C17 4.9 16.1 4 15 4C13.9 4 13 4.9 13 6C13 7.1 13.9 8 15 8ZM15 10C13.9 10 13 10.9 13 12C13 13.1 13.9 14 15 14C16.1 14 17 13.1 17 12C17 10.9 16.1 10 15 10ZM15 16C13.9 16 13 16.9 13 18C13 19.1 13.9 20 15 20C16.1 20 17 19.1 17 18C17 16.9 16.1 16 15 16Z" + /> + </g> + <defs> + <clipPath id="clip0_971_7680"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`, Wz = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_8067)"> + <path + d="M8 7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H8C7.45 5 7 5.45 7 6C7 6.55 7.45 7 8 7ZM20 17H8C7.45 17 7 17.45 7 18C7 18.55 7.45 19 8 19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17ZM20 11H8C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11ZM4.5 16H2.5C2.22 16 2 16.22 2 16.5C2 16.78 2.22 17 2.5 17H4V17.5H3.5C3.22 17.5 3 17.72 3 18C3 18.28 3.22 18.5 3.5 18.5H4V19H2.5C2.22 19 2 19.22 2 19.5C2 19.78 2.22 20 2.5 20H4.5C4.78 20 5 19.78 5 19.5V16.5C5 16.22 4.78 16 4.5 16ZM2.5 5H3V7.5C3 7.78 3.22 8 3.5 8C3.78 8 4 7.78 4 7.5V4.5C4 4.22 3.78 4 3.5 4H2.5C2.22 4 2 4.22 2 4.5C2 4.78 2.22 5 2.5 5ZM4.5 10H2.5C2.22 10 2 10.22 2 10.5C2 10.78 2.22 11 2.5 11H3.8L2.12 12.96C2.04 13.05 2 13.17 2 13.28V13.5C2 13.78 2.22 14 2.5 14H4.5C4.78 14 5 13.78 5 13.5C5 13.22 4.78 13 4.5 13H3.2L4.88 11.04C4.96 10.95 5 10.83 5 10.72V10.5C5 10.22 4.78 10 4.5 10Z" + /> + </g> + <defs> + <clipPath id="clip0_977_8067"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`, Uz = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_971_7676)"> + <path + d="M18 13H13V18C13 18.55 12.55 19 12 19C11.45 19 11 18.55 11 18V13H6C5.45 13 5 12.55 5 12C5 11.45 5.45 11 6 11H11V6C11 5.45 11.45 5 12 5C12.55 5 13 5.45 13 6V11H18C18.55 11 19 11.45 19 12C19 12.55 18.55 13 18 13Z" + /> + </g> + <defs> + <clipPath id="clip0_971_7676"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`, Gz = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_7897)"> + <path + d="M7.17 17C7.68 17 8.15 16.71 8.37 16.26L9.79 13.42C9.93 13.14 10 12.84 10 12.53V8C10 7.45 9.55 7 9 7H5C4.45 7 4 7.45 4 8V12C4 12.55 4.45 13 5 13H7L5.97 15.06C5.52 15.95 6.17 17 7.17 17ZM17.17 17C17.68 17 18.15 16.71 18.37 16.26L19.79 13.42C19.93 13.14 20 12.84 20 12.53V8C20 7.45 19.55 7 19 7H15C14.45 7 14 7.45 14 8V12C14 12.55 14.45 13 15 13H17L15.97 15.06C15.52 15.95 16.17 17 17.17 17Z" + /> + </g> + <defs> + <clipPath id="clip0_977_7897"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`, Kz = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_8078)"> + <path + d="M20 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H20C21.1 21 22 20.1 22 19V5C22 3.9 21.1 3 20 3ZM20 5V8H5V5H20ZM15 19H10V10H15V19ZM5 10H8V19H5V10ZM17 19V10H20V19H17Z" + /> + </g> + <defs> + <clipPath id="clip0_977_8078"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`, Jz = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_992_5547)"> + <path + d="M5 5.5C5 6.33 5.67 7 6.5 7H10.5V17.5C10.5 18.33 11.17 19 12 19C12.83 19 13.5 18.33 13.5 17.5V7H17.5C18.33 7 19 6.33 19 5.5C19 4.67 18.33 4 17.5 4H6.5C5.67 4 5 4.67 5 5.5Z" + /> + </g> + <defs> + <clipPath id="clip0_992_5547"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`, Yz = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <path + d="M5.66936 16.3389L9.39244 12.6158C9.54115 12.4671 9.71679 12.3937 9.91936 12.3957C10.1219 12.3976 10.2975 12.4761 10.4463 12.6312C10.5847 12.7823 10.654 12.9585 10.654 13.1599C10.654 13.3613 10.5847 13.5363 10.4463 13.6851L6.32704 17.8197C6.14627 18.0004 5.93538 18.0908 5.69436 18.0908C5.45333 18.0908 5.24243 18.0004 5.06166 17.8197L3.01744 15.7754C2.87899 15.637 2.81136 15.4629 2.81456 15.2533C2.81776 15.0437 2.88859 14.8697 3.02706 14.7312C3.16551 14.5928 3.34008 14.5235 3.55076 14.5235C3.76144 14.5235 3.93494 14.5928 4.07126 14.7312L5.66936 16.3389ZM5.66936 8.72359L9.39244 5.00049C9.54115 4.85177 9.71679 4.77838 9.91936 4.78031C10.1219 4.78223 10.2975 4.86075 10.4463 5.01586C10.5847 5.16691 10.654 5.34314 10.654 5.54454C10.654 5.74592 10.5847 5.92097 10.4463 6.06969L6.32704 10.2043C6.14627 10.3851 5.93538 10.4755 5.69436 10.4755C5.45333 10.4755 5.24243 10.3851 5.06166 10.2043L3.01744 8.16009C2.87899 8.02162 2.81136 7.84759 2.81456 7.63799C2.81776 7.42837 2.88859 7.25433 3.02706 7.11586C3.16551 6.97741 3.34008 6.90819 3.55076 6.90819C3.76144 6.90819 3.93494 6.97741 4.07126 7.11586L5.66936 8.72359ZM13.7597 16.5581C13.5472 16.5581 13.3691 16.4862 13.2253 16.3424C13.0816 16.1986 13.0097 16.0204 13.0097 15.8078C13.0097 15.5952 13.0816 15.4171 13.2253 15.2735C13.3691 15.13 13.5472 15.0582 13.7597 15.0582H20.7597C20.9722 15.0582 21.1503 15.1301 21.2941 15.2739C21.4378 15.4177 21.5097 15.5959 21.5097 15.8085C21.5097 16.0211 21.4378 16.1992 21.2941 16.3427C21.1503 16.4863 20.9722 16.5581 20.7597 16.5581H13.7597ZM13.7597 8.94276C13.5472 8.94276 13.3691 8.87085 13.2253 8.72704C13.0816 8.58324 13.0097 8.40504 13.0097 8.19244C13.0097 7.97985 13.0816 7.80177 13.2253 7.65819C13.3691 7.5146 13.5472 7.44281 13.7597 7.44281H20.7597C20.9722 7.44281 21.1503 7.51471 21.2941 7.65851C21.4378 7.80233 21.5097 7.98053 21.5097 8.19311C21.5097 8.40571 21.4378 8.5838 21.2941 8.72739C21.1503 8.87097 20.9722 8.94276 20.7597 8.94276H13.7597Z" + /> + </svg> +`, Zz = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="32" + height="32" + viewBox="0 0 24 24" + > + <path + fill="currentColor" + d="M7 19v-.808L13.096 12L7 5.808V5h10v1.25H9.102L14.727 12l-5.625 5.77H17V19z" + /> + </svg> +`; +function Xz(t) { + return t.$from.parent.type.name === "code_block"; +} +function Qz(t) { + var e; + const n = (e = t.$from.node(t.$from.depth - 1)) == null ? void 0 : e.type; + return (n == null ? void 0 : n.name) === "list_item"; +} +var zb = (t) => { + throw TypeError(t); +}, Pb = (t, e, n) => e.has(t) || zb("Cannot " + n), ia = (t, e, n) => (Pb(t, e, "read from private field"), n ? n.call(t) : e.get(t)), O3 = (t, e, n) => e.has(t) ? zb("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(t) : e.set(t, n), eP = (t, e, n, r) => (Pb(t, e, "write to private field"), e.set(t, n), n), $o, Sc; +let tP = class { + constructor() { + O3(this, $o, []), this.clear = () => (eP(this, $o, []), this), O3(this, Sc, (e) => { + const n = { + group: e, + addItem: (r, i) => { + const s = { ...i, key: r }; + return e.items.push(s), n; + }, + clear: () => (e.items = [], n) + }; + return n; + }), this.addGroup = (e, n) => { + const i = { + key: e, + label: n, + items: [] + }; + return ia(this, $o).push(i), ia(this, Sc).call(this, i); + }, this.getGroup = (e) => { + const n = ia(this, $o).find((r) => r.key === e); + if (!n) throw new Error(`Group with key ${e} not found`); + return ia(this, Sc).call(this, n); + }, this.build = () => ia(this, $o); + } +}; +$o = /* @__PURE__ */ new WeakMap(); +Sc = /* @__PURE__ */ new WeakMap(); +function nP(t, e, n) { + var r, i, s, o, l, a, u, c, h, d, f, m, y, b, w, C, N, B, _, A, L, K, J, P, ie, ne, _e, De, ge, Re, fe, ye, nt, E, Qe, Ue, O, gt, Rt, lt, bt, dt, Lt, $t, Xt, ks, x, I, F, W, j, q, ee, X, te, U, ve, le, pe, R, $, ue, de, Ie, et, wt, ft, fn, sr, Ge, Tt, Qt, Kl, Hg, $g, qg, jg, Wg, Ug, Gg, Kg, Jg, Yg, Zg, Xg, Qg, e4, t4, n4, r4, i4, s4, o4, l4, a4, u4, c4, h4, d4, f4, p4, m4, g4, y4, v4, b4, w4, k4, x4, S4, C4, N4, M4, T4, E4, O4, A4, I4, D4; + const To = n && Rb(n).get(), W9 = To == null ? void 0 : To.includes(Za.Latex), U9 = To == null ? void 0 : To.includes(Za.ImageBlock), G9 = To == null ? void 0 : To.includes(Za.Table), Jl = new tP(); + if ((e == null ? void 0 : e.textGroup) !== null) { + const Ye = Jl.addGroup( + "text", + (i = (r = e == null ? void 0 : e.textGroup) == null ? void 0 : r.label) != null ? i : "Text" + ); + ((s = e == null ? void 0 : e.textGroup) == null ? void 0 : s.text) !== null && Ye.addItem("text", { + label: (a = (l = (o = e == null ? void 0 : e.textGroup) == null ? void 0 : o.text) == null ? void 0 : l.label) != null ? a : "Text", + icon: (h = (c = (u = e == null ? void 0 : e.textGroup) == null ? void 0 : u.text) == null ? void 0 : c.icon) != null ? h : Jz, + onRun: (be) => { + const we = be.get(me), Je = Mr.type(be); + we.call(qt.key), we.call(ei.key, { + nodeType: Je + }); + } + }), ((d = e == null ? void 0 : e.textGroup) == null ? void 0 : d.h1) !== null && Ye.addItem("h1", { + label: (y = (m = (f = e == null ? void 0 : e.textGroup) == null ? void 0 : f.h1) == null ? void 0 : m.label) != null ? y : "Heading 1", + icon: (C = (w = (b = e == null ? void 0 : e.textGroup) == null ? void 0 : b.h1) == null ? void 0 : w.icon) != null ? C : Bz, + onRun: (be) => { + const we = be.get(me), Je = Pn.type(be); + we.call(qt.key), we.call(ei.key, { + nodeType: Je, + attrs: { + level: 1 + } + }); + } + }), ((N = e == null ? void 0 : e.textGroup) == null ? void 0 : N.h2) !== null && Ye.addItem("h2", { + label: (A = (_ = (B = e == null ? void 0 : e.textGroup) == null ? void 0 : B.h2) == null ? void 0 : _.label) != null ? A : "Heading 2", + icon: (J = (K = (L = e == null ? void 0 : e.textGroup) == null ? void 0 : L.h2) == null ? void 0 : K.icon) != null ? J : Lz, + onRun: (be) => { + const we = be.get(me), Je = Pn.type(be); + we.call(qt.key), we.call(ei.key, { + nodeType: Je, + attrs: { + level: 2 + } + }); + } + }), ((P = e == null ? void 0 : e.textGroup) == null ? void 0 : P.h3) !== null && Ye.addItem("h3", { + label: (_e = (ne = (ie = e == null ? void 0 : e.textGroup) == null ? void 0 : ie.h3) == null ? void 0 : ne.label) != null ? _e : "Heading 3", + icon: (Re = (ge = (De = e == null ? void 0 : e.textGroup) == null ? void 0 : De.h3) == null ? void 0 : ge.icon) != null ? Re : Fz, + onRun: (be) => { + const we = be.get(me), Je = Pn.type(be); + we.call(qt.key), we.call(ei.key, { + nodeType: Je, + attrs: { + level: 3 + } + }); + } + }), ((fe = e == null ? void 0 : e.textGroup) == null ? void 0 : fe.h4) !== null && Ye.addItem("h4", { + label: (E = (nt = (ye = e == null ? void 0 : e.textGroup) == null ? void 0 : ye.h4) == null ? void 0 : nt.label) != null ? E : "Heading 4", + icon: (O = (Ue = (Qe = e == null ? void 0 : e.textGroup) == null ? void 0 : Qe.h4) == null ? void 0 : Ue.icon) != null ? O : Vz, + onRun: (be) => { + const we = be.get(me), Je = Pn.type(be); + we.call(qt.key), we.call(ei.key, { + nodeType: Je, + attrs: { + level: 4 + } + }); + } + }), ((gt = e == null ? void 0 : e.textGroup) == null ? void 0 : gt.h5) !== null && Ye.addItem("h5", { + label: (bt = (lt = (Rt = e == null ? void 0 : e.textGroup) == null ? void 0 : Rt.h5) == null ? void 0 : lt.label) != null ? bt : "Heading 5", + icon: ($t = (Lt = (dt = e == null ? void 0 : e.textGroup) == null ? void 0 : dt.h5) == null ? void 0 : Lt.icon) != null ? $t : Hz, + onRun: (be) => { + const we = be.get(me), Je = Pn.type(be); + we.call(qt.key), we.call(ei.key, { + nodeType: Je, + attrs: { + level: 5 + } + }); + } + }), ((Xt = e == null ? void 0 : e.textGroup) == null ? void 0 : Xt.h6) !== null && Ye.addItem("h6", { + label: (I = (x = (ks = e == null ? void 0 : e.textGroup) == null ? void 0 : ks.h6) == null ? void 0 : x.label) != null ? I : "Heading 6", + icon: (j = (W = (F = e == null ? void 0 : e.textGroup) == null ? void 0 : F.h6) == null ? void 0 : W.icon) != null ? j : $z, + onRun: (be) => { + const we = be.get(me), Je = Pn.type(be); + we.call(qt.key), we.call(ei.key, { + nodeType: Je, + attrs: { + level: 6 + } + }); + } + }), ((q = e == null ? void 0 : e.textGroup) == null ? void 0 : q.quote) !== null && Ye.addItem("quote", { + label: (te = (X = (ee = e == null ? void 0 : e.textGroup) == null ? void 0 : ee.quote) == null ? void 0 : X.label) != null ? te : "Quote", + icon: (le = (ve = (U = e == null ? void 0 : e.textGroup) == null ? void 0 : U.quote) == null ? void 0 : ve.icon) != null ? le : Gz, + onRun: (be) => { + const we = be.get(me), Je = Fl.type(be); + we.call(qt.key), we.call(ba.key, { + nodeType: Je + }); + } + }), ((pe = e == null ? void 0 : e.textGroup) == null ? void 0 : pe.divider) !== null && Ye.addItem("divider", { + label: (ue = ($ = (R = e == null ? void 0 : e.textGroup) == null ? void 0 : R.divider) == null ? void 0 : $.label) != null ? ue : "Divider", + icon: (et = (Ie = (de = e == null ? void 0 : e.textGroup) == null ? void 0 : de.divider) == null ? void 0 : Ie.icon) != null ? et : Pz, + onRun: (be) => { + const we = be.get(me), Je = Hl.type(be); + we.call(qt.key), we.call(wa.key, { + nodeType: Je + }); + } + }); + } + if ((e == null ? void 0 : e.listGroup) !== null) { + const Ye = Jl.addGroup( + "list", + (ft = (wt = e == null ? void 0 : e.listGroup) == null ? void 0 : wt.label) != null ? ft : "List" + ); + ((fn = e == null ? void 0 : e.listGroup) == null ? void 0 : fn.bulletList) !== null && Ye.addItem("bullet-list", { + label: (Tt = (Ge = (sr = e == null ? void 0 : e.listGroup) == null ? void 0 : sr.bulletList) == null ? void 0 : Ge.label) != null ? Tt : "Bullet List", + icon: (Hg = (Kl = (Qt = e == null ? void 0 : e.listGroup) == null ? void 0 : Qt.bulletList) == null ? void 0 : Kl.icon) != null ? Hg : Rz, + onRun: (be) => { + const we = be.get(me), Je = xo.type(be); + we.call(qt.key), we.call(ba.key, { + nodeType: Je + }); + } + }), (($g = e == null ? void 0 : e.listGroup) == null ? void 0 : $g.orderedList) !== null && Ye.addItem("ordered-list", { + label: (Wg = (jg = (qg = e == null ? void 0 : e.listGroup) == null ? void 0 : qg.orderedList) == null ? void 0 : jg.label) != null ? Wg : "Ordered List", + icon: (Kg = (Gg = (Ug = e == null ? void 0 : e.listGroup) == null ? void 0 : Ug.orderedList) == null ? void 0 : Gg.icon) != null ? Kg : Wz, + onRun: (be) => { + const we = be.get(me), Je = So.type(be); + we.call(qt.key), we.call(ba.key, { + nodeType: Je + }); + } + }), ((Jg = e == null ? void 0 : e.listGroup) == null ? void 0 : Jg.taskList) !== null && Ye.addItem("task-list", { + label: (Xg = (Zg = (Yg = e == null ? void 0 : e.listGroup) == null ? void 0 : Yg.taskList) == null ? void 0 : Zg.label) != null ? Xg : "Task List", + icon: (t4 = (e4 = (Qg = e == null ? void 0 : e.listGroup) == null ? void 0 : Qg.taskList) == null ? void 0 : e4.icon) != null ? t4 : Yz, + onRun: (be) => { + const we = be.get(me), Je = Wr.type(be); + we.call(qt.key), we.call(ba.key, { + nodeType: Je, + attrs: { checked: !1 } + }); + } + }); + } + if ((e == null ? void 0 : e.advancedGroup) !== null) { + const Ye = Jl.addGroup( + "advanced", + (r4 = (n4 = e == null ? void 0 : e.advancedGroup) == null ? void 0 : n4.label) != null ? r4 : "Advanced" + ); + ((i4 = e == null ? void 0 : e.advancedGroup) == null ? void 0 : i4.image) !== null && U9 && Ye.addItem("image", { + label: (l4 = (o4 = (s4 = e == null ? void 0 : e.advancedGroup) == null ? void 0 : s4.image) == null ? void 0 : o4.label) != null ? l4 : "Image", + icon: (c4 = (u4 = (a4 = e == null ? void 0 : e.advancedGroup) == null ? void 0 : a4.image) == null ? void 0 : u4.icon) != null ? c4 : qz, + onRun: (be) => { + const we = be.get(me), Je = fg.type(be); + we.call(qt.key), we.call(wa.key, { + nodeType: Je + }); + } + }), ((h4 = e == null ? void 0 : e.advancedGroup) == null ? void 0 : h4.codeBlock) !== null && Ye.addItem("code", { + label: (p4 = (f4 = (d4 = e == null ? void 0 : e.advancedGroup) == null ? void 0 : d4.codeBlock) == null ? void 0 : f4.label) != null ? p4 : "Code", + icon: (y4 = (g4 = (m4 = e == null ? void 0 : e.advancedGroup) == null ? void 0 : m4.codeBlock) == null ? void 0 : g4.icon) != null ? y4 : zz, + onRun: (be) => { + const we = be.get(me), Je = go.type(be); + we.call(qt.key), we.call(ei.key, { + nodeType: Je + }); + } + }), ((v4 = e == null ? void 0 : e.advancedGroup) == null ? void 0 : v4.table) !== null && G9 && Ye.addItem("table", { + label: (k4 = (w4 = (b4 = e == null ? void 0 : e.advancedGroup) == null ? void 0 : b4.table) == null ? void 0 : w4.label) != null ? k4 : "Table", + icon: (C4 = (S4 = (x4 = e == null ? void 0 : e.advancedGroup) == null ? void 0 : x4.table) == null ? void 0 : S4.icon) != null ? C4 : Kz, + onRun: (be) => { + const we = be.get(me), Je = be.get(ln); + we.call(qt.key); + const { from: K9 } = Je.state.selection; + we.call(wa.key, { + nodeType: Om(be, 3, 3) + }), we.call(C8.key, { + pos: K9 + }); + } + }), ((N4 = e == null ? void 0 : e.advancedGroup) == null ? void 0 : N4.math) !== null && W9 && Ye.addItem("math", { + label: (E4 = (T4 = (M4 = e == null ? void 0 : e.advancedGroup) == null ? void 0 : M4.math) == null ? void 0 : T4.label) != null ? E4 : "Math", + icon: (I4 = (A4 = (O4 = e == null ? void 0 : e.advancedGroup) == null ? void 0 : O4.math) == null ? void 0 : A4.icon) != null ? I4 : Zz, + onRun: (be) => { + const we = be.get(me), Je = go.type(be); + we.call(qt.key), we.call(wa.key, { + nodeType: Je, + attrs: { language: "LaTex" } + }); + } + }); + } + (D4 = e == null ? void 0 : e.buildMenu) == null || D4.call(e, Jl); + let Yl = Jl.build(); + t && (Yl = Yl.map((Ye) => { + const be = Ye.items.filter( + (we) => we.label.toLowerCase().includes(t.toLowerCase()) + ); + return { + ...Ye, + items: be + }; + }).filter((Ye) => Ye.items.length > 0)); + const _4 = Yl.flatMap((Ye) => Ye.items); + return _4.forEach((Ye, be) => { + Object.assign(Ye, { index: be }); + }), Yl.reduce((Ye, be) => { + const we = Ye + be.items.length; + return Object.assign(be, { + range: [Ye, we] + }), we; + }, 0), { + groups: Yl, + size: _4.length + }; +} +const rP = /* @__PURE__ */ Wl({ + props: { + ctx: { + type: Object, + required: !0 + }, + show: { + type: Object, + required: !0 + }, + filter: { + type: Object, + required: !0 + }, + hide: { + type: Function, + required: !0 + }, + config: { + type: Object, + required: !1 + } + }, + setup({ ctx: t, show: e, filter: n, hide: r, config: i }) { + const s = /* @__PURE__ */ kt(), o = dg(() => nP(n.value, i, t)), l = /* @__PURE__ */ kt(0), a = /* @__PURE__ */ kt({ x: -999, y: -999 }), u = (y) => { + const { x: b, y: w } = y; + a.value = { x: b, y: w }; + }; + vc([o, e], () => { + const { size: y } = o.value; + y === 0 && e.value ? r() : l.value >= y && (l.value = 0); + }); + const c = (y, b) => { + const w = l.value, C = typeof y == "function" ? y(w) : y; + b == null || b(C), l.value = C; + }, h = (y) => { + var b, w; + const C = (b = s.value) == null ? void 0 : b.querySelector( + `[data-index="${y}"]` + ), N = (w = s.value) == null ? void 0 : w.querySelector(".menu-groups"); + !C || !N || (N.scrollTop = C.offsetTop - N.offsetTop); + }, d = (y) => { + const b = o.value.groups.flatMap((w) => w.items).at(y); + b && t && b.onRun(t), r(); + }, f = (y) => { + const { size: b, groups: w } = o.value; + if (y.key === "Escape") { + y.preventDefault(), r == null || r(); + return; + } + if (y.key === "ArrowDown") + return y.preventDefault(), c( + (C) => C < b - 1 ? C + 1 : C, + h + ); + if (y.key === "ArrowUp") + return y.preventDefault(), c( + (C) => C <= 0 ? C : C - 1, + h + ); + if (y.key === "ArrowLeft") + return y.preventDefault(), c((C) => { + const N = w.find( + (_) => _.range[0] <= C && _.range[1] > C + ); + if (!N) return C; + const B = w[w.indexOf(N) - 1]; + return B ? B.range[1] - 1 : C; + }, h); + if (y.key === "ArrowRight") + return y.preventDefault(), c((C) => { + const N = w.find( + (_) => _.range[0] <= C && _.range[1] > C + ); + if (!N) return C; + const B = w[w.indexOf(N) + 1]; + return B ? B.range[0] : C; + }, h); + y.key === "Enter" && (y.preventDefault(), d(l.value)); + }, m = (y) => (b) => { + const w = a.value; + if (!w) return; + const { x: C, y: N } = b; + C === w.x && N === w.y || c(y); + }; + return tb(() => { + e.value ? window.addEventListener("keydown", f, { capture: !0 }) : window.removeEventListener("keydown", f, { capture: !0 }); + }), sg(() => { + window.removeEventListener("keydown", f, { capture: !0 }); + }), () => /* @__PURE__ */ ze("div", { ref: s, onPointerdown: (y) => y.preventDefault() }, /* @__PURE__ */ ze("nav", { class: "tab-group" }, /* @__PURE__ */ ze("ul", null, o.value.groups.map((y) => /* @__PURE__ */ ze( + "li", + { + key: y.key, + onPointerdown: () => c(y.range[0], h), + class: l.value >= y.range[0] && l.value < y.range[1] ? "selected" : "" + }, + y.label + )))), /* @__PURE__ */ ze("div", { class: "menu-groups", onPointermove: u }, o.value.groups.map((y) => /* @__PURE__ */ ze("div", { key: y.key, class: "menu-group" }, /* @__PURE__ */ ze("h6", null, y.label), /* @__PURE__ */ ze("ul", null, y.items.map((b) => /* @__PURE__ */ ze( + "li", + { + key: b.key, + "data-index": b.index, + class: l.value === b.index ? "hover" : "", + onPointerenter: m(b.index), + onPointerdown: () => { + var w, C; + (C = (w = s.value) == null ? void 0 : w.querySelector(`[data-index="${b.index}"]`)) == null || C.classList.add("active"); + }, + onPointerup: () => { + var w, C; + (C = (w = s.value) == null ? void 0 : w.querySelector(`[data-index="${b.index}"]`)) == null || C.classList.remove("active"), d(b.index); + } + }, + /* @__PURE__ */ ze(v0, { icon: b.icon }), + /* @__PURE__ */ ze("span", null, b.label) + ))))))); + } +}); +var Bb = (t) => { + throw TypeError(t); +}, Lb = (t, e, n) => e.has(t) || Bb("Cannot " + n), or = (t, e, n) => (Lb(t, e, "read from private field"), n ? n.call(t) : e.get(t)), sa = (t, e, n) => e.has(t) ? Bb("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(t) : e.set(t, n), Ts = (t, e, n, r) => (Lb(t, e, "write to private field"), e.set(t, n), n), Ca, Cc, Nc, ni, qo; +const Fb = dz("CREPE_MENU"), pg = vt( + { + show: () => { + }, + hide: () => { + } + }, + "menuAPICtx" +); +function iP(t, e) { + t.set(Fb.key, { + view: (n) => new sP(t, n, e) + }); +} +class sP { + constructor(e, n, r) { + sa(this, Ca), sa(this, Cc), sa(this, Nc), sa(this, ni), sa(this, qo, null), this.update = (c) => { + or(this, ni).update(c); + }, this.show = (c) => { + Ts(this, qo, c), or(this, Nc).value = "", or(this, ni).show(); + }, this.hide = () => { + Ts(this, qo, null), or(this, ni).hide(); + }, this.destroy = () => { + or(this, ni).destroy(), or(this, Cc).unmount(), or(this, Ca).remove(); + }; + const i = document.createElement("div"); + i.classList.add("milkdown-slash-menu"); + const s = /* @__PURE__ */ kt(!1), o = /* @__PURE__ */ kt(""); + Ts(this, Nc, o); + const l = this.hide, a = nd(rP, { + ctx: e, + config: r, + show: s, + filter: o, + hide: l + }); + Ts(this, Cc, a), a.mount(i), Ts(this, Ca, i); + const u = this; + Ts(this, ni, new fz({ + content: or(this, Ca), + debounce: 20, + shouldShow(c) { + if (Xz(c.state.selection) || Qz(c.state.selection)) + return !1; + const h = this.getContent( + c, + (f) => ["paragraph", "heading"].includes(f.type.name) + ); + if (h == null || !oP(c.state.selection)) + return !1; + const d = or(u, qo); + if (o.value = h.startsWith("/") ? h.slice(1) : h, typeof d == "number") { + const f = c.state.doc.nodeSize - 2, m = Math.min(d, f); + return c.state.doc.resolve(m).node() !== c.state.doc.resolve(c.state.selection.from).node() ? (Ts(u, qo, null), !1) : !0; + } + return !!h.startsWith("/"); + }, + offset: 10 + })), or(this, ni).onShow = () => { + s.value = !0; + }, or(this, ni).onHide = () => { + s.value = !1; + }, this.update(n), e.set(pg.key, { + show: (c) => this.show(c), + hide: () => this.hide() + }); + } +} +Ca = /* @__PURE__ */ new WeakMap(); +Cc = /* @__PURE__ */ new WeakMap(); +Nc = /* @__PURE__ */ new WeakMap(); +ni = /* @__PURE__ */ new WeakMap(); +qo = /* @__PURE__ */ new WeakMap(); +function oP(t) { + if (!(t instanceof Ce)) return !1; + const { $head: e } = t, n = e.parent; + return e.parentOffset === n.content.size; +} +const lP = /* @__PURE__ */ Wl({ + props: { + onAdd: { + type: Function, + required: !0 + }, + addIcon: { + type: String, + required: !0 + }, + handleIcon: { + type: String, + required: !0 + } + }, + setup(t) { + const e = /* @__PURE__ */ kt(); + return () => /* @__PURE__ */ ze(kn, null, /* @__PURE__ */ ze( + "div", + { + ref: e, + class: "operation-item", + onPointerdown: (n) => { + var r; + n.preventDefault(), n.stopPropagation(), (r = e.value) == null || r.classList.add("active"); + }, + onPointerup: (n) => { + var r; + n.preventDefault(), n.stopPropagation(), (r = e.value) == null || r.classList.remove("active"), t.onAdd(); + } + }, + /* @__PURE__ */ ze(v0, { icon: t.addIcon }) + ), /* @__PURE__ */ ze("div", { class: "operation-item" }, /* @__PURE__ */ ze(v0, { icon: t.handleIcon }))); + } +}); +var Vb = (t) => { + throw TypeError(t); +}, Hb = (t, e, n) => e.has(t) || Vb("Cannot " + n), Es = (t, e, n) => (Hb(t, e, "read from private field"), n ? n.call(t) : e.get(t)), Iu = (t, e, n) => e.has(t) ? Vb("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(t) : e.set(t, n), Du = (t, e, n, r) => (Hb(t, e, "write to private field"), e.set(t, n), n), Mc, zs, Tc, Ec; +class aP { + constructor(e, n) { + Iu(this, Mc), Iu(this, zs), Iu(this, Tc), Iu(this, Ec), this.update = () => { + Es(this, zs).update(); + }, this.destroy = () => { + Es(this, zs).destroy(), Es(this, Mc).remove(), Es(this, Tc).unmount(); + }, this.onAdd = () => { + const u = Es(this, Ec), c = u.get(ln); + c.hasFocus() || c.focus(); + const { state: h, dispatch: d } = c, f = Es(this, zs).active; + if (!f) return; + const y = f.$pos.pos + f.node.nodeSize; + let b = h.tr.insert(y, Mr.type(u).create()); + b = b.setSelection(Ce.near(b.doc.resolve(y))), d(b.scrollIntoView()), Es(this, zs).hide(), u.get(pg.key).show(b.selection.from); + }; + var r, i, s; + Du(this, Ec, e); + const o = document.createElement("div"); + o.classList.add("milkdown-block-handle"); + const l = nd(lP, { + onAdd: this.onAdd, + addIcon: (r = n == null ? void 0 : n.handleAddIcon) != null ? r : Uz, + handleIcon: (i = n == null ? void 0 : n.handleDragIcon) != null ? i : jz + }); + l.mount(o), Du(this, Tc, l), Du(this, Mc, o); + const a = (s = n == null ? void 0 : n.blockHandle) != null ? s : {}; + Du(this, zs, new eD({ + ctx: e, + content: o, + getOffset: () => 16, + getPlacement: ({ active: u, blockDom: c }) => { + if (u.node.type.name === "heading") return "left"; + let h = 0; + u.node.descendants((B) => { + h += B.childCount; + }); + const d = u.el, f = d.getBoundingClientRect(), m = c.getBoundingClientRect(), y = window.getComputedStyle(d), b = Number.parseInt(y.paddingTop, 10) || 0, w = Number.parseInt(y.paddingBottom, 10) || 0, C = f.height - b - w, N = m.height; + return h > 2 || N < C ? "left-start" : "left"; + }, + ...a + })), this.update(); + } +} +Mc = /* @__PURE__ */ new WeakMap(); +zs = /* @__PURE__ */ new WeakMap(); +Tc = /* @__PURE__ */ new WeakMap(); +Ec = /* @__PURE__ */ new WeakMap(); +function uP(t, e) { + t.set(jh.key, { + filterNodes: (n) => !y1( + (i) => ["table", "blockquote", "math_inline"].includes(i.type.name) + )(n) + }), t.set(Gh.key, { + view: () => new aP(t, e) + }); +} +const cP = (t, e) => { + t.config(_z(Za.BlockEdit)).config((n) => uP(n, e)).config((n) => iP(n, e)).use(pg).use(Gh).use(Fb); +}; +var q0, j0, W0, xl, Sl, Cl, Dr, U0, G0, Nl, Ji, Ml, K0, vh, $b; +class hP { + constructor(e) { + Z(this, vh); + /// @internal + Z(this, q0); + /// @internal + Z(this, j0); + /// @internal + Z(this, W0); + /// @internal + Z(this, xl); + /// @internal + Z(this, Sl); + Z(this, Cl); + /// @internal + Z(this, Dr); + /// @internal + Z(this, U0); + /// @internal + Z(this, G0); + /// @internal + Z(this, Nl); + Z(this, Ji); + Z(this, Ml); + Z(this, K0); + V(this, Cl, !1), this.onShow = () => { + }, this.onHide = () => { + }, V(this, Ji, (n) => { + Jp(n, this.element, { + placement: T(this, xl).placement ?? "top", + middleware: [ + Yp(), + Zp(T(this, U0)), + Y9(T(this, G0)), + ...T(this, W0) + ], + ...T(this, xl) + }).then(({ x: r, y: i }) => { + Object.assign(this.element.style, { + left: `${r}px`, + top: `${i}px` + }); + }).catch(console.error); + }), V(this, Ml, (n) => T(this, Sl) !== n.dom.parentElement), V(this, K0, (n, r) => { + var f; + const { state: i, composing: s } = n, { selection: o, doc: l } = i, { ranges: a } = o, u = Math.min(...a.map((m) => m.$from.pos)), c = Math.max(...a.map((m) => m.$to.pos)), h = r && r.doc.eq(l) && r.selection.eq(o); + if (T(this, Cl) || ((T(this, Sl) ?? n.dom.parentElement ?? document.body).appendChild(this.element), V(this, Cl, !0)), s || h) return; + if ((f = T(this, Dr)) == null || f.call(this), V(this, Dr, void 0), !T(this, j0).call(this, n, r)) { + this.hide(); + return; + } + const d = { + getBoundingClientRect: () => U6(n, u, c), + contextElement: n.dom + }; + T(this, Ml).call(this, n) ? V(this, Dr, z4( + d, + this.element, + () => T(this, Ji).call(this, d) + )) : T(this, Ji).call(this, d), this.show(); + }), this.update = (n, r) => { + T(this, Nl).call(this, n, r); + }, this.destroy = () => { + var n; + (n = T(this, Dr)) == null || n.call(this), T(this, Nl).cancel(); + }, this.show = (n, r) => { + var i; + if (this.element.dataset.show = "true", n) { + (i = T(this, Dr)) == null || i.call(this), V(this, Dr, void 0); + const s = { ...n, contextElement: r == null ? void 0 : r.dom }; + r && T(this, Ml).call(this, r) ? V(this, Dr, z4( + s, + this.element, + () => T(this, Ji).call(this, s) + )) : T(this, Ji).call(this, s); + } + this.onShow(); + }, this.hide = () => { + this.element.dataset.show !== "false" && (this.element.dataset.show = "false", this.onHide()); + }, this.element = e.content, V(this, q0, e.debounce ?? 200), V(this, j0, e.shouldShow ?? vu(this, vh, $b)), V(this, U0, e.offset), V(this, G0, e.shift), V(this, W0, e.middleware ?? []), V(this, xl, e.floatingUIOptions ?? {}), V(this, Sl, e.root), this.element.dataset.show = "false", V(this, Nl, t8(T(this, K0), T(this, q0))); + } +} +q0 = new WeakMap(), j0 = new WeakMap(), W0 = new WeakMap(), xl = new WeakMap(), Sl = new WeakMap(), Cl = new WeakMap(), Dr = new WeakMap(), U0 = new WeakMap(), G0 = new WeakMap(), Nl = new WeakMap(), Ji = new WeakMap(), Ml = new WeakMap(), K0 = new WeakMap(), vh = new WeakSet(), /// @internal +$b = function(e) { + const { doc: n, selection: r } = e.state, { empty: i, from: s, to: o } = r, l = !n.textBetween(s, o).length && e.state.selection instanceof Ce, a = this.element.contains(document.activeElement), u = !e.hasFocus() && !a, c = !e.editable; + return !(u || i || l || c); +}; +function mg(t) { + const e = vt( + {}, + `${t}_TOOLTIP_SPEC` + ), n = hn((i) => { + const s = i.get(e.key); + return new Dt({ + key: new Nt(`${t}_TOOLTIP`), + ...s + }); + }), r = [e, n]; + return r.key = e.key, r.pluginKey = n.key, e.meta = { + package: "@milkdown/plugin-tooltip", + displayName: `Ctx<tooltipSpec>|${t}` + }, n.meta = { + package: "@milkdown/plugin-tooltip", + displayName: `Prose<tooltip>|${t}` + }, r; +} +var dP = Object.defineProperty, A3 = Object.getOwnPropertySymbols, fP = Object.prototype.hasOwnProperty, pP = Object.prototype.propertyIsEnumerable, I3 = (t, e, n) => e in t ? dP(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n, mP = (t, e) => { + for (var n in e || (e = {})) + fP.call(e, n) && I3(t, n, e[n]); + if (A3) + for (var n of A3(e)) + pP.call(e, n) && I3(t, n, e[n]); + return t; +}; +function No(t, e) { + return Object.assign(t, { + meta: mP({ + package: "@milkdown/components" + }, e) + }), t; +} +var gP = Object.defineProperty, D3 = Object.getOwnPropertySymbols, yP = Object.prototype.hasOwnProperty, vP = Object.prototype.propertyIsEnumerable, _3 = (t, e, n) => e in t ? gP(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n, gg = (t, e) => { + for (var n in e || (e = {})) + yP.call(e, n) && _3(t, n, e[n]); + if (D3) + for (var n of D3(e)) + vP.call(e, n) && _3(t, n, e[n]); + return t; +}; +const bP = { + mode: "preview" +}, yg = vt(gg({}, bP), "linkTooltipStateCtx"); +No(yg, { + displayName: "State<link-tooltip>", + group: "LinkTooltip" +}); +const wP = { + addLink: () => { + }, + editLink: () => { + }, + removeLink: () => { + } +}, R3 = vt(gg({}, wP), "linkTooltipAPICtx"); +No(yg, { + displayName: "API<link-tooltip>", + group: "LinkTooltip" +}); +const kP = { + linkIcon: "🔗", + editButton: "✎", + removeButton: "⌫", + confirmButton: "Confirm ⏎", + onCopyLink: () => { + }, + inputPlaceholder: "Paste link..." +}; +vt( + gg({}, kP), + "linkTooltipConfigCtx" +); +No(yg, { + displayName: "Config<link-tooltip>", + group: "LinkTooltip" +}); +const xP = Ee("ToggleLink", (t) => () => (e) => { + const { doc: n, selection: r } = e, i = ns.type(t); + return n.rangeHasMark(r.from, r.to, i) ? (t.get(R3.key).removeLink(r.from, r.to), !0) : (t.get(R3.key).addLink(r.from, r.to), !0); +}), qb = mg("LINK_PREVIEW"); +No(qb[0], { + displayName: "PreviewTooltipSpec<link-tooltip>", + group: "LinkTooltip" +}); +No(qb[1], { + displayName: "PreviewTooltipPlugin<link-tooltip>", + group: "LinkTooltip" +}); +const jb = mg("LINK_EDIT"); +No(jb[0], { + displayName: "EditTooltipSpec<link-tooltip>", + group: "LinkTooltip" +}); +No(jb[1], { + displayName: "EditTooltipPlugin<link-tooltip>", + group: "LinkTooltip" +}); +class wn { + // The + prefix indicates that these fields aren't writeable + // Lexer holding the input string. + // Start offset, zero-based inclusive. + // End offset, zero-based exclusive. + constructor(e, n, r) { + this.lexer = void 0, this.start = void 0, this.end = void 0, this.lexer = e, this.start = n, this.end = r; + } + /** + * Merges two `SourceLocation`s from location providers, given they are + * provided in order of appearance. + * - Returns the first one's location if only the first is provided. + * - Returns a merged range of the first and the last if both are provided + * and their lexers match. + * - Otherwise, returns null. + */ + static range(e, n) { + return n ? !e || !e.loc || !n.loc || e.loc.lexer !== n.loc.lexer ? null : new wn(e.loc.lexer, e.loc.start, n.loc.end) : e && e.loc; + } +} +class $n { + // don't expand the token + // used in \noexpand + constructor(e, n) { + this.text = void 0, this.loc = void 0, this.noexpand = void 0, this.treatAsRelax = void 0, this.text = e, this.loc = n; + } + /** + * Given a pair of tokens (this and endToken), compute a `Token` encompassing + * the whole input range enclosed by these two. + */ + range(e, n) { + return new $n(n, wn.range(this, e)); + } +} +class Q { + // Error start position based on passed-in Token or ParseNode. + // Length of affected text based on passed-in Token or ParseNode. + // The underlying error message without any context added. + constructor(e, n) { + this.name = void 0, this.position = void 0, this.length = void 0, this.rawMessage = void 0; + var r = "KaTeX parse error: " + e, i, s, o = n && n.loc; + if (o && o.start <= o.end) { + var l = o.lexer.input; + i = o.start, s = o.end, i === l.length ? r += " at end of input: " : r += " at position " + (i + 1) + ": "; + var a = l.slice(i, s).replace(/[^]/g, "$&̲"), u; + i > 15 ? u = "…" + l.slice(i - 15, i) : u = l.slice(0, i); + var c; + s + 15 < l.length ? c = l.slice(s, s + 15) + "…" : c = l.slice(s), r += u + a + c; + } + var h = new Error(r); + return h.name = "ParseError", h.__proto__ = Q.prototype, h.position = i, i != null && s != null && (h.length = s - i), h.rawMessage = e, h; + } +} +Q.prototype.__proto__ = Error.prototype; +var SP = function(e, n) { + return e === void 0 ? n : e; +}, CP = /([A-Z])/g, NP = function(e) { + return e.replace(CP, "-$1").toLowerCase(); +}, MP = { + "&": "&", + ">": ">", + "<": "<", + '"': """, + "'": "'" +}, TP = /[&><"']/g; +function EP(t) { + return String(t).replace(TP, (e) => MP[e]); +} +var Wb = function t(e) { + return e.type === "ordgroup" || e.type === "color" ? e.body.length === 1 ? t(e.body[0]) : e : e.type === "font" ? t(e.body) : e; +}, OP = function(e) { + var n = Wb(e); + return n.type === "mathord" || n.type === "textord" || n.type === "atom"; +}, AP = function(e) { + if (!e) + throw new Error("Expected non-null, but got " + String(e)); + return e; +}, IP = function(e) { + var n = /^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e); + return n ? n[2] !== ":" || !/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(n[1]) ? null : n[1].toLowerCase() : "_relative"; +}, Ke = { + deflt: SP, + escape: EP, + hyphenate: NP, + getBaseElem: Wb, + isCharacterBox: OP, + protocolFromUrl: IP +}, Oc = { + displayMode: { + type: "boolean", + description: "Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.", + cli: "-d, --display-mode" + }, + output: { + type: { + enum: ["htmlAndMathml", "html", "mathml"] + }, + description: "Determines the markup language of the output.", + cli: "-F, --format <type>" + }, + leqno: { + type: "boolean", + description: "Render display math in leqno style (left-justified tags)." + }, + fleqn: { + type: "boolean", + description: "Render display math flush left." + }, + throwOnError: { + type: "boolean", + default: !0, + cli: "-t, --no-throw-on-error", + cliDescription: "Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error." + }, + errorColor: { + type: "string", + default: "#cc0000", + cli: "-c, --error-color <color>", + cliDescription: "A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.", + cliProcessor: (t) => "#" + t + }, + macros: { + type: "object", + cli: "-m, --macro <def>", + cliDescription: "Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).", + cliDefault: [], + cliProcessor: (t, e) => (e.push(t), e) + }, + minRuleThickness: { + type: "number", + description: "Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.", + processor: (t) => Math.max(0, t), + cli: "--min-rule-thickness <size>", + cliProcessor: parseFloat + }, + colorIsTextColor: { + type: "boolean", + description: "Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.", + cli: "-b, --color-is-text-color" + }, + strict: { + type: [{ + enum: ["warn", "ignore", "error"] + }, "boolean", "function"], + description: "Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.", + cli: "-S, --strict", + cliDefault: !1 + }, + trust: { + type: ["boolean", "function"], + description: "Trust the input, enabling all HTML features such as \\url.", + cli: "-T, --trust" + }, + maxSize: { + type: "number", + default: 1 / 0, + description: "If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large", + processor: (t) => Math.max(0, t), + cli: "-s, --max-size <n>", + cliProcessor: parseInt + }, + maxExpand: { + type: "number", + default: 1e3, + description: "Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.", + processor: (t) => Math.max(0, t), + cli: "-e, --max-expand <n>", + cliProcessor: (t) => t === "Infinity" ? 1 / 0 : parseInt(t) + }, + globalGroup: { + type: "boolean", + cli: !1 + } +}; +function DP(t) { + if (t.default) + return t.default; + var e = t.type, n = Array.isArray(e) ? e[0] : e; + if (typeof n != "string") + return n.enum[0]; + switch (n) { + case "boolean": + return !1; + case "string": + return ""; + case "number": + return 0; + case "object": + return {}; + } +} +class vg { + constructor(e) { + this.displayMode = void 0, this.output = void 0, this.leqno = void 0, this.fleqn = void 0, this.throwOnError = void 0, this.errorColor = void 0, this.macros = void 0, this.minRuleThickness = void 0, this.colorIsTextColor = void 0, this.strict = void 0, this.trust = void 0, this.maxSize = void 0, this.maxExpand = void 0, this.globalGroup = void 0, e = e || {}; + for (var n in Oc) + if (Oc.hasOwnProperty(n)) { + var r = Oc[n]; + this[n] = e[n] !== void 0 ? r.processor ? r.processor(e[n]) : e[n] : DP(r); + } + } + /** + * Report nonstrict (non-LaTeX-compatible) input. + * Can safely not be called if `this.strict` is false in JavaScript. + */ + reportNonstrict(e, n, r) { + var i = this.strict; + if (typeof i == "function" && (i = i(e, n, r)), !(!i || i === "ignore")) { + if (i === !0 || i === "error") + throw new Q("LaTeX-incompatible input and strict mode is set to 'error': " + (n + " [" + e + "]"), r); + i === "warn" ? typeof console < "u" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (n + " [" + e + "]")) : typeof console < "u" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + i + "': " + n + " [" + e + "]")); + } + } + /** + * Check whether to apply strict (LaTeX-adhering) behavior for unusual + * input (like `\\`). Unlike `nonstrict`, will not throw an error; + * instead, "error" translates to a return value of `true`, while "ignore" + * translates to a return value of `false`. May still print a warning: + * "warn" prints a warning and returns `false`. + * This is for the second category of `errorCode`s listed in the README. + */ + useStrictBehavior(e, n, r) { + var i = this.strict; + if (typeof i == "function") + try { + i = i(e, n, r); + } catch { + i = "error"; + } + return !i || i === "ignore" ? !1 : i === !0 || i === "error" ? !0 : i === "warn" ? (typeof console < "u" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (n + " [" + e + "]")), !1) : (typeof console < "u" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + i + "': " + n + " [" + e + "]")), !1); + } + /** + * Check whether to test potentially dangerous input, and return + * `true` (trusted) or `false` (untrusted). The sole argument `context` + * should be an object with `command` field specifying the relevant LaTeX + * command (as a string starting with `\`), and any other arguments, etc. + * If `context` has a `url` field, a `protocol` field will automatically + * get added by this function (changing the specified object). + */ + isTrusted(e) { + if (e.url && !e.protocol) { + var n = Ke.protocolFromUrl(e.url); + if (n == null) + return !1; + e.protocol = n; + } + var r = typeof this.trust == "function" ? this.trust(e) : this.trust; + return !!r; + } +} +class Di { + constructor(e, n, r) { + this.id = void 0, this.size = void 0, this.cramped = void 0, this.id = e, this.size = n, this.cramped = r; + } + /** + * Get the style of a superscript given a base in the current style. + */ + sup() { + return _r[_P[this.id]]; + } + /** + * Get the style of a subscript given a base in the current style. + */ + sub() { + return _r[RP[this.id]]; + } + /** + * Get the style of a fraction numerator given the fraction in the current + * style. + */ + fracNum() { + return _r[zP[this.id]]; + } + /** + * Get the style of a fraction denominator given the fraction in the current + * style. + */ + fracDen() { + return _r[PP[this.id]]; + } + /** + * Get the cramped version of a style (in particular, cramping a cramped style + * doesn't change the style). + */ + cramp() { + return _r[BP[this.id]]; + } + /** + * Get a text or display version of this style. + */ + text() { + return _r[LP[this.id]]; + } + /** + * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle) + */ + isTight() { + return this.size >= 2; + } +} +var bg = 0, hh = 1, Xo = 2, wi = 3, b0 = 4, Zn = 5, Rl = 6, on = 7, _r = [new Di(bg, 0, !1), new Di(hh, 0, !0), new Di(Xo, 1, !1), new Di(wi, 1, !0), new Di(b0, 2, !1), new Di(Zn, 2, !0), new Di(Rl, 3, !1), new Di(on, 3, !0)], _P = [b0, Zn, b0, Zn, Rl, on, Rl, on], RP = [Zn, Zn, Zn, Zn, on, on, on, on], zP = [Xo, wi, b0, Zn, Rl, on, Rl, on], PP = [wi, wi, Zn, Zn, on, on, on, on], BP = [hh, hh, wi, wi, Zn, Zn, on, on], LP = [bg, hh, Xo, wi, Xo, wi, Xo, wi], Se = { + DISPLAY: _r[bg], + TEXT: _r[Xo], + SCRIPT: _r[b0], + SCRIPTSCRIPT: _r[Rl] +}, Fp = [{ + // Latin characters beyond the Latin-1 characters we have metrics for. + // Needed for Czech, Hungarian and Turkish text, for example. + name: "latin", + blocks: [ + [256, 591], + // Latin Extended-A and Latin Extended-B + [768, 879] + // Combining Diacritical marks + ] +}, { + // The Cyrillic script used by Russian and related languages. + // A Cyrillic subset used to be supported as explicitly defined + // symbols in symbols.js + name: "cyrillic", + blocks: [[1024, 1279]] +}, { + // Armenian + name: "armenian", + blocks: [[1328, 1423]] +}, { + // The Brahmic scripts of South and Southeast Asia + // Devanagari (0900–097F) + // Bengali (0980–09FF) + // Gurmukhi (0A00–0A7F) + // Gujarati (0A80–0AFF) + // Oriya (0B00–0B7F) + // Tamil (0B80–0BFF) + // Telugu (0C00–0C7F) + // Kannada (0C80–0CFF) + // Malayalam (0D00–0D7F) + // Sinhala (0D80–0DFF) + // Thai (0E00–0E7F) + // Lao (0E80–0EFF) + // Tibetan (0F00–0FFF) + // Myanmar (1000–109F) + name: "brahmic", + blocks: [[2304, 4255]] +}, { + name: "georgian", + blocks: [[4256, 4351]] +}, { + // Chinese and Japanese. + // The "k" in cjk is for Korean, but we've separated Korean out + name: "cjk", + blocks: [ + [12288, 12543], + // CJK symbols and punctuation, Hiragana, Katakana + [19968, 40879], + // CJK ideograms + [65280, 65376] + // Fullwidth punctuation + // TODO: add halfwidth Katakana and Romanji glyphs + ] +}, { + // Korean + name: "hangul", + blocks: [[44032, 55215]] +}]; +function FP(t) { + for (var e = 0; e < Fp.length; e++) + for (var n = Fp[e], r = 0; r < n.blocks.length; r++) { + var i = n.blocks[r]; + if (t >= i[0] && t <= i[1]) + return n.name; + } + return null; +} +var Ac = []; +Fp.forEach((t) => t.blocks.forEach((e) => Ac.push(...e))); +function Ub(t) { + for (var e = 0; e < Ac.length; e += 2) + if (t >= Ac[e] && t <= Ac[e + 1]) + return !0; + return !1; +} +var _o = 80, VP = function(e, n) { + return "M95," + (622 + e + n) + ` +c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 +c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 +c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 +s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 +c69,-144,104.5,-217.7,106.5,-221 +l` + e / 2.075 + " -" + e + ` +c5.3,-9.3,12,-14,20,-14 +H400000v` + (40 + e) + `H845.2724 +s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 +c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z +M` + (834 + e) + " " + n + "h400000v" + (40 + e) + "h-400000z"; +}, HP = function(e, n) { + return "M263," + (601 + e + n) + `c0.7,0,18,39.7,52,119 +c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 +c340,-704.7,510.7,-1060.3,512,-1067 +l` + e / 2.084 + " -" + e + ` +c4.7,-7.3,11,-11,19,-11 +H40000v` + (40 + e) + `H1012.3 +s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 +c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 +s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 +c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z +M` + (1001 + e) + " " + n + "h400000v" + (40 + e) + "h-400000z"; +}, $P = function(e, n) { + return "M983 " + (10 + e + n) + ` +l` + e / 3.13 + " -" + e + ` +c4,-6.7,10,-10,18,-10 H400000v` + (40 + e) + ` +H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 +s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 +c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 +c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 +c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 +c53.7,-170.3,84.5,-266.8,92.5,-289.5z +M` + (1001 + e) + " " + n + "h400000v" + (40 + e) + "h-400000z"; +}, qP = function(e, n) { + return "M424," + (2398 + e + n) + ` +c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 +c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 +s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 +s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 +l` + e / 4.223 + " -" + e + `c4,-6.7,10,-10,18,-10 H400000 +v` + (40 + e) + `H1014.6 +s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 +c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2z M` + (1001 + e) + " " + n + ` +h400000v` + (40 + e) + "h-400000z"; +}, jP = function(e, n) { + return "M473," + (2713 + e + n) + ` +c339.3,-1799.3,509.3,-2700,510,-2702 l` + e / 5.298 + " -" + e + ` +c3.3,-7.3,9.3,-11,18,-11 H400000v` + (40 + e) + `H1017.7 +s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 +c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 +s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, +606zM` + (1001 + e) + " " + n + "h400000v" + (40 + e) + "H1017.7z"; +}, WP = function(e) { + var n = e / 2; + return "M400000 " + e + " H0 L" + n + " 0 l65 45 L145 " + (e - 80) + " H400000z"; +}, UP = function(e, n, r) { + var i = r - 54 - n - e; + return "M702 " + (e + n) + "H400000" + (40 + e) + ` +H742v` + i + `l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 +h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 +c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 +219 661 l218 661zM702 ` + n + "H400000v" + (40 + e) + "H742z"; +}, GP = function(e, n, r) { + n = 1e3 * n; + var i = ""; + switch (e) { + case "sqrtMain": + i = VP(n, _o); + break; + case "sqrtSize1": + i = HP(n, _o); + break; + case "sqrtSize2": + i = $P(n, _o); + break; + case "sqrtSize3": + i = qP(n, _o); + break; + case "sqrtSize4": + i = jP(n, _o); + break; + case "sqrtTall": + i = UP(n, _o, r); + } + return i; +}, KP = function(e, n) { + switch (e) { + case "⎜": + return "M291 0 H417 V" + n + " H291z M291 0 H417 V" + n + " H291z"; + case "∣": + return "M145 0 H188 V" + n + " H145z M145 0 H188 V" + n + " H145z"; + case "∥": + return "M145 0 H188 V" + n + " H145z M145 0 H188 V" + n + " H145z" + ("M367 0 H410 V" + n + " H367z M367 0 H410 V" + n + " H367z"); + case "⎟": + return "M457 0 H583 V" + n + " H457z M457 0 H583 V" + n + " H457z"; + case "⎢": + return "M319 0 H403 V" + n + " H319z M319 0 H403 V" + n + " H319z"; + case "⎥": + return "M263 0 H347 V" + n + " H263z M263 0 H347 V" + n + " H263z"; + case "⎪": + return "M384 0 H504 V" + n + " H384z M384 0 H504 V" + n + " H384z"; + case "⏐": + return "M312 0 H355 V" + n + " H312z M312 0 H355 V" + n + " H312z"; + case "‖": + return "M257 0 H300 V" + n + " H257z M257 0 H300 V" + n + " H257z" + ("M478 0 H521 V" + n + " H478z M478 0 H521 V" + n + " H478z"); + default: + return ""; + } +}, z3 = { + // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main + doubleleftarrow: `M262 157 +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z +m8 0v40h399730v-40zm0 194v40h399730v-40z`, + // doublerightarrow is from glyph U+21D2 in font KaTeX Main + doublerightarrow: `M399738 392l +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`, + // leftarrow is from glyph U+2190 in font KaTeX Main + leftarrow: `M400000 241H110l3-3c68.7-52.7 113.7-120 + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 + l-3-3h399890zM100 241v40h399900v-40z`, + // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular + leftbrace: `M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`, + leftbraceunder: `M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`, + // overgroup is from the MnSymbol package (public domain) + leftgroup: `M400000 80 +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 + 435 0h399565z`, + leftgroupunder: `M400000 262 +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 + 435 219h399565z`, + // Harpoons are from glyph U+21BD in font KaTeX Main + leftharpoon: `M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`, + leftharpoonplus: `M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z +m0 0v40h400000v-40z`, + leftharpoondown: `M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`, + leftharpoondownplus: `M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`, + // hook is from glyph U+21A9 in font KaTeX Main + lefthook: `M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 + 71.5 23h399859zM103 281v-40h399897v40z`, + leftlinesegment: `M40 281 V428 H0 V94 H40 V241 H400000 v40z +M40 281 V428 H0 V94 H40 V241 H400000 v40z`, + leftmapsto: `M40 281 V448H0V74H40V241H400000v40z +M40 281 V448H0V74H40V241H400000v40z`, + // tofrom is from glyph U+21C4 in font KaTeX AMS Regular + leftToFrom: `M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`, + longequal: `M0 50 h400000 v40H0z m0 194h40000v40H0z +M0 50 h400000 v40H0z m0 194h40000v40H0z`, + midbrace: `M200428 334 +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`, + midbraceunder: `M199572 214 +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`, + oiintSize1: `M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`, + oiintSize2: `M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 +c0 110 84 276 504 276s502.4-166 502.4-276z`, + oiiintSize1: `M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`, + oiiintSize2: `M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`, + rightarrow: `M0 241v40h399891c-47.3 35.3-84 78-110 128 +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 + 151.7 139 205zm0 0v40h399900v-40z`, + rightbrace: `M400000 542l +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`, + rightbraceunder: `M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`, + rightgroup: `M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 + 3-1 3-3v-38c-76-158-257-219-435-219H0z`, + rightgroupunder: `M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`, + rightharpoon: `M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 + 69.2 92 94.5zm0 0v40h399900v-40z`, + rightharpoonplus: `M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`, + rightharpoondown: `M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`, + rightharpoondownplus: `M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z +m0-194v40h400000v-40zm0 0v40h400000v-40z`, + righthook: `M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`, + rightlinesegment: `M399960 241 V94 h40 V428 h-40 V281 H0 v-40z +M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`, + rightToFrom: `M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`, + // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular + twoheadleftarrow: `M0 167c68 40 + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`, + twoheadrightarrow: `M400000 167 +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`, + // tilde1 is a modified version of a glyph from the MnSymbol package + tilde1: `M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 +-68.267.847-113-73.952-191-73.952z`, + // ditto tilde2, tilde3, & tilde4 + tilde2: `M344 55.266c-142 0-300.638 81.316-311.5 86.418 +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`, + tilde3: `M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 + -338 0-409-156.573-744-156.573z`, + tilde4: `M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 + -175.236-744-175.236z`, + // vec is from glyph U+20D7 in font KaTeX Main + vec: `M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 +c-16-25.333-24-45-24-59z`, + // widehat1 is a modified version of a glyph from the MnSymbol package + widehat1: `M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`, + // ditto widehat2, widehat3, & widehat4 + widehat2: `M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`, + widehat3: `M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`, + widehat4: `M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`, + // widecheck paths are all inverted versions of widehat + widecheck1: `M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`, + widecheck2: `M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`, + widecheck3: `M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`, + widecheck4: `M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`, + // The next ten paths support reaction arrows from the mhchem package. + // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX + // baraboveleftarrow is mostly from glyph U+2190 in font KaTeX Main + baraboveleftarrow: `M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`, + // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main + rightarrowabovebar: `M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`, + // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end. + // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em + baraboveshortleftharpoon: `M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`, + rightharpoonaboveshortbar: `M0,241 l0,40c399126,0,399993,0,399993,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`, + shortbaraboveleftharpoon: `M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`, + shortrightharpoonabovebar: `M53,241l0,40c398570,0,399437,0,399437,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z` +}, JP = function(e, n) { + switch (e) { + case "lbrack": + return "M403 1759 V84 H666 V0 H319 V1759 v" + n + ` v1759 h347 v-84 +H403z M403 1759 V0 H319 V1759 v` + n + " v1759 h84z"; + case "rbrack": + return "M347 1759 V0 H0 V84 H263 V1759 v" + n + ` v1759 H0 v84 H347z +M347 1759 V0 H263 V1759 v` + n + " v1759 h84z"; + case "vert": + return "M145 15 v585 v" + n + ` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v` + -n + ` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v` + n + " v585 h43z"; + case "doublevert": + return "M145 15 v585 v" + n + ` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v` + -n + ` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v` + n + ` v585 h43z +M367 15 v585 v` + n + ` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v` + -n + ` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v` + n + " v585 h43z"; + case "lfloor": + return "M319 602 V0 H403 V602 v" + n + ` v1715 h263 v84 H319z +MM319 602 V0 H403 V602 v` + n + " v1715 H319z"; + case "rfloor": + return "M319 602 V0 H403 V602 v" + n + ` v1799 H0 v-84 H319z +MM319 602 V0 H403 V602 v` + n + " v1715 H319z"; + case "lceil": + return "M403 1759 V84 H666 V0 H319 V1759 v" + n + ` v602 h84z +M403 1759 V0 H319 V1759 v` + n + " v602 h84z"; + case "rceil": + return "M347 1759 V0 H0 V84 H263 V1759 v" + n + ` v602 h84z +M347 1759 V0 h-84 V1759 v` + n + " v602 h84z"; + case "lparen": + return `M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 +c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, +-36,557 l0,` + (n + 84) + `c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, +949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 +c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, +-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 +l0,-` + (n + 92) + `c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, +-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`; + case "rparen": + return `M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, +63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 +c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,` + (n + 9) + ` +c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 +c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 +c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 +c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 +l0,-` + (n + 144) + `c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`; + default: + throw new Error("Unknown stretchy delimiter."); + } +}; +class mu { + // Never used; needed for satisfying interface. + constructor(e) { + this.children = void 0, this.classes = void 0, this.height = void 0, this.depth = void 0, this.maxFontSize = void 0, this.style = void 0, this.children = e, this.classes = [], this.height = 0, this.depth = 0, this.maxFontSize = 0, this.style = {}; + } + hasClass(e) { + return this.classes.includes(e); + } + /** Convert the fragment into a node. */ + toNode() { + for (var e = document.createDocumentFragment(), n = 0; n < this.children.length; n++) + e.appendChild(this.children[n].toNode()); + return e; + } + /** Convert the fragment into HTML markup. */ + toMarkup() { + for (var e = "", n = 0; n < this.children.length; n++) + e += this.children[n].toMarkup(); + return e; + } + /** + * Converts the math node into a string, similar to innerText. Applies to + * MathDomNode's only. + */ + toText() { + var e = (n) => n.toText(); + return this.children.map(e).join(""); + } +} +var Br = { + "AMS-Regular": { + 32: [0, 0, 0, 0, 0.25], + 65: [0, 0.68889, 0, 0, 0.72222], + 66: [0, 0.68889, 0, 0, 0.66667], + 67: [0, 0.68889, 0, 0, 0.72222], + 68: [0, 0.68889, 0, 0, 0.72222], + 69: [0, 0.68889, 0, 0, 0.66667], + 70: [0, 0.68889, 0, 0, 0.61111], + 71: [0, 0.68889, 0, 0, 0.77778], + 72: [0, 0.68889, 0, 0, 0.77778], + 73: [0, 0.68889, 0, 0, 0.38889], + 74: [0.16667, 0.68889, 0, 0, 0.5], + 75: [0, 0.68889, 0, 0, 0.77778], + 76: [0, 0.68889, 0, 0, 0.66667], + 77: [0, 0.68889, 0, 0, 0.94445], + 78: [0, 0.68889, 0, 0, 0.72222], + 79: [0.16667, 0.68889, 0, 0, 0.77778], + 80: [0, 0.68889, 0, 0, 0.61111], + 81: [0.16667, 0.68889, 0, 0, 0.77778], + 82: [0, 0.68889, 0, 0, 0.72222], + 83: [0, 0.68889, 0, 0, 0.55556], + 84: [0, 0.68889, 0, 0, 0.66667], + 85: [0, 0.68889, 0, 0, 0.72222], + 86: [0, 0.68889, 0, 0, 0.72222], + 87: [0, 0.68889, 0, 0, 1], + 88: [0, 0.68889, 0, 0, 0.72222], + 89: [0, 0.68889, 0, 0, 0.72222], + 90: [0, 0.68889, 0, 0, 0.66667], + 107: [0, 0.68889, 0, 0, 0.55556], + 160: [0, 0, 0, 0, 0.25], + 165: [0, 0.675, 0.025, 0, 0.75], + 174: [0.15559, 0.69224, 0, 0, 0.94666], + 240: [0, 0.68889, 0, 0, 0.55556], + 295: [0, 0.68889, 0, 0, 0.54028], + 710: [0, 0.825, 0, 0, 2.33334], + 732: [0, 0.9, 0, 0, 2.33334], + 770: [0, 0.825, 0, 0, 2.33334], + 771: [0, 0.9, 0, 0, 2.33334], + 989: [0.08167, 0.58167, 0, 0, 0.77778], + 1008: [0, 0.43056, 0.04028, 0, 0.66667], + 8245: [0, 0.54986, 0, 0, 0.275], + 8463: [0, 0.68889, 0, 0, 0.54028], + 8487: [0, 0.68889, 0, 0, 0.72222], + 8498: [0, 0.68889, 0, 0, 0.55556], + 8502: [0, 0.68889, 0, 0, 0.66667], + 8503: [0, 0.68889, 0, 0, 0.44445], + 8504: [0, 0.68889, 0, 0, 0.66667], + 8513: [0, 0.68889, 0, 0, 0.63889], + 8592: [-0.03598, 0.46402, 0, 0, 0.5], + 8594: [-0.03598, 0.46402, 0, 0, 0.5], + 8602: [-0.13313, 0.36687, 0, 0, 1], + 8603: [-0.13313, 0.36687, 0, 0, 1], + 8606: [0.01354, 0.52239, 0, 0, 1], + 8608: [0.01354, 0.52239, 0, 0, 1], + 8610: [0.01354, 0.52239, 0, 0, 1.11111], + 8611: [0.01354, 0.52239, 0, 0, 1.11111], + 8619: [0, 0.54986, 0, 0, 1], + 8620: [0, 0.54986, 0, 0, 1], + 8621: [-0.13313, 0.37788, 0, 0, 1.38889], + 8622: [-0.13313, 0.36687, 0, 0, 1], + 8624: [0, 0.69224, 0, 0, 0.5], + 8625: [0, 0.69224, 0, 0, 0.5], + 8630: [0, 0.43056, 0, 0, 1], + 8631: [0, 0.43056, 0, 0, 1], + 8634: [0.08198, 0.58198, 0, 0, 0.77778], + 8635: [0.08198, 0.58198, 0, 0, 0.77778], + 8638: [0.19444, 0.69224, 0, 0, 0.41667], + 8639: [0.19444, 0.69224, 0, 0, 0.41667], + 8642: [0.19444, 0.69224, 0, 0, 0.41667], + 8643: [0.19444, 0.69224, 0, 0, 0.41667], + 8644: [0.1808, 0.675, 0, 0, 1], + 8646: [0.1808, 0.675, 0, 0, 1], + 8647: [0.1808, 0.675, 0, 0, 1], + 8648: [0.19444, 0.69224, 0, 0, 0.83334], + 8649: [0.1808, 0.675, 0, 0, 1], + 8650: [0.19444, 0.69224, 0, 0, 0.83334], + 8651: [0.01354, 0.52239, 0, 0, 1], + 8652: [0.01354, 0.52239, 0, 0, 1], + 8653: [-0.13313, 0.36687, 0, 0, 1], + 8654: [-0.13313, 0.36687, 0, 0, 1], + 8655: [-0.13313, 0.36687, 0, 0, 1], + 8666: [0.13667, 0.63667, 0, 0, 1], + 8667: [0.13667, 0.63667, 0, 0, 1], + 8669: [-0.13313, 0.37788, 0, 0, 1], + 8672: [-0.064, 0.437, 0, 0, 1.334], + 8674: [-0.064, 0.437, 0, 0, 1.334], + 8705: [0, 0.825, 0, 0, 0.5], + 8708: [0, 0.68889, 0, 0, 0.55556], + 8709: [0.08167, 0.58167, 0, 0, 0.77778], + 8717: [0, 0.43056, 0, 0, 0.42917], + 8722: [-0.03598, 0.46402, 0, 0, 0.5], + 8724: [0.08198, 0.69224, 0, 0, 0.77778], + 8726: [0.08167, 0.58167, 0, 0, 0.77778], + 8733: [0, 0.69224, 0, 0, 0.77778], + 8736: [0, 0.69224, 0, 0, 0.72222], + 8737: [0, 0.69224, 0, 0, 0.72222], + 8738: [0.03517, 0.52239, 0, 0, 0.72222], + 8739: [0.08167, 0.58167, 0, 0, 0.22222], + 8740: [0.25142, 0.74111, 0, 0, 0.27778], + 8741: [0.08167, 0.58167, 0, 0, 0.38889], + 8742: [0.25142, 0.74111, 0, 0, 0.5], + 8756: [0, 0.69224, 0, 0, 0.66667], + 8757: [0, 0.69224, 0, 0, 0.66667], + 8764: [-0.13313, 0.36687, 0, 0, 0.77778], + 8765: [-0.13313, 0.37788, 0, 0, 0.77778], + 8769: [-0.13313, 0.36687, 0, 0, 0.77778], + 8770: [-0.03625, 0.46375, 0, 0, 0.77778], + 8774: [0.30274, 0.79383, 0, 0, 0.77778], + 8776: [-0.01688, 0.48312, 0, 0, 0.77778], + 8778: [0.08167, 0.58167, 0, 0, 0.77778], + 8782: [0.06062, 0.54986, 0, 0, 0.77778], + 8783: [0.06062, 0.54986, 0, 0, 0.77778], + 8785: [0.08198, 0.58198, 0, 0, 0.77778], + 8786: [0.08198, 0.58198, 0, 0, 0.77778], + 8787: [0.08198, 0.58198, 0, 0, 0.77778], + 8790: [0, 0.69224, 0, 0, 0.77778], + 8791: [0.22958, 0.72958, 0, 0, 0.77778], + 8796: [0.08198, 0.91667, 0, 0, 0.77778], + 8806: [0.25583, 0.75583, 0, 0, 0.77778], + 8807: [0.25583, 0.75583, 0, 0, 0.77778], + 8808: [0.25142, 0.75726, 0, 0, 0.77778], + 8809: [0.25142, 0.75726, 0, 0, 0.77778], + 8812: [0.25583, 0.75583, 0, 0, 0.5], + 8814: [0.20576, 0.70576, 0, 0, 0.77778], + 8815: [0.20576, 0.70576, 0, 0, 0.77778], + 8816: [0.30274, 0.79383, 0, 0, 0.77778], + 8817: [0.30274, 0.79383, 0, 0, 0.77778], + 8818: [0.22958, 0.72958, 0, 0, 0.77778], + 8819: [0.22958, 0.72958, 0, 0, 0.77778], + 8822: [0.1808, 0.675, 0, 0, 0.77778], + 8823: [0.1808, 0.675, 0, 0, 0.77778], + 8828: [0.13667, 0.63667, 0, 0, 0.77778], + 8829: [0.13667, 0.63667, 0, 0, 0.77778], + 8830: [0.22958, 0.72958, 0, 0, 0.77778], + 8831: [0.22958, 0.72958, 0, 0, 0.77778], + 8832: [0.20576, 0.70576, 0, 0, 0.77778], + 8833: [0.20576, 0.70576, 0, 0, 0.77778], + 8840: [0.30274, 0.79383, 0, 0, 0.77778], + 8841: [0.30274, 0.79383, 0, 0, 0.77778], + 8842: [0.13597, 0.63597, 0, 0, 0.77778], + 8843: [0.13597, 0.63597, 0, 0, 0.77778], + 8847: [0.03517, 0.54986, 0, 0, 0.77778], + 8848: [0.03517, 0.54986, 0, 0, 0.77778], + 8858: [0.08198, 0.58198, 0, 0, 0.77778], + 8859: [0.08198, 0.58198, 0, 0, 0.77778], + 8861: [0.08198, 0.58198, 0, 0, 0.77778], + 8862: [0, 0.675, 0, 0, 0.77778], + 8863: [0, 0.675, 0, 0, 0.77778], + 8864: [0, 0.675, 0, 0, 0.77778], + 8865: [0, 0.675, 0, 0, 0.77778], + 8872: [0, 0.69224, 0, 0, 0.61111], + 8873: [0, 0.69224, 0, 0, 0.72222], + 8874: [0, 0.69224, 0, 0, 0.88889], + 8876: [0, 0.68889, 0, 0, 0.61111], + 8877: [0, 0.68889, 0, 0, 0.61111], + 8878: [0, 0.68889, 0, 0, 0.72222], + 8879: [0, 0.68889, 0, 0, 0.72222], + 8882: [0.03517, 0.54986, 0, 0, 0.77778], + 8883: [0.03517, 0.54986, 0, 0, 0.77778], + 8884: [0.13667, 0.63667, 0, 0, 0.77778], + 8885: [0.13667, 0.63667, 0, 0, 0.77778], + 8888: [0, 0.54986, 0, 0, 1.11111], + 8890: [0.19444, 0.43056, 0, 0, 0.55556], + 8891: [0.19444, 0.69224, 0, 0, 0.61111], + 8892: [0.19444, 0.69224, 0, 0, 0.61111], + 8901: [0, 0.54986, 0, 0, 0.27778], + 8903: [0.08167, 0.58167, 0, 0, 0.77778], + 8905: [0.08167, 0.58167, 0, 0, 0.77778], + 8906: [0.08167, 0.58167, 0, 0, 0.77778], + 8907: [0, 0.69224, 0, 0, 0.77778], + 8908: [0, 0.69224, 0, 0, 0.77778], + 8909: [-0.03598, 0.46402, 0, 0, 0.77778], + 8910: [0, 0.54986, 0, 0, 0.76042], + 8911: [0, 0.54986, 0, 0, 0.76042], + 8912: [0.03517, 0.54986, 0, 0, 0.77778], + 8913: [0.03517, 0.54986, 0, 0, 0.77778], + 8914: [0, 0.54986, 0, 0, 0.66667], + 8915: [0, 0.54986, 0, 0, 0.66667], + 8916: [0, 0.69224, 0, 0, 0.66667], + 8918: [0.0391, 0.5391, 0, 0, 0.77778], + 8919: [0.0391, 0.5391, 0, 0, 0.77778], + 8920: [0.03517, 0.54986, 0, 0, 1.33334], + 8921: [0.03517, 0.54986, 0, 0, 1.33334], + 8922: [0.38569, 0.88569, 0, 0, 0.77778], + 8923: [0.38569, 0.88569, 0, 0, 0.77778], + 8926: [0.13667, 0.63667, 0, 0, 0.77778], + 8927: [0.13667, 0.63667, 0, 0, 0.77778], + 8928: [0.30274, 0.79383, 0, 0, 0.77778], + 8929: [0.30274, 0.79383, 0, 0, 0.77778], + 8934: [0.23222, 0.74111, 0, 0, 0.77778], + 8935: [0.23222, 0.74111, 0, 0, 0.77778], + 8936: [0.23222, 0.74111, 0, 0, 0.77778], + 8937: [0.23222, 0.74111, 0, 0, 0.77778], + 8938: [0.20576, 0.70576, 0, 0, 0.77778], + 8939: [0.20576, 0.70576, 0, 0, 0.77778], + 8940: [0.30274, 0.79383, 0, 0, 0.77778], + 8941: [0.30274, 0.79383, 0, 0, 0.77778], + 8994: [0.19444, 0.69224, 0, 0, 0.77778], + 8995: [0.19444, 0.69224, 0, 0, 0.77778], + 9416: [0.15559, 0.69224, 0, 0, 0.90222], + 9484: [0, 0.69224, 0, 0, 0.5], + 9488: [0, 0.69224, 0, 0, 0.5], + 9492: [0, 0.37788, 0, 0, 0.5], + 9496: [0, 0.37788, 0, 0, 0.5], + 9585: [0.19444, 0.68889, 0, 0, 0.88889], + 9586: [0.19444, 0.74111, 0, 0, 0.88889], + 9632: [0, 0.675, 0, 0, 0.77778], + 9633: [0, 0.675, 0, 0, 0.77778], + 9650: [0, 0.54986, 0, 0, 0.72222], + 9651: [0, 0.54986, 0, 0, 0.72222], + 9654: [0.03517, 0.54986, 0, 0, 0.77778], + 9660: [0, 0.54986, 0, 0, 0.72222], + 9661: [0, 0.54986, 0, 0, 0.72222], + 9664: [0.03517, 0.54986, 0, 0, 0.77778], + 9674: [0.11111, 0.69224, 0, 0, 0.66667], + 9733: [0.19444, 0.69224, 0, 0, 0.94445], + 10003: [0, 0.69224, 0, 0, 0.83334], + 10016: [0, 0.69224, 0, 0, 0.83334], + 10731: [0.11111, 0.69224, 0, 0, 0.66667], + 10846: [0.19444, 0.75583, 0, 0, 0.61111], + 10877: [0.13667, 0.63667, 0, 0, 0.77778], + 10878: [0.13667, 0.63667, 0, 0, 0.77778], + 10885: [0.25583, 0.75583, 0, 0, 0.77778], + 10886: [0.25583, 0.75583, 0, 0, 0.77778], + 10887: [0.13597, 0.63597, 0, 0, 0.77778], + 10888: [0.13597, 0.63597, 0, 0, 0.77778], + 10889: [0.26167, 0.75726, 0, 0, 0.77778], + 10890: [0.26167, 0.75726, 0, 0, 0.77778], + 10891: [0.48256, 0.98256, 0, 0, 0.77778], + 10892: [0.48256, 0.98256, 0, 0, 0.77778], + 10901: [0.13667, 0.63667, 0, 0, 0.77778], + 10902: [0.13667, 0.63667, 0, 0, 0.77778], + 10933: [0.25142, 0.75726, 0, 0, 0.77778], + 10934: [0.25142, 0.75726, 0, 0, 0.77778], + 10935: [0.26167, 0.75726, 0, 0, 0.77778], + 10936: [0.26167, 0.75726, 0, 0, 0.77778], + 10937: [0.26167, 0.75726, 0, 0, 0.77778], + 10938: [0.26167, 0.75726, 0, 0, 0.77778], + 10949: [0.25583, 0.75583, 0, 0, 0.77778], + 10950: [0.25583, 0.75583, 0, 0, 0.77778], + 10955: [0.28481, 0.79383, 0, 0, 0.77778], + 10956: [0.28481, 0.79383, 0, 0, 0.77778], + 57350: [0.08167, 0.58167, 0, 0, 0.22222], + 57351: [0.08167, 0.58167, 0, 0, 0.38889], + 57352: [0.08167, 0.58167, 0, 0, 0.77778], + 57353: [0, 0.43056, 0.04028, 0, 0.66667], + 57356: [0.25142, 0.75726, 0, 0, 0.77778], + 57357: [0.25142, 0.75726, 0, 0, 0.77778], + 57358: [0.41951, 0.91951, 0, 0, 0.77778], + 57359: [0.30274, 0.79383, 0, 0, 0.77778], + 57360: [0.30274, 0.79383, 0, 0, 0.77778], + 57361: [0.41951, 0.91951, 0, 0, 0.77778], + 57366: [0.25142, 0.75726, 0, 0, 0.77778], + 57367: [0.25142, 0.75726, 0, 0, 0.77778], + 57368: [0.25142, 0.75726, 0, 0, 0.77778], + 57369: [0.25142, 0.75726, 0, 0, 0.77778], + 57370: [0.13597, 0.63597, 0, 0, 0.77778], + 57371: [0.13597, 0.63597, 0, 0, 0.77778] + }, + "Caligraphic-Regular": { + 32: [0, 0, 0, 0, 0.25], + 65: [0, 0.68333, 0, 0.19445, 0.79847], + 66: [0, 0.68333, 0.03041, 0.13889, 0.65681], + 67: [0, 0.68333, 0.05834, 0.13889, 0.52653], + 68: [0, 0.68333, 0.02778, 0.08334, 0.77139], + 69: [0, 0.68333, 0.08944, 0.11111, 0.52778], + 70: [0, 0.68333, 0.09931, 0.11111, 0.71875], + 71: [0.09722, 0.68333, 0.0593, 0.11111, 0.59487], + 72: [0, 0.68333, 965e-5, 0.11111, 0.84452], + 73: [0, 0.68333, 0.07382, 0, 0.54452], + 74: [0.09722, 0.68333, 0.18472, 0.16667, 0.67778], + 75: [0, 0.68333, 0.01445, 0.05556, 0.76195], + 76: [0, 0.68333, 0, 0.13889, 0.68972], + 77: [0, 0.68333, 0, 0.13889, 1.2009], + 78: [0, 0.68333, 0.14736, 0.08334, 0.82049], + 79: [0, 0.68333, 0.02778, 0.11111, 0.79611], + 80: [0, 0.68333, 0.08222, 0.08334, 0.69556], + 81: [0.09722, 0.68333, 0, 0.11111, 0.81667], + 82: [0, 0.68333, 0, 0.08334, 0.8475], + 83: [0, 0.68333, 0.075, 0.13889, 0.60556], + 84: [0, 0.68333, 0.25417, 0, 0.54464], + 85: [0, 0.68333, 0.09931, 0.08334, 0.62583], + 86: [0, 0.68333, 0.08222, 0, 0.61278], + 87: [0, 0.68333, 0.08222, 0.08334, 0.98778], + 88: [0, 0.68333, 0.14643, 0.13889, 0.7133], + 89: [0.09722, 0.68333, 0.08222, 0.08334, 0.66834], + 90: [0, 0.68333, 0.07944, 0.13889, 0.72473], + 160: [0, 0, 0, 0, 0.25] + }, + "Fraktur-Regular": { + 32: [0, 0, 0, 0, 0.25], + 33: [0, 0.69141, 0, 0, 0.29574], + 34: [0, 0.69141, 0, 0, 0.21471], + 38: [0, 0.69141, 0, 0, 0.73786], + 39: [0, 0.69141, 0, 0, 0.21201], + 40: [0.24982, 0.74947, 0, 0, 0.38865], + 41: [0.24982, 0.74947, 0, 0, 0.38865], + 42: [0, 0.62119, 0, 0, 0.27764], + 43: [0.08319, 0.58283, 0, 0, 0.75623], + 44: [0, 0.10803, 0, 0, 0.27764], + 45: [0.08319, 0.58283, 0, 0, 0.75623], + 46: [0, 0.10803, 0, 0, 0.27764], + 47: [0.24982, 0.74947, 0, 0, 0.50181], + 48: [0, 0.47534, 0, 0, 0.50181], + 49: [0, 0.47534, 0, 0, 0.50181], + 50: [0, 0.47534, 0, 0, 0.50181], + 51: [0.18906, 0.47534, 0, 0, 0.50181], + 52: [0.18906, 0.47534, 0, 0, 0.50181], + 53: [0.18906, 0.47534, 0, 0, 0.50181], + 54: [0, 0.69141, 0, 0, 0.50181], + 55: [0.18906, 0.47534, 0, 0, 0.50181], + 56: [0, 0.69141, 0, 0, 0.50181], + 57: [0.18906, 0.47534, 0, 0, 0.50181], + 58: [0, 0.47534, 0, 0, 0.21606], + 59: [0.12604, 0.47534, 0, 0, 0.21606], + 61: [-0.13099, 0.36866, 0, 0, 0.75623], + 63: [0, 0.69141, 0, 0, 0.36245], + 65: [0, 0.69141, 0, 0, 0.7176], + 66: [0, 0.69141, 0, 0, 0.88397], + 67: [0, 0.69141, 0, 0, 0.61254], + 68: [0, 0.69141, 0, 0, 0.83158], + 69: [0, 0.69141, 0, 0, 0.66278], + 70: [0.12604, 0.69141, 0, 0, 0.61119], + 71: [0, 0.69141, 0, 0, 0.78539], + 72: [0.06302, 0.69141, 0, 0, 0.7203], + 73: [0, 0.69141, 0, 0, 0.55448], + 74: [0.12604, 0.69141, 0, 0, 0.55231], + 75: [0, 0.69141, 0, 0, 0.66845], + 76: [0, 0.69141, 0, 0, 0.66602], + 77: [0, 0.69141, 0, 0, 1.04953], + 78: [0, 0.69141, 0, 0, 0.83212], + 79: [0, 0.69141, 0, 0, 0.82699], + 80: [0.18906, 0.69141, 0, 0, 0.82753], + 81: [0.03781, 0.69141, 0, 0, 0.82699], + 82: [0, 0.69141, 0, 0, 0.82807], + 83: [0, 0.69141, 0, 0, 0.82861], + 84: [0, 0.69141, 0, 0, 0.66899], + 85: [0, 0.69141, 0, 0, 0.64576], + 86: [0, 0.69141, 0, 0, 0.83131], + 87: [0, 0.69141, 0, 0, 1.04602], + 88: [0, 0.69141, 0, 0, 0.71922], + 89: [0.18906, 0.69141, 0, 0, 0.83293], + 90: [0.12604, 0.69141, 0, 0, 0.60201], + 91: [0.24982, 0.74947, 0, 0, 0.27764], + 93: [0.24982, 0.74947, 0, 0, 0.27764], + 94: [0, 0.69141, 0, 0, 0.49965], + 97: [0, 0.47534, 0, 0, 0.50046], + 98: [0, 0.69141, 0, 0, 0.51315], + 99: [0, 0.47534, 0, 0, 0.38946], + 100: [0, 0.62119, 0, 0, 0.49857], + 101: [0, 0.47534, 0, 0, 0.40053], + 102: [0.18906, 0.69141, 0, 0, 0.32626], + 103: [0.18906, 0.47534, 0, 0, 0.5037], + 104: [0.18906, 0.69141, 0, 0, 0.52126], + 105: [0, 0.69141, 0, 0, 0.27899], + 106: [0, 0.69141, 0, 0, 0.28088], + 107: [0, 0.69141, 0, 0, 0.38946], + 108: [0, 0.69141, 0, 0, 0.27953], + 109: [0, 0.47534, 0, 0, 0.76676], + 110: [0, 0.47534, 0, 0, 0.52666], + 111: [0, 0.47534, 0, 0, 0.48885], + 112: [0.18906, 0.52396, 0, 0, 0.50046], + 113: [0.18906, 0.47534, 0, 0, 0.48912], + 114: [0, 0.47534, 0, 0, 0.38919], + 115: [0, 0.47534, 0, 0, 0.44266], + 116: [0, 0.62119, 0, 0, 0.33301], + 117: [0, 0.47534, 0, 0, 0.5172], + 118: [0, 0.52396, 0, 0, 0.5118], + 119: [0, 0.52396, 0, 0, 0.77351], + 120: [0.18906, 0.47534, 0, 0, 0.38865], + 121: [0.18906, 0.47534, 0, 0, 0.49884], + 122: [0.18906, 0.47534, 0, 0, 0.39054], + 160: [0, 0, 0, 0, 0.25], + 8216: [0, 0.69141, 0, 0, 0.21471], + 8217: [0, 0.69141, 0, 0, 0.21471], + 58112: [0, 0.62119, 0, 0, 0.49749], + 58113: [0, 0.62119, 0, 0, 0.4983], + 58114: [0.18906, 0.69141, 0, 0, 0.33328], + 58115: [0.18906, 0.69141, 0, 0, 0.32923], + 58116: [0.18906, 0.47534, 0, 0, 0.50343], + 58117: [0, 0.69141, 0, 0, 0.33301], + 58118: [0, 0.62119, 0, 0, 0.33409], + 58119: [0, 0.47534, 0, 0, 0.50073] + }, + "Main-Bold": { + 32: [0, 0, 0, 0, 0.25], + 33: [0, 0.69444, 0, 0, 0.35], + 34: [0, 0.69444, 0, 0, 0.60278], + 35: [0.19444, 0.69444, 0, 0, 0.95833], + 36: [0.05556, 0.75, 0, 0, 0.575], + 37: [0.05556, 0.75, 0, 0, 0.95833], + 38: [0, 0.69444, 0, 0, 0.89444], + 39: [0, 0.69444, 0, 0, 0.31944], + 40: [0.25, 0.75, 0, 0, 0.44722], + 41: [0.25, 0.75, 0, 0, 0.44722], + 42: [0, 0.75, 0, 0, 0.575], + 43: [0.13333, 0.63333, 0, 0, 0.89444], + 44: [0.19444, 0.15556, 0, 0, 0.31944], + 45: [0, 0.44444, 0, 0, 0.38333], + 46: [0, 0.15556, 0, 0, 0.31944], + 47: [0.25, 0.75, 0, 0, 0.575], + 48: [0, 0.64444, 0, 0, 0.575], + 49: [0, 0.64444, 0, 0, 0.575], + 50: [0, 0.64444, 0, 0, 0.575], + 51: [0, 0.64444, 0, 0, 0.575], + 52: [0, 0.64444, 0, 0, 0.575], + 53: [0, 0.64444, 0, 0, 0.575], + 54: [0, 0.64444, 0, 0, 0.575], + 55: [0, 0.64444, 0, 0, 0.575], + 56: [0, 0.64444, 0, 0, 0.575], + 57: [0, 0.64444, 0, 0, 0.575], + 58: [0, 0.44444, 0, 0, 0.31944], + 59: [0.19444, 0.44444, 0, 0, 0.31944], + 60: [0.08556, 0.58556, 0, 0, 0.89444], + 61: [-0.10889, 0.39111, 0, 0, 0.89444], + 62: [0.08556, 0.58556, 0, 0, 0.89444], + 63: [0, 0.69444, 0, 0, 0.54305], + 64: [0, 0.69444, 0, 0, 0.89444], + 65: [0, 0.68611, 0, 0, 0.86944], + 66: [0, 0.68611, 0, 0, 0.81805], + 67: [0, 0.68611, 0, 0, 0.83055], + 68: [0, 0.68611, 0, 0, 0.88194], + 69: [0, 0.68611, 0, 0, 0.75555], + 70: [0, 0.68611, 0, 0, 0.72361], + 71: [0, 0.68611, 0, 0, 0.90416], + 72: [0, 0.68611, 0, 0, 0.9], + 73: [0, 0.68611, 0, 0, 0.43611], + 74: [0, 0.68611, 0, 0, 0.59444], + 75: [0, 0.68611, 0, 0, 0.90138], + 76: [0, 0.68611, 0, 0, 0.69166], + 77: [0, 0.68611, 0, 0, 1.09166], + 78: [0, 0.68611, 0, 0, 0.9], + 79: [0, 0.68611, 0, 0, 0.86388], + 80: [0, 0.68611, 0, 0, 0.78611], + 81: [0.19444, 0.68611, 0, 0, 0.86388], + 82: [0, 0.68611, 0, 0, 0.8625], + 83: [0, 0.68611, 0, 0, 0.63889], + 84: [0, 0.68611, 0, 0, 0.8], + 85: [0, 0.68611, 0, 0, 0.88472], + 86: [0, 0.68611, 0.01597, 0, 0.86944], + 87: [0, 0.68611, 0.01597, 0, 1.18888], + 88: [0, 0.68611, 0, 0, 0.86944], + 89: [0, 0.68611, 0.02875, 0, 0.86944], + 90: [0, 0.68611, 0, 0, 0.70277], + 91: [0.25, 0.75, 0, 0, 0.31944], + 92: [0.25, 0.75, 0, 0, 0.575], + 93: [0.25, 0.75, 0, 0, 0.31944], + 94: [0, 0.69444, 0, 0, 0.575], + 95: [0.31, 0.13444, 0.03194, 0, 0.575], + 97: [0, 0.44444, 0, 0, 0.55902], + 98: [0, 0.69444, 0, 0, 0.63889], + 99: [0, 0.44444, 0, 0, 0.51111], + 100: [0, 0.69444, 0, 0, 0.63889], + 101: [0, 0.44444, 0, 0, 0.52708], + 102: [0, 0.69444, 0.10903, 0, 0.35139], + 103: [0.19444, 0.44444, 0.01597, 0, 0.575], + 104: [0, 0.69444, 0, 0, 0.63889], + 105: [0, 0.69444, 0, 0, 0.31944], + 106: [0.19444, 0.69444, 0, 0, 0.35139], + 107: [0, 0.69444, 0, 0, 0.60694], + 108: [0, 0.69444, 0, 0, 0.31944], + 109: [0, 0.44444, 0, 0, 0.95833], + 110: [0, 0.44444, 0, 0, 0.63889], + 111: [0, 0.44444, 0, 0, 0.575], + 112: [0.19444, 0.44444, 0, 0, 0.63889], + 113: [0.19444, 0.44444, 0, 0, 0.60694], + 114: [0, 0.44444, 0, 0, 0.47361], + 115: [0, 0.44444, 0, 0, 0.45361], + 116: [0, 0.63492, 0, 0, 0.44722], + 117: [0, 0.44444, 0, 0, 0.63889], + 118: [0, 0.44444, 0.01597, 0, 0.60694], + 119: [0, 0.44444, 0.01597, 0, 0.83055], + 120: [0, 0.44444, 0, 0, 0.60694], + 121: [0.19444, 0.44444, 0.01597, 0, 0.60694], + 122: [0, 0.44444, 0, 0, 0.51111], + 123: [0.25, 0.75, 0, 0, 0.575], + 124: [0.25, 0.75, 0, 0, 0.31944], + 125: [0.25, 0.75, 0, 0, 0.575], + 126: [0.35, 0.34444, 0, 0, 0.575], + 160: [0, 0, 0, 0, 0.25], + 163: [0, 0.69444, 0, 0, 0.86853], + 168: [0, 0.69444, 0, 0, 0.575], + 172: [0, 0.44444, 0, 0, 0.76666], + 176: [0, 0.69444, 0, 0, 0.86944], + 177: [0.13333, 0.63333, 0, 0, 0.89444], + 184: [0.17014, 0, 0, 0, 0.51111], + 198: [0, 0.68611, 0, 0, 1.04166], + 215: [0.13333, 0.63333, 0, 0, 0.89444], + 216: [0.04861, 0.73472, 0, 0, 0.89444], + 223: [0, 0.69444, 0, 0, 0.59722], + 230: [0, 0.44444, 0, 0, 0.83055], + 247: [0.13333, 0.63333, 0, 0, 0.89444], + 248: [0.09722, 0.54167, 0, 0, 0.575], + 305: [0, 0.44444, 0, 0, 0.31944], + 338: [0, 0.68611, 0, 0, 1.16944], + 339: [0, 0.44444, 0, 0, 0.89444], + 567: [0.19444, 0.44444, 0, 0, 0.35139], + 710: [0, 0.69444, 0, 0, 0.575], + 711: [0, 0.63194, 0, 0, 0.575], + 713: [0, 0.59611, 0, 0, 0.575], + 714: [0, 0.69444, 0, 0, 0.575], + 715: [0, 0.69444, 0, 0, 0.575], + 728: [0, 0.69444, 0, 0, 0.575], + 729: [0, 0.69444, 0, 0, 0.31944], + 730: [0, 0.69444, 0, 0, 0.86944], + 732: [0, 0.69444, 0, 0, 0.575], + 733: [0, 0.69444, 0, 0, 0.575], + 915: [0, 0.68611, 0, 0, 0.69166], + 916: [0, 0.68611, 0, 0, 0.95833], + 920: [0, 0.68611, 0, 0, 0.89444], + 923: [0, 0.68611, 0, 0, 0.80555], + 926: [0, 0.68611, 0, 0, 0.76666], + 928: [0, 0.68611, 0, 0, 0.9], + 931: [0, 0.68611, 0, 0, 0.83055], + 933: [0, 0.68611, 0, 0, 0.89444], + 934: [0, 0.68611, 0, 0, 0.83055], + 936: [0, 0.68611, 0, 0, 0.89444], + 937: [0, 0.68611, 0, 0, 0.83055], + 8211: [0, 0.44444, 0.03194, 0, 0.575], + 8212: [0, 0.44444, 0.03194, 0, 1.14999], + 8216: [0, 0.69444, 0, 0, 0.31944], + 8217: [0, 0.69444, 0, 0, 0.31944], + 8220: [0, 0.69444, 0, 0, 0.60278], + 8221: [0, 0.69444, 0, 0, 0.60278], + 8224: [0.19444, 0.69444, 0, 0, 0.51111], + 8225: [0.19444, 0.69444, 0, 0, 0.51111], + 8242: [0, 0.55556, 0, 0, 0.34444], + 8407: [0, 0.72444, 0.15486, 0, 0.575], + 8463: [0, 0.69444, 0, 0, 0.66759], + 8465: [0, 0.69444, 0, 0, 0.83055], + 8467: [0, 0.69444, 0, 0, 0.47361], + 8472: [0.19444, 0.44444, 0, 0, 0.74027], + 8476: [0, 0.69444, 0, 0, 0.83055], + 8501: [0, 0.69444, 0, 0, 0.70277], + 8592: [-0.10889, 0.39111, 0, 0, 1.14999], + 8593: [0.19444, 0.69444, 0, 0, 0.575], + 8594: [-0.10889, 0.39111, 0, 0, 1.14999], + 8595: [0.19444, 0.69444, 0, 0, 0.575], + 8596: [-0.10889, 0.39111, 0, 0, 1.14999], + 8597: [0.25, 0.75, 0, 0, 0.575], + 8598: [0.19444, 0.69444, 0, 0, 1.14999], + 8599: [0.19444, 0.69444, 0, 0, 1.14999], + 8600: [0.19444, 0.69444, 0, 0, 1.14999], + 8601: [0.19444, 0.69444, 0, 0, 1.14999], + 8636: [-0.10889, 0.39111, 0, 0, 1.14999], + 8637: [-0.10889, 0.39111, 0, 0, 1.14999], + 8640: [-0.10889, 0.39111, 0, 0, 1.14999], + 8641: [-0.10889, 0.39111, 0, 0, 1.14999], + 8656: [-0.10889, 0.39111, 0, 0, 1.14999], + 8657: [0.19444, 0.69444, 0, 0, 0.70277], + 8658: [-0.10889, 0.39111, 0, 0, 1.14999], + 8659: [0.19444, 0.69444, 0, 0, 0.70277], + 8660: [-0.10889, 0.39111, 0, 0, 1.14999], + 8661: [0.25, 0.75, 0, 0, 0.70277], + 8704: [0, 0.69444, 0, 0, 0.63889], + 8706: [0, 0.69444, 0.06389, 0, 0.62847], + 8707: [0, 0.69444, 0, 0, 0.63889], + 8709: [0.05556, 0.75, 0, 0, 0.575], + 8711: [0, 0.68611, 0, 0, 0.95833], + 8712: [0.08556, 0.58556, 0, 0, 0.76666], + 8715: [0.08556, 0.58556, 0, 0, 0.76666], + 8722: [0.13333, 0.63333, 0, 0, 0.89444], + 8723: [0.13333, 0.63333, 0, 0, 0.89444], + 8725: [0.25, 0.75, 0, 0, 0.575], + 8726: [0.25, 0.75, 0, 0, 0.575], + 8727: [-0.02778, 0.47222, 0, 0, 0.575], + 8728: [-0.02639, 0.47361, 0, 0, 0.575], + 8729: [-0.02639, 0.47361, 0, 0, 0.575], + 8730: [0.18, 0.82, 0, 0, 0.95833], + 8733: [0, 0.44444, 0, 0, 0.89444], + 8734: [0, 0.44444, 0, 0, 1.14999], + 8736: [0, 0.69224, 0, 0, 0.72222], + 8739: [0.25, 0.75, 0, 0, 0.31944], + 8741: [0.25, 0.75, 0, 0, 0.575], + 8743: [0, 0.55556, 0, 0, 0.76666], + 8744: [0, 0.55556, 0, 0, 0.76666], + 8745: [0, 0.55556, 0, 0, 0.76666], + 8746: [0, 0.55556, 0, 0, 0.76666], + 8747: [0.19444, 0.69444, 0.12778, 0, 0.56875], + 8764: [-0.10889, 0.39111, 0, 0, 0.89444], + 8768: [0.19444, 0.69444, 0, 0, 0.31944], + 8771: [222e-5, 0.50222, 0, 0, 0.89444], + 8773: [0.027, 0.638, 0, 0, 0.894], + 8776: [0.02444, 0.52444, 0, 0, 0.89444], + 8781: [222e-5, 0.50222, 0, 0, 0.89444], + 8801: [222e-5, 0.50222, 0, 0, 0.89444], + 8804: [0.19667, 0.69667, 0, 0, 0.89444], + 8805: [0.19667, 0.69667, 0, 0, 0.89444], + 8810: [0.08556, 0.58556, 0, 0, 1.14999], + 8811: [0.08556, 0.58556, 0, 0, 1.14999], + 8826: [0.08556, 0.58556, 0, 0, 0.89444], + 8827: [0.08556, 0.58556, 0, 0, 0.89444], + 8834: [0.08556, 0.58556, 0, 0, 0.89444], + 8835: [0.08556, 0.58556, 0, 0, 0.89444], + 8838: [0.19667, 0.69667, 0, 0, 0.89444], + 8839: [0.19667, 0.69667, 0, 0, 0.89444], + 8846: [0, 0.55556, 0, 0, 0.76666], + 8849: [0.19667, 0.69667, 0, 0, 0.89444], + 8850: [0.19667, 0.69667, 0, 0, 0.89444], + 8851: [0, 0.55556, 0, 0, 0.76666], + 8852: [0, 0.55556, 0, 0, 0.76666], + 8853: [0.13333, 0.63333, 0, 0, 0.89444], + 8854: [0.13333, 0.63333, 0, 0, 0.89444], + 8855: [0.13333, 0.63333, 0, 0, 0.89444], + 8856: [0.13333, 0.63333, 0, 0, 0.89444], + 8857: [0.13333, 0.63333, 0, 0, 0.89444], + 8866: [0, 0.69444, 0, 0, 0.70277], + 8867: [0, 0.69444, 0, 0, 0.70277], + 8868: [0, 0.69444, 0, 0, 0.89444], + 8869: [0, 0.69444, 0, 0, 0.89444], + 8900: [-0.02639, 0.47361, 0, 0, 0.575], + 8901: [-0.02639, 0.47361, 0, 0, 0.31944], + 8902: [-0.02778, 0.47222, 0, 0, 0.575], + 8968: [0.25, 0.75, 0, 0, 0.51111], + 8969: [0.25, 0.75, 0, 0, 0.51111], + 8970: [0.25, 0.75, 0, 0, 0.51111], + 8971: [0.25, 0.75, 0, 0, 0.51111], + 8994: [-0.13889, 0.36111, 0, 0, 1.14999], + 8995: [-0.13889, 0.36111, 0, 0, 1.14999], + 9651: [0.19444, 0.69444, 0, 0, 1.02222], + 9657: [-0.02778, 0.47222, 0, 0, 0.575], + 9661: [0.19444, 0.69444, 0, 0, 1.02222], + 9667: [-0.02778, 0.47222, 0, 0, 0.575], + 9711: [0.19444, 0.69444, 0, 0, 1.14999], + 9824: [0.12963, 0.69444, 0, 0, 0.89444], + 9825: [0.12963, 0.69444, 0, 0, 0.89444], + 9826: [0.12963, 0.69444, 0, 0, 0.89444], + 9827: [0.12963, 0.69444, 0, 0, 0.89444], + 9837: [0, 0.75, 0, 0, 0.44722], + 9838: [0.19444, 0.69444, 0, 0, 0.44722], + 9839: [0.19444, 0.69444, 0, 0, 0.44722], + 10216: [0.25, 0.75, 0, 0, 0.44722], + 10217: [0.25, 0.75, 0, 0, 0.44722], + 10815: [0, 0.68611, 0, 0, 0.9], + 10927: [0.19667, 0.69667, 0, 0, 0.89444], + 10928: [0.19667, 0.69667, 0, 0, 0.89444], + 57376: [0.19444, 0.69444, 0, 0, 0] + }, + "Main-BoldItalic": { + 32: [0, 0, 0, 0, 0.25], + 33: [0, 0.69444, 0.11417, 0, 0.38611], + 34: [0, 0.69444, 0.07939, 0, 0.62055], + 35: [0.19444, 0.69444, 0.06833, 0, 0.94444], + 37: [0.05556, 0.75, 0.12861, 0, 0.94444], + 38: [0, 0.69444, 0.08528, 0, 0.88555], + 39: [0, 0.69444, 0.12945, 0, 0.35555], + 40: [0.25, 0.75, 0.15806, 0, 0.47333], + 41: [0.25, 0.75, 0.03306, 0, 0.47333], + 42: [0, 0.75, 0.14333, 0, 0.59111], + 43: [0.10333, 0.60333, 0.03306, 0, 0.88555], + 44: [0.19444, 0.14722, 0, 0, 0.35555], + 45: [0, 0.44444, 0.02611, 0, 0.41444], + 46: [0, 0.14722, 0, 0, 0.35555], + 47: [0.25, 0.75, 0.15806, 0, 0.59111], + 48: [0, 0.64444, 0.13167, 0, 0.59111], + 49: [0, 0.64444, 0.13167, 0, 0.59111], + 50: [0, 0.64444, 0.13167, 0, 0.59111], + 51: [0, 0.64444, 0.13167, 0, 0.59111], + 52: [0.19444, 0.64444, 0.13167, 0, 0.59111], + 53: [0, 0.64444, 0.13167, 0, 0.59111], + 54: [0, 0.64444, 0.13167, 0, 0.59111], + 55: [0.19444, 0.64444, 0.13167, 0, 0.59111], + 56: [0, 0.64444, 0.13167, 0, 0.59111], + 57: [0, 0.64444, 0.13167, 0, 0.59111], + 58: [0, 0.44444, 0.06695, 0, 0.35555], + 59: [0.19444, 0.44444, 0.06695, 0, 0.35555], + 61: [-0.10889, 0.39111, 0.06833, 0, 0.88555], + 63: [0, 0.69444, 0.11472, 0, 0.59111], + 64: [0, 0.69444, 0.09208, 0, 0.88555], + 65: [0, 0.68611, 0, 0, 0.86555], + 66: [0, 0.68611, 0.0992, 0, 0.81666], + 67: [0, 0.68611, 0.14208, 0, 0.82666], + 68: [0, 0.68611, 0.09062, 0, 0.87555], + 69: [0, 0.68611, 0.11431, 0, 0.75666], + 70: [0, 0.68611, 0.12903, 0, 0.72722], + 71: [0, 0.68611, 0.07347, 0, 0.89527], + 72: [0, 0.68611, 0.17208, 0, 0.8961], + 73: [0, 0.68611, 0.15681, 0, 0.47166], + 74: [0, 0.68611, 0.145, 0, 0.61055], + 75: [0, 0.68611, 0.14208, 0, 0.89499], + 76: [0, 0.68611, 0, 0, 0.69777], + 77: [0, 0.68611, 0.17208, 0, 1.07277], + 78: [0, 0.68611, 0.17208, 0, 0.8961], + 79: [0, 0.68611, 0.09062, 0, 0.85499], + 80: [0, 0.68611, 0.0992, 0, 0.78721], + 81: [0.19444, 0.68611, 0.09062, 0, 0.85499], + 82: [0, 0.68611, 0.02559, 0, 0.85944], + 83: [0, 0.68611, 0.11264, 0, 0.64999], + 84: [0, 0.68611, 0.12903, 0, 0.7961], + 85: [0, 0.68611, 0.17208, 0, 0.88083], + 86: [0, 0.68611, 0.18625, 0, 0.86555], + 87: [0, 0.68611, 0.18625, 0, 1.15999], + 88: [0, 0.68611, 0.15681, 0, 0.86555], + 89: [0, 0.68611, 0.19803, 0, 0.86555], + 90: [0, 0.68611, 0.14208, 0, 0.70888], + 91: [0.25, 0.75, 0.1875, 0, 0.35611], + 93: [0.25, 0.75, 0.09972, 0, 0.35611], + 94: [0, 0.69444, 0.06709, 0, 0.59111], + 95: [0.31, 0.13444, 0.09811, 0, 0.59111], + 97: [0, 0.44444, 0.09426, 0, 0.59111], + 98: [0, 0.69444, 0.07861, 0, 0.53222], + 99: [0, 0.44444, 0.05222, 0, 0.53222], + 100: [0, 0.69444, 0.10861, 0, 0.59111], + 101: [0, 0.44444, 0.085, 0, 0.53222], + 102: [0.19444, 0.69444, 0.21778, 0, 0.4], + 103: [0.19444, 0.44444, 0.105, 0, 0.53222], + 104: [0, 0.69444, 0.09426, 0, 0.59111], + 105: [0, 0.69326, 0.11387, 0, 0.35555], + 106: [0.19444, 0.69326, 0.1672, 0, 0.35555], + 107: [0, 0.69444, 0.11111, 0, 0.53222], + 108: [0, 0.69444, 0.10861, 0, 0.29666], + 109: [0, 0.44444, 0.09426, 0, 0.94444], + 110: [0, 0.44444, 0.09426, 0, 0.64999], + 111: [0, 0.44444, 0.07861, 0, 0.59111], + 112: [0.19444, 0.44444, 0.07861, 0, 0.59111], + 113: [0.19444, 0.44444, 0.105, 0, 0.53222], + 114: [0, 0.44444, 0.11111, 0, 0.50167], + 115: [0, 0.44444, 0.08167, 0, 0.48694], + 116: [0, 0.63492, 0.09639, 0, 0.385], + 117: [0, 0.44444, 0.09426, 0, 0.62055], + 118: [0, 0.44444, 0.11111, 0, 0.53222], + 119: [0, 0.44444, 0.11111, 0, 0.76777], + 120: [0, 0.44444, 0.12583, 0, 0.56055], + 121: [0.19444, 0.44444, 0.105, 0, 0.56166], + 122: [0, 0.44444, 0.13889, 0, 0.49055], + 126: [0.35, 0.34444, 0.11472, 0, 0.59111], + 160: [0, 0, 0, 0, 0.25], + 168: [0, 0.69444, 0.11473, 0, 0.59111], + 176: [0, 0.69444, 0, 0, 0.94888], + 184: [0.17014, 0, 0, 0, 0.53222], + 198: [0, 0.68611, 0.11431, 0, 1.02277], + 216: [0.04861, 0.73472, 0.09062, 0, 0.88555], + 223: [0.19444, 0.69444, 0.09736, 0, 0.665], + 230: [0, 0.44444, 0.085, 0, 0.82666], + 248: [0.09722, 0.54167, 0.09458, 0, 0.59111], + 305: [0, 0.44444, 0.09426, 0, 0.35555], + 338: [0, 0.68611, 0.11431, 0, 1.14054], + 339: [0, 0.44444, 0.085, 0, 0.82666], + 567: [0.19444, 0.44444, 0.04611, 0, 0.385], + 710: [0, 0.69444, 0.06709, 0, 0.59111], + 711: [0, 0.63194, 0.08271, 0, 0.59111], + 713: [0, 0.59444, 0.10444, 0, 0.59111], + 714: [0, 0.69444, 0.08528, 0, 0.59111], + 715: [0, 0.69444, 0, 0, 0.59111], + 728: [0, 0.69444, 0.10333, 0, 0.59111], + 729: [0, 0.69444, 0.12945, 0, 0.35555], + 730: [0, 0.69444, 0, 0, 0.94888], + 732: [0, 0.69444, 0.11472, 0, 0.59111], + 733: [0, 0.69444, 0.11472, 0, 0.59111], + 915: [0, 0.68611, 0.12903, 0, 0.69777], + 916: [0, 0.68611, 0, 0, 0.94444], + 920: [0, 0.68611, 0.09062, 0, 0.88555], + 923: [0, 0.68611, 0, 0, 0.80666], + 926: [0, 0.68611, 0.15092, 0, 0.76777], + 928: [0, 0.68611, 0.17208, 0, 0.8961], + 931: [0, 0.68611, 0.11431, 0, 0.82666], + 933: [0, 0.68611, 0.10778, 0, 0.88555], + 934: [0, 0.68611, 0.05632, 0, 0.82666], + 936: [0, 0.68611, 0.10778, 0, 0.88555], + 937: [0, 0.68611, 0.0992, 0, 0.82666], + 8211: [0, 0.44444, 0.09811, 0, 0.59111], + 8212: [0, 0.44444, 0.09811, 0, 1.18221], + 8216: [0, 0.69444, 0.12945, 0, 0.35555], + 8217: [0, 0.69444, 0.12945, 0, 0.35555], + 8220: [0, 0.69444, 0.16772, 0, 0.62055], + 8221: [0, 0.69444, 0.07939, 0, 0.62055] + }, + "Main-Italic": { + 32: [0, 0, 0, 0, 0.25], + 33: [0, 0.69444, 0.12417, 0, 0.30667], + 34: [0, 0.69444, 0.06961, 0, 0.51444], + 35: [0.19444, 0.69444, 0.06616, 0, 0.81777], + 37: [0.05556, 0.75, 0.13639, 0, 0.81777], + 38: [0, 0.69444, 0.09694, 0, 0.76666], + 39: [0, 0.69444, 0.12417, 0, 0.30667], + 40: [0.25, 0.75, 0.16194, 0, 0.40889], + 41: [0.25, 0.75, 0.03694, 0, 0.40889], + 42: [0, 0.75, 0.14917, 0, 0.51111], + 43: [0.05667, 0.56167, 0.03694, 0, 0.76666], + 44: [0.19444, 0.10556, 0, 0, 0.30667], + 45: [0, 0.43056, 0.02826, 0, 0.35778], + 46: [0, 0.10556, 0, 0, 0.30667], + 47: [0.25, 0.75, 0.16194, 0, 0.51111], + 48: [0, 0.64444, 0.13556, 0, 0.51111], + 49: [0, 0.64444, 0.13556, 0, 0.51111], + 50: [0, 0.64444, 0.13556, 0, 0.51111], + 51: [0, 0.64444, 0.13556, 0, 0.51111], + 52: [0.19444, 0.64444, 0.13556, 0, 0.51111], + 53: [0, 0.64444, 0.13556, 0, 0.51111], + 54: [0, 0.64444, 0.13556, 0, 0.51111], + 55: [0.19444, 0.64444, 0.13556, 0, 0.51111], + 56: [0, 0.64444, 0.13556, 0, 0.51111], + 57: [0, 0.64444, 0.13556, 0, 0.51111], + 58: [0, 0.43056, 0.0582, 0, 0.30667], + 59: [0.19444, 0.43056, 0.0582, 0, 0.30667], + 61: [-0.13313, 0.36687, 0.06616, 0, 0.76666], + 63: [0, 0.69444, 0.1225, 0, 0.51111], + 64: [0, 0.69444, 0.09597, 0, 0.76666], + 65: [0, 0.68333, 0, 0, 0.74333], + 66: [0, 0.68333, 0.10257, 0, 0.70389], + 67: [0, 0.68333, 0.14528, 0, 0.71555], + 68: [0, 0.68333, 0.09403, 0, 0.755], + 69: [0, 0.68333, 0.12028, 0, 0.67833], + 70: [0, 0.68333, 0.13305, 0, 0.65277], + 71: [0, 0.68333, 0.08722, 0, 0.77361], + 72: [0, 0.68333, 0.16389, 0, 0.74333], + 73: [0, 0.68333, 0.15806, 0, 0.38555], + 74: [0, 0.68333, 0.14028, 0, 0.525], + 75: [0, 0.68333, 0.14528, 0, 0.76888], + 76: [0, 0.68333, 0, 0, 0.62722], + 77: [0, 0.68333, 0.16389, 0, 0.89666], + 78: [0, 0.68333, 0.16389, 0, 0.74333], + 79: [0, 0.68333, 0.09403, 0, 0.76666], + 80: [0, 0.68333, 0.10257, 0, 0.67833], + 81: [0.19444, 0.68333, 0.09403, 0, 0.76666], + 82: [0, 0.68333, 0.03868, 0, 0.72944], + 83: [0, 0.68333, 0.11972, 0, 0.56222], + 84: [0, 0.68333, 0.13305, 0, 0.71555], + 85: [0, 0.68333, 0.16389, 0, 0.74333], + 86: [0, 0.68333, 0.18361, 0, 0.74333], + 87: [0, 0.68333, 0.18361, 0, 0.99888], + 88: [0, 0.68333, 0.15806, 0, 0.74333], + 89: [0, 0.68333, 0.19383, 0, 0.74333], + 90: [0, 0.68333, 0.14528, 0, 0.61333], + 91: [0.25, 0.75, 0.1875, 0, 0.30667], + 93: [0.25, 0.75, 0.10528, 0, 0.30667], + 94: [0, 0.69444, 0.06646, 0, 0.51111], + 95: [0.31, 0.12056, 0.09208, 0, 0.51111], + 97: [0, 0.43056, 0.07671, 0, 0.51111], + 98: [0, 0.69444, 0.06312, 0, 0.46], + 99: [0, 0.43056, 0.05653, 0, 0.46], + 100: [0, 0.69444, 0.10333, 0, 0.51111], + 101: [0, 0.43056, 0.07514, 0, 0.46], + 102: [0.19444, 0.69444, 0.21194, 0, 0.30667], + 103: [0.19444, 0.43056, 0.08847, 0, 0.46], + 104: [0, 0.69444, 0.07671, 0, 0.51111], + 105: [0, 0.65536, 0.1019, 0, 0.30667], + 106: [0.19444, 0.65536, 0.14467, 0, 0.30667], + 107: [0, 0.69444, 0.10764, 0, 0.46], + 108: [0, 0.69444, 0.10333, 0, 0.25555], + 109: [0, 0.43056, 0.07671, 0, 0.81777], + 110: [0, 0.43056, 0.07671, 0, 0.56222], + 111: [0, 0.43056, 0.06312, 0, 0.51111], + 112: [0.19444, 0.43056, 0.06312, 0, 0.51111], + 113: [0.19444, 0.43056, 0.08847, 0, 0.46], + 114: [0, 0.43056, 0.10764, 0, 0.42166], + 115: [0, 0.43056, 0.08208, 0, 0.40889], + 116: [0, 0.61508, 0.09486, 0, 0.33222], + 117: [0, 0.43056, 0.07671, 0, 0.53666], + 118: [0, 0.43056, 0.10764, 0, 0.46], + 119: [0, 0.43056, 0.10764, 0, 0.66444], + 120: [0, 0.43056, 0.12042, 0, 0.46389], + 121: [0.19444, 0.43056, 0.08847, 0, 0.48555], + 122: [0, 0.43056, 0.12292, 0, 0.40889], + 126: [0.35, 0.31786, 0.11585, 0, 0.51111], + 160: [0, 0, 0, 0, 0.25], + 168: [0, 0.66786, 0.10474, 0, 0.51111], + 176: [0, 0.69444, 0, 0, 0.83129], + 184: [0.17014, 0, 0, 0, 0.46], + 198: [0, 0.68333, 0.12028, 0, 0.88277], + 216: [0.04861, 0.73194, 0.09403, 0, 0.76666], + 223: [0.19444, 0.69444, 0.10514, 0, 0.53666], + 230: [0, 0.43056, 0.07514, 0, 0.71555], + 248: [0.09722, 0.52778, 0.09194, 0, 0.51111], + 338: [0, 0.68333, 0.12028, 0, 0.98499], + 339: [0, 0.43056, 0.07514, 0, 0.71555], + 710: [0, 0.69444, 0.06646, 0, 0.51111], + 711: [0, 0.62847, 0.08295, 0, 0.51111], + 713: [0, 0.56167, 0.10333, 0, 0.51111], + 714: [0, 0.69444, 0.09694, 0, 0.51111], + 715: [0, 0.69444, 0, 0, 0.51111], + 728: [0, 0.69444, 0.10806, 0, 0.51111], + 729: [0, 0.66786, 0.11752, 0, 0.30667], + 730: [0, 0.69444, 0, 0, 0.83129], + 732: [0, 0.66786, 0.11585, 0, 0.51111], + 733: [0, 0.69444, 0.1225, 0, 0.51111], + 915: [0, 0.68333, 0.13305, 0, 0.62722], + 916: [0, 0.68333, 0, 0, 0.81777], + 920: [0, 0.68333, 0.09403, 0, 0.76666], + 923: [0, 0.68333, 0, 0, 0.69222], + 926: [0, 0.68333, 0.15294, 0, 0.66444], + 928: [0, 0.68333, 0.16389, 0, 0.74333], + 931: [0, 0.68333, 0.12028, 0, 0.71555], + 933: [0, 0.68333, 0.11111, 0, 0.76666], + 934: [0, 0.68333, 0.05986, 0, 0.71555], + 936: [0, 0.68333, 0.11111, 0, 0.76666], + 937: [0, 0.68333, 0.10257, 0, 0.71555], + 8211: [0, 0.43056, 0.09208, 0, 0.51111], + 8212: [0, 0.43056, 0.09208, 0, 1.02222], + 8216: [0, 0.69444, 0.12417, 0, 0.30667], + 8217: [0, 0.69444, 0.12417, 0, 0.30667], + 8220: [0, 0.69444, 0.1685, 0, 0.51444], + 8221: [0, 0.69444, 0.06961, 0, 0.51444], + 8463: [0, 0.68889, 0, 0, 0.54028] + }, + "Main-Regular": { + 32: [0, 0, 0, 0, 0.25], + 33: [0, 0.69444, 0, 0, 0.27778], + 34: [0, 0.69444, 0, 0, 0.5], + 35: [0.19444, 0.69444, 0, 0, 0.83334], + 36: [0.05556, 0.75, 0, 0, 0.5], + 37: [0.05556, 0.75, 0, 0, 0.83334], + 38: [0, 0.69444, 0, 0, 0.77778], + 39: [0, 0.69444, 0, 0, 0.27778], + 40: [0.25, 0.75, 0, 0, 0.38889], + 41: [0.25, 0.75, 0, 0, 0.38889], + 42: [0, 0.75, 0, 0, 0.5], + 43: [0.08333, 0.58333, 0, 0, 0.77778], + 44: [0.19444, 0.10556, 0, 0, 0.27778], + 45: [0, 0.43056, 0, 0, 0.33333], + 46: [0, 0.10556, 0, 0, 0.27778], + 47: [0.25, 0.75, 0, 0, 0.5], + 48: [0, 0.64444, 0, 0, 0.5], + 49: [0, 0.64444, 0, 0, 0.5], + 50: [0, 0.64444, 0, 0, 0.5], + 51: [0, 0.64444, 0, 0, 0.5], + 52: [0, 0.64444, 0, 0, 0.5], + 53: [0, 0.64444, 0, 0, 0.5], + 54: [0, 0.64444, 0, 0, 0.5], + 55: [0, 0.64444, 0, 0, 0.5], + 56: [0, 0.64444, 0, 0, 0.5], + 57: [0, 0.64444, 0, 0, 0.5], + 58: [0, 0.43056, 0, 0, 0.27778], + 59: [0.19444, 0.43056, 0, 0, 0.27778], + 60: [0.0391, 0.5391, 0, 0, 0.77778], + 61: [-0.13313, 0.36687, 0, 0, 0.77778], + 62: [0.0391, 0.5391, 0, 0, 0.77778], + 63: [0, 0.69444, 0, 0, 0.47222], + 64: [0, 0.69444, 0, 0, 0.77778], + 65: [0, 0.68333, 0, 0, 0.75], + 66: [0, 0.68333, 0, 0, 0.70834], + 67: [0, 0.68333, 0, 0, 0.72222], + 68: [0, 0.68333, 0, 0, 0.76389], + 69: [0, 0.68333, 0, 0, 0.68056], + 70: [0, 0.68333, 0, 0, 0.65278], + 71: [0, 0.68333, 0, 0, 0.78472], + 72: [0, 0.68333, 0, 0, 0.75], + 73: [0, 0.68333, 0, 0, 0.36111], + 74: [0, 0.68333, 0, 0, 0.51389], + 75: [0, 0.68333, 0, 0, 0.77778], + 76: [0, 0.68333, 0, 0, 0.625], + 77: [0, 0.68333, 0, 0, 0.91667], + 78: [0, 0.68333, 0, 0, 0.75], + 79: [0, 0.68333, 0, 0, 0.77778], + 80: [0, 0.68333, 0, 0, 0.68056], + 81: [0.19444, 0.68333, 0, 0, 0.77778], + 82: [0, 0.68333, 0, 0, 0.73611], + 83: [0, 0.68333, 0, 0, 0.55556], + 84: [0, 0.68333, 0, 0, 0.72222], + 85: [0, 0.68333, 0, 0, 0.75], + 86: [0, 0.68333, 0.01389, 0, 0.75], + 87: [0, 0.68333, 0.01389, 0, 1.02778], + 88: [0, 0.68333, 0, 0, 0.75], + 89: [0, 0.68333, 0.025, 0, 0.75], + 90: [0, 0.68333, 0, 0, 0.61111], + 91: [0.25, 0.75, 0, 0, 0.27778], + 92: [0.25, 0.75, 0, 0, 0.5], + 93: [0.25, 0.75, 0, 0, 0.27778], + 94: [0, 0.69444, 0, 0, 0.5], + 95: [0.31, 0.12056, 0.02778, 0, 0.5], + 97: [0, 0.43056, 0, 0, 0.5], + 98: [0, 0.69444, 0, 0, 0.55556], + 99: [0, 0.43056, 0, 0, 0.44445], + 100: [0, 0.69444, 0, 0, 0.55556], + 101: [0, 0.43056, 0, 0, 0.44445], + 102: [0, 0.69444, 0.07778, 0, 0.30556], + 103: [0.19444, 0.43056, 0.01389, 0, 0.5], + 104: [0, 0.69444, 0, 0, 0.55556], + 105: [0, 0.66786, 0, 0, 0.27778], + 106: [0.19444, 0.66786, 0, 0, 0.30556], + 107: [0, 0.69444, 0, 0, 0.52778], + 108: [0, 0.69444, 0, 0, 0.27778], + 109: [0, 0.43056, 0, 0, 0.83334], + 110: [0, 0.43056, 0, 0, 0.55556], + 111: [0, 0.43056, 0, 0, 0.5], + 112: [0.19444, 0.43056, 0, 0, 0.55556], + 113: [0.19444, 0.43056, 0, 0, 0.52778], + 114: [0, 0.43056, 0, 0, 0.39167], + 115: [0, 0.43056, 0, 0, 0.39445], + 116: [0, 0.61508, 0, 0, 0.38889], + 117: [0, 0.43056, 0, 0, 0.55556], + 118: [0, 0.43056, 0.01389, 0, 0.52778], + 119: [0, 0.43056, 0.01389, 0, 0.72222], + 120: [0, 0.43056, 0, 0, 0.52778], + 121: [0.19444, 0.43056, 0.01389, 0, 0.52778], + 122: [0, 0.43056, 0, 0, 0.44445], + 123: [0.25, 0.75, 0, 0, 0.5], + 124: [0.25, 0.75, 0, 0, 0.27778], + 125: [0.25, 0.75, 0, 0, 0.5], + 126: [0.35, 0.31786, 0, 0, 0.5], + 160: [0, 0, 0, 0, 0.25], + 163: [0, 0.69444, 0, 0, 0.76909], + 167: [0.19444, 0.69444, 0, 0, 0.44445], + 168: [0, 0.66786, 0, 0, 0.5], + 172: [0, 0.43056, 0, 0, 0.66667], + 176: [0, 0.69444, 0, 0, 0.75], + 177: [0.08333, 0.58333, 0, 0, 0.77778], + 182: [0.19444, 0.69444, 0, 0, 0.61111], + 184: [0.17014, 0, 0, 0, 0.44445], + 198: [0, 0.68333, 0, 0, 0.90278], + 215: [0.08333, 0.58333, 0, 0, 0.77778], + 216: [0.04861, 0.73194, 0, 0, 0.77778], + 223: [0, 0.69444, 0, 0, 0.5], + 230: [0, 0.43056, 0, 0, 0.72222], + 247: [0.08333, 0.58333, 0, 0, 0.77778], + 248: [0.09722, 0.52778, 0, 0, 0.5], + 305: [0, 0.43056, 0, 0, 0.27778], + 338: [0, 0.68333, 0, 0, 1.01389], + 339: [0, 0.43056, 0, 0, 0.77778], + 567: [0.19444, 0.43056, 0, 0, 0.30556], + 710: [0, 0.69444, 0, 0, 0.5], + 711: [0, 0.62847, 0, 0, 0.5], + 713: [0, 0.56778, 0, 0, 0.5], + 714: [0, 0.69444, 0, 0, 0.5], + 715: [0, 0.69444, 0, 0, 0.5], + 728: [0, 0.69444, 0, 0, 0.5], + 729: [0, 0.66786, 0, 0, 0.27778], + 730: [0, 0.69444, 0, 0, 0.75], + 732: [0, 0.66786, 0, 0, 0.5], + 733: [0, 0.69444, 0, 0, 0.5], + 915: [0, 0.68333, 0, 0, 0.625], + 916: [0, 0.68333, 0, 0, 0.83334], + 920: [0, 0.68333, 0, 0, 0.77778], + 923: [0, 0.68333, 0, 0, 0.69445], + 926: [0, 0.68333, 0, 0, 0.66667], + 928: [0, 0.68333, 0, 0, 0.75], + 931: [0, 0.68333, 0, 0, 0.72222], + 933: [0, 0.68333, 0, 0, 0.77778], + 934: [0, 0.68333, 0, 0, 0.72222], + 936: [0, 0.68333, 0, 0, 0.77778], + 937: [0, 0.68333, 0, 0, 0.72222], + 8211: [0, 0.43056, 0.02778, 0, 0.5], + 8212: [0, 0.43056, 0.02778, 0, 1], + 8216: [0, 0.69444, 0, 0, 0.27778], + 8217: [0, 0.69444, 0, 0, 0.27778], + 8220: [0, 0.69444, 0, 0, 0.5], + 8221: [0, 0.69444, 0, 0, 0.5], + 8224: [0.19444, 0.69444, 0, 0, 0.44445], + 8225: [0.19444, 0.69444, 0, 0, 0.44445], + 8230: [0, 0.123, 0, 0, 1.172], + 8242: [0, 0.55556, 0, 0, 0.275], + 8407: [0, 0.71444, 0.15382, 0, 0.5], + 8463: [0, 0.68889, 0, 0, 0.54028], + 8465: [0, 0.69444, 0, 0, 0.72222], + 8467: [0, 0.69444, 0, 0.11111, 0.41667], + 8472: [0.19444, 0.43056, 0, 0.11111, 0.63646], + 8476: [0, 0.69444, 0, 0, 0.72222], + 8501: [0, 0.69444, 0, 0, 0.61111], + 8592: [-0.13313, 0.36687, 0, 0, 1], + 8593: [0.19444, 0.69444, 0, 0, 0.5], + 8594: [-0.13313, 0.36687, 0, 0, 1], + 8595: [0.19444, 0.69444, 0, 0, 0.5], + 8596: [-0.13313, 0.36687, 0, 0, 1], + 8597: [0.25, 0.75, 0, 0, 0.5], + 8598: [0.19444, 0.69444, 0, 0, 1], + 8599: [0.19444, 0.69444, 0, 0, 1], + 8600: [0.19444, 0.69444, 0, 0, 1], + 8601: [0.19444, 0.69444, 0, 0, 1], + 8614: [0.011, 0.511, 0, 0, 1], + 8617: [0.011, 0.511, 0, 0, 1.126], + 8618: [0.011, 0.511, 0, 0, 1.126], + 8636: [-0.13313, 0.36687, 0, 0, 1], + 8637: [-0.13313, 0.36687, 0, 0, 1], + 8640: [-0.13313, 0.36687, 0, 0, 1], + 8641: [-0.13313, 0.36687, 0, 0, 1], + 8652: [0.011, 0.671, 0, 0, 1], + 8656: [-0.13313, 0.36687, 0, 0, 1], + 8657: [0.19444, 0.69444, 0, 0, 0.61111], + 8658: [-0.13313, 0.36687, 0, 0, 1], + 8659: [0.19444, 0.69444, 0, 0, 0.61111], + 8660: [-0.13313, 0.36687, 0, 0, 1], + 8661: [0.25, 0.75, 0, 0, 0.61111], + 8704: [0, 0.69444, 0, 0, 0.55556], + 8706: [0, 0.69444, 0.05556, 0.08334, 0.5309], + 8707: [0, 0.69444, 0, 0, 0.55556], + 8709: [0.05556, 0.75, 0, 0, 0.5], + 8711: [0, 0.68333, 0, 0, 0.83334], + 8712: [0.0391, 0.5391, 0, 0, 0.66667], + 8715: [0.0391, 0.5391, 0, 0, 0.66667], + 8722: [0.08333, 0.58333, 0, 0, 0.77778], + 8723: [0.08333, 0.58333, 0, 0, 0.77778], + 8725: [0.25, 0.75, 0, 0, 0.5], + 8726: [0.25, 0.75, 0, 0, 0.5], + 8727: [-0.03472, 0.46528, 0, 0, 0.5], + 8728: [-0.05555, 0.44445, 0, 0, 0.5], + 8729: [-0.05555, 0.44445, 0, 0, 0.5], + 8730: [0.2, 0.8, 0, 0, 0.83334], + 8733: [0, 0.43056, 0, 0, 0.77778], + 8734: [0, 0.43056, 0, 0, 1], + 8736: [0, 0.69224, 0, 0, 0.72222], + 8739: [0.25, 0.75, 0, 0, 0.27778], + 8741: [0.25, 0.75, 0, 0, 0.5], + 8743: [0, 0.55556, 0, 0, 0.66667], + 8744: [0, 0.55556, 0, 0, 0.66667], + 8745: [0, 0.55556, 0, 0, 0.66667], + 8746: [0, 0.55556, 0, 0, 0.66667], + 8747: [0.19444, 0.69444, 0.11111, 0, 0.41667], + 8764: [-0.13313, 0.36687, 0, 0, 0.77778], + 8768: [0.19444, 0.69444, 0, 0, 0.27778], + 8771: [-0.03625, 0.46375, 0, 0, 0.77778], + 8773: [-0.022, 0.589, 0, 0, 0.778], + 8776: [-0.01688, 0.48312, 0, 0, 0.77778], + 8781: [-0.03625, 0.46375, 0, 0, 0.77778], + 8784: [-0.133, 0.673, 0, 0, 0.778], + 8801: [-0.03625, 0.46375, 0, 0, 0.77778], + 8804: [0.13597, 0.63597, 0, 0, 0.77778], + 8805: [0.13597, 0.63597, 0, 0, 0.77778], + 8810: [0.0391, 0.5391, 0, 0, 1], + 8811: [0.0391, 0.5391, 0, 0, 1], + 8826: [0.0391, 0.5391, 0, 0, 0.77778], + 8827: [0.0391, 0.5391, 0, 0, 0.77778], + 8834: [0.0391, 0.5391, 0, 0, 0.77778], + 8835: [0.0391, 0.5391, 0, 0, 0.77778], + 8838: [0.13597, 0.63597, 0, 0, 0.77778], + 8839: [0.13597, 0.63597, 0, 0, 0.77778], + 8846: [0, 0.55556, 0, 0, 0.66667], + 8849: [0.13597, 0.63597, 0, 0, 0.77778], + 8850: [0.13597, 0.63597, 0, 0, 0.77778], + 8851: [0, 0.55556, 0, 0, 0.66667], + 8852: [0, 0.55556, 0, 0, 0.66667], + 8853: [0.08333, 0.58333, 0, 0, 0.77778], + 8854: [0.08333, 0.58333, 0, 0, 0.77778], + 8855: [0.08333, 0.58333, 0, 0, 0.77778], + 8856: [0.08333, 0.58333, 0, 0, 0.77778], + 8857: [0.08333, 0.58333, 0, 0, 0.77778], + 8866: [0, 0.69444, 0, 0, 0.61111], + 8867: [0, 0.69444, 0, 0, 0.61111], + 8868: [0, 0.69444, 0, 0, 0.77778], + 8869: [0, 0.69444, 0, 0, 0.77778], + 8872: [0.249, 0.75, 0, 0, 0.867], + 8900: [-0.05555, 0.44445, 0, 0, 0.5], + 8901: [-0.05555, 0.44445, 0, 0, 0.27778], + 8902: [-0.03472, 0.46528, 0, 0, 0.5], + 8904: [5e-3, 0.505, 0, 0, 0.9], + 8942: [0.03, 0.903, 0, 0, 0.278], + 8943: [-0.19, 0.313, 0, 0, 1.172], + 8945: [-0.1, 0.823, 0, 0, 1.282], + 8968: [0.25, 0.75, 0, 0, 0.44445], + 8969: [0.25, 0.75, 0, 0, 0.44445], + 8970: [0.25, 0.75, 0, 0, 0.44445], + 8971: [0.25, 0.75, 0, 0, 0.44445], + 8994: [-0.14236, 0.35764, 0, 0, 1], + 8995: [-0.14236, 0.35764, 0, 0, 1], + 9136: [0.244, 0.744, 0, 0, 0.412], + 9137: [0.244, 0.745, 0, 0, 0.412], + 9651: [0.19444, 0.69444, 0, 0, 0.88889], + 9657: [-0.03472, 0.46528, 0, 0, 0.5], + 9661: [0.19444, 0.69444, 0, 0, 0.88889], + 9667: [-0.03472, 0.46528, 0, 0, 0.5], + 9711: [0.19444, 0.69444, 0, 0, 1], + 9824: [0.12963, 0.69444, 0, 0, 0.77778], + 9825: [0.12963, 0.69444, 0, 0, 0.77778], + 9826: [0.12963, 0.69444, 0, 0, 0.77778], + 9827: [0.12963, 0.69444, 0, 0, 0.77778], + 9837: [0, 0.75, 0, 0, 0.38889], + 9838: [0.19444, 0.69444, 0, 0, 0.38889], + 9839: [0.19444, 0.69444, 0, 0, 0.38889], + 10216: [0.25, 0.75, 0, 0, 0.38889], + 10217: [0.25, 0.75, 0, 0, 0.38889], + 10222: [0.244, 0.744, 0, 0, 0.412], + 10223: [0.244, 0.745, 0, 0, 0.412], + 10229: [0.011, 0.511, 0, 0, 1.609], + 10230: [0.011, 0.511, 0, 0, 1.638], + 10231: [0.011, 0.511, 0, 0, 1.859], + 10232: [0.024, 0.525, 0, 0, 1.609], + 10233: [0.024, 0.525, 0, 0, 1.638], + 10234: [0.024, 0.525, 0, 0, 1.858], + 10236: [0.011, 0.511, 0, 0, 1.638], + 10815: [0, 0.68333, 0, 0, 0.75], + 10927: [0.13597, 0.63597, 0, 0, 0.77778], + 10928: [0.13597, 0.63597, 0, 0, 0.77778], + 57376: [0.19444, 0.69444, 0, 0, 0] + }, + "Math-BoldItalic": { + 32: [0, 0, 0, 0, 0.25], + 48: [0, 0.44444, 0, 0, 0.575], + 49: [0, 0.44444, 0, 0, 0.575], + 50: [0, 0.44444, 0, 0, 0.575], + 51: [0.19444, 0.44444, 0, 0, 0.575], + 52: [0.19444, 0.44444, 0, 0, 0.575], + 53: [0.19444, 0.44444, 0, 0, 0.575], + 54: [0, 0.64444, 0, 0, 0.575], + 55: [0.19444, 0.44444, 0, 0, 0.575], + 56: [0, 0.64444, 0, 0, 0.575], + 57: [0.19444, 0.44444, 0, 0, 0.575], + 65: [0, 0.68611, 0, 0, 0.86944], + 66: [0, 0.68611, 0.04835, 0, 0.8664], + 67: [0, 0.68611, 0.06979, 0, 0.81694], + 68: [0, 0.68611, 0.03194, 0, 0.93812], + 69: [0, 0.68611, 0.05451, 0, 0.81007], + 70: [0, 0.68611, 0.15972, 0, 0.68889], + 71: [0, 0.68611, 0, 0, 0.88673], + 72: [0, 0.68611, 0.08229, 0, 0.98229], + 73: [0, 0.68611, 0.07778, 0, 0.51111], + 74: [0, 0.68611, 0.10069, 0, 0.63125], + 75: [0, 0.68611, 0.06979, 0, 0.97118], + 76: [0, 0.68611, 0, 0, 0.75555], + 77: [0, 0.68611, 0.11424, 0, 1.14201], + 78: [0, 0.68611, 0.11424, 0, 0.95034], + 79: [0, 0.68611, 0.03194, 0, 0.83666], + 80: [0, 0.68611, 0.15972, 0, 0.72309], + 81: [0.19444, 0.68611, 0, 0, 0.86861], + 82: [0, 0.68611, 421e-5, 0, 0.87235], + 83: [0, 0.68611, 0.05382, 0, 0.69271], + 84: [0, 0.68611, 0.15972, 0, 0.63663], + 85: [0, 0.68611, 0.11424, 0, 0.80027], + 86: [0, 0.68611, 0.25555, 0, 0.67778], + 87: [0, 0.68611, 0.15972, 0, 1.09305], + 88: [0, 0.68611, 0.07778, 0, 0.94722], + 89: [0, 0.68611, 0.25555, 0, 0.67458], + 90: [0, 0.68611, 0.06979, 0, 0.77257], + 97: [0, 0.44444, 0, 0, 0.63287], + 98: [0, 0.69444, 0, 0, 0.52083], + 99: [0, 0.44444, 0, 0, 0.51342], + 100: [0, 0.69444, 0, 0, 0.60972], + 101: [0, 0.44444, 0, 0, 0.55361], + 102: [0.19444, 0.69444, 0.11042, 0, 0.56806], + 103: [0.19444, 0.44444, 0.03704, 0, 0.5449], + 104: [0, 0.69444, 0, 0, 0.66759], + 105: [0, 0.69326, 0, 0, 0.4048], + 106: [0.19444, 0.69326, 0.0622, 0, 0.47083], + 107: [0, 0.69444, 0.01852, 0, 0.6037], + 108: [0, 0.69444, 88e-4, 0, 0.34815], + 109: [0, 0.44444, 0, 0, 1.0324], + 110: [0, 0.44444, 0, 0, 0.71296], + 111: [0, 0.44444, 0, 0, 0.58472], + 112: [0.19444, 0.44444, 0, 0, 0.60092], + 113: [0.19444, 0.44444, 0.03704, 0, 0.54213], + 114: [0, 0.44444, 0.03194, 0, 0.5287], + 115: [0, 0.44444, 0, 0, 0.53125], + 116: [0, 0.63492, 0, 0, 0.41528], + 117: [0, 0.44444, 0, 0, 0.68102], + 118: [0, 0.44444, 0.03704, 0, 0.56666], + 119: [0, 0.44444, 0.02778, 0, 0.83148], + 120: [0, 0.44444, 0, 0, 0.65903], + 121: [0.19444, 0.44444, 0.03704, 0, 0.59028], + 122: [0, 0.44444, 0.04213, 0, 0.55509], + 160: [0, 0, 0, 0, 0.25], + 915: [0, 0.68611, 0.15972, 0, 0.65694], + 916: [0, 0.68611, 0, 0, 0.95833], + 920: [0, 0.68611, 0.03194, 0, 0.86722], + 923: [0, 0.68611, 0, 0, 0.80555], + 926: [0, 0.68611, 0.07458, 0, 0.84125], + 928: [0, 0.68611, 0.08229, 0, 0.98229], + 931: [0, 0.68611, 0.05451, 0, 0.88507], + 933: [0, 0.68611, 0.15972, 0, 0.67083], + 934: [0, 0.68611, 0, 0, 0.76666], + 936: [0, 0.68611, 0.11653, 0, 0.71402], + 937: [0, 0.68611, 0.04835, 0, 0.8789], + 945: [0, 0.44444, 0, 0, 0.76064], + 946: [0.19444, 0.69444, 0.03403, 0, 0.65972], + 947: [0.19444, 0.44444, 0.06389, 0, 0.59003], + 948: [0, 0.69444, 0.03819, 0, 0.52222], + 949: [0, 0.44444, 0, 0, 0.52882], + 950: [0.19444, 0.69444, 0.06215, 0, 0.50833], + 951: [0.19444, 0.44444, 0.03704, 0, 0.6], + 952: [0, 0.69444, 0.03194, 0, 0.5618], + 953: [0, 0.44444, 0, 0, 0.41204], + 954: [0, 0.44444, 0, 0, 0.66759], + 955: [0, 0.69444, 0, 0, 0.67083], + 956: [0.19444, 0.44444, 0, 0, 0.70787], + 957: [0, 0.44444, 0.06898, 0, 0.57685], + 958: [0.19444, 0.69444, 0.03021, 0, 0.50833], + 959: [0, 0.44444, 0, 0, 0.58472], + 960: [0, 0.44444, 0.03704, 0, 0.68241], + 961: [0.19444, 0.44444, 0, 0, 0.6118], + 962: [0.09722, 0.44444, 0.07917, 0, 0.42361], + 963: [0, 0.44444, 0.03704, 0, 0.68588], + 964: [0, 0.44444, 0.13472, 0, 0.52083], + 965: [0, 0.44444, 0.03704, 0, 0.63055], + 966: [0.19444, 0.44444, 0, 0, 0.74722], + 967: [0.19444, 0.44444, 0, 0, 0.71805], + 968: [0.19444, 0.69444, 0.03704, 0, 0.75833], + 969: [0, 0.44444, 0.03704, 0, 0.71782], + 977: [0, 0.69444, 0, 0, 0.69155], + 981: [0.19444, 0.69444, 0, 0, 0.7125], + 982: [0, 0.44444, 0.03194, 0, 0.975], + 1009: [0.19444, 0.44444, 0, 0, 0.6118], + 1013: [0, 0.44444, 0, 0, 0.48333], + 57649: [0, 0.44444, 0, 0, 0.39352], + 57911: [0.19444, 0.44444, 0, 0, 0.43889] + }, + "Math-Italic": { + 32: [0, 0, 0, 0, 0.25], + 48: [0, 0.43056, 0, 0, 0.5], + 49: [0, 0.43056, 0, 0, 0.5], + 50: [0, 0.43056, 0, 0, 0.5], + 51: [0.19444, 0.43056, 0, 0, 0.5], + 52: [0.19444, 0.43056, 0, 0, 0.5], + 53: [0.19444, 0.43056, 0, 0, 0.5], + 54: [0, 0.64444, 0, 0, 0.5], + 55: [0.19444, 0.43056, 0, 0, 0.5], + 56: [0, 0.64444, 0, 0, 0.5], + 57: [0.19444, 0.43056, 0, 0, 0.5], + 65: [0, 0.68333, 0, 0.13889, 0.75], + 66: [0, 0.68333, 0.05017, 0.08334, 0.75851], + 67: [0, 0.68333, 0.07153, 0.08334, 0.71472], + 68: [0, 0.68333, 0.02778, 0.05556, 0.82792], + 69: [0, 0.68333, 0.05764, 0.08334, 0.7382], + 70: [0, 0.68333, 0.13889, 0.08334, 0.64306], + 71: [0, 0.68333, 0, 0.08334, 0.78625], + 72: [0, 0.68333, 0.08125, 0.05556, 0.83125], + 73: [0, 0.68333, 0.07847, 0.11111, 0.43958], + 74: [0, 0.68333, 0.09618, 0.16667, 0.55451], + 75: [0, 0.68333, 0.07153, 0.05556, 0.84931], + 76: [0, 0.68333, 0, 0.02778, 0.68056], + 77: [0, 0.68333, 0.10903, 0.08334, 0.97014], + 78: [0, 0.68333, 0.10903, 0.08334, 0.80347], + 79: [0, 0.68333, 0.02778, 0.08334, 0.76278], + 80: [0, 0.68333, 0.13889, 0.08334, 0.64201], + 81: [0.19444, 0.68333, 0, 0.08334, 0.79056], + 82: [0, 0.68333, 773e-5, 0.08334, 0.75929], + 83: [0, 0.68333, 0.05764, 0.08334, 0.6132], + 84: [0, 0.68333, 0.13889, 0.08334, 0.58438], + 85: [0, 0.68333, 0.10903, 0.02778, 0.68278], + 86: [0, 0.68333, 0.22222, 0, 0.58333], + 87: [0, 0.68333, 0.13889, 0, 0.94445], + 88: [0, 0.68333, 0.07847, 0.08334, 0.82847], + 89: [0, 0.68333, 0.22222, 0, 0.58056], + 90: [0, 0.68333, 0.07153, 0.08334, 0.68264], + 97: [0, 0.43056, 0, 0, 0.52859], + 98: [0, 0.69444, 0, 0, 0.42917], + 99: [0, 0.43056, 0, 0.05556, 0.43276], + 100: [0, 0.69444, 0, 0.16667, 0.52049], + 101: [0, 0.43056, 0, 0.05556, 0.46563], + 102: [0.19444, 0.69444, 0.10764, 0.16667, 0.48959], + 103: [0.19444, 0.43056, 0.03588, 0.02778, 0.47697], + 104: [0, 0.69444, 0, 0, 0.57616], + 105: [0, 0.65952, 0, 0, 0.34451], + 106: [0.19444, 0.65952, 0.05724, 0, 0.41181], + 107: [0, 0.69444, 0.03148, 0, 0.5206], + 108: [0, 0.69444, 0.01968, 0.08334, 0.29838], + 109: [0, 0.43056, 0, 0, 0.87801], + 110: [0, 0.43056, 0, 0, 0.60023], + 111: [0, 0.43056, 0, 0.05556, 0.48472], + 112: [0.19444, 0.43056, 0, 0.08334, 0.50313], + 113: [0.19444, 0.43056, 0.03588, 0.08334, 0.44641], + 114: [0, 0.43056, 0.02778, 0.05556, 0.45116], + 115: [0, 0.43056, 0, 0.05556, 0.46875], + 116: [0, 0.61508, 0, 0.08334, 0.36111], + 117: [0, 0.43056, 0, 0.02778, 0.57246], + 118: [0, 0.43056, 0.03588, 0.02778, 0.48472], + 119: [0, 0.43056, 0.02691, 0.08334, 0.71592], + 120: [0, 0.43056, 0, 0.02778, 0.57153], + 121: [0.19444, 0.43056, 0.03588, 0.05556, 0.49028], + 122: [0, 0.43056, 0.04398, 0.05556, 0.46505], + 160: [0, 0, 0, 0, 0.25], + 915: [0, 0.68333, 0.13889, 0.08334, 0.61528], + 916: [0, 0.68333, 0, 0.16667, 0.83334], + 920: [0, 0.68333, 0.02778, 0.08334, 0.76278], + 923: [0, 0.68333, 0, 0.16667, 0.69445], + 926: [0, 0.68333, 0.07569, 0.08334, 0.74236], + 928: [0, 0.68333, 0.08125, 0.05556, 0.83125], + 931: [0, 0.68333, 0.05764, 0.08334, 0.77986], + 933: [0, 0.68333, 0.13889, 0.05556, 0.58333], + 934: [0, 0.68333, 0, 0.08334, 0.66667], + 936: [0, 0.68333, 0.11, 0.05556, 0.61222], + 937: [0, 0.68333, 0.05017, 0.08334, 0.7724], + 945: [0, 0.43056, 37e-4, 0.02778, 0.6397], + 946: [0.19444, 0.69444, 0.05278, 0.08334, 0.56563], + 947: [0.19444, 0.43056, 0.05556, 0, 0.51773], + 948: [0, 0.69444, 0.03785, 0.05556, 0.44444], + 949: [0, 0.43056, 0, 0.08334, 0.46632], + 950: [0.19444, 0.69444, 0.07378, 0.08334, 0.4375], + 951: [0.19444, 0.43056, 0.03588, 0.05556, 0.49653], + 952: [0, 0.69444, 0.02778, 0.08334, 0.46944], + 953: [0, 0.43056, 0, 0.05556, 0.35394], + 954: [0, 0.43056, 0, 0, 0.57616], + 955: [0, 0.69444, 0, 0, 0.58334], + 956: [0.19444, 0.43056, 0, 0.02778, 0.60255], + 957: [0, 0.43056, 0.06366, 0.02778, 0.49398], + 958: [0.19444, 0.69444, 0.04601, 0.11111, 0.4375], + 959: [0, 0.43056, 0, 0.05556, 0.48472], + 960: [0, 0.43056, 0.03588, 0, 0.57003], + 961: [0.19444, 0.43056, 0, 0.08334, 0.51702], + 962: [0.09722, 0.43056, 0.07986, 0.08334, 0.36285], + 963: [0, 0.43056, 0.03588, 0, 0.57141], + 964: [0, 0.43056, 0.1132, 0.02778, 0.43715], + 965: [0, 0.43056, 0.03588, 0.02778, 0.54028], + 966: [0.19444, 0.43056, 0, 0.08334, 0.65417], + 967: [0.19444, 0.43056, 0, 0.05556, 0.62569], + 968: [0.19444, 0.69444, 0.03588, 0.11111, 0.65139], + 969: [0, 0.43056, 0.03588, 0, 0.62245], + 977: [0, 0.69444, 0, 0.08334, 0.59144], + 981: [0.19444, 0.69444, 0, 0.08334, 0.59583], + 982: [0, 0.43056, 0.02778, 0, 0.82813], + 1009: [0.19444, 0.43056, 0, 0.08334, 0.51702], + 1013: [0, 0.43056, 0, 0.05556, 0.4059], + 57649: [0, 0.43056, 0, 0.02778, 0.32246], + 57911: [0.19444, 0.43056, 0, 0.08334, 0.38403] + }, + "SansSerif-Bold": { + 32: [0, 0, 0, 0, 0.25], + 33: [0, 0.69444, 0, 0, 0.36667], + 34: [0, 0.69444, 0, 0, 0.55834], + 35: [0.19444, 0.69444, 0, 0, 0.91667], + 36: [0.05556, 0.75, 0, 0, 0.55], + 37: [0.05556, 0.75, 0, 0, 1.02912], + 38: [0, 0.69444, 0, 0, 0.83056], + 39: [0, 0.69444, 0, 0, 0.30556], + 40: [0.25, 0.75, 0, 0, 0.42778], + 41: [0.25, 0.75, 0, 0, 0.42778], + 42: [0, 0.75, 0, 0, 0.55], + 43: [0.11667, 0.61667, 0, 0, 0.85556], + 44: [0.10556, 0.13056, 0, 0, 0.30556], + 45: [0, 0.45833, 0, 0, 0.36667], + 46: [0, 0.13056, 0, 0, 0.30556], + 47: [0.25, 0.75, 0, 0, 0.55], + 48: [0, 0.69444, 0, 0, 0.55], + 49: [0, 0.69444, 0, 0, 0.55], + 50: [0, 0.69444, 0, 0, 0.55], + 51: [0, 0.69444, 0, 0, 0.55], + 52: [0, 0.69444, 0, 0, 0.55], + 53: [0, 0.69444, 0, 0, 0.55], + 54: [0, 0.69444, 0, 0, 0.55], + 55: [0, 0.69444, 0, 0, 0.55], + 56: [0, 0.69444, 0, 0, 0.55], + 57: [0, 0.69444, 0, 0, 0.55], + 58: [0, 0.45833, 0, 0, 0.30556], + 59: [0.10556, 0.45833, 0, 0, 0.30556], + 61: [-0.09375, 0.40625, 0, 0, 0.85556], + 63: [0, 0.69444, 0, 0, 0.51945], + 64: [0, 0.69444, 0, 0, 0.73334], + 65: [0, 0.69444, 0, 0, 0.73334], + 66: [0, 0.69444, 0, 0, 0.73334], + 67: [0, 0.69444, 0, 0, 0.70278], + 68: [0, 0.69444, 0, 0, 0.79445], + 69: [0, 0.69444, 0, 0, 0.64167], + 70: [0, 0.69444, 0, 0, 0.61111], + 71: [0, 0.69444, 0, 0, 0.73334], + 72: [0, 0.69444, 0, 0, 0.79445], + 73: [0, 0.69444, 0, 0, 0.33056], + 74: [0, 0.69444, 0, 0, 0.51945], + 75: [0, 0.69444, 0, 0, 0.76389], + 76: [0, 0.69444, 0, 0, 0.58056], + 77: [0, 0.69444, 0, 0, 0.97778], + 78: [0, 0.69444, 0, 0, 0.79445], + 79: [0, 0.69444, 0, 0, 0.79445], + 80: [0, 0.69444, 0, 0, 0.70278], + 81: [0.10556, 0.69444, 0, 0, 0.79445], + 82: [0, 0.69444, 0, 0, 0.70278], + 83: [0, 0.69444, 0, 0, 0.61111], + 84: [0, 0.69444, 0, 0, 0.73334], + 85: [0, 0.69444, 0, 0, 0.76389], + 86: [0, 0.69444, 0.01528, 0, 0.73334], + 87: [0, 0.69444, 0.01528, 0, 1.03889], + 88: [0, 0.69444, 0, 0, 0.73334], + 89: [0, 0.69444, 0.0275, 0, 0.73334], + 90: [0, 0.69444, 0, 0, 0.67223], + 91: [0.25, 0.75, 0, 0, 0.34306], + 93: [0.25, 0.75, 0, 0, 0.34306], + 94: [0, 0.69444, 0, 0, 0.55], + 95: [0.35, 0.10833, 0.03056, 0, 0.55], + 97: [0, 0.45833, 0, 0, 0.525], + 98: [0, 0.69444, 0, 0, 0.56111], + 99: [0, 0.45833, 0, 0, 0.48889], + 100: [0, 0.69444, 0, 0, 0.56111], + 101: [0, 0.45833, 0, 0, 0.51111], + 102: [0, 0.69444, 0.07639, 0, 0.33611], + 103: [0.19444, 0.45833, 0.01528, 0, 0.55], + 104: [0, 0.69444, 0, 0, 0.56111], + 105: [0, 0.69444, 0, 0, 0.25556], + 106: [0.19444, 0.69444, 0, 0, 0.28611], + 107: [0, 0.69444, 0, 0, 0.53056], + 108: [0, 0.69444, 0, 0, 0.25556], + 109: [0, 0.45833, 0, 0, 0.86667], + 110: [0, 0.45833, 0, 0, 0.56111], + 111: [0, 0.45833, 0, 0, 0.55], + 112: [0.19444, 0.45833, 0, 0, 0.56111], + 113: [0.19444, 0.45833, 0, 0, 0.56111], + 114: [0, 0.45833, 0.01528, 0, 0.37222], + 115: [0, 0.45833, 0, 0, 0.42167], + 116: [0, 0.58929, 0, 0, 0.40417], + 117: [0, 0.45833, 0, 0, 0.56111], + 118: [0, 0.45833, 0.01528, 0, 0.5], + 119: [0, 0.45833, 0.01528, 0, 0.74445], + 120: [0, 0.45833, 0, 0, 0.5], + 121: [0.19444, 0.45833, 0.01528, 0, 0.5], + 122: [0, 0.45833, 0, 0, 0.47639], + 126: [0.35, 0.34444, 0, 0, 0.55], + 160: [0, 0, 0, 0, 0.25], + 168: [0, 0.69444, 0, 0, 0.55], + 176: [0, 0.69444, 0, 0, 0.73334], + 180: [0, 0.69444, 0, 0, 0.55], + 184: [0.17014, 0, 0, 0, 0.48889], + 305: [0, 0.45833, 0, 0, 0.25556], + 567: [0.19444, 0.45833, 0, 0, 0.28611], + 710: [0, 0.69444, 0, 0, 0.55], + 711: [0, 0.63542, 0, 0, 0.55], + 713: [0, 0.63778, 0, 0, 0.55], + 728: [0, 0.69444, 0, 0, 0.55], + 729: [0, 0.69444, 0, 0, 0.30556], + 730: [0, 0.69444, 0, 0, 0.73334], + 732: [0, 0.69444, 0, 0, 0.55], + 733: [0, 0.69444, 0, 0, 0.55], + 915: [0, 0.69444, 0, 0, 0.58056], + 916: [0, 0.69444, 0, 0, 0.91667], + 920: [0, 0.69444, 0, 0, 0.85556], + 923: [0, 0.69444, 0, 0, 0.67223], + 926: [0, 0.69444, 0, 0, 0.73334], + 928: [0, 0.69444, 0, 0, 0.79445], + 931: [0, 0.69444, 0, 0, 0.79445], + 933: [0, 0.69444, 0, 0, 0.85556], + 934: [0, 0.69444, 0, 0, 0.79445], + 936: [0, 0.69444, 0, 0, 0.85556], + 937: [0, 0.69444, 0, 0, 0.79445], + 8211: [0, 0.45833, 0.03056, 0, 0.55], + 8212: [0, 0.45833, 0.03056, 0, 1.10001], + 8216: [0, 0.69444, 0, 0, 0.30556], + 8217: [0, 0.69444, 0, 0, 0.30556], + 8220: [0, 0.69444, 0, 0, 0.55834], + 8221: [0, 0.69444, 0, 0, 0.55834] + }, + "SansSerif-Italic": { + 32: [0, 0, 0, 0, 0.25], + 33: [0, 0.69444, 0.05733, 0, 0.31945], + 34: [0, 0.69444, 316e-5, 0, 0.5], + 35: [0.19444, 0.69444, 0.05087, 0, 0.83334], + 36: [0.05556, 0.75, 0.11156, 0, 0.5], + 37: [0.05556, 0.75, 0.03126, 0, 0.83334], + 38: [0, 0.69444, 0.03058, 0, 0.75834], + 39: [0, 0.69444, 0.07816, 0, 0.27778], + 40: [0.25, 0.75, 0.13164, 0, 0.38889], + 41: [0.25, 0.75, 0.02536, 0, 0.38889], + 42: [0, 0.75, 0.11775, 0, 0.5], + 43: [0.08333, 0.58333, 0.02536, 0, 0.77778], + 44: [0.125, 0.08333, 0, 0, 0.27778], + 45: [0, 0.44444, 0.01946, 0, 0.33333], + 46: [0, 0.08333, 0, 0, 0.27778], + 47: [0.25, 0.75, 0.13164, 0, 0.5], + 48: [0, 0.65556, 0.11156, 0, 0.5], + 49: [0, 0.65556, 0.11156, 0, 0.5], + 50: [0, 0.65556, 0.11156, 0, 0.5], + 51: [0, 0.65556, 0.11156, 0, 0.5], + 52: [0, 0.65556, 0.11156, 0, 0.5], + 53: [0, 0.65556, 0.11156, 0, 0.5], + 54: [0, 0.65556, 0.11156, 0, 0.5], + 55: [0, 0.65556, 0.11156, 0, 0.5], + 56: [0, 0.65556, 0.11156, 0, 0.5], + 57: [0, 0.65556, 0.11156, 0, 0.5], + 58: [0, 0.44444, 0.02502, 0, 0.27778], + 59: [0.125, 0.44444, 0.02502, 0, 0.27778], + 61: [-0.13, 0.37, 0.05087, 0, 0.77778], + 63: [0, 0.69444, 0.11809, 0, 0.47222], + 64: [0, 0.69444, 0.07555, 0, 0.66667], + 65: [0, 0.69444, 0, 0, 0.66667], + 66: [0, 0.69444, 0.08293, 0, 0.66667], + 67: [0, 0.69444, 0.11983, 0, 0.63889], + 68: [0, 0.69444, 0.07555, 0, 0.72223], + 69: [0, 0.69444, 0.11983, 0, 0.59722], + 70: [0, 0.69444, 0.13372, 0, 0.56945], + 71: [0, 0.69444, 0.11983, 0, 0.66667], + 72: [0, 0.69444, 0.08094, 0, 0.70834], + 73: [0, 0.69444, 0.13372, 0, 0.27778], + 74: [0, 0.69444, 0.08094, 0, 0.47222], + 75: [0, 0.69444, 0.11983, 0, 0.69445], + 76: [0, 0.69444, 0, 0, 0.54167], + 77: [0, 0.69444, 0.08094, 0, 0.875], + 78: [0, 0.69444, 0.08094, 0, 0.70834], + 79: [0, 0.69444, 0.07555, 0, 0.73611], + 80: [0, 0.69444, 0.08293, 0, 0.63889], + 81: [0.125, 0.69444, 0.07555, 0, 0.73611], + 82: [0, 0.69444, 0.08293, 0, 0.64584], + 83: [0, 0.69444, 0.09205, 0, 0.55556], + 84: [0, 0.69444, 0.13372, 0, 0.68056], + 85: [0, 0.69444, 0.08094, 0, 0.6875], + 86: [0, 0.69444, 0.1615, 0, 0.66667], + 87: [0, 0.69444, 0.1615, 0, 0.94445], + 88: [0, 0.69444, 0.13372, 0, 0.66667], + 89: [0, 0.69444, 0.17261, 0, 0.66667], + 90: [0, 0.69444, 0.11983, 0, 0.61111], + 91: [0.25, 0.75, 0.15942, 0, 0.28889], + 93: [0.25, 0.75, 0.08719, 0, 0.28889], + 94: [0, 0.69444, 0.0799, 0, 0.5], + 95: [0.35, 0.09444, 0.08616, 0, 0.5], + 97: [0, 0.44444, 981e-5, 0, 0.48056], + 98: [0, 0.69444, 0.03057, 0, 0.51667], + 99: [0, 0.44444, 0.08336, 0, 0.44445], + 100: [0, 0.69444, 0.09483, 0, 0.51667], + 101: [0, 0.44444, 0.06778, 0, 0.44445], + 102: [0, 0.69444, 0.21705, 0, 0.30556], + 103: [0.19444, 0.44444, 0.10836, 0, 0.5], + 104: [0, 0.69444, 0.01778, 0, 0.51667], + 105: [0, 0.67937, 0.09718, 0, 0.23889], + 106: [0.19444, 0.67937, 0.09162, 0, 0.26667], + 107: [0, 0.69444, 0.08336, 0, 0.48889], + 108: [0, 0.69444, 0.09483, 0, 0.23889], + 109: [0, 0.44444, 0.01778, 0, 0.79445], + 110: [0, 0.44444, 0.01778, 0, 0.51667], + 111: [0, 0.44444, 0.06613, 0, 0.5], + 112: [0.19444, 0.44444, 0.0389, 0, 0.51667], + 113: [0.19444, 0.44444, 0.04169, 0, 0.51667], + 114: [0, 0.44444, 0.10836, 0, 0.34167], + 115: [0, 0.44444, 0.0778, 0, 0.38333], + 116: [0, 0.57143, 0.07225, 0, 0.36111], + 117: [0, 0.44444, 0.04169, 0, 0.51667], + 118: [0, 0.44444, 0.10836, 0, 0.46111], + 119: [0, 0.44444, 0.10836, 0, 0.68334], + 120: [0, 0.44444, 0.09169, 0, 0.46111], + 121: [0.19444, 0.44444, 0.10836, 0, 0.46111], + 122: [0, 0.44444, 0.08752, 0, 0.43472], + 126: [0.35, 0.32659, 0.08826, 0, 0.5], + 160: [0, 0, 0, 0, 0.25], + 168: [0, 0.67937, 0.06385, 0, 0.5], + 176: [0, 0.69444, 0, 0, 0.73752], + 184: [0.17014, 0, 0, 0, 0.44445], + 305: [0, 0.44444, 0.04169, 0, 0.23889], + 567: [0.19444, 0.44444, 0.04169, 0, 0.26667], + 710: [0, 0.69444, 0.0799, 0, 0.5], + 711: [0, 0.63194, 0.08432, 0, 0.5], + 713: [0, 0.60889, 0.08776, 0, 0.5], + 714: [0, 0.69444, 0.09205, 0, 0.5], + 715: [0, 0.69444, 0, 0, 0.5], + 728: [0, 0.69444, 0.09483, 0, 0.5], + 729: [0, 0.67937, 0.07774, 0, 0.27778], + 730: [0, 0.69444, 0, 0, 0.73752], + 732: [0, 0.67659, 0.08826, 0, 0.5], + 733: [0, 0.69444, 0.09205, 0, 0.5], + 915: [0, 0.69444, 0.13372, 0, 0.54167], + 916: [0, 0.69444, 0, 0, 0.83334], + 920: [0, 0.69444, 0.07555, 0, 0.77778], + 923: [0, 0.69444, 0, 0, 0.61111], + 926: [0, 0.69444, 0.12816, 0, 0.66667], + 928: [0, 0.69444, 0.08094, 0, 0.70834], + 931: [0, 0.69444, 0.11983, 0, 0.72222], + 933: [0, 0.69444, 0.09031, 0, 0.77778], + 934: [0, 0.69444, 0.04603, 0, 0.72222], + 936: [0, 0.69444, 0.09031, 0, 0.77778], + 937: [0, 0.69444, 0.08293, 0, 0.72222], + 8211: [0, 0.44444, 0.08616, 0, 0.5], + 8212: [0, 0.44444, 0.08616, 0, 1], + 8216: [0, 0.69444, 0.07816, 0, 0.27778], + 8217: [0, 0.69444, 0.07816, 0, 0.27778], + 8220: [0, 0.69444, 0.14205, 0, 0.5], + 8221: [0, 0.69444, 316e-5, 0, 0.5] + }, + "SansSerif-Regular": { + 32: [0, 0, 0, 0, 0.25], + 33: [0, 0.69444, 0, 0, 0.31945], + 34: [0, 0.69444, 0, 0, 0.5], + 35: [0.19444, 0.69444, 0, 0, 0.83334], + 36: [0.05556, 0.75, 0, 0, 0.5], + 37: [0.05556, 0.75, 0, 0, 0.83334], + 38: [0, 0.69444, 0, 0, 0.75834], + 39: [0, 0.69444, 0, 0, 0.27778], + 40: [0.25, 0.75, 0, 0, 0.38889], + 41: [0.25, 0.75, 0, 0, 0.38889], + 42: [0, 0.75, 0, 0, 0.5], + 43: [0.08333, 0.58333, 0, 0, 0.77778], + 44: [0.125, 0.08333, 0, 0, 0.27778], + 45: [0, 0.44444, 0, 0, 0.33333], + 46: [0, 0.08333, 0, 0, 0.27778], + 47: [0.25, 0.75, 0, 0, 0.5], + 48: [0, 0.65556, 0, 0, 0.5], + 49: [0, 0.65556, 0, 0, 0.5], + 50: [0, 0.65556, 0, 0, 0.5], + 51: [0, 0.65556, 0, 0, 0.5], + 52: [0, 0.65556, 0, 0, 0.5], + 53: [0, 0.65556, 0, 0, 0.5], + 54: [0, 0.65556, 0, 0, 0.5], + 55: [0, 0.65556, 0, 0, 0.5], + 56: [0, 0.65556, 0, 0, 0.5], + 57: [0, 0.65556, 0, 0, 0.5], + 58: [0, 0.44444, 0, 0, 0.27778], + 59: [0.125, 0.44444, 0, 0, 0.27778], + 61: [-0.13, 0.37, 0, 0, 0.77778], + 63: [0, 0.69444, 0, 0, 0.47222], + 64: [0, 0.69444, 0, 0, 0.66667], + 65: [0, 0.69444, 0, 0, 0.66667], + 66: [0, 0.69444, 0, 0, 0.66667], + 67: [0, 0.69444, 0, 0, 0.63889], + 68: [0, 0.69444, 0, 0, 0.72223], + 69: [0, 0.69444, 0, 0, 0.59722], + 70: [0, 0.69444, 0, 0, 0.56945], + 71: [0, 0.69444, 0, 0, 0.66667], + 72: [0, 0.69444, 0, 0, 0.70834], + 73: [0, 0.69444, 0, 0, 0.27778], + 74: [0, 0.69444, 0, 0, 0.47222], + 75: [0, 0.69444, 0, 0, 0.69445], + 76: [0, 0.69444, 0, 0, 0.54167], + 77: [0, 0.69444, 0, 0, 0.875], + 78: [0, 0.69444, 0, 0, 0.70834], + 79: [0, 0.69444, 0, 0, 0.73611], + 80: [0, 0.69444, 0, 0, 0.63889], + 81: [0.125, 0.69444, 0, 0, 0.73611], + 82: [0, 0.69444, 0, 0, 0.64584], + 83: [0, 0.69444, 0, 0, 0.55556], + 84: [0, 0.69444, 0, 0, 0.68056], + 85: [0, 0.69444, 0, 0, 0.6875], + 86: [0, 0.69444, 0.01389, 0, 0.66667], + 87: [0, 0.69444, 0.01389, 0, 0.94445], + 88: [0, 0.69444, 0, 0, 0.66667], + 89: [0, 0.69444, 0.025, 0, 0.66667], + 90: [0, 0.69444, 0, 0, 0.61111], + 91: [0.25, 0.75, 0, 0, 0.28889], + 93: [0.25, 0.75, 0, 0, 0.28889], + 94: [0, 0.69444, 0, 0, 0.5], + 95: [0.35, 0.09444, 0.02778, 0, 0.5], + 97: [0, 0.44444, 0, 0, 0.48056], + 98: [0, 0.69444, 0, 0, 0.51667], + 99: [0, 0.44444, 0, 0, 0.44445], + 100: [0, 0.69444, 0, 0, 0.51667], + 101: [0, 0.44444, 0, 0, 0.44445], + 102: [0, 0.69444, 0.06944, 0, 0.30556], + 103: [0.19444, 0.44444, 0.01389, 0, 0.5], + 104: [0, 0.69444, 0, 0, 0.51667], + 105: [0, 0.67937, 0, 0, 0.23889], + 106: [0.19444, 0.67937, 0, 0, 0.26667], + 107: [0, 0.69444, 0, 0, 0.48889], + 108: [0, 0.69444, 0, 0, 0.23889], + 109: [0, 0.44444, 0, 0, 0.79445], + 110: [0, 0.44444, 0, 0, 0.51667], + 111: [0, 0.44444, 0, 0, 0.5], + 112: [0.19444, 0.44444, 0, 0, 0.51667], + 113: [0.19444, 0.44444, 0, 0, 0.51667], + 114: [0, 0.44444, 0.01389, 0, 0.34167], + 115: [0, 0.44444, 0, 0, 0.38333], + 116: [0, 0.57143, 0, 0, 0.36111], + 117: [0, 0.44444, 0, 0, 0.51667], + 118: [0, 0.44444, 0.01389, 0, 0.46111], + 119: [0, 0.44444, 0.01389, 0, 0.68334], + 120: [0, 0.44444, 0, 0, 0.46111], + 121: [0.19444, 0.44444, 0.01389, 0, 0.46111], + 122: [0, 0.44444, 0, 0, 0.43472], + 126: [0.35, 0.32659, 0, 0, 0.5], + 160: [0, 0, 0, 0, 0.25], + 168: [0, 0.67937, 0, 0, 0.5], + 176: [0, 0.69444, 0, 0, 0.66667], + 184: [0.17014, 0, 0, 0, 0.44445], + 305: [0, 0.44444, 0, 0, 0.23889], + 567: [0.19444, 0.44444, 0, 0, 0.26667], + 710: [0, 0.69444, 0, 0, 0.5], + 711: [0, 0.63194, 0, 0, 0.5], + 713: [0, 0.60889, 0, 0, 0.5], + 714: [0, 0.69444, 0, 0, 0.5], + 715: [0, 0.69444, 0, 0, 0.5], + 728: [0, 0.69444, 0, 0, 0.5], + 729: [0, 0.67937, 0, 0, 0.27778], + 730: [0, 0.69444, 0, 0, 0.66667], + 732: [0, 0.67659, 0, 0, 0.5], + 733: [0, 0.69444, 0, 0, 0.5], + 915: [0, 0.69444, 0, 0, 0.54167], + 916: [0, 0.69444, 0, 0, 0.83334], + 920: [0, 0.69444, 0, 0, 0.77778], + 923: [0, 0.69444, 0, 0, 0.61111], + 926: [0, 0.69444, 0, 0, 0.66667], + 928: [0, 0.69444, 0, 0, 0.70834], + 931: [0, 0.69444, 0, 0, 0.72222], + 933: [0, 0.69444, 0, 0, 0.77778], + 934: [0, 0.69444, 0, 0, 0.72222], + 936: [0, 0.69444, 0, 0, 0.77778], + 937: [0, 0.69444, 0, 0, 0.72222], + 8211: [0, 0.44444, 0.02778, 0, 0.5], + 8212: [0, 0.44444, 0.02778, 0, 1], + 8216: [0, 0.69444, 0, 0, 0.27778], + 8217: [0, 0.69444, 0, 0, 0.27778], + 8220: [0, 0.69444, 0, 0, 0.5], + 8221: [0, 0.69444, 0, 0, 0.5] + }, + "Script-Regular": { + 32: [0, 0, 0, 0, 0.25], + 65: [0, 0.7, 0.22925, 0, 0.80253], + 66: [0, 0.7, 0.04087, 0, 0.90757], + 67: [0, 0.7, 0.1689, 0, 0.66619], + 68: [0, 0.7, 0.09371, 0, 0.77443], + 69: [0, 0.7, 0.18583, 0, 0.56162], + 70: [0, 0.7, 0.13634, 0, 0.89544], + 71: [0, 0.7, 0.17322, 0, 0.60961], + 72: [0, 0.7, 0.29694, 0, 0.96919], + 73: [0, 0.7, 0.19189, 0, 0.80907], + 74: [0.27778, 0.7, 0.19189, 0, 1.05159], + 75: [0, 0.7, 0.31259, 0, 0.91364], + 76: [0, 0.7, 0.19189, 0, 0.87373], + 77: [0, 0.7, 0.15981, 0, 1.08031], + 78: [0, 0.7, 0.3525, 0, 0.9015], + 79: [0, 0.7, 0.08078, 0, 0.73787], + 80: [0, 0.7, 0.08078, 0, 1.01262], + 81: [0, 0.7, 0.03305, 0, 0.88282], + 82: [0, 0.7, 0.06259, 0, 0.85], + 83: [0, 0.7, 0.19189, 0, 0.86767], + 84: [0, 0.7, 0.29087, 0, 0.74697], + 85: [0, 0.7, 0.25815, 0, 0.79996], + 86: [0, 0.7, 0.27523, 0, 0.62204], + 87: [0, 0.7, 0.27523, 0, 0.80532], + 88: [0, 0.7, 0.26006, 0, 0.94445], + 89: [0, 0.7, 0.2939, 0, 0.70961], + 90: [0, 0.7, 0.24037, 0, 0.8212], + 160: [0, 0, 0, 0, 0.25] + }, + "Size1-Regular": { + 32: [0, 0, 0, 0, 0.25], + 40: [0.35001, 0.85, 0, 0, 0.45834], + 41: [0.35001, 0.85, 0, 0, 0.45834], + 47: [0.35001, 0.85, 0, 0, 0.57778], + 91: [0.35001, 0.85, 0, 0, 0.41667], + 92: [0.35001, 0.85, 0, 0, 0.57778], + 93: [0.35001, 0.85, 0, 0, 0.41667], + 123: [0.35001, 0.85, 0, 0, 0.58334], + 125: [0.35001, 0.85, 0, 0, 0.58334], + 160: [0, 0, 0, 0, 0.25], + 710: [0, 0.72222, 0, 0, 0.55556], + 732: [0, 0.72222, 0, 0, 0.55556], + 770: [0, 0.72222, 0, 0, 0.55556], + 771: [0, 0.72222, 0, 0, 0.55556], + 8214: [-99e-5, 0.601, 0, 0, 0.77778], + 8593: [1e-5, 0.6, 0, 0, 0.66667], + 8595: [1e-5, 0.6, 0, 0, 0.66667], + 8657: [1e-5, 0.6, 0, 0, 0.77778], + 8659: [1e-5, 0.6, 0, 0, 0.77778], + 8719: [0.25001, 0.75, 0, 0, 0.94445], + 8720: [0.25001, 0.75, 0, 0, 0.94445], + 8721: [0.25001, 0.75, 0, 0, 1.05556], + 8730: [0.35001, 0.85, 0, 0, 1], + 8739: [-599e-5, 0.606, 0, 0, 0.33333], + 8741: [-599e-5, 0.606, 0, 0, 0.55556], + 8747: [0.30612, 0.805, 0.19445, 0, 0.47222], + 8748: [0.306, 0.805, 0.19445, 0, 0.47222], + 8749: [0.306, 0.805, 0.19445, 0, 0.47222], + 8750: [0.30612, 0.805, 0.19445, 0, 0.47222], + 8896: [0.25001, 0.75, 0, 0, 0.83334], + 8897: [0.25001, 0.75, 0, 0, 0.83334], + 8898: [0.25001, 0.75, 0, 0, 0.83334], + 8899: [0.25001, 0.75, 0, 0, 0.83334], + 8968: [0.35001, 0.85, 0, 0, 0.47222], + 8969: [0.35001, 0.85, 0, 0, 0.47222], + 8970: [0.35001, 0.85, 0, 0, 0.47222], + 8971: [0.35001, 0.85, 0, 0, 0.47222], + 9168: [-99e-5, 0.601, 0, 0, 0.66667], + 10216: [0.35001, 0.85, 0, 0, 0.47222], + 10217: [0.35001, 0.85, 0, 0, 0.47222], + 10752: [0.25001, 0.75, 0, 0, 1.11111], + 10753: [0.25001, 0.75, 0, 0, 1.11111], + 10754: [0.25001, 0.75, 0, 0, 1.11111], + 10756: [0.25001, 0.75, 0, 0, 0.83334], + 10758: [0.25001, 0.75, 0, 0, 0.83334] + }, + "Size2-Regular": { + 32: [0, 0, 0, 0, 0.25], + 40: [0.65002, 1.15, 0, 0, 0.59722], + 41: [0.65002, 1.15, 0, 0, 0.59722], + 47: [0.65002, 1.15, 0, 0, 0.81111], + 91: [0.65002, 1.15, 0, 0, 0.47222], + 92: [0.65002, 1.15, 0, 0, 0.81111], + 93: [0.65002, 1.15, 0, 0, 0.47222], + 123: [0.65002, 1.15, 0, 0, 0.66667], + 125: [0.65002, 1.15, 0, 0, 0.66667], + 160: [0, 0, 0, 0, 0.25], + 710: [0, 0.75, 0, 0, 1], + 732: [0, 0.75, 0, 0, 1], + 770: [0, 0.75, 0, 0, 1], + 771: [0, 0.75, 0, 0, 1], + 8719: [0.55001, 1.05, 0, 0, 1.27778], + 8720: [0.55001, 1.05, 0, 0, 1.27778], + 8721: [0.55001, 1.05, 0, 0, 1.44445], + 8730: [0.65002, 1.15, 0, 0, 1], + 8747: [0.86225, 1.36, 0.44445, 0, 0.55556], + 8748: [0.862, 1.36, 0.44445, 0, 0.55556], + 8749: [0.862, 1.36, 0.44445, 0, 0.55556], + 8750: [0.86225, 1.36, 0.44445, 0, 0.55556], + 8896: [0.55001, 1.05, 0, 0, 1.11111], + 8897: [0.55001, 1.05, 0, 0, 1.11111], + 8898: [0.55001, 1.05, 0, 0, 1.11111], + 8899: [0.55001, 1.05, 0, 0, 1.11111], + 8968: [0.65002, 1.15, 0, 0, 0.52778], + 8969: [0.65002, 1.15, 0, 0, 0.52778], + 8970: [0.65002, 1.15, 0, 0, 0.52778], + 8971: [0.65002, 1.15, 0, 0, 0.52778], + 10216: [0.65002, 1.15, 0, 0, 0.61111], + 10217: [0.65002, 1.15, 0, 0, 0.61111], + 10752: [0.55001, 1.05, 0, 0, 1.51112], + 10753: [0.55001, 1.05, 0, 0, 1.51112], + 10754: [0.55001, 1.05, 0, 0, 1.51112], + 10756: [0.55001, 1.05, 0, 0, 1.11111], + 10758: [0.55001, 1.05, 0, 0, 1.11111] + }, + "Size3-Regular": { + 32: [0, 0, 0, 0, 0.25], + 40: [0.95003, 1.45, 0, 0, 0.73611], + 41: [0.95003, 1.45, 0, 0, 0.73611], + 47: [0.95003, 1.45, 0, 0, 1.04445], + 91: [0.95003, 1.45, 0, 0, 0.52778], + 92: [0.95003, 1.45, 0, 0, 1.04445], + 93: [0.95003, 1.45, 0, 0, 0.52778], + 123: [0.95003, 1.45, 0, 0, 0.75], + 125: [0.95003, 1.45, 0, 0, 0.75], + 160: [0, 0, 0, 0, 0.25], + 710: [0, 0.75, 0, 0, 1.44445], + 732: [0, 0.75, 0, 0, 1.44445], + 770: [0, 0.75, 0, 0, 1.44445], + 771: [0, 0.75, 0, 0, 1.44445], + 8730: [0.95003, 1.45, 0, 0, 1], + 8968: [0.95003, 1.45, 0, 0, 0.58334], + 8969: [0.95003, 1.45, 0, 0, 0.58334], + 8970: [0.95003, 1.45, 0, 0, 0.58334], + 8971: [0.95003, 1.45, 0, 0, 0.58334], + 10216: [0.95003, 1.45, 0, 0, 0.75], + 10217: [0.95003, 1.45, 0, 0, 0.75] + }, + "Size4-Regular": { + 32: [0, 0, 0, 0, 0.25], + 40: [1.25003, 1.75, 0, 0, 0.79167], + 41: [1.25003, 1.75, 0, 0, 0.79167], + 47: [1.25003, 1.75, 0, 0, 1.27778], + 91: [1.25003, 1.75, 0, 0, 0.58334], + 92: [1.25003, 1.75, 0, 0, 1.27778], + 93: [1.25003, 1.75, 0, 0, 0.58334], + 123: [1.25003, 1.75, 0, 0, 0.80556], + 125: [1.25003, 1.75, 0, 0, 0.80556], + 160: [0, 0, 0, 0, 0.25], + 710: [0, 0.825, 0, 0, 1.8889], + 732: [0, 0.825, 0, 0, 1.8889], + 770: [0, 0.825, 0, 0, 1.8889], + 771: [0, 0.825, 0, 0, 1.8889], + 8730: [1.25003, 1.75, 0, 0, 1], + 8968: [1.25003, 1.75, 0, 0, 0.63889], + 8969: [1.25003, 1.75, 0, 0, 0.63889], + 8970: [1.25003, 1.75, 0, 0, 0.63889], + 8971: [1.25003, 1.75, 0, 0, 0.63889], + 9115: [0.64502, 1.155, 0, 0, 0.875], + 9116: [1e-5, 0.6, 0, 0, 0.875], + 9117: [0.64502, 1.155, 0, 0, 0.875], + 9118: [0.64502, 1.155, 0, 0, 0.875], + 9119: [1e-5, 0.6, 0, 0, 0.875], + 9120: [0.64502, 1.155, 0, 0, 0.875], + 9121: [0.64502, 1.155, 0, 0, 0.66667], + 9122: [-99e-5, 0.601, 0, 0, 0.66667], + 9123: [0.64502, 1.155, 0, 0, 0.66667], + 9124: [0.64502, 1.155, 0, 0, 0.66667], + 9125: [-99e-5, 0.601, 0, 0, 0.66667], + 9126: [0.64502, 1.155, 0, 0, 0.66667], + 9127: [1e-5, 0.9, 0, 0, 0.88889], + 9128: [0.65002, 1.15, 0, 0, 0.88889], + 9129: [0.90001, 0, 0, 0, 0.88889], + 9130: [0, 0.3, 0, 0, 0.88889], + 9131: [1e-5, 0.9, 0, 0, 0.88889], + 9132: [0.65002, 1.15, 0, 0, 0.88889], + 9133: [0.90001, 0, 0, 0, 0.88889], + 9143: [0.88502, 0.915, 0, 0, 1.05556], + 10216: [1.25003, 1.75, 0, 0, 0.80556], + 10217: [1.25003, 1.75, 0, 0, 0.80556], + 57344: [-499e-5, 0.605, 0, 0, 1.05556], + 57345: [-499e-5, 0.605, 0, 0, 1.05556], + 57680: [0, 0.12, 0, 0, 0.45], + 57681: [0, 0.12, 0, 0, 0.45], + 57682: [0, 0.12, 0, 0, 0.45], + 57683: [0, 0.12, 0, 0, 0.45] + }, + "Typewriter-Regular": { + 32: [0, 0, 0, 0, 0.525], + 33: [0, 0.61111, 0, 0, 0.525], + 34: [0, 0.61111, 0, 0, 0.525], + 35: [0, 0.61111, 0, 0, 0.525], + 36: [0.08333, 0.69444, 0, 0, 0.525], + 37: [0.08333, 0.69444, 0, 0, 0.525], + 38: [0, 0.61111, 0, 0, 0.525], + 39: [0, 0.61111, 0, 0, 0.525], + 40: [0.08333, 0.69444, 0, 0, 0.525], + 41: [0.08333, 0.69444, 0, 0, 0.525], + 42: [0, 0.52083, 0, 0, 0.525], + 43: [-0.08056, 0.53055, 0, 0, 0.525], + 44: [0.13889, 0.125, 0, 0, 0.525], + 45: [-0.08056, 0.53055, 0, 0, 0.525], + 46: [0, 0.125, 0, 0, 0.525], + 47: [0.08333, 0.69444, 0, 0, 0.525], + 48: [0, 0.61111, 0, 0, 0.525], + 49: [0, 0.61111, 0, 0, 0.525], + 50: [0, 0.61111, 0, 0, 0.525], + 51: [0, 0.61111, 0, 0, 0.525], + 52: [0, 0.61111, 0, 0, 0.525], + 53: [0, 0.61111, 0, 0, 0.525], + 54: [0, 0.61111, 0, 0, 0.525], + 55: [0, 0.61111, 0, 0, 0.525], + 56: [0, 0.61111, 0, 0, 0.525], + 57: [0, 0.61111, 0, 0, 0.525], + 58: [0, 0.43056, 0, 0, 0.525], + 59: [0.13889, 0.43056, 0, 0, 0.525], + 60: [-0.05556, 0.55556, 0, 0, 0.525], + 61: [-0.19549, 0.41562, 0, 0, 0.525], + 62: [-0.05556, 0.55556, 0, 0, 0.525], + 63: [0, 0.61111, 0, 0, 0.525], + 64: [0, 0.61111, 0, 0, 0.525], + 65: [0, 0.61111, 0, 0, 0.525], + 66: [0, 0.61111, 0, 0, 0.525], + 67: [0, 0.61111, 0, 0, 0.525], + 68: [0, 0.61111, 0, 0, 0.525], + 69: [0, 0.61111, 0, 0, 0.525], + 70: [0, 0.61111, 0, 0, 0.525], + 71: [0, 0.61111, 0, 0, 0.525], + 72: [0, 0.61111, 0, 0, 0.525], + 73: [0, 0.61111, 0, 0, 0.525], + 74: [0, 0.61111, 0, 0, 0.525], + 75: [0, 0.61111, 0, 0, 0.525], + 76: [0, 0.61111, 0, 0, 0.525], + 77: [0, 0.61111, 0, 0, 0.525], + 78: [0, 0.61111, 0, 0, 0.525], + 79: [0, 0.61111, 0, 0, 0.525], + 80: [0, 0.61111, 0, 0, 0.525], + 81: [0.13889, 0.61111, 0, 0, 0.525], + 82: [0, 0.61111, 0, 0, 0.525], + 83: [0, 0.61111, 0, 0, 0.525], + 84: [0, 0.61111, 0, 0, 0.525], + 85: [0, 0.61111, 0, 0, 0.525], + 86: [0, 0.61111, 0, 0, 0.525], + 87: [0, 0.61111, 0, 0, 0.525], + 88: [0, 0.61111, 0, 0, 0.525], + 89: [0, 0.61111, 0, 0, 0.525], + 90: [0, 0.61111, 0, 0, 0.525], + 91: [0.08333, 0.69444, 0, 0, 0.525], + 92: [0.08333, 0.69444, 0, 0, 0.525], + 93: [0.08333, 0.69444, 0, 0, 0.525], + 94: [0, 0.61111, 0, 0, 0.525], + 95: [0.09514, 0, 0, 0, 0.525], + 96: [0, 0.61111, 0, 0, 0.525], + 97: [0, 0.43056, 0, 0, 0.525], + 98: [0, 0.61111, 0, 0, 0.525], + 99: [0, 0.43056, 0, 0, 0.525], + 100: [0, 0.61111, 0, 0, 0.525], + 101: [0, 0.43056, 0, 0, 0.525], + 102: [0, 0.61111, 0, 0, 0.525], + 103: [0.22222, 0.43056, 0, 0, 0.525], + 104: [0, 0.61111, 0, 0, 0.525], + 105: [0, 0.61111, 0, 0, 0.525], + 106: [0.22222, 0.61111, 0, 0, 0.525], + 107: [0, 0.61111, 0, 0, 0.525], + 108: [0, 0.61111, 0, 0, 0.525], + 109: [0, 0.43056, 0, 0, 0.525], + 110: [0, 0.43056, 0, 0, 0.525], + 111: [0, 0.43056, 0, 0, 0.525], + 112: [0.22222, 0.43056, 0, 0, 0.525], + 113: [0.22222, 0.43056, 0, 0, 0.525], + 114: [0, 0.43056, 0, 0, 0.525], + 115: [0, 0.43056, 0, 0, 0.525], + 116: [0, 0.55358, 0, 0, 0.525], + 117: [0, 0.43056, 0, 0, 0.525], + 118: [0, 0.43056, 0, 0, 0.525], + 119: [0, 0.43056, 0, 0, 0.525], + 120: [0, 0.43056, 0, 0, 0.525], + 121: [0.22222, 0.43056, 0, 0, 0.525], + 122: [0, 0.43056, 0, 0, 0.525], + 123: [0.08333, 0.69444, 0, 0, 0.525], + 124: [0.08333, 0.69444, 0, 0, 0.525], + 125: [0.08333, 0.69444, 0, 0, 0.525], + 126: [0, 0.61111, 0, 0, 0.525], + 127: [0, 0.61111, 0, 0, 0.525], + 160: [0, 0, 0, 0, 0.525], + 176: [0, 0.61111, 0, 0, 0.525], + 184: [0.19445, 0, 0, 0, 0.525], + 305: [0, 0.43056, 0, 0, 0.525], + 567: [0.22222, 0.43056, 0, 0, 0.525], + 711: [0, 0.56597, 0, 0, 0.525], + 713: [0, 0.56555, 0, 0, 0.525], + 714: [0, 0.61111, 0, 0, 0.525], + 715: [0, 0.61111, 0, 0, 0.525], + 728: [0, 0.61111, 0, 0, 0.525], + 730: [0, 0.61111, 0, 0, 0.525], + 770: [0, 0.61111, 0, 0, 0.525], + 771: [0, 0.61111, 0, 0, 0.525], + 776: [0, 0.61111, 0, 0, 0.525], + 915: [0, 0.61111, 0, 0, 0.525], + 916: [0, 0.61111, 0, 0, 0.525], + 920: [0, 0.61111, 0, 0, 0.525], + 923: [0, 0.61111, 0, 0, 0.525], + 926: [0, 0.61111, 0, 0, 0.525], + 928: [0, 0.61111, 0, 0, 0.525], + 931: [0, 0.61111, 0, 0, 0.525], + 933: [0, 0.61111, 0, 0, 0.525], + 934: [0, 0.61111, 0, 0, 0.525], + 936: [0, 0.61111, 0, 0, 0.525], + 937: [0, 0.61111, 0, 0, 0.525], + 8216: [0, 0.61111, 0, 0, 0.525], + 8217: [0, 0.61111, 0, 0, 0.525], + 8242: [0, 0.61111, 0, 0, 0.525], + 9251: [0.11111, 0.21944, 0, 0, 0.525] + } +}, _u = { + slant: [0.25, 0.25, 0.25], + // sigma1 + space: [0, 0, 0], + // sigma2 + stretch: [0, 0, 0], + // sigma3 + shrink: [0, 0, 0], + // sigma4 + xHeight: [0.431, 0.431, 0.431], + // sigma5 + quad: [1, 1.171, 1.472], + // sigma6 + extraSpace: [0, 0, 0], + // sigma7 + num1: [0.677, 0.732, 0.925], + // sigma8 + num2: [0.394, 0.384, 0.387], + // sigma9 + num3: [0.444, 0.471, 0.504], + // sigma10 + denom1: [0.686, 0.752, 1.025], + // sigma11 + denom2: [0.345, 0.344, 0.532], + // sigma12 + sup1: [0.413, 0.503, 0.504], + // sigma13 + sup2: [0.363, 0.431, 0.404], + // sigma14 + sup3: [0.289, 0.286, 0.294], + // sigma15 + sub1: [0.15, 0.143, 0.2], + // sigma16 + sub2: [0.247, 0.286, 0.4], + // sigma17 + supDrop: [0.386, 0.353, 0.494], + // sigma18 + subDrop: [0.05, 0.071, 0.1], + // sigma19 + delim1: [2.39, 1.7, 1.98], + // sigma20 + delim2: [1.01, 1.157, 1.42], + // sigma21 + axisHeight: [0.25, 0.25, 0.25], + // sigma22 + // These font metrics are extracted from TeX by using tftopl on cmex10.tfm; + // they correspond to the font parameters of the extension fonts (family 3). + // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to + // match cmex7, we'd use cmex7.tfm values for script and scriptscript + // values. + defaultRuleThickness: [0.04, 0.049, 0.049], + // xi8; cmex7: 0.049 + bigOpSpacing1: [0.111, 0.111, 0.111], + // xi9 + bigOpSpacing2: [0.166, 0.166, 0.166], + // xi10 + bigOpSpacing3: [0.2, 0.2, 0.2], + // xi11 + bigOpSpacing4: [0.6, 0.611, 0.611], + // xi12; cmex7: 0.611 + bigOpSpacing5: [0.1, 0.143, 0.143], + // xi13; cmex7: 0.143 + // The \sqrt rule width is taken from the height of the surd character. + // Since we use the same font at all sizes, this thickness doesn't scale. + sqrtRuleThickness: [0.04, 0.04, 0.04], + // This value determines how large a pt is, for metrics which are defined + // in terms of pts. + // This value is also used in katex.scss; if you change it make sure the + // values match. + ptPerEm: [10, 10, 10], + // The space between adjacent `|` columns in an array definition. From + // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm. + doubleRuleSep: [0.2, 0.2, 0.2], + // The width of separator lines in {array} environments. From + // `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm. + arrayRuleWidth: [0.04, 0.04, 0.04], + // Two values from LaTeX source2e: + fboxsep: [0.3, 0.3, 0.3], + // 3 pt / ptPerEm + fboxrule: [0.04, 0.04, 0.04] + // 0.4 pt / ptPerEm +}, P3 = { + // Latin-1 + Å: "A", + Ð: "D", + Þ: "o", + å: "a", + ð: "d", + þ: "o", + // Cyrillic + А: "A", + Б: "B", + В: "B", + Г: "F", + Д: "A", + Е: "E", + Ж: "K", + З: "3", + И: "N", + Й: "N", + К: "K", + Л: "N", + М: "M", + Н: "H", + О: "O", + П: "N", + Р: "P", + С: "C", + Т: "T", + У: "y", + Ф: "O", + Х: "X", + Ц: "U", + Ч: "h", + Ш: "W", + Щ: "W", + Ъ: "B", + Ы: "X", + Ь: "B", + Э: "3", + Ю: "X", + Я: "R", + а: "a", + б: "b", + в: "a", + г: "r", + д: "y", + е: "e", + ж: "m", + з: "e", + и: "n", + й: "n", + к: "n", + л: "n", + м: "m", + н: "n", + о: "o", + п: "n", + р: "p", + с: "c", + т: "o", + у: "y", + ф: "b", + х: "x", + ц: "n", + ч: "n", + ш: "w", + щ: "w", + ъ: "a", + ы: "m", + ь: "a", + э: "e", + ю: "m", + я: "r" +}; +function YP(t, e) { + Br[t] = e; +} +function wg(t, e, n) { + if (!Br[e]) + throw new Error("Font metrics not found for font: " + e + "."); + var r = t.charCodeAt(0), i = Br[e][r]; + if (!i && t[0] in P3 && (r = P3[t[0]].charCodeAt(0), i = Br[e][r]), !i && n === "text" && Ub(r) && (i = Br[e][77]), i) + return { + depth: i[0], + height: i[1], + italic: i[2], + skew: i[3], + width: i[4] + }; +} +var yf = {}; +function ZP(t) { + var e; + if (t >= 5 ? e = 0 : t >= 3 ? e = 1 : e = 2, !yf[e]) { + var n = yf[e] = { + cssEmPerMu: _u.quad[e] / 18 + }; + for (var r in _u) + _u.hasOwnProperty(r) && (n[r] = _u[r][e]); + } + return yf[e]; +} +var XP = [ + // Each element contains [textsize, scriptsize, scriptscriptsize]. + // The size mappings are taken from TeX with \normalsize=10pt. + [1, 1, 1], + // size1: [5, 5, 5] \tiny + [2, 1, 1], + // size2: [6, 5, 5] + [3, 1, 1], + // size3: [7, 5, 5] \scriptsize + [4, 2, 1], + // size4: [8, 6, 5] \footnotesize + [5, 2, 1], + // size5: [9, 6, 5] \small + [6, 3, 1], + // size6: [10, 7, 5] \normalsize + [7, 4, 2], + // size7: [12, 8, 6] \large + [8, 6, 3], + // size8: [14.4, 10, 7] \Large + [9, 7, 6], + // size9: [17.28, 12, 10] \LARGE + [10, 8, 7], + // size10: [20.74, 14.4, 12] \huge + [11, 10, 9] + // size11: [24.88, 20.74, 17.28] \HUGE +], B3 = [ + // fontMetrics.js:getGlobalMetrics also uses size indexes, so if + // you change size indexes, change that function. + 0.5, + 0.6, + 0.7, + 0.8, + 0.9, + 1, + 1.2, + 1.44, + 1.728, + 2.074, + 2.488 +], L3 = function(e, n) { + return n.size < 2 ? e : XP[e - 1][n.size - 1]; +}; +class li { + // A font family applies to a group of fonts (i.e. SansSerif), while a font + // represents a specific font (i.e. SansSerif Bold). + // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm + /** + * The base size index. + */ + constructor(e) { + this.style = void 0, this.color = void 0, this.size = void 0, this.textSize = void 0, this.phantom = void 0, this.font = void 0, this.fontFamily = void 0, this.fontWeight = void 0, this.fontShape = void 0, this.sizeMultiplier = void 0, this.maxSize = void 0, this.minRuleThickness = void 0, this._fontMetrics = void 0, this.style = e.style, this.color = e.color, this.size = e.size || li.BASESIZE, this.textSize = e.textSize || this.size, this.phantom = !!e.phantom, this.font = e.font || "", this.fontFamily = e.fontFamily || "", this.fontWeight = e.fontWeight || "", this.fontShape = e.fontShape || "", this.sizeMultiplier = B3[this.size - 1], this.maxSize = e.maxSize, this.minRuleThickness = e.minRuleThickness, this._fontMetrics = void 0; + } + /** + * Returns a new options object with the same properties as "this". Properties + * from "extension" will be copied to the new options object. + */ + extend(e) { + var n = { + style: this.style, + size: this.size, + textSize: this.textSize, + color: this.color, + phantom: this.phantom, + font: this.font, + fontFamily: this.fontFamily, + fontWeight: this.fontWeight, + fontShape: this.fontShape, + maxSize: this.maxSize, + minRuleThickness: this.minRuleThickness + }; + for (var r in e) + e.hasOwnProperty(r) && (n[r] = e[r]); + return new li(n); + } + /** + * Return an options object with the given style. If `this.style === style`, + * returns `this`. + */ + havingStyle(e) { + return this.style === e ? this : this.extend({ + style: e, + size: L3(this.textSize, e) + }); + } + /** + * Return an options object with a cramped version of the current style. If + * the current style is cramped, returns `this`. + */ + havingCrampedStyle() { + return this.havingStyle(this.style.cramp()); + } + /** + * Return an options object with the given size and in at least `\textstyle`. + * Returns `this` if appropriate. + */ + havingSize(e) { + return this.size === e && this.textSize === e ? this : this.extend({ + style: this.style.text(), + size: e, + textSize: e, + sizeMultiplier: B3[e - 1] + }); + } + /** + * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted, + * changes to at least `\textstyle`. + */ + havingBaseStyle(e) { + e = e || this.style.text(); + var n = L3(li.BASESIZE, e); + return this.size === n && this.textSize === li.BASESIZE && this.style === e ? this : this.extend({ + style: e, + size: n + }); + } + /** + * Remove the effect of sizing changes such as \Huge. + * Keep the effect of the current style, such as \scriptstyle. + */ + havingBaseSizing() { + var e; + switch (this.style.id) { + case 4: + case 5: + e = 3; + break; + case 6: + case 7: + e = 1; + break; + default: + e = 6; + } + return this.extend({ + style: this.style.text(), + size: e + }); + } + /** + * Create a new options object with the given color. + */ + withColor(e) { + return this.extend({ + color: e + }); + } + /** + * Create a new options object with "phantom" set to true. + */ + withPhantom() { + return this.extend({ + phantom: !0 + }); + } + /** + * Creates a new options object with the given math font or old text font. + * @type {[type]} + */ + withFont(e) { + return this.extend({ + font: e + }); + } + /** + * Create a new options objects with the given fontFamily. + */ + withTextFontFamily(e) { + return this.extend({ + fontFamily: e, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + withTextFontWeight(e) { + return this.extend({ + fontWeight: e, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + withTextFontShape(e) { + return this.extend({ + fontShape: e, + font: "" + }); + } + /** + * Return the CSS sizing classes required to switch from enclosing options + * `oldOptions` to `this`. Returns an array of classes. + */ + sizingClasses(e) { + return e.size !== this.size ? ["sizing", "reset-size" + e.size, "size" + this.size] : []; + } + /** + * Return the CSS sizing classes required to switch to the base size. Like + * `this.havingSize(BASESIZE).sizingClasses(this)`. + */ + baseSizingClasses() { + return this.size !== li.BASESIZE ? ["sizing", "reset-size" + this.size, "size" + li.BASESIZE] : []; + } + /** + * Return the font metrics for this size. + */ + fontMetrics() { + return this._fontMetrics || (this._fontMetrics = ZP(this.size)), this._fontMetrics; + } + /** + * Gets the CSS color of the current options object + */ + getColor() { + return this.phantom ? "transparent" : this.color; + } +} +li.BASESIZE = 6; +var Vp = { + // https://en.wikibooks.org/wiki/LaTeX/Lengths and + // https://tex.stackexchange.com/a/8263 + pt: 1, + // TeX point + mm: 7227 / 2540, + // millimeter + cm: 7227 / 254, + // centimeter + in: 72.27, + // inch + bp: 803 / 800, + // big (PostScript) points + pc: 12, + // pica + dd: 1238 / 1157, + // didot + cc: 14856 / 1157, + // cicero (12 didot) + nd: 685 / 642, + // new didot + nc: 1370 / 107, + // new cicero (12 new didot) + sp: 1 / 65536, + // scaled point (TeX's internal smallest unit) + // https://tex.stackexchange.com/a/41371 + px: 803 / 800 + // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX +}, QP = { + ex: !0, + em: !0, + mu: !0 +}, Gb = function(e) { + return typeof e != "string" && (e = e.unit), e in Vp || e in QP || e === "ex"; +}, mt = function(e, n) { + var r; + if (e.unit in Vp) + r = Vp[e.unit] / n.fontMetrics().ptPerEm / n.sizeMultiplier; + else if (e.unit === "mu") + r = n.fontMetrics().cssEmPerMu; + else { + var i; + if (n.style.isTight() ? i = n.havingStyle(n.style.text()) : i = n, e.unit === "ex") + r = i.fontMetrics().xHeight; + else if (e.unit === "em") + r = i.fontMetrics().quad; + else + throw new Q("Invalid unit: '" + e.unit + "'"); + i !== n && (r *= i.sizeMultiplier / n.sizeMultiplier); + } + return Math.min(e.number * r, n.maxSize); +}, oe = function(e) { + return +e.toFixed(4) + "em"; +}, ds = function(e) { + return e.filter((n) => n).join(" "); +}, Kb = function(e, n, r) { + if (this.classes = e || [], this.attributes = {}, this.height = 0, this.depth = 0, this.maxFontSize = 0, this.style = r || {}, n) { + n.style.isTight() && this.classes.push("mtight"); + var i = n.getColor(); + i && (this.style.color = i); + } +}, Jb = function(e) { + var n = document.createElement(e); + n.className = ds(this.classes); + for (var r in this.style) + this.style.hasOwnProperty(r) && (n.style[r] = this.style[r]); + for (var i in this.attributes) + this.attributes.hasOwnProperty(i) && n.setAttribute(i, this.attributes[i]); + for (var s = 0; s < this.children.length; s++) + n.appendChild(this.children[s].toNode()); + return n; +}, eB = /[\s"'>/=\x00-\x1f]/, Yb = function(e) { + var n = "<" + e; + this.classes.length && (n += ' class="' + Ke.escape(ds(this.classes)) + '"'); + var r = ""; + for (var i in this.style) + this.style.hasOwnProperty(i) && (r += Ke.hyphenate(i) + ":" + this.style[i] + ";"); + r && (n += ' style="' + Ke.escape(r) + '"'); + for (var s in this.attributes) + if (this.attributes.hasOwnProperty(s)) { + if (eB.test(s)) + throw new Q("Invalid attribute name '" + s + "'"); + n += " " + s + '="' + Ke.escape(this.attributes[s]) + '"'; + } + n += ">"; + for (var o = 0; o < this.children.length; o++) + n += this.children[o].toMarkup(); + return n += "</" + e + ">", n; +}; +class gu { + constructor(e, n, r, i) { + this.children = void 0, this.attributes = void 0, this.classes = void 0, this.height = void 0, this.depth = void 0, this.width = void 0, this.maxFontSize = void 0, this.style = void 0, Kb.call(this, e, r, i), this.children = n || []; + } + /** + * Sets an arbitrary attribute on the span. Warning: use this wisely. Not + * all browsers support attributes the same, and having too many custom + * attributes is probably bad. + */ + setAttribute(e, n) { + this.attributes[e] = n; + } + hasClass(e) { + return this.classes.includes(e); + } + toNode() { + return Jb.call(this, "span"); + } + toMarkup() { + return Yb.call(this, "span"); + } +} +class kg { + constructor(e, n, r, i) { + this.children = void 0, this.attributes = void 0, this.classes = void 0, this.height = void 0, this.depth = void 0, this.maxFontSize = void 0, this.style = void 0, Kb.call(this, n, i), this.children = r || [], this.setAttribute("href", e); + } + setAttribute(e, n) { + this.attributes[e] = n; + } + hasClass(e) { + return this.classes.includes(e); + } + toNode() { + return Jb.call(this, "a"); + } + toMarkup() { + return Yb.call(this, "a"); + } +} +class tB { + constructor(e, n, r) { + this.src = void 0, this.alt = void 0, this.classes = void 0, this.height = void 0, this.depth = void 0, this.maxFontSize = void 0, this.style = void 0, this.alt = n, this.src = e, this.classes = ["mord"], this.style = r; + } + hasClass(e) { + return this.classes.includes(e); + } + toNode() { + var e = document.createElement("img"); + e.src = this.src, e.alt = this.alt, e.className = "mord"; + for (var n in this.style) + this.style.hasOwnProperty(n) && (e.style[n] = this.style[n]); + return e; + } + toMarkup() { + var e = '<img src="' + Ke.escape(this.src) + '"' + (' alt="' + Ke.escape(this.alt) + '"'), n = ""; + for (var r in this.style) + this.style.hasOwnProperty(r) && (n += Ke.hyphenate(r) + ":" + this.style[r] + ";"); + return n && (e += ' style="' + Ke.escape(n) + '"'), e += "'/>", e; + } +} +var nB = { + î: "ı̂", + ï: "ı̈", + í: "ı́", + // 'ī': '\u0131\u0304', // enable when we add Extended Latin + ì: "ı̀" +}; +class nr { + constructor(e, n, r, i, s, o, l, a) { + this.text = void 0, this.height = void 0, this.depth = void 0, this.italic = void 0, this.skew = void 0, this.width = void 0, this.maxFontSize = void 0, this.classes = void 0, this.style = void 0, this.text = e, this.height = n || 0, this.depth = r || 0, this.italic = i || 0, this.skew = s || 0, this.width = o || 0, this.classes = l || [], this.style = a || {}, this.maxFontSize = 0; + var u = FP(this.text.charCodeAt(0)); + u && this.classes.push(u + "_fallback"), /[îïíì]/.test(this.text) && (this.text = nB[this.text]); + } + hasClass(e) { + return this.classes.includes(e); + } + /** + * Creates a text node or span from a symbol node. Note that a span is only + * created if it is needed. + */ + toNode() { + var e = document.createTextNode(this.text), n = null; + this.italic > 0 && (n = document.createElement("span"), n.style.marginRight = oe(this.italic)), this.classes.length > 0 && (n = n || document.createElement("span"), n.className = ds(this.classes)); + for (var r in this.style) + this.style.hasOwnProperty(r) && (n = n || document.createElement("span"), n.style[r] = this.style[r]); + return n ? (n.appendChild(e), n) : e; + } + /** + * Creates markup for a symbol node. + */ + toMarkup() { + var e = !1, n = "<span"; + this.classes.length && (e = !0, n += ' class="', n += Ke.escape(ds(this.classes)), n += '"'); + var r = ""; + this.italic > 0 && (r += "margin-right:" + this.italic + "em;"); + for (var i in this.style) + this.style.hasOwnProperty(i) && (r += Ke.hyphenate(i) + ":" + this.style[i] + ";"); + r && (e = !0, n += ' style="' + Ke.escape(r) + '"'); + var s = Ke.escape(this.text); + return e ? (n += ">", n += s, n += "</span>", n) : s; + } +} +class Si { + constructor(e, n) { + this.children = void 0, this.attributes = void 0, this.children = e || [], this.attributes = n || {}; + } + toNode() { + var e = "http://www.w3.org/2000/svg", n = document.createElementNS(e, "svg"); + for (var r in this.attributes) + Object.prototype.hasOwnProperty.call(this.attributes, r) && n.setAttribute(r, this.attributes[r]); + for (var i = 0; i < this.children.length; i++) + n.appendChild(this.children[i].toNode()); + return n; + } + toMarkup() { + var e = '<svg xmlns="http://www.w3.org/2000/svg"'; + for (var n in this.attributes) + Object.prototype.hasOwnProperty.call(this.attributes, n) && (e += " " + n + '="' + Ke.escape(this.attributes[n]) + '"'); + e += ">"; + for (var r = 0; r < this.children.length; r++) + e += this.children[r].toMarkup(); + return e += "</svg>", e; + } +} +class fs { + constructor(e, n) { + this.pathName = void 0, this.alternate = void 0, this.pathName = e, this.alternate = n; + } + toNode() { + var e = "http://www.w3.org/2000/svg", n = document.createElementNS(e, "path"); + return this.alternate ? n.setAttribute("d", this.alternate) : n.setAttribute("d", z3[this.pathName]), n; + } + toMarkup() { + return this.alternate ? '<path d="' + Ke.escape(this.alternate) + '"/>' : '<path d="' + Ke.escape(z3[this.pathName]) + '"/>'; + } +} +class Hp { + constructor(e) { + this.attributes = void 0, this.attributes = e || {}; + } + toNode() { + var e = "http://www.w3.org/2000/svg", n = document.createElementNS(e, "line"); + for (var r in this.attributes) + Object.prototype.hasOwnProperty.call(this.attributes, r) && n.setAttribute(r, this.attributes[r]); + return n; + } + toMarkup() { + var e = "<line"; + for (var n in this.attributes) + Object.prototype.hasOwnProperty.call(this.attributes, n) && (e += " " + n + '="' + Ke.escape(this.attributes[n]) + '"'); + return e += "/>", e; + } +} +function F3(t) { + if (t instanceof nr) + return t; + throw new Error("Expected symbolNode but got " + String(t) + "."); +} +function rB(t) { + if (t instanceof gu) + return t; + throw new Error("Expected span<HtmlDomNode> but got " + String(t) + "."); +} +var iB = { + bin: 1, + close: 1, + inner: 1, + open: 1, + punct: 1, + rel: 1 +}, sB = { + "accent-token": 1, + mathord: 1, + "op-token": 1, + spacing: 1, + textord: 1 +}, ot = { + math: {}, + text: {} +}; +function p(t, e, n, r, i, s) { + ot[t][i] = { + font: e, + group: n, + replace: r + }, s && r && (ot[t][r] = ot[t][i]); +} +var g = "math", G = "text", v = "main", S = "ams", ht = "accent-token", he = "bin", dn = "close", Ul = "inner", ke = "mathord", _t = "op-token", Wn = "open", rd = "punct", M = "rel", Ai = "spacing", D = "textord"; +p(g, v, M, "≡", "\\equiv", !0); +p(g, v, M, "≺", "\\prec", !0); +p(g, v, M, "≻", "\\succ", !0); +p(g, v, M, "∼", "\\sim", !0); +p(g, v, M, "⊥", "\\perp"); +p(g, v, M, "⪯", "\\preceq", !0); +p(g, v, M, "⪰", "\\succeq", !0); +p(g, v, M, "≃", "\\simeq", !0); +p(g, v, M, "∣", "\\mid", !0); +p(g, v, M, "≪", "\\ll", !0); +p(g, v, M, "≫", "\\gg", !0); +p(g, v, M, "≍", "\\asymp", !0); +p(g, v, M, "∥", "\\parallel"); +p(g, v, M, "⋈", "\\bowtie", !0); +p(g, v, M, "⌣", "\\smile", !0); +p(g, v, M, "⊑", "\\sqsubseteq", !0); +p(g, v, M, "⊒", "\\sqsupseteq", !0); +p(g, v, M, "≐", "\\doteq", !0); +p(g, v, M, "⌢", "\\frown", !0); +p(g, v, M, "∋", "\\ni", !0); +p(g, v, M, "∝", "\\propto", !0); +p(g, v, M, "⊢", "\\vdash", !0); +p(g, v, M, "⊣", "\\dashv", !0); +p(g, v, M, "∋", "\\owns"); +p(g, v, rd, ".", "\\ldotp"); +p(g, v, rd, "⋅", "\\cdotp"); +p(g, v, D, "#", "\\#"); +p(G, v, D, "#", "\\#"); +p(g, v, D, "&", "\\&"); +p(G, v, D, "&", "\\&"); +p(g, v, D, "ℵ", "\\aleph", !0); +p(g, v, D, "∀", "\\forall", !0); +p(g, v, D, "ℏ", "\\hbar", !0); +p(g, v, D, "∃", "\\exists", !0); +p(g, v, D, "∇", "\\nabla", !0); +p(g, v, D, "♭", "\\flat", !0); +p(g, v, D, "ℓ", "\\ell", !0); +p(g, v, D, "♮", "\\natural", !0); +p(g, v, D, "♣", "\\clubsuit", !0); +p(g, v, D, "℘", "\\wp", !0); +p(g, v, D, "♯", "\\sharp", !0); +p(g, v, D, "♢", "\\diamondsuit", !0); +p(g, v, D, "ℜ", "\\Re", !0); +p(g, v, D, "♡", "\\heartsuit", !0); +p(g, v, D, "ℑ", "\\Im", !0); +p(g, v, D, "♠", "\\spadesuit", !0); +p(g, v, D, "§", "\\S", !0); +p(G, v, D, "§", "\\S"); +p(g, v, D, "¶", "\\P", !0); +p(G, v, D, "¶", "\\P"); +p(g, v, D, "†", "\\dag"); +p(G, v, D, "†", "\\dag"); +p(G, v, D, "†", "\\textdagger"); +p(g, v, D, "‡", "\\ddag"); +p(G, v, D, "‡", "\\ddag"); +p(G, v, D, "‡", "\\textdaggerdbl"); +p(g, v, dn, "⎱", "\\rmoustache", !0); +p(g, v, Wn, "⎰", "\\lmoustache", !0); +p(g, v, dn, "⟯", "\\rgroup", !0); +p(g, v, Wn, "⟮", "\\lgroup", !0); +p(g, v, he, "∓", "\\mp", !0); +p(g, v, he, "⊖", "\\ominus", !0); +p(g, v, he, "⊎", "\\uplus", !0); +p(g, v, he, "⊓", "\\sqcap", !0); +p(g, v, he, "∗", "\\ast"); +p(g, v, he, "⊔", "\\sqcup", !0); +p(g, v, he, "◯", "\\bigcirc", !0); +p(g, v, he, "∙", "\\bullet", !0); +p(g, v, he, "‡", "\\ddagger"); +p(g, v, he, "≀", "\\wr", !0); +p(g, v, he, "⨿", "\\amalg"); +p(g, v, he, "&", "\\And"); +p(g, v, M, "⟵", "\\longleftarrow", !0); +p(g, v, M, "⇐", "\\Leftarrow", !0); +p(g, v, M, "⟸", "\\Longleftarrow", !0); +p(g, v, M, "⟶", "\\longrightarrow", !0); +p(g, v, M, "⇒", "\\Rightarrow", !0); +p(g, v, M, "⟹", "\\Longrightarrow", !0); +p(g, v, M, "↔", "\\leftrightarrow", !0); +p(g, v, M, "⟷", "\\longleftrightarrow", !0); +p(g, v, M, "⇔", "\\Leftrightarrow", !0); +p(g, v, M, "⟺", "\\Longleftrightarrow", !0); +p(g, v, M, "↦", "\\mapsto", !0); +p(g, v, M, "⟼", "\\longmapsto", !0); +p(g, v, M, "↗", "\\nearrow", !0); +p(g, v, M, "↩", "\\hookleftarrow", !0); +p(g, v, M, "↪", "\\hookrightarrow", !0); +p(g, v, M, "↘", "\\searrow", !0); +p(g, v, M, "↼", "\\leftharpoonup", !0); +p(g, v, M, "⇀", "\\rightharpoonup", !0); +p(g, v, M, "↙", "\\swarrow", !0); +p(g, v, M, "↽", "\\leftharpoondown", !0); +p(g, v, M, "⇁", "\\rightharpoondown", !0); +p(g, v, M, "↖", "\\nwarrow", !0); +p(g, v, M, "⇌", "\\rightleftharpoons", !0); +p(g, S, M, "≮", "\\nless", !0); +p(g, S, M, "", "\\@nleqslant"); +p(g, S, M, "", "\\@nleqq"); +p(g, S, M, "⪇", "\\lneq", !0); +p(g, S, M, "≨", "\\lneqq", !0); +p(g, S, M, "", "\\@lvertneqq"); +p(g, S, M, "⋦", "\\lnsim", !0); +p(g, S, M, "⪉", "\\lnapprox", !0); +p(g, S, M, "⊀", "\\nprec", !0); +p(g, S, M, "⋠", "\\npreceq", !0); +p(g, S, M, "⋨", "\\precnsim", !0); +p(g, S, M, "⪹", "\\precnapprox", !0); +p(g, S, M, "≁", "\\nsim", !0); +p(g, S, M, "", "\\@nshortmid"); +p(g, S, M, "∤", "\\nmid", !0); +p(g, S, M, "⊬", "\\nvdash", !0); +p(g, S, M, "⊭", "\\nvDash", !0); +p(g, S, M, "⋪", "\\ntriangleleft"); +p(g, S, M, "⋬", "\\ntrianglelefteq", !0); +p(g, S, M, "⊊", "\\subsetneq", !0); +p(g, S, M, "", "\\@varsubsetneq"); +p(g, S, M, "⫋", "\\subsetneqq", !0); +p(g, S, M, "", "\\@varsubsetneqq"); +p(g, S, M, "≯", "\\ngtr", !0); +p(g, S, M, "", "\\@ngeqslant"); +p(g, S, M, "", "\\@ngeqq"); +p(g, S, M, "⪈", "\\gneq", !0); +p(g, S, M, "≩", "\\gneqq", !0); +p(g, S, M, "", "\\@gvertneqq"); +p(g, S, M, "⋧", "\\gnsim", !0); +p(g, S, M, "⪊", "\\gnapprox", !0); +p(g, S, M, "⊁", "\\nsucc", !0); +p(g, S, M, "⋡", "\\nsucceq", !0); +p(g, S, M, "⋩", "\\succnsim", !0); +p(g, S, M, "⪺", "\\succnapprox", !0); +p(g, S, M, "≆", "\\ncong", !0); +p(g, S, M, "", "\\@nshortparallel"); +p(g, S, M, "∦", "\\nparallel", !0); +p(g, S, M, "⊯", "\\nVDash", !0); +p(g, S, M, "⋫", "\\ntriangleright"); +p(g, S, M, "⋭", "\\ntrianglerighteq", !0); +p(g, S, M, "", "\\@nsupseteqq"); +p(g, S, M, "⊋", "\\supsetneq", !0); +p(g, S, M, "", "\\@varsupsetneq"); +p(g, S, M, "⫌", "\\supsetneqq", !0); +p(g, S, M, "", "\\@varsupsetneqq"); +p(g, S, M, "⊮", "\\nVdash", !0); +p(g, S, M, "⪵", "\\precneqq", !0); +p(g, S, M, "⪶", "\\succneqq", !0); +p(g, S, M, "", "\\@nsubseteqq"); +p(g, S, he, "⊴", "\\unlhd"); +p(g, S, he, "⊵", "\\unrhd"); +p(g, S, M, "↚", "\\nleftarrow", !0); +p(g, S, M, "↛", "\\nrightarrow", !0); +p(g, S, M, "⇍", "\\nLeftarrow", !0); +p(g, S, M, "⇏", "\\nRightarrow", !0); +p(g, S, M, "↮", "\\nleftrightarrow", !0); +p(g, S, M, "⇎", "\\nLeftrightarrow", !0); +p(g, S, M, "△", "\\vartriangle"); +p(g, S, D, "ℏ", "\\hslash"); +p(g, S, D, "▽", "\\triangledown"); +p(g, S, D, "◊", "\\lozenge"); +p(g, S, D, "Ⓢ", "\\circledS"); +p(g, S, D, "®", "\\circledR"); +p(G, S, D, "®", "\\circledR"); +p(g, S, D, "∡", "\\measuredangle", !0); +p(g, S, D, "∄", "\\nexists"); +p(g, S, D, "℧", "\\mho"); +p(g, S, D, "Ⅎ", "\\Finv", !0); +p(g, S, D, "⅁", "\\Game", !0); +p(g, S, D, "‵", "\\backprime"); +p(g, S, D, "▲", "\\blacktriangle"); +p(g, S, D, "▼", "\\blacktriangledown"); +p(g, S, D, "■", "\\blacksquare"); +p(g, S, D, "⧫", "\\blacklozenge"); +p(g, S, D, "★", "\\bigstar"); +p(g, S, D, "∢", "\\sphericalangle", !0); +p(g, S, D, "∁", "\\complement", !0); +p(g, S, D, "ð", "\\eth", !0); +p(G, v, D, "ð", "ð"); +p(g, S, D, "╱", "\\diagup"); +p(g, S, D, "╲", "\\diagdown"); +p(g, S, D, "□", "\\square"); +p(g, S, D, "□", "\\Box"); +p(g, S, D, "◊", "\\Diamond"); +p(g, S, D, "¥", "\\yen", !0); +p(G, S, D, "¥", "\\yen", !0); +p(g, S, D, "✓", "\\checkmark", !0); +p(G, S, D, "✓", "\\checkmark"); +p(g, S, D, "ℶ", "\\beth", !0); +p(g, S, D, "ℸ", "\\daleth", !0); +p(g, S, D, "ℷ", "\\gimel", !0); +p(g, S, D, "ϝ", "\\digamma", !0); +p(g, S, D, "ϰ", "\\varkappa"); +p(g, S, Wn, "┌", "\\@ulcorner", !0); +p(g, S, dn, "┐", "\\@urcorner", !0); +p(g, S, Wn, "└", "\\@llcorner", !0); +p(g, S, dn, "┘", "\\@lrcorner", !0); +p(g, S, M, "≦", "\\leqq", !0); +p(g, S, M, "⩽", "\\leqslant", !0); +p(g, S, M, "⪕", "\\eqslantless", !0); +p(g, S, M, "≲", "\\lesssim", !0); +p(g, S, M, "⪅", "\\lessapprox", !0); +p(g, S, M, "≊", "\\approxeq", !0); +p(g, S, he, "⋖", "\\lessdot"); +p(g, S, M, "⋘", "\\lll", !0); +p(g, S, M, "≶", "\\lessgtr", !0); +p(g, S, M, "⋚", "\\lesseqgtr", !0); +p(g, S, M, "⪋", "\\lesseqqgtr", !0); +p(g, S, M, "≑", "\\doteqdot"); +p(g, S, M, "≓", "\\risingdotseq", !0); +p(g, S, M, "≒", "\\fallingdotseq", !0); +p(g, S, M, "∽", "\\backsim", !0); +p(g, S, M, "⋍", "\\backsimeq", !0); +p(g, S, M, "⫅", "\\subseteqq", !0); +p(g, S, M, "⋐", "\\Subset", !0); +p(g, S, M, "⊏", "\\sqsubset", !0); +p(g, S, M, "≼", "\\preccurlyeq", !0); +p(g, S, M, "⋞", "\\curlyeqprec", !0); +p(g, S, M, "≾", "\\precsim", !0); +p(g, S, M, "⪷", "\\precapprox", !0); +p(g, S, M, "⊲", "\\vartriangleleft"); +p(g, S, M, "⊴", "\\trianglelefteq"); +p(g, S, M, "⊨", "\\vDash", !0); +p(g, S, M, "⊪", "\\Vvdash", !0); +p(g, S, M, "⌣", "\\smallsmile"); +p(g, S, M, "⌢", "\\smallfrown"); +p(g, S, M, "≏", "\\bumpeq", !0); +p(g, S, M, "≎", "\\Bumpeq", !0); +p(g, S, M, "≧", "\\geqq", !0); +p(g, S, M, "⩾", "\\geqslant", !0); +p(g, S, M, "⪖", "\\eqslantgtr", !0); +p(g, S, M, "≳", "\\gtrsim", !0); +p(g, S, M, "⪆", "\\gtrapprox", !0); +p(g, S, he, "⋗", "\\gtrdot"); +p(g, S, M, "⋙", "\\ggg", !0); +p(g, S, M, "≷", "\\gtrless", !0); +p(g, S, M, "⋛", "\\gtreqless", !0); +p(g, S, M, "⪌", "\\gtreqqless", !0); +p(g, S, M, "≖", "\\eqcirc", !0); +p(g, S, M, "≗", "\\circeq", !0); +p(g, S, M, "≜", "\\triangleq", !0); +p(g, S, M, "∼", "\\thicksim"); +p(g, S, M, "≈", "\\thickapprox"); +p(g, S, M, "⫆", "\\supseteqq", !0); +p(g, S, M, "⋑", "\\Supset", !0); +p(g, S, M, "⊐", "\\sqsupset", !0); +p(g, S, M, "≽", "\\succcurlyeq", !0); +p(g, S, M, "⋟", "\\curlyeqsucc", !0); +p(g, S, M, "≿", "\\succsim", !0); +p(g, S, M, "⪸", "\\succapprox", !0); +p(g, S, M, "⊳", "\\vartriangleright"); +p(g, S, M, "⊵", "\\trianglerighteq"); +p(g, S, M, "⊩", "\\Vdash", !0); +p(g, S, M, "∣", "\\shortmid"); +p(g, S, M, "∥", "\\shortparallel"); +p(g, S, M, "≬", "\\between", !0); +p(g, S, M, "⋔", "\\pitchfork", !0); +p(g, S, M, "∝", "\\varpropto"); +p(g, S, M, "◀", "\\blacktriangleleft"); +p(g, S, M, "∴", "\\therefore", !0); +p(g, S, M, "∍", "\\backepsilon"); +p(g, S, M, "▶", "\\blacktriangleright"); +p(g, S, M, "∵", "\\because", !0); +p(g, S, M, "⋘", "\\llless"); +p(g, S, M, "⋙", "\\gggtr"); +p(g, S, he, "⊲", "\\lhd"); +p(g, S, he, "⊳", "\\rhd"); +p(g, S, M, "≂", "\\eqsim", !0); +p(g, v, M, "⋈", "\\Join"); +p(g, S, M, "≑", "\\Doteq", !0); +p(g, S, he, "∔", "\\dotplus", !0); +p(g, S, he, "∖", "\\smallsetminus"); +p(g, S, he, "⋒", "\\Cap", !0); +p(g, S, he, "⋓", "\\Cup", !0); +p(g, S, he, "⩞", "\\doublebarwedge", !0); +p(g, S, he, "⊟", "\\boxminus", !0); +p(g, S, he, "⊞", "\\boxplus", !0); +p(g, S, he, "⋇", "\\divideontimes", !0); +p(g, S, he, "⋉", "\\ltimes", !0); +p(g, S, he, "⋊", "\\rtimes", !0); +p(g, S, he, "⋋", "\\leftthreetimes", !0); +p(g, S, he, "⋌", "\\rightthreetimes", !0); +p(g, S, he, "⋏", "\\curlywedge", !0); +p(g, S, he, "⋎", "\\curlyvee", !0); +p(g, S, he, "⊝", "\\circleddash", !0); +p(g, S, he, "⊛", "\\circledast", !0); +p(g, S, he, "⋅", "\\centerdot"); +p(g, S, he, "⊺", "\\intercal", !0); +p(g, S, he, "⋒", "\\doublecap"); +p(g, S, he, "⋓", "\\doublecup"); +p(g, S, he, "⊠", "\\boxtimes", !0); +p(g, S, M, "⇢", "\\dashrightarrow", !0); +p(g, S, M, "⇠", "\\dashleftarrow", !0); +p(g, S, M, "⇇", "\\leftleftarrows", !0); +p(g, S, M, "⇆", "\\leftrightarrows", !0); +p(g, S, M, "⇚", "\\Lleftarrow", !0); +p(g, S, M, "↞", "\\twoheadleftarrow", !0); +p(g, S, M, "↢", "\\leftarrowtail", !0); +p(g, S, M, "↫", "\\looparrowleft", !0); +p(g, S, M, "⇋", "\\leftrightharpoons", !0); +p(g, S, M, "↶", "\\curvearrowleft", !0); +p(g, S, M, "↺", "\\circlearrowleft", !0); +p(g, S, M, "↰", "\\Lsh", !0); +p(g, S, M, "⇈", "\\upuparrows", !0); +p(g, S, M, "↿", "\\upharpoonleft", !0); +p(g, S, M, "⇃", "\\downharpoonleft", !0); +p(g, v, M, "⊶", "\\origof", !0); +p(g, v, M, "⊷", "\\imageof", !0); +p(g, S, M, "⊸", "\\multimap", !0); +p(g, S, M, "↭", "\\leftrightsquigarrow", !0); +p(g, S, M, "⇉", "\\rightrightarrows", !0); +p(g, S, M, "⇄", "\\rightleftarrows", !0); +p(g, S, M, "↠", "\\twoheadrightarrow", !0); +p(g, S, M, "↣", "\\rightarrowtail", !0); +p(g, S, M, "↬", "\\looparrowright", !0); +p(g, S, M, "↷", "\\curvearrowright", !0); +p(g, S, M, "↻", "\\circlearrowright", !0); +p(g, S, M, "↱", "\\Rsh", !0); +p(g, S, M, "⇊", "\\downdownarrows", !0); +p(g, S, M, "↾", "\\upharpoonright", !0); +p(g, S, M, "⇂", "\\downharpoonright", !0); +p(g, S, M, "⇝", "\\rightsquigarrow", !0); +p(g, S, M, "⇝", "\\leadsto"); +p(g, S, M, "⇛", "\\Rrightarrow", !0); +p(g, S, M, "↾", "\\restriction"); +p(g, v, D, "‘", "`"); +p(g, v, D, "$", "\\$"); +p(G, v, D, "$", "\\$"); +p(G, v, D, "$", "\\textdollar"); +p(g, v, D, "%", "\\%"); +p(G, v, D, "%", "\\%"); +p(g, v, D, "_", "\\_"); +p(G, v, D, "_", "\\_"); +p(G, v, D, "_", "\\textunderscore"); +p(g, v, D, "∠", "\\angle", !0); +p(g, v, D, "∞", "\\infty", !0); +p(g, v, D, "′", "\\prime"); +p(g, v, D, "△", "\\triangle"); +p(g, v, D, "Γ", "\\Gamma", !0); +p(g, v, D, "Δ", "\\Delta", !0); +p(g, v, D, "Θ", "\\Theta", !0); +p(g, v, D, "Λ", "\\Lambda", !0); +p(g, v, D, "Ξ", "\\Xi", !0); +p(g, v, D, "Π", "\\Pi", !0); +p(g, v, D, "Σ", "\\Sigma", !0); +p(g, v, D, "Υ", "\\Upsilon", !0); +p(g, v, D, "Φ", "\\Phi", !0); +p(g, v, D, "Ψ", "\\Psi", !0); +p(g, v, D, "Ω", "\\Omega", !0); +p(g, v, D, "A", "Α"); +p(g, v, D, "B", "Β"); +p(g, v, D, "E", "Ε"); +p(g, v, D, "Z", "Ζ"); +p(g, v, D, "H", "Η"); +p(g, v, D, "I", "Ι"); +p(g, v, D, "K", "Κ"); +p(g, v, D, "M", "Μ"); +p(g, v, D, "N", "Ν"); +p(g, v, D, "O", "Ο"); +p(g, v, D, "P", "Ρ"); +p(g, v, D, "T", "Τ"); +p(g, v, D, "X", "Χ"); +p(g, v, D, "¬", "\\neg", !0); +p(g, v, D, "¬", "\\lnot"); +p(g, v, D, "⊤", "\\top"); +p(g, v, D, "⊥", "\\bot"); +p(g, v, D, "∅", "\\emptyset"); +p(g, S, D, "∅", "\\varnothing"); +p(g, v, ke, "α", "\\alpha", !0); +p(g, v, ke, "β", "\\beta", !0); +p(g, v, ke, "γ", "\\gamma", !0); +p(g, v, ke, "δ", "\\delta", !0); +p(g, v, ke, "ϵ", "\\epsilon", !0); +p(g, v, ke, "ζ", "\\zeta", !0); +p(g, v, ke, "η", "\\eta", !0); +p(g, v, ke, "θ", "\\theta", !0); +p(g, v, ke, "ι", "\\iota", !0); +p(g, v, ke, "κ", "\\kappa", !0); +p(g, v, ke, "λ", "\\lambda", !0); +p(g, v, ke, "μ", "\\mu", !0); +p(g, v, ke, "ν", "\\nu", !0); +p(g, v, ke, "ξ", "\\xi", !0); +p(g, v, ke, "ο", "\\omicron", !0); +p(g, v, ke, "π", "\\pi", !0); +p(g, v, ke, "ρ", "\\rho", !0); +p(g, v, ke, "σ", "\\sigma", !0); +p(g, v, ke, "τ", "\\tau", !0); +p(g, v, ke, "υ", "\\upsilon", !0); +p(g, v, ke, "ϕ", "\\phi", !0); +p(g, v, ke, "χ", "\\chi", !0); +p(g, v, ke, "ψ", "\\psi", !0); +p(g, v, ke, "ω", "\\omega", !0); +p(g, v, ke, "ε", "\\varepsilon", !0); +p(g, v, ke, "ϑ", "\\vartheta", !0); +p(g, v, ke, "ϖ", "\\varpi", !0); +p(g, v, ke, "ϱ", "\\varrho", !0); +p(g, v, ke, "ς", "\\varsigma", !0); +p(g, v, ke, "φ", "\\varphi", !0); +p(g, v, he, "∗", "*", !0); +p(g, v, he, "+", "+"); +p(g, v, he, "−", "-", !0); +p(g, v, he, "⋅", "\\cdot", !0); +p(g, v, he, "∘", "\\circ", !0); +p(g, v, he, "÷", "\\div", !0); +p(g, v, he, "±", "\\pm", !0); +p(g, v, he, "×", "\\times", !0); +p(g, v, he, "∩", "\\cap", !0); +p(g, v, he, "∪", "\\cup", !0); +p(g, v, he, "∖", "\\setminus", !0); +p(g, v, he, "∧", "\\land"); +p(g, v, he, "∨", "\\lor"); +p(g, v, he, "∧", "\\wedge", !0); +p(g, v, he, "∨", "\\vee", !0); +p(g, v, D, "√", "\\surd"); +p(g, v, Wn, "⟨", "\\langle", !0); +p(g, v, Wn, "∣", "\\lvert"); +p(g, v, Wn, "∥", "\\lVert"); +p(g, v, dn, "?", "?"); +p(g, v, dn, "!", "!"); +p(g, v, dn, "⟩", "\\rangle", !0); +p(g, v, dn, "∣", "\\rvert"); +p(g, v, dn, "∥", "\\rVert"); +p(g, v, M, "=", "="); +p(g, v, M, ":", ":"); +p(g, v, M, "≈", "\\approx", !0); +p(g, v, M, "≅", "\\cong", !0); +p(g, v, M, "≥", "\\ge"); +p(g, v, M, "≥", "\\geq", !0); +p(g, v, M, "←", "\\gets"); +p(g, v, M, ">", "\\gt", !0); +p(g, v, M, "∈", "\\in", !0); +p(g, v, M, "", "\\@not"); +p(g, v, M, "⊂", "\\subset", !0); +p(g, v, M, "⊃", "\\supset", !0); +p(g, v, M, "⊆", "\\subseteq", !0); +p(g, v, M, "⊇", "\\supseteq", !0); +p(g, S, M, "⊈", "\\nsubseteq", !0); +p(g, S, M, "⊉", "\\nsupseteq", !0); +p(g, v, M, "⊨", "\\models"); +p(g, v, M, "←", "\\leftarrow", !0); +p(g, v, M, "≤", "\\le"); +p(g, v, M, "≤", "\\leq", !0); +p(g, v, M, "<", "\\lt", !0); +p(g, v, M, "→", "\\rightarrow", !0); +p(g, v, M, "→", "\\to"); +p(g, S, M, "≱", "\\ngeq", !0); +p(g, S, M, "≰", "\\nleq", !0); +p(g, v, Ai, " ", "\\ "); +p(g, v, Ai, " ", "\\space"); +p(g, v, Ai, " ", "\\nobreakspace"); +p(G, v, Ai, " ", "\\ "); +p(G, v, Ai, " ", " "); +p(G, v, Ai, " ", "\\space"); +p(G, v, Ai, " ", "\\nobreakspace"); +p(g, v, Ai, null, "\\nobreak"); +p(g, v, Ai, null, "\\allowbreak"); +p(g, v, rd, ",", ","); +p(g, v, rd, ";", ";"); +p(g, S, he, "⊼", "\\barwedge", !0); +p(g, S, he, "⊻", "\\veebar", !0); +p(g, v, he, "⊙", "\\odot", !0); +p(g, v, he, "⊕", "\\oplus", !0); +p(g, v, he, "⊗", "\\otimes", !0); +p(g, v, D, "∂", "\\partial", !0); +p(g, v, he, "⊘", "\\oslash", !0); +p(g, S, he, "⊚", "\\circledcirc", !0); +p(g, S, he, "⊡", "\\boxdot", !0); +p(g, v, he, "△", "\\bigtriangleup"); +p(g, v, he, "▽", "\\bigtriangledown"); +p(g, v, he, "†", "\\dagger"); +p(g, v, he, "⋄", "\\diamond"); +p(g, v, he, "⋆", "\\star"); +p(g, v, he, "◃", "\\triangleleft"); +p(g, v, he, "▹", "\\triangleright"); +p(g, v, Wn, "{", "\\{"); +p(G, v, D, "{", "\\{"); +p(G, v, D, "{", "\\textbraceleft"); +p(g, v, dn, "}", "\\}"); +p(G, v, D, "}", "\\}"); +p(G, v, D, "}", "\\textbraceright"); +p(g, v, Wn, "{", "\\lbrace"); +p(g, v, dn, "}", "\\rbrace"); +p(g, v, Wn, "[", "\\lbrack", !0); +p(G, v, D, "[", "\\lbrack", !0); +p(g, v, dn, "]", "\\rbrack", !0); +p(G, v, D, "]", "\\rbrack", !0); +p(g, v, Wn, "(", "\\lparen", !0); +p(g, v, dn, ")", "\\rparen", !0); +p(G, v, D, "<", "\\textless", !0); +p(G, v, D, ">", "\\textgreater", !0); +p(g, v, Wn, "⌊", "\\lfloor", !0); +p(g, v, dn, "⌋", "\\rfloor", !0); +p(g, v, Wn, "⌈", "\\lceil", !0); +p(g, v, dn, "⌉", "\\rceil", !0); +p(g, v, D, "\\", "\\backslash"); +p(g, v, D, "∣", "|"); +p(g, v, D, "∣", "\\vert"); +p(G, v, D, "|", "\\textbar", !0); +p(g, v, D, "∥", "\\|"); +p(g, v, D, "∥", "\\Vert"); +p(G, v, D, "∥", "\\textbardbl"); +p(G, v, D, "~", "\\textasciitilde"); +p(G, v, D, "\\", "\\textbackslash"); +p(G, v, D, "^", "\\textasciicircum"); +p(g, v, M, "↑", "\\uparrow", !0); +p(g, v, M, "⇑", "\\Uparrow", !0); +p(g, v, M, "↓", "\\downarrow", !0); +p(g, v, M, "⇓", "\\Downarrow", !0); +p(g, v, M, "↕", "\\updownarrow", !0); +p(g, v, M, "⇕", "\\Updownarrow", !0); +p(g, v, _t, "∐", "\\coprod"); +p(g, v, _t, "⋁", "\\bigvee"); +p(g, v, _t, "⋀", "\\bigwedge"); +p(g, v, _t, "⨄", "\\biguplus"); +p(g, v, _t, "⋂", "\\bigcap"); +p(g, v, _t, "⋃", "\\bigcup"); +p(g, v, _t, "∫", "\\int"); +p(g, v, _t, "∫", "\\intop"); +p(g, v, _t, "∬", "\\iint"); +p(g, v, _t, "∭", "\\iiint"); +p(g, v, _t, "∏", "\\prod"); +p(g, v, _t, "∑", "\\sum"); +p(g, v, _t, "⨂", "\\bigotimes"); +p(g, v, _t, "⨁", "\\bigoplus"); +p(g, v, _t, "⨀", "\\bigodot"); +p(g, v, _t, "∮", "\\oint"); +p(g, v, _t, "∯", "\\oiint"); +p(g, v, _t, "∰", "\\oiiint"); +p(g, v, _t, "⨆", "\\bigsqcup"); +p(g, v, _t, "∫", "\\smallint"); +p(G, v, Ul, "…", "\\textellipsis"); +p(g, v, Ul, "…", "\\mathellipsis"); +p(G, v, Ul, "…", "\\ldots", !0); +p(g, v, Ul, "…", "\\ldots", !0); +p(g, v, Ul, "⋯", "\\@cdots", !0); +p(g, v, Ul, "⋱", "\\ddots", !0); +p(g, v, D, "⋮", "\\varvdots"); +p(G, v, D, "⋮", "\\varvdots"); +p(g, v, ht, "ˊ", "\\acute"); +p(g, v, ht, "ˋ", "\\grave"); +p(g, v, ht, "¨", "\\ddot"); +p(g, v, ht, "~", "\\tilde"); +p(g, v, ht, "ˉ", "\\bar"); +p(g, v, ht, "˘", "\\breve"); +p(g, v, ht, "ˇ", "\\check"); +p(g, v, ht, "^", "\\hat"); +p(g, v, ht, "⃗", "\\vec"); +p(g, v, ht, "˙", "\\dot"); +p(g, v, ht, "˚", "\\mathring"); +p(g, v, ke, "", "\\@imath"); +p(g, v, ke, "", "\\@jmath"); +p(g, v, D, "ı", "ı"); +p(g, v, D, "ȷ", "ȷ"); +p(G, v, D, "ı", "\\i", !0); +p(G, v, D, "ȷ", "\\j", !0); +p(G, v, D, "ß", "\\ss", !0); +p(G, v, D, "æ", "\\ae", !0); +p(G, v, D, "œ", "\\oe", !0); +p(G, v, D, "ø", "\\o", !0); +p(G, v, D, "Æ", "\\AE", !0); +p(G, v, D, "Œ", "\\OE", !0); +p(G, v, D, "Ø", "\\O", !0); +p(G, v, ht, "ˊ", "\\'"); +p(G, v, ht, "ˋ", "\\`"); +p(G, v, ht, "ˆ", "\\^"); +p(G, v, ht, "˜", "\\~"); +p(G, v, ht, "ˉ", "\\="); +p(G, v, ht, "˘", "\\u"); +p(G, v, ht, "˙", "\\."); +p(G, v, ht, "¸", "\\c"); +p(G, v, ht, "˚", "\\r"); +p(G, v, ht, "ˇ", "\\v"); +p(G, v, ht, "¨", '\\"'); +p(G, v, ht, "˝", "\\H"); +p(G, v, ht, "◯", "\\textcircled"); +var Zb = { + "--": !0, + "---": !0, + "``": !0, + "''": !0 +}; +p(G, v, D, "–", "--", !0); +p(G, v, D, "–", "\\textendash"); +p(G, v, D, "—", "---", !0); +p(G, v, D, "—", "\\textemdash"); +p(G, v, D, "‘", "`", !0); +p(G, v, D, "‘", "\\textquoteleft"); +p(G, v, D, "’", "'", !0); +p(G, v, D, "’", "\\textquoteright"); +p(G, v, D, "“", "``", !0); +p(G, v, D, "“", "\\textquotedblleft"); +p(G, v, D, "”", "''", !0); +p(G, v, D, "”", "\\textquotedblright"); +p(g, v, D, "°", "\\degree", !0); +p(G, v, D, "°", "\\degree"); +p(G, v, D, "°", "\\textdegree", !0); +p(g, v, D, "£", "\\pounds"); +p(g, v, D, "£", "\\mathsterling", !0); +p(G, v, D, "£", "\\pounds"); +p(G, v, D, "£", "\\textsterling", !0); +p(g, S, D, "✠", "\\maltese"); +p(G, S, D, "✠", "\\maltese"); +var V3 = '0123456789/@."'; +for (var vf = 0; vf < V3.length; vf++) { + var H3 = V3.charAt(vf); + p(g, v, D, H3, H3); +} +var $3 = '0123456789!@*()-=+";:?/.,'; +for (var bf = 0; bf < $3.length; bf++) { + var q3 = $3.charAt(bf); + p(G, v, D, q3, q3); +} +var dh = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; +for (var wf = 0; wf < dh.length; wf++) { + var Ru = dh.charAt(wf); + p(g, v, ke, Ru, Ru), p(G, v, D, Ru, Ru); +} +p(g, S, D, "C", "ℂ"); +p(G, S, D, "C", "ℂ"); +p(g, S, D, "H", "ℍ"); +p(G, S, D, "H", "ℍ"); +p(g, S, D, "N", "ℕ"); +p(G, S, D, "N", "ℕ"); +p(g, S, D, "P", "ℙ"); +p(G, S, D, "P", "ℙ"); +p(g, S, D, "Q", "ℚ"); +p(G, S, D, "Q", "ℚ"); +p(g, S, D, "R", "ℝ"); +p(G, S, D, "R", "ℝ"); +p(g, S, D, "Z", "ℤ"); +p(G, S, D, "Z", "ℤ"); +p(g, v, ke, "h", "ℎ"); +p(G, v, ke, "h", "ℎ"); +var Te = ""; +for (var en = 0; en < dh.length; en++) { + var yt = dh.charAt(en); + Te = String.fromCharCode(55349, 56320 + en), p(g, v, ke, yt, Te), p(G, v, D, yt, Te), Te = String.fromCharCode(55349, 56372 + en), p(g, v, ke, yt, Te), p(G, v, D, yt, Te), Te = String.fromCharCode(55349, 56424 + en), p(g, v, ke, yt, Te), p(G, v, D, yt, Te), Te = String.fromCharCode(55349, 56580 + en), p(g, v, ke, yt, Te), p(G, v, D, yt, Te), Te = String.fromCharCode(55349, 56684 + en), p(g, v, ke, yt, Te), p(G, v, D, yt, Te), Te = String.fromCharCode(55349, 56736 + en), p(g, v, ke, yt, Te), p(G, v, D, yt, Te), Te = String.fromCharCode(55349, 56788 + en), p(g, v, ke, yt, Te), p(G, v, D, yt, Te), Te = String.fromCharCode(55349, 56840 + en), p(g, v, ke, yt, Te), p(G, v, D, yt, Te), Te = String.fromCharCode(55349, 56944 + en), p(g, v, ke, yt, Te), p(G, v, D, yt, Te), en < 26 && (Te = String.fromCharCode(55349, 56632 + en), p(g, v, ke, yt, Te), p(G, v, D, yt, Te), Te = String.fromCharCode(55349, 56476 + en), p(g, v, ke, yt, Te), p(G, v, D, yt, Te)); +} +Te = "𝕜"; +p(g, v, ke, "k", Te); +p(G, v, D, "k", Te); +for (var Os = 0; Os < 10; Os++) { + var _i = Os.toString(); + Te = String.fromCharCode(55349, 57294 + Os), p(g, v, ke, _i, Te), p(G, v, D, _i, Te), Te = String.fromCharCode(55349, 57314 + Os), p(g, v, ke, _i, Te), p(G, v, D, _i, Te), Te = String.fromCharCode(55349, 57324 + Os), p(g, v, ke, _i, Te), p(G, v, D, _i, Te), Te = String.fromCharCode(55349, 57334 + Os), p(g, v, ke, _i, Te), p(G, v, D, _i, Te); +} +var $p = "ÐÞþ"; +for (var kf = 0; kf < $p.length; kf++) { + var zu = $p.charAt(kf); + p(g, v, ke, zu, zu), p(G, v, D, zu, zu); +} +var Pu = [ + ["mathbf", "textbf", "Main-Bold"], + // A-Z bold upright + ["mathbf", "textbf", "Main-Bold"], + // a-z bold upright + ["mathnormal", "textit", "Math-Italic"], + // A-Z italic + ["mathnormal", "textit", "Math-Italic"], + // a-z italic + ["boldsymbol", "boldsymbol", "Main-BoldItalic"], + // A-Z bold italic + ["boldsymbol", "boldsymbol", "Main-BoldItalic"], + // a-z bold italic + // Map fancy A-Z letters to script, not calligraphic. + // This aligns with unicode-math and math fonts (except Cambria Math). + ["mathscr", "textscr", "Script-Regular"], + // A-Z script + ["", "", ""], + // a-z script. No font + ["", "", ""], + // A-Z bold script. No font + ["", "", ""], + // a-z bold script. No font + ["mathfrak", "textfrak", "Fraktur-Regular"], + // A-Z Fraktur + ["mathfrak", "textfrak", "Fraktur-Regular"], + // a-z Fraktur + ["mathbb", "textbb", "AMS-Regular"], + // A-Z double-struck + ["mathbb", "textbb", "AMS-Regular"], + // k double-struck + // Note that we are using a bold font, but font metrics for regular Fraktur. + ["mathboldfrak", "textboldfrak", "Fraktur-Regular"], + // A-Z bold Fraktur + ["mathboldfrak", "textboldfrak", "Fraktur-Regular"], + // a-z bold Fraktur + ["mathsf", "textsf", "SansSerif-Regular"], + // A-Z sans-serif + ["mathsf", "textsf", "SansSerif-Regular"], + // a-z sans-serif + ["mathboldsf", "textboldsf", "SansSerif-Bold"], + // A-Z bold sans-serif + ["mathboldsf", "textboldsf", "SansSerif-Bold"], + // a-z bold sans-serif + ["mathitsf", "textitsf", "SansSerif-Italic"], + // A-Z italic sans-serif + ["mathitsf", "textitsf", "SansSerif-Italic"], + // a-z italic sans-serif + ["", "", ""], + // A-Z bold italic sans. No font + ["", "", ""], + // a-z bold italic sans. No font + ["mathtt", "texttt", "Typewriter-Regular"], + // A-Z monospace + ["mathtt", "texttt", "Typewriter-Regular"] + // a-z monospace +], j3 = [ + ["mathbf", "textbf", "Main-Bold"], + // 0-9 bold + ["", "", ""], + // 0-9 double-struck. No KaTeX font. + ["mathsf", "textsf", "SansSerif-Regular"], + // 0-9 sans-serif + ["mathboldsf", "textboldsf", "SansSerif-Bold"], + // 0-9 bold sans-serif + ["mathtt", "texttt", "Typewriter-Regular"] + // 0-9 monospace +], oB = function(e, n) { + var r = e.charCodeAt(0), i = e.charCodeAt(1), s = (r - 55296) * 1024 + (i - 56320) + 65536, o = n === "math" ? 0 : 1; + if (119808 <= s && s < 120484) { + var l = Math.floor((s - 119808) / 26); + return [Pu[l][2], Pu[l][o]]; + } else if (120782 <= s && s <= 120831) { + var a = Math.floor((s - 120782) / 10); + return [j3[a][2], j3[a][o]]; + } else { + if (s === 120485 || s === 120486) + return [Pu[0][2], Pu[0][o]]; + if (120486 < s && s < 120782) + return ["", ""]; + throw new Q("Unsupported character: " + e); + } +}, id = function(e, n, r) { + return ot[r][e] && ot[r][e].replace && (e = ot[r][e].replace), { + value: e, + metrics: wg(e, n, r) + }; +}, cr = function(e, n, r, i, s) { + var o = id(e, n, r), l = o.metrics; + e = o.value; + var a; + if (l) { + var u = l.italic; + (r === "text" || i && i.font === "mathit") && (u = 0), a = new nr(e, l.height, l.depth, u, l.skew, l.width, s); + } else + typeof console < "u" && console.warn("No character metrics " + ("for '" + e + "' in style '" + n + "' and mode '" + r + "'")), a = new nr(e, 0, 0, 0, 0, 0, s); + if (i) { + a.maxFontSize = i.sizeMultiplier, i.style.isTight() && a.classes.push("mtight"); + var c = i.getColor(); + c && (a.style.color = c); + } + return a; +}, lB = function(e, n, r, i) { + return i === void 0 && (i = []), r.font === "boldsymbol" && id(e, "Main-Bold", n).metrics ? cr(e, "Main-Bold", n, r, i.concat(["mathbf"])) : e === "\\" || ot[n][e].font === "main" ? cr(e, "Main-Regular", n, r, i) : cr(e, "AMS-Regular", n, r, i.concat(["amsrm"])); +}, aB = function(e, n, r, i, s) { + return s !== "textord" && id(e, "Math-BoldItalic", n).metrics ? { + fontName: "Math-BoldItalic", + fontClass: "boldsymbol" + } : { + fontName: "Main-Bold", + fontClass: "mathbf" + }; +}, uB = function(e, n, r) { + var i = e.mode, s = e.text, o = ["mord"], l = i === "math" || i === "text" && n.font, a = l ? n.font : n.fontFamily, u = "", c = ""; + if (s.charCodeAt(0) === 55349 && ([u, c] = oB(s, i)), u.length > 0) + return cr(s, u, i, n, o.concat(c)); + if (a) { + var h, d; + if (a === "boldsymbol") { + var f = aB(s, i, n, o, r); + h = f.fontName, d = [f.fontClass]; + } else l ? (h = e9[a].fontName, d = [a]) : (h = Bu(a, n.fontWeight, n.fontShape), d = [a, n.fontWeight, n.fontShape]); + if (id(s, h, i).metrics) + return cr(s, h, i, n, o.concat(d)); + if (Zb.hasOwnProperty(s) && h.slice(0, 10) === "Typewriter") { + for (var m = [], y = 0; y < s.length; y++) + m.push(cr(s[y], h, i, n, o.concat(d))); + return Qb(m); + } + } + if (r === "mathord") + return cr(s, "Math-Italic", i, n, o.concat(["mathnormal"])); + if (r === "textord") { + var b = ot[i][s] && ot[i][s].font; + if (b === "ams") { + var w = Bu("amsrm", n.fontWeight, n.fontShape); + return cr(s, w, i, n, o.concat("amsrm", n.fontWeight, n.fontShape)); + } else if (b === "main" || !b) { + var C = Bu("textrm", n.fontWeight, n.fontShape); + return cr(s, C, i, n, o.concat(n.fontWeight, n.fontShape)); + } else { + var N = Bu(b, n.fontWeight, n.fontShape); + return cr(s, N, i, n, o.concat(N, n.fontWeight, n.fontShape)); + } + } else + throw new Error("unexpected type: " + r + " in makeOrd"); +}, cB = (t, e) => { + if (ds(t.classes) !== ds(e.classes) || t.skew !== e.skew || t.maxFontSize !== e.maxFontSize) + return !1; + if (t.classes.length === 1) { + var n = t.classes[0]; + if (n === "mbin" || n === "mord") + return !1; + } + for (var r in t.style) + if (t.style.hasOwnProperty(r) && t.style[r] !== e.style[r]) + return !1; + for (var i in e.style) + if (e.style.hasOwnProperty(i) && t.style[i] !== e.style[i]) + return !1; + return !0; +}, hB = (t) => { + for (var e = 0; e < t.length - 1; e++) { + var n = t[e], r = t[e + 1]; + n instanceof nr && r instanceof nr && cB(n, r) && (n.text += r.text, n.height = Math.max(n.height, r.height), n.depth = Math.max(n.depth, r.depth), n.italic = r.italic, t.splice(e + 1, 1), e--); + } + return t; +}, xg = function(e) { + for (var n = 0, r = 0, i = 0, s = 0; s < e.children.length; s++) { + var o = e.children[s]; + o.height > n && (n = o.height), o.depth > r && (r = o.depth), o.maxFontSize > i && (i = o.maxFontSize); + } + e.height = n, e.depth = r, e.maxFontSize = i; +}, bn = function(e, n, r, i) { + var s = new gu(e, n, r, i); + return xg(s), s; +}, Xb = (t, e, n, r) => new gu(t, e, n, r), dB = function(e, n, r) { + var i = bn([e], [], n); + return i.height = Math.max(r || n.fontMetrics().defaultRuleThickness, n.minRuleThickness), i.style.borderBottomWidth = oe(i.height), i.maxFontSize = 1, i; +}, fB = function(e, n, r, i) { + var s = new kg(e, n, r, i); + return xg(s), s; +}, Qb = function(e) { + var n = new mu(e); + return xg(n), n; +}, pB = function(e, n) { + return e instanceof mu ? bn([], [e], n) : e; +}, mB = function(e) { + if (e.positionType === "individualShift") { + for (var n = e.children, r = [n[0]], i = -n[0].shift - n[0].elem.depth, s = i, o = 1; o < n.length; o++) { + var l = -n[o].shift - s - n[o].elem.depth, a = l - (n[o - 1].elem.height + n[o - 1].elem.depth); + s = s + l, r.push({ + type: "kern", + size: a + }), r.push(n[o]); + } + return { + children: r, + depth: i + }; + } + var u; + if (e.positionType === "top") { + for (var c = e.positionData, h = 0; h < e.children.length; h++) { + var d = e.children[h]; + c -= d.type === "kern" ? d.size : d.elem.height + d.elem.depth; + } + u = c; + } else if (e.positionType === "bottom") + u = -e.positionData; + else { + var f = e.children[0]; + if (f.type !== "elem") + throw new Error('First child must have type "elem".'); + if (e.positionType === "shift") + u = -f.elem.depth - e.positionData; + else if (e.positionType === "firstBaseline") + u = -f.elem.depth; + else + throw new Error("Invalid positionType " + e.positionType + "."); + } + return { + children: e.children, + depth: u + }; +}, gB = function(e, n) { + for (var { + children: r, + depth: i + } = mB(e), s = 0, o = 0; o < r.length; o++) { + var l = r[o]; + if (l.type === "elem") { + var a = l.elem; + s = Math.max(s, a.maxFontSize, a.height); + } + } + s += 2; + var u = bn(["pstrut"], []); + u.style.height = oe(s); + for (var c = [], h = i, d = i, f = i, m = 0; m < r.length; m++) { + var y = r[m]; + if (y.type === "kern") + f += y.size; + else { + var b = y.elem, w = y.wrapperClasses || [], C = y.wrapperStyle || {}, N = bn(w, [u, b], void 0, C); + N.style.top = oe(-s - f - b.depth), y.marginLeft && (N.style.marginLeft = y.marginLeft), y.marginRight && (N.style.marginRight = y.marginRight), c.push(N), f += b.height + b.depth; + } + h = Math.min(h, f), d = Math.max(d, f); + } + var B = bn(["vlist"], c); + B.style.height = oe(d); + var _; + if (h < 0) { + var A = bn([], []), L = bn(["vlist"], [A]); + L.style.height = oe(-h); + var K = bn(["vlist-s"], [new nr("​")]); + _ = [bn(["vlist-r"], [B, K]), bn(["vlist-r"], [L])]; + } else + _ = [bn(["vlist-r"], [B])]; + var J = bn(["vlist-t"], _); + return _.length === 2 && J.classes.push("vlist-t2"), J.height = d, J.depth = -h, J; +}, yB = (t, e) => { + var n = bn(["mspace"], [], e), r = mt(t, e); + return n.style.marginRight = oe(r), n; +}, Bu = function(e, n, r) { + var i = ""; + switch (e) { + case "amsrm": + i = "AMS"; + break; + case "textrm": + i = "Main"; + break; + case "textsf": + i = "SansSerif"; + break; + case "texttt": + i = "Typewriter"; + break; + default: + i = e; + } + var s; + return n === "textbf" && r === "textit" ? s = "BoldItalic" : n === "textbf" ? s = "Bold" : n === "textit" ? s = "Italic" : s = "Regular", i + "-" + s; +}, e9 = { + // styles + mathbf: { + variant: "bold", + fontName: "Main-Bold" + }, + mathrm: { + variant: "normal", + fontName: "Main-Regular" + }, + textit: { + variant: "italic", + fontName: "Main-Italic" + }, + mathit: { + variant: "italic", + fontName: "Main-Italic" + }, + mathnormal: { + variant: "italic", + fontName: "Math-Italic" + }, + mathsfit: { + variant: "sans-serif-italic", + fontName: "SansSerif-Italic" + }, + // "boldsymbol" is missing because they require the use of multiple fonts: + // Math-BoldItalic and Main-Bold. This is handled by a special case in + // makeOrd which ends up calling boldsymbol. + // families + mathbb: { + variant: "double-struck", + fontName: "AMS-Regular" + }, + mathcal: { + variant: "script", + fontName: "Caligraphic-Regular" + }, + mathfrak: { + variant: "fraktur", + fontName: "Fraktur-Regular" + }, + mathscr: { + variant: "script", + fontName: "Script-Regular" + }, + mathsf: { + variant: "sans-serif", + fontName: "SansSerif-Regular" + }, + mathtt: { + variant: "monospace", + fontName: "Typewriter-Regular" + } +}, t9 = { + // path, width, height + vec: ["vec", 0.471, 0.714], + // values from the font glyph + oiintSize1: ["oiintSize1", 0.957, 0.499], + // oval to overlay the integrand + oiintSize2: ["oiintSize2", 1.472, 0.659], + oiiintSize1: ["oiiintSize1", 1.304, 0.499], + oiiintSize2: ["oiiintSize2", 1.98, 0.659] +}, vB = function(e, n) { + var [r, i, s] = t9[e], o = new fs(r), l = new Si([o], { + width: oe(i), + height: oe(s), + // Override CSS rule `.katex svg { width: 100% }` + style: "width:" + oe(i), + viewBox: "0 0 " + 1e3 * i + " " + 1e3 * s, + preserveAspectRatio: "xMinYMin" + }), a = Xb(["overlay"], [l], n); + return a.height = s, a.style.height = oe(s), a.style.width = oe(i), a; +}, z = { + fontMap: e9, + makeSymbol: cr, + mathsym: lB, + makeSpan: bn, + makeSvgSpan: Xb, + makeLineSpan: dB, + makeAnchor: fB, + makeFragment: Qb, + wrapFragment: pB, + makeVList: gB, + makeOrd: uB, + makeGlue: yB, + staticSvg: vB, + svgData: t9, + tryCombineChars: hB +}, pt = { + number: 3, + unit: "mu" +}, As = { + number: 4, + unit: "mu" +}, Xr = { + number: 5, + unit: "mu" +}, bB = { + mord: { + mop: pt, + mbin: As, + mrel: Xr, + minner: pt + }, + mop: { + mord: pt, + mop: pt, + mrel: Xr, + minner: pt + }, + mbin: { + mord: As, + mop: As, + mopen: As, + minner: As + }, + mrel: { + mord: Xr, + mop: Xr, + mopen: Xr, + minner: Xr + }, + mopen: {}, + mclose: { + mop: pt, + mbin: As, + mrel: Xr, + minner: pt + }, + mpunct: { + mord: pt, + mop: pt, + mrel: Xr, + mopen: pt, + mclose: pt, + mpunct: pt, + minner: pt + }, + minner: { + mord: pt, + mop: pt, + mbin: As, + mrel: Xr, + mopen: pt, + mpunct: pt, + minner: pt + } +}, wB = { + mord: { + mop: pt + }, + mop: { + mord: pt, + mop: pt + }, + mbin: {}, + mrel: {}, + mopen: {}, + mclose: { + mop: pt + }, + mpunct: {}, + minner: { + mop: pt + } +}, n9 = {}, fh = {}, ph = {}; +function ce(t) { + for (var { + type: e, + names: n, + props: r, + handler: i, + htmlBuilder: s, + mathmlBuilder: o + } = t, l = { + type: e, + numArgs: r.numArgs, + argTypes: r.argTypes, + allowedInArgument: !!r.allowedInArgument, + allowedInText: !!r.allowedInText, + allowedInMath: r.allowedInMath === void 0 ? !0 : r.allowedInMath, + numOptionalArgs: r.numOptionalArgs || 0, + infix: !!r.infix, + primitive: !!r.primitive, + handler: i + }, a = 0; a < n.length; ++a) + n9[n[a]] = l; + e && (s && (fh[e] = s), o && (ph[e] = o)); +} +function Mo(t) { + var { + type: e, + htmlBuilder: n, + mathmlBuilder: r + } = t; + ce({ + type: e, + names: [], + props: { + numArgs: 0 + }, + handler() { + throw new Error("Should never be called."); + }, + htmlBuilder: n, + mathmlBuilder: r + }); +} +var mh = function(e) { + return e.type === "ordgroup" && e.body.length === 1 ? e.body[0] : e; +}, xt = function(e) { + return e.type === "ordgroup" ? e.body : [e]; +}, Ci = z.makeSpan, kB = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"], xB = ["rightmost", "mrel", "mclose", "mpunct"], SB = { + display: Se.DISPLAY, + text: Se.TEXT, + script: Se.SCRIPT, + scriptscript: Se.SCRIPTSCRIPT +}, CB = { + mord: "mord", + mop: "mop", + mbin: "mbin", + mrel: "mrel", + mopen: "mopen", + mclose: "mclose", + mpunct: "mpunct", + minner: "minner" +}, Bt = function(e, n, r, i) { + i === void 0 && (i = [null, null]); + for (var s = [], o = 0; o < e.length; o++) { + var l = We(e[o], n); + if (l instanceof mu) { + var a = l.children; + s.push(...a); + } else + s.push(l); + } + if (z.tryCombineChars(s), !r) + return s; + var u = n; + if (e.length === 1) { + var c = e[0]; + c.type === "sizing" ? u = n.havingSize(c.size) : c.type === "styling" && (u = n.havingStyle(SB[c.style])); + } + var h = Ci([i[0] || "leftmost"], [], n), d = Ci([i[1] || "rightmost"], [], n), f = r === "root"; + return W3(s, (m, y) => { + var b = y.classes[0], w = m.classes[0]; + b === "mbin" && xB.includes(w) ? y.classes[0] = "mord" : w === "mbin" && kB.includes(b) && (m.classes[0] = "mord"); + }, { + node: h + }, d, f), W3(s, (m, y) => { + var b = qp(y), w = qp(m), C = b && w ? m.hasClass("mtight") ? wB[b][w] : bB[b][w] : null; + if (C) + return z.makeGlue(C, u); + }, { + node: h + }, d, f), s; +}, W3 = function t(e, n, r, i, s) { + i && e.push(i); + for (var o = 0; o < e.length; o++) { + var l = e[o], a = r9(l); + if (a) { + t(a.children, n, r, null, s); + continue; + } + var u = !l.hasClass("mspace"); + if (u) { + var c = n(l, r.node); + c && (r.insertAfter ? r.insertAfter(c) : (e.unshift(c), o++)); + } + u ? r.node = l : s && l.hasClass("newline") && (r.node = Ci(["leftmost"])), r.insertAfter = /* @__PURE__ */ ((h) => (d) => { + e.splice(h + 1, 0, d), o++; + })(o); + } + i && e.pop(); +}, r9 = function(e) { + return e instanceof mu || e instanceof kg || e instanceof gu && e.hasClass("enclosing") ? e : null; +}, NB = function t(e, n) { + var r = r9(e); + if (r) { + var i = r.children; + if (i.length) { + if (n === "right") + return t(i[i.length - 1], "right"); + if (n === "left") + return t(i[0], "left"); + } + } + return e; +}, qp = function(e, n) { + return e ? (n && (e = NB(e, n)), CB[e.classes[0]] || null) : null; +}, w0 = function(e, n) { + var r = ["nulldelimiter"].concat(e.baseSizingClasses()); + return Ci(n.concat(r)); +}, We = function(e, n, r) { + if (!e) + return Ci(); + if (fh[e.type]) { + var i = fh[e.type](e, n); + if (r && n.size !== r.size) { + i = Ci(n.sizingClasses(r), [i], n); + var s = n.sizeMultiplier / r.sizeMultiplier; + i.height *= s, i.depth *= s; + } + return i; + } else + throw new Q("Got group of unknown type: '" + e.type + "'"); +}; +function Lu(t, e) { + var n = Ci(["base"], t, e), r = Ci(["strut"]); + return r.style.height = oe(n.height + n.depth), n.depth && (r.style.verticalAlign = oe(-n.depth)), n.children.unshift(r), n; +} +function jp(t, e) { + var n = null; + t.length === 1 && t[0].type === "tag" && (n = t[0].tag, t = t[0].body); + var r = Bt(t, e, "root"), i; + r.length === 2 && r[1].hasClass("tag") && (i = r.pop()); + for (var s = [], o = [], l = 0; l < r.length; l++) + if (o.push(r[l]), r[l].hasClass("mbin") || r[l].hasClass("mrel") || r[l].hasClass("allowbreak")) { + for (var a = !1; l < r.length - 1 && r[l + 1].hasClass("mspace") && !r[l + 1].hasClass("newline"); ) + l++, o.push(r[l]), r[l].hasClass("nobreak") && (a = !0); + a || (s.push(Lu(o, e)), o = []); + } else r[l].hasClass("newline") && (o.pop(), o.length > 0 && (s.push(Lu(o, e)), o = []), s.push(r[l])); + o.length > 0 && s.push(Lu(o, e)); + var u; + n ? (u = Lu(Bt(n, e, !0)), u.classes = ["tag"], s.push(u)) : i && s.push(i); + var c = Ci(["katex-html"], s); + if (c.setAttribute("aria-hidden", "true"), u) { + var h = u.children[0]; + h.style.height = oe(c.height + c.depth), c.depth && (h.style.verticalAlign = oe(-c.depth)); + } + return c; +} +function i9(t) { + return new mu(t); +} +class Fn { + constructor(e, n, r) { + this.type = void 0, this.attributes = void 0, this.children = void 0, this.classes = void 0, this.type = e, this.attributes = {}, this.children = n || [], this.classes = r || []; + } + /** + * Sets an attribute on a MathML node. MathML depends on attributes to convey a + * semantic content, so this is used heavily. + */ + setAttribute(e, n) { + this.attributes[e] = n; + } + /** + * Gets an attribute on a MathML node. + */ + getAttribute(e) { + return this.attributes[e]; + } + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + toNode() { + var e = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type); + for (var n in this.attributes) + Object.prototype.hasOwnProperty.call(this.attributes, n) && e.setAttribute(n, this.attributes[n]); + this.classes.length > 0 && (e.className = ds(this.classes)); + for (var r = 0; r < this.children.length; r++) + if (this.children[r] instanceof Lr && this.children[r + 1] instanceof Lr) { + for (var i = this.children[r].toText() + this.children[++r].toText(); this.children[r + 1] instanceof Lr; ) + i += this.children[++r].toText(); + e.appendChild(new Lr(i).toNode()); + } else + e.appendChild(this.children[r].toNode()); + return e; + } + /** + * Converts the math node into an HTML markup string. + */ + toMarkup() { + var e = "<" + this.type; + for (var n in this.attributes) + Object.prototype.hasOwnProperty.call(this.attributes, n) && (e += " " + n + '="', e += Ke.escape(this.attributes[n]), e += '"'); + this.classes.length > 0 && (e += ' class ="' + Ke.escape(ds(this.classes)) + '"'), e += ">"; + for (var r = 0; r < this.children.length; r++) + e += this.children[r].toMarkup(); + return e += "</" + this.type + ">", e; + } + /** + * Converts the math node into a string, similar to innerText, but escaped. + */ + toText() { + return this.children.map((e) => e.toText()).join(""); + } +} +class Lr { + constructor(e) { + this.text = void 0, this.text = e; + } + /** + * Converts the text node into a DOM text node. + */ + toNode() { + return document.createTextNode(this.text); + } + /** + * Converts the text node into escaped HTML markup + * (representing the text itself). + */ + toMarkup() { + return Ke.escape(this.toText()); + } + /** + * Converts the text node into a string + * (representing the text itself). + */ + toText() { + return this.text; + } +} +class MB { + /** + * Create a Space node with width given in CSS ems. + */ + constructor(e) { + this.width = void 0, this.character = void 0, this.width = e, e >= 0.05555 && e <= 0.05556 ? this.character = " " : e >= 0.1666 && e <= 0.1667 ? this.character = " " : e >= 0.2222 && e <= 0.2223 ? this.character = " " : e >= 0.2777 && e <= 0.2778 ? this.character = "  " : e >= -0.05556 && e <= -0.05555 ? this.character = " ⁣" : e >= -0.1667 && e <= -0.1666 ? this.character = " ⁣" : e >= -0.2223 && e <= -0.2222 ? this.character = " ⁣" : e >= -0.2778 && e <= -0.2777 ? this.character = " ⁣" : this.character = null; + } + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + toNode() { + if (this.character) + return document.createTextNode(this.character); + var e = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace"); + return e.setAttribute("width", oe(this.width)), e; + } + /** + * Converts the math node into an HTML markup string. + */ + toMarkup() { + return this.character ? "<mtext>" + this.character + "</mtext>" : '<mspace width="' + oe(this.width) + '"/>'; + } + /** + * Converts the math node into a string, similar to innerText. + */ + toText() { + return this.character ? this.character : " "; + } +} +var Y = { + MathNode: Fn, + TextNode: Lr, + SpaceNode: MB, + newDocumentFragment: i9 +}, rr = function(e, n, r) { + return ot[n][e] && ot[n][e].replace && e.charCodeAt(0) !== 55349 && !(Zb.hasOwnProperty(e) && r && (r.fontFamily && r.fontFamily.slice(4, 6) === "tt" || r.font && r.font.slice(4, 6) === "tt")) && (e = ot[n][e].replace), new Y.TextNode(e); +}, Sg = function(e) { + return e.length === 1 ? e[0] : new Y.MathNode("mrow", e); +}, Cg = function(e, n) { + if (n.fontFamily === "texttt") + return "monospace"; + if (n.fontFamily === "textsf") + return n.fontShape === "textit" && n.fontWeight === "textbf" ? "sans-serif-bold-italic" : n.fontShape === "textit" ? "sans-serif-italic" : n.fontWeight === "textbf" ? "bold-sans-serif" : "sans-serif"; + if (n.fontShape === "textit" && n.fontWeight === "textbf") + return "bold-italic"; + if (n.fontShape === "textit") + return "italic"; + if (n.fontWeight === "textbf") + return "bold"; + var r = n.font; + if (!r || r === "mathnormal") + return null; + var i = e.mode; + if (r === "mathit") + return "italic"; + if (r === "boldsymbol") + return e.type === "textord" ? "bold" : "bold-italic"; + if (r === "mathbf") + return "bold"; + if (r === "mathbb") + return "double-struck"; + if (r === "mathsfit") + return "sans-serif-italic"; + if (r === "mathfrak") + return "fraktur"; + if (r === "mathscr" || r === "mathcal") + return "script"; + if (r === "mathsf") + return "sans-serif"; + if (r === "mathtt") + return "monospace"; + var s = e.text; + if (["\\imath", "\\jmath"].includes(s)) + return null; + ot[i][s] && ot[i][s].replace && (s = ot[i][s].replace); + var o = z.fontMap[r].fontName; + return wg(s, o, i) ? z.fontMap[r].variant : null; +}; +function xf(t) { + if (!t) + return !1; + if (t.type === "mi" && t.children.length === 1) { + var e = t.children[0]; + return e instanceof Lr && e.text === "."; + } else if (t.type === "mo" && t.children.length === 1 && t.getAttribute("separator") === "true" && t.getAttribute("lspace") === "0em" && t.getAttribute("rspace") === "0em") { + var n = t.children[0]; + return n instanceof Lr && n.text === ","; + } else + return !1; +} +var An = function(e, n, r) { + if (e.length === 1) { + var i = st(e[0], n); + return r && i instanceof Fn && i.type === "mo" && (i.setAttribute("lspace", "0em"), i.setAttribute("rspace", "0em")), [i]; + } + for (var s = [], o, l = 0; l < e.length; l++) { + var a = st(e[l], n); + if (a instanceof Fn && o instanceof Fn) { + if (a.type === "mtext" && o.type === "mtext" && a.getAttribute("mathvariant") === o.getAttribute("mathvariant")) { + o.children.push(...a.children); + continue; + } else if (a.type === "mn" && o.type === "mn") { + o.children.push(...a.children); + continue; + } else if (xf(a) && o.type === "mn") { + o.children.push(...a.children); + continue; + } else if (a.type === "mn" && xf(o)) + a.children = [...o.children, ...a.children], s.pop(); + else if ((a.type === "msup" || a.type === "msub") && a.children.length >= 1 && (o.type === "mn" || xf(o))) { + var u = a.children[0]; + u instanceof Fn && u.type === "mn" && (u.children = [...o.children, ...u.children], s.pop()); + } else if (o.type === "mi" && o.children.length === 1) { + var c = o.children[0]; + if (c instanceof Lr && c.text === "̸" && (a.type === "mo" || a.type === "mi" || a.type === "mn")) { + var h = a.children[0]; + h instanceof Lr && h.text.length > 0 && (h.text = h.text.slice(0, 1) + "̸" + h.text.slice(1), s.pop()); + } + } + } + s.push(a), o = a; + } + return s; +}, ps = function(e, n, r) { + return Sg(An(e, n, r)); +}, st = function(e, n) { + if (!e) + return new Y.MathNode("mrow"); + if (ph[e.type]) { + var r = ph[e.type](e, n); + return r; + } else + throw new Q("Got group of unknown type: '" + e.type + "'"); +}; +function U3(t, e, n, r, i) { + var s = An(t, n), o; + s.length === 1 && s[0] instanceof Fn && ["mrow", "mtable"].includes(s[0].type) ? o = s[0] : o = new Y.MathNode("mrow", s); + var l = new Y.MathNode("annotation", [new Y.TextNode(e)]); + l.setAttribute("encoding", "application/x-tex"); + var a = new Y.MathNode("semantics", [o, l]), u = new Y.MathNode("math", [a]); + u.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML"), r && u.setAttribute("display", "block"); + var c = i ? "katex" : "katex-mathml"; + return z.makeSpan([c], [u]); +} +var s9 = function(e) { + return new li({ + style: e.displayMode ? Se.DISPLAY : Se.TEXT, + maxSize: e.maxSize, + minRuleThickness: e.minRuleThickness + }); +}, o9 = function(e, n) { + if (n.displayMode) { + var r = ["katex-display"]; + n.leqno && r.push("leqno"), n.fleqn && r.push("fleqn"), e = z.makeSpan(r, [e]); + } + return e; +}, TB = function(e, n, r) { + var i = s9(r), s; + if (r.output === "mathml") + return U3(e, n, i, r.displayMode, !0); + if (r.output === "html") { + var o = jp(e, i); + s = z.makeSpan(["katex"], [o]); + } else { + var l = U3(e, n, i, r.displayMode, !1), a = jp(e, i); + s = z.makeSpan(["katex"], [l, a]); + } + return o9(s, r); +}, EB = function(e, n, r) { + var i = s9(r), s = jp(e, i), o = z.makeSpan(["katex"], [s]); + return o9(o, r); +}, OB = { + widehat: "^", + widecheck: "ˇ", + widetilde: "~", + utilde: "~", + overleftarrow: "←", + underleftarrow: "←", + xleftarrow: "←", + overrightarrow: "→", + underrightarrow: "→", + xrightarrow: "→", + underbrace: "⏟", + overbrace: "⏞", + overgroup: "⏠", + undergroup: "⏡", + overleftrightarrow: "↔", + underleftrightarrow: "↔", + xleftrightarrow: "↔", + Overrightarrow: "⇒", + xRightarrow: "⇒", + overleftharpoon: "↼", + xleftharpoonup: "↼", + overrightharpoon: "⇀", + xrightharpoonup: "⇀", + xLeftarrow: "⇐", + xLeftrightarrow: "⇔", + xhookleftarrow: "↩", + xhookrightarrow: "↪", + xmapsto: "↦", + xrightharpoondown: "⇁", + xleftharpoondown: "↽", + xrightleftharpoons: "⇌", + xleftrightharpoons: "⇋", + xtwoheadleftarrow: "↞", + xtwoheadrightarrow: "↠", + xlongequal: "=", + xtofrom: "⇄", + xrightleftarrows: "⇄", + xrightequilibrium: "⇌", + // Not a perfect match. + xleftequilibrium: "⇋", + // None better available. + "\\cdrightarrow": "→", + "\\cdleftarrow": "←", + "\\cdlongequal": "=" +}, AB = function(e) { + var n = new Y.MathNode("mo", [new Y.TextNode(OB[e.replace(/^\\/, "")])]); + return n.setAttribute("stretchy", "true"), n; +}, IB = { + // path(s), minWidth, height, align + overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"], + "\\cdrightarrow": [["rightarrow"], 3, 522, "xMaxYMin"], + // CD minwwidth2.5pc + xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"], + "\\cdleftarrow": [["leftarrow"], 3, 522, "xMinYMin"], + Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"], + xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"], + xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"], + overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"], + overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"], + xlongequal: [["longequal"], 0.888, 334, "xMinYMin"], + "\\cdlongequal": [["longequal"], 3, 334, "xMinYMin"], + xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"], + xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"], + overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548], + underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548], + underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522], + xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560], + xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716], + xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716], + xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522], + xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522], + overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + overgroup: [["leftgroup", "rightgroup"], 0.888, 342], + undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342], + xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522], + xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528], + // The next three arrows are from the mhchem package. + // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the + // document as \xrightarrow or \xrightleftharpoons. Those have + // min-length = 1.75em, so we set min-length on these next three to match. + xrightleftarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901], + xrightequilibrium: [["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], 1.75, 716], + xleftequilibrium: [["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], 1.75, 716] +}, DB = function(e) { + return e.type === "ordgroup" ? e.body.length : 1; +}, _B = function(e, n) { + function r() { + var l = 4e5, a = e.label.slice(1); + if (["widehat", "widecheck", "widetilde", "utilde"].includes(a)) { + var u = e, c = DB(u.base), h, d, f; + if (c > 5) + a === "widehat" || a === "widecheck" ? (h = 420, l = 2364, f = 0.42, d = a + "4") : (h = 312, l = 2340, f = 0.34, d = "tilde4"); + else { + var m = [1, 1, 2, 2, 3, 3][c]; + a === "widehat" || a === "widecheck" ? (l = [0, 1062, 2364, 2364, 2364][m], h = [0, 239, 300, 360, 420][m], f = [0, 0.24, 0.3, 0.3, 0.36, 0.42][m], d = a + m) : (l = [0, 600, 1033, 2339, 2340][m], h = [0, 260, 286, 306, 312][m], f = [0, 0.26, 0.286, 0.3, 0.306, 0.34][m], d = "tilde" + m); + } + var y = new fs(d), b = new Si([y], { + width: "100%", + height: oe(f), + viewBox: "0 0 " + l + " " + h, + preserveAspectRatio: "none" + }); + return { + span: z.makeSvgSpan([], [b], n), + minWidth: 0, + height: f + }; + } else { + var w = [], C = IB[a], [N, B, _] = C, A = _ / 1e3, L = N.length, K, J; + if (L === 1) { + var P = C[3]; + K = ["hide-tail"], J = [P]; + } else if (L === 2) + K = ["halfarrow-left", "halfarrow-right"], J = ["xMinYMin", "xMaxYMin"]; + else if (L === 3) + K = ["brace-left", "brace-center", "brace-right"], J = ["xMinYMin", "xMidYMin", "xMaxYMin"]; + else + throw new Error(`Correct katexImagesData or update code here to support + ` + L + " children."); + for (var ie = 0; ie < L; ie++) { + var ne = new fs(N[ie]), _e = new Si([ne], { + width: "400em", + height: oe(A), + viewBox: "0 0 " + l + " " + _, + preserveAspectRatio: J[ie] + " slice" + }), De = z.makeSvgSpan([K[ie]], [_e], n); + if (L === 1) + return { + span: De, + minWidth: B, + height: A + }; + De.style.height = oe(A), w.push(De); + } + return { + span: z.makeSpan(["stretchy"], w, n), + minWidth: B, + height: A + }; + } + } + var { + span: i, + minWidth: s, + height: o + } = r(); + return i.height = o, i.style.height = oe(o), s > 0 && (i.style.minWidth = oe(s)), i; +}, RB = function(e, n, r, i, s) { + var o, l = e.height + e.depth + r + i; + if (/fbox|color|angl/.test(n)) { + if (o = z.makeSpan(["stretchy", n], [], s), n === "fbox") { + var a = s.color && s.getColor(); + a && (o.style.borderColor = a); + } + } else { + var u = []; + /^[bx]cancel$/.test(n) && u.push(new Hp({ + x1: "0", + y1: "0", + x2: "100%", + y2: "100%", + "stroke-width": "0.046em" + })), /^x?cancel$/.test(n) && u.push(new Hp({ + x1: "0", + y1: "100%", + x2: "100%", + y2: "0", + "stroke-width": "0.046em" + })); + var c = new Si(u, { + width: "100%", + height: oe(l) + }); + o = z.makeSvgSpan([], [c], s); + } + return o.height = l, o.style.height = oe(l), o; +}, Ni = { + encloseSpan: RB, + mathMLnode: AB, + svgSpan: _B +}; +function Be(t, e) { + if (!t || t.type !== e) + throw new Error("Expected node of type " + e + ", but got " + (t ? "node of type " + t.type : String(t))); + return t; +} +function Ng(t) { + var e = sd(t); + if (!e) + throw new Error("Expected node of symbol group type, but got " + (t ? "node of type " + t.type : String(t))); + return e; +} +function sd(t) { + return t && (t.type === "atom" || sB.hasOwnProperty(t.type)) ? t : null; +} +var Mg = (t, e) => { + var n, r, i; + t && t.type === "supsub" ? (r = Be(t.base, "accent"), n = r.base, t.base = n, i = rB(We(t, e)), t.base = r) : (r = Be(t, "accent"), n = r.base); + var s = We(n, e.havingCrampedStyle()), o = r.isShifty && Ke.isCharacterBox(n), l = 0; + if (o) { + var a = Ke.getBaseElem(n), u = We(a, e.havingCrampedStyle()); + l = F3(u).skew; + } + var c = r.label === "\\c", h = c ? s.height + s.depth : Math.min(s.height, e.fontMetrics().xHeight), d; + if (r.isStretchy) + d = Ni.svgSpan(r, e), d = z.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: s + }, { + type: "elem", + elem: d, + wrapperClasses: ["svg-align"], + wrapperStyle: l > 0 ? { + width: "calc(100% - " + oe(2 * l) + ")", + marginLeft: oe(2 * l) + } : void 0 + }] + }, e); + else { + var f, m; + r.label === "\\vec" ? (f = z.staticSvg("vec", e), m = z.svgData.vec[1]) : (f = z.makeOrd({ + mode: r.mode, + text: r.label + }, e, "textord"), f = F3(f), f.italic = 0, m = f.width, c && (h += f.depth)), d = z.makeSpan(["accent-body"], [f]); + var y = r.label === "\\textcircled"; + y && (d.classes.push("accent-full"), h = s.height); + var b = l; + y || (b -= m / 2), d.style.left = oe(b), r.label === "\\textcircled" && (d.style.top = ".2em"), d = z.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: s + }, { + type: "kern", + size: -h + }, { + type: "elem", + elem: d + }] + }, e); + } + var w = z.makeSpan(["mord", "accent"], [d], e); + return i ? (i.children[0] = w, i.height = Math.max(w.height, i.height), i.classes[0] = "mord", i) : w; +}, l9 = (t, e) => { + var n = t.isStretchy ? Ni.mathMLnode(t.label) : new Y.MathNode("mo", [rr(t.label, t.mode)]), r = new Y.MathNode("mover", [st(t.base, e), n]); + return r.setAttribute("accent", "true"), r; +}, zB = new RegExp(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring"].map((t) => "\\" + t).join("|")); +ce({ + type: "accent", + names: ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring", "\\widecheck", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"], + props: { + numArgs: 1 + }, + handler: (t, e) => { + var n = mh(e[0]), r = !zB.test(t.funcName), i = !r || t.funcName === "\\widehat" || t.funcName === "\\widetilde" || t.funcName === "\\widecheck"; + return { + type: "accent", + mode: t.parser.mode, + label: t.funcName, + isStretchy: r, + isShifty: i, + base: n + }; + }, + htmlBuilder: Mg, + mathmlBuilder: l9 +}); +ce({ + type: "accent", + names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\c", "\\r", "\\H", "\\v", "\\textcircled"], + props: { + numArgs: 1, + allowedInText: !0, + allowedInMath: !0, + // unless in strict mode + argTypes: ["primitive"] + }, + handler: (t, e) => { + var n = e[0], r = t.parser.mode; + return r === "math" && (t.parser.settings.reportNonstrict("mathVsTextAccents", "LaTeX's accent " + t.funcName + " works only in text mode"), r = "text"), { + type: "accent", + mode: r, + label: t.funcName, + isStretchy: !1, + isShifty: !0, + base: n + }; + }, + htmlBuilder: Mg, + mathmlBuilder: l9 +}); +ce({ + type: "accentUnder", + names: ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"], + props: { + numArgs: 1 + }, + handler: (t, e) => { + var { + parser: n, + funcName: r + } = t, i = e[0]; + return { + type: "accentUnder", + mode: n.mode, + label: r, + base: i + }; + }, + htmlBuilder: (t, e) => { + var n = We(t.base, e), r = Ni.svgSpan(t, e), i = t.label === "\\utilde" ? 0.12 : 0, s = z.makeVList({ + positionType: "top", + positionData: n.height, + children: [{ + type: "elem", + elem: r, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: i + }, { + type: "elem", + elem: n + }] + }, e); + return z.makeSpan(["mord", "accentunder"], [s], e); + }, + mathmlBuilder: (t, e) => { + var n = Ni.mathMLnode(t.label), r = new Y.MathNode("munder", [st(t.base, e), n]); + return r.setAttribute("accentunder", "true"), r; + } +}); +var Fu = (t) => { + var e = new Y.MathNode("mpadded", t ? [t] : []); + return e.setAttribute("width", "+0.6em"), e.setAttribute("lspace", "0.3em"), e; +}; +ce({ + type: "xArrow", + names: [ + "\\xleftarrow", + "\\xrightarrow", + "\\xLeftarrow", + "\\xRightarrow", + "\\xleftrightarrow", + "\\xLeftrightarrow", + "\\xhookleftarrow", + "\\xhookrightarrow", + "\\xmapsto", + "\\xrightharpoondown", + "\\xrightharpoonup", + "\\xleftharpoondown", + "\\xleftharpoonup", + "\\xrightleftharpoons", + "\\xleftrightharpoons", + "\\xlongequal", + "\\xtwoheadrightarrow", + "\\xtwoheadleftarrow", + "\\xtofrom", + // The next 3 functions are here to support the mhchem extension. + // Direct use of these functions is discouraged and may break someday. + "\\xrightleftarrows", + "\\xrightequilibrium", + "\\xleftequilibrium", + // The next 3 functions are here only to support the {CD} environment. + "\\\\cdrightarrow", + "\\\\cdleftarrow", + "\\\\cdlongequal" + ], + props: { + numArgs: 1, + numOptionalArgs: 1 + }, + handler(t, e, n) { + var { + parser: r, + funcName: i + } = t; + return { + type: "xArrow", + mode: r.mode, + label: i, + body: e[0], + below: n[0] + }; + }, + // Flow is unable to correctly infer the type of `group`, even though it's + // unambiguously determined from the passed-in `type` above. + htmlBuilder(t, e) { + var n = e.style, r = e.havingStyle(n.sup()), i = z.wrapFragment(We(t.body, r, e), e), s = t.label.slice(0, 2) === "\\x" ? "x" : "cd"; + i.classes.push(s + "-arrow-pad"); + var o; + t.below && (r = e.havingStyle(n.sub()), o = z.wrapFragment(We(t.below, r, e), e), o.classes.push(s + "-arrow-pad")); + var l = Ni.svgSpan(t, e), a = -e.fontMetrics().axisHeight + 0.5 * l.height, u = -e.fontMetrics().axisHeight - 0.5 * l.height - 0.111; + (i.depth > 0.25 || t.label === "\\xleftequilibrium") && (u -= i.depth); + var c; + if (o) { + var h = -e.fontMetrics().axisHeight + o.height + 0.5 * l.height + 0.111; + c = z.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: i, + shift: u + }, { + type: "elem", + elem: l, + shift: a + }, { + type: "elem", + elem: o, + shift: h + }] + }, e); + } else + c = z.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: i, + shift: u + }, { + type: "elem", + elem: l, + shift: a + }] + }, e); + return c.children[0].children[0].children[1].classes.push("svg-align"), z.makeSpan(["mrel", "x-arrow"], [c], e); + }, + mathmlBuilder(t, e) { + var n = Ni.mathMLnode(t.label); + n.setAttribute("minsize", t.label.charAt(0) === "x" ? "1.75em" : "3.0em"); + var r; + if (t.body) { + var i = Fu(st(t.body, e)); + if (t.below) { + var s = Fu(st(t.below, e)); + r = new Y.MathNode("munderover", [n, s, i]); + } else + r = new Y.MathNode("mover", [n, i]); + } else if (t.below) { + var o = Fu(st(t.below, e)); + r = new Y.MathNode("munder", [n, o]); + } else + r = Fu(), r = new Y.MathNode("mover", [n, r]); + return r; + } +}); +var PB = z.makeSpan; +function a9(t, e) { + var n = Bt(t.body, e, !0); + return PB([t.mclass], n, e); +} +function u9(t, e) { + var n, r = An(t.body, e); + return t.mclass === "minner" ? n = new Y.MathNode("mpadded", r) : t.mclass === "mord" ? t.isCharacterBox ? (n = r[0], n.type = "mi") : n = new Y.MathNode("mi", r) : (t.isCharacterBox ? (n = r[0], n.type = "mo") : n = new Y.MathNode("mo", r), t.mclass === "mbin" ? (n.attributes.lspace = "0.22em", n.attributes.rspace = "0.22em") : t.mclass === "mpunct" ? (n.attributes.lspace = "0em", n.attributes.rspace = "0.17em") : t.mclass === "mopen" || t.mclass === "mclose" ? (n.attributes.lspace = "0em", n.attributes.rspace = "0em") : t.mclass === "minner" && (n.attributes.lspace = "0.0556em", n.attributes.width = "+0.1111em")), n; +} +ce({ + type: "mclass", + names: ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"], + props: { + numArgs: 1, + primitive: !0 + }, + handler(t, e) { + var { + parser: n, + funcName: r + } = t, i = e[0]; + return { + type: "mclass", + mode: n.mode, + mclass: "m" + r.slice(5), + // TODO(kevinb): don't prefix with 'm' + body: xt(i), + isCharacterBox: Ke.isCharacterBox(i) + }; + }, + htmlBuilder: a9, + mathmlBuilder: u9 +}); +var od = (t) => { + var e = t.type === "ordgroup" && t.body.length ? t.body[0] : t; + return e.type === "atom" && (e.family === "bin" || e.family === "rel") ? "m" + e.family : "mord"; +}; +ce({ + type: "mclass", + names: ["\\@binrel"], + props: { + numArgs: 2 + }, + handler(t, e) { + var { + parser: n + } = t; + return { + type: "mclass", + mode: n.mode, + mclass: od(e[0]), + body: xt(e[1]), + isCharacterBox: Ke.isCharacterBox(e[1]) + }; + } +}); +ce({ + type: "mclass", + names: ["\\stackrel", "\\overset", "\\underset"], + props: { + numArgs: 2 + }, + handler(t, e) { + var { + parser: n, + funcName: r + } = t, i = e[1], s = e[0], o; + r !== "\\stackrel" ? o = od(i) : o = "mrel"; + var l = { + type: "op", + mode: i.mode, + limits: !0, + alwaysHandleSupSub: !0, + parentIsSupSub: !1, + symbol: !1, + suppressBaseShift: r !== "\\stackrel", + body: xt(i) + }, a = { + type: "supsub", + mode: s.mode, + base: l, + sup: r === "\\underset" ? null : s, + sub: r === "\\underset" ? s : null + }; + return { + type: "mclass", + mode: n.mode, + mclass: o, + body: [a], + isCharacterBox: Ke.isCharacterBox(a) + }; + }, + htmlBuilder: a9, + mathmlBuilder: u9 +}); +ce({ + type: "pmb", + names: ["\\pmb"], + props: { + numArgs: 1, + allowedInText: !0 + }, + handler(t, e) { + var { + parser: n + } = t; + return { + type: "pmb", + mode: n.mode, + mclass: od(e[0]), + body: xt(e[0]) + }; + }, + htmlBuilder(t, e) { + var n = Bt(t.body, e, !0), r = z.makeSpan([t.mclass], n, e); + return r.style.textShadow = "0.02em 0.01em 0.04px", r; + }, + mathmlBuilder(t, e) { + var n = An(t.body, e), r = new Y.MathNode("mstyle", n); + return r.setAttribute("style", "text-shadow: 0.02em 0.01em 0.04px"), r; + } +}); +var BB = { + ">": "\\\\cdrightarrow", + "<": "\\\\cdleftarrow", + "=": "\\\\cdlongequal", + A: "\\uparrow", + V: "\\downarrow", + "|": "\\Vert", + ".": "no arrow" +}, G3 = () => ({ + type: "styling", + body: [], + mode: "math", + style: "display" +}), K3 = (t) => t.type === "textord" && t.text === "@", LB = (t, e) => (t.type === "mathord" || t.type === "atom") && t.text === e; +function FB(t, e, n) { + var r = BB[t]; + switch (r) { + case "\\\\cdrightarrow": + case "\\\\cdleftarrow": + return n.callFunction(r, [e[0]], [e[1]]); + case "\\uparrow": + case "\\downarrow": { + var i = n.callFunction("\\\\cdleft", [e[0]], []), s = { + type: "atom", + text: r, + mode: "math", + family: "rel" + }, o = n.callFunction("\\Big", [s], []), l = n.callFunction("\\\\cdright", [e[1]], []), a = { + type: "ordgroup", + mode: "math", + body: [i, o, l] + }; + return n.callFunction("\\\\cdparent", [a], []); + } + case "\\\\cdlongequal": + return n.callFunction("\\\\cdlongequal", [], []); + case "\\Vert": { + var u = { + type: "textord", + text: "\\Vert", + mode: "math" + }; + return n.callFunction("\\Big", [u], []); + } + default: + return { + type: "textord", + text: " ", + mode: "math" + }; + } +} +function VB(t) { + var e = []; + for (t.gullet.beginGroup(), t.gullet.macros.set("\\cr", "\\\\\\relax"), t.gullet.beginGroup(); ; ) { + e.push(t.parseExpression(!1, "\\\\")), t.gullet.endGroup(), t.gullet.beginGroup(); + var n = t.fetch().text; + if (n === "&" || n === "\\\\") + t.consume(); + else if (n === "\\end") { + e[e.length - 1].length === 0 && e.pop(); + break; + } else + throw new Q("Expected \\\\ or \\cr or \\end", t.nextToken); + } + for (var r = [], i = [r], s = 0; s < e.length; s++) { + for (var o = e[s], l = G3(), a = 0; a < o.length; a++) + if (!K3(o[a])) + l.body.push(o[a]); + else { + r.push(l), a += 1; + var u = Ng(o[a]).text, c = new Array(2); + if (c[0] = { + type: "ordgroup", + mode: "math", + body: [] + }, c[1] = { + type: "ordgroup", + mode: "math", + body: [] + }, !("=|.".indexOf(u) > -1)) if ("<>AV".indexOf(u) > -1) + for (var h = 0; h < 2; h++) { + for (var d = !0, f = a + 1; f < o.length; f++) { + if (LB(o[f], u)) { + d = !1, a = f; + break; + } + if (K3(o[f])) + throw new Q("Missing a " + u + " character to complete a CD arrow.", o[f]); + c[h].body.push(o[f]); + } + if (d) + throw new Q("Missing a " + u + " character to complete a CD arrow.", o[a]); + } + else + throw new Q('Expected one of "<>AV=|." after @', o[a]); + var m = FB(u, c, t), y = { + type: "styling", + body: [m], + mode: "math", + style: "display" + // CD is always displaystyle. + }; + r.push(y), l = G3(); + } + s % 2 === 0 ? r.push(l) : r.shift(), r = [], i.push(r); + } + t.gullet.endGroup(), t.gullet.endGroup(); + var b = new Array(i[0].length).fill({ + type: "align", + align: "c", + pregap: 0.25, + // CD package sets \enskip between columns. + postgap: 0.25 + // So pre and post each get half an \enskip, i.e. 0.25em. + }); + return { + type: "array", + mode: "math", + body: i, + arraystretch: 1, + addJot: !0, + rowGaps: [null], + cols: b, + colSeparationType: "CD", + hLinesBeforeRow: new Array(i.length + 1).fill([]) + }; +} +ce({ + type: "cdlabel", + names: ["\\\\cdleft", "\\\\cdright"], + props: { + numArgs: 1 + }, + handler(t, e) { + var { + parser: n, + funcName: r + } = t; + return { + type: "cdlabel", + mode: n.mode, + side: r.slice(4), + label: e[0] + }; + }, + htmlBuilder(t, e) { + var n = e.havingStyle(e.style.sup()), r = z.wrapFragment(We(t.label, n, e), e); + return r.classes.push("cd-label-" + t.side), r.style.bottom = oe(0.8 - r.depth), r.height = 0, r.depth = 0, r; + }, + mathmlBuilder(t, e) { + var n = new Y.MathNode("mrow", [st(t.label, e)]); + return n = new Y.MathNode("mpadded", [n]), n.setAttribute("width", "0"), t.side === "left" && n.setAttribute("lspace", "-1width"), n.setAttribute("voffset", "0.7em"), n = new Y.MathNode("mstyle", [n]), n.setAttribute("displaystyle", "false"), n.setAttribute("scriptlevel", "1"), n; + } +}); +ce({ + type: "cdlabelparent", + names: ["\\\\cdparent"], + props: { + numArgs: 1 + }, + handler(t, e) { + var { + parser: n + } = t; + return { + type: "cdlabelparent", + mode: n.mode, + fragment: e[0] + }; + }, + htmlBuilder(t, e) { + var n = z.wrapFragment(We(t.fragment, e), e); + return n.classes.push("cd-vert-arrow"), n; + }, + mathmlBuilder(t, e) { + return new Y.MathNode("mrow", [st(t.fragment, e)]); + } +}); +ce({ + type: "textord", + names: ["\\@char"], + props: { + numArgs: 1, + allowedInText: !0 + }, + handler(t, e) { + for (var { + parser: n + } = t, r = Be(e[0], "ordgroup"), i = r.body, s = "", o = 0; o < i.length; o++) { + var l = Be(i[o], "textord"); + s += l.text; + } + var a = parseInt(s), u; + if (isNaN(a)) + throw new Q("\\@char has non-numeric argument " + s); + if (a < 0 || a >= 1114111) + throw new Q("\\@char with invalid code point " + s); + return a <= 65535 ? u = String.fromCharCode(a) : (a -= 65536, u = String.fromCharCode((a >> 10) + 55296, (a & 1023) + 56320)), { + type: "textord", + mode: n.mode, + text: u + }; + } +}); +var c9 = (t, e) => { + var n = Bt(t.body, e.withColor(t.color), !1); + return z.makeFragment(n); +}, h9 = (t, e) => { + var n = An(t.body, e.withColor(t.color)), r = new Y.MathNode("mstyle", n); + return r.setAttribute("mathcolor", t.color), r; +}; +ce({ + type: "color", + names: ["\\textcolor"], + props: { + numArgs: 2, + allowedInText: !0, + argTypes: ["color", "original"] + }, + handler(t, e) { + var { + parser: n + } = t, r = Be(e[0], "color-token").color, i = e[1]; + return { + type: "color", + mode: n.mode, + color: r, + body: xt(i) + }; + }, + htmlBuilder: c9, + mathmlBuilder: h9 +}); +ce({ + type: "color", + names: ["\\color"], + props: { + numArgs: 1, + allowedInText: !0, + argTypes: ["color"] + }, + handler(t, e) { + var { + parser: n, + breakOnTokenText: r + } = t, i = Be(e[0], "color-token").color; + n.gullet.macros.set("\\current@color", i); + var s = n.parseExpression(!0, r); + return { + type: "color", + mode: n.mode, + color: i, + body: s + }; + }, + htmlBuilder: c9, + mathmlBuilder: h9 +}); +ce({ + type: "cr", + names: ["\\\\"], + props: { + numArgs: 0, + numOptionalArgs: 0, + allowedInText: !0 + }, + handler(t, e, n) { + var { + parser: r + } = t, i = r.gullet.future().text === "[" ? r.parseSizeGroup(!0) : null, s = !r.settings.displayMode || !r.settings.useStrictBehavior("newLineInDisplayMode", "In LaTeX, \\\\ or \\newline does nothing in display mode"); + return { + type: "cr", + mode: r.mode, + newLine: s, + size: i && Be(i, "size").value + }; + }, + // The following builders are called only at the top level, + // not within tabular/array environments. + htmlBuilder(t, e) { + var n = z.makeSpan(["mspace"], [], e); + return t.newLine && (n.classes.push("newline"), t.size && (n.style.marginTop = oe(mt(t.size, e)))), n; + }, + mathmlBuilder(t, e) { + var n = new Y.MathNode("mspace"); + return t.newLine && (n.setAttribute("linebreak", "newline"), t.size && n.setAttribute("height", oe(mt(t.size, e)))), n; + } +}); +var Wp = { + "\\global": "\\global", + "\\long": "\\\\globallong", + "\\\\globallong": "\\\\globallong", + "\\def": "\\gdef", + "\\gdef": "\\gdef", + "\\edef": "\\xdef", + "\\xdef": "\\xdef", + "\\let": "\\\\globallet", + "\\futurelet": "\\\\globalfuture" +}, d9 = (t) => { + var e = t.text; + if (/^(?:[\\{}$&#^_]|EOF)$/.test(e)) + throw new Q("Expected a control sequence", t); + return e; +}, HB = (t) => { + var e = t.gullet.popToken(); + return e.text === "=" && (e = t.gullet.popToken(), e.text === " " && (e = t.gullet.popToken())), e; +}, f9 = (t, e, n, r) => { + var i = t.gullet.macros.get(n.text); + i == null && (n.noexpand = !0, i = { + tokens: [n], + numArgs: 0, + // reproduce the same behavior in expansion + unexpandable: !t.gullet.isExpandable(n.text) + }), t.gullet.macros.set(e, i, r); +}; +ce({ + type: "internal", + names: [ + "\\global", + "\\long", + "\\\\globallong" + // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: !0 + }, + handler(t) { + var { + parser: e, + funcName: n + } = t; + e.consumeSpaces(); + var r = e.fetch(); + if (Wp[r.text]) + return (n === "\\global" || n === "\\\\globallong") && (r.text = Wp[r.text]), Be(e.parseFunction(), "internal"); + throw new Q("Invalid token after macro prefix", r); + } +}); +ce({ + type: "internal", + names: ["\\def", "\\gdef", "\\edef", "\\xdef"], + props: { + numArgs: 0, + allowedInText: !0, + primitive: !0 + }, + handler(t) { + var { + parser: e, + funcName: n + } = t, r = e.gullet.popToken(), i = r.text; + if (/^(?:[\\{}$&#^_]|EOF)$/.test(i)) + throw new Q("Expected a control sequence", r); + for (var s = 0, o, l = [[]]; e.gullet.future().text !== "{"; ) + if (r = e.gullet.popToken(), r.text === "#") { + if (e.gullet.future().text === "{") { + o = e.gullet.future(), l[s].push("{"); + break; + } + if (r = e.gullet.popToken(), !/^[1-9]$/.test(r.text)) + throw new Q('Invalid argument number "' + r.text + '"'); + if (parseInt(r.text) !== s + 1) + throw new Q('Argument number "' + r.text + '" out of order'); + s++, l.push([]); + } else { + if (r.text === "EOF") + throw new Q("Expected a macro definition"); + l[s].push(r.text); + } + var { + tokens: a + } = e.gullet.consumeArg(); + return o && a.unshift(o), (n === "\\edef" || n === "\\xdef") && (a = e.gullet.expandTokens(a), a.reverse()), e.gullet.macros.set(i, { + tokens: a, + numArgs: s, + delimiters: l + }, n === Wp[n]), { + type: "internal", + mode: e.mode + }; + } +}); +ce({ + type: "internal", + names: [ + "\\let", + "\\\\globallet" + // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: !0, + primitive: !0 + }, + handler(t) { + var { + parser: e, + funcName: n + } = t, r = d9(e.gullet.popToken()); + e.gullet.consumeSpaces(); + var i = HB(e); + return f9(e, r, i, n === "\\\\globallet"), { + type: "internal", + mode: e.mode + }; + } +}); +ce({ + type: "internal", + names: [ + "\\futurelet", + "\\\\globalfuture" + // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: !0, + primitive: !0 + }, + handler(t) { + var { + parser: e, + funcName: n + } = t, r = d9(e.gullet.popToken()), i = e.gullet.popToken(), s = e.gullet.popToken(); + return f9(e, r, s, n === "\\\\globalfuture"), e.gullet.pushToken(s), e.gullet.pushToken(i), { + type: "internal", + mode: e.mode + }; + } +}); +var Na = function(e, n, r) { + var i = ot.math[e] && ot.math[e].replace, s = wg(i || e, n, r); + if (!s) + throw new Error("Unsupported symbol " + e + " and font size " + n + "."); + return s; +}, Tg = function(e, n, r, i) { + var s = r.havingBaseStyle(n), o = z.makeSpan(i.concat(s.sizingClasses(r)), [e], r), l = s.sizeMultiplier / r.sizeMultiplier; + return o.height *= l, o.depth *= l, o.maxFontSize = s.sizeMultiplier, o; +}, p9 = function(e, n, r) { + var i = n.havingBaseStyle(r), s = (1 - n.sizeMultiplier / i.sizeMultiplier) * n.fontMetrics().axisHeight; + e.classes.push("delimcenter"), e.style.top = oe(s), e.height -= s, e.depth += s; +}, $B = function(e, n, r, i, s, o) { + var l = z.makeSymbol(e, "Main-Regular", s, i), a = Tg(l, n, i, o); + return r && p9(a, i, n), a; +}, qB = function(e, n, r, i) { + return z.makeSymbol(e, "Size" + n + "-Regular", r, i); +}, m9 = function(e, n, r, i, s, o) { + var l = qB(e, n, s, i), a = Tg(z.makeSpan(["delimsizing", "size" + n], [l], i), Se.TEXT, i, o); + return r && p9(a, i, Se.TEXT), a; +}, Sf = function(e, n, r) { + var i; + n === "Size1-Regular" ? i = "delim-size1" : i = "delim-size4"; + var s = z.makeSpan(["delimsizinginner", i], [z.makeSpan([], [z.makeSymbol(e, n, r)])]); + return { + type: "elem", + elem: s + }; +}, Cf = function(e, n, r) { + var i = Br["Size4-Regular"][e.charCodeAt(0)] ? Br["Size4-Regular"][e.charCodeAt(0)][4] : Br["Size1-Regular"][e.charCodeAt(0)][4], s = new fs("inner", KP(e, Math.round(1e3 * n))), o = new Si([s], { + width: oe(i), + height: oe(n), + // Override CSS rule `.katex svg { width: 100% }` + style: "width:" + oe(i), + viewBox: "0 0 " + 1e3 * i + " " + Math.round(1e3 * n), + preserveAspectRatio: "xMinYMin" + }), l = z.makeSvgSpan([], [o], r); + return l.height = n, l.style.height = oe(n), l.style.width = oe(i), { + type: "elem", + elem: l + }; +}, Up = 8e-3, Vu = { + type: "kern", + size: -1 * Up +}, jB = ["|", "\\lvert", "\\rvert", "\\vert"], WB = ["\\|", "\\lVert", "\\rVert", "\\Vert"], g9 = function(e, n, r, i, s, o) { + var l, a, u, c, h = "", d = 0; + l = u = c = e, a = null; + var f = "Size1-Regular"; + e === "\\uparrow" ? u = c = "⏐" : e === "\\Uparrow" ? u = c = "‖" : e === "\\downarrow" ? l = u = "⏐" : e === "\\Downarrow" ? l = u = "‖" : e === "\\updownarrow" ? (l = "\\uparrow", u = "⏐", c = "\\downarrow") : e === "\\Updownarrow" ? (l = "\\Uparrow", u = "‖", c = "\\Downarrow") : jB.includes(e) ? (u = "∣", h = "vert", d = 333) : WB.includes(e) ? (u = "∥", h = "doublevert", d = 556) : e === "[" || e === "\\lbrack" ? (l = "⎡", u = "⎢", c = "⎣", f = "Size4-Regular", h = "lbrack", d = 667) : e === "]" || e === "\\rbrack" ? (l = "⎤", u = "⎥", c = "⎦", f = "Size4-Regular", h = "rbrack", d = 667) : e === "\\lfloor" || e === "⌊" ? (u = l = "⎢", c = "⎣", f = "Size4-Regular", h = "lfloor", d = 667) : e === "\\lceil" || e === "⌈" ? (l = "⎡", u = c = "⎢", f = "Size4-Regular", h = "lceil", d = 667) : e === "\\rfloor" || e === "⌋" ? (u = l = "⎥", c = "⎦", f = "Size4-Regular", h = "rfloor", d = 667) : e === "\\rceil" || e === "⌉" ? (l = "⎤", u = c = "⎥", f = "Size4-Regular", h = "rceil", d = 667) : e === "(" || e === "\\lparen" ? (l = "⎛", u = "⎜", c = "⎝", f = "Size4-Regular", h = "lparen", d = 875) : e === ")" || e === "\\rparen" ? (l = "⎞", u = "⎟", c = "⎠", f = "Size4-Regular", h = "rparen", d = 875) : e === "\\{" || e === "\\lbrace" ? (l = "⎧", a = "⎨", c = "⎩", u = "⎪", f = "Size4-Regular") : e === "\\}" || e === "\\rbrace" ? (l = "⎫", a = "⎬", c = "⎭", u = "⎪", f = "Size4-Regular") : e === "\\lgroup" || e === "⟮" ? (l = "⎧", c = "⎩", u = "⎪", f = "Size4-Regular") : e === "\\rgroup" || e === "⟯" ? (l = "⎫", c = "⎭", u = "⎪", f = "Size4-Regular") : e === "\\lmoustache" || e === "⎰" ? (l = "⎧", c = "⎭", u = "⎪", f = "Size4-Regular") : (e === "\\rmoustache" || e === "⎱") && (l = "⎫", c = "⎩", u = "⎪", f = "Size4-Regular"); + var m = Na(l, f, s), y = m.height + m.depth, b = Na(u, f, s), w = b.height + b.depth, C = Na(c, f, s), N = C.height + C.depth, B = 0, _ = 1; + if (a !== null) { + var A = Na(a, f, s); + B = A.height + A.depth, _ = 2; + } + var L = y + N + B, K = Math.max(0, Math.ceil((n - L) / (_ * w))), J = L + K * _ * w, P = i.fontMetrics().axisHeight; + r && (P *= i.sizeMultiplier); + var ie = J / 2 - P, ne = []; + if (h.length > 0) { + var _e = J - y - N, De = Math.round(J * 1e3), ge = JP(h, Math.round(_e * 1e3)), Re = new fs(h, ge), fe = (d / 1e3).toFixed(3) + "em", ye = (De / 1e3).toFixed(3) + "em", nt = new Si([Re], { + width: fe, + height: ye, + viewBox: "0 0 " + d + " " + De + }), E = z.makeSvgSpan([], [nt], i); + E.height = De / 1e3, E.style.width = fe, E.style.height = ye, ne.push({ + type: "elem", + elem: E + }); + } else { + if (ne.push(Sf(c, f, s)), ne.push(Vu), a === null) { + var Qe = J - y - N + 2 * Up; + ne.push(Cf(u, Qe, i)); + } else { + var Ue = (J - y - N - B) / 2 + 2 * Up; + ne.push(Cf(u, Ue, i)), ne.push(Vu), ne.push(Sf(a, f, s)), ne.push(Vu), ne.push(Cf(u, Ue, i)); + } + ne.push(Vu), ne.push(Sf(l, f, s)); + } + var O = i.havingBaseStyle(Se.TEXT), gt = z.makeVList({ + positionType: "bottom", + positionData: ie, + children: ne + }, O); + return Tg(z.makeSpan(["delimsizing", "mult"], [gt], O), Se.TEXT, i, o); +}, Nf = 80, Mf = 0.08, Tf = function(e, n, r, i, s) { + var o = GP(e, i, r), l = new fs(e, o), a = new Si([l], { + // Note: 1000:1 ratio of viewBox to document em width. + width: "400em", + height: oe(n), + viewBox: "0 0 400000 " + r, + preserveAspectRatio: "xMinYMin slice" + }); + return z.makeSvgSpan(["hide-tail"], [a], s); +}, UB = function(e, n) { + var r = n.havingBaseSizing(), i = w9("\\surd", e * r.sizeMultiplier, b9, r), s = r.sizeMultiplier, o = Math.max(0, n.minRuleThickness - n.fontMetrics().sqrtRuleThickness), l, a = 0, u = 0, c = 0, h; + return i.type === "small" ? (c = 1e3 + 1e3 * o + Nf, e < 1 ? s = 1 : e < 1.4 && (s = 0.7), a = (1 + o + Mf) / s, u = (1 + o) / s, l = Tf("sqrtMain", a, c, o, n), l.style.minWidth = "0.853em", h = 0.833 / s) : i.type === "large" ? (c = (1e3 + Nf) * Xa[i.size], u = (Xa[i.size] + o) / s, a = (Xa[i.size] + o + Mf) / s, l = Tf("sqrtSize" + i.size, a, c, o, n), l.style.minWidth = "1.02em", h = 1 / s) : (a = e + o + Mf, u = e + o, c = Math.floor(1e3 * e + o) + Nf, l = Tf("sqrtTall", a, c, o, n), l.style.minWidth = "0.742em", h = 1.056), l.height = u, l.style.height = oe(a), { + span: l, + advanceWidth: h, + // Calculate the actual line width. + // This actually should depend on the chosen font -- e.g. \boldmath + // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and + // have thicker rules. + ruleWidth: (n.fontMetrics().sqrtRuleThickness + o) * s + }; +}, y9 = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "⌊", "⌋", "\\lceil", "\\rceil", "⌈", "⌉", "\\surd"], GB = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "⟮", "⟯", "\\lmoustache", "\\rmoustache", "⎰", "⎱"], v9 = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"], Xa = [0, 1.2, 1.8, 2.4, 3], KB = function(e, n, r, i, s) { + if (e === "<" || e === "\\lt" || e === "⟨" ? e = "\\langle" : (e === ">" || e === "\\gt" || e === "⟩") && (e = "\\rangle"), y9.includes(e) || v9.includes(e)) + return m9(e, n, !1, r, i, s); + if (GB.includes(e)) + return g9(e, Xa[n], !1, r, i, s); + throw new Q("Illegal delimiter: '" + e + "'"); +}, JB = [{ + type: "small", + style: Se.SCRIPTSCRIPT +}, { + type: "small", + style: Se.SCRIPT +}, { + type: "small", + style: Se.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}], YB = [{ + type: "small", + style: Se.SCRIPTSCRIPT +}, { + type: "small", + style: Se.SCRIPT +}, { + type: "small", + style: Se.TEXT +}, { + type: "stack" +}], b9 = [{ + type: "small", + style: Se.SCRIPTSCRIPT +}, { + type: "small", + style: Se.SCRIPT +}, { + type: "small", + style: Se.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}, { + type: "stack" +}], ZB = function(e) { + if (e.type === "small") + return "Main-Regular"; + if (e.type === "large") + return "Size" + e.size + "-Regular"; + if (e.type === "stack") + return "Size4-Regular"; + throw new Error("Add support for delim type '" + e.type + "' here."); +}, w9 = function(e, n, r, i) { + for (var s = Math.min(2, 3 - i.style.size), o = s; o < r.length && r[o].type !== "stack"; o++) { + var l = Na(e, ZB(r[o]), "math"), a = l.height + l.depth; + if (r[o].type === "small") { + var u = i.havingBaseStyle(r[o].style); + a *= u.sizeMultiplier; + } + if (a > n) + return r[o]; + } + return r[r.length - 1]; +}, k9 = function(e, n, r, i, s, o) { + e === "<" || e === "\\lt" || e === "⟨" ? e = "\\langle" : (e === ">" || e === "\\gt" || e === "⟩") && (e = "\\rangle"); + var l; + v9.includes(e) ? l = JB : y9.includes(e) ? l = b9 : l = YB; + var a = w9(e, n, l, i); + return a.type === "small" ? $B(e, a.style, r, i, s, o) : a.type === "large" ? m9(e, a.size, r, i, s, o) : g9(e, n, r, i, s, o); +}, XB = function(e, n, r, i, s, o) { + var l = i.fontMetrics().axisHeight * i.sizeMultiplier, a = 901, u = 5 / i.fontMetrics().ptPerEm, c = Math.max(n - l, r + l), h = Math.max( + // In real TeX, calculations are done using integral values which are + // 65536 per pt, or 655360 per em. So, the division here truncates in + // TeX but doesn't here, producing different results. If we wanted to + // exactly match TeX's calculation, we could do + // Math.floor(655360 * maxDistFromAxis / 500) * + // delimiterFactor / 655360 + // (To see the difference, compare + // x^{x^{\left(\rule{0.1em}{0.68em}\right)}} + // in TeX and KaTeX) + c / 500 * a, + 2 * c - u + ); + return k9(e, h, !0, i, s, o); +}, ki = { + sqrtImage: UB, + sizedDelim: KB, + sizeToMaxHeight: Xa, + customSizedDelim: k9, + leftRightDelim: XB +}, J3 = { + "\\bigl": { + mclass: "mopen", + size: 1 + }, + "\\Bigl": { + mclass: "mopen", + size: 2 + }, + "\\biggl": { + mclass: "mopen", + size: 3 + }, + "\\Biggl": { + mclass: "mopen", + size: 4 + }, + "\\bigr": { + mclass: "mclose", + size: 1 + }, + "\\Bigr": { + mclass: "mclose", + size: 2 + }, + "\\biggr": { + mclass: "mclose", + size: 3 + }, + "\\Biggr": { + mclass: "mclose", + size: 4 + }, + "\\bigm": { + mclass: "mrel", + size: 1 + }, + "\\Bigm": { + mclass: "mrel", + size: 2 + }, + "\\biggm": { + mclass: "mrel", + size: 3 + }, + "\\Biggm": { + mclass: "mrel", + size: 4 + }, + "\\big": { + mclass: "mord", + size: 1 + }, + "\\Big": { + mclass: "mord", + size: 2 + }, + "\\bigg": { + mclass: "mord", + size: 3 + }, + "\\Bigg": { + mclass: "mord", + size: 4 + } +}, QB = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "⌊", "⌋", "\\lceil", "\\rceil", "⌈", "⌉", "<", ">", "\\langle", "⟨", "\\rangle", "⟩", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "⟮", "⟯", "\\lmoustache", "\\rmoustache", "⎰", "⎱", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."]; +function ld(t, e) { + var n = sd(t); + if (n && QB.includes(n.text)) + return n; + throw n ? new Q("Invalid delimiter '" + n.text + "' after '" + e.funcName + "'", t) : new Q("Invalid delimiter type '" + t.type + "'", t); +} +ce({ + type: "delimsizing", + names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"], + props: { + numArgs: 1, + argTypes: ["primitive"] + }, + handler: (t, e) => { + var n = ld(e[0], t); + return { + type: "delimsizing", + mode: t.parser.mode, + size: J3[t.funcName].size, + mclass: J3[t.funcName].mclass, + delim: n.text + }; + }, + htmlBuilder: (t, e) => t.delim === "." ? z.makeSpan([t.mclass]) : ki.sizedDelim(t.delim, t.size, e, t.mode, [t.mclass]), + mathmlBuilder: (t) => { + var e = []; + t.delim !== "." && e.push(rr(t.delim, t.mode)); + var n = new Y.MathNode("mo", e); + t.mclass === "mopen" || t.mclass === "mclose" ? n.setAttribute("fence", "true") : n.setAttribute("fence", "false"), n.setAttribute("stretchy", "true"); + var r = oe(ki.sizeToMaxHeight[t.size]); + return n.setAttribute("minsize", r), n.setAttribute("maxsize", r), n; + } +}); +function Y3(t) { + if (!t.body) + throw new Error("Bug: The leftright ParseNode wasn't fully parsed."); +} +ce({ + type: "leftright-right", + names: ["\\right"], + props: { + numArgs: 1, + primitive: !0 + }, + handler: (t, e) => { + var n = t.parser.gullet.macros.get("\\current@color"); + if (n && typeof n != "string") + throw new Q("\\current@color set to non-string in \\right"); + return { + type: "leftright-right", + mode: t.parser.mode, + delim: ld(e[0], t).text, + color: n + // undefined if not set via \color + }; + } +}); +ce({ + type: "leftright", + names: ["\\left"], + props: { + numArgs: 1, + primitive: !0 + }, + handler: (t, e) => { + var n = ld(e[0], t), r = t.parser; + ++r.leftrightDepth; + var i = r.parseExpression(!1); + --r.leftrightDepth, r.expect("\\right", !1); + var s = Be(r.parseFunction(), "leftright-right"); + return { + type: "leftright", + mode: r.mode, + body: i, + left: n.text, + right: s.delim, + rightColor: s.color + }; + }, + htmlBuilder: (t, e) => { + Y3(t); + for (var n = Bt(t.body, e, !0, ["mopen", "mclose"]), r = 0, i = 0, s = !1, o = 0; o < n.length; o++) + n[o].isMiddle ? s = !0 : (r = Math.max(n[o].height, r), i = Math.max(n[o].depth, i)); + r *= e.sizeMultiplier, i *= e.sizeMultiplier; + var l; + if (t.left === "." ? l = w0(e, ["mopen"]) : l = ki.leftRightDelim(t.left, r, i, e, t.mode, ["mopen"]), n.unshift(l), s) + for (var a = 1; a < n.length; a++) { + var u = n[a], c = u.isMiddle; + c && (n[a] = ki.leftRightDelim(c.delim, r, i, c.options, t.mode, [])); + } + var h; + if (t.right === ".") + h = w0(e, ["mclose"]); + else { + var d = t.rightColor ? e.withColor(t.rightColor) : e; + h = ki.leftRightDelim(t.right, r, i, d, t.mode, ["mclose"]); + } + return n.push(h), z.makeSpan(["minner"], n, e); + }, + mathmlBuilder: (t, e) => { + Y3(t); + var n = An(t.body, e); + if (t.left !== ".") { + var r = new Y.MathNode("mo", [rr(t.left, t.mode)]); + r.setAttribute("fence", "true"), n.unshift(r); + } + if (t.right !== ".") { + var i = new Y.MathNode("mo", [rr(t.right, t.mode)]); + i.setAttribute("fence", "true"), t.rightColor && i.setAttribute("mathcolor", t.rightColor), n.push(i); + } + return Sg(n); + } +}); +ce({ + type: "middle", + names: ["\\middle"], + props: { + numArgs: 1, + primitive: !0 + }, + handler: (t, e) => { + var n = ld(e[0], t); + if (!t.parser.leftrightDepth) + throw new Q("\\middle without preceding \\left", n); + return { + type: "middle", + mode: t.parser.mode, + delim: n.text + }; + }, + htmlBuilder: (t, e) => { + var n; + if (t.delim === ".") + n = w0(e, []); + else { + n = ki.sizedDelim(t.delim, 1, e, t.mode, []); + var r = { + delim: t.delim, + options: e + }; + n.isMiddle = r; + } + return n; + }, + mathmlBuilder: (t, e) => { + var n = t.delim === "\\vert" || t.delim === "|" ? rr("|", "text") : rr(t.delim, t.mode), r = new Y.MathNode("mo", [n]); + return r.setAttribute("fence", "true"), r.setAttribute("lspace", "0.05em"), r.setAttribute("rspace", "0.05em"), r; + } +}); +var Eg = (t, e) => { + var n = z.wrapFragment(We(t.body, e), e), r = t.label.slice(1), i = e.sizeMultiplier, s, o = 0, l = Ke.isCharacterBox(t.body); + if (r === "sout") + s = z.makeSpan(["stretchy", "sout"]), s.height = e.fontMetrics().defaultRuleThickness / i, o = -0.5 * e.fontMetrics().xHeight; + else if (r === "phase") { + var a = mt({ + number: 0.6, + unit: "pt" + }, e), u = mt({ + number: 0.35, + unit: "ex" + }, e), c = e.havingBaseSizing(); + i = i / c.sizeMultiplier; + var h = n.height + n.depth + a + u; + n.style.paddingLeft = oe(h / 2 + a); + var d = Math.floor(1e3 * h * i), f = WP(d), m = new Si([new fs("phase", f)], { + width: "400em", + height: oe(d / 1e3), + viewBox: "0 0 400000 " + d, + preserveAspectRatio: "xMinYMin slice" + }); + s = z.makeSvgSpan(["hide-tail"], [m], e), s.style.height = oe(h), o = n.depth + a + u; + } else { + /cancel/.test(r) ? l || n.classes.push("cancel-pad") : r === "angl" ? n.classes.push("anglpad") : n.classes.push("boxpad"); + var y = 0, b = 0, w = 0; + /box/.test(r) ? (w = Math.max( + e.fontMetrics().fboxrule, + // default + e.minRuleThickness + // User override. + ), y = e.fontMetrics().fboxsep + (r === "colorbox" ? 0 : w), b = y) : r === "angl" ? (w = Math.max(e.fontMetrics().defaultRuleThickness, e.minRuleThickness), y = 4 * w, b = Math.max(0, 0.25 - n.depth)) : (y = l ? 0.2 : 0, b = y), s = Ni.encloseSpan(n, r, y, b, e), /fbox|boxed|fcolorbox/.test(r) ? (s.style.borderStyle = "solid", s.style.borderWidth = oe(w)) : r === "angl" && w !== 0.049 && (s.style.borderTopWidth = oe(w), s.style.borderRightWidth = oe(w)), o = n.depth + b, t.backgroundColor && (s.style.backgroundColor = t.backgroundColor, t.borderColor && (s.style.borderColor = t.borderColor)); + } + var C; + if (t.backgroundColor) + C = z.makeVList({ + positionType: "individualShift", + children: [ + // Put the color background behind inner; + { + type: "elem", + elem: s, + shift: o + }, + { + type: "elem", + elem: n, + shift: 0 + } + ] + }, e); + else { + var N = /cancel|phase/.test(r) ? ["svg-align"] : []; + C = z.makeVList({ + positionType: "individualShift", + children: [ + // Write the \cancel stroke on top of inner. + { + type: "elem", + elem: n, + shift: 0 + }, + { + type: "elem", + elem: s, + shift: o, + wrapperClasses: N + } + ] + }, e); + } + return /cancel/.test(r) && (C.height = n.height, C.depth = n.depth), /cancel/.test(r) && !l ? z.makeSpan(["mord", "cancel-lap"], [C], e) : z.makeSpan(["mord"], [C], e); +}, Og = (t, e) => { + var n = 0, r = new Y.MathNode(t.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [st(t.body, e)]); + switch (t.label) { + case "\\cancel": + r.setAttribute("notation", "updiagonalstrike"); + break; + case "\\bcancel": + r.setAttribute("notation", "downdiagonalstrike"); + break; + case "\\phase": + r.setAttribute("notation", "phasorangle"); + break; + case "\\sout": + r.setAttribute("notation", "horizontalstrike"); + break; + case "\\fbox": + r.setAttribute("notation", "box"); + break; + case "\\angl": + r.setAttribute("notation", "actuarial"); + break; + case "\\fcolorbox": + case "\\colorbox": + if (n = e.fontMetrics().fboxsep * e.fontMetrics().ptPerEm, r.setAttribute("width", "+" + 2 * n + "pt"), r.setAttribute("height", "+" + 2 * n + "pt"), r.setAttribute("lspace", n + "pt"), r.setAttribute("voffset", n + "pt"), t.label === "\\fcolorbox") { + var i = Math.max( + e.fontMetrics().fboxrule, + // default + e.minRuleThickness + // user override + ); + r.setAttribute("style", "border: " + i + "em solid " + String(t.borderColor)); + } + break; + case "\\xcancel": + r.setAttribute("notation", "updiagonalstrike downdiagonalstrike"); + break; + } + return t.backgroundColor && r.setAttribute("mathbackground", t.backgroundColor), r; +}; +ce({ + type: "enclose", + names: ["\\colorbox"], + props: { + numArgs: 2, + allowedInText: !0, + argTypes: ["color", "text"] + }, + handler(t, e, n) { + var { + parser: r, + funcName: i + } = t, s = Be(e[0], "color-token").color, o = e[1]; + return { + type: "enclose", + mode: r.mode, + label: i, + backgroundColor: s, + body: o + }; + }, + htmlBuilder: Eg, + mathmlBuilder: Og +}); +ce({ + type: "enclose", + names: ["\\fcolorbox"], + props: { + numArgs: 3, + allowedInText: !0, + argTypes: ["color", "color", "text"] + }, + handler(t, e, n) { + var { + parser: r, + funcName: i + } = t, s = Be(e[0], "color-token").color, o = Be(e[1], "color-token").color, l = e[2]; + return { + type: "enclose", + mode: r.mode, + label: i, + backgroundColor: o, + borderColor: s, + body: l + }; + }, + htmlBuilder: Eg, + mathmlBuilder: Og +}); +ce({ + type: "enclose", + names: ["\\fbox"], + props: { + numArgs: 1, + argTypes: ["hbox"], + allowedInText: !0 + }, + handler(t, e) { + var { + parser: n + } = t; + return { + type: "enclose", + mode: n.mode, + label: "\\fbox", + body: e[0] + }; + } +}); +ce({ + type: "enclose", + names: ["\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\phase"], + props: { + numArgs: 1 + }, + handler(t, e) { + var { + parser: n, + funcName: r + } = t, i = e[0]; + return { + type: "enclose", + mode: n.mode, + label: r, + body: i + }; + }, + htmlBuilder: Eg, + mathmlBuilder: Og +}); +ce({ + type: "enclose", + names: ["\\angl"], + props: { + numArgs: 1, + argTypes: ["hbox"], + allowedInText: !1 + }, + handler(t, e) { + var { + parser: n + } = t; + return { + type: "enclose", + mode: n.mode, + label: "\\angl", + body: e[0] + }; + } +}); +var x9 = {}; +function Gr(t) { + for (var { + type: e, + names: n, + props: r, + handler: i, + htmlBuilder: s, + mathmlBuilder: o + } = t, l = { + type: e, + numArgs: r.numArgs || 0, + allowedInText: !1, + numOptionalArgs: 0, + handler: i + }, a = 0; a < n.length; ++a) + x9[n[a]] = l; + s && (fh[e] = s), o && (ph[e] = o); +} +var S9 = {}; +function k(t, e) { + S9[t] = e; +} +function Z3(t) { + var e = []; + t.consumeSpaces(); + var n = t.fetch().text; + for (n === "\\relax" && (t.consume(), t.consumeSpaces(), n = t.fetch().text); n === "\\hline" || n === "\\hdashline"; ) + t.consume(), e.push(n === "\\hdashline"), t.consumeSpaces(), n = t.fetch().text; + return e; +} +var ad = (t) => { + var e = t.parser.settings; + if (!e.displayMode) + throw new Q("{" + t.envName + "} can be used only in display mode."); +}; +function Ag(t) { + if (t.indexOf("ed") === -1) + return t.indexOf("*") === -1; +} +function ws(t, e, n) { + var { + hskipBeforeAndAfter: r, + addJot: i, + cols: s, + arraystretch: o, + colSeparationType: l, + autoTag: a, + singleRow: u, + emptySingleRow: c, + maxNumCols: h, + leqno: d + } = e; + if (t.gullet.beginGroup(), u || t.gullet.macros.set("\\cr", "\\\\\\relax"), !o) { + var f = t.gullet.expandMacroAsText("\\arraystretch"); + if (f == null) + o = 1; + else if (o = parseFloat(f), !o || o < 0) + throw new Q("Invalid \\arraystretch: " + f); + } + t.gullet.beginGroup(); + var m = [], y = [m], b = [], w = [], C = a != null ? [] : void 0; + function N() { + a && t.gullet.macros.set("\\@eqnsw", "1", !0); + } + function B() { + C && (t.gullet.macros.get("\\df@tag") ? (C.push(t.subparse([new $n("\\df@tag")])), t.gullet.macros.set("\\df@tag", void 0, !0)) : C.push(!!a && t.gullet.macros.get("\\@eqnsw") === "1")); + } + for (N(), w.push(Z3(t)); ; ) { + var _ = t.parseExpression(!1, u ? "\\end" : "\\\\"); + t.gullet.endGroup(), t.gullet.beginGroup(), _ = { + type: "ordgroup", + mode: t.mode, + body: _ + }, n && (_ = { + type: "styling", + mode: t.mode, + style: n, + body: [_] + }), m.push(_); + var A = t.fetch().text; + if (A === "&") { + if (h && m.length === h) { + if (u || l) + throw new Q("Too many tab characters: &", t.nextToken); + t.settings.reportNonstrict("textEnv", "Too few columns specified in the {array} column argument."); + } + t.consume(); + } else if (A === "\\end") { + B(), m.length === 1 && _.type === "styling" && _.body[0].body.length === 0 && (y.length > 1 || !c) && y.pop(), w.length < y.length + 1 && w.push([]); + break; + } else if (A === "\\\\") { + t.consume(); + var L = void 0; + t.gullet.future().text !== " " && (L = t.parseSizeGroup(!0)), b.push(L ? L.value : null), B(), w.push(Z3(t)), m = [], y.push(m), N(); + } else + throw new Q("Expected & or \\\\ or \\cr or \\end", t.nextToken); + } + return t.gullet.endGroup(), t.gullet.endGroup(), { + type: "array", + mode: t.mode, + addJot: i, + arraystretch: o, + body: y, + cols: s, + rowGaps: b, + hskipBeforeAndAfter: r, + hLinesBeforeRow: w, + colSeparationType: l, + tags: C, + leqno: d + }; +} +function Ig(t) { + return t.slice(0, 1) === "d" ? "display" : "text"; +} +var Kr = function(e, n) { + var r, i, s = e.body.length, o = e.hLinesBeforeRow, l = 0, a = new Array(s), u = [], c = Math.max( + // From LaTeX \showthe\arrayrulewidth. Equals 0.04 em. + n.fontMetrics().arrayRuleWidth, + n.minRuleThickness + // User override. + ), h = 1 / n.fontMetrics().ptPerEm, d = 5 * h; + if (e.colSeparationType && e.colSeparationType === "small") { + var f = n.havingStyle(Se.SCRIPT).sizeMultiplier; + d = 0.2778 * (f / n.sizeMultiplier); + } + var m = e.colSeparationType === "CD" ? mt({ + number: 3, + unit: "ex" + }, n) : 12 * h, y = 3 * h, b = e.arraystretch * m, w = 0.7 * b, C = 0.3 * b, N = 0; + function B(q) { + for (var ee = 0; ee < q.length; ++ee) + ee > 0 && (N += 0.25), u.push({ + pos: N, + isDashed: q[ee] + }); + } + for (B(o[0]), r = 0; r < e.body.length; ++r) { + var _ = e.body[r], A = w, L = C; + l < _.length && (l = _.length); + var K = new Array(_.length); + for (i = 0; i < _.length; ++i) { + var J = We(_[i], n); + L < J.depth && (L = J.depth), A < J.height && (A = J.height), K[i] = J; + } + var P = e.rowGaps[r], ie = 0; + P && (ie = mt(P, n), ie > 0 && (ie += C, L < ie && (L = ie), ie = 0)), e.addJot && (L += y), K.height = A, K.depth = L, N += A, K.pos = N, N += L + ie, a[r] = K, B(o[r + 1]); + } + var ne = N / 2 + n.fontMetrics().axisHeight, _e = e.cols || [], De = [], ge, Re, fe = []; + if (e.tags && e.tags.some((q) => q)) + for (r = 0; r < s; ++r) { + var ye = a[r], nt = ye.pos - ne, E = e.tags[r], Qe = void 0; + E === !0 ? Qe = z.makeSpan(["eqn-num"], [], n) : E === !1 ? Qe = z.makeSpan([], [], n) : Qe = z.makeSpan([], Bt(E, n, !0), n), Qe.depth = ye.depth, Qe.height = ye.height, fe.push({ + type: "elem", + elem: Qe, + shift: nt + }); + } + for ( + i = 0, Re = 0; + // Continue while either there are more columns or more column + // descriptions, so trailing separators don't get lost. + i < l || Re < _e.length; + ++i, ++Re + ) { + for (var Ue = _e[Re] || {}, O = !0; Ue.type === "separator"; ) { + if (O || (ge = z.makeSpan(["arraycolsep"], []), ge.style.width = oe(n.fontMetrics().doubleRuleSep), De.push(ge)), Ue.separator === "|" || Ue.separator === ":") { + var gt = Ue.separator === "|" ? "solid" : "dashed", Rt = z.makeSpan(["vertical-separator"], [], n); + Rt.style.height = oe(N), Rt.style.borderRightWidth = oe(c), Rt.style.borderRightStyle = gt, Rt.style.margin = "0 " + oe(-c / 2); + var lt = N - ne; + lt && (Rt.style.verticalAlign = oe(-lt)), De.push(Rt); + } else + throw new Q("Invalid separator type: " + Ue.separator); + Re++, Ue = _e[Re] || {}, O = !1; + } + if (!(i >= l)) { + var bt = void 0; + (i > 0 || e.hskipBeforeAndAfter) && (bt = Ke.deflt(Ue.pregap, d), bt !== 0 && (ge = z.makeSpan(["arraycolsep"], []), ge.style.width = oe(bt), De.push(ge))); + var dt = []; + for (r = 0; r < s; ++r) { + var Lt = a[r], $t = Lt[i]; + if ($t) { + var Xt = Lt.pos - ne; + $t.depth = Lt.depth, $t.height = Lt.height, dt.push({ + type: "elem", + elem: $t, + shift: Xt + }); + } + } + dt = z.makeVList({ + positionType: "individualShift", + children: dt + }, n), dt = z.makeSpan(["col-align-" + (Ue.align || "c")], [dt]), De.push(dt), (i < l - 1 || e.hskipBeforeAndAfter) && (bt = Ke.deflt(Ue.postgap, d), bt !== 0 && (ge = z.makeSpan(["arraycolsep"], []), ge.style.width = oe(bt), De.push(ge))); + } + } + if (a = z.makeSpan(["mtable"], De), u.length > 0) { + for (var ks = z.makeLineSpan("hline", n, c), x = z.makeLineSpan("hdashline", n, c), I = [{ + type: "elem", + elem: a, + shift: 0 + }]; u.length > 0; ) { + var F = u.pop(), W = F.pos - ne; + F.isDashed ? I.push({ + type: "elem", + elem: x, + shift: W + }) : I.push({ + type: "elem", + elem: ks, + shift: W + }); + } + a = z.makeVList({ + positionType: "individualShift", + children: I + }, n); + } + if (fe.length === 0) + return z.makeSpan(["mord"], [a], n); + var j = z.makeVList({ + positionType: "individualShift", + children: fe + }, n); + return j = z.makeSpan(["tag"], [j], n), z.makeFragment([a, j]); +}, eL = { + c: "center ", + l: "left ", + r: "right " +}, Jr = function(e, n) { + for (var r = [], i = new Y.MathNode("mtd", [], ["mtr-glue"]), s = new Y.MathNode("mtd", [], ["mml-eqn-num"]), o = 0; o < e.body.length; o++) { + for (var l = e.body[o], a = [], u = 0; u < l.length; u++) + a.push(new Y.MathNode("mtd", [st(l[u], n)])); + e.tags && e.tags[o] && (a.unshift(i), a.push(i), e.leqno ? a.unshift(s) : a.push(s)), r.push(new Y.MathNode("mtr", a)); + } + var c = new Y.MathNode("mtable", r), h = e.arraystretch === 0.5 ? 0.1 : 0.16 + e.arraystretch - 1 + (e.addJot ? 0.09 : 0); + c.setAttribute("rowspacing", oe(h)); + var d = "", f = ""; + if (e.cols && e.cols.length > 0) { + var m = e.cols, y = "", b = !1, w = 0, C = m.length; + m[0].type === "separator" && (d += "top ", w = 1), m[m.length - 1].type === "separator" && (d += "bottom ", C -= 1); + for (var N = w; N < C; N++) + m[N].type === "align" ? (f += eL[m[N].align], b && (y += "none "), b = !0) : m[N].type === "separator" && b && (y += m[N].separator === "|" ? "solid " : "dashed ", b = !1); + c.setAttribute("columnalign", f.trim()), /[sd]/.test(y) && c.setAttribute("columnlines", y.trim()); + } + if (e.colSeparationType === "align") { + for (var B = e.cols || [], _ = "", A = 1; A < B.length; A++) + _ += A % 2 ? "0em " : "1em "; + c.setAttribute("columnspacing", _.trim()); + } else e.colSeparationType === "alignat" || e.colSeparationType === "gather" ? c.setAttribute("columnspacing", "0em") : e.colSeparationType === "small" ? c.setAttribute("columnspacing", "0.2778em") : e.colSeparationType === "CD" ? c.setAttribute("columnspacing", "0.5em") : c.setAttribute("columnspacing", "1em"); + var L = "", K = e.hLinesBeforeRow; + d += K[0].length > 0 ? "left " : "", d += K[K.length - 1].length > 0 ? "right " : ""; + for (var J = 1; J < K.length - 1; J++) + L += K[J].length === 0 ? "none " : K[J][0] ? "dashed " : "solid "; + return /[sd]/.test(L) && c.setAttribute("rowlines", L.trim()), d !== "" && (c = new Y.MathNode("menclose", [c]), c.setAttribute("notation", d.trim())), e.arraystretch && e.arraystretch < 1 && (c = new Y.MathNode("mstyle", [c]), c.setAttribute("scriptlevel", "1")), c; +}, C9 = function(e, n) { + e.envName.indexOf("ed") === -1 && ad(e); + var r = [], i = e.envName.indexOf("at") > -1 ? "alignat" : "align", s = e.envName === "split", o = ws(e.parser, { + cols: r, + addJot: !0, + autoTag: s ? void 0 : Ag(e.envName), + emptySingleRow: !0, + colSeparationType: i, + maxNumCols: s ? 2 : void 0, + leqno: e.parser.settings.leqno + }, "display"), l, a = 0, u = { + type: "ordgroup", + mode: e.mode, + body: [] + }; + if (n[0] && n[0].type === "ordgroup") { + for (var c = "", h = 0; h < n[0].body.length; h++) { + var d = Be(n[0].body[h], "textord"); + c += d.text; + } + l = Number(c), a = l * 2; + } + var f = !a; + o.body.forEach(function(w) { + for (var C = 1; C < w.length; C += 2) { + var N = Be(w[C], "styling"), B = Be(N.body[0], "ordgroup"); + B.body.unshift(u); + } + if (f) + a < w.length && (a = w.length); + else { + var _ = w.length / 2; + if (l < _) + throw new Q("Too many math in a row: " + ("expected " + l + ", but got " + _), w[0]); + } + }); + for (var m = 0; m < a; ++m) { + var y = "r", b = 0; + m % 2 === 1 ? y = "l" : m > 0 && f && (b = 1), r[m] = { + type: "align", + align: y, + pregap: b, + postgap: 0 + }; + } + return o.colSeparationType = f ? "align" : "alignat", o; +}; +Gr({ + type: "array", + names: ["array", "darray"], + props: { + numArgs: 1 + }, + handler(t, e) { + var n = sd(e[0]), r = n ? [e[0]] : Be(e[0], "ordgroup").body, i = r.map(function(o) { + var l = Ng(o), a = l.text; + if ("lcr".indexOf(a) !== -1) + return { + type: "align", + align: a + }; + if (a === "|") + return { + type: "separator", + separator: "|" + }; + if (a === ":") + return { + type: "separator", + separator: ":" + }; + throw new Q("Unknown column alignment: " + a, o); + }), s = { + cols: i, + hskipBeforeAndAfter: !0, + // \@preamble in lttab.dtx + maxNumCols: i.length + }; + return ws(t.parser, s, Ig(t.envName)); + }, + htmlBuilder: Kr, + mathmlBuilder: Jr +}); +Gr({ + type: "array", + names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix", "matrix*", "pmatrix*", "bmatrix*", "Bmatrix*", "vmatrix*", "Vmatrix*"], + props: { + numArgs: 0 + }, + handler(t) { + var e = { + matrix: null, + pmatrix: ["(", ")"], + bmatrix: ["[", "]"], + Bmatrix: ["\\{", "\\}"], + vmatrix: ["|", "|"], + Vmatrix: ["\\Vert", "\\Vert"] + }[t.envName.replace("*", "")], n = "c", r = { + hskipBeforeAndAfter: !1, + cols: [{ + type: "align", + align: n + }] + }; + if (t.envName.charAt(t.envName.length - 1) === "*") { + var i = t.parser; + if (i.consumeSpaces(), i.fetch().text === "[") { + if (i.consume(), i.consumeSpaces(), n = i.fetch().text, "lcr".indexOf(n) === -1) + throw new Q("Expected l or c or r", i.nextToken); + i.consume(), i.consumeSpaces(), i.expect("]"), i.consume(), r.cols = [{ + type: "align", + align: n + }]; + } + } + var s = ws(t.parser, r, Ig(t.envName)), o = Math.max(0, ...s.body.map((l) => l.length)); + return s.cols = new Array(o).fill({ + type: "align", + align: n + }), e ? { + type: "leftright", + mode: t.mode, + body: [s], + left: e[0], + right: e[1], + rightColor: void 0 + // \right uninfluenced by \color in array + } : s; + }, + htmlBuilder: Kr, + mathmlBuilder: Jr +}); +Gr({ + type: "array", + names: ["smallmatrix"], + props: { + numArgs: 0 + }, + handler(t) { + var e = { + arraystretch: 0.5 + }, n = ws(t.parser, e, "script"); + return n.colSeparationType = "small", n; + }, + htmlBuilder: Kr, + mathmlBuilder: Jr +}); +Gr({ + type: "array", + names: ["subarray"], + props: { + numArgs: 1 + }, + handler(t, e) { + var n = sd(e[0]), r = n ? [e[0]] : Be(e[0], "ordgroup").body, i = r.map(function(o) { + var l = Ng(o), a = l.text; + if ("lc".indexOf(a) !== -1) + return { + type: "align", + align: a + }; + throw new Q("Unknown column alignment: " + a, o); + }); + if (i.length > 1) + throw new Q("{subarray} can contain only one column"); + var s = { + cols: i, + hskipBeforeAndAfter: !1, + arraystretch: 0.5 + }; + if (s = ws(t.parser, s, "script"), s.body.length > 0 && s.body[0].length > 1) + throw new Q("{subarray} can contain only one column"); + return s; + }, + htmlBuilder: Kr, + mathmlBuilder: Jr +}); +Gr({ + type: "array", + names: ["cases", "dcases", "rcases", "drcases"], + props: { + numArgs: 0 + }, + handler(t) { + var e = { + arraystretch: 1.2, + cols: [{ + type: "align", + align: "l", + pregap: 0, + // TODO(kevinb) get the current style. + // For now we use the metrics for TEXT style which is what we were + // doing before. Before attempting to get the current style we + // should look at TeX's behavior especially for \over and matrices. + postgap: 1 + /* 1em quad */ + }, { + type: "align", + align: "l", + pregap: 0, + postgap: 0 + }] + }, n = ws(t.parser, e, Ig(t.envName)); + return { + type: "leftright", + mode: t.mode, + body: [n], + left: t.envName.indexOf("r") > -1 ? "." : "\\{", + right: t.envName.indexOf("r") > -1 ? "\\}" : ".", + rightColor: void 0 + }; + }, + htmlBuilder: Kr, + mathmlBuilder: Jr +}); +Gr({ + type: "array", + names: ["align", "align*", "aligned", "split"], + props: { + numArgs: 0 + }, + handler: C9, + htmlBuilder: Kr, + mathmlBuilder: Jr +}); +Gr({ + type: "array", + names: ["gathered", "gather", "gather*"], + props: { + numArgs: 0 + }, + handler(t) { + ["gather", "gather*"].includes(t.envName) && ad(t); + var e = { + cols: [{ + type: "align", + align: "c" + }], + addJot: !0, + colSeparationType: "gather", + autoTag: Ag(t.envName), + emptySingleRow: !0, + leqno: t.parser.settings.leqno + }; + return ws(t.parser, e, "display"); + }, + htmlBuilder: Kr, + mathmlBuilder: Jr +}); +Gr({ + type: "array", + names: ["alignat", "alignat*", "alignedat"], + props: { + numArgs: 1 + }, + handler: C9, + htmlBuilder: Kr, + mathmlBuilder: Jr +}); +Gr({ + type: "array", + names: ["equation", "equation*"], + props: { + numArgs: 0 + }, + handler(t) { + ad(t); + var e = { + autoTag: Ag(t.envName), + emptySingleRow: !0, + singleRow: !0, + maxNumCols: 1, + leqno: t.parser.settings.leqno + }; + return ws(t.parser, e, "display"); + }, + htmlBuilder: Kr, + mathmlBuilder: Jr +}); +Gr({ + type: "array", + names: ["CD"], + props: { + numArgs: 0 + }, + handler(t) { + return ad(t), VB(t.parser); + }, + htmlBuilder: Kr, + mathmlBuilder: Jr +}); +k("\\nonumber", "\\gdef\\@eqnsw{0}"); +k("\\notag", "\\nonumber"); +ce({ + type: "text", + // Doesn't matter what this is. + names: ["\\hline", "\\hdashline"], + props: { + numArgs: 0, + allowedInText: !0, + allowedInMath: !0 + }, + handler(t, e) { + throw new Q(t.funcName + " valid only within array environment"); + } +}); +var X3 = x9; +ce({ + type: "environment", + names: ["\\begin", "\\end"], + props: { + numArgs: 1, + argTypes: ["text"] + }, + handler(t, e) { + var { + parser: n, + funcName: r + } = t, i = e[0]; + if (i.type !== "ordgroup") + throw new Q("Invalid environment name", i); + for (var s = "", o = 0; o < i.body.length; ++o) + s += Be(i.body[o], "textord").text; + if (r === "\\begin") { + if (!X3.hasOwnProperty(s)) + throw new Q("No such environment: " + s, i); + var l = X3[s], { + args: a, + optArgs: u + } = n.parseArguments("\\begin{" + s + "}", l), c = { + mode: n.mode, + envName: s, + parser: n + }, h = l.handler(c, a, u); + n.expect("\\end", !1); + var d = n.nextToken, f = Be(n.parseFunction(), "environment"); + if (f.name !== s) + throw new Q("Mismatch: \\begin{" + s + "} matched by \\end{" + f.name + "}", d); + return h; + } + return { + type: "environment", + mode: n.mode, + name: s, + nameGroup: i + }; + } +}); +var N9 = (t, e) => { + var n = t.font, r = e.withFont(n); + return We(t.body, r); +}, M9 = (t, e) => { + var n = t.font, r = e.withFont(n); + return st(t.body, r); +}, Q3 = { + "\\Bbb": "\\mathbb", + "\\bold": "\\mathbf", + "\\frak": "\\mathfrak", + "\\bm": "\\boldsymbol" +}; +ce({ + type: "font", + names: [ + // styles, except \boldsymbol defined below + "\\mathrm", + "\\mathit", + "\\mathbf", + "\\mathnormal", + "\\mathsfit", + // families + "\\mathbb", + "\\mathcal", + "\\mathfrak", + "\\mathscr", + "\\mathsf", + "\\mathtt", + // aliases, except \bm defined below + "\\Bbb", + "\\bold", + "\\frak" + ], + props: { + numArgs: 1, + allowedInArgument: !0 + }, + handler: (t, e) => { + var { + parser: n, + funcName: r + } = t, i = mh(e[0]), s = r; + return s in Q3 && (s = Q3[s]), { + type: "font", + mode: n.mode, + font: s.slice(1), + body: i + }; + }, + htmlBuilder: N9, + mathmlBuilder: M9 +}); +ce({ + type: "mclass", + names: ["\\boldsymbol", "\\bm"], + props: { + numArgs: 1 + }, + handler: (t, e) => { + var { + parser: n + } = t, r = e[0], i = Ke.isCharacterBox(r); + return { + type: "mclass", + mode: n.mode, + mclass: od(r), + body: [{ + type: "font", + mode: n.mode, + font: "boldsymbol", + body: r + }], + isCharacterBox: i + }; + } +}); +ce({ + type: "font", + names: ["\\rm", "\\sf", "\\tt", "\\bf", "\\it", "\\cal"], + props: { + numArgs: 0, + allowedInText: !0 + }, + handler: (t, e) => { + var { + parser: n, + funcName: r, + breakOnTokenText: i + } = t, { + mode: s + } = n, o = n.parseExpression(!0, i), l = "math" + r.slice(1); + return { + type: "font", + mode: s, + font: l, + body: { + type: "ordgroup", + mode: n.mode, + body: o + } + }; + }, + htmlBuilder: N9, + mathmlBuilder: M9 +}); +var T9 = (t, e) => { + var n = e; + return t === "display" ? n = n.id >= Se.SCRIPT.id ? n.text() : Se.DISPLAY : t === "text" && n.size === Se.DISPLAY.size ? n = Se.TEXT : t === "script" ? n = Se.SCRIPT : t === "scriptscript" && (n = Se.SCRIPTSCRIPT), n; +}, Dg = (t, e) => { + var n = T9(t.size, e.style), r = n.fracNum(), i = n.fracDen(), s; + s = e.havingStyle(r); + var o = We(t.numer, s, e); + if (t.continued) { + var l = 8.5 / e.fontMetrics().ptPerEm, a = 3.5 / e.fontMetrics().ptPerEm; + o.height = o.height < l ? l : o.height, o.depth = o.depth < a ? a : o.depth; + } + s = e.havingStyle(i); + var u = We(t.denom, s, e), c, h, d; + t.hasBarLine ? (t.barSize ? (h = mt(t.barSize, e), c = z.makeLineSpan("frac-line", e, h)) : c = z.makeLineSpan("frac-line", e), h = c.height, d = c.height) : (c = null, h = 0, d = e.fontMetrics().defaultRuleThickness); + var f, m, y; + n.size === Se.DISPLAY.size || t.size === "display" ? (f = e.fontMetrics().num1, h > 0 ? m = 3 * d : m = 7 * d, y = e.fontMetrics().denom1) : (h > 0 ? (f = e.fontMetrics().num2, m = d) : (f = e.fontMetrics().num3, m = 3 * d), y = e.fontMetrics().denom2); + var b; + if (c) { + var C = e.fontMetrics().axisHeight; + f - o.depth - (C + 0.5 * h) < m && (f += m - (f - o.depth - (C + 0.5 * h))), C - 0.5 * h - (u.height - y) < m && (y += m - (C - 0.5 * h - (u.height - y))); + var N = -(C - 0.5 * h); + b = z.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: u, + shift: y + }, { + type: "elem", + elem: c, + shift: N + }, { + type: "elem", + elem: o, + shift: -f + }] + }, e); + } else { + var w = f - o.depth - (u.height - y); + w < m && (f += 0.5 * (m - w), y += 0.5 * (m - w)), b = z.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: u, + shift: y + }, { + type: "elem", + elem: o, + shift: -f + }] + }, e); + } + s = e.havingStyle(n), b.height *= s.sizeMultiplier / e.sizeMultiplier, b.depth *= s.sizeMultiplier / e.sizeMultiplier; + var B; + n.size === Se.DISPLAY.size ? B = e.fontMetrics().delim1 : n.size === Se.SCRIPTSCRIPT.size ? B = e.havingStyle(Se.SCRIPT).fontMetrics().delim2 : B = e.fontMetrics().delim2; + var _, A; + return t.leftDelim == null ? _ = w0(e, ["mopen"]) : _ = ki.customSizedDelim(t.leftDelim, B, !0, e.havingStyle(n), t.mode, ["mopen"]), t.continued ? A = z.makeSpan([]) : t.rightDelim == null ? A = w0(e, ["mclose"]) : A = ki.customSizedDelim(t.rightDelim, B, !0, e.havingStyle(n), t.mode, ["mclose"]), z.makeSpan(["mord"].concat(s.sizingClasses(e)), [_, z.makeSpan(["mfrac"], [b]), A], e); +}, _g = (t, e) => { + var n = new Y.MathNode("mfrac", [st(t.numer, e), st(t.denom, e)]); + if (!t.hasBarLine) + n.setAttribute("linethickness", "0px"); + else if (t.barSize) { + var r = mt(t.barSize, e); + n.setAttribute("linethickness", oe(r)); + } + var i = T9(t.size, e.style); + if (i.size !== e.style.size) { + n = new Y.MathNode("mstyle", [n]); + var s = i.size === Se.DISPLAY.size ? "true" : "false"; + n.setAttribute("displaystyle", s), n.setAttribute("scriptlevel", "0"); + } + if (t.leftDelim != null || t.rightDelim != null) { + var o = []; + if (t.leftDelim != null) { + var l = new Y.MathNode("mo", [new Y.TextNode(t.leftDelim.replace("\\", ""))]); + l.setAttribute("fence", "true"), o.push(l); + } + if (o.push(n), t.rightDelim != null) { + var a = new Y.MathNode("mo", [new Y.TextNode(t.rightDelim.replace("\\", ""))]); + a.setAttribute("fence", "true"), o.push(a); + } + return Sg(o); + } + return n; +}; +ce({ + type: "genfrac", + names: [ + "\\dfrac", + "\\frac", + "\\tfrac", + "\\dbinom", + "\\binom", + "\\tbinom", + "\\\\atopfrac", + // can’t be entered directly + "\\\\bracefrac", + "\\\\brackfrac" + // ditto + ], + props: { + numArgs: 2, + allowedInArgument: !0 + }, + handler: (t, e) => { + var { + parser: n, + funcName: r + } = t, i = e[0], s = e[1], o, l = null, a = null, u = "auto"; + switch (r) { + case "\\dfrac": + case "\\frac": + case "\\tfrac": + o = !0; + break; + case "\\\\atopfrac": + o = !1; + break; + case "\\dbinom": + case "\\binom": + case "\\tbinom": + o = !1, l = "(", a = ")"; + break; + case "\\\\bracefrac": + o = !1, l = "\\{", a = "\\}"; + break; + case "\\\\brackfrac": + o = !1, l = "[", a = "]"; + break; + default: + throw new Error("Unrecognized genfrac command"); + } + switch (r) { + case "\\dfrac": + case "\\dbinom": + u = "display"; + break; + case "\\tfrac": + case "\\tbinom": + u = "text"; + break; + } + return { + type: "genfrac", + mode: n.mode, + continued: !1, + numer: i, + denom: s, + hasBarLine: o, + leftDelim: l, + rightDelim: a, + size: u, + barSize: null + }; + }, + htmlBuilder: Dg, + mathmlBuilder: _g +}); +ce({ + type: "genfrac", + names: ["\\cfrac"], + props: { + numArgs: 2 + }, + handler: (t, e) => { + var { + parser: n, + funcName: r + } = t, i = e[0], s = e[1]; + return { + type: "genfrac", + mode: n.mode, + continued: !0, + numer: i, + denom: s, + hasBarLine: !0, + leftDelim: null, + rightDelim: null, + size: "display", + barSize: null + }; + } +}); +ce({ + type: "infix", + names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"], + props: { + numArgs: 0, + infix: !0 + }, + handler(t) { + var { + parser: e, + funcName: n, + token: r + } = t, i; + switch (n) { + case "\\over": + i = "\\frac"; + break; + case "\\choose": + i = "\\binom"; + break; + case "\\atop": + i = "\\\\atopfrac"; + break; + case "\\brace": + i = "\\\\bracefrac"; + break; + case "\\brack": + i = "\\\\brackfrac"; + break; + default: + throw new Error("Unrecognized infix genfrac command"); + } + return { + type: "infix", + mode: e.mode, + replaceWith: i, + token: r + }; + } +}); +var e7 = ["display", "text", "script", "scriptscript"], t7 = function(e) { + var n = null; + return e.length > 0 && (n = e, n = n === "." ? null : n), n; +}; +ce({ + type: "genfrac", + names: ["\\genfrac"], + props: { + numArgs: 6, + allowedInArgument: !0, + argTypes: ["math", "math", "size", "text", "math", "math"] + }, + handler(t, e) { + var { + parser: n + } = t, r = e[4], i = e[5], s = mh(e[0]), o = s.type === "atom" && s.family === "open" ? t7(s.text) : null, l = mh(e[1]), a = l.type === "atom" && l.family === "close" ? t7(l.text) : null, u = Be(e[2], "size"), c, h = null; + u.isBlank ? c = !0 : (h = u.value, c = h.number > 0); + var d = "auto", f = e[3]; + if (f.type === "ordgroup") { + if (f.body.length > 0) { + var m = Be(f.body[0], "textord"); + d = e7[Number(m.text)]; + } + } else + f = Be(f, "textord"), d = e7[Number(f.text)]; + return { + type: "genfrac", + mode: n.mode, + numer: r, + denom: i, + continued: !1, + hasBarLine: c, + barSize: h, + leftDelim: o, + rightDelim: a, + size: d + }; + }, + htmlBuilder: Dg, + mathmlBuilder: _g +}); +ce({ + type: "infix", + names: ["\\above"], + props: { + numArgs: 1, + argTypes: ["size"], + infix: !0 + }, + handler(t, e) { + var { + parser: n, + funcName: r, + token: i + } = t; + return { + type: "infix", + mode: n.mode, + replaceWith: "\\\\abovefrac", + size: Be(e[0], "size").value, + token: i + }; + } +}); +ce({ + type: "genfrac", + names: ["\\\\abovefrac"], + props: { + numArgs: 3, + argTypes: ["math", "size", "math"] + }, + handler: (t, e) => { + var { + parser: n, + funcName: r + } = t, i = e[0], s = AP(Be(e[1], "infix").size), o = e[2], l = s.number > 0; + return { + type: "genfrac", + mode: n.mode, + numer: i, + denom: o, + continued: !1, + hasBarLine: l, + barSize: s, + leftDelim: null, + rightDelim: null, + size: "auto" + }; + }, + htmlBuilder: Dg, + mathmlBuilder: _g +}); +var E9 = (t, e) => { + var n = e.style, r, i; + t.type === "supsub" ? (r = t.sup ? We(t.sup, e.havingStyle(n.sup()), e) : We(t.sub, e.havingStyle(n.sub()), e), i = Be(t.base, "horizBrace")) : i = Be(t, "horizBrace"); + var s = We(i.base, e.havingBaseStyle(Se.DISPLAY)), o = Ni.svgSpan(i, e), l; + if (i.isOver ? (l = z.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: s + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: o + }] + }, e), l.children[0].children[0].children[1].classes.push("svg-align")) : (l = z.makeVList({ + positionType: "bottom", + positionData: s.depth + 0.1 + o.height, + children: [{ + type: "elem", + elem: o + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: s + }] + }, e), l.children[0].children[0].children[0].classes.push("svg-align")), r) { + var a = z.makeSpan(["mord", i.isOver ? "mover" : "munder"], [l], e); + i.isOver ? l = z.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: a + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: r + }] + }, e) : l = z.makeVList({ + positionType: "bottom", + positionData: a.depth + 0.2 + r.height + r.depth, + children: [{ + type: "elem", + elem: r + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: a + }] + }, e); + } + return z.makeSpan(["mord", i.isOver ? "mover" : "munder"], [l], e); +}, tL = (t, e) => { + var n = Ni.mathMLnode(t.label); + return new Y.MathNode(t.isOver ? "mover" : "munder", [st(t.base, e), n]); +}; +ce({ + type: "horizBrace", + names: ["\\overbrace", "\\underbrace"], + props: { + numArgs: 1 + }, + handler(t, e) { + var { + parser: n, + funcName: r + } = t; + return { + type: "horizBrace", + mode: n.mode, + label: r, + isOver: /^\\over/.test(r), + base: e[0] + }; + }, + htmlBuilder: E9, + mathmlBuilder: tL +}); +ce({ + type: "href", + names: ["\\href"], + props: { + numArgs: 2, + argTypes: ["url", "original"], + allowedInText: !0 + }, + handler: (t, e) => { + var { + parser: n + } = t, r = e[1], i = Be(e[0], "url").url; + return n.settings.isTrusted({ + command: "\\href", + url: i + }) ? { + type: "href", + mode: n.mode, + href: i, + body: xt(r) + } : n.formatUnsupportedCmd("\\href"); + }, + htmlBuilder: (t, e) => { + var n = Bt(t.body, e, !1); + return z.makeAnchor(t.href, [], n, e); + }, + mathmlBuilder: (t, e) => { + var n = ps(t.body, e); + return n instanceof Fn || (n = new Fn("mrow", [n])), n.setAttribute("href", t.href), n; + } +}); +ce({ + type: "href", + names: ["\\url"], + props: { + numArgs: 1, + argTypes: ["url"], + allowedInText: !0 + }, + handler: (t, e) => { + var { + parser: n + } = t, r = Be(e[0], "url").url; + if (!n.settings.isTrusted({ + command: "\\url", + url: r + })) + return n.formatUnsupportedCmd("\\url"); + for (var i = [], s = 0; s < r.length; s++) { + var o = r[s]; + o === "~" && (o = "\\textasciitilde"), i.push({ + type: "textord", + mode: "text", + text: o + }); + } + var l = { + type: "text", + mode: n.mode, + font: "\\texttt", + body: i + }; + return { + type: "href", + mode: n.mode, + href: r, + body: xt(l) + }; + } +}); +ce({ + type: "hbox", + names: ["\\hbox"], + props: { + numArgs: 1, + argTypes: ["text"], + allowedInText: !0, + primitive: !0 + }, + handler(t, e) { + var { + parser: n + } = t; + return { + type: "hbox", + mode: n.mode, + body: xt(e[0]) + }; + }, + htmlBuilder(t, e) { + var n = Bt(t.body, e, !1); + return z.makeFragment(n); + }, + mathmlBuilder(t, e) { + return new Y.MathNode("mrow", An(t.body, e)); + } +}); +ce({ + type: "html", + names: ["\\htmlClass", "\\htmlId", "\\htmlStyle", "\\htmlData"], + props: { + numArgs: 2, + argTypes: ["raw", "original"], + allowedInText: !0 + }, + handler: (t, e) => { + var { + parser: n, + funcName: r, + token: i + } = t, s = Be(e[0], "raw").string, o = e[1]; + n.settings.strict && n.settings.reportNonstrict("htmlExtension", "HTML extension is disabled on strict mode"); + var l, a = {}; + switch (r) { + case "\\htmlClass": + a.class = s, l = { + command: "\\htmlClass", + class: s + }; + break; + case "\\htmlId": + a.id = s, l = { + command: "\\htmlId", + id: s + }; + break; + case "\\htmlStyle": + a.style = s, l = { + command: "\\htmlStyle", + style: s + }; + break; + case "\\htmlData": { + for (var u = s.split(","), c = 0; c < u.length; c++) { + var h = u[c], d = h.indexOf("="); + if (d < 0) + throw new Q("\\htmlData key/value '" + h + "' missing equals sign"); + var f = h.slice(0, d), m = h.slice(d + 1); + a["data-" + f.trim()] = m; + } + l = { + command: "\\htmlData", + attributes: a + }; + break; + } + default: + throw new Error("Unrecognized html command"); + } + return n.settings.isTrusted(l) ? { + type: "html", + mode: n.mode, + attributes: a, + body: xt(o) + } : n.formatUnsupportedCmd(r); + }, + htmlBuilder: (t, e) => { + var n = Bt(t.body, e, !1), r = ["enclosing"]; + t.attributes.class && r.push(...t.attributes.class.trim().split(/\s+/)); + var i = z.makeSpan(r, n, e); + for (var s in t.attributes) + s !== "class" && t.attributes.hasOwnProperty(s) && i.setAttribute(s, t.attributes[s]); + return i; + }, + mathmlBuilder: (t, e) => ps(t.body, e) +}); +ce({ + type: "htmlmathml", + names: ["\\html@mathml"], + props: { + numArgs: 2, + allowedInText: !0 + }, + handler: (t, e) => { + var { + parser: n + } = t; + return { + type: "htmlmathml", + mode: n.mode, + html: xt(e[0]), + mathml: xt(e[1]) + }; + }, + htmlBuilder: (t, e) => { + var n = Bt(t.html, e, !1); + return z.makeFragment(n); + }, + mathmlBuilder: (t, e) => ps(t.mathml, e) +}); +var Ef = function(e) { + if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e)) + return { + number: +e, + unit: "bp" + }; + var n = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e); + if (!n) + throw new Q("Invalid size: '" + e + "' in \\includegraphics"); + var r = { + number: +(n[1] + n[2]), + // sign + magnitude, cast to number + unit: n[3] + }; + if (!Gb(r)) + throw new Q("Invalid unit: '" + r.unit + "' in \\includegraphics."); + return r; +}; +ce({ + type: "includegraphics", + names: ["\\includegraphics"], + props: { + numArgs: 1, + numOptionalArgs: 1, + argTypes: ["raw", "url"], + allowedInText: !1 + }, + handler: (t, e, n) => { + var { + parser: r + } = t, i = { + number: 0, + unit: "em" + }, s = { + number: 0.9, + unit: "em" + }, o = { + number: 0, + unit: "em" + }, l = ""; + if (n[0]) + for (var a = Be(n[0], "raw").string, u = a.split(","), c = 0; c < u.length; c++) { + var h = u[c].split("="); + if (h.length === 2) { + var d = h[1].trim(); + switch (h[0].trim()) { + case "alt": + l = d; + break; + case "width": + i = Ef(d); + break; + case "height": + s = Ef(d); + break; + case "totalheight": + o = Ef(d); + break; + default: + throw new Q("Invalid key: '" + h[0] + "' in \\includegraphics."); + } + } + } + var f = Be(e[0], "url").url; + return l === "" && (l = f, l = l.replace(/^.*[\\/]/, ""), l = l.substring(0, l.lastIndexOf("."))), r.settings.isTrusted({ + command: "\\includegraphics", + url: f + }) ? { + type: "includegraphics", + mode: r.mode, + alt: l, + width: i, + height: s, + totalheight: o, + src: f + } : r.formatUnsupportedCmd("\\includegraphics"); + }, + htmlBuilder: (t, e) => { + var n = mt(t.height, e), r = 0; + t.totalheight.number > 0 && (r = mt(t.totalheight, e) - n); + var i = 0; + t.width.number > 0 && (i = mt(t.width, e)); + var s = { + height: oe(n + r) + }; + i > 0 && (s.width = oe(i)), r > 0 && (s.verticalAlign = oe(-r)); + var o = new tB(t.src, t.alt, s); + return o.height = n, o.depth = r, o; + }, + mathmlBuilder: (t, e) => { + var n = new Y.MathNode("mglyph", []); + n.setAttribute("alt", t.alt); + var r = mt(t.height, e), i = 0; + if (t.totalheight.number > 0 && (i = mt(t.totalheight, e) - r, n.setAttribute("valign", oe(-i))), n.setAttribute("height", oe(r + i)), t.width.number > 0) { + var s = mt(t.width, e); + n.setAttribute("width", oe(s)); + } + return n.setAttribute("src", t.src), n; + } +}); +ce({ + type: "kern", + names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"], + props: { + numArgs: 1, + argTypes: ["size"], + primitive: !0, + allowedInText: !0 + }, + handler(t, e) { + var { + parser: n, + funcName: r + } = t, i = Be(e[0], "size"); + if (n.settings.strict) { + var s = r[1] === "m", o = i.value.unit === "mu"; + s ? (o || n.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + r + " supports only mu units, " + ("not " + i.value.unit + " units")), n.mode !== "math" && n.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + r + " works only in math mode")) : o && n.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + r + " doesn't support mu units"); + } + return { + type: "kern", + mode: n.mode, + dimension: i.value + }; + }, + htmlBuilder(t, e) { + return z.makeGlue(t.dimension, e); + }, + mathmlBuilder(t, e) { + var n = mt(t.dimension, e); + return new Y.SpaceNode(n); + } +}); +ce({ + type: "lap", + names: ["\\mathllap", "\\mathrlap", "\\mathclap"], + props: { + numArgs: 1, + allowedInText: !0 + }, + handler: (t, e) => { + var { + parser: n, + funcName: r + } = t, i = e[0]; + return { + type: "lap", + mode: n.mode, + alignment: r.slice(5), + body: i + }; + }, + htmlBuilder: (t, e) => { + var n; + t.alignment === "clap" ? (n = z.makeSpan([], [We(t.body, e)]), n = z.makeSpan(["inner"], [n], e)) : n = z.makeSpan(["inner"], [We(t.body, e)]); + var r = z.makeSpan(["fix"], []), i = z.makeSpan([t.alignment], [n, r], e), s = z.makeSpan(["strut"]); + return s.style.height = oe(i.height + i.depth), i.depth && (s.style.verticalAlign = oe(-i.depth)), i.children.unshift(s), i = z.makeSpan(["thinbox"], [i], e), z.makeSpan(["mord", "vbox"], [i], e); + }, + mathmlBuilder: (t, e) => { + var n = new Y.MathNode("mpadded", [st(t.body, e)]); + if (t.alignment !== "rlap") { + var r = t.alignment === "llap" ? "-1" : "-0.5"; + n.setAttribute("lspace", r + "width"); + } + return n.setAttribute("width", "0px"), n; + } +}); +ce({ + type: "styling", + names: ["\\(", "$"], + props: { + numArgs: 0, + allowedInText: !0, + allowedInMath: !1 + }, + handler(t, e) { + var { + funcName: n, + parser: r + } = t, i = r.mode; + r.switchMode("math"); + var s = n === "\\(" ? "\\)" : "$", o = r.parseExpression(!1, s); + return r.expect(s), r.switchMode(i), { + type: "styling", + mode: r.mode, + style: "text", + body: o + }; + } +}); +ce({ + type: "text", + // Doesn't matter what this is. + names: ["\\)", "\\]"], + props: { + numArgs: 0, + allowedInText: !0, + allowedInMath: !1 + }, + handler(t, e) { + throw new Q("Mismatched " + t.funcName); + } +}); +var n7 = (t, e) => { + switch (e.style.size) { + case Se.DISPLAY.size: + return t.display; + case Se.TEXT.size: + return t.text; + case Se.SCRIPT.size: + return t.script; + case Se.SCRIPTSCRIPT.size: + return t.scriptscript; + default: + return t.text; + } +}; +ce({ + type: "mathchoice", + names: ["\\mathchoice"], + props: { + numArgs: 4, + primitive: !0 + }, + handler: (t, e) => { + var { + parser: n + } = t; + return { + type: "mathchoice", + mode: n.mode, + display: xt(e[0]), + text: xt(e[1]), + script: xt(e[2]), + scriptscript: xt(e[3]) + }; + }, + htmlBuilder: (t, e) => { + var n = n7(t, e), r = Bt(n, e, !1); + return z.makeFragment(r); + }, + mathmlBuilder: (t, e) => { + var n = n7(t, e); + return ps(n, e); + } +}); +var O9 = (t, e, n, r, i, s, o) => { + t = z.makeSpan([], [t]); + var l = n && Ke.isCharacterBox(n), a, u; + if (e) { + var c = We(e, r.havingStyle(i.sup()), r); + u = { + elem: c, + kern: Math.max(r.fontMetrics().bigOpSpacing1, r.fontMetrics().bigOpSpacing3 - c.depth) + }; + } + if (n) { + var h = We(n, r.havingStyle(i.sub()), r); + a = { + elem: h, + kern: Math.max(r.fontMetrics().bigOpSpacing2, r.fontMetrics().bigOpSpacing4 - h.height) + }; + } + var d; + if (u && a) { + var f = r.fontMetrics().bigOpSpacing5 + a.elem.height + a.elem.depth + a.kern + t.depth + o; + d = z.makeVList({ + positionType: "bottom", + positionData: f, + children: [{ + type: "kern", + size: r.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: a.elem, + marginLeft: oe(-s) + }, { + type: "kern", + size: a.kern + }, { + type: "elem", + elem: t + }, { + type: "kern", + size: u.kern + }, { + type: "elem", + elem: u.elem, + marginLeft: oe(s) + }, { + type: "kern", + size: r.fontMetrics().bigOpSpacing5 + }] + }, r); + } else if (a) { + var m = t.height - o; + d = z.makeVList({ + positionType: "top", + positionData: m, + children: [{ + type: "kern", + size: r.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: a.elem, + marginLeft: oe(-s) + }, { + type: "kern", + size: a.kern + }, { + type: "elem", + elem: t + }] + }, r); + } else if (u) { + var y = t.depth + o; + d = z.makeVList({ + positionType: "bottom", + positionData: y, + children: [{ + type: "elem", + elem: t + }, { + type: "kern", + size: u.kern + }, { + type: "elem", + elem: u.elem, + marginLeft: oe(s) + }, { + type: "kern", + size: r.fontMetrics().bigOpSpacing5 + }] + }, r); + } else + return t; + var b = [d]; + if (a && s !== 0 && !l) { + var w = z.makeSpan(["mspace"], [], r); + w.style.marginRight = oe(s), b.unshift(w); + } + return z.makeSpan(["mop", "op-limits"], b, r); +}, A9 = ["\\smallint"], Gl = (t, e) => { + var n, r, i = !1, s; + t.type === "supsub" ? (n = t.sup, r = t.sub, s = Be(t.base, "op"), i = !0) : s = Be(t, "op"); + var o = e.style, l = !1; + o.size === Se.DISPLAY.size && s.symbol && !A9.includes(s.name) && (l = !0); + var a; + if (s.symbol) { + var u = l ? "Size2-Regular" : "Size1-Regular", c = ""; + if ((s.name === "\\oiint" || s.name === "\\oiiint") && (c = s.name.slice(1), s.name = c === "oiint" ? "\\iint" : "\\iiint"), a = z.makeSymbol(s.name, u, "math", e, ["mop", "op-symbol", l ? "large-op" : "small-op"]), c.length > 0) { + var h = a.italic, d = z.staticSvg(c + "Size" + (l ? "2" : "1"), e); + a = z.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: a, + shift: 0 + }, { + type: "elem", + elem: d, + shift: l ? 0.08 : 0 + }] + }, e), s.name = "\\" + c, a.classes.unshift("mop"), a.italic = h; + } + } else if (s.body) { + var f = Bt(s.body, e, !0); + f.length === 1 && f[0] instanceof nr ? (a = f[0], a.classes[0] = "mop") : a = z.makeSpan(["mop"], f, e); + } else { + for (var m = [], y = 1; y < s.name.length; y++) + m.push(z.mathsym(s.name[y], s.mode, e)); + a = z.makeSpan(["mop"], m, e); + } + var b = 0, w = 0; + return (a instanceof nr || s.name === "\\oiint" || s.name === "\\oiiint") && !s.suppressBaseShift && (b = (a.height - a.depth) / 2 - e.fontMetrics().axisHeight, w = a.italic), i ? O9(a, n, r, e, o, w, b) : (b && (a.style.position = "relative", a.style.top = oe(b)), a); +}, yu = (t, e) => { + var n; + if (t.symbol) + n = new Fn("mo", [rr(t.name, t.mode)]), A9.includes(t.name) && n.setAttribute("largeop", "false"); + else if (t.body) + n = new Fn("mo", An(t.body, e)); + else { + n = new Fn("mi", [new Lr(t.name.slice(1))]); + var r = new Fn("mo", [rr("⁡", "text")]); + t.parentIsSupSub ? n = new Fn("mrow", [n, r]) : n = i9([n, r]); + } + return n; +}, nL = { + "∏": "\\prod", + "∐": "\\coprod", + "∑": "\\sum", + "⋀": "\\bigwedge", + "⋁": "\\bigvee", + "⋂": "\\bigcap", + "⋃": "\\bigcup", + "⨀": "\\bigodot", + "⨁": "\\bigoplus", + "⨂": "\\bigotimes", + "⨄": "\\biguplus", + "⨆": "\\bigsqcup" +}; +ce({ + type: "op", + names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "∏", "∐", "∑", "⋀", "⋁", "⋂", "⋃", "⨀", "⨁", "⨂", "⨄", "⨆"], + props: { + numArgs: 0 + }, + handler: (t, e) => { + var { + parser: n, + funcName: r + } = t, i = r; + return i.length === 1 && (i = nL[i]), { + type: "op", + mode: n.mode, + limits: !0, + parentIsSupSub: !1, + symbol: !0, + name: i + }; + }, + htmlBuilder: Gl, + mathmlBuilder: yu +}); +ce({ + type: "op", + names: ["\\mathop"], + props: { + numArgs: 1, + primitive: !0 + }, + handler: (t, e) => { + var { + parser: n + } = t, r = e[0]; + return { + type: "op", + mode: n.mode, + limits: !1, + parentIsSupSub: !1, + symbol: !1, + body: xt(r) + }; + }, + htmlBuilder: Gl, + mathmlBuilder: yu +}); +var rL = { + "∫": "\\int", + "∬": "\\iint", + "∭": "\\iiint", + "∮": "\\oint", + "∯": "\\oiint", + "∰": "\\oiiint" +}; +ce({ + type: "op", + names: ["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"], + props: { + numArgs: 0 + }, + handler(t) { + var { + parser: e, + funcName: n + } = t; + return { + type: "op", + mode: e.mode, + limits: !1, + parentIsSupSub: !1, + symbol: !1, + name: n + }; + }, + htmlBuilder: Gl, + mathmlBuilder: yu +}); +ce({ + type: "op", + names: ["\\det", "\\gcd", "\\inf", "\\lim", "\\max", "\\min", "\\Pr", "\\sup"], + props: { + numArgs: 0 + }, + handler(t) { + var { + parser: e, + funcName: n + } = t; + return { + type: "op", + mode: e.mode, + limits: !0, + parentIsSupSub: !1, + symbol: !1, + name: n + }; + }, + htmlBuilder: Gl, + mathmlBuilder: yu +}); +ce({ + type: "op", + names: ["\\int", "\\iint", "\\iiint", "\\oint", "\\oiint", "\\oiiint", "∫", "∬", "∭", "∮", "∯", "∰"], + props: { + numArgs: 0, + allowedInArgument: !0 + }, + handler(t) { + var { + parser: e, + funcName: n + } = t, r = n; + return r.length === 1 && (r = rL[r]), { + type: "op", + mode: e.mode, + limits: !1, + parentIsSupSub: !1, + symbol: !0, + name: r + }; + }, + htmlBuilder: Gl, + mathmlBuilder: yu +}); +var I9 = (t, e) => { + var n, r, i = !1, s; + t.type === "supsub" ? (n = t.sup, r = t.sub, s = Be(t.base, "operatorname"), i = !0) : s = Be(t, "operatorname"); + var o; + if (s.body.length > 0) { + for (var l = s.body.map((h) => { + var d = h.text; + return typeof d == "string" ? { + type: "textord", + mode: h.mode, + text: d + } : h; + }), a = Bt(l, e.withFont("mathrm"), !0), u = 0; u < a.length; u++) { + var c = a[u]; + c instanceof nr && (c.text = c.text.replace(/\u2212/, "-").replace(/\u2217/, "*")); + } + o = z.makeSpan(["mop"], a, e); + } else + o = z.makeSpan(["mop"], [], e); + return i ? O9(o, n, r, e, e.style, 0, 0) : o; +}, iL = (t, e) => { + for (var n = An(t.body, e.withFont("mathrm")), r = !0, i = 0; i < n.length; i++) { + var s = n[i]; + if (!(s instanceof Y.SpaceNode)) if (s instanceof Y.MathNode) + switch (s.type) { + case "mi": + case "mn": + case "ms": + case "mspace": + case "mtext": + break; + case "mo": { + var o = s.children[0]; + s.children.length === 1 && o instanceof Y.TextNode ? o.text = o.text.replace(/\u2212/, "-").replace(/\u2217/, "*") : r = !1; + break; + } + default: + r = !1; + } + else + r = !1; + } + if (r) { + var l = n.map((c) => c.toText()).join(""); + n = [new Y.TextNode(l)]; + } + var a = new Y.MathNode("mi", n); + a.setAttribute("mathvariant", "normal"); + var u = new Y.MathNode("mo", [rr("⁡", "text")]); + return t.parentIsSupSub ? new Y.MathNode("mrow", [a, u]) : Y.newDocumentFragment([a, u]); +}; +ce({ + type: "operatorname", + names: ["\\operatorname@", "\\operatornamewithlimits"], + props: { + numArgs: 1 + }, + handler: (t, e) => { + var { + parser: n, + funcName: r + } = t, i = e[0]; + return { + type: "operatorname", + mode: n.mode, + body: xt(i), + alwaysHandleSupSub: r === "\\operatornamewithlimits", + limits: !1, + parentIsSupSub: !1 + }; + }, + htmlBuilder: I9, + mathmlBuilder: iL +}); +k("\\operatorname", "\\@ifstar\\operatornamewithlimits\\operatorname@"); +Mo({ + type: "ordgroup", + htmlBuilder(t, e) { + return t.semisimple ? z.makeFragment(Bt(t.body, e, !1)) : z.makeSpan(["mord"], Bt(t.body, e, !0), e); + }, + mathmlBuilder(t, e) { + return ps(t.body, e, !0); + } +}); +ce({ + type: "overline", + names: ["\\overline"], + props: { + numArgs: 1 + }, + handler(t, e) { + var { + parser: n + } = t, r = e[0]; + return { + type: "overline", + mode: n.mode, + body: r + }; + }, + htmlBuilder(t, e) { + var n = We(t.body, e.havingCrampedStyle()), r = z.makeLineSpan("overline-line", e), i = e.fontMetrics().defaultRuleThickness, s = z.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: n + }, { + type: "kern", + size: 3 * i + }, { + type: "elem", + elem: r + }, { + type: "kern", + size: i + }] + }, e); + return z.makeSpan(["mord", "overline"], [s], e); + }, + mathmlBuilder(t, e) { + var n = new Y.MathNode("mo", [new Y.TextNode("‾")]); + n.setAttribute("stretchy", "true"); + var r = new Y.MathNode("mover", [st(t.body, e), n]); + return r.setAttribute("accent", "true"), r; + } +}); +ce({ + type: "phantom", + names: ["\\phantom"], + props: { + numArgs: 1, + allowedInText: !0 + }, + handler: (t, e) => { + var { + parser: n + } = t, r = e[0]; + return { + type: "phantom", + mode: n.mode, + body: xt(r) + }; + }, + htmlBuilder: (t, e) => { + var n = Bt(t.body, e.withPhantom(), !1); + return z.makeFragment(n); + }, + mathmlBuilder: (t, e) => { + var n = An(t.body, e); + return new Y.MathNode("mphantom", n); + } +}); +ce({ + type: "hphantom", + names: ["\\hphantom"], + props: { + numArgs: 1, + allowedInText: !0 + }, + handler: (t, e) => { + var { + parser: n + } = t, r = e[0]; + return { + type: "hphantom", + mode: n.mode, + body: r + }; + }, + htmlBuilder: (t, e) => { + var n = z.makeSpan([], [We(t.body, e.withPhantom())]); + if (n.height = 0, n.depth = 0, n.children) + for (var r = 0; r < n.children.length; r++) + n.children[r].height = 0, n.children[r].depth = 0; + return n = z.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: n + }] + }, e), z.makeSpan(["mord"], [n], e); + }, + mathmlBuilder: (t, e) => { + var n = An(xt(t.body), e), r = new Y.MathNode("mphantom", n), i = new Y.MathNode("mpadded", [r]); + return i.setAttribute("height", "0px"), i.setAttribute("depth", "0px"), i; + } +}); +ce({ + type: "vphantom", + names: ["\\vphantom"], + props: { + numArgs: 1, + allowedInText: !0 + }, + handler: (t, e) => { + var { + parser: n + } = t, r = e[0]; + return { + type: "vphantom", + mode: n.mode, + body: r + }; + }, + htmlBuilder: (t, e) => { + var n = z.makeSpan(["inner"], [We(t.body, e.withPhantom())]), r = z.makeSpan(["fix"], []); + return z.makeSpan(["mord", "rlap"], [n, r], e); + }, + mathmlBuilder: (t, e) => { + var n = An(xt(t.body), e), r = new Y.MathNode("mphantom", n), i = new Y.MathNode("mpadded", [r]); + return i.setAttribute("width", "0px"), i; + } +}); +ce({ + type: "raisebox", + names: ["\\raisebox"], + props: { + numArgs: 2, + argTypes: ["size", "hbox"], + allowedInText: !0 + }, + handler(t, e) { + var { + parser: n + } = t, r = Be(e[0], "size").value, i = e[1]; + return { + type: "raisebox", + mode: n.mode, + dy: r, + body: i + }; + }, + htmlBuilder(t, e) { + var n = We(t.body, e), r = mt(t.dy, e); + return z.makeVList({ + positionType: "shift", + positionData: -r, + children: [{ + type: "elem", + elem: n + }] + }, e); + }, + mathmlBuilder(t, e) { + var n = new Y.MathNode("mpadded", [st(t.body, e)]), r = t.dy.number + t.dy.unit; + return n.setAttribute("voffset", r), n; + } +}); +ce({ + type: "internal", + names: ["\\relax"], + props: { + numArgs: 0, + allowedInText: !0, + allowedInArgument: !0 + }, + handler(t) { + var { + parser: e + } = t; + return { + type: "internal", + mode: e.mode + }; + } +}); +ce({ + type: "rule", + names: ["\\rule"], + props: { + numArgs: 2, + numOptionalArgs: 1, + allowedInText: !0, + allowedInMath: !0, + argTypes: ["size", "size", "size"] + }, + handler(t, e, n) { + var { + parser: r + } = t, i = n[0], s = Be(e[0], "size"), o = Be(e[1], "size"); + return { + type: "rule", + mode: r.mode, + shift: i && Be(i, "size").value, + width: s.value, + height: o.value + }; + }, + htmlBuilder(t, e) { + var n = z.makeSpan(["mord", "rule"], [], e), r = mt(t.width, e), i = mt(t.height, e), s = t.shift ? mt(t.shift, e) : 0; + return n.style.borderRightWidth = oe(r), n.style.borderTopWidth = oe(i), n.style.bottom = oe(s), n.width = r, n.height = i + s, n.depth = -s, n.maxFontSize = i * 1.125 * e.sizeMultiplier, n; + }, + mathmlBuilder(t, e) { + var n = mt(t.width, e), r = mt(t.height, e), i = t.shift ? mt(t.shift, e) : 0, s = e.color && e.getColor() || "black", o = new Y.MathNode("mspace"); + o.setAttribute("mathbackground", s), o.setAttribute("width", oe(n)), o.setAttribute("height", oe(r)); + var l = new Y.MathNode("mpadded", [o]); + return i >= 0 ? l.setAttribute("height", oe(i)) : (l.setAttribute("height", oe(i)), l.setAttribute("depth", oe(-i))), l.setAttribute("voffset", oe(i)), l; + } +}); +function D9(t, e, n) { + for (var r = Bt(t, e, !1), i = e.sizeMultiplier / n.sizeMultiplier, s = 0; s < r.length; s++) { + var o = r[s].classes.indexOf("sizing"); + o < 0 ? Array.prototype.push.apply(r[s].classes, e.sizingClasses(n)) : r[s].classes[o + 1] === "reset-size" + e.size && (r[s].classes[o + 1] = "reset-size" + n.size), r[s].height *= i, r[s].depth *= i; + } + return z.makeFragment(r); +} +var r7 = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"], sL = (t, e) => { + var n = e.havingSize(t.size); + return D9(t.body, n, e); +}; +ce({ + type: "sizing", + names: r7, + props: { + numArgs: 0, + allowedInText: !0 + }, + handler: (t, e) => { + var { + breakOnTokenText: n, + funcName: r, + parser: i + } = t, s = i.parseExpression(!1, n); + return { + type: "sizing", + mode: i.mode, + // Figure out what size to use based on the list of functions above + size: r7.indexOf(r) + 1, + body: s + }; + }, + htmlBuilder: sL, + mathmlBuilder: (t, e) => { + var n = e.havingSize(t.size), r = An(t.body, n), i = new Y.MathNode("mstyle", r); + return i.setAttribute("mathsize", oe(n.sizeMultiplier)), i; + } +}); +ce({ + type: "smash", + names: ["\\smash"], + props: { + numArgs: 1, + numOptionalArgs: 1, + allowedInText: !0 + }, + handler: (t, e, n) => { + var { + parser: r + } = t, i = !1, s = !1, o = n[0] && Be(n[0], "ordgroup"); + if (o) + for (var l = "", a = 0; a < o.body.length; ++a) { + var u = o.body[a]; + if (l = u.text, l === "t") + i = !0; + else if (l === "b") + s = !0; + else { + i = !1, s = !1; + break; + } + } + else + i = !0, s = !0; + var c = e[0]; + return { + type: "smash", + mode: r.mode, + body: c, + smashHeight: i, + smashDepth: s + }; + }, + htmlBuilder: (t, e) => { + var n = z.makeSpan([], [We(t.body, e)]); + if (!t.smashHeight && !t.smashDepth) + return n; + if (t.smashHeight && (n.height = 0, n.children)) + for (var r = 0; r < n.children.length; r++) + n.children[r].height = 0; + if (t.smashDepth && (n.depth = 0, n.children)) + for (var i = 0; i < n.children.length; i++) + n.children[i].depth = 0; + var s = z.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: n + }] + }, e); + return z.makeSpan(["mord"], [s], e); + }, + mathmlBuilder: (t, e) => { + var n = new Y.MathNode("mpadded", [st(t.body, e)]); + return t.smashHeight && n.setAttribute("height", "0px"), t.smashDepth && n.setAttribute("depth", "0px"), n; + } +}); +ce({ + type: "sqrt", + names: ["\\sqrt"], + props: { + numArgs: 1, + numOptionalArgs: 1 + }, + handler(t, e, n) { + var { + parser: r + } = t, i = n[0], s = e[0]; + return { + type: "sqrt", + mode: r.mode, + body: s, + index: i + }; + }, + htmlBuilder(t, e) { + var n = We(t.body, e.havingCrampedStyle()); + n.height === 0 && (n.height = e.fontMetrics().xHeight), n = z.wrapFragment(n, e); + var r = e.fontMetrics(), i = r.defaultRuleThickness, s = i; + e.style.id < Se.TEXT.id && (s = e.fontMetrics().xHeight); + var o = i + s / 4, l = n.height + n.depth + o + i, { + span: a, + ruleWidth: u, + advanceWidth: c + } = ki.sqrtImage(l, e), h = a.height - u; + h > n.height + n.depth + o && (o = (o + h - n.height - n.depth) / 2); + var d = a.height - n.height - o - u; + n.style.paddingLeft = oe(c); + var f = z.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: n, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: -(n.height + d) + }, { + type: "elem", + elem: a + }, { + type: "kern", + size: u + }] + }, e); + if (t.index) { + var m = e.havingStyle(Se.SCRIPTSCRIPT), y = We(t.index, m, e), b = 0.6 * (f.height - f.depth), w = z.makeVList({ + positionType: "shift", + positionData: -b, + children: [{ + type: "elem", + elem: y + }] + }, e), C = z.makeSpan(["root"], [w]); + return z.makeSpan(["mord", "sqrt"], [C, f], e); + } else + return z.makeSpan(["mord", "sqrt"], [f], e); + }, + mathmlBuilder(t, e) { + var { + body: n, + index: r + } = t; + return r ? new Y.MathNode("mroot", [st(n, e), st(r, e)]) : new Y.MathNode("msqrt", [st(n, e)]); + } +}); +var i7 = { + display: Se.DISPLAY, + text: Se.TEXT, + script: Se.SCRIPT, + scriptscript: Se.SCRIPTSCRIPT +}; +ce({ + type: "styling", + names: ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"], + props: { + numArgs: 0, + allowedInText: !0, + primitive: !0 + }, + handler(t, e) { + var { + breakOnTokenText: n, + funcName: r, + parser: i + } = t, s = i.parseExpression(!0, n), o = r.slice(1, r.length - 5); + return { + type: "styling", + mode: i.mode, + // Figure out what style to use by pulling out the style from + // the function name + style: o, + body: s + }; + }, + htmlBuilder(t, e) { + var n = i7[t.style], r = e.havingStyle(n).withFont(""); + return D9(t.body, r, e); + }, + mathmlBuilder(t, e) { + var n = i7[t.style], r = e.havingStyle(n), i = An(t.body, r), s = new Y.MathNode("mstyle", i), o = { + display: ["0", "true"], + text: ["0", "false"], + script: ["1", "false"], + scriptscript: ["2", "false"] + }, l = o[t.style]; + return s.setAttribute("scriptlevel", l[0]), s.setAttribute("displaystyle", l[1]), s; + } +}); +var oL = function(e, n) { + var r = e.base; + if (r) + if (r.type === "op") { + var i = r.limits && (n.style.size === Se.DISPLAY.size || r.alwaysHandleSupSub); + return i ? Gl : null; + } else if (r.type === "operatorname") { + var s = r.alwaysHandleSupSub && (n.style.size === Se.DISPLAY.size || r.limits); + return s ? I9 : null; + } else { + if (r.type === "accent") + return Ke.isCharacterBox(r.base) ? Mg : null; + if (r.type === "horizBrace") { + var o = !e.sub; + return o === r.isOver ? E9 : null; + } else + return null; + } + else return null; +}; +Mo({ + type: "supsub", + htmlBuilder(t, e) { + var n = oL(t, e); + if (n) + return n(t, e); + var { + base: r, + sup: i, + sub: s + } = t, o = We(r, e), l, a, u = e.fontMetrics(), c = 0, h = 0, d = r && Ke.isCharacterBox(r); + if (i) { + var f = e.havingStyle(e.style.sup()); + l = We(i, f, e), d || (c = o.height - f.fontMetrics().supDrop * f.sizeMultiplier / e.sizeMultiplier); + } + if (s) { + var m = e.havingStyle(e.style.sub()); + a = We(s, m, e), d || (h = o.depth + m.fontMetrics().subDrop * m.sizeMultiplier / e.sizeMultiplier); + } + var y; + e.style === Se.DISPLAY ? y = u.sup1 : e.style.cramped ? y = u.sup3 : y = u.sup2; + var b = e.sizeMultiplier, w = oe(0.5 / u.ptPerEm / b), C = null; + if (a) { + var N = t.base && t.base.type === "op" && t.base.name && (t.base.name === "\\oiint" || t.base.name === "\\oiiint"); + (o instanceof nr || N) && (C = oe(-o.italic)); + } + var B; + if (l && a) { + c = Math.max(c, y, l.depth + 0.25 * u.xHeight), h = Math.max(h, u.sub2); + var _ = u.defaultRuleThickness, A = 4 * _; + if (c - l.depth - (a.height - h) < A) { + h = A - (c - l.depth) + a.height; + var L = 0.8 * u.xHeight - (c - l.depth); + L > 0 && (c += L, h -= L); + } + var K = [{ + type: "elem", + elem: a, + shift: h, + marginRight: w, + marginLeft: C + }, { + type: "elem", + elem: l, + shift: -c, + marginRight: w + }]; + B = z.makeVList({ + positionType: "individualShift", + children: K + }, e); + } else if (a) { + h = Math.max(h, u.sub1, a.height - 0.8 * u.xHeight); + var J = [{ + type: "elem", + elem: a, + marginLeft: C, + marginRight: w + }]; + B = z.makeVList({ + positionType: "shift", + positionData: h, + children: J + }, e); + } else if (l) + c = Math.max(c, y, l.depth + 0.25 * u.xHeight), B = z.makeVList({ + positionType: "shift", + positionData: -c, + children: [{ + type: "elem", + elem: l, + marginRight: w + }] + }, e); + else + throw new Error("supsub must have either sup or sub."); + var P = qp(o, "right") || "mord"; + return z.makeSpan([P], [o, z.makeSpan(["msupsub"], [B])], e); + }, + mathmlBuilder(t, e) { + var n = !1, r, i; + t.base && t.base.type === "horizBrace" && (i = !!t.sup, i === t.base.isOver && (n = !0, r = t.base.isOver)), t.base && (t.base.type === "op" || t.base.type === "operatorname") && (t.base.parentIsSupSub = !0); + var s = [st(t.base, e)]; + t.sub && s.push(st(t.sub, e)), t.sup && s.push(st(t.sup, e)); + var o; + if (n) + o = r ? "mover" : "munder"; + else if (t.sub) + if (t.sup) { + var u = t.base; + u && u.type === "op" && u.limits && e.style === Se.DISPLAY || u && u.type === "operatorname" && u.alwaysHandleSupSub && (e.style === Se.DISPLAY || u.limits) ? o = "munderover" : o = "msubsup"; + } else { + var a = t.base; + a && a.type === "op" && a.limits && (e.style === Se.DISPLAY || a.alwaysHandleSupSub) || a && a.type === "operatorname" && a.alwaysHandleSupSub && (a.limits || e.style === Se.DISPLAY) ? o = "munder" : o = "msub"; + } + else { + var l = t.base; + l && l.type === "op" && l.limits && (e.style === Se.DISPLAY || l.alwaysHandleSupSub) || l && l.type === "operatorname" && l.alwaysHandleSupSub && (l.limits || e.style === Se.DISPLAY) ? o = "mover" : o = "msup"; + } + return new Y.MathNode(o, s); + } +}); +Mo({ + type: "atom", + htmlBuilder(t, e) { + return z.mathsym(t.text, t.mode, e, ["m" + t.family]); + }, + mathmlBuilder(t, e) { + var n = new Y.MathNode("mo", [rr(t.text, t.mode)]); + if (t.family === "bin") { + var r = Cg(t, e); + r === "bold-italic" && n.setAttribute("mathvariant", r); + } else t.family === "punct" ? n.setAttribute("separator", "true") : (t.family === "open" || t.family === "close") && n.setAttribute("stretchy", "false"); + return n; + } +}); +var _9 = { + mi: "italic", + mn: "normal", + mtext: "normal" +}; +Mo({ + type: "mathord", + htmlBuilder(t, e) { + return z.makeOrd(t, e, "mathord"); + }, + mathmlBuilder(t, e) { + var n = new Y.MathNode("mi", [rr(t.text, t.mode, e)]), r = Cg(t, e) || "italic"; + return r !== _9[n.type] && n.setAttribute("mathvariant", r), n; + } +}); +Mo({ + type: "textord", + htmlBuilder(t, e) { + return z.makeOrd(t, e, "textord"); + }, + mathmlBuilder(t, e) { + var n = rr(t.text, t.mode, e), r = Cg(t, e) || "normal", i; + return t.mode === "text" ? i = new Y.MathNode("mtext", [n]) : /[0-9]/.test(t.text) ? i = new Y.MathNode("mn", [n]) : t.text === "\\prime" ? i = new Y.MathNode("mo", [n]) : i = new Y.MathNode("mi", [n]), r !== _9[i.type] && i.setAttribute("mathvariant", r), i; + } +}); +var Of = { + "\\nobreak": "nobreak", + "\\allowbreak": "allowbreak" +}, Af = { + " ": {}, + "\\ ": {}, + "~": { + className: "nobreak" + }, + "\\space": {}, + "\\nobreakspace": { + className: "nobreak" + } +}; +Mo({ + type: "spacing", + htmlBuilder(t, e) { + if (Af.hasOwnProperty(t.text)) { + var n = Af[t.text].className || ""; + if (t.mode === "text") { + var r = z.makeOrd(t, e, "textord"); + return r.classes.push(n), r; + } else + return z.makeSpan(["mspace", n], [z.mathsym(t.text, t.mode, e)], e); + } else { + if (Of.hasOwnProperty(t.text)) + return z.makeSpan(["mspace", Of[t.text]], [], e); + throw new Q('Unknown type of space "' + t.text + '"'); + } + }, + mathmlBuilder(t, e) { + var n; + if (Af.hasOwnProperty(t.text)) + n = new Y.MathNode("mtext", [new Y.TextNode(" ")]); + else { + if (Of.hasOwnProperty(t.text)) + return new Y.MathNode("mspace"); + throw new Q('Unknown type of space "' + t.text + '"'); + } + return n; + } +}); +var s7 = () => { + var t = new Y.MathNode("mtd", []); + return t.setAttribute("width", "50%"), t; +}; +Mo({ + type: "tag", + mathmlBuilder(t, e) { + var n = new Y.MathNode("mtable", [new Y.MathNode("mtr", [s7(), new Y.MathNode("mtd", [ps(t.body, e)]), s7(), new Y.MathNode("mtd", [ps(t.tag, e)])])]); + return n.setAttribute("width", "100%"), n; + } +}); +var o7 = { + "\\text": void 0, + "\\textrm": "textrm", + "\\textsf": "textsf", + "\\texttt": "texttt", + "\\textnormal": "textrm" +}, l7 = { + "\\textbf": "textbf", + "\\textmd": "textmd" +}, lL = { + "\\textit": "textit", + "\\textup": "textup" +}, a7 = (t, e) => { + var n = t.font; + if (n) { + if (o7[n]) + return e.withTextFontFamily(o7[n]); + if (l7[n]) + return e.withTextFontWeight(l7[n]); + if (n === "\\emph") + return e.fontShape === "textit" ? e.withTextFontShape("textup") : e.withTextFontShape("textit"); + } else return e; + return e.withTextFontShape(lL[n]); +}; +ce({ + type: "text", + names: [ + // Font families + "\\text", + "\\textrm", + "\\textsf", + "\\texttt", + "\\textnormal", + // Font weights + "\\textbf", + "\\textmd", + // Font Shapes + "\\textit", + "\\textup", + "\\emph" + ], + props: { + numArgs: 1, + argTypes: ["text"], + allowedInArgument: !0, + allowedInText: !0 + }, + handler(t, e) { + var { + parser: n, + funcName: r + } = t, i = e[0]; + return { + type: "text", + mode: n.mode, + body: xt(i), + font: r + }; + }, + htmlBuilder(t, e) { + var n = a7(t, e), r = Bt(t.body, n, !0); + return z.makeSpan(["mord", "text"], r, n); + }, + mathmlBuilder(t, e) { + var n = a7(t, e); + return ps(t.body, n); + } +}); +ce({ + type: "underline", + names: ["\\underline"], + props: { + numArgs: 1, + allowedInText: !0 + }, + handler(t, e) { + var { + parser: n + } = t; + return { + type: "underline", + mode: n.mode, + body: e[0] + }; + }, + htmlBuilder(t, e) { + var n = We(t.body, e), r = z.makeLineSpan("underline-line", e), i = e.fontMetrics().defaultRuleThickness, s = z.makeVList({ + positionType: "top", + positionData: n.height, + children: [{ + type: "kern", + size: i + }, { + type: "elem", + elem: r + }, { + type: "kern", + size: 3 * i + }, { + type: "elem", + elem: n + }] + }, e); + return z.makeSpan(["mord", "underline"], [s], e); + }, + mathmlBuilder(t, e) { + var n = new Y.MathNode("mo", [new Y.TextNode("‾")]); + n.setAttribute("stretchy", "true"); + var r = new Y.MathNode("munder", [st(t.body, e), n]); + return r.setAttribute("accentunder", "true"), r; + } +}); +ce({ + type: "vcenter", + names: ["\\vcenter"], + props: { + numArgs: 1, + argTypes: ["original"], + // In LaTeX, \vcenter can act only on a box. + allowedInText: !1 + }, + handler(t, e) { + var { + parser: n + } = t; + return { + type: "vcenter", + mode: n.mode, + body: e[0] + }; + }, + htmlBuilder(t, e) { + var n = We(t.body, e), r = e.fontMetrics().axisHeight, i = 0.5 * (n.height - r - (n.depth + r)); + return z.makeVList({ + positionType: "shift", + positionData: i, + children: [{ + type: "elem", + elem: n + }] + }, e); + }, + mathmlBuilder(t, e) { + return new Y.MathNode("mpadded", [st(t.body, e)], ["vcenter"]); + } +}); +ce({ + type: "verb", + names: ["\\verb"], + props: { + numArgs: 0, + allowedInText: !0 + }, + handler(t, e, n) { + throw new Q("\\verb ended by end of line instead of matching delimiter"); + }, + htmlBuilder(t, e) { + for (var n = u7(t), r = [], i = e.havingStyle(e.style.text()), s = 0; s < n.length; s++) { + var o = n[s]; + o === "~" && (o = "\\textasciitilde"), r.push(z.makeSymbol(o, "Typewriter-Regular", t.mode, i, ["mord", "texttt"])); + } + return z.makeSpan(["mord", "text"].concat(i.sizingClasses(e)), z.tryCombineChars(r), i); + }, + mathmlBuilder(t, e) { + var n = new Y.TextNode(u7(t)), r = new Y.MathNode("mtext", [n]); + return r.setAttribute("mathvariant", "monospace"), r; + } +}); +var u7 = (t) => t.body.replace(/ /g, t.star ? "␣" : " "), Xi = n9, R9 = `[ \r + ]`, aL = "\\\\[a-zA-Z@]+", uL = "\\\\[^\uD800-\uDFFF]", cL = "(" + aL + ")" + R9 + "*", hL = `\\\\( +|[ \r ]+ +?)[ \r ]*`, Gp = "[̀-ͯ]", dL = new RegExp(Gp + "+$"), fL = "(" + R9 + "+)|" + // whitespace +(hL + "|") + // \whitespace +"([!-\\[\\]-‧‪-퟿豈-￿]" + // single codepoint +(Gp + "*") + // ...plus accents +"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + // surrogate pair +(Gp + "*") + // ...plus accents +"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5" + // \verb unstarred +("|" + cL) + // \macroName + spaces +("|" + uL + ")"); +class c7 { + // Category codes. The lexer only supports comment characters (14) for now. + // MacroExpander additionally distinguishes active (13). + constructor(e, n) { + this.input = void 0, this.settings = void 0, this.tokenRegex = void 0, this.catcodes = void 0, this.input = e, this.settings = n, this.tokenRegex = new RegExp(fL, "g"), this.catcodes = { + "%": 14, + // comment character + "~": 13 + // active character + }; + } + setCatcode(e, n) { + this.catcodes[e] = n; + } + /** + * This function lexes a single token. + */ + lex() { + var e = this.input, n = this.tokenRegex.lastIndex; + if (n === e.length) + return new $n("EOF", new wn(this, n, n)); + var r = this.tokenRegex.exec(e); + if (r === null || r.index !== n) + throw new Q("Unexpected character: '" + e[n] + "'", new $n(e[n], new wn(this, n, n + 1))); + var i = r[6] || r[3] || (r[2] ? "\\ " : " "); + if (this.catcodes[i] === 14) { + var s = e.indexOf(` +`, this.tokenRegex.lastIndex); + return s === -1 ? (this.tokenRegex.lastIndex = e.length, this.settings.reportNonstrict("commentAtEnd", "% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")) : this.tokenRegex.lastIndex = s + 1, this.lex(); + } + return new $n(i, new wn(this, n, this.tokenRegex.lastIndex)); + } +} +class pL { + /** + * Both arguments are optional. The first argument is an object of + * built-in mappings which never change. The second argument is an object + * of initial (global-level) mappings, which will constantly change + * according to any global/top-level `set`s done. + */ + constructor(e, n) { + e === void 0 && (e = {}), n === void 0 && (n = {}), this.current = void 0, this.builtins = void 0, this.undefStack = void 0, this.current = n, this.builtins = e, this.undefStack = []; + } + /** + * Start a new nested group, affecting future local `set`s. + */ + beginGroup() { + this.undefStack.push({}); + } + /** + * End current nested group, restoring values before the group began. + */ + endGroup() { + if (this.undefStack.length === 0) + throw new Q("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug"); + var e = this.undefStack.pop(); + for (var n in e) + e.hasOwnProperty(n) && (e[n] == null ? delete this.current[n] : this.current[n] = e[n]); + } + /** + * Ends all currently nested groups (if any), restoring values before the + * groups began. Useful in case of an error in the middle of parsing. + */ + endGroups() { + for (; this.undefStack.length > 0; ) + this.endGroup(); + } + /** + * Detect whether `name` has a definition. Equivalent to + * `get(name) != null`. + */ + has(e) { + return this.current.hasOwnProperty(e) || this.builtins.hasOwnProperty(e); + } + /** + * Get the current value of a name, or `undefined` if there is no value. + * + * Note: Do not use `if (namespace.get(...))` to detect whether a macro + * is defined, as the definition may be the empty string which evaluates + * to `false` in JavaScript. Use `if (namespace.get(...) != null)` or + * `if (namespace.has(...))`. + */ + get(e) { + return this.current.hasOwnProperty(e) ? this.current[e] : this.builtins[e]; + } + /** + * Set the current value of a name, and optionally set it globally too. + * Local set() sets the current value and (when appropriate) adds an undo + * operation to the undo stack. Global set() may change the undo + * operation at every level, so takes time linear in their number. + * A value of undefined means to delete existing definitions. + */ + set(e, n, r) { + if (r === void 0 && (r = !1), r) { + for (var i = 0; i < this.undefStack.length; i++) + delete this.undefStack[i][e]; + this.undefStack.length > 0 && (this.undefStack[this.undefStack.length - 1][e] = n); + } else { + var s = this.undefStack[this.undefStack.length - 1]; + s && !s.hasOwnProperty(e) && (s[e] = this.current[e]); + } + n == null ? delete this.current[e] : this.current[e] = n; + } +} +var mL = S9; +k("\\noexpand", function(t) { + var e = t.popToken(); + return t.isExpandable(e.text) && (e.noexpand = !0, e.treatAsRelax = !0), { + tokens: [e], + numArgs: 0 + }; +}); +k("\\expandafter", function(t) { + var e = t.popToken(); + return t.expandOnce(!0), { + tokens: [e], + numArgs: 0 + }; +}); +k("\\@firstoftwo", function(t) { + var e = t.consumeArgs(2); + return { + tokens: e[0], + numArgs: 0 + }; +}); +k("\\@secondoftwo", function(t) { + var e = t.consumeArgs(2); + return { + tokens: e[1], + numArgs: 0 + }; +}); +k("\\@ifnextchar", function(t) { + var e = t.consumeArgs(3); + t.consumeSpaces(); + var n = t.future(); + return e[0].length === 1 && e[0][0].text === n.text ? { + tokens: e[1], + numArgs: 0 + } : { + tokens: e[2], + numArgs: 0 + }; +}); +k("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}"); +k("\\TextOrMath", function(t) { + var e = t.consumeArgs(2); + return t.mode === "text" ? { + tokens: e[0], + numArgs: 0 + } : { + tokens: e[1], + numArgs: 0 + }; +}); +var h7 = { + 0: 0, + 1: 1, + 2: 2, + 3: 3, + 4: 4, + 5: 5, + 6: 6, + 7: 7, + 8: 8, + 9: 9, + a: 10, + A: 10, + b: 11, + B: 11, + c: 12, + C: 12, + d: 13, + D: 13, + e: 14, + E: 14, + f: 15, + F: 15 +}; +k("\\char", function(t) { + var e = t.popToken(), n, r = ""; + if (e.text === "'") + n = 8, e = t.popToken(); + else if (e.text === '"') + n = 16, e = t.popToken(); + else if (e.text === "`") + if (e = t.popToken(), e.text[0] === "\\") + r = e.text.charCodeAt(1); + else { + if (e.text === "EOF") + throw new Q("\\char` missing argument"); + r = e.text.charCodeAt(0); + } + else + n = 10; + if (n) { + if (r = h7[e.text], r == null || r >= n) + throw new Q("Invalid base-" + n + " digit " + e.text); + for (var i; (i = h7[t.future().text]) != null && i < n; ) + r *= n, r += i, t.popToken(); + } + return "\\@char{" + r + "}"; +}); +var Rg = (t, e, n, r) => { + var i = t.consumeArg().tokens; + if (i.length !== 1) + throw new Q("\\newcommand's first argument must be a macro name"); + var s = i[0].text, o = t.isDefined(s); + if (o && !e) + throw new Q("\\newcommand{" + s + "} attempting to redefine " + (s + "; use \\renewcommand")); + if (!o && !n) + throw new Q("\\renewcommand{" + s + "} when command " + s + " does not yet exist; use \\newcommand"); + var l = 0; + if (i = t.consumeArg().tokens, i.length === 1 && i[0].text === "[") { + for (var a = "", u = t.expandNextToken(); u.text !== "]" && u.text !== "EOF"; ) + a += u.text, u = t.expandNextToken(); + if (!a.match(/^\s*[0-9]+\s*$/)) + throw new Q("Invalid number of arguments: " + a); + l = parseInt(a), i = t.consumeArg().tokens; + } + return o && r || t.macros.set(s, { + tokens: i, + numArgs: l + }), ""; +}; +k("\\newcommand", (t) => Rg(t, !1, !0, !1)); +k("\\renewcommand", (t) => Rg(t, !0, !1, !1)); +k("\\providecommand", (t) => Rg(t, !0, !0, !0)); +k("\\message", (t) => { + var e = t.consumeArgs(1)[0]; + return console.log(e.reverse().map((n) => n.text).join("")), ""; +}); +k("\\errmessage", (t) => { + var e = t.consumeArgs(1)[0]; + return console.error(e.reverse().map((n) => n.text).join("")), ""; +}); +k("\\show", (t) => { + var e = t.popToken(), n = e.text; + return console.log(e, t.macros.get(n), Xi[n], ot.math[n], ot.text[n]), ""; +}); +k("\\bgroup", "{"); +k("\\egroup", "}"); +k("~", "\\nobreakspace"); +k("\\lq", "`"); +k("\\rq", "'"); +k("\\aa", "\\r a"); +k("\\AA", "\\r A"); +k("\\textcopyright", "\\html@mathml{\\textcircled{c}}{\\char`©}"); +k("\\copyright", "\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"); +k("\\textregistered", "\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"); +k("ℬ", "\\mathscr{B}"); +k("ℰ", "\\mathscr{E}"); +k("ℱ", "\\mathscr{F}"); +k("ℋ", "\\mathscr{H}"); +k("ℐ", "\\mathscr{I}"); +k("ℒ", "\\mathscr{L}"); +k("ℳ", "\\mathscr{M}"); +k("ℛ", "\\mathscr{R}"); +k("ℭ", "\\mathfrak{C}"); +k("ℌ", "\\mathfrak{H}"); +k("ℨ", "\\mathfrak{Z}"); +k("\\Bbbk", "\\Bbb{k}"); +k("·", "\\cdotp"); +k("\\llap", "\\mathllap{\\textrm{#1}}"); +k("\\rlap", "\\mathrlap{\\textrm{#1}}"); +k("\\clap", "\\mathclap{\\textrm{#1}}"); +k("\\mathstrut", "\\vphantom{(}"); +k("\\underbar", "\\underline{\\text{#1}}"); +k("\\not", '\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'); +k("\\neq", "\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}"); +k("\\ne", "\\neq"); +k("≠", "\\neq"); +k("\\notin", "\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`∉}}"); +k("∉", "\\notin"); +k("≘", "\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`≘}}"); +k("≙", "\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`≘}}"); +k("≚", "\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`≚}}"); +k("≛", "\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`≛}}"); +k("≝", "\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`≝}}"); +k("≞", "\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`≞}}"); +k("≟", "\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`≟}}"); +k("⟂", "\\perp"); +k("‼", "\\mathclose{!\\mkern-0.8mu!}"); +k("∌", "\\notni"); +k("⌜", "\\ulcorner"); +k("⌝", "\\urcorner"); +k("⌞", "\\llcorner"); +k("⌟", "\\lrcorner"); +k("©", "\\copyright"); +k("®", "\\textregistered"); +k("️", "\\textregistered"); +k("\\ulcorner", '\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}'); +k("\\urcorner", '\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}'); +k("\\llcorner", '\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}'); +k("\\lrcorner", '\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}'); +k("\\vdots", "{\\varvdots\\rule{0pt}{15pt}}"); +k("⋮", "\\vdots"); +k("\\varGamma", "\\mathit{\\Gamma}"); +k("\\varDelta", "\\mathit{\\Delta}"); +k("\\varTheta", "\\mathit{\\Theta}"); +k("\\varLambda", "\\mathit{\\Lambda}"); +k("\\varXi", "\\mathit{\\Xi}"); +k("\\varPi", "\\mathit{\\Pi}"); +k("\\varSigma", "\\mathit{\\Sigma}"); +k("\\varUpsilon", "\\mathit{\\Upsilon}"); +k("\\varPhi", "\\mathit{\\Phi}"); +k("\\varPsi", "\\mathit{\\Psi}"); +k("\\varOmega", "\\mathit{\\Omega}"); +k("\\substack", "\\begin{subarray}{c}#1\\end{subarray}"); +k("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"); +k("\\boxed", "\\fbox{$\\displaystyle{#1}$}"); +k("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;"); +k("\\implies", "\\DOTSB\\;\\Longrightarrow\\;"); +k("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;"); +k("\\dddot", "{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}"); +k("\\ddddot", "{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}"); +var d7 = { + ",": "\\dotsc", + "\\not": "\\dotsb", + // \keybin@ checks for the following: + "+": "\\dotsb", + "=": "\\dotsb", + "<": "\\dotsb", + ">": "\\dotsb", + "-": "\\dotsb", + "*": "\\dotsb", + ":": "\\dotsb", + // Symbols whose definition starts with \DOTSB: + "\\DOTSB": "\\dotsb", + "\\coprod": "\\dotsb", + "\\bigvee": "\\dotsb", + "\\bigwedge": "\\dotsb", + "\\biguplus": "\\dotsb", + "\\bigcap": "\\dotsb", + "\\bigcup": "\\dotsb", + "\\prod": "\\dotsb", + "\\sum": "\\dotsb", + "\\bigotimes": "\\dotsb", + "\\bigoplus": "\\dotsb", + "\\bigodot": "\\dotsb", + "\\bigsqcup": "\\dotsb", + "\\And": "\\dotsb", + "\\longrightarrow": "\\dotsb", + "\\Longrightarrow": "\\dotsb", + "\\longleftarrow": "\\dotsb", + "\\Longleftarrow": "\\dotsb", + "\\longleftrightarrow": "\\dotsb", + "\\Longleftrightarrow": "\\dotsb", + "\\mapsto": "\\dotsb", + "\\longmapsto": "\\dotsb", + "\\hookrightarrow": "\\dotsb", + "\\doteq": "\\dotsb", + // Symbols whose definition starts with \mathbin: + "\\mathbin": "\\dotsb", + // Symbols whose definition starts with \mathrel: + "\\mathrel": "\\dotsb", + "\\relbar": "\\dotsb", + "\\Relbar": "\\dotsb", + "\\xrightarrow": "\\dotsb", + "\\xleftarrow": "\\dotsb", + // Symbols whose definition starts with \DOTSI: + "\\DOTSI": "\\dotsi", + "\\int": "\\dotsi", + "\\oint": "\\dotsi", + "\\iint": "\\dotsi", + "\\iiint": "\\dotsi", + "\\iiiint": "\\dotsi", + "\\idotsint": "\\dotsi", + // Symbols whose definition starts with \DOTSX: + "\\DOTSX": "\\dotsx" +}; +k("\\dots", function(t) { + var e = "\\dotso", n = t.expandAfterFuture().text; + return n in d7 ? e = d7[n] : (n.slice(0, 4) === "\\not" || n in ot.math && ["bin", "rel"].includes(ot.math[n].group)) && (e = "\\dotsb"), e; +}); +var zg = { + // \rightdelim@ checks for the following: + ")": !0, + "]": !0, + "\\rbrack": !0, + "\\}": !0, + "\\rbrace": !0, + "\\rangle": !0, + "\\rceil": !0, + "\\rfloor": !0, + "\\rgroup": !0, + "\\rmoustache": !0, + "\\right": !0, + "\\bigr": !0, + "\\biggr": !0, + "\\Bigr": !0, + "\\Biggr": !0, + // \extra@ also tests for the following: + $: !0, + // \extrap@ checks for the following: + ";": !0, + ".": !0, + ",": !0 +}; +k("\\dotso", function(t) { + var e = t.future().text; + return e in zg ? "\\ldots\\," : "\\ldots"; +}); +k("\\dotsc", function(t) { + var e = t.future().text; + return e in zg && e !== "," ? "\\ldots\\," : "\\ldots"; +}); +k("\\cdots", function(t) { + var e = t.future().text; + return e in zg ? "\\@cdots\\," : "\\@cdots"; +}); +k("\\dotsb", "\\cdots"); +k("\\dotsm", "\\cdots"); +k("\\dotsi", "\\!\\cdots"); +k("\\dotsx", "\\ldots\\,"); +k("\\DOTSI", "\\relax"); +k("\\DOTSB", "\\relax"); +k("\\DOTSX", "\\relax"); +k("\\tmspace", "\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"); +k("\\,", "\\tmspace+{3mu}{.1667em}"); +k("\\thinspace", "\\,"); +k("\\>", "\\mskip{4mu}"); +k("\\:", "\\tmspace+{4mu}{.2222em}"); +k("\\medspace", "\\:"); +k("\\;", "\\tmspace+{5mu}{.2777em}"); +k("\\thickspace", "\\;"); +k("\\!", "\\tmspace-{3mu}{.1667em}"); +k("\\negthinspace", "\\!"); +k("\\negmedspace", "\\tmspace-{4mu}{.2222em}"); +k("\\negthickspace", "\\tmspace-{5mu}{.277em}"); +k("\\enspace", "\\kern.5em "); +k("\\enskip", "\\hskip.5em\\relax"); +k("\\quad", "\\hskip1em\\relax"); +k("\\qquad", "\\hskip2em\\relax"); +k("\\tag", "\\@ifstar\\tag@literal\\tag@paren"); +k("\\tag@paren", "\\tag@literal{({#1})}"); +k("\\tag@literal", (t) => { + if (t.macros.get("\\df@tag")) + throw new Q("Multiple \\tag"); + return "\\gdef\\df@tag{\\text{#1}}"; +}); +k("\\bmod", "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"); +k("\\pod", "\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"); +k("\\pmod", "\\pod{{\\rm mod}\\mkern6mu#1}"); +k("\\mod", "\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"); +k("\\newline", "\\\\\\relax"); +k("\\TeX", "\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}"); +var z9 = oe(Br["Main-Regular"][84][1] - 0.7 * Br["Main-Regular"][65][1]); +k("\\LaTeX", "\\textrm{\\html@mathml{" + ("L\\kern-.36em\\raisebox{" + z9 + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{LaTeX}}"); +k("\\KaTeX", "\\textrm{\\html@mathml{" + ("K\\kern-.17em\\raisebox{" + z9 + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{KaTeX}}"); +k("\\hspace", "\\@ifstar\\@hspacer\\@hspace"); +k("\\@hspace", "\\hskip #1\\relax"); +k("\\@hspacer", "\\rule{0pt}{0pt}\\hskip #1\\relax"); +k("\\ordinarycolon", ":"); +k("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); +k("\\dblcolon", '\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'); +k("\\coloneqq", '\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'); +k("\\Coloneqq", '\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'); +k("\\coloneq", '\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'); +k("\\Coloneq", '\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'); +k("\\eqqcolon", '\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'); +k("\\Eqqcolon", '\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'); +k("\\eqcolon", '\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'); +k("\\Eqcolon", '\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'); +k("\\colonapprox", '\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'); +k("\\Colonapprox", '\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'); +k("\\colonsim", '\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'); +k("\\Colonsim", '\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'); +k("∷", "\\dblcolon"); +k("∹", "\\eqcolon"); +k("≔", "\\coloneqq"); +k("≕", "\\eqqcolon"); +k("⩴", "\\Coloneqq"); +k("\\ratio", "\\vcentcolon"); +k("\\coloncolon", "\\dblcolon"); +k("\\colonequals", "\\coloneqq"); +k("\\coloncolonequals", "\\Coloneqq"); +k("\\equalscolon", "\\eqqcolon"); +k("\\equalscoloncolon", "\\Eqqcolon"); +k("\\colonminus", "\\coloneq"); +k("\\coloncolonminus", "\\Coloneq"); +k("\\minuscolon", "\\eqcolon"); +k("\\minuscoloncolon", "\\Eqcolon"); +k("\\coloncolonapprox", "\\Colonapprox"); +k("\\coloncolonsim", "\\Colonsim"); +k("\\simcolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +k("\\simcoloncolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"); +k("\\approxcolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +k("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"); +k("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`∌}}"); +k("\\limsup", "\\DOTSB\\operatorname*{lim\\,sup}"); +k("\\liminf", "\\DOTSB\\operatorname*{lim\\,inf}"); +k("\\injlim", "\\DOTSB\\operatorname*{inj\\,lim}"); +k("\\projlim", "\\DOTSB\\operatorname*{proj\\,lim}"); +k("\\varlimsup", "\\DOTSB\\operatorname*{\\overline{lim}}"); +k("\\varliminf", "\\DOTSB\\operatorname*{\\underline{lim}}"); +k("\\varinjlim", "\\DOTSB\\operatorname*{\\underrightarrow{lim}}"); +k("\\varprojlim", "\\DOTSB\\operatorname*{\\underleftarrow{lim}}"); +k("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{≩}"); +k("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{≨}"); +k("\\ngeqq", "\\html@mathml{\\@ngeqq}{≱}"); +k("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{≱}"); +k("\\nleqq", "\\html@mathml{\\@nleqq}{≰}"); +k("\\nleqslant", "\\html@mathml{\\@nleqslant}{≰}"); +k("\\nshortmid", "\\html@mathml{\\@nshortmid}{∤}"); +k("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{∦}"); +k("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{⊈}"); +k("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{⊉}"); +k("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{⊊}"); +k("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{⫋}"); +k("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{⊋}"); +k("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{⫌}"); +k("\\imath", "\\html@mathml{\\@imath}{ı}"); +k("\\jmath", "\\html@mathml{\\@jmath}{ȷ}"); +k("\\llbracket", "\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`⟦}}"); +k("\\rrbracket", "\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`⟧}}"); +k("⟦", "\\llbracket"); +k("⟧", "\\rrbracket"); +k("\\lBrace", "\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`⦃}}"); +k("\\rBrace", "\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`⦄}}"); +k("⦃", "\\lBrace"); +k("⦄", "\\rBrace"); +k("\\minuso", "\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`⦵}}"); +k("⦵", "\\minuso"); +k("\\darr", "\\downarrow"); +k("\\dArr", "\\Downarrow"); +k("\\Darr", "\\Downarrow"); +k("\\lang", "\\langle"); +k("\\rang", "\\rangle"); +k("\\uarr", "\\uparrow"); +k("\\uArr", "\\Uparrow"); +k("\\Uarr", "\\Uparrow"); +k("\\N", "\\mathbb{N}"); +k("\\R", "\\mathbb{R}"); +k("\\Z", "\\mathbb{Z}"); +k("\\alef", "\\aleph"); +k("\\alefsym", "\\aleph"); +k("\\Alpha", "\\mathrm{A}"); +k("\\Beta", "\\mathrm{B}"); +k("\\bull", "\\bullet"); +k("\\Chi", "\\mathrm{X}"); +k("\\clubs", "\\clubsuit"); +k("\\cnums", "\\mathbb{C}"); +k("\\Complex", "\\mathbb{C}"); +k("\\Dagger", "\\ddagger"); +k("\\diamonds", "\\diamondsuit"); +k("\\empty", "\\emptyset"); +k("\\Epsilon", "\\mathrm{E}"); +k("\\Eta", "\\mathrm{H}"); +k("\\exist", "\\exists"); +k("\\harr", "\\leftrightarrow"); +k("\\hArr", "\\Leftrightarrow"); +k("\\Harr", "\\Leftrightarrow"); +k("\\hearts", "\\heartsuit"); +k("\\image", "\\Im"); +k("\\infin", "\\infty"); +k("\\Iota", "\\mathrm{I}"); +k("\\isin", "\\in"); +k("\\Kappa", "\\mathrm{K}"); +k("\\larr", "\\leftarrow"); +k("\\lArr", "\\Leftarrow"); +k("\\Larr", "\\Leftarrow"); +k("\\lrarr", "\\leftrightarrow"); +k("\\lrArr", "\\Leftrightarrow"); +k("\\Lrarr", "\\Leftrightarrow"); +k("\\Mu", "\\mathrm{M}"); +k("\\natnums", "\\mathbb{N}"); +k("\\Nu", "\\mathrm{N}"); +k("\\Omicron", "\\mathrm{O}"); +k("\\plusmn", "\\pm"); +k("\\rarr", "\\rightarrow"); +k("\\rArr", "\\Rightarrow"); +k("\\Rarr", "\\Rightarrow"); +k("\\real", "\\Re"); +k("\\reals", "\\mathbb{R}"); +k("\\Reals", "\\mathbb{R}"); +k("\\Rho", "\\mathrm{P}"); +k("\\sdot", "\\cdot"); +k("\\sect", "\\S"); +k("\\spades", "\\spadesuit"); +k("\\sub", "\\subset"); +k("\\sube", "\\subseteq"); +k("\\supe", "\\supseteq"); +k("\\Tau", "\\mathrm{T}"); +k("\\thetasym", "\\vartheta"); +k("\\weierp", "\\wp"); +k("\\Zeta", "\\mathrm{Z}"); +k("\\argmin", "\\DOTSB\\operatorname*{arg\\,min}"); +k("\\argmax", "\\DOTSB\\operatorname*{arg\\,max}"); +k("\\plim", "\\DOTSB\\mathop{\\operatorname{plim}}\\limits"); +k("\\bra", "\\mathinner{\\langle{#1}|}"); +k("\\ket", "\\mathinner{|{#1}\\rangle}"); +k("\\braket", "\\mathinner{\\langle{#1}\\rangle}"); +k("\\Bra", "\\left\\langle#1\\right|"); +k("\\Ket", "\\left|#1\\right\\rangle"); +var P9 = (t) => (e) => { + var n = e.consumeArg().tokens, r = e.consumeArg().tokens, i = e.consumeArg().tokens, s = e.consumeArg().tokens, o = e.macros.get("|"), l = e.macros.get("\\|"); + e.macros.beginGroup(); + var a = (h) => (d) => { + t && (d.macros.set("|", o), i.length && d.macros.set("\\|", l)); + var f = h; + if (!h && i.length) { + var m = d.future(); + m.text === "|" && (d.popToken(), f = !0); + } + return { + tokens: f ? i : r, + numArgs: 0 + }; + }; + e.macros.set("|", a(!1)), i.length && e.macros.set("\\|", a(!0)); + var u = e.consumeArg().tokens, c = e.expandTokens([ + ...s, + ...u, + ...n + // reversed + ]); + return e.macros.endGroup(), { + tokens: c.reverse(), + numArgs: 0 + }; +}; +k("\\bra@ket", P9(!1)); +k("\\bra@set", P9(!0)); +k("\\Braket", "\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"); +k("\\Set", "\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"); +k("\\set", "\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"); +k("\\angln", "{\\angl n}"); +k("\\blue", "\\textcolor{##6495ed}{#1}"); +k("\\orange", "\\textcolor{##ffa500}{#1}"); +k("\\pink", "\\textcolor{##ff00af}{#1}"); +k("\\red", "\\textcolor{##df0030}{#1}"); +k("\\green", "\\textcolor{##28ae7b}{#1}"); +k("\\gray", "\\textcolor{gray}{#1}"); +k("\\purple", "\\textcolor{##9d38bd}{#1}"); +k("\\blueA", "\\textcolor{##ccfaff}{#1}"); +k("\\blueB", "\\textcolor{##80f6ff}{#1}"); +k("\\blueC", "\\textcolor{##63d9ea}{#1}"); +k("\\blueD", "\\textcolor{##11accd}{#1}"); +k("\\blueE", "\\textcolor{##0c7f99}{#1}"); +k("\\tealA", "\\textcolor{##94fff5}{#1}"); +k("\\tealB", "\\textcolor{##26edd5}{#1}"); +k("\\tealC", "\\textcolor{##01d1c1}{#1}"); +k("\\tealD", "\\textcolor{##01a995}{#1}"); +k("\\tealE", "\\textcolor{##208170}{#1}"); +k("\\greenA", "\\textcolor{##b6ffb0}{#1}"); +k("\\greenB", "\\textcolor{##8af281}{#1}"); +k("\\greenC", "\\textcolor{##74cf70}{#1}"); +k("\\greenD", "\\textcolor{##1fab54}{#1}"); +k("\\greenE", "\\textcolor{##0d923f}{#1}"); +k("\\goldA", "\\textcolor{##ffd0a9}{#1}"); +k("\\goldB", "\\textcolor{##ffbb71}{#1}"); +k("\\goldC", "\\textcolor{##ff9c39}{#1}"); +k("\\goldD", "\\textcolor{##e07d10}{#1}"); +k("\\goldE", "\\textcolor{##a75a05}{#1}"); +k("\\redA", "\\textcolor{##fca9a9}{#1}"); +k("\\redB", "\\textcolor{##ff8482}{#1}"); +k("\\redC", "\\textcolor{##f9685d}{#1}"); +k("\\redD", "\\textcolor{##e84d39}{#1}"); +k("\\redE", "\\textcolor{##bc2612}{#1}"); +k("\\maroonA", "\\textcolor{##ffbde0}{#1}"); +k("\\maroonB", "\\textcolor{##ff92c6}{#1}"); +k("\\maroonC", "\\textcolor{##ed5fa6}{#1}"); +k("\\maroonD", "\\textcolor{##ca337c}{#1}"); +k("\\maroonE", "\\textcolor{##9e034e}{#1}"); +k("\\purpleA", "\\textcolor{##ddd7ff}{#1}"); +k("\\purpleB", "\\textcolor{##c6b9fc}{#1}"); +k("\\purpleC", "\\textcolor{##aa87ff}{#1}"); +k("\\purpleD", "\\textcolor{##7854ab}{#1}"); +k("\\purpleE", "\\textcolor{##543b78}{#1}"); +k("\\mintA", "\\textcolor{##f5f9e8}{#1}"); +k("\\mintB", "\\textcolor{##edf2df}{#1}"); +k("\\mintC", "\\textcolor{##e0e5cc}{#1}"); +k("\\grayA", "\\textcolor{##f6f7f7}{#1}"); +k("\\grayB", "\\textcolor{##f0f1f2}{#1}"); +k("\\grayC", "\\textcolor{##e3e5e6}{#1}"); +k("\\grayD", "\\textcolor{##d6d8da}{#1}"); +k("\\grayE", "\\textcolor{##babec2}{#1}"); +k("\\grayF", "\\textcolor{##888d93}{#1}"); +k("\\grayG", "\\textcolor{##626569}{#1}"); +k("\\grayH", "\\textcolor{##3b3e40}{#1}"); +k("\\grayI", "\\textcolor{##21242c}{#1}"); +k("\\kaBlue", "\\textcolor{##314453}{#1}"); +k("\\kaGreen", "\\textcolor{##71B307}{#1}"); +var B9 = { + "^": !0, + // Parser.js + _: !0, + // Parser.js + "\\limits": !0, + // Parser.js + "\\nolimits": !0 + // Parser.js +}; +class gL { + constructor(e, n, r) { + this.settings = void 0, this.expansionCount = void 0, this.lexer = void 0, this.macros = void 0, this.stack = void 0, this.mode = void 0, this.settings = n, this.expansionCount = 0, this.feed(e), this.macros = new pL(mL, n.macros), this.mode = r, this.stack = []; + } + /** + * Feed a new input string to the same MacroExpander + * (with existing macros etc.). + */ + feed(e) { + this.lexer = new c7(e, this.settings); + } + /** + * Switches between "text" and "math" modes. + */ + switchMode(e) { + this.mode = e; + } + /** + * Start a new group nesting within all namespaces. + */ + beginGroup() { + this.macros.beginGroup(); + } + /** + * End current group nesting within all namespaces. + */ + endGroup() { + this.macros.endGroup(); + } + /** + * Ends all currently nested groups (if any), restoring values before the + * groups began. Useful in case of an error in the middle of parsing. + */ + endGroups() { + this.macros.endGroups(); + } + /** + * Returns the topmost token on the stack, without expanding it. + * Similar in behavior to TeX's `\futurelet`. + */ + future() { + return this.stack.length === 0 && this.pushToken(this.lexer.lex()), this.stack[this.stack.length - 1]; + } + /** + * Remove and return the next unexpanded token. + */ + popToken() { + return this.future(), this.stack.pop(); + } + /** + * Add a given token to the token stack. In particular, this get be used + * to put back a token returned from one of the other methods. + */ + pushToken(e) { + this.stack.push(e); + } + /** + * Append an array of tokens to the token stack. + */ + pushTokens(e) { + this.stack.push(...e); + } + /** + * Find an macro argument without expanding tokens and append the array of + * tokens to the token stack. Uses Token as a container for the result. + */ + scanArgument(e) { + var n, r, i; + if (e) { + if (this.consumeSpaces(), this.future().text !== "[") + return null; + n = this.popToken(), { + tokens: i, + end: r + } = this.consumeArg(["]"]); + } else + ({ + tokens: i, + start: n, + end: r + } = this.consumeArg()); + return this.pushToken(new $n("EOF", r.loc)), this.pushTokens(i), new $n("", wn.range(n, r)); + } + /** + * Consume all following space tokens, without expansion. + */ + consumeSpaces() { + for (; ; ) { + var e = this.future(); + if (e.text === " ") + this.stack.pop(); + else + break; + } + } + /** + * Consume an argument from the token stream, and return the resulting array + * of tokens and start/end token. + */ + consumeArg(e) { + var n = [], r = e && e.length > 0; + r || this.consumeSpaces(); + var i = this.future(), s, o = 0, l = 0; + do { + if (s = this.popToken(), n.push(s), s.text === "{") + ++o; + else if (s.text === "}") { + if (--o, o === -1) + throw new Q("Extra }", s); + } else if (s.text === "EOF") + throw new Q("Unexpected end of input in a macro argument, expected '" + (e && r ? e[l] : "}") + "'", s); + if (e && r) + if ((o === 0 || o === 1 && e[l] === "{") && s.text === e[l]) { + if (++l, l === e.length) { + n.splice(-l, l); + break; + } + } else + l = 0; + } while (o !== 0 || r); + return i.text === "{" && n[n.length - 1].text === "}" && (n.pop(), n.shift()), n.reverse(), { + tokens: n, + start: i, + end: s + }; + } + /** + * Consume the specified number of (delimited) arguments from the token + * stream and return the resulting array of arguments. + */ + consumeArgs(e, n) { + if (n) { + if (n.length !== e + 1) + throw new Q("The length of delimiters doesn't match the number of args!"); + for (var r = n[0], i = 0; i < r.length; i++) { + var s = this.popToken(); + if (r[i] !== s.text) + throw new Q("Use of the macro doesn't match its definition", s); + } + } + for (var o = [], l = 0; l < e; l++) + o.push(this.consumeArg(n && n[l + 1]).tokens); + return o; + } + /** + * Increment `expansionCount` by the specified amount. + * Throw an error if it exceeds `maxExpand`. + */ + countExpansion(e) { + if (this.expansionCount += e, this.expansionCount > this.settings.maxExpand) + throw new Q("Too many expansions: infinite loop or need to increase maxExpand setting"); + } + /** + * Expand the next token only once if possible. + * + * If the token is expanded, the resulting tokens will be pushed onto + * the stack in reverse order, and the number of such tokens will be + * returned. This number might be zero or positive. + * + * If not, the return value is `false`, and the next token remains at the + * top of the stack. + * + * In either case, the next token will be on the top of the stack, + * or the stack will be empty (in case of empty expansion + * and no other tokens). + * + * Used to implement `expandAfterFuture` and `expandNextToken`. + * + * If expandableOnly, only expandable tokens are expanded and + * an undefined control sequence results in an error. + */ + expandOnce(e) { + var n = this.popToken(), r = n.text, i = n.noexpand ? null : this._getExpansion(r); + if (i == null || e && i.unexpandable) { + if (e && i == null && r[0] === "\\" && !this.isDefined(r)) + throw new Q("Undefined control sequence: " + r); + return this.pushToken(n), !1; + } + this.countExpansion(1); + var s = i.tokens, o = this.consumeArgs(i.numArgs, i.delimiters); + if (i.numArgs) { + s = s.slice(); + for (var l = s.length - 1; l >= 0; --l) { + var a = s[l]; + if (a.text === "#") { + if (l === 0) + throw new Q("Incomplete placeholder at end of macro body", a); + if (a = s[--l], a.text === "#") + s.splice(l + 1, 1); + else if (/^[1-9]$/.test(a.text)) + s.splice(l, 2, ...o[+a.text - 1]); + else + throw new Q("Not a valid argument number", a); + } + } + } + return this.pushTokens(s), s.length; + } + /** + * Expand the next token only once (if possible), and return the resulting + * top token on the stack (without removing anything from the stack). + * Similar in behavior to TeX's `\expandafter\futurelet`. + * Equivalent to expandOnce() followed by future(). + */ + expandAfterFuture() { + return this.expandOnce(), this.future(); + } + /** + * Recursively expand first token, then return first non-expandable token. + */ + expandNextToken() { + for (; ; ) + if (this.expandOnce() === !1) { + var e = this.stack.pop(); + return e.treatAsRelax && (e.text = "\\relax"), e; + } + throw new Error(); + } + /** + * Fully expand the given macro name and return the resulting list of + * tokens, or return `undefined` if no such macro is defined. + */ + expandMacro(e) { + return this.macros.has(e) ? this.expandTokens([new $n(e)]) : void 0; + } + /** + * Fully expand the given token stream and return the resulting list of + * tokens. Note that the input tokens are in reverse order, but the + * output tokens are in forward order. + */ + expandTokens(e) { + var n = [], r = this.stack.length; + for (this.pushTokens(e); this.stack.length > r; ) + if (this.expandOnce(!0) === !1) { + var i = this.stack.pop(); + i.treatAsRelax && (i.noexpand = !1, i.treatAsRelax = !1), n.push(i); + } + return this.countExpansion(n.length), n; + } + /** + * Fully expand the given macro name and return the result as a string, + * or return `undefined` if no such macro is defined. + */ + expandMacroAsText(e) { + var n = this.expandMacro(e); + return n && n.map((r) => r.text).join(""); + } + /** + * Returns the expanded macro as a reversed array of tokens and a macro + * argument count. Or returns `null` if no such macro. + */ + _getExpansion(e) { + var n = this.macros.get(e); + if (n == null) + return n; + if (e.length === 1) { + var r = this.lexer.catcodes[e]; + if (r != null && r !== 13) + return; + } + var i = typeof n == "function" ? n(this) : n; + if (typeof i == "string") { + var s = 0; + if (i.indexOf("#") !== -1) + for (var o = i.replace(/##/g, ""); o.indexOf("#" + (s + 1)) !== -1; ) + ++s; + for (var l = new c7(i, this.settings), a = [], u = l.lex(); u.text !== "EOF"; ) + a.push(u), u = l.lex(); + a.reverse(); + var c = { + tokens: a, + numArgs: s + }; + return c; + } + return i; + } + /** + * Determine whether a command is currently "defined" (has some + * functionality), meaning that it's a macro (in the current group), + * a function, a symbol, or one of the special commands listed in + * `implicitCommands`. + */ + isDefined(e) { + return this.macros.has(e) || Xi.hasOwnProperty(e) || ot.math.hasOwnProperty(e) || ot.text.hasOwnProperty(e) || B9.hasOwnProperty(e); + } + /** + * Determine whether a command is expandable. + */ + isExpandable(e) { + var n = this.macros.get(e); + return n != null ? typeof n == "string" || typeof n == "function" || !n.unexpandable : Xi.hasOwnProperty(e) && !Xi[e].primitive; + } +} +var f7 = /^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/, Hu = Object.freeze({ + "₊": "+", + "₋": "-", + "₌": "=", + "₍": "(", + "₎": ")", + "₀": "0", + "₁": "1", + "₂": "2", + "₃": "3", + "₄": "4", + "₅": "5", + "₆": "6", + "₇": "7", + "₈": "8", + "₉": "9", + "ₐ": "a", + "ₑ": "e", + "ₕ": "h", + "ᵢ": "i", + "ⱼ": "j", + "ₖ": "k", + "ₗ": "l", + "ₘ": "m", + "ₙ": "n", + "ₒ": "o", + "ₚ": "p", + "ᵣ": "r", + "ₛ": "s", + "ₜ": "t", + "ᵤ": "u", + "ᵥ": "v", + "ₓ": "x", + "ᵦ": "β", + "ᵧ": "γ", + "ᵨ": "ρ", + "ᵩ": "ϕ", + "ᵪ": "χ", + "⁺": "+", + "⁻": "-", + "⁼": "=", + "⁽": "(", + "⁾": ")", + "⁰": "0", + "¹": "1", + "²": "2", + "³": "3", + "⁴": "4", + "⁵": "5", + "⁶": "6", + "⁷": "7", + "⁸": "8", + "⁹": "9", + "ᴬ": "A", + "ᴮ": "B", + "ᴰ": "D", + "ᴱ": "E", + "ᴳ": "G", + "ᴴ": "H", + "ᴵ": "I", + "ᴶ": "J", + "ᴷ": "K", + "ᴸ": "L", + "ᴹ": "M", + "ᴺ": "N", + "ᴼ": "O", + "ᴾ": "P", + "ᴿ": "R", + "ᵀ": "T", + "ᵁ": "U", + "ⱽ": "V", + "ᵂ": "W", + "ᵃ": "a", + "ᵇ": "b", + "ᶜ": "c", + "ᵈ": "d", + "ᵉ": "e", + "ᶠ": "f", + "ᵍ": "g", + ʰ: "h", + "ⁱ": "i", + ʲ: "j", + "ᵏ": "k", + ˡ: "l", + "ᵐ": "m", + ⁿ: "n", + "ᵒ": "o", + "ᵖ": "p", + ʳ: "r", + ˢ: "s", + "ᵗ": "t", + "ᵘ": "u", + "ᵛ": "v", + ʷ: "w", + ˣ: "x", + ʸ: "y", + "ᶻ": "z", + "ᵝ": "β", + "ᵞ": "γ", + "ᵟ": "δ", + "ᵠ": "ϕ", + "ᵡ": "χ", + "ᶿ": "θ" +}), If = { + "́": { + text: "\\'", + math: "\\acute" + }, + "̀": { + text: "\\`", + math: "\\grave" + }, + "̈": { + text: '\\"', + math: "\\ddot" + }, + "̃": { + text: "\\~", + math: "\\tilde" + }, + "̄": { + text: "\\=", + math: "\\bar" + }, + "̆": { + text: "\\u", + math: "\\breve" + }, + "̌": { + text: "\\v", + math: "\\check" + }, + "̂": { + text: "\\^", + math: "\\hat" + }, + "̇": { + text: "\\.", + math: "\\dot" + }, + "̊": { + text: "\\r", + math: "\\mathring" + }, + "̋": { + text: "\\H" + }, + "̧": { + text: "\\c" + } +}, p7 = { + á: "á", + à: "à", + ä: "ä", + ǟ: "ǟ", + ã: "ã", + ā: "ā", + ă: "ă", + ắ: "ắ", + ằ: "ằ", + ẵ: "ẵ", + ǎ: "ǎ", + â: "â", + ấ: "ấ", + ầ: "ầ", + ẫ: "ẫ", + ȧ: "ȧ", + ǡ: "ǡ", + å: "å", + ǻ: "ǻ", + ḃ: "ḃ", + ć: "ć", + ḉ: "ḉ", + č: "č", + ĉ: "ĉ", + ċ: "ċ", + ç: "ç", + ď: "ď", + ḋ: "ḋ", + ḑ: "ḑ", + é: "é", + è: "è", + ë: "ë", + ẽ: "ẽ", + ē: "ē", + ḗ: "ḗ", + ḕ: "ḕ", + ĕ: "ĕ", + ḝ: "ḝ", + ě: "ě", + ê: "ê", + ế: "ế", + ề: "ề", + ễ: "ễ", + ė: "ė", + ȩ: "ȩ", + ḟ: "ḟ", + ǵ: "ǵ", + ḡ: "ḡ", + ğ: "ğ", + ǧ: "ǧ", + ĝ: "ĝ", + ġ: "ġ", + ģ: "ģ", + ḧ: "ḧ", + ȟ: "ȟ", + ĥ: "ĥ", + ḣ: "ḣ", + ḩ: "ḩ", + í: "í", + ì: "ì", + ï: "ï", + ḯ: "ḯ", + ĩ: "ĩ", + ī: "ī", + ĭ: "ĭ", + ǐ: "ǐ", + î: "î", + ǰ: "ǰ", + ĵ: "ĵ", + ḱ: "ḱ", + ǩ: "ǩ", + ķ: "ķ", + ĺ: "ĺ", + ľ: "ľ", + ļ: "ļ", + ḿ: "ḿ", + ṁ: "ṁ", + ń: "ń", + ǹ: "ǹ", + ñ: "ñ", + ň: "ň", + ṅ: "ṅ", + ņ: "ņ", + ó: "ó", + ò: "ò", + ö: "ö", + ȫ: "ȫ", + õ: "õ", + ṍ: "ṍ", + ṏ: "ṏ", + ȭ: "ȭ", + ō: "ō", + ṓ: "ṓ", + ṑ: "ṑ", + ŏ: "ŏ", + ǒ: "ǒ", + ô: "ô", + ố: "ố", + ồ: "ồ", + ỗ: "ỗ", + ȯ: "ȯ", + ȱ: "ȱ", + ő: "ő", + ṕ: "ṕ", + ṗ: "ṗ", + ŕ: "ŕ", + ř: "ř", + ṙ: "ṙ", + ŗ: "ŗ", + ś: "ś", + ṥ: "ṥ", + š: "š", + ṧ: "ṧ", + ŝ: "ŝ", + ṡ: "ṡ", + ş: "ş", + ẗ: "ẗ", + ť: "ť", + ṫ: "ṫ", + ţ: "ţ", + ú: "ú", + ù: "ù", + ü: "ü", + ǘ: "ǘ", + ǜ: "ǜ", + ǖ: "ǖ", + ǚ: "ǚ", + ũ: "ũ", + ṹ: "ṹ", + ū: "ū", + ṻ: "ṻ", + ŭ: "ŭ", + ǔ: "ǔ", + û: "û", + ů: "ů", + ű: "ű", + ṽ: "ṽ", + ẃ: "ẃ", + ẁ: "ẁ", + ẅ: "ẅ", + ŵ: "ŵ", + ẇ: "ẇ", + ẘ: "ẘ", + ẍ: "ẍ", + ẋ: "ẋ", + ý: "ý", + ỳ: "ỳ", + ÿ: "ÿ", + ỹ: "ỹ", + ȳ: "ȳ", + ŷ: "ŷ", + ẏ: "ẏ", + ẙ: "ẙ", + ź: "ź", + ž: "ž", + ẑ: "ẑ", + ż: "ż", + Á: "Á", + À: "À", + Ä: "Ä", + Ǟ: "Ǟ", + Ã: "Ã", + Ā: "Ā", + Ă: "Ă", + Ắ: "Ắ", + Ằ: "Ằ", + Ẵ: "Ẵ", + Ǎ: "Ǎ", + Â: "Â", + Ấ: "Ấ", + Ầ: "Ầ", + Ẫ: "Ẫ", + Ȧ: "Ȧ", + Ǡ: "Ǡ", + Å: "Å", + Ǻ: "Ǻ", + Ḃ: "Ḃ", + Ć: "Ć", + Ḉ: "Ḉ", + Č: "Č", + Ĉ: "Ĉ", + Ċ: "Ċ", + Ç: "Ç", + Ď: "Ď", + Ḋ: "Ḋ", + Ḑ: "Ḑ", + É: "É", + È: "È", + Ë: "Ë", + Ẽ: "Ẽ", + Ē: "Ē", + Ḗ: "Ḗ", + Ḕ: "Ḕ", + Ĕ: "Ĕ", + Ḝ: "Ḝ", + Ě: "Ě", + Ê: "Ê", + Ế: "Ế", + Ề: "Ề", + Ễ: "Ễ", + Ė: "Ė", + Ȩ: "Ȩ", + Ḟ: "Ḟ", + Ǵ: "Ǵ", + Ḡ: "Ḡ", + Ğ: "Ğ", + Ǧ: "Ǧ", + Ĝ: "Ĝ", + Ġ: "Ġ", + Ģ: "Ģ", + Ḧ: "Ḧ", + Ȟ: "Ȟ", + Ĥ: "Ĥ", + Ḣ: "Ḣ", + Ḩ: "Ḩ", + Í: "Í", + Ì: "Ì", + Ï: "Ï", + Ḯ: "Ḯ", + Ĩ: "Ĩ", + Ī: "Ī", + Ĭ: "Ĭ", + Ǐ: "Ǐ", + Î: "Î", + İ: "İ", + Ĵ: "Ĵ", + Ḱ: "Ḱ", + Ǩ: "Ǩ", + Ķ: "Ķ", + Ĺ: "Ĺ", + Ľ: "Ľ", + Ļ: "Ļ", + Ḿ: "Ḿ", + Ṁ: "Ṁ", + Ń: "Ń", + Ǹ: "Ǹ", + Ñ: "Ñ", + Ň: "Ň", + Ṅ: "Ṅ", + Ņ: "Ņ", + Ó: "Ó", + Ò: "Ò", + Ö: "Ö", + Ȫ: "Ȫ", + Õ: "Õ", + Ṍ: "Ṍ", + Ṏ: "Ṏ", + Ȭ: "Ȭ", + Ō: "Ō", + Ṓ: "Ṓ", + Ṑ: "Ṑ", + Ŏ: "Ŏ", + Ǒ: "Ǒ", + Ô: "Ô", + Ố: "Ố", + Ồ: "Ồ", + Ỗ: "Ỗ", + Ȯ: "Ȯ", + Ȱ: "Ȱ", + Ő: "Ő", + Ṕ: "Ṕ", + Ṗ: "Ṗ", + Ŕ: "Ŕ", + Ř: "Ř", + Ṙ: "Ṙ", + Ŗ: "Ŗ", + Ś: "Ś", + Ṥ: "Ṥ", + Š: "Š", + Ṧ: "Ṧ", + Ŝ: "Ŝ", + Ṡ: "Ṡ", + Ş: "Ş", + Ť: "Ť", + Ṫ: "Ṫ", + Ţ: "Ţ", + Ú: "Ú", + Ù: "Ù", + Ü: "Ü", + Ǘ: "Ǘ", + Ǜ: "Ǜ", + Ǖ: "Ǖ", + Ǚ: "Ǚ", + Ũ: "Ũ", + Ṹ: "Ṹ", + Ū: "Ū", + Ṻ: "Ṻ", + Ŭ: "Ŭ", + Ǔ: "Ǔ", + Û: "Û", + Ů: "Ů", + Ű: "Ű", + Ṽ: "Ṽ", + Ẃ: "Ẃ", + Ẁ: "Ẁ", + Ẅ: "Ẅ", + Ŵ: "Ŵ", + Ẇ: "Ẇ", + Ẍ: "Ẍ", + Ẋ: "Ẋ", + Ý: "Ý", + Ỳ: "Ỳ", + Ÿ: "Ÿ", + Ỹ: "Ỹ", + Ȳ: "Ȳ", + Ŷ: "Ŷ", + Ẏ: "Ẏ", + Ź: "Ź", + Ž: "Ž", + Ẑ: "Ẑ", + Ż: "Ż", + ά: "ά", + ὰ: "ὰ", + ᾱ: "ᾱ", + ᾰ: "ᾰ", + έ: "έ", + ὲ: "ὲ", + ή: "ή", + ὴ: "ὴ", + ί: "ί", + ὶ: "ὶ", + ϊ: "ϊ", + ΐ: "ΐ", + ῒ: "ῒ", + ῑ: "ῑ", + ῐ: "ῐ", + ό: "ό", + ὸ: "ὸ", + ύ: "ύ", + ὺ: "ὺ", + ϋ: "ϋ", + ΰ: "ΰ", + ῢ: "ῢ", + ῡ: "ῡ", + ῠ: "ῠ", + ώ: "ώ", + ὼ: "ὼ", + Ύ: "Ύ", + Ὺ: "Ὺ", + Ϋ: "Ϋ", + Ῡ: "Ῡ", + Ῠ: "Ῠ", + Ώ: "Ώ", + Ὼ: "Ὼ" +}; +class ud { + constructor(e, n) { + this.mode = void 0, this.gullet = void 0, this.settings = void 0, this.leftrightDepth = void 0, this.nextToken = void 0, this.mode = "math", this.gullet = new gL(e, n, this.mode), this.settings = n, this.leftrightDepth = 0; + } + /** + * Checks a result to make sure it has the right type, and throws an + * appropriate error otherwise. + */ + expect(e, n) { + if (n === void 0 && (n = !0), this.fetch().text !== e) + throw new Q("Expected '" + e + "', got '" + this.fetch().text + "'", this.fetch()); + n && this.consume(); + } + /** + * Discards the current lookahead token, considering it consumed. + */ + consume() { + this.nextToken = null; + } + /** + * Return the current lookahead token, or if there isn't one (at the + * beginning, or if the previous lookahead token was consume()d), + * fetch the next token as the new lookahead token and return it. + */ + fetch() { + return this.nextToken == null && (this.nextToken = this.gullet.expandNextToken()), this.nextToken; + } + /** + * Switches between "text" and "math" modes. + */ + switchMode(e) { + this.mode = e, this.gullet.switchMode(e); + } + /** + * Main parsing function, which parses an entire input. + */ + parse() { + this.settings.globalGroup || this.gullet.beginGroup(), this.settings.colorIsTextColor && this.gullet.macros.set("\\color", "\\textcolor"); + try { + var e = this.parseExpression(!1); + return this.expect("EOF"), this.settings.globalGroup || this.gullet.endGroup(), e; + } finally { + this.gullet.endGroups(); + } + } + /** + * Fully parse a separate sequence of tokens as a separate job. + * Tokens should be specified in reverse order, as in a MacroDefinition. + */ + subparse(e) { + var n = this.nextToken; + this.consume(), this.gullet.pushToken(new $n("}")), this.gullet.pushTokens(e); + var r = this.parseExpression(!1); + return this.expect("}"), this.nextToken = n, r; + } + /** + * Parses an "expression", which is a list of atoms. + * + * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This + * happens when functions have higher precedence han infix + * nodes in implicit parses. + * + * `breakOnTokenText`: The text of the token that the expression should end + * with, or `null` if something else should end the + * expression. + */ + parseExpression(e, n) { + for (var r = []; ; ) { + this.mode === "math" && this.consumeSpaces(); + var i = this.fetch(); + if (ud.endOfExpression.indexOf(i.text) !== -1 || n && i.text === n || e && Xi[i.text] && Xi[i.text].infix) + break; + var s = this.parseAtom(n); + if (s) { + if (s.type === "internal") + continue; + } else break; + r.push(s); + } + return this.mode === "text" && this.formLigatures(r), this.handleInfixNodes(r); + } + /** + * Rewrites infix operators such as \over with corresponding commands such + * as \frac. + * + * There can only be one infix operator per group. If there's more than one + * then the expression is ambiguous. This can be resolved by adding {}. + */ + handleInfixNodes(e) { + for (var n = -1, r, i = 0; i < e.length; i++) + if (e[i].type === "infix") { + if (n !== -1) + throw new Q("only one infix operator per group", e[i].token); + n = i, r = e[i].replaceWith; + } + if (n !== -1 && r) { + var s, o, l = e.slice(0, n), a = e.slice(n + 1); + l.length === 1 && l[0].type === "ordgroup" ? s = l[0] : s = { + type: "ordgroup", + mode: this.mode, + body: l + }, a.length === 1 && a[0].type === "ordgroup" ? o = a[0] : o = { + type: "ordgroup", + mode: this.mode, + body: a + }; + var u; + return r === "\\\\abovefrac" ? u = this.callFunction(r, [s, e[n], o], []) : u = this.callFunction(r, [s, o], []), [u]; + } else + return e; + } + /** + * Handle a subscript or superscript with nice errors. + */ + handleSupSubscript(e) { + var n = this.fetch(), r = n.text; + this.consume(), this.consumeSpaces(); + var i; + do { + var s; + i = this.parseGroup(e); + } while (((s = i) == null ? void 0 : s.type) === "internal"); + if (!i) + throw new Q("Expected group after '" + r + "'", n); + return i; + } + /** + * Converts the textual input of an unsupported command into a text node + * contained within a color node whose color is determined by errorColor + */ + formatUnsupportedCmd(e) { + for (var n = [], r = 0; r < e.length; r++) + n.push({ + type: "textord", + mode: "text", + text: e[r] + }); + var i = { + type: "text", + mode: this.mode, + body: n + }, s = { + type: "color", + mode: this.mode, + color: this.settings.errorColor, + body: [i] + }; + return s; + } + /** + * Parses a group with optional super/subscripts. + */ + parseAtom(e) { + var n = this.parseGroup("atom", e); + if ((n == null ? void 0 : n.type) === "internal" || this.mode === "text") + return n; + for (var r, i; ; ) { + this.consumeSpaces(); + var s = this.fetch(); + if (s.text === "\\limits" || s.text === "\\nolimits") { + if (n && n.type === "op") { + var o = s.text === "\\limits"; + n.limits = o, n.alwaysHandleSupSub = !0; + } else if (n && n.type === "operatorname") + n.alwaysHandleSupSub && (n.limits = s.text === "\\limits"); + else + throw new Q("Limit controls must follow a math operator", s); + this.consume(); + } else if (s.text === "^") { + if (r) + throw new Q("Double superscript", s); + r = this.handleSupSubscript("superscript"); + } else if (s.text === "_") { + if (i) + throw new Q("Double subscript", s); + i = this.handleSupSubscript("subscript"); + } else if (s.text === "'") { + if (r) + throw new Q("Double superscript", s); + var l = { + type: "textord", + mode: this.mode, + text: "\\prime" + }, a = [l]; + for (this.consume(); this.fetch().text === "'"; ) + a.push(l), this.consume(); + this.fetch().text === "^" && a.push(this.handleSupSubscript("superscript")), r = { + type: "ordgroup", + mode: this.mode, + body: a + }; + } else if (Hu[s.text]) { + var u = f7.test(s.text), c = []; + for (c.push(new $n(Hu[s.text])), this.consume(); ; ) { + var h = this.fetch().text; + if (!Hu[h] || f7.test(h) !== u) + break; + c.unshift(new $n(Hu[h])), this.consume(); + } + var d = this.subparse(c); + u ? i = { + type: "ordgroup", + mode: "math", + body: d + } : r = { + type: "ordgroup", + mode: "math", + body: d + }; + } else + break; + } + return r || i ? { + type: "supsub", + mode: this.mode, + base: n, + sup: r, + sub: i + } : n; + } + /** + * Parses an entire function, including its base and all of its arguments. + */ + parseFunction(e, n) { + var r = this.fetch(), i = r.text, s = Xi[i]; + if (!s) + return null; + if (this.consume(), n && n !== "atom" && !s.allowedInArgument) + throw new Q("Got function '" + i + "' with no arguments" + (n ? " as " + n : ""), r); + if (this.mode === "text" && !s.allowedInText) + throw new Q("Can't use function '" + i + "' in text mode", r); + if (this.mode === "math" && s.allowedInMath === !1) + throw new Q("Can't use function '" + i + "' in math mode", r); + var { + args: o, + optArgs: l + } = this.parseArguments(i, s); + return this.callFunction(i, o, l, r, e); + } + /** + * Call a function handler with a suitable context and arguments. + */ + callFunction(e, n, r, i, s) { + var o = { + funcName: e, + parser: this, + token: i, + breakOnTokenText: s + }, l = Xi[e]; + if (l && l.handler) + return l.handler(o, n, r); + throw new Q("No function handler for " + e); + } + /** + * Parses the arguments of a function or environment + */ + parseArguments(e, n) { + var r = n.numArgs + n.numOptionalArgs; + if (r === 0) + return { + args: [], + optArgs: [] + }; + for (var i = [], s = [], o = 0; o < r; o++) { + var l = n.argTypes && n.argTypes[o], a = o < n.numOptionalArgs; + (n.primitive && l == null || // \sqrt expands into primitive if optional argument doesn't exist + n.type === "sqrt" && o === 1 && s[0] == null) && (l = "primitive"); + var u = this.parseGroupOfType("argument to '" + e + "'", l, a); + if (a) + s.push(u); + else if (u != null) + i.push(u); + else + throw new Q("Null argument, please report this as a bug"); + } + return { + args: i, + optArgs: s + }; + } + /** + * Parses a group when the mode is changing. + */ + parseGroupOfType(e, n, r) { + switch (n) { + case "color": + return this.parseColorGroup(r); + case "size": + return this.parseSizeGroup(r); + case "url": + return this.parseUrlGroup(r); + case "math": + case "text": + return this.parseArgumentGroup(r, n); + case "hbox": { + var i = this.parseArgumentGroup(r, "text"); + return i != null ? { + type: "styling", + mode: i.mode, + body: [i], + style: "text" + // simulate \textstyle + } : null; + } + case "raw": { + var s = this.parseStringGroup("raw", r); + return s != null ? { + type: "raw", + mode: "text", + string: s.text + } : null; + } + case "primitive": { + if (r) + throw new Q("A primitive argument cannot be optional"); + var o = this.parseGroup(e); + if (o == null) + throw new Q("Expected group as " + e, this.fetch()); + return o; + } + case "original": + case null: + case void 0: + return this.parseArgumentGroup(r); + default: + throw new Q("Unknown group type as " + e, this.fetch()); + } + } + /** + * Discard any space tokens, fetching the next non-space token. + */ + consumeSpaces() { + for (; this.fetch().text === " "; ) + this.consume(); + } + /** + * Parses a group, essentially returning the string formed by the + * brace-enclosed tokens plus some position information. + */ + parseStringGroup(e, n) { + var r = this.gullet.scanArgument(n); + if (r == null) + return null; + for (var i = "", s; (s = this.fetch()).text !== "EOF"; ) + i += s.text, this.consume(); + return this.consume(), r.text = i, r; + } + /** + * Parses a regex-delimited group: the largest sequence of tokens + * whose concatenated strings match `regex`. Returns the string + * formed by the tokens plus some position information. + */ + parseRegexGroup(e, n) { + for (var r = this.fetch(), i = r, s = "", o; (o = this.fetch()).text !== "EOF" && e.test(s + o.text); ) + i = o, s += i.text, this.consume(); + if (s === "") + throw new Q("Invalid " + n + ": '" + r.text + "'", r); + return r.range(i, s); + } + /** + * Parses a color description. + */ + parseColorGroup(e) { + var n = this.parseStringGroup("color", e); + if (n == null) + return null; + var r = /^(#[a-f0-9]{3,4}|#[a-f0-9]{6}|#[a-f0-9]{8}|[a-f0-9]{6}|[a-z]+)$/i.exec(n.text); + if (!r) + throw new Q("Invalid color: '" + n.text + "'", n); + var i = r[0]; + return /^[0-9a-f]{6}$/i.test(i) && (i = "#" + i), { + type: "color-token", + mode: this.mode, + color: i + }; + } + /** + * Parses a size specification, consisting of magnitude and unit. + */ + parseSizeGroup(e) { + var n, r = !1; + if (this.gullet.consumeSpaces(), !e && this.gullet.future().text !== "{" ? n = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size") : n = this.parseStringGroup("size", e), !n) + return null; + !e && n.text.length === 0 && (n.text = "0pt", r = !0); + var i = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(n.text); + if (!i) + throw new Q("Invalid size: '" + n.text + "'", n); + var s = { + number: +(i[1] + i[2]), + // sign + magnitude, cast to number + unit: i[3] + }; + if (!Gb(s)) + throw new Q("Invalid unit: '" + s.unit + "'", n); + return { + type: "size", + mode: this.mode, + value: s, + isBlank: r + }; + } + /** + * Parses an URL, checking escaped letters and allowed protocols, + * and setting the catcode of % as an active character (as in \hyperref). + */ + parseUrlGroup(e) { + this.gullet.lexer.setCatcode("%", 13), this.gullet.lexer.setCatcode("~", 12); + var n = this.parseStringGroup("url", e); + if (this.gullet.lexer.setCatcode("%", 14), this.gullet.lexer.setCatcode("~", 13), n == null) + return null; + var r = n.text.replace(/\\([#$%&~_^{}])/g, "$1"); + return { + type: "url", + mode: this.mode, + url: r + }; + } + /** + * Parses an argument with the mode specified. + */ + parseArgumentGroup(e, n) { + var r = this.gullet.scanArgument(e); + if (r == null) + return null; + var i = this.mode; + n && this.switchMode(n), this.gullet.beginGroup(); + var s = this.parseExpression(!1, "EOF"); + this.expect("EOF"), this.gullet.endGroup(); + var o = { + type: "ordgroup", + mode: this.mode, + loc: r.loc, + body: s + }; + return n && this.switchMode(i), o; + } + /** + * Parses an ordinary group, which is either a single nucleus (like "x") + * or an expression in braces (like "{x+y}") or an implicit group, a group + * that starts at the current position, and ends right before a higher explicit + * group ends, or at EOF. + */ + parseGroup(e, n) { + var r = this.fetch(), i = r.text, s; + if (i === "{" || i === "\\begingroup") { + this.consume(); + var o = i === "{" ? "}" : "\\endgroup"; + this.gullet.beginGroup(); + var l = this.parseExpression(!1, o), a = this.fetch(); + this.expect(o), this.gullet.endGroup(), s = { + type: "ordgroup", + mode: this.mode, + loc: wn.range(r, a), + body: l, + // A group formed by \begingroup...\endgroup is a semi-simple group + // which doesn't affect spacing in math mode, i.e., is transparent. + // https://tex.stackexchange.com/questions/1930/when-should-one- + // use-begingroup-instead-of-bgroup + semisimple: i === "\\begingroup" || void 0 + }; + } else if (s = this.parseFunction(n, e) || this.parseSymbol(), s == null && i[0] === "\\" && !B9.hasOwnProperty(i)) { + if (this.settings.throwOnError) + throw new Q("Undefined control sequence: " + i, r); + s = this.formatUnsupportedCmd(i), this.consume(); + } + return s; + } + /** + * Form ligature-like combinations of characters for text mode. + * This includes inputs like "--", "---", "``" and "''". + * The result will simply replace multiple textord nodes with a single + * character in each value by a single textord node having multiple + * characters in its value. The representation is still ASCII source. + * The group will be modified in place. + */ + formLigatures(e) { + for (var n = e.length - 1, r = 0; r < n; ++r) { + var i = e[r], s = i.text; + s === "-" && e[r + 1].text === "-" && (r + 1 < n && e[r + 2].text === "-" ? (e.splice(r, 3, { + type: "textord", + mode: "text", + loc: wn.range(i, e[r + 2]), + text: "---" + }), n -= 2) : (e.splice(r, 2, { + type: "textord", + mode: "text", + loc: wn.range(i, e[r + 1]), + text: "--" + }), n -= 1)), (s === "'" || s === "`") && e[r + 1].text === s && (e.splice(r, 2, { + type: "textord", + mode: "text", + loc: wn.range(i, e[r + 1]), + text: s + s + }), n -= 1); + } + } + /** + * Parse a single symbol out of the string. Here, we handle single character + * symbols and special functions like \verb. + */ + parseSymbol() { + var e = this.fetch(), n = e.text; + if (/^\\verb[^a-zA-Z]/.test(n)) { + this.consume(); + var r = n.slice(5), i = r.charAt(0) === "*"; + if (i && (r = r.slice(1)), r.length < 2 || r.charAt(0) !== r.slice(-1)) + throw new Q(`\\verb assertion failed -- + please report what input caused this bug`); + return r = r.slice(1, -1), { + type: "verb", + mode: "text", + body: r, + star: i + }; + } + p7.hasOwnProperty(n[0]) && !ot[this.mode][n[0]] && (this.settings.strict && this.mode === "math" && this.settings.reportNonstrict("unicodeTextInMathMode", 'Accented Unicode text character "' + n[0] + '" used in math mode', e), n = p7[n[0]] + n.slice(1)); + var s = dL.exec(n); + s && (n = n.substring(0, s.index), n === "i" ? n = "ı" : n === "j" && (n = "ȷ")); + var o; + if (ot[this.mode][n]) { + this.settings.strict && this.mode === "math" && $p.indexOf(n) >= 0 && this.settings.reportNonstrict("unicodeTextInMathMode", 'Latin-1/Unicode text character "' + n[0] + '" used in math mode', e); + var l = ot[this.mode][n].group, a = wn.range(e), u; + if (iB.hasOwnProperty(l)) { + var c = l; + u = { + type: "atom", + mode: this.mode, + family: c, + loc: a, + text: n + }; + } else + u = { + type: l, + mode: this.mode, + loc: a, + text: n + }; + o = u; + } else if (n.charCodeAt(0) >= 128) + this.settings.strict && (Ub(n.charCodeAt(0)) ? this.mode === "math" && this.settings.reportNonstrict("unicodeTextInMathMode", 'Unicode text character "' + n[0] + '" used in math mode', e) : this.settings.reportNonstrict("unknownSymbol", 'Unrecognized Unicode character "' + n[0] + '"' + (" (" + n.charCodeAt(0) + ")"), e)), o = { + type: "textord", + mode: "text", + loc: wn.range(e), + text: n + }; + else + return null; + if (this.consume(), s) + for (var h = 0; h < s[0].length; h++) { + var d = s[0][h]; + if (!If[d]) + throw new Q("Unknown accent ' " + d + "'", e); + var f = If[d][this.mode] || If[d].text; + if (!f) + throw new Q("Accent " + d + " unsupported in " + this.mode + " mode", e); + o = { + type: "accent", + mode: this.mode, + loc: wn.range(e), + label: f, + isStretchy: !1, + isShifty: !0, + // $FlowFixMe + base: o + }; + } + return o; + } +} +ud.endOfExpression = ["}", "\\endgroup", "\\end", "\\right", "&"]; +var Pg = function(e, n) { + if (!(typeof e == "string" || e instanceof String)) + throw new TypeError("KaTeX can only parse string typed expression"); + var r = new ud(e, n); + delete r.gullet.macros.current["\\df@tag"]; + var i = r.parse(); + if (delete r.gullet.macros.current["\\current@color"], delete r.gullet.macros.current["\\color"], r.gullet.macros.get("\\df@tag")) { + if (!n.displayMode) + throw new Q("\\tag works only in display equations"); + i = [{ + type: "tag", + mode: "text", + body: i, + tag: r.subparse([new $n("\\df@tag")]) + }]; + } + return i; +}, L9 = function(e, n, r) { + n.textContent = ""; + var i = Bg(e, r).toNode(); + n.appendChild(i); +}; +typeof document < "u" && document.compatMode !== "CSS1Compat" && (typeof console < "u" && console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype."), L9 = function() { + throw new Q("KaTeX doesn't work in quirks mode."); +}); +var yL = function(e, n) { + var r = Bg(e, n).toMarkup(); + return r; +}, vL = function(e, n) { + var r = new vg(n); + return Pg(e, r); +}, F9 = function(e, n, r) { + if (r.throwOnError || !(e instanceof Q)) + throw e; + var i = z.makeSpan(["katex-error"], [new nr(n)]); + return i.setAttribute("title", e.toString()), i.setAttribute("style", "color:" + r.errorColor), i; +}, Bg = function(e, n) { + var r = new vg(n); + try { + var i = Pg(e, r); + return TB(i, e, r); + } catch (s) { + return F9(s, e, r); + } +}, bL = function(e, n) { + var r = new vg(n); + try { + var i = Pg(e, r); + return EB(i, e, r); + } catch (s) { + return F9(s, e, r); + } +}, wL = "0.16.27", kL = { + Span: gu, + Anchor: kg, + SymbolNode: nr, + SvgNode: Si, + PathNode: fs, + LineNode: Hp +}, xL = { + /** + * Current KaTeX version + */ + version: wL, + /** + * Renders the given LaTeX into an HTML+MathML combination, and adds + * it as a child to the specified DOM node. + */ + render: L9, + /** + * Renders the given LaTeX into an HTML+MathML combination string, + * for sending to the client. + */ + renderToString: yL, + /** + * KaTeX error, usually during parsing. + */ + ParseError: Q, + /** + * The schema of Settings + */ + SETTINGS_SCHEMA: Oc, + /** + * Parses the given LaTeX into KaTeX's internal parse tree structure, + * without rendering to HTML or MathML. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __parse: vL, + /** + * Renders the given LaTeX into an HTML+MathML internal DOM tree + * representation, without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToDomTree: Bg, + /** + * Renders the given LaTeX into an HTML internal DOM tree representation, + * without MathML and without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToHTMLTree: bL, + /** + * extends internal font metrics object with a new object + * each key in the new object represents a font name + */ + __setFontMetrics: YP, + /** + * adds a new symbol to builtin symbols table + */ + __defineSymbol: p, + /** + * adds a new function to builtin function list, + * which directly produce parse tree elements + * and have their own html/mathml builders + */ + __defineFunction: ce, + /** + * adds a new macro to builtin macro list + */ + __defineMacro: k, + /** + * Expose the dom tree node types, which can be useful for type checking nodes. + * + * NOTE: These methods are not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __domTree: kL +}; +function V9(t) { + return t.use("FeaturesCtx"); +} +function SL(t) { + return (e) => { + V9(e).update((n) => n.includes(t) ? n : [...n, t]); + }; +} +var Lg = /* @__PURE__ */ ((t) => (t.CodeMirror = "code-mirror", t.ListItem = "list-item", t.LinkTooltip = "link-tooltip", t.Cursor = "cursor", t.ImageBlock = "image-block", t.BlockEdit = "block-edit", t.Toolbar = "toolbar", t.Placeholder = "placeholder", t.Table = "table", t.Latex = "latex", t))(Lg || {}); +const CL = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <path + d="M8.85758 18.625C8.4358 18.625 8.07715 18.4772 7.78163 18.1817C7.48613 17.8862 7.33838 17.5275 7.33838 17.1058V6.8942C7.33838 6.47242 7.48613 6.11377 7.78163 5.81825C8.07715 5.52275 8.4358 5.375 8.85758 5.375H12.1999C13.2191 5.375 14.1406 5.69231 14.9643 6.32693C15.788 6.96154 16.1999 7.81603 16.1999 8.89038C16.1999 9.63779 16.0194 10.2471 15.6585 10.7183C15.2976 11.1894 14.9088 11.5314 14.4922 11.7442C15.005 11.9211 15.4947 12.2708 15.9614 12.7933C16.428 13.3157 16.6614 14.0192 16.6614 14.9038C16.6614 16.182 16.1902 17.1217 15.2479 17.723C14.3056 18.3243 13.3563 18.625 12.3999 18.625H8.85758ZM9.4883 16.6327H12.3191C13.1063 16.6327 13.6627 16.4141 13.9884 15.9769C14.314 15.5397 14.4768 15.1205 14.4768 14.7192C14.4768 14.3179 14.314 13.8987 13.9884 13.4615C13.6627 13.0243 13.0909 12.8057 12.273 12.8057H9.4883V16.6327ZM9.4883 10.875H12.0826C12.6903 10.875 13.172 10.7013 13.5278 10.3539C13.8836 10.0064 14.0615 9.59037 14.0615 9.10575C14.0615 8.59035 13.8733 8.16918 13.497 7.84225C13.1207 7.51533 12.6595 7.35188 12.1133 7.35188H9.4883V10.875Z" + /> + </svg> +`, NL = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_8081)"> + <path + d="M9.4 16.6L4.8 12L9.4 7.4L8 6L2 12L8 18L9.4 16.6ZM14.6 16.6L19.2 12L14.6 7.4L16 6L22 12L16 18L14.6 16.6Z" + /> + </g> + <defs> + <clipPath id="clip0_977_8081"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`, ML = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <path + d="M6.29811 18.625C6.04505 18.625 5.83115 18.5375 5.65641 18.3626C5.48166 18.1877 5.39429 17.9736 5.39429 17.7203C5.39429 17.467 5.48166 17.2532 5.65641 17.0788C5.83115 16.9045 6.04505 16.8173 6.29811 16.8173H9.21159L12.452 7.18265H9.53851C9.28545 7.18265 9.07155 7.0952 8.89681 6.9203C8.72206 6.7454 8.63469 6.5313 8.63469 6.278C8.63469 6.02472 8.72206 5.81089 8.89681 5.63652C9.07155 5.46217 9.28545 5.375 9.53851 5.375H16.8847C17.1377 5.375 17.3516 5.46245 17.5264 5.63735C17.7011 5.81225 17.7885 6.02634 17.7885 6.27962C17.7885 6.53293 17.7011 6.74676 17.5264 6.92113C17.3516 7.09548 17.1377 7.18265 16.8847 7.18265H14.2789L11.0385 16.8173H13.6443C13.8973 16.8173 14.1112 16.9048 14.286 17.0797C14.4607 17.2546 14.5481 17.4687 14.5481 17.722C14.5481 17.9752 14.4607 18.1891 14.286 18.3634C14.1112 18.5378 13.8973 18.625 13.6443 18.625H6.29811Z" + /> + </svg> +`, TL = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <path + d="M17.0385 19.5003V16.5388H14.0769V15.0388H17.0385V12.0773H18.5384V15.0388H21.5V16.5388H18.5384V19.5003H17.0385ZM10.8077 16.5388H7.03845C5.78282 16.5388 4.7125 16.0963 3.8275 15.2114C2.9425 14.3266 2.5 13.2564 2.5 12.0009C2.5 10.7454 2.9425 9.67504 3.8275 8.78979C4.7125 7.90454 5.78282 7.46191 7.03845 7.46191H10.8077V8.96186H7.03845C6.1987 8.96186 5.48235 9.25834 4.8894 9.85129C4.29645 10.4442 3.99998 11.1606 3.99998 12.0003C3.99998 12.8401 4.29645 13.5564 4.8894 14.1494C5.48235 14.7423 6.1987 15.0388 7.03845 15.0388H10.8077V16.5388ZM8.25 12.7503V11.2504H15.75V12.7503H8.25ZM21.5 12.0003H20C20 11.1606 19.7035 10.4442 19.1106 9.85129C18.5176 9.25834 17.8013 8.96186 16.9615 8.96186H13.1923V7.46191H16.9615C18.2171 7.46191 19.2875 7.90441 20.1725 8.78939C21.0575 9.67439 21.5 10.7447 21.5 12.0003Z" + /> + </svg> +`, EL = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <path + d="M3.25 13.7404C3.0375 13.7404 2.85938 13.6684 2.71563 13.5246C2.57188 13.3808 2.5 13.2026 2.5 12.99C2.5 12.7774 2.57188 12.5993 2.71563 12.4558C2.85938 12.3122 3.0375 12.2404 3.25 12.2404H20.75C20.9625 12.2404 21.1406 12.3123 21.2843 12.4561C21.4281 12.5999 21.5 12.7781 21.5 12.9907C21.5 13.2033 21.4281 13.3814 21.2843 13.525C21.1406 13.6686 20.9625 13.7404 20.75 13.7404H3.25ZM10.9423 10.2596V6.62495H6.5673C6.2735 6.62495 6.02377 6.52201 5.8181 6.31613C5.61245 6.11026 5.50963 5.86027 5.50963 5.56615C5.50963 5.27205 5.61245 5.02083 5.8181 4.8125C6.02377 4.60417 6.2735 4.5 6.5673 4.5H17.4423C17.7361 4.5 17.9858 4.60294 18.1915 4.80883C18.3971 5.01471 18.5 5.2647 18.5 5.5588C18.5 5.85292 18.3971 6.10413 18.1915 6.31245C17.9858 6.52078 17.7361 6.62495 17.4423 6.62495H13.0673V10.2596H10.9423ZM10.9423 15.7211H13.0673V18.4423C13.0673 18.7361 12.9643 18.9858 12.7584 19.1915C12.5526 19.3971 12.3026 19.5 12.0085 19.5C11.7144 19.5 11.4631 19.3962 11.2548 19.1887C11.0465 18.9811 10.9423 18.7291 10.9423 18.4327V15.7211Z" + /> + </svg> +`, OL = ` + <svg + xmlns="http://www.w3.org/2000/svg" + width="32" + height="32" + viewBox="0 0 24 24" + > + <path + fill="currentColor" + d="M7 19v-.808L13.096 12L7 5.808V5h10v1.25H9.102L14.727 12l-5.625 5.77H17V19z" + /> + </svg> +`; +var H9 = (t) => { + throw TypeError(t); +}, $9 = (t, e, n) => e.has(t) || H9("Cannot " + n), oa = (t, e, n) => ($9(t, e, "read from private field"), n ? n.call(t) : e.get(t)), m7 = (t, e, n) => e.has(t) ? H9("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(t) : e.set(t, n), AL = (t, e, n, r) => ($9(t, e, "write to private field"), e.set(t, n), n), jo, Ic; +class IL { + constructor() { + m7(this, jo, []), this.clear = () => (AL(this, jo, []), this), m7(this, Ic, (e) => { + const n = { + group: e, + addItem: (r, i) => { + const s = { ...i, key: r }; + return e.items.push(s), n; + }, + clear: () => (e.items = [], n) + }; + return n; + }), this.addGroup = (e, n) => { + const i = { + key: e, + label: n, + items: [] + }; + return oa(this, jo).push(i), oa(this, Ic).call(this, i); + }, this.getGroup = (e) => { + const n = oa(this, jo).find((r) => r.key === e); + if (!n) throw new Error(`Group with key ${e} not found`); + return oa(this, Ic).call(this, n); + }, this.build = () => oa(this, jo); + } +} +jo = /* @__PURE__ */ new WeakMap(); +Ic = /* @__PURE__ */ new WeakMap(); +const $u = "math_inline", Kp = Mt($u, () => ({ + group: "inline", + inline: !0, + draggable: !0, + atom: !0, + attrs: { + value: { + default: "" + } + }, + parseDOM: [ + { + tag: `span[data-type="${$u}"]`, + getAttrs: (t) => { + var e; + return { + value: (e = t.dataset.value) != null ? e : "" + }; + } + } + ], + toDOM: (t) => { + const e = t.attrs.value, n = document.createElement("span"); + return n.dataset.type = $u, n.dataset.value = e, xL.render(e, n, { + throwOnError: !1 + }), n; + }, + parseMarkdown: { + match: (t) => t.type === "inlineMath", + runner: (t, e, n) => { + t.addNode(n, { value: e.value }); + } + }, + toMarkdown: { + match: (t) => t.type.name === $u, + runner: (t, e) => { + t.addNode("inlineMath", void 0, e.attrs.value); + } + } +})), DL = Ee("ToggleLatex", (t) => () => (e, n) => { + const { + hasNode: r, + pos: i, + target: s + } = J6(e, Kp.type(t)), { selection: o, doc: l, tr: a } = e; + if (!r) { + const f = l.textBetween(o.from, o.to); + let m = a.replaceSelectionWith( + Kp.type(t).create({ + value: f + }) + ); + return n && n( + m.setSelection(Ne.create(m.doc, o.from)) + ), !0; + } + const { from: u, to: c } = o; + if (!s || i < 0) return !1; + let h = a.delete(i, i + 1); + const d = s.attrs.value; + return h = h.insertText(d, i), n && n( + h.setSelection( + Ce.create(h.doc, u, c + d.length - 1) + ) + ), !0; +}); +function _L(t, e) { + var n, r, i, s, o, l, a; + const u = new IL(); + u.addGroup("formatting", "Formatting").addItem("bold", { + icon: (n = t == null ? void 0 : t.boldIcon) != null ? n : CL, + active: (f) => f.get(me).call(Bo.key, Ll.type(f)), + onRun: (f) => { + f.get(me).call(Bh.key); + } + }).addItem("italic", { + icon: (r = t == null ? void 0 : t.italicIcon) != null ? r : ML, + active: (f) => f.get(me).call( + Bo.key, + ko.type(f) + ), + onRun: (f) => { + f.get(me).call(Ph.key); + } + }).addItem("strikethrough", { + icon: (i = t == null ? void 0 : t.strikethroughIcon) != null ? i : EL, + active: (f) => f.get(me).call( + Bo.key, + $l.type(f) + ), + onRun: (f) => { + f.get(me).call($h.key); + } + }); + const c = u.addGroup("function", "Function"); + c.addItem("code", { + icon: (s = t == null ? void 0 : t.codeIcon) != null ? s : NL, + active: (f) => f.get(me).call( + Bo.key, + yi.type(f) + ), + onRun: (f) => { + f.get(me).call(Lh.key); + } + }); + const h = e && V9(e).get(); + return (h == null ? void 0 : h.includes(Lg.Latex)) && c.addItem("latex", { + icon: (o = t == null ? void 0 : t.latexIcon) != null ? o : OL, + active: (f) => f.get(me).call( + S8.key, + Kp.type(f) + ), + onRun: (f) => { + f.get(me).call(DL.key); + } + }), c.addItem("link", { + icon: (l = t == null ? void 0 : t.linkIcon) != null ? l : TL, + active: (f) => f.get(me).call(Bo.key, ns.type(f)), + onRun: (f) => { + f.get(me).call(xP.key); + } + }), (a = t == null ? void 0 : t.buildToolbar) == null || a.call(t, u), u.build(); +} +const RL = /* @__PURE__ */ Wl({ + props: { + ctx: { + type: Object, + required: !0 + }, + hide: { + type: Function, + required: !0 + }, + show: { + type: Object, + required: !0 + }, + selection: { + type: Object, + required: !0 + }, + config: { + type: Object, + required: !1 + } + }, + setup(t) { + const { ctx: e, config: n } = t, r = (o) => (l) => { + l.preventDefault(), e && o(e); + }; + function i(o) { + return t.selection.value, e.get(hp).status !== Uc.Created ? !1 : o(e); + } + const s = dg(() => _L(n, e)); + return () => /* @__PURE__ */ ze(kn, null, s.value.map((o) => o.items.map((l) => /* @__PURE__ */ ze( + "button", + { + type: "button", + class: Qa( + "toolbar-item", + e && i(l.active) && "active" + ), + onPointerdown: r(l.onRun) + }, + /* @__PURE__ */ ze(v0, { icon: l.icon }) + ))).reduce((o, l, a) => (a === 0 ? o.push(...l) : o.push(/* @__PURE__ */ ze("div", { class: "divider" }), ...l), o), [])); + } +}); +var q9 = (t) => { + throw TypeError(t); +}, j9 = (t, e, n) => e.has(t) || q9("Cannot " + n), Dn = (t, e, n) => (j9(t, e, "read from private field"), n ? n.call(t) : e.get(t)), la = (t, e, n) => e.has(t) ? q9("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(t) : e.set(t, n), qu = (t, e, n, r) => (j9(t, e, "write to private field"), e.set(t, n), n), zi, Ma, Dc, Ta, Ea; +const g7 = mg("CREPE_TOOLBAR"); +class zL { + constructor(e, n, r) { + la(this, zi), la(this, Ma), la(this, Dc), la(this, Ta), la(this, Ea, /* @__PURE__ */ kt(!1)), this.update = (o, l) => { + Dn(this, zi).update(o, l), Dn(this, Ta).value = o.state.selection; + }, this.destroy = () => { + Dn(this, zi).destroy(), Dn(this, Dc).unmount(), Dn(this, Ma).remove(); + }, this.hide = () => { + Dn(this, zi).hide(); + }; + const i = document.createElement("div"); + i.className = "milkdown-toolbar", qu(this, Ta, /* @__PURE__ */ qD(n.state.selection)); + const s = nd(RL, { + ctx: e, + hide: this.hide, + config: r, + selection: Dn(this, Ta), + show: Dn(this, Ea) + }); + s.mount(i), qu(this, Ma, i), qu(this, Dc, s), qu(this, zi, new hP({ + content: Dn(this, Ma), + debounce: 20, + offset: 10, + shouldShow(o) { + const { doc: l, selection: a } = o.state, { empty: u, from: c, to: h } = a, d = !l.textBetween(c, h).length && a instanceof Ce, f = !(a instanceof Ce), m = o.dom.getRootNode().activeElement, y = i.contains(m), b = !o.hasFocus() && !y, w = !o.editable; + return !(b || f || u || d || w); + } + })), Dn(this, zi).onShow = () => { + Dn(this, Ea).value = !0; + }, Dn(this, zi).onHide = () => { + Dn(this, Ea).value = !1; + }, this.update(n); + } +} +zi = /* @__PURE__ */ new WeakMap(); +Ma = /* @__PURE__ */ new WeakMap(); +Dc = /* @__PURE__ */ new WeakMap(); +Ta = /* @__PURE__ */ new WeakMap(); +Ea = /* @__PURE__ */ new WeakMap(); +const PL = (t, e) => { + t.config(SL(Lg.Toolbar)).config((n) => { + n.set(g7.key, { + view: (r) => new zL(n, r, e) + }); + }).use(g7); +}, WL = ({ + value: t, + onChange: e, + className: n +}) => { + const r = xs(null), i = xs(null), s = xs(!1), o = xs(), l = xs(!1), a = xs(t), u = xs(e); + return hd(() => { + u.current = e; + }, [e]), hd(() => { + if (!r.current) return; + s.current = !1; + const c = new YI({ + root: r.current, + defaultValue: t || "" + }); + c.addFeature(cP).addFeature(PL), c.create().then(() => { + s.current = !0, i.current = c, a.current = t; + }); + const h = () => { + l.current || !s.current || (clearTimeout(o.current), o.current = setTimeout(() => { + if (!(!i.current || !s.current)) + try { + const f = i.current.getMarkdown(); + f !== a.current && (a.current = f, u.current(f)); + } catch (f) { + console.error("Error getting markdown:", f); + } + }, 300)); + }, d = new MutationObserver(h); + return d.observe(r.current, { + childList: !0, + subtree: !0, + characterData: !0 + }), () => { + var f; + d.disconnect(), o.current && clearTimeout(o.current), s.current = !1, (f = i.current) == null || f.destroy(), i.current = null; + }; + }, []), hd(() => { + if (!(!i.current || !s.current)) + try { + const c = i.current.getMarkdown(); + t !== c && t !== a.current && (l.current = !0, a.current = t, setTimeout(() => { + l.current = !1; + }, 150)); + } catch (c) { + console.error("Error syncing external value:", c); + } + }, [t]), /* @__PURE__ */ Z9.jsx( + "div", + { + ref: r, + className: `milkdown-editor p-3 min-h-[120px] prose prose-sm max-w-none dark:prose-invert ${n || ""}` + } + ); +}; +export { + WL as default +}; +//# sourceMappingURL=MilkdownEditorInternal-CrHTBrS2.js.map diff --git a/packages/ui/dist-lib/MilkdownEditorInternal-CrHTBrS2.js.map b/packages/ui/dist-lib/MilkdownEditorInternal-CrHTBrS2.js.map new file mode 100644 index 00000000..c2f6dfd3 --- /dev/null +++ b/packages/ui/dist-lib/MilkdownEditorInternal-CrHTBrS2.js.map @@ -0,0 +1 @@ +{"version":3,"file":"MilkdownEditorInternal-CrHTBrS2.js","sources":["../node_modules/@milkdown/exception/lib/index.js","../node_modules/@milkdown/ctx/lib/index.js","../node_modules/orderedmap/dist/index.js","../node_modules/prosemirror-model/dist/index.js","../node_modules/mdast-util-to-string/lib/index.js","../node_modules/decode-named-character-reference/index.dom.js","../node_modules/micromark-util-chunked/index.js","../node_modules/micromark-util-combine-extensions/index.js","../node_modules/micromark-util-decode-numeric-character-reference/index.js","../node_modules/micromark-util-normalize-identifier/index.js","../node_modules/micromark-util-character/index.js","../node_modules/micromark-factory-space/index.js","../node_modules/micromark/lib/initialize/content.js","../node_modules/micromark/lib/initialize/document.js","../node_modules/micromark-util-classify-character/index.js","../node_modules/micromark-util-resolve-all/index.js","../node_modules/micromark-core-commonmark/lib/attention.js","../node_modules/micromark-core-commonmark/lib/autolink.js","../node_modules/micromark-core-commonmark/lib/blank-line.js","../node_modules/micromark-core-commonmark/lib/block-quote.js","../node_modules/micromark-core-commonmark/lib/character-escape.js","../node_modules/micromark-core-commonmark/lib/character-reference.js","../node_modules/micromark-core-commonmark/lib/code-fenced.js","../node_modules/micromark-core-commonmark/lib/code-indented.js","../node_modules/micromark-core-commonmark/lib/code-text.js","../node_modules/micromark-util-subtokenize/lib/splice-buffer.js","../node_modules/micromark-util-subtokenize/index.js","../node_modules/micromark-core-commonmark/lib/content.js","../node_modules/micromark-factory-destination/index.js","../node_modules/micromark-factory-label/index.js","../node_modules/micromark-factory-title/index.js","../node_modules/micromark-factory-whitespace/index.js","../node_modules/micromark-core-commonmark/lib/definition.js","../node_modules/micromark-core-commonmark/lib/hard-break-escape.js","../node_modules/micromark-core-commonmark/lib/heading-atx.js","../node_modules/micromark-util-html-tag-name/index.js","../node_modules/micromark-core-commonmark/lib/html-flow.js","../node_modules/micromark-core-commonmark/lib/html-text.js","../node_modules/micromark-core-commonmark/lib/label-end.js","../node_modules/micromark-core-commonmark/lib/label-start-image.js","../node_modules/micromark-core-commonmark/lib/label-start-link.js","../node_modules/micromark-core-commonmark/lib/line-ending.js","../node_modules/micromark-core-commonmark/lib/thematic-break.js","../node_modules/micromark-core-commonmark/lib/list.js","../node_modules/micromark-core-commonmark/lib/setext-underline.js","../node_modules/micromark/lib/initialize/flow.js","../node_modules/micromark/lib/initialize/text.js","../node_modules/micromark/lib/constructs.js","../node_modules/micromark/lib/create-tokenizer.js","../node_modules/micromark/lib/parse.js","../node_modules/micromark/lib/postprocess.js","../node_modules/micromark/lib/preprocess.js","../node_modules/micromark-util-decode-string/index.js","../node_modules/unist-util-stringify-position/lib/index.js","../node_modules/mdast-util-from-markdown/lib/index.js","../node_modules/remark-parse/lib/index.js","../node_modules/zwitch/index.js","../node_modules/mdast-util-to-markdown/lib/configure.js","../node_modules/mdast-util-to-markdown/lib/handle/blockquote.js","../node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js","../node_modules/mdast-util-to-markdown/lib/handle/break.js","../node_modules/longest-streak/index.js","../node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js","../node_modules/mdast-util-to-markdown/lib/util/check-fence.js","../node_modules/mdast-util-to-markdown/lib/handle/code.js","../node_modules/mdast-util-to-markdown/lib/util/check-quote.js","../node_modules/mdast-util-to-markdown/lib/handle/definition.js","../node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js","../node_modules/mdast-util-to-markdown/lib/util/encode-character-reference.js","../node_modules/mdast-util-to-markdown/lib/util/encode-info.js","../node_modules/mdast-util-to-markdown/lib/handle/emphasis.js","../node_modules/unist-util-is/lib/index.js","../node_modules/unist-util-visit-parents/lib/index.js","../node_modules/unist-util-visit/lib/index.js","../node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js","../node_modules/mdast-util-to-markdown/lib/handle/heading.js","../node_modules/mdast-util-to-markdown/lib/handle/html.js","../node_modules/mdast-util-to-markdown/lib/handle/image.js","../node_modules/mdast-util-to-markdown/lib/handle/image-reference.js","../node_modules/mdast-util-to-markdown/lib/handle/inline-code.js","../node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js","../node_modules/mdast-util-to-markdown/lib/handle/link.js","../node_modules/mdast-util-to-markdown/lib/handle/link-reference.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js","../node_modules/mdast-util-to-markdown/lib/util/check-rule.js","../node_modules/mdast-util-to-markdown/lib/handle/list.js","../node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js","../node_modules/mdast-util-to-markdown/lib/handle/list-item.js","../node_modules/mdast-util-to-markdown/lib/handle/paragraph.js","../node_modules/mdast-util-phrasing/lib/index.js","../node_modules/mdast-util-to-markdown/lib/handle/root.js","../node_modules/mdast-util-to-markdown/lib/util/check-strong.js","../node_modules/mdast-util-to-markdown/lib/handle/strong.js","../node_modules/mdast-util-to-markdown/lib/handle/text.js","../node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js","../node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js","../node_modules/mdast-util-to-markdown/lib/handle/index.js","../node_modules/mdast-util-to-markdown/lib/join.js","../node_modules/mdast-util-to-markdown/lib/unsafe.js","../node_modules/mdast-util-to-markdown/lib/util/association.js","../node_modules/mdast-util-to-markdown/lib/util/compile-pattern.js","../node_modules/mdast-util-to-markdown/lib/util/container-phrasing.js","../node_modules/mdast-util-to-markdown/lib/util/container-flow.js","../node_modules/mdast-util-to-markdown/lib/util/indent-lines.js","../node_modules/mdast-util-to-markdown/lib/util/safe.js","../node_modules/mdast-util-to-markdown/lib/util/track.js","../node_modules/mdast-util-to-markdown/lib/index.js","../node_modules/remark-stringify/lib/index.js","../node_modules/bail/index.js","../node_modules/extend/index.js","../node_modules/is-plain-obj/index.js","../node_modules/trough/lib/index.js","../node_modules/vfile-message/lib/index.js","../node_modules/vfile/lib/minpath.browser.js","../node_modules/vfile/lib/minproc.browser.js","../node_modules/vfile/lib/minurl.shared.js","../node_modules/vfile/lib/minurl.browser.js","../node_modules/vfile/lib/index.js","../node_modules/unified/lib/callable-instance.js","../node_modules/unified/lib/index.js","../node_modules/@milkdown/transformer/lib/index.js","../node_modules/prosemirror-transform/dist/index.js","../node_modules/prosemirror-state/dist/index.js","../node_modules/prosemirror-commands/dist/index.js","../node_modules/prosemirror-inputrules/dist/index.js","../node_modules/@milkdown/prose/lib/index.js","../node_modules/w3c-keyname/index.js","../node_modules/prosemirror-keymap/dist/index.js","../node_modules/prosemirror-view/dist/index.js","../node_modules/@milkdown/core/lib/index.js","../node_modules/nanoid/index.browser.js","../node_modules/@milkdown/utils/lib/index.js","../node_modules/@milkdown/plugin-clipboard/lib/index.js","../node_modules/rope-sequence/dist/index.js","../node_modules/prosemirror-history/dist/index.js","../node_modules/@milkdown/plugin-history/lib/index.js","../node_modules/@milkdown/plugin-indent/lib/index.js","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/lodash-es/_baseTrim.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/now.js","../node_modules/lodash-es/debounce.js","../node_modules/lodash-es/throttle.js","../node_modules/@milkdown/plugin-listener/lib/index.js","../node_modules/@milkdown/plugin-trailing/lib/index.js","../node_modules/prosemirror-schema-list/dist/index.js","../node_modules/mdast-util-definitions/lib/index.js","../node_modules/remark-inline-links/lib/index.js","../node_modules/@milkdown/preset-commonmark/lib/index.js","../node_modules/prosemirror-tables/dist/index.js","../node_modules/prosemirror-safari-ime-span/dist/index.js","../node_modules/ccount/index.js","../node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp/index.js","../node_modules/mdast-util-find-and-replace/lib/index.js","../node_modules/mdast-util-gfm-autolink-literal/lib/index.js","../node_modules/mdast-util-gfm-footnote/lib/index.js","../node_modules/mdast-util-gfm-strikethrough/lib/index.js","../node_modules/markdown-table/index.js","../node_modules/mdast-util-gfm-table/lib/index.js","../node_modules/mdast-util-gfm-task-list-item/lib/index.js","../node_modules/mdast-util-gfm/lib/index.js","../node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js","../node_modules/micromark-extension-gfm-footnote/lib/syntax.js","../node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js","../node_modules/micromark-extension-gfm-table/lib/edit-map.js","../node_modules/micromark-extension-gfm-table/lib/infer.js","../node_modules/micromark-extension-gfm-table/lib/syntax.js","../node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js","../node_modules/micromark-extension-gfm/index.js","../node_modules/remark-gfm/lib/index.js","../node_modules/@milkdown/preset-gfm/lib/index.js","../node_modules/@milkdown/crepe/lib/esm/builder.js","../node_modules/@milkdown/plugin-block/lib/index.js","../node_modules/@vue/shared/dist/shared.esm-bundler.js","../node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js","../node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js","../node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js","../node_modules/vue/dist/vue.runtime.esm-bundler.js","../node_modules/@milkdown/plugin-slash/lib/index.js","../node_modules/@milkdown/components/lib/index.js","../node_modules/@milkdown/components/lib/image-block/index.js","../node_modules/@milkdown/crepe/lib/esm/feature/block-edit/index.js","../node_modules/@milkdown/plugin-tooltip/lib/index.js","../node_modules/@milkdown/components/lib/link-tooltip/index.js","../node_modules/katex/dist/katex.mjs","../node_modules/@milkdown/crepe/lib/esm/feature/toolbar/index.js","../src/components/lazy-editors/MilkdownEditorInternal.tsx"],"sourcesContent":["var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => {\n ErrorCode2[\"docTypeError\"] = \"docTypeError\";\n ErrorCode2[\"contextNotFound\"] = \"contextNotFound\";\n ErrorCode2[\"timerNotFound\"] = \"timerNotFound\";\n ErrorCode2[\"ctxCallOutOfScope\"] = \"ctxCallOutOfScope\";\n ErrorCode2[\"createNodeInParserFail\"] = \"createNodeInParserFail\";\n ErrorCode2[\"stackOverFlow\"] = \"stackOverFlow\";\n ErrorCode2[\"parserMatchError\"] = \"parserMatchError\";\n ErrorCode2[\"serializerMatchError\"] = \"serializerMatchError\";\n ErrorCode2[\"getAtomFromSchemaFail\"] = \"getAtomFromSchemaFail\";\n ErrorCode2[\"expectDomTypeError\"] = \"expectDomTypeError\";\n ErrorCode2[\"callCommandBeforeEditorView\"] = \"callCommandBeforeEditorView\";\n ErrorCode2[\"missingRootElement\"] = \"missingRootElement\";\n ErrorCode2[\"missingNodeInSchema\"] = \"missingNodeInSchema\";\n ErrorCode2[\"missingMarkInSchema\"] = \"missingMarkInSchema\";\n ErrorCode2[\"ctxNotBind\"] = \"ctxNotBind\";\n ErrorCode2[\"missingYjsDoc\"] = \"missingYjsDoc\";\n return ErrorCode2;\n})(ErrorCode || {});\nclass MilkdownError extends Error {\n constructor(code, message) {\n super(message);\n this.name = \"MilkdownError\";\n this.code = code;\n }\n}\nconst functionReplacer = (_, value) => typeof value === \"function\" ? \"[Function]\" : value;\nconst stringify = (x) => JSON.stringify(x, functionReplacer);\nfunction docTypeError(type) {\n return new MilkdownError(\n ErrorCode.docTypeError,\n `Doc type error, unsupported type: ${stringify(type)}`\n );\n}\nfunction contextNotFound(name) {\n return new MilkdownError(\n ErrorCode.contextNotFound,\n `Context \"${name}\" not found, do you forget to inject it?`\n );\n}\nfunction timerNotFound(name) {\n return new MilkdownError(\n ErrorCode.timerNotFound,\n `Timer \"${name}\" not found, do you forget to record it?`\n );\n}\nfunction ctxCallOutOfScope() {\n return new MilkdownError(\n ErrorCode.ctxCallOutOfScope,\n \"Should not call a context out of the plugin.\"\n );\n}\nfunction createNodeInParserFail(nodeType, attrs, content) {\n const nodeTypeName = \"name\" in nodeType ? nodeType.name : nodeType;\n const heading = `Cannot create node for ${nodeTypeName}`;\n const serialize = (x) => {\n if (x == null) return \"null\";\n if (Array.isArray(x)) {\n return `[${x.map(serialize).join(\", \")}]`;\n }\n if (typeof x === \"object\") {\n if (\"toJSON\" in x && typeof x.toJSON === \"function\") {\n return JSON.stringify(x.toJSON());\n }\n if (\"spec\" in x) {\n return JSON.stringify(x.spec);\n }\n return JSON.stringify(x);\n }\n if (typeof x === \"string\" || typeof x === \"number\" || typeof x === \"boolean\") {\n return JSON.stringify(x);\n }\n if (typeof x === \"function\") {\n return `[Function: ${x.name || \"anonymous\"}]`;\n }\n try {\n return String(x);\n } catch {\n return \"[Unserializable]\";\n }\n };\n const headingMessage = [\"[Description]\", heading];\n const attrsMessage = [\"[Attributes]\", attrs];\n const contentMessage = [\n \"[Content]\",\n (content ?? []).map((node) => {\n if (!node) return \"null\";\n if (typeof node === \"object\" && \"type\" in node) {\n return `${node}`;\n }\n return serialize(node);\n })\n ];\n const messages = [headingMessage, attrsMessage, contentMessage].reduce(\n (acc, [title, value]) => {\n const message = `${title}: ${serialize(value)}.`;\n return acc.concat(message);\n },\n []\n );\n return new MilkdownError(\n ErrorCode.createNodeInParserFail,\n messages.join(\"\\n\")\n );\n}\nfunction stackOverFlow() {\n return new MilkdownError(\n ErrorCode.stackOverFlow,\n \"Stack over flow, cannot pop on an empty stack.\"\n );\n}\nfunction parserMatchError(node) {\n return new MilkdownError(\n ErrorCode.parserMatchError,\n `Cannot match target parser for node: ${stringify(node)}.`\n );\n}\nfunction serializerMatchError(node) {\n return new MilkdownError(\n ErrorCode.serializerMatchError,\n `Cannot match target serializer for node: ${stringify(node)}.`\n );\n}\nfunction getAtomFromSchemaFail(type, name) {\n return new MilkdownError(\n ErrorCode.getAtomFromSchemaFail,\n `Cannot get ${type}: ${name} from schema.`\n );\n}\nfunction expectDomTypeError(node) {\n return new MilkdownError(\n ErrorCode.expectDomTypeError,\n `Expect to be a dom, but get: ${stringify(node)}.`\n );\n}\nfunction callCommandBeforeEditorView() {\n return new MilkdownError(\n ErrorCode.callCommandBeforeEditorView,\n \"You're trying to call a command before editor view initialized, make sure to get commandManager from ctx after editor view has been initialized\"\n );\n}\nfunction missingRootElement() {\n return new MilkdownError(\n ErrorCode.missingRootElement,\n \"Missing root element, milkdown cannot find root element of the editor.\"\n );\n}\nfunction missingNodeInSchema(name) {\n return new MilkdownError(\n ErrorCode.missingNodeInSchema,\n `Missing node in schema, milkdown cannot find \"${name}\" in schema.`\n );\n}\nfunction missingMarkInSchema(name) {\n return new MilkdownError(\n ErrorCode.missingMarkInSchema,\n `Missing mark in schema, milkdown cannot find \"${name}\" in schema.`\n );\n}\nfunction ctxNotBind() {\n return new MilkdownError(\n ErrorCode.ctxNotBind,\n \"Context not bind, please make sure the plugin has been initialized.\"\n );\n}\nfunction missingYjsDoc() {\n return new MilkdownError(\n ErrorCode.missingYjsDoc,\n \"Missing yjs doc, please make sure you have bind one.\"\n );\n}\nexport {\n callCommandBeforeEditorView,\n contextNotFound,\n createNodeInParserFail,\n ctxCallOutOfScope,\n ctxNotBind,\n docTypeError,\n expectDomTypeError,\n getAtomFromSchemaFail,\n missingMarkInSchema,\n missingNodeInSchema,\n missingRootElement,\n missingYjsDoc,\n parserMatchError,\n serializerMatchError,\n stackOverFlow,\n timerNotFound\n};\n//# sourceMappingURL=index.js.map\n","import { contextNotFound, ctxCallOutOfScope, timerNotFound } from \"@milkdown/exception\";\nclass Container {\n constructor() {\n this.sliceMap = /* @__PURE__ */ new Map();\n this.get = (slice) => {\n const context = typeof slice === \"string\" ? [...this.sliceMap.values()].find((x) => x.type.name === slice) : this.sliceMap.get(slice.id);\n if (!context) {\n const name = typeof slice === \"string\" ? slice : slice.name;\n throw contextNotFound(name);\n }\n return context;\n };\n this.remove = (slice) => {\n const context = typeof slice === \"string\" ? [...this.sliceMap.values()].find((x) => x.type.name === slice) : this.sliceMap.get(slice.id);\n if (!context) return;\n this.sliceMap.delete(context.type.id);\n };\n this.has = (slice) => {\n if (typeof slice === \"string\")\n return [...this.sliceMap.values()].some((x) => x.type.name === slice);\n return this.sliceMap.has(slice.id);\n };\n }\n}\nclass Slice {\n /// @internal\n constructor(container, value, type) {\n this.#watchers = [];\n this.#emit = () => {\n this.#watchers.forEach((watcher) => watcher(this.#value));\n };\n this.set = (value2) => {\n this.#value = value2;\n this.#emit();\n };\n this.get = () => this.#value;\n this.update = (updater) => {\n this.#value = updater(this.#value);\n this.#emit();\n };\n this.type = type;\n this.#value = value;\n container.set(type.id, this);\n }\n #watchers;\n /// @internal\n #value;\n #emit;\n /// Add a watcher for changes in the slice.\n /// Returns a function to remove the watcher.\n on(watcher) {\n this.#watchers.push(watcher);\n return () => {\n this.#watchers = this.#watchers.filter((w) => w !== watcher);\n };\n }\n /// Add a one-time watcher for changes in the slice.\n /// The watcher will be removed after it is called.\n /// Returns a function to remove the watcher.\n once(watcher) {\n const off = this.on((value) => {\n watcher(value);\n off();\n });\n return off;\n }\n /// Remove a watcher.\n off(watcher) {\n this.#watchers = this.#watchers.filter((w) => w !== watcher);\n }\n /// Remove all watchers.\n offAll() {\n this.#watchers = [];\n }\n}\nclass SliceType {\n /// Create a slice type with a default value and a name.\n /// The name should be unique in the container.\n constructor(value, name) {\n this.id = /* @__PURE__ */ Symbol(`Context-${name}`);\n this.name = name;\n this._defaultValue = value;\n this._typeInfo = () => {\n throw ctxCallOutOfScope();\n };\n }\n /// Create a slice with a container.\n /// You can also pass a value to override the default value.\n create(container, value = this._defaultValue) {\n return new Slice(container, value, this);\n }\n}\nconst createSlice = (value, name) => new SliceType(value, name);\nclass Inspector {\n /// Create an inspector with container, clock and metadata.\n constructor(container, clock, meta) {\n this.#injectedSlices = /* @__PURE__ */ new Set();\n this.#consumedSlices = /* @__PURE__ */ new Set();\n this.#recordedTimers = /* @__PURE__ */ new Map();\n this.#waitTimers = /* @__PURE__ */ new Map();\n this.read = () => {\n return {\n metadata: this.#meta,\n injectedSlices: [...this.#injectedSlices].map((slice) => ({\n name: typeof slice === \"string\" ? slice : slice.name,\n value: this.#getSlice(slice)\n })),\n consumedSlices: [...this.#consumedSlices].map((slice) => ({\n name: typeof slice === \"string\" ? slice : slice.name,\n value: this.#getSlice(slice)\n })),\n recordedTimers: [...this.#recordedTimers].map(\n ([timer, { duration }]) => ({\n name: timer.name,\n duration,\n status: this.#getTimer(timer)\n })\n ),\n waitTimers: [...this.#waitTimers].map(([timer, { duration }]) => ({\n name: timer.name,\n duration,\n status: this.#getTimer(timer)\n }))\n };\n };\n this.onRecord = (timerType) => {\n this.#recordedTimers.set(timerType, { start: Date.now(), duration: 0 });\n };\n this.onClear = (timerType) => {\n this.#recordedTimers.delete(timerType);\n };\n this.onDone = (timerType) => {\n const timer = this.#recordedTimers.get(timerType);\n if (!timer) return;\n timer.duration = Date.now() - timer.start;\n };\n this.onWait = (timerType, promise) => {\n const start = Date.now();\n promise.finally(() => {\n this.#waitTimers.set(timerType, { duration: Date.now() - start });\n }).catch(console.error);\n };\n this.onInject = (sliceType) => {\n this.#injectedSlices.add(sliceType);\n };\n this.onRemove = (sliceType) => {\n this.#injectedSlices.delete(sliceType);\n };\n this.onUse = (sliceType) => {\n this.#consumedSlices.add(sliceType);\n };\n this.#getSlice = (sliceType) => {\n return this.#container.get(sliceType).get();\n };\n this.#getTimer = (timerType) => {\n return this.#clock.get(timerType).status;\n };\n this.#container = container;\n this.#clock = clock;\n this.#meta = meta;\n }\n /// @internal\n #meta;\n /// @internal\n #container;\n /// @internal\n #clock;\n #injectedSlices;\n #consumedSlices;\n #recordedTimers;\n #waitTimers;\n #getSlice;\n #getTimer;\n}\nclass Ctx {\n /// Create a ctx object with container and clock.\n constructor(container, clock, meta) {\n this.produce = (meta2) => {\n if (meta2 && Object.keys(meta2).length)\n return new Ctx(this.#container, this.#clock, { ...meta2 });\n return this;\n };\n this.inject = (sliceType, value) => {\n const slice = sliceType.create(this.#container.sliceMap);\n if (value != null) slice.set(value);\n this.#inspector?.onInject(sliceType);\n return this;\n };\n this.remove = (sliceType) => {\n this.#container.remove(sliceType);\n this.#inspector?.onRemove(sliceType);\n return this;\n };\n this.record = (timerType) => {\n timerType.create(this.#clock.store);\n this.#inspector?.onRecord(timerType);\n return this;\n };\n this.clearTimer = (timerType) => {\n this.#clock.remove(timerType);\n this.#inspector?.onClear(timerType);\n return this;\n };\n this.isInjected = (sliceType) => this.#container.has(sliceType);\n this.isRecorded = (timerType) => this.#clock.has(timerType);\n this.use = (sliceType) => {\n this.#inspector?.onUse(sliceType);\n return this.#container.get(sliceType);\n };\n this.get = (sliceType) => this.use(sliceType).get();\n this.set = (sliceType, value) => this.use(sliceType).set(value);\n this.update = (sliceType, updater) => this.use(sliceType).update(updater);\n this.timer = (timer) => this.#clock.get(timer);\n this.done = (timer) => {\n this.timer(timer).done();\n this.#inspector?.onDone(timer);\n };\n this.wait = (timer) => {\n const promise = this.timer(timer).start();\n this.#inspector?.onWait(timer, promise);\n return promise;\n };\n this.waitTimers = async (slice) => {\n await Promise.all(this.get(slice).map((x) => this.wait(x)));\n };\n this.#container = container;\n this.#clock = clock;\n this.#meta = meta;\n if (meta) this.#inspector = new Inspector(container, clock, meta);\n }\n /// @internal\n #container;\n /// @internal\n #clock;\n /// @internal\n #meta;\n /// @internal\n #inspector;\n /// Get metadata of the ctx.\n get meta() {\n return this.#meta;\n }\n /// Get the inspector of the ctx.\n get inspector() {\n return this.#inspector;\n }\n}\nclass Clock {\n constructor() {\n this.store = /* @__PURE__ */ new Map();\n this.get = (timer) => {\n const meta = this.store.get(timer.id);\n if (!meta) throw timerNotFound(timer.name);\n return meta;\n };\n this.remove = (timer) => {\n this.store.delete(timer.id);\n };\n this.has = (timer) => {\n return this.store.has(timer.id);\n };\n }\n}\nclass Timer {\n /// @internal\n constructor(clock, type) {\n this.#promise = null;\n this.#listener = null;\n this.#status = \"pending\";\n this.start = () => {\n this.#promise ??= new Promise((resolve, reject) => {\n this.#listener = (e) => {\n if (!(e instanceof CustomEvent)) return;\n if (e.detail.id === this.#eventUniqId) {\n this.#status = \"resolved\";\n this.#removeListener();\n e.stopImmediatePropagation();\n resolve();\n }\n };\n this.#waitTimeout(() => {\n if (this.#status === \"pending\") this.#status = \"rejected\";\n this.#removeListener();\n reject(new Error(`Timing ${this.type.name} timeout.`));\n });\n this.#status = \"pending\";\n addEventListener(this.type.name, this.#listener);\n });\n return this.#promise;\n };\n this.done = () => {\n const event = new CustomEvent(this.type.name, {\n detail: { id: this.#eventUniqId }\n });\n dispatchEvent(event);\n };\n this.#removeListener = () => {\n if (this.#listener) removeEventListener(this.type.name, this.#listener);\n };\n this.#waitTimeout = (ifTimeout) => {\n setTimeout(() => {\n ifTimeout();\n }, this.type.timeout);\n };\n this.#eventUniqId = Symbol(type.name);\n this.type = type;\n clock.set(type.id, this);\n }\n #promise;\n #listener;\n /// @internal\n #eventUniqId;\n #status;\n /// The status of the timer.\n /// Can be `pending`, `resolved` or `rejected`.\n get status() {\n return this.#status;\n }\n #removeListener;\n #waitTimeout;\n}\nclass TimerType {\n /// Create a timer type with a name and a timeout.\n /// The name should be unique in the clock.\n constructor(name, timeout = 3e3) {\n this.create = (clock) => {\n return new Timer(clock, this);\n };\n this.id = /* @__PURE__ */ Symbol(`Timer-${name}`);\n this.name = name;\n this.timeout = timeout;\n }\n}\nconst createTimer = (name, timeout = 3e3) => new TimerType(name, timeout);\nexport {\n Clock,\n Container,\n Ctx,\n Inspector,\n Slice,\n SliceType,\n Timer,\n TimerType,\n createSlice,\n createTimer\n};\n//# sourceMappingURL=index.js.map\n","// ::- Persistent data structure representing an ordered mapping from\n// strings to values, with some convenient update methods.\nfunction OrderedMap(content) {\n this.content = content;\n}\n\nOrderedMap.prototype = {\n constructor: OrderedMap,\n\n find: function(key) {\n for (var i = 0; i < this.content.length; i += 2)\n if (this.content[i] === key) return i\n return -1\n },\n\n // :: (string) → ?any\n // Retrieve the value stored under `key`, or return undefined when\n // no such key exists.\n get: function(key) {\n var found = this.find(key);\n return found == -1 ? undefined : this.content[found + 1]\n },\n\n // :: (string, any, ?string) → OrderedMap\n // Create a new map by replacing the value of `key` with a new\n // value, or adding a binding to the end of the map. If `newKey` is\n // given, the key of the binding will be replaced with that key.\n update: function(key, value, newKey) {\n var self = newKey && newKey != key ? this.remove(newKey) : this;\n var found = self.find(key), content = self.content.slice();\n if (found == -1) {\n content.push(newKey || key, value);\n } else {\n content[found + 1] = value;\n if (newKey) content[found] = newKey;\n }\n return new OrderedMap(content)\n },\n\n // :: (string) → OrderedMap\n // Return a map with the given key removed, if it existed.\n remove: function(key) {\n var found = this.find(key);\n if (found == -1) return this\n var content = this.content.slice();\n content.splice(found, 2);\n return new OrderedMap(content)\n },\n\n // :: (string, any) → OrderedMap\n // Add a new key to the start of the map.\n addToStart: function(key, value) {\n return new OrderedMap([key, value].concat(this.remove(key).content))\n },\n\n // :: (string, any) → OrderedMap\n // Add a new key to the end of the map.\n addToEnd: function(key, value) {\n var content = this.remove(key).content.slice();\n content.push(key, value);\n return new OrderedMap(content)\n },\n\n // :: (string, string, any) → OrderedMap\n // Add a key after the given key. If `place` is not found, the new\n // key is added to the end.\n addBefore: function(place, key, value) {\n var without = this.remove(key), content = without.content.slice();\n var found = without.find(place);\n content.splice(found == -1 ? content.length : found, 0, key, value);\n return new OrderedMap(content)\n },\n\n // :: ((key: string, value: any))\n // Call the given function for each key/value pair in the map, in\n // order.\n forEach: function(f) {\n for (var i = 0; i < this.content.length; i += 2)\n f(this.content[i], this.content[i + 1]);\n },\n\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a new map by prepending the keys in this map that don't\n // appear in `map` before the keys in `map`.\n prepend: function(map) {\n map = OrderedMap.from(map);\n if (!map.size) return this\n return new OrderedMap(map.content.concat(this.subtract(map).content))\n },\n\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a new map by appending the keys in this map that don't\n // appear in `map` after the keys in `map`.\n append: function(map) {\n map = OrderedMap.from(map);\n if (!map.size) return this\n return new OrderedMap(this.subtract(map).content.concat(map.content))\n },\n\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a map containing all the keys in this map that don't\n // appear in `map`.\n subtract: function(map) {\n var result = this;\n map = OrderedMap.from(map);\n for (var i = 0; i < map.content.length; i += 2)\n result = result.remove(map.content[i]);\n return result\n },\n\n // :: () → Object\n // Turn ordered map into a plain object.\n toObject: function() {\n var result = {};\n this.forEach(function(key, value) { result[key] = value; });\n return result\n },\n\n // :: number\n // The amount of keys in this map.\n get size() {\n return this.content.length >> 1\n }\n};\n\n// :: (?union<Object, OrderedMap>) → OrderedMap\n// Return a map with the given content. If null, create an empty\n// map. If given an ordered map, return that map itself. If given an\n// object, create a map from the object's properties.\nOrderedMap.from = function(value) {\n if (value instanceof OrderedMap) return value\n var content = [];\n if (value) for (var prop in value) content.push(prop, value[prop]);\n return new OrderedMap(content)\n};\n\nexport default OrderedMap;\n","import OrderedMap from 'orderedmap';\n\nfunction findDiffStart(a, b, pos) {\n for (let i = 0;; i++) {\n if (i == a.childCount || i == b.childCount)\n return a.childCount == b.childCount ? null : pos;\n let childA = a.child(i), childB = b.child(i);\n if (childA == childB) {\n pos += childA.nodeSize;\n continue;\n }\n if (!childA.sameMarkup(childB))\n return pos;\n if (childA.isText && childA.text != childB.text) {\n for (let j = 0; childA.text[j] == childB.text[j]; j++)\n pos++;\n return pos;\n }\n if (childA.content.size || childB.content.size) {\n let inner = findDiffStart(childA.content, childB.content, pos + 1);\n if (inner != null)\n return inner;\n }\n pos += childA.nodeSize;\n }\n}\nfunction findDiffEnd(a, b, posA, posB) {\n for (let iA = a.childCount, iB = b.childCount;;) {\n if (iA == 0 || iB == 0)\n return iA == iB ? null : { a: posA, b: posB };\n let childA = a.child(--iA), childB = b.child(--iB), size = childA.nodeSize;\n if (childA == childB) {\n posA -= size;\n posB -= size;\n continue;\n }\n if (!childA.sameMarkup(childB))\n return { a: posA, b: posB };\n if (childA.isText && childA.text != childB.text) {\n let same = 0, minSize = Math.min(childA.text.length, childB.text.length);\n while (same < minSize && childA.text[childA.text.length - same - 1] == childB.text[childB.text.length - same - 1]) {\n same++;\n posA--;\n posB--;\n }\n return { a: posA, b: posB };\n }\n if (childA.content.size || childB.content.size) {\n let inner = findDiffEnd(childA.content, childB.content, posA - 1, posB - 1);\n if (inner)\n return inner;\n }\n posA -= size;\n posB -= size;\n }\n}\n\n/**\nA fragment represents a node's collection of child nodes.\n\nLike nodes, fragments are persistent data structures, and you\nshould not mutate them or their content. Rather, you create new\ninstances whenever needed. The API tries to make this easy.\n*/\nclass Fragment {\n /**\n @internal\n */\n constructor(\n /**\n The child nodes in this fragment.\n */\n content, size) {\n this.content = content;\n this.size = size || 0;\n if (size == null)\n for (let i = 0; i < content.length; i++)\n this.size += content[i].nodeSize;\n }\n /**\n Invoke a callback for all descendant nodes between the given two\n positions (relative to start of this fragment). Doesn't descend\n into a node when the callback returns `false`.\n */\n nodesBetween(from, to, f, nodeStart = 0, parent) {\n for (let i = 0, pos = 0; pos < to; i++) {\n let child = this.content[i], end = pos + child.nodeSize;\n if (end > from && f(child, nodeStart + pos, parent || null, i) !== false && child.content.size) {\n let start = pos + 1;\n child.nodesBetween(Math.max(0, from - start), Math.min(child.content.size, to - start), f, nodeStart + start);\n }\n pos = end;\n }\n }\n /**\n Call the given callback for every descendant node. `pos` will be\n relative to the start of the fragment. The callback may return\n `false` to prevent traversal of a given node's children.\n */\n descendants(f) {\n this.nodesBetween(0, this.size, f);\n }\n /**\n Extract the text between `from` and `to`. See the same method on\n [`Node`](https://prosemirror.net/docs/ref/#model.Node.textBetween).\n */\n textBetween(from, to, blockSeparator, leafText) {\n let text = \"\", first = true;\n this.nodesBetween(from, to, (node, pos) => {\n let nodeText = node.isText ? node.text.slice(Math.max(from, pos) - pos, to - pos)\n : !node.isLeaf ? \"\"\n : leafText ? (typeof leafText === \"function\" ? leafText(node) : leafText)\n : node.type.spec.leafText ? node.type.spec.leafText(node)\n : \"\";\n if (node.isBlock && (node.isLeaf && nodeText || node.isTextblock) && blockSeparator) {\n if (first)\n first = false;\n else\n text += blockSeparator;\n }\n text += nodeText;\n }, 0);\n return text;\n }\n /**\n Create a new fragment containing the combined content of this\n fragment and the other.\n */\n append(other) {\n if (!other.size)\n return this;\n if (!this.size)\n return other;\n let last = this.lastChild, first = other.firstChild, content = this.content.slice(), i = 0;\n if (last.isText && last.sameMarkup(first)) {\n content[content.length - 1] = last.withText(last.text + first.text);\n i = 1;\n }\n for (; i < other.content.length; i++)\n content.push(other.content[i]);\n return new Fragment(content, this.size + other.size);\n }\n /**\n Cut out the sub-fragment between the two given positions.\n */\n cut(from, to = this.size) {\n if (from == 0 && to == this.size)\n return this;\n let result = [], size = 0;\n if (to > from)\n for (let i = 0, pos = 0; pos < to; i++) {\n let child = this.content[i], end = pos + child.nodeSize;\n if (end > from) {\n if (pos < from || end > to) {\n if (child.isText)\n child = child.cut(Math.max(0, from - pos), Math.min(child.text.length, to - pos));\n else\n child = child.cut(Math.max(0, from - pos - 1), Math.min(child.content.size, to - pos - 1));\n }\n result.push(child);\n size += child.nodeSize;\n }\n pos = end;\n }\n return new Fragment(result, size);\n }\n /**\n @internal\n */\n cutByIndex(from, to) {\n if (from == to)\n return Fragment.empty;\n if (from == 0 && to == this.content.length)\n return this;\n return new Fragment(this.content.slice(from, to));\n }\n /**\n Create a new fragment in which the node at the given index is\n replaced by the given node.\n */\n replaceChild(index, node) {\n let current = this.content[index];\n if (current == node)\n return this;\n let copy = this.content.slice();\n let size = this.size + node.nodeSize - current.nodeSize;\n copy[index] = node;\n return new Fragment(copy, size);\n }\n /**\n Create a new fragment by prepending the given node to this\n fragment.\n */\n addToStart(node) {\n return new Fragment([node].concat(this.content), this.size + node.nodeSize);\n }\n /**\n Create a new fragment by appending the given node to this\n fragment.\n */\n addToEnd(node) {\n return new Fragment(this.content.concat(node), this.size + node.nodeSize);\n }\n /**\n Compare this fragment to another one.\n */\n eq(other) {\n if (this.content.length != other.content.length)\n return false;\n for (let i = 0; i < this.content.length; i++)\n if (!this.content[i].eq(other.content[i]))\n return false;\n return true;\n }\n /**\n The first child of the fragment, or `null` if it is empty.\n */\n get firstChild() { return this.content.length ? this.content[0] : null; }\n /**\n The last child of the fragment, or `null` if it is empty.\n */\n get lastChild() { return this.content.length ? this.content[this.content.length - 1] : null; }\n /**\n The number of child nodes in this fragment.\n */\n get childCount() { return this.content.length; }\n /**\n Get the child node at the given index. Raise an error when the\n index is out of range.\n */\n child(index) {\n let found = this.content[index];\n if (!found)\n throw new RangeError(\"Index \" + index + \" out of range for \" + this);\n return found;\n }\n /**\n Get the child node at the given index, if it exists.\n */\n maybeChild(index) {\n return this.content[index] || null;\n }\n /**\n Call `f` for every child node, passing the node, its offset\n into this parent node, and its index.\n */\n forEach(f) {\n for (let i = 0, p = 0; i < this.content.length; i++) {\n let child = this.content[i];\n f(child, p, i);\n p += child.nodeSize;\n }\n }\n /**\n Find the first position at which this fragment and another\n fragment differ, or `null` if they are the same.\n */\n findDiffStart(other, pos = 0) {\n return findDiffStart(this, other, pos);\n }\n /**\n Find the first position, searching from the end, at which this\n fragment and the given fragment differ, or `null` if they are\n the same. Since this position will not be the same in both\n nodes, an object with two separate positions is returned.\n */\n findDiffEnd(other, pos = this.size, otherPos = other.size) {\n return findDiffEnd(this, other, pos, otherPos);\n }\n /**\n Find the index and inner offset corresponding to a given relative\n position in this fragment. The result object will be reused\n (overwritten) the next time the function is called. @internal\n */\n findIndex(pos) {\n if (pos == 0)\n return retIndex(0, pos);\n if (pos == this.size)\n return retIndex(this.content.length, pos);\n if (pos > this.size || pos < 0)\n throw new RangeError(`Position ${pos} outside of fragment (${this})`);\n for (let i = 0, curPos = 0;; i++) {\n let cur = this.child(i), end = curPos + cur.nodeSize;\n if (end >= pos) {\n if (end == pos)\n return retIndex(i + 1, end);\n return retIndex(i, curPos);\n }\n curPos = end;\n }\n }\n /**\n Return a debugging string that describes this fragment.\n */\n toString() { return \"<\" + this.toStringInner() + \">\"; }\n /**\n @internal\n */\n toStringInner() { return this.content.join(\", \"); }\n /**\n Create a JSON-serializeable representation of this fragment.\n */\n toJSON() {\n return this.content.length ? this.content.map(n => n.toJSON()) : null;\n }\n /**\n Deserialize a fragment from its JSON representation.\n */\n static fromJSON(schema, value) {\n if (!value)\n return Fragment.empty;\n if (!Array.isArray(value))\n throw new RangeError(\"Invalid input for Fragment.fromJSON\");\n return new Fragment(value.map(schema.nodeFromJSON));\n }\n /**\n Build a fragment from an array of nodes. Ensures that adjacent\n text nodes with the same marks are joined together.\n */\n static fromArray(array) {\n if (!array.length)\n return Fragment.empty;\n let joined, size = 0;\n for (let i = 0; i < array.length; i++) {\n let node = array[i];\n size += node.nodeSize;\n if (i && node.isText && array[i - 1].sameMarkup(node)) {\n if (!joined)\n joined = array.slice(0, i);\n joined[joined.length - 1] = node\n .withText(joined[joined.length - 1].text + node.text);\n }\n else if (joined) {\n joined.push(node);\n }\n }\n return new Fragment(joined || array, size);\n }\n /**\n Create a fragment from something that can be interpreted as a\n set of nodes. For `null`, it returns the empty fragment. For a\n fragment, the fragment itself. For a node or array of nodes, a\n fragment containing those nodes.\n */\n static from(nodes) {\n if (!nodes)\n return Fragment.empty;\n if (nodes instanceof Fragment)\n return nodes;\n if (Array.isArray(nodes))\n return this.fromArray(nodes);\n if (nodes.attrs)\n return new Fragment([nodes], nodes.nodeSize);\n throw new RangeError(\"Can not convert \" + nodes + \" to a Fragment\" +\n (nodes.nodesBetween ? \" (looks like multiple versions of prosemirror-model were loaded)\" : \"\"));\n }\n}\n/**\nAn empty fragment. Intended to be reused whenever a node doesn't\ncontain anything (rather than allocating a new empty fragment for\neach leaf node).\n*/\nFragment.empty = new Fragment([], 0);\nconst found = { index: 0, offset: 0 };\nfunction retIndex(index, offset) {\n found.index = index;\n found.offset = offset;\n return found;\n}\n\nfunction compareDeep(a, b) {\n if (a === b)\n return true;\n if (!(a && typeof a == \"object\") ||\n !(b && typeof b == \"object\"))\n return false;\n let array = Array.isArray(a);\n if (Array.isArray(b) != array)\n return false;\n if (array) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!compareDeep(a[i], b[i]))\n return false;\n }\n else {\n for (let p in a)\n if (!(p in b) || !compareDeep(a[p], b[p]))\n return false;\n for (let p in b)\n if (!(p in a))\n return false;\n }\n return true;\n}\n\n/**\nA mark is a piece of information that can be attached to a node,\nsuch as it being emphasized, in code font, or a link. It has a\ntype and optionally a set of attributes that provide further\ninformation (such as the target of the link). Marks are created\nthrough a `Schema`, which controls which types exist and which\nattributes they have.\n*/\nclass Mark {\n /**\n @internal\n */\n constructor(\n /**\n The type of this mark.\n */\n type, \n /**\n The attributes associated with this mark.\n */\n attrs) {\n this.type = type;\n this.attrs = attrs;\n }\n /**\n Given a set of marks, create a new set which contains this one as\n well, in the right position. If this mark is already in the set,\n the set itself is returned. If any marks that are set to be\n [exclusive](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) with this mark are present,\n those are replaced by this one.\n */\n addToSet(set) {\n let copy, placed = false;\n for (let i = 0; i < set.length; i++) {\n let other = set[i];\n if (this.eq(other))\n return set;\n if (this.type.excludes(other.type)) {\n if (!copy)\n copy = set.slice(0, i);\n }\n else if (other.type.excludes(this.type)) {\n return set;\n }\n else {\n if (!placed && other.type.rank > this.type.rank) {\n if (!copy)\n copy = set.slice(0, i);\n copy.push(this);\n placed = true;\n }\n if (copy)\n copy.push(other);\n }\n }\n if (!copy)\n copy = set.slice();\n if (!placed)\n copy.push(this);\n return copy;\n }\n /**\n Remove this mark from the given set, returning a new set. If this\n mark is not in the set, the set itself is returned.\n */\n removeFromSet(set) {\n for (let i = 0; i < set.length; i++)\n if (this.eq(set[i]))\n return set.slice(0, i).concat(set.slice(i + 1));\n return set;\n }\n /**\n Test whether this mark is in the given set of marks.\n */\n isInSet(set) {\n for (let i = 0; i < set.length; i++)\n if (this.eq(set[i]))\n return true;\n return false;\n }\n /**\n Test whether this mark has the same type and attributes as\n another mark.\n */\n eq(other) {\n return this == other ||\n (this.type == other.type && compareDeep(this.attrs, other.attrs));\n }\n /**\n Convert this mark to a JSON-serializeable representation.\n */\n toJSON() {\n let obj = { type: this.type.name };\n for (let _ in this.attrs) {\n obj.attrs = this.attrs;\n break;\n }\n return obj;\n }\n /**\n Deserialize a mark from JSON.\n */\n static fromJSON(schema, json) {\n if (!json)\n throw new RangeError(\"Invalid input for Mark.fromJSON\");\n let type = schema.marks[json.type];\n if (!type)\n throw new RangeError(`There is no mark type ${json.type} in this schema`);\n let mark = type.create(json.attrs);\n type.checkAttrs(mark.attrs);\n return mark;\n }\n /**\n Test whether two sets of marks are identical.\n */\n static sameSet(a, b) {\n if (a == b)\n return true;\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!a[i].eq(b[i]))\n return false;\n return true;\n }\n /**\n Create a properly sorted mark set from null, a single mark, or an\n unsorted array of marks.\n */\n static setFrom(marks) {\n if (!marks || Array.isArray(marks) && marks.length == 0)\n return Mark.none;\n if (marks instanceof Mark)\n return [marks];\n let copy = marks.slice();\n copy.sort((a, b) => a.type.rank - b.type.rank);\n return copy;\n }\n}\n/**\nThe empty set of marks.\n*/\nMark.none = [];\n\n/**\nError type raised by [`Node.replace`](https://prosemirror.net/docs/ref/#model.Node.replace) when\ngiven an invalid replacement.\n*/\nclass ReplaceError extends Error {\n}\n/*\nReplaceError = function(this: any, message: string) {\n let err = Error.call(this, message)\n ;(err as any).__proto__ = ReplaceError.prototype\n return err\n} as any\n\nReplaceError.prototype = Object.create(Error.prototype)\nReplaceError.prototype.constructor = ReplaceError\nReplaceError.prototype.name = \"ReplaceError\"\n*/\n/**\nA slice represents a piece cut out of a larger document. It\nstores not only a fragment, but also the depth up to which nodes on\nboth side are ‘open’ (cut through).\n*/\nclass Slice {\n /**\n Create a slice. When specifying a non-zero open depth, you must\n make sure that there are nodes of at least that depth at the\n appropriate side of the fragment—i.e. if the fragment is an\n empty paragraph node, `openStart` and `openEnd` can't be greater\n than 1.\n \n It is not necessary for the content of open nodes to conform to\n the schema's content constraints, though it should be a valid\n start/end/middle for such a node, depending on which sides are\n open.\n */\n constructor(\n /**\n The slice's content.\n */\n content, \n /**\n The open depth at the start of the fragment.\n */\n openStart, \n /**\n The open depth at the end.\n */\n openEnd) {\n this.content = content;\n this.openStart = openStart;\n this.openEnd = openEnd;\n }\n /**\n The size this slice would add when inserted into a document.\n */\n get size() {\n return this.content.size - this.openStart - this.openEnd;\n }\n /**\n @internal\n */\n insertAt(pos, fragment) {\n let content = insertInto(this.content, pos + this.openStart, fragment);\n return content && new Slice(content, this.openStart, this.openEnd);\n }\n /**\n @internal\n */\n removeBetween(from, to) {\n return new Slice(removeRange(this.content, from + this.openStart, to + this.openStart), this.openStart, this.openEnd);\n }\n /**\n Tests whether this slice is equal to another slice.\n */\n eq(other) {\n return this.content.eq(other.content) && this.openStart == other.openStart && this.openEnd == other.openEnd;\n }\n /**\n @internal\n */\n toString() {\n return this.content + \"(\" + this.openStart + \",\" + this.openEnd + \")\";\n }\n /**\n Convert a slice to a JSON-serializable representation.\n */\n toJSON() {\n if (!this.content.size)\n return null;\n let json = { content: this.content.toJSON() };\n if (this.openStart > 0)\n json.openStart = this.openStart;\n if (this.openEnd > 0)\n json.openEnd = this.openEnd;\n return json;\n }\n /**\n Deserialize a slice from its JSON representation.\n */\n static fromJSON(schema, json) {\n if (!json)\n return Slice.empty;\n let openStart = json.openStart || 0, openEnd = json.openEnd || 0;\n if (typeof openStart != \"number\" || typeof openEnd != \"number\")\n throw new RangeError(\"Invalid input for Slice.fromJSON\");\n return new Slice(Fragment.fromJSON(schema, json.content), openStart, openEnd);\n }\n /**\n Create a slice from a fragment by taking the maximum possible\n open value on both side of the fragment.\n */\n static maxOpen(fragment, openIsolating = true) {\n let openStart = 0, openEnd = 0;\n for (let n = fragment.firstChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.firstChild)\n openStart++;\n for (let n = fragment.lastChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.lastChild)\n openEnd++;\n return new Slice(fragment, openStart, openEnd);\n }\n}\n/**\nThe empty slice.\n*/\nSlice.empty = new Slice(Fragment.empty, 0, 0);\nfunction removeRange(content, from, to) {\n let { index, offset } = content.findIndex(from), child = content.maybeChild(index);\n let { index: indexTo, offset: offsetTo } = content.findIndex(to);\n if (offset == from || child.isText) {\n if (offsetTo != to && !content.child(indexTo).isText)\n throw new RangeError(\"Removing non-flat range\");\n return content.cut(0, from).append(content.cut(to));\n }\n if (index != indexTo)\n throw new RangeError(\"Removing non-flat range\");\n return content.replaceChild(index, child.copy(removeRange(child.content, from - offset - 1, to - offset - 1)));\n}\nfunction insertInto(content, dist, insert, parent) {\n let { index, offset } = content.findIndex(dist), child = content.maybeChild(index);\n if (offset == dist || child.isText) {\n if (parent && !parent.canReplace(index, index, insert))\n return null;\n return content.cut(0, dist).append(insert).append(content.cut(dist));\n }\n let inner = insertInto(child.content, dist - offset - 1, insert, child);\n return inner && content.replaceChild(index, child.copy(inner));\n}\nfunction replace($from, $to, slice) {\n if (slice.openStart > $from.depth)\n throw new ReplaceError(\"Inserted content deeper than insertion position\");\n if ($from.depth - slice.openStart != $to.depth - slice.openEnd)\n throw new ReplaceError(\"Inconsistent open depths\");\n return replaceOuter($from, $to, slice, 0);\n}\nfunction replaceOuter($from, $to, slice, depth) {\n let index = $from.index(depth), node = $from.node(depth);\n if (index == $to.index(depth) && depth < $from.depth - slice.openStart) {\n let inner = replaceOuter($from, $to, slice, depth + 1);\n return node.copy(node.content.replaceChild(index, inner));\n }\n else if (!slice.content.size) {\n return close(node, replaceTwoWay($from, $to, depth));\n }\n else if (!slice.openStart && !slice.openEnd && $from.depth == depth && $to.depth == depth) { // Simple, flat case\n let parent = $from.parent, content = parent.content;\n return close(parent, content.cut(0, $from.parentOffset).append(slice.content).append(content.cut($to.parentOffset)));\n }\n else {\n let { start, end } = prepareSliceForReplace(slice, $from);\n return close(node, replaceThreeWay($from, start, end, $to, depth));\n }\n}\nfunction checkJoin(main, sub) {\n if (!sub.type.compatibleContent(main.type))\n throw new ReplaceError(\"Cannot join \" + sub.type.name + \" onto \" + main.type.name);\n}\nfunction joinable($before, $after, depth) {\n let node = $before.node(depth);\n checkJoin(node, $after.node(depth));\n return node;\n}\nfunction addNode(child, target) {\n let last = target.length - 1;\n if (last >= 0 && child.isText && child.sameMarkup(target[last]))\n target[last] = child.withText(target[last].text + child.text);\n else\n target.push(child);\n}\nfunction addRange($start, $end, depth, target) {\n let node = ($end || $start).node(depth);\n let startIndex = 0, endIndex = $end ? $end.index(depth) : node.childCount;\n if ($start) {\n startIndex = $start.index(depth);\n if ($start.depth > depth) {\n startIndex++;\n }\n else if ($start.textOffset) {\n addNode($start.nodeAfter, target);\n startIndex++;\n }\n }\n for (let i = startIndex; i < endIndex; i++)\n addNode(node.child(i), target);\n if ($end && $end.depth == depth && $end.textOffset)\n addNode($end.nodeBefore, target);\n}\nfunction close(node, content) {\n node.type.checkContent(content);\n return node.copy(content);\n}\nfunction replaceThreeWay($from, $start, $end, $to, depth) {\n let openStart = $from.depth > depth && joinable($from, $start, depth + 1);\n let openEnd = $to.depth > depth && joinable($end, $to, depth + 1);\n let content = [];\n addRange(null, $from, depth, content);\n if (openStart && openEnd && $start.index(depth) == $end.index(depth)) {\n checkJoin(openStart, openEnd);\n addNode(close(openStart, replaceThreeWay($from, $start, $end, $to, depth + 1)), content);\n }\n else {\n if (openStart)\n addNode(close(openStart, replaceTwoWay($from, $start, depth + 1)), content);\n addRange($start, $end, depth, content);\n if (openEnd)\n addNode(close(openEnd, replaceTwoWay($end, $to, depth + 1)), content);\n }\n addRange($to, null, depth, content);\n return new Fragment(content);\n}\nfunction replaceTwoWay($from, $to, depth) {\n let content = [];\n addRange(null, $from, depth, content);\n if ($from.depth > depth) {\n let type = joinable($from, $to, depth + 1);\n addNode(close(type, replaceTwoWay($from, $to, depth + 1)), content);\n }\n addRange($to, null, depth, content);\n return new Fragment(content);\n}\nfunction prepareSliceForReplace(slice, $along) {\n let extra = $along.depth - slice.openStart, parent = $along.node(extra);\n let node = parent.copy(slice.content);\n for (let i = extra - 1; i >= 0; i--)\n node = $along.node(i).copy(Fragment.from(node));\n return { start: node.resolveNoCache(slice.openStart + extra),\n end: node.resolveNoCache(node.content.size - slice.openEnd - extra) };\n}\n\n/**\nYou can [_resolve_](https://prosemirror.net/docs/ref/#model.Node.resolve) a position to get more\ninformation about it. Objects of this class represent such a\nresolved position, providing various pieces of context\ninformation, and some helper methods.\n\nThroughout this interface, methods that take an optional `depth`\nparameter will interpret undefined as `this.depth` and negative\nnumbers as `this.depth + value`.\n*/\nclass ResolvedPos {\n /**\n @internal\n */\n constructor(\n /**\n The position that was resolved.\n */\n pos, \n /**\n @internal\n */\n path, \n /**\n The offset this position has into its parent node.\n */\n parentOffset) {\n this.pos = pos;\n this.path = path;\n this.parentOffset = parentOffset;\n this.depth = path.length / 3 - 1;\n }\n /**\n @internal\n */\n resolveDepth(val) {\n if (val == null)\n return this.depth;\n if (val < 0)\n return this.depth + val;\n return val;\n }\n /**\n The parent node that the position points into. Note that even if\n a position points into a text node, that node is not considered\n the parent—text nodes are ‘flat’ in this model, and have no content.\n */\n get parent() { return this.node(this.depth); }\n /**\n The root node in which the position was resolved.\n */\n get doc() { return this.node(0); }\n /**\n The ancestor node at the given level. `p.node(p.depth)` is the\n same as `p.parent`.\n */\n node(depth) { return this.path[this.resolveDepth(depth) * 3]; }\n /**\n The index into the ancestor at the given level. If this points\n at the 3rd node in the 2nd paragraph on the top level, for\n example, `p.index(0)` is 1 and `p.index(1)` is 2.\n */\n index(depth) { return this.path[this.resolveDepth(depth) * 3 + 1]; }\n /**\n The index pointing after this position into the ancestor at the\n given level.\n */\n indexAfter(depth) {\n depth = this.resolveDepth(depth);\n return this.index(depth) + (depth == this.depth && !this.textOffset ? 0 : 1);\n }\n /**\n The (absolute) position at the start of the node at the given\n level.\n */\n start(depth) {\n depth = this.resolveDepth(depth);\n return depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;\n }\n /**\n The (absolute) position at the end of the node at the given\n level.\n */\n end(depth) {\n depth = this.resolveDepth(depth);\n return this.start(depth) + this.node(depth).content.size;\n }\n /**\n The (absolute) position directly before the wrapping node at the\n given level, or, when `depth` is `this.depth + 1`, the original\n position.\n */\n before(depth) {\n depth = this.resolveDepth(depth);\n if (!depth)\n throw new RangeError(\"There is no position before the top-level node\");\n return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1];\n }\n /**\n The (absolute) position directly after the wrapping node at the\n given level, or the original position when `depth` is `this.depth + 1`.\n */\n after(depth) {\n depth = this.resolveDepth(depth);\n if (!depth)\n throw new RangeError(\"There is no position after the top-level node\");\n return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1] + this.path[depth * 3].nodeSize;\n }\n /**\n When this position points into a text node, this returns the\n distance between the position and the start of the text node.\n Will be zero for positions that point between nodes.\n */\n get textOffset() { return this.pos - this.path[this.path.length - 1]; }\n /**\n Get the node directly after the position, if any. If the position\n points into a text node, only the part of that node after the\n position is returned.\n */\n get nodeAfter() {\n let parent = this.parent, index = this.index(this.depth);\n if (index == parent.childCount)\n return null;\n let dOff = this.pos - this.path[this.path.length - 1], child = parent.child(index);\n return dOff ? parent.child(index).cut(dOff) : child;\n }\n /**\n Get the node directly before the position, if any. If the\n position points into a text node, only the part of that node\n before the position is returned.\n */\n get nodeBefore() {\n let index = this.index(this.depth);\n let dOff = this.pos - this.path[this.path.length - 1];\n if (dOff)\n return this.parent.child(index).cut(0, dOff);\n return index == 0 ? null : this.parent.child(index - 1);\n }\n /**\n Get the position at the given index in the parent node at the\n given depth (which defaults to `this.depth`).\n */\n posAtIndex(index, depth) {\n depth = this.resolveDepth(depth);\n let node = this.path[depth * 3], pos = depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;\n for (let i = 0; i < index; i++)\n pos += node.child(i).nodeSize;\n return pos;\n }\n /**\n Get the marks at this position, factoring in the surrounding\n marks' [`inclusive`](https://prosemirror.net/docs/ref/#model.MarkSpec.inclusive) property. If the\n position is at the start of a non-empty node, the marks of the\n node after it (if any) are returned.\n */\n marks() {\n let parent = this.parent, index = this.index();\n // In an empty parent, return the empty array\n if (parent.content.size == 0)\n return Mark.none;\n // When inside a text node, just return the text node's marks\n if (this.textOffset)\n return parent.child(index).marks;\n let main = parent.maybeChild(index - 1), other = parent.maybeChild(index);\n // If the `after` flag is true of there is no node before, make\n // the node after this position the main reference.\n if (!main) {\n let tmp = main;\n main = other;\n other = tmp;\n }\n // Use all marks in the main node, except those that have\n // `inclusive` set to false and are not present in the other node.\n let marks = main.marks;\n for (var i = 0; i < marks.length; i++)\n if (marks[i].type.spec.inclusive === false && (!other || !marks[i].isInSet(other.marks)))\n marks = marks[i--].removeFromSet(marks);\n return marks;\n }\n /**\n Get the marks after the current position, if any, except those\n that are non-inclusive and not present at position `$end`. This\n is mostly useful for getting the set of marks to preserve after a\n deletion. Will return `null` if this position is at the end of\n its parent node or its parent node isn't a textblock (in which\n case no marks should be preserved).\n */\n marksAcross($end) {\n let after = this.parent.maybeChild(this.index());\n if (!after || !after.isInline)\n return null;\n let marks = after.marks, next = $end.parent.maybeChild($end.index());\n for (var i = 0; i < marks.length; i++)\n if (marks[i].type.spec.inclusive === false && (!next || !marks[i].isInSet(next.marks)))\n marks = marks[i--].removeFromSet(marks);\n return marks;\n }\n /**\n The depth up to which this position and the given (non-resolved)\n position share the same parent nodes.\n */\n sharedDepth(pos) {\n for (let depth = this.depth; depth > 0; depth--)\n if (this.start(depth) <= pos && this.end(depth) >= pos)\n return depth;\n return 0;\n }\n /**\n Returns a range based on the place where this position and the\n given position diverge around block content. If both point into\n the same textblock, for example, a range around that textblock\n will be returned. If they point into different blocks, the range\n around those blocks in their shared ancestor is returned. You can\n pass in an optional predicate that will be called with a parent\n node to see if a range into that parent is acceptable.\n */\n blockRange(other = this, pred) {\n if (other.pos < this.pos)\n return other.blockRange(this);\n for (let d = this.depth - (this.parent.inlineContent || this.pos == other.pos ? 1 : 0); d >= 0; d--)\n if (other.pos <= this.end(d) && (!pred || pred(this.node(d))))\n return new NodeRange(this, other, d);\n return null;\n }\n /**\n Query whether the given position shares the same parent node.\n */\n sameParent(other) {\n return this.pos - this.parentOffset == other.pos - other.parentOffset;\n }\n /**\n Return the greater of this and the given position.\n */\n max(other) {\n return other.pos > this.pos ? other : this;\n }\n /**\n Return the smaller of this and the given position.\n */\n min(other) {\n return other.pos < this.pos ? other : this;\n }\n /**\n @internal\n */\n toString() {\n let str = \"\";\n for (let i = 1; i <= this.depth; i++)\n str += (str ? \"/\" : \"\") + this.node(i).type.name + \"_\" + this.index(i - 1);\n return str + \":\" + this.parentOffset;\n }\n /**\n @internal\n */\n static resolve(doc, pos) {\n if (!(pos >= 0 && pos <= doc.content.size))\n throw new RangeError(\"Position \" + pos + \" out of range\");\n let path = [];\n let start = 0, parentOffset = pos;\n for (let node = doc;;) {\n let { index, offset } = node.content.findIndex(parentOffset);\n let rem = parentOffset - offset;\n path.push(node, index, start + offset);\n if (!rem)\n break;\n node = node.child(index);\n if (node.isText)\n break;\n parentOffset = rem - 1;\n start += offset + 1;\n }\n return new ResolvedPos(pos, path, parentOffset);\n }\n /**\n @internal\n */\n static resolveCached(doc, pos) {\n let cache = resolveCache.get(doc);\n if (cache) {\n for (let i = 0; i < cache.elts.length; i++) {\n let elt = cache.elts[i];\n if (elt.pos == pos)\n return elt;\n }\n }\n else {\n resolveCache.set(doc, cache = new ResolveCache);\n }\n let result = cache.elts[cache.i] = ResolvedPos.resolve(doc, pos);\n cache.i = (cache.i + 1) % resolveCacheSize;\n return result;\n }\n}\nclass ResolveCache {\n constructor() {\n this.elts = [];\n this.i = 0;\n }\n}\nconst resolveCacheSize = 12, resolveCache = new WeakMap();\n/**\nRepresents a flat range of content, i.e. one that starts and\nends in the same node.\n*/\nclass NodeRange {\n /**\n Construct a node range. `$from` and `$to` should point into the\n same node until at least the given `depth`, since a node range\n denotes an adjacent set of nodes in a single parent node.\n */\n constructor(\n /**\n A resolved position along the start of the content. May have a\n `depth` greater than this object's `depth` property, since\n these are the positions that were used to compute the range,\n not re-resolved positions directly at its boundaries.\n */\n $from, \n /**\n A position along the end of the content. See\n caveat for [`$from`](https://prosemirror.net/docs/ref/#model.NodeRange.$from).\n */\n $to, \n /**\n The depth of the node that this range points into.\n */\n depth) {\n this.$from = $from;\n this.$to = $to;\n this.depth = depth;\n }\n /**\n The position at the start of the range.\n */\n get start() { return this.$from.before(this.depth + 1); }\n /**\n The position at the end of the range.\n */\n get end() { return this.$to.after(this.depth + 1); }\n /**\n The parent node that the range points into.\n */\n get parent() { return this.$from.node(this.depth); }\n /**\n The start index of the range in the parent node.\n */\n get startIndex() { return this.$from.index(this.depth); }\n /**\n The end index of the range in the parent node.\n */\n get endIndex() { return this.$to.indexAfter(this.depth); }\n}\n\nconst emptyAttrs = Object.create(null);\n/**\nThis class represents a node in the tree that makes up a\nProseMirror document. So a document is an instance of `Node`, with\nchildren that are also instances of `Node`.\n\nNodes are persistent data structures. Instead of changing them, you\ncreate new ones with the content you want. Old ones keep pointing\nat the old document shape. This is made cheaper by sharing\nstructure between the old and new data as much as possible, which a\ntree shape like this (without back pointers) makes easy.\n\n**Do not** directly mutate the properties of a `Node` object. See\n[the guide](https://prosemirror.net/docs/guide/#doc) for more information.\n*/\nclass Node {\n /**\n @internal\n */\n constructor(\n /**\n The type of node that this is.\n */\n type, \n /**\n An object mapping attribute names to values. The kind of\n attributes allowed and required are\n [determined](https://prosemirror.net/docs/ref/#model.NodeSpec.attrs) by the node type.\n */\n attrs, \n // A fragment holding the node's children.\n content, \n /**\n The marks (things like whether it is emphasized or part of a\n link) applied to this node.\n */\n marks = Mark.none) {\n this.type = type;\n this.attrs = attrs;\n this.marks = marks;\n this.content = content || Fragment.empty;\n }\n /**\n The array of this node's child nodes.\n */\n get children() { return this.content.content; }\n /**\n The size of this node, as defined by the integer-based [indexing\n scheme](https://prosemirror.net/docs/guide/#doc.indexing). For text nodes, this is the\n amount of characters. For other leaf nodes, it is one. For\n non-leaf nodes, it is the size of the content plus two (the\n start and end token).\n */\n get nodeSize() { return this.isLeaf ? 1 : 2 + this.content.size; }\n /**\n The number of children that the node has.\n */\n get childCount() { return this.content.childCount; }\n /**\n Get the child node at the given index. Raises an error when the\n index is out of range.\n */\n child(index) { return this.content.child(index); }\n /**\n Get the child node at the given index, if it exists.\n */\n maybeChild(index) { return this.content.maybeChild(index); }\n /**\n Call `f` for every child node, passing the node, its offset\n into this parent node, and its index.\n */\n forEach(f) { this.content.forEach(f); }\n /**\n Invoke a callback for all descendant nodes recursively between\n the given two positions that are relative to start of this\n node's content. The callback is invoked with the node, its\n position relative to the original node (method receiver),\n its parent node, and its child index. When the callback returns\n false for a given node, that node's children will not be\n recursed over. The last parameter can be used to specify a\n starting position to count from.\n */\n nodesBetween(from, to, f, startPos = 0) {\n this.content.nodesBetween(from, to, f, startPos, this);\n }\n /**\n Call the given callback for every descendant node. Doesn't\n descend into a node when the callback returns `false`.\n */\n descendants(f) {\n this.nodesBetween(0, this.content.size, f);\n }\n /**\n Concatenates all the text nodes found in this fragment and its\n children.\n */\n get textContent() {\n return (this.isLeaf && this.type.spec.leafText)\n ? this.type.spec.leafText(this)\n : this.textBetween(0, this.content.size, \"\");\n }\n /**\n Get all text between positions `from` and `to`. When\n `blockSeparator` is given, it will be inserted to separate text\n from different block nodes. If `leafText` is given, it'll be\n inserted for every non-text leaf node encountered, otherwise\n [`leafText`](https://prosemirror.net/docs/ref/#model.NodeSpec.leafText) will be used.\n */\n textBetween(from, to, blockSeparator, leafText) {\n return this.content.textBetween(from, to, blockSeparator, leafText);\n }\n /**\n Returns this node's first child, or `null` if there are no\n children.\n */\n get firstChild() { return this.content.firstChild; }\n /**\n Returns this node's last child, or `null` if there are no\n children.\n */\n get lastChild() { return this.content.lastChild; }\n /**\n Test whether two nodes represent the same piece of document.\n */\n eq(other) {\n return this == other || (this.sameMarkup(other) && this.content.eq(other.content));\n }\n /**\n Compare the markup (type, attributes, and marks) of this node to\n those of another. Returns `true` if both have the same markup.\n */\n sameMarkup(other) {\n return this.hasMarkup(other.type, other.attrs, other.marks);\n }\n /**\n Check whether this node's markup correspond to the given type,\n attributes, and marks.\n */\n hasMarkup(type, attrs, marks) {\n return this.type == type &&\n compareDeep(this.attrs, attrs || type.defaultAttrs || emptyAttrs) &&\n Mark.sameSet(this.marks, marks || Mark.none);\n }\n /**\n Create a new node with the same markup as this node, containing\n the given content (or empty, if no content is given).\n */\n copy(content = null) {\n if (content == this.content)\n return this;\n return new Node(this.type, this.attrs, content, this.marks);\n }\n /**\n Create a copy of this node, with the given set of marks instead\n of the node's own marks.\n */\n mark(marks) {\n return marks == this.marks ? this : new Node(this.type, this.attrs, this.content, marks);\n }\n /**\n Create a copy of this node with only the content between the\n given positions. If `to` is not given, it defaults to the end of\n the node.\n */\n cut(from, to = this.content.size) {\n if (from == 0 && to == this.content.size)\n return this;\n return this.copy(this.content.cut(from, to));\n }\n /**\n Cut out the part of the document between the given positions, and\n return it as a `Slice` object.\n */\n slice(from, to = this.content.size, includeParents = false) {\n if (from == to)\n return Slice.empty;\n let $from = this.resolve(from), $to = this.resolve(to);\n let depth = includeParents ? 0 : $from.sharedDepth(to);\n let start = $from.start(depth), node = $from.node(depth);\n let content = node.content.cut($from.pos - start, $to.pos - start);\n return new Slice(content, $from.depth - depth, $to.depth - depth);\n }\n /**\n Replace the part of the document between the given positions with\n the given slice. The slice must 'fit', meaning its open sides\n must be able to connect to the surrounding content, and its\n content nodes must be valid children for the node they are placed\n into. If any of this is violated, an error of type\n [`ReplaceError`](https://prosemirror.net/docs/ref/#model.ReplaceError) is thrown.\n */\n replace(from, to, slice) {\n return replace(this.resolve(from), this.resolve(to), slice);\n }\n /**\n Find the node directly after the given position.\n */\n nodeAt(pos) {\n for (let node = this;;) {\n let { index, offset } = node.content.findIndex(pos);\n node = node.maybeChild(index);\n if (!node)\n return null;\n if (offset == pos || node.isText)\n return node;\n pos -= offset + 1;\n }\n }\n /**\n Find the (direct) child node after the given offset, if any,\n and return it along with its index and offset relative to this\n node.\n */\n childAfter(pos) {\n let { index, offset } = this.content.findIndex(pos);\n return { node: this.content.maybeChild(index), index, offset };\n }\n /**\n Find the (direct) child node before the given offset, if any,\n and return it along with its index and offset relative to this\n node.\n */\n childBefore(pos) {\n if (pos == 0)\n return { node: null, index: 0, offset: 0 };\n let { index, offset } = this.content.findIndex(pos);\n if (offset < pos)\n return { node: this.content.child(index), index, offset };\n let node = this.content.child(index - 1);\n return { node, index: index - 1, offset: offset - node.nodeSize };\n }\n /**\n Resolve the given position in the document, returning an\n [object](https://prosemirror.net/docs/ref/#model.ResolvedPos) with information about its context.\n */\n resolve(pos) { return ResolvedPos.resolveCached(this, pos); }\n /**\n @internal\n */\n resolveNoCache(pos) { return ResolvedPos.resolve(this, pos); }\n /**\n Test whether a given mark or mark type occurs in this document\n between the two given positions.\n */\n rangeHasMark(from, to, type) {\n let found = false;\n if (to > from)\n this.nodesBetween(from, to, node => {\n if (type.isInSet(node.marks))\n found = true;\n return !found;\n });\n return found;\n }\n /**\n True when this is a block (non-inline node)\n */\n get isBlock() { return this.type.isBlock; }\n /**\n True when this is a textblock node, a block node with inline\n content.\n */\n get isTextblock() { return this.type.isTextblock; }\n /**\n True when this node allows inline content.\n */\n get inlineContent() { return this.type.inlineContent; }\n /**\n True when this is an inline node (a text node or a node that can\n appear among text).\n */\n get isInline() { return this.type.isInline; }\n /**\n True when this is a text node.\n */\n get isText() { return this.type.isText; }\n /**\n True when this is a leaf node.\n */\n get isLeaf() { return this.type.isLeaf; }\n /**\n True when this is an atom, i.e. when it does not have directly\n editable content. This is usually the same as `isLeaf`, but can\n be configured with the [`atom` property](https://prosemirror.net/docs/ref/#model.NodeSpec.atom)\n on a node's spec (typically used when the node is displayed as\n an uneditable [node view](https://prosemirror.net/docs/ref/#view.NodeView)).\n */\n get isAtom() { return this.type.isAtom; }\n /**\n Return a string representation of this node for debugging\n purposes.\n */\n toString() {\n if (this.type.spec.toDebugString)\n return this.type.spec.toDebugString(this);\n let name = this.type.name;\n if (this.content.size)\n name += \"(\" + this.content.toStringInner() + \")\";\n return wrapMarks(this.marks, name);\n }\n /**\n Get the content match in this node at the given index.\n */\n contentMatchAt(index) {\n let match = this.type.contentMatch.matchFragment(this.content, 0, index);\n if (!match)\n throw new Error(\"Called contentMatchAt on a node with invalid content\");\n return match;\n }\n /**\n Test whether replacing the range between `from` and `to` (by\n child index) with the given replacement fragment (which defaults\n to the empty fragment) would leave the node's content valid. You\n can optionally pass `start` and `end` indices into the\n replacement fragment.\n */\n canReplace(from, to, replacement = Fragment.empty, start = 0, end = replacement.childCount) {\n let one = this.contentMatchAt(from).matchFragment(replacement, start, end);\n let two = one && one.matchFragment(this.content, to);\n if (!two || !two.validEnd)\n return false;\n for (let i = start; i < end; i++)\n if (!this.type.allowsMarks(replacement.child(i).marks))\n return false;\n return true;\n }\n /**\n Test whether replacing the range `from` to `to` (by index) with\n a node of the given type would leave the node's content valid.\n */\n canReplaceWith(from, to, type, marks) {\n if (marks && !this.type.allowsMarks(marks))\n return false;\n let start = this.contentMatchAt(from).matchType(type);\n let end = start && start.matchFragment(this.content, to);\n return end ? end.validEnd : false;\n }\n /**\n Test whether the given node's content could be appended to this\n node. If that node is empty, this will only return true if there\n is at least one node type that can appear in both nodes (to avoid\n merging completely incompatible nodes).\n */\n canAppend(other) {\n if (other.content.size)\n return this.canReplace(this.childCount, this.childCount, other.content);\n else\n return this.type.compatibleContent(other.type);\n }\n /**\n Check whether this node and its descendants conform to the\n schema, and raise an exception when they do not.\n */\n check() {\n this.type.checkContent(this.content);\n this.type.checkAttrs(this.attrs);\n let copy = Mark.none;\n for (let i = 0; i < this.marks.length; i++) {\n let mark = this.marks[i];\n mark.type.checkAttrs(mark.attrs);\n copy = mark.addToSet(copy);\n }\n if (!Mark.sameSet(copy, this.marks))\n throw new RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map(m => m.type.name)}`);\n this.content.forEach(node => node.check());\n }\n /**\n Return a JSON-serializeable representation of this node.\n */\n toJSON() {\n let obj = { type: this.type.name };\n for (let _ in this.attrs) {\n obj.attrs = this.attrs;\n break;\n }\n if (this.content.size)\n obj.content = this.content.toJSON();\n if (this.marks.length)\n obj.marks = this.marks.map(n => n.toJSON());\n return obj;\n }\n /**\n Deserialize a node from its JSON representation.\n */\n static fromJSON(schema, json) {\n if (!json)\n throw new RangeError(\"Invalid input for Node.fromJSON\");\n let marks = undefined;\n if (json.marks) {\n if (!Array.isArray(json.marks))\n throw new RangeError(\"Invalid mark data for Node.fromJSON\");\n marks = json.marks.map(schema.markFromJSON);\n }\n if (json.type == \"text\") {\n if (typeof json.text != \"string\")\n throw new RangeError(\"Invalid text node in JSON\");\n return schema.text(json.text, marks);\n }\n let content = Fragment.fromJSON(schema, json.content);\n let node = schema.nodeType(json.type).create(json.attrs, content, marks);\n node.type.checkAttrs(node.attrs);\n return node;\n }\n}\nNode.prototype.text = undefined;\nclass TextNode extends Node {\n /**\n @internal\n */\n constructor(type, attrs, content, marks) {\n super(type, attrs, null, marks);\n if (!content)\n throw new RangeError(\"Empty text nodes are not allowed\");\n this.text = content;\n }\n toString() {\n if (this.type.spec.toDebugString)\n return this.type.spec.toDebugString(this);\n return wrapMarks(this.marks, JSON.stringify(this.text));\n }\n get textContent() { return this.text; }\n textBetween(from, to) { return this.text.slice(from, to); }\n get nodeSize() { return this.text.length; }\n mark(marks) {\n return marks == this.marks ? this : new TextNode(this.type, this.attrs, this.text, marks);\n }\n withText(text) {\n if (text == this.text)\n return this;\n return new TextNode(this.type, this.attrs, text, this.marks);\n }\n cut(from = 0, to = this.text.length) {\n if (from == 0 && to == this.text.length)\n return this;\n return this.withText(this.text.slice(from, to));\n }\n eq(other) {\n return this.sameMarkup(other) && this.text == other.text;\n }\n toJSON() {\n let base = super.toJSON();\n base.text = this.text;\n return base;\n }\n}\nfunction wrapMarks(marks, str) {\n for (let i = marks.length - 1; i >= 0; i--)\n str = marks[i].type.name + \"(\" + str + \")\";\n return str;\n}\n\n/**\nInstances of this class represent a match state of a node type's\n[content expression](https://prosemirror.net/docs/ref/#model.NodeSpec.content), and can be used to\nfind out whether further content matches here, and whether a given\nposition is a valid end of the node.\n*/\nclass ContentMatch {\n /**\n @internal\n */\n constructor(\n /**\n True when this match state represents a valid end of the node.\n */\n validEnd) {\n this.validEnd = validEnd;\n /**\n @internal\n */\n this.next = [];\n /**\n @internal\n */\n this.wrapCache = [];\n }\n /**\n @internal\n */\n static parse(string, nodeTypes) {\n let stream = new TokenStream(string, nodeTypes);\n if (stream.next == null)\n return ContentMatch.empty;\n let expr = parseExpr(stream);\n if (stream.next)\n stream.err(\"Unexpected trailing text\");\n let match = dfa(nfa(expr));\n checkForDeadEnds(match, stream);\n return match;\n }\n /**\n Match a node type, returning a match after that node if\n successful.\n */\n matchType(type) {\n for (let i = 0; i < this.next.length; i++)\n if (this.next[i].type == type)\n return this.next[i].next;\n return null;\n }\n /**\n Try to match a fragment. Returns the resulting match when\n successful.\n */\n matchFragment(frag, start = 0, end = frag.childCount) {\n let cur = this;\n for (let i = start; cur && i < end; i++)\n cur = cur.matchType(frag.child(i).type);\n return cur;\n }\n /**\n @internal\n */\n get inlineContent() {\n return this.next.length != 0 && this.next[0].type.isInline;\n }\n /**\n Get the first matching node type at this match position that can\n be generated.\n */\n get defaultType() {\n for (let i = 0; i < this.next.length; i++) {\n let { type } = this.next[i];\n if (!(type.isText || type.hasRequiredAttrs()))\n return type;\n }\n return null;\n }\n /**\n @internal\n */\n compatible(other) {\n for (let i = 0; i < this.next.length; i++)\n for (let j = 0; j < other.next.length; j++)\n if (this.next[i].type == other.next[j].type)\n return true;\n return false;\n }\n /**\n Try to match the given fragment, and if that fails, see if it can\n be made to match by inserting nodes in front of it. When\n successful, return a fragment of inserted nodes (which may be\n empty if nothing had to be inserted). When `toEnd` is true, only\n return a fragment if the resulting match goes to the end of the\n content expression.\n */\n fillBefore(after, toEnd = false, startIndex = 0) {\n let seen = [this];\n function search(match, types) {\n let finished = match.matchFragment(after, startIndex);\n if (finished && (!toEnd || finished.validEnd))\n return Fragment.from(types.map(tp => tp.createAndFill()));\n for (let i = 0; i < match.next.length; i++) {\n let { type, next } = match.next[i];\n if (!(type.isText || type.hasRequiredAttrs()) && seen.indexOf(next) == -1) {\n seen.push(next);\n let found = search(next, types.concat(type));\n if (found)\n return found;\n }\n }\n return null;\n }\n return search(this, []);\n }\n /**\n Find a set of wrapping node types that would allow a node of the\n given type to appear at this position. The result may be empty\n (when it fits directly) and will be null when no such wrapping\n exists.\n */\n findWrapping(target) {\n for (let i = 0; i < this.wrapCache.length; i += 2)\n if (this.wrapCache[i] == target)\n return this.wrapCache[i + 1];\n let computed = this.computeWrapping(target);\n this.wrapCache.push(target, computed);\n return computed;\n }\n /**\n @internal\n */\n computeWrapping(target) {\n let seen = Object.create(null), active = [{ match: this, type: null, via: null }];\n while (active.length) {\n let current = active.shift(), match = current.match;\n if (match.matchType(target)) {\n let result = [];\n for (let obj = current; obj.type; obj = obj.via)\n result.push(obj.type);\n return result.reverse();\n }\n for (let i = 0; i < match.next.length; i++) {\n let { type, next } = match.next[i];\n if (!type.isLeaf && !type.hasRequiredAttrs() && !(type.name in seen) && (!current.type || next.validEnd)) {\n active.push({ match: type.contentMatch, type, via: current });\n seen[type.name] = true;\n }\n }\n }\n return null;\n }\n /**\n The number of outgoing edges this node has in the finite\n automaton that describes the content expression.\n */\n get edgeCount() {\n return this.next.length;\n }\n /**\n Get the _n_​th outgoing edge from this node in the finite\n automaton that describes the content expression.\n */\n edge(n) {\n if (n >= this.next.length)\n throw new RangeError(`There's no ${n}th edge in this content match`);\n return this.next[n];\n }\n /**\n @internal\n */\n toString() {\n let seen = [];\n function scan(m) {\n seen.push(m);\n for (let i = 0; i < m.next.length; i++)\n if (seen.indexOf(m.next[i].next) == -1)\n scan(m.next[i].next);\n }\n scan(this);\n return seen.map((m, i) => {\n let out = i + (m.validEnd ? \"*\" : \" \") + \" \";\n for (let i = 0; i < m.next.length; i++)\n out += (i ? \", \" : \"\") + m.next[i].type.name + \"->\" + seen.indexOf(m.next[i].next);\n return out;\n }).join(\"\\n\");\n }\n}\n/**\n@internal\n*/\nContentMatch.empty = new ContentMatch(true);\nclass TokenStream {\n constructor(string, nodeTypes) {\n this.string = string;\n this.nodeTypes = nodeTypes;\n this.inline = null;\n this.pos = 0;\n this.tokens = string.split(/\\s*(?=\\b|\\W|$)/);\n if (this.tokens[this.tokens.length - 1] == \"\")\n this.tokens.pop();\n if (this.tokens[0] == \"\")\n this.tokens.shift();\n }\n get next() { return this.tokens[this.pos]; }\n eat(tok) { return this.next == tok && (this.pos++ || true); }\n err(str) { throw new SyntaxError(str + \" (in content expression '\" + this.string + \"')\"); }\n}\nfunction parseExpr(stream) {\n let exprs = [];\n do {\n exprs.push(parseExprSeq(stream));\n } while (stream.eat(\"|\"));\n return exprs.length == 1 ? exprs[0] : { type: \"choice\", exprs };\n}\nfunction parseExprSeq(stream) {\n let exprs = [];\n do {\n exprs.push(parseExprSubscript(stream));\n } while (stream.next && stream.next != \")\" && stream.next != \"|\");\n return exprs.length == 1 ? exprs[0] : { type: \"seq\", exprs };\n}\nfunction parseExprSubscript(stream) {\n let expr = parseExprAtom(stream);\n for (;;) {\n if (stream.eat(\"+\"))\n expr = { type: \"plus\", expr };\n else if (stream.eat(\"*\"))\n expr = { type: \"star\", expr };\n else if (stream.eat(\"?\"))\n expr = { type: \"opt\", expr };\n else if (stream.eat(\"{\"))\n expr = parseExprRange(stream, expr);\n else\n break;\n }\n return expr;\n}\nfunction parseNum(stream) {\n if (/\\D/.test(stream.next))\n stream.err(\"Expected number, got '\" + stream.next + \"'\");\n let result = Number(stream.next);\n stream.pos++;\n return result;\n}\nfunction parseExprRange(stream, expr) {\n let min = parseNum(stream), max = min;\n if (stream.eat(\",\")) {\n if (stream.next != \"}\")\n max = parseNum(stream);\n else\n max = -1;\n }\n if (!stream.eat(\"}\"))\n stream.err(\"Unclosed braced range\");\n return { type: \"range\", min, max, expr };\n}\nfunction resolveName(stream, name) {\n let types = stream.nodeTypes, type = types[name];\n if (type)\n return [type];\n let result = [];\n for (let typeName in types) {\n let type = types[typeName];\n if (type.isInGroup(name))\n result.push(type);\n }\n if (result.length == 0)\n stream.err(\"No node type or group '\" + name + \"' found\");\n return result;\n}\nfunction parseExprAtom(stream) {\n if (stream.eat(\"(\")) {\n let expr = parseExpr(stream);\n if (!stream.eat(\")\"))\n stream.err(\"Missing closing paren\");\n return expr;\n }\n else if (!/\\W/.test(stream.next)) {\n let exprs = resolveName(stream, stream.next).map(type => {\n if (stream.inline == null)\n stream.inline = type.isInline;\n else if (stream.inline != type.isInline)\n stream.err(\"Mixing inline and block content\");\n return { type: \"name\", value: type };\n });\n stream.pos++;\n return exprs.length == 1 ? exprs[0] : { type: \"choice\", exprs };\n }\n else {\n stream.err(\"Unexpected token '\" + stream.next + \"'\");\n }\n}\n// Construct an NFA from an expression as returned by the parser. The\n// NFA is represented as an array of states, which are themselves\n// arrays of edges, which are `{term, to}` objects. The first state is\n// the entry state and the last node is the success state.\n//\n// Note that unlike typical NFAs, the edge ordering in this one is\n// significant, in that it is used to contruct filler content when\n// necessary.\nfunction nfa(expr) {\n let nfa = [[]];\n connect(compile(expr, 0), node());\n return nfa;\n function node() { return nfa.push([]) - 1; }\n function edge(from, to, term) {\n let edge = { term, to };\n nfa[from].push(edge);\n return edge;\n }\n function connect(edges, to) {\n edges.forEach(edge => edge.to = to);\n }\n function compile(expr, from) {\n if (expr.type == \"choice\") {\n return expr.exprs.reduce((out, expr) => out.concat(compile(expr, from)), []);\n }\n else if (expr.type == \"seq\") {\n for (let i = 0;; i++) {\n let next = compile(expr.exprs[i], from);\n if (i == expr.exprs.length - 1)\n return next;\n connect(next, from = node());\n }\n }\n else if (expr.type == \"star\") {\n let loop = node();\n edge(from, loop);\n connect(compile(expr.expr, loop), loop);\n return [edge(loop)];\n }\n else if (expr.type == \"plus\") {\n let loop = node();\n connect(compile(expr.expr, from), loop);\n connect(compile(expr.expr, loop), loop);\n return [edge(loop)];\n }\n else if (expr.type == \"opt\") {\n return [edge(from)].concat(compile(expr.expr, from));\n }\n else if (expr.type == \"range\") {\n let cur = from;\n for (let i = 0; i < expr.min; i++) {\n let next = node();\n connect(compile(expr.expr, cur), next);\n cur = next;\n }\n if (expr.max == -1) {\n connect(compile(expr.expr, cur), cur);\n }\n else {\n for (let i = expr.min; i < expr.max; i++) {\n let next = node();\n edge(cur, next);\n connect(compile(expr.expr, cur), next);\n cur = next;\n }\n }\n return [edge(cur)];\n }\n else if (expr.type == \"name\") {\n return [edge(from, undefined, expr.value)];\n }\n else {\n throw new Error(\"Unknown expr type\");\n }\n }\n}\nfunction cmp(a, b) { return b - a; }\n// Get the set of nodes reachable by null edges from `node`. Omit\n// nodes with only a single null-out-edge, since they may lead to\n// needless duplicated nodes.\nfunction nullFrom(nfa, node) {\n let result = [];\n scan(node);\n return result.sort(cmp);\n function scan(node) {\n let edges = nfa[node];\n if (edges.length == 1 && !edges[0].term)\n return scan(edges[0].to);\n result.push(node);\n for (let i = 0; i < edges.length; i++) {\n let { term, to } = edges[i];\n if (!term && result.indexOf(to) == -1)\n scan(to);\n }\n }\n}\n// Compiles an NFA as produced by `nfa` into a DFA, modeled as a set\n// of state objects (`ContentMatch` instances) with transitions\n// between them.\nfunction dfa(nfa) {\n let labeled = Object.create(null);\n return explore(nullFrom(nfa, 0));\n function explore(states) {\n let out = [];\n states.forEach(node => {\n nfa[node].forEach(({ term, to }) => {\n if (!term)\n return;\n let set;\n for (let i = 0; i < out.length; i++)\n if (out[i][0] == term)\n set = out[i][1];\n nullFrom(nfa, to).forEach(node => {\n if (!set)\n out.push([term, set = []]);\n if (set.indexOf(node) == -1)\n set.push(node);\n });\n });\n });\n let state = labeled[states.join(\",\")] = new ContentMatch(states.indexOf(nfa.length - 1) > -1);\n for (let i = 0; i < out.length; i++) {\n let states = out[i][1].sort(cmp);\n state.next.push({ type: out[i][0], next: labeled[states.join(\",\")] || explore(states) });\n }\n return state;\n }\n}\nfunction checkForDeadEnds(match, stream) {\n for (let i = 0, work = [match]; i < work.length; i++) {\n let state = work[i], dead = !state.validEnd, nodes = [];\n for (let j = 0; j < state.next.length; j++) {\n let { type, next } = state.next[j];\n nodes.push(type.name);\n if (dead && !(type.isText || type.hasRequiredAttrs()))\n dead = false;\n if (work.indexOf(next) == -1)\n work.push(next);\n }\n if (dead)\n stream.err(\"Only non-generatable nodes (\" + nodes.join(\", \") + \") in a required position (see https://prosemirror.net/docs/guide/#generatable)\");\n }\n}\n\n// For node types where all attrs have a default value (or which don't\n// have any attributes), build up a single reusable default attribute\n// object, and use it for all nodes that don't specify specific\n// attributes.\nfunction defaultAttrs(attrs) {\n let defaults = Object.create(null);\n for (let attrName in attrs) {\n let attr = attrs[attrName];\n if (!attr.hasDefault)\n return null;\n defaults[attrName] = attr.default;\n }\n return defaults;\n}\nfunction computeAttrs(attrs, value) {\n let built = Object.create(null);\n for (let name in attrs) {\n let given = value && value[name];\n if (given === undefined) {\n let attr = attrs[name];\n if (attr.hasDefault)\n given = attr.default;\n else\n throw new RangeError(\"No value supplied for attribute \" + name);\n }\n built[name] = given;\n }\n return built;\n}\nfunction checkAttrs(attrs, values, type, name) {\n for (let name in values)\n if (!(name in attrs))\n throw new RangeError(`Unsupported attribute ${name} for ${type} of type ${name}`);\n for (let name in attrs) {\n let attr = attrs[name];\n if (attr.validate)\n attr.validate(values[name]);\n }\n}\nfunction initAttrs(typeName, attrs) {\n let result = Object.create(null);\n if (attrs)\n for (let name in attrs)\n result[name] = new Attribute(typeName, name, attrs[name]);\n return result;\n}\n/**\nNode types are objects allocated once per `Schema` and used to\n[tag](https://prosemirror.net/docs/ref/#model.Node.type) `Node` instances. They contain information\nabout the node type, such as its name and what kind of node it\nrepresents.\n*/\nclass NodeType {\n /**\n @internal\n */\n constructor(\n /**\n The name the node type has in this schema.\n */\n name, \n /**\n A link back to the `Schema` the node type belongs to.\n */\n schema, \n /**\n The spec that this type is based on\n */\n spec) {\n this.name = name;\n this.schema = schema;\n this.spec = spec;\n /**\n The set of marks allowed in this node. `null` means all marks\n are allowed.\n */\n this.markSet = null;\n this.groups = spec.group ? spec.group.split(\" \") : [];\n this.attrs = initAttrs(name, spec.attrs);\n this.defaultAttrs = defaultAttrs(this.attrs);\n this.contentMatch = null;\n this.inlineContent = null;\n this.isBlock = !(spec.inline || name == \"text\");\n this.isText = name == \"text\";\n }\n /**\n True if this is an inline type.\n */\n get isInline() { return !this.isBlock; }\n /**\n True if this is a textblock type, a block that contains inline\n content.\n */\n get isTextblock() { return this.isBlock && this.inlineContent; }\n /**\n True for node types that allow no content.\n */\n get isLeaf() { return this.contentMatch == ContentMatch.empty; }\n /**\n True when this node is an atom, i.e. when it does not have\n directly editable content.\n */\n get isAtom() { return this.isLeaf || !!this.spec.atom; }\n /**\n Return true when this node type is part of the given\n [group](https://prosemirror.net/docs/ref/#model.NodeSpec.group).\n */\n isInGroup(group) {\n return this.groups.indexOf(group) > -1;\n }\n /**\n The node type's [whitespace](https://prosemirror.net/docs/ref/#model.NodeSpec.whitespace) option.\n */\n get whitespace() {\n return this.spec.whitespace || (this.spec.code ? \"pre\" : \"normal\");\n }\n /**\n Tells you whether this node type has any required attributes.\n */\n hasRequiredAttrs() {\n for (let n in this.attrs)\n if (this.attrs[n].isRequired)\n return true;\n return false;\n }\n /**\n Indicates whether this node allows some of the same content as\n the given node type.\n */\n compatibleContent(other) {\n return this == other || this.contentMatch.compatible(other.contentMatch);\n }\n /**\n @internal\n */\n computeAttrs(attrs) {\n if (!attrs && this.defaultAttrs)\n return this.defaultAttrs;\n else\n return computeAttrs(this.attrs, attrs);\n }\n /**\n Create a `Node` of this type. The given attributes are\n checked and defaulted (you can pass `null` to use the type's\n defaults entirely, if no required attributes exist). `content`\n may be a `Fragment`, a node, an array of nodes, or\n `null`. Similarly `marks` may be `null` to default to the empty\n set of marks.\n */\n create(attrs = null, content, marks) {\n if (this.isText)\n throw new Error(\"NodeType.create can't construct text nodes\");\n return new Node(this, this.computeAttrs(attrs), Fragment.from(content), Mark.setFrom(marks));\n }\n /**\n Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but check the given content\n against the node type's content restrictions, and throw an error\n if it doesn't match.\n */\n createChecked(attrs = null, content, marks) {\n content = Fragment.from(content);\n this.checkContent(content);\n return new Node(this, this.computeAttrs(attrs), content, Mark.setFrom(marks));\n }\n /**\n Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but see if it is\n necessary to add nodes to the start or end of the given fragment\n to make it fit the node. If no fitting wrapping can be found,\n return null. Note that, due to the fact that required nodes can\n always be created, this will always succeed if you pass null or\n `Fragment.empty` as content.\n */\n createAndFill(attrs = null, content, marks) {\n attrs = this.computeAttrs(attrs);\n content = Fragment.from(content);\n if (content.size) {\n let before = this.contentMatch.fillBefore(content);\n if (!before)\n return null;\n content = before.append(content);\n }\n let matched = this.contentMatch.matchFragment(content);\n let after = matched && matched.fillBefore(Fragment.empty, true);\n if (!after)\n return null;\n return new Node(this, attrs, content.append(after), Mark.setFrom(marks));\n }\n /**\n Returns true if the given fragment is valid content for this node\n type.\n */\n validContent(content) {\n let result = this.contentMatch.matchFragment(content);\n if (!result || !result.validEnd)\n return false;\n for (let i = 0; i < content.childCount; i++)\n if (!this.allowsMarks(content.child(i).marks))\n return false;\n return true;\n }\n /**\n Throws a RangeError if the given fragment is not valid content for this\n node type.\n @internal\n */\n checkContent(content) {\n if (!this.validContent(content))\n throw new RangeError(`Invalid content for node ${this.name}: ${content.toString().slice(0, 50)}`);\n }\n /**\n @internal\n */\n checkAttrs(attrs) {\n checkAttrs(this.attrs, attrs, \"node\", this.name);\n }\n /**\n Check whether the given mark type is allowed in this node.\n */\n allowsMarkType(markType) {\n return this.markSet == null || this.markSet.indexOf(markType) > -1;\n }\n /**\n Test whether the given set of marks are allowed in this node.\n */\n allowsMarks(marks) {\n if (this.markSet == null)\n return true;\n for (let i = 0; i < marks.length; i++)\n if (!this.allowsMarkType(marks[i].type))\n return false;\n return true;\n }\n /**\n Removes the marks that are not allowed in this node from the given set.\n */\n allowedMarks(marks) {\n if (this.markSet == null)\n return marks;\n let copy;\n for (let i = 0; i < marks.length; i++) {\n if (!this.allowsMarkType(marks[i].type)) {\n if (!copy)\n copy = marks.slice(0, i);\n }\n else if (copy) {\n copy.push(marks[i]);\n }\n }\n return !copy ? marks : copy.length ? copy : Mark.none;\n }\n /**\n @internal\n */\n static compile(nodes, schema) {\n let result = Object.create(null);\n nodes.forEach((name, spec) => result[name] = new NodeType(name, schema, spec));\n let topType = schema.spec.topNode || \"doc\";\n if (!result[topType])\n throw new RangeError(\"Schema is missing its top node type ('\" + topType + \"')\");\n if (!result.text)\n throw new RangeError(\"Every schema needs a 'text' type\");\n for (let _ in result.text.attrs)\n throw new RangeError(\"The text node type should not have attributes\");\n return result;\n }\n}\nfunction validateType(typeName, attrName, type) {\n let types = type.split(\"|\");\n return (value) => {\n let name = value === null ? \"null\" : typeof value;\n if (types.indexOf(name) < 0)\n throw new RangeError(`Expected value of type ${types} for attribute ${attrName} on type ${typeName}, got ${name}`);\n };\n}\n// Attribute descriptors\nclass Attribute {\n constructor(typeName, attrName, options) {\n this.hasDefault = Object.prototype.hasOwnProperty.call(options, \"default\");\n this.default = options.default;\n this.validate = typeof options.validate == \"string\" ? validateType(typeName, attrName, options.validate) : options.validate;\n }\n get isRequired() {\n return !this.hasDefault;\n }\n}\n// Marks\n/**\nLike nodes, marks (which are associated with nodes to signify\nthings like emphasis or being part of a link) are\n[tagged](https://prosemirror.net/docs/ref/#model.Mark.type) with type objects, which are\ninstantiated once per `Schema`.\n*/\nclass MarkType {\n /**\n @internal\n */\n constructor(\n /**\n The name of the mark type.\n */\n name, \n /**\n @internal\n */\n rank, \n /**\n The schema that this mark type instance is part of.\n */\n schema, \n /**\n The spec on which the type is based.\n */\n spec) {\n this.name = name;\n this.rank = rank;\n this.schema = schema;\n this.spec = spec;\n this.attrs = initAttrs(name, spec.attrs);\n this.excluded = null;\n let defaults = defaultAttrs(this.attrs);\n this.instance = defaults ? new Mark(this, defaults) : null;\n }\n /**\n Create a mark of this type. `attrs` may be `null` or an object\n containing only some of the mark's attributes. The others, if\n they have defaults, will be added.\n */\n create(attrs = null) {\n if (!attrs && this.instance)\n return this.instance;\n return new Mark(this, computeAttrs(this.attrs, attrs));\n }\n /**\n @internal\n */\n static compile(marks, schema) {\n let result = Object.create(null), rank = 0;\n marks.forEach((name, spec) => result[name] = new MarkType(name, rank++, schema, spec));\n return result;\n }\n /**\n When there is a mark of this type in the given set, a new set\n without it is returned. Otherwise, the input set is returned.\n */\n removeFromSet(set) {\n for (var i = 0; i < set.length; i++)\n if (set[i].type == this) {\n set = set.slice(0, i).concat(set.slice(i + 1));\n i--;\n }\n return set;\n }\n /**\n Tests whether there is a mark of this type in the given set.\n */\n isInSet(set) {\n for (let i = 0; i < set.length; i++)\n if (set[i].type == this)\n return set[i];\n }\n /**\n @internal\n */\n checkAttrs(attrs) {\n checkAttrs(this.attrs, attrs, \"mark\", this.name);\n }\n /**\n Queries whether a given mark type is\n [excluded](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) by this one.\n */\n excludes(other) {\n return this.excluded.indexOf(other) > -1;\n }\n}\n/**\nA document schema. Holds [node](https://prosemirror.net/docs/ref/#model.NodeType) and [mark\ntype](https://prosemirror.net/docs/ref/#model.MarkType) objects for the nodes and marks that may\noccur in conforming documents, and provides functionality for\ncreating and deserializing such documents.\n\nWhen given, the type parameters provide the names of the nodes and\nmarks in this schema.\n*/\nclass Schema {\n /**\n Construct a schema from a schema [specification](https://prosemirror.net/docs/ref/#model.SchemaSpec).\n */\n constructor(spec) {\n /**\n The [linebreak\n replacement](https://prosemirror.net/docs/ref/#model.NodeSpec.linebreakReplacement) node defined\n in this schema, if any.\n */\n this.linebreakReplacement = null;\n /**\n An object for storing whatever values modules may want to\n compute and cache per schema. (If you want to store something\n in it, try to use property names unlikely to clash.)\n */\n this.cached = Object.create(null);\n let instanceSpec = this.spec = {};\n for (let prop in spec)\n instanceSpec[prop] = spec[prop];\n instanceSpec.nodes = OrderedMap.from(spec.nodes),\n instanceSpec.marks = OrderedMap.from(spec.marks || {}),\n this.nodes = NodeType.compile(this.spec.nodes, this);\n this.marks = MarkType.compile(this.spec.marks, this);\n let contentExprCache = Object.create(null);\n for (let prop in this.nodes) {\n if (prop in this.marks)\n throw new RangeError(prop + \" can not be both a node and a mark\");\n let type = this.nodes[prop], contentExpr = type.spec.content || \"\", markExpr = type.spec.marks;\n type.contentMatch = contentExprCache[contentExpr] ||\n (contentExprCache[contentExpr] = ContentMatch.parse(contentExpr, this.nodes));\n type.inlineContent = type.contentMatch.inlineContent;\n if (type.spec.linebreakReplacement) {\n if (this.linebreakReplacement)\n throw new RangeError(\"Multiple linebreak nodes defined\");\n if (!type.isInline || !type.isLeaf)\n throw new RangeError(\"Linebreak replacement nodes must be inline leaf nodes\");\n this.linebreakReplacement = type;\n }\n type.markSet = markExpr == \"_\" ? null :\n markExpr ? gatherMarks(this, markExpr.split(\" \")) :\n markExpr == \"\" || !type.inlineContent ? [] : null;\n }\n for (let prop in this.marks) {\n let type = this.marks[prop], excl = type.spec.excludes;\n type.excluded = excl == null ? [type] : excl == \"\" ? [] : gatherMarks(this, excl.split(\" \"));\n }\n this.nodeFromJSON = json => Node.fromJSON(this, json);\n this.markFromJSON = json => Mark.fromJSON(this, json);\n this.topNodeType = this.nodes[this.spec.topNode || \"doc\"];\n this.cached.wrappings = Object.create(null);\n }\n /**\n Create a node in this schema. The `type` may be a string or a\n `NodeType` instance. Attributes will be extended with defaults,\n `content` may be a `Fragment`, `null`, a `Node`, or an array of\n nodes.\n */\n node(type, attrs = null, content, marks) {\n if (typeof type == \"string\")\n type = this.nodeType(type);\n else if (!(type instanceof NodeType))\n throw new RangeError(\"Invalid node type: \" + type);\n else if (type.schema != this)\n throw new RangeError(\"Node type from different schema used (\" + type.name + \")\");\n return type.createChecked(attrs, content, marks);\n }\n /**\n Create a text node in the schema. Empty text nodes are not\n allowed.\n */\n text(text, marks) {\n let type = this.nodes.text;\n return new TextNode(type, type.defaultAttrs, text, Mark.setFrom(marks));\n }\n /**\n Create a mark with the given type and attributes.\n */\n mark(type, attrs) {\n if (typeof type == \"string\")\n type = this.marks[type];\n return type.create(attrs);\n }\n /**\n @internal\n */\n nodeType(name) {\n let found = this.nodes[name];\n if (!found)\n throw new RangeError(\"Unknown node type: \" + name);\n return found;\n }\n}\nfunction gatherMarks(schema, marks) {\n let found = [];\n for (let i = 0; i < marks.length; i++) {\n let name = marks[i], mark = schema.marks[name], ok = mark;\n if (mark) {\n found.push(mark);\n }\n else {\n for (let prop in schema.marks) {\n let mark = schema.marks[prop];\n if (name == \"_\" || (mark.spec.group && mark.spec.group.split(\" \").indexOf(name) > -1))\n found.push(ok = mark);\n }\n }\n if (!ok)\n throw new SyntaxError(\"Unknown mark type: '\" + marks[i] + \"'\");\n }\n return found;\n}\n\nfunction isTagRule(rule) { return rule.tag != null; }\nfunction isStyleRule(rule) { return rule.style != null; }\n/**\nA DOM parser represents a strategy for parsing DOM content into a\nProseMirror document conforming to a given schema. Its behavior is\ndefined by an array of [rules](https://prosemirror.net/docs/ref/#model.ParseRule).\n*/\nclass DOMParser {\n /**\n Create a parser that targets the given schema, using the given\n parsing rules.\n */\n constructor(\n /**\n The schema into which the parser parses.\n */\n schema, \n /**\n The set of [parse rules](https://prosemirror.net/docs/ref/#model.ParseRule) that the parser\n uses, in order of precedence.\n */\n rules) {\n this.schema = schema;\n this.rules = rules;\n /**\n @internal\n */\n this.tags = [];\n /**\n @internal\n */\n this.styles = [];\n let matchedStyles = this.matchedStyles = [];\n rules.forEach(rule => {\n if (isTagRule(rule)) {\n this.tags.push(rule);\n }\n else if (isStyleRule(rule)) {\n let prop = /[^=]*/.exec(rule.style)[0];\n if (matchedStyles.indexOf(prop) < 0)\n matchedStyles.push(prop);\n this.styles.push(rule);\n }\n });\n // Only normalize list elements when lists in the schema can't directly contain themselves\n this.normalizeLists = !this.tags.some(r => {\n if (!/^(ul|ol)\\b/.test(r.tag) || !r.node)\n return false;\n let node = schema.nodes[r.node];\n return node.contentMatch.matchType(node);\n });\n }\n /**\n Parse a document from the content of a DOM node.\n */\n parse(dom, options = {}) {\n let context = new ParseContext(this, options, false);\n context.addAll(dom, Mark.none, options.from, options.to);\n return context.finish();\n }\n /**\n Parses the content of the given DOM node, like\n [`parse`](https://prosemirror.net/docs/ref/#model.DOMParser.parse), and takes the same set of\n options. But unlike that method, which produces a whole node,\n this one returns a slice that is open at the sides, meaning that\n the schema constraints aren't applied to the start of nodes to\n the left of the input and the end of nodes at the end.\n */\n parseSlice(dom, options = {}) {\n let context = new ParseContext(this, options, true);\n context.addAll(dom, Mark.none, options.from, options.to);\n return Slice.maxOpen(context.finish());\n }\n /**\n @internal\n */\n matchTag(dom, context, after) {\n for (let i = after ? this.tags.indexOf(after) + 1 : 0; i < this.tags.length; i++) {\n let rule = this.tags[i];\n if (matches(dom, rule.tag) &&\n (rule.namespace === undefined || dom.namespaceURI == rule.namespace) &&\n (!rule.context || context.matchesContext(rule.context))) {\n if (rule.getAttrs) {\n let result = rule.getAttrs(dom);\n if (result === false)\n continue;\n rule.attrs = result || undefined;\n }\n return rule;\n }\n }\n }\n /**\n @internal\n */\n matchStyle(prop, value, context, after) {\n for (let i = after ? this.styles.indexOf(after) + 1 : 0; i < this.styles.length; i++) {\n let rule = this.styles[i], style = rule.style;\n if (style.indexOf(prop) != 0 ||\n rule.context && !context.matchesContext(rule.context) ||\n // Test that the style string either precisely matches the prop,\n // or has an '=' sign after the prop, followed by the given\n // value.\n style.length > prop.length &&\n (style.charCodeAt(prop.length) != 61 || style.slice(prop.length + 1) != value))\n continue;\n if (rule.getAttrs) {\n let result = rule.getAttrs(value);\n if (result === false)\n continue;\n rule.attrs = result || undefined;\n }\n return rule;\n }\n }\n /**\n @internal\n */\n static schemaRules(schema) {\n let result = [];\n function insert(rule) {\n let priority = rule.priority == null ? 50 : rule.priority, i = 0;\n for (; i < result.length; i++) {\n let next = result[i], nextPriority = next.priority == null ? 50 : next.priority;\n if (nextPriority < priority)\n break;\n }\n result.splice(i, 0, rule);\n }\n for (let name in schema.marks) {\n let rules = schema.marks[name].spec.parseDOM;\n if (rules)\n rules.forEach(rule => {\n insert(rule = copy(rule));\n if (!(rule.mark || rule.ignore || rule.clearMark))\n rule.mark = name;\n });\n }\n for (let name in schema.nodes) {\n let rules = schema.nodes[name].spec.parseDOM;\n if (rules)\n rules.forEach(rule => {\n insert(rule = copy(rule));\n if (!(rule.node || rule.ignore || rule.mark))\n rule.node = name;\n });\n }\n return result;\n }\n /**\n Construct a DOM parser using the parsing rules listed in a\n schema's [node specs](https://prosemirror.net/docs/ref/#model.NodeSpec.parseDOM), reordered by\n [priority](https://prosemirror.net/docs/ref/#model.GenericParseRule.priority).\n */\n static fromSchema(schema) {\n return schema.cached.domParser ||\n (schema.cached.domParser = new DOMParser(schema, DOMParser.schemaRules(schema)));\n }\n}\nconst blockTags = {\n address: true, article: true, aside: true, blockquote: true, canvas: true,\n dd: true, div: true, dl: true, fieldset: true, figcaption: true, figure: true,\n footer: true, form: true, h1: true, h2: true, h3: true, h4: true, h5: true,\n h6: true, header: true, hgroup: true, hr: true, li: true, noscript: true, ol: true,\n output: true, p: true, pre: true, section: true, table: true, tfoot: true, ul: true\n};\nconst ignoreTags = {\n head: true, noscript: true, object: true, script: true, style: true, title: true\n};\nconst listTags = { ol: true, ul: true };\n// Using a bitfield for node context options\nconst OPT_PRESERVE_WS = 1, OPT_PRESERVE_WS_FULL = 2, OPT_OPEN_LEFT = 4;\nfunction wsOptionsFor(type, preserveWhitespace, base) {\n if (preserveWhitespace != null)\n return (preserveWhitespace ? OPT_PRESERVE_WS : 0) |\n (preserveWhitespace === \"full\" ? OPT_PRESERVE_WS_FULL : 0);\n return type && type.whitespace == \"pre\" ? OPT_PRESERVE_WS | OPT_PRESERVE_WS_FULL : base & ~OPT_OPEN_LEFT;\n}\nclass NodeContext {\n constructor(type, attrs, marks, solid, match, options) {\n this.type = type;\n this.attrs = attrs;\n this.marks = marks;\n this.solid = solid;\n this.options = options;\n this.content = [];\n // Marks applied to the node's children\n this.activeMarks = Mark.none;\n this.match = match || (options & OPT_OPEN_LEFT ? null : type.contentMatch);\n }\n findWrapping(node) {\n if (!this.match) {\n if (!this.type)\n return [];\n let fill = this.type.contentMatch.fillBefore(Fragment.from(node));\n if (fill) {\n this.match = this.type.contentMatch.matchFragment(fill);\n }\n else {\n let start = this.type.contentMatch, wrap;\n if (wrap = start.findWrapping(node.type)) {\n this.match = start;\n return wrap;\n }\n else {\n return null;\n }\n }\n }\n return this.match.findWrapping(node.type);\n }\n finish(openEnd) {\n if (!(this.options & OPT_PRESERVE_WS)) { // Strip trailing whitespace\n let last = this.content[this.content.length - 1], m;\n if (last && last.isText && (m = /[ \\t\\r\\n\\u000c]+$/.exec(last.text))) {\n let text = last;\n if (last.text.length == m[0].length)\n this.content.pop();\n else\n this.content[this.content.length - 1] = text.withText(text.text.slice(0, text.text.length - m[0].length));\n }\n }\n let content = Fragment.from(this.content);\n if (!openEnd && this.match)\n content = content.append(this.match.fillBefore(Fragment.empty, true));\n return this.type ? this.type.create(this.attrs, content, this.marks) : content;\n }\n inlineContext(node) {\n if (this.type)\n return this.type.inlineContent;\n if (this.content.length)\n return this.content[0].isInline;\n return node.parentNode && !blockTags.hasOwnProperty(node.parentNode.nodeName.toLowerCase());\n }\n}\nclass ParseContext {\n constructor(\n // The parser we are using.\n parser, \n // The options passed to this parse.\n options, isOpen) {\n this.parser = parser;\n this.options = options;\n this.isOpen = isOpen;\n this.open = 0;\n this.localPreserveWS = false;\n let topNode = options.topNode, topContext;\n let topOptions = wsOptionsFor(null, options.preserveWhitespace, 0) | (isOpen ? OPT_OPEN_LEFT : 0);\n if (topNode)\n topContext = new NodeContext(topNode.type, topNode.attrs, Mark.none, true, options.topMatch || topNode.type.contentMatch, topOptions);\n else if (isOpen)\n topContext = new NodeContext(null, null, Mark.none, true, null, topOptions);\n else\n topContext = new NodeContext(parser.schema.topNodeType, null, Mark.none, true, null, topOptions);\n this.nodes = [topContext];\n this.find = options.findPositions;\n this.needsBlock = false;\n }\n get top() {\n return this.nodes[this.open];\n }\n // Add a DOM node to the content. Text is inserted as text node,\n // otherwise, the node is passed to `addElement` or, if it has a\n // `style` attribute, `addElementWithStyles`.\n addDOM(dom, marks) {\n if (dom.nodeType == 3)\n this.addTextNode(dom, marks);\n else if (dom.nodeType == 1)\n this.addElement(dom, marks);\n }\n addTextNode(dom, marks) {\n let value = dom.nodeValue;\n let top = this.top, preserveWS = (top.options & OPT_PRESERVE_WS_FULL) ? \"full\"\n : this.localPreserveWS || (top.options & OPT_PRESERVE_WS) > 0;\n let { schema } = this.parser;\n if (preserveWS === \"full\" ||\n top.inlineContext(dom) ||\n /[^ \\t\\r\\n\\u000c]/.test(value)) {\n if (!preserveWS) {\n value = value.replace(/[ \\t\\r\\n\\u000c]+/g, \" \");\n // If this starts with whitespace, and there is no node before it, or\n // a hard break, or a text node that ends with whitespace, strip the\n // leading space.\n if (/^[ \\t\\r\\n\\u000c]/.test(value) && this.open == this.nodes.length - 1) {\n let nodeBefore = top.content[top.content.length - 1];\n let domNodeBefore = dom.previousSibling;\n if (!nodeBefore ||\n (domNodeBefore && domNodeBefore.nodeName == 'BR') ||\n (nodeBefore.isText && /[ \\t\\r\\n\\u000c]$/.test(nodeBefore.text)))\n value = value.slice(1);\n }\n }\n else if (preserveWS === \"full\") {\n value = value.replace(/\\r\\n?/g, \"\\n\");\n }\n else if (schema.linebreakReplacement && /[\\r\\n]/.test(value) && this.top.findWrapping(schema.linebreakReplacement.create())) {\n let lines = value.split(/\\r?\\n|\\r/);\n for (let i = 0; i < lines.length; i++) {\n if (i)\n this.insertNode(schema.linebreakReplacement.create(), marks, true);\n if (lines[i])\n this.insertNode(schema.text(lines[i]), marks, !/\\S/.test(lines[i]));\n }\n value = \"\";\n }\n else {\n value = value.replace(/\\r?\\n|\\r/g, \" \");\n }\n if (value)\n this.insertNode(schema.text(value), marks, !/\\S/.test(value));\n this.findInText(dom);\n }\n else {\n this.findInside(dom);\n }\n }\n // Try to find a handler for the given tag and use that to parse. If\n // none is found, the element's content nodes are added directly.\n addElement(dom, marks, matchAfter) {\n let outerWS = this.localPreserveWS, top = this.top;\n if (dom.tagName == \"PRE\" || /pre/.test(dom.style && dom.style.whiteSpace))\n this.localPreserveWS = true;\n let name = dom.nodeName.toLowerCase(), ruleID;\n if (listTags.hasOwnProperty(name) && this.parser.normalizeLists)\n normalizeList(dom);\n let rule = (this.options.ruleFromNode && this.options.ruleFromNode(dom)) ||\n (ruleID = this.parser.matchTag(dom, this, matchAfter));\n out: if (rule ? rule.ignore : ignoreTags.hasOwnProperty(name)) {\n this.findInside(dom);\n this.ignoreFallback(dom, marks);\n }\n else if (!rule || rule.skip || rule.closeParent) {\n if (rule && rule.closeParent)\n this.open = Math.max(0, this.open - 1);\n else if (rule && rule.skip.nodeType)\n dom = rule.skip;\n let sync, oldNeedsBlock = this.needsBlock;\n if (blockTags.hasOwnProperty(name)) {\n if (top.content.length && top.content[0].isInline && this.open) {\n this.open--;\n top = this.top;\n }\n sync = true;\n if (!top.type)\n this.needsBlock = true;\n }\n else if (!dom.firstChild) {\n this.leafFallback(dom, marks);\n break out;\n }\n let innerMarks = rule && rule.skip ? marks : this.readStyles(dom, marks);\n if (innerMarks)\n this.addAll(dom, innerMarks);\n if (sync)\n this.sync(top);\n this.needsBlock = oldNeedsBlock;\n }\n else {\n let innerMarks = this.readStyles(dom, marks);\n if (innerMarks)\n this.addElementByRule(dom, rule, innerMarks, rule.consuming === false ? ruleID : undefined);\n }\n this.localPreserveWS = outerWS;\n }\n // Called for leaf DOM nodes that would otherwise be ignored\n leafFallback(dom, marks) {\n if (dom.nodeName == \"BR\" && this.top.type && this.top.type.inlineContent)\n this.addTextNode(dom.ownerDocument.createTextNode(\"\\n\"), marks);\n }\n // Called for ignored nodes\n ignoreFallback(dom, marks) {\n // Ignored BR nodes should at least create an inline context\n if (dom.nodeName == \"BR\" && (!this.top.type || !this.top.type.inlineContent))\n this.findPlace(this.parser.schema.text(\"-\"), marks, true);\n }\n // Run any style parser associated with the node's styles. Either\n // return an updated array of marks, or null to indicate some of the\n // styles had a rule with `ignore` set.\n readStyles(dom, marks) {\n let styles = dom.style;\n // Because many properties will only show up in 'normalized' form\n // in `style.item` (i.e. text-decoration becomes\n // text-decoration-line, text-decoration-color, etc), we directly\n // query the styles mentioned in our rules instead of iterating\n // over the items.\n if (styles && styles.length)\n for (let i = 0; i < this.parser.matchedStyles.length; i++) {\n let name = this.parser.matchedStyles[i], value = styles.getPropertyValue(name);\n if (value)\n for (let after = undefined;;) {\n let rule = this.parser.matchStyle(name, value, this, after);\n if (!rule)\n break;\n if (rule.ignore)\n return null;\n if (rule.clearMark)\n marks = marks.filter(m => !rule.clearMark(m));\n else\n marks = marks.concat(this.parser.schema.marks[rule.mark].create(rule.attrs));\n if (rule.consuming === false)\n after = rule;\n else\n break;\n }\n }\n return marks;\n }\n // Look up a handler for the given node. If none are found, return\n // false. Otherwise, apply it, use its return value to drive the way\n // the node's content is wrapped, and return true.\n addElementByRule(dom, rule, marks, continueAfter) {\n let sync, nodeType;\n if (rule.node) {\n nodeType = this.parser.schema.nodes[rule.node];\n if (!nodeType.isLeaf) {\n let inner = this.enter(nodeType, rule.attrs || null, marks, rule.preserveWhitespace);\n if (inner) {\n sync = true;\n marks = inner;\n }\n }\n else if (!this.insertNode(nodeType.create(rule.attrs), marks, dom.nodeName == \"BR\")) {\n this.leafFallback(dom, marks);\n }\n }\n else {\n let markType = this.parser.schema.marks[rule.mark];\n marks = marks.concat(markType.create(rule.attrs));\n }\n let startIn = this.top;\n if (nodeType && nodeType.isLeaf) {\n this.findInside(dom);\n }\n else if (continueAfter) {\n this.addElement(dom, marks, continueAfter);\n }\n else if (rule.getContent) {\n this.findInside(dom);\n rule.getContent(dom, this.parser.schema).forEach(node => this.insertNode(node, marks, false));\n }\n else {\n let contentDOM = dom;\n if (typeof rule.contentElement == \"string\")\n contentDOM = dom.querySelector(rule.contentElement);\n else if (typeof rule.contentElement == \"function\")\n contentDOM = rule.contentElement(dom);\n else if (rule.contentElement)\n contentDOM = rule.contentElement;\n this.findAround(dom, contentDOM, true);\n this.addAll(contentDOM, marks);\n this.findAround(dom, contentDOM, false);\n }\n if (sync && this.sync(startIn))\n this.open--;\n }\n // Add all child nodes between `startIndex` and `endIndex` (or the\n // whole node, if not given). If `sync` is passed, use it to\n // synchronize after every block element.\n addAll(parent, marks, startIndex, endIndex) {\n let index = startIndex || 0;\n for (let dom = startIndex ? parent.childNodes[startIndex] : parent.firstChild, end = endIndex == null ? null : parent.childNodes[endIndex]; dom != end; dom = dom.nextSibling, ++index) {\n this.findAtPoint(parent, index);\n this.addDOM(dom, marks);\n }\n this.findAtPoint(parent, index);\n }\n // Try to find a way to fit the given node type into the current\n // context. May add intermediate wrappers and/or leave non-solid\n // nodes that we're in.\n findPlace(node, marks, cautious) {\n let route, sync;\n for (let depth = this.open, penalty = 0; depth >= 0; depth--) {\n let cx = this.nodes[depth];\n let found = cx.findWrapping(node);\n if (found && (!route || route.length > found.length + penalty)) {\n route = found;\n sync = cx;\n if (!found.length)\n break;\n }\n if (cx.solid) {\n if (cautious)\n break;\n penalty += 2;\n }\n }\n if (!route)\n return null;\n this.sync(sync);\n for (let i = 0; i < route.length; i++)\n marks = this.enterInner(route[i], null, marks, false);\n return marks;\n }\n // Try to insert the given node, adjusting the context when needed.\n insertNode(node, marks, cautious) {\n if (node.isInline && this.needsBlock && !this.top.type) {\n let block = this.textblockFromContext();\n if (block)\n marks = this.enterInner(block, null, marks);\n }\n let innerMarks = this.findPlace(node, marks, cautious);\n if (innerMarks) {\n this.closeExtra();\n let top = this.top;\n if (top.match)\n top.match = top.match.matchType(node.type);\n let nodeMarks = Mark.none;\n for (let m of innerMarks.concat(node.marks))\n if (top.type ? top.type.allowsMarkType(m.type) : markMayApply(m.type, node.type))\n nodeMarks = m.addToSet(nodeMarks);\n top.content.push(node.mark(nodeMarks));\n return true;\n }\n return false;\n }\n // Try to start a node of the given type, adjusting the context when\n // necessary.\n enter(type, attrs, marks, preserveWS) {\n let innerMarks = this.findPlace(type.create(attrs), marks, false);\n if (innerMarks)\n innerMarks = this.enterInner(type, attrs, marks, true, preserveWS);\n return innerMarks;\n }\n // Open a node of the given type\n enterInner(type, attrs, marks, solid = false, preserveWS) {\n this.closeExtra();\n let top = this.top;\n top.match = top.match && top.match.matchType(type);\n let options = wsOptionsFor(type, preserveWS, top.options);\n if ((top.options & OPT_OPEN_LEFT) && top.content.length == 0)\n options |= OPT_OPEN_LEFT;\n let applyMarks = Mark.none;\n marks = marks.filter(m => {\n if (top.type ? top.type.allowsMarkType(m.type) : markMayApply(m.type, type)) {\n applyMarks = m.addToSet(applyMarks);\n return false;\n }\n return true;\n });\n this.nodes.push(new NodeContext(type, attrs, applyMarks, solid, null, options));\n this.open++;\n return marks;\n }\n // Make sure all nodes above this.open are finished and added to\n // their parents\n closeExtra(openEnd = false) {\n let i = this.nodes.length - 1;\n if (i > this.open) {\n for (; i > this.open; i--)\n this.nodes[i - 1].content.push(this.nodes[i].finish(openEnd));\n this.nodes.length = this.open + 1;\n }\n }\n finish() {\n this.open = 0;\n this.closeExtra(this.isOpen);\n return this.nodes[0].finish(!!(this.isOpen || this.options.topOpen));\n }\n sync(to) {\n for (let i = this.open; i >= 0; i--) {\n if (this.nodes[i] == to) {\n this.open = i;\n return true;\n }\n else if (this.localPreserveWS) {\n this.nodes[i].options |= OPT_PRESERVE_WS;\n }\n }\n return false;\n }\n get currentPos() {\n this.closeExtra();\n let pos = 0;\n for (let i = this.open; i >= 0; i--) {\n let content = this.nodes[i].content;\n for (let j = content.length - 1; j >= 0; j--)\n pos += content[j].nodeSize;\n if (i)\n pos++;\n }\n return pos;\n }\n findAtPoint(parent, offset) {\n if (this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].node == parent && this.find[i].offset == offset)\n this.find[i].pos = this.currentPos;\n }\n }\n findInside(parent) {\n if (this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node))\n this.find[i].pos = this.currentPos;\n }\n }\n findAround(parent, content, before) {\n if (parent != content && this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node)) {\n let pos = content.compareDocumentPosition(this.find[i].node);\n if (pos & (before ? 2 : 4))\n this.find[i].pos = this.currentPos;\n }\n }\n }\n findInText(textNode) {\n if (this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].node == textNode)\n this.find[i].pos = this.currentPos - (textNode.nodeValue.length - this.find[i].offset);\n }\n }\n // Determines whether the given context string matches this context.\n matchesContext(context) {\n if (context.indexOf(\"|\") > -1)\n return context.split(/\\s*\\|\\s*/).some(this.matchesContext, this);\n let parts = context.split(\"/\");\n let option = this.options.context;\n let useRoot = !this.isOpen && (!option || option.parent.type == this.nodes[0].type);\n let minDepth = -(option ? option.depth + 1 : 0) + (useRoot ? 0 : 1);\n let match = (i, depth) => {\n for (; i >= 0; i--) {\n let part = parts[i];\n if (part == \"\") {\n if (i == parts.length - 1 || i == 0)\n continue;\n for (; depth >= minDepth; depth--)\n if (match(i - 1, depth))\n return true;\n return false;\n }\n else {\n let next = depth > 0 || (depth == 0 && useRoot) ? this.nodes[depth].type\n : option && depth >= minDepth ? option.node(depth - minDepth).type\n : null;\n if (!next || (next.name != part && !next.isInGroup(part)))\n return false;\n depth--;\n }\n }\n return true;\n };\n return match(parts.length - 1, this.open);\n }\n textblockFromContext() {\n let $context = this.options.context;\n if ($context)\n for (let d = $context.depth; d >= 0; d--) {\n let deflt = $context.node(d).contentMatchAt($context.indexAfter(d)).defaultType;\n if (deflt && deflt.isTextblock && deflt.defaultAttrs)\n return deflt;\n }\n for (let name in this.parser.schema.nodes) {\n let type = this.parser.schema.nodes[name];\n if (type.isTextblock && type.defaultAttrs)\n return type;\n }\n }\n}\n// Kludge to work around directly nested list nodes produced by some\n// tools and allowed by browsers to mean that the nested list is\n// actually part of the list item above it.\nfunction normalizeList(dom) {\n for (let child = dom.firstChild, prevItem = null; child; child = child.nextSibling) {\n let name = child.nodeType == 1 ? child.nodeName.toLowerCase() : null;\n if (name && listTags.hasOwnProperty(name) && prevItem) {\n prevItem.appendChild(child);\n child = prevItem;\n }\n else if (name == \"li\") {\n prevItem = child;\n }\n else if (name) {\n prevItem = null;\n }\n }\n}\n// Apply a CSS selector.\nfunction matches(dom, selector) {\n return (dom.matches || dom.msMatchesSelector || dom.webkitMatchesSelector || dom.mozMatchesSelector).call(dom, selector);\n}\nfunction copy(obj) {\n let copy = {};\n for (let prop in obj)\n copy[prop] = obj[prop];\n return copy;\n}\n// Used when finding a mark at the top level of a fragment parse.\n// Checks whether it would be reasonable to apply a given mark type to\n// a given node, by looking at the way the mark occurs in the schema.\nfunction markMayApply(markType, nodeType) {\n let nodes = nodeType.schema.nodes;\n for (let name in nodes) {\n let parent = nodes[name];\n if (!parent.allowsMarkType(markType))\n continue;\n let seen = [], scan = (match) => {\n seen.push(match);\n for (let i = 0; i < match.edgeCount; i++) {\n let { type, next } = match.edge(i);\n if (type == nodeType)\n return true;\n if (seen.indexOf(next) < 0 && scan(next))\n return true;\n }\n };\n if (scan(parent.contentMatch))\n return true;\n }\n}\n\n/**\nA DOM serializer knows how to convert ProseMirror nodes and\nmarks of various types to DOM nodes.\n*/\nclass DOMSerializer {\n /**\n Create a serializer. `nodes` should map node names to functions\n that take a node and return a description of the corresponding\n DOM. `marks` does the same for mark names, but also gets an\n argument that tells it whether the mark's content is block or\n inline content (for typical use, it'll always be inline). A mark\n serializer may be `null` to indicate that marks of that type\n should not be serialized.\n */\n constructor(\n /**\n The node serialization functions.\n */\n nodes, \n /**\n The mark serialization functions.\n */\n marks) {\n this.nodes = nodes;\n this.marks = marks;\n }\n /**\n Serialize the content of this fragment to a DOM fragment. When\n not in the browser, the `document` option, containing a DOM\n document, should be passed so that the serializer can create\n nodes.\n */\n serializeFragment(fragment, options = {}, target) {\n if (!target)\n target = doc(options).createDocumentFragment();\n let top = target, active = [];\n fragment.forEach(node => {\n if (active.length || node.marks.length) {\n let keep = 0, rendered = 0;\n while (keep < active.length && rendered < node.marks.length) {\n let next = node.marks[rendered];\n if (!this.marks[next.type.name]) {\n rendered++;\n continue;\n }\n if (!next.eq(active[keep][0]) || next.type.spec.spanning === false)\n break;\n keep++;\n rendered++;\n }\n while (keep < active.length)\n top = active.pop()[1];\n while (rendered < node.marks.length) {\n let add = node.marks[rendered++];\n let markDOM = this.serializeMark(add, node.isInline, options);\n if (markDOM) {\n active.push([add, top]);\n top.appendChild(markDOM.dom);\n top = markDOM.contentDOM || markDOM.dom;\n }\n }\n }\n top.appendChild(this.serializeNodeInner(node, options));\n });\n return target;\n }\n /**\n @internal\n */\n serializeNodeInner(node, options) {\n let { dom, contentDOM } = renderSpec(doc(options), this.nodes[node.type.name](node), null, node.attrs);\n if (contentDOM) {\n if (node.isLeaf)\n throw new RangeError(\"Content hole not allowed in a leaf node spec\");\n this.serializeFragment(node.content, options, contentDOM);\n }\n return dom;\n }\n /**\n Serialize this node to a DOM node. This can be useful when you\n need to serialize a part of a document, as opposed to the whole\n document. To serialize a whole document, use\n [`serializeFragment`](https://prosemirror.net/docs/ref/#model.DOMSerializer.serializeFragment) on\n its [content](https://prosemirror.net/docs/ref/#model.Node.content).\n */\n serializeNode(node, options = {}) {\n let dom = this.serializeNodeInner(node, options);\n for (let i = node.marks.length - 1; i >= 0; i--) {\n let wrap = this.serializeMark(node.marks[i], node.isInline, options);\n if (wrap) {\n (wrap.contentDOM || wrap.dom).appendChild(dom);\n dom = wrap.dom;\n }\n }\n return dom;\n }\n /**\n @internal\n */\n serializeMark(mark, inline, options = {}) {\n let toDOM = this.marks[mark.type.name];\n return toDOM && renderSpec(doc(options), toDOM(mark, inline), null, mark.attrs);\n }\n static renderSpec(doc, structure, xmlNS = null, blockArraysIn) {\n return renderSpec(doc, structure, xmlNS, blockArraysIn);\n }\n /**\n Build a serializer using the [`toDOM`](https://prosemirror.net/docs/ref/#model.NodeSpec.toDOM)\n properties in a schema's node and mark specs.\n */\n static fromSchema(schema) {\n return schema.cached.domSerializer ||\n (schema.cached.domSerializer = new DOMSerializer(this.nodesFromSchema(schema), this.marksFromSchema(schema)));\n }\n /**\n Gather the serializers in a schema's node specs into an object.\n This can be useful as a base to build a custom serializer from.\n */\n static nodesFromSchema(schema) {\n let result = gatherToDOM(schema.nodes);\n if (!result.text)\n result.text = node => node.text;\n return result;\n }\n /**\n Gather the serializers in a schema's mark specs into an object.\n */\n static marksFromSchema(schema) {\n return gatherToDOM(schema.marks);\n }\n}\nfunction gatherToDOM(obj) {\n let result = {};\n for (let name in obj) {\n let toDOM = obj[name].spec.toDOM;\n if (toDOM)\n result[name] = toDOM;\n }\n return result;\n}\nfunction doc(options) {\n return options.document || window.document;\n}\nconst suspiciousAttributeCache = new WeakMap();\nfunction suspiciousAttributes(attrs) {\n let value = suspiciousAttributeCache.get(attrs);\n if (value === undefined)\n suspiciousAttributeCache.set(attrs, value = suspiciousAttributesInner(attrs));\n return value;\n}\nfunction suspiciousAttributesInner(attrs) {\n let result = null;\n function scan(value) {\n if (value && typeof value == \"object\") {\n if (Array.isArray(value)) {\n if (typeof value[0] == \"string\") {\n if (!result)\n result = [];\n result.push(value);\n }\n else {\n for (let i = 0; i < value.length; i++)\n scan(value[i]);\n }\n }\n else {\n for (let prop in value)\n scan(value[prop]);\n }\n }\n }\n scan(attrs);\n return result;\n}\nfunction renderSpec(doc, structure, xmlNS, blockArraysIn) {\n if (typeof structure == \"string\")\n return { dom: doc.createTextNode(structure) };\n if (structure.nodeType != null)\n return { dom: structure };\n if (structure.dom && structure.dom.nodeType != null)\n return structure;\n let tagName = structure[0], suspicious;\n if (typeof tagName != \"string\")\n throw new RangeError(\"Invalid array passed to renderSpec\");\n if (blockArraysIn && (suspicious = suspiciousAttributes(blockArraysIn)) &&\n suspicious.indexOf(structure) > -1)\n throw new RangeError(\"Using an array from an attribute object as a DOM spec. This may be an attempted cross site scripting attack.\");\n let space = tagName.indexOf(\" \");\n if (space > 0) {\n xmlNS = tagName.slice(0, space);\n tagName = tagName.slice(space + 1);\n }\n let contentDOM;\n let dom = (xmlNS ? doc.createElementNS(xmlNS, tagName) : doc.createElement(tagName));\n let attrs = structure[1], start = 1;\n if (attrs && typeof attrs == \"object\" && attrs.nodeType == null && !Array.isArray(attrs)) {\n start = 2;\n for (let name in attrs)\n if (attrs[name] != null) {\n let space = name.indexOf(\" \");\n if (space > 0)\n dom.setAttributeNS(name.slice(0, space), name.slice(space + 1), attrs[name]);\n else if (name == \"style\" && dom.style)\n dom.style.cssText = attrs[name];\n else\n dom.setAttribute(name, attrs[name]);\n }\n }\n for (let i = start; i < structure.length; i++) {\n let child = structure[i];\n if (child === 0) {\n if (i < structure.length - 1 || i > start)\n throw new RangeError(\"Content hole must be the only child of its parent node\");\n return { dom, contentDOM: dom };\n }\n else {\n let { dom: inner, contentDOM: innerContent } = renderSpec(doc, child, xmlNS, blockArraysIn);\n dom.appendChild(inner);\n if (innerContent) {\n if (contentDOM)\n throw new RangeError(\"Multiple content holes\");\n contentDOM = innerContent;\n }\n }\n }\n return { dom, contentDOM };\n}\n\nexport { ContentMatch, DOMParser, DOMSerializer, Fragment, Mark, MarkType, Node, NodeRange, NodeType, ReplaceError, ResolvedPos, Schema, Slice };\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n * Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n * Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n * Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n * Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized `value`.\n */\nexport function toString(value, options) {\n const settings = options || emptyOptions\n const includeImageAlt =\n typeof settings.includeImageAlt === 'boolean'\n ? settings.includeImageAlt\n : true\n const includeHtml =\n typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n if (node(value)) {\n if ('value' in value) {\n return value.type === 'html' && !includeHtml ? '' : value.value\n }\n\n if (includeImageAlt && 'alt' in value && value.alt) {\n return value.alt\n }\n\n if ('children' in value) {\n return all(value.children, includeImageAlt, includeHtml)\n }\n }\n\n if (Array.isArray(value)) {\n return all(value, includeImageAlt, includeHtml)\n }\n\n return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n /** @type {Array<string>} */\n const result = []\n let index = -1\n\n while (++index < values.length) {\n result[index] = one(values[index], includeImageAlt, includeHtml)\n }\n\n return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n * Thing.\n * @returns {value is Nodes}\n * Whether `value` is a node.\n */\nfunction node(value) {\n return Boolean(value && typeof value === 'object')\n}\n","/// <reference lib=\"dom\" />\n\n/* global document */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string | false}\n */\nexport function decodeNamedCharacterReference(value) {\n const characterReference = '&' + value + ';'\n element.innerHTML = characterReference\n const character = element.textContent\n\n // Some named character references do not require the closing semicolon\n // (`¬`, for instance), which leads to situations where parsing the assumed\n // named reference of `¬it;` will result in the string `¬it;`.\n // When we encounter a trailing semicolon after parsing, and the character\n // reference to decode was not a semicolon (`;`), we can assume that the\n // matching was not complete.\n if (\n character.charCodeAt(character.length - 1) === 59 /* `;` */ &&\n value !== 'semi'\n ) {\n return false\n }\n\n // If the decoded string is equal to the input, the character reference was\n // not valid.\n return character === characterReference ? false : character\n}\n","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array<T>} list\n * List to operate on.\n * @param {number} start\n * Index to remove/insert at (can be negative).\n * @param {number} remove\n * Number of items to remove.\n * @param {Array<T>} items\n * Items to inject into `list`.\n * @returns {undefined}\n * Nothing.\n */\nexport function splice(list, start, remove, items) {\n const end = list.length;\n let chunkStart = 0;\n /** @type {Array<unknown>} */\n let parameters;\n\n // Make start between zero and `end` (included).\n if (start < 0) {\n start = -start > end ? 0 : end + start;\n } else {\n start = start > end ? end : start;\n }\n remove = remove > 0 ? remove : 0;\n\n // No need to chunk the items if there’s only a couple (10k) items.\n if (items.length < 10000) {\n parameters = Array.from(items);\n parameters.unshift(start, remove);\n // @ts-expect-error Hush, it’s fine.\n list.splice(...parameters);\n } else {\n // Delete `remove` items starting from `start`\n if (remove) list.splice(start, remove);\n\n // Insert the items in chunks to not cause stack overflows.\n while (chunkStart < items.length) {\n parameters = items.slice(chunkStart, chunkStart + 10000);\n parameters.unshift(start, 0);\n // @ts-expect-error Hush, it’s fine.\n list.splice(...parameters);\n chunkStart += 10000;\n start += 10000;\n }\n }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array<T>} list\n * List to operate on.\n * @param {Array<T>} items\n * Items to add to `list`.\n * @returns {Array<T>}\n * Either `list` or `items`.\n */\nexport function push(list, items) {\n if (list.length > 0) {\n splice(list, list.length, 0, items);\n return list;\n }\n return items;\n}","/**\n * @import {\n * Extension,\n * Handles,\n * HtmlExtension,\n * NormalizedExtension\n * } from 'micromark-util-types'\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {ReadonlyArray<Extension>} extensions\n * List of syntax extensions.\n * @returns {NormalizedExtension}\n * A single combined extension.\n */\nexport function combineExtensions(extensions) {\n /** @type {NormalizedExtension} */\n const all = {}\n let index = -1\n\n while (++index < extensions.length) {\n syntaxExtension(all, extensions[index])\n }\n\n return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n * Extension to merge into.\n * @param {Extension} extension\n * Extension to merge.\n * @returns {undefined}\n * Nothing.\n */\nfunction syntaxExtension(all, extension) {\n /** @type {keyof Extension} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n /** @type {Record<string, unknown>} */\n const left = maybe || (all[hook] = {})\n /** @type {Record<string, unknown> | undefined} */\n const right = extension[hook]\n /** @type {string} */\n let code\n\n if (right) {\n for (code in right) {\n if (!hasOwnProperty.call(left, code)) left[code] = []\n const value = right[code]\n constructs(\n // @ts-expect-error Looks like a list.\n left[code],\n Array.isArray(value) ? value : value ? [value] : []\n )\n }\n }\n }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n * List of constructs to merge into.\n * @param {Array<unknown>} list\n * List of constructs to merge.\n * @returns {undefined}\n * Nothing.\n */\nfunction constructs(existing, list) {\n let index = -1\n /** @type {Array<unknown>} */\n const before = []\n\n while (++index < list.length) {\n // @ts-expect-error Looks like an object.\n ;(list[index].add === 'after' ? existing : before).push(list[index])\n }\n\n splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {ReadonlyArray<HtmlExtension>} htmlExtensions\n * List of HTML extensions.\n * @returns {HtmlExtension}\n * Single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n /** @type {HtmlExtension} */\n const handlers = {}\n let index = -1\n\n while (++index < htmlExtensions.length) {\n htmlExtension(handlers, htmlExtensions[index])\n }\n\n return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n * Extension to merge into.\n * @param {HtmlExtension} extension\n * Extension to merge.\n * @returns {undefined}\n * Nothing.\n */\nfunction htmlExtension(all, extension) {\n /** @type {keyof HtmlExtension} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n const left = maybe || (all[hook] = {})\n const right = extension[hook]\n /** @type {keyof Handles} */\n let type\n\n if (right) {\n for (type in right) {\n // @ts-expect-error assume document vs regular handler are managed correctly.\n left[type] = right[type]\n }\n }\n }\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n * Value to decode.\n * @param {number} base\n * Numeric base.\n * @returns {string}\n * Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n const code = Number.parseInt(value, base);\n if (\n // C0 except for HT, LF, FF, CR, space.\n code < 9 || code === 11 || code > 13 && code < 32 ||\n // Control character (DEL) of C0, and C1 controls.\n code > 126 && code < 160 ||\n // Lone high surrogates and low surrogates.\n code > 55_295 && code < 57_344 ||\n // Noncharacters.\n code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n // Out of range\n code > 1_114_111) {\n return \"\\uFFFD\";\n }\n return String.fromCodePoint(code);\n}","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n * Identifier to normalize.\n * @returns {string}\n * Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n return value\n // Collapse markdown whitespace.\n .replace(/[\\t\\n\\r ]+/g, \" \")\n // Trim.\n .replace(/^ | $/g, '')\n // Some characters are considered “uppercase”, but if their lowercase\n // counterpart is uppercased will result in a different uppercase\n // character.\n // Hence, to get that form, we perform both lower- and uppercase.\n // Upper case makes sure keys will not interact with default prototypal\n // methods: no method is uppercase.\n .toLowerCase().toUpperCase();\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function asciiControl(code) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code !== null && (code < 32 || code === 127)\n );\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/);\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEnding(code) {\n return code !== null && code < -2;\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n return code !== null && (code < 0 || code === 32);\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownSpace(code) {\n return code === -2 || code === -1 || code === 32;\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/);\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * Expression.\n * @returns {(code: Code) => boolean}\n * Check.\n */\nfunction regexCheck(regex) {\n return check;\n\n /**\n * Check whether a code matches the bound regex.\n *\n * @param {Code} code\n * Character code.\n * @returns {boolean}\n * Whether the character code matches the bound regex.\n */\n function check(code) {\n return code !== null && code > -1 && regex.test(String.fromCharCode(code));\n }\n}","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { markdownSpace } from 'micromark-util-character';\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * * spaces in markdown are often optional, in which case this factory can be\n * used and `ok` will be switched to whether spaces were found or not\n * * one line ending or space can be detected with `markdownSpace(code)` right\n * before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {TokenType} type\n * Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n * Max (exclusive).\n * @returns {State}\n * Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n const limit = max ? max - 1 : Number.POSITIVE_INFINITY;\n let size = 0;\n return start;\n\n /** @type {State} */\n function start(code) {\n if (markdownSpace(code)) {\n effects.enter(type);\n return prefix(code);\n }\n return ok(code);\n }\n\n /** @type {State} */\n function prefix(code) {\n if (markdownSpace(code) && size++ < limit) {\n effects.consume(code);\n return prefix;\n }\n effects.exit(type);\n return ok(code);\n }\n}","/**\n * @import {\n * InitialConstruct,\n * Initializer,\n * State,\n * TokenizeContext,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const content = {\n tokenize: initializeContent\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Initializer}\n * Content.\n */\nfunction initializeContent(effects) {\n const contentStart = effects.attempt(this.parser.constructs.contentInitial, afterContentStartConstruct, paragraphInitial);\n /** @type {Token} */\n let previous;\n return contentStart;\n\n /** @type {State} */\n function afterContentStartConstruct(code) {\n if (code === null) {\n effects.consume(code);\n return;\n }\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return factorySpace(effects, contentStart, \"linePrefix\");\n }\n\n /** @type {State} */\n function paragraphInitial(code) {\n effects.enter(\"paragraph\");\n return lineStart(code);\n }\n\n /** @type {State} */\n function lineStart(code) {\n const token = effects.enter(\"chunkText\", {\n contentType: \"text\",\n previous\n });\n if (previous) {\n previous.next = token;\n }\n previous = token;\n return data(code);\n }\n\n /** @type {State} */\n function data(code) {\n if (code === null) {\n effects.exit(\"chunkText\");\n effects.exit(\"paragraph\");\n effects.consume(code);\n return;\n }\n if (markdownLineEnding(code)) {\n effects.consume(code);\n effects.exit(\"chunkText\");\n return lineStart;\n }\n\n // Data.\n effects.consume(code);\n return data;\n }\n}","/**\n * @import {\n * Construct,\n * ContainerState,\n * InitialConstruct,\n * Initializer,\n * Point,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n * Construct and its state.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {InitialConstruct} */\nexport const document = {\n tokenize: initializeDocument\n};\n\n/** @type {Construct} */\nconst containerConstruct = {\n tokenize: tokenizeContainer\n};\n\n/**\n * @this {TokenizeContext}\n * Self.\n * @type {Initializer}\n * Initializer.\n */\nfunction initializeDocument(effects) {\n const self = this;\n /** @type {Array<StackItem>} */\n const stack = [];\n let continued = 0;\n /** @type {TokenizeContext | undefined} */\n let childFlow;\n /** @type {Token | undefined} */\n let childToken;\n /** @type {number} */\n let lineStartOffset;\n return start;\n\n /** @type {State} */\n function start(code) {\n // First we iterate through the open blocks, starting with the root\n // document, and descending through last children down to the last open\n // block.\n // Each block imposes a condition that the line must satisfy if the block is\n // to remain open.\n // For example, a block quote requires a `>` character.\n // A paragraph requires a non-blank line.\n // In this phase we may match all or just some of the open blocks.\n // But we cannot close unmatched blocks yet, because we may have a lazy\n // continuation line.\n if (continued < stack.length) {\n const item = stack[continued];\n self.containerState = item[1];\n return effects.attempt(item[0].continuation, documentContinue, checkNewContainers)(code);\n }\n\n // Done.\n return checkNewContainers(code);\n }\n\n /** @type {State} */\n function documentContinue(code) {\n continued++;\n\n // Note: this field is called `_closeFlow` but it also closes containers.\n // Perhaps a good idea to rename it but it’s already used in the wild by\n // extensions.\n if (self.containerState._closeFlow) {\n self.containerState._closeFlow = undefined;\n if (childFlow) {\n closeFlow();\n }\n\n // Note: this algorithm for moving events around is similar to the\n // algorithm when dealing with lazy lines in `writeToChild`.\n const indexBeforeExits = self.events.length;\n let indexBeforeFlow = indexBeforeExits;\n /** @type {Point | undefined} */\n let point;\n\n // Find the flow chunk.\n while (indexBeforeFlow--) {\n if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n point = self.events[indexBeforeFlow][1].end;\n break;\n }\n }\n exitContainers(continued);\n\n // Fix positions.\n let index = indexBeforeExits;\n while (index < self.events.length) {\n self.events[index][1].end = {\n ...point\n };\n index++;\n }\n\n // Inject the exits earlier (they’re still also at the end).\n splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n // Discard the duplicate exits.\n self.events.length = index;\n return checkNewContainers(code);\n }\n return start(code);\n }\n\n /** @type {State} */\n function checkNewContainers(code) {\n // Next, after consuming the continuation markers for existing blocks, we\n // look for new block starts (e.g. `>` for a block quote).\n // If we encounter a new block start, we close any blocks unmatched in\n // step 1 before creating the new block as a child of the last matched\n // block.\n if (continued === stack.length) {\n // No need to `check` whether there’s a container, of `exitContainers`\n // would be moot.\n // We can instead immediately `attempt` to parse one.\n if (!childFlow) {\n return documentContinued(code);\n }\n\n // If we have concrete content, such as block HTML or fenced code,\n // we can’t have containers “pierce” into them, so we can immediately\n // start.\n if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n return flowStart(code);\n }\n\n // If we do have flow, it could still be a blank line,\n // but we’d be interrupting it w/ a new container if there’s a current\n // construct.\n // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n // needed in micromark-extension-gfm-table@1.0.6).\n self.interrupt = Boolean(childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack);\n }\n\n // Check if there is a new container.\n self.containerState = {};\n return effects.check(containerConstruct, thereIsANewContainer, thereIsNoNewContainer)(code);\n }\n\n /** @type {State} */\n function thereIsANewContainer(code) {\n if (childFlow) closeFlow();\n exitContainers(continued);\n return documentContinued(code);\n }\n\n /** @type {State} */\n function thereIsNoNewContainer(code) {\n self.parser.lazy[self.now().line] = continued !== stack.length;\n lineStartOffset = self.now().offset;\n return flowStart(code);\n }\n\n /** @type {State} */\n function documentContinued(code) {\n // Try new containers.\n self.containerState = {};\n return effects.attempt(containerConstruct, containerContinue, flowStart)(code);\n }\n\n /** @type {State} */\n function containerContinue(code) {\n continued++;\n stack.push([self.currentConstruct, self.containerState]);\n // Try another.\n return documentContinued(code);\n }\n\n /** @type {State} */\n function flowStart(code) {\n if (code === null) {\n if (childFlow) closeFlow();\n exitContainers(0);\n effects.consume(code);\n return;\n }\n childFlow = childFlow || self.parser.flow(self.now());\n effects.enter(\"chunkFlow\", {\n _tokenizer: childFlow,\n contentType: \"flow\",\n previous: childToken\n });\n return flowContinue(code);\n }\n\n /** @type {State} */\n function flowContinue(code) {\n if (code === null) {\n writeToChild(effects.exit(\"chunkFlow\"), true);\n exitContainers(0);\n effects.consume(code);\n return;\n }\n if (markdownLineEnding(code)) {\n effects.consume(code);\n writeToChild(effects.exit(\"chunkFlow\"));\n // Get ready for the next line.\n continued = 0;\n self.interrupt = undefined;\n return start;\n }\n effects.consume(code);\n return flowContinue;\n }\n\n /**\n * @param {Token} token\n * Token.\n * @param {boolean | undefined} [endOfFile]\n * Whether the token is at the end of the file (default: `false`).\n * @returns {undefined}\n * Nothing.\n */\n function writeToChild(token, endOfFile) {\n const stream = self.sliceStream(token);\n if (endOfFile) stream.push(null);\n token.previous = childToken;\n if (childToken) childToken.next = token;\n childToken = token;\n childFlow.defineSkip(token.start);\n childFlow.write(stream);\n\n // Alright, so we just added a lazy line:\n //\n // ```markdown\n // > a\n // b.\n //\n // Or:\n //\n // > ~~~c\n // d\n //\n // Or:\n //\n // > | e |\n // f\n // ```\n //\n // The construct in the second example (fenced code) does not accept lazy\n // lines, so it marked itself as done at the end of its first line, and\n // then the content construct parses `d`.\n // Most constructs in markdown match on the first line: if the first line\n // forms a construct, a non-lazy line can’t “unmake” it.\n //\n // The construct in the third example is potentially a GFM table, and\n // those are *weird*.\n // It *could* be a table, from the first line, if the following line\n // matches a condition.\n // In this case, that second line is lazy, which “unmakes” the first line\n // and turns the whole into one content block.\n //\n // We’ve now parsed the non-lazy and the lazy line, and can figure out\n // whether the lazy line started a new flow block.\n // If it did, we exit the current containers between the two flow blocks.\n if (self.parser.lazy[token.start.line]) {\n let index = childFlow.events.length;\n while (index--) {\n if (\n // The token starts before the line ending…\n childFlow.events[index][1].start.offset < lineStartOffset && (\n // …and either is not ended yet…\n !childFlow.events[index][1].end ||\n // …or ends after it.\n childFlow.events[index][1].end.offset > lineStartOffset)) {\n // Exit: there’s still something open, which means it’s a lazy line\n // part of something.\n return;\n }\n }\n\n // Note: this algorithm for moving events around is similar to the\n // algorithm when closing flow in `documentContinue`.\n const indexBeforeExits = self.events.length;\n let indexBeforeFlow = indexBeforeExits;\n /** @type {boolean | undefined} */\n let seen;\n /** @type {Point | undefined} */\n let point;\n\n // Find the previous chunk (the one before the lazy line).\n while (indexBeforeFlow--) {\n if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n if (seen) {\n point = self.events[indexBeforeFlow][1].end;\n break;\n }\n seen = true;\n }\n }\n exitContainers(continued);\n\n // Fix positions.\n index = indexBeforeExits;\n while (index < self.events.length) {\n self.events[index][1].end = {\n ...point\n };\n index++;\n }\n\n // Inject the exits earlier (they’re still also at the end).\n splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n // Discard the duplicate exits.\n self.events.length = index;\n }\n }\n\n /**\n * @param {number} size\n * Size.\n * @returns {undefined}\n * Nothing.\n */\n function exitContainers(size) {\n let index = stack.length;\n\n // Exit open containers.\n while (index-- > size) {\n const entry = stack[index];\n self.containerState = entry[1];\n entry[0].exit.call(self, effects);\n }\n stack.length = size;\n }\n function closeFlow() {\n childFlow.write([null]);\n childToken = undefined;\n childFlow = undefined;\n self.containerState._closeFlow = undefined;\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n * Tokenizer.\n */\nfunction tokenizeContainer(effects, ok, nok) {\n // Always populated by defaults.\n\n return factorySpace(effects, effects.attempt(this.parser.constructs.document, ok, nok), \"linePrefix\", this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4);\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\nimport { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n * Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n * Group.\n */\nexport function classifyCharacter(code) {\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return 1;\n }\n if (unicodePunctuation(code)) {\n return 2;\n }\n}","/**\n * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types'\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs\n * List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n * List of events.\n * @param {TokenizeContext} context\n * Context used by `tokenize`.\n * @returns {Array<Event>}\n * Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n /** @type {Array<Resolver>} */\n const called = []\n let index = -1\n\n while (++index < constructs.length) {\n const resolve = constructs[index].resolveAll\n\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context)\n called.push(resolve)\n }\n }\n\n return events\n}\n","/**\n * @import {\n * Code,\n * Construct,\n * Event,\n * Point,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { push, splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const attention = {\n name: 'attention',\n resolveAll: resolveAllAttention,\n tokenize: tokenizeAttention\n};\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n let index = -1;\n /** @type {number} */\n let open;\n /** @type {Token} */\n let group;\n /** @type {Token} */\n let text;\n /** @type {Token} */\n let openingSequence;\n /** @type {Token} */\n let closingSequence;\n /** @type {number} */\n let use;\n /** @type {Array<Event>} */\n let nextEvents;\n /** @type {number} */\n let offset;\n\n // Walk through all events.\n //\n // Note: performance of this is fine on an mb of normal markdown, but it’s\n // a bottleneck for malicious stuff.\n while (++index < events.length) {\n // Find a token that can close.\n if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\n open = index;\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open &&\n // If the markers are the same:\n context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n // If the opening can close or the closing can open,\n // and the close size *is not* a multiple of three,\n // but the sum of the opening and closing size *is* multiple of three,\n // then don’t match.\n if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n continue;\n }\n\n // Number of markers to use from the sequence.\n use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n const start = {\n ...events[open][1].end\n };\n const end = {\n ...events[index][1].start\n };\n movePoint(start, -use);\n movePoint(end, use);\n openingSequence = {\n type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n start,\n end: {\n ...events[open][1].end\n }\n };\n closingSequence = {\n type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n start: {\n ...events[index][1].start\n },\n end\n };\n text = {\n type: use > 1 ? \"strongText\" : \"emphasisText\",\n start: {\n ...events[open][1].end\n },\n end: {\n ...events[index][1].start\n }\n };\n group = {\n type: use > 1 ? \"strong\" : \"emphasis\",\n start: {\n ...openingSequence.start\n },\n end: {\n ...closingSequence.end\n }\n };\n events[open][1].end = {\n ...openingSequence.start\n };\n events[index][1].start = {\n ...closingSequence.end\n };\n nextEvents = [];\n\n // If there are more markers in the opening, add them before.\n if (events[open][1].end.offset - events[open][1].start.offset) {\n nextEvents = push(nextEvents, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n }\n\n // Opening.\n nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]);\n\n // Always populated by defaults.\n\n // Between.\n nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context));\n\n // Closing.\n nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]);\n\n // If there are more markers in the closing, add them after.\n if (events[index][1].end.offset - events[index][1].start.offset) {\n offset = 2;\n nextEvents = push(nextEvents, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\n } else {\n offset = 0;\n }\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - offset - 2;\n break;\n }\n }\n }\n }\n\n // Remove remaining sequences.\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === 'attentionSequence') {\n events[index][1].type = 'data';\n }\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n const previous = this.previous;\n const before = classifyCharacter(previous);\n\n /** @type {NonNullable<Code>} */\n let marker;\n return start;\n\n /**\n * Before a sequence.\n *\n * ```markdown\n * > | **\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n marker = code;\n effects.enter('attentionSequence');\n return inside(code);\n }\n\n /**\n * In a sequence.\n *\n * ```markdown\n * > | **\n * ^^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker) {\n effects.consume(code);\n return inside;\n }\n const token = effects.exit('attentionSequence');\n\n // To do: next major: move this to resolver, just like `markdown-rs`.\n const after = classifyCharacter(code);\n\n // Always populated by defaults.\n\n const open = !after || after === 2 && before || attentionMarkers.includes(code);\n const close = !before || before === 2 && after || attentionMarkers.includes(previous);\n token._open = Boolean(marker === 42 ? open : open && (before || !close));\n token._close = Boolean(marker === 42 ? close : close && (after || !open));\n return ok(code);\n }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * Point.\n * @param {number} offset\n * Amount to move.\n * @returns {undefined}\n * Nothing.\n */\nfunction movePoint(point, offset) {\n point.column += offset;\n point.offset += offset;\n point._bufferIndex += offset;\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\nexport const autolink = {\n name: 'autolink',\n tokenize: tokenizeAutolink\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n let size = 0;\n return start;\n\n /**\n * Start of an autolink.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * > | a<user@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"autolink\");\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.enter(\"autolinkProtocol\");\n return open;\n }\n\n /**\n * After `<`, at protocol or atext.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * > | a<user@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (asciiAlpha(code)) {\n effects.consume(code);\n return schemeOrEmailAtext;\n }\n if (code === 64) {\n return nok(code);\n }\n return emailAtext(code);\n }\n\n /**\n * At second byte of protocol or atext.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * > | a<user@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeOrEmailAtext(code) {\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n // Count the previous alphabetical from `open` too.\n size = 1;\n return schemeInsideOrEmailAtext(code);\n }\n return emailAtext(code);\n }\n\n /**\n * In ambiguous protocol or atext.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * > | a<user@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeInsideOrEmailAtext(code) {\n if (code === 58) {\n effects.consume(code);\n size = 0;\n return urlInside;\n }\n\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\n effects.consume(code);\n return schemeInsideOrEmailAtext;\n }\n size = 0;\n return emailAtext(code);\n }\n\n /**\n * After protocol, in URL.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function urlInside(code) {\n if (code === 62) {\n effects.exit(\"autolinkProtocol\");\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.exit(\"autolink\");\n return ok;\n }\n\n // ASCII control, space, or `<`.\n if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n return nok(code);\n }\n effects.consume(code);\n return urlInside;\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | a<user.name@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailAtext(code) {\n if (code === 64) {\n effects.consume(code);\n return emailAtSignOrDot;\n }\n if (asciiAtext(code)) {\n effects.consume(code);\n return emailAtext;\n }\n return nok(code);\n }\n\n /**\n * In label, after at-sign or dot.\n *\n * ```markdown\n * > | a<user.name@example.com>b\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function emailAtSignOrDot(code) {\n return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);\n }\n\n /**\n * In label, where `.` and `>` are allowed.\n *\n * ```markdown\n * > | a<user.name@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailLabel(code) {\n if (code === 46) {\n effects.consume(code);\n size = 0;\n return emailAtSignOrDot;\n }\n if (code === 62) {\n // Exit, then change the token type.\n effects.exit(\"autolinkProtocol\").type = \"autolinkEmail\";\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.exit(\"autolink\");\n return ok;\n }\n return emailValue(code);\n }\n\n /**\n * In label, where `.` and `>` are *not* allowed.\n *\n * Though, this is also used in `emailLabel` to parse other values.\n *\n * ```markdown\n * > | a<user.name@ex-ample.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailValue(code) {\n // ASCII alphanumeric or `-`.\n if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n const next = code === 45 ? emailValue : emailLabel;\n effects.consume(code);\n return next;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blankLine = {\n partial: true,\n tokenize: tokenizeBlankLine\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n return start;\n\n /**\n * Start of blank line.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n return markdownSpace(code) ? factorySpace(effects, after, \"linePrefix\")(code) : after(code);\n }\n\n /**\n * At eof/eol, after optional whitespace.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * Exiter,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blockQuote = {\n continuation: {\n tokenize: tokenizeBlockQuoteContinuation\n },\n exit,\n name: 'blockQuote',\n tokenize: tokenizeBlockQuoteStart\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of block quote.\n *\n * ```markdown\n * > | > a\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (code === 62) {\n const state = self.containerState;\n if (!state.open) {\n effects.enter(\"blockQuote\", {\n _container: true\n });\n state.open = true;\n }\n effects.enter(\"blockQuotePrefix\");\n effects.enter(\"blockQuoteMarker\");\n effects.consume(code);\n effects.exit(\"blockQuoteMarker\");\n return after;\n }\n return nok(code);\n }\n\n /**\n * After `>`, before optional whitespace.\n *\n * ```markdown\n * > | > a\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (markdownSpace(code)) {\n effects.enter(\"blockQuotePrefixWhitespace\");\n effects.consume(code);\n effects.exit(\"blockQuotePrefixWhitespace\");\n effects.exit(\"blockQuotePrefix\");\n return ok;\n }\n effects.exit(\"blockQuotePrefix\");\n return ok(code);\n }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n const self = this;\n return contStart;\n\n /**\n * Start of block quote continuation.\n *\n * Also used to parse the first block quote opening.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @type {State}\n */\n function contStart(code) {\n if (markdownSpace(code)) {\n // Always populated by defaults.\n\n return factorySpace(effects, contBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n }\n return contBefore(code);\n }\n\n /**\n * At `>`, after optional whitespace.\n *\n * Also used to parse the first block quote opening.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @type {State}\n */\n function contBefore(code) {\n return effects.attempt(blockQuote, ok, nok)(code);\n }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n effects.exit(\"blockQuote\");\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiPunctuation } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterEscape = {\n name: 'characterEscape',\n tokenize: tokenizeCharacterEscape\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n return start;\n\n /**\n * Start of character escape.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"characterEscape\");\n effects.enter(\"escapeMarker\");\n effects.consume(code);\n effects.exit(\"escapeMarker\");\n return inside;\n }\n\n /**\n * After `\\`, at punctuation.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // ASCII punctuation.\n if (asciiPunctuation(code)) {\n effects.enter(\"characterEscapeValue\");\n effects.consume(code);\n effects.exit(\"characterEscapeValue\");\n effects.exit(\"characterEscape\");\n return ok;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterReference = {\n name: 'characterReference',\n tokenize: tokenizeCharacterReference\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n const self = this;\n let size = 0;\n /** @type {number} */\n let max;\n /** @type {(code: Code) => boolean} */\n let test;\n return start;\n\n /**\n * Start of character reference.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"characterReference\");\n effects.enter(\"characterReferenceMarker\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarker\");\n return open;\n }\n\n /**\n * After `&`, at `#` for numeric references or alphanumeric for named\n * references.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 35) {\n effects.enter(\"characterReferenceMarkerNumeric\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarkerNumeric\");\n return numeric;\n }\n effects.enter(\"characterReferenceValue\");\n max = 31;\n test = asciiAlphanumeric;\n return value(code);\n }\n\n /**\n * After `#`, at `x` for hexadecimals or digit for decimals.\n *\n * ```markdown\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function numeric(code) {\n if (code === 88 || code === 120) {\n effects.enter(\"characterReferenceMarkerHexadecimal\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarkerHexadecimal\");\n effects.enter(\"characterReferenceValue\");\n max = 6;\n test = asciiHexDigit;\n return value;\n }\n effects.enter(\"characterReferenceValue\");\n max = 7;\n test = asciiDigit;\n return value(code);\n }\n\n /**\n * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n *\n * The character reference kind defines what and how many characters are\n * allowed.\n *\n * ```markdown\n * > | a&b\n * ^^^\n * > | a{b\n * ^^^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function value(code) {\n if (code === 59 && size) {\n const token = effects.exit(\"characterReferenceValue\");\n if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\n return nok(code);\n }\n\n // To do: `markdown-rs` uses a different name:\n // `CharacterReferenceMarkerSemi`.\n effects.enter(\"characterReferenceMarker\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarker\");\n effects.exit(\"characterReference\");\n return ok;\n }\n if (test(code) && size++ < max) {\n effects.consume(code);\n return value;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nconst nonLazyContinuation = {\n partial: true,\n tokenize: tokenizeNonLazyContinuation\n};\n\n/** @type {Construct} */\nexport const codeFenced = {\n concrete: true,\n name: 'codeFenced',\n tokenize: tokenizeCodeFenced\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n const self = this;\n /** @type {Construct} */\n const closeStart = {\n partial: true,\n tokenize: tokenizeCloseStart\n };\n let initialPrefix = 0;\n let sizeOpen = 0;\n /** @type {NonNullable<Code>} */\n let marker;\n return start;\n\n /**\n * Start of code.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse whitespace like `markdown-rs`.\n return beforeSequenceOpen(code);\n }\n\n /**\n * In opening fence, after prefix, at sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeSequenceOpen(code) {\n const tail = self.events[self.events.length - 1];\n initialPrefix = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n marker = code;\n effects.enter(\"codeFenced\");\n effects.enter(\"codeFencedFence\");\n effects.enter(\"codeFencedFenceSequence\");\n return sequenceOpen(code);\n }\n\n /**\n * In opening fence sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === marker) {\n sizeOpen++;\n effects.consume(code);\n return sequenceOpen;\n }\n if (sizeOpen < 3) {\n return nok(code);\n }\n effects.exit(\"codeFencedFenceSequence\");\n return markdownSpace(code) ? factorySpace(effects, infoBefore, \"whitespace\")(code) : infoBefore(code);\n }\n\n /**\n * In opening fence, after the sequence (and optional whitespace), before info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function infoBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFencedFence\");\n return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n }\n effects.enter(\"codeFencedFenceInfo\");\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return info(code);\n }\n\n /**\n * In info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function info(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceInfo\");\n return infoBefore(code);\n }\n if (markdownSpace(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceInfo\");\n return factorySpace(effects, metaBefore, \"whitespace\")(code);\n }\n if (code === 96 && code === marker) {\n return nok(code);\n }\n effects.consume(code);\n return info;\n }\n\n /**\n * In opening fence, after info and whitespace, before meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function metaBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n return infoBefore(code);\n }\n effects.enter(\"codeFencedFenceMeta\");\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return meta(code);\n }\n\n /**\n * In meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function meta(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceMeta\");\n return infoBefore(code);\n }\n if (code === 96 && code === marker) {\n return nok(code);\n }\n effects.consume(code);\n return meta;\n }\n\n /**\n * At eol/eof in code, before a non-lazy closing fence or content.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function atNonLazyBreak(code) {\n return effects.attempt(closeStart, after, contentBefore)(code);\n }\n\n /**\n * Before code content, not a closing fence, at eol.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentBefore(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return contentStart;\n }\n\n /**\n * Before code content, not a closing fence.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentStart(code) {\n return initialPrefix > 0 && markdownSpace(code) ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialPrefix + 1)(code) : beforeContentChunk(code);\n }\n\n /**\n * Before code content, after optional prefix.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeContentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n }\n effects.enter(\"codeFlowValue\");\n return contentChunk(code);\n }\n\n /**\n * In code content.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^^^^^^^^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFlowValue\");\n return beforeContentChunk(code);\n }\n effects.consume(code);\n return contentChunk;\n }\n\n /**\n * After code.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n effects.exit(\"codeFenced\");\n return ok(code);\n }\n\n /**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\n function tokenizeCloseStart(effects, ok, nok) {\n let size = 0;\n return startBefore;\n\n /**\n *\n *\n * @type {State}\n */\n function startBefore(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return start;\n }\n\n /**\n * Before closing fence, at optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Always populated by defaults.\n\n // To do: `enter` here or in next state?\n effects.enter(\"codeFencedFence\");\n return markdownSpace(code) ? factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : beforeSequenceClose(code);\n }\n\n /**\n * In closing fence, after optional whitespace, at sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeSequenceClose(code) {\n if (code === marker) {\n effects.enter(\"codeFencedFenceSequence\");\n return sequenceClose(code);\n }\n return nok(code);\n }\n\n /**\n * In closing fence sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n if (code === marker) {\n size++;\n effects.consume(code);\n return sequenceClose;\n }\n if (size >= sizeOpen) {\n effects.exit(\"codeFencedFenceSequence\");\n return markdownSpace(code) ? factorySpace(effects, sequenceCloseAfter, \"whitespace\")(code) : sequenceCloseAfter(code);\n }\n return nok(code);\n }\n\n /**\n * After closing fence sequence, after optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceCloseAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFencedFence\");\n return ok(code);\n }\n return nok(code);\n }\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n *\n *\n * @type {State}\n */\n function start(code) {\n if (code === null) {\n return nok(code);\n }\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return lineStart;\n }\n\n /**\n *\n *\n * @type {State}\n */\n function lineStart(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeIndented = {\n name: 'codeIndented',\n tokenize: tokenizeCodeIndented\n};\n\n/** @type {Construct} */\nconst furtherStart = {\n partial: true,\n tokenize: tokenizeFurtherStart\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of code (indented).\n *\n * > **Parsing note**: it is not needed to check if this first line is a\n * > filled line (that it has a non-whitespace character), because blank lines\n * > are parsed already, so we never run into that.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: manually check if interrupting like `markdown-rs`.\n\n effects.enter(\"codeIndented\");\n // To do: use an improved `space_or_tab` function like `markdown-rs`,\n // so that we can drop the next state.\n return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n }\n\n /**\n * At start, after 1 or 4 spaces.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? atBreak(code) : nok(code);\n }\n\n /**\n * At a break.\n *\n * ```markdown\n * > | aaa\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === null) {\n return after(code);\n }\n if (markdownLineEnding(code)) {\n return effects.attempt(furtherStart, atBreak, after)(code);\n }\n effects.enter(\"codeFlowValue\");\n return inside(code);\n }\n\n /**\n * In code content.\n *\n * ```markdown\n * > | aaa\n * ^^^^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFlowValue\");\n return atBreak(code);\n }\n effects.consume(code);\n return inside;\n }\n\n /** @type {State} */\n function after(code) {\n effects.exit(\"codeIndented\");\n // To do: allow interrupting like `markdown-rs`.\n // Feel free to interrupt.\n // tokenizer.interrupt = false\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n const self = this;\n return furtherStart;\n\n /**\n * At eol, trying to parse another indent.\n *\n * ```markdown\n * > | aaa\n * ^\n * | bbb\n * ```\n *\n * @type {State}\n */\n function furtherStart(code) {\n // To do: improve `lazy` / `pierce` handling.\n // If this is a lazy line, it can’t be code.\n if (self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return furtherStart;\n }\n\n // To do: the code here in `micromark-js` is a bit different from\n // `markdown-rs` because there it can attempt spaces.\n // We can’t yet.\n //\n // To do: use an improved `space_or_tab` function like `markdown-rs`,\n // so that we can drop the next state.\n return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n }\n\n /**\n * At start, after 1 or 4 spaces.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? ok(code) : markdownLineEnding(code) ? furtherStart(code) : nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * Previous,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeText = {\n name: 'codeText',\n previous,\n resolve: resolveCodeText,\n tokenize: tokenizeCodeText\n};\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n let tailExitIndex = events.length - 4;\n let headEnterIndex = 3;\n /** @type {number} */\n let index;\n /** @type {number | undefined} */\n let enter;\n\n // If we start and end with an EOL or a space.\n if ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\n index = headEnterIndex;\n\n // And we have data.\n while (++index < tailExitIndex) {\n if (events[index][1].type === \"codeTextData\") {\n // Then we have padding.\n events[headEnterIndex][1].type = \"codeTextPadding\";\n events[tailExitIndex][1].type = \"codeTextPadding\";\n headEnterIndex += 2;\n tailExitIndex -= 2;\n break;\n }\n }\n }\n\n // Merge adjacent spaces and data.\n index = headEnterIndex - 1;\n tailExitIndex++;\n while (++index <= tailExitIndex) {\n if (enter === undefined) {\n if (index !== tailExitIndex && events[index][1].type !== \"lineEnding\") {\n enter = index;\n }\n } else if (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\n events[enter][1].type = \"codeTextData\";\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end;\n events.splice(enter + 2, index - enter - 2);\n tailExitIndex -= index - enter - 2;\n index = enter + 2;\n }\n enter = undefined;\n }\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Previous}\n */\nfunction previous(code) {\n // If there is a previous code, there will always be a tail.\n return code !== 96 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n const self = this;\n let sizeOpen = 0;\n /** @type {number} */\n let size;\n /** @type {Token} */\n let token;\n return start;\n\n /**\n * Start of code (text).\n *\n * ```markdown\n * > | `a`\n * ^\n * > | \\`a`\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"codeText\");\n effects.enter(\"codeTextSequence\");\n return sequenceOpen(code);\n }\n\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === 96) {\n effects.consume(code);\n sizeOpen++;\n return sequenceOpen;\n }\n effects.exit(\"codeTextSequence\");\n return between(code);\n }\n\n /**\n * Between something and something else.\n *\n * ```markdown\n * > | `a`\n * ^^\n * ```\n *\n * @type {State}\n */\n function between(code) {\n // EOF.\n if (code === null) {\n return nok(code);\n }\n\n // To do: next major: don’t do spaces in resolve, but when compiling,\n // like `markdown-rs`.\n // Tabs don’t work, and virtual spaces don’t make sense.\n if (code === 32) {\n effects.enter('space');\n effects.consume(code);\n effects.exit('space');\n return between;\n }\n\n // Closing fence? Could also be data.\n if (code === 96) {\n token = effects.enter(\"codeTextSequence\");\n size = 0;\n return sequenceClose(code);\n }\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return between;\n }\n\n // Data.\n effects.enter(\"codeTextData\");\n return data(code);\n }\n\n /**\n * In data.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function data(code) {\n if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\n effects.exit(\"codeTextData\");\n return between(code);\n }\n effects.consume(code);\n return data;\n }\n\n /**\n * In closing sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n // More.\n if (code === 96) {\n effects.consume(code);\n size++;\n return sequenceClose;\n }\n\n // Done!\n if (size === sizeOpen) {\n effects.exit(\"codeTextSequence\");\n effects.exit(\"codeText\");\n return ok(code);\n }\n\n // More or less accents: mark as data.\n token.type = \"codeTextData\";\n return data(code);\n }\n}","/**\n * Some of the internal operations of micromark do lots of editing\n * operations on very large arrays. This runs into problems with two\n * properties of most circa-2020 JavaScript interpreters:\n *\n * - Array-length modifications at the high end of an array (push/pop) are\n * expected to be common and are implemented in (amortized) time\n * proportional to the number of elements added or removed, whereas\n * other operations (shift/unshift and splice) are much less efficient.\n * - Function arguments are passed on the stack, so adding tens of thousands\n * of elements to an array with `arr.push(...newElements)` will frequently\n * cause stack overflows. (see <https://stackoverflow.com/questions/22123769/rangeerror-maximum-call-stack-size-exceeded-why>)\n *\n * SpliceBuffers are an implementation of gap buffers, which are a\n * generalization of the \"queue made of two stacks\" idea. The splice buffer\n * maintains a cursor, and moving the cursor has cost proportional to the\n * distance the cursor moves, but inserting, deleting, or splicing in\n * new information at the cursor is as efficient as the push/pop operation.\n * This allows for an efficient sequence of splices (or pushes, pops, shifts,\n * or unshifts) as long such edits happen at the same part of the array or\n * generally sweep through the array from the beginning to the end.\n *\n * The interface for splice buffers also supports large numbers of inputs by\n * passing a single array argument rather passing multiple arguments on the\n * function call stack.\n *\n * @template T\n * Item type.\n */\nexport class SpliceBuffer {\n /**\n * @param {ReadonlyArray<T> | null | undefined} [initial]\n * Initial items (optional).\n * @returns\n * Splice buffer.\n */\n constructor(initial) {\n /** @type {Array<T>} */\n this.left = initial ? [...initial] : [];\n /** @type {Array<T>} */\n this.right = [];\n }\n\n /**\n * Array access;\n * does not move the cursor.\n *\n * @param {number} index\n * Index.\n * @return {T}\n * Item.\n */\n get(index) {\n if (index < 0 || index >= this.left.length + this.right.length) {\n throw new RangeError('Cannot access index `' + index + '` in a splice buffer of size `' + (this.left.length + this.right.length) + '`');\n }\n if (index < this.left.length) return this.left[index];\n return this.right[this.right.length - index + this.left.length - 1];\n }\n\n /**\n * The length of the splice buffer, one greater than the largest index in the\n * array.\n */\n get length() {\n return this.left.length + this.right.length;\n }\n\n /**\n * Remove and return `list[0]`;\n * moves the cursor to `0`.\n *\n * @returns {T | undefined}\n * Item, optional.\n */\n shift() {\n this.setCursor(0);\n return this.right.pop();\n }\n\n /**\n * Slice the buffer to get an array;\n * does not move the cursor.\n *\n * @param {number} start\n * Start.\n * @param {number | null | undefined} [end]\n * End (optional).\n * @returns {Array<T>}\n * Array of items.\n */\n slice(start, end) {\n /** @type {number} */\n const stop = end === null || end === undefined ? Number.POSITIVE_INFINITY : end;\n if (stop < this.left.length) {\n return this.left.slice(start, stop);\n }\n if (start > this.left.length) {\n return this.right.slice(this.right.length - stop + this.left.length, this.right.length - start + this.left.length).reverse();\n }\n return this.left.slice(start).concat(this.right.slice(this.right.length - stop + this.left.length).reverse());\n }\n\n /**\n * Mimics the behavior of Array.prototype.splice() except for the change of\n * interface necessary to avoid segfaults when patching in very large arrays.\n *\n * This operation moves cursor is moved to `start` and results in the cursor\n * placed after any inserted items.\n *\n * @param {number} start\n * Start;\n * zero-based index at which to start changing the array;\n * negative numbers count backwards from the end of the array and values\n * that are out-of bounds are clamped to the appropriate end of the array.\n * @param {number | null | undefined} [deleteCount=0]\n * Delete count (default: `0`);\n * maximum number of elements to delete, starting from start.\n * @param {Array<T> | null | undefined} [items=[]]\n * Items to include in place of the deleted items (default: `[]`).\n * @return {Array<T>}\n * Any removed items.\n */\n splice(start, deleteCount, items) {\n /** @type {number} */\n const count = deleteCount || 0;\n this.setCursor(Math.trunc(start));\n const removed = this.right.splice(this.right.length - count, Number.POSITIVE_INFINITY);\n if (items) chunkedPush(this.left, items);\n return removed.reverse();\n }\n\n /**\n * Remove and return the highest-numbered item in the array, so\n * `list[list.length - 1]`;\n * Moves the cursor to `length`.\n *\n * @returns {T | undefined}\n * Item, optional.\n */\n pop() {\n this.setCursor(Number.POSITIVE_INFINITY);\n return this.left.pop();\n }\n\n /**\n * Inserts a single item to the high-numbered side of the array;\n * moves the cursor to `length`.\n *\n * @param {T} item\n * Item.\n * @returns {undefined}\n * Nothing.\n */\n push(item) {\n this.setCursor(Number.POSITIVE_INFINITY);\n this.left.push(item);\n }\n\n /**\n * Inserts many items to the high-numbered side of the array.\n * Moves the cursor to `length`.\n *\n * @param {Array<T>} items\n * Items.\n * @returns {undefined}\n * Nothing.\n */\n pushMany(items) {\n this.setCursor(Number.POSITIVE_INFINITY);\n chunkedPush(this.left, items);\n }\n\n /**\n * Inserts a single item to the low-numbered side of the array;\n * Moves the cursor to `0`.\n *\n * @param {T} item\n * Item.\n * @returns {undefined}\n * Nothing.\n */\n unshift(item) {\n this.setCursor(0);\n this.right.push(item);\n }\n\n /**\n * Inserts many items to the low-numbered side of the array;\n * moves the cursor to `0`.\n *\n * @param {Array<T>} items\n * Items.\n * @returns {undefined}\n * Nothing.\n */\n unshiftMany(items) {\n this.setCursor(0);\n chunkedPush(this.right, items.reverse());\n }\n\n /**\n * Move the cursor to a specific position in the array. Requires\n * time proportional to the distance moved.\n *\n * If `n < 0`, the cursor will end up at the beginning.\n * If `n > length`, the cursor will end up at the end.\n *\n * @param {number} n\n * Position.\n * @return {undefined}\n * Nothing.\n */\n setCursor(n) {\n if (n === this.left.length || n > this.left.length && this.right.length === 0 || n < 0 && this.left.length === 0) return;\n if (n < this.left.length) {\n // Move cursor to the this.left\n const removed = this.left.splice(n, Number.POSITIVE_INFINITY);\n chunkedPush(this.right, removed.reverse());\n } else {\n // Move cursor to the this.right\n const removed = this.right.splice(this.left.length + this.right.length - n, Number.POSITIVE_INFINITY);\n chunkedPush(this.left, removed.reverse());\n }\n }\n}\n\n/**\n * Avoid stack overflow by pushing items onto the stack in segments\n *\n * @template T\n * Item type.\n * @param {Array<T>} list\n * List to inject into.\n * @param {ReadonlyArray<T>} right\n * Items to inject.\n * @return {undefined}\n * Nothing.\n */\nfunction chunkedPush(list, right) {\n /** @type {number} */\n let chunkStart = 0;\n if (right.length < 10000) {\n list.push(...right);\n } else {\n while (chunkStart < right.length) {\n list.push(...right.slice(chunkStart, chunkStart + 10000));\n chunkStart += 10000;\n }\n }\n}","/**\n * @import {Chunk, Event, Token} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { SpliceBuffer } from './lib/splice-buffer.js';\n\n// Hidden API exposed for testing.\nexport { SpliceBuffer } from './lib/splice-buffer.js';\n\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} eventsArray\n * List of events.\n * @returns {boolean}\n * Whether subtokens were found.\n */\n// eslint-disable-next-line complexity\nexport function subtokenize(eventsArray) {\n /** @type {Record<string, number>} */\n const jumps = {};\n let index = -1;\n /** @type {Event} */\n let event;\n /** @type {number | undefined} */\n let lineIndex;\n /** @type {number} */\n let otherIndex;\n /** @type {Event} */\n let otherEvent;\n /** @type {Array<Event>} */\n let parameters;\n /** @type {Array<Event>} */\n let subevents;\n /** @type {boolean | undefined} */\n let more;\n const events = new SpliceBuffer(eventsArray);\n while (++index < events.length) {\n while (index in jumps) {\n index = jumps[index];\n }\n event = events.get(index);\n\n // Add a hook for the GFM tasklist extension, which needs to know if text\n // is in the first content of a list item.\n if (index && event[1].type === \"chunkFlow\" && events.get(index - 1)[1].type === \"listItemPrefix\") {\n subevents = event[1]._tokenizer.events;\n otherIndex = 0;\n if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"lineEndingBlank\") {\n otherIndex += 2;\n }\n if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"content\") {\n while (++otherIndex < subevents.length) {\n if (subevents[otherIndex][1].type === \"content\") {\n break;\n }\n if (subevents[otherIndex][1].type === \"chunkText\") {\n subevents[otherIndex][1]._isInFirstContentOfListItem = true;\n otherIndex++;\n }\n }\n }\n }\n\n // Enter.\n if (event[0] === 'enter') {\n if (event[1].contentType) {\n Object.assign(jumps, subcontent(events, index));\n index = jumps[index];\n more = true;\n }\n }\n // Exit.\n else if (event[1]._container) {\n otherIndex = index;\n lineIndex = undefined;\n while (otherIndex--) {\n otherEvent = events.get(otherIndex);\n if (otherEvent[1].type === \"lineEnding\" || otherEvent[1].type === \"lineEndingBlank\") {\n if (otherEvent[0] === 'enter') {\n if (lineIndex) {\n events.get(lineIndex)[1].type = \"lineEndingBlank\";\n }\n otherEvent[1].type = \"lineEnding\";\n lineIndex = otherIndex;\n }\n } else if (otherEvent[1].type === \"linePrefix\" || otherEvent[1].type === \"listItemIndent\") {\n // Move past.\n } else {\n break;\n }\n }\n if (lineIndex) {\n // Fix position.\n event[1].end = {\n ...events.get(lineIndex)[1].start\n };\n\n // Switch container exit w/ line endings.\n parameters = events.slice(lineIndex, index);\n parameters.unshift(event);\n events.splice(lineIndex, index - lineIndex + 1, parameters);\n }\n }\n }\n\n // The changes to the `events` buffer must be copied back into the eventsArray\n splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0));\n return !more;\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {SpliceBuffer<Event>} events\n * Events.\n * @param {number} eventIndex\n * Index.\n * @returns {Record<string, number>}\n * Gaps.\n */\nfunction subcontent(events, eventIndex) {\n const token = events.get(eventIndex)[1];\n const context = events.get(eventIndex)[2];\n let startPosition = eventIndex - 1;\n /** @type {Array<number>} */\n const startPositions = [];\n let tokenizer = token._tokenizer;\n if (!tokenizer) {\n tokenizer = context.parser[token.contentType](token.start);\n if (token._contentTypeTextTrailing) {\n tokenizer._contentTypeTextTrailing = true;\n }\n }\n const childEvents = tokenizer.events;\n /** @type {Array<[number, number]>} */\n const jumps = [];\n /** @type {Record<string, number>} */\n const gaps = {};\n /** @type {Array<Chunk>} */\n let stream;\n /** @type {Token | undefined} */\n let previous;\n let index = -1;\n /** @type {Token | undefined} */\n let current = token;\n let adjust = 0;\n let start = 0;\n const breaks = [start];\n\n // Loop forward through the linked tokens to pass them in order to the\n // subtokenizer.\n while (current) {\n // Find the position of the event for this token.\n while (events.get(++startPosition)[1] !== current) {\n // Empty.\n }\n startPositions.push(startPosition);\n if (!current._tokenizer) {\n stream = context.sliceStream(current);\n if (!current.next) {\n stream.push(null);\n }\n if (previous) {\n tokenizer.defineSkip(current.start);\n }\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = true;\n }\n tokenizer.write(stream);\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = undefined;\n }\n }\n\n // Unravel the next token.\n previous = current;\n current = current.next;\n }\n\n // Now, loop back through all events (and linked tokens), to figure out which\n // parts belong where.\n current = token;\n while (++index < childEvents.length) {\n if (\n // Find a void token that includes a break.\n childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) {\n start = index + 1;\n breaks.push(start);\n // Help GC.\n current._tokenizer = undefined;\n current.previous = undefined;\n current = current.next;\n }\n }\n\n // Help GC.\n tokenizer.events = [];\n\n // If there’s one more token (which is the cases for lines that end in an\n // EOF), that’s perfect: the last point we found starts it.\n // If there isn’t then make sure any remaining content is added to it.\n if (current) {\n // Help GC.\n current._tokenizer = undefined;\n current.previous = undefined;\n } else {\n breaks.pop();\n }\n\n // Now splice the events from the subtokenizer into the current events,\n // moving back to front so that splice indices aren’t affected.\n index = breaks.length;\n while (index--) {\n const slice = childEvents.slice(breaks[index], breaks[index + 1]);\n const start = startPositions.pop();\n jumps.push([start, start + slice.length - 1]);\n events.splice(start, 2, slice);\n }\n jumps.reverse();\n index = -1;\n while (++index < jumps.length) {\n gaps[adjust + jumps[index][0]] = adjust + jumps[index][1];\n adjust += jumps[index][1] - jumps[index][0] - 1;\n }\n return gaps;\n}","/**\n * @import {\n * Construct,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { subtokenize } from 'micromark-util-subtokenize';\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n resolve: resolveContent,\n tokenize: tokenizeContent\n};\n\n/** @type {Construct} */\nconst continuationConstruct = {\n partial: true,\n tokenize: tokenizeContinuation\n};\n\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n subtokenize(events);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n /** @type {Token | undefined} */\n let previous;\n return chunkStart;\n\n /**\n * Before a content chunk.\n *\n * ```markdown\n * > | abc\n * ^\n * ```\n *\n * @type {State}\n */\n function chunkStart(code) {\n effects.enter(\"content\");\n previous = effects.enter(\"chunkContent\", {\n contentType: \"content\"\n });\n return chunkInside(code);\n }\n\n /**\n * In a content chunk.\n *\n * ```markdown\n * > | abc\n * ^^^\n * ```\n *\n * @type {State}\n */\n function chunkInside(code) {\n if (code === null) {\n return contentEnd(code);\n }\n\n // To do: in `markdown-rs`, each line is parsed on its own, and everything\n // is stitched together resolving.\n if (markdownLineEnding(code)) {\n return effects.check(continuationConstruct, contentContinue, contentEnd)(code);\n }\n\n // Data.\n effects.consume(code);\n return chunkInside;\n }\n\n /**\n *\n *\n * @type {State}\n */\n function contentEnd(code) {\n effects.exit(\"chunkContent\");\n effects.exit(\"content\");\n return ok(code);\n }\n\n /**\n *\n *\n * @type {State}\n */\n function contentContinue(code) {\n effects.consume(code);\n effects.exit(\"chunkContent\");\n previous.next = effects.enter(\"chunkContent\", {\n contentType: \"content\",\n previous\n });\n previous = previous.next;\n return chunkInside;\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n const self = this;\n return startLookahead;\n\n /**\n *\n *\n * @type {State}\n */\n function startLookahead(code) {\n effects.exit(\"chunkContent\");\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return factorySpace(effects, prefixed, \"linePrefix\");\n }\n\n /**\n *\n *\n * @type {State}\n */\n function prefixed(code) {\n if (code === null || markdownLineEnding(code)) {\n return nok(code);\n }\n\n // Always populated by defaults.\n\n const tail = self.events[self.events.length - 1];\n if (!self.parser.constructs.disable.null.includes('codeIndented') && tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4) {\n return ok(code);\n }\n return effects.interrupt(self.parser.constructs.flow, nok, ok)(code);\n }\n}","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { asciiControl, markdownLineEndingOrSpace, markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * <a>\n * <a\\>b>\n * <a b>\n * <a)>\n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type for whole (`<a>` or `b`).\n * @param {TokenType} literalType\n * Type when enclosed (`<a>`).\n * @param {TokenType} literalMarkerType\n * Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n * Type when not enclosed (`b`).\n * @param {TokenType} stringType\n * Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n * Depth of nested parens (inclusive).\n * @returns {State}\n * Start state.\n */\nexport function factoryDestination(effects, ok, nok, type, literalType, literalMarkerType, rawType, stringType, max) {\n const limit = max || Number.POSITIVE_INFINITY;\n let balance = 0;\n return start;\n\n /**\n * Start of destination.\n *\n * ```markdown\n * > | <aa>\n * ^\n * > | aa\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (code === 60) {\n effects.enter(type);\n effects.enter(literalType);\n effects.enter(literalMarkerType);\n effects.consume(code);\n effects.exit(literalMarkerType);\n return enclosedBefore;\n }\n\n // ASCII control, space, closing paren.\n if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n return nok(code);\n }\n effects.enter(type);\n effects.enter(rawType);\n effects.enter(stringType);\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return raw(code);\n }\n\n /**\n * After `<`, at an enclosed destination.\n *\n * ```markdown\n * > | <aa>\n * ^\n * ```\n *\n * @type {State}\n */\n function enclosedBefore(code) {\n if (code === 62) {\n effects.enter(literalMarkerType);\n effects.consume(code);\n effects.exit(literalMarkerType);\n effects.exit(literalType);\n effects.exit(type);\n return ok;\n }\n effects.enter(stringType);\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return enclosed(code);\n }\n\n /**\n * In enclosed destination.\n *\n * ```markdown\n * > | <aa>\n * ^\n * ```\n *\n * @type {State}\n */\n function enclosed(code) {\n if (code === 62) {\n effects.exit(\"chunkString\");\n effects.exit(stringType);\n return enclosedBefore(code);\n }\n if (code === null || code === 60 || markdownLineEnding(code)) {\n return nok(code);\n }\n effects.consume(code);\n return code === 92 ? enclosedEscape : enclosed;\n }\n\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | <a\\*a>\n * ^\n * ```\n *\n * @type {State}\n */\n function enclosedEscape(code) {\n if (code === 60 || code === 62 || code === 92) {\n effects.consume(code);\n return enclosed;\n }\n return enclosed(code);\n }\n\n /**\n * In raw destination.\n *\n * ```markdown\n * > | aa\n * ^\n * ```\n *\n * @type {State}\n */\n function raw(code) {\n if (!balance && (code === null || code === 41 || markdownLineEndingOrSpace(code))) {\n effects.exit(\"chunkString\");\n effects.exit(stringType);\n effects.exit(rawType);\n effects.exit(type);\n return ok(code);\n }\n if (balance < limit && code === 40) {\n effects.consume(code);\n balance++;\n return raw;\n }\n if (code === 41) {\n effects.consume(code);\n balance--;\n return raw;\n }\n\n // ASCII control (but *not* `\\0`) and space and `(`.\n // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n // doesn’t.\n if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n return nok(code);\n }\n effects.consume(code);\n return code === 92 ? rawEscape : raw;\n }\n\n /**\n * After `\\`, at special character.\n *\n * ```markdown\n * > | a\\*a\n * ^\n * ```\n *\n * @type {State}\n */\n function rawEscape(code) {\n if (code === 40 || code === 41 || code === 92) {\n effects.consume(code);\n return raw;\n }\n return raw(code);\n }\n}","/**\n * @import {\n * Effects,\n * State,\n * TokenizeContext,\n * TokenType\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse labels.\n *\n * > 👉 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n * Tokenize context.\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n * Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n * Type for the identifier (`a`).\n * @returns {State}\n * Start state.\n */\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n const self = this;\n let size = 0;\n /** @type {boolean} */\n let seen;\n return start;\n\n /**\n * Start of label.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(type);\n effects.enter(markerType);\n effects.consume(code);\n effects.exit(markerType);\n effects.enter(stringType);\n return atBreak;\n }\n\n /**\n * In label, at something, before something else.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (size > 999 || code === null || code === 91 || code === 93 && !seen ||\n // To do: remove in the future once we’ve switched from\n // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n // which doesn’t need this.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n code === 94 && !size && '_hiddenFootnoteSupport' in self.parser.constructs) {\n return nok(code);\n }\n if (code === 93) {\n effects.exit(stringType);\n effects.enter(markerType);\n effects.consume(code);\n effects.exit(markerType);\n effects.exit(type);\n return ok;\n }\n\n // To do: indent? Link chunks and EOLs together?\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return atBreak;\n }\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return labelInside(code);\n }\n\n /**\n * In label, in text.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n function labelInside(code) {\n if (code === null || code === 91 || code === 93 || markdownLineEnding(code) || size++ > 999) {\n effects.exit(\"chunkString\");\n return atBreak(code);\n }\n effects.consume(code);\n if (!seen) seen = !markdownSpace(code);\n return code === 92 ? labelEscape : labelInside;\n }\n\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | [a\\*a]\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code);\n size++;\n return labelInside;\n }\n return labelInside(code);\n }\n}","/**\n * @import {\n * Code,\n * Effects,\n * State,\n * TokenType\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n * b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n * Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n * Type for the value (`a`).\n * @returns {State}\n * Start state.\n */\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n /** @type {NonNullable<Code>} */\n let marker;\n return start;\n\n /**\n * Start of title.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (code === 34 || code === 39 || code === 40) {\n effects.enter(type);\n effects.enter(markerType);\n effects.consume(code);\n effects.exit(markerType);\n marker = code === 40 ? 41 : code;\n return begin;\n }\n return nok(code);\n }\n\n /**\n * After opening marker.\n *\n * This is also used at the closing marker.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n function begin(code) {\n if (code === marker) {\n effects.enter(markerType);\n effects.consume(code);\n effects.exit(markerType);\n effects.exit(type);\n return ok;\n }\n effects.enter(stringType);\n return atBreak(code);\n }\n\n /**\n * At something, before something else.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === marker) {\n effects.exit(stringType);\n return begin(marker);\n }\n if (code === null) {\n return nok(code);\n }\n\n // Note: blank lines can’t exist in content.\n if (markdownLineEnding(code)) {\n // To do: use `space_or_tab_eol_with_options`, connect.\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return factorySpace(effects, atBreak, \"linePrefix\");\n }\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return inside(code);\n }\n\n /**\n *\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker || code === null || markdownLineEnding(code)) {\n effects.exit(\"chunkString\");\n return atBreak(code);\n }\n effects.consume(code);\n return code === 92 ? escape : inside;\n }\n\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | \"a\\*b\"\n * ^\n * ```\n *\n * @type {State}\n */\n function escape(code) {\n if (code === marker || code === 92) {\n effects.consume(code);\n return inside;\n }\n return inside(code);\n }\n}","/**\n * @import {Effects, State} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * * line endings or spaces in markdown are often optional, in which case this\n * factory can be used and `ok` will be switched to whether spaces were found\n * or not\n * * one line ending or space can be detected with\n * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @returns {State}\n * Start state.\n */\nexport function factoryWhitespace(effects, ok) {\n /** @type {boolean} */\n let seen;\n return start;\n\n /** @type {State} */\n function start(code) {\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n seen = true;\n return start;\n }\n if (markdownSpace(code)) {\n return factorySpace(effects, start, seen ? \"linePrefix\" : \"lineSuffix\")(code);\n }\n return ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factorySpace } from 'micromark-factory-space';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\n/** @type {Construct} */\nexport const definition = {\n name: 'definition',\n tokenize: tokenizeDefinition\n};\n\n/** @type {Construct} */\nconst titleBefore = {\n partial: true,\n tokenize: tokenizeTitleBefore\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n const self = this;\n /** @type {string} */\n let identifier;\n return start;\n\n /**\n * At start of a definition.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Do not interrupt paragraphs (but do follow definitions).\n // To do: do `interrupt` the way `markdown-rs` does.\n // To do: parse whitespace the way `markdown-rs` does.\n effects.enter(\"definition\");\n return before(code);\n }\n\n /**\n * After optional whitespace, at `[`.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n // To do: parse whitespace the way `markdown-rs` does.\n\n return factoryLabel.call(self, effects, labelAfter,\n // Note: we don’t need to reset the way `markdown-rs` does.\n nok, \"definitionLabel\", \"definitionLabelMarker\", \"definitionLabelString\")(code);\n }\n\n /**\n * After label.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAfter(code) {\n identifier = normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1));\n if (code === 58) {\n effects.enter(\"definitionMarker\");\n effects.consume(code);\n effects.exit(\"definitionMarker\");\n return markerAfter;\n }\n return nok(code);\n }\n\n /**\n * After marker.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function markerAfter(code) {\n // Note: whitespace is optional.\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, destinationBefore)(code) : destinationBefore(code);\n }\n\n /**\n * Before destination.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function destinationBefore(code) {\n return factoryDestination(effects, destinationAfter,\n // Note: we don’t need to reset the way `markdown-rs` does.\n nok, \"definitionDestination\", \"definitionDestinationLiteral\", \"definitionDestinationLiteralMarker\", \"definitionDestinationRaw\", \"definitionDestinationString\")(code);\n }\n\n /**\n * After destination.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function destinationAfter(code) {\n return effects.attempt(titleBefore, after, after)(code);\n }\n\n /**\n * After definition.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return markdownSpace(code) ? factorySpace(effects, afterWhitespace, \"whitespace\")(code) : afterWhitespace(code);\n }\n\n /**\n * After definition, after optional whitespace.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function afterWhitespace(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"definition\");\n\n // Note: we don’t care about uniqueness.\n // It’s likely that that doesn’t happen very frequently.\n // It is more likely that it wastes precious time.\n self.parser.defined.push(identifier);\n\n // To do: `markdown-rs` interrupt.\n // // You’d be interrupting.\n // tokenizer.interrupt = true\n return ok(code);\n }\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n return titleBefore;\n\n /**\n * After destination, at whitespace.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleBefore(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, beforeMarker)(code) : nok(code);\n }\n\n /**\n * At title.\n *\n * ```markdown\n * | [a]: b\n * > | \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeMarker(code) {\n return factoryTitle(effects, titleAfter, nok, \"definitionTitle\", \"definitionTitleMarker\", \"definitionTitleString\")(code);\n }\n\n /**\n * After title.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleAfter(code) {\n return markdownSpace(code) ? factorySpace(effects, titleAfterOptionalWhitespace, \"whitespace\")(code) : titleAfterOptionalWhitespace(code);\n }\n\n /**\n * After title, after optional whitespace.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleAfterOptionalWhitespace(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const hardBreakEscape = {\n name: 'hardBreakEscape',\n tokenize: tokenizeHardBreakEscape\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n return start;\n\n /**\n * Start of a hard break (escape).\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"hardBreakEscape\");\n effects.consume(code);\n return after;\n }\n\n /**\n * After `\\`, at eol.\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (markdownLineEnding(code)) {\n effects.exit(\"hardBreakEscape\");\n return ok(code);\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {Construct} */\nexport const headingAtx = {\n name: 'headingAtx',\n resolve: resolveHeadingAtx,\n tokenize: tokenizeHeadingAtx\n};\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n let contentEnd = events.length - 2;\n let contentStart = 3;\n /** @type {Token} */\n let content;\n /** @type {Token} */\n let text;\n\n // Prefix whitespace, part of the opening.\n if (events[contentStart][1].type === \"whitespace\") {\n contentStart += 2;\n }\n\n // Suffix whitespace, part of the closing.\n if (contentEnd - 2 > contentStart && events[contentEnd][1].type === \"whitespace\") {\n contentEnd -= 2;\n }\n if (events[contentEnd][1].type === \"atxHeadingSequence\" && (contentStart === contentEnd - 1 || contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === \"whitespace\")) {\n contentEnd -= contentStart + 1 === contentEnd ? 2 : 4;\n }\n if (contentEnd > contentStart) {\n content = {\n type: \"atxHeadingText\",\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end\n };\n text = {\n type: \"chunkText\",\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end,\n contentType: \"text\"\n };\n splice(events, contentStart, contentEnd - contentStart + 1, [['enter', content, context], ['enter', text, context], ['exit', text, context], ['exit', content, context]]);\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n let size = 0;\n return start;\n\n /**\n * Start of a heading (atx).\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse indent like `markdown-rs`.\n effects.enter(\"atxHeading\");\n return before(code);\n }\n\n /**\n * After optional whitespace, at `#`.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n effects.enter(\"atxHeadingSequence\");\n return sequenceOpen(code);\n }\n\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === 35 && size++ < 6) {\n effects.consume(code);\n return sequenceOpen;\n }\n\n // Always at least one `#`.\n if (code === null || markdownLineEndingOrSpace(code)) {\n effects.exit(\"atxHeadingSequence\");\n return atBreak(code);\n }\n return nok(code);\n }\n\n /**\n * After something, before something else.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === 35) {\n effects.enter(\"atxHeadingSequence\");\n return sequenceFurther(code);\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"atxHeading\");\n // To do: interrupt like `markdown-rs`.\n // // Feel free to interrupt.\n // tokenizer.interrupt = false\n return ok(code);\n }\n if (markdownSpace(code)) {\n return factorySpace(effects, atBreak, \"whitespace\")(code);\n }\n\n // To do: generate `data` tokens, add the `text` token later.\n // Needs edit map, see: `markdown.rs`.\n effects.enter(\"atxHeadingText\");\n return data(code);\n }\n\n /**\n * In further sequence (after whitespace).\n *\n * Could be normal “visible” hashes in the heading or a final sequence.\n *\n * ```markdown\n * > | ## aa ##\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceFurther(code) {\n if (code === 35) {\n effects.consume(code);\n return sequenceFurther;\n }\n effects.exit(\"atxHeadingSequence\");\n return atBreak(code);\n }\n\n /**\n * In text.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function data(code) {\n if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n effects.exit(\"atxHeadingText\");\n return atBreak(code);\n }\n effects.consume(code);\n return data;\n }\n}","/**\n * List of lowercase HTML “block” tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn’t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'search',\n 'section',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n]\n\n/**\n * List of lowercase HTML “raw” tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @import {\n * Code,\n * Construct,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { htmlBlockNames, htmlRawNames } from 'micromark-util-html-tag-name';\nimport { blankLine } from './blank-line.js';\n\n/** @type {Construct} */\nexport const htmlFlow = {\n concrete: true,\n name: 'htmlFlow',\n resolveTo: resolveToHtmlFlow,\n tokenize: tokenizeHtmlFlow\n};\n\n/** @type {Construct} */\nconst blankLineBefore = {\n partial: true,\n tokenize: tokenizeBlankLineBefore\n};\nconst nonLazyContinuationStart = {\n partial: true,\n tokenize: tokenizeNonLazyContinuationStart\n};\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n let index = events.length;\n while (index--) {\n if (events[index][0] === 'enter' && events[index][1].type === \"htmlFlow\") {\n break;\n }\n }\n if (index > 1 && events[index - 2][1].type === \"linePrefix\") {\n // Add the prefix start to the HTML token.\n events[index][1].start = events[index - 2][1].start;\n // Add the prefix start to the HTML line token.\n events[index + 1][1].start = events[index - 2][1].start;\n // Remove the line prefix.\n events.splice(index - 2, 2);\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n const self = this;\n /** @type {number} */\n let marker;\n /** @type {boolean} */\n let closingTag;\n /** @type {string} */\n let buffer;\n /** @type {number} */\n let index;\n /** @type {Code} */\n let markerB;\n return start;\n\n /**\n * Start of HTML (flow).\n *\n * ```markdown\n * > | <x />\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse indent like `markdown-rs`.\n return before(code);\n }\n\n /**\n * At `<`, after optional whitespace.\n *\n * ```markdown\n * > | <x />\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n effects.enter(\"htmlFlow\");\n effects.enter(\"htmlFlowData\");\n effects.consume(code);\n return open;\n }\n\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | <x />\n * ^\n * > | <!doctype>\n * ^\n * > | <!--xxx-->\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 33) {\n effects.consume(code);\n return declarationOpen;\n }\n if (code === 47) {\n effects.consume(code);\n closingTag = true;\n return tagCloseStart;\n }\n if (code === 63) {\n effects.consume(code);\n marker = 3;\n // To do:\n // tokenizer.concrete = true\n // To do: use `markdown-rs` style interrupt.\n // While we’re in an instruction instead of a declaration, we’re on a `?`\n // right now, so we do need to search for `>`, similar to declarations.\n return self.interrupt ? ok : continuationDeclarationInside;\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n // Always the case.\n effects.consume(code);\n buffer = String.fromCharCode(code);\n return tagName;\n }\n return nok(code);\n }\n\n /**\n * After `<!`, at declaration, comment, or CDATA.\n *\n * ```markdown\n * > | <!doctype>\n * ^\n * > | <!--xxx-->\n * ^\n * > | <![CDATA[>&<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code);\n marker = 2;\n return commentOpenInside;\n }\n if (code === 91) {\n effects.consume(code);\n marker = 5;\n index = 0;\n return cdataOpenInside;\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n marker = 4;\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuationDeclarationInside;\n }\n return nok(code);\n }\n\n /**\n * After `<!-`, inside a comment, at another `-`.\n *\n * ```markdown\n * > | <!--xxx-->\n * ^\n * ```\n *\n * @type {State}\n */\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code);\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuationDeclarationInside;\n }\n return nok(code);\n }\n\n /**\n * After `<![`, inside CDATA, expecting `CDATA[`.\n *\n * ```markdown\n * > | <![CDATA[>&<]]>\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function cdataOpenInside(code) {\n const value = \"CDATA[\";\n if (code === value.charCodeAt(index++)) {\n effects.consume(code);\n if (index === value.length) {\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuation;\n }\n return cdataOpenInside;\n }\n return nok(code);\n }\n\n /**\n * After `</`, in closing tag, at tag name.\n *\n * ```markdown\n * > | </x>\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseStart(code) {\n if (asciiAlpha(code)) {\n // Always the case.\n effects.consume(code);\n buffer = String.fromCharCode(code);\n return tagName;\n }\n return nok(code);\n }\n\n /**\n * In tag name.\n *\n * ```markdown\n * > | <ab>\n * ^^\n * > | </ab>\n * ^^\n * ```\n *\n * @type {State}\n */\n function tagName(code) {\n if (code === null || code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n const slash = code === 47;\n const name = buffer.toLowerCase();\n if (!slash && !closingTag && htmlRawNames.includes(name)) {\n marker = 1;\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok(code) : continuation(code);\n }\n if (htmlBlockNames.includes(buffer.toLowerCase())) {\n marker = 6;\n if (slash) {\n effects.consume(code);\n return basicSelfClosing;\n }\n\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok(code) : continuation(code);\n }\n marker = 7;\n // Do not support complete HTML when interrupting.\n return self.interrupt && !self.parser.lazy[self.now().line] ? nok(code) : closingTag ? completeClosingTagAfter(code) : completeAttributeNameBefore(code);\n }\n\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n buffer += String.fromCharCode(code);\n return tagName;\n }\n return nok(code);\n }\n\n /**\n * After closing slash of a basic tag name.\n *\n * ```markdown\n * > | <div/>\n * ^\n * ```\n *\n * @type {State}\n */\n function basicSelfClosing(code) {\n if (code === 62) {\n effects.consume(code);\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuation;\n }\n return nok(code);\n }\n\n /**\n * After closing slash of a complete tag name.\n *\n * ```markdown\n * > | <x/>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeClosingTagAfter(code) {\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeClosingTagAfter;\n }\n return completeEnd(code);\n }\n\n /**\n * At an attribute name.\n *\n * At first, this state is used after a complete tag name, after whitespace,\n * where it expects optional attributes or the end of the tag.\n * It is also reused after attributes, when expecting more optional\n * attributes.\n *\n * ```markdown\n * > | <a />\n * ^\n * > | <a :b>\n * ^\n * > | <a _b>\n * ^\n * > | <a b>\n * ^\n * > | <a >\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeNameBefore(code) {\n if (code === 47) {\n effects.consume(code);\n return completeEnd;\n }\n\n // ASCII alphanumerical and `:` and `_`.\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code);\n return completeAttributeName;\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeAttributeNameBefore;\n }\n return completeEnd(code);\n }\n\n /**\n * In attribute name.\n *\n * ```markdown\n * > | <a :b>\n * ^\n * > | <a _b>\n * ^\n * > | <a b>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeName(code) {\n // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return completeAttributeName;\n }\n return completeAttributeNameAfter(code);\n }\n\n /**\n * After attribute name, at an optional initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | <a b>\n * ^\n * > | <a b=c>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code);\n return completeAttributeValueBefore;\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeAttributeNameAfter;\n }\n return completeAttributeNameBefore(code);\n }\n\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | <a b=c>\n * ^\n * > | <a b=\"c\">\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueBefore(code) {\n if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n return nok(code);\n }\n if (code === 34 || code === 39) {\n effects.consume(code);\n markerB = code;\n return completeAttributeValueQuoted;\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeAttributeValueBefore;\n }\n return completeAttributeValueUnquoted(code);\n }\n\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | <a b=\"c\">\n * ^\n * > | <a b='c'>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueQuoted(code) {\n if (code === markerB) {\n effects.consume(code);\n markerB = null;\n return completeAttributeValueQuotedAfter;\n }\n if (code === null || markdownLineEnding(code)) {\n return nok(code);\n }\n effects.consume(code);\n return completeAttributeValueQuoted;\n }\n\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | <a b=c>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueUnquoted(code) {\n if (code === null || code === 34 || code === 39 || code === 47 || code === 60 || code === 61 || code === 62 || code === 96 || markdownLineEndingOrSpace(code)) {\n return completeAttributeNameAfter(code);\n }\n effects.consume(code);\n return completeAttributeValueUnquoted;\n }\n\n /**\n * After double or single quoted attribute value, before whitespace or the\n * end of the tag.\n *\n * ```markdown\n * > | <a b=\"c\">\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownSpace(code)) {\n return completeAttributeNameBefore(code);\n }\n return nok(code);\n }\n\n /**\n * In certain circumstances of a complete tag where only an `>` is allowed.\n *\n * ```markdown\n * > | <a b=\"c\">\n * ^\n * ```\n *\n * @type {State}\n */\n function completeEnd(code) {\n if (code === 62) {\n effects.consume(code);\n return completeAfter;\n }\n return nok(code);\n }\n\n /**\n * After `>` in a complete tag.\n *\n * ```markdown\n * > | <x>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n // // Do not form containers.\n // tokenizer.concrete = true\n return continuation(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeAfter;\n }\n return nok(code);\n }\n\n /**\n * In continuation of any HTML kind.\n *\n * ```markdown\n * > | <!--xxx-->\n * ^\n * ```\n *\n * @type {State}\n */\n function continuation(code) {\n if (code === 45 && marker === 2) {\n effects.consume(code);\n return continuationCommentInside;\n }\n if (code === 60 && marker === 1) {\n effects.consume(code);\n return continuationRawTagOpen;\n }\n if (code === 62 && marker === 4) {\n effects.consume(code);\n return continuationClose;\n }\n if (code === 63 && marker === 3) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n if (code === 93 && marker === 5) {\n effects.consume(code);\n return continuationCdataInside;\n }\n if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n effects.exit(\"htmlFlowData\");\n return effects.check(blankLineBefore, continuationAfter, continuationStart)(code);\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"htmlFlowData\");\n return continuationStart(code);\n }\n effects.consume(code);\n return continuation;\n }\n\n /**\n * In continuation, at eol.\n *\n * ```markdown\n * > | <x>\n * ^\n * | asd\n * ```\n *\n * @type {State}\n */\n function continuationStart(code) {\n return effects.check(nonLazyContinuationStart, continuationStartNonLazy, continuationAfter)(code);\n }\n\n /**\n * In continuation, at eol, before non-lazy content.\n *\n * ```markdown\n * > | <x>\n * ^\n * | asd\n * ```\n *\n * @type {State}\n */\n function continuationStartNonLazy(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return continuationBefore;\n }\n\n /**\n * In continuation, before non-lazy content.\n *\n * ```markdown\n * | <x>\n * > | asd\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n return continuationStart(code);\n }\n effects.enter(\"htmlFlowData\");\n return continuation(code);\n }\n\n /**\n * In comment continuation, after one `-`, expecting another.\n *\n * ```markdown\n * > | <!--xxx-->\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationCommentInside(code) {\n if (code === 45) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n return continuation(code);\n }\n\n /**\n * In raw continuation, after `<`, at `/`.\n *\n * ```markdown\n * > | <script>console.log(1)</script>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationRawTagOpen(code) {\n if (code === 47) {\n effects.consume(code);\n buffer = '';\n return continuationRawEndTag;\n }\n return continuation(code);\n }\n\n /**\n * In raw continuation, after `</`, in a raw tag name.\n *\n * ```markdown\n * > | <script>console.log(1)</script>\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function continuationRawEndTag(code) {\n if (code === 62) {\n const name = buffer.toLowerCase();\n if (htmlRawNames.includes(name)) {\n effects.consume(code);\n return continuationClose;\n }\n return continuation(code);\n }\n if (asciiAlpha(code) && buffer.length < 8) {\n // Always the case.\n effects.consume(code);\n buffer += String.fromCharCode(code);\n return continuationRawEndTag;\n }\n return continuation(code);\n }\n\n /**\n * In cdata continuation, after `]`, expecting `]>`.\n *\n * ```markdown\n * > | <![CDATA[>&<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationCdataInside(code) {\n if (code === 93) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n return continuation(code);\n }\n\n /**\n * In declaration or instruction continuation, at `>`.\n *\n * ```markdown\n * > | <!-->\n * ^\n * > | <?>\n * ^\n * > | <!q>\n * ^\n * > | <!--ab-->\n * ^\n * > | <![CDATA[>&<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationDeclarationInside(code) {\n if (code === 62) {\n effects.consume(code);\n return continuationClose;\n }\n\n // More dashes.\n if (code === 45 && marker === 2) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n return continuation(code);\n }\n\n /**\n * In closed continuation: everything we get until the eol/eof is part of it.\n *\n * ```markdown\n * > | <!doctype>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationClose(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"htmlFlowData\");\n return continuationAfter(code);\n }\n effects.consume(code);\n return continuationClose;\n }\n\n /**\n * Done.\n *\n * ```markdown\n * > | <!doctype>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationAfter(code) {\n effects.exit(\"htmlFlow\");\n // // Feel free to interrupt.\n // tokenizer.interrupt = false\n // // No longer concrete.\n // tokenizer.concrete = false\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * At eol, before continuation.\n *\n * ```markdown\n * > | * ```js\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return after;\n }\n return nok(code);\n }\n\n /**\n * A continuation.\n *\n * ```markdown\n * | * ```js\n * > | b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n return start;\n\n /**\n * Before eol, expecting blank line.\n *\n * ```markdown\n * > | <div>\n * ^\n * |\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return effects.attempt(blankLine, ok, nok);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n name: 'htmlText',\n tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n const self = this;\n /** @type {NonNullable<Code> | undefined} */\n let marker;\n /** @type {number} */\n let index;\n /** @type {State} */\n let returnState;\n return start;\n\n /**\n * Start of HTML (text).\n *\n * ```markdown\n * > | a <b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"htmlText\");\n effects.enter(\"htmlTextData\");\n effects.consume(code);\n return open;\n }\n\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | a <b> c\n * ^\n * > | a <!doctype> c\n * ^\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 33) {\n effects.consume(code);\n return declarationOpen;\n }\n if (code === 47) {\n effects.consume(code);\n return tagCloseStart;\n }\n if (code === 63) {\n effects.consume(code);\n return instruction;\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagOpen;\n }\n return nok(code);\n }\n\n /**\n * After `<!`, at declaration, comment, or CDATA.\n *\n * ```markdown\n * > | a <!doctype> c\n * ^\n * > | a <!--b--> c\n * ^\n * > | a <![CDATA[>&<]]> c\n * ^\n * ```\n *\n * @type {State}\n */\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code);\n return commentOpenInside;\n }\n if (code === 91) {\n effects.consume(code);\n index = 0;\n return cdataOpenInside;\n }\n if (asciiAlpha(code)) {\n effects.consume(code);\n return declaration;\n }\n return nok(code);\n }\n\n /**\n * In a comment, after `<!-`, at another `-`.\n *\n * ```markdown\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n return nok(code);\n }\n\n /**\n * In comment.\n *\n * ```markdown\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function comment(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 45) {\n effects.consume(code);\n return commentClose;\n }\n if (markdownLineEnding(code)) {\n returnState = comment;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return comment;\n }\n\n /**\n * In comment, after `-`.\n *\n * ```markdown\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentClose(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n return comment(code);\n }\n\n /**\n * In comment, after `--`.\n *\n * ```markdown\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentEnd(code) {\n return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n }\n\n /**\n * After `<![`, in CDATA, expecting `CDATA[`.\n *\n * ```markdown\n * > | a <![CDATA[>&<]]> b\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function cdataOpenInside(code) {\n const value = \"CDATA[\";\n if (code === value.charCodeAt(index++)) {\n effects.consume(code);\n return index === value.length ? cdata : cdataOpenInside;\n }\n return nok(code);\n }\n\n /**\n * In CDATA.\n *\n * ```markdown\n * > | a <![CDATA[>&<]]> b\n * ^^^\n * ```\n *\n * @type {State}\n */\n function cdata(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 93) {\n effects.consume(code);\n return cdataClose;\n }\n if (markdownLineEnding(code)) {\n returnState = cdata;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return cdata;\n }\n\n /**\n * In CDATA, after `]`, at another `]`.\n *\n * ```markdown\n * > | a <![CDATA[>&<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataClose(code) {\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n return cdata(code);\n }\n\n /**\n * In CDATA, after `]]`, at `>`.\n *\n * ```markdown\n * > | a <![CDATA[>&<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataEnd(code) {\n if (code === 62) {\n return end(code);\n }\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n return cdata(code);\n }\n\n /**\n * In declaration.\n *\n * ```markdown\n * > | a <!b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function declaration(code) {\n if (code === null || code === 62) {\n return end(code);\n }\n if (markdownLineEnding(code)) {\n returnState = declaration;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return declaration;\n }\n\n /**\n * In instruction.\n *\n * ```markdown\n * > | a <?b?> c\n * ^\n * ```\n *\n * @type {State}\n */\n function instruction(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 63) {\n effects.consume(code);\n return instructionClose;\n }\n if (markdownLineEnding(code)) {\n returnState = instruction;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return instruction;\n }\n\n /**\n * In instruction, after `?`, at `>`.\n *\n * ```markdown\n * > | a <?b?> c\n * ^\n * ```\n *\n * @type {State}\n */\n function instructionClose(code) {\n return code === 62 ? end(code) : instruction(code);\n }\n\n /**\n * After `</`, in closing tag, at tag name.\n *\n * ```markdown\n * > | a </b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseStart(code) {\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagClose;\n }\n return nok(code);\n }\n\n /**\n * After `</x`, in a tag name.\n *\n * ```markdown\n * > | a </b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagClose(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagClose;\n }\n return tagCloseBetween(code);\n }\n\n /**\n * In closing tag, after tag name.\n *\n * ```markdown\n * > | a </b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseBetween(code) {\n if (markdownLineEnding(code)) {\n returnState = tagCloseBetween;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagCloseBetween;\n }\n return end(code);\n }\n\n /**\n * After `<x`, in opening tag name.\n *\n * ```markdown\n * > | a <b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpen(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpen;\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n return nok(code);\n }\n\n /**\n * In opening tag, after tag name.\n *\n * ```markdown\n * > | a <b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenBetween(code) {\n if (code === 47) {\n effects.consume(code);\n return end;\n }\n\n // ASCII alphabetical and `:` and `_`.\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenBetween;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenBetween;\n }\n return end(code);\n }\n\n /**\n * In attribute name.\n *\n * ```markdown\n * > | a <b c> d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeName(code) {\n // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n return tagOpenAttributeNameAfter(code);\n }\n\n /**\n * After attribute name, before initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | a <b c> d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeNameAfter;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeNameAfter;\n }\n return tagOpenBetween(code);\n }\n\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | a <b c=d> e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueBefore(code) {\n if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n return nok(code);\n }\n if (code === 34 || code === 39) {\n effects.consume(code);\n marker = code;\n return tagOpenAttributeValueQuoted;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueBefore;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | a <b c=\"d\"> e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuoted(code) {\n if (code === marker) {\n effects.consume(code);\n marker = undefined;\n return tagOpenAttributeValueQuotedAfter;\n }\n if (code === null) {\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueQuoted;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return tagOpenAttributeValueQuoted;\n }\n\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | a <b c=d> e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueUnquoted(code) {\n if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n return nok(code);\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n\n /**\n * After double or single quoted attribute value, before whitespace or the end\n * of the tag.\n *\n * ```markdown\n * > | a <b c=\"d\"> e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n return nok(code);\n }\n\n /**\n * In certain circumstances of a tag where only an `>` is allowed.\n *\n * ```markdown\n * > | a <b c=\"d\"> e\n * ^\n * ```\n *\n * @type {State}\n */\n function end(code) {\n if (code === 62) {\n effects.consume(code);\n effects.exit(\"htmlTextData\");\n effects.exit(\"htmlText\");\n return ok;\n }\n return nok(code);\n }\n\n /**\n * At eol.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * > | a <!--a\n * ^\n * | b-->\n * ```\n *\n * @type {State}\n */\n function lineEndingBefore(code) {\n effects.exit(\"htmlTextData\");\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return lineEndingAfter;\n }\n\n /**\n * After eol, at optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a <!--a\n * > | b-->\n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfter(code) {\n // Always populated by defaults.\n\n return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n }\n\n /**\n * After eol, after optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a <!--a\n * > | b-->\n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfterPrefix(code) {\n effects.enter(\"htmlTextData\");\n return returnState(code);\n }\n}","/**\n * @import {\n * Construct,\n * Event,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const labelEnd = {\n name: 'labelEnd',\n resolveAll: resolveAllLabelEnd,\n resolveTo: resolveToLabelEnd,\n tokenize: tokenizeLabelEnd\n};\n\n/** @type {Construct} */\nconst resourceConstruct = {\n tokenize: tokenizeResource\n};\n/** @type {Construct} */\nconst referenceFullConstruct = {\n tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n tokenize: tokenizeReferenceCollapsed\n};\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n let index = -1;\n /** @type {Array<Event>} */\n const newEvents = [];\n while (++index < events.length) {\n const token = events[index][1];\n newEvents.push(events[index]);\n if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n // Remove the marker.\n const offset = token.type === \"labelImage\" ? 4 : 2;\n token.type = \"data\";\n index += offset;\n }\n }\n\n // If the events are equal, we don't have to copy newEvents to events\n if (events.length !== newEvents.length) {\n splice(events, 0, events.length, newEvents);\n }\n return events;\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n let index = events.length;\n let offset = 0;\n /** @type {Token} */\n let token;\n /** @type {number | undefined} */\n let open;\n /** @type {number | undefined} */\n let close;\n /** @type {Array<Event>} */\n let media;\n\n // Find an opening.\n while (index--) {\n token = events[index][1];\n if (open) {\n // If we see another link, or inactive link label, we’ve been here before.\n if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n break;\n }\n\n // Mark other link openings as inactive, as we can’t have links in\n // links.\n if (events[index][0] === 'enter' && token.type === \"labelLink\") {\n token._inactive = true;\n }\n } else if (close) {\n if (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\n open = index;\n if (token.type !== \"labelLink\") {\n offset = 2;\n break;\n }\n }\n } else if (token.type === \"labelEnd\") {\n close = index;\n }\n }\n const group = {\n type: events[open][1].type === \"labelLink\" ? \"link\" : \"image\",\n start: {\n ...events[open][1].start\n },\n end: {\n ...events[events.length - 1][1].end\n }\n };\n const label = {\n type: \"label\",\n start: {\n ...events[open][1].start\n },\n end: {\n ...events[close][1].end\n }\n };\n const text = {\n type: \"labelText\",\n start: {\n ...events[open + offset + 2][1].end\n },\n end: {\n ...events[close - 2][1].start\n }\n };\n media = [['enter', group, context], ['enter', label, context]];\n\n // Opening marker.\n media = push(media, events.slice(open + 1, open + offset + 3));\n\n // Text open.\n media = push(media, [['enter', text, context]]);\n\n // Always populated by defaults.\n\n // Between.\n media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n // Text close, marker close, label close.\n media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\n\n // Reference, resource, or so.\n media = push(media, events.slice(close + 1));\n\n // Media close.\n media = push(media, [['exit', group, context]]);\n splice(events, open, events.length, media);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n const self = this;\n let index = self.events.length;\n /** @type {Token} */\n let labelStart;\n /** @type {boolean} */\n let defined;\n\n // Find an opening.\n while (index--) {\n if ((self.events[index][1].type === \"labelImage\" || self.events[index][1].type === \"labelLink\") && !self.events[index][1]._balanced) {\n labelStart = self.events[index][1];\n break;\n }\n }\n return start;\n\n /**\n * Start of label end.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // If there is not an okay opening.\n if (!labelStart) {\n return nok(code);\n }\n\n // If the corresponding label (link) start is marked as inactive,\n // it means we’d be wrapping a link, like this:\n //\n // ```markdown\n // > | a [b [c](d) e](f) g.\n // ^\n // ```\n //\n // We can’t have that, so it’s just balanced brackets.\n if (labelStart._inactive) {\n return labelEndNok(code);\n }\n defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })));\n effects.enter(\"labelEnd\");\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelEnd\");\n return after;\n }\n\n /**\n * After `]`.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n // an extension.\n\n // Resource (`[asd](fgh)`)?\n if (code === 40) {\n return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n }\n\n // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n if (code === 91) {\n return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n }\n\n // Shortcut (`[asd]`) reference?\n return defined ? labelEndOk(code) : labelEndNok(code);\n }\n\n /**\n * After `]`, at `[`, but not at a full reference.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceNotFull(code) {\n return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n }\n\n /**\n * Done, we found something.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndOk(code) {\n // Note: `markdown-rs` does a bunch of stuff here.\n return ok(code);\n }\n\n /**\n * Done, it’s nothing.\n *\n * There was an okay opening, but we didn’t match anything.\n *\n * ```markdown\n * > | [a](b c\n * ^\n * > | [a][b c\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndNok(code) {\n labelStart._balanced = true;\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n return resourceStart;\n\n /**\n * At a resource.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceStart(code) {\n effects.enter(\"resource\");\n effects.enter(\"resourceMarker\");\n effects.consume(code);\n effects.exit(\"resourceMarker\");\n return resourceBefore;\n }\n\n /**\n * In resource, after `(`, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBefore(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n }\n\n /**\n * In resource, after optional whitespace, at `)` or a destination.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceOpen(code) {\n if (code === 41) {\n return resourceEnd(code);\n }\n return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(code);\n }\n\n /**\n * In resource, after destination, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n }\n\n /**\n * At invalid destination.\n *\n * ```markdown\n * > | [a](<<) b\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationMissing(code) {\n return nok(code);\n }\n\n /**\n * In resource, after destination and whitespace, at `(` or title.\n *\n * ```markdown\n * > | [a](b ) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBetween(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(code);\n }\n return resourceEnd(code);\n }\n\n /**\n * In resource, after title, at optional whitespace.\n *\n * ```markdown\n * > | [a](b \"c\") d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceTitleAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n }\n\n /**\n * In resource, at `)`.\n *\n * ```markdown\n * > | [a](b) d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceEnd(code) {\n if (code === 41) {\n effects.enter(\"resourceMarker\");\n effects.consume(code);\n effects.exit(\"resourceMarker\");\n effects.exit(\"resource\");\n return ok;\n }\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n const self = this;\n return referenceFull;\n\n /**\n * In a reference (full), at the `[`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFull(code) {\n return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(code);\n }\n\n /**\n * In a reference (full), after `]`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullAfter(code) {\n return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n }\n\n /**\n * In reference (full) that was missing.\n *\n * ```markdown\n * > | [a][b d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullMissing(code) {\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n return referenceCollapsedStart;\n\n /**\n * In reference (collapsed), at `[`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedStart(code) {\n // We only attempt a collapsed label if there’s a `[`.\n\n effects.enter(\"reference\");\n effects.enter(\"referenceMarker\");\n effects.consume(code);\n effects.exit(\"referenceMarker\");\n return referenceCollapsedOpen;\n }\n\n /**\n * In reference (collapsed), at `]`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedOpen(code) {\n if (code === 93) {\n effects.enter(\"referenceMarker\");\n effects.consume(code);\n effects.exit(\"referenceMarker\");\n effects.exit(\"reference\");\n return ok;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n name: 'labelStartImage',\n resolveAll: labelEnd.resolveAll,\n tokenize: tokenizeLabelStartImage\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of label (image) start.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"labelImage\");\n effects.enter(\"labelImageMarker\");\n effects.consume(code);\n effects.exit(\"labelImageMarker\");\n return open;\n }\n\n /**\n * After `!`, at `[`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 91) {\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelImage\");\n return after;\n }\n return nok(code);\n }\n\n /**\n * After `![`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * This is needed in because, when GFM footnotes are enabled, images never\n * form when started with a `^`.\n * Instead, links form:\n *\n * ```markdown\n * ![^a](b)\n *\n * ![^a][b]\n *\n * [b]: c\n * ```\n *\n * ```html\n * <p>!<a href=\\\"b\\\">^a</a></p>\n * <p>!<a href=\\\"c\\\">^a</a></p>\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // To do: use a new field to do this, this is still needed for\n // `micromark-extension-gfm-footnote`, but the `label-start-link`\n // behavior isn’t.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n name: 'labelStartLink',\n resolveAll: labelEnd.resolveAll,\n tokenize: tokenizeLabelStartLink\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of label (link) start.\n *\n * ```markdown\n * > | a [b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"labelLink\");\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelLink\");\n return after;\n }\n\n /** @type {State} */\n function after(code) {\n // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n // remove.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const lineEnding = {\n name: 'lineEnding',\n tokenize: tokenizeLineEnding\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n return start;\n\n /** @type {State} */\n function start(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return factorySpace(effects, ok, \"linePrefix\");\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const thematicBreak = {\n name: 'thematicBreak',\n tokenize: tokenizeThematicBreak\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n let size = 0;\n /** @type {NonNullable<Code>} */\n let marker;\n return start;\n\n /**\n * Start of thematic break.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"thematicBreak\");\n // To do: parse indent like `markdown-rs`.\n return before(code);\n }\n\n /**\n * After optional whitespace, at marker.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n marker = code;\n return atBreak(code);\n }\n\n /**\n * After something, before something else.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === marker) {\n effects.enter(\"thematicBreakSequence\");\n return sequence(code);\n }\n if (size >= 3 && (code === null || markdownLineEnding(code))) {\n effects.exit(\"thematicBreak\");\n return ok(code);\n }\n return nok(code);\n }\n\n /**\n * In sequence.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function sequence(code) {\n if (code === marker) {\n effects.consume(code);\n size++;\n return sequence;\n }\n effects.exit(\"thematicBreakSequence\");\n return markdownSpace(code) ? factorySpace(effects, atBreak, \"whitespace\")(code) : atBreak(code);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * Exiter,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiDigit, markdownSpace } from 'micromark-util-character';\nimport { blankLine } from './blank-line.js';\nimport { thematicBreak } from './thematic-break.js';\n\n/** @type {Construct} */\nexport const list = {\n continuation: {\n tokenize: tokenizeListContinuation\n },\n exit: tokenizeListEnd,\n name: 'list',\n tokenize: tokenizeListStart\n};\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n partial: true,\n tokenize: tokenizeListItemPrefixWhitespace\n};\n\n/** @type {Construct} */\nconst indentConstruct = {\n partial: true,\n tokenize: tokenizeIndent\n};\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n const self = this;\n const tail = self.events[self.events.length - 1];\n let initialSize = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n let size = 0;\n return start;\n\n /** @type {State} */\n function start(code) {\n const kind = self.containerState.type || (code === 42 || code === 43 || code === 45 ? \"listUnordered\" : \"listOrdered\");\n if (kind === \"listUnordered\" ? !self.containerState.marker || code === self.containerState.marker : asciiDigit(code)) {\n if (!self.containerState.type) {\n self.containerState.type = kind;\n effects.enter(kind, {\n _container: true\n });\n }\n if (kind === \"listUnordered\") {\n effects.enter(\"listItemPrefix\");\n return code === 42 || code === 45 ? effects.check(thematicBreak, nok, atMarker)(code) : atMarker(code);\n }\n if (!self.interrupt || code === 49) {\n effects.enter(\"listItemPrefix\");\n effects.enter(\"listItemValue\");\n return inside(code);\n }\n }\n return nok(code);\n }\n\n /** @type {State} */\n function inside(code) {\n if (asciiDigit(code) && ++size < 10) {\n effects.consume(code);\n return inside;\n }\n if ((!self.interrupt || size < 2) && (self.containerState.marker ? code === self.containerState.marker : code === 41 || code === 46)) {\n effects.exit(\"listItemValue\");\n return atMarker(code);\n }\n return nok(code);\n }\n\n /**\n * @type {State}\n **/\n function atMarker(code) {\n effects.enter(\"listItemMarker\");\n effects.consume(code);\n effects.exit(\"listItemMarker\");\n self.containerState.marker = self.containerState.marker || code;\n return effects.check(blankLine,\n // Can’t be empty when interrupting.\n self.interrupt ? nok : onBlank, effects.attempt(listItemPrefixWhitespaceConstruct, endOfPrefix, otherPrefix));\n }\n\n /** @type {State} */\n function onBlank(code) {\n self.containerState.initialBlankLine = true;\n initialSize++;\n return endOfPrefix(code);\n }\n\n /** @type {State} */\n function otherPrefix(code) {\n if (markdownSpace(code)) {\n effects.enter(\"listItemPrefixWhitespace\");\n effects.consume(code);\n effects.exit(\"listItemPrefixWhitespace\");\n return endOfPrefix;\n }\n return nok(code);\n }\n\n /** @type {State} */\n function endOfPrefix(code) {\n self.containerState.size = initialSize + self.sliceSerialize(effects.exit(\"listItemPrefix\"), true).length;\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n const self = this;\n self.containerState._closeFlow = undefined;\n return effects.check(blankLine, onBlank, notBlank);\n\n /** @type {State} */\n function onBlank(code) {\n self.containerState.furtherBlankLines = self.containerState.furtherBlankLines || self.containerState.initialBlankLine;\n\n // We have a blank line.\n // Still, try to consume at most the items size.\n return factorySpace(effects, ok, \"listItemIndent\", self.containerState.size + 1)(code);\n }\n\n /** @type {State} */\n function notBlank(code) {\n if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n self.containerState.furtherBlankLines = undefined;\n self.containerState.initialBlankLine = undefined;\n return notInCurrentItem(code);\n }\n self.containerState.furtherBlankLines = undefined;\n self.containerState.initialBlankLine = undefined;\n return effects.attempt(indentConstruct, ok, notInCurrentItem)(code);\n }\n\n /** @type {State} */\n function notInCurrentItem(code) {\n // While we do continue, we signal that the flow should be closed.\n self.containerState._closeFlow = true;\n // As we’re closing flow, we’re no longer interrupting.\n self.interrupt = undefined;\n // Always populated by defaults.\n\n return factorySpace(effects, effects.attempt(list, ok, nok), \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this;\n return factorySpace(effects, afterPrefix, \"listItemIndent\", self.containerState.size + 1);\n\n /** @type {State} */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === \"listItemIndent\" && tail[2].sliceSerialize(tail[1], true).length === self.containerState.size ? ok(code) : nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Exiter}\n */\nfunction tokenizeListEnd(effects) {\n effects.exit(this.containerState.type);\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n const self = this;\n\n // Always populated by defaults.\n\n return factorySpace(effects, afterPrefix, \"listItemPrefixWhitespace\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + 1);\n\n /** @type {State} */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return !markdownSpace(code) && tail && tail[1].type === \"listItemPrefixWhitespace\" ? ok(code) : nok(code);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const setextUnderline = {\n name: 'setextUnderline',\n resolveTo: resolveToSetextUnderline,\n tokenize: tokenizeSetextUnderline\n};\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n // To do: resolve like `markdown-rs`.\n let index = events.length;\n /** @type {number | undefined} */\n let content;\n /** @type {number | undefined} */\n let text;\n /** @type {number | undefined} */\n let definition;\n\n // Find the opening of the content.\n // It’ll always exist: we don’t tokenize if it isn’t there.\n while (index--) {\n if (events[index][0] === 'enter') {\n if (events[index][1].type === \"content\") {\n content = index;\n break;\n }\n if (events[index][1].type === \"paragraph\") {\n text = index;\n }\n }\n // Exit\n else {\n if (events[index][1].type === \"content\") {\n // Remove the content end (if needed we’ll add it later)\n events.splice(index, 1);\n }\n if (!definition && events[index][1].type === \"definition\") {\n definition = index;\n }\n }\n }\n const heading = {\n type: \"setextHeading\",\n start: {\n ...events[content][1].start\n },\n end: {\n ...events[events.length - 1][1].end\n }\n };\n\n // Change the paragraph to setext heading text.\n events[text][1].type = \"setextHeadingText\";\n\n // If we have definitions in the content, we’ll keep on having content,\n // but we need move it.\n if (definition) {\n events.splice(text, 0, ['enter', heading, context]);\n events.splice(definition + 1, 0, ['exit', events[content][1], context]);\n events[content][1].end = {\n ...events[definition][1].end\n };\n } else {\n events[content][1] = heading;\n }\n\n // Add the heading exit at the end.\n events.push(['exit', heading, context]);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n const self = this;\n /** @type {NonNullable<Code>} */\n let marker;\n return start;\n\n /**\n * At start of heading (setext) underline.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n let index = self.events.length;\n /** @type {boolean | undefined} */\n let paragraph;\n // Find an opening.\n while (index--) {\n // Skip enter/exit of line ending, line prefix, and content.\n // We can now either have a definition or a paragraph.\n if (self.events[index][1].type !== \"lineEnding\" && self.events[index][1].type !== \"linePrefix\" && self.events[index][1].type !== \"content\") {\n paragraph = self.events[index][1].type === \"paragraph\";\n break;\n }\n }\n\n // To do: handle lazy/pierce like `markdown-rs`.\n // To do: parse indent like `markdown-rs`.\n if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n effects.enter(\"setextHeadingLine\");\n marker = code;\n return before(code);\n }\n return nok(code);\n }\n\n /**\n * After optional whitespace, at `-` or `=`.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n effects.enter(\"setextHeadingLineSequence\");\n return inside(code);\n }\n\n /**\n * In sequence.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker) {\n effects.consume(code);\n return inside;\n }\n effects.exit(\"setextHeadingLineSequence\");\n return markdownSpace(code) ? factorySpace(effects, after, \"lineSuffix\")(code) : after(code);\n }\n\n /**\n * After sequence, after optional whitespace.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"setextHeadingLine\");\n return ok(code);\n }\n return nok(code);\n }\n}","/**\n * @import {\n * InitialConstruct,\n * Initializer,\n * State,\n * TokenizeContext\n * } from 'micromark-util-types'\n */\n\nimport { blankLine, content } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const flow = {\n tokenize: initializeFlow\n};\n\n/**\n * @this {TokenizeContext}\n * Self.\n * @type {Initializer}\n * Initializer.\n */\nfunction initializeFlow(effects) {\n const self = this;\n const initial = effects.attempt(\n // Try to parse a blank line.\n blankLine, atBlankEnding,\n // Try to parse initial flow (essentially, only code).\n effects.attempt(this.parser.constructs.flowInitial, afterConstruct, factorySpace(effects, effects.attempt(this.parser.constructs.flow, afterConstruct, effects.attempt(content, afterConstruct)), \"linePrefix\")));\n return initial;\n\n /** @type {State} */\n function atBlankEnding(code) {\n if (code === null) {\n effects.consume(code);\n return;\n }\n effects.enter(\"lineEndingBlank\");\n effects.consume(code);\n effects.exit(\"lineEndingBlank\");\n self.currentConstruct = undefined;\n return initial;\n }\n\n /** @type {State} */\n function afterConstruct(code) {\n if (code === null) {\n effects.consume(code);\n return;\n }\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n self.currentConstruct = undefined;\n return initial;\n }\n}","/**\n * @import {\n * Code,\n * InitialConstruct,\n * Initializer,\n * Resolver,\n * State,\n * TokenizeContext\n * } from 'micromark-util-types'\n */\n\nexport const resolver = {\n resolveAll: createResolver()\n};\nexport const string = initializeFactory('string');\nexport const text = initializeFactory('text');\n\n/**\n * @param {'string' | 'text'} field\n * Field.\n * @returns {InitialConstruct}\n * Construct.\n */\nfunction initializeFactory(field) {\n return {\n resolveAll: createResolver(field === 'text' ? resolveAllLineSuffixes : undefined),\n tokenize: initializeText\n };\n\n /**\n * @this {TokenizeContext}\n * Context.\n * @type {Initializer}\n */\n function initializeText(effects) {\n const self = this;\n const constructs = this.parser.constructs[field];\n const text = effects.attempt(constructs, start, notText);\n return start;\n\n /** @type {State} */\n function start(code) {\n return atBreak(code) ? text(code) : notText(code);\n }\n\n /** @type {State} */\n function notText(code) {\n if (code === null) {\n effects.consume(code);\n return;\n }\n effects.enter(\"data\");\n effects.consume(code);\n return data;\n }\n\n /** @type {State} */\n function data(code) {\n if (atBreak(code)) {\n effects.exit(\"data\");\n return text(code);\n }\n\n // Data.\n effects.consume(code);\n return data;\n }\n\n /**\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether the code is a break.\n */\n function atBreak(code) {\n if (code === null) {\n return true;\n }\n const list = constructs[code];\n let index = -1;\n if (list) {\n // Always populated by defaults.\n\n while (++index < list.length) {\n const item = list[index];\n if (!item.previous || item.previous.call(self, self.previous)) {\n return true;\n }\n }\n }\n return false;\n }\n }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n * Resolver.\n * @returns {Resolver}\n * Resolver.\n */\nfunction createResolver(extraResolver) {\n return resolveAllText;\n\n /** @type {Resolver} */\n function resolveAllText(events, context) {\n let index = -1;\n /** @type {number | undefined} */\n let enter;\n\n // A rather boring computation (to merge adjacent `data` events) which\n // improves mm performance by 29%.\n while (++index <= events.length) {\n if (enter === undefined) {\n if (events[index] && events[index][1].type === \"data\") {\n enter = index;\n index++;\n }\n } else if (!events[index] || events[index][1].type !== \"data\") {\n // Don’t do anything if there is one data token.\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end;\n events.splice(enter + 2, index - enter - 2);\n index = enter + 2;\n }\n enter = undefined;\n }\n }\n return extraResolver ? extraResolver(events, context) : events;\n }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n let eventIndex = 0; // Skip first.\n\n while (++eventIndex <= events.length) {\n if ((eventIndex === events.length || events[eventIndex][1].type === \"lineEnding\") && events[eventIndex - 1][1].type === \"data\") {\n const data = events[eventIndex - 1][1];\n const chunks = context.sliceStream(data);\n let index = chunks.length;\n let bufferIndex = -1;\n let size = 0;\n /** @type {boolean | undefined} */\n let tabs;\n while (index--) {\n const chunk = chunks[index];\n if (typeof chunk === 'string') {\n bufferIndex = chunk.length;\n while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n size++;\n bufferIndex--;\n }\n if (bufferIndex) break;\n bufferIndex = -1;\n }\n // Number\n else if (chunk === -2) {\n tabs = true;\n size++;\n } else if (chunk === -1) {\n // Empty\n } else {\n // Replacement character, exit.\n index++;\n break;\n }\n }\n\n // Allow final trailing whitespace.\n if (context._contentTypeTextTrailing && eventIndex === events.length) {\n size = 0;\n }\n if (size) {\n const token = {\n type: eventIndex === events.length || tabs || size < 2 ? \"lineSuffix\" : \"hardBreakTrailing\",\n start: {\n _bufferIndex: index ? bufferIndex : data.start._bufferIndex + bufferIndex,\n _index: data.start._index + index,\n line: data.end.line,\n column: data.end.column - size,\n offset: data.end.offset - size\n },\n end: {\n ...data.end\n }\n };\n data.end = {\n ...token.start\n };\n if (data.start.offset === data.end.offset) {\n Object.assign(data, token);\n } else {\n events.splice(eventIndex, 0, ['enter', token, context], ['exit', token, context]);\n eventIndex += 2;\n }\n }\n eventIndex++;\n }\n }\n return events;\n}","/**\n * @import {Extension} from 'micromark-util-types'\n */\n\nimport { attention, autolink, blockQuote, characterEscape, characterReference, codeFenced, codeIndented, codeText, definition, hardBreakEscape, headingAtx, htmlFlow, htmlText, labelEnd, labelStartImage, labelStartLink, lineEnding, list, setextUnderline, thematicBreak } from 'micromark-core-commonmark';\nimport { resolver as resolveText } from './initialize/text.js';\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n [42]: list,\n [43]: list,\n [45]: list,\n [48]: list,\n [49]: list,\n [50]: list,\n [51]: list,\n [52]: list,\n [53]: list,\n [54]: list,\n [55]: list,\n [56]: list,\n [57]: list,\n [62]: blockQuote\n};\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n [91]: definition\n};\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n [-2]: codeIndented,\n [-1]: codeIndented,\n [32]: codeIndented\n};\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n [35]: headingAtx,\n [42]: thematicBreak,\n [45]: [setextUnderline, thematicBreak],\n [60]: htmlFlow,\n [61]: setextUnderline,\n [95]: thematicBreak,\n [96]: codeFenced,\n [126]: codeFenced\n};\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n [38]: characterReference,\n [92]: characterEscape\n};\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n [-5]: lineEnding,\n [-4]: lineEnding,\n [-3]: lineEnding,\n [33]: labelStartImage,\n [38]: characterReference,\n [42]: attention,\n [60]: [autolink, htmlText],\n [91]: labelStartLink,\n [92]: [hardBreakEscape, characterEscape],\n [93]: labelEnd,\n [95]: attention,\n [96]: codeText\n};\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n null: [attention, resolveText]\n};\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n null: [42, 95]\n};\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n null: []\n};","/**\n * @import {\n * Chunk,\n * Code,\n * ConstructRecord,\n * Construct,\n * Effects,\n * InitialConstruct,\n * ParseContext,\n * Point,\n * State,\n * TokenizeContext,\n * Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @callback Restore\n * Restore the state.\n * @returns {undefined}\n * Nothing.\n *\n * @typedef Info\n * Info.\n * @property {Restore} restore\n * Restore.\n * @property {number} from\n * From.\n *\n * @callback ReturnHandle\n * Handle a successful run.\n * @param {Construct} construct\n * Construct.\n * @param {Info} info\n * Info.\n * @returns {undefined}\n * Nothing.\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * Parser.\n * @param {InitialConstruct} initialize\n * Construct.\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n * Point (optional).\n * @returns {TokenizeContext}\n * Context.\n */\nexport function createTokenizer(parser, initialize, from) {\n /** @type {Point} */\n let point = {\n _bufferIndex: -1,\n _index: 0,\n line: from && from.line || 1,\n column: from && from.column || 1,\n offset: from && from.offset || 0\n };\n /** @type {Record<string, number>} */\n const columnStart = {};\n /** @type {Array<Construct>} */\n const resolveAllConstructs = [];\n /** @type {Array<Chunk>} */\n let chunks = [];\n /** @type {Array<Token>} */\n let stack = [];\n /** @type {boolean | undefined} */\n let consumed = true;\n\n /**\n * Tools used for tokenizing.\n *\n * @type {Effects}\n */\n const effects = {\n attempt: constructFactory(onsuccessfulconstruct),\n check: constructFactory(onsuccessfulcheck),\n consume,\n enter,\n exit,\n interrupt: constructFactory(onsuccessfulcheck, {\n interrupt: true\n })\n };\n\n /**\n * State and tools for resolving and serializing.\n *\n * @type {TokenizeContext}\n */\n const context = {\n code: null,\n containerState: {},\n defineSkip,\n events: [],\n now,\n parser,\n previous: null,\n sliceSerialize,\n sliceStream,\n write\n };\n\n /**\n * The state function.\n *\n * @type {State | undefined}\n */\n let state = initialize.tokenize.call(context, effects);\n\n /**\n * Track which character we expect to be consumed, to catch bugs.\n *\n * @type {Code}\n */\n let expectedCode;\n if (initialize.resolveAll) {\n resolveAllConstructs.push(initialize);\n }\n return context;\n\n /** @type {TokenizeContext['write']} */\n function write(slice) {\n chunks = push(chunks, slice);\n main();\n\n // Exit if we’re not done, resolve might change stuff.\n if (chunks[chunks.length - 1] !== null) {\n return [];\n }\n addResult(initialize, 0);\n\n // Otherwise, resolve, and exit.\n context.events = resolveAll(resolveAllConstructs, context.events, context);\n return context.events;\n }\n\n //\n // Tools.\n //\n\n /** @type {TokenizeContext['sliceSerialize']} */\n function sliceSerialize(token, expandTabs) {\n return serializeChunks(sliceStream(token), expandTabs);\n }\n\n /** @type {TokenizeContext['sliceStream']} */\n function sliceStream(token) {\n return sliceChunks(chunks, token);\n }\n\n /** @type {TokenizeContext['now']} */\n function now() {\n // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n const {\n _bufferIndex,\n _index,\n line,\n column,\n offset\n } = point;\n return {\n _bufferIndex,\n _index,\n line,\n column,\n offset\n };\n }\n\n /** @type {TokenizeContext['defineSkip']} */\n function defineSkip(value) {\n columnStart[value.line] = value.column;\n accountForPotentialSkip();\n }\n\n //\n // State management.\n //\n\n /**\n * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n * `consume`).\n * Here is where we walk through the chunks, which either include strings of\n * several characters, or numerical character codes.\n * The reason to do this in a loop instead of a call is so the stack can\n * drain.\n *\n * @returns {undefined}\n * Nothing.\n */\n function main() {\n /** @type {number} */\n let chunkIndex;\n while (point._index < chunks.length) {\n const chunk = chunks[point._index];\n\n // If we’re in a buffer chunk, loop through it.\n if (typeof chunk === 'string') {\n chunkIndex = point._index;\n if (point._bufferIndex < 0) {\n point._bufferIndex = 0;\n }\n while (point._index === chunkIndex && point._bufferIndex < chunk.length) {\n go(chunk.charCodeAt(point._bufferIndex));\n }\n } else {\n go(chunk);\n }\n }\n }\n\n /**\n * Deal with one code.\n *\n * @param {Code} code\n * Code.\n * @returns {undefined}\n * Nothing.\n */\n function go(code) {\n consumed = undefined;\n expectedCode = code;\n state = state(code);\n }\n\n /** @type {Effects['consume']} */\n function consume(code) {\n if (markdownLineEnding(code)) {\n point.line++;\n point.column = 1;\n point.offset += code === -3 ? 2 : 1;\n accountForPotentialSkip();\n } else if (code !== -1) {\n point.column++;\n point.offset++;\n }\n\n // Not in a string chunk.\n if (point._bufferIndex < 0) {\n point._index++;\n } else {\n point._bufferIndex++;\n\n // At end of string chunk.\n if (point._bufferIndex ===\n // Points w/ non-negative `_bufferIndex` reference\n // strings.\n /** @type {string} */\n chunks[point._index].length) {\n point._bufferIndex = -1;\n point._index++;\n }\n }\n\n // Expose the previous character.\n context.previous = code;\n\n // Mark as consumed.\n consumed = true;\n }\n\n /** @type {Effects['enter']} */\n function enter(type, fields) {\n /** @type {Token} */\n // @ts-expect-error Patch instead of assign required fields to help GC.\n const token = fields || {};\n token.type = type;\n token.start = now();\n context.events.push(['enter', token, context]);\n stack.push(token);\n return token;\n }\n\n /** @type {Effects['exit']} */\n function exit(type) {\n const token = stack.pop();\n token.end = now();\n context.events.push(['exit', token, context]);\n return token;\n }\n\n /**\n * Use results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulconstruct(construct, info) {\n addResult(construct, info.from);\n }\n\n /**\n * Discard results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulcheck(_, info) {\n info.restore();\n }\n\n /**\n * Factory to attempt/check/interrupt.\n *\n * @param {ReturnHandle} onreturn\n * Callback.\n * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n * Fields.\n */\n function constructFactory(onreturn, fields) {\n return hook;\n\n /**\n * Handle either an object mapping codes to constructs, a list of\n * constructs, or a single construct.\n *\n * @param {Array<Construct> | ConstructRecord | Construct} constructs\n * Constructs.\n * @param {State} returnState\n * State.\n * @param {State | undefined} [bogusState]\n * State.\n * @returns {State}\n * State.\n */\n function hook(constructs, returnState, bogusState) {\n /** @type {ReadonlyArray<Construct>} */\n let listOfConstructs;\n /** @type {number} */\n let constructIndex;\n /** @type {Construct} */\n let currentConstruct;\n /** @type {Info} */\n let info;\n return Array.isArray(constructs) ? /* c8 ignore next 1 */\n handleListOfConstructs(constructs) : 'tokenize' in constructs ?\n // Looks like a construct.\n handleListOfConstructs([(/** @type {Construct} */constructs)]) : handleMapOfConstructs(constructs);\n\n /**\n * Handle a list of construct.\n *\n * @param {ConstructRecord} map\n * Constructs.\n * @returns {State}\n * State.\n */\n function handleMapOfConstructs(map) {\n return start;\n\n /** @type {State} */\n function start(code) {\n const left = code !== null && map[code];\n const all = code !== null && map.null;\n const list = [\n // To do: add more extension tests.\n /* c8 ignore next 2 */\n ...(Array.isArray(left) ? left : left ? [left] : []), ...(Array.isArray(all) ? all : all ? [all] : [])];\n return handleListOfConstructs(list)(code);\n }\n }\n\n /**\n * Handle a list of construct.\n *\n * @param {ReadonlyArray<Construct>} list\n * Constructs.\n * @returns {State}\n * State.\n */\n function handleListOfConstructs(list) {\n listOfConstructs = list;\n constructIndex = 0;\n if (list.length === 0) {\n return bogusState;\n }\n return handleConstruct(list[constructIndex]);\n }\n\n /**\n * Handle a single construct.\n *\n * @param {Construct} construct\n * Construct.\n * @returns {State}\n * State.\n */\n function handleConstruct(construct) {\n return start;\n\n /** @type {State} */\n function start(code) {\n // To do: not needed to store if there is no bogus state, probably?\n // Currently doesn’t work because `inspect` in document does a check\n // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n // by not storing.\n info = store();\n currentConstruct = construct;\n if (!construct.partial) {\n context.currentConstruct = construct;\n }\n\n // Always populated by defaults.\n\n if (construct.name && context.parser.constructs.disable.null.includes(construct.name)) {\n return nok(code);\n }\n return construct.tokenize.call(\n // If we do have fields, create an object w/ `context` as its\n // prototype.\n // This allows a “live binding”, which is needed for `interrupt`.\n fields ? Object.assign(Object.create(context), fields) : context, effects, ok, nok)(code);\n }\n }\n\n /** @type {State} */\n function ok(code) {\n consumed = true;\n onreturn(currentConstruct, info);\n return returnState;\n }\n\n /** @type {State} */\n function nok(code) {\n consumed = true;\n info.restore();\n if (++constructIndex < listOfConstructs.length) {\n return handleConstruct(listOfConstructs[constructIndex]);\n }\n return bogusState;\n }\n }\n }\n\n /**\n * @param {Construct} construct\n * Construct.\n * @param {number} from\n * From.\n * @returns {undefined}\n * Nothing.\n */\n function addResult(construct, from) {\n if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n resolveAllConstructs.push(construct);\n }\n if (construct.resolve) {\n splice(context.events, from, context.events.length - from, construct.resolve(context.events.slice(from), context));\n }\n if (construct.resolveTo) {\n context.events = construct.resolveTo(context.events, context);\n }\n }\n\n /**\n * Store state.\n *\n * @returns {Info}\n * Info.\n */\n function store() {\n const startPoint = now();\n const startPrevious = context.previous;\n const startCurrentConstruct = context.currentConstruct;\n const startEventsIndex = context.events.length;\n const startStack = Array.from(stack);\n return {\n from: startEventsIndex,\n restore\n };\n\n /**\n * Restore state.\n *\n * @returns {undefined}\n * Nothing.\n */\n function restore() {\n point = startPoint;\n context.previous = startPrevious;\n context.currentConstruct = startCurrentConstruct;\n context.events.length = startEventsIndex;\n stack = startStack;\n accountForPotentialSkip();\n }\n }\n\n /**\n * Move the current point a bit forward in the line when it’s on a column\n * skip.\n *\n * @returns {undefined}\n * Nothing.\n */\n function accountForPotentialSkip() {\n if (point.line in columnStart && point.column < 2) {\n point.column = columnStart[point.line];\n point.offset += columnStart[point.line] - 1;\n }\n }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n * Chunks.\n * @param {Pick<Token, 'end' | 'start'>} token\n * Token.\n * @returns {Array<Chunk>}\n * Chunks.\n */\nfunction sliceChunks(chunks, token) {\n const startIndex = token.start._index;\n const startBufferIndex = token.start._bufferIndex;\n const endIndex = token.end._index;\n const endBufferIndex = token.end._bufferIndex;\n /** @type {Array<Chunk>} */\n let view;\n if (startIndex === endIndex) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)];\n } else {\n view = chunks.slice(startIndex, endIndex);\n if (startBufferIndex > -1) {\n const head = view[0];\n if (typeof head === 'string') {\n view[0] = head.slice(startBufferIndex);\n /* c8 ignore next 4 -- used to be used, no longer */\n } else {\n view.shift();\n }\n }\n if (endBufferIndex > 0) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view.push(chunks[endIndex].slice(0, endBufferIndex));\n }\n }\n return view;\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n * Chunks.\n * @param {boolean | undefined} [expandTabs=false]\n * Whether to expand tabs (default: `false`).\n * @returns {string}\n * Result.\n */\nfunction serializeChunks(chunks, expandTabs) {\n let index = -1;\n /** @type {Array<string>} */\n const result = [];\n /** @type {boolean | undefined} */\n let atTab;\n while (++index < chunks.length) {\n const chunk = chunks[index];\n /** @type {string} */\n let value;\n if (typeof chunk === 'string') {\n value = chunk;\n } else switch (chunk) {\n case -5:\n {\n value = \"\\r\";\n break;\n }\n case -4:\n {\n value = \"\\n\";\n break;\n }\n case -3:\n {\n value = \"\\r\" + \"\\n\";\n break;\n }\n case -2:\n {\n value = expandTabs ? \" \" : \"\\t\";\n break;\n }\n case -1:\n {\n if (!expandTabs && atTab) continue;\n value = \" \";\n break;\n }\n default:\n {\n // Currently only replacement character.\n value = String.fromCharCode(chunk);\n }\n }\n atTab = chunk === -2;\n result.push(value);\n }\n return result.join('');\n}","/**\n * @import {\n * Create,\n * FullNormalizedExtension,\n * InitialConstruct,\n * ParseContext,\n * ParseOptions\n * } from 'micromark-util-types'\n */\n\nimport { combineExtensions } from 'micromark-util-combine-extensions';\nimport { content } from './initialize/content.js';\nimport { document } from './initialize/document.js';\nimport { flow } from './initialize/flow.js';\nimport { string, text } from './initialize/text.js';\nimport * as defaultConstructs from './constructs.js';\nimport { createTokenizer } from './create-tokenizer.js';\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n * Configuration (optional).\n * @returns {ParseContext}\n * Parser.\n */\nexport function parse(options) {\n const settings = options || {};\n const constructs = /** @type {FullNormalizedExtension} */\n combineExtensions([defaultConstructs, ...(settings.extensions || [])]);\n\n /** @type {ParseContext} */\n const parser = {\n constructs,\n content: create(content),\n defined: [],\n document: create(document),\n flow: create(flow),\n lazy: {},\n string: create(string),\n text: create(text)\n };\n return parser;\n\n /**\n * @param {InitialConstruct} initial\n * Construct to start with.\n * @returns {Create}\n * Create a tokenizer.\n */\n function create(initial) {\n return creator;\n /** @type {Create} */\n function creator(from) {\n return createTokenizer(parser, initial, from);\n }\n }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\nimport { subtokenize } from 'micromark-util-subtokenize';\n\n/**\n * @param {Array<Event>} events\n * Events.\n * @returns {Array<Event>}\n * Events.\n */\nexport function postprocess(events) {\n while (!subtokenize(events)) {\n // Empty\n }\n return events;\n}","/**\n * @import {Chunk, Code, Encoding, Value} from 'micromark-util-types'\n */\n\n/**\n * @callback Preprocessor\n * Preprocess a value.\n * @param {Value} value\n * Value.\n * @param {Encoding | null | undefined} [encoding]\n * Encoding when `value` is a typed array (optional).\n * @param {boolean | null | undefined} [end=false]\n * Whether this is the last chunk (default: `false`).\n * @returns {Array<Chunk>}\n * Chunks.\n */\n\nconst search = /[\\0\\t\\n\\r]/g;\n\n/**\n * @returns {Preprocessor}\n * Preprocess a value.\n */\nexport function preprocess() {\n let column = 1;\n let buffer = '';\n /** @type {boolean | undefined} */\n let start = true;\n /** @type {boolean | undefined} */\n let atCarriageReturn;\n return preprocessor;\n\n /** @type {Preprocessor} */\n // eslint-disable-next-line complexity\n function preprocessor(value, encoding, end) {\n /** @type {Array<Chunk>} */\n const chunks = [];\n /** @type {RegExpMatchArray | null} */\n let match;\n /** @type {number} */\n let next;\n /** @type {number} */\n let startPosition;\n /** @type {number} */\n let endPosition;\n /** @type {Code} */\n let code;\n value = buffer + (typeof value === 'string' ? value.toString() : new TextDecoder(encoding || undefined).decode(value));\n startPosition = 0;\n buffer = '';\n if (start) {\n // To do: `markdown-rs` actually parses BOMs (byte order mark).\n if (value.charCodeAt(0) === 65279) {\n startPosition++;\n }\n start = undefined;\n }\n while (startPosition < value.length) {\n search.lastIndex = startPosition;\n match = search.exec(value);\n endPosition = match && match.index !== undefined ? match.index : value.length;\n code = value.charCodeAt(endPosition);\n if (!match) {\n buffer = value.slice(startPosition);\n break;\n }\n if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n chunks.push(-3);\n atCarriageReturn = undefined;\n } else {\n if (atCarriageReturn) {\n chunks.push(-5);\n atCarriageReturn = undefined;\n }\n if (startPosition < endPosition) {\n chunks.push(value.slice(startPosition, endPosition));\n column += endPosition - startPosition;\n }\n switch (code) {\n case 0:\n {\n chunks.push(65533);\n column++;\n break;\n }\n case 9:\n {\n next = Math.ceil(column / 4) * 4;\n chunks.push(-2);\n while (column++ < next) chunks.push(-1);\n break;\n }\n case 10:\n {\n chunks.push(-4);\n column = 1;\n break;\n }\n default:\n {\n atCarriageReturn = true;\n column = 1;\n }\n }\n }\n startPosition = endPosition + 1;\n }\n if (end) {\n if (atCarriageReturn) chunks.push(-5);\n if (buffer) chunks.push(buffer);\n chunks.push(null);\n }\n return chunks;\n }\n}","import { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nconst characterEscapeOrReference = /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n * Value to decode.\n * @returns {string}\n * Decoded value.\n */\nexport function decodeString(value) {\n return value.replace(characterEscapeOrReference, decode);\n}\n\n/**\n * @param {string} $0\n * Match.\n * @param {string} $1\n * Character escape.\n * @param {string} $2\n * Character reference.\n * @returns {string}\n * Decoded value\n */\nfunction decode($0, $1, $2) {\n if ($1) {\n // Escape.\n return $1;\n }\n\n // Reference.\n const head = $2.charCodeAt(0);\n if (head === 35) {\n const head = $2.charCodeAt(1);\n const hex = head === 120 || head === 88;\n return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10);\n }\n return decodeNamedCharacterReference($2) || $0;\n}","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n * Node, position, or point.\n * @returns {string}\n * Pretty printed positional info of a node (`string`).\n *\n * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n * or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n * column, `s` for `start`, and `e` for end.\n * An empty string (`''`) is returned if the given value is neither `node`,\n * `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if ('position' in value || 'type' in value) {\n return position(value.position)\n }\n\n // Position.\n if ('start' in value || 'end' in value) {\n return position(value)\n }\n\n // Point.\n if ('line' in value || 'column' in value) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @import {\n * Break,\n * Blockquote,\n * Code,\n * Definition,\n * Emphasis,\n * Heading,\n * Html,\n * Image,\n * InlineCode,\n * Link,\n * ListItem,\n * List,\n * Nodes,\n * Paragraph,\n * PhrasingContent,\n * ReferenceType,\n * Root,\n * Strong,\n * Text,\n * ThematicBreak\n * } from 'mdast'\n * @import {\n * Encoding,\n * Event,\n * Token,\n * Value\n * } from 'micromark-util-types'\n * @import {Point} from 'unist'\n * @import {\n * CompileContext,\n * CompileData,\n * Config,\n * Extension,\n * Handle,\n * OnEnterError,\n * Options\n * } from './types.js'\n */\n\nimport { toString } from 'mdast-util-to-string';\nimport { parse, postprocess, preprocess } from 'micromark';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nimport { decodeString } from 'micromark-util-decode-string';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { stringifyPosition } from 'unist-util-stringify-position';\nconst own = {}.hasOwnProperty;\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n * Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n * Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {Root}\n * mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n if (typeof encoding !== 'string') {\n options = encoding;\n encoding = undefined;\n }\n return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n /** @type {Config} */\n const config = {\n transforms: [],\n canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n enter: {\n autolink: opener(link),\n autolinkProtocol: onenterdata,\n autolinkEmail: onenterdata,\n atxHeading: opener(heading),\n blockQuote: opener(blockQuote),\n characterEscape: onenterdata,\n characterReference: onenterdata,\n codeFenced: opener(codeFlow),\n codeFencedFenceInfo: buffer,\n codeFencedFenceMeta: buffer,\n codeIndented: opener(codeFlow, buffer),\n codeText: opener(codeText, buffer),\n codeTextData: onenterdata,\n data: onenterdata,\n codeFlowValue: onenterdata,\n definition: opener(definition),\n definitionDestinationString: buffer,\n definitionLabelString: buffer,\n definitionTitleString: buffer,\n emphasis: opener(emphasis),\n hardBreakEscape: opener(hardBreak),\n hardBreakTrailing: opener(hardBreak),\n htmlFlow: opener(html, buffer),\n htmlFlowData: onenterdata,\n htmlText: opener(html, buffer),\n htmlTextData: onenterdata,\n image: opener(image),\n label: buffer,\n link: opener(link),\n listItem: opener(listItem),\n listItemValue: onenterlistitemvalue,\n listOrdered: opener(list, onenterlistordered),\n listUnordered: opener(list),\n paragraph: opener(paragraph),\n reference: onenterreference,\n referenceString: buffer,\n resourceDestinationString: buffer,\n resourceTitleString: buffer,\n setextHeading: opener(heading),\n strong: opener(strong),\n thematicBreak: opener(thematicBreak)\n },\n exit: {\n atxHeading: closer(),\n atxHeadingSequence: onexitatxheadingsequence,\n autolink: closer(),\n autolinkEmail: onexitautolinkemail,\n autolinkProtocol: onexitautolinkprotocol,\n blockQuote: closer(),\n characterEscapeValue: onexitdata,\n characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n characterReferenceValue: onexitcharacterreferencevalue,\n characterReference: onexitcharacterreference,\n codeFenced: closer(onexitcodefenced),\n codeFencedFence: onexitcodefencedfence,\n codeFencedFenceInfo: onexitcodefencedfenceinfo,\n codeFencedFenceMeta: onexitcodefencedfencemeta,\n codeFlowValue: onexitdata,\n codeIndented: closer(onexitcodeindented),\n codeText: closer(onexitcodetext),\n codeTextData: onexitdata,\n data: onexitdata,\n definition: closer(),\n definitionDestinationString: onexitdefinitiondestinationstring,\n definitionLabelString: onexitdefinitionlabelstring,\n definitionTitleString: onexitdefinitiontitlestring,\n emphasis: closer(),\n hardBreakEscape: closer(onexithardbreak),\n hardBreakTrailing: closer(onexithardbreak),\n htmlFlow: closer(onexithtmlflow),\n htmlFlowData: onexitdata,\n htmlText: closer(onexithtmltext),\n htmlTextData: onexitdata,\n image: closer(onexitimage),\n label: onexitlabel,\n labelText: onexitlabeltext,\n lineEnding: onexitlineending,\n link: closer(onexitlink),\n listItem: closer(),\n listOrdered: closer(),\n listUnordered: closer(),\n paragraph: closer(),\n referenceString: onexitreferencestring,\n resourceDestinationString: onexitresourcedestinationstring,\n resourceTitleString: onexitresourcetitlestring,\n resource: onexitresource,\n setextHeading: closer(onexitsetextheading),\n setextHeadingLineSequence: onexitsetextheadinglinesequence,\n setextHeadingText: onexitsetextheadingtext,\n strong: closer(),\n thematicBreak: closer()\n }\n };\n configure(config, (options || {}).mdastExtensions || []);\n\n /** @type {CompileData} */\n const data = {};\n return compile;\n\n /**\n * Turn micromark events into an mdast tree.\n *\n * @param {Array<Event>} events\n * Events.\n * @returns {Root}\n * mdast tree.\n */\n function compile(events) {\n /** @type {Root} */\n let tree = {\n type: 'root',\n children: []\n };\n /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n const context = {\n stack: [tree],\n tokenStack: [],\n config,\n enter,\n exit,\n buffer,\n resume,\n data\n };\n /** @type {Array<number>} */\n const listStack = [];\n let index = -1;\n while (++index < events.length) {\n // We preprocess lists to add `listItem` tokens, and to infer whether\n // items the list itself are spread out.\n if (events[index][1].type === \"listOrdered\" || events[index][1].type === \"listUnordered\") {\n if (events[index][0] === 'enter') {\n listStack.push(index);\n } else {\n const tail = listStack.pop();\n index = prepareList(events, tail, index);\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n const handler = config[events[index][0]];\n if (own.call(handler, events[index][1].type)) {\n handler[events[index][1].type].call(Object.assign({\n sliceSerialize: events[index][2].sliceSerialize\n }, context), events[index][1]);\n }\n }\n\n // Handle tokens still being open.\n if (context.tokenStack.length > 0) {\n const tail = context.tokenStack[context.tokenStack.length - 1];\n const handler = tail[1] || defaultOnError;\n handler.call(context, undefined, tail[0]);\n }\n\n // Figure out `root` position.\n tree.position = {\n start: point(events.length > 0 ? events[0][1].start : {\n line: 1,\n column: 1,\n offset: 0\n }),\n end: point(events.length > 0 ? events[events.length - 2][1].end : {\n line: 1,\n column: 1,\n offset: 0\n })\n };\n\n // Call transforms.\n index = -1;\n while (++index < config.transforms.length) {\n tree = config.transforms[index](tree) || tree;\n }\n return tree;\n }\n\n /**\n * @param {Array<Event>} events\n * @param {number} start\n * @param {number} length\n * @returns {number}\n */\n function prepareList(events, start, length) {\n let index = start - 1;\n let containerBalance = -1;\n let listSpread = false;\n /** @type {Token | undefined} */\n let listItem;\n /** @type {number | undefined} */\n let lineIndex;\n /** @type {number | undefined} */\n let firstBlankLineIndex;\n /** @type {boolean | undefined} */\n let atMarker;\n while (++index <= length) {\n const event = events[index];\n switch (event[1].type) {\n case \"listUnordered\":\n case \"listOrdered\":\n case \"blockQuote\":\n {\n if (event[0] === 'enter') {\n containerBalance++;\n } else {\n containerBalance--;\n }\n atMarker = undefined;\n break;\n }\n case \"lineEndingBlank\":\n {\n if (event[0] === 'enter') {\n if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n firstBlankLineIndex = index;\n }\n atMarker = undefined;\n }\n break;\n }\n case \"linePrefix\":\n case \"listItemValue\":\n case \"listItemMarker\":\n case \"listItemPrefix\":\n case \"listItemPrefixWhitespace\":\n {\n // Empty.\n\n break;\n }\n default:\n {\n atMarker = undefined;\n }\n }\n if (!containerBalance && event[0] === 'enter' && event[1].type === \"listItemPrefix\" || containerBalance === -1 && event[0] === 'exit' && (event[1].type === \"listUnordered\" || event[1].type === \"listOrdered\")) {\n if (listItem) {\n let tailIndex = index;\n lineIndex = undefined;\n while (tailIndex--) {\n const tailEvent = events[tailIndex];\n if (tailEvent[1].type === \"lineEnding\" || tailEvent[1].type === \"lineEndingBlank\") {\n if (tailEvent[0] === 'exit') continue;\n if (lineIndex) {\n events[lineIndex][1].type = \"lineEndingBlank\";\n listSpread = true;\n }\n tailEvent[1].type = \"lineEnding\";\n lineIndex = tailIndex;\n } else if (tailEvent[1].type === \"linePrefix\" || tailEvent[1].type === \"blockQuotePrefix\" || tailEvent[1].type === \"blockQuotePrefixWhitespace\" || tailEvent[1].type === \"blockQuoteMarker\" || tailEvent[1].type === \"listItemIndent\") {\n // Empty\n } else {\n break;\n }\n }\n if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n listItem._spread = true;\n }\n\n // Fix position.\n listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\n events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]);\n index++;\n length++;\n }\n\n // Create a new list item.\n if (event[1].type === \"listItemPrefix\") {\n /** @type {Token} */\n const item = {\n type: 'listItem',\n _spread: false,\n start: Object.assign({}, event[1].start),\n // @ts-expect-error: we’ll add `end` in a second.\n end: undefined\n };\n listItem = item;\n events.splice(index, 0, ['enter', item, event[2]]);\n index++;\n length++;\n firstBlankLineIndex = undefined;\n atMarker = true;\n }\n }\n }\n events[start][1]._spread = listSpread;\n return length;\n }\n\n /**\n * Create an opener handle.\n *\n * @param {(token: Token) => Nodes} create\n * Create a node.\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function opener(create, and) {\n return open;\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function open(token) {\n enter.call(this, create(token), token);\n if (and) and.call(this, token);\n }\n }\n\n /**\n * @type {CompileContext['buffer']}\n */\n function buffer() {\n this.stack.push({\n type: 'fragment',\n children: []\n });\n }\n\n /**\n * @type {CompileContext['enter']}\n */\n function enter(node, token, errorHandler) {\n const parent = this.stack[this.stack.length - 1];\n /** @type {Array<Nodes>} */\n const siblings = parent.children;\n siblings.push(node);\n this.stack.push(node);\n this.tokenStack.push([token, errorHandler || undefined]);\n node.position = {\n start: point(token.start),\n // @ts-expect-error: `end` will be patched later.\n end: undefined\n };\n }\n\n /**\n * Create a closer handle.\n *\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function closer(and) {\n return close;\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function close(token) {\n if (and) and.call(this, token);\n exit.call(this, token);\n }\n }\n\n /**\n * @type {CompileContext['exit']}\n */\n function exit(token, onExitError) {\n const node = this.stack.pop();\n const open = this.tokenStack.pop();\n if (!open) {\n throw new Error('Cannot close `' + token.type + '` (' + stringifyPosition({\n start: token.start,\n end: token.end\n }) + '): it’s not open');\n } else if (open[0].type !== token.type) {\n if (onExitError) {\n onExitError.call(this, token, open[0]);\n } else {\n const handler = open[1] || defaultOnError;\n handler.call(this, token, open[0]);\n }\n }\n node.position.end = point(token.end);\n }\n\n /**\n * @type {CompileContext['resume']}\n */\n function resume() {\n return toString(this.stack.pop());\n }\n\n //\n // Handlers.\n //\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistordered() {\n this.data.expectingFirstListItemValue = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistitemvalue(token) {\n if (this.data.expectingFirstListItemValue) {\n const ancestor = this.stack[this.stack.length - 2];\n ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n this.data.expectingFirstListItemValue = undefined;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfenceinfo() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.lang = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfencemeta() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.meta = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfence() {\n // Exit if this is the closing fence.\n if (this.data.flowCodeInside) return;\n this.buffer();\n this.data.flowCodeInside = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefenced() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '');\n this.data.flowCodeInside = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodeindented() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data.replace(/(\\r?\\n|\\r)$/g, '');\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitionlabelstring(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.label = label;\n node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiontitlestring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.title = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiondestinationstring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.url = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitatxheadingsequence(token) {\n const node = this.stack[this.stack.length - 1];\n if (!node.depth) {\n const depth = this.sliceSerialize(token).length;\n node.depth = depth;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadingtext() {\n this.data.setextHeadingSlurpLineEnding = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadinglinesequence(token) {\n const node = this.stack[this.stack.length - 1];\n node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheading() {\n this.data.setextHeadingSlurpLineEnding = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterdata(token) {\n const node = this.stack[this.stack.length - 1];\n /** @type {Array<Nodes>} */\n const siblings = node.children;\n let tail = siblings[siblings.length - 1];\n if (!tail || tail.type !== 'text') {\n // Add a new text node.\n tail = text();\n tail.position = {\n start: point(token.start),\n // @ts-expect-error: we’ll add `end` later.\n end: undefined\n };\n siblings.push(tail);\n }\n this.stack.push(tail);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitdata(token) {\n const tail = this.stack.pop();\n tail.value += this.sliceSerialize(token);\n tail.position.end = point(token.end);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlineending(token) {\n const context = this.stack[this.stack.length - 1];\n // If we’re at a hard break, include the line ending in there.\n if (this.data.atHardBreak) {\n const tail = context.children[context.children.length - 1];\n tail.position.end = point(token.end);\n this.data.atHardBreak = undefined;\n return;\n }\n if (!this.data.setextHeadingSlurpLineEnding && config.canContainEols.includes(context.type)) {\n onenterdata.call(this, token);\n onexitdata.call(this, token);\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithardbreak() {\n this.data.atHardBreak = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmlflow() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmltext() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcodetext() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlink() {\n const node = this.stack[this.stack.length - 1];\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut';\n node.type += 'Reference';\n // @ts-expect-error: mutate.\n node.referenceType = referenceType;\n // @ts-expect-error: mutate.\n delete node.url;\n delete node.title;\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier;\n // @ts-expect-error: mutate.\n delete node.label;\n }\n this.data.referenceType = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitimage() {\n const node = this.stack[this.stack.length - 1];\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut';\n node.type += 'Reference';\n // @ts-expect-error: mutate.\n node.referenceType = referenceType;\n // @ts-expect-error: mutate.\n delete node.url;\n delete node.title;\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier;\n // @ts-expect-error: mutate.\n delete node.label;\n }\n this.data.referenceType = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabeltext(token) {\n const string = this.sliceSerialize(token);\n const ancestor = this.stack[this.stack.length - 2];\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n ancestor.label = decodeString(string);\n // @ts-expect-error: same as above.\n ancestor.identifier = normalizeIdentifier(string).toLowerCase();\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabel() {\n const fragment = this.stack[this.stack.length - 1];\n const value = this.resume();\n const node = this.stack[this.stack.length - 1];\n // Assume a reference.\n this.data.inReference = true;\n if (node.type === 'link') {\n /** @type {Array<PhrasingContent>} */\n const children = fragment.children;\n node.children = children;\n } else {\n node.alt = value;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcedestinationstring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.url = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcetitlestring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.title = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresource() {\n this.data.inReference = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterreference() {\n this.data.referenceType = 'collapsed';\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitreferencestring(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n node.label = label;\n // @ts-expect-error: same as above.\n node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n this.data.referenceType = 'full';\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcharacterreferencemarker(token) {\n this.data.characterReferenceType = token.type;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreferencevalue(token) {\n const data = this.sliceSerialize(token);\n const type = this.data.characterReferenceType;\n /** @type {string} */\n let value;\n if (type) {\n value = decodeNumericCharacterReference(data, type === \"characterReferenceMarkerNumeric\" ? 10 : 16);\n this.data.characterReferenceType = undefined;\n } else {\n const result = decodeNamedCharacterReference(data);\n value = result;\n }\n const tail = this.stack[this.stack.length - 1];\n tail.value += value;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreference(token) {\n const tail = this.stack.pop();\n tail.position.end = point(token.end);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkprotocol(token) {\n onexitdata.call(this, token);\n const node = this.stack[this.stack.length - 1];\n node.url = this.sliceSerialize(token);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkemail(token) {\n onexitdata.call(this, token);\n const node = this.stack[this.stack.length - 1];\n node.url = 'mailto:' + this.sliceSerialize(token);\n }\n\n //\n // Creaters.\n //\n\n /** @returns {Blockquote} */\n function blockQuote() {\n return {\n type: 'blockquote',\n children: []\n };\n }\n\n /** @returns {Code} */\n function codeFlow() {\n return {\n type: 'code',\n lang: null,\n meta: null,\n value: ''\n };\n }\n\n /** @returns {InlineCode} */\n function codeText() {\n return {\n type: 'inlineCode',\n value: ''\n };\n }\n\n /** @returns {Definition} */\n function definition() {\n return {\n type: 'definition',\n identifier: '',\n label: null,\n title: null,\n url: ''\n };\n }\n\n /** @returns {Emphasis} */\n function emphasis() {\n return {\n type: 'emphasis',\n children: []\n };\n }\n\n /** @returns {Heading} */\n function heading() {\n return {\n type: 'heading',\n // @ts-expect-error `depth` will be set later.\n depth: 0,\n children: []\n };\n }\n\n /** @returns {Break} */\n function hardBreak() {\n return {\n type: 'break'\n };\n }\n\n /** @returns {Html} */\n function html() {\n return {\n type: 'html',\n value: ''\n };\n }\n\n /** @returns {Image} */\n function image() {\n return {\n type: 'image',\n title: null,\n url: '',\n alt: null\n };\n }\n\n /** @returns {Link} */\n function link() {\n return {\n type: 'link',\n title: null,\n url: '',\n children: []\n };\n }\n\n /**\n * @param {Token} token\n * @returns {List}\n */\n function list(token) {\n return {\n type: 'list',\n ordered: token.type === 'listOrdered',\n start: null,\n spread: token._spread,\n children: []\n };\n }\n\n /**\n * @param {Token} token\n * @returns {ListItem}\n */\n function listItem(token) {\n return {\n type: 'listItem',\n spread: token._spread,\n checked: null,\n children: []\n };\n }\n\n /** @returns {Paragraph} */\n function paragraph() {\n return {\n type: 'paragraph',\n children: []\n };\n }\n\n /** @returns {Strong} */\n function strong() {\n return {\n type: 'strong',\n children: []\n };\n }\n\n /** @returns {Text} */\n function text() {\n return {\n type: 'text',\n value: ''\n };\n }\n\n /** @returns {ThematicBreak} */\n function thematicBreak() {\n return {\n type: 'thematicBreak'\n };\n }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n * Point-like value.\n * @returns {Point}\n * unist point.\n */\nfunction point(d) {\n return {\n line: d.line,\n column: d.column,\n offset: d.offset\n };\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Array<Extension> | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n let index = -1;\n while (++index < extensions.length) {\n const value = extensions[index];\n if (Array.isArray(value)) {\n configure(combined, value);\n } else {\n extension(combined, value);\n }\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n /** @type {keyof Extension} */\n let key;\n for (key in extension) {\n if (own.call(extension, key)) {\n switch (key) {\n case 'canContainEols':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(...right);\n }\n break;\n }\n case 'transforms':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(...right);\n }\n break;\n }\n case 'enter':\n case 'exit':\n {\n const right = extension[key];\n if (right) {\n Object.assign(combined[key], right);\n }\n break;\n }\n // No default\n }\n }\n }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n if (left) {\n throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n start: left.start,\n end: left.end\n }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is open');\n } else {\n throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is still open');\n }\n}","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser<Root>} Parser\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {Omit<FromMarkdownOptions, 'extensions' | 'mdastExtensions'>} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkParse(options) {\n /** @type {Processor} */\n // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n const self = this\n\n self.parser = parser\n\n /**\n * @type {Parser}\n */\n function parser(doc) {\n return fromMarkdown(doc, {\n ...self.data('settings'),\n ...options,\n // Note: these options are not in the readme.\n // The goal is for them to be set by plugins on `data` instead of being\n // passed by users.\n extensions: self.data('micromarkExtensions') || [],\n mdastExtensions: self.data('fromMarkdownExtensions') || []\n })\n }\n}\n","/**\n * @callback Handler\n * Handle a value, with a certain ID field set to a certain value.\n * The ID field is passed to `zwitch`, and it’s value is this function’s\n * place on the `handlers` record.\n * @param {...any} parameters\n * Arbitrary parameters passed to the zwitch.\n * The first will be an object with a certain ID field set to a certain value.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback UnknownHandler\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @param {unknown} value\n * An object with a certain ID field set to an unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback InvalidHandler\n * Handle values that do not have a certain ID field.\n * @param {unknown} value\n * Any unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {void|null|undefined|never}\n * This should crash or return nothing.\n */\n\n/**\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @typedef Options\n * Configuration (required).\n * @property {Invalid} [invalid]\n * Handler to use for invalid values.\n * @property {Unknown} [unknown]\n * Handler to use for unknown values.\n * @property {Handlers} [handlers]\n * Handlers to use.\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Handle values based on a field.\n *\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @param {string} key\n * Field to switch on.\n * @param {Options<Invalid, Unknown, Handlers>} [options]\n * Configuration (required).\n * @returns {{unknown: Unknown, invalid: Invalid, handlers: Handlers, (...parameters: Parameters<Handlers[keyof Handlers]>): ReturnType<Handlers[keyof Handlers]>, (...parameters: Parameters<Unknown>): ReturnType<Unknown>}}\n */\nexport function zwitch(key, options) {\n const settings = options || {}\n\n /**\n * Handle one value.\n *\n * Based on the bound `key`, a respective handler will be called.\n * If `value` is not an object, or doesn’t have a `key` property, the special\n * “invalid” handler will be called.\n * If `value` has an unknown `key`, the special “unknown” handler will be\n * called.\n *\n * All arguments, and the context object, are passed through to the handler,\n * and it’s result is returned.\n *\n * @this {unknown}\n * Any context object.\n * @param {unknown} [value]\n * Any value.\n * @param {...unknown} parameters\n * Arbitrary parameters passed to the zwitch.\n * @property {Handler} invalid\n * Handle for values that do not have a certain ID field.\n * @property {Handler} unknown\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @property {Handlers} handlers\n * Record of handlers.\n * @returns {unknown}\n * Anything.\n */\n function one(value, ...parameters) {\n /** @type {Handler|undefined} */\n let fn = one.invalid\n const handlers = one.handlers\n\n if (value && own.call(value, key)) {\n // @ts-expect-error Indexable.\n const id = String(value[key])\n // @ts-expect-error Indexable.\n fn = own.call(handlers, id) ? handlers[id] : one.unknown\n }\n\n if (fn) {\n return fn.call(this, value, ...parameters)\n }\n }\n\n one.handlers = settings.handlers || {}\n one.invalid = settings.invalid\n one.unknown = settings.unknown\n\n // @ts-expect-error: matches!\n return one\n}\n","/**\n * @import {Options, State} from './types.js'\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * @param {State} base\n * @param {Options} extension\n * @returns {State}\n */\nexport function configure(base, extension) {\n let index = -1\n /** @type {keyof Options} */\n let key\n\n // First do subextensions.\n if (extension.extensions) {\n while (++index < extension.extensions.length) {\n configure(base, extension.extensions[index])\n }\n }\n\n for (key in extension) {\n if (own.call(extension, key)) {\n switch (key) {\n case 'extensions': {\n // Empty.\n break\n }\n\n /* c8 ignore next 4 */\n case 'unsafe': {\n list(base[key], extension[key])\n break\n }\n\n case 'join': {\n list(base[key], extension[key])\n break\n }\n\n case 'handlers': {\n map(base[key], extension[key])\n break\n }\n\n default: {\n // @ts-expect-error: matches.\n base.options[key] = extension[key]\n }\n }\n }\n }\n\n return base\n}\n\n/**\n * @template T\n * @param {Array<T>} left\n * @param {Array<T> | null | undefined} right\n */\nfunction list(left, right) {\n if (right) {\n left.push(...right)\n }\n}\n\n/**\n * @template T\n * @param {Record<string, T>} left\n * @param {Record<string, T> | null | undefined} right\n */\nfunction map(left, right) {\n if (right) {\n Object.assign(left, right)\n }\n}\n","/**\n * @import {Blockquote, Parents} from 'mdast'\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Blockquote} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function blockquote(node, _, state, info) {\n const exit = state.enter('blockquote')\n const tracker = state.createTracker(info)\n tracker.move('> ')\n tracker.shift(2)\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return '>' + (blank ? '' : ' ') + line\n}\n","/**\n * @import {ConstructName, Unsafe} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe} pattern\n * @returns {boolean}\n */\nexport function patternInScope(stack, pattern) {\n return (\n listInScope(stack, pattern.inConstruct, true) &&\n !listInScope(stack, pattern.notInConstruct, false)\n )\n}\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe['inConstruct']} list\n * @param {boolean} none\n * @returns {boolean}\n */\nfunction listInScope(stack, list, none) {\n if (typeof list === 'string') {\n list = [list]\n }\n\n if (!list || list.length === 0) {\n return none\n }\n\n let index = -1\n\n while (++index < list.length) {\n if (stack.includes(list[index])) {\n return true\n }\n }\n\n return false\n}\n","/**\n * @import {Break, Parents} from 'mdast'\n * @import {Info, State} from 'mdast-util-to-markdown'\n */\n\nimport {patternInScope} from '../util/pattern-in-scope.js'\n\n/**\n * @param {Break} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function hardBreak(_, _1, state, info) {\n let index = -1\n\n while (++index < state.unsafe.length) {\n // If we can’t put eols in this construct (setext headings, tables), use a\n // space instead.\n if (\n state.unsafe[index].character === '\\n' &&\n patternInScope(state.stack, state.unsafe[index])\n ) {\n return /[ \\t]/.test(info.before) ? '' : ' '\n }\n }\n\n return '\\\\\\n'\n}\n","/**\n * Get the count of the longest repeating streak of `substring` in `value`.\n *\n * @param {string} value\n * Content to search in.\n * @param {string} substring\n * Substring to look for, typically one character.\n * @returns {number}\n * Count of most frequent adjacent `substring`s in `value`.\n */\nexport function longestStreak(value, substring) {\n const source = String(value)\n let index = source.indexOf(substring)\n let expected = index\n let count = 0\n let max = 0\n\n if (typeof substring !== 'string') {\n throw new TypeError('Expected substring')\n }\n\n while (index !== -1) {\n if (index === expected) {\n if (++count > max) {\n max = count\n }\n } else {\n count = 1\n }\n\n expected = index + substring.length\n index = source.indexOf(substring, expected)\n }\n\n return max\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Code} from 'mdast'\n */\n\n/**\n * @param {Code} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatCodeAsIndented(node, state) {\n return Boolean(\n state.options.fences === false &&\n node.value &&\n // If there’s no info…\n !node.lang &&\n // And there’s a non-whitespace character…\n /[^ \\r\\n]/.test(node.value) &&\n // And the value doesn’t start or end in a blank…\n !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n )\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['fence'], null | undefined>}\n */\nexport function checkFence(state) {\n const marker = state.options.fence || '`'\n\n if (marker !== '`' && marker !== '~') {\n throw new Error(\n 'Cannot serialize code with `' +\n marker +\n '` for `options.fence`, expected `` ` `` or `~`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {Code, Parents} from 'mdast'\n */\n\nimport {longestStreak} from 'longest-streak'\nimport {formatCodeAsIndented} from '../util/format-code-as-indented.js'\nimport {checkFence} from '../util/check-fence.js'\n\n/**\n * @param {Code} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function code(node, _, state, info) {\n const marker = checkFence(state)\n const raw = node.value || ''\n const suffix = marker === '`' ? 'GraveAccent' : 'Tilde'\n\n if (formatCodeAsIndented(node, state)) {\n const exit = state.enter('codeIndented')\n const value = state.indentLines(raw, map)\n exit()\n return value\n }\n\n const tracker = state.createTracker(info)\n const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3))\n const exit = state.enter('codeFenced')\n let value = tracker.move(sequence)\n\n if (node.lang) {\n const subexit = state.enter(`codeFencedLang${suffix}`)\n value += tracker.move(\n state.safe(node.lang, {\n before: value,\n after: ' ',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n if (node.lang && node.meta) {\n const subexit = state.enter(`codeFencedMeta${suffix}`)\n value += tracker.move(' ')\n value += tracker.move(\n state.safe(node.meta, {\n before: value,\n after: '\\n',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n value += tracker.move('\\n')\n\n if (raw) {\n value += tracker.move(raw + '\\n')\n }\n\n value += tracker.move(sequence)\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return (blank ? '' : ' ') + line\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['quote'], null | undefined>}\n */\nexport function checkQuote(state) {\n const marker = state.options.quote || '\"'\n\n if (marker !== '\"' && marker !== \"'\") {\n throw new Error(\n 'Cannot serialize title with `' +\n marker +\n '` for `options.quote`, expected `\"`, or `\\'`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Definition, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\n/**\n * @param {Definition} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function definition(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('definition')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n value += tracker.move(\n state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n )\n value += tracker.move(']: ')\n\n subexit()\n\n if (\n // If there’s no url, or…\n !node.url ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : '\\n',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n exit()\n\n return value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['emphasis'], null | undefined>}\n */\nexport function checkEmphasis(state) {\n const marker = state.options.emphasis || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize emphasis with `' +\n marker +\n '` for `options.emphasis`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * Encode a code point as a character reference.\n *\n * @param {number} code\n * Code point to encode.\n * @returns {string}\n * Encoded character reference.\n */\nexport function encodeCharacterReference(code) {\n return '&#x' + code.toString(16).toUpperCase() + ';'\n}\n","/**\n * @import {EncodeSides} from '../types.js'\n */\n\nimport {classifyCharacter} from 'micromark-util-classify-character'\n\n/**\n * Check whether to encode (as a character reference) the characters\n * surrounding an attention run.\n *\n * Which characters are around an attention run influence whether it works or\n * not.\n *\n * See <https://github.com/orgs/syntax-tree/discussions/60> for more info.\n * See this markdown in a particular renderer to see what works:\n *\n * ```markdown\n * | | A (letter inside) | B (punctuation inside) | C (whitespace inside) | D (nothing inside) |\n * | ----------------------- | ----------------- | ---------------------- | --------------------- | ------------------ |\n * | 1 (letter outside) | x*y*z | x*.*z | x* *z | x**z |\n * | 2 (punctuation outside) | .*y*. | .*.*. | .* *. | .**. |\n * | 3 (whitespace outside) | x *y* z | x *.* z | x * * z | x ** z |\n * | 4 (nothing outside) | *x* | *.* | * * | ** |\n * ```\n *\n * @param {number} outside\n * Code point on the outer side of the run.\n * @param {number} inside\n * Code point on the inner side of the run.\n * @param {'*' | '_'} marker\n * Marker of the run.\n * Underscores are handled more strictly (they form less often) than\n * asterisks.\n * @returns {EncodeSides}\n * Whether to encode characters.\n */\n// Important: punctuation must never be encoded.\n// Punctuation is solely used by markdown constructs.\n// And by encoding itself.\n// Encoding them will break constructs or double encode things.\nexport function encodeInfo(outside, inside, marker) {\n const outsideKind = classifyCharacter(outside)\n const insideKind = classifyCharacter(inside)\n\n // Letter outside:\n if (outsideKind === undefined) {\n return insideKind === undefined\n ? // Letter inside:\n // we have to encode *both* letters for `_` as it is looser.\n // it already forms for `*` (and GFMs `~`).\n marker === '_'\n ? {inside: true, outside: true}\n : {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode both (letter, whitespace).\n {inside: true, outside: true}\n : // Punctuation inside: encode outer (letter)\n {inside: false, outside: true}\n }\n\n // Whitespace outside:\n if (outsideKind === 1) {\n return insideKind === undefined\n ? // Letter inside: already forms.\n {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode both (whitespace).\n {inside: true, outside: true}\n : // Punctuation inside: already forms.\n {inside: false, outside: false}\n }\n\n // Punctuation outside:\n return insideKind === undefined\n ? // Letter inside: already forms.\n {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode inner (whitespace).\n {inside: true, outside: false}\n : // Punctuation inside: already forms.\n {inside: false, outside: false}\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Emphasis, Parents} from 'mdast'\n */\n\nimport {checkEmphasis} from '../util/check-emphasis.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nemphasis.peek = emphasisPeek\n\n/**\n * @param {Emphasis} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function emphasis(node, _, state, info) {\n const marker = checkEmphasis(state)\n const exit = state.enter('emphasis')\n const tracker = state.createTracker(info)\n const before = tracker.move(marker)\n\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n )\n const betweenHead = between.charCodeAt(0)\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n )\n\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1)\n }\n\n const betweenTail = between.charCodeAt(between.length - 1)\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n }\n\n const after = tracker.move(marker)\n\n exit()\n\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n }\n return before + between + after\n}\n\n/**\n * @param {Emphasis} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction emphasisPeek(_, _1, state) {\n return state.options.emphasis || '*'\n}\n","/**\n * @import {Node, Parent} from 'unist'\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n * Check that an arbitrary value is a node.\n * @param {unknown} this\n * The given context.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean}\n * Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n * Object to check for equivalence.\n *\n * Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | ReadonlyArray<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n * Check for an arbitrary node.\n *\n * @callback TestFunction\n * Check if a node passes a test.\n * @param {unknown} this\n * The given context.\n * @param {Node} node\n * A node.\n * @param {number | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n * The node’s parent.\n * @returns {boolean | undefined | void}\n * Whether this node passes the test.\n *\n * Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n * Thing to check, typically `Node`.\n * @param {Test} test\n * A check for a specific node.\n * @param {number | null | undefined} index\n * The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n * The node’s parent.\n * @param {unknown} context\n * Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n * Whether `node` is a node and passes a test.\n */\nexport const is =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends ReadonlyArray<string>>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n * (<Condition extends Array<string>>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n * (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((node?: null | undefined) => false) &\n * ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n * )}\n */\n (\n /**\n * @param {unknown} [node]\n * @param {Test} [test]\n * @param {number | null | undefined} [index]\n * @param {Parent | null | undefined} [parent]\n * @param {unknown} [context]\n * @returns {boolean}\n */\n // eslint-disable-next-line max-params\n function (node, test, index, parent, context) {\n const check = convert(test)\n\n if (\n index !== undefined &&\n index !== null &&\n (typeof index !== 'number' ||\n index < 0 ||\n index === Number.POSITIVE_INFINITY)\n ) {\n throw new Error('Expected positive finite index')\n }\n\n if (\n parent !== undefined &&\n parent !== null &&\n (!is(parent) || !parent.children)\n ) {\n throw new Error('Expected parent node')\n }\n\n if (\n (parent === undefined || parent === null) !==\n (index === undefined || index === null)\n ) {\n throw new Error('Expected both parent and index')\n }\n\n return looksLikeANode(node)\n ? check.call(context, node, index, parent)\n : false\n }\n )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n * * when nullish, checks if `node` is a `Node`.\n * * when `string`, works like passing `(node) => node.type === test`.\n * * when `function` checks if function passed the node is true.\n * * when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n * * when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n * An assertion.\n */\nexport const convert =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n (\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n function (test) {\n if (test === null || test === undefined) {\n return ok\n }\n\n if (typeof test === 'function') {\n return castFactory(test)\n }\n\n if (typeof test === 'object') {\n return Array.isArray(test)\n ? anyFactory(test)\n : // Cast because `ReadonlyArray` goes into the above but `isArray`\n // narrows to `Array`.\n propertiesFactory(/** @type {Props} */ (test))\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n throw new Error('Expected function, string, or object as test')\n }\n )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n /** @type {Array<Check>} */\n const checks = []\n let index = -1\n\n while (++index < tests.length) {\n checks[index] = convert(tests[index])\n }\n\n return castFactory(any)\n\n /**\n * @this {unknown}\n * @type {TestFunction}\n */\n function any(...parameters) {\n let index = -1\n\n while (++index < checks.length) {\n if (checks[index].apply(this, parameters)) return true\n }\n\n return false\n }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propertiesFactory(check) {\n const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n return castFactory(all)\n\n /**\n * @param {Node} node\n * @returns {boolean}\n */\n function all(node) {\n const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n /** @type {unknown} */ (node)\n )\n\n /** @type {string} */\n let key\n\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n }\n\n return true\n }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n return castFactory(type)\n\n /**\n * @param {Node} node\n */\n function type(node) {\n return node && node.type === check\n }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n return check\n\n /**\n * @this {unknown}\n * @type {Check}\n */\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) &&\n testFunction.call(\n this,\n value,\n typeof index === 'number' ? index : undefined,\n parent || undefined\n )\n )\n }\n}\n\nfunction ok() {\n return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @import {Node as UnistNode, Parent as UnistParent} from 'unist'\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate<Check, Value> extends Value\n * ? Predicate<Check, Value>\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends ReadonlyArray<infer T>\n * ? MatchesOne<Value, T>\n * : Check extends Array<infer T>\n * ? MatchesOne<Value, T>\n * : MatchesOne<Value, Check>\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array<infer Children>}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent<Node, Child>\n * | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n * Union of the action types.\n *\n * @typedef {number} Index\n * Move to the sibling at `index` next (after node itself is completely\n * traversed).\n *\n * Useful if mutating the tree, such as removing the node the visitor is\n * currently on, or any of its previous siblings.\n * Results less than 0 or greater than or equal to `children.length` stop\n * traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n * List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n * Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform the parent of node (the last of `ancestors`).\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of an ancestor still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Array<VisitedParents>} ancestors\n * Ancestors of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n * Tree type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} test\n * `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n * Handle each node.\n * @param {boolean | null | undefined} [reverse]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n /** @type {Test} */\n let check\n\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n // @ts-expect-error no visitor given, so `visitor` is test.\n visitor = test\n } else {\n // @ts-expect-error visitor given, so `test` isn’t a visitor.\n check = test\n }\n\n const is = convert(check)\n const step = reverse ? -1 : 1\n\n factory(tree, undefined, [])()\n\n /**\n * @param {UnistNode} node\n * @param {number | undefined} index\n * @param {Array<UnistParent>} parents\n */\n function factory(node, index, parents) {\n const value = /** @type {Record<string, unknown>} */ (\n node && typeof node === 'object' ? node : {}\n )\n\n if (typeof value.type === 'string') {\n const name =\n // `hast`\n typeof value.tagName === 'string'\n ? value.tagName\n : // `xast`\n typeof value.name === 'string'\n ? value.name\n : undefined\n\n Object.defineProperty(visit, 'name', {\n value:\n 'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n })\n }\n\n return visit\n\n function visit() {\n /** @type {Readonly<ActionTuple>} */\n let result = empty\n /** @type {Readonly<ActionTuple>} */\n let subresult\n /** @type {number} */\n let offset\n /** @type {Array<UnistParent>} */\n let grandparents\n\n if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n // @ts-expect-error: `visitor` is now a visitor.\n result = toResult(visitor(node, parents))\n\n if (result[0] === EXIT) {\n return result\n }\n }\n\n if ('children' in node && node.children) {\n const nodeAsParent = /** @type {UnistParent} */ (node)\n\n if (nodeAsParent.children && result[0] !== SKIP) {\n offset = (reverse ? nodeAsParent.children.length : -1) + step\n grandparents = parents.concat(nodeAsParent)\n\n while (offset > -1 && offset < nodeAsParent.children.length) {\n const child = nodeAsParent.children[offset]\n\n subresult = factory(child, offset, grandparents)()\n\n if (subresult[0] === EXIT) {\n return subresult\n }\n\n offset =\n typeof subresult[1] === 'number' ? subresult[1] : offset + step\n }\n }\n }\n\n return result\n }\n }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n * Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n * Clean result.\n */\nfunction toResult(value) {\n if (Array.isArray(value)) {\n return value\n }\n\n if (typeof value === 'number') {\n return [CONTINUE, value]\n }\n\n return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate<Check, Value> extends Value\n * ? Predicate<Check, Value>\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends Array<any>\n * ? MatchesOne<Value, Check[keyof Check]>\n * : MatchesOne<Value, Check>\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array<infer Children>}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent<Node, Child>\n * | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform `parent`.\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of `parent` still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n * Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n * Parent of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\n * Build a typed `Visitor` function from a node and all possible parents.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n * Node type.\n * @template {UnistParent} Ancestor\n * Parent type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromMatch<\n * Matches<Descendant, Check>,\n * Extract<Descendant, UnistParent>\n * >\n * )} BuildVisitorFromDescendants\n * Build a typed `Visitor` function from a list of descendants and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n * Node type.\n * @template {Test} Check\n * Test type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromDescendants<\n * InclusiveDescendant<Tree>,\n * Check\n * >\n * )} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n * Node type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n * `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n * Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n /** @type {boolean | null | undefined} */\n let reverse\n /** @type {Test} */\n let test\n /** @type {Visitor} */\n let visitor\n\n if (\n typeof testOrVisitor === 'function' &&\n typeof visitorOrReverse !== 'function'\n ) {\n test = undefined\n visitor = testOrVisitor\n reverse = visitorOrReverse\n } else {\n // @ts-expect-error: assume the overload with test was given.\n test = testOrVisitor\n // @ts-expect-error: assume the overload with test was given.\n visitor = visitorOrReverse\n reverse = maybeReverse\n }\n\n visitParents(tree, test, overload, reverse)\n\n /**\n * @param {UnistNode} node\n * @param {Array<UnistParent>} parents\n */\n function overload(node, parents) {\n const parent = parents[parents.length - 1]\n const index = parent ? parent.children.indexOf(node) : undefined\n return visitor(node, index, parent)\n }\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Heading} from 'mdast'\n */\n\nimport {EXIT, visit} from 'unist-util-visit'\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Heading} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatHeadingAsSetext(node, state) {\n let literalWithBreak = false\n\n // Look for literals with a line break.\n // Note that this also\n visit(node, function (node) {\n if (\n ('value' in node && /\\r?\\n|\\r/.test(node.value)) ||\n node.type === 'break'\n ) {\n literalWithBreak = true\n return EXIT\n }\n })\n\n return Boolean(\n (!node.depth || node.depth < 3) &&\n toString(node) &&\n (state.options.setext || literalWithBreak)\n )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Heading, Parents} from 'mdast'\n */\n\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {formatHeadingAsSetext} from '../util/format-heading-as-setext.js'\n\n/**\n * @param {Heading} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function heading(node, _, state, info) {\n const rank = Math.max(Math.min(6, node.depth || 1), 1)\n const tracker = state.createTracker(info)\n\n if (formatHeadingAsSetext(node, state)) {\n const exit = state.enter('headingSetext')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...tracker.current(),\n before: '\\n',\n after: '\\n'\n })\n subexit()\n exit()\n\n return (\n value +\n '\\n' +\n (rank === 1 ? '=' : '-').repeat(\n // The whole size…\n value.length -\n // Minus the position of the character after the last EOL (or\n // 0 if there is none)…\n (Math.max(value.lastIndexOf('\\r'), value.lastIndexOf('\\n')) + 1)\n )\n )\n }\n\n const sequence = '#'.repeat(rank)\n const exit = state.enter('headingAtx')\n const subexit = state.enter('phrasing')\n\n // Note: for proper tracking, we should reset the output positions when there\n // is no content returned, because then the space is not output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n tracker.move(sequence + ' ')\n\n let value = state.containerPhrasing(node, {\n before: '# ',\n after: '\\n',\n ...tracker.current()\n })\n\n if (/^[\\t ]/.test(value)) {\n // To do: what effect has the character reference on tracking?\n value = encodeCharacterReference(value.charCodeAt(0)) + value.slice(1)\n }\n\n value = value ? sequence + ' ' + value : sequence\n\n if (state.options.closeAtx) {\n value += ' ' + sequence\n }\n\n subexit()\n exit()\n\n return value\n}\n","/**\n * @import {Html} from 'mdast'\n */\n\nhtml.peek = htmlPeek\n\n/**\n * @param {Html} node\n * @returns {string}\n */\nexport function html(node) {\n return node.value || ''\n}\n\n/**\n * @returns {string}\n */\nfunction htmlPeek() {\n return '<'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Image, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\nimage.peek = imagePeek\n\n/**\n * @param {Image} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function image(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('image')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n value += tracker.move(\n state.safe(node.alt, {before: value, after: ']', ...tracker.current()})\n )\n value += tracker.move('](')\n\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n exit()\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imagePeek() {\n return '!'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {ImageReference, Parents} from 'mdast'\n */\n\nimageReference.peek = imageReferencePeek\n\n/**\n * @param {ImageReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function imageReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('imageReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n const alt = state.safe(node.alt, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(alt + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !alt || alt !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imageReferencePeek() {\n return '!'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {InlineCode, Parents} from 'mdast'\n */\n\ninlineCode.peek = inlineCodePeek\n\n/**\n * @param {InlineCode} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nexport function inlineCode(node, _, state) {\n let value = node.value || ''\n let sequence = '`'\n let index = -1\n\n // If there is a single grave accent on its own in the code, use a fence of\n // two.\n // If there are two in a row, use one.\n while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) {\n sequence += '`'\n }\n\n // If this is not just spaces or eols (tabs don’t count), and either the\n // first or last character are a space, eol, or tick, then pad with spaces.\n if (\n /[^ \\r\\n]/.test(value) &&\n ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) || /^`|`$/.test(value))\n ) {\n value = ' ' + value + ' '\n }\n\n // We have a potential problem: certain characters after eols could result in\n // blocks being seen.\n // For example, if someone injected the string `'\\n# b'`, then that would\n // result in an ATX heading.\n // We can’t escape characters in `inlineCode`, but because eols are\n // transformed to spaces when going from markdown to HTML anyway, we can swap\n // them out.\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index]\n const expression = state.compilePattern(pattern)\n /** @type {RegExpExecArray | null} */\n let match\n\n // Only look for `atBreak`s.\n // Btw: note that `atBreak` patterns will always start the regex at LF or\n // CR.\n if (!pattern.atBreak) continue\n\n while ((match = expression.exec(value))) {\n let position = match.index\n\n // Support CRLF (patterns only look for one of the characters).\n if (\n value.charCodeAt(position) === 10 /* `\\n` */ &&\n value.charCodeAt(position - 1) === 13 /* `\\r` */\n ) {\n position--\n }\n\n value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n }\n }\n\n return sequence + value + sequence\n}\n\n/**\n * @returns {string}\n */\nfunction inlineCodePeek() {\n return '`'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Link} from 'mdast'\n */\n\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Link} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatLinkAsAutolink(node, state) {\n const raw = toString(node)\n\n return Boolean(\n !state.options.resourceLink &&\n // If there’s a url…\n node.url &&\n // And there’s a no title…\n !node.title &&\n // And the content of `node` is a single text node…\n node.children &&\n node.children.length === 1 &&\n node.children[0].type === 'text' &&\n // And if the url is the same as the content…\n (raw === node.url || 'mailto:' + raw === node.url) &&\n // And that starts w/ a protocol…\n /^[a-z][a-z+.-]+:/i.test(node.url) &&\n // And that doesn’t contain ASCII control codes (character escapes and\n // references don’t work), space, or angle brackets…\n !/[\\0- <>\\u007F]/.test(node.url)\n )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Link, Parents} from 'mdast'\n * @import {Exit} from '../types.js'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\nimport {formatLinkAsAutolink} from '../util/format-link-as-autolink.js'\n\nlink.peek = linkPeek\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function link(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const tracker = state.createTracker(info)\n /** @type {Exit} */\n let exit\n /** @type {Exit} */\n let subexit\n\n if (formatLinkAsAutolink(node, state)) {\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n exit = state.enter('autolink')\n let value = tracker.move('<')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '>',\n ...tracker.current()\n })\n )\n value += tracker.move('>')\n exit()\n state.stack = stack\n return value\n }\n\n exit = state.enter('link')\n subexit = state.enter('label')\n let value = tracker.move('[')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '](',\n ...tracker.current()\n })\n )\n value += tracker.move('](')\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n\n exit()\n return value\n}\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nfunction linkPeek(node, _, state) {\n return formatLinkAsAutolink(node, state) ? '<' : '['\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {LinkReference, Parents} from 'mdast'\n */\n\nlinkReference.peek = linkReferencePeek\n\n/**\n * @param {LinkReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function linkReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('linkReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n const text = state.containerPhrasing(node, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(text + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !text || text !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction linkReferencePeek() {\n return '['\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBullet(state) {\n const marker = state.options.bullet || '*'\n\n if (marker !== '*' && marker !== '+' && marker !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bullet`, expected `*`, `+`, or `-`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\nimport {checkBullet} from './check-bullet.js'\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBulletOther(state) {\n const bullet = checkBullet(state)\n const bulletOther = state.options.bulletOther\n\n if (!bulletOther) {\n return bullet === '*' ? '-' : '*'\n }\n\n if (bulletOther !== '*' && bulletOther !== '+' && bulletOther !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n bulletOther +\n '` for `options.bulletOther`, expected `*`, `+`, or `-`'\n )\n }\n\n if (bulletOther === bullet) {\n throw new Error(\n 'Expected `bullet` (`' +\n bullet +\n '`) and `bulletOther` (`' +\n bulletOther +\n '`) to be different'\n )\n }\n\n return bulletOther\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bulletOrdered'], null | undefined>}\n */\nexport function checkBulletOrdered(state) {\n const marker = state.options.bulletOrdered || '.'\n\n if (marker !== '.' && marker !== ')') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bulletOrdered`, expected `.` or `)`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['rule'], null | undefined>}\n */\nexport function checkRule(state) {\n const marker = state.options.rule || '*'\n\n if (marker !== '*' && marker !== '-' && marker !== '_') {\n throw new Error(\n 'Cannot serialize rules with `' +\n marker +\n '` for `options.rule`, expected `*`, `-`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {List, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkBulletOther} from '../util/check-bullet-other.js'\nimport {checkBulletOrdered} from '../util/check-bullet-ordered.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {List} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function list(node, parent, state, info) {\n const exit = state.enter('list')\n const bulletCurrent = state.bulletCurrent\n /** @type {string} */\n let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state)\n /** @type {string} */\n const bulletOther = node.ordered\n ? bullet === '.'\n ? ')'\n : '.'\n : checkBulletOther(state)\n let useDifferentMarker =\n parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false\n\n if (!node.ordered) {\n const firstListItem = node.children ? node.children[0] : undefined\n\n // If there’s an empty first list item directly in two list items,\n // we have to use a different bullet:\n //\n // ```markdown\n // * - *\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (\n // Bullet could be used as a thematic break marker:\n (bullet === '*' || bullet === '-') &&\n // Empty first list item:\n firstListItem &&\n (!firstListItem.children || !firstListItem.children[0]) &&\n // Directly in two other list items:\n state.stack[state.stack.length - 1] === 'list' &&\n state.stack[state.stack.length - 2] === 'listItem' &&\n state.stack[state.stack.length - 3] === 'list' &&\n state.stack[state.stack.length - 4] === 'listItem' &&\n // That are each the first child.\n state.indexStack[state.indexStack.length - 1] === 0 &&\n state.indexStack[state.indexStack.length - 2] === 0 &&\n state.indexStack[state.indexStack.length - 3] === 0\n ) {\n useDifferentMarker = true\n }\n\n // If there’s a thematic break at the start of the first list item,\n // we have to use a different bullet:\n //\n // ```markdown\n // * ---\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (checkRule(state) === bullet && firstListItem) {\n let index = -1\n\n while (++index < node.children.length) {\n const item = node.children[index]\n\n if (\n item &&\n item.type === 'listItem' &&\n item.children &&\n item.children[0] &&\n item.children[0].type === 'thematicBreak'\n ) {\n useDifferentMarker = true\n break\n }\n }\n }\n }\n\n if (useDifferentMarker) {\n bullet = bulletOther\n }\n\n state.bulletCurrent = bullet\n const value = state.containerFlow(node, info)\n state.bulletLastUsed = bullet\n state.bulletCurrent = bulletCurrent\n exit()\n return value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['listItemIndent'], null | undefined>}\n */\nexport function checkListItemIndent(state) {\n const style = state.options.listItemIndent || 'one'\n\n if (style !== 'tab' && style !== 'one' && style !== 'mixed') {\n throw new Error(\n 'Cannot serialize items with `' +\n style +\n '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`'\n )\n }\n\n return style\n}\n","/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {ListItem, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkListItemIndent} from '../util/check-list-item-indent.js'\n\n/**\n * @param {ListItem} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function listItem(node, parent, state, info) {\n const listItemIndent = checkListItemIndent(state)\n let bullet = state.bulletCurrent || checkBullet(state)\n\n // Add the marker value for ordered lists.\n if (parent && parent.type === 'list' && parent.ordered) {\n bullet =\n (typeof parent.start === 'number' && parent.start > -1\n ? parent.start\n : 1) +\n (state.options.incrementListMarker === false\n ? 0\n : parent.children.indexOf(node)) +\n bullet\n }\n\n let size = bullet.length + 1\n\n if (\n listItemIndent === 'tab' ||\n (listItemIndent === 'mixed' &&\n ((parent && parent.type === 'list' && parent.spread) || node.spread))\n ) {\n size = Math.ceil(size / 4) * 4\n }\n\n const tracker = state.createTracker(info)\n tracker.move(bullet + ' '.repeat(size - bullet.length))\n tracker.shift(size)\n const exit = state.enter('listItem')\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n\n return value\n\n /** @type {Map} */\n function map(line, index, blank) {\n if (index) {\n return (blank ? '' : ' '.repeat(size)) + line\n }\n\n return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line\n }\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Paragraph, Parents} from 'mdast'\n */\n\n/**\n * @param {Paragraph} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function paragraph(node, _, state, info) {\n const exit = state.enter('paragraph')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, info)\n subexit()\n exit()\n return value\n}\n","/**\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n */\n\nimport {convert} from 'unist-util-is'\n\n/**\n * Check if the given value is *phrasing content*.\n *\n * > 👉 **Note**: Excludes `html`, which can be both phrasing or flow.\n *\n * @param node\n * Thing to check, typically `Node`.\n * @returns\n * Whether `value` is phrasing content.\n */\n\nexport const phrasing =\n /** @type {(node?: unknown) => node is Exclude<PhrasingContent, Html>} */\n (\n convert([\n 'break',\n 'delete',\n 'emphasis',\n // To do: next major: removed since footnotes were added to GFM.\n 'footnote',\n 'footnoteReference',\n 'image',\n 'imageReference',\n 'inlineCode',\n // Enabled by `mdast-util-math`:\n 'inlineMath',\n 'link',\n 'linkReference',\n // Enabled by `mdast-util-mdx`:\n 'mdxJsxTextElement',\n // Enabled by `mdast-util-mdx`:\n 'mdxTextExpression',\n 'strong',\n 'text',\n // Enabled by `mdast-util-directive`:\n 'textDirective'\n ])\n )\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Root} from 'mdast'\n */\n\nimport {phrasing} from 'mdast-util-phrasing'\n\n/**\n * @param {Root} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function root(node, _, state, info) {\n // Note: `html` nodes are ambiguous.\n const hasPhrasing = node.children.some(function (d) {\n return phrasing(d)\n })\n\n const container = hasPhrasing ? state.containerPhrasing : state.containerFlow\n return container.call(state, node, info)\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['strong'], null | undefined>}\n */\nexport function checkStrong(state) {\n const marker = state.options.strong || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize strong with `' +\n marker +\n '` for `options.strong`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Strong} from 'mdast'\n */\n\nimport {checkStrong} from '../util/check-strong.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nstrong.peek = strongPeek\n\n/**\n * @param {Strong} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function strong(node, _, state, info) {\n const marker = checkStrong(state)\n const exit = state.enter('strong')\n const tracker = state.createTracker(info)\n const before = tracker.move(marker + marker)\n\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n )\n const betweenHead = between.charCodeAt(0)\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n )\n\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1)\n }\n\n const betweenTail = between.charCodeAt(between.length - 1)\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n }\n\n const after = tracker.move(marker + marker)\n\n exit()\n\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n }\n return before + between + after\n}\n\n/**\n * @param {Strong} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction strongPeek(_, _1, state) {\n return state.options.strong || '*'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Text} from 'mdast'\n */\n\n/**\n * @param {Text} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function text(node, _, state, info) {\n return state.safe(node.value, info)\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['ruleRepetition'], null | undefined>}\n */\nexport function checkRuleRepetition(state) {\n const repetition = state.options.ruleRepetition || 3\n\n if (repetition < 3) {\n throw new Error(\n 'Cannot serialize rules with repetition `' +\n repetition +\n '` for `options.ruleRepetition`, expected `3` or more'\n )\n }\n\n return repetition\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Parents, ThematicBreak} from 'mdast'\n */\n\nimport {checkRuleRepetition} from '../util/check-rule-repetition.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {ThematicBreak} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nexport function thematicBreak(_, _1, state) {\n const value = (\n checkRule(state) + (state.options.ruleSpaces ? ' ' : '')\n ).repeat(checkRuleRepetition(state))\n\n return state.options.ruleSpaces ? value.slice(0, -1) : value\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {definition} from './definition.js'\nimport {emphasis} from './emphasis.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {image} from './image.js'\nimport {imageReference} from './image-reference.js'\nimport {inlineCode} from './inline-code.js'\nimport {link} from './link.js'\nimport {linkReference} from './link-reference.js'\nimport {list} from './list.js'\nimport {listItem} from './list-item.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default (CommonMark) handlers.\n */\nexport const handle = {\n blockquote,\n break: hardBreak,\n code,\n definition,\n emphasis,\n hardBreak,\n heading,\n html,\n image,\n imageReference,\n inlineCode,\n link,\n linkReference,\n list,\n listItem,\n paragraph,\n root,\n strong,\n text,\n thematicBreak\n}\n","/**\n * @import {Join} from 'mdast-util-to-markdown'\n */\n\nimport {formatCodeAsIndented} from './util/format-code-as-indented.js'\nimport {formatHeadingAsSetext} from './util/format-heading-as-setext.js'\n\n/** @type {Array<Join>} */\nexport const join = [joinDefaults]\n\n/** @type {Join} */\nfunction joinDefaults(left, right, parent, state) {\n // Indented code after list or another indented code.\n if (\n right.type === 'code' &&\n formatCodeAsIndented(right, state) &&\n (left.type === 'list' ||\n (left.type === right.type && formatCodeAsIndented(left, state)))\n ) {\n return false\n }\n\n // Join children of a list or an item.\n // In which case, `parent` has a `spread` field.\n if ('spread' in parent && typeof parent.spread === 'boolean') {\n if (\n left.type === 'paragraph' &&\n // Two paragraphs.\n (left.type === right.type ||\n right.type === 'definition' ||\n // Paragraph followed by a setext heading.\n (right.type === 'heading' && formatHeadingAsSetext(right, state)))\n ) {\n return\n }\n\n return parent.spread ? 1 : 0\n }\n}\n","/**\n * @import {ConstructName, Unsafe} from 'mdast-util-to-markdown'\n */\n\n/**\n * List of constructs that occur in phrasing (paragraphs, headings), but cannot\n * contain things like attention (emphasis, strong), images, or links.\n * So they sort of cancel each other out.\n * Note: could use a better name.\n *\n * @type {Array<ConstructName>}\n */\nconst fullPhrasingSpans = [\n 'autolink',\n 'destinationLiteral',\n 'destinationRaw',\n 'reference',\n 'titleQuote',\n 'titleApostrophe'\n]\n\n/** @type {Array<Unsafe>} */\nexport const unsafe = [\n {character: '\\t', after: '[\\\\r\\\\n]', inConstruct: 'phrasing'},\n {character: '\\t', before: '[\\\\r\\\\n]', inConstruct: 'phrasing'},\n {\n character: '\\t',\n inConstruct: ['codeFencedLangGraveAccent', 'codeFencedLangTilde']\n },\n {\n character: '\\r',\n inConstruct: [\n 'codeFencedLangGraveAccent',\n 'codeFencedLangTilde',\n 'codeFencedMetaGraveAccent',\n 'codeFencedMetaTilde',\n 'destinationLiteral',\n 'headingAtx'\n ]\n },\n {\n character: '\\n',\n inConstruct: [\n 'codeFencedLangGraveAccent',\n 'codeFencedLangTilde',\n 'codeFencedMetaGraveAccent',\n 'codeFencedMetaTilde',\n 'destinationLiteral',\n 'headingAtx'\n ]\n },\n {character: ' ', after: '[\\\\r\\\\n]', inConstruct: 'phrasing'},\n {character: ' ', before: '[\\\\r\\\\n]', inConstruct: 'phrasing'},\n {\n character: ' ',\n inConstruct: ['codeFencedLangGraveAccent', 'codeFencedLangTilde']\n },\n // An exclamation mark can start an image, if it is followed by a link or\n // a link reference.\n {\n character: '!',\n after: '\\\\[',\n inConstruct: 'phrasing',\n notInConstruct: fullPhrasingSpans\n },\n // A quote can break out of a title.\n {character: '\"', inConstruct: 'titleQuote'},\n // A number sign could start an ATX heading if it starts a line.\n {atBreak: true, character: '#'},\n {character: '#', inConstruct: 'headingAtx', after: '(?:[\\r\\n]|$)'},\n // Dollar sign and percentage are not used in markdown.\n // An ampersand could start a character reference.\n {character: '&', after: '[#A-Za-z]', inConstruct: 'phrasing'},\n // An apostrophe can break out of a title.\n {character: \"'\", inConstruct: 'titleApostrophe'},\n // A left paren could break out of a destination raw.\n {character: '(', inConstruct: 'destinationRaw'},\n // A left paren followed by `]` could make something into a link or image.\n {\n before: '\\\\]',\n character: '(',\n inConstruct: 'phrasing',\n notInConstruct: fullPhrasingSpans\n },\n // A right paren could start a list item or break out of a destination\n // raw.\n {atBreak: true, before: '\\\\d+', character: ')'},\n {character: ')', inConstruct: 'destinationRaw'},\n // An asterisk can start thematic breaks, list items, emphasis, strong.\n {atBreak: true, character: '*', after: '(?:[ \\t\\r\\n*])'},\n {character: '*', inConstruct: 'phrasing', notInConstruct: fullPhrasingSpans},\n // A plus sign could start a list item.\n {atBreak: true, character: '+', after: '(?:[ \\t\\r\\n])'},\n // A dash can start thematic breaks, list items, and setext heading\n // underlines.\n {atBreak: true, character: '-', after: '(?:[ \\t\\r\\n-])'},\n // A dot could start a list item.\n {atBreak: true, before: '\\\\d+', character: '.', after: '(?:[ \\t\\r\\n]|$)'},\n // Slash, colon, and semicolon are not used in markdown for constructs.\n // A less than can start html (flow or text) or an autolink.\n // HTML could start with an exclamation mark (declaration, cdata, comment),\n // slash (closing tag), question mark (instruction), or a letter (tag).\n // An autolink also starts with a letter.\n // Finally, it could break out of a destination literal.\n {atBreak: true, character: '<', after: '[!/?A-Za-z]'},\n {\n character: '<',\n after: '[!/?A-Za-z]',\n inConstruct: 'phrasing',\n notInConstruct: fullPhrasingSpans\n },\n {character: '<', inConstruct: 'destinationLiteral'},\n // An equals to can start setext heading underlines.\n {atBreak: true, character: '='},\n // A greater than can start block quotes and it can break out of a\n // destination literal.\n {atBreak: true, character: '>'},\n {character: '>', inConstruct: 'destinationLiteral'},\n // Question mark and at sign are not used in markdown for constructs.\n // A left bracket can start definitions, references, labels,\n {atBreak: true, character: '['},\n {character: '[', inConstruct: 'phrasing', notInConstruct: fullPhrasingSpans},\n {character: '[', inConstruct: ['label', 'reference']},\n // A backslash can start an escape (when followed by punctuation) or a\n // hard break (when followed by an eol).\n // Note: typical escapes are handled in `safe`!\n {character: '\\\\', after: '[\\\\r\\\\n]', inConstruct: 'phrasing'},\n // A right bracket can exit labels.\n {character: ']', inConstruct: ['label', 'reference']},\n // Caret is not used in markdown for constructs.\n // An underscore can start emphasis, strong, or a thematic break.\n {atBreak: true, character: '_'},\n {character: '_', inConstruct: 'phrasing', notInConstruct: fullPhrasingSpans},\n // A grave accent can start code (fenced or text), or it can break out of\n // a grave accent code fence.\n {atBreak: true, character: '`'},\n {\n character: '`',\n inConstruct: ['codeFencedLangGraveAccent', 'codeFencedMetaGraveAccent']\n },\n {character: '`', inConstruct: 'phrasing', notInConstruct: fullPhrasingSpans},\n // Left brace, vertical bar, right brace are not used in markdown for\n // constructs.\n // A tilde can start code (fenced).\n {atBreak: true, character: '~'}\n]\n","/**\n * @import {AssociationId} from '../types.js'\n */\n\nimport {decodeString} from 'micromark-util-decode-string'\n\n/**\n * Get an identifier from an association to match it to others.\n *\n * Associations are nodes that match to something else through an ID:\n * <https://github.com/syntax-tree/mdast#association>.\n *\n * The `label` of an association is the string value: character escapes and\n * references work, and casing is intact.\n * The `identifier` is used to match one association to another:\n * controversially, character escapes and references don’t work in this\n * matching: `©` does not match `©`, and `\\+` does not match `+`.\n *\n * But casing is ignored (and whitespace) is trimmed and collapsed: ` A\\nb`\n * matches `a b`.\n * So, we do prefer the label when figuring out how we’re going to serialize:\n * it has whitespace, casing, and we can ignore most useless character\n * escapes and all character references.\n *\n * @type {AssociationId}\n */\nexport function association(node) {\n if (node.label || !node.identifier) {\n return node.label || ''\n }\n\n return decodeString(node.identifier)\n}\n","/**\n * @import {CompilePattern} from '../types.js'\n */\n\n/**\n * @type {CompilePattern}\n */\nexport function compilePattern(pattern) {\n if (!pattern._compiled) {\n const before =\n (pattern.atBreak ? '[\\\\r\\\\n][\\\\t ]*' : '') +\n (pattern.before ? '(?:' + pattern.before + ')' : '')\n\n pattern._compiled = new RegExp(\n (before ? '(' + before + ')' : '') +\n (/[|\\\\{}()[\\]^$+*?.-]/.test(pattern.character) ? '\\\\' : '') +\n pattern.character +\n (pattern.after ? '(?:' + pattern.after + ')' : ''),\n 'g'\n )\n }\n\n return pattern._compiled\n}\n","/**\n * @import {Handle, Info, State} from 'mdast-util-to-markdown'\n * @import {PhrasingParents} from '../types.js'\n */\n\nimport {encodeCharacterReference} from './encode-character-reference.js'\n\n/**\n * Serialize the children of a parent that contains phrasing children.\n *\n * These children will be joined flush together.\n *\n * @param {PhrasingParents} parent\n * Parent of flow nodes.\n * @param {State} state\n * Info passed around about the current state.\n * @param {Info} info\n * Info on where we are in the document we are generating.\n * @returns {string}\n * Serialized children, joined together.\n */\nexport function containerPhrasing(parent, state, info) {\n const indexStack = state.indexStack\n const children = parent.children || []\n /** @type {Array<string>} */\n const results = []\n let index = -1\n let before = info.before\n /** @type {string | undefined} */\n let encodeAfter\n\n indexStack.push(-1)\n let tracker = state.createTracker(info)\n\n while (++index < children.length) {\n const child = children[index]\n /** @type {string} */\n let after\n\n indexStack[indexStack.length - 1] = index\n\n if (index + 1 < children.length) {\n /** @type {Handle} */\n // @ts-expect-error: hush, it’s actually a `zwitch`.\n let handle = state.handle.handlers[children[index + 1].type]\n /** @type {Handle} */\n // @ts-expect-error: hush, it’s actually a `zwitch`.\n if (handle && handle.peek) handle = handle.peek\n after = handle\n ? handle(children[index + 1], parent, state, {\n before: '',\n after: '',\n ...tracker.current()\n }).charAt(0)\n : ''\n } else {\n after = info.after\n }\n\n // In some cases, html (text) can be found in phrasing right after an eol.\n // When we’d serialize that, in most cases that would be seen as html\n // (flow).\n // As we can’t escape or so to prevent it from happening, we take a somewhat\n // reasonable approach: replace that eol with a space.\n // See: <https://github.com/syntax-tree/mdast-util-to-markdown/issues/15>\n if (\n results.length > 0 &&\n (before === '\\r' || before === '\\n') &&\n child.type === 'html'\n ) {\n results[results.length - 1] = results[results.length - 1].replace(\n /(\\r?\\n|\\r)$/,\n ' '\n )\n before = ' '\n\n // To do: does this work to reset tracker?\n tracker = state.createTracker(info)\n tracker.move(results.join(''))\n }\n\n let value = state.handle(child, parent, state, {\n ...tracker.current(),\n after,\n before\n })\n\n // If we had to encode the first character after the previous node and it’s\n // still the same character,\n // encode it.\n if (encodeAfter && encodeAfter === value.slice(0, 1)) {\n value =\n encodeCharacterReference(encodeAfter.charCodeAt(0)) + value.slice(1)\n }\n\n const encodingInfo = state.attentionEncodeSurroundingInfo\n state.attentionEncodeSurroundingInfo = undefined\n encodeAfter = undefined\n\n // If we have to encode the first character before the current node and\n // it’s still the same character,\n // encode it.\n if (encodingInfo) {\n if (\n results.length > 0 &&\n encodingInfo.before &&\n before === results[results.length - 1].slice(-1)\n ) {\n results[results.length - 1] =\n results[results.length - 1].slice(0, -1) +\n encodeCharacterReference(before.charCodeAt(0))\n }\n\n if (encodingInfo.after) encodeAfter = after\n }\n\n tracker.move(value)\n results.push(value)\n before = value.slice(-1)\n }\n\n indexStack.pop()\n\n return results.join('')\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {FlowChildren, FlowParents, TrackFields} from '../types.js'\n */\n\n/**\n * @param {FlowParents} parent\n * Parent of flow nodes.\n * @param {State} state\n * Info passed around about the current state.\n * @param {TrackFields} info\n * Info on where we are in the document we are generating.\n * @returns {string}\n * Serialized children, joined by (blank) lines.\n */\nexport function containerFlow(parent, state, info) {\n const indexStack = state.indexStack\n const children = parent.children || []\n const tracker = state.createTracker(info)\n /** @type {Array<string>} */\n const results = []\n let index = -1\n\n indexStack.push(-1)\n\n while (++index < children.length) {\n const child = children[index]\n\n indexStack[indexStack.length - 1] = index\n\n results.push(\n tracker.move(\n state.handle(child, parent, state, {\n before: '\\n',\n after: '\\n',\n ...tracker.current()\n })\n )\n )\n\n if (child.type !== 'list') {\n state.bulletLastUsed = undefined\n }\n\n if (index < children.length - 1) {\n results.push(\n tracker.move(between(child, children[index + 1], parent, state))\n )\n }\n }\n\n indexStack.pop()\n\n return results.join('')\n}\n\n/**\n * @param {FlowChildren} left\n * @param {FlowChildren} right\n * @param {FlowParents} parent\n * @param {State} state\n * @returns {string}\n */\nfunction between(left, right, parent, state) {\n let index = state.join.length\n\n while (index--) {\n const result = state.join[index](left, right, parent, state)\n\n if (result === true || result === 1) {\n break\n }\n\n if (typeof result === 'number') {\n return '\\n'.repeat(1 + result)\n }\n\n if (result === false) {\n return '\\n\\n<!---->\\n\\n'\n }\n }\n\n return '\\n\\n'\n}\n","/**\n * @import {IndentLines} from '../types.js'\n */\n\nconst eol = /\\r?\\n|\\r/g\n\n/**\n * @type {IndentLines}\n */\nexport function indentLines(value, map) {\n /** @type {Array<string>} */\n const result = []\n let start = 0\n let line = 0\n /** @type {RegExpExecArray | null} */\n let match\n\n while ((match = eol.exec(value))) {\n one(value.slice(start, match.index))\n result.push(match[0])\n start = match.index + match[0].length\n line++\n }\n\n one(value.slice(start))\n\n return result.join('')\n\n /**\n * @param {string} value\n */\n function one(value) {\n result.push(map(value, line, !value))\n }\n}\n","/**\n * @import {SafeConfig, State} from 'mdast-util-to-markdown'\n */\n\nimport {encodeCharacterReference} from './encode-character-reference.js'\nimport {patternInScope} from './pattern-in-scope.js'\n\n/**\n * Make a string safe for embedding in markdown constructs.\n *\n * In markdown, almost all punctuation characters can, in certain cases,\n * result in something.\n * Whether they do is highly subjective to where they happen and in what\n * they happen.\n *\n * To solve this, `mdast-util-to-markdown` tracks:\n *\n * * Characters before and after something;\n * * What “constructs” we are in.\n *\n * This information is then used by this function to escape or encode\n * special characters.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {string | null | undefined} input\n * Raw value to make safe.\n * @param {SafeConfig} config\n * Configuration.\n * @returns {string}\n * Serialized markdown safe for embedding.\n */\nexport function safe(state, input, config) {\n const value = (config.before || '') + (input || '') + (config.after || '')\n /** @type {Array<number>} */\n const positions = []\n /** @type {Array<string>} */\n const result = []\n /** @type {Record<number, {before: boolean, after: boolean}>} */\n const infos = {}\n let index = -1\n\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index]\n\n if (!patternInScope(state.stack, pattern)) {\n continue\n }\n\n const expression = state.compilePattern(pattern)\n /** @type {RegExpExecArray | null} */\n let match\n\n while ((match = expression.exec(value))) {\n const before = 'before' in pattern || Boolean(pattern.atBreak)\n const after = 'after' in pattern\n const position = match.index + (before ? match[1].length : 0)\n\n if (positions.includes(position)) {\n if (infos[position].before && !before) {\n infos[position].before = false\n }\n\n if (infos[position].after && !after) {\n infos[position].after = false\n }\n } else {\n positions.push(position)\n infos[position] = {before, after}\n }\n }\n }\n\n positions.sort(numerical)\n\n let start = config.before ? config.before.length : 0\n const end = value.length - (config.after ? config.after.length : 0)\n index = -1\n\n while (++index < positions.length) {\n const position = positions[index]\n\n // Character before or after matched:\n if (position < start || position >= end) {\n continue\n }\n\n // If this character is supposed to be escaped because it has a condition on\n // the next character, and the next character is definitly being escaped,\n // then skip this escape.\n if (\n (position + 1 < end &&\n positions[index + 1] === position + 1 &&\n infos[position].after &&\n !infos[position + 1].before &&\n !infos[position + 1].after) ||\n (positions[index - 1] === position - 1 &&\n infos[position].before &&\n !infos[position - 1].before &&\n !infos[position - 1].after)\n ) {\n continue\n }\n\n if (start !== position) {\n // If we have to use a character reference, an ampersand would be more\n // correct, but as backslashes only care about punctuation, either will\n // do the trick\n result.push(escapeBackslashes(value.slice(start, position), '\\\\'))\n }\n\n start = position\n\n if (\n /[!-/:-@[-`{-~]/.test(value.charAt(position)) &&\n (!config.encode || !config.encode.includes(value.charAt(position)))\n ) {\n // Character escape.\n result.push('\\\\')\n } else {\n // Character reference.\n result.push(encodeCharacterReference(value.charCodeAt(position)))\n start++\n }\n }\n\n result.push(escapeBackslashes(value.slice(start, end), config.after))\n\n return result.join('')\n}\n\n/**\n * @param {number} a\n * @param {number} b\n * @returns {number}\n */\nfunction numerical(a, b) {\n return a - b\n}\n\n/**\n * @param {string} value\n * @param {string} after\n * @returns {string}\n */\nfunction escapeBackslashes(value, after) {\n const expression = /\\\\(?=[!-/:-@[-`{-~])/g\n /** @type {Array<number>} */\n const positions = []\n /** @type {Array<string>} */\n const results = []\n const whole = value + after\n let index = -1\n let start = 0\n /** @type {RegExpExecArray | null} */\n let match\n\n while ((match = expression.exec(whole))) {\n positions.push(match.index)\n }\n\n while (++index < positions.length) {\n if (start !== positions[index]) {\n results.push(value.slice(start, positions[index]))\n }\n\n results.push('\\\\')\n start = positions[index]\n }\n\n results.push(value.slice(start))\n\n return results.join('')\n}\n","/**\n * @import {CreateTracker, TrackCurrent, TrackMove, TrackShift} from '../types.js'\n */\n\n/**\n * Track positional info in the output.\n *\n * @type {CreateTracker}\n */\nexport function track(config) {\n // Defaults are used to prevent crashes when older utilities somehow activate\n // this code.\n /* c8 ignore next 5 */\n const options = config || {}\n const now = options.now || {}\n let lineShift = options.lineShift || 0\n let line = now.line || 1\n let column = now.column || 1\n\n return {move, current, shift}\n\n /**\n * Get the current tracked info.\n *\n * @type {TrackCurrent}\n */\n function current() {\n return {now: {line, column}, lineShift}\n }\n\n /**\n * Define an increased line shift (the typical indent for lines).\n *\n * @type {TrackShift}\n */\n function shift(value) {\n lineShift += value\n }\n\n /**\n * Move past some generated markdown.\n *\n * @type {TrackMove}\n */\n function move(input) {\n // eslint-disable-next-line unicorn/prefer-default-parameters\n const value = input || ''\n const chunks = value.split(/\\r?\\n|\\r/g)\n const tail = chunks[chunks.length - 1]\n line += chunks.length - 1\n column =\n chunks.length === 1 ? column + tail.length : 1 + tail.length + lineShift\n return value\n }\n}\n","/**\n * @import {Info, Join, Options, SafeConfig, State} from 'mdast-util-to-markdown'\n * @import {Nodes} from 'mdast'\n * @import {Enter, FlowParents, PhrasingParents, TrackFields} from './types.js'\n */\n\nimport {zwitch} from 'zwitch'\nimport {configure} from './configure.js'\nimport {handle as handlers} from './handle/index.js'\nimport {join} from './join.js'\nimport {unsafe} from './unsafe.js'\nimport {association} from './util/association.js'\nimport {compilePattern} from './util/compile-pattern.js'\nimport {containerPhrasing} from './util/container-phrasing.js'\nimport {containerFlow} from './util/container-flow.js'\nimport {indentLines} from './util/indent-lines.js'\nimport {safe} from './util/safe.js'\nimport {track} from './util/track.js'\n\n/**\n * Turn an mdast syntax tree into markdown.\n *\n * @param {Nodes} tree\n * Tree to serialize.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized markdown representing `tree`.\n */\nexport function toMarkdown(tree, options) {\n const settings = options || {}\n /** @type {State} */\n const state = {\n associationId: association,\n containerPhrasing: containerPhrasingBound,\n containerFlow: containerFlowBound,\n createTracker: track,\n compilePattern,\n enter,\n // @ts-expect-error: GFM / frontmatter are typed in `mdast` but not defined\n // here.\n handlers: {...handlers},\n // @ts-expect-error: add `handle` in a second.\n handle: undefined,\n indentLines,\n indexStack: [],\n join: [...join],\n options: {},\n safe: safeBound,\n stack: [],\n unsafe: [...unsafe]\n }\n\n configure(state, settings)\n\n if (state.options.tightDefinitions) {\n state.join.push(joinDefinition)\n }\n\n state.handle = zwitch('type', {\n invalid,\n unknown,\n handlers: state.handlers\n })\n\n let result = state.handle(tree, undefined, state, {\n before: '\\n',\n after: '\\n',\n now: {line: 1, column: 1},\n lineShift: 0\n })\n\n if (\n result &&\n result.charCodeAt(result.length - 1) !== 10 &&\n result.charCodeAt(result.length - 1) !== 13\n ) {\n result += '\\n'\n }\n\n return result\n\n /** @type {Enter} */\n function enter(name) {\n state.stack.push(name)\n return exit\n\n /**\n * @returns {undefined}\n */\n function exit() {\n state.stack.pop()\n }\n }\n}\n\n/**\n * @param {unknown} value\n * @returns {never}\n */\nfunction invalid(value) {\n throw new Error('Cannot handle value `' + value + '`, expected node')\n}\n\n/**\n * @param {unknown} value\n * @returns {never}\n */\nfunction unknown(value) {\n // Always a node.\n const node = /** @type {Nodes} */ (value)\n throw new Error('Cannot handle unknown node `' + node.type + '`')\n}\n\n/** @type {Join} */\nfunction joinDefinition(left, right) {\n // No blank line between adjacent definitions.\n if (left.type === 'definition' && left.type === right.type) {\n return 0\n }\n}\n\n/**\n * Serialize the children of a parent that contains phrasing children.\n *\n * These children will be joined flush together.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {PhrasingParents} parent\n * Parent of flow nodes.\n * @param {Info} info\n * Info on where we are in the document we are generating.\n * @returns {string}\n * Serialized children, joined together.\n */\nfunction containerPhrasingBound(parent, info) {\n return containerPhrasing(parent, this, info)\n}\n\n/**\n * Serialize the children of a parent that contains flow children.\n *\n * These children will typically be joined by blank lines.\n * What they are joined by exactly is defined by `Join` functions.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {FlowParents} parent\n * Parent of flow nodes.\n * @param {TrackFields} info\n * Info on where we are in the document we are generating.\n * @returns {string}\n * Serialized children, joined by (blank) lines.\n */\nfunction containerFlowBound(parent, info) {\n return containerFlow(parent, this, info)\n}\n\n/**\n * Make a string safe for embedding in markdown constructs.\n *\n * In markdown, almost all punctuation characters can, in certain cases,\n * result in something.\n * Whether they do is highly subjective to where they happen and in what\n * they happen.\n *\n * To solve this, `mdast-util-to-markdown` tracks:\n *\n * * Characters before and after something;\n * * What “constructs” we are in.\n *\n * This information is then used by this function to escape or encode\n * special characters.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {string | null | undefined} value\n * Raw value to make safe.\n * @param {SafeConfig} config\n * Configuration.\n * @returns {string}\n * Serialized markdown safe for embedding.\n */\nfunction safeBound(value, config) {\n return safe(this, value, config)\n}\n","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownOptions\n * @typedef {import('unified').Compiler<Root, string>} Compiler\n * @typedef {import('unified').Processor<undefined, undefined, undefined, Root, string>} Processor\n */\n\n/**\n * @typedef {Omit<ToMarkdownOptions, 'extensions'>} Options\n */\n\nimport {toMarkdown} from 'mdast-util-to-markdown'\n\n/**\n * Add support for serializing to markdown.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkStringify(options) {\n /** @type {Processor} */\n // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n const self = this\n\n self.compiler = compiler\n\n /**\n * @type {Compiler}\n */\n function compiler(tree) {\n return toMarkdown(tree, {\n ...self.data('settings'),\n ...options,\n // Note: this option is not in the readme.\n // The goal is for it to be set by plugins on `data` instead of being\n // passed by users.\n extensions: self.data('toMarkdownExtensions') || []\n })\n }\n}\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n * Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n if (error) {\n throw error\n }\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array<any>) => void} Callback\n * Callback.\n *\n * @typedef {(...input: Array<any>) => any} Middleware\n * Ware.\n *\n * @typedef Pipeline\n * Pipeline.\n * @property {Run} run\n * Run the pipeline.\n * @property {Use} use\n * Add middleware.\n *\n * @typedef {(...input: Array<any>) => void} Run\n * Call all middleware.\n *\n * Calls `done` on completion with either an error or the output of the\n * last middleware.\n *\n * > 👉 **Note**: as the length of input defines whether async functions get a\n * > `next` function,\n * > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n * Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n * Pipeline.\n */\nexport function trough() {\n /** @type {Array<Middleware>} */\n const fns = []\n /** @type {Pipeline} */\n const pipeline = {run, use}\n\n return pipeline\n\n /** @type {Run} */\n function run(...values) {\n let middlewareIndex = -1\n /** @type {Callback} */\n const callback = values.pop()\n\n if (typeof callback !== 'function') {\n throw new TypeError('Expected function as last argument, not ' + callback)\n }\n\n next(null, ...values)\n\n /**\n * Run the next `fn`, or we’re done.\n *\n * @param {Error | null | undefined} error\n * @param {Array<any>} output\n */\n function next(error, ...output) {\n const fn = fns[++middlewareIndex]\n let index = -1\n\n if (error) {\n callback(error)\n return\n }\n\n // Copy non-nullish input into values.\n while (++index < values.length) {\n if (output[index] === null || output[index] === undefined) {\n output[index] = values[index]\n }\n }\n\n // Save the newly created `output` for the next call.\n values = output\n\n // Next or done.\n if (fn) {\n wrap(fn, next)(...output)\n } else {\n callback(null, ...output)\n }\n }\n }\n\n /** @type {Use} */\n function use(middelware) {\n if (typeof middelware !== 'function') {\n throw new TypeError(\n 'Expected `middelware` to be a function, not ' + middelware\n )\n }\n\n fns.push(middelware)\n return pipeline\n }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n * returns a promise that is rejected,\n * or calls the given `done` function with an error,\n * `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n * that value is the main output value\n * * if `middleware` calls `done`,\n * all non-nullish values except for the first one (the error) overwrite the\n * output values\n *\n * @param {Middleware} middleware\n * Function to wrap.\n * @param {Callback} callback\n * Callback called with the output of `middleware`.\n * @returns {Run}\n * Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n /** @type {boolean} */\n let called\n\n return wrapped\n\n /**\n * Call `middleware`.\n * @this {any}\n * @param {Array<any>} parameters\n * @returns {void}\n */\n function wrapped(...parameters) {\n const fnExpectsCallback = middleware.length > parameters.length\n /** @type {any} */\n let result\n\n if (fnExpectsCallback) {\n parameters.push(done)\n }\n\n try {\n result = middleware.apply(this, parameters)\n } catch (error) {\n const exception = /** @type {Error} */ (error)\n\n // Well, this is quite the pickle.\n // `middleware` received a callback and called it synchronously, but that\n // threw an error.\n // The only thing left to do is to throw the thing instead.\n if (fnExpectsCallback && called) {\n throw exception\n }\n\n return done(exception)\n }\n\n if (!fnExpectsCallback) {\n if (result && result.then && typeof result.then === 'function') {\n result.then(then, done)\n } else if (result instanceof Error) {\n done(result)\n } else {\n then(result)\n }\n }\n }\n\n /**\n * Call `callback`, only once.\n *\n * @type {Callback}\n */\n function done(error, ...output) {\n if (!called) {\n called = true\n callback(error, ...output)\n }\n }\n\n /**\n * Call `done` with one value.\n *\n * @param {any} [value]\n */\n function then(value) {\n done(null, value)\n }\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef Options\n * Configuration.\n * @property {Array<Node> | null | undefined} [ancestors]\n * Stack of (inclusive) ancestor nodes surrounding the message (optional).\n * @property {Error | null | undefined} [cause]\n * Original error cause of the message (optional).\n * @property {Point | Position | null | undefined} [place]\n * Place of message (optional).\n * @property {string | null | undefined} [ruleId]\n * Category of message (optional, example: `'my-rule'`).\n * @property {string | null | undefined} [source]\n * Namespace of who sent the message (optional, example: `'my-package'`).\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n /**\n * Create a message for `reason`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {Options | null | undefined} [options]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns\n * Instance of `VFileMessage`.\n */\n // eslint-disable-next-line complexity\n constructor(causeOrReason, optionsOrParentOrPlace, origin) {\n super()\n\n if (typeof optionsOrParentOrPlace === 'string') {\n origin = optionsOrParentOrPlace\n optionsOrParentOrPlace = undefined\n }\n\n /** @type {string} */\n let reason = ''\n /** @type {Options} */\n let options = {}\n let legacyCause = false\n\n if (optionsOrParentOrPlace) {\n // Point.\n if (\n 'line' in optionsOrParentOrPlace &&\n 'column' in optionsOrParentOrPlace\n ) {\n options = {place: optionsOrParentOrPlace}\n }\n // Position.\n else if (\n 'start' in optionsOrParentOrPlace &&\n 'end' in optionsOrParentOrPlace\n ) {\n options = {place: optionsOrParentOrPlace}\n }\n // Node.\n else if ('type' in optionsOrParentOrPlace) {\n options = {\n ancestors: [optionsOrParentOrPlace],\n place: optionsOrParentOrPlace.position\n }\n }\n // Options.\n else {\n options = {...optionsOrParentOrPlace}\n }\n }\n\n if (typeof causeOrReason === 'string') {\n reason = causeOrReason\n }\n // Error.\n else if (!options.cause && causeOrReason) {\n legacyCause = true\n reason = causeOrReason.message\n options.cause = causeOrReason\n }\n\n if (!options.ruleId && !options.source && typeof origin === 'string') {\n const index = origin.indexOf(':')\n\n if (index === -1) {\n options.ruleId = origin\n } else {\n options.source = origin.slice(0, index)\n options.ruleId = origin.slice(index + 1)\n }\n }\n\n if (!options.place && options.ancestors && options.ancestors) {\n const parent = options.ancestors[options.ancestors.length - 1]\n\n if (parent) {\n options.place = parent.position\n }\n }\n\n const start =\n options.place && 'start' in options.place\n ? options.place.start\n : options.place\n\n /**\n * Stack of ancestor nodes surrounding the message.\n *\n * @type {Array<Node> | undefined}\n */\n this.ancestors = options.ancestors || undefined\n\n /**\n * Original error cause of the message.\n *\n * @type {Error | undefined}\n */\n this.cause = options.cause || undefined\n\n /**\n * Starting column of message.\n *\n * @type {number | undefined}\n */\n this.column = start ? start.column : undefined\n\n /**\n * State of problem.\n *\n * * `true` — error, file not usable\n * * `false` — warning, change may be needed\n * * `undefined` — change likely not needed\n *\n * @type {boolean | null | undefined}\n */\n this.fatal = undefined\n\n /**\n * Path of a file (used throughout the `VFile` ecosystem).\n *\n * @type {string | undefined}\n */\n this.file = ''\n\n // Field from `Error`.\n /**\n * Reason for message.\n *\n * @type {string}\n */\n this.message = reason\n\n /**\n * Starting line of error.\n *\n * @type {number | undefined}\n */\n this.line = start ? start.line : undefined\n\n // Field from `Error`.\n /**\n * Serialized positional info of message.\n *\n * On normal errors, this would be something like `ParseError`, buit in\n * `VFile` messages we use this space to show where an error happened.\n */\n this.name = stringifyPosition(options.place) || '1:1'\n\n /**\n * Place of message.\n *\n * @type {Point | Position | undefined}\n */\n this.place = options.place || undefined\n\n /**\n * Reason for message, should use markdown.\n *\n * @type {string}\n */\n this.reason = this.message\n\n /**\n * Category of message (example: `'my-rule'`).\n *\n * @type {string | undefined}\n */\n this.ruleId = options.ruleId || undefined\n\n /**\n * Namespace of message (example: `'my-package'`).\n *\n * @type {string | undefined}\n */\n this.source = options.source || undefined\n\n // Field from `Error`.\n /**\n * Stack of message.\n *\n * This is used by normal errors to show where something happened in\n * programming code, irrelevant for `VFile` messages,\n *\n * @type {string}\n */\n this.stack =\n legacyCause && options.cause && typeof options.cause.stack === 'string'\n ? options.cause.stack\n : ''\n\n // The following fields are “well known”.\n // Not standard.\n // Feel free to add other non-standard fields to your messages.\n\n /**\n * Specify the source value that’s being reported, which is deemed\n * incorrect.\n *\n * @type {string | undefined}\n */\n this.actual = undefined\n\n /**\n * Suggest acceptable values that can be used instead of `actual`.\n *\n * @type {Array<string> | undefined}\n */\n this.expected = undefined\n\n /**\n * Long form description of the message (you should use markdown).\n *\n * @type {string | undefined}\n */\n this.note = undefined\n\n /**\n * Link to docs for the message.\n *\n * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n * > to `new URL(x)`.\n *\n * @type {string | undefined}\n */\n this.url = undefined\n }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.column = undefined\nVFileMessage.prototype.line = undefined\nVFileMessage.prototype.ancestors = undefined\nVFileMessage.prototype.cause = undefined\nVFileMessage.prototype.fatal = undefined\nVFileMessage.prototype.place = undefined\nVFileMessage.prototype.ruleId = undefined\nVFileMessage.prototype.source = undefined\n","// A derivative work based on:\n// <https://github.com/browserify/path-browserify>.\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// <https://github.com/nodejs/node/blob/master/lib/path.js>.\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const minpath = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n * File path.\n * @param {string | null | undefined} [extname]\n * Extension to strip.\n * @returns {string}\n * Stem or basename.\n */\nfunction basename(path, extname) {\n if (extname !== undefined && typeof extname !== 'string') {\n throw new TypeError('\"ext\" argument must be a string')\n }\n\n assertPath(path)\n let start = 0\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let seenNonSlash\n\n if (\n extname === undefined ||\n extname.length === 0 ||\n extname.length > path.length\n ) {\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // path component.\n seenNonSlash = true\n end = index + 1\n }\n }\n\n return end < 0 ? '' : path.slice(start, end)\n }\n\n if (extname === path) {\n return ''\n }\n\n let firstNonSlashEnd = -1\n let extnameIndex = extname.length - 1\n\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else {\n if (firstNonSlashEnd < 0) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching.\n seenNonSlash = true\n firstNonSlashEnd = index + 1\n }\n\n if (extnameIndex > -1) {\n // Try to match the explicit extension.\n if (path.codePointAt(index) === extname.codePointAt(extnameIndex--)) {\n if (extnameIndex < 0) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = index\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extnameIndex = -1\n end = firstNonSlashEnd\n }\n }\n }\n }\n\n if (start === end) {\n end = firstNonSlashEnd\n } else if (end < 0) {\n end = path.length\n }\n\n return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\nfunction dirname(path) {\n assertPath(path)\n\n if (path.length === 0) {\n return '.'\n }\n\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n // Prefix `--` is important to not run on `0`.\n while (--index) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n if (unmatchedSlash) {\n end = index\n break\n }\n } else if (!unmatchedSlash) {\n // We saw the first non-path separator\n unmatchedSlash = true\n }\n }\n\n return end < 0\n ? path.codePointAt(0) === 47 /* `/` */\n ? '/'\n : '.'\n : end === 1 && path.codePointAt(0) === 47 /* `/` */\n ? '//'\n : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * Extname.\n */\nfunction extname(path) {\n assertPath(path)\n\n let index = path.length\n\n let end = -1\n let startPart = 0\n let startDot = -1\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find.\n let preDotState = 0\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n while (index--) {\n const code = path.codePointAt(index)\n\n if (code === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (unmatchedSlash) {\n startPart = index + 1\n break\n }\n\n continue\n }\n\n if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // extension.\n unmatchedSlash = true\n end = index + 1\n }\n\n if (code === 46 /* `.` */) {\n // If this is our first dot, mark it as the start of our extension.\n if (startDot < 0) {\n startDot = index\n } else if (preDotState !== 1) {\n preDotState = 1\n }\n } else if (startDot > -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension.\n preDotState = -1\n }\n }\n\n if (\n startDot < 0 ||\n end < 0 ||\n // We saw a non-dot character immediately before the dot.\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly `..`.\n (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n ) {\n return ''\n }\n\n return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array<string>} segments\n * Path segments.\n * @returns {string}\n * File path.\n */\nfunction join(...segments) {\n let index = -1\n /** @type {string | undefined} */\n let joined\n\n while (++index < segments.length) {\n assertPath(segments[index])\n\n if (segments[index]) {\n joined =\n joined === undefined ? segments[index] : joined + '/' + segments[index]\n }\n }\n\n return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n assertPath(path)\n\n const absolute = path.codePointAt(0) === 47 /* `/` */\n\n // Normalize the path according to POSIX rules.\n let value = normalizeString(path, !absolute)\n\n if (value.length === 0 && !absolute) {\n value = '.'\n }\n\n if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n value += '/'\n }\n\n return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n * File path.\n * @param {boolean} allowAboveRoot\n * Whether `..` can move above root.\n * @returns {string}\n * File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n let result = ''\n let lastSegmentLength = 0\n let lastSlash = -1\n let dots = 0\n let index = -1\n /** @type {number | undefined} */\n let code\n /** @type {number} */\n let lastSlashIndex\n\n while (++index <= path.length) {\n if (index < path.length) {\n code = path.codePointAt(index)\n } else if (code === 47 /* `/` */) {\n break\n } else {\n code = 47 /* `/` */\n }\n\n if (code === 47 /* `/` */) {\n if (lastSlash === index - 1 || dots === 1) {\n // Empty.\n } else if (lastSlash !== index - 1 && dots === 2) {\n if (\n result.length < 2 ||\n lastSegmentLength !== 2 ||\n result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n result.codePointAt(result.length - 2) !== 46 /* `.` */\n ) {\n if (result.length > 2) {\n lastSlashIndex = result.lastIndexOf('/')\n\n if (lastSlashIndex !== result.length - 1) {\n if (lastSlashIndex < 0) {\n result = ''\n lastSegmentLength = 0\n } else {\n result = result.slice(0, lastSlashIndex)\n lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n }\n\n lastSlash = index\n dots = 0\n continue\n }\n } else if (result.length > 0) {\n result = ''\n lastSegmentLength = 0\n lastSlash = index\n dots = 0\n continue\n }\n }\n\n if (allowAboveRoot) {\n result = result.length > 0 ? result + '/..' : '..'\n lastSegmentLength = 2\n }\n } else {\n if (result.length > 0) {\n result += '/' + path.slice(lastSlash + 1, index)\n } else {\n result = path.slice(lastSlash + 1, index)\n }\n\n lastSegmentLength = index - lastSlash - 1\n }\n\n lastSlash = index\n dots = 0\n } else if (code === 46 /* `.` */ && dots > -1) {\n dots++\n } else {\n dots = -1\n }\n }\n\n return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n * File path.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError(\n 'Path must be a string. Received ' + JSON.stringify(path)\n )\n }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// <https://github.com/defunctzombie/node-process/blob/master/browser.js>.\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const minproc = {cwd}\n\nfunction cwd() {\n return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n * File path or URL.\n * @returns {fileUrlOrPath is URL}\n * Whether it’s a URL.\n */\n// From: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js#L720>\nexport function isUrl(fileUrlOrPath) {\n return Boolean(\n fileUrlOrPath !== null &&\n typeof fileUrlOrPath === 'object' &&\n 'href' in fileUrlOrPath &&\n fileUrlOrPath.href &&\n 'protocol' in fileUrlOrPath &&\n fileUrlOrPath.protocol &&\n // @ts-expect-error: indexing is fine.\n fileUrlOrPath.auth === undefined\n )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js>\n\n/**\n * @param {URL | string} path\n * File URL.\n * @returns {string}\n * File URL.\n */\nexport function urlToPath(path) {\n if (typeof path === 'string') {\n path = new URL(path)\n } else if (!isUrl(path)) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'The \"path\" argument must be of type string or an instance of URL. Received `' +\n path +\n '`'\n )\n error.code = 'ERR_INVALID_ARG_TYPE'\n throw error\n }\n\n if (path.protocol !== 'file:') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError('The URL must be of scheme file')\n error.code = 'ERR_INVALID_URL_SCHEME'\n throw error\n }\n\n return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n * URL.\n * @returns {string}\n * File path.\n */\nfunction getPathFromURLPosix(url) {\n if (url.hostname !== '') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL host must be \"localhost\" or empty on darwin'\n )\n error.code = 'ERR_INVALID_FILE_URL_HOST'\n throw error\n }\n\n const pathname = url.pathname\n let index = -1\n\n while (++index < pathname.length) {\n if (\n pathname.codePointAt(index) === 37 /* `%` */ &&\n pathname.codePointAt(index + 1) === 50 /* `2` */\n ) {\n const third = pathname.codePointAt(index + 2)\n if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL path must not include encoded / characters'\n )\n error.code = 'ERR_INVALID_FILE_URL_PATH'\n throw error\n }\n }\n }\n\n return decodeURIComponent(pathname)\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n * @import {Options as MessageOptions} from 'vfile-message'\n * @import {Compatible, Data, Map, Options, Value} from 'vfile'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {minpath} from '#minpath'\nimport {minproc} from '#minproc'\nimport {urlToPath, isUrl} from '#minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n 'history',\n 'path',\n 'basename',\n 'stem',\n 'extname',\n 'dirname'\n])\n\nexport class VFile {\n /**\n * Create a new virtual file.\n *\n * `options` is treated as:\n *\n * * `string` or `Uint8Array` — `{value: options}`\n * * `URL` — `{path: options}`\n * * `VFile` — shallow copies its data over to the new file\n * * `object` — all fields are shallow copied over to the new file\n *\n * Path related fields are set in the following order (least specific to\n * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n * `dirname`.\n *\n * You cannot set `dirname` or `extname` without setting either `history`,\n * `path`, `basename`, or `stem` too.\n *\n * @param {Compatible | null | undefined} [value]\n * File value.\n * @returns\n * New instance.\n */\n constructor(value) {\n /** @type {Options | VFile} */\n let options\n\n if (!value) {\n options = {}\n } else if (isUrl(value)) {\n options = {path: value}\n } else if (typeof value === 'string' || isUint8Array(value)) {\n options = {value}\n } else {\n options = value\n }\n\n /* eslint-disable no-unused-expressions */\n\n /**\n * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n *\n * @type {string}\n */\n // Prevent calling `cwd` (which could be expensive) if it’s not needed;\n // the empty string will be overridden in the next block.\n this.cwd = 'cwd' in options ? '' : minproc.cwd()\n\n /**\n * Place to store custom info (default: `{}`).\n *\n * It’s OK to store custom data directly on the file but moving it to\n * `data` is recommended.\n *\n * @type {Data}\n */\n this.data = {}\n\n /**\n * List of file paths the file moved between.\n *\n * The first is the original path and the last is the current path.\n *\n * @type {Array<string>}\n */\n this.history = []\n\n /**\n * List of messages associated with the file.\n *\n * @type {Array<VFileMessage>}\n */\n this.messages = []\n\n /**\n * Raw value.\n *\n * @type {Value}\n */\n this.value\n\n // The below are non-standard, they are “well-known”.\n // As in, used in several tools.\n /**\n * Source map.\n *\n * This type is equivalent to the `RawSourceMap` type from the `source-map`\n * module.\n *\n * @type {Map | null | undefined}\n */\n this.map\n\n /**\n * Custom, non-string, compiled, representation.\n *\n * This is used by unified to store non-string results.\n * One example is when turning markdown into React nodes.\n *\n * @type {unknown}\n */\n this.result\n\n /**\n * Whether a file was saved to disk.\n *\n * This is used by vfile reporters.\n *\n * @type {boolean}\n */\n this.stored\n /* eslint-enable no-unused-expressions */\n\n // Set path related properties in the correct order.\n let index = -1\n\n while (++index < order.length) {\n const field = order[index]\n\n // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n // `vfile`s too.\n if (\n field in options &&\n options[field] !== undefined &&\n options[field] !== null\n ) {\n // @ts-expect-error: TS doesn’t understand basic reality.\n this[field] = field === 'history' ? [...options[field]] : options[field]\n }\n }\n\n /** @type {string} */\n let field\n\n // Set non-path related properties.\n for (field in options) {\n // @ts-expect-error: fine to set other things.\n if (!order.includes(field)) {\n // @ts-expect-error: fine to set other things.\n this[field] = options[field]\n }\n }\n }\n\n /**\n * Get the basename (including extname) (example: `'index.min.js'`).\n *\n * @returns {string | undefined}\n * Basename.\n */\n get basename() {\n return typeof this.path === 'string'\n ? minpath.basename(this.path)\n : undefined\n }\n\n /**\n * Set basename (including extname) (`'index.min.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} basename\n * Basename.\n * @returns {undefined}\n * Nothing.\n */\n set basename(basename) {\n assertNonEmpty(basename, 'basename')\n assertPart(basename, 'basename')\n this.path = minpath.join(this.dirname || '', basename)\n }\n\n /**\n * Get the parent path (example: `'~'`).\n *\n * @returns {string | undefined}\n * Dirname.\n */\n get dirname() {\n return typeof this.path === 'string'\n ? minpath.dirname(this.path)\n : undefined\n }\n\n /**\n * Set the parent path (example: `'~'`).\n *\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} dirname\n * Dirname.\n * @returns {undefined}\n * Nothing.\n */\n set dirname(dirname) {\n assertPath(this.basename, 'dirname')\n this.path = minpath.join(dirname || '', this.basename)\n }\n\n /**\n * Get the extname (including dot) (example: `'.js'`).\n *\n * @returns {string | undefined}\n * Extname.\n */\n get extname() {\n return typeof this.path === 'string'\n ? minpath.extname(this.path)\n : undefined\n }\n\n /**\n * Set the extname (including dot) (example: `'.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} extname\n * Extname.\n * @returns {undefined}\n * Nothing.\n */\n set extname(extname) {\n assertPart(extname, 'extname')\n assertPath(this.dirname, 'extname')\n\n if (extname) {\n if (extname.codePointAt(0) !== 46 /* `.` */) {\n throw new Error('`extname` must start with `.`')\n }\n\n if (extname.includes('.', 1)) {\n throw new Error('`extname` cannot contain multiple dots')\n }\n }\n\n this.path = minpath.join(this.dirname, this.stem + (extname || ''))\n }\n\n /**\n * Get the full path (example: `'~/index.min.js'`).\n *\n * @returns {string}\n * Path.\n */\n get path() {\n return this.history[this.history.length - 1]\n }\n\n /**\n * Set the full path (example: `'~/index.min.js'`).\n *\n * Cannot be nullified.\n * You can set a file URL (a `URL` object with a `file:` protocol) which will\n * be turned into a path with `url.fileURLToPath`.\n *\n * @param {URL | string} path\n * Path.\n * @returns {undefined}\n * Nothing.\n */\n set path(path) {\n if (isUrl(path)) {\n path = urlToPath(path)\n }\n\n assertNonEmpty(path, 'path')\n\n if (this.path !== path) {\n this.history.push(path)\n }\n }\n\n /**\n * Get the stem (basename w/o extname) (example: `'index.min'`).\n *\n * @returns {string | undefined}\n * Stem.\n */\n get stem() {\n return typeof this.path === 'string'\n ? minpath.basename(this.path, this.extname)\n : undefined\n }\n\n /**\n * Set the stem (basename w/o extname) (example: `'index.min'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} stem\n * Stem.\n * @returns {undefined}\n * Nothing.\n */\n set stem(stem) {\n assertNonEmpty(stem, 'stem')\n assertPart(stem, 'stem')\n this.path = minpath.join(this.dirname || '', stem + (this.extname || ''))\n }\n\n // Normal prototypal methods.\n /**\n * Create a fatal message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `true` (error; file not usable)\n * and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {never}\n * Never.\n * @throws {VFileMessage}\n * Message.\n */\n fail(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = true\n\n throw message\n }\n\n /**\n * Create an info message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `undefined` (info; change\n * likely not needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n info(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = undefined\n\n return message\n }\n\n /**\n * Create a message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `false` (warning; change may be\n * needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n message(causeOrReason, optionsOrParentOrPlace, origin) {\n const message = new VFileMessage(\n // @ts-expect-error: the overloads are fine.\n causeOrReason,\n optionsOrParentOrPlace,\n origin\n )\n\n if (this.path) {\n message.name = this.path + ':' + message.name\n message.file = this.path\n }\n\n message.fatal = false\n\n this.messages.push(message)\n\n return message\n }\n\n /**\n * Serialize the file.\n *\n * > **Note**: which encodings are supported depends on the engine.\n * > For info on Node.js, see:\n * > <https://nodejs.org/api/util.html#whatwg-supported-encodings>.\n *\n * @param {string | null | undefined} [encoding='utf8']\n * Character encoding to understand `value` as when it’s a `Uint8Array`\n * (default: `'utf-8'`).\n * @returns {string}\n * Serialized file.\n */\n toString(encoding) {\n if (this.value === undefined) {\n return ''\n }\n\n if (typeof this.value === 'string') {\n return this.value\n }\n\n const decoder = new TextDecoder(encoding || undefined)\n return decoder.decode(this.value)\n }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n * File path part.\n * @param {string} name\n * Part name.\n * @returns {undefined}\n * Nothing.\n */\nfunction assertPart(part, name) {\n if (part && part.includes(minpath.sep)) {\n throw new Error(\n '`' + name + '` cannot be a path: did not expect `' + minpath.sep + '`'\n )\n }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n * Thing.\n * @param {string} name\n * Part name.\n * @returns {asserts part is string}\n * Nothing.\n */\nfunction assertNonEmpty(part, name) {\n if (!part) {\n throw new Error('`' + name + '` cannot be empty')\n }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n * Path.\n * @param {string} name\n * Dependency name.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path, name) {\n if (!path) {\n throw new Error('Setting `' + name + '` requires `path` to be set too')\n }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","export const CallableInstance =\n /**\n * @type {new <Parameters extends Array<unknown>, Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n */\n (\n /** @type {unknown} */\n (\n /**\n * @this {Function}\n * @param {string | symbol} property\n * @returns {(...parameters: Array<unknown>) => unknown}\n */\n function (property) {\n const self = this\n const constr = self.constructor\n const proto = /** @type {Record<string | symbol, Function>} */ (\n // Prototypes do exist.\n // type-coverage:ignore-next-line\n constr.prototype\n )\n const value = proto[property]\n /** @type {(...parameters: Array<unknown>) => unknown} */\n const apply = function () {\n return value.apply(apply, arguments)\n }\n\n Object.setPrototypeOf(apply, proto)\n\n // Not needed for us in `unified`: we only call this on the `copy`\n // function,\n // and we don't need to add its fields (`length`, `name`)\n // over.\n // See also: GH-246.\n // const names = Object.getOwnPropertyNames(value)\n //\n // for (const p of names) {\n // const descriptor = Object.getOwnPropertyDescriptor(value, p)\n // if (descriptor) Object.defineProperty(apply, p, descriptor)\n // }\n\n return apply\n }\n )\n )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n * Acceptable results from compilers.\n *\n * To register custom results, add them to\n * {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n * The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n * A **compiler** handles the compiling of a syntax tree to something else\n * (in most cases, text) (TypeScript type).\n *\n * It is used in the stringify phase and called with a {@linkcode Node}\n * and {@linkcode VFile} representation of the document to compile.\n * It should return the textual representation of the given tree (typically\n * `string`).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n * Tree to compile.\n * @param {VFile} file\n * File associated with `tree`.\n * @returns {Result}\n * New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n * something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the parser yields (default: `Node`)\n * @callback Parser\n * A **parser** handles the parsing of text to a syntax tree.\n *\n * It is used in the parse phase and is called with a `string` and\n * {@linkcode VFile} of the document to parse.\n * It must return the syntax tree representation of the given file\n * ({@linkcode Node}).\n * @param {string} document\n * Document to parse.\n * @param {VFile} file\n * File associated with `document`.\n * @returns {Tree}\n * Node representing the given file.\n */\n\n/**\n * @typedef {(\n * Plugin<Array<any>, any, any> |\n * PluginTuple<Array<any>, any, any> |\n * Preset\n * )} Pluggable\n * Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array<Pluggable>} PluggableList\n * List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n// <https://github.com/microsoft/TypeScript/issues/55197>.\n/**\n * @template {Array<unknown>} [PluginParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n * Value that is expected as input (default: `Node`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=Input]\n * Value that is yielded as output (default: `Input`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * (this: Processor, ...parameters: PluginParameters) =>\n * Input extends string ? // Parser.\n * Output extends Node | undefined ? undefined | void : never :\n * Output extends CompileResults ? // Compiler.\n * Input extends Node | undefined ? undefined | void : never :\n * Transformer<\n * Input extends Node ? Input : Node,\n * Output extends Node ? Output : Node\n * > | undefined | void\n * )} Plugin\n * Single plugin.\n *\n * Plugins configure the processors they are applied on in the following\n * ways:\n *\n * * they change the processor, such as the parser, the compiler, or by\n * configuring data\n * * they specify how to handle trees and files\n *\n * In practice, they are functions that can receive options and configure the\n * processor (`this`).\n *\n * > **Note**: plugins are called when the processor is *frozen*, not when\n * > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array<unknown>} [TupleParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n * Value that is expected as input (optional).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=undefined] (optional).\n * Value that is yielded as output.\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * [\n * plugin: Plugin<TupleParameters, Input, Output>,\n * ...parameters: TupleParameters\n * ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n * Sharable configuration.\n *\n * They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n * List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n * Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n * The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n * Callback called when the process is done.\n *\n * Called with either an error or a result.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {File | undefined} [file]\n * Processed file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n * Callback called when transformers are done.\n *\n * Called with either an error or results.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {Tree | undefined} [tree]\n * Transformed tree (optional).\n * @param {VFile | undefined} [file]\n * File (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n * Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n * Callback passed to transforms.\n *\n * If the signature of a `transformer` accepts a third argument, the\n * transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n * Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n * New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n * New, changed, file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n * Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n * Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n * Transformers handle syntax trees and files.\n *\n * They are functions that are called each time a syntax tree and file are\n * passed through the run phase.\n * When an error occurs in them (either because it’s thrown, returned,\n * rejected, or passed to `next`), the process stops.\n *\n * The run phase is handled by [`trough`][trough], see its documentation for\n * the exact semantics of these functions.\n *\n * > **Note**: you should likely ignore `next`: don’t accept it.\n * > it supports callback-style async work.\n * > But promises are likely easier to reason about.\n *\n * [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n * Tree to handle.\n * @param {VFile} file\n * File to handle.\n * @param {TransformCallback<Output>} next\n * Callback.\n * @returns {(\n * Promise<Output | undefined | void> |\n * Promise<never> | // For some reason this is needed separately.\n * Output |\n * Error |\n * undefined |\n * void\n * )}\n * If you accept `next`, nothing.\n * Otherwise:\n *\n * * `Error` — fatal error to stop the process\n * * `Promise<undefined>` or `undefined` — the next transformer keeps using\n * same tree\n * * `Promise<Node>` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n * Output of `parse`.\n * @template {Node | undefined} HeadTree\n * Input for `run`.\n * @template {Node | undefined} TailTree\n * Output for `run`.\n * @template {Node | undefined} CompileTree\n * Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n * Output of `stringify`.\n * @template {Node | string | undefined} Input\n * Input of plugin.\n * @template Output\n * Output of plugin (optional).\n * @typedef {(\n * Input extends string\n * ? Output extends Node | undefined\n * ? // Parser.\n * Processor<\n * Output extends undefined ? ParseTree : Output,\n * HeadTree,\n * TailTree,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * : Output extends CompileResults\n * ? Input extends Node | undefined\n * ? // Compiler.\n * Processor<\n * ParseTree,\n * HeadTree,\n * TailTree,\n * Input extends undefined ? CompileTree : Input,\n * Output extends undefined ? CompileResult : Output\n * >\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * : Input extends Node | undefined\n * ? Output extends Node | undefined\n * ? // Transform.\n * Processor<\n * ParseTree,\n * HeadTree extends undefined ? Input : HeadTree,\n * Output extends undefined ? TailTree : Output,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * )} UsePlugin\n * Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n * Node type that the transformer yields.\n * @typedef {(\n * Result extends Value | undefined ?\n * VFile :\n * VFile & {result: Result}\n * )} VFileWithOutput\n * Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n * If a result that is not acceptable on a `VFile` is used, that will\n * be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n * Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n * Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n * Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n * Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n * Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>>}\n */\nexport class Processor extends CallableInstance {\n /**\n * Create a processor.\n */\n constructor() {\n // If `Processor()` is called (w/o new), `copy` is called instead.\n super('copy')\n\n /**\n * Compiler to use (deprecated).\n *\n * @deprecated\n * Use `compiler` instead.\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.Compiler = undefined\n\n /**\n * Parser to use (deprecated).\n *\n * @deprecated\n * Use `parser` instead.\n * @type {(\n * Parser<ParseTree extends undefined ? Node : ParseTree> |\n * undefined\n * )}\n */\n this.Parser = undefined\n\n // Note: the following fields are considered private.\n // However, they are needed for tests, and TSC generates an untyped\n // `private freezeIndex` field for, which trips `type-coverage` up.\n // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n /**\n * Internal list of configured plugins.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Array<PluginTuple<Array<unknown>>>}\n */\n this.attachers = []\n\n /**\n * Compiler to use.\n *\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.compiler = undefined\n\n /**\n * Internal state to track where we are while freezing.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {number}\n */\n this.freezeIndex = -1\n\n /**\n * Internal state to track whether we’re frozen.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {boolean | undefined}\n */\n this.frozen = undefined\n\n /**\n * Internal state.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Data}\n */\n this.namespace = {}\n\n /**\n * Parser to use.\n *\n * @type {(\n * Parser<ParseTree extends undefined ? Node : ParseTree> |\n * undefined\n * )}\n */\n this.parser = undefined\n\n /**\n * Internal list of configured transformers.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Pipeline}\n */\n this.transformers = trough()\n }\n\n /**\n * Copy a processor.\n *\n * @deprecated\n * This is a private internal method and should not be used.\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n * New *unfrozen* processor ({@linkcode Processor}) that is\n * configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\n copy() {\n // Cast as the type parameters will be the same after attaching.\n const destination =\n /** @type {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>} */ (\n new Processor()\n )\n let index = -1\n\n while (++index < this.attachers.length) {\n const attacher = this.attachers[index]\n destination.use(...attacher)\n }\n\n destination.data(extend(true, {}, this.namespace))\n\n return destination\n }\n\n /**\n * Configure the processor with info available to all plugins.\n * Information is stored in an object.\n *\n * Typically, options can be given to a specific plugin, but sometimes it\n * makes sense to have information shared with several plugins.\n * For example, a list of HTML elements that are self-closing, which is\n * needed during all phases.\n *\n * > **Note**: setting information cannot occur on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * > **Note**: to register custom data in TypeScript, augment the\n * > {@linkcode Data} interface.\n *\n * @example\n * This example show how to get and set info:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * const processor = unified().data('alpha', 'bravo')\n *\n * processor.data('alpha') // => 'bravo'\n *\n * processor.data() // => {alpha: 'bravo'}\n *\n * processor.data({charlie: 'delta'})\n *\n * processor.data() // => {charlie: 'delta'}\n * ```\n *\n * @template {keyof Data} Key\n *\n * @overload\n * @returns {Data}\n *\n * @overload\n * @param {Data} dataset\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @overload\n * @param {Key} key\n * @returns {Data[Key]}\n *\n * @overload\n * @param {Key} key\n * @param {Data[Key]} value\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @param {Data | Key} [key]\n * Key to get or set, or entire dataset to set, or nothing to get the\n * entire dataset (optional).\n * @param {Data[Key]} [value]\n * Value to set (optional).\n * @returns {unknown}\n * The current processor when setting, the value at `key` when getting, or\n * the entire dataset when getting without key.\n */\n data(key, value) {\n if (typeof key === 'string') {\n // Set `key`.\n if (arguments.length === 2) {\n assertUnfrozen('data', this.frozen)\n this.namespace[key] = value\n return this\n }\n\n // Get `key`.\n return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n }\n\n // Set space.\n if (key) {\n assertUnfrozen('data', this.frozen)\n this.namespace = key\n return this\n }\n\n // Get space.\n return this.namespace\n }\n\n /**\n * Freeze a processor.\n *\n * Frozen processors are meant to be extended and not to be configured\n * directly.\n *\n * When a processor is frozen it cannot be unfrozen.\n * New processors working the same way can be created by calling the\n * processor.\n *\n * It’s possible to freeze processors explicitly by calling `.freeze()`.\n * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n * `.stringify()`, `.process()`, or `.processSync()` are called.\n *\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n * The current processor.\n */\n freeze() {\n if (this.frozen) {\n return this\n }\n\n // Cast so that we can type plugins easier.\n // Plugins are supposed to be usable on different processors, not just on\n // this exact processor.\n const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n while (++this.freezeIndex < this.attachers.length) {\n const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n if (options[0] === false) {\n continue\n }\n\n if (options[0] === true) {\n options[0] = undefined\n }\n\n const transformer = attacher.call(self, ...options)\n\n if (typeof transformer === 'function') {\n this.transformers.use(transformer)\n }\n }\n\n this.frozen = true\n this.freezeIndex = Number.POSITIVE_INFINITY\n\n return this\n }\n\n /**\n * Parse text to a syntax tree.\n *\n * > **Note**: `parse` freezes the processor if not already *frozen*.\n *\n * > **Note**: `parse` performs the parse phase, not the run phase or other\n * > phases.\n *\n * @param {Compatible | undefined} [file]\n * file to parse (optional); typically `string` or `VFile`; any value\n * accepted as `x` in `new VFile(x)`.\n * @returns {ParseTree extends undefined ? Node : ParseTree}\n * Syntax tree representing `file`.\n */\n parse(file) {\n this.freeze()\n const realFile = vfile(file)\n const parser = this.parser || this.Parser\n assertParser('parse', parser)\n return parser(String(realFile), realFile)\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * > **Note**: `process` freezes the processor if not already *frozen*.\n *\n * > **Note**: `process` performs the parse, run, and stringify phases.\n *\n * @overload\n * @param {Compatible | undefined} file\n * @param {ProcessCallback<VFileWithOutput<CompileResult>>} done\n * @returns {undefined}\n *\n * @overload\n * @param {Compatible | undefined} [file]\n * @returns {Promise<VFileWithOutput<CompileResult>>}\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`]; any value accepted as\n * `x` in `new VFile(x)`.\n * @param {ProcessCallback<VFileWithOutput<CompileResult>> | undefined} [done]\n * Callback (optional).\n * @returns {Promise<VFile> | undefined}\n * Nothing if `done` is given.\n * Otherwise a promise, rejected with a fatal error or resolved with the\n * processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n process(file, done) {\n const self = this\n\n this.freeze()\n assertParser('process', this.parser || this.Parser)\n assertCompiler('process', this.compiler || this.Compiler)\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {((file: VFileWithOutput<CompileResult>) => undefined | void) | undefined} resolve\n * @param {(error: Error | undefined) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n const realFile = vfile(file)\n // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n // input of the first transform).\n const parseTree =\n /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n /** @type {unknown} */ (self.parse(realFile))\n )\n\n self.run(parseTree, realFile, function (error, tree, file) {\n if (error || !tree || !file) {\n return realDone(error)\n }\n\n // Assume `TailTree` (the output of the last transform) matches\n // `CompileTree` (the input of the compiler).\n const compileTree =\n /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n /** @type {unknown} */ (tree)\n )\n\n const compileResult = self.stringify(compileTree, file)\n\n if (looksLikeAValue(compileResult)) {\n file.value = compileResult\n } else {\n file.result = compileResult\n }\n\n realDone(error, /** @type {VFileWithOutput<CompileResult>} */ (file))\n })\n\n /**\n * @param {Error | undefined} error\n * @param {VFileWithOutput<CompileResult> | undefined} [file]\n * @returns {undefined}\n */\n function realDone(error, file) {\n if (error || !file) {\n reject(error)\n } else if (resolve) {\n resolve(file)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, file)\n }\n }\n }\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `processSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `processSync` performs the parse, run, and stringify phases.\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`; any value accepted as\n * `x` in `new VFile(x)`.\n * @returns {VFileWithOutput<CompileResult>}\n * The processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n processSync(file) {\n /** @type {boolean} */\n let complete = false\n /** @type {VFileWithOutput<CompileResult> | undefined} */\n let result\n\n this.freeze()\n assertParser('processSync', this.parser || this.Parser)\n assertCompiler('processSync', this.compiler || this.Compiler)\n\n this.process(file, realDone)\n assertDone('processSync', 'process', complete)\n assert(result, 'we either bailed on an error or have a tree')\n\n return result\n\n /**\n * @type {ProcessCallback<VFileWithOutput<CompileResult>>}\n */\n function realDone(error, file) {\n complete = true\n bail(error)\n result = file\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * > **Note**: `run` freezes the processor if not already *frozen*.\n *\n * > **Note**: `run` performs the run phase, not other phases.\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} file\n * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} [file]\n * @returns {Promise<TailTree extends undefined ? Node : TailTree>}\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {(\n * RunCallback<TailTree extends undefined ? Node : TailTree> |\n * Compatible\n * )} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} [done]\n * Callback (optional).\n * @returns {Promise<TailTree extends undefined ? Node : TailTree> | undefined}\n * Nothing if `done` is given.\n * Otherwise, a promise rejected with a fatal error or resolved with the\n * transformed tree.\n */\n run(tree, file, done) {\n assertNode(tree)\n this.freeze()\n\n const transformers = this.transformers\n\n if (!done && typeof file === 'function') {\n done = file\n file = undefined\n }\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {(\n * ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n * undefined\n * )} resolve\n * @param {(error: Error) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n assert(\n typeof file !== 'function',\n '`file` can’t be a `done` anymore, we checked'\n )\n const realFile = vfile(file)\n transformers.run(tree, realFile, realDone)\n\n /**\n * @param {Error | undefined} error\n * @param {Node} outputTree\n * @param {VFile} file\n * @returns {undefined}\n */\n function realDone(error, outputTree, file) {\n const resultingTree =\n /** @type {TailTree extends undefined ? Node : TailTree} */ (\n outputTree || tree\n )\n\n if (error) {\n reject(error)\n } else if (resolve) {\n resolve(resultingTree)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, resultingTree, file)\n }\n }\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `runSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `runSync` performs the run phase, not other phases.\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {TailTree extends undefined ? Node : TailTree}\n * Transformed tree.\n */\n runSync(tree, file) {\n /** @type {boolean} */\n let complete = false\n /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n let result\n\n this.run(tree, file, realDone)\n\n assertDone('runSync', 'run', complete)\n assert(result, 'we either bailed on an error or have a tree')\n return result\n\n /**\n * @type {RunCallback<TailTree extends undefined ? Node : TailTree>}\n */\n function realDone(error, tree) {\n bail(error)\n result = tree\n complete = true\n }\n }\n\n /**\n * Compile a syntax tree.\n *\n * > **Note**: `stringify` freezes the processor if not already *frozen*.\n *\n * > **Note**: `stringify` performs the stringify phase, not the run phase\n * > or other phases.\n *\n * @param {CompileTree extends undefined ? Node : CompileTree} tree\n * Tree to compile.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {CompileResult extends undefined ? Value : CompileResult}\n * Textual representation of the tree (see note).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n stringify(tree, file) {\n this.freeze()\n const realFile = vfile(file)\n const compiler = this.compiler || this.Compiler\n assertCompiler('stringify', compiler)\n assertNode(tree)\n\n return compiler(tree, realFile)\n }\n\n /**\n * Configure the processor to use a plugin, a list of usable values, or a\n * preset.\n *\n * If the processor is already using a plugin, the previous plugin\n * configuration is changed based on the options that are passed in.\n * In other words, the plugin is not added a second time.\n *\n * > **Note**: `use` cannot be called on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * @example\n * There are many ways to pass plugins to `.use()`.\n * This example gives an overview:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * unified()\n * // Plugin with options:\n * .use(pluginA, {x: true, y: true})\n * // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n * .use(pluginA, {y: false, z: true})\n * // Plugins:\n * .use([pluginB, pluginC])\n * // Two plugins, the second with options:\n * .use([pluginD, [pluginE, {}]])\n * // Preset with plugins and settings:\n * .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n * // Settings only:\n * .use({settings: {position: false}})\n * ```\n *\n * @template {Array<unknown>} [Parameters=[]]\n * @template {Node | string | undefined} [Input=undefined]\n * @template [Output=Input]\n *\n * @overload\n * @param {Preset | null | undefined} [preset]\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @overload\n * @param {PluggableList} list\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @overload\n * @param {Plugin<Parameters, Input, Output>} plugin\n * @param {...(Parameters | [boolean])} parameters\n * @returns {UsePlugin<ParseTree, HeadTree, TailTree, CompileTree, CompileResult, Input, Output>}\n *\n * @param {PluggableList | Plugin | Preset | null | undefined} value\n * Usable value.\n * @param {...unknown} parameters\n * Parameters, when a plugin is given as a usable value.\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n * Current processor.\n */\n use(value, ...parameters) {\n const attachers = this.attachers\n const namespace = this.namespace\n\n assertUnfrozen('use', this.frozen)\n\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'function') {\n addPlugin(value, parameters)\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n addList(value)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n\n return this\n\n /**\n * @param {Pluggable} value\n * @returns {undefined}\n */\n function add(value) {\n if (typeof value === 'function') {\n addPlugin(value, [])\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n const [plugin, ...parameters] =\n /** @type {PluginTuple<Array<unknown>>} */ (value)\n addPlugin(plugin, parameters)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n }\n\n /**\n * @param {Preset} result\n * @returns {undefined}\n */\n function addPreset(result) {\n if (!('plugins' in result) && !('settings' in result)) {\n throw new Error(\n 'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n )\n }\n\n addList(result.plugins)\n\n if (result.settings) {\n namespace.settings = extend(true, namespace.settings, result.settings)\n }\n }\n\n /**\n * @param {PluggableList | null | undefined} plugins\n * @returns {undefined}\n */\n function addList(plugins) {\n let index = -1\n\n if (plugins === null || plugins === undefined) {\n // Empty.\n } else if (Array.isArray(plugins)) {\n while (++index < plugins.length) {\n const thing = plugins[index]\n add(thing)\n }\n } else {\n throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n }\n }\n\n /**\n * @param {Plugin} plugin\n * @param {Array<unknown>} parameters\n * @returns {undefined}\n */\n function addPlugin(plugin, parameters) {\n let index = -1\n let entryIndex = -1\n\n while (++index < attachers.length) {\n if (attachers[index][0] === plugin) {\n entryIndex = index\n break\n }\n }\n\n if (entryIndex === -1) {\n attachers.push([plugin, ...parameters])\n }\n // Only set if there was at least a `primary` value, otherwise we’d change\n // `arguments.length`.\n else if (parameters.length > 0) {\n let [primary, ...rest] = parameters\n const currentPrimary = attachers[entryIndex][1]\n if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n primary = extend(true, currentPrimary, primary)\n }\n\n attachers[entryIndex] = [plugin, primary, ...rest]\n }\n }\n }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n * This example shows how a new processor can be created (from `remark`) and linked\n * to **stdin**(4) and **stdout**(4).\n *\n * ```js\n * import process from 'node:process'\n * import concatStream from 'concat-stream'\n * import {remark} from 'remark'\n *\n * process.stdin.pipe(\n * concatStream(function (buf) {\n * process.stdout.write(String(remark().processSync(buf)))\n * })\n * )\n * ```\n *\n * @returns\n * New *unfrozen* processor (`processor`).\n *\n * This processor is configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `parser`')\n }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `compiler`')\n }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n if (frozen) {\n throw new Error(\n 'Cannot call `' +\n name +\n '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n )\n }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n // type-coverage:ignore-next-line\n if (!isPlainObj(node) || typeof node.type !== 'string') {\n throw new TypeError('Expected node, got `' + node + '`')\n // Fine.\n }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n if (!complete) {\n throw new Error(\n '`' + name + '` finished async. Use `' + asyncName + '` instead'\n )\n }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'message' in value &&\n 'messages' in value\n )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","var __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), setter ? setter.call(obj, value) : member.set(obj, value), value);\nvar _marks, _hasText, _maybeMerge, _matchTarget, _runNode, _closeNodeAndPush, _addNodeAndPush, _marks2, _matchTarget2, _runProseNode, _runProseMark, _runNode2, _searchType, _maybeMergeChildren, _createMarkdownNode, _moveSpaces, _closeNodeAndPush2, _addNodeAndPush2, _openMark, _closeMark;\nimport { stackOverFlow, parserMatchError, createNodeInParserFail, serializerMatchError } from \"@milkdown/exception\";\nimport { Mark } from \"@milkdown/prose/model\";\nclass StackElement {\n}\nclass Stack {\n constructor() {\n this.elements = [];\n this.size = () => {\n return this.elements.length;\n };\n this.top = () => {\n return this.elements.at(-1);\n };\n this.push = (node) => {\n this.top()?.push(node);\n };\n this.open = (node) => {\n this.elements.push(node);\n };\n this.close = () => {\n const el = this.elements.pop();\n if (!el) throw stackOverFlow();\n return el;\n };\n }\n}\nclass ParserStackElement extends StackElement {\n constructor(type, content, attrs) {\n super();\n this.type = type;\n this.content = content;\n this.attrs = attrs;\n }\n push(node, ...rest) {\n this.content.push(node, ...rest);\n }\n pop() {\n return this.content.pop();\n }\n static create(type, content, attrs) {\n return new ParserStackElement(type, content, attrs);\n }\n}\nconst _ParserState = class _ParserState extends Stack {\n /// @internal\n constructor(schema) {\n super();\n __privateAdd(this, _marks);\n __privateAdd(this, _hasText);\n __privateAdd(this, _maybeMerge);\n __privateAdd(this, _matchTarget);\n __privateAdd(this, _runNode);\n __privateAdd(this, _closeNodeAndPush);\n __privateAdd(this, _addNodeAndPush);\n __privateSet(this, _marks, Mark.none);\n __privateSet(this, _hasText, (node) => node.isText);\n __privateSet(this, _maybeMerge, (a, b) => {\n if (__privateGet(this, _hasText).call(this, a) && __privateGet(this, _hasText).call(this, b) && Mark.sameSet(a.marks, b.marks))\n return this.schema.text(a.text + b.text, a.marks);\n return void 0;\n });\n __privateSet(this, _matchTarget, (node) => {\n const result = Object.values({\n ...this.schema.nodes,\n ...this.schema.marks\n }).find((x) => {\n const spec = x.spec;\n return spec.parseMarkdown.match(node);\n });\n if (!result) throw parserMatchError(node);\n return result;\n });\n __privateSet(this, _runNode, (node) => {\n const type = __privateGet(this, _matchTarget).call(this, node);\n const spec = type.spec;\n spec.parseMarkdown.runner(this, node, type);\n });\n this.injectRoot = (node, nodeType, attrs) => {\n this.openNode(nodeType, attrs);\n this.next(node.children);\n return this;\n };\n this.openNode = (nodeType, attrs) => {\n this.open(ParserStackElement.create(nodeType, [], attrs));\n return this;\n };\n __privateSet(this, _closeNodeAndPush, () => {\n __privateSet(this, _marks, Mark.none);\n const element = this.close();\n return __privateGet(this, _addNodeAndPush).call(this, element.type, element.attrs, element.content);\n });\n this.closeNode = () => {\n try {\n __privateGet(this, _closeNodeAndPush).call(this);\n } catch (e) {\n console.error(e);\n }\n return this;\n };\n __privateSet(this, _addNodeAndPush, (nodeType, attrs, content) => {\n const node = nodeType.createAndFill(attrs, content, __privateGet(this, _marks));\n if (!node) throw createNodeInParserFail(nodeType, attrs, content);\n this.push(node);\n return node;\n });\n this.addNode = (nodeType, attrs, content) => {\n try {\n __privateGet(this, _addNodeAndPush).call(this, nodeType, attrs, content);\n } catch (e) {\n console.error(e);\n }\n return this;\n };\n this.openMark = (markType, attrs) => {\n const mark = markType.create(attrs);\n __privateSet(this, _marks, mark.addToSet(__privateGet(this, _marks)));\n return this;\n };\n this.closeMark = (markType) => {\n __privateSet(this, _marks, markType.removeFromSet(__privateGet(this, _marks)));\n return this;\n };\n this.addText = (text) => {\n try {\n const topElement = this.top();\n if (!topElement) throw stackOverFlow();\n const prevNode = topElement.pop();\n const currNode = this.schema.text(text, __privateGet(this, _marks));\n if (!prevNode) {\n topElement.push(currNode);\n return this;\n }\n const merged = __privateGet(this, _maybeMerge).call(this, prevNode, currNode);\n if (merged) {\n topElement.push(merged);\n return this;\n }\n topElement.push(prevNode, currNode);\n return this;\n } catch (e) {\n console.error(e);\n return this;\n }\n };\n this.build = () => {\n let doc;\n do\n doc = __privateGet(this, _closeNodeAndPush).call(this);\n while (this.size());\n return doc;\n };\n this.next = (nodes = []) => {\n [nodes].flat().forEach((node) => __privateGet(this, _runNode).call(this, node));\n return this;\n };\n this.toDoc = () => this.build();\n this.run = (remark, markdown) => {\n const tree = remark.runSync(\n remark.parse(markdown),\n markdown\n );\n this.next(tree);\n return this;\n };\n this.schema = schema;\n }\n};\n_marks = new WeakMap();\n_hasText = new WeakMap();\n_maybeMerge = new WeakMap();\n_matchTarget = new WeakMap();\n_runNode = new WeakMap();\n_closeNodeAndPush = new WeakMap();\n_addNodeAndPush = new WeakMap();\n_ParserState.create = (schema, remark) => {\n const state = new _ParserState(schema);\n return (text) => {\n state.run(remark, text);\n return state.toDoc();\n };\n};\nlet ParserState = _ParserState;\nconst _SerializerStackElement = class _SerializerStackElement extends StackElement {\n constructor(type, children, value, props = {}) {\n super();\n this.type = type;\n this.children = children;\n this.value = value;\n this.props = props;\n this.push = (node, ...rest) => {\n if (!this.children) this.children = [];\n this.children.push(node, ...rest);\n };\n this.pop = () => this.children?.pop();\n }\n};\n_SerializerStackElement.create = (type, children, value, props = {}) => new _SerializerStackElement(type, children, value, props);\nlet SerializerStackElement = _SerializerStackElement;\nconst isFragment = (x) => Object.prototype.hasOwnProperty.call(x, \"size\");\nconst _SerializerState = class _SerializerState extends Stack {\n /// @internal\n constructor(schema) {\n super();\n __privateAdd(this, _marks2);\n __privateAdd(this, _matchTarget2);\n __privateAdd(this, _runProseNode);\n __privateAdd(this, _runProseMark);\n __privateAdd(this, _runNode2);\n __privateAdd(this, _searchType);\n __privateAdd(this, _maybeMergeChildren);\n __privateAdd(this, _createMarkdownNode);\n __privateAdd(this, _moveSpaces);\n __privateAdd(this, _closeNodeAndPush2);\n __privateAdd(this, _addNodeAndPush2);\n __privateAdd(this, _openMark);\n __privateAdd(this, _closeMark);\n __privateSet(this, _marks2, Mark.none);\n __privateSet(this, _matchTarget2, (node) => {\n const result = Object.values({\n ...this.schema.nodes,\n ...this.schema.marks\n }).find((x) => {\n const spec = x.spec;\n return spec.toMarkdown.match(node);\n });\n if (!result) throw serializerMatchError(node.type);\n return result;\n });\n __privateSet(this, _runProseNode, (node) => {\n const type = __privateGet(this, _matchTarget2).call(this, node);\n const spec = type.spec;\n return spec.toMarkdown.runner(this, node);\n });\n __privateSet(this, _runProseMark, (mark, node) => {\n const type = __privateGet(this, _matchTarget2).call(this, mark);\n const spec = type.spec;\n return spec.toMarkdown.runner(this, mark, node);\n });\n __privateSet(this, _runNode2, (node) => {\n const { marks } = node;\n const getPriority = (x) => x.type.spec.priority ?? 50;\n const tmp = [...marks].sort((a, b) => getPriority(a) - getPriority(b));\n const unPreventNext = tmp.every((mark) => !__privateGet(this, _runProseMark).call(this, mark, node));\n if (unPreventNext) __privateGet(this, _runProseNode).call(this, node);\n marks.forEach((mark) => __privateGet(this, _closeMark).call(this, mark));\n });\n __privateSet(this, _searchType, (child, type) => {\n if (child.type === type) return child;\n if (child.children?.length !== 1) return child;\n const searchNode = (node2) => {\n if (node2.type === type) return node2;\n if (node2.children?.length !== 1) return null;\n const [firstChild] = node2.children;\n if (!firstChild) return null;\n return searchNode(firstChild);\n };\n const target = searchNode(child);\n if (!target) return child;\n const tmp = target.children ? [...target.children] : void 0;\n const node = { ...child, children: tmp };\n node.children = tmp;\n target.children = [node];\n return target;\n });\n __privateSet(this, _maybeMergeChildren, (node) => {\n const { children } = node;\n if (!children) return node;\n node.children = children.reduce((nextChildren, child, index) => {\n if (index === 0) return [child];\n const last = nextChildren.at(-1);\n if (last && last.isMark && child.isMark) {\n child = __privateGet(this, _searchType).call(this, child, last.type);\n const { children: currChildren, ...currRest } = child;\n const { children: prevChildren, ...prevRest } = last;\n if (child.type === last.type && currChildren && prevChildren && JSON.stringify(currRest) === JSON.stringify(prevRest)) {\n const next = {\n ...prevRest,\n children: [...prevChildren, ...currChildren]\n };\n return nextChildren.slice(0, -1).concat(__privateGet(this, _maybeMergeChildren).call(this, next));\n }\n }\n return nextChildren.concat(child);\n }, []);\n return node;\n });\n __privateSet(this, _createMarkdownNode, (element) => {\n const node = {\n ...element.props,\n type: element.type\n };\n if (element.children) node.children = element.children;\n if (element.value) node.value = element.value;\n return node;\n });\n this.openNode = (type, value, props) => {\n this.open(SerializerStackElement.create(type, void 0, value, props));\n return this;\n };\n __privateSet(this, _moveSpaces, (element, onPush) => {\n let startSpaces = \"\";\n let endSpaces = \"\";\n const children = element.children;\n let first = -1;\n let last = -1;\n const findIndex = (node) => {\n if (!node) return;\n node.forEach((child, index) => {\n if (child.type === \"text\" && child.value) {\n if (first < 0) first = index;\n last = index;\n }\n });\n };\n if (children) {\n findIndex(children);\n const lastChild = children?.[last];\n const firstChild = children?.[first];\n if (lastChild && lastChild.value.endsWith(\" \")) {\n const text = lastChild.value;\n const trimmed = text.trimEnd();\n endSpaces = text.slice(trimmed.length);\n lastChild.value = trimmed;\n }\n if (firstChild && firstChild.value.startsWith(\" \")) {\n const text = firstChild.value;\n const trimmed = text.trimStart();\n startSpaces = text.slice(0, text.length - trimmed.length);\n firstChild.value = trimmed;\n }\n }\n if (startSpaces.length) __privateGet(this, _addNodeAndPush2).call(this, \"text\", void 0, startSpaces);\n const result = onPush();\n if (endSpaces.length) __privateGet(this, _addNodeAndPush2).call(this, \"text\", void 0, endSpaces);\n return result;\n });\n __privateSet(this, _closeNodeAndPush2, (trim = false) => {\n const element = this.close();\n const onPush = () => __privateGet(this, _addNodeAndPush2).call(this, element.type, element.children, element.value, element.props);\n if (trim) return __privateGet(this, _moveSpaces).call(this, element, onPush);\n return onPush();\n });\n this.closeNode = () => {\n __privateGet(this, _closeNodeAndPush2).call(this);\n return this;\n };\n __privateSet(this, _addNodeAndPush2, (type, children, value, props) => {\n const element = SerializerStackElement.create(type, children, value, props);\n const node = __privateGet(this, _maybeMergeChildren).call(this, __privateGet(this, _createMarkdownNode).call(this, element));\n this.push(node);\n return node;\n });\n this.addNode = (type, children, value, props) => {\n __privateGet(this, _addNodeAndPush2).call(this, type, children, value, props);\n return this;\n };\n __privateSet(this, _openMark, (mark, type, value, props) => {\n const isIn = mark.isInSet(__privateGet(this, _marks2));\n if (isIn) return this;\n __privateSet(this, _marks2, mark.addToSet(__privateGet(this, _marks2)));\n return this.openNode(type, value, { ...props, isMark: true });\n });\n __privateSet(this, _closeMark, (mark) => {\n const isIn = mark.isInSet(__privateGet(this, _marks2));\n if (!isIn) return;\n __privateSet(this, _marks2, mark.type.removeFromSet(__privateGet(this, _marks2)));\n __privateGet(this, _closeNodeAndPush2).call(this, true);\n });\n this.withMark = (mark, type, value, props) => {\n __privateGet(this, _openMark).call(this, mark, type, value, props);\n return this;\n };\n this.closeMark = (mark) => {\n __privateGet(this, _closeMark).call(this, mark);\n return this;\n };\n this.build = () => {\n let doc = null;\n do\n doc = __privateGet(this, _closeNodeAndPush2).call(this);\n while (this.size());\n return doc;\n };\n this.next = (nodes) => {\n if (isFragment(nodes)) {\n nodes.forEach((node) => {\n __privateGet(this, _runNode2).call(this, node);\n });\n return this;\n }\n __privateGet(this, _runNode2).call(this, nodes);\n return this;\n };\n this.toString = (remark) => remark.stringify(this.build());\n this.run = (tree) => {\n this.next(tree);\n return this;\n };\n this.schema = schema;\n }\n};\n_marks2 = new WeakMap();\n_matchTarget2 = new WeakMap();\n_runProseNode = new WeakMap();\n_runProseMark = new WeakMap();\n_runNode2 = new WeakMap();\n_searchType = new WeakMap();\n_maybeMergeChildren = new WeakMap();\n_createMarkdownNode = new WeakMap();\n_moveSpaces = new WeakMap();\n_closeNodeAndPush2 = new WeakMap();\n_addNodeAndPush2 = new WeakMap();\n_openMark = new WeakMap();\n_closeMark = new WeakMap();\n_SerializerState.create = (schema, remark) => {\n const state = new _SerializerState(schema);\n return (content) => {\n state.run(content);\n return state.toString(remark);\n };\n};\nlet SerializerState = _SerializerState;\nexport {\n ParserState,\n SerializerState,\n Stack,\n StackElement\n};\n//# sourceMappingURL=index.js.map\n","import { ReplaceError, Slice, Fragment, MarkType, Mark } from 'prosemirror-model';\n\n// Recovery values encode a range index and an offset. They are\n// represented as numbers, because tons of them will be created when\n// mapping, for example, a large number of decorations. The number's\n// lower 16 bits provide the index, the remaining bits the offset.\n//\n// Note: We intentionally don't use bit shift operators to en- and\n// decode these, since those clip to 32 bits, which we might in rare\n// cases want to overflow. A 64-bit float can represent 48-bit\n// integers precisely.\nconst lower16 = 0xffff;\nconst factor16 = Math.pow(2, 16);\nfunction makeRecover(index, offset) { return index + offset * factor16; }\nfunction recoverIndex(value) { return value & lower16; }\nfunction recoverOffset(value) { return (value - (value & lower16)) / factor16; }\nconst DEL_BEFORE = 1, DEL_AFTER = 2, DEL_ACROSS = 4, DEL_SIDE = 8;\n/**\nAn object representing a mapped position with extra\ninformation.\n*/\nclass MapResult {\n /**\n @internal\n */\n constructor(\n /**\n The mapped version of the position.\n */\n pos, \n /**\n @internal\n */\n delInfo, \n /**\n @internal\n */\n recover) {\n this.pos = pos;\n this.delInfo = delInfo;\n this.recover = recover;\n }\n /**\n Tells you whether the position was deleted, that is, whether the\n step removed the token on the side queried (via the `assoc`)\n argument from the document.\n */\n get deleted() { return (this.delInfo & DEL_SIDE) > 0; }\n /**\n Tells you whether the token before the mapped position was deleted.\n */\n get deletedBefore() { return (this.delInfo & (DEL_BEFORE | DEL_ACROSS)) > 0; }\n /**\n True when the token after the mapped position was deleted.\n */\n get deletedAfter() { return (this.delInfo & (DEL_AFTER | DEL_ACROSS)) > 0; }\n /**\n Tells whether any of the steps mapped through deletes across the\n position (including both the token before and after the\n position).\n */\n get deletedAcross() { return (this.delInfo & DEL_ACROSS) > 0; }\n}\n/**\nA map describing the deletions and insertions made by a step, which\ncan be used to find the correspondence between positions in the\npre-step version of a document and the same position in the\npost-step version.\n*/\nclass StepMap {\n /**\n Create a position map. The modifications to the document are\n represented as an array of numbers, in which each group of three\n represents a modified chunk as `[start, oldSize, newSize]`.\n */\n constructor(\n /**\n @internal\n */\n ranges, \n /**\n @internal\n */\n inverted = false) {\n this.ranges = ranges;\n this.inverted = inverted;\n if (!ranges.length && StepMap.empty)\n return StepMap.empty;\n }\n /**\n @internal\n */\n recover(value) {\n let diff = 0, index = recoverIndex(value);\n if (!this.inverted)\n for (let i = 0; i < index; i++)\n diff += this.ranges[i * 3 + 2] - this.ranges[i * 3 + 1];\n return this.ranges[index * 3] + diff + recoverOffset(value);\n }\n mapResult(pos, assoc = 1) { return this._map(pos, assoc, false); }\n map(pos, assoc = 1) { return this._map(pos, assoc, true); }\n /**\n @internal\n */\n _map(pos, assoc, simple) {\n let diff = 0, oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n for (let i = 0; i < this.ranges.length; i += 3) {\n let start = this.ranges[i] - (this.inverted ? diff : 0);\n if (start > pos)\n break;\n let oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex], end = start + oldSize;\n if (pos <= end) {\n let side = !oldSize ? assoc : pos == start ? -1 : pos == end ? 1 : assoc;\n let result = start + diff + (side < 0 ? 0 : newSize);\n if (simple)\n return result;\n let recover = pos == (assoc < 0 ? start : end) ? null : makeRecover(i / 3, pos - start);\n let del = pos == start ? DEL_AFTER : pos == end ? DEL_BEFORE : DEL_ACROSS;\n if (assoc < 0 ? pos != start : pos != end)\n del |= DEL_SIDE;\n return new MapResult(result, del, recover);\n }\n diff += newSize - oldSize;\n }\n return simple ? pos + diff : new MapResult(pos + diff, 0, null);\n }\n /**\n @internal\n */\n touches(pos, recover) {\n let diff = 0, index = recoverIndex(recover);\n let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n for (let i = 0; i < this.ranges.length; i += 3) {\n let start = this.ranges[i] - (this.inverted ? diff : 0);\n if (start > pos)\n break;\n let oldSize = this.ranges[i + oldIndex], end = start + oldSize;\n if (pos <= end && i == index * 3)\n return true;\n diff += this.ranges[i + newIndex] - oldSize;\n }\n return false;\n }\n /**\n Calls the given function on each of the changed ranges included in\n this map.\n */\n forEach(f) {\n let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n for (let i = 0, diff = 0; i < this.ranges.length; i += 3) {\n let start = this.ranges[i], oldStart = start - (this.inverted ? diff : 0), newStart = start + (this.inverted ? 0 : diff);\n let oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex];\n f(oldStart, oldStart + oldSize, newStart, newStart + newSize);\n diff += newSize - oldSize;\n }\n }\n /**\n Create an inverted version of this map. The result can be used to\n map positions in the post-step document to the pre-step document.\n */\n invert() {\n return new StepMap(this.ranges, !this.inverted);\n }\n /**\n @internal\n */\n toString() {\n return (this.inverted ? \"-\" : \"\") + JSON.stringify(this.ranges);\n }\n /**\n Create a map that moves all positions by offset `n` (which may be\n negative). This can be useful when applying steps meant for a\n sub-document to a larger document, or vice-versa.\n */\n static offset(n) {\n return n == 0 ? StepMap.empty : new StepMap(n < 0 ? [0, -n, 0] : [0, 0, n]);\n }\n}\n/**\nA StepMap that contains no changed ranges.\n*/\nStepMap.empty = new StepMap([]);\n/**\nA mapping represents a pipeline of zero or more [step\nmaps](https://prosemirror.net/docs/ref/#transform.StepMap). It has special provisions for losslessly\nhandling mapping positions through a series of steps in which some\nsteps are inverted versions of earlier steps. (This comes up when\n‘[rebasing](https://prosemirror.net/docs/guide/#transform.rebasing)’ steps for\ncollaboration or history management.)\n*/\nclass Mapping {\n /**\n Create a new mapping with the given position maps.\n */\n constructor(maps, \n /**\n @internal\n */\n mirror, \n /**\n The starting position in the `maps` array, used when `map` or\n `mapResult` is called.\n */\n from = 0, \n /**\n The end position in the `maps` array.\n */\n to = maps ? maps.length : 0) {\n this.mirror = mirror;\n this.from = from;\n this.to = to;\n this._maps = maps || [];\n this.ownData = !(maps || mirror);\n }\n /**\n The step maps in this mapping.\n */\n get maps() { return this._maps; }\n /**\n Create a mapping that maps only through a part of this one.\n */\n slice(from = 0, to = this.maps.length) {\n return new Mapping(this._maps, this.mirror, from, to);\n }\n /**\n Add a step map to the end of this mapping. If `mirrors` is\n given, it should be the index of the step map that is the mirror\n image of this one.\n */\n appendMap(map, mirrors) {\n if (!this.ownData) {\n this._maps = this._maps.slice();\n this.mirror = this.mirror && this.mirror.slice();\n this.ownData = true;\n }\n this.to = this._maps.push(map);\n if (mirrors != null)\n this.setMirror(this._maps.length - 1, mirrors);\n }\n /**\n Add all the step maps in a given mapping to this one (preserving\n mirroring information).\n */\n appendMapping(mapping) {\n for (let i = 0, startSize = this._maps.length; i < mapping._maps.length; i++) {\n let mirr = mapping.getMirror(i);\n this.appendMap(mapping._maps[i], mirr != null && mirr < i ? startSize + mirr : undefined);\n }\n }\n /**\n Finds the offset of the step map that mirrors the map at the\n given offset, in this mapping (as per the second argument to\n `appendMap`).\n */\n getMirror(n) {\n if (this.mirror)\n for (let i = 0; i < this.mirror.length; i++)\n if (this.mirror[i] == n)\n return this.mirror[i + (i % 2 ? -1 : 1)];\n }\n /**\n @internal\n */\n setMirror(n, m) {\n if (!this.mirror)\n this.mirror = [];\n this.mirror.push(n, m);\n }\n /**\n Append the inverse of the given mapping to this one.\n */\n appendMappingInverted(mapping) {\n for (let i = mapping.maps.length - 1, totalSize = this._maps.length + mapping._maps.length; i >= 0; i--) {\n let mirr = mapping.getMirror(i);\n this.appendMap(mapping._maps[i].invert(), mirr != null && mirr > i ? totalSize - mirr - 1 : undefined);\n }\n }\n /**\n Create an inverted version of this mapping.\n */\n invert() {\n let inverse = new Mapping;\n inverse.appendMappingInverted(this);\n return inverse;\n }\n /**\n Map a position through this mapping.\n */\n map(pos, assoc = 1) {\n if (this.mirror)\n return this._map(pos, assoc, true);\n for (let i = this.from; i < this.to; i++)\n pos = this._maps[i].map(pos, assoc);\n return pos;\n }\n /**\n Map a position through this mapping, returning a mapping\n result.\n */\n mapResult(pos, assoc = 1) { return this._map(pos, assoc, false); }\n /**\n @internal\n */\n _map(pos, assoc, simple) {\n let delInfo = 0;\n for (let i = this.from; i < this.to; i++) {\n let map = this._maps[i], result = map.mapResult(pos, assoc);\n if (result.recover != null) {\n let corr = this.getMirror(i);\n if (corr != null && corr > i && corr < this.to) {\n i = corr;\n pos = this._maps[corr].recover(result.recover);\n continue;\n }\n }\n delInfo |= result.delInfo;\n pos = result.pos;\n }\n return simple ? pos : new MapResult(pos, delInfo, null);\n }\n}\n\nconst stepsByID = Object.create(null);\n/**\nA step object represents an atomic change. It generally applies\nonly to the document it was created for, since the positions\nstored in it will only make sense for that document.\n\nNew steps are defined by creating classes that extend `Step`,\noverriding the `apply`, `invert`, `map`, `getMap` and `fromJSON`\nmethods, and registering your class with a unique\nJSON-serialization identifier using\n[`Step.jsonID`](https://prosemirror.net/docs/ref/#transform.Step^jsonID).\n*/\nclass Step {\n /**\n Get the step map that represents the changes made by this step,\n and which can be used to transform between positions in the old\n and the new document.\n */\n getMap() { return StepMap.empty; }\n /**\n Try to merge this step with another one, to be applied directly\n after it. Returns the merged step when possible, null if the\n steps can't be merged.\n */\n merge(other) { return null; }\n /**\n Deserialize a step from its JSON representation. Will call\n through to the step class' own implementation of this method.\n */\n static fromJSON(schema, json) {\n if (!json || !json.stepType)\n throw new RangeError(\"Invalid input for Step.fromJSON\");\n let type = stepsByID[json.stepType];\n if (!type)\n throw new RangeError(`No step type ${json.stepType} defined`);\n return type.fromJSON(schema, json);\n }\n /**\n To be able to serialize steps to JSON, each step needs a string\n ID to attach to its JSON representation. Use this method to\n register an ID for your step classes. Try to pick something\n that's unlikely to clash with steps from other modules.\n */\n static jsonID(id, stepClass) {\n if (id in stepsByID)\n throw new RangeError(\"Duplicate use of step JSON ID \" + id);\n stepsByID[id] = stepClass;\n stepClass.prototype.jsonID = id;\n return stepClass;\n }\n}\n/**\nThe result of [applying](https://prosemirror.net/docs/ref/#transform.Step.apply) a step. Contains either a\nnew document or a failure value.\n*/\nclass StepResult {\n /**\n @internal\n */\n constructor(\n /**\n The transformed document, if successful.\n */\n doc, \n /**\n The failure message, if unsuccessful.\n */\n failed) {\n this.doc = doc;\n this.failed = failed;\n }\n /**\n Create a successful step result.\n */\n static ok(doc) { return new StepResult(doc, null); }\n /**\n Create a failed step result.\n */\n static fail(message) { return new StepResult(null, message); }\n /**\n Call [`Node.replace`](https://prosemirror.net/docs/ref/#model.Node.replace) with the given\n arguments. Create a successful result if it succeeds, and a\n failed one if it throws a `ReplaceError`.\n */\n static fromReplace(doc, from, to, slice) {\n try {\n return StepResult.ok(doc.replace(from, to, slice));\n }\n catch (e) {\n if (e instanceof ReplaceError)\n return StepResult.fail(e.message);\n throw e;\n }\n }\n}\n\nfunction mapFragment(fragment, f, parent) {\n let mapped = [];\n for (let i = 0; i < fragment.childCount; i++) {\n let child = fragment.child(i);\n if (child.content.size)\n child = child.copy(mapFragment(child.content, f, child));\n if (child.isInline)\n child = f(child, parent, i);\n mapped.push(child);\n }\n return Fragment.fromArray(mapped);\n}\n/**\nAdd a mark to all inline content between two positions.\n*/\nclass AddMarkStep extends Step {\n /**\n Create a mark step.\n */\n constructor(\n /**\n The start of the marked range.\n */\n from, \n /**\n The end of the marked range.\n */\n to, \n /**\n The mark to add.\n */\n mark) {\n super();\n this.from = from;\n this.to = to;\n this.mark = mark;\n }\n apply(doc) {\n let oldSlice = doc.slice(this.from, this.to), $from = doc.resolve(this.from);\n let parent = $from.node($from.sharedDepth(this.to));\n let slice = new Slice(mapFragment(oldSlice.content, (node, parent) => {\n if (!node.isAtom || !parent.type.allowsMarkType(this.mark.type))\n return node;\n return node.mark(this.mark.addToSet(node.marks));\n }, parent), oldSlice.openStart, oldSlice.openEnd);\n return StepResult.fromReplace(doc, this.from, this.to, slice);\n }\n invert() {\n return new RemoveMarkStep(this.from, this.to, this.mark);\n }\n map(mapping) {\n let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n if (from.deleted && to.deleted || from.pos >= to.pos)\n return null;\n return new AddMarkStep(from.pos, to.pos, this.mark);\n }\n merge(other) {\n if (other instanceof AddMarkStep &&\n other.mark.eq(this.mark) &&\n this.from <= other.to && this.to >= other.from)\n return new AddMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark);\n return null;\n }\n toJSON() {\n return { stepType: \"addMark\", mark: this.mark.toJSON(),\n from: this.from, to: this.to };\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\")\n throw new RangeError(\"Invalid input for AddMarkStep.fromJSON\");\n return new AddMarkStep(json.from, json.to, schema.markFromJSON(json.mark));\n }\n}\nStep.jsonID(\"addMark\", AddMarkStep);\n/**\nRemove a mark from all inline content between two positions.\n*/\nclass RemoveMarkStep extends Step {\n /**\n Create a mark-removing step.\n */\n constructor(\n /**\n The start of the unmarked range.\n */\n from, \n /**\n The end of the unmarked range.\n */\n to, \n /**\n The mark to remove.\n */\n mark) {\n super();\n this.from = from;\n this.to = to;\n this.mark = mark;\n }\n apply(doc) {\n let oldSlice = doc.slice(this.from, this.to);\n let slice = new Slice(mapFragment(oldSlice.content, node => {\n return node.mark(this.mark.removeFromSet(node.marks));\n }, doc), oldSlice.openStart, oldSlice.openEnd);\n return StepResult.fromReplace(doc, this.from, this.to, slice);\n }\n invert() {\n return new AddMarkStep(this.from, this.to, this.mark);\n }\n map(mapping) {\n let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n if (from.deleted && to.deleted || from.pos >= to.pos)\n return null;\n return new RemoveMarkStep(from.pos, to.pos, this.mark);\n }\n merge(other) {\n if (other instanceof RemoveMarkStep &&\n other.mark.eq(this.mark) &&\n this.from <= other.to && this.to >= other.from)\n return new RemoveMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark);\n return null;\n }\n toJSON() {\n return { stepType: \"removeMark\", mark: this.mark.toJSON(),\n from: this.from, to: this.to };\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\")\n throw new RangeError(\"Invalid input for RemoveMarkStep.fromJSON\");\n return new RemoveMarkStep(json.from, json.to, schema.markFromJSON(json.mark));\n }\n}\nStep.jsonID(\"removeMark\", RemoveMarkStep);\n/**\nAdd a mark to a specific node.\n*/\nclass AddNodeMarkStep extends Step {\n /**\n Create a node mark step.\n */\n constructor(\n /**\n The position of the target node.\n */\n pos, \n /**\n The mark to add.\n */\n mark) {\n super();\n this.pos = pos;\n this.mark = mark;\n }\n apply(doc) {\n let node = doc.nodeAt(this.pos);\n if (!node)\n return StepResult.fail(\"No node at mark step's position\");\n let updated = node.type.create(node.attrs, null, this.mark.addToSet(node.marks));\n return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n }\n invert(doc) {\n let node = doc.nodeAt(this.pos);\n if (node) {\n let newSet = this.mark.addToSet(node.marks);\n if (newSet.length == node.marks.length) {\n for (let i = 0; i < node.marks.length; i++)\n if (!node.marks[i].isInSet(newSet))\n return new AddNodeMarkStep(this.pos, node.marks[i]);\n return new AddNodeMarkStep(this.pos, this.mark);\n }\n }\n return new RemoveNodeMarkStep(this.pos, this.mark);\n }\n map(mapping) {\n let pos = mapping.mapResult(this.pos, 1);\n return pos.deletedAfter ? null : new AddNodeMarkStep(pos.pos, this.mark);\n }\n toJSON() {\n return { stepType: \"addNodeMark\", pos: this.pos, mark: this.mark.toJSON() };\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.pos != \"number\")\n throw new RangeError(\"Invalid input for AddNodeMarkStep.fromJSON\");\n return new AddNodeMarkStep(json.pos, schema.markFromJSON(json.mark));\n }\n}\nStep.jsonID(\"addNodeMark\", AddNodeMarkStep);\n/**\nRemove a mark from a specific node.\n*/\nclass RemoveNodeMarkStep extends Step {\n /**\n Create a mark-removing step.\n */\n constructor(\n /**\n The position of the target node.\n */\n pos, \n /**\n The mark to remove.\n */\n mark) {\n super();\n this.pos = pos;\n this.mark = mark;\n }\n apply(doc) {\n let node = doc.nodeAt(this.pos);\n if (!node)\n return StepResult.fail(\"No node at mark step's position\");\n let updated = node.type.create(node.attrs, null, this.mark.removeFromSet(node.marks));\n return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n }\n invert(doc) {\n let node = doc.nodeAt(this.pos);\n if (!node || !this.mark.isInSet(node.marks))\n return this;\n return new AddNodeMarkStep(this.pos, this.mark);\n }\n map(mapping) {\n let pos = mapping.mapResult(this.pos, 1);\n return pos.deletedAfter ? null : new RemoveNodeMarkStep(pos.pos, this.mark);\n }\n toJSON() {\n return { stepType: \"removeNodeMark\", pos: this.pos, mark: this.mark.toJSON() };\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.pos != \"number\")\n throw new RangeError(\"Invalid input for RemoveNodeMarkStep.fromJSON\");\n return new RemoveNodeMarkStep(json.pos, schema.markFromJSON(json.mark));\n }\n}\nStep.jsonID(\"removeNodeMark\", RemoveNodeMarkStep);\n\n/**\nReplace a part of the document with a slice of new content.\n*/\nclass ReplaceStep extends Step {\n /**\n The given `slice` should fit the 'gap' between `from` and\n `to`—the depths must line up, and the surrounding nodes must be\n able to be joined with the open sides of the slice. When\n `structure` is true, the step will fail if the content between\n from and to is not just a sequence of closing and then opening\n tokens (this is to guard against rebased replace steps\n overwriting something they weren't supposed to).\n */\n constructor(\n /**\n The start position of the replaced range.\n */\n from, \n /**\n The end position of the replaced range.\n */\n to, \n /**\n The slice to insert.\n */\n slice, \n /**\n @internal\n */\n structure = false) {\n super();\n this.from = from;\n this.to = to;\n this.slice = slice;\n this.structure = structure;\n }\n apply(doc) {\n if (this.structure && contentBetween(doc, this.from, this.to))\n return StepResult.fail(\"Structure replace would overwrite content\");\n return StepResult.fromReplace(doc, this.from, this.to, this.slice);\n }\n getMap() {\n return new StepMap([this.from, this.to - this.from, this.slice.size]);\n }\n invert(doc) {\n return new ReplaceStep(this.from, this.from + this.slice.size, doc.slice(this.from, this.to));\n }\n map(mapping) {\n let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n if (from.deletedAcross && to.deletedAcross)\n return null;\n return new ReplaceStep(from.pos, Math.max(from.pos, to.pos), this.slice, this.structure);\n }\n merge(other) {\n if (!(other instanceof ReplaceStep) || other.structure || this.structure)\n return null;\n if (this.from + this.slice.size == other.from && !this.slice.openEnd && !other.slice.openStart) {\n let slice = this.slice.size + other.slice.size == 0 ? Slice.empty\n : new Slice(this.slice.content.append(other.slice.content), this.slice.openStart, other.slice.openEnd);\n return new ReplaceStep(this.from, this.to + (other.to - other.from), slice, this.structure);\n }\n else if (other.to == this.from && !this.slice.openStart && !other.slice.openEnd) {\n let slice = this.slice.size + other.slice.size == 0 ? Slice.empty\n : new Slice(other.slice.content.append(this.slice.content), other.slice.openStart, this.slice.openEnd);\n return new ReplaceStep(other.from, this.to, slice, this.structure);\n }\n else {\n return null;\n }\n }\n toJSON() {\n let json = { stepType: \"replace\", from: this.from, to: this.to };\n if (this.slice.size)\n json.slice = this.slice.toJSON();\n if (this.structure)\n json.structure = true;\n return json;\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\")\n throw new RangeError(\"Invalid input for ReplaceStep.fromJSON\");\n return new ReplaceStep(json.from, json.to, Slice.fromJSON(schema, json.slice), !!json.structure);\n }\n}\nStep.jsonID(\"replace\", ReplaceStep);\n/**\nReplace a part of the document with a slice of content, but\npreserve a range of the replaced content by moving it into the\nslice.\n*/\nclass ReplaceAroundStep extends Step {\n /**\n Create a replace-around step with the given range and gap.\n `insert` should be the point in the slice into which the content\n of the gap should be moved. `structure` has the same meaning as\n it has in the [`ReplaceStep`](https://prosemirror.net/docs/ref/#transform.ReplaceStep) class.\n */\n constructor(\n /**\n The start position of the replaced range.\n */\n from, \n /**\n The end position of the replaced range.\n */\n to, \n /**\n The start of preserved range.\n */\n gapFrom, \n /**\n The end of preserved range.\n */\n gapTo, \n /**\n The slice to insert.\n */\n slice, \n /**\n The position in the slice where the preserved range should be\n inserted.\n */\n insert, \n /**\n @internal\n */\n structure = false) {\n super();\n this.from = from;\n this.to = to;\n this.gapFrom = gapFrom;\n this.gapTo = gapTo;\n this.slice = slice;\n this.insert = insert;\n this.structure = structure;\n }\n apply(doc) {\n if (this.structure && (contentBetween(doc, this.from, this.gapFrom) ||\n contentBetween(doc, this.gapTo, this.to)))\n return StepResult.fail(\"Structure gap-replace would overwrite content\");\n let gap = doc.slice(this.gapFrom, this.gapTo);\n if (gap.openStart || gap.openEnd)\n return StepResult.fail(\"Gap is not a flat range\");\n let inserted = this.slice.insertAt(this.insert, gap.content);\n if (!inserted)\n return StepResult.fail(\"Content does not fit in gap\");\n return StepResult.fromReplace(doc, this.from, this.to, inserted);\n }\n getMap() {\n return new StepMap([this.from, this.gapFrom - this.from, this.insert,\n this.gapTo, this.to - this.gapTo, this.slice.size - this.insert]);\n }\n invert(doc) {\n let gap = this.gapTo - this.gapFrom;\n return new ReplaceAroundStep(this.from, this.from + this.slice.size + gap, this.from + this.insert, this.from + this.insert + gap, doc.slice(this.from, this.to).removeBetween(this.gapFrom - this.from, this.gapTo - this.from), this.gapFrom - this.from, this.structure);\n }\n map(mapping) {\n let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n let gapFrom = this.from == this.gapFrom ? from.pos : mapping.map(this.gapFrom, -1);\n let gapTo = this.to == this.gapTo ? to.pos : mapping.map(this.gapTo, 1);\n if ((from.deletedAcross && to.deletedAcross) || gapFrom < from.pos || gapTo > to.pos)\n return null;\n return new ReplaceAroundStep(from.pos, to.pos, gapFrom, gapTo, this.slice, this.insert, this.structure);\n }\n toJSON() {\n let json = { stepType: \"replaceAround\", from: this.from, to: this.to,\n gapFrom: this.gapFrom, gapTo: this.gapTo, insert: this.insert };\n if (this.slice.size)\n json.slice = this.slice.toJSON();\n if (this.structure)\n json.structure = true;\n return json;\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\" ||\n typeof json.gapFrom != \"number\" || typeof json.gapTo != \"number\" || typeof json.insert != \"number\")\n throw new RangeError(\"Invalid input for ReplaceAroundStep.fromJSON\");\n return new ReplaceAroundStep(json.from, json.to, json.gapFrom, json.gapTo, Slice.fromJSON(schema, json.slice), json.insert, !!json.structure);\n }\n}\nStep.jsonID(\"replaceAround\", ReplaceAroundStep);\nfunction contentBetween(doc, from, to) {\n let $from = doc.resolve(from), dist = to - from, depth = $from.depth;\n while (dist > 0 && depth > 0 && $from.indexAfter(depth) == $from.node(depth).childCount) {\n depth--;\n dist--;\n }\n if (dist > 0) {\n let next = $from.node(depth).maybeChild($from.indexAfter(depth));\n while (dist > 0) {\n if (!next || next.isLeaf)\n return true;\n next = next.firstChild;\n dist--;\n }\n }\n return false;\n}\n\nfunction addMark(tr, from, to, mark) {\n let removed = [], added = [];\n let removing, adding;\n tr.doc.nodesBetween(from, to, (node, pos, parent) => {\n if (!node.isInline)\n return;\n let marks = node.marks;\n if (!mark.isInSet(marks) && parent.type.allowsMarkType(mark.type)) {\n let start = Math.max(pos, from), end = Math.min(pos + node.nodeSize, to);\n let newSet = mark.addToSet(marks);\n for (let i = 0; i < marks.length; i++) {\n if (!marks[i].isInSet(newSet)) {\n if (removing && removing.to == start && removing.mark.eq(marks[i]))\n removing.to = end;\n else\n removed.push(removing = new RemoveMarkStep(start, end, marks[i]));\n }\n }\n if (adding && adding.to == start)\n adding.to = end;\n else\n added.push(adding = new AddMarkStep(start, end, mark));\n }\n });\n removed.forEach(s => tr.step(s));\n added.forEach(s => tr.step(s));\n}\nfunction removeMark(tr, from, to, mark) {\n let matched = [], step = 0;\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isInline)\n return;\n step++;\n let toRemove = null;\n if (mark instanceof MarkType) {\n let set = node.marks, found;\n while (found = mark.isInSet(set)) {\n (toRemove || (toRemove = [])).push(found);\n set = found.removeFromSet(set);\n }\n }\n else if (mark) {\n if (mark.isInSet(node.marks))\n toRemove = [mark];\n }\n else {\n toRemove = node.marks;\n }\n if (toRemove && toRemove.length) {\n let end = Math.min(pos + node.nodeSize, to);\n for (let i = 0; i < toRemove.length; i++) {\n let style = toRemove[i], found;\n for (let j = 0; j < matched.length; j++) {\n let m = matched[j];\n if (m.step == step - 1 && style.eq(matched[j].style))\n found = m;\n }\n if (found) {\n found.to = end;\n found.step = step;\n }\n else {\n matched.push({ style, from: Math.max(pos, from), to: end, step });\n }\n }\n }\n });\n matched.forEach(m => tr.step(new RemoveMarkStep(m.from, m.to, m.style)));\n}\nfunction clearIncompatible(tr, pos, parentType, match = parentType.contentMatch, clearNewlines = true) {\n let node = tr.doc.nodeAt(pos);\n let replSteps = [], cur = pos + 1;\n for (let i = 0; i < node.childCount; i++) {\n let child = node.child(i), end = cur + child.nodeSize;\n let allowed = match.matchType(child.type);\n if (!allowed) {\n replSteps.push(new ReplaceStep(cur, end, Slice.empty));\n }\n else {\n match = allowed;\n for (let j = 0; j < child.marks.length; j++)\n if (!parentType.allowsMarkType(child.marks[j].type))\n tr.step(new RemoveMarkStep(cur, end, child.marks[j]));\n if (clearNewlines && child.isText && parentType.whitespace != \"pre\") {\n let m, newline = /\\r?\\n|\\r/g, slice;\n while (m = newline.exec(child.text)) {\n if (!slice)\n slice = new Slice(Fragment.from(parentType.schema.text(\" \", parentType.allowedMarks(child.marks))), 0, 0);\n replSteps.push(new ReplaceStep(cur + m.index, cur + m.index + m[0].length, slice));\n }\n }\n }\n cur = end;\n }\n if (!match.validEnd) {\n let fill = match.fillBefore(Fragment.empty, true);\n tr.replace(cur, cur, new Slice(fill, 0, 0));\n }\n for (let i = replSteps.length - 1; i >= 0; i--)\n tr.step(replSteps[i]);\n}\n\nfunction canCut(node, start, end) {\n return (start == 0 || node.canReplace(start, node.childCount)) &&\n (end == node.childCount || node.canReplace(0, end));\n}\n/**\nTry to find a target depth to which the content in the given range\ncan be lifted. Will not go across\n[isolating](https://prosemirror.net/docs/ref/#model.NodeSpec.isolating) parent nodes.\n*/\nfunction liftTarget(range) {\n let parent = range.parent;\n let content = parent.content.cutByIndex(range.startIndex, range.endIndex);\n for (let depth = range.depth, contentBefore = 0, contentAfter = 0;; --depth) {\n let node = range.$from.node(depth);\n let index = range.$from.index(depth) + contentBefore, endIndex = range.$to.indexAfter(depth) - contentAfter;\n if (depth < range.depth && node.canReplace(index, endIndex, content))\n return depth;\n if (depth == 0 || node.type.spec.isolating || !canCut(node, index, endIndex))\n break;\n if (index)\n contentBefore = 1;\n if (endIndex < node.childCount)\n contentAfter = 1;\n }\n return null;\n}\nfunction lift(tr, range, target) {\n let { $from, $to, depth } = range;\n let gapStart = $from.before(depth + 1), gapEnd = $to.after(depth + 1);\n let start = gapStart, end = gapEnd;\n let before = Fragment.empty, openStart = 0;\n for (let d = depth, splitting = false; d > target; d--)\n if (splitting || $from.index(d) > 0) {\n splitting = true;\n before = Fragment.from($from.node(d).copy(before));\n openStart++;\n }\n else {\n start--;\n }\n let after = Fragment.empty, openEnd = 0;\n for (let d = depth, splitting = false; d > target; d--)\n if (splitting || $to.after(d + 1) < $to.end(d)) {\n splitting = true;\n after = Fragment.from($to.node(d).copy(after));\n openEnd++;\n }\n else {\n end++;\n }\n tr.step(new ReplaceAroundStep(start, end, gapStart, gapEnd, new Slice(before.append(after), openStart, openEnd), before.size - openStart, true));\n}\n/**\nTry to find a valid way to wrap the content in the given range in a\nnode of the given type. May introduce extra nodes around and inside\nthe wrapper node, if necessary. Returns null if no valid wrapping\ncould be found. When `innerRange` is given, that range's content is\nused as the content to fit into the wrapping, instead of the\ncontent of `range`.\n*/\nfunction findWrapping(range, nodeType, attrs = null, innerRange = range) {\n let around = findWrappingOutside(range, nodeType);\n let inner = around && findWrappingInside(innerRange, nodeType);\n if (!inner)\n return null;\n return around.map(withAttrs)\n .concat({ type: nodeType, attrs }).concat(inner.map(withAttrs));\n}\nfunction withAttrs(type) { return { type, attrs: null }; }\nfunction findWrappingOutside(range, type) {\n let { parent, startIndex, endIndex } = range;\n let around = parent.contentMatchAt(startIndex).findWrapping(type);\n if (!around)\n return null;\n let outer = around.length ? around[0] : type;\n return parent.canReplaceWith(startIndex, endIndex, outer) ? around : null;\n}\nfunction findWrappingInside(range, type) {\n let { parent, startIndex, endIndex } = range;\n let inner = parent.child(startIndex);\n let inside = type.contentMatch.findWrapping(inner.type);\n if (!inside)\n return null;\n let lastType = inside.length ? inside[inside.length - 1] : type;\n let innerMatch = lastType.contentMatch;\n for (let i = startIndex; innerMatch && i < endIndex; i++)\n innerMatch = innerMatch.matchType(parent.child(i).type);\n if (!innerMatch || !innerMatch.validEnd)\n return null;\n return inside;\n}\nfunction wrap(tr, range, wrappers) {\n let content = Fragment.empty;\n for (let i = wrappers.length - 1; i >= 0; i--) {\n if (content.size) {\n let match = wrappers[i].type.contentMatch.matchFragment(content);\n if (!match || !match.validEnd)\n throw new RangeError(\"Wrapper type given to Transform.wrap does not form valid content of its parent wrapper\");\n }\n content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content));\n }\n let start = range.start, end = range.end;\n tr.step(new ReplaceAroundStep(start, end, start, end, new Slice(content, 0, 0), wrappers.length, true));\n}\nfunction setBlockType(tr, from, to, type, attrs) {\n if (!type.isTextblock)\n throw new RangeError(\"Type given to setBlockType should be a textblock\");\n let mapFrom = tr.steps.length;\n tr.doc.nodesBetween(from, to, (node, pos) => {\n let attrsHere = typeof attrs == \"function\" ? attrs(node) : attrs;\n if (node.isTextblock && !node.hasMarkup(type, attrsHere) &&\n canChangeType(tr.doc, tr.mapping.slice(mapFrom).map(pos), type)) {\n let convertNewlines = null;\n if (type.schema.linebreakReplacement) {\n let pre = type.whitespace == \"pre\", supportLinebreak = !!type.contentMatch.matchType(type.schema.linebreakReplacement);\n if (pre && !supportLinebreak)\n convertNewlines = false;\n else if (!pre && supportLinebreak)\n convertNewlines = true;\n }\n // Ensure all markup that isn't allowed in the new node type is cleared\n if (convertNewlines === false)\n replaceLinebreaks(tr, node, pos, mapFrom);\n clearIncompatible(tr, tr.mapping.slice(mapFrom).map(pos, 1), type, undefined, convertNewlines === null);\n let mapping = tr.mapping.slice(mapFrom);\n let startM = mapping.map(pos, 1), endM = mapping.map(pos + node.nodeSize, 1);\n tr.step(new ReplaceAroundStep(startM, endM, startM + 1, endM - 1, new Slice(Fragment.from(type.create(attrsHere, null, node.marks)), 0, 0), 1, true));\n if (convertNewlines === true)\n replaceNewlines(tr, node, pos, mapFrom);\n return false;\n }\n });\n}\nfunction replaceNewlines(tr, node, pos, mapFrom) {\n node.forEach((child, offset) => {\n if (child.isText) {\n let m, newline = /\\r?\\n|\\r/g;\n while (m = newline.exec(child.text)) {\n let start = tr.mapping.slice(mapFrom).map(pos + 1 + offset + m.index);\n tr.replaceWith(start, start + 1, node.type.schema.linebreakReplacement.create());\n }\n }\n });\n}\nfunction replaceLinebreaks(tr, node, pos, mapFrom) {\n node.forEach((child, offset) => {\n if (child.type == child.type.schema.linebreakReplacement) {\n let start = tr.mapping.slice(mapFrom).map(pos + 1 + offset);\n tr.replaceWith(start, start + 1, node.type.schema.text(\"\\n\"));\n }\n });\n}\nfunction canChangeType(doc, pos, type) {\n let $pos = doc.resolve(pos), index = $pos.index();\n return $pos.parent.canReplaceWith(index, index + 1, type);\n}\n/**\nChange the type, attributes, and/or marks of the node at `pos`.\nWhen `type` isn't given, the existing node type is preserved,\n*/\nfunction setNodeMarkup(tr, pos, type, attrs, marks) {\n let node = tr.doc.nodeAt(pos);\n if (!node)\n throw new RangeError(\"No node at given position\");\n if (!type)\n type = node.type;\n let newNode = type.create(attrs, null, marks || node.marks);\n if (node.isLeaf)\n return tr.replaceWith(pos, pos + node.nodeSize, newNode);\n if (!type.validContent(node.content))\n throw new RangeError(\"Invalid content for node type \" + type.name);\n tr.step(new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1, pos + node.nodeSize - 1, new Slice(Fragment.from(newNode), 0, 0), 1, true));\n}\n/**\nCheck whether splitting at the given position is allowed.\n*/\nfunction canSplit(doc, pos, depth = 1, typesAfter) {\n let $pos = doc.resolve(pos), base = $pos.depth - depth;\n let innerType = (typesAfter && typesAfter[typesAfter.length - 1]) || $pos.parent;\n if (base < 0 || $pos.parent.type.spec.isolating ||\n !$pos.parent.canReplace($pos.index(), $pos.parent.childCount) ||\n !innerType.type.validContent($pos.parent.content.cutByIndex($pos.index(), $pos.parent.childCount)))\n return false;\n for (let d = $pos.depth - 1, i = depth - 2; d > base; d--, i--) {\n let node = $pos.node(d), index = $pos.index(d);\n if (node.type.spec.isolating)\n return false;\n let rest = node.content.cutByIndex(index, node.childCount);\n let overrideChild = typesAfter && typesAfter[i + 1];\n if (overrideChild)\n rest = rest.replaceChild(0, overrideChild.type.create(overrideChild.attrs));\n let after = (typesAfter && typesAfter[i]) || node;\n if (!node.canReplace(index + 1, node.childCount) || !after.type.validContent(rest))\n return false;\n }\n let index = $pos.indexAfter(base);\n let baseType = typesAfter && typesAfter[0];\n return $pos.node(base).canReplaceWith(index, index, baseType ? baseType.type : $pos.node(base + 1).type);\n}\nfunction split(tr, pos, depth = 1, typesAfter) {\n let $pos = tr.doc.resolve(pos), before = Fragment.empty, after = Fragment.empty;\n for (let d = $pos.depth, e = $pos.depth - depth, i = depth - 1; d > e; d--, i--) {\n before = Fragment.from($pos.node(d).copy(before));\n let typeAfter = typesAfter && typesAfter[i];\n after = Fragment.from(typeAfter ? typeAfter.type.create(typeAfter.attrs, after) : $pos.node(d).copy(after));\n }\n tr.step(new ReplaceStep(pos, pos, new Slice(before.append(after), depth, depth), true));\n}\n/**\nTest whether the blocks before and after a given position can be\njoined.\n*/\nfunction canJoin(doc, pos) {\n let $pos = doc.resolve(pos), index = $pos.index();\n return joinable($pos.nodeBefore, $pos.nodeAfter) &&\n $pos.parent.canReplace(index, index + 1);\n}\nfunction canAppendWithSubstitutedLinebreaks(a, b) {\n if (!b.content.size)\n a.type.compatibleContent(b.type);\n let match = a.contentMatchAt(a.childCount);\n let { linebreakReplacement } = a.type.schema;\n for (let i = 0; i < b.childCount; i++) {\n let child = b.child(i);\n let type = child.type == linebreakReplacement ? a.type.schema.nodes.text : child.type;\n match = match.matchType(type);\n if (!match)\n return false;\n if (!a.type.allowsMarks(child.marks))\n return false;\n }\n return match.validEnd;\n}\nfunction joinable(a, b) {\n return !!(a && b && !a.isLeaf && canAppendWithSubstitutedLinebreaks(a, b));\n}\n/**\nFind an ancestor of the given position that can be joined to the\nblock before (or after if `dir` is positive). Returns the joinable\npoint, if any.\n*/\nfunction joinPoint(doc, pos, dir = -1) {\n let $pos = doc.resolve(pos);\n for (let d = $pos.depth;; d--) {\n let before, after, index = $pos.index(d);\n if (d == $pos.depth) {\n before = $pos.nodeBefore;\n after = $pos.nodeAfter;\n }\n else if (dir > 0) {\n before = $pos.node(d + 1);\n index++;\n after = $pos.node(d).maybeChild(index);\n }\n else {\n before = $pos.node(d).maybeChild(index - 1);\n after = $pos.node(d + 1);\n }\n if (before && !before.isTextblock && joinable(before, after) &&\n $pos.node(d).canReplace(index, index + 1))\n return pos;\n if (d == 0)\n break;\n pos = dir < 0 ? $pos.before(d) : $pos.after(d);\n }\n}\nfunction join(tr, pos, depth) {\n let convertNewlines = null;\n let { linebreakReplacement } = tr.doc.type.schema;\n let $before = tr.doc.resolve(pos - depth), beforeType = $before.node().type;\n if (linebreakReplacement && beforeType.inlineContent) {\n let pre = beforeType.whitespace == \"pre\";\n let supportLinebreak = !!beforeType.contentMatch.matchType(linebreakReplacement);\n if (pre && !supportLinebreak)\n convertNewlines = false;\n else if (!pre && supportLinebreak)\n convertNewlines = true;\n }\n let mapFrom = tr.steps.length;\n if (convertNewlines === false) {\n let $after = tr.doc.resolve(pos + depth);\n replaceLinebreaks(tr, $after.node(), $after.before(), mapFrom);\n }\n if (beforeType.inlineContent)\n clearIncompatible(tr, pos + depth - 1, beforeType, $before.node().contentMatchAt($before.index()), convertNewlines == null);\n let mapping = tr.mapping.slice(mapFrom), start = mapping.map(pos - depth);\n tr.step(new ReplaceStep(start, mapping.map(pos + depth, -1), Slice.empty, true));\n if (convertNewlines === true) {\n let $full = tr.doc.resolve(start);\n replaceNewlines(tr, $full.node(), $full.before(), tr.steps.length);\n }\n return tr;\n}\n/**\nTry to find a point where a node of the given type can be inserted\nnear `pos`, by searching up the node hierarchy when `pos` itself\nisn't a valid place but is at the start or end of a node. Return\nnull if no position was found.\n*/\nfunction insertPoint(doc, pos, nodeType) {\n let $pos = doc.resolve(pos);\n if ($pos.parent.canReplaceWith($pos.index(), $pos.index(), nodeType))\n return pos;\n if ($pos.parentOffset == 0)\n for (let d = $pos.depth - 1; d >= 0; d--) {\n let index = $pos.index(d);\n if ($pos.node(d).canReplaceWith(index, index, nodeType))\n return $pos.before(d + 1);\n if (index > 0)\n return null;\n }\n if ($pos.parentOffset == $pos.parent.content.size)\n for (let d = $pos.depth - 1; d >= 0; d--) {\n let index = $pos.indexAfter(d);\n if ($pos.node(d).canReplaceWith(index, index, nodeType))\n return $pos.after(d + 1);\n if (index < $pos.node(d).childCount)\n return null;\n }\n return null;\n}\n/**\nFinds a position at or around the given position where the given\nslice can be inserted. Will look at parent nodes' nearest boundary\nand try there, even if the original position wasn't directly at the\nstart or end of that node. Returns null when no position was found.\n*/\nfunction dropPoint(doc, pos, slice) {\n let $pos = doc.resolve(pos);\n if (!slice.content.size)\n return pos;\n let content = slice.content;\n for (let i = 0; i < slice.openStart; i++)\n content = content.firstChild.content;\n for (let pass = 1; pass <= (slice.openStart == 0 && slice.size ? 2 : 1); pass++) {\n for (let d = $pos.depth; d >= 0; d--) {\n let bias = d == $pos.depth ? 0 : $pos.pos <= ($pos.start(d + 1) + $pos.end(d + 1)) / 2 ? -1 : 1;\n let insertPos = $pos.index(d) + (bias > 0 ? 1 : 0);\n let parent = $pos.node(d), fits = false;\n if (pass == 1) {\n fits = parent.canReplace(insertPos, insertPos, content);\n }\n else {\n let wrapping = parent.contentMatchAt(insertPos).findWrapping(content.firstChild.type);\n fits = wrapping && parent.canReplaceWith(insertPos, insertPos, wrapping[0]);\n }\n if (fits)\n return bias == 0 ? $pos.pos : bias < 0 ? $pos.before(d + 1) : $pos.after(d + 1);\n }\n }\n return null;\n}\n\n/**\n‘Fit’ a slice into a given position in the document, producing a\n[step](https://prosemirror.net/docs/ref/#transform.Step) that inserts it. Will return null if\nthere's no meaningful way to insert the slice here, or inserting it\nwould be a no-op (an empty slice over an empty range).\n*/\nfunction replaceStep(doc, from, to = from, slice = Slice.empty) {\n if (from == to && !slice.size)\n return null;\n let $from = doc.resolve(from), $to = doc.resolve(to);\n // Optimization -- avoid work if it's obvious that it's not needed.\n if (fitsTrivially($from, $to, slice))\n return new ReplaceStep(from, to, slice);\n return new Fitter($from, $to, slice).fit();\n}\nfunction fitsTrivially($from, $to, slice) {\n return !slice.openStart && !slice.openEnd && $from.start() == $to.start() &&\n $from.parent.canReplace($from.index(), $to.index(), slice.content);\n}\n// Algorithm for 'placing' the elements of a slice into a gap:\n//\n// We consider the content of each node that is open to the left to be\n// independently placeable. I.e. in <p(\"foo\"), p(\"bar\")>, when the\n// paragraph on the left is open, \"foo\" can be placed (somewhere on\n// the left side of the replacement gap) independently from p(\"bar\").\n//\n// This class tracks the state of the placement progress in the\n// following properties:\n//\n// - `frontier` holds a stack of `{type, match}` objects that\n// represent the open side of the replacement. It starts at\n// `$from`, then moves forward as content is placed, and is finally\n// reconciled with `$to`.\n//\n// - `unplaced` is a slice that represents the content that hasn't\n// been placed yet.\n//\n// - `placed` is a fragment of placed content. Its open-start value\n// is implicit in `$from`, and its open-end value in `frontier`.\nclass Fitter {\n constructor($from, $to, unplaced) {\n this.$from = $from;\n this.$to = $to;\n this.unplaced = unplaced;\n this.frontier = [];\n this.placed = Fragment.empty;\n for (let i = 0; i <= $from.depth; i++) {\n let node = $from.node(i);\n this.frontier.push({\n type: node.type,\n match: node.contentMatchAt($from.indexAfter(i))\n });\n }\n for (let i = $from.depth; i > 0; i--)\n this.placed = Fragment.from($from.node(i).copy(this.placed));\n }\n get depth() { return this.frontier.length - 1; }\n fit() {\n // As long as there's unplaced content, try to place some of it.\n // If that fails, either increase the open score of the unplaced\n // slice, or drop nodes from it, and then try again.\n while (this.unplaced.size) {\n let fit = this.findFittable();\n if (fit)\n this.placeNodes(fit);\n else\n this.openMore() || this.dropNode();\n }\n // When there's inline content directly after the frontier _and_\n // directly after `this.$to`, we must generate a `ReplaceAround`\n // step that pulls that content into the node after the frontier.\n // That means the fitting must be done to the end of the textblock\n // node after `this.$to`, not `this.$to` itself.\n let moveInline = this.mustMoveInline(), placedSize = this.placed.size - this.depth - this.$from.depth;\n let $from = this.$from, $to = this.close(moveInline < 0 ? this.$to : $from.doc.resolve(moveInline));\n if (!$to)\n return null;\n // If closing to `$to` succeeded, create a step\n let content = this.placed, openStart = $from.depth, openEnd = $to.depth;\n while (openStart && openEnd && content.childCount == 1) { // Normalize by dropping open parent nodes\n content = content.firstChild.content;\n openStart--;\n openEnd--;\n }\n let slice = new Slice(content, openStart, openEnd);\n if (moveInline > -1)\n return new ReplaceAroundStep($from.pos, moveInline, this.$to.pos, this.$to.end(), slice, placedSize);\n if (slice.size || $from.pos != this.$to.pos) // Don't generate no-op steps\n return new ReplaceStep($from.pos, $to.pos, slice);\n return null;\n }\n // Find a position on the start spine of `this.unplaced` that has\n // content that can be moved somewhere on the frontier. Returns two\n // depths, one for the slice and one for the frontier.\n findFittable() {\n let startDepth = this.unplaced.openStart;\n for (let cur = this.unplaced.content, d = 0, openEnd = this.unplaced.openEnd; d < startDepth; d++) {\n let node = cur.firstChild;\n if (cur.childCount > 1)\n openEnd = 0;\n if (node.type.spec.isolating && openEnd <= d) {\n startDepth = d;\n break;\n }\n cur = node.content;\n }\n // Only try wrapping nodes (pass 2) after finding a place without\n // wrapping failed.\n for (let pass = 1; pass <= 2; pass++) {\n for (let sliceDepth = pass == 1 ? startDepth : this.unplaced.openStart; sliceDepth >= 0; sliceDepth--) {\n let fragment, parent = null;\n if (sliceDepth) {\n parent = contentAt(this.unplaced.content, sliceDepth - 1).firstChild;\n fragment = parent.content;\n }\n else {\n fragment = this.unplaced.content;\n }\n let first = fragment.firstChild;\n for (let frontierDepth = this.depth; frontierDepth >= 0; frontierDepth--) {\n let { type, match } = this.frontier[frontierDepth], wrap, inject = null;\n // In pass 1, if the next node matches, or there is no next\n // node but the parents look compatible, we've found a\n // place.\n if (pass == 1 && (first ? match.matchType(first.type) || (inject = match.fillBefore(Fragment.from(first), false))\n : parent && type.compatibleContent(parent.type)))\n return { sliceDepth, frontierDepth, parent, inject };\n // In pass 2, look for a set of wrapping nodes that make\n // `first` fit here.\n else if (pass == 2 && first && (wrap = match.findWrapping(first.type)))\n return { sliceDepth, frontierDepth, parent, wrap };\n // Don't continue looking further up if the parent node\n // would fit here.\n if (parent && match.matchType(parent.type))\n break;\n }\n }\n }\n }\n openMore() {\n let { content, openStart, openEnd } = this.unplaced;\n let inner = contentAt(content, openStart);\n if (!inner.childCount || inner.firstChild.isLeaf)\n return false;\n this.unplaced = new Slice(content, openStart + 1, Math.max(openEnd, inner.size + openStart >= content.size - openEnd ? openStart + 1 : 0));\n return true;\n }\n dropNode() {\n let { content, openStart, openEnd } = this.unplaced;\n let inner = contentAt(content, openStart);\n if (inner.childCount <= 1 && openStart > 0) {\n let openAtEnd = content.size - openStart <= openStart + inner.size;\n this.unplaced = new Slice(dropFromFragment(content, openStart - 1, 1), openStart - 1, openAtEnd ? openStart - 1 : openEnd);\n }\n else {\n this.unplaced = new Slice(dropFromFragment(content, openStart, 1), openStart, openEnd);\n }\n }\n // Move content from the unplaced slice at `sliceDepth` to the\n // frontier node at `frontierDepth`. Close that frontier node when\n // applicable.\n placeNodes({ sliceDepth, frontierDepth, parent, inject, wrap }) {\n while (this.depth > frontierDepth)\n this.closeFrontierNode();\n if (wrap)\n for (let i = 0; i < wrap.length; i++)\n this.openFrontierNode(wrap[i]);\n let slice = this.unplaced, fragment = parent ? parent.content : slice.content;\n let openStart = slice.openStart - sliceDepth;\n let taken = 0, add = [];\n let { match, type } = this.frontier[frontierDepth];\n if (inject) {\n for (let i = 0; i < inject.childCount; i++)\n add.push(inject.child(i));\n match = match.matchFragment(inject);\n }\n // Computes the amount of (end) open nodes at the end of the\n // fragment. When 0, the parent is open, but no more. When\n // negative, nothing is open.\n let openEndCount = (fragment.size + sliceDepth) - (slice.content.size - slice.openEnd);\n // Scan over the fragment, fitting as many child nodes as\n // possible.\n while (taken < fragment.childCount) {\n let next = fragment.child(taken), matches = match.matchType(next.type);\n if (!matches)\n break;\n taken++;\n if (taken > 1 || openStart == 0 || next.content.size) { // Drop empty open nodes\n match = matches;\n add.push(closeNodeStart(next.mark(type.allowedMarks(next.marks)), taken == 1 ? openStart : 0, taken == fragment.childCount ? openEndCount : -1));\n }\n }\n let toEnd = taken == fragment.childCount;\n if (!toEnd)\n openEndCount = -1;\n this.placed = addToFragment(this.placed, frontierDepth, Fragment.from(add));\n this.frontier[frontierDepth].match = match;\n // If the parent types match, and the entire node was moved, and\n // it's not open, close this frontier node right away.\n if (toEnd && openEndCount < 0 && parent && parent.type == this.frontier[this.depth].type && this.frontier.length > 1)\n this.closeFrontierNode();\n // Add new frontier nodes for any open nodes at the end.\n for (let i = 0, cur = fragment; i < openEndCount; i++) {\n let node = cur.lastChild;\n this.frontier.push({ type: node.type, match: node.contentMatchAt(node.childCount) });\n cur = node.content;\n }\n // Update `this.unplaced`. Drop the entire node from which we\n // placed it we got to its end, otherwise just drop the placed\n // nodes.\n this.unplaced = !toEnd ? new Slice(dropFromFragment(slice.content, sliceDepth, taken), slice.openStart, slice.openEnd)\n : sliceDepth == 0 ? Slice.empty\n : new Slice(dropFromFragment(slice.content, sliceDepth - 1, 1), sliceDepth - 1, openEndCount < 0 ? slice.openEnd : sliceDepth - 1);\n }\n mustMoveInline() {\n if (!this.$to.parent.isTextblock)\n return -1;\n let top = this.frontier[this.depth], level;\n if (!top.type.isTextblock || !contentAfterFits(this.$to, this.$to.depth, top.type, top.match, false) ||\n (this.$to.depth == this.depth && (level = this.findCloseLevel(this.$to)) && level.depth == this.depth))\n return -1;\n let { depth } = this.$to, after = this.$to.after(depth);\n while (depth > 1 && after == this.$to.end(--depth))\n ++after;\n return after;\n }\n findCloseLevel($to) {\n scan: for (let i = Math.min(this.depth, $to.depth); i >= 0; i--) {\n let { match, type } = this.frontier[i];\n let dropInner = i < $to.depth && $to.end(i + 1) == $to.pos + ($to.depth - (i + 1));\n let fit = contentAfterFits($to, i, type, match, dropInner);\n if (!fit)\n continue;\n for (let d = i - 1; d >= 0; d--) {\n let { match, type } = this.frontier[d];\n let matches = contentAfterFits($to, d, type, match, true);\n if (!matches || matches.childCount)\n continue scan;\n }\n return { depth: i, fit, move: dropInner ? $to.doc.resolve($to.after(i + 1)) : $to };\n }\n }\n close($to) {\n let close = this.findCloseLevel($to);\n if (!close)\n return null;\n while (this.depth > close.depth)\n this.closeFrontierNode();\n if (close.fit.childCount)\n this.placed = addToFragment(this.placed, close.depth, close.fit);\n $to = close.move;\n for (let d = close.depth + 1; d <= $to.depth; d++) {\n let node = $to.node(d), add = node.type.contentMatch.fillBefore(node.content, true, $to.index(d));\n this.openFrontierNode(node.type, node.attrs, add);\n }\n return $to;\n }\n openFrontierNode(type, attrs = null, content) {\n let top = this.frontier[this.depth];\n top.match = top.match.matchType(type);\n this.placed = addToFragment(this.placed, this.depth, Fragment.from(type.create(attrs, content)));\n this.frontier.push({ type, match: type.contentMatch });\n }\n closeFrontierNode() {\n let open = this.frontier.pop();\n let add = open.match.fillBefore(Fragment.empty, true);\n if (add.childCount)\n this.placed = addToFragment(this.placed, this.frontier.length, add);\n }\n}\nfunction dropFromFragment(fragment, depth, count) {\n if (depth == 0)\n return fragment.cutByIndex(count, fragment.childCount);\n return fragment.replaceChild(0, fragment.firstChild.copy(dropFromFragment(fragment.firstChild.content, depth - 1, count)));\n}\nfunction addToFragment(fragment, depth, content) {\n if (depth == 0)\n return fragment.append(content);\n return fragment.replaceChild(fragment.childCount - 1, fragment.lastChild.copy(addToFragment(fragment.lastChild.content, depth - 1, content)));\n}\nfunction contentAt(fragment, depth) {\n for (let i = 0; i < depth; i++)\n fragment = fragment.firstChild.content;\n return fragment;\n}\nfunction closeNodeStart(node, openStart, openEnd) {\n if (openStart <= 0)\n return node;\n let frag = node.content;\n if (openStart > 1)\n frag = frag.replaceChild(0, closeNodeStart(frag.firstChild, openStart - 1, frag.childCount == 1 ? openEnd - 1 : 0));\n if (openStart > 0) {\n frag = node.type.contentMatch.fillBefore(frag).append(frag);\n if (openEnd <= 0)\n frag = frag.append(node.type.contentMatch.matchFragment(frag).fillBefore(Fragment.empty, true));\n }\n return node.copy(frag);\n}\nfunction contentAfterFits($to, depth, type, match, open) {\n let node = $to.node(depth), index = open ? $to.indexAfter(depth) : $to.index(depth);\n if (index == node.childCount && !type.compatibleContent(node.type))\n return null;\n let fit = match.fillBefore(node.content, true, index);\n return fit && !invalidMarks(type, node.content, index) ? fit : null;\n}\nfunction invalidMarks(type, fragment, start) {\n for (let i = start; i < fragment.childCount; i++)\n if (!type.allowsMarks(fragment.child(i).marks))\n return true;\n return false;\n}\nfunction definesContent(type) {\n return type.spec.defining || type.spec.definingForContent;\n}\nfunction replaceRange(tr, from, to, slice) {\n if (!slice.size)\n return tr.deleteRange(from, to);\n let $from = tr.doc.resolve(from), $to = tr.doc.resolve(to);\n if (fitsTrivially($from, $to, slice))\n return tr.step(new ReplaceStep(from, to, slice));\n let targetDepths = coveredDepths($from, $to);\n // Can't replace the whole document, so remove 0 if it's present\n if (targetDepths[targetDepths.length - 1] == 0)\n targetDepths.pop();\n // Negative numbers represent not expansion over the whole node at\n // that depth, but replacing from $from.before(-D) to $to.pos.\n let preferredTarget = -($from.depth + 1);\n targetDepths.unshift(preferredTarget);\n // This loop picks a preferred target depth, if one of the covering\n // depths is not outside of a defining node, and adds negative\n // depths for any depth that has $from at its start and does not\n // cross a defining node.\n for (let d = $from.depth, pos = $from.pos - 1; d > 0; d--, pos--) {\n let spec = $from.node(d).type.spec;\n if (spec.defining || spec.definingAsContext || spec.isolating)\n break;\n if (targetDepths.indexOf(d) > -1)\n preferredTarget = d;\n else if ($from.before(d) == pos)\n targetDepths.splice(1, 0, -d);\n }\n // Try to fit each possible depth of the slice into each possible\n // target depth, starting with the preferred depths.\n let preferredTargetIndex = targetDepths.indexOf(preferredTarget);\n let leftNodes = [], preferredDepth = slice.openStart;\n for (let content = slice.content, i = 0;; i++) {\n let node = content.firstChild;\n leftNodes.push(node);\n if (i == slice.openStart)\n break;\n content = node.content;\n }\n // Back up preferredDepth to cover defining textblocks directly\n // above it, possibly skipping a non-defining textblock.\n for (let d = preferredDepth - 1; d >= 0; d--) {\n let leftNode = leftNodes[d], def = definesContent(leftNode.type);\n if (def && !leftNode.sameMarkup($from.node(Math.abs(preferredTarget) - 1)))\n preferredDepth = d;\n else if (def || !leftNode.type.isTextblock)\n break;\n }\n for (let j = slice.openStart; j >= 0; j--) {\n let openDepth = (j + preferredDepth + 1) % (slice.openStart + 1);\n let insert = leftNodes[openDepth];\n if (!insert)\n continue;\n for (let i = 0; i < targetDepths.length; i++) {\n // Loop over possible expansion levels, starting with the\n // preferred one\n let targetDepth = targetDepths[(i + preferredTargetIndex) % targetDepths.length], expand = true;\n if (targetDepth < 0) {\n expand = false;\n targetDepth = -targetDepth;\n }\n let parent = $from.node(targetDepth - 1), index = $from.index(targetDepth - 1);\n if (parent.canReplaceWith(index, index, insert.type, insert.marks))\n return tr.replace($from.before(targetDepth), expand ? $to.after(targetDepth) : to, new Slice(closeFragment(slice.content, 0, slice.openStart, openDepth), openDepth, slice.openEnd));\n }\n }\n let startSteps = tr.steps.length;\n for (let i = targetDepths.length - 1; i >= 0; i--) {\n tr.replace(from, to, slice);\n if (tr.steps.length > startSteps)\n break;\n let depth = targetDepths[i];\n if (depth < 0)\n continue;\n from = $from.before(depth);\n to = $to.after(depth);\n }\n}\nfunction closeFragment(fragment, depth, oldOpen, newOpen, parent) {\n if (depth < oldOpen) {\n let first = fragment.firstChild;\n fragment = fragment.replaceChild(0, first.copy(closeFragment(first.content, depth + 1, oldOpen, newOpen, first)));\n }\n if (depth > newOpen) {\n let match = parent.contentMatchAt(0);\n let start = match.fillBefore(fragment).append(fragment);\n fragment = start.append(match.matchFragment(start).fillBefore(Fragment.empty, true));\n }\n return fragment;\n}\nfunction replaceRangeWith(tr, from, to, node) {\n if (!node.isInline && from == to && tr.doc.resolve(from).parent.content.size) {\n let point = insertPoint(tr.doc, from, node.type);\n if (point != null)\n from = to = point;\n }\n tr.replaceRange(from, to, new Slice(Fragment.from(node), 0, 0));\n}\nfunction deleteRange(tr, from, to) {\n let $from = tr.doc.resolve(from), $to = tr.doc.resolve(to);\n let covered = coveredDepths($from, $to);\n for (let i = 0; i < covered.length; i++) {\n let depth = covered[i], last = i == covered.length - 1;\n if ((last && depth == 0) || $from.node(depth).type.contentMatch.validEnd)\n return tr.delete($from.start(depth), $to.end(depth));\n if (depth > 0 && (last || $from.node(depth - 1).canReplace($from.index(depth - 1), $to.indexAfter(depth - 1))))\n return tr.delete($from.before(depth), $to.after(depth));\n }\n for (let d = 1; d <= $from.depth && d <= $to.depth; d++) {\n if (from - $from.start(d) == $from.depth - d && to > $from.end(d) && $to.end(d) - to != $to.depth - d &&\n $from.start(d - 1) == $to.start(d - 1) && $from.node(d - 1).canReplace($from.index(d - 1), $to.index(d - 1)))\n return tr.delete($from.before(d), to);\n }\n tr.delete(from, to);\n}\n// Returns an array of all depths for which $from - $to spans the\n// whole content of the nodes at that depth.\nfunction coveredDepths($from, $to) {\n let result = [], minDepth = Math.min($from.depth, $to.depth);\n for (let d = minDepth; d >= 0; d--) {\n let start = $from.start(d);\n if (start < $from.pos - ($from.depth - d) ||\n $to.end(d) > $to.pos + ($to.depth - d) ||\n $from.node(d).type.spec.isolating ||\n $to.node(d).type.spec.isolating)\n break;\n if (start == $to.start(d) ||\n (d == $from.depth && d == $to.depth && $from.parent.inlineContent && $to.parent.inlineContent &&\n d && $to.start(d - 1) == start - 1))\n result.push(d);\n }\n return result;\n}\n\n/**\nUpdate an attribute in a specific node.\n*/\nclass AttrStep extends Step {\n /**\n Construct an attribute step.\n */\n constructor(\n /**\n The position of the target node.\n */\n pos, \n /**\n The attribute to set.\n */\n attr, \n // The attribute's new value.\n value) {\n super();\n this.pos = pos;\n this.attr = attr;\n this.value = value;\n }\n apply(doc) {\n let node = doc.nodeAt(this.pos);\n if (!node)\n return StepResult.fail(\"No node at attribute step's position\");\n let attrs = Object.create(null);\n for (let name in node.attrs)\n attrs[name] = node.attrs[name];\n attrs[this.attr] = this.value;\n let updated = node.type.create(attrs, null, node.marks);\n return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n }\n getMap() {\n return StepMap.empty;\n }\n invert(doc) {\n return new AttrStep(this.pos, this.attr, doc.nodeAt(this.pos).attrs[this.attr]);\n }\n map(mapping) {\n let pos = mapping.mapResult(this.pos, 1);\n return pos.deletedAfter ? null : new AttrStep(pos.pos, this.attr, this.value);\n }\n toJSON() {\n return { stepType: \"attr\", pos: this.pos, attr: this.attr, value: this.value };\n }\n static fromJSON(schema, json) {\n if (typeof json.pos != \"number\" || typeof json.attr != \"string\")\n throw new RangeError(\"Invalid input for AttrStep.fromJSON\");\n return new AttrStep(json.pos, json.attr, json.value);\n }\n}\nStep.jsonID(\"attr\", AttrStep);\n/**\nUpdate an attribute in the doc node.\n*/\nclass DocAttrStep extends Step {\n /**\n Construct an attribute step.\n */\n constructor(\n /**\n The attribute to set.\n */\n attr, \n // The attribute's new value.\n value) {\n super();\n this.attr = attr;\n this.value = value;\n }\n apply(doc) {\n let attrs = Object.create(null);\n for (let name in doc.attrs)\n attrs[name] = doc.attrs[name];\n attrs[this.attr] = this.value;\n let updated = doc.type.create(attrs, doc.content, doc.marks);\n return StepResult.ok(updated);\n }\n getMap() {\n return StepMap.empty;\n }\n invert(doc) {\n return new DocAttrStep(this.attr, doc.attrs[this.attr]);\n }\n map(mapping) {\n return this;\n }\n toJSON() {\n return { stepType: \"docAttr\", attr: this.attr, value: this.value };\n }\n static fromJSON(schema, json) {\n if (typeof json.attr != \"string\")\n throw new RangeError(\"Invalid input for DocAttrStep.fromJSON\");\n return new DocAttrStep(json.attr, json.value);\n }\n}\nStep.jsonID(\"docAttr\", DocAttrStep);\n\n/**\n@internal\n*/\nlet TransformError = class extends Error {\n};\nTransformError = function TransformError(message) {\n let err = Error.call(this, message);\n err.__proto__ = TransformError.prototype;\n return err;\n};\nTransformError.prototype = Object.create(Error.prototype);\nTransformError.prototype.constructor = TransformError;\nTransformError.prototype.name = \"TransformError\";\n/**\nAbstraction to build up and track an array of\n[steps](https://prosemirror.net/docs/ref/#transform.Step) representing a document transformation.\n\nMost transforming methods return the `Transform` object itself, so\nthat they can be chained.\n*/\nclass Transform {\n /**\n Create a transform that starts with the given document.\n */\n constructor(\n /**\n The current document (the result of applying the steps in the\n transform).\n */\n doc) {\n this.doc = doc;\n /**\n The steps in this transform.\n */\n this.steps = [];\n /**\n The documents before each of the steps.\n */\n this.docs = [];\n /**\n A mapping with the maps for each of the steps in this transform.\n */\n this.mapping = new Mapping;\n }\n /**\n The starting document.\n */\n get before() { return this.docs.length ? this.docs[0] : this.doc; }\n /**\n Apply a new step in this transform, saving the result. Throws an\n error when the step fails.\n */\n step(step) {\n let result = this.maybeStep(step);\n if (result.failed)\n throw new TransformError(result.failed);\n return this;\n }\n /**\n Try to apply a step in this transformation, ignoring it if it\n fails. Returns the step result.\n */\n maybeStep(step) {\n let result = step.apply(this.doc);\n if (!result.failed)\n this.addStep(step, result.doc);\n return result;\n }\n /**\n True when the document has been changed (when there are any\n steps).\n */\n get docChanged() {\n return this.steps.length > 0;\n }\n /**\n @internal\n */\n addStep(step, doc) {\n this.docs.push(this.doc);\n this.steps.push(step);\n this.mapping.appendMap(step.getMap());\n this.doc = doc;\n }\n /**\n Replace the part of the document between `from` and `to` with the\n given `slice`.\n */\n replace(from, to = from, slice = Slice.empty) {\n let step = replaceStep(this.doc, from, to, slice);\n if (step)\n this.step(step);\n return this;\n }\n /**\n Replace the given range with the given content, which may be a\n fragment, node, or array of nodes.\n */\n replaceWith(from, to, content) {\n return this.replace(from, to, new Slice(Fragment.from(content), 0, 0));\n }\n /**\n Delete the content between the given positions.\n */\n delete(from, to) {\n return this.replace(from, to, Slice.empty);\n }\n /**\n Insert the given content at the given position.\n */\n insert(pos, content) {\n return this.replaceWith(pos, pos, content);\n }\n /**\n Replace a range of the document with a given slice, using\n `from`, `to`, and the slice's\n [`openStart`](https://prosemirror.net/docs/ref/#model.Slice.openStart) property as hints, rather\n than fixed start and end points. This method may grow the\n replaced area or close open nodes in the slice in order to get a\n fit that is more in line with WYSIWYG expectations, by dropping\n fully covered parent nodes of the replaced region when they are\n marked [non-defining as\n context](https://prosemirror.net/docs/ref/#model.NodeSpec.definingAsContext), or including an\n open parent node from the slice that _is_ marked as [defining\n its content](https://prosemirror.net/docs/ref/#model.NodeSpec.definingForContent).\n \n This is the method, for example, to handle paste. The similar\n [`replace`](https://prosemirror.net/docs/ref/#transform.Transform.replace) method is a more\n primitive tool which will _not_ move the start and end of its given\n range, and is useful in situations where you need more precise\n control over what happens.\n */\n replaceRange(from, to, slice) {\n replaceRange(this, from, to, slice);\n return this;\n }\n /**\n Replace the given range with a node, but use `from` and `to` as\n hints, rather than precise positions. When from and to are the same\n and are at the start or end of a parent node in which the given\n node doesn't fit, this method may _move_ them out towards a parent\n that does allow the given node to be placed. When the given range\n completely covers a parent node, this method may completely replace\n that parent node.\n */\n replaceRangeWith(from, to, node) {\n replaceRangeWith(this, from, to, node);\n return this;\n }\n /**\n Delete the given range, expanding it to cover fully covered\n parent nodes until a valid replace is found.\n */\n deleteRange(from, to) {\n deleteRange(this, from, to);\n return this;\n }\n /**\n Split the content in the given range off from its parent, if there\n is sibling content before or after it, and move it up the tree to\n the depth specified by `target`. You'll probably want to use\n [`liftTarget`](https://prosemirror.net/docs/ref/#transform.liftTarget) to compute `target`, to make\n sure the lift is valid.\n */\n lift(range, target) {\n lift(this, range, target);\n return this;\n }\n /**\n Join the blocks around the given position. If depth is 2, their\n last and first siblings are also joined, and so on.\n */\n join(pos, depth = 1) {\n join(this, pos, depth);\n return this;\n }\n /**\n Wrap the given [range](https://prosemirror.net/docs/ref/#model.NodeRange) in the given set of wrappers.\n The wrappers are assumed to be valid in this position, and should\n probably be computed with [`findWrapping`](https://prosemirror.net/docs/ref/#transform.findWrapping).\n */\n wrap(range, wrappers) {\n wrap(this, range, wrappers);\n return this;\n }\n /**\n Set the type of all textblocks (partly) between `from` and `to` to\n the given node type with the given attributes.\n */\n setBlockType(from, to = from, type, attrs = null) {\n setBlockType(this, from, to, type, attrs);\n return this;\n }\n /**\n Change the type, attributes, and/or marks of the node at `pos`.\n When `type` isn't given, the existing node type is preserved,\n */\n setNodeMarkup(pos, type, attrs = null, marks) {\n setNodeMarkup(this, pos, type, attrs, marks);\n return this;\n }\n /**\n Set a single attribute on a given node to a new value.\n The `pos` addresses the document content. Use `setDocAttribute`\n to set attributes on the document itself.\n */\n setNodeAttribute(pos, attr, value) {\n this.step(new AttrStep(pos, attr, value));\n return this;\n }\n /**\n Set a single attribute on the document to a new value.\n */\n setDocAttribute(attr, value) {\n this.step(new DocAttrStep(attr, value));\n return this;\n }\n /**\n Add a mark to the node at position `pos`.\n */\n addNodeMark(pos, mark) {\n this.step(new AddNodeMarkStep(pos, mark));\n return this;\n }\n /**\n Remove a mark (or all marks of the given type) from the node at\n position `pos`.\n */\n removeNodeMark(pos, mark) {\n let node = this.doc.nodeAt(pos);\n if (!node)\n throw new RangeError(\"No node at position \" + pos);\n if (mark instanceof Mark) {\n if (mark.isInSet(node.marks))\n this.step(new RemoveNodeMarkStep(pos, mark));\n }\n else {\n let set = node.marks, found, steps = [];\n while (found = mark.isInSet(set)) {\n steps.push(new RemoveNodeMarkStep(pos, found));\n set = found.removeFromSet(set);\n }\n for (let i = steps.length - 1; i >= 0; i--)\n this.step(steps[i]);\n }\n return this;\n }\n /**\n Split the node at the given position, and optionally, if `depth` is\n greater than one, any number of nodes above that. By default, the\n parts split off will inherit the node type of the original node.\n This can be changed by passing an array of types and attributes to\n use after the split (with the outermost nodes coming first).\n */\n split(pos, depth = 1, typesAfter) {\n split(this, pos, depth, typesAfter);\n return this;\n }\n /**\n Add the given mark to the inline content between `from` and `to`.\n */\n addMark(from, to, mark) {\n addMark(this, from, to, mark);\n return this;\n }\n /**\n Remove marks from inline nodes between `from` and `to`. When\n `mark` is a single mark, remove precisely that mark. When it is\n a mark type, remove all marks of that type. When it is null,\n remove all marks of any type.\n */\n removeMark(from, to, mark) {\n removeMark(this, from, to, mark);\n return this;\n }\n /**\n Removes all marks and nodes from the content of the node at\n `pos` that don't match the given new parent node type. Accepts\n an optional starting [content match](https://prosemirror.net/docs/ref/#model.ContentMatch) as\n third argument.\n */\n clearIncompatible(pos, parentType, match) {\n clearIncompatible(this, pos, parentType, match);\n return this;\n }\n}\n\nexport { AddMarkStep, AddNodeMarkStep, AttrStep, DocAttrStep, MapResult, Mapping, RemoveMarkStep, RemoveNodeMarkStep, ReplaceAroundStep, ReplaceStep, Step, StepMap, StepResult, Transform, TransformError, canJoin, canSplit, dropPoint, findWrapping, insertPoint, joinPoint, liftTarget, replaceStep };\n","import { Slice, Fragment, Mark, Node } from 'prosemirror-model';\nimport { ReplaceStep, ReplaceAroundStep, Transform } from 'prosemirror-transform';\n\nconst classesById = Object.create(null);\n/**\nSuperclass for editor selections. Every selection type should\nextend this. Should not be instantiated directly.\n*/\nclass Selection {\n /**\n Initialize a selection with the head and anchor and ranges. If no\n ranges are given, constructs a single range across `$anchor` and\n `$head`.\n */\n constructor(\n /**\n The resolved anchor of the selection (the side that stays in\n place when the selection is modified).\n */\n $anchor, \n /**\n The resolved head of the selection (the side that moves when\n the selection is modified).\n */\n $head, ranges) {\n this.$anchor = $anchor;\n this.$head = $head;\n this.ranges = ranges || [new SelectionRange($anchor.min($head), $anchor.max($head))];\n }\n /**\n The selection's anchor, as an unresolved position.\n */\n get anchor() { return this.$anchor.pos; }\n /**\n The selection's head.\n */\n get head() { return this.$head.pos; }\n /**\n The lower bound of the selection's main range.\n */\n get from() { return this.$from.pos; }\n /**\n The upper bound of the selection's main range.\n */\n get to() { return this.$to.pos; }\n /**\n The resolved lower bound of the selection's main range.\n */\n get $from() {\n return this.ranges[0].$from;\n }\n /**\n The resolved upper bound of the selection's main range.\n */\n get $to() {\n return this.ranges[0].$to;\n }\n /**\n Indicates whether the selection contains any content.\n */\n get empty() {\n let ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++)\n if (ranges[i].$from.pos != ranges[i].$to.pos)\n return false;\n return true;\n }\n /**\n Get the content of this selection as a slice.\n */\n content() {\n return this.$from.doc.slice(this.from, this.to, true);\n }\n /**\n Replace the selection with a slice or, if no slice is given,\n delete the selection. Will append to the given transaction.\n */\n replace(tr, content = Slice.empty) {\n // Put the new selection at the position after the inserted\n // content. When that ended in an inline node, search backwards,\n // to get the position after that node. If not, search forward.\n let lastNode = content.content.lastChild, lastParent = null;\n for (let i = 0; i < content.openEnd; i++) {\n lastParent = lastNode;\n lastNode = lastNode.lastChild;\n }\n let mapFrom = tr.steps.length, ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n tr.replaceRange(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content);\n if (i == 0)\n selectionToInsertionEnd(tr, mapFrom, (lastNode ? lastNode.isInline : lastParent && lastParent.isTextblock) ? -1 : 1);\n }\n }\n /**\n Replace the selection with the given node, appending the changes\n to the given transaction.\n */\n replaceWith(tr, node) {\n let mapFrom = tr.steps.length, ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n let from = mapping.map($from.pos), to = mapping.map($to.pos);\n if (i) {\n tr.deleteRange(from, to);\n }\n else {\n tr.replaceRangeWith(from, to, node);\n selectionToInsertionEnd(tr, mapFrom, node.isInline ? -1 : 1);\n }\n }\n }\n /**\n Find a valid cursor or leaf node selection starting at the given\n position and searching back if `dir` is negative, and forward if\n positive. When `textOnly` is true, only consider cursor\n selections. Will return null when no valid selection position is\n found.\n */\n static findFrom($pos, dir, textOnly = false) {\n let inner = $pos.parent.inlineContent ? new TextSelection($pos)\n : findSelectionIn($pos.node(0), $pos.parent, $pos.pos, $pos.index(), dir, textOnly);\n if (inner)\n return inner;\n for (let depth = $pos.depth - 1; depth >= 0; depth--) {\n let found = dir < 0\n ? findSelectionIn($pos.node(0), $pos.node(depth), $pos.before(depth + 1), $pos.index(depth), dir, textOnly)\n : findSelectionIn($pos.node(0), $pos.node(depth), $pos.after(depth + 1), $pos.index(depth) + 1, dir, textOnly);\n if (found)\n return found;\n }\n return null;\n }\n /**\n Find a valid cursor or leaf node selection near the given\n position. Searches forward first by default, but if `bias` is\n negative, it will search backwards first.\n */\n static near($pos, bias = 1) {\n return this.findFrom($pos, bias) || this.findFrom($pos, -bias) || new AllSelection($pos.node(0));\n }\n /**\n Find the cursor or leaf node selection closest to the start of\n the given document. Will return an\n [`AllSelection`](https://prosemirror.net/docs/ref/#state.AllSelection) if no valid position\n exists.\n */\n static atStart(doc) {\n return findSelectionIn(doc, doc, 0, 0, 1) || new AllSelection(doc);\n }\n /**\n Find the cursor or leaf node selection closest to the end of the\n given document.\n */\n static atEnd(doc) {\n return findSelectionIn(doc, doc, doc.content.size, doc.childCount, -1) || new AllSelection(doc);\n }\n /**\n Deserialize the JSON representation of a selection. Must be\n implemented for custom classes (as a static class method).\n */\n static fromJSON(doc, json) {\n if (!json || !json.type)\n throw new RangeError(\"Invalid input for Selection.fromJSON\");\n let cls = classesById[json.type];\n if (!cls)\n throw new RangeError(`No selection type ${json.type} defined`);\n return cls.fromJSON(doc, json);\n }\n /**\n To be able to deserialize selections from JSON, custom selection\n classes must register themselves with an ID string, so that they\n can be disambiguated. Try to pick something that's unlikely to\n clash with classes from other modules.\n */\n static jsonID(id, selectionClass) {\n if (id in classesById)\n throw new RangeError(\"Duplicate use of selection JSON ID \" + id);\n classesById[id] = selectionClass;\n selectionClass.prototype.jsonID = id;\n return selectionClass;\n }\n /**\n Get a [bookmark](https://prosemirror.net/docs/ref/#state.SelectionBookmark) for this selection,\n which is a value that can be mapped without having access to a\n current document, and later resolved to a real selection for a\n given document again. (This is used mostly by the history to\n track and restore old selections.) The default implementation of\n this method just converts the selection to a text selection and\n returns the bookmark for that.\n */\n getBookmark() {\n return TextSelection.between(this.$anchor, this.$head).getBookmark();\n }\n}\nSelection.prototype.visible = true;\n/**\nRepresents a selected range in a document.\n*/\nclass SelectionRange {\n /**\n Create a range.\n */\n constructor(\n /**\n The lower bound of the range.\n */\n $from, \n /**\n The upper bound of the range.\n */\n $to) {\n this.$from = $from;\n this.$to = $to;\n }\n}\nlet warnedAboutTextSelection = false;\nfunction checkTextSelection($pos) {\n if (!warnedAboutTextSelection && !$pos.parent.inlineContent) {\n warnedAboutTextSelection = true;\n console[\"warn\"](\"TextSelection endpoint not pointing into a node with inline content (\" + $pos.parent.type.name + \")\");\n }\n}\n/**\nA text selection represents a classical editor selection, with a\nhead (the moving side) and anchor (immobile side), both of which\npoint into textblock nodes. It can be empty (a regular cursor\nposition).\n*/\nclass TextSelection extends Selection {\n /**\n Construct a text selection between the given points.\n */\n constructor($anchor, $head = $anchor) {\n checkTextSelection($anchor);\n checkTextSelection($head);\n super($anchor, $head);\n }\n /**\n Returns a resolved position if this is a cursor selection (an\n empty text selection), and null otherwise.\n */\n get $cursor() { return this.$anchor.pos == this.$head.pos ? this.$head : null; }\n map(doc, mapping) {\n let $head = doc.resolve(mapping.map(this.head));\n if (!$head.parent.inlineContent)\n return Selection.near($head);\n let $anchor = doc.resolve(mapping.map(this.anchor));\n return new TextSelection($anchor.parent.inlineContent ? $anchor : $head, $head);\n }\n replace(tr, content = Slice.empty) {\n super.replace(tr, content);\n if (content == Slice.empty) {\n let marks = this.$from.marksAcross(this.$to);\n if (marks)\n tr.ensureMarks(marks);\n }\n }\n eq(other) {\n return other instanceof TextSelection && other.anchor == this.anchor && other.head == this.head;\n }\n getBookmark() {\n return new TextBookmark(this.anchor, this.head);\n }\n toJSON() {\n return { type: \"text\", anchor: this.anchor, head: this.head };\n }\n /**\n @internal\n */\n static fromJSON(doc, json) {\n if (typeof json.anchor != \"number\" || typeof json.head != \"number\")\n throw new RangeError(\"Invalid input for TextSelection.fromJSON\");\n return new TextSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n }\n /**\n Create a text selection from non-resolved positions.\n */\n static create(doc, anchor, head = anchor) {\n let $anchor = doc.resolve(anchor);\n return new this($anchor, head == anchor ? $anchor : doc.resolve(head));\n }\n /**\n Return a text selection that spans the given positions or, if\n they aren't text positions, find a text selection near them.\n `bias` determines whether the method searches forward (default)\n or backwards (negative number) first. Will fall back to calling\n [`Selection.near`](https://prosemirror.net/docs/ref/#state.Selection^near) when the document\n doesn't contain a valid text position.\n */\n static between($anchor, $head, bias) {\n let dPos = $anchor.pos - $head.pos;\n if (!bias || dPos)\n bias = dPos >= 0 ? 1 : -1;\n if (!$head.parent.inlineContent) {\n let found = Selection.findFrom($head, bias, true) || Selection.findFrom($head, -bias, true);\n if (found)\n $head = found.$head;\n else\n return Selection.near($head, bias);\n }\n if (!$anchor.parent.inlineContent) {\n if (dPos == 0) {\n $anchor = $head;\n }\n else {\n $anchor = (Selection.findFrom($anchor, -bias, true) || Selection.findFrom($anchor, bias, true)).$anchor;\n if (($anchor.pos < $head.pos) != (dPos < 0))\n $anchor = $head;\n }\n }\n return new TextSelection($anchor, $head);\n }\n}\nSelection.jsonID(\"text\", TextSelection);\nclass TextBookmark {\n constructor(anchor, head) {\n this.anchor = anchor;\n this.head = head;\n }\n map(mapping) {\n return new TextBookmark(mapping.map(this.anchor), mapping.map(this.head));\n }\n resolve(doc) {\n return TextSelection.between(doc.resolve(this.anchor), doc.resolve(this.head));\n }\n}\n/**\nA node selection is a selection that points at a single node. All\nnodes marked [selectable](https://prosemirror.net/docs/ref/#model.NodeSpec.selectable) can be the\ntarget of a node selection. In such a selection, `from` and `to`\npoint directly before and after the selected node, `anchor` equals\n`from`, and `head` equals `to`..\n*/\nclass NodeSelection extends Selection {\n /**\n Create a node selection. Does not verify the validity of its\n argument.\n */\n constructor($pos) {\n let node = $pos.nodeAfter;\n let $end = $pos.node(0).resolve($pos.pos + node.nodeSize);\n super($pos, $end);\n this.node = node;\n }\n map(doc, mapping) {\n let { deleted, pos } = mapping.mapResult(this.anchor);\n let $pos = doc.resolve(pos);\n if (deleted)\n return Selection.near($pos);\n return new NodeSelection($pos);\n }\n content() {\n return new Slice(Fragment.from(this.node), 0, 0);\n }\n eq(other) {\n return other instanceof NodeSelection && other.anchor == this.anchor;\n }\n toJSON() {\n return { type: \"node\", anchor: this.anchor };\n }\n getBookmark() { return new NodeBookmark(this.anchor); }\n /**\n @internal\n */\n static fromJSON(doc, json) {\n if (typeof json.anchor != \"number\")\n throw new RangeError(\"Invalid input for NodeSelection.fromJSON\");\n return new NodeSelection(doc.resolve(json.anchor));\n }\n /**\n Create a node selection from non-resolved positions.\n */\n static create(doc, from) {\n return new NodeSelection(doc.resolve(from));\n }\n /**\n Determines whether the given node may be selected as a node\n selection.\n */\n static isSelectable(node) {\n return !node.isText && node.type.spec.selectable !== false;\n }\n}\nNodeSelection.prototype.visible = false;\nSelection.jsonID(\"node\", NodeSelection);\nclass NodeBookmark {\n constructor(anchor) {\n this.anchor = anchor;\n }\n map(mapping) {\n let { deleted, pos } = mapping.mapResult(this.anchor);\n return deleted ? new TextBookmark(pos, pos) : new NodeBookmark(pos);\n }\n resolve(doc) {\n let $pos = doc.resolve(this.anchor), node = $pos.nodeAfter;\n if (node && NodeSelection.isSelectable(node))\n return new NodeSelection($pos);\n return Selection.near($pos);\n }\n}\n/**\nA selection type that represents selecting the whole document\n(which can not necessarily be expressed with a text selection, when\nthere are for example leaf block nodes at the start or end of the\ndocument).\n*/\nclass AllSelection extends Selection {\n /**\n Create an all-selection over the given document.\n */\n constructor(doc) {\n super(doc.resolve(0), doc.resolve(doc.content.size));\n }\n replace(tr, content = Slice.empty) {\n if (content == Slice.empty) {\n tr.delete(0, tr.doc.content.size);\n let sel = Selection.atStart(tr.doc);\n if (!sel.eq(tr.selection))\n tr.setSelection(sel);\n }\n else {\n super.replace(tr, content);\n }\n }\n toJSON() { return { type: \"all\" }; }\n /**\n @internal\n */\n static fromJSON(doc) { return new AllSelection(doc); }\n map(doc) { return new AllSelection(doc); }\n eq(other) { return other instanceof AllSelection; }\n getBookmark() { return AllBookmark; }\n}\nSelection.jsonID(\"all\", AllSelection);\nconst AllBookmark = {\n map() { return this; },\n resolve(doc) { return new AllSelection(doc); }\n};\n// FIXME we'll need some awareness of text direction when scanning for selections\n// Try to find a selection inside the given node. `pos` points at the\n// position where the search starts. When `text` is true, only return\n// text selections.\nfunction findSelectionIn(doc, node, pos, index, dir, text = false) {\n if (node.inlineContent)\n return TextSelection.create(doc, pos);\n for (let i = index - (dir > 0 ? 0 : 1); dir > 0 ? i < node.childCount : i >= 0; i += dir) {\n let child = node.child(i);\n if (!child.isAtom) {\n let inner = findSelectionIn(doc, child, pos + dir, dir < 0 ? child.childCount : 0, dir, text);\n if (inner)\n return inner;\n }\n else if (!text && NodeSelection.isSelectable(child)) {\n return NodeSelection.create(doc, pos - (dir < 0 ? child.nodeSize : 0));\n }\n pos += child.nodeSize * dir;\n }\n return null;\n}\nfunction selectionToInsertionEnd(tr, startLen, bias) {\n let last = tr.steps.length - 1;\n if (last < startLen)\n return;\n let step = tr.steps[last];\n if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep))\n return;\n let map = tr.mapping.maps[last], end;\n map.forEach((_from, _to, _newFrom, newTo) => { if (end == null)\n end = newTo; });\n tr.setSelection(Selection.near(tr.doc.resolve(end), bias));\n}\n\nconst UPDATED_SEL = 1, UPDATED_MARKS = 2, UPDATED_SCROLL = 4;\n/**\nAn editor state transaction, which can be applied to a state to\ncreate an updated state. Use\n[`EditorState.tr`](https://prosemirror.net/docs/ref/#state.EditorState.tr) to create an instance.\n\nTransactions track changes to the document (they are a subclass of\n[`Transform`](https://prosemirror.net/docs/ref/#transform.Transform)), but also other state changes,\nlike selection updates and adjustments of the set of [stored\nmarks](https://prosemirror.net/docs/ref/#state.EditorState.storedMarks). In addition, you can store\nmetadata properties in a transaction, which are extra pieces of\ninformation that client code or plugins can use to describe what a\ntransaction represents, so that they can update their [own\nstate](https://prosemirror.net/docs/ref/#state.StateField) accordingly.\n\nThe [editor view](https://prosemirror.net/docs/ref/#view.EditorView) uses a few metadata\nproperties: it will attach a property `\"pointer\"` with the value\n`true` to selection transactions directly caused by mouse or touch\ninput, a `\"composition\"` property holding an ID identifying the\ncomposition that caused it to transactions caused by composed DOM\ninput, and a `\"uiEvent\"` property of that may be `\"paste\"`,\n`\"cut\"`, or `\"drop\"`.\n*/\nclass Transaction extends Transform {\n /**\n @internal\n */\n constructor(state) {\n super(state.doc);\n // The step count for which the current selection is valid.\n this.curSelectionFor = 0;\n // Bitfield to track which aspects of the state were updated by\n // this transaction.\n this.updated = 0;\n // Object used to store metadata properties for the transaction.\n this.meta = Object.create(null);\n this.time = Date.now();\n this.curSelection = state.selection;\n this.storedMarks = state.storedMarks;\n }\n /**\n The transaction's current selection. This defaults to the editor\n selection [mapped](https://prosemirror.net/docs/ref/#state.Selection.map) through the steps in the\n transaction, but can be overwritten with\n [`setSelection`](https://prosemirror.net/docs/ref/#state.Transaction.setSelection).\n */\n get selection() {\n if (this.curSelectionFor < this.steps.length) {\n this.curSelection = this.curSelection.map(this.doc, this.mapping.slice(this.curSelectionFor));\n this.curSelectionFor = this.steps.length;\n }\n return this.curSelection;\n }\n /**\n Update the transaction's current selection. Will determine the\n selection that the editor gets when the transaction is applied.\n */\n setSelection(selection) {\n if (selection.$from.doc != this.doc)\n throw new RangeError(\"Selection passed to setSelection must point at the current document\");\n this.curSelection = selection;\n this.curSelectionFor = this.steps.length;\n this.updated = (this.updated | UPDATED_SEL) & ~UPDATED_MARKS;\n this.storedMarks = null;\n return this;\n }\n /**\n Whether the selection was explicitly updated by this transaction.\n */\n get selectionSet() {\n return (this.updated & UPDATED_SEL) > 0;\n }\n /**\n Set the current stored marks.\n */\n setStoredMarks(marks) {\n this.storedMarks = marks;\n this.updated |= UPDATED_MARKS;\n return this;\n }\n /**\n Make sure the current stored marks or, if that is null, the marks\n at the selection, match the given set of marks. Does nothing if\n this is already the case.\n */\n ensureMarks(marks) {\n if (!Mark.sameSet(this.storedMarks || this.selection.$from.marks(), marks))\n this.setStoredMarks(marks);\n return this;\n }\n /**\n Add a mark to the set of stored marks.\n */\n addStoredMark(mark) {\n return this.ensureMarks(mark.addToSet(this.storedMarks || this.selection.$head.marks()));\n }\n /**\n Remove a mark or mark type from the set of stored marks.\n */\n removeStoredMark(mark) {\n return this.ensureMarks(mark.removeFromSet(this.storedMarks || this.selection.$head.marks()));\n }\n /**\n Whether the stored marks were explicitly set for this transaction.\n */\n get storedMarksSet() {\n return (this.updated & UPDATED_MARKS) > 0;\n }\n /**\n @internal\n */\n addStep(step, doc) {\n super.addStep(step, doc);\n this.updated = this.updated & ~UPDATED_MARKS;\n this.storedMarks = null;\n }\n /**\n Update the timestamp for the transaction.\n */\n setTime(time) {\n this.time = time;\n return this;\n }\n /**\n Replace the current selection with the given slice.\n */\n replaceSelection(slice) {\n this.selection.replace(this, slice);\n return this;\n }\n /**\n Replace the selection with the given node. When `inheritMarks` is\n true and the content is inline, it inherits the marks from the\n place where it is inserted.\n */\n replaceSelectionWith(node, inheritMarks = true) {\n let selection = this.selection;\n if (inheritMarks)\n node = node.mark(this.storedMarks || (selection.empty ? selection.$from.marks() : (selection.$from.marksAcross(selection.$to) || Mark.none)));\n selection.replaceWith(this, node);\n return this;\n }\n /**\n Delete the selection.\n */\n deleteSelection() {\n this.selection.replace(this);\n return this;\n }\n /**\n Replace the given range, or the selection if no range is given,\n with a text node containing the given string.\n */\n insertText(text, from, to) {\n let schema = this.doc.type.schema;\n if (from == null) {\n if (!text)\n return this.deleteSelection();\n return this.replaceSelectionWith(schema.text(text), true);\n }\n else {\n if (to == null)\n to = from;\n if (!text)\n return this.deleteRange(from, to);\n let marks = this.storedMarks;\n if (!marks) {\n let $from = this.doc.resolve(from);\n marks = to == from ? $from.marks() : $from.marksAcross(this.doc.resolve(to));\n }\n this.replaceRangeWith(from, to, schema.text(text, marks));\n if (!this.selection.empty && this.selection.to == from + text.length)\n this.setSelection(Selection.near(this.selection.$to));\n return this;\n }\n }\n /**\n Store a metadata property in this transaction, keyed either by\n name or by plugin.\n */\n setMeta(key, value) {\n this.meta[typeof key == \"string\" ? key : key.key] = value;\n return this;\n }\n /**\n Retrieve a metadata property for a given name or plugin.\n */\n getMeta(key) {\n return this.meta[typeof key == \"string\" ? key : key.key];\n }\n /**\n Returns true if this transaction doesn't contain any metadata,\n and can thus safely be extended.\n */\n get isGeneric() {\n for (let _ in this.meta)\n return false;\n return true;\n }\n /**\n Indicate that the editor should scroll the selection into view\n when updated to the state produced by this transaction.\n */\n scrollIntoView() {\n this.updated |= UPDATED_SCROLL;\n return this;\n }\n /**\n True when this transaction has had `scrollIntoView` called on it.\n */\n get scrolledIntoView() {\n return (this.updated & UPDATED_SCROLL) > 0;\n }\n}\n\nfunction bind(f, self) {\n return !self || !f ? f : f.bind(self);\n}\nclass FieldDesc {\n constructor(name, desc, self) {\n this.name = name;\n this.init = bind(desc.init, self);\n this.apply = bind(desc.apply, self);\n }\n}\nconst baseFields = [\n new FieldDesc(\"doc\", {\n init(config) { return config.doc || config.schema.topNodeType.createAndFill(); },\n apply(tr) { return tr.doc; }\n }),\n new FieldDesc(\"selection\", {\n init(config, instance) { return config.selection || Selection.atStart(instance.doc); },\n apply(tr) { return tr.selection; }\n }),\n new FieldDesc(\"storedMarks\", {\n init(config) { return config.storedMarks || null; },\n apply(tr, _marks, _old, state) { return state.selection.$cursor ? tr.storedMarks : null; }\n }),\n new FieldDesc(\"scrollToSelection\", {\n init() { return 0; },\n apply(tr, prev) { return tr.scrolledIntoView ? prev + 1 : prev; }\n })\n];\n// Object wrapping the part of a state object that stays the same\n// across transactions. Stored in the state's `config` property.\nclass Configuration {\n constructor(schema, plugins) {\n this.schema = schema;\n this.plugins = [];\n this.pluginsByKey = Object.create(null);\n this.fields = baseFields.slice();\n if (plugins)\n plugins.forEach(plugin => {\n if (this.pluginsByKey[plugin.key])\n throw new RangeError(\"Adding different instances of a keyed plugin (\" + plugin.key + \")\");\n this.plugins.push(plugin);\n this.pluginsByKey[plugin.key] = plugin;\n if (plugin.spec.state)\n this.fields.push(new FieldDesc(plugin.key, plugin.spec.state, plugin));\n });\n }\n}\n/**\nThe state of a ProseMirror editor is represented by an object of\nthis type. A state is a persistent data structure—it isn't\nupdated, but rather a new state value is computed from an old one\nusing the [`apply`](https://prosemirror.net/docs/ref/#state.EditorState.apply) method.\n\nA state holds a number of built-in fields, and plugins can\n[define](https://prosemirror.net/docs/ref/#state.PluginSpec.state) additional fields.\n*/\nclass EditorState {\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n config) {\n this.config = config;\n }\n /**\n The schema of the state's document.\n */\n get schema() {\n return this.config.schema;\n }\n /**\n The plugins that are active in this state.\n */\n get plugins() {\n return this.config.plugins;\n }\n /**\n Apply the given transaction to produce a new state.\n */\n apply(tr) {\n return this.applyTransaction(tr).state;\n }\n /**\n @internal\n */\n filterTransaction(tr, ignore = -1) {\n for (let i = 0; i < this.config.plugins.length; i++)\n if (i != ignore) {\n let plugin = this.config.plugins[i];\n if (plugin.spec.filterTransaction && !plugin.spec.filterTransaction.call(plugin, tr, this))\n return false;\n }\n return true;\n }\n /**\n Verbose variant of [`apply`](https://prosemirror.net/docs/ref/#state.EditorState.apply) that\n returns the precise transactions that were applied (which might\n be influenced by the [transaction\n hooks](https://prosemirror.net/docs/ref/#state.PluginSpec.filterTransaction) of\n plugins) along with the new state.\n */\n applyTransaction(rootTr) {\n if (!this.filterTransaction(rootTr))\n return { state: this, transactions: [] };\n let trs = [rootTr], newState = this.applyInner(rootTr), seen = null;\n // This loop repeatedly gives plugins a chance to respond to\n // transactions as new transactions are added, making sure to only\n // pass the transactions the plugin did not see before.\n for (;;) {\n let haveNew = false;\n for (let i = 0; i < this.config.plugins.length; i++) {\n let plugin = this.config.plugins[i];\n if (plugin.spec.appendTransaction) {\n let n = seen ? seen[i].n : 0, oldState = seen ? seen[i].state : this;\n let tr = n < trs.length &&\n plugin.spec.appendTransaction.call(plugin, n ? trs.slice(n) : trs, oldState, newState);\n if (tr && newState.filterTransaction(tr, i)) {\n tr.setMeta(\"appendedTransaction\", rootTr);\n if (!seen) {\n seen = [];\n for (let j = 0; j < this.config.plugins.length; j++)\n seen.push(j < i ? { state: newState, n: trs.length } : { state: this, n: 0 });\n }\n trs.push(tr);\n newState = newState.applyInner(tr);\n haveNew = true;\n }\n if (seen)\n seen[i] = { state: newState, n: trs.length };\n }\n }\n if (!haveNew)\n return { state: newState, transactions: trs };\n }\n }\n /**\n @internal\n */\n applyInner(tr) {\n if (!tr.before.eq(this.doc))\n throw new RangeError(\"Applying a mismatched transaction\");\n let newInstance = new EditorState(this.config), fields = this.config.fields;\n for (let i = 0; i < fields.length; i++) {\n let field = fields[i];\n newInstance[field.name] = field.apply(tr, this[field.name], this, newInstance);\n }\n return newInstance;\n }\n /**\n Accessor that constructs and returns a new [transaction](https://prosemirror.net/docs/ref/#state.Transaction) from this state.\n */\n get tr() { return new Transaction(this); }\n /**\n Create a new state.\n */\n static create(config) {\n let $config = new Configuration(config.doc ? config.doc.type.schema : config.schema, config.plugins);\n let instance = new EditorState($config);\n for (let i = 0; i < $config.fields.length; i++)\n instance[$config.fields[i].name] = $config.fields[i].init(config, instance);\n return instance;\n }\n /**\n Create a new state based on this one, but with an adjusted set\n of active plugins. State fields that exist in both sets of\n plugins are kept unchanged. Those that no longer exist are\n dropped, and those that are new are initialized using their\n [`init`](https://prosemirror.net/docs/ref/#state.StateField.init) method, passing in the new\n configuration object..\n */\n reconfigure(config) {\n let $config = new Configuration(this.schema, config.plugins);\n let fields = $config.fields, instance = new EditorState($config);\n for (let i = 0; i < fields.length; i++) {\n let name = fields[i].name;\n instance[name] = this.hasOwnProperty(name) ? this[name] : fields[i].init(config, instance);\n }\n return instance;\n }\n /**\n Serialize this state to JSON. If you want to serialize the state\n of plugins, pass an object mapping property names to use in the\n resulting JSON object to plugin objects. The argument may also be\n a string or number, in which case it is ignored, to support the\n way `JSON.stringify` calls `toString` methods.\n */\n toJSON(pluginFields) {\n let result = { doc: this.doc.toJSON(), selection: this.selection.toJSON() };\n if (this.storedMarks)\n result.storedMarks = this.storedMarks.map(m => m.toJSON());\n if (pluginFields && typeof pluginFields == 'object')\n for (let prop in pluginFields) {\n if (prop == \"doc\" || prop == \"selection\")\n throw new RangeError(\"The JSON fields `doc` and `selection` are reserved\");\n let plugin = pluginFields[prop], state = plugin.spec.state;\n if (state && state.toJSON)\n result[prop] = state.toJSON.call(plugin, this[plugin.key]);\n }\n return result;\n }\n /**\n Deserialize a JSON representation of a state. `config` should\n have at least a `schema` field, and should contain array of\n plugins to initialize the state with. `pluginFields` can be used\n to deserialize the state of plugins, by associating plugin\n instances with the property names they use in the JSON object.\n */\n static fromJSON(config, json, pluginFields) {\n if (!json)\n throw new RangeError(\"Invalid input for EditorState.fromJSON\");\n if (!config.schema)\n throw new RangeError(\"Required config field 'schema' missing\");\n let $config = new Configuration(config.schema, config.plugins);\n let instance = new EditorState($config);\n $config.fields.forEach(field => {\n if (field.name == \"doc\") {\n instance.doc = Node.fromJSON(config.schema, json.doc);\n }\n else if (field.name == \"selection\") {\n instance.selection = Selection.fromJSON(instance.doc, json.selection);\n }\n else if (field.name == \"storedMarks\") {\n if (json.storedMarks)\n instance.storedMarks = json.storedMarks.map(config.schema.markFromJSON);\n }\n else {\n if (pluginFields)\n for (let prop in pluginFields) {\n let plugin = pluginFields[prop], state = plugin.spec.state;\n if (plugin.key == field.name && state && state.fromJSON &&\n Object.prototype.hasOwnProperty.call(json, prop)) {\n instance[field.name] = state.fromJSON.call(plugin, config, json[prop], instance);\n return;\n }\n }\n instance[field.name] = field.init(config, instance);\n }\n });\n return instance;\n }\n}\n\nfunction bindProps(obj, self, target) {\n for (let prop in obj) {\n let val = obj[prop];\n if (val instanceof Function)\n val = val.bind(self);\n else if (prop == \"handleDOMEvents\")\n val = bindProps(val, self, {});\n target[prop] = val;\n }\n return target;\n}\n/**\nPlugins bundle functionality that can be added to an editor.\nThey are part of the [editor state](https://prosemirror.net/docs/ref/#state.EditorState) and\nmay influence that state and the view that contains it.\n*/\nclass Plugin {\n /**\n Create a plugin.\n */\n constructor(\n /**\n The plugin's [spec object](https://prosemirror.net/docs/ref/#state.PluginSpec).\n */\n spec) {\n this.spec = spec;\n /**\n The [props](https://prosemirror.net/docs/ref/#view.EditorProps) exported by this plugin.\n */\n this.props = {};\n if (spec.props)\n bindProps(spec.props, this, this.props);\n this.key = spec.key ? spec.key.key : createKey(\"plugin\");\n }\n /**\n Extract the plugin's state field from an editor state.\n */\n getState(state) { return state[this.key]; }\n}\nconst keys = Object.create(null);\nfunction createKey(name) {\n if (name in keys)\n return name + \"$\" + ++keys[name];\n keys[name] = 0;\n return name + \"$\";\n}\n/**\nA key is used to [tag](https://prosemirror.net/docs/ref/#state.PluginSpec.key) plugins in a way\nthat makes it possible to find them, given an editor state.\nAssigning a key does mean only one plugin of that type can be\nactive in a state.\n*/\nclass PluginKey {\n /**\n Create a plugin key.\n */\n constructor(name = \"key\") { this.key = createKey(name); }\n /**\n Get the active plugin with this key, if any, from an editor\n state.\n */\n get(state) { return state.config.pluginsByKey[this.key]; }\n /**\n Get the plugin's state from an editor state.\n */\n getState(state) { return state[this.key]; }\n}\n\nexport { AllSelection, EditorState, NodeSelection, Plugin, PluginKey, Selection, SelectionRange, TextSelection, Transaction };\n","import { liftTarget, replaceStep, ReplaceStep, canJoin, joinPoint, canSplit, ReplaceAroundStep, findWrapping } from 'prosemirror-transform';\nimport { Slice, Fragment } from 'prosemirror-model';\nimport { NodeSelection, Selection, TextSelection, AllSelection, SelectionRange } from 'prosemirror-state';\n\n/**\nDelete the selection, if there is one.\n*/\nconst deleteSelection = (state, dispatch) => {\n if (state.selection.empty)\n return false;\n if (dispatch)\n dispatch(state.tr.deleteSelection().scrollIntoView());\n return true;\n};\nfunction atBlockStart(state, view) {\n let { $cursor } = state.selection;\n if (!$cursor || (view ? !view.endOfTextblock(\"backward\", state)\n : $cursor.parentOffset > 0))\n return null;\n return $cursor;\n}\n/**\nIf the selection is empty and at the start of a textblock, try to\nreduce the distance between that block and the one before it—if\nthere's a block directly before it that can be joined, join them.\nIf not, try to move the selected block closer to the next one in\nthe document structure by lifting it out of its parent or moving it\ninto a parent of the previous block. Will use the view for accurate\n(bidi-aware) start-of-textblock detection if given.\n*/\nconst joinBackward = (state, dispatch, view) => {\n let $cursor = atBlockStart(state, view);\n if (!$cursor)\n return false;\n let $cut = findCutBefore($cursor);\n // If there is no node before this, try to lift\n if (!$cut) {\n let range = $cursor.blockRange(), target = range && liftTarget(range);\n if (target == null)\n return false;\n if (dispatch)\n dispatch(state.tr.lift(range, target).scrollIntoView());\n return true;\n }\n let before = $cut.nodeBefore;\n // Apply the joining algorithm\n if (deleteBarrier(state, $cut, dispatch, -1))\n return true;\n // If the node below has no content and the node above is\n // selectable, delete the node below and select the one above.\n if ($cursor.parent.content.size == 0 &&\n (textblockAt(before, \"end\") || NodeSelection.isSelectable(before))) {\n for (let depth = $cursor.depth;; depth--) {\n let delStep = replaceStep(state.doc, $cursor.before(depth), $cursor.after(depth), Slice.empty);\n if (delStep && delStep.slice.size < delStep.to - delStep.from) {\n if (dispatch) {\n let tr = state.tr.step(delStep);\n tr.setSelection(textblockAt(before, \"end\")\n ? Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos, -1)), -1)\n : NodeSelection.create(tr.doc, $cut.pos - before.nodeSize));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n if (depth == 1 || $cursor.node(depth - 1).childCount > 1)\n break;\n }\n }\n // If the node before is an atom, delete it\n if (before.isAtom && $cut.depth == $cursor.depth - 1) {\n if (dispatch)\n dispatch(state.tr.delete($cut.pos - before.nodeSize, $cut.pos).scrollIntoView());\n return true;\n }\n return false;\n};\n/**\nA more limited form of [`joinBackward`](https://prosemirror.net/docs/ref/#commands.joinBackward)\nthat only tries to join the current textblock to the one before\nit, if the cursor is at the start of a textblock.\n*/\nconst joinTextblockBackward = (state, dispatch, view) => {\n let $cursor = atBlockStart(state, view);\n if (!$cursor)\n return false;\n let $cut = findCutBefore($cursor);\n return $cut ? joinTextblocksAround(state, $cut, dispatch) : false;\n};\n/**\nA more limited form of [`joinForward`](https://prosemirror.net/docs/ref/#commands.joinForward)\nthat only tries to join the current textblock to the one after\nit, if the cursor is at the end of a textblock.\n*/\nconst joinTextblockForward = (state, dispatch, view) => {\n let $cursor = atBlockEnd(state, view);\n if (!$cursor)\n return false;\n let $cut = findCutAfter($cursor);\n return $cut ? joinTextblocksAround(state, $cut, dispatch) : false;\n};\nfunction joinTextblocksAround(state, $cut, dispatch) {\n let before = $cut.nodeBefore, beforeText = before, beforePos = $cut.pos - 1;\n for (; !beforeText.isTextblock; beforePos--) {\n if (beforeText.type.spec.isolating)\n return false;\n let child = beforeText.lastChild;\n if (!child)\n return false;\n beforeText = child;\n }\n let after = $cut.nodeAfter, afterText = after, afterPos = $cut.pos + 1;\n for (; !afterText.isTextblock; afterPos++) {\n if (afterText.type.spec.isolating)\n return false;\n let child = afterText.firstChild;\n if (!child)\n return false;\n afterText = child;\n }\n let step = replaceStep(state.doc, beforePos, afterPos, Slice.empty);\n if (!step || step.from != beforePos ||\n step instanceof ReplaceStep && step.slice.size >= afterPos - beforePos)\n return false;\n if (dispatch) {\n let tr = state.tr.step(step);\n tr.setSelection(TextSelection.create(tr.doc, beforePos));\n dispatch(tr.scrollIntoView());\n }\n return true;\n}\nfunction textblockAt(node, side, only = false) {\n for (let scan = node; scan; scan = (side == \"start\" ? scan.firstChild : scan.lastChild)) {\n if (scan.isTextblock)\n return true;\n if (only && scan.childCount != 1)\n return false;\n }\n return false;\n}\n/**\nWhen the selection is empty and at the start of a textblock, select\nthe node before that textblock, if possible. This is intended to be\nbound to keys like backspace, after\n[`joinBackward`](https://prosemirror.net/docs/ref/#commands.joinBackward) or other deleting\ncommands, as a fall-back behavior when the schema doesn't allow\ndeletion at the selected point.\n*/\nconst selectNodeBackward = (state, dispatch, view) => {\n let { $head, empty } = state.selection, $cut = $head;\n if (!empty)\n return false;\n if ($head.parent.isTextblock) {\n if (view ? !view.endOfTextblock(\"backward\", state) : $head.parentOffset > 0)\n return false;\n $cut = findCutBefore($head);\n }\n let node = $cut && $cut.nodeBefore;\n if (!node || !NodeSelection.isSelectable(node))\n return false;\n if (dispatch)\n dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos - node.nodeSize)).scrollIntoView());\n return true;\n};\nfunction findCutBefore($pos) {\n if (!$pos.parent.type.spec.isolating)\n for (let i = $pos.depth - 1; i >= 0; i--) {\n if ($pos.index(i) > 0)\n return $pos.doc.resolve($pos.before(i + 1));\n if ($pos.node(i).type.spec.isolating)\n break;\n }\n return null;\n}\nfunction atBlockEnd(state, view) {\n let { $cursor } = state.selection;\n if (!$cursor || (view ? !view.endOfTextblock(\"forward\", state)\n : $cursor.parentOffset < $cursor.parent.content.size))\n return null;\n return $cursor;\n}\n/**\nIf the selection is empty and the cursor is at the end of a\ntextblock, try to reduce or remove the boundary between that block\nand the one after it, either by joining them or by moving the other\nblock closer to this one in the tree structure. Will use the view\nfor accurate start-of-textblock detection if given.\n*/\nconst joinForward = (state, dispatch, view) => {\n let $cursor = atBlockEnd(state, view);\n if (!$cursor)\n return false;\n let $cut = findCutAfter($cursor);\n // If there is no node after this, there's nothing to do\n if (!$cut)\n return false;\n let after = $cut.nodeAfter;\n // Try the joining algorithm\n if (deleteBarrier(state, $cut, dispatch, 1))\n return true;\n // If the node above has no content and the node below is\n // selectable, delete the node above and select the one below.\n if ($cursor.parent.content.size == 0 &&\n (textblockAt(after, \"start\") || NodeSelection.isSelectable(after))) {\n let delStep = replaceStep(state.doc, $cursor.before(), $cursor.after(), Slice.empty);\n if (delStep && delStep.slice.size < delStep.to - delStep.from) {\n if (dispatch) {\n let tr = state.tr.step(delStep);\n tr.setSelection(textblockAt(after, \"start\") ? Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos)), 1)\n : NodeSelection.create(tr.doc, tr.mapping.map($cut.pos)));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n }\n // If the next node is an atom, delete it\n if (after.isAtom && $cut.depth == $cursor.depth - 1) {\n if (dispatch)\n dispatch(state.tr.delete($cut.pos, $cut.pos + after.nodeSize).scrollIntoView());\n return true;\n }\n return false;\n};\n/**\nWhen the selection is empty and at the end of a textblock, select\nthe node coming after that textblock, if possible. This is intended\nto be bound to keys like delete, after\n[`joinForward`](https://prosemirror.net/docs/ref/#commands.joinForward) and similar deleting\ncommands, to provide a fall-back behavior when the schema doesn't\nallow deletion at the selected point.\n*/\nconst selectNodeForward = (state, dispatch, view) => {\n let { $head, empty } = state.selection, $cut = $head;\n if (!empty)\n return false;\n if ($head.parent.isTextblock) {\n if (view ? !view.endOfTextblock(\"forward\", state) : $head.parentOffset < $head.parent.content.size)\n return false;\n $cut = findCutAfter($head);\n }\n let node = $cut && $cut.nodeAfter;\n if (!node || !NodeSelection.isSelectable(node))\n return false;\n if (dispatch)\n dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos)).scrollIntoView());\n return true;\n};\nfunction findCutAfter($pos) {\n if (!$pos.parent.type.spec.isolating)\n for (let i = $pos.depth - 1; i >= 0; i--) {\n let parent = $pos.node(i);\n if ($pos.index(i) + 1 < parent.childCount)\n return $pos.doc.resolve($pos.after(i + 1));\n if (parent.type.spec.isolating)\n break;\n }\n return null;\n}\n/**\nJoin the selected block or, if there is a text selection, the\nclosest ancestor block of the selection that can be joined, with\nthe sibling above it.\n*/\nconst joinUp = (state, dispatch) => {\n let sel = state.selection, nodeSel = sel instanceof NodeSelection, point;\n if (nodeSel) {\n if (sel.node.isTextblock || !canJoin(state.doc, sel.from))\n return false;\n point = sel.from;\n }\n else {\n point = joinPoint(state.doc, sel.from, -1);\n if (point == null)\n return false;\n }\n if (dispatch) {\n let tr = state.tr.join(point);\n if (nodeSel)\n tr.setSelection(NodeSelection.create(tr.doc, point - state.doc.resolve(point).nodeBefore.nodeSize));\n dispatch(tr.scrollIntoView());\n }\n return true;\n};\n/**\nJoin the selected block, or the closest ancestor of the selection\nthat can be joined, with the sibling after it.\n*/\nconst joinDown = (state, dispatch) => {\n let sel = state.selection, point;\n if (sel instanceof NodeSelection) {\n if (sel.node.isTextblock || !canJoin(state.doc, sel.to))\n return false;\n point = sel.to;\n }\n else {\n point = joinPoint(state.doc, sel.to, 1);\n if (point == null)\n return false;\n }\n if (dispatch)\n dispatch(state.tr.join(point).scrollIntoView());\n return true;\n};\n/**\nLift the selected block, or the closest ancestor block of the\nselection that can be lifted, out of its parent node.\n*/\nconst lift = (state, dispatch) => {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to), target = range && liftTarget(range);\n if (target == null)\n return false;\n if (dispatch)\n dispatch(state.tr.lift(range, target).scrollIntoView());\n return true;\n};\n/**\nIf the selection is in a node whose type has a truthy\n[`code`](https://prosemirror.net/docs/ref/#model.NodeSpec.code) property in its spec, replace the\nselection with a newline character.\n*/\nconst newlineInCode = (state, dispatch) => {\n let { $head, $anchor } = state.selection;\n if (!$head.parent.type.spec.code || !$head.sameParent($anchor))\n return false;\n if (dispatch)\n dispatch(state.tr.insertText(\"\\n\").scrollIntoView());\n return true;\n};\nfunction defaultBlockAt(match) {\n for (let i = 0; i < match.edgeCount; i++) {\n let { type } = match.edge(i);\n if (type.isTextblock && !type.hasRequiredAttrs())\n return type;\n }\n return null;\n}\n/**\nWhen the selection is in a node with a truthy\n[`code`](https://prosemirror.net/docs/ref/#model.NodeSpec.code) property in its spec, create a\ndefault block after the code block, and move the cursor there.\n*/\nconst exitCode = (state, dispatch) => {\n let { $head, $anchor } = state.selection;\n if (!$head.parent.type.spec.code || !$head.sameParent($anchor))\n return false;\n let above = $head.node(-1), after = $head.indexAfter(-1), type = defaultBlockAt(above.contentMatchAt(after));\n if (!type || !above.canReplaceWith(after, after, type))\n return false;\n if (dispatch) {\n let pos = $head.after(), tr = state.tr.replaceWith(pos, pos, type.createAndFill());\n tr.setSelection(Selection.near(tr.doc.resolve(pos), 1));\n dispatch(tr.scrollIntoView());\n }\n return true;\n};\n/**\nIf a block node is selected, create an empty paragraph before (if\nit is its parent's first child) or after it.\n*/\nconst createParagraphNear = (state, dispatch) => {\n let sel = state.selection, { $from, $to } = sel;\n if (sel instanceof AllSelection || $from.parent.inlineContent || $to.parent.inlineContent)\n return false;\n let type = defaultBlockAt($to.parent.contentMatchAt($to.indexAfter()));\n if (!type || !type.isTextblock)\n return false;\n if (dispatch) {\n let side = (!$from.parentOffset && $to.index() < $to.parent.childCount ? $from : $to).pos;\n let tr = state.tr.insert(side, type.createAndFill());\n tr.setSelection(TextSelection.create(tr.doc, side + 1));\n dispatch(tr.scrollIntoView());\n }\n return true;\n};\n/**\nIf the cursor is in an empty textblock that can be lifted, lift the\nblock.\n*/\nconst liftEmptyBlock = (state, dispatch) => {\n let { $cursor } = state.selection;\n if (!$cursor || $cursor.parent.content.size)\n return false;\n if ($cursor.depth > 1 && $cursor.after() != $cursor.end(-1)) {\n let before = $cursor.before();\n if (canSplit(state.doc, before)) {\n if (dispatch)\n dispatch(state.tr.split(before).scrollIntoView());\n return true;\n }\n }\n let range = $cursor.blockRange(), target = range && liftTarget(range);\n if (target == null)\n return false;\n if (dispatch)\n dispatch(state.tr.lift(range, target).scrollIntoView());\n return true;\n};\n/**\nCreate a variant of [`splitBlock`](https://prosemirror.net/docs/ref/#commands.splitBlock) that uses\na custom function to determine the type of the newly split off block.\n*/\nfunction splitBlockAs(splitNode) {\n return (state, dispatch) => {\n let { $from, $to } = state.selection;\n if (state.selection instanceof NodeSelection && state.selection.node.isBlock) {\n if (!$from.parentOffset || !canSplit(state.doc, $from.pos))\n return false;\n if (dispatch)\n dispatch(state.tr.split($from.pos).scrollIntoView());\n return true;\n }\n if (!$from.depth)\n return false;\n let types = [];\n let splitDepth, deflt, atEnd = false, atStart = false;\n for (let d = $from.depth;; d--) {\n let node = $from.node(d);\n if (node.isBlock) {\n atEnd = $from.end(d) == $from.pos + ($from.depth - d);\n atStart = $from.start(d) == $from.pos - ($from.depth - d);\n deflt = defaultBlockAt($from.node(d - 1).contentMatchAt($from.indexAfter(d - 1)));\n let splitType = splitNode && splitNode($to.parent, atEnd, $from);\n types.unshift(splitType || (atEnd && deflt ? { type: deflt } : null));\n splitDepth = d;\n break;\n }\n else {\n if (d == 1)\n return false;\n types.unshift(null);\n }\n }\n let tr = state.tr;\n if (state.selection instanceof TextSelection || state.selection instanceof AllSelection)\n tr.deleteSelection();\n let splitPos = tr.mapping.map($from.pos);\n let can = canSplit(tr.doc, splitPos, types.length, types);\n if (!can) {\n types[0] = deflt ? { type: deflt } : null;\n can = canSplit(tr.doc, splitPos, types.length, types);\n }\n if (!can)\n return false;\n tr.split(splitPos, types.length, types);\n if (!atEnd && atStart && $from.node(splitDepth).type != deflt) {\n let first = tr.mapping.map($from.before(splitDepth)), $first = tr.doc.resolve(first);\n if (deflt && $from.node(splitDepth - 1).canReplaceWith($first.index(), $first.index() + 1, deflt))\n tr.setNodeMarkup(tr.mapping.map($from.before(splitDepth)), deflt);\n }\n if (dispatch)\n dispatch(tr.scrollIntoView());\n return true;\n };\n}\n/**\nSplit the parent block of the selection. If the selection is a text\nselection, also delete its content.\n*/\nconst splitBlock = splitBlockAs();\n/**\nActs like [`splitBlock`](https://prosemirror.net/docs/ref/#commands.splitBlock), but without\nresetting the set of active marks at the cursor.\n*/\nconst splitBlockKeepMarks = (state, dispatch) => {\n return splitBlock(state, dispatch && (tr => {\n let marks = state.storedMarks || (state.selection.$to.parentOffset && state.selection.$from.marks());\n if (marks)\n tr.ensureMarks(marks);\n dispatch(tr);\n }));\n};\n/**\nMove the selection to the node wrapping the current selection, if\nany. (Will not select the document node.)\n*/\nconst selectParentNode = (state, dispatch) => {\n let { $from, to } = state.selection, pos;\n let same = $from.sharedDepth(to);\n if (same == 0)\n return false;\n pos = $from.before(same);\n if (dispatch)\n dispatch(state.tr.setSelection(NodeSelection.create(state.doc, pos)));\n return true;\n};\n/**\nSelect the whole document.\n*/\nconst selectAll = (state, dispatch) => {\n if (dispatch)\n dispatch(state.tr.setSelection(new AllSelection(state.doc)));\n return true;\n};\nfunction joinMaybeClear(state, $pos, dispatch) {\n let before = $pos.nodeBefore, after = $pos.nodeAfter, index = $pos.index();\n if (!before || !after || !before.type.compatibleContent(after.type))\n return false;\n if (!before.content.size && $pos.parent.canReplace(index - 1, index)) {\n if (dispatch)\n dispatch(state.tr.delete($pos.pos - before.nodeSize, $pos.pos).scrollIntoView());\n return true;\n }\n if (!$pos.parent.canReplace(index, index + 1) || !(after.isTextblock || canJoin(state.doc, $pos.pos)))\n return false;\n if (dispatch)\n dispatch(state.tr.join($pos.pos).scrollIntoView());\n return true;\n}\nfunction deleteBarrier(state, $cut, dispatch, dir) {\n let before = $cut.nodeBefore, after = $cut.nodeAfter, conn, match;\n let isolated = before.type.spec.isolating || after.type.spec.isolating;\n if (!isolated && joinMaybeClear(state, $cut, dispatch))\n return true;\n let canDelAfter = !isolated && $cut.parent.canReplace($cut.index(), $cut.index() + 1);\n if (canDelAfter &&\n (conn = (match = before.contentMatchAt(before.childCount)).findWrapping(after.type)) &&\n match.matchType(conn[0] || after.type).validEnd) {\n if (dispatch) {\n let end = $cut.pos + after.nodeSize, wrap = Fragment.empty;\n for (let i = conn.length - 1; i >= 0; i--)\n wrap = Fragment.from(conn[i].create(null, wrap));\n wrap = Fragment.from(before.copy(wrap));\n let tr = state.tr.step(new ReplaceAroundStep($cut.pos - 1, end, $cut.pos, end, new Slice(wrap, 1, 0), conn.length, true));\n let $joinAt = tr.doc.resolve(end + 2 * conn.length);\n if ($joinAt.nodeAfter && $joinAt.nodeAfter.type == before.type &&\n canJoin(tr.doc, $joinAt.pos))\n tr.join($joinAt.pos);\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n let selAfter = after.type.spec.isolating || (dir > 0 && isolated) ? null : Selection.findFrom($cut, 1);\n let range = selAfter && selAfter.$from.blockRange(selAfter.$to), target = range && liftTarget(range);\n if (target != null && target >= $cut.depth) {\n if (dispatch)\n dispatch(state.tr.lift(range, target).scrollIntoView());\n return true;\n }\n if (canDelAfter && textblockAt(after, \"start\", true) && textblockAt(before, \"end\")) {\n let at = before, wrap = [];\n for (;;) {\n wrap.push(at);\n if (at.isTextblock)\n break;\n at = at.lastChild;\n }\n let afterText = after, afterDepth = 1;\n for (; !afterText.isTextblock; afterText = afterText.firstChild)\n afterDepth++;\n if (at.canReplace(at.childCount, at.childCount, afterText.content)) {\n if (dispatch) {\n let end = Fragment.empty;\n for (let i = wrap.length - 1; i >= 0; i--)\n end = Fragment.from(wrap[i].copy(end));\n let tr = state.tr.step(new ReplaceAroundStep($cut.pos - wrap.length, $cut.pos + after.nodeSize, $cut.pos + afterDepth, $cut.pos + after.nodeSize - afterDepth, new Slice(end, wrap.length, 0), 0, true));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n }\n return false;\n}\nfunction selectTextblockSide(side) {\n return function (state, dispatch) {\n let sel = state.selection, $pos = side < 0 ? sel.$from : sel.$to;\n let depth = $pos.depth;\n while ($pos.node(depth).isInline) {\n if (!depth)\n return false;\n depth--;\n }\n if (!$pos.node(depth).isTextblock)\n return false;\n if (dispatch)\n dispatch(state.tr.setSelection(TextSelection.create(state.doc, side < 0 ? $pos.start(depth) : $pos.end(depth))));\n return true;\n };\n}\n/**\nMoves the cursor to the start of current text block.\n*/\nconst selectTextblockStart = selectTextblockSide(-1);\n/**\nMoves the cursor to the end of current text block.\n*/\nconst selectTextblockEnd = selectTextblockSide(1);\n// Parameterized commands\n/**\nWrap the selection in a node of the given type with the given\nattributes.\n*/\nfunction wrapIn(nodeType, attrs = null) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to), wrapping = range && findWrapping(range, nodeType, attrs);\n if (!wrapping)\n return false;\n if (dispatch)\n dispatch(state.tr.wrap(range, wrapping).scrollIntoView());\n return true;\n };\n}\n/**\nReturns a command that tries to set the selected textblocks to the\ngiven node type with the given attributes.\n*/\nfunction setBlockType(nodeType, attrs = null) {\n return function (state, dispatch) {\n let applicable = false;\n for (let i = 0; i < state.selection.ranges.length && !applicable; i++) {\n let { $from: { pos: from }, $to: { pos: to } } = state.selection.ranges[i];\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (applicable)\n return false;\n if (!node.isTextblock || node.hasMarkup(nodeType, attrs))\n return;\n if (node.type == nodeType) {\n applicable = true;\n }\n else {\n let $pos = state.doc.resolve(pos), index = $pos.index();\n applicable = $pos.parent.canReplaceWith(index, index + 1, nodeType);\n }\n });\n }\n if (!applicable)\n return false;\n if (dispatch) {\n let tr = state.tr;\n for (let i = 0; i < state.selection.ranges.length; i++) {\n let { $from: { pos: from }, $to: { pos: to } } = state.selection.ranges[i];\n tr.setBlockType(from, to, nodeType, attrs);\n }\n dispatch(tr.scrollIntoView());\n }\n return true;\n };\n}\nfunction markApplies(doc, ranges, type, enterAtoms) {\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n let can = $from.depth == 0 ? doc.inlineContent && doc.type.allowsMarkType(type) : false;\n doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\n if (can || !enterAtoms && node.isAtom && node.isInline && pos >= $from.pos && pos + node.nodeSize <= $to.pos)\n return false;\n can = node.inlineContent && node.type.allowsMarkType(type);\n });\n if (can)\n return true;\n }\n return false;\n}\nfunction removeInlineAtoms(ranges) {\n let result = [];\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n $from.doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\n if (node.isAtom && node.content.size && node.isInline && pos >= $from.pos && pos + node.nodeSize <= $to.pos) {\n if (pos + 1 > $from.pos)\n result.push(new SelectionRange($from, $from.doc.resolve(pos + 1)));\n $from = $from.doc.resolve(pos + 1 + node.content.size);\n return false;\n }\n });\n if ($from.pos < $to.pos)\n result.push(new SelectionRange($from, $to));\n }\n return result;\n}\n/**\nCreate a command function that toggles the given mark with the\ngiven attributes. Will return `false` when the current selection\ndoesn't support that mark. This will remove the mark if any marks\nof that type exist in the selection, or add it otherwise. If the\nselection is empty, this applies to the [stored\nmarks](https://prosemirror.net/docs/ref/#state.EditorState.storedMarks) instead of a range of the\ndocument.\n*/\nfunction toggleMark(markType, attrs = null, options) {\n let removeWhenPresent = (options && options.removeWhenPresent) !== false;\n let enterAtoms = (options && options.enterInlineAtoms) !== false;\n let dropSpace = !(options && options.includeWhitespace);\n return function (state, dispatch) {\n let { empty, $cursor, ranges } = state.selection;\n if ((empty && !$cursor) || !markApplies(state.doc, ranges, markType, enterAtoms))\n return false;\n if (dispatch) {\n if ($cursor) {\n if (markType.isInSet(state.storedMarks || $cursor.marks()))\n dispatch(state.tr.removeStoredMark(markType));\n else\n dispatch(state.tr.addStoredMark(markType.create(attrs)));\n }\n else {\n let add, tr = state.tr;\n if (!enterAtoms)\n ranges = removeInlineAtoms(ranges);\n if (removeWhenPresent) {\n add = !ranges.some(r => state.doc.rangeHasMark(r.$from.pos, r.$to.pos, markType));\n }\n else {\n add = !ranges.every(r => {\n let missing = false;\n tr.doc.nodesBetween(r.$from.pos, r.$to.pos, (node, pos, parent) => {\n if (missing)\n return false;\n missing = !markType.isInSet(node.marks) && !!parent && parent.type.allowsMarkType(markType) &&\n !(node.isText && /^\\s*$/.test(node.textBetween(Math.max(0, r.$from.pos - pos), Math.min(node.nodeSize, r.$to.pos - pos))));\n });\n return !missing;\n });\n }\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n if (!add) {\n tr.removeMark($from.pos, $to.pos, markType);\n }\n else {\n let from = $from.pos, to = $to.pos, start = $from.nodeAfter, end = $to.nodeBefore;\n let spaceStart = dropSpace && start && start.isText ? /^\\s*/.exec(start.text)[0].length : 0;\n let spaceEnd = dropSpace && end && end.isText ? /\\s*$/.exec(end.text)[0].length : 0;\n if (from + spaceStart < to) {\n from += spaceStart;\n to -= spaceEnd;\n }\n tr.addMark(from, to, markType.create(attrs));\n }\n }\n dispatch(tr.scrollIntoView());\n }\n }\n return true;\n };\n}\nfunction wrapDispatchForJoin(dispatch, isJoinable) {\n return (tr) => {\n if (!tr.isGeneric)\n return dispatch(tr);\n let ranges = [];\n for (let i = 0; i < tr.mapping.maps.length; i++) {\n let map = tr.mapping.maps[i];\n for (let j = 0; j < ranges.length; j++)\n ranges[j] = map.map(ranges[j]);\n map.forEach((_s, _e, from, to) => ranges.push(from, to));\n }\n // Figure out which joinable points exist inside those ranges,\n // by checking all node boundaries in their parent nodes.\n let joinable = [];\n for (let i = 0; i < ranges.length; i += 2) {\n let from = ranges[i], to = ranges[i + 1];\n let $from = tr.doc.resolve(from), depth = $from.sharedDepth(to), parent = $from.node(depth);\n for (let index = $from.indexAfter(depth), pos = $from.after(depth + 1); pos <= to; ++index) {\n let after = parent.maybeChild(index);\n if (!after)\n break;\n if (index && joinable.indexOf(pos) == -1) {\n let before = parent.child(index - 1);\n if (before.type == after.type && isJoinable(before, after))\n joinable.push(pos);\n }\n pos += after.nodeSize;\n }\n }\n // Join the joinable points\n joinable.sort((a, b) => a - b);\n for (let i = joinable.length - 1; i >= 0; i--) {\n if (canJoin(tr.doc, joinable[i]))\n tr.join(joinable[i]);\n }\n dispatch(tr);\n };\n}\n/**\nWrap a command so that, when it produces a transform that causes\ntwo joinable nodes to end up next to each other, those are joined.\nNodes are considered joinable when they are of the same type and\nwhen the `isJoinable` predicate returns true for them or, if an\narray of strings was passed, if their node type name is in that\narray.\n*/\nfunction autoJoin(command, isJoinable) {\n let canJoin = Array.isArray(isJoinable) ? (node) => isJoinable.indexOf(node.type.name) > -1\n : isJoinable;\n return (state, dispatch, view) => command(state, dispatch && wrapDispatchForJoin(dispatch, canJoin), view);\n}\n/**\nCombine a number of command functions into a single function (which\ncalls them one by one until one returns true).\n*/\nfunction chainCommands(...commands) {\n return function (state, dispatch, view) {\n for (let i = 0; i < commands.length; i++)\n if (commands[i](state, dispatch, view))\n return true;\n return false;\n };\n}\nlet backspace = chainCommands(deleteSelection, joinBackward, selectNodeBackward);\nlet del = chainCommands(deleteSelection, joinForward, selectNodeForward);\n/**\nA basic keymap containing bindings not specific to any schema.\nBinds the following keys (when multiple commands are listed, they\nare chained with [`chainCommands`](https://prosemirror.net/docs/ref/#commands.chainCommands)):\n\n* **Enter** to `newlineInCode`, `createParagraphNear`, `liftEmptyBlock`, `splitBlock`\n* **Mod-Enter** to `exitCode`\n* **Backspace** and **Mod-Backspace** to `deleteSelection`, `joinBackward`, `selectNodeBackward`\n* **Delete** and **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`\n* **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`\n* **Mod-a** to `selectAll`\n*/\nconst pcBaseKeymap = {\n \"Enter\": chainCommands(newlineInCode, createParagraphNear, liftEmptyBlock, splitBlock),\n \"Mod-Enter\": exitCode,\n \"Backspace\": backspace,\n \"Mod-Backspace\": backspace,\n \"Shift-Backspace\": backspace,\n \"Delete\": del,\n \"Mod-Delete\": del,\n \"Mod-a\": selectAll\n};\n/**\nA copy of `pcBaseKeymap` that also binds **Ctrl-h** like Backspace,\n**Ctrl-d** like Delete, **Alt-Backspace** like Ctrl-Backspace, and\n**Ctrl-Alt-Backspace**, **Alt-Delete**, and **Alt-d** like\nCtrl-Delete.\n*/\nconst macBaseKeymap = {\n \"Ctrl-h\": pcBaseKeymap[\"Backspace\"],\n \"Alt-Backspace\": pcBaseKeymap[\"Mod-Backspace\"],\n \"Ctrl-d\": pcBaseKeymap[\"Delete\"],\n \"Ctrl-Alt-Backspace\": pcBaseKeymap[\"Mod-Delete\"],\n \"Alt-Delete\": pcBaseKeymap[\"Mod-Delete\"],\n \"Alt-d\": pcBaseKeymap[\"Mod-Delete\"],\n \"Ctrl-a\": selectTextblockStart,\n \"Ctrl-e\": selectTextblockEnd\n};\nfor (let key in pcBaseKeymap)\n macBaseKeymap[key] = pcBaseKeymap[key];\nconst mac = typeof navigator != \"undefined\" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform)\n // @ts-ignore\n : typeof os != \"undefined\" && os.platform ? os.platform() == \"darwin\" : false;\n/**\nDepending on the detected platform, this will hold\n[`pcBasekeymap`](https://prosemirror.net/docs/ref/#commands.pcBaseKeymap) or\n[`macBaseKeymap`](https://prosemirror.net/docs/ref/#commands.macBaseKeymap).\n*/\nconst baseKeymap = mac ? macBaseKeymap : pcBaseKeymap;\n\nexport { autoJoin, baseKeymap, chainCommands, createParagraphNear, deleteSelection, exitCode, joinBackward, joinDown, joinForward, joinTextblockBackward, joinTextblockForward, joinUp, lift, liftEmptyBlock, macBaseKeymap, newlineInCode, pcBaseKeymap, selectAll, selectNodeBackward, selectNodeForward, selectParentNode, selectTextblockEnd, selectTextblockStart, setBlockType, splitBlock, splitBlockAs, splitBlockKeepMarks, toggleMark, wrapIn };\n","import { Plugin } from 'prosemirror-state';\nimport { findWrapping, canJoin } from 'prosemirror-transform';\n\n/**\nInput rules are regular expressions describing a piece of text\nthat, when typed, causes something to happen. This might be\nchanging two dashes into an emdash, wrapping a paragraph starting\nwith `\"> \"` into a blockquote, or something entirely different.\n*/\nclass InputRule {\n /**\n Create an input rule. The rule applies when the user typed\n something and the text directly in front of the cursor matches\n `match`, which should end with `$`.\n \n The `handler` can be a string, in which case the matched text, or\n the first matched group in the regexp, is replaced by that\n string.\n \n Or a it can be a function, which will be called with the match\n array produced by\n [`RegExp.exec`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec),\n as well as the start and end of the matched range, and which can\n return a [transaction](https://prosemirror.net/docs/ref/#state.Transaction) that describes the\n rule's effect, or null to indicate the input was not handled.\n */\n constructor(\n /**\n @internal\n */\n match, handler, options = {}) {\n this.match = match;\n this.match = match;\n this.handler = typeof handler == \"string\" ? stringHandler(handler) : handler;\n this.undoable = options.undoable !== false;\n this.inCode = options.inCode || false;\n this.inCodeMark = options.inCodeMark !== false;\n }\n}\nfunction stringHandler(string) {\n return function (state, match, start, end) {\n let insert = string;\n if (match[1]) {\n let offset = match[0].lastIndexOf(match[1]);\n insert += match[0].slice(offset + match[1].length);\n start += offset;\n let cutOff = start - end;\n if (cutOff > 0) {\n insert = match[0].slice(offset - cutOff, offset) + insert;\n start = end;\n }\n }\n return state.tr.insertText(insert, start, end);\n };\n}\nconst MAX_MATCH = 500;\n/**\nCreate an input rules plugin. When enabled, it will cause text\ninput that matches any of the given rules to trigger the rule's\naction.\n*/\nfunction inputRules({ rules }) {\n let plugin = new Plugin({\n state: {\n init() { return null; },\n apply(tr, prev) {\n let stored = tr.getMeta(this);\n if (stored)\n return stored;\n return tr.selectionSet || tr.docChanged ? null : prev;\n }\n },\n props: {\n handleTextInput(view, from, to, text) {\n return run(view, from, to, text, rules, plugin);\n },\n handleDOMEvents: {\n compositionend: (view) => {\n setTimeout(() => {\n let { $cursor } = view.state.selection;\n if ($cursor)\n run(view, $cursor.pos, $cursor.pos, \"\", rules, plugin);\n });\n }\n }\n },\n isInputRules: true\n });\n return plugin;\n}\nfunction run(view, from, to, text, rules, plugin) {\n if (view.composing)\n return false;\n let state = view.state, $from = state.doc.resolve(from);\n let textBefore = $from.parent.textBetween(Math.max(0, $from.parentOffset - MAX_MATCH), $from.parentOffset, null, \"\\ufffc\") + text;\n for (let i = 0; i < rules.length; i++) {\n let rule = rules[i];\n if (!rule.inCodeMark && $from.marks().some(m => m.type.spec.code))\n continue;\n if ($from.parent.type.spec.code) {\n if (!rule.inCode)\n continue;\n }\n else if (rule.inCode === \"only\") {\n continue;\n }\n let match = rule.match.exec(textBefore);\n if (!match || match[0].length < text.length)\n continue;\n let startPos = from - (match[0].length - text.length);\n if (!rule.inCodeMark) {\n let hasMark = false;\n state.doc.nodesBetween(startPos, $from.pos, node => {\n if (node.isInline && node.marks.some(m => m.type.spec.code))\n hasMark = true;\n });\n if (hasMark)\n continue;\n }\n let tr = rule.handler(state, match, startPos, to);\n if (!tr)\n continue;\n if (rule.undoable)\n tr.setMeta(plugin, { transform: tr, from, to, text });\n view.dispatch(tr);\n return true;\n }\n return false;\n}\n/**\nThis is a command that will undo an input rule, if applying such a\nrule was the last thing that the user did.\n*/\nconst undoInputRule = (state, dispatch) => {\n let plugins = state.plugins;\n for (let i = 0; i < plugins.length; i++) {\n let plugin = plugins[i], undoable;\n if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {\n if (dispatch) {\n let tr = state.tr, toUndo = undoable.transform;\n for (let j = toUndo.steps.length - 1; j >= 0; j--)\n tr.step(toUndo.steps[j].invert(toUndo.docs[j]));\n if (undoable.text) {\n let marks = tr.doc.resolve(undoable.from).marks();\n tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks));\n }\n else {\n tr.delete(undoable.from, undoable.to);\n }\n dispatch(tr);\n }\n return true;\n }\n }\n return false;\n};\n\n/**\nConverts double dashes to an emdash.\n*/\nconst emDash = new InputRule(/--$/, \"—\", { inCodeMark: false });\n/**\nConverts three dots to an ellipsis character.\n*/\nconst ellipsis = new InputRule(/\\.\\.\\.$/, \"…\", { inCodeMark: false });\n/**\n“Smart” opening double quotes.\n*/\nconst openDoubleQuote = new InputRule(/(?:^|[\\s\\{\\[\\(\\<'\"\\u2018\\u201C])(\")$/, \"“\", { inCodeMark: false });\n/**\n“Smart” closing double quotes.\n*/\nconst closeDoubleQuote = new InputRule(/\"$/, \"”\", { inCodeMark: false });\n/**\n“Smart” opening single quotes.\n*/\nconst openSingleQuote = new InputRule(/(?:^|[\\s\\{\\[\\(\\<'\"\\u2018\\u201C])(')$/, \"‘\", { inCodeMark: false });\n/**\n“Smart” closing single quotes.\n*/\nconst closeSingleQuote = new InputRule(/'$/, \"’\", { inCodeMark: false });\n/**\nSmart-quote related input rules.\n*/\nconst smartQuotes = [openDoubleQuote, closeDoubleQuote, openSingleQuote, closeSingleQuote];\n\n/**\nBuild an input rule for automatically wrapping a textblock when a\ngiven string is typed. The `regexp` argument is\ndirectly passed through to the `InputRule` constructor. You'll\nprobably want the regexp to start with `^`, so that the pattern can\nonly occur at the start of a textblock.\n\n`nodeType` is the type of node to wrap in. If it needs attributes,\nyou can either pass them directly, or pass a function that will\ncompute them from the regular expression match.\n\nBy default, if there's a node with the same type above the newly\nwrapped node, the rule will try to [join](https://prosemirror.net/docs/ref/#transform.Transform.join) those\ntwo nodes. You can pass a join predicate, which takes a regular\nexpression match and the node before the wrapped node, and can\nreturn a boolean to indicate whether a join should happen.\n*/\nfunction wrappingInputRule(regexp, nodeType, getAttrs = null, joinPredicate) {\n return new InputRule(regexp, (state, match, start, end) => {\n let attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n let tr = state.tr.delete(start, end);\n let $start = tr.doc.resolve(start), range = $start.blockRange(), wrapping = range && findWrapping(range, nodeType, attrs);\n if (!wrapping)\n return null;\n tr.wrap(range, wrapping);\n let before = tr.doc.resolve(start - 1).nodeBefore;\n if (before && before.type == nodeType && canJoin(tr.doc, start - 1) &&\n (!joinPredicate || joinPredicate(match, before)))\n tr.join(start - 1);\n return tr;\n });\n}\n/**\nBuild an input rule that changes the type of a textblock when the\nmatched text is typed into it. You'll usually want to start your\nregexp with `^` to that it is only matched at the start of a\ntextblock. The optional `getAttrs` parameter can be used to compute\nthe new node's attributes, and works the same as in the\n`wrappingInputRule` function.\n*/\nfunction textblockTypeInputRule(regexp, nodeType, getAttrs = null) {\n return new InputRule(regexp, (state, match, start, end) => {\n let $start = state.doc.resolve(start);\n let attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), nodeType))\n return null;\n return state.tr\n .delete(start, end)\n .setBlockType(start, start, nodeType, attrs);\n });\n}\n\nexport { InputRule, closeDoubleQuote, closeSingleQuote, ellipsis, emDash, inputRules, openDoubleQuote, openSingleQuote, smartQuotes, textblockTypeInputRule, undoInputRule, wrappingInputRule };\n","import { PluginKey, Plugin, NodeSelection } from 'prosemirror-state';\nimport { InputRule } from 'prosemirror-inputrules';\nimport { expectDomTypeError, missingRootElement, getAtomFromSchemaFail } from '@milkdown/exception';\n\nconst nav = typeof navigator != \"undefined\" ? navigator : null;\nconst doc = typeof document != \"undefined\" ? document : null;\nconst agent = nav && nav.userAgent || \"\";\nconst ie_edge = /Edge\\/(\\d+)/.exec(agent);\nconst ie_upto10 = /MSIE \\d/.exec(agent);\nconst ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(agent);\nconst ie = !!(ie_upto10 || ie_11up || ie_edge);\nconst ie_version = ie_upto10 ? document.documentMode : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0;\nconst gecko = !ie && /gecko\\/(\\d+)/i.test(agent);\nconst gecko_version = gecko && +(/Firefox\\/(\\d+)/.exec(agent) || [0, 0])[1];\nconst _chrome = !ie && /Chrome\\/(\\d+)/.exec(agent);\nconst chrome = !!_chrome;\nconst chrome_version = _chrome ? +_chrome[1] : 0;\nconst safari = !ie && !!nav && /Apple Computer/.test(nav.vendor);\nconst ios = safari && (/Mobile\\/\\w+/.test(agent) || !!nav && nav.maxTouchPoints > 2);\nconst mac = ios || (nav ? /Mac/.test(nav.platform) : false);\nconst android = /Android \\d/.test(agent);\nconst webkit = !!doc && \"webkitFontSmoothing\" in doc.documentElement.style;\nconst webkit_version = webkit ? +(/\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0;\n\nvar browser = /*#__PURE__*/Object.freeze({\n __proto__: null,\n android: android,\n chrome: chrome,\n chrome_version: chrome_version,\n gecko: gecko,\n gecko_version: gecko_version,\n ie: ie,\n ie_version: ie_version,\n ios: ios,\n mac: mac,\n safari: safari,\n webkit: webkit,\n webkit_version: webkit_version\n});\n\nfunction run(view, from, to, text, rules, plugin) {\n if (view.composing) return false;\n const state = view.state;\n const $from = state.doc.resolve(from);\n if ($from.parent.type.spec.code) return false;\n const textBefore = $from.parent.textBetween(\n Math.max(0, $from.parentOffset - 500),\n $from.parentOffset,\n void 0,\n \"\\uFFFC\"\n ) + text;\n for (let _matcher of rules) {\n const matcher = _matcher;\n const match = matcher.match.exec(textBefore);\n const tr = match && match[0] && matcher.handler(state, match, from - (match[0].length - text.length), to);\n if (!tr) continue;\n if (matcher.undoable !== false)\n tr.setMeta(plugin, { transform: tr, from, to, text });\n view.dispatch(tr);\n return true;\n }\n return false;\n}\nconst customInputRulesKey = new PluginKey(\"MILKDOWN_CUSTOM_INPUTRULES\");\nfunction customInputRules({ rules }) {\n const plugin = new Plugin({\n key: customInputRulesKey,\n isInputRules: true,\n state: {\n init() {\n return null;\n },\n apply(tr, prev) {\n const stored = tr.getMeta(this);\n if (stored) return stored;\n return tr.selectionSet || tr.docChanged ? null : prev;\n }\n },\n props: {\n handleTextInput(view, from, to, text) {\n return run(view, from, to, text, rules, plugin);\n },\n handleDOMEvents: {\n compositionend: (view) => {\n setTimeout(() => {\n const { $cursor } = view.state.selection;\n if ($cursor) run(view, $cursor.pos, $cursor.pos, \"\", rules, plugin);\n });\n return false;\n }\n },\n handleKeyDown(view, event) {\n if (event.key !== \"Enter\") return false;\n const { $cursor } = view.state.selection;\n if ($cursor)\n return run(view, $cursor.pos, $cursor.pos, \"\\n\", rules, plugin);\n return false;\n }\n }\n });\n return plugin;\n}\n\nfunction markRule(regexp, markType, options = {}) {\n return new InputRule(regexp, (state, match, start, end) => {\n var _a, _b, _c, _d;\n const { tr } = state;\n const matchLength = match.length;\n let group = match[matchLength - 1];\n let fullMatch = match[0];\n let initialStoredMarks = [];\n let markEnd = end;\n const captured = {\n group,\n fullMatch,\n start,\n end\n };\n const result = (_a = options.updateCaptured) == null ? void 0 : _a.call(options, captured);\n Object.assign(captured, result);\n ({ group, fullMatch, start, end } = captured);\n if (fullMatch === null) return null;\n if ((group == null ? void 0 : group.trim()) === \"\") return null;\n if (group) {\n const startSpaces = fullMatch.search(/\\S/);\n const textStart = start + fullMatch.indexOf(group);\n const textEnd = textStart + group.length;\n initialStoredMarks = (_b = tr.storedMarks) != null ? _b : [];\n if (textEnd < end) tr.delete(textEnd, end);\n if (textStart > start) tr.delete(start + startSpaces, textStart);\n markEnd = start + startSpaces + group.length;\n const attrs = (_c = options.getAttr) == null ? void 0 : _c.call(options, match);\n tr.addMark(start, markEnd, markType.create(attrs));\n tr.setStoredMarks(initialStoredMarks);\n (_d = options.beforeDispatch) == null ? void 0 : _d.call(options, { match, start, end, tr });\n }\n return tr;\n });\n}\n\nfunction nodeRule(regexp, nodeType, options = {}) {\n return new InputRule(regexp, (state, match, start, end) => {\n var _a, _b, _c;\n const { tr } = state;\n let group = match[1];\n let fullMatch = match[0];\n const captured = {\n group,\n fullMatch,\n start,\n end\n };\n const result = (_a = options.updateCaptured) == null ? void 0 : _a.call(options, captured);\n Object.assign(captured, result);\n ({ group, fullMatch, start, end } = captured);\n if (fullMatch === null) return null;\n if (!group || group.trim() === \"\") return null;\n const attrs = (_b = options.getAttr) == null ? void 0 : _b.call(options, match);\n const node = nodeType.createAndFill(attrs);\n if (node) {\n tr.replaceRangeWith(\n nodeType.isBlock ? tr.doc.resolve(start).before() : start,\n end,\n node\n );\n (_c = options.beforeDispatch) == null ? void 0 : _c.call(options, {\n match: [fullMatch, group != null ? group : \"\"],\n start,\n end,\n tr\n });\n }\n return tr;\n });\n}\n\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction calculateNodePosition(view, target, handler) {\n const state = view.state;\n const { from } = state.selection;\n const { node } = view.domAtPos(from);\n const element = node instanceof Text ? node.parentElement : node;\n if (!(element instanceof HTMLElement)) throw expectDomTypeError(element);\n const selectedNodeRect = element.getBoundingClientRect();\n const targetNodeRect = target.getBoundingClientRect();\n const parent = target.parentElement;\n if (!parent) throw expectDomTypeError(parent);\n const parentNodeRect = parent.getBoundingClientRect();\n const [top, left] = handler(selectedNodeRect, targetNodeRect, parentNodeRect);\n target.style.top = `${top}px`;\n target.style.left = `${left}px`;\n}\nfunction calculateTextPosition(view, target, handler) {\n const state = view.state;\n const { from, to } = state.selection;\n const start = view.coordsAtPos(from);\n const end = view.coordsAtPos(to);\n const targetNodeRect = target.getBoundingClientRect();\n const parent = target.parentElement;\n if (!parent) throw missingRootElement();\n const parentNodeRect = parent.getBoundingClientRect();\n const [top, left] = handler(start, end, targetNodeRect, parentNodeRect);\n target.style.top = `${top}px`;\n target.style.left = `${left}px`;\n}\nfunction minMax(value = 0, min = 0, max = 0) {\n return Math.min(Math.max(value, min), max);\n}\nfunction posToDOMRect(view, from, to) {\n const minPos = 0;\n const maxPos = view.state.doc.content.size;\n const resolvedFrom = minMax(from, minPos, maxPos);\n const resolvedEnd = minMax(to, minPos, maxPos);\n const start = view.coordsAtPos(resolvedFrom);\n const end = view.coordsAtPos(resolvedEnd, -1);\n const top = Math.min(start.top, end.top);\n const bottom = Math.max(start.bottom, end.bottom);\n const left = Math.min(start.left, end.left);\n const right = Math.max(start.right, end.right);\n const width = right - left;\n const height = bottom - top;\n const x = left;\n const y = top;\n const data = {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x,\n y\n };\n return __spreadProps(__spreadValues({}, data), {\n toJSON: () => data\n });\n}\n\nfunction cloneTr(tr) {\n return Object.assign(Object.create(tr), tr).setTime(Date.now());\n}\nfunction equalNodeType(nodeType, node) {\n return Array.isArray(nodeType) && nodeType.includes(node.type) || node.type === nodeType;\n}\nfunction isTextOnlySlice(slice) {\n if (slice.content.childCount === 1) {\n const node = slice.content.firstChild;\n if ((node == null ? void 0 : node.type.name) === \"text\" && node.marks.length === 0) return node;\n if ((node == null ? void 0 : node.type.name) === \"paragraph\" && node.childCount === 1) {\n const _node = node.firstChild;\n if ((_node == null ? void 0 : _node.type.name) === \"text\" && _node.marks.length === 0) return _node;\n }\n }\n return false;\n}\n\nfunction flatten(node, descend = true) {\n const result = [];\n node.descendants((child, pos) => {\n result.push({ node: child, pos });\n if (!descend) return false;\n return void 0;\n });\n return result;\n}\nfunction findChildren(predicate) {\n return (node, descend) => flatten(node, descend).filter((child) => predicate(child.node));\n}\nfunction findChildrenByMark(node, markType, descend) {\n return findChildren((child) => Boolean(markType.isInSet(child.marks)))(\n node,\n descend\n );\n}\nfunction findParent(predicate) {\n return ($pos) => {\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\n const node = $pos.node(depth);\n if (predicate(node)) {\n const from = $pos.before(depth);\n const to = $pos.after(depth);\n return {\n from,\n to,\n node\n };\n }\n }\n return void 0;\n };\n}\nfunction findParentNodeType($pos, nodeType) {\n return findParent((node) => node.type === nodeType)($pos);\n}\n\nfunction getNodeFromSchema(type, schema) {\n const target = schema.nodes[type];\n if (!target) throw getAtomFromSchemaFail(\"node\", type);\n return target;\n}\nfunction getMarkFromSchema(type, schema) {\n const target = schema.marks[type];\n if (!target) throw getAtomFromSchemaFail(\"mark\", type);\n return target;\n}\n\nfunction findParentNodeClosestToPos(predicate) {\n return ($pos) => {\n for (let i = $pos.depth; i > 0; i--) {\n const node = $pos.node(i);\n if (predicate(node)) {\n return {\n pos: i > 0 ? $pos.before(i) : 0,\n start: $pos.start(i),\n depth: i,\n node\n };\n }\n }\n return void 0;\n };\n}\nfunction findParentNode(predicate) {\n return (selection) => {\n return findParentNodeClosestToPos(predicate)(selection.$from);\n };\n}\nfunction findSelectedNodeOfType(selection, nodeType) {\n if (!(selection instanceof NodeSelection)) return;\n const { node, $from } = selection;\n if (equalNodeType(nodeType, node))\n return {\n node,\n pos: $from.pos,\n start: $from.start($from.depth),\n depth: $from.depth\n };\n return void 0;\n}\nconst findNodeInSelection = (state, node) => {\n const { selection, doc } = state;\n if (selection instanceof NodeSelection) {\n return {\n hasNode: selection.node.type === node,\n pos: selection.from,\n target: selection.node\n };\n }\n const { from, to } = selection;\n let hasNode = false;\n let pos = -1;\n let target = null;\n doc.nodesBetween(from, to, (n, p) => {\n if (target) return false;\n if (n.type === node) {\n hasNode = true;\n pos = p;\n target = n;\n return false;\n }\n return true;\n });\n return {\n hasNode,\n pos,\n target\n };\n};\n\nexport { browser, calculateNodePosition, calculateTextPosition, cloneTr, customInputRules, customInputRulesKey, equalNodeType, findChildren, findChildrenByMark, findNodeInSelection, findParent, findParentNode, findParentNodeClosestToPos, findParentNodeType, findSelectedNodeOfType, flatten, getMarkFromSchema, getNodeFromSchema, isTextOnlySlice, markRule, nodeRule, posToDOMRect };\n//# sourceMappingURL=index.js.map\n","export var base = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 10: \"Enter\",\n 12: \"NumLock\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 44: \"PrintScreen\",\n 45: \"Insert\",\n 46: \"Delete\",\n 59: \";\",\n 61: \"=\",\n 91: \"Meta\",\n 92: \"Meta\",\n 106: \"*\",\n 107: \"+\",\n 108: \",\",\n 109: \"-\",\n 110: \".\",\n 111: \"/\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 160: \"Shift\",\n 161: \"Shift\",\n 162: \"Control\",\n 163: \"Control\",\n 164: \"Alt\",\n 165: \"Alt\",\n 173: \"-\",\n 186: \";\",\n 187: \"=\",\n 188: \",\",\n 189: \"-\",\n 190: \".\",\n 191: \"/\",\n 192: \"`\",\n 219: \"[\",\n 220: \"\\\\\",\n 221: \"]\",\n 222: \"'\"\n}\n\nexport var shift = {\n 48: \")\",\n 49: \"!\",\n 50: \"@\",\n 51: \"#\",\n 52: \"$\",\n 53: \"%\",\n 54: \"^\",\n 55: \"&\",\n 56: \"*\",\n 57: \"(\",\n 59: \":\",\n 61: \"+\",\n 173: \"_\",\n 186: \":\",\n 187: \"+\",\n 188: \"<\",\n 189: \"_\",\n 190: \">\",\n 191: \"?\",\n 192: \"~\",\n 219: \"{\",\n 220: \"|\",\n 221: \"}\",\n 222: \"\\\"\"\n}\n\nvar mac = typeof navigator != \"undefined\" && /Mac/.test(navigator.platform)\nvar ie = typeof navigator != \"undefined\" && /MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent)\n\n// Fill in the digit keys\nfor (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i)\n\n// The function keys\nfor (var i = 1; i <= 24; i++) base[i + 111] = \"F\" + i\n\n// And the alphabetic keys\nfor (var i = 65; i <= 90; i++) {\n base[i] = String.fromCharCode(i + 32)\n shift[i] = String.fromCharCode(i)\n}\n\n// For each code that doesn't have a shift-equivalent, copy the base name\nfor (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code]\n\nexport function keyName(event) {\n // On macOS, keys held with Shift and Cmd don't reflect the effect of Shift in `.key`.\n // On IE, shift effect is never included in `.key`.\n var ignoreKey = mac && event.metaKey && event.shiftKey && !event.ctrlKey && !event.altKey ||\n ie && event.shiftKey && event.key && event.key.length == 1 ||\n event.key == \"Unidentified\"\n var name = (!ignoreKey && event.key) ||\n (event.shiftKey ? shift : base)[event.keyCode] ||\n event.key || \"Unidentified\"\n // Edge sometimes produces wrong names (Issue #3)\n if (name == \"Esc\") name = \"Escape\"\n if (name == \"Del\") name = \"Delete\"\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/\n if (name == \"Left\") name = \"ArrowLeft\"\n if (name == \"Up\") name = \"ArrowUp\"\n if (name == \"Right\") name = \"ArrowRight\"\n if (name == \"Down\") name = \"ArrowDown\"\n return name\n}\n","import { keyName, base } from 'w3c-keyname';\nimport { Plugin } from 'prosemirror-state';\n\nconst mac = typeof navigator != \"undefined\" && /Mac|iP(hone|[oa]d)/.test(navigator.platform);\nconst windows = typeof navigator != \"undefined\" && /Win/.test(navigator.platform);\nfunction normalizeKeyName(name) {\n let parts = name.split(/-(?!$)/), result = parts[parts.length - 1];\n if (result == \"Space\")\n result = \" \";\n let alt, ctrl, shift, meta;\n for (let i = 0; i < parts.length - 1; i++) {\n let mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod))\n meta = true;\n else if (/^a(lt)?$/i.test(mod))\n alt = true;\n else if (/^(c|ctrl|control)$/i.test(mod))\n ctrl = true;\n else if (/^s(hift)?$/i.test(mod))\n shift = true;\n else if (/^mod$/i.test(mod)) {\n if (mac)\n meta = true;\n else\n ctrl = true;\n }\n else\n throw new Error(\"Unrecognized modifier name: \" + mod);\n }\n if (alt)\n result = \"Alt-\" + result;\n if (ctrl)\n result = \"Ctrl-\" + result;\n if (meta)\n result = \"Meta-\" + result;\n if (shift)\n result = \"Shift-\" + result;\n return result;\n}\nfunction normalize(map) {\n let copy = Object.create(null);\n for (let prop in map)\n copy[normalizeKeyName(prop)] = map[prop];\n return copy;\n}\nfunction modifiers(name, event, shift = true) {\n if (event.altKey)\n name = \"Alt-\" + name;\n if (event.ctrlKey)\n name = \"Ctrl-\" + name;\n if (event.metaKey)\n name = \"Meta-\" + name;\n if (shift && event.shiftKey)\n name = \"Shift-\" + name;\n return name;\n}\n/**\nCreate a keymap plugin for the given set of bindings.\n\nBindings should map key names to [command](https://prosemirror.net/docs/ref/#commands)-style\nfunctions, which will be called with `(EditorState, dispatch,\nEditorView)` arguments, and should return true when they've handled\nthe key. Note that the view argument isn't part of the command\nprotocol, but can be used as an escape hatch if a binding needs to\ndirectly interact with the UI.\n\nKey names may be strings like `\"Shift-Ctrl-Enter\"`—a key\nidentifier prefixed with zero or more modifiers. Key identifiers\nare based on the strings that can appear in\n[`KeyEvent.key`](https:developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key).\nUse lowercase letters to refer to letter keys (or uppercase letters\nif you want shift to be held). You may use `\"Space\"` as an alias\nfor the `\" \"` name.\n\nModifiers can be given in any order. `Shift-` (or `s-`), `Alt-` (or\n`a-`), `Ctrl-` (or `c-` or `Control-`) and `Cmd-` (or `m-` or\n`Meta-`) are recognized. For characters that are created by holding\nshift, the `Shift-` prefix is implied, and should not be added\nexplicitly.\n\nYou can use `Mod-` as a shorthand for `Cmd-` on Mac and `Ctrl-` on\nother platforms.\n\nYou can add multiple keymap plugins to an editor. The order in\nwhich they appear determines their precedence (the ones early in\nthe array get to dispatch first).\n*/\nfunction keymap(bindings) {\n return new Plugin({ props: { handleKeyDown: keydownHandler(bindings) } });\n}\n/**\nGiven a set of bindings (using the same format as\n[`keymap`](https://prosemirror.net/docs/ref/#keymap.keymap)), return a [keydown\nhandler](https://prosemirror.net/docs/ref/#view.EditorProps.handleKeyDown) that handles them.\n*/\nfunction keydownHandler(bindings) {\n let map = normalize(bindings);\n return function (view, event) {\n let name = keyName(event), baseName, direct = map[modifiers(name, event)];\n if (direct && direct(view.state, view.dispatch, view))\n return true;\n // A character key\n if (name.length == 1 && name != \" \") {\n if (event.shiftKey) {\n // In case the name was already modified by shift, try looking\n // it up without its shift modifier\n let noShift = map[modifiers(name, event, false)];\n if (noShift && noShift(view.state, view.dispatch, view))\n return true;\n }\n if ((event.altKey || event.metaKey || event.ctrlKey) &&\n // Ctrl-Alt may be used for AltGr on Windows\n !(windows && event.ctrlKey && event.altKey) &&\n (baseName = base[event.keyCode]) && baseName != name) {\n // Try falling back to the keyCode when there's a modifier\n // active or the character produced isn't ASCII, and our table\n // produces a different name from the the keyCode. See #668,\n // #1060, #1529.\n let fromCode = map[modifiers(baseName, event)];\n if (fromCode && fromCode(view.state, view.dispatch, view))\n return true;\n }\n }\n return false;\n };\n}\n\nexport { keydownHandler, keymap };\n","import { TextSelection, NodeSelection, AllSelection, Selection } from 'prosemirror-state';\nimport { DOMSerializer, Fragment, Mark, Slice, DOMParser } from 'prosemirror-model';\nimport { dropPoint } from 'prosemirror-transform';\n\nconst domIndex = function (node) {\n for (var index = 0;; index++) {\n node = node.previousSibling;\n if (!node)\n return index;\n }\n};\nconst parentNode = function (node) {\n let parent = node.assignedSlot || node.parentNode;\n return parent && parent.nodeType == 11 ? parent.host : parent;\n};\nlet reusedRange = null;\n// Note that this will always return the same range, because DOM range\n// objects are every expensive, and keep slowing down subsequent DOM\n// updates, for some reason.\nconst textRange = function (node, from, to) {\n let range = reusedRange || (reusedRange = document.createRange());\n range.setEnd(node, to == null ? node.nodeValue.length : to);\n range.setStart(node, from || 0);\n return range;\n};\nconst clearReusedRange = function () {\n reusedRange = null;\n};\n// Scans forward and backward through DOM positions equivalent to the\n// given one to see if the two are in the same place (i.e. after a\n// text node vs at the end of that text node)\nconst isEquivalentPosition = function (node, off, targetNode, targetOff) {\n return targetNode && (scanFor(node, off, targetNode, targetOff, -1) ||\n scanFor(node, off, targetNode, targetOff, 1));\n};\nconst atomElements = /^(img|br|input|textarea|hr)$/i;\nfunction scanFor(node, off, targetNode, targetOff, dir) {\n var _a;\n for (;;) {\n if (node == targetNode && off == targetOff)\n return true;\n if (off == (dir < 0 ? 0 : nodeSize(node))) {\n let parent = node.parentNode;\n if (!parent || parent.nodeType != 1 || hasBlockDesc(node) || atomElements.test(node.nodeName) ||\n node.contentEditable == \"false\")\n return false;\n off = domIndex(node) + (dir < 0 ? 0 : 1);\n node = parent;\n }\n else if (node.nodeType == 1) {\n let child = node.childNodes[off + (dir < 0 ? -1 : 0)];\n if (child.nodeType == 1 && child.contentEditable == \"false\") {\n if ((_a = child.pmViewDesc) === null || _a === void 0 ? void 0 : _a.ignoreForSelection)\n off += dir;\n else\n return false;\n }\n else {\n node = child;\n off = dir < 0 ? nodeSize(node) : 0;\n }\n }\n else {\n return false;\n }\n }\n}\nfunction nodeSize(node) {\n return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction textNodeBefore$1(node, offset) {\n for (;;) {\n if (node.nodeType == 3 && offset)\n return node;\n if (node.nodeType == 1 && offset > 0) {\n if (node.contentEditable == \"false\")\n return null;\n node = node.childNodes[offset - 1];\n offset = nodeSize(node);\n }\n else if (node.parentNode && !hasBlockDesc(node)) {\n offset = domIndex(node);\n node = node.parentNode;\n }\n else {\n return null;\n }\n }\n}\nfunction textNodeAfter$1(node, offset) {\n for (;;) {\n if (node.nodeType == 3 && offset < node.nodeValue.length)\n return node;\n if (node.nodeType == 1 && offset < node.childNodes.length) {\n if (node.contentEditable == \"false\")\n return null;\n node = node.childNodes[offset];\n offset = 0;\n }\n else if (node.parentNode && !hasBlockDesc(node)) {\n offset = domIndex(node) + 1;\n node = node.parentNode;\n }\n else {\n return null;\n }\n }\n}\nfunction isOnEdge(node, offset, parent) {\n for (let atStart = offset == 0, atEnd = offset == nodeSize(node); atStart || atEnd;) {\n if (node == parent)\n return true;\n let index = domIndex(node);\n node = node.parentNode;\n if (!node)\n return false;\n atStart = atStart && index == 0;\n atEnd = atEnd && index == nodeSize(node);\n }\n}\nfunction hasBlockDesc(dom) {\n let desc;\n for (let cur = dom; cur; cur = cur.parentNode)\n if (desc = cur.pmViewDesc)\n break;\n return desc && desc.node && desc.node.isBlock && (desc.dom == dom || desc.contentDOM == dom);\n}\n// Work around Chrome issue https://bugs.chromium.org/p/chromium/issues/detail?id=447523\n// (isCollapsed inappropriately returns true in shadow dom)\nconst selectionCollapsed = function (domSel) {\n return domSel.focusNode && isEquivalentPosition(domSel.focusNode, domSel.focusOffset, domSel.anchorNode, domSel.anchorOffset);\n};\nfunction keyEvent(keyCode, key) {\n let event = document.createEvent(\"Event\");\n event.initEvent(\"keydown\", true, true);\n event.keyCode = keyCode;\n event.key = event.code = key;\n return event;\n}\nfunction deepActiveElement(doc) {\n let elt = doc.activeElement;\n while (elt && elt.shadowRoot)\n elt = elt.shadowRoot.activeElement;\n return elt;\n}\nfunction caretFromPoint(doc, x, y) {\n if (doc.caretPositionFromPoint) {\n try { // Firefox throws for this call in hard-to-predict circumstances (#994)\n let pos = doc.caretPositionFromPoint(x, y);\n // Clip the offset, because Chrome will return a text offset\n // into <input> nodes, which can't be treated as a regular DOM\n // offset\n if (pos)\n return { node: pos.offsetNode, offset: Math.min(nodeSize(pos.offsetNode), pos.offset) };\n }\n catch (_) { }\n }\n if (doc.caretRangeFromPoint) {\n let range = doc.caretRangeFromPoint(x, y);\n if (range)\n return { node: range.startContainer, offset: Math.min(nodeSize(range.startContainer), range.startOffset) };\n }\n}\n\nconst nav = typeof navigator != \"undefined\" ? navigator : null;\nconst doc = typeof document != \"undefined\" ? document : null;\nconst agent = (nav && nav.userAgent) || \"\";\nconst ie_edge = /Edge\\/(\\d+)/.exec(agent);\nconst ie_upto10 = /MSIE \\d/.exec(agent);\nconst ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(agent);\nconst ie = !!(ie_upto10 || ie_11up || ie_edge);\nconst ie_version = ie_upto10 ? document.documentMode : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0;\nconst gecko = !ie && /gecko\\/(\\d+)/i.test(agent);\ngecko && +(/Firefox\\/(\\d+)/.exec(agent) || [0, 0])[1];\nconst _chrome = !ie && /Chrome\\/(\\d+)/.exec(agent);\nconst chrome = !!_chrome;\nconst chrome_version = _chrome ? +_chrome[1] : 0;\nconst safari = !ie && !!nav && /Apple Computer/.test(nav.vendor);\n// Is true for both iOS and iPadOS for convenience\nconst ios = safari && (/Mobile\\/\\w+/.test(agent) || !!nav && nav.maxTouchPoints > 2);\nconst mac = ios || (nav ? /Mac/.test(nav.platform) : false);\nconst windows = nav ? /Win/.test(nav.platform) : false;\nconst android = /Android \\d/.test(agent);\nconst webkit = !!doc && \"webkitFontSmoothing\" in doc.documentElement.style;\nconst webkit_version = webkit ? +(/\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0;\n\nfunction windowRect(doc) {\n let vp = doc.defaultView && doc.defaultView.visualViewport;\n if (vp)\n return {\n left: 0, right: vp.width,\n top: 0, bottom: vp.height\n };\n return { left: 0, right: doc.documentElement.clientWidth,\n top: 0, bottom: doc.documentElement.clientHeight };\n}\nfunction getSide(value, side) {\n return typeof value == \"number\" ? value : value[side];\n}\nfunction clientRect(node) {\n let rect = node.getBoundingClientRect();\n // Adjust for elements with style \"transform: scale()\"\n let scaleX = (rect.width / node.offsetWidth) || 1;\n let scaleY = (rect.height / node.offsetHeight) || 1;\n // Make sure scrollbar width isn't included in the rectangle\n return { left: rect.left, right: rect.left + node.clientWidth * scaleX,\n top: rect.top, bottom: rect.top + node.clientHeight * scaleY };\n}\nfunction scrollRectIntoView(view, rect, startDOM) {\n let scrollThreshold = view.someProp(\"scrollThreshold\") || 0, scrollMargin = view.someProp(\"scrollMargin\") || 5;\n let doc = view.dom.ownerDocument;\n for (let parent = startDOM || view.dom;;) {\n if (!parent)\n break;\n if (parent.nodeType != 1) {\n parent = parentNode(parent);\n continue;\n }\n let elt = parent;\n let atTop = elt == doc.body;\n let bounding = atTop ? windowRect(doc) : clientRect(elt);\n let moveX = 0, moveY = 0;\n if (rect.top < bounding.top + getSide(scrollThreshold, \"top\"))\n moveY = -(bounding.top - rect.top + getSide(scrollMargin, \"top\"));\n else if (rect.bottom > bounding.bottom - getSide(scrollThreshold, \"bottom\"))\n moveY = rect.bottom - rect.top > bounding.bottom - bounding.top\n ? rect.top + getSide(scrollMargin, \"top\") - bounding.top\n : rect.bottom - bounding.bottom + getSide(scrollMargin, \"bottom\");\n if (rect.left < bounding.left + getSide(scrollThreshold, \"left\"))\n moveX = -(bounding.left - rect.left + getSide(scrollMargin, \"left\"));\n else if (rect.right > bounding.right - getSide(scrollThreshold, \"right\"))\n moveX = rect.right - bounding.right + getSide(scrollMargin, \"right\");\n if (moveX || moveY) {\n if (atTop) {\n doc.defaultView.scrollBy(moveX, moveY);\n }\n else {\n let startX = elt.scrollLeft, startY = elt.scrollTop;\n if (moveY)\n elt.scrollTop += moveY;\n if (moveX)\n elt.scrollLeft += moveX;\n let dX = elt.scrollLeft - startX, dY = elt.scrollTop - startY;\n rect = { left: rect.left - dX, top: rect.top - dY, right: rect.right - dX, bottom: rect.bottom - dY };\n }\n }\n let pos = atTop ? \"fixed\" : getComputedStyle(parent).position;\n if (/^(fixed|sticky)$/.test(pos))\n break;\n parent = pos == \"absolute\" ? parent.offsetParent : parentNode(parent);\n }\n}\n// Store the scroll position of the editor's parent nodes, along with\n// the top position of an element near the top of the editor, which\n// will be used to make sure the visible viewport remains stable even\n// when the size of the content above changes.\nfunction storeScrollPos(view) {\n let rect = view.dom.getBoundingClientRect(), startY = Math.max(0, rect.top);\n let refDOM, refTop;\n for (let x = (rect.left + rect.right) / 2, y = startY + 1; y < Math.min(innerHeight, rect.bottom); y += 5) {\n let dom = view.root.elementFromPoint(x, y);\n if (!dom || dom == view.dom || !view.dom.contains(dom))\n continue;\n let localRect = dom.getBoundingClientRect();\n if (localRect.top >= startY - 20) {\n refDOM = dom;\n refTop = localRect.top;\n break;\n }\n }\n return { refDOM: refDOM, refTop: refTop, stack: scrollStack(view.dom) };\n}\nfunction scrollStack(dom) {\n let stack = [], doc = dom.ownerDocument;\n for (let cur = dom; cur; cur = parentNode(cur)) {\n stack.push({ dom: cur, top: cur.scrollTop, left: cur.scrollLeft });\n if (dom == doc)\n break;\n }\n return stack;\n}\n// Reset the scroll position of the editor's parent nodes to that what\n// it was before, when storeScrollPos was called.\nfunction resetScrollPos({ refDOM, refTop, stack }) {\n let newRefTop = refDOM ? refDOM.getBoundingClientRect().top : 0;\n restoreScrollStack(stack, newRefTop == 0 ? 0 : newRefTop - refTop);\n}\nfunction restoreScrollStack(stack, dTop) {\n for (let i = 0; i < stack.length; i++) {\n let { dom, top, left } = stack[i];\n if (dom.scrollTop != top + dTop)\n dom.scrollTop = top + dTop;\n if (dom.scrollLeft != left)\n dom.scrollLeft = left;\n }\n}\nlet preventScrollSupported = null;\n// Feature-detects support for .focus({preventScroll: true}), and uses\n// a fallback kludge when not supported.\nfunction focusPreventScroll(dom) {\n if (dom.setActive)\n return dom.setActive(); // in IE\n if (preventScrollSupported)\n return dom.focus(preventScrollSupported);\n let stored = scrollStack(dom);\n dom.focus(preventScrollSupported == null ? {\n get preventScroll() {\n preventScrollSupported = { preventScroll: true };\n return true;\n }\n } : undefined);\n if (!preventScrollSupported) {\n preventScrollSupported = false;\n restoreScrollStack(stored, 0);\n }\n}\nfunction findOffsetInNode(node, coords) {\n let closest, dxClosest = 2e8, coordsClosest, offset = 0;\n let rowBot = coords.top, rowTop = coords.top;\n let firstBelow, coordsBelow;\n for (let child = node.firstChild, childIndex = 0; child; child = child.nextSibling, childIndex++) {\n let rects;\n if (child.nodeType == 1)\n rects = child.getClientRects();\n else if (child.nodeType == 3)\n rects = textRange(child).getClientRects();\n else\n continue;\n for (let i = 0; i < rects.length; i++) {\n let rect = rects[i];\n if (rect.top <= rowBot && rect.bottom >= rowTop) {\n rowBot = Math.max(rect.bottom, rowBot);\n rowTop = Math.min(rect.top, rowTop);\n let dx = rect.left > coords.left ? rect.left - coords.left\n : rect.right < coords.left ? coords.left - rect.right : 0;\n if (dx < dxClosest) {\n closest = child;\n dxClosest = dx;\n coordsClosest = dx && closest.nodeType == 3 ? {\n left: rect.right < coords.left ? rect.right : rect.left,\n top: coords.top\n } : coords;\n if (child.nodeType == 1 && dx)\n offset = childIndex + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0);\n continue;\n }\n }\n else if (rect.top > coords.top && !firstBelow && rect.left <= coords.left && rect.right >= coords.left) {\n firstBelow = child;\n coordsBelow = { left: Math.max(rect.left, Math.min(rect.right, coords.left)), top: rect.top };\n }\n if (!closest && (coords.left >= rect.right && coords.top >= rect.top ||\n coords.left >= rect.left && coords.top >= rect.bottom))\n offset = childIndex + 1;\n }\n }\n if (!closest && firstBelow) {\n closest = firstBelow;\n coordsClosest = coordsBelow;\n dxClosest = 0;\n }\n if (closest && closest.nodeType == 3)\n return findOffsetInText(closest, coordsClosest);\n if (!closest || (dxClosest && closest.nodeType == 1))\n return { node, offset };\n return findOffsetInNode(closest, coordsClosest);\n}\nfunction findOffsetInText(node, coords) {\n let len = node.nodeValue.length;\n let range = document.createRange(), result;\n for (let i = 0; i < len; i++) {\n range.setEnd(node, i + 1);\n range.setStart(node, i);\n let rect = singleRect(range, 1);\n if (rect.top == rect.bottom)\n continue;\n if (inRect(coords, rect)) {\n result = { node, offset: i + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0) };\n break;\n }\n }\n range.detach();\n return result || { node, offset: 0 };\n}\nfunction inRect(coords, rect) {\n return coords.left >= rect.left - 1 && coords.left <= rect.right + 1 &&\n coords.top >= rect.top - 1 && coords.top <= rect.bottom + 1;\n}\nfunction targetKludge(dom, coords) {\n let parent = dom.parentNode;\n if (parent && /^li$/i.test(parent.nodeName) && coords.left < dom.getBoundingClientRect().left)\n return parent;\n return dom;\n}\nfunction posFromElement(view, elt, coords) {\n let { node, offset } = findOffsetInNode(elt, coords), bias = -1;\n if (node.nodeType == 1 && !node.firstChild) {\n let rect = node.getBoundingClientRect();\n bias = rect.left != rect.right && coords.left > (rect.left + rect.right) / 2 ? 1 : -1;\n }\n return view.docView.posFromDOM(node, offset, bias);\n}\nfunction posFromCaret(view, node, offset, coords) {\n // Browser (in caretPosition/RangeFromPoint) will agressively\n // normalize towards nearby inline nodes. Since we are interested in\n // positions between block nodes too, we first walk up the hierarchy\n // of nodes to see if there are block nodes that the coordinates\n // fall outside of. If so, we take the position before/after that\n // block. If not, we call `posFromDOM` on the raw node/offset.\n let outsideBlock = -1;\n for (let cur = node, sawBlock = false;;) {\n if (cur == view.dom)\n break;\n let desc = view.docView.nearestDesc(cur, true), rect;\n if (!desc)\n return null;\n if (desc.dom.nodeType == 1 && (desc.node.isBlock && desc.parent || !desc.contentDOM) &&\n // Ignore elements with zero-size bounding rectangles\n ((rect = desc.dom.getBoundingClientRect()).width || rect.height)) {\n if (desc.node.isBlock && desc.parent && !/^T(R|BODY|HEAD|FOOT)$/.test(desc.dom.nodeName)) {\n // Only apply the horizontal test to the innermost block. Vertical for any parent.\n if (!sawBlock && rect.left > coords.left || rect.top > coords.top)\n outsideBlock = desc.posBefore;\n else if (!sawBlock && rect.right < coords.left || rect.bottom < coords.top)\n outsideBlock = desc.posAfter;\n sawBlock = true;\n }\n if (!desc.contentDOM && outsideBlock < 0 && !desc.node.isText) {\n // If we are inside a leaf, return the side of the leaf closer to the coords\n let before = desc.node.isBlock ? coords.top < (rect.top + rect.bottom) / 2\n : coords.left < (rect.left + rect.right) / 2;\n return before ? desc.posBefore : desc.posAfter;\n }\n }\n cur = desc.dom.parentNode;\n }\n return outsideBlock > -1 ? outsideBlock : view.docView.posFromDOM(node, offset, -1);\n}\nfunction elementFromPoint(element, coords, box) {\n let len = element.childNodes.length;\n if (len && box.top < box.bottom) {\n for (let startI = Math.max(0, Math.min(len - 1, Math.floor(len * (coords.top - box.top) / (box.bottom - box.top)) - 2)), i = startI;;) {\n let child = element.childNodes[i];\n if (child.nodeType == 1) {\n let rects = child.getClientRects();\n for (let j = 0; j < rects.length; j++) {\n let rect = rects[j];\n if (inRect(coords, rect))\n return elementFromPoint(child, coords, rect);\n }\n }\n if ((i = (i + 1) % len) == startI)\n break;\n }\n }\n return element;\n}\n// Given an x,y position on the editor, get the position in the document.\nfunction posAtCoords(view, coords) {\n let doc = view.dom.ownerDocument, node, offset = 0;\n let caret = caretFromPoint(doc, coords.left, coords.top);\n if (caret)\n ({ node, offset } = caret);\n let elt = (view.root.elementFromPoint ? view.root : doc)\n .elementFromPoint(coords.left, coords.top);\n let pos;\n if (!elt || !view.dom.contains(elt.nodeType != 1 ? elt.parentNode : elt)) {\n let box = view.dom.getBoundingClientRect();\n if (!inRect(coords, box))\n return null;\n elt = elementFromPoint(view.dom, coords, box);\n if (!elt)\n return null;\n }\n // Safari's caretRangeFromPoint returns nonsense when on a draggable element\n if (safari) {\n for (let p = elt; node && p; p = parentNode(p))\n if (p.draggable)\n node = undefined;\n }\n elt = targetKludge(elt, coords);\n if (node) {\n if (gecko && node.nodeType == 1) {\n // Firefox will sometimes return offsets into <input> nodes, which\n // have no actual children, from caretPositionFromPoint (#953)\n offset = Math.min(offset, node.childNodes.length);\n // It'll also move the returned position before image nodes,\n // even if those are behind it.\n if (offset < node.childNodes.length) {\n let next = node.childNodes[offset], box;\n if (next.nodeName == \"IMG\" && (box = next.getBoundingClientRect()).right <= coords.left &&\n box.bottom > coords.top)\n offset++;\n }\n }\n let prev;\n // When clicking above the right side of an uneditable node, Chrome will report a cursor position after that node.\n if (webkit && offset && node.nodeType == 1 && (prev = node.childNodes[offset - 1]).nodeType == 1 &&\n prev.contentEditable == \"false\" && prev.getBoundingClientRect().top >= coords.top)\n offset--;\n // Suspiciously specific kludge to work around caret*FromPoint\n // never returning a position at the end of the document\n if (node == view.dom && offset == node.childNodes.length - 1 && node.lastChild.nodeType == 1 &&\n coords.top > node.lastChild.getBoundingClientRect().bottom)\n pos = view.state.doc.content.size;\n // Ignore positions directly after a BR, since caret*FromPoint\n // 'round up' positions that would be more accurately placed\n // before the BR node.\n else if (offset == 0 || node.nodeType != 1 || node.childNodes[offset - 1].nodeName != \"BR\")\n pos = posFromCaret(view, node, offset, coords);\n }\n if (pos == null)\n pos = posFromElement(view, elt, coords);\n let desc = view.docView.nearestDesc(elt, true);\n return { pos, inside: desc ? desc.posAtStart - desc.border : -1 };\n}\nfunction nonZero(rect) {\n return rect.top < rect.bottom || rect.left < rect.right;\n}\nfunction singleRect(target, bias) {\n let rects = target.getClientRects();\n if (rects.length) {\n let first = rects[bias < 0 ? 0 : rects.length - 1];\n if (nonZero(first))\n return first;\n }\n return Array.prototype.find.call(rects, nonZero) || target.getBoundingClientRect();\n}\nconst BIDI = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n// Given a position in the document model, get a bounding box of the\n// character at that position, relative to the window.\nfunction coordsAtPos(view, pos, side) {\n let { node, offset, atom } = view.docView.domFromPos(pos, side < 0 ? -1 : 1);\n let supportEmptyRange = webkit || gecko;\n if (node.nodeType == 3) {\n // These browsers support querying empty text ranges. Prefer that in\n // bidi context or when at the end of a node.\n if (supportEmptyRange && (BIDI.test(node.nodeValue) || (side < 0 ? !offset : offset == node.nodeValue.length))) {\n let rect = singleRect(textRange(node, offset, offset), side);\n // Firefox returns bad results (the position before the space)\n // when querying a position directly after line-broken\n // whitespace. Detect this situation and and kludge around it\n if (gecko && offset && /\\s/.test(node.nodeValue[offset - 1]) && offset < node.nodeValue.length) {\n let rectBefore = singleRect(textRange(node, offset - 1, offset - 1), -1);\n if (rectBefore.top == rect.top) {\n let rectAfter = singleRect(textRange(node, offset, offset + 1), -1);\n if (rectAfter.top != rect.top)\n return flattenV(rectAfter, rectAfter.left < rectBefore.left);\n }\n }\n return rect;\n }\n else {\n let from = offset, to = offset, takeSide = side < 0 ? 1 : -1;\n if (side < 0 && !offset) {\n to++;\n takeSide = -1;\n }\n else if (side >= 0 && offset == node.nodeValue.length) {\n from--;\n takeSide = 1;\n }\n else if (side < 0) {\n from--;\n }\n else {\n to++;\n }\n return flattenV(singleRect(textRange(node, from, to), takeSide), takeSide < 0);\n }\n }\n let $dom = view.state.doc.resolve(pos - (atom || 0));\n // Return a horizontal line in block context\n if (!$dom.parent.inlineContent) {\n if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {\n let before = node.childNodes[offset - 1];\n if (before.nodeType == 1)\n return flattenH(before.getBoundingClientRect(), false);\n }\n if (atom == null && offset < nodeSize(node)) {\n let after = node.childNodes[offset];\n if (after.nodeType == 1)\n return flattenH(after.getBoundingClientRect(), true);\n }\n return flattenH(node.getBoundingClientRect(), side >= 0);\n }\n // Inline, not in text node (this is not Bidi-safe)\n if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {\n let before = node.childNodes[offset - 1];\n let target = before.nodeType == 3 ? textRange(before, nodeSize(before) - (supportEmptyRange ? 0 : 1))\n // BR nodes tend to only return the rectangle before them.\n // Only use them if they are the last element in their parent\n : before.nodeType == 1 && (before.nodeName != \"BR\" || !before.nextSibling) ? before : null;\n if (target)\n return flattenV(singleRect(target, 1), false);\n }\n if (atom == null && offset < nodeSize(node)) {\n let after = node.childNodes[offset];\n while (after.pmViewDesc && after.pmViewDesc.ignoreForCoords)\n after = after.nextSibling;\n let target = !after ? null : after.nodeType == 3 ? textRange(after, 0, (supportEmptyRange ? 0 : 1))\n : after.nodeType == 1 ? after : null;\n if (target)\n return flattenV(singleRect(target, -1), true);\n }\n // All else failed, just try to get a rectangle for the target node\n return flattenV(singleRect(node.nodeType == 3 ? textRange(node) : node, -side), side >= 0);\n}\nfunction flattenV(rect, left) {\n if (rect.width == 0)\n return rect;\n let x = left ? rect.left : rect.right;\n return { top: rect.top, bottom: rect.bottom, left: x, right: x };\n}\nfunction flattenH(rect, top) {\n if (rect.height == 0)\n return rect;\n let y = top ? rect.top : rect.bottom;\n return { top: y, bottom: y, left: rect.left, right: rect.right };\n}\nfunction withFlushedState(view, state, f) {\n let viewState = view.state, active = view.root.activeElement;\n if (viewState != state)\n view.updateState(state);\n if (active != view.dom)\n view.focus();\n try {\n return f();\n }\n finally {\n if (viewState != state)\n view.updateState(viewState);\n if (active != view.dom && active)\n active.focus();\n }\n}\n// Whether vertical position motion in a given direction\n// from a position would leave a text block.\nfunction endOfTextblockVertical(view, state, dir) {\n let sel = state.selection;\n let $pos = dir == \"up\" ? sel.$from : sel.$to;\n return withFlushedState(view, state, () => {\n let { node: dom } = view.docView.domFromPos($pos.pos, dir == \"up\" ? -1 : 1);\n for (;;) {\n let nearest = view.docView.nearestDesc(dom, true);\n if (!nearest)\n break;\n if (nearest.node.isBlock) {\n dom = nearest.contentDOM || nearest.dom;\n break;\n }\n dom = nearest.dom.parentNode;\n }\n let coords = coordsAtPos(view, $pos.pos, 1);\n for (let child = dom.firstChild; child; child = child.nextSibling) {\n let boxes;\n if (child.nodeType == 1)\n boxes = child.getClientRects();\n else if (child.nodeType == 3)\n boxes = textRange(child, 0, child.nodeValue.length).getClientRects();\n else\n continue;\n for (let i = 0; i < boxes.length; i++) {\n let box = boxes[i];\n if (box.bottom > box.top + 1 &&\n (dir == \"up\" ? coords.top - box.top > (box.bottom - coords.top) * 2\n : box.bottom - coords.bottom > (coords.bottom - box.top) * 2))\n return false;\n }\n }\n return true;\n });\n}\nconst maybeRTL = /[\\u0590-\\u08ac]/;\nfunction endOfTextblockHorizontal(view, state, dir) {\n let { $head } = state.selection;\n if (!$head.parent.isTextblock)\n return false;\n let offset = $head.parentOffset, atStart = !offset, atEnd = offset == $head.parent.content.size;\n let sel = view.domSelection();\n if (!sel)\n return $head.pos == $head.start() || $head.pos == $head.end();\n // If the textblock is all LTR, or the browser doesn't support\n // Selection.modify (Edge), fall back to a primitive approach\n if (!maybeRTL.test($head.parent.textContent) || !sel.modify)\n return dir == \"left\" || dir == \"backward\" ? atStart : atEnd;\n return withFlushedState(view, state, () => {\n // This is a huge hack, but appears to be the best we can\n // currently do: use `Selection.modify` to move the selection by\n // one character, and see if that moves the cursor out of the\n // textblock (or doesn't move it at all, when at the start/end of\n // the document).\n let { focusNode: oldNode, focusOffset: oldOff, anchorNode, anchorOffset } = view.domSelectionRange();\n let oldBidiLevel = sel.caretBidiLevel // Only for Firefox\n ;\n sel.modify(\"move\", dir, \"character\");\n let parentDOM = $head.depth ? view.docView.domAfterPos($head.before()) : view.dom;\n let { focusNode: newNode, focusOffset: newOff } = view.domSelectionRange();\n let result = newNode && !parentDOM.contains(newNode.nodeType == 1 ? newNode : newNode.parentNode) ||\n (oldNode == newNode && oldOff == newOff);\n // Restore the previous selection\n try {\n sel.collapse(anchorNode, anchorOffset);\n if (oldNode && (oldNode != anchorNode || oldOff != anchorOffset) && sel.extend)\n sel.extend(oldNode, oldOff);\n }\n catch (_) { }\n if (oldBidiLevel != null)\n sel.caretBidiLevel = oldBidiLevel;\n return result;\n });\n}\nlet cachedState = null;\nlet cachedDir = null;\nlet cachedResult = false;\nfunction endOfTextblock(view, state, dir) {\n if (cachedState == state && cachedDir == dir)\n return cachedResult;\n cachedState = state;\n cachedDir = dir;\n return cachedResult = dir == \"up\" || dir == \"down\"\n ? endOfTextblockVertical(view, state, dir)\n : endOfTextblockHorizontal(view, state, dir);\n}\n\n// View descriptions are data structures that describe the DOM that is\n// used to represent the editor's content. They are used for:\n//\n// - Incremental redrawing when the document changes\n//\n// - Figuring out what part of the document a given DOM position\n// corresponds to\n//\n// - Wiring in custom implementations of the editing interface for a\n// given node\n//\n// They form a doubly-linked mutable tree, starting at `view.docView`.\nconst NOT_DIRTY = 0, CHILD_DIRTY = 1, CONTENT_DIRTY = 2, NODE_DIRTY = 3;\n// Superclass for the various kinds of descriptions. Defines their\n// basic structure and shared methods.\nclass ViewDesc {\n constructor(parent, children, dom, \n // This is the node that holds the child views. It may be null for\n // descs that don't have children.\n contentDOM) {\n this.parent = parent;\n this.children = children;\n this.dom = dom;\n this.contentDOM = contentDOM;\n this.dirty = NOT_DIRTY;\n // An expando property on the DOM node provides a link back to its\n // description.\n dom.pmViewDesc = this;\n }\n // Used to check whether a given description corresponds to a\n // widget/mark/node.\n matchesWidget(widget) { return false; }\n matchesMark(mark) { return false; }\n matchesNode(node, outerDeco, innerDeco) { return false; }\n matchesHack(nodeName) { return false; }\n // When parsing in-editor content (in domchange.js), we allow\n // descriptions to determine the parse rules that should be used to\n // parse them.\n parseRule() { return null; }\n // Used by the editor's event handler to ignore events that come\n // from certain descs.\n stopEvent(event) { return false; }\n // The size of the content represented by this desc.\n get size() {\n let size = 0;\n for (let i = 0; i < this.children.length; i++)\n size += this.children[i].size;\n return size;\n }\n // For block nodes, this represents the space taken up by their\n // start/end tokens.\n get border() { return 0; }\n destroy() {\n this.parent = undefined;\n if (this.dom.pmViewDesc == this)\n this.dom.pmViewDesc = undefined;\n for (let i = 0; i < this.children.length; i++)\n this.children[i].destroy();\n }\n posBeforeChild(child) {\n for (let i = 0, pos = this.posAtStart;; i++) {\n let cur = this.children[i];\n if (cur == child)\n return pos;\n pos += cur.size;\n }\n }\n get posBefore() {\n return this.parent.posBeforeChild(this);\n }\n get posAtStart() {\n return this.parent ? this.parent.posBeforeChild(this) + this.border : 0;\n }\n get posAfter() {\n return this.posBefore + this.size;\n }\n get posAtEnd() {\n return this.posAtStart + this.size - 2 * this.border;\n }\n localPosFromDOM(dom, offset, bias) {\n // If the DOM position is in the content, use the child desc after\n // it to figure out a position.\n if (this.contentDOM && this.contentDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode)) {\n if (bias < 0) {\n let domBefore, desc;\n if (dom == this.contentDOM) {\n domBefore = dom.childNodes[offset - 1];\n }\n else {\n while (dom.parentNode != this.contentDOM)\n dom = dom.parentNode;\n domBefore = dom.previousSibling;\n }\n while (domBefore && !((desc = domBefore.pmViewDesc) && desc.parent == this))\n domBefore = domBefore.previousSibling;\n return domBefore ? this.posBeforeChild(desc) + desc.size : this.posAtStart;\n }\n else {\n let domAfter, desc;\n if (dom == this.contentDOM) {\n domAfter = dom.childNodes[offset];\n }\n else {\n while (dom.parentNode != this.contentDOM)\n dom = dom.parentNode;\n domAfter = dom.nextSibling;\n }\n while (domAfter && !((desc = domAfter.pmViewDesc) && desc.parent == this))\n domAfter = domAfter.nextSibling;\n return domAfter ? this.posBeforeChild(desc) : this.posAtEnd;\n }\n }\n // Otherwise, use various heuristics, falling back on the bias\n // parameter, to determine whether to return the position at the\n // start or at the end of this view desc.\n let atEnd;\n if (dom == this.dom && this.contentDOM) {\n atEnd = offset > domIndex(this.contentDOM);\n }\n else if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) {\n atEnd = dom.compareDocumentPosition(this.contentDOM) & 2;\n }\n else if (this.dom.firstChild) {\n if (offset == 0)\n for (let search = dom;; search = search.parentNode) {\n if (search == this.dom) {\n atEnd = false;\n break;\n }\n if (search.previousSibling)\n break;\n }\n if (atEnd == null && offset == dom.childNodes.length)\n for (let search = dom;; search = search.parentNode) {\n if (search == this.dom) {\n atEnd = true;\n break;\n }\n if (search.nextSibling)\n break;\n }\n }\n return (atEnd == null ? bias > 0 : atEnd) ? this.posAtEnd : this.posAtStart;\n }\n nearestDesc(dom, onlyNodes = false) {\n for (let first = true, cur = dom; cur; cur = cur.parentNode) {\n let desc = this.getDesc(cur), nodeDOM;\n if (desc && (!onlyNodes || desc.node)) {\n // If dom is outside of this desc's nodeDOM, don't count it.\n if (first && (nodeDOM = desc.nodeDOM) &&\n !(nodeDOM.nodeType == 1 ? nodeDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode) : nodeDOM == dom))\n first = false;\n else\n return desc;\n }\n }\n }\n getDesc(dom) {\n let desc = dom.pmViewDesc;\n for (let cur = desc; cur; cur = cur.parent)\n if (cur == this)\n return desc;\n }\n posFromDOM(dom, offset, bias) {\n for (let scan = dom; scan; scan = scan.parentNode) {\n let desc = this.getDesc(scan);\n if (desc)\n return desc.localPosFromDOM(dom, offset, bias);\n }\n return -1;\n }\n // Find the desc for the node after the given pos, if any. (When a\n // parent node overrode rendering, there might not be one.)\n descAt(pos) {\n for (let i = 0, offset = 0; i < this.children.length; i++) {\n let child = this.children[i], end = offset + child.size;\n if (offset == pos && end != offset) {\n while (!child.border && child.children.length) {\n for (let i = 0; i < child.children.length; i++) {\n let inner = child.children[i];\n if (inner.size) {\n child = inner;\n break;\n }\n }\n }\n return child;\n }\n if (pos < end)\n return child.descAt(pos - offset - child.border);\n offset = end;\n }\n }\n domFromPos(pos, side) {\n if (!this.contentDOM)\n return { node: this.dom, offset: 0, atom: pos + 1 };\n // First find the position in the child array\n let i = 0, offset = 0;\n for (let curPos = 0; i < this.children.length; i++) {\n let child = this.children[i], end = curPos + child.size;\n if (end > pos || child instanceof TrailingHackViewDesc) {\n offset = pos - curPos;\n break;\n }\n curPos = end;\n }\n // If this points into the middle of a child, call through\n if (offset)\n return this.children[i].domFromPos(offset - this.children[i].border, side);\n // Go back if there were any zero-length widgets with side >= 0 before this point\n for (let prev; i && !(prev = this.children[i - 1]).size && prev instanceof WidgetViewDesc && prev.side >= 0; i--) { }\n // Scan towards the first useable node\n if (side <= 0) {\n let prev, enter = true;\n for (;; i--, enter = false) {\n prev = i ? this.children[i - 1] : null;\n if (!prev || prev.dom.parentNode == this.contentDOM)\n break;\n }\n if (prev && side && enter && !prev.border && !prev.domAtom)\n return prev.domFromPos(prev.size, side);\n return { node: this.contentDOM, offset: prev ? domIndex(prev.dom) + 1 : 0 };\n }\n else {\n let next, enter = true;\n for (;; i++, enter = false) {\n next = i < this.children.length ? this.children[i] : null;\n if (!next || next.dom.parentNode == this.contentDOM)\n break;\n }\n if (next && enter && !next.border && !next.domAtom)\n return next.domFromPos(0, side);\n return { node: this.contentDOM, offset: next ? domIndex(next.dom) : this.contentDOM.childNodes.length };\n }\n }\n // Used to find a DOM range in a single parent for a given changed\n // range.\n parseRange(from, to, base = 0) {\n if (this.children.length == 0)\n return { node: this.contentDOM, from, to, fromOffset: 0, toOffset: this.contentDOM.childNodes.length };\n let fromOffset = -1, toOffset = -1;\n for (let offset = base, i = 0;; i++) {\n let child = this.children[i], end = offset + child.size;\n if (fromOffset == -1 && from <= end) {\n let childBase = offset + child.border;\n // FIXME maybe descend mark views to parse a narrower range?\n if (from >= childBase && to <= end - child.border && child.node &&\n child.contentDOM && this.contentDOM.contains(child.contentDOM))\n return child.parseRange(from, to, childBase);\n from = offset;\n for (let j = i; j > 0; j--) {\n let prev = this.children[j - 1];\n if (prev.size && prev.dom.parentNode == this.contentDOM && !prev.emptyChildAt(1)) {\n fromOffset = domIndex(prev.dom) + 1;\n break;\n }\n from -= prev.size;\n }\n if (fromOffset == -1)\n fromOffset = 0;\n }\n if (fromOffset > -1 && (end > to || i == this.children.length - 1)) {\n to = end;\n for (let j = i + 1; j < this.children.length; j++) {\n let next = this.children[j];\n if (next.size && next.dom.parentNode == this.contentDOM && !next.emptyChildAt(-1)) {\n toOffset = domIndex(next.dom);\n break;\n }\n to += next.size;\n }\n if (toOffset == -1)\n toOffset = this.contentDOM.childNodes.length;\n break;\n }\n offset = end;\n }\n return { node: this.contentDOM, from, to, fromOffset, toOffset };\n }\n emptyChildAt(side) {\n if (this.border || !this.contentDOM || !this.children.length)\n return false;\n let child = this.children[side < 0 ? 0 : this.children.length - 1];\n return child.size == 0 || child.emptyChildAt(side);\n }\n domAfterPos(pos) {\n let { node, offset } = this.domFromPos(pos, 0);\n if (node.nodeType != 1 || offset == node.childNodes.length)\n throw new RangeError(\"No node after pos \" + pos);\n return node.childNodes[offset];\n }\n // View descs are responsible for setting any selection that falls\n // entirely inside of them, so that custom implementations can do\n // custom things with the selection. Note that this falls apart when\n // a selection starts in such a node and ends in another, in which\n // case we just use whatever domFromPos produces as a best effort.\n setSelection(anchor, head, view, force = false) {\n // If the selection falls entirely in a child, give it to that child\n let from = Math.min(anchor, head), to = Math.max(anchor, head);\n for (let i = 0, offset = 0; i < this.children.length; i++) {\n let child = this.children[i], end = offset + child.size;\n if (from > offset && to < end)\n return child.setSelection(anchor - offset - child.border, head - offset - child.border, view, force);\n offset = end;\n }\n let anchorDOM = this.domFromPos(anchor, anchor ? -1 : 1);\n let headDOM = head == anchor ? anchorDOM : this.domFromPos(head, head ? -1 : 1);\n let domSel = view.root.getSelection();\n let selRange = view.domSelectionRange();\n let brKludge = false;\n // On Firefox, using Selection.collapse to put the cursor after a\n // BR node for some reason doesn't always work (#1073). On Safari,\n // the cursor sometimes inexplicable visually lags behind its\n // reported position in such situations (#1092).\n if ((gecko || safari) && anchor == head) {\n let { node, offset } = anchorDOM;\n if (node.nodeType == 3) {\n brKludge = !!(offset && node.nodeValue[offset - 1] == \"\\n\");\n // Issue #1128\n if (brKludge && offset == node.nodeValue.length) {\n for (let scan = node, after; scan; scan = scan.parentNode) {\n if (after = scan.nextSibling) {\n if (after.nodeName == \"BR\")\n anchorDOM = headDOM = { node: after.parentNode, offset: domIndex(after) + 1 };\n break;\n }\n let desc = scan.pmViewDesc;\n if (desc && desc.node && desc.node.isBlock)\n break;\n }\n }\n }\n else {\n let prev = node.childNodes[offset - 1];\n brKludge = prev && (prev.nodeName == \"BR\" || prev.contentEditable == \"false\");\n }\n }\n // Firefox can act strangely when the selection is in front of an\n // uneditable node. See #1163 and https://bugzilla.mozilla.org/show_bug.cgi?id=1709536\n if (gecko && selRange.focusNode && selRange.focusNode != headDOM.node && selRange.focusNode.nodeType == 1) {\n let after = selRange.focusNode.childNodes[selRange.focusOffset];\n if (after && after.contentEditable == \"false\")\n force = true;\n }\n if (!(force || brKludge && safari) &&\n isEquivalentPosition(anchorDOM.node, anchorDOM.offset, selRange.anchorNode, selRange.anchorOffset) &&\n isEquivalentPosition(headDOM.node, headDOM.offset, selRange.focusNode, selRange.focusOffset))\n return;\n // Selection.extend can be used to create an 'inverted' selection\n // (one where the focus is before the anchor), but not all\n // browsers support it yet.\n let domSelExtended = false;\n if ((domSel.extend || anchor == head) && !(brKludge && gecko)) {\n domSel.collapse(anchorDOM.node, anchorDOM.offset);\n try {\n if (anchor != head)\n domSel.extend(headDOM.node, headDOM.offset);\n domSelExtended = true;\n }\n catch (_) {\n // In some cases with Chrome the selection is empty after calling\n // collapse, even when it should be valid. This appears to be a bug, but\n // it is difficult to isolate. If this happens fallback to the old path\n // without using extend.\n // Similarly, this could crash on Safari if the editor is hidden, and\n // there was no selection.\n }\n }\n if (!domSelExtended) {\n if (anchor > head) {\n let tmp = anchorDOM;\n anchorDOM = headDOM;\n headDOM = tmp;\n }\n let range = document.createRange();\n range.setEnd(headDOM.node, headDOM.offset);\n range.setStart(anchorDOM.node, anchorDOM.offset);\n domSel.removeAllRanges();\n domSel.addRange(range);\n }\n }\n ignoreMutation(mutation) {\n return !this.contentDOM && mutation.type != \"selection\";\n }\n get contentLost() {\n return this.contentDOM && this.contentDOM != this.dom && !this.dom.contains(this.contentDOM);\n }\n // Remove a subtree of the element tree that has been touched\n // by a DOM change, so that the next update will redraw it.\n markDirty(from, to) {\n for (let offset = 0, i = 0; i < this.children.length; i++) {\n let child = this.children[i], end = offset + child.size;\n if (offset == end ? from <= end && to >= offset : from < end && to > offset) {\n let startInside = offset + child.border, endInside = end - child.border;\n if (from >= startInside && to <= endInside) {\n this.dirty = from == offset || to == end ? CONTENT_DIRTY : CHILD_DIRTY;\n if (from == startInside && to == endInside &&\n (child.contentLost || child.dom.parentNode != this.contentDOM))\n child.dirty = NODE_DIRTY;\n else\n child.markDirty(from - startInside, to - startInside);\n return;\n }\n else {\n child.dirty = child.dom == child.contentDOM && child.dom.parentNode == this.contentDOM && !child.children.length\n ? CONTENT_DIRTY : NODE_DIRTY;\n }\n }\n offset = end;\n }\n this.dirty = CONTENT_DIRTY;\n }\n markParentsDirty() {\n let level = 1;\n for (let node = this.parent; node; node = node.parent, level++) {\n let dirty = level == 1 ? CONTENT_DIRTY : CHILD_DIRTY;\n if (node.dirty < dirty)\n node.dirty = dirty;\n }\n }\n get domAtom() { return false; }\n get ignoreForCoords() { return false; }\n get ignoreForSelection() { return false; }\n isText(text) { return false; }\n}\n// A widget desc represents a widget decoration, which is a DOM node\n// drawn between the document nodes.\nclass WidgetViewDesc extends ViewDesc {\n constructor(parent, widget, view, pos) {\n let self, dom = widget.type.toDOM;\n if (typeof dom == \"function\")\n dom = dom(view, () => {\n if (!self)\n return pos;\n if (self.parent)\n return self.parent.posBeforeChild(self);\n });\n if (!widget.type.spec.raw) {\n if (dom.nodeType != 1) {\n let wrap = document.createElement(\"span\");\n wrap.appendChild(dom);\n dom = wrap;\n }\n dom.contentEditable = \"false\";\n dom.classList.add(\"ProseMirror-widget\");\n }\n super(parent, [], dom, null);\n this.widget = widget;\n this.widget = widget;\n self = this;\n }\n matchesWidget(widget) {\n return this.dirty == NOT_DIRTY && widget.type.eq(this.widget.type);\n }\n parseRule() { return { ignore: true }; }\n stopEvent(event) {\n let stop = this.widget.spec.stopEvent;\n return stop ? stop(event) : false;\n }\n ignoreMutation(mutation) {\n return mutation.type != \"selection\" || this.widget.spec.ignoreSelection;\n }\n destroy() {\n this.widget.type.destroy(this.dom);\n super.destroy();\n }\n get domAtom() { return true; }\n get ignoreForSelection() { return !!this.widget.type.spec.relaxedSide; }\n get side() { return this.widget.type.side; }\n}\nclass CompositionViewDesc extends ViewDesc {\n constructor(parent, dom, textDOM, text) {\n super(parent, [], dom, null);\n this.textDOM = textDOM;\n this.text = text;\n }\n get size() { return this.text.length; }\n localPosFromDOM(dom, offset) {\n if (dom != this.textDOM)\n return this.posAtStart + (offset ? this.size : 0);\n return this.posAtStart + offset;\n }\n domFromPos(pos) {\n return { node: this.textDOM, offset: pos };\n }\n ignoreMutation(mut) {\n return mut.type === 'characterData' && mut.target.nodeValue == mut.oldValue;\n }\n}\n// A mark desc represents a mark. May have multiple children,\n// depending on how the mark is split. Note that marks are drawn using\n// a fixed nesting order, for simplicity and predictability, so in\n// some cases they will be split more often than would appear\n// necessary.\nclass MarkViewDesc extends ViewDesc {\n constructor(parent, mark, dom, contentDOM, spec) {\n super(parent, [], dom, contentDOM);\n this.mark = mark;\n this.spec = spec;\n }\n static create(parent, mark, inline, view) {\n let custom = view.nodeViews[mark.type.name];\n let spec = custom && custom(mark, view, inline);\n if (!spec || !spec.dom)\n spec = DOMSerializer.renderSpec(document, mark.type.spec.toDOM(mark, inline), null, mark.attrs);\n return new MarkViewDesc(parent, mark, spec.dom, spec.contentDOM || spec.dom, spec);\n }\n parseRule() {\n if ((this.dirty & NODE_DIRTY) || this.mark.type.spec.reparseInView)\n return null;\n return { mark: this.mark.type.name, attrs: this.mark.attrs, contentElement: this.contentDOM };\n }\n matchesMark(mark) { return this.dirty != NODE_DIRTY && this.mark.eq(mark); }\n markDirty(from, to) {\n super.markDirty(from, to);\n // Move dirty info to nearest node view\n if (this.dirty != NOT_DIRTY) {\n let parent = this.parent;\n while (!parent.node)\n parent = parent.parent;\n if (parent.dirty < this.dirty)\n parent.dirty = this.dirty;\n this.dirty = NOT_DIRTY;\n }\n }\n slice(from, to, view) {\n let copy = MarkViewDesc.create(this.parent, this.mark, true, view);\n let nodes = this.children, size = this.size;\n if (to < size)\n nodes = replaceNodes(nodes, to, size, view);\n if (from > 0)\n nodes = replaceNodes(nodes, 0, from, view);\n for (let i = 0; i < nodes.length; i++)\n nodes[i].parent = copy;\n copy.children = nodes;\n return copy;\n }\n ignoreMutation(mutation) {\n return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : super.ignoreMutation(mutation);\n }\n destroy() {\n if (this.spec.destroy)\n this.spec.destroy();\n super.destroy();\n }\n}\n// Node view descs are the main, most common type of view desc, and\n// correspond to an actual node in the document. Unlike mark descs,\n// they populate their child array themselves.\nclass NodeViewDesc extends ViewDesc {\n constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos) {\n super(parent, [], dom, contentDOM);\n this.node = node;\n this.outerDeco = outerDeco;\n this.innerDeco = innerDeco;\n this.nodeDOM = nodeDOM;\n }\n // By default, a node is rendered using the `toDOM` method from the\n // node type spec. But client code can use the `nodeViews` spec to\n // supply a custom node view, which can influence various aspects of\n // the way the node works.\n //\n // (Using subclassing for this was intentionally decided against,\n // since it'd require exposing a whole slew of finicky\n // implementation details to the user code that they probably will\n // never need.)\n static create(parent, node, outerDeco, innerDeco, view, pos) {\n let custom = view.nodeViews[node.type.name], descObj;\n let spec = custom && custom(node, view, () => {\n // (This is a function that allows the custom view to find its\n // own position)\n if (!descObj)\n return pos;\n if (descObj.parent)\n return descObj.parent.posBeforeChild(descObj);\n }, outerDeco, innerDeco);\n let dom = spec && spec.dom, contentDOM = spec && spec.contentDOM;\n if (node.isText) {\n if (!dom)\n dom = document.createTextNode(node.text);\n else if (dom.nodeType != 3)\n throw new RangeError(\"Text must be rendered as a DOM text node\");\n }\n else if (!dom) {\n let spec = DOMSerializer.renderSpec(document, node.type.spec.toDOM(node), null, node.attrs);\n ({ dom, contentDOM } = spec);\n }\n if (!contentDOM && !node.isText && dom.nodeName != \"BR\") { // Chrome gets confused by <br contenteditable=false>\n if (!dom.hasAttribute(\"contenteditable\"))\n dom.contentEditable = \"false\";\n if (node.type.spec.draggable)\n dom.draggable = true;\n }\n let nodeDOM = dom;\n dom = applyOuterDeco(dom, outerDeco, node);\n if (spec)\n return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, spec, view, pos + 1);\n else if (node.isText)\n return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM, view);\n else\n return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, view, pos + 1);\n }\n parseRule() {\n // Experimental kludge to allow opt-in re-parsing of nodes\n if (this.node.type.spec.reparseInView)\n return null;\n // FIXME the assumption that this can always return the current\n // attrs means that if the user somehow manages to change the\n // attrs in the dom, that won't be picked up. Not entirely sure\n // whether this is a problem\n let rule = { node: this.node.type.name, attrs: this.node.attrs };\n if (this.node.type.whitespace == \"pre\")\n rule.preserveWhitespace = \"full\";\n if (!this.contentDOM) {\n rule.getContent = () => this.node.content;\n }\n else if (!this.contentLost) {\n rule.contentElement = this.contentDOM;\n }\n else {\n // Chrome likes to randomly recreate parent nodes when\n // backspacing things. When that happens, this tries to find the\n // new parent.\n for (let i = this.children.length - 1; i >= 0; i--) {\n let child = this.children[i];\n if (this.dom.contains(child.dom.parentNode)) {\n rule.contentElement = child.dom.parentNode;\n break;\n }\n }\n if (!rule.contentElement)\n rule.getContent = () => Fragment.empty;\n }\n return rule;\n }\n matchesNode(node, outerDeco, innerDeco) {\n return this.dirty == NOT_DIRTY && node.eq(this.node) &&\n sameOuterDeco(outerDeco, this.outerDeco) && innerDeco.eq(this.innerDeco);\n }\n get size() { return this.node.nodeSize; }\n get border() { return this.node.isLeaf ? 0 : 1; }\n // Syncs `this.children` to match `this.node.content` and the local\n // decorations, possibly introducing nesting for marks. Then, in a\n // separate step, syncs the DOM inside `this.contentDOM` to\n // `this.children`.\n updateChildren(view, pos) {\n let inline = this.node.inlineContent, off = pos;\n let composition = view.composing ? this.localCompositionInfo(view, pos) : null;\n let localComposition = composition && composition.pos > -1 ? composition : null;\n let compositionInChild = composition && composition.pos < 0;\n let updater = new ViewTreeUpdater(this, localComposition && localComposition.node, view);\n iterDeco(this.node, this.innerDeco, (widget, i, insideNode) => {\n if (widget.spec.marks)\n updater.syncToMarks(widget.spec.marks, inline, view, i);\n else if (widget.type.side >= 0 && !insideNode)\n updater.syncToMarks(i == this.node.childCount ? Mark.none : this.node.child(i).marks, inline, view, i);\n // If the next node is a desc matching this widget, reuse it,\n // otherwise insert the widget as a new view desc.\n updater.placeWidget(widget, view, off);\n }, (child, outerDeco, innerDeco, i) => {\n // Make sure the wrapping mark descs match the node's marks.\n updater.syncToMarks(child.marks, inline, view, i);\n // Try several strategies for drawing this node\n let compIndex;\n if (updater.findNodeMatch(child, outerDeco, innerDeco, i)) ;\n else if (compositionInChild && view.state.selection.from > off &&\n view.state.selection.to < off + child.nodeSize &&\n (compIndex = updater.findIndexWithChild(composition.node)) > -1 &&\n updater.updateNodeAt(child, outerDeco, innerDeco, compIndex, view)) ;\n else if (updater.updateNextNode(child, outerDeco, innerDeco, view, i, off)) ;\n else {\n // Add it as a new view\n updater.addNode(child, outerDeco, innerDeco, view, off);\n }\n off += child.nodeSize;\n });\n // Drop all remaining descs after the current position.\n updater.syncToMarks([], inline, view, 0);\n if (this.node.isTextblock)\n updater.addTextblockHacks();\n updater.destroyRest();\n // Sync the DOM if anything changed\n if (updater.changed || this.dirty == CONTENT_DIRTY) {\n // May have to protect focused DOM from being changed if a composition is active\n if (localComposition)\n this.protectLocalComposition(view, localComposition);\n renderDescs(this.contentDOM, this.children, view);\n if (ios)\n iosHacks(this.dom);\n }\n }\n localCompositionInfo(view, pos) {\n // Only do something if both the selection and a focused text node\n // are inside of this node\n let { from, to } = view.state.selection;\n if (!(view.state.selection instanceof TextSelection) || from < pos || to > pos + this.node.content.size)\n return null;\n let textNode = view.input.compositionNode;\n if (!textNode || !this.dom.contains(textNode.parentNode))\n return null;\n if (this.node.inlineContent) {\n // Find the text in the focused node in the node, stop if it's not\n // there (may have been modified through other means, in which\n // case it should overwritten)\n let text = textNode.nodeValue;\n let textPos = findTextInFragment(this.node.content, text, from - pos, to - pos);\n return textPos < 0 ? null : { node: textNode, pos: textPos, text };\n }\n else {\n return { node: textNode, pos: -1, text: \"\" };\n }\n }\n protectLocalComposition(view, { node, pos, text }) {\n // The node is already part of a local view desc, leave it there\n if (this.getDesc(node))\n return;\n // Create a composition view for the orphaned nodes\n let topNode = node;\n for (;; topNode = topNode.parentNode) {\n if (topNode.parentNode == this.contentDOM)\n break;\n while (topNode.previousSibling)\n topNode.parentNode.removeChild(topNode.previousSibling);\n while (topNode.nextSibling)\n topNode.parentNode.removeChild(topNode.nextSibling);\n if (topNode.pmViewDesc)\n topNode.pmViewDesc = undefined;\n }\n let desc = new CompositionViewDesc(this, topNode, node, text);\n view.input.compositionNodes.push(desc);\n // Patch up this.children to contain the composition view\n this.children = replaceNodes(this.children, pos, pos + text.length, view, desc);\n }\n // If this desc must be updated to match the given node decoration,\n // do so and return true.\n update(node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY ||\n !node.sameMarkup(this.node))\n return false;\n this.updateInner(node, outerDeco, innerDeco, view);\n return true;\n }\n updateInner(node, outerDeco, innerDeco, view) {\n this.updateOuterDeco(outerDeco);\n this.node = node;\n this.innerDeco = innerDeco;\n if (this.contentDOM)\n this.updateChildren(view, this.posAtStart);\n this.dirty = NOT_DIRTY;\n }\n updateOuterDeco(outerDeco) {\n if (sameOuterDeco(outerDeco, this.outerDeco))\n return;\n let needsWrap = this.nodeDOM.nodeType != 1;\n let oldDOM = this.dom;\n this.dom = patchOuterDeco(this.dom, this.nodeDOM, computeOuterDeco(this.outerDeco, this.node, needsWrap), computeOuterDeco(outerDeco, this.node, needsWrap));\n if (this.dom != oldDOM) {\n oldDOM.pmViewDesc = undefined;\n this.dom.pmViewDesc = this;\n }\n this.outerDeco = outerDeco;\n }\n // Mark this node as being the selected node.\n selectNode() {\n if (this.nodeDOM.nodeType == 1) {\n this.nodeDOM.classList.add(\"ProseMirror-selectednode\");\n if (this.contentDOM || !this.node.type.spec.draggable)\n this.nodeDOM.draggable = true;\n }\n }\n // Remove selected node marking from this node.\n deselectNode() {\n if (this.nodeDOM.nodeType == 1) {\n this.nodeDOM.classList.remove(\"ProseMirror-selectednode\");\n if (this.contentDOM || !this.node.type.spec.draggable)\n this.nodeDOM.removeAttribute(\"draggable\");\n }\n }\n get domAtom() { return this.node.isAtom; }\n}\n// Create a view desc for the top-level document node, to be exported\n// and used by the view class.\nfunction docViewDesc(doc, outerDeco, innerDeco, dom, view) {\n applyOuterDeco(dom, outerDeco, doc);\n let docView = new NodeViewDesc(undefined, doc, outerDeco, innerDeco, dom, dom, dom, view, 0);\n if (docView.contentDOM)\n docView.updateChildren(view, 0);\n return docView;\n}\nclass TextViewDesc extends NodeViewDesc {\n constructor(parent, node, outerDeco, innerDeco, dom, nodeDOM, view) {\n super(parent, node, outerDeco, innerDeco, dom, null, nodeDOM, view, 0);\n }\n parseRule() {\n let skip = this.nodeDOM.parentNode;\n while (skip && skip != this.dom && !skip.pmIsDeco)\n skip = skip.parentNode;\n return { skip: (skip || true) };\n }\n update(node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY || (this.dirty != NOT_DIRTY && !this.inParent()) ||\n !node.sameMarkup(this.node))\n return false;\n this.updateOuterDeco(outerDeco);\n if ((this.dirty != NOT_DIRTY || node.text != this.node.text) && node.text != this.nodeDOM.nodeValue) {\n this.nodeDOM.nodeValue = node.text;\n if (view.trackWrites == this.nodeDOM)\n view.trackWrites = null;\n }\n this.node = node;\n this.dirty = NOT_DIRTY;\n return true;\n }\n inParent() {\n let parentDOM = this.parent.contentDOM;\n for (let n = this.nodeDOM; n; n = n.parentNode)\n if (n == parentDOM)\n return true;\n return false;\n }\n domFromPos(pos) {\n return { node: this.nodeDOM, offset: pos };\n }\n localPosFromDOM(dom, offset, bias) {\n if (dom == this.nodeDOM)\n return this.posAtStart + Math.min(offset, this.node.text.length);\n return super.localPosFromDOM(dom, offset, bias);\n }\n ignoreMutation(mutation) {\n return mutation.type != \"characterData\" && mutation.type != \"selection\";\n }\n slice(from, to, view) {\n let node = this.node.cut(from, to), dom = document.createTextNode(node.text);\n return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom, view);\n }\n markDirty(from, to) {\n super.markDirty(from, to);\n if (this.dom != this.nodeDOM && (from == 0 || to == this.nodeDOM.nodeValue.length))\n this.dirty = NODE_DIRTY;\n }\n get domAtom() { return false; }\n isText(text) { return this.node.text == text; }\n}\n// A dummy desc used to tag trailing BR or IMG nodes created to work\n// around contentEditable terribleness.\nclass TrailingHackViewDesc extends ViewDesc {\n parseRule() { return { ignore: true }; }\n matchesHack(nodeName) { return this.dirty == NOT_DIRTY && this.dom.nodeName == nodeName; }\n get domAtom() { return true; }\n get ignoreForCoords() { return this.dom.nodeName == \"IMG\"; }\n}\n// A separate subclass is used for customized node views, so that the\n// extra checks only have to be made for nodes that are actually\n// customized.\nclass CustomNodeViewDesc extends NodeViewDesc {\n constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec, view, pos) {\n super(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos);\n this.spec = spec;\n }\n // A custom `update` method gets to decide whether the update goes\n // through. If it does, and there's a `contentDOM` node, our logic\n // updates the children.\n update(node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY)\n return false;\n if (this.spec.update && (this.node.type == node.type || this.spec.multiType)) {\n let result = this.spec.update(node, outerDeco, innerDeco);\n if (result)\n this.updateInner(node, outerDeco, innerDeco, view);\n return result;\n }\n else if (!this.contentDOM && !node.isLeaf) {\n return false;\n }\n else {\n return super.update(node, outerDeco, innerDeco, view);\n }\n }\n selectNode() {\n this.spec.selectNode ? this.spec.selectNode() : super.selectNode();\n }\n deselectNode() {\n this.spec.deselectNode ? this.spec.deselectNode() : super.deselectNode();\n }\n setSelection(anchor, head, view, force) {\n this.spec.setSelection ? this.spec.setSelection(anchor, head, view.root)\n : super.setSelection(anchor, head, view, force);\n }\n destroy() {\n if (this.spec.destroy)\n this.spec.destroy();\n super.destroy();\n }\n stopEvent(event) {\n return this.spec.stopEvent ? this.spec.stopEvent(event) : false;\n }\n ignoreMutation(mutation) {\n return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : super.ignoreMutation(mutation);\n }\n}\n// Sync the content of the given DOM node with the nodes associated\n// with the given array of view descs, recursing into mark descs\n// because this should sync the subtree for a whole node at a time.\nfunction renderDescs(parentDOM, descs, view) {\n let dom = parentDOM.firstChild, written = false;\n for (let i = 0; i < descs.length; i++) {\n let desc = descs[i], childDOM = desc.dom;\n if (childDOM.parentNode == parentDOM) {\n while (childDOM != dom) {\n dom = rm(dom);\n written = true;\n }\n dom = dom.nextSibling;\n }\n else {\n written = true;\n parentDOM.insertBefore(childDOM, dom);\n }\n if (desc instanceof MarkViewDesc) {\n let pos = dom ? dom.previousSibling : parentDOM.lastChild;\n renderDescs(desc.contentDOM, desc.children, view);\n dom = pos ? pos.nextSibling : parentDOM.firstChild;\n }\n }\n while (dom) {\n dom = rm(dom);\n written = true;\n }\n if (written && view.trackWrites == parentDOM)\n view.trackWrites = null;\n}\nconst OuterDecoLevel = function (nodeName) {\n if (nodeName)\n this.nodeName = nodeName;\n};\nOuterDecoLevel.prototype = Object.create(null);\nconst noDeco = [new OuterDecoLevel];\nfunction computeOuterDeco(outerDeco, node, needsWrap) {\n if (outerDeco.length == 0)\n return noDeco;\n let top = needsWrap ? noDeco[0] : new OuterDecoLevel, result = [top];\n for (let i = 0; i < outerDeco.length; i++) {\n let attrs = outerDeco[i].type.attrs;\n if (!attrs)\n continue;\n if (attrs.nodeName)\n result.push(top = new OuterDecoLevel(attrs.nodeName));\n for (let name in attrs) {\n let val = attrs[name];\n if (val == null)\n continue;\n if (needsWrap && result.length == 1)\n result.push(top = new OuterDecoLevel(node.isInline ? \"span\" : \"div\"));\n if (name == \"class\")\n top.class = (top.class ? top.class + \" \" : \"\") + val;\n else if (name == \"style\")\n top.style = (top.style ? top.style + \";\" : \"\") + val;\n else if (name != \"nodeName\")\n top[name] = val;\n }\n }\n return result;\n}\nfunction patchOuterDeco(outerDOM, nodeDOM, prevComputed, curComputed) {\n // Shortcut for trivial case\n if (prevComputed == noDeco && curComputed == noDeco)\n return nodeDOM;\n let curDOM = nodeDOM;\n for (let i = 0; i < curComputed.length; i++) {\n let deco = curComputed[i], prev = prevComputed[i];\n if (i) {\n let parent;\n if (prev && prev.nodeName == deco.nodeName && curDOM != outerDOM &&\n (parent = curDOM.parentNode) && parent.nodeName.toLowerCase() == deco.nodeName) {\n curDOM = parent;\n }\n else {\n parent = document.createElement(deco.nodeName);\n parent.pmIsDeco = true;\n parent.appendChild(curDOM);\n prev = noDeco[0];\n curDOM = parent;\n }\n }\n patchAttributes(curDOM, prev || noDeco[0], deco);\n }\n return curDOM;\n}\nfunction patchAttributes(dom, prev, cur) {\n for (let name in prev)\n if (name != \"class\" && name != \"style\" && name != \"nodeName\" && !(name in cur))\n dom.removeAttribute(name);\n for (let name in cur)\n if (name != \"class\" && name != \"style\" && name != \"nodeName\" && cur[name] != prev[name])\n dom.setAttribute(name, cur[name]);\n if (prev.class != cur.class) {\n let prevList = prev.class ? prev.class.split(\" \").filter(Boolean) : [];\n let curList = cur.class ? cur.class.split(\" \").filter(Boolean) : [];\n for (let i = 0; i < prevList.length; i++)\n if (curList.indexOf(prevList[i]) == -1)\n dom.classList.remove(prevList[i]);\n for (let i = 0; i < curList.length; i++)\n if (prevList.indexOf(curList[i]) == -1)\n dom.classList.add(curList[i]);\n if (dom.classList.length == 0)\n dom.removeAttribute(\"class\");\n }\n if (prev.style != cur.style) {\n if (prev.style) {\n let prop = /\\s*([\\w\\-\\xa1-\\uffff]+)\\s*:(?:\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|\\(.*?\\)|[^;])*/g, m;\n while (m = prop.exec(prev.style))\n dom.style.removeProperty(m[1]);\n }\n if (cur.style)\n dom.style.cssText += cur.style;\n }\n}\nfunction applyOuterDeco(dom, deco, node) {\n return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, dom.nodeType != 1));\n}\nfunction sameOuterDeco(a, b) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!a[i].type.eq(b[i].type))\n return false;\n return true;\n}\n// Remove a DOM node and return its next sibling.\nfunction rm(dom) {\n let next = dom.nextSibling;\n dom.parentNode.removeChild(dom);\n return next;\n}\n// Helper class for incrementally updating a tree of mark descs and\n// the widget and node descs inside of them.\nclass ViewTreeUpdater {\n constructor(top, lock, view) {\n this.lock = lock;\n this.view = view;\n // Index into `this.top`'s child array, represents the current\n // update position.\n this.index = 0;\n // When entering a mark, the current top and index are pushed\n // onto this.\n this.stack = [];\n // Tracks whether anything was changed\n this.changed = false;\n this.top = top;\n this.preMatch = preMatch(top.node.content, top);\n }\n // Destroy and remove the children between the given indices in\n // `this.top`.\n destroyBetween(start, end) {\n if (start == end)\n return;\n for (let i = start; i < end; i++)\n this.top.children[i].destroy();\n this.top.children.splice(start, end - start);\n this.changed = true;\n }\n // Destroy all remaining children in `this.top`.\n destroyRest() {\n this.destroyBetween(this.index, this.top.children.length);\n }\n // Sync the current stack of mark descs with the given array of\n // marks, reusing existing mark descs when possible.\n syncToMarks(marks, inline, view, parentIndex) {\n let keep = 0, depth = this.stack.length >> 1;\n let maxKeep = Math.min(depth, marks.length);\n while (keep < maxKeep &&\n (keep == depth - 1 ? this.top : this.stack[(keep + 1) << 1])\n .matchesMark(marks[keep]) && marks[keep].type.spec.spanning !== false)\n keep++;\n while (keep < depth) {\n this.destroyRest();\n this.top.dirty = NOT_DIRTY;\n this.index = this.stack.pop();\n this.top = this.stack.pop();\n depth--;\n }\n while (depth < marks.length) {\n this.stack.push(this.top, this.index + 1);\n let found = -1, scanTo = this.top.children.length;\n if (parentIndex < this.preMatch.index)\n scanTo = Math.min(this.index + 3, scanTo);\n for (let i = this.index; i < scanTo; i++) {\n let next = this.top.children[i];\n if (next.matchesMark(marks[depth]) && !this.isLocked(next.dom)) {\n found = i;\n break;\n }\n }\n if (found > -1) {\n if (found > this.index) {\n this.changed = true;\n this.destroyBetween(this.index, found);\n }\n this.top = this.top.children[this.index];\n }\n else {\n let markDesc = MarkViewDesc.create(this.top, marks[depth], inline, view);\n this.top.children.splice(this.index, 0, markDesc);\n this.top = markDesc;\n this.changed = true;\n }\n this.index = 0;\n depth++;\n }\n }\n // Try to find a node desc matching the given data. Skip over it and\n // return true when successful.\n findNodeMatch(node, outerDeco, innerDeco, index) {\n let found = -1, targetDesc;\n if (index >= this.preMatch.index &&\n (targetDesc = this.preMatch.matches[index - this.preMatch.index]).parent == this.top &&\n targetDesc.matchesNode(node, outerDeco, innerDeco)) {\n found = this.top.children.indexOf(targetDesc, this.index);\n }\n else {\n for (let i = this.index, e = Math.min(this.top.children.length, i + 5); i < e; i++) {\n let child = this.top.children[i];\n if (child.matchesNode(node, outerDeco, innerDeco) && !this.preMatch.matched.has(child)) {\n found = i;\n break;\n }\n }\n }\n if (found < 0)\n return false;\n this.destroyBetween(this.index, found);\n this.index++;\n return true;\n }\n updateNodeAt(node, outerDeco, innerDeco, index, view) {\n let child = this.top.children[index];\n if (child.dirty == NODE_DIRTY && child.dom == child.contentDOM)\n child.dirty = CONTENT_DIRTY;\n if (!child.update(node, outerDeco, innerDeco, view))\n return false;\n this.destroyBetween(this.index, index);\n this.index++;\n return true;\n }\n findIndexWithChild(domNode) {\n for (;;) {\n let parent = domNode.parentNode;\n if (!parent)\n return -1;\n if (parent == this.top.contentDOM) {\n let desc = domNode.pmViewDesc;\n if (desc)\n for (let i = this.index; i < this.top.children.length; i++) {\n if (this.top.children[i] == desc)\n return i;\n }\n return -1;\n }\n domNode = parent;\n }\n }\n // Try to update the next node, if any, to the given data. Checks\n // pre-matches to avoid overwriting nodes that could still be used.\n updateNextNode(node, outerDeco, innerDeco, view, index, pos) {\n for (let i = this.index; i < this.top.children.length; i++) {\n let next = this.top.children[i];\n if (next instanceof NodeViewDesc) {\n let preMatch = this.preMatch.matched.get(next);\n if (preMatch != null && preMatch != index)\n return false;\n let nextDOM = next.dom, updated;\n // Can't update if nextDOM is or contains this.lock, except if\n // it's a text node whose content already matches the new text\n // and whose decorations match the new ones.\n let locked = this.isLocked(nextDOM) &&\n !(node.isText && next.node && next.node.isText && next.nodeDOM.nodeValue == node.text &&\n next.dirty != NODE_DIRTY && sameOuterDeco(outerDeco, next.outerDeco));\n if (!locked && next.update(node, outerDeco, innerDeco, view)) {\n this.destroyBetween(this.index, i);\n if (next.dom != nextDOM)\n this.changed = true;\n this.index++;\n return true;\n }\n else if (!locked && (updated = this.recreateWrapper(next, node, outerDeco, innerDeco, view, pos))) {\n this.destroyBetween(this.index, i);\n this.top.children[this.index] = updated;\n if (updated.contentDOM) {\n updated.dirty = CONTENT_DIRTY;\n updated.updateChildren(view, pos + 1);\n updated.dirty = NOT_DIRTY;\n }\n this.changed = true;\n this.index++;\n return true;\n }\n break;\n }\n }\n return false;\n }\n // When a node with content is replaced by a different node with\n // identical content, move over its children.\n recreateWrapper(next, node, outerDeco, innerDeco, view, pos) {\n if (next.dirty || node.isAtom || !next.children.length ||\n !next.node.content.eq(node.content) ||\n !sameOuterDeco(outerDeco, next.outerDeco) || !innerDeco.eq(next.innerDeco))\n return null;\n let wrapper = NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos);\n if (wrapper.contentDOM) {\n wrapper.children = next.children;\n next.children = [];\n for (let ch of wrapper.children)\n ch.parent = wrapper;\n }\n next.destroy();\n return wrapper;\n }\n // Insert the node as a newly created node desc.\n addNode(node, outerDeco, innerDeco, view, pos) {\n let desc = NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos);\n if (desc.contentDOM)\n desc.updateChildren(view, pos + 1);\n this.top.children.splice(this.index++, 0, desc);\n this.changed = true;\n }\n placeWidget(widget, view, pos) {\n let next = this.index < this.top.children.length ? this.top.children[this.index] : null;\n if (next && next.matchesWidget(widget) &&\n (widget == next.widget || !next.widget.type.toDOM.parentNode)) {\n this.index++;\n }\n else {\n let desc = new WidgetViewDesc(this.top, widget, view, pos);\n this.top.children.splice(this.index++, 0, desc);\n this.changed = true;\n }\n }\n // Make sure a textblock looks and behaves correctly in\n // contentEditable.\n addTextblockHacks() {\n let lastChild = this.top.children[this.index - 1], parent = this.top;\n while (lastChild instanceof MarkViewDesc) {\n parent = lastChild;\n lastChild = parent.children[parent.children.length - 1];\n }\n if (!lastChild || // Empty textblock\n !(lastChild instanceof TextViewDesc) ||\n /\\n$/.test(lastChild.node.text) ||\n (this.view.requiresGeckoHackNode && /\\s$/.test(lastChild.node.text))) {\n // Avoid bugs in Safari's cursor drawing (#1165) and Chrome's mouse selection (#1152)\n if ((safari || chrome) && lastChild && lastChild.dom.contentEditable == \"false\")\n this.addHackNode(\"IMG\", parent);\n this.addHackNode(\"BR\", this.top);\n }\n }\n addHackNode(nodeName, parent) {\n if (parent == this.top && this.index < parent.children.length && parent.children[this.index].matchesHack(nodeName)) {\n this.index++;\n }\n else {\n let dom = document.createElement(nodeName);\n if (nodeName == \"IMG\") {\n dom.className = \"ProseMirror-separator\";\n dom.alt = \"\";\n }\n if (nodeName == \"BR\")\n dom.className = \"ProseMirror-trailingBreak\";\n let hack = new TrailingHackViewDesc(this.top, [], dom, null);\n if (parent != this.top)\n parent.children.push(hack);\n else\n parent.children.splice(this.index++, 0, hack);\n this.changed = true;\n }\n }\n isLocked(node) {\n return this.lock && (node == this.lock || node.nodeType == 1 && node.contains(this.lock.parentNode));\n }\n}\n// Iterate from the end of the fragment and array of descs to find\n// directly matching ones, in order to avoid overeagerly reusing those\n// for other nodes.\nfunction preMatch(frag, parentDesc) {\n let curDesc = parentDesc, descI = curDesc.children.length;\n let fI = frag.childCount, matched = new Map, matches = [];\n outer: while (fI > 0) {\n let desc;\n for (;;) {\n if (descI) {\n let next = curDesc.children[descI - 1];\n if (next instanceof MarkViewDesc) {\n curDesc = next;\n descI = next.children.length;\n }\n else {\n desc = next;\n descI--;\n break;\n }\n }\n else if (curDesc == parentDesc) {\n break outer;\n }\n else {\n descI = curDesc.parent.children.indexOf(curDesc);\n curDesc = curDesc.parent;\n }\n }\n let node = desc.node;\n if (!node)\n continue;\n if (node != frag.child(fI - 1))\n break;\n --fI;\n matched.set(desc, fI);\n matches.push(desc);\n }\n return { index: fI, matched, matches: matches.reverse() };\n}\nfunction compareSide(a, b) {\n return a.type.side - b.type.side;\n}\n// This function abstracts iterating over the nodes and decorations in\n// a fragment. Calls `onNode` for each node, with its local and child\n// decorations. Splits text nodes when there is a decoration starting\n// or ending inside of them. Calls `onWidget` for each widget.\nfunction iterDeco(parent, deco, onWidget, onNode) {\n let locals = deco.locals(parent), offset = 0;\n // Simple, cheap variant for when there are no local decorations\n if (locals.length == 0) {\n for (let i = 0; i < parent.childCount; i++) {\n let child = parent.child(i);\n onNode(child, locals, deco.forChild(offset, child), i);\n offset += child.nodeSize;\n }\n return;\n }\n let decoIndex = 0, active = [], restNode = null;\n for (let parentIndex = 0;;) {\n let widget, widgets;\n while (decoIndex < locals.length && locals[decoIndex].to == offset) {\n let next = locals[decoIndex++];\n if (next.widget) {\n if (!widget)\n widget = next;\n else\n (widgets || (widgets = [widget])).push(next);\n }\n }\n if (widget) {\n if (widgets) {\n widgets.sort(compareSide);\n for (let i = 0; i < widgets.length; i++)\n onWidget(widgets[i], parentIndex, !!restNode);\n }\n else {\n onWidget(widget, parentIndex, !!restNode);\n }\n }\n let child, index;\n if (restNode) {\n index = -1;\n child = restNode;\n restNode = null;\n }\n else if (parentIndex < parent.childCount) {\n index = parentIndex;\n child = parent.child(parentIndex++);\n }\n else {\n break;\n }\n for (let i = 0; i < active.length; i++)\n if (active[i].to <= offset)\n active.splice(i--, 1);\n while (decoIndex < locals.length && locals[decoIndex].from <= offset && locals[decoIndex].to > offset)\n active.push(locals[decoIndex++]);\n let end = offset + child.nodeSize;\n if (child.isText) {\n let cutAt = end;\n if (decoIndex < locals.length && locals[decoIndex].from < cutAt)\n cutAt = locals[decoIndex].from;\n for (let i = 0; i < active.length; i++)\n if (active[i].to < cutAt)\n cutAt = active[i].to;\n if (cutAt < end) {\n restNode = child.cut(cutAt - offset);\n child = child.cut(0, cutAt - offset);\n end = cutAt;\n index = -1;\n }\n }\n else {\n while (decoIndex < locals.length && locals[decoIndex].to < end)\n decoIndex++;\n }\n let outerDeco = child.isInline && !child.isLeaf ? active.filter(d => !d.inline) : active.slice();\n onNode(child, outerDeco, deco.forChild(offset, child), index);\n offset = end;\n }\n}\n// List markers in Mobile Safari will mysteriously disappear\n// sometimes. This works around that.\nfunction iosHacks(dom) {\n if (dom.nodeName == \"UL\" || dom.nodeName == \"OL\") {\n let oldCSS = dom.style.cssText;\n dom.style.cssText = oldCSS + \"; list-style: square !important\";\n window.getComputedStyle(dom).listStyle;\n dom.style.cssText = oldCSS;\n }\n}\n// Find a piece of text in an inline fragment, overlapping from-to\nfunction findTextInFragment(frag, text, from, to) {\n for (let i = 0, pos = 0; i < frag.childCount && pos <= to;) {\n let child = frag.child(i++), childStart = pos;\n pos += child.nodeSize;\n if (!child.isText)\n continue;\n let str = child.text;\n while (i < frag.childCount) {\n let next = frag.child(i++);\n pos += next.nodeSize;\n if (!next.isText)\n break;\n str += next.text;\n }\n if (pos >= from) {\n if (pos >= to && str.slice(to - text.length - childStart, to - childStart) == text)\n return to - text.length;\n let found = childStart < to ? str.lastIndexOf(text, to - childStart - 1) : -1;\n if (found >= 0 && found + text.length + childStart >= from)\n return childStart + found;\n if (from == to && str.length >= (to + text.length) - childStart &&\n str.slice(to - childStart, to - childStart + text.length) == text)\n return to;\n }\n }\n return -1;\n}\n// Replace range from-to in an array of view descs with replacement\n// (may be null to just delete). This goes very much against the grain\n// of the rest of this code, which tends to create nodes with the\n// right shape in one go, rather than messing with them after\n// creation, but is necessary in the composition hack.\nfunction replaceNodes(nodes, from, to, view, replacement) {\n let result = [];\n for (let i = 0, off = 0; i < nodes.length; i++) {\n let child = nodes[i], start = off, end = off += child.size;\n if (start >= to || end <= from) {\n result.push(child);\n }\n else {\n if (start < from)\n result.push(child.slice(0, from - start, view));\n if (replacement) {\n result.push(replacement);\n replacement = undefined;\n }\n if (end > to)\n result.push(child.slice(to - start, child.size, view));\n }\n }\n return result;\n}\n\nfunction selectionFromDOM(view, origin = null) {\n let domSel = view.domSelectionRange(), doc = view.state.doc;\n if (!domSel.focusNode)\n return null;\n let nearestDesc = view.docView.nearestDesc(domSel.focusNode), inWidget = nearestDesc && nearestDesc.size == 0;\n let head = view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset, 1);\n if (head < 0)\n return null;\n let $head = doc.resolve(head), anchor, selection;\n if (selectionCollapsed(domSel)) {\n anchor = head;\n while (nearestDesc && !nearestDesc.node)\n nearestDesc = nearestDesc.parent;\n let nearestDescNode = nearestDesc.node;\n if (nearestDesc && nearestDescNode.isAtom && NodeSelection.isSelectable(nearestDescNode) && nearestDesc.parent\n && !(nearestDescNode.isInline && isOnEdge(domSel.focusNode, domSel.focusOffset, nearestDesc.dom))) {\n let pos = nearestDesc.posBefore;\n selection = new NodeSelection(head == pos ? $head : doc.resolve(pos));\n }\n }\n else {\n if (domSel instanceof view.dom.ownerDocument.defaultView.Selection && domSel.rangeCount > 1) {\n let min = head, max = head;\n for (let i = 0; i < domSel.rangeCount; i++) {\n let range = domSel.getRangeAt(i);\n min = Math.min(min, view.docView.posFromDOM(range.startContainer, range.startOffset, 1));\n max = Math.max(max, view.docView.posFromDOM(range.endContainer, range.endOffset, -1));\n }\n if (min < 0)\n return null;\n [anchor, head] = max == view.state.selection.anchor ? [max, min] : [min, max];\n $head = doc.resolve(head);\n }\n else {\n anchor = view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset, 1);\n }\n if (anchor < 0)\n return null;\n }\n let $anchor = doc.resolve(anchor);\n if (!selection) {\n let bias = origin == \"pointer\" || (view.state.selection.head < $head.pos && !inWidget) ? 1 : -1;\n selection = selectionBetween(view, $anchor, $head, bias);\n }\n return selection;\n}\nfunction editorOwnsSelection(view) {\n return view.editable ? view.hasFocus() :\n hasSelection(view) && document.activeElement && document.activeElement.contains(view.dom);\n}\nfunction selectionToDOM(view, force = false) {\n let sel = view.state.selection;\n syncNodeSelection(view, sel);\n if (!editorOwnsSelection(view))\n return;\n // The delayed drag selection causes issues with Cell Selections\n // in Safari. And the drag selection delay is to workarond issues\n // which only present in Chrome.\n if (!force && view.input.mouseDown && view.input.mouseDown.allowDefault && chrome) {\n let domSel = view.domSelectionRange(), curSel = view.domObserver.currentSelection;\n if (domSel.anchorNode && curSel.anchorNode &&\n isEquivalentPosition(domSel.anchorNode, domSel.anchorOffset, curSel.anchorNode, curSel.anchorOffset)) {\n view.input.mouseDown.delayedSelectionSync = true;\n view.domObserver.setCurSelection();\n return;\n }\n }\n view.domObserver.disconnectSelection();\n if (view.cursorWrapper) {\n selectCursorWrapper(view);\n }\n else {\n let { anchor, head } = sel, resetEditableFrom, resetEditableTo;\n if (brokenSelectBetweenUneditable && !(sel instanceof TextSelection)) {\n if (!sel.$from.parent.inlineContent)\n resetEditableFrom = temporarilyEditableNear(view, sel.from);\n if (!sel.empty && !sel.$from.parent.inlineContent)\n resetEditableTo = temporarilyEditableNear(view, sel.to);\n }\n view.docView.setSelection(anchor, head, view, force);\n if (brokenSelectBetweenUneditable) {\n if (resetEditableFrom)\n resetEditable(resetEditableFrom);\n if (resetEditableTo)\n resetEditable(resetEditableTo);\n }\n if (sel.visible) {\n view.dom.classList.remove(\"ProseMirror-hideselection\");\n }\n else {\n view.dom.classList.add(\"ProseMirror-hideselection\");\n if (\"onselectionchange\" in document)\n removeClassOnSelectionChange(view);\n }\n }\n view.domObserver.setCurSelection();\n view.domObserver.connectSelection();\n}\n// Kludge to work around Webkit not allowing a selection to start/end\n// between non-editable block nodes. We briefly make something\n// editable, set the selection, then set it uneditable again.\nconst brokenSelectBetweenUneditable = safari || chrome && chrome_version < 63;\nfunction temporarilyEditableNear(view, pos) {\n let { node, offset } = view.docView.domFromPos(pos, 0);\n let after = offset < node.childNodes.length ? node.childNodes[offset] : null;\n let before = offset ? node.childNodes[offset - 1] : null;\n if (safari && after && after.contentEditable == \"false\")\n return setEditable(after);\n if ((!after || after.contentEditable == \"false\") &&\n (!before || before.contentEditable == \"false\")) {\n if (after)\n return setEditable(after);\n else if (before)\n return setEditable(before);\n }\n}\nfunction setEditable(element) {\n element.contentEditable = \"true\";\n if (safari && element.draggable) {\n element.draggable = false;\n element.wasDraggable = true;\n }\n return element;\n}\nfunction resetEditable(element) {\n element.contentEditable = \"false\";\n if (element.wasDraggable) {\n element.draggable = true;\n element.wasDraggable = null;\n }\n}\nfunction removeClassOnSelectionChange(view) {\n let doc = view.dom.ownerDocument;\n doc.removeEventListener(\"selectionchange\", view.input.hideSelectionGuard);\n let domSel = view.domSelectionRange();\n let node = domSel.anchorNode, offset = domSel.anchorOffset;\n doc.addEventListener(\"selectionchange\", view.input.hideSelectionGuard = () => {\n if (domSel.anchorNode != node || domSel.anchorOffset != offset) {\n doc.removeEventListener(\"selectionchange\", view.input.hideSelectionGuard);\n setTimeout(() => {\n if (!editorOwnsSelection(view) || view.state.selection.visible)\n view.dom.classList.remove(\"ProseMirror-hideselection\");\n }, 20);\n }\n });\n}\nfunction selectCursorWrapper(view) {\n let domSel = view.domSelection();\n if (!domSel)\n return;\n let node = view.cursorWrapper.dom, img = node.nodeName == \"IMG\";\n if (img)\n domSel.collapse(node.parentNode, domIndex(node) + 1);\n else\n domSel.collapse(node, 0);\n // Kludge to kill 'control selection' in IE11 when selecting an\n // invisible cursor wrapper, since that would result in those weird\n // resize handles and a selection that considers the absolutely\n // positioned wrapper, rather than the root editable node, the\n // focused element.\n if (!img && !view.state.selection.visible && ie && ie_version <= 11) {\n node.disabled = true;\n node.disabled = false;\n }\n}\nfunction syncNodeSelection(view, sel) {\n if (sel instanceof NodeSelection) {\n let desc = view.docView.descAt(sel.from);\n if (desc != view.lastSelectedViewDesc) {\n clearNodeSelection(view);\n if (desc)\n desc.selectNode();\n view.lastSelectedViewDesc = desc;\n }\n }\n else {\n clearNodeSelection(view);\n }\n}\n// Clear all DOM statefulness of the last node selection.\nfunction clearNodeSelection(view) {\n if (view.lastSelectedViewDesc) {\n if (view.lastSelectedViewDesc.parent)\n view.lastSelectedViewDesc.deselectNode();\n view.lastSelectedViewDesc = undefined;\n }\n}\nfunction selectionBetween(view, $anchor, $head, bias) {\n return view.someProp(\"createSelectionBetween\", f => f(view, $anchor, $head))\n || TextSelection.between($anchor, $head, bias);\n}\nfunction hasFocusAndSelection(view) {\n if (view.editable && !view.hasFocus())\n return false;\n return hasSelection(view);\n}\nfunction hasSelection(view) {\n let sel = view.domSelectionRange();\n if (!sel.anchorNode)\n return false;\n try {\n // Firefox will raise 'permission denied' errors when accessing\n // properties of `sel.anchorNode` when it's in a generated CSS\n // element.\n return view.dom.contains(sel.anchorNode.nodeType == 3 ? sel.anchorNode.parentNode : sel.anchorNode) &&\n (view.editable || view.dom.contains(sel.focusNode.nodeType == 3 ? sel.focusNode.parentNode : sel.focusNode));\n }\n catch (_) {\n return false;\n }\n}\nfunction anchorInRightPlace(view) {\n let anchorDOM = view.docView.domFromPos(view.state.selection.anchor, 0);\n let domSel = view.domSelectionRange();\n return isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset);\n}\n\nfunction moveSelectionBlock(state, dir) {\n let { $anchor, $head } = state.selection;\n let $side = dir > 0 ? $anchor.max($head) : $anchor.min($head);\n let $start = !$side.parent.inlineContent ? $side : $side.depth ? state.doc.resolve(dir > 0 ? $side.after() : $side.before()) : null;\n return $start && Selection.findFrom($start, dir);\n}\nfunction apply(view, sel) {\n view.dispatch(view.state.tr.setSelection(sel).scrollIntoView());\n return true;\n}\nfunction selectHorizontally(view, dir, mods) {\n let sel = view.state.selection;\n if (sel instanceof TextSelection) {\n if (mods.indexOf(\"s\") > -1) {\n let { $head } = sel, node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter;\n if (!node || node.isText || !node.isLeaf)\n return false;\n let $newHead = view.state.doc.resolve($head.pos + node.nodeSize * (dir < 0 ? -1 : 1));\n return apply(view, new TextSelection(sel.$anchor, $newHead));\n }\n else if (!sel.empty) {\n return false;\n }\n else if (view.endOfTextblock(dir > 0 ? \"forward\" : \"backward\")) {\n let next = moveSelectionBlock(view.state, dir);\n if (next && (next instanceof NodeSelection))\n return apply(view, next);\n return false;\n }\n else if (!(mac && mods.indexOf(\"m\") > -1)) {\n let $head = sel.$head, node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter, desc;\n if (!node || node.isText)\n return false;\n let nodePos = dir < 0 ? $head.pos - node.nodeSize : $head.pos;\n if (!(node.isAtom || (desc = view.docView.descAt(nodePos)) && !desc.contentDOM))\n return false;\n if (NodeSelection.isSelectable(node)) {\n return apply(view, new NodeSelection(dir < 0 ? view.state.doc.resolve($head.pos - node.nodeSize) : $head));\n }\n else if (webkit) {\n // Chrome and Safari will introduce extra pointless cursor\n // positions around inline uneditable nodes, so we have to\n // take over and move the cursor past them (#937)\n return apply(view, new TextSelection(view.state.doc.resolve(dir < 0 ? nodePos : nodePos + node.nodeSize)));\n }\n else {\n return false;\n }\n }\n }\n else if (sel instanceof NodeSelection && sel.node.isInline) {\n return apply(view, new TextSelection(dir > 0 ? sel.$to : sel.$from));\n }\n else {\n let next = moveSelectionBlock(view.state, dir);\n if (next)\n return apply(view, next);\n return false;\n }\n}\nfunction nodeLen(node) {\n return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction isIgnorable(dom, dir) {\n let desc = dom.pmViewDesc;\n return desc && desc.size == 0 && (dir < 0 || dom.nextSibling || dom.nodeName != \"BR\");\n}\nfunction skipIgnoredNodes(view, dir) {\n return dir < 0 ? skipIgnoredNodesBefore(view) : skipIgnoredNodesAfter(view);\n}\n// Make sure the cursor isn't directly after one or more ignored\n// nodes, which will confuse the browser's cursor motion logic.\nfunction skipIgnoredNodesBefore(view) {\n let sel = view.domSelectionRange();\n let node = sel.focusNode, offset = sel.focusOffset;\n if (!node)\n return;\n let moveNode, moveOffset, force = false;\n // Gecko will do odd things when the selection is directly in front\n // of a non-editable node, so in that case, move it into the next\n // node if possible. Issue prosemirror/prosemirror#832.\n if (gecko && node.nodeType == 1 && offset < nodeLen(node) && isIgnorable(node.childNodes[offset], -1))\n force = true;\n for (;;) {\n if (offset > 0) {\n if (node.nodeType != 1) {\n break;\n }\n else {\n let before = node.childNodes[offset - 1];\n if (isIgnorable(before, -1)) {\n moveNode = node;\n moveOffset = --offset;\n }\n else if (before.nodeType == 3) {\n node = before;\n offset = node.nodeValue.length;\n }\n else\n break;\n }\n }\n else if (isBlockNode(node)) {\n break;\n }\n else {\n let prev = node.previousSibling;\n while (prev && isIgnorable(prev, -1)) {\n moveNode = node.parentNode;\n moveOffset = domIndex(prev);\n prev = prev.previousSibling;\n }\n if (!prev) {\n node = node.parentNode;\n if (node == view.dom)\n break;\n offset = 0;\n }\n else {\n node = prev;\n offset = nodeLen(node);\n }\n }\n }\n if (force)\n setSelFocus(view, node, offset);\n else if (moveNode)\n setSelFocus(view, moveNode, moveOffset);\n}\n// Make sure the cursor isn't directly before one or more ignored\n// nodes.\nfunction skipIgnoredNodesAfter(view) {\n let sel = view.domSelectionRange();\n let node = sel.focusNode, offset = sel.focusOffset;\n if (!node)\n return;\n let len = nodeLen(node);\n let moveNode, moveOffset;\n for (;;) {\n if (offset < len) {\n if (node.nodeType != 1)\n break;\n let after = node.childNodes[offset];\n if (isIgnorable(after, 1)) {\n moveNode = node;\n moveOffset = ++offset;\n }\n else\n break;\n }\n else if (isBlockNode(node)) {\n break;\n }\n else {\n let next = node.nextSibling;\n while (next && isIgnorable(next, 1)) {\n moveNode = next.parentNode;\n moveOffset = domIndex(next) + 1;\n next = next.nextSibling;\n }\n if (!next) {\n node = node.parentNode;\n if (node == view.dom)\n break;\n offset = len = 0;\n }\n else {\n node = next;\n offset = 0;\n len = nodeLen(node);\n }\n }\n }\n if (moveNode)\n setSelFocus(view, moveNode, moveOffset);\n}\nfunction isBlockNode(dom) {\n let desc = dom.pmViewDesc;\n return desc && desc.node && desc.node.isBlock;\n}\nfunction textNodeAfter(node, offset) {\n while (node && offset == node.childNodes.length && !hasBlockDesc(node)) {\n offset = domIndex(node) + 1;\n node = node.parentNode;\n }\n while (node && offset < node.childNodes.length) {\n let next = node.childNodes[offset];\n if (next.nodeType == 3)\n return next;\n if (next.nodeType == 1 && next.contentEditable == \"false\")\n break;\n node = next;\n offset = 0;\n }\n}\nfunction textNodeBefore(node, offset) {\n while (node && !offset && !hasBlockDesc(node)) {\n offset = domIndex(node);\n node = node.parentNode;\n }\n while (node && offset) {\n let next = node.childNodes[offset - 1];\n if (next.nodeType == 3)\n return next;\n if (next.nodeType == 1 && next.contentEditable == \"false\")\n break;\n node = next;\n offset = node.childNodes.length;\n }\n}\nfunction setSelFocus(view, node, offset) {\n if (node.nodeType != 3) {\n let before, after;\n if (after = textNodeAfter(node, offset)) {\n node = after;\n offset = 0;\n }\n else if (before = textNodeBefore(node, offset)) {\n node = before;\n offset = before.nodeValue.length;\n }\n }\n let sel = view.domSelection();\n if (!sel)\n return;\n if (selectionCollapsed(sel)) {\n let range = document.createRange();\n range.setEnd(node, offset);\n range.setStart(node, offset);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n else if (sel.extend) {\n sel.extend(node, offset);\n }\n view.domObserver.setCurSelection();\n let { state } = view;\n // If no state update ends up happening, reset the selection.\n setTimeout(() => {\n if (view.state == state)\n selectionToDOM(view);\n }, 50);\n}\nfunction findDirection(view, pos) {\n let $pos = view.state.doc.resolve(pos);\n if (!(chrome || windows) && $pos.parent.inlineContent) {\n let coords = view.coordsAtPos(pos);\n if (pos > $pos.start()) {\n let before = view.coordsAtPos(pos - 1);\n let mid = (before.top + before.bottom) / 2;\n if (mid > coords.top && mid < coords.bottom && Math.abs(before.left - coords.left) > 1)\n return before.left < coords.left ? \"ltr\" : \"rtl\";\n }\n if (pos < $pos.end()) {\n let after = view.coordsAtPos(pos + 1);\n let mid = (after.top + after.bottom) / 2;\n if (mid > coords.top && mid < coords.bottom && Math.abs(after.left - coords.left) > 1)\n return after.left > coords.left ? \"ltr\" : \"rtl\";\n }\n }\n let computed = getComputedStyle(view.dom).direction;\n return computed == \"rtl\" ? \"rtl\" : \"ltr\";\n}\n// Check whether vertical selection motion would involve node\n// selections. If so, apply it (if not, the result is left to the\n// browser)\nfunction selectVertically(view, dir, mods) {\n let sel = view.state.selection;\n if (sel instanceof TextSelection && !sel.empty || mods.indexOf(\"s\") > -1)\n return false;\n if (mac && mods.indexOf(\"m\") > -1)\n return false;\n let { $from, $to } = sel;\n if (!$from.parent.inlineContent || view.endOfTextblock(dir < 0 ? \"up\" : \"down\")) {\n let next = moveSelectionBlock(view.state, dir);\n if (next && (next instanceof NodeSelection))\n return apply(view, next);\n }\n if (!$from.parent.inlineContent) {\n let side = dir < 0 ? $from : $to;\n let beyond = sel instanceof AllSelection ? Selection.near(side, dir) : Selection.findFrom(side, dir);\n return beyond ? apply(view, beyond) : false;\n }\n return false;\n}\nfunction stopNativeHorizontalDelete(view, dir) {\n if (!(view.state.selection instanceof TextSelection))\n return true;\n let { $head, $anchor, empty } = view.state.selection;\n if (!$head.sameParent($anchor))\n return true;\n if (!empty)\n return false;\n if (view.endOfTextblock(dir > 0 ? \"forward\" : \"backward\"))\n return true;\n let nextNode = !$head.textOffset && (dir < 0 ? $head.nodeBefore : $head.nodeAfter);\n if (nextNode && !nextNode.isText) {\n let tr = view.state.tr;\n if (dir < 0)\n tr.delete($head.pos - nextNode.nodeSize, $head.pos);\n else\n tr.delete($head.pos, $head.pos + nextNode.nodeSize);\n view.dispatch(tr);\n return true;\n }\n return false;\n}\nfunction switchEditable(view, node, state) {\n view.domObserver.stop();\n node.contentEditable = state;\n view.domObserver.start();\n}\n// Issue #867 / #1090 / https://bugs.chromium.org/p/chromium/issues/detail?id=903821\n// In which Safari (and at some point in the past, Chrome) does really\n// wrong things when the down arrow is pressed when the cursor is\n// directly at the start of a textblock and has an uneditable node\n// after it\nfunction safariDownArrowBug(view) {\n if (!safari || view.state.selection.$head.parentOffset > 0)\n return false;\n let { focusNode, focusOffset } = view.domSelectionRange();\n if (focusNode && focusNode.nodeType == 1 && focusOffset == 0 &&\n focusNode.firstChild && focusNode.firstChild.contentEditable == \"false\") {\n let child = focusNode.firstChild;\n switchEditable(view, child, \"true\");\n setTimeout(() => switchEditable(view, child, \"false\"), 20);\n }\n return false;\n}\n// A backdrop key mapping used to make sure we always suppress keys\n// that have a dangerous default effect, even if the commands they are\n// bound to return false, and to make sure that cursor-motion keys\n// find a cursor (as opposed to a node selection) when pressed. For\n// cursor-motion keys, the code in the handlers also takes care of\n// block selections.\nfunction getMods(event) {\n let result = \"\";\n if (event.ctrlKey)\n result += \"c\";\n if (event.metaKey)\n result += \"m\";\n if (event.altKey)\n result += \"a\";\n if (event.shiftKey)\n result += \"s\";\n return result;\n}\nfunction captureKeyDown(view, event) {\n let code = event.keyCode, mods = getMods(event);\n if (code == 8 || (mac && code == 72 && mods == \"c\")) { // Backspace, Ctrl-h on Mac\n return stopNativeHorizontalDelete(view, -1) || skipIgnoredNodes(view, -1);\n }\n else if ((code == 46 && !event.shiftKey) || (mac && code == 68 && mods == \"c\")) { // Delete, Ctrl-d on Mac\n return stopNativeHorizontalDelete(view, 1) || skipIgnoredNodes(view, 1);\n }\n else if (code == 13 || code == 27) { // Enter, Esc\n return true;\n }\n else if (code == 37 || (mac && code == 66 && mods == \"c\")) { // Left arrow, Ctrl-b on Mac\n let dir = code == 37 ? (findDirection(view, view.state.selection.from) == \"ltr\" ? -1 : 1) : -1;\n return selectHorizontally(view, dir, mods) || skipIgnoredNodes(view, dir);\n }\n else if (code == 39 || (mac && code == 70 && mods == \"c\")) { // Right arrow, Ctrl-f on Mac\n let dir = code == 39 ? (findDirection(view, view.state.selection.from) == \"ltr\" ? 1 : -1) : 1;\n return selectHorizontally(view, dir, mods) || skipIgnoredNodes(view, dir);\n }\n else if (code == 38 || (mac && code == 80 && mods == \"c\")) { // Up arrow, Ctrl-p on Mac\n return selectVertically(view, -1, mods) || skipIgnoredNodes(view, -1);\n }\n else if (code == 40 || (mac && code == 78 && mods == \"c\")) { // Down arrow, Ctrl-n on Mac\n return safariDownArrowBug(view) || selectVertically(view, 1, mods) || skipIgnoredNodes(view, 1);\n }\n else if (mods == (mac ? \"m\" : \"c\") &&\n (code == 66 || code == 73 || code == 89 || code == 90)) { // Mod-[biyz]\n return true;\n }\n return false;\n}\n\nfunction serializeForClipboard(view, slice) {\n view.someProp(\"transformCopied\", f => { slice = f(slice, view); });\n let context = [], { content, openStart, openEnd } = slice;\n while (openStart > 1 && openEnd > 1 && content.childCount == 1 && content.firstChild.childCount == 1) {\n openStart--;\n openEnd--;\n let node = content.firstChild;\n context.push(node.type.name, node.attrs != node.type.defaultAttrs ? node.attrs : null);\n content = node.content;\n }\n let serializer = view.someProp(\"clipboardSerializer\") || DOMSerializer.fromSchema(view.state.schema);\n let doc = detachedDoc(), wrap = doc.createElement(\"div\");\n wrap.appendChild(serializer.serializeFragment(content, { document: doc }));\n let firstChild = wrap.firstChild, needsWrap, wrappers = 0;\n while (firstChild && firstChild.nodeType == 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {\n for (let i = needsWrap.length - 1; i >= 0; i--) {\n let wrapper = doc.createElement(needsWrap[i]);\n while (wrap.firstChild)\n wrapper.appendChild(wrap.firstChild);\n wrap.appendChild(wrapper);\n wrappers++;\n }\n firstChild = wrap.firstChild;\n }\n if (firstChild && firstChild.nodeType == 1)\n firstChild.setAttribute(\"data-pm-slice\", `${openStart} ${openEnd}${wrappers ? ` -${wrappers}` : \"\"} ${JSON.stringify(context)}`);\n let text = view.someProp(\"clipboardTextSerializer\", f => f(slice, view)) ||\n slice.content.textBetween(0, slice.content.size, \"\\n\\n\");\n return { dom: wrap, text, slice };\n}\n// Read a slice of content from the clipboard (or drop data).\nfunction parseFromClipboard(view, text, html, plainText, $context) {\n let inCode = $context.parent.type.spec.code;\n let dom, slice;\n if (!html && !text)\n return null;\n let asText = !!text && (plainText || inCode || !html);\n if (asText) {\n view.someProp(\"transformPastedText\", f => { text = f(text, inCode || plainText, view); });\n if (inCode) {\n slice = new Slice(Fragment.from(view.state.schema.text(text.replace(/\\r\\n?/g, \"\\n\"))), 0, 0);\n view.someProp(\"transformPasted\", f => { slice = f(slice, view, true); });\n return slice;\n }\n let parsed = view.someProp(\"clipboardTextParser\", f => f(text, $context, plainText, view));\n if (parsed) {\n slice = parsed;\n }\n else {\n let marks = $context.marks();\n let { schema } = view.state, serializer = DOMSerializer.fromSchema(schema);\n dom = document.createElement(\"div\");\n text.split(/(?:\\r\\n?|\\n)+/).forEach(block => {\n let p = dom.appendChild(document.createElement(\"p\"));\n if (block)\n p.appendChild(serializer.serializeNode(schema.text(block, marks)));\n });\n }\n }\n else {\n view.someProp(\"transformPastedHTML\", f => { html = f(html, view); });\n dom = readHTML(html);\n if (webkit)\n restoreReplacedSpaces(dom);\n }\n let contextNode = dom && dom.querySelector(\"[data-pm-slice]\");\n let sliceData = contextNode && /^(\\d+) (\\d+)(?: -(\\d+))? (.*)/.exec(contextNode.getAttribute(\"data-pm-slice\") || \"\");\n if (sliceData && sliceData[3])\n for (let i = +sliceData[3]; i > 0; i--) {\n let child = dom.firstChild;\n while (child && child.nodeType != 1)\n child = child.nextSibling;\n if (!child)\n break;\n dom = child;\n }\n if (!slice) {\n let parser = view.someProp(\"clipboardParser\") || view.someProp(\"domParser\") || DOMParser.fromSchema(view.state.schema);\n slice = parser.parseSlice(dom, {\n preserveWhitespace: !!(asText || sliceData),\n context: $context,\n ruleFromNode(dom) {\n if (dom.nodeName == \"BR\" && !dom.nextSibling &&\n dom.parentNode && !inlineParents.test(dom.parentNode.nodeName))\n return { ignore: true };\n return null;\n }\n });\n }\n if (sliceData) {\n slice = addContext(closeSlice(slice, +sliceData[1], +sliceData[2]), sliceData[4]);\n }\n else { // HTML wasn't created by ProseMirror. Make sure top-level siblings are coherent\n slice = Slice.maxOpen(normalizeSiblings(slice.content, $context), true);\n if (slice.openStart || slice.openEnd) {\n let openStart = 0, openEnd = 0;\n for (let node = slice.content.firstChild; openStart < slice.openStart && !node.type.spec.isolating; openStart++, node = node.firstChild) { }\n for (let node = slice.content.lastChild; openEnd < slice.openEnd && !node.type.spec.isolating; openEnd++, node = node.lastChild) { }\n slice = closeSlice(slice, openStart, openEnd);\n }\n }\n view.someProp(\"transformPasted\", f => { slice = f(slice, view, asText); });\n return slice;\n}\nconst inlineParents = /^(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;\n// Takes a slice parsed with parseSlice, which means there hasn't been\n// any content-expression checking done on the top nodes, tries to\n// find a parent node in the current context that might fit the nodes,\n// and if successful, rebuilds the slice so that it fits into that parent.\n//\n// This addresses the problem that Transform.replace expects a\n// coherent slice, and will fail to place a set of siblings that don't\n// fit anywhere in the schema.\nfunction normalizeSiblings(fragment, $context) {\n if (fragment.childCount < 2)\n return fragment;\n for (let d = $context.depth; d >= 0; d--) {\n let parent = $context.node(d);\n let match = parent.contentMatchAt($context.index(d));\n let lastWrap, result = [];\n fragment.forEach(node => {\n if (!result)\n return;\n let wrap = match.findWrapping(node.type), inLast;\n if (!wrap)\n return result = null;\n if (inLast = result.length && lastWrap.length && addToSibling(wrap, lastWrap, node, result[result.length - 1], 0)) {\n result[result.length - 1] = inLast;\n }\n else {\n if (result.length)\n result[result.length - 1] = closeRight(result[result.length - 1], lastWrap.length);\n let wrapped = withWrappers(node, wrap);\n result.push(wrapped);\n match = match.matchType(wrapped.type);\n lastWrap = wrap;\n }\n });\n if (result)\n return Fragment.from(result);\n }\n return fragment;\n}\nfunction withWrappers(node, wrap, from = 0) {\n for (let i = wrap.length - 1; i >= from; i--)\n node = wrap[i].create(null, Fragment.from(node));\n return node;\n}\n// Used to group adjacent nodes wrapped in similar parents by\n// normalizeSiblings into the same parent node\nfunction addToSibling(wrap, lastWrap, node, sibling, depth) {\n if (depth < wrap.length && depth < lastWrap.length && wrap[depth] == lastWrap[depth]) {\n let inner = addToSibling(wrap, lastWrap, node, sibling.lastChild, depth + 1);\n if (inner)\n return sibling.copy(sibling.content.replaceChild(sibling.childCount - 1, inner));\n let match = sibling.contentMatchAt(sibling.childCount);\n if (match.matchType(depth == wrap.length - 1 ? node.type : wrap[depth + 1]))\n return sibling.copy(sibling.content.append(Fragment.from(withWrappers(node, wrap, depth + 1))));\n }\n}\nfunction closeRight(node, depth) {\n if (depth == 0)\n return node;\n let fragment = node.content.replaceChild(node.childCount - 1, closeRight(node.lastChild, depth - 1));\n let fill = node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true);\n return node.copy(fragment.append(fill));\n}\nfunction closeRange(fragment, side, from, to, depth, openEnd) {\n let node = side < 0 ? fragment.firstChild : fragment.lastChild, inner = node.content;\n if (fragment.childCount > 1)\n openEnd = 0;\n if (depth < to - 1)\n inner = closeRange(inner, side, from, to, depth + 1, openEnd);\n if (depth >= from)\n inner = side < 0 ? node.contentMatchAt(0).fillBefore(inner, openEnd <= depth).append(inner)\n : inner.append(node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true));\n return fragment.replaceChild(side < 0 ? 0 : fragment.childCount - 1, node.copy(inner));\n}\nfunction closeSlice(slice, openStart, openEnd) {\n if (openStart < slice.openStart)\n slice = new Slice(closeRange(slice.content, -1, openStart, slice.openStart, 0, slice.openEnd), openStart, slice.openEnd);\n if (openEnd < slice.openEnd)\n slice = new Slice(closeRange(slice.content, 1, openEnd, slice.openEnd, 0, 0), slice.openStart, openEnd);\n return slice;\n}\n// Trick from jQuery -- some elements must be wrapped in other\n// elements for innerHTML to work. I.e. if you do `div.innerHTML =\n// \"<td>..</td>\"` the table cells are ignored.\nconst wrapMap = {\n thead: [\"table\"],\n tbody: [\"table\"],\n tfoot: [\"table\"],\n caption: [\"table\"],\n colgroup: [\"table\"],\n col: [\"table\", \"colgroup\"],\n tr: [\"table\", \"tbody\"],\n td: [\"table\", \"tbody\", \"tr\"],\n th: [\"table\", \"tbody\", \"tr\"]\n};\nlet _detachedDoc = null;\nfunction detachedDoc() {\n return _detachedDoc || (_detachedDoc = document.implementation.createHTMLDocument(\"title\"));\n}\nlet _policy = null;\nfunction maybeWrapTrusted(html) {\n let trustedTypes = window.trustedTypes;\n if (!trustedTypes)\n return html;\n // With the require-trusted-types-for CSP, Chrome will block\n // innerHTML, even on a detached document. This wraps the string in\n // a way that makes the browser allow us to use its parser again.\n if (!_policy)\n _policy = trustedTypes.defaultPolicy || trustedTypes.createPolicy(\"ProseMirrorClipboard\", { createHTML: (s) => s });\n return _policy.createHTML(html);\n}\nfunction readHTML(html) {\n let metas = /^(\\s*<meta [^>]*>)*/.exec(html);\n if (metas)\n html = html.slice(metas[0].length);\n let elt = detachedDoc().createElement(\"div\");\n let firstTag = /<([a-z][^>\\s]+)/i.exec(html), wrap;\n if (wrap = firstTag && wrapMap[firstTag[1].toLowerCase()])\n html = wrap.map(n => \"<\" + n + \">\").join(\"\") + html + wrap.map(n => \"</\" + n + \">\").reverse().join(\"\");\n elt.innerHTML = maybeWrapTrusted(html);\n if (wrap)\n for (let i = 0; i < wrap.length; i++)\n elt = elt.querySelector(wrap[i]) || elt;\n return elt;\n}\n// Webkit browsers do some hard-to-predict replacement of regular\n// spaces with non-breaking spaces when putting content on the\n// clipboard. This tries to convert such non-breaking spaces (which\n// will be wrapped in a plain span on Chrome, a span with class\n// Apple-converted-space on Safari) back to regular spaces.\nfunction restoreReplacedSpaces(dom) {\n let nodes = dom.querySelectorAll(chrome ? \"span:not([class]):not([style])\" : \"span.Apple-converted-space\");\n for (let i = 0; i < nodes.length; i++) {\n let node = nodes[i];\n if (node.childNodes.length == 1 && node.textContent == \"\\u00a0\" && node.parentNode)\n node.parentNode.replaceChild(dom.ownerDocument.createTextNode(\" \"), node);\n }\n}\nfunction addContext(slice, context) {\n if (!slice.size)\n return slice;\n let schema = slice.content.firstChild.type.schema, array;\n try {\n array = JSON.parse(context);\n }\n catch (e) {\n return slice;\n }\n let { content, openStart, openEnd } = slice;\n for (let i = array.length - 2; i >= 0; i -= 2) {\n let type = schema.nodes[array[i]];\n if (!type || type.hasRequiredAttrs())\n break;\n content = Fragment.from(type.create(array[i + 1], content));\n openStart++;\n openEnd++;\n }\n return new Slice(content, openStart, openEnd);\n}\n\n// A collection of DOM events that occur within the editor, and callback functions\n// to invoke when the event fires.\nconst handlers = {};\nconst editHandlers = {};\nconst passiveHandlers = { touchstart: true, touchmove: true };\nclass InputState {\n constructor() {\n this.shiftKey = false;\n this.mouseDown = null;\n this.lastKeyCode = null;\n this.lastKeyCodeTime = 0;\n this.lastClick = { time: 0, x: 0, y: 0, type: \"\", button: 0 };\n this.lastSelectionOrigin = null;\n this.lastSelectionTime = 0;\n this.lastIOSEnter = 0;\n this.lastIOSEnterFallbackTimeout = -1;\n this.lastFocus = 0;\n this.lastTouch = 0;\n this.lastChromeDelete = 0;\n this.composing = false;\n this.compositionNode = null;\n this.composingTimeout = -1;\n this.compositionNodes = [];\n this.compositionEndedAt = -2e8;\n this.compositionID = 1;\n this.badSafariComposition = false;\n // Set to a composition ID when there are pending changes at compositionend\n this.compositionPendingChanges = 0;\n this.domChangeCount = 0;\n this.eventHandlers = Object.create(null);\n this.hideSelectionGuard = null;\n }\n}\nfunction initInput(view) {\n for (let event in handlers) {\n let handler = handlers[event];\n view.dom.addEventListener(event, view.input.eventHandlers[event] = (event) => {\n if (eventBelongsToView(view, event) && !runCustomHandler(view, event) &&\n (view.editable || !(event.type in editHandlers)))\n handler(view, event);\n }, passiveHandlers[event] ? { passive: true } : undefined);\n }\n // On Safari, for reasons beyond my understanding, adding an input\n // event handler makes an issue where the composition vanishes when\n // you press enter go away.\n if (safari)\n view.dom.addEventListener(\"input\", () => null);\n ensureListeners(view);\n}\nfunction setSelectionOrigin(view, origin) {\n view.input.lastSelectionOrigin = origin;\n view.input.lastSelectionTime = Date.now();\n}\nfunction destroyInput(view) {\n view.domObserver.stop();\n for (let type in view.input.eventHandlers)\n view.dom.removeEventListener(type, view.input.eventHandlers[type]);\n clearTimeout(view.input.composingTimeout);\n clearTimeout(view.input.lastIOSEnterFallbackTimeout);\n}\nfunction ensureListeners(view) {\n view.someProp(\"handleDOMEvents\", currentHandlers => {\n for (let type in currentHandlers)\n if (!view.input.eventHandlers[type])\n view.dom.addEventListener(type, view.input.eventHandlers[type] = event => runCustomHandler(view, event));\n });\n}\nfunction runCustomHandler(view, event) {\n return view.someProp(\"handleDOMEvents\", handlers => {\n let handler = handlers[event.type];\n return handler ? handler(view, event) || event.defaultPrevented : false;\n });\n}\nfunction eventBelongsToView(view, event) {\n if (!event.bubbles)\n return true;\n if (event.defaultPrevented)\n return false;\n for (let node = event.target; node != view.dom; node = node.parentNode)\n if (!node || node.nodeType == 11 ||\n (node.pmViewDesc && node.pmViewDesc.stopEvent(event)))\n return false;\n return true;\n}\nfunction dispatchEvent(view, event) {\n if (!runCustomHandler(view, event) && handlers[event.type] &&\n (view.editable || !(event.type in editHandlers)))\n handlers[event.type](view, event);\n}\neditHandlers.keydown = (view, _event) => {\n let event = _event;\n view.input.shiftKey = event.keyCode == 16 || event.shiftKey;\n if (inOrNearComposition(view, event))\n return;\n view.input.lastKeyCode = event.keyCode;\n view.input.lastKeyCodeTime = Date.now();\n // Suppress enter key events on Chrome Android, because those tend\n // to be part of a confused sequence of composition events fired,\n // and handling them eagerly tends to corrupt the input.\n if (android && chrome && event.keyCode == 13)\n return;\n if (event.keyCode != 229)\n view.domObserver.forceFlush();\n // On iOS, if we preventDefault enter key presses, the virtual\n // keyboard gets confused. So the hack here is to set a flag that\n // makes the DOM change code recognize that what just happens should\n // be replaced by whatever the Enter key handlers do.\n if (ios && event.keyCode == 13 && !event.ctrlKey && !event.altKey && !event.metaKey) {\n let now = Date.now();\n view.input.lastIOSEnter = now;\n view.input.lastIOSEnterFallbackTimeout = setTimeout(() => {\n if (view.input.lastIOSEnter == now) {\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\")));\n view.input.lastIOSEnter = 0;\n }\n }, 200);\n }\n else if (view.someProp(\"handleKeyDown\", f => f(view, event)) || captureKeyDown(view, event)) {\n event.preventDefault();\n }\n else {\n setSelectionOrigin(view, \"key\");\n }\n};\neditHandlers.keyup = (view, event) => {\n if (event.keyCode == 16)\n view.input.shiftKey = false;\n};\neditHandlers.keypress = (view, _event) => {\n let event = _event;\n if (inOrNearComposition(view, event) || !event.charCode ||\n event.ctrlKey && !event.altKey || mac && event.metaKey)\n return;\n if (view.someProp(\"handleKeyPress\", f => f(view, event))) {\n event.preventDefault();\n return;\n }\n let sel = view.state.selection;\n if (!(sel instanceof TextSelection) || !sel.$from.sameParent(sel.$to)) {\n let text = String.fromCharCode(event.charCode);\n let deflt = () => view.state.tr.insertText(text).scrollIntoView();\n if (!/[\\r\\n]/.test(text) && !view.someProp(\"handleTextInput\", f => f(view, sel.$from.pos, sel.$to.pos, text, deflt)))\n view.dispatch(deflt());\n event.preventDefault();\n }\n};\nfunction eventCoords(event) { return { left: event.clientX, top: event.clientY }; }\nfunction isNear(event, click) {\n let dx = click.x - event.clientX, dy = click.y - event.clientY;\n return dx * dx + dy * dy < 100;\n}\nfunction runHandlerOnContext(view, propName, pos, inside, event) {\n if (inside == -1)\n return false;\n let $pos = view.state.doc.resolve(inside);\n for (let i = $pos.depth + 1; i > 0; i--) {\n if (view.someProp(propName, f => i > $pos.depth ? f(view, pos, $pos.nodeAfter, $pos.before(i), event, true)\n : f(view, pos, $pos.node(i), $pos.before(i), event, false)))\n return true;\n }\n return false;\n}\nfunction updateSelection(view, selection, origin) {\n if (!view.focused)\n view.focus();\n if (view.state.selection.eq(selection))\n return;\n let tr = view.state.tr.setSelection(selection);\n if (origin == \"pointer\")\n tr.setMeta(\"pointer\", true);\n view.dispatch(tr);\n}\nfunction selectClickedLeaf(view, inside) {\n if (inside == -1)\n return false;\n let $pos = view.state.doc.resolve(inside), node = $pos.nodeAfter;\n if (node && node.isAtom && NodeSelection.isSelectable(node)) {\n updateSelection(view, new NodeSelection($pos), \"pointer\");\n return true;\n }\n return false;\n}\nfunction selectClickedNode(view, inside) {\n if (inside == -1)\n return false;\n let sel = view.state.selection, selectedNode, selectAt;\n if (sel instanceof NodeSelection)\n selectedNode = sel.node;\n let $pos = view.state.doc.resolve(inside);\n for (let i = $pos.depth + 1; i > 0; i--) {\n let node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);\n if (NodeSelection.isSelectable(node)) {\n if (selectedNode && sel.$from.depth > 0 &&\n i >= sel.$from.depth && $pos.before(sel.$from.depth + 1) == sel.$from.pos)\n selectAt = $pos.before(sel.$from.depth);\n else\n selectAt = $pos.before(i);\n break;\n }\n }\n if (selectAt != null) {\n updateSelection(view, NodeSelection.create(view.state.doc, selectAt), \"pointer\");\n return true;\n }\n else {\n return false;\n }\n}\nfunction handleSingleClick(view, pos, inside, event, selectNode) {\n return runHandlerOnContext(view, \"handleClickOn\", pos, inside, event) ||\n view.someProp(\"handleClick\", f => f(view, pos, event)) ||\n (selectNode ? selectClickedNode(view, inside) : selectClickedLeaf(view, inside));\n}\nfunction handleDoubleClick(view, pos, inside, event) {\n return runHandlerOnContext(view, \"handleDoubleClickOn\", pos, inside, event) ||\n view.someProp(\"handleDoubleClick\", f => f(view, pos, event));\n}\nfunction handleTripleClick(view, pos, inside, event) {\n return runHandlerOnContext(view, \"handleTripleClickOn\", pos, inside, event) ||\n view.someProp(\"handleTripleClick\", f => f(view, pos, event)) ||\n defaultTripleClick(view, inside, event);\n}\nfunction defaultTripleClick(view, inside, event) {\n if (event.button != 0)\n return false;\n let doc = view.state.doc;\n if (inside == -1) {\n if (doc.inlineContent) {\n updateSelection(view, TextSelection.create(doc, 0, doc.content.size), \"pointer\");\n return true;\n }\n return false;\n }\n let $pos = doc.resolve(inside);\n for (let i = $pos.depth + 1; i > 0; i--) {\n let node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);\n let nodePos = $pos.before(i);\n if (node.inlineContent)\n updateSelection(view, TextSelection.create(doc, nodePos + 1, nodePos + 1 + node.content.size), \"pointer\");\n else if (NodeSelection.isSelectable(node))\n updateSelection(view, NodeSelection.create(doc, nodePos), \"pointer\");\n else\n continue;\n return true;\n }\n}\nfunction forceDOMFlush(view) {\n return endComposition(view);\n}\nconst selectNodeModifier = mac ? \"metaKey\" : \"ctrlKey\";\nhandlers.mousedown = (view, _event) => {\n let event = _event;\n view.input.shiftKey = event.shiftKey;\n let flushed = forceDOMFlush(view);\n let now = Date.now(), type = \"singleClick\";\n if (now - view.input.lastClick.time < 500 && isNear(event, view.input.lastClick) && !event[selectNodeModifier] &&\n view.input.lastClick.button == event.button) {\n if (view.input.lastClick.type == \"singleClick\")\n type = \"doubleClick\";\n else if (view.input.lastClick.type == \"doubleClick\")\n type = \"tripleClick\";\n }\n view.input.lastClick = { time: now, x: event.clientX, y: event.clientY, type, button: event.button };\n let pos = view.posAtCoords(eventCoords(event));\n if (!pos)\n return;\n if (type == \"singleClick\") {\n if (view.input.mouseDown)\n view.input.mouseDown.done();\n view.input.mouseDown = new MouseDown(view, pos, event, !!flushed);\n }\n else if ((type == \"doubleClick\" ? handleDoubleClick : handleTripleClick)(view, pos.pos, pos.inside, event)) {\n event.preventDefault();\n }\n else {\n setSelectionOrigin(view, \"pointer\");\n }\n};\nclass MouseDown {\n constructor(view, pos, event, flushed) {\n this.view = view;\n this.pos = pos;\n this.event = event;\n this.flushed = flushed;\n this.delayedSelectionSync = false;\n this.mightDrag = null;\n this.startDoc = view.state.doc;\n this.selectNode = !!event[selectNodeModifier];\n this.allowDefault = event.shiftKey;\n let targetNode, targetPos;\n if (pos.inside > -1) {\n targetNode = view.state.doc.nodeAt(pos.inside);\n targetPos = pos.inside;\n }\n else {\n let $pos = view.state.doc.resolve(pos.pos);\n targetNode = $pos.parent;\n targetPos = $pos.depth ? $pos.before() : 0;\n }\n const target = flushed ? null : event.target;\n const targetDesc = target ? view.docView.nearestDesc(target, true) : null;\n this.target = targetDesc && targetDesc.nodeDOM.nodeType == 1 ? targetDesc.nodeDOM : null;\n let { selection } = view.state;\n if (event.button == 0 &&\n targetNode.type.spec.draggable && targetNode.type.spec.selectable !== false ||\n selection instanceof NodeSelection && selection.from <= targetPos && selection.to > targetPos)\n this.mightDrag = {\n node: targetNode,\n pos: targetPos,\n addAttr: !!(this.target && !this.target.draggable),\n setUneditable: !!(this.target && gecko && !this.target.hasAttribute(\"contentEditable\"))\n };\n if (this.target && this.mightDrag && (this.mightDrag.addAttr || this.mightDrag.setUneditable)) {\n this.view.domObserver.stop();\n if (this.mightDrag.addAttr)\n this.target.draggable = true;\n if (this.mightDrag.setUneditable)\n setTimeout(() => {\n if (this.view.input.mouseDown == this)\n this.target.setAttribute(\"contentEditable\", \"false\");\n }, 20);\n this.view.domObserver.start();\n }\n view.root.addEventListener(\"mouseup\", this.up = this.up.bind(this));\n view.root.addEventListener(\"mousemove\", this.move = this.move.bind(this));\n setSelectionOrigin(view, \"pointer\");\n }\n done() {\n this.view.root.removeEventListener(\"mouseup\", this.up);\n this.view.root.removeEventListener(\"mousemove\", this.move);\n if (this.mightDrag && this.target) {\n this.view.domObserver.stop();\n if (this.mightDrag.addAttr)\n this.target.removeAttribute(\"draggable\");\n if (this.mightDrag.setUneditable)\n this.target.removeAttribute(\"contentEditable\");\n this.view.domObserver.start();\n }\n if (this.delayedSelectionSync)\n setTimeout(() => selectionToDOM(this.view));\n this.view.input.mouseDown = null;\n }\n up(event) {\n this.done();\n if (!this.view.dom.contains(event.target))\n return;\n let pos = this.pos;\n if (this.view.state.doc != this.startDoc)\n pos = this.view.posAtCoords(eventCoords(event));\n this.updateAllowDefault(event);\n if (this.allowDefault || !pos) {\n setSelectionOrigin(this.view, \"pointer\");\n }\n else if (handleSingleClick(this.view, pos.pos, pos.inside, event, this.selectNode)) {\n event.preventDefault();\n }\n else if (event.button == 0 &&\n (this.flushed ||\n // Safari ignores clicks on draggable elements\n (safari && this.mightDrag && !this.mightDrag.node.isAtom) ||\n // Chrome will sometimes treat a node selection as a\n // cursor, but still report that the node is selected\n // when asked through getSelection. You'll then get a\n // situation where clicking at the point where that\n // (hidden) cursor is doesn't change the selection, and\n // thus doesn't get a reaction from ProseMirror. This\n // works around that.\n (chrome && !this.view.state.selection.visible &&\n Math.min(Math.abs(pos.pos - this.view.state.selection.from), Math.abs(pos.pos - this.view.state.selection.to)) <= 2))) {\n updateSelection(this.view, Selection.near(this.view.state.doc.resolve(pos.pos)), \"pointer\");\n event.preventDefault();\n }\n else {\n setSelectionOrigin(this.view, \"pointer\");\n }\n }\n move(event) {\n this.updateAllowDefault(event);\n setSelectionOrigin(this.view, \"pointer\");\n if (event.buttons == 0)\n this.done();\n }\n updateAllowDefault(event) {\n if (!this.allowDefault && (Math.abs(this.event.x - event.clientX) > 4 ||\n Math.abs(this.event.y - event.clientY) > 4))\n this.allowDefault = true;\n }\n}\nhandlers.touchstart = view => {\n view.input.lastTouch = Date.now();\n forceDOMFlush(view);\n setSelectionOrigin(view, \"pointer\");\n};\nhandlers.touchmove = view => {\n view.input.lastTouch = Date.now();\n setSelectionOrigin(view, \"pointer\");\n};\nhandlers.contextmenu = view => forceDOMFlush(view);\nfunction inOrNearComposition(view, event) {\n if (view.composing)\n return true;\n // See https://www.stum.de/2016/06/24/handling-ime-events-in-javascript/.\n // On Japanese input method editors (IMEs), the Enter key is used to confirm character\n // selection. On Safari, when Enter is pressed, compositionend and keydown events are\n // emitted. The keydown event triggers newline insertion, which we don't want.\n // This method returns true if the keydown event should be ignored.\n // We only ignore it once, as pressing Enter a second time *should* insert a newline.\n // Furthermore, the keydown event timestamp must be close to the compositionEndedAt timestamp.\n // This guards against the case where compositionend is triggered without the keyboard\n // (e.g. character confirmation may be done with the mouse), and keydown is triggered\n // afterwards- we wouldn't want to ignore the keydown event in this case.\n if (safari && Math.abs(event.timeStamp - view.input.compositionEndedAt) < 500) {\n view.input.compositionEndedAt = -2e8;\n return true;\n }\n return false;\n}\n// Drop active composition after 5 seconds of inactivity on Android\nconst timeoutComposition = android ? 5000 : -1;\neditHandlers.compositionstart = editHandlers.compositionupdate = view => {\n if (!view.composing) {\n view.domObserver.flush();\n let { state } = view, $pos = state.selection.$to;\n if (state.selection instanceof TextSelection &&\n (state.storedMarks ||\n (!$pos.textOffset && $pos.parentOffset && $pos.nodeBefore.marks.some(m => m.type.spec.inclusive === false)) ||\n chrome && windows && selectionBeforeUneditable(view))) { // Issue #1500\n // Need to wrap the cursor in mark nodes different from the ones in the DOM context\n view.markCursor = view.state.storedMarks || $pos.marks();\n endComposition(view, true);\n view.markCursor = null;\n }\n else {\n endComposition(view, !state.selection.empty);\n // In firefox, if the cursor is after but outside a marked node,\n // the inserted text won't inherit the marks. So this moves it\n // inside if necessary.\n if (gecko && state.selection.empty && $pos.parentOffset && !$pos.textOffset && $pos.nodeBefore.marks.length) {\n let sel = view.domSelectionRange();\n for (let node = sel.focusNode, offset = sel.focusOffset; node && node.nodeType == 1 && offset != 0;) {\n let before = offset < 0 ? node.lastChild : node.childNodes[offset - 1];\n if (!before)\n break;\n if (before.nodeType == 3) {\n let sel = view.domSelection();\n if (sel)\n sel.collapse(before, before.nodeValue.length);\n break;\n }\n else {\n node = before;\n offset = -1;\n }\n }\n }\n }\n view.input.composing = true;\n }\n scheduleComposeEnd(view, timeoutComposition);\n};\nfunction selectionBeforeUneditable(view) {\n let { focusNode, focusOffset } = view.domSelectionRange();\n if (!focusNode || focusNode.nodeType != 1 || focusOffset >= focusNode.childNodes.length)\n return false;\n let next = focusNode.childNodes[focusOffset];\n return next.nodeType == 1 && next.contentEditable == \"false\";\n}\neditHandlers.compositionend = (view, event) => {\n if (view.composing) {\n view.input.composing = false;\n view.input.compositionEndedAt = event.timeStamp;\n view.input.compositionPendingChanges = view.domObserver.pendingRecords().length ? view.input.compositionID : 0;\n view.input.compositionNode = null;\n if (view.input.badSafariComposition)\n view.domObserver.forceFlush();\n else if (view.input.compositionPendingChanges)\n Promise.resolve().then(() => view.domObserver.flush());\n view.input.compositionID++;\n scheduleComposeEnd(view, 20);\n }\n};\nfunction scheduleComposeEnd(view, delay) {\n clearTimeout(view.input.composingTimeout);\n if (delay > -1)\n view.input.composingTimeout = setTimeout(() => endComposition(view), delay);\n}\nfunction clearComposition(view) {\n if (view.composing) {\n view.input.composing = false;\n view.input.compositionEndedAt = timestampFromCustomEvent();\n }\n while (view.input.compositionNodes.length > 0)\n view.input.compositionNodes.pop().markParentsDirty();\n}\nfunction findCompositionNode(view) {\n let sel = view.domSelectionRange();\n if (!sel.focusNode)\n return null;\n let textBefore = textNodeBefore$1(sel.focusNode, sel.focusOffset);\n let textAfter = textNodeAfter$1(sel.focusNode, sel.focusOffset);\n if (textBefore && textAfter && textBefore != textAfter) {\n let descAfter = textAfter.pmViewDesc, lastChanged = view.domObserver.lastChangedTextNode;\n if (textBefore == lastChanged || textAfter == lastChanged)\n return lastChanged;\n if (!descAfter || !descAfter.isText(textAfter.nodeValue)) {\n return textAfter;\n }\n else if (view.input.compositionNode == textAfter) {\n let descBefore = textBefore.pmViewDesc;\n if (!(!descBefore || !descBefore.isText(textBefore.nodeValue)))\n return textAfter;\n }\n }\n return textBefore || textAfter;\n}\nfunction timestampFromCustomEvent() {\n let event = document.createEvent(\"Event\");\n event.initEvent(\"event\", true, true);\n return event.timeStamp;\n}\n/**\n@internal\n*/\nfunction endComposition(view, restarting = false) {\n if (android && view.domObserver.flushingSoon >= 0)\n return;\n view.domObserver.forceFlush();\n clearComposition(view);\n if (restarting || view.docView && view.docView.dirty) {\n let sel = selectionFromDOM(view), cur = view.state.selection;\n if (sel && !sel.eq(cur))\n view.dispatch(view.state.tr.setSelection(sel));\n else if ((view.markCursor || restarting) && !cur.$from.node(cur.$from.sharedDepth(cur.to)).inlineContent)\n view.dispatch(view.state.tr.deleteSelection());\n else\n view.updateState(view.state);\n return true;\n }\n return false;\n}\nfunction captureCopy(view, dom) {\n // The extra wrapper is somehow necessary on IE/Edge to prevent the\n // content from being mangled when it is put onto the clipboard\n if (!view.dom.parentNode)\n return;\n let wrap = view.dom.parentNode.appendChild(document.createElement(\"div\"));\n wrap.appendChild(dom);\n wrap.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n let sel = getSelection(), range = document.createRange();\n range.selectNodeContents(dom);\n // Done because IE will fire a selectionchange moving the selection\n // to its start when removeAllRanges is called and the editor still\n // has focus (which will mess up the editor's selection state).\n view.dom.blur();\n sel.removeAllRanges();\n sel.addRange(range);\n setTimeout(() => {\n if (wrap.parentNode)\n wrap.parentNode.removeChild(wrap);\n view.focus();\n }, 50);\n}\n// This is very crude, but unfortunately both these browsers _pretend_\n// that they have a clipboard API—all the objects and methods are\n// there, they just don't work, and they are hard to test.\nconst brokenClipboardAPI = (ie && ie_version < 15) ||\n (ios && webkit_version < 604);\nhandlers.copy = editHandlers.cut = (view, _event) => {\n let event = _event;\n let sel = view.state.selection, cut = event.type == \"cut\";\n if (sel.empty)\n return;\n // IE and Edge's clipboard interface is completely broken\n let data = brokenClipboardAPI ? null : event.clipboardData;\n let slice = sel.content(), { dom, text } = serializeForClipboard(view, slice);\n if (data) {\n event.preventDefault();\n data.clearData();\n data.setData(\"text/html\", dom.innerHTML);\n data.setData(\"text/plain\", text);\n }\n else {\n captureCopy(view, dom);\n }\n if (cut)\n view.dispatch(view.state.tr.deleteSelection().scrollIntoView().setMeta(\"uiEvent\", \"cut\"));\n};\nfunction sliceSingleNode(slice) {\n return slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1 ? slice.content.firstChild : null;\n}\nfunction capturePaste(view, event) {\n if (!view.dom.parentNode)\n return;\n let plainText = view.input.shiftKey || view.state.selection.$from.parent.type.spec.code;\n let target = view.dom.parentNode.appendChild(document.createElement(plainText ? \"textarea\" : \"div\"));\n if (!plainText)\n target.contentEditable = \"true\";\n target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n target.focus();\n let plain = view.input.shiftKey && view.input.lastKeyCode != 45;\n setTimeout(() => {\n view.focus();\n if (target.parentNode)\n target.parentNode.removeChild(target);\n if (plainText)\n doPaste(view, target.value, null, plain, event);\n else\n doPaste(view, target.textContent, target.innerHTML, plain, event);\n }, 50);\n}\nfunction doPaste(view, text, html, preferPlain, event) {\n let slice = parseFromClipboard(view, text, html, preferPlain, view.state.selection.$from);\n if (view.someProp(\"handlePaste\", f => f(view, event, slice || Slice.empty)))\n return true;\n if (!slice)\n return false;\n let singleNode = sliceSingleNode(slice);\n let tr = singleNode\n ? view.state.tr.replaceSelectionWith(singleNode, preferPlain)\n : view.state.tr.replaceSelection(slice);\n view.dispatch(tr.scrollIntoView().setMeta(\"paste\", true).setMeta(\"uiEvent\", \"paste\"));\n return true;\n}\nfunction getText(clipboardData) {\n let text = clipboardData.getData(\"text/plain\") || clipboardData.getData(\"Text\");\n if (text)\n return text;\n let uris = clipboardData.getData(\"text/uri-list\");\n return uris ? uris.replace(/\\r?\\n/g, \" \") : \"\";\n}\neditHandlers.paste = (view, _event) => {\n let event = _event;\n // Handling paste from JavaScript during composition is very poorly\n // handled by browsers, so as a dodgy but preferable kludge, we just\n // let the browser do its native thing there, except on Android,\n // where the editor is almost always composing.\n if (view.composing && !android)\n return;\n let data = brokenClipboardAPI ? null : event.clipboardData;\n let plain = view.input.shiftKey && view.input.lastKeyCode != 45;\n if (data && doPaste(view, getText(data), data.getData(\"text/html\"), plain, event))\n event.preventDefault();\n else\n capturePaste(view, event);\n};\nclass Dragging {\n constructor(slice, move, node) {\n this.slice = slice;\n this.move = move;\n this.node = node;\n }\n}\nconst dragCopyModifier = mac ? \"altKey\" : \"ctrlKey\";\nfunction dragMoves(view, event) {\n let moves = view.someProp(\"dragCopies\", test => !test(event));\n return moves != null ? moves : !event[dragCopyModifier];\n}\nhandlers.dragstart = (view, _event) => {\n let event = _event;\n let mouseDown = view.input.mouseDown;\n if (mouseDown)\n mouseDown.done();\n if (!event.dataTransfer)\n return;\n let sel = view.state.selection;\n let pos = sel.empty ? null : view.posAtCoords(eventCoords(event));\n let node;\n if (pos && pos.pos >= sel.from && pos.pos <= (sel instanceof NodeSelection ? sel.to - 1 : sel.to)) ;\n else if (mouseDown && mouseDown.mightDrag) {\n node = NodeSelection.create(view.state.doc, mouseDown.mightDrag.pos);\n }\n else if (event.target && event.target.nodeType == 1) {\n let desc = view.docView.nearestDesc(event.target, true);\n if (desc && desc.node.type.spec.draggable && desc != view.docView)\n node = NodeSelection.create(view.state.doc, desc.posBefore);\n }\n let draggedSlice = (node || view.state.selection).content();\n let { dom, text, slice } = serializeForClipboard(view, draggedSlice);\n // Pre-120 Chrome versions clear files when calling `clearData` (#1472)\n if (!event.dataTransfer.files.length || !chrome || chrome_version > 120)\n event.dataTransfer.clearData();\n event.dataTransfer.setData(brokenClipboardAPI ? \"Text\" : \"text/html\", dom.innerHTML);\n // See https://github.com/ProseMirror/prosemirror/issues/1156\n event.dataTransfer.effectAllowed = \"copyMove\";\n if (!brokenClipboardAPI)\n event.dataTransfer.setData(\"text/plain\", text);\n view.dragging = new Dragging(slice, dragMoves(view, event), node);\n};\nhandlers.dragend = view => {\n let dragging = view.dragging;\n window.setTimeout(() => {\n if (view.dragging == dragging)\n view.dragging = null;\n }, 50);\n};\neditHandlers.dragover = editHandlers.dragenter = (_, e) => e.preventDefault();\neditHandlers.drop = (view, event) => {\n try {\n handleDrop(view, event, view.dragging);\n }\n finally {\n view.dragging = null;\n }\n};\nfunction handleDrop(view, event, dragging) {\n if (!event.dataTransfer)\n return;\n let eventPos = view.posAtCoords(eventCoords(event));\n if (!eventPos)\n return;\n let $mouse = view.state.doc.resolve(eventPos.pos);\n let slice = dragging && dragging.slice;\n if (slice) {\n view.someProp(\"transformPasted\", f => { slice = f(slice, view, false); });\n }\n else {\n slice = parseFromClipboard(view, getText(event.dataTransfer), brokenClipboardAPI ? null : event.dataTransfer.getData(\"text/html\"), false, $mouse);\n }\n let move = !!(dragging && dragMoves(view, event));\n if (view.someProp(\"handleDrop\", f => f(view, event, slice || Slice.empty, move))) {\n event.preventDefault();\n return;\n }\n if (!slice)\n return;\n event.preventDefault();\n let insertPos = slice ? dropPoint(view.state.doc, $mouse.pos, slice) : $mouse.pos;\n if (insertPos == null)\n insertPos = $mouse.pos;\n let tr = view.state.tr;\n if (move) {\n let { node } = dragging;\n if (node)\n node.replace(tr);\n else\n tr.deleteSelection();\n }\n let pos = tr.mapping.map(insertPos);\n let isNode = slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1;\n let beforeInsert = tr.doc;\n if (isNode)\n tr.replaceRangeWith(pos, pos, slice.content.firstChild);\n else\n tr.replaceRange(pos, pos, slice);\n if (tr.doc.eq(beforeInsert))\n return;\n let $pos = tr.doc.resolve(pos);\n if (isNode && NodeSelection.isSelectable(slice.content.firstChild) &&\n $pos.nodeAfter && $pos.nodeAfter.sameMarkup(slice.content.firstChild)) {\n tr.setSelection(new NodeSelection($pos));\n }\n else {\n let end = tr.mapping.map(insertPos);\n tr.mapping.maps[tr.mapping.maps.length - 1].forEach((_from, _to, _newFrom, newTo) => end = newTo);\n tr.setSelection(selectionBetween(view, $pos, tr.doc.resolve(end)));\n }\n view.focus();\n view.dispatch(tr.setMeta(\"uiEvent\", \"drop\"));\n}\nhandlers.focus = view => {\n view.input.lastFocus = Date.now();\n if (!view.focused) {\n view.domObserver.stop();\n view.dom.classList.add(\"ProseMirror-focused\");\n view.domObserver.start();\n view.focused = true;\n setTimeout(() => {\n if (view.docView && view.hasFocus() && !view.domObserver.currentSelection.eq(view.domSelectionRange()))\n selectionToDOM(view);\n }, 20);\n }\n};\nhandlers.blur = (view, _event) => {\n let event = _event;\n if (view.focused) {\n view.domObserver.stop();\n view.dom.classList.remove(\"ProseMirror-focused\");\n view.domObserver.start();\n if (event.relatedTarget && view.dom.contains(event.relatedTarget))\n view.domObserver.currentSelection.clear();\n view.focused = false;\n }\n};\nhandlers.beforeinput = (view, _event) => {\n let event = _event;\n // We should probably do more with beforeinput events, but support\n // is so spotty that I'm still waiting to see where they are going.\n // Very specific hack to deal with backspace sometimes failing on\n // Chrome Android when after an uneditable node.\n if (chrome && android && event.inputType == \"deleteContentBackward\") {\n view.domObserver.flushSoon();\n let { domChangeCount } = view.input;\n setTimeout(() => {\n if (view.input.domChangeCount != domChangeCount)\n return; // Event already had some effect\n // This bug tends to close the virtual keyboard, so we refocus\n view.dom.blur();\n view.focus();\n if (view.someProp(\"handleKeyDown\", f => f(view, keyEvent(8, \"Backspace\"))))\n return;\n let { $cursor } = view.state.selection;\n // Crude approximation of backspace behavior when no command handled it\n if ($cursor && $cursor.pos > 0)\n view.dispatch(view.state.tr.delete($cursor.pos - 1, $cursor.pos).scrollIntoView());\n }, 50);\n }\n};\n// Make sure all handlers get registered\nfor (let prop in editHandlers)\n handlers[prop] = editHandlers[prop];\n\nfunction compareObjs(a, b) {\n if (a == b)\n return true;\n for (let p in a)\n if (a[p] !== b[p])\n return false;\n for (let p in b)\n if (!(p in a))\n return false;\n return true;\n}\nclass WidgetType {\n constructor(toDOM, spec) {\n this.toDOM = toDOM;\n this.spec = spec || noSpec;\n this.side = this.spec.side || 0;\n }\n map(mapping, span, offset, oldOffset) {\n let { pos, deleted } = mapping.mapResult(span.from + oldOffset, this.side < 0 ? -1 : 1);\n return deleted ? null : new Decoration(pos - offset, pos - offset, this);\n }\n valid() { return true; }\n eq(other) {\n return this == other ||\n (other instanceof WidgetType &&\n (this.spec.key && this.spec.key == other.spec.key ||\n this.toDOM == other.toDOM && compareObjs(this.spec, other.spec)));\n }\n destroy(node) {\n if (this.spec.destroy)\n this.spec.destroy(node);\n }\n}\nclass InlineType {\n constructor(attrs, spec) {\n this.attrs = attrs;\n this.spec = spec || noSpec;\n }\n map(mapping, span, offset, oldOffset) {\n let from = mapping.map(span.from + oldOffset, this.spec.inclusiveStart ? -1 : 1) - offset;\n let to = mapping.map(span.to + oldOffset, this.spec.inclusiveEnd ? 1 : -1) - offset;\n return from >= to ? null : new Decoration(from, to, this);\n }\n valid(_, span) { return span.from < span.to; }\n eq(other) {\n return this == other ||\n (other instanceof InlineType && compareObjs(this.attrs, other.attrs) &&\n compareObjs(this.spec, other.spec));\n }\n static is(span) { return span.type instanceof InlineType; }\n destroy() { }\n}\nclass NodeType {\n constructor(attrs, spec) {\n this.attrs = attrs;\n this.spec = spec || noSpec;\n }\n map(mapping, span, offset, oldOffset) {\n let from = mapping.mapResult(span.from + oldOffset, 1);\n if (from.deleted)\n return null;\n let to = mapping.mapResult(span.to + oldOffset, -1);\n if (to.deleted || to.pos <= from.pos)\n return null;\n return new Decoration(from.pos - offset, to.pos - offset, this);\n }\n valid(node, span) {\n let { index, offset } = node.content.findIndex(span.from), child;\n return offset == span.from && !(child = node.child(index)).isText && offset + child.nodeSize == span.to;\n }\n eq(other) {\n return this == other ||\n (other instanceof NodeType && compareObjs(this.attrs, other.attrs) &&\n compareObjs(this.spec, other.spec));\n }\n destroy() { }\n}\n/**\nDecoration objects can be provided to the view through the\n[`decorations` prop](https://prosemirror.net/docs/ref/#view.EditorProps.decorations). They come in\nseveral variants—see the static members of this class for details.\n*/\nclass Decoration {\n /**\n @internal\n */\n constructor(\n /**\n The start position of the decoration.\n */\n from, \n /**\n The end position. Will be the same as `from` for [widget\n decorations](https://prosemirror.net/docs/ref/#view.Decoration^widget).\n */\n to, \n /**\n @internal\n */\n type) {\n this.from = from;\n this.to = to;\n this.type = type;\n }\n /**\n @internal\n */\n copy(from, to) {\n return new Decoration(from, to, this.type);\n }\n /**\n @internal\n */\n eq(other, offset = 0) {\n return this.type.eq(other.type) && this.from + offset == other.from && this.to + offset == other.to;\n }\n /**\n @internal\n */\n map(mapping, offset, oldOffset) {\n return this.type.map(mapping, this, offset, oldOffset);\n }\n /**\n Creates a widget decoration, which is a DOM node that's shown in\n the document at the given position. It is recommended that you\n delay rendering the widget by passing a function that will be\n called when the widget is actually drawn in a view, but you can\n also directly pass a DOM node. `getPos` can be used to find the\n widget's current document position.\n */\n static widget(pos, toDOM, spec) {\n return new Decoration(pos, pos, new WidgetType(toDOM, spec));\n }\n /**\n Creates an inline decoration, which adds the given attributes to\n each inline node between `from` and `to`.\n */\n static inline(from, to, attrs, spec) {\n return new Decoration(from, to, new InlineType(attrs, spec));\n }\n /**\n Creates a node decoration. `from` and `to` should point precisely\n before and after a node in the document. That node, and only that\n node, will receive the given attributes.\n */\n static node(from, to, attrs, spec) {\n return new Decoration(from, to, new NodeType(attrs, spec));\n }\n /**\n The spec provided when creating this decoration. Can be useful\n if you've stored extra information in that object.\n */\n get spec() { return this.type.spec; }\n /**\n @internal\n */\n get inline() { return this.type instanceof InlineType; }\n /**\n @internal\n */\n get widget() { return this.type instanceof WidgetType; }\n}\nconst none = [], noSpec = {};\n/**\nA collection of [decorations](https://prosemirror.net/docs/ref/#view.Decoration), organized in such\na way that the drawing algorithm can efficiently use and compare\nthem. This is a persistent data structure—it is not modified,\nupdates create a new value.\n*/\nclass DecorationSet {\n /**\n @internal\n */\n constructor(local, children) {\n this.local = local.length ? local : none;\n this.children = children.length ? children : none;\n }\n /**\n Create a set of decorations, using the structure of the given\n document. This will consume (modify) the `decorations` array, so\n you must make a copy if you want need to preserve that.\n */\n static create(doc, decorations) {\n return decorations.length ? buildTree(decorations, doc, 0, noSpec) : empty;\n }\n /**\n Find all decorations in this set which touch the given range\n (including decorations that start or end directly at the\n boundaries) and match the given predicate on their spec. When\n `start` and `end` are omitted, all decorations in the set are\n considered. When `predicate` isn't given, all decorations are\n assumed to match.\n */\n find(start, end, predicate) {\n let result = [];\n this.findInner(start == null ? 0 : start, end == null ? 1e9 : end, result, 0, predicate);\n return result;\n }\n findInner(start, end, result, offset, predicate) {\n for (let i = 0; i < this.local.length; i++) {\n let span = this.local[i];\n if (span.from <= end && span.to >= start && (!predicate || predicate(span.spec)))\n result.push(span.copy(span.from + offset, span.to + offset));\n }\n for (let i = 0; i < this.children.length; i += 3) {\n if (this.children[i] < end && this.children[i + 1] > start) {\n let childOff = this.children[i] + 1;\n this.children[i + 2].findInner(start - childOff, end - childOff, result, offset + childOff, predicate);\n }\n }\n }\n /**\n Map the set of decorations in response to a change in the\n document.\n */\n map(mapping, doc, options) {\n if (this == empty || mapping.maps.length == 0)\n return this;\n return this.mapInner(mapping, doc, 0, 0, options || noSpec);\n }\n /**\n @internal\n */\n mapInner(mapping, node, offset, oldOffset, options) {\n let newLocal;\n for (let i = 0; i < this.local.length; i++) {\n let mapped = this.local[i].map(mapping, offset, oldOffset);\n if (mapped && mapped.type.valid(node, mapped))\n (newLocal || (newLocal = [])).push(mapped);\n else if (options.onRemove)\n options.onRemove(this.local[i].spec);\n }\n if (this.children.length)\n return mapChildren(this.children, newLocal || [], mapping, node, offset, oldOffset, options);\n else\n return newLocal ? new DecorationSet(newLocal.sort(byPos), none) : empty;\n }\n /**\n Add the given array of decorations to the ones in the set,\n producing a new set. Consumes the `decorations` array. Needs\n access to the current document to create the appropriate tree\n structure.\n */\n add(doc, decorations) {\n if (!decorations.length)\n return this;\n if (this == empty)\n return DecorationSet.create(doc, decorations);\n return this.addInner(doc, decorations, 0);\n }\n addInner(doc, decorations, offset) {\n let children, childIndex = 0;\n doc.forEach((childNode, childOffset) => {\n let baseOffset = childOffset + offset, found;\n if (!(found = takeSpansForNode(decorations, childNode, baseOffset)))\n return;\n if (!children)\n children = this.children.slice();\n while (childIndex < children.length && children[childIndex] < childOffset)\n childIndex += 3;\n if (children[childIndex] == childOffset)\n children[childIndex + 2] = children[childIndex + 2].addInner(childNode, found, baseOffset + 1);\n else\n children.splice(childIndex, 0, childOffset, childOffset + childNode.nodeSize, buildTree(found, childNode, baseOffset + 1, noSpec));\n childIndex += 3;\n });\n let local = moveSpans(childIndex ? withoutNulls(decorations) : decorations, -offset);\n for (let i = 0; i < local.length; i++)\n if (!local[i].type.valid(doc, local[i]))\n local.splice(i--, 1);\n return new DecorationSet(local.length ? this.local.concat(local).sort(byPos) : this.local, children || this.children);\n }\n /**\n Create a new set that contains the decorations in this set, minus\n the ones in the given array.\n */\n remove(decorations) {\n if (decorations.length == 0 || this == empty)\n return this;\n return this.removeInner(decorations, 0);\n }\n removeInner(decorations, offset) {\n let children = this.children, local = this.local;\n for (let i = 0; i < children.length; i += 3) {\n let found;\n let from = children[i] + offset, to = children[i + 1] + offset;\n for (let j = 0, span; j < decorations.length; j++)\n if (span = decorations[j]) {\n if (span.from > from && span.to < to) {\n decorations[j] = null;\n (found || (found = [])).push(span);\n }\n }\n if (!found)\n continue;\n if (children == this.children)\n children = this.children.slice();\n let removed = children[i + 2].removeInner(found, from + 1);\n if (removed != empty) {\n children[i + 2] = removed;\n }\n else {\n children.splice(i, 3);\n i -= 3;\n }\n }\n if (local.length)\n for (let i = 0, span; i < decorations.length; i++)\n if (span = decorations[i]) {\n for (let j = 0; j < local.length; j++)\n if (local[j].eq(span, offset)) {\n if (local == this.local)\n local = this.local.slice();\n local.splice(j--, 1);\n }\n }\n if (children == this.children && local == this.local)\n return this;\n return local.length || children.length ? new DecorationSet(local, children) : empty;\n }\n forChild(offset, node) {\n if (this == empty)\n return this;\n if (node.isLeaf)\n return DecorationSet.empty;\n let child, local;\n for (let i = 0; i < this.children.length; i += 3)\n if (this.children[i] >= offset) {\n if (this.children[i] == offset)\n child = this.children[i + 2];\n break;\n }\n let start = offset + 1, end = start + node.content.size;\n for (let i = 0; i < this.local.length; i++) {\n let dec = this.local[i];\n if (dec.from < end && dec.to > start && (dec.type instanceof InlineType)) {\n let from = Math.max(start, dec.from) - start, to = Math.min(end, dec.to) - start;\n if (from < to)\n (local || (local = [])).push(dec.copy(from, to));\n }\n }\n if (local) {\n let localSet = new DecorationSet(local.sort(byPos), none);\n return child ? new DecorationGroup([localSet, child]) : localSet;\n }\n return child || empty;\n }\n /**\n @internal\n */\n eq(other) {\n if (this == other)\n return true;\n if (!(other instanceof DecorationSet) ||\n this.local.length != other.local.length ||\n this.children.length != other.children.length)\n return false;\n for (let i = 0; i < this.local.length; i++)\n if (!this.local[i].eq(other.local[i]))\n return false;\n for (let i = 0; i < this.children.length; i += 3)\n if (this.children[i] != other.children[i] ||\n this.children[i + 1] != other.children[i + 1] ||\n !this.children[i + 2].eq(other.children[i + 2]))\n return false;\n return true;\n }\n /**\n @internal\n */\n locals(node) {\n return removeOverlap(this.localsInner(node));\n }\n /**\n @internal\n */\n localsInner(node) {\n if (this == empty)\n return none;\n if (node.inlineContent || !this.local.some(InlineType.is))\n return this.local;\n let result = [];\n for (let i = 0; i < this.local.length; i++) {\n if (!(this.local[i].type instanceof InlineType))\n result.push(this.local[i]);\n }\n return result;\n }\n forEachSet(f) { f(this); }\n}\n/**\nThe empty set of decorations.\n*/\nDecorationSet.empty = new DecorationSet([], []);\n/**\n@internal\n*/\nDecorationSet.removeOverlap = removeOverlap;\nconst empty = DecorationSet.empty;\n// An abstraction that allows the code dealing with decorations to\n// treat multiple DecorationSet objects as if it were a single object\n// with (a subset of) the same interface.\nclass DecorationGroup {\n constructor(members) {\n this.members = members;\n }\n map(mapping, doc) {\n const mappedDecos = this.members.map(member => member.map(mapping, doc, noSpec));\n return DecorationGroup.from(mappedDecos);\n }\n forChild(offset, child) {\n if (child.isLeaf)\n return DecorationSet.empty;\n let found = [];\n for (let i = 0; i < this.members.length; i++) {\n let result = this.members[i].forChild(offset, child);\n if (result == empty)\n continue;\n if (result instanceof DecorationGroup)\n found = found.concat(result.members);\n else\n found.push(result);\n }\n return DecorationGroup.from(found);\n }\n eq(other) {\n if (!(other instanceof DecorationGroup) ||\n other.members.length != this.members.length)\n return false;\n for (let i = 0; i < this.members.length; i++)\n if (!this.members[i].eq(other.members[i]))\n return false;\n return true;\n }\n locals(node) {\n let result, sorted = true;\n for (let i = 0; i < this.members.length; i++) {\n let locals = this.members[i].localsInner(node);\n if (!locals.length)\n continue;\n if (!result) {\n result = locals;\n }\n else {\n if (sorted) {\n result = result.slice();\n sorted = false;\n }\n for (let j = 0; j < locals.length; j++)\n result.push(locals[j]);\n }\n }\n return result ? removeOverlap(sorted ? result : result.sort(byPos)) : none;\n }\n // Create a group for the given array of decoration sets, or return\n // a single set when possible.\n static from(members) {\n switch (members.length) {\n case 0: return empty;\n case 1: return members[0];\n default: return new DecorationGroup(members.every(m => m instanceof DecorationSet) ? members :\n members.reduce((r, m) => r.concat(m instanceof DecorationSet ? m : m.members), []));\n }\n }\n forEachSet(f) {\n for (let i = 0; i < this.members.length; i++)\n this.members[i].forEachSet(f);\n }\n}\nfunction mapChildren(oldChildren, newLocal, mapping, node, offset, oldOffset, options) {\n let children = oldChildren.slice();\n // Mark the children that are directly touched by changes, and\n // move those that are after the changes.\n for (let i = 0, baseOffset = oldOffset; i < mapping.maps.length; i++) {\n let moved = 0;\n mapping.maps[i].forEach((oldStart, oldEnd, newStart, newEnd) => {\n let dSize = (newEnd - newStart) - (oldEnd - oldStart);\n for (let i = 0; i < children.length; i += 3) {\n let end = children[i + 1];\n if (end < 0 || oldStart > end + baseOffset - moved)\n continue;\n let start = children[i] + baseOffset - moved;\n if (oldEnd >= start) {\n children[i + 1] = oldStart <= start ? -2 : -1;\n }\n else if (oldStart >= baseOffset && dSize) {\n children[i] += dSize;\n children[i + 1] += dSize;\n }\n }\n moved += dSize;\n });\n baseOffset = mapping.maps[i].map(baseOffset, -1);\n }\n // Find the child nodes that still correspond to a single node,\n // recursively call mapInner on them and update their positions.\n let mustRebuild = false;\n for (let i = 0; i < children.length; i += 3)\n if (children[i + 1] < 0) { // Touched nodes\n if (children[i + 1] == -2) {\n mustRebuild = true;\n children[i + 1] = -1;\n continue;\n }\n let from = mapping.map(oldChildren[i] + oldOffset), fromLocal = from - offset;\n if (fromLocal < 0 || fromLocal >= node.content.size) {\n mustRebuild = true;\n continue;\n }\n // Must read oldChildren because children was tagged with -1\n let to = mapping.map(oldChildren[i + 1] + oldOffset, -1), toLocal = to - offset;\n let { index, offset: childOffset } = node.content.findIndex(fromLocal);\n let childNode = node.maybeChild(index);\n if (childNode && childOffset == fromLocal && childOffset + childNode.nodeSize == toLocal) {\n let mapped = children[i + 2]\n .mapInner(mapping, childNode, from + 1, oldChildren[i] + oldOffset + 1, options);\n if (mapped != empty) {\n children[i] = fromLocal;\n children[i + 1] = toLocal;\n children[i + 2] = mapped;\n }\n else {\n children[i + 1] = -2;\n mustRebuild = true;\n }\n }\n else {\n mustRebuild = true;\n }\n }\n // Remaining children must be collected and rebuilt into the appropriate structure\n if (mustRebuild) {\n let decorations = mapAndGatherRemainingDecorations(children, oldChildren, newLocal, mapping, offset, oldOffset, options);\n let built = buildTree(decorations, node, 0, options);\n newLocal = built.local;\n for (let i = 0; i < children.length; i += 3)\n if (children[i + 1] < 0) {\n children.splice(i, 3);\n i -= 3;\n }\n for (let i = 0, j = 0; i < built.children.length; i += 3) {\n let from = built.children[i];\n while (j < children.length && children[j] < from)\n j += 3;\n children.splice(j, 0, built.children[i], built.children[i + 1], built.children[i + 2]);\n }\n }\n return new DecorationSet(newLocal.sort(byPos), children);\n}\nfunction moveSpans(spans, offset) {\n if (!offset || !spans.length)\n return spans;\n let result = [];\n for (let i = 0; i < spans.length; i++) {\n let span = spans[i];\n result.push(new Decoration(span.from + offset, span.to + offset, span.type));\n }\n return result;\n}\nfunction mapAndGatherRemainingDecorations(children, oldChildren, decorations, mapping, offset, oldOffset, options) {\n // Gather all decorations from the remaining marked children\n function gather(set, oldOffset) {\n for (let i = 0; i < set.local.length; i++) {\n let mapped = set.local[i].map(mapping, offset, oldOffset);\n if (mapped)\n decorations.push(mapped);\n else if (options.onRemove)\n options.onRemove(set.local[i].spec);\n }\n for (let i = 0; i < set.children.length; i += 3)\n gather(set.children[i + 2], set.children[i] + oldOffset + 1);\n }\n for (let i = 0; i < children.length; i += 3)\n if (children[i + 1] == -1)\n gather(children[i + 2], oldChildren[i] + oldOffset + 1);\n return decorations;\n}\nfunction takeSpansForNode(spans, node, offset) {\n if (node.isLeaf)\n return null;\n let end = offset + node.nodeSize, found = null;\n for (let i = 0, span; i < spans.length; i++) {\n if ((span = spans[i]) && span.from > offset && span.to < end) {\n (found || (found = [])).push(span);\n spans[i] = null;\n }\n }\n return found;\n}\nfunction withoutNulls(array) {\n let result = [];\n for (let i = 0; i < array.length; i++)\n if (array[i] != null)\n result.push(array[i]);\n return result;\n}\n// Build up a tree that corresponds to a set of decorations. `offset`\n// is a base offset that should be subtracted from the `from` and `to`\n// positions in the spans (so that we don't have to allocate new spans\n// for recursive calls).\nfunction buildTree(spans, node, offset, options) {\n let children = [], hasNulls = false;\n node.forEach((childNode, localStart) => {\n let found = takeSpansForNode(spans, childNode, localStart + offset);\n if (found) {\n hasNulls = true;\n let subtree = buildTree(found, childNode, offset + localStart + 1, options);\n if (subtree != empty)\n children.push(localStart, localStart + childNode.nodeSize, subtree);\n }\n });\n let locals = moveSpans(hasNulls ? withoutNulls(spans) : spans, -offset).sort(byPos);\n for (let i = 0; i < locals.length; i++)\n if (!locals[i].type.valid(node, locals[i])) {\n if (options.onRemove)\n options.onRemove(locals[i].spec);\n locals.splice(i--, 1);\n }\n return locals.length || children.length ? new DecorationSet(locals, children) : empty;\n}\n// Used to sort decorations so that ones with a low start position\n// come first, and within a set with the same start position, those\n// with an smaller end position come first.\nfunction byPos(a, b) {\n return a.from - b.from || a.to - b.to;\n}\n// Scan a sorted array of decorations for partially overlapping spans,\n// and split those so that only fully overlapping spans are left (to\n// make subsequent rendering easier). Will return the input array if\n// no partially overlapping spans are found (the common case).\nfunction removeOverlap(spans) {\n let working = spans;\n for (let i = 0; i < working.length - 1; i++) {\n let span = working[i];\n if (span.from != span.to)\n for (let j = i + 1; j < working.length; j++) {\n let next = working[j];\n if (next.from == span.from) {\n if (next.to != span.to) {\n if (working == spans)\n working = spans.slice();\n // Followed by a partially overlapping larger span. Split that\n // span.\n working[j] = next.copy(next.from, span.to);\n insertAhead(working, j + 1, next.copy(span.to, next.to));\n }\n continue;\n }\n else {\n if (next.from < span.to) {\n if (working == spans)\n working = spans.slice();\n // The end of this one overlaps with a subsequent span. Split\n // this one.\n working[i] = span.copy(span.from, next.from);\n insertAhead(working, j, span.copy(next.from, span.to));\n }\n break;\n }\n }\n }\n return working;\n}\nfunction insertAhead(array, i, deco) {\n while (i < array.length && byPos(deco, array[i]) > 0)\n i++;\n array.splice(i, 0, deco);\n}\n// Get the decorations associated with the current props of a view.\nfunction viewDecorations(view) {\n let found = [];\n view.someProp(\"decorations\", f => {\n let result = f(view.state);\n if (result && result != empty)\n found.push(result);\n });\n if (view.cursorWrapper)\n found.push(DecorationSet.create(view.state.doc, [view.cursorWrapper.deco]));\n return DecorationGroup.from(found);\n}\n\nconst observeOptions = {\n childList: true,\n characterData: true,\n characterDataOldValue: true,\n attributes: true,\n attributeOldValue: true,\n subtree: true\n};\n// IE11 has very broken mutation observers, so we also listen to DOMCharacterDataModified\nconst useCharData = ie && ie_version <= 11;\nclass SelectionState {\n constructor() {\n this.anchorNode = null;\n this.anchorOffset = 0;\n this.focusNode = null;\n this.focusOffset = 0;\n }\n set(sel) {\n this.anchorNode = sel.anchorNode;\n this.anchorOffset = sel.anchorOffset;\n this.focusNode = sel.focusNode;\n this.focusOffset = sel.focusOffset;\n }\n clear() {\n this.anchorNode = this.focusNode = null;\n }\n eq(sel) {\n return sel.anchorNode == this.anchorNode && sel.anchorOffset == this.anchorOffset &&\n sel.focusNode == this.focusNode && sel.focusOffset == this.focusOffset;\n }\n}\nclass DOMObserver {\n constructor(view, handleDOMChange) {\n this.view = view;\n this.handleDOMChange = handleDOMChange;\n this.queue = [];\n this.flushingSoon = -1;\n this.observer = null;\n this.currentSelection = new SelectionState;\n this.onCharData = null;\n this.suppressingSelectionUpdates = false;\n this.lastChangedTextNode = null;\n this.observer = window.MutationObserver &&\n new window.MutationObserver(mutations => {\n for (let i = 0; i < mutations.length; i++)\n this.queue.push(mutations[i]);\n if (ie && ie_version <= 11 && mutations.some(m => m.type == \"childList\" && m.removedNodes.length ||\n m.type == \"characterData\" && m.oldValue.length > m.target.nodeValue.length)) {\n // IE11 will sometimes (on backspacing out a single character\n // text node after a BR node) call the observer callback\n // before actually updating the DOM, which will cause\n // ProseMirror to miss the change (see #930)\n this.flushSoon();\n }\n else if (safari && view.composing && mutations.some(m => m.type == \"childList\" && m.target.nodeName == \"TR\")) {\n // Safari does weird stuff when finishing a composition in a\n // table cell, which tends to involve inserting inappropriate\n // nodes in the table row.\n view.input.badSafariComposition = true;\n this.flushSoon();\n }\n else {\n this.flush();\n }\n });\n if (useCharData) {\n this.onCharData = e => {\n this.queue.push({ target: e.target, type: \"characterData\", oldValue: e.prevValue });\n this.flushSoon();\n };\n }\n this.onSelectionChange = this.onSelectionChange.bind(this);\n }\n flushSoon() {\n if (this.flushingSoon < 0)\n this.flushingSoon = window.setTimeout(() => { this.flushingSoon = -1; this.flush(); }, 20);\n }\n forceFlush() {\n if (this.flushingSoon > -1) {\n window.clearTimeout(this.flushingSoon);\n this.flushingSoon = -1;\n this.flush();\n }\n }\n start() {\n if (this.observer) {\n this.observer.takeRecords();\n this.observer.observe(this.view.dom, observeOptions);\n }\n if (this.onCharData)\n this.view.dom.addEventListener(\"DOMCharacterDataModified\", this.onCharData);\n this.connectSelection();\n }\n stop() {\n if (this.observer) {\n let take = this.observer.takeRecords();\n if (take.length) {\n for (let i = 0; i < take.length; i++)\n this.queue.push(take[i]);\n window.setTimeout(() => this.flush(), 20);\n }\n this.observer.disconnect();\n }\n if (this.onCharData)\n this.view.dom.removeEventListener(\"DOMCharacterDataModified\", this.onCharData);\n this.disconnectSelection();\n }\n connectSelection() {\n this.view.dom.ownerDocument.addEventListener(\"selectionchange\", this.onSelectionChange);\n }\n disconnectSelection() {\n this.view.dom.ownerDocument.removeEventListener(\"selectionchange\", this.onSelectionChange);\n }\n suppressSelectionUpdates() {\n this.suppressingSelectionUpdates = true;\n setTimeout(() => this.suppressingSelectionUpdates = false, 50);\n }\n onSelectionChange() {\n if (!hasFocusAndSelection(this.view))\n return;\n if (this.suppressingSelectionUpdates)\n return selectionToDOM(this.view);\n // Deletions on IE11 fire their events in the wrong order, giving\n // us a selection change event before the DOM changes are\n // reported.\n if (ie && ie_version <= 11 && !this.view.state.selection.empty) {\n let sel = this.view.domSelectionRange();\n // Selection.isCollapsed isn't reliable on IE\n if (sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset))\n return this.flushSoon();\n }\n this.flush();\n }\n setCurSelection() {\n this.currentSelection.set(this.view.domSelectionRange());\n }\n ignoreSelectionChange(sel) {\n if (!sel.focusNode)\n return true;\n let ancestors = new Set, container;\n for (let scan = sel.focusNode; scan; scan = parentNode(scan))\n ancestors.add(scan);\n for (let scan = sel.anchorNode; scan; scan = parentNode(scan))\n if (ancestors.has(scan)) {\n container = scan;\n break;\n }\n let desc = container && this.view.docView.nearestDesc(container);\n if (desc && desc.ignoreMutation({\n type: \"selection\",\n target: container.nodeType == 3 ? container.parentNode : container\n })) {\n this.setCurSelection();\n return true;\n }\n }\n pendingRecords() {\n if (this.observer)\n for (let mut of this.observer.takeRecords())\n this.queue.push(mut);\n return this.queue;\n }\n flush() {\n let { view } = this;\n if (!view.docView || this.flushingSoon > -1)\n return;\n let mutations = this.pendingRecords();\n if (mutations.length)\n this.queue = [];\n let sel = view.domSelectionRange();\n let newSel = !this.suppressingSelectionUpdates && !this.currentSelection.eq(sel) && hasFocusAndSelection(view) && !this.ignoreSelectionChange(sel);\n let from = -1, to = -1, typeOver = false, added = [];\n if (view.editable) {\n for (let i = 0; i < mutations.length; i++) {\n let result = this.registerMutation(mutations[i], added);\n if (result) {\n from = from < 0 ? result.from : Math.min(result.from, from);\n to = to < 0 ? result.to : Math.max(result.to, to);\n if (result.typeOver)\n typeOver = true;\n }\n }\n }\n if (gecko && added.length) {\n let brs = added.filter(n => n.nodeName == \"BR\");\n if (brs.length == 2) {\n let [a, b] = brs;\n if (a.parentNode && a.parentNode.parentNode == b.parentNode)\n b.remove();\n else\n a.remove();\n }\n else {\n let { focusNode } = this.currentSelection;\n for (let br of brs) {\n let parent = br.parentNode;\n if (parent && parent.nodeName == \"LI\" && (!focusNode || blockParent(view, focusNode) != parent))\n br.remove();\n }\n }\n }\n else if ((chrome || safari) && added.some(n => n.nodeName == \"BR\") &&\n (view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46)) {\n // Chrome/Safari sometimes insert a bogus break node if you\n // backspace out the last bit of text before an inline-flex node (#1552)\n for (let node of added)\n if (node.nodeName == \"BR\" && node.parentNode) {\n let after = node.nextSibling;\n if (after && after.nodeType == 1 && after.contentEditable == \"false\")\n node.parentNode.removeChild(node);\n }\n }\n let readSel = null;\n // If it looks like the browser has reset the selection to the\n // start of the document after focus, restore the selection from\n // the state\n if (from < 0 && newSel && view.input.lastFocus > Date.now() - 200 &&\n Math.max(view.input.lastTouch, view.input.lastClick.time) < Date.now() - 300 &&\n selectionCollapsed(sel) && (readSel = selectionFromDOM(view)) &&\n readSel.eq(Selection.near(view.state.doc.resolve(0), 1))) {\n view.input.lastFocus = 0;\n selectionToDOM(view);\n this.currentSelection.set(sel);\n view.scrollToSelection();\n }\n else if (from > -1 || newSel) {\n if (from > -1) {\n view.docView.markDirty(from, to);\n checkCSS(view);\n }\n if (view.input.badSafariComposition) {\n view.input.badSafariComposition = false;\n fixUpBadSafariComposition(view, added);\n }\n this.handleDOMChange(from, to, typeOver, added);\n if (view.docView && view.docView.dirty)\n view.updateState(view.state);\n else if (!this.currentSelection.eq(sel))\n selectionToDOM(view);\n this.currentSelection.set(sel);\n }\n }\n registerMutation(mut, added) {\n // Ignore mutations inside nodes that were already noted as inserted\n if (added.indexOf(mut.target) > -1)\n return null;\n let desc = this.view.docView.nearestDesc(mut.target);\n if (mut.type == \"attributes\" &&\n (desc == this.view.docView || mut.attributeName == \"contenteditable\" ||\n // Firefox sometimes fires spurious events for null/empty styles\n (mut.attributeName == \"style\" && !mut.oldValue && !mut.target.getAttribute(\"style\"))))\n return null;\n if (!desc || desc.ignoreMutation(mut))\n return null;\n if (mut.type == \"childList\") {\n for (let i = 0; i < mut.addedNodes.length; i++) {\n let node = mut.addedNodes[i];\n added.push(node);\n if (node.nodeType == 3)\n this.lastChangedTextNode = node;\n }\n if (desc.contentDOM && desc.contentDOM != desc.dom && !desc.contentDOM.contains(mut.target))\n return { from: desc.posBefore, to: desc.posAfter };\n let prev = mut.previousSibling, next = mut.nextSibling;\n if (ie && ie_version <= 11 && mut.addedNodes.length) {\n // IE11 gives us incorrect next/prev siblings for some\n // insertions, so if there are added nodes, recompute those\n for (let i = 0; i < mut.addedNodes.length; i++) {\n let { previousSibling, nextSibling } = mut.addedNodes[i];\n if (!previousSibling || Array.prototype.indexOf.call(mut.addedNodes, previousSibling) < 0)\n prev = previousSibling;\n if (!nextSibling || Array.prototype.indexOf.call(mut.addedNodes, nextSibling) < 0)\n next = nextSibling;\n }\n }\n let fromOffset = prev && prev.parentNode == mut.target\n ? domIndex(prev) + 1 : 0;\n let from = desc.localPosFromDOM(mut.target, fromOffset, -1);\n let toOffset = next && next.parentNode == mut.target\n ? domIndex(next) : mut.target.childNodes.length;\n let to = desc.localPosFromDOM(mut.target, toOffset, 1);\n return { from, to };\n }\n else if (mut.type == \"attributes\") {\n return { from: desc.posAtStart - desc.border, to: desc.posAtEnd + desc.border };\n }\n else { // \"characterData\"\n this.lastChangedTextNode = mut.target;\n return {\n from: desc.posAtStart,\n to: desc.posAtEnd,\n // An event was generated for a text change that didn't change\n // any text. Mark the dom change to fall back to assuming the\n // selection was typed over with an identical value if it can't\n // find another change.\n typeOver: mut.target.nodeValue == mut.oldValue\n };\n }\n }\n}\nlet cssChecked = new WeakMap();\nlet cssCheckWarned = false;\nfunction checkCSS(view) {\n if (cssChecked.has(view))\n return;\n cssChecked.set(view, null);\n if (['normal', 'nowrap', 'pre-line'].indexOf(getComputedStyle(view.dom).whiteSpace) !== -1) {\n view.requiresGeckoHackNode = gecko;\n if (cssCheckWarned)\n return;\n 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.\");\n cssCheckWarned = true;\n }\n}\nfunction rangeToSelectionRange(view, range) {\n let anchorNode = range.startContainer, anchorOffset = range.startOffset;\n let focusNode = range.endContainer, focusOffset = range.endOffset;\n let currentAnchor = view.domAtPos(view.state.selection.anchor);\n // Since such a range doesn't distinguish between anchor and head,\n // use a heuristic that flips it around if its end matches the\n // current anchor.\n if (isEquivalentPosition(currentAnchor.node, currentAnchor.offset, focusNode, focusOffset))\n [anchorNode, anchorOffset, focusNode, focusOffset] = [focusNode, focusOffset, anchorNode, anchorOffset];\n return { anchorNode, anchorOffset, focusNode, focusOffset };\n}\n// Used to work around a Safari Selection/shadow DOM bug\n// Based on https://github.com/codemirror/dev/issues/414 fix\nfunction safariShadowSelectionRange(view, selection) {\n if (selection.getComposedRanges) {\n let range = selection.getComposedRanges(view.root)[0];\n if (range)\n return rangeToSelectionRange(view, range);\n }\n let found;\n function read(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n found = event.getTargetRanges()[0];\n }\n // Because Safari (at least in 2018-2022) doesn't provide regular\n // access to the selection inside a shadowRoot, we have to perform a\n // ridiculous hack to get at it—using `execCommand` to trigger a\n // `beforeInput` event so that we can read the target range from the\n // event.\n view.dom.addEventListener(\"beforeinput\", read, true);\n document.execCommand(\"indent\");\n view.dom.removeEventListener(\"beforeinput\", read, true);\n return found ? rangeToSelectionRange(view, found) : null;\n}\nfunction blockParent(view, node) {\n for (let p = node.parentNode; p && p != view.dom; p = p.parentNode) {\n let desc = view.docView.nearestDesc(p, true);\n if (desc && desc.node.isBlock)\n return p;\n }\n return null;\n}\n// Kludge for a Safari bug where, on ending a composition in an\n// otherwise empty table cell, it randomly moves the composed text\n// into the table row around that cell, greatly confusing everything\n// (#188).\nfunction fixUpBadSafariComposition(view, addedNodes) {\n var _a;\n let { focusNode, focusOffset } = view.domSelectionRange();\n for (let node of addedNodes) {\n if (((_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.nodeName) == \"TR\") {\n let nextCell = node.nextSibling;\n while (nextCell && (nextCell.nodeName != \"TD\" && nextCell.nodeName != \"TH\"))\n nextCell = nextCell.nextSibling;\n if (nextCell) {\n let parent = nextCell;\n for (;;) {\n let first = parent.firstChild;\n if (!first || first.nodeType != 1 || first.contentEditable == \"false\" ||\n /^(BR|IMG)$/.test(first.nodeName))\n break;\n parent = first;\n }\n parent.insertBefore(node, parent.firstChild);\n if (focusNode == node)\n view.domSelection().collapse(node, focusOffset);\n }\n else {\n node.parentNode.removeChild(node);\n }\n }\n }\n}\n\n// Note that all referencing and parsing is done with the\n// start-of-operation selection and document, since that's the one\n// that the DOM represents. If any changes came in in the meantime,\n// the modification is mapped over those before it is applied, in\n// readDOMChange.\nfunction parseBetween(view, from_, to_) {\n let { node: parent, fromOffset, toOffset, from, to } = view.docView.parseRange(from_, to_);\n let domSel = view.domSelectionRange();\n let find;\n let anchor = domSel.anchorNode;\n if (anchor && view.dom.contains(anchor.nodeType == 1 ? anchor : anchor.parentNode)) {\n find = [{ node: anchor, offset: domSel.anchorOffset }];\n if (!selectionCollapsed(domSel))\n find.push({ node: domSel.focusNode, offset: domSel.focusOffset });\n }\n // Work around issue in Chrome where backspacing sometimes replaces\n // the deleted content with a random BR node (issues #799, #831)\n if (chrome && view.input.lastKeyCode === 8) {\n for (let off = toOffset; off > fromOffset; off--) {\n let node = parent.childNodes[off - 1], desc = node.pmViewDesc;\n if (node.nodeName == \"BR\" && !desc) {\n toOffset = off;\n break;\n }\n if (!desc || desc.size)\n break;\n }\n }\n let startDoc = view.state.doc;\n let parser = view.someProp(\"domParser\") || DOMParser.fromSchema(view.state.schema);\n let $from = startDoc.resolve(from);\n let sel = null, doc = parser.parse(parent, {\n topNode: $from.parent,\n topMatch: $from.parent.contentMatchAt($from.index()),\n topOpen: true,\n from: fromOffset,\n to: toOffset,\n preserveWhitespace: $from.parent.type.whitespace == \"pre\" ? \"full\" : true,\n findPositions: find,\n ruleFromNode,\n context: $from\n });\n if (find && find[0].pos != null) {\n let anchor = find[0].pos, head = find[1] && find[1].pos;\n if (head == null)\n head = anchor;\n sel = { anchor: anchor + from, head: head + from };\n }\n return { doc, sel, from, to };\n}\nfunction ruleFromNode(dom) {\n let desc = dom.pmViewDesc;\n if (desc) {\n return desc.parseRule();\n }\n else if (dom.nodeName == \"BR\" && dom.parentNode) {\n // Safari replaces the list item or table cell with a BR\n // directly in the list node (?!) if you delete the last\n // character in a list item or table cell (#708, #862)\n if (safari && /^(ul|ol)$/i.test(dom.parentNode.nodeName)) {\n let skip = document.createElement(\"div\");\n skip.appendChild(document.createElement(\"li\"));\n return { skip };\n }\n else if (dom.parentNode.lastChild == dom || safari && /^(tr|table)$/i.test(dom.parentNode.nodeName)) {\n return { ignore: true };\n }\n }\n else if (dom.nodeName == \"IMG\" && dom.getAttribute(\"mark-placeholder\")) {\n return { ignore: true };\n }\n return null;\n}\nconst isInline = /^(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;\nfunction readDOMChange(view, from, to, typeOver, addedNodes) {\n let compositionID = view.input.compositionPendingChanges || (view.composing ? view.input.compositionID : 0);\n view.input.compositionPendingChanges = 0;\n if (from < 0) {\n let origin = view.input.lastSelectionTime > Date.now() - 50 ? view.input.lastSelectionOrigin : null;\n let newSel = selectionFromDOM(view, origin);\n if (newSel && !view.state.selection.eq(newSel)) {\n if (chrome && android &&\n view.input.lastKeyCode === 13 && Date.now() - 100 < view.input.lastKeyCodeTime &&\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\"))))\n return;\n let tr = view.state.tr.setSelection(newSel);\n if (origin == \"pointer\")\n tr.setMeta(\"pointer\", true);\n else if (origin == \"key\")\n tr.scrollIntoView();\n if (compositionID)\n tr.setMeta(\"composition\", compositionID);\n view.dispatch(tr);\n }\n return;\n }\n let $before = view.state.doc.resolve(from);\n let shared = $before.sharedDepth(to);\n from = $before.before(shared + 1);\n to = view.state.doc.resolve(to).after(shared + 1);\n let sel = view.state.selection;\n let parse = parseBetween(view, from, to);\n let doc = view.state.doc, compare = doc.slice(parse.from, parse.to);\n let preferredPos, preferredSide;\n // Prefer anchoring to end when Backspace is pressed\n if (view.input.lastKeyCode === 8 && Date.now() - 100 < view.input.lastKeyCodeTime) {\n preferredPos = view.state.selection.to;\n preferredSide = \"end\";\n }\n else {\n preferredPos = view.state.selection.from;\n preferredSide = \"start\";\n }\n view.input.lastKeyCode = null;\n let change = findDiff(compare.content, parse.doc.content, parse.from, preferredPos, preferredSide);\n if (change)\n view.input.domChangeCount++;\n if ((ios && view.input.lastIOSEnter > Date.now() - 225 || android) &&\n addedNodes.some(n => n.nodeType == 1 && !isInline.test(n.nodeName)) &&\n (!change || change.endA >= change.endB) &&\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\")))) {\n view.input.lastIOSEnter = 0;\n return;\n }\n if (!change) {\n if (typeOver && sel instanceof TextSelection && !sel.empty && sel.$head.sameParent(sel.$anchor) &&\n !view.composing && !(parse.sel && parse.sel.anchor != parse.sel.head)) {\n change = { start: sel.from, endA: sel.to, endB: sel.to };\n }\n else {\n if (parse.sel) {\n let sel = resolveSelection(view, view.state.doc, parse.sel);\n if (sel && !sel.eq(view.state.selection)) {\n let tr = view.state.tr.setSelection(sel);\n if (compositionID)\n tr.setMeta(\"composition\", compositionID);\n view.dispatch(tr);\n }\n }\n return;\n }\n }\n // Handle the case where overwriting a selection by typing matches\n // the start or end of the selected content, creating a change\n // that's smaller than what was actually overwritten.\n if (view.state.selection.from < view.state.selection.to &&\n change.start == change.endB &&\n view.state.selection instanceof TextSelection) {\n if (change.start > view.state.selection.from && change.start <= view.state.selection.from + 2 &&\n view.state.selection.from >= parse.from) {\n change.start = view.state.selection.from;\n }\n else if (change.endA < view.state.selection.to && change.endA >= view.state.selection.to - 2 &&\n view.state.selection.to <= parse.to) {\n change.endB += (view.state.selection.to - change.endA);\n change.endA = view.state.selection.to;\n }\n }\n // IE11 will insert a non-breaking space _ahead_ of the space after\n // the cursor space when adding a space before another space. When\n // that happened, adjust the change to cover the space instead.\n if (ie && ie_version <= 11 && change.endB == change.start + 1 &&\n change.endA == change.start && change.start > parse.from &&\n parse.doc.textBetween(change.start - parse.from - 1, change.start - parse.from + 1) == \" \\u00a0\") {\n change.start--;\n change.endA--;\n change.endB--;\n }\n let $from = parse.doc.resolveNoCache(change.start - parse.from);\n let $to = parse.doc.resolveNoCache(change.endB - parse.from);\n let $fromA = doc.resolve(change.start);\n let inlineChange = $from.sameParent($to) && $from.parent.inlineContent && $fromA.end() >= change.endA;\n // If this looks like the effect of pressing Enter (or was recorded\n // as being an iOS enter press), just dispatch an Enter key instead.\n if (((ios && view.input.lastIOSEnter > Date.now() - 225 &&\n (!inlineChange || addedNodes.some(n => n.nodeName == \"DIV\" || n.nodeName == \"P\"))) ||\n (!inlineChange && $from.pos < parse.doc.content.size &&\n (!$from.sameParent($to) || !$from.parent.inlineContent) &&\n $from.pos < $to.pos && !/\\S/.test(parse.doc.textBetween($from.pos, $to.pos, \"\", \"\")))) &&\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\")))) {\n view.input.lastIOSEnter = 0;\n return;\n }\n // Same for backspace\n if (view.state.selection.anchor > change.start &&\n looksLikeBackspace(doc, change.start, change.endA, $from, $to) &&\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(8, \"Backspace\")))) {\n if (android && chrome)\n view.domObserver.suppressSelectionUpdates(); // #820\n return;\n }\n // Chrome will occasionally, during composition, delete the\n // entire composition and then immediately insert it again. This is\n // used to detect that situation.\n if (chrome && change.endB == change.start)\n view.input.lastChromeDelete = Date.now();\n // This tries to detect Android virtual keyboard\n // enter-and-pick-suggestion action. That sometimes (see issue\n // #1059) first fires a DOM mutation, before moving the selection to\n // the newly created block. And then, because ProseMirror cleans up\n // the DOM selection, it gives up moving the selection entirely,\n // leaving the cursor in the wrong place. When that happens, we drop\n // the new paragraph from the initial change, and fire a simulated\n // enter key afterwards.\n if (android && !inlineChange && $from.start() != $to.start() && $to.parentOffset == 0 && $from.depth == $to.depth &&\n parse.sel && parse.sel.anchor == parse.sel.head && parse.sel.head == change.endA) {\n change.endB -= 2;\n $to = parse.doc.resolveNoCache(change.endB - parse.from);\n setTimeout(() => {\n view.someProp(\"handleKeyDown\", function (f) { return f(view, keyEvent(13, \"Enter\")); });\n }, 20);\n }\n let chFrom = change.start, chTo = change.endA;\n let mkTr = (base) => {\n let tr = base || view.state.tr.replace(chFrom, chTo, parse.doc.slice(change.start - parse.from, change.endB - parse.from));\n if (parse.sel) {\n let sel = resolveSelection(view, tr.doc, parse.sel);\n // Chrome will sometimes, during composition, report the\n // selection in the wrong place. If it looks like that is\n // happening, don't update the selection.\n // Edge just doesn't move the cursor forward when you start typing\n // in an empty block or between br nodes.\n if (sel && !(chrome && view.composing && sel.empty &&\n (change.start != change.endB || view.input.lastChromeDelete < Date.now() - 100) &&\n (sel.head == chFrom || sel.head == tr.mapping.map(chTo) - 1) ||\n ie && sel.empty && sel.head == chFrom))\n tr.setSelection(sel);\n }\n if (compositionID)\n tr.setMeta(\"composition\", compositionID);\n return tr.scrollIntoView();\n };\n let markChange;\n if (inlineChange) {\n if ($from.pos == $to.pos) { // Deletion\n // IE11 sometimes weirdly moves the DOM selection around after\n // backspacing out the first element in a textblock\n if (ie && ie_version <= 11 && $from.parentOffset == 0) {\n view.domObserver.suppressSelectionUpdates();\n setTimeout(() => selectionToDOM(view), 20);\n }\n let tr = mkTr(view.state.tr.delete(chFrom, chTo));\n let marks = doc.resolve(change.start).marksAcross(doc.resolve(change.endA));\n if (marks)\n tr.ensureMarks(marks);\n view.dispatch(tr);\n }\n else if ( // Adding or removing a mark\n change.endA == change.endB &&\n (markChange = isMarkChange($from.parent.content.cut($from.parentOffset, $to.parentOffset), $fromA.parent.content.cut($fromA.parentOffset, change.endA - $fromA.start())))) {\n let tr = mkTr(view.state.tr);\n if (markChange.type == \"add\")\n tr.addMark(chFrom, chTo, markChange.mark);\n else\n tr.removeMark(chFrom, chTo, markChange.mark);\n view.dispatch(tr);\n }\n else if ($from.parent.child($from.index()).isText && $from.index() == $to.index() - ($to.textOffset ? 0 : 1)) {\n // Both positions in the same text node -- simply insert text\n let text = $from.parent.textBetween($from.parentOffset, $to.parentOffset);\n let deflt = () => mkTr(view.state.tr.insertText(text, chFrom, chTo));\n if (!view.someProp(\"handleTextInput\", f => f(view, chFrom, chTo, text, deflt)))\n view.dispatch(deflt());\n }\n else {\n view.dispatch(mkTr());\n }\n }\n else {\n view.dispatch(mkTr());\n }\n}\nfunction resolveSelection(view, doc, parsedSel) {\n if (Math.max(parsedSel.anchor, parsedSel.head) > doc.content.size)\n return null;\n return selectionBetween(view, doc.resolve(parsedSel.anchor), doc.resolve(parsedSel.head));\n}\n// Given two same-length, non-empty fragments of inline content,\n// determine whether the first could be created from the second by\n// removing or adding a single mark type.\nfunction isMarkChange(cur, prev) {\n let curMarks = cur.firstChild.marks, prevMarks = prev.firstChild.marks;\n let added = curMarks, removed = prevMarks, type, mark, update;\n for (let i = 0; i < prevMarks.length; i++)\n added = prevMarks[i].removeFromSet(added);\n for (let i = 0; i < curMarks.length; i++)\n removed = curMarks[i].removeFromSet(removed);\n if (added.length == 1 && removed.length == 0) {\n mark = added[0];\n type = \"add\";\n update = (node) => node.mark(mark.addToSet(node.marks));\n }\n else if (added.length == 0 && removed.length == 1) {\n mark = removed[0];\n type = \"remove\";\n update = (node) => node.mark(mark.removeFromSet(node.marks));\n }\n else {\n return null;\n }\n let updated = [];\n for (let i = 0; i < prev.childCount; i++)\n updated.push(update(prev.child(i)));\n if (Fragment.from(updated).eq(cur))\n return { mark, type };\n}\nfunction looksLikeBackspace(old, start, end, $newStart, $newEnd) {\n if ( // The content must have shrunk\n end - start <= $newEnd.pos - $newStart.pos ||\n // newEnd must point directly at or after the end of the block that newStart points into\n skipClosingAndOpening($newStart, true, false) < $newEnd.pos)\n return false;\n let $start = old.resolve(start);\n // Handle the case where, rather than joining blocks, the change just removed an entire block\n if (!$newStart.parent.isTextblock) {\n let after = $start.nodeAfter;\n return after != null && end == start + after.nodeSize;\n }\n // Start must be at the end of a block\n if ($start.parentOffset < $start.parent.content.size || !$start.parent.isTextblock)\n return false;\n let $next = old.resolve(skipClosingAndOpening($start, true, true));\n // The next textblock must start before end and end near it\n if (!$next.parent.isTextblock || $next.pos > end ||\n skipClosingAndOpening($next, true, false) < end)\n return false;\n // The fragments after the join point must match\n return $newStart.parent.content.cut($newStart.parentOffset).eq($next.parent.content);\n}\nfunction skipClosingAndOpening($pos, fromEnd, mayOpen) {\n let depth = $pos.depth, end = fromEnd ? $pos.end() : $pos.pos;\n while (depth > 0 && (fromEnd || $pos.indexAfter(depth) == $pos.node(depth).childCount)) {\n depth--;\n end++;\n fromEnd = false;\n }\n if (mayOpen) {\n let next = $pos.node(depth).maybeChild($pos.indexAfter(depth));\n while (next && !next.isLeaf) {\n next = next.firstChild;\n end++;\n }\n }\n return end;\n}\nfunction findDiff(a, b, pos, preferredPos, preferredSide) {\n let start = a.findDiffStart(b, pos);\n if (start == null)\n return null;\n let { a: endA, b: endB } = a.findDiffEnd(b, pos + a.size, pos + b.size);\n if (preferredSide == \"end\") {\n let adjust = Math.max(0, start - Math.min(endA, endB));\n preferredPos -= endA + adjust - start;\n }\n if (endA < start && a.size < b.size) {\n let move = preferredPos <= start && preferredPos >= endA ? start - preferredPos : 0;\n start -= move;\n if (start && start < b.size && isSurrogatePair(b.textBetween(start - 1, start + 1)))\n start += move ? 1 : -1;\n endB = start + (endB - endA);\n endA = start;\n }\n else if (endB < start) {\n let move = preferredPos <= start && preferredPos >= endB ? start - preferredPos : 0;\n start -= move;\n if (start && start < a.size && isSurrogatePair(a.textBetween(start - 1, start + 1)))\n start += move ? 1 : -1;\n endA = start + (endA - endB);\n endB = start;\n }\n return { start, endA, endB };\n}\nfunction isSurrogatePair(str) {\n if (str.length != 2)\n return false;\n let a = str.charCodeAt(0), b = str.charCodeAt(1);\n return a >= 0xDC00 && a <= 0xDFFF && b >= 0xD800 && b <= 0xDBFF;\n}\n\n/**\n@internal\n*/\nconst __parseFromClipboard = parseFromClipboard;\n/**\n@internal\n*/\nconst __endComposition = endComposition;\n/**\nAn editor view manages the DOM structure that represents an\neditable document. Its state and behavior are determined by its\n[props](https://prosemirror.net/docs/ref/#view.DirectEditorProps).\n*/\nclass EditorView {\n /**\n Create a view. `place` may be a DOM node that the editor should\n be appended to, a function that will place it into the document,\n or an object whose `mount` property holds the node to use as the\n document container. If it is `null`, the editor will not be\n added to the document.\n */\n constructor(place, props) {\n this._root = null;\n /**\n @internal\n */\n this.focused = false;\n /**\n Kludge used to work around a Chrome bug @internal\n */\n this.trackWrites = null;\n this.mounted = false;\n /**\n @internal\n */\n this.markCursor = null;\n /**\n @internal\n */\n this.cursorWrapper = null;\n /**\n @internal\n */\n this.lastSelectedViewDesc = undefined;\n /**\n @internal\n */\n this.input = new InputState;\n this.prevDirectPlugins = [];\n this.pluginViews = [];\n /**\n Holds `true` when a hack node is needed in Firefox to prevent the\n [space is eaten issue](https://github.com/ProseMirror/prosemirror/issues/651)\n @internal\n */\n this.requiresGeckoHackNode = false;\n /**\n When editor content is being dragged, this object contains\n information about the dragged slice and whether it is being\n copied or moved. At any other time, it is null.\n */\n this.dragging = null;\n this._props = props;\n this.state = props.state;\n this.directPlugins = props.plugins || [];\n this.directPlugins.forEach(checkStateComponent);\n this.dispatch = this.dispatch.bind(this);\n this.dom = (place && place.mount) || document.createElement(\"div\");\n if (place) {\n if (place.appendChild)\n place.appendChild(this.dom);\n else if (typeof place == \"function\")\n place(this.dom);\n else if (place.mount)\n this.mounted = true;\n }\n this.editable = getEditable(this);\n updateCursorWrapper(this);\n this.nodeViews = buildNodeViews(this);\n this.docView = docViewDesc(this.state.doc, computeDocDeco(this), viewDecorations(this), this.dom, this);\n this.domObserver = new DOMObserver(this, (from, to, typeOver, added) => readDOMChange(this, from, to, typeOver, added));\n this.domObserver.start();\n initInput(this);\n this.updatePluginViews();\n }\n /**\n Holds `true` when a\n [composition](https://w3c.github.io/uievents/#events-compositionevents)\n is active.\n */\n get composing() { return this.input.composing; }\n /**\n The view's current [props](https://prosemirror.net/docs/ref/#view.EditorProps).\n */\n get props() {\n if (this._props.state != this.state) {\n let prev = this._props;\n this._props = {};\n for (let name in prev)\n this._props[name] = prev[name];\n this._props.state = this.state;\n }\n return this._props;\n }\n /**\n Update the view's props. Will immediately cause an update to\n the DOM.\n */\n update(props) {\n if (props.handleDOMEvents != this._props.handleDOMEvents)\n ensureListeners(this);\n let prevProps = this._props;\n this._props = props;\n if (props.plugins) {\n props.plugins.forEach(checkStateComponent);\n this.directPlugins = props.plugins;\n }\n this.updateStateInner(props.state, prevProps);\n }\n /**\n Update the view by updating existing props object with the object\n given as argument. Equivalent to `view.update(Object.assign({},\n view.props, props))`.\n */\n setProps(props) {\n let updated = {};\n for (let name in this._props)\n updated[name] = this._props[name];\n updated.state = this.state;\n for (let name in props)\n updated[name] = props[name];\n this.update(updated);\n }\n /**\n Update the editor's `state` prop, without touching any of the\n other props.\n */\n updateState(state) {\n this.updateStateInner(state, this._props);\n }\n updateStateInner(state, prevProps) {\n var _a;\n let prev = this.state, redraw = false, updateSel = false;\n // When stored marks are added, stop composition, so that they can\n // be displayed.\n if (state.storedMarks && this.composing) {\n clearComposition(this);\n updateSel = true;\n }\n this.state = state;\n let pluginsChanged = prev.plugins != state.plugins || this._props.plugins != prevProps.plugins;\n if (pluginsChanged || this._props.plugins != prevProps.plugins || this._props.nodeViews != prevProps.nodeViews) {\n let nodeViews = buildNodeViews(this);\n if (changedNodeViews(nodeViews, this.nodeViews)) {\n this.nodeViews = nodeViews;\n redraw = true;\n }\n }\n if (pluginsChanged || prevProps.handleDOMEvents != this._props.handleDOMEvents) {\n ensureListeners(this);\n }\n this.editable = getEditable(this);\n updateCursorWrapper(this);\n let innerDeco = viewDecorations(this), outerDeco = computeDocDeco(this);\n let scroll = prev.plugins != state.plugins && !prev.doc.eq(state.doc) ? \"reset\"\n : state.scrollToSelection > prev.scrollToSelection ? \"to selection\" : \"preserve\";\n let updateDoc = redraw || !this.docView.matchesNode(state.doc, outerDeco, innerDeco);\n if (updateDoc || !state.selection.eq(prev.selection))\n updateSel = true;\n let oldScrollPos = scroll == \"preserve\" && updateSel && this.dom.style.overflowAnchor == null && storeScrollPos(this);\n if (updateSel) {\n this.domObserver.stop();\n // Work around an issue in Chrome, IE, and Edge where changing\n // the DOM around an active selection puts it into a broken\n // state where the thing the user sees differs from the\n // selection reported by the Selection object (#710, #973,\n // #1011, #1013, #1035).\n let forceSelUpdate = updateDoc && (ie || chrome) && !this.composing &&\n !prev.selection.empty && !state.selection.empty && selectionContextChanged(prev.selection, state.selection);\n if (updateDoc) {\n // If the node that the selection points into is written to,\n // Chrome sometimes starts misreporting the selection, so this\n // tracks that and forces a selection reset when our update\n // did write to the node.\n let chromeKludge = chrome ? (this.trackWrites = this.domSelectionRange().focusNode) : null;\n if (this.composing)\n this.input.compositionNode = findCompositionNode(this);\n if (redraw || !this.docView.update(state.doc, outerDeco, innerDeco, this)) {\n this.docView.updateOuterDeco(outerDeco);\n this.docView.destroy();\n this.docView = docViewDesc(state.doc, outerDeco, innerDeco, this.dom, this);\n }\n if (chromeKludge && (!this.trackWrites || !this.dom.contains(this.trackWrites)))\n forceSelUpdate = true;\n }\n // Work around for an issue where an update arriving right between\n // a DOM selection change and the \"selectionchange\" event for it\n // can cause a spurious DOM selection update, disrupting mouse\n // drag selection.\n if (forceSelUpdate ||\n !(this.input.mouseDown && this.domObserver.currentSelection.eq(this.domSelectionRange()) &&\n anchorInRightPlace(this))) {\n selectionToDOM(this, forceSelUpdate);\n }\n else {\n syncNodeSelection(this, state.selection);\n this.domObserver.setCurSelection();\n }\n this.domObserver.start();\n }\n this.updatePluginViews(prev);\n if (((_a = this.dragging) === null || _a === void 0 ? void 0 : _a.node) && !prev.doc.eq(state.doc))\n this.updateDraggedNode(this.dragging, prev);\n if (scroll == \"reset\") {\n this.dom.scrollTop = 0;\n }\n else if (scroll == \"to selection\") {\n this.scrollToSelection();\n }\n else if (oldScrollPos) {\n resetScrollPos(oldScrollPos);\n }\n }\n /**\n @internal\n */\n scrollToSelection() {\n let startDOM = this.domSelectionRange().focusNode;\n if (!startDOM || !this.dom.contains(startDOM.nodeType == 1 ? startDOM : startDOM.parentNode)) ;\n else if (this.someProp(\"handleScrollToSelection\", f => f(this))) ;\n else if (this.state.selection instanceof NodeSelection) {\n let target = this.docView.domAfterPos(this.state.selection.from);\n if (target.nodeType == 1)\n scrollRectIntoView(this, target.getBoundingClientRect(), startDOM);\n }\n else {\n scrollRectIntoView(this, this.coordsAtPos(this.state.selection.head, 1), startDOM);\n }\n }\n destroyPluginViews() {\n let view;\n while (view = this.pluginViews.pop())\n if (view.destroy)\n view.destroy();\n }\n updatePluginViews(prevState) {\n if (!prevState || prevState.plugins != this.state.plugins || this.directPlugins != this.prevDirectPlugins) {\n this.prevDirectPlugins = this.directPlugins;\n this.destroyPluginViews();\n for (let i = 0; i < this.directPlugins.length; i++) {\n let plugin = this.directPlugins[i];\n if (plugin.spec.view)\n this.pluginViews.push(plugin.spec.view(this));\n }\n for (let i = 0; i < this.state.plugins.length; i++) {\n let plugin = this.state.plugins[i];\n if (plugin.spec.view)\n this.pluginViews.push(plugin.spec.view(this));\n }\n }\n else {\n for (let i = 0; i < this.pluginViews.length; i++) {\n let pluginView = this.pluginViews[i];\n if (pluginView.update)\n pluginView.update(this, prevState);\n }\n }\n }\n updateDraggedNode(dragging, prev) {\n let sel = dragging.node, found = -1;\n if (this.state.doc.nodeAt(sel.from) == sel.node) {\n found = sel.from;\n }\n else {\n let movedPos = sel.from + (this.state.doc.content.size - prev.doc.content.size);\n let moved = movedPos > 0 && this.state.doc.nodeAt(movedPos);\n if (moved == sel.node)\n found = movedPos;\n }\n this.dragging = new Dragging(dragging.slice, dragging.move, found < 0 ? undefined : NodeSelection.create(this.state.doc, found));\n }\n someProp(propName, f) {\n let prop = this._props && this._props[propName], value;\n if (prop != null && (value = f ? f(prop) : prop))\n return value;\n for (let i = 0; i < this.directPlugins.length; i++) {\n let prop = this.directPlugins[i].props[propName];\n if (prop != null && (value = f ? f(prop) : prop))\n return value;\n }\n let plugins = this.state.plugins;\n if (plugins)\n for (let i = 0; i < plugins.length; i++) {\n let prop = plugins[i].props[propName];\n if (prop != null && (value = f ? f(prop) : prop))\n return value;\n }\n }\n /**\n Query whether the view has focus.\n */\n hasFocus() {\n // Work around IE not handling focus correctly if resize handles are shown.\n // If the cursor is inside an element with resize handles, activeElement\n // will be that element instead of this.dom.\n if (ie) {\n // If activeElement is within this.dom, and there are no other elements\n // setting `contenteditable` to false in between, treat it as focused.\n let node = this.root.activeElement;\n if (node == this.dom)\n return true;\n if (!node || !this.dom.contains(node))\n return false;\n while (node && this.dom != node && this.dom.contains(node)) {\n if (node.contentEditable == 'false')\n return false;\n node = node.parentElement;\n }\n return true;\n }\n return this.root.activeElement == this.dom;\n }\n /**\n Focus the editor.\n */\n focus() {\n this.domObserver.stop();\n if (this.editable)\n focusPreventScroll(this.dom);\n selectionToDOM(this);\n this.domObserver.start();\n }\n /**\n Get the document root in which the editor exists. This will\n usually be the top-level `document`, but might be a [shadow\n DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Shadow_DOM)\n root if the editor is inside one.\n */\n get root() {\n let cached = this._root;\n if (cached == null)\n for (let search = this.dom.parentNode; search; search = search.parentNode) {\n if (search.nodeType == 9 || (search.nodeType == 11 && search.host)) {\n if (!search.getSelection)\n Object.getPrototypeOf(search).getSelection = () => search.ownerDocument.getSelection();\n return this._root = search;\n }\n }\n return cached || document;\n }\n /**\n When an existing editor view is moved to a new document or\n shadow tree, call this to make it recompute its root.\n */\n updateRoot() {\n this._root = null;\n }\n /**\n Given a pair of viewport coordinates, return the document\n position that corresponds to them. May return null if the given\n coordinates aren't inside of the editor. When an object is\n returned, its `pos` property is the position nearest to the\n coordinates, and its `inside` property holds the position of the\n inner node that the position falls inside of, or -1 if it is at\n the top level, not in any node.\n */\n posAtCoords(coords) {\n return posAtCoords(this, coords);\n }\n /**\n Returns the viewport rectangle at a given document position.\n `left` and `right` will be the same number, as this returns a\n flat cursor-ish rectangle. If the position is between two things\n that aren't directly adjacent, `side` determines which element\n is used. When < 0, the element before the position is used,\n otherwise the element after.\n */\n coordsAtPos(pos, side = 1) {\n return coordsAtPos(this, pos, side);\n }\n /**\n Find the DOM position that corresponds to the given document\n position. When `side` is negative, find the position as close as\n possible to the content before the position. When positive,\n prefer positions close to the content after the position. When\n zero, prefer as shallow a position as possible.\n \n Note that you should **not** mutate the editor's internal DOM,\n only inspect it (and even that is usually not necessary).\n */\n domAtPos(pos, side = 0) {\n return this.docView.domFromPos(pos, side);\n }\n /**\n Find the DOM node that represents the document node after the\n given position. May return `null` when the position doesn't point\n in front of a node or if the node is inside an opaque node view.\n \n This is intended to be able to call things like\n `getBoundingClientRect` on that DOM node. Do **not** mutate the\n editor DOM directly, or add styling this way, since that will be\n immediately overriden by the editor as it redraws the node.\n */\n nodeDOM(pos) {\n let desc = this.docView.descAt(pos);\n return desc ? desc.nodeDOM : null;\n }\n /**\n Find the document position that corresponds to a given DOM\n position. (Whenever possible, it is preferable to inspect the\n document structure directly, rather than poking around in the\n DOM, but sometimes—for example when interpreting an event\n target—you don't have a choice.)\n \n The `bias` parameter can be used to influence which side of a DOM\n node to use when the position is inside a leaf node.\n */\n posAtDOM(node, offset, bias = -1) {\n let pos = this.docView.posFromDOM(node, offset, bias);\n if (pos == null)\n throw new RangeError(\"DOM position not inside the editor\");\n return pos;\n }\n /**\n Find out whether the selection is at the end of a textblock when\n moving in a given direction. When, for example, given `\"left\"`,\n it will return true if moving left from the current cursor\n position would leave that position's parent textblock. Will apply\n to the view's current state by default, but it is possible to\n pass a different state.\n */\n endOfTextblock(dir, state) {\n return endOfTextblock(this, state || this.state, dir);\n }\n /**\n Run the editor's paste logic with the given HTML string. The\n `event`, if given, will be passed to the\n [`handlePaste`](https://prosemirror.net/docs/ref/#view.EditorProps.handlePaste) hook.\n */\n pasteHTML(html, event) {\n return doPaste(this, \"\", html, false, event || new ClipboardEvent(\"paste\"));\n }\n /**\n Run the editor's paste logic with the given plain-text input.\n */\n pasteText(text, event) {\n return doPaste(this, text, null, true, event || new ClipboardEvent(\"paste\"));\n }\n /**\n Serialize the given slice as it would be if it was copied from\n this editor. Returns a DOM element that contains a\n representation of the slice as its children, a textual\n representation, and the transformed slice (which can be\n different from the given input due to hooks like\n [`transformCopied`](https://prosemirror.net/docs/ref/#view.EditorProps.transformCopied)).\n */\n serializeForClipboard(slice) {\n return serializeForClipboard(this, slice);\n }\n /**\n Removes the editor from the DOM and destroys all [node\n views](https://prosemirror.net/docs/ref/#view.NodeView).\n */\n destroy() {\n if (!this.docView)\n return;\n destroyInput(this);\n this.destroyPluginViews();\n if (this.mounted) {\n this.docView.update(this.state.doc, [], viewDecorations(this), this);\n this.dom.textContent = \"\";\n }\n else if (this.dom.parentNode) {\n this.dom.parentNode.removeChild(this.dom);\n }\n this.docView.destroy();\n this.docView = null;\n clearReusedRange();\n }\n /**\n This is true when the view has been\n [destroyed](https://prosemirror.net/docs/ref/#view.EditorView.destroy) (and thus should not be\n used anymore).\n */\n get isDestroyed() {\n return this.docView == null;\n }\n /**\n Used for testing.\n */\n dispatchEvent(event) {\n return dispatchEvent(this, event);\n }\n /**\n @internal\n */\n domSelectionRange() {\n let sel = this.domSelection();\n if (!sel)\n return { focusNode: null, focusOffset: 0, anchorNode: null, anchorOffset: 0 };\n return safari && this.root.nodeType === 11 &&\n deepActiveElement(this.dom.ownerDocument) == this.dom && safariShadowSelectionRange(this, sel) || sel;\n }\n /**\n @internal\n */\n domSelection() {\n return this.root.getSelection();\n }\n}\nEditorView.prototype.dispatch = function (tr) {\n let dispatchTransaction = this._props.dispatchTransaction;\n if (dispatchTransaction)\n dispatchTransaction.call(this, tr);\n else\n this.updateState(this.state.apply(tr));\n};\nfunction computeDocDeco(view) {\n let attrs = Object.create(null);\n attrs.class = \"ProseMirror\";\n attrs.contenteditable = String(view.editable);\n view.someProp(\"attributes\", value => {\n if (typeof value == \"function\")\n value = value(view.state);\n if (value)\n for (let attr in value) {\n if (attr == \"class\")\n attrs.class += \" \" + value[attr];\n else if (attr == \"style\")\n attrs.style = (attrs.style ? attrs.style + \";\" : \"\") + value[attr];\n else if (!attrs[attr] && attr != \"contenteditable\" && attr != \"nodeName\")\n attrs[attr] = String(value[attr]);\n }\n });\n if (!attrs.translate)\n attrs.translate = \"no\";\n return [Decoration.node(0, view.state.doc.content.size, attrs)];\n}\nfunction updateCursorWrapper(view) {\n if (view.markCursor) {\n let dom = document.createElement(\"img\");\n dom.className = \"ProseMirror-separator\";\n dom.setAttribute(\"mark-placeholder\", \"true\");\n dom.setAttribute(\"alt\", \"\");\n view.cursorWrapper = { dom, deco: Decoration.widget(view.state.selection.from, dom, { raw: true, marks: view.markCursor }) };\n }\n else {\n view.cursorWrapper = null;\n }\n}\nfunction getEditable(view) {\n return !view.someProp(\"editable\", value => value(view.state) === false);\n}\nfunction selectionContextChanged(sel1, sel2) {\n let depth = Math.min(sel1.$anchor.sharedDepth(sel1.head), sel2.$anchor.sharedDepth(sel2.head));\n return sel1.$anchor.start(depth) != sel2.$anchor.start(depth);\n}\nfunction buildNodeViews(view) {\n let result = Object.create(null);\n function add(obj) {\n for (let prop in obj)\n if (!Object.prototype.hasOwnProperty.call(result, prop))\n result[prop] = obj[prop];\n }\n view.someProp(\"nodeViews\", add);\n view.someProp(\"markViews\", add);\n return result;\n}\nfunction changedNodeViews(a, b) {\n let nA = 0, nB = 0;\n for (let prop in a) {\n if (a[prop] != b[prop])\n return true;\n nA++;\n }\n for (let _ in b)\n nB++;\n return nA != nB;\n}\nfunction checkStateComponent(plugin) {\n if (plugin.spec.state || plugin.spec.filterTransaction || plugin.spec.appendTransaction)\n throw new RangeError(\"Plugins passed directly to the view must not have a state component\");\n}\n\nexport { Decoration, DecorationSet, EditorView, __endComposition, __parseFromClipboard };\n","import { createSlice, createTimer, Container, Clock, Ctx } from \"@milkdown/ctx\";\nimport { Schema, DOMParser, Node } from \"@milkdown/prose/model\";\nimport remarkParse from \"remark-parse\";\nimport remarkStringify from \"remark-stringify\";\nimport { unified } from \"unified\";\nimport { callCommandBeforeEditorView, ctxCallOutOfScope, docTypeError } from \"@milkdown/exception\";\nimport { ParserState, SerializerState } from \"@milkdown/transformer\";\nimport { chainCommands, deleteSelection, joinTextblockBackward, selectNodeBackward, baseKeymap } from \"@milkdown/prose/commands\";\nimport { undoInputRule } from \"@milkdown/prose/inputrules\";\nimport { customInputRules } from \"@milkdown/prose\";\nimport { keymap as keymap$1 } from \"@milkdown/prose/keymap\";\nimport { Plugin, PluginKey, EditorState } from \"@milkdown/prose/state\";\nimport { EditorView } from \"@milkdown/prose/view\";\nfunction withMeta(plugin, meta) {\n plugin.meta = {\n package: \"@milkdown/core\",\n group: \"System\",\n ...meta\n };\n return plugin;\n}\nconst remarkHandlers = {\n text: (node, _, state, info) => {\n const value = node.value;\n if (/^[^*_\\\\]*\\s+$/.test(value)) {\n return value;\n }\n return state.safe(value, { ...info, encode: [] });\n },\n strong: (node, _, state, info) => {\n const marker = node.marker || state.options.strong || \"*\";\n const exit = state.enter(\"strong\");\n const tracker = state.createTracker(info);\n let value = tracker.move(marker + marker);\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: marker,\n ...tracker.current()\n })\n );\n value += tracker.move(marker + marker);\n exit();\n return value;\n },\n emphasis: (node, _, state, info) => {\n const marker = node.marker || state.options.emphasis || \"*\";\n const exit = state.enter(\"emphasis\");\n const tracker = state.createTracker(info);\n let value = tracker.move(marker);\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: marker,\n ...tracker.current()\n })\n );\n value += tracker.move(marker);\n exit();\n return value;\n }\n};\nconst editorViewCtx = createSlice({}, \"editorView\");\nconst editorStateCtx = createSlice({}, \"editorState\");\nconst initTimerCtx = createSlice([], \"initTimer\");\nconst editorCtx = createSlice({}, \"editor\");\nconst inputRulesCtx = createSlice([], \"inputRules\");\nconst prosePluginsCtx = createSlice([], \"prosePlugins\");\nconst remarkPluginsCtx = createSlice(\n [],\n \"remarkPlugins\"\n);\nconst nodeViewCtx = createSlice([], \"nodeView\");\nconst markViewCtx = createSlice([], \"markView\");\nconst remarkCtx = createSlice(\n unified().use(remarkParse).use(remarkStringify),\n \"remark\"\n);\nconst remarkStringifyOptionsCtx = createSlice(\n {\n handlers: remarkHandlers,\n encode: []\n },\n \"remarkStringifyOptions\"\n);\nconst ConfigReady = createTimer(\"ConfigReady\");\nfunction config(configure) {\n const plugin = (ctx) => {\n ctx.record(ConfigReady);\n return async () => {\n await configure(ctx);\n ctx.done(ConfigReady);\n return () => {\n ctx.clearTimer(ConfigReady);\n };\n };\n };\n withMeta(plugin, {\n displayName: \"Config\"\n });\n return plugin;\n}\nconst InitReady = createTimer(\"InitReady\");\nfunction init(editor) {\n const plugin = (ctx) => {\n ctx.inject(editorCtx, editor).inject(prosePluginsCtx, []).inject(remarkPluginsCtx, []).inject(inputRulesCtx, []).inject(nodeViewCtx, []).inject(markViewCtx, []).inject(remarkStringifyOptionsCtx, {\n handlers: remarkHandlers,\n encode: []\n }).inject(remarkCtx, unified().use(remarkParse).use(remarkStringify)).inject(initTimerCtx, [ConfigReady]).record(InitReady);\n return async () => {\n await ctx.waitTimers(initTimerCtx);\n const options = ctx.get(remarkStringifyOptionsCtx);\n ctx.set(\n remarkCtx,\n unified().use(remarkParse).use(remarkStringify, options)\n );\n ctx.done(InitReady);\n return () => {\n ctx.remove(editorCtx).remove(prosePluginsCtx).remove(remarkPluginsCtx).remove(inputRulesCtx).remove(nodeViewCtx).remove(markViewCtx).remove(remarkStringifyOptionsCtx).remove(remarkCtx).remove(initTimerCtx).clearTimer(InitReady);\n };\n };\n };\n withMeta(plugin, {\n displayName: \"Init\"\n });\n return plugin;\n}\nconst SchemaReady = createTimer(\"SchemaReady\");\nconst schemaTimerCtx = createSlice([], \"schemaTimer\");\nconst schemaCtx = createSlice({}, \"schema\");\nconst nodesCtx = createSlice([], \"nodes\");\nconst marksCtx = createSlice([], \"marks\");\nfunction extendPriority(x) {\n return {\n ...x,\n parseDOM: x.parseDOM?.map((rule) => ({ priority: x.priority, ...rule }))\n };\n}\nconst schema = (ctx) => {\n ctx.inject(schemaCtx, {}).inject(nodesCtx, []).inject(marksCtx, []).inject(schemaTimerCtx, [InitReady]).record(SchemaReady);\n return async () => {\n await ctx.waitTimers(schemaTimerCtx);\n const remark = ctx.get(remarkCtx);\n const remarkPlugins = ctx.get(remarkPluginsCtx);\n const processor = remarkPlugins.reduce(\n (acc, plug) => acc.use(plug.plugin, plug.options),\n remark\n );\n ctx.set(remarkCtx, processor);\n const nodes = Object.fromEntries(\n ctx.get(nodesCtx).map(([key2, x]) => [key2, extendPriority(x)])\n );\n const marks = Object.fromEntries(\n ctx.get(marksCtx).map(([key2, x]) => [key2, extendPriority(x)])\n );\n const schema2 = new Schema({ nodes, marks });\n ctx.set(schemaCtx, schema2);\n ctx.done(SchemaReady);\n return () => {\n ctx.remove(schemaCtx).remove(nodesCtx).remove(marksCtx).remove(schemaTimerCtx).clearTimer(SchemaReady);\n };\n };\n};\nwithMeta(schema, {\n displayName: \"Schema\"\n});\nclass CommandManager {\n constructor() {\n this.#container = new Container();\n this.#ctx = null;\n this.setCtx = (ctx) => {\n this.#ctx = ctx;\n };\n this.chain = () => {\n if (this.#ctx == null) throw callCommandBeforeEditorView();\n const ctx = this.#ctx;\n const commands2 = [];\n const get = this.get.bind(this);\n const chains = {\n run: () => {\n const chained = chainCommands(...commands2);\n const view = ctx.get(editorViewCtx);\n return chained(view.state, view.dispatch, view);\n },\n inline: (command) => {\n commands2.push(command);\n return chains;\n },\n pipe: pipe.bind(this)\n };\n function pipe(slice, payload) {\n const cmd = get(slice);\n commands2.push(cmd(payload));\n return chains;\n }\n return chains;\n };\n }\n #container;\n #ctx;\n get ctx() {\n return this.#ctx;\n }\n /// Register a command into the manager.\n create(meta, value) {\n const slice = meta.create(this.#container.sliceMap);\n slice.set(value);\n return slice;\n }\n get(slice) {\n return this.#container.get(slice).get();\n }\n remove(slice) {\n return this.#container.remove(slice);\n }\n call(slice, payload) {\n if (this.#ctx == null) throw callCommandBeforeEditorView();\n const cmd = this.get(slice);\n const command = cmd(payload);\n const view = this.#ctx.get(editorViewCtx);\n return command(view.state, view.dispatch, view);\n }\n /// Call an inline command.\n inline(command) {\n if (this.#ctx == null) throw callCommandBeforeEditorView();\n const view = this.#ctx.get(editorViewCtx);\n return command(view.state, view.dispatch, view);\n }\n}\nfunction createCmdKey(key2 = \"cmdKey\") {\n return createSlice((() => () => false), key2);\n}\nconst commandsCtx = createSlice(new CommandManager(), \"commands\");\nconst commandsTimerCtx = createSlice([SchemaReady], \"commandsTimer\");\nconst CommandsReady = createTimer(\"CommandsReady\");\nconst commands = (ctx) => {\n const cmd = new CommandManager();\n cmd.setCtx(ctx);\n ctx.inject(commandsCtx, cmd).inject(commandsTimerCtx, [SchemaReady]).record(CommandsReady);\n return async () => {\n await ctx.waitTimers(commandsTimerCtx);\n ctx.done(CommandsReady);\n return () => {\n ctx.remove(commandsCtx).remove(commandsTimerCtx).clearTimer(CommandsReady);\n };\n };\n};\nwithMeta(commands, {\n displayName: \"Commands\"\n});\nfunction overrideBaseKeymap(keymap2) {\n const handleBackspace = chainCommands(\n undoInputRule,\n deleteSelection,\n joinTextblockBackward,\n selectNodeBackward\n );\n keymap2.Backspace = handleBackspace;\n return keymap2;\n}\nclass KeymapManager {\n constructor() {\n this.#ctx = null;\n this.#keymap = [];\n this.setCtx = (ctx) => {\n this.#ctx = ctx;\n };\n this.add = (keymap2) => {\n this.#keymap.push(keymap2);\n return () => {\n this.#keymap = this.#keymap.filter((item) => item !== keymap2);\n };\n };\n this.addObjectKeymap = (keymaps) => {\n const remove = [];\n Object.entries(keymaps).forEach(([key2, command]) => {\n if (typeof command === \"function\") {\n const keymapItem = {\n key: key2,\n onRun: () => command\n };\n this.#keymap.push(keymapItem);\n remove.push(() => {\n this.#keymap = this.#keymap.filter((item) => item !== keymapItem);\n });\n } else {\n this.#keymap.push(command);\n remove.push(() => {\n this.#keymap = this.#keymap.filter((item) => item !== command);\n });\n }\n });\n return () => {\n remove.forEach((fn) => fn());\n };\n };\n this.addBaseKeymap = () => {\n const base = overrideBaseKeymap(baseKeymap);\n return this.addObjectKeymap(base);\n };\n this.build = () => {\n const keymap2 = {};\n this.#keymap.forEach((item) => {\n keymap2[item.key] = [...keymap2[item.key] || [], item];\n });\n const output = Object.fromEntries(\n Object.entries(keymap2).map(([key2, items]) => {\n const sortedItems = items.sort(\n (a, b) => (b.priority ?? 50) - (a.priority ?? 50)\n );\n const command = (state, dispatch, view) => {\n const ctx = this.#ctx;\n if (ctx == null) throw ctxCallOutOfScope();\n const commands2 = sortedItems.map((item) => item.onRun(ctx));\n const chained = chainCommands(...commands2);\n return chained(state, dispatch, view);\n };\n return [key2, command];\n })\n );\n return output;\n };\n }\n #ctx;\n #keymap;\n get ctx() {\n return this.#ctx;\n }\n}\nconst keymapCtx = createSlice(new KeymapManager(), \"keymap\");\nconst keymapTimerCtx = createSlice([SchemaReady], \"keymapTimer\");\nconst KeymapReady = createTimer(\"KeymapReady\");\nconst keymap = (ctx) => {\n const km = new KeymapManager();\n km.setCtx(ctx);\n ctx.inject(keymapCtx, km).inject(keymapTimerCtx, [SchemaReady]).record(KeymapReady);\n return async () => {\n await ctx.waitTimers(keymapTimerCtx);\n ctx.done(KeymapReady);\n return () => {\n ctx.remove(keymapCtx).remove(keymapTimerCtx).clearTimer(KeymapReady);\n };\n };\n};\nconst ParserReady = createTimer(\"ParserReady\");\nconst outOfScope$1 = (() => {\n throw ctxCallOutOfScope();\n});\nconst parserCtx = createSlice(outOfScope$1, \"parser\");\nconst parserTimerCtx = createSlice([], \"parserTimer\");\nconst parser = (ctx) => {\n ctx.inject(parserCtx, outOfScope$1).inject(parserTimerCtx, [SchemaReady]).record(ParserReady);\n return async () => {\n await ctx.waitTimers(parserTimerCtx);\n const remark = ctx.get(remarkCtx);\n const schema2 = ctx.get(schemaCtx);\n ctx.set(parserCtx, ParserState.create(schema2, remark));\n ctx.done(ParserReady);\n return () => {\n ctx.remove(parserCtx).remove(parserTimerCtx).clearTimer(ParserReady);\n };\n };\n};\nwithMeta(parser, {\n displayName: \"Parser\"\n});\nconst SerializerReady = createTimer(\"SerializerReady\");\nconst serializerTimerCtx = createSlice(\n [],\n \"serializerTimer\"\n);\nconst outOfScope = (() => {\n throw ctxCallOutOfScope();\n});\nconst serializerCtx = createSlice(\n outOfScope,\n \"serializer\"\n);\nconst serializer = (ctx) => {\n ctx.inject(serializerCtx, outOfScope).inject(serializerTimerCtx, [SchemaReady]).record(SerializerReady);\n return async () => {\n await ctx.waitTimers(serializerTimerCtx);\n const remark = ctx.get(remarkCtx);\n const schema2 = ctx.get(schemaCtx);\n ctx.set(serializerCtx, SerializerState.create(schema2, remark));\n ctx.done(SerializerReady);\n return () => {\n ctx.remove(serializerCtx).remove(serializerTimerCtx).clearTimer(SerializerReady);\n };\n };\n};\nwithMeta(serializer, {\n displayName: \"Serializer\"\n});\nconst defaultValueCtx = createSlice(\"\", \"defaultValue\");\nconst editorStateOptionsCtx = createSlice(\n (x) => x,\n \"stateOptions\"\n);\nconst editorStateTimerCtx = createSlice(\n [],\n \"editorStateTimer\"\n);\nconst EditorStateReady = createTimer(\"EditorStateReady\");\nfunction getDoc(defaultValue, parser2, schema2) {\n if (typeof defaultValue === \"string\") return parser2(defaultValue);\n if (defaultValue.type === \"html\")\n return DOMParser.fromSchema(schema2).parse(defaultValue.dom);\n if (defaultValue.type === \"json\")\n return Node.fromJSON(schema2, defaultValue.value);\n throw docTypeError(defaultValue);\n}\nconst key$1 = new PluginKey(\"MILKDOWN_STATE_TRACKER\");\nconst editorState = (ctx) => {\n ctx.inject(defaultValueCtx, \"\").inject(editorStateCtx, {}).inject(editorStateOptionsCtx, (x) => x).inject(editorStateTimerCtx, [\n ParserReady,\n SerializerReady,\n CommandsReady,\n KeymapReady\n ]).record(EditorStateReady);\n return async () => {\n await ctx.waitTimers(editorStateTimerCtx);\n const schema2 = ctx.get(schemaCtx);\n const parser2 = ctx.get(parserCtx);\n const rules = ctx.get(inputRulesCtx);\n const optionsOverride = ctx.get(editorStateOptionsCtx);\n const prosePlugins = ctx.get(prosePluginsCtx);\n const defaultValue = ctx.get(defaultValueCtx);\n const doc = getDoc(defaultValue, parser2, schema2);\n const km = ctx.get(keymapCtx);\n const disposeBaseKeymap = km.addBaseKeymap();\n const plugins = [\n ...prosePlugins,\n new Plugin({\n key: key$1,\n state: {\n init: () => {\n },\n apply: (_tr, _value, _oldState, newState) => {\n ctx.set(editorStateCtx, newState);\n }\n }\n }),\n customInputRules({ rules }),\n keymap$1(km.build())\n ];\n ctx.set(prosePluginsCtx, plugins);\n const options = optionsOverride({\n schema: schema2,\n doc,\n plugins\n });\n const state = EditorState.create(options);\n ctx.set(editorStateCtx, state);\n ctx.done(EditorStateReady);\n return () => {\n disposeBaseKeymap();\n ctx.remove(defaultValueCtx).remove(editorStateCtx).remove(editorStateOptionsCtx).remove(editorStateTimerCtx).clearTimer(EditorStateReady);\n };\n };\n};\nwithMeta(editorState, {\n displayName: \"EditorState\"\n});\nconst pasteRulesCtx = createSlice([], \"pasteRule\");\nconst pasteRulesTimerCtx = createSlice([SchemaReady], \"pasteRuleTimer\");\nconst PasteRulesReady = createTimer(\"PasteRuleReady\");\nconst pasteRule = (ctx) => {\n ctx.inject(pasteRulesCtx, []).inject(pasteRulesTimerCtx, [SchemaReady]).record(PasteRulesReady);\n return async () => {\n await ctx.waitTimers(pasteRulesTimerCtx);\n ctx.done(PasteRulesReady);\n return () => {\n ctx.remove(pasteRulesCtx).remove(pasteRulesTimerCtx).clearTimer(PasteRulesReady);\n };\n };\n};\nwithMeta(pasteRule, {\n displayName: \"PasteRule\"\n});\nconst EditorViewReady = createTimer(\"EditorViewReady\");\nconst editorViewTimerCtx = createSlice(\n [],\n \"editorViewTimer\"\n);\nconst editorViewOptionsCtx = createSlice(\n {},\n \"editorViewOptions\"\n);\nconst rootCtx = createSlice(null, \"root\");\nconst rootDOMCtx = createSlice(null, \"rootDOM\");\nconst rootAttrsCtx = createSlice(\n {},\n \"rootAttrs\"\n);\nfunction createViewContainer(root, ctx) {\n const container = document.createElement(\"div\");\n container.className = \"milkdown\";\n root.appendChild(container);\n ctx.set(rootDOMCtx, container);\n const attrs = ctx.get(rootAttrsCtx);\n Object.entries(attrs).forEach(\n ([key2, value]) => container.setAttribute(key2, value)\n );\n return container;\n}\nfunction prepareViewDom(dom) {\n dom.classList.add(\"editor\");\n dom.setAttribute(\"role\", \"textbox\");\n}\nconst key = new PluginKey(\"MILKDOWN_VIEW_CLEAR\");\nconst editorView = (ctx) => {\n ctx.inject(rootCtx, document.body).inject(editorViewCtx, {}).inject(editorViewOptionsCtx, {}).inject(rootDOMCtx, null).inject(rootAttrsCtx, {}).inject(editorViewTimerCtx, [EditorStateReady, PasteRulesReady]).record(EditorViewReady);\n return async () => {\n await ctx.wait(InitReady);\n const root = ctx.get(rootCtx) || document.body;\n const el = typeof root === \"string\" ? document.querySelector(root) : root;\n ctx.update(prosePluginsCtx, (xs) => [\n new Plugin({\n key,\n view: (editorView2) => {\n const container = el ? createViewContainer(el, ctx) : void 0;\n const handleDOM = () => {\n if (container && el) {\n const editor = editorView2.dom;\n el.replaceChild(container, editor);\n container.appendChild(editor);\n }\n };\n handleDOM();\n return {\n destroy: () => {\n if (container?.parentNode)\n container?.parentNode.replaceChild(editorView2.dom, container);\n container?.remove();\n }\n };\n }\n }),\n ...xs\n ]);\n await ctx.waitTimers(editorViewTimerCtx);\n const state = ctx.get(editorStateCtx);\n const options = ctx.get(editorViewOptionsCtx);\n const nodeViews = Object.fromEntries(ctx.get(nodeViewCtx));\n const markViews = Object.fromEntries(ctx.get(markViewCtx));\n const view = new EditorView(el, {\n state,\n nodeViews,\n markViews,\n transformPasted: (slice, view2, isPlainText) => {\n ctx.get(pasteRulesCtx).sort((a, b) => (b.priority ?? 50) - (a.priority ?? 50)).map((rule) => rule.run).forEach((runner) => {\n slice = runner(slice, view2, isPlainText);\n });\n return slice;\n },\n ...options\n });\n prepareViewDom(view.dom);\n ctx.set(editorViewCtx, view);\n ctx.done(EditorViewReady);\n return () => {\n view?.destroy();\n ctx.remove(rootCtx).remove(editorViewCtx).remove(editorViewOptionsCtx).remove(rootDOMCtx).remove(rootAttrsCtx).remove(editorViewTimerCtx).clearTimer(EditorViewReady);\n };\n };\n};\nwithMeta(editorView, {\n displayName: \"EditorView\"\n});\nvar EditorStatus = /* @__PURE__ */ ((EditorStatus2) => {\n EditorStatus2[\"Idle\"] = \"Idle\";\n EditorStatus2[\"OnCreate\"] = \"OnCreate\";\n EditorStatus2[\"Created\"] = \"Created\";\n EditorStatus2[\"OnDestroy\"] = \"OnDestroy\";\n EditorStatus2[\"Destroyed\"] = \"Destroyed\";\n return EditorStatus2;\n})(EditorStatus || {});\nclass Editor {\n constructor() {\n this.#enableInspector = false;\n this.#status = \"Idle\";\n this.#configureList = [];\n this.#onStatusChange = () => void 0;\n this.#container = new Container();\n this.#clock = new Clock();\n this.#usrPluginStore = /* @__PURE__ */ new Map();\n this.#sysPluginStore = /* @__PURE__ */ new Map();\n this.#ctx = new Ctx(this.#container, this.#clock);\n this.#loadInternal = () => {\n const configPlugin = config(async (ctx) => {\n await Promise.all(\n this.#configureList.map((fn) => Promise.resolve(fn(ctx)))\n );\n });\n const internalPlugins = [\n schema,\n parser,\n serializer,\n commands,\n keymap,\n pasteRule,\n editorState,\n editorView,\n init(this),\n configPlugin\n ];\n this.#prepare(internalPlugins, this.#sysPluginStore);\n };\n this.#prepare = (plugins, store) => {\n plugins.forEach((plugin) => {\n const ctx = this.#ctx.produce(\n this.#enableInspector ? plugin.meta : void 0\n );\n const handler = plugin(ctx);\n store.set(plugin, { ctx, handler, cleanup: void 0 });\n });\n };\n this.#cleanup = (plugins, remove = false) => {\n return Promise.all(\n [plugins].flat().map(async (plugin) => {\n const loader = this.#usrPluginStore.get(plugin);\n const cleanup = loader?.cleanup;\n if (remove) this.#usrPluginStore.delete(plugin);\n else\n this.#usrPluginStore.set(plugin, {\n ctx: void 0,\n handler: void 0,\n cleanup: void 0\n });\n if (typeof cleanup === \"function\") return cleanup();\n return cleanup;\n })\n );\n };\n this.#cleanupInternal = async () => {\n await Promise.all(\n [...this.#sysPluginStore.entries()].map(async ([_, { cleanup }]) => {\n if (typeof cleanup === \"function\") return cleanup();\n return cleanup;\n })\n );\n this.#sysPluginStore.clear();\n };\n this.#setStatus = (status) => {\n this.#status = status;\n this.#onStatusChange(status);\n };\n this.#loadPluginInStore = (store) => {\n return [...store.entries()].map(async ([key2, loader]) => {\n const { ctx, handler } = loader;\n if (!handler) return;\n const cleanup = await handler();\n store.set(key2, { ctx, handler, cleanup });\n });\n };\n this.enableInspector = (enable = true) => {\n this.#enableInspector = enable;\n return this;\n };\n this.onStatusChange = (onChange) => {\n this.#onStatusChange = onChange;\n return this;\n };\n this.config = (configure) => {\n this.#configureList.push(configure);\n return this;\n };\n this.removeConfig = (configure) => {\n this.#configureList = this.#configureList.filter((x) => x !== configure);\n return this;\n };\n this.use = (plugins) => {\n const _plugins = [plugins].flat();\n _plugins.flat().forEach((plugin) => {\n this.#usrPluginStore.set(plugin, {\n ctx: void 0,\n handler: void 0,\n cleanup: void 0\n });\n });\n if (this.#status === \"Created\")\n this.#prepare(_plugins, this.#usrPluginStore);\n return this;\n };\n this.remove = async (plugins) => {\n if (this.#status === \"OnCreate\") {\n console.warn(\n \"[Milkdown]: You are trying to remove plugins when the editor is creating, this is not recommended, please check your code.\"\n );\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(this.remove(plugins));\n }, 50);\n });\n }\n await this.#cleanup([plugins].flat(), true);\n return this;\n };\n this.create = async () => {\n if (this.#status === \"OnCreate\") return this;\n if (this.#status === \"Created\") await this.destroy();\n this.#setStatus(\n \"OnCreate\"\n /* OnCreate */\n );\n this.#loadInternal();\n this.#prepare([...this.#usrPluginStore.keys()], this.#usrPluginStore);\n await Promise.all(\n [\n this.#loadPluginInStore(this.#sysPluginStore),\n this.#loadPluginInStore(this.#usrPluginStore)\n ].flat()\n );\n this.#setStatus(\n \"Created\"\n /* Created */\n );\n return this;\n };\n this.destroy = async (clearPlugins = false) => {\n if (this.#status === \"Destroyed\" || this.#status === \"OnDestroy\")\n return this;\n if (this.#status === \"OnCreate\") {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(this.destroy(clearPlugins));\n }, 50);\n });\n }\n if (clearPlugins) this.#configureList = [];\n this.#setStatus(\n \"OnDestroy\"\n /* OnDestroy */\n );\n await this.#cleanup([...this.#usrPluginStore.keys()], clearPlugins);\n await this.#cleanupInternal();\n this.#setStatus(\n \"Destroyed\"\n /* Destroyed */\n );\n return this;\n };\n this.action = (action) => action(this.#ctx);\n this.inspect = () => {\n if (!this.#enableInspector) {\n console.warn(\n \"[Milkdown]: You are trying to collect inspection when inspector is disabled, please enable inspector by `editor.enableInspector()` first.\"\n );\n return [];\n }\n return [...this.#sysPluginStore.values(), ...this.#usrPluginStore.values()].map(({ ctx }) => ctx?.inspector?.read()).filter((x) => Boolean(x));\n };\n }\n /// Create a new editor instance.\n static make() {\n return new Editor();\n }\n #enableInspector;\n #status;\n #configureList;\n #onStatusChange;\n #container;\n #clock;\n #usrPluginStore;\n #sysPluginStore;\n #ctx;\n #loadInternal;\n #prepare;\n #cleanup;\n #cleanupInternal;\n #setStatus;\n #loadPluginInStore;\n /// Get the ctx of the editor.\n get ctx() {\n return this.#ctx;\n }\n /// Get the status of the editor.\n get status() {\n return this.#status;\n }\n}\nexport {\n CommandManager,\n CommandsReady,\n ConfigReady,\n Editor,\n EditorStateReady,\n EditorStatus,\n EditorViewReady,\n InitReady,\n KeymapManager,\n KeymapReady,\n ParserReady,\n PasteRulesReady,\n SchemaReady,\n SerializerReady,\n commands,\n commandsCtx,\n commandsTimerCtx,\n config,\n createCmdKey,\n defaultValueCtx,\n editorCtx,\n editorState,\n editorStateCtx,\n editorStateOptionsCtx,\n editorStateTimerCtx,\n editorView,\n editorViewCtx,\n editorViewOptionsCtx,\n editorViewTimerCtx,\n getDoc,\n init,\n initTimerCtx,\n inputRulesCtx,\n keymap,\n keymapCtx,\n keymapTimerCtx,\n markViewCtx,\n marksCtx,\n nodeViewCtx,\n nodesCtx,\n parser,\n parserCtx,\n parserTimerCtx,\n pasteRule,\n pasteRulesCtx,\n pasteRulesTimerCtx,\n prosePluginsCtx,\n remarkCtx,\n remarkPluginsCtx,\n remarkStringifyOptionsCtx,\n rootAttrsCtx,\n rootCtx,\n rootDOMCtx,\n schema,\n schemaCtx,\n schemaTimerCtx,\n serializer,\n serializerCtx,\n serializerTimerCtx\n};\n//# sourceMappingURL=index.js.map\n","/* @ts-self-types=\"./index.d.ts\" */\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << Math.log2(alphabet.length - 1)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step | 0\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length >= size) return id\n }\n }\n }\n}\nexport let customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size | 0, random)\nexport let nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array((size |= 0)))\n while (size--) {\n id += scopedUrlAlphabet[bytes[size] & 63]\n }\n return id\n}\n","import { createCmdKey, commandsTimerCtx, CommandsReady, commandsCtx, editorStateTimerCtx, SchemaReady, inputRulesCtx, pasteRulesTimerCtx, pasteRulesCtx, schemaCtx, schemaTimerCtx, marksCtx, nodesCtx, prosePluginsCtx, KeymapReady, keymapCtx, editorViewTimerCtx, nodeViewCtx, markViewCtx, InitReady, remarkPluginsCtx, editorViewCtx, serializerCtx, parserCtx, editorStateOptionsCtx } from \"@milkdown/core\";\nimport { createTimer, createSlice } from \"@milkdown/ctx\";\nimport { customAlphabet } from \"nanoid\";\nimport { missingMarkInSchema, missingNodeInSchema } from \"@milkdown/exception\";\nimport { NodeType, DOMSerializer, Slice, DOMParser } from \"@milkdown/prose/model\";\nimport { isTextOnlySlice } from \"@milkdown/prose\";\nimport { EditorState } from \"@milkdown/prose/state\";\nconst nanoid = customAlphabet(\"abcedfghicklmn\", 10);\nfunction addTimer(runner, injectTo, timerName) {\n const timer = createTimer(timerName || nanoid());\n let doneCalled = false;\n const plugin = (ctx) => {\n ctx.record(timer);\n ctx.update(injectTo, (x) => x.concat(timer));\n return async () => {\n const done = () => {\n ctx.done(timer);\n doneCalled = true;\n };\n const cleanup = await runner(ctx, plugin, done);\n if (!doneCalled) ctx.done(timer);\n return () => {\n ctx.update(injectTo, (x) => x.filter((y) => y !== timer));\n ctx.clearTimer(timer);\n if (cleanup) {\n const result = cleanup();\n if (result && \"then\" in result) {\n result.catch(console.error);\n }\n }\n };\n };\n };\n plugin.timer = timer;\n return plugin;\n}\nfunction $command(key, cmd) {\n const cmdKey = createCmdKey(key);\n const plugin = (ctx) => async () => {\n plugin.key = cmdKey;\n await ctx.wait(CommandsReady);\n const command = cmd(ctx);\n ctx.get(commandsCtx).create(cmdKey, command);\n plugin.run = (payload) => ctx.get(commandsCtx).call(key, payload);\n return () => {\n ctx.get(commandsCtx).remove(cmdKey);\n };\n };\n return plugin;\n}\nfunction $commandAsync(key, cmd, timerName) {\n const cmdKey = createCmdKey(key);\n return addTimer(\n async (ctx, plugin) => {\n await ctx.wait(CommandsReady);\n const command = await cmd(ctx);\n ctx.get(commandsCtx).create(cmdKey, command);\n plugin.run = (payload) => ctx.get(commandsCtx).call(key, payload);\n plugin.key = cmdKey;\n return () => {\n ctx.get(commandsCtx).remove(cmdKey);\n };\n },\n commandsTimerCtx,\n timerName\n );\n}\nfunction $inputRule(inputRule) {\n const plugin = (ctx) => async () => {\n await ctx.wait(SchemaReady);\n const ir = inputRule(ctx);\n ctx.update(inputRulesCtx, (irs) => [...irs, ir]);\n plugin.inputRule = ir;\n return () => {\n ctx.update(inputRulesCtx, (irs) => irs.filter((x) => x !== ir));\n };\n };\n return plugin;\n}\nfunction $inputRuleAsync(inputRule, timerName) {\n return addTimer(\n async (ctx, plugin) => {\n await ctx.wait(SchemaReady);\n const ir = await inputRule(ctx);\n ctx.update(inputRulesCtx, (irs) => [...irs, ir]);\n plugin.inputRule = ir;\n return () => {\n ctx.update(inputRulesCtx, (irs) => irs.filter((x) => x !== ir));\n };\n },\n editorStateTimerCtx,\n timerName\n );\n}\nfunction $pasteRule(pasteRule) {\n const plugin = (ctx) => async () => {\n await ctx.wait(SchemaReady);\n const pr = pasteRule(ctx);\n ctx.update(pasteRulesCtx, (prs) => [...prs, pr]);\n plugin.pasteRule = pr;\n return () => {\n ctx.update(pasteRulesCtx, (prs) => prs.filter((x) => x !== pr));\n };\n };\n return plugin;\n}\nfunction $pasteRuleAsync(pasteRule, timerName) {\n return addTimer(\n async (ctx, plugin) => {\n await ctx.wait(SchemaReady);\n const pr = await pasteRule(ctx);\n ctx.update(pasteRulesCtx, (prs) => [...prs, pr]);\n plugin.pasteRule = pr;\n return () => {\n ctx.update(pasteRulesCtx, (prs) => prs.filter((x) => x !== pr));\n };\n },\n pasteRulesTimerCtx,\n timerName\n );\n}\nfunction $mark(id, schema) {\n const plugin = (ctx) => async () => {\n const markSchema = schema(ctx);\n ctx.update(marksCtx, (ns) => [\n ...ns.filter((n) => n[0] !== id),\n [id, markSchema]\n ]);\n plugin.id = id;\n plugin.schema = markSchema;\n return () => {\n ctx.update(marksCtx, (ns) => ns.filter(([x]) => x !== id));\n };\n };\n plugin.type = (ctx) => {\n const markType = ctx.get(schemaCtx).marks[id];\n if (!markType) throw missingMarkInSchema(id);\n return markType;\n };\n return plugin;\n}\nfunction $markAsync(id, schema, timerName) {\n const plugin = addTimer(\n async (ctx, plugin2, done) => {\n const markSchema = await schema(ctx);\n ctx.update(marksCtx, (ns) => [\n ...ns.filter((n) => n[0] !== id),\n [id, markSchema]\n ]);\n plugin2.id = id;\n plugin2.schema = markSchema;\n done();\n return () => {\n ctx.update(marksCtx, (ns) => ns.filter(([x]) => x !== id));\n };\n },\n schemaTimerCtx,\n timerName\n );\n plugin.type = (ctx) => {\n const markType = ctx.get(schemaCtx).marks[id];\n if (!markType) throw missingMarkInSchema(id);\n return markType;\n };\n return plugin;\n}\nfunction $node(id, schema) {\n const plugin = (ctx) => async () => {\n const nodeSchema = schema(ctx);\n ctx.update(nodesCtx, (ns) => [\n ...ns.filter((n) => n[0] !== id),\n [id, nodeSchema]\n ]);\n plugin.id = id;\n plugin.schema = nodeSchema;\n return () => {\n ctx.update(nodesCtx, (ns) => ns.filter(([x]) => x !== id));\n };\n };\n plugin.type = (ctx) => {\n const nodeType = ctx.get(schemaCtx).nodes[id];\n if (!nodeType) throw missingNodeInSchema(id);\n return nodeType;\n };\n return plugin;\n}\nfunction $nodeAsync(id, schema, timerName) {\n const plugin = addTimer(\n async (ctx, plugin2, done) => {\n const nodeSchema = await schema(ctx);\n ctx.update(nodesCtx, (ns) => [\n ...ns.filter((n) => n[0] !== id),\n [id, nodeSchema]\n ]);\n plugin2.id = id;\n plugin2.schema = nodeSchema;\n done();\n return () => {\n ctx.update(nodesCtx, (ns) => ns.filter(([x]) => x !== id));\n };\n },\n schemaTimerCtx,\n timerName\n );\n plugin.type = (ctx) => {\n const nodeType = ctx.get(schemaCtx).nodes[id];\n if (!nodeType) throw missingNodeInSchema(id);\n return nodeType;\n };\n return plugin;\n}\nfunction $prose(prose) {\n let prosePlugin;\n const plugin = (ctx) => async () => {\n await ctx.wait(SchemaReady);\n prosePlugin = prose(ctx);\n ctx.update(prosePluginsCtx, (ps) => [...ps, prosePlugin]);\n return () => {\n ctx.update(prosePluginsCtx, (ps) => ps.filter((x) => x !== prosePlugin));\n };\n };\n plugin.plugin = () => prosePlugin;\n plugin.key = () => prosePlugin.spec.key;\n return plugin;\n}\nfunction $proseAsync(prose, timerName) {\n let prosePlugin;\n const plugin = addTimer(\n async (ctx) => {\n await ctx.wait(SchemaReady);\n prosePlugin = await prose(ctx);\n ctx.update(prosePluginsCtx, (ps) => [...ps, prosePlugin]);\n return () => {\n ctx.update(prosePluginsCtx, (ps) => ps.filter((x) => x !== prosePlugin));\n };\n },\n editorStateTimerCtx,\n timerName\n );\n plugin.plugin = () => prosePlugin;\n plugin.key = () => prosePlugin.spec.key;\n return plugin;\n}\nfunction $shortcut(shortcut) {\n const plugin = (ctx) => async () => {\n await ctx.wait(KeymapReady);\n const km = ctx.get(keymapCtx);\n const keymap = shortcut(ctx);\n const dispose = km.addObjectKeymap(keymap);\n plugin.keymap = keymap;\n return () => {\n dispose();\n };\n };\n return plugin;\n}\nfunction $shortcutAsync(shortcut, timerName) {\n return addTimer(\n async (ctx, plugin) => {\n await ctx.wait(KeymapReady);\n const km = ctx.get(keymapCtx);\n const keymap = await shortcut(ctx);\n const dispose = km.addObjectKeymap(keymap);\n plugin.keymap = keymap;\n return () => {\n dispose();\n };\n },\n editorStateTimerCtx,\n timerName\n );\n}\nfunction $view(type, view) {\n const plugin = (ctx) => async () => {\n await ctx.wait(SchemaReady);\n const v = view(ctx);\n if (type.type(ctx) instanceof NodeType)\n ctx.update(nodeViewCtx, (ps) => [\n ...ps,\n [type.id, v]\n ]);\n else\n ctx.update(markViewCtx, (ps) => [\n ...ps,\n [type.id, v]\n ]);\n plugin.view = v;\n plugin.type = type;\n return () => {\n if (type.type(ctx) instanceof NodeType)\n ctx.update(nodeViewCtx, (ps) => ps.filter((x) => x[0] !== type.id));\n else ctx.update(markViewCtx, (ps) => ps.filter((x) => x[0] !== type.id));\n };\n };\n return plugin;\n}\nfunction $viewAsync(type, view, timerName) {\n return addTimer(\n async (ctx, plugin) => {\n await ctx.wait(SchemaReady);\n const v = await view(ctx);\n if (type.type(ctx) instanceof NodeType)\n ctx.update(nodeViewCtx, (ps) => [\n ...ps,\n [type.id, v]\n ]);\n else\n ctx.update(markViewCtx, (ps) => [\n ...ps,\n [type.id, v]\n ]);\n plugin.view = v;\n plugin.type = type;\n return () => {\n if (type.type(ctx) instanceof NodeType)\n ctx.update(nodeViewCtx, (ps) => ps.filter((x) => x[0] !== type.id));\n else ctx.update(markViewCtx, (ps) => ps.filter((x) => x[0] !== type.id));\n };\n },\n editorViewTimerCtx,\n timerName\n );\n}\nfunction $ctx(value, name) {\n const slice = createSlice(value, name);\n const plugin = (ctx) => {\n ctx.inject(slice);\n return () => {\n return () => {\n ctx.remove(slice);\n };\n };\n };\n plugin.key = slice;\n return plugin;\n}\nfunction $nodeSchema(id, schema) {\n const schemaCtx2 = $ctx(schema, id);\n const nodeSchema = $node(id, (ctx) => {\n const userSchema = ctx.get(schemaCtx2.key);\n return userSchema(ctx);\n });\n const result = [schemaCtx2, nodeSchema];\n result.id = nodeSchema.id;\n result.node = nodeSchema;\n result.type = (ctx) => nodeSchema.type(ctx);\n result.ctx = schemaCtx2;\n result.key = schemaCtx2.key;\n result.extendSchema = (handler) => {\n const nextSchema = handler(schema);\n return $nodeSchema(id, nextSchema);\n };\n return result;\n}\nfunction $markSchema(id, schema) {\n const schemaCtx2 = $ctx(schema, id);\n const markSchema = $mark(id, (ctx) => {\n const userSchema = ctx.get(schemaCtx2.key);\n return userSchema(ctx);\n });\n const result = [schemaCtx2, markSchema];\n result.id = markSchema.id;\n result.mark = markSchema;\n result.type = (ctx) => markSchema.type(ctx);\n result.ctx = schemaCtx2;\n result.key = schemaCtx2.key;\n result.extendSchema = (handler) => {\n const nextSchema = handler(schema);\n return $markSchema(id, nextSchema);\n };\n return result;\n}\nfunction $useKeymap(name, userKeymap) {\n const key = Object.fromEntries(\n Object.entries(userKeymap).map(\n ([key2, { shortcuts: shortcuts2, priority }]) => {\n return [key2, { shortcuts: shortcuts2, priority }];\n }\n )\n );\n const keymapDef = $ctx(key, `${name}Keymap`);\n const shortcuts = $shortcut((ctx) => {\n const keys = ctx.get(keymapDef.key);\n const keymapTuple = Object.entries(userKeymap).flatMap(\n ([key2, { command }]) => {\n const target = keys[key2];\n const targetKeys = [target.shortcuts].flat();\n const priority = target.priority;\n return targetKeys.map(\n (targetKey) => [\n targetKey,\n {\n key: targetKey,\n onRun: command,\n priority\n }\n ]\n );\n }\n );\n return Object.fromEntries(keymapTuple);\n });\n const result = [keymapDef, shortcuts];\n result.ctx = keymapDef;\n result.shortcuts = shortcuts;\n result.key = keymapDef.key;\n result.keymap = shortcuts.keymap;\n return result;\n}\nconst $nodeAttr = (name, value = () => ({})) => $ctx(value, `${name}Attr`);\nconst $markAttr = (name, value = () => ({})) => $ctx(value, `${name}Attr`);\nfunction $remark(id, remark, initialOptions) {\n const options = $ctx(initialOptions ?? {}, id);\n const plugin = (ctx) => async () => {\n await ctx.wait(InitReady);\n const re = remark(ctx);\n const remarkPlugin = {\n plugin: re,\n options: ctx.get(options.key)\n };\n ctx.update(remarkPluginsCtx, (rp) => [...rp, remarkPlugin]);\n return () => {\n ctx.update(remarkPluginsCtx, (rp) => rp.filter((x) => x !== remarkPlugin));\n };\n };\n const result = [options, plugin];\n result.id = id;\n result.plugin = plugin;\n result.options = options;\n return result;\n}\nfunction callCommand(slice, payload) {\n return (ctx) => {\n return ctx.get(commandsCtx).call(slice, payload);\n };\n}\nfunction forceUpdate() {\n return (ctx) => {\n const view = ctx.get(editorViewCtx);\n const { tr } = view.state;\n const nextTr = Object.assign(Object.create(tr), tr).setTime(Date.now());\n return view.dispatch(nextTr);\n };\n}\nfunction getHTML() {\n return (ctx) => {\n const div = document.createElement(\"div\");\n const schema = ctx.get(schemaCtx);\n const view = ctx.get(editorViewCtx);\n const fragment = DOMSerializer.fromSchema(schema).serializeFragment(\n view.state.doc.content\n );\n div.appendChild(fragment);\n return div.innerHTML;\n };\n}\nfunction getMarkdown(range) {\n return (ctx) => {\n const view = ctx.get(editorViewCtx);\n const schema = ctx.get(schemaCtx);\n const serializer = ctx.get(serializerCtx);\n if (!range) {\n return serializer(view.state.doc);\n }\n const state = view.state;\n const slice = state.doc.slice(range.from, range.to, true);\n const doc = schema.topNodeType.createAndFill(null, slice.content);\n if (!doc) {\n console.error(\"No document found\");\n return \"\";\n }\n return serializer(doc);\n };\n}\nfunction insert(markdown, inline = false) {\n return (ctx) => {\n const view = ctx.get(editorViewCtx);\n const parser = ctx.get(parserCtx);\n const doc = parser(markdown);\n if (!doc) return;\n if (!inline) {\n const contentSlice = view.state.selection.content();\n return view.dispatch(\n view.state.tr.replaceSelection(\n new Slice(doc.content, contentSlice.openStart, contentSlice.openEnd)\n ).scrollIntoView()\n );\n }\n const schema = ctx.get(schemaCtx);\n const dom = DOMSerializer.fromSchema(schema).serializeFragment(doc.content);\n const domParser = DOMParser.fromSchema(schema);\n const slice = domParser.parseSlice(dom);\n const node = isTextOnlySlice(slice);\n if (node) {\n view.dispatch(view.state.tr.replaceSelectionWith(node, true));\n return;\n }\n view.dispatch(view.state.tr.replaceSelection(slice));\n };\n}\nfunction outline() {\n return (ctx) => {\n const view = ctx.get(editorViewCtx);\n const data = [];\n const doc = view.state.doc;\n doc.descendants((node) => {\n if (node.type.name === \"heading\" && node.attrs.level)\n data.push({\n text: node.textContent,\n level: node.attrs.level,\n id: node.attrs.id\n });\n });\n return data;\n };\n}\nfunction replaceAll(markdown, flush = false) {\n return (ctx) => {\n const view = ctx.get(editorViewCtx);\n const parser = ctx.get(parserCtx);\n const doc = parser(markdown);\n if (!doc) return;\n if (!flush) {\n const { state: state2 } = view;\n return view.dispatch(\n state2.tr.replace(\n 0,\n state2.doc.content.size,\n new Slice(doc.content, 0, 0)\n )\n );\n }\n const schema = ctx.get(schemaCtx);\n const options = ctx.get(editorStateOptionsCtx);\n const plugins = ctx.get(prosePluginsCtx);\n const state = EditorState.create({\n schema,\n doc,\n plugins,\n ...options\n });\n view.updateState(state);\n };\n}\nfunction setAttr(pos, update) {\n return (ctx) => {\n const view = ctx.get(editorViewCtx);\n const { tr } = view.state;\n const node = tr.doc.nodeAt(pos);\n if (!node) return;\n const nextAttr = update(node.attrs);\n return view.dispatch(tr.setNodeMarkup(pos, void 0, nextAttr));\n };\n}\nfunction markdownToSlice(markdown) {\n return (ctx) => {\n const parser = ctx.get(parserCtx);\n const doc = parser(markdown);\n const schema = ctx.get(schemaCtx);\n const dom = DOMSerializer.fromSchema(schema).serializeFragment(doc.content);\n const domParser = DOMParser.fromSchema(schema);\n const slice = domParser.parseSlice(dom);\n return slice;\n };\n}\nfunction insertPos(markdown, pos, inline = false) {\n return (ctx) => {\n const slice = markdownToSlice(markdown)(ctx);\n const view = ctx.get(editorViewCtx);\n const toPos = view.state.doc.resolve(pos);\n const min = 0;\n const max = view.state.doc.content.size;\n const resolved = inline ? toPos.pos : toPos.after(toPos.depth - 1);\n const to = Math.min(Math.max(resolved, min), max);\n view.dispatch(view.state.tr.replace(resolved, to, slice));\n };\n}\nfunction replaceRange(markdown, range) {\n return (ctx) => {\n const view = ctx.get(editorViewCtx);\n const slice = markdownToSlice(markdown)(ctx);\n view.dispatch(view.state.tr.replace(range.from, range.to, slice));\n };\n}\nconst pipe = (...funcs) => {\n const length = funcs.length;\n let index = length;\n while (index--) {\n if (typeof funcs[index] !== \"function\")\n throw new TypeError(\"Expected a function\");\n }\n return (...args) => {\n let index2 = 0;\n let result = length ? funcs[index2](...args) : args[0];\n while (++index2 < length) result = funcs[index2](result);\n return result;\n };\n};\nexport {\n $command,\n $commandAsync,\n $ctx,\n $inputRule,\n $inputRuleAsync,\n $mark,\n $markAsync,\n $markAttr,\n $markSchema,\n $node,\n $nodeAsync,\n $nodeAttr,\n $nodeSchema,\n $pasteRule,\n $pasteRuleAsync,\n $prose,\n $proseAsync,\n $remark,\n $shortcut,\n $shortcutAsync,\n $useKeymap,\n $view,\n $viewAsync,\n addTimer,\n callCommand,\n forceUpdate,\n getHTML,\n getMarkdown,\n insert,\n insertPos,\n markdownToSlice,\n nanoid,\n outline,\n pipe,\n replaceAll,\n replaceRange,\n setAttr\n};\n//# sourceMappingURL=index.js.map\n","import { schemaCtx, editorViewOptionsCtx, serializerCtx, parserCtx } from \"@milkdown/core\";\nimport { getNodeFromSchema, isTextOnlySlice } from \"@milkdown/prose\";\nimport { DOMParser, DOMSerializer } from \"@milkdown/prose/model\";\nimport { PluginKey, Plugin, TextSelection } from \"@milkdown/prose/state\";\nimport { $prose } from \"@milkdown/utils\";\nfunction isPureText(content) {\n if (!content) return false;\n if (Array.isArray(content)) {\n if (content.length > 1) return false;\n return isPureText(content[0]);\n }\n const child = content.content;\n if (child) return isPureText(child);\n return content.type === \"text\";\n}\nfunction withMeta(plugin, meta) {\n Object.assign(plugin, {\n meta: {\n package: \"@milkdown/plugin-clipboard\",\n ...meta\n }\n });\n return plugin;\n}\nconst clipboard = $prose((ctx) => {\n const schema = ctx.get(schemaCtx);\n ctx.update(editorViewOptionsCtx, (prev) => ({\n ...prev,\n editable: prev.editable ?? (() => true)\n }));\n const key = new PluginKey(\"MILKDOWN_CLIPBOARD\");\n const plugin = new Plugin({\n key,\n props: {\n handlePaste: (view, event) => {\n const parser = ctx.get(parserCtx);\n const editable = view.props.editable?.(view.state);\n const { clipboardData } = event;\n if (!editable || !clipboardData) return false;\n const currentNode = view.state.selection.$from.node();\n if (currentNode.type.spec.code) return false;\n const text = clipboardData.getData(\"text/plain\");\n const vscodeData = clipboardData.getData(\"vscode-editor-data\");\n if (vscodeData) {\n const data = JSON.parse(vscodeData);\n const language = data?.mode;\n if (text && language) {\n const { tr } = view.state;\n const codeBlock = getNodeFromSchema(\"code_block\", schema);\n tr.replaceSelectionWith(codeBlock.create({ language })).setSelection(\n TextSelection.near(\n tr.doc.resolve(Math.max(0, tr.selection.from - 2))\n )\n ).insertText(text.replace(/\\r\\n?/g, \"\\n\"));\n view.dispatch(tr);\n return true;\n }\n }\n const html = clipboardData.getData(\"text/html\");\n if (html.length === 0 && text.length === 0) return false;\n const domParser = DOMParser.fromSchema(schema);\n let dom;\n if (html.length === 0) {\n const slice2 = parser(text);\n if (!slice2 || typeof slice2 === \"string\") return false;\n dom = DOMSerializer.fromSchema(schema).serializeFragment(\n slice2.content\n );\n } else {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n dom = template.content.cloneNode(true);\n template.remove();\n }\n const slice = domParser.parseSlice(dom);\n const node = isTextOnlySlice(slice);\n if (node) {\n view.dispatch(view.state.tr.replaceSelectionWith(node, true));\n return true;\n }\n try {\n view.dispatch(view.state.tr.replaceSelection(slice));\n return true;\n } catch {\n return false;\n }\n },\n clipboardTextSerializer: (slice) => {\n const serializer = ctx.get(serializerCtx);\n const isText = isPureText(slice.content.toJSON());\n if (isText)\n return slice.content.textBetween(\n 0,\n slice.content.size,\n \"\\n\\n\"\n );\n const doc = schema.topNodeType.createAndFill(void 0, slice.content);\n if (!doc) return \"\";\n const value = serializer(doc);\n return value;\n }\n }\n });\n return plugin;\n});\nwithMeta(clipboard, { displayName: \"Prose<clipboard>\" });\nexport {\n clipboard\n};\n//# sourceMappingURL=index.js.map\n","var GOOD_LEAF_SIZE = 200;\n\n// :: class<T> A rope sequence is a persistent sequence data structure\n// that supports appending, prepending, and slicing without doing a\n// full copy. It is represented as a mostly-balanced tree.\nvar RopeSequence = function RopeSequence () {};\n\nRopeSequence.prototype.append = function append (other) {\n if (!other.length) { return this }\n other = RopeSequence.from(other);\n\n return (!this.length && other) ||\n (other.length < GOOD_LEAF_SIZE && this.leafAppend(other)) ||\n (this.length < GOOD_LEAF_SIZE && other.leafPrepend(this)) ||\n this.appendInner(other)\n};\n\n// :: (union<[T], RopeSequence<T>>) → RopeSequence<T>\n// Prepend an array or other rope to this one, returning a new rope.\nRopeSequence.prototype.prepend = function prepend (other) {\n if (!other.length) { return this }\n return RopeSequence.from(other).append(this)\n};\n\nRopeSequence.prototype.appendInner = function appendInner (other) {\n return new Append(this, other)\n};\n\n// :: (?number, ?number) → RopeSequence<T>\n// Create a rope repesenting a sub-sequence of this rope.\nRopeSequence.prototype.slice = function slice (from, to) {\n if ( from === void 0 ) from = 0;\n if ( to === void 0 ) to = this.length;\n\n if (from >= to) { return RopeSequence.empty }\n return this.sliceInner(Math.max(0, from), Math.min(this.length, to))\n};\n\n// :: (number) → T\n// Retrieve the element at the given position from this rope.\nRopeSequence.prototype.get = function get (i) {\n if (i < 0 || i >= this.length) { return undefined }\n return this.getInner(i)\n};\n\n// :: ((element: T, index: number) → ?bool, ?number, ?number)\n// Call the given function for each element between the given\n// indices. This tends to be more efficient than looping over the\n// indices and calling `get`, because it doesn't have to descend the\n// tree for every element.\nRopeSequence.prototype.forEach = function forEach (f, from, to) {\n if ( from === void 0 ) from = 0;\n if ( to === void 0 ) to = this.length;\n\n if (from <= to)\n { this.forEachInner(f, from, to, 0); }\n else\n { this.forEachInvertedInner(f, from, to, 0); }\n};\n\n// :: ((element: T, index: number) → U, ?number, ?number) → [U]\n// Map the given functions over the elements of the rope, producing\n// a flat array.\nRopeSequence.prototype.map = function map (f, from, to) {\n if ( from === void 0 ) from = 0;\n if ( to === void 0 ) to = this.length;\n\n var result = [];\n this.forEach(function (elt, i) { return result.push(f(elt, i)); }, from, to);\n return result\n};\n\n// :: (?union<[T], RopeSequence<T>>) → RopeSequence<T>\n// Create a rope representing the given array, or return the rope\n// itself if a rope was given.\nRopeSequence.from = function from (values) {\n if (values instanceof RopeSequence) { return values }\n return values && values.length ? new Leaf(values) : RopeSequence.empty\n};\n\nvar Leaf = /*@__PURE__*/(function (RopeSequence) {\n function Leaf(values) {\n RopeSequence.call(this);\n this.values = values;\n }\n\n if ( RopeSequence ) Leaf.__proto__ = RopeSequence;\n Leaf.prototype = Object.create( RopeSequence && RopeSequence.prototype );\n Leaf.prototype.constructor = Leaf;\n\n var prototypeAccessors = { length: { configurable: true },depth: { configurable: true } };\n\n Leaf.prototype.flatten = function flatten () {\n return this.values\n };\n\n Leaf.prototype.sliceInner = function sliceInner (from, to) {\n if (from == 0 && to == this.length) { return this }\n return new Leaf(this.values.slice(from, to))\n };\n\n Leaf.prototype.getInner = function getInner (i) {\n return this.values[i]\n };\n\n Leaf.prototype.forEachInner = function forEachInner (f, from, to, start) {\n for (var i = from; i < to; i++)\n { if (f(this.values[i], start + i) === false) { return false } }\n };\n\n Leaf.prototype.forEachInvertedInner = function forEachInvertedInner (f, from, to, start) {\n for (var i = from - 1; i >= to; i--)\n { if (f(this.values[i], start + i) === false) { return false } }\n };\n\n Leaf.prototype.leafAppend = function leafAppend (other) {\n if (this.length + other.length <= GOOD_LEAF_SIZE)\n { return new Leaf(this.values.concat(other.flatten())) }\n };\n\n Leaf.prototype.leafPrepend = function leafPrepend (other) {\n if (this.length + other.length <= GOOD_LEAF_SIZE)\n { return new Leaf(other.flatten().concat(this.values)) }\n };\n\n prototypeAccessors.length.get = function () { return this.values.length };\n\n prototypeAccessors.depth.get = function () { return 0 };\n\n Object.defineProperties( Leaf.prototype, prototypeAccessors );\n\n return Leaf;\n}(RopeSequence));\n\n// :: RopeSequence\n// The empty rope sequence.\nRopeSequence.empty = new Leaf([]);\n\nvar Append = /*@__PURE__*/(function (RopeSequence) {\n function Append(left, right) {\n RopeSequence.call(this);\n this.left = left;\n this.right = right;\n this.length = left.length + right.length;\n this.depth = Math.max(left.depth, right.depth) + 1;\n }\n\n if ( RopeSequence ) Append.__proto__ = RopeSequence;\n Append.prototype = Object.create( RopeSequence && RopeSequence.prototype );\n Append.prototype.constructor = Append;\n\n Append.prototype.flatten = function flatten () {\n return this.left.flatten().concat(this.right.flatten())\n };\n\n Append.prototype.getInner = function getInner (i) {\n return i < this.left.length ? this.left.get(i) : this.right.get(i - this.left.length)\n };\n\n Append.prototype.forEachInner = function forEachInner (f, from, to, start) {\n var leftLen = this.left.length;\n if (from < leftLen &&\n this.left.forEachInner(f, from, Math.min(to, leftLen), start) === false)\n { return false }\n if (to > leftLen &&\n this.right.forEachInner(f, Math.max(from - leftLen, 0), Math.min(this.length, to) - leftLen, start + leftLen) === false)\n { return false }\n };\n\n Append.prototype.forEachInvertedInner = function forEachInvertedInner (f, from, to, start) {\n var leftLen = this.left.length;\n if (from > leftLen &&\n this.right.forEachInvertedInner(f, from - leftLen, Math.max(to, leftLen) - leftLen, start + leftLen) === false)\n { return false }\n if (to < leftLen &&\n this.left.forEachInvertedInner(f, Math.min(from, leftLen), to, start) === false)\n { return false }\n };\n\n Append.prototype.sliceInner = function sliceInner (from, to) {\n if (from == 0 && to == this.length) { return this }\n var leftLen = this.left.length;\n if (to <= leftLen) { return this.left.slice(from, to) }\n if (from >= leftLen) { return this.right.slice(from - leftLen, to - leftLen) }\n return this.left.slice(from, leftLen).append(this.right.slice(0, to - leftLen))\n };\n\n Append.prototype.leafAppend = function leafAppend (other) {\n var inner = this.right.leafAppend(other);\n if (inner) { return new Append(this.left, inner) }\n };\n\n Append.prototype.leafPrepend = function leafPrepend (other) {\n var inner = this.left.leafPrepend(other);\n if (inner) { return new Append(inner, this.right) }\n };\n\n Append.prototype.appendInner = function appendInner (other) {\n if (this.left.depth >= Math.max(this.right.depth, other.depth) + 1)\n { return new Append(this.left, new Append(this.right, other)) }\n return new Append(this, other)\n };\n\n return Append;\n}(RopeSequence));\n\nexport default RopeSequence;\n","import RopeSequence from 'rope-sequence';\nimport { Mapping } from 'prosemirror-transform';\nimport { PluginKey, Plugin } from 'prosemirror-state';\n\n// ProseMirror's history isn't simply a way to roll back to a previous\n// state, because ProseMirror supports applying changes without adding\n// them to the history (for example during collaboration).\n//\n// To this end, each 'Branch' (one for the undo history and one for\n// the redo history) keeps an array of 'Items', which can optionally\n// hold a step (an actual undoable change), and always hold a position\n// map (which is needed to move changes below them to apply to the\n// current document).\n//\n// An item that has both a step and a selection bookmark is the start\n// of an 'event' — a group of changes that will be undone or redone at\n// once. (It stores only the bookmark, since that way we don't have to\n// provide a document until the selection is actually applied, which\n// is useful when compressing.)\n// Used to schedule history compression\nconst max_empty_items = 500;\nclass Branch {\n constructor(items, eventCount) {\n this.items = items;\n this.eventCount = eventCount;\n }\n // Pop the latest event off the branch's history and apply it\n // to a document transform.\n popEvent(state, preserveItems) {\n if (this.eventCount == 0)\n return null;\n let end = this.items.length;\n for (;; end--) {\n let next = this.items.get(end - 1);\n if (next.selection) {\n --end;\n break;\n }\n }\n let remap, mapFrom;\n if (preserveItems) {\n remap = this.remapping(end, this.items.length);\n mapFrom = remap.maps.length;\n }\n let transform = state.tr;\n let selection, remaining;\n let addAfter = [], addBefore = [];\n this.items.forEach((item, i) => {\n if (!item.step) {\n if (!remap) {\n remap = this.remapping(end, i + 1);\n mapFrom = remap.maps.length;\n }\n mapFrom--;\n addBefore.push(item);\n return;\n }\n if (remap) {\n addBefore.push(new Item(item.map));\n let step = item.step.map(remap.slice(mapFrom)), map;\n if (step && transform.maybeStep(step).doc) {\n map = transform.mapping.maps[transform.mapping.maps.length - 1];\n addAfter.push(new Item(map, undefined, undefined, addAfter.length + addBefore.length));\n }\n mapFrom--;\n if (map)\n remap.appendMap(map, mapFrom);\n }\n else {\n transform.maybeStep(item.step);\n }\n if (item.selection) {\n selection = remap ? item.selection.map(remap.slice(mapFrom)) : item.selection;\n remaining = new Branch(this.items.slice(0, end).append(addBefore.reverse().concat(addAfter)), this.eventCount - 1);\n return false;\n }\n }, this.items.length, 0);\n return { remaining: remaining, transform, selection: selection };\n }\n // Create a new branch with the given transform added.\n addTransform(transform, selection, histOptions, preserveItems) {\n let newItems = [], eventCount = this.eventCount;\n let oldItems = this.items, lastItem = !preserveItems && oldItems.length ? oldItems.get(oldItems.length - 1) : null;\n for (let i = 0; i < transform.steps.length; i++) {\n let step = transform.steps[i].invert(transform.docs[i]);\n let item = new Item(transform.mapping.maps[i], step, selection), merged;\n if (merged = lastItem && lastItem.merge(item)) {\n item = merged;\n if (i)\n newItems.pop();\n else\n oldItems = oldItems.slice(0, oldItems.length - 1);\n }\n newItems.push(item);\n if (selection) {\n eventCount++;\n selection = undefined;\n }\n if (!preserveItems)\n lastItem = item;\n }\n let overflow = eventCount - histOptions.depth;\n if (overflow > DEPTH_OVERFLOW) {\n oldItems = cutOffEvents(oldItems, overflow);\n eventCount -= overflow;\n }\n return new Branch(oldItems.append(newItems), eventCount);\n }\n remapping(from, to) {\n let maps = new Mapping;\n this.items.forEach((item, i) => {\n let mirrorPos = item.mirrorOffset != null && i - item.mirrorOffset >= from\n ? maps.maps.length - item.mirrorOffset : undefined;\n maps.appendMap(item.map, mirrorPos);\n }, from, to);\n return maps;\n }\n addMaps(array) {\n if (this.eventCount == 0)\n return this;\n return new Branch(this.items.append(array.map(map => new Item(map))), this.eventCount);\n }\n // When the collab module receives remote changes, the history has\n // to know about those, so that it can adjust the steps that were\n // rebased on top of the remote changes, and include the position\n // maps for the remote changes in its array of items.\n rebased(rebasedTransform, rebasedCount) {\n if (!this.eventCount)\n return this;\n let rebasedItems = [], start = Math.max(0, this.items.length - rebasedCount);\n let mapping = rebasedTransform.mapping;\n let newUntil = rebasedTransform.steps.length;\n let eventCount = this.eventCount;\n this.items.forEach(item => { if (item.selection)\n eventCount--; }, start);\n let iRebased = rebasedCount;\n this.items.forEach(item => {\n let pos = mapping.getMirror(--iRebased);\n if (pos == null)\n return;\n newUntil = Math.min(newUntil, pos);\n let map = mapping.maps[pos];\n if (item.step) {\n let step = rebasedTransform.steps[pos].invert(rebasedTransform.docs[pos]);\n let selection = item.selection && item.selection.map(mapping.slice(iRebased + 1, pos));\n if (selection)\n eventCount++;\n rebasedItems.push(new Item(map, step, selection));\n }\n else {\n rebasedItems.push(new Item(map));\n }\n }, start);\n let newMaps = [];\n for (let i = rebasedCount; i < newUntil; i++)\n newMaps.push(new Item(mapping.maps[i]));\n let items = this.items.slice(0, start).append(newMaps).append(rebasedItems);\n let branch = new Branch(items, eventCount);\n if (branch.emptyItemCount() > max_empty_items)\n branch = branch.compress(this.items.length - rebasedItems.length);\n return branch;\n }\n emptyItemCount() {\n let count = 0;\n this.items.forEach(item => { if (!item.step)\n count++; });\n return count;\n }\n // Compressing a branch means rewriting it to push the air (map-only\n // items) out. During collaboration, these naturally accumulate\n // because each remote change adds one. The `upto` argument is used\n // to ensure that only the items below a given level are compressed,\n // because `rebased` relies on a clean, untouched set of items in\n // order to associate old items with rebased steps.\n compress(upto = this.items.length) {\n let remap = this.remapping(0, upto), mapFrom = remap.maps.length;\n let items = [], events = 0;\n this.items.forEach((item, i) => {\n if (i >= upto) {\n items.push(item);\n if (item.selection)\n events++;\n }\n else if (item.step) {\n let step = item.step.map(remap.slice(mapFrom)), map = step && step.getMap();\n mapFrom--;\n if (map)\n remap.appendMap(map, mapFrom);\n if (step) {\n let selection = item.selection && item.selection.map(remap.slice(mapFrom));\n if (selection)\n events++;\n let newItem = new Item(map.invert(), step, selection), merged, last = items.length - 1;\n if (merged = items.length && items[last].merge(newItem))\n items[last] = merged;\n else\n items.push(newItem);\n }\n }\n else if (item.map) {\n mapFrom--;\n }\n }, this.items.length, 0);\n return new Branch(RopeSequence.from(items.reverse()), events);\n }\n}\nBranch.empty = new Branch(RopeSequence.empty, 0);\nfunction cutOffEvents(items, n) {\n let cutPoint;\n items.forEach((item, i) => {\n if (item.selection && (n-- == 0)) {\n cutPoint = i;\n return false;\n }\n });\n return items.slice(cutPoint);\n}\nclass Item {\n constructor(\n // The (forward) step map for this item.\n map, \n // The inverted step\n step, \n // If this is non-null, this item is the start of a group, and\n // this selection is the starting selection for the group (the one\n // that was active before the first step was applied)\n selection, \n // If this item is the inverse of a previous mapping on the stack,\n // this points at the inverse's offset\n mirrorOffset) {\n this.map = map;\n this.step = step;\n this.selection = selection;\n this.mirrorOffset = mirrorOffset;\n }\n merge(other) {\n if (this.step && other.step && !other.selection) {\n let step = other.step.merge(this.step);\n if (step)\n return new Item(step.getMap().invert(), step, this.selection);\n }\n }\n}\n// The value of the state field that tracks undo/redo history for that\n// state. Will be stored in the plugin state when the history plugin\n// is active.\nclass HistoryState {\n constructor(done, undone, prevRanges, prevTime, prevComposition) {\n this.done = done;\n this.undone = undone;\n this.prevRanges = prevRanges;\n this.prevTime = prevTime;\n this.prevComposition = prevComposition;\n }\n}\nconst DEPTH_OVERFLOW = 20;\n// Record a transformation in undo history.\nfunction applyTransaction(history, state, tr, options) {\n let historyTr = tr.getMeta(historyKey), rebased;\n if (historyTr)\n return historyTr.historyState;\n if (tr.getMeta(closeHistoryKey))\n history = new HistoryState(history.done, history.undone, null, 0, -1);\n let appended = tr.getMeta(\"appendedTransaction\");\n if (tr.steps.length == 0) {\n return history;\n }\n else if (appended && appended.getMeta(historyKey)) {\n if (appended.getMeta(historyKey).redo)\n return new HistoryState(history.done.addTransform(tr, undefined, options, mustPreserveItems(state)), history.undone, rangesFor(tr.mapping.maps), history.prevTime, history.prevComposition);\n else\n return new HistoryState(history.done, history.undone.addTransform(tr, undefined, options, mustPreserveItems(state)), null, history.prevTime, history.prevComposition);\n }\n else if (tr.getMeta(\"addToHistory\") !== false && !(appended && appended.getMeta(\"addToHistory\") === false)) {\n // Group transforms that occur in quick succession into one event.\n let composition = tr.getMeta(\"composition\");\n let newGroup = history.prevTime == 0 ||\n (!appended && history.prevComposition != composition &&\n (history.prevTime < (tr.time || 0) - options.newGroupDelay || !isAdjacentTo(tr, history.prevRanges)));\n let prevRanges = appended ? mapRanges(history.prevRanges, tr.mapping) : rangesFor(tr.mapping.maps);\n return new HistoryState(history.done.addTransform(tr, newGroup ? state.selection.getBookmark() : undefined, options, mustPreserveItems(state)), Branch.empty, prevRanges, tr.time, composition == null ? history.prevComposition : composition);\n }\n else if (rebased = tr.getMeta(\"rebased\")) {\n // Used by the collab module to tell the history that some of its\n // content has been rebased.\n return new HistoryState(history.done.rebased(tr, rebased), history.undone.rebased(tr, rebased), mapRanges(history.prevRanges, tr.mapping), history.prevTime, history.prevComposition);\n }\n else {\n return new HistoryState(history.done.addMaps(tr.mapping.maps), history.undone.addMaps(tr.mapping.maps), mapRanges(history.prevRanges, tr.mapping), history.prevTime, history.prevComposition);\n }\n}\nfunction isAdjacentTo(transform, prevRanges) {\n if (!prevRanges)\n return false;\n if (!transform.docChanged)\n return true;\n let adjacent = false;\n transform.mapping.maps[0].forEach((start, end) => {\n for (let i = 0; i < prevRanges.length; i += 2)\n if (start <= prevRanges[i + 1] && end >= prevRanges[i])\n adjacent = true;\n });\n return adjacent;\n}\nfunction rangesFor(maps) {\n let result = [];\n for (let i = maps.length - 1; i >= 0 && result.length == 0; i--)\n maps[i].forEach((_from, _to, from, to) => result.push(from, to));\n return result;\n}\nfunction mapRanges(ranges, mapping) {\n if (!ranges)\n return null;\n let result = [];\n for (let i = 0; i < ranges.length; i += 2) {\n let from = mapping.map(ranges[i], 1), to = mapping.map(ranges[i + 1], -1);\n if (from <= to)\n result.push(from, to);\n }\n return result;\n}\n// Apply the latest event from one branch to the document and shift the event\n// onto the other branch.\nfunction histTransaction(history, state, redo) {\n let preserveItems = mustPreserveItems(state);\n let histOptions = historyKey.get(state).spec.config;\n let pop = (redo ? history.undone : history.done).popEvent(state, preserveItems);\n if (!pop)\n return null;\n let selection = pop.selection.resolve(pop.transform.doc);\n let added = (redo ? history.done : history.undone).addTransform(pop.transform, state.selection.getBookmark(), histOptions, preserveItems);\n let newHist = new HistoryState(redo ? added : pop.remaining, redo ? pop.remaining : added, null, 0, -1);\n return pop.transform.setSelection(selection).setMeta(historyKey, { redo, historyState: newHist });\n}\nlet cachedPreserveItems = false, cachedPreserveItemsPlugins = null;\n// Check whether any plugin in the given state has a\n// `historyPreserveItems` property in its spec, in which case we must\n// preserve steps exactly as they came in, so that they can be\n// rebased.\nfunction mustPreserveItems(state) {\n let plugins = state.plugins;\n if (cachedPreserveItemsPlugins != plugins) {\n cachedPreserveItems = false;\n cachedPreserveItemsPlugins = plugins;\n for (let i = 0; i < plugins.length; i++)\n if (plugins[i].spec.historyPreserveItems) {\n cachedPreserveItems = true;\n break;\n }\n }\n return cachedPreserveItems;\n}\n/**\nSet a flag on the given transaction that will prevent further steps\nfrom being appended to an existing history event (so that they\nrequire a separate undo command to undo).\n*/\nfunction closeHistory(tr) {\n return tr.setMeta(closeHistoryKey, true);\n}\nconst historyKey = new PluginKey(\"history\");\nconst closeHistoryKey = new PluginKey(\"closeHistory\");\n/**\nReturns a plugin that enables the undo history for an editor. The\nplugin will track undo and redo stacks, which can be used with the\n[`undo`](https://prosemirror.net/docs/ref/#history.undo) and [`redo`](https://prosemirror.net/docs/ref/#history.redo) commands.\n\nYou can set an `\"addToHistory\"` [metadata\nproperty](https://prosemirror.net/docs/ref/#state.Transaction.setMeta) of `false` on a transaction\nto prevent it from being rolled back by undo.\n*/\nfunction history(config = {}) {\n config = { depth: config.depth || 100,\n newGroupDelay: config.newGroupDelay || 500 };\n return new Plugin({\n key: historyKey,\n state: {\n init() {\n return new HistoryState(Branch.empty, Branch.empty, null, 0, -1);\n },\n apply(tr, hist, state) {\n return applyTransaction(hist, state, tr, config);\n }\n },\n config,\n props: {\n handleDOMEvents: {\n beforeinput(view, e) {\n let inputType = e.inputType;\n let command = inputType == \"historyUndo\" ? undo : inputType == \"historyRedo\" ? redo : null;\n if (!command || !view.editable)\n return false;\n e.preventDefault();\n return command(view.state, view.dispatch);\n }\n }\n }\n });\n}\nfunction buildCommand(redo, scroll) {\n return (state, dispatch) => {\n let hist = historyKey.getState(state);\n if (!hist || (redo ? hist.undone : hist.done).eventCount == 0)\n return false;\n if (dispatch) {\n let tr = histTransaction(hist, state, redo);\n if (tr)\n dispatch(scroll ? tr.scrollIntoView() : tr);\n }\n return true;\n };\n}\n/**\nA command function that undoes the last change, if any.\n*/\nconst undo = buildCommand(false, true);\n/**\nA command function that redoes the last undone change, if any.\n*/\nconst redo = buildCommand(true, true);\n/**\nA command function that undoes the last change. Don't scroll the\nselection into view.\n*/\nconst undoNoScroll = buildCommand(false, false);\n/**\nA command function that redoes the last undone change. Don't\nscroll the selection into view.\n*/\nconst redoNoScroll = buildCommand(true, false);\n/**\nThe amount of undoable events available in a given state.\n*/\nfunction undoDepth(state) {\n let hist = historyKey.getState(state);\n return hist ? hist.done.eventCount : 0;\n}\n/**\nThe amount of redoable events available in a given editor state.\n*/\nfunction redoDepth(state) {\n let hist = historyKey.getState(state);\n return hist ? hist.undone.eventCount : 0;\n}\n/**\nReturns true if the given transaction was generated by the history\nplugin.\n*/\nfunction isHistoryTransaction(tr) {\n return tr.getMeta(historyKey) != null;\n}\n\nexport { closeHistory, history, isHistoryTransaction, redo, redoDepth, redoNoScroll, undo, undoDepth, undoNoScroll };\n","import { commandsCtx } from \"@milkdown/core\";\nimport { undo, redo, history as history$1 } from \"@milkdown/prose/history\";\nimport { $command, $ctx, $prose, $useKeymap } from \"@milkdown/utils\";\nfunction withMeta(plugin, meta) {\n Object.assign(plugin, {\n meta: {\n package: \"@milkdown/plugin-history\",\n ...meta\n }\n });\n return plugin;\n}\nconst undoCommand = $command(\"Undo\", () => () => undo);\nwithMeta(undoCommand, {\n displayName: \"Command<undo>\"\n});\nconst redoCommand = $command(\"Redo\", () => () => redo);\nwithMeta(redoCommand, {\n displayName: \"Command<redo>\"\n});\nconst historyProviderConfig = $ctx({}, \"historyProviderConfig\");\nwithMeta(historyProviderConfig, {\n displayName: \"Ctx<historyProviderConfig>\"\n});\nconst historyProviderPlugin = $prose(\n (ctx) => history$1(ctx.get(historyProviderConfig.key))\n);\nwithMeta(historyProviderPlugin, {\n displayName: \"Ctx<historyProviderPlugin>\"\n});\nconst historyKeymap = $useKeymap(\"historyKeymap\", {\n Undo: {\n shortcuts: \"Mod-z\",\n command: (ctx) => {\n const commands = ctx.get(commandsCtx);\n return () => commands.call(undoCommand.key);\n }\n },\n Redo: {\n shortcuts: [\"Mod-y\", \"Shift-Mod-z\"],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx);\n return () => commands.call(redoCommand.key);\n }\n }\n});\nwithMeta(historyKeymap.ctx, {\n displayName: \"KeymapCtx<history>\"\n});\nwithMeta(historyKeymap.shortcuts, {\n displayName: \"Keymap<history>\"\n});\nconst history = [\n historyProviderConfig,\n historyProviderPlugin,\n historyKeymap,\n undoCommand,\n redoCommand\n].flat();\nexport {\n history,\n historyKeymap,\n historyProviderConfig,\n historyProviderPlugin,\n redoCommand,\n undoCommand\n};\n//# sourceMappingURL=index.js.map\n","import { TextSelection, AllSelection } from \"@milkdown/prose/state\";\nimport { $ctx, $shortcut } from \"@milkdown/utils\";\nfunction updateIndent(tr, options) {\n const { doc, selection } = tr;\n if (!doc || !selection) return tr;\n if (!(selection instanceof TextSelection || selection instanceof AllSelection))\n return tr;\n const { to } = selection;\n const text = options.type === \"space\" ? Array(options.size).fill(\" \").join(\"\") : \"\t\";\n return tr.insertText(text, to);\n}\nconst indentConfig = $ctx(\n { type: \"space\", size: 2 },\n \"indentConfig\"\n);\nindentConfig.meta = {\n package: \"@milkdown/plugin-indent\",\n displayName: \"Ctx<indentConfig>\"\n};\nconst indentPlugin = $shortcut((ctx) => ({\n Tab: (state, dispatch) => {\n const config = ctx.get(indentConfig.key);\n const { tr } = state;\n const _tr = updateIndent(tr, config);\n if (_tr.docChanged) {\n dispatch?.(_tr);\n return true;\n }\n return false;\n }\n}));\nindentPlugin.meta = {\n package: \"@milkdown/plugin-indent\",\n displayName: \"Shortcut<indent>\"\n};\nconst indent = [indentConfig, indentPlugin];\nexport {\n indent,\n indentConfig,\n indentPlugin\n};\n//# sourceMappingURL=index.js.map\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n","import { InitReady, SerializerReady, serializerCtx, prosePluginsCtx, EditorViewReady } from \"@milkdown/core\";\nimport { createSlice } from \"@milkdown/ctx\";\nimport { PluginKey, Plugin } from \"@milkdown/prose/state\";\nimport { debounce } from \"lodash-es\";\nclass ListenerManager {\n constructor() {\n this.beforeMountedListeners = [];\n this.mountedListeners = [];\n this.updatedListeners = [];\n this.selectionUpdatedListeners = [];\n this.markdownUpdatedListeners = [];\n this.blurListeners = [];\n this.focusListeners = [];\n this.destroyListeners = [];\n this.beforeMount = (fn) => {\n this.beforeMountedListeners.push(fn);\n return this;\n };\n this.mounted = (fn) => {\n this.mountedListeners.push(fn);\n return this;\n };\n this.updated = (fn) => {\n this.updatedListeners.push(fn);\n return this;\n };\n }\n /// A getter to get all [subscribers](#interface-subscribers). You should not use this method directly.\n get listeners() {\n return {\n beforeMount: this.beforeMountedListeners,\n mounted: this.mountedListeners,\n updated: this.updatedListeners,\n markdownUpdated: this.markdownUpdatedListeners,\n blur: this.blurListeners,\n focus: this.focusListeners,\n destroy: this.destroyListeners,\n selectionUpdated: this.selectionUpdatedListeners\n };\n }\n /// Subscribe to the markdownUpdated event.\n /// This event will be triggered after the editor state is updated and **the document is changed**.\n /// The second parameter is the current markdown and the third parameter is the previous markdown.\n markdownUpdated(fn) {\n this.markdownUpdatedListeners.push(fn);\n return this;\n }\n /// Subscribe to the blur event.\n /// This event will be triggered when the editor is blurred.\n blur(fn) {\n this.blurListeners.push(fn);\n return this;\n }\n /// Subscribe to the focus event.\n /// This event will be triggered when the editor is focused.\n focus(fn) {\n this.focusListeners.push(fn);\n return this;\n }\n /// Subscribe to the destroy event.\n /// This event will be triggered before the editor is destroyed.\n destroy(fn) {\n this.destroyListeners.push(fn);\n return this;\n }\n /// Subscribe to the selectionUpdated event.\n /// This event will be triggered when the editor selection is updated.\n selectionUpdated(fn) {\n this.selectionUpdatedListeners.push(fn);\n return this;\n }\n}\nconst listenerCtx = createSlice(\n new ListenerManager(),\n \"listener\"\n);\nconst key = new PluginKey(\"MILKDOWN_LISTENER\");\nconst listener = (ctx) => {\n ctx.inject(listenerCtx, new ListenerManager());\n return async () => {\n await ctx.wait(InitReady);\n const listener2 = ctx.get(listenerCtx);\n const { listeners } = listener2;\n listeners.beforeMount.forEach((fn) => fn(ctx));\n await ctx.wait(SerializerReady);\n const serializer = ctx.get(serializerCtx);\n let prevDoc = null;\n let prevMarkdown = null;\n let prevSelection = null;\n const plugin = new Plugin({\n key,\n view: () => {\n return {\n destroy: () => {\n listeners.destroy.forEach((fn) => fn(ctx));\n }\n };\n },\n props: {\n handleDOMEvents: {\n focus: () => {\n listeners.focus.forEach((fn) => fn(ctx));\n return false;\n },\n blur: () => {\n listeners.blur.forEach((fn) => fn(ctx));\n return false;\n }\n }\n },\n state: {\n init: (_, instance) => {\n prevDoc = instance.doc;\n prevMarkdown = serializer(instance.doc);\n },\n apply: (tr) => {\n const currentSelection = tr.selection;\n if (!prevSelection && currentSelection || prevSelection && !currentSelection.eq(prevSelection)) {\n listeners.selectionUpdated.forEach((fn) => {\n fn(ctx, currentSelection, prevSelection);\n });\n prevSelection = currentSelection;\n }\n if (!(tr.docChanged || tr.storedMarksSet) || tr.getMeta(\"addToHistory\") === false)\n return;\n const handler = debounce(() => {\n const { doc } = tr;\n if (listeners.updated.length > 0 && prevDoc && !prevDoc.eq(doc)) {\n listeners.updated.forEach((fn) => {\n fn(ctx, doc, prevDoc);\n });\n }\n if (listeners.markdownUpdated.length > 0 && prevDoc && !prevDoc.eq(doc)) {\n const markdown = serializer(doc);\n listeners.markdownUpdated.forEach((fn) => {\n fn(ctx, markdown, prevMarkdown);\n });\n prevMarkdown = markdown;\n }\n prevDoc = doc;\n }, 200);\n return handler();\n }\n }\n });\n ctx.update(prosePluginsCtx, (x) => x.concat(plugin));\n await ctx.wait(EditorViewReady);\n listeners.mounted.forEach((fn) => fn(ctx));\n };\n};\nlistener.meta = {\n package: \"@milkdown/plugin-listener\",\n displayName: \"Listener\"\n};\nexport {\n ListenerManager,\n key,\n listener,\n listenerCtx\n};\n//# sourceMappingURL=index.js.map\n","import { PluginKey, Plugin } from \"@milkdown/prose/state\";\nimport { $ctx, $prose } from \"@milkdown/utils\";\nconst trailingConfig = $ctx(\n {\n shouldAppend: (lastNode) => {\n if (!lastNode) return false;\n if ([\"heading\", \"paragraph\"].includes(lastNode.type.name)) return false;\n return true;\n },\n getNode: (state) => state.schema.nodes.paragraph.create()\n },\n \"trailingConfig\"\n);\ntrailingConfig.meta = {\n package: \"@milkdown/plugin-trailing\",\n displayName: \"Ctx<trailingConfig>\"\n};\nconst trailingPlugin = $prose((ctx) => {\n const trailingPluginKey = new PluginKey(\"MILKDOWN_TRAILING\");\n const { shouldAppend, getNode } = ctx.get(trailingConfig.key);\n const plugin = new Plugin({\n key: trailingPluginKey,\n state: {\n init: (_, state) => {\n const lastNode = state.tr.doc.lastChild;\n return shouldAppend(lastNode, state);\n },\n apply: (tr, value, _, state) => {\n if (!tr.docChanged) return value;\n const lastNode = tr.doc.lastChild;\n return shouldAppend(lastNode, state);\n }\n },\n appendTransaction: (_, __, state) => {\n const { doc, tr } = state;\n const nodeType = getNode?.(state);\n const shouldInsertNodeAtEnd = plugin.getState(state);\n const endPosition = doc.content.size;\n if (!shouldInsertNodeAtEnd || !nodeType) return;\n return tr.insert(endPosition, nodeType);\n }\n });\n return plugin;\n});\ntrailingPlugin.meta = {\n package: \"@milkdown/plugin-trailing\",\n displayName: \"Prose<trailing>\"\n};\nconst trailing = [trailingConfig, trailingPlugin];\nexport {\n trailing,\n trailingConfig,\n trailingPlugin\n};\n//# sourceMappingURL=index.js.map\n","import { findWrapping, ReplaceAroundStep, canSplit, liftTarget, canJoin } from 'prosemirror-transform';\nimport { NodeRange, Fragment, Slice } from 'prosemirror-model';\nimport { Selection } from 'prosemirror-state';\n\nconst olDOM = [\"ol\", 0], ulDOM = [\"ul\", 0], liDOM = [\"li\", 0];\n/**\nAn ordered list [node spec](https://prosemirror.net/docs/ref/#model.NodeSpec). Has a single\nattribute, `order`, which determines the number at which the list\nstarts counting, and defaults to 1. Represented as an `<ol>`\nelement.\n*/\nconst orderedList = {\n attrs: { order: { default: 1, validate: \"number\" } },\n parseDOM: [{ tag: \"ol\", getAttrs(dom) {\n return { order: dom.hasAttribute(\"start\") ? +dom.getAttribute(\"start\") : 1 };\n } }],\n toDOM(node) {\n return node.attrs.order == 1 ? olDOM : [\"ol\", { start: node.attrs.order }, 0];\n }\n};\n/**\nA bullet list node spec, represented in the DOM as `<ul>`.\n*/\nconst bulletList = {\n parseDOM: [{ tag: \"ul\" }],\n toDOM() { return ulDOM; }\n};\n/**\nA list item (`<li>`) spec.\n*/\nconst listItem = {\n parseDOM: [{ tag: \"li\" }],\n toDOM() { return liDOM; },\n defining: true\n};\nfunction add(obj, props) {\n let copy = {};\n for (let prop in obj)\n copy[prop] = obj[prop];\n for (let prop in props)\n copy[prop] = props[prop];\n return copy;\n}\n/**\nConvenience function for adding list-related node types to a map\nspecifying the nodes for a schema. Adds\n[`orderedList`](https://prosemirror.net/docs/ref/#schema-list.orderedList) as `\"ordered_list\"`,\n[`bulletList`](https://prosemirror.net/docs/ref/#schema-list.bulletList) as `\"bullet_list\"`, and\n[`listItem`](https://prosemirror.net/docs/ref/#schema-list.listItem) as `\"list_item\"`.\n\n`itemContent` determines the content expression for the list items.\nIf you want the commands defined in this module to apply to your\nlist structure, it should have a shape like `\"paragraph block*\"` or\n`\"paragraph (ordered_list | bullet_list)*\"`. `listGroup` can be\ngiven to assign a group name to the list node types, for example\n`\"block\"`.\n*/\nfunction addListNodes(nodes, itemContent, listGroup) {\n return nodes.append({\n ordered_list: add(orderedList, { content: \"list_item+\", group: listGroup }),\n bullet_list: add(bulletList, { content: \"list_item+\", group: listGroup }),\n list_item: add(listItem, { content: itemContent })\n });\n}\n/**\nReturns a command function that wraps the selection in a list with\nthe given type an attributes. If `dispatch` is null, only return a\nvalue to indicate whether this is possible, but don't actually\nperform the change.\n*/\nfunction wrapInList(listType, attrs = null) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to);\n if (!range)\n return false;\n let tr = dispatch ? state.tr : null;\n if (!wrapRangeInList(tr, range, listType, attrs))\n return false;\n if (dispatch)\n dispatch(tr.scrollIntoView());\n return true;\n };\n}\n/**\nTry to wrap the given node range in a list of the given type.\nReturn `true` when this is possible, `false` otherwise. When `tr`\nis non-null, the wrapping is added to that transaction. When it is\n`null`, the function only queries whether the wrapping is\npossible.\n*/\nfunction wrapRangeInList(tr, range, listType, attrs = null) {\n let doJoin = false, outerRange = range, doc = range.$from.doc;\n // This is at the top of an existing list item\n if (range.depth >= 2 && range.$from.node(range.depth - 1).type.compatibleContent(listType) && range.startIndex == 0) {\n // Don't do anything if this is the top of the list\n if (range.$from.index(range.depth - 1) == 0)\n return false;\n let $insert = doc.resolve(range.start - 2);\n outerRange = new NodeRange($insert, $insert, range.depth);\n if (range.endIndex < range.parent.childCount)\n range = new NodeRange(range.$from, doc.resolve(range.$to.end(range.depth)), range.depth);\n doJoin = true;\n }\n let wrap = findWrapping(outerRange, listType, attrs, range);\n if (!wrap)\n return false;\n if (tr)\n doWrapInList(tr, range, wrap, doJoin, listType);\n return true;\n}\nfunction doWrapInList(tr, range, wrappers, joinBefore, listType) {\n let content = Fragment.empty;\n for (let i = wrappers.length - 1; i >= 0; i--)\n content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content));\n tr.step(new ReplaceAroundStep(range.start - (joinBefore ? 2 : 0), range.end, range.start, range.end, new Slice(content, 0, 0), wrappers.length, true));\n let found = 0;\n for (let i = 0; i < wrappers.length; i++)\n if (wrappers[i].type == listType)\n found = i + 1;\n let splitDepth = wrappers.length - found;\n let splitPos = range.start + wrappers.length - (joinBefore ? 2 : 0), parent = range.parent;\n for (let i = range.startIndex, e = range.endIndex, first = true; i < e; i++, first = false) {\n if (!first && canSplit(tr.doc, splitPos, splitDepth)) {\n tr.split(splitPos, splitDepth);\n splitPos += 2 * splitDepth;\n }\n splitPos += parent.child(i).nodeSize;\n }\n return tr;\n}\n/**\nBuild a command that splits a non-empty textblock at the top level\nof a list item by also splitting that list item.\n*/\nfunction splitListItem(itemType, itemAttrs) {\n return function (state, dispatch) {\n let { $from, $to, node } = state.selection;\n if ((node && node.isBlock) || $from.depth < 2 || !$from.sameParent($to))\n return false;\n let grandParent = $from.node(-1);\n if (grandParent.type != itemType)\n return false;\n if ($from.parent.content.size == 0 && $from.node(-1).childCount == $from.indexAfter(-1)) {\n // In an empty block. If this is a nested list, the wrapping\n // list item should be split. Otherwise, bail out and let next\n // command handle lifting.\n if ($from.depth == 3 || $from.node(-3).type != itemType ||\n $from.index(-2) != $from.node(-2).childCount - 1)\n return false;\n if (dispatch) {\n let wrap = Fragment.empty;\n let depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3;\n // Build a fragment containing empty versions of the structure\n // from the outer list item to the parent node of the cursor\n for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d--)\n wrap = Fragment.from($from.node(d).copy(wrap));\n let depthAfter = $from.indexAfter(-1) < $from.node(-2).childCount ? 1\n : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3;\n // Add a second list item with an empty default start node\n wrap = wrap.append(Fragment.from(itemType.createAndFill()));\n let start = $from.before($from.depth - (depthBefore - 1));\n let tr = state.tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0));\n let sel = -1;\n tr.doc.nodesBetween(start, tr.doc.content.size, (node, pos) => {\n if (sel > -1)\n return false;\n if (node.isTextblock && node.content.size == 0)\n sel = pos + 1;\n });\n if (sel > -1)\n tr.setSelection(Selection.near(tr.doc.resolve(sel)));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n let nextType = $to.pos == $from.end() ? grandParent.contentMatchAt(0).defaultType : null;\n let tr = state.tr.delete($from.pos, $to.pos);\n let types = nextType ? [itemAttrs ? { type: itemType, attrs: itemAttrs } : null, { type: nextType }] : undefined;\n if (!canSplit(tr.doc, $from.pos, 2, types))\n return false;\n if (dispatch)\n dispatch(tr.split($from.pos, 2, types).scrollIntoView());\n return true;\n };\n}\n/**\nActs like [`splitListItem`](https://prosemirror.net/docs/ref/#schema-list.splitListItem), but\nwithout resetting the set of active marks at the cursor.\n*/\nfunction splitListItemKeepMarks(itemType, itemAttrs) {\n let split = splitListItem(itemType, itemAttrs);\n return (state, dispatch) => {\n return split(state, dispatch && (tr => {\n let marks = state.storedMarks || (state.selection.$to.parentOffset && state.selection.$from.marks());\n if (marks)\n tr.ensureMarks(marks);\n dispatch(tr);\n }));\n };\n}\n/**\nCreate a command to lift the list item around the selection up into\na wrapping list.\n*/\nfunction liftListItem(itemType) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to, node => node.childCount > 0 && node.firstChild.type == itemType);\n if (!range)\n return false;\n if (!dispatch)\n return true;\n if ($from.node(range.depth - 1).type == itemType) // Inside a parent list\n return liftToOuterList(state, dispatch, itemType, range);\n else // Outer list node\n return liftOutOfList(state, dispatch, range);\n };\n}\nfunction liftToOuterList(state, dispatch, itemType, range) {\n let tr = state.tr, end = range.end, endOfList = range.$to.end(range.depth);\n if (end < endOfList) {\n // There are siblings after the lifted items, which must become\n // children of the last item\n tr.step(new ReplaceAroundStep(end - 1, endOfList, end, endOfList, new Slice(Fragment.from(itemType.create(null, range.parent.copy())), 1, 0), 1, true));\n range = new NodeRange(tr.doc.resolve(range.$from.pos), tr.doc.resolve(endOfList), range.depth);\n }\n const target = liftTarget(range);\n if (target == null)\n return false;\n tr.lift(range, target);\n let $after = tr.doc.resolve(tr.mapping.map(end, -1) - 1);\n if (canJoin(tr.doc, $after.pos) && $after.nodeBefore.type == $after.nodeAfter.type)\n tr.join($after.pos);\n dispatch(tr.scrollIntoView());\n return true;\n}\nfunction liftOutOfList(state, dispatch, range) {\n let tr = state.tr, list = range.parent;\n // Merge the list items into a single big item\n for (let pos = range.end, i = range.endIndex - 1, e = range.startIndex; i > e; i--) {\n pos -= list.child(i).nodeSize;\n tr.delete(pos - 1, pos + 1);\n }\n let $start = tr.doc.resolve(range.start), item = $start.nodeAfter;\n if (tr.mapping.map(range.end) != range.start + $start.nodeAfter.nodeSize)\n return false;\n let atStart = range.startIndex == 0, atEnd = range.endIndex == list.childCount;\n let parent = $start.node(-1), indexBefore = $start.index(-1);\n if (!parent.canReplace(indexBefore + (atStart ? 0 : 1), indexBefore + 1, item.content.append(atEnd ? Fragment.empty : Fragment.from(list))))\n return false;\n let start = $start.pos, end = start + item.nodeSize;\n // Strip off the surrounding list. At the sides where we're not at\n // the end of the list, the existing list is closed. At sides where\n // this is the end, it is overwritten to its end.\n tr.step(new ReplaceAroundStep(start - (atStart ? 1 : 0), end + (atEnd ? 1 : 0), start + 1, end - 1, new Slice((atStart ? Fragment.empty : Fragment.from(list.copy(Fragment.empty)))\n .append(atEnd ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))), atStart ? 0 : 1, atEnd ? 0 : 1), atStart ? 0 : 1));\n dispatch(tr.scrollIntoView());\n return true;\n}\n/**\nCreate a command to sink the list item around the selection down\ninto an inner list.\n*/\nfunction sinkListItem(itemType) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to, node => node.childCount > 0 && node.firstChild.type == itemType);\n if (!range)\n return false;\n let startIndex = range.startIndex;\n if (startIndex == 0)\n return false;\n let parent = range.parent, nodeBefore = parent.child(startIndex - 1);\n if (nodeBefore.type != itemType)\n return false;\n if (dispatch) {\n let nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type == parent.type;\n let inner = Fragment.from(nestedBefore ? itemType.create() : null);\n let slice = new Slice(Fragment.from(itemType.create(null, Fragment.from(parent.type.create(null, inner)))), nestedBefore ? 3 : 1, 0);\n let before = range.start, after = range.end;\n dispatch(state.tr.step(new ReplaceAroundStep(before - (nestedBefore ? 3 : 1), after, before, after, slice, 1, true))\n .scrollIntoView());\n }\n return true;\n };\n}\n\nexport { addListNodes, bulletList, liftListItem, listItem, orderedList, sinkListItem, splitListItem, splitListItemKeepMarks, wrapInList, wrapRangeInList };\n","/**\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Nodes} Nodes\n */\n\n/**\n * @callback GetDefinition\n * Get a definition by identifier.\n * @param {string | null | undefined} [identifier]\n * Identifier of definition (optional).\n * @returns {Definition | undefined}\n * Definition corresponding to `identifier` or `null`.\n */\n\nimport {visit} from 'unist-util-visit'\n\n/**\n * Find definitions in `tree`.\n *\n * Uses CommonMark precedence, which means that earlier definitions are\n * preferred over duplicate later definitions.\n *\n * @param {Nodes} tree\n * Tree to check.\n * @returns {GetDefinition}\n * Getter.\n */\nexport function definitions(tree) {\n /** @type {Map<string, Definition>} */\n const cache = new Map()\n\n if (!tree || !tree.type) {\n throw new Error('mdast-util-definitions expected node')\n }\n\n visit(tree, 'definition', function (definition) {\n const id = clean(definition.identifier)\n if (id && !cache.get(id)) {\n cache.set(id, definition)\n }\n })\n\n return definition\n\n /** @type {GetDefinition} */\n function definition(identifier) {\n const id = clean(identifier)\n return cache.get(id)\n }\n}\n\n/**\n * @param {string | null | undefined} [value]\n * @returns {string}\n */\nfunction clean(value) {\n return String(value || '').toUpperCase()\n}\n","/**\n * @typedef {import('mdast').Root} Root\n */\n\nimport {definitions} from 'mdast-util-definitions'\nimport {SKIP, visit} from 'unist-util-visit'\n\n/**\n * Turn references and definitions into normal links and images.\n *\n * @returns\n * Transform.\n */\nexport default function remarkInlineLinks() {\n /**\n * Transform.\n *\n * @param {Root} tree\n * Tree.\n * @returns {undefined}\n * Nothing.\n */\n return function (tree) {\n const definition = definitions(tree)\n\n visit(tree, function (node, index, parent) {\n if (\n node.type === 'definition' &&\n parent !== undefined &&\n typeof index === 'number'\n ) {\n parent.children.splice(index, 1)\n return [SKIP, index]\n }\n\n if (node.type === 'imageReference' || node.type === 'linkReference') {\n const def = definition(node.identifier)\n\n if (def && parent && typeof index === 'number') {\n parent.children[index] =\n node.type === 'imageReference'\n ? {type: 'image', url: def.url, title: def.title, alt: node.alt}\n : {\n type: 'link',\n url: def.url,\n title: def.title,\n children: node.children\n }\n return [SKIP, index]\n }\n }\n })\n }\n}\n","import { markRule, findSelectedNodeOfType, findNodeInSelection } from \"@milkdown/prose\";\nimport { Fragment, Node } from \"@milkdown/prose/model\";\nimport { TextSelection, Selection, PluginKey, Plugin } from \"@milkdown/prose/state\";\nimport { findWrapping, ReplaceStep, AddMarkStep } from \"@milkdown/prose/transform\";\nimport { $markAttr, $markSchema, $inputRule, $command, $useKeymap, $node, $remark, $nodeAttr, $nodeSchema, $ctx, $prose } from \"@milkdown/utils\";\nimport { remarkStringifyOptionsCtx, commandsCtx, editorViewCtx } from \"@milkdown/core\";\nimport { toggleMark, setBlockType, wrapIn, joinBackward } from \"@milkdown/prose/commands\";\nimport { visitParents } from \"unist-util-visit-parents\";\nimport { expectDomTypeError } from \"@milkdown/exception\";\nimport { textblockTypeInputRule, wrappingInputRule, InputRule } from \"@milkdown/prose/inputrules\";\nimport { sinkListItem, splitListItem, liftListItem } from \"@milkdown/prose/schema-list\";\nimport { Decoration, DecorationSet } from \"@milkdown/prose/view\";\nimport { visit } from \"unist-util-visit\";\nimport remarkInlineLinks from \"remark-inline-links\";\nfunction serializeText(state, node) {\n const lastIsHardBreak = node.childCount >= 1 && node.lastChild?.type.name === \"hardbreak\";\n if (!lastIsHardBreak) {\n state.next(node.content);\n return;\n }\n const contentArr = [];\n node.content.forEach((n, _, i) => {\n if (i === node.childCount - 1) return;\n contentArr.push(n);\n });\n state.next(Fragment.fromArray(contentArr));\n}\nfunction withMeta(plugin, meta) {\n Object.assign(plugin, {\n meta: {\n package: \"@milkdown/preset-commonmark\",\n ...meta\n }\n });\n return plugin;\n}\nconst emphasisAttr = $markAttr(\"emphasis\");\nwithMeta(emphasisAttr, {\n displayName: \"Attr<emphasis>\",\n group: \"Emphasis\"\n});\nconst emphasisSchema = $markSchema(\"emphasis\", (ctx) => ({\n attrs: {\n marker: {\n default: ctx.get(remarkStringifyOptionsCtx).emphasis || \"*\",\n validate: \"string\"\n }\n },\n parseDOM: [\n { tag: \"i\" },\n { tag: \"em\" },\n { style: \"font-style\", getAttrs: (value) => value === \"italic\" }\n ],\n toDOM: (mark) => [\"em\", ctx.get(emphasisAttr.key)(mark)],\n parseMarkdown: {\n match: (node) => node.type === \"emphasis\",\n runner: (state, node, markType) => {\n state.openMark(markType, { marker: node.marker });\n state.next(node.children);\n state.closeMark(markType);\n }\n },\n toMarkdown: {\n match: (mark) => mark.type.name === \"emphasis\",\n runner: (state, mark) => {\n state.withMark(mark, \"emphasis\", void 0, {\n marker: mark.attrs.marker\n });\n }\n }\n}));\nwithMeta(emphasisSchema.mark, {\n displayName: \"MarkSchema<emphasis>\",\n group: \"Emphasis\"\n});\nwithMeta(emphasisSchema.ctx, {\n displayName: \"MarkSchemaCtx<emphasis>\",\n group: \"Emphasis\"\n});\nconst toggleEmphasisCommand = $command(\"ToggleEmphasis\", (ctx) => () => {\n return toggleMark(emphasisSchema.type(ctx));\n});\nwithMeta(toggleEmphasisCommand, {\n displayName: \"Command<toggleEmphasisCommand>\",\n group: \"Emphasis\"\n});\nconst emphasisStarInputRule = $inputRule((ctx) => {\n return markRule(/(?:^|[^*])\\*([^*]+)\\*$/, emphasisSchema.type(ctx), {\n getAttr: () => ({\n marker: \"*\"\n }),\n updateCaptured: ({ fullMatch, start }) => !fullMatch.startsWith(\"*\") ? { fullMatch: fullMatch.slice(1), start: start + 1 } : {}\n });\n});\nwithMeta(emphasisStarInputRule, {\n displayName: \"InputRule<emphasis>|Star\",\n group: \"Emphasis\"\n});\nconst emphasisUnderscoreInputRule = $inputRule((ctx) => {\n return markRule(/\\b_(?![_\\s])(.*?[^_\\s])_\\b/, emphasisSchema.type(ctx), {\n getAttr: () => ({\n marker: \"_\"\n }),\n updateCaptured: ({ fullMatch, start }) => !fullMatch.startsWith(\"_\") ? { fullMatch: fullMatch.slice(1), start: start + 1 } : {}\n });\n});\nwithMeta(emphasisUnderscoreInputRule, {\n displayName: \"InputRule<emphasis>|Underscore\",\n group: \"Emphasis\"\n});\nconst emphasisKeymap = $useKeymap(\"emphasisKeymap\", {\n ToggleEmphasis: {\n shortcuts: \"Mod-i\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(toggleEmphasisCommand.key);\n }\n }\n});\nwithMeta(emphasisKeymap.ctx, {\n displayName: \"KeymapCtx<emphasis>\",\n group: \"Emphasis\"\n});\nwithMeta(emphasisKeymap.shortcuts, {\n displayName: \"Keymap<emphasis>\",\n group: \"Emphasis\"\n});\nconst strongAttr = $markAttr(\"strong\");\nwithMeta(strongAttr, {\n displayName: \"Attr<strong>\",\n group: \"Strong\"\n});\nconst strongSchema = $markSchema(\"strong\", (ctx) => ({\n attrs: {\n marker: {\n default: ctx.get(remarkStringifyOptionsCtx).strong || \"*\",\n validate: \"string\"\n }\n },\n parseDOM: [\n // This works around a Google Docs misbehavior where\n // pasted content will be inexplicably wrapped in `<b>`\n // tags with a font-weight normal.\n {\n tag: \"b\",\n getAttrs: (node) => node.style.fontWeight != \"normal\" && null\n },\n { tag: \"strong\" },\n { style: \"font-style\", getAttrs: (value) => value === \"bold\" },\n { style: \"font-weight=400\", clearMark: (m) => m.type.name == \"strong\" },\n {\n style: \"font-weight\",\n getAttrs: (value) => /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null\n }\n ],\n toDOM: (mark) => [\"strong\", ctx.get(strongAttr.key)(mark)],\n parseMarkdown: {\n match: (node) => node.type === \"strong\",\n runner: (state, node, markType) => {\n state.openMark(markType, { marker: node.marker });\n state.next(node.children);\n state.closeMark(markType);\n }\n },\n toMarkdown: {\n match: (mark) => mark.type.name === \"strong\",\n runner: (state, mark) => {\n state.withMark(mark, \"strong\", void 0, {\n marker: mark.attrs.marker\n });\n }\n }\n}));\nwithMeta(strongSchema.mark, {\n displayName: \"MarkSchema<strong>\",\n group: \"Strong\"\n});\nwithMeta(strongSchema.ctx, {\n displayName: \"MarkSchemaCtx<strong>\",\n group: \"Strong\"\n});\nconst toggleStrongCommand = $command(\"ToggleStrong\", (ctx) => () => {\n return toggleMark(strongSchema.type(ctx));\n});\nwithMeta(toggleStrongCommand, {\n displayName: \"Command<toggleStrongCommand>\",\n group: \"Strong\"\n});\nconst strongInputRule = $inputRule((ctx) => {\n return markRule(\n new RegExp(\"(?<![\\\\w:/])(?:\\\\*\\\\*|__)([^*_]+?)(?:\\\\*\\\\*|__)(?![\\\\w/])$\"),\n strongSchema.type(ctx),\n {\n getAttr: (match) => {\n return {\n marker: match[0].startsWith(\"*\") ? \"*\" : \"_\"\n };\n }\n }\n );\n});\nwithMeta(strongInputRule, {\n displayName: \"InputRule<strong>\",\n group: \"Strong\"\n});\nconst strongKeymap = $useKeymap(\"strongKeymap\", {\n ToggleBold: {\n shortcuts: [\"Mod-b\"],\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(toggleStrongCommand.key);\n }\n }\n});\nwithMeta(strongKeymap.ctx, {\n displayName: \"KeymapCtx<strong>\",\n group: \"Strong\"\n});\nwithMeta(strongKeymap.shortcuts, {\n displayName: \"Keymap<strong>\",\n group: \"Strong\"\n});\nconst inlineCodeAttr = $markAttr(\"inlineCode\");\nwithMeta(inlineCodeAttr, {\n displayName: \"Attr<inlineCode>\",\n group: \"InlineCode\"\n});\nconst inlineCodeSchema = $markSchema(\"inlineCode\", (ctx) => ({\n priority: 100,\n code: true,\n parseDOM: [{ tag: \"code\" }],\n toDOM: (mark) => [\"code\", ctx.get(inlineCodeAttr.key)(mark)],\n parseMarkdown: {\n match: (node) => node.type === \"inlineCode\",\n runner: (state, node, markType) => {\n state.openMark(markType);\n state.addText(node.value);\n state.closeMark(markType);\n }\n },\n toMarkdown: {\n match: (mark) => mark.type.name === \"inlineCode\",\n runner: (state, mark, node) => {\n state.withMark(mark, \"inlineCode\", node.text || \"\");\n }\n }\n}));\nwithMeta(inlineCodeSchema.mark, {\n displayName: \"MarkSchema<inlineCode>\",\n group: \"InlineCode\"\n});\nwithMeta(inlineCodeSchema.ctx, {\n displayName: \"MarkSchemaCtx<inlineCode>\",\n group: \"InlineCode\"\n});\nconst toggleInlineCodeCommand = $command(\n \"ToggleInlineCode\",\n (ctx) => () => (state, dispatch) => {\n const { selection, tr } = state;\n if (selection.empty) return false;\n const { from, to } = selection;\n const has = state.doc.rangeHasMark(from, to, inlineCodeSchema.type(ctx));\n if (has) {\n dispatch?.(tr.removeMark(from, to, inlineCodeSchema.type(ctx)));\n return true;\n }\n const restMarksName = Object.keys(state.schema.marks).filter(\n (x) => x !== inlineCodeSchema.type.name\n );\n restMarksName.map((name) => state.schema.marks[name]).forEach((t) => {\n tr.removeMark(from, to, t);\n });\n dispatch?.(tr.addMark(from, to, inlineCodeSchema.type(ctx).create()));\n return true;\n }\n);\nwithMeta(toggleInlineCodeCommand, {\n displayName: \"Command<toggleInlineCodeCommand>\",\n group: \"InlineCode\"\n});\nconst inlineCodeInputRule = $inputRule((ctx) => {\n return markRule(/(?:`)([^`]+)(?:`)$/, inlineCodeSchema.type(ctx));\n});\nwithMeta(inlineCodeInputRule, {\n displayName: \"InputRule<inlineCodeInputRule>\",\n group: \"InlineCode\"\n});\nconst inlineCodeKeymap = $useKeymap(\"inlineCodeKeymap\", {\n ToggleInlineCode: {\n shortcuts: \"Mod-e\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(toggleInlineCodeCommand.key);\n }\n }\n});\nwithMeta(inlineCodeKeymap.ctx, {\n displayName: \"KeymapCtx<inlineCode>\",\n group: \"InlineCode\"\n});\nwithMeta(inlineCodeKeymap.shortcuts, {\n displayName: \"Keymap<inlineCode>\",\n group: \"InlineCode\"\n});\nconst linkAttr = $markAttr(\"link\");\nwithMeta(linkAttr, {\n displayName: \"Attr<link>\",\n group: \"Link\"\n});\nconst linkSchema = $markSchema(\"link\", (ctx) => ({\n attrs: {\n href: { validate: \"string\" },\n title: { default: null, validate: \"string|null\" }\n },\n parseDOM: [\n {\n tag: \"a[href]\",\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n href: dom.getAttribute(\"href\"),\n title: dom.getAttribute(\"title\")\n };\n }\n }\n ],\n toDOM: (mark) => [\"a\", { ...ctx.get(linkAttr.key)(mark), ...mark.attrs }],\n parseMarkdown: {\n match: (node) => node.type === \"link\",\n runner: (state, node, markType) => {\n const url = node.url;\n const title = node.title;\n state.openMark(markType, { href: url, title });\n state.next(node.children);\n state.closeMark(markType);\n }\n },\n toMarkdown: {\n match: (mark) => mark.type.name === \"link\",\n runner: (state, mark) => {\n state.withMark(mark, \"link\", void 0, {\n title: mark.attrs.title,\n url: mark.attrs.href\n });\n }\n }\n}));\nwithMeta(linkSchema.mark, {\n displayName: \"MarkSchema<link>\",\n group: \"Link\"\n});\nconst toggleLinkCommand = $command(\n \"ToggleLink\",\n (ctx) => (payload = {}) => toggleMark(linkSchema.type(ctx), payload)\n);\nwithMeta(toggleLinkCommand, {\n displayName: \"Command<toggleLinkCommand>\",\n group: \"Link\"\n});\nconst updateLinkCommand = $command(\n \"UpdateLink\",\n (ctx) => (payload = {}) => (state, dispatch) => {\n if (!dispatch) return false;\n let node;\n let pos = -1;\n const { selection } = state;\n const { from, to } = selection;\n state.doc.nodesBetween(from, from === to ? to + 1 : to, (n, p) => {\n if (linkSchema.type(ctx).isInSet(n.marks)) {\n node = n;\n pos = p;\n return false;\n }\n return void 0;\n });\n if (!node) return false;\n const mark = node.marks.find(({ type }) => type === linkSchema.type(ctx));\n if (!mark) return false;\n const start = pos;\n const end = pos + node.nodeSize;\n const { tr } = state;\n const linkMark = linkSchema.type(ctx).create({ ...mark.attrs, ...payload });\n if (!linkMark) return false;\n dispatch(\n tr.removeMark(start, end, mark).addMark(start, end, linkMark).setSelection(new TextSelection(tr.selection.$anchor)).scrollIntoView()\n );\n return true;\n }\n);\nwithMeta(updateLinkCommand, {\n displayName: \"Command<updateLinkCommand>\",\n group: \"Link\"\n});\nconst docSchema = $node(\"doc\", () => ({\n content: \"block+\",\n parseMarkdown: {\n match: ({ type }) => type === \"root\",\n runner: (state, node, type) => {\n state.injectRoot(node, type);\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"doc\",\n runner: (state, node) => {\n state.openNode(\"root\");\n state.next(node.content);\n }\n }\n}));\nwithMeta(docSchema, {\n displayName: \"NodeSchema<doc>\",\n group: \"Doc\"\n});\nfunction visitEmptyLine(ast) {\n return visitParents(\n ast,\n (node) => node.type === \"html\" && [\"<br />\", \"<br>\", \"<br >\", \"<br/>\"].includes(\n node.value?.trim()\n ),\n (node, parents) => {\n if (!parents.length) return;\n const parent = parents[parents.length - 1];\n if (!parent) return;\n const index = parent.children.indexOf(node);\n if (index === -1) return;\n parent.children.splice(index, 1);\n },\n true\n );\n}\nconst remarkPreserveEmptyLinePlugin = $remark(\n \"remark-preserve-empty-line\",\n () => () => visitEmptyLine\n);\nwithMeta(remarkPreserveEmptyLinePlugin.plugin, {\n displayName: \"Remark<remarkPreserveEmptyLine>\",\n group: \"Remark\"\n});\nwithMeta(remarkPreserveEmptyLinePlugin.options, {\n displayName: \"RemarkConfig<remarkPreserveEmptyLine>\",\n group: \"Remark\"\n});\nconst paragraphAttr = $nodeAttr(\"paragraph\");\nwithMeta(paragraphAttr, {\n displayName: \"Attr<paragraph>\",\n group: \"Paragraph\"\n});\nconst paragraphSchema = $nodeSchema(\"paragraph\", (ctx) => ({\n content: \"inline*\",\n group: \"block\",\n parseDOM: [{ tag: \"p\" }],\n toDOM: (node) => [\"p\", ctx.get(paragraphAttr.key)(node), 0],\n parseMarkdown: {\n match: (node) => node.type === \"paragraph\",\n runner: (state, node, type) => {\n state.openNode(type);\n if (node.children) state.next(node.children);\n else state.addText(node.value || \"\");\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"paragraph\",\n runner: (state, node) => {\n const view = ctx.get(editorViewCtx);\n const lastNode = view.state?.doc.lastChild;\n state.openNode(\"paragraph\");\n if ((!node.content || node.content.size === 0) && node !== lastNode && shouldPreserveEmptyLine(ctx)) {\n state.addNode(\"html\", void 0, \"<br />\");\n } else {\n serializeText(state, node);\n }\n state.closeNode();\n }\n }\n}));\nfunction shouldPreserveEmptyLine(ctx) {\n let shouldPreserveEmptyLine2 = false;\n try {\n ctx.get(remarkPreserveEmptyLinePlugin.id);\n shouldPreserveEmptyLine2 = true;\n } catch {\n shouldPreserveEmptyLine2 = false;\n }\n return shouldPreserveEmptyLine2;\n}\nwithMeta(paragraphSchema.node, {\n displayName: \"NodeSchema<paragraph>\",\n group: \"Paragraph\"\n});\nwithMeta(paragraphSchema.ctx, {\n displayName: \"NodeSchemaCtx<paragraph>\",\n group: \"Paragraph\"\n});\nconst turnIntoTextCommand = $command(\n \"TurnIntoText\",\n (ctx) => () => setBlockType(paragraphSchema.type(ctx))\n);\nwithMeta(turnIntoTextCommand, {\n displayName: \"Command<turnIntoTextCommand>\",\n group: \"Paragraph\"\n});\nconst paragraphKeymap = $useKeymap(\"paragraphKeymap\", {\n TurnIntoText: {\n shortcuts: \"Mod-Alt-0\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(turnIntoTextCommand.key);\n }\n }\n});\nwithMeta(paragraphKeymap.ctx, {\n displayName: \"KeymapCtx<paragraph>\",\n group: \"Paragraph\"\n});\nwithMeta(paragraphKeymap.shortcuts, {\n displayName: \"Keymap<paragraph>\",\n group: \"Paragraph\"\n});\nconst headingIndex = Array(6).fill(0).map((_, i) => i + 1);\nfunction defaultHeadingIdGenerator(node) {\n return node.textContent.toLowerCase().trim().replace(/\\s+/g, \"-\");\n}\nconst headingIdGenerator = $ctx(\n defaultHeadingIdGenerator,\n \"headingIdGenerator\"\n);\nwithMeta(headingIdGenerator, {\n displayName: \"Ctx<HeadingIdGenerator>\",\n group: \"Heading\"\n});\nconst headingAttr = $nodeAttr(\"heading\");\nwithMeta(headingAttr, {\n displayName: \"Attr<heading>\",\n group: \"Heading\"\n});\nconst headingSchema = $nodeSchema(\"heading\", (ctx) => {\n const getId = ctx.get(headingIdGenerator.key);\n return {\n content: \"inline*\",\n group: \"block\",\n defining: true,\n attrs: {\n id: {\n default: \"\",\n validate: \"string\"\n },\n level: {\n default: 1,\n validate: \"number\"\n }\n },\n parseDOM: headingIndex.map((x) => ({\n tag: `h${x}`,\n getAttrs: (node) => {\n if (!(node instanceof HTMLElement)) throw expectDomTypeError(node);\n return { level: x, id: node.id };\n }\n })),\n toDOM: (node) => {\n return [\n `h${node.attrs.level}`,\n {\n ...ctx.get(headingAttr.key)(node),\n id: node.attrs.id || getId(node)\n },\n 0\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === \"heading\",\n runner: (state, node, type) => {\n const depth = node.depth;\n state.openNode(type, { level: depth });\n state.next(node.children);\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"heading\",\n runner: (state, node) => {\n state.openNode(\"heading\", void 0, { depth: node.attrs.level });\n serializeText(state, node);\n state.closeNode();\n }\n }\n };\n});\nwithMeta(headingSchema.node, {\n displayName: \"NodeSchema<heading>\",\n group: \"Heading\"\n});\nwithMeta(headingSchema.ctx, {\n displayName: \"NodeSchemaCtx<heading>\",\n group: \"Heading\"\n});\nconst wrapInHeadingInputRule = $inputRule((ctx) => {\n return textblockTypeInputRule(\n /^(?<hashes>#+)\\s$/,\n headingSchema.type(ctx),\n (match) => {\n const x = match.groups?.hashes?.length || 0;\n const view = ctx.get(editorViewCtx);\n const { $from } = view.state.selection;\n const node = $from.node();\n if (node.type.name === \"heading\") {\n let level = Number(node.attrs.level) + Number(x);\n if (level > 6) level = 6;\n return { level };\n }\n return { level: x };\n }\n );\n});\nwithMeta(wrapInHeadingInputRule, {\n displayName: \"InputRule<wrapInHeadingInputRule>\",\n group: \"Heading\"\n});\nconst wrapInHeadingCommand = $command(\"WrapInHeading\", (ctx) => {\n return (level) => {\n level ??= 1;\n if (level < 1) return setBlockType(paragraphSchema.type(ctx));\n return setBlockType(headingSchema.type(ctx), { level });\n };\n});\nwithMeta(wrapInHeadingCommand, {\n displayName: \"Command<wrapInHeadingCommand>\",\n group: \"Heading\"\n});\nconst downgradeHeadingCommand = $command(\n \"DowngradeHeading\",\n (ctx) => () => (state, dispatch, view) => {\n const { $from } = state.selection;\n const node = $from.node();\n if (node.type !== headingSchema.type(ctx) || !state.selection.empty || $from.parentOffset !== 0)\n return false;\n const level = node.attrs.level - 1;\n if (!level)\n return setBlockType(paragraphSchema.type(ctx))(state, dispatch, view);\n dispatch?.(\n state.tr.setNodeMarkup(state.selection.$from.before(), void 0, {\n ...node.attrs,\n level\n })\n );\n return true;\n }\n);\nwithMeta(downgradeHeadingCommand, {\n displayName: \"Command<downgradeHeadingCommand>\",\n group: \"Heading\"\n});\nconst headingKeymap = $useKeymap(\"headingKeymap\", {\n TurnIntoH1: {\n shortcuts: \"Mod-Alt-1\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInHeadingCommand.key, 1);\n }\n },\n TurnIntoH2: {\n shortcuts: \"Mod-Alt-2\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInHeadingCommand.key, 2);\n }\n },\n TurnIntoH3: {\n shortcuts: \"Mod-Alt-3\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInHeadingCommand.key, 3);\n }\n },\n TurnIntoH4: {\n shortcuts: \"Mod-Alt-4\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInHeadingCommand.key, 4);\n }\n },\n TurnIntoH5: {\n shortcuts: \"Mod-Alt-5\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInHeadingCommand.key, 5);\n }\n },\n TurnIntoH6: {\n shortcuts: \"Mod-Alt-6\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInHeadingCommand.key, 6);\n }\n },\n DowngradeHeading: {\n shortcuts: [\"Delete\", \"Backspace\"],\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(downgradeHeadingCommand.key);\n }\n }\n});\nwithMeta(headingKeymap.ctx, {\n displayName: \"KeymapCtx<heading>\",\n group: \"Heading\"\n});\nwithMeta(headingKeymap.shortcuts, {\n displayName: \"Keymap<heading>\",\n group: \"Heading\"\n});\nconst blockquoteAttr = $nodeAttr(\"blockquote\");\nwithMeta(blockquoteAttr, {\n displayName: \"Attr<blockquote>\",\n group: \"Blockquote\"\n});\nconst blockquoteSchema = $nodeSchema(\n \"blockquote\",\n (ctx) => ({\n content: \"block+\",\n group: \"block\",\n defining: true,\n parseDOM: [{ tag: \"blockquote\" }],\n toDOM: (node) => [\"blockquote\", ctx.get(blockquoteAttr.key)(node), 0],\n parseMarkdown: {\n match: ({ type }) => type === \"blockquote\",\n runner: (state, node, type) => {\n state.openNode(type).next(node.children).closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"blockquote\",\n runner: (state, node) => {\n state.openNode(\"blockquote\").next(node.content).closeNode();\n }\n }\n })\n);\nwithMeta(blockquoteSchema.node, {\n displayName: \"NodeSchema<blockquote>\",\n group: \"Blockquote\"\n});\nwithMeta(blockquoteSchema.ctx, {\n displayName: \"NodeSchemaCtx<blockquote>\",\n group: \"Blockquote\"\n});\nconst wrapInBlockquoteInputRule = $inputRule(\n (ctx) => wrappingInputRule(/^\\s*>\\s$/, blockquoteSchema.type(ctx))\n);\nwithMeta(wrapInBlockquoteInputRule, {\n displayName: \"InputRule<wrapInBlockquoteInputRule>\",\n group: \"Blockquote\"\n});\nconst wrapInBlockquoteCommand = $command(\n \"WrapInBlockquote\",\n (ctx) => () => wrapIn(blockquoteSchema.type(ctx))\n);\nwithMeta(wrapInBlockquoteCommand, {\n displayName: \"Command<wrapInBlockquoteCommand>\",\n group: \"Blockquote\"\n});\nconst blockquoteKeymap = $useKeymap(\"blockquoteKeymap\", {\n WrapInBlockquote: {\n shortcuts: \"Mod-Shift-b\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInBlockquoteCommand.key);\n }\n }\n});\nwithMeta(blockquoteKeymap.ctx, {\n displayName: \"KeymapCtx<blockquote>\",\n group: \"Blockquote\"\n});\nwithMeta(blockquoteKeymap.shortcuts, {\n displayName: \"Keymap<blockquote>\",\n group: \"Blockquote\"\n});\nconst codeBlockAttr = $nodeAttr(\"codeBlock\", () => ({\n pre: {},\n code: {}\n}));\nwithMeta(codeBlockAttr, {\n displayName: \"Attr<codeBlock>\",\n group: \"CodeBlock\"\n});\nconst codeBlockSchema = $nodeSchema(\"code_block\", (ctx) => {\n return {\n content: \"text*\",\n group: \"block\",\n marks: \"\",\n defining: true,\n code: true,\n attrs: {\n language: {\n default: \"\",\n validate: \"string\"\n }\n },\n parseDOM: [\n {\n tag: \"pre\",\n preserveWhitespace: \"full\",\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return { language: dom.dataset.language };\n }\n }\n ],\n toDOM: (node) => {\n const attr = ctx.get(codeBlockAttr.key)(node);\n const language = node.attrs.language;\n const languageAttrs = language && language.length > 0 ? { \"data-language\": language } : void 0;\n return [\n \"pre\",\n {\n ...attr.pre,\n ...languageAttrs\n },\n [\"code\", attr.code, 0]\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === \"code\",\n runner: (state, node, type) => {\n const language = node.lang ?? \"\";\n const value = node.value;\n state.openNode(type, { language });\n if (value) state.addText(value);\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"code_block\",\n runner: (state, node) => {\n state.addNode(\"code\", void 0, node.content.firstChild?.text || \"\", {\n lang: node.attrs.language\n });\n }\n }\n };\n});\nwithMeta(codeBlockSchema.node, {\n displayName: \"NodeSchema<codeBlock>\",\n group: \"CodeBlock\"\n});\nwithMeta(codeBlockSchema.ctx, {\n displayName: \"NodeSchemaCtx<codeBlock>\",\n group: \"CodeBlock\"\n});\nconst createCodeBlockInputRule = $inputRule(\n (ctx) => textblockTypeInputRule(\n /^```(?<language>[a-z]*)?[\\s\\n]$/,\n codeBlockSchema.type(ctx),\n (match) => ({\n language: match.groups?.language ?? \"\"\n })\n )\n);\nwithMeta(createCodeBlockInputRule, {\n displayName: \"InputRule<createCodeBlockInputRule>\",\n group: \"CodeBlock\"\n});\nconst createCodeBlockCommand = $command(\n \"CreateCodeBlock\",\n (ctx) => (language = \"\") => setBlockType(codeBlockSchema.type(ctx), { language })\n);\nwithMeta(createCodeBlockCommand, {\n displayName: \"Command<createCodeBlockCommand>\",\n group: \"CodeBlock\"\n});\nconst updateCodeBlockLanguageCommand = $command(\n \"UpdateCodeBlockLanguage\",\n () => ({ pos, language } = {\n pos: -1,\n language: \"\"\n }) => (state, dispatch) => {\n if (pos >= 0) {\n dispatch?.(state.tr.setNodeAttribute(pos, \"language\", language));\n return true;\n }\n return false;\n }\n);\nwithMeta(updateCodeBlockLanguageCommand, {\n displayName: \"Command<updateCodeBlockLanguageCommand>\",\n group: \"CodeBlock\"\n});\nconst codeBlockKeymap = $useKeymap(\"codeBlockKeymap\", {\n CreateCodeBlock: {\n shortcuts: \"Mod-Alt-c\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(createCodeBlockCommand.key);\n }\n }\n});\nwithMeta(codeBlockKeymap.ctx, {\n displayName: \"KeymapCtx<codeBlock>\",\n group: \"CodeBlock\"\n});\nwithMeta(codeBlockKeymap.shortcuts, {\n displayName: \"Keymap<codeBlock>\",\n group: \"CodeBlock\"\n});\nconst imageAttr = $nodeAttr(\"image\");\nwithMeta(imageAttr, {\n displayName: \"Attr<image>\",\n group: \"Image\"\n});\nconst imageSchema = $nodeSchema(\"image\", (ctx) => {\n return {\n inline: true,\n group: \"inline\",\n selectable: true,\n draggable: true,\n marks: \"\",\n atom: true,\n defining: true,\n isolating: true,\n attrs: {\n src: { default: \"\", validate: \"string\" },\n alt: { default: \"\", validate: \"string\" },\n title: { default: \"\", validate: \"string\" }\n },\n parseDOM: [\n {\n tag: \"img[src]\",\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n src: dom.getAttribute(\"src\") || \"\",\n alt: dom.getAttribute(\"alt\") || \"\",\n title: dom.getAttribute(\"title\") || dom.getAttribute(\"alt\") || \"\"\n };\n }\n }\n ],\n toDOM: (node) => {\n return [\"img\", { ...ctx.get(imageAttr.key)(node), ...node.attrs }];\n },\n parseMarkdown: {\n match: ({ type }) => type === \"image\",\n runner: (state, node, type) => {\n const url = node.url;\n const alt = node.alt;\n const title = node.title;\n state.addNode(type, {\n src: url,\n alt,\n title\n });\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"image\",\n runner: (state, node) => {\n state.addNode(\"image\", void 0, void 0, {\n title: node.attrs.title,\n url: node.attrs.src,\n alt: node.attrs.alt\n });\n }\n }\n };\n});\nwithMeta(imageSchema.node, {\n displayName: \"NodeSchema<image>\",\n group: \"Image\"\n});\nwithMeta(imageSchema.ctx, {\n displayName: \"NodeSchemaCtx<image>\",\n group: \"Image\"\n});\nconst insertImageCommand = $command(\n \"InsertImage\",\n (ctx) => (payload = {}) => (state, dispatch) => {\n if (!dispatch) return true;\n const { src = \"\", alt = \"\", title = \"\" } = payload;\n const node = imageSchema.type(ctx).create({ src, alt, title });\n if (!node) return true;\n dispatch(state.tr.replaceSelectionWith(node).scrollIntoView());\n return true;\n }\n);\nwithMeta(insertImageCommand, {\n displayName: \"Command<insertImageCommand>\",\n group: \"Image\"\n});\nconst updateImageCommand = $command(\n \"UpdateImage\",\n (ctx) => (payload = {}) => (state, dispatch) => {\n const nodeWithPos = findSelectedNodeOfType(\n state.selection,\n imageSchema.type(ctx)\n );\n if (!nodeWithPos) return false;\n const { node, pos } = nodeWithPos;\n const newAttrs = { ...node.attrs };\n const { src, alt, title } = payload;\n if (src !== void 0) newAttrs.src = src;\n if (alt !== void 0) newAttrs.alt = alt;\n if (title !== void 0) newAttrs.title = title;\n dispatch?.(\n state.tr.setNodeMarkup(pos, void 0, newAttrs).scrollIntoView()\n );\n return true;\n }\n);\nwithMeta(updateImageCommand, {\n displayName: \"Command<updateImageCommand>\",\n group: \"Image\"\n});\nconst insertImageInputRule = $inputRule(\n (ctx) => new InputRule(\n /!\\[(?<alt>.*?)]\\((?<filename>.*?)\\s*(?=\"|\\))\"?(?<title>[^\"]+)?\"?\\)/,\n (state, match, start, end) => {\n const [matched, alt, src = \"\", title] = match;\n if (matched)\n return state.tr.replaceWith(\n start,\n end,\n imageSchema.type(ctx).create({ src, alt, title })\n );\n return null;\n }\n )\n);\nwithMeta(insertImageInputRule, {\n displayName: \"InputRule<insertImageInputRule>\",\n group: \"Image\"\n});\nconst hardbreakAttr = $nodeAttr(\"hardbreak\", (node) => {\n return {\n \"data-type\": \"hardbreak\",\n \"data-is-inline\": node.attrs.isInline\n };\n});\nwithMeta(hardbreakAttr, {\n displayName: \"Attr<hardbreak>\",\n group: \"Hardbreak\"\n});\nconst hardbreakSchema = $nodeSchema(\"hardbreak\", (ctx) => ({\n inline: true,\n group: \"inline\",\n attrs: {\n isInline: {\n default: false,\n validate: \"boolean\"\n }\n },\n selectable: false,\n parseDOM: [\n { tag: \"br\" },\n {\n tag: 'span[data-type=\"hardbreak\"]',\n getAttrs: () => ({ isInline: true })\n }\n ],\n toDOM: (node) => node.attrs.isInline ? [\"span\", ctx.get(hardbreakAttr.key)(node), \" \"] : [\"br\", ctx.get(hardbreakAttr.key)(node)],\n parseMarkdown: {\n match: ({ type }) => type === \"break\",\n runner: (state, node, type) => {\n state.addNode(type, {\n isInline: Boolean(\n node.data?.isInline\n )\n });\n }\n },\n leafText: () => \"\\n\",\n toMarkdown: {\n match: (node) => node.type.name === \"hardbreak\",\n runner: (state, node) => {\n if (node.attrs.isInline) state.addNode(\"text\", void 0, \"\\n\");\n else state.addNode(\"break\");\n }\n }\n}));\nwithMeta(hardbreakSchema.node, {\n displayName: \"NodeSchema<hardbreak>\",\n group: \"Hardbreak\"\n});\nwithMeta(hardbreakSchema.ctx, {\n displayName: \"NodeSchemaCtx<hardbreak>\",\n group: \"Hardbreak\"\n});\nconst insertHardbreakCommand = $command(\n \"InsertHardbreak\",\n (ctx) => () => (state, dispatch) => {\n const { selection, tr } = state;\n if (!(selection instanceof TextSelection)) return false;\n if (selection.empty) {\n const node = selection.$from.node();\n if (node.childCount > 0 && node.lastChild?.type.name === \"hardbreak\") {\n dispatch?.(\n tr.replaceRangeWith(\n selection.to - 1,\n selection.to,\n state.schema.node(\"paragraph\")\n ).setSelection(Selection.near(tr.doc.resolve(selection.to))).scrollIntoView()\n );\n return true;\n }\n }\n dispatch?.(\n tr.setMeta(\"hardbreak\", true).replaceSelectionWith(hardbreakSchema.type(ctx).create()).scrollIntoView()\n );\n return true;\n }\n);\nwithMeta(insertHardbreakCommand, {\n displayName: \"Command<insertHardbreakCommand>\",\n group: \"Hardbreak\"\n});\nconst hardbreakKeymap = $useKeymap(\"hardbreakKeymap\", {\n InsertHardbreak: {\n shortcuts: \"Shift-Enter\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(insertHardbreakCommand.key);\n }\n }\n});\nwithMeta(hardbreakKeymap.ctx, {\n displayName: \"KeymapCtx<hardbreak>\",\n group: \"Hardbreak\"\n});\nwithMeta(hardbreakKeymap.shortcuts, {\n displayName: \"Keymap<hardbreak>\",\n group: \"Hardbreak\"\n});\nconst hrAttr = $nodeAttr(\"hr\");\nwithMeta(hrAttr, {\n displayName: \"Attr<hr>\",\n group: \"Hr\"\n});\nconst hrSchema = $nodeSchema(\"hr\", (ctx) => ({\n group: \"block\",\n parseDOM: [{ tag: \"hr\" }],\n toDOM: (node) => [\"hr\", ctx.get(hrAttr.key)(node)],\n parseMarkdown: {\n match: ({ type }) => type === \"thematicBreak\",\n runner: (state, _, type) => {\n state.addNode(type);\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"hr\",\n runner: (state) => {\n state.addNode(\"thematicBreak\");\n }\n }\n}));\nwithMeta(hrSchema.node, {\n displayName: \"NodeSchema<hr>\",\n group: \"Hr\"\n});\nwithMeta(hrSchema.ctx, {\n displayName: \"NodeSchemaCtx<hr>\",\n group: \"Hr\"\n});\nconst insertHrInputRule = $inputRule(\n (ctx) => new InputRule(/^(?:---|___\\s|\\*\\*\\*\\s)$/, (state, match, start, end) => {\n const { tr } = state;\n if (match[0]) tr.replaceWith(start - 1, end, hrSchema.type(ctx).create());\n return tr;\n })\n);\nwithMeta(insertHrInputRule, {\n displayName: \"InputRule<insertHrInputRule>\",\n group: \"Hr\"\n});\nconst insertHrCommand = $command(\n \"InsertHr\",\n (ctx) => () => (state, dispatch) => {\n if (!dispatch) return true;\n const paragraph = paragraphSchema.node.type(ctx).create();\n const { tr, selection } = state;\n const { from } = selection;\n const node = hrSchema.type(ctx).create();\n if (!node) return true;\n const _tr = tr.replaceSelectionWith(node).insert(from, paragraph);\n const sel = Selection.findFrom(_tr.doc.resolve(from), 1, true);\n if (!sel) return true;\n dispatch(_tr.setSelection(sel).scrollIntoView());\n return true;\n }\n);\nwithMeta(insertHrCommand, {\n displayName: \"Command<insertHrCommand>\",\n group: \"Hr\"\n});\nconst bulletListAttr = $nodeAttr(\"bulletList\");\nwithMeta(bulletListAttr, {\n displayName: \"Attr<bulletList>\",\n group: \"BulletList\"\n});\nconst bulletListSchema = $nodeSchema(\"bullet_list\", (ctx) => {\n return {\n content: \"listItem+\",\n group: \"block\",\n attrs: {\n spread: {\n default: false,\n validate: \"boolean\"\n }\n },\n parseDOM: [\n {\n tag: \"ul\",\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n spread: dom.dataset.spread === \"true\"\n };\n }\n }\n ],\n toDOM: (node) => {\n return [\n \"ul\",\n {\n ...ctx.get(bulletListAttr.key)(node),\n \"data-spread\": node.attrs.spread\n },\n 0\n ];\n },\n parseMarkdown: {\n match: ({ type, ordered }) => type === \"list\" && !ordered,\n runner: (state, node, type) => {\n const spread = node.spread != null ? `${node.spread}` : \"false\";\n state.openNode(type, { spread }).next(node.children).closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"bullet_list\",\n runner: (state, node) => {\n state.openNode(\"list\", void 0, {\n ordered: false,\n spread: node.attrs.spread\n }).next(node.content).closeNode();\n }\n }\n };\n});\nwithMeta(bulletListSchema.node, {\n displayName: \"NodeSchema<bulletList>\",\n group: \"BulletList\"\n});\nwithMeta(bulletListSchema.ctx, {\n displayName: \"NodeSchemaCtx<bulletList>\",\n group: \"BulletList\"\n});\nconst wrapInBulletListInputRule = $inputRule(\n (ctx) => wrappingInputRule(/^\\s*([-+*])\\s$/, bulletListSchema.type(ctx))\n);\nwithMeta(wrapInBulletListInputRule, {\n displayName: \"InputRule<wrapInBulletListInputRule>\",\n group: \"BulletList\"\n});\nconst wrapInBulletListCommand = $command(\n \"WrapInBulletList\",\n (ctx) => () => wrapIn(bulletListSchema.type(ctx))\n);\nwithMeta(wrapInBulletListCommand, {\n displayName: \"Command<wrapInBulletListCommand>\",\n group: \"BulletList\"\n});\nconst bulletListKeymap = $useKeymap(\"bulletListKeymap\", {\n WrapInBulletList: {\n shortcuts: \"Mod-Alt-8\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInBulletListCommand.key);\n }\n }\n});\nwithMeta(bulletListKeymap.ctx, {\n displayName: \"KeymapCtx<bulletListKeymap>\",\n group: \"BulletList\"\n});\nwithMeta(bulletListKeymap.shortcuts, {\n displayName: \"Keymap<bulletListKeymap>\",\n group: \"BulletList\"\n});\nconst orderedListAttr = $nodeAttr(\"orderedList\");\nwithMeta(orderedListAttr, {\n displayName: \"Attr<orderedList>\",\n group: \"OrderedList\"\n});\nconst orderedListSchema = $nodeSchema(\"ordered_list\", (ctx) => ({\n content: \"listItem+\",\n group: \"block\",\n attrs: {\n order: {\n default: 1,\n validate: \"number\"\n },\n spread: {\n default: false,\n validate: \"boolean\"\n }\n },\n parseDOM: [\n {\n tag: \"ol\",\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n spread: dom.dataset.spread,\n order: dom.hasAttribute(\"start\") ? Number(dom.getAttribute(\"start\")) : 1\n };\n }\n }\n ],\n toDOM: (node) => [\n \"ol\",\n {\n ...ctx.get(orderedListAttr.key)(node),\n ...node.attrs.order === 1 ? {} : node.attrs.order,\n \"data-spread\": node.attrs.spread\n },\n 0\n ],\n parseMarkdown: {\n match: ({ type, ordered }) => type === \"list\" && !!ordered,\n runner: (state, node, type) => {\n const spread = node.spread != null ? `${node.spread}` : \"true\";\n state.openNode(type, { spread }).next(node.children).closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"ordered_list\",\n runner: (state, node) => {\n state.openNode(\"list\", void 0, {\n ordered: true,\n start: 1,\n spread: node.attrs.spread === \"true\"\n });\n state.next(node.content);\n state.closeNode();\n }\n }\n}));\nwithMeta(orderedListSchema.node, {\n displayName: \"NodeSchema<orderedList>\",\n group: \"OrderedList\"\n});\nwithMeta(orderedListSchema.ctx, {\n displayName: \"NodeSchemaCtx<orderedList>\",\n group: \"OrderedList\"\n});\nconst wrapInOrderedListInputRule = $inputRule(\n (ctx) => wrappingInputRule(\n /^\\s*(\\d+)\\.\\s$/,\n orderedListSchema.type(ctx),\n (match) => ({ order: Number(match[1]) }),\n (match, node) => node.childCount + node.attrs.order === Number(match[1])\n )\n);\nwithMeta(wrapInOrderedListInputRule, {\n displayName: \"InputRule<wrapInOrderedListInputRule>\",\n group: \"OrderedList\"\n});\nconst wrapInOrderedListCommand = $command(\n \"WrapInOrderedList\",\n (ctx) => () => wrapIn(orderedListSchema.type(ctx))\n);\nwithMeta(wrapInOrderedListCommand, {\n displayName: \"Command<wrapInOrderedListCommand>\",\n group: \"OrderedList\"\n});\nconst orderedListKeymap = $useKeymap(\"orderedListKeymap\", {\n WrapInOrderedList: {\n shortcuts: \"Mod-Alt-7\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInOrderedListCommand.key);\n }\n }\n});\nwithMeta(orderedListKeymap.ctx, {\n displayName: \"KeymapCtx<orderedList>\",\n group: \"OrderedList\"\n});\nwithMeta(orderedListKeymap.shortcuts, {\n displayName: \"Keymap<orderedList>\",\n group: \"OrderedList\"\n});\nconst listItemAttr = $nodeAttr(\"listItem\");\nwithMeta(listItemAttr, {\n displayName: \"Attr<listItem>\",\n group: \"ListItem\"\n});\nconst listItemSchema = $nodeSchema(\"list_item\", (ctx) => ({\n group: \"listItem\",\n content: \"paragraph block*\",\n attrs: {\n label: {\n default: \"•\",\n validate: \"string\"\n },\n listType: {\n default: \"bullet\",\n validate: \"string\"\n },\n spread: {\n default: true,\n validate: \"boolean\"\n }\n },\n defining: true,\n parseDOM: [\n {\n tag: \"li\",\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n label: dom.dataset.label,\n listType: dom.dataset.listType,\n spread: dom.dataset.spread === \"true\"\n };\n }\n }\n ],\n toDOM: (node) => [\n \"li\",\n {\n ...ctx.get(listItemAttr.key)(node),\n \"data-label\": node.attrs.label,\n \"data-list-type\": node.attrs.listType,\n \"data-spread\": node.attrs.spread\n },\n 0\n ],\n parseMarkdown: {\n match: ({ type }) => type === \"listItem\",\n runner: (state, node, type) => {\n const label = node.label != null ? `${node.label}.` : \"•\";\n const listType = node.label != null ? \"ordered\" : \"bullet\";\n const spread = node.spread != null ? `${node.spread}` : \"true\";\n state.openNode(type, { label, listType, spread });\n state.next(node.children);\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"list_item\",\n runner: (state, node) => {\n state.openNode(\"listItem\", void 0, {\n spread: node.attrs.spread\n });\n state.next(node.content);\n state.closeNode();\n }\n }\n}));\nwithMeta(listItemSchema.node, {\n displayName: \"NodeSchema<listItem>\",\n group: \"ListItem\"\n});\nwithMeta(listItemSchema.ctx, {\n displayName: \"NodeSchemaCtx<listItem>\",\n group: \"ListItem\"\n});\nconst sinkListItemCommand = $command(\n \"SinkListItem\",\n (ctx) => () => sinkListItem(listItemSchema.type(ctx))\n);\nwithMeta(sinkListItemCommand, {\n displayName: \"Command<sinkListItemCommand>\",\n group: \"ListItem\"\n});\nconst liftListItemCommand = $command(\n \"LiftListItem\",\n (ctx) => () => liftListItem(listItemSchema.type(ctx))\n);\nwithMeta(liftListItemCommand, {\n displayName: \"Command<liftListItemCommand>\",\n group: \"ListItem\"\n});\nconst splitListItemCommand = $command(\n \"SplitListItem\",\n (ctx) => () => splitListItem(listItemSchema.type(ctx))\n);\nwithMeta(splitListItemCommand, {\n displayName: \"Command<splitListItemCommand>\",\n group: \"ListItem\"\n});\nfunction liftFirstListItem(ctx) {\n return (state, dispatch, view) => {\n const { selection } = state;\n if (!(selection instanceof TextSelection)) return false;\n const { empty, $from } = selection;\n if (!empty || $from.parentOffset !== 0) return false;\n const parentItem = $from.node(-1);\n if (parentItem.type !== listItemSchema.type(ctx)) return false;\n return joinBackward(state, dispatch, view);\n };\n}\nconst liftFirstListItemCommand = $command(\n \"LiftFirstListItem\",\n (ctx) => () => liftFirstListItem(ctx)\n);\nwithMeta(liftFirstListItemCommand, {\n displayName: \"Command<liftFirstListItemCommand>\",\n group: \"ListItem\"\n});\nconst listItemKeymap = $useKeymap(\"listItemKeymap\", {\n NextListItem: {\n shortcuts: \"Enter\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(splitListItemCommand.key);\n }\n },\n SinkListItem: {\n shortcuts: [\"Tab\", \"Mod-]\"],\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(sinkListItemCommand.key);\n }\n },\n LiftListItem: {\n shortcuts: [\"Shift-Tab\", \"Mod-[\"],\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(liftListItemCommand.key);\n }\n },\n LiftFirstListItem: {\n shortcuts: [\"Backspace\", \"Delete\"],\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(liftFirstListItemCommand.key);\n }\n }\n});\nwithMeta(listItemKeymap.ctx, {\n displayName: \"KeymapCtx<listItem>\",\n group: \"ListItem\"\n});\nwithMeta(listItemKeymap.shortcuts, {\n displayName: \"Keymap<listItem>\",\n group: \"ListItem\"\n});\nconst textSchema = $node(\"text\", () => ({\n group: \"inline\",\n parseMarkdown: {\n match: ({ type }) => type === \"text\",\n runner: (state, node) => {\n state.addText(node.value);\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"text\",\n runner: (state, node) => {\n state.addNode(\"text\", void 0, node.text);\n }\n }\n}));\nwithMeta(textSchema, {\n displayName: \"NodeSchema<text>\",\n group: \"Text\"\n});\nconst htmlAttr = $nodeAttr(\"html\");\nwithMeta(htmlAttr, {\n displayName: \"Attr<html>\",\n group: \"Html\"\n});\nconst htmlSchema = $nodeSchema(\"html\", (ctx) => {\n return {\n atom: true,\n group: \"inline\",\n inline: true,\n attrs: {\n value: {\n default: \"\",\n validate: \"string\"\n }\n },\n toDOM: (node) => {\n const span = document.createElement(\"span\");\n const attr = {\n ...ctx.get(htmlAttr.key)(node),\n \"data-value\": node.attrs.value,\n \"data-type\": \"html\"\n };\n span.textContent = node.attrs.value;\n return [\"span\", attr, node.attrs.value];\n },\n parseDOM: [\n {\n tag: 'span[data-type=\"html\"]',\n getAttrs: (dom) => {\n return {\n value: dom.dataset.value ?? \"\"\n };\n }\n }\n ],\n parseMarkdown: {\n match: ({ type }) => Boolean(type === \"html\"),\n runner: (state, node, type) => {\n state.addNode(type, { value: node.value });\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"html\",\n runner: (state, node) => {\n state.addNode(\"html\", void 0, node.attrs.value);\n }\n }\n };\n});\nwithMeta(htmlSchema.node, {\n displayName: \"NodeSchema<html>\",\n group: \"Html\"\n});\nwithMeta(htmlSchema.ctx, {\n displayName: \"NodeSchemaCtx<html>\",\n group: \"Html\"\n});\nconst schema = [\n docSchema,\n paragraphAttr,\n paragraphSchema,\n headingIdGenerator,\n headingAttr,\n headingSchema,\n hardbreakAttr,\n hardbreakSchema,\n blockquoteAttr,\n blockquoteSchema,\n codeBlockAttr,\n codeBlockSchema,\n hrAttr,\n hrSchema,\n imageAttr,\n imageSchema,\n bulletListAttr,\n bulletListSchema,\n orderedListAttr,\n orderedListSchema,\n listItemAttr,\n listItemSchema,\n emphasisAttr,\n emphasisSchema,\n strongAttr,\n strongSchema,\n inlineCodeAttr,\n inlineCodeSchema,\n linkAttr,\n linkSchema,\n htmlAttr,\n htmlSchema,\n textSchema\n].flat();\nconst inputRules = [\n wrapInBlockquoteInputRule,\n wrapInBulletListInputRule,\n wrapInOrderedListInputRule,\n createCodeBlockInputRule,\n insertHrInputRule,\n wrapInHeadingInputRule\n].flat();\nconst markInputRules = [\n emphasisStarInputRule,\n emphasisUnderscoreInputRule,\n inlineCodeInputRule,\n strongInputRule\n];\nconst isMarkSelectedCommand = $command(\n \"IsMarkSelected\",\n () => (markType) => (state) => {\n if (!markType) return false;\n const { doc, selection } = state;\n const hasLink = doc.rangeHasMark(selection.from, selection.to, markType);\n return hasLink;\n }\n);\nconst isNodeSelectedCommand = $command(\n \"IsNoteSelected\",\n () => (nodeType) => (state) => {\n if (!nodeType) return false;\n const result = findNodeInSelection(state, nodeType);\n return result.hasNode;\n }\n);\nconst clearTextInCurrentBlockCommand = $command(\n \"ClearTextInCurrentBlock\",\n () => () => (state, dispatch) => {\n let tr = state.tr;\n const { $from, $to } = tr.selection;\n const { pos: from } = $from;\n const { pos: right } = $to;\n const left = from - $from.node().content.size;\n if (left < 0) return false;\n tr = tr.deleteRange(left, right);\n dispatch?.(tr);\n return true;\n }\n);\nconst setBlockTypeCommand = $command(\n \"SetBlockType\",\n () => (payload) => (state, dispatch) => {\n const { nodeType, attrs = null } = payload ?? {};\n if (!nodeType) return false;\n const tr = state.tr;\n const { from, to } = tr.selection;\n try {\n tr.setBlockType(from, to, nodeType, attrs);\n } catch {\n return false;\n }\n dispatch?.(tr);\n return true;\n }\n);\nconst wrapInBlockTypeCommand = $command(\n \"WrapInBlockType\",\n () => (payload) => (state, dispatch) => {\n const { nodeType, attrs = null } = payload ?? {};\n if (!nodeType) return false;\n let tr = state.tr;\n try {\n const { $from, $to } = tr.selection;\n const blockRange = $from.blockRange($to);\n const wrapping = blockRange && findWrapping(blockRange, nodeType, attrs);\n if (!wrapping) return false;\n tr = tr.wrap(blockRange, wrapping);\n } catch {\n return false;\n }\n dispatch?.(tr);\n return true;\n }\n);\nconst addBlockTypeCommand = $command(\n \"AddBlockType\",\n () => (payload) => (state, dispatch) => {\n const { nodeType, attrs = null } = payload ?? {};\n if (!nodeType) return false;\n const tr = state.tr;\n try {\n const node = nodeType instanceof Node ? nodeType : nodeType.createAndFill(attrs);\n if (!node) return false;\n tr.replaceSelectionWith(node);\n } catch {\n return false;\n }\n dispatch?.(tr);\n return true;\n }\n);\nconst selectTextNearPosCommand = $command(\n \"SelectTextNearPos\",\n () => (payload) => (state, dispatch) => {\n const { pos } = payload ?? {};\n if (pos == null) return false;\n const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n const tr = state.tr;\n try {\n const $pos = state.doc.resolve(clamp(pos, 0, state.doc.content.size));\n tr.setSelection(TextSelection.near($pos));\n } catch {\n return false;\n }\n dispatch?.(tr.scrollIntoView());\n return true;\n }\n);\nconst commands = [\n turnIntoTextCommand,\n wrapInBlockquoteCommand,\n wrapInHeadingCommand,\n downgradeHeadingCommand,\n createCodeBlockCommand,\n insertHardbreakCommand,\n insertHrCommand,\n insertImageCommand,\n updateImageCommand,\n wrapInOrderedListCommand,\n wrapInBulletListCommand,\n sinkListItemCommand,\n splitListItemCommand,\n liftListItemCommand,\n liftFirstListItemCommand,\n toggleEmphasisCommand,\n toggleInlineCodeCommand,\n toggleStrongCommand,\n toggleLinkCommand,\n updateLinkCommand,\n isMarkSelectedCommand,\n isNodeSelectedCommand,\n clearTextInCurrentBlockCommand,\n setBlockTypeCommand,\n wrapInBlockTypeCommand,\n addBlockTypeCommand,\n selectTextNearPosCommand\n];\nconst keymap = [\n blockquoteKeymap,\n codeBlockKeymap,\n hardbreakKeymap,\n headingKeymap,\n listItemKeymap,\n orderedListKeymap,\n bulletListKeymap,\n paragraphKeymap,\n emphasisKeymap,\n inlineCodeKeymap,\n strongKeymap\n].flat();\nconst remarkAddOrderInListPlugin = $remark(\n \"remarkAddOrderInList\",\n () => () => (tree) => {\n visit(tree, \"list\", (node) => {\n if (node.ordered) {\n const start = node.start ?? 1;\n node.children.forEach((child, index) => {\n child.label = index + start;\n });\n }\n });\n }\n);\nwithMeta(remarkAddOrderInListPlugin.plugin, {\n displayName: \"Remark<remarkAddOrderInListPlugin>\",\n group: \"Remark\"\n});\nwithMeta(remarkAddOrderInListPlugin.options, {\n displayName: \"RemarkConfig<remarkAddOrderInListPlugin>\",\n group: \"Remark\"\n});\nconst remarkLineBreak = $remark(\n \"remarkLineBreak\",\n () => () => (tree) => {\n const find = /[\\t ]*(?:\\r?\\n|\\r)/g;\n visit(\n tree,\n \"text\",\n (node, index, parent) => {\n if (!node.value || typeof node.value !== \"string\") return;\n const result = [];\n let start = 0;\n find.lastIndex = 0;\n let match = find.exec(node.value);\n while (match) {\n const position = match.index;\n if (start !== position)\n result.push({\n type: \"text\",\n value: node.value.slice(start, position)\n });\n result.push({ type: \"break\", data: { isInline: true } });\n start = position + match[0].length;\n match = find.exec(node.value);\n }\n const hasResultAndIndex = result.length > 0 && parent && typeof index === \"number\";\n if (!hasResultAndIndex) return;\n if (start < node.value.length)\n result.push({ type: \"text\", value: node.value.slice(start) });\n parent.children.splice(index, 1, ...result);\n return index + result.length;\n }\n );\n }\n);\nwithMeta(remarkLineBreak.plugin, {\n displayName: \"Remark<remarkLineBreak>\",\n group: \"Remark\"\n});\nwithMeta(remarkLineBreak.options, {\n displayName: \"RemarkConfig<remarkLineBreak>\",\n group: \"Remark\"\n});\nconst remarkInlineLinkPlugin = $remark(\n \"remarkInlineLink\",\n () => remarkInlineLinks\n);\nwithMeta(remarkInlineLinkPlugin.plugin, {\n displayName: \"Remark<remarkInlineLinkPlugin>\",\n group: \"Remark\"\n});\nwithMeta(remarkInlineLinkPlugin.options, {\n displayName: \"RemarkConfig<remarkInlineLinkPlugin>\",\n group: \"Remark\"\n});\nconst isParent = (node) => !!node.children;\nconst isHTML = (node) => node.type === \"html\";\nfunction flatMapWithDepth(ast, fn) {\n return transform(ast, 0, null)[0];\n function transform(node, index, parent) {\n if (isParent(node)) {\n const out = [];\n for (let i = 0, n = node.children.length; i < n; i++) {\n const nthChild = node.children[i];\n if (nthChild) {\n const xs = transform(nthChild, i, node);\n if (xs) {\n for (let j = 0, m = xs.length; j < m; j++) {\n const item = xs[j];\n if (item) out.push(item);\n }\n }\n }\n }\n node.children = out;\n }\n return fn(node, index, parent);\n }\n}\nconst BLOCK_CONTAINER_TYPES = [\"root\", \"blockquote\", \"listItem\"];\nconst remarkHtmlTransformer = $remark(\n \"remarkHTMLTransformer\",\n () => () => (tree) => {\n flatMapWithDepth(tree, (node, _index, parent) => {\n if (!isHTML(node)) return [node];\n if (parent && BLOCK_CONTAINER_TYPES.includes(parent.type)) {\n node.children = [{ ...node }];\n delete node.value;\n node.type = \"paragraph\";\n }\n return [node];\n });\n }\n);\nwithMeta(remarkHtmlTransformer.plugin, {\n displayName: \"Remark<remarkHtmlTransformer>\",\n group: \"Remark\"\n});\nwithMeta(remarkHtmlTransformer.options, {\n displayName: \"RemarkConfig<remarkHtmlTransformer>\",\n group: \"Remark\"\n});\nconst remarkMarker = $remark(\n \"remarkMarker\",\n () => () => (tree, file) => {\n const getMarker = (node) => {\n return file.value.charAt(node.position.start.offset);\n };\n visit(\n tree,\n (node) => [\"strong\", \"emphasis\"].includes(node.type),\n (node) => {\n node.marker = getMarker(node);\n }\n );\n }\n);\nwithMeta(remarkMarker.plugin, {\n displayName: \"Remark<remarkMarker>\",\n group: \"Remark\"\n});\nwithMeta(remarkMarker.options, {\n displayName: \"RemarkConfig<remarkMarker>\",\n group: \"Remark\"\n});\nconst inlineNodesCursorPlugin = $prose(() => {\n let lock = false;\n const inlineNodesCursorPluginKey = new PluginKey(\n \"MILKDOWN_INLINE_NODES_CURSOR\"\n );\n const inlineNodesCursorPlugin2 = new Plugin({\n key: inlineNodesCursorPluginKey,\n state: {\n init() {\n return false;\n },\n apply(tr) {\n if (!tr.selection.empty) return false;\n const pos = tr.selection.$from;\n const left = pos.nodeBefore;\n const right = pos.nodeAfter;\n if (left && right && left.isInline && !left.isText && right.isInline && !right.isText)\n return true;\n return false;\n }\n },\n props: {\n handleDOMEvents: {\n compositionend: (view, e) => {\n if (lock) {\n lock = false;\n requestAnimationFrame(() => {\n const active = inlineNodesCursorPlugin2.getState(view.state);\n if (active) {\n const from = view.state.selection.from;\n e.preventDefault();\n view.dispatch(view.state.tr.insertText(e.data || \"\", from));\n }\n });\n return true;\n }\n return false;\n },\n compositionstart: (view) => {\n const active = inlineNodesCursorPlugin2.getState(view.state);\n if (active) lock = true;\n return false;\n },\n beforeinput: (view, e) => {\n const active = inlineNodesCursorPlugin2.getState(view.state);\n if (active && e instanceof InputEvent && e.data && !lock) {\n const from = view.state.selection.from;\n e.preventDefault();\n view.dispatch(view.state.tr.insertText(e.data || \"\", from));\n return true;\n }\n return false;\n }\n },\n decorations(state) {\n const active = inlineNodesCursorPlugin2.getState(state);\n if (active) {\n const pos = state.selection.$from;\n const position = pos.pos;\n const left = document.createElement(\"span\");\n const leftDec = Decoration.widget(position, left, {\n side: -1\n });\n const right = document.createElement(\"span\");\n const rightDec = Decoration.widget(position, right);\n setTimeout(() => {\n left.contentEditable = \"true\";\n right.contentEditable = \"true\";\n });\n return DecorationSet.create(state.doc, [leftDec, rightDec]);\n }\n return DecorationSet.empty;\n }\n }\n });\n return inlineNodesCursorPlugin2;\n});\nwithMeta(inlineNodesCursorPlugin, {\n displayName: \"Prose<inlineNodesCursorPlugin>\",\n group: \"Prose\"\n});\nconst hardbreakClearMarkPlugin = $prose((ctx) => {\n return new Plugin({\n key: new PluginKey(\"MILKDOWN_HARDBREAK_MARKS\"),\n appendTransaction: (trs, _oldState, newState) => {\n if (!trs.length) return;\n const [tr] = trs;\n if (!tr) return;\n const [step] = tr.steps;\n const isInsertHr = tr.getMeta(\"hardbreak\");\n if (isInsertHr) {\n if (!(step instanceof ReplaceStep)) return;\n const { from } = step;\n return newState.tr.setNodeMarkup(\n from,\n hardbreakSchema.type(ctx),\n void 0,\n []\n );\n }\n const isAddMarkStep = step instanceof AddMarkStep;\n if (isAddMarkStep) {\n let _tr = newState.tr;\n const { from, to } = step;\n newState.doc.nodesBetween(from, to, (node, pos) => {\n if (node.type === hardbreakSchema.type(ctx))\n _tr = _tr.setNodeMarkup(\n pos,\n hardbreakSchema.type(ctx),\n void 0,\n []\n );\n });\n return _tr;\n }\n return void 0;\n }\n });\n});\nwithMeta(hardbreakClearMarkPlugin, {\n displayName: \"Prose<hardbreakClearMarkPlugin>\",\n group: \"Prose\"\n});\nconst hardbreakFilterNodes = $ctx(\n [\"table\", \"code_block\"],\n \"hardbreakFilterNodes\"\n);\nwithMeta(hardbreakFilterNodes, {\n displayName: \"Ctx<hardbreakFilterNodes>\",\n group: \"Prose\"\n});\nconst hardbreakFilterPlugin = $prose((ctx) => {\n const notIn = ctx.get(hardbreakFilterNodes.key);\n return new Plugin({\n key: new PluginKey(\"MILKDOWN_HARDBREAK_FILTER\"),\n filterTransaction: (tr, state) => {\n const isInsertHr = tr.getMeta(\"hardbreak\");\n const [step] = tr.steps;\n if (isInsertHr && step) {\n const { from } = step;\n const $from = state.doc.resolve(from);\n let curDepth = $from.depth;\n let canApply = true;\n while (curDepth > 0) {\n if (notIn.includes($from.node(curDepth).type.name)) canApply = false;\n curDepth--;\n }\n return canApply;\n }\n return true;\n }\n });\n});\nwithMeta(hardbreakFilterPlugin, {\n displayName: \"Prose<hardbreakFilterPlugin>\",\n group: \"Prose\"\n});\nconst syncHeadingIdPlugin = $prose((ctx) => {\n const headingIdPluginKey = new PluginKey(\"MILKDOWN_HEADING_ID\");\n const updateId = (view) => {\n if (view.composing) return;\n const getId = ctx.get(headingIdGenerator.key);\n const tr = view.state.tr.setMeta(\"addToHistory\", false);\n let found = false;\n const idMap = {};\n view.state.doc.descendants((node, pos) => {\n if (node.type === headingSchema.type(ctx)) {\n if (node.textContent.trim().length === 0) return;\n const attrs = node.attrs;\n let id = getId(node);\n if (idMap[id]) {\n idMap[id] += 1;\n id += `-#${idMap[id]}`;\n } else {\n idMap[id] = 1;\n }\n if (attrs.id !== id) {\n found = true;\n tr.setMeta(headingIdPluginKey, true).setNodeMarkup(pos, void 0, {\n ...attrs,\n id\n });\n }\n }\n });\n if (found) view.dispatch(tr);\n };\n return new Plugin({\n key: headingIdPluginKey,\n view: (view) => {\n updateId(view);\n return {\n update: (view2, prevState) => {\n if (view2.state.doc.eq(prevState.doc)) return;\n updateId(view2);\n }\n };\n }\n });\n});\nwithMeta(syncHeadingIdPlugin, {\n displayName: \"Prose<syncHeadingIdPlugin>\",\n group: \"Prose\"\n});\nconst syncListOrderPlugin = $prose((ctx) => {\n const syncOrderLabel = (transactions, _oldState, newState) => {\n if (!newState.selection || transactions.some(\n (tr2) => tr2.getMeta(\"addToHistory\") === false || !tr2.isGeneric\n ))\n return null;\n const orderedListType = orderedListSchema.type(ctx);\n const bulletListType = bulletListSchema.type(ctx);\n const listItemType = listItemSchema.type(ctx);\n const handleNodeItem = (attrs, index) => {\n let changed = false;\n const expectedLabel = `${index + 1}.`;\n if (attrs.label !== expectedLabel) {\n attrs.label = expectedLabel;\n changed = true;\n }\n return changed;\n };\n let tr = newState.tr;\n let needDispatch = false;\n newState.doc.descendants(\n (node, pos, parent, index) => {\n if (node.type === bulletListType) {\n const base = node.maybeChild(0);\n if (base?.type === listItemType && base.attrs.listType === \"ordered\") {\n needDispatch = true;\n tr.setNodeMarkup(pos, orderedListType, { spread: \"true\" });\n node.descendants(\n (child, pos2, _parent, index2) => {\n if (child.type === listItemType) {\n const attrs = { ...child.attrs };\n const changed = handleNodeItem(attrs, index2);\n if (changed) tr = tr.setNodeMarkup(pos2, void 0, attrs);\n }\n return false;\n }\n );\n }\n } else if (node.type === listItemType && parent?.type === orderedListType) {\n const attrs = { ...node.attrs };\n let changed = false;\n if (attrs.listType !== \"ordered\") {\n attrs.listType = \"ordered\";\n changed = true;\n }\n const base = parent?.maybeChild(0);\n if (base) changed = handleNodeItem(attrs, index);\n if (changed) {\n tr = tr.setNodeMarkup(pos, void 0, attrs);\n needDispatch = true;\n }\n }\n }\n );\n return needDispatch ? tr.setMeta(\"addToHistory\", false) : null;\n };\n return new Plugin({\n key: new PluginKey(\"MILKDOWN_KEEP_LIST_ORDER\"),\n appendTransaction: syncOrderLabel\n });\n});\nwithMeta(syncListOrderPlugin, {\n displayName: \"Prose<syncListOrderPlugin>\",\n group: \"Prose\"\n});\nconst plugins = [\n hardbreakClearMarkPlugin,\n hardbreakFilterNodes,\n hardbreakFilterPlugin,\n inlineNodesCursorPlugin,\n remarkAddOrderInListPlugin,\n remarkInlineLinkPlugin,\n remarkLineBreak,\n remarkHtmlTransformer,\n remarkMarker,\n remarkPreserveEmptyLinePlugin,\n syncHeadingIdPlugin,\n syncListOrderPlugin\n].flat();\nconst commonmark = [\n schema,\n inputRules,\n markInputRules,\n commands,\n keymap,\n plugins\n].flat();\nexport {\n addBlockTypeCommand,\n blockquoteAttr,\n blockquoteKeymap,\n blockquoteSchema,\n bulletListAttr,\n bulletListKeymap,\n bulletListSchema,\n clearTextInCurrentBlockCommand,\n codeBlockAttr,\n codeBlockKeymap,\n codeBlockSchema,\n commands,\n commonmark,\n createCodeBlockCommand,\n createCodeBlockInputRule,\n docSchema,\n downgradeHeadingCommand,\n emphasisAttr,\n emphasisKeymap,\n emphasisSchema,\n emphasisStarInputRule,\n emphasisUnderscoreInputRule,\n hardbreakAttr,\n hardbreakClearMarkPlugin,\n hardbreakFilterNodes,\n hardbreakFilterPlugin,\n hardbreakKeymap,\n hardbreakSchema,\n headingAttr,\n headingIdGenerator,\n headingKeymap,\n headingSchema,\n hrAttr,\n hrSchema,\n htmlAttr,\n htmlSchema,\n imageAttr,\n imageSchema,\n inlineCodeAttr,\n inlineCodeInputRule,\n inlineCodeKeymap,\n inlineCodeSchema,\n inlineNodesCursorPlugin,\n inputRules,\n insertHardbreakCommand,\n insertHrCommand,\n insertHrInputRule,\n insertImageCommand,\n insertImageInputRule,\n isMarkSelectedCommand,\n isNodeSelectedCommand,\n keymap,\n liftFirstListItemCommand,\n liftListItemCommand,\n linkAttr,\n linkSchema,\n listItemAttr,\n listItemKeymap,\n listItemSchema,\n markInputRules,\n orderedListAttr,\n orderedListKeymap,\n orderedListSchema,\n paragraphAttr,\n paragraphKeymap,\n paragraphSchema,\n plugins,\n remarkAddOrderInListPlugin,\n remarkHtmlTransformer,\n remarkInlineLinkPlugin,\n remarkLineBreak,\n remarkMarker,\n remarkPreserveEmptyLinePlugin,\n schema,\n selectTextNearPosCommand,\n setBlockTypeCommand,\n sinkListItemCommand,\n splitListItemCommand,\n strongAttr,\n strongInputRule,\n strongKeymap,\n strongSchema,\n syncHeadingIdPlugin,\n syncListOrderPlugin,\n textSchema,\n toggleEmphasisCommand,\n toggleInlineCodeCommand,\n toggleLinkCommand,\n toggleStrongCommand,\n turnIntoTextCommand,\n updateCodeBlockLanguageCommand,\n updateImageCommand,\n updateLinkCommand,\n wrapInBlockTypeCommand,\n wrapInBlockquoteCommand,\n wrapInBlockquoteInputRule,\n wrapInBulletListCommand,\n wrapInBulletListInputRule,\n wrapInHeadingCommand,\n wrapInHeadingInputRule,\n wrapInOrderedListCommand,\n wrapInOrderedListInputRule\n};\n//# sourceMappingURL=index.js.map\n","import { NodeSelection, Plugin, PluginKey, Selection, SelectionRange, TextSelection } from \"prosemirror-state\";\nimport { Fragment, Slice } from \"prosemirror-model\";\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\nimport { keydownHandler } from \"prosemirror-keymap\";\nimport { Transform } from \"prosemirror-transform\";\n\n//#region src/tablemap.ts\nlet readFromCache;\nlet addToCache;\nif (typeof WeakMap != \"undefined\") {\n\tlet cache = /* @__PURE__ */ new WeakMap();\n\treadFromCache = (key) => cache.get(key);\n\taddToCache = (key, value) => {\n\t\tcache.set(key, value);\n\t\treturn value;\n\t};\n} else {\n\tconst cache = [];\n\tconst cacheSize = 10;\n\tlet cachePos = 0;\n\treadFromCache = (key) => {\n\t\tfor (let i = 0; i < cache.length; i += 2) if (cache[i] == key) return cache[i + 1];\n\t};\n\taddToCache = (key, value) => {\n\t\tif (cachePos == cacheSize) cachePos = 0;\n\t\tcache[cachePos++] = key;\n\t\treturn cache[cachePos++] = value;\n\t};\n}\n/**\n* A table map describes the structure of a given table. To avoid\n* recomputing them all the time, they are cached per table node. To\n* be able to do that, positions saved in the map are relative to the\n* start of the table, rather than the start of the document.\n*\n* @public\n*/\nvar TableMap = class {\n\tconstructor(width, height, map, problems) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.map = map;\n\t\tthis.problems = problems;\n\t}\n\tfindCell(pos) {\n\t\tfor (let i = 0; i < this.map.length; i++) {\n\t\t\tconst curPos = this.map[i];\n\t\t\tif (curPos != pos) continue;\n\t\t\tconst left = i % this.width;\n\t\t\tconst top = i / this.width | 0;\n\t\t\tlet right = left + 1;\n\t\t\tlet bottom = top + 1;\n\t\t\tfor (let j = 1; right < this.width && this.map[i + j] == curPos; j++) right++;\n\t\t\tfor (let j = 1; bottom < this.height && this.map[i + this.width * j] == curPos; j++) bottom++;\n\t\t\treturn {\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\tright,\n\t\t\t\tbottom\n\t\t\t};\n\t\t}\n\t\tthrow new RangeError(`No cell with offset ${pos} found`);\n\t}\n\tcolCount(pos) {\n\t\tfor (let i = 0; i < this.map.length; i++) if (this.map[i] == pos) return i % this.width;\n\t\tthrow new RangeError(`No cell with offset ${pos} found`);\n\t}\n\tnextCell(pos, axis, dir) {\n\t\tconst { left, right, top, bottom } = this.findCell(pos);\n\t\tif (axis == \"horiz\") {\n\t\t\tif (dir < 0 ? left == 0 : right == this.width) return null;\n\t\t\treturn this.map[top * this.width + (dir < 0 ? left - 1 : right)];\n\t\t} else {\n\t\t\tif (dir < 0 ? top == 0 : bottom == this.height) return null;\n\t\t\treturn this.map[left + this.width * (dir < 0 ? top - 1 : bottom)];\n\t\t}\n\t}\n\trectBetween(a, b) {\n\t\tconst { left: leftA, right: rightA, top: topA, bottom: bottomA } = this.findCell(a);\n\t\tconst { left: leftB, right: rightB, top: topB, bottom: bottomB } = this.findCell(b);\n\t\treturn {\n\t\t\tleft: Math.min(leftA, leftB),\n\t\t\ttop: Math.min(topA, topB),\n\t\t\tright: Math.max(rightA, rightB),\n\t\t\tbottom: Math.max(bottomA, bottomB)\n\t\t};\n\t}\n\tcellsInRect(rect) {\n\t\tconst result = [];\n\t\tconst seen = {};\n\t\tfor (let row = rect.top; row < rect.bottom; row++) for (let col = rect.left; col < rect.right; col++) {\n\t\t\tconst index = row * this.width + col;\n\t\t\tconst pos = this.map[index];\n\t\t\tif (seen[pos]) continue;\n\t\t\tseen[pos] = true;\n\t\t\tif (col == rect.left && col && this.map[index - 1] == pos || row == rect.top && row && this.map[index - this.width] == pos) continue;\n\t\t\tresult.push(pos);\n\t\t}\n\t\treturn result;\n\t}\n\tpositionAt(row, col, table) {\n\t\tfor (let i = 0, rowStart = 0;; i++) {\n\t\t\tconst rowEnd = rowStart + table.child(i).nodeSize;\n\t\t\tif (i == row) {\n\t\t\t\tlet index = col + row * this.width;\n\t\t\t\tconst rowEndIndex = (row + 1) * this.width;\n\t\t\t\twhile (index < rowEndIndex && this.map[index] < rowStart) index++;\n\t\t\t\treturn index == rowEndIndex ? rowEnd - 1 : this.map[index];\n\t\t\t}\n\t\t\trowStart = rowEnd;\n\t\t}\n\t}\n\tstatic get(table) {\n\t\treturn readFromCache(table) || addToCache(table, computeMap(table));\n\t}\n};\nfunction computeMap(table) {\n\tif (table.type.spec.tableRole != \"table\") throw new RangeError(\"Not a table node: \" + table.type.name);\n\tconst width = findWidth(table), height = table.childCount;\n\tconst map = [];\n\tlet mapPos = 0;\n\tlet problems = null;\n\tconst colWidths = [];\n\tfor (let i = 0, e = width * height; i < e; i++) map[i] = 0;\n\tfor (let row = 0, pos = 0; row < height; row++) {\n\t\tconst rowNode = table.child(row);\n\t\tpos++;\n\t\tfor (let i = 0;; i++) {\n\t\t\twhile (mapPos < map.length && map[mapPos] != 0) mapPos++;\n\t\t\tif (i == rowNode.childCount) break;\n\t\t\tconst cellNode = rowNode.child(i);\n\t\t\tconst { colspan, rowspan, colwidth } = cellNode.attrs;\n\t\t\tfor (let h = 0; h < rowspan; h++) {\n\t\t\t\tif (h + row >= height) {\n\t\t\t\t\t(problems || (problems = [])).push({\n\t\t\t\t\t\ttype: \"overlong_rowspan\",\n\t\t\t\t\t\tpos,\n\t\t\t\t\t\tn: rowspan - h\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst start = mapPos + h * width;\n\t\t\t\tfor (let w = 0; w < colspan; w++) {\n\t\t\t\t\tif (map[start + w] == 0) map[start + w] = pos;\n\t\t\t\t\telse (problems || (problems = [])).push({\n\t\t\t\t\t\ttype: \"collision\",\n\t\t\t\t\t\trow,\n\t\t\t\t\t\tpos,\n\t\t\t\t\t\tn: colspan - w\n\t\t\t\t\t});\n\t\t\t\t\tconst colW = colwidth && colwidth[w];\n\t\t\t\t\tif (colW) {\n\t\t\t\t\t\tconst widthIndex = (start + w) % width * 2, prev = colWidths[widthIndex];\n\t\t\t\t\t\tif (prev == null || prev != colW && colWidths[widthIndex + 1] == 1) {\n\t\t\t\t\t\t\tcolWidths[widthIndex] = colW;\n\t\t\t\t\t\t\tcolWidths[widthIndex + 1] = 1;\n\t\t\t\t\t\t} else if (prev == colW) colWidths[widthIndex + 1]++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmapPos += colspan;\n\t\t\tpos += cellNode.nodeSize;\n\t\t}\n\t\tconst expectedPos = (row + 1) * width;\n\t\tlet missing = 0;\n\t\twhile (mapPos < expectedPos) if (map[mapPos++] == 0) missing++;\n\t\tif (missing) (problems || (problems = [])).push({\n\t\t\ttype: \"missing\",\n\t\t\trow,\n\t\t\tn: missing\n\t\t});\n\t\tpos++;\n\t}\n\tif (width === 0 || height === 0) (problems || (problems = [])).push({ type: \"zero_sized\" });\n\tconst tableMap = new TableMap(width, height, map, problems);\n\tlet badWidths = false;\n\tfor (let i = 0; !badWidths && i < colWidths.length; i += 2) if (colWidths[i] != null && colWidths[i + 1] < height) badWidths = true;\n\tif (badWidths) findBadColWidths(tableMap, colWidths, table);\n\treturn tableMap;\n}\nfunction findWidth(table) {\n\tlet width = -1;\n\tlet hasRowSpan = false;\n\tfor (let row = 0; row < table.childCount; row++) {\n\t\tconst rowNode = table.child(row);\n\t\tlet rowWidth = 0;\n\t\tif (hasRowSpan) for (let j = 0; j < row; j++) {\n\t\t\tconst prevRow = table.child(j);\n\t\t\tfor (let i = 0; i < prevRow.childCount; i++) {\n\t\t\t\tconst cell = prevRow.child(i);\n\t\t\t\tif (j + cell.attrs.rowspan > row) rowWidth += cell.attrs.colspan;\n\t\t\t}\n\t\t}\n\t\tfor (let i = 0; i < rowNode.childCount; i++) {\n\t\t\tconst cell = rowNode.child(i);\n\t\t\trowWidth += cell.attrs.colspan;\n\t\t\tif (cell.attrs.rowspan > 1) hasRowSpan = true;\n\t\t}\n\t\tif (width == -1) width = rowWidth;\n\t\telse if (width != rowWidth) width = Math.max(width, rowWidth);\n\t}\n\treturn width;\n}\nfunction findBadColWidths(map, colWidths, table) {\n\tif (!map.problems) map.problems = [];\n\tconst seen = {};\n\tfor (let i = 0; i < map.map.length; i++) {\n\t\tconst pos = map.map[i];\n\t\tif (seen[pos]) continue;\n\t\tseen[pos] = true;\n\t\tconst node = table.nodeAt(pos);\n\t\tif (!node) throw new RangeError(`No cell with offset ${pos} found`);\n\t\tlet updated = null;\n\t\tconst attrs = node.attrs;\n\t\tfor (let j = 0; j < attrs.colspan; j++) {\n\t\t\tconst colWidth = colWidths[(i + j) % map.width * 2];\n\t\t\tif (colWidth != null && (!attrs.colwidth || attrs.colwidth[j] != colWidth)) (updated || (updated = freshColWidth(attrs)))[j] = colWidth;\n\t\t}\n\t\tif (updated) map.problems.unshift({\n\t\t\ttype: \"colwidth mismatch\",\n\t\t\tpos,\n\t\t\tcolwidth: updated\n\t\t});\n\t}\n}\nfunction freshColWidth(attrs) {\n\tif (attrs.colwidth) return attrs.colwidth.slice();\n\tconst result = [];\n\tfor (let i = 0; i < attrs.colspan; i++) result.push(0);\n\treturn result;\n}\n\n//#endregion\n//#region src/schema.ts\nfunction getCellAttrs(dom, extraAttrs) {\n\tif (typeof dom === \"string\") return {};\n\tconst widthAttr = dom.getAttribute(\"data-colwidth\");\n\tconst widths = widthAttr && /^\\d+(,\\d+)*$/.test(widthAttr) ? widthAttr.split(\",\").map((s) => Number(s)) : null;\n\tconst colspan = Number(dom.getAttribute(\"colspan\") || 1);\n\tconst result = {\n\t\tcolspan,\n\t\trowspan: Number(dom.getAttribute(\"rowspan\") || 1),\n\t\tcolwidth: widths && widths.length == colspan ? widths : null\n\t};\n\tfor (const prop in extraAttrs) {\n\t\tconst getter = extraAttrs[prop].getFromDOM;\n\t\tconst value = getter && getter(dom);\n\t\tif (value != null) result[prop] = value;\n\t}\n\treturn result;\n}\nfunction setCellAttrs(node, extraAttrs) {\n\tconst attrs = {};\n\tif (node.attrs.colspan != 1) attrs.colspan = node.attrs.colspan;\n\tif (node.attrs.rowspan != 1) attrs.rowspan = node.attrs.rowspan;\n\tif (node.attrs.colwidth) attrs[\"data-colwidth\"] = node.attrs.colwidth.join(\",\");\n\tfor (const prop in extraAttrs) {\n\t\tconst setter = extraAttrs[prop].setDOMAttr;\n\t\tif (setter) setter(node.attrs[prop], attrs);\n\t}\n\treturn attrs;\n}\nfunction validateColwidth(value) {\n\tif (value === null) return;\n\tif (!Array.isArray(value)) throw new TypeError(\"colwidth must be null or an array\");\n\tfor (const item of value) if (typeof item !== \"number\") throw new TypeError(\"colwidth must be null or an array of numbers\");\n}\n/**\n* This function creates a set of [node\n* specs](http://prosemirror.net/docs/ref/#model.SchemaSpec.nodes) for\n* `table`, `table_row`, and `table_cell` nodes types as used by this\n* module. The result can then be added to the set of nodes when\n* creating a schema.\n*\n* @public\n*/\nfunction tableNodes(options) {\n\tconst extraAttrs = options.cellAttributes || {};\n\tconst cellAttrs = {\n\t\tcolspan: {\n\t\t\tdefault: 1,\n\t\t\tvalidate: \"number\"\n\t\t},\n\t\trowspan: {\n\t\t\tdefault: 1,\n\t\t\tvalidate: \"number\"\n\t\t},\n\t\tcolwidth: {\n\t\t\tdefault: null,\n\t\t\tvalidate: validateColwidth\n\t\t}\n\t};\n\tfor (const prop in extraAttrs) cellAttrs[prop] = {\n\t\tdefault: extraAttrs[prop].default,\n\t\tvalidate: extraAttrs[prop].validate\n\t};\n\treturn {\n\t\ttable: {\n\t\t\tcontent: \"table_row+\",\n\t\t\ttableRole: \"table\",\n\t\t\tisolating: true,\n\t\t\tgroup: options.tableGroup,\n\t\t\tparseDOM: [{ tag: \"table\" }],\n\t\t\ttoDOM() {\n\t\t\t\treturn [\"table\", [\"tbody\", 0]];\n\t\t\t}\n\t\t},\n\t\ttable_row: {\n\t\t\tcontent: \"(table_cell | table_header)*\",\n\t\t\ttableRole: \"row\",\n\t\t\tparseDOM: [{ tag: \"tr\" }],\n\t\t\ttoDOM() {\n\t\t\t\treturn [\"tr\", 0];\n\t\t\t}\n\t\t},\n\t\ttable_cell: {\n\t\t\tcontent: options.cellContent,\n\t\t\tattrs: cellAttrs,\n\t\t\ttableRole: \"cell\",\n\t\t\tisolating: true,\n\t\t\tparseDOM: [{\n\t\t\t\ttag: \"td\",\n\t\t\t\tgetAttrs: (dom) => getCellAttrs(dom, extraAttrs)\n\t\t\t}],\n\t\t\ttoDOM(node) {\n\t\t\t\treturn [\n\t\t\t\t\t\"td\",\n\t\t\t\t\tsetCellAttrs(node, extraAttrs),\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t}\n\t\t},\n\t\ttable_header: {\n\t\t\tcontent: options.cellContent,\n\t\t\tattrs: cellAttrs,\n\t\t\ttableRole: \"header_cell\",\n\t\t\tisolating: true,\n\t\t\tparseDOM: [{\n\t\t\t\ttag: \"th\",\n\t\t\t\tgetAttrs: (dom) => getCellAttrs(dom, extraAttrs)\n\t\t\t}],\n\t\t\ttoDOM(node) {\n\t\t\t\treturn [\n\t\t\t\t\t\"th\",\n\t\t\t\t\tsetCellAttrs(node, extraAttrs),\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t}\n\t\t}\n\t};\n}\n/**\n* @public\n*/\nfunction tableNodeTypes(schema) {\n\tlet result = schema.cached.tableNodeTypes;\n\tif (!result) {\n\t\tresult = schema.cached.tableNodeTypes = {};\n\t\tfor (const name in schema.nodes) {\n\t\t\tconst type = schema.nodes[name], role = type.spec.tableRole;\n\t\t\tif (role) result[role] = type;\n\t\t}\n\t}\n\treturn result;\n}\n\n//#endregion\n//#region src/util.ts\n/**\n* @public\n*/\nconst tableEditingKey = new PluginKey(\"selectingCells\");\n/**\n* @public\n*/\nfunction cellAround($pos) {\n\tfor (let d = $pos.depth - 1; d > 0; d--) if ($pos.node(d).type.spec.tableRole == \"row\") return $pos.node(0).resolve($pos.before(d + 1));\n\treturn null;\n}\nfunction cellWrapping($pos) {\n\tfor (let d = $pos.depth; d > 0; d--) {\n\t\tconst role = $pos.node(d).type.spec.tableRole;\n\t\tif (role === \"cell\" || role === \"header_cell\") return $pos.node(d);\n\t}\n\treturn null;\n}\n/**\n* @public\n*/\nfunction isInTable(state) {\n\tconst $head = state.selection.$head;\n\tfor (let d = $head.depth; d > 0; d--) if ($head.node(d).type.spec.tableRole == \"row\") return true;\n\treturn false;\n}\n/**\n* @internal\n*/\nfunction selectionCell(state) {\n\tconst sel = state.selection;\n\tif (\"$anchorCell\" in sel && sel.$anchorCell) return sel.$anchorCell.pos > sel.$headCell.pos ? sel.$anchorCell : sel.$headCell;\n\telse if (\"node\" in sel && sel.node && sel.node.type.spec.tableRole == \"cell\") return sel.$anchor;\n\tconst $cell = cellAround(sel.$head) || cellNear(sel.$head);\n\tif ($cell) return $cell;\n\tthrow new RangeError(`No cell found around position ${sel.head}`);\n}\n/**\n* @public\n*/\nfunction cellNear($pos) {\n\tfor (let after = $pos.nodeAfter, pos = $pos.pos; after; after = after.firstChild, pos++) {\n\t\tconst role = after.type.spec.tableRole;\n\t\tif (role == \"cell\" || role == \"header_cell\") return $pos.doc.resolve(pos);\n\t}\n\tfor (let before = $pos.nodeBefore, pos = $pos.pos; before; before = before.lastChild, pos--) {\n\t\tconst role = before.type.spec.tableRole;\n\t\tif (role == \"cell\" || role == \"header_cell\") return $pos.doc.resolve(pos - before.nodeSize);\n\t}\n}\n/**\n* @public\n*/\nfunction pointsAtCell($pos) {\n\treturn $pos.parent.type.spec.tableRole == \"row\" && !!$pos.nodeAfter;\n}\n/**\n* @public\n*/\nfunction moveCellForward($pos) {\n\treturn $pos.node(0).resolve($pos.pos + $pos.nodeAfter.nodeSize);\n}\n/**\n* @internal\n*/\nfunction inSameTable($cellA, $cellB) {\n\treturn $cellA.depth == $cellB.depth && $cellA.pos >= $cellB.start(-1) && $cellA.pos <= $cellB.end(-1);\n}\n/**\n* @public\n*/\nfunction findCell($pos) {\n\treturn TableMap.get($pos.node(-1)).findCell($pos.pos - $pos.start(-1));\n}\n/**\n* @public\n*/\nfunction colCount($pos) {\n\treturn TableMap.get($pos.node(-1)).colCount($pos.pos - $pos.start(-1));\n}\n/**\n* @public\n*/\nfunction nextCell($pos, axis, dir) {\n\tconst table = $pos.node(-1);\n\tconst map = TableMap.get(table);\n\tconst tableStart = $pos.start(-1);\n\tconst moved = map.nextCell($pos.pos - tableStart, axis, dir);\n\treturn moved == null ? null : $pos.node(0).resolve(tableStart + moved);\n}\n/**\n* @public\n*/\nfunction removeColSpan(attrs, pos, n = 1) {\n\tconst result = {\n\t\t...attrs,\n\t\tcolspan: attrs.colspan - n\n\t};\n\tif (result.colwidth) {\n\t\tresult.colwidth = result.colwidth.slice();\n\t\tresult.colwidth.splice(pos, n);\n\t\tif (!result.colwidth.some((w) => w > 0)) result.colwidth = null;\n\t}\n\treturn result;\n}\n/**\n* @public\n*/\nfunction addColSpan(attrs, pos, n = 1) {\n\tconst result = {\n\t\t...attrs,\n\t\tcolspan: attrs.colspan + n\n\t};\n\tif (result.colwidth) {\n\t\tresult.colwidth = result.colwidth.slice();\n\t\tfor (let i = 0; i < n; i++) result.colwidth.splice(pos, 0, 0);\n\t}\n\treturn result;\n}\n/**\n* @public\n*/\nfunction columnIsHeader(map, table, col) {\n\tconst headerCell = tableNodeTypes(table.type.schema).header_cell;\n\tfor (let row = 0; row < map.height; row++) if (table.nodeAt(map.map[col + row * map.width]).type != headerCell) return false;\n\treturn true;\n}\n\n//#endregion\n//#region src/cellselection.ts\n/**\n* A [`Selection`](http://prosemirror.net/docs/ref/#state.Selection)\n* subclass that represents a cell selection spanning part of a table.\n* With the plugin enabled, these will be created when the user\n* selects across cells, and will be drawn by giving selected cells a\n* `selectedCell` CSS class.\n*\n* @public\n*/\nvar CellSelection = class CellSelection extends Selection {\n\tconstructor($anchorCell, $headCell = $anchorCell) {\n\t\tconst table = $anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = $anchorCell.start(-1);\n\t\tconst rect = map.rectBetween($anchorCell.pos - tableStart, $headCell.pos - tableStart);\n\t\tconst doc = $anchorCell.node(0);\n\t\tconst cells = map.cellsInRect(rect).filter((p) => p != $headCell.pos - tableStart);\n\t\tcells.unshift($headCell.pos - tableStart);\n\t\tconst ranges = cells.map((pos) => {\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tif (!cell) throw new RangeError(`No cell with offset ${pos} found`);\n\t\t\tconst from = tableStart + pos + 1;\n\t\t\treturn new SelectionRange(doc.resolve(from), doc.resolve(from + cell.content.size));\n\t\t});\n\t\tsuper(ranges[0].$from, ranges[0].$to, ranges);\n\t\tthis.$anchorCell = $anchorCell;\n\t\tthis.$headCell = $headCell;\n\t}\n\tmap(doc, mapping) {\n\t\tconst $anchorCell = doc.resolve(mapping.map(this.$anchorCell.pos));\n\t\tconst $headCell = doc.resolve(mapping.map(this.$headCell.pos));\n\t\tif (pointsAtCell($anchorCell) && pointsAtCell($headCell) && inSameTable($anchorCell, $headCell)) {\n\t\t\tconst tableChanged = this.$anchorCell.node(-1) != $anchorCell.node(-1);\n\t\t\tif (tableChanged && this.isRowSelection()) return CellSelection.rowSelection($anchorCell, $headCell);\n\t\t\telse if (tableChanged && this.isColSelection()) return CellSelection.colSelection($anchorCell, $headCell);\n\t\t\telse return new CellSelection($anchorCell, $headCell);\n\t\t}\n\t\treturn TextSelection.between($anchorCell, $headCell);\n\t}\n\tcontent() {\n\t\tconst table = this.$anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = this.$anchorCell.start(-1);\n\t\tconst rect = map.rectBetween(this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart);\n\t\tconst seen = {};\n\t\tconst rows = [];\n\t\tfor (let row = rect.top; row < rect.bottom; row++) {\n\t\t\tconst rowContent = [];\n\t\t\tfor (let index = row * map.width + rect.left, col = rect.left; col < rect.right; col++, index++) {\n\t\t\t\tconst pos = map.map[index];\n\t\t\t\tif (seen[pos]) continue;\n\t\t\t\tseen[pos] = true;\n\t\t\t\tconst cellRect = map.findCell(pos);\n\t\t\t\tlet cell = table.nodeAt(pos);\n\t\t\t\tif (!cell) throw new RangeError(`No cell with offset ${pos} found`);\n\t\t\t\tconst extraLeft = rect.left - cellRect.left;\n\t\t\t\tconst extraRight = cellRect.right - rect.right;\n\t\t\t\tif (extraLeft > 0 || extraRight > 0) {\n\t\t\t\t\tlet attrs = cell.attrs;\n\t\t\t\t\tif (extraLeft > 0) attrs = removeColSpan(attrs, 0, extraLeft);\n\t\t\t\t\tif (extraRight > 0) attrs = removeColSpan(attrs, attrs.colspan - extraRight, extraRight);\n\t\t\t\t\tif (cellRect.left < rect.left) {\n\t\t\t\t\t\tcell = cell.type.createAndFill(attrs);\n\t\t\t\t\t\tif (!cell) throw new RangeError(`Could not create cell with attrs ${JSON.stringify(attrs)}`);\n\t\t\t\t\t} else cell = cell.type.create(attrs, cell.content);\n\t\t\t\t}\n\t\t\t\tif (cellRect.top < rect.top || cellRect.bottom > rect.bottom) {\n\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t...cell.attrs,\n\t\t\t\t\t\trowspan: Math.min(cellRect.bottom, rect.bottom) - Math.max(cellRect.top, rect.top)\n\t\t\t\t\t};\n\t\t\t\t\tif (cellRect.top < rect.top) cell = cell.type.createAndFill(attrs);\n\t\t\t\t\telse cell = cell.type.create(attrs, cell.content);\n\t\t\t\t}\n\t\t\t\trowContent.push(cell);\n\t\t\t}\n\t\t\trows.push(table.child(row).copy(Fragment.from(rowContent)));\n\t\t}\n\t\tconst fragment = this.isColSelection() && this.isRowSelection() ? table : rows;\n\t\treturn new Slice(Fragment.from(fragment), 1, 1);\n\t}\n\treplace(tr, content = Slice.empty) {\n\t\tconst mapFrom = tr.steps.length, ranges = this.ranges;\n\t\tfor (let i = 0; i < ranges.length; i++) {\n\t\t\tconst { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n\t\t\ttr.replace(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content);\n\t\t}\n\t\tconst sel = Selection.findFrom(tr.doc.resolve(tr.mapping.slice(mapFrom).map(this.to)), -1);\n\t\tif (sel) tr.setSelection(sel);\n\t}\n\treplaceWith(tr, node) {\n\t\tthis.replace(tr, new Slice(Fragment.from(node), 0, 0));\n\t}\n\tforEachCell(f) {\n\t\tconst table = this.$anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = this.$anchorCell.start(-1);\n\t\tconst cells = map.cellsInRect(map.rectBetween(this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart));\n\t\tfor (let i = 0; i < cells.length; i++) f(table.nodeAt(cells[i]), tableStart + cells[i]);\n\t}\n\tisColSelection() {\n\t\tconst anchorTop = this.$anchorCell.index(-1);\n\t\tconst headTop = this.$headCell.index(-1);\n\t\tif (Math.min(anchorTop, headTop) > 0) return false;\n\t\tconst anchorBottom = anchorTop + this.$anchorCell.nodeAfter.attrs.rowspan;\n\t\tconst headBottom = headTop + this.$headCell.nodeAfter.attrs.rowspan;\n\t\treturn Math.max(anchorBottom, headBottom) == this.$headCell.node(-1).childCount;\n\t}\n\tstatic colSelection($anchorCell, $headCell = $anchorCell) {\n\t\tconst table = $anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = $anchorCell.start(-1);\n\t\tconst anchorRect = map.findCell($anchorCell.pos - tableStart);\n\t\tconst headRect = map.findCell($headCell.pos - tableStart);\n\t\tconst doc = $anchorCell.node(0);\n\t\tif (anchorRect.top <= headRect.top) {\n\t\t\tif (anchorRect.top > 0) $anchorCell = doc.resolve(tableStart + map.map[anchorRect.left]);\n\t\t\tif (headRect.bottom < map.height) $headCell = doc.resolve(tableStart + map.map[map.width * (map.height - 1) + headRect.right - 1]);\n\t\t} else {\n\t\t\tif (headRect.top > 0) $headCell = doc.resolve(tableStart + map.map[headRect.left]);\n\t\t\tif (anchorRect.bottom < map.height) $anchorCell = doc.resolve(tableStart + map.map[map.width * (map.height - 1) + anchorRect.right - 1]);\n\t\t}\n\t\treturn new CellSelection($anchorCell, $headCell);\n\t}\n\tisRowSelection() {\n\t\tconst table = this.$anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = this.$anchorCell.start(-1);\n\t\tconst anchorLeft = map.colCount(this.$anchorCell.pos - tableStart);\n\t\tconst headLeft = map.colCount(this.$headCell.pos - tableStart);\n\t\tif (Math.min(anchorLeft, headLeft) > 0) return false;\n\t\tconst anchorRight = anchorLeft + this.$anchorCell.nodeAfter.attrs.colspan;\n\t\tconst headRight = headLeft + this.$headCell.nodeAfter.attrs.colspan;\n\t\treturn Math.max(anchorRight, headRight) == map.width;\n\t}\n\teq(other) {\n\t\treturn other instanceof CellSelection && other.$anchorCell.pos == this.$anchorCell.pos && other.$headCell.pos == this.$headCell.pos;\n\t}\n\tstatic rowSelection($anchorCell, $headCell = $anchorCell) {\n\t\tconst table = $anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = $anchorCell.start(-1);\n\t\tconst anchorRect = map.findCell($anchorCell.pos - tableStart);\n\t\tconst headRect = map.findCell($headCell.pos - tableStart);\n\t\tconst doc = $anchorCell.node(0);\n\t\tif (anchorRect.left <= headRect.left) {\n\t\t\tif (anchorRect.left > 0) $anchorCell = doc.resolve(tableStart + map.map[anchorRect.top * map.width]);\n\t\t\tif (headRect.right < map.width) $headCell = doc.resolve(tableStart + map.map[map.width * (headRect.top + 1) - 1]);\n\t\t} else {\n\t\t\tif (headRect.left > 0) $headCell = doc.resolve(tableStart + map.map[headRect.top * map.width]);\n\t\t\tif (anchorRect.right < map.width) $anchorCell = doc.resolve(tableStart + map.map[map.width * (anchorRect.top + 1) - 1]);\n\t\t}\n\t\treturn new CellSelection($anchorCell, $headCell);\n\t}\n\ttoJSON() {\n\t\treturn {\n\t\t\ttype: \"cell\",\n\t\t\tanchor: this.$anchorCell.pos,\n\t\t\thead: this.$headCell.pos\n\t\t};\n\t}\n\tstatic fromJSON(doc, json) {\n\t\treturn new CellSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n\t}\n\tstatic create(doc, anchorCell, headCell = anchorCell) {\n\t\treturn new CellSelection(doc.resolve(anchorCell), doc.resolve(headCell));\n\t}\n\tgetBookmark() {\n\t\treturn new CellBookmark(this.$anchorCell.pos, this.$headCell.pos);\n\t}\n};\nCellSelection.prototype.visible = false;\nSelection.jsonID(\"cell\", CellSelection);\n/**\n* @public\n*/\nvar CellBookmark = class CellBookmark {\n\tconstructor(anchor, head) {\n\t\tthis.anchor = anchor;\n\t\tthis.head = head;\n\t}\n\tmap(mapping) {\n\t\treturn new CellBookmark(mapping.map(this.anchor), mapping.map(this.head));\n\t}\n\tresolve(doc) {\n\t\tconst $anchorCell = doc.resolve(this.anchor), $headCell = doc.resolve(this.head);\n\t\tif ($anchorCell.parent.type.spec.tableRole == \"row\" && $headCell.parent.type.spec.tableRole == \"row\" && $anchorCell.index() < $anchorCell.parent.childCount && $headCell.index() < $headCell.parent.childCount && inSameTable($anchorCell, $headCell)) return new CellSelection($anchorCell, $headCell);\n\t\telse return Selection.near($headCell, 1);\n\t}\n};\nfunction drawCellSelection(state) {\n\tif (!(state.selection instanceof CellSelection)) return null;\n\tconst cells = [];\n\tstate.selection.forEachCell((node, pos) => {\n\t\tcells.push(Decoration.node(pos, pos + node.nodeSize, { class: \"selectedCell\" }));\n\t});\n\treturn DecorationSet.create(state.doc, cells);\n}\nfunction isCellBoundarySelection({ $from, $to }) {\n\tif ($from.pos == $to.pos || $from.pos < $to.pos - 6) return false;\n\tlet afterFrom = $from.pos;\n\tlet beforeTo = $to.pos;\n\tlet depth = $from.depth;\n\tfor (; depth >= 0; depth--, afterFrom++) if ($from.after(depth + 1) < $from.end(depth)) break;\n\tfor (let d = $to.depth; d >= 0; d--, beforeTo--) if ($to.before(d + 1) > $to.start(d)) break;\n\treturn afterFrom == beforeTo && /row|table/.test($from.node(depth).type.spec.tableRole);\n}\nfunction isTextSelectionAcrossCells({ $from, $to }) {\n\tlet fromCellBoundaryNode;\n\tlet toCellBoundaryNode;\n\tfor (let i = $from.depth; i > 0; i--) {\n\t\tconst node = $from.node(i);\n\t\tif (node.type.spec.tableRole === \"cell\" || node.type.spec.tableRole === \"header_cell\") {\n\t\t\tfromCellBoundaryNode = node;\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor (let i = $to.depth; i > 0; i--) {\n\t\tconst node = $to.node(i);\n\t\tif (node.type.spec.tableRole === \"cell\" || node.type.spec.tableRole === \"header_cell\") {\n\t\t\ttoCellBoundaryNode = node;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn fromCellBoundaryNode !== toCellBoundaryNode && $to.parentOffset === 0;\n}\nfunction normalizeSelection(state, tr, allowTableNodeSelection) {\n\tconst sel = (tr || state).selection;\n\tconst doc = (tr || state).doc;\n\tlet normalize;\n\tlet role;\n\tif (sel instanceof NodeSelection && (role = sel.node.type.spec.tableRole)) {\n\t\tif (role == \"cell\" || role == \"header_cell\") normalize = CellSelection.create(doc, sel.from);\n\t\telse if (role == \"row\") {\n\t\t\tconst $cell = doc.resolve(sel.from + 1);\n\t\t\tnormalize = CellSelection.rowSelection($cell, $cell);\n\t\t} else if (!allowTableNodeSelection) {\n\t\t\tconst map = TableMap.get(sel.node);\n\t\t\tconst start = sel.from + 1;\n\t\t\tconst lastCell = start + map.map[map.width * map.height - 1];\n\t\t\tnormalize = CellSelection.create(doc, start + 1, lastCell);\n\t\t}\n\t} else if (sel instanceof TextSelection && isCellBoundarySelection(sel)) normalize = TextSelection.create(doc, sel.from);\n\telse if (sel instanceof TextSelection && isTextSelectionAcrossCells(sel)) normalize = TextSelection.create(doc, sel.$from.start(), sel.$from.end());\n\tif (normalize) (tr || (tr = state.tr)).setSelection(normalize);\n\treturn tr;\n}\n\n//#endregion\n//#region src/fixtables.ts\n/**\n* @public\n*/\nconst fixTablesKey = new PluginKey(\"fix-tables\");\n/**\n* Helper for iterating through the nodes in a document that changed\n* compared to the given previous document. Useful for avoiding\n* duplicate work on each transaction.\n*\n* @public\n*/\nfunction changedDescendants(old, cur, offset, f) {\n\tconst oldSize = old.childCount, curSize = cur.childCount;\n\touter: for (let i = 0, j = 0; i < curSize; i++) {\n\t\tconst child = cur.child(i);\n\t\tfor (let scan = j, e = Math.min(oldSize, i + 3); scan < e; scan++) if (old.child(scan) == child) {\n\t\t\tj = scan + 1;\n\t\t\toffset += child.nodeSize;\n\t\t\tcontinue outer;\n\t\t}\n\t\tf(child, offset);\n\t\tif (j < oldSize && old.child(j).sameMarkup(child)) changedDescendants(old.child(j), child, offset + 1, f);\n\t\telse child.nodesBetween(0, child.content.size, f, offset + 1);\n\t\toffset += child.nodeSize;\n\t}\n}\n/**\n* Inspect all tables in the given state's document and return a\n* transaction that fixes them, if necessary. If `oldState` was\n* provided, that is assumed to hold a previous, known-good state,\n* which will be used to avoid re-scanning unchanged parts of the\n* document.\n*\n* @public\n*/\nfunction fixTables(state, oldState) {\n\tlet tr;\n\tconst check = (node, pos) => {\n\t\tif (node.type.spec.tableRole == \"table\") tr = fixTable(state, node, pos, tr);\n\t};\n\tif (!oldState) state.doc.descendants(check);\n\telse if (oldState.doc != state.doc) changedDescendants(oldState.doc, state.doc, 0, check);\n\treturn tr;\n}\nfunction fixTable(state, table, tablePos, tr) {\n\tconst map = TableMap.get(table);\n\tif (!map.problems) return tr;\n\tif (!tr) tr = state.tr;\n\tconst mustAdd = [];\n\tfor (let i = 0; i < map.height; i++) mustAdd.push(0);\n\tfor (let i = 0; i < map.problems.length; i++) {\n\t\tconst prob = map.problems[i];\n\t\tif (prob.type == \"collision\") {\n\t\t\tconst cell = table.nodeAt(prob.pos);\n\t\t\tif (!cell) continue;\n\t\t\tconst attrs = cell.attrs;\n\t\t\tfor (let j = 0; j < attrs.rowspan; j++) mustAdd[prob.row + j] += prob.n;\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, removeColSpan(attrs, attrs.colspan - prob.n, prob.n));\n\t\t} else if (prob.type == \"missing\") mustAdd[prob.row] += prob.n;\n\t\telse if (prob.type == \"overlong_rowspan\") {\n\t\t\tconst cell = table.nodeAt(prob.pos);\n\t\t\tif (!cell) continue;\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, {\n\t\t\t\t...cell.attrs,\n\t\t\t\trowspan: cell.attrs.rowspan - prob.n\n\t\t\t});\n\t\t} else if (prob.type == \"colwidth mismatch\") {\n\t\t\tconst cell = table.nodeAt(prob.pos);\n\t\t\tif (!cell) continue;\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, {\n\t\t\t\t...cell.attrs,\n\t\t\t\tcolwidth: prob.colwidth\n\t\t\t});\n\t\t} else if (prob.type == \"zero_sized\") {\n\t\t\tconst pos = tr.mapping.map(tablePos);\n\t\t\ttr.delete(pos, pos + table.nodeSize);\n\t\t}\n\t}\n\tlet first, last;\n\tfor (let i = 0; i < mustAdd.length; i++) if (mustAdd[i]) {\n\t\tif (first == null) first = i;\n\t\tlast = i;\n\t}\n\tfor (let i = 0, pos = tablePos + 1; i < map.height; i++) {\n\t\tconst row = table.child(i);\n\t\tconst end = pos + row.nodeSize;\n\t\tconst add = mustAdd[i];\n\t\tif (add > 0) {\n\t\t\tlet role = \"cell\";\n\t\t\tif (row.firstChild) role = row.firstChild.type.spec.tableRole;\n\t\t\tconst nodes = [];\n\t\t\tfor (let j = 0; j < add; j++) {\n\t\t\t\tconst node = tableNodeTypes(state.schema)[role].createAndFill();\n\t\t\t\tif (node) nodes.push(node);\n\t\t\t}\n\t\t\tconst side = (i == 0 || first == i - 1) && last == i ? pos + 1 : end - 1;\n\t\t\ttr.insert(tr.mapping.map(side), nodes);\n\t\t}\n\t\tpos = end;\n\t}\n\treturn tr.setMeta(fixTablesKey, { fixTables: true });\n}\n\n//#endregion\n//#region src/utils/convert.ts\n/**\n* This function will transform the table node into a matrix of rows and columns\n* respecting merged cells, for example this table:\n*\n* ```\n* ┌──────┬──────┬─────────────┐\n* │ A1 │ B1 │ C1 │\n* ├──────┼──────┴──────┬──────┤\n* │ A2 │ B2 │ │\n* ├──────┼─────────────┤ D1 │\n* │ A3 │ B3 │ C3 │ │\n* └──────┴──────┴──────┴──────┘\n* ```\n*\n* will be converted to the below:\n*\n* ```javascript\n* [\n* [A1, B1, C1, null],\n* [A2, B2, null, D1],\n* [A3, B3, C3, null],\n* ]\n* ```\n* @internal\n*/\nfunction convertTableNodeToArrayOfRows(tableNode) {\n\tconst map = TableMap.get(tableNode);\n\tconst rows = [];\n\tconst rowCount = map.height;\n\tconst colCount$1 = map.width;\n\tfor (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n\t\tconst row = [];\n\t\tfor (let colIndex = 0; colIndex < colCount$1; colIndex++) {\n\t\t\tconst cellIndex = rowIndex * colCount$1 + colIndex;\n\t\t\tconst cellPos = map.map[cellIndex];\n\t\t\tif (rowIndex > 0) {\n\t\t\t\tconst topCellIndex = cellIndex - colCount$1;\n\t\t\t\tif (cellPos === map.map[topCellIndex]) {\n\t\t\t\t\trow.push(null);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (colIndex > 0) {\n\t\t\t\tconst leftCellIndex = cellIndex - 1;\n\t\t\t\tif (cellPos === map.map[leftCellIndex]) {\n\t\t\t\t\trow.push(null);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\trow.push(tableNode.nodeAt(cellPos));\n\t\t}\n\t\trows.push(row);\n\t}\n\treturn rows;\n}\n/**\n* Convert an array of rows to a table node.\n*\n* @internal\n*/\nfunction convertArrayOfRowsToTableNode(tableNode, arrayOfNodes) {\n\tconst newRows = [];\n\tconst map = TableMap.get(tableNode);\n\tconst rowCount = map.height;\n\tconst colCount$1 = map.width;\n\tfor (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n\t\tconst oldRow = tableNode.child(rowIndex);\n\t\tconst newCells = [];\n\t\tfor (let colIndex = 0; colIndex < colCount$1; colIndex++) {\n\t\t\tconst cell = arrayOfNodes[rowIndex][colIndex];\n\t\t\tif (!cell) continue;\n\t\t\tconst cellPos = map.map[rowIndex * map.width + colIndex];\n\t\t\tconst oldCell = tableNode.nodeAt(cellPos);\n\t\t\tif (!oldCell) continue;\n\t\t\tconst newCell = oldCell.type.createChecked(cell.attrs, cell.content, cell.marks);\n\t\t\tnewCells.push(newCell);\n\t\t}\n\t\tconst newRow = oldRow.type.createChecked(oldRow.attrs, newCells, oldRow.marks);\n\t\tnewRows.push(newRow);\n\t}\n\treturn tableNode.type.createChecked(tableNode.attrs, newRows, tableNode.marks);\n}\n\n//#endregion\n//#region src/utils/move-row-in-array-of-rows.ts\n/**\n* Move a row in an array of rows.\n*\n* @internal\n*/\nfunction moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, directionOverride) {\n\tconst direction = indexesOrigin[0] > indexesTarget[0] ? -1 : 1;\n\tconst rowsExtracted = rows.splice(indexesOrigin[0], indexesOrigin.length);\n\tconst positionOffset = rowsExtracted.length % 2 === 0 ? 1 : 0;\n\tlet target;\n\tif (directionOverride === -1 && direction === 1) target = indexesTarget[0] - 1;\n\telse if (directionOverride === 1 && direction === -1) target = indexesTarget[indexesTarget.length - 1] - positionOffset + 1;\n\telse target = direction === -1 ? indexesTarget[0] : indexesTarget[indexesTarget.length - 1] - positionOffset;\n\trows.splice(target, 0, ...rowsExtracted);\n\treturn rows;\n}\n\n//#endregion\n//#region src/utils/query.ts\n/**\n* Checks if the given object is a `CellSelection` instance.\n*\n* @internal\n*/\nfunction isCellSelection(value) {\n\treturn value instanceof CellSelection;\n}\n/**\n* Find the closest table node for a given position.\n*\n* @public\n*/\nfunction findTable($pos) {\n\treturn findParentNode((node) => node.type.spec.tableRole === \"table\", $pos);\n}\n/**\n* Try to find the anchor and head cell in the same table by using the given\n* anchor and head as hit points, or fallback to the selection's anchor and\n* head.\n*\n* @public\n*/\nfunction findCellRange(selection, anchorHit, headHit) {\n\tvar _ref, _ref2;\n\tif (anchorHit == null && headHit == null && isCellSelection(selection)) return [selection.$anchorCell, selection.$headCell];\n\tconst anchor = (_ref = anchorHit !== null && anchorHit !== void 0 ? anchorHit : headHit) !== null && _ref !== void 0 ? _ref : selection.anchor;\n\tconst head = (_ref2 = headHit !== null && headHit !== void 0 ? headHit : anchorHit) !== null && _ref2 !== void 0 ? _ref2 : selection.head;\n\tconst doc = selection.$head.doc;\n\tconst $anchorCell = findCellPos(doc, anchor);\n\tconst $headCell = findCellPos(doc, head);\n\tif ($anchorCell && $headCell && inSameTable($anchorCell, $headCell)) return [$anchorCell, $headCell];\n\treturn null;\n}\n/**\n* Try to find a resolved pos of a cell by using the given pos as a hit point.\n*\n* @public\n*/\nfunction findCellPos(doc, pos) {\n\tconst $pos = doc.resolve(pos);\n\treturn cellAround($pos) || cellNear($pos);\n}\n/**\n* Find the closest parent node that satisfies the predicate.\n*\n* @internal\n*/\nfunction findParentNode(predicate, $pos) {\n\tfor (let depth = $pos.depth; depth >= 0; depth -= 1) {\n\t\tconst node = $pos.node(depth);\n\t\tif (predicate(node)) return {\n\t\t\tnode,\n\t\t\tpos: depth === 0 ? 0 : $pos.before(depth),\n\t\t\tstart: $pos.start(depth),\n\t\t\tdepth\n\t\t};\n\t}\n\treturn null;\n}\n\n//#endregion\n//#region src/utils/get-cells.ts\n/**\n* Returns an array of cells in a column at the specified column index.\n*\n* @internal\n*/\nfunction getCellsInColumn(columnIndex, selection) {\n\tconst table = findTable(selection.$from);\n\tif (!table) return;\n\tconst map = TableMap.get(table.node);\n\tif (columnIndex < 0 || columnIndex > map.width - 1) return;\n\treturn map.cellsInRect({\n\t\tleft: columnIndex,\n\t\tright: columnIndex + 1,\n\t\ttop: 0,\n\t\tbottom: map.height\n\t}).map((nodePos) => {\n\t\tconst node = table.node.nodeAt(nodePos);\n\t\tconst pos = nodePos + table.start;\n\t\treturn {\n\t\t\tpos,\n\t\t\tstart: pos + 1,\n\t\t\tnode,\n\t\t\tdepth: table.depth + 2\n\t\t};\n\t});\n}\n/**\n* Returns an array of cells in a row at the specified row index.\n*\n* @internal\n*/\nfunction getCellsInRow(rowIndex, selection) {\n\tconst table = findTable(selection.$from);\n\tif (!table) return;\n\tconst map = TableMap.get(table.node);\n\tif (rowIndex < 0 || rowIndex > map.height - 1) return;\n\treturn map.cellsInRect({\n\t\tleft: 0,\n\t\tright: map.width,\n\t\ttop: rowIndex,\n\t\tbottom: rowIndex + 1\n\t}).map((nodePos) => {\n\t\tconst node = table.node.nodeAt(nodePos);\n\t\tconst pos = nodePos + table.start;\n\t\treturn {\n\t\t\tpos,\n\t\t\tstart: pos + 1,\n\t\t\tnode,\n\t\t\tdepth: table.depth + 2\n\t\t};\n\t});\n}\n\n//#endregion\n//#region src/utils/selection-range.ts\n/**\n* Returns a range of rectangular selection spanning all merged cells around a\n* column at index `columnIndex`.\n*\n* Original implementation from Atlassian (Apache License 2.0)\n*\n* https://bitbucket.org/atlassian/atlassian-frontend-mirror/src/5f91cb871e8248bc3bae5ddc30bb9fd9200fadbb/editor/editor-tables/src/utils/get-selection-range-in-column.ts#editor/editor-tables/src/utils/get-selection-range-in-column.ts\n*\n* @internal\n*/\nfunction getSelectionRangeInColumn(tr, startColIndex, endColIndex = startColIndex) {\n\tlet startIndex = startColIndex;\n\tlet endIndex = endColIndex;\n\tfor (let i = startColIndex; i >= 0; i--) {\n\t\tconst cells = getCellsInColumn(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.colspan + i - 1;\n\t\t\tif (maybeEndIndex >= startIndex) startIndex = i;\n\t\t\tif (maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tfor (let i = startColIndex; i <= endIndex; i++) {\n\t\tconst cells = getCellsInColumn(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.colspan + i - 1;\n\t\t\tif (cell.node.attrs.colspan > 1 && maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tconst indexes = [];\n\tfor (let i = startIndex; i <= endIndex; i++) {\n\t\tconst maybeCells = getCellsInColumn(i, tr.selection);\n\t\tif (maybeCells && maybeCells.length > 0) indexes.push(i);\n\t}\n\tstartIndex = indexes[0];\n\tendIndex = indexes[indexes.length - 1];\n\tconst firstSelectedColumnCells = getCellsInColumn(startIndex, tr.selection);\n\tconst firstRowCells = getCellsInRow(0, tr.selection);\n\tif (!firstSelectedColumnCells || !firstRowCells) return;\n\tconst $anchor = tr.doc.resolve(firstSelectedColumnCells[firstSelectedColumnCells.length - 1].pos);\n\tlet headCell;\n\tfor (let i = endIndex; i >= startIndex; i--) {\n\t\tconst columnCells = getCellsInColumn(i, tr.selection);\n\t\tif (columnCells && columnCells.length > 0) {\n\t\t\tfor (let j = firstRowCells.length - 1; j >= 0; j--) if (firstRowCells[j].pos === columnCells[0].pos) {\n\t\t\t\theadCell = columnCells[0];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (headCell) break;\n\t\t}\n\t}\n\tif (!headCell) return;\n\treturn {\n\t\t$anchor,\n\t\t$head: tr.doc.resolve(headCell.pos),\n\t\tindexes\n\t};\n}\n/**\n* Returns a range of rectangular selection spanning all merged cells around a\n* row at index `rowIndex`.\n*\n* Original implementation from Atlassian (Apache License 2.0)\n*\n* https://bitbucket.org/atlassian/atlassian-frontend-mirror/src/5f91cb871e8248bc3bae5ddc30bb9fd9200fadbb/editor/editor-tables/src/utils/get-selection-range-in-row.ts#editor/editor-tables/src/utils/get-selection-range-in-row.ts\n*\n* @internal\n*/\nfunction getSelectionRangeInRow(tr, startRowIndex, endRowIndex = startRowIndex) {\n\tlet startIndex = startRowIndex;\n\tlet endIndex = endRowIndex;\n\tfor (let i = startRowIndex; i >= 0; i--) {\n\t\tconst cells = getCellsInRow(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n\t\t\tif (maybeEndIndex >= startIndex) startIndex = i;\n\t\t\tif (maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tfor (let i = startRowIndex; i <= endIndex; i++) {\n\t\tconst cells = getCellsInRow(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n\t\t\tif (cell.node.attrs.rowspan > 1 && maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tconst indexes = [];\n\tfor (let i = startIndex; i <= endIndex; i++) {\n\t\tconst maybeCells = getCellsInRow(i, tr.selection);\n\t\tif (maybeCells && maybeCells.length > 0) indexes.push(i);\n\t}\n\tstartIndex = indexes[0];\n\tendIndex = indexes[indexes.length - 1];\n\tconst firstSelectedRowCells = getCellsInRow(startIndex, tr.selection);\n\tconst firstColumnCells = getCellsInColumn(0, tr.selection);\n\tif (!firstSelectedRowCells || !firstColumnCells) return;\n\tconst $anchor = tr.doc.resolve(firstSelectedRowCells[firstSelectedRowCells.length - 1].pos);\n\tlet headCell;\n\tfor (let i = endIndex; i >= startIndex; i--) {\n\t\tconst rowCells = getCellsInRow(i, tr.selection);\n\t\tif (rowCells && rowCells.length > 0) {\n\t\t\tfor (let j = firstColumnCells.length - 1; j >= 0; j--) if (firstColumnCells[j].pos === rowCells[0].pos) {\n\t\t\t\theadCell = rowCells[0];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (headCell) break;\n\t\t}\n\t}\n\tif (!headCell) return;\n\treturn {\n\t\t$anchor,\n\t\t$head: tr.doc.resolve(headCell.pos),\n\t\tindexes\n\t};\n}\n\n//#endregion\n//#region src/utils/transpose.ts\n/**\n* Transposes a 2D array by flipping columns to rows.\n*\n* Transposition is a familiar algebra concept where the matrix is flipped\n* along its diagonal. For more details, see:\n* https://en.wikipedia.org/wiki/Transpose\n*\n* @example\n* ```javascript\n* const arr = [\n* ['a1', 'a2', 'a3'],\n* ['b1', 'b2', 'b3'],\n* ['c1', 'c2', 'c3'],\n* ['d1', 'd2', 'd3'],\n* ];\n*\n* const result = transpose(arr);\n* result === [\n* ['a1', 'b1', 'c1', 'd1'],\n* ['a2', 'b2', 'c2', 'd2'],\n* ['a3', 'b3', 'c3', 'd3'],\n* ]\n* ```\n*/\nfunction transpose(array) {\n\treturn array[0].map((_, i) => {\n\t\treturn array.map((column) => column[i]);\n\t});\n}\n\n//#endregion\n//#region src/utils/move-column.ts\n/**\n* Move a column from index `origin` to index `target`.\n*\n* @internal\n*/\nfunction moveColumn(moveColParams) {\n\tvar _getSelectionRangeInC, _getSelectionRangeInC2;\n\tconst { tr, originIndex, targetIndex, select, pos } = moveColParams;\n\tconst table = findTable(tr.doc.resolve(pos));\n\tif (!table) return false;\n\tconst indexesOriginColumn = (_getSelectionRangeInC = getSelectionRangeInColumn(tr, originIndex)) === null || _getSelectionRangeInC === void 0 ? void 0 : _getSelectionRangeInC.indexes;\n\tconst indexesTargetColumn = (_getSelectionRangeInC2 = getSelectionRangeInColumn(tr, targetIndex)) === null || _getSelectionRangeInC2 === void 0 ? void 0 : _getSelectionRangeInC2.indexes;\n\tif (!indexesOriginColumn || !indexesTargetColumn) return false;\n\tif (indexesOriginColumn.includes(targetIndex)) return false;\n\tconst newTable = moveTableColumn$1(table.node, indexesOriginColumn, indexesTargetColumn, 0);\n\ttr.replaceWith(table.pos, table.pos + table.node.nodeSize, newTable);\n\tif (!select) return true;\n\tconst map = TableMap.get(newTable);\n\tconst start = table.start;\n\tconst index = targetIndex;\n\tconst lastCell = map.positionAt(map.height - 1, index, newTable);\n\tconst $lastCell = tr.doc.resolve(start + lastCell);\n\tconst firstCell = map.positionAt(0, index, newTable);\n\tconst $firstCell = tr.doc.resolve(start + firstCell);\n\ttr.setSelection(CellSelection.colSelection($lastCell, $firstCell));\n\treturn true;\n}\nfunction moveTableColumn$1(table, indexesOrigin, indexesTarget, direction) {\n\tlet rows = transpose(convertTableNodeToArrayOfRows(table));\n\trows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n\trows = transpose(rows);\n\treturn convertArrayOfRowsToTableNode(table, rows);\n}\n\n//#endregion\n//#region src/utils/move-row.ts\n/**\n* Move a row from index `origin` to index `target`.\n*\n* @internal\n*/\nfunction moveRow(moveRowParams) {\n\tvar _getSelectionRangeInR, _getSelectionRangeInR2;\n\tconst { tr, originIndex, targetIndex, select, pos } = moveRowParams;\n\tconst table = findTable(tr.doc.resolve(pos));\n\tif (!table) return false;\n\tconst indexesOriginRow = (_getSelectionRangeInR = getSelectionRangeInRow(tr, originIndex)) === null || _getSelectionRangeInR === void 0 ? void 0 : _getSelectionRangeInR.indexes;\n\tconst indexesTargetRow = (_getSelectionRangeInR2 = getSelectionRangeInRow(tr, targetIndex)) === null || _getSelectionRangeInR2 === void 0 ? void 0 : _getSelectionRangeInR2.indexes;\n\tif (!indexesOriginRow || !indexesTargetRow) return false;\n\tif (indexesOriginRow.includes(targetIndex)) return false;\n\tconst newTable = moveTableRow$1(table.node, indexesOriginRow, indexesTargetRow, 0);\n\ttr.replaceWith(table.pos, table.pos + table.node.nodeSize, newTable);\n\tif (!select) return true;\n\tconst map = TableMap.get(newTable);\n\tconst start = table.start;\n\tconst index = targetIndex;\n\tconst lastCell = map.positionAt(index, map.width - 1, newTable);\n\tconst $lastCell = tr.doc.resolve(start + lastCell);\n\tconst firstCell = map.positionAt(index, 0, newTable);\n\tconst $firstCell = tr.doc.resolve(start + firstCell);\n\ttr.setSelection(CellSelection.rowSelection($lastCell, $firstCell));\n\treturn true;\n}\nfunction moveTableRow$1(table, indexesOrigin, indexesTarget, direction) {\n\tlet rows = convertTableNodeToArrayOfRows(table);\n\trows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n\treturn convertArrayOfRowsToTableNode(table, rows);\n}\n\n//#endregion\n//#region src/commands.ts\n/**\n* Helper to get the selected rectangle in a table, if any. Adds table\n* map, table node, and table start offset to the object for\n* convenience.\n*\n* @public\n*/\nfunction selectedRect(state) {\n\tconst sel = state.selection;\n\tconst $pos = selectionCell(state);\n\tconst table = $pos.node(-1);\n\tconst tableStart = $pos.start(-1);\n\tconst map = TableMap.get(table);\n\treturn {\n\t\t...sel instanceof CellSelection ? map.rectBetween(sel.$anchorCell.pos - tableStart, sel.$headCell.pos - tableStart) : map.findCell($pos.pos - tableStart),\n\t\ttableStart,\n\t\tmap,\n\t\ttable\n\t};\n}\n/**\n* Add a column at the given position in a table.\n*\n* @public\n*/\nfunction addColumn(tr, { map, tableStart, table }, col) {\n\tlet refColumn = col > 0 ? -1 : 0;\n\tif (columnIsHeader(map, table, col + refColumn)) refColumn = col == 0 || col == map.width ? null : 0;\n\tfor (let row = 0; row < map.height; row++) {\n\t\tconst index = row * map.width + col;\n\t\tif (col > 0 && col < map.width && map.map[index - 1] == map.map[index]) {\n\t\t\tconst pos = map.map[index];\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tableStart + pos), null, addColSpan(cell.attrs, col - map.colCount(pos)));\n\t\t\trow += cell.attrs.rowspan - 1;\n\t\t} else {\n\t\t\tconst type = refColumn == null ? tableNodeTypes(table.type.schema).cell : table.nodeAt(map.map[index + refColumn]).type;\n\t\t\tconst pos = map.positionAt(row, col, table);\n\t\t\ttr.insert(tr.mapping.map(tableStart + pos), type.createAndFill());\n\t\t}\n\t}\n\treturn tr;\n}\n/**\n* Command to add a column before the column with the selection.\n*\n* @public\n*/\nfunction addColumnBefore(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addColumn(state.tr, rect, rect.left));\n\t}\n\treturn true;\n}\n/**\n* Command to add a column after the column with the selection.\n*\n* @public\n*/\nfunction addColumnAfter(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addColumn(state.tr, rect, rect.right));\n\t}\n\treturn true;\n}\n/**\n* @public\n*/\nfunction removeColumn(tr, { map, table, tableStart }, col) {\n\tconst mapStart = tr.mapping.maps.length;\n\tfor (let row = 0; row < map.height;) {\n\t\tconst index = row * map.width + col;\n\t\tconst pos = map.map[index];\n\t\tconst cell = table.nodeAt(pos);\n\t\tconst attrs = cell.attrs;\n\t\tif (col > 0 && map.map[index - 1] == pos || col < map.width - 1 && map.map[index + 1] == pos) tr.setNodeMarkup(tr.mapping.slice(mapStart).map(tableStart + pos), null, removeColSpan(attrs, col - map.colCount(pos)));\n\t\telse {\n\t\t\tconst start = tr.mapping.slice(mapStart).map(tableStart + pos);\n\t\t\ttr.delete(start, start + cell.nodeSize);\n\t\t}\n\t\trow += attrs.rowspan;\n\t}\n}\n/**\n* Command function that removes the selected columns from a table.\n*\n* @public\n*/\nfunction deleteColumn(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tconst tr = state.tr;\n\t\tif (rect.left == 0 && rect.right == rect.map.width) return false;\n\t\tfor (let i = rect.right - 1;; i--) {\n\t\t\tremoveColumn(tr, rect, i);\n\t\t\tif (i == rect.left) break;\n\t\t\tconst table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n\t\t\tif (!table) throw new RangeError(\"No table found\");\n\t\t\trect.table = table;\n\t\t\trect.map = TableMap.get(table);\n\t\t}\n\t\tdispatch(tr);\n\t}\n\treturn true;\n}\n/**\n* @public\n*/\nfunction rowIsHeader(map, table, row) {\n\tvar _table$nodeAt;\n\tconst headerCell = tableNodeTypes(table.type.schema).header_cell;\n\tfor (let col = 0; col < map.width; col++) if (((_table$nodeAt = table.nodeAt(map.map[col + row * map.width])) === null || _table$nodeAt === void 0 ? void 0 : _table$nodeAt.type) != headerCell) return false;\n\treturn true;\n}\n/**\n* @public\n*/\nfunction addRow(tr, { map, tableStart, table }, row) {\n\tlet rowPos = tableStart;\n\tfor (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize;\n\tconst cells = [];\n\tlet refRow = row > 0 ? -1 : 0;\n\tif (rowIsHeader(map, table, row + refRow)) refRow = row == 0 || row == map.height ? null : 0;\n\tfor (let col = 0, index = map.width * row; col < map.width; col++, index++) if (row > 0 && row < map.height && map.map[index] == map.map[index - map.width]) {\n\t\tconst pos = map.map[index];\n\t\tconst attrs = table.nodeAt(pos).attrs;\n\t\ttr.setNodeMarkup(tableStart + pos, null, {\n\t\t\t...attrs,\n\t\t\trowspan: attrs.rowspan + 1\n\t\t});\n\t\tcol += attrs.colspan - 1;\n\t} else {\n\t\tvar _table$nodeAt2;\n\t\tconst type = refRow == null ? tableNodeTypes(table.type.schema).cell : (_table$nodeAt2 = table.nodeAt(map.map[index + refRow * map.width])) === null || _table$nodeAt2 === void 0 ? void 0 : _table$nodeAt2.type;\n\t\tconst node = type === null || type === void 0 ? void 0 : type.createAndFill();\n\t\tif (node) cells.push(node);\n\t}\n\ttr.insert(rowPos, tableNodeTypes(table.type.schema).row.create(null, cells));\n\treturn tr;\n}\n/**\n* Add a table row before the selection.\n*\n* @public\n*/\nfunction addRowBefore(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addRow(state.tr, rect, rect.top));\n\t}\n\treturn true;\n}\n/**\n* Add a table row after the selection.\n*\n* @public\n*/\nfunction addRowAfter(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addRow(state.tr, rect, rect.bottom));\n\t}\n\treturn true;\n}\n/**\n* @public\n*/\nfunction removeRow(tr, { map, table, tableStart }, row) {\n\tlet rowPos = 0;\n\tfor (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize;\n\tconst nextRow = rowPos + table.child(row).nodeSize;\n\tconst mapFrom = tr.mapping.maps.length;\n\ttr.delete(rowPos + tableStart, nextRow + tableStart);\n\tconst seen = /* @__PURE__ */ new Set();\n\tfor (let col = 0, index = row * map.width; col < map.width; col++, index++) {\n\t\tconst pos = map.map[index];\n\t\tif (seen.has(pos)) continue;\n\t\tseen.add(pos);\n\t\tif (row > 0 && pos == map.map[index - map.width]) {\n\t\t\tconst attrs = table.nodeAt(pos).attrs;\n\t\t\ttr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + tableStart), null, {\n\t\t\t\t...attrs,\n\t\t\t\trowspan: attrs.rowspan - 1\n\t\t\t});\n\t\t\tcol += attrs.colspan - 1;\n\t\t} else if (row < map.height && pos == map.map[index + map.width]) {\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tconst attrs = cell.attrs;\n\t\t\tconst copy = cell.type.create({\n\t\t\t\t...attrs,\n\t\t\t\trowspan: cell.attrs.rowspan - 1\n\t\t\t}, cell.content);\n\t\t\tconst newPos = map.positionAt(row + 1, col, table);\n\t\t\ttr.insert(tr.mapping.slice(mapFrom).map(tableStart + newPos), copy);\n\t\t\tcol += attrs.colspan - 1;\n\t\t}\n\t}\n}\n/**\n* Remove the selected rows from a table.\n*\n* @public\n*/\nfunction deleteRow(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\tif (rect.top == 0 && rect.bottom == rect.map.height) return false;\n\t\tfor (let i = rect.bottom - 1;; i--) {\n\t\t\tremoveRow(tr, rect, i);\n\t\t\tif (i == rect.top) break;\n\t\t\tconst table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n\t\t\tif (!table) throw new RangeError(\"No table found\");\n\t\t\trect.table = table;\n\t\t\trect.map = TableMap.get(rect.table);\n\t\t}\n\t\tdispatch(tr);\n\t}\n\treturn true;\n}\nfunction isEmpty(cell) {\n\tconst c = cell.content;\n\treturn c.childCount == 1 && c.child(0).isTextblock && c.child(0).childCount == 0;\n}\nfunction cellsOverlapRectangle({ width, height, map }, rect) {\n\tlet indexTop = rect.top * width + rect.left, indexLeft = indexTop;\n\tlet indexBottom = (rect.bottom - 1) * width + rect.left, indexRight = indexTop + (rect.right - rect.left - 1);\n\tfor (let i = rect.top; i < rect.bottom; i++) {\n\t\tif (rect.left > 0 && map[indexLeft] == map[indexLeft - 1] || rect.right < width && map[indexRight] == map[indexRight + 1]) return true;\n\t\tindexLeft += width;\n\t\tindexRight += width;\n\t}\n\tfor (let i = rect.left; i < rect.right; i++) {\n\t\tif (rect.top > 0 && map[indexTop] == map[indexTop - width] || rect.bottom < height && map[indexBottom] == map[indexBottom + width]) return true;\n\t\tindexTop++;\n\t\tindexBottom++;\n\t}\n\treturn false;\n}\n/**\n* Merge the selected cells into a single cell. Only available when\n* the selected cells' outline forms a rectangle.\n*\n* @public\n*/\nfunction mergeCells(state, dispatch) {\n\tconst sel = state.selection;\n\tif (!(sel instanceof CellSelection) || sel.$anchorCell.pos == sel.$headCell.pos) return false;\n\tconst rect = selectedRect(state), { map } = rect;\n\tif (cellsOverlapRectangle(map, rect)) return false;\n\tif (dispatch) {\n\t\tconst tr = state.tr;\n\t\tconst seen = {};\n\t\tlet content = Fragment.empty;\n\t\tlet mergedPos;\n\t\tlet mergedCell;\n\t\tfor (let row = rect.top; row < rect.bottom; row++) for (let col = rect.left; col < rect.right; col++) {\n\t\t\tconst cellPos = map.map[row * map.width + col];\n\t\t\tconst cell = rect.table.nodeAt(cellPos);\n\t\t\tif (seen[cellPos] || !cell) continue;\n\t\t\tseen[cellPos] = true;\n\t\t\tif (mergedPos == null) {\n\t\t\t\tmergedPos = cellPos;\n\t\t\t\tmergedCell = cell;\n\t\t\t} else {\n\t\t\t\tif (!isEmpty(cell)) content = content.append(cell.content);\n\t\t\t\tconst mapped = tr.mapping.map(cellPos + rect.tableStart);\n\t\t\t\ttr.delete(mapped, mapped + cell.nodeSize);\n\t\t\t}\n\t\t}\n\t\tif (mergedPos == null || mergedCell == null) return true;\n\t\ttr.setNodeMarkup(mergedPos + rect.tableStart, null, {\n\t\t\t...addColSpan(mergedCell.attrs, mergedCell.attrs.colspan, rect.right - rect.left - mergedCell.attrs.colspan),\n\t\t\trowspan: rect.bottom - rect.top\n\t\t});\n\t\tif (content.size > 0) {\n\t\t\tconst end = mergedPos + 1 + mergedCell.content.size;\n\t\t\tconst start = isEmpty(mergedCell) ? mergedPos + 1 : end;\n\t\t\ttr.replaceWith(start + rect.tableStart, end + rect.tableStart, content);\n\t\t}\n\t\ttr.setSelection(new CellSelection(tr.doc.resolve(mergedPos + rect.tableStart)));\n\t\tdispatch(tr);\n\t}\n\treturn true;\n}\n/**\n* Split a selected cell, whose rowpan or colspan is greater than one,\n* into smaller cells. Use the first cell type for the new cells.\n*\n* @public\n*/\nfunction splitCell(state, dispatch) {\n\tconst nodeTypes = tableNodeTypes(state.schema);\n\treturn splitCellWithType(({ node }) => {\n\t\treturn nodeTypes[node.type.spec.tableRole];\n\t})(state, dispatch);\n}\n/**\n* Split a selected cell, whose rowpan or colspan is greater than one,\n* into smaller cells with the cell type (th, td) returned by getType function.\n*\n* @public\n*/\nfunction splitCellWithType(getCellType) {\n\treturn (state, dispatch) => {\n\t\tconst sel = state.selection;\n\t\tlet cellNode;\n\t\tlet cellPos;\n\t\tif (!(sel instanceof CellSelection)) {\n\t\t\tvar _cellAround;\n\t\t\tcellNode = cellWrapping(sel.$from);\n\t\t\tif (!cellNode) return false;\n\t\t\tcellPos = (_cellAround = cellAround(sel.$from)) === null || _cellAround === void 0 ? void 0 : _cellAround.pos;\n\t\t} else {\n\t\t\tif (sel.$anchorCell.pos != sel.$headCell.pos) return false;\n\t\t\tcellNode = sel.$anchorCell.nodeAfter;\n\t\t\tcellPos = sel.$anchorCell.pos;\n\t\t}\n\t\tif (cellNode == null || cellPos == null) return false;\n\t\tif (cellNode.attrs.colspan == 1 && cellNode.attrs.rowspan == 1) return false;\n\t\tif (dispatch) {\n\t\t\tlet baseAttrs = cellNode.attrs;\n\t\t\tconst attrs = [];\n\t\t\tconst colwidth = baseAttrs.colwidth;\n\t\t\tif (baseAttrs.rowspan > 1) baseAttrs = {\n\t\t\t\t...baseAttrs,\n\t\t\t\trowspan: 1\n\t\t\t};\n\t\t\tif (baseAttrs.colspan > 1) baseAttrs = {\n\t\t\t\t...baseAttrs,\n\t\t\t\tcolspan: 1\n\t\t\t};\n\t\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\t\tfor (let i = 0; i < rect.right - rect.left; i++) attrs.push(colwidth ? {\n\t\t\t\t...baseAttrs,\n\t\t\t\tcolwidth: colwidth && colwidth[i] ? [colwidth[i]] : null\n\t\t\t} : baseAttrs);\n\t\t\tlet lastCell;\n\t\t\tfor (let row = rect.top; row < rect.bottom; row++) {\n\t\t\t\tlet pos = rect.map.positionAt(row, rect.left, rect.table);\n\t\t\t\tif (row == rect.top) pos += cellNode.nodeSize;\n\t\t\t\tfor (let col = rect.left, i = 0; col < rect.right; col++, i++) {\n\t\t\t\t\tif (col == rect.left && row == rect.top) continue;\n\t\t\t\t\ttr.insert(lastCell = tr.mapping.map(pos + rect.tableStart, 1), getCellType({\n\t\t\t\t\t\tnode: cellNode,\n\t\t\t\t\t\trow,\n\t\t\t\t\t\tcol\n\t\t\t\t\t}).createAndFill(attrs[i]));\n\t\t\t\t}\n\t\t\t}\n\t\t\ttr.setNodeMarkup(cellPos, getCellType({\n\t\t\t\tnode: cellNode,\n\t\t\t\trow: rect.top,\n\t\t\t\tcol: rect.left\n\t\t\t}), attrs[0]);\n\t\t\tif (sel instanceof CellSelection) tr.setSelection(new CellSelection(tr.doc.resolve(sel.$anchorCell.pos), lastCell ? tr.doc.resolve(lastCell) : void 0));\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\n/**\n* Returns a command that sets the given attribute to the given value,\n* and is only available when the currently selected cell doesn't\n* already have that attribute set to that value.\n*\n* @public\n*/\nfunction setCellAttr(name, value) {\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tconst $cell = selectionCell(state);\n\t\tif ($cell.nodeAfter.attrs[name] === value) return false;\n\t\tif (dispatch) {\n\t\t\tconst tr = state.tr;\n\t\t\tif (state.selection instanceof CellSelection) state.selection.forEachCell((node, pos) => {\n\t\t\t\tif (node.attrs[name] !== value) tr.setNodeMarkup(pos, null, {\n\t\t\t\t\t...node.attrs,\n\t\t\t\t\t[name]: value\n\t\t\t\t});\n\t\t\t});\n\t\t\telse tr.setNodeMarkup($cell.pos, null, {\n\t\t\t\t...$cell.nodeAfter.attrs,\n\t\t\t\t[name]: value\n\t\t\t});\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\nfunction deprecated_toggleHeader(type) {\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tif (dispatch) {\n\t\t\tconst types = tableNodeTypes(state.schema);\n\t\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\t\tconst cells = rect.map.cellsInRect(type == \"column\" ? {\n\t\t\t\tleft: rect.left,\n\t\t\t\ttop: 0,\n\t\t\t\tright: rect.right,\n\t\t\t\tbottom: rect.map.height\n\t\t\t} : type == \"row\" ? {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: rect.top,\n\t\t\t\tright: rect.map.width,\n\t\t\t\tbottom: rect.bottom\n\t\t\t} : rect);\n\t\t\tconst nodes = cells.map((pos) => rect.table.nodeAt(pos));\n\t\t\tfor (let i = 0; i < cells.length; i++) if (nodes[i].type == types.header_cell) tr.setNodeMarkup(rect.tableStart + cells[i], types.cell, nodes[i].attrs);\n\t\t\tif (tr.steps.length === 0) for (let i = 0; i < cells.length; i++) tr.setNodeMarkup(rect.tableStart + cells[i], types.header_cell, nodes[i].attrs);\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\nfunction isHeaderEnabledByType(type, rect, types) {\n\tconst cellPositions = rect.map.cellsInRect({\n\t\tleft: 0,\n\t\ttop: 0,\n\t\tright: type == \"row\" ? rect.map.width : 1,\n\t\tbottom: type == \"column\" ? rect.map.height : 1\n\t});\n\tfor (let i = 0; i < cellPositions.length; i++) {\n\t\tconst cell = rect.table.nodeAt(cellPositions[i]);\n\t\tif (cell && cell.type !== types.header_cell) return false;\n\t}\n\treturn true;\n}\n/**\n* Toggles between row/column header and normal cells (Only applies to first row/column).\n* For deprecated behavior pass `useDeprecatedLogic` in options with true.\n*\n* @public\n*/\nfunction toggleHeader(type, options) {\n\toptions = options || { useDeprecatedLogic: false };\n\tif (options.useDeprecatedLogic) return deprecated_toggleHeader(type);\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tif (dispatch) {\n\t\t\tconst types = tableNodeTypes(state.schema);\n\t\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\t\tconst isHeaderRowEnabled = isHeaderEnabledByType(\"row\", rect, types);\n\t\t\tconst isHeaderColumnEnabled = isHeaderEnabledByType(\"column\", rect, types);\n\t\t\tconst selectionStartsAt = (type === \"column\" ? isHeaderRowEnabled : type === \"row\" ? isHeaderColumnEnabled : false) ? 1 : 0;\n\t\t\tconst cellsRect = type == \"column\" ? {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: selectionStartsAt,\n\t\t\t\tright: 1,\n\t\t\t\tbottom: rect.map.height\n\t\t\t} : type == \"row\" ? {\n\t\t\t\tleft: selectionStartsAt,\n\t\t\t\ttop: 0,\n\t\t\t\tright: rect.map.width,\n\t\t\t\tbottom: 1\n\t\t\t} : rect;\n\t\t\tconst newType = type == \"column\" ? isHeaderColumnEnabled ? types.cell : types.header_cell : type == \"row\" ? isHeaderRowEnabled ? types.cell : types.header_cell : types.cell;\n\t\t\trect.map.cellsInRect(cellsRect).forEach((relativeCellPos) => {\n\t\t\t\tconst cellPos = relativeCellPos + rect.tableStart;\n\t\t\t\tconst cell = tr.doc.nodeAt(cellPos);\n\t\t\t\tif (cell) tr.setNodeMarkup(cellPos, newType, cell.attrs);\n\t\t\t});\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\n/**\n* Toggles whether the selected row contains header cells.\n*\n* @public\n*/\nconst toggleHeaderRow = toggleHeader(\"row\", { useDeprecatedLogic: true });\n/**\n* Toggles whether the selected column contains header cells.\n*\n* @public\n*/\nconst toggleHeaderColumn = toggleHeader(\"column\", { useDeprecatedLogic: true });\n/**\n* Toggles whether the selected cells are header cells.\n*\n* @public\n*/\nconst toggleHeaderCell = toggleHeader(\"cell\", { useDeprecatedLogic: true });\nfunction findNextCell($cell, dir) {\n\tif (dir < 0) {\n\t\tconst before = $cell.nodeBefore;\n\t\tif (before) return $cell.pos - before.nodeSize;\n\t\tfor (let row = $cell.index(-1) - 1, rowEnd = $cell.before(); row >= 0; row--) {\n\t\t\tconst rowNode = $cell.node(-1).child(row);\n\t\t\tconst lastChild = rowNode.lastChild;\n\t\t\tif (lastChild) return rowEnd - 1 - lastChild.nodeSize;\n\t\t\trowEnd -= rowNode.nodeSize;\n\t\t}\n\t} else {\n\t\tif ($cell.index() < $cell.parent.childCount - 1) return $cell.pos + $cell.nodeAfter.nodeSize;\n\t\tconst table = $cell.node(-1);\n\t\tfor (let row = $cell.indexAfter(-1), rowStart = $cell.after(); row < table.childCount; row++) {\n\t\t\tconst rowNode = table.child(row);\n\t\t\tif (rowNode.childCount) return rowStart + 1;\n\t\t\trowStart += rowNode.nodeSize;\n\t\t}\n\t}\n\treturn null;\n}\n/**\n* Returns a command for selecting the next (direction=1) or previous\n* (direction=-1) cell in a table.\n*\n* @public\n*/\nfunction goToNextCell(direction) {\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tconst cell = findNextCell(selectionCell(state), direction);\n\t\tif (cell == null) return false;\n\t\tif (dispatch) {\n\t\t\tconst $cell = state.doc.resolve(cell);\n\t\t\tdispatch(state.tr.setSelection(TextSelection.between($cell, moveCellForward($cell))).scrollIntoView());\n\t\t}\n\t\treturn true;\n\t};\n}\n/**\n* Deletes the table around the selection, if any.\n*\n* @public\n*/\nfunction deleteTable(state, dispatch) {\n\tconst $pos = state.selection.$anchor;\n\tfor (let d = $pos.depth; d > 0; d--) if ($pos.node(d).type.spec.tableRole == \"table\") {\n\t\tif (dispatch) dispatch(state.tr.delete($pos.before(d), $pos.after(d)).scrollIntoView());\n\t\treturn true;\n\t}\n\treturn false;\n}\n/**\n* Deletes the content of the selected cells, if they are not empty.\n*\n* @public\n*/\nfunction deleteCellSelection(state, dispatch) {\n\tconst sel = state.selection;\n\tif (!(sel instanceof CellSelection)) return false;\n\tif (dispatch) {\n\t\tconst tr = state.tr;\n\t\tconst baseContent = tableNodeTypes(state.schema).cell.createAndFill().content;\n\t\tsel.forEachCell((cell, pos) => {\n\t\t\tif (!cell.content.eq(baseContent)) tr.replace(tr.mapping.map(pos + 1), tr.mapping.map(pos + cell.nodeSize - 1), new Slice(baseContent, 0, 0));\n\t\t});\n\t\tif (tr.docChanged) dispatch(tr);\n\t}\n\treturn true;\n}\n/**\n* Move a table row from index `from` to index `to`.\n*\n* @public\n*/\nfunction moveTableRow(options) {\n\treturn (state, dispatch) => {\n\t\tconst { from: originIndex, to: targetIndex, select = true, pos = state.selection.from } = options;\n\t\tconst tr = state.tr;\n\t\tif (moveRow({\n\t\t\ttr,\n\t\t\toriginIndex,\n\t\t\ttargetIndex,\n\t\t\tselect,\n\t\t\tpos\n\t\t})) {\n\t\t\tdispatch === null || dispatch === void 0 || dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n}\n/**\n* Move a table column from index `from` to index `to`.\n*\n* @public\n*/\nfunction moveTableColumn(options) {\n\treturn (state, dispatch) => {\n\t\tconst { from: originIndex, to: targetIndex, select = true, pos = state.selection.from } = options;\n\t\tconst tr = state.tr;\n\t\tif (moveColumn({\n\t\t\ttr,\n\t\t\toriginIndex,\n\t\t\ttargetIndex,\n\t\t\tselect,\n\t\t\tpos\n\t\t})) {\n\t\t\tdispatch === null || dispatch === void 0 || dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n}\n\n//#endregion\n//#region src/copypaste.ts\n/**\n* Get a rectangular area of cells from a slice, or null if the outer\n* nodes of the slice aren't table cells or rows.\n*\n* @internal\n*/\nfunction pastedCells(slice) {\n\tif (slice.size === 0) return null;\n\tlet { content, openStart, openEnd } = slice;\n\twhile (content.childCount == 1 && (openStart > 0 && openEnd > 0 || content.child(0).type.spec.tableRole == \"table\")) {\n\t\topenStart--;\n\t\topenEnd--;\n\t\tcontent = content.child(0).content;\n\t}\n\tconst first = content.child(0);\n\tconst role = first.type.spec.tableRole;\n\tconst schema = first.type.schema, rows = [];\n\tif (role == \"row\") for (let i = 0; i < content.childCount; i++) {\n\t\tlet cells = content.child(i).content;\n\t\tconst left = i ? 0 : Math.max(0, openStart - 1);\n\t\tconst right = i < content.childCount - 1 ? 0 : Math.max(0, openEnd - 1);\n\t\tif (left || right) cells = fitSlice(tableNodeTypes(schema).row, new Slice(cells, left, right)).content;\n\t\trows.push(cells);\n\t}\n\telse if (role == \"cell\" || role == \"header_cell\") rows.push(openStart || openEnd ? fitSlice(tableNodeTypes(schema).row, new Slice(content, openStart, openEnd)).content : content);\n\telse return null;\n\treturn ensureRectangular(schema, rows);\n}\nfunction ensureRectangular(schema, rows) {\n\tconst widths = [];\n\tfor (let i = 0; i < rows.length; i++) {\n\t\tconst row = rows[i];\n\t\tfor (let j = row.childCount - 1; j >= 0; j--) {\n\t\t\tconst { rowspan, colspan } = row.child(j).attrs;\n\t\t\tfor (let r = i; r < i + rowspan; r++) widths[r] = (widths[r] || 0) + colspan;\n\t\t}\n\t}\n\tlet width = 0;\n\tfor (let r = 0; r < widths.length; r++) width = Math.max(width, widths[r]);\n\tfor (let r = 0; r < widths.length; r++) {\n\t\tif (r >= rows.length) rows.push(Fragment.empty);\n\t\tif (widths[r] < width) {\n\t\t\tconst empty = tableNodeTypes(schema).cell.createAndFill();\n\t\t\tconst cells = [];\n\t\t\tfor (let i = widths[r]; i < width; i++) cells.push(empty);\n\t\t\trows[r] = rows[r].append(Fragment.from(cells));\n\t\t}\n\t}\n\treturn {\n\t\theight: rows.length,\n\t\twidth,\n\t\trows\n\t};\n}\nfunction fitSlice(nodeType, slice) {\n\tconst node = nodeType.createAndFill();\n\treturn new Transform(node).replace(0, node.content.size, slice).doc;\n}\n/**\n* Clip or extend (repeat) the given set of cells to cover the given\n* width and height. Will clip rowspan/colspan cells at the edges when\n* they stick out.\n*\n* @internal\n*/\nfunction clipCells({ width, height, rows }, newWidth, newHeight) {\n\tif (width != newWidth) {\n\t\tconst added = [];\n\t\tconst newRows = [];\n\t\tfor (let row = 0; row < rows.length; row++) {\n\t\t\tconst frag = rows[row], cells = [];\n\t\t\tfor (let col = added[row] || 0, i = 0; col < newWidth; i++) {\n\t\t\t\tlet cell = frag.child(i % frag.childCount);\n\t\t\t\tif (col + cell.attrs.colspan > newWidth) cell = cell.type.createChecked(removeColSpan(cell.attrs, cell.attrs.colspan, col + cell.attrs.colspan - newWidth), cell.content);\n\t\t\t\tcells.push(cell);\n\t\t\t\tcol += cell.attrs.colspan;\n\t\t\t\tfor (let j = 1; j < cell.attrs.rowspan; j++) added[row + j] = (added[row + j] || 0) + cell.attrs.colspan;\n\t\t\t}\n\t\t\tnewRows.push(Fragment.from(cells));\n\t\t}\n\t\trows = newRows;\n\t\twidth = newWidth;\n\t}\n\tif (height != newHeight) {\n\t\tconst newRows = [];\n\t\tfor (let row = 0, i = 0; row < newHeight; row++, i++) {\n\t\t\tconst cells = [], source = rows[i % height];\n\t\t\tfor (let j = 0; j < source.childCount; j++) {\n\t\t\t\tlet cell = source.child(j);\n\t\t\t\tif (row + cell.attrs.rowspan > newHeight) cell = cell.type.create({\n\t\t\t\t\t...cell.attrs,\n\t\t\t\t\trowspan: Math.max(1, newHeight - cell.attrs.rowspan)\n\t\t\t\t}, cell.content);\n\t\t\t\tcells.push(cell);\n\t\t\t}\n\t\t\tnewRows.push(Fragment.from(cells));\n\t\t}\n\t\trows = newRows;\n\t\theight = newHeight;\n\t}\n\treturn {\n\t\twidth,\n\t\theight,\n\t\trows\n\t};\n}\nfunction growTable(tr, map, table, start, width, height, mapFrom) {\n\tconst schema = tr.doc.type.schema;\n\tconst types = tableNodeTypes(schema);\n\tlet empty;\n\tlet emptyHead;\n\tif (width > map.width) for (let row = 0, rowEnd = 0; row < map.height; row++) {\n\t\tconst rowNode = table.child(row);\n\t\trowEnd += rowNode.nodeSize;\n\t\tconst cells = [];\n\t\tlet add;\n\t\tif (rowNode.lastChild == null || rowNode.lastChild.type == types.cell) add = empty || (empty = types.cell.createAndFill());\n\t\telse add = emptyHead || (emptyHead = types.header_cell.createAndFill());\n\t\tfor (let i = map.width; i < width; i++) cells.push(add);\n\t\ttr.insert(tr.mapping.slice(mapFrom).map(rowEnd - 1 + start), cells);\n\t}\n\tif (height > map.height) {\n\t\tconst cells = [];\n\t\tfor (let i = 0, start$1 = (map.height - 1) * map.width; i < Math.max(map.width, width); i++) {\n\t\t\tconst header = i >= map.width ? false : table.nodeAt(map.map[start$1 + i]).type == types.header_cell;\n\t\t\tcells.push(header ? emptyHead || (emptyHead = types.header_cell.createAndFill()) : empty || (empty = types.cell.createAndFill()));\n\t\t}\n\t\tconst emptyRow = types.row.create(null, Fragment.from(cells)), rows = [];\n\t\tfor (let i = map.height; i < height; i++) rows.push(emptyRow);\n\t\ttr.insert(tr.mapping.slice(mapFrom).map(start + table.nodeSize - 2), rows);\n\t}\n\treturn !!(empty || emptyHead);\n}\nfunction isolateHorizontal(tr, map, table, start, left, right, top, mapFrom) {\n\tif (top == 0 || top == map.height) return false;\n\tlet found = false;\n\tfor (let col = left; col < right; col++) {\n\t\tconst index = top * map.width + col, pos = map.map[index];\n\t\tif (map.map[index - map.width] == pos) {\n\t\t\tfound = true;\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tconst { top: cellTop, left: cellLeft } = map.findCell(pos);\n\t\t\ttr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + start), null, {\n\t\t\t\t...cell.attrs,\n\t\t\t\trowspan: top - cellTop\n\t\t\t});\n\t\t\ttr.insert(tr.mapping.slice(mapFrom).map(map.positionAt(top, cellLeft, table)), cell.type.createAndFill({\n\t\t\t\t...cell.attrs,\n\t\t\t\trowspan: cellTop + cell.attrs.rowspan - top\n\t\t\t}));\n\t\t\tcol += cell.attrs.colspan - 1;\n\t\t}\n\t}\n\treturn found;\n}\nfunction isolateVertical(tr, map, table, start, top, bottom, left, mapFrom) {\n\tif (left == 0 || left == map.width) return false;\n\tlet found = false;\n\tfor (let row = top; row < bottom; row++) {\n\t\tconst index = row * map.width + left, pos = map.map[index];\n\t\tif (map.map[index - 1] == pos) {\n\t\t\tfound = true;\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tconst cellLeft = map.colCount(pos);\n\t\t\tconst updatePos = tr.mapping.slice(mapFrom).map(pos + start);\n\t\t\ttr.setNodeMarkup(updatePos, null, removeColSpan(cell.attrs, left - cellLeft, cell.attrs.colspan - (left - cellLeft)));\n\t\t\ttr.insert(updatePos + cell.nodeSize, cell.type.createAndFill(removeColSpan(cell.attrs, 0, left - cellLeft)));\n\t\t\trow += cell.attrs.rowspan - 1;\n\t\t}\n\t}\n\treturn found;\n}\n/**\n* Insert the given set of cells (as returned by `pastedCells`) into a\n* table, at the position pointed at by rect.\n*\n* @internal\n*/\nfunction insertCells(state, dispatch, tableStart, rect, cells) {\n\tlet table = tableStart ? state.doc.nodeAt(tableStart - 1) : state.doc;\n\tif (!table) throw new Error(\"No table found\");\n\tlet map = TableMap.get(table);\n\tconst { top, left } = rect;\n\tconst right = left + cells.width, bottom = top + cells.height;\n\tconst tr = state.tr;\n\tlet mapFrom = 0;\n\tfunction recomp() {\n\t\ttable = tableStart ? tr.doc.nodeAt(tableStart - 1) : tr.doc;\n\t\tif (!table) throw new Error(\"No table found\");\n\t\tmap = TableMap.get(table);\n\t\tmapFrom = tr.mapping.maps.length;\n\t}\n\tif (growTable(tr, map, table, tableStart, right, bottom, mapFrom)) recomp();\n\tif (isolateHorizontal(tr, map, table, tableStart, left, right, top, mapFrom)) recomp();\n\tif (isolateHorizontal(tr, map, table, tableStart, left, right, bottom, mapFrom)) recomp();\n\tif (isolateVertical(tr, map, table, tableStart, top, bottom, left, mapFrom)) recomp();\n\tif (isolateVertical(tr, map, table, tableStart, top, bottom, right, mapFrom)) recomp();\n\tfor (let row = top; row < bottom; row++) {\n\t\tconst from = map.positionAt(row, left, table), to = map.positionAt(row, right, table);\n\t\ttr.replace(tr.mapping.slice(mapFrom).map(from + tableStart), tr.mapping.slice(mapFrom).map(to + tableStart), new Slice(cells.rows[row - top], 0, 0));\n\t}\n\trecomp();\n\ttr.setSelection(new CellSelection(tr.doc.resolve(tableStart + map.positionAt(top, left, table)), tr.doc.resolve(tableStart + map.positionAt(bottom - 1, right - 1, table))));\n\tdispatch(tr);\n}\n\n//#endregion\n//#region src/input.ts\nconst handleKeyDown = keydownHandler({\n\tArrowLeft: arrow(\"horiz\", -1),\n\tArrowRight: arrow(\"horiz\", 1),\n\tArrowUp: arrow(\"vert\", -1),\n\tArrowDown: arrow(\"vert\", 1),\n\t\"Shift-ArrowLeft\": shiftArrow(\"horiz\", -1),\n\t\"Shift-ArrowRight\": shiftArrow(\"horiz\", 1),\n\t\"Shift-ArrowUp\": shiftArrow(\"vert\", -1),\n\t\"Shift-ArrowDown\": shiftArrow(\"vert\", 1),\n\tBackspace: deleteCellSelection,\n\t\"Mod-Backspace\": deleteCellSelection,\n\tDelete: deleteCellSelection,\n\t\"Mod-Delete\": deleteCellSelection\n});\nfunction maybeSetSelection(state, dispatch, selection) {\n\tif (selection.eq(state.selection)) return false;\n\tif (dispatch) dispatch(state.tr.setSelection(selection).scrollIntoView());\n\treturn true;\n}\n/**\n* @internal\n*/\nfunction arrow(axis, dir) {\n\treturn (state, dispatch, view) => {\n\t\tif (!view) return false;\n\t\tconst sel = state.selection;\n\t\tif (sel instanceof CellSelection) return maybeSetSelection(state, dispatch, Selection.near(sel.$headCell, dir));\n\t\tif (axis != \"horiz\" && !sel.empty) return false;\n\t\tconst end = atEndOfCell(view, axis, dir);\n\t\tif (end == null) return false;\n\t\tif (axis == \"horiz\") return maybeSetSelection(state, dispatch, Selection.near(state.doc.resolve(sel.head + dir), dir));\n\t\telse {\n\t\t\tconst $cell = state.doc.resolve(end);\n\t\t\tconst $next = nextCell($cell, axis, dir);\n\t\t\tlet newSel;\n\t\t\tif ($next) newSel = Selection.near($next, 1);\n\t\t\telse if (dir < 0) newSel = Selection.near(state.doc.resolve($cell.before(-1)), -1);\n\t\t\telse newSel = Selection.near(state.doc.resolve($cell.after(-1)), 1);\n\t\t\treturn maybeSetSelection(state, dispatch, newSel);\n\t\t}\n\t};\n}\nfunction shiftArrow(axis, dir) {\n\treturn (state, dispatch, view) => {\n\t\tif (!view) return false;\n\t\tconst sel = state.selection;\n\t\tlet cellSel;\n\t\tif (sel instanceof CellSelection) cellSel = sel;\n\t\telse {\n\t\t\tconst end = atEndOfCell(view, axis, dir);\n\t\t\tif (end == null) return false;\n\t\t\tcellSel = new CellSelection(state.doc.resolve(end));\n\t\t}\n\t\tconst $head = nextCell(cellSel.$headCell, axis, dir);\n\t\tif (!$head) return false;\n\t\treturn maybeSetSelection(state, dispatch, new CellSelection(cellSel.$anchorCell, $head));\n\t};\n}\nfunction handleTripleClick(view, pos) {\n\tconst doc = view.state.doc, $cell = cellAround(doc.resolve(pos));\n\tif (!$cell) return false;\n\tview.dispatch(view.state.tr.setSelection(new CellSelection($cell)));\n\treturn true;\n}\n/**\n* @public\n*/\nfunction handlePaste(view, _, slice) {\n\tif (!isInTable(view.state)) return false;\n\tlet cells = pastedCells(slice);\n\tconst sel = view.state.selection;\n\tif (sel instanceof CellSelection) {\n\t\tif (!cells) cells = {\n\t\t\twidth: 1,\n\t\t\theight: 1,\n\t\t\trows: [Fragment.from(fitSlice(tableNodeTypes(view.state.schema).cell, slice))]\n\t\t};\n\t\tconst table = sel.$anchorCell.node(-1);\n\t\tconst start = sel.$anchorCell.start(-1);\n\t\tconst rect = TableMap.get(table).rectBetween(sel.$anchorCell.pos - start, sel.$headCell.pos - start);\n\t\tcells = clipCells(cells, rect.right - rect.left, rect.bottom - rect.top);\n\t\tinsertCells(view.state, view.dispatch, start, rect, cells);\n\t\treturn true;\n\t} else if (cells) {\n\t\tconst $cell = selectionCell(view.state);\n\t\tconst start = $cell.start(-1);\n\t\tinsertCells(view.state, view.dispatch, start, TableMap.get($cell.node(-1)).findCell($cell.pos - start), cells);\n\t\treturn true;\n\t} else return false;\n}\nfunction handleMouseDown$1(view, startEvent) {\n\tvar _cellUnderMouse;\n\tif (startEvent.button != 0) return;\n\tif (startEvent.ctrlKey || startEvent.metaKey) return;\n\tconst startDOMCell = domInCell(view, startEvent.target);\n\tlet $anchor;\n\tif (startEvent.shiftKey && view.state.selection instanceof CellSelection) {\n\t\tsetCellSelection(view.state.selection.$anchorCell, startEvent);\n\t\tstartEvent.preventDefault();\n\t} else if (startEvent.shiftKey && startDOMCell && ($anchor = cellAround(view.state.selection.$anchor)) != null && ((_cellUnderMouse = cellUnderMouse(view, startEvent)) === null || _cellUnderMouse === void 0 ? void 0 : _cellUnderMouse.pos) != $anchor.pos) {\n\t\tsetCellSelection($anchor, startEvent);\n\t\tstartEvent.preventDefault();\n\t} else if (!startDOMCell) return;\n\tfunction setCellSelection($anchor$1, event) {\n\t\tlet $head = cellUnderMouse(view, event);\n\t\tconst starting = tableEditingKey.getState(view.state) == null;\n\t\tif (!$head || !inSameTable($anchor$1, $head)) if (starting) $head = $anchor$1;\n\t\telse return;\n\t\tconst selection = new CellSelection($anchor$1, $head);\n\t\tif (starting || !view.state.selection.eq(selection)) {\n\t\t\tconst tr = view.state.tr.setSelection(selection);\n\t\t\tif (starting) tr.setMeta(tableEditingKey, $anchor$1.pos);\n\t\t\tview.dispatch(tr);\n\t\t}\n\t}\n\tfunction stop() {\n\t\tview.root.removeEventListener(\"mouseup\", stop);\n\t\tview.root.removeEventListener(\"dragstart\", stop);\n\t\tview.root.removeEventListener(\"mousemove\", move);\n\t\tif (tableEditingKey.getState(view.state) != null) view.dispatch(view.state.tr.setMeta(tableEditingKey, -1));\n\t}\n\tfunction move(_event) {\n\t\tconst event = _event;\n\t\tconst anchor = tableEditingKey.getState(view.state);\n\t\tlet $anchor$1;\n\t\tif (anchor != null) $anchor$1 = view.state.doc.resolve(anchor);\n\t\telse if (domInCell(view, event.target) != startDOMCell) {\n\t\t\t$anchor$1 = cellUnderMouse(view, startEvent);\n\t\t\tif (!$anchor$1) return stop();\n\t\t}\n\t\tif ($anchor$1) setCellSelection($anchor$1, event);\n\t}\n\tview.root.addEventListener(\"mouseup\", stop);\n\tview.root.addEventListener(\"dragstart\", stop);\n\tview.root.addEventListener(\"mousemove\", move);\n}\nfunction atEndOfCell(view, axis, dir) {\n\tif (!(view.state.selection instanceof TextSelection)) return null;\n\tconst { $head } = view.state.selection;\n\tfor (let d = $head.depth - 1; d >= 0; d--) {\n\t\tconst parent = $head.node(d);\n\t\tif ((dir < 0 ? $head.index(d) : $head.indexAfter(d)) != (dir < 0 ? 0 : parent.childCount)) return null;\n\t\tif (parent.type.spec.tableRole == \"cell\" || parent.type.spec.tableRole == \"header_cell\") {\n\t\t\tconst cellPos = $head.before(d);\n\t\t\tconst dirStr = axis == \"vert\" ? dir > 0 ? \"down\" : \"up\" : dir > 0 ? \"right\" : \"left\";\n\t\t\treturn view.endOfTextblock(dirStr) ? cellPos : null;\n\t\t}\n\t}\n\treturn null;\n}\nfunction domInCell(view, dom) {\n\tfor (; dom && dom != view.dom; dom = dom.parentNode) if (dom.nodeName == \"TD\" || dom.nodeName == \"TH\") return dom;\n\treturn null;\n}\nfunction cellUnderMouse(view, event) {\n\tconst mousePos = view.posAtCoords({\n\t\tleft: event.clientX,\n\t\ttop: event.clientY\n\t});\n\tif (!mousePos) return null;\n\tlet { inside, pos } = mousePos;\n\treturn inside >= 0 && cellAround(view.state.doc.resolve(inside)) || cellAround(view.state.doc.resolve(pos));\n}\n\n//#endregion\n//#region src/tableview.ts\n/**\n* @public\n*/\nvar TableView = class {\n\tconstructor(node, defaultCellMinWidth) {\n\t\tthis.node = node;\n\t\tthis.defaultCellMinWidth = defaultCellMinWidth;\n\t\tthis.dom = document.createElement(\"div\");\n\t\tthis.dom.className = \"tableWrapper\";\n\t\tthis.table = this.dom.appendChild(document.createElement(\"table\"));\n\t\tthis.table.style.setProperty(\"--default-cell-min-width\", `${defaultCellMinWidth}px`);\n\t\tthis.colgroup = this.table.appendChild(document.createElement(\"colgroup\"));\n\t\tupdateColumnsOnResize(node, this.colgroup, this.table, defaultCellMinWidth);\n\t\tthis.contentDOM = this.table.appendChild(document.createElement(\"tbody\"));\n\t}\n\tupdate(node) {\n\t\tif (node.type != this.node.type) return false;\n\t\tthis.node = node;\n\t\tupdateColumnsOnResize(node, this.colgroup, this.table, this.defaultCellMinWidth);\n\t\treturn true;\n\t}\n\tignoreMutation(record) {\n\t\treturn record.type == \"attributes\" && (record.target == this.table || this.colgroup.contains(record.target));\n\t}\n};\n/**\n* @public\n*/\nfunction updateColumnsOnResize(node, colgroup, table, defaultCellMinWidth, overrideCol, overrideValue) {\n\tlet totalWidth = 0;\n\tlet fixedWidth = true;\n\tlet nextDOM = colgroup.firstChild;\n\tconst row = node.firstChild;\n\tif (!row) return;\n\tfor (let i = 0, col = 0; i < row.childCount; i++) {\n\t\tconst { colspan, colwidth } = row.child(i).attrs;\n\t\tfor (let j = 0; j < colspan; j++, col++) {\n\t\t\tconst hasWidth = overrideCol == col ? overrideValue : colwidth && colwidth[j];\n\t\t\tconst cssWidth = hasWidth ? hasWidth + \"px\" : \"\";\n\t\t\ttotalWidth += hasWidth || defaultCellMinWidth;\n\t\t\tif (!hasWidth) fixedWidth = false;\n\t\t\tif (!nextDOM) {\n\t\t\t\tconst col$1 = document.createElement(\"col\");\n\t\t\t\tcol$1.style.width = cssWidth;\n\t\t\t\tcolgroup.appendChild(col$1);\n\t\t\t} else {\n\t\t\t\tif (nextDOM.style.width != cssWidth) nextDOM.style.width = cssWidth;\n\t\t\t\tnextDOM = nextDOM.nextSibling;\n\t\t\t}\n\t\t}\n\t}\n\twhile (nextDOM) {\n\t\tvar _nextDOM$parentNode;\n\t\tconst after = nextDOM.nextSibling;\n\t\t(_nextDOM$parentNode = nextDOM.parentNode) === null || _nextDOM$parentNode === void 0 || _nextDOM$parentNode.removeChild(nextDOM);\n\t\tnextDOM = after;\n\t}\n\tif (fixedWidth) {\n\t\ttable.style.width = totalWidth + \"px\";\n\t\ttable.style.minWidth = \"\";\n\t} else {\n\t\ttable.style.width = \"\";\n\t\ttable.style.minWidth = totalWidth + \"px\";\n\t}\n}\n\n//#endregion\n//#region src/columnresizing.ts\n/**\n* @public\n*/\nconst columnResizingPluginKey = new PluginKey(\"tableColumnResizing\");\n/**\n* @public\n*/\nfunction columnResizing({ handleWidth = 5, cellMinWidth = 25, defaultCellMinWidth = 100, View = TableView, lastColumnResizable = true } = {}) {\n\tconst plugin = new Plugin({\n\t\tkey: columnResizingPluginKey,\n\t\tstate: {\n\t\t\tinit(_, state) {\n\t\t\t\tvar _plugin$spec;\n\t\t\t\tconst nodeViews = (_plugin$spec = plugin.spec) === null || _plugin$spec === void 0 || (_plugin$spec = _plugin$spec.props) === null || _plugin$spec === void 0 ? void 0 : _plugin$spec.nodeViews;\n\t\t\t\tconst tableName = tableNodeTypes(state.schema).table.name;\n\t\t\t\tif (View && nodeViews) nodeViews[tableName] = (node, view) => {\n\t\t\t\t\treturn new View(node, defaultCellMinWidth, view);\n\t\t\t\t};\n\t\t\t\treturn new ResizeState(-1, false);\n\t\t\t},\n\t\t\tapply(tr, prev) {\n\t\t\t\treturn prev.apply(tr);\n\t\t\t}\n\t\t},\n\t\tprops: {\n\t\t\tattributes: (state) => {\n\t\t\t\tconst pluginState = columnResizingPluginKey.getState(state);\n\t\t\t\treturn pluginState && pluginState.activeHandle > -1 ? { class: \"resize-cursor\" } : {};\n\t\t\t},\n\t\t\thandleDOMEvents: {\n\t\t\t\tmousemove: (view, event) => {\n\t\t\t\t\thandleMouseMove(view, event, handleWidth, lastColumnResizable);\n\t\t\t\t},\n\t\t\t\tmouseleave: (view) => {\n\t\t\t\t\thandleMouseLeave(view);\n\t\t\t\t},\n\t\t\t\tmousedown: (view, event) => {\n\t\t\t\t\thandleMouseDown(view, event, cellMinWidth, defaultCellMinWidth);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdecorations: (state) => {\n\t\t\t\tconst pluginState = columnResizingPluginKey.getState(state);\n\t\t\t\tif (pluginState && pluginState.activeHandle > -1) return handleDecorations(state, pluginState.activeHandle);\n\t\t\t},\n\t\t\tnodeViews: {}\n\t\t}\n\t});\n\treturn plugin;\n}\n/**\n* @public\n*/\nvar ResizeState = class ResizeState {\n\tconstructor(activeHandle, dragging) {\n\t\tthis.activeHandle = activeHandle;\n\t\tthis.dragging = dragging;\n\t}\n\tapply(tr) {\n\t\tconst state = this;\n\t\tconst action = tr.getMeta(columnResizingPluginKey);\n\t\tif (action && action.setHandle != null) return new ResizeState(action.setHandle, false);\n\t\tif (action && action.setDragging !== void 0) return new ResizeState(state.activeHandle, action.setDragging);\n\t\tif (state.activeHandle > -1 && tr.docChanged) {\n\t\t\tlet handle = tr.mapping.map(state.activeHandle, -1);\n\t\t\tif (!pointsAtCell(tr.doc.resolve(handle))) handle = -1;\n\t\t\treturn new ResizeState(handle, state.dragging);\n\t\t}\n\t\treturn state;\n\t}\n};\nfunction handleMouseMove(view, event, handleWidth, lastColumnResizable) {\n\tif (!view.editable) return;\n\tconst pluginState = columnResizingPluginKey.getState(view.state);\n\tif (!pluginState) return;\n\tif (!pluginState.dragging) {\n\t\tconst target = domCellAround(event.target);\n\t\tlet cell = -1;\n\t\tif (target) {\n\t\t\tconst { left, right } = target.getBoundingClientRect();\n\t\t\tif (event.clientX - left <= handleWidth) cell = edgeCell(view, event, \"left\", handleWidth);\n\t\t\telse if (right - event.clientX <= handleWidth) cell = edgeCell(view, event, \"right\", handleWidth);\n\t\t}\n\t\tif (cell != pluginState.activeHandle) {\n\t\t\tif (!lastColumnResizable && cell !== -1) {\n\t\t\t\tconst $cell = view.state.doc.resolve(cell);\n\t\t\t\tconst table = $cell.node(-1);\n\t\t\t\tconst map = TableMap.get(table);\n\t\t\t\tconst tableStart = $cell.start(-1);\n\t\t\t\tif (map.colCount($cell.pos - tableStart) + $cell.nodeAfter.attrs.colspan - 1 == map.width - 1) return;\n\t\t\t}\n\t\t\tupdateHandle(view, cell);\n\t\t}\n\t}\n}\nfunction handleMouseLeave(view) {\n\tif (!view.editable) return;\n\tconst pluginState = columnResizingPluginKey.getState(view.state);\n\tif (pluginState && pluginState.activeHandle > -1 && !pluginState.dragging) updateHandle(view, -1);\n}\nfunction handleMouseDown(view, event, cellMinWidth, defaultCellMinWidth) {\n\tvar _view$dom$ownerDocume;\n\tif (!view.editable) return false;\n\tconst win = (_view$dom$ownerDocume = view.dom.ownerDocument.defaultView) !== null && _view$dom$ownerDocume !== void 0 ? _view$dom$ownerDocume : window;\n\tconst pluginState = columnResizingPluginKey.getState(view.state);\n\tif (!pluginState || pluginState.activeHandle == -1 || pluginState.dragging) return false;\n\tconst cell = view.state.doc.nodeAt(pluginState.activeHandle);\n\tconst width = currentColWidth(view, pluginState.activeHandle, cell.attrs);\n\tview.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setDragging: {\n\t\tstartX: event.clientX,\n\t\tstartWidth: width\n\t} }));\n\tfunction finish(event$1) {\n\t\twin.removeEventListener(\"mouseup\", finish);\n\t\twin.removeEventListener(\"mousemove\", move);\n\t\tconst pluginState$1 = columnResizingPluginKey.getState(view.state);\n\t\tif (pluginState$1 === null || pluginState$1 === void 0 ? void 0 : pluginState$1.dragging) {\n\t\t\tupdateColumnWidth(view, pluginState$1.activeHandle, draggedWidth(pluginState$1.dragging, event$1, cellMinWidth));\n\t\t\tview.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setDragging: null }));\n\t\t}\n\t}\n\tfunction move(event$1) {\n\t\tif (!event$1.which) return finish(event$1);\n\t\tconst pluginState$1 = columnResizingPluginKey.getState(view.state);\n\t\tif (!pluginState$1) return;\n\t\tif (pluginState$1.dragging) {\n\t\t\tconst dragged = draggedWidth(pluginState$1.dragging, event$1, cellMinWidth);\n\t\t\tdisplayColumnWidth(view, pluginState$1.activeHandle, dragged, defaultCellMinWidth);\n\t\t}\n\t}\n\tdisplayColumnWidth(view, pluginState.activeHandle, width, defaultCellMinWidth);\n\twin.addEventListener(\"mouseup\", finish);\n\twin.addEventListener(\"mousemove\", move);\n\tevent.preventDefault();\n\treturn true;\n}\nfunction currentColWidth(view, cellPos, { colspan, colwidth }) {\n\tconst width = colwidth && colwidth[colwidth.length - 1];\n\tif (width) return width;\n\tconst dom = view.domAtPos(cellPos);\n\tlet domWidth = dom.node.childNodes[dom.offset].offsetWidth, parts = colspan;\n\tif (colwidth) {\n\t\tfor (let i = 0; i < colspan; i++) if (colwidth[i]) {\n\t\t\tdomWidth -= colwidth[i];\n\t\t\tparts--;\n\t\t}\n\t}\n\treturn domWidth / parts;\n}\nfunction domCellAround(target) {\n\twhile (target && target.nodeName != \"TD\" && target.nodeName != \"TH\") target = target.classList && target.classList.contains(\"ProseMirror\") ? null : target.parentNode;\n\treturn target;\n}\nfunction edgeCell(view, event, side, handleWidth) {\n\tconst offset = side == \"right\" ? -handleWidth : handleWidth;\n\tconst found = view.posAtCoords({\n\t\tleft: event.clientX + offset,\n\t\ttop: event.clientY\n\t});\n\tif (!found) return -1;\n\tconst { pos } = found;\n\tconst $cell = cellAround(view.state.doc.resolve(pos));\n\tif (!$cell) return -1;\n\tif (side == \"right\") return $cell.pos;\n\tconst map = TableMap.get($cell.node(-1)), start = $cell.start(-1);\n\tconst index = map.map.indexOf($cell.pos - start);\n\treturn index % map.width == 0 ? -1 : start + map.map[index - 1];\n}\nfunction draggedWidth(dragging, event, resizeMinWidth) {\n\tconst offset = event.clientX - dragging.startX;\n\treturn Math.max(resizeMinWidth, dragging.startWidth + offset);\n}\nfunction updateHandle(view, value) {\n\tview.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setHandle: value }));\n}\nfunction updateColumnWidth(view, cell, width) {\n\tconst $cell = view.state.doc.resolve(cell);\n\tconst table = $cell.node(-1), map = TableMap.get(table), start = $cell.start(-1);\n\tconst col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n\tconst tr = view.state.tr;\n\tfor (let row = 0; row < map.height; row++) {\n\t\tconst mapIndex = row * map.width + col;\n\t\tif (row && map.map[mapIndex] == map.map[mapIndex - map.width]) continue;\n\t\tconst pos = map.map[mapIndex];\n\t\tconst attrs = table.nodeAt(pos).attrs;\n\t\tconst index = attrs.colspan == 1 ? 0 : col - map.colCount(pos);\n\t\tif (attrs.colwidth && attrs.colwidth[index] == width) continue;\n\t\tconst colwidth = attrs.colwidth ? attrs.colwidth.slice() : zeroes(attrs.colspan);\n\t\tcolwidth[index] = width;\n\t\ttr.setNodeMarkup(start + pos, null, {\n\t\t\t...attrs,\n\t\t\tcolwidth\n\t\t});\n\t}\n\tif (tr.docChanged) view.dispatch(tr);\n}\nfunction displayColumnWidth(view, cell, width, defaultCellMinWidth) {\n\tconst $cell = view.state.doc.resolve(cell);\n\tconst table = $cell.node(-1), start = $cell.start(-1);\n\tconst col = TableMap.get(table).colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n\tlet dom = view.domAtPos($cell.start(-1)).node;\n\twhile (dom && dom.nodeName != \"TABLE\") dom = dom.parentNode;\n\tif (!dom) return;\n\tupdateColumnsOnResize(table, dom.firstChild, dom, defaultCellMinWidth, col, width);\n}\nfunction zeroes(n) {\n\treturn Array(n).fill(0);\n}\nfunction handleDecorations(state, cell) {\n\tconst decorations = [];\n\tconst $cell = state.doc.resolve(cell);\n\tconst table = $cell.node(-1);\n\tif (!table) return DecorationSet.empty;\n\tconst map = TableMap.get(table);\n\tconst start = $cell.start(-1);\n\tconst col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n\tfor (let row = 0; row < map.height; row++) {\n\t\tconst index = col + row * map.width;\n\t\tif ((col == map.width - 1 || map.map[index] != map.map[index + 1]) && (row == 0 || map.map[index] != map.map[index - map.width])) {\n\t\t\tvar _columnResizingPlugin;\n\t\t\tconst cellPos = map.map[index];\n\t\t\tconst pos = start + cellPos + table.nodeAt(cellPos).nodeSize - 1;\n\t\t\tconst dom = document.createElement(\"div\");\n\t\t\tdom.className = \"column-resize-handle\";\n\t\t\tif ((_columnResizingPlugin = columnResizingPluginKey.getState(state)) === null || _columnResizingPlugin === void 0 ? void 0 : _columnResizingPlugin.dragging) decorations.push(Decoration.node(start + cellPos, start + cellPos + table.nodeAt(cellPos).nodeSize, { class: \"column-resize-dragging\" }));\n\t\t\tdecorations.push(Decoration.widget(pos, dom));\n\t\t}\n\t}\n\treturn DecorationSet.create(state.doc, decorations);\n}\n\n//#endregion\n//#region src/index.ts\n/**\n* Creates a [plugin](http://prosemirror.net/docs/ref/#state.Plugin)\n* that, when added to an editor, enables cell-selection, handles\n* cell-based copy/paste, and makes sure tables stay well-formed (each\n* row has the same width, and cells don't overlap).\n*\n* You should probably put this plugin near the end of your array of\n* plugins, since it handles mouse and arrow key events in tables\n* rather broadly, and other plugins, like the gap cursor or the\n* column-width dragging plugin, might want to get a turn first to\n* perform more specific behavior.\n*\n* @public\n*/\nfunction tableEditing({ allowTableNodeSelection = false } = {}) {\n\treturn new Plugin({\n\t\tkey: tableEditingKey,\n\t\tstate: {\n\t\t\tinit() {\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tapply(tr, cur) {\n\t\t\t\tconst set = tr.getMeta(tableEditingKey);\n\t\t\t\tif (set != null) return set == -1 ? null : set;\n\t\t\t\tif (cur == null || !tr.docChanged) return cur;\n\t\t\t\tconst { deleted, pos } = tr.mapping.mapResult(cur);\n\t\t\t\treturn deleted ? null : pos;\n\t\t\t}\n\t\t},\n\t\tprops: {\n\t\t\tdecorations: drawCellSelection,\n\t\t\thandleDOMEvents: { mousedown: handleMouseDown$1 },\n\t\t\tcreateSelectionBetween(view) {\n\t\t\t\treturn tableEditingKey.getState(view.state) != null ? view.state.selection : null;\n\t\t\t},\n\t\t\thandleTripleClick,\n\t\t\thandleKeyDown,\n\t\t\thandlePaste\n\t\t},\n\t\tappendTransaction(_, oldState, state) {\n\t\t\treturn normalizeSelection(state, fixTables(state, oldState), allowTableNodeSelection);\n\t\t}\n\t});\n}\n\n//#endregion\nexport { CellBookmark, CellSelection, ResizeState, TableMap, TableView, clipCells as __clipCells, insertCells as __insertCells, pastedCells as __pastedCells, addColSpan, addColumn, addColumnAfter, addColumnBefore, addRow, addRowAfter, addRowBefore, cellAround, cellNear, colCount, columnIsHeader, columnResizing, columnResizingPluginKey, deleteCellSelection, deleteColumn, deleteRow, deleteTable, findCell, findCellPos, findCellRange, findTable, fixTables, fixTablesKey, goToNextCell, handlePaste, inSameTable, isInTable, mergeCells, moveCellForward, moveTableColumn, moveTableRow, nextCell, pointsAtCell, removeColSpan, removeColumn, removeRow, rowIsHeader, selectedRect, selectionCell, setCellAttr, splitCell, splitCellWithType, tableEditing, tableEditingKey, tableNodeTypes, tableNodes, toggleHeader, toggleHeaderCell, toggleHeaderColumn, toggleHeaderRow, updateColumnsOnResize };\n//# sourceMappingURL=index.js.map","// src/index.ts\nimport {\n Plugin,\n PluginKey\n} from \"prosemirror-state\";\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\n\n// src/browser.ts\nvar nav = typeof navigator != \"undefined\" ? navigator : null;\nvar agent = nav && nav.userAgent || \"\";\nvar ie_edge = /Edge\\/(\\d+)/.exec(agent);\nvar ie_upto10 = /MSIE \\d/.exec(agent);\nvar ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(agent);\nvar ie = !!(ie_upto10 || ie_11up || ie_edge);\nvar safari = !ie && !!nav && /Apple Computer/.test(nav.vendor);\n\n// src/index.ts\nvar key = new PluginKey(\"safari-ime-span\");\nvar isComposing = false;\nvar spec = {\n key,\n props: {\n decorations: createDecorations,\n handleDOMEvents: {\n compositionstart: () => {\n isComposing = true;\n },\n compositionend: () => {\n isComposing = false;\n }\n }\n }\n};\nfunction createDecorations(state) {\n const { $from, $to, to } = state.selection;\n if (isComposing && $from.sameParent($to)) {\n const deco = Decoration.widget(to, createSpan, {\n ignoreSelection: true,\n key: \"safari-ime-span\"\n });\n return DecorationSet.create(state.doc, [deco]);\n }\n}\nfunction createSpan(view) {\n const span = view.dom.ownerDocument.createElement(\"span\");\n span.className = \"ProseMirror-safari-ime-span\";\n return span;\n}\nvar imeSpan = new Plugin(safari ? spec : { key });\nexport {\n imeSpan\n};\n","/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n * Value to search in.\n * @param {string} character\n * Character (or substring) to look for.\n * @return {number}\n * Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n const source = String(value)\n\n if (typeof character !== 'string') {\n throw new TypeError('Expected character')\n }\n\n let count = 0\n let index = source.indexOf(character)\n\n while (index !== -1) {\n count++\n index = source.indexOf(character, index + character.length)\n }\n\n return count\n}\n","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","/**\n * @import {Nodes, Parents, PhrasingContent, Root, Text} from 'mdast'\n * @import {BuildVisitor, Test, VisitorResult} from 'unist-util-visit-parents'\n */\n\n/**\n * @typedef RegExpMatchObject\n * Info on the match.\n * @property {number} index\n * The index of the search at which the result was found.\n * @property {string} input\n * A copy of the search string in the text node.\n * @property {[...Array<Parents>, Text]} stack\n * All ancestors of the text node, where the last node is the text itself.\n *\n * @typedef {RegExp | string} Find\n * Pattern to find.\n *\n * Strings are escaped and then turned into global expressions.\n *\n * @typedef {Array<FindAndReplaceTuple>} FindAndReplaceList\n * Several find and replaces, in array form.\n *\n * @typedef {[Find, Replace?]} FindAndReplaceTuple\n * Find and replace in tuple form.\n *\n * @typedef {ReplaceFunction | string | null | undefined} Replace\n * Thing to replace with.\n *\n * @callback ReplaceFunction\n * Callback called when a search matches.\n * @param {...any} parameters\n * The parameters are the result of corresponding search expression:\n *\n * * `value` (`string`) — whole match\n * * `...capture` (`Array<string>`) — matches from regex capture groups\n * * `match` (`RegExpMatchObject`) — info on the match\n * @returns {Array<PhrasingContent> | PhrasingContent | string | false | null | undefined}\n * Thing to replace with.\n *\n * * when `null`, `undefined`, `''`, remove the match\n * * …or when `false`, do not replace at all\n * * …or when `string`, replace with a text node of that value\n * * …or when `Node` or `Array<Node>`, replace with those nodes\n *\n * @typedef {[RegExp, ReplaceFunction]} Pair\n * Normalized find and replace.\n *\n * @typedef {Array<Pair>} Pairs\n * All find and replaced.\n *\n * @typedef Options\n * Configuration.\n * @property {Test | null | undefined} [ignore]\n * Test for which nodes to ignore (optional).\n */\n\nimport escape from 'escape-string-regexp'\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convert} from 'unist-util-is'\n\n/**\n * Find patterns in a tree and replace them.\n *\n * The algorithm searches the tree in *preorder* for complete values in `Text`\n * nodes.\n * Partial matches are not supported.\n *\n * @param {Nodes} tree\n * Tree to change.\n * @param {FindAndReplaceList | FindAndReplaceTuple} list\n * Patterns to find.\n * @param {Options | null | undefined} [options]\n * Configuration (when `find` is not `Find`).\n * @returns {undefined}\n * Nothing.\n */\nexport function findAndReplace(tree, list, options) {\n const settings = options || {}\n const ignored = convert(settings.ignore || [])\n const pairs = toPairs(list)\n let pairIndex = -1\n\n while (++pairIndex < pairs.length) {\n visitParents(tree, 'text', visitor)\n }\n\n /** @type {BuildVisitor<Root, 'text'>} */\n function visitor(node, parents) {\n let index = -1\n /** @type {Parents | undefined} */\n let grandparent\n\n while (++index < parents.length) {\n const parent = parents[index]\n /** @type {Array<Nodes> | undefined} */\n const siblings = grandparent ? grandparent.children : undefined\n\n if (\n ignored(\n parent,\n siblings ? siblings.indexOf(parent) : undefined,\n grandparent\n )\n ) {\n return\n }\n\n grandparent = parent\n }\n\n if (grandparent) {\n return handler(node, parents)\n }\n }\n\n /**\n * Handle a text node which is not in an ignored parent.\n *\n * @param {Text} node\n * Text node.\n * @param {Array<Parents>} parents\n * Parents.\n * @returns {VisitorResult}\n * Result.\n */\n function handler(node, parents) {\n const parent = parents[parents.length - 1]\n const find = pairs[pairIndex][0]\n const replace = pairs[pairIndex][1]\n let start = 0\n /** @type {Array<Nodes>} */\n const siblings = parent.children\n const index = siblings.indexOf(node)\n let change = false\n /** @type {Array<PhrasingContent>} */\n let nodes = []\n\n find.lastIndex = 0\n\n let match = find.exec(node.value)\n\n while (match) {\n const position = match.index\n /** @type {RegExpMatchObject} */\n const matchObject = {\n index: match.index,\n input: match.input,\n stack: [...parents, node]\n }\n let value = replace(...match, matchObject)\n\n if (typeof value === 'string') {\n value = value.length > 0 ? {type: 'text', value} : undefined\n }\n\n // It wasn’t a match after all.\n if (value === false) {\n // False acts as if there was no match.\n // So we need to reset `lastIndex`, which currently being at the end of\n // the current match, to the beginning.\n find.lastIndex = position + 1\n } else {\n if (start !== position) {\n nodes.push({\n type: 'text',\n value: node.value.slice(start, position)\n })\n }\n\n if (Array.isArray(value)) {\n nodes.push(...value)\n } else if (value) {\n nodes.push(value)\n }\n\n start = position + match[0].length\n change = true\n }\n\n if (!find.global) {\n break\n }\n\n match = find.exec(node.value)\n }\n\n if (change) {\n if (start < node.value.length) {\n nodes.push({type: 'text', value: node.value.slice(start)})\n }\n\n parent.children.splice(index, 1, ...nodes)\n } else {\n nodes = [node]\n }\n\n return index + nodes.length\n }\n}\n\n/**\n * Turn a tuple or a list of tuples into pairs.\n *\n * @param {FindAndReplaceList | FindAndReplaceTuple} tupleOrList\n * Schema.\n * @returns {Pairs}\n * Clean pairs.\n */\nfunction toPairs(tupleOrList) {\n /** @type {Pairs} */\n const result = []\n\n if (!Array.isArray(tupleOrList)) {\n throw new TypeError('Expected find and replace tuple or list of tuples')\n }\n\n /** @type {FindAndReplaceList} */\n // @ts-expect-error: correct.\n const list =\n !tupleOrList[0] || Array.isArray(tupleOrList[0])\n ? tupleOrList\n : [tupleOrList]\n\n let index = -1\n\n while (++index < list.length) {\n const tuple = list[index]\n result.push([toExpression(tuple[0]), toFunction(tuple[1])])\n }\n\n return result\n}\n\n/**\n * Turn a find into an expression.\n *\n * @param {Find} find\n * Find.\n * @returns {RegExp}\n * Expression.\n */\nfunction toExpression(find) {\n return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\n/**\n * Turn a replace into a function.\n *\n * @param {Replace} replace\n * Replace.\n * @returns {ReplaceFunction}\n * Function.\n */\nfunction toFunction(replace) {\n return typeof replace === 'function'\n ? replace\n : function () {\n return replace\n }\n}\n","/**\n * @import {RegExpMatchObject, ReplaceFunction} from 'mdast-util-find-and-replace'\n * @import {CompileContext, Extension as FromMarkdownExtension, Handle as FromMarkdownHandle, Transform as FromMarkdownTransform} from 'mdast-util-from-markdown'\n * @import {ConstructName, Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\n * @import {Link, PhrasingContent} from 'mdast'\n */\n\nimport {ccount} from 'ccount'\nimport {ok as assert} from 'devlop'\nimport {unicodePunctuation, unicodeWhitespace} from 'micromark-util-character'\nimport {findAndReplace} from 'mdast-util-find-and-replace'\n\n/** @type {ConstructName} */\nconst inConstruct = 'phrasing'\n/** @type {Array<ConstructName>} */\nconst notInConstruct = ['autolink', 'link', 'image', 'label']\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralFromMarkdown() {\n return {\n transforms: [transformGfmAutolinkLiterals],\n enter: {\n literalAutolink: enterLiteralAutolink,\n literalAutolinkEmail: enterLiteralAutolinkValue,\n literalAutolinkHttp: enterLiteralAutolinkValue,\n literalAutolinkWww: enterLiteralAutolinkValue\n },\n exit: {\n literalAutolink: exitLiteralAutolink,\n literalAutolinkEmail: exitLiteralAutolinkEmail,\n literalAutolinkHttp: exitLiteralAutolinkHttp,\n literalAutolinkWww: exitLiteralAutolinkWww\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralToMarkdown() {\n return {\n unsafe: [\n {\n character: '@',\n before: '[+\\\\-.\\\\w]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {\n character: '.',\n before: '[Ww]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {\n character: ':',\n before: '[ps]',\n after: '\\\\/',\n inConstruct,\n notInConstruct\n }\n ]\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolink(token) {\n this.enter({type: 'link', title: null, url: '', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolinkValue(token) {\n this.config.enter.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkHttp(token) {\n this.config.exit.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkWww(token) {\n this.config.exit.data.call(this, token)\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'link')\n node.url = 'http://' + this.sliceSerialize(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkEmail(token) {\n this.config.exit.autolinkEmail.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolink(token) {\n this.exit(token)\n}\n\n/** @type {FromMarkdownTransform} */\nfunction transformGfmAutolinkLiterals(tree) {\n findAndReplace(\n tree,\n [\n [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n [/(?<=^|\\s|\\p{P}|\\p{S})([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/gu, findEmail]\n ],\n {ignore: ['link', 'linkReference']}\n )\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} protocol\n * @param {string} domain\n * @param {string} path\n * @param {RegExpMatchObject} match\n * @returns {Array<PhrasingContent> | Link | false}\n */\n// eslint-disable-next-line max-params\nfunction findUrl(_, protocol, domain, path, match) {\n let prefix = ''\n\n // Not an expected previous character.\n if (!previous(match)) {\n return false\n }\n\n // Treat `www` as part of the domain.\n if (/^w/i.test(protocol)) {\n domain = protocol + domain\n protocol = ''\n prefix = 'http://'\n }\n\n if (!isCorrectDomain(domain)) {\n return false\n }\n\n const parts = splitUrl(domain + path)\n\n if (!parts[0]) return false\n\n /** @type {Link} */\n const result = {\n type: 'link',\n title: null,\n url: prefix + protocol + parts[0],\n children: [{type: 'text', value: protocol + parts[0]}]\n }\n\n if (parts[1]) {\n return [result, {type: 'text', value: parts[1]}]\n }\n\n return result\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} atext\n * @param {string} label\n * @param {RegExpMatchObject} match\n * @returns {Link | false}\n */\nfunction findEmail(_, atext, label, match) {\n if (\n // Not an expected previous character.\n !previous(match, true) ||\n // Label ends in not allowed character.\n /[-\\d_]$/.test(label)\n ) {\n return false\n }\n\n return {\n type: 'link',\n title: null,\n url: 'mailto:' + atext + '@' + label,\n children: [{type: 'text', value: atext + '@' + label}]\n }\n}\n\n/**\n * @param {string} domain\n * @returns {boolean}\n */\nfunction isCorrectDomain(domain) {\n const parts = domain.split('.')\n\n if (\n parts.length < 2 ||\n (parts[parts.length - 1] &&\n (/_/.test(parts[parts.length - 1]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 1]))) ||\n (parts[parts.length - 2] &&\n (/_/.test(parts[parts.length - 2]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 2])))\n ) {\n return false\n }\n\n return true\n}\n\n/**\n * @param {string} url\n * @returns {[string, string | undefined]}\n */\nfunction splitUrl(url) {\n const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url)\n\n if (!trailExec) {\n return [url, undefined]\n }\n\n url = url.slice(0, trailExec.index)\n\n let trail = trailExec[0]\n let closingParenIndex = trail.indexOf(')')\n const openingParens = ccount(url, '(')\n let closingParens = ccount(url, ')')\n\n while (closingParenIndex !== -1 && openingParens > closingParens) {\n url += trail.slice(0, closingParenIndex + 1)\n trail = trail.slice(closingParenIndex + 1)\n closingParenIndex = trail.indexOf(')')\n closingParens++\n }\n\n return [url, trail]\n}\n\n/**\n * @param {RegExpMatchObject} match\n * @param {boolean | null | undefined} [email=false]\n * @returns {boolean}\n */\nfunction previous(match, email) {\n const code = match.input.charCodeAt(match.index - 1)\n\n return (\n (match.index === 0 ||\n unicodeWhitespace(code) ||\n unicodePunctuation(code)) &&\n // If it’s an email, the previous character should not be a slash.\n (!email || code !== 47)\n )\n}\n","/**\n * @import {\n * CompileContext,\n * Extension as FromMarkdownExtension,\n * Handle as FromMarkdownHandle\n * } from 'mdast-util-from-markdown'\n * @import {ToMarkdownOptions} from 'mdast-util-gfm-footnote'\n * @import {\n * Handle as ToMarkdownHandle,\n * Map,\n * Options as ToMarkdownExtension\n * } from 'mdast-util-to-markdown'\n * @import {FootnoteDefinition, FootnoteReference} from 'mdast'\n */\n\nimport {ok as assert} from 'devlop'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n\nfootnoteReference.peek = footnoteReferencePeek\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCallString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCall(token) {\n this.enter({type: 'footnoteReference', identifier: '', label: ''}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinitionLabelString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinition(token) {\n this.enter(\n {type: 'footnoteDefinition', identifier: '', label: '', children: []},\n token\n )\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCallString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteReference')\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n node.label = label\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCall(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinitionLabelString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteDefinition')\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n node.label = label\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinition(token) {\n this.exit(token)\n}\n\n/** @type {ToMarkdownHandle} */\nfunction footnoteReferencePeek() {\n return '['\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteReference} node\n */\nfunction footnoteReference(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteReference')\n const subexit = state.enter('reference')\n value += tracker.move(\n state.safe(state.associationId(node), {after: ']', before: value})\n )\n subexit()\n exit()\n value += tracker.move(']')\n return value\n}\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown`.\n */\nexport function gfmFootnoteFromMarkdown() {\n return {\n enter: {\n gfmFootnoteCallString: enterFootnoteCallString,\n gfmFootnoteCall: enterFootnoteCall,\n gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n gfmFootnoteDefinition: enterFootnoteDefinition\n },\n exit: {\n gfmFootnoteCallString: exitFootnoteCallString,\n gfmFootnoteCall: exitFootnoteCall,\n gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n gfmFootnoteDefinition: exitFootnoteDefinition\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @param {ToMarkdownOptions | null | undefined} [options]\n * Configuration (optional).\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown`.\n */\nexport function gfmFootnoteToMarkdown(options) {\n // To do: next major: change default.\n let firstLineBlank = false\n\n if (options && options.firstLineBlank) {\n firstLineBlank = true\n }\n\n return {\n handlers: {footnoteDefinition, footnoteReference},\n // This is on by default already.\n unsafe: [{character: '[', inConstruct: ['label', 'phrasing', 'reference']}]\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {FootnoteDefinition} node\n */\n function footnoteDefinition(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteDefinition')\n const subexit = state.enter('label')\n value += tracker.move(\n state.safe(state.associationId(node), {before: value, after: ']'})\n )\n subexit()\n\n value += tracker.move(']:')\n\n if (node.children && node.children.length > 0) {\n tracker.shift(4)\n\n value += tracker.move(\n (firstLineBlank ? '\\n' : ' ') +\n state.indentLines(\n state.containerFlow(node, tracker.current()),\n firstLineBlank ? mapAll : mapExceptFirst\n )\n )\n }\n\n exit()\n\n return value\n }\n}\n\n/** @type {Map} */\nfunction mapExceptFirst(line, index, blank) {\n return index === 0 ? line : mapAll(line, index, blank)\n}\n\n/** @type {Map} */\nfunction mapAll(line, index, blank) {\n return (blank ? '' : ' ') + line\n}\n","/**\n * @typedef {import('mdast').Delete} Delete\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * List of constructs that occur in phrasing (paragraphs, headings), but cannot\n * contain strikethrough.\n * So they sort of cancel each other out.\n * Note: could use a better name.\n *\n * Note: keep in sync with: <https://github.com/syntax-tree/mdast-util-to-markdown/blob/8ce8dbf/lib/unsafe.js#L14>\n *\n * @type {Array<ConstructName>}\n */\nconst constructsWithoutStrikethrough = [\n 'autolink',\n 'destinationLiteral',\n 'destinationRaw',\n 'reference',\n 'titleQuote',\n 'titleApostrophe'\n]\n\nhandleDelete.peek = peekDelete\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughFromMarkdown() {\n return {\n canContainEols: ['delete'],\n enter: {strikethrough: enterStrikethrough},\n exit: {strikethrough: exitStrikethrough}\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughToMarkdown() {\n return {\n unsafe: [\n {\n character: '~',\n inConstruct: 'phrasing',\n notInConstruct: constructsWithoutStrikethrough\n }\n ],\n handlers: {delete: handleDelete}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterStrikethrough(token) {\n this.enter({type: 'delete', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitStrikethrough(token) {\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {Delete} node\n */\nfunction handleDelete(node, _, state, info) {\n const tracker = state.createTracker(info)\n const exit = state.enter('strikethrough')\n let value = tracker.move('~~')\n value += state.containerPhrasing(node, {\n ...tracker.current(),\n before: value,\n after: '~'\n })\n value += tracker.move('~~')\n exit()\n return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction peekDelete() {\n return '~'\n}\n","// To do: next major: remove.\n/**\n * @typedef {Options} MarkdownTableOptions\n * Configuration.\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [alignDelimiters=true]\n * Whether to align the delimiters (default: `true`);\n * they are aligned by default:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * Pass `false` to make them staggered:\n *\n * ```markdown\n * | Alpha | B |\n * | - | - |\n * | C | Delta |\n * ```\n * @property {ReadonlyArray<string | null | undefined> | string | null | undefined} [align]\n * How to align columns (default: `''`);\n * one style for all columns or styles for their respective columns;\n * each style is either `'l'` (left), `'r'` (right), or `'c'` (center);\n * other values are treated as `''`, which doesn’t place the colon in the\n * alignment row but does align left;\n * *only the lowercased first character is used, so `Right` is fine.*\n * @property {boolean | null | undefined} [delimiterEnd=true]\n * Whether to end each row with the delimiter (default: `true`).\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are ending delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no ending delimiters:\n *\n * ```markdown\n * | Alpha | B\n * | ----- | -----\n * | C | Delta\n * ```\n * @property {boolean | null | undefined} [delimiterStart=true]\n * Whether to begin each row with the delimiter (default: `true`).\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are starting delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no starting delimiters:\n *\n * ```markdown\n * Alpha | B |\n * ----- | ----- |\n * C | Delta |\n * ```\n * @property {boolean | null | undefined} [padding=true]\n * Whether to add a space of padding between delimiters and cells\n * (default: `true`).\n *\n * When `true`, there is padding:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there is no padding:\n *\n * ```markdown\n * |Alpha|B |\n * |-----|-----|\n * |C |Delta|\n * ```\n * @property {((value: string) => number) | null | undefined} [stringLength]\n * Function to detect the length of table cell content (optional);\n * this is used when aligning the delimiters (`|`) between table cells;\n * full-width characters and emoji mess up delimiter alignment when viewing\n * the markdown source;\n * to fix this, you can pass this function,\n * which receives the cell content and returns its “visible” size;\n * note that what is and isn’t visible depends on where the text is displayed.\n *\n * Without such a function, the following:\n *\n * ```js\n * markdownTable([\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩‍❤️‍👩', 'Delta']\n * ])\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | - | - |\n * | 中文 | Charlie |\n * | 👩‍❤️‍👩 | Delta |\n * ```\n *\n * With [`string-width`](https://github.com/sindresorhus/string-width):\n *\n * ```js\n * import stringWidth from 'string-width'\n *\n * markdownTable(\n * [\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩‍❤️‍👩', 'Delta']\n * ],\n * {stringLength: stringWidth}\n * )\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | ----- | ------- |\n * | 中文 | Charlie |\n * | 👩‍❤️‍👩 | Delta |\n * ```\n */\n\n/**\n * @param {string} value\n * Cell value.\n * @returns {number}\n * Cell size.\n */\nfunction defaultStringLength(value) {\n return value.length\n}\n\n/**\n * Generate a markdown\n * ([GFM](https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables))\n * table.\n *\n * @param {ReadonlyArray<ReadonlyArray<string | null | undefined>>} table\n * Table data (matrix of strings).\n * @param {Readonly<Options> | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Result.\n */\nexport function markdownTable(table, options) {\n const settings = options || {}\n // To do: next major: change to spread.\n const align = (settings.align || []).concat()\n const stringLength = settings.stringLength || defaultStringLength\n /** @type {Array<number>} Character codes as symbols for alignment per column. */\n const alignments = []\n /** @type {Array<Array<string>>} Cells per row. */\n const cellMatrix = []\n /** @type {Array<Array<number>>} Sizes of each cell per row. */\n const sizeMatrix = []\n /** @type {Array<number>} */\n const longestCellByColumn = []\n let mostCellsPerRow = 0\n let rowIndex = -1\n\n // This is a superfluous loop if we don’t align delimiters, but otherwise we’d\n // do superfluous work when aligning, so optimize for aligning.\n while (++rowIndex < table.length) {\n /** @type {Array<string>} */\n const row = []\n /** @type {Array<number>} */\n const sizes = []\n let columnIndex = -1\n\n if (table[rowIndex].length > mostCellsPerRow) {\n mostCellsPerRow = table[rowIndex].length\n }\n\n while (++columnIndex < table[rowIndex].length) {\n const cell = serialize(table[rowIndex][columnIndex])\n\n if (settings.alignDelimiters !== false) {\n const size = stringLength(cell)\n sizes[columnIndex] = size\n\n if (\n longestCellByColumn[columnIndex] === undefined ||\n size > longestCellByColumn[columnIndex]\n ) {\n longestCellByColumn[columnIndex] = size\n }\n }\n\n row.push(cell)\n }\n\n cellMatrix[rowIndex] = row\n sizeMatrix[rowIndex] = sizes\n }\n\n // Figure out which alignments to use.\n let columnIndex = -1\n\n if (typeof align === 'object' && 'length' in align) {\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = toAlignment(align[columnIndex])\n }\n } else {\n const code = toAlignment(align)\n\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = code\n }\n }\n\n // Inject the alignment row.\n columnIndex = -1\n /** @type {Array<string>} */\n const row = []\n /** @type {Array<number>} */\n const sizes = []\n\n while (++columnIndex < mostCellsPerRow) {\n const code = alignments[columnIndex]\n let before = ''\n let after = ''\n\n if (code === 99 /* `c` */) {\n before = ':'\n after = ':'\n } else if (code === 108 /* `l` */) {\n before = ':'\n } else if (code === 114 /* `r` */) {\n after = ':'\n }\n\n // There *must* be at least one hyphen-minus in each alignment cell.\n let size =\n settings.alignDelimiters === false\n ? 1\n : Math.max(\n 1,\n longestCellByColumn[columnIndex] - before.length - after.length\n )\n\n const cell = before + '-'.repeat(size) + after\n\n if (settings.alignDelimiters !== false) {\n size = before.length + size + after.length\n\n if (size > longestCellByColumn[columnIndex]) {\n longestCellByColumn[columnIndex] = size\n }\n\n sizes[columnIndex] = size\n }\n\n row[columnIndex] = cell\n }\n\n // Inject the alignment row.\n cellMatrix.splice(1, 0, row)\n sizeMatrix.splice(1, 0, sizes)\n\n rowIndex = -1\n /** @type {Array<string>} */\n const lines = []\n\n while (++rowIndex < cellMatrix.length) {\n const row = cellMatrix[rowIndex]\n const sizes = sizeMatrix[rowIndex]\n columnIndex = -1\n /** @type {Array<string>} */\n const line = []\n\n while (++columnIndex < mostCellsPerRow) {\n const cell = row[columnIndex] || ''\n let before = ''\n let after = ''\n\n if (settings.alignDelimiters !== false) {\n const size =\n longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0)\n const code = alignments[columnIndex]\n\n if (code === 114 /* `r` */) {\n before = ' '.repeat(size)\n } else if (code === 99 /* `c` */) {\n if (size % 2) {\n before = ' '.repeat(size / 2 + 0.5)\n after = ' '.repeat(size / 2 - 0.5)\n } else {\n before = ' '.repeat(size / 2)\n after = before\n }\n } else {\n after = ' '.repeat(size)\n }\n }\n\n if (settings.delimiterStart !== false && !columnIndex) {\n line.push('|')\n }\n\n if (\n settings.padding !== false &&\n // Don’t add the opening space if we’re not aligning and the cell is\n // empty: there will be a closing space.\n !(settings.alignDelimiters === false && cell === '') &&\n (settings.delimiterStart !== false || columnIndex)\n ) {\n line.push(' ')\n }\n\n if (settings.alignDelimiters !== false) {\n line.push(before)\n }\n\n line.push(cell)\n\n if (settings.alignDelimiters !== false) {\n line.push(after)\n }\n\n if (settings.padding !== false) {\n line.push(' ')\n }\n\n if (\n settings.delimiterEnd !== false ||\n columnIndex !== mostCellsPerRow - 1\n ) {\n line.push('|')\n }\n }\n\n lines.push(\n settings.delimiterEnd === false\n ? line.join('').replace(/ +$/, '')\n : line.join('')\n )\n }\n\n return lines.join('\\n')\n}\n\n/**\n * @param {string | null | undefined} [value]\n * Value to serialize.\n * @returns {string}\n * Result.\n */\nfunction serialize(value) {\n return value === null || value === undefined ? '' : String(value)\n}\n\n/**\n * @param {string | null | undefined} value\n * Value.\n * @returns {number}\n * Alignment.\n */\nfunction toAlignment(value) {\n const code = typeof value === 'string' ? value.codePointAt(0) : 0\n\n return code === 67 /* `C` */ || code === 99 /* `c` */\n ? 99 /* `c` */\n : code === 76 /* `L` */ || code === 108 /* `l` */\n ? 108 /* `l` */\n : code === 82 /* `R` */ || code === 114 /* `r` */\n ? 114 /* `r` */\n : 0\n}\n","/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Table} Table\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('mdast').TableRow} TableRow\n *\n * @typedef {import('markdown-table').Options} MarkdownTableOptions\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').State} State\n * @typedef {import('mdast-util-to-markdown').Info} Info\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [tableCellPadding=true]\n * Whether to add a space of padding between delimiters and cells (default:\n * `true`).\n * @property {boolean | null | undefined} [tablePipeAlign=true]\n * Whether to align the delimiters (default: `true`).\n * @property {MarkdownTableOptions['stringLength'] | null | undefined} [stringLength]\n * Function to detect the length of table cell content, used when aligning\n * the delimiters between cells (optional).\n */\n\nimport {ok as assert} from 'devlop'\nimport {markdownTable} from 'markdown-table'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM tables in\n * markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM tables.\n */\nexport function gfmTableFromMarkdown() {\n return {\n enter: {\n table: enterTable,\n tableData: enterCell,\n tableHeader: enterCell,\n tableRow: enterRow\n },\n exit: {\n codeText: exitCodeText,\n table: exitTable,\n tableData: exit,\n tableHeader: exit,\n tableRow: exit\n }\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterTable(token) {\n const align = token._align\n assert(align, 'expected `_align` on table')\n this.enter(\n {\n type: 'table',\n align: align.map(function (d) {\n return d === 'none' ? null : d\n }),\n children: []\n },\n token\n )\n this.data.inTable = true\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitTable(token) {\n this.exit(token)\n this.data.inTable = undefined\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterRow(token) {\n this.enter({type: 'tableRow', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exit(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterCell(token) {\n this.enter({type: 'tableCell', children: []}, token)\n}\n\n// Overwrite the default code text data handler to unescape escaped pipes when\n// they are in tables.\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCodeText(token) {\n let value = this.resume()\n\n if (this.data.inTable) {\n value = value.replace(/\\\\([\\\\|])/g, replace)\n }\n\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'inlineCode')\n node.value = value\n this.exit(token)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @returns {string}\n */\nfunction replace($0, $1) {\n // Pipes work, backslashes don’t (but can’t escape pipes).\n return $1 === '|' ? $1 : $0\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM tables in\n * markdown.\n *\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM tables.\n */\nexport function gfmTableToMarkdown(options) {\n const settings = options || {}\n const padding = settings.tableCellPadding\n const alignDelimiters = settings.tablePipeAlign\n const stringLength = settings.stringLength\n const around = padding ? ' ' : '|'\n\n return {\n unsafe: [\n {character: '\\r', inConstruct: 'tableCell'},\n {character: '\\n', inConstruct: 'tableCell'},\n // A pipe, when followed by a tab or space (padding), or a dash or colon\n // (unpadded delimiter row), could result in a table.\n {atBreak: true, character: '|', after: '[\\t :-]'},\n // A pipe in a cell must be encoded.\n {character: '|', inConstruct: 'tableCell'},\n // A colon must be followed by a dash, in which case it could start a\n // delimiter row.\n {atBreak: true, character: ':', after: '-'},\n // A delimiter row can also start with a dash, when followed by more\n // dashes, a colon, or a pipe.\n // This is a stricter version than the built in check for lists, thematic\n // breaks, and setex heading underlines though:\n // <https://github.com/syntax-tree/mdast-util-to-markdown/blob/51a2038/lib/unsafe.js#L57>\n {atBreak: true, character: '-', after: '[:|-]'}\n ],\n handlers: {\n inlineCode: inlineCodeWithTable,\n table: handleTable,\n tableCell: handleTableCell,\n tableRow: handleTableRow\n }\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {Table} node\n */\n function handleTable(node, _, state, info) {\n return serializeData(handleTableAsData(node, state, info), node.align)\n }\n\n /**\n * This function isn’t really used normally, because we handle rows at the\n * table level.\n * But, if someone passes in a table row, this ensures we make somewhat sense.\n *\n * @type {ToMarkdownHandle}\n * @param {TableRow} node\n */\n function handleTableRow(node, _, state, info) {\n const row = handleTableRowAsData(node, state, info)\n const value = serializeData([row])\n // `markdown-table` will always add an align row\n return value.slice(0, value.indexOf('\\n'))\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {TableCell} node\n */\n function handleTableCell(node, _, state, info) {\n const exit = state.enter('tableCell')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...info,\n before: around,\n after: around\n })\n subexit()\n exit()\n return value\n }\n\n /**\n * @param {Array<Array<string>>} matrix\n * @param {Array<string | null | undefined> | null | undefined} [align]\n */\n function serializeData(matrix, align) {\n return markdownTable(matrix, {\n align,\n // @ts-expect-error: `markdown-table` types should support `null`.\n alignDelimiters,\n // @ts-expect-error: `markdown-table` types should support `null`.\n padding,\n // @ts-expect-error: `markdown-table` types should support `null`.\n stringLength\n })\n }\n\n /**\n * @param {Table} node\n * @param {State} state\n * @param {Info} info\n */\n function handleTableAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array<Array<string>>} */\n const result = []\n const subexit = state.enter('table')\n\n while (++index < children.length) {\n result[index] = handleTableRowAsData(children[index], state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @param {TableRow} node\n * @param {State} state\n * @param {Info} info\n */\n function handleTableRowAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array<string>} */\n const result = []\n const subexit = state.enter('tableRow')\n\n while (++index < children.length) {\n // Note: the positional info as used here is incorrect.\n // Making it correct would be impossible due to aligning cells?\n // And it would need copy/pasting `markdown-table` into this project.\n result[index] = handleTableCell(children[index], node, state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {InlineCode} node\n */\n function inlineCodeWithTable(node, parent, state) {\n let value = defaultHandlers.inlineCode(node, parent, state)\n\n if (state.stack.includes('tableCell')) {\n value = value.replace(/\\|/g, '\\\\$&')\n }\n\n return value\n }\n}\n","/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n */\n\nimport {ok as assert} from 'devlop'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM task\n * list items in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemFromMarkdown() {\n return {\n exit: {\n taskListCheckValueChecked: exitCheck,\n taskListCheckValueUnchecked: exitCheck,\n paragraph: exitParagraphWithTaskListItem\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM task list\n * items in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemToMarkdown() {\n return {\n unsafe: [{atBreak: true, character: '-', after: '[:|-]'}],\n handlers: {listItem: listItemWithTaskListItem}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCheck(token) {\n // We’re always in a paragraph, in a list item.\n const node = this.stack[this.stack.length - 2]\n assert(node.type === 'listItem')\n node.checked = token.type === 'taskListCheckValueChecked'\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitParagraphWithTaskListItem(token) {\n const parent = this.stack[this.stack.length - 2]\n\n if (\n parent &&\n parent.type === 'listItem' &&\n typeof parent.checked === 'boolean'\n ) {\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'paragraph')\n const head = node.children[0]\n\n if (head && head.type === 'text') {\n const siblings = parent.children\n let index = -1\n /** @type {Paragraph | undefined} */\n let firstParaghraph\n\n while (++index < siblings.length) {\n const sibling = siblings[index]\n if (sibling.type === 'paragraph') {\n firstParaghraph = sibling\n break\n }\n }\n\n if (firstParaghraph === node) {\n // Must start with a space or a tab.\n head.value = head.value.slice(1)\n\n if (head.value.length === 0) {\n node.children.shift()\n } else if (\n node.position &&\n head.position &&\n typeof head.position.start.offset === 'number'\n ) {\n head.position.start.column++\n head.position.start.offset++\n node.position.start = Object.assign({}, head.position.start)\n }\n }\n }\n }\n\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {ListItem} node\n */\nfunction listItemWithTaskListItem(node, parent, state, info) {\n const head = node.children[0]\n const checkable =\n typeof node.checked === 'boolean' && head && head.type === 'paragraph'\n const checkbox = '[' + (node.checked ? 'x' : ' ') + '] '\n const tracker = state.createTracker(info)\n\n if (checkable) {\n tracker.move(checkbox)\n }\n\n let value = defaultHandlers.listItem(node, parent, state, {\n ...info,\n ...tracker.current()\n })\n\n if (checkable) {\n value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check)\n }\n\n return value\n\n /**\n * @param {string} $0\n * @returns {string}\n */\n function check($0) {\n return $0 + checkbox\n }\n}\n","/**\n * @import {Extension as FromMarkdownExtension} from 'mdast-util-from-markdown'\n * @import {Options} from 'mdast-util-gfm'\n * @import {Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\n */\n\nimport {\n gfmAutolinkLiteralFromMarkdown,\n gfmAutolinkLiteralToMarkdown\n} from 'mdast-util-gfm-autolink-literal'\nimport {\n gfmFootnoteFromMarkdown,\n gfmFootnoteToMarkdown\n} from 'mdast-util-gfm-footnote'\nimport {\n gfmStrikethroughFromMarkdown,\n gfmStrikethroughToMarkdown\n} from 'mdast-util-gfm-strikethrough'\nimport {gfmTableFromMarkdown, gfmTableToMarkdown} from 'mdast-util-gfm-table'\nimport {\n gfmTaskListItemFromMarkdown,\n gfmTaskListItemToMarkdown\n} from 'mdast-util-gfm-task-list-item'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @returns {Array<FromMarkdownExtension>}\n * Extension for `mdast-util-from-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmFromMarkdown() {\n return [\n gfmAutolinkLiteralFromMarkdown(),\n gfmFootnoteFromMarkdown(),\n gfmStrikethroughFromMarkdown(),\n gfmTableFromMarkdown(),\n gfmTaskListItemFromMarkdown()\n ]\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmToMarkdown(options) {\n return {\n extensions: [\n gfmAutolinkLiteralToMarkdown(),\n gfmFootnoteToMarkdown(options),\n gfmStrikethroughToMarkdown(),\n gfmTableToMarkdown(options),\n gfmTaskListItemToMarkdown()\n ]\n }\n}\n","/**\n * @import {Code, ConstructRecord, Event, Extension, Previous, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { asciiAlpha, asciiAlphanumeric, asciiControl, markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\nconst wwwPrefix = {\n tokenize: tokenizeWwwPrefix,\n partial: true\n};\nconst domain = {\n tokenize: tokenizeDomain,\n partial: true\n};\nconst path = {\n tokenize: tokenizePath,\n partial: true\n};\nconst trail = {\n tokenize: tokenizeTrail,\n partial: true\n};\nconst emailDomainDotTrail = {\n tokenize: tokenizeEmailDomainDotTrail,\n partial: true\n};\nconst wwwAutolink = {\n name: 'wwwAutolink',\n tokenize: tokenizeWwwAutolink,\n previous: previousWww\n};\nconst protocolAutolink = {\n name: 'protocolAutolink',\n tokenize: tokenizeProtocolAutolink,\n previous: previousProtocol\n};\nconst emailAutolink = {\n name: 'emailAutolink',\n tokenize: tokenizeEmailAutolink,\n previous: previousEmail\n};\n\n/** @type {ConstructRecord} */\nconst text = {};\n\n/**\n * Create an extension for `micromark` to support GitHub autolink literal\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * autolink literal syntax.\n */\nexport function gfmAutolinkLiteral() {\n return {\n text\n };\n}\n\n/** @type {Code} */\nlet code = 48;\n\n// Add alphanumerics.\nwhile (code < 123) {\n text[code] = emailAutolink;\n code++;\n if (code === 58) code = 65;else if (code === 91) code = 97;\n}\ntext[43] = emailAutolink;\ntext[45] = emailAutolink;\ntext[46] = emailAutolink;\ntext[95] = emailAutolink;\ntext[72] = [emailAutolink, protocolAutolink];\ntext[104] = [emailAutolink, protocolAutolink];\ntext[87] = [emailAutolink, wwwAutolink];\ntext[119] = [emailAutolink, wwwAutolink];\n\n// To do: perform email autolink literals on events, afterwards.\n// That’s where `markdown-rs` and `cmark-gfm` perform it.\n// It should look for `@`, then for atext backwards, and then for a label\n// forwards.\n// To do: `mailto:`, `xmpp:` protocol as prefix.\n\n/**\n * Email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailAutolink(effects, ok, nok) {\n const self = this;\n /** @type {boolean | undefined} */\n let dot;\n /** @type {boolean} */\n let data;\n return start;\n\n /**\n * Start of email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (!gfmAtext(code) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code);\n }\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkEmail');\n return atext(code);\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function atext(code) {\n if (gfmAtext(code)) {\n effects.consume(code);\n return atext;\n }\n if (code === 64) {\n effects.consume(code);\n return emailDomain;\n }\n return nok(code);\n }\n\n /**\n * In email domain.\n *\n * The reference code is a bit overly complex as it handles the `@`, of which\n * there may be just one.\n * Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L318>\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomain(code) {\n // Dot followed by alphanumerical (not `-` or `_`).\n if (code === 46) {\n return effects.check(emailDomainDotTrail, emailDomainAfter, emailDomainDot)(code);\n }\n\n // Alphanumerical, `-`, and `_`.\n if (code === 45 || code === 95 || asciiAlphanumeric(code)) {\n data = true;\n effects.consume(code);\n return emailDomain;\n }\n\n // To do: `/` if xmpp.\n\n // Note: normally we’d truncate trailing punctuation from the link.\n // However, email autolink literals cannot contain any of those markers,\n // except for `.`, but that can only occur if it isn’t trailing.\n // So we can ignore truncating!\n return emailDomainAfter(code);\n }\n\n /**\n * In email domain, on dot that is not a trail.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainDot(code) {\n effects.consume(code);\n dot = true;\n return emailDomain;\n }\n\n /**\n * After email domain.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainAfter(code) {\n // Domain must not be empty, must include a dot, and must end in alphabetical.\n // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L332>.\n if (data && dot && asciiAlpha(self.previous)) {\n effects.exit('literalAutolinkEmail');\n effects.exit('literalAutolink');\n return ok(code);\n }\n return nok(code);\n }\n}\n\n/**\n * `www` autolink literal.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwAutolink(effects, ok, nok) {\n const self = this;\n return wwwStart;\n\n /**\n * Start of www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwStart(code) {\n if (code !== 87 && code !== 119 || !previousWww.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code);\n }\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkWww');\n // Note: we *check*, so we can discard the `www.` we parsed.\n // If it worked, we consider it as a part of the domain.\n return effects.check(wwwPrefix, effects.attempt(domain, effects.attempt(path, wwwAfter), nok), nok)(code);\n }\n\n /**\n * After a www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwAfter(code) {\n effects.exit('literalAutolinkWww');\n effects.exit('literalAutolink');\n return ok(code);\n }\n}\n\n/**\n * Protocol autolink literal.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeProtocolAutolink(effects, ok, nok) {\n const self = this;\n let buffer = '';\n let seen = false;\n return protocolStart;\n\n /**\n * Start of protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolStart(code) {\n if ((code === 72 || code === 104) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events)) {\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkHttp');\n buffer += String.fromCodePoint(code);\n effects.consume(code);\n return protocolPrefixInside;\n }\n return nok(code);\n }\n\n /**\n * In protocol.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^^^^\n * ```\n *\n * @type {State}\n */\n function protocolPrefixInside(code) {\n // `5` is size of `https`\n if (asciiAlpha(code) && buffer.length < 5) {\n // @ts-expect-error: definitely number.\n buffer += String.fromCodePoint(code);\n effects.consume(code);\n return protocolPrefixInside;\n }\n if (code === 58) {\n const protocol = buffer.toLowerCase();\n if (protocol === 'http' || protocol === 'https') {\n effects.consume(code);\n return protocolSlashesInside;\n }\n }\n return nok(code);\n }\n\n /**\n * In slashes.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^\n * ```\n *\n * @type {State}\n */\n function protocolSlashesInside(code) {\n if (code === 47) {\n effects.consume(code);\n if (seen) {\n return afterProtocol;\n }\n seen = true;\n return protocolSlashesInside;\n }\n return nok(code);\n }\n\n /**\n * After protocol, before domain.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function afterProtocol(code) {\n // To do: this is different from `markdown-rs`:\n // https://github.com/wooorm/markdown-rs/blob/b3a921c761309ae00a51fe348d8a43adbc54b518/src/construct/gfm_autolink_literal.rs#L172-L182\n return code === null || asciiControl(code) || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || unicodePunctuation(code) ? nok(code) : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code);\n }\n\n /**\n * After a protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolAfter(code) {\n effects.exit('literalAutolinkHttp');\n effects.exit('literalAutolink');\n return ok(code);\n }\n}\n\n/**\n * `www` prefix.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwPrefix(effects, ok, nok) {\n let size = 0;\n return wwwPrefixInside;\n\n /**\n * In www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^^^^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixInside(code) {\n if ((code === 87 || code === 119) && size < 3) {\n size++;\n effects.consume(code);\n return wwwPrefixInside;\n }\n if (code === 46 && size === 3) {\n effects.consume(code);\n return wwwPrefixAfter;\n }\n return nok(code);\n }\n\n /**\n * After www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixAfter(code) {\n // If there is *anything*, we can link.\n return code === null ? nok(code) : ok(code);\n }\n}\n\n/**\n * Domain.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDomain(effects, ok, nok) {\n /** @type {boolean | undefined} */\n let underscoreInLastSegment;\n /** @type {boolean | undefined} */\n let underscoreInLastLastSegment;\n /** @type {boolean | undefined} */\n let seen;\n return domainInside;\n\n /**\n * In domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^^^^^^^^^^\n * ```\n *\n * @type {State}\n */\n function domainInside(code) {\n // Check whether this marker, which is a trailing punctuation\n // marker, optionally followed by more trailing markers, and then\n // followed by an end.\n if (code === 46 || code === 95) {\n return effects.check(trail, domainAfter, domainAtPunctuation)(code);\n }\n\n // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can\n // occur, which sounds like ASCII only, but they also support `www.點看.com`,\n // so that’s Unicode.\n // Instead of some new production for Unicode alphanumerics, markdown\n // already has that for Unicode punctuation and whitespace, so use those.\n // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L12>.\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || code !== 45 && unicodePunctuation(code)) {\n return domainAfter(code);\n }\n seen = true;\n effects.consume(code);\n return domainInside;\n }\n\n /**\n * In domain, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function domainAtPunctuation(code) {\n // There is an underscore in the last segment of the domain\n if (code === 95) {\n underscoreInLastSegment = true;\n }\n // Otherwise, it’s a `.`: save the last segment underscore in the\n // penultimate segment slot.\n else {\n underscoreInLastLastSegment = underscoreInLastSegment;\n underscoreInLastSegment = undefined;\n }\n effects.consume(code);\n return domainInside;\n }\n\n /**\n * After domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^\n * ```\n *\n * @type {State} */\n function domainAfter(code) {\n // Note: that’s GH says a dot is needed, but it’s not true:\n // <https://github.com/github/cmark-gfm/issues/279>\n if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n return nok(code);\n }\n return ok(code);\n }\n}\n\n/**\n * Path.\n *\n * ```markdown\n * > | a https://example.org/stuff b\n * ^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePath(effects, ok) {\n let sizeOpen = 0;\n let sizeClose = 0;\n return pathInside;\n\n /**\n * In path.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^\n * ```\n *\n * @type {State}\n */\n function pathInside(code) {\n if (code === 40) {\n sizeOpen++;\n effects.consume(code);\n return pathInside;\n }\n\n // To do: `markdown-rs` also needs this.\n // If this is a paren, and there are less closings than openings,\n // we don’t check for a trail.\n if (code === 41 && sizeClose < sizeOpen) {\n return pathAtPunctuation(code);\n }\n\n // Check whether this trailing punctuation marker is optionally\n // followed by more trailing markers, and then followed\n // by an end.\n if (code === 33 || code === 34 || code === 38 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 60 || code === 63 || code === 93 || code === 95 || code === 126) {\n return effects.check(trail, ok, pathAtPunctuation)(code);\n }\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n effects.consume(code);\n return pathInside;\n }\n\n /**\n * In path, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com/a\"b\n * ^\n * ```\n *\n * @type {State}\n */\n function pathAtPunctuation(code) {\n // Count closing parens.\n if (code === 41) {\n sizeClose++;\n }\n effects.consume(code);\n return pathInside;\n }\n}\n\n/**\n * Trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the entire trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | https://example.com\").\n * ^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTrail(effects, ok, nok) {\n return trail;\n\n /**\n * In trail of domain or path.\n *\n * ```markdown\n * > | https://example.com\").\n * ^\n * ```\n *\n * @type {State}\n */\n function trail(code) {\n // Regular trailing punctuation.\n if (code === 33 || code === 34 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 63 || code === 95 || code === 126) {\n effects.consume(code);\n return trail;\n }\n\n // `&` followed by one or more alphabeticals and then a `;`, is\n // as a whole considered as trailing punctuation.\n // In all other cases, it is considered as continuation of the URL.\n if (code === 38) {\n effects.consume(code);\n return trailCharacterReferenceStart;\n }\n\n // Needed because we allow literals after `[`, as we fix:\n // <https://github.com/github/cmark-gfm/issues/278>.\n // Check that it is not followed by `(` or `[`.\n if (code === 93) {\n effects.consume(code);\n return trailBracketAfter;\n }\n if (\n // `<` is an end.\n code === 60 ||\n // So is whitespace.\n code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n return nok(code);\n }\n\n /**\n * In trail, after `]`.\n *\n * > 👉 **Note**: this deviates from `cmark-gfm` to fix a bug.\n * > See end of <https://github.com/github/cmark-gfm/issues/278> for more.\n *\n * ```markdown\n * > | https://example.com](\n * ^\n * ```\n *\n * @type {State}\n */\n function trailBracketAfter(code) {\n // Whitespace or something that could start a resource or reference is the end.\n // Switch back to trail otherwise.\n if (code === null || code === 40 || code === 91 || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n return trail(code);\n }\n\n /**\n * In character-reference like trail, after `&`.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharacterReferenceStart(code) {\n // When non-alpha, it’s not a trail.\n return asciiAlpha(code) ? trailCharacterReferenceInside(code) : nok(code);\n }\n\n /**\n * In character-reference like trail.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharacterReferenceInside(code) {\n // Switch back to trail if this is well-formed.\n if (code === 59) {\n effects.consume(code);\n return trail;\n }\n if (asciiAlpha(code)) {\n effects.consume(code);\n return trailCharacterReferenceInside;\n }\n\n // It’s not a trail.\n return nok(code);\n }\n}\n\n/**\n * Dot in email domain trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | contact@example.org.\n * ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailDomainDotTrail(effects, ok, nok) {\n return start;\n\n /**\n * Dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Must be dot.\n effects.consume(code);\n return after;\n }\n\n /**\n * After dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Not a trail if alphanumeric.\n return asciiAlphanumeric(code) ? nok(code) : ok(code);\n }\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L156>.\n *\n * @type {Previous}\n */\nfunction previousWww(code) {\n return code === null || code === 40 || code === 42 || code === 95 || code === 91 || code === 93 || code === 126 || markdownLineEndingOrSpace(code);\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L214>.\n *\n * @type {Previous}\n */\nfunction previousProtocol(code) {\n return !asciiAlpha(code);\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previousEmail(code) {\n // Do not allow a slash “inside” atext.\n // The reference code is a bit weird, but that’s what it results in.\n // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L307>.\n // Other than slash, every preceding character is allowed.\n return !(code === 47 || gfmAtext(code));\n}\n\n/**\n * @param {Code} code\n * @returns {boolean}\n */\nfunction gfmAtext(code) {\n return code === 43 || code === 45 || code === 46 || code === 95 || asciiAlphanumeric(code);\n}\n\n/**\n * @param {Array<Event>} events\n * @returns {boolean}\n */\nfunction previousUnbalanced(events) {\n let index = events.length;\n let result = false;\n while (index--) {\n const token = events[index][1];\n if ((token.type === 'labelLink' || token.type === 'labelImage') && !token._balanced) {\n result = true;\n break;\n }\n\n // If we’ve seen this token, and it was marked as not having any unbalanced\n // bracket before it, we can exit.\n if (token._gfmAutolinkLiteralWalkedInto) {\n result = false;\n break;\n }\n }\n if (events.length > 0 && !result) {\n // Mark the last token as “walked into” w/o finding\n // anything.\n events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true;\n }\n return result;\n}","/**\n * @import {Event, Exiter, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { blankLine } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nconst indent = {\n tokenize: tokenizeIndent,\n partial: true\n};\n\n// To do: micromark should support a `_hiddenGfmFootnoteSupport`, which only\n// affects label start (image).\n// That will let us drop `tokenizePotentialGfmFootnote*`.\n// It currently has a `_hiddenFootnoteSupport`, which affects that and more.\n// That can be removed when `micromark-extension-footnote` is archived.\n\n/**\n * Create an extension for `micromark` to enable GFM footnote syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to\n * enable GFM footnote syntax.\n */\nexport function gfmFootnote() {\n /** @type {Extension} */\n return {\n document: {\n [91]: {\n name: 'gfmFootnoteDefinition',\n tokenize: tokenizeDefinitionStart,\n continuation: {\n tokenize: tokenizeDefinitionContinuation\n },\n exit: gfmFootnoteDefinitionEnd\n }\n },\n text: {\n [91]: {\n name: 'gfmFootnoteCall',\n tokenize: tokenizeGfmFootnoteCall\n },\n [93]: {\n name: 'gfmPotentialFootnoteCall',\n add: 'after',\n tokenize: tokenizePotentialGfmFootnoteCall,\n resolveTo: resolveToPotentialGfmFootnoteCall\n }\n }\n };\n}\n\n// To do: remove after micromark update.\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePotentialGfmFootnoteCall(effects, ok, nok) {\n const self = this;\n let index = self.events.length;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n /** @type {Token} */\n let labelStart;\n\n // Find an opening.\n while (index--) {\n const token = self.events[index][1];\n if (token.type === \"labelImage\") {\n labelStart = token;\n break;\n }\n\n // Exit if we’ve walked far enough.\n if (token.type === 'gfmFootnoteCall' || token.type === \"labelLink\" || token.type === \"label\" || token.type === \"image\" || token.type === \"link\") {\n break;\n }\n }\n return start;\n\n /**\n * @type {State}\n */\n function start(code) {\n if (!labelStart || !labelStart._balanced) {\n return nok(code);\n }\n const id = normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n }));\n if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n return nok(code);\n }\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n return ok(code);\n }\n}\n\n// To do: remove after micromark update.\n/** @type {Resolver} */\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n let index = events.length;\n /** @type {Token | undefined} */\n let labelStart;\n\n // Find an opening.\n while (index--) {\n if (events[index][1].type === \"labelImage\" && events[index][0] === 'enter') {\n labelStart = events[index][1];\n break;\n }\n }\n // Change the `labelImageMarker` to a `data`.\n events[index + 1][1].type = \"data\";\n events[index + 3][1].type = 'gfmFootnoteCallLabelMarker';\n\n // The whole (without `!`):\n /** @type {Token} */\n const call = {\n type: 'gfmFootnoteCall',\n start: Object.assign({}, events[index + 3][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n };\n // The `^` marker\n /** @type {Token} */\n const marker = {\n type: 'gfmFootnoteCallMarker',\n start: Object.assign({}, events[index + 3][1].end),\n end: Object.assign({}, events[index + 3][1].end)\n };\n // Increment the end 1 character.\n marker.end.column++;\n marker.end.offset++;\n marker.end._bufferIndex++;\n /** @type {Token} */\n const string = {\n type: 'gfmFootnoteCallString',\n start: Object.assign({}, marker.end),\n end: Object.assign({}, events[events.length - 1][1].start)\n };\n /** @type {Token} */\n const chunk = {\n type: \"chunkString\",\n contentType: 'string',\n start: Object.assign({}, string.start),\n end: Object.assign({}, string.end)\n };\n\n /** @type {Array<Event>} */\n const replacement = [\n // Take the `labelImageMarker` (now `data`, the `!`)\n events[index + 1], events[index + 2], ['enter', call, context],\n // The `[`\n events[index + 3], events[index + 4],\n // The `^`.\n ['enter', marker, context], ['exit', marker, context],\n // Everything in between.\n ['enter', string, context], ['enter', chunk, context], ['exit', chunk, context], ['exit', string, context],\n // The ending (`]`, properly parsed and labelled).\n events[events.length - 2], events[events.length - 1], ['exit', call, context]];\n events.splice(index, events.length - index + 1, ...replacement);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeGfmFootnoteCall(effects, ok, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let size = 0;\n /** @type {boolean} */\n let data;\n\n // Note: the implementation of `markdown-rs` is different, because it houses\n // core *and* extensions in one project.\n // Therefore, it can include footnote logic inside `label-end`.\n // We can’t do that, but luckily, we can parse footnotes in a simpler way than\n // needed for labels.\n return start;\n\n /**\n * Start of footnote label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteCall');\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n return callStart;\n }\n\n /**\n * After `[`, at `^`.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callStart(code) {\n if (code !== 94) return nok(code);\n effects.enter('gfmFootnoteCallMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallMarker');\n effects.enter('gfmFootnoteCallString');\n effects.enter('chunkString').contentType = 'string';\n return callData;\n }\n\n /**\n * In label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callData(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n code === 93 && !data ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n return nok(code);\n }\n if (code === 93) {\n effects.exit('chunkString');\n const token = effects.exit('gfmFootnoteCallString');\n if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n return nok(code);\n }\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n effects.exit('gfmFootnoteCall');\n return ok;\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true;\n }\n size++;\n effects.consume(code);\n return code === 92 ? callEscape : callData;\n }\n\n /**\n * On character after escape.\n *\n * ```markdown\n * > | a [^b\\c] d\n * ^\n * ```\n *\n * @type {State}\n */\n function callEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code);\n size++;\n return callData;\n }\n return callData(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionStart(effects, ok, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n /** @type {string} */\n let identifier;\n let size = 0;\n /** @type {boolean | undefined} */\n let data;\n return start;\n\n /**\n * Start of GFM footnote definition.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteDefinition')._container = true;\n effects.enter('gfmFootnoteDefinitionLabel');\n effects.enter('gfmFootnoteDefinitionLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionLabelMarker');\n return labelAtMarker;\n }\n\n /**\n * In label, at caret.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAtMarker(code) {\n if (code === 94) {\n effects.enter('gfmFootnoteDefinitionMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionMarker');\n effects.enter('gfmFootnoteDefinitionLabelString');\n effects.enter('chunkString').contentType = 'string';\n return labelInside;\n }\n return nok(code);\n }\n\n /**\n * In label.\n *\n * > 👉 **Note**: `cmark-gfm` prevents whitespace from occurring in footnote\n * > definition labels.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelInside(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n code === 93 && !data ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n return nok(code);\n }\n if (code === 93) {\n effects.exit('chunkString');\n const token = effects.exit('gfmFootnoteDefinitionLabelString');\n identifier = normalizeIdentifier(self.sliceSerialize(token));\n effects.enter('gfmFootnoteDefinitionLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionLabelMarker');\n effects.exit('gfmFootnoteDefinitionLabel');\n return labelAfter;\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true;\n }\n size++;\n effects.consume(code);\n return code === 92 ? labelEscape : labelInside;\n }\n\n /**\n * After `\\`, at a special character.\n *\n * > 👉 **Note**: `cmark-gfm` currently does not support escaped brackets:\n * > <https://github.com/github/cmark-gfm/issues/240>\n *\n * ```markdown\n * > | [^a\\*b]: c\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code);\n size++;\n return labelInside;\n }\n return labelInside(code);\n }\n\n /**\n * After definition label.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAfter(code) {\n if (code === 58) {\n effects.enter('definitionMarker');\n effects.consume(code);\n effects.exit('definitionMarker');\n if (!defined.includes(identifier)) {\n defined.push(identifier);\n }\n\n // Any whitespace after the marker is eaten, forming indented code\n // is not possible.\n // No space is also fine, just like a block quote marker.\n return factorySpace(effects, whitespaceAfter, 'gfmFootnoteDefinitionWhitespace');\n }\n return nok(code);\n }\n\n /**\n * After definition prefix.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function whitespaceAfter(code) {\n // `markdown-rs` has a wrapping token for the prefix that is closed here.\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionContinuation(effects, ok, nok) {\n /// Start of footnote definition continuation.\n ///\n /// ```markdown\n /// | [^a]: b\n /// > | c\n /// ^\n /// ```\n //\n // Either a blank line, which is okay, or an indented thing.\n return effects.check(blankLine, ok, effects.attempt(indent, ok, nok));\n}\n\n/** @type {Exiter} */\nfunction gfmFootnoteDefinitionEnd(effects) {\n effects.exit('gfmFootnoteDefinition');\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this;\n return factorySpace(effects, afterPrefix, 'gfmFootnoteDefinitionIndent', 4 + 1);\n\n /**\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === 'gfmFootnoteDefinitionIndent' && tail[2].sliceSerialize(tail[1], true).length === 4 ? ok(code) : nok(code);\n }\n}","/**\n * @import {Options} from 'micromark-extension-gfm-strikethrough'\n * @import {Event, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create an extension for `micromark` to enable GFM strikethrough syntax.\n *\n * @param {Options | null | undefined} [options={}]\n * Configuration.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions`, to\n * enable GFM strikethrough syntax.\n */\nexport function gfmStrikethrough(options) {\n const options_ = options || {};\n let single = options_.singleTilde;\n const tokenizer = {\n name: 'strikethrough',\n tokenize: tokenizeStrikethrough,\n resolveAll: resolveAllStrikethrough\n };\n if (single === null || single === undefined) {\n single = true;\n }\n return {\n text: {\n [126]: tokenizer\n },\n insideSpan: {\n null: [tokenizer]\n },\n attentionMarkers: {\n null: [126]\n }\n };\n\n /**\n * Take events and resolve strikethrough.\n *\n * @type {Resolver}\n */\n function resolveAllStrikethrough(events, context) {\n let index = -1;\n\n // Walk through all events.\n while (++index < events.length) {\n // Find a token that can close.\n if (events[index][0] === 'enter' && events[index][1].type === 'strikethroughSequenceTemporary' && events[index][1]._close) {\n let open = index;\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (events[open][0] === 'exit' && events[open][1].type === 'strikethroughSequenceTemporary' && events[open][1]._open &&\n // If the sizes are the same:\n events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {\n events[index][1].type = 'strikethroughSequence';\n events[open][1].type = 'strikethroughSequence';\n\n /** @type {Token} */\n const strikethrough = {\n type: 'strikethrough',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[index][1].end)\n };\n\n /** @type {Token} */\n const text = {\n type: 'strikethroughText',\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n };\n\n // Opening.\n /** @type {Array<Event>} */\n const nextEvents = [['enter', strikethrough, context], ['enter', events[open][1], context], ['exit', events[open][1], context], ['enter', text, context]];\n const insideSpan = context.parser.constructs.insideSpan.null;\n if (insideSpan) {\n // Between.\n splice(nextEvents, nextEvents.length, 0, resolveAll(insideSpan, events.slice(open + 1, index), context));\n }\n\n // Closing.\n splice(nextEvents, nextEvents.length, 0, [['exit', text, context], ['enter', events[index][1], context], ['exit', events[index][1], context], ['exit', strikethrough, context]]);\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - 2;\n break;\n }\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === 'strikethroughSequenceTemporary') {\n events[index][1].type = \"data\";\n }\n }\n return events;\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n function tokenizeStrikethrough(effects, ok, nok) {\n const previous = this.previous;\n const events = this.events;\n let size = 0;\n return start;\n\n /** @type {State} */\n function start(code) {\n if (previous === 126 && events[events.length - 1][1].type !== \"characterEscape\") {\n return nok(code);\n }\n effects.enter('strikethroughSequenceTemporary');\n return more(code);\n }\n\n /** @type {State} */\n function more(code) {\n const before = classifyCharacter(previous);\n if (code === 126) {\n // If this is the third marker, exit.\n if (size > 1) return nok(code);\n effects.consume(code);\n size++;\n return more;\n }\n if (size < 2 && !single) return nok(code);\n const token = effects.exit('strikethroughSequenceTemporary');\n const after = classifyCharacter(code);\n token._open = !after || after === 2 && Boolean(before);\n token._close = !before || before === 2 && Boolean(after);\n return ok(code);\n }\n }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n// Port of `edit_map.rs` from `markdown-rs`.\n// This should move to `markdown-js` later.\n\n// Deal with several changes in events, batching them together.\n//\n// Preferably, changes should be kept to a minimum.\n// Sometimes, it’s needed to change the list of events, because parsing can be\n// messy, and it helps to expose a cleaner interface of events to the compiler\n// and other users.\n// It can also help to merge many adjacent similar events.\n// And, in other cases, it’s needed to parse subcontent: pass some events\n// through another tokenizer and inject the result.\n\n/**\n * @typedef {[number, number, Array<Event>]} Change\n * @typedef {[number, number, number]} Jump\n */\n\n/**\n * Tracks a bunch of edits.\n */\nexport class EditMap {\n /**\n * Create a new edit map.\n */\n constructor() {\n /**\n * Record of changes.\n *\n * @type {Array<Change>}\n */\n this.map = [];\n }\n\n /**\n * Create an edit: a remove and/or add at a certain place.\n *\n * @param {number} index\n * @param {number} remove\n * @param {Array<Event>} add\n * @returns {undefined}\n */\n add(index, remove, add) {\n addImplementation(this, index, remove, add);\n }\n\n // To do: add this when moving to `micromark`.\n // /**\n // * Create an edit: but insert `add` before existing additions.\n // *\n // * @param {number} index\n // * @param {number} remove\n // * @param {Array<Event>} add\n // * @returns {undefined}\n // */\n // addBefore(index, remove, add) {\n // addImplementation(this, index, remove, add, true)\n // }\n\n /**\n * Done, change the events.\n *\n * @param {Array<Event>} events\n * @returns {undefined}\n */\n consume(events) {\n this.map.sort(function (a, b) {\n return a[0] - b[0];\n });\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (this.map.length === 0) {\n return;\n }\n\n // To do: if links are added in events, like they are in `markdown-rs`,\n // this is needed.\n // // Calculate jumps: where items in the current list move to.\n // /** @type {Array<Jump>} */\n // const jumps = []\n // let index = 0\n // let addAcc = 0\n // let removeAcc = 0\n // while (index < this.map.length) {\n // const [at, remove, add] = this.map[index]\n // removeAcc += remove\n // addAcc += add.length\n // jumps.push([at, removeAcc, addAcc])\n // index += 1\n // }\n //\n // . shiftLinks(events, jumps)\n\n let index = this.map.length;\n /** @type {Array<Array<Event>>} */\n const vecs = [];\n while (index > 0) {\n index -= 1;\n vecs.push(events.slice(this.map[index][0] + this.map[index][1]), this.map[index][2]);\n\n // Truncate rest.\n events.length = this.map[index][0];\n }\n vecs.push(events.slice());\n events.length = 0;\n let slice = vecs.pop();\n while (slice) {\n for (const element of slice) {\n events.push(element);\n }\n slice = vecs.pop();\n }\n\n // Truncate everything.\n this.map.length = 0;\n }\n}\n\n/**\n * Create an edit.\n *\n * @param {EditMap} editMap\n * @param {number} at\n * @param {number} remove\n * @param {Array<Event>} add\n * @returns {undefined}\n */\nfunction addImplementation(editMap, at, remove, add) {\n let index = 0;\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (remove === 0 && add.length === 0) {\n return;\n }\n while (index < editMap.map.length) {\n if (editMap.map[index][0] === at) {\n editMap.map[index][1] += remove;\n\n // To do: before not used by tables, use when moving to micromark.\n // if (before) {\n // add.push(...editMap.map[index][2])\n // editMap.map[index][2] = add\n // } else {\n editMap.map[index][2].push(...add);\n // }\n\n return;\n }\n index += 1;\n }\n editMap.map.push([at, remove, add]);\n}\n\n// /**\n// * Shift `previous` and `next` links according to `jumps`.\n// *\n// * This fixes links in case there are events removed or added between them.\n// *\n// * @param {Array<Event>} events\n// * @param {Array<Jump>} jumps\n// */\n// function shiftLinks(events, jumps) {\n// let jumpIndex = 0\n// let index = 0\n// let add = 0\n// let rm = 0\n\n// while (index < events.length) {\n// const rmCurr = rm\n\n// while (jumpIndex < jumps.length && jumps[jumpIndex][0] <= index) {\n// add = jumps[jumpIndex][2]\n// rm = jumps[jumpIndex][1]\n// jumpIndex += 1\n// }\n\n// // Ignore items that will be removed.\n// if (rm > rmCurr) {\n// index += rm - rmCurr\n// } else {\n// // ?\n// // if let Some(link) = &events[index].link {\n// // if let Some(next) = link.next {\n// // events[next].link.as_mut().unwrap().previous = Some(index + add - rm);\n// // while jumpIndex < jumps.len() && jumps[jumpIndex].0 <= next {\n// // add = jumps[jumpIndex].2;\n// // rm = jumps[jumpIndex].1;\n// // jumpIndex += 1;\n// // }\n// // events[index].link.as_mut().unwrap().next = Some(next + add - rm);\n// // index = next;\n// // continue;\n// // }\n// // }\n// index += 1\n// }\n// }\n// }","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n/**\n * @typedef {'center' | 'left' | 'none' | 'right'} Align\n */\n\n/**\n * Figure out the alignment of a GFM table.\n *\n * @param {Readonly<Array<Event>>} events\n * List of events.\n * @param {number} index\n * Table enter event.\n * @returns {Array<Align>}\n * List of aligns.\n */\nexport function gfmTableAlign(events, index) {\n let inDelimiterRow = false;\n /** @type {Array<Align>} */\n const align = [];\n while (index < events.length) {\n const event = events[index];\n if (inDelimiterRow) {\n if (event[0] === 'enter') {\n // Start of alignment value: set a new column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n if (event[1].type === 'tableContent') {\n align.push(events[index + 1][1].type === 'tableDelimiterMarker' ? 'left' : 'none');\n }\n }\n // Exits:\n // End of alignment value: change the column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n else if (event[1].type === 'tableContent') {\n if (events[index - 1][1].type === 'tableDelimiterMarker') {\n const alignIndex = align.length - 1;\n align[alignIndex] = align[alignIndex] === 'left' ? 'center' : 'right';\n }\n }\n // Done!\n else if (event[1].type === 'tableDelimiterRow') {\n break;\n }\n } else if (event[0] === 'enter' && event[1].type === 'tableDelimiterRow') {\n inDelimiterRow = true;\n }\n index += 1;\n }\n return align;\n}","/**\n * @import {Event, Extension, Point, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\n/**\n * @typedef {[number, number, number, number]} Range\n * Cell info.\n *\n * @typedef {0 | 1 | 2 | 3} RowKind\n * Where we are: `1` for head row, `2` for delimiter row, `3` for body row.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { EditMap } from './edit-map.js';\nimport { gfmTableAlign } from './infer.js';\n\n/**\n * Create an HTML extension for `micromark` to support GitHub tables syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * table syntax.\n */\nexport function gfmTable() {\n return {\n flow: {\n null: {\n name: 'table',\n tokenize: tokenizeTable,\n resolveAll: resolveTable\n }\n }\n };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTable(effects, ok, nok) {\n const self = this;\n let size = 0;\n let sizeB = 0;\n /** @type {boolean | undefined} */\n let seen;\n return start;\n\n /**\n * Start of a GFM table.\n *\n * If there is a valid table row or table head before, then we try to parse\n * another row.\n * Otherwise, we try to parse a head.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * > | | b |\n * ^\n * ```\n * @type {State}\n */\n function start(code) {\n let index = self.events.length - 1;\n while (index > -1) {\n const type = self.events[index][1].type;\n if (type === \"lineEnding\" ||\n // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n type === \"linePrefix\") index--;else break;\n }\n const tail = index > -1 ? self.events[index][1].type : null;\n const next = tail === 'tableHead' || tail === 'tableRow' ? bodyRowStart : headRowBefore;\n\n // Don’t allow lazy body rows.\n if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n return next(code);\n }\n\n /**\n * Before table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBefore(code) {\n effects.enter('tableHead');\n effects.enter('tableRow');\n return headRowStart(code);\n }\n\n /**\n * Before table head row, after whitespace.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowStart(code) {\n if (code === 124) {\n return headRowBreak(code);\n }\n\n // To do: micromark-js should let us parse our own whitespace in extensions,\n // like `markdown-rs`:\n //\n // ```js\n // // 4+ spaces.\n // if (markdownSpace(code)) {\n // return nok(code)\n // }\n // ```\n\n seen = true;\n // Count the first character, that isn’t a pipe, double.\n sizeB += 1;\n return headRowBreak(code);\n }\n\n /**\n * At break in table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * ^\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBreak(code) {\n if (code === null) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n // If anything other than one pipe (ignoring whitespace) was used, it’s fine.\n if (sizeB > 1) {\n sizeB = 0;\n // To do: check if this works.\n // Feel free to interrupt:\n self.interrupt = true;\n effects.exit('tableRow');\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return headDelimiterStart;\n }\n\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n if (markdownSpace(code)) {\n // To do: check if this is fine.\n // effects.attempt(State::Next(StateName::GfmTableHeadRowBreak), State::Nok)\n // State::Retry(space_or_tab(tokenizer))\n return factorySpace(effects, headRowBreak, \"whitespace\")(code);\n }\n sizeB += 1;\n if (seen) {\n seen = false;\n // Header cell count.\n size += 1;\n }\n if (code === 124) {\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n // Whether a delimiter was seen.\n seen = true;\n return headRowBreak;\n }\n\n // Anything else is cell data.\n effects.enter(\"data\");\n return headRowData(code);\n }\n\n /**\n * In table head row data.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit(\"data\");\n return headRowBreak(code);\n }\n effects.consume(code);\n return code === 92 ? headRowEscape : headRowData;\n }\n\n /**\n * In table head row escape.\n *\n * ```markdown\n * > | | a\\-b |\n * ^\n * | | ---- |\n * | | c |\n * ```\n *\n * @type {State}\n */\n function headRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code);\n return headRowData;\n }\n return headRowData(code);\n }\n\n /**\n * Before delimiter row.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterStart(code) {\n // Reset `interrupt`.\n self.interrupt = false;\n\n // Note: in `markdown-rs`, we need to handle piercing here too.\n if (self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n effects.enter('tableDelimiterRow');\n // Track if we’ve seen a `:` or `|`.\n seen = false;\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n }\n return headDelimiterBefore(code);\n }\n\n /**\n * Before delimiter row, after optional whitespace.\n *\n * Reused when a `|` is found later, to parse another cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterBefore(code) {\n if (code === 45 || code === 58) {\n return headDelimiterValueBefore(code);\n }\n if (code === 124) {\n seen = true;\n // If we start with a pipe, we open a cell marker.\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n return headDelimiterCellBefore;\n }\n\n // More whitespace / empty row not allowed at start.\n return headDelimiterNok(code);\n }\n\n /**\n * After `|`, before delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellBefore(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterValueBefore, \"whitespace\")(code);\n }\n return headDelimiterValueBefore(code);\n }\n\n /**\n * Before delimiter cell value.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterValueBefore(code) {\n // Align: left.\n if (code === 58) {\n sizeB += 1;\n seen = true;\n effects.enter('tableDelimiterMarker');\n effects.consume(code);\n effects.exit('tableDelimiterMarker');\n return headDelimiterLeftAlignmentAfter;\n }\n\n // Align: none.\n if (code === 45) {\n sizeB += 1;\n // To do: seems weird that this *isn’t* left aligned, but that state is used?\n return headDelimiterLeftAlignmentAfter(code);\n }\n if (code === null || markdownLineEnding(code)) {\n return headDelimiterCellAfter(code);\n }\n return headDelimiterNok(code);\n }\n\n /**\n * After delimiter cell left alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | :- |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterLeftAlignmentAfter(code) {\n if (code === 45) {\n effects.enter('tableDelimiterFiller');\n return headDelimiterFiller(code);\n }\n\n // Anything else is not ok after the left-align colon.\n return headDelimiterNok(code);\n }\n\n /**\n * In delimiter cell filler.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterFiller(code) {\n if (code === 45) {\n effects.consume(code);\n return headDelimiterFiller;\n }\n\n // Align is `center` if it was `left`, `right` otherwise.\n if (code === 58) {\n seen = true;\n effects.exit('tableDelimiterFiller');\n effects.enter('tableDelimiterMarker');\n effects.consume(code);\n effects.exit('tableDelimiterMarker');\n return headDelimiterRightAlignmentAfter;\n }\n effects.exit('tableDelimiterFiller');\n return headDelimiterRightAlignmentAfter(code);\n }\n\n /**\n * After delimiter cell right alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterRightAlignmentAfter(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterCellAfter, \"whitespace\")(code);\n }\n return headDelimiterCellAfter(code);\n }\n\n /**\n * After delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellAfter(code) {\n if (code === 124) {\n return headDelimiterBefore(code);\n }\n if (code === null || markdownLineEnding(code)) {\n // Exit when:\n // * there was no `:` or `|` at all (it’s a thematic break or setext\n // underline instead)\n // * the header cell count is not the delimiter cell count\n if (!seen || size !== sizeB) {\n return headDelimiterNok(code);\n }\n\n // Note: in markdown-rs`, a reset is needed here.\n effects.exit('tableDelimiterRow');\n effects.exit('tableHead');\n // To do: in `markdown-rs`, resolvers need to be registered manually.\n // effects.register_resolver(ResolveName::GfmTable)\n return ok(code);\n }\n return headDelimiterNok(code);\n }\n\n /**\n * In delimiter row, at a disallowed byte.\n *\n * ```markdown\n * | | a |\n * > | | x |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterNok(code) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n\n /**\n * Before table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowStart(code) {\n // Note: in `markdown-rs` we need to manually take care of a prefix,\n // but in `micromark-js` that is done for us, so if we’re here, we’re\n // never at whitespace.\n effects.enter('tableRow');\n return bodyRowBreak(code);\n }\n\n /**\n * At break in table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ^\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowBreak(code) {\n if (code === 124) {\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n return bodyRowBreak;\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit('tableRow');\n return ok(code);\n }\n if (markdownSpace(code)) {\n return factorySpace(effects, bodyRowBreak, \"whitespace\")(code);\n }\n\n // Anything else is cell content.\n effects.enter(\"data\");\n return bodyRowData(code);\n }\n\n /**\n * In table body row data.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit(\"data\");\n return bodyRowBreak(code);\n }\n effects.consume(code);\n return code === 92 ? bodyRowEscape : bodyRowData;\n }\n\n /**\n * In table body row escape.\n *\n * ```markdown\n * | | a |\n * | | ---- |\n * > | | b\\-c |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code);\n return bodyRowData;\n }\n return bodyRowData(code);\n }\n}\n\n/** @type {Resolver} */\n\nfunction resolveTable(events, context) {\n let index = -1;\n let inFirstCellAwaitingPipe = true;\n /** @type {RowKind} */\n let rowKind = 0;\n /** @type {Range} */\n let lastCell = [0, 0, 0, 0];\n /** @type {Range} */\n let cell = [0, 0, 0, 0];\n let afterHeadAwaitingFirstBodyRow = false;\n let lastTableEnd = 0;\n /** @type {Token | undefined} */\n let currentTable;\n /** @type {Token | undefined} */\n let currentBody;\n /** @type {Token | undefined} */\n let currentCell;\n const map = new EditMap();\n while (++index < events.length) {\n const event = events[index];\n const token = event[1];\n if (event[0] === 'enter') {\n // Start of head.\n if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = false;\n\n // Inject previous (body end and) table end.\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n currentBody = undefined;\n lastTableEnd = 0;\n }\n\n // Inject table start.\n currentTable = {\n type: 'table',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map.add(index, 0, [['enter', currentTable, context]]);\n } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n inFirstCellAwaitingPipe = true;\n currentCell = undefined;\n lastCell = [0, 0, 0, 0];\n cell = [0, index + 1, 0, 0];\n\n // Inject table body start.\n if (afterHeadAwaitingFirstBodyRow) {\n afterHeadAwaitingFirstBodyRow = false;\n currentBody = {\n type: 'tableBody',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map.add(index, 0, [['enter', currentBody, context]]);\n }\n rowKind = token.type === 'tableDelimiterRow' ? 2 : currentBody ? 3 : 1;\n }\n // Cell data.\n else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n inFirstCellAwaitingPipe = false;\n\n // First value in cell.\n if (cell[2] === 0) {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n lastCell = [0, 0, 0, 0];\n }\n cell[2] = index;\n }\n } else if (token.type === 'tableCellDivider') {\n if (inFirstCellAwaitingPipe) {\n inFirstCellAwaitingPipe = false;\n } else {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n }\n lastCell = cell;\n cell = [lastCell[1], index, 0, 0];\n }\n }\n }\n // Exit events.\n else if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = true;\n lastTableEnd = index;\n } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n lastTableEnd = index;\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, index, currentCell);\n } else if (cell[1] !== 0) {\n currentCell = flushCell(map, context, cell, rowKind, index, currentCell);\n }\n rowKind = 0;\n } else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n cell[3] = index;\n }\n }\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n }\n map.consume(context.events);\n\n // To do: move this into `html`, when events are exposed there.\n // That’s what `markdown-rs` does.\n // That needs updates to `mdast-util-gfm-table`.\n index = -1;\n while (++index < context.events.length) {\n const event = context.events[index];\n if (event[0] === 'enter' && event[1].type === 'table') {\n event[1]._align = gfmTableAlign(context.events, index);\n }\n }\n return events;\n}\n\n/**\n * Generate a cell.\n *\n * @param {EditMap} map\n * @param {Readonly<TokenizeContext>} context\n * @param {Readonly<Range>} range\n * @param {RowKind} rowKind\n * @param {number | undefined} rowEnd\n * @param {Token | undefined} previousCell\n * @returns {Token | undefined}\n */\n// eslint-disable-next-line max-params\nfunction flushCell(map, context, range, rowKind, rowEnd, previousCell) {\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCell' : 'tableCell'\n const groupName = rowKind === 1 ? 'tableHeader' : rowKind === 2 ? 'tableDelimiter' : 'tableData';\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCellValue' : 'tableCellText'\n const valueName = 'tableContent';\n\n // Insert an exit for the previous cell, if there is one.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[0] !== 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, range[0]));\n map.add(range[0], 0, [['exit', previousCell, context]]);\n }\n\n // Insert enter of this cell.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^^^^-- this cell\n // ```\n const now = getPoint(context.events, range[1]);\n previousCell = {\n type: groupName,\n start: Object.assign({}, now),\n // Note: correct end is set later.\n end: Object.assign({}, now)\n };\n map.add(range[1], 0, [['enter', previousCell, context]]);\n\n // Insert text start at first data start and end at last data end, and\n // remove events between.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[2] !== 0) {\n const relatedStart = getPoint(context.events, range[2]);\n const relatedEnd = getPoint(context.events, range[3]);\n /** @type {Token} */\n const valueToken = {\n type: valueName,\n start: Object.assign({}, relatedStart),\n end: Object.assign({}, relatedEnd)\n };\n map.add(range[2], 0, [['enter', valueToken, context]]);\n if (rowKind !== 2) {\n // Fix positional info on remaining events\n const start = context.events[range[2]];\n const end = context.events[range[3]];\n start[1].end = Object.assign({}, end[1].end);\n start[1].type = \"chunkText\";\n start[1].contentType = \"text\";\n\n // Remove if needed.\n if (range[3] > range[2] + 1) {\n const a = range[2] + 1;\n const b = range[3] - range[2] - 1;\n map.add(a, b, []);\n }\n }\n map.add(range[3] + 1, 0, [['exit', valueToken, context]]);\n }\n\n // Insert an exit for the last cell, if at the row end.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^^^-- this cell (the last one contains two “between” parts)\n // ```\n if (rowEnd !== undefined) {\n previousCell.end = Object.assign({}, getPoint(context.events, rowEnd));\n map.add(rowEnd, 0, [['exit', previousCell, context]]);\n previousCell = undefined;\n }\n return previousCell;\n}\n\n/**\n * Generate table end (and table body end).\n *\n * @param {Readonly<EditMap>} map\n * @param {Readonly<TokenizeContext>} context\n * @param {number} index\n * @param {Token} table\n * @param {Token | undefined} tableBody\n */\n// eslint-disable-next-line max-params\nfunction flushTableEnd(map, context, index, table, tableBody) {\n /** @type {Array<Event>} */\n const exits = [];\n const related = getPoint(context.events, index);\n if (tableBody) {\n tableBody.end = Object.assign({}, related);\n exits.push(['exit', tableBody, context]);\n }\n table.end = Object.assign({}, related);\n exits.push(['exit', table, context]);\n map.add(index + 1, 0, exits);\n}\n\n/**\n * @param {Readonly<Array<Event>>} events\n * @param {number} index\n * @returns {Readonly<Point>}\n */\nfunction getPoint(events, index) {\n const event = events[index];\n const side = event[0] === 'enter' ? 'start' : 'end';\n return event[1][side];\n}","/**\n * @import {Extension, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nconst tasklistCheck = {\n name: 'tasklistCheck',\n tokenize: tokenizeTasklistCheck\n};\n\n/**\n * Create an HTML extension for `micromark` to support GFM task list items\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM task list items when serializing to HTML.\n */\nexport function gfmTaskListItem() {\n return {\n text: {\n [91]: tasklistCheck\n }\n };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTasklistCheck(effects, ok, nok) {\n const self = this;\n return open;\n\n /**\n * At start of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (\n // Exit if there’s stuff before.\n self.previous !== null ||\n // Exit if not in the first content that is the first child of a list\n // item.\n !self._gfmTasklistFirstContentOfListItem) {\n return nok(code);\n }\n effects.enter('taskListCheck');\n effects.enter('taskListCheckMarker');\n effects.consume(code);\n effects.exit('taskListCheckMarker');\n return inside;\n }\n\n /**\n * In task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // Currently we match how GH works in files.\n // To match how GH works in comments, use `markdownSpace` (`[\\t ]`) instead\n // of `markdownLineEndingOrSpace` (`[\\t\\n\\r ]`).\n if (markdownLineEndingOrSpace(code)) {\n effects.enter('taskListCheckValueUnchecked');\n effects.consume(code);\n effects.exit('taskListCheckValueUnchecked');\n return close;\n }\n if (code === 88 || code === 120) {\n effects.enter('taskListCheckValueChecked');\n effects.consume(code);\n effects.exit('taskListCheckValueChecked');\n return close;\n }\n return nok(code);\n }\n\n /**\n * At close of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function close(code) {\n if (code === 93) {\n effects.enter('taskListCheckMarker');\n effects.consume(code);\n effects.exit('taskListCheckMarker');\n effects.exit('taskListCheck');\n return after;\n }\n return nok(code);\n }\n\n /**\n * @type {State}\n */\n function after(code) {\n // EOL in paragraph means there must be something else after it.\n if (markdownLineEnding(code)) {\n return ok(code);\n }\n\n // Space or tab?\n // Check what comes after.\n if (markdownSpace(code)) {\n return effects.check({\n tokenize: spaceThenNonSpace\n }, ok, nok)(code);\n }\n\n // EOF, or non-whitespace, both wrong.\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction spaceThenNonSpace(effects, ok, nok) {\n return factorySpace(effects, after, \"whitespace\");\n\n /**\n * After whitespace, after task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // EOF means there was nothing, so bad.\n // EOL means there’s content after it, so good.\n // Impossible to have more spaces.\n // Anything else is good.\n return code === null ? nok(code) : ok(code);\n }\n}","/**\n * @typedef {import('micromark-extension-gfm-footnote').HtmlOptions} HtmlOptions\n * @typedef {import('micromark-extension-gfm-strikethrough').Options} Options\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {\n combineExtensions,\n combineHtmlExtensions\n} from 'micromark-util-combine-extensions'\nimport {\n gfmAutolinkLiteral,\n gfmAutolinkLiteralHtml\n} from 'micromark-extension-gfm-autolink-literal'\nimport {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote'\nimport {\n gfmStrikethrough,\n gfmStrikethroughHtml\n} from 'micromark-extension-gfm-strikethrough'\nimport {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table'\nimport {gfmTagfilterHtml} from 'micromark-extension-gfm-tagfilter'\nimport {\n gfmTaskListItem,\n gfmTaskListItemHtml\n} from 'micromark-extension-gfm-task-list-item'\n\n/**\n * Create an extension for `micromark` to enable GFM syntax.\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n *\n * Passed to `micromark-extens-gfm-strikethrough`.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * syntax.\n */\nexport function gfm(options) {\n return combineExtensions([\n gfmAutolinkLiteral(),\n gfmFootnote(),\n gfmStrikethrough(options),\n gfmTable(),\n gfmTaskListItem()\n ])\n}\n\n/**\n * Create an extension for `micromark` to support GFM when serializing to HTML.\n *\n * @param {HtmlOptions | null | undefined} [options]\n * Configuration (optional).\n *\n * Passed to `micromark-extens-gfm-footnote`.\n * @returns {HtmlExtension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM when serializing to HTML.\n */\nexport function gfmHtml(options) {\n return combineHtmlExtensions([\n gfmAutolinkLiteralHtml(),\n gfmFootnoteHtml(options),\n gfmStrikethroughHtml(),\n gfmTableHtml(),\n gfmTagfilterHtml(),\n gfmTaskListItemHtml()\n ])\n}\n","/**\n * @import {Root} from 'mdast'\n * @import {Options} from 'remark-gfm'\n * @import {} from 'remark-parse'\n * @import {} from 'remark-stringify'\n * @import {Processor} from 'unified'\n */\n\nimport {gfmFromMarkdown, gfmToMarkdown} from 'mdast-util-gfm'\nimport {gfm} from 'micromark-extension-gfm'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Add support GFM (autolink literals, footnotes, strikethrough, tables,\n * tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkGfm(options) {\n // @ts-expect-error: TS is wrong about `this`.\n // eslint-disable-next-line unicorn/no-this-assignment\n const self = /** @type {Processor<Root>} */ (this)\n const settings = options || emptyOptions\n const data = self.data()\n\n const micromarkExtensions =\n data.micromarkExtensions || (data.micromarkExtensions = [])\n const fromMarkdownExtensions =\n data.fromMarkdownExtensions || (data.fromMarkdownExtensions = [])\n const toMarkdownExtensions =\n data.toMarkdownExtensions || (data.toMarkdownExtensions = [])\n\n micromarkExtensions.push(gfm(settings))\n fromMarkdownExtensions.push(gfmFromMarkdown())\n toMarkdownExtensions.push(gfmToMarkdown(settings))\n}\n","import { expectDomTypeError } from \"@milkdown/exception\";\nimport { paragraphSchema, listItemSchema } from \"@milkdown/preset-commonmark\";\nimport { InputRule } from \"@milkdown/prose/inputrules\";\nimport { $markAttr, $markSchema, $inputRule, $useKeymap, $command, $nodeSchema, $pasteRule, $prose, $remark } from \"@milkdown/utils\";\nimport { tableNodes, findTable, TableMap, CellSelection, goToNextCell, isInTable, moveTableRow, moveTableColumn, deleteTable, deleteColumn, deleteRow, selectedRect, addColumnBefore, addColumnAfter, setCellAttr, columnResizing, tableEditing } from \"@milkdown/prose/tables\";\nimport { commandsCtx } from \"@milkdown/core\";\nimport { markRule, findParentNodeClosestToPos, cloneTr, findParentNodeType } from \"@milkdown/prose\";\nimport { toggleMark } from \"@milkdown/prose/commands\";\nimport { Slice, Fragment } from \"@milkdown/prose/model\";\nimport { Selection, TextSelection, Plugin, PluginKey } from \"@milkdown/prose/state\";\nimport { imeSpan } from \"prosemirror-safari-ime-span\";\nimport remarkGFM from \"remark-gfm\";\nfunction withMeta(plugin, meta) {\n Object.assign(plugin, {\n meta: {\n package: \"@milkdown/preset-gfm\",\n ...meta\n }\n });\n return plugin;\n}\nconst strikethroughAttr = $markAttr(\"strike_through\");\nwithMeta(strikethroughAttr, {\n displayName: \"Attr<strikethrough>\",\n group: \"Strikethrough\"\n});\nconst strikethroughSchema = $markSchema(\"strike_through\", (ctx) => ({\n parseDOM: [\n { tag: \"del\" },\n {\n style: \"text-decoration\",\n getAttrs: (value) => value === \"line-through\"\n }\n ],\n toDOM: (mark) => [\"del\", ctx.get(strikethroughAttr.key)(mark)],\n parseMarkdown: {\n match: (node) => node.type === \"delete\",\n runner: (state, node, markType) => {\n state.openMark(markType);\n state.next(node.children);\n state.closeMark(markType);\n }\n },\n toMarkdown: {\n match: (mark) => mark.type.name === \"strike_through\",\n runner: (state, mark) => {\n state.withMark(mark, \"delete\");\n }\n }\n}));\nwithMeta(strikethroughSchema.mark, {\n displayName: \"MarkSchema<strikethrough>\",\n group: \"Strikethrough\"\n});\nwithMeta(strikethroughSchema.ctx, {\n displayName: \"MarkSchemaCtx<strikethrough>\",\n group: \"Strikethrough\"\n});\nconst toggleStrikethroughCommand = $command(\n \"ToggleStrikeThrough\",\n (ctx) => () => {\n return toggleMark(strikethroughSchema.type(ctx));\n }\n);\nwithMeta(toggleStrikethroughCommand, {\n displayName: \"Command<ToggleStrikethrough>\",\n group: \"Strikethrough\"\n});\nconst strikethroughInputRule = $inputRule((ctx) => {\n return markRule(\n new RegExp(\"(?<![\\\\w:/])(~{1,2})(.+?)\\\\1(?!\\\\w|\\\\/)\"),\n strikethroughSchema.type(ctx)\n );\n});\nwithMeta(strikethroughInputRule, {\n displayName: \"InputRule<strikethrough>\",\n group: \"Strikethrough\"\n});\nconst strikethroughKeymap = $useKeymap(\"strikeThroughKeymap\", {\n ToggleStrikethrough: {\n shortcuts: \"Mod-Alt-x\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(toggleStrikethroughCommand.key);\n }\n }\n});\nwithMeta(strikethroughKeymap.ctx, {\n displayName: \"KeymapCtx<strikethrough>\",\n group: \"Strikethrough\"\n});\nwithMeta(strikethroughKeymap.shortcuts, {\n displayName: \"Keymap<strikethrough>\",\n group: \"Strikethrough\"\n});\nconst originalSchema = tableNodes({\n tableGroup: \"block\",\n cellContent: \"paragraph\",\n cellAttributes: {\n alignment: {\n default: \"left\",\n getFromDOM: (dom) => dom.style.textAlign || \"left\",\n setDOMAttr: (value, attrs) => {\n attrs.style = `text-align: ${value || \"left\"}`;\n }\n }\n }\n});\nconst tableSchema = $nodeSchema(\"table\", () => ({\n ...originalSchema.table,\n content: \"table_header_row table_row+\",\n disableDropCursor: true,\n parseMarkdown: {\n match: (node) => node.type === \"table\",\n runner: (state, node, type) => {\n const align = node.align;\n const children = node.children.map((x, i) => ({\n ...x,\n align,\n isHeader: i === 0\n }));\n state.openNode(type);\n state.next(children);\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"table\",\n runner: (state, node) => {\n const firstLine = node.content.firstChild?.content;\n if (!firstLine) return;\n const align = [];\n firstLine.forEach((cell) => {\n align.push(cell.attrs.alignment);\n });\n state.openNode(\"table\", void 0, { align });\n state.next(node.content);\n state.closeNode();\n }\n }\n}));\nwithMeta(tableSchema.node, {\n displayName: \"NodeSchema<table>\",\n group: \"Table\"\n});\nwithMeta(tableSchema.ctx, {\n displayName: \"NodeSchemaCtx<table>\",\n group: \"Table\"\n});\nconst tableHeaderRowSchema = $nodeSchema(\"table_header_row\", () => ({\n ...originalSchema.table_row,\n disableDropCursor: true,\n content: \"(table_header)*\",\n parseDOM: [\n { tag: \"tr[data-is-header]\" },\n {\n tag: \"tr\",\n getAttrs: (dom) => {\n if (dom instanceof HTMLElement) {\n const hasHeader = dom.querySelector(\"th\");\n return hasHeader ? {} : false;\n }\n return false;\n }\n }\n ],\n toDOM() {\n return [\"tr\", { \"data-is-header\": true }, 0];\n },\n parseMarkdown: {\n match: (node) => Boolean(node.type === \"tableRow\" && node.isHeader),\n runner: (state, node, type) => {\n const align = node.align;\n const children = node.children.map((x, i) => ({\n ...x,\n align: align[i],\n isHeader: node.isHeader\n }));\n state.openNode(type);\n state.next(children);\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"table_header_row\",\n runner: (state, node) => {\n state.openNode(\"tableRow\", void 0, { isHeader: true });\n state.next(node.content);\n state.closeNode();\n }\n }\n}));\nwithMeta(tableHeaderRowSchema.node, {\n displayName: \"NodeSchema<tableHeaderRow>\",\n group: \"Table\"\n});\nwithMeta(tableHeaderRowSchema.ctx, {\n displayName: \"NodeSchemaCtx<tableHeaderRow>\",\n group: \"Table\"\n});\nconst tableRowSchema = $nodeSchema(\"table_row\", () => ({\n ...originalSchema.table_row,\n disableDropCursor: true,\n content: \"(table_cell)*\",\n parseMarkdown: {\n match: (node) => node.type === \"tableRow\",\n runner: (state, node, type) => {\n const align = node.align;\n const children = node.children.map((x, i) => ({\n ...x,\n align: align[i]\n }));\n state.openNode(type);\n state.next(children);\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"table_row\",\n runner: (state, node) => {\n if (node.content.size === 0) {\n return;\n }\n state.openNode(\"tableRow\");\n state.next(node.content);\n state.closeNode();\n }\n }\n}));\nwithMeta(tableRowSchema.node, {\n displayName: \"NodeSchema<tableRow>\",\n group: \"Table\"\n});\nwithMeta(tableRowSchema.ctx, {\n displayName: \"NodeSchemaCtx<tableRow>\",\n group: \"Table\"\n});\nconst tableCellSchema = $nodeSchema(\"table_cell\", () => ({\n ...originalSchema.table_cell,\n disableDropCursor: true,\n parseMarkdown: {\n match: (node) => node.type === \"tableCell\" && !node.isHeader,\n runner: (state, node, type) => {\n const align = node.align;\n state.openNode(type, { alignment: align }).openNode(state.schema.nodes.paragraph).next(node.children).closeNode().closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"table_cell\",\n runner: (state, node) => {\n state.openNode(\"tableCell\").next(node.content).closeNode();\n }\n }\n}));\nwithMeta(tableCellSchema.node, {\n displayName: \"NodeSchema<tableCell>\",\n group: \"Table\"\n});\nwithMeta(tableCellSchema.ctx, {\n displayName: \"NodeSchemaCtx<tableCell>\",\n group: \"Table\"\n});\nconst tableHeaderSchema = $nodeSchema(\"table_header\", () => ({\n ...originalSchema.table_header,\n disableDropCursor: true,\n parseMarkdown: {\n match: (node) => node.type === \"tableCell\" && !!node.isHeader,\n runner: (state, node, type) => {\n const align = node.align;\n state.openNode(type, { alignment: align });\n state.openNode(state.schema.nodes.paragraph);\n state.next(node.children);\n state.closeNode();\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"table_header\",\n runner: (state, node) => {\n state.openNode(\"tableCell\");\n state.next(node.content);\n state.closeNode();\n }\n }\n}));\nwithMeta(tableHeaderSchema.node, {\n displayName: \"NodeSchema<tableHeader>\",\n group: \"Table\"\n});\nwithMeta(tableHeaderSchema.ctx, {\n displayName: \"NodeSchemaCtx<tableHeader>\",\n group: \"Table\"\n});\nfunction createTable(ctx, rowsCount = 3, colsCount = 3) {\n const cells = Array(colsCount).fill(0).map(() => tableCellSchema.type(ctx).createAndFill());\n const headerCells = Array(colsCount).fill(0).map(() => tableHeaderSchema.type(ctx).createAndFill());\n const rows = Array(rowsCount).fill(0).map(\n (_, i) => i === 0 ? tableHeaderRowSchema.type(ctx).create(null, headerCells) : tableRowSchema.type(ctx).create(null, cells)\n );\n return tableSchema.type(ctx).create(null, rows);\n}\nfunction getCellsInCol(columnIndexes, selection) {\n const table = findTable(selection.$from);\n if (!table) return void 0;\n const map = TableMap.get(table.node);\n const indexes = Array.isArray(columnIndexes) ? columnIndexes : [columnIndexes];\n return indexes.filter((index) => index >= 0 && index <= map.width - 1).flatMap((index) => {\n const cells = map.cellsInRect({\n left: index,\n right: index + 1,\n top: 0,\n bottom: map.height\n });\n return cells.map((nodePos) => {\n const node = table.node.nodeAt(nodePos);\n const pos = nodePos + table.start;\n return { pos, start: pos + 1, node, depth: table.depth + 2 };\n });\n });\n}\nfunction getCellsInRow(rowIndex, selection) {\n const table = findTable(selection.$from);\n if (!table) {\n return;\n }\n const map = TableMap.get(table.node);\n const indexes = Array.isArray(rowIndex) ? rowIndex : [rowIndex];\n return indexes.filter((index) => index >= 0 && index <= map.height - 1).flatMap((index) => {\n const cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: index,\n bottom: index + 1\n });\n return cells.map((nodePos) => {\n const node = table.node.nodeAt(nodePos);\n const pos = nodePos + table.start;\n return { pos, start: pos + 1, node, depth: table.depth + 2 };\n });\n });\n}\nfunction selectLine(type) {\n return (index, pos) => (tr) => {\n pos = pos ?? tr.selection.from;\n const $pos = tr.doc.resolve(pos);\n const $node = findParentNodeClosestToPos(\n (node) => node.type.name === \"table\"\n )($pos);\n const table = $node ? {\n node: $node.node,\n from: $node.start\n } : void 0;\n const isRowSelection = type === \"row\";\n if (table) {\n const map = TableMap.get(table.node);\n if (index >= 0 && index < (isRowSelection ? map.height : map.width)) {\n const lastCell = map.positionAt(\n isRowSelection ? index : map.height - 1,\n isRowSelection ? map.width - 1 : index,\n table.node\n );\n const $lastCell = tr.doc.resolve(table.from + lastCell);\n const createCellSelection = isRowSelection ? CellSelection.rowSelection : CellSelection.colSelection;\n const firstCell = map.positionAt(\n isRowSelection ? index : 0,\n isRowSelection ? 0 : index,\n table.node\n );\n const $firstCell = tr.doc.resolve(table.from + firstCell);\n return cloneTr(\n tr.setSelection(\n createCellSelection($lastCell, $firstCell)\n )\n );\n }\n }\n return tr;\n };\n}\nconst selectRow = selectLine(\"row\");\nconst selectCol = selectLine(\"col\");\nfunction addRowWithAlignment(ctx, tr, { map, tableStart, table }, row) {\n const rowPos = Array(row).fill(0).reduce((acc, _, i) => {\n return acc + table.child(i).nodeSize;\n }, tableStart);\n const cells = Array(map.width).fill(0).map((_, col) => {\n const headerCol = table.nodeAt(map.map[col]);\n return tableCellSchema.type(ctx).createAndFill({ alignment: headerCol?.attrs.alignment });\n });\n tr.insert(rowPos, tableRowSchema.type(ctx).create(null, cells));\n return tr;\n}\nfunction getAllCellsInTable(selection) {\n const table = findTable(selection.$from);\n if (!table) return;\n const map = TableMap.get(table.node);\n const cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: 0,\n bottom: map.height\n });\n return cells.map((nodePos) => {\n const node = table.node.nodeAt(nodePos);\n const pos = nodePos + table.start;\n return { pos, start: pos + 1, node };\n });\n}\nfunction selectTable(tr) {\n const cells = getAllCellsInTable(tr.selection);\n if (cells && cells[0]) {\n const $firstCell = tr.doc.resolve(cells[0].pos);\n const last = cells[cells.length - 1];\n if (last) {\n const $lastCell = tr.doc.resolve(last.pos);\n return cloneTr(tr.setSelection(new CellSelection($lastCell, $firstCell)));\n }\n }\n return tr;\n}\nconst goToPrevTableCellCommand = $command(\n \"GoToPrevTableCell\",\n () => () => goToNextCell(-1)\n);\nwithMeta(goToPrevTableCellCommand, {\n displayName: \"Command<goToPrevTableCellCommand>\",\n group: \"Table\"\n});\nconst goToNextTableCellCommand = $command(\n \"GoToNextTableCell\",\n () => () => goToNextCell(1)\n);\nwithMeta(goToNextTableCellCommand, {\n displayName: \"Command<goToNextTableCellCommand>\",\n group: \"Table\"\n});\nconst exitTable = $command(\n \"ExitTable\",\n (ctx) => () => (state, dispatch) => {\n if (!isInTable(state)) return false;\n const { $head } = state.selection;\n const table = findParentNodeType($head, tableSchema.type(ctx));\n if (!table) return false;\n const { to } = table;\n const tr = state.tr.replaceWith(\n to,\n to,\n paragraphSchema.type(ctx).createAndFill()\n );\n tr.setSelection(Selection.near(tr.doc.resolve(to), 1)).scrollIntoView();\n dispatch?.(tr);\n return true;\n }\n);\nwithMeta(exitTable, {\n displayName: \"Command<breakTableCommand>\",\n group: \"Table\"\n});\nconst insertTableCommand = $command(\n \"InsertTable\",\n (ctx) => ({ row, col } = {}) => (state, dispatch) => {\n const { selection, tr } = state;\n const { from } = selection;\n const table = createTable(ctx, row, col);\n const _tr = tr.replaceSelectionWith(table);\n const sel = Selection.findFrom(_tr.doc.resolve(from), 1, true);\n if (sel) _tr.setSelection(sel);\n dispatch?.(_tr);\n return true;\n }\n);\nwithMeta(insertTableCommand, {\n displayName: \"Command<insertTableCommand>\",\n group: \"Table\"\n});\nconst moveRowCommand = $command(\n \"MoveRow\",\n () => ({ from, to, pos } = {}) => moveTableRow({\n from: from ?? 0,\n to: to ?? 0,\n pos\n })\n);\nwithMeta(moveRowCommand, {\n displayName: \"Command<moveRowCommand>\",\n group: \"Table\"\n});\nconst moveColCommand = $command(\n \"MoveCol\",\n () => ({ from, to, pos } = {}) => moveTableColumn({\n from: from ?? 0,\n to: to ?? 0,\n pos\n })\n);\nwithMeta(moveColCommand, {\n displayName: \"Command<moveColCommand>\",\n group: \"Table\"\n});\nconst selectRowCommand = $command(\n \"SelectRow\",\n () => (payload = { index: 0 }) => (state, dispatch) => {\n const { tr } = state;\n const result = dispatch?.(selectRow(payload.index, payload.pos)(tr));\n return Boolean(result);\n }\n);\nwithMeta(selectRowCommand, {\n displayName: \"Command<selectRowCommand>\",\n group: \"Table\"\n});\nconst selectColCommand = $command(\n \"SelectCol\",\n () => (payload = { index: 0 }) => (state, dispatch) => {\n const { tr } = state;\n const result = dispatch?.(selectCol(payload.index, payload.pos)(tr));\n return Boolean(result);\n }\n);\nwithMeta(selectColCommand, {\n displayName: \"Command<selectColCommand>\",\n group: \"Table\"\n});\nconst selectTableCommand = $command(\n \"SelectTable\",\n () => () => (state, dispatch) => {\n const { tr } = state;\n const result = dispatch?.(selectTable(tr));\n return Boolean(result);\n }\n);\nwithMeta(selectTableCommand, {\n displayName: \"Command<selectTableCommand>\",\n group: \"Table\"\n});\nconst deleteSelectedCellsCommand = $command(\n \"DeleteSelectedCells\",\n () => () => (state, dispatch) => {\n const { selection } = state;\n if (!(selection instanceof CellSelection)) return false;\n const isRow = selection.isRowSelection();\n const isCol = selection.isColSelection();\n if (isRow && isCol) return deleteTable(state, dispatch);\n if (isCol) return deleteColumn(state, dispatch);\n else return deleteRow(state, dispatch);\n }\n);\nwithMeta(deleteSelectedCellsCommand, {\n displayName: \"Command<deleteSelectedCellsCommand>\",\n group: \"Table\"\n});\nconst addColBeforeCommand = $command(\n \"AddColBefore\",\n () => () => addColumnBefore\n);\nwithMeta(addColBeforeCommand, {\n displayName: \"Command<addColBeforeCommand>\",\n group: \"Table\"\n});\nconst addColAfterCommand = $command(\n \"AddColAfter\",\n () => () => addColumnAfter\n);\nwithMeta(addColAfterCommand, {\n displayName: \"Command<addColAfterCommand>\",\n group: \"Table\"\n});\nconst addRowBeforeCommand = $command(\n \"AddRowBefore\",\n (ctx) => () => (state, dispatch) => {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addRowWithAlignment(ctx, state.tr, rect, rect.top));\n }\n return true;\n }\n);\nwithMeta(addRowBeforeCommand, {\n displayName: \"Command<addRowBeforeCommand>\",\n group: \"Table\"\n});\nconst addRowAfterCommand = $command(\n \"AddRowAfter\",\n (ctx) => () => (state, dispatch) => {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addRowWithAlignment(ctx, state.tr, rect, rect.bottom));\n }\n return true;\n }\n);\nwithMeta(addRowAfterCommand, {\n displayName: \"Command<addRowAfterCommand>\",\n group: \"Table\"\n});\nconst setAlignCommand = $command(\n \"SetAlign\",\n () => (alignment = \"left\") => setCellAttr(\"alignment\", alignment)\n);\nwithMeta(setAlignCommand, {\n displayName: \"Command<setAlignCommand>\",\n group: \"Table\"\n});\nconst insertTableInputRule = $inputRule(\n (ctx) => new InputRule(\n /^\\|(?<col>\\d+)[xX](?<row>\\d+)\\|\\s$/,\n (state, match, start, end) => {\n const $start = state.doc.resolve(start);\n if (!$start.node(-1).canReplaceWith(\n $start.index(-1),\n $start.indexAfter(-1),\n tableSchema.type(ctx)\n ))\n return null;\n const row = Math.max(Number(match.groups?.row ?? 0), 2);\n const tableNode = createTable(ctx, row, Number(match.groups?.col));\n const tr = state.tr.replaceRangeWith(start, end, tableNode);\n return tr.setSelection(TextSelection.create(tr.doc, start + 3)).scrollIntoView();\n }\n )\n);\nwithMeta(insertTableInputRule, {\n displayName: \"InputRule<insertTableInputRule>\",\n group: \"Table\"\n});\nconst tablePasteRule = $pasteRule((ctx) => ({\n run: (slice, _view, isPlainText) => {\n if (isPlainText) {\n return slice;\n }\n let fragment = slice.content;\n slice.content.forEach((node, _offset, index) => {\n if (node?.type !== tableSchema.type(ctx)) {\n return;\n }\n const rowsCount = node.childCount;\n const colsCount = node.lastChild?.childCount ?? 0;\n if (rowsCount === 0 || colsCount === 0) {\n fragment = fragment.replaceChild(\n index,\n paragraphSchema.type(ctx).create()\n );\n return;\n }\n const headerRow = node.firstChild;\n const needToFixHeaderRow = colsCount > 0 && headerRow && headerRow.childCount === 0;\n if (!needToFixHeaderRow) {\n return;\n }\n const headerCells = Array(colsCount).fill(0).map(() => tableHeaderSchema.type(ctx).createAndFill());\n const tableCells = new Slice(Fragment.from(headerCells), 0, 0);\n const newHeaderRow = headerRow.replace(0, 0, tableCells);\n const newTable = node.replace(\n 0,\n headerRow.nodeSize,\n new Slice(Fragment.from(newHeaderRow), 0, 0)\n );\n fragment = fragment.replaceChild(index, newTable);\n });\n return new Slice(Fragment.from(fragment), slice.openStart, slice.openEnd);\n }\n}));\nwithMeta(tablePasteRule, {\n displayName: \"PasteRule<table>\",\n group: \"Table\"\n});\nconst tableKeymap = $useKeymap(\"tableKeymap\", {\n NextCell: {\n priority: 100,\n shortcuts: [\"Mod-]\", \"Tab\"],\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(goToNextTableCellCommand.key);\n }\n },\n PrevCell: {\n shortcuts: [\"Mod-[\", \"Shift-Tab\"],\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(goToPrevTableCellCommand.key);\n }\n },\n ExitTable: {\n shortcuts: [\"Mod-Enter\", \"Enter\"],\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(exitTable.key);\n }\n }\n});\nwithMeta(tableKeymap.ctx, {\n displayName: \"KeymapCtx<table>\",\n group: \"Table\"\n});\nwithMeta(tableKeymap.shortcuts, {\n displayName: \"Keymap<table>\",\n group: \"Table\"\n});\nconst id$1 = \"footnote_definition\";\nconst markdownId = \"footnoteDefinition\";\nconst footnoteDefinitionSchema = $nodeSchema(\n \"footnote_definition\",\n () => ({\n group: \"block\",\n content: \"block+\",\n defining: true,\n attrs: {\n label: {\n default: \"\",\n validate: \"string\"\n }\n },\n parseDOM: [\n {\n tag: `dl[data-type=\"${id$1}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n label: dom.dataset.label\n };\n },\n contentElement: \"dd\"\n }\n ],\n toDOM: (node) => {\n const label = node.attrs.label;\n return [\n \"dl\",\n {\n // TODO: add a prosemirror plugin to sync label on change\n \"data-label\": label,\n \"data-type\": id$1\n },\n [\"dt\", label],\n [\"dd\", 0]\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === markdownId,\n runner: (state, node, type) => {\n state.openNode(type, {\n label: node.label\n }).next(node.children).closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === id$1,\n runner: (state, node) => {\n state.openNode(markdownId, void 0, {\n label: node.attrs.label,\n identifier: node.attrs.label\n }).next(node.content).closeNode();\n }\n }\n })\n);\nwithMeta(footnoteDefinitionSchema.ctx, {\n displayName: \"NodeSchemaCtx<footnodeDef>\",\n group: \"footnote\"\n});\nwithMeta(footnoteDefinitionSchema.node, {\n displayName: \"NodeSchema<footnodeDef>\",\n group: \"footnote\"\n});\nconst id = \"footnote_reference\";\nconst footnoteReferenceSchema = $nodeSchema(\n \"footnote_reference\",\n () => ({\n group: \"inline\",\n inline: true,\n atom: true,\n attrs: {\n label: {\n default: \"\",\n validate: \"string\"\n }\n },\n parseDOM: [\n {\n tag: `sup[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n label: dom.dataset.label\n };\n }\n }\n ],\n toDOM: (node) => {\n const label = node.attrs.label;\n return [\n \"sup\",\n {\n // TODO: add a prosemirror plugin to sync label on change\n \"data-label\": label,\n \"data-type\": id\n },\n label\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === \"footnoteReference\",\n runner: (state, node, type) => {\n state.addNode(type, {\n label: node.label\n });\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === id,\n runner: (state, node) => {\n state.addNode(\"footnoteReference\", void 0, void 0, {\n label: node.attrs.label,\n identifier: node.attrs.label\n });\n }\n }\n })\n);\nwithMeta(footnoteReferenceSchema.ctx, {\n displayName: \"NodeSchemaCtx<footnodeRef>\",\n group: \"footnote\"\n});\nwithMeta(footnoteReferenceSchema.node, {\n displayName: \"NodeSchema<footnodeRef>\",\n group: \"footnote\"\n});\nconst extendListItemSchemaForTask = listItemSchema.extendSchema(\n (prev) => {\n return (ctx) => {\n const baseSchema = prev(ctx);\n return {\n ...baseSchema,\n attrs: {\n ...baseSchema.attrs,\n checked: {\n default: null,\n validate: \"boolean|null\"\n }\n },\n parseDOM: [\n {\n tag: 'li[data-item-type=\"task\"]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n label: dom.dataset.label,\n listType: dom.dataset.listType,\n spread: dom.dataset.spread,\n checked: dom.dataset.checked ? dom.dataset.checked === \"true\" : null\n };\n }\n },\n ...baseSchema?.parseDOM || []\n ],\n toDOM: (node) => {\n if (baseSchema.toDOM && node.attrs.checked == null)\n return baseSchema.toDOM(node);\n return [\n \"li\",\n {\n \"data-item-type\": \"task\",\n \"data-label\": node.attrs.label,\n \"data-list-type\": node.attrs.listType,\n \"data-spread\": node.attrs.spread,\n \"data-checked\": node.attrs.checked\n },\n 0\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === \"listItem\",\n runner: (state, node, type) => {\n if (node.checked == null) {\n baseSchema.parseMarkdown.runner(state, node, type);\n return;\n }\n const label = node.label != null ? `${node.label}.` : \"•\";\n const checked = node.checked != null ? Boolean(node.checked) : null;\n const listType = node.label != null ? \"ordered\" : \"bullet\";\n const spread = node.spread != null ? `${node.spread}` : \"true\";\n state.openNode(type, { label, listType, spread, checked });\n state.next(node.children);\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"list_item\",\n runner: (state, node) => {\n if (node.attrs.checked == null) {\n baseSchema.toMarkdown.runner(state, node);\n return;\n }\n const label = node.attrs.label;\n const listType = node.attrs.listType;\n const spread = node.attrs.spread === \"true\";\n const checked = node.attrs.checked;\n state.openNode(\"listItem\", void 0, {\n label,\n listType,\n spread,\n checked\n });\n state.next(node.content);\n state.closeNode();\n }\n }\n };\n };\n }\n);\nwithMeta(extendListItemSchemaForTask.node, {\n displayName: \"NodeSchema<taskListItem>\",\n group: \"ListItem\"\n});\nwithMeta(extendListItemSchemaForTask.ctx, {\n displayName: \"NodeSchemaCtx<taskListItem>\",\n group: \"ListItem\"\n});\nconst wrapInTaskListInputRule = $inputRule(() => {\n return new InputRule(\n /^\\[(?<checked>\\s|x)\\]\\s$/,\n (state, match, start, end) => {\n const pos = state.doc.resolve(start);\n let depth = 0;\n let node = pos.node(depth);\n while (node && node.type.name !== \"list_item\") {\n depth--;\n node = pos.node(depth);\n }\n if (!node || node.attrs.checked != null) return null;\n const checked = Boolean(match.groups?.checked === \"x\");\n const finPos = pos.before(depth);\n const tr = state.tr;\n tr.deleteRange(start, end).setNodeMarkup(finPos, void 0, {\n ...node.attrs,\n checked\n });\n return tr;\n }\n );\n});\nwithMeta(wrapInTaskListInputRule, {\n displayName: \"InputRule<wrapInTaskListInputRule>\",\n group: \"ListItem\"\n});\nconst keymap = [\n strikethroughKeymap,\n tableKeymap\n].flat();\nconst inputRules = [\n insertTableInputRule,\n wrapInTaskListInputRule\n];\nconst markInputRules = [strikethroughInputRule];\nconst pasteRules = [tablePasteRule];\nconst autoInsertSpanPlugin = $prose(() => imeSpan);\nwithMeta(autoInsertSpanPlugin, {\n displayName: \"Prose<autoInsertSpanPlugin>\",\n group: \"Prose\"\n});\nconst columnResizingPlugin = $prose(() => columnResizing({}));\nwithMeta(columnResizingPlugin, {\n displayName: \"Prose<columnResizingPlugin>\",\n group: \"Prose\"\n});\nconst tableEditingPlugin = $prose(\n () => tableEditing({ allowTableNodeSelection: true })\n);\nwithMeta(tableEditingPlugin, {\n displayName: \"Prose<tableEditingPlugin>\",\n group: \"Prose\"\n});\nconst remarkGFMPlugin = $remark(\"remarkGFM\", () => remarkGFM);\nwithMeta(remarkGFMPlugin.plugin, {\n displayName: \"Remark<remarkGFMPlugin>\",\n group: \"Remark\"\n});\nwithMeta(remarkGFMPlugin.options, {\n displayName: \"RemarkConfig<remarkGFMPlugin>\",\n group: \"Remark\"\n});\nconst pluginKey = new PluginKey(\"MILKDOWN_KEEP_TABLE_ALIGN_PLUGIN\");\nfunction getChildIndex(node, parent) {\n let index = 0;\n parent.forEach((child, _offset, i) => {\n if (child === node) index = i;\n });\n return index;\n}\nconst keepTableAlignPlugin = $prose(() => {\n return new Plugin({\n key: pluginKey,\n appendTransaction: (_tr, oldState, state) => {\n let tr;\n const check = (node, pos) => {\n if (!tr) tr = state.tr;\n if (node.type.name !== \"table_cell\") return;\n const $pos = state.doc.resolve(pos);\n const tableRow = $pos.node($pos.depth);\n const table = $pos.node($pos.depth - 1);\n const tableHeaderRow = table.firstChild;\n if (!tableHeaderRow) return;\n const index = getChildIndex(node, tableRow);\n const headerCell = tableHeaderRow.maybeChild(index);\n if (!headerCell) return;\n const align = headerCell.attrs.alignment;\n const currentAlign = node.attrs.alignment;\n if (align === currentAlign) return;\n tr.setNodeMarkup(pos, void 0, { ...node.attrs, alignment: align });\n };\n if (oldState.doc !== state.doc) state.doc.descendants(check);\n return tr;\n }\n });\n});\nwithMeta(keepTableAlignPlugin, {\n displayName: \"Prose<keepTableAlignPlugin>\",\n group: \"Prose\"\n});\nconst plugins = [\n keepTableAlignPlugin,\n autoInsertSpanPlugin,\n remarkGFMPlugin,\n tableEditingPlugin\n].flat();\nconst schema = [\n extendListItemSchemaForTask,\n tableSchema,\n tableHeaderRowSchema,\n tableRowSchema,\n tableHeaderSchema,\n tableCellSchema,\n footnoteDefinitionSchema,\n footnoteReferenceSchema,\n strikethroughAttr,\n strikethroughSchema\n].flat();\nconst commands = [\n goToNextTableCellCommand,\n goToPrevTableCellCommand,\n exitTable,\n insertTableCommand,\n moveRowCommand,\n moveColCommand,\n selectRowCommand,\n selectColCommand,\n selectTableCommand,\n deleteSelectedCellsCommand,\n addRowBeforeCommand,\n addRowAfterCommand,\n addColBeforeCommand,\n addColAfterCommand,\n setAlignCommand,\n toggleStrikethroughCommand\n];\nconst gfm = [\n schema,\n inputRules,\n pasteRules,\n markInputRules,\n keymap,\n commands,\n plugins\n].flat();\nexport {\n addColAfterCommand,\n addColBeforeCommand,\n addRowAfterCommand,\n addRowBeforeCommand,\n addRowWithAlignment,\n autoInsertSpanPlugin,\n columnResizingPlugin,\n commands,\n createTable,\n deleteSelectedCellsCommand,\n exitTable,\n extendListItemSchemaForTask,\n footnoteDefinitionSchema,\n footnoteReferenceSchema,\n getAllCellsInTable,\n getCellsInCol,\n getCellsInRow,\n gfm,\n goToNextTableCellCommand,\n goToPrevTableCellCommand,\n inputRules,\n insertTableCommand,\n insertTableInputRule,\n keepTableAlignPlugin,\n keymap,\n markInputRules,\n moveColCommand,\n moveRowCommand,\n pasteRules,\n plugins,\n remarkGFMPlugin,\n schema,\n selectCol,\n selectColCommand,\n selectLine,\n selectRow,\n selectRowCommand,\n selectTable,\n selectTableCommand,\n setAlignCommand,\n strikethroughAttr,\n strikethroughInputRule,\n strikethroughKeymap,\n strikethroughSchema,\n tableCellSchema,\n tableEditingPlugin,\n tableHeaderRowSchema,\n tableHeaderSchema,\n tableKeymap,\n tablePasteRule,\n tableRowSchema,\n tableSchema,\n toggleStrikethroughCommand,\n wrapInTaskListInputRule\n};\n//# sourceMappingURL=index.js.map\n","import { EditorStatus, editorViewCtx, Editor, rootCtx, defaultValueCtx, editorViewOptionsCtx } from '@milkdown/kit/core';\nimport { clipboard } from '@milkdown/kit/plugin/clipboard';\nimport { history } from '@milkdown/kit/plugin/history';\nimport { indentConfig, indent } from '@milkdown/kit/plugin/indent';\nimport { listenerCtx, listener } from '@milkdown/kit/plugin/listener';\nimport { trailing } from '@milkdown/kit/plugin/trailing';\nimport { commonmark } from '@milkdown/kit/preset/commonmark';\nimport { gfm } from '@milkdown/kit/preset/gfm';\nimport { getMarkdown } from '@milkdown/kit/utils';\nimport { createSlice } from '@milkdown/kit/ctx';\n\nconst FeaturesCtx = createSlice([], \"FeaturesCtx\");\nconst CrepeCtx = createSlice({}, \"CrepeCtx\");\n\nvar __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _editor, _rootElement, _editable;\nclass CrepeBuilder {\n /// The constructor of the crepe builder.\n /// You can pass configs to the builder to configure the editor.\n constructor({ root, defaultValue = \"\" } = {}) {\n /// @internal\n __privateAdd(this, _editor);\n /// @internal\n __privateAdd(this, _rootElement);\n /// @internal\n __privateAdd(this, _editable, true);\n /// Add a feature to the editor.\n this.addFeature = (feature, config) => {\n feature(__privateGet(this, _editor), config);\n return this;\n };\n /// Create the editor.\n this.create = () => {\n return __privateGet(this, _editor).create();\n };\n /// Destroy the editor.\n this.destroy = () => {\n return __privateGet(this, _editor).destroy();\n };\n /// Set the readonly mode of the editor.\n this.setReadonly = (value) => {\n __privateSet(this, _editable, !value);\n __privateGet(this, _editor).action((ctx) => {\n if (__privateGet(this, _editor).status === EditorStatus.Created) {\n const view = ctx.get(editorViewCtx);\n view.setProps({\n editable: () => !value\n });\n }\n });\n return this;\n };\n /// Get the markdown content of the editor.\n this.getMarkdown = () => {\n return __privateGet(this, _editor).action(getMarkdown());\n };\n /// Register event listeners.\n this.on = (fn) => {\n if (__privateGet(this, _editor).status !== EditorStatus.Created) {\n __privateGet(this, _editor).config((ctx) => {\n const listener2 = ctx.get(listenerCtx);\n fn(listener2);\n });\n return this;\n }\n __privateGet(this, _editor).action((ctx) => {\n const listener2 = ctx.get(listenerCtx);\n fn(listener2);\n });\n return this;\n };\n var _a;\n __privateSet(this, _rootElement, (_a = typeof root === \"string\" ? document.querySelector(root) : root) != null ? _a : document.body);\n __privateSet(this, _editor, Editor.make().config((ctx) => {\n ctx.inject(CrepeCtx, this);\n ctx.inject(FeaturesCtx, []);\n }).config((ctx) => {\n ctx.set(rootCtx, __privateGet(this, _rootElement));\n ctx.set(defaultValueCtx, defaultValue);\n ctx.set(editorViewOptionsCtx, {\n editable: () => __privateGet(this, _editable)\n });\n ctx.update(indentConfig.key, (value) => ({\n ...value,\n size: 4\n }));\n }).use(commonmark).use(listener).use(history).use(indent).use(trailing).use(clipboard).use(gfm));\n }\n /// Get the milkdown editor instance.\n get editor() {\n return __privateGet(this, _editor);\n }\n /// Get the readonly state of the editor.\n get readonly() {\n return !__privateGet(this, _editable);\n }\n}\n_editor = new WeakMap();\n_rootElement = new WeakMap();\n_editable = new WeakMap();\n\nexport { CrepeBuilder };\n//# sourceMappingURL=builder.js.map\n","import { findParent, browser } from \"@milkdown/prose\";\nimport { $ctx, $prose } from \"@milkdown/utils\";\nimport { NodeSelection, PluginKey, Plugin } from \"@milkdown/prose/state\";\nimport { editorViewCtx } from \"@milkdown/core\";\nimport { throttle } from \"lodash-es\";\nimport { flip, offset, computePosition } from \"@floating-ui/dom\";\nfunction withMeta(plugin, meta) {\n Object.assign(plugin, {\n meta: {\n package: \"@milkdown/plugin-block\",\n ...meta\n }\n });\n return plugin;\n}\nconst defaultNodeFilter = (pos) => {\n const table = findParent((node) => node.type.name === \"table\")(pos);\n if (table) return false;\n return true;\n};\nconst blockConfig = $ctx(\n { filterNodes: defaultNodeFilter },\n \"blockConfig\"\n);\nwithMeta(blockConfig, {\n displayName: \"Ctx<blockConfig>\"\n});\nfunction selectRootNodeByDom(view, coords, filterNodes) {\n const root = view.dom.parentElement;\n if (!root) return null;\n try {\n const pos = view.posAtCoords({\n left: coords.x,\n top: coords.y\n })?.inside;\n if (pos == null || pos < 0) return null;\n let $pos = view.state.doc.resolve(pos);\n let node = view.state.doc.nodeAt(pos);\n let element = view.nodeDOM(pos);\n const filter = (needLookup) => {\n const checkDepth = $pos.depth >= 1 && $pos.index($pos.depth) === 0;\n const shouldLookUp = needLookup || checkDepth;\n if (!shouldLookUp) return;\n const ancestorPos = $pos.before($pos.depth);\n node = view.state.doc.nodeAt(ancestorPos);\n element = view.nodeDOM(ancestorPos);\n $pos = view.state.doc.resolve(ancestorPos);\n if (!filterNodes($pos, node)) filter(true);\n };\n const filterResult = filterNodes($pos, node);\n filter(!filterResult);\n if (!element || !node) return null;\n return { node, $pos, el: element };\n } catch {\n return null;\n }\n}\nconst brokenClipboardAPI = browser.ie && browser.ie_version < 15 || browser.ios && browser.webkit_version < 604;\nconst buffer = 20;\nclass BlockService {\n constructor() {\n this.#createSelection = () => {\n if (!this.#active) return null;\n const result = this.#active;\n const view = this.#view;\n if (view && NodeSelection.isSelectable(result.node)) {\n const nodeSelection = NodeSelection.create(\n view.state.doc,\n result.$pos.pos\n );\n view.dispatch(view.state.tr.setSelection(nodeSelection));\n view.focus();\n this.#activeSelection = nodeSelection;\n return nodeSelection;\n }\n return null;\n };\n this.#activeSelection = null;\n this.#active = null;\n this.#activeDOMRect = void 0;\n this.#dragging = false;\n this.#hide = () => {\n this.#notify?.({ type: \"hide\" });\n this.#active = null;\n };\n this.#show = (active) => {\n this.#active = active;\n this.#notify?.({ type: \"show\", active });\n };\n this.bind = (ctx, notify) => {\n this.#ctx = ctx;\n this.#notify = notify;\n };\n this.addEvent = (dom) => {\n dom.addEventListener(\"mousedown\", this.#handleMouseDown);\n dom.addEventListener(\"mouseup\", this.#handleMouseUp);\n dom.addEventListener(\"dragstart\", this.#handleDragStart);\n dom.addEventListener(\"dragend\", this.#handleDragEnd);\n };\n this.removeEvent = (dom) => {\n dom.removeEventListener(\"mousedown\", this.#handleMouseDown);\n dom.removeEventListener(\"mouseup\", this.#handleMouseUp);\n dom.removeEventListener(\"dragstart\", this.#handleDragStart);\n dom.removeEventListener(\"dragend\", this.#handleDragEnd);\n };\n this.unBind = () => {\n this.#notify = void 0;\n };\n this.#handleMouseDown = () => {\n this.#activeDOMRect = this.#active?.el.getBoundingClientRect();\n this.#createSelection();\n };\n this.#handleMouseUp = () => {\n if (!this.#dragging) {\n requestAnimationFrame(() => {\n if (!this.#activeDOMRect) return;\n this.#view?.focus();\n });\n return;\n }\n this.#dragging = false;\n this.#activeSelection = null;\n };\n this.#handleDragStart = (event) => {\n this.#dragging = true;\n const view = this.#view;\n if (!view) return;\n view.dom.dataset.dragging = \"true\";\n const selection = this.#activeSelection;\n if (event.dataTransfer && selection) {\n const slice = selection.content();\n event.dataTransfer.effectAllowed = \"copyMove\";\n const { dom, text } = view.serializeForClipboard(slice);\n event.dataTransfer.clearData();\n event.dataTransfer.setData(\n brokenClipboardAPI ? \"Text\" : \"text/html\",\n dom.innerHTML\n );\n if (!brokenClipboardAPI) event.dataTransfer.setData(\"text/plain\", text);\n const activeEl = this.#active?.el;\n if (activeEl) event.dataTransfer.setDragImage(activeEl, 0, 0);\n view.dragging = {\n slice,\n move: true\n };\n }\n };\n this.#handleDragEnd = () => {\n if (this.#view) {\n this.#dragEnd(this.#view);\n }\n };\n this.keydownCallback = (view) => {\n this.#hide();\n this.#dragging = false;\n view.dom.dataset.dragging = \"false\";\n return false;\n };\n this.#mousemoveCallback = throttle((view, event) => {\n if (!view.editable) return;\n const rect = view.dom.getBoundingClientRect();\n const x = rect.left + rect.width / 2;\n const dom = view.root.elementFromPoint(x, event.clientY);\n if (!(dom instanceof Element)) {\n this.#hide();\n return;\n }\n const filterNodes = this.#filterNodes;\n if (!filterNodes) return;\n const result = selectRootNodeByDom(\n view,\n { x, y: event.clientY },\n filterNodes\n );\n if (!result) {\n this.#hide();\n return;\n }\n this.#show(result);\n }, 200);\n this.mousemoveCallback = (view, event) => {\n if (view.composing || !view.editable) return false;\n this.#mousemoveCallback(view, event);\n return false;\n };\n this.dragoverCallback = (view, event) => {\n if (this.#dragging) {\n const root = this.#view?.dom.parentElement;\n if (!root) return false;\n const hasHorizontalScrollbar = root.scrollHeight > root.clientHeight;\n const rootRect = root.getBoundingClientRect();\n if (hasHorizontalScrollbar) {\n if (root.scrollTop > 0 && Math.abs(event.y - rootRect.y) < buffer) {\n const top = root.scrollTop > 10 ? root.scrollTop - 10 : 0;\n root.scrollTop = top;\n return false;\n }\n const totalHeight = Math.round(view.dom.getBoundingClientRect().height);\n const scrollBottom = Math.round(root.scrollTop + rootRect.height);\n if (scrollBottom < totalHeight && Math.abs(event.y - (rootRect.height + rootRect.y)) < buffer) {\n const top = root.scrollTop + 10;\n root.scrollTop = top;\n return false;\n }\n }\n }\n return false;\n };\n this.dragenterCallback = (view) => {\n if (!view.dragging) return;\n this.#dragging = true;\n view.dom.dataset.dragging = \"true\";\n };\n this.dragleaveCallback = (view, event) => {\n const x = event.clientX;\n const y = event.clientY;\n if (x < 0 || y < 0 || x > window.innerWidth || y > window.innerHeight) {\n this.#active = null;\n this.#dragEnd(view);\n }\n };\n this.dropCallback = (view) => {\n this.#dragEnd(view);\n return false;\n };\n this.dragendCallback = (view) => {\n this.#dragEnd(view);\n };\n this.#dragEnd = (view) => {\n this.#dragging = false;\n view.dom.dataset.dragging = \"false\";\n };\n }\n /// @internal\n #ctx;\n #createSelection;\n #activeSelection;\n #active;\n #activeDOMRect;\n #dragging;\n /// @internal\n get #filterNodes() {\n try {\n return this.#ctx?.get(blockConfig.key).filterNodes;\n } catch {\n return void 0;\n }\n }\n /// @internal\n get #view() {\n return this.#ctx?.get(editorViewCtx);\n }\n /// @internal\n #notify;\n #hide;\n #show;\n #handleMouseDown;\n #handleMouseUp;\n #handleDragStart;\n #handleDragEnd;\n #mousemoveCallback;\n #dragEnd;\n}\nconst blockService = $ctx(() => new BlockService(), \"blockService\");\nconst blockServiceInstance = $ctx(\n {},\n \"blockServiceInstance\"\n);\nwithMeta(blockService, {\n displayName: \"Ctx<blockService>\"\n});\nwithMeta(blockServiceInstance, {\n displayName: \"Ctx<blockServiceInstance>\"\n});\nconst blockSpec = $ctx({}, \"blockSpec\");\nwithMeta(blockSpec, {\n displayName: \"Ctx<blockSpec>\"\n});\nconst blockPlugin = $prose((ctx) => {\n const milkdownPluginBlockKey = new PluginKey(\"MILKDOWN_BLOCK\");\n const getService = ctx.get(blockService.key);\n const service = getService();\n ctx.set(blockServiceInstance.key, service);\n const spec = ctx.get(blockSpec.key);\n return new Plugin({\n key: milkdownPluginBlockKey,\n ...spec,\n props: {\n ...spec.props,\n handleDOMEvents: {\n drop: (view) => {\n return service.dropCallback(view);\n },\n pointermove: (view, event) => {\n return service.mousemoveCallback(view, event);\n },\n keydown: (view) => {\n return service.keydownCallback(view);\n },\n dragover: (view, event) => {\n return service.dragoverCallback(view, event);\n },\n dragleave: (view, event) => {\n return service.dragleaveCallback(view, event);\n },\n dragenter: (view) => {\n return service.dragenterCallback(view);\n },\n dragend: (view) => {\n return service.dragendCallback(view);\n }\n }\n }\n });\n});\nwithMeta(blockPlugin, {\n displayName: \"Prose<block>\"\n});\nclass BlockProvider {\n constructor(options) {\n this.#activeNode = null;\n this.#initialized = false;\n this.update = () => {\n requestAnimationFrame(() => {\n if (!this.#initialized) {\n try {\n this.#init();\n this.#initialized = true;\n } catch {\n }\n }\n });\n };\n this.destroy = () => {\n this.#service?.unBind();\n this.#service?.removeEvent(this.#element);\n this.#element.remove();\n };\n this.show = (active) => {\n const dom = active.el;\n const editorDom = this.#ctx.get(editorViewCtx).dom;\n const deriveContext = {\n ctx: this.#ctx,\n active,\n editorDom,\n blockDom: this.#element\n };\n const virtualEl = {\n contextElement: dom,\n getBoundingClientRect: () => {\n if (this.#getPosition) return this.#getPosition(deriveContext);\n return dom.getBoundingClientRect();\n }\n };\n const middleware = [flip()];\n if (this.#getOffset) {\n const offsetOption = this.#getOffset(deriveContext);\n const offsetExt = offset(offsetOption);\n middleware.push(offsetExt);\n }\n computePosition(virtualEl, this.#element, {\n placement: this.#getPlacement ? this.#getPlacement(deriveContext) : \"left\",\n middleware: [...middleware, ...this.#middleware],\n ...this.#floatingUIOptions\n }).then(({ x, y }) => {\n Object.assign(this.#element.style, {\n left: `${x}px`,\n top: `${y}px`\n });\n this.#element.dataset.show = \"true\";\n }).catch(console.error);\n };\n this.hide = () => {\n this.#element.dataset.show = \"false\";\n };\n this.#ctx = options.ctx;\n this.#element = options.content;\n this.#getOffset = options.getOffset;\n this.#getPosition = options.getPosition;\n this.#getPlacement = options.getPlacement;\n this.#middleware = options.middleware ?? [];\n this.#floatingUIOptions = options.floatingUIOptions ?? {};\n this.#root = options.root;\n this.hide();\n }\n /// @internal\n #element;\n /// @internal\n #ctx;\n /// @internal\n #service;\n #activeNode;\n /// @internal\n #root;\n #initialized;\n /// @internal\n #middleware;\n /// @internal\n #floatingUIOptions;\n /// @internal\n #getOffset;\n /// @internal\n #getPosition;\n /// @internal\n #getPlacement;\n /// The context of current active node.\n get active() {\n return this.#activeNode;\n }\n /// @internal\n #init() {\n const view = this.#ctx.get(editorViewCtx);\n const root = this.#root ?? view.dom.parentElement ?? document.body;\n root.appendChild(this.#element);\n const service = this.#ctx.get(blockServiceInstance.key);\n service.bind(this.#ctx, (message) => {\n if (message.type === \"hide\") {\n this.hide();\n this.#activeNode = null;\n } else if (message.type === \"show\") {\n this.show(message.active);\n this.#activeNode = message.active;\n }\n });\n this.#service = service;\n this.#service.addEvent(this.#element);\n this.#element.draggable = true;\n }\n}\nconst block = [\n blockSpec,\n blockConfig,\n blockService,\n blockServiceInstance,\n blockPlugin\n];\nblock.key = blockSpec.key;\nblock.pluginKey = blockPlugin.key;\nexport {\n BlockProvider,\n BlockService,\n block,\n blockConfig,\n blockPlugin,\n blockService,\n blockServiceInstance,\n blockSpec,\n defaultNodeFilter\n};\n//# sourceMappingURL=index.js.map\n","/**\n* @vue/shared v3.5.27\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n// @__NO_SIDE_EFFECTS__\nfunction makeMap(str) {\n const map = /* @__PURE__ */ Object.create(null);\n for (const key of str.split(\",\")) map[key] = 1;\n return (val) => val in map;\n}\n\nconst EMPTY_OBJ = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze({}) : {};\nconst EMPTY_ARR = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze([]) : [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n const i = arr.indexOf(el);\n if (i > -1) {\n arr.splice(i, 1);\n }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n // the leading comma is intentional so empty string \"\" is also included\n \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n const cache = /* @__PURE__ */ Object.create(null);\n return ((str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n });\n};\nconst camelizeRE = /-\\w/g;\nconst camelize = cacheStringFunction(\n (str) => {\n return str.replace(camelizeRE, (c) => c.slice(1).toUpperCase());\n }\n);\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction((str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction(\n (str) => {\n const s = str ? `on${capitalize(str)}` : ``;\n return s;\n }\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, ...arg) => {\n for (let i = 0; i < fns.length; i++) {\n fns[i](...arg);\n }\n};\nconst def = (obj, key, value, writable = false) => {\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: false,\n writable,\n value\n });\n};\nconst looseToNumber = (val) => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n const n = isString(val) ? Number(val) : NaN;\n return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\nfunction genCacheKey(source, options) {\n return source + JSON.stringify(\n options,\n (_, val) => typeof val === \"function\" ? val.toString() : val\n );\n}\n\nconst PatchFlags = {\n \"TEXT\": 1,\n \"1\": \"TEXT\",\n \"CLASS\": 2,\n \"2\": \"CLASS\",\n \"STYLE\": 4,\n \"4\": \"STYLE\",\n \"PROPS\": 8,\n \"8\": \"PROPS\",\n \"FULL_PROPS\": 16,\n \"16\": \"FULL_PROPS\",\n \"NEED_HYDRATION\": 32,\n \"32\": \"NEED_HYDRATION\",\n \"STABLE_FRAGMENT\": 64,\n \"64\": \"STABLE_FRAGMENT\",\n \"KEYED_FRAGMENT\": 128,\n \"128\": \"KEYED_FRAGMENT\",\n \"UNKEYED_FRAGMENT\": 256,\n \"256\": \"UNKEYED_FRAGMENT\",\n \"NEED_PATCH\": 512,\n \"512\": \"NEED_PATCH\",\n \"DYNAMIC_SLOTS\": 1024,\n \"1024\": \"DYNAMIC_SLOTS\",\n \"DEV_ROOT_FRAGMENT\": 2048,\n \"2048\": \"DEV_ROOT_FRAGMENT\",\n \"CACHED\": -1,\n \"-1\": \"CACHED\",\n \"BAIL\": -2,\n \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n [1]: `TEXT`,\n [2]: `CLASS`,\n [4]: `STYLE`,\n [8]: `PROPS`,\n [16]: `FULL_PROPS`,\n [32]: `NEED_HYDRATION`,\n [64]: `STABLE_FRAGMENT`,\n [128]: `KEYED_FRAGMENT`,\n [256]: `UNKEYED_FRAGMENT`,\n [512]: `NEED_PATCH`,\n [1024]: `DYNAMIC_SLOTS`,\n [2048]: `DEV_ROOT_FRAGMENT`,\n [-1]: `CACHED`,\n [-2]: `BAIL`\n};\n\nconst ShapeFlags = {\n \"ELEMENT\": 1,\n \"1\": \"ELEMENT\",\n \"FUNCTIONAL_COMPONENT\": 2,\n \"2\": \"FUNCTIONAL_COMPONENT\",\n \"STATEFUL_COMPONENT\": 4,\n \"4\": \"STATEFUL_COMPONENT\",\n \"TEXT_CHILDREN\": 8,\n \"8\": \"TEXT_CHILDREN\",\n \"ARRAY_CHILDREN\": 16,\n \"16\": \"ARRAY_CHILDREN\",\n \"SLOTS_CHILDREN\": 32,\n \"32\": \"SLOTS_CHILDREN\",\n \"TELEPORT\": 64,\n \"64\": \"TELEPORT\",\n \"SUSPENSE\": 128,\n \"128\": \"SUSPENSE\",\n \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n \"COMPONENT_KEPT_ALIVE\": 512,\n \"512\": \"COMPONENT_KEPT_ALIVE\",\n \"COMPONENT\": 6,\n \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n \"STABLE\": 1,\n \"1\": \"STABLE\",\n \"DYNAMIC\": 2,\n \"2\": \"DYNAMIC\",\n \"FORWARDED\": 3,\n \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n [1]: \"STABLE\",\n [2]: \"DYNAMIC\",\n [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n start = Math.max(0, Math.min(start, source.length));\n end = Math.max(0, Math.min(end, source.length));\n if (start > end) return \"\";\n let lines = source.split(/(\\r?\\n)/);\n const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n lines = lines.filter((_, idx) => idx % 2 === 0);\n let count = 0;\n const res = [];\n for (let i = 0; i < lines.length; i++) {\n count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n if (count >= start) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length) continue;\n const line = j + 1;\n res.push(\n `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`\n );\n const lineLength = lines[j].length;\n const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n if (j === i) {\n const pad = start - (count - (lineLength + newLineSeqLength));\n const length = Math.max(\n 1,\n end > count ? lineLength - pad : end - start\n );\n res.push(` | ` + \" \".repeat(pad) + \"^\".repeat(length));\n } else if (j > i) {\n if (end > count) {\n const length = Math.max(Math.min(end - count, lineLength), 1);\n res.push(` | ` + \"^\".repeat(length));\n }\n count += lineLength + newLineSeqLength;\n }\n }\n break;\n }\n }\n return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n if (isArray(value)) {\n const res = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n if (normalized) {\n for (const key in normalized) {\n res[key] = normalized[key];\n }\n }\n }\n return res;\n } else if (isString(value) || isObject(value)) {\n return value;\n }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n const ret = {};\n cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n if (item) {\n const tmp = item.split(propertyDelimiterRE);\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return ret;\n}\nfunction stringifyStyle(styles) {\n if (!styles) return \"\";\n if (isString(styles)) return styles;\n let ret = \"\";\n for (const key in styles) {\n const value = styles[key];\n if (isString(value) || typeof value === \"number\") {\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n ret += `${normalizedKey}:${value};`;\n }\n }\n return ret;\n}\nfunction normalizeClass(value) {\n let res = \"\";\n if (isString(value)) {\n res = value;\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const normalized = normalizeClass(value[i]);\n if (normalized) {\n res += normalized + \" \";\n }\n }\n } else if (isObject(value)) {\n for (const name in value) {\n if (value[name]) {\n res += name + \" \";\n }\n }\n }\n return res.trim();\n}\nfunction normalizeProps(props) {\n if (!props) return null;\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (style) {\n props.style = normalizeStyle(style);\n }\n return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n if (attrValidationCache.hasOwnProperty(name)) {\n return attrValidationCache[name];\n }\n const isUnsafe = unsafeAttrCharRE.test(name);\n if (isUnsafe) {\n console.error(`unsafe attribute name: ${name}`);\n }\n return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n acceptCharset: \"accept-charset\",\n className: \"class\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nconst isKnownMathMLAttr = /* @__PURE__ */ makeMap(\n `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`\n);\nfunction isRenderableAttrValue(value) {\n if (value == null) {\n return false;\n }\n const type = typeof value;\n return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n const str = \"\" + string;\n const match = escapeRE.exec(str);\n if (!match) {\n return str;\n }\n let html = \"\";\n let escaped;\n let index;\n let lastIndex = 0;\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escaped = \""\";\n break;\n case 38:\n escaped = \"&\";\n break;\n case 39:\n escaped = \"'\";\n break;\n case 60:\n escaped = \"<\";\n break;\n case 62:\n escaped = \">\";\n break;\n default:\n continue;\n }\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n lastIndex = index + 1;\n html += escaped;\n }\n return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n return src.replace(commentStripRE, \"\");\n}\nconst cssVarNameEscapeSymbolsRE = /[ !\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~]/g;\nfunction getEscapedCssVarName(key, doubleEscape) {\n return key.replace(\n cssVarNameEscapeSymbolsRE,\n (s) => doubleEscape ? s === '\"' ? '\\\\\\\\\\\\\"' : `\\\\\\\\${s}` : `\\\\${s}`\n );\n}\n\nfunction looseCompareArrays(a, b) {\n if (a.length !== b.length) return false;\n let equal = true;\n for (let i = 0; equal && i < a.length; i++) {\n equal = looseEqual(a[i], b[i]);\n }\n return equal;\n}\nfunction looseEqual(a, b) {\n if (a === b) return true;\n let aValidType = isDate(a);\n let bValidType = isDate(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n }\n aValidType = isSymbol(a);\n bValidType = isSymbol(b);\n if (aValidType || bValidType) {\n return a === b;\n }\n aValidType = isArray(a);\n bValidType = isArray(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n }\n aValidType = isObject(a);\n bValidType = isObject(b);\n if (aValidType || bValidType) {\n if (!aValidType || !bValidType) {\n return false;\n }\n const aKeysCount = Object.keys(a).length;\n const bKeysCount = Object.keys(b).length;\n if (aKeysCount !== bKeysCount) {\n return false;\n }\n for (const key in a) {\n const aHasKey = a.hasOwnProperty(key);\n const bHasKey = b.hasOwnProperty(key);\n if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {\n return false;\n }\n }\n }\n return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n return arr.findIndex((item) => looseEqual(item, val));\n}\n\nconst isRef = (val) => {\n return !!(val && val[\"__v_isRef\"] === true);\n};\nconst toDisplayString = (val) => {\n return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n if (isRef(val)) {\n return replacer(_key, val.value);\n } else if (isMap(val)) {\n return {\n [`Map(${val.size})`]: [...val.entries()].reduce(\n (entries, [key, val2], i) => {\n entries[stringifySymbol(key, i) + \" =>\"] = val2;\n return entries;\n },\n {}\n )\n };\n } else if (isSet(val)) {\n return {\n [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n };\n } else if (isSymbol(val)) {\n return stringifySymbol(val);\n } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n return String(val);\n }\n return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n var _a;\n return (\n // Symbol.description in es2019+ so we need to cast here to pass\n // the lib: es2016 check\n isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v\n );\n};\n\nfunction normalizeCssVarValue(value) {\n if (value == null) {\n return \"initial\";\n }\n if (typeof value === \"string\") {\n return value === \"\" ? \" \" : value;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n console.warn(\n \"[Vue warn] Invalid value used for CSS binding. Expected a string or a finite number but received:\",\n value\n );\n }\n }\n return String(value);\n}\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, PatchFlags, ShapeFlags, SlotFlags, camelize, capitalize, cssVarNameEscapeSymbolsRE, def, escapeHtml, escapeHtmlComment, extend, genCacheKey, genPropsAccessExp, generateCodeFrame, getEscapedCssVarName, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyAllowed, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownMathMLAttr, isKnownSvgAttr, isMap, isMathMLTag, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isRenderableAttrValue, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeCssVarValue, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","/**\n* @vue/reactivity v3.5.27\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { extend, hasChanged, isArray, isIntegerKey, isSymbol, isMap, hasOwn, makeMap, isObject, capitalize, toRawType, def, isFunction, EMPTY_OBJ, isSet, isPlainObject, remove, NOOP } from '@vue/shared';\n\nfunction warn(msg, ...args) {\n console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n constructor(detached = false) {\n this.detached = detached;\n /**\n * @internal\n */\n this._active = true;\n /**\n * @internal track `on` calls, allow `on` call multiple times\n */\n this._on = 0;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this._isPaused = false;\n this.parent = activeEffectScope;\n if (!detached && activeEffectScope) {\n this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(\n this\n ) - 1;\n }\n }\n get active() {\n return this._active;\n }\n pause() {\n if (this._active) {\n this._isPaused = true;\n let i, l;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].pause();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].pause();\n }\n }\n }\n /**\n * Resumes the effect scope, including all child scopes and effects.\n */\n resume() {\n if (this._active) {\n if (this._isPaused) {\n this._isPaused = false;\n let i, l;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].resume();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].resume();\n }\n }\n }\n }\n run(fn) {\n if (this._active) {\n const currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n } finally {\n activeEffectScope = currentEffectScope;\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(`cannot run an inactive effect scope.`);\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n on() {\n if (++this._on === 1) {\n this.prevScope = activeEffectScope;\n activeEffectScope = this;\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n off() {\n if (this._on > 0 && --this._on === 0) {\n activeEffectScope = this.prevScope;\n this.prevScope = void 0;\n }\n }\n stop(fromParent) {\n if (this._active) {\n this._active = false;\n let i, l;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].stop();\n }\n this.effects.length = 0;\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n this.cleanups.length = 0;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].stop(true);\n }\n this.scopes.length = 0;\n }\n if (!this.detached && this.parent && !fromParent) {\n const last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = void 0;\n }\n }\n}\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn, failSilently = false) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onScopeDispose() is called when there is no active effect scope to be associated with.`\n );\n }\n}\n\nlet activeSub;\nconst EffectFlags = {\n \"ACTIVE\": 1,\n \"1\": \"ACTIVE\",\n \"RUNNING\": 2,\n \"2\": \"RUNNING\",\n \"TRACKING\": 4,\n \"4\": \"TRACKING\",\n \"NOTIFIED\": 8,\n \"8\": \"NOTIFIED\",\n \"DIRTY\": 16,\n \"16\": \"DIRTY\",\n \"ALLOW_RECURSE\": 32,\n \"32\": \"ALLOW_RECURSE\",\n \"PAUSED\": 64,\n \"64\": \"PAUSED\",\n \"EVALUATED\": 128,\n \"128\": \"EVALUATED\"\n};\nconst pausedQueueEffects = /* @__PURE__ */ new WeakSet();\nclass ReactiveEffect {\n constructor(fn) {\n this.fn = fn;\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 1 | 4;\n /**\n * @internal\n */\n this.next = void 0;\n /**\n * @internal\n */\n this.cleanup = void 0;\n this.scheduler = void 0;\n if (activeEffectScope && activeEffectScope.active) {\n activeEffectScope.effects.push(this);\n }\n }\n pause() {\n this.flags |= 64;\n }\n resume() {\n if (this.flags & 64) {\n this.flags &= -65;\n if (pausedQueueEffects.has(this)) {\n pausedQueueEffects.delete(this);\n this.trigger();\n }\n }\n }\n /**\n * @internal\n */\n notify() {\n if (this.flags & 2 && !(this.flags & 32)) {\n return;\n }\n if (!(this.flags & 8)) {\n batch(this);\n }\n }\n run() {\n if (!(this.flags & 1)) {\n return this.fn();\n }\n this.flags |= 2;\n cleanupEffect(this);\n prepareDeps(this);\n const prevEffect = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = this;\n shouldTrack = true;\n try {\n return this.fn();\n } finally {\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub !== this) {\n warn(\n \"Active effect was not restored correctly - this is likely a Vue internal bug.\"\n );\n }\n cleanupDeps(this);\n activeSub = prevEffect;\n shouldTrack = prevShouldTrack;\n this.flags &= -3;\n }\n }\n stop() {\n if (this.flags & 1) {\n for (let link = this.deps; link; link = link.nextDep) {\n removeSub(link);\n }\n this.deps = this.depsTail = void 0;\n cleanupEffect(this);\n this.onStop && this.onStop();\n this.flags &= -2;\n }\n }\n trigger() {\n if (this.flags & 64) {\n pausedQueueEffects.add(this);\n } else if (this.scheduler) {\n this.scheduler();\n } else {\n this.runIfDirty();\n }\n }\n /**\n * @internal\n */\n runIfDirty() {\n if (isDirty(this)) {\n this.run();\n }\n }\n get dirty() {\n return isDirty(this);\n }\n}\nlet batchDepth = 0;\nlet batchedSub;\nlet batchedComputed;\nfunction batch(sub, isComputed = false) {\n sub.flags |= 8;\n if (isComputed) {\n sub.next = batchedComputed;\n batchedComputed = sub;\n return;\n }\n sub.next = batchedSub;\n batchedSub = sub;\n}\nfunction startBatch() {\n batchDepth++;\n}\nfunction endBatch() {\n if (--batchDepth > 0) {\n return;\n }\n if (batchedComputed) {\n let e = batchedComputed;\n batchedComputed = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= -9;\n e = next;\n }\n }\n let error;\n while (batchedSub) {\n let e = batchedSub;\n batchedSub = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= -9;\n if (e.flags & 1) {\n try {\n ;\n e.trigger();\n } catch (err) {\n if (!error) error = err;\n }\n }\n e = next;\n }\n }\n if (error) throw error;\n}\nfunction prepareDeps(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n link.version = -1;\n link.prevActiveLink = link.dep.activeLink;\n link.dep.activeLink = link;\n }\n}\nfunction cleanupDeps(sub) {\n let head;\n let tail = sub.depsTail;\n let link = tail;\n while (link) {\n const prev = link.prevDep;\n if (link.version === -1) {\n if (link === tail) tail = prev;\n removeSub(link);\n removeDep(link);\n } else {\n head = link;\n }\n link.dep.activeLink = link.prevActiveLink;\n link.prevActiveLink = void 0;\n link = prev;\n }\n sub.deps = head;\n sub.depsTail = tail;\n}\nfunction isDirty(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) {\n return true;\n }\n }\n if (sub._dirty) {\n return true;\n }\n return false;\n}\nfunction refreshComputed(computed) {\n if (computed.flags & 4 && !(computed.flags & 16)) {\n return;\n }\n computed.flags &= -17;\n if (computed.globalVersion === globalVersion) {\n return;\n }\n computed.globalVersion = globalVersion;\n if (!computed.isSSR && computed.flags & 128 && (!computed.deps && !computed._dirty || !isDirty(computed))) {\n return;\n }\n computed.flags |= 2;\n const dep = computed.dep;\n const prevSub = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = computed;\n shouldTrack = true;\n try {\n prepareDeps(computed);\n const value = computed.fn(computed._value);\n if (dep.version === 0 || hasChanged(value, computed._value)) {\n computed.flags |= 128;\n computed._value = value;\n dep.version++;\n }\n } catch (err) {\n dep.version++;\n throw err;\n } finally {\n activeSub = prevSub;\n shouldTrack = prevShouldTrack;\n cleanupDeps(computed);\n computed.flags &= -3;\n }\n}\nfunction removeSub(link, soft = false) {\n const { dep, prevSub, nextSub } = link;\n if (prevSub) {\n prevSub.nextSub = nextSub;\n link.prevSub = void 0;\n }\n if (nextSub) {\n nextSub.prevSub = prevSub;\n link.nextSub = void 0;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && dep.subsHead === link) {\n dep.subsHead = nextSub;\n }\n if (dep.subs === link) {\n dep.subs = prevSub;\n if (!prevSub && dep.computed) {\n dep.computed.flags &= -5;\n for (let l = dep.computed.deps; l; l = l.nextDep) {\n removeSub(l, true);\n }\n }\n }\n if (!soft && !--dep.sc && dep.map) {\n dep.map.delete(dep.key);\n }\n}\nfunction removeDep(link) {\n const { prevDep, nextDep } = link;\n if (prevDep) {\n prevDep.nextDep = nextDep;\n link.prevDep = void 0;\n }\n if (nextDep) {\n nextDep.prevDep = prevDep;\n link.nextDep = void 0;\n }\n}\nfunction effect(fn, options) {\n if (fn.effect instanceof ReactiveEffect) {\n fn = fn.effect.fn;\n }\n const e = new ReactiveEffect(fn);\n if (options) {\n extend(e, options);\n }\n try {\n e.run();\n } catch (err) {\n e.stop();\n throw err;\n }\n const runner = e.run.bind(e);\n runner.effect = e;\n return runner;\n}\nfunction stop(runner) {\n runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = false;\n}\nfunction enableTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = true;\n}\nfunction resetTracking() {\n const last = trackStack.pop();\n shouldTrack = last === void 0 ? true : last;\n}\nfunction onEffectCleanup(fn, failSilently = false) {\n if (activeSub instanceof ReactiveEffect) {\n activeSub.cleanup = fn;\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onEffectCleanup() was called when there was no active effect to associate with.`\n );\n }\n}\nfunction cleanupEffect(e) {\n const { cleanup } = e;\n e.cleanup = void 0;\n if (cleanup) {\n const prevSub = activeSub;\n activeSub = void 0;\n try {\n cleanup();\n } finally {\n activeSub = prevSub;\n }\n }\n}\n\nlet globalVersion = 0;\nclass Link {\n constructor(sub, dep) {\n this.sub = sub;\n this.dep = dep;\n this.version = dep.version;\n this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0;\n }\n}\nclass Dep {\n // TODO isolatedDeclarations \"__v_skip\"\n constructor(computed) {\n this.computed = computed;\n this.version = 0;\n /**\n * Link between this dep and the current active effect\n */\n this.activeLink = void 0;\n /**\n * Doubly linked list representing the subscribing effects (tail)\n */\n this.subs = void 0;\n /**\n * For object property deps cleanup\n */\n this.map = void 0;\n this.key = void 0;\n /**\n * Subscriber counter\n */\n this.sc = 0;\n /**\n * @internal\n */\n this.__v_skip = true;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.subsHead = void 0;\n }\n }\n track(debugInfo) {\n if (!activeSub || !shouldTrack || activeSub === this.computed) {\n return;\n }\n let link = this.activeLink;\n if (link === void 0 || link.sub !== activeSub) {\n link = this.activeLink = new Link(activeSub, this);\n if (!activeSub.deps) {\n activeSub.deps = activeSub.depsTail = link;\n } else {\n link.prevDep = activeSub.depsTail;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n }\n addSub(link);\n } else if (link.version === -1) {\n link.version = this.version;\n if (link.nextDep) {\n const next = link.nextDep;\n next.prevDep = link.prevDep;\n if (link.prevDep) {\n link.prevDep.nextDep = next;\n }\n link.prevDep = activeSub.depsTail;\n link.nextDep = void 0;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n if (activeSub.deps === link) {\n activeSub.deps = next;\n }\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub.onTrack) {\n activeSub.onTrack(\n extend(\n {\n effect: activeSub\n },\n debugInfo\n )\n );\n }\n return link;\n }\n trigger(debugInfo) {\n this.version++;\n globalVersion++;\n this.notify(debugInfo);\n }\n notify(debugInfo) {\n startBatch();\n try {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n for (let head = this.subsHead; head; head = head.nextSub) {\n if (head.sub.onTrigger && !(head.sub.flags & 8)) {\n head.sub.onTrigger(\n extend(\n {\n effect: head.sub\n },\n debugInfo\n )\n );\n }\n }\n }\n for (let link = this.subs; link; link = link.prevSub) {\n if (link.sub.notify()) {\n ;\n link.sub.dep.notify();\n }\n }\n } finally {\n endBatch();\n }\n }\n}\nfunction addSub(link) {\n link.dep.sc++;\n if (link.sub.flags & 4) {\n const computed = link.dep.computed;\n if (computed && !link.dep.subs) {\n computed.flags |= 4 | 16;\n for (let l = computed.deps; l; l = l.nextDep) {\n addSub(l);\n }\n }\n const currentTail = link.dep.subs;\n if (currentTail !== link) {\n link.prevSub = currentTail;\n if (currentTail) currentTail.nextSub = link;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && link.dep.subsHead === void 0) {\n link.dep.subsHead = link;\n }\n link.dep.subs = link;\n }\n}\nconst targetMap = /* @__PURE__ */ new WeakMap();\nconst ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Object iterate\" : \"\"\n);\nconst MAP_KEY_ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Map keys iterate\" : \"\"\n);\nconst ARRAY_ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Array iterate\" : \"\"\n);\nfunction track(target, type, key) {\n if (shouldTrack && activeSub) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n }\n let dep = depsMap.get(key);\n if (!dep) {\n depsMap.set(key, dep = new Dep());\n dep.map = depsMap;\n dep.key = key;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.track({\n target,\n type,\n key\n });\n } else {\n dep.track();\n }\n }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n globalVersion++;\n return;\n }\n const run = (dep) => {\n if (dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.trigger({\n target,\n type,\n key,\n newValue,\n oldValue,\n oldTarget\n });\n } else {\n dep.trigger();\n }\n }\n };\n startBatch();\n if (type === \"clear\") {\n depsMap.forEach(run);\n } else {\n const targetIsArray = isArray(target);\n const isArrayIndex = targetIsArray && isIntegerKey(key);\n if (targetIsArray && key === \"length\") {\n const newLength = Number(newValue);\n depsMap.forEach((dep, key2) => {\n if (key2 === \"length\" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) {\n run(dep);\n }\n });\n } else {\n if (key !== void 0 || depsMap.has(void 0)) {\n run(depsMap.get(key));\n }\n if (isArrayIndex) {\n run(depsMap.get(ARRAY_ITERATE_KEY));\n }\n switch (type) {\n case \"add\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n } else if (isArrayIndex) {\n run(depsMap.get(\"length\"));\n }\n break;\n case \"delete\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n break;\n case \"set\":\n if (isMap(target)) {\n run(depsMap.get(ITERATE_KEY));\n }\n break;\n }\n }\n }\n endBatch();\n}\nfunction getDepFromReactive(object, key) {\n const depMap = targetMap.get(object);\n return depMap && depMap.get(key);\n}\n\nfunction reactiveReadArray(array) {\n const raw = toRaw(array);\n if (raw === array) return raw;\n track(raw, \"iterate\", ARRAY_ITERATE_KEY);\n return isShallow(array) ? raw : raw.map(toReactive);\n}\nfunction shallowReadArray(arr) {\n track(arr = toRaw(arr), \"iterate\", ARRAY_ITERATE_KEY);\n return arr;\n}\nfunction toWrapped(target, item) {\n if (isReadonly(target)) {\n return isReactive(target) ? toReadonly(toReactive(item)) : toReadonly(item);\n }\n return toReactive(item);\n}\nconst arrayInstrumentations = {\n __proto__: null,\n [Symbol.iterator]() {\n return iterator(this, Symbol.iterator, (item) => toWrapped(this, item));\n },\n concat(...args) {\n return reactiveReadArray(this).concat(\n ...args.map((x) => isArray(x) ? reactiveReadArray(x) : x)\n );\n },\n entries() {\n return iterator(this, \"entries\", (value) => {\n value[1] = toWrapped(this, value[1]);\n return value;\n });\n },\n every(fn, thisArg) {\n return apply(this, \"every\", fn, thisArg, void 0, arguments);\n },\n filter(fn, thisArg) {\n return apply(\n this,\n \"filter\",\n fn,\n thisArg,\n (v) => v.map((item) => toWrapped(this, item)),\n arguments\n );\n },\n find(fn, thisArg) {\n return apply(\n this,\n \"find\",\n fn,\n thisArg,\n (item) => toWrapped(this, item),\n arguments\n );\n },\n findIndex(fn, thisArg) {\n return apply(this, \"findIndex\", fn, thisArg, void 0, arguments);\n },\n findLast(fn, thisArg) {\n return apply(\n this,\n \"findLast\",\n fn,\n thisArg,\n (item) => toWrapped(this, item),\n arguments\n );\n },\n findLastIndex(fn, thisArg) {\n return apply(this, \"findLastIndex\", fn, thisArg, void 0, arguments);\n },\n // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement\n forEach(fn, thisArg) {\n return apply(this, \"forEach\", fn, thisArg, void 0, arguments);\n },\n includes(...args) {\n return searchProxy(this, \"includes\", args);\n },\n indexOf(...args) {\n return searchProxy(this, \"indexOf\", args);\n },\n join(separator) {\n return reactiveReadArray(this).join(separator);\n },\n // keys() iterator only reads `length`, no optimization required\n lastIndexOf(...args) {\n return searchProxy(this, \"lastIndexOf\", args);\n },\n map(fn, thisArg) {\n return apply(this, \"map\", fn, thisArg, void 0, arguments);\n },\n pop() {\n return noTracking(this, \"pop\");\n },\n push(...args) {\n return noTracking(this, \"push\", args);\n },\n reduce(fn, ...args) {\n return reduce(this, \"reduce\", fn, args);\n },\n reduceRight(fn, ...args) {\n return reduce(this, \"reduceRight\", fn, args);\n },\n shift() {\n return noTracking(this, \"shift\");\n },\n // slice could use ARRAY_ITERATE but also seems to beg for range tracking\n some(fn, thisArg) {\n return apply(this, \"some\", fn, thisArg, void 0, arguments);\n },\n splice(...args) {\n return noTracking(this, \"splice\", args);\n },\n toReversed() {\n return reactiveReadArray(this).toReversed();\n },\n toSorted(comparer) {\n return reactiveReadArray(this).toSorted(comparer);\n },\n toSpliced(...args) {\n return reactiveReadArray(this).toSpliced(...args);\n },\n unshift(...args) {\n return noTracking(this, \"unshift\", args);\n },\n values() {\n return iterator(this, \"values\", (item) => toWrapped(this, item));\n }\n};\nfunction iterator(self, method, wrapValue) {\n const arr = shallowReadArray(self);\n const iter = arr[method]();\n if (arr !== self && !isShallow(self)) {\n iter._next = iter.next;\n iter.next = () => {\n const result = iter._next();\n if (!result.done) {\n result.value = wrapValue(result.value);\n }\n return result;\n };\n }\n return iter;\n}\nconst arrayProto = Array.prototype;\nfunction apply(self, method, fn, thisArg, wrappedRetFn, args) {\n const arr = shallowReadArray(self);\n const needsWrap = arr !== self && !isShallow(self);\n const methodFn = arr[method];\n if (methodFn !== arrayProto[method]) {\n const result2 = methodFn.apply(self, args);\n return needsWrap ? toReactive(result2) : result2;\n }\n let wrappedFn = fn;\n if (arr !== self) {\n if (needsWrap) {\n wrappedFn = function(item, index) {\n return fn.call(this, toWrapped(self, item), index, self);\n };\n } else if (fn.length > 2) {\n wrappedFn = function(item, index) {\n return fn.call(this, item, index, self);\n };\n }\n }\n const result = methodFn.call(arr, wrappedFn, thisArg);\n return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result;\n}\nfunction reduce(self, method, fn, args) {\n const arr = shallowReadArray(self);\n let wrappedFn = fn;\n if (arr !== self) {\n if (!isShallow(self)) {\n wrappedFn = function(acc, item, index) {\n return fn.call(this, acc, toWrapped(self, item), index, self);\n };\n } else if (fn.length > 3) {\n wrappedFn = function(acc, item, index) {\n return fn.call(this, acc, item, index, self);\n };\n }\n }\n return arr[method](wrappedFn, ...args);\n}\nfunction searchProxy(self, method, args) {\n const arr = toRaw(self);\n track(arr, \"iterate\", ARRAY_ITERATE_KEY);\n const res = arr[method](...args);\n if ((res === -1 || res === false) && isProxy(args[0])) {\n args[0] = toRaw(args[0]);\n return arr[method](...args);\n }\n return res;\n}\nfunction noTracking(self, method, args = []) {\n pauseTracking();\n startBatch();\n const res = toRaw(self)[method].apply(self, args);\n endBatch();\n resetTracking();\n return res;\n}\n\nconst isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== \"arguments\" && key !== \"caller\").map((key) => Symbol[key]).filter(isSymbol)\n);\nfunction hasOwnProperty(key) {\n if (!isSymbol(key)) key = String(key);\n const obj = toRaw(this);\n track(obj, \"has\", key);\n return obj.hasOwnProperty(key);\n}\nclass BaseReactiveHandler {\n constructor(_isReadonly = false, _isShallow = false) {\n this._isReadonly = _isReadonly;\n this._isShallow = _isShallow;\n }\n get(target, key, receiver) {\n if (key === \"__v_skip\") return target[\"__v_skip\"];\n const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_isShallow\") {\n return isShallow2;\n } else if (key === \"__v_raw\") {\n if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype\n // this means the receiver is a user proxy of the reactive proxy\n Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {\n return target;\n }\n return;\n }\n const targetIsArray = isArray(target);\n if (!isReadonly2) {\n let fn;\n if (targetIsArray && (fn = arrayInstrumentations[key])) {\n return fn;\n }\n if (key === \"hasOwnProperty\") {\n return hasOwnProperty;\n }\n }\n const res = Reflect.get(\n target,\n key,\n // if this is a proxy wrapping a ref, return methods using the raw ref\n // as receiver so that we don't have to call `toRaw` on the ref in all\n // its class methods\n isRef(target) ? target : receiver\n );\n if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n return res;\n }\n if (!isReadonly2) {\n track(target, \"get\", key);\n }\n if (isShallow2) {\n return res;\n }\n if (isRef(res)) {\n const value = targetIsArray && isIntegerKey(key) ? res : res.value;\n return isReadonly2 && isObject(value) ? readonly(value) : value;\n }\n if (isObject(res)) {\n return isReadonly2 ? readonly(res) : reactive(res);\n }\n return res;\n }\n}\nclass MutableReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(false, isShallow2);\n }\n set(target, key, value, receiver) {\n let oldValue = target[key];\n const isArrayWithIntegerKey = isArray(target) && isIntegerKey(key);\n if (!this._isShallow) {\n const isOldValueReadonly = isReadonly(oldValue);\n if (!isShallow(value) && !isReadonly(value)) {\n oldValue = toRaw(oldValue);\n value = toRaw(value);\n }\n if (!isArrayWithIntegerKey && isRef(oldValue) && !isRef(value)) {\n if (isOldValueReadonly) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target[key]\n );\n }\n return true;\n } else {\n oldValue.value = value;\n return true;\n }\n }\n }\n const hadKey = isArrayWithIntegerKey ? Number(key) < target.length : hasOwn(target, key);\n const result = Reflect.set(\n target,\n key,\n value,\n isRef(target) ? target : receiver\n );\n if (target === toRaw(receiver)) {\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n }\n return result;\n }\n deleteProperty(target, key) {\n const hadKey = hasOwn(target, key);\n const oldValue = target[key];\n const result = Reflect.deleteProperty(target, key);\n if (result && hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n }\n has(target, key) {\n const result = Reflect.has(target, key);\n if (!isSymbol(key) || !builtInSymbols.has(key)) {\n track(target, \"has\", key);\n }\n return result;\n }\n ownKeys(target) {\n track(\n target,\n \"iterate\",\n isArray(target) ? \"length\" : ITERATE_KEY\n );\n return Reflect.ownKeys(target);\n }\n}\nclass ReadonlyReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(true, isShallow2);\n }\n set(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n deleteProperty(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Delete operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n}\nconst mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();\nconst readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();\nconst shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true);\nconst shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction createIterableMethod(method, isReadonly2, isShallow2) {\n return function(...args) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const targetIsMap = isMap(rawTarget);\n const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n const isKeyOnly = method === \"keys\" && targetIsMap;\n const innerIterator = target[method](...args);\n const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;\n !isReadonly2 && track(\n rawTarget,\n \"iterate\",\n isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY\n );\n return extend(\n // inheriting all iterator properties\n Object.create(innerIterator),\n {\n // iterator protocol\n next() {\n const { value, done } = innerIterator.next();\n return done ? { value, done } : {\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n done\n };\n }\n }\n );\n };\n}\nfunction createReadonlyMethod(type) {\n return function(...args) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n warn(\n `${capitalize(type)} operation ${key}failed: target is readonly.`,\n toRaw(this)\n );\n }\n return type === \"delete\" ? false : type === \"clear\" ? void 0 : this;\n };\n}\nfunction createInstrumentations(readonly, shallow) {\n const instrumentations = {\n get(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"get\", key);\n }\n track(rawTarget, \"get\", rawKey);\n }\n const { has } = getProto(rawTarget);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n if (has.call(rawTarget, key)) {\n return wrap(target.get(key));\n } else if (has.call(rawTarget, rawKey)) {\n return wrap(target.get(rawKey));\n } else if (target !== rawTarget) {\n target.get(key);\n }\n },\n get size() {\n const target = this[\"__v_raw\"];\n !readonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n return target.size;\n },\n has(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"has\", key);\n }\n track(rawTarget, \"has\", rawKey);\n }\n return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n },\n forEach(callback, thisArg) {\n const observed = this;\n const target = observed[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n !readonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n return target.forEach((value, key) => {\n return callback.call(thisArg, wrap(value), wrap(key), observed);\n });\n }\n };\n extend(\n instrumentations,\n readonly ? {\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\")\n } : {\n add(value) {\n if (!shallow && !isShallow(value) && !isReadonly(value)) {\n value = toRaw(value);\n }\n const target = toRaw(this);\n const proto = getProto(target);\n const hadKey = proto.has.call(target, value);\n if (!hadKey) {\n target.add(value);\n trigger(target, \"add\", value, value);\n }\n return this;\n },\n set(key, value) {\n if (!shallow && !isShallow(value) && !isReadonly(value)) {\n value = toRaw(value);\n }\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get.call(target, key);\n target.set(key, value);\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n return this;\n },\n delete(key) {\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get ? get.call(target, key) : void 0;\n const result = target.delete(key);\n if (hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n },\n clear() {\n const target = toRaw(this);\n const hadItems = target.size !== 0;\n const oldTarget = !!(process.env.NODE_ENV !== \"production\") ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n const result = target.clear();\n if (hadItems) {\n trigger(\n target,\n \"clear\",\n void 0,\n void 0,\n oldTarget\n );\n }\n return result;\n }\n }\n );\n const iteratorMethods = [\n \"keys\",\n \"values\",\n \"entries\",\n Symbol.iterator\n ];\n iteratorMethods.forEach((method) => {\n instrumentations[method] = createIterableMethod(method, readonly, shallow);\n });\n return instrumentations;\n}\nfunction createInstrumentationGetter(isReadonly2, shallow) {\n const instrumentations = createInstrumentations(isReadonly2, shallow);\n return (target, key, receiver) => {\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_raw\") {\n return target;\n }\n return Reflect.get(\n hasOwn(instrumentations, key) && key in target ? instrumentations : target,\n key,\n receiver\n );\n };\n}\nconst mutableCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has, key) {\n const rawKey = toRaw(key);\n if (rawKey !== key && has.call(target, rawKey)) {\n const type = toRawType(target);\n warn(\n `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`\n );\n }\n}\n\nconst reactiveMap = /* @__PURE__ */ new WeakMap();\nconst shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nconst readonlyMap = /* @__PURE__ */ new WeakMap();\nconst shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n switch (rawType) {\n case \"Object\":\n case \"Array\":\n return 1 /* COMMON */;\n case \"Map\":\n case \"Set\":\n case \"WeakMap\":\n case \"WeakSet\":\n return 2 /* COLLECTION */;\n default:\n return 0 /* INVALID */;\n }\n}\nfunction getTargetType(value) {\n return value[\"__v_skip\"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(toRawType(value));\n}\n// @__NO_SIDE_EFFECTS__\nfunction reactive(target) {\n if (/* @__PURE__ */ isReadonly(target)) {\n return target;\n }\n return createReactiveObject(\n target,\n false,\n mutableHandlers,\n mutableCollectionHandlers,\n reactiveMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowReactive(target) {\n return createReactiveObject(\n target,\n false,\n shallowReactiveHandlers,\n shallowCollectionHandlers,\n shallowReactiveMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction readonly(target) {\n return createReactiveObject(\n target,\n true,\n readonlyHandlers,\n readonlyCollectionHandlers,\n readonlyMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowReadonly(target) {\n return createReactiveObject(\n target,\n true,\n shallowReadonlyHandlers,\n shallowReadonlyCollectionHandlers,\n shallowReadonlyMap\n );\n}\nfunction createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n if (!isObject(target)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `value cannot be made ${isReadonly2 ? \"readonly\" : \"reactive\"}: ${String(\n target\n )}`\n );\n }\n return target;\n }\n if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n return target;\n }\n const targetType = getTargetType(target);\n if (targetType === 0 /* INVALID */) {\n return target;\n }\n const existingProxy = proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n const proxy = new Proxy(\n target,\n targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers\n );\n proxyMap.set(target, proxy);\n return proxy;\n}\n// @__NO_SIDE_EFFECTS__\nfunction isReactive(value) {\n if (/* @__PURE__ */ isReadonly(value)) {\n return /* @__PURE__ */ isReactive(value[\"__v_raw\"]);\n }\n return !!(value && value[\"__v_isReactive\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isReadonly(value) {\n return !!(value && value[\"__v_isReadonly\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isShallow(value) {\n return !!(value && value[\"__v_isShallow\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isProxy(value) {\n return value ? !!value[\"__v_raw\"] : false;\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRaw(observed) {\n const raw = observed && observed[\"__v_raw\"];\n return raw ? /* @__PURE__ */ toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n if (!hasOwn(value, \"__v_skip\") && Object.isExtensible(value)) {\n def(value, \"__v_skip\", true);\n }\n return value;\n}\nconst toReactive = (value) => isObject(value) ? /* @__PURE__ */ reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? /* @__PURE__ */ readonly(value) : value;\n\n// @__NO_SIDE_EFFECTS__\nfunction isRef(r) {\n return r ? r[\"__v_isRef\"] === true : false;\n}\n// @__NO_SIDE_EFFECTS__\nfunction ref(value) {\n return createRef(value, false);\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (/* @__PURE__ */ isRef(rawValue)) {\n return rawValue;\n }\n return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n constructor(value, isShallow2) {\n this.dep = new Dep();\n this[\"__v_isRef\"] = true;\n this[\"__v_isShallow\"] = false;\n this._rawValue = isShallow2 ? value : toRaw(value);\n this._value = isShallow2 ? value : toReactive(value);\n this[\"__v_isShallow\"] = isShallow2;\n }\n get value() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n });\n } else {\n this.dep.track();\n }\n return this._value;\n }\n set value(newValue) {\n const oldValue = this._rawValue;\n const useDirectValue = this[\"__v_isShallow\"] || isShallow(newValue) || isReadonly(newValue);\n newValue = useDirectValue ? newValue : toRaw(newValue);\n if (hasChanged(newValue, oldValue)) {\n this._rawValue = newValue;\n this._value = useDirectValue ? newValue : toReactive(newValue);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.trigger({\n target: this,\n type: \"set\",\n key: \"value\",\n newValue,\n oldValue\n });\n } else {\n this.dep.trigger();\n }\n }\n }\n}\nfunction triggerRef(ref2) {\n if (ref2.dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n ref2.dep.trigger({\n target: ref2,\n type: \"set\",\n key: \"value\",\n newValue: ref2._value\n });\n } else {\n ref2.dep.trigger();\n }\n }\n}\nfunction unref(ref2) {\n return /* @__PURE__ */ isRef(ref2) ? ref2.value : ref2;\n}\nfunction toValue(source) {\n return isFunction(source) ? source() : unref(source);\n}\nconst shallowUnwrapHandlers = {\n get: (target, key, receiver) => key === \"__v_raw\" ? target : unref(Reflect.get(target, key, receiver)),\n set: (target, key, value, receiver) => {\n const oldValue = target[key];\n if (/* @__PURE__ */ isRef(oldValue) && !/* @__PURE__ */ isRef(value)) {\n oldValue.value = value;\n return true;\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n }\n};\nfunction proxyRefs(objectWithRefs) {\n return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n constructor(factory) {\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n const dep = this.dep = new Dep();\n const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep));\n this._get = get;\n this._set = set;\n }\n get value() {\n return this._value = this._get();\n }\n set value(newVal) {\n this._set(newVal);\n }\n}\nfunction customRef(factory) {\n return new CustomRefImpl(factory);\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRefs(object) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isProxy(object)) {\n warn(`toRefs() expects a reactive object but received a plain one.`);\n }\n const ret = isArray(object) ? new Array(object.length) : {};\n for (const key in object) {\n ret[key] = propertyToRef(object, key);\n }\n return ret;\n}\nclass ObjectRefImpl {\n constructor(_object, _key, _defaultValue) {\n this._object = _object;\n this._key = _key;\n this._defaultValue = _defaultValue;\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n this._raw = toRaw(_object);\n let shallow = true;\n let obj = _object;\n if (!isArray(_object) || !isIntegerKey(String(_key))) {\n do {\n shallow = !isProxy(obj) || isShallow(obj);\n } while (shallow && (obj = obj[\"__v_raw\"]));\n }\n this._shallow = shallow;\n }\n get value() {\n let val = this._object[this._key];\n if (this._shallow) {\n val = unref(val);\n }\n return this._value = val === void 0 ? this._defaultValue : val;\n }\n set value(newVal) {\n if (this._shallow && /* @__PURE__ */ isRef(this._raw[this._key])) {\n const nestedRef = this._object[this._key];\n if (/* @__PURE__ */ isRef(nestedRef)) {\n nestedRef.value = newVal;\n return;\n }\n }\n this._object[this._key] = newVal;\n }\n get dep() {\n return getDepFromReactive(this._raw, this._key);\n }\n}\nclass GetterRefImpl {\n constructor(_getter) {\n this._getter = _getter;\n this[\"__v_isRef\"] = true;\n this[\"__v_isReadonly\"] = true;\n this._value = void 0;\n }\n get value() {\n return this._value = this._getter();\n }\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRef(source, key, defaultValue) {\n if (/* @__PURE__ */ isRef(source)) {\n return source;\n } else if (isFunction(source)) {\n return new GetterRefImpl(source);\n } else if (isObject(source) && arguments.length > 1) {\n return propertyToRef(source, key, defaultValue);\n } else {\n return /* @__PURE__ */ ref(source);\n }\n}\nfunction propertyToRef(source, key, defaultValue) {\n return new ObjectRefImpl(source, key, defaultValue);\n}\n\nclass ComputedRefImpl {\n constructor(fn, setter, isSSR) {\n this.fn = fn;\n this.setter = setter;\n /**\n * @internal\n */\n this._value = void 0;\n /**\n * @internal\n */\n this.dep = new Dep(this);\n /**\n * @internal\n */\n this.__v_isRef = true;\n // TODO isolatedDeclarations \"__v_isReadonly\"\n // A computed is also a subscriber that tracks other deps\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 16;\n /**\n * @internal\n */\n this.globalVersion = globalVersion - 1;\n /**\n * @internal\n */\n this.next = void 0;\n // for backwards compat\n this.effect = this;\n this[\"__v_isReadonly\"] = !setter;\n this.isSSR = isSSR;\n }\n /**\n * @internal\n */\n notify() {\n this.flags |= 16;\n if (!(this.flags & 8) && // avoid infinite self recursion\n activeSub !== this) {\n batch(this, true);\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\")) ;\n }\n get value() {\n const link = !!(process.env.NODE_ENV !== \"production\") ? this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n }) : this.dep.track();\n refreshComputed(this);\n if (link) {\n link.version = this.dep.version;\n }\n return this._value;\n }\n set value(newValue) {\n if (this.setter) {\n this.setter(newValue);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\"Write operation failed: computed value is readonly\");\n }\n }\n}\n// @__NO_SIDE_EFFECTS__\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n let getter;\n let setter;\n if (isFunction(getterOrOptions)) {\n getter = getterOrOptions;\n } else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n const cRef = new ComputedRefImpl(getter, setter, isSSR);\n if (!!(process.env.NODE_ENV !== \"production\") && debugOptions && !isSSR) {\n cRef.onTrack = debugOptions.onTrack;\n cRef.onTrigger = debugOptions.onTrigger;\n }\n return cRef;\n}\n\nconst TrackOpTypes = {\n \"GET\": \"get\",\n \"HAS\": \"has\",\n \"ITERATE\": \"iterate\"\n};\nconst TriggerOpTypes = {\n \"SET\": \"set\",\n \"ADD\": \"add\",\n \"DELETE\": \"delete\",\n \"CLEAR\": \"clear\"\n};\nconst ReactiveFlags = {\n \"SKIP\": \"__v_skip\",\n \"IS_REACTIVE\": \"__v_isReactive\",\n \"IS_READONLY\": \"__v_isReadonly\",\n \"IS_SHALLOW\": \"__v_isShallow\",\n \"RAW\": \"__v_raw\",\n \"IS_REF\": \"__v_isRef\"\n};\n\nconst WatchErrorCodes = {\n \"WATCH_GETTER\": 2,\n \"2\": \"WATCH_GETTER\",\n \"WATCH_CALLBACK\": 3,\n \"3\": \"WATCH_CALLBACK\",\n \"WATCH_CLEANUP\": 4,\n \"4\": \"WATCH_CLEANUP\"\n};\nconst INITIAL_WATCHER_VALUE = {};\nconst cleanupMap = /* @__PURE__ */ new WeakMap();\nlet activeWatcher = void 0;\nfunction getCurrentWatcher() {\n return activeWatcher;\n}\nfunction onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) {\n if (owner) {\n let cleanups = cleanupMap.get(owner);\n if (!cleanups) cleanupMap.set(owner, cleanups = []);\n cleanups.push(cleanupFn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onWatcherCleanup() was called when there was no active watcher to associate with.`\n );\n }\n}\nfunction watch(source, cb, options = EMPTY_OBJ) {\n const { immediate, deep, once, scheduler, augmentJob, call } = options;\n const warnInvalidSource = (s) => {\n (options.onWarn || warn)(\n `Invalid watch source: `,\n s,\n `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`\n );\n };\n const reactiveGetter = (source2) => {\n if (deep) return source2;\n if (isShallow(source2) || deep === false || deep === 0)\n return traverse(source2, 1);\n return traverse(source2);\n };\n let effect;\n let getter;\n let cleanup;\n let boundCleanup;\n let forceTrigger = false;\n let isMultiSource = false;\n if (isRef(source)) {\n getter = () => source.value;\n forceTrigger = isShallow(source);\n } else if (isReactive(source)) {\n getter = () => reactiveGetter(source);\n forceTrigger = true;\n } else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some((s) => isReactive(s) || isShallow(s));\n getter = () => source.map((s) => {\n if (isRef(s)) {\n return s.value;\n } else if (isReactive(s)) {\n return reactiveGetter(s);\n } else if (isFunction(s)) {\n return call ? call(s, 2) : s();\n } else {\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(s);\n }\n });\n } else if (isFunction(source)) {\n if (cb) {\n getter = call ? () => call(source, 2) : source;\n } else {\n getter = () => {\n if (cleanup) {\n pauseTracking();\n try {\n cleanup();\n } finally {\n resetTracking();\n }\n }\n const currentEffect = activeWatcher;\n activeWatcher = effect;\n try {\n return call ? call(source, 3, [boundCleanup]) : source(boundCleanup);\n } finally {\n activeWatcher = currentEffect;\n }\n };\n }\n } else {\n getter = NOOP;\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(source);\n }\n if (cb && deep) {\n const baseGetter = getter;\n const depth = deep === true ? Infinity : deep;\n getter = () => traverse(baseGetter(), depth);\n }\n const scope = getCurrentScope();\n const watchHandle = () => {\n effect.stop();\n if (scope && scope.active) {\n remove(scope.effects, effect);\n }\n };\n if (once && cb) {\n const _cb = cb;\n cb = (...args) => {\n _cb(...args);\n watchHandle();\n };\n }\n let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;\n const job = (immediateFirstRun) => {\n if (!(effect.flags & 1) || !effect.dirty && !immediateFirstRun) {\n return;\n }\n if (cb) {\n const newValue = effect.run();\n if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) {\n if (cleanup) {\n cleanup();\n }\n const currentWatcher = activeWatcher;\n activeWatcher = effect;\n try {\n const args = [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,\n boundCleanup\n ];\n oldValue = newValue;\n call ? call(cb, 3, args) : (\n // @ts-expect-error\n cb(...args)\n );\n } finally {\n activeWatcher = currentWatcher;\n }\n }\n } else {\n effect.run();\n }\n };\n if (augmentJob) {\n augmentJob(job);\n }\n effect = new ReactiveEffect(getter);\n effect.scheduler = scheduler ? () => scheduler(job, false) : job;\n boundCleanup = (fn) => onWatcherCleanup(fn, false, effect);\n cleanup = effect.onStop = () => {\n const cleanups = cleanupMap.get(effect);\n if (cleanups) {\n if (call) {\n call(cleanups, 4);\n } else {\n for (const cleanup2 of cleanups) cleanup2();\n }\n cleanupMap.delete(effect);\n }\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = options.onTrack;\n effect.onTrigger = options.onTrigger;\n }\n if (cb) {\n if (immediate) {\n job(true);\n } else {\n oldValue = effect.run();\n }\n } else if (scheduler) {\n scheduler(job.bind(null, true), true);\n } else {\n effect.run();\n }\n watchHandle.pause = effect.pause.bind(effect);\n watchHandle.resume = effect.resume.bind(effect);\n watchHandle.stop = watchHandle;\n return watchHandle;\n}\nfunction traverse(value, depth = Infinity, seen) {\n if (depth <= 0 || !isObject(value) || value[\"__v_skip\"]) {\n return value;\n }\n seen = seen || /* @__PURE__ */ new Map();\n if ((seen.get(value) || 0) >= depth) {\n return value;\n }\n seen.set(value, depth);\n depth--;\n if (isRef(value)) {\n traverse(value.value, depth, seen);\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n traverse(value[i], depth, seen);\n }\n } else if (isSet(value) || isMap(value)) {\n value.forEach((v) => {\n traverse(v, depth, seen);\n });\n } else if (isPlainObject(value)) {\n for (const key in value) {\n traverse(value[key], depth, seen);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n if (Object.prototype.propertyIsEnumerable.call(value, key)) {\n traverse(value[key], depth, seen);\n }\n }\n }\n return value;\n}\n\nexport { ARRAY_ITERATE_KEY, EffectFlags, EffectScope, ITERATE_KEY, MAP_KEY_ITERATE_KEY, ReactiveEffect, ReactiveFlags, TrackOpTypes, TriggerOpTypes, WatchErrorCodes, computed, customRef, effect, effectScope, enableTracking, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onEffectCleanup, onScopeDispose, onWatcherCleanup, pauseTracking, proxyRefs, reactive, reactiveReadArray, readonly, ref, resetTracking, shallowReactive, shallowReadArray, shallowReadonly, shallowRef, stop, toRaw, toReactive, toReadonly, toRef, toRefs, toValue, track, traverse, trigger, triggerRef, unref, watch };\n","/**\n* @vue/runtime-core v3.5.27\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { pauseTracking, resetTracking, isRef, toRaw, traverse, watch as watch$1, shallowRef, readonly, isReactive, ref, isShallow, isReadonly, shallowReadArray, toReadonly, toReactive, shallowReadonly, track, reactive, customRef, shallowReactive, trigger, ReactiveEffect, isProxy, proxyRefs, markRaw, EffectScope, computed as computed$1 } from '@vue/reactivity';\nexport { EffectScope, ReactiveEffect, TrackOpTypes, TriggerOpTypes, customRef, effect, effectScope, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, onWatcherCleanup, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, toValue, triggerRef, unref } from '@vue/reactivity';\nimport { isString, isFunction, EMPTY_OBJ, isPromise, isArray, NOOP, getGlobalThis, extend, isBuiltInDirective, NO, hasOwn, remove, def, isOn, isReservedProp, normalizeClass, stringifyStyle, normalizeStyle, isKnownSvgAttr, isBooleanAttr, isKnownHtmlAttr, includeBooleanAttr, isRenderableAttrValue, normalizeCssVarValue, getEscapedCssVarName, isObject, isRegExp, invokeArrayFns, toHandlerKey, camelize, capitalize, isSymbol, isGloballyAllowed, hyphenate, hasChanged, looseToNumber, isModelListener, EMPTY_ARR, makeMap, toRawType, toNumber } from '@vue/shared';\nexport { camelize, capitalize, normalizeClass, normalizeProps, normalizeStyle, toDisplayString, toHandlerKey } from '@vue/shared';\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n stack.push(vnode);\n}\nfunction popWarningContext() {\n stack.pop();\n}\nlet isWarning = false;\nfunction warn$1(msg, ...args) {\n if (isWarning) return;\n isWarning = true;\n pauseTracking();\n const instance = stack.length ? stack[stack.length - 1].component : null;\n const appWarnHandler = instance && instance.appContext.config.warnHandler;\n const trace = getComponentTrace();\n if (appWarnHandler) {\n callWithErrorHandling(\n appWarnHandler,\n instance,\n 11,\n [\n // eslint-disable-next-line no-restricted-syntax\n msg + args.map((a) => {\n var _a, _b;\n return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);\n }).join(\"\"),\n instance && instance.proxy,\n trace.map(\n ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`\n ).join(\"\\n\"),\n trace\n ]\n );\n } else {\n const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n if (trace.length && // avoid spamming console during tests\n true) {\n warnArgs.push(`\n`, ...formatTrace(trace));\n }\n console.warn(...warnArgs);\n }\n resetTracking();\n isWarning = false;\n}\nfunction getComponentTrace() {\n let currentVNode = stack[stack.length - 1];\n if (!currentVNode) {\n return [];\n }\n const normalizedStack = [];\n while (currentVNode) {\n const last = normalizedStack[0];\n if (last && last.vnode === currentVNode) {\n last.recurseCount++;\n } else {\n normalizedStack.push({\n vnode: currentVNode,\n recurseCount: 0\n });\n }\n const parentInstance = currentVNode.component && currentVNode.component.parent;\n currentVNode = parentInstance && parentInstance.vnode;\n }\n return normalizedStack;\n}\nfunction formatTrace(trace) {\n const logs = [];\n trace.forEach((entry, i) => {\n logs.push(...i === 0 ? [] : [`\n`], ...formatTraceEntry(entry));\n });\n return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n const isRoot = vnode.component ? vnode.component.parent == null : false;\n const open = ` at <${formatComponentName(\n vnode.component,\n vnode.type,\n isRoot\n )}`;\n const close = `>` + postfix;\n return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];\n}\nfunction formatProps(props) {\n const res = [];\n const keys = Object.keys(props);\n keys.slice(0, 3).forEach((key) => {\n res.push(...formatProp(key, props[key]));\n });\n if (keys.length > 3) {\n res.push(` ...`);\n }\n return res;\n}\nfunction formatProp(key, value, raw) {\n if (isString(value)) {\n value = JSON.stringify(value);\n return raw ? value : [`${key}=${value}`];\n } else if (typeof value === \"number\" || typeof value === \"boolean\" || value == null) {\n return raw ? value : [`${key}=${value}`];\n } else if (isRef(value)) {\n value = formatProp(key, toRaw(value.value), true);\n return raw ? value : [`${key}=Ref<`, value, `>`];\n } else if (isFunction(value)) {\n return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n } else {\n value = toRaw(value);\n return raw ? value : [`${key}=`, value];\n }\n}\nfunction assertNumber(val, type) {\n if (!!!(process.env.NODE_ENV !== \"production\")) return;\n if (val === void 0) {\n return;\n } else if (typeof val !== \"number\") {\n warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`);\n } else if (isNaN(val)) {\n warn$1(`${type} is NaN - the duration expression might be incorrect.`);\n }\n}\n\nconst ErrorCodes = {\n \"SETUP_FUNCTION\": 0,\n \"0\": \"SETUP_FUNCTION\",\n \"RENDER_FUNCTION\": 1,\n \"1\": \"RENDER_FUNCTION\",\n \"NATIVE_EVENT_HANDLER\": 5,\n \"5\": \"NATIVE_EVENT_HANDLER\",\n \"COMPONENT_EVENT_HANDLER\": 6,\n \"6\": \"COMPONENT_EVENT_HANDLER\",\n \"VNODE_HOOK\": 7,\n \"7\": \"VNODE_HOOK\",\n \"DIRECTIVE_HOOK\": 8,\n \"8\": \"DIRECTIVE_HOOK\",\n \"TRANSITION_HOOK\": 9,\n \"9\": \"TRANSITION_HOOK\",\n \"APP_ERROR_HANDLER\": 10,\n \"10\": \"APP_ERROR_HANDLER\",\n \"APP_WARN_HANDLER\": 11,\n \"11\": \"APP_WARN_HANDLER\",\n \"FUNCTION_REF\": 12,\n \"12\": \"FUNCTION_REF\",\n \"ASYNC_COMPONENT_LOADER\": 13,\n \"13\": \"ASYNC_COMPONENT_LOADER\",\n \"SCHEDULER\": 14,\n \"14\": \"SCHEDULER\",\n \"COMPONENT_UPDATE\": 15,\n \"15\": \"COMPONENT_UPDATE\",\n \"APP_UNMOUNT_CLEANUP\": 16,\n \"16\": \"APP_UNMOUNT_CLEANUP\"\n};\nconst ErrorTypeStrings$1 = {\n [\"sp\"]: \"serverPrefetch hook\",\n [\"bc\"]: \"beforeCreate hook\",\n [\"c\"]: \"created hook\",\n [\"bm\"]: \"beforeMount hook\",\n [\"m\"]: \"mounted hook\",\n [\"bu\"]: \"beforeUpdate hook\",\n [\"u\"]: \"updated\",\n [\"bum\"]: \"beforeUnmount hook\",\n [\"um\"]: \"unmounted hook\",\n [\"a\"]: \"activated hook\",\n [\"da\"]: \"deactivated hook\",\n [\"ec\"]: \"errorCaptured hook\",\n [\"rtc\"]: \"renderTracked hook\",\n [\"rtg\"]: \"renderTriggered hook\",\n [0]: \"setup function\",\n [1]: \"render function\",\n [2]: \"watcher getter\",\n [3]: \"watcher callback\",\n [4]: \"watcher cleanup function\",\n [5]: \"native event handler\",\n [6]: \"component event handler\",\n [7]: \"vnode hook\",\n [8]: \"directive hook\",\n [9]: \"transition hook\",\n [10]: \"app errorHandler\",\n [11]: \"app warnHandler\",\n [12]: \"ref function\",\n [13]: \"async component loader\",\n [14]: \"scheduler flush\",\n [15]: \"component update\",\n [16]: \"app unmount cleanup function\"\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n try {\n return args ? fn(...args) : fn();\n } catch (err) {\n handleError(err, instance, type);\n }\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n if (isFunction(fn)) {\n const res = callWithErrorHandling(fn, instance, type, args);\n if (res && isPromise(res)) {\n res.catch((err) => {\n handleError(err, instance, type);\n });\n }\n return res;\n }\n if (isArray(fn)) {\n const values = [];\n for (let i = 0; i < fn.length; i++) {\n values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n }\n return values;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}`\n );\n }\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n const contextVNode = instance ? instance.vnode : null;\n const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ;\n if (instance) {\n let cur = instance.parent;\n const exposedInstance = instance.proxy;\n const errorInfo = !!(process.env.NODE_ENV !== \"production\") ? ErrorTypeStrings$1[type] : `https://vuejs.org/error-reference/#runtime-${type}`;\n while (cur) {\n const errorCapturedHooks = cur.ec;\n if (errorCapturedHooks) {\n for (let i = 0; i < errorCapturedHooks.length; i++) {\n if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n return;\n }\n }\n }\n cur = cur.parent;\n }\n if (errorHandler) {\n pauseTracking();\n callWithErrorHandling(errorHandler, null, 10, [\n err,\n exposedInstance,\n errorInfo\n ]);\n resetTracking();\n return;\n }\n }\n logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction);\n}\nfunction logError(err, type, contextVNode, throwInDev = true, throwInProd = false) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const info = ErrorTypeStrings$1[type];\n if (contextVNode) {\n pushWarningContext(contextVNode);\n }\n warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n if (contextVNode) {\n popWarningContext();\n }\n if (throwInDev) {\n throw err;\n } else {\n console.error(err);\n }\n } else if (throwInProd) {\n throw err;\n } else {\n console.error(err);\n }\n}\n\nconst queue = [];\nlet flushIndex = -1;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /* @__PURE__ */ Promise.resolve();\nlet currentFlushPromise = null;\nconst RECURSION_LIMIT = 100;\nfunction nextTick(fn) {\n const p = currentFlushPromise || resolvedPromise;\n return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\nfunction findInsertionIndex(id) {\n let start = flushIndex + 1;\n let end = queue.length;\n while (start < end) {\n const middle = start + end >>> 1;\n const middleJob = queue[middle];\n const middleJobId = getId(middleJob);\n if (middleJobId < id || middleJobId === id && middleJob.flags & 2) {\n start = middle + 1;\n } else {\n end = middle;\n }\n }\n return start;\n}\nfunction queueJob(job) {\n if (!(job.flags & 1)) {\n const jobId = getId(job);\n const lastJob = queue[queue.length - 1];\n if (!lastJob || // fast path when the job id is larger than the tail\n !(job.flags & 2) && jobId >= getId(lastJob)) {\n queue.push(job);\n } else {\n queue.splice(findInsertionIndex(jobId), 0, job);\n }\n job.flags |= 1;\n queueFlush();\n }\n}\nfunction queueFlush() {\n if (!currentFlushPromise) {\n currentFlushPromise = resolvedPromise.then(flushJobs);\n }\n}\nfunction queuePostFlushCb(cb) {\n if (!isArray(cb)) {\n if (activePostFlushCbs && cb.id === -1) {\n activePostFlushCbs.splice(postFlushIndex + 1, 0, cb);\n } else if (!(cb.flags & 1)) {\n pendingPostFlushCbs.push(cb);\n cb.flags |= 1;\n }\n } else {\n pendingPostFlushCbs.push(...cb);\n }\n queueFlush();\n}\nfunction flushPreFlushCbs(instance, seen, i = flushIndex + 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (; i < queue.length; i++) {\n const cb = queue[i];\n if (cb && cb.flags & 2) {\n if (instance && cb.id !== instance.uid) {\n continue;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n queue.splice(i, 1);\n i--;\n if (cb.flags & 4) {\n cb.flags &= -2;\n }\n cb();\n if (!(cb.flags & 4)) {\n cb.flags &= -2;\n }\n }\n }\n}\nfunction flushPostFlushCbs(seen) {\n if (pendingPostFlushCbs.length) {\n const deduped = [...new Set(pendingPostFlushCbs)].sort(\n (a, b) => getId(a) - getId(b)\n );\n pendingPostFlushCbs.length = 0;\n if (activePostFlushCbs) {\n activePostFlushCbs.push(...deduped);\n return;\n }\n activePostFlushCbs = deduped;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n const cb = activePostFlushCbs[postFlushIndex];\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n if (cb.flags & 4) {\n cb.flags &= -2;\n }\n if (!(cb.flags & 8)) cb();\n cb.flags &= -2;\n }\n activePostFlushCbs = null;\n postFlushIndex = 0;\n }\n}\nconst getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id;\nfunction flushJobs(seen) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n const check = !!(process.env.NODE_ENV !== \"production\") ? (job) => checkRecursiveUpdates(seen, job) : NOOP;\n try {\n for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job && !(job.flags & 8)) {\n if (!!(process.env.NODE_ENV !== \"production\") && check(job)) {\n continue;\n }\n if (job.flags & 4) {\n job.flags &= ~1;\n }\n callWithErrorHandling(\n job,\n job.i,\n job.i ? 15 : 14\n );\n if (!(job.flags & 4)) {\n job.flags &= ~1;\n }\n }\n }\n } finally {\n for (; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job) {\n job.flags &= -2;\n }\n }\n flushIndex = -1;\n queue.length = 0;\n flushPostFlushCbs(seen);\n currentFlushPromise = null;\n if (queue.length || pendingPostFlushCbs.length) {\n flushJobs(seen);\n }\n }\n}\nfunction checkRecursiveUpdates(seen, fn) {\n const count = seen.get(fn) || 0;\n if (count > RECURSION_LIMIT) {\n const instance = fn.i;\n const componentName = instance && getComponentName(instance.type);\n handleError(\n `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,\n null,\n 10\n );\n return true;\n }\n seen.set(fn, count + 1);\n return false;\n}\n\nlet isHmrUpdating = false;\nconst hmrDirtyComponents = /* @__PURE__ */ new Map();\nif (!!(process.env.NODE_ENV !== \"production\")) {\n getGlobalThis().__VUE_HMR_RUNTIME__ = {\n createRecord: tryWrap(createRecord),\n rerender: tryWrap(rerender),\n reload: tryWrap(reload)\n };\n}\nconst map = /* @__PURE__ */ new Map();\nfunction registerHMR(instance) {\n const id = instance.type.__hmrId;\n let record = map.get(id);\n if (!record) {\n createRecord(id, instance.type);\n record = map.get(id);\n }\n record.instances.add(instance);\n}\nfunction unregisterHMR(instance) {\n map.get(instance.type.__hmrId).instances.delete(instance);\n}\nfunction createRecord(id, initialDef) {\n if (map.has(id)) {\n return false;\n }\n map.set(id, {\n initialDef: normalizeClassComponent(initialDef),\n instances: /* @__PURE__ */ new Set()\n });\n return true;\n}\nfunction normalizeClassComponent(component) {\n return isClassComponent(component) ? component.__vccOpts : component;\n}\nfunction rerender(id, newRender) {\n const record = map.get(id);\n if (!record) {\n return;\n }\n record.initialDef.render = newRender;\n [...record.instances].forEach((instance) => {\n if (newRender) {\n instance.render = newRender;\n normalizeClassComponent(instance.type).render = newRender;\n }\n instance.renderCache = [];\n isHmrUpdating = true;\n if (!(instance.job.flags & 8)) {\n instance.update();\n }\n isHmrUpdating = false;\n });\n}\nfunction reload(id, newComp) {\n const record = map.get(id);\n if (!record) return;\n newComp = normalizeClassComponent(newComp);\n updateComponentDef(record.initialDef, newComp);\n const instances = [...record.instances];\n for (let i = 0; i < instances.length; i++) {\n const instance = instances[i];\n const oldComp = normalizeClassComponent(instance.type);\n let dirtyInstances = hmrDirtyComponents.get(oldComp);\n if (!dirtyInstances) {\n if (oldComp !== record.initialDef) {\n updateComponentDef(oldComp, newComp);\n }\n hmrDirtyComponents.set(oldComp, dirtyInstances = /* @__PURE__ */ new Set());\n }\n dirtyInstances.add(instance);\n instance.appContext.propsCache.delete(instance.type);\n instance.appContext.emitsCache.delete(instance.type);\n instance.appContext.optionsCache.delete(instance.type);\n if (instance.ceReload) {\n dirtyInstances.add(instance);\n instance.ceReload(newComp.styles);\n dirtyInstances.delete(instance);\n } else if (instance.parent) {\n queueJob(() => {\n if (!(instance.job.flags & 8)) {\n isHmrUpdating = true;\n instance.parent.update();\n isHmrUpdating = false;\n dirtyInstances.delete(instance);\n }\n });\n } else if (instance.appContext.reload) {\n instance.appContext.reload();\n } else if (typeof window !== \"undefined\") {\n window.location.reload();\n } else {\n console.warn(\n \"[HMR] Root or manually mounted instance modified. Full reload required.\"\n );\n }\n if (instance.root.ce && instance !== instance.root) {\n instance.root.ce._removeChildStyle(oldComp);\n }\n }\n queuePostFlushCb(() => {\n hmrDirtyComponents.clear();\n });\n}\nfunction updateComponentDef(oldComp, newComp) {\n extend(oldComp, newComp);\n for (const key in oldComp) {\n if (key !== \"__file\" && !(key in newComp)) {\n delete oldComp[key];\n }\n }\n}\nfunction tryWrap(fn) {\n return (id, arg) => {\n try {\n return fn(id, arg);\n } catch (e) {\n console.error(e);\n console.warn(\n `[HMR] Something went wrong during Vue component hot-reload. Full reload required.`\n );\n }\n };\n}\n\nlet devtools$1;\nlet buffer = [];\nlet devtoolsNotInstalled = false;\nfunction emit$1(event, ...args) {\n if (devtools$1) {\n devtools$1.emit(event, ...args);\n } else if (!devtoolsNotInstalled) {\n buffer.push({ event, args });\n }\n}\nfunction setDevtoolsHook$1(hook, target) {\n var _a, _b;\n devtools$1 = hook;\n if (devtools$1) {\n devtools$1.enabled = true;\n buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args));\n buffer = [];\n } else if (\n // handle late devtools injection - only do this if we are in an actual\n // browser environment to avoid the timer handle stalling test runner exit\n // (#4815)\n typeof window !== \"undefined\" && // some envs mock window but not fully\n window.HTMLElement && // also exclude jsdom\n // eslint-disable-next-line no-restricted-syntax\n !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes(\"jsdom\"))\n ) {\n const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];\n replay.push((newHook) => {\n setDevtoolsHook$1(newHook, target);\n });\n setTimeout(() => {\n if (!devtools$1) {\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\n devtoolsNotInstalled = true;\n buffer = [];\n }\n }, 3e3);\n } else {\n devtoolsNotInstalled = true;\n buffer = [];\n }\n}\nfunction devtoolsInitApp(app, version) {\n emit$1(\"app:init\" /* APP_INIT */, app, version, {\n Fragment,\n Text,\n Comment,\n Static\n });\n}\nfunction devtoolsUnmountApp(app) {\n emit$1(\"app:unmount\" /* APP_UNMOUNT */, app);\n}\nconst devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook(\"component:added\" /* COMPONENT_ADDED */);\nconst devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook(\"component:updated\" /* COMPONENT_UPDATED */);\nconst _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(\n \"component:removed\" /* COMPONENT_REMOVED */\n);\nconst devtoolsComponentRemoved = (component) => {\n if (devtools$1 && typeof devtools$1.cleanupBuffer === \"function\" && // remove the component if it wasn't buffered\n !devtools$1.cleanupBuffer(component)) {\n _devtoolsComponentRemoved(component);\n }\n};\n// @__NO_SIDE_EFFECTS__\nfunction createDevtoolsComponentHook(hook) {\n return (component) => {\n emit$1(\n hook,\n component.appContext.app,\n component.uid,\n component.parent ? component.parent.uid : void 0,\n component\n );\n };\n}\nconst devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook(\"perf:start\" /* PERFORMANCE_START */);\nconst devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook(\"perf:end\" /* PERFORMANCE_END */);\nfunction createDevtoolsPerformanceHook(hook) {\n return (component, type, time) => {\n emit$1(hook, component.appContext.app, component.uid, component, type, time);\n };\n}\nfunction devtoolsComponentEmit(component, event, params) {\n emit$1(\n \"component:emit\" /* COMPONENT_EMIT */,\n component.appContext.app,\n component,\n event,\n params\n );\n}\n\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\nfunction setCurrentRenderingInstance(instance) {\n const prev = currentRenderingInstance;\n currentRenderingInstance = instance;\n currentScopeId = instance && instance.type.__scopeId || null;\n return prev;\n}\nfunction pushScopeId(id) {\n currentScopeId = id;\n}\nfunction popScopeId() {\n currentScopeId = null;\n}\nconst withScopeId = (_id) => withCtx;\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) {\n if (!ctx) return fn;\n if (fn._n) {\n return fn;\n }\n const renderFnWithContext = (...args) => {\n if (renderFnWithContext._d) {\n setBlockTracking(-1);\n }\n const prevInstance = setCurrentRenderingInstance(ctx);\n let res;\n try {\n res = fn(...args);\n } finally {\n setCurrentRenderingInstance(prevInstance);\n if (renderFnWithContext._d) {\n setBlockTracking(1);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(ctx);\n }\n return res;\n };\n renderFnWithContext._n = true;\n renderFnWithContext._c = true;\n renderFnWithContext._d = true;\n return renderFnWithContext;\n}\n\nfunction validateDirectiveName(name) {\n if (isBuiltInDirective(name)) {\n warn$1(\"Do not use built-in directive ids as custom directive id: \" + name);\n }\n}\nfunction withDirectives(vnode, directives) {\n if (currentRenderingInstance === null) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`withDirectives can only be used inside render functions.`);\n return vnode;\n }\n const instance = getComponentPublicInstance(currentRenderingInstance);\n const bindings = vnode.dirs || (vnode.dirs = []);\n for (let i = 0; i < directives.length; i++) {\n let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];\n if (dir) {\n if (isFunction(dir)) {\n dir = {\n mounted: dir,\n updated: dir\n };\n }\n if (dir.deep) {\n traverse(value);\n }\n bindings.push({\n dir,\n instance,\n value,\n oldValue: void 0,\n arg,\n modifiers\n });\n }\n }\n return vnode;\n}\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\n const bindings = vnode.dirs;\n const oldBindings = prevVNode && prevVNode.dirs;\n for (let i = 0; i < bindings.length; i++) {\n const binding = bindings[i];\n if (oldBindings) {\n binding.oldValue = oldBindings[i].value;\n }\n let hook = binding.dir[name];\n if (hook) {\n pauseTracking();\n callWithAsyncErrorHandling(hook, instance, 8, [\n vnode.el,\n binding,\n vnode,\n prevVNode\n ]);\n resetTracking();\n }\n }\n}\n\nfunction provide(key, value) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!currentInstance || currentInstance.isMounted) {\n warn$1(`provide() can only be used inside setup().`);\n }\n }\n if (currentInstance) {\n let provides = currentInstance.provides;\n const parentProvides = currentInstance.parent && currentInstance.parent.provides;\n if (parentProvides === provides) {\n provides = currentInstance.provides = Object.create(parentProvides);\n }\n provides[key] = value;\n }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory = false) {\n const instance = getCurrentInstance();\n if (instance || currentApp) {\n let provides = currentApp ? currentApp._context.provides : instance ? instance.parent == null || instance.ce ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : void 0;\n if (provides && key in provides) {\n return provides[key];\n } else if (arguments.length > 1) {\n return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`injection \"${String(key)}\" not found.`);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`inject() can only be used inside setup() or functional components.`);\n }\n}\nfunction hasInjectionContext() {\n return !!(getCurrentInstance() || currentApp);\n}\n\nconst ssrContextKey = /* @__PURE__ */ Symbol.for(\"v-scx\");\nconst useSSRContext = () => {\n {\n const ctx = inject(ssrContextKey);\n if (!ctx) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build.`\n );\n }\n return ctx;\n }\n};\n\nfunction watchEffect(effect, options) {\n return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"post\" }) : { flush: \"post\" }\n );\n}\nfunction watchSyncEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"sync\" }) : { flush: \"sync\" }\n );\n}\nfunction watch(source, cb, options) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isFunction(cb)) {\n warn$1(\n `\\`watch(fn, options?)\\` signature has been moved to a separate API. Use \\`watchEffect(fn, options?)\\` instead. \\`watch\\` now only supports \\`watch(source, cb, options?) signature.`\n );\n }\n return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, options = EMPTY_OBJ) {\n const { immediate, deep, flush, once } = options;\n if (!!(process.env.NODE_ENV !== \"production\") && !cb) {\n if (immediate !== void 0) {\n warn$1(\n `watch() \"immediate\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n if (deep !== void 0) {\n warn$1(\n `watch() \"deep\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n if (once !== void 0) {\n warn$1(\n `watch() \"once\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n }\n const baseWatchOptions = extend({}, options);\n if (!!(process.env.NODE_ENV !== \"production\")) baseWatchOptions.onWarn = warn$1;\n const runsImmediately = cb && immediate || !cb && flush !== \"post\";\n let ssrCleanup;\n if (isInSSRComponentSetup) {\n if (flush === \"sync\") {\n const ctx = useSSRContext();\n ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []);\n } else if (!runsImmediately) {\n const watchStopHandle = () => {\n };\n watchStopHandle.stop = NOOP;\n watchStopHandle.resume = NOOP;\n watchStopHandle.pause = NOOP;\n return watchStopHandle;\n }\n }\n const instance = currentInstance;\n baseWatchOptions.call = (fn, type, args) => callWithAsyncErrorHandling(fn, instance, type, args);\n let isPre = false;\n if (flush === \"post\") {\n baseWatchOptions.scheduler = (job) => {\n queuePostRenderEffect(job, instance && instance.suspense);\n };\n } else if (flush !== \"sync\") {\n isPre = true;\n baseWatchOptions.scheduler = (job, isFirstRun) => {\n if (isFirstRun) {\n job();\n } else {\n queueJob(job);\n }\n };\n }\n baseWatchOptions.augmentJob = (job) => {\n if (cb) {\n job.flags |= 4;\n }\n if (isPre) {\n job.flags |= 2;\n if (instance) {\n job.id = instance.uid;\n job.i = instance;\n }\n }\n };\n const watchHandle = watch$1(source, cb, baseWatchOptions);\n if (isInSSRComponentSetup) {\n if (ssrCleanup) {\n ssrCleanup.push(watchHandle);\n } else if (runsImmediately) {\n watchHandle();\n }\n }\n return watchHandle;\n}\nfunction instanceWatch(source, value, options) {\n const publicThis = this.proxy;\n const getter = isString(source) ? source.includes(\".\") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);\n let cb;\n if (isFunction(value)) {\n cb = value;\n } else {\n cb = value.handler;\n options = value;\n }\n const reset = setCurrentInstance(this);\n const res = doWatch(getter, cb.bind(publicThis), options);\n reset();\n return res;\n}\nfunction createPathGetter(ctx, path) {\n const segments = path.split(\".\");\n return () => {\n let cur = ctx;\n for (let i = 0; i < segments.length && cur; i++) {\n cur = cur[segments[i]];\n }\n return cur;\n };\n}\n\nconst TeleportEndKey = /* @__PURE__ */ Symbol(\"_vte\");\nconst isTeleport = (type) => type.__isTeleport;\nconst isTeleportDisabled = (props) => props && (props.disabled || props.disabled === \"\");\nconst isTeleportDeferred = (props) => props && (props.defer || props.defer === \"\");\nconst isTargetSVG = (target) => typeof SVGElement !== \"undefined\" && target instanceof SVGElement;\nconst isTargetMathML = (target) => typeof MathMLElement === \"function\" && target instanceof MathMLElement;\nconst resolveTarget = (props, select) => {\n const targetSelector = props && props.to;\n if (isString(targetSelector)) {\n if (!select) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Current renderer does not support string target for Teleports. (missing querySelector renderer option)`\n );\n return null;\n } else {\n const target = select(targetSelector);\n if (!!(process.env.NODE_ENV !== \"production\") && !target && !isTeleportDisabled(props)) {\n warn$1(\n `Failed to locate Teleport target with selector \"${targetSelector}\". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.`\n );\n }\n return target;\n }\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && !targetSelector && !isTeleportDisabled(props)) {\n warn$1(`Invalid Teleport target: ${targetSelector}`);\n }\n return targetSelector;\n }\n};\nconst TeleportImpl = {\n name: \"Teleport\",\n __isTeleport: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, internals) {\n const {\n mc: mountChildren,\n pc: patchChildren,\n pbc: patchBlockChildren,\n o: { insert, querySelector, createText, createComment }\n } = internals;\n const disabled = isTeleportDisabled(n2.props);\n let { shapeFlag, children, dynamicChildren } = n2;\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n optimized = false;\n dynamicChildren = null;\n }\n if (n1 == null) {\n const placeholder = n2.el = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport start\") : createText(\"\");\n const mainAnchor = n2.anchor = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport end\") : createText(\"\");\n insert(placeholder, container, anchor);\n insert(mainAnchor, container, anchor);\n const mount = (container2, anchor2) => {\n if (shapeFlag & 16) {\n mountChildren(\n children,\n container2,\n anchor2,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n };\n const mountToTarget = () => {\n const target = n2.target = resolveTarget(n2.props, querySelector);\n const targetAnchor = prepareAnchor(target, n2, createText, insert);\n if (target) {\n if (namespace !== \"svg\" && isTargetSVG(target)) {\n namespace = \"svg\";\n } else if (namespace !== \"mathml\" && isTargetMathML(target)) {\n namespace = \"mathml\";\n }\n if (parentComponent && parentComponent.isCE) {\n (parentComponent.ce._teleportTargets || (parentComponent.ce._teleportTargets = /* @__PURE__ */ new Set())).add(target);\n }\n if (!disabled) {\n mount(target, targetAnchor);\n updateCssVars(n2, false);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && !disabled) {\n warn$1(\n \"Invalid Teleport target on mount:\",\n target,\n `(${typeof target})`\n );\n }\n };\n if (disabled) {\n mount(container, mainAnchor);\n updateCssVars(n2, true);\n }\n if (isTeleportDeferred(n2.props)) {\n n2.el.__isMounted = false;\n queuePostRenderEffect(() => {\n mountToTarget();\n delete n2.el.__isMounted;\n }, parentSuspense);\n } else {\n mountToTarget();\n }\n } else {\n if (isTeleportDeferred(n2.props) && n1.el.__isMounted === false) {\n queuePostRenderEffect(() => {\n TeleportImpl.process(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n internals\n );\n }, parentSuspense);\n return;\n }\n n2.el = n1.el;\n n2.targetStart = n1.targetStart;\n const mainAnchor = n2.anchor = n1.anchor;\n const target = n2.target = n1.target;\n const targetAnchor = n2.targetAnchor = n1.targetAnchor;\n const wasDisabled = isTeleportDisabled(n1.props);\n const currentContainer = wasDisabled ? container : target;\n const currentAnchor = wasDisabled ? mainAnchor : targetAnchor;\n if (namespace === \"svg\" || isTargetSVG(target)) {\n namespace = \"svg\";\n } else if (namespace === \"mathml\" || isTargetMathML(target)) {\n namespace = \"mathml\";\n }\n if (dynamicChildren) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n currentContainer,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds\n );\n traverseStaticChildren(n1, n2, !!!(process.env.NODE_ENV !== \"production\"));\n } else if (!optimized) {\n patchChildren(\n n1,\n n2,\n currentContainer,\n currentAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n false\n );\n }\n if (disabled) {\n if (!wasDisabled) {\n moveTeleport(\n n2,\n container,\n mainAnchor,\n internals,\n 1\n );\n } else {\n if (n2.props && n1.props && n2.props.to !== n1.props.to) {\n n2.props.to = n1.props.to;\n }\n }\n } else {\n if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) {\n const nextTarget = n2.target = resolveTarget(\n n2.props,\n querySelector\n );\n if (nextTarget) {\n moveTeleport(\n n2,\n nextTarget,\n null,\n internals,\n 0\n );\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n \"Invalid Teleport target on update:\",\n target,\n `(${typeof target})`\n );\n }\n } else if (wasDisabled) {\n moveTeleport(\n n2,\n target,\n targetAnchor,\n internals,\n 1\n );\n }\n }\n updateCssVars(n2, disabled);\n }\n },\n remove(vnode, parentComponent, parentSuspense, { um: unmount, o: { remove: hostRemove } }, doRemove) {\n const {\n shapeFlag,\n children,\n anchor,\n targetStart,\n targetAnchor,\n target,\n props\n } = vnode;\n if (target) {\n hostRemove(targetStart);\n hostRemove(targetAnchor);\n }\n doRemove && hostRemove(anchor);\n if (shapeFlag & 16) {\n const shouldRemove = doRemove || !isTeleportDisabled(props);\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n unmount(\n child,\n parentComponent,\n parentSuspense,\n shouldRemove,\n !!child.dynamicChildren\n );\n }\n }\n },\n move: moveTeleport,\n hydrate: hydrateTeleport\n};\nfunction moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) {\n if (moveType === 0) {\n insert(vnode.targetAnchor, container, parentAnchor);\n }\n const { el, anchor, shapeFlag, children, props } = vnode;\n const isReorder = moveType === 2;\n if (isReorder) {\n insert(el, container, parentAnchor);\n }\n if (!isReorder || isTeleportDisabled(props)) {\n if (shapeFlag & 16) {\n for (let i = 0; i < children.length; i++) {\n move(\n children[i],\n container,\n parentAnchor,\n 2\n );\n }\n }\n }\n if (isReorder) {\n insert(anchor, container, parentAnchor);\n }\n}\nfunction hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, {\n o: { nextSibling, parentNode, querySelector, insert, createText }\n}, hydrateChildren) {\n function hydrateDisabledTeleport(node2, vnode2, targetStart, targetAnchor) {\n vnode2.anchor = hydrateChildren(\n nextSibling(node2),\n vnode2,\n parentNode(node2),\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n vnode2.targetStart = targetStart;\n vnode2.targetAnchor = targetAnchor;\n }\n const target = vnode.target = resolveTarget(\n vnode.props,\n querySelector\n );\n const disabled = isTeleportDisabled(vnode.props);\n if (target) {\n const targetNode = target._lpa || target.firstChild;\n if (vnode.shapeFlag & 16) {\n if (disabled) {\n hydrateDisabledTeleport(\n node,\n vnode,\n targetNode,\n targetNode && nextSibling(targetNode)\n );\n } else {\n vnode.anchor = nextSibling(node);\n let targetAnchor = targetNode;\n while (targetAnchor) {\n if (targetAnchor && targetAnchor.nodeType === 8) {\n if (targetAnchor.data === \"teleport start anchor\") {\n vnode.targetStart = targetAnchor;\n } else if (targetAnchor.data === \"teleport anchor\") {\n vnode.targetAnchor = targetAnchor;\n target._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor);\n break;\n }\n }\n targetAnchor = nextSibling(targetAnchor);\n }\n if (!vnode.targetAnchor) {\n prepareAnchor(target, vnode, createText, insert);\n }\n hydrateChildren(\n targetNode && nextSibling(targetNode),\n vnode,\n target,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n }\n updateCssVars(vnode, disabled);\n } else if (disabled) {\n if (vnode.shapeFlag & 16) {\n hydrateDisabledTeleport(node, vnode, node, nextSibling(node));\n }\n }\n return vnode.anchor && nextSibling(vnode.anchor);\n}\nconst Teleport = TeleportImpl;\nfunction updateCssVars(vnode, isDisabled) {\n const ctx = vnode.ctx;\n if (ctx && ctx.ut) {\n let node, anchor;\n if (isDisabled) {\n node = vnode.el;\n anchor = vnode.anchor;\n } else {\n node = vnode.targetStart;\n anchor = vnode.targetAnchor;\n }\n while (node && node !== anchor) {\n if (node.nodeType === 1) node.setAttribute(\"data-v-owner\", ctx.uid);\n node = node.nextSibling;\n }\n ctx.ut();\n }\n}\nfunction prepareAnchor(target, vnode, createText, insert) {\n const targetStart = vnode.targetStart = createText(\"\");\n const targetAnchor = vnode.targetAnchor = createText(\"\");\n targetStart[TeleportEndKey] = targetAnchor;\n if (target) {\n insert(targetStart, target);\n insert(targetAnchor, target);\n }\n return targetAnchor;\n}\n\nconst leaveCbKey = /* @__PURE__ */ Symbol(\"_leaveCb\");\nconst enterCbKey = /* @__PURE__ */ Symbol(\"_enterCb\");\nfunction useTransitionState() {\n const state = {\n isMounted: false,\n isLeaving: false,\n isUnmounting: false,\n leavingVNodes: /* @__PURE__ */ new Map()\n };\n onMounted(() => {\n state.isMounted = true;\n });\n onBeforeUnmount(() => {\n state.isUnmounting = true;\n });\n return state;\n}\nconst TransitionHookValidator = [Function, Array];\nconst BaseTransitionPropsValidators = {\n mode: String,\n appear: Boolean,\n persisted: Boolean,\n // enter\n onBeforeEnter: TransitionHookValidator,\n onEnter: TransitionHookValidator,\n onAfterEnter: TransitionHookValidator,\n onEnterCancelled: TransitionHookValidator,\n // leave\n onBeforeLeave: TransitionHookValidator,\n onLeave: TransitionHookValidator,\n onAfterLeave: TransitionHookValidator,\n onLeaveCancelled: TransitionHookValidator,\n // appear\n onBeforeAppear: TransitionHookValidator,\n onAppear: TransitionHookValidator,\n onAfterAppear: TransitionHookValidator,\n onAppearCancelled: TransitionHookValidator\n};\nconst recursiveGetSubtree = (instance) => {\n const subTree = instance.subTree;\n return subTree.component ? recursiveGetSubtree(subTree.component) : subTree;\n};\nconst BaseTransitionImpl = {\n name: `BaseTransition`,\n props: BaseTransitionPropsValidators,\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n return () => {\n const children = slots.default && getTransitionRawChildren(slots.default(), true);\n if (!children || !children.length) {\n return;\n }\n const child = findNonCommentChild(children);\n const rawProps = toRaw(props);\n const { mode } = rawProps;\n if (!!(process.env.NODE_ENV !== \"production\") && mode && mode !== \"in-out\" && mode !== \"out-in\" && mode !== \"default\") {\n warn$1(`invalid <transition> mode: ${mode}`);\n }\n if (state.isLeaving) {\n return emptyPlaceholder(child);\n }\n const innerChild = getInnerChild$1(child);\n if (!innerChild) {\n return emptyPlaceholder(child);\n }\n let enterHooks = resolveTransitionHooks(\n innerChild,\n rawProps,\n state,\n instance,\n // #11061, ensure enterHooks is fresh after clone\n (hooks) => enterHooks = hooks\n );\n if (innerChild.type !== Comment) {\n setTransitionHooks(innerChild, enterHooks);\n }\n let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree);\n if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(oldInnerChild, innerChild) && recursiveGetSubtree(instance).type !== Comment) {\n let leavingHooks = resolveTransitionHooks(\n oldInnerChild,\n rawProps,\n state,\n instance\n );\n setTransitionHooks(oldInnerChild, leavingHooks);\n if (mode === \"out-in\" && innerChild.type !== Comment) {\n state.isLeaving = true;\n leavingHooks.afterLeave = () => {\n state.isLeaving = false;\n if (!(instance.job.flags & 8)) {\n instance.update();\n }\n delete leavingHooks.afterLeave;\n oldInnerChild = void 0;\n };\n return emptyPlaceholder(child);\n } else if (mode === \"in-out\" && innerChild.type !== Comment) {\n leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\n const leavingVNodesCache = getLeavingNodesForType(\n state,\n oldInnerChild\n );\n leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\n el[leaveCbKey] = () => {\n earlyRemove();\n el[leaveCbKey] = void 0;\n delete enterHooks.delayedLeave;\n oldInnerChild = void 0;\n };\n enterHooks.delayedLeave = () => {\n delayedLeave();\n delete enterHooks.delayedLeave;\n oldInnerChild = void 0;\n };\n };\n } else {\n oldInnerChild = void 0;\n }\n } else if (oldInnerChild) {\n oldInnerChild = void 0;\n }\n return child;\n };\n }\n};\nfunction findNonCommentChild(children) {\n let child = children[0];\n if (children.length > 1) {\n let hasFound = false;\n for (const c of children) {\n if (c.type !== Comment) {\n if (!!(process.env.NODE_ENV !== \"production\") && hasFound) {\n warn$1(\n \"<transition> can only be used on a single element or component. Use <transition-group> for lists.\"\n );\n break;\n }\n child = c;\n hasFound = true;\n if (!!!(process.env.NODE_ENV !== \"production\")) break;\n }\n }\n }\n return child;\n}\nconst BaseTransition = BaseTransitionImpl;\nfunction getLeavingNodesForType(state, vnode) {\n const { leavingVNodes } = state;\n let leavingVNodesCache = leavingVNodes.get(vnode.type);\n if (!leavingVNodesCache) {\n leavingVNodesCache = /* @__PURE__ */ Object.create(null);\n leavingVNodes.set(vnode.type, leavingVNodesCache);\n }\n return leavingVNodesCache;\n}\nfunction resolveTransitionHooks(vnode, props, state, instance, postClone) {\n const {\n appear,\n mode,\n persisted = false,\n onBeforeEnter,\n onEnter,\n onAfterEnter,\n onEnterCancelled,\n onBeforeLeave,\n onLeave,\n onAfterLeave,\n onLeaveCancelled,\n onBeforeAppear,\n onAppear,\n onAfterAppear,\n onAppearCancelled\n } = props;\n const key = String(vnode.key);\n const leavingVNodesCache = getLeavingNodesForType(state, vnode);\n const callHook = (hook, args) => {\n hook && callWithAsyncErrorHandling(\n hook,\n instance,\n 9,\n args\n );\n };\n const callAsyncHook = (hook, args) => {\n const done = args[1];\n callHook(hook, args);\n if (isArray(hook)) {\n if (hook.every((hook2) => hook2.length <= 1)) done();\n } else if (hook.length <= 1) {\n done();\n }\n };\n const hooks = {\n mode,\n persisted,\n beforeEnter(el) {\n let hook = onBeforeEnter;\n if (!state.isMounted) {\n if (appear) {\n hook = onBeforeAppear || onBeforeEnter;\n } else {\n return;\n }\n }\n if (el[leaveCbKey]) {\n el[leaveCbKey](\n true\n /* cancelled */\n );\n }\n const leavingVNode = leavingVNodesCache[key];\n if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) {\n leavingVNode.el[leaveCbKey]();\n }\n callHook(hook, [el]);\n },\n enter(el) {\n let hook = onEnter;\n let afterHook = onAfterEnter;\n let cancelHook = onEnterCancelled;\n if (!state.isMounted) {\n if (appear) {\n hook = onAppear || onEnter;\n afterHook = onAfterAppear || onAfterEnter;\n cancelHook = onAppearCancelled || onEnterCancelled;\n } else {\n return;\n }\n }\n let called = false;\n const done = el[enterCbKey] = (cancelled) => {\n if (called) return;\n called = true;\n if (cancelled) {\n callHook(cancelHook, [el]);\n } else {\n callHook(afterHook, [el]);\n }\n if (hooks.delayedLeave) {\n hooks.delayedLeave();\n }\n el[enterCbKey] = void 0;\n };\n if (hook) {\n callAsyncHook(hook, [el, done]);\n } else {\n done();\n }\n },\n leave(el, remove) {\n const key2 = String(vnode.key);\n if (el[enterCbKey]) {\n el[enterCbKey](\n true\n /* cancelled */\n );\n }\n if (state.isUnmounting) {\n return remove();\n }\n callHook(onBeforeLeave, [el]);\n let called = false;\n const done = el[leaveCbKey] = (cancelled) => {\n if (called) return;\n called = true;\n remove();\n if (cancelled) {\n callHook(onLeaveCancelled, [el]);\n } else {\n callHook(onAfterLeave, [el]);\n }\n el[leaveCbKey] = void 0;\n if (leavingVNodesCache[key2] === vnode) {\n delete leavingVNodesCache[key2];\n }\n };\n leavingVNodesCache[key2] = vnode;\n if (onLeave) {\n callAsyncHook(onLeave, [el, done]);\n } else {\n done();\n }\n },\n clone(vnode2) {\n const hooks2 = resolveTransitionHooks(\n vnode2,\n props,\n state,\n instance,\n postClone\n );\n if (postClone) postClone(hooks2);\n return hooks2;\n }\n };\n return hooks;\n}\nfunction emptyPlaceholder(vnode) {\n if (isKeepAlive(vnode)) {\n vnode = cloneVNode(vnode);\n vnode.children = null;\n return vnode;\n }\n}\nfunction getInnerChild$1(vnode) {\n if (!isKeepAlive(vnode)) {\n if (isTeleport(vnode.type) && vnode.children) {\n return findNonCommentChild(vnode.children);\n }\n return vnode;\n }\n if (vnode.component) {\n return vnode.component.subTree;\n }\n const { shapeFlag, children } = vnode;\n if (children) {\n if (shapeFlag & 16) {\n return children[0];\n }\n if (shapeFlag & 32 && isFunction(children.default)) {\n return children.default();\n }\n }\n}\nfunction setTransitionHooks(vnode, hooks) {\n if (vnode.shapeFlag & 6 && vnode.component) {\n vnode.transition = hooks;\n setTransitionHooks(vnode.component.subTree, hooks);\n } else if (vnode.shapeFlag & 128) {\n vnode.ssContent.transition = hooks.clone(vnode.ssContent);\n vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\n } else {\n vnode.transition = hooks;\n }\n}\nfunction getTransitionRawChildren(children, keepComment = false, parentKey) {\n let ret = [];\n let keyedFragmentCount = 0;\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i);\n if (child.type === Fragment) {\n if (child.patchFlag & 128) keyedFragmentCount++;\n ret = ret.concat(\n getTransitionRawChildren(child.children, keepComment, key)\n );\n } else if (keepComment || child.type !== Comment) {\n ret.push(key != null ? cloneVNode(child, { key }) : child);\n }\n }\n if (keyedFragmentCount > 1) {\n for (let i = 0; i < ret.length; i++) {\n ret[i].patchFlag = -2;\n }\n }\n return ret;\n}\n\n// @__NO_SIDE_EFFECTS__\nfunction defineComponent(options, extraOptions) {\n return isFunction(options) ? (\n // #8236: extend call and options.name access are considered side-effects\n // by Rollup, so we have to wrap it in a pure-annotated IIFE.\n /* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))()\n ) : options;\n}\n\nfunction useId() {\n const i = getCurrentInstance();\n if (i) {\n return (i.appContext.config.idPrefix || \"v\") + \"-\" + i.ids[0] + i.ids[1]++;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `useId() is called when there is no active component instance to be associated with.`\n );\n }\n return \"\";\n}\nfunction markAsyncBoundary(instance) {\n instance.ids = [instance.ids[0] + instance.ids[2]++ + \"-\", 0, 0];\n}\n\nconst knownTemplateRefs = /* @__PURE__ */ new WeakSet();\nfunction useTemplateRef(key) {\n const i = getCurrentInstance();\n const r = shallowRef(null);\n if (i) {\n const refs = i.refs === EMPTY_OBJ ? i.refs = {} : i.refs;\n let desc;\n if (!!(process.env.NODE_ENV !== \"production\") && (desc = Object.getOwnPropertyDescriptor(refs, key)) && !desc.configurable) {\n warn$1(`useTemplateRef('${key}') already exists.`);\n } else {\n Object.defineProperty(refs, key, {\n enumerable: true,\n get: () => r.value,\n set: (val) => r.value = val\n });\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `useTemplateRef() is called when there is no active component instance to be associated with.`\n );\n }\n const ret = !!(process.env.NODE_ENV !== \"production\") ? readonly(r) : r;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n knownTemplateRefs.add(ret);\n }\n return ret;\n}\n\nconst pendingSetRefMap = /* @__PURE__ */ new WeakMap();\nfunction setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {\n if (isArray(rawRef)) {\n rawRef.forEach(\n (r, i) => setRef(\n r,\n oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef),\n parentSuspense,\n vnode,\n isUnmount\n )\n );\n return;\n }\n if (isAsyncWrapper(vnode) && !isUnmount) {\n if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) {\n setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree);\n }\n return;\n }\n const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el;\n const value = isUnmount ? null : refValue;\n const { i: owner, r: ref } = rawRef;\n if (!!(process.env.NODE_ENV !== \"production\") && !owner) {\n warn$1(\n `Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.`\n );\n return;\n }\n const oldRef = oldRawRef && oldRawRef.r;\n const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs;\n const setupState = owner.setupState;\n const rawSetupState = toRaw(setupState);\n const canSetSetupRef = setupState === EMPTY_OBJ ? NO : (key) => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (hasOwn(rawSetupState, key) && !isRef(rawSetupState[key])) {\n warn$1(\n `Template ref \"${key}\" used on a non-ref value. It will not work in the production build.`\n );\n }\n if (knownTemplateRefs.has(rawSetupState[key])) {\n return false;\n }\n }\n return hasOwn(rawSetupState, key);\n };\n const canSetRef = (ref2) => {\n return !!!(process.env.NODE_ENV !== \"production\") || !knownTemplateRefs.has(ref2);\n };\n if (oldRef != null && oldRef !== ref) {\n invalidatePendingSetRef(oldRawRef);\n if (isString(oldRef)) {\n refs[oldRef] = null;\n if (canSetSetupRef(oldRef)) {\n setupState[oldRef] = null;\n }\n } else if (isRef(oldRef)) {\n if (canSetRef(oldRef)) {\n oldRef.value = null;\n }\n const oldRawRefAtom = oldRawRef;\n if (oldRawRefAtom.k) refs[oldRawRefAtom.k] = null;\n }\n }\n if (isFunction(ref)) {\n callWithErrorHandling(ref, owner, 12, [value, refs]);\n } else {\n const _isString = isString(ref);\n const _isRef = isRef(ref);\n if (_isString || _isRef) {\n const doSet = () => {\n if (rawRef.f) {\n const existing = _isString ? canSetSetupRef(ref) ? setupState[ref] : refs[ref] : canSetRef(ref) || !rawRef.k ? ref.value : refs[rawRef.k];\n if (isUnmount) {\n isArray(existing) && remove(existing, refValue);\n } else {\n if (!isArray(existing)) {\n if (_isString) {\n refs[ref] = [refValue];\n if (canSetSetupRef(ref)) {\n setupState[ref] = refs[ref];\n }\n } else {\n const newVal = [refValue];\n if (canSetRef(ref)) {\n ref.value = newVal;\n }\n if (rawRef.k) refs[rawRef.k] = newVal;\n }\n } else if (!existing.includes(refValue)) {\n existing.push(refValue);\n }\n }\n } else if (_isString) {\n refs[ref] = value;\n if (canSetSetupRef(ref)) {\n setupState[ref] = value;\n }\n } else if (_isRef) {\n if (canSetRef(ref)) {\n ref.value = value;\n }\n if (rawRef.k) refs[rawRef.k] = value;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n }\n };\n if (value) {\n const job = () => {\n doSet();\n pendingSetRefMap.delete(rawRef);\n };\n job.id = -1;\n pendingSetRefMap.set(rawRef, job);\n queuePostRenderEffect(job, parentSuspense);\n } else {\n invalidatePendingSetRef(rawRef);\n doSet();\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n }\n }\n}\nfunction invalidatePendingSetRef(rawRef) {\n const pendingSetRef = pendingSetRefMap.get(rawRef);\n if (pendingSetRef) {\n pendingSetRef.flags |= 8;\n pendingSetRefMap.delete(rawRef);\n }\n}\n\nlet hasLoggedMismatchError = false;\nconst logMismatchError = () => {\n if (hasLoggedMismatchError) {\n return;\n }\n console.error(\"Hydration completed but contains mismatches.\");\n hasLoggedMismatchError = true;\n};\nconst isSVGContainer = (container) => container.namespaceURI.includes(\"svg\") && container.tagName !== \"foreignObject\";\nconst isMathMLContainer = (container) => container.namespaceURI.includes(\"MathML\");\nconst getContainerType = (container) => {\n if (container.nodeType !== 1) return void 0;\n if (isSVGContainer(container)) return \"svg\";\n if (isMathMLContainer(container)) return \"mathml\";\n return void 0;\n};\nconst isComment = (node) => node.nodeType === 8;\nfunction createHydrationFunctions(rendererInternals) {\n const {\n mt: mountComponent,\n p: patch,\n o: {\n patchProp,\n createText,\n nextSibling,\n parentNode,\n remove,\n insert,\n createComment\n }\n } = rendererInternals;\n const hydrate = (vnode, container) => {\n if (!container.hasChildNodes()) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Attempting to hydrate existing markup but container is empty. Performing full mount instead.`\n );\n patch(null, vnode, container);\n flushPostFlushCbs();\n container._vnode = vnode;\n return;\n }\n hydrateNode(container.firstChild, vnode, null, null, null);\n flushPostFlushCbs();\n container._vnode = vnode;\n };\n const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {\n optimized = optimized || !!vnode.dynamicChildren;\n const isFragmentStart = isComment(node) && node.data === \"[\";\n const onMismatch = () => handleMismatch(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n isFragmentStart\n );\n const { type, ref, shapeFlag, patchFlag } = vnode;\n let domType = node.nodeType;\n vnode.el = node;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n def(node, \"__vnode\", vnode, true);\n def(node, \"__vueParentComponent\", parentComponent, true);\n }\n if (patchFlag === -2) {\n optimized = false;\n vnode.dynamicChildren = null;\n }\n let nextNode = null;\n switch (type) {\n case Text:\n if (domType !== 3) {\n if (vnode.children === \"\") {\n insert(vnode.el = createText(\"\"), parentNode(node), node);\n nextNode = node;\n } else {\n nextNode = onMismatch();\n }\n } else {\n if (node.data !== vnode.children) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration text mismatch in`,\n node.parentNode,\n `\n - rendered on server: ${JSON.stringify(\n node.data\n )}\n - expected on client: ${JSON.stringify(vnode.children)}`\n );\n logMismatchError();\n node.data = vnode.children;\n }\n nextNode = nextSibling(node);\n }\n break;\n case Comment:\n if (isTemplateNode(node)) {\n nextNode = nextSibling(node);\n replaceNode(\n vnode.el = node.content.firstChild,\n node,\n parentComponent\n );\n } else if (domType !== 8 || isFragmentStart) {\n nextNode = onMismatch();\n } else {\n nextNode = nextSibling(node);\n }\n break;\n case Static:\n if (isFragmentStart) {\n node = nextSibling(node);\n domType = node.nodeType;\n }\n if (domType === 1 || domType === 3) {\n nextNode = node;\n const needToAdoptContent = !vnode.children.length;\n for (let i = 0; i < vnode.staticCount; i++) {\n if (needToAdoptContent)\n vnode.children += nextNode.nodeType === 1 ? nextNode.outerHTML : nextNode.data;\n if (i === vnode.staticCount - 1) {\n vnode.anchor = nextNode;\n }\n nextNode = nextSibling(nextNode);\n }\n return isFragmentStart ? nextSibling(nextNode) : nextNode;\n } else {\n onMismatch();\n }\n break;\n case Fragment:\n if (!isFragmentStart) {\n nextNode = onMismatch();\n } else {\n nextNode = hydrateFragment(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n break;\n default:\n if (shapeFlag & 1) {\n if ((domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) && !isTemplateNode(node)) {\n nextNode = onMismatch();\n } else {\n nextNode = hydrateElement(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n } else if (shapeFlag & 6) {\n vnode.slotScopeIds = slotScopeIds;\n const container = parentNode(node);\n if (isFragmentStart) {\n nextNode = locateClosingAnchor(node);\n } else if (isComment(node) && node.data === \"teleport start\") {\n nextNode = locateClosingAnchor(node, node.data, \"teleport end\");\n } else {\n nextNode = nextSibling(node);\n }\n mountComponent(\n vnode,\n container,\n null,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n optimized\n );\n if (isAsyncWrapper(vnode) && !vnode.type.__asyncResolved) {\n let subTree;\n if (isFragmentStart) {\n subTree = createVNode(Fragment);\n subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild;\n } else {\n subTree = node.nodeType === 3 ? createTextVNode(\"\") : createVNode(\"div\");\n }\n subTree.el = node;\n vnode.component.subTree = subTree;\n }\n } else if (shapeFlag & 64) {\n if (domType !== 8) {\n nextNode = onMismatch();\n } else {\n nextNode = vnode.type.hydrate(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized,\n rendererInternals,\n hydrateChildren\n );\n }\n } else if (shapeFlag & 128) {\n nextNode = vnode.type.hydrate(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n getContainerType(parentNode(node)),\n slotScopeIds,\n optimized,\n rendererInternals,\n hydrateNode\n );\n } else if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) {\n warn$1(\"Invalid HostVNode type:\", type, `(${typeof type})`);\n }\n }\n if (ref != null) {\n setRef(ref, null, parentSuspense, vnode);\n }\n return nextNode;\n };\n const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!vnode.dynamicChildren;\n const { type, props, patchFlag, shapeFlag, dirs, transition } = vnode;\n const forcePatch = type === \"input\" || type === \"option\";\n if (!!(process.env.NODE_ENV !== \"production\") || forcePatch || patchFlag !== -1) {\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n }\n let needCallTransitionHooks = false;\n if (isTemplateNode(el)) {\n needCallTransitionHooks = needTransition(\n null,\n // no need check parentSuspense in hydration\n transition\n ) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear;\n const content = el.content.firstChild;\n if (needCallTransitionHooks) {\n const cls = content.getAttribute(\"class\");\n if (cls) content.$cls = cls;\n transition.beforeEnter(content);\n }\n replaceNode(content, el, parentComponent);\n vnode.el = el = content;\n }\n if (shapeFlag & 16 && // skip if element has innerHTML / textContent\n !(props && (props.innerHTML || props.textContent))) {\n let next = hydrateChildren(\n el.firstChild,\n vnode,\n el,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n let hasWarned = false;\n while (next) {\n if (!isMismatchAllowed(el, 1 /* CHILDREN */)) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && !hasWarned) {\n warn$1(\n `Hydration children mismatch on`,\n el,\n `\nServer rendered element contains more child nodes than client vdom.`\n );\n hasWarned = true;\n }\n logMismatchError();\n }\n const cur = next;\n next = next.nextSibling;\n remove(cur);\n }\n } else if (shapeFlag & 8) {\n let clientText = vnode.children;\n if (clientText[0] === \"\\n\" && (el.tagName === \"PRE\" || el.tagName === \"TEXTAREA\")) {\n clientText = clientText.slice(1);\n }\n const { textContent } = el;\n if (textContent !== clientText && // innerHTML normalize \\r\\n or \\r into a single \\n in the DOM\n textContent !== clientText.replace(/\\r\\n|\\r/g, \"\\n\")) {\n if (!isMismatchAllowed(el, 0 /* TEXT */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration text content mismatch on`,\n el,\n `\n - rendered on server: ${textContent}\n - expected on client: ${clientText}`\n );\n logMismatchError();\n }\n el.textContent = vnode.children;\n }\n }\n if (props) {\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ || forcePatch || !optimized || patchFlag & (16 | 32)) {\n const isCustomElement = el.tagName.includes(\"-\");\n for (const key in props) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && // #11189 skip if this node has directives that have created hooks\n // as it could have mutated the DOM in any possible way\n !(dirs && dirs.some((d) => d.dir.created)) && propHasMismatch(el, key, props[key], vnode, parentComponent)) {\n logMismatchError();\n }\n if (forcePatch && (key.endsWith(\"value\") || key === \"indeterminate\") || isOn(key) && !isReservedProp(key) || // force hydrate v-bind with .prop modifiers\n key[0] === \".\" || isCustomElement && !isReservedProp(key)) {\n patchProp(el, key, null, props[key], void 0, parentComponent);\n }\n }\n } else if (props.onClick) {\n patchProp(\n el,\n \"onClick\",\n null,\n props.onClick,\n void 0,\n parentComponent\n );\n } else if (patchFlag & 4 && isReactive(props.style)) {\n for (const key in props.style) props.style[key];\n }\n }\n let vnodeHooks;\n if (vnodeHooks = props && props.onVnodeBeforeMount) {\n invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n }\n if ((vnodeHooks = props && props.onVnodeMounted) || dirs || needCallTransitionHooks) {\n queueEffectWithSuspense(() => {\n vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n needCallTransitionHooks && transition.enter(el);\n dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n }, parentSuspense);\n }\n }\n return el.nextSibling;\n };\n const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!parentVNode.dynamicChildren;\n const children = parentVNode.children;\n const l = children.length;\n let hasWarned = false;\n for (let i = 0; i < l; i++) {\n const vnode = optimized ? children[i] : children[i] = normalizeVNode(children[i]);\n const isText = vnode.type === Text;\n if (node) {\n if (isText && !optimized) {\n if (i + 1 < l && normalizeVNode(children[i + 1]).type === Text) {\n insert(\n createText(\n node.data.slice(vnode.children.length)\n ),\n container,\n nextSibling(node)\n );\n node.data = vnode.children;\n }\n }\n node = hydrateNode(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n } else if (isText && !vnode.children) {\n insert(vnode.el = createText(\"\"), container);\n } else {\n if (!isMismatchAllowed(container, 1 /* CHILDREN */)) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && !hasWarned) {\n warn$1(\n `Hydration children mismatch on`,\n container,\n `\nServer rendered element contains fewer child nodes than client vdom.`\n );\n hasWarned = true;\n }\n logMismatchError();\n }\n patch(\n null,\n vnode,\n container,\n null,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n slotScopeIds\n );\n }\n }\n return node;\n };\n const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n const { slotScopeIds: fragmentSlotScopeIds } = vnode;\n if (fragmentSlotScopeIds) {\n slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n }\n const container = parentNode(node);\n const next = hydrateChildren(\n nextSibling(node),\n vnode,\n container,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n if (next && isComment(next) && next.data === \"]\") {\n return nextSibling(vnode.anchor = next);\n } else {\n logMismatchError();\n insert(vnode.anchor = createComment(`]`), container, next);\n return next;\n }\n };\n const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {\n if (!isMismatchAllowed(node.parentElement, 1 /* CHILDREN */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration node mismatch:\n- rendered on server:`,\n node,\n node.nodeType === 3 ? `(text)` : isComment(node) && node.data === \"[\" ? `(start of fragment)` : ``,\n `\n- expected on client:`,\n vnode.type\n );\n logMismatchError();\n }\n vnode.el = null;\n if (isFragment) {\n const end = locateClosingAnchor(node);\n while (true) {\n const next2 = nextSibling(node);\n if (next2 && next2 !== end) {\n remove(next2);\n } else {\n break;\n }\n }\n }\n const next = nextSibling(node);\n const container = parentNode(node);\n remove(node);\n patch(\n null,\n vnode,\n container,\n next,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n slotScopeIds\n );\n if (parentComponent) {\n parentComponent.vnode.el = vnode.el;\n updateHOCHostEl(parentComponent, vnode.el);\n }\n return next;\n };\n const locateClosingAnchor = (node, open = \"[\", close = \"]\") => {\n let match = 0;\n while (node) {\n node = nextSibling(node);\n if (node && isComment(node)) {\n if (node.data === open) match++;\n if (node.data === close) {\n if (match === 0) {\n return nextSibling(node);\n } else {\n match--;\n }\n }\n }\n }\n return node;\n };\n const replaceNode = (newNode, oldNode, parentComponent) => {\n const parentNode2 = oldNode.parentNode;\n if (parentNode2) {\n parentNode2.replaceChild(newNode, oldNode);\n }\n let parent = parentComponent;\n while (parent) {\n if (parent.vnode.el === oldNode) {\n parent.vnode.el = parent.subTree.el = newNode;\n }\n parent = parent.parent;\n }\n };\n const isTemplateNode = (node) => {\n return node.nodeType === 1 && node.tagName === \"TEMPLATE\";\n };\n return [hydrate, hydrateNode];\n}\nfunction propHasMismatch(el, key, clientValue, vnode, instance) {\n let mismatchType;\n let mismatchKey;\n let actual;\n let expected;\n if (key === \"class\") {\n if (el.$cls) {\n actual = el.$cls;\n delete el.$cls;\n } else {\n actual = el.getAttribute(\"class\");\n }\n expected = normalizeClass(clientValue);\n if (!isSetEqual(toClassSet(actual || \"\"), toClassSet(expected))) {\n mismatchType = 2 /* CLASS */;\n mismatchKey = `class`;\n }\n } else if (key === \"style\") {\n actual = el.getAttribute(\"style\") || \"\";\n expected = isString(clientValue) ? clientValue : stringifyStyle(normalizeStyle(clientValue));\n const actualMap = toStyleMap(actual);\n const expectedMap = toStyleMap(expected);\n if (vnode.dirs) {\n for (const { dir, value } of vnode.dirs) {\n if (dir.name === \"show\" && !value) {\n expectedMap.set(\"display\", \"none\");\n }\n }\n }\n if (instance) {\n resolveCssVars(instance, vnode, expectedMap);\n }\n if (!isMapEqual(actualMap, expectedMap)) {\n mismatchType = 3 /* STYLE */;\n mismatchKey = \"style\";\n }\n } else if (el instanceof SVGElement && isKnownSvgAttr(key) || el instanceof HTMLElement && (isBooleanAttr(key) || isKnownHtmlAttr(key))) {\n if (isBooleanAttr(key)) {\n actual = el.hasAttribute(key);\n expected = includeBooleanAttr(clientValue);\n } else if (clientValue == null) {\n actual = el.hasAttribute(key);\n expected = false;\n } else {\n if (el.hasAttribute(key)) {\n actual = el.getAttribute(key);\n } else if (key === \"value\" && el.tagName === \"TEXTAREA\") {\n actual = el.value;\n } else {\n actual = false;\n }\n expected = isRenderableAttrValue(clientValue) ? String(clientValue) : false;\n }\n if (actual !== expected) {\n mismatchType = 4 /* ATTRIBUTE */;\n mismatchKey = key;\n }\n }\n if (mismatchType != null && !isMismatchAllowed(el, mismatchType)) {\n const format = (v) => v === false ? `(not rendered)` : `${mismatchKey}=\"${v}\"`;\n const preSegment = `Hydration ${MismatchTypeString[mismatchType]} mismatch on`;\n const postSegment = `\n - rendered on server: ${format(actual)}\n - expected on client: ${format(expected)}\n Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead.\n You should fix the source of the mismatch.`;\n {\n warn$1(preSegment, el, postSegment);\n }\n return true;\n }\n return false;\n}\nfunction toClassSet(str) {\n return new Set(str.trim().split(/\\s+/));\n}\nfunction isSetEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n for (const s of a) {\n if (!b.has(s)) {\n return false;\n }\n }\n return true;\n}\nfunction toStyleMap(str) {\n const styleMap = /* @__PURE__ */ new Map();\n for (const item of str.split(\";\")) {\n let [key, value] = item.split(\":\");\n key = key.trim();\n value = value && value.trim();\n if (key && value) {\n styleMap.set(key, value);\n }\n }\n return styleMap;\n}\nfunction isMapEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (value !== b.get(key)) {\n return false;\n }\n }\n return true;\n}\nfunction resolveCssVars(instance, vnode, expectedMap) {\n const root = instance.subTree;\n if (instance.getCssVars && (vnode === root || root && root.type === Fragment && root.children.includes(vnode))) {\n const cssVars = instance.getCssVars();\n for (const key in cssVars) {\n const value = normalizeCssVarValue(cssVars[key]);\n expectedMap.set(`--${getEscapedCssVarName(key, false)}`, value);\n }\n }\n if (vnode === root && instance.parent) {\n resolveCssVars(instance.parent, instance.vnode, expectedMap);\n }\n}\nconst allowMismatchAttr = \"data-allow-mismatch\";\nconst MismatchTypeString = {\n [0 /* TEXT */]: \"text\",\n [1 /* CHILDREN */]: \"children\",\n [2 /* CLASS */]: \"class\",\n [3 /* STYLE */]: \"style\",\n [4 /* ATTRIBUTE */]: \"attribute\"\n};\nfunction isMismatchAllowed(el, allowedType) {\n if (allowedType === 0 /* TEXT */ || allowedType === 1 /* CHILDREN */) {\n while (el && !el.hasAttribute(allowMismatchAttr)) {\n el = el.parentElement;\n }\n }\n const allowedAttr = el && el.getAttribute(allowMismatchAttr);\n if (allowedAttr == null) {\n return false;\n } else if (allowedAttr === \"\") {\n return true;\n } else {\n const list = allowedAttr.split(\",\");\n if (allowedType === 0 /* TEXT */ && list.includes(\"children\")) {\n return true;\n }\n return list.includes(MismatchTypeString[allowedType]);\n }\n}\n\nconst requestIdleCallback = getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1));\nconst cancelIdleCallback = getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id));\nconst hydrateOnIdle = (timeout = 1e4) => (hydrate) => {\n const id = requestIdleCallback(hydrate, { timeout });\n return () => cancelIdleCallback(id);\n};\nfunction elementIsVisibleInViewport(el) {\n const { top, left, bottom, right } = el.getBoundingClientRect();\n const { innerHeight, innerWidth } = window;\n return (top > 0 && top < innerHeight || bottom > 0 && bottom < innerHeight) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth);\n}\nconst hydrateOnVisible = (opts) => (hydrate, forEach) => {\n const ob = new IntersectionObserver((entries) => {\n for (const e of entries) {\n if (!e.isIntersecting) continue;\n ob.disconnect();\n hydrate();\n break;\n }\n }, opts);\n forEach((el) => {\n if (!(el instanceof Element)) return;\n if (elementIsVisibleInViewport(el)) {\n hydrate();\n ob.disconnect();\n return false;\n }\n ob.observe(el);\n });\n return () => ob.disconnect();\n};\nconst hydrateOnMediaQuery = (query) => (hydrate) => {\n if (query) {\n const mql = matchMedia(query);\n if (mql.matches) {\n hydrate();\n } else {\n mql.addEventListener(\"change\", hydrate, { once: true });\n return () => mql.removeEventListener(\"change\", hydrate);\n }\n }\n};\nconst hydrateOnInteraction = (interactions = []) => (hydrate, forEach) => {\n if (isString(interactions)) interactions = [interactions];\n let hasHydrated = false;\n const doHydrate = (e) => {\n if (!hasHydrated) {\n hasHydrated = true;\n teardown();\n hydrate();\n e.target.dispatchEvent(new e.constructor(e.type, e));\n }\n };\n const teardown = () => {\n forEach((el) => {\n for (const i of interactions) {\n el.removeEventListener(i, doHydrate);\n }\n });\n };\n forEach((el) => {\n for (const i of interactions) {\n el.addEventListener(i, doHydrate, { once: true });\n }\n });\n return teardown;\n};\nfunction forEachElement(node, cb) {\n if (isComment(node) && node.data === \"[\") {\n let depth = 1;\n let next = node.nextSibling;\n while (next) {\n if (next.nodeType === 1) {\n const result = cb(next);\n if (result === false) {\n break;\n }\n } else if (isComment(next)) {\n if (next.data === \"]\") {\n if (--depth === 0) break;\n } else if (next.data === \"[\") {\n depth++;\n }\n }\n next = next.nextSibling;\n }\n } else {\n cb(node);\n }\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\n// @__NO_SIDE_EFFECTS__\nfunction defineAsyncComponent(source) {\n if (isFunction(source)) {\n source = { loader: source };\n }\n const {\n loader,\n loadingComponent,\n errorComponent,\n delay = 200,\n hydrate: hydrateStrategy,\n timeout,\n // undefined = never times out\n suspensible = true,\n onError: userOnError\n } = source;\n let pendingRequest = null;\n let resolvedComp;\n let retries = 0;\n const retry = () => {\n retries++;\n pendingRequest = null;\n return load();\n };\n const load = () => {\n let thisRequest;\n return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => {\n err = err instanceof Error ? err : new Error(String(err));\n if (userOnError) {\n return new Promise((resolve, reject) => {\n const userRetry = () => resolve(retry());\n const userFail = () => reject(err);\n userOnError(err, userRetry, userFail, retries + 1);\n });\n } else {\n throw err;\n }\n }).then((comp) => {\n if (thisRequest !== pendingRequest && pendingRequest) {\n return pendingRequest;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && !comp) {\n warn$1(\n `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.`\n );\n }\n if (comp && (comp.__esModule || comp[Symbol.toStringTag] === \"Module\")) {\n comp = comp.default;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && comp && !isObject(comp) && !isFunction(comp)) {\n throw new Error(`Invalid async component load result: ${comp}`);\n }\n resolvedComp = comp;\n return comp;\n }));\n };\n return defineComponent({\n name: \"AsyncComponentWrapper\",\n __asyncLoader: load,\n __asyncHydrate(el, instance, hydrate) {\n let patched = false;\n (instance.bu || (instance.bu = [])).push(() => patched = true);\n const performHydrate = () => {\n if (patched) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Skipping lazy hydration for component '${getComponentName(resolvedComp) || resolvedComp.__file}': it was updated before lazy hydration performed.`\n );\n }\n return;\n }\n hydrate();\n };\n const doHydrate = hydrateStrategy ? () => {\n const teardown = hydrateStrategy(\n performHydrate,\n (cb) => forEachElement(el, cb)\n );\n if (teardown) {\n (instance.bum || (instance.bum = [])).push(teardown);\n }\n } : performHydrate;\n if (resolvedComp) {\n doHydrate();\n } else {\n load().then(() => !instance.isUnmounted && doHydrate());\n }\n },\n get __asyncResolved() {\n return resolvedComp;\n },\n setup() {\n const instance = currentInstance;\n markAsyncBoundary(instance);\n if (resolvedComp) {\n return () => createInnerComp(resolvedComp, instance);\n }\n const onError = (err) => {\n pendingRequest = null;\n handleError(\n err,\n instance,\n 13,\n !errorComponent\n );\n };\n if (suspensible && instance.suspense || isInSSRComponentSetup) {\n return load().then((comp) => {\n return () => createInnerComp(comp, instance);\n }).catch((err) => {\n onError(err);\n return () => errorComponent ? createVNode(errorComponent, {\n error: err\n }) : null;\n });\n }\n const loaded = ref(false);\n const error = ref();\n const delayed = ref(!!delay);\n if (delay) {\n setTimeout(() => {\n delayed.value = false;\n }, delay);\n }\n if (timeout != null) {\n setTimeout(() => {\n if (!loaded.value && !error.value) {\n const err = new Error(\n `Async component timed out after ${timeout}ms.`\n );\n onError(err);\n error.value = err;\n }\n }, timeout);\n }\n load().then(() => {\n loaded.value = true;\n if (instance.parent && isKeepAlive(instance.parent.vnode)) {\n instance.parent.update();\n }\n }).catch((err) => {\n onError(err);\n error.value = err;\n });\n return () => {\n if (loaded.value && resolvedComp) {\n return createInnerComp(resolvedComp, instance);\n } else if (error.value && errorComponent) {\n return createVNode(errorComponent, {\n error: error.value\n });\n } else if (loadingComponent && !delayed.value) {\n return createInnerComp(\n loadingComponent,\n instance\n );\n }\n };\n }\n });\n}\nfunction createInnerComp(comp, parent) {\n const { ref: ref2, props, children, ce } = parent.vnode;\n const vnode = createVNode(comp, props, children);\n vnode.ref = ref2;\n vnode.ce = ce;\n delete parent.vnode.ce;\n return vnode;\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\nconst KeepAliveImpl = {\n name: `KeepAlive`,\n // Marker for special handling inside the renderer. We are not using a ===\n // check directly on KeepAlive in the renderer, because importing it directly\n // would prevent it from being tree-shaken.\n __isKeepAlive: true,\n props: {\n include: [String, RegExp, Array],\n exclude: [String, RegExp, Array],\n max: [String, Number]\n },\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const sharedContext = instance.ctx;\n if (!sharedContext.renderer) {\n return () => {\n const children = slots.default && slots.default();\n return children && children.length === 1 ? children[0] : children;\n };\n }\n const cache = /* @__PURE__ */ new Map();\n const keys = /* @__PURE__ */ new Set();\n let current = null;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n instance.__v_cache = cache;\n }\n const parentSuspense = instance.suspense;\n const {\n renderer: {\n p: patch,\n m: move,\n um: _unmount,\n o: { createElement }\n }\n } = sharedContext;\n const storageContainer = createElement(\"div\");\n sharedContext.activate = (vnode, container, anchor, namespace, optimized) => {\n const instance2 = vnode.component;\n move(vnode, container, anchor, 0, parentSuspense);\n patch(\n instance2.vnode,\n vnode,\n container,\n anchor,\n instance2,\n parentSuspense,\n namespace,\n vnode.slotScopeIds,\n optimized\n );\n queuePostRenderEffect(() => {\n instance2.isDeactivated = false;\n if (instance2.a) {\n invokeArrayFns(instance2.a);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n };\n sharedContext.deactivate = (vnode) => {\n const instance2 = vnode.component;\n invalidateMount(instance2.m);\n invalidateMount(instance2.a);\n move(vnode, storageContainer, null, 1, parentSuspense);\n queuePostRenderEffect(() => {\n if (instance2.da) {\n invokeArrayFns(instance2.da);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n instance2.isDeactivated = true;\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n if (!!(process.env.NODE_ENV !== \"production\") && true) {\n instance2.__keepAliveStorageContainer = storageContainer;\n }\n };\n function unmount(vnode) {\n resetShapeFlag(vnode);\n _unmount(vnode, instance, parentSuspense, true);\n }\n function pruneCache(filter) {\n cache.forEach((vnode, key) => {\n const name = getComponentName(\n isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : vnode.type\n );\n if (name && !filter(name)) {\n pruneCacheEntry(key);\n }\n });\n }\n function pruneCacheEntry(key) {\n const cached = cache.get(key);\n if (cached && (!current || !isSameVNodeType(cached, current))) {\n unmount(cached);\n } else if (current) {\n resetShapeFlag(current);\n }\n cache.delete(key);\n keys.delete(key);\n }\n watch(\n () => [props.include, props.exclude],\n ([include, exclude]) => {\n include && pruneCache((name) => matches(include, name));\n exclude && pruneCache((name) => !matches(exclude, name));\n },\n // prune post-render after `current` has been updated\n { flush: \"post\", deep: true }\n );\n let pendingCacheKey = null;\n const cacheSubtree = () => {\n if (pendingCacheKey != null) {\n if (isSuspense(instance.subTree.type)) {\n queuePostRenderEffect(() => {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }, instance.subTree.suspense);\n } else {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }\n }\n };\n onMounted(cacheSubtree);\n onUpdated(cacheSubtree);\n onBeforeUnmount(() => {\n cache.forEach((cached) => {\n const { subTree, suspense } = instance;\n const vnode = getInnerChild(subTree);\n if (cached.type === vnode.type && cached.key === vnode.key) {\n resetShapeFlag(vnode);\n const da = vnode.component.da;\n da && queuePostRenderEffect(da, suspense);\n return;\n }\n unmount(cached);\n });\n });\n return () => {\n pendingCacheKey = null;\n if (!slots.default) {\n return current = null;\n }\n const children = slots.default();\n const rawVNode = children[0];\n if (children.length > 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`KeepAlive should contain exactly one component child.`);\n }\n current = null;\n return children;\n } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) {\n current = null;\n return rawVNode;\n }\n let vnode = getInnerChild(rawVNode);\n if (vnode.type === Comment) {\n current = null;\n return vnode;\n }\n const comp = vnode.type;\n const name = getComponentName(\n isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp\n );\n const { include, exclude, max } = props;\n if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) {\n vnode.shapeFlag &= -257;\n current = vnode;\n return rawVNode;\n }\n const key = vnode.key == null ? comp : vnode.key;\n const cachedVNode = cache.get(key);\n if (vnode.el) {\n vnode = cloneVNode(vnode);\n if (rawVNode.shapeFlag & 128) {\n rawVNode.ssContent = vnode;\n }\n }\n pendingCacheKey = key;\n if (cachedVNode) {\n vnode.el = cachedVNode.el;\n vnode.component = cachedVNode.component;\n if (vnode.transition) {\n setTransitionHooks(vnode, vnode.transition);\n }\n vnode.shapeFlag |= 512;\n keys.delete(key);\n keys.add(key);\n } else {\n keys.add(key);\n if (max && keys.size > parseInt(max, 10)) {\n pruneCacheEntry(keys.values().next().value);\n }\n }\n vnode.shapeFlag |= 256;\n current = vnode;\n return isSuspense(rawVNode.type) ? rawVNode : vnode;\n };\n }\n};\nconst KeepAlive = KeepAliveImpl;\nfunction matches(pattern, name) {\n if (isArray(pattern)) {\n return pattern.some((p) => matches(p, name));\n } else if (isString(pattern)) {\n return pattern.split(\",\").includes(name);\n } else if (isRegExp(pattern)) {\n pattern.lastIndex = 0;\n return pattern.test(name);\n }\n return false;\n}\nfunction onActivated(hook, target) {\n registerKeepAliveHook(hook, \"a\", target);\n}\nfunction onDeactivated(hook, target) {\n registerKeepAliveHook(hook, \"da\", target);\n}\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\n const wrappedHook = hook.__wdc || (hook.__wdc = () => {\n let current = target;\n while (current) {\n if (current.isDeactivated) {\n return;\n }\n current = current.parent;\n }\n return hook();\n });\n injectHook(type, wrappedHook, target);\n if (target) {\n let current = target.parent;\n while (current && current.parent) {\n if (isKeepAlive(current.parent.vnode)) {\n injectToKeepAliveRoot(wrappedHook, type, target, current);\n }\n current = current.parent;\n }\n }\n}\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n const injected = injectHook(\n type,\n hook,\n keepAliveRoot,\n true\n /* prepend */\n );\n onUnmounted(() => {\n remove(keepAliveRoot[type], injected);\n }, target);\n}\nfunction resetShapeFlag(vnode) {\n vnode.shapeFlag &= -257;\n vnode.shapeFlag &= -513;\n}\nfunction getInnerChild(vnode) {\n return vnode.shapeFlag & 128 ? vnode.ssContent : vnode;\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\n if (target) {\n const hooks = target[type] || (target[type] = []);\n const wrappedHook = hook.__weh || (hook.__weh = (...args) => {\n pauseTracking();\n const reset = setCurrentInstance(target);\n const res = callWithAsyncErrorHandling(hook, target, type, args);\n reset();\n resetTracking();\n return res;\n });\n if (prepend) {\n hooks.unshift(wrappedHook);\n } else {\n hooks.push(wrappedHook);\n }\n return wrappedHook;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, \"\"));\n warn$1(\n `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().` + (` If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` )\n );\n }\n}\nconst createHook = (lifecycle) => (hook, target = currentInstance) => {\n if (!isInSSRComponentSetup || lifecycle === \"sp\") {\n injectHook(lifecycle, (...args) => hook(...args), target);\n }\n};\nconst onBeforeMount = createHook(\"bm\");\nconst onMounted = createHook(\"m\");\nconst onBeforeUpdate = createHook(\n \"bu\"\n);\nconst onUpdated = createHook(\"u\");\nconst onBeforeUnmount = createHook(\n \"bum\"\n);\nconst onUnmounted = createHook(\"um\");\nconst onServerPrefetch = createHook(\n \"sp\"\n);\nconst onRenderTriggered = createHook(\"rtg\");\nconst onRenderTracked = createHook(\"rtc\");\nfunction onErrorCaptured(hook, target = currentInstance) {\n injectHook(\"ec\", hook, target);\n}\n\nconst COMPONENTS = \"components\";\nconst DIRECTIVES = \"directives\";\nfunction resolveComponent(name, maybeSelfReference) {\n return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\n}\nconst NULL_DYNAMIC_COMPONENT = /* @__PURE__ */ Symbol.for(\"v-ndc\");\nfunction resolveDynamicComponent(component) {\n if (isString(component)) {\n return resolveAsset(COMPONENTS, component, false) || component;\n } else {\n return component || NULL_DYNAMIC_COMPONENT;\n }\n}\nfunction resolveDirective(name) {\n return resolveAsset(DIRECTIVES, name);\n}\nfunction resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\n const instance = currentRenderingInstance || currentInstance;\n if (instance) {\n const Component = instance.type;\n if (type === COMPONENTS) {\n const selfName = getComponentName(\n Component,\n false\n );\n if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {\n return Component;\n }\n }\n const res = (\n // local registration\n // check instance[type] first which is resolved for options API\n resolve(instance[type] || Component[type], name) || // global registration\n resolve(instance.appContext[type], name)\n );\n if (!res && maybeSelfReference) {\n return Component;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && warnMissing && !res) {\n const extra = type === COMPONENTS ? `\nIf this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;\n warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);\n }\n return res;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`\n );\n }\n}\nfunction resolve(registry, name) {\n return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);\n}\n\nfunction renderList(source, renderItem, cache, index) {\n let ret;\n const cached = cache && cache[index];\n const sourceIsArray = isArray(source);\n if (sourceIsArray || isString(source)) {\n const sourceIsReactiveArray = sourceIsArray && isReactive(source);\n let needsWrap = false;\n let isReadonlySource = false;\n if (sourceIsReactiveArray) {\n needsWrap = !isShallow(source);\n isReadonlySource = isReadonly(source);\n source = shallowReadArray(source);\n }\n ret = new Array(source.length);\n for (let i = 0, l = source.length; i < l; i++) {\n ret[i] = renderItem(\n needsWrap ? isReadonlySource ? toReadonly(toReactive(source[i])) : toReactive(source[i]) : source[i],\n i,\n void 0,\n cached && cached[i]\n );\n }\n } else if (typeof source === \"number\") {\n if (!!(process.env.NODE_ENV !== \"production\") && !Number.isInteger(source)) {\n warn$1(`The v-for range expect an integer value but got ${source}.`);\n }\n ret = new Array(source);\n for (let i = 0; i < source; i++) {\n ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]);\n }\n } else if (isObject(source)) {\n if (source[Symbol.iterator]) {\n ret = Array.from(\n source,\n (item, i) => renderItem(item, i, void 0, cached && cached[i])\n );\n } else {\n const keys = Object.keys(source);\n ret = new Array(keys.length);\n for (let i = 0, l = keys.length; i < l; i++) {\n const key = keys[i];\n ret[i] = renderItem(source[key], key, i, cached && cached[i]);\n }\n }\n } else {\n ret = [];\n }\n if (cache) {\n cache[index] = ret;\n }\n return ret;\n}\n\nfunction createSlots(slots, dynamicSlots) {\n for (let i = 0; i < dynamicSlots.length; i++) {\n const slot = dynamicSlots[i];\n if (isArray(slot)) {\n for (let j = 0; j < slot.length; j++) {\n slots[slot[j].name] = slot[j].fn;\n }\n } else if (slot) {\n slots[slot.name] = slot.key ? (...args) => {\n const res = slot.fn(...args);\n if (res) res.key = slot.key;\n return res;\n } : slot.fn;\n }\n }\n return slots;\n}\n\nfunction renderSlot(slots, name, props = {}, fallback, noSlotted) {\n if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) {\n const hasProps = Object.keys(props).length > 0;\n if (name !== \"default\") props.name = name;\n return openBlock(), createBlock(\n Fragment,\n null,\n [createVNode(\"slot\", props, fallback && fallback())],\n hasProps ? -2 : 64\n );\n }\n let slot = slots[name];\n if (!!(process.env.NODE_ENV !== \"production\") && slot && slot.length > 1) {\n warn$1(\n `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.`\n );\n slot = () => [];\n }\n if (slot && slot._c) {\n slot._d = false;\n }\n openBlock();\n const validSlotContent = slot && ensureValidVNode(slot(props));\n const slotKey = props.key || // slot content array of a dynamic conditional slot may have a branch\n // key attached in the `createSlots` helper, respect that\n validSlotContent && validSlotContent.key;\n const rendered = createBlock(\n Fragment,\n {\n key: (slotKey && !isSymbol(slotKey) ? slotKey : `_${name}`) + // #7256 force differentiate fallback content from actual content\n (!validSlotContent && fallback ? \"_fb\" : \"\")\n },\n validSlotContent || (fallback ? fallback() : []),\n validSlotContent && slots._ === 1 ? 64 : -2\n );\n if (!noSlotted && rendered.scopeId) {\n rendered.slotScopeIds = [rendered.scopeId + \"-s\"];\n }\n if (slot && slot._c) {\n slot._d = true;\n }\n return rendered;\n}\nfunction ensureValidVNode(vnodes) {\n return vnodes.some((child) => {\n if (!isVNode(child)) return true;\n if (child.type === Comment) return false;\n if (child.type === Fragment && !ensureValidVNode(child.children))\n return false;\n return true;\n }) ? vnodes : null;\n}\n\nfunction toHandlers(obj, preserveCaseIfNecessary) {\n const ret = {};\n if (!!(process.env.NODE_ENV !== \"production\") && !isObject(obj)) {\n warn$1(`v-on with no argument expects an object value.`);\n return ret;\n }\n for (const key in obj) {\n ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key];\n }\n return ret;\n}\n\nconst getPublicInstance = (i) => {\n if (!i) return null;\n if (isStatefulComponent(i)) return getComponentPublicInstance(i);\n return getPublicInstance(i.parent);\n};\nconst publicPropertiesMap = (\n // Move PURE marker to new line to workaround compiler discarding it\n // due to type annotation\n /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {\n $: (i) => i,\n $el: (i) => i.vnode.el,\n $data: (i) => i.data,\n $props: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.props) : i.props,\n $attrs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.attrs) : i.attrs,\n $slots: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.slots) : i.slots,\n $refs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.refs) : i.refs,\n $parent: (i) => getPublicInstance(i.parent),\n $root: (i) => getPublicInstance(i.root),\n $host: (i) => i.ce,\n $emit: (i) => i.emit,\n $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type,\n $forceUpdate: (i) => i.f || (i.f = () => {\n queueJob(i.update);\n }),\n $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)),\n $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP\n })\n);\nconst isReservedPrefix = (key) => key === \"_\" || key === \"$\";\nconst hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);\nconst PublicInstanceProxyHandlers = {\n get({ _: instance }, key) {\n if (key === \"__v_skip\") {\n return true;\n }\n const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n if (!!(process.env.NODE_ENV !== \"production\") && key === \"__isVue\") {\n return true;\n }\n if (key[0] !== \"$\") {\n const n = accessCache[key];\n if (n !== void 0) {\n switch (n) {\n case 1 /* SETUP */:\n return setupState[key];\n case 2 /* DATA */:\n return data[key];\n case 4 /* CONTEXT */:\n return ctx[key];\n case 3 /* PROPS */:\n return props[key];\n }\n } else if (hasSetupBinding(setupState, key)) {\n accessCache[key] = 1 /* SETUP */;\n return setupState[key];\n } else if (__VUE_OPTIONS_API__ && data !== EMPTY_OBJ && hasOwn(data, key)) {\n accessCache[key] = 2 /* DATA */;\n return data[key];\n } else if (hasOwn(props, key)) {\n accessCache[key] = 3 /* PROPS */;\n return props[key];\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) {\n accessCache[key] = 0 /* OTHER */;\n }\n }\n const publicGetter = publicPropertiesMap[key];\n let cssModule, globalProperties;\n if (publicGetter) {\n if (key === \"$attrs\") {\n track(instance.attrs, \"get\", \"\");\n !!(process.env.NODE_ENV !== \"production\") && markAttrsAccessed();\n } else if (!!(process.env.NODE_ENV !== \"production\") && key === \"$slots\") {\n track(instance, \"get\", key);\n }\n return publicGetter(instance);\n } else if (\n // css module (injected by vue-loader)\n (cssModule = type.__cssModules) && (cssModule = cssModule[key])\n ) {\n return cssModule;\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (\n // global properties\n globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)\n ) {\n {\n return globalProperties[key];\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading\n // to infinite warning loop\n key.indexOf(\"__v\") !== 0)) {\n if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {\n warn$1(\n `Property ${JSON.stringify(\n key\n )} must be accessed via $data because it starts with a reserved character (\"$\" or \"_\") and is not proxied on the render context.`\n );\n } else if (instance === currentRenderingInstance) {\n warn$1(\n `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`\n );\n }\n }\n },\n set({ _: instance }, key, value) {\n const { data, setupState, ctx } = instance;\n if (hasSetupBinding(setupState, key)) {\n setupState[key] = value;\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup && hasOwn(setupState, key)) {\n warn$1(`Cannot mutate <script setup> binding \"${key}\" from Options API.`);\n return false;\n } else if (__VUE_OPTIONS_API__ && data !== EMPTY_OBJ && hasOwn(data, key)) {\n data[key] = value;\n return true;\n } else if (hasOwn(instance.props, key)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`Attempting to mutate prop \"${key}\". Props are readonly.`);\n return false;\n }\n if (key[0] === \"$\" && key.slice(1) in instance) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Attempting to mutate public property \"${key}\". Properties starting with $ are reserved and readonly.`\n );\n return false;\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && key in instance.appContext.config.globalProperties) {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n value\n });\n } else {\n ctx[key] = value;\n }\n }\n return true;\n },\n has({\n _: { data, setupState, accessCache, ctx, appContext, props, type }\n }, key) {\n let cssModules;\n return !!(accessCache[key] || __VUE_OPTIONS_API__ && data !== EMPTY_OBJ && key[0] !== \"$\" && hasOwn(data, key) || hasSetupBinding(setupState, key) || hasOwn(props, key) || hasOwn(ctx, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key) || (cssModules = type.__cssModules) && cssModules[key]);\n },\n defineProperty(target, key, descriptor) {\n if (descriptor.get != null) {\n target._.accessCache[key] = 0;\n } else if (hasOwn(descriptor, \"value\")) {\n this.set(target, key, descriptor.value, null);\n }\n return Reflect.defineProperty(target, key, descriptor);\n }\n};\nif (!!(process.env.NODE_ENV !== \"production\") && true) {\n PublicInstanceProxyHandlers.ownKeys = (target) => {\n warn$1(\n `Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead.`\n );\n return Reflect.ownKeys(target);\n };\n}\nconst RuntimeCompiledPublicInstanceProxyHandlers = /* @__PURE__ */ extend({}, PublicInstanceProxyHandlers, {\n get(target, key) {\n if (key === Symbol.unscopables) {\n return;\n }\n return PublicInstanceProxyHandlers.get(target, key, target);\n },\n has(_, key) {\n const has = key[0] !== \"_\" && !isGloballyAllowed(key);\n if (!!(process.env.NODE_ENV !== \"production\") && !has && PublicInstanceProxyHandlers.has(_, key)) {\n warn$1(\n `Property ${JSON.stringify(\n key\n )} should not start with _ which is a reserved prefix for Vue internals.`\n );\n }\n return has;\n }\n});\nfunction createDevRenderContext(instance) {\n const target = {};\n Object.defineProperty(target, `_`, {\n configurable: true,\n enumerable: false,\n get: () => instance\n });\n Object.keys(publicPropertiesMap).forEach((key) => {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: false,\n get: () => publicPropertiesMap[key](instance),\n // intercepted by the proxy so no need for implementation,\n // but needed to prevent set errors\n set: NOOP\n });\n });\n return target;\n}\nfunction exposePropsOnRenderContext(instance) {\n const {\n ctx,\n propsOptions: [propsOptions]\n } = instance;\n if (propsOptions) {\n Object.keys(propsOptions).forEach((key) => {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => instance.props[key],\n set: NOOP\n });\n });\n }\n}\nfunction exposeSetupStateOnRenderContext(instance) {\n const { ctx, setupState } = instance;\n Object.keys(toRaw(setupState)).forEach((key) => {\n if (!setupState.__isScriptSetup) {\n if (isReservedPrefix(key[0])) {\n warn$1(\n `setup() return property ${JSON.stringify(\n key\n )} should not start with \"$\" or \"_\" which are reserved prefixes for Vue internals.`\n );\n return;\n }\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => setupState[key],\n set: NOOP\n });\n }\n });\n}\n\nconst warnRuntimeUsage = (method) => warn$1(\n `${method}() is a compiler-hint helper that is only usable inside <script setup> of a single file component. Its arguments should be compiled away and passing it at runtime has no effect.`\n);\nfunction defineProps() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineProps`);\n }\n return null;\n}\nfunction defineEmits() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineEmits`);\n }\n return null;\n}\nfunction defineExpose(exposed) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineExpose`);\n }\n}\nfunction defineOptions(options) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineOptions`);\n }\n}\nfunction defineSlots() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineSlots`);\n }\n return null;\n}\nfunction defineModel() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(\"defineModel\");\n }\n}\nfunction withDefaults(props, defaults) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`withDefaults`);\n }\n return null;\n}\nfunction useSlots() {\n return getContext(\"useSlots\").slots;\n}\nfunction useAttrs() {\n return getContext(\"useAttrs\").attrs;\n}\nfunction getContext(calledFunctionName) {\n const i = getCurrentInstance();\n if (!!(process.env.NODE_ENV !== \"production\") && !i) {\n warn$1(`${calledFunctionName}() called without active instance.`);\n }\n return i.setupContext || (i.setupContext = createSetupContext(i));\n}\nfunction normalizePropsOrEmits(props) {\n return isArray(props) ? props.reduce(\n (normalized, p) => (normalized[p] = null, normalized),\n {}\n ) : props;\n}\nfunction mergeDefaults(raw, defaults) {\n const props = normalizePropsOrEmits(raw);\n for (const key in defaults) {\n if (key.startsWith(\"__skip\")) continue;\n let opt = props[key];\n if (opt) {\n if (isArray(opt) || isFunction(opt)) {\n opt = props[key] = { type: opt, default: defaults[key] };\n } else {\n opt.default = defaults[key];\n }\n } else if (opt === null) {\n opt = props[key] = { default: defaults[key] };\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`props default key \"${key}\" has no corresponding declaration.`);\n }\n if (opt && defaults[`__skip_${key}`]) {\n opt.skipFactory = true;\n }\n }\n return props;\n}\nfunction mergeModels(a, b) {\n if (!a || !b) return a || b;\n if (isArray(a) && isArray(b)) return a.concat(b);\n return extend({}, normalizePropsOrEmits(a), normalizePropsOrEmits(b));\n}\nfunction createPropsRestProxy(props, excludedKeys) {\n const ret = {};\n for (const key in props) {\n if (!excludedKeys.includes(key)) {\n Object.defineProperty(ret, key, {\n enumerable: true,\n get: () => props[key]\n });\n }\n }\n return ret;\n}\nfunction withAsyncContext(getAwaitable) {\n const ctx = getCurrentInstance();\n if (!!(process.env.NODE_ENV !== \"production\") && !ctx) {\n warn$1(\n `withAsyncContext called without active current instance. This is likely a bug.`\n );\n }\n let awaitable = getAwaitable();\n unsetCurrentInstance();\n if (isPromise(awaitable)) {\n awaitable = awaitable.catch((e) => {\n setCurrentInstance(ctx);\n throw e;\n });\n }\n return [awaitable, () => setCurrentInstance(ctx)];\n}\n\nfunction createDuplicateChecker() {\n const cache = /* @__PURE__ */ Object.create(null);\n return (type, key) => {\n if (cache[key]) {\n warn$1(`${type} property \"${key}\" is already defined in ${cache[key]}.`);\n } else {\n cache[key] = type;\n }\n };\n}\nlet shouldCacheAccess = true;\nfunction applyOptions(instance) {\n const options = resolveMergedOptions(instance);\n const publicThis = instance.proxy;\n const ctx = instance.ctx;\n shouldCacheAccess = false;\n if (options.beforeCreate) {\n callHook(options.beforeCreate, instance, \"bc\");\n }\n const {\n // state\n data: dataOptions,\n computed: computedOptions,\n methods,\n watch: watchOptions,\n provide: provideOptions,\n inject: injectOptions,\n // lifecycle\n created,\n beforeMount,\n mounted,\n beforeUpdate,\n updated,\n activated,\n deactivated,\n beforeDestroy,\n beforeUnmount,\n destroyed,\n unmounted,\n render,\n renderTracked,\n renderTriggered,\n errorCaptured,\n serverPrefetch,\n // public API\n expose,\n inheritAttrs,\n // assets\n components,\n directives,\n filters\n } = options;\n const checkDuplicateProperties = !!(process.env.NODE_ENV !== \"production\") ? createDuplicateChecker() : null;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const [propsOptions] = instance.propsOptions;\n if (propsOptions) {\n for (const key in propsOptions) {\n checkDuplicateProperties(\"Props\" /* PROPS */, key);\n }\n }\n }\n if (injectOptions) {\n resolveInjections(injectOptions, ctx, checkDuplicateProperties);\n }\n if (methods) {\n for (const key in methods) {\n const methodHandler = methods[key];\n if (isFunction(methodHandler)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n Object.defineProperty(ctx, key, {\n value: methodHandler.bind(publicThis),\n configurable: true,\n enumerable: true,\n writable: true\n });\n } else {\n ctx[key] = methodHandler.bind(publicThis);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n checkDuplicateProperties(\"Methods\" /* METHODS */, key);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Method \"${key}\" has type \"${typeof methodHandler}\" in the component definition. Did you reference the function correctly?`\n );\n }\n }\n }\n if (dataOptions) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isFunction(dataOptions)) {\n warn$1(\n `The data option must be a function. Plain object usage is no longer supported.`\n );\n }\n const data = dataOptions.call(publicThis, publicThis);\n if (!!(process.env.NODE_ENV !== \"production\") && isPromise(data)) {\n warn$1(\n `data() returned a Promise - note data() cannot be async; If you intend to perform data fetching before component renders, use async setup() + <Suspense>.`\n );\n }\n if (!isObject(data)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`data() should return an object.`);\n } else {\n instance.data = reactive(data);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n for (const key in data) {\n checkDuplicateProperties(\"Data\" /* DATA */, key);\n if (!isReservedPrefix(key[0])) {\n Object.defineProperty(ctx, key, {\n configurable: true,\n enumerable: true,\n get: () => data[key],\n set: NOOP\n });\n }\n }\n }\n }\n }\n shouldCacheAccess = true;\n if (computedOptions) {\n for (const key in computedOptions) {\n const opt = computedOptions[key];\n const get = isFunction(opt) ? opt.bind(publicThis, publicThis) : isFunction(opt.get) ? opt.get.bind(publicThis, publicThis) : NOOP;\n if (!!(process.env.NODE_ENV !== \"production\") && get === NOOP) {\n warn$1(`Computed property \"${key}\" has no getter.`);\n }\n const set = !isFunction(opt) && isFunction(opt.set) ? opt.set.bind(publicThis) : !!(process.env.NODE_ENV !== \"production\") ? () => {\n warn$1(\n `Write operation failed: computed property \"${key}\" is readonly.`\n );\n } : NOOP;\n const c = computed({\n get,\n set\n });\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => c.value,\n set: (v) => c.value = v\n });\n if (!!(process.env.NODE_ENV !== \"production\")) {\n checkDuplicateProperties(\"Computed\" /* COMPUTED */, key);\n }\n }\n }\n if (watchOptions) {\n for (const key in watchOptions) {\n createWatcher(watchOptions[key], ctx, publicThis, key);\n }\n }\n if (provideOptions) {\n const provides = isFunction(provideOptions) ? provideOptions.call(publicThis) : provideOptions;\n Reflect.ownKeys(provides).forEach((key) => {\n provide(key, provides[key]);\n });\n }\n if (created) {\n callHook(created, instance, \"c\");\n }\n function registerLifecycleHook(register, hook) {\n if (isArray(hook)) {\n hook.forEach((_hook) => register(_hook.bind(publicThis)));\n } else if (hook) {\n register(hook.bind(publicThis));\n }\n }\n registerLifecycleHook(onBeforeMount, beforeMount);\n registerLifecycleHook(onMounted, mounted);\n registerLifecycleHook(onBeforeUpdate, beforeUpdate);\n registerLifecycleHook(onUpdated, updated);\n registerLifecycleHook(onActivated, activated);\n registerLifecycleHook(onDeactivated, deactivated);\n registerLifecycleHook(onErrorCaptured, errorCaptured);\n registerLifecycleHook(onRenderTracked, renderTracked);\n registerLifecycleHook(onRenderTriggered, renderTriggered);\n registerLifecycleHook(onBeforeUnmount, beforeUnmount);\n registerLifecycleHook(onUnmounted, unmounted);\n registerLifecycleHook(onServerPrefetch, serverPrefetch);\n if (isArray(expose)) {\n if (expose.length) {\n const exposed = instance.exposed || (instance.exposed = {});\n expose.forEach((key) => {\n Object.defineProperty(exposed, key, {\n get: () => publicThis[key],\n set: (val) => publicThis[key] = val,\n enumerable: true\n });\n });\n } else if (!instance.exposed) {\n instance.exposed = {};\n }\n }\n if (render && instance.render === NOOP) {\n instance.render = render;\n }\n if (inheritAttrs != null) {\n instance.inheritAttrs = inheritAttrs;\n }\n if (components) instance.components = components;\n if (directives) instance.directives = directives;\n if (serverPrefetch) {\n markAsyncBoundary(instance);\n }\n}\nfunction resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP) {\n if (isArray(injectOptions)) {\n injectOptions = normalizeInject(injectOptions);\n }\n for (const key in injectOptions) {\n const opt = injectOptions[key];\n let injected;\n if (isObject(opt)) {\n if (\"default\" in opt) {\n injected = inject(\n opt.from || key,\n opt.default,\n true\n );\n } else {\n injected = inject(opt.from || key);\n }\n } else {\n injected = inject(opt);\n }\n if (isRef(injected)) {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => injected.value,\n set: (v) => injected.value = v\n });\n } else {\n ctx[key] = injected;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n checkDuplicateProperties(\"Inject\" /* INJECT */, key);\n }\n }\n}\nfunction callHook(hook, instance, type) {\n callWithAsyncErrorHandling(\n isArray(hook) ? hook.map((h) => h.bind(instance.proxy)) : hook.bind(instance.proxy),\n instance,\n type\n );\n}\nfunction createWatcher(raw, ctx, publicThis, key) {\n let getter = key.includes(\".\") ? createPathGetter(publicThis, key) : () => publicThis[key];\n if (isString(raw)) {\n const handler = ctx[raw];\n if (isFunction(handler)) {\n {\n watch(getter, handler);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid watch handler specified by key \"${raw}\"`, handler);\n }\n } else if (isFunction(raw)) {\n {\n watch(getter, raw.bind(publicThis));\n }\n } else if (isObject(raw)) {\n if (isArray(raw)) {\n raw.forEach((r) => createWatcher(r, ctx, publicThis, key));\n } else {\n const handler = isFunction(raw.handler) ? raw.handler.bind(publicThis) : ctx[raw.handler];\n if (isFunction(handler)) {\n watch(getter, handler, raw);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid watch handler specified by key \"${raw.handler}\"`, handler);\n }\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid watch option: \"${key}\"`, raw);\n }\n}\nfunction resolveMergedOptions(instance) {\n const base = instance.type;\n const { mixins, extends: extendsOptions } = base;\n const {\n mixins: globalMixins,\n optionsCache: cache,\n config: { optionMergeStrategies }\n } = instance.appContext;\n const cached = cache.get(base);\n let resolved;\n if (cached) {\n resolved = cached;\n } else if (!globalMixins.length && !mixins && !extendsOptions) {\n {\n resolved = base;\n }\n } else {\n resolved = {};\n if (globalMixins.length) {\n globalMixins.forEach(\n (m) => mergeOptions(resolved, m, optionMergeStrategies, true)\n );\n }\n mergeOptions(resolved, base, optionMergeStrategies);\n }\n if (isObject(base)) {\n cache.set(base, resolved);\n }\n return resolved;\n}\nfunction mergeOptions(to, from, strats, asMixin = false) {\n const { mixins, extends: extendsOptions } = from;\n if (extendsOptions) {\n mergeOptions(to, extendsOptions, strats, true);\n }\n if (mixins) {\n mixins.forEach(\n (m) => mergeOptions(to, m, strats, true)\n );\n }\n for (const key in from) {\n if (asMixin && key === \"expose\") {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `\"expose\" option is ignored when declared in mixins or extends. It should only be declared in the base component itself.`\n );\n } else {\n const strat = internalOptionMergeStrats[key] || strats && strats[key];\n to[key] = strat ? strat(to[key], from[key]) : from[key];\n }\n }\n return to;\n}\nconst internalOptionMergeStrats = {\n data: mergeDataFn,\n props: mergeEmitsOrPropsOptions,\n emits: mergeEmitsOrPropsOptions,\n // objects\n methods: mergeObjectOptions,\n computed: mergeObjectOptions,\n // lifecycle\n beforeCreate: mergeAsArray,\n created: mergeAsArray,\n beforeMount: mergeAsArray,\n mounted: mergeAsArray,\n beforeUpdate: mergeAsArray,\n updated: mergeAsArray,\n beforeDestroy: mergeAsArray,\n beforeUnmount: mergeAsArray,\n destroyed: mergeAsArray,\n unmounted: mergeAsArray,\n activated: mergeAsArray,\n deactivated: mergeAsArray,\n errorCaptured: mergeAsArray,\n serverPrefetch: mergeAsArray,\n // assets\n components: mergeObjectOptions,\n directives: mergeObjectOptions,\n // watch\n watch: mergeWatchOptions,\n // provide / inject\n provide: mergeDataFn,\n inject: mergeInject\n};\nfunction mergeDataFn(to, from) {\n if (!from) {\n return to;\n }\n if (!to) {\n return from;\n }\n return function mergedDataFn() {\n return (extend)(\n isFunction(to) ? to.call(this, this) : to,\n isFunction(from) ? from.call(this, this) : from\n );\n };\n}\nfunction mergeInject(to, from) {\n return mergeObjectOptions(normalizeInject(to), normalizeInject(from));\n}\nfunction normalizeInject(raw) {\n if (isArray(raw)) {\n const res = {};\n for (let i = 0; i < raw.length; i++) {\n res[raw[i]] = raw[i];\n }\n return res;\n }\n return raw;\n}\nfunction mergeAsArray(to, from) {\n return to ? [...new Set([].concat(to, from))] : from;\n}\nfunction mergeObjectOptions(to, from) {\n return to ? extend(/* @__PURE__ */ Object.create(null), to, from) : from;\n}\nfunction mergeEmitsOrPropsOptions(to, from) {\n if (to) {\n if (isArray(to) && isArray(from)) {\n return [.../* @__PURE__ */ new Set([...to, ...from])];\n }\n return extend(\n /* @__PURE__ */ Object.create(null),\n normalizePropsOrEmits(to),\n normalizePropsOrEmits(from != null ? from : {})\n );\n } else {\n return from;\n }\n}\nfunction mergeWatchOptions(to, from) {\n if (!to) return from;\n if (!from) return to;\n const merged = extend(/* @__PURE__ */ Object.create(null), to);\n for (const key in from) {\n merged[key] = mergeAsArray(to[key], from[key]);\n }\n return merged;\n}\n\nfunction createAppContext() {\n return {\n app: null,\n config: {\n isNativeTag: NO,\n performance: false,\n globalProperties: {},\n optionMergeStrategies: {},\n errorHandler: void 0,\n warnHandler: void 0,\n compilerOptions: {}\n },\n mixins: [],\n components: {},\n directives: {},\n provides: /* @__PURE__ */ Object.create(null),\n optionsCache: /* @__PURE__ */ new WeakMap(),\n propsCache: /* @__PURE__ */ new WeakMap(),\n emitsCache: /* @__PURE__ */ new WeakMap()\n };\n}\nlet uid$1 = 0;\nfunction createAppAPI(render, hydrate) {\n return function createApp(rootComponent, rootProps = null) {\n if (!isFunction(rootComponent)) {\n rootComponent = extend({}, rootComponent);\n }\n if (rootProps != null && !isObject(rootProps)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`root props passed to app.mount() must be an object.`);\n rootProps = null;\n }\n const context = createAppContext();\n const installedPlugins = /* @__PURE__ */ new WeakSet();\n const pluginCleanupFns = [];\n let isMounted = false;\n const app = context.app = {\n _uid: uid$1++,\n _component: rootComponent,\n _props: rootProps,\n _container: null,\n _context: context,\n _instance: null,\n version,\n get config() {\n return context.config;\n },\n set config(v) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `app.config cannot be replaced. Modify individual options instead.`\n );\n }\n },\n use(plugin, ...options) {\n if (installedPlugins.has(plugin)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`Plugin has already been applied to target app.`);\n } else if (plugin && isFunction(plugin.install)) {\n installedPlugins.add(plugin);\n plugin.install(app, ...options);\n } else if (isFunction(plugin)) {\n installedPlugins.add(plugin);\n plugin(app, ...options);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `A plugin must either be a function or an object with an \"install\" function.`\n );\n }\n return app;\n },\n mixin(mixin) {\n if (__VUE_OPTIONS_API__) {\n if (!context.mixins.includes(mixin)) {\n context.mixins.push(mixin);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n \"Mixin has already been applied to target app\" + (mixin.name ? `: ${mixin.name}` : \"\")\n );\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Mixins are only available in builds supporting Options API\");\n }\n return app;\n },\n component(name, component) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateComponentName(name, context.config);\n }\n if (!component) {\n return context.components[name];\n }\n if (!!(process.env.NODE_ENV !== \"production\") && context.components[name]) {\n warn$1(`Component \"${name}\" has already been registered in target app.`);\n }\n context.components[name] = component;\n return app;\n },\n directive(name, directive) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateDirectiveName(name);\n }\n if (!directive) {\n return context.directives[name];\n }\n if (!!(process.env.NODE_ENV !== \"production\") && context.directives[name]) {\n warn$1(`Directive \"${name}\" has already been registered in target app.`);\n }\n context.directives[name] = directive;\n return app;\n },\n mount(rootContainer, isHydrate, namespace) {\n if (!isMounted) {\n if (!!(process.env.NODE_ENV !== \"production\") && rootContainer.__vue_app__) {\n warn$1(\n `There is already an app instance mounted on the host container.\n If you want to mount another app on the same host container, you need to unmount the previous app by calling \\`app.unmount()\\` first.`\n );\n }\n const vnode = app._ceVNode || createVNode(rootComponent, rootProps);\n vnode.appContext = context;\n if (namespace === true) {\n namespace = \"svg\";\n } else if (namespace === false) {\n namespace = void 0;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n context.reload = () => {\n const cloned = cloneVNode(vnode);\n cloned.el = null;\n render(cloned, rootContainer, namespace);\n };\n }\n if (isHydrate && hydrate) {\n hydrate(vnode, rootContainer);\n } else {\n render(vnode, rootContainer, namespace);\n }\n isMounted = true;\n app._container = rootContainer;\n rootContainer.__vue_app__ = app;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n app._instance = vnode.component;\n devtoolsInitApp(app, version);\n }\n return getComponentPublicInstance(vnode.component);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `App has already been mounted.\nIf you want to remount the same app, move your app creation logic into a factory function and create fresh app instances for each mount - e.g. \\`const createMyApp = () => createApp(App)\\``\n );\n }\n },\n onUnmount(cleanupFn) {\n if (!!(process.env.NODE_ENV !== \"production\") && typeof cleanupFn !== \"function\") {\n warn$1(\n `Expected function as first argument to app.onUnmount(), but got ${typeof cleanupFn}`\n );\n }\n pluginCleanupFns.push(cleanupFn);\n },\n unmount() {\n if (isMounted) {\n callWithAsyncErrorHandling(\n pluginCleanupFns,\n app._instance,\n 16\n );\n render(null, app._container);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n app._instance = null;\n devtoolsUnmountApp(app);\n }\n delete app._container.__vue_app__;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Cannot unmount an app that is not mounted.`);\n }\n },\n provide(key, value) {\n if (!!(process.env.NODE_ENV !== \"production\") && key in context.provides) {\n if (hasOwn(context.provides, key)) {\n warn$1(\n `App already provides property with key \"${String(key)}\". It will be overwritten with the new value.`\n );\n } else {\n warn$1(\n `App already provides property with key \"${String(key)}\" inherited from its parent element. It will be overwritten with the new value.`\n );\n }\n }\n context.provides[key] = value;\n return app;\n },\n runWithContext(fn) {\n const lastApp = currentApp;\n currentApp = app;\n try {\n return fn();\n } finally {\n currentApp = lastApp;\n }\n }\n };\n return app;\n };\n}\nlet currentApp = null;\n\nfunction useModel(props, name, options = EMPTY_OBJ) {\n const i = getCurrentInstance();\n if (!!(process.env.NODE_ENV !== \"production\") && !i) {\n warn$1(`useModel() called without active instance.`);\n return ref();\n }\n const camelizedName = camelize(name);\n if (!!(process.env.NODE_ENV !== \"production\") && !i.propsOptions[0][camelizedName]) {\n warn$1(`useModel() called with prop \"${name}\" which is not declared.`);\n return ref();\n }\n const hyphenatedName = hyphenate(name);\n const modifiers = getModelModifiers(props, camelizedName);\n const res = customRef((track, trigger) => {\n let localValue;\n let prevSetValue = EMPTY_OBJ;\n let prevEmittedValue;\n watchSyncEffect(() => {\n const propValue = props[camelizedName];\n if (hasChanged(localValue, propValue)) {\n localValue = propValue;\n trigger();\n }\n });\n return {\n get() {\n track();\n return options.get ? options.get(localValue) : localValue;\n },\n set(value) {\n const emittedValue = options.set ? options.set(value) : value;\n if (!hasChanged(emittedValue, localValue) && !(prevSetValue !== EMPTY_OBJ && hasChanged(value, prevSetValue))) {\n return;\n }\n const rawProps = i.vnode.props;\n if (!(rawProps && // check if parent has passed v-model\n (name in rawProps || camelizedName in rawProps || hyphenatedName in rawProps) && (`onUpdate:${name}` in rawProps || `onUpdate:${camelizedName}` in rawProps || `onUpdate:${hyphenatedName}` in rawProps))) {\n localValue = value;\n trigger();\n }\n i.emit(`update:${name}`, emittedValue);\n if (hasChanged(value, emittedValue) && hasChanged(value, prevSetValue) && !hasChanged(emittedValue, prevEmittedValue)) {\n trigger();\n }\n prevSetValue = value;\n prevEmittedValue = emittedValue;\n }\n };\n });\n res[Symbol.iterator] = () => {\n let i2 = 0;\n return {\n next() {\n if (i2 < 2) {\n return { value: i2++ ? modifiers || EMPTY_OBJ : res, done: false };\n } else {\n return { done: true };\n }\n }\n };\n };\n return res;\n}\nconst getModelModifiers = (props, modelName) => {\n return modelName === \"modelValue\" || modelName === \"model-value\" ? props.modelModifiers : props[`${modelName}Modifiers`] || props[`${camelize(modelName)}Modifiers`] || props[`${hyphenate(modelName)}Modifiers`];\n};\n\nfunction emit(instance, event, ...rawArgs) {\n if (instance.isUnmounted) return;\n const props = instance.vnode.props || EMPTY_OBJ;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const {\n emitsOptions,\n propsOptions: [propsOptions]\n } = instance;\n if (emitsOptions) {\n if (!(event in emitsOptions) && true) {\n if (!propsOptions || !(toHandlerKey(camelize(event)) in propsOptions)) {\n warn$1(\n `Component emitted event \"${event}\" but it is neither declared in the emits option nor as an \"${toHandlerKey(camelize(event))}\" prop.`\n );\n }\n } else {\n const validator = emitsOptions[event];\n if (isFunction(validator)) {\n const isValid = validator(...rawArgs);\n if (!isValid) {\n warn$1(\n `Invalid event arguments: event validation failed for event \"${event}\".`\n );\n }\n }\n }\n }\n }\n let args = rawArgs;\n const isModelListener = event.startsWith(\"update:\");\n const modifiers = isModelListener && getModelModifiers(props, event.slice(7));\n if (modifiers) {\n if (modifiers.trim) {\n args = rawArgs.map((a) => isString(a) ? a.trim() : a);\n }\n if (modifiers.number) {\n args = rawArgs.map(looseToNumber);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentEmit(instance, event, args);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {\n warn$1(\n `Event \"${lowerCaseEvent}\" is emitted in component ${formatComponentName(\n instance,\n instance.type\n )} but the handler is registered for \"${event}\". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use \"${hyphenate(\n event\n )}\" instead of \"${event}\".`\n );\n }\n }\n let handlerName;\n let handler = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249)\n props[handlerName = toHandlerKey(camelize(event))];\n if (!handler && isModelListener) {\n handler = props[handlerName = toHandlerKey(hyphenate(event))];\n }\n if (handler) {\n callWithAsyncErrorHandling(\n handler,\n instance,\n 6,\n args\n );\n }\n const onceHandler = props[handlerName + `Once`];\n if (onceHandler) {\n if (!instance.emitted) {\n instance.emitted = {};\n } else if (instance.emitted[handlerName]) {\n return;\n }\n instance.emitted[handlerName] = true;\n callWithAsyncErrorHandling(\n onceHandler,\n instance,\n 6,\n args\n );\n }\n}\nconst mixinEmitsCache = /* @__PURE__ */ new WeakMap();\nfunction normalizeEmitsOptions(comp, appContext, asMixin = false) {\n const cache = __VUE_OPTIONS_API__ && asMixin ? mixinEmitsCache : appContext.emitsCache;\n const cached = cache.get(comp);\n if (cached !== void 0) {\n return cached;\n }\n const raw = comp.emits;\n let normalized = {};\n let hasExtends = false;\n if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\n const extendEmits = (raw2) => {\n const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);\n if (normalizedFromExtend) {\n hasExtends = true;\n extend(normalized, normalizedFromExtend);\n }\n };\n if (!asMixin && appContext.mixins.length) {\n appContext.mixins.forEach(extendEmits);\n }\n if (comp.extends) {\n extendEmits(comp.extends);\n }\n if (comp.mixins) {\n comp.mixins.forEach(extendEmits);\n }\n }\n if (!raw && !hasExtends) {\n if (isObject(comp)) {\n cache.set(comp, null);\n }\n return null;\n }\n if (isArray(raw)) {\n raw.forEach((key) => normalized[key] = null);\n } else {\n extend(normalized, raw);\n }\n if (isObject(comp)) {\n cache.set(comp, normalized);\n }\n return normalized;\n}\nfunction isEmitListener(options, key) {\n if (!options || !isOn(key)) {\n return false;\n }\n key = key.slice(2).replace(/Once$/, \"\");\n return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key);\n}\n\nlet accessedAttrs = false;\nfunction markAttrsAccessed() {\n accessedAttrs = true;\n}\nfunction renderComponentRoot(instance) {\n const {\n type: Component,\n vnode,\n proxy,\n withProxy,\n propsOptions: [propsOptions],\n slots,\n attrs,\n emit,\n render,\n renderCache,\n props,\n data,\n setupState,\n ctx,\n inheritAttrs\n } = instance;\n const prev = setCurrentRenderingInstance(instance);\n let result;\n let fallthroughAttrs;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n accessedAttrs = false;\n }\n try {\n if (vnode.shapeFlag & 4) {\n const proxyToUse = withProxy || proxy;\n const thisProxy = !!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup ? new Proxy(proxyToUse, {\n get(target, key, receiver) {\n warn$1(\n `Property '${String(\n key\n )}' was accessed via 'this'. Avoid using 'this' in templates.`\n );\n return Reflect.get(target, key, receiver);\n }\n }) : proxyToUse;\n result = normalizeVNode(\n render.call(\n thisProxy,\n proxyToUse,\n renderCache,\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n setupState,\n data,\n ctx\n )\n );\n fallthroughAttrs = attrs;\n } else {\n const render2 = Component;\n if (!!(process.env.NODE_ENV !== \"production\") && attrs === props) {\n markAttrsAccessed();\n }\n result = normalizeVNode(\n render2.length > 1 ? render2(\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n !!(process.env.NODE_ENV !== \"production\") ? {\n get attrs() {\n markAttrsAccessed();\n return shallowReadonly(attrs);\n },\n slots,\n emit\n } : { attrs, slots, emit }\n ) : render2(\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n null\n )\n );\n fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs);\n }\n } catch (err) {\n blockStack.length = 0;\n handleError(err, instance, 1);\n result = createVNode(Comment);\n }\n let root = result;\n let setRoot = void 0;\n if (!!(process.env.NODE_ENV !== \"production\") && result.patchFlag > 0 && result.patchFlag & 2048) {\n [root, setRoot] = getChildRoot(result);\n }\n if (fallthroughAttrs && inheritAttrs !== false) {\n const keys = Object.keys(fallthroughAttrs);\n const { shapeFlag } = root;\n if (keys.length) {\n if (shapeFlag & (1 | 6)) {\n if (propsOptions && keys.some(isModelListener)) {\n fallthroughAttrs = filterModelListeners(\n fallthroughAttrs,\n propsOptions\n );\n }\n root = cloneVNode(root, fallthroughAttrs, false, true);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !accessedAttrs && root.type !== Comment) {\n const allAttrs = Object.keys(attrs);\n const eventAttrs = [];\n const extraAttrs = [];\n for (let i = 0, l = allAttrs.length; i < l; i++) {\n const key = allAttrs[i];\n if (isOn(key)) {\n if (!isModelListener(key)) {\n eventAttrs.push(key[2].toLowerCase() + key.slice(3));\n }\n } else {\n extraAttrs.push(key);\n }\n }\n if (extraAttrs.length) {\n warn$1(\n `Extraneous non-props attributes (${extraAttrs.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text or teleport root nodes.`\n );\n }\n if (eventAttrs.length) {\n warn$1(\n `Extraneous non-emits event listeners (${eventAttrs.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the \"emits\" option.`\n );\n }\n }\n }\n }\n if (vnode.dirs) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isElementRoot(root)) {\n warn$1(\n `Runtime directive used on component with non-element root node. The directives will not function as intended.`\n );\n }\n root = cloneVNode(root, null, false, true);\n root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;\n }\n if (vnode.transition) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isElementRoot(root)) {\n warn$1(\n `Component inside <Transition> renders non-element root node that cannot be animated.`\n );\n }\n setTransitionHooks(root, vnode.transition);\n }\n if (!!(process.env.NODE_ENV !== \"production\") && setRoot) {\n setRoot(root);\n } else {\n result = root;\n }\n setCurrentRenderingInstance(prev);\n return result;\n}\nconst getChildRoot = (vnode) => {\n const rawChildren = vnode.children;\n const dynamicChildren = vnode.dynamicChildren;\n const childRoot = filterSingleRoot(rawChildren, false);\n if (!childRoot) {\n return [vnode, void 0];\n } else if (!!(process.env.NODE_ENV !== \"production\") && childRoot.patchFlag > 0 && childRoot.patchFlag & 2048) {\n return getChildRoot(childRoot);\n }\n const index = rawChildren.indexOf(childRoot);\n const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;\n const setRoot = (updatedRoot) => {\n rawChildren[index] = updatedRoot;\n if (dynamicChildren) {\n if (dynamicIndex > -1) {\n dynamicChildren[dynamicIndex] = updatedRoot;\n } else if (updatedRoot.patchFlag > 0) {\n vnode.dynamicChildren = [...dynamicChildren, updatedRoot];\n }\n }\n };\n return [normalizeVNode(childRoot), setRoot];\n};\nfunction filterSingleRoot(children, recurse = true) {\n let singleRoot;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isVNode(child)) {\n if (child.type !== Comment || child.children === \"v-if\") {\n if (singleRoot) {\n return;\n } else {\n singleRoot = child;\n if (!!(process.env.NODE_ENV !== \"production\") && recurse && singleRoot.patchFlag > 0 && singleRoot.patchFlag & 2048) {\n return filterSingleRoot(singleRoot.children);\n }\n }\n }\n } else {\n return;\n }\n }\n return singleRoot;\n}\nconst getFunctionalFallthrough = (attrs) => {\n let res;\n for (const key in attrs) {\n if (key === \"class\" || key === \"style\" || isOn(key)) {\n (res || (res = {}))[key] = attrs[key];\n }\n }\n return res;\n};\nconst filterModelListeners = (attrs, props) => {\n const res = {};\n for (const key in attrs) {\n if (!isModelListener(key) || !(key.slice(9) in props)) {\n res[key] = attrs[key];\n }\n }\n return res;\n};\nconst isElementRoot = (vnode) => {\n return vnode.shapeFlag & (6 | 1) || vnode.type === Comment;\n};\nfunction shouldUpdateComponent(prevVNode, nextVNode, optimized) {\n const { props: prevProps, children: prevChildren, component } = prevVNode;\n const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;\n const emits = component.emitsOptions;\n if (!!(process.env.NODE_ENV !== \"production\") && (prevChildren || nextChildren) && isHmrUpdating) {\n return true;\n }\n if (nextVNode.dirs || nextVNode.transition) {\n return true;\n }\n if (optimized && patchFlag >= 0) {\n if (patchFlag & 1024) {\n return true;\n }\n if (patchFlag & 16) {\n if (!prevProps) {\n return !!nextProps;\n }\n return hasPropsChanged(prevProps, nextProps, emits);\n } else if (patchFlag & 8) {\n const dynamicProps = nextVNode.dynamicProps;\n for (let i = 0; i < dynamicProps.length; i++) {\n const key = dynamicProps[i];\n if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) {\n return true;\n }\n }\n }\n } else {\n if (prevChildren || nextChildren) {\n if (!nextChildren || !nextChildren.$stable) {\n return true;\n }\n }\n if (prevProps === nextProps) {\n return false;\n }\n if (!prevProps) {\n return !!nextProps;\n }\n if (!nextProps) {\n return true;\n }\n return hasPropsChanged(prevProps, nextProps, emits);\n }\n return false;\n}\nfunction hasPropsChanged(prevProps, nextProps, emitsOptions) {\n const nextKeys = Object.keys(nextProps);\n if (nextKeys.length !== Object.keys(prevProps).length) {\n return true;\n }\n for (let i = 0; i < nextKeys.length; i++) {\n const key = nextKeys[i];\n if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) {\n return true;\n }\n }\n return false;\n}\nfunction updateHOCHostEl({ vnode, parent }, el) {\n while (parent) {\n const root = parent.subTree;\n if (root.suspense && root.suspense.activeBranch === vnode) {\n root.el = vnode.el;\n }\n if (root === vnode) {\n (vnode = parent.vnode).el = el;\n parent = parent.parent;\n } else {\n break;\n }\n }\n}\n\nconst internalObjectProto = {};\nconst createInternalObject = () => Object.create(internalObjectProto);\nconst isInternalObject = (obj) => Object.getPrototypeOf(obj) === internalObjectProto;\n\nfunction initProps(instance, rawProps, isStateful, isSSR = false) {\n const props = {};\n const attrs = createInternalObject();\n instance.propsDefaults = /* @__PURE__ */ Object.create(null);\n setFullProps(instance, rawProps, props, attrs);\n for (const key in instance.propsOptions[0]) {\n if (!(key in props)) {\n props[key] = void 0;\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateProps(rawProps || {}, props, instance);\n }\n if (isStateful) {\n instance.props = isSSR ? props : shallowReactive(props);\n } else {\n if (!instance.type.props) {\n instance.props = attrs;\n } else {\n instance.props = props;\n }\n }\n instance.attrs = attrs;\n}\nfunction isInHmrContext(instance) {\n while (instance) {\n if (instance.type.__hmrId) return true;\n instance = instance.parent;\n }\n}\nfunction updateProps(instance, rawProps, rawPrevProps, optimized) {\n const {\n props,\n attrs,\n vnode: { patchFlag }\n } = instance;\n const rawCurrentProps = toRaw(props);\n const [options] = instance.propsOptions;\n let hasAttrsChanged = false;\n if (\n // always force full diff in dev\n // - #1942 if hmr is enabled with sfc component\n // - vite#872 non-sfc component used by sfc component\n !(!!(process.env.NODE_ENV !== \"production\") && isInHmrContext(instance)) && (optimized || patchFlag > 0) && !(patchFlag & 16)\n ) {\n if (patchFlag & 8) {\n const propsToUpdate = instance.vnode.dynamicProps;\n for (let i = 0; i < propsToUpdate.length; i++) {\n let key = propsToUpdate[i];\n if (isEmitListener(instance.emitsOptions, key)) {\n continue;\n }\n const value = rawProps[key];\n if (options) {\n if (hasOwn(attrs, key)) {\n if (value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n } else {\n const camelizedKey = camelize(key);\n props[camelizedKey] = resolvePropValue(\n options,\n rawCurrentProps,\n camelizedKey,\n value,\n instance,\n false\n );\n }\n } else {\n if (value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n }\n }\n }\n } else {\n if (setFullProps(instance, rawProps, props, attrs)) {\n hasAttrsChanged = true;\n }\n let kebabKey;\n for (const key in rawCurrentProps) {\n if (!rawProps || // for camelCase\n !hasOwn(rawProps, key) && // it's possible the original props was passed in as kebab-case\n // and converted to camelCase (#955)\n ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) {\n if (options) {\n if (rawPrevProps && // for camelCase\n (rawPrevProps[key] !== void 0 || // for kebab-case\n rawPrevProps[kebabKey] !== void 0)) {\n props[key] = resolvePropValue(\n options,\n rawCurrentProps,\n key,\n void 0,\n instance,\n true\n );\n }\n } else {\n delete props[key];\n }\n }\n }\n if (attrs !== rawCurrentProps) {\n for (const key in attrs) {\n if (!rawProps || !hasOwn(rawProps, key) && true) {\n delete attrs[key];\n hasAttrsChanged = true;\n }\n }\n }\n }\n if (hasAttrsChanged) {\n trigger(instance.attrs, \"set\", \"\");\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateProps(rawProps || {}, props, instance);\n }\n}\nfunction setFullProps(instance, rawProps, props, attrs) {\n const [options, needCastKeys] = instance.propsOptions;\n let hasAttrsChanged = false;\n let rawCastValues;\n if (rawProps) {\n for (let key in rawProps) {\n if (isReservedProp(key)) {\n continue;\n }\n const value = rawProps[key];\n let camelKey;\n if (options && hasOwn(options, camelKey = camelize(key))) {\n if (!needCastKeys || !needCastKeys.includes(camelKey)) {\n props[camelKey] = value;\n } else {\n (rawCastValues || (rawCastValues = {}))[camelKey] = value;\n }\n } else if (!isEmitListener(instance.emitsOptions, key)) {\n if (!(key in attrs) || value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n }\n }\n }\n if (needCastKeys) {\n const rawCurrentProps = toRaw(props);\n const castValues = rawCastValues || EMPTY_OBJ;\n for (let i = 0; i < needCastKeys.length; i++) {\n const key = needCastKeys[i];\n props[key] = resolvePropValue(\n options,\n rawCurrentProps,\n key,\n castValues[key],\n instance,\n !hasOwn(castValues, key)\n );\n }\n }\n return hasAttrsChanged;\n}\nfunction resolvePropValue(options, props, key, value, instance, isAbsent) {\n const opt = options[key];\n if (opt != null) {\n const hasDefault = hasOwn(opt, \"default\");\n if (hasDefault && value === void 0) {\n const defaultValue = opt.default;\n if (opt.type !== Function && !opt.skipFactory && isFunction(defaultValue)) {\n const { propsDefaults } = instance;\n if (key in propsDefaults) {\n value = propsDefaults[key];\n } else {\n const reset = setCurrentInstance(instance);\n value = propsDefaults[key] = defaultValue.call(\n null,\n props\n );\n reset();\n }\n } else {\n value = defaultValue;\n }\n if (instance.ce) {\n instance.ce._setProp(key, value);\n }\n }\n if (opt[0 /* shouldCast */]) {\n if (isAbsent && !hasDefault) {\n value = false;\n } else if (opt[1 /* shouldCastTrue */] && (value === \"\" || value === hyphenate(key))) {\n value = true;\n }\n }\n }\n return value;\n}\nconst mixinPropsCache = /* @__PURE__ */ new WeakMap();\nfunction normalizePropsOptions(comp, appContext, asMixin = false) {\n const cache = __VUE_OPTIONS_API__ && asMixin ? mixinPropsCache : appContext.propsCache;\n const cached = cache.get(comp);\n if (cached) {\n return cached;\n }\n const raw = comp.props;\n const normalized = {};\n const needCastKeys = [];\n let hasExtends = false;\n if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\n const extendProps = (raw2) => {\n hasExtends = true;\n const [props, keys] = normalizePropsOptions(raw2, appContext, true);\n extend(normalized, props);\n if (keys) needCastKeys.push(...keys);\n };\n if (!asMixin && appContext.mixins.length) {\n appContext.mixins.forEach(extendProps);\n }\n if (comp.extends) {\n extendProps(comp.extends);\n }\n if (comp.mixins) {\n comp.mixins.forEach(extendProps);\n }\n }\n if (!raw && !hasExtends) {\n if (isObject(comp)) {\n cache.set(comp, EMPTY_ARR);\n }\n return EMPTY_ARR;\n }\n if (isArray(raw)) {\n for (let i = 0; i < raw.length; i++) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isString(raw[i])) {\n warn$1(`props must be strings when using array syntax.`, raw[i]);\n }\n const normalizedKey = camelize(raw[i]);\n if (validatePropName(normalizedKey)) {\n normalized[normalizedKey] = EMPTY_OBJ;\n }\n }\n } else if (raw) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isObject(raw)) {\n warn$1(`invalid props options`, raw);\n }\n for (const key in raw) {\n const normalizedKey = camelize(key);\n if (validatePropName(normalizedKey)) {\n const opt = raw[key];\n const prop = normalized[normalizedKey] = isArray(opt) || isFunction(opt) ? { type: opt } : extend({}, opt);\n const propType = prop.type;\n let shouldCast = false;\n let shouldCastTrue = true;\n if (isArray(propType)) {\n for (let index = 0; index < propType.length; ++index) {\n const type = propType[index];\n const typeName = isFunction(type) && type.name;\n if (typeName === \"Boolean\") {\n shouldCast = true;\n break;\n } else if (typeName === \"String\") {\n shouldCastTrue = false;\n }\n }\n } else {\n shouldCast = isFunction(propType) && propType.name === \"Boolean\";\n }\n prop[0 /* shouldCast */] = shouldCast;\n prop[1 /* shouldCastTrue */] = shouldCastTrue;\n if (shouldCast || hasOwn(prop, \"default\")) {\n needCastKeys.push(normalizedKey);\n }\n }\n }\n }\n const res = [normalized, needCastKeys];\n if (isObject(comp)) {\n cache.set(comp, res);\n }\n return res;\n}\nfunction validatePropName(key) {\n if (key[0] !== \"$\" && !isReservedProp(key)) {\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid prop name: \"${key}\" is a reserved property.`);\n }\n return false;\n}\nfunction getType(ctor) {\n if (ctor === null) {\n return \"null\";\n }\n if (typeof ctor === \"function\") {\n return ctor.name || \"\";\n } else if (typeof ctor === \"object\") {\n const name = ctor.constructor && ctor.constructor.name;\n return name || \"\";\n }\n return \"\";\n}\nfunction validateProps(rawProps, props, instance) {\n const resolvedValues = toRaw(props);\n const options = instance.propsOptions[0];\n const camelizePropsKey = Object.keys(rawProps).map((key) => camelize(key));\n for (const key in options) {\n let opt = options[key];\n if (opt == null) continue;\n validateProp(\n key,\n resolvedValues[key],\n opt,\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(resolvedValues) : resolvedValues,\n !camelizePropsKey.includes(key)\n );\n }\n}\nfunction validateProp(name, value, prop, props, isAbsent) {\n const { type, required, validator, skipCheck } = prop;\n if (required && isAbsent) {\n warn$1('Missing required prop: \"' + name + '\"');\n return;\n }\n if (value == null && !required) {\n return;\n }\n if (type != null && type !== true && !skipCheck) {\n let isValid = false;\n const types = isArray(type) ? type : [type];\n const expectedTypes = [];\n for (let i = 0; i < types.length && !isValid; i++) {\n const { valid, expectedType } = assertType(value, types[i]);\n expectedTypes.push(expectedType || \"\");\n isValid = valid;\n }\n if (!isValid) {\n warn$1(getInvalidTypeMessage(name, value, expectedTypes));\n return;\n }\n }\n if (validator && !validator(value, props)) {\n warn$1('Invalid prop: custom validator check failed for prop \"' + name + '\".');\n }\n}\nconst isSimpleType = /* @__PURE__ */ makeMap(\n \"String,Number,Boolean,Function,Symbol,BigInt\"\n);\nfunction assertType(value, type) {\n let valid;\n const expectedType = getType(type);\n if (expectedType === \"null\") {\n valid = value === null;\n } else if (isSimpleType(expectedType)) {\n const t = typeof value;\n valid = t === expectedType.toLowerCase();\n if (!valid && t === \"object\") {\n valid = value instanceof type;\n }\n } else if (expectedType === \"Object\") {\n valid = isObject(value);\n } else if (expectedType === \"Array\") {\n valid = isArray(value);\n } else {\n valid = value instanceof type;\n }\n return {\n valid,\n expectedType\n };\n}\nfunction getInvalidTypeMessage(name, value, expectedTypes) {\n if (expectedTypes.length === 0) {\n return `Prop type [] for prop \"${name}\" won't match anything. Did you mean to use type Array instead?`;\n }\n let message = `Invalid prop: type check failed for prop \"${name}\". Expected ${expectedTypes.map(capitalize).join(\" | \")}`;\n const expectedType = expectedTypes[0];\n const receivedType = toRawType(value);\n const expectedValue = styleValue(value, expectedType);\n const receivedValue = styleValue(value, receivedType);\n if (expectedTypes.length === 1 && isExplicable(expectedType) && !isBoolean(expectedType, receivedType)) {\n message += ` with value ${expectedValue}`;\n }\n message += `, got ${receivedType} `;\n if (isExplicable(receivedType)) {\n message += `with value ${receivedValue}.`;\n }\n return message;\n}\nfunction styleValue(value, type) {\n if (type === \"String\") {\n return `\"${value}\"`;\n } else if (type === \"Number\") {\n return `${Number(value)}`;\n } else {\n return `${value}`;\n }\n}\nfunction isExplicable(type) {\n const explicitTypes = [\"string\", \"number\", \"boolean\"];\n return explicitTypes.some((elem) => type.toLowerCase() === elem);\n}\nfunction isBoolean(...args) {\n return args.some((elem) => elem.toLowerCase() === \"boolean\");\n}\n\nconst isInternalKey = (key) => key === \"_\" || key === \"_ctx\" || key === \"$stable\";\nconst normalizeSlotValue = (value) => isArray(value) ? value.map(normalizeVNode) : [normalizeVNode(value)];\nconst normalizeSlot = (key, rawSlot, ctx) => {\n if (rawSlot._n) {\n return rawSlot;\n }\n const normalized = withCtx((...args) => {\n if (!!(process.env.NODE_ENV !== \"production\") && currentInstance && !(ctx === null && currentRenderingInstance) && !(ctx && ctx.root !== currentInstance.root)) {\n warn$1(\n `Slot \"${key}\" invoked outside of the render function: this will not track dependencies used in the slot. Invoke the slot function inside the render function instead.`\n );\n }\n return normalizeSlotValue(rawSlot(...args));\n }, ctx);\n normalized._c = false;\n return normalized;\n};\nconst normalizeObjectSlots = (rawSlots, slots, instance) => {\n const ctx = rawSlots._ctx;\n for (const key in rawSlots) {\n if (isInternalKey(key)) continue;\n const value = rawSlots[key];\n if (isFunction(value)) {\n slots[key] = normalizeSlot(key, value, ctx);\n } else if (value != null) {\n if (!!(process.env.NODE_ENV !== \"production\") && true) {\n warn$1(\n `Non-function value encountered for slot \"${key}\". Prefer function slots for better performance.`\n );\n }\n const normalized = normalizeSlotValue(value);\n slots[key] = () => normalized;\n }\n }\n};\nconst normalizeVNodeSlots = (instance, children) => {\n if (!!(process.env.NODE_ENV !== \"production\") && !isKeepAlive(instance.vnode) && true) {\n warn$1(\n `Non-function value encountered for default slot. Prefer function slots for better performance.`\n );\n }\n const normalized = normalizeSlotValue(children);\n instance.slots.default = () => normalized;\n};\nconst assignSlots = (slots, children, optimized) => {\n for (const key in children) {\n if (optimized || !isInternalKey(key)) {\n slots[key] = children[key];\n }\n }\n};\nconst initSlots = (instance, children, optimized) => {\n const slots = instance.slots = createInternalObject();\n if (instance.vnode.shapeFlag & 32) {\n const type = children._;\n if (type) {\n assignSlots(slots, children, optimized);\n if (optimized) {\n def(slots, \"_\", type, true);\n }\n } else {\n normalizeObjectSlots(children, slots);\n }\n } else if (children) {\n normalizeVNodeSlots(instance, children);\n }\n};\nconst updateSlots = (instance, children, optimized) => {\n const { vnode, slots } = instance;\n let needDeletionCheck = true;\n let deletionComparisonTarget = EMPTY_OBJ;\n if (vnode.shapeFlag & 32) {\n const type = children._;\n if (type) {\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n assignSlots(slots, children, optimized);\n trigger(instance, \"set\", \"$slots\");\n } else if (optimized && type === 1) {\n needDeletionCheck = false;\n } else {\n assignSlots(slots, children, optimized);\n }\n } else {\n needDeletionCheck = !children.$stable;\n normalizeObjectSlots(children, slots);\n }\n deletionComparisonTarget = children;\n } else if (children) {\n normalizeVNodeSlots(instance, children);\n deletionComparisonTarget = { default: 1 };\n }\n if (needDeletionCheck) {\n for (const key in slots) {\n if (!isInternalKey(key) && deletionComparisonTarget[key] == null) {\n delete slots[key];\n }\n }\n }\n};\n\nlet supported;\nlet perf;\nfunction startMeasure(instance, type) {\n if (instance.appContext.config.performance && isSupported()) {\n perf.mark(`vue-${type}-${instance.uid}`);\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now());\n }\n}\nfunction endMeasure(instance, type) {\n if (instance.appContext.config.performance && isSupported()) {\n const startTag = `vue-${type}-${instance.uid}`;\n const endTag = startTag + `:end`;\n const measureName = `<${formatComponentName(instance, instance.type)}> ${type}`;\n perf.mark(endTag);\n perf.measure(measureName, startTag, endTag);\n perf.clearMeasures(measureName);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now());\n }\n}\nfunction isSupported() {\n if (supported !== void 0) {\n return supported;\n }\n if (typeof window !== \"undefined\" && window.performance) {\n supported = true;\n perf = window.performance;\n } else {\n supported = false;\n }\n return supported;\n}\n\nfunction initFeatureFlags() {\n const needWarn = [];\n if (typeof __VUE_OPTIONS_API__ !== \"boolean\") {\n !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_OPTIONS_API__`);\n getGlobalThis().__VUE_OPTIONS_API__ = true;\n }\n if (typeof __VUE_PROD_DEVTOOLS__ !== \"boolean\") {\n !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_PROD_DEVTOOLS__`);\n getGlobalThis().__VUE_PROD_DEVTOOLS__ = false;\n }\n if (typeof __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ !== \"boolean\") {\n !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_PROD_HYDRATION_MISMATCH_DETAILS__`);\n getGlobalThis().__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ = false;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && needWarn.length) {\n const multi = needWarn.length > 1;\n console.warn(\n `Feature flag${multi ? `s` : ``} ${needWarn.join(\", \")} ${multi ? `are` : `is`} not explicitly defined. You are running the esm-bundler build of Vue, which expects these compile-time feature flags to be globally injected via the bundler config in order to get better tree-shaking in the production bundle.\n\nFor more details, see https://link.vuejs.org/feature-flags.`\n );\n }\n}\n\nconst queuePostRenderEffect = queueEffectWithSuspense ;\nfunction createRenderer(options) {\n return baseCreateRenderer(options);\n}\nfunction createHydrationRenderer(options) {\n return baseCreateRenderer(options, createHydrationFunctions);\n}\nfunction baseCreateRenderer(options, createHydrationFns) {\n {\n initFeatureFlags();\n }\n const target = getGlobalThis();\n target.__VUE__ = true;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n setDevtoolsHook$1(target.__VUE_DEVTOOLS_GLOBAL_HOOK__, target);\n }\n const {\n insert: hostInsert,\n remove: hostRemove,\n patchProp: hostPatchProp,\n createElement: hostCreateElement,\n createText: hostCreateText,\n createComment: hostCreateComment,\n setText: hostSetText,\n setElementText: hostSetElementText,\n parentNode: hostParentNode,\n nextSibling: hostNextSibling,\n setScopeId: hostSetScopeId = NOOP,\n insertStaticContent: hostInsertStaticContent\n } = options;\n const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, namespace = void 0, slotScopeIds = null, optimized = !!(process.env.NODE_ENV !== \"production\") && isHmrUpdating ? false : !!n2.dynamicChildren) => {\n if (n1 === n2) {\n return;\n }\n if (n1 && !isSameVNodeType(n1, n2)) {\n anchor = getNextHostNode(n1);\n unmount(n1, parentComponent, parentSuspense, true);\n n1 = null;\n }\n if (n2.patchFlag === -2) {\n optimized = false;\n n2.dynamicChildren = null;\n }\n const { type, ref, shapeFlag } = n2;\n switch (type) {\n case Text:\n processText(n1, n2, container, anchor);\n break;\n case Comment:\n processCommentNode(n1, n2, container, anchor);\n break;\n case Static:\n if (n1 == null) {\n mountStaticNode(n2, container, anchor, namespace);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n patchStaticNode(n1, n2, container, namespace);\n }\n break;\n case Fragment:\n processFragment(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n break;\n default:\n if (shapeFlag & 1) {\n processElement(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else if (shapeFlag & 6) {\n processComponent(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else if (shapeFlag & 64) {\n type.process(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n internals\n );\n } else if (shapeFlag & 128) {\n type.process(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n internals\n );\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid VNode type:\", type, `(${typeof type})`);\n }\n }\n if (ref != null && parentComponent) {\n setRef(ref, n1 && n1.ref, parentSuspense, n2 || n1, !n2);\n } else if (ref == null && n1 && n1.ref != null) {\n setRef(n1.ref, null, parentSuspense, n1, true);\n }\n };\n const processText = (n1, n2, container, anchor) => {\n if (n1 == null) {\n hostInsert(\n n2.el = hostCreateText(n2.children),\n container,\n anchor\n );\n } else {\n const el = n2.el = n1.el;\n if (n2.children !== n1.children) {\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating && n2.patchFlag === -1 && \"__elIndex\" in n1) {\n const childNodes = container.childNodes;\n const newChild = hostCreateText(n2.children);\n const oldChild = childNodes[n2.__elIndex = n1.__elIndex];\n hostInsert(newChild, container, oldChild);\n hostRemove(oldChild);\n } else {\n hostSetText(el, n2.children);\n }\n }\n }\n };\n const processCommentNode = (n1, n2, container, anchor) => {\n if (n1 == null) {\n hostInsert(\n n2.el = hostCreateComment(n2.children || \"\"),\n container,\n anchor\n );\n } else {\n n2.el = n1.el;\n }\n };\n const mountStaticNode = (n2, container, anchor, namespace) => {\n [n2.el, n2.anchor] = hostInsertStaticContent(\n n2.children,\n container,\n anchor,\n namespace,\n n2.el,\n n2.anchor\n );\n };\n const patchStaticNode = (n1, n2, container, namespace) => {\n if (n2.children !== n1.children) {\n const anchor = hostNextSibling(n1.anchor);\n removeStaticNode(n1);\n [n2.el, n2.anchor] = hostInsertStaticContent(\n n2.children,\n container,\n anchor,\n namespace\n );\n } else {\n n2.el = n1.el;\n n2.anchor = n1.anchor;\n }\n };\n const moveStaticNode = ({ el, anchor }, container, nextSibling) => {\n let next;\n while (el && el !== anchor) {\n next = hostNextSibling(el);\n hostInsert(el, container, nextSibling);\n el = next;\n }\n hostInsert(anchor, container, nextSibling);\n };\n const removeStaticNode = ({ el, anchor }) => {\n let next;\n while (el && el !== anchor) {\n next = hostNextSibling(el);\n hostRemove(el);\n el = next;\n }\n hostRemove(anchor);\n };\n const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n if (n2.type === \"svg\") {\n namespace = \"svg\";\n } else if (n2.type === \"math\") {\n namespace = \"mathml\";\n }\n if (n1 == null) {\n mountElement(\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n const customElement = !!(n1.el && n1.el._isVueCE) ? n1.el : null;\n try {\n if (customElement) {\n customElement._beginPatch();\n }\n patchElement(\n n1,\n n2,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } finally {\n if (customElement) {\n customElement._endPatch();\n }\n }\n }\n };\n const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n let el;\n let vnodeHook;\n const { props, shapeFlag, transition, dirs } = vnode;\n el = vnode.el = hostCreateElement(\n vnode.type,\n namespace,\n props && props.is,\n props\n );\n if (shapeFlag & 8) {\n hostSetElementText(el, vnode.children);\n } else if (shapeFlag & 16) {\n mountChildren(\n vnode.children,\n el,\n null,\n parentComponent,\n parentSuspense,\n resolveChildrenNamespace(vnode, namespace),\n slotScopeIds,\n optimized\n );\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n }\n setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent);\n if (props) {\n for (const key in props) {\n if (key !== \"value\" && !isReservedProp(key)) {\n hostPatchProp(el, key, null, props[key], namespace, parentComponent);\n }\n }\n if (\"value\" in props) {\n hostPatchProp(el, \"value\", null, props.value, namespace);\n }\n if (vnodeHook = props.onVnodeBeforeMount) {\n invokeVNodeHook(vnodeHook, parentComponent, vnode);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n def(el, \"__vnode\", vnode, true);\n def(el, \"__vueParentComponent\", parentComponent, true);\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n }\n const needCallTransitionHooks = needTransition(parentSuspense, transition);\n if (needCallTransitionHooks) {\n transition.beforeEnter(el);\n }\n hostInsert(el, container, anchor);\n if ((vnodeHook = props && props.onVnodeMounted) || needCallTransitionHooks || dirs) {\n queuePostRenderEffect(() => {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n needCallTransitionHooks && transition.enter(el);\n dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n }, parentSuspense);\n }\n };\n const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => {\n if (scopeId) {\n hostSetScopeId(el, scopeId);\n }\n if (slotScopeIds) {\n for (let i = 0; i < slotScopeIds.length; i++) {\n hostSetScopeId(el, slotScopeIds[i]);\n }\n }\n if (parentComponent) {\n let subTree = parentComponent.subTree;\n if (!!(process.env.NODE_ENV !== \"production\") && subTree.patchFlag > 0 && subTree.patchFlag & 2048) {\n subTree = filterSingleRoot(subTree.children) || subTree;\n }\n if (vnode === subTree || isSuspense(subTree.type) && (subTree.ssContent === vnode || subTree.ssFallback === vnode)) {\n const parentVNode = parentComponent.vnode;\n setScopeId(\n el,\n parentVNode,\n parentVNode.scopeId,\n parentVNode.slotScopeIds,\n parentComponent.parent\n );\n }\n }\n };\n const mountChildren = (children, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, start = 0) => {\n for (let i = start; i < children.length; i++) {\n const child = children[i] = optimized ? cloneIfMounted(children[i]) : normalizeVNode(children[i]);\n patch(\n null,\n child,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n };\n const patchElement = (n1, n2, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n const el = n2.el = n1.el;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n el.__vnode = n2;\n }\n let { patchFlag, dynamicChildren, dirs } = n2;\n patchFlag |= n1.patchFlag & 16;\n const oldProps = n1.props || EMPTY_OBJ;\n const newProps = n2.props || EMPTY_OBJ;\n let vnodeHook;\n parentComponent && toggleRecurse(parentComponent, false);\n if (vnodeHook = newProps.onVnodeBeforeUpdate) {\n invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n }\n if (dirs) {\n invokeDirectiveHook(n2, n1, parentComponent, \"beforeUpdate\");\n }\n parentComponent && toggleRecurse(parentComponent, true);\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n patchFlag = 0;\n optimized = false;\n dynamicChildren = null;\n }\n if (oldProps.innerHTML && newProps.innerHTML == null || oldProps.textContent && newProps.textContent == null) {\n hostSetElementText(el, \"\");\n }\n if (dynamicChildren) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n el,\n parentComponent,\n parentSuspense,\n resolveChildrenNamespace(n2, namespace),\n slotScopeIds\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n traverseStaticChildren(n1, n2);\n }\n } else if (!optimized) {\n patchChildren(\n n1,\n n2,\n el,\n null,\n parentComponent,\n parentSuspense,\n resolveChildrenNamespace(n2, namespace),\n slotScopeIds,\n false\n );\n }\n if (patchFlag > 0) {\n if (patchFlag & 16) {\n patchProps(el, oldProps, newProps, parentComponent, namespace);\n } else {\n if (patchFlag & 2) {\n if (oldProps.class !== newProps.class) {\n hostPatchProp(el, \"class\", null, newProps.class, namespace);\n }\n }\n if (patchFlag & 4) {\n hostPatchProp(el, \"style\", oldProps.style, newProps.style, namespace);\n }\n if (patchFlag & 8) {\n const propsToUpdate = n2.dynamicProps;\n for (let i = 0; i < propsToUpdate.length; i++) {\n const key = propsToUpdate[i];\n const prev = oldProps[key];\n const next = newProps[key];\n if (next !== prev || key === \"value\") {\n hostPatchProp(el, key, prev, next, namespace, parentComponent);\n }\n }\n }\n }\n if (patchFlag & 1) {\n if (n1.children !== n2.children) {\n hostSetElementText(el, n2.children);\n }\n }\n } else if (!optimized && dynamicChildren == null) {\n patchProps(el, oldProps, newProps, parentComponent, namespace);\n }\n if ((vnodeHook = newProps.onVnodeUpdated) || dirs) {\n queuePostRenderEffect(() => {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n dirs && invokeDirectiveHook(n2, n1, parentComponent, \"updated\");\n }, parentSuspense);\n }\n };\n const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, namespace, slotScopeIds) => {\n for (let i = 0; i < newChildren.length; i++) {\n const oldVNode = oldChildren[i];\n const newVNode = newChildren[i];\n const container = (\n // oldVNode may be an errored async setup() component inside Suspense\n // which will not have a mounted element\n oldVNode.el && // - In the case of a Fragment, we need to provide the actual parent\n // of the Fragment itself so it can move its children.\n (oldVNode.type === Fragment || // - In the case of different nodes, there is going to be a replacement\n // which also requires the correct parent container\n !isSameVNodeType(oldVNode, newVNode) || // - In the case of a component, it could contain anything.\n oldVNode.shapeFlag & (6 | 64 | 128)) ? hostParentNode(oldVNode.el) : (\n // In other cases, the parent container is not actually used so we\n // just pass the block element here to avoid a DOM parentNode call.\n fallbackContainer\n )\n );\n patch(\n oldVNode,\n newVNode,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n true\n );\n }\n };\n const patchProps = (el, oldProps, newProps, parentComponent, namespace) => {\n if (oldProps !== newProps) {\n if (oldProps !== EMPTY_OBJ) {\n for (const key in oldProps) {\n if (!isReservedProp(key) && !(key in newProps)) {\n hostPatchProp(\n el,\n key,\n oldProps[key],\n null,\n namespace,\n parentComponent\n );\n }\n }\n }\n for (const key in newProps) {\n if (isReservedProp(key)) continue;\n const next = newProps[key];\n const prev = oldProps[key];\n if (next !== prev && key !== \"value\") {\n hostPatchProp(el, key, prev, next, namespace, parentComponent);\n }\n }\n if (\"value\" in newProps) {\n hostPatchProp(el, \"value\", oldProps.value, newProps.value, namespace);\n }\n }\n };\n const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n const fragmentStartAnchor = n2.el = n1 ? n1.el : hostCreateText(\"\");\n const fragmentEndAnchor = n2.anchor = n1 ? n1.anchor : hostCreateText(\"\");\n let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2;\n if (!!(process.env.NODE_ENV !== \"production\") && // #5523 dev root fragment may inherit directives\n (isHmrUpdating || patchFlag & 2048)) {\n patchFlag = 0;\n optimized = false;\n dynamicChildren = null;\n }\n if (fragmentSlotScopeIds) {\n slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n }\n if (n1 == null) {\n hostInsert(fragmentStartAnchor, container, anchor);\n hostInsert(fragmentEndAnchor, container, anchor);\n mountChildren(\n // #10007\n // such fragment like `<></>` will be compiled into\n // a fragment which doesn't have a children.\n // In this case fallback to an empty array\n n2.children || [],\n container,\n fragmentEndAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n if (patchFlag > 0 && patchFlag & 64 && dynamicChildren && // #2715 the previous fragment could've been a BAILed one as a result\n // of renderSlot() with no valid children\n n1.dynamicChildren && n1.dynamicChildren.length === dynamicChildren.length) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n container,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n traverseStaticChildren(n1, n2);\n } else if (\n // #2080 if the stable fragment has a key, it's a <template v-for> that may\n // get moved around. Make sure all root level vnodes inherit el.\n // #2134 or if it's a component root, it may also get moved around\n // as the component is being moved.\n n2.key != null || parentComponent && n2 === parentComponent.subTree\n ) {\n traverseStaticChildren(\n n1,\n n2,\n true\n /* shallow */\n );\n }\n } else {\n patchChildren(\n n1,\n n2,\n container,\n fragmentEndAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n }\n };\n const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n n2.slotScopeIds = slotScopeIds;\n if (n1 == null) {\n if (n2.shapeFlag & 512) {\n parentComponent.ctx.activate(\n n2,\n container,\n anchor,\n namespace,\n optimized\n );\n } else {\n mountComponent(\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n optimized\n );\n }\n } else {\n updateComponent(n1, n2, optimized);\n }\n };\n const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, namespace, optimized) => {\n const instance = (initialVNode.component = createComponentInstance(\n initialVNode,\n parentComponent,\n parentSuspense\n ));\n if (!!(process.env.NODE_ENV !== \"production\") && instance.type.__hmrId) {\n registerHMR(instance);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(initialVNode);\n startMeasure(instance, `mount`);\n }\n if (isKeepAlive(initialVNode)) {\n instance.ctx.renderer = internals;\n }\n {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `init`);\n }\n setupComponent(instance, false, optimized);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `init`);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) initialVNode.el = null;\n if (instance.asyncDep) {\n parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect, optimized);\n if (!initialVNode.el) {\n const placeholder = instance.subTree = createVNode(Comment);\n processCommentNode(null, placeholder, container, anchor);\n initialVNode.placeholder = placeholder.el;\n }\n } else {\n setupRenderEffect(\n instance,\n initialVNode,\n container,\n anchor,\n parentSuspense,\n namespace,\n optimized\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n endMeasure(instance, `mount`);\n }\n };\n const updateComponent = (n1, n2, optimized) => {\n const instance = n2.component = n1.component;\n if (shouldUpdateComponent(n1, n2, optimized)) {\n if (instance.asyncDep && !instance.asyncResolved) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(n2);\n }\n updateComponentPreRender(instance, n2, optimized);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n }\n return;\n } else {\n instance.next = n2;\n instance.update();\n }\n } else {\n n2.el = n1.el;\n instance.vnode = n2;\n }\n };\n const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, namespace, optimized) => {\n const componentUpdateFn = () => {\n if (!instance.isMounted) {\n let vnodeHook;\n const { el, props } = initialVNode;\n const { bm, m, parent, root, type } = instance;\n const isAsyncWrapperVNode = isAsyncWrapper(initialVNode);\n toggleRecurse(instance, false);\n if (bm) {\n invokeArrayFns(bm);\n }\n if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeBeforeMount)) {\n invokeVNodeHook(vnodeHook, parent, initialVNode);\n }\n toggleRecurse(instance, true);\n if (el && hydrateNode) {\n const hydrateSubTree = () => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `render`);\n }\n instance.subTree = renderComponentRoot(instance);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `render`);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `hydrate`);\n }\n hydrateNode(\n el,\n instance.subTree,\n instance,\n parentSuspense,\n null\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `hydrate`);\n }\n };\n if (isAsyncWrapperVNode && type.__asyncHydrate) {\n type.__asyncHydrate(\n el,\n instance,\n hydrateSubTree\n );\n } else {\n hydrateSubTree();\n }\n } else {\n if (root.ce && // @ts-expect-error _def is private\n root.ce._def.shadowRoot !== false) {\n root.ce._injectChildStyle(type);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `render`);\n }\n const subTree = instance.subTree = renderComponentRoot(instance);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `render`);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `patch`);\n }\n patch(\n null,\n subTree,\n container,\n anchor,\n instance,\n parentSuspense,\n namespace\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `patch`);\n }\n initialVNode.el = subTree.el;\n }\n if (m) {\n queuePostRenderEffect(m, parentSuspense);\n }\n if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeMounted)) {\n const scopedInitialVNode = initialVNode;\n queuePostRenderEffect(\n () => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode),\n parentSuspense\n );\n }\n if (initialVNode.shapeFlag & 256 || parent && isAsyncWrapper(parent.vnode) && parent.vnode.shapeFlag & 256) {\n instance.a && queuePostRenderEffect(instance.a, parentSuspense);\n }\n instance.isMounted = true;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance);\n }\n initialVNode = container = anchor = null;\n } else {\n let { next, bu, u, parent, vnode } = instance;\n {\n const nonHydratedAsyncRoot = locateNonHydratedAsyncRoot(instance);\n if (nonHydratedAsyncRoot) {\n if (next) {\n next.el = vnode.el;\n updateComponentPreRender(instance, next, optimized);\n }\n nonHydratedAsyncRoot.asyncDep.then(() => {\n if (!instance.isUnmounted) {\n componentUpdateFn();\n }\n });\n return;\n }\n }\n let originNext = next;\n let vnodeHook;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(next || instance.vnode);\n }\n toggleRecurse(instance, false);\n if (next) {\n next.el = vnode.el;\n updateComponentPreRender(instance, next, optimized);\n } else {\n next = vnode;\n }\n if (bu) {\n invokeArrayFns(bu);\n }\n if (vnodeHook = next.props && next.props.onVnodeBeforeUpdate) {\n invokeVNodeHook(vnodeHook, parent, next, vnode);\n }\n toggleRecurse(instance, true);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `render`);\n }\n const nextTree = renderComponentRoot(instance);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `render`);\n }\n const prevTree = instance.subTree;\n instance.subTree = nextTree;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `patch`);\n }\n patch(\n prevTree,\n nextTree,\n // parent may have changed if it's in a teleport\n hostParentNode(prevTree.el),\n // anchor may have changed if it's in a fragment\n getNextHostNode(prevTree),\n instance,\n parentSuspense,\n namespace\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `patch`);\n }\n next.el = nextTree.el;\n if (originNext === null) {\n updateHOCHostEl(instance, nextTree.el);\n }\n if (u) {\n queuePostRenderEffect(u, parentSuspense);\n }\n if (vnodeHook = next.props && next.props.onVnodeUpdated) {\n queuePostRenderEffect(\n () => invokeVNodeHook(vnodeHook, parent, next, vnode),\n parentSuspense\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(instance);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n }\n }\n };\n instance.scope.on();\n const effect = instance.effect = new ReactiveEffect(componentUpdateFn);\n instance.scope.off();\n const update = instance.update = effect.run.bind(effect);\n const job = instance.job = effect.runIfDirty.bind(effect);\n job.i = instance;\n job.id = instance.uid;\n effect.scheduler = () => queueJob(job);\n toggleRecurse(instance, true);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = instance.rtc ? (e) => invokeArrayFns(instance.rtc, e) : void 0;\n effect.onTrigger = instance.rtg ? (e) => invokeArrayFns(instance.rtg, e) : void 0;\n }\n update();\n };\n const updateComponentPreRender = (instance, nextVNode, optimized) => {\n nextVNode.component = instance;\n const prevProps = instance.vnode.props;\n instance.vnode = nextVNode;\n instance.next = null;\n updateProps(instance, nextVNode.props, prevProps, optimized);\n updateSlots(instance, nextVNode.children, optimized);\n pauseTracking();\n flushPreFlushCbs(instance);\n resetTracking();\n };\n const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized = false) => {\n const c1 = n1 && n1.children;\n const prevShapeFlag = n1 ? n1.shapeFlag : 0;\n const c2 = n2.children;\n const { patchFlag, shapeFlag } = n2;\n if (patchFlag > 0) {\n if (patchFlag & 128) {\n patchKeyedChildren(\n c1,\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n return;\n } else if (patchFlag & 256) {\n patchUnkeyedChildren(\n c1,\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n return;\n }\n }\n if (shapeFlag & 8) {\n if (prevShapeFlag & 16) {\n unmountChildren(c1, parentComponent, parentSuspense);\n }\n if (c2 !== c1) {\n hostSetElementText(container, c2);\n }\n } else {\n if (prevShapeFlag & 16) {\n if (shapeFlag & 16) {\n patchKeyedChildren(\n c1,\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n unmountChildren(c1, parentComponent, parentSuspense, true);\n }\n } else {\n if (prevShapeFlag & 8) {\n hostSetElementText(container, \"\");\n }\n if (shapeFlag & 16) {\n mountChildren(\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n }\n }\n };\n const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n c1 = c1 || EMPTY_ARR;\n c2 = c2 || EMPTY_ARR;\n const oldLength = c1.length;\n const newLength = c2.length;\n const commonLength = Math.min(oldLength, newLength);\n let i;\n for (i = 0; i < commonLength; i++) {\n const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n patch(\n c1[i],\n nextChild,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n if (oldLength > newLength) {\n unmountChildren(\n c1,\n parentComponent,\n parentSuspense,\n true,\n false,\n commonLength\n );\n } else {\n mountChildren(\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n commonLength\n );\n }\n };\n const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n let i = 0;\n const l2 = c2.length;\n let e1 = c1.length - 1;\n let e2 = l2 - 1;\n while (i <= e1 && i <= e2) {\n const n1 = c1[i];\n const n2 = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n if (isSameVNodeType(n1, n2)) {\n patch(\n n1,\n n2,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n break;\n }\n i++;\n }\n while (i <= e1 && i <= e2) {\n const n1 = c1[e1];\n const n2 = c2[e2] = optimized ? cloneIfMounted(c2[e2]) : normalizeVNode(c2[e2]);\n if (isSameVNodeType(n1, n2)) {\n patch(\n n1,\n n2,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n break;\n }\n e1--;\n e2--;\n }\n if (i > e1) {\n if (i <= e2) {\n const nextPos = e2 + 1;\n const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor;\n while (i <= e2) {\n patch(\n null,\n c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]),\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n i++;\n }\n }\n } else if (i > e2) {\n while (i <= e1) {\n unmount(c1[i], parentComponent, parentSuspense, true);\n i++;\n }\n } else {\n const s1 = i;\n const s2 = i;\n const keyToNewIndexMap = /* @__PURE__ */ new Map();\n for (i = s2; i <= e2; i++) {\n const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n if (nextChild.key != null) {\n if (!!(process.env.NODE_ENV !== \"production\") && keyToNewIndexMap.has(nextChild.key)) {\n warn$1(\n `Duplicate keys found during update:`,\n JSON.stringify(nextChild.key),\n `Make sure keys are unique.`\n );\n }\n keyToNewIndexMap.set(nextChild.key, i);\n }\n }\n let j;\n let patched = 0;\n const toBePatched = e2 - s2 + 1;\n let moved = false;\n let maxNewIndexSoFar = 0;\n const newIndexToOldIndexMap = new Array(toBePatched);\n for (i = 0; i < toBePatched; i++) newIndexToOldIndexMap[i] = 0;\n for (i = s1; i <= e1; i++) {\n const prevChild = c1[i];\n if (patched >= toBePatched) {\n unmount(prevChild, parentComponent, parentSuspense, true);\n continue;\n }\n let newIndex;\n if (prevChild.key != null) {\n newIndex = keyToNewIndexMap.get(prevChild.key);\n } else {\n for (j = s2; j <= e2; j++) {\n if (newIndexToOldIndexMap[j - s2] === 0 && isSameVNodeType(prevChild, c2[j])) {\n newIndex = j;\n break;\n }\n }\n }\n if (newIndex === void 0) {\n unmount(prevChild, parentComponent, parentSuspense, true);\n } else {\n newIndexToOldIndexMap[newIndex - s2] = i + 1;\n if (newIndex >= maxNewIndexSoFar) {\n maxNewIndexSoFar = newIndex;\n } else {\n moved = true;\n }\n patch(\n prevChild,\n c2[newIndex],\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n patched++;\n }\n }\n const increasingNewIndexSequence = moved ? getSequence(newIndexToOldIndexMap) : EMPTY_ARR;\n j = increasingNewIndexSequence.length - 1;\n for (i = toBePatched - 1; i >= 0; i--) {\n const nextIndex = s2 + i;\n const nextChild = c2[nextIndex];\n const anchorVNode = c2[nextIndex + 1];\n const anchor = nextIndex + 1 < l2 ? (\n // #13559, #14173 fallback to el placeholder for unresolved async component\n anchorVNode.el || resolveAsyncComponentPlaceholder(anchorVNode)\n ) : parentAnchor;\n if (newIndexToOldIndexMap[i] === 0) {\n patch(\n null,\n nextChild,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else if (moved) {\n if (j < 0 || i !== increasingNewIndexSequence[j]) {\n move(nextChild, container, anchor, 2);\n } else {\n j--;\n }\n }\n }\n }\n };\n const move = (vnode, container, anchor, moveType, parentSuspense = null) => {\n const { el, type, transition, children, shapeFlag } = vnode;\n if (shapeFlag & 6) {\n move(vnode.component.subTree, container, anchor, moveType);\n return;\n }\n if (shapeFlag & 128) {\n vnode.suspense.move(container, anchor, moveType);\n return;\n }\n if (shapeFlag & 64) {\n type.move(vnode, container, anchor, internals);\n return;\n }\n if (type === Fragment) {\n hostInsert(el, container, anchor);\n for (let i = 0; i < children.length; i++) {\n move(children[i], container, anchor, moveType);\n }\n hostInsert(vnode.anchor, container, anchor);\n return;\n }\n if (type === Static) {\n moveStaticNode(vnode, container, anchor);\n return;\n }\n const needTransition2 = moveType !== 2 && shapeFlag & 1 && transition;\n if (needTransition2) {\n if (moveType === 0) {\n transition.beforeEnter(el);\n hostInsert(el, container, anchor);\n queuePostRenderEffect(() => transition.enter(el), parentSuspense);\n } else {\n const { leave, delayLeave, afterLeave } = transition;\n const remove2 = () => {\n if (vnode.ctx.isUnmounted) {\n hostRemove(el);\n } else {\n hostInsert(el, container, anchor);\n }\n };\n const performLeave = () => {\n if (el._isLeaving) {\n el[leaveCbKey](\n true\n /* cancelled */\n );\n }\n leave(el, () => {\n remove2();\n afterLeave && afterLeave();\n });\n };\n if (delayLeave) {\n delayLeave(el, remove2, performLeave);\n } else {\n performLeave();\n }\n }\n } else {\n hostInsert(el, container, anchor);\n }\n };\n const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => {\n const {\n type,\n props,\n ref,\n children,\n dynamicChildren,\n shapeFlag,\n patchFlag,\n dirs,\n cacheIndex\n } = vnode;\n if (patchFlag === -2) {\n optimized = false;\n }\n if (ref != null) {\n pauseTracking();\n setRef(ref, null, parentSuspense, vnode, true);\n resetTracking();\n }\n if (cacheIndex != null) {\n parentComponent.renderCache[cacheIndex] = void 0;\n }\n if (shapeFlag & 256) {\n parentComponent.ctx.deactivate(vnode);\n return;\n }\n const shouldInvokeDirs = shapeFlag & 1 && dirs;\n const shouldInvokeVnodeHook = !isAsyncWrapper(vnode);\n let vnodeHook;\n if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeBeforeUnmount)) {\n invokeVNodeHook(vnodeHook, parentComponent, vnode);\n }\n if (shapeFlag & 6) {\n unmountComponent(vnode.component, parentSuspense, doRemove);\n } else {\n if (shapeFlag & 128) {\n vnode.suspense.unmount(parentSuspense, doRemove);\n return;\n }\n if (shouldInvokeDirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeUnmount\");\n }\n if (shapeFlag & 64) {\n vnode.type.remove(\n vnode,\n parentComponent,\n parentSuspense,\n internals,\n doRemove\n );\n } else if (dynamicChildren && // #5154\n // when v-once is used inside a block, setBlockTracking(-1) marks the\n // parent block with hasOnce: true\n // so that it doesn't take the fast path during unmount - otherwise\n // components nested in v-once are never unmounted.\n !dynamicChildren.hasOnce && // #1153: fast path should not be taken for non-stable (v-for) fragments\n (type !== Fragment || patchFlag > 0 && patchFlag & 64)) {\n unmountChildren(\n dynamicChildren,\n parentComponent,\n parentSuspense,\n false,\n true\n );\n } else if (type === Fragment && patchFlag & (128 | 256) || !optimized && shapeFlag & 16) {\n unmountChildren(children, parentComponent, parentSuspense);\n }\n if (doRemove) {\n remove(vnode);\n }\n }\n if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeUnmounted) || shouldInvokeDirs) {\n queuePostRenderEffect(() => {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n shouldInvokeDirs && invokeDirectiveHook(vnode, null, parentComponent, \"unmounted\");\n }, parentSuspense);\n }\n };\n const remove = (vnode) => {\n const { type, el, anchor, transition } = vnode;\n if (type === Fragment) {\n if (!!(process.env.NODE_ENV !== \"production\") && vnode.patchFlag > 0 && vnode.patchFlag & 2048 && transition && !transition.persisted) {\n vnode.children.forEach((child) => {\n if (child.type === Comment) {\n hostRemove(child.el);\n } else {\n remove(child);\n }\n });\n } else {\n removeFragment(el, anchor);\n }\n return;\n }\n if (type === Static) {\n removeStaticNode(vnode);\n return;\n }\n const performRemove = () => {\n hostRemove(el);\n if (transition && !transition.persisted && transition.afterLeave) {\n transition.afterLeave();\n }\n };\n if (vnode.shapeFlag & 1 && transition && !transition.persisted) {\n const { leave, delayLeave } = transition;\n const performLeave = () => leave(el, performRemove);\n if (delayLeave) {\n delayLeave(vnode.el, performRemove, performLeave);\n } else {\n performLeave();\n }\n } else {\n performRemove();\n }\n };\n const removeFragment = (cur, end) => {\n let next;\n while (cur !== end) {\n next = hostNextSibling(cur);\n hostRemove(cur);\n cur = next;\n }\n hostRemove(end);\n };\n const unmountComponent = (instance, parentSuspense, doRemove) => {\n if (!!(process.env.NODE_ENV !== \"production\") && instance.type.__hmrId) {\n unregisterHMR(instance);\n }\n const { bum, scope, job, subTree, um, m, a } = instance;\n invalidateMount(m);\n invalidateMount(a);\n if (bum) {\n invokeArrayFns(bum);\n }\n scope.stop();\n if (job) {\n job.flags |= 8;\n unmount(subTree, instance, parentSuspense, doRemove);\n }\n if (um) {\n queuePostRenderEffect(um, parentSuspense);\n }\n queuePostRenderEffect(() => {\n instance.isUnmounted = true;\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentRemoved(instance);\n }\n };\n const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start = 0) => {\n for (let i = start; i < children.length; i++) {\n unmount(children[i], parentComponent, parentSuspense, doRemove, optimized);\n }\n };\n const getNextHostNode = (vnode) => {\n if (vnode.shapeFlag & 6) {\n return getNextHostNode(vnode.component.subTree);\n }\n if (vnode.shapeFlag & 128) {\n return vnode.suspense.next();\n }\n const el = hostNextSibling(vnode.anchor || vnode.el);\n const teleportEnd = el && el[TeleportEndKey];\n return teleportEnd ? hostNextSibling(teleportEnd) : el;\n };\n let isFlushing = false;\n const render = (vnode, container, namespace) => {\n let instance;\n if (vnode == null) {\n if (container._vnode) {\n unmount(container._vnode, null, null, true);\n instance = container._vnode.component;\n }\n } else {\n patch(\n container._vnode || null,\n vnode,\n container,\n null,\n null,\n null,\n namespace\n );\n }\n container._vnode = vnode;\n if (!isFlushing) {\n isFlushing = true;\n flushPreFlushCbs(instance);\n flushPostFlushCbs();\n isFlushing = false;\n }\n };\n const internals = {\n p: patch,\n um: unmount,\n m: move,\n r: remove,\n mt: mountComponent,\n mc: mountChildren,\n pc: patchChildren,\n pbc: patchBlockChildren,\n n: getNextHostNode,\n o: options\n };\n let hydrate;\n let hydrateNode;\n if (createHydrationFns) {\n [hydrate, hydrateNode] = createHydrationFns(\n internals\n );\n }\n return {\n render,\n hydrate,\n createApp: createAppAPI(render, hydrate)\n };\n}\nfunction resolveChildrenNamespace({ type, props }, currentNamespace) {\n return currentNamespace === \"svg\" && type === \"foreignObject\" || currentNamespace === \"mathml\" && type === \"annotation-xml\" && props && props.encoding && props.encoding.includes(\"html\") ? void 0 : currentNamespace;\n}\nfunction toggleRecurse({ effect, job }, allowed) {\n if (allowed) {\n effect.flags |= 32;\n job.flags |= 4;\n } else {\n effect.flags &= -33;\n job.flags &= -5;\n }\n}\nfunction needTransition(parentSuspense, transition) {\n return (!parentSuspense || parentSuspense && !parentSuspense.pendingBranch) && transition && !transition.persisted;\n}\nfunction traverseStaticChildren(n1, n2, shallow = false) {\n const ch1 = n1.children;\n const ch2 = n2.children;\n if (isArray(ch1) && isArray(ch2)) {\n for (let i = 0; i < ch1.length; i++) {\n const c1 = ch1[i];\n let c2 = ch2[i];\n if (c2.shapeFlag & 1 && !c2.dynamicChildren) {\n if (c2.patchFlag <= 0 || c2.patchFlag === 32) {\n c2 = ch2[i] = cloneIfMounted(ch2[i]);\n c2.el = c1.el;\n }\n if (!shallow && c2.patchFlag !== -2)\n traverseStaticChildren(c1, c2);\n }\n if (c2.type === Text) {\n if (c2.patchFlag !== -1) {\n c2.el = c1.el;\n } else {\n c2.__elIndex = i + // take fragment start anchor into account\n (n1.type === Fragment ? 1 : 0);\n }\n }\n if (c2.type === Comment && !c2.el) {\n c2.el = c1.el;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n c2.el && (c2.el.__vnode = c2);\n }\n }\n }\n}\nfunction getSequence(arr) {\n const p = arr.slice();\n const result = [0];\n let i, j, u, v, c;\n const len = arr.length;\n for (i = 0; i < len; i++) {\n const arrI = arr[i];\n if (arrI !== 0) {\n j = result[result.length - 1];\n if (arr[j] < arrI) {\n p[i] = j;\n result.push(i);\n continue;\n }\n u = 0;\n v = result.length - 1;\n while (u < v) {\n c = u + v >> 1;\n if (arr[result[c]] < arrI) {\n u = c + 1;\n } else {\n v = c;\n }\n }\n if (arrI < arr[result[u]]) {\n if (u > 0) {\n p[i] = result[u - 1];\n }\n result[u] = i;\n }\n }\n }\n u = result.length;\n v = result[u - 1];\n while (u-- > 0) {\n result[u] = v;\n v = p[v];\n }\n return result;\n}\nfunction locateNonHydratedAsyncRoot(instance) {\n const subComponent = instance.subTree.component;\n if (subComponent) {\n if (subComponent.asyncDep && !subComponent.asyncResolved) {\n return subComponent;\n } else {\n return locateNonHydratedAsyncRoot(subComponent);\n }\n }\n}\nfunction invalidateMount(hooks) {\n if (hooks) {\n for (let i = 0; i < hooks.length; i++)\n hooks[i].flags |= 8;\n }\n}\nfunction resolveAsyncComponentPlaceholder(anchorVnode) {\n if (anchorVnode.placeholder) {\n return anchorVnode.placeholder;\n }\n const instance = anchorVnode.component;\n if (instance) {\n return resolveAsyncComponentPlaceholder(instance.subTree);\n }\n return null;\n}\n\nconst isSuspense = (type) => type.__isSuspense;\nlet suspenseId = 0;\nconst SuspenseImpl = {\n name: \"Suspense\",\n // In order to make Suspense tree-shakable, we need to avoid importing it\n // directly in the renderer. The renderer checks for the __isSuspense flag\n // on a vnode's type and calls the `process` method, passing in renderer\n // internals.\n __isSuspense: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) {\n if (n1 == null) {\n mountSuspense(\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n } else {\n if (parentSuspense && parentSuspense.deps > 0 && !n1.suspense.isInFallback) {\n n2.suspense = n1.suspense;\n n2.suspense.vnode = n2;\n n2.el = n1.el;\n return;\n }\n patchSuspense(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n }\n },\n hydrate: hydrateSuspense,\n normalize: normalizeSuspenseChildren\n};\nconst Suspense = SuspenseImpl ;\nfunction triggerEvent(vnode, name) {\n const eventListener = vnode.props && vnode.props[name];\n if (isFunction(eventListener)) {\n eventListener();\n }\n}\nfunction mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) {\n const {\n p: patch,\n o: { createElement }\n } = rendererInternals;\n const hiddenContainer = createElement(\"div\");\n const suspense = vnode.suspense = createSuspenseBoundary(\n vnode,\n parentSuspense,\n parentComponent,\n container,\n hiddenContainer,\n anchor,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n patch(\n null,\n suspense.pendingBranch = vnode.ssContent,\n hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds\n );\n if (suspense.deps > 0) {\n triggerEvent(vnode, \"onPending\");\n triggerEvent(vnode, \"onFallback\");\n patch(\n null,\n vnode.ssFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds\n );\n setActiveBranch(suspense, vnode.ssFallback);\n } else {\n suspense.resolve(false, true);\n }\n}\nfunction patchSuspense(n1, n2, container, anchor, parentComponent, namespace, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) {\n const suspense = n2.suspense = n1.suspense;\n suspense.vnode = n2;\n n2.el = n1.el;\n const newBranch = n2.ssContent;\n const newFallback = n2.ssFallback;\n const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense;\n if (pendingBranch) {\n suspense.pendingBranch = newBranch;\n if (isSameVNodeType(pendingBranch, newBranch)) {\n patch(\n pendingBranch,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else if (isInFallback) {\n if (!isHydrating) {\n patch(\n activeBranch,\n newFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newFallback);\n }\n }\n } else {\n suspense.pendingId = suspenseId++;\n if (isHydrating) {\n suspense.isHydrating = false;\n suspense.activeBranch = pendingBranch;\n } else {\n unmount(pendingBranch, parentComponent, suspense);\n }\n suspense.deps = 0;\n suspense.effects.length = 0;\n suspense.hiddenContainer = createElement(\"div\");\n if (isInFallback) {\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else {\n patch(\n activeBranch,\n newFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newFallback);\n }\n } else if (activeBranch && isSameVNodeType(activeBranch, newBranch)) {\n patch(\n activeBranch,\n newBranch,\n container,\n anchor,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n suspense.resolve(true);\n } else {\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n }\n }\n }\n } else {\n if (activeBranch && isSameVNodeType(activeBranch, newBranch)) {\n patch(\n activeBranch,\n newBranch,\n container,\n anchor,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newBranch);\n } else {\n triggerEvent(n2, \"onPending\");\n suspense.pendingBranch = newBranch;\n if (newBranch.shapeFlag & 512) {\n suspense.pendingId = newBranch.component.suspenseId;\n } else {\n suspense.pendingId = suspenseId++;\n }\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else {\n const { timeout, pendingId } = suspense;\n if (timeout > 0) {\n setTimeout(() => {\n if (suspense.pendingId === pendingId) {\n suspense.fallback(newFallback);\n }\n }, timeout);\n } else if (timeout === 0) {\n suspense.fallback(newFallback);\n }\n }\n }\n }\n}\nlet hasWarned = false;\nfunction createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, namespace, slotScopeIds, optimized, rendererInternals, isHydrating = false) {\n if (!!(process.env.NODE_ENV !== \"production\") && true && !hasWarned) {\n hasWarned = true;\n console[console.info ? \"info\" : \"log\"](\n `<Suspense> is an experimental feature and its API will likely change.`\n );\n }\n const {\n p: patch,\n m: move,\n um: unmount,\n n: next,\n o: { parentNode, remove }\n } = rendererInternals;\n let parentSuspenseId;\n const isSuspensible = isVNodeSuspensible(vnode);\n if (isSuspensible) {\n if (parentSuspense && parentSuspense.pendingBranch) {\n parentSuspenseId = parentSuspense.pendingId;\n parentSuspense.deps++;\n }\n }\n const timeout = vnode.props ? toNumber(vnode.props.timeout) : void 0;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n assertNumber(timeout, `Suspense timeout`);\n }\n const initialAnchor = anchor;\n const suspense = {\n vnode,\n parent: parentSuspense,\n parentComponent,\n namespace,\n container,\n hiddenContainer,\n deps: 0,\n pendingId: suspenseId++,\n timeout: typeof timeout === \"number\" ? timeout : -1,\n activeBranch: null,\n pendingBranch: null,\n isInFallback: !isHydrating,\n isHydrating,\n isUnmounted: false,\n effects: [],\n resolve(resume = false, sync = false) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!resume && !suspense.pendingBranch) {\n throw new Error(\n `suspense.resolve() is called without a pending branch.`\n );\n }\n if (suspense.isUnmounted) {\n throw new Error(\n `suspense.resolve() is called on an already unmounted suspense boundary.`\n );\n }\n }\n const {\n vnode: vnode2,\n activeBranch,\n pendingBranch,\n pendingId,\n effects,\n parentComponent: parentComponent2,\n container: container2,\n isInFallback\n } = suspense;\n let delayEnter = false;\n if (suspense.isHydrating) {\n suspense.isHydrating = false;\n } else if (!resume) {\n delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === \"out-in\";\n if (delayEnter) {\n activeBranch.transition.afterLeave = () => {\n if (pendingId === suspense.pendingId) {\n move(\n pendingBranch,\n container2,\n anchor === initialAnchor ? next(activeBranch) : anchor,\n 0\n );\n queuePostFlushCb(effects);\n if (isInFallback && vnode2.ssFallback) {\n vnode2.ssFallback.el = null;\n }\n }\n };\n }\n if (activeBranch) {\n if (parentNode(activeBranch.el) === container2) {\n anchor = next(activeBranch);\n }\n unmount(activeBranch, parentComponent2, suspense, true);\n if (!delayEnter && isInFallback && vnode2.ssFallback) {\n queuePostRenderEffect(() => vnode2.ssFallback.el = null, suspense);\n }\n }\n if (!delayEnter) {\n move(pendingBranch, container2, anchor, 0);\n }\n }\n setActiveBranch(suspense, pendingBranch);\n suspense.pendingBranch = null;\n suspense.isInFallback = false;\n let parent = suspense.parent;\n let hasUnresolvedAncestor = false;\n while (parent) {\n if (parent.pendingBranch) {\n parent.effects.push(...effects);\n hasUnresolvedAncestor = true;\n break;\n }\n parent = parent.parent;\n }\n if (!hasUnresolvedAncestor && !delayEnter) {\n queuePostFlushCb(effects);\n }\n suspense.effects = [];\n if (isSuspensible) {\n if (parentSuspense && parentSuspense.pendingBranch && parentSuspenseId === parentSuspense.pendingId) {\n parentSuspense.deps--;\n if (parentSuspense.deps === 0 && !sync) {\n parentSuspense.resolve();\n }\n }\n }\n triggerEvent(vnode2, \"onResolve\");\n },\n fallback(fallbackVNode) {\n if (!suspense.pendingBranch) {\n return;\n }\n const { vnode: vnode2, activeBranch, parentComponent: parentComponent2, container: container2, namespace: namespace2 } = suspense;\n triggerEvent(vnode2, \"onFallback\");\n const anchor2 = next(activeBranch);\n const mountFallback = () => {\n if (!suspense.isInFallback) {\n return;\n }\n patch(\n null,\n fallbackVNode,\n container2,\n anchor2,\n parentComponent2,\n null,\n // fallback tree will not have suspense context\n namespace2,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, fallbackVNode);\n };\n const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === \"out-in\";\n if (delayEnter) {\n activeBranch.transition.afterLeave = mountFallback;\n }\n suspense.isInFallback = true;\n unmount(\n activeBranch,\n parentComponent2,\n null,\n // no suspense so unmount hooks fire now\n true\n // shouldRemove\n );\n if (!delayEnter) {\n mountFallback();\n }\n },\n move(container2, anchor2, type) {\n suspense.activeBranch && move(suspense.activeBranch, container2, anchor2, type);\n suspense.container = container2;\n },\n next() {\n return suspense.activeBranch && next(suspense.activeBranch);\n },\n registerDep(instance, setupRenderEffect, optimized2) {\n const isInPendingSuspense = !!suspense.pendingBranch;\n if (isInPendingSuspense) {\n suspense.deps++;\n }\n const hydratedEl = instance.vnode.el;\n instance.asyncDep.catch((err) => {\n handleError(err, instance, 0);\n }).then((asyncSetupResult) => {\n if (instance.isUnmounted || suspense.isUnmounted || suspense.pendingId !== instance.suspenseId) {\n return;\n }\n instance.asyncResolved = true;\n const { vnode: vnode2 } = instance;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(vnode2);\n }\n handleSetupResult(instance, asyncSetupResult, false);\n if (hydratedEl) {\n vnode2.el = hydratedEl;\n }\n const placeholder = !hydratedEl && instance.subTree.el;\n setupRenderEffect(\n instance,\n vnode2,\n // component may have been moved before resolve.\n // if this is not a hydration, instance.subTree will be the comment\n // placeholder.\n parentNode(hydratedEl || instance.subTree.el),\n // anchor will not be used if this is hydration, so only need to\n // consider the comment placeholder case.\n hydratedEl ? null : next(instance.subTree),\n suspense,\n namespace,\n optimized2\n );\n if (placeholder) {\n vnode2.placeholder = null;\n remove(placeholder);\n }\n updateHOCHostEl(instance, vnode2.el);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n }\n if (isInPendingSuspense && --suspense.deps === 0) {\n suspense.resolve();\n }\n });\n },\n unmount(parentSuspense2, doRemove) {\n suspense.isUnmounted = true;\n if (suspense.activeBranch) {\n unmount(\n suspense.activeBranch,\n parentComponent,\n parentSuspense2,\n doRemove\n );\n }\n if (suspense.pendingBranch) {\n unmount(\n suspense.pendingBranch,\n parentComponent,\n parentSuspense2,\n doRemove\n );\n }\n }\n };\n return suspense;\n}\nfunction hydrateSuspense(node, vnode, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals, hydrateNode) {\n const suspense = vnode.suspense = createSuspenseBoundary(\n vnode,\n parentSuspense,\n parentComponent,\n node.parentNode,\n // eslint-disable-next-line no-restricted-globals\n document.createElement(\"div\"),\n null,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals,\n true\n );\n const result = hydrateNode(\n node,\n suspense.pendingBranch = vnode.ssContent,\n parentComponent,\n suspense,\n slotScopeIds,\n optimized\n );\n if (suspense.deps === 0) {\n suspense.resolve(false, true);\n }\n return result;\n}\nfunction normalizeSuspenseChildren(vnode) {\n const { shapeFlag, children } = vnode;\n const isSlotChildren = shapeFlag & 32;\n vnode.ssContent = normalizeSuspenseSlot(\n isSlotChildren ? children.default : children\n );\n vnode.ssFallback = isSlotChildren ? normalizeSuspenseSlot(children.fallback) : createVNode(Comment);\n}\nfunction normalizeSuspenseSlot(s) {\n let block;\n if (isFunction(s)) {\n const trackBlock = isBlockTreeEnabled && s._c;\n if (trackBlock) {\n s._d = false;\n openBlock();\n }\n s = s();\n if (trackBlock) {\n s._d = true;\n block = currentBlock;\n closeBlock();\n }\n }\n if (isArray(s)) {\n const singleChild = filterSingleRoot(s);\n if (!!(process.env.NODE_ENV !== \"production\") && !singleChild && s.filter((child) => child !== NULL_DYNAMIC_COMPONENT).length > 0) {\n warn$1(`<Suspense> slots expect a single root node.`);\n }\n s = singleChild;\n }\n s = normalizeVNode(s);\n if (block && !s.dynamicChildren) {\n s.dynamicChildren = block.filter((c) => c !== s);\n }\n return s;\n}\nfunction queueEffectWithSuspense(fn, suspense) {\n if (suspense && suspense.pendingBranch) {\n if (isArray(fn)) {\n suspense.effects.push(...fn);\n } else {\n suspense.effects.push(fn);\n }\n } else {\n queuePostFlushCb(fn);\n }\n}\nfunction setActiveBranch(suspense, branch) {\n suspense.activeBranch = branch;\n const { vnode, parentComponent } = suspense;\n let el = branch.el;\n while (!el && branch.component) {\n branch = branch.component.subTree;\n el = branch.el;\n }\n vnode.el = el;\n if (parentComponent && parentComponent.subTree === vnode) {\n parentComponent.vnode.el = el;\n updateHOCHostEl(parentComponent, el);\n }\n}\nfunction isVNodeSuspensible(vnode) {\n const suspensible = vnode.props && vnode.props.suspensible;\n return suspensible != null && suspensible !== false;\n}\n\nconst Fragment = /* @__PURE__ */ Symbol.for(\"v-fgt\");\nconst Text = /* @__PURE__ */ Symbol.for(\"v-txt\");\nconst Comment = /* @__PURE__ */ Symbol.for(\"v-cmt\");\nconst Static = /* @__PURE__ */ Symbol.for(\"v-stc\");\nconst blockStack = [];\nlet currentBlock = null;\nfunction openBlock(disableTracking = false) {\n blockStack.push(currentBlock = disableTracking ? null : []);\n}\nfunction closeBlock() {\n blockStack.pop();\n currentBlock = blockStack[blockStack.length - 1] || null;\n}\nlet isBlockTreeEnabled = 1;\nfunction setBlockTracking(value, inVOnce = false) {\n isBlockTreeEnabled += value;\n if (value < 0 && currentBlock && inVOnce) {\n currentBlock.hasOnce = true;\n }\n}\nfunction setupBlock(vnode) {\n vnode.dynamicChildren = isBlockTreeEnabled > 0 ? currentBlock || EMPTY_ARR : null;\n closeBlock();\n if (isBlockTreeEnabled > 0 && currentBlock) {\n currentBlock.push(vnode);\n }\n return vnode;\n}\nfunction createElementBlock(type, props, children, patchFlag, dynamicProps, shapeFlag) {\n return setupBlock(\n createBaseVNode(\n type,\n props,\n children,\n patchFlag,\n dynamicProps,\n shapeFlag,\n true\n )\n );\n}\nfunction createBlock(type, props, children, patchFlag, dynamicProps) {\n return setupBlock(\n createVNode(\n type,\n props,\n children,\n patchFlag,\n dynamicProps,\n true\n )\n );\n}\nfunction isVNode(value) {\n return value ? value.__v_isVNode === true : false;\n}\nfunction isSameVNodeType(n1, n2) {\n if (!!(process.env.NODE_ENV !== \"production\") && n2.shapeFlag & 6 && n1.component) {\n const dirtyInstances = hmrDirtyComponents.get(n2.type);\n if (dirtyInstances && dirtyInstances.has(n1.component)) {\n n1.shapeFlag &= -257;\n n2.shapeFlag &= -513;\n return false;\n }\n }\n return n1.type === n2.type && n1.key === n2.key;\n}\nlet vnodeArgsTransformer;\nfunction transformVNodeArgs(transformer) {\n vnodeArgsTransformer = transformer;\n}\nconst createVNodeWithArgsTransform = (...args) => {\n return _createVNode(\n ...vnodeArgsTransformer ? vnodeArgsTransformer(args, currentRenderingInstance) : args\n );\n};\nconst normalizeKey = ({ key }) => key != null ? key : null;\nconst normalizeRef = ({\n ref,\n ref_key,\n ref_for\n}) => {\n if (typeof ref === \"number\") {\n ref = \"\" + ref;\n }\n return ref != null ? isString(ref) || isRef(ref) || isFunction(ref) ? { i: currentRenderingInstance, r: ref, k: ref_key, f: !!ref_for } : ref : null;\n};\nfunction createBaseVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, shapeFlag = type === Fragment ? 0 : 1, isBlockNode = false, needFullChildrenNormalization = false) {\n const vnode = {\n __v_isVNode: true,\n __v_skip: true,\n type,\n props,\n key: props && normalizeKey(props),\n ref: props && normalizeRef(props),\n scopeId: currentScopeId,\n slotScopeIds: null,\n children,\n component: null,\n suspense: null,\n ssContent: null,\n ssFallback: null,\n dirs: null,\n transition: null,\n el: null,\n anchor: null,\n target: null,\n targetStart: null,\n targetAnchor: null,\n staticCount: 0,\n shapeFlag,\n patchFlag,\n dynamicProps,\n dynamicChildren: null,\n appContext: null,\n ctx: currentRenderingInstance\n };\n if (needFullChildrenNormalization) {\n normalizeChildren(vnode, children);\n if (shapeFlag & 128) {\n type.normalize(vnode);\n }\n } else if (children) {\n vnode.shapeFlag |= isString(children) ? 8 : 16;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && vnode.key !== vnode.key) {\n warn$1(`VNode created with invalid key (NaN). VNode type:`, vnode.type);\n }\n if (isBlockTreeEnabled > 0 && // avoid a block node from tracking itself\n !isBlockNode && // has current parent block\n currentBlock && // presence of a patch flag indicates this node needs patching on updates.\n // component nodes also should always be patched, because even if the\n // component doesn't need to update, it needs to persist the instance on to\n // the next vnode so that it can be properly unmounted later.\n (vnode.patchFlag > 0 || shapeFlag & 6) && // the EVENTS flag is only for hydration and if it is the only flag, the\n // vnode should not be considered dynamic due to handler caching.\n vnode.patchFlag !== 32) {\n currentBlock.push(vnode);\n }\n return vnode;\n}\nconst createVNode = !!(process.env.NODE_ENV !== \"production\") ? createVNodeWithArgsTransform : _createVNode;\nfunction _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) {\n if (!type || type === NULL_DYNAMIC_COMPONENT) {\n if (!!(process.env.NODE_ENV !== \"production\") && !type) {\n warn$1(`Invalid vnode type when creating vnode: ${type}.`);\n }\n type = Comment;\n }\n if (isVNode(type)) {\n const cloned = cloneVNode(\n type,\n props,\n true\n /* mergeRef: true */\n );\n if (children) {\n normalizeChildren(cloned, children);\n }\n if (isBlockTreeEnabled > 0 && !isBlockNode && currentBlock) {\n if (cloned.shapeFlag & 6) {\n currentBlock[currentBlock.indexOf(type)] = cloned;\n } else {\n currentBlock.push(cloned);\n }\n }\n cloned.patchFlag = -2;\n return cloned;\n }\n if (isClassComponent(type)) {\n type = type.__vccOpts;\n }\n if (props) {\n props = guardReactiveProps(props);\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (isObject(style)) {\n if (isProxy(style) && !isArray(style)) {\n style = extend({}, style);\n }\n props.style = normalizeStyle(style);\n }\n }\n const shapeFlag = isString(type) ? 1 : isSuspense(type) ? 128 : isTeleport(type) ? 64 : isObject(type) ? 4 : isFunction(type) ? 2 : 0;\n if (!!(process.env.NODE_ENV !== \"production\") && shapeFlag & 4 && isProxy(type)) {\n type = toRaw(type);\n warn$1(\n `Vue received a Component that was made a reactive object. This can lead to unnecessary performance overhead and should be avoided by marking the component with \\`markRaw\\` or using \\`shallowRef\\` instead of \\`ref\\`.`,\n `\nComponent that was made reactive: `,\n type\n );\n }\n return createBaseVNode(\n type,\n props,\n children,\n patchFlag,\n dynamicProps,\n shapeFlag,\n isBlockNode,\n true\n );\n}\nfunction guardReactiveProps(props) {\n if (!props) return null;\n return isProxy(props) || isInternalObject(props) ? extend({}, props) : props;\n}\nfunction cloneVNode(vnode, extraProps, mergeRef = false, cloneTransition = false) {\n const { props, ref, patchFlag, children, transition } = vnode;\n const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props;\n const cloned = {\n __v_isVNode: true,\n __v_skip: true,\n type: vnode.type,\n props: mergedProps,\n key: mergedProps && normalizeKey(mergedProps),\n ref: extraProps && extraProps.ref ? (\n // #2078 in the case of <component :is=\"vnode\" ref=\"extra\"/>\n // if the vnode itself already has a ref, cloneVNode will need to merge\n // the refs so the single vnode can be set on multiple refs\n mergeRef && ref ? isArray(ref) ? ref.concat(normalizeRef(extraProps)) : [ref, normalizeRef(extraProps)] : normalizeRef(extraProps)\n ) : ref,\n scopeId: vnode.scopeId,\n slotScopeIds: vnode.slotScopeIds,\n children: !!(process.env.NODE_ENV !== \"production\") && patchFlag === -1 && isArray(children) ? children.map(deepCloneVNode) : children,\n target: vnode.target,\n targetStart: vnode.targetStart,\n targetAnchor: vnode.targetAnchor,\n staticCount: vnode.staticCount,\n shapeFlag: vnode.shapeFlag,\n // if the vnode is cloned with extra props, we can no longer assume its\n // existing patch flag to be reliable and need to add the FULL_PROPS flag.\n // note: preserve flag for fragments since they use the flag for children\n // fast paths only.\n patchFlag: extraProps && vnode.type !== Fragment ? patchFlag === -1 ? 16 : patchFlag | 16 : patchFlag,\n dynamicProps: vnode.dynamicProps,\n dynamicChildren: vnode.dynamicChildren,\n appContext: vnode.appContext,\n dirs: vnode.dirs,\n transition,\n // These should technically only be non-null on mounted VNodes. However,\n // they *should* be copied for kept-alive vnodes. So we just always copy\n // them since them being non-null during a mount doesn't affect the logic as\n // they will simply be overwritten.\n component: vnode.component,\n suspense: vnode.suspense,\n ssContent: vnode.ssContent && cloneVNode(vnode.ssContent),\n ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback),\n placeholder: vnode.placeholder,\n el: vnode.el,\n anchor: vnode.anchor,\n ctx: vnode.ctx,\n ce: vnode.ce\n };\n if (transition && cloneTransition) {\n setTransitionHooks(\n cloned,\n transition.clone(cloned)\n );\n }\n return cloned;\n}\nfunction deepCloneVNode(vnode) {\n const cloned = cloneVNode(vnode);\n if (isArray(vnode.children)) {\n cloned.children = vnode.children.map(deepCloneVNode);\n }\n return cloned;\n}\nfunction createTextVNode(text = \" \", flag = 0) {\n return createVNode(Text, null, text, flag);\n}\nfunction createStaticVNode(content, numberOfNodes) {\n const vnode = createVNode(Static, null, content);\n vnode.staticCount = numberOfNodes;\n return vnode;\n}\nfunction createCommentVNode(text = \"\", asBlock = false) {\n return asBlock ? (openBlock(), createBlock(Comment, null, text)) : createVNode(Comment, null, text);\n}\nfunction normalizeVNode(child) {\n if (child == null || typeof child === \"boolean\") {\n return createVNode(Comment);\n } else if (isArray(child)) {\n return createVNode(\n Fragment,\n null,\n // #3666, avoid reference pollution when reusing vnode\n child.slice()\n );\n } else if (isVNode(child)) {\n return cloneIfMounted(child);\n } else {\n return createVNode(Text, null, String(child));\n }\n}\nfunction cloneIfMounted(child) {\n return child.el === null && child.patchFlag !== -1 || child.memo ? child : cloneVNode(child);\n}\nfunction normalizeChildren(vnode, children) {\n let type = 0;\n const { shapeFlag } = vnode;\n if (children == null) {\n children = null;\n } else if (isArray(children)) {\n type = 16;\n } else if (typeof children === \"object\") {\n if (shapeFlag & (1 | 64)) {\n const slot = children.default;\n if (slot) {\n slot._c && (slot._d = false);\n normalizeChildren(vnode, slot());\n slot._c && (slot._d = true);\n }\n return;\n } else {\n type = 32;\n const slotFlag = children._;\n if (!slotFlag && !isInternalObject(children)) {\n children._ctx = currentRenderingInstance;\n } else if (slotFlag === 3 && currentRenderingInstance) {\n if (currentRenderingInstance.slots._ === 1) {\n children._ = 1;\n } else {\n children._ = 2;\n vnode.patchFlag |= 1024;\n }\n }\n }\n } else if (isFunction(children)) {\n children = { default: children, _ctx: currentRenderingInstance };\n type = 32;\n } else {\n children = String(children);\n if (shapeFlag & 64) {\n type = 16;\n children = [createTextVNode(children)];\n } else {\n type = 8;\n }\n }\n vnode.children = children;\n vnode.shapeFlag |= type;\n}\nfunction mergeProps(...args) {\n const ret = {};\n for (let i = 0; i < args.length; i++) {\n const toMerge = args[i];\n for (const key in toMerge) {\n if (key === \"class\") {\n if (ret.class !== toMerge.class) {\n ret.class = normalizeClass([ret.class, toMerge.class]);\n }\n } else if (key === \"style\") {\n ret.style = normalizeStyle([ret.style, toMerge.style]);\n } else if (isOn(key)) {\n const existing = ret[key];\n const incoming = toMerge[key];\n if (incoming && existing !== incoming && !(isArray(existing) && existing.includes(incoming))) {\n ret[key] = existing ? [].concat(existing, incoming) : incoming;\n }\n } else if (key !== \"\") {\n ret[key] = toMerge[key];\n }\n }\n }\n return ret;\n}\nfunction invokeVNodeHook(hook, instance, vnode, prevVNode = null) {\n callWithAsyncErrorHandling(hook, instance, 7, [\n vnode,\n prevVNode\n ]);\n}\n\nconst emptyAppContext = createAppContext();\nlet uid = 0;\nfunction createComponentInstance(vnode, parent, suspense) {\n const type = vnode.type;\n const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;\n const instance = {\n uid: uid++,\n vnode,\n type,\n parent,\n appContext,\n root: null,\n // to be immediately set\n next: null,\n subTree: null,\n // will be set synchronously right after creation\n effect: null,\n update: null,\n // will be set synchronously right after creation\n job: null,\n scope: new EffectScope(\n true\n /* detached */\n ),\n render: null,\n proxy: null,\n exposed: null,\n exposeProxy: null,\n withProxy: null,\n provides: parent ? parent.provides : Object.create(appContext.provides),\n ids: parent ? parent.ids : [\"\", 0, 0],\n accessCache: null,\n renderCache: [],\n // local resolved assets\n components: null,\n directives: null,\n // resolved props and emits options\n propsOptions: normalizePropsOptions(type, appContext),\n emitsOptions: normalizeEmitsOptions(type, appContext),\n // emit\n emit: null,\n // to be set immediately\n emitted: null,\n // props default value\n propsDefaults: EMPTY_OBJ,\n // inheritAttrs\n inheritAttrs: type.inheritAttrs,\n // state\n ctx: EMPTY_OBJ,\n data: EMPTY_OBJ,\n props: EMPTY_OBJ,\n attrs: EMPTY_OBJ,\n slots: EMPTY_OBJ,\n refs: EMPTY_OBJ,\n setupState: EMPTY_OBJ,\n setupContext: null,\n // suspense related\n suspense,\n suspenseId: suspense ? suspense.pendingId : 0,\n asyncDep: null,\n asyncResolved: false,\n // lifecycle hooks\n // not using enums here because it results in computed properties\n isMounted: false,\n isUnmounted: false,\n isDeactivated: false,\n bc: null,\n c: null,\n bm: null,\n m: null,\n bu: null,\n u: null,\n um: null,\n bum: null,\n da: null,\n a: null,\n rtg: null,\n rtc: null,\n ec: null,\n sp: null\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n instance.ctx = createDevRenderContext(instance);\n } else {\n instance.ctx = { _: instance };\n }\n instance.root = parent ? parent.root : instance;\n instance.emit = emit.bind(null, instance);\n if (vnode.ce) {\n vnode.ce(instance);\n }\n return instance;\n}\nlet currentInstance = null;\nconst getCurrentInstance = () => currentInstance || currentRenderingInstance;\nlet internalSetCurrentInstance;\nlet setInSSRSetupState;\n{\n const g = getGlobalThis();\n const registerGlobalSetter = (key, setter) => {\n let setters;\n if (!(setters = g[key])) setters = g[key] = [];\n setters.push(setter);\n return (v) => {\n if (setters.length > 1) setters.forEach((set) => set(v));\n else setters[0](v);\n };\n };\n internalSetCurrentInstance = registerGlobalSetter(\n `__VUE_INSTANCE_SETTERS__`,\n (v) => currentInstance = v\n );\n setInSSRSetupState = registerGlobalSetter(\n `__VUE_SSR_SETTERS__`,\n (v) => isInSSRComponentSetup = v\n );\n}\nconst setCurrentInstance = (instance) => {\n const prev = currentInstance;\n internalSetCurrentInstance(instance);\n instance.scope.on();\n return () => {\n instance.scope.off();\n internalSetCurrentInstance(prev);\n };\n};\nconst unsetCurrentInstance = () => {\n currentInstance && currentInstance.scope.off();\n internalSetCurrentInstance(null);\n};\nconst isBuiltInTag = /* @__PURE__ */ makeMap(\"slot,component\");\nfunction validateComponentName(name, { isNativeTag }) {\n if (isBuiltInTag(name) || isNativeTag(name)) {\n warn$1(\n \"Do not use built-in or reserved HTML elements as component id: \" + name\n );\n }\n}\nfunction isStatefulComponent(instance) {\n return instance.vnode.shapeFlag & 4;\n}\nlet isInSSRComponentSetup = false;\nfunction setupComponent(instance, isSSR = false, optimized = false) {\n isSSR && setInSSRSetupState(isSSR);\n const { props, children } = instance.vnode;\n const isStateful = isStatefulComponent(instance);\n initProps(instance, props, isStateful, isSSR);\n initSlots(instance, children, optimized || isSSR);\n const setupResult = isStateful ? setupStatefulComponent(instance, isSSR) : void 0;\n isSSR && setInSSRSetupState(false);\n return setupResult;\n}\nfunction setupStatefulComponent(instance, isSSR) {\n const Component = instance.type;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (Component.name) {\n validateComponentName(Component.name, instance.appContext.config);\n }\n if (Component.components) {\n const names = Object.keys(Component.components);\n for (let i = 0; i < names.length; i++) {\n validateComponentName(names[i], instance.appContext.config);\n }\n }\n if (Component.directives) {\n const names = Object.keys(Component.directives);\n for (let i = 0; i < names.length; i++) {\n validateDirectiveName(names[i]);\n }\n }\n if (Component.compilerOptions && isRuntimeOnly()) {\n warn$1(\n `\"compilerOptions\" is only supported when using a build of Vue that includes the runtime compiler. Since you are using a runtime-only build, the options should be passed via your build tool config instead.`\n );\n }\n }\n instance.accessCache = /* @__PURE__ */ Object.create(null);\n instance.proxy = new Proxy(instance.ctx, PublicInstanceProxyHandlers);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n exposePropsOnRenderContext(instance);\n }\n const { setup } = Component;\n if (setup) {\n pauseTracking();\n const setupContext = instance.setupContext = setup.length > 1 ? createSetupContext(instance) : null;\n const reset = setCurrentInstance(instance);\n const setupResult = callWithErrorHandling(\n setup,\n instance,\n 0,\n [\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(instance.props) : instance.props,\n setupContext\n ]\n );\n const isAsyncSetup = isPromise(setupResult);\n resetTracking();\n reset();\n if ((isAsyncSetup || instance.sp) && !isAsyncWrapper(instance)) {\n markAsyncBoundary(instance);\n }\n if (isAsyncSetup) {\n setupResult.then(unsetCurrentInstance, unsetCurrentInstance);\n if (isSSR) {\n return setupResult.then((resolvedResult) => {\n handleSetupResult(instance, resolvedResult, isSSR);\n }).catch((e) => {\n handleError(e, instance, 0);\n });\n } else {\n instance.asyncDep = setupResult;\n if (!!(process.env.NODE_ENV !== \"production\") && !instance.suspense) {\n const name = formatComponentName(instance, Component);\n warn$1(\n `Component <${name}>: setup function returned a promise, but no <Suspense> boundary was found in the parent component tree. A component with async setup() must be nested in a <Suspense> in order to be rendered.`\n );\n }\n }\n } else {\n handleSetupResult(instance, setupResult, isSSR);\n }\n } else {\n finishComponentSetup(instance, isSSR);\n }\n}\nfunction handleSetupResult(instance, setupResult, isSSR) {\n if (isFunction(setupResult)) {\n if (instance.type.__ssrInlineRender) {\n instance.ssrRender = setupResult;\n } else {\n instance.render = setupResult;\n }\n } else if (isObject(setupResult)) {\n if (!!(process.env.NODE_ENV !== \"production\") && isVNode(setupResult)) {\n warn$1(\n `setup() should not return VNodes directly - return a render function instead.`\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n instance.devtoolsRawSetupState = setupResult;\n }\n instance.setupState = proxyRefs(setupResult);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n exposeSetupStateOnRenderContext(instance);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && setupResult !== void 0) {\n warn$1(\n `setup() should return an object. Received: ${setupResult === null ? \"null\" : typeof setupResult}`\n );\n }\n finishComponentSetup(instance, isSSR);\n}\nlet compile;\nlet installWithProxy;\nfunction registerRuntimeCompiler(_compile) {\n compile = _compile;\n installWithProxy = (i) => {\n if (i.render._rc) {\n i.withProxy = new Proxy(i.ctx, RuntimeCompiledPublicInstanceProxyHandlers);\n }\n };\n}\nconst isRuntimeOnly = () => !compile;\nfunction finishComponentSetup(instance, isSSR, skipOptions) {\n const Component = instance.type;\n if (!instance.render) {\n if (!isSSR && compile && !Component.render) {\n const template = Component.template || __VUE_OPTIONS_API__ && resolveMergedOptions(instance).template;\n if (template) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `compile`);\n }\n const { isCustomElement, compilerOptions } = instance.appContext.config;\n const { delimiters, compilerOptions: componentCompilerOptions } = Component;\n const finalCompilerOptions = extend(\n extend(\n {\n isCustomElement,\n delimiters\n },\n compilerOptions\n ),\n componentCompilerOptions\n );\n Component.render = compile(template, finalCompilerOptions);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `compile`);\n }\n }\n }\n instance.render = Component.render || NOOP;\n if (installWithProxy) {\n installWithProxy(instance);\n }\n }\n if (__VUE_OPTIONS_API__ && true) {\n const reset = setCurrentInstance(instance);\n pauseTracking();\n try {\n applyOptions(instance);\n } finally {\n resetTracking();\n reset();\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && !Component.render && instance.render === NOOP && !isSSR) {\n if (!compile && Component.template) {\n warn$1(\n `Component provided template option but runtime compilation is not supported in this build of Vue.` + (` Configure your bundler to alias \"vue\" to \"vue/dist/vue.esm-bundler.js\".` )\n );\n } else {\n warn$1(`Component is missing template or render function: `, Component);\n }\n }\n}\nconst attrsProxyHandlers = !!(process.env.NODE_ENV !== \"production\") ? {\n get(target, key) {\n markAttrsAccessed();\n track(target, \"get\", \"\");\n return target[key];\n },\n set() {\n warn$1(`setupContext.attrs is readonly.`);\n return false;\n },\n deleteProperty() {\n warn$1(`setupContext.attrs is readonly.`);\n return false;\n }\n} : {\n get(target, key) {\n track(target, \"get\", \"\");\n return target[key];\n }\n};\nfunction getSlotsProxy(instance) {\n return new Proxy(instance.slots, {\n get(target, key) {\n track(instance, \"get\", \"$slots\");\n return target[key];\n }\n });\n}\nfunction createSetupContext(instance) {\n const expose = (exposed) => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (instance.exposed) {\n warn$1(`expose() should be called only once per setup().`);\n }\n if (exposed != null) {\n let exposedType = typeof exposed;\n if (exposedType === \"object\") {\n if (isArray(exposed)) {\n exposedType = \"array\";\n } else if (isRef(exposed)) {\n exposedType = \"ref\";\n }\n }\n if (exposedType !== \"object\") {\n warn$1(\n `expose() should be passed a plain object, received ${exposedType}.`\n );\n }\n }\n }\n instance.exposed = exposed || {};\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n let attrsProxy;\n let slotsProxy;\n return Object.freeze({\n get attrs() {\n return attrsProxy || (attrsProxy = new Proxy(instance.attrs, attrsProxyHandlers));\n },\n get slots() {\n return slotsProxy || (slotsProxy = getSlotsProxy(instance));\n },\n get emit() {\n return (event, ...args) => instance.emit(event, ...args);\n },\n expose\n });\n } else {\n return {\n attrs: new Proxy(instance.attrs, attrsProxyHandlers),\n slots: instance.slots,\n emit: instance.emit,\n expose\n };\n }\n}\nfunction getComponentPublicInstance(instance) {\n if (instance.exposed) {\n return instance.exposeProxy || (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), {\n get(target, key) {\n if (key in target) {\n return target[key];\n } else if (key in publicPropertiesMap) {\n return publicPropertiesMap[key](instance);\n }\n },\n has(target, key) {\n return key in target || key in publicPropertiesMap;\n }\n }));\n } else {\n return instance.proxy;\n }\n}\nconst classifyRE = /(?:^|[-_])\\w/g;\nconst classify = (str) => str.replace(classifyRE, (c) => c.toUpperCase()).replace(/[-_]/g, \"\");\nfunction getComponentName(Component, includeInferred = true) {\n return isFunction(Component) ? Component.displayName || Component.name : Component.name || includeInferred && Component.__name;\n}\nfunction formatComponentName(instance, Component, isRoot = false) {\n let name = getComponentName(Component);\n if (!name && Component.__file) {\n const match = Component.__file.match(/([^/\\\\]+)\\.\\w+$/);\n if (match) {\n name = match[1];\n }\n }\n if (!name && instance) {\n const inferFromRegistry = (registry) => {\n for (const key in registry) {\n if (registry[key] === Component) {\n return key;\n }\n }\n };\n name = inferFromRegistry(instance.components) || instance.parent && inferFromRegistry(\n instance.parent.type.components\n ) || inferFromRegistry(instance.appContext.components);\n }\n return name ? classify(name) : isRoot ? `App` : `Anonymous`;\n}\nfunction isClassComponent(value) {\n return isFunction(value) && \"__vccOpts\" in value;\n}\n\nconst computed = (getterOrOptions, debugOptions) => {\n const c = computed$1(getterOrOptions, debugOptions, isInSSRComponentSetup);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const i = getCurrentInstance();\n if (i && i.appContext.config.warnRecursiveComputed) {\n c._warnRecursive = true;\n }\n }\n return c;\n};\n\nfunction h(type, propsOrChildren, children) {\n try {\n setBlockTracking(-1);\n const l = arguments.length;\n if (l === 2) {\n if (isObject(propsOrChildren) && !isArray(propsOrChildren)) {\n if (isVNode(propsOrChildren)) {\n return createVNode(type, null, [propsOrChildren]);\n }\n return createVNode(type, propsOrChildren);\n } else {\n return createVNode(type, null, propsOrChildren);\n }\n } else {\n if (l > 3) {\n children = Array.prototype.slice.call(arguments, 2);\n } else if (l === 3 && isVNode(children)) {\n children = [children];\n }\n return createVNode(type, propsOrChildren, children);\n }\n } finally {\n setBlockTracking(1);\n }\n}\n\nfunction initCustomFormatter() {\n if (!!!(process.env.NODE_ENV !== \"production\") || typeof window === \"undefined\") {\n return;\n }\n const vueStyle = { style: \"color:#3ba776\" };\n const numberStyle = { style: \"color:#1677ff\" };\n const stringStyle = { style: \"color:#f5222d\" };\n const keywordStyle = { style: \"color:#eb2f96\" };\n const formatter = {\n __vue_custom_formatter: true,\n header(obj) {\n if (!isObject(obj)) {\n return null;\n }\n if (obj.__isVue) {\n return [\"div\", vueStyle, `VueInstance`];\n } else if (isRef(obj)) {\n pauseTracking();\n const value = obj.value;\n resetTracking();\n return [\n \"div\",\n {},\n [\"span\", vueStyle, genRefFlag(obj)],\n \"<\",\n formatValue(value),\n `>`\n ];\n } else if (isReactive(obj)) {\n return [\n \"div\",\n {},\n [\"span\", vueStyle, isShallow(obj) ? \"ShallowReactive\" : \"Reactive\"],\n \"<\",\n formatValue(obj),\n `>${isReadonly(obj) ? ` (readonly)` : ``}`\n ];\n } else if (isReadonly(obj)) {\n return [\n \"div\",\n {},\n [\"span\", vueStyle, isShallow(obj) ? \"ShallowReadonly\" : \"Readonly\"],\n \"<\",\n formatValue(obj),\n \">\"\n ];\n }\n return null;\n },\n hasBody(obj) {\n return obj && obj.__isVue;\n },\n body(obj) {\n if (obj && obj.__isVue) {\n return [\n \"div\",\n {},\n ...formatInstance(obj.$)\n ];\n }\n }\n };\n function formatInstance(instance) {\n const blocks = [];\n if (instance.type.props && instance.props) {\n blocks.push(createInstanceBlock(\"props\", toRaw(instance.props)));\n }\n if (instance.setupState !== EMPTY_OBJ) {\n blocks.push(createInstanceBlock(\"setup\", instance.setupState));\n }\n if (instance.data !== EMPTY_OBJ) {\n blocks.push(createInstanceBlock(\"data\", toRaw(instance.data)));\n }\n const computed = extractKeys(instance, \"computed\");\n if (computed) {\n blocks.push(createInstanceBlock(\"computed\", computed));\n }\n const injected = extractKeys(instance, \"inject\");\n if (injected) {\n blocks.push(createInstanceBlock(\"injected\", injected));\n }\n blocks.push([\n \"div\",\n {},\n [\n \"span\",\n {\n style: keywordStyle.style + \";opacity:0.66\"\n },\n \"$ (internal): \"\n ],\n [\"object\", { object: instance }]\n ]);\n return blocks;\n }\n function createInstanceBlock(type, target) {\n target = extend({}, target);\n if (!Object.keys(target).length) {\n return [\"span\", {}];\n }\n return [\n \"div\",\n { style: \"line-height:1.25em;margin-bottom:0.6em\" },\n [\n \"div\",\n {\n style: \"color:#476582\"\n },\n type\n ],\n [\n \"div\",\n {\n style: \"padding-left:1.25em\"\n },\n ...Object.keys(target).map((key) => {\n return [\n \"div\",\n {},\n [\"span\", keywordStyle, key + \": \"],\n formatValue(target[key], false)\n ];\n })\n ]\n ];\n }\n function formatValue(v, asRaw = true) {\n if (typeof v === \"number\") {\n return [\"span\", numberStyle, v];\n } else if (typeof v === \"string\") {\n return [\"span\", stringStyle, JSON.stringify(v)];\n } else if (typeof v === \"boolean\") {\n return [\"span\", keywordStyle, v];\n } else if (isObject(v)) {\n return [\"object\", { object: asRaw ? toRaw(v) : v }];\n } else {\n return [\"span\", stringStyle, String(v)];\n }\n }\n function extractKeys(instance, type) {\n const Comp = instance.type;\n if (isFunction(Comp)) {\n return;\n }\n const extracted = {};\n for (const key in instance.ctx) {\n if (isKeyOfType(Comp, key, type)) {\n extracted[key] = instance.ctx[key];\n }\n }\n return extracted;\n }\n function isKeyOfType(Comp, key, type) {\n const opts = Comp[type];\n if (isArray(opts) && opts.includes(key) || isObject(opts) && key in opts) {\n return true;\n }\n if (Comp.extends && isKeyOfType(Comp.extends, key, type)) {\n return true;\n }\n if (Comp.mixins && Comp.mixins.some((m) => isKeyOfType(m, key, type))) {\n return true;\n }\n }\n function genRefFlag(v) {\n if (isShallow(v)) {\n return `ShallowRef`;\n }\n if (v.effect) {\n return `ComputedRef`;\n }\n return `Ref`;\n }\n if (window.devtoolsFormatters) {\n window.devtoolsFormatters.push(formatter);\n } else {\n window.devtoolsFormatters = [formatter];\n }\n}\n\nfunction withMemo(memo, render, cache, index) {\n const cached = cache[index];\n if (cached && isMemoSame(cached, memo)) {\n return cached;\n }\n const ret = render();\n ret.memo = memo.slice();\n ret.cacheIndex = index;\n return cache[index] = ret;\n}\nfunction isMemoSame(cached, memo) {\n const prev = cached.memo;\n if (prev.length != memo.length) {\n return false;\n }\n for (let i = 0; i < prev.length; i++) {\n if (hasChanged(prev[i], memo[i])) {\n return false;\n }\n }\n if (isBlockTreeEnabled > 0 && currentBlock) {\n currentBlock.push(cached);\n }\n return true;\n}\n\nconst version = \"3.5.27\";\nconst warn = !!(process.env.NODE_ENV !== \"production\") ? warn$1 : NOOP;\nconst ErrorTypeStrings = ErrorTypeStrings$1 ;\nconst devtools = !!(process.env.NODE_ENV !== \"production\") || true ? devtools$1 : void 0;\nconst setDevtoolsHook = !!(process.env.NODE_ENV !== \"production\") || true ? setDevtoolsHook$1 : NOOP;\nconst _ssrUtils = {\n createComponentInstance,\n setupComponent,\n renderComponentRoot,\n setCurrentRenderingInstance,\n isVNode: isVNode,\n normalizeVNode,\n getComponentPublicInstance,\n ensureValidVNode,\n pushWarningContext,\n popWarningContext\n};\nconst ssrUtils = _ssrUtils ;\nconst resolveFilter = null;\nconst compatUtils = null;\nconst DeprecationTypes = null;\n\nexport { BaseTransition, BaseTransitionPropsValidators, Comment, DeprecationTypes, ErrorCodes, ErrorTypeStrings, Fragment, KeepAlive, Static, Suspense, Teleport, Text, assertNumber, callWithAsyncErrorHandling, callWithErrorHandling, cloneVNode, compatUtils, computed, createBlock, createCommentVNode, createElementBlock, createBaseVNode as createElementVNode, createHydrationRenderer, createPropsRestProxy, createRenderer, createSlots, createStaticVNode, createTextVNode, createVNode, defineAsyncComponent, defineComponent, defineEmits, defineExpose, defineModel, defineOptions, defineProps, defineSlots, devtools, getCurrentInstance, getTransitionRawChildren, guardReactiveProps, h, handleError, hasInjectionContext, hydrateOnIdle, hydrateOnInteraction, hydrateOnMediaQuery, hydrateOnVisible, initCustomFormatter, inject, isMemoSame, isRuntimeOnly, isVNode, mergeDefaults, mergeModels, mergeProps, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onServerPrefetch, onUnmounted, onUpdated, openBlock, popScopeId, provide, pushScopeId, queuePostFlushCb, registerRuntimeCompiler, renderList, renderSlot, resolveComponent, resolveDirective, resolveDynamicComponent, resolveFilter, resolveTransitionHooks, setBlockTracking, setDevtoolsHook, setTransitionHooks, ssrContextKey, ssrUtils, toHandlers, transformVNodeArgs, useAttrs, useId, useModel, useSSRContext, useSlots, useTemplateRef, useTransitionState, version, warn, watch, watchEffect, watchPostEffect, watchSyncEffect, withAsyncContext, withCtx, withDefaults, withDirectives, withMemo, withScopeId };\n","/**\n* @vue/runtime-dom v3.5.27\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { warn, BaseTransitionPropsValidators, h, BaseTransition, assertNumber, getCurrentInstance, onBeforeUpdate, queuePostFlushCb, onMounted, watch, onUnmounted, Fragment, Static, camelize, callWithAsyncErrorHandling, defineComponent, nextTick, unref, createVNode, useTransitionState, onUpdated, toRaw, getTransitionRawChildren, setTransitionHooks, resolveTransitionHooks, Text, createRenderer, createHydrationRenderer, isRuntimeOnly } from '@vue/runtime-core';\nexport * from '@vue/runtime-core';\nimport { extend, isObject, toNumber, isArray, NOOP, normalizeCssVarValue, isString, hyphenate, capitalize, isSpecialBooleanAttr, includeBooleanAttr, isSymbol, isFunction, isOn, isModelListener, camelize as camelize$1, isPlainObject, hasOwn, EMPTY_OBJ, looseToNumber, looseIndexOf, isSet, looseEqual, invokeArrayFns, isHTMLTag, isSVGTag, isMathMLTag } from '@vue/shared';\n\nlet policy = void 0;\nconst tt = typeof window !== \"undefined\" && window.trustedTypes;\nif (tt) {\n try {\n policy = /* @__PURE__ */ tt.createPolicy(\"vue\", {\n createHTML: (val) => val\n });\n } catch (e) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Error creating trusted types policy: ${e}`);\n }\n}\nconst unsafeToTrustedHTML = policy ? (val) => policy.createHTML(val) : (val) => val;\nconst svgNS = \"http://www.w3.org/2000/svg\";\nconst mathmlNS = \"http://www.w3.org/1998/Math/MathML\";\nconst doc = typeof document !== \"undefined\" ? document : null;\nconst templateContainer = doc && /* @__PURE__ */ doc.createElement(\"template\");\nconst nodeOps = {\n insert: (child, parent, anchor) => {\n parent.insertBefore(child, anchor || null);\n },\n remove: (child) => {\n const parent = child.parentNode;\n if (parent) {\n parent.removeChild(child);\n }\n },\n createElement: (tag, namespace, is, props) => {\n const el = namespace === \"svg\" ? doc.createElementNS(svgNS, tag) : namespace === \"mathml\" ? doc.createElementNS(mathmlNS, tag) : is ? doc.createElement(tag, { is }) : doc.createElement(tag);\n if (tag === \"select\" && props && props.multiple != null) {\n el.setAttribute(\"multiple\", props.multiple);\n }\n return el;\n },\n createText: (text) => doc.createTextNode(text),\n createComment: (text) => doc.createComment(text),\n setText: (node, text) => {\n node.nodeValue = text;\n },\n setElementText: (el, text) => {\n el.textContent = text;\n },\n parentNode: (node) => node.parentNode,\n nextSibling: (node) => node.nextSibling,\n querySelector: (selector) => doc.querySelector(selector),\n setScopeId(el, id) {\n el.setAttribute(id, \"\");\n },\n // __UNSAFE__\n // Reason: innerHTML.\n // Static content here can only come from compiled templates.\n // As long as the user only uses trusted templates, this is safe.\n insertStaticContent(content, parent, anchor, namespace, start, end) {\n const before = anchor ? anchor.previousSibling : parent.lastChild;\n if (start && (start === end || start.nextSibling)) {\n while (true) {\n parent.insertBefore(start.cloneNode(true), anchor);\n if (start === end || !(start = start.nextSibling)) break;\n }\n } else {\n templateContainer.innerHTML = unsafeToTrustedHTML(\n namespace === \"svg\" ? `<svg>${content}</svg>` : namespace === \"mathml\" ? `<math>${content}</math>` : content\n );\n const template = templateContainer.content;\n if (namespace === \"svg\" || namespace === \"mathml\") {\n const wrapper = template.firstChild;\n while (wrapper.firstChild) {\n template.appendChild(wrapper.firstChild);\n }\n template.removeChild(wrapper);\n }\n parent.insertBefore(template, anchor);\n }\n return [\n // first\n before ? before.nextSibling : parent.firstChild,\n // last\n anchor ? anchor.previousSibling : parent.lastChild\n ];\n }\n};\n\nconst TRANSITION = \"transition\";\nconst ANIMATION = \"animation\";\nconst vtcKey = /* @__PURE__ */ Symbol(\"_vtc\");\nconst DOMTransitionPropsValidators = {\n name: String,\n type: String,\n css: {\n type: Boolean,\n default: true\n },\n duration: [String, Number, Object],\n enterFromClass: String,\n enterActiveClass: String,\n enterToClass: String,\n appearFromClass: String,\n appearActiveClass: String,\n appearToClass: String,\n leaveFromClass: String,\n leaveActiveClass: String,\n leaveToClass: String\n};\nconst TransitionPropsValidators = /* @__PURE__ */ extend(\n {},\n BaseTransitionPropsValidators,\n DOMTransitionPropsValidators\n);\nconst decorate$1 = (t) => {\n t.displayName = \"Transition\";\n t.props = TransitionPropsValidators;\n return t;\n};\nconst Transition = /* @__PURE__ */ decorate$1(\n (props, { slots }) => h(BaseTransition, resolveTransitionProps(props), slots)\n);\nconst callHook = (hook, args = []) => {\n if (isArray(hook)) {\n hook.forEach((h2) => h2(...args));\n } else if (hook) {\n hook(...args);\n }\n};\nconst hasExplicitCallback = (hook) => {\n return hook ? isArray(hook) ? hook.some((h2) => h2.length > 1) : hook.length > 1 : false;\n};\nfunction resolveTransitionProps(rawProps) {\n const baseProps = {};\n for (const key in rawProps) {\n if (!(key in DOMTransitionPropsValidators)) {\n baseProps[key] = rawProps[key];\n }\n }\n if (rawProps.css === false) {\n return baseProps;\n }\n const {\n name = \"v\",\n type,\n duration,\n enterFromClass = `${name}-enter-from`,\n enterActiveClass = `${name}-enter-active`,\n enterToClass = `${name}-enter-to`,\n appearFromClass = enterFromClass,\n appearActiveClass = enterActiveClass,\n appearToClass = enterToClass,\n leaveFromClass = `${name}-leave-from`,\n leaveActiveClass = `${name}-leave-active`,\n leaveToClass = `${name}-leave-to`\n } = rawProps;\n const durations = normalizeDuration(duration);\n const enterDuration = durations && durations[0];\n const leaveDuration = durations && durations[1];\n const {\n onBeforeEnter,\n onEnter,\n onEnterCancelled,\n onLeave,\n onLeaveCancelled,\n onBeforeAppear = onBeforeEnter,\n onAppear = onEnter,\n onAppearCancelled = onEnterCancelled\n } = baseProps;\n const finishEnter = (el, isAppear, done, isCancelled) => {\n el._enterCancelled = isCancelled;\n removeTransitionClass(el, isAppear ? appearToClass : enterToClass);\n removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass);\n done && done();\n };\n const finishLeave = (el, done) => {\n el._isLeaving = false;\n removeTransitionClass(el, leaveFromClass);\n removeTransitionClass(el, leaveToClass);\n removeTransitionClass(el, leaveActiveClass);\n done && done();\n };\n const makeEnterHook = (isAppear) => {\n return (el, done) => {\n const hook = isAppear ? onAppear : onEnter;\n const resolve = () => finishEnter(el, isAppear, done);\n callHook(hook, [el, resolve]);\n nextFrame(() => {\n removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);\n addTransitionClass(el, isAppear ? appearToClass : enterToClass);\n if (!hasExplicitCallback(hook)) {\n whenTransitionEnds(el, type, enterDuration, resolve);\n }\n });\n };\n };\n return extend(baseProps, {\n onBeforeEnter(el) {\n callHook(onBeforeEnter, [el]);\n addTransitionClass(el, enterFromClass);\n addTransitionClass(el, enterActiveClass);\n },\n onBeforeAppear(el) {\n callHook(onBeforeAppear, [el]);\n addTransitionClass(el, appearFromClass);\n addTransitionClass(el, appearActiveClass);\n },\n onEnter: makeEnterHook(false),\n onAppear: makeEnterHook(true),\n onLeave(el, done) {\n el._isLeaving = true;\n const resolve = () => finishLeave(el, done);\n addTransitionClass(el, leaveFromClass);\n if (!el._enterCancelled) {\n forceReflow(el);\n addTransitionClass(el, leaveActiveClass);\n } else {\n addTransitionClass(el, leaveActiveClass);\n forceReflow(el);\n }\n nextFrame(() => {\n if (!el._isLeaving) {\n return;\n }\n removeTransitionClass(el, leaveFromClass);\n addTransitionClass(el, leaveToClass);\n if (!hasExplicitCallback(onLeave)) {\n whenTransitionEnds(el, type, leaveDuration, resolve);\n }\n });\n callHook(onLeave, [el, resolve]);\n },\n onEnterCancelled(el) {\n finishEnter(el, false, void 0, true);\n callHook(onEnterCancelled, [el]);\n },\n onAppearCancelled(el) {\n finishEnter(el, true, void 0, true);\n callHook(onAppearCancelled, [el]);\n },\n onLeaveCancelled(el) {\n finishLeave(el);\n callHook(onLeaveCancelled, [el]);\n }\n });\n}\nfunction normalizeDuration(duration) {\n if (duration == null) {\n return null;\n } else if (isObject(duration)) {\n return [NumberOf(duration.enter), NumberOf(duration.leave)];\n } else {\n const n = NumberOf(duration);\n return [n, n];\n }\n}\nfunction NumberOf(val) {\n const res = toNumber(val);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n assertNumber(res, \"<transition> explicit duration\");\n }\n return res;\n}\nfunction addTransitionClass(el, cls) {\n cls.split(/\\s+/).forEach((c) => c && el.classList.add(c));\n (el[vtcKey] || (el[vtcKey] = /* @__PURE__ */ new Set())).add(cls);\n}\nfunction removeTransitionClass(el, cls) {\n cls.split(/\\s+/).forEach((c) => c && el.classList.remove(c));\n const _vtc = el[vtcKey];\n if (_vtc) {\n _vtc.delete(cls);\n if (!_vtc.size) {\n el[vtcKey] = void 0;\n }\n }\n}\nfunction nextFrame(cb) {\n requestAnimationFrame(() => {\n requestAnimationFrame(cb);\n });\n}\nlet endId = 0;\nfunction whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {\n const id = el._endId = ++endId;\n const resolveIfNotStale = () => {\n if (id === el._endId) {\n resolve();\n }\n };\n if (explicitTimeout != null) {\n return setTimeout(resolveIfNotStale, explicitTimeout);\n }\n const { type, timeout, propCount } = getTransitionInfo(el, expectedType);\n if (!type) {\n return resolve();\n }\n const endEvent = type + \"end\";\n let ended = 0;\n const end = () => {\n el.removeEventListener(endEvent, onEnd);\n resolveIfNotStale();\n };\n const onEnd = (e) => {\n if (e.target === el && ++ended >= propCount) {\n end();\n }\n };\n setTimeout(() => {\n if (ended < propCount) {\n end();\n }\n }, timeout + 1);\n el.addEventListener(endEvent, onEnd);\n}\nfunction getTransitionInfo(el, expectedType) {\n const styles = window.getComputedStyle(el);\n const getStyleProperties = (key) => (styles[key] || \"\").split(\", \");\n const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);\n const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);\n const transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n const animationDelays = getStyleProperties(`${ANIMATION}Delay`);\n const animationDurations = getStyleProperties(`${ANIMATION}Duration`);\n const animationTimeout = getTimeout(animationDelays, animationDurations);\n let type = null;\n let timeout = 0;\n let propCount = 0;\n if (expectedType === TRANSITION) {\n if (transitionTimeout > 0) {\n type = TRANSITION;\n timeout = transitionTimeout;\n propCount = transitionDurations.length;\n }\n } else if (expectedType === ANIMATION) {\n if (animationTimeout > 0) {\n type = ANIMATION;\n timeout = animationTimeout;\n propCount = animationDurations.length;\n }\n } else {\n timeout = Math.max(transitionTimeout, animationTimeout);\n type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null;\n propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0;\n }\n const hasTransform = type === TRANSITION && /\\b(?:transform|all)(?:,|$)/.test(\n getStyleProperties(`${TRANSITION}Property`).toString()\n );\n return {\n type,\n timeout,\n propCount,\n hasTransform\n };\n}\nfunction getTimeout(delays, durations) {\n while (delays.length < durations.length) {\n delays = delays.concat(delays);\n }\n return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i])));\n}\nfunction toMs(s) {\n if (s === \"auto\") return 0;\n return Number(s.slice(0, -1).replace(\",\", \".\")) * 1e3;\n}\nfunction forceReflow(el) {\n const targetDocument = el ? el.ownerDocument : document;\n return targetDocument.body.offsetHeight;\n}\n\nfunction patchClass(el, value, isSVG) {\n const transitionClasses = el[vtcKey];\n if (transitionClasses) {\n value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(\" \");\n }\n if (value == null) {\n el.removeAttribute(\"class\");\n } else if (isSVG) {\n el.setAttribute(\"class\", value);\n } else {\n el.className = value;\n }\n}\n\nconst vShowOriginalDisplay = /* @__PURE__ */ Symbol(\"_vod\");\nconst vShowHidden = /* @__PURE__ */ Symbol(\"_vsh\");\nconst vShow = {\n // used for prop mismatch check during hydration\n name: \"show\",\n beforeMount(el, { value }, { transition }) {\n el[vShowOriginalDisplay] = el.style.display === \"none\" ? \"\" : el.style.display;\n if (transition && value) {\n transition.beforeEnter(el);\n } else {\n setDisplay(el, value);\n }\n },\n mounted(el, { value }, { transition }) {\n if (transition && value) {\n transition.enter(el);\n }\n },\n updated(el, { value, oldValue }, { transition }) {\n if (!value === !oldValue) return;\n if (transition) {\n if (value) {\n transition.beforeEnter(el);\n setDisplay(el, true);\n transition.enter(el);\n } else {\n transition.leave(el, () => {\n setDisplay(el, false);\n });\n }\n } else {\n setDisplay(el, value);\n }\n },\n beforeUnmount(el, { value }) {\n setDisplay(el, value);\n }\n};\nfunction setDisplay(el, value) {\n el.style.display = value ? el[vShowOriginalDisplay] : \"none\";\n el[vShowHidden] = !value;\n}\nfunction initVShowForSSR() {\n vShow.getSSRProps = ({ value }) => {\n if (!value) {\n return { style: { display: \"none\" } };\n }\n };\n}\n\nconst CSS_VAR_TEXT = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? \"CSS_VAR_TEXT\" : \"\");\nfunction useCssVars(getter) {\n const instance = getCurrentInstance();\n if (!instance) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`useCssVars is called without current active component instance.`);\n return;\n }\n const updateTeleports = instance.ut = (vars = getter(instance.proxy)) => {\n Array.from(\n document.querySelectorAll(`[data-v-owner=\"${instance.uid}\"]`)\n ).forEach((node) => setVarsOnNode(node, vars));\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n instance.getCssVars = () => getter(instance.proxy);\n }\n const setVars = () => {\n const vars = getter(instance.proxy);\n if (instance.ce) {\n setVarsOnNode(instance.ce, vars);\n } else {\n setVarsOnVNode(instance.subTree, vars);\n }\n updateTeleports(vars);\n };\n onBeforeUpdate(() => {\n queuePostFlushCb(setVars);\n });\n onMounted(() => {\n watch(setVars, NOOP, { flush: \"post\" });\n const ob = new MutationObserver(setVars);\n ob.observe(instance.subTree.el.parentNode, { childList: true });\n onUnmounted(() => ob.disconnect());\n });\n}\nfunction setVarsOnVNode(vnode, vars) {\n if (vnode.shapeFlag & 128) {\n const suspense = vnode.suspense;\n vnode = suspense.activeBranch;\n if (suspense.pendingBranch && !suspense.isHydrating) {\n suspense.effects.push(() => {\n setVarsOnVNode(suspense.activeBranch, vars);\n });\n }\n }\n while (vnode.component) {\n vnode = vnode.component.subTree;\n }\n if (vnode.shapeFlag & 1 && vnode.el) {\n setVarsOnNode(vnode.el, vars);\n } else if (vnode.type === Fragment) {\n vnode.children.forEach((c) => setVarsOnVNode(c, vars));\n } else if (vnode.type === Static) {\n let { el, anchor } = vnode;\n while (el) {\n setVarsOnNode(el, vars);\n if (el === anchor) break;\n el = el.nextSibling;\n }\n }\n}\nfunction setVarsOnNode(el, vars) {\n if (el.nodeType === 1) {\n const style = el.style;\n let cssText = \"\";\n for (const key in vars) {\n const value = normalizeCssVarValue(vars[key]);\n style.setProperty(`--${key}`, value);\n cssText += `--${key}: ${value};`;\n }\n style[CSS_VAR_TEXT] = cssText;\n }\n}\n\nconst displayRE = /(?:^|;)\\s*display\\s*:/;\nfunction patchStyle(el, prev, next) {\n const style = el.style;\n const isCssString = isString(next);\n let hasControlledDisplay = false;\n if (next && !isCssString) {\n if (prev) {\n if (!isString(prev)) {\n for (const key in prev) {\n if (next[key] == null) {\n setStyle(style, key, \"\");\n }\n }\n } else {\n for (const prevStyle of prev.split(\";\")) {\n const key = prevStyle.slice(0, prevStyle.indexOf(\":\")).trim();\n if (next[key] == null) {\n setStyle(style, key, \"\");\n }\n }\n }\n }\n for (const key in next) {\n if (key === \"display\") {\n hasControlledDisplay = true;\n }\n setStyle(style, key, next[key]);\n }\n } else {\n if (isCssString) {\n if (prev !== next) {\n const cssVarText = style[CSS_VAR_TEXT];\n if (cssVarText) {\n next += \";\" + cssVarText;\n }\n style.cssText = next;\n hasControlledDisplay = displayRE.test(next);\n }\n } else if (prev) {\n el.removeAttribute(\"style\");\n }\n }\n if (vShowOriginalDisplay in el) {\n el[vShowOriginalDisplay] = hasControlledDisplay ? style.display : \"\";\n if (el[vShowHidden]) {\n style.display = \"none\";\n }\n }\n}\nconst semicolonRE = /[^\\\\];\\s*$/;\nconst importantRE = /\\s*!important$/;\nfunction setStyle(style, name, val) {\n if (isArray(val)) {\n val.forEach((v) => setStyle(style, name, v));\n } else {\n if (val == null) val = \"\";\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (semicolonRE.test(val)) {\n warn(\n `Unexpected semicolon at the end of '${name}' style value: '${val}'`\n );\n }\n }\n if (name.startsWith(\"--\")) {\n style.setProperty(name, val);\n } else {\n const prefixed = autoPrefix(style, name);\n if (importantRE.test(val)) {\n style.setProperty(\n hyphenate(prefixed),\n val.replace(importantRE, \"\"),\n \"important\"\n );\n } else {\n style[prefixed] = val;\n }\n }\n }\n}\nconst prefixes = [\"Webkit\", \"Moz\", \"ms\"];\nconst prefixCache = {};\nfunction autoPrefix(style, rawName) {\n const cached = prefixCache[rawName];\n if (cached) {\n return cached;\n }\n let name = camelize(rawName);\n if (name !== \"filter\" && name in style) {\n return prefixCache[rawName] = name;\n }\n name = capitalize(name);\n for (let i = 0; i < prefixes.length; i++) {\n const prefixed = prefixes[i] + name;\n if (prefixed in style) {\n return prefixCache[rawName] = prefixed;\n }\n }\n return rawName;\n}\n\nconst xlinkNS = \"http://www.w3.org/1999/xlink\";\nfunction patchAttr(el, key, value, isSVG, instance, isBoolean = isSpecialBooleanAttr(key)) {\n if (isSVG && key.startsWith(\"xlink:\")) {\n if (value == null) {\n el.removeAttributeNS(xlinkNS, key.slice(6, key.length));\n } else {\n el.setAttributeNS(xlinkNS, key, value);\n }\n } else {\n if (value == null || isBoolean && !includeBooleanAttr(value)) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(\n key,\n isBoolean ? \"\" : isSymbol(value) ? String(value) : value\n );\n }\n }\n}\n\nfunction patchDOMProp(el, key, value, parentComponent, attrName) {\n if (key === \"innerHTML\" || key === \"textContent\") {\n if (value != null) {\n el[key] = key === \"innerHTML\" ? unsafeToTrustedHTML(value) : value;\n }\n return;\n }\n const tag = el.tagName;\n if (key === \"value\" && tag !== \"PROGRESS\" && // custom elements may use _value internally\n !tag.includes(\"-\")) {\n const oldValue = tag === \"OPTION\" ? el.getAttribute(\"value\") || \"\" : el.value;\n const newValue = value == null ? (\n // #11647: value should be set as empty string for null and undefined,\n // but <input type=\"checkbox\"> should be set as 'on'.\n el.type === \"checkbox\" ? \"on\" : \"\"\n ) : String(value);\n if (oldValue !== newValue || !(\"_value\" in el)) {\n el.value = newValue;\n }\n if (value == null) {\n el.removeAttribute(key);\n }\n el._value = value;\n return;\n }\n let needRemove = false;\n if (value === \"\" || value == null) {\n const type = typeof el[key];\n if (type === \"boolean\") {\n value = includeBooleanAttr(value);\n } else if (value == null && type === \"string\") {\n value = \"\";\n needRemove = true;\n } else if (type === \"number\") {\n value = 0;\n needRemove = true;\n }\n }\n try {\n el[key] = value;\n } catch (e) {\n if (!!(process.env.NODE_ENV !== \"production\") && !needRemove) {\n warn(\n `Failed setting prop \"${key}\" on <${tag.toLowerCase()}>: value ${value} is invalid.`,\n e\n );\n }\n }\n needRemove && el.removeAttribute(attrName || key);\n}\n\nfunction addEventListener(el, event, handler, options) {\n el.addEventListener(event, handler, options);\n}\nfunction removeEventListener(el, event, handler, options) {\n el.removeEventListener(event, handler, options);\n}\nconst veiKey = /* @__PURE__ */ Symbol(\"_vei\");\nfunction patchEvent(el, rawName, prevValue, nextValue, instance = null) {\n const invokers = el[veiKey] || (el[veiKey] = {});\n const existingInvoker = invokers[rawName];\n if (nextValue && existingInvoker) {\n existingInvoker.value = !!(process.env.NODE_ENV !== \"production\") ? sanitizeEventValue(nextValue, rawName) : nextValue;\n } else {\n const [name, options] = parseName(rawName);\n if (nextValue) {\n const invoker = invokers[rawName] = createInvoker(\n !!(process.env.NODE_ENV !== \"production\") ? sanitizeEventValue(nextValue, rawName) : nextValue,\n instance\n );\n addEventListener(el, name, invoker, options);\n } else if (existingInvoker) {\n removeEventListener(el, name, existingInvoker, options);\n invokers[rawName] = void 0;\n }\n }\n}\nconst optionsModifierRE = /(?:Once|Passive|Capture)$/;\nfunction parseName(name) {\n let options;\n if (optionsModifierRE.test(name)) {\n options = {};\n let m;\n while (m = name.match(optionsModifierRE)) {\n name = name.slice(0, name.length - m[0].length);\n options[m[0].toLowerCase()] = true;\n }\n }\n const event = name[2] === \":\" ? name.slice(3) : hyphenate(name.slice(2));\n return [event, options];\n}\nlet cachedNow = 0;\nconst p = /* @__PURE__ */ Promise.resolve();\nconst getNow = () => cachedNow || (p.then(() => cachedNow = 0), cachedNow = Date.now());\nfunction createInvoker(initialValue, instance) {\n const invoker = (e) => {\n if (!e._vts) {\n e._vts = Date.now();\n } else if (e._vts <= invoker.attached) {\n return;\n }\n callWithAsyncErrorHandling(\n patchStopImmediatePropagation(e, invoker.value),\n instance,\n 5,\n [e]\n );\n };\n invoker.value = initialValue;\n invoker.attached = getNow();\n return invoker;\n}\nfunction sanitizeEventValue(value, propName) {\n if (isFunction(value) || isArray(value)) {\n return value;\n }\n warn(\n `Wrong type passed as event handler to ${propName} - did you forget @ or : in front of your prop?\nExpected function or array of functions, received type ${typeof value}.`\n );\n return NOOP;\n}\nfunction patchStopImmediatePropagation(e, value) {\n if (isArray(value)) {\n const originalStop = e.stopImmediatePropagation;\n e.stopImmediatePropagation = () => {\n originalStop.call(e);\n e._stopped = true;\n };\n return value.map(\n (fn) => (e2) => !e2._stopped && fn && fn(e2)\n );\n } else {\n return value;\n }\n}\n\nconst isNativeOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // lowercase letter\nkey.charCodeAt(2) > 96 && key.charCodeAt(2) < 123;\nconst patchProp = (el, key, prevValue, nextValue, namespace, parentComponent) => {\n const isSVG = namespace === \"svg\";\n if (key === \"class\") {\n patchClass(el, nextValue, isSVG);\n } else if (key === \"style\") {\n patchStyle(el, prevValue, nextValue);\n } else if (isOn(key)) {\n if (!isModelListener(key)) {\n patchEvent(el, key, prevValue, nextValue, parentComponent);\n }\n } else if (key[0] === \".\" ? (key = key.slice(1), true) : key[0] === \"^\" ? (key = key.slice(1), false) : shouldSetAsProp(el, key, nextValue, isSVG)) {\n patchDOMProp(el, key, nextValue);\n if (!el.tagName.includes(\"-\") && (key === \"value\" || key === \"checked\" || key === \"selected\")) {\n patchAttr(el, key, nextValue, isSVG, parentComponent, key !== \"value\");\n }\n } else if (\n // #11081 force set props for possible async custom element\n el._isVueCE && (/[A-Z]/.test(key) || !isString(nextValue))\n ) {\n patchDOMProp(el, camelize$1(key), nextValue, parentComponent, key);\n } else {\n if (key === \"true-value\") {\n el._trueValue = nextValue;\n } else if (key === \"false-value\") {\n el._falseValue = nextValue;\n }\n patchAttr(el, key, nextValue, isSVG);\n }\n};\nfunction shouldSetAsProp(el, key, value, isSVG) {\n if (isSVG) {\n if (key === \"innerHTML\" || key === \"textContent\") {\n return true;\n }\n if (key in el && isNativeOn(key) && isFunction(value)) {\n return true;\n }\n return false;\n }\n if (key === \"spellcheck\" || key === \"draggable\" || key === \"translate\" || key === \"autocorrect\") {\n return false;\n }\n if (key === \"sandbox\" && el.tagName === \"IFRAME\") {\n return false;\n }\n if (key === \"form\") {\n return false;\n }\n if (key === \"list\" && el.tagName === \"INPUT\") {\n return false;\n }\n if (key === \"type\" && el.tagName === \"TEXTAREA\") {\n return false;\n }\n if (key === \"width\" || key === \"height\") {\n const tag = el.tagName;\n if (tag === \"IMG\" || tag === \"VIDEO\" || tag === \"CANVAS\" || tag === \"SOURCE\") {\n return false;\n }\n }\n if (isNativeOn(key) && isString(value)) {\n return false;\n }\n return key in el;\n}\n\nconst REMOVAL = {};\n// @__NO_SIDE_EFFECTS__\nfunction defineCustomElement(options, extraOptions, _createApp) {\n let Comp = defineComponent(options, extraOptions);\n if (isPlainObject(Comp)) Comp = extend({}, Comp, extraOptions);\n class VueCustomElement extends VueElement {\n constructor(initialProps) {\n super(Comp, initialProps, _createApp);\n }\n }\n VueCustomElement.def = Comp;\n return VueCustomElement;\n}\nconst defineSSRCustomElement = (/* @__NO_SIDE_EFFECTS__ */ (options, extraOptions) => {\n return /* @__PURE__ */ defineCustomElement(options, extraOptions, createSSRApp);\n});\nconst BaseClass = typeof HTMLElement !== \"undefined\" ? HTMLElement : class {\n};\nclass VueElement extends BaseClass {\n constructor(_def, _props = {}, _createApp = createApp) {\n super();\n this._def = _def;\n this._props = _props;\n this._createApp = _createApp;\n this._isVueCE = true;\n /**\n * @internal\n */\n this._instance = null;\n /**\n * @internal\n */\n this._app = null;\n /**\n * @internal\n */\n this._nonce = this._def.nonce;\n this._connected = false;\n this._resolved = false;\n this._patching = false;\n this._dirty = false;\n this._numberProps = null;\n this._styleChildren = /* @__PURE__ */ new WeakSet();\n this._ob = null;\n if (this.shadowRoot && _createApp !== createApp) {\n this._root = this.shadowRoot;\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && this.shadowRoot) {\n warn(\n `Custom element has pre-rendered declarative shadow root but is not defined as hydratable. Use \\`defineSSRCustomElement\\`.`\n );\n }\n if (_def.shadowRoot !== false) {\n this.attachShadow(\n extend({}, _def.shadowRootOptions, {\n mode: \"open\"\n })\n );\n this._root = this.shadowRoot;\n } else {\n this._root = this;\n }\n }\n }\n connectedCallback() {\n if (!this.isConnected) return;\n if (!this.shadowRoot && !this._resolved) {\n this._parseSlots();\n }\n this._connected = true;\n let parent = this;\n while (parent = parent && (parent.parentNode || parent.host)) {\n if (parent instanceof VueElement) {\n this._parent = parent;\n break;\n }\n }\n if (!this._instance) {\n if (this._resolved) {\n this._mount(this._def);\n } else {\n if (parent && parent._pendingResolve) {\n this._pendingResolve = parent._pendingResolve.then(() => {\n this._pendingResolve = void 0;\n this._resolveDef();\n });\n } else {\n this._resolveDef();\n }\n }\n }\n }\n _setParent(parent = this._parent) {\n if (parent) {\n this._instance.parent = parent._instance;\n this._inheritParentContext(parent);\n }\n }\n _inheritParentContext(parent = this._parent) {\n if (parent && this._app) {\n Object.setPrototypeOf(\n this._app._context.provides,\n parent._instance.provides\n );\n }\n }\n disconnectedCallback() {\n this._connected = false;\n nextTick(() => {\n if (!this._connected) {\n if (this._ob) {\n this._ob.disconnect();\n this._ob = null;\n }\n this._app && this._app.unmount();\n if (this._instance) this._instance.ce = void 0;\n this._app = this._instance = null;\n if (this._teleportTargets) {\n this._teleportTargets.clear();\n this._teleportTargets = void 0;\n }\n }\n });\n }\n _processMutations(mutations) {\n for (const m of mutations) {\n this._setAttr(m.attributeName);\n }\n }\n /**\n * resolve inner component definition (handle possible async component)\n */\n _resolveDef() {\n if (this._pendingResolve) {\n return;\n }\n for (let i = 0; i < this.attributes.length; i++) {\n this._setAttr(this.attributes[i].name);\n }\n this._ob = new MutationObserver(this._processMutations.bind(this));\n this._ob.observe(this, { attributes: true });\n const resolve = (def, isAsync = false) => {\n this._resolved = true;\n this._pendingResolve = void 0;\n const { props, styles } = def;\n let numberProps;\n if (props && !isArray(props)) {\n for (const key in props) {\n const opt = props[key];\n if (opt === Number || opt && opt.type === Number) {\n if (key in this._props) {\n this._props[key] = toNumber(this._props[key]);\n }\n (numberProps || (numberProps = /* @__PURE__ */ Object.create(null)))[camelize$1(key)] = true;\n }\n }\n }\n this._numberProps = numberProps;\n this._resolveProps(def);\n if (this.shadowRoot) {\n this._applyStyles(styles);\n } else if (!!(process.env.NODE_ENV !== \"production\") && styles) {\n warn(\n \"Custom element style injection is not supported when using shadowRoot: false\"\n );\n }\n this._mount(def);\n };\n const asyncDef = this._def.__asyncLoader;\n if (asyncDef) {\n this._pendingResolve = asyncDef().then((def) => {\n def.configureApp = this._def.configureApp;\n resolve(this._def = def, true);\n });\n } else {\n resolve(this._def);\n }\n }\n _mount(def) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) && !def.name) {\n def.name = \"VueElement\";\n }\n this._app = this._createApp(def);\n this._inheritParentContext();\n if (def.configureApp) {\n def.configureApp(this._app);\n }\n this._app._ceVNode = this._createVNode();\n this._app.mount(this._root);\n const exposed = this._instance && this._instance.exposed;\n if (!exposed) return;\n for (const key in exposed) {\n if (!hasOwn(this, key)) {\n Object.defineProperty(this, key, {\n // unwrap ref to be consistent with public instance behavior\n get: () => unref(exposed[key])\n });\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(`Exposed property \"${key}\" already exists on custom element.`);\n }\n }\n }\n _resolveProps(def) {\n const { props } = def;\n const declaredPropKeys = isArray(props) ? props : Object.keys(props || {});\n for (const key of Object.keys(this)) {\n if (key[0] !== \"_\" && declaredPropKeys.includes(key)) {\n this._setProp(key, this[key]);\n }\n }\n for (const key of declaredPropKeys.map(camelize$1)) {\n Object.defineProperty(this, key, {\n get() {\n return this._getProp(key);\n },\n set(val) {\n this._setProp(key, val, true, !this._patching);\n }\n });\n }\n }\n _setAttr(key) {\n if (key.startsWith(\"data-v-\")) return;\n const has = this.hasAttribute(key);\n let value = has ? this.getAttribute(key) : REMOVAL;\n const camelKey = camelize$1(key);\n if (has && this._numberProps && this._numberProps[camelKey]) {\n value = toNumber(value);\n }\n this._setProp(camelKey, value, false, true);\n }\n /**\n * @internal\n */\n _getProp(key) {\n return this._props[key];\n }\n /**\n * @internal\n */\n _setProp(key, val, shouldReflect = true, shouldUpdate = false) {\n if (val !== this._props[key]) {\n this._dirty = true;\n if (val === REMOVAL) {\n delete this._props[key];\n } else {\n this._props[key] = val;\n if (key === \"key\" && this._app) {\n this._app._ceVNode.key = val;\n }\n }\n if (shouldUpdate && this._instance) {\n this._update();\n }\n if (shouldReflect) {\n const ob = this._ob;\n if (ob) {\n this._processMutations(ob.takeRecords());\n ob.disconnect();\n }\n if (val === true) {\n this.setAttribute(hyphenate(key), \"\");\n } else if (typeof val === \"string\" || typeof val === \"number\") {\n this.setAttribute(hyphenate(key), val + \"\");\n } else if (!val) {\n this.removeAttribute(hyphenate(key));\n }\n ob && ob.observe(this, { attributes: true });\n }\n }\n }\n _update() {\n const vnode = this._createVNode();\n if (this._app) vnode.appContext = this._app._context;\n render(vnode, this._root);\n }\n _createVNode() {\n const baseProps = {};\n if (!this.shadowRoot) {\n baseProps.onVnodeMounted = baseProps.onVnodeUpdated = this._renderSlots.bind(this);\n }\n const vnode = createVNode(this._def, extend(baseProps, this._props));\n if (!this._instance) {\n vnode.ce = (instance) => {\n this._instance = instance;\n instance.ce = this;\n instance.isCE = true;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n instance.ceReload = (newStyles) => {\n if (this._styles) {\n this._styles.forEach((s) => this._root.removeChild(s));\n this._styles.length = 0;\n }\n this._applyStyles(newStyles);\n this._instance = null;\n this._update();\n };\n }\n const dispatch = (event, args) => {\n this.dispatchEvent(\n new CustomEvent(\n event,\n isPlainObject(args[0]) ? extend({ detail: args }, args[0]) : { detail: args }\n )\n );\n };\n instance.emit = (event, ...args) => {\n dispatch(event, args);\n if (hyphenate(event) !== event) {\n dispatch(hyphenate(event), args);\n }\n };\n this._setParent();\n };\n }\n return vnode;\n }\n _applyStyles(styles, owner) {\n if (!styles) return;\n if (owner) {\n if (owner === this._def || this._styleChildren.has(owner)) {\n return;\n }\n this._styleChildren.add(owner);\n }\n const nonce = this._nonce;\n for (let i = styles.length - 1; i >= 0; i--) {\n const s = document.createElement(\"style\");\n if (nonce) s.setAttribute(\"nonce\", nonce);\n s.textContent = styles[i];\n this.shadowRoot.prepend(s);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (owner) {\n if (owner.__hmrId) {\n if (!this._childStyles) this._childStyles = /* @__PURE__ */ new Map();\n let entry = this._childStyles.get(owner.__hmrId);\n if (!entry) {\n this._childStyles.set(owner.__hmrId, entry = []);\n }\n entry.push(s);\n }\n } else {\n (this._styles || (this._styles = [])).push(s);\n }\n }\n }\n }\n /**\n * Only called when shadowRoot is false\n */\n _parseSlots() {\n const slots = this._slots = {};\n let n;\n while (n = this.firstChild) {\n const slotName = n.nodeType === 1 && n.getAttribute(\"slot\") || \"default\";\n (slots[slotName] || (slots[slotName] = [])).push(n);\n this.removeChild(n);\n }\n }\n /**\n * Only called when shadowRoot is false\n */\n _renderSlots() {\n const outlets = this._getSlots();\n const scopeId = this._instance.type.__scopeId;\n for (let i = 0; i < outlets.length; i++) {\n const o = outlets[i];\n const slotName = o.getAttribute(\"name\") || \"default\";\n const content = this._slots[slotName];\n const parent = o.parentNode;\n if (content) {\n for (const n of content) {\n if (scopeId && n.nodeType === 1) {\n const id = scopeId + \"-s\";\n const walker = document.createTreeWalker(n, 1);\n n.setAttribute(id, \"\");\n let child;\n while (child = walker.nextNode()) {\n child.setAttribute(id, \"\");\n }\n }\n parent.insertBefore(n, o);\n }\n } else {\n while (o.firstChild) parent.insertBefore(o.firstChild, o);\n }\n parent.removeChild(o);\n }\n }\n /**\n * @internal\n */\n _getSlots() {\n const roots = [this];\n if (this._teleportTargets) {\n roots.push(...this._teleportTargets);\n }\n const slots = /* @__PURE__ */ new Set();\n for (const root of roots) {\n const found = root.querySelectorAll(\"slot\");\n for (let i = 0; i < found.length; i++) {\n slots.add(found[i]);\n }\n }\n return Array.from(slots);\n }\n /**\n * @internal\n */\n _injectChildStyle(comp) {\n this._applyStyles(comp.styles, comp);\n }\n /**\n * @internal\n */\n _beginPatch() {\n this._patching = true;\n this._dirty = false;\n }\n /**\n * @internal\n */\n _endPatch() {\n this._patching = false;\n if (this._dirty && this._instance) {\n this._update();\n }\n }\n /**\n * @internal\n */\n _removeChildStyle(comp) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this._styleChildren.delete(comp);\n if (this._childStyles && comp.__hmrId) {\n const oldStyles = this._childStyles.get(comp.__hmrId);\n if (oldStyles) {\n oldStyles.forEach((s) => this._root.removeChild(s));\n oldStyles.length = 0;\n }\n }\n }\n }\n}\nfunction useHost(caller) {\n const instance = getCurrentInstance();\n const el = instance && instance.ce;\n if (el) {\n return el;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!instance) {\n warn(\n `${caller || \"useHost\"} called without an active component instance.`\n );\n } else {\n warn(\n `${caller || \"useHost\"} can only be used in components defined via defineCustomElement.`\n );\n }\n }\n return null;\n}\nfunction useShadowRoot() {\n const el = !!(process.env.NODE_ENV !== \"production\") ? useHost(\"useShadowRoot\") : useHost();\n return el && el.shadowRoot;\n}\n\nfunction useCssModule(name = \"$style\") {\n {\n const instance = getCurrentInstance();\n if (!instance) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`useCssModule must be called inside setup()`);\n return EMPTY_OBJ;\n }\n const modules = instance.type.__cssModules;\n if (!modules) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Current instance does not have CSS modules injected.`);\n return EMPTY_OBJ;\n }\n const mod = modules[name];\n if (!mod) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Current instance does not have CSS module named \"${name}\".`);\n return EMPTY_OBJ;\n }\n return mod;\n }\n}\n\nconst positionMap = /* @__PURE__ */ new WeakMap();\nconst newPositionMap = /* @__PURE__ */ new WeakMap();\nconst moveCbKey = /* @__PURE__ */ Symbol(\"_moveCb\");\nconst enterCbKey = /* @__PURE__ */ Symbol(\"_enterCb\");\nconst decorate = (t) => {\n delete t.props.mode;\n return t;\n};\nconst TransitionGroupImpl = /* @__PURE__ */ decorate({\n name: \"TransitionGroup\",\n props: /* @__PURE__ */ extend({}, TransitionPropsValidators, {\n tag: String,\n moveClass: String\n }),\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n let prevChildren;\n let children;\n onUpdated(() => {\n if (!prevChildren.length) {\n return;\n }\n const moveClass = props.moveClass || `${props.name || \"v\"}-move`;\n if (!hasCSSTransform(\n prevChildren[0].el,\n instance.vnode.el,\n moveClass\n )) {\n prevChildren = [];\n return;\n }\n prevChildren.forEach(callPendingCbs);\n prevChildren.forEach(recordPosition);\n const movedChildren = prevChildren.filter(applyTranslation);\n forceReflow(instance.vnode.el);\n movedChildren.forEach((c) => {\n const el = c.el;\n const style = el.style;\n addTransitionClass(el, moveClass);\n style.transform = style.webkitTransform = style.transitionDuration = \"\";\n const cb = el[moveCbKey] = (e) => {\n if (e && e.target !== el) {\n return;\n }\n if (!e || e.propertyName.endsWith(\"transform\")) {\n el.removeEventListener(\"transitionend\", cb);\n el[moveCbKey] = null;\n removeTransitionClass(el, moveClass);\n }\n };\n el.addEventListener(\"transitionend\", cb);\n });\n prevChildren = [];\n });\n return () => {\n const rawProps = toRaw(props);\n const cssTransitionProps = resolveTransitionProps(rawProps);\n let tag = rawProps.tag || Fragment;\n prevChildren = [];\n if (children) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.el && child.el instanceof Element) {\n prevChildren.push(child);\n setTransitionHooks(\n child,\n resolveTransitionHooks(\n child,\n cssTransitionProps,\n state,\n instance\n )\n );\n positionMap.set(child, {\n left: child.el.offsetLeft,\n top: child.el.offsetTop\n });\n }\n }\n }\n children = slots.default ? getTransitionRawChildren(slots.default()) : [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.key != null) {\n setTransitionHooks(\n child,\n resolveTransitionHooks(child, cssTransitionProps, state, instance)\n );\n } else if (!!(process.env.NODE_ENV !== \"production\") && child.type !== Text) {\n warn(`<TransitionGroup> children must be keyed.`);\n }\n }\n return createVNode(tag, null, children);\n };\n }\n});\nconst TransitionGroup = TransitionGroupImpl;\nfunction callPendingCbs(c) {\n const el = c.el;\n if (el[moveCbKey]) {\n el[moveCbKey]();\n }\n if (el[enterCbKey]) {\n el[enterCbKey]();\n }\n}\nfunction recordPosition(c) {\n newPositionMap.set(c, {\n left: c.el.offsetLeft,\n top: c.el.offsetTop\n });\n}\nfunction applyTranslation(c) {\n const oldPos = positionMap.get(c);\n const newPos = newPositionMap.get(c);\n const dx = oldPos.left - newPos.left;\n const dy = oldPos.top - newPos.top;\n if (dx || dy) {\n const s = c.el.style;\n s.transform = s.webkitTransform = `translate(${dx}px,${dy}px)`;\n s.transitionDuration = \"0s\";\n return c;\n }\n}\nfunction hasCSSTransform(el, root, moveClass) {\n const clone = el.cloneNode();\n const _vtc = el[vtcKey];\n if (_vtc) {\n _vtc.forEach((cls) => {\n cls.split(/\\s+/).forEach((c) => c && clone.classList.remove(c));\n });\n }\n moveClass.split(/\\s+/).forEach((c) => c && clone.classList.add(c));\n clone.style.display = \"none\";\n const container = root.nodeType === 1 ? root : root.parentNode;\n container.appendChild(clone);\n const { hasTransform } = getTransitionInfo(clone);\n container.removeChild(clone);\n return hasTransform;\n}\n\nconst getModelAssigner = (vnode) => {\n const fn = vnode.props[\"onUpdate:modelValue\"] || false;\n return isArray(fn) ? (value) => invokeArrayFns(fn, value) : fn;\n};\nfunction onCompositionStart(e) {\n e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n const target = e.target;\n if (target.composing) {\n target.composing = false;\n target.dispatchEvent(new Event(\"input\"));\n }\n}\nconst assignKey = /* @__PURE__ */ Symbol(\"_assign\");\nfunction castValue(value, trim, number) {\n if (trim) value = value.trim();\n if (number) value = looseToNumber(value);\n return value;\n}\nconst vModelText = {\n created(el, { modifiers: { lazy, trim, number } }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n const castToNumber = number || vnode.props && vnode.props.type === \"number\";\n addEventListener(el, lazy ? \"change\" : \"input\", (e) => {\n if (e.target.composing) return;\n el[assignKey](castValue(el.value, trim, castToNumber));\n });\n if (trim || castToNumber) {\n addEventListener(el, \"change\", () => {\n el.value = castValue(el.value, trim, castToNumber);\n });\n }\n if (!lazy) {\n addEventListener(el, \"compositionstart\", onCompositionStart);\n addEventListener(el, \"compositionend\", onCompositionEnd);\n addEventListener(el, \"change\", onCompositionEnd);\n }\n },\n // set value on mounted so it's after min/max for type=\"range\"\n mounted(el, { value }) {\n el.value = value == null ? \"\" : value;\n },\n beforeUpdate(el, { value, oldValue, modifiers: { lazy, trim, number } }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n if (el.composing) return;\n const elValue = (number || el.type === \"number\") && !/^0\\d/.test(el.value) ? looseToNumber(el.value) : el.value;\n const newValue = value == null ? \"\" : value;\n if (elValue === newValue) {\n return;\n }\n if (document.activeElement === el && el.type !== \"range\") {\n if (lazy && value === oldValue) {\n return;\n }\n if (trim && el.value.trim() === newValue) {\n return;\n }\n }\n el.value = newValue;\n }\n};\nconst vModelCheckbox = {\n // #4096 array checkboxes need to be deep traversed\n deep: true,\n created(el, _, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n addEventListener(el, \"change\", () => {\n const modelValue = el._modelValue;\n const elementValue = getValue(el);\n const checked = el.checked;\n const assign = el[assignKey];\n if (isArray(modelValue)) {\n const index = looseIndexOf(modelValue, elementValue);\n const found = index !== -1;\n if (checked && !found) {\n assign(modelValue.concat(elementValue));\n } else if (!checked && found) {\n const filtered = [...modelValue];\n filtered.splice(index, 1);\n assign(filtered);\n }\n } else if (isSet(modelValue)) {\n const cloned = new Set(modelValue);\n if (checked) {\n cloned.add(elementValue);\n } else {\n cloned.delete(elementValue);\n }\n assign(cloned);\n } else {\n assign(getCheckboxValue(el, checked));\n }\n });\n },\n // set initial checked on mount to wait for true-value/false-value\n mounted: setChecked,\n beforeUpdate(el, binding, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n setChecked(el, binding, vnode);\n }\n};\nfunction setChecked(el, { value, oldValue }, vnode) {\n el._modelValue = value;\n let checked;\n if (isArray(value)) {\n checked = looseIndexOf(value, vnode.props.value) > -1;\n } else if (isSet(value)) {\n checked = value.has(vnode.props.value);\n } else {\n if (value === oldValue) return;\n checked = looseEqual(value, getCheckboxValue(el, true));\n }\n if (el.checked !== checked) {\n el.checked = checked;\n }\n}\nconst vModelRadio = {\n created(el, { value }, vnode) {\n el.checked = looseEqual(value, vnode.props.value);\n el[assignKey] = getModelAssigner(vnode);\n addEventListener(el, \"change\", () => {\n el[assignKey](getValue(el));\n });\n },\n beforeUpdate(el, { value, oldValue }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n if (value !== oldValue) {\n el.checked = looseEqual(value, vnode.props.value);\n }\n }\n};\nconst vModelSelect = {\n // <select multiple> value need to be deep traversed\n deep: true,\n created(el, { value, modifiers: { number } }, vnode) {\n const isSetModel = isSet(value);\n addEventListener(el, \"change\", () => {\n const selectedVal = Array.prototype.filter.call(el.options, (o) => o.selected).map(\n (o) => number ? looseToNumber(getValue(o)) : getValue(o)\n );\n el[assignKey](\n el.multiple ? isSetModel ? new Set(selectedVal) : selectedVal : selectedVal[0]\n );\n el._assigning = true;\n nextTick(() => {\n el._assigning = false;\n });\n });\n el[assignKey] = getModelAssigner(vnode);\n },\n // set value in mounted & updated because <select> relies on its children\n // <option>s.\n mounted(el, { value }) {\n setSelected(el, value);\n },\n beforeUpdate(el, _binding, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n },\n updated(el, { value }) {\n if (!el._assigning) {\n setSelected(el, value);\n }\n }\n};\nfunction setSelected(el, value) {\n const isMultiple = el.multiple;\n const isArrayValue = isArray(value);\n if (isMultiple && !isArrayValue && !isSet(value)) {\n !!(process.env.NODE_ENV !== \"production\") && warn(\n `<select multiple v-model> expects an Array or Set value for its binding, but got ${Object.prototype.toString.call(value).slice(8, -1)}.`\n );\n return;\n }\n for (let i = 0, l = el.options.length; i < l; i++) {\n const option = el.options[i];\n const optionValue = getValue(option);\n if (isMultiple) {\n if (isArrayValue) {\n const optionType = typeof optionValue;\n if (optionType === \"string\" || optionType === \"number\") {\n option.selected = value.some((v) => String(v) === String(optionValue));\n } else {\n option.selected = looseIndexOf(value, optionValue) > -1;\n }\n } else {\n option.selected = value.has(optionValue);\n }\n } else if (looseEqual(getValue(option), value)) {\n if (el.selectedIndex !== i) el.selectedIndex = i;\n return;\n }\n }\n if (!isMultiple && el.selectedIndex !== -1) {\n el.selectedIndex = -1;\n }\n}\nfunction getValue(el) {\n return \"_value\" in el ? el._value : el.value;\n}\nfunction getCheckboxValue(el, checked) {\n const key = checked ? \"_trueValue\" : \"_falseValue\";\n return key in el ? el[key] : checked;\n}\nconst vModelDynamic = {\n created(el, binding, vnode) {\n callModelHook(el, binding, vnode, null, \"created\");\n },\n mounted(el, binding, vnode) {\n callModelHook(el, binding, vnode, null, \"mounted\");\n },\n beforeUpdate(el, binding, vnode, prevVNode) {\n callModelHook(el, binding, vnode, prevVNode, \"beforeUpdate\");\n },\n updated(el, binding, vnode, prevVNode) {\n callModelHook(el, binding, vnode, prevVNode, \"updated\");\n }\n};\nfunction resolveDynamicModel(tagName, type) {\n switch (tagName) {\n case \"SELECT\":\n return vModelSelect;\n case \"TEXTAREA\":\n return vModelText;\n default:\n switch (type) {\n case \"checkbox\":\n return vModelCheckbox;\n case \"radio\":\n return vModelRadio;\n default:\n return vModelText;\n }\n }\n}\nfunction callModelHook(el, binding, vnode, prevVNode, hook) {\n const modelToUse = resolveDynamicModel(\n el.tagName,\n vnode.props && vnode.props.type\n );\n const fn = modelToUse[hook];\n fn && fn(el, binding, vnode, prevVNode);\n}\nfunction initVModelForSSR() {\n vModelText.getSSRProps = ({ value }) => ({ value });\n vModelRadio.getSSRProps = ({ value }, vnode) => {\n if (vnode.props && looseEqual(vnode.props.value, value)) {\n return { checked: true };\n }\n };\n vModelCheckbox.getSSRProps = ({ value }, vnode) => {\n if (isArray(value)) {\n if (vnode.props && looseIndexOf(value, vnode.props.value) > -1) {\n return { checked: true };\n }\n } else if (isSet(value)) {\n if (vnode.props && value.has(vnode.props.value)) {\n return { checked: true };\n }\n } else if (value) {\n return { checked: true };\n }\n };\n vModelDynamic.getSSRProps = (binding, vnode) => {\n if (typeof vnode.type !== \"string\") {\n return;\n }\n const modelToUse = resolveDynamicModel(\n // resolveDynamicModel expects an uppercase tag name, but vnode.type is lowercase\n vnode.type.toUpperCase(),\n vnode.props && vnode.props.type\n );\n if (modelToUse.getSSRProps) {\n return modelToUse.getSSRProps(binding, vnode);\n }\n };\n}\n\nconst systemModifiers = [\"ctrl\", \"shift\", \"alt\", \"meta\"];\nconst modifierGuards = {\n stop: (e) => e.stopPropagation(),\n prevent: (e) => e.preventDefault(),\n self: (e) => e.target !== e.currentTarget,\n ctrl: (e) => !e.ctrlKey,\n shift: (e) => !e.shiftKey,\n alt: (e) => !e.altKey,\n meta: (e) => !e.metaKey,\n left: (e) => \"button\" in e && e.button !== 0,\n middle: (e) => \"button\" in e && e.button !== 1,\n right: (e) => \"button\" in e && e.button !== 2,\n exact: (e, modifiers) => systemModifiers.some((m) => e[`${m}Key`] && !modifiers.includes(m))\n};\nconst withModifiers = (fn, modifiers) => {\n const cache = fn._withMods || (fn._withMods = {});\n const cacheKey = modifiers.join(\".\");\n return cache[cacheKey] || (cache[cacheKey] = ((event, ...args) => {\n for (let i = 0; i < modifiers.length; i++) {\n const guard = modifierGuards[modifiers[i]];\n if (guard && guard(event, modifiers)) return;\n }\n return fn(event, ...args);\n }));\n};\nconst keyNames = {\n esc: \"escape\",\n space: \" \",\n up: \"arrow-up\",\n left: \"arrow-left\",\n right: \"arrow-right\",\n down: \"arrow-down\",\n delete: \"backspace\"\n};\nconst withKeys = (fn, modifiers) => {\n const cache = fn._withKeys || (fn._withKeys = {});\n const cacheKey = modifiers.join(\".\");\n return cache[cacheKey] || (cache[cacheKey] = ((event) => {\n if (!(\"key\" in event)) {\n return;\n }\n const eventKey = hyphenate(event.key);\n if (modifiers.some(\n (k) => k === eventKey || keyNames[k] === eventKey\n )) {\n return fn(event);\n }\n }));\n};\n\nconst rendererOptions = /* @__PURE__ */ extend({ patchProp }, nodeOps);\nlet renderer;\nlet enabledHydration = false;\nfunction ensureRenderer() {\n return renderer || (renderer = createRenderer(rendererOptions));\n}\nfunction ensureHydrationRenderer() {\n renderer = enabledHydration ? renderer : createHydrationRenderer(rendererOptions);\n enabledHydration = true;\n return renderer;\n}\nconst render = ((...args) => {\n ensureRenderer().render(...args);\n});\nconst hydrate = ((...args) => {\n ensureHydrationRenderer().hydrate(...args);\n});\nconst createApp = ((...args) => {\n const app = ensureRenderer().createApp(...args);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n injectNativeTagCheck(app);\n injectCompilerOptionsCheck(app);\n }\n const { mount } = app;\n app.mount = (containerOrSelector) => {\n const container = normalizeContainer(containerOrSelector);\n if (!container) return;\n const component = app._component;\n if (!isFunction(component) && !component.render && !component.template) {\n component.template = container.innerHTML;\n }\n if (container.nodeType === 1) {\n container.textContent = \"\";\n }\n const proxy = mount(container, false, resolveRootNamespace(container));\n if (container instanceof Element) {\n container.removeAttribute(\"v-cloak\");\n container.setAttribute(\"data-v-app\", \"\");\n }\n return proxy;\n };\n return app;\n});\nconst createSSRApp = ((...args) => {\n const app = ensureHydrationRenderer().createApp(...args);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n injectNativeTagCheck(app);\n injectCompilerOptionsCheck(app);\n }\n const { mount } = app;\n app.mount = (containerOrSelector) => {\n const container = normalizeContainer(containerOrSelector);\n if (container) {\n return mount(container, true, resolveRootNamespace(container));\n }\n };\n return app;\n});\nfunction resolveRootNamespace(container) {\n if (container instanceof SVGElement) {\n return \"svg\";\n }\n if (typeof MathMLElement === \"function\" && container instanceof MathMLElement) {\n return \"mathml\";\n }\n}\nfunction injectNativeTagCheck(app) {\n Object.defineProperty(app.config, \"isNativeTag\", {\n value: (tag) => isHTMLTag(tag) || isSVGTag(tag) || isMathMLTag(tag),\n writable: false\n });\n}\nfunction injectCompilerOptionsCheck(app) {\n if (isRuntimeOnly()) {\n const isCustomElement = app.config.isCustomElement;\n Object.defineProperty(app.config, \"isCustomElement\", {\n get() {\n return isCustomElement;\n },\n set() {\n warn(\n `The \\`isCustomElement\\` config option is deprecated. Use \\`compilerOptions.isCustomElement\\` instead.`\n );\n }\n });\n const compilerOptions = app.config.compilerOptions;\n const msg = `The \\`compilerOptions\\` config option is only respected when using a build of Vue.js that includes the runtime compiler (aka \"full build\"). Since you are using the runtime-only build, \\`compilerOptions\\` must be passed to \\`@vue/compiler-dom\\` in the build setup instead.\n- For vue-loader: pass it via vue-loader's \\`compilerOptions\\` loader option.\n- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader\n- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-sfc`;\n Object.defineProperty(app.config, \"compilerOptions\", {\n get() {\n warn(msg);\n return compilerOptions;\n },\n set() {\n warn(msg);\n }\n });\n }\n}\nfunction normalizeContainer(container) {\n if (isString(container)) {\n const res = document.querySelector(container);\n if (!!(process.env.NODE_ENV !== \"production\") && !res) {\n warn(\n `Failed to mount app: mount target selector \"${container}\" returned null.`\n );\n }\n return res;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && window.ShadowRoot && container instanceof window.ShadowRoot && container.mode === \"closed\") {\n warn(\n `mounting on a ShadowRoot with \\`{mode: \"closed\"}\\` may lead to unpredictable bugs`\n );\n }\n return container;\n}\nlet ssrDirectiveInitialized = false;\nconst initDirectivesForSSR = () => {\n if (!ssrDirectiveInitialized) {\n ssrDirectiveInitialized = true;\n initVModelForSSR();\n initVShowForSSR();\n }\n} ;\n\nexport { Transition, TransitionGroup, VueElement, createApp, createSSRApp, defineCustomElement, defineSSRCustomElement, hydrate, initDirectivesForSSR, nodeOps, patchProp, render, useCssModule, useCssVars, useHost, useShadowRoot, vModelCheckbox, vModelDynamic, vModelRadio, vModelSelect, vModelText, vShow, withKeys, withModifiers };\n","/**\n* vue v3.5.27\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { initCustomFormatter, warn } from '@vue/runtime-dom';\nexport * from '@vue/runtime-dom';\n\nfunction initDev() {\n {\n initCustomFormatter();\n }\n}\n\nif (!!(process.env.NODE_ENV !== \"production\")) {\n initDev();\n}\nconst compile = () => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Runtime compilation is not supported in this build of Vue.` + (` Configure your bundler to alias \"vue\" to \"vue/dist/vue.esm-bundler.js\".` )\n );\n }\n};\n\nexport { compile };\n","import { Plugin, PluginKey, TextSelection } from \"@milkdown/prose/state\";\nimport { $ctx, $prose } from \"@milkdown/utils\";\nimport { computePosition, flip, offset } from \"@floating-ui/dom\";\nimport { posToDOMRect, findParentNode } from \"@milkdown/prose\";\nimport { debounce } from \"lodash-es\";\nfunction slashFactory(id) {\n const slashSpec = $ctx(\n {},\n `${id}_SLASH_SPEC`\n );\n const slashPlugin = $prose((ctx) => {\n const spec = ctx.get(slashSpec.key);\n return new Plugin({\n key: new PluginKey(`${id}_SLASH`),\n ...spec\n });\n });\n const result = [slashSpec, slashPlugin];\n result.key = slashSpec.key;\n result.pluginKey = slashPlugin.key;\n slashSpec.meta = {\n package: \"@milkdown/plugin-slash\",\n displayName: `Ctx<slashSpec>|${id}`\n };\n slashPlugin.meta = {\n package: \"@milkdown/plugin-slash\",\n displayName: `Prose<slash>|${id}`\n };\n return result;\n}\nclass SlashProvider {\n constructor(options) {\n this.#initialized = false;\n this.onShow = () => {\n };\n this.onHide = () => {\n };\n this.#onUpdate = (view, prevState) => {\n const { state, composing } = view;\n const { selection, doc } = state;\n const { ranges } = selection;\n const from = Math.min(...ranges.map((range) => range.$from.pos));\n const to = Math.max(...ranges.map((range) => range.$to.pos));\n const isSame = prevState && prevState.doc.eq(doc) && prevState.selection.eq(selection);\n if (!this.#initialized) {\n const root = this.#root ?? view.dom.parentElement ?? document.body;\n root.appendChild(this.element);\n this.#initialized = true;\n }\n if (composing || isSame) return;\n if (!this.#shouldShow(view, prevState)) {\n this.hide();\n return;\n }\n const virtualEl = {\n getBoundingClientRect: () => posToDOMRect(view, from, to)\n };\n computePosition(virtualEl, this.element, {\n placement: \"bottom-start\",\n middleware: [flip(), offset(this.#offset), ...this.#middleware],\n ...this.#floatingUIOptions\n }).then(({ x, y }) => {\n Object.assign(this.element.style, {\n left: `${x}px`,\n top: `${y}px`\n });\n }).catch(console.error);\n this.show();\n };\n this.update = (view, prevState) => {\n this.#updater(view, prevState);\n };\n this.getContent = (view, matchNode = (node) => node.type.name === \"paragraph\") => {\n const { selection } = view.state;\n const { empty, $from } = selection;\n const isTextBlock = view.state.selection instanceof TextSelection;\n if (typeof document === \"undefined\") return;\n const isSlashChildren = this.element.contains(document.activeElement);\n const notHasFocus = !view.hasFocus() && !isSlashChildren;\n const isReadonly = !view.editable;\n const paragraph = findParentNode(matchNode)(view.state.selection);\n const isNotInParagraph = !paragraph;\n if (notHasFocus || isReadonly || !empty || !isTextBlock || isNotInParagraph)\n return;\n return $from.parent.textBetween(\n Math.max(0, $from.parentOffset - 500),\n $from.parentOffset,\n void 0,\n \"\"\n );\n };\n this.destroy = () => {\n this.#updater.cancel();\n };\n this.show = () => {\n this.element.dataset.show = \"true\";\n this.onShow();\n };\n this.hide = () => {\n this.element.dataset.show = \"false\";\n this.onHide();\n };\n this.element = options.content;\n this.#debounce = options.debounce ?? 200;\n this.#shouldShow = options.shouldShow ?? this.#_shouldShow;\n this.#trigger = options.trigger ?? \"/\";\n this.#offset = options.offset;\n this.#middleware = options.middleware ?? [];\n this.#floatingUIOptions = options.floatingUIOptions ?? {};\n this.#root = options.root;\n this.#updater = debounce(this.#onUpdate, this.#debounce);\n }\n #initialized;\n /// @internal\n #middleware;\n /// @internal\n #floatingUIOptions;\n /// @internal\n #root;\n /// @internal\n #debounce;\n /// @internal\n #trigger;\n /// @internal\n #shouldShow;\n /// @internal\n #updater;\n /// The offset to get the block. Default is 0.\n #offset;\n #onUpdate;\n /// @internal\n #_shouldShow(view) {\n const currentTextBlockContent = this.getContent(view);\n if (!currentTextBlockContent) return false;\n const target = currentTextBlockContent.at(-1);\n if (!target) return false;\n return Array.isArray(this.#trigger) ? this.#trigger.includes(target) : this.#trigger === target;\n }\n}\nexport {\n SlashProvider,\n slashFactory\n};\n//# sourceMappingURL=index.js.map\n","import clsx from 'clsx';\nimport DOMPurify from 'dompurify';\nimport { h } from 'vue';\n\nfunction Icon({ icon, class: className, onClick }) {\n return /* @__PURE__ */ h(\n \"span\",\n {\n class: clsx(\"milkdown-icon\", className),\n onPointerdown: onClick,\n innerHTML: icon ? DOMPurify.sanitize(icon.trim()) : void 0\n }\n );\n}\nIcon.props = {\n icon: {\n type: String,\n required: false\n },\n class: {\n type: String,\n required: false\n },\n onClick: {\n type: Function,\n required: false\n }\n};\n\nexport { Icon };\n//# sourceMappingURL=index.js.map\n","import { $ctx, $remark, $nodeSchema, $view } from '@milkdown/utils';\nimport { visit } from 'unist-util-visit';\nimport { expectDomTypeError } from '@milkdown/exception';\nimport DOMPurify from 'dompurify';\nimport { h, defineComponent, ref, Fragment, createApp, watchEffect } from 'vue';\nimport clsx from 'clsx';\nimport { customAlphabet } from 'nanoid';\n\nvar __defProp$2 = Object.defineProperty;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n if (__getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(b)) {\n if (__propIsEnum$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n }\n return a;\n};\nfunction withMeta(plugin, meta) {\n Object.assign(plugin, {\n meta: __spreadValues$2({\n package: \"@milkdown/components\"\n }, meta)\n });\n return plugin;\n}\n\nconst defaultImageBlockConfig = {\n imageIcon: \"\\u{1F30C}\",\n captionIcon: \"\\u{1F4AC}\",\n uploadButton: \"Upload file\",\n confirmButton: \"Confirm \\u23CE\",\n uploadPlaceholderText: \"or paste the image link ...\",\n captionPlaceholderText: \"Image caption\",\n onUpload: (file) => Promise.resolve(URL.createObjectURL(file))\n};\nconst imageBlockConfig = $ctx(\n defaultImageBlockConfig,\n \"imageBlockConfigCtx\"\n);\nwithMeta(imageBlockConfig, {\n displayName: \"Config<image-block>\",\n group: \"ImageBlock\"\n});\n\nfunction visitImage(ast) {\n return visit(\n ast,\n \"paragraph\",\n (node, index, parent) => {\n var _a, _b;\n if (((_a = node.children) == null ? void 0 : _a.length) !== 1) return;\n const firstChild = (_b = node.children) == null ? void 0 : _b[0];\n if (!firstChild || firstChild.type !== \"image\") return;\n const { url, alt, title } = firstChild;\n const newNode = {\n type: \"image-block\",\n url,\n alt,\n title\n };\n parent.children.splice(index, 1, newNode);\n }\n );\n}\nconst remarkImageBlockPlugin = $remark(\n \"remark-image-block\",\n () => () => visitImage\n);\nwithMeta(remarkImageBlockPlugin.plugin, {\n displayName: \"Remark<remarkImageBlock>\",\n group: \"ImageBlock\"\n});\nwithMeta(remarkImageBlockPlugin.options, {\n displayName: \"RemarkConfig<remarkImageBlock>\",\n group: \"ImageBlock\"\n});\n\nvar __defProp$1 = Object.defineProperty;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n if (__getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(b)) {\n if (__propIsEnum$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n }\n return a;\n};\nconst IMAGE_DATA_TYPE = \"image-block\";\nconst imageBlockSchema = $nodeSchema(\"image-block\", () => {\n return {\n inline: false,\n group: \"block\",\n selectable: true,\n draggable: true,\n isolating: true,\n marks: \"\",\n atom: true,\n priority: 100,\n attrs: {\n src: { default: \"\", validate: \"string\" },\n caption: { default: \"\", validate: \"string\" },\n ratio: { default: 1, validate: \"number\" }\n },\n parseDOM: [\n {\n tag: `img[data-type=\"${IMAGE_DATA_TYPE}\"]`,\n getAttrs: (dom) => {\n var _a;\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n src: dom.getAttribute(\"src\") || \"\",\n caption: dom.getAttribute(\"caption\") || \"\",\n ratio: Number((_a = dom.getAttribute(\"ratio\")) != null ? _a : 1)\n };\n }\n }\n ],\n toDOM: (node) => [\"img\", __spreadValues$1({ \"data-type\": IMAGE_DATA_TYPE }, node.attrs)],\n parseMarkdown: {\n match: ({ type }) => type === \"image-block\",\n runner: (state, node, type) => {\n const src = node.url;\n const caption = node.title;\n let ratio = Number(node.alt || 1);\n if (Number.isNaN(ratio) || ratio === 0) ratio = 1;\n state.addNode(type, {\n src,\n caption,\n ratio\n });\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"image-block\",\n runner: (state, node) => {\n state.openNode(\"paragraph\");\n state.addNode(\"image\", void 0, void 0, {\n title: node.attrs.caption,\n url: node.attrs.src,\n alt: `${Number.parseFloat(node.attrs.ratio).toFixed(2)}`\n });\n state.closeNode();\n }\n }\n };\n});\nwithMeta(imageBlockSchema.node, {\n displayName: \"NodeSchema<image-block>\",\n group: \"ImageBlock\"\n});\n\nfunction Icon({ icon, class: className, onClick }) {\n return /* @__PURE__ */ h(\n \"span\",\n {\n class: clsx(\"milkdown-icon\", className),\n onPointerdown: onClick,\n innerHTML: icon ? DOMPurify.sanitize(icon.trim()) : void 0\n }\n );\n}\nIcon.props = {\n icon: {\n type: String,\n required: false\n },\n class: {\n type: String,\n required: false\n },\n onClick: {\n type: Function,\n required: false\n }\n};\n\nconst nanoid = customAlphabet(\"abcdefg\", 8);\nconst ImageInput = defineComponent({\n props: {\n src: {\n type: Object,\n required: true\n },\n selected: {\n type: Object,\n required: true\n },\n readonly: {\n type: Object,\n required: true\n },\n setLink: {\n type: Function,\n required: true\n },\n imageIcon: {\n type: String,\n required: false\n },\n uploadButton: {\n type: String,\n required: false\n },\n confirmButton: {\n type: String,\n required: false\n },\n uploadPlaceholderText: {\n type: String,\n required: false\n },\n onUpload: {\n type: Function,\n required: true\n }\n },\n setup({\n readonly,\n src,\n setLink,\n onUpload,\n imageIcon,\n uploadButton,\n confirmButton,\n uploadPlaceholderText,\n className\n }) {\n var _a, _b;\n const focusLinkInput = ref(false);\n const linkInputRef = ref();\n const currentLink = ref((_a = src.value) != null ? _a : \"\");\n const uuid = ref(nanoid());\n const hidePlaceholder = ref(((_b = src.value) == null ? void 0 : _b.length) !== 0);\n const onEditLink = (e) => {\n const target = e.target;\n const value = target.value;\n hidePlaceholder.value = value.length !== 0;\n currentLink.value = value;\n };\n const onKeydown = (e) => {\n var _a2, _b2;\n if (e.key === \"Enter\") {\n setLink((_b2 = (_a2 = linkInputRef.value) == null ? void 0 : _a2.value) != null ? _b2 : \"\");\n }\n };\n const onConfirmLinkInput = () => {\n var _a2, _b2;\n setLink((_b2 = (_a2 = linkInputRef.value) == null ? void 0 : _a2.value) != null ? _b2 : \"\");\n };\n const onUploadFile = (e) => {\n var _a2;\n const file = (_a2 = e.target.files) == null ? void 0 : _a2[0];\n if (!file) return;\n onUpload(file).then((url) => {\n if (!url) return;\n setLink(url);\n hidePlaceholder.value = true;\n }).catch((err) => {\n console.error(\"An error occurred while uploading image\");\n console.error(err);\n });\n };\n return () => {\n return /* @__PURE__ */ h(\"div\", { class: clsx(\"image-edit\", className) }, /* @__PURE__ */ h(Icon, { icon: imageIcon, class: \"image-icon\" }), /* @__PURE__ */ h(\"div\", { class: clsx(\"link-importer\", focusLinkInput.value && \"focus\") }, /* @__PURE__ */ h(\n \"input\",\n {\n ref: linkInputRef,\n draggable: \"true\",\n onDragstart: (e) => {\n e.preventDefault();\n e.stopPropagation();\n },\n disabled: readonly.value,\n class: \"link-input-area\",\n value: currentLink.value,\n onInput: onEditLink,\n onKeydown,\n onFocus: () => focusLinkInput.value = true,\n onBlur: () => focusLinkInput.value = false\n }\n ), !hidePlaceholder.value && /* @__PURE__ */ h(\"div\", { class: \"placeholder\" }, /* @__PURE__ */ h(\n \"input\",\n {\n disabled: readonly.value,\n class: \"hidden\",\n id: uuid.value,\n type: \"file\",\n accept: \"image/*\",\n onChange: onUploadFile\n }\n ), /* @__PURE__ */ h(\"label\", { class: \"uploader\", for: uuid.value }, /* @__PURE__ */ h(Icon, { icon: uploadButton })), /* @__PURE__ */ h(\"span\", { class: \"text\", onClick: () => {\n var _a2;\n return (_a2 = linkInputRef.value) == null ? void 0 : _a2.focus();\n } }, uploadPlaceholderText))), currentLink.value && /* @__PURE__ */ h(\"div\", { class: \"confirm\", onClick: () => onConfirmLinkInput() }, /* @__PURE__ */ h(Icon, { icon: confirmButton })));\n };\n }\n});\n\nconst ImageViewer = defineComponent({\n props: {\n src: {\n type: Object,\n required: true\n },\n caption: {\n type: Object,\n required: true\n },\n ratio: {\n type: Object,\n required: true\n },\n selected: {\n type: Object,\n required: true\n },\n readonly: {\n type: Object,\n required: true\n },\n setAttr: {\n type: Function,\n required: true\n },\n config: {\n type: Object,\n required: true\n }\n },\n setup({ src, caption, ratio, readonly, setAttr, config }) {\n var _a;\n const imageRef = ref();\n const resizeHandle = ref();\n const showCaption = ref(Boolean((_a = caption.value) == null ? void 0 : _a.length));\n const timer = ref(0);\n const onImageLoad = () => {\n var _a2;\n const image = imageRef.value;\n if (!image) return;\n const host = image.closest(\".milkdown-image-block\");\n if (!host) return;\n const maxWidth = host.getBoundingClientRect().width;\n if (!maxWidth) return;\n const height = image.height;\n const width = image.width;\n const transformedHeight = width < maxWidth ? height : maxWidth * (height / width);\n const h2 = (transformedHeight * ((_a2 = ratio.value) != null ? _a2 : 1)).toFixed(2);\n image.dataset.origin = transformedHeight.toFixed(2);\n image.dataset.height = h2;\n image.style.height = `${h2}px`;\n };\n const onToggleCaption = (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (readonly.value) return;\n showCaption.value = !showCaption.value;\n };\n const onInputCaption = (e) => {\n const target = e.target;\n const value = target.value;\n if (timer.value) window.clearTimeout(timer.value);\n timer.value = window.setTimeout(() => {\n setAttr(\"caption\", value);\n }, 1e3);\n };\n const onBlurCaption = (e) => {\n const target = e.target;\n const value = target.value;\n if (timer.value) {\n window.clearTimeout(timer.value);\n timer.value = 0;\n }\n setAttr(\"caption\", value);\n };\n const onResizeHandlePointerMove = (e) => {\n e.preventDefault();\n const image = imageRef.value;\n if (!image) return;\n const top = image.getBoundingClientRect().top;\n const height = e.clientY - top;\n const h2 = Number(height < 100 ? 100 : height).toFixed(2);\n image.dataset.height = h2;\n image.style.height = `${h2}px`;\n };\n const onResizeHandlePointerUp = () => {\n window.removeEventListener(\"pointermove\", onResizeHandlePointerMove);\n window.removeEventListener(\"pointerup\", onResizeHandlePointerUp);\n const image = imageRef.value;\n if (!image) return;\n const originHeight = Number(image.dataset.origin);\n const currentHeight = Number(image.dataset.height);\n const ratio2 = Number.parseFloat(\n Number(currentHeight / originHeight).toFixed(2)\n );\n if (Number.isNaN(ratio2)) return;\n setAttr(\"ratio\", ratio2);\n };\n const onResizeHandlePointerDown = (e) => {\n if (readonly.value) return;\n e.preventDefault();\n e.stopPropagation();\n window.addEventListener(\"pointermove\", onResizeHandlePointerMove);\n window.addEventListener(\"pointerup\", onResizeHandlePointerUp);\n };\n return () => {\n return /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h(\"div\", { class: \"image-wrapper\" }, /* @__PURE__ */ h(\"div\", { class: \"operation\" }, /* @__PURE__ */ h(\"div\", { class: \"operation-item\", onPointerdown: onToggleCaption }, /* @__PURE__ */ h(Icon, { icon: config.captionIcon }))), /* @__PURE__ */ h(\n \"img\",\n {\n ref: imageRef,\n \"data-type\": IMAGE_DATA_TYPE,\n onLoad: onImageLoad,\n src: src.value,\n alt: caption.value\n }\n ), /* @__PURE__ */ h(\n \"div\",\n {\n ref: resizeHandle,\n class: \"image-resize-handle\",\n onPointerdown: onResizeHandlePointerDown\n }\n )), showCaption.value && /* @__PURE__ */ h(\n \"input\",\n {\n draggable: \"true\",\n onDragstart: (e) => {\n e.preventDefault();\n e.stopPropagation();\n },\n class: \"caption-input\",\n placeholder: config == null ? void 0 : config.captionPlaceholderText,\n onInput: onInputCaption,\n onBlur: onBlurCaption,\n value: caption.value\n }\n ));\n };\n }\n});\n\nvar __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nconst MilkdownImageBlock = defineComponent({\n props: {\n src: {\n type: Object,\n required: true\n },\n caption: {\n type: Object,\n required: true\n },\n ratio: {\n type: Object,\n required: true\n },\n selected: {\n type: Object,\n required: true\n },\n readonly: {\n type: Object,\n required: true\n },\n setAttr: {\n type: Function,\n required: true\n },\n config: {\n type: Object,\n required: true\n }\n },\n setup(props) {\n const { src } = props;\n return () => {\n var _a;\n if (!((_a = src.value) == null ? void 0 : _a.length)) {\n return /* @__PURE__ */ h(\n ImageInput,\n {\n src: props.src,\n selected: props.selected,\n readonly: props.readonly,\n setLink: (link) => props.setAttr(\"src\", link),\n imageIcon: props.config.imageIcon,\n uploadButton: props.config.uploadButton,\n confirmButton: props.config.confirmButton,\n uploadPlaceholderText: props.config.uploadPlaceholderText,\n onUpload: props.config.onUpload\n }\n );\n }\n return /* @__PURE__ */ h(ImageViewer, __spreadValues({}, props));\n };\n }\n});\n\nconst imageBlockView = $view(\n imageBlockSchema.node,\n (ctx) => {\n return (initialNode, view, getPos) => {\n const src = ref(initialNode.attrs.src);\n const caption = ref(initialNode.attrs.caption);\n const ratio = ref(initialNode.attrs.ratio);\n const selected = ref(false);\n const readonly = ref(!view.editable);\n const setAttr = (attr, value) => {\n if (!view.editable) return;\n const pos = getPos();\n if (pos == null) return;\n view.dispatch(\n view.state.tr.setNodeAttribute(\n pos,\n attr,\n attr === \"src\" ? DOMPurify.sanitize(value) : value\n )\n );\n };\n const config = ctx.get(imageBlockConfig.key);\n const app = createApp(MilkdownImageBlock, {\n src,\n caption,\n ratio,\n selected,\n readonly,\n setAttr,\n config\n });\n const dom = document.createElement(\"div\");\n dom.className = \"milkdown-image-block\";\n const disposeSelectedWatcher = watchEffect(() => {\n const isSelected = selected.value;\n if (isSelected) {\n dom.classList.add(\"selected\");\n } else {\n dom.classList.remove(\"selected\");\n }\n });\n const proxyDomURL = config.proxyDomURL;\n const bindAttrs = (node) => {\n if (!proxyDomURL) {\n src.value = node.attrs.src;\n } else {\n const proxiedURL = proxyDomURL(node.attrs.src);\n if (typeof proxiedURL === \"string\") {\n src.value = proxiedURL;\n } else {\n proxiedURL.then((url) => {\n src.value = url;\n }).catch(console.error);\n }\n }\n ratio.value = node.attrs.ratio;\n caption.value = node.attrs.caption;\n readonly.value = !view.editable;\n };\n bindAttrs(initialNode);\n app.mount(dom);\n return {\n dom,\n update: (updatedNode) => {\n if (updatedNode.type !== initialNode.type) return false;\n bindAttrs(updatedNode);\n return true;\n },\n stopEvent: (e) => {\n if (e.target instanceof HTMLInputElement) return true;\n return false;\n },\n selectNode: () => {\n selected.value = true;\n },\n deselectNode: () => {\n selected.value = false;\n },\n destroy: () => {\n disposeSelectedWatcher();\n app.unmount();\n dom.remove();\n }\n };\n };\n }\n);\nwithMeta(imageBlockView, {\n displayName: \"NodeView<image-block>\",\n group: \"ImageBlock\"\n});\n\nconst imageBlockComponent = [\n remarkImageBlockPlugin,\n imageBlockSchema,\n imageBlockView,\n imageBlockConfig\n].flat();\n\nexport { IMAGE_DATA_TYPE, defaultImageBlockConfig, imageBlockComponent, imageBlockConfig, imageBlockSchema, imageBlockView, remarkImageBlockPlugin };\n//# sourceMappingURL=index.js.map\n","import { blockConfig, block, BlockProvider } from '@milkdown/kit/plugin/block';\nimport { createSlice } from '@milkdown/kit/ctx';\nimport { commandsCtx, editorViewCtx } from '@milkdown/kit/core';\nimport { paragraphSchema, clearTextInCurrentBlockCommand, setBlockTypeCommand, headingSchema, blockquoteSchema, wrapInBlockTypeCommand, hrSchema, addBlockTypeCommand, bulletListSchema, orderedListSchema, listItemSchema, codeBlockSchema, selectTextNearPosCommand } from '@milkdown/kit/preset/commonmark';\nimport { findParent } from '@milkdown/kit/prose';\nimport { TextSelection } from '@milkdown/kit/prose/state';\nimport { defineComponent, ref, computed, watch, watchEffect, onUnmounted, h, createApp, Fragment } from 'vue';\nimport { slashFactory, SlashProvider } from '@milkdown/kit/plugin/slash';\nimport { $ctx } from '@milkdown/kit/utils';\nimport { Icon } from '@milkdown/kit/component';\nimport { imageBlockSchema } from '@milkdown/kit/component/image-block';\nimport { createTable } from '@milkdown/kit/preset/gfm';\n\ncreateSlice([], \"FeaturesCtx\");\ncreateSlice({}, \"CrepeCtx\");\nfunction useCrepeFeatures(ctx) {\n return ctx.use(\"FeaturesCtx\");\n}\nfunction crepeFeatureConfig(feature) {\n return (ctx) => {\n useCrepeFeatures(ctx).update((features) => {\n if (features.includes(feature)) {\n return features;\n }\n return [...features, feature];\n });\n };\n}\n\nvar CrepeFeature = /* @__PURE__ */ ((CrepeFeature2) => {\n CrepeFeature2[\"CodeMirror\"] = \"code-mirror\";\n CrepeFeature2[\"ListItem\"] = \"list-item\";\n CrepeFeature2[\"LinkTooltip\"] = \"link-tooltip\";\n CrepeFeature2[\"Cursor\"] = \"cursor\";\n CrepeFeature2[\"ImageBlock\"] = \"image-block\";\n CrepeFeature2[\"BlockEdit\"] = \"block-edit\";\n CrepeFeature2[\"Toolbar\"] = \"toolbar\";\n CrepeFeature2[\"Placeholder\"] = \"placeholder\";\n CrepeFeature2[\"Table\"] = \"table\";\n CrepeFeature2[\"Latex\"] = \"latex\";\n return CrepeFeature2;\n})(CrepeFeature || {});\n\nconst bulletListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8070)\">\n <path\n d=\"M4 10.5C3.17 10.5 2.5 11.17 2.5 12C2.5 12.83 3.17 13.5 4 13.5C4.83 13.5 5.5 12.83 5.5 12C5.5 11.17 4.83 10.5 4 10.5ZM4 4.5C3.17 4.5 2.5 5.17 2.5 6C2.5 6.83 3.17 7.5 4 7.5C4.83 7.5 5.5 6.83 5.5 6C5.5 5.17 4.83 4.5 4 4.5ZM4 16.5C3.17 16.5 2.5 17.18 2.5 18C2.5 18.82 3.18 19.5 4 19.5C4.82 19.5 5.5 18.82 5.5 18C5.5 17.18 4.83 16.5 4 16.5ZM8 19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17H8C7.45 17 7 17.45 7 18C7 18.55 7.45 19 8 19ZM8 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11H8C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13ZM7 6C7 6.55 7.45 7 8 7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H8C7.45 5 7 5.45 7 6Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8070\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst codeIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8081)\">\n <path\n d=\"M9.4 16.6L4.8 12L9.4 7.4L8 6L2 12L8 18L9.4 16.6ZM14.6 16.6L19.2 12L14.6 7.4L16 6L22 12L16 18L14.6 16.6Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8081\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst dividerIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7900)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M19 13H5C4.45 13 4 12.55 4 12C4 11.45 4.45 11 5 11H19C19.55 11 20 11.45 20 12C20 12.55 19.55 13 19 13Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7900\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst h1Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5553)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM12 17H14V7H10V9H12V17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5553\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst h2Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5559)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15H11V13H13C14.1 13 15 12.11 15 11V9C15 7.89 14.1 7 13 7H9V9H13V11H11C9.9 11 9 11.89 9 13V17H15V15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5559\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst h3Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5565)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15V13.5C15 12.67 14.33 12 13.5 12C14.33 12 15 11.33 15 10.5V9C15 7.89 14.1 7 13 7H9V9H13V11H11V13H13V15H9V17H13C14.1 17 15 16.11 15 15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5565\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst h4Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7757)\">\n <path\n d=\"M19.04 3H5.04004C3.94004 3 3.04004 3.9 3.04004 5V19C3.04004 20.1 3.94004 21 5.04004 21H19.04C20.14 21 21.04 20.1 21.04 19V5C21.04 3.9 20.14 3 19.04 3ZM19.04 19H5.04004V5H19.04V19ZM13.04 17H15.04V7H13.04V11H11.04V7H9.04004V13H13.04V17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7757\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst h5Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7760)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15V13C15 11.89 14.1 11 13 11H11V9H15V7H9V13H13V15H9V17H13C14.1 17 15 16.11 15 15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7760\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst h6Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7763)\">\n <path\n d=\"M11 17H13C14.1 17 15 16.11 15 15V13C15 11.89 14.1 11 13 11H11V9H15V7H11C9.9 7 9 7.89 9 9V15C9 16.11 9.9 17 11 17ZM11 13H13V15H11V13ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7763\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst imageIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8075)\">\n <path\n d=\"M19 5V19H5V5H19ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM14.14 11.86L11.14 15.73L9 13.14L6 17H18L14.14 11.86Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8075\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst menuIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_971_7680)\">\n <path\n d=\"M11 18C11 19.1 10.1 20 9 20C7.9 20 7 19.1 7 18C7 16.9 7.9 16 9 16C10.1 16 11 16.9 11 18ZM9 10C7.9 10 7 10.9 7 12C7 13.1 7.9 14 9 14C10.1 14 11 13.1 11 12C11 10.9 10.1 10 9 10ZM9 4C7.9 4 7 4.9 7 6C7 7.1 7.9 8 9 8C10.1 8 11 7.1 11 6C11 4.9 10.1 4 9 4ZM15 8C16.1 8 17 7.1 17 6C17 4.9 16.1 4 15 4C13.9 4 13 4.9 13 6C13 7.1 13.9 8 15 8ZM15 10C13.9 10 13 10.9 13 12C13 13.1 13.9 14 15 14C16.1 14 17 13.1 17 12C17 10.9 16.1 10 15 10ZM15 16C13.9 16 13 16.9 13 18C13 19.1 13.9 20 15 20C16.1 20 17 19.1 17 18C17 16.9 16.1 16 15 16Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_971_7680\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst orderedListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8067)\">\n <path\n d=\"M8 7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H8C7.45 5 7 5.45 7 6C7 6.55 7.45 7 8 7ZM20 17H8C7.45 17 7 17.45 7 18C7 18.55 7.45 19 8 19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17ZM20 11H8C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11ZM4.5 16H2.5C2.22 16 2 16.22 2 16.5C2 16.78 2.22 17 2.5 17H4V17.5H3.5C3.22 17.5 3 17.72 3 18C3 18.28 3.22 18.5 3.5 18.5H4V19H2.5C2.22 19 2 19.22 2 19.5C2 19.78 2.22 20 2.5 20H4.5C4.78 20 5 19.78 5 19.5V16.5C5 16.22 4.78 16 4.5 16ZM2.5 5H3V7.5C3 7.78 3.22 8 3.5 8C3.78 8 4 7.78 4 7.5V4.5C4 4.22 3.78 4 3.5 4H2.5C2.22 4 2 4.22 2 4.5C2 4.78 2.22 5 2.5 5ZM4.5 10H2.5C2.22 10 2 10.22 2 10.5C2 10.78 2.22 11 2.5 11H3.8L2.12 12.96C2.04 13.05 2 13.17 2 13.28V13.5C2 13.78 2.22 14 2.5 14H4.5C4.78 14 5 13.78 5 13.5C5 13.22 4.78 13 4.5 13H3.2L4.88 11.04C4.96 10.95 5 10.83 5 10.72V10.5C5 10.22 4.78 10 4.5 10Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8067\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst plusIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_971_7676)\">\n <path\n d=\"M18 13H13V18C13 18.55 12.55 19 12 19C11.45 19 11 18.55 11 18V13H6C5.45 13 5 12.55 5 12C5 11.45 5.45 11 6 11H11V6C11 5.45 11.45 5 12 5C12.55 5 13 5.45 13 6V11H18C18.55 11 19 11.45 19 12C19 12.55 18.55 13 18 13Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_971_7676\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst quoteIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7897)\">\n <path\n d=\"M7.17 17C7.68 17 8.15 16.71 8.37 16.26L9.79 13.42C9.93 13.14 10 12.84 10 12.53V8C10 7.45 9.55 7 9 7H5C4.45 7 4 7.45 4 8V12C4 12.55 4.45 13 5 13H7L5.97 15.06C5.52 15.95 6.17 17 7.17 17ZM17.17 17C17.68 17 18.15 16.71 18.37 16.26L19.79 13.42C19.93 13.14 20 12.84 20 12.53V8C20 7.45 19.55 7 19 7H15C14.45 7 14 7.45 14 8V12C14 12.55 14.45 13 15 13H17L15.97 15.06C15.52 15.95 16.17 17 17.17 17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7897\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst tableIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8078)\">\n <path\n d=\"M20 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H20C21.1 21 22 20.1 22 19V5C22 3.9 21.1 3 20 3ZM20 5V8H5V5H20ZM15 19H10V10H15V19ZM5 10H8V19H5V10ZM17 19V10H20V19H17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8078\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst textIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5547)\">\n <path\n d=\"M5 5.5C5 6.33 5.67 7 6.5 7H10.5V17.5C10.5 18.33 11.17 19 12 19C12.83 19 13.5 18.33 13.5 17.5V7H17.5C18.33 7 19 6.33 19 5.5C19 4.67 18.33 4 17.5 4H6.5C5.67 4 5 4.67 5 5.5Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5547\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst todoListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M5.66936 16.3389L9.39244 12.6158C9.54115 12.4671 9.71679 12.3937 9.91936 12.3957C10.1219 12.3976 10.2975 12.4761 10.4463 12.6312C10.5847 12.7823 10.654 12.9585 10.654 13.1599C10.654 13.3613 10.5847 13.5363 10.4463 13.6851L6.32704 17.8197C6.14627 18.0004 5.93538 18.0908 5.69436 18.0908C5.45333 18.0908 5.24243 18.0004 5.06166 17.8197L3.01744 15.7754C2.87899 15.637 2.81136 15.4629 2.81456 15.2533C2.81776 15.0437 2.88859 14.8697 3.02706 14.7312C3.16551 14.5928 3.34008 14.5235 3.55076 14.5235C3.76144 14.5235 3.93494 14.5928 4.07126 14.7312L5.66936 16.3389ZM5.66936 8.72359L9.39244 5.00049C9.54115 4.85177 9.71679 4.77838 9.91936 4.78031C10.1219 4.78223 10.2975 4.86075 10.4463 5.01586C10.5847 5.16691 10.654 5.34314 10.654 5.54454C10.654 5.74592 10.5847 5.92097 10.4463 6.06969L6.32704 10.2043C6.14627 10.3851 5.93538 10.4755 5.69436 10.4755C5.45333 10.4755 5.24243 10.3851 5.06166 10.2043L3.01744 8.16009C2.87899 8.02162 2.81136 7.84759 2.81456 7.63799C2.81776 7.42837 2.88859 7.25433 3.02706 7.11586C3.16551 6.97741 3.34008 6.90819 3.55076 6.90819C3.76144 6.90819 3.93494 6.97741 4.07126 7.11586L5.66936 8.72359ZM13.7597 16.5581C13.5472 16.5581 13.3691 16.4862 13.2253 16.3424C13.0816 16.1986 13.0097 16.0204 13.0097 15.8078C13.0097 15.5952 13.0816 15.4171 13.2253 15.2735C13.3691 15.13 13.5472 15.0582 13.7597 15.0582H20.7597C20.9722 15.0582 21.1503 15.1301 21.2941 15.2739C21.4378 15.4177 21.5097 15.5959 21.5097 15.8085C21.5097 16.0211 21.4378 16.1992 21.2941 16.3427C21.1503 16.4863 20.9722 16.5581 20.7597 16.5581H13.7597ZM13.7597 8.94276C13.5472 8.94276 13.3691 8.87085 13.2253 8.72704C13.0816 8.58324 13.0097 8.40504 13.0097 8.19244C13.0097 7.97985 13.0816 7.80177 13.2253 7.65819C13.3691 7.5146 13.5472 7.44281 13.7597 7.44281H20.7597C20.9722 7.44281 21.1503 7.51471 21.2941 7.65851C21.4378 7.80233 21.5097 7.98053 21.5097 8.19311C21.5097 8.40571 21.4378 8.5838 21.2941 8.72739C21.1503 8.87097 20.9722 8.94276 20.7597 8.94276H13.7597Z\"\n />\n </svg>\n`;\n\nconst functionsIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M7 19v-.808L13.096 12L7 5.808V5h10v1.25H9.102L14.727 12l-5.625 5.77H17V19z\"\n />\n </svg>\n`;\n\nfunction isInCodeBlock(selection) {\n const type = selection.$from.parent.type;\n return type.name === \"code_block\";\n}\nfunction isInList(selection) {\n var _a;\n const type = (_a = selection.$from.node(selection.$from.depth - 1)) == null ? void 0 : _a.type;\n return (type == null ? void 0 : type.name) === \"list_item\";\n}\n\nvar __typeError$2 = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck$2 = (obj, member, msg) => member.has(obj) || __typeError$2(\"Cannot \" + msg);\nvar __privateGet$2 = (obj, member, getter) => (__accessCheck$2(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd$2 = (obj, member, value) => member.has(obj) ? __typeError$2(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet$2 = (obj, member, value, setter) => (__accessCheck$2(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _groups, _getGroupInstance;\nclass GroupBuilder {\n constructor() {\n __privateAdd$2(this, _groups, []);\n this.clear = () => {\n __privateSet$2(this, _groups, []);\n return this;\n };\n __privateAdd$2(this, _getGroupInstance, (group) => {\n const groupInstance = {\n group,\n addItem: (key, item) => {\n const data = { ...item, key };\n group.items.push(data);\n return groupInstance;\n },\n clear: () => {\n group.items = [];\n return groupInstance;\n }\n };\n return groupInstance;\n });\n this.addGroup = (key, label) => {\n const items = [];\n const group = {\n key,\n label,\n items\n };\n __privateGet$2(this, _groups).push(group);\n return __privateGet$2(this, _getGroupInstance).call(this, group);\n };\n this.getGroup = (key) => {\n const group = __privateGet$2(this, _groups).find((group2) => group2.key === key);\n if (!group) throw new Error(`Group with key ${key} not found`);\n return __privateGet$2(this, _getGroupInstance).call(this, group);\n };\n this.build = () => {\n return __privateGet$2(this, _groups);\n };\n }\n}\n_groups = new WeakMap();\n_getGroupInstance = new WeakMap();\n\nfunction getGroups(filter, config, ctx) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$, _aa, _ba, _ca, _da, _ea, _fa, _ga, _ha, _ia, _ja, _ka, _la, _ma, _na, _oa, _pa, _qa, _ra, _sa, _ta, _ua, _va, _wa, _xa, _ya, _za, _Aa, _Ba, _Ca, _Da, _Ea, _Fa, _Ga, _Ha, _Ia, _Ja, _Ka, _La, _Ma, _Na, _Oa, _Pa, _Qa, _Ra, _Sa, _Ta, _Ua, _Va, _Wa, _Xa, _Ya, _Za, __a, _$a, _ab, _bb, _cb, _db, _eb, _fb, _gb, _hb, _ib, _jb, _kb;\n const flags = ctx && useCrepeFeatures(ctx).get();\n const isLatexEnabled = flags == null ? void 0 : flags.includes(CrepeFeature.Latex);\n const isImageBlockEnabled = flags == null ? void 0 : flags.includes(CrepeFeature.ImageBlock);\n const isTableEnabled = flags == null ? void 0 : flags.includes(CrepeFeature.Table);\n const groupBuilder = new GroupBuilder();\n if ((config == null ? void 0 : config.textGroup) !== null) {\n const textGroup = groupBuilder.addGroup(\n \"text\",\n (_b = (_a = config == null ? void 0 : config.textGroup) == null ? void 0 : _a.label) != null ? _b : \"Text\"\n );\n if (((_c = config == null ? void 0 : config.textGroup) == null ? void 0 : _c.text) !== null) {\n textGroup.addItem(\"text\", {\n label: (_f = (_e = (_d = config == null ? void 0 : config.textGroup) == null ? void 0 : _d.text) == null ? void 0 : _e.label) != null ? _f : \"Text\",\n icon: (_i = (_h = (_g = config == null ? void 0 : config.textGroup) == null ? void 0 : _g.text) == null ? void 0 : _h.icon) != null ? _i : textIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const paragraph = paragraphSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(setBlockTypeCommand.key, {\n nodeType: paragraph\n });\n }\n });\n }\n if (((_j = config == null ? void 0 : config.textGroup) == null ? void 0 : _j.h1) !== null) {\n textGroup.addItem(\"h1\", {\n label: (_m = (_l = (_k = config == null ? void 0 : config.textGroup) == null ? void 0 : _k.h1) == null ? void 0 : _l.label) != null ? _m : \"Heading 1\",\n icon: (_p = (_o = (_n = config == null ? void 0 : config.textGroup) == null ? void 0 : _n.h1) == null ? void 0 : _o.icon) != null ? _p : h1Icon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const heading = headingSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 1\n }\n });\n }\n });\n }\n if (((_q = config == null ? void 0 : config.textGroup) == null ? void 0 : _q.h2) !== null) {\n textGroup.addItem(\"h2\", {\n label: (_t = (_s = (_r = config == null ? void 0 : config.textGroup) == null ? void 0 : _r.h2) == null ? void 0 : _s.label) != null ? _t : \"Heading 2\",\n icon: (_w = (_v = (_u = config == null ? void 0 : config.textGroup) == null ? void 0 : _u.h2) == null ? void 0 : _v.icon) != null ? _w : h2Icon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const heading = headingSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 2\n }\n });\n }\n });\n }\n if (((_x = config == null ? void 0 : config.textGroup) == null ? void 0 : _x.h3) !== null) {\n textGroup.addItem(\"h3\", {\n label: (_A = (_z = (_y = config == null ? void 0 : config.textGroup) == null ? void 0 : _y.h3) == null ? void 0 : _z.label) != null ? _A : \"Heading 3\",\n icon: (_D = (_C = (_B = config == null ? void 0 : config.textGroup) == null ? void 0 : _B.h3) == null ? void 0 : _C.icon) != null ? _D : h3Icon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const heading = headingSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 3\n }\n });\n }\n });\n }\n if (((_E = config == null ? void 0 : config.textGroup) == null ? void 0 : _E.h4) !== null) {\n textGroup.addItem(\"h4\", {\n label: (_H = (_G = (_F = config == null ? void 0 : config.textGroup) == null ? void 0 : _F.h4) == null ? void 0 : _G.label) != null ? _H : \"Heading 4\",\n icon: (_K = (_J = (_I = config == null ? void 0 : config.textGroup) == null ? void 0 : _I.h4) == null ? void 0 : _J.icon) != null ? _K : h4Icon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const heading = headingSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 4\n }\n });\n }\n });\n }\n if (((_L = config == null ? void 0 : config.textGroup) == null ? void 0 : _L.h5) !== null) {\n textGroup.addItem(\"h5\", {\n label: (_O = (_N = (_M = config == null ? void 0 : config.textGroup) == null ? void 0 : _M.h5) == null ? void 0 : _N.label) != null ? _O : \"Heading 5\",\n icon: (_R = (_Q = (_P = config == null ? void 0 : config.textGroup) == null ? void 0 : _P.h5) == null ? void 0 : _Q.icon) != null ? _R : h5Icon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const heading = headingSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 5\n }\n });\n }\n });\n }\n if (((_S = config == null ? void 0 : config.textGroup) == null ? void 0 : _S.h6) !== null) {\n textGroup.addItem(\"h6\", {\n label: (_V = (_U = (_T = config == null ? void 0 : config.textGroup) == null ? void 0 : _T.h6) == null ? void 0 : _U.label) != null ? _V : \"Heading 6\",\n icon: (_Y = (_X = (_W = config == null ? void 0 : config.textGroup) == null ? void 0 : _W.h6) == null ? void 0 : _X.icon) != null ? _Y : h6Icon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const heading = headingSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 6\n }\n });\n }\n });\n }\n if (((_Z = config == null ? void 0 : config.textGroup) == null ? void 0 : _Z.quote) !== null) {\n textGroup.addItem(\"quote\", {\n label: (_aa = (_$ = (__ = config == null ? void 0 : config.textGroup) == null ? void 0 : __.quote) == null ? void 0 : _$.label) != null ? _aa : \"Quote\",\n icon: (_da = (_ca = (_ba = config == null ? void 0 : config.textGroup) == null ? void 0 : _ba.quote) == null ? void 0 : _ca.icon) != null ? _da : quoteIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const blockquote = blockquoteSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: blockquote\n });\n }\n });\n }\n if (((_ea = config == null ? void 0 : config.textGroup) == null ? void 0 : _ea.divider) !== null) {\n textGroup.addItem(\"divider\", {\n label: (_ha = (_ga = (_fa = config == null ? void 0 : config.textGroup) == null ? void 0 : _fa.divider) == null ? void 0 : _ga.label) != null ? _ha : \"Divider\",\n icon: (_ka = (_ja = (_ia = config == null ? void 0 : config.textGroup) == null ? void 0 : _ia.divider) == null ? void 0 : _ja.icon) != null ? _ka : dividerIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const hr = hrSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(addBlockTypeCommand.key, {\n nodeType: hr\n });\n }\n });\n }\n }\n if ((config == null ? void 0 : config.listGroup) !== null) {\n const listGroup = groupBuilder.addGroup(\n \"list\",\n (_ma = (_la = config == null ? void 0 : config.listGroup) == null ? void 0 : _la.label) != null ? _ma : \"List\"\n );\n if (((_na = config == null ? void 0 : config.listGroup) == null ? void 0 : _na.bulletList) !== null) {\n listGroup.addItem(\"bullet-list\", {\n label: (_qa = (_pa = (_oa = config == null ? void 0 : config.listGroup) == null ? void 0 : _oa.bulletList) == null ? void 0 : _pa.label) != null ? _qa : \"Bullet List\",\n icon: (_ta = (_sa = (_ra = config == null ? void 0 : config.listGroup) == null ? void 0 : _ra.bulletList) == null ? void 0 : _sa.icon) != null ? _ta : bulletListIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const bulletList = bulletListSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: bulletList\n });\n }\n });\n }\n if (((_ua = config == null ? void 0 : config.listGroup) == null ? void 0 : _ua.orderedList) !== null) {\n listGroup.addItem(\"ordered-list\", {\n label: (_xa = (_wa = (_va = config == null ? void 0 : config.listGroup) == null ? void 0 : _va.orderedList) == null ? void 0 : _wa.label) != null ? _xa : \"Ordered List\",\n icon: (_Aa = (_za = (_ya = config == null ? void 0 : config.listGroup) == null ? void 0 : _ya.orderedList) == null ? void 0 : _za.icon) != null ? _Aa : orderedListIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const orderedList = orderedListSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: orderedList\n });\n }\n });\n }\n if (((_Ba = config == null ? void 0 : config.listGroup) == null ? void 0 : _Ba.taskList) !== null) {\n listGroup.addItem(\"task-list\", {\n label: (_Ea = (_Da = (_Ca = config == null ? void 0 : config.listGroup) == null ? void 0 : _Ca.taskList) == null ? void 0 : _Da.label) != null ? _Ea : \"Task List\",\n icon: (_Ha = (_Ga = (_Fa = config == null ? void 0 : config.listGroup) == null ? void 0 : _Fa.taskList) == null ? void 0 : _Ga.icon) != null ? _Ha : todoListIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const listItem = listItemSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: listItem,\n attrs: { checked: false }\n });\n }\n });\n }\n }\n if ((config == null ? void 0 : config.advancedGroup) !== null) {\n const advancedGroup = groupBuilder.addGroup(\n \"advanced\",\n (_Ja = (_Ia = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _Ia.label) != null ? _Ja : \"Advanced\"\n );\n if (((_Ka = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _Ka.image) !== null && isImageBlockEnabled) {\n advancedGroup.addItem(\"image\", {\n label: (_Na = (_Ma = (_La = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _La.image) == null ? void 0 : _Ma.label) != null ? _Na : \"Image\",\n icon: (_Qa = (_Pa = (_Oa = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _Oa.image) == null ? void 0 : _Pa.icon) != null ? _Qa : imageIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const imageBlock = imageBlockSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(addBlockTypeCommand.key, {\n nodeType: imageBlock\n });\n }\n });\n }\n if (((_Ra = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _Ra.codeBlock) !== null) {\n advancedGroup.addItem(\"code\", {\n label: (_Ua = (_Ta = (_Sa = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _Sa.codeBlock) == null ? void 0 : _Ta.label) != null ? _Ua : \"Code\",\n icon: (_Xa = (_Wa = (_Va = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _Va.codeBlock) == null ? void 0 : _Wa.icon) != null ? _Xa : codeIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const codeBlock = codeBlockSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(setBlockTypeCommand.key, {\n nodeType: codeBlock\n });\n }\n });\n }\n if (((_Ya = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _Ya.table) !== null && isTableEnabled) {\n advancedGroup.addItem(\"table\", {\n label: (_$a = (__a = (_Za = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _Za.table) == null ? void 0 : __a.label) != null ? _$a : \"Table\",\n icon: (_cb = (_bb = (_ab = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _ab.table) == null ? void 0 : _bb.icon) != null ? _cb : tableIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const view = ctx2.get(editorViewCtx);\n commands.call(clearTextInCurrentBlockCommand.key);\n const { from } = view.state.selection;\n commands.call(addBlockTypeCommand.key, {\n nodeType: createTable(ctx2, 3, 3)\n });\n commands.call(selectTextNearPosCommand.key, {\n pos: from\n });\n }\n });\n }\n if (((_db = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _db.math) !== null && isLatexEnabled) {\n advancedGroup.addItem(\"math\", {\n label: (_gb = (_fb = (_eb = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _eb.math) == null ? void 0 : _fb.label) != null ? _gb : \"Math\",\n icon: (_jb = (_ib = (_hb = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _hb.math) == null ? void 0 : _ib.icon) != null ? _jb : functionsIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const codeBlock = codeBlockSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(addBlockTypeCommand.key, {\n nodeType: codeBlock,\n attrs: { language: \"LaTex\" }\n });\n }\n });\n }\n }\n (_kb = config == null ? void 0 : config.buildMenu) == null ? void 0 : _kb.call(config, groupBuilder);\n let groups = groupBuilder.build();\n if (filter) {\n groups = groups.map((group) => {\n const items2 = group.items.filter(\n (item) => item.label.toLowerCase().includes(filter.toLowerCase())\n );\n return {\n ...group,\n items: items2\n };\n }).filter((group) => group.items.length > 0);\n }\n const items = groups.flatMap((groups2) => groups2.items);\n items.forEach((item, index) => {\n Object.assign(item, { index });\n });\n groups.reduce((acc, group) => {\n const end = acc + group.items.length;\n Object.assign(group, {\n range: [acc, end]\n });\n return end;\n }, 0);\n return {\n groups,\n size: items.length\n };\n}\n\nconst Menu = defineComponent({\n props: {\n ctx: {\n type: Object,\n required: true\n },\n show: {\n type: Object,\n required: true\n },\n filter: {\n type: Object,\n required: true\n },\n hide: {\n type: Function,\n required: true\n },\n config: {\n type: Object,\n required: false\n }\n },\n setup({ ctx, show, filter, hide, config }) {\n const host = ref();\n const groupInfo = computed(() => getGroups(filter.value, config, ctx));\n const hoverIndex = ref(0);\n const prevMousePosition = ref({ x: -999, y: -999 });\n const onPointerMove = (e) => {\n const { x, y } = e;\n prevMousePosition.value = { x, y };\n };\n watch([groupInfo, show], () => {\n const { size } = groupInfo.value;\n if (size === 0 && show.value) hide();\n else if (hoverIndex.value >= size) hoverIndex.value = 0;\n });\n const onHover = (index, after) => {\n const prevHoverIndex = hoverIndex.value;\n const next = typeof index === \"function\" ? index(prevHoverIndex) : index;\n after == null ? void 0 : after(next);\n hoverIndex.value = next;\n };\n const scrollToIndex = (index) => {\n var _a, _b;\n const target = (_a = host.value) == null ? void 0 : _a.querySelector(\n `[data-index=\"${index}\"]`\n );\n const scrollRoot = (_b = host.value) == null ? void 0 : _b.querySelector(\".menu-groups\");\n if (!target || !scrollRoot) return;\n scrollRoot.scrollTop = target.offsetTop - scrollRoot.offsetTop;\n };\n const runByIndex = (index) => {\n const item = groupInfo.value.groups.flatMap((group) => group.items).at(index);\n if (item && ctx) item.onRun(ctx);\n hide();\n };\n const onKeydown = (e) => {\n const { size, groups } = groupInfo.value;\n if (e.key === \"Escape\") {\n e.preventDefault();\n hide == null ? void 0 : hide();\n return;\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n return onHover(\n (index) => index < size - 1 ? index + 1 : index,\n scrollToIndex\n );\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n return onHover(\n (index) => index <= 0 ? index : index - 1,\n scrollToIndex\n );\n }\n if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n return onHover((index) => {\n const group = groups.find(\n (group2) => group2.range[0] <= index && group2.range[1] > index\n );\n if (!group) return index;\n const prevGroup = groups[groups.indexOf(group) - 1];\n if (!prevGroup) return index;\n return prevGroup.range[1] - 1;\n }, scrollToIndex);\n }\n if (e.key === \"ArrowRight\") {\n e.preventDefault();\n return onHover((index) => {\n const group = groups.find(\n (group2) => group2.range[0] <= index && group2.range[1] > index\n );\n if (!group) return index;\n const nextGroup = groups[groups.indexOf(group) + 1];\n if (!nextGroup) return index;\n return nextGroup.range[0];\n }, scrollToIndex);\n }\n if (e.key === \"Enter\") {\n e.preventDefault();\n runByIndex(hoverIndex.value);\n }\n };\n const getOnPointerEnter = (index) => (e) => {\n const prevPos = prevMousePosition.value;\n if (!prevPos) return;\n const { x, y } = e;\n if (x === prevPos.x && y === prevPos.y) return;\n onHover(index);\n };\n watchEffect(() => {\n const isShown = show.value;\n if (isShown) {\n window.addEventListener(\"keydown\", onKeydown, { capture: true });\n } else {\n window.removeEventListener(\"keydown\", onKeydown, { capture: true });\n }\n });\n onUnmounted(() => {\n window.removeEventListener(\"keydown\", onKeydown, { capture: true });\n });\n return () => {\n return /* @__PURE__ */ h(\"div\", { ref: host, onPointerdown: (e) => e.preventDefault() }, /* @__PURE__ */ h(\"nav\", { class: \"tab-group\" }, /* @__PURE__ */ h(\"ul\", null, groupInfo.value.groups.map((group) => /* @__PURE__ */ h(\n \"li\",\n {\n key: group.key,\n onPointerdown: () => onHover(group.range[0], scrollToIndex),\n class: hoverIndex.value >= group.range[0] && hoverIndex.value < group.range[1] ? \"selected\" : \"\"\n },\n group.label\n )))), /* @__PURE__ */ h(\"div\", { class: \"menu-groups\", onPointermove: onPointerMove }, groupInfo.value.groups.map((group) => /* @__PURE__ */ h(\"div\", { key: group.key, class: \"menu-group\" }, /* @__PURE__ */ h(\"h6\", null, group.label), /* @__PURE__ */ h(\"ul\", null, group.items.map((item) => /* @__PURE__ */ h(\n \"li\",\n {\n key: item.key,\n \"data-index\": item.index,\n class: hoverIndex.value === item.index ? \"hover\" : \"\",\n onPointerenter: getOnPointerEnter(item.index),\n onPointerdown: () => {\n var _a, _b;\n (_b = (_a = host.value) == null ? void 0 : _a.querySelector(`[data-index=\"${item.index}\"]`)) == null ? void 0 : _b.classList.add(\"active\");\n },\n onPointerup: () => {\n var _a, _b;\n (_b = (_a = host.value) == null ? void 0 : _a.querySelector(`[data-index=\"${item.index}\"]`)) == null ? void 0 : _b.classList.remove(\"active\");\n runByIndex(item.index);\n }\n },\n /* @__PURE__ */ h(Icon, { icon: item.icon }),\n /* @__PURE__ */ h(\"span\", null, item.label)\n )))))));\n };\n }\n});\n\nvar __typeError$1 = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck$1 = (obj, member, msg) => member.has(obj) || __typeError$1(\"Cannot \" + msg);\nvar __privateGet$1 = (obj, member, getter) => (__accessCheck$1(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd$1 = (obj, member, value) => member.has(obj) ? __typeError$1(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet$1 = (obj, member, value, setter) => (__accessCheck$1(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _content$1, _app$1, _filter, _slashProvider, _programmaticallyPos;\nconst menu = slashFactory(\"CREPE_MENU\");\nconst menuAPI = $ctx(\n {\n show: () => {\n },\n hide: () => {\n }\n },\n \"menuAPICtx\"\n);\nfunction configureMenu(ctx, config) {\n ctx.set(menu.key, {\n view: (view) => new MenuView(ctx, view, config)\n });\n}\nclass MenuView {\n constructor(ctx, view, config) {\n __privateAdd$1(this, _content$1);\n __privateAdd$1(this, _app$1);\n __privateAdd$1(this, _filter);\n __privateAdd$1(this, _slashProvider);\n __privateAdd$1(this, _programmaticallyPos, null);\n this.update = (view) => {\n __privateGet$1(this, _slashProvider).update(view);\n };\n this.show = (pos) => {\n __privateSet$1(this, _programmaticallyPos, pos);\n __privateGet$1(this, _filter).value = \"\";\n __privateGet$1(this, _slashProvider).show();\n };\n this.hide = () => {\n __privateSet$1(this, _programmaticallyPos, null);\n __privateGet$1(this, _slashProvider).hide();\n };\n this.destroy = () => {\n __privateGet$1(this, _slashProvider).destroy();\n __privateGet$1(this, _app$1).unmount();\n __privateGet$1(this, _content$1).remove();\n };\n const content = document.createElement(\"div\");\n content.classList.add(\"milkdown-slash-menu\");\n const show = ref(false);\n const filter = ref(\"\");\n __privateSet$1(this, _filter, filter);\n const hide = this.hide;\n const app = createApp(Menu, {\n ctx,\n config,\n show,\n filter,\n hide\n });\n __privateSet$1(this, _app$1, app);\n app.mount(content);\n __privateSet$1(this, _content$1, content);\n const self = this;\n __privateSet$1(this, _slashProvider, new SlashProvider({\n content: __privateGet$1(this, _content$1),\n debounce: 20,\n shouldShow(view2) {\n if (isInCodeBlock(view2.state.selection) || isInList(view2.state.selection))\n return false;\n const currentText = this.getContent(\n view2,\n (node) => [\"paragraph\", \"heading\"].includes(node.type.name)\n );\n if (currentText == null) return false;\n if (!isSelectionAtEndOfNode(view2.state.selection)) {\n return false;\n }\n const pos = __privateGet$1(self, _programmaticallyPos);\n filter.value = currentText.startsWith(\"/\") ? currentText.slice(1) : currentText;\n if (typeof pos === \"number\") {\n const maxSize = view2.state.doc.nodeSize - 2;\n const validPos = Math.min(pos, maxSize);\n if (view2.state.doc.resolve(validPos).node() !== view2.state.doc.resolve(view2.state.selection.from).node()) {\n __privateSet$1(self, _programmaticallyPos, null);\n return false;\n }\n return true;\n }\n if (!currentText.startsWith(\"/\")) return false;\n return true;\n },\n offset: 10\n }));\n __privateGet$1(this, _slashProvider).onShow = () => {\n show.value = true;\n };\n __privateGet$1(this, _slashProvider).onHide = () => {\n show.value = false;\n };\n this.update(view);\n ctx.set(menuAPI.key, {\n show: (pos) => this.show(pos),\n hide: () => this.hide()\n });\n }\n}\n_content$1 = new WeakMap();\n_app$1 = new WeakMap();\n_filter = new WeakMap();\n_slashProvider = new WeakMap();\n_programmaticallyPos = new WeakMap();\nfunction isSelectionAtEndOfNode(selection) {\n if (!(selection instanceof TextSelection)) return false;\n const { $head } = selection;\n const parent = $head.parent;\n const offset = $head.parentOffset;\n return offset === parent.content.size;\n}\n\nconst BlockHandle = defineComponent({\n props: {\n onAdd: {\n type: Function,\n required: true\n },\n addIcon: {\n type: String,\n required: true\n },\n handleIcon: {\n type: String,\n required: true\n }\n },\n setup(props) {\n const addButton = ref();\n return () => {\n return /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h(\n \"div\",\n {\n ref: addButton,\n class: \"operation-item\",\n onPointerdown: (e) => {\n var _a;\n e.preventDefault();\n e.stopPropagation();\n (_a = addButton.value) == null ? void 0 : _a.classList.add(\"active\");\n },\n onPointerup: (e) => {\n var _a;\n e.preventDefault();\n e.stopPropagation();\n (_a = addButton.value) == null ? void 0 : _a.classList.remove(\"active\");\n props.onAdd();\n }\n },\n /* @__PURE__ */ h(Icon, { icon: props.addIcon })\n ), /* @__PURE__ */ h(\"div\", { class: \"operation-item\" }, /* @__PURE__ */ h(Icon, { icon: props.handleIcon })));\n };\n }\n});\n\nvar __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _content, _provider, _app, _ctx;\nclass BlockHandleView {\n constructor(ctx, config) {\n __privateAdd(this, _content);\n __privateAdd(this, _provider);\n __privateAdd(this, _app);\n __privateAdd(this, _ctx);\n this.update = () => {\n __privateGet(this, _provider).update();\n };\n this.destroy = () => {\n __privateGet(this, _provider).destroy();\n __privateGet(this, _content).remove();\n __privateGet(this, _app).unmount();\n };\n this.onAdd = () => {\n const ctx = __privateGet(this, _ctx);\n const view = ctx.get(editorViewCtx);\n if (!view.hasFocus()) view.focus();\n const { state, dispatch } = view;\n const active = __privateGet(this, _provider).active;\n if (!active) return;\n const $pos = active.$pos;\n const pos = $pos.pos + active.node.nodeSize;\n let tr = state.tr.insert(pos, paragraphSchema.type(ctx).create());\n tr = tr.setSelection(TextSelection.near(tr.doc.resolve(pos)));\n dispatch(tr.scrollIntoView());\n __privateGet(this, _provider).hide();\n ctx.get(menuAPI.key).show(tr.selection.from);\n };\n var _a, _b, _c;\n __privateSet(this, _ctx, ctx);\n const content = document.createElement(\"div\");\n content.classList.add(\"milkdown-block-handle\");\n const app = createApp(BlockHandle, {\n onAdd: this.onAdd,\n addIcon: (_a = config == null ? void 0 : config.handleAddIcon) != null ? _a : plusIcon,\n handleIcon: (_b = config == null ? void 0 : config.handleDragIcon) != null ? _b : menuIcon\n });\n app.mount(content);\n __privateSet(this, _app, app);\n __privateSet(this, _content, content);\n const blockProviderOptions = (_c = config == null ? void 0 : config.blockHandle) != null ? _c : {};\n __privateSet(this, _provider, new BlockProvider({\n ctx,\n content,\n getOffset: () => 16,\n getPlacement: ({ active, blockDom }) => {\n if (active.node.type.name === \"heading\") return \"left\";\n let totalDescendant = 0;\n active.node.descendants((node) => {\n totalDescendant += node.childCount;\n });\n const dom = active.el;\n const domRect = dom.getBoundingClientRect();\n const handleRect = blockDom.getBoundingClientRect();\n const style = window.getComputedStyle(dom);\n const paddingTop = Number.parseInt(style.paddingTop, 10) || 0;\n const paddingBottom = Number.parseInt(style.paddingBottom, 10) || 0;\n const height = domRect.height - paddingTop - paddingBottom;\n const handleHeight = handleRect.height;\n return totalDescendant > 2 || handleHeight < height ? \"left-start\" : \"left\";\n },\n ...blockProviderOptions\n }));\n this.update();\n }\n}\n_content = new WeakMap();\n_provider = new WeakMap();\n_app = new WeakMap();\n_ctx = new WeakMap();\nfunction configureBlockHandle(ctx, config) {\n ctx.set(blockConfig.key, {\n filterNodes: (pos) => {\n const filter = findParent(\n (node) => [\"table\", \"blockquote\", \"math_inline\"].includes(node.type.name)\n )(pos);\n if (filter) return false;\n return true;\n }\n });\n ctx.set(block.key, {\n view: () => new BlockHandleView(ctx, config)\n });\n}\n\nconst blockEdit = (editor, config) => {\n editor.config(crepeFeatureConfig(CrepeFeature.BlockEdit)).config((ctx) => configureBlockHandle(ctx, config)).config((ctx) => configureMenu(ctx, config)).use(menuAPI).use(block).use(menu);\n};\n\nexport { blockEdit };\n//# sourceMappingURL=index.js.map\n","import { computePosition, flip, offset, shift, autoUpdate } from \"@floating-ui/dom\";\nimport { posToDOMRect } from \"@milkdown/prose\";\nimport { TextSelection, Plugin, PluginKey } from \"@milkdown/prose/state\";\nimport { throttle } from \"lodash-es\";\nimport { $ctx, $prose } from \"@milkdown/utils\";\nclass TooltipProvider {\n constructor(options) {\n this.#initialized = false;\n this.onShow = () => {\n };\n this.onHide = () => {\n };\n this.#updatePosition = (reference) => {\n computePosition(reference, this.element, {\n placement: this.#floatingUIOptions.placement ?? \"top\",\n middleware: [\n flip(),\n offset(this.#offset),\n shift(this.#shift),\n ...this.#middleware\n ],\n ...this.#floatingUIOptions\n }).then(({ x, y }) => {\n Object.assign(this.element.style, {\n left: `${x}px`,\n top: `${y}px`\n });\n }).catch(console.error);\n };\n this.#shouldAutoUpdate = (editorView) => {\n return this.#root !== editorView.dom.parentElement;\n };\n this.#onUpdate = (view, prevState) => {\n const { state, composing } = view;\n const { selection, doc } = state;\n const { ranges } = selection;\n const from = Math.min(...ranges.map((range) => range.$from.pos));\n const to = Math.max(...ranges.map((range) => range.$to.pos));\n const isSame = prevState && prevState.doc.eq(doc) && prevState.selection.eq(selection);\n if (!this.#initialized) {\n const root = this.#root ?? view.dom.parentElement ?? document.body;\n root.appendChild(this.element);\n this.#initialized = true;\n }\n if (composing || isSame) return;\n this.#cleanupAutoUpdate?.();\n this.#cleanupAutoUpdate = void 0;\n if (!this.#shouldShow(view, prevState)) {\n this.hide();\n return;\n }\n const virtualEl = {\n getBoundingClientRect: () => posToDOMRect(view, from, to),\n contextElement: view.dom\n };\n if (this.#shouldAutoUpdate(view)) {\n this.#cleanupAutoUpdate = autoUpdate(\n virtualEl,\n this.element,\n () => this.#updatePosition(virtualEl)\n );\n } else {\n this.#updatePosition(virtualEl);\n }\n this.show();\n };\n this.update = (view, prevState) => {\n this.#updater(view, prevState);\n };\n this.destroy = () => {\n this.#cleanupAutoUpdate?.();\n this.#updater.cancel();\n };\n this.show = (virtualElement, editorView) => {\n this.element.dataset.show = \"true\";\n if (virtualElement) {\n this.#cleanupAutoUpdate?.();\n this.#cleanupAutoUpdate = void 0;\n const reference = { ...virtualElement, contextElement: editorView?.dom };\n if (editorView && this.#shouldAutoUpdate(editorView)) {\n this.#cleanupAutoUpdate = autoUpdate(\n reference,\n this.element,\n () => this.#updatePosition(reference)\n );\n } else {\n this.#updatePosition(reference);\n }\n }\n this.onShow();\n };\n this.hide = () => {\n if (this.element.dataset.show === \"false\") return;\n this.element.dataset.show = \"false\";\n this.onHide();\n };\n this.element = options.content;\n this.#debounce = options.debounce ?? 200;\n this.#shouldShow = options.shouldShow ?? this.#_shouldShow;\n this.#offset = options.offset;\n this.#shift = options.shift;\n this.#middleware = options.middleware ?? [];\n this.#floatingUIOptions = options.floatingUIOptions ?? {};\n this.#root = options.root;\n this.element.dataset.show = \"false\";\n this.#updater = throttle(this.#onUpdate, this.#debounce);\n }\n /// @internal\n #debounce;\n /// @internal\n #shouldShow;\n /// @internal\n #middleware;\n /// @internal\n #floatingUIOptions;\n /// @internal\n #root;\n #initialized;\n /// @internal\n #cleanupAutoUpdate;\n /// @internal\n #offset;\n /// @internal\n #shift;\n /// @internal\n #updater;\n #updatePosition;\n #shouldAutoUpdate;\n #onUpdate;\n /// @internal\n #_shouldShow(view) {\n const { doc, selection } = view.state;\n const { empty, from, to } = selection;\n const isEmptyTextBlock = !doc.textBetween(from, to).length && view.state.selection instanceof TextSelection;\n const isTooltipChildren = this.element.contains(document.activeElement);\n const notHasFocus = !view.hasFocus() && !isTooltipChildren;\n const isReadonly = !view.editable;\n if (notHasFocus || empty || isEmptyTextBlock || isReadonly) return false;\n return true;\n }\n}\nfunction tooltipFactory(id) {\n const tooltipSpec = $ctx(\n {},\n `${id}_TOOLTIP_SPEC`\n );\n const tooltipPlugin = $prose((ctx) => {\n const spec = ctx.get(tooltipSpec.key);\n return new Plugin({\n key: new PluginKey(`${id}_TOOLTIP`),\n ...spec\n });\n });\n const result = [tooltipSpec, tooltipPlugin];\n result.key = tooltipSpec.key;\n result.pluginKey = tooltipPlugin.key;\n tooltipSpec.meta = {\n package: \"@milkdown/plugin-tooltip\",\n displayName: `Ctx<tooltipSpec>|${id}`\n };\n tooltipPlugin.meta = {\n package: \"@milkdown/plugin-tooltip\",\n displayName: `Prose<tooltip>|${id}`\n };\n return result;\n}\nexport {\n TooltipProvider,\n tooltipFactory\n};\n//# sourceMappingURL=index.js.map\n","import { linkSchema } from '@milkdown/preset-commonmark';\nimport { $ctx, $command } from '@milkdown/utils';\nimport { tooltipFactory, TooltipProvider } from '@milkdown/plugin-tooltip';\nimport { editorViewCtx } from '@milkdown/core';\nimport { posToDOMRect } from '@milkdown/prose';\nimport { TextSelection } from '@milkdown/prose/state';\nimport DOMPurify from 'dompurify';\nimport { h, defineComponent, ref, watch, createApp } from 'vue';\nimport clsx from 'clsx';\nimport { debounce } from 'lodash-es';\n\nvar __defProp$3 = Object.defineProperty;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n if (__getOwnPropSymbols$3)\n for (var prop of __getOwnPropSymbols$3(b)) {\n if (__propIsEnum$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n }\n return a;\n};\nfunction withMeta(plugin, meta) {\n Object.assign(plugin, {\n meta: __spreadValues$3({\n package: \"@milkdown/components\"\n }, meta)\n });\n return plugin;\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n if (__getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(b)) {\n if (__propIsEnum$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n }\n return a;\n};\nconst defaultState = {\n mode: \"preview\"\n};\nconst linkTooltipState = $ctx(__spreadValues$2({}, defaultState), \"linkTooltipStateCtx\");\nwithMeta(linkTooltipState, {\n displayName: \"State<link-tooltip>\",\n group: \"LinkTooltip\"\n});\nconst defaultAPI = {\n addLink: () => {\n },\n editLink: () => {\n },\n removeLink: () => {\n }\n};\nconst linkTooltipAPI = $ctx(__spreadValues$2({}, defaultAPI), \"linkTooltipAPICtx\");\nwithMeta(linkTooltipState, {\n displayName: \"API<link-tooltip>\",\n group: \"LinkTooltip\"\n});\nconst defaultConfig = {\n linkIcon: \"\\u{1F517}\",\n editButton: \"\\u270E\",\n removeButton: \"\\u232B\",\n confirmButton: \"Confirm \\u23CE\",\n onCopyLink: () => {\n },\n inputPlaceholder: \"Paste link...\"\n};\nconst linkTooltipConfig = $ctx(\n __spreadValues$2({}, defaultConfig),\n \"linkTooltipConfigCtx\"\n);\nwithMeta(linkTooltipState, {\n displayName: \"Config<link-tooltip>\",\n group: \"LinkTooltip\"\n});\n\nconst toggleLinkCommand = $command(\"ToggleLink\", (ctx) => {\n return () => (state) => {\n const { doc, selection } = state;\n const mark = linkSchema.type(ctx);\n const hasLink = doc.rangeHasMark(selection.from, selection.to, mark);\n if (hasLink) {\n ctx.get(linkTooltipAPI.key).removeLink(selection.from, selection.to);\n return true;\n }\n ctx.get(linkTooltipAPI.key).addLink(selection.from, selection.to);\n return true;\n };\n});\n\nconst linkPreviewTooltip = tooltipFactory(\"LINK_PREVIEW\");\nwithMeta(linkPreviewTooltip[0], {\n displayName: \"PreviewTooltipSpec<link-tooltip>\",\n group: \"LinkTooltip\"\n});\nwithMeta(linkPreviewTooltip[1], {\n displayName: \"PreviewTooltipPlugin<link-tooltip>\",\n group: \"LinkTooltip\"\n});\nconst linkEditTooltip = tooltipFactory(\"LINK_EDIT\");\nwithMeta(linkEditTooltip[0], {\n displayName: \"EditTooltipSpec<link-tooltip>\",\n group: \"LinkTooltip\"\n});\nwithMeta(linkEditTooltip[1], {\n displayName: \"EditTooltipPlugin<link-tooltip>\",\n group: \"LinkTooltip\"\n});\n\nfunction Icon({ icon, class: className, onClick }) {\n return /* @__PURE__ */ h(\n \"span\",\n {\n class: clsx(\"milkdown-icon\", className),\n onPointerdown: onClick,\n innerHTML: icon ? DOMPurify.sanitize(icon.trim()) : void 0\n }\n );\n}\nIcon.props = {\n icon: {\n type: String,\n required: false\n },\n class: {\n type: String,\n required: false\n },\n onClick: {\n type: Function,\n required: false\n }\n};\n\nconst EditLink = defineComponent({\n props: {\n config: {\n type: Object,\n required: true\n },\n src: {\n type: Object,\n required: true\n },\n onConfirm: {\n type: Function,\n required: true\n },\n onCancel: {\n type: Function,\n required: true\n }\n },\n setup({ config, src, onConfirm, onCancel }) {\n const link = ref(src);\n watch(src, (value) => {\n link.value = value;\n });\n const onConfirmEdit = () => {\n onConfirm(link.value);\n };\n const onKeydown = (e) => {\n e.stopPropagation();\n if (e.key === \"Enter\") {\n e.preventDefault();\n onConfirmEdit();\n }\n if (e.key === \"Escape\") {\n e.preventDefault();\n onCancel();\n }\n };\n return () => {\n return /* @__PURE__ */ h(\"div\", { class: \"link-edit\" }, /* @__PURE__ */ h(\n \"input\",\n {\n class: \"input-area\",\n placeholder: config.value.inputPlaceholder,\n onKeydown,\n onInput: (e) => {\n link.value = e.target.value;\n },\n value: link.value\n }\n ), link.value ? /* @__PURE__ */ h(\n Icon,\n {\n class: \"button confirm\",\n icon: config.value.confirmButton,\n onClick: onConfirmEdit\n }\n ) : null);\n };\n }\n});\n\nvar __defProp$1 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __typeError$1 = (msg) => {\n throw TypeError(msg);\n};\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n if (__getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(b)) {\n if (__propIsEnum$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nvar __accessCheck$1 = (obj, member, msg) => member.has(obj) || __typeError$1(\"Cannot \" + msg);\nvar __privateGet$1 = (obj, member, getter) => (__accessCheck$1(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd$1 = (obj, member, value) => member.has(obj) ? __typeError$1(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet$1 = (obj, member, value, setter) => (__accessCheck$1(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _content$1, _provider$1, _data, _app$1, _config$1, _src$1, _reset, _confirmEdit, _enterEditMode;\nconst defaultData = {\n from: -1,\n to: -1,\n mark: null\n};\nclass LinkEditTooltip {\n constructor(ctx, view) {\n this.ctx = ctx;\n __privateAdd$1(this, _content$1);\n __privateAdd$1(this, _provider$1);\n __privateAdd$1(this, _data, __spreadValues$1({}, defaultData));\n __privateAdd$1(this, _app$1);\n __privateAdd$1(this, _config$1);\n __privateAdd$1(this, _src$1, ref(\"\"));\n __privateAdd$1(this, _reset, () => {\n __privateGet$1(this, _provider$1).hide();\n this.ctx.update(linkTooltipState.key, (state) => __spreadProps$1(__spreadValues$1({}, state), {\n mode: \"preview\"\n }));\n __privateSet$1(this, _data, __spreadValues$1({}, defaultData));\n });\n __privateAdd$1(this, _confirmEdit, (href) => {\n const view = this.ctx.get(editorViewCtx);\n const { from, to, mark } = __privateGet$1(this, _data);\n const type = linkSchema.type(this.ctx);\n const link = DOMPurify.sanitize(href);\n if (mark && mark.attrs.href === link) {\n __privateGet$1(this, _reset).call(this);\n return;\n }\n const tr = view.state.tr;\n if (mark) tr.removeMark(from, to, mark);\n tr.addMark(from, to, type.create({ href: link }));\n view.dispatch(tr);\n __privateGet$1(this, _reset).call(this);\n });\n __privateAdd$1(this, _enterEditMode, (value, from, to) => {\n const config = this.ctx.get(linkTooltipConfig.key);\n __privateGet$1(this, _config$1).value = config;\n __privateGet$1(this, _src$1).value = value;\n this.ctx.update(linkTooltipState.key, (state) => __spreadProps$1(__spreadValues$1({}, state), {\n mode: \"edit\"\n }));\n const view = this.ctx.get(editorViewCtx);\n view.dispatch(\n view.state.tr.setSelection(TextSelection.create(view.state.doc, from, to))\n );\n __privateGet$1(this, _provider$1).show(\n { getBoundingClientRect: () => posToDOMRect(view, from, to) },\n view\n );\n requestAnimationFrame(() => {\n var _a;\n (_a = __privateGet$1(this, _content$1).querySelector(\"input\")) == null ? void 0 : _a.focus();\n });\n });\n this.update = (view) => {\n const { state } = view;\n const { selection } = state;\n if (!(selection instanceof TextSelection)) return;\n const { from, to } = selection;\n if (from === __privateGet$1(this, _data).from && to === __privateGet$1(this, _data).to) return;\n __privateGet$1(this, _reset).call(this);\n };\n this.destroy = () => {\n __privateGet$1(this, _app$1).unmount();\n __privateGet$1(this, _provider$1).destroy();\n __privateGet$1(this, _content$1).remove();\n };\n this.addLink = (from, to) => {\n __privateSet$1(this, _data, {\n from,\n to,\n mark: null\n });\n __privateGet$1(this, _enterEditMode).call(this, \"\", from, to);\n };\n this.editLink = (mark, from, to) => {\n __privateSet$1(this, _data, {\n from,\n to,\n mark\n });\n __privateGet$1(this, _enterEditMode).call(this, mark.attrs.href, from, to);\n };\n this.removeLink = (from, to) => {\n const view = this.ctx.get(editorViewCtx);\n const tr = view.state.tr;\n tr.removeMark(from, to, linkSchema.type(this.ctx));\n view.dispatch(tr);\n __privateGet$1(this, _reset).call(this);\n };\n __privateSet$1(this, _config$1, ref(this.ctx.get(linkTooltipConfig.key)));\n const content = document.createElement(\"div\");\n content.className = \"milkdown-link-edit\";\n const app = createApp(EditLink, {\n config: __privateGet$1(this, _config$1),\n src: __privateGet$1(this, _src$1),\n onConfirm: __privateGet$1(this, _confirmEdit),\n onCancel: __privateGet$1(this, _reset)\n });\n app.mount(content);\n __privateSet$1(this, _app$1, app);\n __privateSet$1(this, _content$1, content);\n __privateSet$1(this, _provider$1, new TooltipProvider({\n content,\n debounce: 0,\n shouldShow: () => false\n }));\n __privateGet$1(this, _provider$1).onHide = () => {\n requestAnimationFrame(() => {\n view.dom.focus({ preventScroll: true });\n });\n };\n __privateGet$1(this, _provider$1).update(view);\n }\n}\n_content$1 = new WeakMap();\n_provider$1 = new WeakMap();\n_data = new WeakMap();\n_app$1 = new WeakMap();\n_config$1 = new WeakMap();\n_src$1 = new WeakMap();\n_reset = new WeakMap();\n_confirmEdit = new WeakMap();\n_enterEditMode = new WeakMap();\n\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction configureLinkEditTooltip(ctx) {\n let linkEditTooltipView;\n ctx.update(linkTooltipAPI.key, (api) => __spreadProps(__spreadValues({}, api), {\n addLink: (from, to) => {\n linkEditTooltipView == null ? void 0 : linkEditTooltipView.addLink(from, to);\n },\n editLink: (mark, from, to) => {\n linkEditTooltipView == null ? void 0 : linkEditTooltipView.editLink(mark, from, to);\n },\n removeLink: (from, to) => {\n linkEditTooltipView == null ? void 0 : linkEditTooltipView.removeLink(from, to);\n }\n }));\n ctx.set(linkEditTooltip.key, {\n view: (view) => {\n linkEditTooltipView = new LinkEditTooltip(ctx, view);\n return linkEditTooltipView;\n }\n });\n}\n\nfunction findMarkPosition(mark, node, doc, from, to) {\n let markPos = { start: -1, end: -1 };\n doc.nodesBetween(from, to, (n, pos) => {\n if (markPos.start > -1) return false;\n if (markPos.start === -1 && mark.isInSet(n.marks) && node === n) {\n markPos = {\n start: pos,\n end: pos + Math.max(n.textContent.length, 1)\n };\n }\n return void 0;\n });\n return markPos;\n}\nfunction shouldShowPreviewWhenHover(ctx, view, event) {\n const $pos = view.posAtCoords({ left: event.clientX, top: event.clientY });\n if (!$pos) return;\n const { pos } = $pos;\n const node = view.state.doc.nodeAt(pos);\n if (!node) return;\n const mark = node.marks.find(\n (mark2) => mark2.type === linkSchema.mark.type(ctx)\n );\n if (!mark) return;\n const key = linkPreviewTooltip.pluginKey();\n if (!key) return;\n return { show: true, pos, node, mark };\n}\n\nconst PreviewLink = defineComponent({\n props: {\n config: {\n type: Object,\n required: true\n },\n src: {\n type: Object,\n required: true\n },\n onEdit: {\n type: Object,\n required: true\n },\n onRemove: {\n type: Object,\n required: true\n }\n },\n setup({ config, src, onEdit, onRemove }) {\n const onClickEditButton = (e) => {\n e.preventDefault();\n e.stopPropagation();\n onEdit.value();\n };\n const onClickRemoveButton = (e) => {\n e.preventDefault();\n e.stopPropagation();\n onRemove.value();\n };\n const onClickPreview = (e) => {\n e.preventDefault();\n const link = src.value;\n if (navigator.clipboard && link) {\n navigator.clipboard.writeText(link).then(() => {\n config.value.onCopyLink(link);\n }).catch((e2) => console.error(e2));\n }\n };\n return () => {\n return /* @__PURE__ */ h(\"div\", { class: \"link-preview\" }, /* @__PURE__ */ h(\n Icon,\n {\n class: \"button link-icon\",\n icon: config.value.linkIcon,\n onClick: onClickPreview\n }\n ), /* @__PURE__ */ h(\"a\", { href: src.value, target: \"_blank\", class: \"link-display\" }, src.value), /* @__PURE__ */ h(\n Icon,\n {\n class: \"button link-edit-button\",\n icon: config.value.editButton,\n onClick: onClickEditButton\n }\n ), /* @__PURE__ */ h(\n Icon,\n {\n class: \"button link-remove-button\",\n icon: config.value.removeButton,\n onClick: onClickRemoveButton\n }\n ));\n };\n }\n});\n\nvar __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _content, _provider, _slice, _config, _src, _onEdit, _onRemove, _app, _editorView, _hovering, _onStateChange, _onMouseEnter, _onMouseLeave, _hide;\nclass LinkPreviewTooltip {\n constructor(ctx, view) {\n this.ctx = ctx;\n __privateAdd(this, _content);\n __privateAdd(this, _provider);\n __privateAdd(this, _slice, this.ctx.use(linkTooltipState.key));\n __privateAdd(this, _config);\n __privateAdd(this, _src, ref(\"\"));\n __privateAdd(this, _onEdit, ref(() => {\n }));\n __privateAdd(this, _onRemove, ref(() => {\n }));\n __privateAdd(this, _app);\n __privateAdd(this, _editorView);\n __privateAdd(this, _hovering, false);\n __privateAdd(this, _onStateChange, ({ mode }) => {\n if (mode === \"edit\") __privateGet(this, _hide).call(this);\n });\n __privateAdd(this, _onMouseEnter, () => {\n __privateSet(this, _hovering, true);\n });\n __privateAdd(this, _onMouseLeave, () => {\n __privateSet(this, _hovering, false);\n });\n __privateAdd(this, _hide, () => {\n __privateGet(this, _provider).hide();\n __privateGet(this, _provider).element.removeEventListener(\"mouseenter\", __privateGet(this, _onMouseEnter));\n __privateGet(this, _provider).element.removeEventListener(\"mouseleave\", __privateGet(this, _onMouseLeave));\n });\n this.show = (mark, from, to, rect) => {\n __privateGet(this, _config).value = this.ctx.get(linkTooltipConfig.key);\n __privateGet(this, _src).value = mark.attrs.href;\n __privateGet(this, _onEdit).value = () => {\n this.ctx.get(linkTooltipAPI.key).editLink(mark, from, to);\n };\n __privateGet(this, _onRemove).value = () => {\n this.ctx.get(linkTooltipAPI.key).removeLink(from, to);\n __privateGet(this, _hide).call(this);\n };\n __privateGet(this, _provider).show({ getBoundingClientRect: () => rect }, __privateGet(this, _editorView));\n __privateGet(this, _provider).element.addEventListener(\"mouseenter\", __privateGet(this, _onMouseEnter));\n __privateGet(this, _provider).element.addEventListener(\"mouseleave\", __privateGet(this, _onMouseLeave));\n };\n this.hide = () => {\n if (__privateGet(this, _hovering)) return;\n __privateGet(this, _hide).call(this);\n };\n this.update = () => {\n };\n this.destroy = () => {\n __privateGet(this, _app).unmount();\n __privateGet(this, _slice).off(__privateGet(this, _onStateChange));\n __privateGet(this, _provider).destroy();\n __privateGet(this, _content).remove();\n };\n __privateSet(this, _editorView, view);\n __privateSet(this, _config, ref(this.ctx.get(linkTooltipConfig.key)));\n __privateSet(this, _app, createApp(PreviewLink, {\n config: __privateGet(this, _config),\n src: __privateGet(this, _src),\n onEdit: __privateGet(this, _onEdit),\n onRemove: __privateGet(this, _onRemove)\n }));\n __privateSet(this, _content, document.createElement(\"div\"));\n __privateGet(this, _content).className = \"milkdown-link-preview\";\n __privateGet(this, _app).mount(__privateGet(this, _content));\n __privateSet(this, _provider, new TooltipProvider({\n debounce: 0,\n content: __privateGet(this, _content),\n shouldShow: () => false\n }));\n __privateGet(this, _provider).update(view);\n __privateSet(this, _slice, ctx.use(linkTooltipState.key));\n __privateGet(this, _slice).on(__privateGet(this, _onStateChange));\n }\n}\n_content = new WeakMap();\n_provider = new WeakMap();\n_slice = new WeakMap();\n_config = new WeakMap();\n_src = new WeakMap();\n_onEdit = new WeakMap();\n_onRemove = new WeakMap();\n_app = new WeakMap();\n_editorView = new WeakMap();\n_hovering = new WeakMap();\n_onStateChange = new WeakMap();\n_onMouseEnter = new WeakMap();\n_onMouseLeave = new WeakMap();\n_hide = new WeakMap();\n\nfunction configureLinkPreviewTooltip(ctx) {\n let linkPreviewTooltipView;\n const DELAY = 50;\n const onMouseMove = debounce((view, event) => {\n if (!linkPreviewTooltipView) return;\n if (!view.hasFocus()) return;\n const state = ctx.get(linkTooltipState.key);\n if (state.mode === \"edit\") return;\n const result = shouldShowPreviewWhenHover(ctx, view, event);\n if (result) {\n const position = view.state.doc.resolve(result.pos);\n const markPosition = findMarkPosition(\n result.mark,\n result.node,\n view.state.doc,\n position.before(),\n position.after()\n );\n const from = markPosition.start;\n const to = markPosition.end;\n linkPreviewTooltipView.show(\n result.mark,\n from,\n to,\n posToDOMRect(view, from, to)\n );\n return;\n }\n linkPreviewTooltipView.hide();\n }, DELAY);\n const onMouseLeave = () => {\n setTimeout(() => {\n linkPreviewTooltipView == null ? void 0 : linkPreviewTooltipView.hide();\n }, DELAY);\n };\n ctx.set(linkPreviewTooltip.key, {\n props: {\n handleDOMEvents: {\n mousemove: onMouseMove,\n mouseleave: onMouseLeave\n }\n },\n view: (view) => {\n linkPreviewTooltipView = new LinkPreviewTooltip(ctx, view);\n return linkPreviewTooltipView;\n }\n });\n}\n\nfunction configureLinkTooltip(ctx) {\n configureLinkPreviewTooltip(ctx);\n configureLinkEditTooltip(ctx);\n}\n\nconst linkTooltipPlugin = [\n linkTooltipState,\n linkTooltipAPI,\n linkTooltipConfig,\n linkPreviewTooltip,\n linkEditTooltip,\n toggleLinkCommand\n].flat();\n\nexport { configureLinkTooltip, linkEditTooltip, linkPreviewTooltip, linkTooltipAPI, linkTooltipConfig, linkTooltipPlugin, linkTooltipState, toggleLinkCommand };\n//# sourceMappingURL=index.js.map\n","/**\n * Lexing or parsing positional information for error reporting.\n * This object is immutable.\n */\nclass SourceLocation {\n // The + prefix indicates that these fields aren't writeable\n // Lexer holding the input string.\n // Start offset, zero-based inclusive.\n // End offset, zero-based exclusive.\n constructor(lexer, start, end) {\n this.lexer = void 0;\n this.start = void 0;\n this.end = void 0;\n this.lexer = lexer;\n this.start = start;\n this.end = end;\n }\n /**\n * Merges two `SourceLocation`s from location providers, given they are\n * provided in order of appearance.\n * - Returns the first one's location if only the first is provided.\n * - Returns a merged range of the first and the last if both are provided\n * and their lexers match.\n * - Otherwise, returns null.\n */\n\n\n static range(first, second) {\n if (!second) {\n return first && first.loc;\n } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) {\n return null;\n } else {\n return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end);\n }\n }\n\n}\n\n/**\n * Interface required to break circular dependency between Token, Lexer, and\n * ParseError.\n */\n\n/**\n * The resulting token returned from `lex`.\n *\n * It consists of the token text plus some position information.\n * The position information is essentially a range in an input string,\n * but instead of referencing the bare input string, we refer to the lexer.\n * That way it is possible to attach extra metadata to the input string,\n * like for example a file name or similar.\n *\n * The position information is optional, so it is OK to construct synthetic\n * tokens if appropriate. Not providing available position information may\n * lead to degraded error reporting, though.\n */\nclass Token {\n // don't expand the token\n // used in \\noexpand\n constructor(text, // the text of this token\n loc) {\n this.text = void 0;\n this.loc = void 0;\n this.noexpand = void 0;\n this.treatAsRelax = void 0;\n this.text = text;\n this.loc = loc;\n }\n /**\n * Given a pair of tokens (this and endToken), compute a `Token` encompassing\n * the whole input range enclosed by these two.\n */\n\n\n range(endToken, // last token of the range, inclusive\n text // the text of the newly constructed token\n ) {\n return new Token(text, SourceLocation.range(this, endToken));\n }\n\n}\n\n/**\n * This is the ParseError class, which is the main error thrown by KaTeX\n * functions when something has gone wrong. This is used to distinguish internal\n * errors from errors in the expression that the user provided.\n *\n * If possible, a caller should provide a Token or ParseNode with information\n * about where in the source string the problem occurred.\n */\nclass ParseError {\n // Error start position based on passed-in Token or ParseNode.\n // Length of affected text based on passed-in Token or ParseNode.\n // The underlying error message without any context added.\n constructor(message, // The error message\n token // An object providing position information\n ) {\n this.name = void 0;\n this.position = void 0;\n this.length = void 0;\n this.rawMessage = void 0;\n var error = \"KaTeX parse error: \" + message;\n var start;\n var end;\n var loc = token && token.loc;\n\n if (loc && loc.start <= loc.end) {\n // If we have the input and a position, make the error a bit fancier\n // Get the input\n var input = loc.lexer.input; // Prepend some information\n\n start = loc.start;\n end = loc.end;\n\n if (start === input.length) {\n error += \" at end of input: \";\n } else {\n error += \" at position \" + (start + 1) + \": \";\n } // Underline token in question using combining underscores\n\n\n var underlined = input.slice(start, end).replace(/[^]/g, \"$&\\u0332\"); // Extract some context from the input and add it to the error\n\n var left;\n\n if (start > 15) {\n left = \"…\" + input.slice(start - 15, start);\n } else {\n left = input.slice(0, start);\n }\n\n var right;\n\n if (end + 15 < input.length) {\n right = input.slice(end, end + 15) + \"…\";\n } else {\n right = input.slice(end);\n }\n\n error += left + underlined + right;\n } // Some hackery to make ParseError a prototype of Error\n // See http://stackoverflow.com/a/8460753\n // $FlowFixMe\n\n\n var self = new Error(error);\n self.name = \"ParseError\"; // $FlowFixMe\n\n self.__proto__ = ParseError.prototype;\n self.position = start;\n\n if (start != null && end != null) {\n self.length = end - start;\n }\n\n self.rawMessage = message;\n return self;\n }\n\n} // $FlowFixMe More hackery\n\n\nParseError.prototype.__proto__ = Error.prototype;\n\n/**\n * This file contains a list of utility functions which are useful in other\n * files.\n */\n\n/**\n * Provide a default value if a setting is undefined\n * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022.\n */\nvar deflt = function deflt(setting, defaultIfUndefined) {\n return setting === undefined ? defaultIfUndefined : setting;\n}; // hyphenate and escape adapted from Facebook's React under Apache 2 license\n\n\nvar uppercase = /([A-Z])/g;\n\nvar hyphenate = function hyphenate(str) {\n return str.replace(uppercase, \"-$1\").toLowerCase();\n};\n\nvar ESCAPE_LOOKUP = {\n \"&\": \"&\",\n \">\": \">\",\n \"<\": \"<\",\n \"\\\"\": \""\",\n \"'\": \"'\"\n};\nvar ESCAPE_REGEX = /[&><\"']/g;\n/**\n * Escapes text to prevent scripting attacks.\n */\n\nfunction escape(text) {\n return String(text).replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]);\n}\n/**\n * Sometimes we want to pull out the innermost element of a group. In most\n * cases, this will just be the group itself, but when ordgroups and colors have\n * a single element, we want to pull that out.\n */\n\n\nvar getBaseElem = function getBaseElem(group) {\n if (group.type === \"ordgroup\") {\n if (group.body.length === 1) {\n return getBaseElem(group.body[0]);\n } else {\n return group;\n }\n } else if (group.type === \"color\") {\n if (group.body.length === 1) {\n return getBaseElem(group.body[0]);\n } else {\n return group;\n }\n } else if (group.type === \"font\") {\n return getBaseElem(group.body);\n } else {\n return group;\n }\n};\n/**\n * TeXbook algorithms often reference \"character boxes\", which are simply groups\n * with a single character in them. To decide if something is a character box,\n * we find its innermost group, and see if it is a single character.\n */\n\n\nvar isCharacterBox = function isCharacterBox(group) {\n var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters\n\n return baseElem.type === \"mathord\" || baseElem.type === \"textord\" || baseElem.type === \"atom\";\n};\n\nvar assert = function assert(value) {\n if (!value) {\n throw new Error('Expected non-null, but got ' + String(value));\n }\n\n return value;\n};\n/**\n * Return the protocol of a URL, or \"_relative\" if the URL does not specify a\n * protocol (and thus is relative), or `null` if URL has invalid protocol\n * (so should be outright rejected).\n */\n\nvar protocolFromUrl = function protocolFromUrl(url) {\n // Check for possible leading protocol.\n // https://url.spec.whatwg.org/#url-parsing strips leading whitespace\n // (U+20) or C0 control (U+00-U+1F) characters.\n // eslint-disable-next-line no-control-regex\n var protocol = /^[\\x00-\\x20]*([^\\\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(url);\n\n if (!protocol) {\n return \"_relative\";\n } // Reject weird colons\n\n\n if (protocol[2] !== \":\") {\n return null;\n } // Reject invalid characters in scheme according to\n // https://datatracker.ietf.org/doc/html/rfc3986#section-3.1\n\n\n if (!/^[a-zA-Z][a-zA-Z0-9+\\-.]*$/.test(protocol[1])) {\n return null;\n } // Lowercase the protocol\n\n\n return protocol[1].toLowerCase();\n};\nvar utils = {\n deflt,\n escape,\n hyphenate,\n getBaseElem,\n isCharacterBox,\n protocolFromUrl\n};\n\n/* eslint no-console:0 */\n// TODO: automatically generate documentation\n// TODO: check all properties on Settings exist\n// TODO: check the type of a property on Settings matches\nvar SETTINGS_SCHEMA = {\n displayMode: {\n type: \"boolean\",\n description: \"Render math in display mode, which puts the math in \" + \"display style (so \\\\int and \\\\sum are large, for example), and \" + \"centers the math on the page on its own line.\",\n cli: \"-d, --display-mode\"\n },\n output: {\n type: {\n enum: [\"htmlAndMathml\", \"html\", \"mathml\"]\n },\n description: \"Determines the markup language of the output.\",\n cli: \"-F, --format <type>\"\n },\n leqno: {\n type: \"boolean\",\n description: \"Render display math in leqno style (left-justified tags).\"\n },\n fleqn: {\n type: \"boolean\",\n description: \"Render display math flush left.\"\n },\n throwOnError: {\n type: \"boolean\",\n default: true,\n cli: \"-t, --no-throw-on-error\",\n cliDescription: \"Render errors (in the color given by --error-color) ins\" + \"tead of throwing a ParseError exception when encountering an error.\"\n },\n errorColor: {\n type: \"string\",\n default: \"#cc0000\",\n cli: \"-c, --error-color <color>\",\n cliDescription: \"A color string given in the format 'rgb' or 'rrggbb' \" + \"(no #). This option determines the color of errors rendered by the \" + \"-t option.\",\n cliProcessor: color => \"#\" + color\n },\n macros: {\n type: \"object\",\n cli: \"-m, --macro <def>\",\n cliDescription: \"Define custom macro of the form '\\\\foo:expansion' (use \" + \"multiple -m arguments for multiple macros).\",\n cliDefault: [],\n cliProcessor: (def, defs) => {\n defs.push(def);\n return defs;\n }\n },\n minRuleThickness: {\n type: \"number\",\n description: \"Specifies a minimum thickness, in ems, for fraction lines,\" + \" `\\\\sqrt` top lines, `{array}` vertical lines, `\\\\hline`, \" + \"`\\\\hdashline`, `\\\\underline`, `\\\\overline`, and the borders of \" + \"`\\\\fbox`, `\\\\boxed`, and `\\\\fcolorbox`.\",\n processor: t => Math.max(0, t),\n cli: \"--min-rule-thickness <size>\",\n cliProcessor: parseFloat\n },\n colorIsTextColor: {\n type: \"boolean\",\n description: \"Makes \\\\color behave like LaTeX's 2-argument \\\\textcolor, \" + \"instead of LaTeX's one-argument \\\\color mode change.\",\n cli: \"-b, --color-is-text-color\"\n },\n strict: {\n type: [{\n enum: [\"warn\", \"ignore\", \"error\"]\n }, \"boolean\", \"function\"],\n description: \"Turn on strict / LaTeX faithfulness mode, which throws an \" + \"error if the input uses features that are not supported by LaTeX.\",\n cli: \"-S, --strict\",\n cliDefault: false\n },\n trust: {\n type: [\"boolean\", \"function\"],\n description: \"Trust the input, enabling all HTML features such as \\\\url.\",\n cli: \"-T, --trust\"\n },\n maxSize: {\n type: \"number\",\n default: Infinity,\n description: \"If non-zero, all user-specified sizes, e.g. in \" + \"\\\\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, \" + \"elements and spaces can be arbitrarily large\",\n processor: s => Math.max(0, s),\n cli: \"-s, --max-size <n>\",\n cliProcessor: parseInt\n },\n maxExpand: {\n type: \"number\",\n default: 1000,\n description: \"Limit the number of macro expansions to the specified \" + \"number, to prevent e.g. infinite macro loops. If set to Infinity, \" + \"the macro expander will try to fully expand as in LaTeX.\",\n processor: n => Math.max(0, n),\n cli: \"-e, --max-expand <n>\",\n cliProcessor: n => n === \"Infinity\" ? Infinity : parseInt(n)\n },\n globalGroup: {\n type: \"boolean\",\n cli: false\n }\n};\n\nfunction getDefaultValue(schema) {\n if (schema.default) {\n return schema.default;\n }\n\n var type = schema.type;\n var defaultType = Array.isArray(type) ? type[0] : type;\n\n if (typeof defaultType !== 'string') {\n return defaultType.enum[0];\n }\n\n switch (defaultType) {\n case 'boolean':\n return false;\n\n case 'string':\n return '';\n\n case 'number':\n return 0;\n\n case 'object':\n return {};\n }\n}\n/**\n * The main Settings object\n *\n * The current options stored are:\n * - displayMode: Whether the expression should be typeset as inline math\n * (false, the default), meaning that the math starts in\n * \\textstyle and is placed in an inline-block); or as display\n * math (true), meaning that the math starts in \\displaystyle\n * and is placed in a block with vertical margin.\n */\n\n\nclass Settings {\n constructor(options) {\n this.displayMode = void 0;\n this.output = void 0;\n this.leqno = void 0;\n this.fleqn = void 0;\n this.throwOnError = void 0;\n this.errorColor = void 0;\n this.macros = void 0;\n this.minRuleThickness = void 0;\n this.colorIsTextColor = void 0;\n this.strict = void 0;\n this.trust = void 0;\n this.maxSize = void 0;\n this.maxExpand = void 0;\n this.globalGroup = void 0;\n // allow null options\n options = options || {};\n\n for (var prop in SETTINGS_SCHEMA) {\n if (SETTINGS_SCHEMA.hasOwnProperty(prop)) {\n // $FlowFixMe\n var schema = SETTINGS_SCHEMA[prop]; // TODO: validate options\n // $FlowFixMe\n\n this[prop] = options[prop] !== undefined ? schema.processor ? schema.processor(options[prop]) : options[prop] : getDefaultValue(schema);\n }\n }\n }\n /**\n * Report nonstrict (non-LaTeX-compatible) input.\n * Can safely not be called if `this.strict` is false in JavaScript.\n */\n\n\n reportNonstrict(errorCode, errorMsg, token) {\n var strict = this.strict;\n\n if (typeof strict === \"function\") {\n // Allow return value of strict function to be boolean or string\n // (or null/undefined, meaning no further processing).\n strict = strict(errorCode, errorMsg, token);\n }\n\n if (!strict || strict === \"ignore\") {\n return;\n } else if (strict === true || strict === \"error\") {\n throw new ParseError(\"LaTeX-incompatible input and strict mode is set to 'error': \" + (errorMsg + \" [\" + errorCode + \"]\"), token);\n } else if (strict === \"warn\") {\n typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to 'warn': \" + (errorMsg + \" [\" + errorCode + \"]\"));\n } else {\n // won't happen in type-safe code\n typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to \" + (\"unrecognized '\" + strict + \"': \" + errorMsg + \" [\" + errorCode + \"]\"));\n }\n }\n /**\n * Check whether to apply strict (LaTeX-adhering) behavior for unusual\n * input (like `\\\\`). Unlike `nonstrict`, will not throw an error;\n * instead, \"error\" translates to a return value of `true`, while \"ignore\"\n * translates to a return value of `false`. May still print a warning:\n * \"warn\" prints a warning and returns `false`.\n * This is for the second category of `errorCode`s listed in the README.\n */\n\n\n useStrictBehavior(errorCode, errorMsg, token) {\n var strict = this.strict;\n\n if (typeof strict === \"function\") {\n // Allow return value of strict function to be boolean or string\n // (or null/undefined, meaning no further processing).\n // But catch any exceptions thrown by function, treating them\n // like \"error\".\n try {\n strict = strict(errorCode, errorMsg, token);\n } catch (error) {\n strict = \"error\";\n }\n }\n\n if (!strict || strict === \"ignore\") {\n return false;\n } else if (strict === true || strict === \"error\") {\n return true;\n } else if (strict === \"warn\") {\n typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to 'warn': \" + (errorMsg + \" [\" + errorCode + \"]\"));\n return false;\n } else {\n // won't happen in type-safe code\n typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to \" + (\"unrecognized '\" + strict + \"': \" + errorMsg + \" [\" + errorCode + \"]\"));\n return false;\n }\n }\n /**\n * Check whether to test potentially dangerous input, and return\n * `true` (trusted) or `false` (untrusted). The sole argument `context`\n * should be an object with `command` field specifying the relevant LaTeX\n * command (as a string starting with `\\`), and any other arguments, etc.\n * If `context` has a `url` field, a `protocol` field will automatically\n * get added by this function (changing the specified object).\n */\n\n\n isTrusted(context) {\n if (context.url && !context.protocol) {\n var protocol = utils.protocolFromUrl(context.url);\n\n if (protocol == null) {\n return false;\n }\n\n context.protocol = protocol;\n }\n\n var trust = typeof this.trust === \"function\" ? this.trust(context) : this.trust;\n return Boolean(trust);\n }\n\n}\n\n/**\n * This file contains information and classes for the various kinds of styles\n * used in TeX. It provides a generic `Style` class, which holds information\n * about a specific style. It then provides instances of all the different kinds\n * of styles possible, and provides functions to move between them and get\n * information about them.\n */\n\n/**\n * The main style class. Contains a unique id for the style, a size (which is\n * the same for cramped and uncramped version of a style), and a cramped flag.\n */\nclass Style {\n constructor(id, size, cramped) {\n this.id = void 0;\n this.size = void 0;\n this.cramped = void 0;\n this.id = id;\n this.size = size;\n this.cramped = cramped;\n }\n /**\n * Get the style of a superscript given a base in the current style.\n */\n\n\n sup() {\n return styles[sup[this.id]];\n }\n /**\n * Get the style of a subscript given a base in the current style.\n */\n\n\n sub() {\n return styles[sub[this.id]];\n }\n /**\n * Get the style of a fraction numerator given the fraction in the current\n * style.\n */\n\n\n fracNum() {\n return styles[fracNum[this.id]];\n }\n /**\n * Get the style of a fraction denominator given the fraction in the current\n * style.\n */\n\n\n fracDen() {\n return styles[fracDen[this.id]];\n }\n /**\n * Get the cramped version of a style (in particular, cramping a cramped style\n * doesn't change the style).\n */\n\n\n cramp() {\n return styles[cramp[this.id]];\n }\n /**\n * Get a text or display version of this style.\n */\n\n\n text() {\n return styles[text$1[this.id]];\n }\n /**\n * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle)\n */\n\n\n isTight() {\n return this.size >= 2;\n }\n\n} // Export an interface for type checking, but don't expose the implementation.\n// This way, no more styles can be generated.\n\n\n// IDs of the different styles\nvar D = 0;\nvar Dc = 1;\nvar T = 2;\nvar Tc = 3;\nvar S = 4;\nvar Sc = 5;\nvar SS = 6;\nvar SSc = 7; // Instances of the different styles\n\nvar styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another\n\nvar sup = [S, Sc, S, Sc, SS, SSc, SS, SSc];\nvar sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc];\nvar fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc];\nvar fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc];\nvar cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc];\nvar text$1 = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles.\n\nvar Style$1 = {\n DISPLAY: styles[D],\n TEXT: styles[T],\n SCRIPT: styles[S],\n SCRIPTSCRIPT: styles[SS]\n};\n\n/*\n * This file defines the Unicode scripts and script families that we\n * support. To add new scripts or families, just add a new entry to the\n * scriptData array below. Adding scripts to the scriptData array allows\n * characters from that script to appear in \\text{} environments.\n */\n\n/**\n * Each script or script family has a name and an array of blocks.\n * Each block is an array of two numbers which specify the start and\n * end points (inclusive) of a block of Unicode codepoints.\n */\n\n/**\n * Unicode block data for the families of scripts we support in \\text{}.\n * Scripts only need to appear here if they do not have font metrics.\n */\nvar scriptData = [{\n // Latin characters beyond the Latin-1 characters we have metrics for.\n // Needed for Czech, Hungarian and Turkish text, for example.\n name: 'latin',\n blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B\n [0x0300, 0x036f] // Combining Diacritical marks\n ]\n}, {\n // The Cyrillic script used by Russian and related languages.\n // A Cyrillic subset used to be supported as explicitly defined\n // symbols in symbols.js\n name: 'cyrillic',\n blocks: [[0x0400, 0x04ff]]\n}, {\n // Armenian\n name: 'armenian',\n blocks: [[0x0530, 0x058F]]\n}, {\n // The Brahmic scripts of South and Southeast Asia\n // Devanagari (0900–097F)\n // Bengali (0980–09FF)\n // Gurmukhi (0A00–0A7F)\n // Gujarati (0A80–0AFF)\n // Oriya (0B00–0B7F)\n // Tamil (0B80–0BFF)\n // Telugu (0C00–0C7F)\n // Kannada (0C80–0CFF)\n // Malayalam (0D00–0D7F)\n // Sinhala (0D80–0DFF)\n // Thai (0E00–0E7F)\n // Lao (0E80–0EFF)\n // Tibetan (0F00–0FFF)\n // Myanmar (1000–109F)\n name: 'brahmic',\n blocks: [[0x0900, 0x109F]]\n}, {\n name: 'georgian',\n blocks: [[0x10A0, 0x10ff]]\n}, {\n // Chinese and Japanese.\n // The \"k\" in cjk is for Korean, but we've separated Korean out\n name: \"cjk\",\n blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana\n [0x4E00, 0x9FAF], // CJK ideograms\n [0xFF00, 0xFF60] // Fullwidth punctuation\n // TODO: add halfwidth Katakana and Romanji glyphs\n ]\n}, {\n // Korean\n name: 'hangul',\n blocks: [[0xAC00, 0xD7AF]]\n}];\n/**\n * Given a codepoint, return the name of the script or script family\n * it is from, or null if it is not part of a known block\n */\n\nfunction scriptFromCodepoint(codepoint) {\n for (var i = 0; i < scriptData.length; i++) {\n var script = scriptData[i];\n\n for (var _i = 0; _i < script.blocks.length; _i++) {\n var block = script.blocks[_i];\n\n if (codepoint >= block[0] && codepoint <= block[1]) {\n return script.name;\n }\n }\n }\n\n return null;\n}\n/**\n * A flattened version of all the supported blocks in a single array.\n * This is an optimization to make supportedCodepoint() fast.\n */\n\nvar allBlocks = [];\nscriptData.forEach(s => s.blocks.forEach(b => allBlocks.push(...b)));\n/**\n * Given a codepoint, return true if it falls within one of the\n * scripts or script families defined above and false otherwise.\n *\n * Micro benchmarks shows that this is faster than\n * /[\\u3000-\\u30FF\\u4E00-\\u9FAF\\uFF00-\\uFF60\\uAC00-\\uD7AF\\u0900-\\u109F]/.test()\n * in Firefox, Chrome and Node.\n */\n\nfunction supportedCodepoint(codepoint) {\n for (var i = 0; i < allBlocks.length; i += 2) {\n if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * This file provides support to domTree.js and delimiter.js.\n * It's a storehouse of path geometry for SVG images.\n */\n// In all paths below, the viewBox-to-em scale is 1000:1.\nvar hLinePad = 80; // padding above a sqrt vinculum. Prevents image cropping.\n// The vinculum of a \\sqrt can be made thicker by a KaTeX rendering option.\n// Think of variable extraVinculum as two detours in the SVG path.\n// The detour begins at the lower left of the area labeled extraVinculum below.\n// The detour proceeds one extraVinculum distance up and slightly to the right,\n// displacing the radiused corner between surd and vinculum. The radius is\n// traversed as usual, then the detour resumes. It goes right, to the end of\n// the very long vinculum, then down one extraVinculum distance,\n// after which it resumes regular path geometry for the radical.\n\n/* vinculum\n /\n /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraVinculum\n / █████████████████████←0.04em (40 unit) std vinculum thickness\n / /\n / /\n / /\\\n / / surd\n*/\n\nvar sqrtMain = function sqrtMain(extraVinculum, hLinePad) {\n // sqrtMain path geometry is from glyph U221A in the font KaTeX Main\n return \"M95,\" + (622 + extraVinculum + hLinePad) + \"\\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\\nc69,-144,104.5,-217.7,106.5,-221\\nl\" + extraVinculum / 2.075 + \" -\" + extraVinculum + \"\\nc5.3,-9.3,12,-14,20,-14\\nH400000v\" + (40 + extraVinculum) + \"H845.2724\\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\\nM\" + (834 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize1 = function sqrtSize1(extraVinculum, hLinePad) {\n // size1 is from glyph U221A in the font KaTeX_Size1-Regular\n return \"M263,\" + (601 + extraVinculum + hLinePad) + \"c0.7,0,18,39.7,52,119\\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\\nc340,-704.7,510.7,-1060.3,512,-1067\\nl\" + extraVinculum / 2.084 + \" -\" + extraVinculum + \"\\nc4.7,-7.3,11,-11,19,-11\\nH40000v\" + (40 + extraVinculum) + \"H1012.3\\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\\nM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize2 = function sqrtSize2(extraVinculum, hLinePad) {\n // size2 is from glyph U221A in the font KaTeX_Size2-Regular\n return \"M983 \" + (10 + extraVinculum + hLinePad) + \"\\nl\" + extraVinculum / 3.13 + \" -\" + extraVinculum + \"\\nc4,-6.7,10,-10,18,-10 H400000v\" + (40 + extraVinculum) + \"\\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\\nM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize3 = function sqrtSize3(extraVinculum, hLinePad) {\n // size3 is from glyph U221A in the font KaTeX_Size3-Regular\n return \"M424,\" + (2398 + extraVinculum + hLinePad) + \"\\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\\nl\" + extraVinculum / 4.223 + \" -\" + extraVinculum + \"c4,-6.7,10,-10,18,-10 H400000\\nv\" + (40 + extraVinculum) + \"H1014.6\\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\\nc-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2z M\" + (1001 + extraVinculum) + \" \" + hLinePad + \"\\nh400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize4 = function sqrtSize4(extraVinculum, hLinePad) {\n // size4 is from glyph U221A in the font KaTeX_Size4-Regular\n return \"M473,\" + (2713 + extraVinculum + hLinePad) + \"\\nc339.3,-1799.3,509.3,-2700,510,-2702 l\" + extraVinculum / 5.298 + \" -\" + extraVinculum + \"\\nc3.3,-7.3,9.3,-11,18,-11 H400000v\" + (40 + extraVinculum) + \"H1017.7\\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\\n606zM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"H1017.7z\";\n};\n\nvar phasePath = function phasePath(y) {\n var x = y / 2; // x coordinate at top of angle\n\n return \"M400000 \" + y + \" H0 L\" + x + \" 0 l65 45 L145 \" + (y - 80) + \" H400000z\";\n};\n\nvar sqrtTall = function sqrtTall(extraVinculum, hLinePad, viewBoxHeight) {\n // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular\n // One path edge has a variable length. It runs vertically from the vinculum\n // to a point near (14 units) the bottom of the surd. The vinculum\n // is normally 40 units thick. So the length of the line in question is:\n var vertSegment = viewBoxHeight - 54 - hLinePad - extraVinculum;\n return \"M702 \" + (extraVinculum + hLinePad) + \"H400000\" + (40 + extraVinculum) + \"\\nH742v\" + vertSegment + \"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\\n219 661 l218 661zM702 \" + hLinePad + \"H400000v\" + (40 + extraVinculum) + \"H742z\";\n};\n\nvar sqrtPath = function sqrtPath(size, extraVinculum, viewBoxHeight) {\n extraVinculum = 1000 * extraVinculum; // Convert from document ems to viewBox.\n\n var path = \"\";\n\n switch (size) {\n case \"sqrtMain\":\n path = sqrtMain(extraVinculum, hLinePad);\n break;\n\n case \"sqrtSize1\":\n path = sqrtSize1(extraVinculum, hLinePad);\n break;\n\n case \"sqrtSize2\":\n path = sqrtSize2(extraVinculum, hLinePad);\n break;\n\n case \"sqrtSize3\":\n path = sqrtSize3(extraVinculum, hLinePad);\n break;\n\n case \"sqrtSize4\":\n path = sqrtSize4(extraVinculum, hLinePad);\n break;\n\n case \"sqrtTall\":\n path = sqrtTall(extraVinculum, hLinePad, viewBoxHeight);\n }\n\n return path;\n};\nvar innerPath = function innerPath(name, height) {\n // The inner part of stretchy tall delimiters\n switch (name) {\n case \"\\u239c\":\n return \"M291 0 H417 V\" + height + \" H291z M291 0 H417 V\" + height + \" H291z\";\n\n case \"\\u2223\":\n return \"M145 0 H188 V\" + height + \" H145z M145 0 H188 V\" + height + \" H145z\";\n\n case \"\\u2225\":\n return \"M145 0 H188 V\" + height + \" H145z M145 0 H188 V\" + height + \" H145z\" + (\"M367 0 H410 V\" + height + \" H367z M367 0 H410 V\" + height + \" H367z\");\n\n case \"\\u239f\":\n return \"M457 0 H583 V\" + height + \" H457z M457 0 H583 V\" + height + \" H457z\";\n\n case \"\\u23a2\":\n return \"M319 0 H403 V\" + height + \" H319z M319 0 H403 V\" + height + \" H319z\";\n\n case \"\\u23a5\":\n return \"M263 0 H347 V\" + height + \" H263z M263 0 H347 V\" + height + \" H263z\";\n\n case \"\\u23aa\":\n return \"M384 0 H504 V\" + height + \" H384z M384 0 H504 V\" + height + \" H384z\";\n\n case \"\\u23d0\":\n return \"M312 0 H355 V\" + height + \" H312z M312 0 H355 V\" + height + \" H312z\";\n\n case \"\\u2016\":\n return \"M257 0 H300 V\" + height + \" H257z M257 0 H300 V\" + height + \" H257z\" + (\"M478 0 H521 V\" + height + \" H478z M478 0 H521 V\" + height + \" H478z\");\n\n default:\n return \"\";\n }\n};\nvar path = {\n // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main\n doubleleftarrow: \"M262 157\\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\\nm8 0v40h399730v-40zm0 194v40h399730v-40z\",\n // doublerightarrow is from glyph U+21D2 in font KaTeX Main\n doublerightarrow: \"M399738 392l\\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z\",\n // leftarrow is from glyph U+2190 in font KaTeX Main\n leftarrow: \"M400000 241H110l3-3c68.7-52.7 113.7-120\\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\\n l-3-3h399890zM100 241v40h399900v-40z\",\n // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular\n leftbrace: \"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z\",\n leftbraceunder: \"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z\",\n // overgroup is from the MnSymbol package (public domain)\n leftgroup: \"M400000 80\\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\\n 435 0h399565z\",\n leftgroupunder: \"M400000 262\\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\\n 435 219h399565z\",\n // Harpoons are from glyph U+21BD in font KaTeX Main\n leftharpoon: \"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z\",\n leftharpoonplus: \"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\\nm0 0v40h400000v-40z\",\n leftharpoondown: \"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z\",\n leftharpoondownplus: \"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z\",\n // hook is from glyph U+21A9 in font KaTeX Main\n lefthook: \"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\\n 71.5 23h399859zM103 281v-40h399897v40z\",\n leftlinesegment: \"M40 281 V428 H0 V94 H40 V241 H400000 v40z\\nM40 281 V428 H0 V94 H40 V241 H400000 v40z\",\n leftmapsto: \"M40 281 V448H0V74H40V241H400000v40z\\nM40 281 V448H0V74H40V241H400000v40z\",\n // tofrom is from glyph U+21C4 in font KaTeX AMS Regular\n leftToFrom: \"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z\",\n longequal: \"M0 50 h400000 v40H0z m0 194h40000v40H0z\\nM0 50 h400000 v40H0z m0 194h40000v40H0z\",\n midbrace: \"M200428 334\\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z\",\n midbraceunder: \"M199572 214\\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z\",\n oiintSize1: \"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z\",\n oiintSize2: \"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\\nc0 110 84 276 504 276s502.4-166 502.4-276z\",\n oiiintSize1: \"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z\",\n oiiintSize2: \"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z\",\n rightarrow: \"M0 241v40h399891c-47.3 35.3-84 78-110 128\\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n 151.7 139 205zm0 0v40h399900v-40z\",\n rightbrace: \"M400000 542l\\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z\",\n rightbraceunder: \"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z\",\n rightgroup: \"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\\n 3-1 3-3v-38c-76-158-257-219-435-219H0z\",\n rightgroupunder: \"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z\",\n rightharpoon: \"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\\n 69.2 92 94.5zm0 0v40h399900v-40z\",\n rightharpoonplus: \"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z\",\n rightharpoondown: \"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z\",\n rightharpoondownplus: \"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\\nm0-194v40h400000v-40zm0 0v40h400000v-40z\",\n righthook: \"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z\",\n rightlinesegment: \"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z\",\n rightToFrom: \"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z\",\n // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular\n twoheadleftarrow: \"M0 167c68 40\\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z\",\n twoheadrightarrow: \"M400000 167\\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z\",\n // tilde1 is a modified version of a glyph from the MnSymbol package\n tilde1: \"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\\n-68.267.847-113-73.952-191-73.952z\",\n // ditto tilde2, tilde3, & tilde4\n tilde2: \"M344 55.266c-142 0-300.638 81.316-311.5 86.418\\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z\",\n tilde3: \"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\\n -338 0-409-156.573-744-156.573z\",\n tilde4: \"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\\n -175.236-744-175.236z\",\n // vec is from glyph U+20D7 in font KaTeX Main\n vec: \"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\\nc-16-25.333-24-45-24-59z\",\n // widehat1 is a modified version of a glyph from the MnSymbol package\n widehat1: \"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z\",\n // ditto widehat2, widehat3, & widehat4\n widehat2: \"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n widehat3: \"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n widehat4: \"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n // widecheck paths are all inverted versions of widehat\n widecheck1: \"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z\",\n widecheck2: \"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n widecheck3: \"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n widecheck4: \"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n // The next ten paths support reaction arrows from the mhchem package.\n // Arrows for \\ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX\n // baraboveleftarrow is mostly from glyph U+2190 in font KaTeX Main\n baraboveleftarrow: \"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z\",\n // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main\n rightarrowabovebar: \"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z\",\n // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end.\n // Ref from mhchem.sty: \\rlap{\\raisebox{-.22ex}{$\\kern0.5em\n baraboveshortleftharpoon: \"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z\",\n rightharpoonaboveshortbar: \"M0,241 l0,40c399126,0,399993,0,399993,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z\",\n shortbaraboveleftharpoon: \"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z\",\n shortrightharpoonabovebar: \"M53,241l0,40c398570,0,399437,0,399437,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z\"\n};\nvar tallDelim = function tallDelim(label, midHeight) {\n switch (label) {\n case \"lbrack\":\n return \"M403 1759 V84 H666 V0 H319 V1759 v\" + midHeight + \" v1759 h347 v-84\\nH403z M403 1759 V0 H319 V1759 v\" + midHeight + \" v1759 h84z\";\n\n case \"rbrack\":\n return \"M347 1759 V0 H0 V84 H263 V1759 v\" + midHeight + \" v1759 H0 v84 H347z\\nM347 1759 V0 H263 V1759 v\" + midHeight + \" v1759 h84z\";\n\n case \"vert\":\n return \"M145 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v\" + midHeight + \" v585 h43z\";\n\n case \"doublevert\":\n return \"M145 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v\" + midHeight + \" v585 h43z\\nM367 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v\" + midHeight + \" v585 h43z\";\n\n case \"lfloor\":\n return \"M319 602 V0 H403 V602 v\" + midHeight + \" v1715 h263 v84 H319z\\nMM319 602 V0 H403 V602 v\" + midHeight + \" v1715 H319z\";\n\n case \"rfloor\":\n return \"M319 602 V0 H403 V602 v\" + midHeight + \" v1799 H0 v-84 H319z\\nMM319 602 V0 H403 V602 v\" + midHeight + \" v1715 H319z\";\n\n case \"lceil\":\n return \"M403 1759 V84 H666 V0 H319 V1759 v\" + midHeight + \" v602 h84z\\nM403 1759 V0 H319 V1759 v\" + midHeight + \" v602 h84z\";\n\n case \"rceil\":\n return \"M347 1759 V0 H0 V84 H263 V1759 v\" + midHeight + \" v602 h84z\\nM347 1759 V0 h-84 V1759 v\" + midHeight + \" v602 h84z\";\n\n case \"lparen\":\n return \"M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\\n-36,557 l0,\" + (midHeight + 84) + \"c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\\nl0,-\" + (midHeight + 92) + \"c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z\";\n\n case \"rparen\":\n return \"M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,\" + (midHeight + 9) + \"\\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\\nl0,-\" + (midHeight + 144) + \"c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z\";\n\n default:\n // We should not ever get here.\n throw new Error(\"Unknown stretchy delimiter.\");\n }\n};\n\n// To ensure that all nodes have compatible signatures for these methods.\n\n/**\n * This node represents a document fragment, which contains elements, but when\n * placed into the DOM doesn't have any representation itself. It only contains\n * children and doesn't have any DOM node properties.\n */\nclass DocumentFragment {\n // Never used; needed for satisfying interface.\n constructor(children) {\n this.children = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n this.children = children;\n this.classes = [];\n this.height = 0;\n this.depth = 0;\n this.maxFontSize = 0;\n this.style = {};\n }\n\n hasClass(className) {\n return this.classes.includes(className);\n }\n /** Convert the fragment into a node. */\n\n\n toNode() {\n var frag = document.createDocumentFragment();\n\n for (var i = 0; i < this.children.length; i++) {\n frag.appendChild(this.children[i].toNode());\n }\n\n return frag;\n }\n /** Convert the fragment into HTML markup. */\n\n\n toMarkup() {\n var markup = \"\"; // Simply concatenate the markup for the children together.\n\n for (var i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n return markup;\n }\n /**\n * Converts the math node into a string, similar to innerText. Applies to\n * MathDomNode's only.\n */\n\n\n toText() {\n // To avoid this, we would subclass documentFragment separately for\n // MathML, but polyfills for subclassing is expensive per PR 1469.\n // $FlowFixMe: Only works for ChildType = MathDomNode.\n var toText = child => child.toText();\n\n return this.children.map(toText).join(\"\");\n }\n\n}\n\n// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY.\nvar fontMetricsData = {\n \"AMS-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"65\": [0, 0.68889, 0, 0, 0.72222],\n \"66\": [0, 0.68889, 0, 0, 0.66667],\n \"67\": [0, 0.68889, 0, 0, 0.72222],\n \"68\": [0, 0.68889, 0, 0, 0.72222],\n \"69\": [0, 0.68889, 0, 0, 0.66667],\n \"70\": [0, 0.68889, 0, 0, 0.61111],\n \"71\": [0, 0.68889, 0, 0, 0.77778],\n \"72\": [0, 0.68889, 0, 0, 0.77778],\n \"73\": [0, 0.68889, 0, 0, 0.38889],\n \"74\": [0.16667, 0.68889, 0, 0, 0.5],\n \"75\": [0, 0.68889, 0, 0, 0.77778],\n \"76\": [0, 0.68889, 0, 0, 0.66667],\n \"77\": [0, 0.68889, 0, 0, 0.94445],\n \"78\": [0, 0.68889, 0, 0, 0.72222],\n \"79\": [0.16667, 0.68889, 0, 0, 0.77778],\n \"80\": [0, 0.68889, 0, 0, 0.61111],\n \"81\": [0.16667, 0.68889, 0, 0, 0.77778],\n \"82\": [0, 0.68889, 0, 0, 0.72222],\n \"83\": [0, 0.68889, 0, 0, 0.55556],\n \"84\": [0, 0.68889, 0, 0, 0.66667],\n \"85\": [0, 0.68889, 0, 0, 0.72222],\n \"86\": [0, 0.68889, 0, 0, 0.72222],\n \"87\": [0, 0.68889, 0, 0, 1.0],\n \"88\": [0, 0.68889, 0, 0, 0.72222],\n \"89\": [0, 0.68889, 0, 0, 0.72222],\n \"90\": [0, 0.68889, 0, 0, 0.66667],\n \"107\": [0, 0.68889, 0, 0, 0.55556],\n \"160\": [0, 0, 0, 0, 0.25],\n \"165\": [0, 0.675, 0.025, 0, 0.75],\n \"174\": [0.15559, 0.69224, 0, 0, 0.94666],\n \"240\": [0, 0.68889, 0, 0, 0.55556],\n \"295\": [0, 0.68889, 0, 0, 0.54028],\n \"710\": [0, 0.825, 0, 0, 2.33334],\n \"732\": [0, 0.9, 0, 0, 2.33334],\n \"770\": [0, 0.825, 0, 0, 2.33334],\n \"771\": [0, 0.9, 0, 0, 2.33334],\n \"989\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"1008\": [0, 0.43056, 0.04028, 0, 0.66667],\n \"8245\": [0, 0.54986, 0, 0, 0.275],\n \"8463\": [0, 0.68889, 0, 0, 0.54028],\n \"8487\": [0, 0.68889, 0, 0, 0.72222],\n \"8498\": [0, 0.68889, 0, 0, 0.55556],\n \"8502\": [0, 0.68889, 0, 0, 0.66667],\n \"8503\": [0, 0.68889, 0, 0, 0.44445],\n \"8504\": [0, 0.68889, 0, 0, 0.66667],\n \"8513\": [0, 0.68889, 0, 0, 0.63889],\n \"8592\": [-0.03598, 0.46402, 0, 0, 0.5],\n \"8594\": [-0.03598, 0.46402, 0, 0, 0.5],\n \"8602\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8603\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8606\": [0.01354, 0.52239, 0, 0, 1.0],\n \"8608\": [0.01354, 0.52239, 0, 0, 1.0],\n \"8610\": [0.01354, 0.52239, 0, 0, 1.11111],\n \"8611\": [0.01354, 0.52239, 0, 0, 1.11111],\n \"8619\": [0, 0.54986, 0, 0, 1.0],\n \"8620\": [0, 0.54986, 0, 0, 1.0],\n \"8621\": [-0.13313, 0.37788, 0, 0, 1.38889],\n \"8622\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8624\": [0, 0.69224, 0, 0, 0.5],\n \"8625\": [0, 0.69224, 0, 0, 0.5],\n \"8630\": [0, 0.43056, 0, 0, 1.0],\n \"8631\": [0, 0.43056, 0, 0, 1.0],\n \"8634\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8635\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8638\": [0.19444, 0.69224, 0, 0, 0.41667],\n \"8639\": [0.19444, 0.69224, 0, 0, 0.41667],\n \"8642\": [0.19444, 0.69224, 0, 0, 0.41667],\n \"8643\": [0.19444, 0.69224, 0, 0, 0.41667],\n \"8644\": [0.1808, 0.675, 0, 0, 1.0],\n \"8646\": [0.1808, 0.675, 0, 0, 1.0],\n \"8647\": [0.1808, 0.675, 0, 0, 1.0],\n \"8648\": [0.19444, 0.69224, 0, 0, 0.83334],\n \"8649\": [0.1808, 0.675, 0, 0, 1.0],\n \"8650\": [0.19444, 0.69224, 0, 0, 0.83334],\n \"8651\": [0.01354, 0.52239, 0, 0, 1.0],\n \"8652\": [0.01354, 0.52239, 0, 0, 1.0],\n \"8653\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8654\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8655\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8666\": [0.13667, 0.63667, 0, 0, 1.0],\n \"8667\": [0.13667, 0.63667, 0, 0, 1.0],\n \"8669\": [-0.13313, 0.37788, 0, 0, 1.0],\n \"8672\": [-0.064, 0.437, 0, 0, 1.334],\n \"8674\": [-0.064, 0.437, 0, 0, 1.334],\n \"8705\": [0, 0.825, 0, 0, 0.5],\n \"8708\": [0, 0.68889, 0, 0, 0.55556],\n \"8709\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8717\": [0, 0.43056, 0, 0, 0.42917],\n \"8722\": [-0.03598, 0.46402, 0, 0, 0.5],\n \"8724\": [0.08198, 0.69224, 0, 0, 0.77778],\n \"8726\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8733\": [0, 0.69224, 0, 0, 0.77778],\n \"8736\": [0, 0.69224, 0, 0, 0.72222],\n \"8737\": [0, 0.69224, 0, 0, 0.72222],\n \"8738\": [0.03517, 0.52239, 0, 0, 0.72222],\n \"8739\": [0.08167, 0.58167, 0, 0, 0.22222],\n \"8740\": [0.25142, 0.74111, 0, 0, 0.27778],\n \"8741\": [0.08167, 0.58167, 0, 0, 0.38889],\n \"8742\": [0.25142, 0.74111, 0, 0, 0.5],\n \"8756\": [0, 0.69224, 0, 0, 0.66667],\n \"8757\": [0, 0.69224, 0, 0, 0.66667],\n \"8764\": [-0.13313, 0.36687, 0, 0, 0.77778],\n \"8765\": [-0.13313, 0.37788, 0, 0, 0.77778],\n \"8769\": [-0.13313, 0.36687, 0, 0, 0.77778],\n \"8770\": [-0.03625, 0.46375, 0, 0, 0.77778],\n \"8774\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8776\": [-0.01688, 0.48312, 0, 0, 0.77778],\n \"8778\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8782\": [0.06062, 0.54986, 0, 0, 0.77778],\n \"8783\": [0.06062, 0.54986, 0, 0, 0.77778],\n \"8785\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8786\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8787\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8790\": [0, 0.69224, 0, 0, 0.77778],\n \"8791\": [0.22958, 0.72958, 0, 0, 0.77778],\n \"8796\": [0.08198, 0.91667, 0, 0, 0.77778],\n \"8806\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"8807\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"8808\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"8809\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"8812\": [0.25583, 0.75583, 0, 0, 0.5],\n \"8814\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8815\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8816\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8817\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8818\": [0.22958, 0.72958, 0, 0, 0.77778],\n \"8819\": [0.22958, 0.72958, 0, 0, 0.77778],\n \"8822\": [0.1808, 0.675, 0, 0, 0.77778],\n \"8823\": [0.1808, 0.675, 0, 0, 0.77778],\n \"8828\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8829\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8830\": [0.22958, 0.72958, 0, 0, 0.77778],\n \"8831\": [0.22958, 0.72958, 0, 0, 0.77778],\n \"8832\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8833\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8840\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8841\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8842\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8843\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8847\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8848\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8858\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8859\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8861\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8862\": [0, 0.675, 0, 0, 0.77778],\n \"8863\": [0, 0.675, 0, 0, 0.77778],\n \"8864\": [0, 0.675, 0, 0, 0.77778],\n \"8865\": [0, 0.675, 0, 0, 0.77778],\n \"8872\": [0, 0.69224, 0, 0, 0.61111],\n \"8873\": [0, 0.69224, 0, 0, 0.72222],\n \"8874\": [0, 0.69224, 0, 0, 0.88889],\n \"8876\": [0, 0.68889, 0, 0, 0.61111],\n \"8877\": [0, 0.68889, 0, 0, 0.61111],\n \"8878\": [0, 0.68889, 0, 0, 0.72222],\n \"8879\": [0, 0.68889, 0, 0, 0.72222],\n \"8882\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8883\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8884\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8885\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8888\": [0, 0.54986, 0, 0, 1.11111],\n \"8890\": [0.19444, 0.43056, 0, 0, 0.55556],\n \"8891\": [0.19444, 0.69224, 0, 0, 0.61111],\n \"8892\": [0.19444, 0.69224, 0, 0, 0.61111],\n \"8901\": [0, 0.54986, 0, 0, 0.27778],\n \"8903\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8905\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8906\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8907\": [0, 0.69224, 0, 0, 0.77778],\n \"8908\": [0, 0.69224, 0, 0, 0.77778],\n \"8909\": [-0.03598, 0.46402, 0, 0, 0.77778],\n \"8910\": [0, 0.54986, 0, 0, 0.76042],\n \"8911\": [0, 0.54986, 0, 0, 0.76042],\n \"8912\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8913\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8914\": [0, 0.54986, 0, 0, 0.66667],\n \"8915\": [0, 0.54986, 0, 0, 0.66667],\n \"8916\": [0, 0.69224, 0, 0, 0.66667],\n \"8918\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8919\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8920\": [0.03517, 0.54986, 0, 0, 1.33334],\n \"8921\": [0.03517, 0.54986, 0, 0, 1.33334],\n \"8922\": [0.38569, 0.88569, 0, 0, 0.77778],\n \"8923\": [0.38569, 0.88569, 0, 0, 0.77778],\n \"8926\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8927\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8928\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8929\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8934\": [0.23222, 0.74111, 0, 0, 0.77778],\n \"8935\": [0.23222, 0.74111, 0, 0, 0.77778],\n \"8936\": [0.23222, 0.74111, 0, 0, 0.77778],\n \"8937\": [0.23222, 0.74111, 0, 0, 0.77778],\n \"8938\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8939\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8940\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8941\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8994\": [0.19444, 0.69224, 0, 0, 0.77778],\n \"8995\": [0.19444, 0.69224, 0, 0, 0.77778],\n \"9416\": [0.15559, 0.69224, 0, 0, 0.90222],\n \"9484\": [0, 0.69224, 0, 0, 0.5],\n \"9488\": [0, 0.69224, 0, 0, 0.5],\n \"9492\": [0, 0.37788, 0, 0, 0.5],\n \"9496\": [0, 0.37788, 0, 0, 0.5],\n \"9585\": [0.19444, 0.68889, 0, 0, 0.88889],\n \"9586\": [0.19444, 0.74111, 0, 0, 0.88889],\n \"9632\": [0, 0.675, 0, 0, 0.77778],\n \"9633\": [0, 0.675, 0, 0, 0.77778],\n \"9650\": [0, 0.54986, 0, 0, 0.72222],\n \"9651\": [0, 0.54986, 0, 0, 0.72222],\n \"9654\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"9660\": [0, 0.54986, 0, 0, 0.72222],\n \"9661\": [0, 0.54986, 0, 0, 0.72222],\n \"9664\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"9674\": [0.11111, 0.69224, 0, 0, 0.66667],\n \"9733\": [0.19444, 0.69224, 0, 0, 0.94445],\n \"10003\": [0, 0.69224, 0, 0, 0.83334],\n \"10016\": [0, 0.69224, 0, 0, 0.83334],\n \"10731\": [0.11111, 0.69224, 0, 0, 0.66667],\n \"10846\": [0.19444, 0.75583, 0, 0, 0.61111],\n \"10877\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"10878\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"10885\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"10886\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"10887\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"10888\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"10889\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10890\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10891\": [0.48256, 0.98256, 0, 0, 0.77778],\n \"10892\": [0.48256, 0.98256, 0, 0, 0.77778],\n \"10901\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"10902\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"10933\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"10934\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"10935\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10936\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10937\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10938\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10949\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"10950\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"10955\": [0.28481, 0.79383, 0, 0, 0.77778],\n \"10956\": [0.28481, 0.79383, 0, 0, 0.77778],\n \"57350\": [0.08167, 0.58167, 0, 0, 0.22222],\n \"57351\": [0.08167, 0.58167, 0, 0, 0.38889],\n \"57352\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"57353\": [0, 0.43056, 0.04028, 0, 0.66667],\n \"57356\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57357\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57358\": [0.41951, 0.91951, 0, 0, 0.77778],\n \"57359\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"57360\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"57361\": [0.41951, 0.91951, 0, 0, 0.77778],\n \"57366\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57367\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57368\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57369\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57370\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"57371\": [0.13597, 0.63597, 0, 0, 0.77778]\n },\n \"Caligraphic-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"65\": [0, 0.68333, 0, 0.19445, 0.79847],\n \"66\": [0, 0.68333, 0.03041, 0.13889, 0.65681],\n \"67\": [0, 0.68333, 0.05834, 0.13889, 0.52653],\n \"68\": [0, 0.68333, 0.02778, 0.08334, 0.77139],\n \"69\": [0, 0.68333, 0.08944, 0.11111, 0.52778],\n \"70\": [0, 0.68333, 0.09931, 0.11111, 0.71875],\n \"71\": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487],\n \"72\": [0, 0.68333, 0.00965, 0.11111, 0.84452],\n \"73\": [0, 0.68333, 0.07382, 0, 0.54452],\n \"74\": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778],\n \"75\": [0, 0.68333, 0.01445, 0.05556, 0.76195],\n \"76\": [0, 0.68333, 0, 0.13889, 0.68972],\n \"77\": [0, 0.68333, 0, 0.13889, 1.2009],\n \"78\": [0, 0.68333, 0.14736, 0.08334, 0.82049],\n \"79\": [0, 0.68333, 0.02778, 0.11111, 0.79611],\n \"80\": [0, 0.68333, 0.08222, 0.08334, 0.69556],\n \"81\": [0.09722, 0.68333, 0, 0.11111, 0.81667],\n \"82\": [0, 0.68333, 0, 0.08334, 0.8475],\n \"83\": [0, 0.68333, 0.075, 0.13889, 0.60556],\n \"84\": [0, 0.68333, 0.25417, 0, 0.54464],\n \"85\": [0, 0.68333, 0.09931, 0.08334, 0.62583],\n \"86\": [0, 0.68333, 0.08222, 0, 0.61278],\n \"87\": [0, 0.68333, 0.08222, 0.08334, 0.98778],\n \"88\": [0, 0.68333, 0.14643, 0.13889, 0.7133],\n \"89\": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834],\n \"90\": [0, 0.68333, 0.07944, 0.13889, 0.72473],\n \"160\": [0, 0, 0, 0, 0.25]\n },\n \"Fraktur-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69141, 0, 0, 0.29574],\n \"34\": [0, 0.69141, 0, 0, 0.21471],\n \"38\": [0, 0.69141, 0, 0, 0.73786],\n \"39\": [0, 0.69141, 0, 0, 0.21201],\n \"40\": [0.24982, 0.74947, 0, 0, 0.38865],\n \"41\": [0.24982, 0.74947, 0, 0, 0.38865],\n \"42\": [0, 0.62119, 0, 0, 0.27764],\n \"43\": [0.08319, 0.58283, 0, 0, 0.75623],\n \"44\": [0, 0.10803, 0, 0, 0.27764],\n \"45\": [0.08319, 0.58283, 0, 0, 0.75623],\n \"46\": [0, 0.10803, 0, 0, 0.27764],\n \"47\": [0.24982, 0.74947, 0, 0, 0.50181],\n \"48\": [0, 0.47534, 0, 0, 0.50181],\n \"49\": [0, 0.47534, 0, 0, 0.50181],\n \"50\": [0, 0.47534, 0, 0, 0.50181],\n \"51\": [0.18906, 0.47534, 0, 0, 0.50181],\n \"52\": [0.18906, 0.47534, 0, 0, 0.50181],\n \"53\": [0.18906, 0.47534, 0, 0, 0.50181],\n \"54\": [0, 0.69141, 0, 0, 0.50181],\n \"55\": [0.18906, 0.47534, 0, 0, 0.50181],\n \"56\": [0, 0.69141, 0, 0, 0.50181],\n \"57\": [0.18906, 0.47534, 0, 0, 0.50181],\n \"58\": [0, 0.47534, 0, 0, 0.21606],\n \"59\": [0.12604, 0.47534, 0, 0, 0.21606],\n \"61\": [-0.13099, 0.36866, 0, 0, 0.75623],\n \"63\": [0, 0.69141, 0, 0, 0.36245],\n \"65\": [0, 0.69141, 0, 0, 0.7176],\n \"66\": [0, 0.69141, 0, 0, 0.88397],\n \"67\": [0, 0.69141, 0, 0, 0.61254],\n \"68\": [0, 0.69141, 0, 0, 0.83158],\n \"69\": [0, 0.69141, 0, 0, 0.66278],\n \"70\": [0.12604, 0.69141, 0, 0, 0.61119],\n \"71\": [0, 0.69141, 0, 0, 0.78539],\n \"72\": [0.06302, 0.69141, 0, 0, 0.7203],\n \"73\": [0, 0.69141, 0, 0, 0.55448],\n \"74\": [0.12604, 0.69141, 0, 0, 0.55231],\n \"75\": [0, 0.69141, 0, 0, 0.66845],\n \"76\": [0, 0.69141, 0, 0, 0.66602],\n \"77\": [0, 0.69141, 0, 0, 1.04953],\n \"78\": [0, 0.69141, 0, 0, 0.83212],\n \"79\": [0, 0.69141, 0, 0, 0.82699],\n \"80\": [0.18906, 0.69141, 0, 0, 0.82753],\n \"81\": [0.03781, 0.69141, 0, 0, 0.82699],\n \"82\": [0, 0.69141, 0, 0, 0.82807],\n \"83\": [0, 0.69141, 0, 0, 0.82861],\n \"84\": [0, 0.69141, 0, 0, 0.66899],\n \"85\": [0, 0.69141, 0, 0, 0.64576],\n \"86\": [0, 0.69141, 0, 0, 0.83131],\n \"87\": [0, 0.69141, 0, 0, 1.04602],\n \"88\": [0, 0.69141, 0, 0, 0.71922],\n \"89\": [0.18906, 0.69141, 0, 0, 0.83293],\n \"90\": [0.12604, 0.69141, 0, 0, 0.60201],\n \"91\": [0.24982, 0.74947, 0, 0, 0.27764],\n \"93\": [0.24982, 0.74947, 0, 0, 0.27764],\n \"94\": [0, 0.69141, 0, 0, 0.49965],\n \"97\": [0, 0.47534, 0, 0, 0.50046],\n \"98\": [0, 0.69141, 0, 0, 0.51315],\n \"99\": [0, 0.47534, 0, 0, 0.38946],\n \"100\": [0, 0.62119, 0, 0, 0.49857],\n \"101\": [0, 0.47534, 0, 0, 0.40053],\n \"102\": [0.18906, 0.69141, 0, 0, 0.32626],\n \"103\": [0.18906, 0.47534, 0, 0, 0.5037],\n \"104\": [0.18906, 0.69141, 0, 0, 0.52126],\n \"105\": [0, 0.69141, 0, 0, 0.27899],\n \"106\": [0, 0.69141, 0, 0, 0.28088],\n \"107\": [0, 0.69141, 0, 0, 0.38946],\n \"108\": [0, 0.69141, 0, 0, 0.27953],\n \"109\": [0, 0.47534, 0, 0, 0.76676],\n \"110\": [0, 0.47534, 0, 0, 0.52666],\n \"111\": [0, 0.47534, 0, 0, 0.48885],\n \"112\": [0.18906, 0.52396, 0, 0, 0.50046],\n \"113\": [0.18906, 0.47534, 0, 0, 0.48912],\n \"114\": [0, 0.47534, 0, 0, 0.38919],\n \"115\": [0, 0.47534, 0, 0, 0.44266],\n \"116\": [0, 0.62119, 0, 0, 0.33301],\n \"117\": [0, 0.47534, 0, 0, 0.5172],\n \"118\": [0, 0.52396, 0, 0, 0.5118],\n \"119\": [0, 0.52396, 0, 0, 0.77351],\n \"120\": [0.18906, 0.47534, 0, 0, 0.38865],\n \"121\": [0.18906, 0.47534, 0, 0, 0.49884],\n \"122\": [0.18906, 0.47534, 0, 0, 0.39054],\n \"160\": [0, 0, 0, 0, 0.25],\n \"8216\": [0, 0.69141, 0, 0, 0.21471],\n \"8217\": [0, 0.69141, 0, 0, 0.21471],\n \"58112\": [0, 0.62119, 0, 0, 0.49749],\n \"58113\": [0, 0.62119, 0, 0, 0.4983],\n \"58114\": [0.18906, 0.69141, 0, 0, 0.33328],\n \"58115\": [0.18906, 0.69141, 0, 0, 0.32923],\n \"58116\": [0.18906, 0.47534, 0, 0, 0.50343],\n \"58117\": [0, 0.69141, 0, 0, 0.33301],\n \"58118\": [0, 0.62119, 0, 0, 0.33409],\n \"58119\": [0, 0.47534, 0, 0, 0.50073]\n },\n \"Main-Bold\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0, 0, 0.35],\n \"34\": [0, 0.69444, 0, 0, 0.60278],\n \"35\": [0.19444, 0.69444, 0, 0, 0.95833],\n \"36\": [0.05556, 0.75, 0, 0, 0.575],\n \"37\": [0.05556, 0.75, 0, 0, 0.95833],\n \"38\": [0, 0.69444, 0, 0, 0.89444],\n \"39\": [0, 0.69444, 0, 0, 0.31944],\n \"40\": [0.25, 0.75, 0, 0, 0.44722],\n \"41\": [0.25, 0.75, 0, 0, 0.44722],\n \"42\": [0, 0.75, 0, 0, 0.575],\n \"43\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"44\": [0.19444, 0.15556, 0, 0, 0.31944],\n \"45\": [0, 0.44444, 0, 0, 0.38333],\n \"46\": [0, 0.15556, 0, 0, 0.31944],\n \"47\": [0.25, 0.75, 0, 0, 0.575],\n \"48\": [0, 0.64444, 0, 0, 0.575],\n \"49\": [0, 0.64444, 0, 0, 0.575],\n \"50\": [0, 0.64444, 0, 0, 0.575],\n \"51\": [0, 0.64444, 0, 0, 0.575],\n \"52\": [0, 0.64444, 0, 0, 0.575],\n \"53\": [0, 0.64444, 0, 0, 0.575],\n \"54\": [0, 0.64444, 0, 0, 0.575],\n \"55\": [0, 0.64444, 0, 0, 0.575],\n \"56\": [0, 0.64444, 0, 0, 0.575],\n \"57\": [0, 0.64444, 0, 0, 0.575],\n \"58\": [0, 0.44444, 0, 0, 0.31944],\n \"59\": [0.19444, 0.44444, 0, 0, 0.31944],\n \"60\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"61\": [-0.10889, 0.39111, 0, 0, 0.89444],\n \"62\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"63\": [0, 0.69444, 0, 0, 0.54305],\n \"64\": [0, 0.69444, 0, 0, 0.89444],\n \"65\": [0, 0.68611, 0, 0, 0.86944],\n \"66\": [0, 0.68611, 0, 0, 0.81805],\n \"67\": [0, 0.68611, 0, 0, 0.83055],\n \"68\": [0, 0.68611, 0, 0, 0.88194],\n \"69\": [0, 0.68611, 0, 0, 0.75555],\n \"70\": [0, 0.68611, 0, 0, 0.72361],\n \"71\": [0, 0.68611, 0, 0, 0.90416],\n \"72\": [0, 0.68611, 0, 0, 0.9],\n \"73\": [0, 0.68611, 0, 0, 0.43611],\n \"74\": [0, 0.68611, 0, 0, 0.59444],\n \"75\": [0, 0.68611, 0, 0, 0.90138],\n \"76\": [0, 0.68611, 0, 0, 0.69166],\n \"77\": [0, 0.68611, 0, 0, 1.09166],\n \"78\": [0, 0.68611, 0, 0, 0.9],\n \"79\": [0, 0.68611, 0, 0, 0.86388],\n \"80\": [0, 0.68611, 0, 0, 0.78611],\n \"81\": [0.19444, 0.68611, 0, 0, 0.86388],\n \"82\": [0, 0.68611, 0, 0, 0.8625],\n \"83\": [0, 0.68611, 0, 0, 0.63889],\n \"84\": [0, 0.68611, 0, 0, 0.8],\n \"85\": [0, 0.68611, 0, 0, 0.88472],\n \"86\": [0, 0.68611, 0.01597, 0, 0.86944],\n \"87\": [0, 0.68611, 0.01597, 0, 1.18888],\n \"88\": [0, 0.68611, 0, 0, 0.86944],\n \"89\": [0, 0.68611, 0.02875, 0, 0.86944],\n \"90\": [0, 0.68611, 0, 0, 0.70277],\n \"91\": [0.25, 0.75, 0, 0, 0.31944],\n \"92\": [0.25, 0.75, 0, 0, 0.575],\n \"93\": [0.25, 0.75, 0, 0, 0.31944],\n \"94\": [0, 0.69444, 0, 0, 0.575],\n \"95\": [0.31, 0.13444, 0.03194, 0, 0.575],\n \"97\": [0, 0.44444, 0, 0, 0.55902],\n \"98\": [0, 0.69444, 0, 0, 0.63889],\n \"99\": [0, 0.44444, 0, 0, 0.51111],\n \"100\": [0, 0.69444, 0, 0, 0.63889],\n \"101\": [0, 0.44444, 0, 0, 0.52708],\n \"102\": [0, 0.69444, 0.10903, 0, 0.35139],\n \"103\": [0.19444, 0.44444, 0.01597, 0, 0.575],\n \"104\": [0, 0.69444, 0, 0, 0.63889],\n \"105\": [0, 0.69444, 0, 0, 0.31944],\n \"106\": [0.19444, 0.69444, 0, 0, 0.35139],\n \"107\": [0, 0.69444, 0, 0, 0.60694],\n \"108\": [0, 0.69444, 0, 0, 0.31944],\n \"109\": [0, 0.44444, 0, 0, 0.95833],\n \"110\": [0, 0.44444, 0, 0, 0.63889],\n \"111\": [0, 0.44444, 0, 0, 0.575],\n \"112\": [0.19444, 0.44444, 0, 0, 0.63889],\n \"113\": [0.19444, 0.44444, 0, 0, 0.60694],\n \"114\": [0, 0.44444, 0, 0, 0.47361],\n \"115\": [0, 0.44444, 0, 0, 0.45361],\n \"116\": [0, 0.63492, 0, 0, 0.44722],\n \"117\": [0, 0.44444, 0, 0, 0.63889],\n \"118\": [0, 0.44444, 0.01597, 0, 0.60694],\n \"119\": [0, 0.44444, 0.01597, 0, 0.83055],\n \"120\": [0, 0.44444, 0, 0, 0.60694],\n \"121\": [0.19444, 0.44444, 0.01597, 0, 0.60694],\n \"122\": [0, 0.44444, 0, 0, 0.51111],\n \"123\": [0.25, 0.75, 0, 0, 0.575],\n \"124\": [0.25, 0.75, 0, 0, 0.31944],\n \"125\": [0.25, 0.75, 0, 0, 0.575],\n \"126\": [0.35, 0.34444, 0, 0, 0.575],\n \"160\": [0, 0, 0, 0, 0.25],\n \"163\": [0, 0.69444, 0, 0, 0.86853],\n \"168\": [0, 0.69444, 0, 0, 0.575],\n \"172\": [0, 0.44444, 0, 0, 0.76666],\n \"176\": [0, 0.69444, 0, 0, 0.86944],\n \"177\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"184\": [0.17014, 0, 0, 0, 0.51111],\n \"198\": [0, 0.68611, 0, 0, 1.04166],\n \"215\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"216\": [0.04861, 0.73472, 0, 0, 0.89444],\n \"223\": [0, 0.69444, 0, 0, 0.59722],\n \"230\": [0, 0.44444, 0, 0, 0.83055],\n \"247\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"248\": [0.09722, 0.54167, 0, 0, 0.575],\n \"305\": [0, 0.44444, 0, 0, 0.31944],\n \"338\": [0, 0.68611, 0, 0, 1.16944],\n \"339\": [0, 0.44444, 0, 0, 0.89444],\n \"567\": [0.19444, 0.44444, 0, 0, 0.35139],\n \"710\": [0, 0.69444, 0, 0, 0.575],\n \"711\": [0, 0.63194, 0, 0, 0.575],\n \"713\": [0, 0.59611, 0, 0, 0.575],\n \"714\": [0, 0.69444, 0, 0, 0.575],\n \"715\": [0, 0.69444, 0, 0, 0.575],\n \"728\": [0, 0.69444, 0, 0, 0.575],\n \"729\": [0, 0.69444, 0, 0, 0.31944],\n \"730\": [0, 0.69444, 0, 0, 0.86944],\n \"732\": [0, 0.69444, 0, 0, 0.575],\n \"733\": [0, 0.69444, 0, 0, 0.575],\n \"915\": [0, 0.68611, 0, 0, 0.69166],\n \"916\": [0, 0.68611, 0, 0, 0.95833],\n \"920\": [0, 0.68611, 0, 0, 0.89444],\n \"923\": [0, 0.68611, 0, 0, 0.80555],\n \"926\": [0, 0.68611, 0, 0, 0.76666],\n \"928\": [0, 0.68611, 0, 0, 0.9],\n \"931\": [0, 0.68611, 0, 0, 0.83055],\n \"933\": [0, 0.68611, 0, 0, 0.89444],\n \"934\": [0, 0.68611, 0, 0, 0.83055],\n \"936\": [0, 0.68611, 0, 0, 0.89444],\n \"937\": [0, 0.68611, 0, 0, 0.83055],\n \"8211\": [0, 0.44444, 0.03194, 0, 0.575],\n \"8212\": [0, 0.44444, 0.03194, 0, 1.14999],\n \"8216\": [0, 0.69444, 0, 0, 0.31944],\n \"8217\": [0, 0.69444, 0, 0, 0.31944],\n \"8220\": [0, 0.69444, 0, 0, 0.60278],\n \"8221\": [0, 0.69444, 0, 0, 0.60278],\n \"8224\": [0.19444, 0.69444, 0, 0, 0.51111],\n \"8225\": [0.19444, 0.69444, 0, 0, 0.51111],\n \"8242\": [0, 0.55556, 0, 0, 0.34444],\n \"8407\": [0, 0.72444, 0.15486, 0, 0.575],\n \"8463\": [0, 0.69444, 0, 0, 0.66759],\n \"8465\": [0, 0.69444, 0, 0, 0.83055],\n \"8467\": [0, 0.69444, 0, 0, 0.47361],\n \"8472\": [0.19444, 0.44444, 0, 0, 0.74027],\n \"8476\": [0, 0.69444, 0, 0, 0.83055],\n \"8501\": [0, 0.69444, 0, 0, 0.70277],\n \"8592\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8593\": [0.19444, 0.69444, 0, 0, 0.575],\n \"8594\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8595\": [0.19444, 0.69444, 0, 0, 0.575],\n \"8596\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8597\": [0.25, 0.75, 0, 0, 0.575],\n \"8598\": [0.19444, 0.69444, 0, 0, 1.14999],\n \"8599\": [0.19444, 0.69444, 0, 0, 1.14999],\n \"8600\": [0.19444, 0.69444, 0, 0, 1.14999],\n \"8601\": [0.19444, 0.69444, 0, 0, 1.14999],\n \"8636\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8637\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8640\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8641\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8656\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8657\": [0.19444, 0.69444, 0, 0, 0.70277],\n \"8658\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8659\": [0.19444, 0.69444, 0, 0, 0.70277],\n \"8660\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8661\": [0.25, 0.75, 0, 0, 0.70277],\n \"8704\": [0, 0.69444, 0, 0, 0.63889],\n \"8706\": [0, 0.69444, 0.06389, 0, 0.62847],\n \"8707\": [0, 0.69444, 0, 0, 0.63889],\n \"8709\": [0.05556, 0.75, 0, 0, 0.575],\n \"8711\": [0, 0.68611, 0, 0, 0.95833],\n \"8712\": [0.08556, 0.58556, 0, 0, 0.76666],\n \"8715\": [0.08556, 0.58556, 0, 0, 0.76666],\n \"8722\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8723\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8725\": [0.25, 0.75, 0, 0, 0.575],\n \"8726\": [0.25, 0.75, 0, 0, 0.575],\n \"8727\": [-0.02778, 0.47222, 0, 0, 0.575],\n \"8728\": [-0.02639, 0.47361, 0, 0, 0.575],\n \"8729\": [-0.02639, 0.47361, 0, 0, 0.575],\n \"8730\": [0.18, 0.82, 0, 0, 0.95833],\n \"8733\": [0, 0.44444, 0, 0, 0.89444],\n \"8734\": [0, 0.44444, 0, 0, 1.14999],\n \"8736\": [0, 0.69224, 0, 0, 0.72222],\n \"8739\": [0.25, 0.75, 0, 0, 0.31944],\n \"8741\": [0.25, 0.75, 0, 0, 0.575],\n \"8743\": [0, 0.55556, 0, 0, 0.76666],\n \"8744\": [0, 0.55556, 0, 0, 0.76666],\n \"8745\": [0, 0.55556, 0, 0, 0.76666],\n \"8746\": [0, 0.55556, 0, 0, 0.76666],\n \"8747\": [0.19444, 0.69444, 0.12778, 0, 0.56875],\n \"8764\": [-0.10889, 0.39111, 0, 0, 0.89444],\n \"8768\": [0.19444, 0.69444, 0, 0, 0.31944],\n \"8771\": [0.00222, 0.50222, 0, 0, 0.89444],\n \"8773\": [0.027, 0.638, 0, 0, 0.894],\n \"8776\": [0.02444, 0.52444, 0, 0, 0.89444],\n \"8781\": [0.00222, 0.50222, 0, 0, 0.89444],\n \"8801\": [0.00222, 0.50222, 0, 0, 0.89444],\n \"8804\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8805\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8810\": [0.08556, 0.58556, 0, 0, 1.14999],\n \"8811\": [0.08556, 0.58556, 0, 0, 1.14999],\n \"8826\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"8827\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"8834\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"8835\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"8838\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8839\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8846\": [0, 0.55556, 0, 0, 0.76666],\n \"8849\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8850\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8851\": [0, 0.55556, 0, 0, 0.76666],\n \"8852\": [0, 0.55556, 0, 0, 0.76666],\n \"8853\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8854\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8855\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8856\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8857\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8866\": [0, 0.69444, 0, 0, 0.70277],\n \"8867\": [0, 0.69444, 0, 0, 0.70277],\n \"8868\": [0, 0.69444, 0, 0, 0.89444],\n \"8869\": [0, 0.69444, 0, 0, 0.89444],\n \"8900\": [-0.02639, 0.47361, 0, 0, 0.575],\n \"8901\": [-0.02639, 0.47361, 0, 0, 0.31944],\n \"8902\": [-0.02778, 0.47222, 0, 0, 0.575],\n \"8968\": [0.25, 0.75, 0, 0, 0.51111],\n \"8969\": [0.25, 0.75, 0, 0, 0.51111],\n \"8970\": [0.25, 0.75, 0, 0, 0.51111],\n \"8971\": [0.25, 0.75, 0, 0, 0.51111],\n \"8994\": [-0.13889, 0.36111, 0, 0, 1.14999],\n \"8995\": [-0.13889, 0.36111, 0, 0, 1.14999],\n \"9651\": [0.19444, 0.69444, 0, 0, 1.02222],\n \"9657\": [-0.02778, 0.47222, 0, 0, 0.575],\n \"9661\": [0.19444, 0.69444, 0, 0, 1.02222],\n \"9667\": [-0.02778, 0.47222, 0, 0, 0.575],\n \"9711\": [0.19444, 0.69444, 0, 0, 1.14999],\n \"9824\": [0.12963, 0.69444, 0, 0, 0.89444],\n \"9825\": [0.12963, 0.69444, 0, 0, 0.89444],\n \"9826\": [0.12963, 0.69444, 0, 0, 0.89444],\n \"9827\": [0.12963, 0.69444, 0, 0, 0.89444],\n \"9837\": [0, 0.75, 0, 0, 0.44722],\n \"9838\": [0.19444, 0.69444, 0, 0, 0.44722],\n \"9839\": [0.19444, 0.69444, 0, 0, 0.44722],\n \"10216\": [0.25, 0.75, 0, 0, 0.44722],\n \"10217\": [0.25, 0.75, 0, 0, 0.44722],\n \"10815\": [0, 0.68611, 0, 0, 0.9],\n \"10927\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"10928\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"57376\": [0.19444, 0.69444, 0, 0, 0]\n },\n \"Main-BoldItalic\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0.11417, 0, 0.38611],\n \"34\": [0, 0.69444, 0.07939, 0, 0.62055],\n \"35\": [0.19444, 0.69444, 0.06833, 0, 0.94444],\n \"37\": [0.05556, 0.75, 0.12861, 0, 0.94444],\n \"38\": [0, 0.69444, 0.08528, 0, 0.88555],\n \"39\": [0, 0.69444, 0.12945, 0, 0.35555],\n \"40\": [0.25, 0.75, 0.15806, 0, 0.47333],\n \"41\": [0.25, 0.75, 0.03306, 0, 0.47333],\n \"42\": [0, 0.75, 0.14333, 0, 0.59111],\n \"43\": [0.10333, 0.60333, 0.03306, 0, 0.88555],\n \"44\": [0.19444, 0.14722, 0, 0, 0.35555],\n \"45\": [0, 0.44444, 0.02611, 0, 0.41444],\n \"46\": [0, 0.14722, 0, 0, 0.35555],\n \"47\": [0.25, 0.75, 0.15806, 0, 0.59111],\n \"48\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"49\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"50\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"51\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"52\": [0.19444, 0.64444, 0.13167, 0, 0.59111],\n \"53\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"54\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"55\": [0.19444, 0.64444, 0.13167, 0, 0.59111],\n \"56\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"57\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"58\": [0, 0.44444, 0.06695, 0, 0.35555],\n \"59\": [0.19444, 0.44444, 0.06695, 0, 0.35555],\n \"61\": [-0.10889, 0.39111, 0.06833, 0, 0.88555],\n \"63\": [0, 0.69444, 0.11472, 0, 0.59111],\n \"64\": [0, 0.69444, 0.09208, 0, 0.88555],\n \"65\": [0, 0.68611, 0, 0, 0.86555],\n \"66\": [0, 0.68611, 0.0992, 0, 0.81666],\n \"67\": [0, 0.68611, 0.14208, 0, 0.82666],\n \"68\": [0, 0.68611, 0.09062, 0, 0.87555],\n \"69\": [0, 0.68611, 0.11431, 0, 0.75666],\n \"70\": [0, 0.68611, 0.12903, 0, 0.72722],\n \"71\": [0, 0.68611, 0.07347, 0, 0.89527],\n \"72\": [0, 0.68611, 0.17208, 0, 0.8961],\n \"73\": [0, 0.68611, 0.15681, 0, 0.47166],\n \"74\": [0, 0.68611, 0.145, 0, 0.61055],\n \"75\": [0, 0.68611, 0.14208, 0, 0.89499],\n \"76\": [0, 0.68611, 0, 0, 0.69777],\n \"77\": [0, 0.68611, 0.17208, 0, 1.07277],\n \"78\": [0, 0.68611, 0.17208, 0, 0.8961],\n \"79\": [0, 0.68611, 0.09062, 0, 0.85499],\n \"80\": [0, 0.68611, 0.0992, 0, 0.78721],\n \"81\": [0.19444, 0.68611, 0.09062, 0, 0.85499],\n \"82\": [0, 0.68611, 0.02559, 0, 0.85944],\n \"83\": [0, 0.68611, 0.11264, 0, 0.64999],\n \"84\": [0, 0.68611, 0.12903, 0, 0.7961],\n \"85\": [0, 0.68611, 0.17208, 0, 0.88083],\n \"86\": [0, 0.68611, 0.18625, 0, 0.86555],\n \"87\": [0, 0.68611, 0.18625, 0, 1.15999],\n \"88\": [0, 0.68611, 0.15681, 0, 0.86555],\n \"89\": [0, 0.68611, 0.19803, 0, 0.86555],\n \"90\": [0, 0.68611, 0.14208, 0, 0.70888],\n \"91\": [0.25, 0.75, 0.1875, 0, 0.35611],\n \"93\": [0.25, 0.75, 0.09972, 0, 0.35611],\n \"94\": [0, 0.69444, 0.06709, 0, 0.59111],\n \"95\": [0.31, 0.13444, 0.09811, 0, 0.59111],\n \"97\": [0, 0.44444, 0.09426, 0, 0.59111],\n \"98\": [0, 0.69444, 0.07861, 0, 0.53222],\n \"99\": [0, 0.44444, 0.05222, 0, 0.53222],\n \"100\": [0, 0.69444, 0.10861, 0, 0.59111],\n \"101\": [0, 0.44444, 0.085, 0, 0.53222],\n \"102\": [0.19444, 0.69444, 0.21778, 0, 0.4],\n \"103\": [0.19444, 0.44444, 0.105, 0, 0.53222],\n \"104\": [0, 0.69444, 0.09426, 0, 0.59111],\n \"105\": [0, 0.69326, 0.11387, 0, 0.35555],\n \"106\": [0.19444, 0.69326, 0.1672, 0, 0.35555],\n \"107\": [0, 0.69444, 0.11111, 0, 0.53222],\n \"108\": [0, 0.69444, 0.10861, 0, 0.29666],\n \"109\": [0, 0.44444, 0.09426, 0, 0.94444],\n \"110\": [0, 0.44444, 0.09426, 0, 0.64999],\n \"111\": [0, 0.44444, 0.07861, 0, 0.59111],\n \"112\": [0.19444, 0.44444, 0.07861, 0, 0.59111],\n \"113\": [0.19444, 0.44444, 0.105, 0, 0.53222],\n \"114\": [0, 0.44444, 0.11111, 0, 0.50167],\n \"115\": [0, 0.44444, 0.08167, 0, 0.48694],\n \"116\": [0, 0.63492, 0.09639, 0, 0.385],\n \"117\": [0, 0.44444, 0.09426, 0, 0.62055],\n \"118\": [0, 0.44444, 0.11111, 0, 0.53222],\n \"119\": [0, 0.44444, 0.11111, 0, 0.76777],\n \"120\": [0, 0.44444, 0.12583, 0, 0.56055],\n \"121\": [0.19444, 0.44444, 0.105, 0, 0.56166],\n \"122\": [0, 0.44444, 0.13889, 0, 0.49055],\n \"126\": [0.35, 0.34444, 0.11472, 0, 0.59111],\n \"160\": [0, 0, 0, 0, 0.25],\n \"168\": [0, 0.69444, 0.11473, 0, 0.59111],\n \"176\": [0, 0.69444, 0, 0, 0.94888],\n \"184\": [0.17014, 0, 0, 0, 0.53222],\n \"198\": [0, 0.68611, 0.11431, 0, 1.02277],\n \"216\": [0.04861, 0.73472, 0.09062, 0, 0.88555],\n \"223\": [0.19444, 0.69444, 0.09736, 0, 0.665],\n \"230\": [0, 0.44444, 0.085, 0, 0.82666],\n \"248\": [0.09722, 0.54167, 0.09458, 0, 0.59111],\n \"305\": [0, 0.44444, 0.09426, 0, 0.35555],\n \"338\": [0, 0.68611, 0.11431, 0, 1.14054],\n \"339\": [0, 0.44444, 0.085, 0, 0.82666],\n \"567\": [0.19444, 0.44444, 0.04611, 0, 0.385],\n \"710\": [0, 0.69444, 0.06709, 0, 0.59111],\n \"711\": [0, 0.63194, 0.08271, 0, 0.59111],\n \"713\": [0, 0.59444, 0.10444, 0, 0.59111],\n \"714\": [0, 0.69444, 0.08528, 0, 0.59111],\n \"715\": [0, 0.69444, 0, 0, 0.59111],\n \"728\": [0, 0.69444, 0.10333, 0, 0.59111],\n \"729\": [0, 0.69444, 0.12945, 0, 0.35555],\n \"730\": [0, 0.69444, 0, 0, 0.94888],\n \"732\": [0, 0.69444, 0.11472, 0, 0.59111],\n \"733\": [0, 0.69444, 0.11472, 0, 0.59111],\n \"915\": [0, 0.68611, 0.12903, 0, 0.69777],\n \"916\": [0, 0.68611, 0, 0, 0.94444],\n \"920\": [0, 0.68611, 0.09062, 0, 0.88555],\n \"923\": [0, 0.68611, 0, 0, 0.80666],\n \"926\": [0, 0.68611, 0.15092, 0, 0.76777],\n \"928\": [0, 0.68611, 0.17208, 0, 0.8961],\n \"931\": [0, 0.68611, 0.11431, 0, 0.82666],\n \"933\": [0, 0.68611, 0.10778, 0, 0.88555],\n \"934\": [0, 0.68611, 0.05632, 0, 0.82666],\n \"936\": [0, 0.68611, 0.10778, 0, 0.88555],\n \"937\": [0, 0.68611, 0.0992, 0, 0.82666],\n \"8211\": [0, 0.44444, 0.09811, 0, 0.59111],\n \"8212\": [0, 0.44444, 0.09811, 0, 1.18221],\n \"8216\": [0, 0.69444, 0.12945, 0, 0.35555],\n \"8217\": [0, 0.69444, 0.12945, 0, 0.35555],\n \"8220\": [0, 0.69444, 0.16772, 0, 0.62055],\n \"8221\": [0, 0.69444, 0.07939, 0, 0.62055]\n },\n \"Main-Italic\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0.12417, 0, 0.30667],\n \"34\": [0, 0.69444, 0.06961, 0, 0.51444],\n \"35\": [0.19444, 0.69444, 0.06616, 0, 0.81777],\n \"37\": [0.05556, 0.75, 0.13639, 0, 0.81777],\n \"38\": [0, 0.69444, 0.09694, 0, 0.76666],\n \"39\": [0, 0.69444, 0.12417, 0, 0.30667],\n \"40\": [0.25, 0.75, 0.16194, 0, 0.40889],\n \"41\": [0.25, 0.75, 0.03694, 0, 0.40889],\n \"42\": [0, 0.75, 0.14917, 0, 0.51111],\n \"43\": [0.05667, 0.56167, 0.03694, 0, 0.76666],\n \"44\": [0.19444, 0.10556, 0, 0, 0.30667],\n \"45\": [0, 0.43056, 0.02826, 0, 0.35778],\n \"46\": [0, 0.10556, 0, 0, 0.30667],\n \"47\": [0.25, 0.75, 0.16194, 0, 0.51111],\n \"48\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"49\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"50\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"51\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"52\": [0.19444, 0.64444, 0.13556, 0, 0.51111],\n \"53\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"54\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"55\": [0.19444, 0.64444, 0.13556, 0, 0.51111],\n \"56\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"57\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"58\": [0, 0.43056, 0.0582, 0, 0.30667],\n \"59\": [0.19444, 0.43056, 0.0582, 0, 0.30667],\n \"61\": [-0.13313, 0.36687, 0.06616, 0, 0.76666],\n \"63\": [0, 0.69444, 0.1225, 0, 0.51111],\n \"64\": [0, 0.69444, 0.09597, 0, 0.76666],\n \"65\": [0, 0.68333, 0, 0, 0.74333],\n \"66\": [0, 0.68333, 0.10257, 0, 0.70389],\n \"67\": [0, 0.68333, 0.14528, 0, 0.71555],\n \"68\": [0, 0.68333, 0.09403, 0, 0.755],\n \"69\": [0, 0.68333, 0.12028, 0, 0.67833],\n \"70\": [0, 0.68333, 0.13305, 0, 0.65277],\n \"71\": [0, 0.68333, 0.08722, 0, 0.77361],\n \"72\": [0, 0.68333, 0.16389, 0, 0.74333],\n \"73\": [0, 0.68333, 0.15806, 0, 0.38555],\n \"74\": [0, 0.68333, 0.14028, 0, 0.525],\n \"75\": [0, 0.68333, 0.14528, 0, 0.76888],\n \"76\": [0, 0.68333, 0, 0, 0.62722],\n \"77\": [0, 0.68333, 0.16389, 0, 0.89666],\n \"78\": [0, 0.68333, 0.16389, 0, 0.74333],\n \"79\": [0, 0.68333, 0.09403, 0, 0.76666],\n \"80\": [0, 0.68333, 0.10257, 0, 0.67833],\n \"81\": [0.19444, 0.68333, 0.09403, 0, 0.76666],\n \"82\": [0, 0.68333, 0.03868, 0, 0.72944],\n \"83\": [0, 0.68333, 0.11972, 0, 0.56222],\n \"84\": [0, 0.68333, 0.13305, 0, 0.71555],\n \"85\": [0, 0.68333, 0.16389, 0, 0.74333],\n \"86\": [0, 0.68333, 0.18361, 0, 0.74333],\n \"87\": [0, 0.68333, 0.18361, 0, 0.99888],\n \"88\": [0, 0.68333, 0.15806, 0, 0.74333],\n \"89\": [0, 0.68333, 0.19383, 0, 0.74333],\n \"90\": [0, 0.68333, 0.14528, 0, 0.61333],\n \"91\": [0.25, 0.75, 0.1875, 0, 0.30667],\n \"93\": [0.25, 0.75, 0.10528, 0, 0.30667],\n \"94\": [0, 0.69444, 0.06646, 0, 0.51111],\n \"95\": [0.31, 0.12056, 0.09208, 0, 0.51111],\n \"97\": [0, 0.43056, 0.07671, 0, 0.51111],\n \"98\": [0, 0.69444, 0.06312, 0, 0.46],\n \"99\": [0, 0.43056, 0.05653, 0, 0.46],\n \"100\": [0, 0.69444, 0.10333, 0, 0.51111],\n \"101\": [0, 0.43056, 0.07514, 0, 0.46],\n \"102\": [0.19444, 0.69444, 0.21194, 0, 0.30667],\n \"103\": [0.19444, 0.43056, 0.08847, 0, 0.46],\n \"104\": [0, 0.69444, 0.07671, 0, 0.51111],\n \"105\": [0, 0.65536, 0.1019, 0, 0.30667],\n \"106\": [0.19444, 0.65536, 0.14467, 0, 0.30667],\n \"107\": [0, 0.69444, 0.10764, 0, 0.46],\n \"108\": [0, 0.69444, 0.10333, 0, 0.25555],\n \"109\": [0, 0.43056, 0.07671, 0, 0.81777],\n \"110\": [0, 0.43056, 0.07671, 0, 0.56222],\n \"111\": [0, 0.43056, 0.06312, 0, 0.51111],\n \"112\": [0.19444, 0.43056, 0.06312, 0, 0.51111],\n \"113\": [0.19444, 0.43056, 0.08847, 0, 0.46],\n \"114\": [0, 0.43056, 0.10764, 0, 0.42166],\n \"115\": [0, 0.43056, 0.08208, 0, 0.40889],\n \"116\": [0, 0.61508, 0.09486, 0, 0.33222],\n \"117\": [0, 0.43056, 0.07671, 0, 0.53666],\n \"118\": [0, 0.43056, 0.10764, 0, 0.46],\n \"119\": [0, 0.43056, 0.10764, 0, 0.66444],\n \"120\": [0, 0.43056, 0.12042, 0, 0.46389],\n \"121\": [0.19444, 0.43056, 0.08847, 0, 0.48555],\n \"122\": [0, 0.43056, 0.12292, 0, 0.40889],\n \"126\": [0.35, 0.31786, 0.11585, 0, 0.51111],\n \"160\": [0, 0, 0, 0, 0.25],\n \"168\": [0, 0.66786, 0.10474, 0, 0.51111],\n \"176\": [0, 0.69444, 0, 0, 0.83129],\n \"184\": [0.17014, 0, 0, 0, 0.46],\n \"198\": [0, 0.68333, 0.12028, 0, 0.88277],\n \"216\": [0.04861, 0.73194, 0.09403, 0, 0.76666],\n \"223\": [0.19444, 0.69444, 0.10514, 0, 0.53666],\n \"230\": [0, 0.43056, 0.07514, 0, 0.71555],\n \"248\": [0.09722, 0.52778, 0.09194, 0, 0.51111],\n \"338\": [0, 0.68333, 0.12028, 0, 0.98499],\n \"339\": [0, 0.43056, 0.07514, 0, 0.71555],\n \"710\": [0, 0.69444, 0.06646, 0, 0.51111],\n \"711\": [0, 0.62847, 0.08295, 0, 0.51111],\n \"713\": [0, 0.56167, 0.10333, 0, 0.51111],\n \"714\": [0, 0.69444, 0.09694, 0, 0.51111],\n \"715\": [0, 0.69444, 0, 0, 0.51111],\n \"728\": [0, 0.69444, 0.10806, 0, 0.51111],\n \"729\": [0, 0.66786, 0.11752, 0, 0.30667],\n \"730\": [0, 0.69444, 0, 0, 0.83129],\n \"732\": [0, 0.66786, 0.11585, 0, 0.51111],\n \"733\": [0, 0.69444, 0.1225, 0, 0.51111],\n \"915\": [0, 0.68333, 0.13305, 0, 0.62722],\n \"916\": [0, 0.68333, 0, 0, 0.81777],\n \"920\": [0, 0.68333, 0.09403, 0, 0.76666],\n \"923\": [0, 0.68333, 0, 0, 0.69222],\n \"926\": [0, 0.68333, 0.15294, 0, 0.66444],\n \"928\": [0, 0.68333, 0.16389, 0, 0.74333],\n \"931\": [0, 0.68333, 0.12028, 0, 0.71555],\n \"933\": [0, 0.68333, 0.11111, 0, 0.76666],\n \"934\": [0, 0.68333, 0.05986, 0, 0.71555],\n \"936\": [0, 0.68333, 0.11111, 0, 0.76666],\n \"937\": [0, 0.68333, 0.10257, 0, 0.71555],\n \"8211\": [0, 0.43056, 0.09208, 0, 0.51111],\n \"8212\": [0, 0.43056, 0.09208, 0, 1.02222],\n \"8216\": [0, 0.69444, 0.12417, 0, 0.30667],\n \"8217\": [0, 0.69444, 0.12417, 0, 0.30667],\n \"8220\": [0, 0.69444, 0.1685, 0, 0.51444],\n \"8221\": [0, 0.69444, 0.06961, 0, 0.51444],\n \"8463\": [0, 0.68889, 0, 0, 0.54028]\n },\n \"Main-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0, 0, 0.27778],\n \"34\": [0, 0.69444, 0, 0, 0.5],\n \"35\": [0.19444, 0.69444, 0, 0, 0.83334],\n \"36\": [0.05556, 0.75, 0, 0, 0.5],\n \"37\": [0.05556, 0.75, 0, 0, 0.83334],\n \"38\": [0, 0.69444, 0, 0, 0.77778],\n \"39\": [0, 0.69444, 0, 0, 0.27778],\n \"40\": [0.25, 0.75, 0, 0, 0.38889],\n \"41\": [0.25, 0.75, 0, 0, 0.38889],\n \"42\": [0, 0.75, 0, 0, 0.5],\n \"43\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"44\": [0.19444, 0.10556, 0, 0, 0.27778],\n \"45\": [0, 0.43056, 0, 0, 0.33333],\n \"46\": [0, 0.10556, 0, 0, 0.27778],\n \"47\": [0.25, 0.75, 0, 0, 0.5],\n \"48\": [0, 0.64444, 0, 0, 0.5],\n \"49\": [0, 0.64444, 0, 0, 0.5],\n \"50\": [0, 0.64444, 0, 0, 0.5],\n \"51\": [0, 0.64444, 0, 0, 0.5],\n \"52\": [0, 0.64444, 0, 0, 0.5],\n \"53\": [0, 0.64444, 0, 0, 0.5],\n \"54\": [0, 0.64444, 0, 0, 0.5],\n \"55\": [0, 0.64444, 0, 0, 0.5],\n \"56\": [0, 0.64444, 0, 0, 0.5],\n \"57\": [0, 0.64444, 0, 0, 0.5],\n \"58\": [0, 0.43056, 0, 0, 0.27778],\n \"59\": [0.19444, 0.43056, 0, 0, 0.27778],\n \"60\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"61\": [-0.13313, 0.36687, 0, 0, 0.77778],\n \"62\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"63\": [0, 0.69444, 0, 0, 0.47222],\n \"64\": [0, 0.69444, 0, 0, 0.77778],\n \"65\": [0, 0.68333, 0, 0, 0.75],\n \"66\": [0, 0.68333, 0, 0, 0.70834],\n \"67\": [0, 0.68333, 0, 0, 0.72222],\n \"68\": [0, 0.68333, 0, 0, 0.76389],\n \"69\": [0, 0.68333, 0, 0, 0.68056],\n \"70\": [0, 0.68333, 0, 0, 0.65278],\n \"71\": [0, 0.68333, 0, 0, 0.78472],\n \"72\": [0, 0.68333, 0, 0, 0.75],\n \"73\": [0, 0.68333, 0, 0, 0.36111],\n \"74\": [0, 0.68333, 0, 0, 0.51389],\n \"75\": [0, 0.68333, 0, 0, 0.77778],\n \"76\": [0, 0.68333, 0, 0, 0.625],\n \"77\": [0, 0.68333, 0, 0, 0.91667],\n \"78\": [0, 0.68333, 0, 0, 0.75],\n \"79\": [0, 0.68333, 0, 0, 0.77778],\n \"80\": [0, 0.68333, 0, 0, 0.68056],\n \"81\": [0.19444, 0.68333, 0, 0, 0.77778],\n \"82\": [0, 0.68333, 0, 0, 0.73611],\n \"83\": [0, 0.68333, 0, 0, 0.55556],\n \"84\": [0, 0.68333, 0, 0, 0.72222],\n \"85\": [0, 0.68333, 0, 0, 0.75],\n \"86\": [0, 0.68333, 0.01389, 0, 0.75],\n \"87\": [0, 0.68333, 0.01389, 0, 1.02778],\n \"88\": [0, 0.68333, 0, 0, 0.75],\n \"89\": [0, 0.68333, 0.025, 0, 0.75],\n \"90\": [0, 0.68333, 0, 0, 0.61111],\n \"91\": [0.25, 0.75, 0, 0, 0.27778],\n \"92\": [0.25, 0.75, 0, 0, 0.5],\n \"93\": [0.25, 0.75, 0, 0, 0.27778],\n \"94\": [0, 0.69444, 0, 0, 0.5],\n \"95\": [0.31, 0.12056, 0.02778, 0, 0.5],\n \"97\": [0, 0.43056, 0, 0, 0.5],\n \"98\": [0, 0.69444, 0, 0, 0.55556],\n \"99\": [0, 0.43056, 0, 0, 0.44445],\n \"100\": [0, 0.69444, 0, 0, 0.55556],\n \"101\": [0, 0.43056, 0, 0, 0.44445],\n \"102\": [0, 0.69444, 0.07778, 0, 0.30556],\n \"103\": [0.19444, 0.43056, 0.01389, 0, 0.5],\n \"104\": [0, 0.69444, 0, 0, 0.55556],\n \"105\": [0, 0.66786, 0, 0, 0.27778],\n \"106\": [0.19444, 0.66786, 0, 0, 0.30556],\n \"107\": [0, 0.69444, 0, 0, 0.52778],\n \"108\": [0, 0.69444, 0, 0, 0.27778],\n \"109\": [0, 0.43056, 0, 0, 0.83334],\n \"110\": [0, 0.43056, 0, 0, 0.55556],\n \"111\": [0, 0.43056, 0, 0, 0.5],\n \"112\": [0.19444, 0.43056, 0, 0, 0.55556],\n \"113\": [0.19444, 0.43056, 0, 0, 0.52778],\n \"114\": [0, 0.43056, 0, 0, 0.39167],\n \"115\": [0, 0.43056, 0, 0, 0.39445],\n \"116\": [0, 0.61508, 0, 0, 0.38889],\n \"117\": [0, 0.43056, 0, 0, 0.55556],\n \"118\": [0, 0.43056, 0.01389, 0, 0.52778],\n \"119\": [0, 0.43056, 0.01389, 0, 0.72222],\n \"120\": [0, 0.43056, 0, 0, 0.52778],\n \"121\": [0.19444, 0.43056, 0.01389, 0, 0.52778],\n \"122\": [0, 0.43056, 0, 0, 0.44445],\n \"123\": [0.25, 0.75, 0, 0, 0.5],\n \"124\": [0.25, 0.75, 0, 0, 0.27778],\n \"125\": [0.25, 0.75, 0, 0, 0.5],\n \"126\": [0.35, 0.31786, 0, 0, 0.5],\n \"160\": [0, 0, 0, 0, 0.25],\n \"163\": [0, 0.69444, 0, 0, 0.76909],\n \"167\": [0.19444, 0.69444, 0, 0, 0.44445],\n \"168\": [0, 0.66786, 0, 0, 0.5],\n \"172\": [0, 0.43056, 0, 0, 0.66667],\n \"176\": [0, 0.69444, 0, 0, 0.75],\n \"177\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"182\": [0.19444, 0.69444, 0, 0, 0.61111],\n \"184\": [0.17014, 0, 0, 0, 0.44445],\n \"198\": [0, 0.68333, 0, 0, 0.90278],\n \"215\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"216\": [0.04861, 0.73194, 0, 0, 0.77778],\n \"223\": [0, 0.69444, 0, 0, 0.5],\n \"230\": [0, 0.43056, 0, 0, 0.72222],\n \"247\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"248\": [0.09722, 0.52778, 0, 0, 0.5],\n \"305\": [0, 0.43056, 0, 0, 0.27778],\n \"338\": [0, 0.68333, 0, 0, 1.01389],\n \"339\": [0, 0.43056, 0, 0, 0.77778],\n \"567\": [0.19444, 0.43056, 0, 0, 0.30556],\n \"710\": [0, 0.69444, 0, 0, 0.5],\n \"711\": [0, 0.62847, 0, 0, 0.5],\n \"713\": [0, 0.56778, 0, 0, 0.5],\n \"714\": [0, 0.69444, 0, 0, 0.5],\n \"715\": [0, 0.69444, 0, 0, 0.5],\n \"728\": [0, 0.69444, 0, 0, 0.5],\n \"729\": [0, 0.66786, 0, 0, 0.27778],\n \"730\": [0, 0.69444, 0, 0, 0.75],\n \"732\": [0, 0.66786, 0, 0, 0.5],\n \"733\": [0, 0.69444, 0, 0, 0.5],\n \"915\": [0, 0.68333, 0, 0, 0.625],\n \"916\": [0, 0.68333, 0, 0, 0.83334],\n \"920\": [0, 0.68333, 0, 0, 0.77778],\n \"923\": [0, 0.68333, 0, 0, 0.69445],\n \"926\": [0, 0.68333, 0, 0, 0.66667],\n \"928\": [0, 0.68333, 0, 0, 0.75],\n \"931\": [0, 0.68333, 0, 0, 0.72222],\n \"933\": [0, 0.68333, 0, 0, 0.77778],\n \"934\": [0, 0.68333, 0, 0, 0.72222],\n \"936\": [0, 0.68333, 0, 0, 0.77778],\n \"937\": [0, 0.68333, 0, 0, 0.72222],\n \"8211\": [0, 0.43056, 0.02778, 0, 0.5],\n \"8212\": [0, 0.43056, 0.02778, 0, 1.0],\n \"8216\": [0, 0.69444, 0, 0, 0.27778],\n \"8217\": [0, 0.69444, 0, 0, 0.27778],\n \"8220\": [0, 0.69444, 0, 0, 0.5],\n \"8221\": [0, 0.69444, 0, 0, 0.5],\n \"8224\": [0.19444, 0.69444, 0, 0, 0.44445],\n \"8225\": [0.19444, 0.69444, 0, 0, 0.44445],\n \"8230\": [0, 0.123, 0, 0, 1.172],\n \"8242\": [0, 0.55556, 0, 0, 0.275],\n \"8407\": [0, 0.71444, 0.15382, 0, 0.5],\n \"8463\": [0, 0.68889, 0, 0, 0.54028],\n \"8465\": [0, 0.69444, 0, 0, 0.72222],\n \"8467\": [0, 0.69444, 0, 0.11111, 0.41667],\n \"8472\": [0.19444, 0.43056, 0, 0.11111, 0.63646],\n \"8476\": [0, 0.69444, 0, 0, 0.72222],\n \"8501\": [0, 0.69444, 0, 0, 0.61111],\n \"8592\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8593\": [0.19444, 0.69444, 0, 0, 0.5],\n \"8594\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8595\": [0.19444, 0.69444, 0, 0, 0.5],\n \"8596\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8597\": [0.25, 0.75, 0, 0, 0.5],\n \"8598\": [0.19444, 0.69444, 0, 0, 1.0],\n \"8599\": [0.19444, 0.69444, 0, 0, 1.0],\n \"8600\": [0.19444, 0.69444, 0, 0, 1.0],\n \"8601\": [0.19444, 0.69444, 0, 0, 1.0],\n \"8614\": [0.011, 0.511, 0, 0, 1.0],\n \"8617\": [0.011, 0.511, 0, 0, 1.126],\n \"8618\": [0.011, 0.511, 0, 0, 1.126],\n \"8636\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8637\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8640\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8641\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8652\": [0.011, 0.671, 0, 0, 1.0],\n \"8656\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8657\": [0.19444, 0.69444, 0, 0, 0.61111],\n \"8658\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8659\": [0.19444, 0.69444, 0, 0, 0.61111],\n \"8660\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8661\": [0.25, 0.75, 0, 0, 0.61111],\n \"8704\": [0, 0.69444, 0, 0, 0.55556],\n \"8706\": [0, 0.69444, 0.05556, 0.08334, 0.5309],\n \"8707\": [0, 0.69444, 0, 0, 0.55556],\n \"8709\": [0.05556, 0.75, 0, 0, 0.5],\n \"8711\": [0, 0.68333, 0, 0, 0.83334],\n \"8712\": [0.0391, 0.5391, 0, 0, 0.66667],\n \"8715\": [0.0391, 0.5391, 0, 0, 0.66667],\n \"8722\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8723\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8725\": [0.25, 0.75, 0, 0, 0.5],\n \"8726\": [0.25, 0.75, 0, 0, 0.5],\n \"8727\": [-0.03472, 0.46528, 0, 0, 0.5],\n \"8728\": [-0.05555, 0.44445, 0, 0, 0.5],\n \"8729\": [-0.05555, 0.44445, 0, 0, 0.5],\n \"8730\": [0.2, 0.8, 0, 0, 0.83334],\n \"8733\": [0, 0.43056, 0, 0, 0.77778],\n \"8734\": [0, 0.43056, 0, 0, 1.0],\n \"8736\": [0, 0.69224, 0, 0, 0.72222],\n \"8739\": [0.25, 0.75, 0, 0, 0.27778],\n \"8741\": [0.25, 0.75, 0, 0, 0.5],\n \"8743\": [0, 0.55556, 0, 0, 0.66667],\n \"8744\": [0, 0.55556, 0, 0, 0.66667],\n \"8745\": [0, 0.55556, 0, 0, 0.66667],\n \"8746\": [0, 0.55556, 0, 0, 0.66667],\n \"8747\": [0.19444, 0.69444, 0.11111, 0, 0.41667],\n \"8764\": [-0.13313, 0.36687, 0, 0, 0.77778],\n \"8768\": [0.19444, 0.69444, 0, 0, 0.27778],\n \"8771\": [-0.03625, 0.46375, 0, 0, 0.77778],\n \"8773\": [-0.022, 0.589, 0, 0, 0.778],\n \"8776\": [-0.01688, 0.48312, 0, 0, 0.77778],\n \"8781\": [-0.03625, 0.46375, 0, 0, 0.77778],\n \"8784\": [-0.133, 0.673, 0, 0, 0.778],\n \"8801\": [-0.03625, 0.46375, 0, 0, 0.77778],\n \"8804\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8805\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8810\": [0.0391, 0.5391, 0, 0, 1.0],\n \"8811\": [0.0391, 0.5391, 0, 0, 1.0],\n \"8826\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8827\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8834\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8835\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8838\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8839\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8846\": [0, 0.55556, 0, 0, 0.66667],\n \"8849\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8850\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8851\": [0, 0.55556, 0, 0, 0.66667],\n \"8852\": [0, 0.55556, 0, 0, 0.66667],\n \"8853\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8854\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8855\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8856\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8857\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8866\": [0, 0.69444, 0, 0, 0.61111],\n \"8867\": [0, 0.69444, 0, 0, 0.61111],\n \"8868\": [0, 0.69444, 0, 0, 0.77778],\n \"8869\": [0, 0.69444, 0, 0, 0.77778],\n \"8872\": [0.249, 0.75, 0, 0, 0.867],\n \"8900\": [-0.05555, 0.44445, 0, 0, 0.5],\n \"8901\": [-0.05555, 0.44445, 0, 0, 0.27778],\n \"8902\": [-0.03472, 0.46528, 0, 0, 0.5],\n \"8904\": [0.005, 0.505, 0, 0, 0.9],\n \"8942\": [0.03, 0.903, 0, 0, 0.278],\n \"8943\": [-0.19, 0.313, 0, 0, 1.172],\n \"8945\": [-0.1, 0.823, 0, 0, 1.282],\n \"8968\": [0.25, 0.75, 0, 0, 0.44445],\n \"8969\": [0.25, 0.75, 0, 0, 0.44445],\n \"8970\": [0.25, 0.75, 0, 0, 0.44445],\n \"8971\": [0.25, 0.75, 0, 0, 0.44445],\n \"8994\": [-0.14236, 0.35764, 0, 0, 1.0],\n \"8995\": [-0.14236, 0.35764, 0, 0, 1.0],\n \"9136\": [0.244, 0.744, 0, 0, 0.412],\n \"9137\": [0.244, 0.745, 0, 0, 0.412],\n \"9651\": [0.19444, 0.69444, 0, 0, 0.88889],\n \"9657\": [-0.03472, 0.46528, 0, 0, 0.5],\n \"9661\": [0.19444, 0.69444, 0, 0, 0.88889],\n \"9667\": [-0.03472, 0.46528, 0, 0, 0.5],\n \"9711\": [0.19444, 0.69444, 0, 0, 1.0],\n \"9824\": [0.12963, 0.69444, 0, 0, 0.77778],\n \"9825\": [0.12963, 0.69444, 0, 0, 0.77778],\n \"9826\": [0.12963, 0.69444, 0, 0, 0.77778],\n \"9827\": [0.12963, 0.69444, 0, 0, 0.77778],\n \"9837\": [0, 0.75, 0, 0, 0.38889],\n \"9838\": [0.19444, 0.69444, 0, 0, 0.38889],\n \"9839\": [0.19444, 0.69444, 0, 0, 0.38889],\n \"10216\": [0.25, 0.75, 0, 0, 0.38889],\n \"10217\": [0.25, 0.75, 0, 0, 0.38889],\n \"10222\": [0.244, 0.744, 0, 0, 0.412],\n \"10223\": [0.244, 0.745, 0, 0, 0.412],\n \"10229\": [0.011, 0.511, 0, 0, 1.609],\n \"10230\": [0.011, 0.511, 0, 0, 1.638],\n \"10231\": [0.011, 0.511, 0, 0, 1.859],\n \"10232\": [0.024, 0.525, 0, 0, 1.609],\n \"10233\": [0.024, 0.525, 0, 0, 1.638],\n \"10234\": [0.024, 0.525, 0, 0, 1.858],\n \"10236\": [0.011, 0.511, 0, 0, 1.638],\n \"10815\": [0, 0.68333, 0, 0, 0.75],\n \"10927\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"10928\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"57376\": [0.19444, 0.69444, 0, 0, 0]\n },\n \"Math-BoldItalic\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"48\": [0, 0.44444, 0, 0, 0.575],\n \"49\": [0, 0.44444, 0, 0, 0.575],\n \"50\": [0, 0.44444, 0, 0, 0.575],\n \"51\": [0.19444, 0.44444, 0, 0, 0.575],\n \"52\": [0.19444, 0.44444, 0, 0, 0.575],\n \"53\": [0.19444, 0.44444, 0, 0, 0.575],\n \"54\": [0, 0.64444, 0, 0, 0.575],\n \"55\": [0.19444, 0.44444, 0, 0, 0.575],\n \"56\": [0, 0.64444, 0, 0, 0.575],\n \"57\": [0.19444, 0.44444, 0, 0, 0.575],\n \"65\": [0, 0.68611, 0, 0, 0.86944],\n \"66\": [0, 0.68611, 0.04835, 0, 0.8664],\n \"67\": [0, 0.68611, 0.06979, 0, 0.81694],\n \"68\": [0, 0.68611, 0.03194, 0, 0.93812],\n \"69\": [0, 0.68611, 0.05451, 0, 0.81007],\n \"70\": [0, 0.68611, 0.15972, 0, 0.68889],\n \"71\": [0, 0.68611, 0, 0, 0.88673],\n \"72\": [0, 0.68611, 0.08229, 0, 0.98229],\n \"73\": [0, 0.68611, 0.07778, 0, 0.51111],\n \"74\": [0, 0.68611, 0.10069, 0, 0.63125],\n \"75\": [0, 0.68611, 0.06979, 0, 0.97118],\n \"76\": [0, 0.68611, 0, 0, 0.75555],\n \"77\": [0, 0.68611, 0.11424, 0, 1.14201],\n \"78\": [0, 0.68611, 0.11424, 0, 0.95034],\n \"79\": [0, 0.68611, 0.03194, 0, 0.83666],\n \"80\": [0, 0.68611, 0.15972, 0, 0.72309],\n \"81\": [0.19444, 0.68611, 0, 0, 0.86861],\n \"82\": [0, 0.68611, 0.00421, 0, 0.87235],\n \"83\": [0, 0.68611, 0.05382, 0, 0.69271],\n \"84\": [0, 0.68611, 0.15972, 0, 0.63663],\n \"85\": [0, 0.68611, 0.11424, 0, 0.80027],\n \"86\": [0, 0.68611, 0.25555, 0, 0.67778],\n \"87\": [0, 0.68611, 0.15972, 0, 1.09305],\n \"88\": [0, 0.68611, 0.07778, 0, 0.94722],\n \"89\": [0, 0.68611, 0.25555, 0, 0.67458],\n \"90\": [0, 0.68611, 0.06979, 0, 0.77257],\n \"97\": [0, 0.44444, 0, 0, 0.63287],\n \"98\": [0, 0.69444, 0, 0, 0.52083],\n \"99\": [0, 0.44444, 0, 0, 0.51342],\n \"100\": [0, 0.69444, 0, 0, 0.60972],\n \"101\": [0, 0.44444, 0, 0, 0.55361],\n \"102\": [0.19444, 0.69444, 0.11042, 0, 0.56806],\n \"103\": [0.19444, 0.44444, 0.03704, 0, 0.5449],\n \"104\": [0, 0.69444, 0, 0, 0.66759],\n \"105\": [0, 0.69326, 0, 0, 0.4048],\n \"106\": [0.19444, 0.69326, 0.0622, 0, 0.47083],\n \"107\": [0, 0.69444, 0.01852, 0, 0.6037],\n \"108\": [0, 0.69444, 0.0088, 0, 0.34815],\n \"109\": [0, 0.44444, 0, 0, 1.0324],\n \"110\": [0, 0.44444, 0, 0, 0.71296],\n \"111\": [0, 0.44444, 0, 0, 0.58472],\n \"112\": [0.19444, 0.44444, 0, 0, 0.60092],\n \"113\": [0.19444, 0.44444, 0.03704, 0, 0.54213],\n \"114\": [0, 0.44444, 0.03194, 0, 0.5287],\n \"115\": [0, 0.44444, 0, 0, 0.53125],\n \"116\": [0, 0.63492, 0, 0, 0.41528],\n \"117\": [0, 0.44444, 0, 0, 0.68102],\n \"118\": [0, 0.44444, 0.03704, 0, 0.56666],\n \"119\": [0, 0.44444, 0.02778, 0, 0.83148],\n \"120\": [0, 0.44444, 0, 0, 0.65903],\n \"121\": [0.19444, 0.44444, 0.03704, 0, 0.59028],\n \"122\": [0, 0.44444, 0.04213, 0, 0.55509],\n \"160\": [0, 0, 0, 0, 0.25],\n \"915\": [0, 0.68611, 0.15972, 0, 0.65694],\n \"916\": [0, 0.68611, 0, 0, 0.95833],\n \"920\": [0, 0.68611, 0.03194, 0, 0.86722],\n \"923\": [0, 0.68611, 0, 0, 0.80555],\n \"926\": [0, 0.68611, 0.07458, 0, 0.84125],\n \"928\": [0, 0.68611, 0.08229, 0, 0.98229],\n \"931\": [0, 0.68611, 0.05451, 0, 0.88507],\n \"933\": [0, 0.68611, 0.15972, 0, 0.67083],\n \"934\": [0, 0.68611, 0, 0, 0.76666],\n \"936\": [0, 0.68611, 0.11653, 0, 0.71402],\n \"937\": [0, 0.68611, 0.04835, 0, 0.8789],\n \"945\": [0, 0.44444, 0, 0, 0.76064],\n \"946\": [0.19444, 0.69444, 0.03403, 0, 0.65972],\n \"947\": [0.19444, 0.44444, 0.06389, 0, 0.59003],\n \"948\": [0, 0.69444, 0.03819, 0, 0.52222],\n \"949\": [0, 0.44444, 0, 0, 0.52882],\n \"950\": [0.19444, 0.69444, 0.06215, 0, 0.50833],\n \"951\": [0.19444, 0.44444, 0.03704, 0, 0.6],\n \"952\": [0, 0.69444, 0.03194, 0, 0.5618],\n \"953\": [0, 0.44444, 0, 0, 0.41204],\n \"954\": [0, 0.44444, 0, 0, 0.66759],\n \"955\": [0, 0.69444, 0, 0, 0.67083],\n \"956\": [0.19444, 0.44444, 0, 0, 0.70787],\n \"957\": [0, 0.44444, 0.06898, 0, 0.57685],\n \"958\": [0.19444, 0.69444, 0.03021, 0, 0.50833],\n \"959\": [0, 0.44444, 0, 0, 0.58472],\n \"960\": [0, 0.44444, 0.03704, 0, 0.68241],\n \"961\": [0.19444, 0.44444, 0, 0, 0.6118],\n \"962\": [0.09722, 0.44444, 0.07917, 0, 0.42361],\n \"963\": [0, 0.44444, 0.03704, 0, 0.68588],\n \"964\": [0, 0.44444, 0.13472, 0, 0.52083],\n \"965\": [0, 0.44444, 0.03704, 0, 0.63055],\n \"966\": [0.19444, 0.44444, 0, 0, 0.74722],\n \"967\": [0.19444, 0.44444, 0, 0, 0.71805],\n \"968\": [0.19444, 0.69444, 0.03704, 0, 0.75833],\n \"969\": [0, 0.44444, 0.03704, 0, 0.71782],\n \"977\": [0, 0.69444, 0, 0, 0.69155],\n \"981\": [0.19444, 0.69444, 0, 0, 0.7125],\n \"982\": [0, 0.44444, 0.03194, 0, 0.975],\n \"1009\": [0.19444, 0.44444, 0, 0, 0.6118],\n \"1013\": [0, 0.44444, 0, 0, 0.48333],\n \"57649\": [0, 0.44444, 0, 0, 0.39352],\n \"57911\": [0.19444, 0.44444, 0, 0, 0.43889]\n },\n \"Math-Italic\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"48\": [0, 0.43056, 0, 0, 0.5],\n \"49\": [0, 0.43056, 0, 0, 0.5],\n \"50\": [0, 0.43056, 0, 0, 0.5],\n \"51\": [0.19444, 0.43056, 0, 0, 0.5],\n \"52\": [0.19444, 0.43056, 0, 0, 0.5],\n \"53\": [0.19444, 0.43056, 0, 0, 0.5],\n \"54\": [0, 0.64444, 0, 0, 0.5],\n \"55\": [0.19444, 0.43056, 0, 0, 0.5],\n \"56\": [0, 0.64444, 0, 0, 0.5],\n \"57\": [0.19444, 0.43056, 0, 0, 0.5],\n \"65\": [0, 0.68333, 0, 0.13889, 0.75],\n \"66\": [0, 0.68333, 0.05017, 0.08334, 0.75851],\n \"67\": [0, 0.68333, 0.07153, 0.08334, 0.71472],\n \"68\": [0, 0.68333, 0.02778, 0.05556, 0.82792],\n \"69\": [0, 0.68333, 0.05764, 0.08334, 0.7382],\n \"70\": [0, 0.68333, 0.13889, 0.08334, 0.64306],\n \"71\": [0, 0.68333, 0, 0.08334, 0.78625],\n \"72\": [0, 0.68333, 0.08125, 0.05556, 0.83125],\n \"73\": [0, 0.68333, 0.07847, 0.11111, 0.43958],\n \"74\": [0, 0.68333, 0.09618, 0.16667, 0.55451],\n \"75\": [0, 0.68333, 0.07153, 0.05556, 0.84931],\n \"76\": [0, 0.68333, 0, 0.02778, 0.68056],\n \"77\": [0, 0.68333, 0.10903, 0.08334, 0.97014],\n \"78\": [0, 0.68333, 0.10903, 0.08334, 0.80347],\n \"79\": [0, 0.68333, 0.02778, 0.08334, 0.76278],\n \"80\": [0, 0.68333, 0.13889, 0.08334, 0.64201],\n \"81\": [0.19444, 0.68333, 0, 0.08334, 0.79056],\n \"82\": [0, 0.68333, 0.00773, 0.08334, 0.75929],\n \"83\": [0, 0.68333, 0.05764, 0.08334, 0.6132],\n \"84\": [0, 0.68333, 0.13889, 0.08334, 0.58438],\n \"85\": [0, 0.68333, 0.10903, 0.02778, 0.68278],\n \"86\": [0, 0.68333, 0.22222, 0, 0.58333],\n \"87\": [0, 0.68333, 0.13889, 0, 0.94445],\n \"88\": [0, 0.68333, 0.07847, 0.08334, 0.82847],\n \"89\": [0, 0.68333, 0.22222, 0, 0.58056],\n \"90\": [0, 0.68333, 0.07153, 0.08334, 0.68264],\n \"97\": [0, 0.43056, 0, 0, 0.52859],\n \"98\": [0, 0.69444, 0, 0, 0.42917],\n \"99\": [0, 0.43056, 0, 0.05556, 0.43276],\n \"100\": [0, 0.69444, 0, 0.16667, 0.52049],\n \"101\": [0, 0.43056, 0, 0.05556, 0.46563],\n \"102\": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],\n \"103\": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],\n \"104\": [0, 0.69444, 0, 0, 0.57616],\n \"105\": [0, 0.65952, 0, 0, 0.34451],\n \"106\": [0.19444, 0.65952, 0.05724, 0, 0.41181],\n \"107\": [0, 0.69444, 0.03148, 0, 0.5206],\n \"108\": [0, 0.69444, 0.01968, 0.08334, 0.29838],\n \"109\": [0, 0.43056, 0, 0, 0.87801],\n \"110\": [0, 0.43056, 0, 0, 0.60023],\n \"111\": [0, 0.43056, 0, 0.05556, 0.48472],\n \"112\": [0.19444, 0.43056, 0, 0.08334, 0.50313],\n \"113\": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],\n \"114\": [0, 0.43056, 0.02778, 0.05556, 0.45116],\n \"115\": [0, 0.43056, 0, 0.05556, 0.46875],\n \"116\": [0, 0.61508, 0, 0.08334, 0.36111],\n \"117\": [0, 0.43056, 0, 0.02778, 0.57246],\n \"118\": [0, 0.43056, 0.03588, 0.02778, 0.48472],\n \"119\": [0, 0.43056, 0.02691, 0.08334, 0.71592],\n \"120\": [0, 0.43056, 0, 0.02778, 0.57153],\n \"121\": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],\n \"122\": [0, 0.43056, 0.04398, 0.05556, 0.46505],\n \"160\": [0, 0, 0, 0, 0.25],\n \"915\": [0, 0.68333, 0.13889, 0.08334, 0.61528],\n \"916\": [0, 0.68333, 0, 0.16667, 0.83334],\n \"920\": [0, 0.68333, 0.02778, 0.08334, 0.76278],\n \"923\": [0, 0.68333, 0, 0.16667, 0.69445],\n \"926\": [0, 0.68333, 0.07569, 0.08334, 0.74236],\n \"928\": [0, 0.68333, 0.08125, 0.05556, 0.83125],\n \"931\": [0, 0.68333, 0.05764, 0.08334, 0.77986],\n \"933\": [0, 0.68333, 0.13889, 0.05556, 0.58333],\n \"934\": [0, 0.68333, 0, 0.08334, 0.66667],\n \"936\": [0, 0.68333, 0.11, 0.05556, 0.61222],\n \"937\": [0, 0.68333, 0.05017, 0.08334, 0.7724],\n \"945\": [0, 0.43056, 0.0037, 0.02778, 0.6397],\n \"946\": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],\n \"947\": [0.19444, 0.43056, 0.05556, 0, 0.51773],\n \"948\": [0, 0.69444, 0.03785, 0.05556, 0.44444],\n \"949\": [0, 0.43056, 0, 0.08334, 0.46632],\n \"950\": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],\n \"951\": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],\n \"952\": [0, 0.69444, 0.02778, 0.08334, 0.46944],\n \"953\": [0, 0.43056, 0, 0.05556, 0.35394],\n \"954\": [0, 0.43056, 0, 0, 0.57616],\n \"955\": [0, 0.69444, 0, 0, 0.58334],\n \"956\": [0.19444, 0.43056, 0, 0.02778, 0.60255],\n \"957\": [0, 0.43056, 0.06366, 0.02778, 0.49398],\n \"958\": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],\n \"959\": [0, 0.43056, 0, 0.05556, 0.48472],\n \"960\": [0, 0.43056, 0.03588, 0, 0.57003],\n \"961\": [0.19444, 0.43056, 0, 0.08334, 0.51702],\n \"962\": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],\n \"963\": [0, 0.43056, 0.03588, 0, 0.57141],\n \"964\": [0, 0.43056, 0.1132, 0.02778, 0.43715],\n \"965\": [0, 0.43056, 0.03588, 0.02778, 0.54028],\n \"966\": [0.19444, 0.43056, 0, 0.08334, 0.65417],\n \"967\": [0.19444, 0.43056, 0, 0.05556, 0.62569],\n \"968\": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],\n \"969\": [0, 0.43056, 0.03588, 0, 0.62245],\n \"977\": [0, 0.69444, 0, 0.08334, 0.59144],\n \"981\": [0.19444, 0.69444, 0, 0.08334, 0.59583],\n \"982\": [0, 0.43056, 0.02778, 0, 0.82813],\n \"1009\": [0.19444, 0.43056, 0, 0.08334, 0.51702],\n \"1013\": [0, 0.43056, 0, 0.05556, 0.4059],\n \"57649\": [0, 0.43056, 0, 0.02778, 0.32246],\n \"57911\": [0.19444, 0.43056, 0, 0.08334, 0.38403]\n },\n \"SansSerif-Bold\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0, 0, 0.36667],\n \"34\": [0, 0.69444, 0, 0, 0.55834],\n \"35\": [0.19444, 0.69444, 0, 0, 0.91667],\n \"36\": [0.05556, 0.75, 0, 0, 0.55],\n \"37\": [0.05556, 0.75, 0, 0, 1.02912],\n \"38\": [0, 0.69444, 0, 0, 0.83056],\n \"39\": [0, 0.69444, 0, 0, 0.30556],\n \"40\": [0.25, 0.75, 0, 0, 0.42778],\n \"41\": [0.25, 0.75, 0, 0, 0.42778],\n \"42\": [0, 0.75, 0, 0, 0.55],\n \"43\": [0.11667, 0.61667, 0, 0, 0.85556],\n \"44\": [0.10556, 0.13056, 0, 0, 0.30556],\n \"45\": [0, 0.45833, 0, 0, 0.36667],\n \"46\": [0, 0.13056, 0, 0, 0.30556],\n \"47\": [0.25, 0.75, 0, 0, 0.55],\n \"48\": [0, 0.69444, 0, 0, 0.55],\n \"49\": [0, 0.69444, 0, 0, 0.55],\n \"50\": [0, 0.69444, 0, 0, 0.55],\n \"51\": [0, 0.69444, 0, 0, 0.55],\n \"52\": [0, 0.69444, 0, 0, 0.55],\n \"53\": [0, 0.69444, 0, 0, 0.55],\n \"54\": [0, 0.69444, 0, 0, 0.55],\n \"55\": [0, 0.69444, 0, 0, 0.55],\n \"56\": [0, 0.69444, 0, 0, 0.55],\n \"57\": [0, 0.69444, 0, 0, 0.55],\n \"58\": [0, 0.45833, 0, 0, 0.30556],\n \"59\": [0.10556, 0.45833, 0, 0, 0.30556],\n \"61\": [-0.09375, 0.40625, 0, 0, 0.85556],\n \"63\": [0, 0.69444, 0, 0, 0.51945],\n \"64\": [0, 0.69444, 0, 0, 0.73334],\n \"65\": [0, 0.69444, 0, 0, 0.73334],\n \"66\": [0, 0.69444, 0, 0, 0.73334],\n \"67\": [0, 0.69444, 0, 0, 0.70278],\n \"68\": [0, 0.69444, 0, 0, 0.79445],\n \"69\": [0, 0.69444, 0, 0, 0.64167],\n \"70\": [0, 0.69444, 0, 0, 0.61111],\n \"71\": [0, 0.69444, 0, 0, 0.73334],\n \"72\": [0, 0.69444, 0, 0, 0.79445],\n \"73\": [0, 0.69444, 0, 0, 0.33056],\n \"74\": [0, 0.69444, 0, 0, 0.51945],\n \"75\": [0, 0.69444, 0, 0, 0.76389],\n \"76\": [0, 0.69444, 0, 0, 0.58056],\n \"77\": [0, 0.69444, 0, 0, 0.97778],\n \"78\": [0, 0.69444, 0, 0, 0.79445],\n \"79\": [0, 0.69444, 0, 0, 0.79445],\n \"80\": [0, 0.69444, 0, 0, 0.70278],\n \"81\": [0.10556, 0.69444, 0, 0, 0.79445],\n \"82\": [0, 0.69444, 0, 0, 0.70278],\n \"83\": [0, 0.69444, 0, 0, 0.61111],\n \"84\": [0, 0.69444, 0, 0, 0.73334],\n \"85\": [0, 0.69444, 0, 0, 0.76389],\n \"86\": [0, 0.69444, 0.01528, 0, 0.73334],\n \"87\": [0, 0.69444, 0.01528, 0, 1.03889],\n \"88\": [0, 0.69444, 0, 0, 0.73334],\n \"89\": [0, 0.69444, 0.0275, 0, 0.73334],\n \"90\": [0, 0.69444, 0, 0, 0.67223],\n \"91\": [0.25, 0.75, 0, 0, 0.34306],\n \"93\": [0.25, 0.75, 0, 0, 0.34306],\n \"94\": [0, 0.69444, 0, 0, 0.55],\n \"95\": [0.35, 0.10833, 0.03056, 0, 0.55],\n \"97\": [0, 0.45833, 0, 0, 0.525],\n \"98\": [0, 0.69444, 0, 0, 0.56111],\n \"99\": [0, 0.45833, 0, 0, 0.48889],\n \"100\": [0, 0.69444, 0, 0, 0.56111],\n \"101\": [0, 0.45833, 0, 0, 0.51111],\n \"102\": [0, 0.69444, 0.07639, 0, 0.33611],\n \"103\": [0.19444, 0.45833, 0.01528, 0, 0.55],\n \"104\": [0, 0.69444, 0, 0, 0.56111],\n \"105\": [0, 0.69444, 0, 0, 0.25556],\n \"106\": [0.19444, 0.69444, 0, 0, 0.28611],\n \"107\": [0, 0.69444, 0, 0, 0.53056],\n \"108\": [0, 0.69444, 0, 0, 0.25556],\n \"109\": [0, 0.45833, 0, 0, 0.86667],\n \"110\": [0, 0.45833, 0, 0, 0.56111],\n \"111\": [0, 0.45833, 0, 0, 0.55],\n \"112\": [0.19444, 0.45833, 0, 0, 0.56111],\n \"113\": [0.19444, 0.45833, 0, 0, 0.56111],\n \"114\": [0, 0.45833, 0.01528, 0, 0.37222],\n \"115\": [0, 0.45833, 0, 0, 0.42167],\n \"116\": [0, 0.58929, 0, 0, 0.40417],\n \"117\": [0, 0.45833, 0, 0, 0.56111],\n \"118\": [0, 0.45833, 0.01528, 0, 0.5],\n \"119\": [0, 0.45833, 0.01528, 0, 0.74445],\n \"120\": [0, 0.45833, 0, 0, 0.5],\n \"121\": [0.19444, 0.45833, 0.01528, 0, 0.5],\n \"122\": [0, 0.45833, 0, 0, 0.47639],\n \"126\": [0.35, 0.34444, 0, 0, 0.55],\n \"160\": [0, 0, 0, 0, 0.25],\n \"168\": [0, 0.69444, 0, 0, 0.55],\n \"176\": [0, 0.69444, 0, 0, 0.73334],\n \"180\": [0, 0.69444, 0, 0, 0.55],\n \"184\": [0.17014, 0, 0, 0, 0.48889],\n \"305\": [0, 0.45833, 0, 0, 0.25556],\n \"567\": [0.19444, 0.45833, 0, 0, 0.28611],\n \"710\": [0, 0.69444, 0, 0, 0.55],\n \"711\": [0, 0.63542, 0, 0, 0.55],\n \"713\": [0, 0.63778, 0, 0, 0.55],\n \"728\": [0, 0.69444, 0, 0, 0.55],\n \"729\": [0, 0.69444, 0, 0, 0.30556],\n \"730\": [0, 0.69444, 0, 0, 0.73334],\n \"732\": [0, 0.69444, 0, 0, 0.55],\n \"733\": [0, 0.69444, 0, 0, 0.55],\n \"915\": [0, 0.69444, 0, 0, 0.58056],\n \"916\": [0, 0.69444, 0, 0, 0.91667],\n \"920\": [0, 0.69444, 0, 0, 0.85556],\n \"923\": [0, 0.69444, 0, 0, 0.67223],\n \"926\": [0, 0.69444, 0, 0, 0.73334],\n \"928\": [0, 0.69444, 0, 0, 0.79445],\n \"931\": [0, 0.69444, 0, 0, 0.79445],\n \"933\": [0, 0.69444, 0, 0, 0.85556],\n \"934\": [0, 0.69444, 0, 0, 0.79445],\n \"936\": [0, 0.69444, 0, 0, 0.85556],\n \"937\": [0, 0.69444, 0, 0, 0.79445],\n \"8211\": [0, 0.45833, 0.03056, 0, 0.55],\n \"8212\": [0, 0.45833, 0.03056, 0, 1.10001],\n \"8216\": [0, 0.69444, 0, 0, 0.30556],\n \"8217\": [0, 0.69444, 0, 0, 0.30556],\n \"8220\": [0, 0.69444, 0, 0, 0.55834],\n \"8221\": [0, 0.69444, 0, 0, 0.55834]\n },\n \"SansSerif-Italic\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0.05733, 0, 0.31945],\n \"34\": [0, 0.69444, 0.00316, 0, 0.5],\n \"35\": [0.19444, 0.69444, 0.05087, 0, 0.83334],\n \"36\": [0.05556, 0.75, 0.11156, 0, 0.5],\n \"37\": [0.05556, 0.75, 0.03126, 0, 0.83334],\n \"38\": [0, 0.69444, 0.03058, 0, 0.75834],\n \"39\": [0, 0.69444, 0.07816, 0, 0.27778],\n \"40\": [0.25, 0.75, 0.13164, 0, 0.38889],\n \"41\": [0.25, 0.75, 0.02536, 0, 0.38889],\n \"42\": [0, 0.75, 0.11775, 0, 0.5],\n \"43\": [0.08333, 0.58333, 0.02536, 0, 0.77778],\n \"44\": [0.125, 0.08333, 0, 0, 0.27778],\n \"45\": [0, 0.44444, 0.01946, 0, 0.33333],\n \"46\": [0, 0.08333, 0, 0, 0.27778],\n \"47\": [0.25, 0.75, 0.13164, 0, 0.5],\n \"48\": [0, 0.65556, 0.11156, 0, 0.5],\n \"49\": [0, 0.65556, 0.11156, 0, 0.5],\n \"50\": [0, 0.65556, 0.11156, 0, 0.5],\n \"51\": [0, 0.65556, 0.11156, 0, 0.5],\n \"52\": [0, 0.65556, 0.11156, 0, 0.5],\n \"53\": [0, 0.65556, 0.11156, 0, 0.5],\n \"54\": [0, 0.65556, 0.11156, 0, 0.5],\n \"55\": [0, 0.65556, 0.11156, 0, 0.5],\n \"56\": [0, 0.65556, 0.11156, 0, 0.5],\n \"57\": [0, 0.65556, 0.11156, 0, 0.5],\n \"58\": [0, 0.44444, 0.02502, 0, 0.27778],\n \"59\": [0.125, 0.44444, 0.02502, 0, 0.27778],\n \"61\": [-0.13, 0.37, 0.05087, 0, 0.77778],\n \"63\": [0, 0.69444, 0.11809, 0, 0.47222],\n \"64\": [0, 0.69444, 0.07555, 0, 0.66667],\n \"65\": [0, 0.69444, 0, 0, 0.66667],\n \"66\": [0, 0.69444, 0.08293, 0, 0.66667],\n \"67\": [0, 0.69444, 0.11983, 0, 0.63889],\n \"68\": [0, 0.69444, 0.07555, 0, 0.72223],\n \"69\": [0, 0.69444, 0.11983, 0, 0.59722],\n \"70\": [0, 0.69444, 0.13372, 0, 0.56945],\n \"71\": [0, 0.69444, 0.11983, 0, 0.66667],\n \"72\": [0, 0.69444, 0.08094, 0, 0.70834],\n \"73\": [0, 0.69444, 0.13372, 0, 0.27778],\n \"74\": [0, 0.69444, 0.08094, 0, 0.47222],\n \"75\": [0, 0.69444, 0.11983, 0, 0.69445],\n \"76\": [0, 0.69444, 0, 0, 0.54167],\n \"77\": [0, 0.69444, 0.08094, 0, 0.875],\n \"78\": [0, 0.69444, 0.08094, 0, 0.70834],\n \"79\": [0, 0.69444, 0.07555, 0, 0.73611],\n \"80\": [0, 0.69444, 0.08293, 0, 0.63889],\n \"81\": [0.125, 0.69444, 0.07555, 0, 0.73611],\n \"82\": [0, 0.69444, 0.08293, 0, 0.64584],\n \"83\": [0, 0.69444, 0.09205, 0, 0.55556],\n \"84\": [0, 0.69444, 0.13372, 0, 0.68056],\n \"85\": [0, 0.69444, 0.08094, 0, 0.6875],\n \"86\": [0, 0.69444, 0.1615, 0, 0.66667],\n \"87\": [0, 0.69444, 0.1615, 0, 0.94445],\n \"88\": [0, 0.69444, 0.13372, 0, 0.66667],\n \"89\": [0, 0.69444, 0.17261, 0, 0.66667],\n \"90\": [0, 0.69444, 0.11983, 0, 0.61111],\n \"91\": [0.25, 0.75, 0.15942, 0, 0.28889],\n \"93\": [0.25, 0.75, 0.08719, 0, 0.28889],\n \"94\": [0, 0.69444, 0.0799, 0, 0.5],\n \"95\": [0.35, 0.09444, 0.08616, 0, 0.5],\n \"97\": [0, 0.44444, 0.00981, 0, 0.48056],\n \"98\": [0, 0.69444, 0.03057, 0, 0.51667],\n \"99\": [0, 0.44444, 0.08336, 0, 0.44445],\n \"100\": [0, 0.69444, 0.09483, 0, 0.51667],\n \"101\": [0, 0.44444, 0.06778, 0, 0.44445],\n \"102\": [0, 0.69444, 0.21705, 0, 0.30556],\n \"103\": [0.19444, 0.44444, 0.10836, 0, 0.5],\n \"104\": [0, 0.69444, 0.01778, 0, 0.51667],\n \"105\": [0, 0.67937, 0.09718, 0, 0.23889],\n \"106\": [0.19444, 0.67937, 0.09162, 0, 0.26667],\n \"107\": [0, 0.69444, 0.08336, 0, 0.48889],\n \"108\": [0, 0.69444, 0.09483, 0, 0.23889],\n \"109\": [0, 0.44444, 0.01778, 0, 0.79445],\n \"110\": [0, 0.44444, 0.01778, 0, 0.51667],\n \"111\": [0, 0.44444, 0.06613, 0, 0.5],\n \"112\": [0.19444, 0.44444, 0.0389, 0, 0.51667],\n \"113\": [0.19444, 0.44444, 0.04169, 0, 0.51667],\n \"114\": [0, 0.44444, 0.10836, 0, 0.34167],\n \"115\": [0, 0.44444, 0.0778, 0, 0.38333],\n \"116\": [0, 0.57143, 0.07225, 0, 0.36111],\n \"117\": [0, 0.44444, 0.04169, 0, 0.51667],\n \"118\": [0, 0.44444, 0.10836, 0, 0.46111],\n \"119\": [0, 0.44444, 0.10836, 0, 0.68334],\n \"120\": [0, 0.44444, 0.09169, 0, 0.46111],\n \"121\": [0.19444, 0.44444, 0.10836, 0, 0.46111],\n \"122\": [0, 0.44444, 0.08752, 0, 0.43472],\n \"126\": [0.35, 0.32659, 0.08826, 0, 0.5],\n \"160\": [0, 0, 0, 0, 0.25],\n \"168\": [0, 0.67937, 0.06385, 0, 0.5],\n \"176\": [0, 0.69444, 0, 0, 0.73752],\n \"184\": [0.17014, 0, 0, 0, 0.44445],\n \"305\": [0, 0.44444, 0.04169, 0, 0.23889],\n \"567\": [0.19444, 0.44444, 0.04169, 0, 0.26667],\n \"710\": [0, 0.69444, 0.0799, 0, 0.5],\n \"711\": [0, 0.63194, 0.08432, 0, 0.5],\n \"713\": [0, 0.60889, 0.08776, 0, 0.5],\n \"714\": [0, 0.69444, 0.09205, 0, 0.5],\n \"715\": [0, 0.69444, 0, 0, 0.5],\n \"728\": [0, 0.69444, 0.09483, 0, 0.5],\n \"729\": [0, 0.67937, 0.07774, 0, 0.27778],\n \"730\": [0, 0.69444, 0, 0, 0.73752],\n \"732\": [0, 0.67659, 0.08826, 0, 0.5],\n \"733\": [0, 0.69444, 0.09205, 0, 0.5],\n \"915\": [0, 0.69444, 0.13372, 0, 0.54167],\n \"916\": [0, 0.69444, 0, 0, 0.83334],\n \"920\": [0, 0.69444, 0.07555, 0, 0.77778],\n \"923\": [0, 0.69444, 0, 0, 0.61111],\n \"926\": [0, 0.69444, 0.12816, 0, 0.66667],\n \"928\": [0, 0.69444, 0.08094, 0, 0.70834],\n \"931\": [0, 0.69444, 0.11983, 0, 0.72222],\n \"933\": [0, 0.69444, 0.09031, 0, 0.77778],\n \"934\": [0, 0.69444, 0.04603, 0, 0.72222],\n \"936\": [0, 0.69444, 0.09031, 0, 0.77778],\n \"937\": [0, 0.69444, 0.08293, 0, 0.72222],\n \"8211\": [0, 0.44444, 0.08616, 0, 0.5],\n \"8212\": [0, 0.44444, 0.08616, 0, 1.0],\n \"8216\": [0, 0.69444, 0.07816, 0, 0.27778],\n \"8217\": [0, 0.69444, 0.07816, 0, 0.27778],\n \"8220\": [0, 0.69444, 0.14205, 0, 0.5],\n \"8221\": [0, 0.69444, 0.00316, 0, 0.5]\n },\n \"SansSerif-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0, 0, 0.31945],\n \"34\": [0, 0.69444, 0, 0, 0.5],\n \"35\": [0.19444, 0.69444, 0, 0, 0.83334],\n \"36\": [0.05556, 0.75, 0, 0, 0.5],\n \"37\": [0.05556, 0.75, 0, 0, 0.83334],\n \"38\": [0, 0.69444, 0, 0, 0.75834],\n \"39\": [0, 0.69444, 0, 0, 0.27778],\n \"40\": [0.25, 0.75, 0, 0, 0.38889],\n \"41\": [0.25, 0.75, 0, 0, 0.38889],\n \"42\": [0, 0.75, 0, 0, 0.5],\n \"43\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"44\": [0.125, 0.08333, 0, 0, 0.27778],\n \"45\": [0, 0.44444, 0, 0, 0.33333],\n \"46\": [0, 0.08333, 0, 0, 0.27778],\n \"47\": [0.25, 0.75, 0, 0, 0.5],\n \"48\": [0, 0.65556, 0, 0, 0.5],\n \"49\": [0, 0.65556, 0, 0, 0.5],\n \"50\": [0, 0.65556, 0, 0, 0.5],\n \"51\": [0, 0.65556, 0, 0, 0.5],\n \"52\": [0, 0.65556, 0, 0, 0.5],\n \"53\": [0, 0.65556, 0, 0, 0.5],\n \"54\": [0, 0.65556, 0, 0, 0.5],\n \"55\": [0, 0.65556, 0, 0, 0.5],\n \"56\": [0, 0.65556, 0, 0, 0.5],\n \"57\": [0, 0.65556, 0, 0, 0.5],\n \"58\": [0, 0.44444, 0, 0, 0.27778],\n \"59\": [0.125, 0.44444, 0, 0, 0.27778],\n \"61\": [-0.13, 0.37, 0, 0, 0.77778],\n \"63\": [0, 0.69444, 0, 0, 0.47222],\n \"64\": [0, 0.69444, 0, 0, 0.66667],\n \"65\": [0, 0.69444, 0, 0, 0.66667],\n \"66\": [0, 0.69444, 0, 0, 0.66667],\n \"67\": [0, 0.69444, 0, 0, 0.63889],\n \"68\": [0, 0.69444, 0, 0, 0.72223],\n \"69\": [0, 0.69444, 0, 0, 0.59722],\n \"70\": [0, 0.69444, 0, 0, 0.56945],\n \"71\": [0, 0.69444, 0, 0, 0.66667],\n \"72\": [0, 0.69444, 0, 0, 0.70834],\n \"73\": [0, 0.69444, 0, 0, 0.27778],\n \"74\": [0, 0.69444, 0, 0, 0.47222],\n \"75\": [0, 0.69444, 0, 0, 0.69445],\n \"76\": [0, 0.69444, 0, 0, 0.54167],\n \"77\": [0, 0.69444, 0, 0, 0.875],\n \"78\": [0, 0.69444, 0, 0, 0.70834],\n \"79\": [0, 0.69444, 0, 0, 0.73611],\n \"80\": [0, 0.69444, 0, 0, 0.63889],\n \"81\": [0.125, 0.69444, 0, 0, 0.73611],\n \"82\": [0, 0.69444, 0, 0, 0.64584],\n \"83\": [0, 0.69444, 0, 0, 0.55556],\n \"84\": [0, 0.69444, 0, 0, 0.68056],\n \"85\": [0, 0.69444, 0, 0, 0.6875],\n \"86\": [0, 0.69444, 0.01389, 0, 0.66667],\n \"87\": [0, 0.69444, 0.01389, 0, 0.94445],\n \"88\": [0, 0.69444, 0, 0, 0.66667],\n \"89\": [0, 0.69444, 0.025, 0, 0.66667],\n \"90\": [0, 0.69444, 0, 0, 0.61111],\n \"91\": [0.25, 0.75, 0, 0, 0.28889],\n \"93\": [0.25, 0.75, 0, 0, 0.28889],\n \"94\": [0, 0.69444, 0, 0, 0.5],\n \"95\": [0.35, 0.09444, 0.02778, 0, 0.5],\n \"97\": [0, 0.44444, 0, 0, 0.48056],\n \"98\": [0, 0.69444, 0, 0, 0.51667],\n \"99\": [0, 0.44444, 0, 0, 0.44445],\n \"100\": [0, 0.69444, 0, 0, 0.51667],\n \"101\": [0, 0.44444, 0, 0, 0.44445],\n \"102\": [0, 0.69444, 0.06944, 0, 0.30556],\n \"103\": [0.19444, 0.44444, 0.01389, 0, 0.5],\n \"104\": [0, 0.69444, 0, 0, 0.51667],\n \"105\": [0, 0.67937, 0, 0, 0.23889],\n \"106\": [0.19444, 0.67937, 0, 0, 0.26667],\n \"107\": [0, 0.69444, 0, 0, 0.48889],\n \"108\": [0, 0.69444, 0, 0, 0.23889],\n \"109\": [0, 0.44444, 0, 0, 0.79445],\n \"110\": [0, 0.44444, 0, 0, 0.51667],\n \"111\": [0, 0.44444, 0, 0, 0.5],\n \"112\": [0.19444, 0.44444, 0, 0, 0.51667],\n \"113\": [0.19444, 0.44444, 0, 0, 0.51667],\n \"114\": [0, 0.44444, 0.01389, 0, 0.34167],\n \"115\": [0, 0.44444, 0, 0, 0.38333],\n \"116\": [0, 0.57143, 0, 0, 0.36111],\n \"117\": [0, 0.44444, 0, 0, 0.51667],\n \"118\": [0, 0.44444, 0.01389, 0, 0.46111],\n \"119\": [0, 0.44444, 0.01389, 0, 0.68334],\n \"120\": [0, 0.44444, 0, 0, 0.46111],\n \"121\": [0.19444, 0.44444, 0.01389, 0, 0.46111],\n \"122\": [0, 0.44444, 0, 0, 0.43472],\n \"126\": [0.35, 0.32659, 0, 0, 0.5],\n \"160\": [0, 0, 0, 0, 0.25],\n \"168\": [0, 0.67937, 0, 0, 0.5],\n \"176\": [0, 0.69444, 0, 0, 0.66667],\n \"184\": [0.17014, 0, 0, 0, 0.44445],\n \"305\": [0, 0.44444, 0, 0, 0.23889],\n \"567\": [0.19444, 0.44444, 0, 0, 0.26667],\n \"710\": [0, 0.69444, 0, 0, 0.5],\n \"711\": [0, 0.63194, 0, 0, 0.5],\n \"713\": [0, 0.60889, 0, 0, 0.5],\n \"714\": [0, 0.69444, 0, 0, 0.5],\n \"715\": [0, 0.69444, 0, 0, 0.5],\n \"728\": [0, 0.69444, 0, 0, 0.5],\n \"729\": [0, 0.67937, 0, 0, 0.27778],\n \"730\": [0, 0.69444, 0, 0, 0.66667],\n \"732\": [0, 0.67659, 0, 0, 0.5],\n \"733\": [0, 0.69444, 0, 0, 0.5],\n \"915\": [0, 0.69444, 0, 0, 0.54167],\n \"916\": [0, 0.69444, 0, 0, 0.83334],\n \"920\": [0, 0.69444, 0, 0, 0.77778],\n \"923\": [0, 0.69444, 0, 0, 0.61111],\n \"926\": [0, 0.69444, 0, 0, 0.66667],\n \"928\": [0, 0.69444, 0, 0, 0.70834],\n \"931\": [0, 0.69444, 0, 0, 0.72222],\n \"933\": [0, 0.69444, 0, 0, 0.77778],\n \"934\": [0, 0.69444, 0, 0, 0.72222],\n \"936\": [0, 0.69444, 0, 0, 0.77778],\n \"937\": [0, 0.69444, 0, 0, 0.72222],\n \"8211\": [0, 0.44444, 0.02778, 0, 0.5],\n \"8212\": [0, 0.44444, 0.02778, 0, 1.0],\n \"8216\": [0, 0.69444, 0, 0, 0.27778],\n \"8217\": [0, 0.69444, 0, 0, 0.27778],\n \"8220\": [0, 0.69444, 0, 0, 0.5],\n \"8221\": [0, 0.69444, 0, 0, 0.5]\n },\n \"Script-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"65\": [0, 0.7, 0.22925, 0, 0.80253],\n \"66\": [0, 0.7, 0.04087, 0, 0.90757],\n \"67\": [0, 0.7, 0.1689, 0, 0.66619],\n \"68\": [0, 0.7, 0.09371, 0, 0.77443],\n \"69\": [0, 0.7, 0.18583, 0, 0.56162],\n \"70\": [0, 0.7, 0.13634, 0, 0.89544],\n \"71\": [0, 0.7, 0.17322, 0, 0.60961],\n \"72\": [0, 0.7, 0.29694, 0, 0.96919],\n \"73\": [0, 0.7, 0.19189, 0, 0.80907],\n \"74\": [0.27778, 0.7, 0.19189, 0, 1.05159],\n \"75\": [0, 0.7, 0.31259, 0, 0.91364],\n \"76\": [0, 0.7, 0.19189, 0, 0.87373],\n \"77\": [0, 0.7, 0.15981, 0, 1.08031],\n \"78\": [0, 0.7, 0.3525, 0, 0.9015],\n \"79\": [0, 0.7, 0.08078, 0, 0.73787],\n \"80\": [0, 0.7, 0.08078, 0, 1.01262],\n \"81\": [0, 0.7, 0.03305, 0, 0.88282],\n \"82\": [0, 0.7, 0.06259, 0, 0.85],\n \"83\": [0, 0.7, 0.19189, 0, 0.86767],\n \"84\": [0, 0.7, 0.29087, 0, 0.74697],\n \"85\": [0, 0.7, 0.25815, 0, 0.79996],\n \"86\": [0, 0.7, 0.27523, 0, 0.62204],\n \"87\": [0, 0.7, 0.27523, 0, 0.80532],\n \"88\": [0, 0.7, 0.26006, 0, 0.94445],\n \"89\": [0, 0.7, 0.2939, 0, 0.70961],\n \"90\": [0, 0.7, 0.24037, 0, 0.8212],\n \"160\": [0, 0, 0, 0, 0.25]\n },\n \"Size1-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"40\": [0.35001, 0.85, 0, 0, 0.45834],\n \"41\": [0.35001, 0.85, 0, 0, 0.45834],\n \"47\": [0.35001, 0.85, 0, 0, 0.57778],\n \"91\": [0.35001, 0.85, 0, 0, 0.41667],\n \"92\": [0.35001, 0.85, 0, 0, 0.57778],\n \"93\": [0.35001, 0.85, 0, 0, 0.41667],\n \"123\": [0.35001, 0.85, 0, 0, 0.58334],\n \"125\": [0.35001, 0.85, 0, 0, 0.58334],\n \"160\": [0, 0, 0, 0, 0.25],\n \"710\": [0, 0.72222, 0, 0, 0.55556],\n \"732\": [0, 0.72222, 0, 0, 0.55556],\n \"770\": [0, 0.72222, 0, 0, 0.55556],\n \"771\": [0, 0.72222, 0, 0, 0.55556],\n \"8214\": [-0.00099, 0.601, 0, 0, 0.77778],\n \"8593\": [1e-05, 0.6, 0, 0, 0.66667],\n \"8595\": [1e-05, 0.6, 0, 0, 0.66667],\n \"8657\": [1e-05, 0.6, 0, 0, 0.77778],\n \"8659\": [1e-05, 0.6, 0, 0, 0.77778],\n \"8719\": [0.25001, 0.75, 0, 0, 0.94445],\n \"8720\": [0.25001, 0.75, 0, 0, 0.94445],\n \"8721\": [0.25001, 0.75, 0, 0, 1.05556],\n \"8730\": [0.35001, 0.85, 0, 0, 1.0],\n \"8739\": [-0.00599, 0.606, 0, 0, 0.33333],\n \"8741\": [-0.00599, 0.606, 0, 0, 0.55556],\n \"8747\": [0.30612, 0.805, 0.19445, 0, 0.47222],\n \"8748\": [0.306, 0.805, 0.19445, 0, 0.47222],\n \"8749\": [0.306, 0.805, 0.19445, 0, 0.47222],\n \"8750\": [0.30612, 0.805, 0.19445, 0, 0.47222],\n \"8896\": [0.25001, 0.75, 0, 0, 0.83334],\n \"8897\": [0.25001, 0.75, 0, 0, 0.83334],\n \"8898\": [0.25001, 0.75, 0, 0, 0.83334],\n \"8899\": [0.25001, 0.75, 0, 0, 0.83334],\n \"8968\": [0.35001, 0.85, 0, 0, 0.47222],\n \"8969\": [0.35001, 0.85, 0, 0, 0.47222],\n \"8970\": [0.35001, 0.85, 0, 0, 0.47222],\n \"8971\": [0.35001, 0.85, 0, 0, 0.47222],\n \"9168\": [-0.00099, 0.601, 0, 0, 0.66667],\n \"10216\": [0.35001, 0.85, 0, 0, 0.47222],\n \"10217\": [0.35001, 0.85, 0, 0, 0.47222],\n \"10752\": [0.25001, 0.75, 0, 0, 1.11111],\n \"10753\": [0.25001, 0.75, 0, 0, 1.11111],\n \"10754\": [0.25001, 0.75, 0, 0, 1.11111],\n \"10756\": [0.25001, 0.75, 0, 0, 0.83334],\n \"10758\": [0.25001, 0.75, 0, 0, 0.83334]\n },\n \"Size2-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"40\": [0.65002, 1.15, 0, 0, 0.59722],\n \"41\": [0.65002, 1.15, 0, 0, 0.59722],\n \"47\": [0.65002, 1.15, 0, 0, 0.81111],\n \"91\": [0.65002, 1.15, 0, 0, 0.47222],\n \"92\": [0.65002, 1.15, 0, 0, 0.81111],\n \"93\": [0.65002, 1.15, 0, 0, 0.47222],\n \"123\": [0.65002, 1.15, 0, 0, 0.66667],\n \"125\": [0.65002, 1.15, 0, 0, 0.66667],\n \"160\": [0, 0, 0, 0, 0.25],\n \"710\": [0, 0.75, 0, 0, 1.0],\n \"732\": [0, 0.75, 0, 0, 1.0],\n \"770\": [0, 0.75, 0, 0, 1.0],\n \"771\": [0, 0.75, 0, 0, 1.0],\n \"8719\": [0.55001, 1.05, 0, 0, 1.27778],\n \"8720\": [0.55001, 1.05, 0, 0, 1.27778],\n \"8721\": [0.55001, 1.05, 0, 0, 1.44445],\n \"8730\": [0.65002, 1.15, 0, 0, 1.0],\n \"8747\": [0.86225, 1.36, 0.44445, 0, 0.55556],\n \"8748\": [0.862, 1.36, 0.44445, 0, 0.55556],\n \"8749\": [0.862, 1.36, 0.44445, 0, 0.55556],\n \"8750\": [0.86225, 1.36, 0.44445, 0, 0.55556],\n \"8896\": [0.55001, 1.05, 0, 0, 1.11111],\n \"8897\": [0.55001, 1.05, 0, 0, 1.11111],\n \"8898\": [0.55001, 1.05, 0, 0, 1.11111],\n \"8899\": [0.55001, 1.05, 0, 0, 1.11111],\n \"8968\": [0.65002, 1.15, 0, 0, 0.52778],\n \"8969\": [0.65002, 1.15, 0, 0, 0.52778],\n \"8970\": [0.65002, 1.15, 0, 0, 0.52778],\n \"8971\": [0.65002, 1.15, 0, 0, 0.52778],\n \"10216\": [0.65002, 1.15, 0, 0, 0.61111],\n \"10217\": [0.65002, 1.15, 0, 0, 0.61111],\n \"10752\": [0.55001, 1.05, 0, 0, 1.51112],\n \"10753\": [0.55001, 1.05, 0, 0, 1.51112],\n \"10754\": [0.55001, 1.05, 0, 0, 1.51112],\n \"10756\": [0.55001, 1.05, 0, 0, 1.11111],\n \"10758\": [0.55001, 1.05, 0, 0, 1.11111]\n },\n \"Size3-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"40\": [0.95003, 1.45, 0, 0, 0.73611],\n \"41\": [0.95003, 1.45, 0, 0, 0.73611],\n \"47\": [0.95003, 1.45, 0, 0, 1.04445],\n \"91\": [0.95003, 1.45, 0, 0, 0.52778],\n \"92\": [0.95003, 1.45, 0, 0, 1.04445],\n \"93\": [0.95003, 1.45, 0, 0, 0.52778],\n \"123\": [0.95003, 1.45, 0, 0, 0.75],\n \"125\": [0.95003, 1.45, 0, 0, 0.75],\n \"160\": [0, 0, 0, 0, 0.25],\n \"710\": [0, 0.75, 0, 0, 1.44445],\n \"732\": [0, 0.75, 0, 0, 1.44445],\n \"770\": [0, 0.75, 0, 0, 1.44445],\n \"771\": [0, 0.75, 0, 0, 1.44445],\n \"8730\": [0.95003, 1.45, 0, 0, 1.0],\n \"8968\": [0.95003, 1.45, 0, 0, 0.58334],\n \"8969\": [0.95003, 1.45, 0, 0, 0.58334],\n \"8970\": [0.95003, 1.45, 0, 0, 0.58334],\n \"8971\": [0.95003, 1.45, 0, 0, 0.58334],\n \"10216\": [0.95003, 1.45, 0, 0, 0.75],\n \"10217\": [0.95003, 1.45, 0, 0, 0.75]\n },\n \"Size4-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"40\": [1.25003, 1.75, 0, 0, 0.79167],\n \"41\": [1.25003, 1.75, 0, 0, 0.79167],\n \"47\": [1.25003, 1.75, 0, 0, 1.27778],\n \"91\": [1.25003, 1.75, 0, 0, 0.58334],\n \"92\": [1.25003, 1.75, 0, 0, 1.27778],\n \"93\": [1.25003, 1.75, 0, 0, 0.58334],\n \"123\": [1.25003, 1.75, 0, 0, 0.80556],\n \"125\": [1.25003, 1.75, 0, 0, 0.80556],\n \"160\": [0, 0, 0, 0, 0.25],\n \"710\": [0, 0.825, 0, 0, 1.8889],\n \"732\": [0, 0.825, 0, 0, 1.8889],\n \"770\": [0, 0.825, 0, 0, 1.8889],\n \"771\": [0, 0.825, 0, 0, 1.8889],\n \"8730\": [1.25003, 1.75, 0, 0, 1.0],\n \"8968\": [1.25003, 1.75, 0, 0, 0.63889],\n \"8969\": [1.25003, 1.75, 0, 0, 0.63889],\n \"8970\": [1.25003, 1.75, 0, 0, 0.63889],\n \"8971\": [1.25003, 1.75, 0, 0, 0.63889],\n \"9115\": [0.64502, 1.155, 0, 0, 0.875],\n \"9116\": [1e-05, 0.6, 0, 0, 0.875],\n \"9117\": [0.64502, 1.155, 0, 0, 0.875],\n \"9118\": [0.64502, 1.155, 0, 0, 0.875],\n \"9119\": [1e-05, 0.6, 0, 0, 0.875],\n \"9120\": [0.64502, 1.155, 0, 0, 0.875],\n \"9121\": [0.64502, 1.155, 0, 0, 0.66667],\n \"9122\": [-0.00099, 0.601, 0, 0, 0.66667],\n \"9123\": [0.64502, 1.155, 0, 0, 0.66667],\n \"9124\": [0.64502, 1.155, 0, 0, 0.66667],\n \"9125\": [-0.00099, 0.601, 0, 0, 0.66667],\n \"9126\": [0.64502, 1.155, 0, 0, 0.66667],\n \"9127\": [1e-05, 0.9, 0, 0, 0.88889],\n \"9128\": [0.65002, 1.15, 0, 0, 0.88889],\n \"9129\": [0.90001, 0, 0, 0, 0.88889],\n \"9130\": [0, 0.3, 0, 0, 0.88889],\n \"9131\": [1e-05, 0.9, 0, 0, 0.88889],\n \"9132\": [0.65002, 1.15, 0, 0, 0.88889],\n \"9133\": [0.90001, 0, 0, 0, 0.88889],\n \"9143\": [0.88502, 0.915, 0, 0, 1.05556],\n \"10216\": [1.25003, 1.75, 0, 0, 0.80556],\n \"10217\": [1.25003, 1.75, 0, 0, 0.80556],\n \"57344\": [-0.00499, 0.605, 0, 0, 1.05556],\n \"57345\": [-0.00499, 0.605, 0, 0, 1.05556],\n \"57680\": [0, 0.12, 0, 0, 0.45],\n \"57681\": [0, 0.12, 0, 0, 0.45],\n \"57682\": [0, 0.12, 0, 0, 0.45],\n \"57683\": [0, 0.12, 0, 0, 0.45]\n },\n \"Typewriter-Regular\": {\n \"32\": [0, 0, 0, 0, 0.525],\n \"33\": [0, 0.61111, 0, 0, 0.525],\n \"34\": [0, 0.61111, 0, 0, 0.525],\n \"35\": [0, 0.61111, 0, 0, 0.525],\n \"36\": [0.08333, 0.69444, 0, 0, 0.525],\n \"37\": [0.08333, 0.69444, 0, 0, 0.525],\n \"38\": [0, 0.61111, 0, 0, 0.525],\n \"39\": [0, 0.61111, 0, 0, 0.525],\n \"40\": [0.08333, 0.69444, 0, 0, 0.525],\n \"41\": [0.08333, 0.69444, 0, 0, 0.525],\n \"42\": [0, 0.52083, 0, 0, 0.525],\n \"43\": [-0.08056, 0.53055, 0, 0, 0.525],\n \"44\": [0.13889, 0.125, 0, 0, 0.525],\n \"45\": [-0.08056, 0.53055, 0, 0, 0.525],\n \"46\": [0, 0.125, 0, 0, 0.525],\n \"47\": [0.08333, 0.69444, 0, 0, 0.525],\n \"48\": [0, 0.61111, 0, 0, 0.525],\n \"49\": [0, 0.61111, 0, 0, 0.525],\n \"50\": [0, 0.61111, 0, 0, 0.525],\n \"51\": [0, 0.61111, 0, 0, 0.525],\n \"52\": [0, 0.61111, 0, 0, 0.525],\n \"53\": [0, 0.61111, 0, 0, 0.525],\n \"54\": [0, 0.61111, 0, 0, 0.525],\n \"55\": [0, 0.61111, 0, 0, 0.525],\n \"56\": [0, 0.61111, 0, 0, 0.525],\n \"57\": [0, 0.61111, 0, 0, 0.525],\n \"58\": [0, 0.43056, 0, 0, 0.525],\n \"59\": [0.13889, 0.43056, 0, 0, 0.525],\n \"60\": [-0.05556, 0.55556, 0, 0, 0.525],\n \"61\": [-0.19549, 0.41562, 0, 0, 0.525],\n \"62\": [-0.05556, 0.55556, 0, 0, 0.525],\n \"63\": [0, 0.61111, 0, 0, 0.525],\n \"64\": [0, 0.61111, 0, 0, 0.525],\n \"65\": [0, 0.61111, 0, 0, 0.525],\n \"66\": [0, 0.61111, 0, 0, 0.525],\n \"67\": [0, 0.61111, 0, 0, 0.525],\n \"68\": [0, 0.61111, 0, 0, 0.525],\n \"69\": [0, 0.61111, 0, 0, 0.525],\n \"70\": [0, 0.61111, 0, 0, 0.525],\n \"71\": [0, 0.61111, 0, 0, 0.525],\n \"72\": [0, 0.61111, 0, 0, 0.525],\n \"73\": [0, 0.61111, 0, 0, 0.525],\n \"74\": [0, 0.61111, 0, 0, 0.525],\n \"75\": [0, 0.61111, 0, 0, 0.525],\n \"76\": [0, 0.61111, 0, 0, 0.525],\n \"77\": [0, 0.61111, 0, 0, 0.525],\n \"78\": [0, 0.61111, 0, 0, 0.525],\n \"79\": [0, 0.61111, 0, 0, 0.525],\n \"80\": [0, 0.61111, 0, 0, 0.525],\n \"81\": [0.13889, 0.61111, 0, 0, 0.525],\n \"82\": [0, 0.61111, 0, 0, 0.525],\n \"83\": [0, 0.61111, 0, 0, 0.525],\n \"84\": [0, 0.61111, 0, 0, 0.525],\n \"85\": [0, 0.61111, 0, 0, 0.525],\n \"86\": [0, 0.61111, 0, 0, 0.525],\n \"87\": [0, 0.61111, 0, 0, 0.525],\n \"88\": [0, 0.61111, 0, 0, 0.525],\n \"89\": [0, 0.61111, 0, 0, 0.525],\n \"90\": [0, 0.61111, 0, 0, 0.525],\n \"91\": [0.08333, 0.69444, 0, 0, 0.525],\n \"92\": [0.08333, 0.69444, 0, 0, 0.525],\n \"93\": [0.08333, 0.69444, 0, 0, 0.525],\n \"94\": [0, 0.61111, 0, 0, 0.525],\n \"95\": [0.09514, 0, 0, 0, 0.525],\n \"96\": [0, 0.61111, 0, 0, 0.525],\n \"97\": [0, 0.43056, 0, 0, 0.525],\n \"98\": [0, 0.61111, 0, 0, 0.525],\n \"99\": [0, 0.43056, 0, 0, 0.525],\n \"100\": [0, 0.61111, 0, 0, 0.525],\n \"101\": [0, 0.43056, 0, 0, 0.525],\n \"102\": [0, 0.61111, 0, 0, 0.525],\n \"103\": [0.22222, 0.43056, 0, 0, 0.525],\n \"104\": [0, 0.61111, 0, 0, 0.525],\n \"105\": [0, 0.61111, 0, 0, 0.525],\n \"106\": [0.22222, 0.61111, 0, 0, 0.525],\n \"107\": [0, 0.61111, 0, 0, 0.525],\n \"108\": [0, 0.61111, 0, 0, 0.525],\n \"109\": [0, 0.43056, 0, 0, 0.525],\n \"110\": [0, 0.43056, 0, 0, 0.525],\n \"111\": [0, 0.43056, 0, 0, 0.525],\n \"112\": [0.22222, 0.43056, 0, 0, 0.525],\n \"113\": [0.22222, 0.43056, 0, 0, 0.525],\n \"114\": [0, 0.43056, 0, 0, 0.525],\n \"115\": [0, 0.43056, 0, 0, 0.525],\n \"116\": [0, 0.55358, 0, 0, 0.525],\n \"117\": [0, 0.43056, 0, 0, 0.525],\n \"118\": [0, 0.43056, 0, 0, 0.525],\n \"119\": [0, 0.43056, 0, 0, 0.525],\n \"120\": [0, 0.43056, 0, 0, 0.525],\n \"121\": [0.22222, 0.43056, 0, 0, 0.525],\n \"122\": [0, 0.43056, 0, 0, 0.525],\n \"123\": [0.08333, 0.69444, 0, 0, 0.525],\n \"124\": [0.08333, 0.69444, 0, 0, 0.525],\n \"125\": [0.08333, 0.69444, 0, 0, 0.525],\n \"126\": [0, 0.61111, 0, 0, 0.525],\n \"127\": [0, 0.61111, 0, 0, 0.525],\n \"160\": [0, 0, 0, 0, 0.525],\n \"176\": [0, 0.61111, 0, 0, 0.525],\n \"184\": [0.19445, 0, 0, 0, 0.525],\n \"305\": [0, 0.43056, 0, 0, 0.525],\n \"567\": [0.22222, 0.43056, 0, 0, 0.525],\n \"711\": [0, 0.56597, 0, 0, 0.525],\n \"713\": [0, 0.56555, 0, 0, 0.525],\n \"714\": [0, 0.61111, 0, 0, 0.525],\n \"715\": [0, 0.61111, 0, 0, 0.525],\n \"728\": [0, 0.61111, 0, 0, 0.525],\n \"730\": [0, 0.61111, 0, 0, 0.525],\n \"770\": [0, 0.61111, 0, 0, 0.525],\n \"771\": [0, 0.61111, 0, 0, 0.525],\n \"776\": [0, 0.61111, 0, 0, 0.525],\n \"915\": [0, 0.61111, 0, 0, 0.525],\n \"916\": [0, 0.61111, 0, 0, 0.525],\n \"920\": [0, 0.61111, 0, 0, 0.525],\n \"923\": [0, 0.61111, 0, 0, 0.525],\n \"926\": [0, 0.61111, 0, 0, 0.525],\n \"928\": [0, 0.61111, 0, 0, 0.525],\n \"931\": [0, 0.61111, 0, 0, 0.525],\n \"933\": [0, 0.61111, 0, 0, 0.525],\n \"934\": [0, 0.61111, 0, 0, 0.525],\n \"936\": [0, 0.61111, 0, 0, 0.525],\n \"937\": [0, 0.61111, 0, 0, 0.525],\n \"8216\": [0, 0.61111, 0, 0, 0.525],\n \"8217\": [0, 0.61111, 0, 0, 0.525],\n \"8242\": [0, 0.61111, 0, 0, 0.525],\n \"9251\": [0.11111, 0.21944, 0, 0, 0.525]\n }\n};\n\n/**\n * This file contains metrics regarding fonts and individual symbols. The sigma\n * and xi variables, as well as the metricMap map contain data extracted from\n * TeX, TeX font metrics, and the TTF files. These data are then exposed via the\n * `metrics` variable and the getCharacterMetrics function.\n */\n// In TeX, there are actually three sets of dimensions, one for each of\n// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4:\n// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are\n// provided in the arrays below, in that order.\n//\n// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respectively.\n// This was determined by running the following script:\n//\n// latex -interaction=nonstopmode \\\n// '\\documentclass{article}\\usepackage{amsmath}\\begin{document}' \\\n// '$a$ \\expandafter\\show\\the\\textfont2' \\\n// '\\expandafter\\show\\the\\scriptfont2' \\\n// '\\expandafter\\show\\the\\scriptscriptfont2' \\\n// '\\stop'\n//\n// The metrics themselves were retrieved using the following commands:\n//\n// tftopl cmsy10\n// tftopl cmsy7\n// tftopl cmsy5\n//\n// The output of each of these commands is quite lengthy. The only part we\n// care about is the FONTDIMEN section. Each value is measured in EMs.\nvar sigmasAndXis = {\n slant: [0.250, 0.250, 0.250],\n // sigma1\n space: [0.000, 0.000, 0.000],\n // sigma2\n stretch: [0.000, 0.000, 0.000],\n // sigma3\n shrink: [0.000, 0.000, 0.000],\n // sigma4\n xHeight: [0.431, 0.431, 0.431],\n // sigma5\n quad: [1.000, 1.171, 1.472],\n // sigma6\n extraSpace: [0.000, 0.000, 0.000],\n // sigma7\n num1: [0.677, 0.732, 0.925],\n // sigma8\n num2: [0.394, 0.384, 0.387],\n // sigma9\n num3: [0.444, 0.471, 0.504],\n // sigma10\n denom1: [0.686, 0.752, 1.025],\n // sigma11\n denom2: [0.345, 0.344, 0.532],\n // sigma12\n sup1: [0.413, 0.503, 0.504],\n // sigma13\n sup2: [0.363, 0.431, 0.404],\n // sigma14\n sup3: [0.289, 0.286, 0.294],\n // sigma15\n sub1: [0.150, 0.143, 0.200],\n // sigma16\n sub2: [0.247, 0.286, 0.400],\n // sigma17\n supDrop: [0.386, 0.353, 0.494],\n // sigma18\n subDrop: [0.050, 0.071, 0.100],\n // sigma19\n delim1: [2.390, 1.700, 1.980],\n // sigma20\n delim2: [1.010, 1.157, 1.420],\n // sigma21\n axisHeight: [0.250, 0.250, 0.250],\n // sigma22\n // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;\n // they correspond to the font parameters of the extension fonts (family 3).\n // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to\n // match cmex7, we'd use cmex7.tfm values for script and scriptscript\n // values.\n defaultRuleThickness: [0.04, 0.049, 0.049],\n // xi8; cmex7: 0.049\n bigOpSpacing1: [0.111, 0.111, 0.111],\n // xi9\n bigOpSpacing2: [0.166, 0.166, 0.166],\n // xi10\n bigOpSpacing3: [0.2, 0.2, 0.2],\n // xi11\n bigOpSpacing4: [0.6, 0.611, 0.611],\n // xi12; cmex7: 0.611\n bigOpSpacing5: [0.1, 0.143, 0.143],\n // xi13; cmex7: 0.143\n // The \\sqrt rule width is taken from the height of the surd character.\n // Since we use the same font at all sizes, this thickness doesn't scale.\n sqrtRuleThickness: [0.04, 0.04, 0.04],\n // This value determines how large a pt is, for metrics which are defined\n // in terms of pts.\n // This value is also used in katex.scss; if you change it make sure the\n // values match.\n ptPerEm: [10.0, 10.0, 10.0],\n // The space between adjacent `|` columns in an array definition. From\n // `\\showthe\\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.\n doubleRuleSep: [0.2, 0.2, 0.2],\n // The width of separator lines in {array} environments. From\n // `\\showthe\\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm.\n arrayRuleWidth: [0.04, 0.04, 0.04],\n // Two values from LaTeX source2e:\n fboxsep: [0.3, 0.3, 0.3],\n // 3 pt / ptPerEm\n fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm\n\n}; // This map contains a mapping from font name and character code to character\n// should have Latin-1 and Cyrillic characters, but may not depending on the\n// operating system. The metrics do not account for extra height from the\n// accents. In the case of Cyrillic characters which have both ascenders and\n// descenders we prefer approximations with ascenders, primarily to prevent\n// the fraction bar or root line from intersecting the glyph.\n// TODO(kevinb) allow union of multiple glyph metrics for better accuracy.\n\nvar extraCharacterMap = {\n // Latin-1\n 'Å': 'A',\n 'Ð': 'D',\n 'Þ': 'o',\n 'å': 'a',\n 'ð': 'd',\n 'þ': 'o',\n // Cyrillic\n 'А': 'A',\n 'Б': 'B',\n 'В': 'B',\n 'Г': 'F',\n 'Д': 'A',\n 'Е': 'E',\n 'Ж': 'K',\n 'З': '3',\n 'И': 'N',\n 'Й': 'N',\n 'К': 'K',\n 'Л': 'N',\n 'М': 'M',\n 'Н': 'H',\n 'О': 'O',\n 'П': 'N',\n 'Р': 'P',\n 'С': 'C',\n 'Т': 'T',\n 'У': 'y',\n 'Ф': 'O',\n 'Х': 'X',\n 'Ц': 'U',\n 'Ч': 'h',\n 'Ш': 'W',\n 'Щ': 'W',\n 'Ъ': 'B',\n 'Ы': 'X',\n 'Ь': 'B',\n 'Э': '3',\n 'Ю': 'X',\n 'Я': 'R',\n 'а': 'a',\n 'б': 'b',\n 'в': 'a',\n 'г': 'r',\n 'д': 'y',\n 'е': 'e',\n 'ж': 'm',\n 'з': 'e',\n 'и': 'n',\n 'й': 'n',\n 'к': 'n',\n 'л': 'n',\n 'м': 'm',\n 'н': 'n',\n 'о': 'o',\n 'п': 'n',\n 'р': 'p',\n 'с': 'c',\n 'т': 'o',\n 'у': 'y',\n 'ф': 'b',\n 'х': 'x',\n 'ц': 'n',\n 'ч': 'n',\n 'ш': 'w',\n 'щ': 'w',\n 'ъ': 'a',\n 'ы': 'm',\n 'ь': 'a',\n 'э': 'e',\n 'ю': 'm',\n 'я': 'r'\n};\n\n/**\n * This function adds new font metrics to default metricMap\n * It can also override existing metrics\n */\nfunction setFontMetrics(fontName, metrics) {\n fontMetricsData[fontName] = metrics;\n}\n/**\n * This function is a convenience function for looking up information in the\n * metricMap table. It takes a character as a string, and a font.\n *\n * Note: the `width` property may be undefined if fontMetricsData.js wasn't\n * built using `Make extended_metrics`.\n */\n\nfunction getCharacterMetrics(character, font, mode) {\n if (!fontMetricsData[font]) {\n throw new Error(\"Font metrics not found for font: \" + font + \".\");\n }\n\n var ch = character.charCodeAt(0);\n var metrics = fontMetricsData[font][ch];\n\n if (!metrics && character[0] in extraCharacterMap) {\n ch = extraCharacterMap[character[0]].charCodeAt(0);\n metrics = fontMetricsData[font][ch];\n }\n\n if (!metrics && mode === 'text') {\n // We don't typically have font metrics for Asian scripts.\n // But since we support them in text mode, we need to return\n // some sort of metrics.\n // So if the character is in a script we support but we\n // don't have metrics for it, just use the metrics for\n // the Latin capital letter M. This is close enough because\n // we (currently) only care about the height of the glyph\n // not its width.\n if (supportedCodepoint(ch)) {\n metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M'\n }\n }\n\n if (metrics) {\n return {\n depth: metrics[0],\n height: metrics[1],\n italic: metrics[2],\n skew: metrics[3],\n width: metrics[4]\n };\n }\n}\nvar fontMetricsBySizeIndex = {};\n/**\n * Get the font metrics for a given size.\n */\n\nfunction getGlobalMetrics(size) {\n var sizeIndex;\n\n if (size >= 5) {\n sizeIndex = 0;\n } else if (size >= 3) {\n sizeIndex = 1;\n } else {\n sizeIndex = 2;\n }\n\n if (!fontMetricsBySizeIndex[sizeIndex]) {\n var metrics = fontMetricsBySizeIndex[sizeIndex] = {\n cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18\n };\n\n for (var key in sigmasAndXis) {\n if (sigmasAndXis.hasOwnProperty(key)) {\n metrics[key] = sigmasAndXis[key][sizeIndex];\n }\n }\n }\n\n return fontMetricsBySizeIndex[sizeIndex];\n}\n\n/**\n * This file contains information about the options that the Parser carries\n * around with it while parsing. Data is held in an `Options` object, and when\n * recursing, a new `Options` object can be created with the `.with*` and\n * `.reset` functions.\n */\nvar sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize].\n// The size mappings are taken from TeX with \\normalsize=10pt.\n[1, 1, 1], // size1: [5, 5, 5] \\tiny\n[2, 1, 1], // size2: [6, 5, 5]\n[3, 1, 1], // size3: [7, 5, 5] \\scriptsize\n[4, 2, 1], // size4: [8, 6, 5] \\footnotesize\n[5, 2, 1], // size5: [9, 6, 5] \\small\n[6, 3, 1], // size6: [10, 7, 5] \\normalsize\n[7, 4, 2], // size7: [12, 8, 6] \\large\n[8, 6, 3], // size8: [14.4, 10, 7] \\Large\n[9, 7, 6], // size9: [17.28, 12, 10] \\LARGE\n[10, 8, 7], // size10: [20.74, 14.4, 12] \\huge\n[11, 10, 9] // size11: [24.88, 20.74, 17.28] \\HUGE\n];\nvar sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if\n// you change size indexes, change that function.\n0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488];\n\nvar sizeAtStyle = function sizeAtStyle(size, style) {\n return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];\n}; // In these types, \"\" (empty string) means \"no change\".\n\n\n/**\n * This is the main options class. It contains the current style, size, color,\n * and font.\n *\n * Options objects should not be modified. To create a new Options with\n * different properties, call a `.having*` method.\n */\nclass Options {\n // A font family applies to a group of fonts (i.e. SansSerif), while a font\n // represents a specific font (i.e. SansSerif Bold).\n // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm\n\n /**\n * The base size index.\n */\n constructor(data) {\n this.style = void 0;\n this.color = void 0;\n this.size = void 0;\n this.textSize = void 0;\n this.phantom = void 0;\n this.font = void 0;\n this.fontFamily = void 0;\n this.fontWeight = void 0;\n this.fontShape = void 0;\n this.sizeMultiplier = void 0;\n this.maxSize = void 0;\n this.minRuleThickness = void 0;\n this._fontMetrics = void 0;\n this.style = data.style;\n this.color = data.color;\n this.size = data.size || Options.BASESIZE;\n this.textSize = data.textSize || this.size;\n this.phantom = !!data.phantom;\n this.font = data.font || \"\";\n this.fontFamily = data.fontFamily || \"\";\n this.fontWeight = data.fontWeight || '';\n this.fontShape = data.fontShape || '';\n this.sizeMultiplier = sizeMultipliers[this.size - 1];\n this.maxSize = data.maxSize;\n this.minRuleThickness = data.minRuleThickness;\n this._fontMetrics = undefined;\n }\n /**\n * Returns a new options object with the same properties as \"this\". Properties\n * from \"extension\" will be copied to the new options object.\n */\n\n\n extend(extension) {\n var data = {\n style: this.style,\n size: this.size,\n textSize: this.textSize,\n color: this.color,\n phantom: this.phantom,\n font: this.font,\n fontFamily: this.fontFamily,\n fontWeight: this.fontWeight,\n fontShape: this.fontShape,\n maxSize: this.maxSize,\n minRuleThickness: this.minRuleThickness\n };\n\n for (var key in extension) {\n if (extension.hasOwnProperty(key)) {\n data[key] = extension[key];\n }\n }\n\n return new Options(data);\n }\n /**\n * Return an options object with the given style. If `this.style === style`,\n * returns `this`.\n */\n\n\n havingStyle(style) {\n if (this.style === style) {\n return this;\n } else {\n return this.extend({\n style: style,\n size: sizeAtStyle(this.textSize, style)\n });\n }\n }\n /**\n * Return an options object with a cramped version of the current style. If\n * the current style is cramped, returns `this`.\n */\n\n\n havingCrampedStyle() {\n return this.havingStyle(this.style.cramp());\n }\n /**\n * Return an options object with the given size and in at least `\\textstyle`.\n * Returns `this` if appropriate.\n */\n\n\n havingSize(size) {\n if (this.size === size && this.textSize === size) {\n return this;\n } else {\n return this.extend({\n style: this.style.text(),\n size: size,\n textSize: size,\n sizeMultiplier: sizeMultipliers[size - 1]\n });\n }\n }\n /**\n * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,\n * changes to at least `\\textstyle`.\n */\n\n\n havingBaseStyle(style) {\n style = style || this.style.text();\n var wantSize = sizeAtStyle(Options.BASESIZE, style);\n\n if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) {\n return this;\n } else {\n return this.extend({\n style: style,\n size: wantSize\n });\n }\n }\n /**\n * Remove the effect of sizing changes such as \\Huge.\n * Keep the effect of the current style, such as \\scriptstyle.\n */\n\n\n havingBaseSizing() {\n var size;\n\n switch (this.style.id) {\n case 4:\n case 5:\n size = 3; // normalsize in scriptstyle\n\n break;\n\n case 6:\n case 7:\n size = 1; // normalsize in scriptscriptstyle\n\n break;\n\n default:\n size = 6;\n // normalsize in textstyle or displaystyle\n }\n\n return this.extend({\n style: this.style.text(),\n size: size\n });\n }\n /**\n * Create a new options object with the given color.\n */\n\n\n withColor(color) {\n return this.extend({\n color: color\n });\n }\n /**\n * Create a new options object with \"phantom\" set to true.\n */\n\n\n withPhantom() {\n return this.extend({\n phantom: true\n });\n }\n /**\n * Creates a new options object with the given math font or old text font.\n * @type {[type]}\n */\n\n\n withFont(font) {\n return this.extend({\n font\n });\n }\n /**\n * Create a new options objects with the given fontFamily.\n */\n\n\n withTextFontFamily(fontFamily) {\n return this.extend({\n fontFamily,\n font: \"\"\n });\n }\n /**\n * Creates a new options object with the given font weight\n */\n\n\n withTextFontWeight(fontWeight) {\n return this.extend({\n fontWeight,\n font: \"\"\n });\n }\n /**\n * Creates a new options object with the given font weight\n */\n\n\n withTextFontShape(fontShape) {\n return this.extend({\n fontShape,\n font: \"\"\n });\n }\n /**\n * Return the CSS sizing classes required to switch from enclosing options\n * `oldOptions` to `this`. Returns an array of classes.\n */\n\n\n sizingClasses(oldOptions) {\n if (oldOptions.size !== this.size) {\n return [\"sizing\", \"reset-size\" + oldOptions.size, \"size\" + this.size];\n } else {\n return [];\n }\n }\n /**\n * Return the CSS sizing classes required to switch to the base size. Like\n * `this.havingSize(BASESIZE).sizingClasses(this)`.\n */\n\n\n baseSizingClasses() {\n if (this.size !== Options.BASESIZE) {\n return [\"sizing\", \"reset-size\" + this.size, \"size\" + Options.BASESIZE];\n } else {\n return [];\n }\n }\n /**\n * Return the font metrics for this size.\n */\n\n\n fontMetrics() {\n if (!this._fontMetrics) {\n this._fontMetrics = getGlobalMetrics(this.size);\n }\n\n return this._fontMetrics;\n }\n /**\n * Gets the CSS color of the current options object\n */\n\n\n getColor() {\n if (this.phantom) {\n return \"transparent\";\n } else {\n return this.color;\n }\n }\n\n}\n\nOptions.BASESIZE = 6;\n\n/**\n * This file does conversion between units. In particular, it provides\n * calculateSize to convert other units into ems.\n */\n// Thus, multiplying a length by this number converts the length from units\n// into pts. Dividing the result by ptPerEm gives the number of ems\n// *assuming* a font size of ptPerEm (normal size, normal style).\n\nvar ptPerUnit = {\n // https://en.wikibooks.org/wiki/LaTeX/Lengths and\n // https://tex.stackexchange.com/a/8263\n \"pt\": 1,\n // TeX point\n \"mm\": 7227 / 2540,\n // millimeter\n \"cm\": 7227 / 254,\n // centimeter\n \"in\": 72.27,\n // inch\n \"bp\": 803 / 800,\n // big (PostScript) points\n \"pc\": 12,\n // pica\n \"dd\": 1238 / 1157,\n // didot\n \"cc\": 14856 / 1157,\n // cicero (12 didot)\n \"nd\": 685 / 642,\n // new didot\n \"nc\": 1370 / 107,\n // new cicero (12 new didot)\n \"sp\": 1 / 65536,\n // scaled point (TeX's internal smallest unit)\n // https://tex.stackexchange.com/a/41371\n \"px\": 803 / 800 // \\pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX\n\n}; // Dictionary of relative units, for fast validity testing.\n\nvar relativeUnit = {\n \"ex\": true,\n \"em\": true,\n \"mu\": true\n};\n\n/**\n * Determine whether the specified unit (either a string defining the unit\n * or a \"size\" parse node containing a unit field) is valid.\n */\nvar validUnit = function validUnit(unit) {\n if (typeof unit !== \"string\") {\n unit = unit.unit;\n }\n\n return unit in ptPerUnit || unit in relativeUnit || unit === \"ex\";\n};\n/*\n * Convert a \"size\" parse node (with numeric \"number\" and string \"unit\" fields,\n * as parsed by functions.js argType \"size\") into a CSS em value for the\n * current style/scale. `options` gives the current options.\n */\n\nvar calculateSize = function calculateSize(sizeValue, options) {\n var scale;\n\n if (sizeValue.unit in ptPerUnit) {\n // Absolute units\n scale = ptPerUnit[sizeValue.unit] // Convert unit to pt\n / options.fontMetrics().ptPerEm // Convert pt to CSS em\n / options.sizeMultiplier; // Unscale to make absolute units\n } else if (sizeValue.unit === \"mu\") {\n // `mu` units scale with scriptstyle/scriptscriptstyle.\n scale = options.fontMetrics().cssEmPerMu;\n } else {\n // Other relative units always refer to the *textstyle* font\n // in the current size.\n var unitOptions;\n\n if (options.style.isTight()) {\n // isTight() means current style is script/scriptscript.\n unitOptions = options.havingStyle(options.style.text());\n } else {\n unitOptions = options;\n } // TODO: In TeX these units are relative to the quad of the current\n // *text* font, e.g. cmr10. KaTeX instead uses values from the\n // comparably-sized *Computer Modern symbol* font. At 10pt, these\n // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641;\n // cmr5=1.361133, cmsy5=1.472241. Consider $\\scriptsize a\\kern1emb$.\n // TeX \\showlists shows a kern of 1.13889 * fontsize;\n // KaTeX shows a kern of 1.171 * fontsize.\n\n\n if (sizeValue.unit === \"ex\") {\n scale = unitOptions.fontMetrics().xHeight;\n } else if (sizeValue.unit === \"em\") {\n scale = unitOptions.fontMetrics().quad;\n } else {\n throw new ParseError(\"Invalid unit: '\" + sizeValue.unit + \"'\");\n }\n\n if (unitOptions !== options) {\n scale *= unitOptions.sizeMultiplier / options.sizeMultiplier;\n }\n }\n\n return Math.min(sizeValue.number * scale, options.maxSize);\n};\n/**\n * Round `n` to 4 decimal places, or to the nearest 1/10,000th em. See\n * https://github.com/KaTeX/KaTeX/pull/2460.\n */\n\nvar makeEm = function makeEm(n) {\n return +n.toFixed(4) + \"em\";\n};\n\n/**\n * These objects store the data about the DOM nodes we create, as well as some\n * extra data. They can then be transformed into real DOM nodes with the\n * `toNode` function or HTML markup using `toMarkup`. They are useful for both\n * storing extra properties on the nodes, as well as providing a way to easily\n * work with the DOM.\n *\n * Similar functions for working with MathML nodes exist in mathMLTree.js.\n *\n * TODO: refactor `span` and `anchor` into common superclass when\n * target environments support class inheritance\n */\n\n/**\n * Create an HTML className based on a list of classes. In addition to joining\n * with spaces, we also remove empty classes.\n */\nvar createClass = function createClass(classes) {\n return classes.filter(cls => cls).join(\" \");\n};\n\nvar initNode = function initNode(classes, options, style) {\n this.classes = classes || [];\n this.attributes = {};\n this.height = 0;\n this.depth = 0;\n this.maxFontSize = 0;\n this.style = style || {};\n\n if (options) {\n if (options.style.isTight()) {\n this.classes.push(\"mtight\");\n }\n\n var color = options.getColor();\n\n if (color) {\n this.style.color = color;\n }\n }\n};\n/**\n * Convert into an HTML node\n */\n\n\nvar toNode = function toNode(tagName) {\n var node = document.createElement(tagName); // Apply the class\n\n node.className = createClass(this.classes); // Apply inline styles\n\n for (var style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n // $FlowFixMe Flow doesn't seem to understand span.style's type.\n node.style[style] = this.style[style];\n }\n } // Apply attributes\n\n\n for (var attr in this.attributes) {\n if (this.attributes.hasOwnProperty(attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n } // Append the children, also as HTML nodes\n\n\n for (var i = 0; i < this.children.length; i++) {\n node.appendChild(this.children[i].toNode());\n }\n\n return node;\n};\n/**\n * https://w3c.github.io/html-reference/syntax.html#syntax-attributes\n *\n * > Attribute Names must consist of one or more characters\n * other than the space characters, U+0000 NULL,\n * '\"', \"'\", \">\", \"/\", \"=\", the control characters,\n * and any characters that are not defined by Unicode.\n */\n\n\nvar invalidAttributeNameRegex = /[\\s\"'>/=\\x00-\\x1f]/;\n/**\n * Convert into an HTML markup string\n */\n\nvar toMarkup = function toMarkup(tagName) {\n var markup = \"<\" + tagName; // Add the class\n\n if (this.classes.length) {\n markup += \" class=\\\"\" + utils.escape(createClass(this.classes)) + \"\\\"\";\n }\n\n var styles = \"\"; // Add the styles, after hyphenation\n\n for (var style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n }\n }\n\n if (styles) {\n markup += \" style=\\\"\" + utils.escape(styles) + \"\\\"\";\n } // Add the attributes\n\n\n for (var attr in this.attributes) {\n if (this.attributes.hasOwnProperty(attr)) {\n if (invalidAttributeNameRegex.test(attr)) {\n throw new ParseError(\"Invalid attribute name '\" + attr + \"'\");\n }\n\n markup += \" \" + attr + \"=\\\"\" + utils.escape(this.attributes[attr]) + \"\\\"\";\n }\n }\n\n markup += \">\"; // Add the markup of the children, also as markup\n\n for (var i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n markup += \"</\" + tagName + \">\";\n return markup;\n}; // Making the type below exact with all optional fields doesn't work due to\n// - https://github.com/facebook/flow/issues/4582\n// - https://github.com/facebook/flow/issues/5688\n// However, since *all* fields are optional, $Shape<> works as suggested in 5688\n// above.\n// This type does not include all CSS properties. Additional properties should\n// be added as needed.\n\n\n/**\n * This node represents a span node, with a className, a list of children, and\n * an inline style. It also contains information about its height, depth, and\n * maxFontSize.\n *\n * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan\n * otherwise. This typesafety is important when HTML builders access a span's\n * children.\n */\nclass Span {\n constructor(classes, children, options, style) {\n this.children = void 0;\n this.attributes = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.width = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n initNode.call(this, classes, options, style);\n this.children = children || [];\n }\n /**\n * Sets an arbitrary attribute on the span. Warning: use this wisely. Not\n * all browsers support attributes the same, and having too many custom\n * attributes is probably bad.\n */\n\n\n setAttribute(attribute, value) {\n this.attributes[attribute] = value;\n }\n\n hasClass(className) {\n return this.classes.includes(className);\n }\n\n toNode() {\n return toNode.call(this, \"span\");\n }\n\n toMarkup() {\n return toMarkup.call(this, \"span\");\n }\n\n}\n/**\n * This node represents an anchor (<a>) element with a hyperlink. See `span`\n * for further details.\n */\n\nclass Anchor {\n constructor(href, classes, children, options) {\n this.children = void 0;\n this.attributes = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n initNode.call(this, classes, options);\n this.children = children || [];\n this.setAttribute('href', href);\n }\n\n setAttribute(attribute, value) {\n this.attributes[attribute] = value;\n }\n\n hasClass(className) {\n return this.classes.includes(className);\n }\n\n toNode() {\n return toNode.call(this, \"a\");\n }\n\n toMarkup() {\n return toMarkup.call(this, \"a\");\n }\n\n}\n/**\n * This node represents an image embed (<img>) element.\n */\n\nclass Img {\n constructor(src, alt, style) {\n this.src = void 0;\n this.alt = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n this.alt = alt;\n this.src = src;\n this.classes = [\"mord\"];\n this.style = style;\n }\n\n hasClass(className) {\n return this.classes.includes(className);\n }\n\n toNode() {\n var node = document.createElement(\"img\");\n node.src = this.src;\n node.alt = this.alt;\n node.className = \"mord\"; // Apply inline styles\n\n for (var style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n // $FlowFixMe\n node.style[style] = this.style[style];\n }\n }\n\n return node;\n }\n\n toMarkup() {\n var markup = \"<img src=\\\"\" + utils.escape(this.src) + \"\\\"\" + (\" alt=\\\"\" + utils.escape(this.alt) + \"\\\"\"); // Add the styles, after hyphenation\n\n var styles = \"\";\n\n for (var style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n }\n }\n\n if (styles) {\n markup += \" style=\\\"\" + utils.escape(styles) + \"\\\"\";\n }\n\n markup += \"'/>\";\n return markup;\n }\n\n}\nvar iCombinations = {\n 'î': '\\u0131\\u0302',\n 'ï': '\\u0131\\u0308',\n 'í': '\\u0131\\u0301',\n // 'ī': '\\u0131\\u0304', // enable when we add Extended Latin\n 'ì': '\\u0131\\u0300'\n};\n/**\n * A symbol node contains information about a single symbol. It either renders\n * to a single text node, or a span with a single text node in it, depending on\n * whether it has CSS classes, styles, or needs italic correction.\n */\n\nclass SymbolNode {\n constructor(text, height, depth, italic, skew, width, classes, style) {\n this.text = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.italic = void 0;\n this.skew = void 0;\n this.width = void 0;\n this.maxFontSize = void 0;\n this.classes = void 0;\n this.style = void 0;\n this.text = text;\n this.height = height || 0;\n this.depth = depth || 0;\n this.italic = italic || 0;\n this.skew = skew || 0;\n this.width = width || 0;\n this.classes = classes || [];\n this.style = style || {};\n this.maxFontSize = 0; // Mark text from non-Latin scripts with specific classes so that we\n // can specify which fonts to use. This allows us to render these\n // characters with a serif font in situations where the browser would\n // either default to a sans serif or render a placeholder character.\n // We use CSS class names like cjk_fallback, hangul_fallback and\n // brahmic_fallback. See ./unicodeScripts.js for the set of possible\n // script names\n\n var script = scriptFromCodepoint(this.text.charCodeAt(0));\n\n if (script) {\n this.classes.push(script + \"_fallback\");\n }\n\n if (/[îïíì]/.test(this.text)) {\n // add ī when we add Extended Latin\n this.text = iCombinations[this.text];\n }\n }\n\n hasClass(className) {\n return this.classes.includes(className);\n }\n /**\n * Creates a text node or span from a symbol node. Note that a span is only\n * created if it is needed.\n */\n\n\n toNode() {\n var node = document.createTextNode(this.text);\n var span = null;\n\n if (this.italic > 0) {\n span = document.createElement(\"span\");\n span.style.marginRight = makeEm(this.italic);\n }\n\n if (this.classes.length > 0) {\n span = span || document.createElement(\"span\");\n span.className = createClass(this.classes);\n }\n\n for (var style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n span = span || document.createElement(\"span\"); // $FlowFixMe Flow doesn't seem to understand span.style's type.\n\n span.style[style] = this.style[style];\n }\n }\n\n if (span) {\n span.appendChild(node);\n return span;\n } else {\n return node;\n }\n }\n /**\n * Creates markup for a symbol node.\n */\n\n\n toMarkup() {\n // TODO(alpert): More duplication than I'd like from\n // span.prototype.toMarkup and symbolNode.prototype.toNode...\n var needsSpan = false;\n var markup = \"<span\";\n\n if (this.classes.length) {\n needsSpan = true;\n markup += \" class=\\\"\";\n markup += utils.escape(createClass(this.classes));\n markup += \"\\\"\";\n }\n\n var styles = \"\";\n\n if (this.italic > 0) {\n styles += \"margin-right:\" + this.italic + \"em;\";\n }\n\n for (var style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n }\n }\n\n if (styles) {\n needsSpan = true;\n markup += \" style=\\\"\" + utils.escape(styles) + \"\\\"\";\n }\n\n var escaped = utils.escape(this.text);\n\n if (needsSpan) {\n markup += \">\";\n markup += escaped;\n markup += \"</span>\";\n return markup;\n } else {\n return escaped;\n }\n }\n\n}\n/**\n * SVG nodes are used to render stretchy wide elements.\n */\n\nclass SvgNode {\n constructor(children, attributes) {\n this.children = void 0;\n this.attributes = void 0;\n this.children = children || [];\n this.attributes = attributes || {};\n }\n\n toNode() {\n var svgNS = \"http://www.w3.org/2000/svg\";\n var node = document.createElementNS(svgNS, \"svg\"); // Apply attributes\n\n for (var attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n }\n\n for (var i = 0; i < this.children.length; i++) {\n node.appendChild(this.children[i].toNode());\n }\n\n return node;\n }\n\n toMarkup() {\n var markup = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\"\"; // Apply attributes\n\n for (var attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n markup += \" \" + attr + \"=\\\"\" + utils.escape(this.attributes[attr]) + \"\\\"\";\n }\n }\n\n markup += \">\";\n\n for (var i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n markup += \"</svg>\";\n return markup;\n }\n\n}\nclass PathNode {\n constructor(pathName, alternate) {\n this.pathName = void 0;\n this.alternate = void 0;\n this.pathName = pathName;\n this.alternate = alternate; // Used only for \\sqrt, \\phase, & tall delims\n }\n\n toNode() {\n var svgNS = \"http://www.w3.org/2000/svg\";\n var node = document.createElementNS(svgNS, \"path\");\n\n if (this.alternate) {\n node.setAttribute(\"d\", this.alternate);\n } else {\n node.setAttribute(\"d\", path[this.pathName]);\n }\n\n return node;\n }\n\n toMarkup() {\n if (this.alternate) {\n return \"<path d=\\\"\" + utils.escape(this.alternate) + \"\\\"/>\";\n } else {\n return \"<path d=\\\"\" + utils.escape(path[this.pathName]) + \"\\\"/>\";\n }\n }\n\n}\nclass LineNode {\n constructor(attributes) {\n this.attributes = void 0;\n this.attributes = attributes || {};\n }\n\n toNode() {\n var svgNS = \"http://www.w3.org/2000/svg\";\n var node = document.createElementNS(svgNS, \"line\"); // Apply attributes\n\n for (var attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n }\n\n return node;\n }\n\n toMarkup() {\n var markup = \"<line\";\n\n for (var attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n markup += \" \" + attr + \"=\\\"\" + utils.escape(this.attributes[attr]) + \"\\\"\";\n }\n }\n\n markup += \"/>\";\n return markup;\n }\n\n}\nfunction assertSymbolDomNode(group) {\n if (group instanceof SymbolNode) {\n return group;\n } else {\n throw new Error(\"Expected symbolNode but got \" + String(group) + \".\");\n }\n}\nfunction assertSpan(group) {\n if (group instanceof Span) {\n return group;\n } else {\n throw new Error(\"Expected span<HtmlDomNode> but got \" + String(group) + \".\");\n }\n}\n\n/**\n * This file holds a list of all no-argument functions and single-character\n * symbols (like 'a' or ';').\n *\n * For each of the symbols, there are three properties they can have:\n * - font (required): the font to be used for this symbol. Either \"main\" (the\n normal font), or \"ams\" (the ams fonts).\n * - group (required): the ParseNode group type the symbol should have (i.e.\n \"textord\", \"mathord\", etc).\n See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types\n * - replace: the character that this symbol or function should be\n * replaced with (i.e. \"\\phi\" has a replace value of \"\\u03d5\", the phi\n * character in the main font).\n *\n * The outermost map in the table indicates what mode the symbols should be\n * accepted in (e.g. \"math\" or \"text\").\n */\n// Some of these have a \"-token\" suffix since these are also used as `ParseNode`\n// types for raw text tokens, and we want to avoid conflicts with higher-level\n// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by\n// looking up the `symbols` map.\nvar ATOMS = {\n \"bin\": 1,\n \"close\": 1,\n \"inner\": 1,\n \"open\": 1,\n \"punct\": 1,\n \"rel\": 1\n};\nvar NON_ATOMS = {\n \"accent-token\": 1,\n \"mathord\": 1,\n \"op-token\": 1,\n \"spacing\": 1,\n \"textord\": 1\n};\nvar symbols = {\n \"math\": {},\n \"text\": {}\n};\n/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */\n\nfunction defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) {\n symbols[mode][name] = {\n font,\n group,\n replace\n };\n\n if (acceptUnicodeChar && replace) {\n symbols[mode][replace] = symbols[mode][name];\n }\n} // Some abbreviations for commonly used strings.\n// This helps minify the code, and also spotting typos using jshint.\n// modes:\n\nvar math = \"math\";\nvar text = \"text\"; // fonts:\n\nvar main = \"main\";\nvar ams = \"ams\"; // groups:\n\nvar accent = \"accent-token\";\nvar bin = \"bin\";\nvar close = \"close\";\nvar inner = \"inner\";\nvar mathord = \"mathord\";\nvar op = \"op-token\";\nvar open = \"open\";\nvar punct = \"punct\";\nvar rel = \"rel\";\nvar spacing = \"spacing\";\nvar textord = \"textord\"; // Now comes the symbol table\n// Relation Symbols\n\ndefineSymbol(math, main, rel, \"\\u2261\", \"\\\\equiv\", true);\ndefineSymbol(math, main, rel, \"\\u227a\", \"\\\\prec\", true);\ndefineSymbol(math, main, rel, \"\\u227b\", \"\\\\succ\", true);\ndefineSymbol(math, main, rel, \"\\u223c\", \"\\\\sim\", true);\ndefineSymbol(math, main, rel, \"\\u22a5\", \"\\\\perp\");\ndefineSymbol(math, main, rel, \"\\u2aaf\", \"\\\\preceq\", true);\ndefineSymbol(math, main, rel, \"\\u2ab0\", \"\\\\succeq\", true);\ndefineSymbol(math, main, rel, \"\\u2243\", \"\\\\simeq\", true);\ndefineSymbol(math, main, rel, \"\\u2223\", \"\\\\mid\", true);\ndefineSymbol(math, main, rel, \"\\u226a\", \"\\\\ll\", true);\ndefineSymbol(math, main, rel, \"\\u226b\", \"\\\\gg\", true);\ndefineSymbol(math, main, rel, \"\\u224d\", \"\\\\asymp\", true);\ndefineSymbol(math, main, rel, \"\\u2225\", \"\\\\parallel\");\ndefineSymbol(math, main, rel, \"\\u22c8\", \"\\\\bowtie\", true);\ndefineSymbol(math, main, rel, \"\\u2323\", \"\\\\smile\", true);\ndefineSymbol(math, main, rel, \"\\u2291\", \"\\\\sqsubseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2292\", \"\\\\sqsupseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2250\", \"\\\\doteq\", true);\ndefineSymbol(math, main, rel, \"\\u2322\", \"\\\\frown\", true);\ndefineSymbol(math, main, rel, \"\\u220b\", \"\\\\ni\", true);\ndefineSymbol(math, main, rel, \"\\u221d\", \"\\\\propto\", true);\ndefineSymbol(math, main, rel, \"\\u22a2\", \"\\\\vdash\", true);\ndefineSymbol(math, main, rel, \"\\u22a3\", \"\\\\dashv\", true);\ndefineSymbol(math, main, rel, \"\\u220b\", \"\\\\owns\"); // Punctuation\n\ndefineSymbol(math, main, punct, \"\\u002e\", \"\\\\ldotp\");\ndefineSymbol(math, main, punct, \"\\u22c5\", \"\\\\cdotp\"); // Misc Symbols\n\ndefineSymbol(math, main, textord, \"\\u0023\", \"\\\\#\");\ndefineSymbol(text, main, textord, \"\\u0023\", \"\\\\#\");\ndefineSymbol(math, main, textord, \"\\u0026\", \"\\\\&\");\ndefineSymbol(text, main, textord, \"\\u0026\", \"\\\\&\");\ndefineSymbol(math, main, textord, \"\\u2135\", \"\\\\aleph\", true);\ndefineSymbol(math, main, textord, \"\\u2200\", \"\\\\forall\", true);\ndefineSymbol(math, main, textord, \"\\u210f\", \"\\\\hbar\", true);\ndefineSymbol(math, main, textord, \"\\u2203\", \"\\\\exists\", true);\ndefineSymbol(math, main, textord, \"\\u2207\", \"\\\\nabla\", true);\ndefineSymbol(math, main, textord, \"\\u266d\", \"\\\\flat\", true);\ndefineSymbol(math, main, textord, \"\\u2113\", \"\\\\ell\", true);\ndefineSymbol(math, main, textord, \"\\u266e\", \"\\\\natural\", true);\ndefineSymbol(math, main, textord, \"\\u2663\", \"\\\\clubsuit\", true);\ndefineSymbol(math, main, textord, \"\\u2118\", \"\\\\wp\", true);\ndefineSymbol(math, main, textord, \"\\u266f\", \"\\\\sharp\", true);\ndefineSymbol(math, main, textord, \"\\u2662\", \"\\\\diamondsuit\", true);\ndefineSymbol(math, main, textord, \"\\u211c\", \"\\\\Re\", true);\ndefineSymbol(math, main, textord, \"\\u2661\", \"\\\\heartsuit\", true);\ndefineSymbol(math, main, textord, \"\\u2111\", \"\\\\Im\", true);\ndefineSymbol(math, main, textord, \"\\u2660\", \"\\\\spadesuit\", true);\ndefineSymbol(math, main, textord, \"\\u00a7\", \"\\\\S\", true);\ndefineSymbol(text, main, textord, \"\\u00a7\", \"\\\\S\");\ndefineSymbol(math, main, textord, \"\\u00b6\", \"\\\\P\", true);\ndefineSymbol(text, main, textord, \"\\u00b6\", \"\\\\P\"); // Math and Text\n\ndefineSymbol(math, main, textord, \"\\u2020\", \"\\\\dag\");\ndefineSymbol(text, main, textord, \"\\u2020\", \"\\\\dag\");\ndefineSymbol(text, main, textord, \"\\u2020\", \"\\\\textdagger\");\ndefineSymbol(math, main, textord, \"\\u2021\", \"\\\\ddag\");\ndefineSymbol(text, main, textord, \"\\u2021\", \"\\\\ddag\");\ndefineSymbol(text, main, textord, \"\\u2021\", \"\\\\textdaggerdbl\"); // Large Delimiters\n\ndefineSymbol(math, main, close, \"\\u23b1\", \"\\\\rmoustache\", true);\ndefineSymbol(math, main, open, \"\\u23b0\", \"\\\\lmoustache\", true);\ndefineSymbol(math, main, close, \"\\u27ef\", \"\\\\rgroup\", true);\ndefineSymbol(math, main, open, \"\\u27ee\", \"\\\\lgroup\", true); // Binary Operators\n\ndefineSymbol(math, main, bin, \"\\u2213\", \"\\\\mp\", true);\ndefineSymbol(math, main, bin, \"\\u2296\", \"\\\\ominus\", true);\ndefineSymbol(math, main, bin, \"\\u228e\", \"\\\\uplus\", true);\ndefineSymbol(math, main, bin, \"\\u2293\", \"\\\\sqcap\", true);\ndefineSymbol(math, main, bin, \"\\u2217\", \"\\\\ast\");\ndefineSymbol(math, main, bin, \"\\u2294\", \"\\\\sqcup\", true);\ndefineSymbol(math, main, bin, \"\\u25ef\", \"\\\\bigcirc\", true);\ndefineSymbol(math, main, bin, \"\\u2219\", \"\\\\bullet\", true);\ndefineSymbol(math, main, bin, \"\\u2021\", \"\\\\ddagger\");\ndefineSymbol(math, main, bin, \"\\u2240\", \"\\\\wr\", true);\ndefineSymbol(math, main, bin, \"\\u2a3f\", \"\\\\amalg\");\ndefineSymbol(math, main, bin, \"\\u0026\", \"\\\\And\"); // from amsmath\n// Arrow Symbols\n\ndefineSymbol(math, main, rel, \"\\u27f5\", \"\\\\longleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d0\", \"\\\\Leftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f8\", \"\\\\Longleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f6\", \"\\\\longrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d2\", \"\\\\Rightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f9\", \"\\\\Longrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2194\", \"\\\\leftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f7\", \"\\\\longleftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d4\", \"\\\\Leftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27fa\", \"\\\\Longleftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21a6\", \"\\\\mapsto\", true);\ndefineSymbol(math, main, rel, \"\\u27fc\", \"\\\\longmapsto\", true);\ndefineSymbol(math, main, rel, \"\\u2197\", \"\\\\nearrow\", true);\ndefineSymbol(math, main, rel, \"\\u21a9\", \"\\\\hookleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21aa\", \"\\\\hookrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2198\", \"\\\\searrow\", true);\ndefineSymbol(math, main, rel, \"\\u21bc\", \"\\\\leftharpoonup\", true);\ndefineSymbol(math, main, rel, \"\\u21c0\", \"\\\\rightharpoonup\", true);\ndefineSymbol(math, main, rel, \"\\u2199\", \"\\\\swarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21bd\", \"\\\\leftharpoondown\", true);\ndefineSymbol(math, main, rel, \"\\u21c1\", \"\\\\rightharpoondown\", true);\ndefineSymbol(math, main, rel, \"\\u2196\", \"\\\\nwarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21cc\", \"\\\\rightleftharpoons\", true); // AMS Negated Binary Relations\n\ndefineSymbol(math, ams, rel, \"\\u226e\", \"\\\\nless\", true); // Symbol names preceded by \"@\" each have a corresponding macro.\n\ndefineSymbol(math, ams, rel, \"\\ue010\", \"\\\\@nleqslant\");\ndefineSymbol(math, ams, rel, \"\\ue011\", \"\\\\@nleqq\");\ndefineSymbol(math, ams, rel, \"\\u2a87\", \"\\\\lneq\", true);\ndefineSymbol(math, ams, rel, \"\\u2268\", \"\\\\lneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue00c\", \"\\\\@lvertneqq\");\ndefineSymbol(math, ams, rel, \"\\u22e6\", \"\\\\lnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a89\", \"\\\\lnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2280\", \"\\\\nprec\", true); // unicode-math maps \\u22e0 to \\npreccurlyeq. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u22e0\", \"\\\\npreceq\", true);\ndefineSymbol(math, ams, rel, \"\\u22e8\", \"\\\\precnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab9\", \"\\\\precnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2241\", \"\\\\nsim\", true);\ndefineSymbol(math, ams, rel, \"\\ue006\", \"\\\\@nshortmid\");\ndefineSymbol(math, ams, rel, \"\\u2224\", \"\\\\nmid\", true);\ndefineSymbol(math, ams, rel, \"\\u22ac\", \"\\\\nvdash\", true);\ndefineSymbol(math, ams, rel, \"\\u22ad\", \"\\\\nvDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22ea\", \"\\\\ntriangleleft\");\ndefineSymbol(math, ams, rel, \"\\u22ec\", \"\\\\ntrianglelefteq\", true);\ndefineSymbol(math, ams, rel, \"\\u228a\", \"\\\\subsetneq\", true);\ndefineSymbol(math, ams, rel, \"\\ue01a\", \"\\\\@varsubsetneq\");\ndefineSymbol(math, ams, rel, \"\\u2acb\", \"\\\\subsetneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue017\", \"\\\\@varsubsetneqq\");\ndefineSymbol(math, ams, rel, \"\\u226f\", \"\\\\ngtr\", true);\ndefineSymbol(math, ams, rel, \"\\ue00f\", \"\\\\@ngeqslant\");\ndefineSymbol(math, ams, rel, \"\\ue00e\", \"\\\\@ngeqq\");\ndefineSymbol(math, ams, rel, \"\\u2a88\", \"\\\\gneq\", true);\ndefineSymbol(math, ams, rel, \"\\u2269\", \"\\\\gneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue00d\", \"\\\\@gvertneqq\");\ndefineSymbol(math, ams, rel, \"\\u22e7\", \"\\\\gnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8a\", \"\\\\gnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2281\", \"\\\\nsucc\", true); // unicode-math maps \\u22e1 to \\nsucccurlyeq. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u22e1\", \"\\\\nsucceq\", true);\ndefineSymbol(math, ams, rel, \"\\u22e9\", \"\\\\succnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2aba\", \"\\\\succnapprox\", true); // unicode-math maps \\u2246 to \\simneqq. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u2246\", \"\\\\ncong\", true);\ndefineSymbol(math, ams, rel, \"\\ue007\", \"\\\\@nshortparallel\");\ndefineSymbol(math, ams, rel, \"\\u2226\", \"\\\\nparallel\", true);\ndefineSymbol(math, ams, rel, \"\\u22af\", \"\\\\nVDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22eb\", \"\\\\ntriangleright\");\ndefineSymbol(math, ams, rel, \"\\u22ed\", \"\\\\ntrianglerighteq\", true);\ndefineSymbol(math, ams, rel, \"\\ue018\", \"\\\\@nsupseteqq\");\ndefineSymbol(math, ams, rel, \"\\u228b\", \"\\\\supsetneq\", true);\ndefineSymbol(math, ams, rel, \"\\ue01b\", \"\\\\@varsupsetneq\");\ndefineSymbol(math, ams, rel, \"\\u2acc\", \"\\\\supsetneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue019\", \"\\\\@varsupsetneqq\");\ndefineSymbol(math, ams, rel, \"\\u22ae\", \"\\\\nVdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab5\", \"\\\\precneqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab6\", \"\\\\succneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue016\", \"\\\\@nsubseteqq\");\ndefineSymbol(math, ams, bin, \"\\u22b4\", \"\\\\unlhd\");\ndefineSymbol(math, ams, bin, \"\\u22b5\", \"\\\\unrhd\"); // AMS Negated Arrows\n\ndefineSymbol(math, ams, rel, \"\\u219a\", \"\\\\nleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u219b\", \"\\\\nrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21cd\", \"\\\\nLeftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21cf\", \"\\\\nRightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21ae\", \"\\\\nleftrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21ce\", \"\\\\nLeftrightarrow\", true); // AMS Misc\n\ndefineSymbol(math, ams, rel, \"\\u25b3\", \"\\\\vartriangle\");\ndefineSymbol(math, ams, textord, \"\\u210f\", \"\\\\hslash\");\ndefineSymbol(math, ams, textord, \"\\u25bd\", \"\\\\triangledown\");\ndefineSymbol(math, ams, textord, \"\\u25ca\", \"\\\\lozenge\");\ndefineSymbol(math, ams, textord, \"\\u24c8\", \"\\\\circledS\");\ndefineSymbol(math, ams, textord, \"\\u00ae\", \"\\\\circledR\");\ndefineSymbol(text, ams, textord, \"\\u00ae\", \"\\\\circledR\");\ndefineSymbol(math, ams, textord, \"\\u2221\", \"\\\\measuredangle\", true);\ndefineSymbol(math, ams, textord, \"\\u2204\", \"\\\\nexists\");\ndefineSymbol(math, ams, textord, \"\\u2127\", \"\\\\mho\");\ndefineSymbol(math, ams, textord, \"\\u2132\", \"\\\\Finv\", true);\ndefineSymbol(math, ams, textord, \"\\u2141\", \"\\\\Game\", true);\ndefineSymbol(math, ams, textord, \"\\u2035\", \"\\\\backprime\");\ndefineSymbol(math, ams, textord, \"\\u25b2\", \"\\\\blacktriangle\");\ndefineSymbol(math, ams, textord, \"\\u25bc\", \"\\\\blacktriangledown\");\ndefineSymbol(math, ams, textord, \"\\u25a0\", \"\\\\blacksquare\");\ndefineSymbol(math, ams, textord, \"\\u29eb\", \"\\\\blacklozenge\");\ndefineSymbol(math, ams, textord, \"\\u2605\", \"\\\\bigstar\");\ndefineSymbol(math, ams, textord, \"\\u2222\", \"\\\\sphericalangle\", true);\ndefineSymbol(math, ams, textord, \"\\u2201\", \"\\\\complement\", true); // unicode-math maps U+F0 to \\matheth. We map to AMS function \\eth\n\ndefineSymbol(math, ams, textord, \"\\u00f0\", \"\\\\eth\", true);\ndefineSymbol(text, main, textord, \"\\u00f0\", \"\\u00f0\");\ndefineSymbol(math, ams, textord, \"\\u2571\", \"\\\\diagup\");\ndefineSymbol(math, ams, textord, \"\\u2572\", \"\\\\diagdown\");\ndefineSymbol(math, ams, textord, \"\\u25a1\", \"\\\\square\");\ndefineSymbol(math, ams, textord, \"\\u25a1\", \"\\\\Box\");\ndefineSymbol(math, ams, textord, \"\\u25ca\", \"\\\\Diamond\"); // unicode-math maps U+A5 to \\mathyen. We map to AMS function \\yen\n\ndefineSymbol(math, ams, textord, \"\\u00a5\", \"\\\\yen\", true);\ndefineSymbol(text, ams, textord, \"\\u00a5\", \"\\\\yen\", true);\ndefineSymbol(math, ams, textord, \"\\u2713\", \"\\\\checkmark\", true);\ndefineSymbol(text, ams, textord, \"\\u2713\", \"\\\\checkmark\"); // AMS Hebrew\n\ndefineSymbol(math, ams, textord, \"\\u2136\", \"\\\\beth\", true);\ndefineSymbol(math, ams, textord, \"\\u2138\", \"\\\\daleth\", true);\ndefineSymbol(math, ams, textord, \"\\u2137\", \"\\\\gimel\", true); // AMS Greek\n\ndefineSymbol(math, ams, textord, \"\\u03dd\", \"\\\\digamma\", true);\ndefineSymbol(math, ams, textord, \"\\u03f0\", \"\\\\varkappa\"); // AMS Delimiters\n\ndefineSymbol(math, ams, open, \"\\u250c\", \"\\\\@ulcorner\", true);\ndefineSymbol(math, ams, close, \"\\u2510\", \"\\\\@urcorner\", true);\ndefineSymbol(math, ams, open, \"\\u2514\", \"\\\\@llcorner\", true);\ndefineSymbol(math, ams, close, \"\\u2518\", \"\\\\@lrcorner\", true); // AMS Binary Relations\n\ndefineSymbol(math, ams, rel, \"\\u2266\", \"\\\\leqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2a7d\", \"\\\\leqslant\", true);\ndefineSymbol(math, ams, rel, \"\\u2a95\", \"\\\\eqslantless\", true);\ndefineSymbol(math, ams, rel, \"\\u2272\", \"\\\\lesssim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a85\", \"\\\\lessapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u224a\", \"\\\\approxeq\", true);\ndefineSymbol(math, ams, bin, \"\\u22d6\", \"\\\\lessdot\");\ndefineSymbol(math, ams, rel, \"\\u22d8\", \"\\\\lll\", true);\ndefineSymbol(math, ams, rel, \"\\u2276\", \"\\\\lessgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u22da\", \"\\\\lesseqgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8b\", \"\\\\lesseqqgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2251\", \"\\\\doteqdot\");\ndefineSymbol(math, ams, rel, \"\\u2253\", \"\\\\risingdotseq\", true);\ndefineSymbol(math, ams, rel, \"\\u2252\", \"\\\\fallingdotseq\", true);\ndefineSymbol(math, ams, rel, \"\\u223d\", \"\\\\backsim\", true);\ndefineSymbol(math, ams, rel, \"\\u22cd\", \"\\\\backsimeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2ac5\", \"\\\\subseteqq\", true);\ndefineSymbol(math, ams, rel, \"\\u22d0\", \"\\\\Subset\", true);\ndefineSymbol(math, ams, rel, \"\\u228f\", \"\\\\sqsubset\", true);\ndefineSymbol(math, ams, rel, \"\\u227c\", \"\\\\preccurlyeq\", true);\ndefineSymbol(math, ams, rel, \"\\u22de\", \"\\\\curlyeqprec\", true);\ndefineSymbol(math, ams, rel, \"\\u227e\", \"\\\\precsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab7\", \"\\\\precapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u22b2\", \"\\\\vartriangleleft\");\ndefineSymbol(math, ams, rel, \"\\u22b4\", \"\\\\trianglelefteq\");\ndefineSymbol(math, ams, rel, \"\\u22a8\", \"\\\\vDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22aa\", \"\\\\Vvdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2323\", \"\\\\smallsmile\");\ndefineSymbol(math, ams, rel, \"\\u2322\", \"\\\\smallfrown\");\ndefineSymbol(math, ams, rel, \"\\u224f\", \"\\\\bumpeq\", true);\ndefineSymbol(math, ams, rel, \"\\u224e\", \"\\\\Bumpeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2267\", \"\\\\geqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2a7e\", \"\\\\geqslant\", true);\ndefineSymbol(math, ams, rel, \"\\u2a96\", \"\\\\eqslantgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2273\", \"\\\\gtrsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a86\", \"\\\\gtrapprox\", true);\ndefineSymbol(math, ams, bin, \"\\u22d7\", \"\\\\gtrdot\");\ndefineSymbol(math, ams, rel, \"\\u22d9\", \"\\\\ggg\", true);\ndefineSymbol(math, ams, rel, \"\\u2277\", \"\\\\gtrless\", true);\ndefineSymbol(math, ams, rel, \"\\u22db\", \"\\\\gtreqless\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8c\", \"\\\\gtreqqless\", true);\ndefineSymbol(math, ams, rel, \"\\u2256\", \"\\\\eqcirc\", true);\ndefineSymbol(math, ams, rel, \"\\u2257\", \"\\\\circeq\", true);\ndefineSymbol(math, ams, rel, \"\\u225c\", \"\\\\triangleq\", true);\ndefineSymbol(math, ams, rel, \"\\u223c\", \"\\\\thicksim\");\ndefineSymbol(math, ams, rel, \"\\u2248\", \"\\\\thickapprox\");\ndefineSymbol(math, ams, rel, \"\\u2ac6\", \"\\\\supseteqq\", true);\ndefineSymbol(math, ams, rel, \"\\u22d1\", \"\\\\Supset\", true);\ndefineSymbol(math, ams, rel, \"\\u2290\", \"\\\\sqsupset\", true);\ndefineSymbol(math, ams, rel, \"\\u227d\", \"\\\\succcurlyeq\", true);\ndefineSymbol(math, ams, rel, \"\\u22df\", \"\\\\curlyeqsucc\", true);\ndefineSymbol(math, ams, rel, \"\\u227f\", \"\\\\succsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab8\", \"\\\\succapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u22b3\", \"\\\\vartriangleright\");\ndefineSymbol(math, ams, rel, \"\\u22b5\", \"\\\\trianglerighteq\");\ndefineSymbol(math, ams, rel, \"\\u22a9\", \"\\\\Vdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2223\", \"\\\\shortmid\");\ndefineSymbol(math, ams, rel, \"\\u2225\", \"\\\\shortparallel\");\ndefineSymbol(math, ams, rel, \"\\u226c\", \"\\\\between\", true);\ndefineSymbol(math, ams, rel, \"\\u22d4\", \"\\\\pitchfork\", true);\ndefineSymbol(math, ams, rel, \"\\u221d\", \"\\\\varpropto\");\ndefineSymbol(math, ams, rel, \"\\u25c0\", \"\\\\blacktriangleleft\"); // unicode-math says that \\therefore is a mathord atom.\n// We kept the amssymb atom type, which is rel.\n\ndefineSymbol(math, ams, rel, \"\\u2234\", \"\\\\therefore\", true);\ndefineSymbol(math, ams, rel, \"\\u220d\", \"\\\\backepsilon\");\ndefineSymbol(math, ams, rel, \"\\u25b6\", \"\\\\blacktriangleright\"); // unicode-math says that \\because is a mathord atom.\n// We kept the amssymb atom type, which is rel.\n\ndefineSymbol(math, ams, rel, \"\\u2235\", \"\\\\because\", true);\ndefineSymbol(math, ams, rel, \"\\u22d8\", \"\\\\llless\");\ndefineSymbol(math, ams, rel, \"\\u22d9\", \"\\\\gggtr\");\ndefineSymbol(math, ams, bin, \"\\u22b2\", \"\\\\lhd\");\ndefineSymbol(math, ams, bin, \"\\u22b3\", \"\\\\rhd\");\ndefineSymbol(math, ams, rel, \"\\u2242\", \"\\\\eqsim\", true);\ndefineSymbol(math, main, rel, \"\\u22c8\", \"\\\\Join\");\ndefineSymbol(math, ams, rel, \"\\u2251\", \"\\\\Doteq\", true); // AMS Binary Operators\n\ndefineSymbol(math, ams, bin, \"\\u2214\", \"\\\\dotplus\", true);\ndefineSymbol(math, ams, bin, \"\\u2216\", \"\\\\smallsetminus\");\ndefineSymbol(math, ams, bin, \"\\u22d2\", \"\\\\Cap\", true);\ndefineSymbol(math, ams, bin, \"\\u22d3\", \"\\\\Cup\", true);\ndefineSymbol(math, ams, bin, \"\\u2a5e\", \"\\\\doublebarwedge\", true);\ndefineSymbol(math, ams, bin, \"\\u229f\", \"\\\\boxminus\", true);\ndefineSymbol(math, ams, bin, \"\\u229e\", \"\\\\boxplus\", true);\ndefineSymbol(math, ams, bin, \"\\u22c7\", \"\\\\divideontimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22c9\", \"\\\\ltimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22ca\", \"\\\\rtimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cb\", \"\\\\leftthreetimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cc\", \"\\\\rightthreetimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cf\", \"\\\\curlywedge\", true);\ndefineSymbol(math, ams, bin, \"\\u22ce\", \"\\\\curlyvee\", true);\ndefineSymbol(math, ams, bin, \"\\u229d\", \"\\\\circleddash\", true);\ndefineSymbol(math, ams, bin, \"\\u229b\", \"\\\\circledast\", true);\ndefineSymbol(math, ams, bin, \"\\u22c5\", \"\\\\centerdot\");\ndefineSymbol(math, ams, bin, \"\\u22ba\", \"\\\\intercal\", true);\ndefineSymbol(math, ams, bin, \"\\u22d2\", \"\\\\doublecap\");\ndefineSymbol(math, ams, bin, \"\\u22d3\", \"\\\\doublecup\");\ndefineSymbol(math, ams, bin, \"\\u22a0\", \"\\\\boxtimes\", true); // AMS Arrows\n// Note: unicode-math maps \\u21e2 to their own function \\rightdasharrow.\n// We'll map it to AMS function \\dashrightarrow. It produces the same atom.\n\ndefineSymbol(math, ams, rel, \"\\u21e2\", \"\\\\dashrightarrow\", true); // unicode-math maps \\u21e0 to \\leftdasharrow. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u21e0\", \"\\\\dashleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21c7\", \"\\\\leftleftarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21c6\", \"\\\\leftrightarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21da\", \"\\\\Lleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u219e\", \"\\\\twoheadleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21a2\", \"\\\\leftarrowtail\", true);\ndefineSymbol(math, ams, rel, \"\\u21ab\", \"\\\\looparrowleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21cb\", \"\\\\leftrightharpoons\", true);\ndefineSymbol(math, ams, rel, \"\\u21b6\", \"\\\\curvearrowleft\", true); // unicode-math maps \\u21ba to \\acwopencirclearrow. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u21ba\", \"\\\\circlearrowleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21b0\", \"\\\\Lsh\", true);\ndefineSymbol(math, ams, rel, \"\\u21c8\", \"\\\\upuparrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21bf\", \"\\\\upharpoonleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21c3\", \"\\\\downharpoonleft\", true);\ndefineSymbol(math, main, rel, \"\\u22b6\", \"\\\\origof\", true); // not in font\n\ndefineSymbol(math, main, rel, \"\\u22b7\", \"\\\\imageof\", true); // not in font\n\ndefineSymbol(math, ams, rel, \"\\u22b8\", \"\\\\multimap\", true);\ndefineSymbol(math, ams, rel, \"\\u21ad\", \"\\\\leftrightsquigarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21c9\", \"\\\\rightrightarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21c4\", \"\\\\rightleftarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21a0\", \"\\\\twoheadrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21a3\", \"\\\\rightarrowtail\", true);\ndefineSymbol(math, ams, rel, \"\\u21ac\", \"\\\\looparrowright\", true);\ndefineSymbol(math, ams, rel, \"\\u21b7\", \"\\\\curvearrowright\", true); // unicode-math maps \\u21bb to \\cwopencirclearrow. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u21bb\", \"\\\\circlearrowright\", true);\ndefineSymbol(math, ams, rel, \"\\u21b1\", \"\\\\Rsh\", true);\ndefineSymbol(math, ams, rel, \"\\u21ca\", \"\\\\downdownarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21be\", \"\\\\upharpoonright\", true);\ndefineSymbol(math, ams, rel, \"\\u21c2\", \"\\\\downharpoonright\", true);\ndefineSymbol(math, ams, rel, \"\\u21dd\", \"\\\\rightsquigarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21dd\", \"\\\\leadsto\");\ndefineSymbol(math, ams, rel, \"\\u21db\", \"\\\\Rrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21be\", \"\\\\restriction\");\ndefineSymbol(math, main, textord, \"\\u2018\", \"`\");\ndefineSymbol(math, main, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, main, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, main, textord, \"$\", \"\\\\textdollar\");\ndefineSymbol(math, main, textord, \"%\", \"\\\\%\");\ndefineSymbol(text, main, textord, \"%\", \"\\\\%\");\ndefineSymbol(math, main, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, main, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, main, textord, \"_\", \"\\\\textunderscore\");\ndefineSymbol(math, main, textord, \"\\u2220\", \"\\\\angle\", true);\ndefineSymbol(math, main, textord, \"\\u221e\", \"\\\\infty\", true);\ndefineSymbol(math, main, textord, \"\\u2032\", \"\\\\prime\");\ndefineSymbol(math, main, textord, \"\\u25b3\", \"\\\\triangle\");\ndefineSymbol(math, main, textord, \"\\u0393\", \"\\\\Gamma\", true);\ndefineSymbol(math, main, textord, \"\\u0394\", \"\\\\Delta\", true);\ndefineSymbol(math, main, textord, \"\\u0398\", \"\\\\Theta\", true);\ndefineSymbol(math, main, textord, \"\\u039b\", \"\\\\Lambda\", true);\ndefineSymbol(math, main, textord, \"\\u039e\", \"\\\\Xi\", true);\ndefineSymbol(math, main, textord, \"\\u03a0\", \"\\\\Pi\", true);\ndefineSymbol(math, main, textord, \"\\u03a3\", \"\\\\Sigma\", true);\ndefineSymbol(math, main, textord, \"\\u03a5\", \"\\\\Upsilon\", true);\ndefineSymbol(math, main, textord, \"\\u03a6\", \"\\\\Phi\", true);\ndefineSymbol(math, main, textord, \"\\u03a8\", \"\\\\Psi\", true);\ndefineSymbol(math, main, textord, \"\\u03a9\", \"\\\\Omega\", true);\ndefineSymbol(math, main, textord, \"A\", \"\\u0391\");\ndefineSymbol(math, main, textord, \"B\", \"\\u0392\");\ndefineSymbol(math, main, textord, \"E\", \"\\u0395\");\ndefineSymbol(math, main, textord, \"Z\", \"\\u0396\");\ndefineSymbol(math, main, textord, \"H\", \"\\u0397\");\ndefineSymbol(math, main, textord, \"I\", \"\\u0399\");\ndefineSymbol(math, main, textord, \"K\", \"\\u039A\");\ndefineSymbol(math, main, textord, \"M\", \"\\u039C\");\ndefineSymbol(math, main, textord, \"N\", \"\\u039D\");\ndefineSymbol(math, main, textord, \"O\", \"\\u039F\");\ndefineSymbol(math, main, textord, \"P\", \"\\u03A1\");\ndefineSymbol(math, main, textord, \"T\", \"\\u03A4\");\ndefineSymbol(math, main, textord, \"X\", \"\\u03A7\");\ndefineSymbol(math, main, textord, \"\\u00ac\", \"\\\\neg\", true);\ndefineSymbol(math, main, textord, \"\\u00ac\", \"\\\\lnot\");\ndefineSymbol(math, main, textord, \"\\u22a4\", \"\\\\top\");\ndefineSymbol(math, main, textord, \"\\u22a5\", \"\\\\bot\");\ndefineSymbol(math, main, textord, \"\\u2205\", \"\\\\emptyset\");\ndefineSymbol(math, ams, textord, \"\\u2205\", \"\\\\varnothing\");\ndefineSymbol(math, main, mathord, \"\\u03b1\", \"\\\\alpha\", true);\ndefineSymbol(math, main, mathord, \"\\u03b2\", \"\\\\beta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b3\", \"\\\\gamma\", true);\ndefineSymbol(math, main, mathord, \"\\u03b4\", \"\\\\delta\", true);\ndefineSymbol(math, main, mathord, \"\\u03f5\", \"\\\\epsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03b6\", \"\\\\zeta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b7\", \"\\\\eta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b8\", \"\\\\theta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b9\", \"\\\\iota\", true);\ndefineSymbol(math, main, mathord, \"\\u03ba\", \"\\\\kappa\", true);\ndefineSymbol(math, main, mathord, \"\\u03bb\", \"\\\\lambda\", true);\ndefineSymbol(math, main, mathord, \"\\u03bc\", \"\\\\mu\", true);\ndefineSymbol(math, main, mathord, \"\\u03bd\", \"\\\\nu\", true);\ndefineSymbol(math, main, mathord, \"\\u03be\", \"\\\\xi\", true);\ndefineSymbol(math, main, mathord, \"\\u03bf\", \"\\\\omicron\", true);\ndefineSymbol(math, main, mathord, \"\\u03c0\", \"\\\\pi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c1\", \"\\\\rho\", true);\ndefineSymbol(math, main, mathord, \"\\u03c3\", \"\\\\sigma\", true);\ndefineSymbol(math, main, mathord, \"\\u03c4\", \"\\\\tau\", true);\ndefineSymbol(math, main, mathord, \"\\u03c5\", \"\\\\upsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03d5\", \"\\\\phi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c7\", \"\\\\chi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c8\", \"\\\\psi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c9\", \"\\\\omega\", true);\ndefineSymbol(math, main, mathord, \"\\u03b5\", \"\\\\varepsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03d1\", \"\\\\vartheta\", true);\ndefineSymbol(math, main, mathord, \"\\u03d6\", \"\\\\varpi\", true);\ndefineSymbol(math, main, mathord, \"\\u03f1\", \"\\\\varrho\", true);\ndefineSymbol(math, main, mathord, \"\\u03c2\", \"\\\\varsigma\", true);\ndefineSymbol(math, main, mathord, \"\\u03c6\", \"\\\\varphi\", true);\ndefineSymbol(math, main, bin, \"\\u2217\", \"*\", true);\ndefineSymbol(math, main, bin, \"+\", \"+\");\ndefineSymbol(math, main, bin, \"\\u2212\", \"-\", true);\ndefineSymbol(math, main, bin, \"\\u22c5\", \"\\\\cdot\", true);\ndefineSymbol(math, main, bin, \"\\u2218\", \"\\\\circ\", true);\ndefineSymbol(math, main, bin, \"\\u00f7\", \"\\\\div\", true);\ndefineSymbol(math, main, bin, \"\\u00b1\", \"\\\\pm\", true);\ndefineSymbol(math, main, bin, \"\\u00d7\", \"\\\\times\", true);\ndefineSymbol(math, main, bin, \"\\u2229\", \"\\\\cap\", true);\ndefineSymbol(math, main, bin, \"\\u222a\", \"\\\\cup\", true);\ndefineSymbol(math, main, bin, \"\\u2216\", \"\\\\setminus\", true);\ndefineSymbol(math, main, bin, \"\\u2227\", \"\\\\land\");\ndefineSymbol(math, main, bin, \"\\u2228\", \"\\\\lor\");\ndefineSymbol(math, main, bin, \"\\u2227\", \"\\\\wedge\", true);\ndefineSymbol(math, main, bin, \"\\u2228\", \"\\\\vee\", true);\ndefineSymbol(math, main, textord, \"\\u221a\", \"\\\\surd\");\ndefineSymbol(math, main, open, \"\\u27e8\", \"\\\\langle\", true);\ndefineSymbol(math, main, open, \"\\u2223\", \"\\\\lvert\");\ndefineSymbol(math, main, open, \"\\u2225\", \"\\\\lVert\");\ndefineSymbol(math, main, close, \"?\", \"?\");\ndefineSymbol(math, main, close, \"!\", \"!\");\ndefineSymbol(math, main, close, \"\\u27e9\", \"\\\\rangle\", true);\ndefineSymbol(math, main, close, \"\\u2223\", \"\\\\rvert\");\ndefineSymbol(math, main, close, \"\\u2225\", \"\\\\rVert\");\ndefineSymbol(math, main, rel, \"=\", \"=\");\ndefineSymbol(math, main, rel, \":\", \":\");\ndefineSymbol(math, main, rel, \"\\u2248\", \"\\\\approx\", true);\ndefineSymbol(math, main, rel, \"\\u2245\", \"\\\\cong\", true);\ndefineSymbol(math, main, rel, \"\\u2265\", \"\\\\ge\");\ndefineSymbol(math, main, rel, \"\\u2265\", \"\\\\geq\", true);\ndefineSymbol(math, main, rel, \"\\u2190\", \"\\\\gets\");\ndefineSymbol(math, main, rel, \">\", \"\\\\gt\", true);\ndefineSymbol(math, main, rel, \"\\u2208\", \"\\\\in\", true);\ndefineSymbol(math, main, rel, \"\\ue020\", \"\\\\@not\");\ndefineSymbol(math, main, rel, \"\\u2282\", \"\\\\subset\", true);\ndefineSymbol(math, main, rel, \"\\u2283\", \"\\\\supset\", true);\ndefineSymbol(math, main, rel, \"\\u2286\", \"\\\\subseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2287\", \"\\\\supseteq\", true);\ndefineSymbol(math, ams, rel, \"\\u2288\", \"\\\\nsubseteq\", true);\ndefineSymbol(math, ams, rel, \"\\u2289\", \"\\\\nsupseteq\", true);\ndefineSymbol(math, main, rel, \"\\u22a8\", \"\\\\models\");\ndefineSymbol(math, main, rel, \"\\u2190\", \"\\\\leftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2264\", \"\\\\le\");\ndefineSymbol(math, main, rel, \"\\u2264\", \"\\\\leq\", true);\ndefineSymbol(math, main, rel, \"<\", \"\\\\lt\", true);\ndefineSymbol(math, main, rel, \"\\u2192\", \"\\\\rightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2192\", \"\\\\to\");\ndefineSymbol(math, ams, rel, \"\\u2271\", \"\\\\ngeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2270\", \"\\\\nleq\", true);\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\ \");\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\space\"); // Ref: LaTeX Source 2e: \\DeclareRobustCommand{\\nobreakspace}{%\n\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\nobreakspace\");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\ \");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \" \");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\space\");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\nobreakspace\");\ndefineSymbol(math, main, spacing, null, \"\\\\nobreak\");\ndefineSymbol(math, main, spacing, null, \"\\\\allowbreak\");\ndefineSymbol(math, main, punct, \",\", \",\");\ndefineSymbol(math, main, punct, \";\", \";\");\ndefineSymbol(math, ams, bin, \"\\u22bc\", \"\\\\barwedge\", true);\ndefineSymbol(math, ams, bin, \"\\u22bb\", \"\\\\veebar\", true);\ndefineSymbol(math, main, bin, \"\\u2299\", \"\\\\odot\", true);\ndefineSymbol(math, main, bin, \"\\u2295\", \"\\\\oplus\", true);\ndefineSymbol(math, main, bin, \"\\u2297\", \"\\\\otimes\", true);\ndefineSymbol(math, main, textord, \"\\u2202\", \"\\\\partial\", true);\ndefineSymbol(math, main, bin, \"\\u2298\", \"\\\\oslash\", true);\ndefineSymbol(math, ams, bin, \"\\u229a\", \"\\\\circledcirc\", true);\ndefineSymbol(math, ams, bin, \"\\u22a1\", \"\\\\boxdot\", true);\ndefineSymbol(math, main, bin, \"\\u25b3\", \"\\\\bigtriangleup\");\ndefineSymbol(math, main, bin, \"\\u25bd\", \"\\\\bigtriangledown\");\ndefineSymbol(math, main, bin, \"\\u2020\", \"\\\\dagger\");\ndefineSymbol(math, main, bin, \"\\u22c4\", \"\\\\diamond\");\ndefineSymbol(math, main, bin, \"\\u22c6\", \"\\\\star\");\ndefineSymbol(math, main, bin, \"\\u25c3\", \"\\\\triangleleft\");\ndefineSymbol(math, main, bin, \"\\u25b9\", \"\\\\triangleright\");\ndefineSymbol(math, main, open, \"{\", \"\\\\{\");\ndefineSymbol(text, main, textord, \"{\", \"\\\\{\");\ndefineSymbol(text, main, textord, \"{\", \"\\\\textbraceleft\");\ndefineSymbol(math, main, close, \"}\", \"\\\\}\");\ndefineSymbol(text, main, textord, \"}\", \"\\\\}\");\ndefineSymbol(text, main, textord, \"}\", \"\\\\textbraceright\");\ndefineSymbol(math, main, open, \"{\", \"\\\\lbrace\");\ndefineSymbol(math, main, close, \"}\", \"\\\\rbrace\");\ndefineSymbol(math, main, open, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(text, main, textord, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(math, main, close, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(text, main, textord, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(math, main, open, \"(\", \"\\\\lparen\", true);\ndefineSymbol(math, main, close, \")\", \"\\\\rparen\", true);\ndefineSymbol(text, main, textord, \"<\", \"\\\\textless\", true); // in T1 fontenc\n\ndefineSymbol(text, main, textord, \">\", \"\\\\textgreater\", true); // in T1 fontenc\n\ndefineSymbol(math, main, open, \"\\u230a\", \"\\\\lfloor\", true);\ndefineSymbol(math, main, close, \"\\u230b\", \"\\\\rfloor\", true);\ndefineSymbol(math, main, open, \"\\u2308\", \"\\\\lceil\", true);\ndefineSymbol(math, main, close, \"\\u2309\", \"\\\\rceil\", true);\ndefineSymbol(math, main, textord, \"\\\\\", \"\\\\backslash\");\ndefineSymbol(math, main, textord, \"\\u2223\", \"|\");\ndefineSymbol(math, main, textord, \"\\u2223\", \"\\\\vert\");\ndefineSymbol(text, main, textord, \"|\", \"\\\\textbar\", true); // in T1 fontenc\n\ndefineSymbol(math, main, textord, \"\\u2225\", \"\\\\|\");\ndefineSymbol(math, main, textord, \"\\u2225\", \"\\\\Vert\");\ndefineSymbol(text, main, textord, \"\\u2225\", \"\\\\textbardbl\");\ndefineSymbol(text, main, textord, \"~\", \"\\\\textasciitilde\");\ndefineSymbol(text, main, textord, \"\\\\\", \"\\\\textbackslash\");\ndefineSymbol(text, main, textord, \"^\", \"\\\\textasciicircum\");\ndefineSymbol(math, main, rel, \"\\u2191\", \"\\\\uparrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d1\", \"\\\\Uparrow\", true);\ndefineSymbol(math, main, rel, \"\\u2193\", \"\\\\downarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d3\", \"\\\\Downarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2195\", \"\\\\updownarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d5\", \"\\\\Updownarrow\", true);\ndefineSymbol(math, main, op, \"\\u2210\", \"\\\\coprod\");\ndefineSymbol(math, main, op, \"\\u22c1\", \"\\\\bigvee\");\ndefineSymbol(math, main, op, \"\\u22c0\", \"\\\\bigwedge\");\ndefineSymbol(math, main, op, \"\\u2a04\", \"\\\\biguplus\");\ndefineSymbol(math, main, op, \"\\u22c2\", \"\\\\bigcap\");\ndefineSymbol(math, main, op, \"\\u22c3\", \"\\\\bigcup\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\int\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\intop\");\ndefineSymbol(math, main, op, \"\\u222c\", \"\\\\iint\");\ndefineSymbol(math, main, op, \"\\u222d\", \"\\\\iiint\");\ndefineSymbol(math, main, op, \"\\u220f\", \"\\\\prod\");\ndefineSymbol(math, main, op, \"\\u2211\", \"\\\\sum\");\ndefineSymbol(math, main, op, \"\\u2a02\", \"\\\\bigotimes\");\ndefineSymbol(math, main, op, \"\\u2a01\", \"\\\\bigoplus\");\ndefineSymbol(math, main, op, \"\\u2a00\", \"\\\\bigodot\");\ndefineSymbol(math, main, op, \"\\u222e\", \"\\\\oint\");\ndefineSymbol(math, main, op, \"\\u222f\", \"\\\\oiint\");\ndefineSymbol(math, main, op, \"\\u2230\", \"\\\\oiiint\");\ndefineSymbol(math, main, op, \"\\u2a06\", \"\\\\bigsqcup\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\smallint\");\ndefineSymbol(text, main, inner, \"\\u2026\", \"\\\\textellipsis\");\ndefineSymbol(math, main, inner, \"\\u2026\", \"\\\\mathellipsis\");\ndefineSymbol(text, main, inner, \"\\u2026\", \"\\\\ldots\", true);\ndefineSymbol(math, main, inner, \"\\u2026\", \"\\\\ldots\", true);\ndefineSymbol(math, main, inner, \"\\u22ef\", \"\\\\@cdots\", true);\ndefineSymbol(math, main, inner, \"\\u22f1\", \"\\\\ddots\", true); // \\vdots is a macro that uses one of these two symbols (with made-up names):\n\ndefineSymbol(math, main, textord, \"\\u22ee\", \"\\\\varvdots\");\ndefineSymbol(text, main, textord, \"\\u22ee\", \"\\\\varvdots\");\ndefineSymbol(math, main, accent, \"\\u02ca\", \"\\\\acute\");\ndefineSymbol(math, main, accent, \"\\u02cb\", \"\\\\grave\");\ndefineSymbol(math, main, accent, \"\\u00a8\", \"\\\\ddot\");\ndefineSymbol(math, main, accent, \"\\u007e\", \"\\\\tilde\");\ndefineSymbol(math, main, accent, \"\\u02c9\", \"\\\\bar\");\ndefineSymbol(math, main, accent, \"\\u02d8\", \"\\\\breve\");\ndefineSymbol(math, main, accent, \"\\u02c7\", \"\\\\check\");\ndefineSymbol(math, main, accent, \"\\u005e\", \"\\\\hat\");\ndefineSymbol(math, main, accent, \"\\u20d7\", \"\\\\vec\");\ndefineSymbol(math, main, accent, \"\\u02d9\", \"\\\\dot\");\ndefineSymbol(math, main, accent, \"\\u02da\", \"\\\\mathring\"); // \\imath and \\jmath should be invariant to \\mathrm, \\mathbf, etc., so use PUA\n\ndefineSymbol(math, main, mathord, \"\\ue131\", \"\\\\@imath\");\ndefineSymbol(math, main, mathord, \"\\ue237\", \"\\\\@jmath\");\ndefineSymbol(math, main, textord, \"\\u0131\", \"\\u0131\");\ndefineSymbol(math, main, textord, \"\\u0237\", \"\\u0237\");\ndefineSymbol(text, main, textord, \"\\u0131\", \"\\\\i\", true);\ndefineSymbol(text, main, textord, \"\\u0237\", \"\\\\j\", true);\ndefineSymbol(text, main, textord, \"\\u00df\", \"\\\\ss\", true);\ndefineSymbol(text, main, textord, \"\\u00e6\", \"\\\\ae\", true);\ndefineSymbol(text, main, textord, \"\\u0153\", \"\\\\oe\", true);\ndefineSymbol(text, main, textord, \"\\u00f8\", \"\\\\o\", true);\ndefineSymbol(text, main, textord, \"\\u00c6\", \"\\\\AE\", true);\ndefineSymbol(text, main, textord, \"\\u0152\", \"\\\\OE\", true);\ndefineSymbol(text, main, textord, \"\\u00d8\", \"\\\\O\", true);\ndefineSymbol(text, main, accent, \"\\u02ca\", \"\\\\'\"); // acute\n\ndefineSymbol(text, main, accent, \"\\u02cb\", \"\\\\`\"); // grave\n\ndefineSymbol(text, main, accent, \"\\u02c6\", \"\\\\^\"); // circumflex\n\ndefineSymbol(text, main, accent, \"\\u02dc\", \"\\\\~\"); // tilde\n\ndefineSymbol(text, main, accent, \"\\u02c9\", \"\\\\=\"); // macron\n\ndefineSymbol(text, main, accent, \"\\u02d8\", \"\\\\u\"); // breve\n\ndefineSymbol(text, main, accent, \"\\u02d9\", \"\\\\.\"); // dot above\n\ndefineSymbol(text, main, accent, \"\\u00b8\", \"\\\\c\"); // cedilla\n\ndefineSymbol(text, main, accent, \"\\u02da\", \"\\\\r\"); // ring above\n\ndefineSymbol(text, main, accent, \"\\u02c7\", \"\\\\v\"); // caron\n\ndefineSymbol(text, main, accent, \"\\u00a8\", '\\\\\"'); // diaeresis\n\ndefineSymbol(text, main, accent, \"\\u02dd\", \"\\\\H\"); // double acute\n\ndefineSymbol(text, main, accent, \"\\u25ef\", \"\\\\textcircled\"); // \\bigcirc glyph\n// These ligatures are detected and created in Parser.js's `formLigatures`.\n\nvar ligatures = {\n \"--\": true,\n \"---\": true,\n \"``\": true,\n \"''\": true\n};\ndefineSymbol(text, main, textord, \"\\u2013\", \"--\", true);\ndefineSymbol(text, main, textord, \"\\u2013\", \"\\\\textendash\");\ndefineSymbol(text, main, textord, \"\\u2014\", \"---\", true);\ndefineSymbol(text, main, textord, \"\\u2014\", \"\\\\textemdash\");\ndefineSymbol(text, main, textord, \"\\u2018\", \"`\", true);\ndefineSymbol(text, main, textord, \"\\u2018\", \"\\\\textquoteleft\");\ndefineSymbol(text, main, textord, \"\\u2019\", \"'\", true);\ndefineSymbol(text, main, textord, \"\\u2019\", \"\\\\textquoteright\");\ndefineSymbol(text, main, textord, \"\\u201c\", \"``\", true);\ndefineSymbol(text, main, textord, \"\\u201c\", \"\\\\textquotedblleft\");\ndefineSymbol(text, main, textord, \"\\u201d\", \"''\", true);\ndefineSymbol(text, main, textord, \"\\u201d\", \"\\\\textquotedblright\"); // \\degree from gensymb package\n\ndefineSymbol(math, main, textord, \"\\u00b0\", \"\\\\degree\", true);\ndefineSymbol(text, main, textord, \"\\u00b0\", \"\\\\degree\"); // \\textdegree from inputenc package\n\ndefineSymbol(text, main, textord, \"\\u00b0\", \"\\\\textdegree\", true); // TODO: In LaTeX, \\pounds can generate a different character in text and math\n// mode, but among our fonts, only Main-Regular defines this character \"163\".\n\ndefineSymbol(math, main, textord, \"\\u00a3\", \"\\\\pounds\");\ndefineSymbol(math, main, textord, \"\\u00a3\", \"\\\\mathsterling\", true);\ndefineSymbol(text, main, textord, \"\\u00a3\", \"\\\\pounds\");\ndefineSymbol(text, main, textord, \"\\u00a3\", \"\\\\textsterling\", true);\ndefineSymbol(math, ams, textord, \"\\u2720\", \"\\\\maltese\");\ndefineSymbol(text, ams, textord, \"\\u2720\", \"\\\\maltese\"); // There are lots of symbols which are the same, so we add them in afterwards.\n// All of these are textords in math mode\n\nvar mathTextSymbols = \"0123456789/@.\\\"\";\n\nfor (var i = 0; i < mathTextSymbols.length; i++) {\n var ch = mathTextSymbols.charAt(i);\n defineSymbol(math, main, textord, ch, ch);\n} // All of these are textords in text mode\n\n\nvar textSymbols = \"0123456789!@*()-=+\\\";:?/.,\";\n\nfor (var _i = 0; _i < textSymbols.length; _i++) {\n var _ch = textSymbols.charAt(_i);\n\n defineSymbol(text, main, textord, _ch, _ch);\n} // All of these are textords in text mode, and mathords in math mode\n\n\nvar letters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\nfor (var _i2 = 0; _i2 < letters.length; _i2++) {\n var _ch2 = letters.charAt(_i2);\n\n defineSymbol(math, main, mathord, _ch2, _ch2);\n defineSymbol(text, main, textord, _ch2, _ch2);\n} // Blackboard bold and script letters in Unicode range\n\n\ndefineSymbol(math, ams, textord, \"C\", \"\\u2102\"); // blackboard bold\n\ndefineSymbol(text, ams, textord, \"C\", \"\\u2102\");\ndefineSymbol(math, ams, textord, \"H\", \"\\u210D\");\ndefineSymbol(text, ams, textord, \"H\", \"\\u210D\");\ndefineSymbol(math, ams, textord, \"N\", \"\\u2115\");\ndefineSymbol(text, ams, textord, \"N\", \"\\u2115\");\ndefineSymbol(math, ams, textord, \"P\", \"\\u2119\");\ndefineSymbol(text, ams, textord, \"P\", \"\\u2119\");\ndefineSymbol(math, ams, textord, \"Q\", \"\\u211A\");\ndefineSymbol(text, ams, textord, \"Q\", \"\\u211A\");\ndefineSymbol(math, ams, textord, \"R\", \"\\u211D\");\ndefineSymbol(text, ams, textord, \"R\", \"\\u211D\");\ndefineSymbol(math, ams, textord, \"Z\", \"\\u2124\");\ndefineSymbol(text, ams, textord, \"Z\", \"\\u2124\");\ndefineSymbol(math, main, mathord, \"h\", \"\\u210E\"); // italic h, Planck constant\n\ndefineSymbol(text, main, mathord, \"h\", \"\\u210E\"); // The next loop loads wide (surrogate pair) characters.\n// We support some letters in the Unicode range U+1D400 to U+1D7FF,\n// Mathematical Alphanumeric Symbols.\n// Some editors do not deal well with wide characters. So don't write the\n// string into this file. Instead, create the string from the surrogate pair.\n\nvar wideChar = \"\";\n\nfor (var _i3 = 0; _i3 < letters.length; _i3++) {\n var _ch3 = letters.charAt(_i3); // The hex numbers in the next line are a surrogate pair.\n // 0xD835 is the high surrogate for all letters in the range we support.\n // 0xDC00 is the low surrogate for bold A.\n\n\n wideChar = String.fromCharCode(0xD835, 0xDC00 + _i3); // A-Z a-z bold\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDC34 + _i3); // A-Z a-z italic\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDC68 + _i3); // A-Z a-z bold italic\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDD04 + _i3); // A-Z a-z Fraktur\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDD6C + _i3); // A-Z a-z bold Fraktur\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDDA0 + _i3); // A-Z a-z sans-serif\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDDD4 + _i3); // A-Z a-z sans bold\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDE08 + _i3); // A-Z a-z sans italic\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDE70 + _i3); // A-Z a-z monospace\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n\n if (_i3 < 26) {\n // KaTeX fonts have only capital letters for blackboard bold and script.\n // See exception for k below.\n wideChar = String.fromCharCode(0xD835, 0xDD38 + _i3); // A-Z double struck\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDC9C + _i3); // A-Z script\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n } // TODO: Add bold script when it is supported by a KaTeX font.\n\n} // \"k\" is the only double struck lower case letter in the KaTeX fonts.\n\n\nwideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck\n\ndefineSymbol(math, main, mathord, \"k\", wideChar);\ndefineSymbol(text, main, textord, \"k\", wideChar); // Next, some wide character numerals\n\nfor (var _i4 = 0; _i4 < 10; _i4++) {\n var _ch4 = _i4.toString();\n\n wideChar = String.fromCharCode(0xD835, 0xDFCE + _i4); // 0-9 bold\n\n defineSymbol(math, main, mathord, _ch4, wideChar);\n defineSymbol(text, main, textord, _ch4, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDFE2 + _i4); // 0-9 sans serif\n\n defineSymbol(math, main, mathord, _ch4, wideChar);\n defineSymbol(text, main, textord, _ch4, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDFEC + _i4); // 0-9 bold sans\n\n defineSymbol(math, main, mathord, _ch4, wideChar);\n defineSymbol(text, main, textord, _ch4, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDFF6 + _i4); // 0-9 monospace\n\n defineSymbol(math, main, mathord, _ch4, wideChar);\n defineSymbol(text, main, textord, _ch4, wideChar);\n} // We add these Latin-1 letters as symbols for backwards-compatibility,\n// but they are not actually in the font, nor are they supported by the\n// Unicode accent mechanism, so they fall back to Times font and look ugly.\n// TODO(edemaine): Fix this.\n\n\nvar extraLatin = \"\\u00d0\\u00de\\u00fe\";\n\nfor (var _i5 = 0; _i5 < extraLatin.length; _i5++) {\n var _ch5 = extraLatin.charAt(_i5);\n\n defineSymbol(math, main, mathord, _ch5, _ch5);\n defineSymbol(text, main, textord, _ch5, _ch5);\n}\n\n/**\n * This file provides support for Unicode range U+1D400 to U+1D7FF,\n * Mathematical Alphanumeric Symbols.\n *\n * Function wideCharacterFont takes a wide character as input and returns\n * the font information necessary to render it properly.\n */\n/**\n * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf\n * That document sorts characters into groups by font type, say bold or italic.\n *\n * In the arrays below, each subarray consists three elements:\n * * The CSS class of that group when in math mode.\n * * The CSS class of that group when in text mode.\n * * The font name, so that KaTeX can get font metrics.\n */\n\nvar wideLatinLetterData = [[\"mathbf\", \"textbf\", \"Main-Bold\"], // A-Z bold upright\n[\"mathbf\", \"textbf\", \"Main-Bold\"], // a-z bold upright\n[\"mathnormal\", \"textit\", \"Math-Italic\"], // A-Z italic\n[\"mathnormal\", \"textit\", \"Math-Italic\"], // a-z italic\n[\"boldsymbol\", \"boldsymbol\", \"Main-BoldItalic\"], // A-Z bold italic\n[\"boldsymbol\", \"boldsymbol\", \"Main-BoldItalic\"], // a-z bold italic\n// Map fancy A-Z letters to script, not calligraphic.\n// This aligns with unicode-math and math fonts (except Cambria Math).\n[\"mathscr\", \"textscr\", \"Script-Regular\"], // A-Z script\n[\"\", \"\", \"\"], // a-z script. No font\n[\"\", \"\", \"\"], // A-Z bold script. No font\n[\"\", \"\", \"\"], // a-z bold script. No font\n[\"mathfrak\", \"textfrak\", \"Fraktur-Regular\"], // A-Z Fraktur\n[\"mathfrak\", \"textfrak\", \"Fraktur-Regular\"], // a-z Fraktur\n[\"mathbb\", \"textbb\", \"AMS-Regular\"], // A-Z double-struck\n[\"mathbb\", \"textbb\", \"AMS-Regular\"], // k double-struck\n// Note that we are using a bold font, but font metrics for regular Fraktur.\n[\"mathboldfrak\", \"textboldfrak\", \"Fraktur-Regular\"], // A-Z bold Fraktur\n[\"mathboldfrak\", \"textboldfrak\", \"Fraktur-Regular\"], // a-z bold Fraktur\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"], // A-Z sans-serif\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"], // a-z sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"], // A-Z bold sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"], // a-z bold sans-serif\n[\"mathitsf\", \"textitsf\", \"SansSerif-Italic\"], // A-Z italic sans-serif\n[\"mathitsf\", \"textitsf\", \"SansSerif-Italic\"], // a-z italic sans-serif\n[\"\", \"\", \"\"], // A-Z bold italic sans. No font\n[\"\", \"\", \"\"], // a-z bold italic sans. No font\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"], // A-Z monospace\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"] // a-z monospace\n];\nvar wideNumeralData = [[\"mathbf\", \"textbf\", \"Main-Bold\"], // 0-9 bold\n[\"\", \"\", \"\"], // 0-9 double-struck. No KaTeX font.\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"], // 0-9 sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"], // 0-9 bold sans-serif\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"] // 0-9 monospace\n];\nvar wideCharacterFont = function wideCharacterFont(wideChar, mode) {\n // IE doesn't support codePointAt(). So work with the surrogate pair.\n var H = wideChar.charCodeAt(0); // high surrogate\n\n var L = wideChar.charCodeAt(1); // low surrogate\n\n var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000;\n var j = mode === \"math\" ? 0 : 1; // column index for CSS class.\n\n if (0x1D400 <= codePoint && codePoint < 0x1D6A4) {\n // wideLatinLetterData contains exactly 26 chars on each row.\n // So we can calculate the relevant row. No traverse necessary.\n var i = Math.floor((codePoint - 0x1D400) / 26);\n return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]];\n } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) {\n // Numerals, ten per row.\n var _i = Math.floor((codePoint - 0x1D7CE) / 10);\n\n return [wideNumeralData[_i][2], wideNumeralData[_i][j]];\n } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) {\n // dotless i or j\n return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]];\n } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) {\n // Greek letters. Not supported, yet.\n return [\"\", \"\"];\n } else {\n // We don't support any wide characters outside 1D400–1D7FF.\n throw new ParseError(\"Unsupported character: \" + wideChar);\n }\n};\n\n/* eslint no-console:0 */\n\n/**\n * Looks up the given symbol in fontMetrics, after applying any symbol\n * replacements defined in symbol.js\n */\nvar lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this.\nfontName, mode) {\n // Replace the value with its replaced value from symbol.js\n if (symbols[mode][value] && symbols[mode][value].replace) {\n value = symbols[mode][value].replace;\n }\n\n return {\n value: value,\n metrics: getCharacterMetrics(value, fontName, mode)\n };\n};\n/**\n * Makes a symbolNode after translation via the list of symbols in symbols.js.\n * Correctly pulls out metrics for the character, and optionally takes a list of\n * classes to be attached to the node.\n *\n * TODO: make argument order closer to makeSpan\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n * TODO(#953): Make `options` mandatory and always pass it in.\n */\n\n\nvar makeSymbol = function makeSymbol(value, fontName, mode, options, classes) {\n var lookup = lookupSymbol(value, fontName, mode);\n var metrics = lookup.metrics;\n value = lookup.value;\n var symbolNode;\n\n if (metrics) {\n var italic = metrics.italic;\n\n if (mode === \"text\" || options && options.font === \"mathit\") {\n italic = 0;\n }\n\n symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes);\n } else {\n // TODO(emily): Figure out a good way to only print this in development\n typeof console !== \"undefined\" && console.warn(\"No character metrics \" + (\"for '\" + value + \"' in style '\" + fontName + \"' and mode '\" + mode + \"'\"));\n symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes);\n }\n\n if (options) {\n symbolNode.maxFontSize = options.sizeMultiplier;\n\n if (options.style.isTight()) {\n symbolNode.classes.push(\"mtight\");\n }\n\n var color = options.getColor();\n\n if (color) {\n symbolNode.style.color = color;\n }\n }\n\n return symbolNode;\n};\n/**\n * Makes a symbol in Main-Regular or AMS-Regular.\n * Used for rel, bin, open, close, inner, and punct.\n */\n\n\nvar mathsym = function mathsym(value, mode, options, classes) {\n if (classes === void 0) {\n classes = [];\n }\n\n // Decide what font to render the symbol in by its entry in the symbols\n // table.\n // Have a special case for when the value = \\ because the \\ is used as a\n // textord in unsupported command errors but cannot be parsed as a regular\n // text ordinal and is therefore not present as a symbol in the symbols\n // table for text, as well as a special case for boldsymbol because it\n // can be used for bold + and -\n if (options.font === \"boldsymbol\" && lookupSymbol(value, \"Main-Bold\", mode).metrics) {\n return makeSymbol(value, \"Main-Bold\", mode, options, classes.concat([\"mathbf\"]));\n } else if (value === \"\\\\\" || symbols[mode][value].font === \"main\") {\n return makeSymbol(value, \"Main-Regular\", mode, options, classes);\n } else {\n return makeSymbol(value, \"AMS-Regular\", mode, options, classes.concat([\"amsrm\"]));\n }\n};\n/**\n * Determines which of the two font names (Main-Bold and Math-BoldItalic) and\n * corresponding style tags (mathbf or boldsymbol) to use for font \"boldsymbol\",\n * depending on the symbol. Use this function instead of fontMap for font\n * \"boldsymbol\".\n */\n\n\nvar boldsymbol = function boldsymbol(value, mode, options, classes, type) {\n if (type !== \"textord\" && lookupSymbol(value, \"Math-BoldItalic\", mode).metrics) {\n return {\n fontName: \"Math-BoldItalic\",\n fontClass: \"boldsymbol\"\n };\n } else {\n // Some glyphs do not exist in Math-BoldItalic so we need to use\n // Main-Bold instead.\n return {\n fontName: \"Main-Bold\",\n fontClass: \"mathbf\"\n };\n }\n};\n/**\n * Makes either a mathord or textord in the correct font and color.\n */\n\n\nvar makeOrd = function makeOrd(group, options, type) {\n var mode = group.mode;\n var text = group.text;\n var classes = [\"mord\"]; // Math mode or Old font (i.e. \\rm)\n\n var isFont = mode === \"math\" || mode === \"text\" && options.font;\n var fontOrFamily = isFont ? options.font : options.fontFamily;\n var wideFontName = \"\";\n var wideFontClass = \"\";\n\n if (text.charCodeAt(0) === 0xD835) {\n [wideFontName, wideFontClass] = wideCharacterFont(text, mode);\n }\n\n if (wideFontName.length > 0) {\n // surrogate pairs get special treatment\n return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass));\n } else if (fontOrFamily) {\n var fontName;\n var fontClasses;\n\n if (fontOrFamily === \"boldsymbol\") {\n var fontData = boldsymbol(text, mode, options, classes, type);\n fontName = fontData.fontName;\n fontClasses = [fontData.fontClass];\n } else if (isFont) {\n fontName = fontMap[fontOrFamily].fontName;\n fontClasses = [fontOrFamily];\n } else {\n fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape);\n fontClasses = [fontOrFamily, options.fontWeight, options.fontShape];\n }\n\n if (lookupSymbol(text, fontName, mode).metrics) {\n return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses));\n } else if (ligatures.hasOwnProperty(text) && fontName.slice(0, 10) === \"Typewriter\") {\n // Deconstruct ligatures in monospace fonts (\\texttt, \\tt).\n var parts = [];\n\n for (var i = 0; i < text.length; i++) {\n parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses)));\n }\n\n return makeFragment(parts);\n }\n } // Makes a symbol in the default font for mathords and textords.\n\n\n if (type === \"mathord\") {\n return makeSymbol(text, \"Math-Italic\", mode, options, classes.concat([\"mathnormal\"]));\n } else if (type === \"textord\") {\n var font = symbols[mode][text] && symbols[mode][text].font;\n\n if (font === \"ams\") {\n var _fontName = retrieveTextFontName(\"amsrm\", options.fontWeight, options.fontShape);\n\n return makeSymbol(text, _fontName, mode, options, classes.concat(\"amsrm\", options.fontWeight, options.fontShape));\n } else if (font === \"main\" || !font) {\n var _fontName2 = retrieveTextFontName(\"textrm\", options.fontWeight, options.fontShape);\n\n return makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape));\n } else {\n // fonts added by plugins\n var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class\n\n\n return makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape));\n }\n } else {\n throw new Error(\"unexpected type: \" + type + \" in makeOrd\");\n }\n};\n/**\n * Returns true if subsequent symbolNodes have the same classes, skew, maxFont,\n * and styles.\n */\n\n\nvar canCombine = (prev, next) => {\n if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) {\n return false;\n } // If prev and next both are just \"mbin\"s or \"mord\"s we don't combine them\n // so that the proper spacing can be preserved.\n\n\n if (prev.classes.length === 1) {\n var cls = prev.classes[0];\n\n if (cls === \"mbin\" || cls === \"mord\") {\n return false;\n }\n }\n\n for (var style in prev.style) {\n if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) {\n return false;\n }\n }\n\n for (var _style in next.style) {\n if (next.style.hasOwnProperty(_style) && prev.style[_style] !== next.style[_style]) {\n return false;\n }\n }\n\n return true;\n};\n/**\n * Combine consecutive domTree.symbolNodes into a single symbolNode.\n * Note: this function mutates the argument.\n */\n\n\nvar tryCombineChars = chars => {\n for (var i = 0; i < chars.length - 1; i++) {\n var prev = chars[i];\n var next = chars[i + 1];\n\n if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) {\n prev.text += next.text;\n prev.height = Math.max(prev.height, next.height);\n prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use\n // it to add padding to the right of the span created from\n // the combined characters.\n\n prev.italic = next.italic;\n chars.splice(i + 1, 1);\n i--;\n }\n }\n\n return chars;\n};\n/**\n * Calculate the height, depth, and maxFontSize of an element based on its\n * children.\n */\n\n\nvar sizeElementFromChildren = function sizeElementFromChildren(elem) {\n var height = 0;\n var depth = 0;\n var maxFontSize = 0;\n\n for (var i = 0; i < elem.children.length; i++) {\n var child = elem.children[i];\n\n if (child.height > height) {\n height = child.height;\n }\n\n if (child.depth > depth) {\n depth = child.depth;\n }\n\n if (child.maxFontSize > maxFontSize) {\n maxFontSize = child.maxFontSize;\n }\n }\n\n elem.height = height;\n elem.depth = depth;\n elem.maxFontSize = maxFontSize;\n};\n/**\n * Makes a span with the given list of classes, list of children, and options.\n *\n * TODO(#953): Ensure that `options` is always provided (currently some call\n * sites don't pass it) and make the type below mandatory.\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n */\n\n\nvar makeSpan$2 = function makeSpan(classes, children, options, style) {\n var span = new Span(classes, children, options, style);\n sizeElementFromChildren(span);\n return span;\n}; // SVG one is simpler -- doesn't require height, depth, max-font setting.\n// This is also a separate method for typesafety.\n\n\nvar makeSvgSpan = (classes, children, options, style) => new Span(classes, children, options, style);\n\nvar makeLineSpan = function makeLineSpan(className, options, thickness) {\n var line = makeSpan$2([className], [], options);\n line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n line.style.borderBottomWidth = makeEm(line.height);\n line.maxFontSize = 1.0;\n return line;\n};\n/**\n * Makes an anchor with the given href, list of classes, list of children,\n * and options.\n */\n\n\nvar makeAnchor = function makeAnchor(href, classes, children, options) {\n var anchor = new Anchor(href, classes, children, options);\n sizeElementFromChildren(anchor);\n return anchor;\n};\n/**\n * Makes a document fragment with the given list of children.\n */\n\n\nvar makeFragment = function makeFragment(children) {\n var fragment = new DocumentFragment(children);\n sizeElementFromChildren(fragment);\n return fragment;\n};\n/**\n * Wraps group in a span if it's a document fragment, allowing to apply classes\n * and styles\n */\n\n\nvar wrapFragment = function wrapFragment(group, options) {\n if (group instanceof DocumentFragment) {\n return makeSpan$2([], [group], options);\n }\n\n return group;\n}; // These are exact object types to catch typos in the names of the optional fields.\n\n\n// Computes the updated `children` list and the overall depth.\n//\n// This helper function for makeVList makes it easier to enforce type safety by\n// allowing early exits (returns) in the logic.\nvar getVListChildrenAndDepth = function getVListChildrenAndDepth(params) {\n if (params.positionType === \"individualShift\") {\n var oldChildren = params.children;\n var children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be\n // shifted to the correct specified shift\n\n var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth;\n\n var currPos = _depth;\n\n for (var i = 1; i < oldChildren.length; i++) {\n var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth;\n var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth);\n currPos = currPos + diff;\n children.push({\n type: \"kern\",\n size\n });\n children.push(oldChildren[i]);\n }\n\n return {\n children,\n depth: _depth\n };\n }\n\n var depth;\n\n if (params.positionType === \"top\") {\n // We always start at the bottom, so calculate the bottom by adding up\n // all the sizes\n var bottom = params.positionData;\n\n for (var _i = 0; _i < params.children.length; _i++) {\n var child = params.children[_i];\n bottom -= child.type === \"kern\" ? child.size : child.elem.height + child.elem.depth;\n }\n\n depth = bottom;\n } else if (params.positionType === \"bottom\") {\n depth = -params.positionData;\n } else {\n var firstChild = params.children[0];\n\n if (firstChild.type !== \"elem\") {\n throw new Error('First child must have type \"elem\".');\n }\n\n if (params.positionType === \"shift\") {\n depth = -firstChild.elem.depth - params.positionData;\n } else if (params.positionType === \"firstBaseline\") {\n depth = -firstChild.elem.depth;\n } else {\n throw new Error(\"Invalid positionType \" + params.positionType + \".\");\n }\n }\n\n return {\n children: params.children,\n depth\n };\n};\n/**\n * Makes a vertical list by stacking elements and kerns on top of each other.\n * Allows for many different ways of specifying the positioning method.\n *\n * See VListParam documentation above.\n */\n\n\nvar makeVList = function makeVList(params, options) {\n var {\n children,\n depth\n } = getVListChildrenAndDepth(params); // Create a strut that is taller than any list item. The strut is added to\n // each item, where it will determine the item's baseline. Since it has\n // `overflow:hidden`, the strut's top edge will sit on the item's line box's\n // top edge and the strut's bottom edge will sit on the item's baseline,\n // with no additional line-height spacing. This allows the item baseline to\n // be positioned precisely without worrying about font ascent and\n // line-height.\n\n var pstrutSize = 0;\n\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n\n if (child.type === \"elem\") {\n var elem = child.elem;\n pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height);\n }\n }\n\n pstrutSize += 2;\n var pstrut = makeSpan$2([\"pstrut\"], []);\n pstrut.style.height = makeEm(pstrutSize); // Create a new list of actual children at the correct offsets\n\n var realChildren = [];\n var minPos = depth;\n var maxPos = depth;\n var currPos = depth;\n\n for (var _i2 = 0; _i2 < children.length; _i2++) {\n var _child = children[_i2];\n\n if (_child.type === \"kern\") {\n currPos += _child.size;\n } else {\n var _elem = _child.elem;\n var classes = _child.wrapperClasses || [];\n var style = _child.wrapperStyle || {};\n var childWrap = makeSpan$2(classes, [pstrut, _elem], undefined, style);\n childWrap.style.top = makeEm(-pstrutSize - currPos - _elem.depth);\n\n if (_child.marginLeft) {\n childWrap.style.marginLeft = _child.marginLeft;\n }\n\n if (_child.marginRight) {\n childWrap.style.marginRight = _child.marginRight;\n }\n\n realChildren.push(childWrap);\n currPos += _elem.height + _elem.depth;\n }\n\n minPos = Math.min(minPos, currPos);\n maxPos = Math.max(maxPos, currPos);\n } // The vlist contents go in a table-cell with `vertical-align:bottom`.\n // This cell's bottom edge will determine the containing table's baseline\n // without overly expanding the containing line-box.\n\n\n var vlist = makeSpan$2([\"vlist\"], realChildren);\n vlist.style.height = makeEm(maxPos); // A second row is used if necessary to represent the vlist's depth.\n\n var rows;\n\n if (minPos < 0) {\n // We will define depth in an empty span with display: table-cell.\n // It should render with the height that we define. But Chrome, in\n // contenteditable mode only, treats that span as if it contains some\n // text content. And that min-height over-rides our desired height.\n // So we put another empty span inside the depth strut span.\n var emptySpan = makeSpan$2([], []);\n var depthStrut = makeSpan$2([\"vlist\"], [emptySpan]);\n depthStrut.style.height = makeEm(-minPos); // Safari wants the first row to have inline content; otherwise it\n // puts the bottom of the *second* row on the baseline.\n\n var topStrut = makeSpan$2([\"vlist-s\"], [new SymbolNode(\"\\u200b\")]);\n rows = [makeSpan$2([\"vlist-r\"], [vlist, topStrut]), makeSpan$2([\"vlist-r\"], [depthStrut])];\n } else {\n rows = [makeSpan$2([\"vlist-r\"], [vlist])];\n }\n\n var vtable = makeSpan$2([\"vlist-t\"], rows);\n\n if (rows.length === 2) {\n vtable.classes.push(\"vlist-t2\");\n }\n\n vtable.height = maxPos;\n vtable.depth = -minPos;\n return vtable;\n}; // Glue is a concept from TeX which is a flexible space between elements in\n// either a vertical or horizontal list. In KaTeX, at least for now, it's\n// static space between elements in a horizontal layout.\n\n\nvar makeGlue = (measurement, options) => {\n // Make an empty span for the space\n var rule = makeSpan$2([\"mspace\"], [], options);\n var size = calculateSize(measurement, options);\n rule.style.marginRight = makeEm(size);\n return rule;\n}; // Takes font options, and returns the appropriate fontLookup name\n\n\nvar retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) {\n var baseFontName = \"\";\n\n switch (fontFamily) {\n case \"amsrm\":\n baseFontName = \"AMS\";\n break;\n\n case \"textrm\":\n baseFontName = \"Main\";\n break;\n\n case \"textsf\":\n baseFontName = \"SansSerif\";\n break;\n\n case \"texttt\":\n baseFontName = \"Typewriter\";\n break;\n\n default:\n baseFontName = fontFamily;\n // use fonts added by a plugin\n }\n\n var fontStylesName;\n\n if (fontWeight === \"textbf\" && fontShape === \"textit\") {\n fontStylesName = \"BoldItalic\";\n } else if (fontWeight === \"textbf\") {\n fontStylesName = \"Bold\";\n } else if (fontWeight === \"textit\") {\n fontStylesName = \"Italic\";\n } else {\n fontStylesName = \"Regular\";\n }\n\n return baseFontName + \"-\" + fontStylesName;\n};\n/**\n * Maps TeX font commands to objects containing:\n * - variant: string used for \"mathvariant\" attribute in buildMathML.js\n * - fontName: the \"style\" parameter to fontMetrics.getCharacterMetrics\n */\n// A map between tex font commands an MathML mathvariant attribute values\n\n\nvar fontMap = {\n // styles\n \"mathbf\": {\n variant: \"bold\",\n fontName: \"Main-Bold\"\n },\n \"mathrm\": {\n variant: \"normal\",\n fontName: \"Main-Regular\"\n },\n \"textit\": {\n variant: \"italic\",\n fontName: \"Main-Italic\"\n },\n \"mathit\": {\n variant: \"italic\",\n fontName: \"Main-Italic\"\n },\n \"mathnormal\": {\n variant: \"italic\",\n fontName: \"Math-Italic\"\n },\n \"mathsfit\": {\n variant: \"sans-serif-italic\",\n fontName: \"SansSerif-Italic\"\n },\n // \"boldsymbol\" is missing because they require the use of multiple fonts:\n // Math-BoldItalic and Main-Bold. This is handled by a special case in\n // makeOrd which ends up calling boldsymbol.\n // families\n \"mathbb\": {\n variant: \"double-struck\",\n fontName: \"AMS-Regular\"\n },\n \"mathcal\": {\n variant: \"script\",\n fontName: \"Caligraphic-Regular\"\n },\n \"mathfrak\": {\n variant: \"fraktur\",\n fontName: \"Fraktur-Regular\"\n },\n \"mathscr\": {\n variant: \"script\",\n fontName: \"Script-Regular\"\n },\n \"mathsf\": {\n variant: \"sans-serif\",\n fontName: \"SansSerif-Regular\"\n },\n \"mathtt\": {\n variant: \"monospace\",\n fontName: \"Typewriter-Regular\"\n }\n};\nvar svgData = {\n // path, width, height\n vec: [\"vec\", 0.471, 0.714],\n // values from the font glyph\n oiintSize1: [\"oiintSize1\", 0.957, 0.499],\n // oval to overlay the integrand\n oiintSize2: [\"oiintSize2\", 1.472, 0.659],\n oiiintSize1: [\"oiiintSize1\", 1.304, 0.499],\n oiiintSize2: [\"oiiintSize2\", 1.98, 0.659]\n};\n\nvar staticSvg = function staticSvg(value, options) {\n // Create a span with inline SVG for the element.\n var [pathName, width, height] = svgData[value];\n var path = new PathNode(pathName);\n var svgNode = new SvgNode([path], {\n \"width\": makeEm(width),\n \"height\": makeEm(height),\n // Override CSS rule `.katex svg { width: 100% }`\n \"style\": \"width:\" + makeEm(width),\n \"viewBox\": \"0 0 \" + 1000 * width + \" \" + 1000 * height,\n \"preserveAspectRatio\": \"xMinYMin\"\n });\n var span = makeSvgSpan([\"overlay\"], [svgNode], options);\n span.height = height;\n span.style.height = makeEm(height);\n span.style.width = makeEm(width);\n return span;\n};\n\nvar buildCommon = {\n fontMap,\n makeSymbol,\n mathsym,\n makeSpan: makeSpan$2,\n makeSvgSpan,\n makeLineSpan,\n makeAnchor,\n makeFragment,\n wrapFragment,\n makeVList,\n makeOrd,\n makeGlue,\n staticSvg,\n svgData,\n tryCombineChars\n};\n\n/**\n * Describes spaces between different classes of atoms.\n */\nvar thinspace = {\n number: 3,\n unit: \"mu\"\n};\nvar mediumspace = {\n number: 4,\n unit: \"mu\"\n};\nvar thickspace = {\n number: 5,\n unit: \"mu\"\n}; // Making the type below exact with all optional fields doesn't work due to\n// - https://github.com/facebook/flow/issues/4582\n// - https://github.com/facebook/flow/issues/5688\n// However, since *all* fields are optional, $Shape<> works as suggested in 5688\n// above.\n\n// Spacing relationships for display and text styles\nvar spacings = {\n mord: {\n mop: thinspace,\n mbin: mediumspace,\n mrel: thickspace,\n minner: thinspace\n },\n mop: {\n mord: thinspace,\n mop: thinspace,\n mrel: thickspace,\n minner: thinspace\n },\n mbin: {\n mord: mediumspace,\n mop: mediumspace,\n mopen: mediumspace,\n minner: mediumspace\n },\n mrel: {\n mord: thickspace,\n mop: thickspace,\n mopen: thickspace,\n minner: thickspace\n },\n mopen: {},\n mclose: {\n mop: thinspace,\n mbin: mediumspace,\n mrel: thickspace,\n minner: thinspace\n },\n mpunct: {\n mord: thinspace,\n mop: thinspace,\n mrel: thickspace,\n mopen: thinspace,\n mclose: thinspace,\n mpunct: thinspace,\n minner: thinspace\n },\n minner: {\n mord: thinspace,\n mop: thinspace,\n mbin: mediumspace,\n mrel: thickspace,\n mopen: thinspace,\n mpunct: thinspace,\n minner: thinspace\n }\n}; // Spacing relationships for script and scriptscript styles\n\nvar tightSpacings = {\n mord: {\n mop: thinspace\n },\n mop: {\n mord: thinspace,\n mop: thinspace\n },\n mbin: {},\n mrel: {},\n mopen: {},\n mclose: {\n mop: thinspace\n },\n mpunct: {},\n minner: {\n mop: thinspace\n }\n};\n\n/** Context provided to function handlers for error messages. */\n// Note: reverse the order of the return type union will cause a flow error.\n// See https://github.com/facebook/flow/issues/3663.\n// More general version of `HtmlBuilder` for nodes (e.g. \\sum, accent types)\n// whose presence impacts super/subscripting. In this case, ParseNode<\"supsub\">\n// delegates its HTML building to the HtmlBuilder corresponding to these nodes.\n\n/**\n * Final function spec for use at parse time.\n * This is almost identical to `FunctionPropSpec`, except it\n * 1. includes the function handler, and\n * 2. requires all arguments except argTypes.\n * It is generated by `defineFunction()` below.\n */\n\n/**\n * All registered functions.\n * `functions.js` just exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary.\n */\nvar _functions = {};\n/**\n * All HTML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */\n\nvar _htmlGroupBuilders = {};\n/**\n * All MathML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */\n\nvar _mathmlGroupBuilders = {};\nfunction defineFunction(_ref) {\n var {\n type,\n names,\n props,\n handler,\n htmlBuilder,\n mathmlBuilder\n } = _ref;\n // Set default values of functions\n var data = {\n type,\n numArgs: props.numArgs,\n argTypes: props.argTypes,\n allowedInArgument: !!props.allowedInArgument,\n allowedInText: !!props.allowedInText,\n allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath,\n numOptionalArgs: props.numOptionalArgs || 0,\n infix: !!props.infix,\n primitive: !!props.primitive,\n handler: handler\n };\n\n for (var i = 0; i < names.length; ++i) {\n _functions[names[i]] = data;\n }\n\n if (type) {\n if (htmlBuilder) {\n _htmlGroupBuilders[type] = htmlBuilder;\n }\n\n if (mathmlBuilder) {\n _mathmlGroupBuilders[type] = mathmlBuilder;\n }\n }\n}\n/**\n * Use this to register only the HTML and MathML builders for a function (e.g.\n * if the function's ParseNode is generated in Parser.js rather than via a\n * stand-alone handler provided to `defineFunction`).\n */\n\nfunction defineFunctionBuilders(_ref2) {\n var {\n type,\n htmlBuilder,\n mathmlBuilder\n } = _ref2;\n defineFunction({\n type,\n names: [],\n props: {\n numArgs: 0\n },\n\n handler() {\n throw new Error('Should never be called.');\n },\n\n htmlBuilder,\n mathmlBuilder\n });\n}\nvar normalizeArgument = function normalizeArgument(arg) {\n return arg.type === \"ordgroup\" && arg.body.length === 1 ? arg.body[0] : arg;\n}; // Since the corresponding buildHTML/buildMathML function expects a\n// list of elements, we normalize for different kinds of arguments\n\nvar ordargument = function ordargument(arg) {\n return arg.type === \"ordgroup\" ? arg.body : [arg];\n};\n\n/**\n * This file does the main work of building a domTree structure from a parse\n * tree. The entry point is the `buildHTML` function, which takes a parse tree.\n * Then, the buildExpression, buildGroup, and various groupBuilders functions\n * are called, to produce a final HTML tree.\n */\nvar makeSpan$1 = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`)\n// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6,\n// and the text before Rule 19.\n\nvar binLeftCanceller = [\"leftmost\", \"mbin\", \"mopen\", \"mrel\", \"mop\", \"mpunct\"];\nvar binRightCanceller = [\"rightmost\", \"mrel\", \"mclose\", \"mpunct\"];\nvar styleMap$1 = {\n \"display\": Style$1.DISPLAY,\n \"text\": Style$1.TEXT,\n \"script\": Style$1.SCRIPT,\n \"scriptscript\": Style$1.SCRIPTSCRIPT\n};\nvar DomEnum = {\n mord: \"mord\",\n mop: \"mop\",\n mbin: \"mbin\",\n mrel: \"mrel\",\n mopen: \"mopen\",\n mclose: \"mclose\",\n mpunct: \"mpunct\",\n minner: \"minner\"\n};\n\n/**\n * Take a list of nodes, build them in order, and return a list of the built\n * nodes. documentFragments are flattened into their contents, so the\n * returned list contains no fragments. `isRealGroup` is true if `expression`\n * is a real group (no atoms will be added on either side), as opposed to\n * a partial group (e.g. one created by \\color). `surrounding` is an array\n * consisting type of nodes that will be added to the left and right.\n */\nvar buildExpression$1 = function buildExpression(expression, options, isRealGroup, surrounding) {\n if (surrounding === void 0) {\n surrounding = [null, null];\n }\n\n // Parse expressions into `groups`.\n var groups = [];\n\n for (var i = 0; i < expression.length; i++) {\n var output = buildGroup$1(expression[i], options);\n\n if (output instanceof DocumentFragment) {\n var children = output.children;\n groups.push(...children);\n } else {\n groups.push(output);\n }\n } // Combine consecutive domTree.symbolNodes into a single symbolNode.\n\n\n buildCommon.tryCombineChars(groups); // If `expression` is a partial group, let the parent handle spacings\n // to avoid processing groups multiple times.\n\n if (!isRealGroup) {\n return groups;\n }\n\n var glueOptions = options;\n\n if (expression.length === 1) {\n var node = expression[0];\n\n if (node.type === \"sizing\") {\n glueOptions = options.havingSize(node.size);\n } else if (node.type === \"styling\") {\n glueOptions = options.havingStyle(styleMap$1[node.style]);\n }\n } // Dummy spans for determining spacings between surrounding atoms.\n // If `expression` has no atoms on the left or right, class \"leftmost\"\n // or \"rightmost\", respectively, is used to indicate it.\n\n\n var dummyPrev = makeSpan$1([surrounding[0] || \"leftmost\"], [], options);\n var dummyNext = makeSpan$1([surrounding[1] || \"rightmost\"], [], options); // TODO: These code assumes that a node's math class is the first element\n // of its `classes` array. A later cleanup should ensure this, for\n // instance by changing the signature of `makeSpan`.\n // Before determining what spaces to insert, perform bin cancellation.\n // Binary operators change to ordinary symbols in some contexts.\n\n var isRoot = isRealGroup === \"root\";\n traverseNonSpaceNodes(groups, (node, prev) => {\n var prevType = prev.classes[0];\n var type = node.classes[0];\n\n if (prevType === \"mbin\" && binRightCanceller.includes(type)) {\n prev.classes[0] = \"mord\";\n } else if (type === \"mbin\" && binLeftCanceller.includes(prevType)) {\n node.classes[0] = \"mord\";\n }\n }, {\n node: dummyPrev\n }, dummyNext, isRoot);\n traverseNonSpaceNodes(groups, (node, prev) => {\n var prevType = getTypeOfDomTree(prev);\n var type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style.\n\n var space = prevType && type ? node.hasClass(\"mtight\") ? tightSpacings[prevType][type] : spacings[prevType][type] : null;\n\n if (space) {\n // Insert glue (spacing) after the `prev`.\n return buildCommon.makeGlue(space, glueOptions);\n }\n }, {\n node: dummyPrev\n }, dummyNext, isRoot);\n return groups;\n}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and\n// previous node as arguments, optionally returning a node to insert after the\n// previous node. `prev` is an object with the previous node and `insertAfter`\n// function to insert after it. `next` is a node that will be added to the right.\n// Used for bin cancellation and inserting spacings.\n\nvar traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next, isRoot) {\n if (next) {\n // temporarily append the right node, if exists\n nodes.push(next);\n }\n\n var i = 0;\n\n for (; i < nodes.length; i++) {\n var node = nodes[i];\n var partialGroup = checkPartialGroup(node);\n\n if (partialGroup) {\n // Recursive DFS\n // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array\n traverseNonSpaceNodes(partialGroup.children, callback, prev, null, isRoot);\n continue;\n } // Ignore explicit spaces (e.g., \\;, \\,) when determining what implicit\n // spacing should go between atoms of different classes\n\n\n var nonspace = !node.hasClass(\"mspace\");\n\n if (nonspace) {\n var result = callback(node, prev.node);\n\n if (result) {\n if (prev.insertAfter) {\n prev.insertAfter(result);\n } else {\n // insert at front\n nodes.unshift(result);\n i++;\n }\n }\n }\n\n if (nonspace) {\n prev.node = node;\n } else if (isRoot && node.hasClass(\"newline\")) {\n prev.node = makeSpan$1([\"leftmost\"]); // treat like beginning of line\n }\n\n prev.insertAfter = (index => n => {\n nodes.splice(index + 1, 0, n);\n i++;\n })(i);\n }\n\n if (next) {\n nodes.pop();\n }\n}; // Check if given node is a partial group, i.e., does not affect spacing around.\n\n\nvar checkPartialGroup = function checkPartialGroup(node) {\n if (node instanceof DocumentFragment || node instanceof Anchor || node instanceof Span && node.hasClass(\"enclosing\")) {\n return node;\n }\n\n return null;\n}; // Return the outermost node of a domTree.\n\n\nvar getOutermostNode = function getOutermostNode(node, side) {\n var partialGroup = checkPartialGroup(node);\n\n if (partialGroup) {\n var children = partialGroup.children;\n\n if (children.length) {\n if (side === \"right\") {\n return getOutermostNode(children[children.length - 1], \"right\");\n } else if (side === \"left\") {\n return getOutermostNode(children[0], \"left\");\n }\n }\n }\n\n return node;\n}; // Return math atom class (mclass) of a domTree.\n// If `side` is given, it will get the type of the outermost node at given side.\n\n\nvar getTypeOfDomTree = function getTypeOfDomTree(node, side) {\n if (!node) {\n return null;\n }\n\n if (side) {\n node = getOutermostNode(node, side);\n } // This makes a lot of assumptions as to where the type of atom\n // appears. We should do a better job of enforcing this.\n\n\n return DomEnum[node.classes[0]] || null;\n};\nvar makeNullDelimiter = function makeNullDelimiter(options, classes) {\n var moreClasses = [\"nulldelimiter\"].concat(options.baseSizingClasses());\n return makeSpan$1(classes.concat(moreClasses));\n};\n/**\n * buildGroup is the function that takes a group and calls the correct groupType\n * function for it. It also handles the interaction of size and style changes\n * between parents and children.\n */\n\nvar buildGroup$1 = function buildGroup(group, options, baseOptions) {\n if (!group) {\n return makeSpan$1();\n }\n\n if (_htmlGroupBuilders[group.type]) {\n // Call the groupBuilders function\n // $FlowFixMe\n var groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account\n // for that size difference.\n\n if (baseOptions && options.size !== baseOptions.size) {\n groupNode = makeSpan$1(options.sizingClasses(baseOptions), [groupNode], options);\n var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;\n groupNode.height *= multiplier;\n groupNode.depth *= multiplier;\n }\n\n return groupNode;\n } else {\n throw new ParseError(\"Got group of unknown type: '\" + group.type + \"'\");\n }\n};\n/**\n * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`)\n * into an unbreakable HTML node of class .base, with proper struts to\n * guarantee correct vertical extent. `buildHTML` calls this repeatedly to\n * make up the entire expression as a sequence of unbreakable units.\n */\n\nfunction buildHTMLUnbreakable(children, options) {\n // Compute height and depth of this chunk.\n var body = makeSpan$1([\"base\"], children, options); // Add strut, which ensures that the top of the HTML element falls at\n // the height of the expression, and the bottom of the HTML element\n // falls at the depth of the expression.\n\n var strut = makeSpan$1([\"strut\"]);\n strut.style.height = makeEm(body.height + body.depth);\n\n if (body.depth) {\n strut.style.verticalAlign = makeEm(-body.depth);\n }\n\n body.children.unshift(strut);\n return body;\n}\n/**\n * Take an entire parse tree, and build it into an appropriate set of HTML\n * nodes.\n */\n\n\nfunction buildHTML(tree, options) {\n // Strip off outer tag wrapper for processing below.\n var tag = null;\n\n if (tree.length === 1 && tree[0].type === \"tag\") {\n tag = tree[0].tag;\n tree = tree[0].body;\n } // Build the expression contained in the tree\n\n\n var expression = buildExpression$1(tree, options, \"root\");\n var eqnNum;\n\n if (expression.length === 2 && expression[1].hasClass(\"tag\")) {\n // An environment with automatic equation numbers, e.g. {gather}.\n eqnNum = expression.pop();\n }\n\n var children = []; // Create one base node for each chunk between potential line breaks.\n // The TeXBook [p.173] says \"A formula will be broken only after a\n // relation symbol like $=$ or $<$ or $\\rightarrow$, or after a binary\n // operation symbol like $+$ or $-$ or $\\times$, where the relation or\n // binary operation is on the ``outer level'' of the formula (i.e., not\n // enclosed in {...} and not part of an \\over construction).\"\n\n var parts = [];\n\n for (var i = 0; i < expression.length; i++) {\n parts.push(expression[i]);\n\n if (expression[i].hasClass(\"mbin\") || expression[i].hasClass(\"mrel\") || expression[i].hasClass(\"allowbreak\")) {\n // Put any post-operator glue on same line as operator.\n // Watch for \\nobreak along the way, and stop at \\newline.\n var nobreak = false;\n\n while (i < expression.length - 1 && expression[i + 1].hasClass(\"mspace\") && !expression[i + 1].hasClass(\"newline\")) {\n i++;\n parts.push(expression[i]);\n\n if (expression[i].hasClass(\"nobreak\")) {\n nobreak = true;\n }\n } // Don't allow break if \\nobreak among the post-operator glue.\n\n\n if (!nobreak) {\n children.push(buildHTMLUnbreakable(parts, options));\n parts = [];\n }\n } else if (expression[i].hasClass(\"newline\")) {\n // Write the line except the newline\n parts.pop();\n\n if (parts.length > 0) {\n children.push(buildHTMLUnbreakable(parts, options));\n parts = [];\n } // Put the newline at the top level\n\n\n children.push(expression[i]);\n }\n }\n\n if (parts.length > 0) {\n children.push(buildHTMLUnbreakable(parts, options));\n } // Now, if there was a tag, build it too and append it as a final child.\n\n\n var tagChild;\n\n if (tag) {\n tagChild = buildHTMLUnbreakable(buildExpression$1(tag, options, true));\n tagChild.classes = [\"tag\"];\n children.push(tagChild);\n } else if (eqnNum) {\n children.push(eqnNum);\n }\n\n var htmlNode = makeSpan$1([\"katex-html\"], children);\n htmlNode.setAttribute(\"aria-hidden\", \"true\"); // Adjust the strut of the tag to be the maximum height of all children\n // (the height of the enclosing htmlNode) for proper vertical alignment.\n\n if (tagChild) {\n var strut = tagChild.children[0];\n strut.style.height = makeEm(htmlNode.height + htmlNode.depth);\n\n if (htmlNode.depth) {\n strut.style.verticalAlign = makeEm(-htmlNode.depth);\n }\n }\n\n return htmlNode;\n}\n\n/**\n * These objects store data about MathML nodes. This is the MathML equivalent\n * of the types in domTree.js. Since MathML handles its own rendering, and\n * since we're mainly using MathML to improve accessibility, we don't manage\n * any of the styling state that the plain DOM nodes do.\n *\n * The `toNode` and `toMarkup` functions work similarly to how they do in\n * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.\n */\nfunction newDocumentFragment(children) {\n return new DocumentFragment(children);\n}\n/**\n * This node represents a general purpose MathML node of any type. The\n * constructor requires the type of node to create (for example, `\"mo\"` or\n * `\"mspace\"`, corresponding to `<mo>` and `<mspace>` tags).\n */\n\nclass MathNode {\n constructor(type, children, classes) {\n this.type = void 0;\n this.attributes = void 0;\n this.children = void 0;\n this.classes = void 0;\n this.type = type;\n this.attributes = {};\n this.children = children || [];\n this.classes = classes || [];\n }\n /**\n * Sets an attribute on a MathML node. MathML depends on attributes to convey a\n * semantic content, so this is used heavily.\n */\n\n\n setAttribute(name, value) {\n this.attributes[name] = value;\n }\n /**\n * Gets an attribute on a MathML node.\n */\n\n\n getAttribute(name) {\n return this.attributes[name];\n }\n /**\n * Converts the math node into a MathML-namespaced DOM element.\n */\n\n\n toNode() {\n var node = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", this.type);\n\n for (var attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n }\n\n if (this.classes.length > 0) {\n node.className = createClass(this.classes);\n }\n\n for (var i = 0; i < this.children.length; i++) {\n // Combine multiple TextNodes into one TextNode, to prevent\n // screen readers from reading each as a separate word [#3995]\n if (this.children[i] instanceof TextNode && this.children[i + 1] instanceof TextNode) {\n var text = this.children[i].toText() + this.children[++i].toText();\n\n while (this.children[i + 1] instanceof TextNode) {\n text += this.children[++i].toText();\n }\n\n node.appendChild(new TextNode(text).toNode());\n } else {\n node.appendChild(this.children[i].toNode());\n }\n }\n\n return node;\n }\n /**\n * Converts the math node into an HTML markup string.\n */\n\n\n toMarkup() {\n var markup = \"<\" + this.type; // Add the attributes\n\n for (var attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n markup += \" \" + attr + \"=\\\"\";\n markup += utils.escape(this.attributes[attr]);\n markup += \"\\\"\";\n }\n }\n\n if (this.classes.length > 0) {\n markup += \" class =\\\"\" + utils.escape(createClass(this.classes)) + \"\\\"\";\n }\n\n markup += \">\";\n\n for (var i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n markup += \"</\" + this.type + \">\";\n return markup;\n }\n /**\n * Converts the math node into a string, similar to innerText, but escaped.\n */\n\n\n toText() {\n return this.children.map(child => child.toText()).join(\"\");\n }\n\n}\n/**\n * This node represents a piece of text.\n */\n\nclass TextNode {\n constructor(text) {\n this.text = void 0;\n this.text = text;\n }\n /**\n * Converts the text node into a DOM text node.\n */\n\n\n toNode() {\n return document.createTextNode(this.text);\n }\n /**\n * Converts the text node into escaped HTML markup\n * (representing the text itself).\n */\n\n\n toMarkup() {\n return utils.escape(this.toText());\n }\n /**\n * Converts the text node into a string\n * (representing the text itself).\n */\n\n\n toText() {\n return this.text;\n }\n\n}\n/**\n * This node represents a space, but may render as <mspace.../> or as text,\n * depending on the width.\n */\n\nclass SpaceNode {\n /**\n * Create a Space node with width given in CSS ems.\n */\n constructor(width) {\n this.width = void 0;\n this.character = void 0;\n this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html\n // for a table of space-like characters. We use Unicode\n // representations instead of &LongNames; as it's not clear how to\n // make the latter via document.createTextNode.\n\n if (width >= 0.05555 && width <= 0.05556) {\n this.character = \"\\u200a\"; //  \n } else if (width >= 0.1666 && width <= 0.1667) {\n this.character = \"\\u2009\"; //  \n } else if (width >= 0.2222 && width <= 0.2223) {\n this.character = \"\\u2005\"; //  \n } else if (width >= 0.2777 && width <= 0.2778) {\n this.character = \"\\u2005\\u200a\"; //   \n } else if (width >= -0.05556 && width <= -0.05555) {\n this.character = \"\\u200a\\u2063\"; // ​\n } else if (width >= -0.1667 && width <= -0.1666) {\n this.character = \"\\u2009\\u2063\"; // ​\n } else if (width >= -0.2223 && width <= -0.2222) {\n this.character = \"\\u205f\\u2063\"; // ​\n } else if (width >= -0.2778 && width <= -0.2777) {\n this.character = \"\\u2005\\u2063\"; // ​\n } else {\n this.character = null;\n }\n }\n /**\n * Converts the math node into a MathML-namespaced DOM element.\n */\n\n\n toNode() {\n if (this.character) {\n return document.createTextNode(this.character);\n } else {\n var node = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"mspace\");\n node.setAttribute(\"width\", makeEm(this.width));\n return node;\n }\n }\n /**\n * Converts the math node into an HTML markup string.\n */\n\n\n toMarkup() {\n if (this.character) {\n return \"<mtext>\" + this.character + \"</mtext>\";\n } else {\n return \"<mspace width=\\\"\" + makeEm(this.width) + \"\\\"/>\";\n }\n }\n /**\n * Converts the math node into a string, similar to innerText.\n */\n\n\n toText() {\n if (this.character) {\n return this.character;\n } else {\n return \" \";\n }\n }\n\n}\n\nvar mathMLTree = {\n MathNode,\n TextNode,\n SpaceNode,\n newDocumentFragment\n};\n\n/**\n * This file converts a parse tree into a corresponding MathML tree. The main\n * entry point is the `buildMathML` function, which takes a parse tree from the\n * parser.\n */\n\n/**\n * Takes a symbol and converts it into a MathML text node after performing\n * optional replacement from symbols.js.\n */\nvar makeText = function makeText(text, mode, options) {\n if (symbols[mode][text] && symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.slice(4, 6) === \"tt\" || options.font && options.font.slice(4, 6) === \"tt\"))) {\n text = symbols[mode][text].replace;\n }\n\n return new mathMLTree.TextNode(text);\n};\n/**\n * Wrap the given array of nodes in an <mrow> node if needed, i.e.,\n * unless the array has length 1. Always returns a single node.\n */\n\nvar makeRow = function makeRow(body) {\n if (body.length === 1) {\n return body[0];\n } else {\n return new mathMLTree.MathNode(\"mrow\", body);\n }\n};\n/**\n * Returns the math variant as a string or null if none is required.\n */\n\nvar getVariant = function getVariant(group, options) {\n // Handle \\text... font specifiers as best we can.\n // MathML has a limited list of allowable mathvariant specifiers; see\n // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt\n if (options.fontFamily === \"texttt\") {\n return \"monospace\";\n } else if (options.fontFamily === \"textsf\") {\n if (options.fontShape === \"textit\" && options.fontWeight === \"textbf\") {\n return \"sans-serif-bold-italic\";\n } else if (options.fontShape === \"textit\") {\n return \"sans-serif-italic\";\n } else if (options.fontWeight === \"textbf\") {\n return \"bold-sans-serif\";\n } else {\n return \"sans-serif\";\n }\n } else if (options.fontShape === \"textit\" && options.fontWeight === \"textbf\") {\n return \"bold-italic\";\n } else if (options.fontShape === \"textit\") {\n return \"italic\";\n } else if (options.fontWeight === \"textbf\") {\n return \"bold\";\n }\n\n var font = options.font;\n\n if (!font || font === \"mathnormal\") {\n return null;\n }\n\n var mode = group.mode;\n\n if (font === \"mathit\") {\n return \"italic\";\n } else if (font === \"boldsymbol\") {\n return group.type === \"textord\" ? \"bold\" : \"bold-italic\";\n } else if (font === \"mathbf\") {\n return \"bold\";\n } else if (font === \"mathbb\") {\n return \"double-struck\";\n } else if (font === \"mathsfit\") {\n return \"sans-serif-italic\";\n } else if (font === \"mathfrak\") {\n return \"fraktur\";\n } else if (font === \"mathscr\" || font === \"mathcal\") {\n // MathML makes no distinction between script and calligraphic\n return \"script\";\n } else if (font === \"mathsf\") {\n return \"sans-serif\";\n } else if (font === \"mathtt\") {\n return \"monospace\";\n }\n\n var text = group.text;\n\n if ([\"\\\\imath\", \"\\\\jmath\"].includes(text)) {\n return null;\n }\n\n if (symbols[mode][text] && symbols[mode][text].replace) {\n text = symbols[mode][text].replace;\n }\n\n var fontName = buildCommon.fontMap[font].fontName;\n\n if (getCharacterMetrics(text, fontName, mode)) {\n return buildCommon.fontMap[font].variant;\n }\n\n return null;\n};\n/**\n * Check for <mi>.</mi> which is how a dot renders in MathML,\n * or <mo separator=\"true\" lspace=\"0em\" rspace=\"0em\">,</mo>\n * which is how a braced comma {,} renders in MathML\n */\n\nfunction isNumberPunctuation(group) {\n if (!group) {\n return false;\n }\n\n if (group.type === 'mi' && group.children.length === 1) {\n var child = group.children[0];\n return child instanceof TextNode && child.text === '.';\n } else if (group.type === 'mo' && group.children.length === 1 && group.getAttribute('separator') === 'true' && group.getAttribute('lspace') === '0em' && group.getAttribute('rspace') === '0em') {\n var _child = group.children[0];\n return _child instanceof TextNode && _child.text === ',';\n } else {\n return false;\n }\n}\n/**\n * Takes a list of nodes, builds them, and returns a list of the generated\n * MathML nodes. Also combine consecutive <mtext> outputs into a single\n * <mtext> tag.\n */\n\n\nvar buildExpression = function buildExpression(expression, options, isOrdgroup) {\n if (expression.length === 1) {\n var group = buildGroup(expression[0], options);\n\n if (isOrdgroup && group instanceof MathNode && group.type === \"mo\") {\n // When TeX writers want to suppress spacing on an operator,\n // they often put the operator by itself inside braces.\n group.setAttribute(\"lspace\", \"0em\");\n group.setAttribute(\"rspace\", \"0em\");\n }\n\n return [group];\n }\n\n var groups = [];\n var lastGroup;\n\n for (var i = 0; i < expression.length; i++) {\n var _group = buildGroup(expression[i], options);\n\n if (_group instanceof MathNode && lastGroup instanceof MathNode) {\n // Concatenate adjacent <mtext>s\n if (_group.type === 'mtext' && lastGroup.type === 'mtext' && _group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) {\n lastGroup.children.push(..._group.children);\n continue; // Concatenate adjacent <mn>s\n } else if (_group.type === 'mn' && lastGroup.type === 'mn') {\n lastGroup.children.push(..._group.children);\n continue; // Concatenate <mn>...</mn> followed by <mi>.</mi>\n } else if (isNumberPunctuation(_group) && lastGroup.type === 'mn') {\n lastGroup.children.push(..._group.children);\n continue; // Concatenate <mi>.</mi> followed by <mn>...</mn>\n } else if (_group.type === 'mn' && isNumberPunctuation(lastGroup)) {\n _group.children = [...lastGroup.children, ..._group.children];\n groups.pop(); // Put preceding <mn>...</mn> or <mi>.</mi> inside base of\n // <msup><mn>...base...</mn>...exponent...</msup> (or <msub>)\n } else if ((_group.type === 'msup' || _group.type === 'msub') && _group.children.length >= 1 && (lastGroup.type === 'mn' || isNumberPunctuation(lastGroup))) {\n var base = _group.children[0];\n\n if (base instanceof MathNode && base.type === 'mn') {\n base.children = [...lastGroup.children, ...base.children];\n groups.pop();\n } // \\not\n\n } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) {\n var lastChild = lastGroup.children[0];\n\n if (lastChild instanceof TextNode && lastChild.text === '\\u0338' && (_group.type === 'mo' || _group.type === 'mi' || _group.type === 'mn')) {\n var child = _group.children[0];\n\n if (child instanceof TextNode && child.text.length > 0) {\n // Overlay with combining character long solidus\n child.text = child.text.slice(0, 1) + \"\\u0338\" + child.text.slice(1);\n groups.pop();\n }\n }\n }\n }\n\n groups.push(_group);\n lastGroup = _group;\n }\n\n return groups;\n};\n/**\n * Equivalent to buildExpression, but wraps the elements in an <mrow>\n * if there's more than one. Returns a single node instead of an array.\n */\n\nvar buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) {\n return makeRow(buildExpression(expression, options, isOrdgroup));\n};\n/**\n * Takes a group from the parser and calls the appropriate groupBuilders function\n * on it to produce a MathML node.\n */\n\nvar buildGroup = function buildGroup(group, options) {\n if (!group) {\n return new mathMLTree.MathNode(\"mrow\");\n }\n\n if (_mathmlGroupBuilders[group.type]) {\n // Call the groupBuilders function\n // $FlowFixMe\n var result = _mathmlGroupBuilders[group.type](group, options); // $FlowFixMe\n\n return result;\n } else {\n throw new ParseError(\"Got group of unknown type: '\" + group.type + \"'\");\n }\n};\n/**\n * Takes a full parse tree and settings and builds a MathML representation of\n * it. In particular, we put the elements from building the parse tree into a\n * <semantics> tag so we can also include that TeX source as an annotation.\n *\n * Note that we actually return a domTree element with a `<math>` inside it so\n * we can do appropriate styling.\n */\n\nfunction buildMathML(tree, texExpression, options, isDisplayMode, forMathmlOnly) {\n var expression = buildExpression(tree, options); // TODO: Make a pass thru the MathML similar to buildHTML.traverseNonSpaceNodes\n // and add spacing nodes. This is necessary only adjacent to math operators\n // like \\sin or \\lim or to subsup elements that contain math operators.\n // MathML takes care of the other spacing issues.\n // Wrap up the expression in an mrow so it is presented in the semantics\n // tag correctly, unless it's a single <mrow> or <mtable>.\n\n var wrapper;\n\n if (expression.length === 1 && expression[0] instanceof MathNode && [\"mrow\", \"mtable\"].includes(expression[0].type)) {\n wrapper = expression[0];\n } else {\n wrapper = new mathMLTree.MathNode(\"mrow\", expression);\n } // Build a TeX annotation of the source\n\n\n var annotation = new mathMLTree.MathNode(\"annotation\", [new mathMLTree.TextNode(texExpression)]);\n annotation.setAttribute(\"encoding\", \"application/x-tex\");\n var semantics = new mathMLTree.MathNode(\"semantics\", [wrapper, annotation]);\n var math = new mathMLTree.MathNode(\"math\", [semantics]);\n math.setAttribute(\"xmlns\", \"http://www.w3.org/1998/Math/MathML\");\n\n if (isDisplayMode) {\n math.setAttribute(\"display\", \"block\");\n } // You can't style <math> nodes, so we wrap the node in a span.\n // NOTE: The span class is not typed to have <math> nodes as children, and\n // we don't want to make the children type more generic since the children\n // of span are expected to have more fields in `buildHtml` contexts.\n\n\n var wrapperClass = forMathmlOnly ? \"katex\" : \"katex-mathml\"; // $FlowFixMe\n\n return buildCommon.makeSpan([wrapperClass], [math]);\n}\n\nvar optionsFromSettings = function optionsFromSettings(settings) {\n return new Options({\n style: settings.displayMode ? Style$1.DISPLAY : Style$1.TEXT,\n maxSize: settings.maxSize,\n minRuleThickness: settings.minRuleThickness\n });\n};\n\nvar displayWrap = function displayWrap(node, settings) {\n if (settings.displayMode) {\n var classes = [\"katex-display\"];\n\n if (settings.leqno) {\n classes.push(\"leqno\");\n }\n\n if (settings.fleqn) {\n classes.push(\"fleqn\");\n }\n\n node = buildCommon.makeSpan(classes, [node]);\n }\n\n return node;\n};\n\nvar buildTree = function buildTree(tree, expression, settings) {\n var options = optionsFromSettings(settings);\n var katexNode;\n\n if (settings.output === \"mathml\") {\n return buildMathML(tree, expression, options, settings.displayMode, true);\n } else if (settings.output === \"html\") {\n var htmlNode = buildHTML(tree, options);\n katexNode = buildCommon.makeSpan([\"katex\"], [htmlNode]);\n } else {\n var mathMLNode = buildMathML(tree, expression, options, settings.displayMode, false);\n\n var _htmlNode = buildHTML(tree, options);\n\n katexNode = buildCommon.makeSpan([\"katex\"], [mathMLNode, _htmlNode]);\n }\n\n return displayWrap(katexNode, settings);\n};\nvar buildHTMLTree = function buildHTMLTree(tree, expression, settings) {\n var options = optionsFromSettings(settings);\n var htmlNode = buildHTML(tree, options);\n var katexNode = buildCommon.makeSpan([\"katex\"], [htmlNode]);\n return displayWrap(katexNode, settings);\n};\n\n/**\n * This file provides support to buildMathML.js and buildHTML.js\n * for stretchy wide elements rendered from SVG files\n * and other CSS trickery.\n */\nvar stretchyCodePoint = {\n widehat: \"^\",\n widecheck: \"ˇ\",\n widetilde: \"~\",\n utilde: \"~\",\n overleftarrow: \"\\u2190\",\n underleftarrow: \"\\u2190\",\n xleftarrow: \"\\u2190\",\n overrightarrow: \"\\u2192\",\n underrightarrow: \"\\u2192\",\n xrightarrow: \"\\u2192\",\n underbrace: \"\\u23df\",\n overbrace: \"\\u23de\",\n overgroup: \"\\u23e0\",\n undergroup: \"\\u23e1\",\n overleftrightarrow: \"\\u2194\",\n underleftrightarrow: \"\\u2194\",\n xleftrightarrow: \"\\u2194\",\n Overrightarrow: \"\\u21d2\",\n xRightarrow: \"\\u21d2\",\n overleftharpoon: \"\\u21bc\",\n xleftharpoonup: \"\\u21bc\",\n overrightharpoon: \"\\u21c0\",\n xrightharpoonup: \"\\u21c0\",\n xLeftarrow: \"\\u21d0\",\n xLeftrightarrow: \"\\u21d4\",\n xhookleftarrow: \"\\u21a9\",\n xhookrightarrow: \"\\u21aa\",\n xmapsto: \"\\u21a6\",\n xrightharpoondown: \"\\u21c1\",\n xleftharpoondown: \"\\u21bd\",\n xrightleftharpoons: \"\\u21cc\",\n xleftrightharpoons: \"\\u21cb\",\n xtwoheadleftarrow: \"\\u219e\",\n xtwoheadrightarrow: \"\\u21a0\",\n xlongequal: \"=\",\n xtofrom: \"\\u21c4\",\n xrightleftarrows: \"\\u21c4\",\n xrightequilibrium: \"\\u21cc\",\n // Not a perfect match.\n xleftequilibrium: \"\\u21cb\",\n // None better available.\n \"\\\\cdrightarrow\": \"\\u2192\",\n \"\\\\cdleftarrow\": \"\\u2190\",\n \"\\\\cdlongequal\": \"=\"\n};\n\nvar mathMLnode = function mathMLnode(label) {\n var node = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(stretchyCodePoint[label.replace(/^\\\\/, '')])]);\n node.setAttribute(\"stretchy\", \"true\");\n return node;\n}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts.\n// Copyright (c) 2009-2010, Design Science, Inc. (<www.mathjax.org>)\n// Copyright (c) 2014-2017 Khan Academy (<www.khanacademy.org>)\n// Licensed under the SIL Open Font License, Version 1.1.\n// See \\nhttp://scripts.sil.org/OFL\n// Very Long SVGs\n// Many of the KaTeX stretchy wide elements use a long SVG image and an\n// overflow: hidden tactic to achieve a stretchy image while avoiding\n// distortion of arrowheads or brace corners.\n// The SVG typically contains a very long (400 em) arrow.\n// The SVG is in a container span that has overflow: hidden, so the span\n// acts like a window that exposes only part of the SVG.\n// The SVG always has a longer, thinner aspect ratio than the container span.\n// After the SVG fills 100% of the height of the container span,\n// there is a long arrow shaft left over. That left-over shaft is not shown.\n// Instead, it is sliced off because the span's CSS has overflow: hidden.\n// Thus, the reader sees an arrow that matches the subject matter width\n// without distortion.\n// Some functions, such as \\cancel, need to vary their aspect ratio. These\n// functions do not get the overflow SVG treatment.\n// Second Brush Stroke\n// Low resolution monitors struggle to display images in fine detail.\n// So browsers apply anti-aliasing. A long straight arrow shaft therefore\n// will sometimes appear as if it has a blurred edge.\n// To mitigate this, these SVG files contain a second \"brush-stroke\" on the\n// arrow shafts. That is, a second long thin rectangular SVG path has been\n// written directly on top of each arrow shaft. This reinforcement causes\n// some of the screen pixels to display as black instead of the anti-aliased\n// gray pixel that a single path would generate. So we get arrow shafts\n// whose edges appear to be sharper.\n// In the katexImagesData object just below, the dimensions all\n// correspond to path geometry inside the relevant SVG.\n// For example, \\overrightarrow uses the same arrowhead as glyph U+2192\n// from the KaTeX Main font. The scaling factor is 1000.\n// That is, inside the font, that arrowhead is 522 units tall, which\n// corresponds to 0.522 em inside the document.\n\n\nvar katexImagesData = {\n // path(s), minWidth, height, align\n overrightarrow: [[\"rightarrow\"], 0.888, 522, \"xMaxYMin\"],\n overleftarrow: [[\"leftarrow\"], 0.888, 522, \"xMinYMin\"],\n underrightarrow: [[\"rightarrow\"], 0.888, 522, \"xMaxYMin\"],\n underleftarrow: [[\"leftarrow\"], 0.888, 522, \"xMinYMin\"],\n xrightarrow: [[\"rightarrow\"], 1.469, 522, \"xMaxYMin\"],\n \"\\\\cdrightarrow\": [[\"rightarrow\"], 3.0, 522, \"xMaxYMin\"],\n // CD minwwidth2.5pc\n xleftarrow: [[\"leftarrow\"], 1.469, 522, \"xMinYMin\"],\n \"\\\\cdleftarrow\": [[\"leftarrow\"], 3.0, 522, \"xMinYMin\"],\n Overrightarrow: [[\"doublerightarrow\"], 0.888, 560, \"xMaxYMin\"],\n xRightarrow: [[\"doublerightarrow\"], 1.526, 560, \"xMaxYMin\"],\n xLeftarrow: [[\"doubleleftarrow\"], 1.526, 560, \"xMinYMin\"],\n overleftharpoon: [[\"leftharpoon\"], 0.888, 522, \"xMinYMin\"],\n xleftharpoonup: [[\"leftharpoon\"], 0.888, 522, \"xMinYMin\"],\n xleftharpoondown: [[\"leftharpoondown\"], 0.888, 522, \"xMinYMin\"],\n overrightharpoon: [[\"rightharpoon\"], 0.888, 522, \"xMaxYMin\"],\n xrightharpoonup: [[\"rightharpoon\"], 0.888, 522, \"xMaxYMin\"],\n xrightharpoondown: [[\"rightharpoondown\"], 0.888, 522, \"xMaxYMin\"],\n xlongequal: [[\"longequal\"], 0.888, 334, \"xMinYMin\"],\n \"\\\\cdlongequal\": [[\"longequal\"], 3.0, 334, \"xMinYMin\"],\n xtwoheadleftarrow: [[\"twoheadleftarrow\"], 0.888, 334, \"xMinYMin\"],\n xtwoheadrightarrow: [[\"twoheadrightarrow\"], 0.888, 334, \"xMaxYMin\"],\n overleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 0.888, 522],\n overbrace: [[\"leftbrace\", \"midbrace\", \"rightbrace\"], 1.6, 548],\n underbrace: [[\"leftbraceunder\", \"midbraceunder\", \"rightbraceunder\"], 1.6, 548],\n underleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 0.888, 522],\n xleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 1.75, 522],\n xLeftrightarrow: [[\"doubleleftarrow\", \"doublerightarrow\"], 1.75, 560],\n xrightleftharpoons: [[\"leftharpoondownplus\", \"rightharpoonplus\"], 1.75, 716],\n xleftrightharpoons: [[\"leftharpoonplus\", \"rightharpoondownplus\"], 1.75, 716],\n xhookleftarrow: [[\"leftarrow\", \"righthook\"], 1.08, 522],\n xhookrightarrow: [[\"lefthook\", \"rightarrow\"], 1.08, 522],\n overlinesegment: [[\"leftlinesegment\", \"rightlinesegment\"], 0.888, 522],\n underlinesegment: [[\"leftlinesegment\", \"rightlinesegment\"], 0.888, 522],\n overgroup: [[\"leftgroup\", \"rightgroup\"], 0.888, 342],\n undergroup: [[\"leftgroupunder\", \"rightgroupunder\"], 0.888, 342],\n xmapsto: [[\"leftmapsto\", \"rightarrow\"], 1.5, 522],\n xtofrom: [[\"leftToFrom\", \"rightToFrom\"], 1.75, 528],\n // The next three arrows are from the mhchem package.\n // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the\n // document as \\xrightarrow or \\xrightleftharpoons. Those have\n // min-length = 1.75em, so we set min-length on these next three to match.\n xrightleftarrows: [[\"baraboveleftarrow\", \"rightarrowabovebar\"], 1.75, 901],\n xrightequilibrium: [[\"baraboveshortleftharpoon\", \"rightharpoonaboveshortbar\"], 1.75, 716],\n xleftequilibrium: [[\"shortbaraboveleftharpoon\", \"shortrightharpoonabovebar\"], 1.75, 716]\n};\n\nvar groupLength = function groupLength(arg) {\n if (arg.type === \"ordgroup\") {\n return arg.body.length;\n } else {\n return 1;\n }\n};\n\nvar svgSpan = function svgSpan(group, options) {\n // Create a span with inline SVG for the element.\n function buildSvgSpan_() {\n var viewBoxWidth = 400000; // default\n\n var label = group.label.slice(1);\n\n if ([\"widehat\", \"widecheck\", \"widetilde\", \"utilde\"].includes(label)) {\n // Each type in the `if` statement corresponds to one of the ParseNode\n // types below. This narrowing is required to access `grp.base`.\n // $FlowFixMe\n var grp = group; // There are four SVG images available for each function.\n // Choose a taller image when there are more characters.\n\n var numChars = groupLength(grp.base);\n var viewBoxHeight;\n var pathName;\n\n var _height;\n\n if (numChars > 5) {\n if (label === \"widehat\" || label === \"widecheck\") {\n viewBoxHeight = 420;\n viewBoxWidth = 2364;\n _height = 0.42;\n pathName = label + \"4\";\n } else {\n viewBoxHeight = 312;\n viewBoxWidth = 2340;\n _height = 0.34;\n pathName = \"tilde4\";\n }\n } else {\n var imgIndex = [1, 1, 2, 2, 3, 3][numChars];\n\n if (label === \"widehat\" || label === \"widecheck\") {\n viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex];\n viewBoxHeight = [0, 239, 300, 360, 420][imgIndex];\n _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex];\n pathName = label + imgIndex;\n } else {\n viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex];\n viewBoxHeight = [0, 260, 286, 306, 312][imgIndex];\n _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex];\n pathName = \"tilde\" + imgIndex;\n }\n }\n\n var path = new PathNode(pathName);\n var svgNode = new SvgNode([path], {\n \"width\": \"100%\",\n \"height\": makeEm(_height),\n \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + viewBoxHeight,\n \"preserveAspectRatio\": \"none\"\n });\n return {\n span: buildCommon.makeSvgSpan([], [svgNode], options),\n minWidth: 0,\n height: _height\n };\n } else {\n var spans = [];\n var data = katexImagesData[label];\n var [paths, _minWidth, _viewBoxHeight] = data;\n\n var _height2 = _viewBoxHeight / 1000;\n\n var numSvgChildren = paths.length;\n var widthClasses;\n var aligns;\n\n if (numSvgChildren === 1) {\n // $FlowFixMe: All these cases must be of the 4-tuple type.\n var align1 = data[3];\n widthClasses = [\"hide-tail\"];\n aligns = [align1];\n } else if (numSvgChildren === 2) {\n widthClasses = [\"halfarrow-left\", \"halfarrow-right\"];\n aligns = [\"xMinYMin\", \"xMaxYMin\"];\n } else if (numSvgChildren === 3) {\n widthClasses = [\"brace-left\", \"brace-center\", \"brace-right\"];\n aligns = [\"xMinYMin\", \"xMidYMin\", \"xMaxYMin\"];\n } else {\n throw new Error(\"Correct katexImagesData or update code here to support\\n \" + numSvgChildren + \" children.\");\n }\n\n for (var i = 0; i < numSvgChildren; i++) {\n var _path = new PathNode(paths[i]);\n\n var _svgNode = new SvgNode([_path], {\n \"width\": \"400em\",\n \"height\": makeEm(_height2),\n \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + _viewBoxHeight,\n \"preserveAspectRatio\": aligns[i] + \" slice\"\n });\n\n var _span = buildCommon.makeSvgSpan([widthClasses[i]], [_svgNode], options);\n\n if (numSvgChildren === 1) {\n return {\n span: _span,\n minWidth: _minWidth,\n height: _height2\n };\n } else {\n _span.style.height = makeEm(_height2);\n spans.push(_span);\n }\n }\n\n return {\n span: buildCommon.makeSpan([\"stretchy\"], spans, options),\n minWidth: _minWidth,\n height: _height2\n };\n }\n } // buildSvgSpan_()\n\n\n var {\n span,\n minWidth,\n height\n } = buildSvgSpan_(); // Note that we are returning span.depth = 0.\n // Any adjustments relative to the baseline must be done in buildHTML.\n\n span.height = height;\n span.style.height = makeEm(height);\n\n if (minWidth > 0) {\n span.style.minWidth = makeEm(minWidth);\n }\n\n return span;\n};\n\nvar encloseSpan = function encloseSpan(inner, label, topPad, bottomPad, options) {\n // Return an image span for \\cancel, \\bcancel, \\xcancel, \\fbox, or \\angl\n var img;\n var totalHeight = inner.height + inner.depth + topPad + bottomPad;\n\n if (/fbox|color|angl/.test(label)) {\n img = buildCommon.makeSpan([\"stretchy\", label], [], options);\n\n if (label === \"fbox\") {\n var color = options.color && options.getColor();\n\n if (color) {\n img.style.borderColor = color;\n }\n }\n } else {\n // \\cancel, \\bcancel, or \\xcancel\n // Since \\cancel's SVG is inline and it omits the viewBox attribute,\n // its stroke-width will not vary with span area.\n var lines = [];\n\n if (/^[bx]cancel$/.test(label)) {\n lines.push(new LineNode({\n \"x1\": \"0\",\n \"y1\": \"0\",\n \"x2\": \"100%\",\n \"y2\": \"100%\",\n \"stroke-width\": \"0.046em\"\n }));\n }\n\n if (/^x?cancel$/.test(label)) {\n lines.push(new LineNode({\n \"x1\": \"0\",\n \"y1\": \"100%\",\n \"x2\": \"100%\",\n \"y2\": \"0\",\n \"stroke-width\": \"0.046em\"\n }));\n }\n\n var svgNode = new SvgNode(lines, {\n \"width\": \"100%\",\n \"height\": makeEm(totalHeight)\n });\n img = buildCommon.makeSvgSpan([], [svgNode], options);\n }\n\n img.height = totalHeight;\n img.style.height = makeEm(totalHeight);\n return img;\n};\n\nvar stretchy = {\n encloseSpan,\n mathMLnode,\n svgSpan\n};\n\n/**\n * Asserts that the node is of the given type and returns it with stricter\n * typing. Throws if the node's type does not match.\n */\nfunction assertNodeType(node, type) {\n if (!node || node.type !== type) {\n throw new Error(\"Expected node of type \" + type + \", but got \" + (node ? \"node of type \" + node.type : String(node)));\n } // $FlowFixMe, >=0.125\n\n\n return node;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */\n\nfunction assertSymbolNodeType(node) {\n var typedNode = checkSymbolNodeType(node);\n\n if (!typedNode) {\n throw new Error(\"Expected node of symbol group type, but got \" + (node ? \"node of type \" + node.type : String(node)));\n }\n\n return typedNode;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */\n\nfunction checkSymbolNodeType(node) {\n if (node && (node.type === \"atom\" || NON_ATOMS.hasOwnProperty(node.type))) {\n // $FlowFixMe\n return node;\n }\n\n return null;\n}\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only \"accent\", but\n// also \"supsub\" since an accent can affect super/subscripting.\nvar htmlBuilder$a = (grp, options) => {\n // Accents are handled in the TeXbook pg. 443, rule 12.\n var base;\n var group;\n var supSubGroup;\n\n if (grp && grp.type === \"supsub\") {\n // If our base is a character box, and we have superscripts and\n // subscripts, the supsub will defer to us. In particular, we want\n // to attach the superscripts and subscripts to the inner body (so\n // that the position of the superscripts and subscripts won't be\n // affected by the height of the accent). We accomplish this by\n // sticking the base of the accent into the base of the supsub, and\n // rendering that, while keeping track of where the accent is.\n // The real accent group is the base of the supsub group\n group = assertNodeType(grp.base, \"accent\"); // The character box is the base of the accent group\n\n base = group.base; // Stick the character box into the base of the supsub group\n\n grp.base = base; // Rerender the supsub group with its new base, and store that\n // result.\n\n supSubGroup = assertSpan(buildGroup$1(grp, options)); // reset original base\n\n grp.base = group;\n } else {\n group = assertNodeType(grp, \"accent\");\n base = group.base;\n } // Build the base group\n\n\n var body = buildGroup$1(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character?\n\n var mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line \"If the\n // nucleus is not a single character, let s = 0; otherwise set s to the\n // kern amount for the nucleus followed by the \\skewchar of its font.\"\n // Note that our skew metrics are just the kern between each character\n // and the skewchar.\n\n var skew = 0;\n\n if (mustShift) {\n // If the base is a character box, then we want the skew of the\n // innermost character. To do that, we find the innermost character:\n var baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it\n\n var baseGroup = buildGroup$1(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol.\n\n skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we\n // removed with getBaseElem might contain things like \\color which\n // we can't get rid of.\n // TODO(emily): Find a better way to get the skew\n }\n\n var accentBelow = group.label === \"\\\\c\"; // calculate the amount of space between the body and the accent\n\n var clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options.fontMetrics().xHeight); // Build the accent\n\n var accentBody;\n\n if (!group.isStretchy) {\n var accent;\n var width;\n\n if (group.label === \"\\\\vec\") {\n // Before version 0.9, \\vec used the combining font glyph U+20D7.\n // But browsers, especially Safari, are not consistent in how they\n // render combining characters when not preceded by a character.\n // So now we use an SVG.\n // If Safari reforms, we should consider reverting to the glyph.\n accent = buildCommon.staticSvg(\"vec\", options);\n width = buildCommon.svgData.vec[1];\n } else {\n accent = buildCommon.makeOrd({\n mode: group.mode,\n text: group.label\n }, options, \"textord\");\n accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to\n // shift the accent over to a place we don't want.\n\n accent.italic = 0;\n width = accent.width;\n\n if (accentBelow) {\n clearance += accent.depth;\n }\n }\n\n accentBody = buildCommon.makeSpan([\"accent-body\"], [accent]); // \"Full\" accents expand the width of the resulting symbol to be\n // at least the width of the accent, and overlap directly onto the\n // character without any vertical offset.\n\n var accentFull = group.label === \"\\\\textcircled\";\n\n if (accentFull) {\n accentBody.classes.push('accent-full');\n clearance = body.height;\n } // Shift the accent over by the skew.\n\n\n var left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }`\n // so that the accent doesn't contribute to the bounding box.\n // We need to shift the character by its width (effectively half\n // its width) to compensate.\n\n if (!accentFull) {\n left -= width / 2;\n }\n\n accentBody.style.left = makeEm(left); // \\textcircled uses the \\bigcirc glyph, so it needs some\n // vertical adjustment to match LaTeX.\n\n if (group.label === \"\\\\textcircled\") {\n accentBody.style.top = \".2em\";\n }\n\n accentBody = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: body\n }, {\n type: \"kern\",\n size: -clearance\n }, {\n type: \"elem\",\n elem: accentBody\n }]\n }, options);\n } else {\n accentBody = stretchy.svgSpan(group, options);\n accentBody = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: body\n }, {\n type: \"elem\",\n elem: accentBody,\n wrapperClasses: [\"svg-align\"],\n wrapperStyle: skew > 0 ? {\n width: \"calc(100% - \" + makeEm(2 * skew) + \")\",\n marginLeft: makeEm(2 * skew)\n } : undefined\n }]\n }, options);\n }\n\n var accentWrap = buildCommon.makeSpan([\"mord\", \"accent\"], [accentBody], options);\n\n if (supSubGroup) {\n // Here, we replace the \"base\" child of the supsub with our newly\n // generated accent.\n supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the\n // accent, we manually recalculate height.\n\n supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not.\n\n supSubGroup.classes[0] = \"mord\";\n return supSubGroup;\n } else {\n return accentWrap;\n }\n};\n\nvar mathmlBuilder$9 = (group, options) => {\n var accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode(\"mo\", [makeText(group.label, group.mode)]);\n var node = new mathMLTree.MathNode(\"mover\", [buildGroup(group.base, options), accentNode]);\n node.setAttribute(\"accent\", \"true\");\n return node;\n};\n\nvar NON_STRETCHY_ACCENT_REGEX = new RegExp([\"\\\\acute\", \"\\\\grave\", \"\\\\ddot\", \"\\\\tilde\", \"\\\\bar\", \"\\\\breve\", \"\\\\check\", \"\\\\hat\", \"\\\\vec\", \"\\\\dot\", \"\\\\mathring\"].map(accent => \"\\\\\" + accent).join(\"|\")); // Accents\n\ndefineFunction({\n type: \"accent\",\n names: [\"\\\\acute\", \"\\\\grave\", \"\\\\ddot\", \"\\\\tilde\", \"\\\\bar\", \"\\\\breve\", \"\\\\check\", \"\\\\hat\", \"\\\\vec\", \"\\\\dot\", \"\\\\mathring\", \"\\\\widecheck\", \"\\\\widehat\", \"\\\\widetilde\", \"\\\\overrightarrow\", \"\\\\overleftarrow\", \"\\\\Overrightarrow\", \"\\\\overleftrightarrow\", \"\\\\overgroup\", \"\\\\overlinesegment\", \"\\\\overleftharpoon\", \"\\\\overrightharpoon\"],\n props: {\n numArgs: 1\n },\n handler: (context, args) => {\n var base = normalizeArgument(args[0]);\n var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName);\n var isShifty = !isStretchy || context.funcName === \"\\\\widehat\" || context.funcName === \"\\\\widetilde\" || context.funcName === \"\\\\widecheck\";\n return {\n type: \"accent\",\n mode: context.parser.mode,\n label: context.funcName,\n isStretchy: isStretchy,\n isShifty: isShifty,\n base: base\n };\n },\n htmlBuilder: htmlBuilder$a,\n mathmlBuilder: mathmlBuilder$9\n}); // Text-mode accents\n\ndefineFunction({\n type: \"accent\",\n names: [\"\\\\'\", \"\\\\`\", \"\\\\^\", \"\\\\~\", \"\\\\=\", \"\\\\u\", \"\\\\.\", '\\\\\"', \"\\\\c\", \"\\\\r\", \"\\\\H\", \"\\\\v\", \"\\\\textcircled\"],\n props: {\n numArgs: 1,\n allowedInText: true,\n allowedInMath: true,\n // unless in strict mode\n argTypes: [\"primitive\"]\n },\n handler: (context, args) => {\n var base = args[0];\n var mode = context.parser.mode;\n\n if (mode === \"math\") {\n context.parser.settings.reportNonstrict(\"mathVsTextAccents\", \"LaTeX's accent \" + context.funcName + \" works only in text mode\");\n mode = \"text\";\n }\n\n return {\n type: \"accent\",\n mode: mode,\n label: context.funcName,\n isStretchy: false,\n isShifty: true,\n base: base\n };\n },\n htmlBuilder: htmlBuilder$a,\n mathmlBuilder: mathmlBuilder$9\n});\n\n// Horizontal overlap functions\ndefineFunction({\n type: \"accentUnder\",\n names: [\"\\\\underleftarrow\", \"\\\\underrightarrow\", \"\\\\underleftrightarrow\", \"\\\\undergroup\", \"\\\\underlinesegment\", \"\\\\utilde\"],\n props: {\n numArgs: 1\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var base = args[0];\n return {\n type: \"accentUnder\",\n mode: parser.mode,\n label: funcName,\n base: base\n };\n },\n htmlBuilder: (group, options) => {\n // Treat under accents much like underlines.\n var innerGroup = buildGroup$1(group.base, options);\n var accentBody = stretchy.svgSpan(group, options);\n var kern = group.label === \"\\\\utilde\" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns\n\n var vlist = buildCommon.makeVList({\n positionType: \"top\",\n positionData: innerGroup.height,\n children: [{\n type: \"elem\",\n elem: accentBody,\n wrapperClasses: [\"svg-align\"]\n }, {\n type: \"kern\",\n size: kern\n }, {\n type: \"elem\",\n elem: innerGroup\n }]\n }, options);\n return buildCommon.makeSpan([\"mord\", \"accentunder\"], [vlist], options);\n },\n mathmlBuilder: (group, options) => {\n var accentNode = stretchy.mathMLnode(group.label);\n var node = new mathMLTree.MathNode(\"munder\", [buildGroup(group.base, options), accentNode]);\n node.setAttribute(\"accentunder\", \"true\");\n return node;\n }\n});\n\n// Helper function\nvar paddedNode = group => {\n var node = new mathMLTree.MathNode(\"mpadded\", group ? [group] : []);\n node.setAttribute(\"width\", \"+0.6em\");\n node.setAttribute(\"lspace\", \"0.3em\");\n return node;\n}; // Stretchy arrows with an optional argument\n\n\ndefineFunction({\n type: \"xArrow\",\n names: [\"\\\\xleftarrow\", \"\\\\xrightarrow\", \"\\\\xLeftarrow\", \"\\\\xRightarrow\", \"\\\\xleftrightarrow\", \"\\\\xLeftrightarrow\", \"\\\\xhookleftarrow\", \"\\\\xhookrightarrow\", \"\\\\xmapsto\", \"\\\\xrightharpoondown\", \"\\\\xrightharpoonup\", \"\\\\xleftharpoondown\", \"\\\\xleftharpoonup\", \"\\\\xrightleftharpoons\", \"\\\\xleftrightharpoons\", \"\\\\xlongequal\", \"\\\\xtwoheadrightarrow\", \"\\\\xtwoheadleftarrow\", \"\\\\xtofrom\", // The next 3 functions are here to support the mhchem extension.\n // Direct use of these functions is discouraged and may break someday.\n \"\\\\xrightleftarrows\", \"\\\\xrightequilibrium\", \"\\\\xleftequilibrium\", // The next 3 functions are here only to support the {CD} environment.\n \"\\\\\\\\cdrightarrow\", \"\\\\\\\\cdleftarrow\", \"\\\\\\\\cdlongequal\"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1\n },\n\n handler(_ref, args, optArgs) {\n var {\n parser,\n funcName\n } = _ref;\n return {\n type: \"xArrow\",\n mode: parser.mode,\n label: funcName,\n body: args[0],\n below: optArgs[0]\n };\n },\n\n // Flow is unable to correctly infer the type of `group`, even though it's\n // unambiguously determined from the passed-in `type` above.\n htmlBuilder(group, options) {\n var style = options.style; // Build the argument groups in the appropriate style.\n // Ref: amsmath.dtx: \\hbox{$\\scriptstyle\\mkern#3mu{#6}\\mkern#4mu$}%\n // Some groups can return document fragments. Handle those by wrapping\n // them in a span.\n\n var newOptions = options.havingStyle(style.sup());\n var upperGroup = buildCommon.wrapFragment(buildGroup$1(group.body, newOptions, options), options);\n var arrowPrefix = group.label.slice(0, 2) === \"\\\\x\" ? \"x\" : \"cd\";\n upperGroup.classes.push(arrowPrefix + \"-arrow-pad\");\n var lowerGroup;\n\n if (group.below) {\n // Build the lower group\n newOptions = options.havingStyle(style.sub());\n lowerGroup = buildCommon.wrapFragment(buildGroup$1(group.below, newOptions, options), options);\n lowerGroup.classes.push(arrowPrefix + \"-arrow-pad\");\n }\n\n var arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0.\n // The point we want on the math axis is at 0.5 * arrowBody.height.\n\n var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\\if0#2\\else\\mkern#2mu\\fi\n\n var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu\n\n if (upperGroup.depth > 0.25 || group.label === \"\\\\xleftequilibrium\") {\n upperShift -= upperGroup.depth; // shift up if depth encroaches\n } // Generate the vlist\n\n\n var vlist;\n\n if (lowerGroup) {\n var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111;\n vlist = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [{\n type: \"elem\",\n elem: upperGroup,\n shift: upperShift\n }, {\n type: \"elem\",\n elem: arrowBody,\n shift: arrowShift\n }, {\n type: \"elem\",\n elem: lowerGroup,\n shift: lowerShift\n }]\n }, options);\n } else {\n vlist = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [{\n type: \"elem\",\n elem: upperGroup,\n shift: upperShift\n }, {\n type: \"elem\",\n elem: arrowBody,\n shift: arrowShift\n }]\n }, options);\n } // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n\n\n vlist.children[0].children[0].children[1].classes.push(\"svg-align\");\n return buildCommon.makeSpan([\"mrel\", \"x-arrow\"], [vlist], options);\n },\n\n mathmlBuilder(group, options) {\n var arrowNode = stretchy.mathMLnode(group.label);\n arrowNode.setAttribute(\"minsize\", group.label.charAt(0) === \"x\" ? \"1.75em\" : \"3.0em\");\n var node;\n\n if (group.body) {\n var upperNode = paddedNode(buildGroup(group.body, options));\n\n if (group.below) {\n var lowerNode = paddedNode(buildGroup(group.below, options));\n node = new mathMLTree.MathNode(\"munderover\", [arrowNode, lowerNode, upperNode]);\n } else {\n node = new mathMLTree.MathNode(\"mover\", [arrowNode, upperNode]);\n }\n } else if (group.below) {\n var _lowerNode = paddedNode(buildGroup(group.below, options));\n\n node = new mathMLTree.MathNode(\"munder\", [arrowNode, _lowerNode]);\n } else {\n // This should never happen.\n // Parser.js throws an error if there is no argument.\n node = paddedNode();\n node = new mathMLTree.MathNode(\"mover\", [arrowNode, node]);\n }\n\n return node;\n }\n\n});\n\nvar makeSpan = buildCommon.makeSpan;\n\nfunction htmlBuilder$9(group, options) {\n var elements = buildExpression$1(group.body, options, true);\n return makeSpan([group.mclass], elements, options);\n}\n\nfunction mathmlBuilder$8(group, options) {\n var node;\n var inner = buildExpression(group.body, options);\n\n if (group.mclass === \"minner\") {\n node = new mathMLTree.MathNode(\"mpadded\", inner);\n } else if (group.mclass === \"mord\") {\n if (group.isCharacterBox) {\n node = inner[0];\n node.type = \"mi\";\n } else {\n node = new mathMLTree.MathNode(\"mi\", inner);\n }\n } else {\n if (group.isCharacterBox) {\n node = inner[0];\n node.type = \"mo\";\n } else {\n node = new mathMLTree.MathNode(\"mo\", inner);\n } // Set spacing based on what is the most likely adjacent atom type.\n // See TeXbook p170.\n\n\n if (group.mclass === \"mbin\") {\n node.attributes.lspace = \"0.22em\"; // medium space\n\n node.attributes.rspace = \"0.22em\";\n } else if (group.mclass === \"mpunct\") {\n node.attributes.lspace = \"0em\";\n node.attributes.rspace = \"0.17em\"; // thinspace\n } else if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n node.attributes.lspace = \"0em\";\n node.attributes.rspace = \"0em\";\n } else if (group.mclass === \"minner\") {\n node.attributes.lspace = \"0.0556em\"; // 1 mu is the most likely option\n\n node.attributes.width = \"+0.1111em\";\n } // MathML <mo> default space is 5/18 em, so <mrel> needs no action.\n // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo\n\n }\n\n return node;\n} // Math class commands except \\mathop\n\n\ndefineFunction({\n type: \"mclass\",\n names: [\"\\\\mathord\", \"\\\\mathbin\", \"\\\\mathrel\", \"\\\\mathopen\", \"\\\\mathclose\", \"\\\\mathpunct\", \"\\\\mathinner\"],\n props: {\n numArgs: 1,\n primitive: true\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n var body = args[0];\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass: \"m\" + funcName.slice(5),\n // TODO(kevinb): don't prefix with 'm'\n body: ordargument(body),\n isCharacterBox: utils.isCharacterBox(body)\n };\n },\n\n htmlBuilder: htmlBuilder$9,\n mathmlBuilder: mathmlBuilder$8\n});\nvar binrelClass = arg => {\n // \\binrel@ spacing varies with (bin|rel|ord) of the atom in the argument.\n // (by rendering separately and with {}s before and after, and measuring\n // the change in spacing). We'll do roughly the same by detecting the\n // atom type directly.\n var atom = arg.type === \"ordgroup\" && arg.body.length ? arg.body[0] : arg;\n\n if (atom.type === \"atom\" && (atom.family === \"bin\" || atom.family === \"rel\")) {\n return \"m\" + atom.family;\n } else {\n return \"mord\";\n }\n}; // \\@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord.\n// This is equivalent to \\binrel@{x}\\binrel@@{y} in AMSTeX.\n\ndefineFunction({\n type: \"mclass\",\n names: [\"\\\\@binrel\"],\n props: {\n numArgs: 2\n },\n\n handler(_ref2, args) {\n var {\n parser\n } = _ref2;\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass: binrelClass(args[0]),\n body: ordargument(args[1]),\n isCharacterBox: utils.isCharacterBox(args[1])\n };\n }\n\n}); // Build a relation or stacked op by placing one symbol on top of another\n\ndefineFunction({\n type: \"mclass\",\n names: [\"\\\\stackrel\", \"\\\\overset\", \"\\\\underset\"],\n props: {\n numArgs: 2\n },\n\n handler(_ref3, args) {\n var {\n parser,\n funcName\n } = _ref3;\n var baseArg = args[1];\n var shiftedArg = args[0];\n var mclass;\n\n if (funcName !== \"\\\\stackrel\") {\n // LaTeX applies \\binrel spacing to \\overset and \\underset.\n mclass = binrelClass(baseArg);\n } else {\n mclass = \"mrel\"; // for \\stackrel\n }\n\n var baseOp = {\n type: \"op\",\n mode: baseArg.mode,\n limits: true,\n alwaysHandleSupSub: true,\n parentIsSupSub: false,\n symbol: false,\n suppressBaseShift: funcName !== \"\\\\stackrel\",\n body: ordargument(baseArg)\n };\n var supsub = {\n type: \"supsub\",\n mode: shiftedArg.mode,\n base: baseOp,\n sup: funcName === \"\\\\underset\" ? null : shiftedArg,\n sub: funcName === \"\\\\underset\" ? shiftedArg : null\n };\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass,\n body: [supsub],\n isCharacterBox: utils.isCharacterBox(supsub)\n };\n },\n\n htmlBuilder: htmlBuilder$9,\n mathmlBuilder: mathmlBuilder$8\n});\n\n// \\pmb is a simulation of bold font.\n// The version of \\pmb in ambsy.sty works by typesetting three copies\n// with small offsets. We use CSS text-shadow.\n// It's a hack. Not as good as a real bold font. Better than nothing.\ndefineFunction({\n type: \"pmb\",\n names: [\"\\\\pmb\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n return {\n type: \"pmb\",\n mode: parser.mode,\n mclass: binrelClass(args[0]),\n body: ordargument(args[0])\n };\n },\n\n htmlBuilder(group, options) {\n var elements = buildExpression$1(group.body, options, true);\n var node = buildCommon.makeSpan([group.mclass], elements, options);\n node.style.textShadow = \"0.02em 0.01em 0.04px\";\n return node;\n },\n\n mathmlBuilder(group, style) {\n var inner = buildExpression(group.body, style); // Wrap with an <mstyle> element.\n\n var node = new mathMLTree.MathNode(\"mstyle\", inner);\n node.setAttribute(\"style\", \"text-shadow: 0.02em 0.01em 0.04px\");\n return node;\n }\n\n});\n\nvar cdArrowFunctionName = {\n \">\": \"\\\\\\\\cdrightarrow\",\n \"<\": \"\\\\\\\\cdleftarrow\",\n \"=\": \"\\\\\\\\cdlongequal\",\n \"A\": \"\\\\uparrow\",\n \"V\": \"\\\\downarrow\",\n \"|\": \"\\\\Vert\",\n \".\": \"no arrow\"\n};\n\nvar newCell = () => {\n // Create an empty cell, to be filled below with parse nodes.\n // The parseTree from this module must be constructed like the\n // one created by parseArray(), so an empty CD cell must\n // be a ParseNode<\"styling\">. And CD is always displaystyle.\n // So these values are fixed and flow can do implicit typing.\n return {\n type: \"styling\",\n body: [],\n mode: \"math\",\n style: \"display\"\n };\n};\n\nvar isStartOfArrow = node => {\n return node.type === \"textord\" && node.text === \"@\";\n};\n\nvar isLabelEnd = (node, endChar) => {\n return (node.type === \"mathord\" || node.type === \"atom\") && node.text === endChar;\n};\n\nfunction cdArrow(arrowChar, labels, parser) {\n // Return a parse tree of an arrow and its labels.\n // This acts in a way similar to a macro expansion.\n var funcName = cdArrowFunctionName[arrowChar];\n\n switch (funcName) {\n case \"\\\\\\\\cdrightarrow\":\n case \"\\\\\\\\cdleftarrow\":\n return parser.callFunction(funcName, [labels[0]], [labels[1]]);\n\n case \"\\\\uparrow\":\n case \"\\\\downarrow\":\n {\n var leftLabel = parser.callFunction(\"\\\\\\\\cdleft\", [labels[0]], []);\n var bareArrow = {\n type: \"atom\",\n text: funcName,\n mode: \"math\",\n family: \"rel\"\n };\n var sizedArrow = parser.callFunction(\"\\\\Big\", [bareArrow], []);\n var rightLabel = parser.callFunction(\"\\\\\\\\cdright\", [labels[1]], []);\n var arrowGroup = {\n type: \"ordgroup\",\n mode: \"math\",\n body: [leftLabel, sizedArrow, rightLabel]\n };\n return parser.callFunction(\"\\\\\\\\cdparent\", [arrowGroup], []);\n }\n\n case \"\\\\\\\\cdlongequal\":\n return parser.callFunction(\"\\\\\\\\cdlongequal\", [], []);\n\n case \"\\\\Vert\":\n {\n var arrow = {\n type: \"textord\",\n text: \"\\\\Vert\",\n mode: \"math\"\n };\n return parser.callFunction(\"\\\\Big\", [arrow], []);\n }\n\n default:\n return {\n type: \"textord\",\n text: \" \",\n mode: \"math\"\n };\n }\n}\n\nfunction parseCD(parser) {\n // Get the array's parse nodes with \\\\ temporarily mapped to \\cr.\n var parsedRows = [];\n parser.gullet.beginGroup();\n parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n parser.gullet.beginGroup();\n\n while (true) {\n // eslint-disable-line no-constant-condition\n // Get the parse nodes for the next row.\n parsedRows.push(parser.parseExpression(false, \"\\\\\\\\\"));\n parser.gullet.endGroup();\n parser.gullet.beginGroup();\n var next = parser.fetch().text;\n\n if (next === \"&\" || next === \"\\\\\\\\\") {\n parser.consume();\n } else if (next === \"\\\\end\") {\n if (parsedRows[parsedRows.length - 1].length === 0) {\n parsedRows.pop(); // final row ended in \\\\\n }\n\n break;\n } else {\n throw new ParseError(\"Expected \\\\\\\\ or \\\\cr or \\\\end\", parser.nextToken);\n }\n }\n\n var row = [];\n var body = [row]; // Loop thru the parse nodes. Collect them into cells and arrows.\n\n for (var i = 0; i < parsedRows.length; i++) {\n // Start a new row.\n var rowNodes = parsedRows[i]; // Create the first cell.\n\n var cell = newCell();\n\n for (var j = 0; j < rowNodes.length; j++) {\n if (!isStartOfArrow(rowNodes[j])) {\n // If a parseNode is not an arrow, it goes into a cell.\n cell.body.push(rowNodes[j]);\n } else {\n // Parse node j is an \"@\", the start of an arrow.\n // Before starting on the arrow, push the cell into `row`.\n row.push(cell); // Now collect parseNodes into an arrow.\n // The character after \"@\" defines the arrow type.\n\n j += 1;\n var arrowChar = assertSymbolNodeType(rowNodes[j]).text; // Create two empty label nodes. We may or may not use them.\n\n var labels = new Array(2);\n labels[0] = {\n type: \"ordgroup\",\n mode: \"math\",\n body: []\n };\n labels[1] = {\n type: \"ordgroup\",\n mode: \"math\",\n body: []\n }; // Process the arrow.\n\n if (\"=|.\".indexOf(arrowChar) > -1) ; else if (\"<>AV\".indexOf(arrowChar) > -1) {\n // Four arrows, `@>>>`, `@<<<`, `@AAA`, and `@VVV`, each take\n // two optional labels. E.g. the right-point arrow syntax is\n // really: @>{optional label}>{optional label}>\n // Collect parseNodes into labels.\n for (var labelNum = 0; labelNum < 2; labelNum++) {\n var inLabel = true;\n\n for (var k = j + 1; k < rowNodes.length; k++) {\n if (isLabelEnd(rowNodes[k], arrowChar)) {\n inLabel = false;\n j = k;\n break;\n }\n\n if (isStartOfArrow(rowNodes[k])) {\n throw new ParseError(\"Missing a \" + arrowChar + \" character to complete a CD arrow.\", rowNodes[k]);\n }\n\n labels[labelNum].body.push(rowNodes[k]);\n }\n\n if (inLabel) {\n // isLabelEnd never returned a true.\n throw new ParseError(\"Missing a \" + arrowChar + \" character to complete a CD arrow.\", rowNodes[j]);\n }\n }\n } else {\n throw new ParseError(\"Expected one of \\\"<>AV=|.\\\" after @\", rowNodes[j]);\n } // Now join the arrow to its labels.\n\n\n var arrow = cdArrow(arrowChar, labels, parser); // Wrap the arrow in ParseNode<\"styling\">.\n // This is done to match parseArray() behavior.\n\n var wrappedArrow = {\n type: \"styling\",\n body: [arrow],\n mode: \"math\",\n style: \"display\" // CD is always displaystyle.\n\n };\n row.push(wrappedArrow); // In CD's syntax, cells are implicit. That is, everything that\n // is not an arrow gets collected into a cell. So create an empty\n // cell now. It will collect upcoming parseNodes.\n\n cell = newCell();\n }\n }\n\n if (i % 2 === 0) {\n // Even-numbered rows consist of: cell, arrow, cell, arrow, ... cell\n // The last cell is not yet pushed into `row`, so:\n row.push(cell);\n } else {\n // Odd-numbered rows consist of: vert arrow, empty cell, ... vert arrow\n // Remove the empty cell that was placed at the beginning of `row`.\n row.shift();\n }\n\n row = [];\n body.push(row);\n } // End row group\n\n\n parser.gullet.endGroup(); // End array group defining \\\\\n\n parser.gullet.endGroup(); // define column separation.\n\n var cols = new Array(body[0].length).fill({\n type: \"align\",\n align: \"c\",\n pregap: 0.25,\n // CD package sets \\enskip between columns.\n postgap: 0.25 // So pre and post each get half an \\enskip, i.e. 0.25em.\n\n });\n return {\n type: \"array\",\n mode: \"math\",\n body,\n arraystretch: 1,\n addJot: true,\n rowGaps: [null],\n cols,\n colSeparationType: \"CD\",\n hLinesBeforeRow: new Array(body.length + 1).fill([])\n };\n} // The functions below are not available for general use.\n// They are here only for internal use by the {CD} environment in placing labels\n// next to vertical arrows.\n// We don't need any such functions for horizontal arrows because we can reuse\n// the functionality that already exists for extensible arrows.\n\ndefineFunction({\n type: \"cdlabel\",\n names: [\"\\\\\\\\cdleft\", \"\\\\\\\\cdright\"],\n props: {\n numArgs: 1\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n return {\n type: \"cdlabel\",\n mode: parser.mode,\n side: funcName.slice(4),\n label: args[0]\n };\n },\n\n htmlBuilder(group, options) {\n var newOptions = options.havingStyle(options.style.sup());\n var label = buildCommon.wrapFragment(buildGroup$1(group.label, newOptions, options), options);\n label.classes.push(\"cd-label-\" + group.side);\n label.style.bottom = makeEm(0.8 - label.depth); // Zero out label height & depth, so vertical align of arrow is set\n // by the arrow height, not by the label.\n\n label.height = 0;\n label.depth = 0;\n return label;\n },\n\n mathmlBuilder(group, options) {\n var label = new mathMLTree.MathNode(\"mrow\", [buildGroup(group.label, options)]);\n label = new mathMLTree.MathNode(\"mpadded\", [label]);\n label.setAttribute(\"width\", \"0\");\n\n if (group.side === \"left\") {\n label.setAttribute(\"lspace\", \"-1width\");\n } // We have to guess at vertical alignment. We know the arrow is 1.8em tall,\n // But we don't know the height or depth of the label.\n\n\n label.setAttribute(\"voffset\", \"0.7em\");\n label = new mathMLTree.MathNode(\"mstyle\", [label]);\n label.setAttribute(\"displaystyle\", \"false\");\n label.setAttribute(\"scriptlevel\", \"1\");\n return label;\n }\n\n});\ndefineFunction({\n type: \"cdlabelparent\",\n names: [\"\\\\\\\\cdparent\"],\n props: {\n numArgs: 1\n },\n\n handler(_ref2, args) {\n var {\n parser\n } = _ref2;\n return {\n type: \"cdlabelparent\",\n mode: parser.mode,\n fragment: args[0]\n };\n },\n\n htmlBuilder(group, options) {\n // Wrap the vertical arrow and its labels.\n // The parent gets position: relative. The child gets position: absolute.\n // So CSS can locate the label correctly.\n var parent = buildCommon.wrapFragment(buildGroup$1(group.fragment, options), options);\n parent.classes.push(\"cd-vert-arrow\");\n return parent;\n },\n\n mathmlBuilder(group, options) {\n return new mathMLTree.MathNode(\"mrow\", [buildGroup(group.fragment, options)]);\n }\n\n});\n\n// {123} and converts into symbol with code 123. It is used by the *macro*\n// \\char defined in macros.js.\n\ndefineFunction({\n type: \"textord\",\n names: [\"\\\\@char\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n var arg = assertNodeType(args[0], \"ordgroup\");\n var group = arg.body;\n var number = \"\";\n\n for (var i = 0; i < group.length; i++) {\n var node = assertNodeType(group[i], \"textord\");\n number += node.text;\n }\n\n var code = parseInt(number);\n var text;\n\n if (isNaN(code)) {\n throw new ParseError(\"\\\\@char has non-numeric argument \" + number); // If we drop IE support, the following code could be replaced with\n // text = String.fromCodePoint(code)\n } else if (code < 0 || code >= 0x10ffff) {\n throw new ParseError(\"\\\\@char with invalid code point \" + number);\n } else if (code <= 0xffff) {\n text = String.fromCharCode(code);\n } else {\n // Astral code point; split into surrogate halves\n code -= 0x10000;\n text = String.fromCharCode((code >> 10) + 0xd800, (code & 0x3ff) + 0xdc00);\n }\n\n return {\n type: \"textord\",\n mode: parser.mode,\n text: text\n };\n }\n\n});\n\nvar htmlBuilder$8 = (group, options) => {\n var elements = buildExpression$1(group.body, options.withColor(group.color), false); // \\color isn't supposed to affect the type of the elements it contains.\n // To accomplish this, we wrap the results in a fragment, so the inner\n // elements will be able to directly interact with their neighbors. For\n // example, `\\color{red}{2 +} 3` has the same spacing as `2 + 3`\n\n return buildCommon.makeFragment(elements);\n};\n\nvar mathmlBuilder$7 = (group, options) => {\n var inner = buildExpression(group.body, options.withColor(group.color));\n var node = new mathMLTree.MathNode(\"mstyle\", inner);\n node.setAttribute(\"mathcolor\", group.color);\n return node;\n};\n\ndefineFunction({\n type: \"color\",\n names: [\"\\\\textcolor\"],\n props: {\n numArgs: 2,\n allowedInText: true,\n argTypes: [\"color\", \"original\"]\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n var color = assertNodeType(args[0], \"color-token\").color;\n var body = args[1];\n return {\n type: \"color\",\n mode: parser.mode,\n color,\n body: ordargument(body)\n };\n },\n\n htmlBuilder: htmlBuilder$8,\n mathmlBuilder: mathmlBuilder$7\n});\ndefineFunction({\n type: \"color\",\n names: [\"\\\\color\"],\n props: {\n numArgs: 1,\n allowedInText: true,\n argTypes: [\"color\"]\n },\n\n handler(_ref2, args) {\n var {\n parser,\n breakOnTokenText\n } = _ref2;\n var color = assertNodeType(args[0], \"color-token\").color; // Set macro \\current@color in current namespace to store the current\n // color, mimicking the behavior of color.sty.\n // This is currently used just to correctly color a \\right\n // that follows a \\color command.\n\n parser.gullet.macros.set(\"\\\\current@color\", color); // Parse out the implicit body that should be colored.\n\n var body = parser.parseExpression(true, breakOnTokenText);\n return {\n type: \"color\",\n mode: parser.mode,\n color,\n body\n };\n },\n\n htmlBuilder: htmlBuilder$8,\n mathmlBuilder: mathmlBuilder$7\n});\n\n// Row breaks within tabular environments, and line breaks at top level\n\ndefineFunction({\n type: \"cr\",\n names: [\"\\\\\\\\\"],\n props: {\n numArgs: 0,\n numOptionalArgs: 0,\n allowedInText: true\n },\n\n handler(_ref, args, optArgs) {\n var {\n parser\n } = _ref;\n var size = parser.gullet.future().text === \"[\" ? parser.parseSizeGroup(true) : null;\n var newLine = !parser.settings.displayMode || !parser.settings.useStrictBehavior(\"newLineInDisplayMode\", \"In LaTeX, \\\\\\\\ or \\\\newline \" + \"does nothing in display mode\");\n return {\n type: \"cr\",\n mode: parser.mode,\n newLine,\n size: size && assertNodeType(size, \"size\").value\n };\n },\n\n // The following builders are called only at the top level,\n // not within tabular/array environments.\n htmlBuilder(group, options) {\n var span = buildCommon.makeSpan([\"mspace\"], [], options);\n\n if (group.newLine) {\n span.classes.push(\"newline\");\n\n if (group.size) {\n span.style.marginTop = makeEm(calculateSize(group.size, options));\n }\n }\n\n return span;\n },\n\n mathmlBuilder(group, options) {\n var node = new mathMLTree.MathNode(\"mspace\");\n\n if (group.newLine) {\n node.setAttribute(\"linebreak\", \"newline\");\n\n if (group.size) {\n node.setAttribute(\"height\", makeEm(calculateSize(group.size, options)));\n }\n }\n\n return node;\n }\n\n});\n\nvar globalMap = {\n \"\\\\global\": \"\\\\global\",\n \"\\\\long\": \"\\\\\\\\globallong\",\n \"\\\\\\\\globallong\": \"\\\\\\\\globallong\",\n \"\\\\def\": \"\\\\gdef\",\n \"\\\\gdef\": \"\\\\gdef\",\n \"\\\\edef\": \"\\\\xdef\",\n \"\\\\xdef\": \"\\\\xdef\",\n \"\\\\let\": \"\\\\\\\\globallet\",\n \"\\\\futurelet\": \"\\\\\\\\globalfuture\"\n};\n\nvar checkControlSequence = tok => {\n var name = tok.text;\n\n if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n throw new ParseError(\"Expected a control sequence\", tok);\n }\n\n return name;\n};\n\nvar getRHS = parser => {\n var tok = parser.gullet.popToken();\n\n if (tok.text === \"=\") {\n // consume optional equals\n tok = parser.gullet.popToken();\n\n if (tok.text === \" \") {\n // consume one optional space\n tok = parser.gullet.popToken();\n }\n }\n\n return tok;\n};\n\nvar letCommand = (parser, name, tok, global) => {\n var macro = parser.gullet.macros.get(tok.text);\n\n if (macro == null) {\n // don't expand it later even if a macro with the same name is defined\n // e.g., \\let\\foo=\\frac \\def\\frac{\\relax} \\frac12\n tok.noexpand = true;\n macro = {\n tokens: [tok],\n numArgs: 0,\n // reproduce the same behavior in expansion\n unexpandable: !parser.gullet.isExpandable(tok.text)\n };\n }\n\n parser.gullet.macros.set(name, macro, global);\n}; // <assignment> -> <non-macro assignment>|<macro assignment>\n// <non-macro assignment> -> <simple assignment>|\\global<non-macro assignment>\n// <macro assignment> -> <definition>|<prefix><macro assignment>\n// <prefix> -> \\global|\\long|\\outer\n\n\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\global\", \"\\\\long\", \"\\\\\\\\globallong\" // can’t be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n\n handler(_ref) {\n var {\n parser,\n funcName\n } = _ref;\n parser.consumeSpaces();\n var token = parser.fetch();\n\n if (globalMap[token.text]) {\n // KaTeX doesn't have \\par, so ignore \\long\n if (funcName === \"\\\\global\" || funcName === \"\\\\\\\\globallong\") {\n token.text = globalMap[token.text];\n }\n\n return assertNodeType(parser.parseFunction(), \"internal\");\n }\n\n throw new ParseError(\"Invalid token after macro prefix\", token);\n }\n\n}); // Basic support for macro definitions: \\def, \\gdef, \\edef, \\xdef\n// <definition> -> <def><control sequence><definition text>\n// <def> -> \\def|\\gdef|\\edef|\\xdef\n// <definition text> -> <parameter text><left brace><balanced text><right brace>\n\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\def\", \"\\\\gdef\", \"\\\\edef\", \"\\\\xdef\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref2) {\n var {\n parser,\n funcName\n } = _ref2;\n var tok = parser.gullet.popToken();\n var name = tok.text;\n\n if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n throw new ParseError(\"Expected a control sequence\", tok);\n }\n\n var numArgs = 0;\n var insert;\n var delimiters = [[]]; // <parameter text> contains no braces\n\n while (parser.gullet.future().text !== \"{\") {\n tok = parser.gullet.popToken();\n\n if (tok.text === \"#\") {\n // If the very last character of the <parameter text> is #, so that\n // this # is immediately followed by {, TeX will behave as if the {\n // had been inserted at the right end of both the parameter text\n // and the replacement text.\n if (parser.gullet.future().text === \"{\") {\n insert = parser.gullet.future();\n delimiters[numArgs].push(\"{\");\n break;\n } // A parameter, the first appearance of # must be followed by 1,\n // the next by 2, and so on; up to nine #’s are allowed\n\n\n tok = parser.gullet.popToken();\n\n if (!/^[1-9]$/.test(tok.text)) {\n throw new ParseError(\"Invalid argument number \\\"\" + tok.text + \"\\\"\");\n }\n\n if (parseInt(tok.text) !== numArgs + 1) {\n throw new ParseError(\"Argument number \\\"\" + tok.text + \"\\\" out of order\");\n }\n\n numArgs++;\n delimiters.push([]);\n } else if (tok.text === \"EOF\") {\n throw new ParseError(\"Expected a macro definition\");\n } else {\n delimiters[numArgs].push(tok.text);\n }\n } // replacement text, enclosed in '{' and '}' and properly nested\n\n\n var {\n tokens\n } = parser.gullet.consumeArg();\n\n if (insert) {\n tokens.unshift(insert);\n }\n\n if (funcName === \"\\\\edef\" || funcName === \"\\\\xdef\") {\n tokens = parser.gullet.expandTokens(tokens);\n tokens.reverse(); // to fit in with stack order\n } // Final arg is the expansion of the macro\n\n\n parser.gullet.macros.set(name, {\n tokens,\n numArgs,\n delimiters\n }, funcName === globalMap[funcName]);\n return {\n type: \"internal\",\n mode: parser.mode\n };\n }\n\n}); // <simple assignment> -> <let assignment>\n// <let assignment> -> \\futurelet<control sequence><token><token>\n// | \\let<control sequence><equals><one optional space><token>\n// <equals> -> <optional spaces>|<optional spaces>=\n\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\let\", \"\\\\\\\\globallet\" // can’t be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref3) {\n var {\n parser,\n funcName\n } = _ref3;\n var name = checkControlSequence(parser.gullet.popToken());\n parser.gullet.consumeSpaces();\n var tok = getRHS(parser);\n letCommand(parser, name, tok, funcName === \"\\\\\\\\globallet\");\n return {\n type: \"internal\",\n mode: parser.mode\n };\n }\n\n}); // ref: https://www.tug.org/TUGboat/tb09-3/tb22bechtolsheim.pdf\n\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\futurelet\", \"\\\\\\\\globalfuture\" // can’t be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref4) {\n var {\n parser,\n funcName\n } = _ref4;\n var name = checkControlSequence(parser.gullet.popToken());\n var middle = parser.gullet.popToken();\n var tok = parser.gullet.popToken();\n letCommand(parser, name, tok, funcName === \"\\\\\\\\globalfuture\");\n parser.gullet.pushToken(tok);\n parser.gullet.pushToken(middle);\n return {\n type: \"internal\",\n mode: parser.mode\n };\n }\n\n});\n\n/**\n * This file deals with creating delimiters of various sizes. The TeXbook\n * discusses these routines on page 441-442, in the \"Another subroutine sets box\n * x to a specified variable delimiter\" paragraph.\n *\n * There are three main routines here. `makeSmallDelim` makes a delimiter in the\n * normal font, but in either text, script, or scriptscript style.\n * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1,\n * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of\n * smaller pieces that are stacked on top of one another.\n *\n * The functions take a parameter `center`, which determines if the delimiter\n * should be centered around the axis.\n *\n * Then, there are three exposed functions. `sizedDelim` makes a delimiter in\n * one of the given sizes. This is used for things like `\\bigl`.\n * `customSizedDelim` makes a delimiter with a given total height+depth. It is\n * called in places like `\\sqrt`. `leftRightDelim` makes an appropriate\n * delimiter which surrounds an expression of a given height an depth. It is\n * used in `\\left` and `\\right`.\n */\n\n/**\n * Get the metrics for a given symbol and font, after transformation (i.e.\n * after following replacement from symbols.js)\n */\nvar getMetrics = function getMetrics(symbol, font, mode) {\n var replace = symbols.math[symbol] && symbols.math[symbol].replace;\n var metrics = getCharacterMetrics(replace || symbol, font, mode);\n\n if (!metrics) {\n throw new Error(\"Unsupported symbol \" + symbol + \" and font size \" + font + \".\");\n }\n\n return metrics;\n};\n/**\n * Puts a delimiter span in a given style, and adds appropriate height, depth,\n * and maxFontSizes.\n */\n\n\nvar styleWrap = function styleWrap(delim, toStyle, options, classes) {\n var newOptions = options.havingBaseStyle(toStyle);\n var span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options);\n var delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier;\n span.height *= delimSizeMultiplier;\n span.depth *= delimSizeMultiplier;\n span.maxFontSize = newOptions.sizeMultiplier;\n return span;\n};\n\nvar centerSpan = function centerSpan(span, options, style) {\n var newOptions = options.havingBaseStyle(style);\n var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight;\n span.classes.push(\"delimcenter\");\n span.style.top = makeEm(shift);\n span.height -= shift;\n span.depth += shift;\n};\n/**\n * Makes a small delimiter. This is a delimiter that comes in the Main-Regular\n * font, but is restyled to either be in textstyle, scriptstyle, or\n * scriptscriptstyle.\n */\n\n\nvar makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) {\n var text = buildCommon.makeSymbol(delim, \"Main-Regular\", mode, options);\n var span = styleWrap(text, style, options, classes);\n\n if (center) {\n centerSpan(span, options, style);\n }\n\n return span;\n};\n/**\n * Builds a symbol in the given font size (note size is an integer)\n */\n\n\nvar mathrmSize = function mathrmSize(value, size, mode, options) {\n return buildCommon.makeSymbol(value, \"Size\" + size + \"-Regular\", mode, options);\n};\n/**\n * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,\n * Size3, or Size4 fonts. It is always rendered in textstyle.\n */\n\n\nvar makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) {\n var inner = mathrmSize(delim, size, mode, options);\n var span = styleWrap(buildCommon.makeSpan([\"delimsizing\", \"size\" + size], [inner], options), Style$1.TEXT, options, classes);\n\n if (center) {\n centerSpan(span, options, Style$1.TEXT);\n }\n\n return span;\n};\n/**\n * Make a span from a font glyph with the given offset and in the given font.\n * This is used in makeStackedDelim to make the stacking pieces for the delimiter.\n */\n\n\nvar makeGlyphSpan = function makeGlyphSpan(symbol, font, mode) {\n var sizeClass; // Apply the correct CSS class to choose the right font.\n\n if (font === \"Size1-Regular\") {\n sizeClass = \"delim-size1\";\n } else\n /* if (font === \"Size4-Regular\") */\n {\n sizeClass = \"delim-size4\";\n }\n\n var corner = buildCommon.makeSpan([\"delimsizinginner\", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element\n // in the appropriate tag that VList uses.\n\n return {\n type: \"elem\",\n elem: corner\n };\n};\n\nvar makeInner = function makeInner(ch, height, options) {\n // Create a span with inline SVG for the inner part of a tall stacked delimiter.\n var width = fontMetricsData['Size4-Regular'][ch.charCodeAt(0)] ? fontMetricsData['Size4-Regular'][ch.charCodeAt(0)][4] : fontMetricsData['Size1-Regular'][ch.charCodeAt(0)][4];\n var path = new PathNode(\"inner\", innerPath(ch, Math.round(1000 * height)));\n var svgNode = new SvgNode([path], {\n \"width\": makeEm(width),\n \"height\": makeEm(height),\n // Override CSS rule `.katex svg { width: 100% }`\n \"style\": \"width:\" + makeEm(width),\n \"viewBox\": \"0 0 \" + 1000 * width + \" \" + Math.round(1000 * height),\n \"preserveAspectRatio\": \"xMinYMin\"\n });\n var span = buildCommon.makeSvgSpan([], [svgNode], options);\n span.height = height;\n span.style.height = makeEm(height);\n span.style.width = makeEm(width);\n return {\n type: \"elem\",\n elem: span\n };\n}; // Helpers for makeStackedDelim\n\n\nvar lapInEms = 0.008;\nvar lap = {\n type: \"kern\",\n size: -1 * lapInEms\n};\nvar verts = [\"|\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\vert\"];\nvar doubleVerts = [\"\\\\|\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\Vert\"];\n/**\n * Make a stacked delimiter out of a given delimiter, with the total height at\n * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.\n */\n\nvar makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) {\n // There are four parts, the top, an optional middle, a repeated part, and a\n // bottom.\n var top;\n var middle;\n var repeat;\n var bottom;\n var svgLabel = \"\";\n var viewBoxWidth = 0;\n top = repeat = bottom = delim;\n middle = null; // Also keep track of what font the delimiters are in\n\n var font = \"Size1-Regular\"; // We set the parts and font based on the symbol. Note that we use\n // '\\u23d0' instead of '|' and '\\u2016' instead of '\\\\|' for the\n // repeats of the arrows\n\n if (delim === \"\\\\uparrow\") {\n repeat = bottom = \"\\u23d0\";\n } else if (delim === \"\\\\Uparrow\") {\n repeat = bottom = \"\\u2016\";\n } else if (delim === \"\\\\downarrow\") {\n top = repeat = \"\\u23d0\";\n } else if (delim === \"\\\\Downarrow\") {\n top = repeat = \"\\u2016\";\n } else if (delim === \"\\\\updownarrow\") {\n top = \"\\\\uparrow\";\n repeat = \"\\u23d0\";\n bottom = \"\\\\downarrow\";\n } else if (delim === \"\\\\Updownarrow\") {\n top = \"\\\\Uparrow\";\n repeat = \"\\u2016\";\n bottom = \"\\\\Downarrow\";\n } else if (verts.includes(delim)) {\n repeat = \"\\u2223\";\n svgLabel = \"vert\";\n viewBoxWidth = 333;\n } else if (doubleVerts.includes(delim)) {\n repeat = \"\\u2225\";\n svgLabel = \"doublevert\";\n viewBoxWidth = 556;\n } else if (delim === \"[\" || delim === \"\\\\lbrack\") {\n top = \"\\u23a1\";\n repeat = \"\\u23a2\";\n bottom = \"\\u23a3\";\n font = \"Size4-Regular\";\n svgLabel = \"lbrack\";\n viewBoxWidth = 667;\n } else if (delim === \"]\" || delim === \"\\\\rbrack\") {\n top = \"\\u23a4\";\n repeat = \"\\u23a5\";\n bottom = \"\\u23a6\";\n font = \"Size4-Regular\";\n svgLabel = \"rbrack\";\n viewBoxWidth = 667;\n } else if (delim === \"\\\\lfloor\" || delim === \"\\u230a\") {\n repeat = top = \"\\u23a2\";\n bottom = \"\\u23a3\";\n font = \"Size4-Regular\";\n svgLabel = \"lfloor\";\n viewBoxWidth = 667;\n } else if (delim === \"\\\\lceil\" || delim === \"\\u2308\") {\n top = \"\\u23a1\";\n repeat = bottom = \"\\u23a2\";\n font = \"Size4-Regular\";\n svgLabel = \"lceil\";\n viewBoxWidth = 667;\n } else if (delim === \"\\\\rfloor\" || delim === \"\\u230b\") {\n repeat = top = \"\\u23a5\";\n bottom = \"\\u23a6\";\n font = \"Size4-Regular\";\n svgLabel = \"rfloor\";\n viewBoxWidth = 667;\n } else if (delim === \"\\\\rceil\" || delim === \"\\u2309\") {\n top = \"\\u23a4\";\n repeat = bottom = \"\\u23a5\";\n font = \"Size4-Regular\";\n svgLabel = \"rceil\";\n viewBoxWidth = 667;\n } else if (delim === \"(\" || delim === \"\\\\lparen\") {\n top = \"\\u239b\";\n repeat = \"\\u239c\";\n bottom = \"\\u239d\";\n font = \"Size4-Regular\";\n svgLabel = \"lparen\";\n viewBoxWidth = 875;\n } else if (delim === \")\" || delim === \"\\\\rparen\") {\n top = \"\\u239e\";\n repeat = \"\\u239f\";\n bottom = \"\\u23a0\";\n font = \"Size4-Regular\";\n svgLabel = \"rparen\";\n viewBoxWidth = 875;\n } else if (delim === \"\\\\{\" || delim === \"\\\\lbrace\") {\n top = \"\\u23a7\";\n middle = \"\\u23a8\";\n bottom = \"\\u23a9\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\}\" || delim === \"\\\\rbrace\") {\n top = \"\\u23ab\";\n middle = \"\\u23ac\";\n bottom = \"\\u23ad\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\lgroup\" || delim === \"\\u27ee\") {\n top = \"\\u23a7\";\n bottom = \"\\u23a9\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\rgroup\" || delim === \"\\u27ef\") {\n top = \"\\u23ab\";\n bottom = \"\\u23ad\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\lmoustache\" || delim === \"\\u23b0\") {\n top = \"\\u23a7\";\n bottom = \"\\u23ad\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\rmoustache\" || delim === \"\\u23b1\") {\n top = \"\\u23ab\";\n bottom = \"\\u23a9\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } // Get the metrics of the four sections\n\n\n var topMetrics = getMetrics(top, font, mode);\n var topHeightTotal = topMetrics.height + topMetrics.depth;\n var repeatMetrics = getMetrics(repeat, font, mode);\n var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;\n var bottomMetrics = getMetrics(bottom, font, mode);\n var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;\n var middleHeightTotal = 0;\n var middleFactor = 1;\n\n if (middle !== null) {\n var middleMetrics = getMetrics(middle, font, mode);\n middleHeightTotal = middleMetrics.height + middleMetrics.depth;\n middleFactor = 2; // repeat symmetrically above and below middle\n } // Calculate the minimal height that the delimiter can have.\n // It is at least the size of the top, bottom, and optional middle combined.\n\n\n var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need\n\n var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols\n\n var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note\n // that in this context, \"center\" means that the delimiter should be\n // centered around the axis in the current style, while normally it is\n // centered around the axis in textstyle.\n\n var axisHeight = options.fontMetrics().axisHeight;\n\n if (center) {\n axisHeight *= options.sizeMultiplier;\n } // Calculate the depth\n\n\n var depth = realHeightTotal / 2 - axisHeight; // Now, we start building the pieces that will go into the vlist\n // Keep a list of the pieces of the stacked delimiter\n\n var stack = [];\n\n if (svgLabel.length > 0) {\n // Instead of stacking glyphs, create a single SVG.\n // This evades browser problems with imprecise positioning of spans.\n var midHeight = realHeightTotal - topHeightTotal - bottomHeightTotal;\n var viewBoxHeight = Math.round(realHeightTotal * 1000);\n var pathStr = tallDelim(svgLabel, Math.round(midHeight * 1000));\n var path = new PathNode(svgLabel, pathStr);\n var width = (viewBoxWidth / 1000).toFixed(3) + \"em\";\n var height = (viewBoxHeight / 1000).toFixed(3) + \"em\";\n var svg = new SvgNode([path], {\n \"width\": width,\n \"height\": height,\n \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + viewBoxHeight\n });\n var wrapper = buildCommon.makeSvgSpan([], [svg], options);\n wrapper.height = viewBoxHeight / 1000;\n wrapper.style.width = width;\n wrapper.style.height = height;\n stack.push({\n type: \"elem\",\n elem: wrapper\n });\n } else {\n // Stack glyphs\n // Start by adding the bottom symbol\n stack.push(makeGlyphSpan(bottom, font, mode));\n stack.push(lap); // overlap\n\n if (middle === null) {\n // The middle section will be an SVG. Make it an extra 0.016em tall.\n // We'll overlap by 0.008em at top and bottom.\n var innerHeight = realHeightTotal - topHeightTotal - bottomHeightTotal + 2 * lapInEms;\n stack.push(makeInner(repeat, innerHeight, options));\n } else {\n // When there is a middle bit, we need the middle part and two repeated\n // sections\n var _innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms;\n\n stack.push(makeInner(repeat, _innerHeight, options)); // Now insert the middle of the brace.\n\n stack.push(lap);\n stack.push(makeGlyphSpan(middle, font, mode));\n stack.push(lap);\n stack.push(makeInner(repeat, _innerHeight, options));\n } // Add the top symbol\n\n\n stack.push(lap);\n stack.push(makeGlyphSpan(top, font, mode));\n } // Finally, build the vlist\n\n\n var newOptions = options.havingBaseStyle(Style$1.TEXT);\n var inner = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: depth,\n children: stack\n }, newOptions);\n return styleWrap(buildCommon.makeSpan([\"delimsizing\", \"mult\"], [inner], newOptions), Style$1.TEXT, options, classes);\n}; // All surds have 0.08em padding above the vinculum inside the SVG.\n// That keeps browser span height rounding error from pinching the line.\n\n\nvar vbPad = 80; // padding above the surd, measured inside the viewBox.\n\nvar emPad = 0.08; // padding, in ems, measured in the document.\n\nvar sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraVinculum, options) {\n var path = sqrtPath(sqrtName, extraVinculum, viewBoxHeight);\n var pathNode = new PathNode(sqrtName, path);\n var svg = new SvgNode([pathNode], {\n // Note: 1000:1 ratio of viewBox to document em width.\n \"width\": \"400em\",\n \"height\": makeEm(height),\n \"viewBox\": \"0 0 400000 \" + viewBoxHeight,\n \"preserveAspectRatio\": \"xMinYMin slice\"\n });\n return buildCommon.makeSvgSpan([\"hide-tail\"], [svg], options);\n};\n/**\n * Make a sqrt image of the given height,\n */\n\n\nvar makeSqrtImage = function makeSqrtImage(height, options) {\n // Define a newOptions that removes the effect of size changes such as \\Huge.\n // We don't pick different a height surd for \\Huge. For it, we scale up.\n var newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds.\n\n var delim = traverseSequence(\"\\\\surd\", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions);\n var sizeMultiplier = newOptions.sizeMultiplier; // default\n // The standard sqrt SVGs each have a 0.04em thick vinculum.\n // If Settings.minRuleThickness is larger than that, we add extraVinculum.\n\n var extraVinculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol.\n\n var span;\n var spanHeight = 0;\n var texHeight = 0;\n var viewBoxHeight = 0;\n var advanceWidth; // We create viewBoxes with 80 units of \"padding\" above each surd.\n // Then browser rounding error on the parent span height will not\n // encroach on the ink of the vinculum. But that padding is not\n // included in the TeX-like `height` used for calculation of\n // vertical alignment. So texHeight = span.height < span.style.height.\n\n if (delim.type === \"small\") {\n // Get an SVG that is derived from glyph U+221A in font KaTeX-Main.\n // 1000 unit normal glyph height.\n viewBoxHeight = 1000 + 1000 * extraVinculum + vbPad;\n\n if (height < 1.0) {\n sizeMultiplier = 1.0; // mimic a \\textfont radical\n } else if (height < 1.4) {\n sizeMultiplier = 0.7; // mimic a \\scriptfont radical\n }\n\n spanHeight = (1.0 + extraVinculum + emPad) / sizeMultiplier;\n texHeight = (1.00 + extraVinculum) / sizeMultiplier;\n span = sqrtSvg(\"sqrtMain\", spanHeight, viewBoxHeight, extraVinculum, options);\n span.style.minWidth = \"0.853em\";\n advanceWidth = 0.833 / sizeMultiplier; // from the font.\n } else if (delim.type === \"large\") {\n // These SVGs come from fonts: KaTeX_Size1, _Size2, etc.\n viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size];\n texHeight = (sizeToMaxHeight[delim.size] + extraVinculum) / sizeMultiplier;\n spanHeight = (sizeToMaxHeight[delim.size] + extraVinculum + emPad) / sizeMultiplier;\n span = sqrtSvg(\"sqrtSize\" + delim.size, spanHeight, viewBoxHeight, extraVinculum, options);\n span.style.minWidth = \"1.02em\";\n advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font.\n } else {\n // Tall sqrt. In TeX, this would be stacked using multiple glyphs.\n // We'll use a single SVG to accomplish the same thing.\n spanHeight = height + extraVinculum + emPad;\n texHeight = height + extraVinculum;\n viewBoxHeight = Math.floor(1000 * height + extraVinculum) + vbPad;\n span = sqrtSvg(\"sqrtTall\", spanHeight, viewBoxHeight, extraVinculum, options);\n span.style.minWidth = \"0.742em\";\n advanceWidth = 1.056;\n }\n\n span.height = texHeight;\n span.style.height = makeEm(spanHeight);\n return {\n span,\n advanceWidth,\n // Calculate the actual line width.\n // This actually should depend on the chosen font -- e.g. \\boldmath\n // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and\n // have thicker rules.\n ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraVinculum) * sizeMultiplier\n };\n}; // There are three kinds of delimiters, delimiters that stack when they become\n// too large\n\n\nvar stackLargeDelimiters = [\"(\", \"\\\\lparen\", \")\", \"\\\\rparen\", \"[\", \"\\\\lbrack\", \"]\", \"\\\\rbrack\", \"\\\\{\", \"\\\\lbrace\", \"\\\\}\", \"\\\\rbrace\", \"\\\\lfloor\", \"\\\\rfloor\", \"\\u230a\", \"\\u230b\", \"\\\\lceil\", \"\\\\rceil\", \"\\u2308\", \"\\u2309\", \"\\\\surd\"]; // delimiters that always stack\n\nvar stackAlwaysDelimiters = [\"\\\\uparrow\", \"\\\\downarrow\", \"\\\\updownarrow\", \"\\\\Uparrow\", \"\\\\Downarrow\", \"\\\\Updownarrow\", \"|\", \"\\\\|\", \"\\\\vert\", \"\\\\Vert\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\lgroup\", \"\\\\rgroup\", \"\\u27ee\", \"\\u27ef\", \"\\\\lmoustache\", \"\\\\rmoustache\", \"\\u23b0\", \"\\u23b1\"]; // and delimiters that never stack\n\nvar stackNeverDelimiters = [\"<\", \">\", \"\\\\langle\", \"\\\\rangle\", \"/\", \"\\\\backslash\", \"\\\\lt\", \"\\\\gt\"]; // Metrics of the different sizes. Found by looking at TeX's output of\n// $\\bigl| // \\Bigl| \\biggl| \\Biggl| \\showlists$\n// Used to create stacked delimiters of appropriate sizes in makeSizedDelim.\n\nvar sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0];\n/**\n * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4.\n */\n\nvar makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) {\n // < and > turn into \\langle and \\rangle in delimiters\n if (delim === \"<\" || delim === \"\\\\lt\" || delim === \"\\u27e8\") {\n delim = \"\\\\langle\";\n } else if (delim === \">\" || delim === \"\\\\gt\" || delim === \"\\u27e9\") {\n delim = \"\\\\rangle\";\n } // Sized delimiters are never centered.\n\n\n if (stackLargeDelimiters.includes(delim) || stackNeverDelimiters.includes(delim)) {\n return makeLargeDelim(delim, size, false, options, mode, classes);\n } else if (stackAlwaysDelimiters.includes(delim)) {\n return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes);\n } else {\n throw new ParseError(\"Illegal delimiter: '\" + delim + \"'\");\n }\n};\n/**\n * There are three different sequences of delimiter sizes that the delimiters\n * follow depending on the kind of delimiter. This is used when creating custom\n * sized delimiters to decide whether to create a small, large, or stacked\n * delimiter.\n *\n * In real TeX, these sequences aren't explicitly defined, but are instead\n * defined inside the font metrics. Since there are only three sequences that\n * are possible for the delimiters that TeX defines, it is easier to just encode\n * them explicitly here.\n */\n\n\n// Delimiters that never stack try small delimiters and large delimiters only\nvar stackNeverDelimiterSequence = [{\n type: \"small\",\n style: Style$1.SCRIPTSCRIPT\n}, {\n type: \"small\",\n style: Style$1.SCRIPT\n}, {\n type: \"small\",\n style: Style$1.TEXT\n}, {\n type: \"large\",\n size: 1\n}, {\n type: \"large\",\n size: 2\n}, {\n type: \"large\",\n size: 3\n}, {\n type: \"large\",\n size: 4\n}]; // Delimiters that always stack try the small delimiters first, then stack\n\nvar stackAlwaysDelimiterSequence = [{\n type: \"small\",\n style: Style$1.SCRIPTSCRIPT\n}, {\n type: \"small\",\n style: Style$1.SCRIPT\n}, {\n type: \"small\",\n style: Style$1.TEXT\n}, {\n type: \"stack\"\n}]; // Delimiters that stack when large try the small and then large delimiters, and\n// stack afterwards\n\nvar stackLargeDelimiterSequence = [{\n type: \"small\",\n style: Style$1.SCRIPTSCRIPT\n}, {\n type: \"small\",\n style: Style$1.SCRIPT\n}, {\n type: \"small\",\n style: Style$1.TEXT\n}, {\n type: \"large\",\n size: 1\n}, {\n type: \"large\",\n size: 2\n}, {\n type: \"large\",\n size: 3\n}, {\n type: \"large\",\n size: 4\n}, {\n type: \"stack\"\n}];\n/**\n * Get the font used in a delimiter based on what kind of delimiter it is.\n * TODO(#963) Use more specific font family return type once that is introduced.\n */\n\nvar delimTypeToFont = function delimTypeToFont(type) {\n if (type.type === \"small\") {\n return \"Main-Regular\";\n } else if (type.type === \"large\") {\n return \"Size\" + type.size + \"-Regular\";\n } else if (type.type === \"stack\") {\n return \"Size4-Regular\";\n } else {\n throw new Error(\"Add support for delim type '\" + type.type + \"' here.\");\n }\n};\n/**\n * Traverse a sequence of types of delimiters to decide what kind of delimiter\n * should be used to create a delimiter of the given height+depth.\n */\n\n\nvar traverseSequence = function traverseSequence(delim, height, sequence, options) {\n // Here, we choose the index we should start at in the sequences. In smaller\n // sizes (which correspond to larger numbers in style.size) we start earlier\n // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts\n // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2\n var start = Math.min(2, 3 - options.style.size);\n\n for (var i = start; i < sequence.length; i++) {\n if (sequence[i].type === \"stack\") {\n // This is always the last delimiter, so we just break the loop now.\n break;\n }\n\n var metrics = getMetrics(delim, delimTypeToFont(sequence[i]), \"math\");\n var heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we\n // account for the style change size.\n\n if (sequence[i].type === \"small\") {\n var newOptions = options.havingBaseStyle(sequence[i].style);\n heightDepth *= newOptions.sizeMultiplier;\n } // Check if the delimiter at this size works for the given height.\n\n\n if (heightDepth > height) {\n return sequence[i];\n }\n } // If we reached the end of the sequence, return the last sequence element.\n\n\n return sequence[sequence.length - 1];\n};\n/**\n * Make a delimiter of a given height+depth, with optional centering. Here, we\n * traverse the sequences, and create a delimiter that the sequence tells us to.\n */\n\n\nvar makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) {\n if (delim === \"<\" || delim === \"\\\\lt\" || delim === \"\\u27e8\") {\n delim = \"\\\\langle\";\n } else if (delim === \">\" || delim === \"\\\\gt\" || delim === \"\\u27e9\") {\n delim = \"\\\\rangle\";\n } // Decide what sequence to use\n\n\n var sequence;\n\n if (stackNeverDelimiters.includes(delim)) {\n sequence = stackNeverDelimiterSequence;\n } else if (stackLargeDelimiters.includes(delim)) {\n sequence = stackLargeDelimiterSequence;\n } else {\n sequence = stackAlwaysDelimiterSequence;\n } // Look through the sequence\n\n\n var delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs.\n // Depending on the sequence element we decided on, call the\n // appropriate function.\n\n if (delimType.type === \"small\") {\n return makeSmallDelim(delim, delimType.style, center, options, mode, classes);\n } else if (delimType.type === \"large\") {\n return makeLargeDelim(delim, delimType.size, center, options, mode, classes);\n } else\n /* if (delimType.type === \"stack\") */\n {\n return makeStackedDelim(delim, height, center, options, mode, classes);\n }\n};\n/**\n * Make a delimiter for use with `\\left` and `\\right`, given a height and depth\n * of an expression that the delimiters surround.\n */\n\n\nvar makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) {\n // We always center \\left/\\right delimiters, so the axis is always shifted\n var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right\n\n var delimiterFactor = 901;\n var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm;\n var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight);\n var totalHeight = Math.max( // In real TeX, calculations are done using integral values which are\n // 65536 per pt, or 655360 per em. So, the division here truncates in\n // TeX but doesn't here, producing different results. If we wanted to\n // exactly match TeX's calculation, we could do\n // Math.floor(655360 * maxDistFromAxis / 500) *\n // delimiterFactor / 655360\n // (To see the difference, compare\n // x^{x^{\\left(\\rule{0.1em}{0.68em}\\right)}}\n // in TeX and KaTeX)\n maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total\n // height\n\n return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes);\n};\n\nvar delimiter = {\n sqrtImage: makeSqrtImage,\n sizedDelim: makeSizedDelim,\n sizeToMaxHeight: sizeToMaxHeight,\n customSizedDelim: makeCustomSizedDelim,\n leftRightDelim: makeLeftRightDelim\n};\n\n// Extra data needed for the delimiter handler down below\nvar delimiterSizes = {\n \"\\\\bigl\": {\n mclass: \"mopen\",\n size: 1\n },\n \"\\\\Bigl\": {\n mclass: \"mopen\",\n size: 2\n },\n \"\\\\biggl\": {\n mclass: \"mopen\",\n size: 3\n },\n \"\\\\Biggl\": {\n mclass: \"mopen\",\n size: 4\n },\n \"\\\\bigr\": {\n mclass: \"mclose\",\n size: 1\n },\n \"\\\\Bigr\": {\n mclass: \"mclose\",\n size: 2\n },\n \"\\\\biggr\": {\n mclass: \"mclose\",\n size: 3\n },\n \"\\\\Biggr\": {\n mclass: \"mclose\",\n size: 4\n },\n \"\\\\bigm\": {\n mclass: \"mrel\",\n size: 1\n },\n \"\\\\Bigm\": {\n mclass: \"mrel\",\n size: 2\n },\n \"\\\\biggm\": {\n mclass: \"mrel\",\n size: 3\n },\n \"\\\\Biggm\": {\n mclass: \"mrel\",\n size: 4\n },\n \"\\\\big\": {\n mclass: \"mord\",\n size: 1\n },\n \"\\\\Big\": {\n mclass: \"mord\",\n size: 2\n },\n \"\\\\bigg\": {\n mclass: \"mord\",\n size: 3\n },\n \"\\\\Bigg\": {\n mclass: \"mord\",\n size: 4\n }\n};\nvar delimiters = [\"(\", \"\\\\lparen\", \")\", \"\\\\rparen\", \"[\", \"\\\\lbrack\", \"]\", \"\\\\rbrack\", \"\\\\{\", \"\\\\lbrace\", \"\\\\}\", \"\\\\rbrace\", \"\\\\lfloor\", \"\\\\rfloor\", \"\\u230a\", \"\\u230b\", \"\\\\lceil\", \"\\\\rceil\", \"\\u2308\", \"\\u2309\", \"<\", \">\", \"\\\\langle\", \"\\u27e8\", \"\\\\rangle\", \"\\u27e9\", \"\\\\lt\", \"\\\\gt\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\lgroup\", \"\\\\rgroup\", \"\\u27ee\", \"\\u27ef\", \"\\\\lmoustache\", \"\\\\rmoustache\", \"\\u23b0\", \"\\u23b1\", \"/\", \"\\\\backslash\", \"|\", \"\\\\vert\", \"\\\\|\", \"\\\\Vert\", \"\\\\uparrow\", \"\\\\Uparrow\", \"\\\\downarrow\", \"\\\\Downarrow\", \"\\\\updownarrow\", \"\\\\Updownarrow\", \".\"];\n\n// Delimiter functions\nfunction checkDelimiter(delim, context) {\n var symDelim = checkSymbolNodeType(delim);\n\n if (symDelim && delimiters.includes(symDelim.text)) {\n return symDelim;\n } else if (symDelim) {\n throw new ParseError(\"Invalid delimiter '\" + symDelim.text + \"' after '\" + context.funcName + \"'\", delim);\n } else {\n throw new ParseError(\"Invalid delimiter type '\" + delim.type + \"'\", delim);\n }\n}\n\ndefineFunction({\n type: \"delimsizing\",\n names: [\"\\\\bigl\", \"\\\\Bigl\", \"\\\\biggl\", \"\\\\Biggl\", \"\\\\bigr\", \"\\\\Bigr\", \"\\\\biggr\", \"\\\\Biggr\", \"\\\\bigm\", \"\\\\Bigm\", \"\\\\biggm\", \"\\\\Biggm\", \"\\\\big\", \"\\\\Big\", \"\\\\bigg\", \"\\\\Bigg\"],\n props: {\n numArgs: 1,\n argTypes: [\"primitive\"]\n },\n handler: (context, args) => {\n var delim = checkDelimiter(args[0], context);\n return {\n type: \"delimsizing\",\n mode: context.parser.mode,\n size: delimiterSizes[context.funcName].size,\n mclass: delimiterSizes[context.funcName].mclass,\n delim: delim.text\n };\n },\n htmlBuilder: (group, options) => {\n if (group.delim === \".\") {\n // Empty delimiters still count as elements, even though they don't\n // show anything.\n return buildCommon.makeSpan([group.mclass]);\n } // Use delimiter.sizedDelim to generate the delimiter.\n\n\n return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]);\n },\n mathmlBuilder: group => {\n var children = [];\n\n if (group.delim !== \".\") {\n children.push(makeText(group.delim, group.mode));\n }\n\n var node = new mathMLTree.MathNode(\"mo\", children);\n\n if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n // Only some of the delimsizing functions act as fences, and they\n // return \"mopen\" or \"mclose\" mclass.\n node.setAttribute(\"fence\", \"true\");\n } else {\n // Explicitly disable fencing if it's not a fence, to override the\n // defaults.\n node.setAttribute(\"fence\", \"false\");\n }\n\n node.setAttribute(\"stretchy\", \"true\");\n var size = makeEm(delimiter.sizeToMaxHeight[group.size]);\n node.setAttribute(\"minsize\", size);\n node.setAttribute(\"maxsize\", size);\n return node;\n }\n});\n\nfunction assertParsed(group) {\n if (!group.body) {\n throw new Error(\"Bug: The leftright ParseNode wasn't fully parsed.\");\n }\n}\n\ndefineFunction({\n type: \"leftright-right\",\n names: [\"\\\\right\"],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (context, args) => {\n // \\left case below triggers parsing of \\right in\n // `const right = parser.parseFunction();`\n // uses this return value.\n var color = context.parser.gullet.macros.get(\"\\\\current@color\");\n\n if (color && typeof color !== \"string\") {\n throw new ParseError(\"\\\\current@color set to non-string in \\\\right\");\n }\n\n return {\n type: \"leftright-right\",\n mode: context.parser.mode,\n delim: checkDelimiter(args[0], context).text,\n color // undefined if not set via \\color\n\n };\n }\n});\ndefineFunction({\n type: \"leftright\",\n names: [\"\\\\left\"],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (context, args) => {\n var delim = checkDelimiter(args[0], context);\n var parser = context.parser; // Parse out the implicit body\n\n ++parser.leftrightDepth; // parseExpression stops before '\\\\right'\n\n var body = parser.parseExpression(false);\n --parser.leftrightDepth; // Check the next token\n\n parser.expect(\"\\\\right\", false);\n var right = assertNodeType(parser.parseFunction(), \"leftright-right\");\n return {\n type: \"leftright\",\n mode: parser.mode,\n body,\n left: delim.text,\n right: right.delim,\n rightColor: right.color\n };\n },\n htmlBuilder: (group, options) => {\n assertParsed(group); // Build the inner expression\n\n var inner = buildExpression$1(group.body, options, true, [\"mopen\", \"mclose\"]);\n var innerHeight = 0;\n var innerDepth = 0;\n var hadMiddle = false; // Calculate its height and depth\n\n for (var i = 0; i < inner.length; i++) {\n // Property `isMiddle` not defined on `span`. See comment in\n // \"middle\"'s htmlBuilder.\n // $FlowFixMe\n if (inner[i].isMiddle) {\n hadMiddle = true;\n } else {\n innerHeight = Math.max(inner[i].height, innerHeight);\n innerDepth = Math.max(inner[i].depth, innerDepth);\n }\n } // The size of delimiters is the same, regardless of what style we are\n // in. Thus, to correctly calculate the size of delimiter we need around\n // a group, we scale down the inner size based on the size.\n\n\n innerHeight *= options.sizeMultiplier;\n innerDepth *= options.sizeMultiplier;\n var leftDelim;\n\n if (group.left === \".\") {\n // Empty delimiters in \\left and \\right make null delimiter spaces.\n leftDelim = makeNullDelimiter(options, [\"mopen\"]);\n } else {\n // Otherwise, use leftRightDelim to generate the correct sized\n // delimiter.\n leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, [\"mopen\"]);\n } // Add it to the beginning of the expression\n\n\n inner.unshift(leftDelim); // Handle middle delimiters\n\n if (hadMiddle) {\n for (var _i = 1; _i < inner.length; _i++) {\n var middleDelim = inner[_i]; // Property `isMiddle` not defined on `span`. See comment in\n // \"middle\"'s htmlBuilder.\n // $FlowFixMe\n\n var isMiddle = middleDelim.isMiddle;\n\n if (isMiddle) {\n // Apply the options that were active when \\middle was called\n inner[_i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []);\n }\n }\n }\n\n var rightDelim; // Same for the right delimiter, but using color specified by \\color\n\n if (group.right === \".\") {\n rightDelim = makeNullDelimiter(options, [\"mclose\"]);\n } else {\n var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options;\n rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, [\"mclose\"]);\n } // Add it to the end of the expression.\n\n\n inner.push(rightDelim);\n return buildCommon.makeSpan([\"minner\"], inner, options);\n },\n mathmlBuilder: (group, options) => {\n assertParsed(group);\n var inner = buildExpression(group.body, options);\n\n if (group.left !== \".\") {\n var leftNode = new mathMLTree.MathNode(\"mo\", [makeText(group.left, group.mode)]);\n leftNode.setAttribute(\"fence\", \"true\");\n inner.unshift(leftNode);\n }\n\n if (group.right !== \".\") {\n var rightNode = new mathMLTree.MathNode(\"mo\", [makeText(group.right, group.mode)]);\n rightNode.setAttribute(\"fence\", \"true\");\n\n if (group.rightColor) {\n rightNode.setAttribute(\"mathcolor\", group.rightColor);\n }\n\n inner.push(rightNode);\n }\n\n return makeRow(inner);\n }\n});\ndefineFunction({\n type: \"middle\",\n names: [\"\\\\middle\"],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (context, args) => {\n var delim = checkDelimiter(args[0], context);\n\n if (!context.parser.leftrightDepth) {\n throw new ParseError(\"\\\\middle without preceding \\\\left\", delim);\n }\n\n return {\n type: \"middle\",\n mode: context.parser.mode,\n delim: delim.text\n };\n },\n htmlBuilder: (group, options) => {\n var middleDelim;\n\n if (group.delim === \".\") {\n middleDelim = makeNullDelimiter(options, []);\n } else {\n middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []);\n var isMiddle = {\n delim: group.delim,\n options\n }; // Property `isMiddle` not defined on `span`. It is only used in\n // this file above.\n // TODO: Fix this violation of the `span` type and possibly rename\n // things since `isMiddle` sounds like a boolean, but is a struct.\n // $FlowFixMe\n\n middleDelim.isMiddle = isMiddle;\n }\n\n return middleDelim;\n },\n mathmlBuilder: (group, options) => {\n // A Firefox \\middle will stretch a character vertically only if it\n // is in the fence part of the operator dictionary at:\n // https://www.w3.org/TR/MathML3/appendixc.html.\n // So we need to avoid U+2223 and use plain \"|\" instead.\n var textNode = group.delim === \"\\\\vert\" || group.delim === \"|\" ? makeText(\"|\", \"text\") : makeText(group.delim, group.mode);\n var middleNode = new mathMLTree.MathNode(\"mo\", [textNode]);\n middleNode.setAttribute(\"fence\", \"true\"); // MathML gives 5/18em spacing to each <mo> element.\n // \\middle should get delimiter spacing instead.\n\n middleNode.setAttribute(\"lspace\", \"0.05em\");\n middleNode.setAttribute(\"rspace\", \"0.05em\");\n return middleNode;\n }\n});\n\nvar htmlBuilder$7 = (group, options) => {\n // \\cancel, \\bcancel, \\xcancel, \\sout, \\fbox, \\colorbox, \\fcolorbox, \\phase\n // Some groups can return document fragments. Handle those by wrapping\n // them in a span.\n var inner = buildCommon.wrapFragment(buildGroup$1(group.body, options), options);\n var label = group.label.slice(1);\n var scale = options.sizeMultiplier;\n var img;\n var imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different\n // depending on whether the subject is wider than it is tall, or vice versa.\n // We don't know the width of a group, so as a proxy, we test if\n // the subject is a single character. This captures most of the\n // subjects that should get the \"tall\" treatment.\n\n var isSingleChar = utils.isCharacterBox(group.body);\n\n if (label === \"sout\") {\n img = buildCommon.makeSpan([\"stretchy\", \"sout\"]);\n img.height = options.fontMetrics().defaultRuleThickness / scale;\n imgShift = -0.5 * options.fontMetrics().xHeight;\n } else if (label === \"phase\") {\n // Set a couple of dimensions from the steinmetz package.\n var lineWeight = calculateSize({\n number: 0.6,\n unit: \"pt\"\n }, options);\n var clearance = calculateSize({\n number: 0.35,\n unit: \"ex\"\n }, options); // Prevent size changes like \\Huge from affecting line thickness\n\n var newOptions = options.havingBaseSizing();\n scale = scale / newOptions.sizeMultiplier;\n var angleHeight = inner.height + inner.depth + lineWeight + clearance; // Reserve a left pad for the angle.\n\n inner.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight); // Create an SVG\n\n var viewBoxHeight = Math.floor(1000 * angleHeight * scale);\n var path = phasePath(viewBoxHeight);\n var svgNode = new SvgNode([new PathNode(\"phase\", path)], {\n \"width\": \"400em\",\n \"height\": makeEm(viewBoxHeight / 1000),\n \"viewBox\": \"0 0 400000 \" + viewBoxHeight,\n \"preserveAspectRatio\": \"xMinYMin slice\"\n }); // Wrap it in a span with overflow: hidden.\n\n img = buildCommon.makeSvgSpan([\"hide-tail\"], [svgNode], options);\n img.style.height = makeEm(angleHeight);\n imgShift = inner.depth + lineWeight + clearance;\n } else {\n // Add horizontal padding\n if (/cancel/.test(label)) {\n if (!isSingleChar) {\n inner.classes.push(\"cancel-pad\");\n }\n } else if (label === \"angl\") {\n inner.classes.push(\"anglpad\");\n } else {\n inner.classes.push(\"boxpad\");\n } // Add vertical padding\n\n\n var topPad = 0;\n var bottomPad = 0;\n var ruleThickness = 0; // ref: cancel package: \\advance\\totalheight2\\p@ % \"+2\"\n\n if (/box/.test(label)) {\n ruleThickness = Math.max(options.fontMetrics().fboxrule, // default\n options.minRuleThickness // User override.\n );\n topPad = options.fontMetrics().fboxsep + (label === \"colorbox\" ? 0 : ruleThickness);\n bottomPad = topPad;\n } else if (label === \"angl\") {\n ruleThickness = Math.max(options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n topPad = 4 * ruleThickness; // gap = 3 × line, plus the line itself.\n\n bottomPad = Math.max(0, 0.25 - inner.depth);\n } else {\n topPad = isSingleChar ? 0.2 : 0;\n bottomPad = topPad;\n }\n\n img = stretchy.encloseSpan(inner, label, topPad, bottomPad, options);\n\n if (/fbox|boxed|fcolorbox/.test(label)) {\n img.style.borderStyle = \"solid\";\n img.style.borderWidth = makeEm(ruleThickness);\n } else if (label === \"angl\" && ruleThickness !== 0.049) {\n img.style.borderTopWidth = makeEm(ruleThickness);\n img.style.borderRightWidth = makeEm(ruleThickness);\n }\n\n imgShift = inner.depth + bottomPad;\n\n if (group.backgroundColor) {\n img.style.backgroundColor = group.backgroundColor;\n\n if (group.borderColor) {\n img.style.borderColor = group.borderColor;\n }\n }\n }\n\n var vlist;\n\n if (group.backgroundColor) {\n vlist = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [// Put the color background behind inner;\n {\n type: \"elem\",\n elem: img,\n shift: imgShift\n }, {\n type: \"elem\",\n elem: inner,\n shift: 0\n }]\n }, options);\n } else {\n var classes = /cancel|phase/.test(label) ? [\"svg-align\"] : [];\n vlist = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [// Write the \\cancel stroke on top of inner.\n {\n type: \"elem\",\n elem: inner,\n shift: 0\n }, {\n type: \"elem\",\n elem: img,\n shift: imgShift,\n wrapperClasses: classes\n }]\n }, options);\n }\n\n if (/cancel/.test(label)) {\n // The cancel package documentation says that cancel lines add their height\n // to the expression, but tests show that isn't how it actually works.\n vlist.height = inner.height;\n vlist.depth = inner.depth;\n }\n\n if (/cancel/.test(label) && !isSingleChar) {\n // cancel does not create horiz space for its line extension.\n return buildCommon.makeSpan([\"mord\", \"cancel-lap\"], [vlist], options);\n } else {\n return buildCommon.makeSpan([\"mord\"], [vlist], options);\n }\n};\n\nvar mathmlBuilder$6 = (group, options) => {\n var fboxsep = 0;\n var node = new mathMLTree.MathNode(group.label.indexOf(\"colorbox\") > -1 ? \"mpadded\" : \"menclose\", [buildGroup(group.body, options)]);\n\n switch (group.label) {\n case \"\\\\cancel\":\n node.setAttribute(\"notation\", \"updiagonalstrike\");\n break;\n\n case \"\\\\bcancel\":\n node.setAttribute(\"notation\", \"downdiagonalstrike\");\n break;\n\n case \"\\\\phase\":\n node.setAttribute(\"notation\", \"phasorangle\");\n break;\n\n case \"\\\\sout\":\n node.setAttribute(\"notation\", \"horizontalstrike\");\n break;\n\n case \"\\\\fbox\":\n node.setAttribute(\"notation\", \"box\");\n break;\n\n case \"\\\\angl\":\n node.setAttribute(\"notation\", \"actuarial\");\n break;\n\n case \"\\\\fcolorbox\":\n case \"\\\\colorbox\":\n // <menclose> doesn't have a good notation option. So use <mpadded>\n // instead. Set some attributes that come included with <menclose>.\n fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm;\n node.setAttribute(\"width\", \"+\" + 2 * fboxsep + \"pt\");\n node.setAttribute(\"height\", \"+\" + 2 * fboxsep + \"pt\");\n node.setAttribute(\"lspace\", fboxsep + \"pt\"); //\n\n node.setAttribute(\"voffset\", fboxsep + \"pt\");\n\n if (group.label === \"\\\\fcolorbox\") {\n var thk = Math.max(options.fontMetrics().fboxrule, // default\n options.minRuleThickness // user override\n );\n node.setAttribute(\"style\", \"border: \" + thk + \"em solid \" + String(group.borderColor));\n }\n\n break;\n\n case \"\\\\xcancel\":\n node.setAttribute(\"notation\", \"updiagonalstrike downdiagonalstrike\");\n break;\n }\n\n if (group.backgroundColor) {\n node.setAttribute(\"mathbackground\", group.backgroundColor);\n }\n\n return node;\n};\n\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\colorbox\"],\n props: {\n numArgs: 2,\n allowedInText: true,\n argTypes: [\"color\", \"text\"]\n },\n\n handler(_ref, args, optArgs) {\n var {\n parser,\n funcName\n } = _ref;\n var color = assertNodeType(args[0], \"color-token\").color;\n var body = args[1];\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: funcName,\n backgroundColor: color,\n body\n };\n },\n\n htmlBuilder: htmlBuilder$7,\n mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\fcolorbox\"],\n props: {\n numArgs: 3,\n allowedInText: true,\n argTypes: [\"color\", \"color\", \"text\"]\n },\n\n handler(_ref2, args, optArgs) {\n var {\n parser,\n funcName\n } = _ref2;\n var borderColor = assertNodeType(args[0], \"color-token\").color;\n var backgroundColor = assertNodeType(args[1], \"color-token\").color;\n var body = args[2];\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: funcName,\n backgroundColor,\n borderColor,\n body\n };\n },\n\n htmlBuilder: htmlBuilder$7,\n mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\fbox\"],\n props: {\n numArgs: 1,\n argTypes: [\"hbox\"],\n allowedInText: true\n },\n\n handler(_ref3, args) {\n var {\n parser\n } = _ref3;\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: \"\\\\fbox\",\n body: args[0]\n };\n }\n\n});\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\cancel\", \"\\\\bcancel\", \"\\\\xcancel\", \"\\\\sout\", \"\\\\phase\"],\n props: {\n numArgs: 1\n },\n\n handler(_ref4, args) {\n var {\n parser,\n funcName\n } = _ref4;\n var body = args[0];\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: funcName,\n body\n };\n },\n\n htmlBuilder: htmlBuilder$7,\n mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\angl\"],\n props: {\n numArgs: 1,\n argTypes: [\"hbox\"],\n allowedInText: false\n },\n\n handler(_ref5, args) {\n var {\n parser\n } = _ref5;\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: \"\\\\angl\",\n body: args[0]\n };\n }\n\n});\n\n/**\n * All registered environments.\n * `environments.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `environments.js`.\n */\nvar _environments = {};\nfunction defineEnvironment(_ref) {\n var {\n type,\n names,\n props,\n handler,\n htmlBuilder,\n mathmlBuilder\n } = _ref;\n // Set default values of environments.\n var data = {\n type,\n numArgs: props.numArgs || 0,\n allowedInText: false,\n numOptionalArgs: 0,\n handler\n };\n\n for (var i = 0; i < names.length; ++i) {\n // TODO: The value type of _environments should be a type union of all\n // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is\n // an existential type.\n _environments[names[i]] = data;\n }\n\n if (htmlBuilder) {\n _htmlGroupBuilders[type] = htmlBuilder;\n }\n\n if (mathmlBuilder) {\n _mathmlGroupBuilders[type] = mathmlBuilder;\n }\n}\n\n/**\n * All registered global/built-in macros.\n * `macros.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `macros.js`.\n */\nvar _macros = {}; // This function might one day accept an additional argument and do more things.\n\nfunction defineMacro(name, body) {\n _macros[name] = body;\n}\n\n// Helper functions\nfunction getHLines(parser) {\n // Return an array. The array length = number of hlines.\n // Each element in the array tells if the line is dashed.\n var hlineInfo = [];\n parser.consumeSpaces();\n var nxt = parser.fetch().text;\n\n if (nxt === \"\\\\relax\") {\n // \\relax is an artifact of the \\cr macro below\n parser.consume();\n parser.consumeSpaces();\n nxt = parser.fetch().text;\n }\n\n while (nxt === \"\\\\hline\" || nxt === \"\\\\hdashline\") {\n parser.consume();\n hlineInfo.push(nxt === \"\\\\hdashline\");\n parser.consumeSpaces();\n nxt = parser.fetch().text;\n }\n\n return hlineInfo;\n}\n\nvar validateAmsEnvironmentContext = context => {\n var settings = context.parser.settings;\n\n if (!settings.displayMode) {\n throw new ParseError(\"{\" + context.envName + \"} can be used only in\" + \" display mode.\");\n }\n}; // autoTag (an argument to parseArray) can be one of three values:\n// * undefined: Regular (not-top-level) array; no tags on each row\n// * true: Automatic equation numbering, overridable by \\tag\n// * false: Tags allowed on each row, but no automatic numbering\n// This function *doesn't* work with the \"split\" environment name.\n\n\nfunction getAutoTag(name) {\n if (name.indexOf(\"ed\") === -1) {\n return name.indexOf(\"*\") === -1;\n } // return undefined;\n\n}\n/**\n * Parse the body of the environment, with rows delimited by \\\\ and\n * columns delimited by &, and create a nested list in row-major order\n * with one group per cell. If given an optional argument style\n * (\"text\", \"display\", etc.), then each cell is cast into that style.\n */\n\n\nfunction parseArray(parser, _ref, style) {\n var {\n hskipBeforeAndAfter,\n addJot,\n cols,\n arraystretch,\n colSeparationType,\n autoTag,\n singleRow,\n emptySingleRow,\n maxNumCols,\n leqno\n } = _ref;\n parser.gullet.beginGroup();\n\n if (!singleRow) {\n // \\cr is equivalent to \\\\ without the optional size argument (see below)\n // TODO: provide helpful error when \\cr is used outside array environment\n parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n } // Get current arraystretch if it's not set by the environment\n\n\n if (!arraystretch) {\n var stretch = parser.gullet.expandMacroAsText(\"\\\\arraystretch\");\n\n if (stretch == null) {\n // Default \\arraystretch from lttab.dtx\n arraystretch = 1;\n } else {\n arraystretch = parseFloat(stretch);\n\n if (!arraystretch || arraystretch < 0) {\n throw new ParseError(\"Invalid \\\\arraystretch: \" + stretch);\n }\n }\n } // Start group for first cell\n\n\n parser.gullet.beginGroup();\n var row = [];\n var body = [row];\n var rowGaps = [];\n var hLinesBeforeRow = [];\n var tags = autoTag != null ? [] : undefined; // amsmath uses \\global\\@eqnswtrue and \\global\\@eqnswfalse to represent\n // whether this row should have an equation number. Simulate this with\n // a \\@eqnsw macro set to 1 or 0.\n\n function beginRow() {\n if (autoTag) {\n parser.gullet.macros.set(\"\\\\@eqnsw\", \"1\", true);\n }\n }\n\n function endRow() {\n if (tags) {\n if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n tags.push(parser.subparse([new Token(\"\\\\df@tag\")]));\n parser.gullet.macros.set(\"\\\\df@tag\", undefined, true);\n } else {\n tags.push(Boolean(autoTag) && parser.gullet.macros.get(\"\\\\@eqnsw\") === \"1\");\n }\n }\n }\n\n beginRow(); // Test for \\hline at the top of the array.\n\n hLinesBeforeRow.push(getHLines(parser));\n\n while (true) {\n // eslint-disable-line no-constant-condition\n // Parse each cell in its own group (namespace)\n var cell = parser.parseExpression(false, singleRow ? \"\\\\end\" : \"\\\\\\\\\");\n parser.gullet.endGroup();\n parser.gullet.beginGroup();\n cell = {\n type: \"ordgroup\",\n mode: parser.mode,\n body: cell\n };\n\n if (style) {\n cell = {\n type: \"styling\",\n mode: parser.mode,\n style,\n body: [cell]\n };\n }\n\n row.push(cell);\n var next = parser.fetch().text;\n\n if (next === \"&\") {\n if (maxNumCols && row.length === maxNumCols) {\n if (singleRow || colSeparationType) {\n // {equation} or {split}\n throw new ParseError(\"Too many tab characters: &\", parser.nextToken);\n } else {\n // {array} environment\n parser.settings.reportNonstrict(\"textEnv\", \"Too few columns \" + \"specified in the {array} column argument.\");\n }\n }\n\n parser.consume();\n } else if (next === \"\\\\end\") {\n endRow(); // Arrays terminate newlines with `\\crcr` which consumes a `\\cr` if\n // the last line is empty. However, AMS environments keep the\n // empty row if it's the only one.\n // NOTE: Currently, `cell` is the last item added into `row`.\n\n if (row.length === 1 && cell.type === \"styling\" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) {\n body.pop();\n }\n\n if (hLinesBeforeRow.length < body.length + 1) {\n hLinesBeforeRow.push([]);\n }\n\n break;\n } else if (next === \"\\\\\\\\\") {\n parser.consume();\n var size = void 0; // \\def\\Let@{\\let\\\\\\math@cr}\n // \\def\\math@cr{...\\math@cr@}\n // \\def\\math@cr@{\\new@ifnextchar[\\math@cr@@{\\math@cr@@[\\z@]}}\n // \\def\\math@cr@@[#1]{...\\math@cr@@@...}\n // \\def\\math@cr@@@{\\cr}\n\n if (parser.gullet.future().text !== \" \") {\n size = parser.parseSizeGroup(true);\n }\n\n rowGaps.push(size ? size.value : null);\n endRow(); // check for \\hline(s) following the row separator\n\n hLinesBeforeRow.push(getHLines(parser));\n row = [];\n body.push(row);\n beginRow();\n } else {\n throw new ParseError(\"Expected & or \\\\\\\\ or \\\\cr or \\\\end\", parser.nextToken);\n }\n } // End cell group\n\n\n parser.gullet.endGroup(); // End array group defining \\cr\n\n parser.gullet.endGroup();\n return {\n type: \"array\",\n mode: parser.mode,\n addJot,\n arraystretch,\n body,\n cols,\n rowGaps,\n hskipBeforeAndAfter,\n hLinesBeforeRow,\n colSeparationType,\n tags,\n leqno\n };\n} // Decides on a style for cells in an array according to whether the given\n// environment name starts with the letter 'd'.\n\n\nfunction dCellStyle(envName) {\n if (envName.slice(0, 1) === \"d\") {\n return \"display\";\n } else {\n return \"text\";\n }\n}\n\nvar htmlBuilder$6 = function htmlBuilder(group, options) {\n var r;\n var c;\n var nr = group.body.length;\n var hLinesBeforeRow = group.hLinesBeforeRow;\n var nc = 0;\n var body = new Array(nr);\n var hlines = [];\n var ruleThickness = Math.max( // From LaTeX \\showthe\\arrayrulewidth. Equals 0.04 em.\n options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override.\n ); // Horizontal spacing\n\n var pt = 1 / options.fontMetrics().ptPerEm;\n var arraycolsep = 5 * pt; // default value, i.e. \\arraycolsep in article.cls\n\n if (group.colSeparationType && group.colSeparationType === \"small\") {\n // We're in a {smallmatrix}. Default column space is \\thickspace,\n // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}.\n // But that needs adjustment because LaTeX applies \\scriptstyle to the\n // entire array, including the colspace, but this function applies\n // \\scriptstyle only inside each element.\n var localMultiplier = options.havingStyle(Style$1.SCRIPT).sizeMultiplier;\n arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier);\n } // Vertical spacing\n\n\n var baselineskip = group.colSeparationType === \"CD\" ? calculateSize({\n number: 3,\n unit: \"ex\"\n }, options) : 12 * pt; // see size10.clo\n // Default \\jot from ltmath.dtx\n // TODO(edemaine): allow overriding \\jot via \\setlength (#687)\n\n var jot = 3 * pt;\n var arrayskip = group.arraystretch * baselineskip;\n var arstrutHeight = 0.7 * arrayskip; // \\strutbox in ltfsstrc.dtx and\n\n var arstrutDepth = 0.3 * arrayskip; // \\@arstrutbox in lttab.dtx\n\n var totalHeight = 0; // Set a position for \\hline(s) at the top of the array, if any.\n\n function setHLinePos(hlinesInGap) {\n for (var i = 0; i < hlinesInGap.length; ++i) {\n if (i > 0) {\n totalHeight += 0.25;\n }\n\n hlines.push({\n pos: totalHeight,\n isDashed: hlinesInGap[i]\n });\n }\n }\n\n setHLinePos(hLinesBeforeRow[0]);\n\n for (r = 0; r < group.body.length; ++r) {\n var inrow = group.body[r];\n var height = arstrutHeight; // \\@array adds an \\@arstrut\n\n var depth = arstrutDepth; // to each tow (via the template)\n\n if (nc < inrow.length) {\n nc = inrow.length;\n }\n\n var outrow = new Array(inrow.length);\n\n for (c = 0; c < inrow.length; ++c) {\n var elt = buildGroup$1(inrow[c], options);\n\n if (depth < elt.depth) {\n depth = elt.depth;\n }\n\n if (height < elt.height) {\n height = elt.height;\n }\n\n outrow[c] = elt;\n }\n\n var rowGap = group.rowGaps[r];\n var gap = 0;\n\n if (rowGap) {\n gap = calculateSize(rowGap, options);\n\n if (gap > 0) {\n // \\@argarraycr\n gap += arstrutDepth;\n\n if (depth < gap) {\n depth = gap; // \\@xargarraycr\n }\n\n gap = 0;\n }\n } // In AMS multiline environments such as aligned and gathered, rows\n // correspond to lines that have additional \\jot added to the\n // \\baselineskip via \\openup.\n\n\n if (group.addJot) {\n depth += jot;\n }\n\n outrow.height = height;\n outrow.depth = depth;\n totalHeight += height;\n outrow.pos = totalHeight;\n totalHeight += depth + gap; // \\@yargarraycr\n\n body[r] = outrow; // Set a position for \\hline(s), if any.\n\n setHLinePos(hLinesBeforeRow[r + 1]);\n }\n\n var offset = totalHeight / 2 + options.fontMetrics().axisHeight;\n var colDescriptions = group.cols || [];\n var cols = [];\n var colSep;\n var colDescrNum;\n var tagSpans = [];\n\n if (group.tags && group.tags.some(tag => tag)) {\n // An environment with manual tags and/or automatic equation numbers.\n // Create node(s), the latter of which trigger CSS counter increment.\n for (r = 0; r < nr; ++r) {\n var rw = body[r];\n var shift = rw.pos - offset;\n var tag = group.tags[r];\n var tagSpan = void 0;\n\n if (tag === true) {\n // automatic numbering\n tagSpan = buildCommon.makeSpan([\"eqn-num\"], [], options);\n } else if (tag === false) {\n // \\nonumber/\\notag or starred environment\n tagSpan = buildCommon.makeSpan([], [], options);\n } else {\n // manual \\tag\n tagSpan = buildCommon.makeSpan([], buildExpression$1(tag, options, true), options);\n }\n\n tagSpan.depth = rw.depth;\n tagSpan.height = rw.height;\n tagSpans.push({\n type: \"elem\",\n elem: tagSpan,\n shift\n });\n }\n }\n\n for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column\n // descriptions, so trailing separators don't get lost.\n c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) {\n var colDescr = colDescriptions[colDescrNum] || {};\n var firstSeparator = true;\n\n while (colDescr.type === \"separator\") {\n // If there is more than one separator in a row, add a space\n // between them.\n if (!firstSeparator) {\n colSep = buildCommon.makeSpan([\"arraycolsep\"], []);\n colSep.style.width = makeEm(options.fontMetrics().doubleRuleSep);\n cols.push(colSep);\n }\n\n if (colDescr.separator === \"|\" || colDescr.separator === \":\") {\n var lineType = colDescr.separator === \"|\" ? \"solid\" : \"dashed\";\n var separator = buildCommon.makeSpan([\"vertical-separator\"], [], options);\n separator.style.height = makeEm(totalHeight);\n separator.style.borderRightWidth = makeEm(ruleThickness);\n separator.style.borderRightStyle = lineType;\n separator.style.margin = \"0 \" + makeEm(-ruleThickness / 2);\n\n var _shift = totalHeight - offset;\n\n if (_shift) {\n separator.style.verticalAlign = makeEm(-_shift);\n }\n\n cols.push(separator);\n } else {\n throw new ParseError(\"Invalid separator type: \" + colDescr.separator);\n }\n\n colDescrNum++;\n colDescr = colDescriptions[colDescrNum] || {};\n firstSeparator = false;\n }\n\n if (c >= nc) {\n continue;\n }\n\n var sepwidth = void 0;\n\n if (c > 0 || group.hskipBeforeAndAfter) {\n sepwidth = utils.deflt(colDescr.pregap, arraycolsep);\n\n if (sepwidth !== 0) {\n colSep = buildCommon.makeSpan([\"arraycolsep\"], []);\n colSep.style.width = makeEm(sepwidth);\n cols.push(colSep);\n }\n }\n\n var col = [];\n\n for (r = 0; r < nr; ++r) {\n var row = body[r];\n var elem = row[c];\n\n if (!elem) {\n continue;\n }\n\n var _shift2 = row.pos - offset;\n\n elem.depth = row.depth;\n elem.height = row.height;\n col.push({\n type: \"elem\",\n elem: elem,\n shift: _shift2\n });\n }\n\n col = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: col\n }, options);\n col = buildCommon.makeSpan([\"col-align-\" + (colDescr.align || \"c\")], [col]);\n cols.push(col);\n\n if (c < nc - 1 || group.hskipBeforeAndAfter) {\n sepwidth = utils.deflt(colDescr.postgap, arraycolsep);\n\n if (sepwidth !== 0) {\n colSep = buildCommon.makeSpan([\"arraycolsep\"], []);\n colSep.style.width = makeEm(sepwidth);\n cols.push(colSep);\n }\n }\n }\n\n body = buildCommon.makeSpan([\"mtable\"], cols); // Add \\hline(s), if any.\n\n if (hlines.length > 0) {\n var line = buildCommon.makeLineSpan(\"hline\", options, ruleThickness);\n var dashes = buildCommon.makeLineSpan(\"hdashline\", options, ruleThickness);\n var vListElems = [{\n type: \"elem\",\n elem: body,\n shift: 0\n }];\n\n while (hlines.length > 0) {\n var hline = hlines.pop();\n var lineShift = hline.pos - offset;\n\n if (hline.isDashed) {\n vListElems.push({\n type: \"elem\",\n elem: dashes,\n shift: lineShift\n });\n } else {\n vListElems.push({\n type: \"elem\",\n elem: line,\n shift: lineShift\n });\n }\n }\n\n body = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: vListElems\n }, options);\n }\n\n if (tagSpans.length === 0) {\n return buildCommon.makeSpan([\"mord\"], [body], options);\n } else {\n var eqnNumCol = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: tagSpans\n }, options);\n eqnNumCol = buildCommon.makeSpan([\"tag\"], [eqnNumCol], options);\n return buildCommon.makeFragment([body, eqnNumCol]);\n }\n};\n\nvar alignMap = {\n c: \"center \",\n l: \"left \",\n r: \"right \"\n};\n\nvar mathmlBuilder$5 = function mathmlBuilder(group, options) {\n var tbl = [];\n var glue = new mathMLTree.MathNode(\"mtd\", [], [\"mtr-glue\"]);\n var tag = new mathMLTree.MathNode(\"mtd\", [], [\"mml-eqn-num\"]);\n\n for (var i = 0; i < group.body.length; i++) {\n var rw = group.body[i];\n var row = [];\n\n for (var j = 0; j < rw.length; j++) {\n row.push(new mathMLTree.MathNode(\"mtd\", [buildGroup(rw[j], options)]));\n }\n\n if (group.tags && group.tags[i]) {\n row.unshift(glue);\n row.push(glue);\n\n if (group.leqno) {\n row.unshift(tag);\n } else {\n row.push(tag);\n }\n }\n\n tbl.push(new mathMLTree.MathNode(\"mtr\", row));\n }\n\n var table = new mathMLTree.MathNode(\"mtable\", tbl); // Set column alignment, row spacing, column spacing, and\n // array lines by setting attributes on the table element.\n // Set the row spacing. In MathML, we specify a gap distance.\n // We do not use rowGap[] because MathML automatically increases\n // cell height with the height/depth of the element content.\n // LaTeX \\arraystretch multiplies the row baseline-to-baseline distance.\n // We simulate this by adding (arraystretch - 1)em to the gap. This\n // does a reasonable job of adjusting arrays containing 1 em tall content.\n // The 0.16 and 0.09 values are found empirically. They produce an array\n // similar to LaTeX and in which content does not interfere with \\hlines.\n\n var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray}\n : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0);\n table.setAttribute(\"rowspacing\", makeEm(gap)); // MathML table lines go only between cells.\n // To place a line on an edge we'll use <menclose>, if necessary.\n\n var menclose = \"\";\n var align = \"\";\n\n if (group.cols && group.cols.length > 0) {\n // Find column alignment, column spacing, and vertical lines.\n var cols = group.cols;\n var columnLines = \"\";\n var prevTypeWasAlign = false;\n var iStart = 0;\n var iEnd = cols.length;\n\n if (cols[0].type === \"separator\") {\n menclose += \"top \";\n iStart = 1;\n }\n\n if (cols[cols.length - 1].type === \"separator\") {\n menclose += \"bottom \";\n iEnd -= 1;\n }\n\n for (var _i = iStart; _i < iEnd; _i++) {\n if (cols[_i].type === \"align\") {\n align += alignMap[cols[_i].align];\n\n if (prevTypeWasAlign) {\n columnLines += \"none \";\n }\n\n prevTypeWasAlign = true;\n } else if (cols[_i].type === \"separator\") {\n // MathML accepts only single lines between cells.\n // So we read only the first of consecutive separators.\n if (prevTypeWasAlign) {\n columnLines += cols[_i].separator === \"|\" ? \"solid \" : \"dashed \";\n prevTypeWasAlign = false;\n }\n }\n }\n\n table.setAttribute(\"columnalign\", align.trim());\n\n if (/[sd]/.test(columnLines)) {\n table.setAttribute(\"columnlines\", columnLines.trim());\n }\n } // Set column spacing.\n\n\n if (group.colSeparationType === \"align\") {\n var _cols = group.cols || [];\n\n var spacing = \"\";\n\n for (var _i2 = 1; _i2 < _cols.length; _i2++) {\n spacing += _i2 % 2 ? \"0em \" : \"1em \";\n }\n\n table.setAttribute(\"columnspacing\", spacing.trim());\n } else if (group.colSeparationType === \"alignat\" || group.colSeparationType === \"gather\") {\n table.setAttribute(\"columnspacing\", \"0em\");\n } else if (group.colSeparationType === \"small\") {\n table.setAttribute(\"columnspacing\", \"0.2778em\");\n } else if (group.colSeparationType === \"CD\") {\n table.setAttribute(\"columnspacing\", \"0.5em\");\n } else {\n table.setAttribute(\"columnspacing\", \"1em\");\n } // Address \\hline and \\hdashline\n\n\n var rowLines = \"\";\n var hlines = group.hLinesBeforeRow;\n menclose += hlines[0].length > 0 ? \"left \" : \"\";\n menclose += hlines[hlines.length - 1].length > 0 ? \"right \" : \"\";\n\n for (var _i3 = 1; _i3 < hlines.length - 1; _i3++) {\n rowLines += hlines[_i3].length === 0 ? \"none \" // MathML accepts only a single line between rows. Read one element.\n : hlines[_i3][0] ? \"dashed \" : \"solid \";\n }\n\n if (/[sd]/.test(rowLines)) {\n table.setAttribute(\"rowlines\", rowLines.trim());\n }\n\n if (menclose !== \"\") {\n table = new mathMLTree.MathNode(\"menclose\", [table]);\n table.setAttribute(\"notation\", menclose.trim());\n }\n\n if (group.arraystretch && group.arraystretch < 1) {\n // A small array. Wrap in scriptstyle so row gap is not too large.\n table = new mathMLTree.MathNode(\"mstyle\", [table]);\n table.setAttribute(\"scriptlevel\", \"1\");\n }\n\n return table;\n}; // Convenience function for align, align*, aligned, alignat, alignat*, alignedat.\n\n\nvar alignedHandler = function alignedHandler(context, args) {\n if (context.envName.indexOf(\"ed\") === -1) {\n validateAmsEnvironmentContext(context);\n }\n\n var cols = [];\n var separationType = context.envName.indexOf(\"at\") > -1 ? \"alignat\" : \"align\";\n var isSplit = context.envName === \"split\";\n var res = parseArray(context.parser, {\n cols,\n addJot: true,\n autoTag: isSplit ? undefined : getAutoTag(context.envName),\n emptySingleRow: true,\n colSeparationType: separationType,\n maxNumCols: isSplit ? 2 : undefined,\n leqno: context.parser.settings.leqno\n }, \"display\"); // Determining number of columns.\n // 1. If the first argument is given, we use it as a number of columns,\n // and makes sure that each row doesn't exceed that number.\n // 2. Otherwise, just count number of columns = maximum number\n // of cells in each row (\"aligned\" mode -- isAligned will be true).\n //\n // At the same time, prepend empty group {} at beginning of every second\n // cell in each row (starting with second cell) so that operators become\n // binary. This behavior is implemented in amsmath's \\start@aligned.\n\n var numMaths;\n var numCols = 0;\n var emptyGroup = {\n type: \"ordgroup\",\n mode: context.mode,\n body: []\n };\n\n if (args[0] && args[0].type === \"ordgroup\") {\n var arg0 = \"\";\n\n for (var i = 0; i < args[0].body.length; i++) {\n var textord = assertNodeType(args[0].body[i], \"textord\");\n arg0 += textord.text;\n }\n\n numMaths = Number(arg0);\n numCols = numMaths * 2;\n }\n\n var isAligned = !numCols;\n res.body.forEach(function (row) {\n for (var _i4 = 1; _i4 < row.length; _i4 += 2) {\n // Modify ordgroup node within styling node\n var styling = assertNodeType(row[_i4], \"styling\");\n var ordgroup = assertNodeType(styling.body[0], \"ordgroup\");\n ordgroup.body.unshift(emptyGroup);\n }\n\n if (!isAligned) {\n // Case 1\n var curMaths = row.length / 2;\n\n if (numMaths < curMaths) {\n throw new ParseError(\"Too many math in a row: \" + (\"expected \" + numMaths + \", but got \" + curMaths), row[0]);\n }\n } else if (numCols < row.length) {\n // Case 2\n numCols = row.length;\n }\n }); // Adjusting alignment.\n // In aligned mode, we add one \\qquad between columns;\n // otherwise we add nothing.\n\n for (var _i5 = 0; _i5 < numCols; ++_i5) {\n var align = \"r\";\n var pregap = 0;\n\n if (_i5 % 2 === 1) {\n align = \"l\";\n } else if (_i5 > 0 && isAligned) {\n // \"aligned\" mode.\n pregap = 1; // add one \\quad\n }\n\n cols[_i5] = {\n type: \"align\",\n align: align,\n pregap: pregap,\n postgap: 0\n };\n }\n\n res.colSeparationType = isAligned ? \"align\" : \"alignat\";\n return res;\n}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation\n// is part of the source2e.pdf file of LaTeX2e source documentation.\n// {darray} is an {array} environment where cells are set in \\displaystyle,\n// as defined in nccmath.sty.\n\n\ndefineEnvironment({\n type: \"array\",\n names: [\"array\", \"darray\"],\n props: {\n numArgs: 1\n },\n\n handler(context, args) {\n // Since no types are specified above, the two possibilities are\n // - The argument is wrapped in {} or [], in which case Parser's\n // parseGroup() returns an \"ordgroup\" wrapping some symbol node.\n // - The argument is a bare symbol node.\n var symNode = checkSymbolNodeType(args[0]);\n var colalign = symNode ? [args[0]] : assertNodeType(args[0], \"ordgroup\").body;\n var cols = colalign.map(function (nde) {\n var node = assertSymbolNodeType(nde);\n var ca = node.text;\n\n if (\"lcr\".indexOf(ca) !== -1) {\n return {\n type: \"align\",\n align: ca\n };\n } else if (ca === \"|\") {\n return {\n type: \"separator\",\n separator: \"|\"\n };\n } else if (ca === \":\") {\n return {\n type: \"separator\",\n separator: \":\"\n };\n }\n\n throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n });\n var res = {\n cols,\n hskipBeforeAndAfter: true,\n // \\@preamble in lttab.dtx\n maxNumCols: cols.length\n };\n return parseArray(context.parser, res, dCellStyle(context.envName));\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // The matrix environments of amsmath builds on the array environment\n// of LaTeX, which is discussed above.\n// The mathtools package adds starred versions of the same environments.\n// These have an optional argument to choose left|center|right justification.\n\ndefineEnvironment({\n type: \"array\",\n names: [\"matrix\", \"pmatrix\", \"bmatrix\", \"Bmatrix\", \"vmatrix\", \"Vmatrix\", \"matrix*\", \"pmatrix*\", \"bmatrix*\", \"Bmatrix*\", \"vmatrix*\", \"Vmatrix*\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n var delimiters = {\n \"matrix\": null,\n \"pmatrix\": [\"(\", \")\"],\n \"bmatrix\": [\"[\", \"]\"],\n \"Bmatrix\": [\"\\\\{\", \"\\\\}\"],\n \"vmatrix\": [\"|\", \"|\"],\n \"Vmatrix\": [\"\\\\Vert\", \"\\\\Vert\"]\n }[context.envName.replace(\"*\", \"\")]; // \\hskip -\\arraycolsep in amsmath\n\n var colAlign = \"c\";\n var payload = {\n hskipBeforeAndAfter: false,\n cols: [{\n type: \"align\",\n align: colAlign\n }]\n };\n\n if (context.envName.charAt(context.envName.length - 1) === \"*\") {\n // It's one of the mathtools starred functions.\n // Parse the optional alignment argument.\n var parser = context.parser;\n parser.consumeSpaces();\n\n if (parser.fetch().text === \"[\") {\n parser.consume();\n parser.consumeSpaces();\n colAlign = parser.fetch().text;\n\n if (\"lcr\".indexOf(colAlign) === -1) {\n throw new ParseError(\"Expected l or c or r\", parser.nextToken);\n }\n\n parser.consume();\n parser.consumeSpaces();\n parser.expect(\"]\");\n parser.consume();\n payload.cols = [{\n type: \"align\",\n align: colAlign\n }];\n }\n }\n\n var res = parseArray(context.parser, payload, dCellStyle(context.envName)); // Populate cols with the correct number of column alignment specs.\n\n var numCols = Math.max(0, ...res.body.map(row => row.length));\n res.cols = new Array(numCols).fill({\n type: \"align\",\n align: colAlign\n });\n return delimiters ? {\n type: \"leftright\",\n mode: context.mode,\n body: [res],\n left: delimiters[0],\n right: delimiters[1],\n rightColor: undefined // \\right uninfluenced by \\color in array\n\n } : res;\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n type: \"array\",\n names: [\"smallmatrix\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n var payload = {\n arraystretch: 0.5\n };\n var res = parseArray(context.parser, payload, \"script\");\n res.colSeparationType = \"small\";\n return res;\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n type: \"array\",\n names: [\"subarray\"],\n props: {\n numArgs: 1\n },\n\n handler(context, args) {\n // Parsing of {subarray} is similar to {array}\n var symNode = checkSymbolNodeType(args[0]);\n var colalign = symNode ? [args[0]] : assertNodeType(args[0], \"ordgroup\").body;\n var cols = colalign.map(function (nde) {\n var node = assertSymbolNodeType(nde);\n var ca = node.text; // {subarray} only recognizes \"l\" & \"c\"\n\n if (\"lc\".indexOf(ca) !== -1) {\n return {\n type: \"align\",\n align: ca\n };\n }\n\n throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n });\n\n if (cols.length > 1) {\n throw new ParseError(\"{subarray} can contain only one column\");\n }\n\n var res = {\n cols,\n hskipBeforeAndAfter: false,\n arraystretch: 0.5\n };\n res = parseArray(context.parser, res, \"script\");\n\n if (res.body.length > 0 && res.body[0].length > 1) {\n throw new ParseError(\"{subarray} can contain only one column\");\n }\n\n return res;\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // A cases environment (in amsmath.sty) is almost equivalent to\n// \\def\\arraystretch{1.2}%\n// \\left\\{\\begin{array}{@{}l@{\\quad}l@{}} … \\end{array}\\right.\n// {dcases} is a {cases} environment where cells are set in \\displaystyle,\n// as defined in mathtools.sty.\n// {rcases} is another mathtools environment. It's brace is on the right side.\n\ndefineEnvironment({\n type: \"array\",\n names: [\"cases\", \"dcases\", \"rcases\", \"drcases\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n var payload = {\n arraystretch: 1.2,\n cols: [{\n type: \"align\",\n align: \"l\",\n pregap: 0,\n // TODO(kevinb) get the current style.\n // For now we use the metrics for TEXT style which is what we were\n // doing before. Before attempting to get the current style we\n // should look at TeX's behavior especially for \\over and matrices.\n postgap: 1.0\n /* 1em quad */\n\n }, {\n type: \"align\",\n align: \"l\",\n pregap: 0,\n postgap: 0\n }]\n };\n var res = parseArray(context.parser, payload, dCellStyle(context.envName));\n return {\n type: \"leftright\",\n mode: context.mode,\n body: [res],\n left: context.envName.indexOf(\"r\") > -1 ? \".\" : \"\\\\{\",\n right: context.envName.indexOf(\"r\") > -1 ? \"\\\\}\" : \".\",\n rightColor: undefined\n };\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // In the align environment, one uses ampersands, &, to specify number of\n// columns in each row, and to locate spacing between each column.\n// align gets automatic numbering. align* and aligned do not.\n// The alignedat environment can be used in math mode.\n// Note that we assume \\nomallineskiplimit to be zero,\n// so that \\strut@ is the same as \\strut.\n\ndefineEnvironment({\n type: \"array\",\n names: [\"align\", \"align*\", \"aligned\", \"split\"],\n props: {\n numArgs: 0\n },\n handler: alignedHandler,\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // A gathered environment is like an array environment with one centered\n// column, but where rows are considered lines so get \\jot line spacing\n// and contents are set in \\displaystyle.\n\ndefineEnvironment({\n type: \"array\",\n names: [\"gathered\", \"gather\", \"gather*\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n if ([\"gather\", \"gather*\"].includes(context.envName)) {\n validateAmsEnvironmentContext(context);\n }\n\n var res = {\n cols: [{\n type: \"align\",\n align: \"c\"\n }],\n addJot: true,\n colSeparationType: \"gather\",\n autoTag: getAutoTag(context.envName),\n emptySingleRow: true,\n leqno: context.parser.settings.leqno\n };\n return parseArray(context.parser, res, \"display\");\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // alignat environment is like an align environment, but one must explicitly\n// specify maximum number of columns in each row, and can adjust spacing between\n// each columns.\n\ndefineEnvironment({\n type: \"array\",\n names: [\"alignat\", \"alignat*\", \"alignedat\"],\n props: {\n numArgs: 1\n },\n handler: alignedHandler,\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n type: \"array\",\n names: [\"equation\", \"equation*\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n validateAmsEnvironmentContext(context);\n var res = {\n autoTag: getAutoTag(context.envName),\n emptySingleRow: true,\n singleRow: true,\n maxNumCols: 1,\n leqno: context.parser.settings.leqno\n };\n return parseArray(context.parser, res, \"display\");\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n type: \"array\",\n names: [\"CD\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n validateAmsEnvironmentContext(context);\n return parseCD(context.parser);\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineMacro(\"\\\\nonumber\", \"\\\\gdef\\\\@eqnsw{0}\");\ndefineMacro(\"\\\\notag\", \"\\\\nonumber\"); // Catch \\hline outside array environment\n\ndefineFunction({\n type: \"text\",\n // Doesn't matter what this is.\n names: [\"\\\\hline\", \"\\\\hdashline\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: true\n },\n\n handler(context, args) {\n throw new ParseError(context.funcName + \" valid only within array environment\");\n }\n\n});\n\nvar environments = _environments;\n\n// defineEnvironment definitions.\n\ndefineFunction({\n type: \"environment\",\n names: [\"\\\\begin\", \"\\\\end\"],\n props: {\n numArgs: 1,\n argTypes: [\"text\"]\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n var nameGroup = args[0];\n\n if (nameGroup.type !== \"ordgroup\") {\n throw new ParseError(\"Invalid environment name\", nameGroup);\n }\n\n var envName = \"\";\n\n for (var i = 0; i < nameGroup.body.length; ++i) {\n envName += assertNodeType(nameGroup.body[i], \"textord\").text;\n }\n\n if (funcName === \"\\\\begin\") {\n // begin...end is similar to left...right\n if (!environments.hasOwnProperty(envName)) {\n throw new ParseError(\"No such environment: \" + envName, nameGroup);\n } // Build the environment object. Arguments and other information will\n // be made available to the begin and end methods using properties.\n\n\n var env = environments[envName];\n var {\n args: _args,\n optArgs\n } = parser.parseArguments(\"\\\\begin{\" + envName + \"}\", env);\n var context = {\n mode: parser.mode,\n envName,\n parser\n };\n var result = env.handler(context, _args, optArgs);\n parser.expect(\"\\\\end\", false);\n var endNameToken = parser.nextToken;\n var end = assertNodeType(parser.parseFunction(), \"environment\");\n\n if (end.name !== envName) {\n throw new ParseError(\"Mismatch: \\\\begin{\" + envName + \"} matched by \\\\end{\" + end.name + \"}\", endNameToken);\n } // $FlowFixMe, \"environment\" handler returns an environment ParseNode\n\n\n return result;\n }\n\n return {\n type: \"environment\",\n mode: parser.mode,\n name: envName,\n nameGroup\n };\n }\n\n});\n\n// TODO(kevinb): implement \\\\sl and \\\\sc\n\nvar htmlBuilder$5 = (group, options) => {\n var font = group.font;\n var newOptions = options.withFont(font);\n return buildGroup$1(group.body, newOptions);\n};\n\nvar mathmlBuilder$4 = (group, options) => {\n var font = group.font;\n var newOptions = options.withFont(font);\n return buildGroup(group.body, newOptions);\n};\n\nvar fontAliases = {\n \"\\\\Bbb\": \"\\\\mathbb\",\n \"\\\\bold\": \"\\\\mathbf\",\n \"\\\\frak\": \"\\\\mathfrak\",\n \"\\\\bm\": \"\\\\boldsymbol\"\n};\ndefineFunction({\n type: \"font\",\n names: [// styles, except \\boldsymbol defined below\n \"\\\\mathrm\", \"\\\\mathit\", \"\\\\mathbf\", \"\\\\mathnormal\", \"\\\\mathsfit\", // families\n \"\\\\mathbb\", \"\\\\mathcal\", \"\\\\mathfrak\", \"\\\\mathscr\", \"\\\\mathsf\", \"\\\\mathtt\", // aliases, except \\bm defined below\n \"\\\\Bbb\", \"\\\\bold\", \"\\\\frak\"],\n props: {\n numArgs: 1,\n allowedInArgument: true\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var body = normalizeArgument(args[0]);\n var func = funcName;\n\n if (func in fontAliases) {\n func = fontAliases[func];\n }\n\n return {\n type: \"font\",\n mode: parser.mode,\n font: func.slice(1),\n body\n };\n },\n htmlBuilder: htmlBuilder$5,\n mathmlBuilder: mathmlBuilder$4\n});\ndefineFunction({\n type: \"mclass\",\n names: [\"\\\\boldsymbol\", \"\\\\bm\"],\n props: {\n numArgs: 1\n },\n handler: (_ref2, args) => {\n var {\n parser\n } = _ref2;\n var body = args[0];\n var isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \\boldsymbol uses \\binrel spacing to inherit the\n // argument's bin|rel|ord status\n\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass: binrelClass(body),\n body: [{\n type: \"font\",\n mode: parser.mode,\n font: \"boldsymbol\",\n body\n }],\n isCharacterBox: isCharacterBox\n };\n }\n}); // Old font changing functions\n\ndefineFunction({\n type: \"font\",\n names: [\"\\\\rm\", \"\\\\sf\", \"\\\\tt\", \"\\\\bf\", \"\\\\it\", \"\\\\cal\"],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n handler: (_ref3, args) => {\n var {\n parser,\n funcName,\n breakOnTokenText\n } = _ref3;\n var {\n mode\n } = parser;\n var body = parser.parseExpression(true, breakOnTokenText);\n var style = \"math\" + funcName.slice(1);\n return {\n type: \"font\",\n mode: mode,\n font: style,\n body: {\n type: \"ordgroup\",\n mode: parser.mode,\n body\n }\n };\n },\n htmlBuilder: htmlBuilder$5,\n mathmlBuilder: mathmlBuilder$4\n});\n\nvar adjustStyle = (size, originalStyle) => {\n // Figure out what style this fraction should be in based on the\n // function used\n var style = originalStyle;\n\n if (size === \"display\") {\n // Get display style as a default.\n // If incoming style is sub/sup, use style.text() to get correct size.\n style = style.id >= Style$1.SCRIPT.id ? style.text() : Style$1.DISPLAY;\n } else if (size === \"text\" && style.size === Style$1.DISPLAY.size) {\n // We're in a \\tfrac but incoming style is displaystyle, so:\n style = Style$1.TEXT;\n } else if (size === \"script\") {\n style = Style$1.SCRIPT;\n } else if (size === \"scriptscript\") {\n style = Style$1.SCRIPTSCRIPT;\n }\n\n return style;\n};\n\nvar htmlBuilder$4 = (group, options) => {\n // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).\n var style = adjustStyle(group.size, options.style);\n var nstyle = style.fracNum();\n var dstyle = style.fracDen();\n var newOptions;\n newOptions = options.havingStyle(nstyle);\n var numerm = buildGroup$1(group.numer, newOptions, options);\n\n if (group.continued) {\n // \\cfrac inserts a \\strut into the numerator.\n // Get \\strut dimensions from TeXbook page 353.\n var hStrut = 8.5 / options.fontMetrics().ptPerEm;\n var dStrut = 3.5 / options.fontMetrics().ptPerEm;\n numerm.height = numerm.height < hStrut ? hStrut : numerm.height;\n numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth;\n }\n\n newOptions = options.havingStyle(dstyle);\n var denomm = buildGroup$1(group.denom, newOptions, options);\n var rule;\n var ruleWidth;\n var ruleSpacing;\n\n if (group.hasBarLine) {\n if (group.barSize) {\n ruleWidth = calculateSize(group.barSize, options);\n rule = buildCommon.makeLineSpan(\"frac-line\", options, ruleWidth);\n } else {\n rule = buildCommon.makeLineSpan(\"frac-line\", options);\n }\n\n ruleWidth = rule.height;\n ruleSpacing = rule.height;\n } else {\n rule = null;\n ruleWidth = 0;\n ruleSpacing = options.fontMetrics().defaultRuleThickness;\n } // Rule 15b\n\n\n var numShift;\n var clearance;\n var denomShift;\n\n if (style.size === Style$1.DISPLAY.size || group.size === \"display\") {\n numShift = options.fontMetrics().num1;\n\n if (ruleWidth > 0) {\n clearance = 3 * ruleSpacing;\n } else {\n clearance = 7 * ruleSpacing;\n }\n\n denomShift = options.fontMetrics().denom1;\n } else {\n if (ruleWidth > 0) {\n numShift = options.fontMetrics().num2;\n clearance = ruleSpacing;\n } else {\n numShift = options.fontMetrics().num3;\n clearance = 3 * ruleSpacing;\n }\n\n denomShift = options.fontMetrics().denom2;\n }\n\n var frac;\n\n if (!rule) {\n // Rule 15c\n var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift);\n\n if (candidateClearance < clearance) {\n numShift += 0.5 * (clearance - candidateClearance);\n denomShift += 0.5 * (clearance - candidateClearance);\n }\n\n frac = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [{\n type: \"elem\",\n elem: denomm,\n shift: denomShift\n }, {\n type: \"elem\",\n elem: numerm,\n shift: -numShift\n }]\n }, options);\n } else {\n // Rule 15d\n var axisHeight = options.fontMetrics().axisHeight;\n\n if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) {\n numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth));\n }\n\n if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) {\n denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift));\n }\n\n var midShift = -(axisHeight - 0.5 * ruleWidth);\n frac = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [{\n type: \"elem\",\n elem: denomm,\n shift: denomShift\n }, {\n type: \"elem\",\n elem: rule,\n shift: midShift\n }, {\n type: \"elem\",\n elem: numerm,\n shift: -numShift\n }]\n }, options);\n } // Since we manually change the style sometimes (with \\dfrac or \\tfrac),\n // account for the possible size change here.\n\n\n newOptions = options.havingStyle(style);\n frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier;\n frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e\n\n var delimSize;\n\n if (style.size === Style$1.DISPLAY.size) {\n delimSize = options.fontMetrics().delim1;\n } else if (style.size === Style$1.SCRIPTSCRIPT.size) {\n delimSize = options.havingStyle(Style$1.SCRIPT).fontMetrics().delim2;\n } else {\n delimSize = options.fontMetrics().delim2;\n }\n\n var leftDelim;\n var rightDelim;\n\n if (group.leftDelim == null) {\n leftDelim = makeNullDelimiter(options, [\"mopen\"]);\n } else {\n leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, [\"mopen\"]);\n }\n\n if (group.continued) {\n rightDelim = buildCommon.makeSpan([]); // zero width for \\cfrac\n } else if (group.rightDelim == null) {\n rightDelim = makeNullDelimiter(options, [\"mclose\"]);\n } else {\n rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, [\"mclose\"]);\n }\n\n return buildCommon.makeSpan([\"mord\"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan([\"mfrac\"], [frac]), rightDelim], options);\n};\n\nvar mathmlBuilder$3 = (group, options) => {\n var node = new mathMLTree.MathNode(\"mfrac\", [buildGroup(group.numer, options), buildGroup(group.denom, options)]);\n\n if (!group.hasBarLine) {\n node.setAttribute(\"linethickness\", \"0px\");\n } else if (group.barSize) {\n var ruleWidth = calculateSize(group.barSize, options);\n node.setAttribute(\"linethickness\", makeEm(ruleWidth));\n }\n\n var style = adjustStyle(group.size, options.style);\n\n if (style.size !== options.style.size) {\n node = new mathMLTree.MathNode(\"mstyle\", [node]);\n var isDisplay = style.size === Style$1.DISPLAY.size ? \"true\" : \"false\";\n node.setAttribute(\"displaystyle\", isDisplay);\n node.setAttribute(\"scriptlevel\", \"0\");\n }\n\n if (group.leftDelim != null || group.rightDelim != null) {\n var withDelims = [];\n\n if (group.leftDelim != null) {\n var leftOp = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(group.leftDelim.replace(\"\\\\\", \"\"))]);\n leftOp.setAttribute(\"fence\", \"true\");\n withDelims.push(leftOp);\n }\n\n withDelims.push(node);\n\n if (group.rightDelim != null) {\n var rightOp = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(group.rightDelim.replace(\"\\\\\", \"\"))]);\n rightOp.setAttribute(\"fence\", \"true\");\n withDelims.push(rightOp);\n }\n\n return makeRow(withDelims);\n }\n\n return node;\n};\n\ndefineFunction({\n type: \"genfrac\",\n names: [\"\\\\dfrac\", \"\\\\frac\", \"\\\\tfrac\", \"\\\\dbinom\", \"\\\\binom\", \"\\\\tbinom\", \"\\\\\\\\atopfrac\", // can’t be entered directly\n \"\\\\\\\\bracefrac\", \"\\\\\\\\brackfrac\" // ditto\n ],\n props: {\n numArgs: 2,\n allowedInArgument: true\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var numer = args[0];\n var denom = args[1];\n var hasBarLine;\n var leftDelim = null;\n var rightDelim = null;\n var size = \"auto\";\n\n switch (funcName) {\n case \"\\\\dfrac\":\n case \"\\\\frac\":\n case \"\\\\tfrac\":\n hasBarLine = true;\n break;\n\n case \"\\\\\\\\atopfrac\":\n hasBarLine = false;\n break;\n\n case \"\\\\dbinom\":\n case \"\\\\binom\":\n case \"\\\\tbinom\":\n hasBarLine = false;\n leftDelim = \"(\";\n rightDelim = \")\";\n break;\n\n case \"\\\\\\\\bracefrac\":\n hasBarLine = false;\n leftDelim = \"\\\\{\";\n rightDelim = \"\\\\}\";\n break;\n\n case \"\\\\\\\\brackfrac\":\n hasBarLine = false;\n leftDelim = \"[\";\n rightDelim = \"]\";\n break;\n\n default:\n throw new Error(\"Unrecognized genfrac command\");\n }\n\n switch (funcName) {\n case \"\\\\dfrac\":\n case \"\\\\dbinom\":\n size = \"display\";\n break;\n\n case \"\\\\tfrac\":\n case \"\\\\tbinom\":\n size = \"text\";\n break;\n }\n\n return {\n type: \"genfrac\",\n mode: parser.mode,\n continued: false,\n numer,\n denom,\n hasBarLine,\n leftDelim,\n rightDelim,\n size,\n barSize: null\n };\n },\n htmlBuilder: htmlBuilder$4,\n mathmlBuilder: mathmlBuilder$3\n});\ndefineFunction({\n type: \"genfrac\",\n names: [\"\\\\cfrac\"],\n props: {\n numArgs: 2\n },\n handler: (_ref2, args) => {\n var {\n parser,\n funcName\n } = _ref2;\n var numer = args[0];\n var denom = args[1];\n return {\n type: \"genfrac\",\n mode: parser.mode,\n continued: true,\n numer,\n denom,\n hasBarLine: true,\n leftDelim: null,\n rightDelim: null,\n size: \"display\",\n barSize: null\n };\n }\n}); // Infix generalized fractions -- these are not rendered directly, but replaced\n// immediately by one of the variants above.\n\ndefineFunction({\n type: \"infix\",\n names: [\"\\\\over\", \"\\\\choose\", \"\\\\atop\", \"\\\\brace\", \"\\\\brack\"],\n props: {\n numArgs: 0,\n infix: true\n },\n\n handler(_ref3) {\n var {\n parser,\n funcName,\n token\n } = _ref3;\n var replaceWith;\n\n switch (funcName) {\n case \"\\\\over\":\n replaceWith = \"\\\\frac\";\n break;\n\n case \"\\\\choose\":\n replaceWith = \"\\\\binom\";\n break;\n\n case \"\\\\atop\":\n replaceWith = \"\\\\\\\\atopfrac\";\n break;\n\n case \"\\\\brace\":\n replaceWith = \"\\\\\\\\bracefrac\";\n break;\n\n case \"\\\\brack\":\n replaceWith = \"\\\\\\\\brackfrac\";\n break;\n\n default:\n throw new Error(\"Unrecognized infix genfrac command\");\n }\n\n return {\n type: \"infix\",\n mode: parser.mode,\n replaceWith,\n token\n };\n }\n\n});\nvar stylArray = [\"display\", \"text\", \"script\", \"scriptscript\"];\n\nvar delimFromValue = function delimFromValue(delimString) {\n var delim = null;\n\n if (delimString.length > 0) {\n delim = delimString;\n delim = delim === \".\" ? null : delim;\n }\n\n return delim;\n};\n\ndefineFunction({\n type: \"genfrac\",\n names: [\"\\\\genfrac\"],\n props: {\n numArgs: 6,\n allowedInArgument: true,\n argTypes: [\"math\", \"math\", \"size\", \"text\", \"math\", \"math\"]\n },\n\n handler(_ref4, args) {\n var {\n parser\n } = _ref4;\n var numer = args[4];\n var denom = args[5]; // Look into the parse nodes to get the desired delimiters.\n\n var leftNode = normalizeArgument(args[0]);\n var leftDelim = leftNode.type === \"atom\" && leftNode.family === \"open\" ? delimFromValue(leftNode.text) : null;\n var rightNode = normalizeArgument(args[1]);\n var rightDelim = rightNode.type === \"atom\" && rightNode.family === \"close\" ? delimFromValue(rightNode.text) : null;\n var barNode = assertNodeType(args[2], \"size\");\n var hasBarLine;\n var barSize = null;\n\n if (barNode.isBlank) {\n // \\genfrac acts differently than \\above.\n // \\genfrac treats an empty size group as a signal to use a\n // standard bar size. \\above would see size = 0 and omit the bar.\n hasBarLine = true;\n } else {\n barSize = barNode.value;\n hasBarLine = barSize.number > 0;\n } // Find out if we want displaystyle, textstyle, etc.\n\n\n var size = \"auto\";\n var styl = args[3];\n\n if (styl.type === \"ordgroup\") {\n if (styl.body.length > 0) {\n var textOrd = assertNodeType(styl.body[0], \"textord\");\n size = stylArray[Number(textOrd.text)];\n }\n } else {\n styl = assertNodeType(styl, \"textord\");\n size = stylArray[Number(styl.text)];\n }\n\n return {\n type: \"genfrac\",\n mode: parser.mode,\n numer,\n denom,\n continued: false,\n hasBarLine,\n barSize,\n leftDelim,\n rightDelim,\n size\n };\n },\n\n htmlBuilder: htmlBuilder$4,\n mathmlBuilder: mathmlBuilder$3\n}); // \\above is an infix fraction that also defines a fraction bar size.\n\ndefineFunction({\n type: \"infix\",\n names: [\"\\\\above\"],\n props: {\n numArgs: 1,\n argTypes: [\"size\"],\n infix: true\n },\n\n handler(_ref5, args) {\n var {\n parser,\n funcName,\n token\n } = _ref5;\n return {\n type: \"infix\",\n mode: parser.mode,\n replaceWith: \"\\\\\\\\abovefrac\",\n size: assertNodeType(args[0], \"size\").value,\n token\n };\n }\n\n});\ndefineFunction({\n type: \"genfrac\",\n names: [\"\\\\\\\\abovefrac\"],\n props: {\n numArgs: 3,\n argTypes: [\"math\", \"size\", \"math\"]\n },\n handler: (_ref6, args) => {\n var {\n parser,\n funcName\n } = _ref6;\n var numer = args[0];\n var barSize = assert(assertNodeType(args[1], \"infix\").size);\n var denom = args[2];\n var hasBarLine = barSize.number > 0;\n return {\n type: \"genfrac\",\n mode: parser.mode,\n numer,\n denom,\n continued: false,\n hasBarLine,\n barSize,\n leftDelim: null,\n rightDelim: null,\n size: \"auto\"\n };\n },\n htmlBuilder: htmlBuilder$4,\n mathmlBuilder: mathmlBuilder$3\n});\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only \"horizBrace\", but\n// also \"supsub\" since an over/underbrace can affect super/subscripting.\nvar htmlBuilder$3 = (grp, options) => {\n var style = options.style; // Pull out the `ParseNode<\"horizBrace\">` if `grp` is a \"supsub\" node.\n\n var supSubGroup;\n var group;\n\n if (grp.type === \"supsub\") {\n // Ref: LaTeX source2e: }}}}\\limits}\n // i.e. LaTeX treats the brace similar to an op and passes it\n // with \\limits, so we need to assign supsub style.\n supSubGroup = grp.sup ? buildGroup$1(grp.sup, options.havingStyle(style.sup()), options) : buildGroup$1(grp.sub, options.havingStyle(style.sub()), options);\n group = assertNodeType(grp.base, \"horizBrace\");\n } else {\n group = assertNodeType(grp, \"horizBrace\");\n } // Build the base group\n\n\n var body = buildGroup$1(group.base, options.havingBaseStyle(Style$1.DISPLAY)); // Create the stretchy element\n\n var braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns ┏━━━━━━━━┓\n // This first vlist contains the content and the brace: equation\n\n var vlist;\n\n if (group.isOver) {\n vlist = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: body\n }, {\n type: \"kern\",\n size: 0.1\n }, {\n type: \"elem\",\n elem: braceBody\n }]\n }, options); // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n\n vlist.children[0].children[0].children[1].classes.push(\"svg-align\");\n } else {\n vlist = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: body.depth + 0.1 + braceBody.height,\n children: [{\n type: \"elem\",\n elem: braceBody\n }, {\n type: \"kern\",\n size: 0.1\n }, {\n type: \"elem\",\n elem: body\n }]\n }, options); // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n\n vlist.children[0].children[0].children[0].classes.push(\"svg-align\");\n }\n\n if (supSubGroup) {\n // To write the supsub, wrap the first vlist in another vlist:\n // They can't all go in the same vlist, because the note might be\n // wider than the equation. We want the equation to control the\n // brace width.\n // note long note long note\n // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓\n // equation eqn eqn\n var vSpan = buildCommon.makeSpan([\"mord\", group.isOver ? \"mover\" : \"munder\"], [vlist], options);\n\n if (group.isOver) {\n vlist = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: vSpan\n }, {\n type: \"kern\",\n size: 0.2\n }, {\n type: \"elem\",\n elem: supSubGroup\n }]\n }, options);\n } else {\n vlist = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth,\n children: [{\n type: \"elem\",\n elem: supSubGroup\n }, {\n type: \"kern\",\n size: 0.2\n }, {\n type: \"elem\",\n elem: vSpan\n }]\n }, options);\n }\n }\n\n return buildCommon.makeSpan([\"mord\", group.isOver ? \"mover\" : \"munder\"], [vlist], options);\n};\n\nvar mathmlBuilder$2 = (group, options) => {\n var accentNode = stretchy.mathMLnode(group.label);\n return new mathMLTree.MathNode(group.isOver ? \"mover\" : \"munder\", [buildGroup(group.base, options), accentNode]);\n}; // Horizontal stretchy braces\n\n\ndefineFunction({\n type: \"horizBrace\",\n names: [\"\\\\overbrace\", \"\\\\underbrace\"],\n props: {\n numArgs: 1\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n return {\n type: \"horizBrace\",\n mode: parser.mode,\n label: funcName,\n isOver: /^\\\\over/.test(funcName),\n base: args[0]\n };\n },\n\n htmlBuilder: htmlBuilder$3,\n mathmlBuilder: mathmlBuilder$2\n});\n\ndefineFunction({\n type: \"href\",\n names: [\"\\\\href\"],\n props: {\n numArgs: 2,\n argTypes: [\"url\", \"original\"],\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n parser\n } = _ref;\n var body = args[1];\n var href = assertNodeType(args[0], \"url\").url;\n\n if (!parser.settings.isTrusted({\n command: \"\\\\href\",\n url: href\n })) {\n return parser.formatUnsupportedCmd(\"\\\\href\");\n }\n\n return {\n type: \"href\",\n mode: parser.mode,\n href,\n body: ordargument(body)\n };\n },\n htmlBuilder: (group, options) => {\n var elements = buildExpression$1(group.body, options, false);\n return buildCommon.makeAnchor(group.href, [], elements, options);\n },\n mathmlBuilder: (group, options) => {\n var math = buildExpressionRow(group.body, options);\n\n if (!(math instanceof MathNode)) {\n math = new MathNode(\"mrow\", [math]);\n }\n\n math.setAttribute(\"href\", group.href);\n return math;\n }\n});\ndefineFunction({\n type: \"href\",\n names: [\"\\\\url\"],\n props: {\n numArgs: 1,\n argTypes: [\"url\"],\n allowedInText: true\n },\n handler: (_ref2, args) => {\n var {\n parser\n } = _ref2;\n var href = assertNodeType(args[0], \"url\").url;\n\n if (!parser.settings.isTrusted({\n command: \"\\\\url\",\n url: href\n })) {\n return parser.formatUnsupportedCmd(\"\\\\url\");\n }\n\n var chars = [];\n\n for (var i = 0; i < href.length; i++) {\n var c = href[i];\n\n if (c === \"~\") {\n c = \"\\\\textasciitilde\";\n }\n\n chars.push({\n type: \"textord\",\n mode: \"text\",\n text: c\n });\n }\n\n var body = {\n type: \"text\",\n mode: parser.mode,\n font: \"\\\\texttt\",\n body: chars\n };\n return {\n type: \"href\",\n mode: parser.mode,\n href,\n body: ordargument(body)\n };\n }\n});\n\n// In LaTeX, \\vcenter can act only on a box, as in\n// \\vcenter{\\hbox{$\\frac{a+b}{\\dfrac{c}{d}}$}}\n// This function by itself doesn't do anything but prevent a soft line break.\n\ndefineFunction({\n type: \"hbox\",\n names: [\"\\\\hbox\"],\n props: {\n numArgs: 1,\n argTypes: [\"text\"],\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n return {\n type: \"hbox\",\n mode: parser.mode,\n body: ordargument(args[0])\n };\n },\n\n htmlBuilder(group, options) {\n var elements = buildExpression$1(group.body, options, false);\n return buildCommon.makeFragment(elements);\n },\n\n mathmlBuilder(group, options) {\n return new mathMLTree.MathNode(\"mrow\", buildExpression(group.body, options));\n }\n\n});\n\ndefineFunction({\n type: \"html\",\n names: [\"\\\\htmlClass\", \"\\\\htmlId\", \"\\\\htmlStyle\", \"\\\\htmlData\"],\n props: {\n numArgs: 2,\n argTypes: [\"raw\", \"original\"],\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName,\n token\n } = _ref;\n var value = assertNodeType(args[0], \"raw\").string;\n var body = args[1];\n\n if (parser.settings.strict) {\n parser.settings.reportNonstrict(\"htmlExtension\", \"HTML extension is disabled on strict mode\");\n }\n\n var trustContext;\n var attributes = {};\n\n switch (funcName) {\n case \"\\\\htmlClass\":\n attributes.class = value;\n trustContext = {\n command: \"\\\\htmlClass\",\n class: value\n };\n break;\n\n case \"\\\\htmlId\":\n attributes.id = value;\n trustContext = {\n command: \"\\\\htmlId\",\n id: value\n };\n break;\n\n case \"\\\\htmlStyle\":\n attributes.style = value;\n trustContext = {\n command: \"\\\\htmlStyle\",\n style: value\n };\n break;\n\n case \"\\\\htmlData\":\n {\n var data = value.split(\",\");\n\n for (var i = 0; i < data.length; i++) {\n var item = data[i];\n var firstEquals = item.indexOf(\"=\");\n\n if (firstEquals < 0) {\n throw new ParseError(\"\\\\htmlData key/value '\" + item + \"'\" + \" missing equals sign\");\n }\n\n var key = item.slice(0, firstEquals);\n\n var _value = item.slice(firstEquals + 1);\n\n attributes[\"data-\" + key.trim()] = _value;\n }\n\n trustContext = {\n command: \"\\\\htmlData\",\n attributes\n };\n break;\n }\n\n default:\n throw new Error(\"Unrecognized html command\");\n }\n\n if (!parser.settings.isTrusted(trustContext)) {\n return parser.formatUnsupportedCmd(funcName);\n }\n\n return {\n type: \"html\",\n mode: parser.mode,\n attributes,\n body: ordargument(body)\n };\n },\n htmlBuilder: (group, options) => {\n var elements = buildExpression$1(group.body, options, false);\n var classes = [\"enclosing\"];\n\n if (group.attributes.class) {\n classes.push(...group.attributes.class.trim().split(/\\s+/));\n }\n\n var span = buildCommon.makeSpan(classes, elements, options);\n\n for (var attr in group.attributes) {\n if (attr !== \"class\" && group.attributes.hasOwnProperty(attr)) {\n span.setAttribute(attr, group.attributes[attr]);\n }\n }\n\n return span;\n },\n mathmlBuilder: (group, options) => {\n return buildExpressionRow(group.body, options);\n }\n});\n\ndefineFunction({\n type: \"htmlmathml\",\n names: [\"\\\\html@mathml\"],\n props: {\n numArgs: 2,\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n parser\n } = _ref;\n return {\n type: \"htmlmathml\",\n mode: parser.mode,\n html: ordargument(args[0]),\n mathml: ordargument(args[1])\n };\n },\n htmlBuilder: (group, options) => {\n var elements = buildExpression$1(group.html, options, false);\n return buildCommon.makeFragment(elements);\n },\n mathmlBuilder: (group, options) => {\n return buildExpressionRow(group.mathml, options);\n }\n});\n\nvar sizeData = function sizeData(str) {\n if (/^[-+]? *(\\d+(\\.\\d*)?|\\.\\d+)$/.test(str)) {\n // str is a number with no unit specified.\n // default unit is bp, per graphix package.\n return {\n number: +str,\n unit: \"bp\"\n };\n } else {\n var match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(str);\n\n if (!match) {\n throw new ParseError(\"Invalid size: '\" + str + \"' in \\\\includegraphics\");\n }\n\n var data = {\n number: +(match[1] + match[2]),\n // sign + magnitude, cast to number\n unit: match[3]\n };\n\n if (!validUnit(data)) {\n throw new ParseError(\"Invalid unit: '\" + data.unit + \"' in \\\\includegraphics.\");\n }\n\n return data;\n }\n};\n\ndefineFunction({\n type: \"includegraphics\",\n names: [\"\\\\includegraphics\"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1,\n argTypes: [\"raw\", \"url\"],\n allowedInText: false\n },\n handler: (_ref, args, optArgs) => {\n var {\n parser\n } = _ref;\n var width = {\n number: 0,\n unit: \"em\"\n };\n var height = {\n number: 0.9,\n unit: \"em\"\n }; // sorta character sized.\n\n var totalheight = {\n number: 0,\n unit: \"em\"\n };\n var alt = \"\";\n\n if (optArgs[0]) {\n var attributeStr = assertNodeType(optArgs[0], \"raw\").string; // Parser.js does not parse key/value pairs. We get a string.\n\n var attributes = attributeStr.split(\",\");\n\n for (var i = 0; i < attributes.length; i++) {\n var keyVal = attributes[i].split(\"=\");\n\n if (keyVal.length === 2) {\n var str = keyVal[1].trim();\n\n switch (keyVal[0].trim()) {\n case \"alt\":\n alt = str;\n break;\n\n case \"width\":\n width = sizeData(str);\n break;\n\n case \"height\":\n height = sizeData(str);\n break;\n\n case \"totalheight\":\n totalheight = sizeData(str);\n break;\n\n default:\n throw new ParseError(\"Invalid key: '\" + keyVal[0] + \"' in \\\\includegraphics.\");\n }\n }\n }\n }\n\n var src = assertNodeType(args[0], \"url\").url;\n\n if (alt === \"\") {\n // No alt given. Use the file name. Strip away the path.\n alt = src;\n alt = alt.replace(/^.*[\\\\/]/, '');\n alt = alt.substring(0, alt.lastIndexOf('.'));\n }\n\n if (!parser.settings.isTrusted({\n command: \"\\\\includegraphics\",\n url: src\n })) {\n return parser.formatUnsupportedCmd(\"\\\\includegraphics\");\n }\n\n return {\n type: \"includegraphics\",\n mode: parser.mode,\n alt: alt,\n width: width,\n height: height,\n totalheight: totalheight,\n src: src\n };\n },\n htmlBuilder: (group, options) => {\n var height = calculateSize(group.height, options);\n var depth = 0;\n\n if (group.totalheight.number > 0) {\n depth = calculateSize(group.totalheight, options) - height;\n }\n\n var width = 0;\n\n if (group.width.number > 0) {\n width = calculateSize(group.width, options);\n }\n\n var style = {\n height: makeEm(height + depth)\n };\n\n if (width > 0) {\n style.width = makeEm(width);\n }\n\n if (depth > 0) {\n style.verticalAlign = makeEm(-depth);\n }\n\n var node = new Img(group.src, group.alt, style);\n node.height = height;\n node.depth = depth;\n return node;\n },\n mathmlBuilder: (group, options) => {\n var node = new mathMLTree.MathNode(\"mglyph\", []);\n node.setAttribute(\"alt\", group.alt);\n var height = calculateSize(group.height, options);\n var depth = 0;\n\n if (group.totalheight.number > 0) {\n depth = calculateSize(group.totalheight, options) - height;\n node.setAttribute(\"valign\", makeEm(-depth));\n }\n\n node.setAttribute(\"height\", makeEm(height + depth));\n\n if (group.width.number > 0) {\n var width = calculateSize(group.width, options);\n node.setAttribute(\"width\", makeEm(width));\n }\n\n node.setAttribute(\"src\", group.src);\n return node;\n }\n});\n\n// Horizontal spacing commands\n\ndefineFunction({\n type: \"kern\",\n names: [\"\\\\kern\", \"\\\\mkern\", \"\\\\hskip\", \"\\\\mskip\"],\n props: {\n numArgs: 1,\n argTypes: [\"size\"],\n primitive: true,\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n var size = assertNodeType(args[0], \"size\");\n\n if (parser.settings.strict) {\n var mathFunction = funcName[1] === 'm'; // \\mkern, \\mskip\n\n var muUnit = size.value.unit === 'mu';\n\n if (mathFunction) {\n if (!muUnit) {\n parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" supports only mu units, \" + (\"not \" + size.value.unit + \" units\"));\n }\n\n if (parser.mode !== \"math\") {\n parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" works only in math mode\");\n }\n } else {\n // !mathFunction\n if (muUnit) {\n parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" doesn't support mu units\");\n }\n }\n }\n\n return {\n type: \"kern\",\n mode: parser.mode,\n dimension: size.value\n };\n },\n\n htmlBuilder(group, options) {\n return buildCommon.makeGlue(group.dimension, options);\n },\n\n mathmlBuilder(group, options) {\n var dimension = calculateSize(group.dimension, options);\n return new mathMLTree.SpaceNode(dimension);\n }\n\n});\n\n// Horizontal overlap functions\ndefineFunction({\n type: \"lap\",\n names: [\"\\\\mathllap\", \"\\\\mathrlap\", \"\\\\mathclap\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var body = args[0];\n return {\n type: \"lap\",\n mode: parser.mode,\n alignment: funcName.slice(5),\n body\n };\n },\n htmlBuilder: (group, options) => {\n // mathllap, mathrlap, mathclap\n var inner;\n\n if (group.alignment === \"clap\") {\n // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/\n inner = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span\n\n inner = buildCommon.makeSpan([\"inner\"], [inner], options);\n } else {\n inner = buildCommon.makeSpan([\"inner\"], [buildGroup$1(group.body, options)]);\n }\n\n var fix = buildCommon.makeSpan([\"fix\"], []);\n var node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the\n // two items involved in the lap.\n // Next, use a strut to set the height of the HTML bounding box.\n // Otherwise, a tall argument may be misplaced.\n // This code resolved issue #1153\n\n var strut = buildCommon.makeSpan([\"strut\"]);\n strut.style.height = makeEm(node.height + node.depth);\n\n if (node.depth) {\n strut.style.verticalAlign = makeEm(-node.depth);\n }\n\n node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall.\n // This code resolves issue #1234\n\n node = buildCommon.makeSpan([\"thinbox\"], [node], options);\n return buildCommon.makeSpan([\"mord\", \"vbox\"], [node], options);\n },\n mathmlBuilder: (group, options) => {\n // mathllap, mathrlap, mathclap\n var node = new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n\n if (group.alignment !== \"rlap\") {\n var offset = group.alignment === \"llap\" ? \"-1\" : \"-0.5\";\n node.setAttribute(\"lspace\", offset + \"width\");\n }\n\n node.setAttribute(\"width\", \"0px\");\n return node;\n }\n});\n\ndefineFunction({\n type: \"styling\",\n names: [\"\\\\(\", \"$\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: false\n },\n\n handler(_ref, args) {\n var {\n funcName,\n parser\n } = _ref;\n var outerMode = parser.mode;\n parser.switchMode(\"math\");\n var close = funcName === \"\\\\(\" ? \"\\\\)\" : \"$\";\n var body = parser.parseExpression(false, close);\n parser.expect(close);\n parser.switchMode(outerMode);\n return {\n type: \"styling\",\n mode: parser.mode,\n style: \"text\",\n body\n };\n }\n\n}); // Check for extra closing math delimiters\n\ndefineFunction({\n type: \"text\",\n // Doesn't matter what this is.\n names: [\"\\\\)\", \"\\\\]\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: false\n },\n\n handler(context, args) {\n throw new ParseError(\"Mismatched \" + context.funcName);\n }\n\n});\n\nvar chooseMathStyle = (group, options) => {\n switch (options.style.size) {\n case Style$1.DISPLAY.size:\n return group.display;\n\n case Style$1.TEXT.size:\n return group.text;\n\n case Style$1.SCRIPT.size:\n return group.script;\n\n case Style$1.SCRIPTSCRIPT.size:\n return group.scriptscript;\n\n default:\n return group.text;\n }\n};\n\ndefineFunction({\n type: \"mathchoice\",\n names: [\"\\\\mathchoice\"],\n props: {\n numArgs: 4,\n primitive: true\n },\n handler: (_ref, args) => {\n var {\n parser\n } = _ref;\n return {\n type: \"mathchoice\",\n mode: parser.mode,\n display: ordargument(args[0]),\n text: ordargument(args[1]),\n script: ordargument(args[2]),\n scriptscript: ordargument(args[3])\n };\n },\n htmlBuilder: (group, options) => {\n var body = chooseMathStyle(group, options);\n var elements = buildExpression$1(body, options, false);\n return buildCommon.makeFragment(elements);\n },\n mathmlBuilder: (group, options) => {\n var body = chooseMathStyle(group, options);\n return buildExpressionRow(body, options);\n }\n});\n\nvar assembleSupSub = (base, supGroup, subGroup, options, style, slant, baseShift) => {\n base = buildCommon.makeSpan([], [base]);\n var subIsSingleCharacter = subGroup && utils.isCharacterBox(subGroup);\n var sub;\n var sup; // We manually have to handle the superscripts and subscripts. This,\n // aside from the kern calculations, is copied from supsub.\n\n if (supGroup) {\n var elem = buildGroup$1(supGroup, options.havingStyle(style.sup()), options);\n sup = {\n elem,\n kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth)\n };\n }\n\n if (subGroup) {\n var _elem = buildGroup$1(subGroup, options.havingStyle(style.sub()), options);\n\n sub = {\n elem: _elem,\n kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height)\n };\n } // Build the final group as a vlist of the possible subscript, base,\n // and possible superscript.\n\n\n var finalGroup;\n\n if (sup && sub) {\n var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift;\n finalGroup = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: bottom,\n children: [{\n type: \"kern\",\n size: options.fontMetrics().bigOpSpacing5\n }, {\n type: \"elem\",\n elem: sub.elem,\n marginLeft: makeEm(-slant)\n }, {\n type: \"kern\",\n size: sub.kern\n }, {\n type: \"elem\",\n elem: base\n }, {\n type: \"kern\",\n size: sup.kern\n }, {\n type: \"elem\",\n elem: sup.elem,\n marginLeft: makeEm(slant)\n }, {\n type: \"kern\",\n size: options.fontMetrics().bigOpSpacing5\n }]\n }, options);\n } else if (sub) {\n var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note\n // that we are supposed to shift the limits by 1/2 of the slant,\n // but since we are centering the limits adding a full slant of\n // margin will shift by 1/2 that.\n\n finalGroup = buildCommon.makeVList({\n positionType: \"top\",\n positionData: top,\n children: [{\n type: \"kern\",\n size: options.fontMetrics().bigOpSpacing5\n }, {\n type: \"elem\",\n elem: sub.elem,\n marginLeft: makeEm(-slant)\n }, {\n type: \"kern\",\n size: sub.kern\n }, {\n type: \"elem\",\n elem: base\n }]\n }, options);\n } else if (sup) {\n var _bottom = base.depth + baseShift;\n\n finalGroup = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: _bottom,\n children: [{\n type: \"elem\",\n elem: base\n }, {\n type: \"kern\",\n size: sup.kern\n }, {\n type: \"elem\",\n elem: sup.elem,\n marginLeft: makeEm(slant)\n }, {\n type: \"kern\",\n size: options.fontMetrics().bigOpSpacing5\n }]\n }, options);\n } else {\n // This case probably shouldn't occur (this would mean the\n // supsub was sending us a group with no superscript or\n // subscript) but be safe.\n return base;\n }\n\n var parts = [finalGroup];\n\n if (sub && slant !== 0 && !subIsSingleCharacter) {\n // A negative margin-left was applied to the lower limit.\n // Avoid an overlap by placing a spacer on the left on the group.\n var spacer = buildCommon.makeSpan([\"mspace\"], [], options);\n spacer.style.marginRight = makeEm(slant);\n parts.unshift(spacer);\n }\n\n return buildCommon.makeSpan([\"mop\", \"op-limits\"], parts, options);\n};\n\n// Limits, symbols\n// Most operators have a large successor symbol, but these don't.\nvar noSuccessor = [\"\\\\smallint\"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only \"op\", but also\n// \"supsub\" since some of them (like \\int) can affect super/subscripting.\n\nvar htmlBuilder$2 = (grp, options) => {\n // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n var supGroup;\n var subGroup;\n var hasLimits = false;\n var group;\n\n if (grp.type === \"supsub\") {\n // If we have limits, supsub will pass us its group to handle. Pull\n // out the superscript and subscript and set the group to the op in\n // its base.\n supGroup = grp.sup;\n subGroup = grp.sub;\n group = assertNodeType(grp.base, \"op\");\n hasLimits = true;\n } else {\n group = assertNodeType(grp, \"op\");\n }\n\n var style = options.style;\n var large = false;\n\n if (style.size === Style$1.DISPLAY.size && group.symbol && !noSuccessor.includes(group.name)) {\n // Most symbol operators get larger in displaystyle (rule 13)\n large = true;\n }\n\n var base;\n\n if (group.symbol) {\n // If this is a symbol, create the symbol.\n var fontName = large ? \"Size2-Regular\" : \"Size1-Regular\";\n var stash = \"\";\n\n if (group.name === \"\\\\oiint\" || group.name === \"\\\\oiiint\") {\n // No font glyphs yet, so use a glyph w/o the oval.\n // TODO: When font glyphs are available, delete this code.\n stash = group.name.slice(1);\n group.name = stash === \"oiint\" ? \"\\\\iint\" : \"\\\\iiint\";\n }\n\n base = buildCommon.makeSymbol(group.name, fontName, \"math\", options, [\"mop\", \"op-symbol\", large ? \"large-op\" : \"small-op\"]);\n\n if (stash.length > 0) {\n // We're in \\oiint or \\oiiint. Overlay the oval.\n // TODO: When font glyphs are available, delete this code.\n var italic = base.italic;\n var oval = buildCommon.staticSvg(stash + \"Size\" + (large ? \"2\" : \"1\"), options);\n base = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [{\n type: \"elem\",\n elem: base,\n shift: 0\n }, {\n type: \"elem\",\n elem: oval,\n shift: large ? 0.08 : 0\n }]\n }, options);\n group.name = \"\\\\\" + stash;\n base.classes.unshift(\"mop\"); // $FlowFixMe\n\n base.italic = italic;\n }\n } else if (group.body) {\n // If this is a list, compose that list.\n var inner = buildExpression$1(group.body, options, true);\n\n if (inner.length === 1 && inner[0] instanceof SymbolNode) {\n base = inner[0];\n base.classes[0] = \"mop\"; // replace old mclass\n } else {\n base = buildCommon.makeSpan([\"mop\"], inner, options);\n }\n } else {\n // Otherwise, this is a text operator. Build the text from the\n // operator's name.\n var output = [];\n\n for (var i = 1; i < group.name.length; i++) {\n output.push(buildCommon.mathsym(group.name[i], group.mode, options));\n }\n\n base = buildCommon.makeSpan([\"mop\"], output, options);\n } // If content of op is a single symbol, shift it vertically.\n\n\n var baseShift = 0;\n var slant = 0;\n\n if ((base instanceof SymbolNode || group.name === \"\\\\oiint\" || group.name === \"\\\\oiiint\") && !group.suppressBaseShift) {\n // We suppress the shift of the base of \\overset and \\underset. Otherwise,\n // shift the symbol so its center lies on the axis (rule 13). It\n // appears that our fonts have the centers of the symbols already\n // almost on the axis, so these numbers are very small. Note we\n // don't actually apply this here, but instead it is used either in\n // the vlist creation or separately when there are no limits.\n baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction.\n // $FlowFixMe\n\n slant = base.italic;\n }\n\n if (hasLimits) {\n return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift);\n } else {\n if (baseShift) {\n base.style.position = \"relative\";\n base.style.top = makeEm(baseShift);\n }\n\n return base;\n }\n};\n\nvar mathmlBuilder$1 = (group, options) => {\n var node;\n\n if (group.symbol) {\n // This is a symbol. Just add the symbol.\n node = new MathNode(\"mo\", [makeText(group.name, group.mode)]);\n\n if (noSuccessor.includes(group.name)) {\n node.setAttribute(\"largeop\", \"false\");\n }\n } else if (group.body) {\n // This is an operator with children. Add them.\n node = new MathNode(\"mo\", buildExpression(group.body, options));\n } else {\n // This is a text operator. Add all of the characters from the\n // operator's name.\n node = new MathNode(\"mi\", [new TextNode(group.name.slice(1))]); // Append an <mo>⁡</mo>.\n // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4\n\n var operator = new MathNode(\"mo\", [makeText(\"\\u2061\", \"text\")]);\n\n if (group.parentIsSupSub) {\n node = new MathNode(\"mrow\", [node, operator]);\n } else {\n node = newDocumentFragment([node, operator]);\n }\n }\n\n return node;\n};\n\nvar singleCharBigOps = {\n \"\\u220F\": \"\\\\prod\",\n \"\\u2210\": \"\\\\coprod\",\n \"\\u2211\": \"\\\\sum\",\n \"\\u22c0\": \"\\\\bigwedge\",\n \"\\u22c1\": \"\\\\bigvee\",\n \"\\u22c2\": \"\\\\bigcap\",\n \"\\u22c3\": \"\\\\bigcup\",\n \"\\u2a00\": \"\\\\bigodot\",\n \"\\u2a01\": \"\\\\bigoplus\",\n \"\\u2a02\": \"\\\\bigotimes\",\n \"\\u2a04\": \"\\\\biguplus\",\n \"\\u2a06\": \"\\\\bigsqcup\"\n};\ndefineFunction({\n type: \"op\",\n names: [\"\\\\coprod\", \"\\\\bigvee\", \"\\\\bigwedge\", \"\\\\biguplus\", \"\\\\bigcap\", \"\\\\bigcup\", \"\\\\intop\", \"\\\\prod\", \"\\\\sum\", \"\\\\bigotimes\", \"\\\\bigoplus\", \"\\\\bigodot\", \"\\\\bigsqcup\", \"\\\\smallint\", \"\\u220F\", \"\\u2210\", \"\\u2211\", \"\\u22c0\", \"\\u22c1\", \"\\u22c2\", \"\\u22c3\", \"\\u2a00\", \"\\u2a01\", \"\\u2a02\", \"\\u2a04\", \"\\u2a06\"],\n props: {\n numArgs: 0\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var fName = funcName;\n\n if (fName.length === 1) {\n fName = singleCharBigOps[fName];\n }\n\n return {\n type: \"op\",\n mode: parser.mode,\n limits: true,\n parentIsSupSub: false,\n symbol: true,\n name: fName\n };\n },\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n}); // Note: calling defineFunction with a type that's already been defined only\n// works because the same htmlBuilder and mathmlBuilder are being used.\n\ndefineFunction({\n type: \"op\",\n names: [\"\\\\mathop\"],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (_ref2, args) => {\n var {\n parser\n } = _ref2;\n var body = args[0];\n return {\n type: \"op\",\n mode: parser.mode,\n limits: false,\n parentIsSupSub: false,\n symbol: false,\n body: ordargument(body)\n };\n },\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n}); // There are 2 flags for operators; whether they produce limits in\n// displaystyle, and whether they are symbols and should grow in\n// displaystyle. These four groups cover the four possible choices.\n\nvar singleCharIntegrals = {\n \"\\u222b\": \"\\\\int\",\n \"\\u222c\": \"\\\\iint\",\n \"\\u222d\": \"\\\\iiint\",\n \"\\u222e\": \"\\\\oint\",\n \"\\u222f\": \"\\\\oiint\",\n \"\\u2230\": \"\\\\oiiint\"\n}; // No limits, not symbols\n\ndefineFunction({\n type: \"op\",\n names: [\"\\\\arcsin\", \"\\\\arccos\", \"\\\\arctan\", \"\\\\arctg\", \"\\\\arcctg\", \"\\\\arg\", \"\\\\ch\", \"\\\\cos\", \"\\\\cosec\", \"\\\\cosh\", \"\\\\cot\", \"\\\\cotg\", \"\\\\coth\", \"\\\\csc\", \"\\\\ctg\", \"\\\\cth\", \"\\\\deg\", \"\\\\dim\", \"\\\\exp\", \"\\\\hom\", \"\\\\ker\", \"\\\\lg\", \"\\\\ln\", \"\\\\log\", \"\\\\sec\", \"\\\\sin\", \"\\\\sinh\", \"\\\\sh\", \"\\\\tan\", \"\\\\tanh\", \"\\\\tg\", \"\\\\th\"],\n props: {\n numArgs: 0\n },\n\n handler(_ref3) {\n var {\n parser,\n funcName\n } = _ref3;\n return {\n type: \"op\",\n mode: parser.mode,\n limits: false,\n parentIsSupSub: false,\n symbol: false,\n name: funcName\n };\n },\n\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n}); // Limits, not symbols\n\ndefineFunction({\n type: \"op\",\n names: [\"\\\\det\", \"\\\\gcd\", \"\\\\inf\", \"\\\\lim\", \"\\\\max\", \"\\\\min\", \"\\\\Pr\", \"\\\\sup\"],\n props: {\n numArgs: 0\n },\n\n handler(_ref4) {\n var {\n parser,\n funcName\n } = _ref4;\n return {\n type: \"op\",\n mode: parser.mode,\n limits: true,\n parentIsSupSub: false,\n symbol: false,\n name: funcName\n };\n },\n\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n}); // No limits, symbols\n\ndefineFunction({\n type: \"op\",\n names: [\"\\\\int\", \"\\\\iint\", \"\\\\iiint\", \"\\\\oint\", \"\\\\oiint\", \"\\\\oiiint\", \"\\u222b\", \"\\u222c\", \"\\u222d\", \"\\u222e\", \"\\u222f\", \"\\u2230\"],\n props: {\n numArgs: 0,\n allowedInArgument: true\n },\n\n handler(_ref5) {\n var {\n parser,\n funcName\n } = _ref5;\n var fName = funcName;\n\n if (fName.length === 1) {\n fName = singleCharIntegrals[fName];\n }\n\n return {\n type: \"op\",\n mode: parser.mode,\n limits: false,\n parentIsSupSub: false,\n symbol: true,\n name: fName\n };\n },\n\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n});\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only\n// \"operatorname\", but also \"supsub\" since \\operatorname* can\n// affect super/subscripting.\nvar htmlBuilder$1 = (grp, options) => {\n // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n var supGroup;\n var subGroup;\n var hasLimits = false;\n var group;\n\n if (grp.type === \"supsub\") {\n // If we have limits, supsub will pass us its group to handle. Pull\n // out the superscript and subscript and set the group to the op in\n // its base.\n supGroup = grp.sup;\n subGroup = grp.sub;\n group = assertNodeType(grp.base, \"operatorname\");\n hasLimits = true;\n } else {\n group = assertNodeType(grp, \"operatorname\");\n }\n\n var base;\n\n if (group.body.length > 0) {\n var body = group.body.map(child => {\n // $FlowFixMe: Check if the node has a string `text` property.\n var childText = child.text;\n\n if (typeof childText === \"string\") {\n return {\n type: \"textord\",\n mode: child.mode,\n text: childText\n };\n } else {\n return child;\n }\n }); // Consolidate function names into symbol characters.\n\n var expression = buildExpression$1(body, options.withFont(\"mathrm\"), true);\n\n for (var i = 0; i < expression.length; i++) {\n var child = expression[i];\n\n if (child instanceof SymbolNode) {\n // Per amsopn package,\n // change minus to hyphen and \\ast to asterisk\n child.text = child.text.replace(/\\u2212/, \"-\").replace(/\\u2217/, \"*\");\n }\n }\n\n base = buildCommon.makeSpan([\"mop\"], expression, options);\n } else {\n base = buildCommon.makeSpan([\"mop\"], [], options);\n }\n\n if (hasLimits) {\n return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0);\n } else {\n return base;\n }\n};\n\nvar mathmlBuilder = (group, options) => {\n // The steps taken here are similar to the html version.\n var expression = buildExpression(group.body, options.withFont(\"mathrm\")); // Is expression a string or has it something like a fraction?\n\n var isAllString = true; // default\n\n for (var i = 0; i < expression.length; i++) {\n var node = expression[i];\n\n if (node instanceof mathMLTree.SpaceNode) ; else if (node instanceof mathMLTree.MathNode) {\n switch (node.type) {\n case \"mi\":\n case \"mn\":\n case \"ms\":\n case \"mspace\":\n case \"mtext\":\n break;\n // Do nothing yet.\n\n case \"mo\":\n {\n var child = node.children[0];\n\n if (node.children.length === 1 && child instanceof mathMLTree.TextNode) {\n child.text = child.text.replace(/\\u2212/, \"-\").replace(/\\u2217/, \"*\");\n } else {\n isAllString = false;\n }\n\n break;\n }\n\n default:\n isAllString = false;\n }\n } else {\n isAllString = false;\n }\n }\n\n if (isAllString) {\n // Write a single TextNode instead of multiple nested tags.\n var word = expression.map(node => node.toText()).join(\"\");\n expression = [new mathMLTree.TextNode(word)];\n }\n\n var identifier = new mathMLTree.MathNode(\"mi\", expression);\n identifier.setAttribute(\"mathvariant\", \"normal\"); // \\u2061 is the same as ⁡\n // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp\n\n var operator = new mathMLTree.MathNode(\"mo\", [makeText(\"\\u2061\", \"text\")]);\n\n if (group.parentIsSupSub) {\n return new mathMLTree.MathNode(\"mrow\", [identifier, operator]);\n } else {\n return mathMLTree.newDocumentFragment([identifier, operator]);\n }\n}; // \\operatorname\n// amsopn.dtx: \\mathop{#1\\kern\\z@\\operator@font#3}\\newmcodes@\n\n\ndefineFunction({\n type: \"operatorname\",\n names: [\"\\\\operatorname@\", \"\\\\operatornamewithlimits\"],\n props: {\n numArgs: 1\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var body = args[0];\n return {\n type: \"operatorname\",\n mode: parser.mode,\n body: ordargument(body),\n alwaysHandleSupSub: funcName === \"\\\\operatornamewithlimits\",\n limits: false,\n parentIsSupSub: false\n };\n },\n htmlBuilder: htmlBuilder$1,\n mathmlBuilder\n});\ndefineMacro(\"\\\\operatorname\", \"\\\\@ifstar\\\\operatornamewithlimits\\\\operatorname@\");\n\ndefineFunctionBuilders({\n type: \"ordgroup\",\n\n htmlBuilder(group, options) {\n if (group.semisimple) {\n return buildCommon.makeFragment(buildExpression$1(group.body, options, false));\n }\n\n return buildCommon.makeSpan([\"mord\"], buildExpression$1(group.body, options, true), options);\n },\n\n mathmlBuilder(group, options) {\n return buildExpressionRow(group.body, options, true);\n }\n\n});\n\ndefineFunction({\n type: \"overline\",\n names: [\"\\\\overline\"],\n props: {\n numArgs: 1\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n var body = args[0];\n return {\n type: \"overline\",\n mode: parser.mode,\n body\n };\n },\n\n htmlBuilder(group, options) {\n // Overlines are handled in the TeXbook pg 443, Rule 9.\n // Build the inner group in the cramped style.\n var innerGroup = buildGroup$1(group.body, options.havingCrampedStyle()); // Create the line above the body\n\n var line = buildCommon.makeLineSpan(\"overline-line\", options); // Generate the vlist, with the appropriate kerns\n\n var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n var vlist = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: innerGroup\n }, {\n type: \"kern\",\n size: 3 * defaultRuleThickness\n }, {\n type: \"elem\",\n elem: line\n }, {\n type: \"kern\",\n size: defaultRuleThickness\n }]\n }, options);\n return buildCommon.makeSpan([\"mord\", \"overline\"], [vlist], options);\n },\n\n mathmlBuilder(group, options) {\n var operator = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(\"\\u203e\")]);\n operator.setAttribute(\"stretchy\", \"true\");\n var node = new mathMLTree.MathNode(\"mover\", [buildGroup(group.body, options), operator]);\n node.setAttribute(\"accent\", \"true\");\n return node;\n }\n\n});\n\ndefineFunction({\n type: \"phantom\",\n names: [\"\\\\phantom\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n parser\n } = _ref;\n var body = args[0];\n return {\n type: \"phantom\",\n mode: parser.mode,\n body: ordargument(body)\n };\n },\n htmlBuilder: (group, options) => {\n var elements = buildExpression$1(group.body, options.withPhantom(), false); // \\phantom isn't supposed to affect the elements it contains.\n // See \"color\" for more details.\n\n return buildCommon.makeFragment(elements);\n },\n mathmlBuilder: (group, options) => {\n var inner = buildExpression(group.body, options);\n return new mathMLTree.MathNode(\"mphantom\", inner);\n }\n});\ndefineFunction({\n type: \"hphantom\",\n names: [\"\\\\hphantom\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref2, args) => {\n var {\n parser\n } = _ref2;\n var body = args[0];\n return {\n type: \"hphantom\",\n mode: parser.mode,\n body\n };\n },\n htmlBuilder: (group, options) => {\n var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options.withPhantom())]);\n node.height = 0;\n node.depth = 0;\n\n if (node.children) {\n for (var i = 0; i < node.children.length; i++) {\n node.children[i].height = 0;\n node.children[i].depth = 0;\n }\n } // See smash for comment re: use of makeVList\n\n\n node = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: node\n }]\n }, options); // For spacing, TeX treats \\smash as a math group (same spacing as ord).\n\n return buildCommon.makeSpan([\"mord\"], [node], options);\n },\n mathmlBuilder: (group, options) => {\n var inner = buildExpression(ordargument(group.body), options);\n var phantom = new mathMLTree.MathNode(\"mphantom\", inner);\n var node = new mathMLTree.MathNode(\"mpadded\", [phantom]);\n node.setAttribute(\"height\", \"0px\");\n node.setAttribute(\"depth\", \"0px\");\n return node;\n }\n});\ndefineFunction({\n type: \"vphantom\",\n names: [\"\\\\vphantom\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref3, args) => {\n var {\n parser\n } = _ref3;\n var body = args[0];\n return {\n type: \"vphantom\",\n mode: parser.mode,\n body\n };\n },\n htmlBuilder: (group, options) => {\n var inner = buildCommon.makeSpan([\"inner\"], [buildGroup$1(group.body, options.withPhantom())]);\n var fix = buildCommon.makeSpan([\"fix\"], []);\n return buildCommon.makeSpan([\"mord\", \"rlap\"], [inner, fix], options);\n },\n mathmlBuilder: (group, options) => {\n var inner = buildExpression(ordargument(group.body), options);\n var phantom = new mathMLTree.MathNode(\"mphantom\", inner);\n var node = new mathMLTree.MathNode(\"mpadded\", [phantom]);\n node.setAttribute(\"width\", \"0px\");\n return node;\n }\n});\n\ndefineFunction({\n type: \"raisebox\",\n names: [\"\\\\raisebox\"],\n props: {\n numArgs: 2,\n argTypes: [\"size\", \"hbox\"],\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n var amount = assertNodeType(args[0], \"size\").value;\n var body = args[1];\n return {\n type: \"raisebox\",\n mode: parser.mode,\n dy: amount,\n body\n };\n },\n\n htmlBuilder(group, options) {\n var body = buildGroup$1(group.body, options);\n var dy = calculateSize(group.dy, options);\n return buildCommon.makeVList({\n positionType: \"shift\",\n positionData: -dy,\n children: [{\n type: \"elem\",\n elem: body\n }]\n }, options);\n },\n\n mathmlBuilder(group, options) {\n var node = new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n var dy = group.dy.number + group.dy.unit;\n node.setAttribute(\"voffset\", dy);\n return node;\n }\n\n});\n\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\relax\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInArgument: true\n },\n\n handler(_ref) {\n var {\n parser\n } = _ref;\n return {\n type: \"internal\",\n mode: parser.mode\n };\n }\n\n});\n\ndefineFunction({\n type: \"rule\",\n names: [\"\\\\rule\"],\n props: {\n numArgs: 2,\n numOptionalArgs: 1,\n allowedInText: true,\n allowedInMath: true,\n argTypes: [\"size\", \"size\", \"size\"]\n },\n\n handler(_ref, args, optArgs) {\n var {\n parser\n } = _ref;\n var shift = optArgs[0];\n var width = assertNodeType(args[0], \"size\");\n var height = assertNodeType(args[1], \"size\");\n return {\n type: \"rule\",\n mode: parser.mode,\n shift: shift && assertNodeType(shift, \"size\").value,\n width: width.value,\n height: height.value\n };\n },\n\n htmlBuilder(group, options) {\n // Make an empty span for the rule\n var rule = buildCommon.makeSpan([\"mord\", \"rule\"], [], options); // Calculate the shift, width, and height of the rule, and account for units\n\n var width = calculateSize(group.width, options);\n var height = calculateSize(group.height, options);\n var shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size\n\n rule.style.borderRightWidth = makeEm(width);\n rule.style.borderTopWidth = makeEm(height);\n rule.style.bottom = makeEm(shift); // Record the height and width\n\n rule.width = width;\n rule.height = height + shift;\n rule.depth = -shift; // Font size is the number large enough that the browser will\n // reserve at least `absHeight` space above the baseline.\n // The 1.125 factor was empirically determined\n\n rule.maxFontSize = height * 1.125 * options.sizeMultiplier;\n return rule;\n },\n\n mathmlBuilder(group, options) {\n var width = calculateSize(group.width, options);\n var height = calculateSize(group.height, options);\n var shift = group.shift ? calculateSize(group.shift, options) : 0;\n var color = options.color && options.getColor() || \"black\";\n var rule = new mathMLTree.MathNode(\"mspace\");\n rule.setAttribute(\"mathbackground\", color);\n rule.setAttribute(\"width\", makeEm(width));\n rule.setAttribute(\"height\", makeEm(height));\n var wrapper = new mathMLTree.MathNode(\"mpadded\", [rule]);\n\n if (shift >= 0) {\n wrapper.setAttribute(\"height\", makeEm(shift));\n } else {\n wrapper.setAttribute(\"height\", makeEm(shift));\n wrapper.setAttribute(\"depth\", makeEm(-shift));\n }\n\n wrapper.setAttribute(\"voffset\", makeEm(shift));\n return wrapper;\n }\n\n});\n\nfunction sizingGroup(value, options, baseOptions) {\n var inner = buildExpression$1(value, options, false);\n var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize\n // manually. Handle nested size changes.\n\n for (var i = 0; i < inner.length; i++) {\n var pos = inner[i].classes.indexOf(\"sizing\");\n\n if (pos < 0) {\n Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions));\n } else if (inner[i].classes[pos + 1] === \"reset-size\" + options.size) {\n // This is a nested size change: e.g., inner[i] is the \"b\" in\n // `\\Huge a \\small b`. Override the old size (the `reset-` class)\n // but not the new size.\n inner[i].classes[pos + 1] = \"reset-size\" + baseOptions.size;\n }\n\n inner[i].height *= multiplier;\n inner[i].depth *= multiplier;\n }\n\n return buildCommon.makeFragment(inner);\n}\nvar sizeFuncs = [\"\\\\tiny\", \"\\\\sixptsize\", \"\\\\scriptsize\", \"\\\\footnotesize\", \"\\\\small\", \"\\\\normalsize\", \"\\\\large\", \"\\\\Large\", \"\\\\LARGE\", \"\\\\huge\", \"\\\\Huge\"];\nvar htmlBuilder = (group, options) => {\n // Handle sizing operators like \\Huge. Real TeX doesn't actually allow\n // these functions inside of math expressions, so we do some special\n // handling.\n var newOptions = options.havingSize(group.size);\n return sizingGroup(group.body, newOptions, options);\n};\ndefineFunction({\n type: \"sizing\",\n names: sizeFuncs,\n props: {\n numArgs: 0,\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n breakOnTokenText,\n funcName,\n parser\n } = _ref;\n var body = parser.parseExpression(false, breakOnTokenText);\n return {\n type: \"sizing\",\n mode: parser.mode,\n // Figure out what size to use based on the list of functions above\n size: sizeFuncs.indexOf(funcName) + 1,\n body\n };\n },\n htmlBuilder,\n mathmlBuilder: (group, options) => {\n var newOptions = options.havingSize(group.size);\n var inner = buildExpression(group.body, newOptions);\n var node = new mathMLTree.MathNode(\"mstyle\", inner); // TODO(emily): This doesn't produce the correct size for nested size\n // changes, because we don't keep state of what style we're currently\n // in, so we can't reset the size to normal before changing it. Now\n // that we're passing an options parameter we should be able to fix\n // this.\n\n node.setAttribute(\"mathsize\", makeEm(newOptions.sizeMultiplier));\n return node;\n }\n});\n\n// smash, with optional [tb], as in AMS\ndefineFunction({\n type: \"smash\",\n names: [\"\\\\smash\"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1,\n allowedInText: true\n },\n handler: (_ref, args, optArgs) => {\n var {\n parser\n } = _ref;\n var smashHeight = false;\n var smashDepth = false;\n var tbArg = optArgs[0] && assertNodeType(optArgs[0], \"ordgroup\");\n\n if (tbArg) {\n // Optional [tb] argument is engaged.\n // ref: amsmath: \\renewcommand{\\smash}[1][tb]{%\n // def\\mb@t{\\ht}\\def\\mb@b{\\dp}\\def\\mb@tb{\\ht\\z@\\z@\\dp}%\n var letter = \"\";\n\n for (var i = 0; i < tbArg.body.length; ++i) {\n var node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property.\n\n letter = node.text;\n\n if (letter === \"t\") {\n smashHeight = true;\n } else if (letter === \"b\") {\n smashDepth = true;\n } else {\n smashHeight = false;\n smashDepth = false;\n break;\n }\n }\n } else {\n smashHeight = true;\n smashDepth = true;\n }\n\n var body = args[0];\n return {\n type: \"smash\",\n mode: parser.mode,\n body,\n smashHeight,\n smashDepth\n };\n },\n htmlBuilder: (group, options) => {\n var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]);\n\n if (!group.smashHeight && !group.smashDepth) {\n return node;\n }\n\n if (group.smashHeight) {\n node.height = 0; // In order to influence makeVList, we have to reset the children.\n\n if (node.children) {\n for (var i = 0; i < node.children.length; i++) {\n node.children[i].height = 0;\n }\n }\n }\n\n if (group.smashDepth) {\n node.depth = 0;\n\n if (node.children) {\n for (var _i = 0; _i < node.children.length; _i++) {\n node.children[_i].depth = 0;\n }\n }\n } // At this point, we've reset the TeX-like height and depth values.\n // But the span still has an HTML line height.\n // makeVList applies \"display: table-cell\", which prevents the browser\n // from acting on that line height. So we'll call makeVList now.\n\n\n var smashedNode = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: node\n }]\n }, options); // For spacing, TeX treats \\hphantom as a math group (same spacing as ord).\n\n return buildCommon.makeSpan([\"mord\"], [smashedNode], options);\n },\n mathmlBuilder: (group, options) => {\n var node = new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n\n if (group.smashHeight) {\n node.setAttribute(\"height\", \"0px\");\n }\n\n if (group.smashDepth) {\n node.setAttribute(\"depth\", \"0px\");\n }\n\n return node;\n }\n});\n\ndefineFunction({\n type: \"sqrt\",\n names: [\"\\\\sqrt\"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1\n },\n\n handler(_ref, args, optArgs) {\n var {\n parser\n } = _ref;\n var index = optArgs[0];\n var body = args[0];\n return {\n type: \"sqrt\",\n mode: parser.mode,\n body,\n index\n };\n },\n\n htmlBuilder(group, options) {\n // Square roots are handled in the TeXbook pg. 443, Rule 11.\n // First, we do the same steps as in overline to build the inner group\n // and line\n var inner = buildGroup$1(group.body, options.havingCrampedStyle());\n\n if (inner.height === 0) {\n // Render a small surd.\n inner.height = options.fontMetrics().xHeight;\n } // Some groups can return document fragments. Handle those by wrapping\n // them in a span.\n\n\n inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \\surd delimiter\n\n var metrics = options.fontMetrics();\n var theta = metrics.defaultRuleThickness;\n var phi = theta;\n\n if (options.style.id < Style$1.TEXT.id) {\n phi = options.fontMetrics().xHeight;\n } // Calculate the clearance between the body and line\n\n\n var lineClearance = theta + phi / 4;\n var minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size\n\n var {\n span: img,\n ruleWidth,\n advanceWidth\n } = delimiter.sqrtImage(minDelimiterHeight, options);\n var delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size\n\n if (delimDepth > inner.height + inner.depth + lineClearance) {\n lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2;\n } // Shift the sqrt image\n\n\n var imgShift = img.height - inner.height - lineClearance - ruleWidth;\n inner.style.paddingLeft = makeEm(advanceWidth); // Overlay the image and the argument.\n\n var body = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: inner,\n wrapperClasses: [\"svg-align\"]\n }, {\n type: \"kern\",\n size: -(inner.height + imgShift)\n }, {\n type: \"elem\",\n elem: img\n }, {\n type: \"kern\",\n size: ruleWidth\n }]\n }, options);\n\n if (!group.index) {\n return buildCommon.makeSpan([\"mord\", \"sqrt\"], [body], options);\n } else {\n // Handle the optional root index\n // The index is always in scriptscript style\n var newOptions = options.havingStyle(Style$1.SCRIPTSCRIPT);\n var rootm = buildGroup$1(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX\n // source, in the definition of `\\r@@t`.\n\n var toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly\n\n var rootVList = buildCommon.makeVList({\n positionType: \"shift\",\n positionData: -toShift,\n children: [{\n type: \"elem\",\n elem: rootm\n }]\n }, options); // Add a class surrounding it so we can add on the appropriate\n // kerning\n\n var rootVListWrap = buildCommon.makeSpan([\"root\"], [rootVList]);\n return buildCommon.makeSpan([\"mord\", \"sqrt\"], [rootVListWrap, body], options);\n }\n },\n\n mathmlBuilder(group, options) {\n var {\n body,\n index\n } = group;\n return index ? new mathMLTree.MathNode(\"mroot\", [buildGroup(body, options), buildGroup(index, options)]) : new mathMLTree.MathNode(\"msqrt\", [buildGroup(body, options)]);\n }\n\n});\n\nvar styleMap = {\n \"display\": Style$1.DISPLAY,\n \"text\": Style$1.TEXT,\n \"script\": Style$1.SCRIPT,\n \"scriptscript\": Style$1.SCRIPTSCRIPT\n};\ndefineFunction({\n type: \"styling\",\n names: [\"\\\\displaystyle\", \"\\\\textstyle\", \"\\\\scriptstyle\", \"\\\\scriptscriptstyle\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref, args) {\n var {\n breakOnTokenText,\n funcName,\n parser\n } = _ref;\n // parse out the implicit body\n var body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g.\n // here and in buildHTML and de-dupe the enumeration of all the styles).\n // $FlowFixMe: The names above exactly match the styles.\n\n var style = funcName.slice(1, funcName.length - 5);\n return {\n type: \"styling\",\n mode: parser.mode,\n // Figure out what style to use by pulling out the style from\n // the function name\n style,\n body\n };\n },\n\n htmlBuilder(group, options) {\n // Style changes are handled in the TeXbook on pg. 442, Rule 3.\n var newStyle = styleMap[group.style];\n var newOptions = options.havingStyle(newStyle).withFont('');\n return sizingGroup(group.body, newOptions, options);\n },\n\n mathmlBuilder(group, options) {\n // Figure out what style we're changing to.\n var newStyle = styleMap[group.style];\n var newOptions = options.havingStyle(newStyle);\n var inner = buildExpression(group.body, newOptions);\n var node = new mathMLTree.MathNode(\"mstyle\", inner);\n var styleAttributes = {\n \"display\": [\"0\", \"true\"],\n \"text\": [\"0\", \"false\"],\n \"script\": [\"1\", \"false\"],\n \"scriptscript\": [\"2\", \"false\"]\n };\n var attr = styleAttributes[group.style];\n node.setAttribute(\"scriptlevel\", attr[0]);\n node.setAttribute(\"displaystyle\", attr[1]);\n return node;\n }\n\n});\n\n/**\n * Sometimes, groups perform special rules when they have superscripts or\n * subscripts attached to them. This function lets the `supsub` group know that\n * Sometimes, groups perform special rules when they have superscripts or\n * its inner element should handle the superscripts and subscripts instead of\n * handling them itself.\n */\nvar htmlBuilderDelegate = function htmlBuilderDelegate(group, options) {\n var base = group.base;\n\n if (!base) {\n return null;\n } else if (base.type === \"op\") {\n // Operators handle supsubs differently when they have limits\n // (e.g. `\\displaystyle\\sum_2^3`)\n var delegate = base.limits && (options.style.size === Style$1.DISPLAY.size || base.alwaysHandleSupSub);\n return delegate ? htmlBuilder$2 : null;\n } else if (base.type === \"operatorname\") {\n var _delegate = base.alwaysHandleSupSub && (options.style.size === Style$1.DISPLAY.size || base.limits);\n\n return _delegate ? htmlBuilder$1 : null;\n } else if (base.type === \"accent\") {\n return utils.isCharacterBox(base.base) ? htmlBuilder$a : null;\n } else if (base.type === \"horizBrace\") {\n var isSup = !group.sub;\n return isSup === base.isOver ? htmlBuilder$3 : null;\n } else {\n return null;\n }\n}; // Super scripts and subscripts, whose precise placement can depend on other\n// functions that precede them.\n\n\ndefineFunctionBuilders({\n type: \"supsub\",\n\n htmlBuilder(group, options) {\n // Superscript and subscripts are handled in the TeXbook on page\n // 445-446, rules 18(a-f).\n // Here is where we defer to the inner group if it should handle\n // superscripts and subscripts itself.\n var builderDelegate = htmlBuilderDelegate(group, options);\n\n if (builderDelegate) {\n return builderDelegate(group, options);\n }\n\n var {\n base: valueBase,\n sup: valueSup,\n sub: valueSub\n } = group;\n var base = buildGroup$1(valueBase, options);\n var supm;\n var subm;\n var metrics = options.fontMetrics(); // Rule 18a\n\n var supShift = 0;\n var subShift = 0;\n var isCharacterBox = valueBase && utils.isCharacterBox(valueBase);\n\n if (valueSup) {\n var newOptions = options.havingStyle(options.style.sup());\n supm = buildGroup$1(valueSup, newOptions, options);\n\n if (!isCharacterBox) {\n supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier;\n }\n }\n\n if (valueSub) {\n var _newOptions = options.havingStyle(options.style.sub());\n\n subm = buildGroup$1(valueSub, _newOptions, options);\n\n if (!isCharacterBox) {\n subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options.sizeMultiplier;\n }\n } // Rule 18c\n\n\n var minSupShift;\n\n if (options.style === Style$1.DISPLAY) {\n minSupShift = metrics.sup1;\n } else if (options.style.cramped) {\n minSupShift = metrics.sup3;\n } else {\n minSupShift = metrics.sup2;\n } // scriptspace is a font-size-independent size, so scale it\n // appropriately for use as the marginRight.\n\n\n var multiplier = options.sizeMultiplier;\n var marginRight = makeEm(0.5 / metrics.ptPerEm / multiplier);\n var marginLeft = null;\n\n if (subm) {\n // Subscripts shouldn't be shifted by the base's italic correction.\n // Account for that by shifting the subscript back the appropriate\n // amount. Note we only do this when the base is a single symbol.\n var isOiint = group.base && group.base.type === \"op\" && group.base.name && (group.base.name === \"\\\\oiint\" || group.base.name === \"\\\\oiiint\");\n\n if (base instanceof SymbolNode || isOiint) {\n // $FlowFixMe\n marginLeft = makeEm(-base.italic);\n }\n }\n\n var supsub;\n\n if (supm && subm) {\n supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n subShift = Math.max(subShift, metrics.sub2);\n var ruleWidth = metrics.defaultRuleThickness; // Rule 18e\n\n var maxWidth = 4 * ruleWidth;\n\n if (supShift - supm.depth - (subm.height - subShift) < maxWidth) {\n subShift = maxWidth - (supShift - supm.depth) + subm.height;\n var psi = 0.8 * metrics.xHeight - (supShift - supm.depth);\n\n if (psi > 0) {\n supShift += psi;\n subShift -= psi;\n }\n }\n\n var vlistElem = [{\n type: \"elem\",\n elem: subm,\n shift: subShift,\n marginRight,\n marginLeft\n }, {\n type: \"elem\",\n elem: supm,\n shift: -supShift,\n marginRight\n }];\n supsub = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: vlistElem\n }, options);\n } else if (subm) {\n // Rule 18b\n subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight);\n var _vlistElem = [{\n type: \"elem\",\n elem: subm,\n marginLeft,\n marginRight\n }];\n supsub = buildCommon.makeVList({\n positionType: \"shift\",\n positionData: subShift,\n children: _vlistElem\n }, options);\n } else if (supm) {\n // Rule 18c, d\n supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n supsub = buildCommon.makeVList({\n positionType: \"shift\",\n positionData: -supShift,\n children: [{\n type: \"elem\",\n elem: supm,\n marginRight\n }]\n }, options);\n } else {\n throw new Error(\"supsub must have either sup or sub.\");\n } // Wrap the supsub vlist in a span.msupsub to reset text-align.\n\n\n var mclass = getTypeOfDomTree(base, \"right\") || \"mord\";\n return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan([\"msupsub\"], [supsub])], options);\n },\n\n mathmlBuilder(group, options) {\n // Is the inner group a relevant horizontal brace?\n var isBrace = false;\n var isOver;\n var isSup;\n\n if (group.base && group.base.type === \"horizBrace\") {\n isSup = !!group.sup;\n\n if (isSup === group.base.isOver) {\n isBrace = true;\n isOver = group.base.isOver;\n }\n }\n\n if (group.base && (group.base.type === \"op\" || group.base.type === \"operatorname\")) {\n group.base.parentIsSupSub = true;\n }\n\n var children = [buildGroup(group.base, options)];\n\n if (group.sub) {\n children.push(buildGroup(group.sub, options));\n }\n\n if (group.sup) {\n children.push(buildGroup(group.sup, options));\n }\n\n var nodeType;\n\n if (isBrace) {\n nodeType = isOver ? \"mover\" : \"munder\";\n } else if (!group.sub) {\n var base = group.base;\n\n if (base && base.type === \"op\" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) {\n nodeType = \"mover\";\n } else if (base && base.type === \"operatorname\" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) {\n nodeType = \"mover\";\n } else {\n nodeType = \"msup\";\n }\n } else if (!group.sup) {\n var _base = group.base;\n\n if (_base && _base.type === \"op\" && _base.limits && (options.style === Style$1.DISPLAY || _base.alwaysHandleSupSub)) {\n nodeType = \"munder\";\n } else if (_base && _base.type === \"operatorname\" && _base.alwaysHandleSupSub && (_base.limits || options.style === Style$1.DISPLAY)) {\n nodeType = \"munder\";\n } else {\n nodeType = \"msub\";\n }\n } else {\n var _base2 = group.base;\n\n if (_base2 && _base2.type === \"op\" && _base2.limits && options.style === Style$1.DISPLAY) {\n nodeType = \"munderover\";\n } else if (_base2 && _base2.type === \"operatorname\" && _base2.alwaysHandleSupSub && (options.style === Style$1.DISPLAY || _base2.limits)) {\n nodeType = \"munderover\";\n } else {\n nodeType = \"msubsup\";\n }\n }\n\n return new mathMLTree.MathNode(nodeType, children);\n }\n\n});\n\ndefineFunctionBuilders({\n type: \"atom\",\n\n htmlBuilder(group, options) {\n return buildCommon.mathsym(group.text, group.mode, options, [\"m\" + group.family]);\n },\n\n mathmlBuilder(group, options) {\n var node = new mathMLTree.MathNode(\"mo\", [makeText(group.text, group.mode)]);\n\n if (group.family === \"bin\") {\n var variant = getVariant(group, options);\n\n if (variant === \"bold-italic\") {\n node.setAttribute(\"mathvariant\", variant);\n }\n } else if (group.family === \"punct\") {\n node.setAttribute(\"separator\", \"true\");\n } else if (group.family === \"open\" || group.family === \"close\") {\n // Delims built here should not stretch vertically.\n // See delimsizing.js for stretchy delims.\n node.setAttribute(\"stretchy\", \"false\");\n }\n\n return node;\n }\n\n});\n\n// \"mathord\" and \"textord\" ParseNodes created in Parser.js from symbol Groups in\n// src/symbols.js.\nvar defaultVariant = {\n \"mi\": \"italic\",\n \"mn\": \"normal\",\n \"mtext\": \"normal\"\n};\ndefineFunctionBuilders({\n type: \"mathord\",\n\n htmlBuilder(group, options) {\n return buildCommon.makeOrd(group, options, \"mathord\");\n },\n\n mathmlBuilder(group, options) {\n var node = new mathMLTree.MathNode(\"mi\", [makeText(group.text, group.mode, options)]);\n var variant = getVariant(group, options) || \"italic\";\n\n if (variant !== defaultVariant[node.type]) {\n node.setAttribute(\"mathvariant\", variant);\n }\n\n return node;\n }\n\n});\ndefineFunctionBuilders({\n type: \"textord\",\n\n htmlBuilder(group, options) {\n return buildCommon.makeOrd(group, options, \"textord\");\n },\n\n mathmlBuilder(group, options) {\n var text = makeText(group.text, group.mode, options);\n var variant = getVariant(group, options) || \"normal\";\n var node;\n\n if (group.mode === 'text') {\n node = new mathMLTree.MathNode(\"mtext\", [text]);\n } else if (/[0-9]/.test(group.text)) {\n node = new mathMLTree.MathNode(\"mn\", [text]);\n } else if (group.text === \"\\\\prime\") {\n node = new mathMLTree.MathNode(\"mo\", [text]);\n } else {\n node = new mathMLTree.MathNode(\"mi\", [text]);\n }\n\n if (variant !== defaultVariant[node.type]) {\n node.setAttribute(\"mathvariant\", variant);\n }\n\n return node;\n }\n\n});\n\nvar cssSpace = {\n \"\\\\nobreak\": \"nobreak\",\n \"\\\\allowbreak\": \"allowbreak\"\n}; // A lookup table to determine whether a spacing function/symbol should be\n// treated like a regular space character. If a symbol or command is a key\n// in this table, then it should be a regular space character. Furthermore,\n// the associated value may have a `className` specifying an extra CSS class\n// to add to the created `span`.\n\nvar regularSpace = {\n \" \": {},\n \"\\\\ \": {},\n \"~\": {\n className: \"nobreak\"\n },\n \"\\\\space\": {},\n \"\\\\nobreakspace\": {\n className: \"nobreak\"\n }\n}; // ParseNode<\"spacing\"> created in Parser.js from the \"spacing\" symbol Groups in\n// src/symbols.js.\n\ndefineFunctionBuilders({\n type: \"spacing\",\n\n htmlBuilder(group, options) {\n if (regularSpace.hasOwnProperty(group.text)) {\n var className = regularSpace[group.text].className || \"\"; // Spaces are generated by adding an actual space. Each of these\n // things has an entry in the symbols table, so these will be turned\n // into appropriate outputs.\n\n if (group.mode === \"text\") {\n var ord = buildCommon.makeOrd(group, options, \"textord\");\n ord.classes.push(className);\n return ord;\n } else {\n return buildCommon.makeSpan([\"mspace\", className], [buildCommon.mathsym(group.text, group.mode, options)], options);\n }\n } else if (cssSpace.hasOwnProperty(group.text)) {\n // Spaces based on just a CSS class.\n return buildCommon.makeSpan([\"mspace\", cssSpace[group.text]], [], options);\n } else {\n throw new ParseError(\"Unknown type of space \\\"\" + group.text + \"\\\"\");\n }\n },\n\n mathmlBuilder(group, options) {\n var node;\n\n if (regularSpace.hasOwnProperty(group.text)) {\n node = new mathMLTree.MathNode(\"mtext\", [new mathMLTree.TextNode(\"\\u00a0\")]);\n } else if (cssSpace.hasOwnProperty(group.text)) {\n // CSS-based MathML spaces (\\nobreak, \\allowbreak) are ignored\n return new mathMLTree.MathNode(\"mspace\");\n } else {\n throw new ParseError(\"Unknown type of space \\\"\" + group.text + \"\\\"\");\n }\n\n return node;\n }\n\n});\n\nvar pad = () => {\n var padNode = new mathMLTree.MathNode(\"mtd\", []);\n padNode.setAttribute(\"width\", \"50%\");\n return padNode;\n};\n\ndefineFunctionBuilders({\n type: \"tag\",\n\n mathmlBuilder(group, options) {\n var table = new mathMLTree.MathNode(\"mtable\", [new mathMLTree.MathNode(\"mtr\", [pad(), new mathMLTree.MathNode(\"mtd\", [buildExpressionRow(group.body, options)]), pad(), new mathMLTree.MathNode(\"mtd\", [buildExpressionRow(group.tag, options)])])]);\n table.setAttribute(\"width\", \"100%\");\n return table; // TODO: Left-aligned tags.\n // Currently, the group and options passed here do not contain\n // enough info to set tag alignment. `leqno` is in Settings but it is\n // not passed to Options. On the HTML side, leqno is\n // set by a CSS class applied in buildTree.js. That would have worked\n // in MathML if browsers supported <mlabeledtr>. Since they don't, we\n // need to rewrite the way this function is called.\n }\n\n});\n\nvar textFontFamilies = {\n \"\\\\text\": undefined,\n \"\\\\textrm\": \"textrm\",\n \"\\\\textsf\": \"textsf\",\n \"\\\\texttt\": \"texttt\",\n \"\\\\textnormal\": \"textrm\"\n};\nvar textFontWeights = {\n \"\\\\textbf\": \"textbf\",\n \"\\\\textmd\": \"textmd\"\n};\nvar textFontShapes = {\n \"\\\\textit\": \"textit\",\n \"\\\\textup\": \"textup\"\n};\n\nvar optionsWithFont = (group, options) => {\n var font = group.font; // Checks if the argument is a font family or a font style.\n\n if (!font) {\n return options;\n } else if (textFontFamilies[font]) {\n return options.withTextFontFamily(textFontFamilies[font]);\n } else if (textFontWeights[font]) {\n return options.withTextFontWeight(textFontWeights[font]);\n } else if (font === \"\\\\emph\") {\n return options.fontShape === \"textit\" ? options.withTextFontShape(\"textup\") : options.withTextFontShape(\"textit\");\n }\n\n return options.withTextFontShape(textFontShapes[font]);\n};\n\ndefineFunction({\n type: \"text\",\n names: [// Font families\n \"\\\\text\", \"\\\\textrm\", \"\\\\textsf\", \"\\\\texttt\", \"\\\\textnormal\", // Font weights\n \"\\\\textbf\", \"\\\\textmd\", // Font Shapes\n \"\\\\textit\", \"\\\\textup\", \"\\\\emph\"],\n props: {\n numArgs: 1,\n argTypes: [\"text\"],\n allowedInArgument: true,\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n var body = args[0];\n return {\n type: \"text\",\n mode: parser.mode,\n body: ordargument(body),\n font: funcName\n };\n },\n\n htmlBuilder(group, options) {\n var newOptions = optionsWithFont(group, options);\n var inner = buildExpression$1(group.body, newOptions, true);\n return buildCommon.makeSpan([\"mord\", \"text\"], inner, newOptions);\n },\n\n mathmlBuilder(group, options) {\n var newOptions = optionsWithFont(group, options);\n return buildExpressionRow(group.body, newOptions);\n }\n\n});\n\ndefineFunction({\n type: \"underline\",\n names: [\"\\\\underline\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n return {\n type: \"underline\",\n mode: parser.mode,\n body: args[0]\n };\n },\n\n htmlBuilder(group, options) {\n // Underlines are handled in the TeXbook pg 443, Rule 10.\n // Build the inner group.\n var innerGroup = buildGroup$1(group.body, options); // Create the line to go below the body\n\n var line = buildCommon.makeLineSpan(\"underline-line\", options); // Generate the vlist, with the appropriate kerns\n\n var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n var vlist = buildCommon.makeVList({\n positionType: \"top\",\n positionData: innerGroup.height,\n children: [{\n type: \"kern\",\n size: defaultRuleThickness\n }, {\n type: \"elem\",\n elem: line\n }, {\n type: \"kern\",\n size: 3 * defaultRuleThickness\n }, {\n type: \"elem\",\n elem: innerGroup\n }]\n }, options);\n return buildCommon.makeSpan([\"mord\", \"underline\"], [vlist], options);\n },\n\n mathmlBuilder(group, options) {\n var operator = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(\"\\u203e\")]);\n operator.setAttribute(\"stretchy\", \"true\");\n var node = new mathMLTree.MathNode(\"munder\", [buildGroup(group.body, options), operator]);\n node.setAttribute(\"accentunder\", \"true\");\n return node;\n }\n\n});\n\ndefineFunction({\n type: \"vcenter\",\n names: [\"\\\\vcenter\"],\n props: {\n numArgs: 1,\n argTypes: [\"original\"],\n // In LaTeX, \\vcenter can act only on a box.\n allowedInText: false\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n return {\n type: \"vcenter\",\n mode: parser.mode,\n body: args[0]\n };\n },\n\n htmlBuilder(group, options) {\n var body = buildGroup$1(group.body, options);\n var axisHeight = options.fontMetrics().axisHeight;\n var dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight));\n return buildCommon.makeVList({\n positionType: \"shift\",\n positionData: dy,\n children: [{\n type: \"elem\",\n elem: body\n }]\n }, options);\n },\n\n mathmlBuilder(group, options) {\n // There is no way to do this in MathML.\n // Write a class as a breadcrumb in case some post-processor wants\n // to perform a vcenter adjustment.\n return new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)], [\"vcenter\"]);\n }\n\n});\n\ndefineFunction({\n type: \"verb\",\n names: [\"\\\\verb\"],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n\n handler(context, args, optArgs) {\n // \\verb and \\verb* are dealt with directly in Parser.js.\n // If we end up here, it's because of a failure to match the two delimiters\n // in the regex in Lexer.js. LaTeX raises the following error when \\verb is\n // terminated by end of line (or file).\n throw new ParseError(\"\\\\verb ended by end of line instead of matching delimiter\");\n },\n\n htmlBuilder(group, options) {\n var text = makeVerb(group);\n var body = []; // \\verb enters text mode and therefore is sized like \\textstyle\n\n var newOptions = options.havingStyle(options.style.text());\n\n for (var i = 0; i < text.length; i++) {\n var c = text[i];\n\n if (c === '~') {\n c = '\\\\textasciitilde';\n }\n\n body.push(buildCommon.makeSymbol(c, \"Typewriter-Regular\", group.mode, newOptions, [\"mord\", \"texttt\"]));\n }\n\n return buildCommon.makeSpan([\"mord\", \"text\"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions);\n },\n\n mathmlBuilder(group, options) {\n var text = new mathMLTree.TextNode(makeVerb(group));\n var node = new mathMLTree.MathNode(\"mtext\", [text]);\n node.setAttribute(\"mathvariant\", \"monospace\");\n return node;\n }\n\n});\n/**\n * Converts verb group into body string.\n *\n * \\verb* replaces each space with an open box \\u2423\n * \\verb replaces each space with a no-break space \\xA0\n */\n\nvar makeVerb = group => group.body.replace(/ /g, group.star ? '\\u2423' : '\\xA0');\n\n/** Include this to ensure that all functions are defined. */\nvar functions = _functions;\n\n/**\n * The Lexer class handles tokenizing the input in various ways. Since our\n * parser expects us to be able to backtrack, the lexer allows lexing from any\n * given starting point.\n *\n * Its main exposed function is the `lex` function, which takes a position to\n * lex from and a type of token to lex. It defers to the appropriate `_innerLex`\n * function.\n *\n * The various `_innerLex` functions perform the actual lexing of different\n * kinds.\n */\n\n/* The following tokenRegex\n * - matches typical whitespace (but not NBSP etc.) using its first group\n * - does not match any control character \\x00-\\x1f except whitespace\n * - does not match a bare backslash\n * - matches any ASCII character except those just mentioned\n * - does not match the BMP private use area \\uE000-\\uF8FF\n * - does not match bare surrogate code units\n * - matches any BMP character except for those just described\n * - matches any valid Unicode surrogate pair\n * - matches a backslash followed by one or more whitespace characters\n * - matches a backslash followed by one or more letters then whitespace\n * - matches a backslash followed by any BMP character\n * Capturing groups:\n * [1] regular whitespace\n * [2] backslash followed by whitespace\n * [3] anything else, which may include:\n * [4] left character of \\verb*\n * [5] left character of \\verb\n * [6] backslash followed by word, excluding any trailing whitespace\n * Just because the Lexer matches something doesn't mean it's valid input:\n * If there is no matching function or symbol definition, the Parser will\n * still reject the input.\n */\nvar spaceRegexString = \"[ \\r\\n\\t]\";\nvar controlWordRegexString = \"\\\\\\\\[a-zA-Z@]+\";\nvar controlSymbolRegexString = \"\\\\\\\\[^\\uD800-\\uDFFF]\";\nvar controlWordWhitespaceRegexString = \"(\" + controlWordRegexString + \")\" + spaceRegexString + \"*\";\nvar controlSpaceRegexString = \"\\\\\\\\(\\n|[ \\r\\t]+\\n?)[ \\r\\t]*\";\nvar combiningDiacriticalMarkString = \"[\\u0300-\\u036f]\";\nvar combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + \"+$\");\nvar tokenRegexString = \"(\" + spaceRegexString + \"+)|\" + ( // whitespace\ncontrolSpaceRegexString + \"|\") + // \\whitespace\n\"([!-\\\\[\\\\]-\\u2027\\u202A-\\uD7FF\\uF900-\\uFFFF]\" + ( // single codepoint\ncombiningDiacriticalMarkString + \"*\") + // ...plus accents\n\"|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]\" + ( // surrogate pair\ncombiningDiacriticalMarkString + \"*\") + // ...plus accents\n\"|\\\\\\\\verb\\\\*([^]).*?\\\\4\" + // \\verb*\n\"|\\\\\\\\verb([^*a-zA-Z]).*?\\\\5\" + ( // \\verb unstarred\n\"|\" + controlWordWhitespaceRegexString) + ( // \\macroName + spaces\n\"|\" + controlSymbolRegexString + \")\"); // \\\\, \\', etc.\n\n/** Main Lexer class */\n\nclass Lexer {\n // Category codes. The lexer only supports comment characters (14) for now.\n // MacroExpander additionally distinguishes active (13).\n constructor(input, settings) {\n this.input = void 0;\n this.settings = void 0;\n this.tokenRegex = void 0;\n this.catcodes = void 0;\n // Separate accents from characters\n this.input = input;\n this.settings = settings;\n this.tokenRegex = new RegExp(tokenRegexString, 'g');\n this.catcodes = {\n \"%\": 14,\n // comment character\n \"~\": 13 // active character\n\n };\n }\n\n setCatcode(char, code) {\n this.catcodes[char] = code;\n }\n /**\n * This function lexes a single token.\n */\n\n\n lex() {\n var input = this.input;\n var pos = this.tokenRegex.lastIndex;\n\n if (pos === input.length) {\n return new Token(\"EOF\", new SourceLocation(this, pos, pos));\n }\n\n var match = this.tokenRegex.exec(input);\n\n if (match === null || match.index !== pos) {\n throw new ParseError(\"Unexpected character: '\" + input[pos] + \"'\", new Token(input[pos], new SourceLocation(this, pos, pos + 1)));\n }\n\n var text = match[6] || match[3] || (match[2] ? \"\\\\ \" : \" \");\n\n if (this.catcodes[text] === 14) {\n // comment character\n var nlIndex = input.indexOf('\\n', this.tokenRegex.lastIndex);\n\n if (nlIndex === -1) {\n this.tokenRegex.lastIndex = input.length; // EOF\n\n this.settings.reportNonstrict(\"commentAtEnd\", \"% comment has no terminating newline; LaTeX would \" + \"fail because of commenting the end of math mode (e.g. $)\");\n } else {\n this.tokenRegex.lastIndex = nlIndex + 1;\n }\n\n return this.lex();\n }\n\n return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex));\n }\n\n}\n\n/**\n * A `Namespace` refers to a space of nameable things like macros or lengths,\n * which can be `set` either globally or local to a nested group, using an\n * undo stack similar to how TeX implements this functionality.\n * Performance-wise, `get` and local `set` take constant time, while global\n * `set` takes time proportional to the depth of group nesting.\n */\nclass Namespace {\n /**\n * Both arguments are optional. The first argument is an object of\n * built-in mappings which never change. The second argument is an object\n * of initial (global-level) mappings, which will constantly change\n * according to any global/top-level `set`s done.\n */\n constructor(builtins, globalMacros) {\n if (builtins === void 0) {\n builtins = {};\n }\n\n if (globalMacros === void 0) {\n globalMacros = {};\n }\n\n this.current = void 0;\n this.builtins = void 0;\n this.undefStack = void 0;\n this.current = globalMacros;\n this.builtins = builtins;\n this.undefStack = [];\n }\n /**\n * Start a new nested group, affecting future local `set`s.\n */\n\n\n beginGroup() {\n this.undefStack.push({});\n }\n /**\n * End current nested group, restoring values before the group began.\n */\n\n\n endGroup() {\n if (this.undefStack.length === 0) {\n throw new ParseError(\"Unbalanced namespace destruction: attempt \" + \"to pop global namespace; please report this as a bug\");\n }\n\n var undefs = this.undefStack.pop();\n\n for (var undef in undefs) {\n if (undefs.hasOwnProperty(undef)) {\n if (undefs[undef] == null) {\n delete this.current[undef];\n } else {\n this.current[undef] = undefs[undef];\n }\n }\n }\n }\n /**\n * Ends all currently nested groups (if any), restoring values before the\n * groups began. Useful in case of an error in the middle of parsing.\n */\n\n\n endGroups() {\n while (this.undefStack.length > 0) {\n this.endGroup();\n }\n }\n /**\n * Detect whether `name` has a definition. Equivalent to\n * `get(name) != null`.\n */\n\n\n has(name) {\n return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name);\n }\n /**\n * Get the current value of a name, or `undefined` if there is no value.\n *\n * Note: Do not use `if (namespace.get(...))` to detect whether a macro\n * is defined, as the definition may be the empty string which evaluates\n * to `false` in JavaScript. Use `if (namespace.get(...) != null)` or\n * `if (namespace.has(...))`.\n */\n\n\n get(name) {\n if (this.current.hasOwnProperty(name)) {\n return this.current[name];\n } else {\n return this.builtins[name];\n }\n }\n /**\n * Set the current value of a name, and optionally set it globally too.\n * Local set() sets the current value and (when appropriate) adds an undo\n * operation to the undo stack. Global set() may change the undo\n * operation at every level, so takes time linear in their number.\n * A value of undefined means to delete existing definitions.\n */\n\n\n set(name, value, global) {\n if (global === void 0) {\n global = false;\n }\n\n if (global) {\n // Global set is equivalent to setting in all groups. Simulate this\n // by destroying any undos currently scheduled for this name,\n // and adding an undo with the *new* value (in case it later gets\n // locally reset within this environment).\n for (var i = 0; i < this.undefStack.length; i++) {\n delete this.undefStack[i][name];\n }\n\n if (this.undefStack.length > 0) {\n this.undefStack[this.undefStack.length - 1][name] = value;\n }\n } else {\n // Undo this set at end of this group (possibly to `undefined`),\n // unless an undo is already in place, in which case that older\n // value is the correct one.\n var top = this.undefStack[this.undefStack.length - 1];\n\n if (top && !top.hasOwnProperty(name)) {\n top[name] = this.current[name];\n }\n }\n\n if (value == null) {\n delete this.current[name];\n } else {\n this.current[name] = value;\n }\n }\n\n}\n\n/**\n * Predefined macros for KaTeX.\n * This can be used to define some commands in terms of others.\n */\nvar macros = _macros;\n// macro tools\n\ndefineMacro(\"\\\\noexpand\", function (context) {\n // The expansion is the token itself; but that token is interpreted\n // as if its meaning were ‘\\relax’ if it is a control sequence that\n // would ordinarily be expanded by TeX’s expansion rules.\n var t = context.popToken();\n\n if (context.isExpandable(t.text)) {\n t.noexpand = true;\n t.treatAsRelax = true;\n }\n\n return {\n tokens: [t],\n numArgs: 0\n };\n});\ndefineMacro(\"\\\\expandafter\", function (context) {\n // TeX first reads the token that comes immediately after \\expandafter,\n // without expanding it; let’s call this token t. Then TeX reads the\n // token that comes after t (and possibly more tokens, if that token\n // has an argument), replacing it by its expansion. Finally TeX puts\n // t back in front of that expansion.\n var t = context.popToken();\n context.expandOnce(true); // expand only an expandable token\n\n return {\n tokens: [t],\n numArgs: 0\n };\n}); // LaTeX's \\@firstoftwo{#1}{#2} expands to #1, skipping #2\n// TeX source: \\long\\def\\@firstoftwo#1#2{#1}\n\ndefineMacro(\"\\\\@firstoftwo\", function (context) {\n var args = context.consumeArgs(2);\n return {\n tokens: args[0],\n numArgs: 0\n };\n}); // LaTeX's \\@secondoftwo{#1}{#2} expands to #2, skipping #1\n// TeX source: \\long\\def\\@secondoftwo#1#2{#2}\n\ndefineMacro(\"\\\\@secondoftwo\", function (context) {\n var args = context.consumeArgs(2);\n return {\n tokens: args[1],\n numArgs: 0\n };\n}); // LaTeX's \\@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded)\n// symbol that isn't a space, consuming any spaces but not consuming the\n// first nonspace character. If that nonspace character matches #1, then\n// the macro expands to #2; otherwise, it expands to #3.\n\ndefineMacro(\"\\\\@ifnextchar\", function (context) {\n var args = context.consumeArgs(3); // symbol, if, else\n\n context.consumeSpaces();\n var nextToken = context.future();\n\n if (args[0].length === 1 && args[0][0].text === nextToken.text) {\n return {\n tokens: args[1],\n numArgs: 0\n };\n } else {\n return {\n tokens: args[2],\n numArgs: 0\n };\n }\n}); // LaTeX's \\@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol.\n// If it is `*`, then it consumes the symbol, and the macro expands to #1;\n// otherwise, the macro expands to #2 (without consuming the symbol).\n// TeX source: \\def\\@ifstar#1{\\@ifnextchar *{\\@firstoftwo{#1}}}\n\ndefineMacro(\"\\\\@ifstar\", \"\\\\@ifnextchar *{\\\\@firstoftwo{#1}}\"); // LaTeX's \\TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode\n\ndefineMacro(\"\\\\TextOrMath\", function (context) {\n var args = context.consumeArgs(2);\n\n if (context.mode === 'text') {\n return {\n tokens: args[0],\n numArgs: 0\n };\n } else {\n return {\n tokens: args[1],\n numArgs: 0\n };\n }\n}); // Lookup table for parsing numbers in base 8 through 16\n\nvar digitToNumber = {\n \"0\": 0,\n \"1\": 1,\n \"2\": 2,\n \"3\": 3,\n \"4\": 4,\n \"5\": 5,\n \"6\": 6,\n \"7\": 7,\n \"8\": 8,\n \"9\": 9,\n \"a\": 10,\n \"A\": 10,\n \"b\": 11,\n \"B\": 11,\n \"c\": 12,\n \"C\": 12,\n \"d\": 13,\n \"D\": 13,\n \"e\": 14,\n \"E\": 14,\n \"f\": 15,\n \"F\": 15\n}; // TeX \\char makes a literal character (catcode 12) using the following forms:\n// (see The TeXBook, p. 43)\n// \\char123 -- decimal\n// \\char'123 -- octal\n// \\char\"123 -- hex\n// \\char`x -- character that can be written (i.e. isn't active)\n// \\char`\\x -- character that cannot be written (e.g. %)\n// These all refer to characters from the font, so we turn them into special\n// calls to a function \\@char dealt with in the Parser.\n\ndefineMacro(\"\\\\char\", function (context) {\n var token = context.popToken();\n var base;\n var number = '';\n\n if (token.text === \"'\") {\n base = 8;\n token = context.popToken();\n } else if (token.text === '\"') {\n base = 16;\n token = context.popToken();\n } else if (token.text === \"`\") {\n token = context.popToken();\n\n if (token.text[0] === \"\\\\\") {\n number = token.text.charCodeAt(1);\n } else if (token.text === \"EOF\") {\n throw new ParseError(\"\\\\char` missing argument\");\n } else {\n number = token.text.charCodeAt(0);\n }\n } else {\n base = 10;\n }\n\n if (base) {\n // Parse a number in the given base, starting with first `token`.\n number = digitToNumber[token.text];\n\n if (number == null || number >= base) {\n throw new ParseError(\"Invalid base-\" + base + \" digit \" + token.text);\n }\n\n var digit;\n\n while ((digit = digitToNumber[context.future().text]) != null && digit < base) {\n number *= base;\n number += digit;\n context.popToken();\n }\n }\n\n return \"\\\\@char{\" + number + \"}\";\n}); // \\newcommand{\\macro}[args]{definition}\n// \\renewcommand{\\macro}[args]{definition}\n// TODO: Optional arguments: \\newcommand{\\macro}[args][default]{definition}\n\nvar newcommand = (context, existsOK, nonexistsOK, skipIfExists) => {\n var arg = context.consumeArg().tokens;\n\n if (arg.length !== 1) {\n throw new ParseError(\"\\\\newcommand's first argument must be a macro name\");\n }\n\n var name = arg[0].text;\n var exists = context.isDefined(name);\n\n if (exists && !existsOK) {\n throw new ParseError(\"\\\\newcommand{\" + name + \"} attempting to redefine \" + (name + \"; use \\\\renewcommand\"));\n }\n\n if (!exists && !nonexistsOK) {\n throw new ParseError(\"\\\\renewcommand{\" + name + \"} when command \" + name + \" \" + \"does not yet exist; use \\\\newcommand\");\n }\n\n var numArgs = 0;\n arg = context.consumeArg().tokens;\n\n if (arg.length === 1 && arg[0].text === \"[\") {\n var argText = '';\n var token = context.expandNextToken();\n\n while (token.text !== \"]\" && token.text !== \"EOF\") {\n // TODO: Should properly expand arg, e.g., ignore {}s\n argText += token.text;\n token = context.expandNextToken();\n }\n\n if (!argText.match(/^\\s*[0-9]+\\s*$/)) {\n throw new ParseError(\"Invalid number of arguments: \" + argText);\n }\n\n numArgs = parseInt(argText);\n arg = context.consumeArg().tokens;\n }\n\n if (!(exists && skipIfExists)) {\n // Final arg is the expansion of the macro\n context.macros.set(name, {\n tokens: arg,\n numArgs\n });\n }\n\n return '';\n};\n\ndefineMacro(\"\\\\newcommand\", context => newcommand(context, false, true, false));\ndefineMacro(\"\\\\renewcommand\", context => newcommand(context, true, false, false));\ndefineMacro(\"\\\\providecommand\", context => newcommand(context, true, true, true)); // terminal (console) tools\n\ndefineMacro(\"\\\\message\", context => {\n var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console\n\n console.log(arg.reverse().map(token => token.text).join(\"\"));\n return '';\n});\ndefineMacro(\"\\\\errmessage\", context => {\n var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console\n\n console.error(arg.reverse().map(token => token.text).join(\"\"));\n return '';\n});\ndefineMacro(\"\\\\show\", context => {\n var tok = context.popToken();\n var name = tok.text; // eslint-disable-next-line no-console\n\n console.log(tok, context.macros.get(name), functions[name], symbols.math[name], symbols.text[name]);\n return '';\n}); //////////////////////////////////////////////////////////////////////\n// Grouping\n// \\let\\bgroup={ \\let\\egroup=}\n\ndefineMacro(\"\\\\bgroup\", \"{\");\ndefineMacro(\"\\\\egroup\", \"}\"); // Symbols from latex.ltx:\n// \\def~{\\nobreakspace{}}\n// \\def\\lq{`}\n// \\def\\rq{'}\n// \\def \\aa {\\r a}\n// \\def \\AA {\\r A}\n\ndefineMacro(\"~\", \"\\\\nobreakspace\");\ndefineMacro(\"\\\\lq\", \"`\");\ndefineMacro(\"\\\\rq\", \"'\");\ndefineMacro(\"\\\\aa\", \"\\\\r a\");\ndefineMacro(\"\\\\AA\", \"\\\\r A\"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML.\n// \\DeclareTextCommandDefault{\\textcopyright}{\\textcircled{c}}\n// \\DeclareTextCommandDefault{\\textregistered}{\\textcircled{%\n// \\check@mathfonts\\fontsize\\sf@size\\z@\\math@fontsfalse\\selectfont R}}\n// \\DeclareRobustCommand{\\copyright}{%\n// \\ifmmode{\\nfss@text{\\textcopyright}}\\else\\textcopyright\\fi}\n\ndefineMacro(\"\\\\textcopyright\", \"\\\\html@mathml{\\\\textcircled{c}}{\\\\char`©}\");\ndefineMacro(\"\\\\copyright\", \"\\\\TextOrMath{\\\\textcopyright}{\\\\text{\\\\textcopyright}}\");\ndefineMacro(\"\\\\textregistered\", \"\\\\html@mathml{\\\\textcircled{\\\\scriptsize R}}{\\\\char`®}\"); // Characters omitted from Unicode range 1D400–1D7FF\n\ndefineMacro(\"\\u212C\", \"\\\\mathscr{B}\"); // script\n\ndefineMacro(\"\\u2130\", \"\\\\mathscr{E}\");\ndefineMacro(\"\\u2131\", \"\\\\mathscr{F}\");\ndefineMacro(\"\\u210B\", \"\\\\mathscr{H}\");\ndefineMacro(\"\\u2110\", \"\\\\mathscr{I}\");\ndefineMacro(\"\\u2112\", \"\\\\mathscr{L}\");\ndefineMacro(\"\\u2133\", \"\\\\mathscr{M}\");\ndefineMacro(\"\\u211B\", \"\\\\mathscr{R}\");\ndefineMacro(\"\\u212D\", \"\\\\mathfrak{C}\"); // Fraktur\n\ndefineMacro(\"\\u210C\", \"\\\\mathfrak{H}\");\ndefineMacro(\"\\u2128\", \"\\\\mathfrak{Z}\"); // Define \\Bbbk with a macro that works in both HTML and MathML.\n\ndefineMacro(\"\\\\Bbbk\", \"\\\\Bbb{k}\"); // Unicode middle dot\n// The KaTeX fonts do not contain U+00B7. Instead, \\cdotp displays\n// the dot at U+22C5 and gives it punct spacing.\n\ndefineMacro(\"\\u00b7\", \"\\\\cdotp\"); // \\llap and \\rlap render their contents in text mode\n\ndefineMacro(\"\\\\llap\", \"\\\\mathllap{\\\\textrm{#1}}\");\ndefineMacro(\"\\\\rlap\", \"\\\\mathrlap{\\\\textrm{#1}}\");\ndefineMacro(\"\\\\clap\", \"\\\\mathclap{\\\\textrm{#1}}\"); // \\mathstrut from the TeXbook, p 360\n\ndefineMacro(\"\\\\mathstrut\", \"\\\\vphantom{(}\"); // \\underbar from TeXbook p 353\n\ndefineMacro(\"\\\\underbar\", \"\\\\underline{\\\\text{#1}}\"); // \\not is defined by base/fontmath.ltx via\n// \\DeclareMathSymbol{\\not}{\\mathrel}{symbols}{\"36}\n// It's thus treated like a \\mathrel, but defined by a symbol that has zero\n// width but extends to the right. We use \\rlap to get that spacing.\n// For MathML we write U+0338 here. buildMathML.js will then do the overlay.\n\ndefineMacro(\"\\\\not\", '\\\\html@mathml{\\\\mathrel{\\\\mathrlap\\\\@not}}{\\\\char\"338}'); // Negated symbols from base/fontmath.ltx:\n// \\def\\neq{\\not=} \\let\\ne=\\neq\n// \\DeclareRobustCommand\n// \\notin{\\mathrel{\\m@th\\mathpalette\\c@ncel\\in}}\n// \\def\\c@ncel#1#2{\\m@th\\ooalign{$\\hfil#1\\mkern1mu/\\hfil$\\crcr$#1#2$}}\n\ndefineMacro(\"\\\\neq\", \"\\\\html@mathml{\\\\mathrel{\\\\not=}}{\\\\mathrel{\\\\char`≠}}\");\ndefineMacro(\"\\\\ne\", \"\\\\neq\");\ndefineMacro(\"\\u2260\", \"\\\\neq\");\ndefineMacro(\"\\\\notin\", \"\\\\html@mathml{\\\\mathrel{{\\\\in}\\\\mathllap{/\\\\mskip1mu}}}\" + \"{\\\\mathrel{\\\\char`∉}}\");\ndefineMacro(\"\\u2209\", \"\\\\notin\"); // Unicode stacked relations\n\ndefineMacro(\"\\u2258\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\kern{-1em}\\\\raisebox{0.4em}{$\\\\scriptsize\\\\frown$}}\" + \"}{\\\\mathrel{\\\\char`\\u2258}}\");\ndefineMacro(\"\\u2259\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\wedge}{=}}{\\\\mathrel{\\\\char`\\u2258}}\");\ndefineMacro(\"\\u225A\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\vee}{=}}{\\\\mathrel{\\\\char`\\u225A}}\");\ndefineMacro(\"\\u225B\", \"\\\\html@mathml{\\\\stackrel{\\\\scriptsize\\\\star}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225B}}\");\ndefineMacro(\"\\u225D\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{def}}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225D}}\");\ndefineMacro(\"\\u225E\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{m}}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225E}}\");\ndefineMacro(\"\\u225F\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny?}{=}}{\\\\mathrel{\\\\char`\\u225F}}\"); // Misc Unicode\n\ndefineMacro(\"\\u27C2\", \"\\\\perp\");\ndefineMacro(\"\\u203C\", \"\\\\mathclose{!\\\\mkern-0.8mu!}\");\ndefineMacro(\"\\u220C\", \"\\\\notni\");\ndefineMacro(\"\\u231C\", \"\\\\ulcorner\");\ndefineMacro(\"\\u231D\", \"\\\\urcorner\");\ndefineMacro(\"\\u231E\", \"\\\\llcorner\");\ndefineMacro(\"\\u231F\", \"\\\\lrcorner\");\ndefineMacro(\"\\u00A9\", \"\\\\copyright\");\ndefineMacro(\"\\u00AE\", \"\\\\textregistered\");\ndefineMacro(\"\\uFE0F\", \"\\\\textregistered\"); // The KaTeX fonts have corners at codepoints that don't match Unicode.\n// For MathML purposes, use the Unicode code point.\n\ndefineMacro(\"\\\\ulcorner\", \"\\\\html@mathml{\\\\@ulcorner}{\\\\mathop{\\\\char\\\"231c}}\");\ndefineMacro(\"\\\\urcorner\", \"\\\\html@mathml{\\\\@urcorner}{\\\\mathop{\\\\char\\\"231d}}\");\ndefineMacro(\"\\\\llcorner\", \"\\\\html@mathml{\\\\@llcorner}{\\\\mathop{\\\\char\\\"231e}}\");\ndefineMacro(\"\\\\lrcorner\", \"\\\\html@mathml{\\\\@lrcorner}{\\\\mathop{\\\\char\\\"231f}}\"); //////////////////////////////////////////////////////////////////////\n// LaTeX_2ε\n// \\vdots{\\vbox{\\baselineskip4\\p@ \\lineskiplimit\\z@\n// \\kern6\\p@\\hbox{.}\\hbox{.}\\hbox{.}}}\n// We'll call \\varvdots, which gets a glyph from symbols.js.\n// The zero-width rule gets us an equivalent to the vertical 6pt kern.\n\ndefineMacro(\"\\\\vdots\", \"{\\\\varvdots\\\\rule{0pt}{15pt}}\");\ndefineMacro(\"\\u22ee\", \"\\\\vdots\"); //////////////////////////////////////////////////////////////////////\n// amsmath.sty\n// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf\n// Italic Greek capital letters. AMS defines these with \\DeclareMathSymbol,\n// but they are equivalent to \\mathit{\\Letter}.\n\ndefineMacro(\"\\\\varGamma\", \"\\\\mathit{\\\\Gamma}\");\ndefineMacro(\"\\\\varDelta\", \"\\\\mathit{\\\\Delta}\");\ndefineMacro(\"\\\\varTheta\", \"\\\\mathit{\\\\Theta}\");\ndefineMacro(\"\\\\varLambda\", \"\\\\mathit{\\\\Lambda}\");\ndefineMacro(\"\\\\varXi\", \"\\\\mathit{\\\\Xi}\");\ndefineMacro(\"\\\\varPi\", \"\\\\mathit{\\\\Pi}\");\ndefineMacro(\"\\\\varSigma\", \"\\\\mathit{\\\\Sigma}\");\ndefineMacro(\"\\\\varUpsilon\", \"\\\\mathit{\\\\Upsilon}\");\ndefineMacro(\"\\\\varPhi\", \"\\\\mathit{\\\\Phi}\");\ndefineMacro(\"\\\\varPsi\", \"\\\\mathit{\\\\Psi}\");\ndefineMacro(\"\\\\varOmega\", \"\\\\mathit{\\\\Omega}\"); //\\newcommand{\\substack}[1]{\\subarray{c}#1\\endsubarray}\n\ndefineMacro(\"\\\\substack\", \"\\\\begin{subarray}{c}#1\\\\end{subarray}\"); // \\renewcommand{\\colon}{\\nobreak\\mskip2mu\\mathpunct{}\\nonscript\n// \\mkern-\\thinmuskip{:}\\mskip6muplus1mu\\relax}\n\ndefineMacro(\"\\\\colon\", \"\\\\nobreak\\\\mskip2mu\\\\mathpunct{}\" + \"\\\\mathchoice{\\\\mkern-3mu}{\\\\mkern-3mu}{}{}{:}\\\\mskip6mu\\\\relax\"); // \\newcommand{\\boxed}[1]{\\fbox{\\m@th$\\displaystyle#1$}}\n\ndefineMacro(\"\\\\boxed\", \"\\\\fbox{$\\\\displaystyle{#1}$}\"); // \\def\\iff{\\DOTSB\\;\\Longleftrightarrow\\;}\n// \\def\\implies{\\DOTSB\\;\\Longrightarrow\\;}\n// \\def\\impliedby{\\DOTSB\\;\\Longleftarrow\\;}\n\ndefineMacro(\"\\\\iff\", \"\\\\DOTSB\\\\;\\\\Longleftrightarrow\\\\;\");\ndefineMacro(\"\\\\implies\", \"\\\\DOTSB\\\\;\\\\Longrightarrow\\\\;\");\ndefineMacro(\"\\\\impliedby\", \"\\\\DOTSB\\\\;\\\\Longleftarrow\\\\;\"); // \\def\\dddot#1{{\\mathop{#1}\\limits^{\\vbox to-1.4\\ex@{\\kern-\\tw@\\ex@\n// \\hbox{\\normalfont ...}\\vss}}}}\n// We use \\overset which avoids the vertical shift of \\mathop.\n\ndefineMacro(\"\\\\dddot\", \"{\\\\overset{\\\\raisebox{-0.1ex}{\\\\normalsize ...}}{#1}}\");\ndefineMacro(\"\\\\ddddot\", \"{\\\\overset{\\\\raisebox{-0.1ex}{\\\\normalsize ....}}{#1}}\"); // AMSMath's automatic \\dots, based on \\mdots@@ macro.\n\nvar dotsByToken = {\n ',': '\\\\dotsc',\n '\\\\not': '\\\\dotsb',\n // \\keybin@ checks for the following:\n '+': '\\\\dotsb',\n '=': '\\\\dotsb',\n '<': '\\\\dotsb',\n '>': '\\\\dotsb',\n '-': '\\\\dotsb',\n '*': '\\\\dotsb',\n ':': '\\\\dotsb',\n // Symbols whose definition starts with \\DOTSB:\n '\\\\DOTSB': '\\\\dotsb',\n '\\\\coprod': '\\\\dotsb',\n '\\\\bigvee': '\\\\dotsb',\n '\\\\bigwedge': '\\\\dotsb',\n '\\\\biguplus': '\\\\dotsb',\n '\\\\bigcap': '\\\\dotsb',\n '\\\\bigcup': '\\\\dotsb',\n '\\\\prod': '\\\\dotsb',\n '\\\\sum': '\\\\dotsb',\n '\\\\bigotimes': '\\\\dotsb',\n '\\\\bigoplus': '\\\\dotsb',\n '\\\\bigodot': '\\\\dotsb',\n '\\\\bigsqcup': '\\\\dotsb',\n '\\\\And': '\\\\dotsb',\n '\\\\longrightarrow': '\\\\dotsb',\n '\\\\Longrightarrow': '\\\\dotsb',\n '\\\\longleftarrow': '\\\\dotsb',\n '\\\\Longleftarrow': '\\\\dotsb',\n '\\\\longleftrightarrow': '\\\\dotsb',\n '\\\\Longleftrightarrow': '\\\\dotsb',\n '\\\\mapsto': '\\\\dotsb',\n '\\\\longmapsto': '\\\\dotsb',\n '\\\\hookrightarrow': '\\\\dotsb',\n '\\\\doteq': '\\\\dotsb',\n // Symbols whose definition starts with \\mathbin:\n '\\\\mathbin': '\\\\dotsb',\n // Symbols whose definition starts with \\mathrel:\n '\\\\mathrel': '\\\\dotsb',\n '\\\\relbar': '\\\\dotsb',\n '\\\\Relbar': '\\\\dotsb',\n '\\\\xrightarrow': '\\\\dotsb',\n '\\\\xleftarrow': '\\\\dotsb',\n // Symbols whose definition starts with \\DOTSI:\n '\\\\DOTSI': '\\\\dotsi',\n '\\\\int': '\\\\dotsi',\n '\\\\oint': '\\\\dotsi',\n '\\\\iint': '\\\\dotsi',\n '\\\\iiint': '\\\\dotsi',\n '\\\\iiiint': '\\\\dotsi',\n '\\\\idotsint': '\\\\dotsi',\n // Symbols whose definition starts with \\DOTSX:\n '\\\\DOTSX': '\\\\dotsx'\n};\ndefineMacro(\"\\\\dots\", function (context) {\n // TODO: If used in text mode, should expand to \\textellipsis.\n // However, in KaTeX, \\textellipsis and \\ldots behave the same\n // (in text mode), and it's unlikely we'd see any of the math commands\n // that affect the behavior of \\dots when in text mode. So fine for now\n // (until we support \\ifmmode ... \\else ... \\fi).\n var thedots = '\\\\dotso';\n var next = context.expandAfterFuture().text;\n\n if (next in dotsByToken) {\n thedots = dotsByToken[next];\n } else if (next.slice(0, 4) === '\\\\not') {\n thedots = '\\\\dotsb';\n } else if (next in symbols.math) {\n if (['bin', 'rel'].includes(symbols.math[next].group)) {\n thedots = '\\\\dotsb';\n }\n }\n\n return thedots;\n});\nvar spaceAfterDots = {\n // \\rightdelim@ checks for the following:\n ')': true,\n ']': true,\n '\\\\rbrack': true,\n '\\\\}': true,\n '\\\\rbrace': true,\n '\\\\rangle': true,\n '\\\\rceil': true,\n '\\\\rfloor': true,\n '\\\\rgroup': true,\n '\\\\rmoustache': true,\n '\\\\right': true,\n '\\\\bigr': true,\n '\\\\biggr': true,\n '\\\\Bigr': true,\n '\\\\Biggr': true,\n // \\extra@ also tests for the following:\n '$': true,\n // \\extrap@ checks for the following:\n ';': true,\n '.': true,\n ',': true\n};\ndefineMacro(\"\\\\dotso\", function (context) {\n var next = context.future().text;\n\n if (next in spaceAfterDots) {\n return \"\\\\ldots\\\\,\";\n } else {\n return \"\\\\ldots\";\n }\n});\ndefineMacro(\"\\\\dotsc\", function (context) {\n var next = context.future().text; // \\dotsc uses \\extra@ but not \\extrap@, instead specially checking for\n // ';' and '.', but doesn't check for ','.\n\n if (next in spaceAfterDots && next !== ',') {\n return \"\\\\ldots\\\\,\";\n } else {\n return \"\\\\ldots\";\n }\n});\ndefineMacro(\"\\\\cdots\", function (context) {\n var next = context.future().text;\n\n if (next in spaceAfterDots) {\n return \"\\\\@cdots\\\\,\";\n } else {\n return \"\\\\@cdots\";\n }\n});\ndefineMacro(\"\\\\dotsb\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsm\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsi\", \"\\\\!\\\\cdots\"); // amsmath doesn't actually define \\dotsx, but \\dots followed by a macro\n// starting with \\DOTSX implies \\dotso, and then \\extra@ detects this case\n// and forces the added `\\,`.\n\ndefineMacro(\"\\\\dotsx\", \"\\\\ldots\\\\,\"); // \\let\\DOTSI\\relax\n// \\let\\DOTSB\\relax\n// \\let\\DOTSX\\relax\n\ndefineMacro(\"\\\\DOTSI\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSB\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSX\", \"\\\\relax\"); // Spacing, based on amsmath.sty's override of LaTeX defaults\n// \\DeclareRobustCommand{\\tmspace}[3]{%\n// \\ifmmode\\mskip#1#2\\else\\kern#1#3\\fi\\relax}\n\ndefineMacro(\"\\\\tmspace\", \"\\\\TextOrMath{\\\\kern#1#3}{\\\\mskip#1#2}\\\\relax\"); // \\renewcommand{\\,}{\\tmspace+\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\n\ndefineMacro(\"\\\\,\", \"\\\\tmspace+{3mu}{.1667em}\"); // \\let\\thinspace\\,\n\ndefineMacro(\"\\\\thinspace\", \"\\\\,\"); // \\def\\>{\\mskip\\medmuskip}\n// \\renewcommand{\\:}{\\tmspace+\\medmuskip{.2222em}}\n// TODO: \\> and math mode of \\: should use \\medmuskip = 4mu plus 2mu minus 4mu\n\ndefineMacro(\"\\\\>\", \"\\\\mskip{4mu}\");\ndefineMacro(\"\\\\:\", \"\\\\tmspace+{4mu}{.2222em}\"); // \\let\\medspace\\:\n\ndefineMacro(\"\\\\medspace\", \"\\\\:\"); // \\renewcommand{\\;}{\\tmspace+\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip = 5mu plus 5mu\n\ndefineMacro(\"\\\\;\", \"\\\\tmspace+{5mu}{.2777em}\"); // \\let\\thickspace\\;\n\ndefineMacro(\"\\\\thickspace\", \"\\\\;\"); // \\renewcommand{\\!}{\\tmspace-\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\n\ndefineMacro(\"\\\\!\", \"\\\\tmspace-{3mu}{.1667em}\"); // \\let\\negthinspace\\!\n\ndefineMacro(\"\\\\negthinspace\", \"\\\\!\"); // \\newcommand{\\negmedspace}{\\tmspace-\\medmuskip{.2222em}}\n// TODO: math mode should use \\medmuskip\n\ndefineMacro(\"\\\\negmedspace\", \"\\\\tmspace-{4mu}{.2222em}\"); // \\newcommand{\\negthickspace}{\\tmspace-\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip\n\ndefineMacro(\"\\\\negthickspace\", \"\\\\tmspace-{5mu}{.277em}\"); // \\def\\enspace{\\kern.5em }\n\ndefineMacro(\"\\\\enspace\", \"\\\\kern.5em \"); // \\def\\enskip{\\hskip.5em\\relax}\n\ndefineMacro(\"\\\\enskip\", \"\\\\hskip.5em\\\\relax\"); // \\def\\quad{\\hskip1em\\relax}\n\ndefineMacro(\"\\\\quad\", \"\\\\hskip1em\\\\relax\"); // \\def\\qquad{\\hskip2em\\relax}\n\ndefineMacro(\"\\\\qquad\", \"\\\\hskip2em\\\\relax\"); // \\tag@in@display form of \\tag\n\ndefineMacro(\"\\\\tag\", \"\\\\@ifstar\\\\tag@literal\\\\tag@paren\");\ndefineMacro(\"\\\\tag@paren\", \"\\\\tag@literal{({#1})}\");\ndefineMacro(\"\\\\tag@literal\", context => {\n if (context.macros.get(\"\\\\df@tag\")) {\n throw new ParseError(\"Multiple \\\\tag\");\n }\n\n return \"\\\\gdef\\\\df@tag{\\\\text{#1}}\";\n}); // \\renewcommand{\\bmod}{\\nonscript\\mskip-\\medmuskip\\mkern5mu\\mathbin\n// {\\operator@font mod}\\penalty900\n// \\mkern5mu\\nonscript\\mskip-\\medmuskip}\n// \\newcommand{\\pod}[1]{\\allowbreak\n// \\if@display\\mkern18mu\\else\\mkern8mu\\fi(#1)}\n// \\renewcommand{\\pmod}[1]{\\pod{{\\operator@font mod}\\mkern6mu#1}}\n// \\newcommand{\\mod}[1]{\\allowbreak\\if@display\\mkern18mu\n// \\else\\mkern12mu\\fi{\\operator@font mod}\\,\\,#1}\n// TODO: math mode should use \\medmuskip = 4mu plus 2mu minus 4mu\n\ndefineMacro(\"\\\\bmod\", \"\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}\" + \"\\\\mathbin{\\\\rm mod}\" + \"\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}\");\ndefineMacro(\"\\\\pod\", \"\\\\allowbreak\" + \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern8mu}{\\\\mkern8mu}{\\\\mkern8mu}(#1)\");\ndefineMacro(\"\\\\pmod\", \"\\\\pod{{\\\\rm mod}\\\\mkern6mu#1}\");\ndefineMacro(\"\\\\mod\", \"\\\\allowbreak\" + \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern12mu}{\\\\mkern12mu}{\\\\mkern12mu}\" + \"{\\\\rm mod}\\\\,\\\\,#1\"); //////////////////////////////////////////////////////////////////////\n// LaTeX source2e\n// \\expandafter\\let\\expandafter\\@normalcr\n// \\csname\\expandafter\\@gobble\\string\\\\ \\endcsname\n// \\DeclareRobustCommand\\newline{\\@normalcr\\relax}\n\ndefineMacro(\"\\\\newline\", \"\\\\\\\\\\\\relax\"); // \\def\\TeX{T\\kern-.1667em\\lower.5ex\\hbox{E}\\kern-.125emX\\@}\n// TODO: Doesn't normally work in math mode because \\@ fails. KaTeX doesn't\n// support \\@ yet, so that's omitted, and we add \\text so that the result\n// doesn't look funny in math mode.\n\ndefineMacro(\"\\\\TeX\", \"\\\\textrm{\\\\html@mathml{\" + \"T\\\\kern-.1667em\\\\raisebox{-.5ex}{E}\\\\kern-.125emX\" + \"}{TeX}}\"); // \\DeclareRobustCommand{\\LaTeX}{L\\kern-.36em%\n// {\\sbox\\z@ T%\n// \\vbox to\\ht\\z@{\\hbox{\\check@mathfonts\n// \\fontsize\\sf@size\\z@\n// \\math@fontsfalse\\selectfont\n// A}%\n// \\vss}%\n// }%\n// \\kern-.15em%\n// \\TeX}\n// This code aligns the top of the A with the T (from the perspective of TeX's\n// boxes, though visually the A appears to extend above slightly).\n// We compute the corresponding \\raisebox when A is rendered in \\normalsize\n// \\scriptstyle, which has a scale factor of 0.7 (see Options.js).\n\nvar latexRaiseA = makeEm(fontMetricsData['Main-Regular'][\"T\".charCodeAt(0)][1] - 0.7 * fontMetricsData['Main-Regular'][\"A\".charCodeAt(0)][1]);\ndefineMacro(\"\\\\LaTeX\", \"\\\\textrm{\\\\html@mathml{\" + (\"L\\\\kern-.36em\\\\raisebox{\" + latexRaiseA + \"}{\\\\scriptstyle A}\") + \"\\\\kern-.15em\\\\TeX}{LaTeX}}\"); // New KaTeX logo based on tweaking LaTeX logo\n\ndefineMacro(\"\\\\KaTeX\", \"\\\\textrm{\\\\html@mathml{\" + (\"K\\\\kern-.17em\\\\raisebox{\" + latexRaiseA + \"}{\\\\scriptstyle A}\") + \"\\\\kern-.15em\\\\TeX}{KaTeX}}\"); // \\DeclareRobustCommand\\hspace{\\@ifstar\\@hspacer\\@hspace}\n// \\def\\@hspace#1{\\hskip #1\\relax}\n// \\def\\@hspacer#1{\\vrule \\@width\\z@\\nobreak\n// \\hskip #1\\hskip \\z@skip}\n\ndefineMacro(\"\\\\hspace\", \"\\\\@ifstar\\\\@hspacer\\\\@hspace\");\ndefineMacro(\"\\\\@hspace\", \"\\\\hskip #1\\\\relax\");\ndefineMacro(\"\\\\@hspacer\", \"\\\\rule{0pt}{0pt}\\\\hskip #1\\\\relax\"); //////////////////////////////////////////////////////////////////////\n// mathtools.sty\n//\\providecommand\\ordinarycolon{:}\n\ndefineMacro(\"\\\\ordinarycolon\", \":\"); //\\def\\vcentcolon{\\mathrel{\\mathop\\ordinarycolon}}\n//TODO(edemaine): Not yet centered. Fix via \\raisebox or #726\n\ndefineMacro(\"\\\\vcentcolon\", \"\\\\mathrel{\\\\mathop\\\\ordinarycolon}\"); // \\providecommand*\\dblcolon{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}\n\ndefineMacro(\"\\\\dblcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-.9mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2237}}\"); // \\providecommand*\\coloneqq{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}\n\ndefineMacro(\"\\\\coloneqq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}=}}\" + \"{\\\\mathop{\\\\char\\\"2254}}\"); // ≔\n// \\providecommand*\\Coloneqq{\\dblcolon\\mathrel{\\mkern-1.2mu}=}\n\ndefineMacro(\"\\\\Coloneqq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}=}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"3d}}\"); // \\providecommand*\\coloneq{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\n\ndefineMacro(\"\\\\coloneq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"2212}}\"); // \\providecommand*\\Coloneq{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\n\ndefineMacro(\"\\\\Coloneq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"2212}}\"); // \\providecommand*\\eqqcolon{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}\n\ndefineMacro(\"\\\\eqqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2255}}\"); // ≕\n// \\providecommand*\\Eqqcolon{=\\mathrel{\\mkern-1.2mu}\\dblcolon}\n\ndefineMacro(\"\\\\Eqqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}\" + \"{\\\\mathop{\\\\char\\\"3d\\\\char\\\"2237}}\"); // \\providecommand*\\eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}\n\ndefineMacro(\"\\\\eqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2239}}\"); // \\providecommand*\\Eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}\n\ndefineMacro(\"\\\\Eqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}\" + \"{\\\\mathop{\\\\char\\\"2212\\\\char\\\"2237}}\"); // \\providecommand*\\colonapprox{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}\n\ndefineMacro(\"\\\\colonapprox\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"2248}}\"); // \\providecommand*\\Colonapprox{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}\n\ndefineMacro(\"\\\\Colonapprox\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"2248}}\"); // \\providecommand*\\colonsim{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}\n\ndefineMacro(\"\\\\colonsim\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"223c}}\"); // \\providecommand*\\Colonsim{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}\n\ndefineMacro(\"\\\\Colonsim\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"223c}}\"); // Some Unicode characters are implemented with macros to mathtools functions.\n\ndefineMacro(\"\\u2237\", \"\\\\dblcolon\"); // ::\n\ndefineMacro(\"\\u2239\", \"\\\\eqcolon\"); // -:\n\ndefineMacro(\"\\u2254\", \"\\\\coloneqq\"); // :=\n\ndefineMacro(\"\\u2255\", \"\\\\eqqcolon\"); // =:\n\ndefineMacro(\"\\u2A74\", \"\\\\Coloneqq\"); // ::=\n//////////////////////////////////////////////////////////////////////\n// colonequals.sty\n// Alternate names for mathtools's macros:\n\ndefineMacro(\"\\\\ratio\", \"\\\\vcentcolon\");\ndefineMacro(\"\\\\coloncolon\", \"\\\\dblcolon\");\ndefineMacro(\"\\\\colonequals\", \"\\\\coloneqq\");\ndefineMacro(\"\\\\coloncolonequals\", \"\\\\Coloneqq\");\ndefineMacro(\"\\\\equalscolon\", \"\\\\eqqcolon\");\ndefineMacro(\"\\\\equalscoloncolon\", \"\\\\Eqqcolon\");\ndefineMacro(\"\\\\colonminus\", \"\\\\coloneq\");\ndefineMacro(\"\\\\coloncolonminus\", \"\\\\Coloneq\");\ndefineMacro(\"\\\\minuscolon\", \"\\\\eqcolon\");\ndefineMacro(\"\\\\minuscoloncolon\", \"\\\\Eqcolon\"); // \\colonapprox name is same in mathtools and colonequals.\n\ndefineMacro(\"\\\\coloncolonapprox\", \"\\\\Colonapprox\"); // \\colonsim name is same in mathtools and colonequals.\n\ndefineMacro(\"\\\\coloncolonsim\", \"\\\\Colonsim\"); // Additional macros, implemented by analogy with mathtools definitions:\n\ndefineMacro(\"\\\\simcolon\", \"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\");\ndefineMacro(\"\\\\simcoloncolon\", \"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\");\ndefineMacro(\"\\\\approxcolon\", \"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\");\ndefineMacro(\"\\\\approxcoloncolon\", \"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\"); // Present in newtxmath, pxfonts and txfonts\n\ndefineMacro(\"\\\\notni\", \"\\\\html@mathml{\\\\not\\\\ni}{\\\\mathrel{\\\\char`\\u220C}}\");\ndefineMacro(\"\\\\limsup\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,sup}\");\ndefineMacro(\"\\\\liminf\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,inf}\"); //////////////////////////////////////////////////////////////////////\n// From amsopn.sty\n\ndefineMacro(\"\\\\injlim\", \"\\\\DOTSB\\\\operatorname*{inj\\\\,lim}\");\ndefineMacro(\"\\\\projlim\", \"\\\\DOTSB\\\\operatorname*{proj\\\\,lim}\");\ndefineMacro(\"\\\\varlimsup\", \"\\\\DOTSB\\\\operatorname*{\\\\overline{lim}}\");\ndefineMacro(\"\\\\varliminf\", \"\\\\DOTSB\\\\operatorname*{\\\\underline{lim}}\");\ndefineMacro(\"\\\\varinjlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underrightarrow{lim}}\");\ndefineMacro(\"\\\\varprojlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underleftarrow{lim}}\"); //////////////////////////////////////////////////////////////////////\n// MathML alternates for KaTeX glyphs in the Unicode private area\n\ndefineMacro(\"\\\\gvertneqq\", \"\\\\html@mathml{\\\\@gvertneqq}{\\u2269}\");\ndefineMacro(\"\\\\lvertneqq\", \"\\\\html@mathml{\\\\@lvertneqq}{\\u2268}\");\ndefineMacro(\"\\\\ngeqq\", \"\\\\html@mathml{\\\\@ngeqq}{\\u2271}\");\ndefineMacro(\"\\\\ngeqslant\", \"\\\\html@mathml{\\\\@ngeqslant}{\\u2271}\");\ndefineMacro(\"\\\\nleqq\", \"\\\\html@mathml{\\\\@nleqq}{\\u2270}\");\ndefineMacro(\"\\\\nleqslant\", \"\\\\html@mathml{\\\\@nleqslant}{\\u2270}\");\ndefineMacro(\"\\\\nshortmid\", \"\\\\html@mathml{\\\\@nshortmid}{∤}\");\ndefineMacro(\"\\\\nshortparallel\", \"\\\\html@mathml{\\\\@nshortparallel}{∦}\");\ndefineMacro(\"\\\\nsubseteqq\", \"\\\\html@mathml{\\\\@nsubseteqq}{\\u2288}\");\ndefineMacro(\"\\\\nsupseteqq\", \"\\\\html@mathml{\\\\@nsupseteqq}{\\u2289}\");\ndefineMacro(\"\\\\varsubsetneq\", \"\\\\html@mathml{\\\\@varsubsetneq}{⊊}\");\ndefineMacro(\"\\\\varsubsetneqq\", \"\\\\html@mathml{\\\\@varsubsetneqq}{⫋}\");\ndefineMacro(\"\\\\varsupsetneq\", \"\\\\html@mathml{\\\\@varsupsetneq}{⊋}\");\ndefineMacro(\"\\\\varsupsetneqq\", \"\\\\html@mathml{\\\\@varsupsetneqq}{⫌}\");\ndefineMacro(\"\\\\imath\", \"\\\\html@mathml{\\\\@imath}{\\u0131}\");\ndefineMacro(\"\\\\jmath\", \"\\\\html@mathml{\\\\@jmath}{\\u0237}\"); //////////////////////////////////////////////////////////////////////\n// stmaryrd and semantic\n// The stmaryrd and semantic packages render the next four items by calling a\n// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros.\n\ndefineMacro(\"\\\\llbracket\", \"\\\\html@mathml{\" + \"\\\\mathopen{[\\\\mkern-3.2mu[}}\" + \"{\\\\mathopen{\\\\char`\\u27e6}}\");\ndefineMacro(\"\\\\rrbracket\", \"\\\\html@mathml{\" + \"\\\\mathclose{]\\\\mkern-3.2mu]}}\" + \"{\\\\mathclose{\\\\char`\\u27e7}}\");\ndefineMacro(\"\\u27e6\", \"\\\\llbracket\"); // blackboard bold [\n\ndefineMacro(\"\\u27e7\", \"\\\\rrbracket\"); // blackboard bold ]\n\ndefineMacro(\"\\\\lBrace\", \"\\\\html@mathml{\" + \"\\\\mathopen{\\\\{\\\\mkern-3.2mu[}}\" + \"{\\\\mathopen{\\\\char`\\u2983}}\");\ndefineMacro(\"\\\\rBrace\", \"\\\\html@mathml{\" + \"\\\\mathclose{]\\\\mkern-3.2mu\\\\}}}\" + \"{\\\\mathclose{\\\\char`\\u2984}}\");\ndefineMacro(\"\\u2983\", \"\\\\lBrace\"); // blackboard bold {\n\ndefineMacro(\"\\u2984\", \"\\\\rBrace\"); // blackboard bold }\n// TODO: Create variable sized versions of the last two items. I believe that\n// will require new font glyphs.\n// The stmaryrd function `\\minuso` provides a \"Plimsoll\" symbol that\n// superimposes the characters \\circ and \\mathminus. Used in chemistry.\n\ndefineMacro(\"\\\\minuso\", \"\\\\mathbin{\\\\html@mathml{\" + \"{\\\\mathrlap{\\\\mathchoice{\\\\kern{0.145em}}{\\\\kern{0.145em}}\" + \"{\\\\kern{0.1015em}}{\\\\kern{0.0725em}}\\\\circ}{-}}}\" + \"{\\\\char`⦵}}\");\ndefineMacro(\"⦵\", \"\\\\minuso\"); //////////////////////////////////////////////////////////////////////\n// texvc.sty\n// The texvc package contains macros available in mediawiki pages.\n// We omit the functions deprecated at\n// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax\n// We also omit texvc's \\O, which conflicts with \\text{\\O}\n\ndefineMacro(\"\\\\darr\", \"\\\\downarrow\");\ndefineMacro(\"\\\\dArr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\Darr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\lang\", \"\\\\langle\");\ndefineMacro(\"\\\\rang\", \"\\\\rangle\");\ndefineMacro(\"\\\\uarr\", \"\\\\uparrow\");\ndefineMacro(\"\\\\uArr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\Uarr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\N\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\R\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Z\", \"\\\\mathbb{Z}\");\ndefineMacro(\"\\\\alef\", \"\\\\aleph\");\ndefineMacro(\"\\\\alefsym\", \"\\\\aleph\");\ndefineMacro(\"\\\\Alpha\", \"\\\\mathrm{A}\");\ndefineMacro(\"\\\\Beta\", \"\\\\mathrm{B}\");\ndefineMacro(\"\\\\bull\", \"\\\\bullet\");\ndefineMacro(\"\\\\Chi\", \"\\\\mathrm{X}\");\ndefineMacro(\"\\\\clubs\", \"\\\\clubsuit\");\ndefineMacro(\"\\\\cnums\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Complex\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Dagger\", \"\\\\ddagger\");\ndefineMacro(\"\\\\diamonds\", \"\\\\diamondsuit\");\ndefineMacro(\"\\\\empty\", \"\\\\emptyset\");\ndefineMacro(\"\\\\Epsilon\", \"\\\\mathrm{E}\");\ndefineMacro(\"\\\\Eta\", \"\\\\mathrm{H}\");\ndefineMacro(\"\\\\exist\", \"\\\\exists\");\ndefineMacro(\"\\\\harr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\hArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Harr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\hearts\", \"\\\\heartsuit\");\ndefineMacro(\"\\\\image\", \"\\\\Im\");\ndefineMacro(\"\\\\infin\", \"\\\\infty\");\ndefineMacro(\"\\\\Iota\", \"\\\\mathrm{I}\");\ndefineMacro(\"\\\\isin\", \"\\\\in\");\ndefineMacro(\"\\\\Kappa\", \"\\\\mathrm{K}\");\ndefineMacro(\"\\\\larr\", \"\\\\leftarrow\");\ndefineMacro(\"\\\\lArr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\Larr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\lrarr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\lrArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Lrarr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Mu\", \"\\\\mathrm{M}\");\ndefineMacro(\"\\\\natnums\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\Nu\", \"\\\\mathrm{N}\");\ndefineMacro(\"\\\\Omicron\", \"\\\\mathrm{O}\");\ndefineMacro(\"\\\\plusmn\", \"\\\\pm\");\ndefineMacro(\"\\\\rarr\", \"\\\\rightarrow\");\ndefineMacro(\"\\\\rArr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\Rarr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\real\", \"\\\\Re\");\ndefineMacro(\"\\\\reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Rho\", \"\\\\mathrm{P}\");\ndefineMacro(\"\\\\sdot\", \"\\\\cdot\");\ndefineMacro(\"\\\\sect\", \"\\\\S\");\ndefineMacro(\"\\\\spades\", \"\\\\spadesuit\");\ndefineMacro(\"\\\\sub\", \"\\\\subset\");\ndefineMacro(\"\\\\sube\", \"\\\\subseteq\");\ndefineMacro(\"\\\\supe\", \"\\\\supseteq\");\ndefineMacro(\"\\\\Tau\", \"\\\\mathrm{T}\");\ndefineMacro(\"\\\\thetasym\", \"\\\\vartheta\"); // TODO: defineMacro(\"\\\\varcoppa\", \"\\\\\\mbox{\\\\coppa}\");\n\ndefineMacro(\"\\\\weierp\", \"\\\\wp\");\ndefineMacro(\"\\\\Zeta\", \"\\\\mathrm{Z}\"); //////////////////////////////////////////////////////////////////////\n// statmath.sty\n// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf\n\ndefineMacro(\"\\\\argmin\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,min}\");\ndefineMacro(\"\\\\argmax\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,max}\");\ndefineMacro(\"\\\\plim\", \"\\\\DOTSB\\\\mathop{\\\\operatorname{plim}}\\\\limits\"); //////////////////////////////////////////////////////////////////////\n// braket.sty\n// http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/braket/braket.pdf\n\ndefineMacro(\"\\\\bra\", \"\\\\mathinner{\\\\langle{#1}|}\");\ndefineMacro(\"\\\\ket\", \"\\\\mathinner{|{#1}\\\\rangle}\");\ndefineMacro(\"\\\\braket\", \"\\\\mathinner{\\\\langle{#1}\\\\rangle}\");\ndefineMacro(\"\\\\Bra\", \"\\\\left\\\\langle#1\\\\right|\");\ndefineMacro(\"\\\\Ket\", \"\\\\left|#1\\\\right\\\\rangle\");\n\nvar braketHelper = one => context => {\n var left = context.consumeArg().tokens;\n var middle = context.consumeArg().tokens;\n var middleDouble = context.consumeArg().tokens;\n var right = context.consumeArg().tokens;\n var oldMiddle = context.macros.get(\"|\");\n var oldMiddleDouble = context.macros.get(\"\\\\|\");\n context.macros.beginGroup();\n\n var midMacro = double => context => {\n if (one) {\n // Only modify the first instance of | or \\|\n context.macros.set(\"|\", oldMiddle);\n\n if (middleDouble.length) {\n context.macros.set(\"\\\\|\", oldMiddleDouble);\n }\n }\n\n var doubled = double;\n\n if (!double && middleDouble.length) {\n // Mimic \\@ifnextchar\n var nextToken = context.future();\n\n if (nextToken.text === \"|\") {\n context.popToken();\n doubled = true;\n }\n }\n\n return {\n tokens: doubled ? middleDouble : middle,\n numArgs: 0\n };\n };\n\n context.macros.set(\"|\", midMacro(false));\n\n if (middleDouble.length) {\n context.macros.set(\"\\\\|\", midMacro(true));\n }\n\n var arg = context.consumeArg().tokens;\n var expanded = context.expandTokens([...right, ...arg, ...left // reversed\n ]);\n context.macros.endGroup();\n return {\n tokens: expanded.reverse(),\n numArgs: 0\n };\n};\n\ndefineMacro(\"\\\\bra@ket\", braketHelper(false));\ndefineMacro(\"\\\\bra@set\", braketHelper(true));\ndefineMacro(\"\\\\Braket\", \"\\\\bra@ket{\\\\left\\\\langle}\" + \"{\\\\,\\\\middle\\\\vert\\\\,}{\\\\,\\\\middle\\\\vert\\\\,}{\\\\right\\\\rangle}\");\ndefineMacro(\"\\\\Set\", \"\\\\bra@set{\\\\left\\\\{\\\\:}\" + \"{\\\\;\\\\middle\\\\vert\\\\;}{\\\\;\\\\middle\\\\Vert\\\\;}{\\\\:\\\\right\\\\}}\");\ndefineMacro(\"\\\\set\", \"\\\\bra@set{\\\\{\\\\,}{\\\\mid}{}{\\\\,\\\\}}\"); // has no support for special || or \\|\n//////////////////////////////////////////////////////////////////////\n// actuarialangle.dtx\n\ndefineMacro(\"\\\\angln\", \"{\\\\angl n}\"); // Custom Khan Academy colors, should be moved to an optional package\n\ndefineMacro(\"\\\\blue\", \"\\\\textcolor{##6495ed}{#1}\");\ndefineMacro(\"\\\\orange\", \"\\\\textcolor{##ffa500}{#1}\");\ndefineMacro(\"\\\\pink\", \"\\\\textcolor{##ff00af}{#1}\");\ndefineMacro(\"\\\\red\", \"\\\\textcolor{##df0030}{#1}\");\ndefineMacro(\"\\\\green\", \"\\\\textcolor{##28ae7b}{#1}\");\ndefineMacro(\"\\\\gray\", \"\\\\textcolor{gray}{#1}\");\ndefineMacro(\"\\\\purple\", \"\\\\textcolor{##9d38bd}{#1}\");\ndefineMacro(\"\\\\blueA\", \"\\\\textcolor{##ccfaff}{#1}\");\ndefineMacro(\"\\\\blueB\", \"\\\\textcolor{##80f6ff}{#1}\");\ndefineMacro(\"\\\\blueC\", \"\\\\textcolor{##63d9ea}{#1}\");\ndefineMacro(\"\\\\blueD\", \"\\\\textcolor{##11accd}{#1}\");\ndefineMacro(\"\\\\blueE\", \"\\\\textcolor{##0c7f99}{#1}\");\ndefineMacro(\"\\\\tealA\", \"\\\\textcolor{##94fff5}{#1}\");\ndefineMacro(\"\\\\tealB\", \"\\\\textcolor{##26edd5}{#1}\");\ndefineMacro(\"\\\\tealC\", \"\\\\textcolor{##01d1c1}{#1}\");\ndefineMacro(\"\\\\tealD\", \"\\\\textcolor{##01a995}{#1}\");\ndefineMacro(\"\\\\tealE\", \"\\\\textcolor{##208170}{#1}\");\ndefineMacro(\"\\\\greenA\", \"\\\\textcolor{##b6ffb0}{#1}\");\ndefineMacro(\"\\\\greenB\", \"\\\\textcolor{##8af281}{#1}\");\ndefineMacro(\"\\\\greenC\", \"\\\\textcolor{##74cf70}{#1}\");\ndefineMacro(\"\\\\greenD\", \"\\\\textcolor{##1fab54}{#1}\");\ndefineMacro(\"\\\\greenE\", \"\\\\textcolor{##0d923f}{#1}\");\ndefineMacro(\"\\\\goldA\", \"\\\\textcolor{##ffd0a9}{#1}\");\ndefineMacro(\"\\\\goldB\", \"\\\\textcolor{##ffbb71}{#1}\");\ndefineMacro(\"\\\\goldC\", \"\\\\textcolor{##ff9c39}{#1}\");\ndefineMacro(\"\\\\goldD\", \"\\\\textcolor{##e07d10}{#1}\");\ndefineMacro(\"\\\\goldE\", \"\\\\textcolor{##a75a05}{#1}\");\ndefineMacro(\"\\\\redA\", \"\\\\textcolor{##fca9a9}{#1}\");\ndefineMacro(\"\\\\redB\", \"\\\\textcolor{##ff8482}{#1}\");\ndefineMacro(\"\\\\redC\", \"\\\\textcolor{##f9685d}{#1}\");\ndefineMacro(\"\\\\redD\", \"\\\\textcolor{##e84d39}{#1}\");\ndefineMacro(\"\\\\redE\", \"\\\\textcolor{##bc2612}{#1}\");\ndefineMacro(\"\\\\maroonA\", \"\\\\textcolor{##ffbde0}{#1}\");\ndefineMacro(\"\\\\maroonB\", \"\\\\textcolor{##ff92c6}{#1}\");\ndefineMacro(\"\\\\maroonC\", \"\\\\textcolor{##ed5fa6}{#1}\");\ndefineMacro(\"\\\\maroonD\", \"\\\\textcolor{##ca337c}{#1}\");\ndefineMacro(\"\\\\maroonE\", \"\\\\textcolor{##9e034e}{#1}\");\ndefineMacro(\"\\\\purpleA\", \"\\\\textcolor{##ddd7ff}{#1}\");\ndefineMacro(\"\\\\purpleB\", \"\\\\textcolor{##c6b9fc}{#1}\");\ndefineMacro(\"\\\\purpleC\", \"\\\\textcolor{##aa87ff}{#1}\");\ndefineMacro(\"\\\\purpleD\", \"\\\\textcolor{##7854ab}{#1}\");\ndefineMacro(\"\\\\purpleE\", \"\\\\textcolor{##543b78}{#1}\");\ndefineMacro(\"\\\\mintA\", \"\\\\textcolor{##f5f9e8}{#1}\");\ndefineMacro(\"\\\\mintB\", \"\\\\textcolor{##edf2df}{#1}\");\ndefineMacro(\"\\\\mintC\", \"\\\\textcolor{##e0e5cc}{#1}\");\ndefineMacro(\"\\\\grayA\", \"\\\\textcolor{##f6f7f7}{#1}\");\ndefineMacro(\"\\\\grayB\", \"\\\\textcolor{##f0f1f2}{#1}\");\ndefineMacro(\"\\\\grayC\", \"\\\\textcolor{##e3e5e6}{#1}\");\ndefineMacro(\"\\\\grayD\", \"\\\\textcolor{##d6d8da}{#1}\");\ndefineMacro(\"\\\\grayE\", \"\\\\textcolor{##babec2}{#1}\");\ndefineMacro(\"\\\\grayF\", \"\\\\textcolor{##888d93}{#1}\");\ndefineMacro(\"\\\\grayG\", \"\\\\textcolor{##626569}{#1}\");\ndefineMacro(\"\\\\grayH\", \"\\\\textcolor{##3b3e40}{#1}\");\ndefineMacro(\"\\\\grayI\", \"\\\\textcolor{##21242c}{#1}\");\ndefineMacro(\"\\\\kaBlue\", \"\\\\textcolor{##314453}{#1}\");\ndefineMacro(\"\\\\kaGreen\", \"\\\\textcolor{##71B307}{#1}\");\n\n/**\n * This file contains the “gullet” where macros are expanded\n * until only non-macro tokens remain.\n */\n// List of commands that act like macros but aren't defined as a macro,\n// function, or symbol. Used in `isDefined`.\nvar implicitCommands = {\n \"^\": true,\n // Parser.js\n \"_\": true,\n // Parser.js\n \"\\\\limits\": true,\n // Parser.js\n \"\\\\nolimits\": true // Parser.js\n\n};\nclass MacroExpander {\n constructor(input, settings, mode) {\n this.settings = void 0;\n this.expansionCount = void 0;\n this.lexer = void 0;\n this.macros = void 0;\n this.stack = void 0;\n this.mode = void 0;\n this.settings = settings;\n this.expansionCount = 0;\n this.feed(input); // Make new global namespace\n\n this.macros = new Namespace(macros, settings.macros);\n this.mode = mode;\n this.stack = []; // contains tokens in REVERSE order\n }\n /**\n * Feed a new input string to the same MacroExpander\n * (with existing macros etc.).\n */\n\n\n feed(input) {\n this.lexer = new Lexer(input, this.settings);\n }\n /**\n * Switches between \"text\" and \"math\" modes.\n */\n\n\n switchMode(newMode) {\n this.mode = newMode;\n }\n /**\n * Start a new group nesting within all namespaces.\n */\n\n\n beginGroup() {\n this.macros.beginGroup();\n }\n /**\n * End current group nesting within all namespaces.\n */\n\n\n endGroup() {\n this.macros.endGroup();\n }\n /**\n * Ends all currently nested groups (if any), restoring values before the\n * groups began. Useful in case of an error in the middle of parsing.\n */\n\n\n endGroups() {\n this.macros.endGroups();\n }\n /**\n * Returns the topmost token on the stack, without expanding it.\n * Similar in behavior to TeX's `\\futurelet`.\n */\n\n\n future() {\n if (this.stack.length === 0) {\n this.pushToken(this.lexer.lex());\n }\n\n return this.stack[this.stack.length - 1];\n }\n /**\n * Remove and return the next unexpanded token.\n */\n\n\n popToken() {\n this.future(); // ensure non-empty stack\n\n return this.stack.pop();\n }\n /**\n * Add a given token to the token stack. In particular, this get be used\n * to put back a token returned from one of the other methods.\n */\n\n\n pushToken(token) {\n this.stack.push(token);\n }\n /**\n * Append an array of tokens to the token stack.\n */\n\n\n pushTokens(tokens) {\n this.stack.push(...tokens);\n }\n /**\n * Find an macro argument without expanding tokens and append the array of\n * tokens to the token stack. Uses Token as a container for the result.\n */\n\n\n scanArgument(isOptional) {\n var start;\n var end;\n var tokens;\n\n if (isOptional) {\n this.consumeSpaces(); // \\@ifnextchar gobbles any space following it\n\n if (this.future().text !== \"[\") {\n return null;\n }\n\n start = this.popToken(); // don't include [ in tokens\n\n ({\n tokens,\n end\n } = this.consumeArg([\"]\"]));\n } else {\n ({\n tokens,\n start,\n end\n } = this.consumeArg());\n } // indicate the end of an argument\n\n\n this.pushToken(new Token(\"EOF\", end.loc));\n this.pushTokens(tokens);\n return new Token(\"\", SourceLocation.range(start, end));\n }\n /**\n * Consume all following space tokens, without expansion.\n */\n\n\n consumeSpaces() {\n for (;;) {\n var token = this.future();\n\n if (token.text === \" \") {\n this.stack.pop();\n } else {\n break;\n }\n }\n }\n /**\n * Consume an argument from the token stream, and return the resulting array\n * of tokens and start/end token.\n */\n\n\n consumeArg(delims) {\n // The argument for a delimited parameter is the shortest (possibly\n // empty) sequence of tokens with properly nested {...} groups that is\n // followed ... by this particular list of non-parameter tokens.\n // The argument for an undelimited parameter is the next nonblank\n // token, unless that token is ‘{’, when the argument will be the\n // entire {...} group that follows.\n var tokens = [];\n var isDelimited = delims && delims.length > 0;\n\n if (!isDelimited) {\n // Ignore spaces between arguments. As the TeXbook says:\n // \"After you have said ‘\\def\\row#1#2{...}’, you are allowed to\n // put spaces between the arguments (e.g., ‘\\row x n’), because\n // TeX doesn’t use single spaces as undelimited arguments.\"\n this.consumeSpaces();\n }\n\n var start = this.future();\n var tok;\n var depth = 0;\n var match = 0;\n\n do {\n tok = this.popToken();\n tokens.push(tok);\n\n if (tok.text === \"{\") {\n ++depth;\n } else if (tok.text === \"}\") {\n --depth;\n\n if (depth === -1) {\n throw new ParseError(\"Extra }\", tok);\n }\n } else if (tok.text === \"EOF\") {\n throw new ParseError(\"Unexpected end of input in a macro argument\" + \", expected '\" + (delims && isDelimited ? delims[match] : \"}\") + \"'\", tok);\n }\n\n if (delims && isDelimited) {\n if ((depth === 0 || depth === 1 && delims[match] === \"{\") && tok.text === delims[match]) {\n ++match;\n\n if (match === delims.length) {\n // don't include delims in tokens\n tokens.splice(-match, match);\n break;\n }\n } else {\n match = 0;\n }\n }\n } while (depth !== 0 || isDelimited); // If the argument found ... has the form ‘{<nested tokens>}’,\n // ... the outermost braces enclosing the argument are removed\n\n\n if (start.text === \"{\" && tokens[tokens.length - 1].text === \"}\") {\n tokens.pop();\n tokens.shift();\n }\n\n tokens.reverse(); // to fit in with stack order\n\n return {\n tokens,\n start,\n end: tok\n };\n }\n /**\n * Consume the specified number of (delimited) arguments from the token\n * stream and return the resulting array of arguments.\n */\n\n\n consumeArgs(numArgs, delimiters) {\n if (delimiters) {\n if (delimiters.length !== numArgs + 1) {\n throw new ParseError(\"The length of delimiters doesn't match the number of args!\");\n }\n\n var delims = delimiters[0];\n\n for (var i = 0; i < delims.length; i++) {\n var tok = this.popToken();\n\n if (delims[i] !== tok.text) {\n throw new ParseError(\"Use of the macro doesn't match its definition\", tok);\n }\n }\n }\n\n var args = [];\n\n for (var _i = 0; _i < numArgs; _i++) {\n args.push(this.consumeArg(delimiters && delimiters[_i + 1]).tokens);\n }\n\n return args;\n }\n /**\n * Increment `expansionCount` by the specified amount.\n * Throw an error if it exceeds `maxExpand`.\n */\n\n\n countExpansion(amount) {\n this.expansionCount += amount;\n\n if (this.expansionCount > this.settings.maxExpand) {\n throw new ParseError(\"Too many expansions: infinite loop or \" + \"need to increase maxExpand setting\");\n }\n }\n /**\n * Expand the next token only once if possible.\n *\n * If the token is expanded, the resulting tokens will be pushed onto\n * the stack in reverse order, and the number of such tokens will be\n * returned. This number might be zero or positive.\n *\n * If not, the return value is `false`, and the next token remains at the\n * top of the stack.\n *\n * In either case, the next token will be on the top of the stack,\n * or the stack will be empty (in case of empty expansion\n * and no other tokens).\n *\n * Used to implement `expandAfterFuture` and `expandNextToken`.\n *\n * If expandableOnly, only expandable tokens are expanded and\n * an undefined control sequence results in an error.\n */\n\n\n expandOnce(expandableOnly) {\n var topToken = this.popToken();\n var name = topToken.text;\n var expansion = !topToken.noexpand ? this._getExpansion(name) : null;\n\n if (expansion == null || expandableOnly && expansion.unexpandable) {\n if (expandableOnly && expansion == null && name[0] === \"\\\\\" && !this.isDefined(name)) {\n throw new ParseError(\"Undefined control sequence: \" + name);\n }\n\n this.pushToken(topToken);\n return false;\n }\n\n this.countExpansion(1);\n var tokens = expansion.tokens;\n var args = this.consumeArgs(expansion.numArgs, expansion.delimiters);\n\n if (expansion.numArgs) {\n // paste arguments in place of the placeholders\n tokens = tokens.slice(); // make a shallow copy\n\n for (var i = tokens.length - 1; i >= 0; --i) {\n var tok = tokens[i];\n\n if (tok.text === \"#\") {\n if (i === 0) {\n throw new ParseError(\"Incomplete placeholder at end of macro body\", tok);\n }\n\n tok = tokens[--i]; // next token on stack\n\n if (tok.text === \"#\") {\n // ## → #\n tokens.splice(i + 1, 1); // drop first #\n } else if (/^[1-9]$/.test(tok.text)) {\n // replace the placeholder with the indicated argument\n tokens.splice(i, 2, ...args[+tok.text - 1]);\n } else {\n throw new ParseError(\"Not a valid argument number\", tok);\n }\n }\n }\n } // Concatenate expansion onto top of stack.\n\n\n this.pushTokens(tokens);\n return tokens.length;\n }\n /**\n * Expand the next token only once (if possible), and return the resulting\n * top token on the stack (without removing anything from the stack).\n * Similar in behavior to TeX's `\\expandafter\\futurelet`.\n * Equivalent to expandOnce() followed by future().\n */\n\n\n expandAfterFuture() {\n this.expandOnce();\n return this.future();\n }\n /**\n * Recursively expand first token, then return first non-expandable token.\n */\n\n\n expandNextToken() {\n for (;;) {\n if (this.expandOnce() === false) {\n // fully expanded\n var token = this.stack.pop(); // the token after \\noexpand is interpreted as if its meaning\n // were ‘\\relax’\n\n if (token.treatAsRelax) {\n token.text = \"\\\\relax\";\n }\n\n return token;\n }\n } // Flow unable to figure out that this pathway is impossible.\n // https://github.com/facebook/flow/issues/4808\n\n\n throw new Error(); // eslint-disable-line no-unreachable\n }\n /**\n * Fully expand the given macro name and return the resulting list of\n * tokens, or return `undefined` if no such macro is defined.\n */\n\n\n expandMacro(name) {\n return this.macros.has(name) ? this.expandTokens([new Token(name)]) : undefined;\n }\n /**\n * Fully expand the given token stream and return the resulting list of\n * tokens. Note that the input tokens are in reverse order, but the\n * output tokens are in forward order.\n */\n\n\n expandTokens(tokens) {\n var output = [];\n var oldStackLength = this.stack.length;\n this.pushTokens(tokens);\n\n while (this.stack.length > oldStackLength) {\n // Expand only expandable tokens\n if (this.expandOnce(true) === false) {\n // fully expanded\n var token = this.stack.pop();\n\n if (token.treatAsRelax) {\n // the expansion of \\noexpand is the token itself\n token.noexpand = false;\n token.treatAsRelax = false;\n }\n\n output.push(token);\n }\n } // Count all of these tokens as additional expansions, to prevent\n // exponential blowup from linearly many \\edef's.\n\n\n this.countExpansion(output.length);\n return output;\n }\n /**\n * Fully expand the given macro name and return the result as a string,\n * or return `undefined` if no such macro is defined.\n */\n\n\n expandMacroAsText(name) {\n var tokens = this.expandMacro(name);\n\n if (tokens) {\n return tokens.map(token => token.text).join(\"\");\n } else {\n return tokens;\n }\n }\n /**\n * Returns the expanded macro as a reversed array of tokens and a macro\n * argument count. Or returns `null` if no such macro.\n */\n\n\n _getExpansion(name) {\n var definition = this.macros.get(name);\n\n if (definition == null) {\n // mainly checking for undefined here\n return definition;\n } // If a single character has an associated catcode other than 13\n // (active character), then don't expand it.\n\n\n if (name.length === 1) {\n var catcode = this.lexer.catcodes[name];\n\n if (catcode != null && catcode !== 13) {\n return;\n }\n }\n\n var expansion = typeof definition === \"function\" ? definition(this) : definition;\n\n if (typeof expansion === \"string\") {\n var numArgs = 0;\n\n if (expansion.indexOf(\"#\") !== -1) {\n var stripped = expansion.replace(/##/g, \"\");\n\n while (stripped.indexOf(\"#\" + (numArgs + 1)) !== -1) {\n ++numArgs;\n }\n }\n\n var bodyLexer = new Lexer(expansion, this.settings);\n var tokens = [];\n var tok = bodyLexer.lex();\n\n while (tok.text !== \"EOF\") {\n tokens.push(tok);\n tok = bodyLexer.lex();\n }\n\n tokens.reverse(); // to fit in with stack using push and pop\n\n var expanded = {\n tokens,\n numArgs\n };\n return expanded;\n }\n\n return expansion;\n }\n /**\n * Determine whether a command is currently \"defined\" (has some\n * functionality), meaning that it's a macro (in the current group),\n * a function, a symbol, or one of the special commands listed in\n * `implicitCommands`.\n */\n\n\n isDefined(name) {\n return this.macros.has(name) || functions.hasOwnProperty(name) || symbols.math.hasOwnProperty(name) || symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name);\n }\n /**\n * Determine whether a command is expandable.\n */\n\n\n isExpandable(name) {\n var macro = this.macros.get(name);\n return macro != null ? typeof macro === \"string\" || typeof macro === \"function\" || !macro.unexpandable : functions.hasOwnProperty(name) && !functions[name].primitive;\n }\n\n}\n\n// Helpers for Parser.js handling of Unicode (sub|super)script characters.\nvar unicodeSubRegEx = /^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/;\nvar uSubsAndSups = Object.freeze({\n '₊': '+',\n '₋': '-',\n '₌': '=',\n '₍': '(',\n '₎': ')',\n '₀': '0',\n '₁': '1',\n '₂': '2',\n '₃': '3',\n '₄': '4',\n '₅': '5',\n '₆': '6',\n '₇': '7',\n '₈': '8',\n '₉': '9',\n '\\u2090': 'a',\n '\\u2091': 'e',\n '\\u2095': 'h',\n '\\u1D62': 'i',\n '\\u2C7C': 'j',\n '\\u2096': 'k',\n '\\u2097': 'l',\n '\\u2098': 'm',\n '\\u2099': 'n',\n '\\u2092': 'o',\n '\\u209A': 'p',\n '\\u1D63': 'r',\n '\\u209B': 's',\n '\\u209C': 't',\n '\\u1D64': 'u',\n '\\u1D65': 'v',\n '\\u2093': 'x',\n '\\u1D66': 'β',\n '\\u1D67': 'γ',\n '\\u1D68': 'ρ',\n '\\u1D69': '\\u03d5',\n '\\u1D6A': 'χ',\n '⁺': '+',\n '⁻': '-',\n '⁼': '=',\n '⁽': '(',\n '⁾': ')',\n '⁰': '0',\n '¹': '1',\n '²': '2',\n '³': '3',\n '⁴': '4',\n '⁵': '5',\n '⁶': '6',\n '⁷': '7',\n '⁸': '8',\n '⁹': '9',\n '\\u1D2C': 'A',\n '\\u1D2E': 'B',\n '\\u1D30': 'D',\n '\\u1D31': 'E',\n '\\u1D33': 'G',\n '\\u1D34': 'H',\n '\\u1D35': 'I',\n '\\u1D36': 'J',\n '\\u1D37': 'K',\n '\\u1D38': 'L',\n '\\u1D39': 'M',\n '\\u1D3A': 'N',\n '\\u1D3C': 'O',\n '\\u1D3E': 'P',\n '\\u1D3F': 'R',\n '\\u1D40': 'T',\n '\\u1D41': 'U',\n '\\u2C7D': 'V',\n '\\u1D42': 'W',\n '\\u1D43': 'a',\n '\\u1D47': 'b',\n '\\u1D9C': 'c',\n '\\u1D48': 'd',\n '\\u1D49': 'e',\n '\\u1DA0': 'f',\n '\\u1D4D': 'g',\n '\\u02B0': 'h',\n '\\u2071': 'i',\n '\\u02B2': 'j',\n '\\u1D4F': 'k',\n '\\u02E1': 'l',\n '\\u1D50': 'm',\n '\\u207F': 'n',\n '\\u1D52': 'o',\n '\\u1D56': 'p',\n '\\u02B3': 'r',\n '\\u02E2': 's',\n '\\u1D57': 't',\n '\\u1D58': 'u',\n '\\u1D5B': 'v',\n '\\u02B7': 'w',\n '\\u02E3': 'x',\n '\\u02B8': 'y',\n '\\u1DBB': 'z',\n '\\u1D5D': 'β',\n '\\u1D5E': 'γ',\n '\\u1D5F': 'δ',\n '\\u1D60': '\\u03d5',\n '\\u1D61': 'χ',\n '\\u1DBF': 'θ'\n});\n\n/* eslint no-constant-condition:0 */\n\nvar unicodeAccents = {\n \"́\": {\n \"text\": \"\\\\'\",\n \"math\": \"\\\\acute\"\n },\n \"̀\": {\n \"text\": \"\\\\`\",\n \"math\": \"\\\\grave\"\n },\n \"̈\": {\n \"text\": \"\\\\\\\"\",\n \"math\": \"\\\\ddot\"\n },\n \"̃\": {\n \"text\": \"\\\\~\",\n \"math\": \"\\\\tilde\"\n },\n \"̄\": {\n \"text\": \"\\\\=\",\n \"math\": \"\\\\bar\"\n },\n \"̆\": {\n \"text\": \"\\\\u\",\n \"math\": \"\\\\breve\"\n },\n \"̌\": {\n \"text\": \"\\\\v\",\n \"math\": \"\\\\check\"\n },\n \"̂\": {\n \"text\": \"\\\\^\",\n \"math\": \"\\\\hat\"\n },\n \"̇\": {\n \"text\": \"\\\\.\",\n \"math\": \"\\\\dot\"\n },\n \"̊\": {\n \"text\": \"\\\\r\",\n \"math\": \"\\\\mathring\"\n },\n \"̋\": {\n \"text\": \"\\\\H\"\n },\n \"̧\": {\n \"text\": \"\\\\c\"\n }\n};\nvar unicodeSymbols = {\n \"á\": \"á\",\n \"à\": \"à\",\n \"ä\": \"ä\",\n \"ǟ\": \"ǟ\",\n \"ã\": \"ã\",\n \"ā\": \"ā\",\n \"ă\": \"ă\",\n \"ắ\": \"ắ\",\n \"ằ\": \"ằ\",\n \"ẵ\": \"ẵ\",\n \"ǎ\": \"ǎ\",\n \"â\": \"â\",\n \"ấ\": \"ấ\",\n \"ầ\": \"ầ\",\n \"ẫ\": \"ẫ\",\n \"ȧ\": \"ȧ\",\n \"ǡ\": \"ǡ\",\n \"å\": \"å\",\n \"ǻ\": \"ǻ\",\n \"ḃ\": \"ḃ\",\n \"ć\": \"ć\",\n \"ḉ\": \"ḉ\",\n \"č\": \"č\",\n \"ĉ\": \"ĉ\",\n \"ċ\": \"ċ\",\n \"ç\": \"ç\",\n \"ď\": \"ď\",\n \"ḋ\": \"ḋ\",\n \"ḑ\": \"ḑ\",\n \"é\": \"é\",\n \"è\": \"è\",\n \"ë\": \"ë\",\n \"ẽ\": \"ẽ\",\n \"ē\": \"ē\",\n \"ḗ\": \"ḗ\",\n \"ḕ\": \"ḕ\",\n \"ĕ\": \"ĕ\",\n \"ḝ\": \"ḝ\",\n \"ě\": \"ě\",\n \"ê\": \"ê\",\n \"ế\": \"ế\",\n \"ề\": \"ề\",\n \"ễ\": \"ễ\",\n \"ė\": \"ė\",\n \"ȩ\": \"ȩ\",\n \"ḟ\": \"ḟ\",\n \"ǵ\": \"ǵ\",\n \"ḡ\": \"ḡ\",\n \"ğ\": \"ğ\",\n \"ǧ\": \"ǧ\",\n \"ĝ\": \"ĝ\",\n \"ġ\": \"ġ\",\n \"ģ\": \"ģ\",\n \"ḧ\": \"ḧ\",\n \"ȟ\": \"ȟ\",\n \"ĥ\": \"ĥ\",\n \"ḣ\": \"ḣ\",\n \"ḩ\": \"ḩ\",\n \"í\": \"í\",\n \"ì\": \"ì\",\n \"ï\": \"ï\",\n \"ḯ\": \"ḯ\",\n \"ĩ\": \"ĩ\",\n \"ī\": \"ī\",\n \"ĭ\": \"ĭ\",\n \"ǐ\": \"ǐ\",\n \"î\": \"î\",\n \"ǰ\": \"ǰ\",\n \"ĵ\": \"ĵ\",\n \"ḱ\": \"ḱ\",\n \"ǩ\": \"ǩ\",\n \"ķ\": \"ķ\",\n \"ĺ\": \"ĺ\",\n \"ľ\": \"ľ\",\n \"ļ\": \"ļ\",\n \"ḿ\": \"ḿ\",\n \"ṁ\": \"ṁ\",\n \"ń\": \"ń\",\n \"ǹ\": \"ǹ\",\n \"ñ\": \"ñ\",\n \"ň\": \"ň\",\n \"ṅ\": \"ṅ\",\n \"ņ\": \"ņ\",\n \"ó\": \"ó\",\n \"ò\": \"ò\",\n \"ö\": \"ö\",\n \"ȫ\": \"ȫ\",\n \"õ\": \"õ\",\n \"ṍ\": \"ṍ\",\n \"ṏ\": \"ṏ\",\n \"ȭ\": \"ȭ\",\n \"ō\": \"ō\",\n \"ṓ\": \"ṓ\",\n \"ṑ\": \"ṑ\",\n \"ŏ\": \"ŏ\",\n \"ǒ\": \"ǒ\",\n \"ô\": \"ô\",\n \"ố\": \"ố\",\n \"ồ\": \"ồ\",\n \"ỗ\": \"ỗ\",\n \"ȯ\": \"ȯ\",\n \"ȱ\": \"ȱ\",\n \"ő\": \"ő\",\n \"ṕ\": \"ṕ\",\n \"ṗ\": \"ṗ\",\n \"ŕ\": \"ŕ\",\n \"ř\": \"ř\",\n \"ṙ\": \"ṙ\",\n \"ŗ\": \"ŗ\",\n \"ś\": \"ś\",\n \"ṥ\": \"ṥ\",\n \"š\": \"š\",\n \"ṧ\": \"ṧ\",\n \"ŝ\": \"ŝ\",\n \"ṡ\": \"ṡ\",\n \"ş\": \"ş\",\n \"ẗ\": \"ẗ\",\n \"ť\": \"ť\",\n \"ṫ\": \"ṫ\",\n \"ţ\": \"ţ\",\n \"ú\": \"ú\",\n \"ù\": \"ù\",\n \"ü\": \"ü\",\n \"ǘ\": \"ǘ\",\n \"ǜ\": \"ǜ\",\n \"ǖ\": \"ǖ\",\n \"ǚ\": \"ǚ\",\n \"ũ\": \"ũ\",\n \"ṹ\": \"ṹ\",\n \"ū\": \"ū\",\n \"ṻ\": \"ṻ\",\n \"ŭ\": \"ŭ\",\n \"ǔ\": \"ǔ\",\n \"û\": \"û\",\n \"ů\": \"ů\",\n \"ű\": \"ű\",\n \"ṽ\": \"ṽ\",\n \"ẃ\": \"ẃ\",\n \"ẁ\": \"ẁ\",\n \"ẅ\": \"ẅ\",\n \"ŵ\": \"ŵ\",\n \"ẇ\": \"ẇ\",\n \"ẘ\": \"ẘ\",\n \"ẍ\": \"ẍ\",\n \"ẋ\": \"ẋ\",\n \"ý\": \"ý\",\n \"ỳ\": \"ỳ\",\n \"ÿ\": \"ÿ\",\n \"ỹ\": \"ỹ\",\n \"ȳ\": \"ȳ\",\n \"ŷ\": \"ŷ\",\n \"ẏ\": \"ẏ\",\n \"ẙ\": \"ẙ\",\n \"ź\": \"ź\",\n \"ž\": \"ž\",\n \"ẑ\": \"ẑ\",\n \"ż\": \"ż\",\n \"Á\": \"Á\",\n \"À\": \"À\",\n \"Ä\": \"Ä\",\n \"Ǟ\": \"Ǟ\",\n \"Ã\": \"Ã\",\n \"Ā\": \"Ā\",\n \"Ă\": \"Ă\",\n \"Ắ\": \"Ắ\",\n \"Ằ\": \"Ằ\",\n \"Ẵ\": \"Ẵ\",\n \"Ǎ\": \"Ǎ\",\n \"Â\": \"Â\",\n \"Ấ\": \"Ấ\",\n \"Ầ\": \"Ầ\",\n \"Ẫ\": \"Ẫ\",\n \"Ȧ\": \"Ȧ\",\n \"Ǡ\": \"Ǡ\",\n \"Å\": \"Å\",\n \"Ǻ\": \"Ǻ\",\n \"Ḃ\": \"Ḃ\",\n \"Ć\": \"Ć\",\n \"Ḉ\": \"Ḉ\",\n \"Č\": \"Č\",\n \"Ĉ\": \"Ĉ\",\n \"Ċ\": \"Ċ\",\n \"Ç\": \"Ç\",\n \"Ď\": \"Ď\",\n \"Ḋ\": \"Ḋ\",\n \"Ḑ\": \"Ḑ\",\n \"É\": \"É\",\n \"È\": \"È\",\n \"Ë\": \"Ë\",\n \"Ẽ\": \"Ẽ\",\n \"Ē\": \"Ē\",\n \"Ḗ\": \"Ḗ\",\n \"Ḕ\": \"Ḕ\",\n \"Ĕ\": \"Ĕ\",\n \"Ḝ\": \"Ḝ\",\n \"Ě\": \"Ě\",\n \"Ê\": \"Ê\",\n \"Ế\": \"Ế\",\n \"Ề\": \"Ề\",\n \"Ễ\": \"Ễ\",\n \"Ė\": \"Ė\",\n \"Ȩ\": \"Ȩ\",\n \"Ḟ\": \"Ḟ\",\n \"Ǵ\": \"Ǵ\",\n \"Ḡ\": \"Ḡ\",\n \"Ğ\": \"Ğ\",\n \"Ǧ\": \"Ǧ\",\n \"Ĝ\": \"Ĝ\",\n \"Ġ\": \"Ġ\",\n \"Ģ\": \"Ģ\",\n \"Ḧ\": \"Ḧ\",\n \"Ȟ\": \"Ȟ\",\n \"Ĥ\": \"Ĥ\",\n \"Ḣ\": \"Ḣ\",\n \"Ḩ\": \"Ḩ\",\n \"Í\": \"Í\",\n \"Ì\": \"Ì\",\n \"Ï\": \"Ï\",\n \"Ḯ\": \"Ḯ\",\n \"Ĩ\": \"Ĩ\",\n \"Ī\": \"Ī\",\n \"Ĭ\": \"Ĭ\",\n \"Ǐ\": \"Ǐ\",\n \"Î\": \"Î\",\n \"İ\": \"İ\",\n \"Ĵ\": \"Ĵ\",\n \"Ḱ\": \"Ḱ\",\n \"Ǩ\": \"Ǩ\",\n \"Ķ\": \"Ķ\",\n \"Ĺ\": \"Ĺ\",\n \"Ľ\": \"Ľ\",\n \"Ļ\": \"Ļ\",\n \"Ḿ\": \"Ḿ\",\n \"Ṁ\": \"Ṁ\",\n \"Ń\": \"Ń\",\n \"Ǹ\": \"Ǹ\",\n \"Ñ\": \"Ñ\",\n \"Ň\": \"Ň\",\n \"Ṅ\": \"Ṅ\",\n \"Ņ\": \"Ņ\",\n \"Ó\": \"Ó\",\n \"Ò\": \"Ò\",\n \"Ö\": \"Ö\",\n \"Ȫ\": \"Ȫ\",\n \"Õ\": \"Õ\",\n \"Ṍ\": \"Ṍ\",\n \"Ṏ\": \"Ṏ\",\n \"Ȭ\": \"Ȭ\",\n \"Ō\": \"Ō\",\n \"Ṓ\": \"Ṓ\",\n \"Ṑ\": \"Ṑ\",\n \"Ŏ\": \"Ŏ\",\n \"Ǒ\": \"Ǒ\",\n \"Ô\": \"Ô\",\n \"Ố\": \"Ố\",\n \"Ồ\": \"Ồ\",\n \"Ỗ\": \"Ỗ\",\n \"Ȯ\": \"Ȯ\",\n \"Ȱ\": \"Ȱ\",\n \"Ő\": \"Ő\",\n \"Ṕ\": \"Ṕ\",\n \"Ṗ\": \"Ṗ\",\n \"Ŕ\": \"Ŕ\",\n \"Ř\": \"Ř\",\n \"Ṙ\": \"Ṙ\",\n \"Ŗ\": \"Ŗ\",\n \"Ś\": \"Ś\",\n \"Ṥ\": \"Ṥ\",\n \"Š\": \"Š\",\n \"Ṧ\": \"Ṧ\",\n \"Ŝ\": \"Ŝ\",\n \"Ṡ\": \"Ṡ\",\n \"Ş\": \"Ş\",\n \"Ť\": \"Ť\",\n \"Ṫ\": \"Ṫ\",\n \"Ţ\": \"Ţ\",\n \"Ú\": \"Ú\",\n \"Ù\": \"Ù\",\n \"Ü\": \"Ü\",\n \"Ǘ\": \"Ǘ\",\n \"Ǜ\": \"Ǜ\",\n \"Ǖ\": \"Ǖ\",\n \"Ǚ\": \"Ǚ\",\n \"Ũ\": \"Ũ\",\n \"Ṹ\": \"Ṹ\",\n \"Ū\": \"Ū\",\n \"Ṻ\": \"Ṻ\",\n \"Ŭ\": \"Ŭ\",\n \"Ǔ\": \"Ǔ\",\n \"Û\": \"Û\",\n \"Ů\": \"Ů\",\n \"Ű\": \"Ű\",\n \"Ṽ\": \"Ṽ\",\n \"Ẃ\": \"Ẃ\",\n \"Ẁ\": \"Ẁ\",\n \"Ẅ\": \"Ẅ\",\n \"Ŵ\": \"Ŵ\",\n \"Ẇ\": \"Ẇ\",\n \"Ẍ\": \"Ẍ\",\n \"Ẋ\": \"Ẋ\",\n \"Ý\": \"Ý\",\n \"Ỳ\": \"Ỳ\",\n \"Ÿ\": \"Ÿ\",\n \"Ỹ\": \"Ỹ\",\n \"Ȳ\": \"Ȳ\",\n \"Ŷ\": \"Ŷ\",\n \"Ẏ\": \"Ẏ\",\n \"Ź\": \"Ź\",\n \"Ž\": \"Ž\",\n \"Ẑ\": \"Ẑ\",\n \"Ż\": \"Ż\",\n \"ά\": \"ά\",\n \"ὰ\": \"ὰ\",\n \"ᾱ\": \"ᾱ\",\n \"ᾰ\": \"ᾰ\",\n \"έ\": \"έ\",\n \"ὲ\": \"ὲ\",\n \"ή\": \"ή\",\n \"ὴ\": \"ὴ\",\n \"ί\": \"ί\",\n \"ὶ\": \"ὶ\",\n \"ϊ\": \"ϊ\",\n \"ΐ\": \"ΐ\",\n \"ῒ\": \"ῒ\",\n \"ῑ\": \"ῑ\",\n \"ῐ\": \"ῐ\",\n \"ό\": \"ό\",\n \"ὸ\": \"ὸ\",\n \"ύ\": \"ύ\",\n \"ὺ\": \"ὺ\",\n \"ϋ\": \"ϋ\",\n \"ΰ\": \"ΰ\",\n \"ῢ\": \"ῢ\",\n \"ῡ\": \"ῡ\",\n \"ῠ\": \"ῠ\",\n \"ώ\": \"ώ\",\n \"ὼ\": \"ὼ\",\n \"Ύ\": \"Ύ\",\n \"Ὺ\": \"Ὺ\",\n \"Ϋ\": \"Ϋ\",\n \"Ῡ\": \"Ῡ\",\n \"Ῠ\": \"Ῠ\",\n \"Ώ\": \"Ώ\",\n \"Ὼ\": \"Ὼ\"\n};\n\n/**\n * This file contains the parser used to parse out a TeX expression from the\n * input. Since TeX isn't context-free, standard parsers don't work particularly\n * well.\n *\n * The strategy of this parser is as such:\n *\n * The main functions (the `.parse...` ones) take a position in the current\n * parse string to parse tokens from. The lexer (found in Lexer.js, stored at\n * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When\n * individual tokens are needed at a position, the lexer is called to pull out a\n * token, which is then used.\n *\n * The parser has a property called \"mode\" indicating the mode that\n * the parser is currently in. Currently it has to be one of \"math\" or\n * \"text\", which denotes whether the current environment is a math-y\n * one or a text-y one (e.g. inside \\text). Currently, this serves to\n * limit the functions which can be used in text mode.\n *\n * The main functions then return an object which contains the useful data that\n * was parsed at its given point, and a new position at the end of the parsed\n * data. The main functions can call each other and continue the parsing by\n * using the returned position as a new starting point.\n *\n * There are also extra `.handle...` functions, which pull out some reused\n * functionality into self-contained functions.\n *\n * The functions return ParseNodes.\n */\nclass Parser {\n constructor(input, settings) {\n this.mode = void 0;\n this.gullet = void 0;\n this.settings = void 0;\n this.leftrightDepth = void 0;\n this.nextToken = void 0;\n // Start in math mode\n this.mode = \"math\"; // Create a new macro expander (gullet) and (indirectly via that) also a\n // new lexer (mouth) for this parser (stomach, in the language of TeX)\n\n this.gullet = new MacroExpander(input, settings, this.mode); // Store the settings for use in parsing\n\n this.settings = settings; // Count leftright depth (for \\middle errors)\n\n this.leftrightDepth = 0;\n }\n /**\n * Checks a result to make sure it has the right type, and throws an\n * appropriate error otherwise.\n */\n\n\n expect(text, consume) {\n if (consume === void 0) {\n consume = true;\n }\n\n if (this.fetch().text !== text) {\n throw new ParseError(\"Expected '\" + text + \"', got '\" + this.fetch().text + \"'\", this.fetch());\n }\n\n if (consume) {\n this.consume();\n }\n }\n /**\n * Discards the current lookahead token, considering it consumed.\n */\n\n\n consume() {\n this.nextToken = null;\n }\n /**\n * Return the current lookahead token, or if there isn't one (at the\n * beginning, or if the previous lookahead token was consume()d),\n * fetch the next token as the new lookahead token and return it.\n */\n\n\n fetch() {\n if (this.nextToken == null) {\n this.nextToken = this.gullet.expandNextToken();\n }\n\n return this.nextToken;\n }\n /**\n * Switches between \"text\" and \"math\" modes.\n */\n\n\n switchMode(newMode) {\n this.mode = newMode;\n this.gullet.switchMode(newMode);\n }\n /**\n * Main parsing function, which parses an entire input.\n */\n\n\n parse() {\n if (!this.settings.globalGroup) {\n // Create a group namespace for the math expression.\n // (LaTeX creates a new group for every $...$, $$...$$, \\[...\\].)\n this.gullet.beginGroup();\n } // Use old \\color behavior (same as LaTeX's \\textcolor) if requested.\n // We do this within the group for the math expression, so it doesn't\n // pollute settings.macros.\n\n\n if (this.settings.colorIsTextColor) {\n this.gullet.macros.set(\"\\\\color\", \"\\\\textcolor\");\n }\n\n try {\n // Try to parse the input\n var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end\n\n this.expect(\"EOF\"); // End the group namespace for the expression\n\n if (!this.settings.globalGroup) {\n this.gullet.endGroup();\n }\n\n return parse; // Close any leftover groups in case of a parse error.\n } finally {\n this.gullet.endGroups();\n }\n }\n /**\n * Fully parse a separate sequence of tokens as a separate job.\n * Tokens should be specified in reverse order, as in a MacroDefinition.\n */\n\n\n subparse(tokens) {\n // Save the next token from the current job.\n var oldToken = this.nextToken;\n this.consume(); // Run the new job, terminating it with an excess '}'\n\n this.gullet.pushToken(new Token(\"}\"));\n this.gullet.pushTokens(tokens);\n var parse = this.parseExpression(false);\n this.expect(\"}\"); // Restore the next token from the current job.\n\n this.nextToken = oldToken;\n return parse;\n }\n\n /**\n * Parses an \"expression\", which is a list of atoms.\n *\n * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This\n * happens when functions have higher precedence han infix\n * nodes in implicit parses.\n *\n * `breakOnTokenText`: The text of the token that the expression should end\n * with, or `null` if something else should end the\n * expression.\n */\n parseExpression(breakOnInfix, breakOnTokenText) {\n var body = []; // Keep adding atoms to the body until we can't parse any more atoms (either\n // we reached the end, a }, or a \\right)\n\n while (true) {\n // Ignore spaces in math mode\n if (this.mode === \"math\") {\n this.consumeSpaces();\n }\n\n var lex = this.fetch();\n\n if (Parser.endOfExpression.indexOf(lex.text) !== -1) {\n break;\n }\n\n if (breakOnTokenText && lex.text === breakOnTokenText) {\n break;\n }\n\n if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) {\n break;\n }\n\n var atom = this.parseAtom(breakOnTokenText);\n\n if (!atom) {\n break;\n } else if (atom.type === \"internal\") {\n // Internal nodes do not appear in parse tree\n continue;\n }\n\n body.push(atom);\n }\n\n if (this.mode === \"text\") {\n this.formLigatures(body);\n }\n\n return this.handleInfixNodes(body);\n }\n /**\n * Rewrites infix operators such as \\over with corresponding commands such\n * as \\frac.\n *\n * There can only be one infix operator per group. If there's more than one\n * then the expression is ambiguous. This can be resolved by adding {}.\n */\n\n\n handleInfixNodes(body) {\n var overIndex = -1;\n var funcName;\n\n for (var i = 0; i < body.length; i++) {\n if (body[i].type === \"infix\") {\n if (overIndex !== -1) {\n throw new ParseError(\"only one infix operator per group\", body[i].token);\n }\n\n overIndex = i;\n funcName = body[i].replaceWith;\n }\n }\n\n if (overIndex !== -1 && funcName) {\n var numerNode;\n var denomNode;\n var numerBody = body.slice(0, overIndex);\n var denomBody = body.slice(overIndex + 1);\n\n if (numerBody.length === 1 && numerBody[0].type === \"ordgroup\") {\n numerNode = numerBody[0];\n } else {\n numerNode = {\n type: \"ordgroup\",\n mode: this.mode,\n body: numerBody\n };\n }\n\n if (denomBody.length === 1 && denomBody[0].type === \"ordgroup\") {\n denomNode = denomBody[0];\n } else {\n denomNode = {\n type: \"ordgroup\",\n mode: this.mode,\n body: denomBody\n };\n }\n\n var node;\n\n if (funcName === \"\\\\\\\\abovefrac\") {\n node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []);\n } else {\n node = this.callFunction(funcName, [numerNode, denomNode], []);\n }\n\n return [node];\n } else {\n return body;\n }\n }\n /**\n * Handle a subscript or superscript with nice errors.\n */\n\n\n handleSupSubscript(name // For error reporting.\n ) {\n var symbolToken = this.fetch();\n var symbol = symbolToken.text;\n this.consume();\n this.consumeSpaces(); // ignore spaces before sup/subscript argument\n // Skip over allowed internal nodes such as \\relax\n\n var group;\n\n do {\n var _group;\n\n group = this.parseGroup(name);\n } while (((_group = group) == null ? void 0 : _group.type) === \"internal\");\n\n if (!group) {\n throw new ParseError(\"Expected group after '\" + symbol + \"'\", symbolToken);\n }\n\n return group;\n }\n /**\n * Converts the textual input of an unsupported command into a text node\n * contained within a color node whose color is determined by errorColor\n */\n\n\n formatUnsupportedCmd(text) {\n var textordArray = [];\n\n for (var i = 0; i < text.length; i++) {\n textordArray.push({\n type: \"textord\",\n mode: \"text\",\n text: text[i]\n });\n }\n\n var textNode = {\n type: \"text\",\n mode: this.mode,\n body: textordArray\n };\n var colorNode = {\n type: \"color\",\n mode: this.mode,\n color: this.settings.errorColor,\n body: [textNode]\n };\n return colorNode;\n }\n /**\n * Parses a group with optional super/subscripts.\n */\n\n\n parseAtom(breakOnTokenText) {\n // The body of an atom is an implicit group, so that things like\n // \\left(x\\right)^2 work correctly.\n var base = this.parseGroup(\"atom\", breakOnTokenText); // Internal nodes (e.g. \\relax) cannot support super/subscripts.\n // Instead we will pick up super/subscripts with blank base next round.\n\n if ((base == null ? void 0 : base.type) === \"internal\") {\n return base;\n } // In text mode, we don't have superscripts or subscripts\n\n\n if (this.mode === \"text\") {\n return base;\n } // Note that base may be empty (i.e. null) at this point.\n\n\n var superscript;\n var subscript;\n\n while (true) {\n // Guaranteed in math mode, so eat any spaces first.\n this.consumeSpaces(); // Lex the first token\n\n var lex = this.fetch();\n\n if (lex.text === \"\\\\limits\" || lex.text === \"\\\\nolimits\") {\n // We got a limit control\n if (base && base.type === \"op\") {\n var limits = lex.text === \"\\\\limits\";\n base.limits = limits;\n base.alwaysHandleSupSub = true;\n } else if (base && base.type === \"operatorname\") {\n if (base.alwaysHandleSupSub) {\n base.limits = lex.text === \"\\\\limits\";\n }\n } else {\n throw new ParseError(\"Limit controls must follow a math operator\", lex);\n }\n\n this.consume();\n } else if (lex.text === \"^\") {\n // We got a superscript start\n if (superscript) {\n throw new ParseError(\"Double superscript\", lex);\n }\n\n superscript = this.handleSupSubscript(\"superscript\");\n } else if (lex.text === \"_\") {\n // We got a subscript start\n if (subscript) {\n throw new ParseError(\"Double subscript\", lex);\n }\n\n subscript = this.handleSupSubscript(\"subscript\");\n } else if (lex.text === \"'\") {\n // We got a prime\n if (superscript) {\n throw new ParseError(\"Double superscript\", lex);\n }\n\n var prime = {\n type: \"textord\",\n mode: this.mode,\n text: \"\\\\prime\"\n }; // Many primes can be grouped together, so we handle this here\n\n var primes = [prime];\n this.consume(); // Keep lexing tokens until we get something that's not a prime\n\n while (this.fetch().text === \"'\") {\n // For each one, add another prime to the list\n primes.push(prime);\n this.consume();\n } // If there's a superscript following the primes, combine that\n // superscript in with the primes.\n\n\n if (this.fetch().text === \"^\") {\n primes.push(this.handleSupSubscript(\"superscript\"));\n } // Put everything into an ordgroup as the superscript\n\n\n superscript = {\n type: \"ordgroup\",\n mode: this.mode,\n body: primes\n };\n } else if (uSubsAndSups[lex.text]) {\n // A Unicode subscript or superscript character.\n // We treat these similarly to the unicode-math package.\n // So we render a string of Unicode (sub|super)scripts the\n // same as a (sub|super)script of regular characters.\n var isSub = unicodeSubRegEx.test(lex.text);\n var subsupTokens = [];\n subsupTokens.push(new Token(uSubsAndSups[lex.text]));\n this.consume(); // Continue fetching tokens to fill out the string.\n\n while (true) {\n var token = this.fetch().text;\n\n if (!uSubsAndSups[token]) {\n break;\n }\n\n if (unicodeSubRegEx.test(token) !== isSub) {\n break;\n }\n\n subsupTokens.unshift(new Token(uSubsAndSups[token]));\n this.consume();\n } // Now create a (sub|super)script.\n\n\n var body = this.subparse(subsupTokens);\n\n if (isSub) {\n subscript = {\n type: \"ordgroup\",\n mode: \"math\",\n body\n };\n } else {\n superscript = {\n type: \"ordgroup\",\n mode: \"math\",\n body\n };\n }\n } else {\n // If it wasn't ^, _, or ', stop parsing super/subscripts\n break;\n }\n } // Base must be set if superscript or subscript are set per logic above,\n // but need to check here for type check to pass.\n\n\n if (superscript || subscript) {\n // If we got either a superscript or subscript, create a supsub\n return {\n type: \"supsub\",\n mode: this.mode,\n base: base,\n sup: superscript,\n sub: subscript\n };\n } else {\n // Otherwise return the original body\n return base;\n }\n }\n /**\n * Parses an entire function, including its base and all of its arguments.\n */\n\n\n parseFunction(breakOnTokenText, name // For determining its context\n ) {\n var token = this.fetch();\n var func = token.text;\n var funcData = functions[func];\n\n if (!funcData) {\n return null;\n }\n\n this.consume(); // consume command token\n\n if (name && name !== \"atom\" && !funcData.allowedInArgument) {\n throw new ParseError(\"Got function '\" + func + \"' with no arguments\" + (name ? \" as \" + name : \"\"), token);\n } else if (this.mode === \"text\" && !funcData.allowedInText) {\n throw new ParseError(\"Can't use function '\" + func + \"' in text mode\", token);\n } else if (this.mode === \"math\" && funcData.allowedInMath === false) {\n throw new ParseError(\"Can't use function '\" + func + \"' in math mode\", token);\n }\n\n var {\n args,\n optArgs\n } = this.parseArguments(func, funcData);\n return this.callFunction(func, args, optArgs, token, breakOnTokenText);\n }\n /**\n * Call a function handler with a suitable context and arguments.\n */\n\n\n callFunction(name, args, optArgs, token, breakOnTokenText) {\n var context = {\n funcName: name,\n parser: this,\n token,\n breakOnTokenText\n };\n var func = functions[name];\n\n if (func && func.handler) {\n return func.handler(context, args, optArgs);\n } else {\n throw new ParseError(\"No function handler for \" + name);\n }\n }\n /**\n * Parses the arguments of a function or environment\n */\n\n\n parseArguments(func, // Should look like \"\\name\" or \"\\begin{name}\".\n funcData) {\n var totalArgs = funcData.numArgs + funcData.numOptionalArgs;\n\n if (totalArgs === 0) {\n return {\n args: [],\n optArgs: []\n };\n }\n\n var args = [];\n var optArgs = [];\n\n for (var i = 0; i < totalArgs; i++) {\n var argType = funcData.argTypes && funcData.argTypes[i];\n var isOptional = i < funcData.numOptionalArgs;\n\n if (funcData.primitive && argType == null || // \\sqrt expands into primitive if optional argument doesn't exist\n funcData.type === \"sqrt\" && i === 1 && optArgs[0] == null) {\n argType = \"primitive\";\n }\n\n var arg = this.parseGroupOfType(\"argument to '\" + func + \"'\", argType, isOptional);\n\n if (isOptional) {\n optArgs.push(arg);\n } else if (arg != null) {\n args.push(arg);\n } else {\n // should be unreachable\n throw new ParseError(\"Null argument, please report this as a bug\");\n }\n }\n\n return {\n args,\n optArgs\n };\n }\n /**\n * Parses a group when the mode is changing.\n */\n\n\n parseGroupOfType(name, type, optional) {\n switch (type) {\n case \"color\":\n return this.parseColorGroup(optional);\n\n case \"size\":\n return this.parseSizeGroup(optional);\n\n case \"url\":\n return this.parseUrlGroup(optional);\n\n case \"math\":\n case \"text\":\n return this.parseArgumentGroup(optional, type);\n\n case \"hbox\":\n {\n // hbox argument type wraps the argument in the equivalent of\n // \\hbox, which is like \\text but switching to \\textstyle size.\n var group = this.parseArgumentGroup(optional, \"text\");\n return group != null ? {\n type: \"styling\",\n mode: group.mode,\n body: [group],\n style: \"text\" // simulate \\textstyle\n\n } : null;\n }\n\n case \"raw\":\n {\n var token = this.parseStringGroup(\"raw\", optional);\n return token != null ? {\n type: \"raw\",\n mode: \"text\",\n string: token.text\n } : null;\n }\n\n case \"primitive\":\n {\n if (optional) {\n throw new ParseError(\"A primitive argument cannot be optional\");\n }\n\n var _group2 = this.parseGroup(name);\n\n if (_group2 == null) {\n throw new ParseError(\"Expected group as \" + name, this.fetch());\n }\n\n return _group2;\n }\n\n case \"original\":\n case null:\n case undefined:\n return this.parseArgumentGroup(optional);\n\n default:\n throw new ParseError(\"Unknown group type as \" + name, this.fetch());\n }\n }\n /**\n * Discard any space tokens, fetching the next non-space token.\n */\n\n\n consumeSpaces() {\n while (this.fetch().text === \" \") {\n this.consume();\n }\n }\n /**\n * Parses a group, essentially returning the string formed by the\n * brace-enclosed tokens plus some position information.\n */\n\n\n parseStringGroup(modeName, // Used to describe the mode in error messages.\n optional) {\n var argToken = this.gullet.scanArgument(optional);\n\n if (argToken == null) {\n return null;\n }\n\n var str = \"\";\n var nextToken;\n\n while ((nextToken = this.fetch()).text !== \"EOF\") {\n str += nextToken.text;\n this.consume();\n }\n\n this.consume(); // consume the end of the argument\n\n argToken.text = str;\n return argToken;\n }\n /**\n * Parses a regex-delimited group: the largest sequence of tokens\n * whose concatenated strings match `regex`. Returns the string\n * formed by the tokens plus some position information.\n */\n\n\n parseRegexGroup(regex, modeName // Used to describe the mode in error messages.\n ) {\n var firstToken = this.fetch();\n var lastToken = firstToken;\n var str = \"\";\n var nextToken;\n\n while ((nextToken = this.fetch()).text !== \"EOF\" && regex.test(str + nextToken.text)) {\n lastToken = nextToken;\n str += lastToken.text;\n this.consume();\n }\n\n if (str === \"\") {\n throw new ParseError(\"Invalid \" + modeName + \": '\" + firstToken.text + \"'\", firstToken);\n }\n\n return firstToken.range(lastToken, str);\n }\n /**\n * Parses a color description.\n */\n\n\n parseColorGroup(optional) {\n var res = this.parseStringGroup(\"color\", optional);\n\n if (res == null) {\n return null;\n }\n\n var match = /^(#[a-f0-9]{3,4}|#[a-f0-9]{6}|#[a-f0-9]{8}|[a-f0-9]{6}|[a-z]+)$/i.exec(res.text);\n\n if (!match) {\n throw new ParseError(\"Invalid color: '\" + res.text + \"'\", res);\n }\n\n var color = match[0];\n\n if (/^[0-9a-f]{6}$/i.test(color)) {\n // We allow a 6-digit HTML color spec without a leading \"#\".\n // This follows the xcolor package's HTML color model.\n // Predefined color names are all missed by this RegEx pattern.\n color = \"#\" + color;\n }\n\n return {\n type: \"color-token\",\n mode: this.mode,\n color\n };\n }\n /**\n * Parses a size specification, consisting of magnitude and unit.\n */\n\n\n parseSizeGroup(optional) {\n var res;\n var isBlank = false; // don't expand before parseStringGroup\n\n this.gullet.consumeSpaces();\n\n if (!optional && this.gullet.future().text !== \"{\") {\n res = this.parseRegexGroup(/^[-+]? *(?:$|\\d+|\\d+\\.\\d*|\\.\\d*) *[a-z]{0,2} *$/, \"size\");\n } else {\n res = this.parseStringGroup(\"size\", optional);\n }\n\n if (!res) {\n return null;\n }\n\n if (!optional && res.text.length === 0) {\n // Because we've tested for what is !optional, this block won't\n // affect \\kern, \\hspace, etc. It will capture the mandatory arguments\n // to \\genfrac and \\above.\n res.text = \"0pt\"; // Enable \\above{}\n\n isBlank = true; // This is here specifically for \\genfrac\n }\n\n var match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(res.text);\n\n if (!match) {\n throw new ParseError(\"Invalid size: '\" + res.text + \"'\", res);\n }\n\n var data = {\n number: +(match[1] + match[2]),\n // sign + magnitude, cast to number\n unit: match[3]\n };\n\n if (!validUnit(data)) {\n throw new ParseError(\"Invalid unit: '\" + data.unit + \"'\", res);\n }\n\n return {\n type: \"size\",\n mode: this.mode,\n value: data,\n isBlank\n };\n }\n /**\n * Parses an URL, checking escaped letters and allowed protocols,\n * and setting the catcode of % as an active character (as in \\hyperref).\n */\n\n\n parseUrlGroup(optional) {\n this.gullet.lexer.setCatcode(\"%\", 13); // active character\n\n this.gullet.lexer.setCatcode(\"~\", 12); // other character\n\n var res = this.parseStringGroup(\"url\", optional);\n this.gullet.lexer.setCatcode(\"%\", 14); // comment character\n\n this.gullet.lexer.setCatcode(\"~\", 13); // active character\n\n if (res == null) {\n return null;\n } // hyperref package allows backslashes alone in href, but doesn't\n // generate valid links in such cases; we interpret this as\n // \"undefined\" behaviour, and keep them as-is. Some browser will\n // replace backslashes with forward slashes.\n\n\n var url = res.text.replace(/\\\\([#$%&~_^{}])/g, '$1');\n return {\n type: \"url\",\n mode: this.mode,\n url\n };\n }\n /**\n * Parses an argument with the mode specified.\n */\n\n\n parseArgumentGroup(optional, mode) {\n var argToken = this.gullet.scanArgument(optional);\n\n if (argToken == null) {\n return null;\n }\n\n var outerMode = this.mode;\n\n if (mode) {\n // Switch to specified mode\n this.switchMode(mode);\n }\n\n this.gullet.beginGroup();\n var expression = this.parseExpression(false, \"EOF\"); // TODO: find an alternative way to denote the end\n\n this.expect(\"EOF\"); // expect the end of the argument\n\n this.gullet.endGroup();\n var result = {\n type: \"ordgroup\",\n mode: this.mode,\n loc: argToken.loc,\n body: expression\n };\n\n if (mode) {\n // Switch mode back\n this.switchMode(outerMode);\n }\n\n return result;\n }\n /**\n * Parses an ordinary group, which is either a single nucleus (like \"x\")\n * or an expression in braces (like \"{x+y}\") or an implicit group, a group\n * that starts at the current position, and ends right before a higher explicit\n * group ends, or at EOF.\n */\n\n\n parseGroup(name, // For error reporting.\n breakOnTokenText) {\n var firstToken = this.fetch();\n var text = firstToken.text;\n var result; // Try to parse an open brace or \\begingroup\n\n if (text === \"{\" || text === \"\\\\begingroup\") {\n this.consume();\n var groupEnd = text === \"{\" ? \"}\" : \"\\\\endgroup\";\n this.gullet.beginGroup(); // If we get a brace, parse an expression\n\n var expression = this.parseExpression(false, groupEnd);\n var lastToken = this.fetch();\n this.expect(groupEnd); // Check that we got a matching closing brace\n\n this.gullet.endGroup();\n result = {\n type: \"ordgroup\",\n mode: this.mode,\n loc: SourceLocation.range(firstToken, lastToken),\n body: expression,\n // A group formed by \\begingroup...\\endgroup is a semi-simple group\n // which doesn't affect spacing in math mode, i.e., is transparent.\n // https://tex.stackexchange.com/questions/1930/when-should-one-\n // use-begingroup-instead-of-bgroup\n semisimple: text === \"\\\\begingroup\" || undefined\n };\n } else {\n // If there exists a function with this name, parse the function.\n // Otherwise, just return a nucleus\n result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol();\n\n if (result == null && text[0] === \"\\\\\" && !implicitCommands.hasOwnProperty(text)) {\n if (this.settings.throwOnError) {\n throw new ParseError(\"Undefined control sequence: \" + text, firstToken);\n }\n\n result = this.formatUnsupportedCmd(text);\n this.consume();\n }\n }\n\n return result;\n }\n /**\n * Form ligature-like combinations of characters for text mode.\n * This includes inputs like \"--\", \"---\", \"``\" and \"''\".\n * The result will simply replace multiple textord nodes with a single\n * character in each value by a single textord node having multiple\n * characters in its value. The representation is still ASCII source.\n * The group will be modified in place.\n */\n\n\n formLigatures(group) {\n var n = group.length - 1;\n\n for (var i = 0; i < n; ++i) {\n var a = group[i]; // $FlowFixMe: Not every node type has a `text` property.\n\n var v = a.text;\n\n if (v === \"-\" && group[i + 1].text === \"-\") {\n if (i + 1 < n && group[i + 2].text === \"-\") {\n group.splice(i, 3, {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(a, group[i + 2]),\n text: \"---\"\n });\n n -= 2;\n } else {\n group.splice(i, 2, {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(a, group[i + 1]),\n text: \"--\"\n });\n n -= 1;\n }\n }\n\n if ((v === \"'\" || v === \"`\") && group[i + 1].text === v) {\n group.splice(i, 2, {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(a, group[i + 1]),\n text: v + v\n });\n n -= 1;\n }\n }\n }\n /**\n * Parse a single symbol out of the string. Here, we handle single character\n * symbols and special functions like \\verb.\n */\n\n\n parseSymbol() {\n var nucleus = this.fetch();\n var text = nucleus.text;\n\n if (/^\\\\verb[^a-zA-Z]/.test(text)) {\n this.consume();\n var arg = text.slice(5);\n var star = arg.charAt(0) === \"*\";\n\n if (star) {\n arg = arg.slice(1);\n } // Lexer's tokenRegex is constructed to always have matching\n // first/last characters.\n\n\n if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) {\n throw new ParseError(\"\\\\verb assertion failed --\\n please report what input caused this bug\");\n }\n\n arg = arg.slice(1, -1); // remove first and last char\n\n return {\n type: \"verb\",\n mode: \"text\",\n body: arg,\n star\n };\n } // At this point, we should have a symbol, possibly with accents.\n // First expand any accented base symbol according to unicodeSymbols.\n\n\n if (unicodeSymbols.hasOwnProperty(text[0]) && !symbols[this.mode][text[0]]) {\n // This behavior is not strict (XeTeX-compatible) in math mode.\n if (this.settings.strict && this.mode === \"math\") {\n this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Accented Unicode text character \\\"\" + text[0] + \"\\\" used in \" + \"math mode\", nucleus);\n }\n\n text = unicodeSymbols[text[0]] + text.slice(1);\n } // Strip off any combining characters\n\n\n var match = combiningDiacriticalMarksEndRegex.exec(text);\n\n if (match) {\n text = text.substring(0, match.index);\n\n if (text === 'i') {\n text = '\\u0131'; // dotless i, in math and text mode\n } else if (text === 'j') {\n text = '\\u0237'; // dotless j, in math and text mode\n }\n } // Recognize base symbol\n\n\n var symbol;\n\n if (symbols[this.mode][text]) {\n if (this.settings.strict && this.mode === 'math' && extraLatin.indexOf(text) >= 0) {\n this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Latin-1/Unicode text character \\\"\" + text[0] + \"\\\" used in \" + \"math mode\", nucleus);\n }\n\n var group = symbols[this.mode][text].group;\n var loc = SourceLocation.range(nucleus);\n var s;\n\n if (ATOMS.hasOwnProperty(group)) {\n // $FlowFixMe\n var family = group;\n s = {\n type: \"atom\",\n mode: this.mode,\n family,\n loc,\n text\n };\n } else {\n // $FlowFixMe\n s = {\n type: group,\n mode: this.mode,\n loc,\n text\n };\n } // $FlowFixMe\n\n\n symbol = s;\n } else if (text.charCodeAt(0) >= 0x80) {\n // no symbol for e.g. ^\n if (this.settings.strict) {\n if (!supportedCodepoint(text.charCodeAt(0))) {\n this.settings.reportNonstrict(\"unknownSymbol\", \"Unrecognized Unicode character \\\"\" + text[0] + \"\\\"\" + (\" (\" + text.charCodeAt(0) + \")\"), nucleus);\n } else if (this.mode === \"math\") {\n this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Unicode text character \\\"\" + text[0] + \"\\\" used in math mode\", nucleus);\n }\n } // All nonmathematical Unicode characters are rendered as if they\n // are in text mode (wrapped in \\text) because that's what it\n // takes to render them in LaTeX. Setting `mode: this.mode` is\n // another natural choice (the user requested math mode), but\n // this makes it more difficult for getCharacterMetrics() to\n // distinguish Unicode characters without metrics and those for\n // which we want to simulate the letter M.\n\n\n symbol = {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(nucleus),\n text\n };\n } else {\n return null; // EOF, ^, _, {, }, etc.\n }\n\n this.consume(); // Transform combining characters into accents\n\n if (match) {\n for (var i = 0; i < match[0].length; i++) {\n var accent = match[0][i];\n\n if (!unicodeAccents[accent]) {\n throw new ParseError(\"Unknown accent ' \" + accent + \"'\", nucleus);\n }\n\n var command = unicodeAccents[accent][this.mode] || unicodeAccents[accent].text;\n\n if (!command) {\n throw new ParseError(\"Accent \" + accent + \" unsupported in \" + this.mode + \" mode\", nucleus);\n }\n\n symbol = {\n type: \"accent\",\n mode: this.mode,\n loc: SourceLocation.range(nucleus),\n label: command,\n isStretchy: false,\n isShifty: true,\n // $FlowFixMe\n base: symbol\n };\n }\n } // $FlowFixMe\n\n\n return symbol;\n }\n\n}\nParser.endOfExpression = [\"}\", \"\\\\endgroup\", \"\\\\end\", \"\\\\right\", \"&\"];\n\n/**\n * Provides a single function for parsing an expression using a Parser\n * TODO(emily): Remove this\n */\n\n/**\n * Parses an expression using a Parser, then returns the parsed result.\n */\nvar parseTree = function parseTree(toParse, settings) {\n if (!(typeof toParse === 'string' || toParse instanceof String)) {\n throw new TypeError('KaTeX can only parse string typed expression');\n }\n\n var parser = new Parser(toParse, settings); // Blank out any \\df@tag to avoid spurious \"Duplicate \\tag\" errors\n\n delete parser.gullet.macros.current[\"\\\\df@tag\"];\n var tree = parser.parse(); // Prevent a color definition from persisting between calls to katex.render().\n\n delete parser.gullet.macros.current[\"\\\\current@color\"];\n delete parser.gullet.macros.current[\"\\\\color\"]; // If the input used \\tag, it will set the \\df@tag macro to the tag.\n // In this case, we separately parse the tag and wrap the tree.\n\n if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n if (!settings.displayMode) {\n throw new ParseError(\"\\\\tag works only in display equations\");\n }\n\n tree = [{\n type: \"tag\",\n mode: \"text\",\n body: tree,\n tag: parser.subparse([new Token(\"\\\\df@tag\")])\n }];\n }\n\n return tree;\n};\n\n/* eslint no-console:0 */\n\n/**\n * Parse and build an expression, and place that expression in the DOM node\n * given.\n */\nvar render = function render(expression, baseNode, options) {\n baseNode.textContent = \"\";\n var node = renderToDomTree(expression, options).toNode();\n baseNode.appendChild(node);\n}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and\n// disable rendering.\n\n\nif (typeof document !== \"undefined\") {\n if (document.compatMode !== \"CSS1Compat\") {\n typeof console !== \"undefined\" && console.warn(\"Warning: KaTeX doesn't work in quirks mode. Make sure your \" + \"website has a suitable doctype.\");\n\n render = function render() {\n throw new ParseError(\"KaTeX doesn't work in quirks mode.\");\n };\n }\n}\n/**\n * Parse and build an expression, and return the markup for that.\n */\n\n\nvar renderToString = function renderToString(expression, options) {\n var markup = renderToDomTree(expression, options).toMarkup();\n return markup;\n};\n/**\n * Parse an expression and return the parse tree.\n */\n\n\nvar generateParseTree = function generateParseTree(expression, options) {\n var settings = new Settings(options);\n return parseTree(expression, settings);\n};\n/**\n * If the given error is a KaTeX ParseError and options.throwOnError is false,\n * renders the invalid LaTeX as a span with hover title giving the KaTeX\n * error message. Otherwise, simply throws the error.\n */\n\n\nvar renderError = function renderError(error, expression, options) {\n if (options.throwOnError || !(error instanceof ParseError)) {\n throw error;\n }\n\n var node = buildCommon.makeSpan([\"katex-error\"], [new SymbolNode(expression)]);\n node.setAttribute(\"title\", error.toString());\n node.setAttribute(\"style\", \"color:\" + options.errorColor);\n return node;\n};\n/**\n * Generates and returns the katex build tree. This is used for advanced\n * use cases (like rendering to custom output).\n */\n\n\nvar renderToDomTree = function renderToDomTree(expression, options) {\n var settings = new Settings(options);\n\n try {\n var tree = parseTree(expression, settings);\n return buildTree(tree, expression, settings);\n } catch (error) {\n return renderError(error, expression, settings);\n }\n};\n/**\n * Generates and returns the katex build tree, with just HTML (no MathML).\n * This is used for advanced use cases (like rendering to custom output).\n */\n\n\nvar renderToHTMLTree = function renderToHTMLTree(expression, options) {\n var settings = new Settings(options);\n\n try {\n var tree = parseTree(expression, settings);\n return buildHTMLTree(tree, expression, settings);\n } catch (error) {\n return renderError(error, expression, settings);\n }\n};\n\nvar version = \"0.16.27\";\nvar __domTree = {\n Span,\n Anchor,\n SymbolNode,\n SvgNode,\n PathNode,\n LineNode\n}; // ESM exports\n\nvar katex = {\n /**\n * Current KaTeX version\n */\n version,\n\n /**\n * Renders the given LaTeX into an HTML+MathML combination, and adds\n * it as a child to the specified DOM node.\n */\n render,\n\n /**\n * Renders the given LaTeX into an HTML+MathML combination string,\n * for sending to the client.\n */\n renderToString,\n\n /**\n * KaTeX error, usually during parsing.\n */\n ParseError,\n\n /**\n * The schema of Settings\n */\n SETTINGS_SCHEMA,\n\n /**\n * Parses the given LaTeX into KaTeX's internal parse tree structure,\n * without rendering to HTML or MathML.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __parse: generateParseTree,\n\n /**\n * Renders the given LaTeX into an HTML+MathML internal DOM tree\n * representation, without flattening that representation to a string.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __renderToDomTree: renderToDomTree,\n\n /**\n * Renders the given LaTeX into an HTML internal DOM tree representation,\n * without MathML and without flattening that representation to a string.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __renderToHTMLTree: renderToHTMLTree,\n\n /**\n * extends internal font metrics object with a new object\n * each key in the new object represents a font name\n */\n __setFontMetrics: setFontMetrics,\n\n /**\n * adds a new symbol to builtin symbols table\n */\n __defineSymbol: defineSymbol,\n\n /**\n * adds a new function to builtin function list,\n * which directly produce parse tree elements\n * and have their own html/mathml builders\n */\n __defineFunction: defineFunction,\n\n /**\n * adds a new macro to builtin macro list\n */\n __defineMacro: defineMacro,\n\n /**\n * Expose the dom tree node types, which can be useful for type checking nodes.\n *\n * NOTE: These methods are not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __domTree\n};\n\nexport { ParseError, SETTINGS_SCHEMA, defineFunction as __defineFunction, defineMacro as __defineMacro, defineSymbol as __defineSymbol, __domTree, generateParseTree as __parse, renderToDomTree as __renderToDomTree, renderToHTMLTree as __renderToHTMLTree, setFontMetrics as __setFontMetrics, katex as default, render, renderToString, version };\n","import { tooltipFactory, TooltipProvider } from '@milkdown/kit/plugin/tooltip';\nimport { NodeSelection, TextSelection } from '@milkdown/kit/prose/state';\nimport { defineComponent, computed, h, Fragment, ref, shallowRef, createApp } from 'vue';\nimport { createSlice } from '@milkdown/kit/ctx';\nimport { Icon } from '@milkdown/kit/component';\nimport { commandsCtx, editorCtx, EditorStatus } from '@milkdown/kit/core';\nimport clsx from 'clsx';\nimport { toggleLinkCommand } from '@milkdown/kit/component/link-tooltip';\nimport { toggleStrongCommand, isMarkSelectedCommand, strongSchema, toggleEmphasisCommand, emphasisSchema, toggleInlineCodeCommand, inlineCodeSchema, isNodeSelectedCommand, linkSchema } from '@milkdown/kit/preset/commonmark';\nimport { toggleStrikethroughCommand, strikethroughSchema } from '@milkdown/kit/preset/gfm';\nimport { findNodeInSelection } from '@milkdown/kit/prose';\nimport { $nodeSchema, $command } from '@milkdown/kit/utils';\nimport katex from 'katex';\n\ncreateSlice([], \"FeaturesCtx\");\ncreateSlice({}, \"CrepeCtx\");\nfunction useCrepeFeatures(ctx) {\n return ctx.use(\"FeaturesCtx\");\n}\nfunction crepeFeatureConfig(feature) {\n return (ctx) => {\n useCrepeFeatures(ctx).update((features) => {\n if (features.includes(feature)) {\n return features;\n }\n return [...features, feature];\n });\n };\n}\n\nvar CrepeFeature = /* @__PURE__ */ ((CrepeFeature2) => {\n CrepeFeature2[\"CodeMirror\"] = \"code-mirror\";\n CrepeFeature2[\"ListItem\"] = \"list-item\";\n CrepeFeature2[\"LinkTooltip\"] = \"link-tooltip\";\n CrepeFeature2[\"Cursor\"] = \"cursor\";\n CrepeFeature2[\"ImageBlock\"] = \"image-block\";\n CrepeFeature2[\"BlockEdit\"] = \"block-edit\";\n CrepeFeature2[\"Toolbar\"] = \"toolbar\";\n CrepeFeature2[\"Placeholder\"] = \"placeholder\";\n CrepeFeature2[\"Table\"] = \"table\";\n CrepeFeature2[\"Latex\"] = \"latex\";\n return CrepeFeature2;\n})(CrepeFeature || {});\n\nconst boldIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M8.85758 18.625C8.4358 18.625 8.07715 18.4772 7.78163 18.1817C7.48613 17.8862 7.33838 17.5275 7.33838 17.1058V6.8942C7.33838 6.47242 7.48613 6.11377 7.78163 5.81825C8.07715 5.52275 8.4358 5.375 8.85758 5.375H12.1999C13.2191 5.375 14.1406 5.69231 14.9643 6.32693C15.788 6.96154 16.1999 7.81603 16.1999 8.89038C16.1999 9.63779 16.0194 10.2471 15.6585 10.7183C15.2976 11.1894 14.9088 11.5314 14.4922 11.7442C15.005 11.9211 15.4947 12.2708 15.9614 12.7933C16.428 13.3157 16.6614 14.0192 16.6614 14.9038C16.6614 16.182 16.1902 17.1217 15.2479 17.723C14.3056 18.3243 13.3563 18.625 12.3999 18.625H8.85758ZM9.4883 16.6327H12.3191C13.1063 16.6327 13.6627 16.4141 13.9884 15.9769C14.314 15.5397 14.4768 15.1205 14.4768 14.7192C14.4768 14.3179 14.314 13.8987 13.9884 13.4615C13.6627 13.0243 13.0909 12.8057 12.273 12.8057H9.4883V16.6327ZM9.4883 10.875H12.0826C12.6903 10.875 13.172 10.7013 13.5278 10.3539C13.8836 10.0064 14.0615 9.59037 14.0615 9.10575C14.0615 8.59035 13.8733 8.16918 13.497 7.84225C13.1207 7.51533 12.6595 7.35188 12.1133 7.35188H9.4883V10.875Z\"\n />\n </svg>\n`;\n\nconst codeIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8081)\">\n <path\n d=\"M9.4 16.6L4.8 12L9.4 7.4L8 6L2 12L8 18L9.4 16.6ZM14.6 16.6L19.2 12L14.6 7.4L16 6L22 12L16 18L14.6 16.6Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8081\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst italicIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M6.29811 18.625C6.04505 18.625 5.83115 18.5375 5.65641 18.3626C5.48166 18.1877 5.39429 17.9736 5.39429 17.7203C5.39429 17.467 5.48166 17.2532 5.65641 17.0788C5.83115 16.9045 6.04505 16.8173 6.29811 16.8173H9.21159L12.452 7.18265H9.53851C9.28545 7.18265 9.07155 7.0952 8.89681 6.9203C8.72206 6.7454 8.63469 6.5313 8.63469 6.278C8.63469 6.02472 8.72206 5.81089 8.89681 5.63652C9.07155 5.46217 9.28545 5.375 9.53851 5.375H16.8847C17.1377 5.375 17.3516 5.46245 17.5264 5.63735C17.7011 5.81225 17.7885 6.02634 17.7885 6.27962C17.7885 6.53293 17.7011 6.74676 17.5264 6.92113C17.3516 7.09548 17.1377 7.18265 16.8847 7.18265H14.2789L11.0385 16.8173H13.6443C13.8973 16.8173 14.1112 16.9048 14.286 17.0797C14.4607 17.2546 14.5481 17.4687 14.5481 17.722C14.5481 17.9752 14.4607 18.1891 14.286 18.3634C14.1112 18.5378 13.8973 18.625 13.6443 18.625H6.29811Z\"\n />\n </svg>\n`;\n\nconst linkIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M17.0385 19.5003V16.5388H14.0769V15.0388H17.0385V12.0773H18.5384V15.0388H21.5V16.5388H18.5384V19.5003H17.0385ZM10.8077 16.5388H7.03845C5.78282 16.5388 4.7125 16.0963 3.8275 15.2114C2.9425 14.3266 2.5 13.2564 2.5 12.0009C2.5 10.7454 2.9425 9.67504 3.8275 8.78979C4.7125 7.90454 5.78282 7.46191 7.03845 7.46191H10.8077V8.96186H7.03845C6.1987 8.96186 5.48235 9.25834 4.8894 9.85129C4.29645 10.4442 3.99998 11.1606 3.99998 12.0003C3.99998 12.8401 4.29645 13.5564 4.8894 14.1494C5.48235 14.7423 6.1987 15.0388 7.03845 15.0388H10.8077V16.5388ZM8.25 12.7503V11.2504H15.75V12.7503H8.25ZM21.5 12.0003H20C20 11.1606 19.7035 10.4442 19.1106 9.85129C18.5176 9.25834 17.8013 8.96186 16.9615 8.96186H13.1923V7.46191H16.9615C18.2171 7.46191 19.2875 7.90441 20.1725 8.78939C21.0575 9.67439 21.5 10.7447 21.5 12.0003Z\"\n />\n </svg>\n`;\n\nconst strikethroughIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M3.25 13.7404C3.0375 13.7404 2.85938 13.6684 2.71563 13.5246C2.57188 13.3808 2.5 13.2026 2.5 12.99C2.5 12.7774 2.57188 12.5993 2.71563 12.4558C2.85938 12.3122 3.0375 12.2404 3.25 12.2404H20.75C20.9625 12.2404 21.1406 12.3123 21.2843 12.4561C21.4281 12.5999 21.5 12.7781 21.5 12.9907C21.5 13.2033 21.4281 13.3814 21.2843 13.525C21.1406 13.6686 20.9625 13.7404 20.75 13.7404H3.25ZM10.9423 10.2596V6.62495H6.5673C6.2735 6.62495 6.02377 6.52201 5.8181 6.31613C5.61245 6.11026 5.50963 5.86027 5.50963 5.56615C5.50963 5.27205 5.61245 5.02083 5.8181 4.8125C6.02377 4.60417 6.2735 4.5 6.5673 4.5H17.4423C17.7361 4.5 17.9858 4.60294 18.1915 4.80883C18.3971 5.01471 18.5 5.2647 18.5 5.5588C18.5 5.85292 18.3971 6.10413 18.1915 6.31245C17.9858 6.52078 17.7361 6.62495 17.4423 6.62495H13.0673V10.2596H10.9423ZM10.9423 15.7211H13.0673V18.4423C13.0673 18.7361 12.9643 18.9858 12.7584 19.1915C12.5526 19.3971 12.3026 19.5 12.0085 19.5C11.7144 19.5 11.4631 19.3962 11.2548 19.1887C11.0465 18.9811 10.9423 18.7291 10.9423 18.4327V15.7211Z\"\n />\n </svg>\n`;\n\nconst functionsIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M7 19v-.808L13.096 12L7 5.808V5h10v1.25H9.102L14.727 12l-5.625 5.77H17V19z\"\n />\n </svg>\n`;\n\nvar __typeError$1 = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck$1 = (obj, member, msg) => member.has(obj) || __typeError$1(\"Cannot \" + msg);\nvar __privateGet$1 = (obj, member, getter) => (__accessCheck$1(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd$1 = (obj, member, value) => member.has(obj) ? __typeError$1(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet$1 = (obj, member, value, setter) => (__accessCheck$1(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _groups, _getGroupInstance;\nclass GroupBuilder {\n constructor() {\n __privateAdd$1(this, _groups, []);\n this.clear = () => {\n __privateSet$1(this, _groups, []);\n return this;\n };\n __privateAdd$1(this, _getGroupInstance, (group) => {\n const groupInstance = {\n group,\n addItem: (key, item) => {\n const data = { ...item, key };\n group.items.push(data);\n return groupInstance;\n },\n clear: () => {\n group.items = [];\n return groupInstance;\n }\n };\n return groupInstance;\n });\n this.addGroup = (key, label) => {\n const items = [];\n const group = {\n key,\n label,\n items\n };\n __privateGet$1(this, _groups).push(group);\n return __privateGet$1(this, _getGroupInstance).call(this, group);\n };\n this.getGroup = (key) => {\n const group = __privateGet$1(this, _groups).find((group2) => group2.key === key);\n if (!group) throw new Error(`Group with key ${key} not found`);\n return __privateGet$1(this, _getGroupInstance).call(this, group);\n };\n this.build = () => {\n return __privateGet$1(this, _groups);\n };\n }\n}\n_groups = new WeakMap();\n_getGroupInstance = new WeakMap();\n\nconst mathInlineId = \"math_inline\";\nconst mathInlineSchema = $nodeSchema(mathInlineId, () => ({\n group: \"inline\",\n inline: true,\n draggable: true,\n atom: true,\n attrs: {\n value: {\n default: \"\"\n }\n },\n parseDOM: [\n {\n tag: `span[data-type=\"${mathInlineId}\"]`,\n getAttrs: (dom) => {\n var _a;\n return {\n value: (_a = dom.dataset.value) != null ? _a : \"\"\n };\n }\n }\n ],\n toDOM: (node) => {\n const code = node.attrs.value;\n const dom = document.createElement(\"span\");\n dom.dataset.type = mathInlineId;\n dom.dataset.value = code;\n katex.render(code, dom, {\n throwOnError: false\n });\n return dom;\n },\n parseMarkdown: {\n match: (node) => node.type === \"inlineMath\",\n runner: (state, node, type) => {\n state.addNode(type, { value: node.value });\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === mathInlineId,\n runner: (state, node) => {\n state.addNode(\"inlineMath\", void 0, node.attrs.value);\n }\n }\n}));\n\nconst toggleLatexCommand = $command(\"ToggleLatex\", (ctx) => {\n return () => (state, dispatch) => {\n const {\n hasNode: hasLatex,\n pos: latexPos,\n target: latexNode\n } = findNodeInSelection(state, mathInlineSchema.type(ctx));\n const { selection, doc, tr } = state;\n if (!hasLatex) {\n const text = doc.textBetween(selection.from, selection.to);\n let _tr2 = tr.replaceSelectionWith(\n mathInlineSchema.type(ctx).create({\n value: text\n })\n );\n if (dispatch) {\n dispatch(\n _tr2.setSelection(NodeSelection.create(_tr2.doc, selection.from))\n );\n }\n return true;\n }\n const { from, to } = selection;\n if (!latexNode || latexPos < 0) return false;\n let _tr = tr.delete(latexPos, latexPos + 1);\n const content = latexNode.attrs.value;\n _tr = _tr.insertText(content, latexPos);\n if (dispatch) {\n dispatch(\n _tr.setSelection(\n TextSelection.create(_tr.doc, from, to + content.length - 1)\n )\n );\n }\n return true;\n };\n});\n\nfunction getGroups(config, ctx) {\n var _a, _b, _c, _d, _e, _f, _g;\n const groupBuilder = new GroupBuilder();\n groupBuilder.addGroup(\"formatting\", \"Formatting\").addItem(\"bold\", {\n icon: (_a = config == null ? void 0 : config.boldIcon) != null ? _a : boldIcon,\n active: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n return commands.call(isMarkSelectedCommand.key, strongSchema.type(ctx2));\n },\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n commands.call(toggleStrongCommand.key);\n }\n }).addItem(\"italic\", {\n icon: (_b = config == null ? void 0 : config.italicIcon) != null ? _b : italicIcon,\n active: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n return commands.call(\n isMarkSelectedCommand.key,\n emphasisSchema.type(ctx2)\n );\n },\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n commands.call(toggleEmphasisCommand.key);\n }\n }).addItem(\"strikethrough\", {\n icon: (_c = config == null ? void 0 : config.strikethroughIcon) != null ? _c : strikethroughIcon,\n active: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n return commands.call(\n isMarkSelectedCommand.key,\n strikethroughSchema.type(ctx2)\n );\n },\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n commands.call(toggleStrikethroughCommand.key);\n }\n });\n const functionGroup = groupBuilder.addGroup(\"function\", \"Function\");\n functionGroup.addItem(\"code\", {\n icon: (_d = config == null ? void 0 : config.codeIcon) != null ? _d : codeIcon,\n active: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n return commands.call(\n isMarkSelectedCommand.key,\n inlineCodeSchema.type(ctx2)\n );\n },\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n commands.call(toggleInlineCodeCommand.key);\n }\n });\n const flags = ctx && useCrepeFeatures(ctx).get();\n const isLatexEnabled = flags == null ? void 0 : flags.includes(CrepeFeature.Latex);\n if (isLatexEnabled) {\n functionGroup.addItem(\"latex\", {\n icon: (_e = config == null ? void 0 : config.latexIcon) != null ? _e : functionsIcon,\n active: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n return commands.call(\n isNodeSelectedCommand.key,\n mathInlineSchema.type(ctx2)\n );\n },\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n commands.call(toggleLatexCommand.key);\n }\n });\n }\n functionGroup.addItem(\"link\", {\n icon: (_f = config == null ? void 0 : config.linkIcon) != null ? _f : linkIcon,\n active: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n return commands.call(isMarkSelectedCommand.key, linkSchema.type(ctx2));\n },\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n commands.call(toggleLinkCommand.key);\n }\n });\n (_g = config == null ? void 0 : config.buildToolbar) == null ? void 0 : _g.call(config, groupBuilder);\n return groupBuilder.build();\n}\n\nconst Toolbar = defineComponent({\n props: {\n ctx: {\n type: Object,\n required: true\n },\n hide: {\n type: Function,\n required: true\n },\n show: {\n type: Object,\n required: true\n },\n selection: {\n type: Object,\n required: true\n },\n config: {\n type: Object,\n required: false\n }\n },\n setup(props) {\n const { ctx, config } = props;\n const onClick = (fn) => (e) => {\n e.preventDefault();\n ctx && fn(ctx);\n };\n function checkActive(checker) {\n props.selection.value;\n const status = ctx.get(editorCtx).status;\n if (status !== EditorStatus.Created) return false;\n return checker(ctx);\n }\n const groupInfo = computed(() => getGroups(config, ctx));\n return () => {\n return /* @__PURE__ */ h(Fragment, null, groupInfo.value.map((group) => {\n return group.items.map((item) => {\n return /* @__PURE__ */ h(\n \"button\",\n {\n type: \"button\",\n class: clsx(\n \"toolbar-item\",\n ctx && checkActive(item.active) && \"active\"\n ),\n onPointerdown: onClick(item.onRun)\n },\n /* @__PURE__ */ h(Icon, { icon: item.icon })\n );\n });\n }).reduce((acc, curr, index) => {\n if (index === 0) {\n acc.push(...curr);\n } else {\n acc.push(/* @__PURE__ */ h(\"div\", { class: \"divider\" }), ...curr);\n }\n return acc;\n }, []));\n };\n }\n});\n\nvar __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _tooltipProvider, _content, _app, _selection, _show;\nconst toolbarTooltip = tooltipFactory(\"CREPE_TOOLBAR\");\nclass ToolbarView {\n constructor(ctx, view, config) {\n __privateAdd(this, _tooltipProvider);\n __privateAdd(this, _content);\n __privateAdd(this, _app);\n __privateAdd(this, _selection);\n __privateAdd(this, _show, ref(false));\n this.update = (view, prevState) => {\n __privateGet(this, _tooltipProvider).update(view, prevState);\n __privateGet(this, _selection).value = view.state.selection;\n };\n this.destroy = () => {\n __privateGet(this, _tooltipProvider).destroy();\n __privateGet(this, _app).unmount();\n __privateGet(this, _content).remove();\n };\n this.hide = () => {\n __privateGet(this, _tooltipProvider).hide();\n };\n const content = document.createElement(\"div\");\n content.className = \"milkdown-toolbar\";\n __privateSet(this, _selection, shallowRef(view.state.selection));\n const app = createApp(Toolbar, {\n ctx,\n hide: this.hide,\n config,\n selection: __privateGet(this, _selection),\n show: __privateGet(this, _show)\n });\n app.mount(content);\n __privateSet(this, _content, content);\n __privateSet(this, _app, app);\n __privateSet(this, _tooltipProvider, new TooltipProvider({\n content: __privateGet(this, _content),\n debounce: 20,\n offset: 10,\n shouldShow(view2) {\n const { doc, selection } = view2.state;\n const { empty, from, to } = selection;\n const isEmptyTextBlock = !doc.textBetween(from, to).length && selection instanceof TextSelection;\n const isNotTextBlock = !(selection instanceof TextSelection);\n const activeElement = view2.dom.getRootNode().activeElement;\n const isTooltipChildren = content.contains(activeElement);\n const notHasFocus = !view2.hasFocus() && !isTooltipChildren;\n const isReadonly = !view2.editable;\n if (notHasFocus || isNotTextBlock || empty || isEmptyTextBlock || isReadonly)\n return false;\n return true;\n }\n }));\n __privateGet(this, _tooltipProvider).onShow = () => {\n __privateGet(this, _show).value = true;\n };\n __privateGet(this, _tooltipProvider).onHide = () => {\n __privateGet(this, _show).value = false;\n };\n this.update(view);\n }\n}\n_tooltipProvider = new WeakMap();\n_content = new WeakMap();\n_app = new WeakMap();\n_selection = new WeakMap();\n_show = new WeakMap();\nconst toolbar = (editor, config) => {\n editor.config(crepeFeatureConfig(CrepeFeature.Toolbar)).config((ctx) => {\n ctx.set(toolbarTooltip.key, {\n view: (view) => new ToolbarView(ctx, view, config)\n });\n }).use(toolbarTooltip);\n};\n\nexport { toolbar };\n//# sourceMappingURL=index.js.map\n","import React, { useEffect, useRef } from 'react';\r\nimport { CrepeBuilder } from '@milkdown/crepe/builder';\r\nimport { blockEdit } from '@milkdown/crepe/feature/block-edit';\r\nimport { toolbar } from '@milkdown/crepe/feature/toolbar';\r\n\r\nimport '@milkdown/crepe/theme/common/prosemirror.css';\r\nimport '@milkdown/crepe/theme/common/reset.css';\r\nimport '@milkdown/crepe/theme/common/block-edit.css';\r\nimport '@milkdown/crepe/theme/common/toolbar.css';\r\nimport '@milkdown/crepe/theme/common/image-block.css';\r\n\r\nimport '@milkdown/crepe/theme/common/style.css';\r\nimport '@milkdown/crepe/theme/frame.css';\r\n\r\ninterface MilkdownEditorInternalProps {\r\n value: string;\r\n onChange: (value: string) => void;\r\n className?: string;\r\n}\r\n\r\nconst MilkdownEditorInternal: React.FC<MilkdownEditorInternalProps> = ({\r\n value,\r\n onChange,\r\n className\r\n}) => {\r\n const ref = useRef<HTMLDivElement>(null);\r\n const builderRef = useRef<CrepeBuilder | null>(null);\r\n const editorReady = useRef(false);\r\n const debounceTimer = useRef<NodeJS.Timeout>();\r\n const isUpdatingFromOutside = useRef(false);\r\n const lastEmittedValue = useRef<string>(value);\r\n\r\n // Memoize onChange to prevent effect re-runs\r\n const onChangeRef = useRef(onChange);\r\n useEffect(() => {\r\n onChangeRef.current = onChange;\r\n }, [onChange]);\r\n\r\n // Effect for editor setup and mutation observer\r\n useEffect(() => {\r\n if (!ref.current) return;\r\n\r\n editorReady.current = false;\r\n\r\n // Create builder with basic config\r\n const builder = new CrepeBuilder({\r\n root: ref.current,\r\n defaultValue: value || '',\r\n });\r\n\r\n // Add features manually\r\n builder\r\n .addFeature(blockEdit)\r\n .addFeature(toolbar);\r\n\r\n // Create the editor and wait for it to be ready\r\n builder.create().then(() => {\r\n editorReady.current = true;\r\n builderRef.current = builder;\r\n lastEmittedValue.current = value; // Initialize with current value\r\n });\r\n\r\n // Listen to updates via mutation observer\r\n const handleUpdate = () => {\r\n if (isUpdatingFromOutside.current || !editorReady.current) return;\r\n\r\n clearTimeout(debounceTimer.current);\r\n debounceTimer.current = setTimeout(() => {\r\n if (!builderRef.current || !editorReady.current) return;\r\n\r\n try {\r\n const markdown = builderRef.current.getMarkdown();\r\n\r\n // Only call onChange if content actually changed\r\n if (markdown !== lastEmittedValue.current) {\r\n lastEmittedValue.current = markdown;\r\n onChangeRef.current(markdown);\r\n }\r\n } catch (error) {\r\n console.error('Error getting markdown:', error);\r\n }\r\n }, 300);\r\n };\r\n\r\n const observer = new MutationObserver(handleUpdate);\r\n\r\n observer.observe(ref.current, {\r\n childList: true,\r\n subtree: true,\r\n characterData: true,\r\n });\r\n\r\n return () => {\r\n observer.disconnect();\r\n if (debounceTimer.current) {\r\n clearTimeout(debounceTimer.current);\r\n }\r\n editorReady.current = false;\r\n builderRef.current?.destroy();\r\n builderRef.current = null;\r\n };\r\n }, []); // Only run once on mount\r\n\r\n // Effect for handling external value changes\r\n useEffect(() => {\r\n if (!builderRef.current || !editorReady.current) return;\r\n\r\n try {\r\n const editorContent = builderRef.current.getMarkdown();\r\n\r\n // Only update if value is different from both editor and last emitted value\r\n if (value !== editorContent && value !== lastEmittedValue.current) {\r\n isUpdatingFromOutside.current = true;\r\n\r\n // Note: Builder doesn't have setMarkdown, need to use internal methods or recreate if drastic\r\n // But for Crepe, we might need a way to set content. \r\n // Just updating the ref is not enough if the editor doesn't update.\r\n // However, the original code didn't actually implementing 'setMarkdown' logic for Crepe properly \r\n // beyond setting isUpdatingFromOutside to true... \r\n // Wait, looking at original code:\r\n // \"Note: Builder doesn't have setMarkdown, need to recreate or use editor directly\"\r\n // It seems the original code FAILED to actually update the editor content visually?\r\n // Ah, lines 186-206 in original file.\r\n // It sets isUpdatingFromOutside = true, updates lastEmittedValue.\r\n // But it DOES NOT actually update the editor content. This looks like a bug in the original code?\r\n // Or maybe Crepe updates automatically? No.\r\n // Let's keep strict parity with original code first.\r\n\r\n lastEmittedValue.current = value;\r\n\r\n // Allow DOM to update\r\n setTimeout(() => {\r\n isUpdatingFromOutside.current = false;\r\n }, 150);\r\n }\r\n } catch (error) {\r\n console.error('Error syncing external value:', error);\r\n }\r\n }, [value]);\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={`milkdown-editor p-3 min-h-[120px] prose prose-sm max-w-none dark:prose-invert ${className || ''}`}\r\n />\r\n );\r\n};\r\n\r\nexport default MilkdownEditorInternal;\r\n"],"names":["ErrorCode","ErrorCode2","MilkdownError","code","message","functionReplacer","_","value","stringify","x","docTypeError","type","contextNotFound","name","timerNotFound","ctxCallOutOfScope","createNodeInParserFail","nodeType","attrs","content","heading","serialize","headingMessage","attrsMessage","contentMessage","node","messages","acc","title","stackOverFlow","parserMatchError","serializerMatchError","getAtomFromSchemaFail","expectDomTypeError","callCommandBeforeEditorView","missingNodeInSchema","missingMarkInSchema","Container","slice","context","Slice$1","_a","container","__privateAdd","_watchers","_value","_emit","__privateSet","__privateGet","watcher","value2","updater","w","off","SliceType","Slice","createSlice","Inspector","clock","meta","_meta","_container","_clock","_injectedSlices","_consumedSlices","_recordedTimers","_waitTimers","_getSlice","_getTimer","timer","duration","timerType","promise","start","sliceType","_Ctx","_inspector","meta2","Ctx","Clock","Timer","_promise","_listener","_eventUniqId","_status","_removeListener","_waitTimeout","resolve","reject","e","event","ifTimeout","TimerType","timeout","createTimer","OrderedMap","key","i","found","newKey","self","place","without","f","map","result","prop","findDiffStart","a","b","pos","childA","childB","j","inner","findDiffEnd","posA","posB","iA","iB","size","same","minSize","Fragment$1","Fragment","from","to","nodeStart","parent","child","end","blockSeparator","leafText","text","first","nodeText","other","last","index","current","copy","p","otherPos","retIndex","curPos","cur","n","schema","array","joined","nodes","offset","compareDeep","Mark","set","placed","obj","json","mark","marks","ReplaceError","openStart","openEnd","fragment","insertInto","removeRange","openIsolating","indexTo","offsetTo","dist","insert","replace","$from","$to","replaceOuter","depth","close","prepareSliceForReplace","replaceThreeWay","replaceTwoWay","checkJoin","main","sub","joinable","$before","$after","addNode","target","addRange","$start","$end","startIndex","endIndex","$along","extra","ResolvedPos","path","parentOffset","val","dOff","tmp","after","next","pred","d","NodeRange","str","doc","rem","cache","resolveCache","elt","ResolveCache","resolveCacheSize","emptyAttrs","Node","startPos","includeParents","wrapMarks","match","replacement","one","two","m","TextNode","base","ContentMatch","validEnd","string","nodeTypes","stream","TokenStream","expr","parseExpr","dfa","nfa","checkForDeadEnds","frag","toEnd","seen","search","types","finished","tp","computed","active","scan","out","tok","exprs","parseExprSeq","parseExprSubscript","parseExprAtom","parseExprRange","parseNum","min","max","resolveName","typeName","connect","compile","edge","term","edges","loop","cmp","nullFrom","labeled","explore","states","state","work","dead","defaultAttrs","defaults","attrName","attr","computeAttrs","built","given","checkAttrs","values","initAttrs","Attribute","NodeType$1","NodeType","spec","group","before","matched","markType","topType","validateType","options","MarkType","rank","Schema","instanceSpec","contentExprCache","contentExpr","markExpr","gatherMarks","excl","ok","isTagRule","rule","isStyleRule","DOMParser","rules","matchedStyles","r","dom","ParseContext","matches","style","priority","blockTags","ignoreTags","listTags","OPT_PRESERVE_WS","OPT_PRESERVE_WS_FULL","OPT_OPEN_LEFT","wsOptionsFor","preserveWhitespace","NodeContext","solid","fill","wrap","parser","isOpen","topNode","topContext","topOptions","top","preserveWS","lines","nodeBefore","domNodeBefore","matchAfter","outerWS","ruleID","normalizeList","sync","oldNeedsBlock","innerMarks","styles","continueAfter","startIn","contentDOM","cautious","route","penalty","cx","block","nodeMarks","markMayApply","applyMarks","textNode","parts","option","useRoot","minDepth","part","$context","deflt","prevItem","selector","DOMSerializer","keep","rendered","add","markDOM","renderSpec","inline","toDOM","structure","xmlNS","blockArraysIn","gatherToDOM","suspiciousAttributeCache","suspiciousAttributes","suspiciousAttributesInner","tagName","suspicious","space","innerContent","emptyOptions","toString","settings","includeImageAlt","includeHtml","all","element","decodeNamedCharacterReference","characterReference","character","splice","list","remove","items","chunkStart","parameters","push","hasOwnProperty","combineExtensions","extensions","syntaxExtension","extension","hook","left","right","constructs","existing","decodeNumericCharacterReference","normalizeIdentifier","asciiAlpha","regexCheck","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","regex","check","factorySpace","effects","limit","prefix","initializeContent","contentStart","afterContentStartConstruct","paragraphInitial","previous","lineStart","token","data","document","initializeDocument","containerConstruct","tokenizeContainer","stack","continued","childFlow","childToken","lineStartOffset","item","documentContinue","checkNewContainers","closeFlow","indexBeforeExits","indexBeforeFlow","point","exitContainers","documentContinued","flowStart","thereIsANewContainer","thereIsNoNewContainer","containerContinue","flowContinue","writeToChild","endOfFile","entry","nok","classifyCharacter","resolveAll","events","called","attention","resolveAllAttention","tokenizeAttention","open","openingSequence","closingSequence","use","nextEvents","movePoint","attentionMarkers","marker","inside","autolink","tokenizeAutolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","blankLine","tokenizeBlankLine","blockQuote","tokenizeBlockQuoteContinuation","exit","tokenizeBlockQuoteStart","contStart","contBefore","characterEscape","tokenizeCharacterEscape","tokenizeCharacterReference","test","numeric","nonLazyContinuation","tokenizeNonLazyContinuation","codeFenced","tokenizeCodeFenced","closeStart","tokenizeCloseStart","initialPrefix","sizeOpen","beforeSequenceOpen","tail","sequenceOpen","infoBefore","atNonLazyBreak","info","metaBefore","contentBefore","beforeContentChunk","contentChunk","startBefore","beforeSequenceClose","sequenceClose","sequenceCloseAfter","codeIndented","tokenizeCodeIndented","furtherStart","tokenizeFurtherStart","afterPrefix","atBreak","codeText","resolveCodeText","tokenizeCodeText","tailExitIndex","headEnterIndex","enter","between","SpliceBuffer","initial","stop","deleteCount","count","removed","chunkedPush","subtokenize","eventsArray","jumps","lineIndex","otherIndex","otherEvent","subevents","more","subcontent","eventIndex","startPosition","startPositions","tokenizer","childEvents","gaps","adjust","breaks","resolveContent","tokenizeContent","continuationConstruct","tokenizeContinuation","chunkInside","contentEnd","contentContinue","startLookahead","prefixed","factoryDestination","literalType","literalMarkerType","rawType","stringType","balance","enclosedBefore","raw","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","begin","escape","factoryWhitespace","definition","tokenizeDefinition","titleBefore","tokenizeTitleBefore","identifier","labelAfter","markerAfter","destinationBefore","destinationAfter","afterWhitespace","beforeMarker","titleAfter","titleAfterOptionalWhitespace","hardBreakEscape","tokenizeHardBreakEscape","headingAtx","resolveHeadingAtx","tokenizeHeadingAtx","sequenceFurther","htmlBlockNames","htmlRawNames","htmlFlow","resolveToHtmlFlow","tokenizeHtmlFlow","blankLineBefore","tokenizeBlankLineBefore","nonLazyContinuationStart","tokenizeNonLazyContinuationStart","closingTag","buffer","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","commentOpenInside","cdataOpenInside","continuation","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationAfter","continuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","htmlText","tokenizeHtmlText","returnState","instruction","tagOpen","declaration","commentEnd","comment","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelEnd","resolveAllLabelEnd","resolveToLabelEnd","tokenizeLabelEnd","resourceConstruct","tokenizeResource","referenceFullConstruct","tokenizeReferenceFull","referenceCollapsedConstruct","tokenizeReferenceCollapsed","newEvents","media","label","labelStart","defined","labelEndNok","labelEndOk","referenceNotFull","resourceStart","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFull","referenceFullAfter","referenceFullMissing","referenceCollapsedStart","referenceCollapsedOpen","labelStartImage","tokenizeLabelStartImage","labelStartLink","tokenizeLabelStartLink","lineEnding","tokenizeLineEnding","thematicBreak","tokenizeThematicBreak","sequence","tokenizeListContinuation","tokenizeListEnd","tokenizeListStart","listItemPrefixWhitespaceConstruct","tokenizeListItemPrefixWhitespace","indentConstruct","tokenizeIndent","initialSize","kind","atMarker","onBlank","endOfPrefix","otherPrefix","notBlank","notInCurrentItem","setextUnderline","resolveToSetextUnderline","tokenizeSetextUnderline","paragraph","flow","initializeFlow","atBlankEnding","afterConstruct","resolver","createResolver","initializeFactory","field","resolveAllLineSuffixes","initializeText","notText","extraResolver","resolveAllText","chunks","bufferIndex","tabs","chunk","contentInitial","flowInitial","insideSpan","resolveText","disable","createTokenizer","initialize","columnStart","resolveAllConstructs","constructFactory","onsuccessfulconstruct","onsuccessfulcheck","consume","defineSkip","now","sliceSerialize","sliceStream","write","addResult","expandTabs","serializeChunks","sliceChunks","_bufferIndex","_index","line","column","accountForPotentialSkip","chunkIndex","go","fields","construct","onreturn","bogusState","listOfConstructs","constructIndex","currentConstruct","handleListOfConstructs","handleMapOfConstructs","handleConstruct","store","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","restore","startBufferIndex","endBufferIndex","view","head","atTab","parse","defaultConstructs","create","creator","postprocess","preprocess","atCarriageReturn","preprocessor","encoding","endPosition","characterEscapeOrReference","decodeString","decode","$0","$1","$2","hex","stringifyPosition","position","own","fromMarkdown","compiler","config","opener","link","onenterdata","codeFlow","emphasis","hardBreak","html","image","listItem","onenterlistitemvalue","onenterlistordered","onenterreference","strong","closer","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","onexitdata","onexitcharacterreferencemarker","onexitcharacterreferencevalue","onexitcharacterreference","onexitcodefenced","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","onexitlabeltext","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","onexitresource","onexitsetextheading","onexitsetextheadinglinesequence","onexitsetextheadingtext","configure","tree","resume","listStack","prepareList","handler","defaultOnError","length","containerBalance","listSpread","firstBlankLineIndex","tailIndex","tailEvent","and","errorHandler","onExitError","ancestor","siblings","referenceType","children","combined","remarkParse","zwitch","fn","handlers","id","blockquote","tracker","blank","patternInScope","pattern","listInScope","none","_1","longestStreak","substring","source","expected","formatCodeAsIndented","checkFence","suffix","subexit","checkQuote","quote","checkEmphasis","encodeCharacterReference","encodeInfo","outside","outsideKind","insideKind","emphasisPeek","betweenHead","betweenTail","convert","castFactory","anyFactory","propertiesFactory","typeFactory","tests","checks","any","checkAsRecord","nodeAsRecord","testFunction","looksLikeANode","empty","CONTINUE","EXIT","SKIP","visitParents","visitor","reverse","is","step","factory","parents","visit","subresult","grandparents","toResult","nodeAsParent","testOrVisitor","visitorOrReverse","maybeReverse","overload","formatHeadingAsSetext","literalWithBreak","htmlPeek","imagePeek","imageReference","imageReferencePeek","alt","reference","inlineCode","inlineCodePeek","expression","formatLinkAsAutolink","linkPeek","linkReference","linkReferencePeek","checkBullet","checkBulletOther","bullet","bulletOther","checkBulletOrdered","checkRule","bulletCurrent","useDifferentMarker","firstListItem","checkListItemIndent","listItemIndent","phrasing","root","checkStrong","strongPeek","checkRuleRepetition","repetition","handle","join","joinDefaults","fullPhrasingSpans","unsafe","association","compilePattern","containerPhrasing","indexStack","results","encodeAfter","encodingInfo","containerFlow","eol","indentLines","safe","input","positions","infos","numerical","escapeBackslashes","whole","track","lineShift","move","shift","toMarkdown","containerPhrasingBound","containerFlowBound","safeBound","joinDefinition","invalid","unknown","remarkStringify","bail","error","hasOwn","toStr","defineProperty","gOPD","isArray","arr","isPlainObject","hasOwnConstructor","hasIsPrototypeOf","setProperty","getProperty","extend","src","copyIsArray","clone","deep","prototype","trough","fns","pipeline","run","middlewareIndex","callback","output","middelware","middleware","wrapped","fnExpectsCallback","done","exception","then","VFileMessage","causeOrReason","optionsOrParentOrPlace","origin","reason","legacyCause","minpath","basename","dirname","extname","assertPath","seenNonSlash","firstNonSlashEnd","extnameIndex","unmatchedSlash","startPart","startDot","preDotState","segments","normalize","absolute","normalizeString","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","minproc","cwd","isUrl","fileUrlOrPath","urlToPath","getPathFromURLPosix","url","pathname","third","order","VFile","isUint8Array","assertNonEmpty","assertPart","stem","CallableInstance","property","proto","apply","Processor","destination","attacher","assertUnfrozen","transformer","file","realFile","vfile","assertParser","assertCompiler","executor","parseTree","realDone","compileTree","compileResult","looksLikeAValue","complete","assertDone","assertNode","transformers","outputTree","resultingTree","attachers","namespace","addPlugin","addList","addPreset","plugin","plugins","thing","entryIndex","primary","rest","currentPrimary","isPlainObj","unified","frozen","asyncName","looksLikeAVFile","__typeError","msg","__accessCheck","member","getter","setter","_marks","_hasText","_maybeMerge","_matchTarget","_runNode","_closeNodeAndPush","_addNodeAndPush","_marks2","_matchTarget2","_runProseNode","_runProseMark","_runNode2","_searchType","_maybeMergeChildren","_createMarkdownNode","_moveSpaces","_closeNodeAndPush2","_addNodeAndPush2","_openMark","_closeMark","StackElement","Stack","el","ParserStackElement","_ParserState","topElement","prevNode","currNode","merged","remark","markdown","ParserState","_SerializerStackElement","props","SerializerStackElement","isFragment","_SerializerState","getPriority","searchNode","node2","firstChild","nextChildren","currChildren","currRest","prevChildren","prevRest","onPush","startSpaces","endSpaces","findIndex","lastChild","trimmed","trim","SerializerState","lower16","factor16","makeRecover","recoverIndex","recoverOffset","DEL_BEFORE","DEL_AFTER","DEL_ACROSS","DEL_SIDE","MapResult","delInfo","recover","StepMap","ranges","inverted","diff","assoc","simple","oldIndex","newIndex","oldSize","newSize","side","del","oldStart","newStart","Mapping","maps","mirror","mirrors","mapping","startSize","mirr","totalSize","inverse","corr","stepsByID","Step","stepClass","StepResult","failed","mapFragment","mapped","AddMarkStep","oldSlice","RemoveMarkStep","AddNodeMarkStep","updated","newSet","RemoveNodeMarkStep","ReplaceStep","contentBetween","ReplaceAroundStep","gapFrom","gapTo","gap","inserted","addMark","tr","added","removing","adding","s","removeMark","toRemove","clearIncompatible","parentType","clearNewlines","replSteps","allowed","newline","canCut","liftTarget","range","contentAfter","lift","gapStart","gapEnd","splitting","findWrapping","innerRange","around","findWrappingOutside","findWrappingInside","withAttrs","outer","innerMatch","wrappers","setBlockType","mapFrom","attrsHere","canChangeType","convertNewlines","pre","supportLinebreak","replaceLinebreaks","startM","endM","replaceNewlines","$pos","setNodeMarkup","newNode","canSplit","typesAfter","innerType","overrideChild","baseType","split","typeAfter","canJoin","canAppendWithSubstitutedLinebreaks","linebreakReplacement","beforeType","$full","insertPoint","dropPoint","pass","bias","insertPos","fits","wrapping","replaceStep","fitsTrivially","Fitter","unplaced","fit","moveInline","placedSize","startDepth","sliceDepth","contentAt","frontierDepth","inject","openAtEnd","dropFromFragment","taken","openEndCount","closeNodeStart","addToFragment","level","contentAfterFits","dropInner","invalidMarks","definesContent","replaceRange","targetDepths","coveredDepths","preferredTarget","preferredTargetIndex","leftNodes","preferredDepth","leftNode","def","openDepth","targetDepth","expand","closeFragment","startSteps","oldOpen","newOpen","replaceRangeWith","deleteRange","covered","AttrStep","DocAttrStep","TransformError","err","Transform","steps","classesById","Selection","$anchor","$head","SelectionRange","lastNode","lastParent","selectionToInsertionEnd","dir","textOnly","TextSelection","findSelectionIn","AllSelection","cls","selectionClass","warnedAboutTextSelection","checkTextSelection","TextBookmark","anchor","dPos","NodeSelection","deleted","NodeBookmark","sel","AllBookmark","startLen","_from","_to","_newFrom","newTo","UPDATED_SEL","UPDATED_MARKS","UPDATED_SCROLL","Transaction","selection","time","inheritMarks","bind","FieldDesc","desc","baseFields","instance","_old","prev","Configuration","EditorState","ignore","rootTr","trs","newState","haveNew","oldState","newInstance","$config","pluginFields","bindProps","Plugin","createKey","keys","PluginKey","deleteSelection","dispatch","atBlockStart","$cursor","joinBackward","$cut","findCutBefore","deleteBarrier","textblockAt","delStep","joinTextblockBackward","joinTextblocksAround","beforeText","beforePos","afterText","afterPos","only","selectNodeBackward","atBlockEnd","joinForward","findCutAfter","selectNodeForward","newlineInCode","defaultBlockAt","exitCode","above","createParagraphNear","liftEmptyBlock","splitBlockAs","splitNode","splitDepth","atEnd","atStart","splitPos","can","$first","splitBlock","selectAll","joinMaybeClear","conn","isolated","canDelAfter","$joinAt","selAfter","at","afterDepth","selectTextblockSide","selectTextblockStart","selectTextblockEnd","wrapIn","applicable","markApplies","enterAtoms","toggleMark","spaceStart","spaceEnd","chainCommands","commands","backspace","pcBaseKeymap","macBaseKeymap","mac","baseKeymap","InputRule","stringHandler","cutOff","undoInputRule","undoable","toUndo","wrappingInputRule","regexp","getAttrs","joinPredicate","textblockTypeInputRule","nav","agent","ie_edge","ie_upto10","ie_11up","ie","ie_version","gecko","gecko_version","_chrome","chrome","chrome_version","safari","ios","android","webkit","webkit_version","browser","textBefore","_matcher","matcher","customInputRulesKey","customInputRules","stored","markRule","_b","_c","_d","matchLength","fullMatch","initialStoredMarks","markEnd","captured","textStart","textEnd","__defProp","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","__spreadProps","minMax","posToDOMRect","maxPos","resolvedFrom","resolvedEnd","bottom","width","height","cloneTr","equalNodeType","isTextOnlySlice","_node","findParent","predicate","findParentNodeType","getNodeFromSchema","findParentNodeClosestToPos","findParentNode","findSelectedNodeOfType","findNodeInSelection","hasNode","keyName","ignoreKey","windows","normalizeKeyName","ctrl","mod","modifiers","keymap","bindings","keydownHandler","baseName","direct","noShift","fromCode","domIndex","parentNode","reusedRange","textRange","clearReusedRange","isEquivalentPosition","targetNode","targetOff","scanFor","atomElements","nodeSize","hasBlockDesc","textNodeBefore$1","textNodeAfter$1","isOnEdge","selectionCollapsed","domSel","keyEvent","keyCode","deepActiveElement","caretFromPoint","y","windowRect","vp","getSide","clientRect","rect","scaleX","scaleY","scrollRectIntoView","startDOM","scrollThreshold","scrollMargin","atTop","bounding","moveX","moveY","startX","startY","dX","dY","storeScrollPos","refDOM","refTop","localRect","scrollStack","resetScrollPos","newRefTop","restoreScrollStack","dTop","preventScrollSupported","focusPreventScroll","findOffsetInNode","coords","closest","dxClosest","coordsClosest","rowBot","rowTop","firstBelow","coordsBelow","childIndex","rects","dx","findOffsetInText","len","singleRect","inRect","targetKludge","posFromElement","posFromCaret","outsideBlock","sawBlock","elementFromPoint","box","startI","posAtCoords","caret","nonZero","BIDI","coordsAtPos","atom","supportEmptyRange","rectBefore","rectAfter","flattenV","takeSide","flattenH","withFlushedState","viewState","endOfTextblockVertical","nearest","boxes","maybeRTL","endOfTextblockHorizontal","oldNode","oldOff","anchorNode","anchorOffset","oldBidiLevel","parentDOM","newOff","cachedState","cachedDir","cachedResult","endOfTextblock","NOT_DIRTY","CHILD_DIRTY","CONTENT_DIRTY","NODE_DIRTY","ViewDesc","widget","outerDeco","innerDeco","nodeName","domBefore","domAfter","onlyNodes","nodeDOM","TrailingHackViewDesc","WidgetViewDesc","fromOffset","toOffset","childBase","force","anchorDOM","headDOM","selRange","brKludge","domSelExtended","mutation","startInside","endInside","dirty","CompositionViewDesc","textDOM","mut","MarkViewDesc","custom","replaceNodes","NodeViewDesc","descObj","applyOuterDeco","CustomNodeViewDesc","TextViewDesc","sameOuterDeco","composition","localComposition","compositionInChild","ViewTreeUpdater","iterDeco","insideNode","compIndex","renderDescs","iosHacks","textPos","findTextInFragment","needsWrap","oldDOM","patchOuterDeco","computeOuterDeco","docViewDesc","docView","skip","descs","written","childDOM","rm","OuterDecoLevel","noDeco","outerDOM","prevComputed","curComputed","curDOM","deco","patchAttributes","prevList","curList","lock","preMatch","parentIndex","maxKeep","scanTo","markDesc","targetDesc","domNode","nextDOM","locked","wrapper","ch","hack","parentDesc","curDesc","descI","fI","compareSide","onWidget","onNode","locals","decoIndex","restNode","widgets","cutAt","oldCSS","childStart","selectionFromDOM","nearestDesc","inWidget","nearestDescNode","selectionBetween","editorOwnsSelection","hasSelection","selectionToDOM","syncNodeSelection","curSel","selectCursorWrapper","resetEditableFrom","resetEditableTo","brokenSelectBetweenUneditable","temporarilyEditableNear","resetEditable","removeClassOnSelectionChange","setEditable","img","clearNodeSelection","hasFocusAndSelection","anchorInRightPlace","moveSelectionBlock","$side","selectHorizontally","mods","$newHead","nodePos","nodeLen","isIgnorable","skipIgnoredNodes","skipIgnoredNodesBefore","skipIgnoredNodesAfter","moveNode","moveOffset","isBlockNode","setSelFocus","textNodeAfter","textNodeBefore","findDirection","mid","selectVertically","beyond","stopNativeHorizontalDelete","nextNode","switchEditable","safariDownArrowBug","focusNode","focusOffset","getMods","captureKeyDown","serializeForClipboard","serializer","detachedDoc","wrapMap","parseFromClipboard","plainText","inCode","asText","parsed","readHTML","restoreReplacedSpaces","contextNode","sliceData","inlineParents","addContext","closeSlice","normalizeSiblings","lastWrap","inLast","addToSibling","closeRight","withWrappers","sibling","closeRange","_detachedDoc","_policy","maybeWrapTrusted","trustedTypes","metas","firstTag","editHandlers","passiveHandlers","InputState","initInput","eventBelongsToView","runCustomHandler","ensureListeners","setSelectionOrigin","destroyInput","currentHandlers","dispatchEvent","_event","inOrNearComposition","eventCoords","isNear","click","dy","runHandlerOnContext","propName","updateSelection","selectClickedLeaf","selectClickedNode","selectedNode","selectAt","handleSingleClick","selectNode","handleDoubleClick","handleTripleClick","defaultTripleClick","forceDOMFlush","endComposition","selectNodeModifier","flushed","MouseDown","targetPos","timeoutComposition","selectionBeforeUneditable","scheduleComposeEnd","delay","clearComposition","timestampFromCustomEvent","findCompositionNode","textAfter","descAfter","lastChanged","descBefore","restarting","captureCopy","brokenClipboardAPI","cut","sliceSingleNode","capturePaste","plain","doPaste","preferPlain","singleNode","getText","clipboardData","uris","Dragging","dragCopyModifier","dragMoves","moves","mouseDown","draggedSlice","dragging","handleDrop","eventPos","$mouse","isNode","beforeInsert","domChangeCount","compareObjs","WidgetType","noSpec","span","oldOffset","Decoration","InlineType","DecorationSet","local","decorations","buildTree","childOff","newLocal","mapChildren","byPos","childNode","childOffset","baseOffset","takeSpansForNode","moveSpans","withoutNulls","dec","localSet","DecorationGroup","removeOverlap","members","mappedDecos","sorted","oldChildren","moved","oldEnd","newEnd","dSize","mustRebuild","fromLocal","toLocal","mapAndGatherRemainingDecorations","spans","gather","hasNulls","localStart","subtree","working","insertAhead","viewDecorations","observeOptions","useCharData","SelectionState","DOMObserver","handleDOMChange","mutations","take","ancestors","newSel","typeOver","brs","br","blockParent","readSel","checkCSS","fixUpBadSafariComposition","previousSibling","nextSibling","cssChecked","cssCheckWarned","rangeToSelectionRange","currentAnchor","safariShadowSelectionRange","read","addedNodes","nextCell","parseBetween","from_","to_","find","startDoc","ruleFromNode","isInline","readDOMChange","compositionID","shared","compare","preferredPos","preferredSide","change","findDiff","resolveSelection","$fromA","inlineChange","looksLikeBackspace","chFrom","chTo","mkTr","markChange","isMarkChange","parsedSel","curMarks","prevMarks","update","old","$newStart","$newEnd","skipClosingAndOpening","$next","fromEnd","mayOpen","endA","endB","isSurrogatePair","EditorView","checkStateComponent","getEditable","updateCursorWrapper","buildNodeViews","computeDocDeco","prevProps","redraw","updateSel","pluginsChanged","nodeViews","changedNodeViews","scroll","updateDoc","oldScrollPos","forceSelUpdate","selectionContextChanged","chromeKludge","prevState","pluginView","movedPos","cached","dispatchTransaction","sel1","sel2","nA","nB","withMeta","remarkHandlers","editorViewCtx","editorStateCtx","initTimerCtx","editorCtx","inputRulesCtx","prosePluginsCtx","remarkPluginsCtx","nodeViewCtx","markViewCtx","remarkCtx","remarkStringifyOptionsCtx","ConfigReady","ctx","InitReady","init","editor","SchemaReady","schemaTimerCtx","schemaCtx","nodesCtx","marksCtx","extendPriority","processor","plug","key2","schema2","CommandManager","_ctx","commands2","get","chains","chained","command","pipe","payload","cmd","createCmdKey","commandsCtx","commandsTimerCtx","CommandsReady","overrideBaseKeymap","keymap2","handleBackspace","KeymapManager","_keymap","keymaps","keymapItem","sortedItems","keymapCtx","keymapTimerCtx","KeymapReady","km","ParserReady","outOfScope$1","parserCtx","parserTimerCtx","SerializerReady","serializerTimerCtx","outOfScope","serializerCtx","defaultValueCtx","editorStateOptionsCtx","editorStateTimerCtx","EditorStateReady","getDoc","defaultValue","parser2","key$1","editorState","optionsOverride","prosePlugins","disposeBaseKeymap","_tr","_oldState","keymap$1","pasteRulesCtx","pasteRulesTimerCtx","PasteRulesReady","pasteRule","EditorViewReady","editorViewTimerCtx","editorViewOptionsCtx","rootCtx","rootDOMCtx","rootAttrsCtx","createViewContainer","prepareViewDom","editorView","xs","editorView2","markViews","view2","isPlainText","runner","EditorStatus","EditorStatus2","_Editor","_enableInspector","_configureList","_onStatusChange","_usrPluginStore","_sysPluginStore","_loadInternal","_prepare","_cleanup","_cleanupInternal","_setStatus","_loadPluginInStore","configPlugin","internalPlugins","loader","cleanup","status","enable","onChange","_plugins","clearPlugins","action","Editor","random","bytes","customRandom","alphabet","defaultSize","getRandom","mask","customAlphabet","$command","cmdKey","$inputRule","inputRule","ir","irs","$pasteRule","pr","prs","$mark","markSchema","ns","$node","nodeSchema","$prose","prose","prosePlugin","ps","$shortcut","shortcut","dispose","$view","v","$ctx","$nodeSchema","schemaCtx2","nextSchema","$markSchema","$useKeymap","userKeymap","shortcuts2","keymapDef","shortcuts","keymapTuple","targetKeys","targetKey","$nodeAttr","$markAttr","$remark","initialOptions","remarkPlugin","rp","getMarkdown","isPureText","clipboard","editable","vscodeData","language","codeBlock","domParser","slice2","template","GOOD_LEAF_SIZE","RopeSequence","Append","Leaf","prototypeAccessors","leftLen","max_empty_items","Branch","eventCount","preserveItems","remap","transform","remaining","addAfter","addBefore","Item","histOptions","newItems","oldItems","lastItem","overflow","DEPTH_OVERFLOW","cutOffEvents","mirrorPos","rebasedTransform","rebasedCount","rebasedItems","newUntil","iRebased","newMaps","branch","upto","newItem","cutPoint","mirrorOffset","HistoryState","undone","prevRanges","prevTime","prevComposition","applyTransaction","history","historyTr","historyKey","rebased","closeHistoryKey","appended","mustPreserveItems","rangesFor","newGroup","isAdjacentTo","mapRanges","adjacent","histTransaction","redo","pop","newHist","cachedPreserveItems","cachedPreserveItemsPlugins","hist","inputType","undo","buildCommand","undoCommand","redoCommand","historyProviderConfig","historyProviderPlugin","history$1","historyKeymap","updateIndent","indentConfig","indentPlugin","indent","freeGlobal","freeSelf","Symbol","objectProto","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","reWhitespace","trimmedEndIndex","reTrimStart","baseTrim","isObject","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","isBinary","FUNC_ERROR_TEXT","nativeMax","nativeMin","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","args","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","throttle","ListenerManager","listenerCtx","listener","listener2","listeners","prevDoc","prevMarkdown","prevSelection","currentSelection","trailingConfig","trailingPlugin","trailingPluginKey","shouldAppend","getNode","__","shouldInsertNodeAtEnd","splitListItem","itemType","itemAttrs","grandParent","depthBefore","depthAfter","nextType","liftListItem","liftToOuterList","liftOutOfList","endOfList","indexBefore","sinkListItem","nestedBefore","definitions","clean","remarkInlineLinks","serializeText","contentArr","emphasisAttr","emphasisSchema","toggleEmphasisCommand","emphasisStarInputRule","emphasisUnderscoreInputRule","emphasisKeymap","strongAttr","strongSchema","toggleStrongCommand","strongInputRule","strongKeymap","inlineCodeAttr","inlineCodeSchema","toggleInlineCodeCommand","t","inlineCodeInputRule","inlineCodeKeymap","linkAttr","linkSchema","toggleLinkCommand","updateLinkCommand","linkMark","docSchema","visitEmptyLine","ast","remarkPreserveEmptyLinePlugin","paragraphAttr","paragraphSchema","shouldPreserveEmptyLine","shouldPreserveEmptyLine2","turnIntoTextCommand","paragraphKeymap","headingIndex","defaultHeadingIdGenerator","headingIdGenerator","headingAttr","headingSchema","getId","wrapInHeadingInputRule","wrapInHeadingCommand","downgradeHeadingCommand","headingKeymap","blockquoteAttr","blockquoteSchema","wrapInBlockquoteInputRule","wrapInBlockquoteCommand","blockquoteKeymap","codeBlockAttr","codeBlockSchema","languageAttrs","createCodeBlockInputRule","createCodeBlockCommand","updateCodeBlockLanguageCommand","codeBlockKeymap","imageAttr","imageSchema","insertImageCommand","updateImageCommand","nodeWithPos","newAttrs","insertImageInputRule","hardbreakAttr","hardbreakSchema","insertHardbreakCommand","hardbreakKeymap","hrAttr","hrSchema","insertHrInputRule","insertHrCommand","bulletListAttr","bulletListSchema","ordered","spread","wrapInBulletListInputRule","wrapInBulletListCommand","bulletListKeymap","orderedListAttr","orderedListSchema","wrapInOrderedListInputRule","wrapInOrderedListCommand","orderedListKeymap","listItemAttr","listItemSchema","listType","sinkListItemCommand","liftListItemCommand","splitListItemCommand","liftFirstListItem","liftFirstListItemCommand","listItemKeymap","textSchema","htmlAttr","htmlSchema","inputRules","markInputRules","isMarkSelectedCommand","isNodeSelectedCommand","clearTextInCurrentBlockCommand","setBlockTypeCommand","wrapInBlockTypeCommand","blockRange","addBlockTypeCommand","selectTextNearPosCommand","clamp","remarkAddOrderInListPlugin","remarkLineBreak","remarkInlineLinkPlugin","isParent","isHTML","flatMapWithDepth","nthChild","BLOCK_CONTAINER_TYPES","remarkHtmlTransformer","remarkMarker","getMarker","inlineNodesCursorPlugin","inlineNodesCursorPluginKey","inlineNodesCursorPlugin2","leftDec","rightDec","hardbreakClearMarkPlugin","hardbreakFilterNodes","hardbreakFilterPlugin","notIn","isInsertHr","curDepth","canApply","syncHeadingIdPlugin","headingIdPluginKey","updateId","idMap","syncListOrderPlugin","syncOrderLabel","transactions","tr2","orderedListType","bulletListType","listItemType","handleNodeItem","changed","expectedLabel","needDispatch","pos2","_parent","index2","commonmark","readFromCache","addToCache","cachePos","TableMap","problems","axis","leftA","rightA","topA","bottomA","leftB","rightB","topB","bottomB","row","col","table","rowStart","rowEnd","rowEndIndex","computeMap","findWidth","mapPos","colWidths","rowNode","cellNode","colspan","rowspan","colwidth","h","colW","widthIndex","expectedPos","missing","tableMap","badWidths","findBadColWidths","hasRowSpan","rowWidth","prevRow","cell","colWidth","freshColWidth","getCellAttrs","extraAttrs","widthAttr","widths","setCellAttrs","validateColwidth","tableNodes","cellAttrs","tableNodeTypes","role","tableEditingKey","cellAround","isInTable","selectionCell","$cell","cellNear","pointsAtCell","moveCellForward","inSameTable","$cellA","$cellB","tableStart","removeColSpan","addColSpan","columnIsHeader","headerCell","CellSelection","$anchorCell","$headCell","cells","tableChanged","rows","rowContent","cellRect","extraLeft","extraRight","anchorTop","headTop","anchorBottom","headBottom","anchorRect","headRect","anchorLeft","headLeft","anchorRight","headRight","anchorCell","headCell","CellBookmark","drawCellSelection","isCellBoundarySelection","afterFrom","beforeTo","isTextSelectionAcrossCells","fromCellBoundaryNode","toCellBoundaryNode","normalizeSelection","allowTableNodeSelection","lastCell","fixTablesKey","changedDescendants","curSize","fixTables","fixTable","tablePos","mustAdd","prob","convertTableNodeToArrayOfRows","tableNode","rowCount","colCount$1","rowIndex","colIndex","cellIndex","cellPos","topCellIndex","leftCellIndex","convertArrayOfRowsToTableNode","arrayOfNodes","newRows","oldRow","newCells","oldCell","newCell","newRow","moveRowInArrayOfRows","indexesOrigin","indexesTarget","directionOverride","direction","rowsExtracted","positionOffset","findTable","getCellsInColumn","columnIndex","getCellsInRow","getSelectionRangeInColumn","startColIndex","endColIndex","maybeEndIndex","indexes","maybeCells","firstSelectedColumnCells","firstRowCells","columnCells","getSelectionRangeInRow","startRowIndex","endRowIndex","firstSelectedRowCells","firstColumnCells","rowCells","transpose","moveColumn","moveColParams","_getSelectionRangeInC","_getSelectionRangeInC2","originIndex","targetIndex","select","indexesOriginColumn","indexesTargetColumn","newTable","moveTableColumn$1","$lastCell","firstCell","$firstCell","moveRow","moveRowParams","_getSelectionRangeInR","_getSelectionRangeInR2","indexesOriginRow","indexesTargetRow","moveTableRow$1","selectedRect","addColumn","refColumn","addColumnBefore","addColumnAfter","removeColumn","mapStart","deleteColumn","removeRow","rowPos","nextRow","newPos","deleteRow","setCellAttr","deprecated_toggleHeader","isHeaderEnabledByType","cellPositions","toggleHeader","isHeaderRowEnabled","isHeaderColumnEnabled","selectionStartsAt","cellsRect","newType","relativeCellPos","findNextCell","goToNextCell","deleteTable","deleteCellSelection","baseContent","moveTableRow","moveTableColumn","pastedCells","fitSlice","ensureRectangular","clipCells","newWidth","newHeight","growTable","emptyHead","start$1","header","emptyRow","isolateHorizontal","cellTop","cellLeft","isolateVertical","updatePos","insertCells","recomp","handleKeyDown","arrow","shiftArrow","maybeSetSelection","atEndOfCell","cellSel","handlePaste","handleMouseDown$1","startEvent","_cellUnderMouse","startDOMCell","domInCell","setCellSelection","cellUnderMouse","$anchor$1","starting","dirStr","mousePos","TableView","defaultCellMinWidth","updateColumnsOnResize","record","colgroup","overrideCol","overrideValue","totalWidth","fixedWidth","hasWidth","cssWidth","col$1","_nextDOM$parentNode","columnResizingPluginKey","columnResizing","handleWidth","cellMinWidth","View","lastColumnResizable","_plugin$spec","tableName","ResizeState","pluginState","handleMouseMove","handleMouseLeave","handleMouseDown","handleDecorations","activeHandle","domCellAround","edgeCell","updateHandle","_view$dom$ownerDocume","win","currentColWidth","finish","event$1","pluginState$1","updateColumnWidth","draggedWidth","dragged","displayColumnWidth","domWidth","resizeMinWidth","mapIndex","zeroes","_columnResizingPlugin","tableEditing","isComposing","createDecorations","createSpan","imeSpan","ccount","escapeStringRegexp","findAndReplace","ignored","pairs","toPairs","pairIndex","grandparent","matchObject","tupleOrList","tuple","toExpression","toFunction","inConstruct","notInConstruct","gfmAutolinkLiteralFromMarkdown","transformGfmAutolinkLiterals","enterLiteralAutolink","enterLiteralAutolinkValue","exitLiteralAutolink","exitLiteralAutolinkEmail","exitLiteralAutolinkHttp","exitLiteralAutolinkWww","gfmAutolinkLiteralToMarkdown","assert","findUrl","findEmail","protocol","domain","isCorrectDomain","splitUrl","atext","trailExec","trail","closingParenIndex","openingParens","closingParens","email","footnoteReference","footnoteReferencePeek","enterFootnoteCallString","enterFootnoteCall","enterFootnoteDefinitionLabelString","enterFootnoteDefinition","exitFootnoteCallString","exitFootnoteCall","exitFootnoteDefinitionLabelString","exitFootnoteDefinition","gfmFootnoteFromMarkdown","gfmFootnoteToMarkdown","firstLineBlank","footnoteDefinition","mapAll","mapExceptFirst","constructsWithoutStrikethrough","handleDelete","peekDelete","gfmStrikethroughFromMarkdown","enterStrikethrough","exitStrikethrough","gfmStrikethroughToMarkdown","defaultStringLength","markdownTable","align","stringLength","alignments","cellMatrix","sizeMatrix","longestCellByColumn","mostCellsPerRow","sizes","toAlignment","gfmTableFromMarkdown","enterTable","enterCell","enterRow","exitCodeText","exitTable","gfmTableToMarkdown","padding","alignDelimiters","inlineCodeWithTable","handleTable","handleTableCell","handleTableRow","serializeData","handleTableAsData","handleTableRowAsData","matrix","defaultHandlers","gfmTaskListItemFromMarkdown","exitCheck","exitParagraphWithTaskListItem","gfmTaskListItemToMarkdown","listItemWithTaskListItem","firstParaghraph","checkable","checkbox","gfmFromMarkdown","gfmToMarkdown","wwwPrefix","tokenizeWwwPrefix","tokenizeDomain","tokenizePath","tokenizeTrail","emailDomainDotTrail","tokenizeEmailDomainDotTrail","wwwAutolink","tokenizeWwwAutolink","previousWww","protocolAutolink","tokenizeProtocolAutolink","previousProtocol","emailAutolink","tokenizeEmailAutolink","previousEmail","gfmAutolinkLiteral","dot","gfmAtext","previousUnbalanced","emailDomain","emailDomainAfter","emailDomainDot","wwwStart","wwwAfter","protocolStart","protocolPrefixInside","protocolSlashesInside","afterProtocol","protocolAfter","wwwPrefixInside","wwwPrefixAfter","underscoreInLastSegment","underscoreInLastLastSegment","domainInside","domainAfter","domainAtPunctuation","sizeClose","pathInside","pathAtPunctuation","trailCharacterReferenceStart","trailBracketAfter","trailCharacterReferenceInside","gfmFootnote","tokenizeDefinitionStart","tokenizeDefinitionContinuation","gfmFootnoteDefinitionEnd","tokenizeGfmFootnoteCall","tokenizePotentialGfmFootnoteCall","resolveToPotentialGfmFootnoteCall","call","callStart","callData","callEscape","labelAtMarker","whitespaceAfter","gfmStrikethrough","single","tokenizeStrikethrough","resolveAllStrikethrough","strikethrough","EditMap","addImplementation","vecs","editMap","gfmTableAlign","inDelimiterRow","alignIndex","gfmTable","tokenizeTable","resolveTable","sizeB","bodyRowStart","headRowBefore","headRowStart","headRowBreak","headDelimiterStart","headRowData","headRowEscape","headDelimiterBefore","headDelimiterValueBefore","headDelimiterCellBefore","headDelimiterNok","headDelimiterLeftAlignmentAfter","headDelimiterCellAfter","headDelimiterFiller","headDelimiterRightAlignmentAfter","bodyRowBreak","bodyRowData","bodyRowEscape","inFirstCellAwaitingPipe","rowKind","afterHeadAwaitingFirstBodyRow","lastTableEnd","currentTable","currentBody","currentCell","flushTableEnd","flushCell","previousCell","groupName","valueName","getPoint","relatedStart","relatedEnd","valueToken","tableBody","exits","related","tasklistCheck","tokenizeTasklistCheck","gfmTaskListItem","spaceThenNonSpace","gfm","remarkGfm","micromarkExtensions","fromMarkdownExtensions","toMarkdownExtensions","strikethroughAttr","strikethroughSchema","toggleStrikethroughCommand","strikethroughInputRule","strikethroughKeymap","originalSchema","tableSchema","firstLine","tableHeaderRowSchema","tableRowSchema","tableCellSchema","tableHeaderSchema","createTable","rowsCount","colsCount","headerCells","selectLine","isRowSelection","createCellSelection","selectRow","selectCol","addRowWithAlignment","headerCol","getAllCellsInTable","selectTable","goToPrevTableCellCommand","goToNextTableCellCommand","insertTableCommand","moveRowCommand","moveColCommand","selectRowCommand","selectColCommand","selectTableCommand","deleteSelectedCellsCommand","isRow","isCol","addColBeforeCommand","addColAfterCommand","addRowBeforeCommand","addRowAfterCommand","setAlignCommand","alignment","insertTableInputRule","tablePasteRule","_view","_offset","headerRow","tableCells","newHeaderRow","tableKeymap","id$1","markdownId","footnoteDefinitionSchema","footnoteReferenceSchema","extendListItemSchemaForTask","baseSchema","checked","wrapInTaskListInputRule","finPos","pasteRules","autoInsertSpanPlugin","columnResizingPlugin","tableEditingPlugin","remarkGFMPlugin","remarkGFM","pluginKey","getChildIndex","keepTableAlignPlugin","tableRow","tableHeaderRow","currentAlign","FeaturesCtx","CrepeCtx","_editor","_rootElement","_editable","CrepeBuilder","feature","defaultNodeFilter","blockConfig","selectRootNodeByDom","filterNodes","filter","needLookup","checkDepth","ancestorPos","filterResult","BlockService","_BlockService_instances","_createSelection","_activeSelection","_active","_activeDOMRect","_dragging","_notify","_hide","_show","_handleMouseDown","_handleMouseUp","_handleDragStart","_handleDragEnd","_mousemoveCallback","_dragEnd","view_get","nodeSelection","notify","activeEl","filterNodes_get","hasHorizontalScrollbar","rootRect","totalHeight","blockService","blockServiceInstance","blockSpec","blockPlugin","milkdownPluginBlockKey","service","BlockProvider","_BlockProvider_instances","_element","_service","_activeNode","_root","_initialized","_middleware","_floatingUIOptions","_getOffset","_getPosition","_getPlacement","__privateMethod","init_fn","editorDom","deriveContext","virtualEl","flip","offsetOption","offsetExt","computePosition","makeMap","EMPTY_OBJ","EMPTY_ARR","NOOP","NO","isOn","isModelListener","isMap","toTypeString","isSet","isFunction","isString","isPromise","toRawType","isIntegerKey","isReservedProp","isBuiltInDirective","cacheStringFunction","camelizeRE","camelize","c","hyphenateRE","hyphenate","capitalize","toHandlerKey","hasChanged","oldValue","invokeArrayFns","arg","writable","looseToNumber","_globalThis","getGlobalThis","normalizeStyle","res","normalized","parseStringStyle","listDelimiterRE","propertyDelimiterRE","styleCommentRE","cssText","ret","normalizeClass","HTML_TAGS","SVG_TAGS","MATH_TAGS","isHTMLTag","isSVGTag","isMathMLTag","specialBooleanAttrs","isSpecialBooleanAttr","includeBooleanAttr","warn","activeEffectScope","EffectScope","detached","l","currentEffectScope","fromParent","getCurrentScope","activeSub","pausedQueueEffects","ReactiveEffect","batch","cleanupEffect","prepareDeps","prevEffect","prevShouldTrack","shouldTrack","cleanupDeps","removeSub","isDirty","batchDepth","batchedSub","batchedComputed","isComputed","startBatch","endBatch","removeDep","refreshComputed","globalVersion","dep","prevSub","soft","nextSub","prevDep","nextDep","trackStack","pauseTracking","resetTracking","Link","Dep","debugInfo","addSub","currentTail","targetMap","ITERATE_KEY","MAP_KEY_ITERATE_KEY","ARRAY_ITERATE_KEY","depsMap","trigger","newValue","oldTarget","targetIsArray","isArrayIndex","newLength","reactiveReadArray","toRaw","isShallow","toReactive","shallowReadArray","toWrapped","isReadonly","toReadonly","isReactive","arrayInstrumentations","iterator","searchProxy","separator","noTracking","reduce","comparer","method","wrapValue","iter","arrayProto","wrappedRetFn","methodFn","result2","wrappedFn","isProxy","isNonTrackableKeys","builtInSymbols","BaseReactiveHandler","_isReadonly","_isShallow","receiver","isReadonly2","isShallow2","shallowReadonlyMap","readonlyMap","shallowReactiveMap","reactiveMap","isRef","readonly","reactive","MutableReactiveHandler","isArrayWithIntegerKey","isOldValueReadonly","hadKey","ReadonlyReactiveHandler","mutableHandlers","readonlyHandlers","shallowReactiveHandlers","shallowReadonlyHandlers","toShallow","getProto","createIterableMethod","rawTarget","targetIsMap","isPair","isKeyOnly","innerIterator","createReadonlyMethod","createInstrumentations","shallow","instrumentations","rawKey","has","observed","checkIdentityKeys","hadItems","createInstrumentationGetter","mutableCollectionHandlers","shallowCollectionHandlers","readonlyCollectionHandlers","shallowReadonlyCollectionHandlers","targetTypeMap","getTargetType","createReactiveObject","shallowReactive","shallowReadonly","baseHandlers","collectionHandlers","proxyMap","targetType","existingProxy","proxy","markRaw","ref","createRef","shallowRef","rawValue","RefImpl","useDirectValue","unref","ref2","shallowUnwrapHandlers","proxyRefs","objectWithRefs","ComputedRefImpl","isSSR","getterOrOptions","debugOptions","cRef","INITIAL_WATCHER_VALUE","cleanupMap","activeWatcher","onWatcherCleanup","cleanupFn","failSilently","owner","cleanups","watch","cb","immediate","once","scheduler","augmentJob","warnInvalidSource","reactiveGetter","source2","traverse","effect","boundCleanup","forceTrigger","isMultiSource","currentEffect","baseGetter","scope","watchHandle","_cb","job","immediateFirstRun","currentWatcher","cleanup2","pushWarningContext","vnode","popWarningContext","isWarning","warn$1","appWarnHandler","trace","getComponentTrace","callWithErrorHandling","formatComponentName","warnArgs","formatTrace","currentVNode","normalizedStack","parentInstance","logs","formatTraceEntry","recurseCount","postfix","isRoot","formatProps","formatProp","ErrorTypeStrings$1","handleError","callWithAsyncErrorHandling","throwInDev","contextVNode","throwUnhandledErrorInProduction","exposedInstance","errorInfo","errorCapturedHooks","logError","throwInProd","queue","flushIndex","pendingPostFlushCbs","activePostFlushCbs","postFlushIndex","resolvedPromise","currentFlushPromise","RECURSION_LIMIT","nextTick","findInsertionIndex","middle","middleJob","middleJobId","queueJob","jobId","lastJob","queueFlush","flushJobs","queuePostFlushCb","flushPreFlushCbs","checkRecursiveUpdates","flushPostFlushCbs","deduped","componentName","getComponentName","isHmrUpdating","hmrDirtyComponents","tryWrap","createRecord","rerender","reload","registerHMR","unregisterHMR","initialDef","normalizeClassComponent","component","isClassComponent","newRender","newComp","updateComponentDef","instances","oldComp","dirtyInstances","devtools$1","devtoolsNotInstalled","emit$1","setDevtoolsHook$1","newHook","devtoolsInitApp","app","version","Text","Comment","Static","devtoolsUnmountApp","devtoolsComponentAdded","createDevtoolsComponentHook","devtoolsComponentUpdated","_devtoolsComponentRemoved","devtoolsComponentRemoved","devtoolsPerfStart","createDevtoolsPerformanceHook","devtoolsPerfEnd","devtoolsComponentEmit","params","currentRenderingInstance","currentScopeId","setCurrentRenderingInstance","withCtx","isNonScopedSlot","renderFnWithContext","prevInstance","validateDirectiveName","invokeDirectiveHook","prevVNode","oldBindings","binding","provide","currentInstance","provides","parentProvides","treatDefaultAsFactory","getCurrentInstance","currentApp","ssrContextKey","useSSRContext","watchEffect","doWatch","baseWatchOptions","runsImmediately","ssrCleanup","isInSSRComponentSetup","watchStopHandle","isPre","queuePostRenderEffect","isFirstRun","watch$1","instanceWatch","publicThis","createPathGetter","reset","setCurrentInstance","TeleportEndKey","isTeleport","leaveCbKey","setTransitionHooks","hooks","defineComponent","extraOptions","markAsyncBoundary","knownTemplateRefs","pendingSetRefMap","setRef","rawRef","oldRawRef","parentSuspense","isUnmount","isAsyncWrapper","refValue","getComponentPublicInstance","oldRef","refs","setupState","rawSetupState","canSetSetupRef","canSetRef","invalidatePendingSetRef","oldRawRefAtom","_isString","_isRef","doSet","newVal","pendingSetRef","isKeepAlive","onActivated","registerKeepAliveHook","onDeactivated","wrappedHook","injectHook","injectToKeepAliveRoot","keepAliveRoot","injected","onUnmounted","prepend","apiName","createHook","lifecycle","onBeforeMount","onMounted","onBeforeUpdate","onUpdated","onBeforeUnmount","onServerPrefetch","onRenderTriggered","onRenderTracked","onErrorCaptured","NULL_DYNAMIC_COMPONENT","getPublicInstance","isStatefulComponent","publicPropertiesMap","resolveMergedOptions","isReservedPrefix","hasSetupBinding","PublicInstanceProxyHandlers","accessCache","appContext","shouldCacheAccess","publicGetter","cssModule","globalProperties","markAttrsAccessed","cssModules","descriptor","createDevRenderContext","exposePropsOnRenderContext","propsOptions","exposeSetupStateOnRenderContext","normalizePropsOrEmits","createDuplicateChecker","applyOptions","callHook","dataOptions","computedOptions","methods","watchOptions","provideOptions","injectOptions","created","beforeMount","mounted","beforeUpdate","activated","deactivated","beforeDestroy","beforeUnmount","destroyed","unmounted","render","renderTracked","renderTriggered","errorCaptured","serverPrefetch","expose","inheritAttrs","components","directives","filters","checkDuplicateProperties","resolveInjections","methodHandler","opt","createWatcher","registerLifecycleHook","register","_hook","exposed","normalizeInject","mixins","extendsOptions","globalMixins","optionMergeStrategies","resolved","mergeOptions","strats","asMixin","strat","internalOptionMergeStrats","mergeDataFn","mergeEmitsOrPropsOptions","mergeObjectOptions","mergeAsArray","mergeWatchOptions","mergeInject","createAppContext","uid$1","createAppAPI","hydrate","rootComponent","rootProps","installedPlugins","pluginCleanupFns","isMounted","mixin","validateComponentName","directive","rootContainer","isHydrate","createVNode","cloned","cloneVNode","lastApp","getModelModifiers","modelName","emit","rawArgs","emitsOptions","validator","lowerCaseEvent","handlerName","onceHandler","mixinEmitsCache","normalizeEmitsOptions","comp","hasExtends","extendEmits","raw2","normalizedFromExtend","isEmitListener","accessedAttrs","renderComponentRoot","Component","withProxy","slots","renderCache","fallthroughAttrs","proxyToUse","thisProxy","normalizeVNode","render2","getFunctionalFallthrough","setRoot","getChildRoot","shapeFlag","filterModelListeners","allAttrs","eventAttrs","isElementRoot","rawChildren","dynamicChildren","childRoot","filterSingleRoot","dynamicIndex","updatedRoot","recurse","singleRoot","isVNode","shouldUpdateComponent","nextVNode","optimized","nextProps","patchFlag","emits","hasPropsChanged","dynamicProps","nextKeys","updateHOCHostEl","internalObjectProto","createInternalObject","isInternalObject","initProps","rawProps","isStateful","setFullProps","validateProps","isInHmrContext","updateProps","rawPrevProps","rawCurrentProps","hasAttrsChanged","propsToUpdate","camelizedKey","resolvePropValue","kebabKey","needCastKeys","rawCastValues","camelKey","castValues","isAbsent","hasDefault","propsDefaults","mixinPropsCache","normalizePropsOptions","extendProps","normalizedKey","validatePropName","propType","shouldCast","shouldCastTrue","getType","ctor","resolvedValues","camelizePropsKey","validateProp","required","skipCheck","isValid","expectedTypes","valid","expectedType","assertType","getInvalidTypeMessage","isSimpleType","receivedType","expectedValue","styleValue","receivedValue","isExplicable","isBoolean","elem","isInternalKey","normalizeSlotValue","normalizeSlot","rawSlot","normalizeObjectSlots","rawSlots","normalizeVNodeSlots","assignSlots","initSlots","updateSlots","needDeletionCheck","deletionComparisonTarget","supported","perf","startMeasure","isSupported","endMeasure","startTag","endTag","measureName","initFeatureFlags","needWarn","multi","queueEffectWithSuspense","createRenderer","baseCreateRenderer","createHydrationFns","hostInsert","hostRemove","hostPatchProp","hostCreateElement","hostCreateText","hostCreateComment","hostSetText","hostSetElementText","hostParentNode","hostNextSibling","hostSetScopeId","hostInsertStaticContent","patch","n1","n2","parentComponent","slotScopeIds","isSameVNodeType","getNextHostNode","unmount","processText","processCommentNode","mountStaticNode","patchStaticNode","processFragment","processElement","processComponent","internals","childNodes","newChild","oldChild","removeStaticNode","moveStaticNode","mountElement","customElement","patchElement","vnodeHook","transition","dirs","mountChildren","resolveChildrenNamespace","setScopeId","invokeVNodeHook","needCallTransitionHooks","needTransition","scopeId","subTree","isSuspense","parentVNode","cloneIfMounted","oldProps","newProps","toggleRecurse","patchBlockChildren","traverseStaticChildren","patchChildren","patchProps","newChildren","fallbackContainer","oldVNode","newVNode","fragmentStartAnchor","fragmentEndAnchor","fragmentSlotScopeIds","mountComponent","updateComponent","initialVNode","createComponentInstance","setupComponent","setupRenderEffect","placeholder","updateComponentPreRender","componentUpdateFn","bu","u","nonHydratedAsyncRoot","locateNonHydratedAsyncRoot","originNext","nextTree","prevTree","bm","isAsyncWrapperVNode","scopedInitialVNode","c1","prevShapeFlag","c2","patchKeyedChildren","patchUnkeyedChildren","unmountChildren","oldLength","commonLength","nextChild","parentAnchor","l2","e1","e2","nextPos","s1","s2","keyToNewIndexMap","patched","toBePatched","maxNewIndexSoFar","newIndexToOldIndexMap","prevChild","increasingNewIndexSequence","getSequence","nextIndex","anchorVNode","resolveAsyncComponentPlaceholder","moveType","leave","delayLeave","afterLeave","remove2","performLeave","doRemove","cacheIndex","shouldInvokeDirs","shouldInvokeVnodeHook","unmountComponent","removeFragment","performRemove","bum","um","invalidateMount","teleportEnd","isFlushing","currentNamespace","ch1","ch2","arrI","subComponent","anchorVnode","suspense","createVNodeWithArgsTransform","_createVNode","normalizeKey","normalizeRef","ref_key","ref_for","createBaseVNode","needFullChildrenNormalization","normalizeChildren","guardReactiveProps","klass","extraProps","mergeRef","cloneTransition","mergedProps","mergeProps","deepCloneVNode","createTextVNode","flag","slot","slotFlag","toMerge","incoming","emptyAppContext","uid","internalSetCurrentInstance","setInSSRSetupState","g","registerGlobalSetter","setters","unsetCurrentInstance","isBuiltInTag","isNativeTag","setupResult","setupStatefulComponent","names","isRuntimeOnly","setup","setupContext","createSetupContext","isAsyncSetup","resolvedResult","handleSetupResult","finishComponentSetup","skipOptions","attrsProxyHandlers","getSlotsProxy","exposedType","attrsProxy","slotsProxy","classifyRE","classify","includeInferred","inferFromRegistry","registry","computed$1","propsOrChildren","initCustomFormatter","vueStyle","numberStyle","stringStyle","keywordStyle","formatter","genRefFlag","formatValue","formatInstance","blocks","createInstanceBlock","extractKeys","asRaw","Comp","extracted","isKeyOfType","opts","policy","tt","unsafeToTrustedHTML","svgNS","mathmlNS","templateContainer","nodeOps","vtcKey","patchClass","isSVG","transitionClasses","vShowOriginalDisplay","vShowHidden","CSS_VAR_TEXT","displayRE","patchStyle","isCssString","hasControlledDisplay","prevStyle","setStyle","cssVarText","semicolonRE","importantRE","autoPrefix","prefixes","prefixCache","rawName","xlinkNS","patchAttr","patchDOMProp","needRemove","addEventListener","removeEventListener","veiKey","patchEvent","prevValue","nextValue","invokers","existingInvoker","sanitizeEventValue","parseName","invoker","createInvoker","optionsModifierRE","cachedNow","getNow","initialValue","patchStopImmediatePropagation","originalStop","isNativeOn","patchProp","shouldSetAsProp","camelize$1","rendererOptions","renderer","ensureRenderer","createApp","injectNativeTagCheck","injectCompilerOptionsCheck","mount","containerOrSelector","normalizeContainer","resolveRootNamespace","isCustomElement","compilerOptions","initDev","slashFactory","slashSpec","slashPlugin","SlashProvider","_SlashProvider_instances","_debounce","_trigger","_shouldShow","_updater","_onUpdate","composing","isSame","matchNode","isTextBlock","isSlashChildren","notHasFocus","isNotInParagraph","_shouldShow_fn","currentTextBlockContent","Icon","icon","className","onClick","clsx","DOMPurify","__defProp$2","__getOwnPropSymbols$2","__hasOwnProp$2","__propIsEnum$2","__defNormalProp$2","__spreadValues$2","defaultImageBlockConfig","imageBlockConfig","visitImage","remarkImageBlockPlugin","__defProp$1","__getOwnPropSymbols$1","__hasOwnProp$1","__propIsEnum$1","__defNormalProp$1","__spreadValues$1","IMAGE_DATA_TYPE","imageBlockSchema","caption","ratio","nanoid","ImageInput","setLink","onUpload","imageIcon","uploadButton","confirmButton","uploadPlaceholderText","focusLinkInput","linkInputRef","currentLink","uuid","hidePlaceholder","onEditLink","onKeydown","_a2","_b2","onConfirmLinkInput","onUploadFile","ImageViewer","setAttr","imageRef","resizeHandle","showCaption","onImageLoad","host","maxWidth","transformedHeight","h2","onToggleCaption","onInputCaption","onBlurCaption","onResizeHandlePointerMove","onResizeHandlePointerUp","originHeight","currentHeight","ratio2","onResizeHandlePointerDown","MilkdownImageBlock","imageBlockView","initialNode","getPos","selected","disposeSelectedWatcher","proxyDomURL","bindAttrs","proxiedURL","updatedNode","useCrepeFeatures","crepeFeatureConfig","features","CrepeFeature","CrepeFeature2","bulletListIcon","codeIcon","dividerIcon","h1Icon","h2Icon","h3Icon","h4Icon","h5Icon","h6Icon","menuIcon","orderedListIcon","plusIcon","quoteIcon","tableIcon","textIcon","todoListIcon","functionsIcon","isInCodeBlock","isInList","__typeError$2","__accessCheck$2","__privateGet$2","__privateAdd$2","__privateSet$2","_groups","_getGroupInstance","GroupBuilder$1","groupInstance","group2","getGroups","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","_z","_A","_B","_C","_D","_E","_F","_G","_H","_I","_J","_K","_L","_M","_N","_O","_P","_Q","_R","_S","_T","_U","_V","_W","_X","_Y","_Z","_$","_aa","_ba","_ca","_da","_ea","_fa","_ga","_ha","_ia","_ja","_ka","_la","_ma","_na","_oa","_pa","_qa","_ra","_sa","_ta","_ua","_va","_wa","_xa","_ya","_za","_Aa","_Ba","_Ca","_Da","_Ea","_Fa","_Ga","_Ha","_Ia","_Ja","_Ka","_La","_Ma","_Na","_Oa","_Pa","_Qa","_Ra","_Sa","_Ta","_Ua","_Va","_Wa","_Xa","_Ya","_Za","__a","_$a","_ab","_bb","_db","_eb","_fb","_gb","_hb","_ib","_jb","_kb","flags","isLatexEnabled","isImageBlockEnabled","isTableEnabled","groupBuilder","GroupBuilder","textGroup","ctx2","hr","listGroup","bulletList","orderedList","advancedGroup","imageBlock","groups","items2","groups2","Menu","show","hide","groupInfo","hoverIndex","prevMousePosition","onPointerMove","onHover","prevHoverIndex","scrollToIndex","scrollRoot","runByIndex","prevGroup","nextGroup","getOnPointerEnter","prevPos","__typeError$1","__accessCheck$1","__privateGet$1","__privateAdd$1","__privateSet$1","_content$1","_app$1","_filter","_slashProvider","_programmaticallyPos","menu","menuAPI","configureMenu","MenuView","currentText","isSelectionAtEndOfNode","maxSize","validPos","BlockHandle","addButton","_content","_provider","_app","BlockHandleView","blockProviderOptions","blockDom","totalDescendant","domRect","handleRect","paddingTop","paddingBottom","handleHeight","configureBlockHandle","blockEdit","TooltipProvider","_TooltipProvider_instances","_cleanupAutoUpdate","_shift","_updatePosition","_shouldAutoUpdate","autoUpdate","virtualElement","isEmptyTextBlock","isTooltipChildren","tooltipFactory","tooltipSpec","tooltipPlugin","__defProp$3","__getOwnPropSymbols$3","__hasOwnProp$3","__propIsEnum$3","__defNormalProp$3","__spreadValues$3","defaultState","linkTooltipState","defaultAPI","linkTooltipAPI","defaultConfig","linkPreviewTooltip","linkEditTooltip","SourceLocation","lexer","second","Token","loc","endToken","ParseError","underlined","setting","defaultIfUndefined","uppercase","ESCAPE_LOOKUP","ESCAPE_REGEX","getBaseElem","isCharacterBox","baseElem","protocolFromUrl","utils","SETTINGS_SCHEMA","color","defs","getDefaultValue","defaultType","Settings","errorCode","errorMsg","strict","trust","Style","cramped","sup","fracNum","fracDen","cramp","text$1","D","Dc","T","Tc","S","Sc","SS","SSc","Style$1","scriptData","scriptFromCodepoint","codepoint","script","allBlocks","supportedCodepoint","hLinePad","sqrtMain","extraVinculum","sqrtSize1","sqrtSize2","sqrtSize3","sqrtSize4","phasePath","sqrtTall","viewBoxHeight","vertSegment","sqrtPath","innerPath","tallDelim","midHeight","DocumentFragment","markup","toText","fontMetricsData","sigmasAndXis","extraCharacterMap","setFontMetrics","fontName","metrics","getCharacterMetrics","font","mode","fontMetricsBySizeIndex","getGlobalMetrics","sizeIndex","sizeStyleMap","sizeMultipliers","sizeAtStyle","Options","wantSize","fontFamily","fontWeight","fontShape","oldOptions","ptPerUnit","relativeUnit","validUnit","unit","calculateSize","sizeValue","scale","unitOptions","makeEm","createClass","classes","initNode","toNode","invalidAttributeNameRegex","toMarkup","Span","attribute","Anchor","href","Img","iCombinations","SymbolNode","italic","skew","needsSpan","escaped","SvgNode","attributes","PathNode","pathName","alternate","LineNode","assertSymbolDomNode","assertSpan","ATOMS","NON_ATOMS","symbols","defineSymbol","acceptUnicodeChar","math","ams","accent","bin","mathord","op","punct","rel","spacing","textord","ligatures","mathTextSymbols","textSymbols","_ch","letters","_i2","_ch2","wideChar","_i3","_ch3","_i4","_ch4","extraLatin","_i5","_ch5","wideLatinLetterData","wideNumeralData","wideCharacterFont","H","L","codePoint","lookupSymbol","makeSymbol","lookup","symbolNode","mathsym","boldsymbol","makeOrd","isFont","fontOrFamily","wideFontName","wideFontClass","fontClasses","fontData","fontMap","retrieveTextFontName","makeFragment","_fontName","_fontName2","_fontName3","canCombine","_style","tryCombineChars","chars","sizeElementFromChildren","maxFontSize","makeSpan$2","makeSvgSpan","makeLineSpan","thickness","makeAnchor","wrapFragment","getVListChildrenAndDepth","_depth","currPos","makeVList","pstrutSize","pstrut","realChildren","minPos","_child","_elem","childWrap","vlist","emptySpan","depthStrut","topStrut","vtable","makeGlue","measurement","baseFontName","fontStylesName","svgData","staticSvg","svgNode","buildCommon","thinspace","mediumspace","thickspace","spacings","tightSpacings","_functions","_htmlGroupBuilders","_mathmlGroupBuilders","defineFunction","_ref","htmlBuilder","mathmlBuilder","defineFunctionBuilders","_ref2","normalizeArgument","ordargument","makeSpan$1","binLeftCanceller","binRightCanceller","styleMap$1","DomEnum","buildExpression$1","isRealGroup","surrounding","buildGroup$1","glueOptions","dummyPrev","dummyNext","traverseNonSpaceNodes","prevType","getTypeOfDomTree","partialGroup","checkPartialGroup","nonspace","getOutermostNode","makeNullDelimiter","moreClasses","baseOptions","groupNode","multiplier","buildHTMLUnbreakable","body","strut","buildHTML","eqnNum","nobreak","tagChild","htmlNode","newDocumentFragment","MathNode","SpaceNode","mathMLTree","makeText","makeRow","getVariant","isNumberPunctuation","buildExpression","isOrdgroup","buildGroup","lastGroup","_group","buildExpressionRow","buildMathML","texExpression","isDisplayMode","forMathmlOnly","annotation","semantics","wrapperClass","optionsFromSettings","displayWrap","katexNode","mathMLNode","_htmlNode","buildHTMLTree","stretchyCodePoint","mathMLnode","katexImagesData","groupLength","svgSpan","buildSvgSpan_","viewBoxWidth","grp","numChars","_height","imgIndex","paths","_minWidth","_viewBoxHeight","_height2","numSvgChildren","widthClasses","aligns","align1","_path","_svgNode","_span","minWidth","encloseSpan","topPad","bottomPad","stretchy","assertNodeType","assertSymbolNodeType","typedNode","checkSymbolNodeType","htmlBuilder$a","supSubGroup","mustShift","baseChar","baseGroup","accentBelow","clearance","accentBody","accentFull","accentWrap","mathmlBuilder$9","accentNode","NON_STRETCHY_ACCENT_REGEX","isStretchy","isShifty","funcName","innerGroup","kern","paddedNode","optArgs","newOptions","upperGroup","arrowPrefix","lowerGroup","arrowBody","arrowShift","upperShift","lowerShift","arrowNode","upperNode","lowerNode","_lowerNode","makeSpan","htmlBuilder$9","elements","mathmlBuilder$8","binrelClass","_ref3","baseArg","shiftedArg","mclass","baseOp","supsub","cdArrowFunctionName","isStartOfArrow","isLabelEnd","endChar","cdArrow","arrowChar","labels","leftLabel","bareArrow","sizedArrow","rightLabel","arrowGroup","parseCD","parsedRows","rowNodes","labelNum","inLabel","k","wrappedArrow","cols","number","htmlBuilder$8","mathmlBuilder$7","breakOnTokenText","newLine","globalMap","checkControlSequence","getRHS","letCommand","global","macro","numArgs","delimiters","tokens","_ref4","getMetrics","symbol","styleWrap","delim","toStyle","delimSizeMultiplier","centerSpan","makeSmallDelim","center","mathrmSize","makeLargeDelim","makeGlyphSpan","sizeClass","corner","makeInner","lapInEms","lap","verts","doubleVerts","makeStackedDelim","heightTotal","repeat","svgLabel","topMetrics","topHeightTotal","repeatMetrics","repeatHeightTotal","bottomMetrics","bottomHeightTotal","middleHeightTotal","middleFactor","middleMetrics","minHeight","repeatCount","realHeightTotal","axisHeight","pathStr","svg","innerHeight","_innerHeight","vbPad","emPad","sqrtSvg","sqrtName","pathNode","makeSqrtImage","traverseSequence","stackLargeDelimiterSequence","sizeMultiplier","spanHeight","texHeight","advanceWidth","sizeToMaxHeight","stackLargeDelimiters","stackAlwaysDelimiters","stackNeverDelimiters","makeSizedDelim","stackNeverDelimiterSequence","stackAlwaysDelimiterSequence","delimTypeToFont","heightDepth","makeCustomSizedDelim","delimType","makeLeftRightDelim","delimiterFactor","delimiterExtend","maxDistFromAxis","delimiter","delimiterSizes","checkDelimiter","symDelim","assertParsed","innerDepth","hadMiddle","leftDelim","middleDelim","isMiddle","rightDelim","colorOptions","rightNode","middleNode","htmlBuilder$7","imgShift","isSingleChar","lineWeight","angleHeight","ruleThickness","mathmlBuilder$6","fboxsep","thk","borderColor","backgroundColor","_ref5","_environments","defineEnvironment","_macros","defineMacro","getHLines","hlineInfo","nxt","validateAmsEnvironmentContext","getAutoTag","parseArray","hskipBeforeAndAfter","addJot","arraystretch","colSeparationType","autoTag","singleRow","emptySingleRow","maxNumCols","leqno","stretch","rowGaps","hLinesBeforeRow","tags","beginRow","endRow","dCellStyle","envName","htmlBuilder$6","nr","nc","hlines","pt","arraycolsep","localMultiplier","baselineskip","jot","arrayskip","arstrutHeight","arstrutDepth","setHLinePos","hlinesInGap","inrow","outrow","rowGap","colDescriptions","colSep","colDescrNum","tagSpans","rw","tagSpan","colDescr","firstSeparator","lineType","sepwidth","_shift2","dashes","vListElems","hline","eqnNumCol","alignMap","mathmlBuilder$5","tbl","glue","menclose","columnLines","prevTypeWasAlign","iStart","iEnd","_cols","rowLines","alignedHandler","separationType","isSplit","numMaths","numCols","emptyGroup","arg0","isAligned","styling","ordgroup","curMaths","pregap","symNode","colalign","nde","ca","colAlign","environments","nameGroup","env","_args","endNameToken","htmlBuilder$5","mathmlBuilder$4","fontAliases","adjustStyle","originalStyle","htmlBuilder$4","nstyle","dstyle","numerm","hStrut","dStrut","denomm","ruleWidth","ruleSpacing","numShift","denomShift","frac","midShift","candidateClearance","delimSize","mathmlBuilder$3","isDisplay","withDelims","leftOp","rightOp","numer","denom","hasBarLine","replaceWith","stylArray","delimFromValue","delimString","barNode","barSize","styl","textOrd","_ref6","htmlBuilder$3","braceBody","vSpan","mathmlBuilder$2","trustContext","firstEquals","sizeData","totalheight","attributeStr","keyVal","mathFunction","muUnit","dimension","fix","outerMode","chooseMathStyle","assembleSupSub","supGroup","subGroup","slant","baseShift","subIsSingleCharacter","finalGroup","_bottom","spacer","noSuccessor","htmlBuilder$2","hasLimits","large","stash","oval","mathmlBuilder$1","operator","singleCharBigOps","fName","singleCharIntegrals","htmlBuilder$1","childText","isAllString","word","defaultRuleThickness","phantom","amount","sizingGroup","sizeFuncs","smashHeight","smashDepth","tbArg","letter","smashedNode","theta","phi","lineClearance","minDelimiterHeight","delimDepth","rootm","toShift","rootVList","rootVListWrap","styleMap","newStyle","styleAttributes","htmlBuilderDelegate","delegate","_delegate","isSup","builderDelegate","valueBase","valueSup","valueSub","supm","subm","supShift","subShift","_newOptions","minSupShift","marginRight","marginLeft","isOiint","psi","vlistElem","_vlistElem","isBrace","isOver","_base2","_base","variant","defaultVariant","cssSpace","regularSpace","ord","pad","padNode","textFontFamilies","textFontWeights","textFontShapes","optionsWithFont","makeVerb","functions","spaceRegexString","controlWordRegexString","controlSymbolRegexString","controlWordWhitespaceRegexString","controlSpaceRegexString","combiningDiacriticalMarkString","combiningDiacriticalMarksEndRegex","tokenRegexString","Lexer","char","nlIndex","Namespace","builtins","globalMacros","undefs","undef","macros","nextToken","digitToNumber","digit","newcommand","existsOK","nonexistsOK","skipIfExists","exists","argText","dotsByToken","thedots","spaceAfterDots","latexRaiseA","braketHelper","middleDouble","oldMiddle","oldMiddleDouble","midMacro","double","doubled","expanded","implicitCommands","MacroExpander","newMode","isOptional","delims","isDelimited","expandableOnly","topToken","expansion","oldStackLength","catcode","stripped","bodyLexer","unicodeSubRegEx","uSubsAndSups","unicodeAccents","unicodeSymbols","Parser","oldToken","breakOnInfix","lex","overIndex","numerNode","denomNode","numerBody","denomBody","symbolToken","textordArray","colorNode","superscript","subscript","limits","prime","primes","isSub","subsupTokens","funcData","totalArgs","argType","optional","_group2","modeName","argToken","firstToken","lastToken","isBlank","groupEnd","nucleus","star","family","toParse","baseNode","renderToDomTree","renderToString","generateParseTree","renderError","renderToHTMLTree","__domTree","katex","boldIcon","italicIcon","linkIcon","strikethroughIcon","mathInlineId","mathInlineSchema","toggleLatexCommand","hasLatex","latexPos","latexNode","_tr2","functionGroup","Toolbar","checkActive","checker","curr","_tooltipProvider","_selection","toolbarTooltip","ToolbarView","isNotTextBlock","activeElement","toolbar","MilkdownEditorInternal","useRef","builderRef","editorReady","debounceTimer","isUpdatingFromOutside","lastEmittedValue","onChangeRef","useEffect","builder","handleUpdate","observer","editorContent","jsx"],"mappings":"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SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,GAAG,SAAS,SAAS,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS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,CAAC,SAAS,SAAS,GAAG,GAAG,KAAK;AAAA,IACrC,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,SAAS,SAAS,GAAG,GAAG,KAAK;AAAA,IACrC,KAAO,CAAC,SAAS,SAAS,GAAG,GAAG,KAAK;AAAA,IACrC,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,SAAS,SAAS,GAAG,GAAG,KAAK;AAAA,IACrC,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,SAAS,SAAS,GAAG,GAAG,KAAK;AAAA,IACrC,KAAO,CAAC,SAAS,SAAS,GAAG,GAAG,KAAK;AAAA,IACrC,KAAO,CAAC,SAAS,SAAS,GAAG,GAAG,KAAK;AAAA,IACrC,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,GAAG,GAAG,GAAG,KAAK;AAAA,IACzB,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,SAAS,GAAG,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAA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ACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,E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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196]} \ No newline at end of file diff --git a/packages/ui/dist-lib/components/EditImageModal.d.ts b/packages/ui/dist-lib/components/EditImageModal.d.ts new file mode 100644 index 00000000..06671833 --- /dev/null +++ b/packages/ui/dist-lib/components/EditImageModal.d.ts @@ -0,0 +1,12 @@ +interface EditImageModalProps { + open: boolean; + onOpenChange: (open: boolean) => void; + pictureId: string; + currentTitle: string; + currentDescription: string | null; + currentVisible: boolean; + imageUrl?: string; + onUpdateSuccess: () => void; +} +declare const EditImageModal: ({ open, onOpenChange, pictureId, currentTitle, currentDescription, currentVisible, imageUrl, onUpdateSuccess }: EditImageModalProps) => import("react/jsx-runtime").JSX.Element; +export default EditImageModal; diff --git a/packages/ui/dist-lib/components/EditVideoModal.d.ts b/packages/ui/dist-lib/components/EditVideoModal.d.ts new file mode 100644 index 00000000..5db7c2f4 --- /dev/null +++ b/packages/ui/dist-lib/components/EditVideoModal.d.ts @@ -0,0 +1,11 @@ +interface EditVideoModalProps { + open: boolean; + onOpenChange: (open: boolean) => void; + videoId: string; + currentTitle: string; + currentDescription: string | null; + currentVisible: boolean; + onUpdateSuccess: () => void; +} +declare const EditVideoModal: ({ open, onOpenChange, videoId, currentTitle, currentDescription, currentVisible, onUpdateSuccess }: EditVideoModalProps) => import("react/jsx-runtime").JSX.Element; +export default EditVideoModal; diff --git a/packages/ui/dist-lib/components/HashtagText.d.ts b/packages/ui/dist-lib/components/HashtagText.d.ts new file mode 100644 index 00000000..37971530 --- /dev/null +++ b/packages/ui/dist-lib/components/HashtagText.d.ts @@ -0,0 +1,8 @@ +import { default as React } from 'react'; +interface HashtagTextProps { + children: string; + className?: string; + onTagClick?: (tag: string) => void; +} +declare const HashtagText: React.FC<HashtagTextProps>; +export default HashtagText; diff --git a/packages/ui/dist-lib/components/ImageLightbox.d.ts b/packages/ui/dist-lib/components/ImageLightbox.d.ts new file mode 100644 index 00000000..83237348 --- /dev/null +++ b/packages/ui/dist-lib/components/ImageLightbox.d.ts @@ -0,0 +1,44 @@ +import { QuickAction } from '../constants'; +interface ImageLightboxProps { + isOpen: boolean; + onClose: () => void; + imageUrl: string; + imageTitle: string; + originalImageId?: string; + onPromptSubmit?: (prompt: string) => void; + onPublish?: (option: 'overwrite' | 'new' | 'version', imageUrl: string, title: string, description?: string, parentId?: string, collectionIds?: string[]) => void; + isGenerating?: boolean; + isPublishing?: boolean; + showPrompt?: boolean; + showPublish?: boolean; + generatedImageUrl?: string; + currentIndex?: number; + totalCount?: number; + onNavigate?: (direction: 'prev' | 'next') => void; + onPreload?: (direction: 'prev' | 'next') => void; + showWizardFeatures?: boolean; + promptTemplates?: Array<{ + name: string; + template: string; + }>; + onApplyTemplate?: (template: string) => void; + onSaveTemplate?: () => void; + onDeleteTemplate?: (index: number) => void; + onOptimizePrompt?: () => void; + isOptimizing?: boolean; + onMicrophoneToggle?: () => void; + isRecording?: boolean; + isTranscribing?: boolean; + showQuickPublish?: boolean; + onQuickPublish?: () => void; + prompt?: string; + onPromptChange?: (value: string) => void; + quickActions?: QuickAction[]; + promptHistory?: string[]; + historyIndex?: number; + onNavigateHistory?: (direction: 'up' | 'down') => void; + onManualPromptEdit?: () => void; + onOpenInWizard?: () => void; +} +export default function ImageLightbox({ isOpen, onClose, imageUrl, imageTitle, originalImageId, onPromptSubmit, onPublish, isGenerating, isPublishing, showPrompt, showPublish, generatedImageUrl, currentIndex, totalCount, onNavigate, onPreload, showWizardFeatures, promptTemplates, onApplyTemplate, onSaveTemplate, onDeleteTemplate, onOptimizePrompt, isOptimizing, onMicrophoneToggle, isRecording, isTranscribing, showQuickPublish, onQuickPublish, prompt: externalPrompt, onPromptChange, promptHistory, historyIndex, onNavigateHistory, onManualPromptEdit, onOpenInWizard, quickActions }: ImageLightboxProps): import("react/jsx-runtime").JSX.Element; +export {}; diff --git a/packages/ui/dist-lib/components/MagicWizardButton.d.ts b/packages/ui/dist-lib/components/MagicWizardButton.d.ts new file mode 100644 index 00000000..1495ea23 --- /dev/null +++ b/packages/ui/dist-lib/components/MagicWizardButton.d.ts @@ -0,0 +1,14 @@ +import { default as React } from 'react'; +interface MagicWizardButtonProps { + imageUrl: string; + imageTitle: string; + className?: string; + size?: "sm" | "default" | "lg" | "icon"; + variant?: "default" | "ghost" | "outline"; + onClick?: (e: React.MouseEvent) => void; + editingPostId?: string | null; + pictureId?: string; + children?: React.ReactNode; +} +declare const MagicWizardButton: React.FC<MagicWizardButtonProps>; +export default MagicWizardButton; diff --git a/packages/ui/dist-lib/components/MarkdownEditor.d.ts b/packages/ui/dist-lib/components/MarkdownEditor.d.ts new file mode 100644 index 00000000..6ab9b36b --- /dev/null +++ b/packages/ui/dist-lib/components/MarkdownEditor.d.ts @@ -0,0 +1,10 @@ +import { default as React } from 'react'; +interface MarkdownEditorProps { + value: string; + onChange: (value: string) => void; + placeholder?: string; + className?: string; + onKeyDown?: (e: React.KeyboardEvent) => void; +} +declare const _default: React.NamedExoticComponent<MarkdownEditorProps>; +export default _default; diff --git a/packages/ui/dist-lib/components/MarkdownRenderer.d.ts b/packages/ui/dist-lib/components/MarkdownRenderer.d.ts new file mode 100644 index 00000000..543f3fe8 --- /dev/null +++ b/packages/ui/dist-lib/components/MarkdownRenderer.d.ts @@ -0,0 +1,7 @@ +import { default as React } from 'react'; +interface MarkdownRendererProps { + content: string; + className?: string; +} +declare const MarkdownRenderer: React.MemoExoticComponent<({ content, className }: MarkdownRendererProps) => import("react/jsx-runtime").JSX.Element>; +export default MarkdownRenderer; diff --git a/packages/ui/dist-lib/components/MediaCard.d.ts b/packages/ui/dist-lib/components/MediaCard.d.ts new file mode 100644 index 00000000..03a68413 --- /dev/null +++ b/packages/ui/dist-lib/components/MediaCard.d.ts @@ -0,0 +1,30 @@ +import { default as React } from 'react'; +import { MediaType } from '../lib/mediaRegistry'; +interface MediaCardProps { + id: string; + pictureId?: string; + url: string; + thumbnailUrl?: string | null; + title: string; + author: string; + authorId: string; + likes: number; + comments: number; + isLiked?: boolean; + description?: string | null; + type: MediaType; + meta?: any; + responsive?: any; + onClick?: (id: string) => void; + onLike?: () => void; + onDelete?: () => void; + onEdit?: (id: string) => void; + created_at?: string; + authorAvatarUrl?: string | null; + showContent?: boolean; + job?: any; + variant?: 'grid' | 'feed'; + apiUrl?: string; +} +declare const MediaCard: React.FC<MediaCardProps>; +export default MediaCard; diff --git a/packages/ui/dist-lib/components/PageCard.d.ts b/packages/ui/dist-lib/components/PageCard.d.ts new file mode 100644 index 00000000..4d3c0a40 --- /dev/null +++ b/packages/ui/dist-lib/components/PageCard.d.ts @@ -0,0 +1,12 @@ +import { default as React } from 'react'; +import { MediaRendererProps } from '../lib/mediaRegistry'; +interface PageCardProps extends Omit<MediaRendererProps, 'created_at'> { + variant?: 'grid' | 'feed'; + responsive?: any; + showContent?: boolean; + authorAvatarUrl?: string | null; + created_at?: string; + apiUrl?: string; +} +declare const PageCard: React.FC<PageCardProps>; +export default PageCard; diff --git a/packages/ui/dist-lib/components/PhotoCard.d.ts b/packages/ui/dist-lib/components/PhotoCard.d.ts new file mode 100644 index 00000000..f5d18c98 --- /dev/null +++ b/packages/ui/dist-lib/components/PhotoCard.d.ts @@ -0,0 +1,24 @@ +interface PhotoCardProps { + pictureId: string; + image: string; + title: string; + author: string; + authorId: string; + likes: number; + comments: number; + isLiked?: boolean; + description?: string | null; + onClick?: (pictureId: string) => void; + onLike?: () => void; + onDelete?: () => void; + isVid?: boolean; + onEdit?: (pictureId: string) => void; + createdAt?: string; + authorAvatarUrl?: string | null; + showContent?: boolean; + responsive?: any; + variant?: 'grid' | 'feed'; + apiUrl?: string; +} +declare const PhotoCard: ({ pictureId, image, title, author, authorId, likes, comments, isLiked, description, onClick, onLike, onDelete, isVid, onEdit, createdAt, authorAvatarUrl, showContent, responsive, variant, apiUrl }: PhotoCardProps) => import("react/jsx-runtime").JSX.Element; +export default PhotoCard; diff --git a/packages/ui/dist-lib/components/PhotoGrid.d.ts b/packages/ui/dist-lib/components/PhotoGrid.d.ts new file mode 100644 index 00000000..b0431b0b --- /dev/null +++ b/packages/ui/dist-lib/components/PhotoGrid.d.ts @@ -0,0 +1,38 @@ +import { UserProfile } from '../pages/Post/types'; +import { MediaType } from '../types'; +import { FeedSortOption } from '../hooks/useFeedData'; +export interface MediaItemType { + id: string; + picture_id?: string; + title: string; + description: string | null; + image_url: string; + thumbnail_url: string | null; + type: MediaType; + meta: any | null; + likes_count: number; + created_at: string; + user_id: string; + comments: { + count: number; + }[]; + author_profile?: UserProfile; + job?: any; + responsive?: any; +} +interface MediaGridProps { + customPictures?: MediaItemType[]; + customLoading?: boolean; + navigationSource?: 'home' | 'collection' | 'tag' | 'user' | 'widget'; + navigationSourceId?: string; + isOwner?: boolean; + onFilesDrop?: (files: File[]) => void; + showVideos?: boolean; + sortBy?: FeedSortOption; + supabaseClient?: any; + apiUrl?: string; +} +declare const MediaGrid: ({ customPictures, customLoading, navigationSource, navigationSourceId, isOwner, onFilesDrop, showVideos, sortBy, supabaseClient, apiUrl }: MediaGridProps) => import("react/jsx-runtime").JSX.Element; +export default MediaGrid; +export { MediaGrid }; +export declare const PhotoGrid: ({ customPictures, customLoading, navigationSource, navigationSourceId, isOwner, onFilesDrop, showVideos, sortBy, supabaseClient, apiUrl }: MediaGridProps) => import("react/jsx-runtime").JSX.Element; diff --git a/packages/ui/dist-lib/components/PublishDialog.d.ts b/packages/ui/dist-lib/components/PublishDialog.d.ts new file mode 100644 index 00000000..76bca12d --- /dev/null +++ b/packages/ui/dist-lib/components/PublishDialog.d.ts @@ -0,0 +1,11 @@ +interface PublishDialogProps { + isOpen: boolean; + onClose: () => void; + onPublish: (option: 'overwrite' | 'new' | 'version' | 'add-to-post', title?: string, description?: string, parentId?: string, collectionIds?: string[]) => void; + originalTitle: string; + originalImageId?: string; + isPublishing?: boolean; + editingPostId?: string; +} +export default function PublishDialog({ isOpen, onClose, onPublish, originalTitle, originalImageId, isPublishing, editingPostId }: PublishDialogProps): import("react/jsx-runtime").JSX.Element; +export {}; diff --git a/packages/ui/dist-lib/components/ResponsiveImage.d.ts b/packages/ui/dist-lib/components/ResponsiveImage.d.ts new file mode 100644 index 00000000..21855cec --- /dev/null +++ b/packages/ui/dist-lib/components/ResponsiveImage.d.ts @@ -0,0 +1,28 @@ +import { default as React } from 'react'; +interface ResponsiveImageProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'src'> { + src: string | File; + sizes?: string; + className?: string; + imgClassName?: string; + responsiveSizes?: number[]; + formats?: string[]; + alt: string; + onDataLoaded?: (data: ResponsiveData) => void; + rootMargin?: string; + data?: ResponsiveData; + apiUrl?: string; +} +export interface ResponsiveData { + img: { + src: string; + width: number; + height: number; + format: string; + }; + sources?: { + srcset: string; + type: string; + }[]; +} +declare const ResponsiveImage: React.FC<ResponsiveImageProps>; +export default ResponsiveImage; diff --git a/packages/ui/dist-lib/components/StylePresetSelector.d.ts b/packages/ui/dist-lib/components/StylePresetSelector.d.ts new file mode 100644 index 00000000..3d1cd37b --- /dev/null +++ b/packages/ui/dist-lib/components/StylePresetSelector.d.ts @@ -0,0 +1,12 @@ +import { default as React } from 'react'; +import { QuickAction } from '../constants'; +interface StylePresetSelectorProps { + presets: QuickAction[]; + onSelect: (preset: QuickAction) => void; + disabled?: boolean; + activeId?: string; + className?: string; + variant?: 'default' | 'minimal' | 'compact'; +} +export declare const StylePresetSelector: React.FC<StylePresetSelectorProps>; +export {}; diff --git a/packages/ui/dist-lib/components/UserAvatarBlock.d.ts b/packages/ui/dist-lib/components/UserAvatarBlock.d.ts new file mode 100644 index 00000000..751a3ce9 --- /dev/null +++ b/packages/ui/dist-lib/components/UserAvatarBlock.d.ts @@ -0,0 +1,14 @@ +import { default as React } from 'react'; +interface UserAvatarBlockProps { + userId: string; + avatarUrl?: string | null; + displayName?: string | null; + createdAt?: string; + className?: string; + showDate?: boolean; + onClick?: (e: React.MouseEvent) => void; + hoverStyle?: boolean; + textSize?: "xs" | "sm" | "base"; +} +declare const UserAvatarBlock: React.FC<UserAvatarBlockProps>; +export default UserAvatarBlock; diff --git a/packages/ui/dist-lib/components/VersionSelector.d.ts b/packages/ui/dist-lib/components/VersionSelector.d.ts new file mode 100644 index 00000000..3f7c65c9 --- /dev/null +++ b/packages/ui/dist-lib/components/VersionSelector.d.ts @@ -0,0 +1,7 @@ +import { default as React } from 'react'; +interface VersionSelectorProps { + currentPictureId: string; + onVersionSelect: (selectedVersionId: string) => void; +} +declare const VersionSelector: React.FC<VersionSelectorProps>; +export default VersionSelector; diff --git a/packages/ui/dist-lib/components/VideoCard.d.ts b/packages/ui/dist-lib/components/VideoCard.d.ts new file mode 100644 index 00000000..9770dbe4 --- /dev/null +++ b/packages/ui/dist-lib/components/VideoCard.d.ts @@ -0,0 +1,26 @@ +import { MuxResolution } from '../types'; +interface VideoCardProps { + videoId: string; + videoUrl: string; + thumbnailUrl?: string; + title: string; + author: string; + authorId: string; + likes: number; + comments: number; + isLiked?: boolean; + description?: string | null; + onClick?: (videoId: string) => void; + onLike?: () => void; + onDelete?: () => void; + maxResolution?: MuxResolution; + authorAvatarUrl?: string | null; + showContent?: boolean; + created_at?: string; + job?: any; + variant?: 'grid' | 'feed'; + showPlayButton?: boolean; + apiUrl?: string; +} +declare const VideoCard: ({ videoId, videoUrl, thumbnailUrl, title, author, authorId, likes, comments, isLiked, description, onClick, onLike, onDelete, maxResolution, authorAvatarUrl, showContent, showPlayButton, created_at, job, variant, apiUrl }: VideoCardProps) => import("react/jsx-runtime").JSX.Element; +export default VideoCard; diff --git a/packages/ui/dist-lib/components/lazy-editors/MilkdownEditorInternal.d.ts b/packages/ui/dist-lib/components/lazy-editors/MilkdownEditorInternal.d.ts new file mode 100644 index 00000000..3b3d7b74 --- /dev/null +++ b/packages/ui/dist-lib/components/lazy-editors/MilkdownEditorInternal.d.ts @@ -0,0 +1,8 @@ +import { default as React } from 'react'; +interface MilkdownEditorInternalProps { + value: string; + onChange: (value: string) => void; + className?: string; +} +declare const MilkdownEditorInternal: React.FC<MilkdownEditorInternalProps>; +export default MilkdownEditorInternal; diff --git a/packages/ui/dist-lib/components/ui/alert-dialog.d.ts b/packages/ui/dist-lib/components/ui/alert-dialog.d.ts new file mode 100644 index 00000000..5f4c6d39 --- /dev/null +++ b/packages/ui/dist-lib/components/ui/alert-dialog.d.ts @@ -0,0 +1,20 @@ +import * as React from "react"; +import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog"; +declare const AlertDialog: React.FC<AlertDialogPrimitive.AlertDialogProps>; +declare const AlertDialogTrigger: React.ForwardRefExoticComponent<AlertDialogPrimitive.AlertDialogTriggerProps & React.RefAttributes<HTMLButtonElement>>; +declare const AlertDialogPortal: React.FC<AlertDialogPrimitive.AlertDialogPortalProps>; +declare const AlertDialogOverlay: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>; +declare const AlertDialogContent: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>; +declare const AlertDialogHeader: { + ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element; + displayName: string; +}; +declare const AlertDialogFooter: { + ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element; + displayName: string; +}; +declare const AlertDialogTitle: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>; +declare const AlertDialogDescription: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>; +declare const AlertDialogAction: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogActionProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>; +declare const AlertDialogCancel: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogCancelProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>; +export { AlertDialog, AlertDialogPortal, AlertDialogOverlay, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogAction, AlertDialogCancel, }; diff --git a/packages/ui/dist-lib/components/ui/avatar.d.ts b/packages/ui/dist-lib/components/ui/avatar.d.ts new file mode 100644 index 00000000..ad129ec2 --- /dev/null +++ b/packages/ui/dist-lib/components/ui/avatar.d.ts @@ -0,0 +1,6 @@ +import * as React from "react"; +import * as AvatarPrimitive from "@radix-ui/react-avatar"; +declare const Avatar: React.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarProps & React.RefAttributes<HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>; +declare const AvatarImage: React.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarImageProps & React.RefAttributes<HTMLImageElement>, "ref"> & React.RefAttributes<HTMLImageElement>>; +declare const AvatarFallback: React.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarFallbackProps & React.RefAttributes<HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>; +export { Avatar, AvatarImage, AvatarFallback }; diff --git a/packages/ui/dist-lib/components/ui/badge.d.ts b/packages/ui/dist-lib/components/ui/badge.d.ts new file mode 100644 index 00000000..d97fbfaa --- /dev/null +++ b/packages/ui/dist-lib/components/ui/badge.d.ts @@ -0,0 +1,9 @@ +import { VariantProps } from 'class-variance-authority'; +import * as React from "react"; +declare const badgeVariants: (props?: { + variant?: "default" | "destructive" | "outline" | "secondary"; +} & import('class-variance-authority/types').ClassProp) => string; +export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> { +} +declare function Badge({ className, variant, ...props }: BadgeProps): import("react/jsx-runtime").JSX.Element; +export { Badge, badgeVariants }; diff --git a/packages/ui/dist-lib/components/ui/button.d.ts b/packages/ui/dist-lib/components/ui/button.d.ts new file mode 100644 index 00000000..d3a6f799 --- /dev/null +++ b/packages/ui/dist-lib/components/ui/button.d.ts @@ -0,0 +1,11 @@ +import { VariantProps } from 'class-variance-authority'; +import * as React from "react"; +declare const buttonVariants: (props?: { + variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost"; + size?: "icon" | "default" | "sm" | "lg"; +} & import('class-variance-authority/types').ClassProp) => string; +export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> { + asChild?: boolean; +} +declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>; +export { Button, buttonVariants }; diff --git a/packages/ui/dist-lib/components/ui/card.d.ts b/packages/ui/dist-lib/components/ui/card.d.ts new file mode 100644 index 00000000..b5ea9323 --- /dev/null +++ b/packages/ui/dist-lib/components/ui/card.d.ts @@ -0,0 +1,8 @@ +import * as React from "react"; +declare const Card: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>; +declare const CardHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>; +declare const CardTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & React.RefAttributes<HTMLParagraphElement>>; +declare const CardDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>; +declare const CardContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>; +declare const CardFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>; +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }; diff --git a/packages/ui/dist-lib/components/ui/checkbox.d.ts b/packages/ui/dist-lib/components/ui/checkbox.d.ts new file mode 100644 index 00000000..c10cf381 --- /dev/null +++ b/packages/ui/dist-lib/components/ui/checkbox.d.ts @@ -0,0 +1,4 @@ +import * as React from "react"; +import * as CheckboxPrimitive from "@radix-ui/react-checkbox"; +declare const Checkbox: React.ForwardRefExoticComponent<Omit<CheckboxPrimitive.CheckboxProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>; +export { Checkbox }; diff --git a/packages/ui/dist-lib/components/ui/dialog.d.ts b/packages/ui/dist-lib/components/ui/dialog.d.ts new file mode 100644 index 00000000..1f2ba18a --- /dev/null +++ b/packages/ui/dist-lib/components/ui/dialog.d.ts @@ -0,0 +1,19 @@ +import * as React from "react"; +import * as DialogPrimitive from "@radix-ui/react-dialog"; +declare const Dialog: React.FC<DialogPrimitive.DialogProps>; +declare const DialogTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>; +declare const DialogPortal: React.FC<DialogPrimitive.DialogPortalProps>; +declare const DialogClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>; +declare const DialogOverlay: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>; +declare const DialogContent: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>; +declare const DialogHeader: { + ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element; + displayName: string; +}; +declare const DialogFooter: { + ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element; + displayName: string; +}; +declare const DialogTitle: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>; +declare const DialogDescription: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>; +export { Dialog, DialogPortal, DialogOverlay, DialogClose, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, }; diff --git a/packages/ui/dist-lib/components/ui/dropdown-menu.d.ts b/packages/ui/dist-lib/components/ui/dropdown-menu.d.ts new file mode 100644 index 00000000..682db8fc --- /dev/null +++ b/packages/ui/dist-lib/components/ui/dropdown-menu.d.ts @@ -0,0 +1,27 @@ +import * as React from "react"; +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; +declare const DropdownMenu: React.FC<DropdownMenuPrimitive.DropdownMenuProps>; +declare const DropdownMenuTrigger: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & React.RefAttributes<HTMLButtonElement>>; +declare const DropdownMenuGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuGroupProps & React.RefAttributes<HTMLDivElement>>; +declare const DropdownMenuPortal: React.FC<DropdownMenuPrimitive.DropdownMenuPortalProps>; +declare const DropdownMenuSub: React.FC<DropdownMenuPrimitive.DropdownMenuSubProps>; +declare const DropdownMenuRadioGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuRadioGroupProps & React.RefAttributes<HTMLDivElement>>; +declare const DropdownMenuSubTrigger: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubTriggerProps & React.RefAttributes<HTMLDivElement>, "ref"> & { + inset?: boolean; +} & React.RefAttributes<HTMLDivElement>>; +declare const DropdownMenuSubContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>; +declare const DropdownMenuContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>; +declare const DropdownMenuItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & { + inset?: boolean; +} & React.RefAttributes<HTMLDivElement>>; +declare const DropdownMenuCheckboxItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuCheckboxItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>; +declare const DropdownMenuRadioItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuRadioItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>; +declare const DropdownMenuLabel: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & { + inset?: boolean; +} & React.RefAttributes<HTMLDivElement>>; +declare const DropdownMenuSeparator: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>; +declare const DropdownMenuShortcut: { + ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): import("react/jsx-runtime").JSX.Element; + displayName: string; +}; +export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuGroup, DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuRadioGroup, }; diff --git a/packages/ui/dist-lib/components/ui/form.d.ts b/packages/ui/dist-lib/components/ui/form.d.ts new file mode 100644 index 00000000..9094493f --- /dev/null +++ b/packages/ui/dist-lib/components/ui/form.d.ts @@ -0,0 +1,23 @@ +import { ControllerProps, FieldPath, FieldValues } from 'react-hook-form'; +import * as React from "react"; +import * as LabelPrimitive from "@radix-ui/react-label"; +declare const Form: <TFieldValues extends FieldValues, TContext = any, TTransformedValues = TFieldValues>(props: import('react-hook-form').FormProviderProps<TFieldValues, TContext, TTransformedValues>) => React.JSX.Element; +declare const FormField: <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({ ...props }: ControllerProps<TFieldValues, TName>) => import("react/jsx-runtime").JSX.Element; +declare const useFormField: () => { + invalid: boolean; + isDirty: boolean; + isTouched: boolean; + isValidating: boolean; + error?: import('react-hook-form').FieldError; + id: string; + name: string; + formItemId: string; + formDescriptionId: string; + formMessageId: string; +}; +declare const FormItem: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>; +declare const FormLabel: React.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React.RefAttributes<HTMLLabelElement>, "ref"> & React.RefAttributes<HTMLLabelElement>>; +declare const FormControl: React.ForwardRefExoticComponent<Omit<import('@radix-ui/react-slot').SlotProps & React.RefAttributes<HTMLElement>, "ref"> & React.RefAttributes<HTMLElement>>; +declare const FormDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>; +declare const FormMessage: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>; +export { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField }; diff --git a/packages/ui/dist-lib/components/ui/input.d.ts b/packages/ui/dist-lib/components/ui/input.d.ts new file mode 100644 index 00000000..9b9a7004 --- /dev/null +++ b/packages/ui/dist-lib/components/ui/input.d.ts @@ -0,0 +1,3 @@ +import * as React from "react"; +declare const Input: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>; +export { Input }; diff --git a/packages/ui/dist-lib/components/ui/label.d.ts b/packages/ui/dist-lib/components/ui/label.d.ts new file mode 100644 index 00000000..dd88155c --- /dev/null +++ b/packages/ui/dist-lib/components/ui/label.d.ts @@ -0,0 +1,5 @@ +import { VariantProps } from 'class-variance-authority'; +import * as React from "react"; +import * as LabelPrimitive from "@radix-ui/react-label"; +declare const Label: React.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React.RefAttributes<HTMLLabelElement>, "ref"> & VariantProps<(props?: import('class-variance-authority/types').ClassProp) => string> & React.RefAttributes<HTMLLabelElement>>; +export { Label }; diff --git a/packages/ui/dist-lib/components/ui/radio-group.d.ts b/packages/ui/dist-lib/components/ui/radio-group.d.ts new file mode 100644 index 00000000..62311df8 --- /dev/null +++ b/packages/ui/dist-lib/components/ui/radio-group.d.ts @@ -0,0 +1,5 @@ +import * as React from "react"; +import * as RadioGroupPrimitive from "@radix-ui/react-radio-group"; +declare const RadioGroup: React.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>; +declare const RadioGroupItem: React.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupItemProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>; +export { RadioGroup, RadioGroupItem }; diff --git a/packages/ui/dist-lib/components/ui/switch.d.ts b/packages/ui/dist-lib/components/ui/switch.d.ts new file mode 100644 index 00000000..dc99b18f --- /dev/null +++ b/packages/ui/dist-lib/components/ui/switch.d.ts @@ -0,0 +1,4 @@ +import * as React from "react"; +import * as SwitchPrimitives from "@radix-ui/react-switch"; +declare const Switch: React.ForwardRefExoticComponent<Omit<SwitchPrimitives.SwitchProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>; +export { Switch }; diff --git a/packages/ui/dist-lib/components/ui/tabs.d.ts b/packages/ui/dist-lib/components/ui/tabs.d.ts new file mode 100644 index 00000000..dc23e31f --- /dev/null +++ b/packages/ui/dist-lib/components/ui/tabs.d.ts @@ -0,0 +1,7 @@ +import * as React from "react"; +import * as TabsPrimitive from "@radix-ui/react-tabs"; +declare const Tabs: React.ForwardRefExoticComponent<TabsPrimitive.TabsProps & React.RefAttributes<HTMLDivElement>>; +declare const TabsList: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsListProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>; +declare const TabsTrigger: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>; +declare const TabsContent: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>; +export { Tabs, TabsList, TabsTrigger, TabsContent }; diff --git a/packages/ui/dist-lib/components/ui/textarea.d.ts b/packages/ui/dist-lib/components/ui/textarea.d.ts new file mode 100644 index 00000000..54685aa1 --- /dev/null +++ b/packages/ui/dist-lib/components/ui/textarea.d.ts @@ -0,0 +1,5 @@ +import * as React from "react"; +export interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> { +} +declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>; +export { Textarea }; diff --git a/packages/ui/dist-lib/components/widgets/ImagePickerDialog.d.ts b/packages/ui/dist-lib/components/widgets/ImagePickerDialog.d.ts new file mode 100644 index 00000000..9719a36a --- /dev/null +++ b/packages/ui/dist-lib/components/widgets/ImagePickerDialog.d.ts @@ -0,0 +1,23 @@ +import { default as React } from 'react'; +interface ImagePickerDialogProps { + isOpen: boolean; + onClose: () => void; + onSelect?: (pictureId: string) => void; + onMultiSelect?: (pictureIds: string[]) => void; + onMultiSelectPictures?: (pictures: Picture[]) => void; + currentValue?: string | null; + currentValues?: string[]; + multiple?: boolean; +} +interface Picture { + id: string; + title: string; + image_url: string; + thumbnail_url?: string; + type?: string; + user_id: string; + tags: string[] | null; + meta: any; +} +export declare const ImagePickerDialog: React.FC<ImagePickerDialogProps>; +export {}; diff --git a/packages/ui/dist-lib/constants.d.ts b/packages/ui/dist-lib/constants.d.ts new file mode 100644 index 00000000..480b4f28 --- /dev/null +++ b/packages/ui/dist-lib/constants.d.ts @@ -0,0 +1,61 @@ +export declare const ENABLE_ZOOM = true; +export declare enum TauriCommand { + SUBMIT_PROMPT = "submit_prompt", + LOG_ERROR = "log_error_to_console", + RESOLVE_PATH = "resolve_path_relative_to_home", + ADD_DEBUG_MESSAGE = "add_debug_message", + SEND_IPC_MESSAGE = "send_ipc_message", + REQUEST_CONFIG = "request_config_from_images", + GENERATE_IMAGE = "generate_image_via_backend", + REQUEST_FILE_DELETION = "request_file_deletion" +} +export declare enum TauriEvent { + CONFIG_RECEIVED = "config-received", + IMAGE_RECEIVED = "image-received", + GENERATION_ERROR = "generation-error", + GENERATION_COMPLETE = "generation-complete", + FILE_DELETED_SUCCESSFULLY = "file-deleted-successfully", + FILE_DELETION_ERROR = "file-deletion-error" +} +export declare const QUICK_STYLES: readonly ["cartoon style", "photorealistic", "noir style", "product mockup", "watercolor painting", "digital art", "minimalist design", "vintage poster", "cyberpunk aesthetic"]; +export declare const QUICK_ACTIONS: readonly [{ + readonly name: "Remove Background"; + readonly prompt: "remove the background, make it transparent"; + readonly iconName: "Eraser"; +}, { + readonly name: "Cleanup"; + readonly prompt: "clean up and enhance the image, remove noise and artifacts"; + readonly iconName: "Sparkles"; +}, { + readonly name: "Crop Foreground"; + readonly prompt: "crop to focus on the main subject, remove unnecessary background"; + readonly iconName: "Crop"; +}, { + readonly name: "Improve Colors"; + readonly prompt: "enhance colors, improve saturation and contrast"; + readonly iconName: "Palette"; +}, { + readonly name: "Product Presentation"; + readonly prompt: "professional product photography style, clean background, studio lighting"; + readonly iconName: "Package"; +}]; +export declare const AI_IMAGE_ANALYSIS_PROMPT: "Analyze this image and provide: 1) A creative, engaging title (max 50 characters), and 2) A detailed description. Format your response with 'Title: [your title]' on the first line, followed by the description on the next lines."; +export declare const PHOTO_GRID_THUMBNAIL_WIDTH = 600; +export declare const PHOTO_GRID_IMAGE_FORMAT: "jpg"; +export declare const FEED_PAGE_SIZE = 30; +export declare const FEED_API_ENDPOINT = "/api/feed"; +export declare const MAX_SPLIT_PROMPTS = 10; +/** + * Split a prompt into multiple lines for sequential generation + * @param prompt The full prompt text + * @param maxLines Maximum number of lines to accept (default: 10) + * @returns Array of prompt lines, trimmed and filtered for empty lines + */ +export declare const splitPromptByLines: (prompt: string, maxLines?: number) => string[]; +export interface QuickAction { + id: string; + name: string; + prompt: string; + icon: string; +} +export declare const DEFAULT_QUICK_ACTIONS: QuickAction[]; diff --git a/packages/ui/dist-lib/contexts/FeedCacheContext.d.ts b/packages/ui/dist-lib/contexts/FeedCacheContext.d.ts new file mode 100644 index 00000000..1efb99ce --- /dev/null +++ b/packages/ui/dist-lib/contexts/FeedCacheContext.d.ts @@ -0,0 +1,19 @@ +import { default as React } from 'react'; +import { FeedPost } from '../lib/db'; +interface FeedCacheState { + posts: FeedPost[]; + page: number; + hasMore: boolean; + scrollY: number; + timestamp: number; +} +interface FeedCacheContextType { + saveCache: (key: string, state: Omit<FeedCacheState, 'timestamp'>) => void; + getCache: (key: string) => FeedCacheState | null; + clearCache: (key?: string) => void; +} +export declare const FeedCacheProvider: React.FC<{ + children: React.ReactNode; +}>; +export declare const useFeedCache: () => FeedCacheContextType; +export {}; diff --git a/packages/ui/dist-lib/contexts/OrganizationContext.d.ts b/packages/ui/dist-lib/contexts/OrganizationContext.d.ts new file mode 100644 index 00000000..7e2d6331 --- /dev/null +++ b/packages/ui/dist-lib/contexts/OrganizationContext.d.ts @@ -0,0 +1,10 @@ +import { ReactNode } from 'react'; +interface OrganizationContextType { + orgSlug: string | null; + isOrgContext: boolean; +} +export declare const useOrganization: () => OrganizationContextType; +export declare const OrganizationProvider: ({ children }: { + children: ReactNode; +}) => import("react/jsx-runtime").JSX.Element; +export {}; diff --git a/packages/ui/dist-lib/contexts/PostNavigationContext.d.ts b/packages/ui/dist-lib/contexts/PostNavigationContext.d.ts new file mode 100644 index 00000000..3b767389 --- /dev/null +++ b/packages/ui/dist-lib/contexts/PostNavigationContext.d.ts @@ -0,0 +1,14 @@ +import { ReactNode } from 'react'; +import { PostNavigationData } from '../types'; +interface PostNavigationContextType { + navigationData: PostNavigationData | null; + setNavigationData: (data: PostNavigationData | null) => void; + preloadedImages: Map<string, boolean>; + preloadImage: (imageUrl: string) => void; +} +export declare const usePostNavigation: () => PostNavigationContextType; +interface PostNavigationProviderProps { + children: ReactNode; +} +export declare const PostNavigationProvider: ({ children }: PostNavigationProviderProps) => import("react/jsx-runtime").JSX.Element; +export {}; diff --git a/packages/ui/dist-lib/contexts/ProfilesContext.d.ts b/packages/ui/dist-lib/contexts/ProfilesContext.d.ts new file mode 100644 index 00000000..d43bc176 --- /dev/null +++ b/packages/ui/dist-lib/contexts/ProfilesContext.d.ts @@ -0,0 +1,13 @@ +import { default as React } from 'react'; +import { UserProfile } from '../pages/Post/types'; +interface ProfilesContextType { + profiles: Record<string, UserProfile>; + fetchProfile: (userId: string) => Promise<UserProfile | null>; + fetchProfiles: (userIds: string[]) => Promise<void>; + isLoading: boolean; +} +export declare const ProfilesProvider: React.FC<{ + children: React.ReactNode; +}>; +export declare const useProfiles: () => ProfilesContextType; +export {}; diff --git a/packages/ui/dist-lib/errors-DCJKAXTz.js b/packages/ui/dist-lib/errors-DCJKAXTz.js new file mode 100644 index 00000000..124e75f9 --- /dev/null +++ b/packages/ui/dist-lib/errors-DCJKAXTz.js @@ -0,0 +1,71 @@ +import { P as a, c as t } from "./prod-DTLJXtPo.js"; +const i = { + r() { + return new a({ + code: t.BadSignature, + reason: "missing WEBVTT file header", + line: 1 + }); + }, + s(n, e) { + return new a({ + code: t.BadTimestamp, + reason: `cue start timestamp \`${n}\` is invalid on line ${e}`, + line: e + }); + }, + t(n, e) { + return new a({ + code: t.BadTimestamp, + reason: `cue end timestamp \`${n}\` is invalid on line ${e}`, + line: e + }); + }, + u(n, e, r) { + return new a({ + code: t.BadTimestamp, + reason: `cue end timestamp \`${e}\` is greater than start \`${n}\` on line ${r}`, + line: r + }); + }, + y(n, e, r) { + return new a({ + code: t.BadSettingValue, + reason: `invalid value for cue setting \`${n}\` on line ${r} (value: ${e})`, + line: r + }); + }, + x(n, e, r) { + return new a({ + code: t.UnknownSetting, + reason: `unknown cue setting \`${n}\` on line ${r} (value: ${e})`, + line: r + }); + }, + w(n, e, r) { + return new a({ + code: t.BadSettingValue, + reason: `invalid value for region setting \`${n}\` on line ${r} (value: ${e})`, + line: r + }); + }, + v(n, e, r) { + return new a({ + code: t.UnknownSetting, + reason: `unknown region setting \`${n}\` on line ${r} (value: ${e})`, + line: r + }); + }, + // SSA-specific errors + T(n, e) { + return new a({ + code: t.BadFormat, + reason: `format missing for \`${n}\` block on line ${e}`, + line: e + }); + } +}; +export { + i as ParseErrorBuilder +}; +//# sourceMappingURL=errors-DCJKAXTz.js.map diff --git a/packages/ui/dist-lib/errors-DCJKAXTz.js.map b/packages/ui/dist-lib/errors-DCJKAXTz.js.map new file mode 100644 index 00000000..eea3341c --- /dev/null +++ b/packages/ui/dist-lib/errors-DCJKAXTz.js.map @@ -0,0 +1 @@ +{"version":3,"file":"errors-DCJKAXTz.js","sources":["../node_modules/media-captions/dist/prod/errors.js"],"sourcesContent":["import { P as ParseError, c as ParseErrorCode } from './index.js';\n\nconst ParseErrorBuilder = {\n r() {\n return new ParseError({\n code: ParseErrorCode.BadSignature,\n reason: \"missing WEBVTT file header\",\n line: 1\n });\n },\n s(startTime, line) {\n return new ParseError({\n code: ParseErrorCode.BadTimestamp,\n reason: `cue start timestamp \\`${startTime}\\` is invalid on line ${line}`,\n line\n });\n },\n t(endTime, line) {\n return new ParseError({\n code: ParseErrorCode.BadTimestamp,\n reason: `cue end timestamp \\`${endTime}\\` is invalid on line ${line}`,\n line\n });\n },\n u(startTime, endTime, line) {\n return new ParseError({\n code: ParseErrorCode.BadTimestamp,\n reason: `cue end timestamp \\`${endTime}\\` is greater than start \\`${startTime}\\` on line ${line}`,\n line\n });\n },\n y(name, value, line) {\n return new ParseError({\n code: ParseErrorCode.BadSettingValue,\n reason: `invalid value for cue setting \\`${name}\\` on line ${line} (value: ${value})`,\n line\n });\n },\n x(name, value, line) {\n return new ParseError({\n code: ParseErrorCode.UnknownSetting,\n reason: `unknown cue setting \\`${name}\\` on line ${line} (value: ${value})`,\n line\n });\n },\n w(name, value, line) {\n return new ParseError({\n code: ParseErrorCode.BadSettingValue,\n reason: `invalid value for region setting \\`${name}\\` on line ${line} (value: ${value})`,\n line\n });\n },\n v(name, value, line) {\n return new ParseError({\n code: ParseErrorCode.UnknownSetting,\n reason: `unknown region setting \\`${name}\\` on line ${line} (value: ${value})`,\n line\n });\n },\n // SSA-specific errors\n T(type, line) {\n return new ParseError({\n code: ParseErrorCode.BadFormat,\n reason: `format missing for \\`${type}\\` block on line ${line}`,\n line\n });\n }\n};\n\nexport { ParseErrorBuilder };\n"],"names":["ParseErrorBuilder","ParseError","ParseErrorCode","startTime","line","endTime","name","value","type"],"mappings":";AAEK,MAACA,IAAoB;AAAA,EACxB,IAAI;AACF,WAAO,IAAIC,EAAW;AAAA,MACpB,MAAMC,EAAe;AAAA,MACrB,QAAQ;AAAA,MACR,MAAM;AAAA,IACZ,CAAK;AAAA,EACH;AAAA,EACA,EAAEC,GAAWC,GAAM;AACjB,WAAO,IAAIH,EAAW;AAAA,MACpB,MAAMC,EAAe;AAAA,MACrB,QAAQ,yBAAyBC,CAAS,yBAAyBC,CAAI;AAAA,MACvE,MAAAA;AAAA,IACN,CAAK;AAAA,EACH;AAAA,EACA,EAAEC,GAASD,GAAM;AACf,WAAO,IAAIH,EAAW;AAAA,MACpB,MAAMC,EAAe;AAAA,MACrB,QAAQ,uBAAuBG,CAAO,yBAAyBD,CAAI;AAAA,MACnE,MAAAA;AAAA,IACN,CAAK;AAAA,EACH;AAAA,EACA,EAAED,GAAWE,GAASD,GAAM;AAC1B,WAAO,IAAIH,EAAW;AAAA,MACpB,MAAMC,EAAe;AAAA,MACrB,QAAQ,uBAAuBG,CAAO,8BAA8BF,CAAS,cAAcC,CAAI;AAAA,MAC/F,MAAAA;AAAA,IACN,CAAK;AAAA,EACH;AAAA,EACA,EAAEE,GAAMC,GAAOH,GAAM;AACnB,WAAO,IAAIH,EAAW;AAAA,MACpB,MAAMC,EAAe;AAAA,MACrB,QAAQ,mCAAmCI,CAAI,cAAcF,CAAI,YAAYG,CAAK;AAAA,MAClF,MAAAH;AAAA,IACN,CAAK;AAAA,EACH;AAAA,EACA,EAAEE,GAAMC,GAAOH,GAAM;AACnB,WAAO,IAAIH,EAAW;AAAA,MACpB,MAAMC,EAAe;AAAA,MACrB,QAAQ,yBAAyBI,CAAI,cAAcF,CAAI,YAAYG,CAAK;AAAA,MACxE,MAAAH;AAAA,IACN,CAAK;AAAA,EACH;AAAA,EACA,EAAEE,GAAMC,GAAOH,GAAM;AACnB,WAAO,IAAIH,EAAW;AAAA,MACpB,MAAMC,EAAe;AAAA,MACrB,QAAQ,sCAAsCI,CAAI,cAAcF,CAAI,YAAYG,CAAK;AAAA,MACrF,MAAAH;AAAA,IACN,CAAK;AAAA,EACH;AAAA,EACA,EAAEE,GAAMC,GAAOH,GAAM;AACnB,WAAO,IAAIH,EAAW;AAAA,MACpB,MAAMC,EAAe;AAAA,MACrB,QAAQ,4BAA4BI,CAAI,cAAcF,CAAI,YAAYG,CAAK;AAAA,MAC3E,MAAAH;AAAA,IACN,CAAK;AAAA,EACH;AAAA;AAAA,EAEA,EAAEI,GAAMJ,GAAM;AACZ,WAAO,IAAIH,EAAW;AAAA,MACpB,MAAMC,EAAe;AAAA,MACrB,QAAQ,wBAAwBM,CAAI,oBAAoBJ,CAAI;AAAA,MAC5D,MAAAA;AAAA,IACN,CAAK;AAAA,EACH;AACF;","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/packages/ui/dist-lib/hooks/use-toast.d.ts b/packages/ui/dist-lib/hooks/use-toast.d.ts new file mode 100644 index 00000000..b4518d20 --- /dev/null +++ b/packages/ui/dist-lib/hooks/use-toast.d.ts @@ -0,0 +1,44 @@ +import { ToastActionElement, ToastProps } from '../components/ui/toast'; +import * as React from "react"; +type ToasterToast = ToastProps & { + id: string; + title?: React.ReactNode; + description?: React.ReactNode; + action?: ToastActionElement; +}; +declare const actionTypes: { + readonly ADD_TOAST: "ADD_TOAST"; + readonly UPDATE_TOAST: "UPDATE_TOAST"; + readonly DISMISS_TOAST: "DISMISS_TOAST"; + readonly REMOVE_TOAST: "REMOVE_TOAST"; +}; +type ActionType = typeof actionTypes; +type Action = { + type: ActionType["ADD_TOAST"]; + toast: ToasterToast; +} | { + type: ActionType["UPDATE_TOAST"]; + toast: Partial<ToasterToast>; +} | { + type: ActionType["DISMISS_TOAST"]; + toastId?: ToasterToast["id"]; +} | { + type: ActionType["REMOVE_TOAST"]; + toastId?: ToasterToast["id"]; +}; +interface State { + toasts: ToasterToast[]; +} +export declare const reducer: (state: State, action: Action) => State; +type Toast = Omit<ToasterToast, "id">; +declare function toast({ ...props }: Toast): { + id: string; + dismiss: () => void; + update: (props: ToasterToast) => void; +}; +declare function useToast(): { + toast: typeof toast; + dismiss: (toastId?: string) => void; + toasts: ToasterToast[]; +}; +export { useToast, toast }; diff --git a/packages/ui/dist-lib/hooks/useAuth.d.ts b/packages/ui/dist-lib/hooks/useAuth.d.ts new file mode 100644 index 00000000..806113c9 --- /dev/null +++ b/packages/ui/dist-lib/hooks/useAuth.d.ts @@ -0,0 +1,26 @@ +import { User, Session } from '@supabase/supabase-js'; +interface AuthContextType { + user: User | null; + session: Session | null; + roles: string[]; + loading: boolean; + signUp: (email: string, password: string, username: string, displayName: string) => Promise<{ + data: any; + error: any; + }>; + signIn: (email: string, password: string) => Promise<{ + error: any; + }>; + signInWithGithub: () => Promise<{ + error: any; + }>; + signInWithGoogle: () => Promise<{ + error: any; + }>; + signOut: () => Promise<void>; +} +export declare const AuthProvider: ({ children }: { + children: React.ReactNode; +}) => import("react/jsx-runtime").JSX.Element; +export declare const useAuth: () => AuthContextType; +export {}; diff --git a/packages/ui/dist-lib/hooks/useFeedData.d.ts b/packages/ui/dist-lib/hooks/useFeedData.d.ts new file mode 100644 index 00000000..32a81110 --- /dev/null +++ b/packages/ui/dist-lib/hooks/useFeedData.d.ts @@ -0,0 +1,20 @@ +import { FeedPost } from '../lib/db'; +export type FeedSortOption = 'latest' | 'top'; +interface UseFeedDataProps { + source?: 'home' | 'collection' | 'tag' | 'user'; + sourceId?: string; + isOrgContext?: boolean; + orgSlug?: string; + enabled?: boolean; + sortBy?: FeedSortOption; + supabaseClient?: any; +} +export declare const useFeedData: ({ source, sourceId, isOrgContext, orgSlug, enabled, sortBy, supabaseClient }: UseFeedDataProps) => { + posts: FeedPost[]; + loading: boolean; + error: Error; + hasMore: boolean; + loadMore: () => void; + isFetchingMore: boolean; +}; +export {}; diff --git a/packages/ui/dist-lib/hooks/usePostNavigation.d.ts b/packages/ui/dist-lib/hooks/usePostNavigation.d.ts new file mode 100644 index 00000000..fe2cd24d --- /dev/null +++ b/packages/ui/dist-lib/hooks/usePostNavigation.d.ts @@ -0,0 +1,13 @@ +/** + * usePostNavigation Hook + * + * Compatibility wrapper around Zustand navigationStore + * Provides same API as old PostNavigationContext for easy migration + */ +export declare const usePostNavigation: () => { + navigationData: import('../stores/navigationStore').NavigationData; + setNavigationData: (data: import('../stores/navigationStore').NavigationData | null) => void; + preloadImage: (url: string) => void; + updateCurrentIndex: (index: number) => void; +}; +export default usePostNavigation; diff --git a/packages/ui/dist-lib/hooks/useResponsiveImage.d.ts b/packages/ui/dist-lib/hooks/useResponsiveImage.d.ts new file mode 100644 index 00000000..0a17457d --- /dev/null +++ b/packages/ui/dist-lib/hooks/useResponsiveImage.d.ts @@ -0,0 +1,14 @@ +import { ResponsiveData } from '../components/ResponsiveImage'; +interface UseResponsiveImageProps { + src: string | File | null; + responsiveSizes?: number[]; + formats?: string[]; + enabled?: boolean; + apiUrl?: string; +} +export declare const useResponsiveImage: ({ src, responsiveSizes, formats, enabled, apiUrl, }: UseResponsiveImageProps) => { + data: ResponsiveData; + loading: boolean; + error: string; +}; +export {}; diff --git a/packages/ui/dist-lib/hooks/useWizardContext.d.ts b/packages/ui/dist-lib/hooks/useWizardContext.d.ts new file mode 100644 index 00000000..83ba0907 --- /dev/null +++ b/packages/ui/dist-lib/hooks/useWizardContext.d.ts @@ -0,0 +1,16 @@ +/** + * useWizardContext Hook + * + * Replaces sessionStorage for wizard initial image and return path + * Uses Zustand store with localStorage persistence + */ +export declare const useWizardContext: () => { + wizardInitialImage: import('../stores/navigationStore').WizardInitialImage; + wizardReturnPath: string; + setWizardImage: (image: import('../stores/navigationStore').WizardInitialImage | null, returnPath?: string) => void; + clearWizardImage: () => void; + creationWizardOpen: boolean; + creationWizardMode: "page" | "default"; + setCreationWizardOpen: (open: boolean, mode?: "default" | "page") => void; +}; +export default useWizardContext; diff --git a/packages/ui/dist-lib/i18n.d.ts b/packages/ui/dist-lib/i18n.d.ts new file mode 100644 index 00000000..1a354ac0 --- /dev/null +++ b/packages/ui/dist-lib/i18n.d.ts @@ -0,0 +1,23 @@ +import { default as React, ReactNode } from 'react'; +type LangCode = 'en' | 'fr' | 'sw' | 'de' | 'es' | 'it' | 'ja' | 'ko' | 'pt' | 'ru' | 'tr' | 'zh' | 'nl'; +export declare const supportedLanguages: { + code: string; + name: string; +}[]; +export declare const getCurrentLang: () => LangCode; +export declare const setLanguage: (langCode: LangCode) => void; +export declare const translate: (textKey: string, langParam?: LangCode) => string; +interface TProps { + children: ReactNode; +} +declare const T: React.FC<TProps>; +export declare const getTranslationCache: (lang?: LangCode) => Record<string, string> | Record<string, Record<string, string>>; +export declare const downloadTranslations: (lang?: LangCode) => void; +export declare const getTranslationStatus: (lang?: LangCode) => Record<string, { + loaded: boolean; + keysCount: number; +}> | { + loaded: boolean; + keysCount: number; +}; +export { T }; diff --git a/packages/ui/dist-lib/image-api.d.ts b/packages/ui/dist-lib/image-api.d.ts new file mode 100644 index 00000000..7077f235 --- /dev/null +++ b/packages/ui/dist-lib/image-api.d.ts @@ -0,0 +1,40 @@ +export interface ImageGenerationRequest { + prompt: string; + width?: number; + height?: number; + model?: string; +} +export interface ImageGenerationResponse { + success: boolean; + imagePath?: string; + imageUrl?: string; + text?: string; + error?: string; +} +export interface ImageEditRequest { + imagePath: string; + prompt: string; + action: string; +} +interface ImageResult { + imageData: ArrayBuffer; + text?: string; +} +export declare const getGoogleApiKey: () => Promise<string | null>; +export declare const createImage: (prompt: string, model?: string, apiKey?: string, aspectRatio?: string, resolution?: string, enableSearchGrounding?: boolean) => Promise<ImageResult | null>; +export declare const editImage: (prompt: string, imageFiles: File[], model?: string, apiKey?: string, aspectRatio?: string, resolution?: string, enableSearchGrounding?: boolean) => Promise<ImageResult | null>; +export declare const imageApi: { + generateImage: (request: ImageGenerationRequest) => Promise<ImageGenerationResponse>; + editImage: (request: ImageEditRequest) => Promise<ImageGenerationResponse>; + uploadImage: (file: File) => Promise<{ + success: boolean; + path?: string; + error?: string; + }>; + downloadImage: (url: string) => Promise<{ + success: boolean; + path?: string; + error?: string; + }>; +}; +export {}; diff --git a/packages/ui/dist-lib/integrations/supabase/client.d.ts b/packages/ui/dist-lib/integrations/supabase/client.d.ts new file mode 100644 index 00000000..5b2101f2 --- /dev/null +++ b/packages/ui/dist-lib/integrations/supabase/client.d.ts @@ -0,0 +1,897 @@ +import { Database } from './types'; +export declare const supabase: import('@supabase/supabase-js').SupabaseClient<Database, "public", "public", { + Tables: { + collection_pictures: { + Row: { + added_at: string; + collection_id: string; + id: string; + picture_id: string; + }; + Insert: { + added_at?: string; + collection_id: string; + id?: string; + picture_id: string; + }; + Update: { + added_at?: string; + collection_id?: string; + id?: string; + picture_id?: string; + }; + Relationships: [{ + foreignKeyName: "collection_pictures_collection_id_fkey"; + columns: ["collection_id"]; + isOneToOne: false; + referencedRelation: "collections"; + referencedColumns: ["id"]; + }, { + foreignKeyName: "collection_pictures_picture_id_fkey"; + columns: ["picture_id"]; + isOneToOne: false; + referencedRelation: "pictures"; + referencedColumns: ["id"]; + }]; + }; + collection_posts: { + Row: { + collection_id: string; + created_at: string; + id: string; + post_id: string; + }; + Insert: { + collection_id: string; + created_at?: string; + id?: string; + post_id: string; + }; + Update: { + collection_id?: string; + created_at?: string; + id?: string; + post_id?: string; + }; + Relationships: [{ + foreignKeyName: "collection_posts_collection_id_fkey"; + columns: ["collection_id"]; + isOneToOne: false; + referencedRelation: "collections"; + referencedColumns: ["id"]; + }, { + foreignKeyName: "collection_posts_post_id_fkey"; + columns: ["post_id"]; + isOneToOne: false; + referencedRelation: "posts"; + referencedColumns: ["id"]; + }]; + }; + collections: { + Row: { + content: import('./types').Json | null; + created_at: string; + description: string | null; + id: string; + is_public: boolean; + layout: import('./types').Json | null; + name: string; + slug: string; + updated_at: string; + user_id: string; + }; + Insert: { + content?: import('./types').Json | null; + created_at?: string; + description?: string | null; + id?: string; + is_public?: boolean; + layout?: import('./types').Json | null; + name: string; + slug: string; + updated_at?: string; + user_id: string; + }; + Update: { + content?: import('./types').Json | null; + created_at?: string; + description?: string | null; + id?: string; + is_public?: boolean; + layout?: import('./types').Json | null; + name?: string; + slug?: string; + updated_at?: string; + user_id?: string; + }; + Relationships: []; + }; + comment_likes: { + Row: { + comment_id: string; + created_at: string; + id: string; + user_id: string; + }; + Insert: { + comment_id: string; + created_at?: string; + id?: string; + user_id: string; + }; + Update: { + comment_id?: string; + created_at?: string; + id?: string; + user_id?: string; + }; + Relationships: []; + }; + comments: { + Row: { + content: string; + created_at: string; + id: string; + likes_count: number | null; + parent_comment_id: string | null; + picture_id: string; + updated_at: string; + user_id: string; + }; + Insert: { + content: string; + created_at?: string; + id?: string; + likes_count?: number | null; + parent_comment_id?: string | null; + picture_id: string; + updated_at?: string; + user_id: string; + }; + Update: { + content?: string; + created_at?: string; + id?: string; + likes_count?: number | null; + parent_comment_id?: string | null; + picture_id?: string; + updated_at?: string; + user_id?: string; + }; + Relationships: [{ + foreignKeyName: "comments_parent_fk"; + columns: ["parent_comment_id"]; + isOneToOne: false; + referencedRelation: "comments"; + referencedColumns: ["id"]; + }]; + }; + context_definitions: { + Row: { + created_at: string | null; + default_filters: import('./types').Json; + default_templates: import('./types').Json; + description: string | null; + display_name: string; + icon: string | null; + id: string; + is_active: boolean | null; + name: string; + updated_at: string | null; + }; + Insert: { + created_at?: string | null; + default_filters?: import('./types').Json; + default_templates?: import('./types').Json; + description?: string | null; + display_name: string; + icon?: string | null; + id?: string; + is_active?: boolean | null; + name: string; + updated_at?: string | null; + }; + Update: { + created_at?: string | null; + default_filters?: import('./types').Json; + default_templates?: import('./types').Json; + description?: string | null; + display_name?: string; + icon?: string | null; + id?: string; + is_active?: boolean | null; + name?: string; + updated_at?: string | null; + }; + Relationships: []; + }; + filter_usage_logs: { + Row: { + context: string; + created_at: string | null; + error_message: string | null; + filters_applied: string[] | null; + id: string; + input_length: number; + model: string; + output_length: number; + processing_time_ms: number; + provider: string; + success: boolean; + template_id: string | null; + user_id: string | null; + }; + Insert: { + context: string; + created_at?: string | null; + error_message?: string | null; + filters_applied?: string[] | null; + id?: string; + input_length: number; + model: string; + output_length: number; + processing_time_ms: number; + provider: string; + success: boolean; + template_id?: string | null; + user_id?: string | null; + }; + Update: { + context?: string; + created_at?: string | null; + error_message?: string | null; + filters_applied?: string[] | null; + id?: string; + input_length?: number; + model?: string; + output_length?: number; + processing_time_ms?: number; + provider?: string; + success?: boolean; + template_id?: string | null; + user_id?: string | null; + }; + Relationships: [{ + foreignKeyName: "filter_usage_logs_template_id_fkey"; + columns: ["template_id"]; + isOneToOne: false; + referencedRelation: "user_templates"; + referencedColumns: ["id"]; + }]; + }; + likes: { + Row: { + created_at: string; + id: string; + picture_id: string; + user_id: string; + }; + Insert: { + created_at?: string; + id?: string; + picture_id: string; + user_id: string; + }; + Update: { + created_at?: string; + id?: string; + picture_id?: string; + user_id?: string; + }; + Relationships: []; + }; + organizations: { + Row: { + created_at: string; + id: string; + name: string; + slug: string; + updated_at: string; + }; + Insert: { + created_at?: string; + id?: string; + name: string; + slug: string; + updated_at?: string; + }; + Update: { + created_at?: string; + id?: string; + name?: string; + slug?: string; + updated_at?: string; + }; + Relationships: []; + }; + page_collaborators: { + Row: { + created_at: string; + id: string; + page_id: string; + role: Database["public"]["Enums"]["collaborator_role"]; + user_id: string; + }; + Insert: { + created_at?: string; + id?: string; + page_id: string; + role?: Database["public"]["Enums"]["collaborator_role"]; + user_id: string; + }; + Update: { + created_at?: string; + id?: string; + page_id?: string; + role?: Database["public"]["Enums"]["collaborator_role"]; + user_id?: string; + }; + Relationships: [{ + foreignKeyName: "page_collaborators_page_id_fkey"; + columns: ["page_id"]; + isOneToOne: false; + referencedRelation: "pages"; + referencedColumns: ["id"]; + }]; + }; + pages: { + Row: { + content: import('./types').Json | null; + created_at: string; + id: string; + is_public: boolean; + owner: string; + parent: string | null; + slug: string; + tags: string[] | null; + title: string; + type: string | null; + updated_at: string; + visible: boolean; + }; + Insert: { + content?: import('./types').Json | null; + created_at?: string; + id?: string; + is_public?: boolean; + owner: string; + parent?: string | null; + slug: string; + tags?: string[] | null; + title: string; + type?: string | null; + updated_at?: string; + visible?: boolean; + }; + Update: { + content?: import('./types').Json | null; + created_at?: string; + id?: string; + is_public?: boolean; + owner?: string; + parent?: string | null; + slug?: string; + tags?: string[] | null; + title?: string; + type?: string | null; + updated_at?: string; + visible?: boolean; + }; + Relationships: [{ + foreignKeyName: "pages_parent_fkey"; + columns: ["parent"]; + isOneToOne: false; + referencedRelation: "pages"; + referencedColumns: ["id"]; + }]; + }; + pictures: { + Row: { + created_at: string; + description: string | null; + flags: string[] | null; + id: string; + image_url: string; + is_selected: boolean; + likes_count: number | null; + meta: import('./types').Json | null; + organization_id: string | null; + parent_id: string | null; + position: number | null; + post_id: string | null; + tags: string[] | null; + thumbnail_url: string | null; + title: string; + type: string | null; + updated_at: string; + user_id: string; + visible: boolean; + }; + Insert: { + created_at?: string; + description?: string | null; + flags?: string[] | null; + id?: string; + image_url: string; + is_selected?: boolean; + likes_count?: number | null; + meta?: import('./types').Json | null; + organization_id?: string | null; + parent_id?: string | null; + position?: number | null; + post_id?: string | null; + tags?: string[] | null; + thumbnail_url?: string | null; + title: string; + type?: string | null; + updated_at?: string; + user_id: string; + visible?: boolean; + }; + Update: { + created_at?: string; + description?: string | null; + flags?: string[] | null; + id?: string; + image_url?: string; + is_selected?: boolean; + likes_count?: number | null; + meta?: import('./types').Json | null; + organization_id?: string | null; + parent_id?: string | null; + position?: number | null; + post_id?: string | null; + tags?: string[] | null; + thumbnail_url?: string | null; + title?: string; + type?: string | null; + updated_at?: string; + user_id?: string; + visible?: boolean; + }; + Relationships: [{ + foreignKeyName: "pictures_organization_id_fkey"; + columns: ["organization_id"]; + isOneToOne: false; + referencedRelation: "organizations"; + referencedColumns: ["id"]; + }, { + foreignKeyName: "pictures_parent_id_fkey"; + columns: ["parent_id"]; + isOneToOne: false; + referencedRelation: "pictures"; + referencedColumns: ["id"]; + }, { + foreignKeyName: "pictures_post_id_fkey"; + columns: ["post_id"]; + isOneToOne: false; + referencedRelation: "posts"; + referencedColumns: ["id"]; + }]; + }; + posts: { + Row: { + created_at: string | null; + description: string | null; + id: string; + meta: import('./types').Json | null; + settings: import('./types').Json | null; + title: string; + updated_at: string | null; + user_id: string; + }; + Insert: { + created_at?: string | null; + description?: string | null; + id?: string; + meta?: import('./types').Json | null; + settings?: import('./types').Json | null; + title: string; + updated_at?: string | null; + user_id: string; + }; + Update: { + created_at?: string | null; + description?: string | null; + id?: string; + meta?: import('./types').Json | null; + settings?: import('./types').Json | null; + title?: string; + updated_at?: string | null; + user_id?: string; + }; + Relationships: []; + }; + profiles: { + Row: { + aimlapi_api_key: string | null; + avatar_url: string | null; + bio: string | null; + bria_api_key: string | null; + created_at: string; + display_name: string | null; + google_api_key: string | null; + huggingface_api_key: string | null; + id: string; + openai_api_key: string | null; + pages: import('./types').Json | null; + replicate_api_key: string | null; + settings: import('./types').Json | null; + updated_at: string; + user_id: string; + username: string | null; + }; + Insert: { + aimlapi_api_key?: string | null; + avatar_url?: string | null; + bio?: string | null; + bria_api_key?: string | null; + created_at?: string; + display_name?: string | null; + google_api_key?: string | null; + huggingface_api_key?: string | null; + id?: string; + openai_api_key?: string | null; + pages?: import('./types').Json | null; + replicate_api_key?: string | null; + settings?: import('./types').Json | null; + updated_at?: string; + user_id: string; + username?: string | null; + }; + Update: { + aimlapi_api_key?: string | null; + avatar_url?: string | null; + bio?: string | null; + bria_api_key?: string | null; + created_at?: string; + display_name?: string | null; + google_api_key?: string | null; + huggingface_api_key?: string | null; + id?: string; + openai_api_key?: string | null; + pages?: import('./types').Json | null; + replicate_api_key?: string | null; + settings?: import('./types').Json | null; + updated_at?: string; + user_id?: string; + username?: string | null; + }; + Relationships: []; + }; + provider_configs: { + Row: { + base_url: string; + created_at: string | null; + display_name: string; + id: string; + is_active: boolean | null; + models: import('./types').Json; + name: string; + rate_limits: import('./types').Json | null; + settings: import('./types').Json | null; + updated_at: string | null; + user_id: string | null; + }; + Insert: { + base_url: string; + created_at?: string | null; + display_name: string; + id?: string; + is_active?: boolean | null; + models?: import('./types').Json; + name: string; + rate_limits?: import('./types').Json | null; + settings?: import('./types').Json | null; + updated_at?: string | null; + user_id?: string | null; + }; + Update: { + base_url?: string; + created_at?: string | null; + display_name?: string; + id?: string; + is_active?: boolean | null; + models?: import('./types').Json; + name?: string; + rate_limits?: import('./types').Json | null; + settings?: import('./types').Json | null; + updated_at?: string | null; + user_id?: string | null; + }; + Relationships: []; + }; + role_permissions: { + Row: { + created_at: string; + id: string; + permission: Database["public"]["Enums"]["app_permission"]; + role: Database["public"]["Enums"]["app_role"]; + }; + Insert: { + created_at?: string; + id?: string; + permission: Database["public"]["Enums"]["app_permission"]; + role: Database["public"]["Enums"]["app_role"]; + }; + Update: { + created_at?: string; + id?: string; + permission?: Database["public"]["Enums"]["app_permission"]; + role?: Database["public"]["Enums"]["app_role"]; + }; + Relationships: []; + }; + user_filter_configs: { + Row: { + context: string; + created_at: string | null; + custom_filters: import('./types').Json | null; + default_templates: string[] | null; + id: string; + is_default: boolean | null; + model: string; + provider: string; + updated_at: string | null; + user_id: string | null; + variables: import('./types').Json | null; + }; + Insert: { + context: string; + created_at?: string | null; + custom_filters?: import('./types').Json | null; + default_templates?: string[] | null; + id?: string; + is_default?: boolean | null; + model?: string; + provider?: string; + updated_at?: string | null; + user_id?: string | null; + variables?: import('./types').Json | null; + }; + Update: { + context?: string; + created_at?: string | null; + custom_filters?: import('./types').Json | null; + default_templates?: string[] | null; + id?: string; + is_default?: boolean | null; + model?: string; + provider?: string; + updated_at?: string | null; + user_id?: string | null; + variables?: import('./types').Json | null; + }; + Relationships: []; + }; + user_organizations: { + Row: { + created_at: string; + id: string; + organization_id: string; + role: string; + updated_at: string; + user_id: string; + }; + Insert: { + created_at?: string; + id?: string; + organization_id: string; + role?: string; + updated_at?: string; + user_id: string; + }; + Update: { + created_at?: string; + id?: string; + organization_id?: string; + role?: string; + updated_at?: string; + user_id?: string; + }; + Relationships: [{ + foreignKeyName: "user_organizations_organization_id_fkey"; + columns: ["organization_id"]; + isOneToOne: false; + referencedRelation: "organizations"; + referencedColumns: ["id"]; + }]; + }; + user_roles: { + Row: { + created_at: string; + id: string; + organization_id: string | null; + role: Database["public"]["Enums"]["app_role"]; + updated_at: string; + user_id: string; + }; + Insert: { + created_at?: string; + id?: string; + organization_id?: string | null; + role: Database["public"]["Enums"]["app_role"]; + updated_at?: string; + user_id: string; + }; + Update: { + created_at?: string; + id?: string; + organization_id?: string | null; + role?: Database["public"]["Enums"]["app_role"]; + updated_at?: string; + user_id?: string; + }; + Relationships: [{ + foreignKeyName: "user_roles_user_id_fkey"; + columns: ["user_id"]; + isOneToOne: false; + referencedRelation: "profiles"; + referencedColumns: ["user_id"]; + }]; + }; + user_secrets: { + Row: { + aimlapi_api_key: string | null; + bria_api_key: string | null; + created_at: string; + google_api_key: string | null; + huggingface_api_key: string | null; + is_admin: boolean | null; + openai_api_key: string | null; + replicate_api_key: string | null; + settings: import('./types').Json | null; + updated_at: string; + user_id: string; + }; + Insert: { + aimlapi_api_key?: string | null; + bria_api_key?: string | null; + created_at?: string; + google_api_key?: string | null; + huggingface_api_key?: string | null; + is_admin?: boolean | null; + openai_api_key?: string | null; + replicate_api_key?: string | null; + settings?: import('./types').Json | null; + updated_at?: string; + user_id: string; + }; + Update: { + aimlapi_api_key?: string | null; + bria_api_key?: string | null; + created_at?: string; + google_api_key?: string | null; + huggingface_api_key?: string | null; + is_admin?: boolean | null; + openai_api_key?: string | null; + replicate_api_key?: string | null; + settings?: import('./types').Json | null; + updated_at?: string; + user_id?: string; + }; + Relationships: []; + }; + user_templates: { + Row: { + context: string; + created_at: string | null; + description: string | null; + filters: string[] | null; + format: string | null; + id: string; + is_public: boolean | null; + model: string; + name: string; + prompt: string; + provider: string; + updated_at: string | null; + usage_count: number | null; + user_id: string | null; + }; + Insert: { + context: string; + created_at?: string | null; + description?: string | null; + filters?: string[] | null; + format?: string | null; + id?: string; + is_public?: boolean | null; + model?: string; + name: string; + prompt: string; + provider?: string; + updated_at?: string | null; + usage_count?: number | null; + user_id?: string | null; + }; + Update: { + context?: string; + created_at?: string | null; + description?: string | null; + filters?: string[] | null; + format?: string | null; + id?: string; + is_public?: boolean | null; + model?: string; + name?: string; + prompt?: string; + provider?: string; + updated_at?: string | null; + usage_count?: number | null; + user_id?: string | null; + }; + Relationships: []; + }; + wizard_sessions: { + Row: { + created_at: string; + generated_image_url: string | null; + id: string; + input_images: string[] | null; + prompt: string; + status: string; + updated_at: string; + user_id: string; + }; + Insert: { + created_at?: string; + generated_image_url?: string | null; + id?: string; + input_images?: string[] | null; + prompt?: string; + status?: string; + updated_at?: string; + user_id: string; + }; + Update: { + created_at?: string; + generated_image_url?: string | null; + id?: string; + input_images?: string[] | null; + prompt?: string; + status?: string; + updated_at?: string; + user_id?: string; + }; + Relationships: []; + }; + }; + Views: { [_ in never]: never; }; + Functions: { + authorize: { + Args: { + _role: Database["public"]["Enums"]["app_role"]; + _user_id: string; + }; + Returns: boolean; + }; + has_permission: { + Args: { + _permission: Database["public"]["Enums"]["app_permission"]; + _user_id: string; + }; + Returns: boolean; + }; + is_page_collaborator: { + Args: { + _page_id: string; + }; + Returns: boolean; + }; + is_page_owner: { + Args: { + _page_id: string; + }; + Returns: boolean; + }; + }; + Enums: { + app_permission: "pictures.read" | "pictures.create" | "pictures.update" | "pictures.delete" | "collections.read" | "collections.create" | "collections.update" | "collections.delete" | "comments.read" | "comments.create" | "comments.update" | "comments.delete" | "organization.manage"; + app_role: "owner" | "admin" | "member" | "viewer"; + collaborator_role: "viewer" | "editor" | "owner"; + }; + CompositeTypes: { [_ in never]: never; }; +}, { + PostgrestVersion: "13.0.5"; +}>; diff --git a/packages/ui/dist-lib/lib-export-CI8auKfP.js b/packages/ui/dist-lib/lib-export-CI8auKfP.js new file mode 100644 index 00000000..7f53f457 --- /dev/null +++ b/packages/ui/dist-lib/lib-export-CI8auKfP.js @@ -0,0 +1,40108 @@ +var L8 = Object.defineProperty; +var f3 = (n) => { + throw TypeError(n); +}; +var j8 = (n, t, e) => t in n ? L8(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e; +var U = (n, t, e) => j8(n, typeof t != "symbol" ? t + "" : t, e), Jv = (n, t, e) => t.has(n) || f3("Cannot " + e); +var l = (n, t, e) => (Jv(n, t, "read from private field"), e ? e.call(n) : t.get(n)), S = (n, t, e) => t.has(n) ? f3("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(n) : t.set(n, e), P = (n, t, e, s) => (Jv(n, t, "write to private field"), s ? s.call(n, e) : t.set(n, e), e), m = (n, t, e) => (Jv(n, t, "access private method"), e); +var p3 = (n, t, e, s) => ({ + set _(r) { + P(n, t, r, e); + }, + get _() { + return l(n, t, s); + } +}); +import * as d from "react"; +import he, { useState as fe, useEffect as Rt, createContext as Ap, useContext as qc, useMemo as Ng, useRef as An, useCallback as Xh, useImperativeHandle as F8, useLayoutEffect as qS } from "react"; +import { createClient as V8 } from "@supabase/supabase-js"; +import { X as $g, Check as Nx, Search as B8, Tag as U8, FolderOpen as q8, Image as zS, Eye as z8, EyeOff as H8, Trash2 as Wy, Edit3 as Rd, Bookmark as Id, GitBranch as tw, Sparkles as HS, Loader2 as Il, MicOff as Rg, Mic as Ig, Circle as WS, RefreshCw as m3, Upload as nw, ChevronRight as W8, History as G8, ArrowUp as om, FileText as Fm, Plus as Y8, Wand2 as sw, Save as g3, ArrowDown as y3, User as K8, Heart as Od, MessageCircle as df, Layers as GS, Download as Og, Maximize as YS, Share2 as KS, Play as lm, UploadCloud as v3 } from "lucide-react"; +import { toast as Ee } from "sonner"; +import { useNavigate as Kd, useLocation as Z8 } from "react-router-dom"; +import * as ZS from "react-dom"; +import X8, { createPortal as Q8, flushSync as XS } from "react-dom"; +var b3 = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {}; +function J8(n) { + return n && n.__esModule && Object.prototype.hasOwnProperty.call(n, "default") ? n.default : n; +} +var rw = { exports: {} }, gh = {}; +/** + * @license React + * react-jsx-runtime.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var w3; +function eL() { + if (w3) return gh; + w3 = 1; + var n = he, t = Symbol.for("react.element"), e = Symbol.for("react.fragment"), s = Object.prototype.hasOwnProperty, r = n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, i = { key: !0, ref: !0, __self: !0, __source: !0 }; + function a(o, c, u) { + var f, p = {}, g = null, y = null; + u !== void 0 && (g = "" + u), c.key !== void 0 && (g = "" + c.key), c.ref !== void 0 && (y = c.ref); + for (f in c) s.call(c, f) && !i.hasOwnProperty(f) && (p[f] = c[f]); + if (o && o.defaultProps) for (f in c = o.defaultProps, c) p[f] === void 0 && (p[f] = c[f]); + return { $$typeof: t, type: o, key: g, ref: y, props: p, _owner: r.current }; + } + return gh.Fragment = e, gh.jsx = a, gh.jsxs = a, gh; +} +var yh = {}; +/** + * @license React + * react-jsx-runtime.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var x3; +function tL() { + return x3 || (x3 = 1, process.env.NODE_ENV !== "production" && function() { + var n = he, t = Symbol.for("react.element"), e = Symbol.for("react.portal"), s = Symbol.for("react.fragment"), r = Symbol.for("react.strict_mode"), i = Symbol.for("react.profiler"), a = Symbol.for("react.provider"), o = Symbol.for("react.context"), c = Symbol.for("react.forward_ref"), u = Symbol.for("react.suspense"), f = Symbol.for("react.suspense_list"), p = Symbol.for("react.memo"), g = Symbol.for("react.lazy"), y = Symbol.for("react.offscreen"), v = Symbol.iterator, b = "@@iterator"; + function w(M) { + if (M === null || typeof M != "object") + return null; + var ie = v && M[v] || M[b]; + return typeof ie == "function" ? ie : null; + } + var E = n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; + function x(M) { + { + for (var ie = arguments.length, be = new Array(ie > 1 ? ie - 1 : 0), Oe = 1; Oe < ie; Oe++) + be[Oe - 1] = arguments[Oe]; + C("error", M, be); + } + } + function C(M, ie, be) { + { + var Oe = E.ReactDebugCurrentFrame, Lt = Oe.getStackAddendum(); + Lt !== "" && (ie += "%s", be = be.concat([Lt])); + var Zt = be.map(function(Tt) { + return String(Tt); + }); + Zt.unshift("Warning: " + ie), Function.prototype.apply.call(console[M], console, Zt); + } + } + var _ = !1, k = !1, A = !1, T = !1, N = !1, $; + $ = Symbol.for("react.module.reference"); + function D(M) { + return !!(typeof M == "string" || typeof M == "function" || M === s || M === i || N || M === r || M === u || M === f || T || M === y || _ || k || A || typeof M == "object" && M !== null && (M.$$typeof === g || M.$$typeof === p || M.$$typeof === a || M.$$typeof === o || M.$$typeof === c || // This needs to include all possible module reference object + // types supported by any Flight configuration anywhere since + // we don't know which Flight build this will end up being used + // with. + M.$$typeof === $ || M.getModuleId !== void 0)); + } + function V(M, ie, be) { + var Oe = M.displayName; + if (Oe) + return Oe; + var Lt = ie.displayName || ie.name || ""; + return Lt !== "" ? be + "(" + Lt + ")" : be; + } + function j(M) { + return M.displayName || "Context"; + } + function B(M) { + if (M == null) + return null; + if (typeof M.tag == "number" && x("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), typeof M == "function") + return M.displayName || M.name || null; + if (typeof M == "string") + return M; + switch (M) { + case s: + return "Fragment"; + case e: + return "Portal"; + case i: + return "Profiler"; + case r: + return "StrictMode"; + case u: + return "Suspense"; + case f: + return "SuspenseList"; + } + if (typeof M == "object") + switch (M.$$typeof) { + case o: + var ie = M; + return j(ie) + ".Consumer"; + case a: + var be = M; + return j(be._context) + ".Provider"; + case c: + return V(M, M.render, "ForwardRef"); + case p: + var Oe = M.displayName || null; + return Oe !== null ? Oe : B(M.type) || "Memo"; + case g: { + var Lt = M, Zt = Lt._payload, Tt = Lt._init; + try { + return B(Tt(Zt)); + } catch { + return null; + } + } + } + return null; + } + var W = Object.assign, J = 0, G, q, H, L, X, te, Te; + function _e() { + } + _e.__reactDisabledLog = !0; + function Je() { + { + if (J === 0) { + G = console.log, q = console.info, H = console.warn, L = console.error, X = console.group, te = console.groupCollapsed, Te = console.groupEnd; + var M = { + configurable: !0, + enumerable: !0, + value: _e, + writable: !0 + }; + Object.defineProperties(console, { + info: M, + log: M, + warn: M, + error: M, + group: M, + groupCollapsed: M, + groupEnd: M + }); + } + J++; + } + } + function Re() { + { + if (J--, J === 0) { + var M = { + configurable: !0, + enumerable: !0, + writable: !0 + }; + Object.defineProperties(console, { + log: W({}, M, { + value: G + }), + info: W({}, M, { + value: q + }), + warn: W({}, M, { + value: H + }), + error: W({}, M, { + value: L + }), + group: W({}, M, { + value: X + }), + groupCollapsed: W({}, M, { + value: te + }), + groupEnd: W({}, M, { + value: Te + }) + }); + } + J < 0 && x("disabledDepth fell below zero. This is a bug in React. Please file an issue."); + } + } + var nt = E.ReactCurrentDispatcher, rt; + function qe(M, ie, be) { + { + if (rt === void 0) + try { + throw Error(); + } catch (Lt) { + var Oe = Lt.stack.trim().match(/\n( *(at )?)/); + rt = Oe && Oe[1] || ""; + } + return ` +` + rt + M; + } + } + var Ye = !1, ee; + { + var ge = typeof WeakMap == "function" ? WeakMap : Map; + ee = new ge(); + } + function ze(M, ie) { + if (!M || Ye) + return ""; + { + var be = ee.get(M); + if (be !== void 0) + return be; + } + var Oe; + Ye = !0; + var Lt = Error.prepareStackTrace; + Error.prepareStackTrace = void 0; + var Zt; + Zt = nt.current, nt.current = null, Je(); + try { + if (ie) { + var Tt = function() { + throw Error(); + }; + if (Object.defineProperty(Tt.prototype, "props", { + set: function() { + throw Error(); + } + }), typeof Reflect == "object" && Reflect.construct) { + try { + Reflect.construct(Tt, []); + } catch (Gt) { + Oe = Gt; + } + Reflect.construct(M, [], Tt); + } else { + try { + Tt.call(); + } catch (Gt) { + Oe = Gt; + } + M.call(Tt.prototype); + } + } else { + try { + throw Error(); + } catch (Gt) { + Oe = Gt; + } + M(); + } + } catch (Gt) { + if (Gt && Oe && typeof Gt.stack == "string") { + for (var Ct = Gt.stack.split(` +`), es = Oe.stack.split(` +`), me = Ct.length - 1, O = es.length - 1; me >= 1 && O >= 0 && Ct[me] !== es[O]; ) + O--; + for (; me >= 1 && O >= 0; me--, O--) + if (Ct[me] !== es[O]) { + if (me !== 1 || O !== 1) + do + if (me--, O--, O < 0 || Ct[me] !== es[O]) { + var re = ` +` + Ct[me].replace(" at new ", " at "); + return M.displayName && re.includes("<anonymous>") && (re = re.replace("<anonymous>", M.displayName)), typeof M == "function" && ee.set(M, re), re; + } + while (me >= 1 && O >= 0); + break; + } + } + } finally { + Ye = !1, nt.current = Zt, Re(), Error.prepareStackTrace = Lt; + } + var Ce = M ? M.displayName || M.name : "", qt = Ce ? qe(Ce) : ""; + return typeof M == "function" && ee.set(M, qt), qt; + } + function st(M, ie, be) { + return ze(M, !1); + } + function Pt(M) { + var ie = M.prototype; + return !!(ie && ie.isReactComponent); + } + function et(M, ie, be) { + if (M == null) + return ""; + if (typeof M == "function") + return ze(M, Pt(M)); + if (typeof M == "string") + return qe(M); + switch (M) { + case u: + return qe("Suspense"); + case f: + return qe("SuspenseList"); + } + if (typeof M == "object") + switch (M.$$typeof) { + case c: + return st(M.render); + case p: + return et(M.type, ie, be); + case g: { + var Oe = M, Lt = Oe._payload, Zt = Oe._init; + try { + return et(Zt(Lt), ie, be); + } catch { + } + } + } + return ""; + } + var tn = Object.prototype.hasOwnProperty, hs = {}, ne = E.ReactDebugCurrentFrame; + function ce(M) { + if (M) { + var ie = M._owner, be = et(M.type, M._source, ie ? ie.type : null); + ne.setExtraStackFrame(be); + } else + ne.setExtraStackFrame(null); + } + function ht(M, ie, be, Oe, Lt) { + { + var Zt = Function.call.bind(tn); + for (var Tt in M) + if (Zt(M, Tt)) { + var Ct = void 0; + try { + if (typeof M[Tt] != "function") { + var es = Error((Oe || "React class") + ": " + be + " type `" + Tt + "` is invalid; it must be a function, usually from the `prop-types` package, but received `" + typeof M[Tt] + "`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`."); + throw es.name = "Invariant Violation", es; + } + Ct = M[Tt](ie, Tt, Oe, be, null, "SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"); + } catch (me) { + Ct = me; + } + Ct && !(Ct instanceof Error) && (ce(Lt), x("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).", Oe || "React class", be, Tt, typeof Ct), ce(null)), Ct instanceof Error && !(Ct.message in hs) && (hs[Ct.message] = !0, ce(Lt), x("Failed %s type: %s", be, Ct.message), ce(null)); + } + } + } + var R = Array.isArray; + function F(M) { + return R(M); + } + function Y(M) { + { + var ie = typeof Symbol == "function" && Symbol.toStringTag, be = ie && M[Symbol.toStringTag] || M.constructor.name || "Object"; + return be; + } + } + function le(M) { + try { + return I(M), !1; + } catch { + return !0; + } + } + function I(M) { + return "" + M; + } + function K(M) { + if (le(M)) + return x("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.", Y(M)), I(M); + } + var se = E.ReactCurrentOwner, Pe = { + key: !0, + ref: !0, + __self: !0, + __source: !0 + }, xt, wn; + function Os(M) { + if (tn.call(M, "ref")) { + var ie = Object.getOwnPropertyDescriptor(M, "ref").get; + if (ie && ie.isReactWarning) + return !1; + } + return M.ref !== void 0; + } + function Ms(M) { + if (tn.call(M, "key")) { + var ie = Object.getOwnPropertyDescriptor(M, "key").get; + if (ie && ie.isReactWarning) + return !1; + } + return M.key !== void 0; + } + function no(M, ie) { + typeof M.ref == "string" && se.current; + } + function fi(M, ie) { + { + var be = function() { + xt || (xt = !0, x("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)", ie)); + }; + be.isReactWarning = !0, Object.defineProperty(M, "key", { + get: be, + configurable: !0 + }); + } + } + function ys(M, ie) { + { + var be = function() { + wn || (wn = !0, x("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)", ie)); + }; + be.isReactWarning = !0, Object.defineProperty(M, "ref", { + get: be, + configurable: !0 + }); + } + } + var pi = function(M, ie, be, Oe, Lt, Zt, Tt) { + var Ct = { + // This tag allows us to uniquely identify this as a React Element + $$typeof: t, + // Built-in properties that belong on the element + type: M, + key: ie, + ref: be, + props: Tt, + // Record the component responsible for creating this element. + _owner: Zt + }; + return Ct._store = {}, Object.defineProperty(Ct._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: !1 + }), Object.defineProperty(Ct, "_self", { + configurable: !1, + enumerable: !1, + writable: !1, + value: Oe + }), Object.defineProperty(Ct, "_source", { + configurable: !1, + enumerable: !1, + writable: !1, + value: Lt + }), Object.freeze && (Object.freeze(Ct.props), Object.freeze(Ct)), Ct; + }; + function so(M, ie, be, Oe, Lt) { + { + var Zt, Tt = {}, Ct = null, es = null; + be !== void 0 && (K(be), Ct = "" + be), Ms(ie) && (K(ie.key), Ct = "" + ie.key), Os(ie) && (es = ie.ref, no(ie, Lt)); + for (Zt in ie) + tn.call(ie, Zt) && !Pe.hasOwnProperty(Zt) && (Tt[Zt] = ie[Zt]); + if (M && M.defaultProps) { + var me = M.defaultProps; + for (Zt in me) + Tt[Zt] === void 0 && (Tt[Zt] = me[Zt]); + } + if (Ct || es) { + var O = typeof M == "function" ? M.displayName || M.name || "Unknown" : M; + Ct && fi(Tt, O), es && ys(Tt, O); + } + return pi(M, Ct, es, Lt, Oe, se.current, Tt); + } + } + var sa = E.ReactCurrentOwner, Sl = E.ReactDebugCurrentFrame; + function Mr(M) { + if (M) { + var ie = M._owner, be = et(M.type, M._source, ie ? ie.type : null); + Sl.setExtraStackFrame(be); + } else + Sl.setExtraStackFrame(null); + } + var ro; + ro = !1; + function hh(M) { + return typeof M == "object" && M !== null && M.$$typeof === t; + } + function io() { + { + if (sa.current) { + var M = B(sa.current.type); + if (M) + return ` + +Check the render method of \`` + M + "`."; + } + return ""; + } + } + function Zv(M) { + return ""; + } + var sm = {}; + function kn(M) { + { + var ie = io(); + if (!ie) { + var be = typeof M == "string" ? M : M.displayName || M.name; + be && (ie = ` + +Check the top-level render call using <` + be + ">."); + } + return ie; + } + } + function ra(M, ie) { + { + if (!M._store || M._store.validated || M.key != null) + return; + M._store.validated = !0; + var be = kn(ie); + if (sm[be]) + return; + sm[be] = !0; + var Oe = ""; + M && M._owner && M._owner !== sa.current && (Oe = " It was passed a child from " + B(M._owner.type) + "."), Mr(M), x('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.', be, Oe), Mr(null); + } + } + function rm(M, ie) { + { + if (typeof M != "object") + return; + if (F(M)) + for (var be = 0; be < M.length; be++) { + var Oe = M[be]; + hh(Oe) && ra(Oe, ie); + } + else if (hh(M)) + M._store && (M._store.validated = !0); + else if (M) { + var Lt = w(M); + if (typeof Lt == "function" && Lt !== M.entries) + for (var Zt = Lt.call(M), Tt; !(Tt = Zt.next()).done; ) + hh(Tt.value) && ra(Tt.value, ie); + } + } + } + function im(M) { + { + var ie = M.type; + if (ie == null || typeof ie == "string") + return; + var be; + if (typeof ie == "function") + be = ie.propTypes; + else if (typeof ie == "object" && (ie.$$typeof === c || // Note: Memo only checks outer props here. + // Inner props are checked in the reconciler. + ie.$$typeof === p)) + be = ie.propTypes; + else + return; + if (be) { + var Oe = B(ie); + ht(be, M.props, "prop", Oe, M); + } else if (ie.PropTypes !== void 0 && !ro) { + ro = !0; + var Lt = B(ie); + x("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?", Lt || "Unknown"); + } + typeof ie.getDefaultProps == "function" && !ie.getDefaultProps.isReactClassApproved && x("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead."); + } + } + function fh(M) { + { + for (var ie = Object.keys(M.props), be = 0; be < ie.length; be++) { + var Oe = ie[be]; + if (Oe !== "children" && Oe !== "key") { + Mr(M), x("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.", Oe), Mr(null); + break; + } + } + M.ref !== null && (Mr(M), x("Invalid attribute `ref` supplied to `React.Fragment`."), Mr(null)); + } + } + var ph = {}; + function mh(M, ie, be, Oe, Lt, Zt) { + { + var Tt = D(M); + if (!Tt) { + var Ct = ""; + (M === void 0 || typeof M == "object" && M !== null && Object.keys(M).length === 0) && (Ct += " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports."); + var es = Zv(); + es ? Ct += es : Ct += io(); + var me; + M === null ? me = "null" : F(M) ? me = "array" : M !== void 0 && M.$$typeof === t ? (me = "<" + (B(M.type) || "Unknown") + " />", Ct = " Did you accidentally export a JSX literal instead of a component?") : me = typeof M, x("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s", me, Ct); + } + var O = so(M, ie, be, Lt, Zt); + if (O == null) + return O; + if (Tt) { + var re = ie.children; + if (re !== void 0) + if (Oe) + if (F(re)) { + for (var Ce = 0; Ce < re.length; Ce++) + rm(re[Ce], M); + Object.freeze && Object.freeze(re); + } else + x("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."); + else + rm(re, M); + } + if (tn.call(ie, "key")) { + var qt = B(M), Gt = Object.keys(ie).filter(function(Dr) { + return Dr !== "key"; + }), gn = Gt.length > 0 ? "{key: someKey, " + Gt.join(": ..., ") + ": ...}" : "{key: someKey}"; + if (!ph[qt + gn]) { + var fs = Gt.length > 0 ? "{" + Gt.join(": ..., ") + ": ...}" : "{}"; + x(`A props object containing a "key" prop is being spread into JSX: + let props = %s; + <%s {...props} /> +React keys must be passed directly to JSX without using spread: + let props = %s; + <%s key={someKey} {...props} />`, gn, qt, fs, qt), ph[qt + gn] = !0; + } + } + return M === s ? fh(O) : im(O), O; + } + } + function Xv(M, ie, be) { + return mh(M, ie, be, !0); + } + function gr(M, ie, be) { + return mh(M, ie, be, !1); + } + var ia = gr, am = Xv; + yh.Fragment = s, yh.jsx = ia, yh.jsxs = am; + }()), yh; +} +process.env.NODE_ENV === "production" ? rw.exports = eL() : rw.exports = tL(); +var h = rw.exports; +const cm = /* @__PURE__ */ new Map(), nL = ({ + src: n, + responsiveSizes: t = [180, 640, 1024], + formats: e = ["avif", "webp", "jpeg"], + enabled: s = !0, + apiUrl: r +}) => { + const [i, a] = fe(null), [o, c] = fe(!1), [u, f] = fe(null); + return Rt(() => { + let p = !0; + return (async () => { + if (!n || !s) { + p && (n || (a(null), c(!1))); + return; + } + p && (c(!0), f(null)); + try { + if (typeof n == "string") { + if (n.startsWith("data:")) { + p && (a({ + img: { + src: n, + width: 0, + // Unknown dimensions without parsing + height: 0, + format: "unknown" + }, + sources: [] + // No alternative sources for raw data URI + }), c(!1)); + return; + } + const y = JSON.stringify({ src: n, sizes: t, formats: e, apiUrl: r }); + if (!cm.has(y)) { + const b = (async () => { + const w = new FormData(); + w.append("url", n), w.append("sizes", JSON.stringify(t)), w.append("formats", JSON.stringify(e)); + const x = await fetch(`${r || void 0 || "http://192.168.1.11:3333"}/api/images/responsive`, { + method: "POST", + body: w + }); + if (!x.ok) { + const C = await x.text(); + throw cm.delete(y), new Error(C || "Failed to generate responsive images"); + } + return x.json(); + })(); + cm.set(y, b); + } + const v = await cm.get(y); + p && a(v); + } else { + const y = new FormData(); + y.append("file", n), y.append("sizes", JSON.stringify(t)), y.append("formats", JSON.stringify(e)); + const b = await fetch(`${r || void 0 || ""}/api/images/responsive`, { + method: "POST", + body: y + }); + if (!b.ok) { + const E = await b.text(); + throw new Error(E || "Failed to generate responsive images"); + } + const w = await b.json(); + p && a(w); + } + } catch (y) { + console.error("Error generating responsive images:", y), p && f(y.message); + } finally { + p && c(!1); + } + })(), () => { + p = !1; + }; + }, [n, JSON.stringify(t), JSON.stringify(e), s]), { data: i, loading: o, error: u }; +}, Mg = ({ + src: n, + sizes: t = "(max-width: 1024px) 100vw, 50vw", + className: e, + imgClassName: s, + responsiveSizes: r = [180, 640, 1024, 1280, 1600], + formats: i = ["avif", "webp"], + alt: a, + onDataLoaded: o, + rootMargin: c = "800px", + onLoad: u, + onError: f, + data: p, + apiUrl: g, + ...y +}) => { + const [v, b] = fe(y.loading === "eager"), [w, E] = fe(!1), x = he.useRef(null), C = he.useRef(null); + Rt(() => { + if (y.loading === "eager" || p) { + b(!0); + return; + } + const $ = new IntersectionObserver(([D]) => { + D.isIntersecting && (b(!0), $.disconnect()); + }, { + rootMargin: c + }); + return x.current && $.observe(x.current), () => { + $.disconnect(); + }; + }, [y.loading, c, p]); + const _ = nL({ + src: n, + responsiveSizes: r, + formats: i, + enabled: v && !p, + apiUrl: g + }), k = p || _.data, A = !p && _.loading, T = !p && _.error; + return Rt(() => { + k && o && o(k); + }, [k, o]), Rt(() => { + E(!1); + }, [n]), Rt(() => { + var $; + ($ = C.current) != null && $.complete && E(!0); + }, [k, w]), !v || (A || v && !k && !T) ? /* @__PURE__ */ h.jsx("div", { ref: x, className: `animate-pulse bg-gray-200 w-full h-full ${e || ""}` }) : T || !k ? typeof n == "string" ? /* @__PURE__ */ h.jsx("img", { src: n, alt: a, className: s || e, ...y }) : /* @__PURE__ */ h.jsx("div", { className: "text-red-500 text-xs", children: "Failed to load image" }) : /* @__PURE__ */ h.jsxs("div", { className: `relative w-full h-full ${e || ""}`, children: [ + /* @__PURE__ */ h.jsxs("picture", { children: [ + (k.sources || []).map(($, D) => /* @__PURE__ */ h.jsx("source", { srcSet: $.srcset, type: $.type, sizes: t }, D)), + /* @__PURE__ */ h.jsx( + "img", + { + ref: C, + src: k.img.src, + alt: a, + width: k.img.width > 0 ? k.img.width : void 0, + height: k.img.height > 0 ? k.img.height : void 0, + className: `${s || ""} transition-opacity duration-300 ${w ? "opacity-100" : "opacity-0"}`, + onLoad: ($) => { + E(!0), u == null || u($); + }, + onError: ($) => { + E(!0), f == null || f($); + }, + loading: y.loading || "lazy", + decoding: "async", + ...y + } + ) + ] }), + !w && /* @__PURE__ */ h.jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-gray-100/50 z-10 pointer-events-none", children: /* @__PURE__ */ h.jsx("div", { className: "animate-spin rounded-full h-8 w-8 border-2 border-primary border-t-transparent" }) }) + ] }); +}, sL = "https://ytoadlpbdguriiccjnip.supabase.co", rL = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inl0b2FkbHBiZGd1cmlpY2NqbmlwIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTg5NjU5OTAsImV4cCI6MjA3NDU0MTk5MH0.mXt594NQ2QsJQ_F-HqsSlBsLQ5EUB4iFxXtPE7zyaX8", ct = V8(sL, rL, { + auth: { + storage: localStorage, + persistSession: !0, + autoRefreshToken: !0 + } +}), vh = /* @__PURE__ */ new Map(), iL = async (n, t) => { + if (!vh.has(n)) { + const e = t().catch((s) => { + throw vh.delete(n), s; + }).finally(() => { + setTimeout(() => vh.delete(n), 2500); + }); + vh.set(n, e); + } + return vh.get(n); +}, aL = async (n, t) => { + const e = t || ct; + if (n.length === 0) return []; + const r = `selected-versions-${[...n].sort().join(",")}`; + return iL(r, async () => { + const i = `(${n.join(",")})`, { data: a, error: o } = await e.from("pictures").select("*").eq("is_selected", !0).or(`parent_id.in.${i},id.in.${i}`); + if (o) throw o; + return a; + }); +}, oL = async (n = "home", t, e, s, r = 0, i = 30, a) => { + const o = a || ct, c = r * i, u = c + i - 1; + let f = o.from("posts").select(` + *, + pictures( + id, + image_url, + thumbnail_url, + type, + meta, + description, + likes_count, + visible, + is_selected, + position, + parent_id, + created_at, + title + ) + `).order("created_at", { ascending: !1 }).range(c, u); + !t && n === "home" && (f = f.or("settings.is.null,settings->>visibility.eq.public")); + const { data: p, error: g } = await f; + if (g) throw g; + let y = []; + if (n === "home" || n === "user" || n === "collection") { + let T = o.from("pages").select("*").order("created_at", { ascending: !1 }).range(c, u); + n === "user" && t ? (T = T.eq("owner", t), T = T.eq("is_public", !0).eq("visible", !0)) : n === "home" && (T = T.eq("is_public", !0).eq("visible", !0)); + const { data: N, error: $ } = await T; + !$ && N && (y = N), console.log("pagesData : source", n, y); + } else + console.log("no pages for source", n); + const v = [], b = /* @__PURE__ */ new Map(); + y.forEach((T) => { + var D; + let N = T.content; + if (typeof N == "string") + try { + N = JSON.parse(N); + } catch (V) { + console.error(`[db] Failed to parse content for page ${T.id}`, V); + return; + } + let $ = N == null ? void 0 : N.containers; + if (!$ && (N != null && N.pages)) { + const V = Object.keys(N.pages)[0]; + V && ((D = N.pages[V]) != null && D.containers) && ($ = N.pages[V].containers); + } + if ($) { + for (const V of $) + if (V.widgets) { + const j = V.widgets.find((B) => { + var W; + return B.widgetId === "photo-card" && ((W = B.props) == null ? void 0 : W.pictureId); + }); + if (j) { + const B = j.props.pictureId; + v.push(B), b.set(T.id, B); + break; + } + } + } + }); + const w = /* @__PURE__ */ new Map(); + if (v.length > 0) { + const { data: T } = await o.from("pictures").select("id, image_url").in("id", v); + T == null || T.forEach((N) => w.set(N.id, N.image_url)); + } + const E = /* @__PURE__ */ new Set(), x = /* @__PURE__ */ new Map(); + (p || []).forEach((T) => { + const $ = (T.pictures || []).filter((V) => V.visible !== !1); + $.sort((V, j) => (V.position || 0) - (j.position || 0)); + const D = $[0]; + D && (x.set(T.id, D), E.add(D.parent_id || D.id)); + }); + let C = []; + E.size > 0 && (C = await aL(Array.from(E), o)); + const _ = (p || []).map((T) => { + let N = x.get(T.id); + if (!N) { + const B = T.settings || {}; + if (B && B.link) + N = { + id: T.id, + picture_id: T.id, + title: T.title, + description: T.description, + image_url: B.image_url || "https://picsum.photos/seed/" + T.id + "/600/400", + // Fallback or use settings image + thumbnail_url: B.thumbnail_url || null, + type: "page-external", + meta: { url: B.link }, + created_at: T.created_at, + user_id: T.user_id, + likes_count: 0, + comments: [{ count: 0 }], + visible: !0, + is_selected: !1, + position: 0 + }; + else + return null; + } + const $ = N.parent_id || N.id, D = C == null ? void 0 : C.find( + (B) => (B.id === $ || B.parent_id === $) && B.is_selected + ); + D && D.id !== N.id && (N = D); + const j = (T.pictures || []).filter((B) => B.visible !== !1).sort((B, W) => (B.position || 0) - (W.position || 0)); + return { + id: T.id, + title: T.title, + description: T.description, + created_at: T.created_at, + user_id: T.user_id, + pictures: j, + cover: N, + likes_count: j.reduce((B, W) => B + (W.likes_count || 0), 0), + comments_count: 0, + type: N.type + }; + }).filter((T) => T !== null), k = y.map((T) => { + let N = "https://picsum.photos/640"; + const $ = b.get(T.id); + if ($) { + const V = w.get($); + V && (N = V); + } + const D = { + id: T.id, + // Use page ID as picture ID in grid context? Or make a virtual one? + // Using page ID is risky if IDs collide, but UUIDs shouldn't. + image_url: N, + thumbnail_url: null, + type: "page-intern", + meta: { slug: T.slug }, + // Store slug in meta for easy access + description: null, + likes_count: 0, + visible: !0, + is_selected: !1, + position: 0, + created_at: T.created_at, + title: T.title + }; + return { + id: T.id, + title: T.title, + description: null, + // Could parse content? + created_at: T.created_at, + user_id: T.owner, + pictures: [D], + cover: D, + likes_count: 0, + comments_count: 0, + type: "page-intern" + }; + }), A = [..._, ...k]; + return A.sort((T, N) => new Date(N.created_at).getTime() - new Date(T.created_at).getTime()), A; +}, lL = (n, t = "latest") => n.map((e) => { + let s = e.cover; + if (e.pictures && e.pictures.length > 0) { + const r = e.pictures.filter((i) => i.visible !== !1); + r.length > 0 ? t === "latest" ? s = r.reduce((i, a) => { + const o = new Date(i.created_at || e.created_at).getTime(); + return new Date(a.created_at || e.created_at).getTime() > o ? a : i; + }) : s = [...r].sort((a, o) => (a.position || 0) - (o.position || 0))[0] : s = e.pictures[0]; + } + return s ? { + id: e.id, + picture_id: s.id, + title: e.title, + description: e.description, + image_url: s.image_url, + thumbnail_url: s.thumbnail_url, + type: s.type, + meta: s.meta, + created_at: e.created_at, + user_id: e.user_id, + likes_count: e.likes_count, + comments: [{ count: e.comments_count }], + responsive: s.responsive, + job: s.job + // author_profile must be populated externally + } : null; +}).filter((e) => e !== null), cL = (n) => n.map((t) => { + if (!t.cover) { + const e = t.pictures || [], s = e.filter((r) => r.visible !== !1).sort((r, i) => (r.position || 0) - (i.position || 0)); + return { + ...t, + cover: s[0] || e[0], + // fallback to first if none visible? + author_profile: t.author ? { + user_id: t.author.user_id, + username: t.author.username, + display_name: t.author.display_name, + avatar_url: t.author.avatar_url + } : void 0 + }; + } + return t; +}); +function C3(n, t) { + if (typeof n == "function") + return n(t); + n != null && (n.current = t); +} +function vl(...n) { + return (t) => { + let e = !1; + const s = n.map((r) => { + const i = C3(r, t); + return !e && typeof i == "function" && (e = !0), i; + }); + if (e) + return () => { + for (let r = 0; r < s.length; r++) { + const i = s[r]; + typeof i == "function" ? i() : C3(n[r], null); + } + }; + }; +} +function un(...n) { + return d.useCallback(vl(...n), n); +} +var uL = Symbol.for("react.lazy"), Dg = d[" use ".trim().toString()]; +function dL(n) { + return typeof n == "object" && n !== null && "then" in n; +} +function QS(n) { + return n != null && typeof n == "object" && "$$typeof" in n && n.$$typeof === uL && "_payload" in n && dL(n._payload); +} +// @__NO_SIDE_EFFECTS__ +function $x(n) { + const t = /* @__PURE__ */ hL(n), e = d.forwardRef((s, r) => { + let { children: i, ...a } = s; + QS(i) && typeof Dg == "function" && (i = Dg(i._payload)); + const o = d.Children.toArray(i), c = o.find(pL); + if (c) { + const u = c.props.children, f = o.map((p) => p === c ? d.Children.count(u) > 1 ? d.Children.only(null) : d.isValidElement(u) ? u.props.children : null : p); + return /* @__PURE__ */ h.jsx(t, { ...a, ref: r, children: d.isValidElement(u) ? d.cloneElement(u, void 0, f) : null }); + } + return /* @__PURE__ */ h.jsx(t, { ...a, ref: r, children: i }); + }); + return e.displayName = `${n}.Slot`, e; +} +var JS = /* @__PURE__ */ $x("Slot"); +// @__NO_SIDE_EFFECTS__ +function hL(n) { + const t = d.forwardRef((e, s) => { + let { children: r, ...i } = e; + if (QS(r) && typeof Dg == "function" && (r = Dg(r._payload)), d.isValidElement(r)) { + const a = gL(r), o = mL(i, r.props); + return r.type !== d.Fragment && (o.ref = s ? vl(s, a) : a), d.cloneElement(r, o); + } + return d.Children.count(r) > 1 ? d.Children.only(null) : null; + }); + return t.displayName = `${n}.SlotClone`, t; +} +var fL = Symbol("radix.slottable"); +function pL(n) { + return d.isValidElement(n) && typeof n.type == "function" && "__radixId" in n.type && n.type.__radixId === fL; +} +function mL(n, t) { + const e = { ...t }; + for (const s in t) { + const r = n[s], i = t[s]; + /^on[A-Z]/.test(s) ? r && i ? e[s] = (...o) => { + const c = i(...o); + return r(...o), c; + } : r && (e[s] = r) : s === "style" ? e[s] = { ...r, ...i } : s === "className" && (e[s] = [r, i].filter(Boolean).join(" ")); + } + return { ...n, ...e }; +} +function gL(n) { + var s, r; + let t = (s = Object.getOwnPropertyDescriptor(n.props, "ref")) == null ? void 0 : s.get, e = t && "isReactWarning" in t && t.isReactWarning; + return e ? n.ref : (t = (r = Object.getOwnPropertyDescriptor(n, "ref")) == null ? void 0 : r.get, e = t && "isReactWarning" in t && t.isReactWarning, e ? n.props.ref : n.props.ref || n.ref); +} +function eE(n) { + var t, e, s = ""; + if (typeof n == "string" || typeof n == "number") s += n; + else if (typeof n == "object") if (Array.isArray(n)) { + var r = n.length; + for (t = 0; t < r; t++) n[t] && (e = eE(n[t])) && (s && (s += " "), s += e); + } else for (e in n) n[e] && (s && (s += " "), s += e); + return s; +} +function tE() { + for (var n, t, e = 0, s = "", r = arguments.length; e < r; e++) (n = arguments[e]) && (t = eE(n)) && (s && (s += " "), s += t); + return s; +} +const _3 = (n) => typeof n == "boolean" ? `${n}` : n === 0 ? "0" : n, S3 = tE, Rx = (n, t) => (e) => { + var s; + if ((t == null ? void 0 : t.variants) == null) return S3(n, e == null ? void 0 : e.class, e == null ? void 0 : e.className); + const { variants: r, defaultVariants: i } = t, a = Object.keys(r).map((u) => { + const f = e == null ? void 0 : e[u], p = i == null ? void 0 : i[u]; + if (f === null) return null; + const g = _3(f) || _3(p); + return r[u][g]; + }), o = e && Object.entries(e).reduce((u, f) => { + let [p, g] = f; + return g === void 0 || (u[p] = g), u; + }, {}), c = t == null || (s = t.compoundVariants) === null || s === void 0 ? void 0 : s.reduce((u, f) => { + let { class: p, className: g, ...y } = f; + return Object.entries(y).every((v) => { + let [b, w] = v; + return Array.isArray(w) ? w.includes({ + ...i, + ...o + }[b]) : { + ...i, + ...o + }[b] === w; + }) ? [ + ...u, + p, + g + ] : u; + }, []); + return S3(n, a, c, e == null ? void 0 : e.class, e == null ? void 0 : e.className); +}, Ix = "-", yL = (n) => { + const t = bL(n), { + conflictingClassGroups: e, + conflictingClassGroupModifiers: s + } = n; + return { + getClassGroupId: (a) => { + const o = a.split(Ix); + return o[0] === "" && o.length !== 1 && o.shift(), nE(o, t) || vL(a); + }, + getConflictingClassGroupIds: (a, o) => { + const c = e[a] || []; + return o && s[a] ? [...c, ...s[a]] : c; + } + }; +}, nE = (n, t) => { + var a; + if (n.length === 0) + return t.classGroupId; + const e = n[0], s = t.nextPart.get(e), r = s ? nE(n.slice(1), s) : void 0; + if (r) + return r; + if (t.validators.length === 0) + return; + const i = n.join(Ix); + return (a = t.validators.find(({ + validator: o + }) => o(i))) == null ? void 0 : a.classGroupId; +}, E3 = /^\[(.+)\]$/, vL = (n) => { + if (E3.test(n)) { + const t = E3.exec(n)[1], e = t == null ? void 0 : t.substring(0, t.indexOf(":")); + if (e) + return "arbitrary.." + e; + } +}, bL = (n) => { + const { + theme: t, + prefix: e + } = n, s = { + nextPart: /* @__PURE__ */ new Map(), + validators: [] + }; + return xL(Object.entries(n.classGroups), e).forEach(([i, a]) => { + iw(a, s, i, t); + }), s; +}, iw = (n, t, e, s) => { + n.forEach((r) => { + if (typeof r == "string") { + const i = r === "" ? t : k3(t, r); + i.classGroupId = e; + return; + } + if (typeof r == "function") { + if (wL(r)) { + iw(r(s), t, e, s); + return; + } + t.validators.push({ + validator: r, + classGroupId: e + }); + return; + } + Object.entries(r).forEach(([i, a]) => { + iw(a, k3(t, i), e, s); + }); + }); +}, k3 = (n, t) => { + let e = n; + return t.split(Ix).forEach((s) => { + e.nextPart.has(s) || e.nextPart.set(s, { + nextPart: /* @__PURE__ */ new Map(), + validators: [] + }), e = e.nextPart.get(s); + }), e; +}, wL = (n) => n.isThemeGetter, xL = (n, t) => t ? n.map(([e, s]) => { + const r = s.map((i) => typeof i == "string" ? t + i : typeof i == "object" ? Object.fromEntries(Object.entries(i).map(([a, o]) => [t + a, o])) : i); + return [e, r]; +}) : n, CL = (n) => { + if (n < 1) + return { + get: () => { + }, + set: () => { + } + }; + let t = 0, e = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map(); + const r = (i, a) => { + e.set(i, a), t++, t > n && (t = 0, s = e, e = /* @__PURE__ */ new Map()); + }; + return { + get(i) { + let a = e.get(i); + if (a !== void 0) + return a; + if ((a = s.get(i)) !== void 0) + return r(i, a), a; + }, + set(i, a) { + e.has(i) ? e.set(i, a) : r(i, a); + } + }; +}, sE = "!", _L = (n) => { + const { + separator: t, + experimentalParseClassName: e + } = n, s = t.length === 1, r = t[0], i = t.length, a = (o) => { + const c = []; + let u = 0, f = 0, p; + for (let w = 0; w < o.length; w++) { + let E = o[w]; + if (u === 0) { + if (E === r && (s || o.slice(w, w + i) === t)) { + c.push(o.slice(f, w)), f = w + i; + continue; + } + if (E === "/") { + p = w; + continue; + } + } + E === "[" ? u++ : E === "]" && u--; + } + const g = c.length === 0 ? o : o.substring(f), y = g.startsWith(sE), v = y ? g.substring(1) : g, b = p && p > f ? p - f : void 0; + return { + modifiers: c, + hasImportantModifier: y, + baseClassName: v, + maybePostfixModifierPosition: b + }; + }; + return e ? (o) => e({ + className: o, + parseClassName: a + }) : a; +}, SL = (n) => { + if (n.length <= 1) + return n; + const t = []; + let e = []; + return n.forEach((s) => { + s[0] === "[" ? (t.push(...e.sort(), s), e = []) : e.push(s); + }), t.push(...e.sort()), t; +}, EL = (n) => ({ + cache: CL(n.cacheSize), + parseClassName: _L(n), + ...yL(n) +}), kL = /\s+/, TL = (n, t) => { + const { + parseClassName: e, + getClassGroupId: s, + getConflictingClassGroupIds: r + } = t, i = [], a = n.trim().split(kL); + let o = ""; + for (let c = a.length - 1; c >= 0; c -= 1) { + const u = a[c], { + modifiers: f, + hasImportantModifier: p, + baseClassName: g, + maybePostfixModifierPosition: y + } = e(u); + let v = !!y, b = s(v ? g.substring(0, y) : g); + if (!b) { + if (!v) { + o = u + (o.length > 0 ? " " + o : o); + continue; + } + if (b = s(g), !b) { + o = u + (o.length > 0 ? " " + o : o); + continue; + } + v = !1; + } + const w = SL(f).join(":"), E = p ? w + sE : w, x = E + b; + if (i.includes(x)) + continue; + i.push(x); + const C = r(b, v); + for (let _ = 0; _ < C.length; ++_) { + const k = C[_]; + i.push(E + k); + } + o = u + (o.length > 0 ? " " + o : o); + } + return o; +}; +function AL() { + let n = 0, t, e, s = ""; + for (; n < arguments.length; ) + (t = arguments[n++]) && (e = rE(t)) && (s && (s += " "), s += e); + return s; +} +const rE = (n) => { + if (typeof n == "string") + return n; + let t, e = ""; + for (let s = 0; s < n.length; s++) + n[s] && (t = rE(n[s])) && (e && (e += " "), e += t); + return e; +}; +function PL(n, ...t) { + let e, s, r, i = a; + function a(c) { + const u = t.reduce((f, p) => p(f), n()); + return e = EL(u), s = e.cache.get, r = e.cache.set, i = o, o(c); + } + function o(c) { + const u = s(c); + if (u) + return u; + const f = TL(c, e); + return r(c, f), f; + } + return function() { + return i(AL.apply(null, arguments)); + }; +} +const hn = (n) => { + const t = (e) => e[n] || []; + return t.isThemeGetter = !0, t; +}, iE = /^\[(?:([a-z-]+):)?(.+)\]$/i, NL = /^\d+\/\d+$/, $L = /* @__PURE__ */ new Set(["px", "full", "screen"]), RL = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/, IL = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/, OL = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/, ML = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/, DL = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/, aa = (n) => vu(n) || $L.has(n) || NL.test(n), ao = (n) => Zd(n, "length", zL), vu = (n) => !!n && !Number.isNaN(Number(n)), eb = (n) => Zd(n, "number", vu), bh = (n) => !!n && Number.isInteger(Number(n)), LL = (n) => n.endsWith("%") && vu(n.slice(0, -1)), mt = (n) => iE.test(n), oo = (n) => RL.test(n), jL = /* @__PURE__ */ new Set(["length", "size", "percentage"]), FL = (n) => Zd(n, jL, aE), VL = (n) => Zd(n, "position", aE), BL = /* @__PURE__ */ new Set(["image", "url"]), UL = (n) => Zd(n, BL, WL), qL = (n) => Zd(n, "", HL), wh = () => !0, Zd = (n, t, e) => { + const s = iE.exec(n); + return s ? s[1] ? typeof t == "string" ? s[1] === t : t.has(s[1]) : e(s[2]) : !1; +}, zL = (n) => ( + // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths. + // For example, `hsl(0 0% 0%)` would be classified as a length without this check. + // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough. + IL.test(n) && !OL.test(n) +), aE = () => !1, HL = (n) => ML.test(n), WL = (n) => DL.test(n), GL = () => { + const n = hn("colors"), t = hn("spacing"), e = hn("blur"), s = hn("brightness"), r = hn("borderColor"), i = hn("borderRadius"), a = hn("borderSpacing"), o = hn("borderWidth"), c = hn("contrast"), u = hn("grayscale"), f = hn("hueRotate"), p = hn("invert"), g = hn("gap"), y = hn("gradientColorStops"), v = hn("gradientColorStopPositions"), b = hn("inset"), w = hn("margin"), E = hn("opacity"), x = hn("padding"), C = hn("saturate"), _ = hn("scale"), k = hn("sepia"), A = hn("skew"), T = hn("space"), N = hn("translate"), $ = () => ["auto", "contain", "none"], D = () => ["auto", "hidden", "clip", "visible", "scroll"], V = () => ["auto", mt, t], j = () => [mt, t], B = () => ["", aa, ao], W = () => ["auto", vu, mt], J = () => ["bottom", "center", "left", "left-bottom", "left-top", "right", "right-bottom", "right-top", "top"], G = () => ["solid", "dashed", "dotted", "double", "none"], q = () => ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"], H = () => ["start", "end", "center", "between", "around", "evenly", "stretch"], L = () => ["", "0", mt], X = () => ["auto", "avoid", "all", "avoid-page", "page", "left", "right", "column"], te = () => [vu, mt]; + return { + cacheSize: 500, + separator: ":", + theme: { + colors: [wh], + spacing: [aa, ao], + blur: ["none", "", oo, mt], + brightness: te(), + borderColor: [n], + borderRadius: ["none", "", "full", oo, mt], + borderSpacing: j(), + borderWidth: B(), + contrast: te(), + grayscale: L(), + hueRotate: te(), + invert: L(), + gap: j(), + gradientColorStops: [n], + gradientColorStopPositions: [LL, ao], + inset: V(), + margin: V(), + opacity: te(), + padding: j(), + saturate: te(), + scale: te(), + sepia: L(), + skew: te(), + space: j(), + translate: j() + }, + classGroups: { + // Layout + /** + * Aspect Ratio + * @see https://tailwindcss.com/docs/aspect-ratio + */ + aspect: [{ + aspect: ["auto", "square", "video", mt] + }], + /** + * Container + * @see https://tailwindcss.com/docs/container + */ + container: ["container"], + /** + * Columns + * @see https://tailwindcss.com/docs/columns + */ + columns: [{ + columns: [oo] + }], + /** + * Break After + * @see https://tailwindcss.com/docs/break-after + */ + "break-after": [{ + "break-after": X() + }], + /** + * Break Before + * @see https://tailwindcss.com/docs/break-before + */ + "break-before": [{ + "break-before": X() + }], + /** + * Break Inside + * @see https://tailwindcss.com/docs/break-inside + */ + "break-inside": [{ + "break-inside": ["auto", "avoid", "avoid-page", "avoid-column"] + }], + /** + * Box Decoration Break + * @see https://tailwindcss.com/docs/box-decoration-break + */ + "box-decoration": [{ + "box-decoration": ["slice", "clone"] + }], + /** + * Box Sizing + * @see https://tailwindcss.com/docs/box-sizing + */ + box: [{ + box: ["border", "content"] + }], + /** + * Display + * @see https://tailwindcss.com/docs/display + */ + display: ["block", "inline-block", "inline", "flex", "inline-flex", "table", "inline-table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row-group", "table-row", "flow-root", "grid", "inline-grid", "contents", "list-item", "hidden"], + /** + * Floats + * @see https://tailwindcss.com/docs/float + */ + float: [{ + float: ["right", "left", "none", "start", "end"] + }], + /** + * Clear + * @see https://tailwindcss.com/docs/clear + */ + clear: [{ + clear: ["left", "right", "both", "none", "start", "end"] + }], + /** + * Isolation + * @see https://tailwindcss.com/docs/isolation + */ + isolation: ["isolate", "isolation-auto"], + /** + * Object Fit + * @see https://tailwindcss.com/docs/object-fit + */ + "object-fit": [{ + object: ["contain", "cover", "fill", "none", "scale-down"] + }], + /** + * Object Position + * @see https://tailwindcss.com/docs/object-position + */ + "object-position": [{ + object: [...J(), mt] + }], + /** + * Overflow + * @see https://tailwindcss.com/docs/overflow + */ + overflow: [{ + overflow: D() + }], + /** + * Overflow X + * @see https://tailwindcss.com/docs/overflow + */ + "overflow-x": [{ + "overflow-x": D() + }], + /** + * Overflow Y + * @see https://tailwindcss.com/docs/overflow + */ + "overflow-y": [{ + "overflow-y": D() + }], + /** + * Overscroll Behavior + * @see https://tailwindcss.com/docs/overscroll-behavior + */ + overscroll: [{ + overscroll: $() + }], + /** + * Overscroll Behavior X + * @see https://tailwindcss.com/docs/overscroll-behavior + */ + "overscroll-x": [{ + "overscroll-x": $() + }], + /** + * Overscroll Behavior Y + * @see https://tailwindcss.com/docs/overscroll-behavior + */ + "overscroll-y": [{ + "overscroll-y": $() + }], + /** + * Position + * @see https://tailwindcss.com/docs/position + */ + position: ["static", "fixed", "absolute", "relative", "sticky"], + /** + * Top / Right / Bottom / Left + * @see https://tailwindcss.com/docs/top-right-bottom-left + */ + inset: [{ + inset: [b] + }], + /** + * Right / Left + * @see https://tailwindcss.com/docs/top-right-bottom-left + */ + "inset-x": [{ + "inset-x": [b] + }], + /** + * Top / Bottom + * @see https://tailwindcss.com/docs/top-right-bottom-left + */ + "inset-y": [{ + "inset-y": [b] + }], + /** + * Start + * @see https://tailwindcss.com/docs/top-right-bottom-left + */ + start: [{ + start: [b] + }], + /** + * End + * @see https://tailwindcss.com/docs/top-right-bottom-left + */ + end: [{ + end: [b] + }], + /** + * Top + * @see https://tailwindcss.com/docs/top-right-bottom-left + */ + top: [{ + top: [b] + }], + /** + * Right + * @see https://tailwindcss.com/docs/top-right-bottom-left + */ + right: [{ + right: [b] + }], + /** + * Bottom + * @see https://tailwindcss.com/docs/top-right-bottom-left + */ + bottom: [{ + bottom: [b] + }], + /** + * Left + * @see https://tailwindcss.com/docs/top-right-bottom-left + */ + left: [{ + left: [b] + }], + /** + * Visibility + * @see https://tailwindcss.com/docs/visibility + */ + visibility: ["visible", "invisible", "collapse"], + /** + * Z-Index + * @see https://tailwindcss.com/docs/z-index + */ + z: [{ + z: ["auto", bh, mt] + }], + // Flexbox and Grid + /** + * Flex Basis + * @see https://tailwindcss.com/docs/flex-basis + */ + basis: [{ + basis: V() + }], + /** + * Flex Direction + * @see https://tailwindcss.com/docs/flex-direction + */ + "flex-direction": [{ + flex: ["row", "row-reverse", "col", "col-reverse"] + }], + /** + * Flex Wrap + * @see https://tailwindcss.com/docs/flex-wrap + */ + "flex-wrap": [{ + flex: ["wrap", "wrap-reverse", "nowrap"] + }], + /** + * Flex + * @see https://tailwindcss.com/docs/flex + */ + flex: [{ + flex: ["1", "auto", "initial", "none", mt] + }], + /** + * Flex Grow + * @see https://tailwindcss.com/docs/flex-grow + */ + grow: [{ + grow: L() + }], + /** + * Flex Shrink + * @see https://tailwindcss.com/docs/flex-shrink + */ + shrink: [{ + shrink: L() + }], + /** + * Order + * @see https://tailwindcss.com/docs/order + */ + order: [{ + order: ["first", "last", "none", bh, mt] + }], + /** + * Grid Template Columns + * @see https://tailwindcss.com/docs/grid-template-columns + */ + "grid-cols": [{ + "grid-cols": [wh] + }], + /** + * Grid Column Start / End + * @see https://tailwindcss.com/docs/grid-column + */ + "col-start-end": [{ + col: ["auto", { + span: ["full", bh, mt] + }, mt] + }], + /** + * Grid Column Start + * @see https://tailwindcss.com/docs/grid-column + */ + "col-start": [{ + "col-start": W() + }], + /** + * Grid Column End + * @see https://tailwindcss.com/docs/grid-column + */ + "col-end": [{ + "col-end": W() + }], + /** + * Grid Template Rows + * @see https://tailwindcss.com/docs/grid-template-rows + */ + "grid-rows": [{ + "grid-rows": [wh] + }], + /** + * Grid Row Start / End + * @see https://tailwindcss.com/docs/grid-row + */ + "row-start-end": [{ + row: ["auto", { + span: [bh, mt] + }, mt] + }], + /** + * Grid Row Start + * @see https://tailwindcss.com/docs/grid-row + */ + "row-start": [{ + "row-start": W() + }], + /** + * Grid Row End + * @see https://tailwindcss.com/docs/grid-row + */ + "row-end": [{ + "row-end": W() + }], + /** + * Grid Auto Flow + * @see https://tailwindcss.com/docs/grid-auto-flow + */ + "grid-flow": [{ + "grid-flow": ["row", "col", "dense", "row-dense", "col-dense"] + }], + /** + * Grid Auto Columns + * @see https://tailwindcss.com/docs/grid-auto-columns + */ + "auto-cols": [{ + "auto-cols": ["auto", "min", "max", "fr", mt] + }], + /** + * Grid Auto Rows + * @see https://tailwindcss.com/docs/grid-auto-rows + */ + "auto-rows": [{ + "auto-rows": ["auto", "min", "max", "fr", mt] + }], + /** + * Gap + * @see https://tailwindcss.com/docs/gap + */ + gap: [{ + gap: [g] + }], + /** + * Gap X + * @see https://tailwindcss.com/docs/gap + */ + "gap-x": [{ + "gap-x": [g] + }], + /** + * Gap Y + * @see https://tailwindcss.com/docs/gap + */ + "gap-y": [{ + "gap-y": [g] + }], + /** + * Justify Content + * @see https://tailwindcss.com/docs/justify-content + */ + "justify-content": [{ + justify: ["normal", ...H()] + }], + /** + * Justify Items + * @see https://tailwindcss.com/docs/justify-items + */ + "justify-items": [{ + "justify-items": ["start", "end", "center", "stretch"] + }], + /** + * Justify Self + * @see https://tailwindcss.com/docs/justify-self + */ + "justify-self": [{ + "justify-self": ["auto", "start", "end", "center", "stretch"] + }], + /** + * Align Content + * @see https://tailwindcss.com/docs/align-content + */ + "align-content": [{ + content: ["normal", ...H(), "baseline"] + }], + /** + * Align Items + * @see https://tailwindcss.com/docs/align-items + */ + "align-items": [{ + items: ["start", "end", "center", "baseline", "stretch"] + }], + /** + * Align Self + * @see https://tailwindcss.com/docs/align-self + */ + "align-self": [{ + self: ["auto", "start", "end", "center", "stretch", "baseline"] + }], + /** + * Place Content + * @see https://tailwindcss.com/docs/place-content + */ + "place-content": [{ + "place-content": [...H(), "baseline"] + }], + /** + * Place Items + * @see https://tailwindcss.com/docs/place-items + */ + "place-items": [{ + "place-items": ["start", "end", "center", "baseline", "stretch"] + }], + /** + * Place Self + * @see https://tailwindcss.com/docs/place-self + */ + "place-self": [{ + "place-self": ["auto", "start", "end", "center", "stretch"] + }], + // Spacing + /** + * Padding + * @see https://tailwindcss.com/docs/padding + */ + p: [{ + p: [x] + }], + /** + * Padding X + * @see https://tailwindcss.com/docs/padding + */ + px: [{ + px: [x] + }], + /** + * Padding Y + * @see https://tailwindcss.com/docs/padding + */ + py: [{ + py: [x] + }], + /** + * Padding Start + * @see https://tailwindcss.com/docs/padding + */ + ps: [{ + ps: [x] + }], + /** + * Padding End + * @see https://tailwindcss.com/docs/padding + */ + pe: [{ + pe: [x] + }], + /** + * Padding Top + * @see https://tailwindcss.com/docs/padding + */ + pt: [{ + pt: [x] + }], + /** + * Padding Right + * @see https://tailwindcss.com/docs/padding + */ + pr: [{ + pr: [x] + }], + /** + * Padding Bottom + * @see https://tailwindcss.com/docs/padding + */ + pb: [{ + pb: [x] + }], + /** + * Padding Left + * @see https://tailwindcss.com/docs/padding + */ + pl: [{ + pl: [x] + }], + /** + * Margin + * @see https://tailwindcss.com/docs/margin + */ + m: [{ + m: [w] + }], + /** + * Margin X + * @see https://tailwindcss.com/docs/margin + */ + mx: [{ + mx: [w] + }], + /** + * Margin Y + * @see https://tailwindcss.com/docs/margin + */ + my: [{ + my: [w] + }], + /** + * Margin Start + * @see https://tailwindcss.com/docs/margin + */ + ms: [{ + ms: [w] + }], + /** + * Margin End + * @see https://tailwindcss.com/docs/margin + */ + me: [{ + me: [w] + }], + /** + * Margin Top + * @see https://tailwindcss.com/docs/margin + */ + mt: [{ + mt: [w] + }], + /** + * Margin Right + * @see https://tailwindcss.com/docs/margin + */ + mr: [{ + mr: [w] + }], + /** + * Margin Bottom + * @see https://tailwindcss.com/docs/margin + */ + mb: [{ + mb: [w] + }], + /** + * Margin Left + * @see https://tailwindcss.com/docs/margin + */ + ml: [{ + ml: [w] + }], + /** + * Space Between X + * @see https://tailwindcss.com/docs/space + */ + "space-x": [{ + "space-x": [T] + }], + /** + * Space Between X Reverse + * @see https://tailwindcss.com/docs/space + */ + "space-x-reverse": ["space-x-reverse"], + /** + * Space Between Y + * @see https://tailwindcss.com/docs/space + */ + "space-y": [{ + "space-y": [T] + }], + /** + * Space Between Y Reverse + * @see https://tailwindcss.com/docs/space + */ + "space-y-reverse": ["space-y-reverse"], + // Sizing + /** + * Width + * @see https://tailwindcss.com/docs/width + */ + w: [{ + w: ["auto", "min", "max", "fit", "svw", "lvw", "dvw", mt, t] + }], + /** + * Min-Width + * @see https://tailwindcss.com/docs/min-width + */ + "min-w": [{ + "min-w": [mt, t, "min", "max", "fit"] + }], + /** + * Max-Width + * @see https://tailwindcss.com/docs/max-width + */ + "max-w": [{ + "max-w": [mt, t, "none", "full", "min", "max", "fit", "prose", { + screen: [oo] + }, oo] + }], + /** + * Height + * @see https://tailwindcss.com/docs/height + */ + h: [{ + h: [mt, t, "auto", "min", "max", "fit", "svh", "lvh", "dvh"] + }], + /** + * Min-Height + * @see https://tailwindcss.com/docs/min-height + */ + "min-h": [{ + "min-h": [mt, t, "min", "max", "fit", "svh", "lvh", "dvh"] + }], + /** + * Max-Height + * @see https://tailwindcss.com/docs/max-height + */ + "max-h": [{ + "max-h": [mt, t, "min", "max", "fit", "svh", "lvh", "dvh"] + }], + /** + * Size + * @see https://tailwindcss.com/docs/size + */ + size: [{ + size: [mt, t, "auto", "min", "max", "fit"] + }], + // Typography + /** + * Font Size + * @see https://tailwindcss.com/docs/font-size + */ + "font-size": [{ + text: ["base", oo, ao] + }], + /** + * Font Smoothing + * @see https://tailwindcss.com/docs/font-smoothing + */ + "font-smoothing": ["antialiased", "subpixel-antialiased"], + /** + * Font Style + * @see https://tailwindcss.com/docs/font-style + */ + "font-style": ["italic", "not-italic"], + /** + * Font Weight + * @see https://tailwindcss.com/docs/font-weight + */ + "font-weight": [{ + font: ["thin", "extralight", "light", "normal", "medium", "semibold", "bold", "extrabold", "black", eb] + }], + /** + * Font Family + * @see https://tailwindcss.com/docs/font-family + */ + "font-family": [{ + font: [wh] + }], + /** + * Font Variant Numeric + * @see https://tailwindcss.com/docs/font-variant-numeric + */ + "fvn-normal": ["normal-nums"], + /** + * Font Variant Numeric + * @see https://tailwindcss.com/docs/font-variant-numeric + */ + "fvn-ordinal": ["ordinal"], + /** + * Font Variant Numeric + * @see https://tailwindcss.com/docs/font-variant-numeric + */ + "fvn-slashed-zero": ["slashed-zero"], + /** + * Font Variant Numeric + * @see https://tailwindcss.com/docs/font-variant-numeric + */ + "fvn-figure": ["lining-nums", "oldstyle-nums"], + /** + * Font Variant Numeric + * @see https://tailwindcss.com/docs/font-variant-numeric + */ + "fvn-spacing": ["proportional-nums", "tabular-nums"], + /** + * Font Variant Numeric + * @see https://tailwindcss.com/docs/font-variant-numeric + */ + "fvn-fraction": ["diagonal-fractions", "stacked-fractions"], + /** + * Letter Spacing + * @see https://tailwindcss.com/docs/letter-spacing + */ + tracking: [{ + tracking: ["tighter", "tight", "normal", "wide", "wider", "widest", mt] + }], + /** + * Line Clamp + * @see https://tailwindcss.com/docs/line-clamp + */ + "line-clamp": [{ + "line-clamp": ["none", vu, eb] + }], + /** + * Line Height + * @see https://tailwindcss.com/docs/line-height + */ + leading: [{ + leading: ["none", "tight", "snug", "normal", "relaxed", "loose", aa, mt] + }], + /** + * List Style Image + * @see https://tailwindcss.com/docs/list-style-image + */ + "list-image": [{ + "list-image": ["none", mt] + }], + /** + * List Style Type + * @see https://tailwindcss.com/docs/list-style-type + */ + "list-style-type": [{ + list: ["none", "disc", "decimal", mt] + }], + /** + * List Style Position + * @see https://tailwindcss.com/docs/list-style-position + */ + "list-style-position": [{ + list: ["inside", "outside"] + }], + /** + * Placeholder Color + * @deprecated since Tailwind CSS v3.0.0 + * @see https://tailwindcss.com/docs/placeholder-color + */ + "placeholder-color": [{ + placeholder: [n] + }], + /** + * Placeholder Opacity + * @see https://tailwindcss.com/docs/placeholder-opacity + */ + "placeholder-opacity": [{ + "placeholder-opacity": [E] + }], + /** + * Text Alignment + * @see https://tailwindcss.com/docs/text-align + */ + "text-alignment": [{ + text: ["left", "center", "right", "justify", "start", "end"] + }], + /** + * Text Color + * @see https://tailwindcss.com/docs/text-color + */ + "text-color": [{ + text: [n] + }], + /** + * Text Opacity + * @see https://tailwindcss.com/docs/text-opacity + */ + "text-opacity": [{ + "text-opacity": [E] + }], + /** + * Text Decoration + * @see https://tailwindcss.com/docs/text-decoration + */ + "text-decoration": ["underline", "overline", "line-through", "no-underline"], + /** + * Text Decoration Style + * @see https://tailwindcss.com/docs/text-decoration-style + */ + "text-decoration-style": [{ + decoration: [...G(), "wavy"] + }], + /** + * Text Decoration Thickness + * @see https://tailwindcss.com/docs/text-decoration-thickness + */ + "text-decoration-thickness": [{ + decoration: ["auto", "from-font", aa, ao] + }], + /** + * Text Underline Offset + * @see https://tailwindcss.com/docs/text-underline-offset + */ + "underline-offset": [{ + "underline-offset": ["auto", aa, mt] + }], + /** + * Text Decoration Color + * @see https://tailwindcss.com/docs/text-decoration-color + */ + "text-decoration-color": [{ + decoration: [n] + }], + /** + * Text Transform + * @see https://tailwindcss.com/docs/text-transform + */ + "text-transform": ["uppercase", "lowercase", "capitalize", "normal-case"], + /** + * Text Overflow + * @see https://tailwindcss.com/docs/text-overflow + */ + "text-overflow": ["truncate", "text-ellipsis", "text-clip"], + /** + * Text Wrap + * @see https://tailwindcss.com/docs/text-wrap + */ + "text-wrap": [{ + text: ["wrap", "nowrap", "balance", "pretty"] + }], + /** + * Text Indent + * @see https://tailwindcss.com/docs/text-indent + */ + indent: [{ + indent: j() + }], + /** + * Vertical Alignment + * @see https://tailwindcss.com/docs/vertical-align + */ + "vertical-align": [{ + align: ["baseline", "top", "middle", "bottom", "text-top", "text-bottom", "sub", "super", mt] + }], + /** + * Whitespace + * @see https://tailwindcss.com/docs/whitespace + */ + whitespace: [{ + whitespace: ["normal", "nowrap", "pre", "pre-line", "pre-wrap", "break-spaces"] + }], + /** + * Word Break + * @see https://tailwindcss.com/docs/word-break + */ + break: [{ + break: ["normal", "words", "all", "keep"] + }], + /** + * Hyphens + * @see https://tailwindcss.com/docs/hyphens + */ + hyphens: [{ + hyphens: ["none", "manual", "auto"] + }], + /** + * Content + * @see https://tailwindcss.com/docs/content + */ + content: [{ + content: ["none", mt] + }], + // Backgrounds + /** + * Background Attachment + * @see https://tailwindcss.com/docs/background-attachment + */ + "bg-attachment": [{ + bg: ["fixed", "local", "scroll"] + }], + /** + * Background Clip + * @see https://tailwindcss.com/docs/background-clip + */ + "bg-clip": [{ + "bg-clip": ["border", "padding", "content", "text"] + }], + /** + * Background Opacity + * @deprecated since Tailwind CSS v3.0.0 + * @see https://tailwindcss.com/docs/background-opacity + */ + "bg-opacity": [{ + "bg-opacity": [E] + }], + /** + * Background Origin + * @see https://tailwindcss.com/docs/background-origin + */ + "bg-origin": [{ + "bg-origin": ["border", "padding", "content"] + }], + /** + * Background Position + * @see https://tailwindcss.com/docs/background-position + */ + "bg-position": [{ + bg: [...J(), VL] + }], + /** + * Background Repeat + * @see https://tailwindcss.com/docs/background-repeat + */ + "bg-repeat": [{ + bg: ["no-repeat", { + repeat: ["", "x", "y", "round", "space"] + }] + }], + /** + * Background Size + * @see https://tailwindcss.com/docs/background-size + */ + "bg-size": [{ + bg: ["auto", "cover", "contain", FL] + }], + /** + * Background Image + * @see https://tailwindcss.com/docs/background-image + */ + "bg-image": [{ + bg: ["none", { + "gradient-to": ["t", "tr", "r", "br", "b", "bl", "l", "tl"] + }, UL] + }], + /** + * Background Color + * @see https://tailwindcss.com/docs/background-color + */ + "bg-color": [{ + bg: [n] + }], + /** + * Gradient Color Stops From Position + * @see https://tailwindcss.com/docs/gradient-color-stops + */ + "gradient-from-pos": [{ + from: [v] + }], + /** + * Gradient Color Stops Via Position + * @see https://tailwindcss.com/docs/gradient-color-stops + */ + "gradient-via-pos": [{ + via: [v] + }], + /** + * Gradient Color Stops To Position + * @see https://tailwindcss.com/docs/gradient-color-stops + */ + "gradient-to-pos": [{ + to: [v] + }], + /** + * Gradient Color Stops From + * @see https://tailwindcss.com/docs/gradient-color-stops + */ + "gradient-from": [{ + from: [y] + }], + /** + * Gradient Color Stops Via + * @see https://tailwindcss.com/docs/gradient-color-stops + */ + "gradient-via": [{ + via: [y] + }], + /** + * Gradient Color Stops To + * @see https://tailwindcss.com/docs/gradient-color-stops + */ + "gradient-to": [{ + to: [y] + }], + // Borders + /** + * Border Radius + * @see https://tailwindcss.com/docs/border-radius + */ + rounded: [{ + rounded: [i] + }], + /** + * Border Radius Start + * @see https://tailwindcss.com/docs/border-radius + */ + "rounded-s": [{ + "rounded-s": [i] + }], + /** + * Border Radius End + * @see https://tailwindcss.com/docs/border-radius + */ + "rounded-e": [{ + "rounded-e": [i] + }], + /** + * Border Radius Top + * @see https://tailwindcss.com/docs/border-radius + */ + "rounded-t": [{ + "rounded-t": [i] + }], + /** + * Border Radius Right + * @see https://tailwindcss.com/docs/border-radius + */ + "rounded-r": [{ + "rounded-r": [i] + }], + /** + * Border Radius Bottom + * @see https://tailwindcss.com/docs/border-radius + */ + "rounded-b": [{ + "rounded-b": [i] + }], + /** + * Border Radius Left + * @see https://tailwindcss.com/docs/border-radius + */ + "rounded-l": [{ + "rounded-l": [i] + }], + /** + * Border Radius Start Start + * @see https://tailwindcss.com/docs/border-radius + */ + "rounded-ss": [{ + "rounded-ss": [i] + }], + /** + * Border Radius Start End + * @see https://tailwindcss.com/docs/border-radius + */ + "rounded-se": [{ + "rounded-se": [i] + }], + /** + * Border Radius End End + * @see https://tailwindcss.com/docs/border-radius + */ + "rounded-ee": [{ + "rounded-ee": [i] + }], + /** + * Border Radius End Start + * @see https://tailwindcss.com/docs/border-radius + */ + "rounded-es": [{ + "rounded-es": [i] + }], + /** + * Border Radius Top Left + * @see https://tailwindcss.com/docs/border-radius + */ + "rounded-tl": [{ + "rounded-tl": [i] + }], + /** + * Border Radius Top Right + * @see https://tailwindcss.com/docs/border-radius + */ + "rounded-tr": [{ + "rounded-tr": [i] + }], + /** + * Border Radius Bottom Right + * @see https://tailwindcss.com/docs/border-radius + */ + "rounded-br": [{ + "rounded-br": [i] + }], + /** + * Border Radius Bottom Left + * @see https://tailwindcss.com/docs/border-radius + */ + "rounded-bl": [{ + "rounded-bl": [i] + }], + /** + * Border Width + * @see https://tailwindcss.com/docs/border-width + */ + "border-w": [{ + border: [o] + }], + /** + * Border Width X + * @see https://tailwindcss.com/docs/border-width + */ + "border-w-x": [{ + "border-x": [o] + }], + /** + * Border Width Y + * @see https://tailwindcss.com/docs/border-width + */ + "border-w-y": [{ + "border-y": [o] + }], + /** + * Border Width Start + * @see https://tailwindcss.com/docs/border-width + */ + "border-w-s": [{ + "border-s": [o] + }], + /** + * Border Width End + * @see https://tailwindcss.com/docs/border-width + */ + "border-w-e": [{ + "border-e": [o] + }], + /** + * Border Width Top + * @see https://tailwindcss.com/docs/border-width + */ + "border-w-t": [{ + "border-t": [o] + }], + /** + * Border Width Right + * @see https://tailwindcss.com/docs/border-width + */ + "border-w-r": [{ + "border-r": [o] + }], + /** + * Border Width Bottom + * @see https://tailwindcss.com/docs/border-width + */ + "border-w-b": [{ + "border-b": [o] + }], + /** + * Border Width Left + * @see https://tailwindcss.com/docs/border-width + */ + "border-w-l": [{ + "border-l": [o] + }], + /** + * Border Opacity + * @see https://tailwindcss.com/docs/border-opacity + */ + "border-opacity": [{ + "border-opacity": [E] + }], + /** + * Border Style + * @see https://tailwindcss.com/docs/border-style + */ + "border-style": [{ + border: [...G(), "hidden"] + }], + /** + * Divide Width X + * @see https://tailwindcss.com/docs/divide-width + */ + "divide-x": [{ + "divide-x": [o] + }], + /** + * Divide Width X Reverse + * @see https://tailwindcss.com/docs/divide-width + */ + "divide-x-reverse": ["divide-x-reverse"], + /** + * Divide Width Y + * @see https://tailwindcss.com/docs/divide-width + */ + "divide-y": [{ + "divide-y": [o] + }], + /** + * Divide Width Y Reverse + * @see https://tailwindcss.com/docs/divide-width + */ + "divide-y-reverse": ["divide-y-reverse"], + /** + * Divide Opacity + * @see https://tailwindcss.com/docs/divide-opacity + */ + "divide-opacity": [{ + "divide-opacity": [E] + }], + /** + * Divide Style + * @see https://tailwindcss.com/docs/divide-style + */ + "divide-style": [{ + divide: G() + }], + /** + * Border Color + * @see https://tailwindcss.com/docs/border-color + */ + "border-color": [{ + border: [r] + }], + /** + * Border Color X + * @see https://tailwindcss.com/docs/border-color + */ + "border-color-x": [{ + "border-x": [r] + }], + /** + * Border Color Y + * @see https://tailwindcss.com/docs/border-color + */ + "border-color-y": [{ + "border-y": [r] + }], + /** + * Border Color S + * @see https://tailwindcss.com/docs/border-color + */ + "border-color-s": [{ + "border-s": [r] + }], + /** + * Border Color E + * @see https://tailwindcss.com/docs/border-color + */ + "border-color-e": [{ + "border-e": [r] + }], + /** + * Border Color Top + * @see https://tailwindcss.com/docs/border-color + */ + "border-color-t": [{ + "border-t": [r] + }], + /** + * Border Color Right + * @see https://tailwindcss.com/docs/border-color + */ + "border-color-r": [{ + "border-r": [r] + }], + /** + * Border Color Bottom + * @see https://tailwindcss.com/docs/border-color + */ + "border-color-b": [{ + "border-b": [r] + }], + /** + * Border Color Left + * @see https://tailwindcss.com/docs/border-color + */ + "border-color-l": [{ + "border-l": [r] + }], + /** + * Divide Color + * @see https://tailwindcss.com/docs/divide-color + */ + "divide-color": [{ + divide: [r] + }], + /** + * Outline Style + * @see https://tailwindcss.com/docs/outline-style + */ + "outline-style": [{ + outline: ["", ...G()] + }], + /** + * Outline Offset + * @see https://tailwindcss.com/docs/outline-offset + */ + "outline-offset": [{ + "outline-offset": [aa, mt] + }], + /** + * Outline Width + * @see https://tailwindcss.com/docs/outline-width + */ + "outline-w": [{ + outline: [aa, ao] + }], + /** + * Outline Color + * @see https://tailwindcss.com/docs/outline-color + */ + "outline-color": [{ + outline: [n] + }], + /** + * Ring Width + * @see https://tailwindcss.com/docs/ring-width + */ + "ring-w": [{ + ring: B() + }], + /** + * Ring Width Inset + * @see https://tailwindcss.com/docs/ring-width + */ + "ring-w-inset": ["ring-inset"], + /** + * Ring Color + * @see https://tailwindcss.com/docs/ring-color + */ + "ring-color": [{ + ring: [n] + }], + /** + * Ring Opacity + * @see https://tailwindcss.com/docs/ring-opacity + */ + "ring-opacity": [{ + "ring-opacity": [E] + }], + /** + * Ring Offset Width + * @see https://tailwindcss.com/docs/ring-offset-width + */ + "ring-offset-w": [{ + "ring-offset": [aa, ao] + }], + /** + * Ring Offset Color + * @see https://tailwindcss.com/docs/ring-offset-color + */ + "ring-offset-color": [{ + "ring-offset": [n] + }], + // Effects + /** + * Box Shadow + * @see https://tailwindcss.com/docs/box-shadow + */ + shadow: [{ + shadow: ["", "inner", "none", oo, qL] + }], + /** + * Box Shadow Color + * @see https://tailwindcss.com/docs/box-shadow-color + */ + "shadow-color": [{ + shadow: [wh] + }], + /** + * Opacity + * @see https://tailwindcss.com/docs/opacity + */ + opacity: [{ + opacity: [E] + }], + /** + * Mix Blend Mode + * @see https://tailwindcss.com/docs/mix-blend-mode + */ + "mix-blend": [{ + "mix-blend": [...q(), "plus-lighter", "plus-darker"] + }], + /** + * Background Blend Mode + * @see https://tailwindcss.com/docs/background-blend-mode + */ + "bg-blend": [{ + "bg-blend": q() + }], + // Filters + /** + * Filter + * @deprecated since Tailwind CSS v3.0.0 + * @see https://tailwindcss.com/docs/filter + */ + filter: [{ + filter: ["", "none"] + }], + /** + * Blur + * @see https://tailwindcss.com/docs/blur + */ + blur: [{ + blur: [e] + }], + /** + * Brightness + * @see https://tailwindcss.com/docs/brightness + */ + brightness: [{ + brightness: [s] + }], + /** + * Contrast + * @see https://tailwindcss.com/docs/contrast + */ + contrast: [{ + contrast: [c] + }], + /** + * Drop Shadow + * @see https://tailwindcss.com/docs/drop-shadow + */ + "drop-shadow": [{ + "drop-shadow": ["", "none", oo, mt] + }], + /** + * Grayscale + * @see https://tailwindcss.com/docs/grayscale + */ + grayscale: [{ + grayscale: [u] + }], + /** + * Hue Rotate + * @see https://tailwindcss.com/docs/hue-rotate + */ + "hue-rotate": [{ + "hue-rotate": [f] + }], + /** + * Invert + * @see https://tailwindcss.com/docs/invert + */ + invert: [{ + invert: [p] + }], + /** + * Saturate + * @see https://tailwindcss.com/docs/saturate + */ + saturate: [{ + saturate: [C] + }], + /** + * Sepia + * @see https://tailwindcss.com/docs/sepia + */ + sepia: [{ + sepia: [k] + }], + /** + * Backdrop Filter + * @deprecated since Tailwind CSS v3.0.0 + * @see https://tailwindcss.com/docs/backdrop-filter + */ + "backdrop-filter": [{ + "backdrop-filter": ["", "none"] + }], + /** + * Backdrop Blur + * @see https://tailwindcss.com/docs/backdrop-blur + */ + "backdrop-blur": [{ + "backdrop-blur": [e] + }], + /** + * Backdrop Brightness + * @see https://tailwindcss.com/docs/backdrop-brightness + */ + "backdrop-brightness": [{ + "backdrop-brightness": [s] + }], + /** + * Backdrop Contrast + * @see https://tailwindcss.com/docs/backdrop-contrast + */ + "backdrop-contrast": [{ + "backdrop-contrast": [c] + }], + /** + * Backdrop Grayscale + * @see https://tailwindcss.com/docs/backdrop-grayscale + */ + "backdrop-grayscale": [{ + "backdrop-grayscale": [u] + }], + /** + * Backdrop Hue Rotate + * @see https://tailwindcss.com/docs/backdrop-hue-rotate + */ + "backdrop-hue-rotate": [{ + "backdrop-hue-rotate": [f] + }], + /** + * Backdrop Invert + * @see https://tailwindcss.com/docs/backdrop-invert + */ + "backdrop-invert": [{ + "backdrop-invert": [p] + }], + /** + * Backdrop Opacity + * @see https://tailwindcss.com/docs/backdrop-opacity + */ + "backdrop-opacity": [{ + "backdrop-opacity": [E] + }], + /** + * Backdrop Saturate + * @see https://tailwindcss.com/docs/backdrop-saturate + */ + "backdrop-saturate": [{ + "backdrop-saturate": [C] + }], + /** + * Backdrop Sepia + * @see https://tailwindcss.com/docs/backdrop-sepia + */ + "backdrop-sepia": [{ + "backdrop-sepia": [k] + }], + // Tables + /** + * Border Collapse + * @see https://tailwindcss.com/docs/border-collapse + */ + "border-collapse": [{ + border: ["collapse", "separate"] + }], + /** + * Border Spacing + * @see https://tailwindcss.com/docs/border-spacing + */ + "border-spacing": [{ + "border-spacing": [a] + }], + /** + * Border Spacing X + * @see https://tailwindcss.com/docs/border-spacing + */ + "border-spacing-x": [{ + "border-spacing-x": [a] + }], + /** + * Border Spacing Y + * @see https://tailwindcss.com/docs/border-spacing + */ + "border-spacing-y": [{ + "border-spacing-y": [a] + }], + /** + * Table Layout + * @see https://tailwindcss.com/docs/table-layout + */ + "table-layout": [{ + table: ["auto", "fixed"] + }], + /** + * Caption Side + * @see https://tailwindcss.com/docs/caption-side + */ + caption: [{ + caption: ["top", "bottom"] + }], + // Transitions and Animation + /** + * Tranisition Property + * @see https://tailwindcss.com/docs/transition-property + */ + transition: [{ + transition: ["none", "all", "", "colors", "opacity", "shadow", "transform", mt] + }], + /** + * Transition Duration + * @see https://tailwindcss.com/docs/transition-duration + */ + duration: [{ + duration: te() + }], + /** + * Transition Timing Function + * @see https://tailwindcss.com/docs/transition-timing-function + */ + ease: [{ + ease: ["linear", "in", "out", "in-out", mt] + }], + /** + * Transition Delay + * @see https://tailwindcss.com/docs/transition-delay + */ + delay: [{ + delay: te() + }], + /** + * Animation + * @see https://tailwindcss.com/docs/animation + */ + animate: [{ + animate: ["none", "spin", "ping", "pulse", "bounce", mt] + }], + // Transforms + /** + * Transform + * @see https://tailwindcss.com/docs/transform + */ + transform: [{ + transform: ["", "gpu", "none"] + }], + /** + * Scale + * @see https://tailwindcss.com/docs/scale + */ + scale: [{ + scale: [_] + }], + /** + * Scale X + * @see https://tailwindcss.com/docs/scale + */ + "scale-x": [{ + "scale-x": [_] + }], + /** + * Scale Y + * @see https://tailwindcss.com/docs/scale + */ + "scale-y": [{ + "scale-y": [_] + }], + /** + * Rotate + * @see https://tailwindcss.com/docs/rotate + */ + rotate: [{ + rotate: [bh, mt] + }], + /** + * Translate X + * @see https://tailwindcss.com/docs/translate + */ + "translate-x": [{ + "translate-x": [N] + }], + /** + * Translate Y + * @see https://tailwindcss.com/docs/translate + */ + "translate-y": [{ + "translate-y": [N] + }], + /** + * Skew X + * @see https://tailwindcss.com/docs/skew + */ + "skew-x": [{ + "skew-x": [A] + }], + /** + * Skew Y + * @see https://tailwindcss.com/docs/skew + */ + "skew-y": [{ + "skew-y": [A] + }], + /** + * Transform Origin + * @see https://tailwindcss.com/docs/transform-origin + */ + "transform-origin": [{ + origin: ["center", "top", "top-right", "right", "bottom-right", "bottom", "bottom-left", "left", "top-left", mt] + }], + // Interactivity + /** + * Accent Color + * @see https://tailwindcss.com/docs/accent-color + */ + accent: [{ + accent: ["auto", n] + }], + /** + * Appearance + * @see https://tailwindcss.com/docs/appearance + */ + appearance: [{ + appearance: ["none", "auto"] + }], + /** + * Cursor + * @see https://tailwindcss.com/docs/cursor + */ + cursor: [{ + cursor: ["auto", "default", "pointer", "wait", "text", "move", "help", "not-allowed", "none", "context-menu", "progress", "cell", "crosshair", "vertical-text", "alias", "copy", "no-drop", "grab", "grabbing", "all-scroll", "col-resize", "row-resize", "n-resize", "e-resize", "s-resize", "w-resize", "ne-resize", "nw-resize", "se-resize", "sw-resize", "ew-resize", "ns-resize", "nesw-resize", "nwse-resize", "zoom-in", "zoom-out", mt] + }], + /** + * Caret Color + * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities + */ + "caret-color": [{ + caret: [n] + }], + /** + * Pointer Events + * @see https://tailwindcss.com/docs/pointer-events + */ + "pointer-events": [{ + "pointer-events": ["none", "auto"] + }], + /** + * Resize + * @see https://tailwindcss.com/docs/resize + */ + resize: [{ + resize: ["none", "y", "x", ""] + }], + /** + * Scroll Behavior + * @see https://tailwindcss.com/docs/scroll-behavior + */ + "scroll-behavior": [{ + scroll: ["auto", "smooth"] + }], + /** + * Scroll Margin + * @see https://tailwindcss.com/docs/scroll-margin + */ + "scroll-m": [{ + "scroll-m": j() + }], + /** + * Scroll Margin X + * @see https://tailwindcss.com/docs/scroll-margin + */ + "scroll-mx": [{ + "scroll-mx": j() + }], + /** + * Scroll Margin Y + * @see https://tailwindcss.com/docs/scroll-margin + */ + "scroll-my": [{ + "scroll-my": j() + }], + /** + * Scroll Margin Start + * @see https://tailwindcss.com/docs/scroll-margin + */ + "scroll-ms": [{ + "scroll-ms": j() + }], + /** + * Scroll Margin End + * @see https://tailwindcss.com/docs/scroll-margin + */ + "scroll-me": [{ + "scroll-me": j() + }], + /** + * Scroll Margin Top + * @see https://tailwindcss.com/docs/scroll-margin + */ + "scroll-mt": [{ + "scroll-mt": j() + }], + /** + * Scroll Margin Right + * @see https://tailwindcss.com/docs/scroll-margin + */ + "scroll-mr": [{ + "scroll-mr": j() + }], + /** + * Scroll Margin Bottom + * @see https://tailwindcss.com/docs/scroll-margin + */ + "scroll-mb": [{ + "scroll-mb": j() + }], + /** + * Scroll Margin Left + * @see https://tailwindcss.com/docs/scroll-margin + */ + "scroll-ml": [{ + "scroll-ml": j() + }], + /** + * Scroll Padding + * @see https://tailwindcss.com/docs/scroll-padding + */ + "scroll-p": [{ + "scroll-p": j() + }], + /** + * Scroll Padding X + * @see https://tailwindcss.com/docs/scroll-padding + */ + "scroll-px": [{ + "scroll-px": j() + }], + /** + * Scroll Padding Y + * @see https://tailwindcss.com/docs/scroll-padding + */ + "scroll-py": [{ + "scroll-py": j() + }], + /** + * Scroll Padding Start + * @see https://tailwindcss.com/docs/scroll-padding + */ + "scroll-ps": [{ + "scroll-ps": j() + }], + /** + * Scroll Padding End + * @see https://tailwindcss.com/docs/scroll-padding + */ + "scroll-pe": [{ + "scroll-pe": j() + }], + /** + * Scroll Padding Top + * @see https://tailwindcss.com/docs/scroll-padding + */ + "scroll-pt": [{ + "scroll-pt": j() + }], + /** + * Scroll Padding Right + * @see https://tailwindcss.com/docs/scroll-padding + */ + "scroll-pr": [{ + "scroll-pr": j() + }], + /** + * Scroll Padding Bottom + * @see https://tailwindcss.com/docs/scroll-padding + */ + "scroll-pb": [{ + "scroll-pb": j() + }], + /** + * Scroll Padding Left + * @see https://tailwindcss.com/docs/scroll-padding + */ + "scroll-pl": [{ + "scroll-pl": j() + }], + /** + * Scroll Snap Align + * @see https://tailwindcss.com/docs/scroll-snap-align + */ + "snap-align": [{ + snap: ["start", "end", "center", "align-none"] + }], + /** + * Scroll Snap Stop + * @see https://tailwindcss.com/docs/scroll-snap-stop + */ + "snap-stop": [{ + snap: ["normal", "always"] + }], + /** + * Scroll Snap Type + * @see https://tailwindcss.com/docs/scroll-snap-type + */ + "snap-type": [{ + snap: ["none", "x", "y", "both"] + }], + /** + * Scroll Snap Type Strictness + * @see https://tailwindcss.com/docs/scroll-snap-type + */ + "snap-strictness": [{ + snap: ["mandatory", "proximity"] + }], + /** + * Touch Action + * @see https://tailwindcss.com/docs/touch-action + */ + touch: [{ + touch: ["auto", "none", "manipulation"] + }], + /** + * Touch Action X + * @see https://tailwindcss.com/docs/touch-action + */ + "touch-x": [{ + "touch-pan": ["x", "left", "right"] + }], + /** + * Touch Action Y + * @see https://tailwindcss.com/docs/touch-action + */ + "touch-y": [{ + "touch-pan": ["y", "up", "down"] + }], + /** + * Touch Action Pinch Zoom + * @see https://tailwindcss.com/docs/touch-action + */ + "touch-pz": ["touch-pinch-zoom"], + /** + * User Select + * @see https://tailwindcss.com/docs/user-select + */ + select: [{ + select: ["none", "text", "all", "auto"] + }], + /** + * Will Change + * @see https://tailwindcss.com/docs/will-change + */ + "will-change": [{ + "will-change": ["auto", "scroll", "contents", "transform", mt] + }], + // SVG + /** + * Fill + * @see https://tailwindcss.com/docs/fill + */ + fill: [{ + fill: [n, "none"] + }], + /** + * Stroke Width + * @see https://tailwindcss.com/docs/stroke-width + */ + "stroke-w": [{ + stroke: [aa, ao, eb] + }], + /** + * Stroke + * @see https://tailwindcss.com/docs/stroke + */ + stroke: [{ + stroke: [n, "none"] + }], + // Accessibility + /** + * Screen Readers + * @see https://tailwindcss.com/docs/screen-readers + */ + sr: ["sr-only", "not-sr-only"], + /** + * Forced Color Adjust + * @see https://tailwindcss.com/docs/forced-color-adjust + */ + "forced-color-adjust": [{ + "forced-color-adjust": ["auto", "none"] + }] + }, + conflictingClassGroups: { + overflow: ["overflow-x", "overflow-y"], + overscroll: ["overscroll-x", "overscroll-y"], + inset: ["inset-x", "inset-y", "start", "end", "top", "right", "bottom", "left"], + "inset-x": ["right", "left"], + "inset-y": ["top", "bottom"], + flex: ["basis", "grow", "shrink"], + gap: ["gap-x", "gap-y"], + p: ["px", "py", "ps", "pe", "pt", "pr", "pb", "pl"], + px: ["pr", "pl"], + py: ["pt", "pb"], + m: ["mx", "my", "ms", "me", "mt", "mr", "mb", "ml"], + mx: ["mr", "ml"], + my: ["mt", "mb"], + size: ["w", "h"], + "font-size": ["leading"], + "fvn-normal": ["fvn-ordinal", "fvn-slashed-zero", "fvn-figure", "fvn-spacing", "fvn-fraction"], + "fvn-ordinal": ["fvn-normal"], + "fvn-slashed-zero": ["fvn-normal"], + "fvn-figure": ["fvn-normal"], + "fvn-spacing": ["fvn-normal"], + "fvn-fraction": ["fvn-normal"], + "line-clamp": ["display", "overflow"], + rounded: ["rounded-s", "rounded-e", "rounded-t", "rounded-r", "rounded-b", "rounded-l", "rounded-ss", "rounded-se", "rounded-ee", "rounded-es", "rounded-tl", "rounded-tr", "rounded-br", "rounded-bl"], + "rounded-s": ["rounded-ss", "rounded-es"], + "rounded-e": ["rounded-se", "rounded-ee"], + "rounded-t": ["rounded-tl", "rounded-tr"], + "rounded-r": ["rounded-tr", "rounded-br"], + "rounded-b": ["rounded-br", "rounded-bl"], + "rounded-l": ["rounded-tl", "rounded-bl"], + "border-spacing": ["border-spacing-x", "border-spacing-y"], + "border-w": ["border-w-s", "border-w-e", "border-w-t", "border-w-r", "border-w-b", "border-w-l"], + "border-w-x": ["border-w-r", "border-w-l"], + "border-w-y": ["border-w-t", "border-w-b"], + "border-color": ["border-color-s", "border-color-e", "border-color-t", "border-color-r", "border-color-b", "border-color-l"], + "border-color-x": ["border-color-r", "border-color-l"], + "border-color-y": ["border-color-t", "border-color-b"], + "scroll-m": ["scroll-mx", "scroll-my", "scroll-ms", "scroll-me", "scroll-mt", "scroll-mr", "scroll-mb", "scroll-ml"], + "scroll-mx": ["scroll-mr", "scroll-ml"], + "scroll-my": ["scroll-mt", "scroll-mb"], + "scroll-p": ["scroll-px", "scroll-py", "scroll-ps", "scroll-pe", "scroll-pt", "scroll-pr", "scroll-pb", "scroll-pl"], + "scroll-px": ["scroll-pr", "scroll-pl"], + "scroll-py": ["scroll-pt", "scroll-pb"], + touch: ["touch-x", "touch-y", "touch-pz"], + "touch-x": ["touch"], + "touch-y": ["touch"], + "touch-pz": ["touch"] + }, + conflictingClassGroupModifiers: { + "font-size": ["leading"] + } + }; +}, YL = /* @__PURE__ */ PL(GL); +function Ge(...n) { + return YL(tE(n)); +} +const Ox = Rx( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline" + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10" + } + }, + defaultVariants: { + variant: "default", + size: "default" + } + } +), Me = d.forwardRef( + ({ className: n, variant: t, size: e, asChild: s = !1, ...r }, i) => { + const a = s ? JS : "button"; + return /* @__PURE__ */ h.jsx(a, { className: Ge(Ox({ variant: t, size: e, className: n })), ref: i, ...r }); + } +); +Me.displayName = "Button"; +const KL = Ap(void 0), Qa = () => { + const n = qc(KL); + if (n === void 0) + throw new Error("useAuth must be used within an AuthProvider"); + return n; +}; +function Mx() { + return { async: !1, breaks: !1, extensions: null, gfm: !0, hooks: null, pedantic: !1, renderer: null, silent: !1, tokenizer: null, walkTokens: null }; +} +var zc = Mx(); +function oE(n) { + zc = n; +} +var Qh = { exec: () => null }; +function Ht(n, t = "") { + let e = typeof n == "string" ? n : n.source, s = { replace: (r, i) => { + let a = typeof i == "string" ? i : i.source; + return a = a.replace(Ts.caret, "$1"), e = e.replace(r, a), s; + }, getRegex: () => new RegExp(e, t) }; + return s; +} +var ZL = (() => { + try { + return !!new RegExp("(?<=1)(?<!1)"); + } catch { + return !1; + } +})(), Ts = { 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, listReplaceTabs: /^\t+/, listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g, listIsTask: /^\[[ xX]\] /, listReplaceTask: /^\[[ xX]\] +/, anyLine: /\n.*\n/, hrefBrackets: /^<(.*)>$/, tableDelimiter: /[:|]/, tableAlignChars: /^\||\| *$/g, tableRowBlankLine: /\n[ \t]*$/, tableAlignRight: /^ *-+: *$/, tableAlignCenter: /^ *:-+: *$/, tableAlignLeft: /^ *:-+ *$/, startATag: /^<a /i, endATag: /^<\/a>/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, unescapeTest: /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, caret: /(^|[^\[])\^/g, percentDecode: /%25/g, findPipe: /\|/g, splitPipe: / \|/, slashPipe: /\\\|/g, carriageReturn: /\r\n|\r/g, spaceLine: /^ +$/gm, notSpaceStart: /^\S*/, endingNewline: /\n$/, listItemRegex: (n) => new RegExp(`^( {0,3}${n})((?:[ ][^\\n]*)?(?:\\n|$))`), nextBulletRegex: (n) => new RegExp(`^ {0,${Math.min(3, n - 1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`), hrRegex: (n) => new RegExp(`^ {0,${Math.min(3, n - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`), fencesBeginRegex: (n) => new RegExp(`^ {0,${Math.min(3, n - 1)}}(?:\`\`\`|~~~)`), headingBeginRegex: (n) => new RegExp(`^ {0,${Math.min(3, n - 1)}}#`), htmlBeginRegex: (n) => new RegExp(`^ {0,${Math.min(3, n - 1)}}<(?:[a-z].*>|!--)`, "i") }, XL = /^(?:[ \t]*(?:\n|$))+/, QL = /^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/, JL = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/, Pp = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/, ej = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/, Dx = /(?:[*+-]|\d{1,9}[.)])/, lE = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/, cE = Ht(lE).replace(/bull/g, Dx).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(), tj = Ht(lE).replace(/bull/g, Dx).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(), Lx = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/, nj = /^[^\n]+/, jx = /(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/, sj = Ht(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label", jx).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(), rj = Ht(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g, Dx).getRegex(), Gy = "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", Fx = /<!--(?:-?>|[\s\S]*?(?:-->|$))/, ij = Ht("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\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", Fx).replace("tag", Gy).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(), uE = Ht(Lx).replace("hr", Pp).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[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", Gy).getRegex(), aj = Ht(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", uE).getRegex(), Vx = { blockquote: aj, code: QL, def: sj, fences: JL, heading: ej, hr: Pp, html: ij, lheading: cE, list: rj, newline: XL, paragraph: uE, table: Qh, text: nj }, T3 = Ht("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", Pp).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[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", Gy).getRegex(), oj = { ...Vx, lheading: tj, table: T3, paragraph: Ht(Lx).replace("hr", Pp).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", T3).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", Gy).getRegex() }, lj = { ...Vx, html: Ht(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment", Fx).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(), def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, heading: /^(#{1,6})(.*)(?:\n+|$)/, fences: Qh, lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, paragraph: Ht(Lx).replace("hr", Pp).replace("heading", ` *#{1,6} *[^ +]`).replace("lheading", cE).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex() }, cj = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/, uj = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/, dE = /^( {2,}|\\)\n(?!\s*$)/, dj = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/, Yy = /[\p{P}\p{S}]/u, Bx = /[\s\p{P}\p{S}]/u, hE = /[^\s\p{P}\p{S}]/u, hj = Ht(/^((?![*_])punctSpace)/, "u").replace(/punctSpace/g, Bx).getRegex(), fE = /(?!~)[\p{P}\p{S}]/u, fj = /(?!~)[\s\p{P}\p{S}]/u, pj = /(?:[^\s\p{P}\p{S}]|~)/u, mj = Ht(/link|precode-code|html/, "g").replace("link", /\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-", ZL ? "(?<!`)()" : "(^^|[^`])").replace("code", /(?<b>`+)[^`]+\k<b>(?!`)/).replace("html", /<(?! )[^<>]*?>/).getRegex(), pE = /^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/, gj = Ht(pE, "u").replace(/punct/g, Yy).getRegex(), yj = Ht(pE, "u").replace(/punct/g, fE).getRegex(), mE = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)", vj = Ht(mE, "gu").replace(/notPunctSpace/g, hE).replace(/punctSpace/g, Bx).replace(/punct/g, Yy).getRegex(), bj = Ht(mE, "gu").replace(/notPunctSpace/g, pj).replace(/punctSpace/g, fj).replace(/punct/g, fE).getRegex(), wj = Ht("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)", "gu").replace(/notPunctSpace/g, hE).replace(/punctSpace/g, Bx).replace(/punct/g, Yy).getRegex(), xj = Ht(/\\(punct)/, "gu").replace(/punct/g, Yy).getRegex(), Cj = Ht(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(), _j = Ht(Fx).replace("(?:-->|$)", "-->").getRegex(), Sj = Ht("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment", _j).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(), Lg = /(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/, Ej = Ht(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label", Lg).replace("href", /<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(), gE = Ht(/^!?\[(label)\]\[(ref)\]/).replace("label", Lg).replace("ref", jx).getRegex(), yE = Ht(/^!?\[(ref)\](?:\[\])?/).replace("ref", jx).getRegex(), kj = Ht("reflink|nolink(?!\\()", "g").replace("reflink", gE).replace("nolink", yE).getRegex(), A3 = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/, Ux = { _backpedal: Qh, anyPunctuation: xj, autolink: Cj, blockSkip: mj, br: dE, code: uj, del: Qh, emStrongLDelim: gj, emStrongRDelimAst: vj, emStrongRDelimUnd: wj, escape: cj, link: Ej, nolink: yE, punctuation: hj, reflink: gE, reflinkSearch: kj, tag: Sj, text: dj, url: Qh }, Tj = { ...Ux, link: Ht(/^!?\[(label)\]\((.*?)\)/).replace("label", Lg).getRegex(), reflink: Ht(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", Lg).getRegex() }, aw = { ...Ux, emStrongRDelimAst: bj, emStrongLDelim: yj, url: Ht(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol", A3).replace("email", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(), _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/, del: /^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/, text: Ht(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol", A3).getRegex() }, Aj = { ...aw, br: Ht(dE).replace("{2,}", "*").getRegex(), text: Ht(aw.text).replace("\\b_", "\\b_| {2,}\\n").replace(/\{2,\}/g, "*").getRegex() }, um = { normal: Vx, gfm: oj, pedantic: lj }, xh = { normal: Ux, gfm: aw, breaks: Aj, pedantic: Tj }, Pj = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }, P3 = (n) => Pj[n]; +function gi(n, t) { + if (t) { + if (Ts.escapeTest.test(n)) return n.replace(Ts.escapeReplace, P3); + } else if (Ts.escapeTestNoEncode.test(n)) return n.replace(Ts.escapeReplaceNoEncode, P3); + return n; +} +function N3(n) { + try { + n = encodeURI(n).replace(Ts.percentDecode, "%"); + } catch { + return null; + } + return n; +} +function $3(n, t) { + var i; + let e = n.replace(Ts.findPipe, (a, o, c) => { + let u = !1, f = o; + for (; --f >= 0 && c[f] === "\\"; ) u = !u; + return u ? "|" : " |"; + }), s = e.split(Ts.splitPipe), r = 0; + if (s[0].trim() || s.shift(), s.length > 0 && !((i = s.at(-1)) != null && i.trim()) && s.pop(), t) if (s.length > t) s.splice(t); + else for (; s.length < t; ) s.push(""); + for (; r < s.length; r++) s[r] = s[r].trim().replace(Ts.slashPipe, "|"); + return s; +} +function Ch(n, t, e) { + let s = n.length; + if (s === 0) return ""; + let r = 0; + for (; r < s && n.charAt(s - r - 1) === t; ) + r++; + return n.slice(0, s - r); +} +function Nj(n, t) { + if (n.indexOf(t[1]) === -1) return -1; + let e = 0; + for (let s = 0; s < n.length; s++) if (n[s] === "\\") s++; + else if (n[s] === t[0]) e++; + else if (n[s] === t[1] && (e--, e < 0)) return s; + return e > 0 ? -2 : -1; +} +function R3(n, t, e, s, r) { + let i = t.href, a = t.title || null, o = n[1].replace(r.other.outputLinkReplace, "$1"); + s.state.inLink = !0; + let c = { type: n[0].charAt(0) === "!" ? "image" : "link", raw: e, href: i, title: a, text: o, tokens: s.inlineTokens(o) }; + return s.state.inLink = !1, c; +} +function $j(n, t, e) { + let s = n.match(e.other.indentCodeCompensation); + if (s === null) return t; + let r = s[1]; + return t.split(` +`).map((i) => { + let a = i.match(e.other.beginningSpace); + if (a === null) return i; + let [o] = a; + return o.length >= r.length ? i.slice(r.length) : i; + }).join(` +`); +} +var jg = class { + constructor(n) { + U(this, "options"); + U(this, "rules"); + U(this, "lexer"); + this.options = n || zc; + } + space(n) { + let t = this.rules.block.newline.exec(n); + if (t && t[0].length > 0) return { type: "space", raw: t[0] }; + } + code(n) { + let t = this.rules.block.code.exec(n); + if (t) { + let e = t[0].replace(this.rules.other.codeRemoveIndent, ""); + return { type: "code", raw: t[0], codeBlockStyle: "indented", text: this.options.pedantic ? e : Ch(e, ` +`) }; + } + } + fences(n) { + let t = this.rules.block.fences.exec(n); + if (t) { + let e = t[0], s = $j(e, t[3] || "", this.rules); + return { type: "code", raw: e, lang: t[2] ? t[2].trim().replace(this.rules.inline.anyPunctuation, "$1") : t[2], text: s }; + } + } + heading(n) { + let t = this.rules.block.heading.exec(n); + if (t) { + let e = t[2].trim(); + if (this.rules.other.endingHash.test(e)) { + let s = Ch(e, "#"); + (this.options.pedantic || !s || this.rules.other.endingSpaceChar.test(s)) && (e = s.trim()); + } + return { type: "heading", raw: t[0], depth: t[1].length, text: e, tokens: this.lexer.inline(e) }; + } + } + hr(n) { + let t = this.rules.block.hr.exec(n); + if (t) return { type: "hr", raw: Ch(t[0], ` +`) }; + } + blockquote(n) { + let t = this.rules.block.blockquote.exec(n); + if (t) { + let e = Ch(t[0], ` +`).split(` +`), s = "", r = "", i = []; + for (; e.length > 0; ) { + let a = !1, o = [], c; + for (c = 0; c < e.length; c++) if (this.rules.other.blockquoteStart.test(e[c])) o.push(e[c]), a = !0; + else if (!a) o.push(e[c]); + else break; + e = e.slice(c); + let u = o.join(` +`), f = u.replace(this.rules.other.blockquoteSetextReplace, ` + $1`).replace(this.rules.other.blockquoteSetextReplace2, ""); + s = s ? `${s} +${u}` : u, r = r ? `${r} +${f}` : f; + let p = this.lexer.state.top; + if (this.lexer.state.top = !0, this.lexer.blockTokens(f, i, !0), this.lexer.state.top = p, e.length === 0) break; + let g = i.at(-1); + if ((g == null ? void 0 : g.type) === "code") break; + if ((g == null ? void 0 : g.type) === "blockquote") { + let y = g, v = y.raw + ` +` + e.join(` +`), b = this.blockquote(v); + i[i.length - 1] = b, s = s.substring(0, s.length - y.raw.length) + b.raw, r = r.substring(0, r.length - y.text.length) + b.text; + break; + } else if ((g == null ? void 0 : g.type) === "list") { + let y = g, v = y.raw + ` +` + e.join(` +`), b = this.list(v); + i[i.length - 1] = b, s = s.substring(0, s.length - g.raw.length) + b.raw, r = r.substring(0, r.length - y.raw.length) + b.raw, e = v.substring(i.at(-1).raw.length).split(` +`); + continue; + } + } + return { type: "blockquote", raw: s, tokens: i, text: r }; + } + } + list(n) { + let t = this.rules.block.list.exec(n); + if (t) { + let e = t[1].trim(), s = e.length > 1, r = { type: "list", raw: "", ordered: s, start: s ? +e.slice(0, -1) : "", loose: !1, items: [] }; + e = s ? `\\d{1,9}\\${e.slice(-1)}` : `\\${e}`, this.options.pedantic && (e = s ? e : "[*+-]"); + let i = this.rules.other.listItemRegex(e), a = !1; + for (; n; ) { + let c = !1, u = "", f = ""; + if (!(t = i.exec(n)) || this.rules.block.hr.test(n)) break; + u = t[0], n = n.substring(u.length); + let p = t[2].split(` +`, 1)[0].replace(this.rules.other.listReplaceTabs, (E) => " ".repeat(3 * E.length)), g = n.split(` +`, 1)[0], y = !p.trim(), v = 0; + if (this.options.pedantic ? (v = 2, f = p.trimStart()) : y ? v = t[1].length + 1 : (v = t[2].search(this.rules.other.nonSpaceChar), v = v > 4 ? 1 : v, f = p.slice(v), v += t[1].length), y && this.rules.other.blankLine.test(g) && (u += g + ` +`, n = n.substring(g.length + 1), c = !0), !c) { + let E = this.rules.other.nextBulletRegex(v), x = this.rules.other.hrRegex(v), C = this.rules.other.fencesBeginRegex(v), _ = this.rules.other.headingBeginRegex(v), k = this.rules.other.htmlBeginRegex(v); + for (; n; ) { + let A = n.split(` +`, 1)[0], T; + if (g = A, this.options.pedantic ? (g = g.replace(this.rules.other.listReplaceNesting, " "), T = g) : T = g.replace(this.rules.other.tabCharGlobal, " "), C.test(g) || _.test(g) || k.test(g) || E.test(g) || x.test(g)) break; + if (T.search(this.rules.other.nonSpaceChar) >= v || !g.trim()) f += ` +` + T.slice(v); + else { + if (y || p.replace(this.rules.other.tabCharGlobal, " ").search(this.rules.other.nonSpaceChar) >= 4 || C.test(p) || _.test(p) || x.test(p)) break; + f += ` +` + g; + } + !y && !g.trim() && (y = !0), u += A + ` +`, n = n.substring(A.length + 1), p = T.slice(v); + } + } + r.loose || (a ? r.loose = !0 : this.rules.other.doubleBlankLine.test(u) && (a = !0)); + let b = null, w; + this.options.gfm && (b = this.rules.other.listIsTask.exec(f), b && (w = b[0] !== "[ ] ", f = f.replace(this.rules.other.listReplaceTask, ""))), r.items.push({ type: "list_item", raw: u, task: !!b, checked: w, loose: !1, text: f, tokens: [] }), r.raw += u; + } + let o = r.items.at(-1); + if (o) o.raw = o.raw.trimEnd(), o.text = o.text.trimEnd(); + else return; + r.raw = r.raw.trimEnd(); + for (let c = 0; c < r.items.length; c++) if (this.lexer.state.top = !1, r.items[c].tokens = this.lexer.blockTokens(r.items[c].text, []), !r.loose) { + let u = r.items[c].tokens.filter((p) => p.type === "space"), f = u.length > 0 && u.some((p) => this.rules.other.anyLine.test(p.raw)); + r.loose = f; + } + if (r.loose) for (let c = 0; c < r.items.length; c++) r.items[c].loose = !0; + return r; + } + } + html(n) { + let t = this.rules.block.html.exec(n); + if (t) return { type: "html", block: !0, raw: t[0], pre: t[1] === "pre" || t[1] === "script" || t[1] === "style", text: t[0] }; + } + def(n) { + let t = this.rules.block.def.exec(n); + if (t) { + let e = t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, " "), s = t[2] ? t[2].replace(this.rules.other.hrefBrackets, "$1").replace(this.rules.inline.anyPunctuation, "$1") : "", r = t[3] ? t[3].substring(1, t[3].length - 1).replace(this.rules.inline.anyPunctuation, "$1") : t[3]; + return { type: "def", tag: e, raw: t[0], href: s, title: r }; + } + } + table(n) { + var a; + let t = this.rules.block.table.exec(n); + if (!t || !this.rules.other.tableDelimiter.test(t[2])) return; + let e = $3(t[1]), s = t[2].replace(this.rules.other.tableAlignChars, "").split("|"), r = (a = t[3]) != null && a.trim() ? t[3].replace(this.rules.other.tableRowBlankLine, "").split(` +`) : [], i = { type: "table", raw: t[0], header: [], align: [], rows: [] }; + if (e.length === s.length) { + for (let o of s) this.rules.other.tableAlignRight.test(o) ? i.align.push("right") : this.rules.other.tableAlignCenter.test(o) ? i.align.push("center") : this.rules.other.tableAlignLeft.test(o) ? i.align.push("left") : i.align.push(null); + for (let o = 0; o < e.length; o++) i.header.push({ text: e[o], tokens: this.lexer.inline(e[o]), header: !0, align: i.align[o] }); + for (let o of r) i.rows.push($3(o, i.header.length).map((c, u) => ({ text: c, tokens: this.lexer.inline(c), header: !1, align: i.align[u] }))); + return i; + } + } + lheading(n) { + let t = this.rules.block.lheading.exec(n); + if (t) return { type: "heading", raw: t[0], depth: t[2].charAt(0) === "=" ? 1 : 2, text: t[1], tokens: this.lexer.inline(t[1]) }; + } + paragraph(n) { + let t = this.rules.block.paragraph.exec(n); + if (t) { + let e = t[1].charAt(t[1].length - 1) === ` +` ? t[1].slice(0, -1) : t[1]; + return { type: "paragraph", raw: t[0], text: e, tokens: this.lexer.inline(e) }; + } + } + text(n) { + let t = this.rules.block.text.exec(n); + if (t) return { type: "text", raw: t[0], text: t[0], tokens: this.lexer.inline(t[0]) }; + } + escape(n) { + let t = this.rules.inline.escape.exec(n); + if (t) return { type: "escape", raw: t[0], text: t[1] }; + } + tag(n) { + let t = this.rules.inline.tag.exec(n); + if (t) return !this.lexer.state.inLink && this.rules.other.startATag.test(t[0]) ? this.lexer.state.inLink = !0 : this.lexer.state.inLink && this.rules.other.endATag.test(t[0]) && (this.lexer.state.inLink = !1), !this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(t[0]) ? this.lexer.state.inRawBlock = !0 : this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(t[0]) && (this.lexer.state.inRawBlock = !1), { type: "html", raw: t[0], inLink: this.lexer.state.inLink, inRawBlock: this.lexer.state.inRawBlock, block: !1, text: t[0] }; + } + link(n) { + let t = this.rules.inline.link.exec(n); + if (t) { + let e = t[2].trim(); + if (!this.options.pedantic && this.rules.other.startAngleBracket.test(e)) { + if (!this.rules.other.endAngleBracket.test(e)) return; + let i = Ch(e.slice(0, -1), "\\"); + if ((e.length - i.length) % 2 === 0) return; + } else { + let i = Nj(t[2], "()"); + if (i === -2) return; + if (i > -1) { + let a = (t[0].indexOf("!") === 0 ? 5 : 4) + t[1].length + i; + t[2] = t[2].substring(0, i), t[0] = t[0].substring(0, a).trim(), t[3] = ""; + } + } + let s = t[2], r = ""; + if (this.options.pedantic) { + let i = this.rules.other.pedanticHrefTitle.exec(s); + i && (s = i[1], r = i[3]); + } else r = t[3] ? t[3].slice(1, -1) : ""; + return s = s.trim(), this.rules.other.startAngleBracket.test(s) && (this.options.pedantic && !this.rules.other.endAngleBracket.test(e) ? s = s.slice(1) : s = s.slice(1, -1)), R3(t, { href: s && s.replace(this.rules.inline.anyPunctuation, "$1"), title: r && r.replace(this.rules.inline.anyPunctuation, "$1") }, t[0], this.lexer, this.rules); + } + } + reflink(n, t) { + let e; + if ((e = this.rules.inline.reflink.exec(n)) || (e = this.rules.inline.nolink.exec(n))) { + let s = (e[2] || e[1]).replace(this.rules.other.multipleSpaceGlobal, " "), r = t[s.toLowerCase()]; + if (!r) { + let i = e[0].charAt(0); + return { type: "text", raw: i, text: i }; + } + return R3(e, r, e[0], this.lexer, this.rules); + } + } + emStrong(n, t, e = "") { + let s = this.rules.inline.emStrongLDelim.exec(n); + if (!(!s || s[3] && e.match(this.rules.other.unicodeAlphaNumeric)) && (!(s[1] || s[2]) || !e || this.rules.inline.punctuation.exec(e))) { + let r = [...s[0]].length - 1, i, a, o = r, c = 0, u = s[0][0] === "*" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd; + for (u.lastIndex = 0, t = t.slice(-1 * n.length + r); (s = u.exec(t)) != null; ) { + if (i = s[1] || s[2] || s[3] || s[4] || s[5] || s[6], !i) continue; + if (a = [...i].length, s[3] || s[4]) { + o += a; + continue; + } else if ((s[5] || s[6]) && r % 3 && !((r + a) % 3)) { + c += a; + continue; + } + if (o -= a, o > 0) continue; + a = Math.min(a, a + o + c); + let f = [...s[0]][0].length, p = n.slice(0, r + s.index + f + a); + if (Math.min(r, a) % 2) { + let y = p.slice(1, -1); + return { type: "em", raw: p, text: y, tokens: this.lexer.inlineTokens(y) }; + } + let g = p.slice(2, -2); + return { type: "strong", raw: p, text: g, tokens: this.lexer.inlineTokens(g) }; + } + } + } + codespan(n) { + let t = this.rules.inline.code.exec(n); + if (t) { + let e = t[2].replace(this.rules.other.newLineCharGlobal, " "), s = this.rules.other.nonSpaceChar.test(e), r = this.rules.other.startingSpaceChar.test(e) && this.rules.other.endingSpaceChar.test(e); + return s && r && (e = e.substring(1, e.length - 1)), { type: "codespan", raw: t[0], text: e }; + } + } + br(n) { + let t = this.rules.inline.br.exec(n); + if (t) return { type: "br", raw: t[0] }; + } + del(n) { + let t = this.rules.inline.del.exec(n); + if (t) return { type: "del", raw: t[0], text: t[2], tokens: this.lexer.inlineTokens(t[2]) }; + } + autolink(n) { + let t = this.rules.inline.autolink.exec(n); + if (t) { + let e, s; + return t[2] === "@" ? (e = t[1], s = "mailto:" + e) : (e = t[1], s = e), { type: "link", raw: t[0], text: e, href: s, tokens: [{ type: "text", raw: e, text: e }] }; + } + } + url(n) { + var e; + let t; + if (t = this.rules.inline.url.exec(n)) { + let s, r; + if (t[2] === "@") s = t[0], r = "mailto:" + s; + else { + let i; + do + i = t[0], t[0] = ((e = this.rules.inline._backpedal.exec(t[0])) == null ? void 0 : e[0]) ?? ""; + while (i !== t[0]); + s = t[0], t[1] === "www." ? r = "http://" + t[0] : r = t[0]; + } + return { type: "link", raw: t[0], text: s, href: r, tokens: [{ type: "text", raw: s, text: s }] }; + } + } + inlineText(n) { + let t = this.rules.inline.text.exec(n); + if (t) { + let e = this.lexer.state.inRawBlock; + return { type: "text", raw: t[0], text: t[0], escaped: e }; + } + } +}, Qr = class ow { + constructor(t) { + U(this, "tokens"); + U(this, "options"); + U(this, "state"); + U(this, "tokenizer"); + U(this, "inlineQueue"); + this.tokens = [], this.tokens.links = /* @__PURE__ */ Object.create(null), this.options = t || zc, this.options.tokenizer = this.options.tokenizer || new jg(), this.tokenizer = this.options.tokenizer, this.tokenizer.options = this.options, this.tokenizer.lexer = this, this.inlineQueue = [], this.state = { inLink: !1, inRawBlock: !1, top: !0 }; + let e = { other: Ts, block: um.normal, inline: xh.normal }; + this.options.pedantic ? (e.block = um.pedantic, e.inline = xh.pedantic) : this.options.gfm && (e.block = um.gfm, this.options.breaks ? e.inline = xh.breaks : e.inline = xh.gfm), this.tokenizer.rules = e; + } + static get rules() { + return { block: um, inline: xh }; + } + static lex(t, e) { + return new ow(e).lex(t); + } + static lexInline(t, e) { + return new ow(e).inlineTokens(t); + } + lex(t) { + t = t.replace(Ts.carriageReturn, ` +`), this.blockTokens(t, this.tokens); + for (let e = 0; e < this.inlineQueue.length; e++) { + let s = this.inlineQueue[e]; + this.inlineTokens(s.src, s.tokens); + } + return this.inlineQueue = [], this.tokens; + } + blockTokens(t, e = [], s = !1) { + var r, i, a; + for (this.options.pedantic && (t = t.replace(Ts.tabCharGlobal, " ").replace(Ts.spaceLine, "")); t; ) { + let o; + if ((i = (r = this.options.extensions) == null ? void 0 : r.block) != null && i.some((u) => (o = u.call({ lexer: this }, t, e)) ? (t = t.substring(o.raw.length), e.push(o), !0) : !1)) continue; + if (o = this.tokenizer.space(t)) { + t = t.substring(o.raw.length); + let u = e.at(-1); + o.raw.length === 1 && u !== void 0 ? u.raw += ` +` : e.push(o); + continue; + } + if (o = this.tokenizer.code(t)) { + t = t.substring(o.raw.length); + let u = e.at(-1); + (u == null ? void 0 : u.type) === "paragraph" || (u == null ? void 0 : u.type) === "text" ? (u.raw += (u.raw.endsWith(` +`) ? "" : ` +`) + o.raw, u.text += ` +` + o.text, this.inlineQueue.at(-1).src = u.text) : e.push(o); + continue; + } + if (o = this.tokenizer.fences(t)) { + t = t.substring(o.raw.length), e.push(o); + continue; + } + if (o = this.tokenizer.heading(t)) { + t = t.substring(o.raw.length), e.push(o); + continue; + } + if (o = this.tokenizer.hr(t)) { + t = t.substring(o.raw.length), e.push(o); + continue; + } + if (o = this.tokenizer.blockquote(t)) { + t = t.substring(o.raw.length), e.push(o); + continue; + } + if (o = this.tokenizer.list(t)) { + t = t.substring(o.raw.length), e.push(o); + continue; + } + if (o = this.tokenizer.html(t)) { + t = t.substring(o.raw.length), e.push(o); + continue; + } + if (o = this.tokenizer.def(t)) { + t = t.substring(o.raw.length); + let u = e.at(-1); + (u == null ? void 0 : u.type) === "paragraph" || (u == null ? void 0 : u.type) === "text" ? (u.raw += (u.raw.endsWith(` +`) ? "" : ` +`) + o.raw, u.text += ` +` + o.raw, this.inlineQueue.at(-1).src = u.text) : this.tokens.links[o.tag] || (this.tokens.links[o.tag] = { href: o.href, title: o.title }, e.push(o)); + continue; + } + if (o = this.tokenizer.table(t)) { + t = t.substring(o.raw.length), e.push(o); + continue; + } + if (o = this.tokenizer.lheading(t)) { + t = t.substring(o.raw.length), e.push(o); + continue; + } + let c = t; + if ((a = this.options.extensions) != null && a.startBlock) { + let u = 1 / 0, f = t.slice(1), p; + this.options.extensions.startBlock.forEach((g) => { + p = g.call({ lexer: this }, f), typeof p == "number" && p >= 0 && (u = Math.min(u, p)); + }), u < 1 / 0 && u >= 0 && (c = t.substring(0, u + 1)); + } + if (this.state.top && (o = this.tokenizer.paragraph(c))) { + let u = e.at(-1); + s && (u == null ? void 0 : u.type) === "paragraph" ? (u.raw += (u.raw.endsWith(` +`) ? "" : ` +`) + o.raw, u.text += ` +` + o.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = u.text) : e.push(o), s = c.length !== t.length, t = t.substring(o.raw.length); + continue; + } + if (o = this.tokenizer.text(t)) { + t = t.substring(o.raw.length); + let u = e.at(-1); + (u == null ? void 0 : u.type) === "text" ? (u.raw += (u.raw.endsWith(` +`) ? "" : ` +`) + o.raw, u.text += ` +` + o.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = u.text) : e.push(o); + continue; + } + if (t) { + let u = "Infinite loop on byte: " + t.charCodeAt(0); + if (this.options.silent) { + console.error(u); + break; + } else throw new Error(u); + } + } + return this.state.top = !0, e; + } + inline(t, e = []) { + return this.inlineQueue.push({ src: t, tokens: e }), e; + } + inlineTokens(t, e = []) { + var c, u, f, p, g; + let s = t, r = null; + if (this.tokens.links) { + let y = Object.keys(this.tokens.links); + if (y.length > 0) for (; (r = this.tokenizer.rules.inline.reflinkSearch.exec(s)) != null; ) y.includes(r[0].slice(r[0].lastIndexOf("[") + 1, -1)) && (s = s.slice(0, r.index) + "[" + "a".repeat(r[0].length - 2) + "]" + s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex)); + } + for (; (r = this.tokenizer.rules.inline.anyPunctuation.exec(s)) != null; ) s = s.slice(0, r.index) + "++" + s.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex); + let i; + for (; (r = this.tokenizer.rules.inline.blockSkip.exec(s)) != null; ) i = r[2] ? r[2].length : 0, s = s.slice(0, r.index + i) + "[" + "a".repeat(r[0].length - i - 2) + "]" + s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex); + s = ((u = (c = this.options.hooks) == null ? void 0 : c.emStrongMask) == null ? void 0 : u.call({ lexer: this }, s)) ?? s; + let a = !1, o = ""; + for (; t; ) { + a || (o = ""), a = !1; + let y; + if ((p = (f = this.options.extensions) == null ? void 0 : f.inline) != null && p.some((b) => (y = b.call({ lexer: this }, t, e)) ? (t = t.substring(y.raw.length), e.push(y), !0) : !1)) continue; + if (y = this.tokenizer.escape(t)) { + t = t.substring(y.raw.length), e.push(y); + continue; + } + if (y = this.tokenizer.tag(t)) { + t = t.substring(y.raw.length), e.push(y); + continue; + } + if (y = this.tokenizer.link(t)) { + t = t.substring(y.raw.length), e.push(y); + continue; + } + if (y = this.tokenizer.reflink(t, this.tokens.links)) { + t = t.substring(y.raw.length); + let b = e.at(-1); + y.type === "text" && (b == null ? void 0 : b.type) === "text" ? (b.raw += y.raw, b.text += y.text) : e.push(y); + continue; + } + if (y = this.tokenizer.emStrong(t, s, o)) { + t = t.substring(y.raw.length), e.push(y); + continue; + } + if (y = this.tokenizer.codespan(t)) { + t = t.substring(y.raw.length), e.push(y); + continue; + } + if (y = this.tokenizer.br(t)) { + t = t.substring(y.raw.length), e.push(y); + continue; + } + if (y = this.tokenizer.del(t)) { + t = t.substring(y.raw.length), e.push(y); + continue; + } + if (y = this.tokenizer.autolink(t)) { + t = t.substring(y.raw.length), e.push(y); + continue; + } + if (!this.state.inLink && (y = this.tokenizer.url(t))) { + t = t.substring(y.raw.length), e.push(y); + continue; + } + let v = t; + if ((g = this.options.extensions) != null && g.startInline) { + let b = 1 / 0, w = t.slice(1), E; + this.options.extensions.startInline.forEach((x) => { + E = x.call({ lexer: this }, w), typeof E == "number" && E >= 0 && (b = Math.min(b, E)); + }), b < 1 / 0 && b >= 0 && (v = t.substring(0, b + 1)); + } + if (y = this.tokenizer.inlineText(v)) { + t = t.substring(y.raw.length), y.raw.slice(-1) !== "_" && (o = y.raw.slice(-1)), a = !0; + let b = e.at(-1); + (b == null ? void 0 : b.type) === "text" ? (b.raw += y.raw, b.text += y.text) : e.push(y); + continue; + } + if (t) { + let b = "Infinite loop on byte: " + t.charCodeAt(0); + if (this.options.silent) { + console.error(b); + break; + } else throw new Error(b); + } + } + return e; + } +}, Fg = class { + constructor(n) { + U(this, "options"); + U(this, "parser"); + this.options = n || zc; + } + space(n) { + return ""; + } + code({ text: n, lang: t, escaped: e }) { + var i; + let s = (i = (t || "").match(Ts.notSpaceStart)) == null ? void 0 : i[0], r = n.replace(Ts.endingNewline, "") + ` +`; + return s ? '<pre><code class="language-' + gi(s) + '">' + (e ? r : gi(r, !0)) + `</code></pre> +` : "<pre><code>" + (e ? r : gi(r, !0)) + `</code></pre> +`; + } + blockquote({ tokens: n }) { + return `<blockquote> +${this.parser.parse(n)}</blockquote> +`; + } + html({ text: n }) { + return n; + } + def(n) { + return ""; + } + heading({ tokens: n, depth: t }) { + return `<h${t}>${this.parser.parseInline(n)}</h${t}> +`; + } + hr(n) { + return `<hr> +`; + } + list(n) { + let t = n.ordered, e = n.start, s = ""; + for (let a = 0; a < n.items.length; a++) { + let o = n.items[a]; + s += this.listitem(o); + } + let r = t ? "ol" : "ul", i = t && e !== 1 ? ' start="' + e + '"' : ""; + return "<" + r + i + `> +` + s + "</" + r + `> +`; + } + listitem(n) { + var e; + let t = ""; + if (n.task) { + let s = this.checkbox({ checked: !!n.checked }); + n.loose ? ((e = n.tokens[0]) == null ? void 0 : e.type) === "paragraph" ? (n.tokens[0].text = s + " " + n.tokens[0].text, n.tokens[0].tokens && n.tokens[0].tokens.length > 0 && n.tokens[0].tokens[0].type === "text" && (n.tokens[0].tokens[0].text = s + " " + gi(n.tokens[0].tokens[0].text), n.tokens[0].tokens[0].escaped = !0)) : n.tokens.unshift({ type: "text", raw: s + " ", text: s + " ", escaped: !0 }) : t += s + " "; + } + return t += this.parser.parse(n.tokens, !!n.loose), `<li>${t}</li> +`; + } + checkbox({ checked: n }) { + return "<input " + (n ? 'checked="" ' : "") + 'disabled="" type="checkbox">'; + } + paragraph({ tokens: n }) { + return `<p>${this.parser.parseInline(n)}</p> +`; + } + table(n) { + let t = "", e = ""; + for (let r = 0; r < n.header.length; r++) e += this.tablecell(n.header[r]); + t += this.tablerow({ text: e }); + let s = ""; + for (let r = 0; r < n.rows.length; r++) { + let i = n.rows[r]; + e = ""; + for (let a = 0; a < i.length; a++) e += this.tablecell(i[a]); + s += this.tablerow({ text: e }); + } + return s && (s = `<tbody>${s}</tbody>`), `<table> +<thead> +` + t + `</thead> +` + s + `</table> +`; + } + tablerow({ text: n }) { + return `<tr> +${n}</tr> +`; + } + tablecell(n) { + let t = this.parser.parseInline(n.tokens), e = n.header ? "th" : "td"; + return (n.align ? `<${e} align="${n.align}">` : `<${e}>`) + t + `</${e}> +`; + } + strong({ tokens: n }) { + return `<strong>${this.parser.parseInline(n)}</strong>`; + } + em({ tokens: n }) { + return `<em>${this.parser.parseInline(n)}</em>`; + } + codespan({ text: n }) { + return `<code>${gi(n, !0)}</code>`; + } + br(n) { + return "<br>"; + } + del({ tokens: n }) { + return `<del>${this.parser.parseInline(n)}</del>`; + } + link({ href: n, title: t, tokens: e }) { + let s = this.parser.parseInline(e), r = N3(n); + if (r === null) return s; + n = r; + let i = '<a href="' + n + '"'; + return t && (i += ' title="' + gi(t) + '"'), i += ">" + s + "</a>", i; + } + image({ href: n, title: t, text: e, tokens: s }) { + s && (e = this.parser.parseInline(s, this.parser.textRenderer)); + let r = N3(n); + if (r === null) return gi(e); + n = r; + let i = `<img src="${n}" alt="${e}"`; + return t && (i += ` title="${gi(t)}"`), i += ">", i; + } + text(n) { + return "tokens" in n && n.tokens ? this.parser.parseInline(n.tokens) : "escaped" in n && n.escaped ? n.text : gi(n.text); + } +}, qx = class { + strong({ text: n }) { + return n; + } + em({ text: n }) { + return n; + } + codespan({ text: n }) { + return n; + } + del({ text: n }) { + return n; + } + html({ text: n }) { + return n; + } + text({ text: n }) { + return n; + } + link({ text: n }) { + return "" + n; + } + image({ text: n }) { + return "" + n; + } + br() { + return ""; + } +}, Jr = class lw { + constructor(t) { + U(this, "options"); + U(this, "renderer"); + U(this, "textRenderer"); + this.options = t || zc, this.options.renderer = this.options.renderer || new Fg(), this.renderer = this.options.renderer, this.renderer.options = this.options, this.renderer.parser = this, this.textRenderer = new qx(); + } + static parse(t, e) { + return new lw(e).parse(t); + } + static parseInline(t, e) { + return new lw(e).parseInline(t); + } + parse(t, e = !0) { + var r, i; + let s = ""; + for (let a = 0; a < t.length; a++) { + let o = t[a]; + if ((i = (r = this.options.extensions) == null ? void 0 : r.renderers) != null && i[o.type]) { + let u = o, f = this.options.extensions.renderers[u.type].call({ parser: this }, u); + if (f !== !1 || !["space", "hr", "heading", "code", "table", "blockquote", "list", "html", "def", "paragraph", "text"].includes(u.type)) { + s += f || ""; + continue; + } + } + let c = o; + switch (c.type) { + case "space": { + s += this.renderer.space(c); + continue; + } + case "hr": { + s += this.renderer.hr(c); + continue; + } + case "heading": { + s += this.renderer.heading(c); + continue; + } + case "code": { + s += this.renderer.code(c); + continue; + } + case "table": { + s += this.renderer.table(c); + continue; + } + case "blockquote": { + s += this.renderer.blockquote(c); + continue; + } + case "list": { + s += this.renderer.list(c); + continue; + } + case "html": { + s += this.renderer.html(c); + continue; + } + case "def": { + s += this.renderer.def(c); + continue; + } + case "paragraph": { + s += this.renderer.paragraph(c); + continue; + } + case "text": { + let u = c, f = this.renderer.text(u); + for (; a + 1 < t.length && t[a + 1].type === "text"; ) u = t[++a], f += ` +` + this.renderer.text(u); + e ? s += this.renderer.paragraph({ type: "paragraph", raw: f, text: f, tokens: [{ type: "text", raw: f, text: f, escaped: !0 }] }) : s += f; + continue; + } + default: { + let u = 'Token with "' + c.type + '" type was not found.'; + if (this.options.silent) return console.error(u), ""; + throw new Error(u); + } + } + } + return s; + } + parseInline(t, e = this.renderer) { + var r, i; + let s = ""; + for (let a = 0; a < t.length; a++) { + let o = t[a]; + if ((i = (r = this.options.extensions) == null ? void 0 : r.renderers) != null && i[o.type]) { + let u = this.options.extensions.renderers[o.type].call({ parser: this }, o); + if (u !== !1 || !["escape", "html", "link", "image", "strong", "em", "codespan", "br", "del", "text"].includes(o.type)) { + s += u || ""; + continue; + } + } + let c = o; + switch (c.type) { + case "escape": { + s += e.text(c); + break; + } + case "html": { + s += e.html(c); + break; + } + case "link": { + s += e.link(c); + break; + } + case "image": { + s += e.image(c); + break; + } + case "strong": { + s += e.strong(c); + break; + } + case "em": { + s += e.em(c); + break; + } + case "codespan": { + s += e.codespan(c); + break; + } + case "br": { + s += e.br(c); + break; + } + case "del": { + s += e.del(c); + break; + } + case "text": { + s += e.text(c); + break; + } + default: { + let u = 'Token with "' + c.type + '" type was not found.'; + if (this.options.silent) return console.error(u), ""; + throw new Error(u); + } + } + } + return s; + } +}, Im, Ih = (Im = class { + constructor(n) { + U(this, "options"); + U(this, "block"); + this.options = n || zc; + } + preprocess(n) { + return n; + } + postprocess(n) { + return n; + } + processAllTokens(n) { + return n; + } + emStrongMask(n) { + return n; + } + provideLexer() { + return this.block ? Qr.lex : Qr.lexInline; + } + provideParser() { + return this.block ? Jr.parse : Jr.parseInline; + } +}, U(Im, "passThroughHooks", /* @__PURE__ */ new Set(["preprocess", "postprocess", "processAllTokens", "emStrongMask"])), U(Im, "passThroughHooksRespectAsync", /* @__PURE__ */ new Set(["preprocess", "postprocess", "processAllTokens"])), Im), Rj = class { + constructor(...n) { + U(this, "defaults", Mx()); + U(this, "options", this.setOptions); + U(this, "parse", this.parseMarkdown(!0)); + U(this, "parseInline", this.parseMarkdown(!1)); + U(this, "Parser", Jr); + U(this, "Renderer", Fg); + U(this, "TextRenderer", qx); + U(this, "Lexer", Qr); + U(this, "Tokenizer", jg); + U(this, "Hooks", Ih); + this.use(...n); + } + walkTokens(n, t) { + var s, r; + let e = []; + for (let i of n) switch (e = e.concat(t.call(this, i)), i.type) { + case "table": { + let a = i; + for (let o of a.header) e = e.concat(this.walkTokens(o.tokens, t)); + for (let o of a.rows) for (let c of o) e = e.concat(this.walkTokens(c.tokens, t)); + break; + } + case "list": { + let a = i; + e = e.concat(this.walkTokens(a.items, t)); + break; + } + default: { + let a = i; + (r = (s = this.defaults.extensions) == null ? void 0 : s.childTokens) != null && r[a.type] ? this.defaults.extensions.childTokens[a.type].forEach((o) => { + let c = a[o].flat(1 / 0); + e = e.concat(this.walkTokens(c, t)); + }) : a.tokens && (e = e.concat(this.walkTokens(a.tokens, t))); + } + } + return e; + } + use(...n) { + let t = this.defaults.extensions || { renderers: {}, childTokens: {} }; + return n.forEach((e) => { + let s = { ...e }; + if (s.async = this.defaults.async || s.async || !1, e.extensions && (e.extensions.forEach((r) => { + if (!r.name) throw new Error("extension name required"); + if ("renderer" in r) { + let i = t.renderers[r.name]; + i ? t.renderers[r.name] = function(...a) { + let o = r.renderer.apply(this, a); + return o === !1 && (o = i.apply(this, a)), o; + } : t.renderers[r.name] = r.renderer; + } + if ("tokenizer" in r) { + if (!r.level || r.level !== "block" && r.level !== "inline") throw new Error("extension level must be 'block' or 'inline'"); + let i = t[r.level]; + i ? i.unshift(r.tokenizer) : t[r.level] = [r.tokenizer], r.start && (r.level === "block" ? t.startBlock ? t.startBlock.push(r.start) : t.startBlock = [r.start] : r.level === "inline" && (t.startInline ? t.startInline.push(r.start) : t.startInline = [r.start])); + } + "childTokens" in r && r.childTokens && (t.childTokens[r.name] = r.childTokens); + }), s.extensions = t), e.renderer) { + let r = this.defaults.renderer || new Fg(this.defaults); + for (let i in e.renderer) { + if (!(i in r)) throw new Error(`renderer '${i}' does not exist`); + if (["options", "parser"].includes(i)) continue; + let a = i, o = e.renderer[a], c = r[a]; + r[a] = (...u) => { + let f = o.apply(r, u); + return f === !1 && (f = c.apply(r, u)), f || ""; + }; + } + s.renderer = r; + } + if (e.tokenizer) { + let r = this.defaults.tokenizer || new jg(this.defaults); + for (let i in e.tokenizer) { + if (!(i in r)) throw new Error(`tokenizer '${i}' does not exist`); + if (["options", "rules", "lexer"].includes(i)) continue; + let a = i, o = e.tokenizer[a], c = r[a]; + r[a] = (...u) => { + let f = o.apply(r, u); + return f === !1 && (f = c.apply(r, u)), f; + }; + } + s.tokenizer = r; + } + if (e.hooks) { + let r = this.defaults.hooks || new Ih(); + for (let i in e.hooks) { + if (!(i in r)) throw new Error(`hook '${i}' does not exist`); + if (["options", "block"].includes(i)) continue; + let a = i, o = e.hooks[a], c = r[a]; + Ih.passThroughHooks.has(i) ? r[a] = (u) => { + if (this.defaults.async && Ih.passThroughHooksRespectAsync.has(i)) return (async () => { + let p = await o.call(r, u); + return c.call(r, p); + })(); + let f = o.call(r, u); + return c.call(r, f); + } : r[a] = (...u) => { + if (this.defaults.async) return (async () => { + let p = await o.apply(r, u); + return p === !1 && (p = await c.apply(r, u)), p; + })(); + let f = o.apply(r, u); + return f === !1 && (f = c.apply(r, u)), f; + }; + } + s.hooks = r; + } + if (e.walkTokens) { + let r = this.defaults.walkTokens, i = e.walkTokens; + s.walkTokens = function(a) { + let o = []; + return o.push(i.call(this, a)), r && (o = o.concat(r.call(this, a))), o; + }; + } + this.defaults = { ...this.defaults, ...s }; + }), this; + } + setOptions(n) { + return this.defaults = { ...this.defaults, ...n }, this; + } + lexer(n, t) { + return Qr.lex(n, t ?? this.defaults); + } + parser(n, t) { + return Jr.parse(n, t ?? this.defaults); + } + parseMarkdown(n) { + return (t, e) => { + let s = { ...e }, r = { ...this.defaults, ...s }, i = this.onError(!!r.silent, !!r.async); + if (this.defaults.async === !0 && s.async === !1) return i(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.")); + if (typeof t > "u" || t === null) return i(new Error("marked(): input parameter is undefined or null")); + if (typeof t != "string") return i(new Error("marked(): input parameter is of type " + Object.prototype.toString.call(t) + ", string expected")); + if (r.hooks && (r.hooks.options = r, r.hooks.block = n), r.async) return (async () => { + let a = r.hooks ? await r.hooks.preprocess(t) : t, o = await (r.hooks ? await r.hooks.provideLexer() : n ? Qr.lex : Qr.lexInline)(a, r), c = r.hooks ? await r.hooks.processAllTokens(o) : o; + r.walkTokens && await Promise.all(this.walkTokens(c, r.walkTokens)); + let u = await (r.hooks ? await r.hooks.provideParser() : n ? Jr.parse : Jr.parseInline)(c, r); + return r.hooks ? await r.hooks.postprocess(u) : u; + })().catch(i); + try { + r.hooks && (t = r.hooks.preprocess(t)); + let a = (r.hooks ? r.hooks.provideLexer() : n ? Qr.lex : Qr.lexInline)(t, r); + r.hooks && (a = r.hooks.processAllTokens(a)), r.walkTokens && this.walkTokens(a, r.walkTokens); + let o = (r.hooks ? r.hooks.provideParser() : n ? Jr.parse : Jr.parseInline)(a, r); + return r.hooks && (o = r.hooks.postprocess(o)), o; + } catch (a) { + return i(a); + } + }; + } + onError(n, t) { + return (e) => { + if (e.message += ` +Please report this to https://github.com/markedjs/marked.`, n) { + let s = "<p>An error occurred:</p><pre>" + gi(e.message + "", !0) + "</pre>"; + return t ? Promise.resolve(s) : s; + } + if (t) return Promise.reject(e); + throw e; + }; + } +}, Pc = new Rj(); +function Qt(n, t) { + return Pc.parse(n, t); +} +Qt.options = Qt.setOptions = function(n) { + return Pc.setOptions(n), Qt.defaults = Pc.defaults, oE(Qt.defaults), Qt; +}; +Qt.getDefaults = Mx; +Qt.defaults = zc; +Qt.use = function(...n) { + return Pc.use(...n), Qt.defaults = Pc.defaults, oE(Qt.defaults), Qt; +}; +Qt.walkTokens = function(n, t) { + return Pc.walkTokens(n, t); +}; +Qt.parseInline = Pc.parseInline; +Qt.Parser = Jr; +Qt.parser = Jr.parse; +Qt.Renderer = Fg; +Qt.TextRenderer = qx; +Qt.Lexer = Qr; +Qt.lexer = Qr.lex; +Qt.Tokenizer = jg; +Qt.Hooks = Ih; +Qt.parse = Qt; +Qt.options; +Qt.setOptions; +Qt.use; +Qt.walkTokens; +Qt.parseInline; +Jr.parse; +Qr.lex; +/*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE */ +const { + entries: vE, + setPrototypeOf: I3, + isFrozen: Ij, + getPrototypeOf: Oj, + getOwnPropertyDescriptor: Mj +} = Object; +let { + freeze: Ns, + seal: Tr, + create: cw +} = Object, { + apply: uw, + construct: dw +} = typeof Reflect < "u" && Reflect; +Ns || (Ns = function(t) { + return t; +}); +Tr || (Tr = function(t) { + return t; +}); +uw || (uw = function(t, e) { + for (var s = arguments.length, r = new Array(s > 2 ? s - 2 : 0), i = 2; i < s; i++) + r[i - 2] = arguments[i]; + return t.apply(e, r); +}); +dw || (dw = function(t) { + for (var e = arguments.length, s = new Array(e > 1 ? e - 1 : 0), r = 1; r < e; r++) + s[r - 1] = arguments[r]; + return new t(...s); +}); +const dm = $s(Array.prototype.forEach), Dj = $s(Array.prototype.lastIndexOf), O3 = $s(Array.prototype.pop), _h = $s(Array.prototype.push), Lj = $s(Array.prototype.splice), Vm = $s(String.prototype.toLowerCase), tb = $s(String.prototype.toString), nb = $s(String.prototype.match), Sh = $s(String.prototype.replace), jj = $s(String.prototype.indexOf), Fj = $s(String.prototype.trim), Lr = $s(Object.prototype.hasOwnProperty), vs = $s(RegExp.prototype.test), Eh = Vj(TypeError); +function $s(n) { + return function(t) { + t instanceof RegExp && (t.lastIndex = 0); + for (var e = arguments.length, s = new Array(e > 1 ? e - 1 : 0), r = 1; r < e; r++) + s[r - 1] = arguments[r]; + return uw(n, t, s); + }; +} +function Vj(n) { + return function() { + for (var t = arguments.length, e = new Array(t), s = 0; s < t; s++) + e[s] = arguments[s]; + return dw(n, e); + }; +} +function St(n, t) { + let e = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : Vm; + I3 && I3(n, null); + let s = t.length; + for (; s--; ) { + let r = t[s]; + if (typeof r == "string") { + const i = e(r); + i !== r && (Ij(t) || (t[s] = i), r = i); + } + n[r] = !0; + } + return n; +} +function Bj(n) { + for (let t = 0; t < n.length; t++) + Lr(n, t) || (n[t] = null); + return n; +} +function yi(n) { + const t = cw(null); + for (const [e, s] of vE(n)) + Lr(n, e) && (Array.isArray(s) ? t[e] = Bj(s) : s && typeof s == "object" && s.constructor === Object ? t[e] = yi(s) : t[e] = s); + return t; +} +function kh(n, t) { + for (; n !== null; ) { + const s = Mj(n, t); + if (s) { + if (s.get) + return $s(s.get); + if (typeof s.value == "function") + return $s(s.value); + } + n = Oj(n); + } + function e() { + return null; + } + return e; +} +const M3 = Ns(["a", "abbr", "acronym", "address", "area", "article", "aside", "audio", "b", "bdi", "bdo", "big", "blink", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "content", "data", "datalist", "dd", "decorator", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "element", "em", "fieldset", "figcaption", "figure", "font", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "map", "mark", "marquee", "menu", "menuitem", "meter", "nav", "nobr", "ol", "optgroup", "option", "output", "p", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "search", "section", "select", "shadow", "slot", "small", "source", "spacer", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "tt", "u", "ul", "var", "video", "wbr"]), sb = Ns(["svg", "a", "altglyph", "altglyphdef", "altglyphitem", "animatecolor", "animatemotion", "animatetransform", "circle", "clippath", "defs", "desc", "ellipse", "enterkeyhint", "exportparts", "filter", "font", "g", "glyph", "glyphref", "hkern", "image", "inputmode", "line", "lineargradient", "marker", "mask", "metadata", "mpath", "part", "path", "pattern", "polygon", "polyline", "radialgradient", "rect", "stop", "style", "switch", "symbol", "text", "textpath", "title", "tref", "tspan", "view", "vkern"]), rb = Ns(["feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence"]), Uj = Ns(["animate", "color-profile", "cursor", "discard", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "foreignobject", "hatch", "hatchpath", "mesh", "meshgradient", "meshpatch", "meshrow", "missing-glyph", "script", "set", "solidcolor", "unknown", "use"]), ib = Ns(["math", "menclose", "merror", "mfenced", "mfrac", "mglyph", "mi", "mlabeledtr", "mmultiscripts", "mn", "mo", "mover", "mpadded", "mphantom", "mroot", "mrow", "ms", "mspace", "msqrt", "mstyle", "msub", "msup", "msubsup", "mtable", "mtd", "mtext", "mtr", "munder", "munderover", "mprescripts"]), qj = Ns(["maction", "maligngroup", "malignmark", "mlongdiv", "mscarries", "mscarry", "msgroup", "mstack", "msline", "msrow", "semantics", "annotation", "annotation-xml", "mprescripts", "none"]), D3 = Ns(["#text"]), L3 = Ns(["accept", "action", "align", "alt", "autocapitalize", "autocomplete", "autopictureinpicture", "autoplay", "background", "bgcolor", "border", "capture", "cellpadding", "cellspacing", "checked", "cite", "class", "clear", "color", "cols", "colspan", "controls", "controlslist", "coords", "crossorigin", "datetime", "decoding", "default", "dir", "disabled", "disablepictureinpicture", "disableremoteplayback", "download", "draggable", "enctype", "enterkeyhint", "exportparts", "face", "for", "headers", "height", "hidden", "high", "href", "hreflang", "id", "inert", "inputmode", "integrity", "ismap", "kind", "label", "lang", "list", "loading", "loop", "low", "max", "maxlength", "media", "method", "min", "minlength", "multiple", "muted", "name", "nonce", "noshade", "novalidate", "nowrap", "open", "optimum", "part", "pattern", "placeholder", "playsinline", "popover", "popovertarget", "popovertargetaction", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "rev", "reversed", "role", "rows", "rowspan", "spellcheck", "scope", "selected", "shape", "size", "sizes", "slot", "span", "srclang", "start", "src", "srcset", "step", "style", "summary", "tabindex", "title", "translate", "type", "usemap", "valign", "value", "width", "wrap", "xmlns", "slot"]), ab = Ns(["accent-height", "accumulate", "additive", "alignment-baseline", "amplitude", "ascent", "attributename", "attributetype", "azimuth", "basefrequency", "baseline-shift", "begin", "bias", "by", "class", "clip", "clippathunits", "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile", "color-rendering", "cx", "cy", "d", "dx", "dy", "diffuseconstant", "direction", "display", "divisor", "dur", "edgemode", "elevation", "end", "exponent", "fill", "fill-opacity", "fill-rule", "filter", "filterunits", "flood-color", "flood-opacity", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "fx", "fy", "g1", "g2", "glyph-name", "glyphref", "gradientunits", "gradienttransform", "height", "href", "id", "image-rendering", "in", "in2", "intercept", "k", "k1", "k2", "k3", "k4", "kerning", "keypoints", "keysplines", "keytimes", "lang", "lengthadjust", "letter-spacing", "kernelmatrix", "kernelunitlength", "lighting-color", "local", "marker-end", "marker-mid", "marker-start", "markerheight", "markerunits", "markerwidth", "maskcontentunits", "maskunits", "max", "mask", "mask-type", "media", "method", "mode", "min", "name", "numoctaves", "offset", "operator", "opacity", "order", "orient", "orientation", "origin", "overflow", "paint-order", "path", "pathlength", "patterncontentunits", "patterntransform", "patternunits", "points", "preservealpha", "preserveaspectratio", "primitiveunits", "r", "rx", "ry", "radius", "refx", "refy", "repeatcount", "repeatdur", "restart", "result", "rotate", "scale", "seed", "shape-rendering", "slope", "specularconstant", "specularexponent", "spreadmethod", "startoffset", "stddeviation", "stitchtiles", "stop-color", "stop-opacity", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke", "stroke-width", "style", "surfacescale", "systemlanguage", "tabindex", "tablevalues", "targetx", "targety", "transform", "transform-origin", "text-anchor", "text-decoration", "text-rendering", "textlength", "type", "u1", "u2", "unicode", "values", "viewbox", "visibility", "version", "vert-adv-y", "vert-origin-x", "vert-origin-y", "width", "word-spacing", "wrap", "writing-mode", "xchannelselector", "ychannelselector", "x", "x1", "x2", "xmlns", "y", "y1", "y2", "z", "zoomandpan"]), j3 = Ns(["accent", "accentunder", "align", "bevelled", "close", "columnsalign", "columnlines", "columnspan", "denomalign", "depth", "dir", "display", "displaystyle", "encoding", "fence", "frame", "height", "href", "id", "largeop", "length", "linethickness", "lspace", "lquote", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "minsize", "movablelimits", "notation", "numalign", "open", "rowalign", "rowlines", "rowspacing", "rowspan", "rspace", "rquote", "scriptlevel", "scriptminsize", "scriptsizemultiplier", "selection", "separator", "separators", "stretchy", "subscriptshift", "supscriptshift", "symmetric", "voffset", "width", "xmlns"]), hm = Ns(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]), zj = Tr(/\{\{[\w\W]*|[\w\W]*\}\}/gm), Hj = Tr(/<%[\w\W]*|[\w\W]*%>/gm), Wj = Tr(/\$\{[\w\W]*/gm), Gj = Tr(/^data-[\-\w.\u00B7-\uFFFF]+$/), Yj = Tr(/^aria-[\-\w]+$/), bE = Tr( + /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i + // eslint-disable-line no-useless-escape +), Kj = Tr(/^(?:\w+script|data):/i), Zj = Tr( + /[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g + // eslint-disable-line no-control-regex +), wE = Tr(/^html$/i), Xj = Tr(/^[a-z][.\w]*(-[.\w]+)+$/i); +var F3 = /* @__PURE__ */ Object.freeze({ + __proto__: null, + ARIA_ATTR: Yj, + ATTR_WHITESPACE: Zj, + CUSTOM_ELEMENT: Xj, + DATA_ATTR: Gj, + DOCTYPE_NAME: wE, + ERB_EXPR: Hj, + IS_ALLOWED_URI: bE, + IS_SCRIPT_OR_DATA: Kj, + MUSTACHE_EXPR: zj, + TMPLIT_EXPR: Wj +}); +const Th = { + element: 1, + text: 3, + // Deprecated + progressingInstruction: 7, + comment: 8, + document: 9 +}, Qj = function() { + return typeof window > "u" ? null : window; +}, Jj = function(t, e) { + if (typeof t != "object" || typeof t.createPolicy != "function") + return null; + let s = null; + const r = "data-tt-policy-suffix"; + e && e.hasAttribute(r) && (s = e.getAttribute(r)); + const i = "dompurify" + (s ? "#" + s : ""); + try { + return t.createPolicy(i, { + createHTML(a) { + return a; + }, + createScriptURL(a) { + return a; + } + }); + } catch { + return console.warn("TrustedTypes policy " + i + " could not be created."), null; + } +}, V3 = function() { + return { + afterSanitizeAttributes: [], + afterSanitizeElements: [], + afterSanitizeShadowDOM: [], + beforeSanitizeAttributes: [], + beforeSanitizeElements: [], + beforeSanitizeShadowDOM: [], + uponSanitizeAttribute: [], + uponSanitizeElement: [], + uponSanitizeShadowNode: [] + }; +}; +function xE() { + let n = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : Qj(); + const t = (me) => xE(me); + if (t.version = "3.3.1", t.removed = [], !n || !n.document || n.document.nodeType !== Th.document || !n.Element) + return t.isSupported = !1, t; + let { + document: e + } = n; + const s = e, r = s.currentScript, { + DocumentFragment: i, + HTMLTemplateElement: a, + Node: o, + Element: c, + NodeFilter: u, + NamedNodeMap: f = n.NamedNodeMap || n.MozNamedAttrMap, + HTMLFormElement: p, + DOMParser: g, + trustedTypes: y + } = n, v = c.prototype, b = kh(v, "cloneNode"), w = kh(v, "remove"), E = kh(v, "nextSibling"), x = kh(v, "childNodes"), C = kh(v, "parentNode"); + if (typeof a == "function") { + const me = e.createElement("template"); + me.content && me.content.ownerDocument && (e = me.content.ownerDocument); + } + let _, k = ""; + const { + implementation: A, + createNodeIterator: T, + createDocumentFragment: N, + getElementsByTagName: $ + } = e, { + importNode: D + } = s; + let V = V3(); + t.isSupported = typeof vE == "function" && typeof C == "function" && A && A.createHTMLDocument !== void 0; + const { + MUSTACHE_EXPR: j, + ERB_EXPR: B, + TMPLIT_EXPR: W, + DATA_ATTR: J, + ARIA_ATTR: G, + IS_SCRIPT_OR_DATA: q, + ATTR_WHITESPACE: H, + CUSTOM_ELEMENT: L + } = F3; + let { + IS_ALLOWED_URI: X + } = F3, te = null; + const Te = St({}, [...M3, ...sb, ...rb, ...ib, ...D3]); + let _e = null; + const Je = St({}, [...L3, ...ab, ...j3, ...hm]); + let Re = Object.seal(cw(null, { + tagNameCheck: { + writable: !0, + configurable: !1, + enumerable: !0, + value: null + }, + attributeNameCheck: { + writable: !0, + configurable: !1, + enumerable: !0, + value: null + }, + allowCustomizedBuiltInElements: { + writable: !0, + configurable: !1, + enumerable: !0, + value: !1 + } + })), nt = null, rt = null; + const qe = Object.seal(cw(null, { + tagCheck: { + writable: !0, + configurable: !1, + enumerable: !0, + value: null + }, + attributeCheck: { + writable: !0, + configurable: !1, + enumerable: !0, + value: null + } + })); + let Ye = !0, ee = !0, ge = !1, ze = !0, st = !1, Pt = !0, et = !1, tn = !1, hs = !1, ne = !1, ce = !1, ht = !1, R = !0, F = !1; + const Y = "user-content-"; + let le = !0, I = !1, K = {}, se = null; + const Pe = St({}, ["annotation-xml", "audio", "colgroup", "desc", "foreignobject", "head", "iframe", "math", "mi", "mn", "mo", "ms", "mtext", "noembed", "noframes", "noscript", "plaintext", "script", "style", "svg", "template", "thead", "title", "video", "xmp"]); + let xt = null; + const wn = St({}, ["audio", "video", "img", "source", "image", "track"]); + let Os = null; + const Ms = St({}, ["alt", "class", "for", "id", "label", "name", "pattern", "placeholder", "role", "summary", "title", "value", "style", "xmlns"]), no = "http://www.w3.org/1998/Math/MathML", fi = "http://www.w3.org/2000/svg", ys = "http://www.w3.org/1999/xhtml"; + let pi = ys, so = !1, sa = null; + const Sl = St({}, [no, fi, ys], tb); + let Mr = St({}, ["mi", "mo", "mn", "ms", "mtext"]), ro = St({}, ["annotation-xml"]); + const hh = St({}, ["title", "style", "font", "a", "script"]); + let io = null; + const Zv = ["application/xhtml+xml", "text/html"], sm = "text/html"; + let kn = null, ra = null; + const rm = e.createElement("form"), im = function(O) { + return O instanceof RegExp || O instanceof Function; + }, fh = function() { + let O = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; + if (!(ra && ra === O)) { + if ((!O || typeof O != "object") && (O = {}), O = yi(O), io = // eslint-disable-next-line unicorn/prefer-includes + Zv.indexOf(O.PARSER_MEDIA_TYPE) === -1 ? sm : O.PARSER_MEDIA_TYPE, kn = io === "application/xhtml+xml" ? tb : Vm, te = Lr(O, "ALLOWED_TAGS") ? St({}, O.ALLOWED_TAGS, kn) : Te, _e = Lr(O, "ALLOWED_ATTR") ? St({}, O.ALLOWED_ATTR, kn) : Je, sa = Lr(O, "ALLOWED_NAMESPACES") ? St({}, O.ALLOWED_NAMESPACES, tb) : Sl, Os = Lr(O, "ADD_URI_SAFE_ATTR") ? St(yi(Ms), O.ADD_URI_SAFE_ATTR, kn) : Ms, xt = Lr(O, "ADD_DATA_URI_TAGS") ? St(yi(wn), O.ADD_DATA_URI_TAGS, kn) : wn, se = Lr(O, "FORBID_CONTENTS") ? St({}, O.FORBID_CONTENTS, kn) : Pe, nt = Lr(O, "FORBID_TAGS") ? St({}, O.FORBID_TAGS, kn) : yi({}), rt = Lr(O, "FORBID_ATTR") ? St({}, O.FORBID_ATTR, kn) : yi({}), K = Lr(O, "USE_PROFILES") ? O.USE_PROFILES : !1, Ye = O.ALLOW_ARIA_ATTR !== !1, ee = O.ALLOW_DATA_ATTR !== !1, ge = O.ALLOW_UNKNOWN_PROTOCOLS || !1, ze = O.ALLOW_SELF_CLOSE_IN_ATTR !== !1, st = O.SAFE_FOR_TEMPLATES || !1, Pt = O.SAFE_FOR_XML !== !1, et = O.WHOLE_DOCUMENT || !1, ne = O.RETURN_DOM || !1, ce = O.RETURN_DOM_FRAGMENT || !1, ht = O.RETURN_TRUSTED_TYPE || !1, hs = O.FORCE_BODY || !1, R = O.SANITIZE_DOM !== !1, F = O.SANITIZE_NAMED_PROPS || !1, le = O.KEEP_CONTENT !== !1, I = O.IN_PLACE || !1, X = O.ALLOWED_URI_REGEXP || bE, pi = O.NAMESPACE || ys, Mr = O.MATHML_TEXT_INTEGRATION_POINTS || Mr, ro = O.HTML_INTEGRATION_POINTS || ro, Re = O.CUSTOM_ELEMENT_HANDLING || {}, O.CUSTOM_ELEMENT_HANDLING && im(O.CUSTOM_ELEMENT_HANDLING.tagNameCheck) && (Re.tagNameCheck = O.CUSTOM_ELEMENT_HANDLING.tagNameCheck), O.CUSTOM_ELEMENT_HANDLING && im(O.CUSTOM_ELEMENT_HANDLING.attributeNameCheck) && (Re.attributeNameCheck = O.CUSTOM_ELEMENT_HANDLING.attributeNameCheck), O.CUSTOM_ELEMENT_HANDLING && typeof O.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements == "boolean" && (Re.allowCustomizedBuiltInElements = O.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements), st && (ee = !1), ce && (ne = !0), K && (te = St({}, D3), _e = [], K.html === !0 && (St(te, M3), St(_e, L3)), K.svg === !0 && (St(te, sb), St(_e, ab), St(_e, hm)), K.svgFilters === !0 && (St(te, rb), St(_e, ab), St(_e, hm)), K.mathMl === !0 && (St(te, ib), St(_e, j3), St(_e, hm))), O.ADD_TAGS && (typeof O.ADD_TAGS == "function" ? qe.tagCheck = O.ADD_TAGS : (te === Te && (te = yi(te)), St(te, O.ADD_TAGS, kn))), O.ADD_ATTR && (typeof O.ADD_ATTR == "function" ? qe.attributeCheck = O.ADD_ATTR : (_e === Je && (_e = yi(_e)), St(_e, O.ADD_ATTR, kn))), O.ADD_URI_SAFE_ATTR && St(Os, O.ADD_URI_SAFE_ATTR, kn), O.FORBID_CONTENTS && (se === Pe && (se = yi(se)), St(se, O.FORBID_CONTENTS, kn)), O.ADD_FORBID_CONTENTS && (se === Pe && (se = yi(se)), St(se, O.ADD_FORBID_CONTENTS, kn)), le && (te["#text"] = !0), et && St(te, ["html", "head", "body"]), te.table && (St(te, ["tbody"]), delete nt.tbody), O.TRUSTED_TYPES_POLICY) { + if (typeof O.TRUSTED_TYPES_POLICY.createHTML != "function") + throw Eh('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.'); + if (typeof O.TRUSTED_TYPES_POLICY.createScriptURL != "function") + throw Eh('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.'); + _ = O.TRUSTED_TYPES_POLICY, k = _.createHTML(""); + } else + _ === void 0 && (_ = Jj(y, r)), _ !== null && typeof k == "string" && (k = _.createHTML("")); + Ns && Ns(O), ra = O; + } + }, ph = St({}, [...sb, ...rb, ...Uj]), mh = St({}, [...ib, ...qj]), Xv = function(O) { + let re = C(O); + (!re || !re.tagName) && (re = { + namespaceURI: pi, + tagName: "template" + }); + const Ce = Vm(O.tagName), qt = Vm(re.tagName); + return sa[O.namespaceURI] ? O.namespaceURI === fi ? re.namespaceURI === ys ? Ce === "svg" : re.namespaceURI === no ? Ce === "svg" && (qt === "annotation-xml" || Mr[qt]) : !!ph[Ce] : O.namespaceURI === no ? re.namespaceURI === ys ? Ce === "math" : re.namespaceURI === fi ? Ce === "math" && ro[qt] : !!mh[Ce] : O.namespaceURI === ys ? re.namespaceURI === fi && !ro[qt] || re.namespaceURI === no && !Mr[qt] ? !1 : !mh[Ce] && (hh[Ce] || !ph[Ce]) : !!(io === "application/xhtml+xml" && sa[O.namespaceURI]) : !1; + }, gr = function(O) { + _h(t.removed, { + element: O + }); + try { + C(O).removeChild(O); + } catch { + w(O); + } + }, ia = function(O, re) { + try { + _h(t.removed, { + attribute: re.getAttributeNode(O), + from: re + }); + } catch { + _h(t.removed, { + attribute: null, + from: re + }); + } + if (re.removeAttribute(O), O === "is") + if (ne || ce) + try { + gr(re); + } catch { + } + else + try { + re.setAttribute(O, ""); + } catch { + } + }, am = function(O) { + let re = null, Ce = null; + if (hs) + O = "<remove></remove>" + O; + else { + const gn = nb(O, /^[\r\n\t ]+/); + Ce = gn && gn[0]; + } + io === "application/xhtml+xml" && pi === ys && (O = '<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>' + O + "</body></html>"); + const qt = _ ? _.createHTML(O) : O; + if (pi === ys) + try { + re = new g().parseFromString(qt, io); + } catch { + } + if (!re || !re.documentElement) { + re = A.createDocument(pi, "template", null); + try { + re.documentElement.innerHTML = so ? k : qt; + } catch { + } + } + const Gt = re.body || re.documentElement; + return O && Ce && Gt.insertBefore(e.createTextNode(Ce), Gt.childNodes[0] || null), pi === ys ? $.call(re, et ? "html" : "body")[0] : et ? re.documentElement : Gt; + }, M = function(O) { + return T.call( + O.ownerDocument || O, + O, + // eslint-disable-next-line no-bitwise + u.SHOW_ELEMENT | u.SHOW_COMMENT | u.SHOW_TEXT | u.SHOW_PROCESSING_INSTRUCTION | u.SHOW_CDATA_SECTION, + null + ); + }, ie = function(O) { + return O instanceof p && (typeof O.nodeName != "string" || typeof O.textContent != "string" || typeof O.removeChild != "function" || !(O.attributes instanceof f) || typeof O.removeAttribute != "function" || typeof O.setAttribute != "function" || typeof O.namespaceURI != "string" || typeof O.insertBefore != "function" || typeof O.hasChildNodes != "function"); + }, be = function(O) { + return typeof o == "function" && O instanceof o; + }; + function Oe(me, O, re) { + dm(me, (Ce) => { + Ce.call(t, O, re, ra); + }); + } + const Lt = function(O) { + let re = null; + if (Oe(V.beforeSanitizeElements, O, null), ie(O)) + return gr(O), !0; + const Ce = kn(O.nodeName); + if (Oe(V.uponSanitizeElement, O, { + tagName: Ce, + allowedTags: te + }), Pt && O.hasChildNodes() && !be(O.firstElementChild) && vs(/<[/\w!]/g, O.innerHTML) && vs(/<[/\w!]/g, O.textContent) || O.nodeType === Th.progressingInstruction || Pt && O.nodeType === Th.comment && vs(/<[/\w]/g, O.data)) + return gr(O), !0; + if (!(qe.tagCheck instanceof Function && qe.tagCheck(Ce)) && (!te[Ce] || nt[Ce])) { + if (!nt[Ce] && Tt(Ce) && (Re.tagNameCheck instanceof RegExp && vs(Re.tagNameCheck, Ce) || Re.tagNameCheck instanceof Function && Re.tagNameCheck(Ce))) + return !1; + if (le && !se[Ce]) { + const qt = C(O) || O.parentNode, Gt = x(O) || O.childNodes; + if (Gt && qt) { + const gn = Gt.length; + for (let fs = gn - 1; fs >= 0; --fs) { + const Dr = b(Gt[fs], !0); + Dr.__removalCount = (O.__removalCount || 0) + 1, qt.insertBefore(Dr, E(O)); + } + } + } + return gr(O), !0; + } + return O instanceof c && !Xv(O) || (Ce === "noscript" || Ce === "noembed" || Ce === "noframes") && vs(/<\/no(script|embed|frames)/i, O.innerHTML) ? (gr(O), !0) : (st && O.nodeType === Th.text && (re = O.textContent, dm([j, B, W], (qt) => { + re = Sh(re, qt, " "); + }), O.textContent !== re && (_h(t.removed, { + element: O.cloneNode() + }), O.textContent = re)), Oe(V.afterSanitizeElements, O, null), !1); + }, Zt = function(O, re, Ce) { + if (R && (re === "id" || re === "name") && (Ce in e || Ce in rm)) + return !1; + if (!(ee && !rt[re] && vs(J, re))) { + if (!(Ye && vs(G, re))) { + if (!(qe.attributeCheck instanceof Function && qe.attributeCheck(re, O))) { + if (!_e[re] || rt[re]) { + if ( + // First condition does a very basic check if a) it's basically a valid custom element tagname AND + // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck + // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck + !(Tt(O) && (Re.tagNameCheck instanceof RegExp && vs(Re.tagNameCheck, O) || Re.tagNameCheck instanceof Function && Re.tagNameCheck(O)) && (Re.attributeNameCheck instanceof RegExp && vs(Re.attributeNameCheck, re) || Re.attributeNameCheck instanceof Function && Re.attributeNameCheck(re, O)) || // Alternative, second condition checks if it's an `is`-attribute, AND + // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck + re === "is" && Re.allowCustomizedBuiltInElements && (Re.tagNameCheck instanceof RegExp && vs(Re.tagNameCheck, Ce) || Re.tagNameCheck instanceof Function && Re.tagNameCheck(Ce))) + ) return !1; + } else if (!Os[re]) { + if (!vs(X, Sh(Ce, H, ""))) { + if (!((re === "src" || re === "xlink:href" || re === "href") && O !== "script" && jj(Ce, "data:") === 0 && xt[O])) { + if (!(ge && !vs(q, Sh(Ce, H, "")))) { + if (Ce) + return !1; + } + } + } + } + } + } + } + return !0; + }, Tt = function(O) { + return O !== "annotation-xml" && nb(O, L); + }, Ct = function(O) { + Oe(V.beforeSanitizeAttributes, O, null); + const { + attributes: re + } = O; + if (!re || ie(O)) + return; + const Ce = { + attrName: "", + attrValue: "", + keepAttr: !0, + allowedAttributes: _e, + forceKeepAttr: void 0 + }; + let qt = re.length; + for (; qt--; ) { + const Gt = re[qt], { + name: gn, + namespaceURI: fs, + value: Dr + } = Gt, Qc = kn(gn), Qv = Dr; + let ts = gn === "value" ? Qv : Fj(Qv); + if (Ce.attrName = Qc, Ce.attrValue = ts, Ce.keepAttr = !0, Ce.forceKeepAttr = void 0, Oe(V.uponSanitizeAttribute, O, Ce), ts = Ce.attrValue, F && (Qc === "id" || Qc === "name") && (ia(gn, O), ts = Y + ts), Pt && vs(/((--!?|])>)|<\/(style|title|textarea)/i, ts)) { + ia(gn, O); + continue; + } + if (Qc === "attributename" && nb(ts, "href")) { + ia(gn, O); + continue; + } + if (Ce.forceKeepAttr) + continue; + if (!Ce.keepAttr) { + ia(gn, O); + continue; + } + if (!ze && vs(/\/>/i, ts)) { + ia(gn, O); + continue; + } + st && dm([j, B, W], (h3) => { + ts = Sh(ts, h3, " "); + }); + const d3 = kn(O.nodeName); + if (!Zt(d3, Qc, ts)) { + ia(gn, O); + continue; + } + if (_ && typeof y == "object" && typeof y.getAttributeType == "function" && !fs) + switch (y.getAttributeType(d3, Qc)) { + case "TrustedHTML": { + ts = _.createHTML(ts); + break; + } + case "TrustedScriptURL": { + ts = _.createScriptURL(ts); + break; + } + } + if (ts !== Qv) + try { + fs ? O.setAttributeNS(fs, gn, ts) : O.setAttribute(gn, ts), ie(O) ? gr(O) : O3(t.removed); + } catch { + ia(gn, O); + } + } + Oe(V.afterSanitizeAttributes, O, null); + }, es = function me(O) { + let re = null; + const Ce = M(O); + for (Oe(V.beforeSanitizeShadowDOM, O, null); re = Ce.nextNode(); ) + Oe(V.uponSanitizeShadowNode, re, null), Lt(re), Ct(re), re.content instanceof i && me(re.content); + Oe(V.afterSanitizeShadowDOM, O, null); + }; + return t.sanitize = function(me) { + let O = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, re = null, Ce = null, qt = null, Gt = null; + if (so = !me, so && (me = "<!-->"), typeof me != "string" && !be(me)) + if (typeof me.toString == "function") { + if (me = me.toString(), typeof me != "string") + throw Eh("dirty is not a string, aborting"); + } else + throw Eh("toString is not a function"); + if (!t.isSupported) + return me; + if (tn || fh(O), t.removed = [], typeof me == "string" && (I = !1), I) { + if (me.nodeName) { + const Dr = kn(me.nodeName); + if (!te[Dr] || nt[Dr]) + throw Eh("root node is forbidden and cannot be sanitized in-place"); + } + } else if (me instanceof o) + re = am("<!---->"), Ce = re.ownerDocument.importNode(me, !0), Ce.nodeType === Th.element && Ce.nodeName === "BODY" || Ce.nodeName === "HTML" ? re = Ce : re.appendChild(Ce); + else { + if (!ne && !st && !et && // eslint-disable-next-line unicorn/prefer-includes + me.indexOf("<") === -1) + return _ && ht ? _.createHTML(me) : me; + if (re = am(me), !re) + return ne ? null : ht ? k : ""; + } + re && hs && gr(re.firstChild); + const gn = M(I ? me : re); + for (; qt = gn.nextNode(); ) + Lt(qt), Ct(qt), qt.content instanceof i && es(qt.content); + if (I) + return me; + if (ne) { + if (ce) + for (Gt = N.call(re.ownerDocument); re.firstChild; ) + Gt.appendChild(re.firstChild); + else + Gt = re; + return (_e.shadowroot || _e.shadowrootmode) && (Gt = D.call(s, Gt, !0)), Gt; + } + let fs = et ? re.outerHTML : re.innerHTML; + return et && te["!doctype"] && re.ownerDocument && re.ownerDocument.doctype && re.ownerDocument.doctype.name && vs(wE, re.ownerDocument.doctype.name) && (fs = "<!DOCTYPE " + re.ownerDocument.doctype.name + `> +` + fs), st && dm([j, B, W], (Dr) => { + fs = Sh(fs, Dr, " "); + }), _ && ht ? _.createHTML(fs) : fs; + }, t.setConfig = function() { + let me = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; + fh(me), tn = !0; + }, t.clearConfig = function() { + ra = null, tn = !1; + }, t.isValidAttribute = function(me, O, re) { + ra || fh({}); + const Ce = kn(me), qt = kn(O); + return Zt(Ce, qt, re); + }, t.addHook = function(me, O) { + typeof O == "function" && _h(V[me], O); + }, t.removeHook = function(me, O) { + if (O !== void 0) { + const re = Dj(V[me], O); + return re === -1 ? void 0 : Lj(V[me], re, 1)[0]; + } + return O3(V[me]); + }, t.removeHooks = function(me) { + V[me] = []; + }, t.removeAllHooks = function() { + V = V3(); + }, t; +} +var eF = xE(), zt; +(function(n) { + n.assertEqual = (r) => { + }; + function t(r) { + } + n.assertIs = t; + function e(r) { + throw new Error(); + } + n.assertNever = e, n.arrayToEnum = (r) => { + const i = {}; + for (const a of r) + i[a] = a; + return i; + }, n.getValidEnumValues = (r) => { + const i = n.objectKeys(r).filter((o) => typeof r[r[o]] != "number"), a = {}; + for (const o of i) + a[o] = r[o]; + return n.objectValues(a); + }, n.objectValues = (r) => n.objectKeys(r).map(function(i) { + return r[i]; + }), n.objectKeys = typeof Object.keys == "function" ? (r) => Object.keys(r) : (r) => { + const i = []; + for (const a in r) + Object.prototype.hasOwnProperty.call(r, a) && i.push(a); + return i; + }, n.find = (r, i) => { + for (const a of r) + if (i(a)) + return a; + }, n.isInteger = typeof Number.isInteger == "function" ? (r) => Number.isInteger(r) : (r) => typeof r == "number" && Number.isFinite(r) && Math.floor(r) === r; + function s(r, i = " | ") { + return r.map((a) => typeof a == "string" ? `'${a}'` : a).join(i); + } + n.joinValues = s, n.jsonStringifyReplacer = (r, i) => typeof i == "bigint" ? i.toString() : i; +})(zt || (zt = {})); +var B3; +(function(n) { + n.mergeShapes = (t, e) => ({ + ...t, + ...e + // second overwrites first + }); +})(B3 || (B3 = {})); +const Ae = zt.arrayToEnum([ + "string", + "nan", + "number", + "integer", + "float", + "boolean", + "date", + "bigint", + "symbol", + "function", + "undefined", + "null", + "array", + "object", + "unknown", + "promise", + "void", + "never", + "map", + "set" +]), mo = (n) => { + switch (typeof n) { + case "undefined": + return Ae.undefined; + case "string": + return Ae.string; + case "number": + return Number.isNaN(n) ? Ae.nan : Ae.number; + case "boolean": + return Ae.boolean; + case "function": + return Ae.function; + case "bigint": + return Ae.bigint; + case "symbol": + return Ae.symbol; + case "object": + return Array.isArray(n) ? Ae.array : n === null ? Ae.null : n.then && typeof n.then == "function" && n.catch && typeof n.catch == "function" ? Ae.promise : typeof Map < "u" && n instanceof Map ? Ae.map : typeof Set < "u" && n instanceof Set ? Ae.set : typeof Date < "u" && n instanceof Date ? Ae.date : Ae.object; + default: + return Ae.unknown; + } +}, ue = zt.arrayToEnum([ + "invalid_type", + "invalid_literal", + "custom", + "invalid_union", + "invalid_union_discriminator", + "invalid_enum_value", + "unrecognized_keys", + "invalid_arguments", + "invalid_return_type", + "invalid_date", + "invalid_string", + "too_small", + "too_big", + "invalid_intersection_types", + "not_multiple_of", + "not_finite" +]); +class Ba extends Error { + get errors() { + return this.issues; + } + constructor(t) { + super(), this.issues = [], this.addIssue = (s) => { + this.issues = [...this.issues, s]; + }, this.addIssues = (s = []) => { + this.issues = [...this.issues, ...s]; + }; + const e = new.target.prototype; + Object.setPrototypeOf ? Object.setPrototypeOf(this, e) : this.__proto__ = e, this.name = "ZodError", this.issues = t; + } + format(t) { + const e = t || function(i) { + return i.message; + }, s = { _errors: [] }, r = (i) => { + for (const a of i.issues) + if (a.code === "invalid_union") + a.unionErrors.map(r); + else if (a.code === "invalid_return_type") + r(a.returnTypeError); + else if (a.code === "invalid_arguments") + r(a.argumentsError); + else if (a.path.length === 0) + s._errors.push(e(a)); + else { + let o = s, c = 0; + for (; c < a.path.length; ) { + const u = a.path[c]; + c === a.path.length - 1 ? (o[u] = o[u] || { _errors: [] }, o[u]._errors.push(e(a))) : o[u] = o[u] || { _errors: [] }, o = o[u], c++; + } + } + }; + return r(this), s; + } + static assert(t) { + if (!(t instanceof Ba)) + throw new Error(`Not a ZodError: ${t}`); + } + toString() { + return this.message; + } + get message() { + return JSON.stringify(this.issues, zt.jsonStringifyReplacer, 2); + } + get isEmpty() { + return this.issues.length === 0; + } + flatten(t = (e) => e.message) { + const e = {}, s = []; + for (const r of this.issues) + if (r.path.length > 0) { + const i = r.path[0]; + e[i] = e[i] || [], e[i].push(t(r)); + } else + s.push(t(r)); + return { formErrors: s, fieldErrors: e }; + } + get formErrors() { + return this.flatten(); + } +} +Ba.create = (n) => new Ba(n); +const hw = (n, t) => { + let e; + switch (n.code) { + case ue.invalid_type: + n.received === Ae.undefined ? e = "Required" : e = `Expected ${n.expected}, received ${n.received}`; + break; + case ue.invalid_literal: + e = `Invalid literal value, expected ${JSON.stringify(n.expected, zt.jsonStringifyReplacer)}`; + break; + case ue.unrecognized_keys: + e = `Unrecognized key(s) in object: ${zt.joinValues(n.keys, ", ")}`; + break; + case ue.invalid_union: + e = "Invalid input"; + break; + case ue.invalid_union_discriminator: + e = `Invalid discriminator value. Expected ${zt.joinValues(n.options)}`; + break; + case ue.invalid_enum_value: + e = `Invalid enum value. Expected ${zt.joinValues(n.options)}, received '${n.received}'`; + break; + case ue.invalid_arguments: + e = "Invalid function arguments"; + break; + case ue.invalid_return_type: + e = "Invalid function return type"; + break; + case ue.invalid_date: + e = "Invalid date"; + break; + case ue.invalid_string: + typeof n.validation == "object" ? "includes" in n.validation ? (e = `Invalid input: must include "${n.validation.includes}"`, typeof n.validation.position == "number" && (e = `${e} at one or more positions greater than or equal to ${n.validation.position}`)) : "startsWith" in n.validation ? e = `Invalid input: must start with "${n.validation.startsWith}"` : "endsWith" in n.validation ? e = `Invalid input: must end with "${n.validation.endsWith}"` : zt.assertNever(n.validation) : n.validation !== "regex" ? e = `Invalid ${n.validation}` : e = "Invalid"; + break; + case ue.too_small: + n.type === "array" ? e = `Array must contain ${n.exact ? "exactly" : n.inclusive ? "at least" : "more than"} ${n.minimum} element(s)` : n.type === "string" ? e = `String must contain ${n.exact ? "exactly" : n.inclusive ? "at least" : "over"} ${n.minimum} character(s)` : n.type === "number" ? e = `Number must be ${n.exact ? "exactly equal to " : n.inclusive ? "greater than or equal to " : "greater than "}${n.minimum}` : n.type === "bigint" ? e = `Number must be ${n.exact ? "exactly equal to " : n.inclusive ? "greater than or equal to " : "greater than "}${n.minimum}` : n.type === "date" ? e = `Date must be ${n.exact ? "exactly equal to " : n.inclusive ? "greater than or equal to " : "greater than "}${new Date(Number(n.minimum))}` : e = "Invalid input"; + break; + case ue.too_big: + n.type === "array" ? e = `Array must contain ${n.exact ? "exactly" : n.inclusive ? "at most" : "less than"} ${n.maximum} element(s)` : n.type === "string" ? e = `String must contain ${n.exact ? "exactly" : n.inclusive ? "at most" : "under"} ${n.maximum} character(s)` : n.type === "number" ? e = `Number must be ${n.exact ? "exactly" : n.inclusive ? "less than or equal to" : "less than"} ${n.maximum}` : n.type === "bigint" ? e = `BigInt must be ${n.exact ? "exactly" : n.inclusive ? "less than or equal to" : "less than"} ${n.maximum}` : n.type === "date" ? e = `Date must be ${n.exact ? "exactly" : n.inclusive ? "smaller than or equal to" : "smaller than"} ${new Date(Number(n.maximum))}` : e = "Invalid input"; + break; + case ue.custom: + e = "Invalid input"; + break; + case ue.invalid_intersection_types: + e = "Intersection results could not be merged"; + break; + case ue.not_multiple_of: + e = `Number must be a multiple of ${n.multipleOf}`; + break; + case ue.not_finite: + e = "Number must be finite"; + break; + default: + e = t.defaultError, zt.assertNever(n); + } + return { message: e }; +}; +let tF = hw; +function nF() { + return tF; +} +const sF = (n) => { + const { data: t, path: e, errorMaps: s, issueData: r } = n, i = [...e, ...r.path || []], a = { + ...r, + path: i + }; + if (r.message !== void 0) + return { + ...r, + path: i, + message: r.message + }; + let o = ""; + const c = s.filter((u) => !!u).slice().reverse(); + for (const u of c) + o = u(a, { data: t, defaultError: o }).message; + return { + ...r, + path: i, + message: o + }; +}; +function we(n, t) { + const e = nF(), s = sF({ + issueData: t, + data: n.data, + path: n.path, + errorMaps: [ + n.common.contextualErrorMap, + // contextual error map is first priority + n.schemaErrorMap, + // then schema-bound map if available + e, + // then global override map + e === hw ? void 0 : hw + // then global default map + ].filter((r) => !!r) + }); + n.common.issues.push(s); +} +class ur { + constructor() { + this.value = "valid"; + } + dirty() { + this.value === "valid" && (this.value = "dirty"); + } + abort() { + this.value !== "aborted" && (this.value = "aborted"); + } + static mergeArray(t, e) { + const s = []; + for (const r of e) { + if (r.status === "aborted") + return ut; + r.status === "dirty" && t.dirty(), s.push(r.value); + } + return { status: t.value, value: s }; + } + static async mergeObjectAsync(t, e) { + const s = []; + for (const r of e) { + const i = await r.key, a = await r.value; + s.push({ + key: i, + value: a + }); + } + return ur.mergeObjectSync(t, s); + } + static mergeObjectSync(t, e) { + const s = {}; + for (const r of e) { + const { key: i, value: a } = r; + if (i.status === "aborted" || a.status === "aborted") + return ut; + i.status === "dirty" && t.dirty(), a.status === "dirty" && t.dirty(), i.value !== "__proto__" && (typeof a.value < "u" || r.alwaysSet) && (s[i.value] = a.value); + } + return { status: t.value, value: s }; + } +} +const ut = Object.freeze({ + status: "aborted" +}), Oh = (n) => ({ status: "dirty", value: n }), Rr = (n) => ({ status: "valid", value: n }), U3 = (n) => n.status === "aborted", q3 = (n) => n.status === "dirty", Md = (n) => n.status === "valid", Vg = (n) => typeof Promise < "u" && n instanceof Promise; +var Ne; +(function(n) { + n.errToObj = (t) => typeof t == "string" ? { message: t } : t || {}, n.toString = (t) => typeof t == "string" ? t : t == null ? void 0 : t.message; +})(Ne || (Ne = {})); +class ol { + constructor(t, e, s, r) { + this._cachedPath = [], this.parent = t, this.data = e, this._path = s, this._key = r; + } + get path() { + return this._cachedPath.length || (Array.isArray(this._key) ? this._cachedPath.push(...this._path, ...this._key) : this._cachedPath.push(...this._path, this._key)), this._cachedPath; + } +} +const z3 = (n, t) => { + if (Md(t)) + return { success: !0, data: t.value }; + if (!n.common.issues.length) + throw new Error("Validation failed but no issues detected."); + return { + success: !1, + get error() { + if (this._error) + return this._error; + const e = new Ba(n.common.issues); + return this._error = e, this._error; + } + }; +}; +function Et(n) { + if (!n) + return {}; + const { errorMap: t, invalid_type_error: e, required_error: s, description: r } = n; + if (t && (e || s)) + throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`); + return t ? { errorMap: t, description: r } : { errorMap: (a, o) => { + const { message: c } = n; + return a.code === "invalid_enum_value" ? { message: c ?? o.defaultError } : typeof o.data > "u" ? { message: c ?? s ?? o.defaultError } : a.code !== "invalid_type" ? { message: o.defaultError } : { message: c ?? e ?? o.defaultError }; + }, description: r }; +} +class Bt { + get description() { + return this._def.description; + } + _getType(t) { + return mo(t.data); + } + _getOrReturnCtx(t, e) { + return e || { + common: t.parent.common, + data: t.data, + parsedType: mo(t.data), + schemaErrorMap: this._def.errorMap, + path: t.path, + parent: t.parent + }; + } + _processInputParams(t) { + return { + status: new ur(), + ctx: { + common: t.parent.common, + data: t.data, + parsedType: mo(t.data), + schemaErrorMap: this._def.errorMap, + path: t.path, + parent: t.parent + } + }; + } + _parseSync(t) { + const e = this._parse(t); + if (Vg(e)) + throw new Error("Synchronous parse encountered promise."); + return e; + } + _parseAsync(t) { + const e = this._parse(t); + return Promise.resolve(e); + } + parse(t, e) { + const s = this.safeParse(t, e); + if (s.success) + return s.data; + throw s.error; + } + safeParse(t, e) { + const s = { + common: { + issues: [], + async: (e == null ? void 0 : e.async) ?? !1, + contextualErrorMap: e == null ? void 0 : e.errorMap + }, + path: (e == null ? void 0 : e.path) || [], + schemaErrorMap: this._def.errorMap, + parent: null, + data: t, + parsedType: mo(t) + }, r = this._parseSync({ data: t, path: s.path, parent: s }); + return z3(s, r); + } + "~validate"(t) { + var s, r; + const e = { + common: { + issues: [], + async: !!this["~standard"].async + }, + path: [], + schemaErrorMap: this._def.errorMap, + parent: null, + data: t, + parsedType: mo(t) + }; + if (!this["~standard"].async) + try { + const i = this._parseSync({ data: t, path: [], parent: e }); + return Md(i) ? { + value: i.value + } : { + issues: e.common.issues + }; + } catch (i) { + (r = (s = i == null ? void 0 : i.message) == null ? void 0 : s.toLowerCase()) != null && r.includes("encountered") && (this["~standard"].async = !0), e.common = { + issues: [], + async: !0 + }; + } + return this._parseAsync({ data: t, path: [], parent: e }).then((i) => Md(i) ? { + value: i.value + } : { + issues: e.common.issues + }); + } + async parseAsync(t, e) { + const s = await this.safeParseAsync(t, e); + if (s.success) + return s.data; + throw s.error; + } + async safeParseAsync(t, e) { + const s = { + common: { + issues: [], + contextualErrorMap: e == null ? void 0 : e.errorMap, + async: !0 + }, + path: (e == null ? void 0 : e.path) || [], + schemaErrorMap: this._def.errorMap, + parent: null, + data: t, + parsedType: mo(t) + }, r = this._parse({ data: t, path: s.path, parent: s }), i = await (Vg(r) ? r : Promise.resolve(r)); + return z3(s, i); + } + refine(t, e) { + const s = (r) => typeof e == "string" || typeof e > "u" ? { message: e } : typeof e == "function" ? e(r) : e; + return this._refinement((r, i) => { + const a = t(r), o = () => i.addIssue({ + code: ue.custom, + ...s(r) + }); + return typeof Promise < "u" && a instanceof Promise ? a.then((c) => c ? !0 : (o(), !1)) : a ? !0 : (o(), !1); + }); + } + refinement(t, e) { + return this._refinement((s, r) => t(s) ? !0 : (r.addIssue(typeof e == "function" ? e(s, r) : e), !1)); + } + _refinement(t) { + return new Ld({ + schema: this, + typeName: dt.ZodEffects, + effect: { type: "refinement", refinement: t } + }); + } + superRefine(t) { + return this._refinement(t); + } + constructor(t) { + this.spa = this.safeParseAsync, this._def = t, this.parse = this.parse.bind(this), this.safeParse = this.safeParse.bind(this), this.parseAsync = this.parseAsync.bind(this), this.safeParseAsync = this.safeParseAsync.bind(this), this.spa = this.spa.bind(this), this.refine = this.refine.bind(this), this.refinement = this.refinement.bind(this), this.superRefine = this.superRefine.bind(this), this.optional = this.optional.bind(this), this.nullable = this.nullable.bind(this), this.nullish = this.nullish.bind(this), this.array = this.array.bind(this), this.promise = this.promise.bind(this), this.or = this.or.bind(this), this.and = this.and.bind(this), this.transform = this.transform.bind(this), this.brand = this.brand.bind(this), this.default = this.default.bind(this), this.catch = this.catch.bind(this), this.describe = this.describe.bind(this), this.pipe = this.pipe.bind(this), this.readonly = this.readonly.bind(this), this.isNullable = this.isNullable.bind(this), this.isOptional = this.isOptional.bind(this), this["~standard"] = { + version: 1, + vendor: "zod", + validate: (e) => this["~validate"](e) + }; + } + optional() { + return tl.create(this, this._def); + } + nullable() { + return jd.create(this, this._def); + } + nullish() { + return this.nullable().optional(); + } + array() { + return Di.create(this); + } + promise() { + return zg.create(this, this._def); + } + or(t) { + return Ug.create([this, t], this._def); + } + and(t) { + return qg.create(this, t, this._def); + } + transform(t) { + return new Ld({ + ...Et(this._def), + schema: this, + typeName: dt.ZodEffects, + effect: { type: "transform", transform: t } + }); + } + default(t) { + const e = typeof t == "function" ? t : () => t; + return new mw({ + ...Et(this._def), + innerType: this, + defaultValue: e, + typeName: dt.ZodDefault + }); + } + brand() { + return new kF({ + typeName: dt.ZodBranded, + type: this, + ...Et(this._def) + }); + } + catch(t) { + const e = typeof t == "function" ? t : () => t; + return new gw({ + ...Et(this._def), + innerType: this, + catchValue: e, + typeName: dt.ZodCatch + }); + } + describe(t) { + const e = this.constructor; + return new e({ + ...this._def, + description: t + }); + } + pipe(t) { + return zx.create(this, t); + } + readonly() { + return yw.create(this); + } + isOptional() { + return this.safeParse(void 0).success; + } + isNullable() { + return this.safeParse(null).success; + } +} +const rF = /^c[^\s-]{8,}$/i, iF = /^[0-9a-z]+$/, aF = /^[0-9A-HJKMNP-TV-Z]{26}$/i, oF = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i, lF = /^[a-z0-9_-]{21}$/i, cF = /^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/, uF = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/, dF = /^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i, hF = "^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$"; +let ob; +const fF = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/, pF = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/, mF = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/, gF = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/, yF = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/, vF = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/, CE = "((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))", bF = new RegExp(`^${CE}$`); +function _E(n) { + let t = "[0-5]\\d"; + n.precision ? t = `${t}\\.\\d{${n.precision}}` : n.precision == null && (t = `${t}(\\.\\d+)?`); + const e = n.precision ? "+" : "?"; + return `([01]\\d|2[0-3]):[0-5]\\d(:${t})${e}`; +} +function wF(n) { + return new RegExp(`^${_E(n)}$`); +} +function xF(n) { + let t = `${CE}T${_E(n)}`; + const e = []; + return e.push(n.local ? "Z?" : "Z"), n.offset && e.push("([+-]\\d{2}:?\\d{2})"), t = `${t}(${e.join("|")})`, new RegExp(`^${t}$`); +} +function CF(n, t) { + return !!((t === "v4" || !t) && fF.test(n) || (t === "v6" || !t) && mF.test(n)); +} +function _F(n, t) { + if (!cF.test(n)) + return !1; + try { + const [e] = n.split("."); + if (!e) + return !1; + const s = e.replace(/-/g, "+").replace(/_/g, "/").padEnd(e.length + (4 - e.length % 4) % 4, "="), r = JSON.parse(atob(s)); + return !(typeof r != "object" || r === null || "typ" in r && (r == null ? void 0 : r.typ) !== "JWT" || !r.alg || t && r.alg !== t); + } catch { + return !1; + } +} +function SF(n, t) { + return !!((t === "v4" || !t) && pF.test(n) || (t === "v6" || !t) && gF.test(n)); +} +class el extends Bt { + _parse(t) { + if (this._def.coerce && (t.data = String(t.data)), this._getType(t) !== Ae.string) { + const i = this._getOrReturnCtx(t); + return we(i, { + code: ue.invalid_type, + expected: Ae.string, + received: i.parsedType + }), ut; + } + const s = new ur(); + let r; + for (const i of this._def.checks) + if (i.kind === "min") + t.data.length < i.value && (r = this._getOrReturnCtx(t, r), we(r, { + code: ue.too_small, + minimum: i.value, + type: "string", + inclusive: !0, + exact: !1, + message: i.message + }), s.dirty()); + else if (i.kind === "max") + t.data.length > i.value && (r = this._getOrReturnCtx(t, r), we(r, { + code: ue.too_big, + maximum: i.value, + type: "string", + inclusive: !0, + exact: !1, + message: i.message + }), s.dirty()); + else if (i.kind === "length") { + const a = t.data.length > i.value, o = t.data.length < i.value; + (a || o) && (r = this._getOrReturnCtx(t, r), a ? we(r, { + code: ue.too_big, + maximum: i.value, + type: "string", + inclusive: !0, + exact: !0, + message: i.message + }) : o && we(r, { + code: ue.too_small, + minimum: i.value, + type: "string", + inclusive: !0, + exact: !0, + message: i.message + }), s.dirty()); + } else if (i.kind === "email") + dF.test(t.data) || (r = this._getOrReturnCtx(t, r), we(r, { + validation: "email", + code: ue.invalid_string, + message: i.message + }), s.dirty()); + else if (i.kind === "emoji") + ob || (ob = new RegExp(hF, "u")), ob.test(t.data) || (r = this._getOrReturnCtx(t, r), we(r, { + validation: "emoji", + code: ue.invalid_string, + message: i.message + }), s.dirty()); + else if (i.kind === "uuid") + oF.test(t.data) || (r = this._getOrReturnCtx(t, r), we(r, { + validation: "uuid", + code: ue.invalid_string, + message: i.message + }), s.dirty()); + else if (i.kind === "nanoid") + lF.test(t.data) || (r = this._getOrReturnCtx(t, r), we(r, { + validation: "nanoid", + code: ue.invalid_string, + message: i.message + }), s.dirty()); + else if (i.kind === "cuid") + rF.test(t.data) || (r = this._getOrReturnCtx(t, r), we(r, { + validation: "cuid", + code: ue.invalid_string, + message: i.message + }), s.dirty()); + else if (i.kind === "cuid2") + iF.test(t.data) || (r = this._getOrReturnCtx(t, r), we(r, { + validation: "cuid2", + code: ue.invalid_string, + message: i.message + }), s.dirty()); + else if (i.kind === "ulid") + aF.test(t.data) || (r = this._getOrReturnCtx(t, r), we(r, { + validation: "ulid", + code: ue.invalid_string, + message: i.message + }), s.dirty()); + else if (i.kind === "url") + try { + new URL(t.data); + } catch { + r = this._getOrReturnCtx(t, r), we(r, { + validation: "url", + code: ue.invalid_string, + message: i.message + }), s.dirty(); + } + else i.kind === "regex" ? (i.regex.lastIndex = 0, i.regex.test(t.data) || (r = this._getOrReturnCtx(t, r), we(r, { + validation: "regex", + code: ue.invalid_string, + message: i.message + }), s.dirty())) : i.kind === "trim" ? t.data = t.data.trim() : i.kind === "includes" ? t.data.includes(i.value, i.position) || (r = this._getOrReturnCtx(t, r), we(r, { + code: ue.invalid_string, + validation: { includes: i.value, position: i.position }, + message: i.message + }), s.dirty()) : i.kind === "toLowerCase" ? t.data = t.data.toLowerCase() : i.kind === "toUpperCase" ? t.data = t.data.toUpperCase() : i.kind === "startsWith" ? t.data.startsWith(i.value) || (r = this._getOrReturnCtx(t, r), we(r, { + code: ue.invalid_string, + validation: { startsWith: i.value }, + message: i.message + }), s.dirty()) : i.kind === "endsWith" ? t.data.endsWith(i.value) || (r = this._getOrReturnCtx(t, r), we(r, { + code: ue.invalid_string, + validation: { endsWith: i.value }, + message: i.message + }), s.dirty()) : i.kind === "datetime" ? xF(i).test(t.data) || (r = this._getOrReturnCtx(t, r), we(r, { + code: ue.invalid_string, + validation: "datetime", + message: i.message + }), s.dirty()) : i.kind === "date" ? bF.test(t.data) || (r = this._getOrReturnCtx(t, r), we(r, { + code: ue.invalid_string, + validation: "date", + message: i.message + }), s.dirty()) : i.kind === "time" ? wF(i).test(t.data) || (r = this._getOrReturnCtx(t, r), we(r, { + code: ue.invalid_string, + validation: "time", + message: i.message + }), s.dirty()) : i.kind === "duration" ? uF.test(t.data) || (r = this._getOrReturnCtx(t, r), we(r, { + validation: "duration", + code: ue.invalid_string, + message: i.message + }), s.dirty()) : i.kind === "ip" ? CF(t.data, i.version) || (r = this._getOrReturnCtx(t, r), we(r, { + validation: "ip", + code: ue.invalid_string, + message: i.message + }), s.dirty()) : i.kind === "jwt" ? _F(t.data, i.alg) || (r = this._getOrReturnCtx(t, r), we(r, { + validation: "jwt", + code: ue.invalid_string, + message: i.message + }), s.dirty()) : i.kind === "cidr" ? SF(t.data, i.version) || (r = this._getOrReturnCtx(t, r), we(r, { + validation: "cidr", + code: ue.invalid_string, + message: i.message + }), s.dirty()) : i.kind === "base64" ? yF.test(t.data) || (r = this._getOrReturnCtx(t, r), we(r, { + validation: "base64", + code: ue.invalid_string, + message: i.message + }), s.dirty()) : i.kind === "base64url" ? vF.test(t.data) || (r = this._getOrReturnCtx(t, r), we(r, { + validation: "base64url", + code: ue.invalid_string, + message: i.message + }), s.dirty()) : zt.assertNever(i); + return { status: s.value, value: t.data }; + } + _regex(t, e, s) { + return this.refinement((r) => t.test(r), { + validation: e, + code: ue.invalid_string, + ...Ne.errToObj(s) + }); + } + _addCheck(t) { + return new el({ + ...this._def, + checks: [...this._def.checks, t] + }); + } + email(t) { + return this._addCheck({ kind: "email", ...Ne.errToObj(t) }); + } + url(t) { + return this._addCheck({ kind: "url", ...Ne.errToObj(t) }); + } + emoji(t) { + return this._addCheck({ kind: "emoji", ...Ne.errToObj(t) }); + } + uuid(t) { + return this._addCheck({ kind: "uuid", ...Ne.errToObj(t) }); + } + nanoid(t) { + return this._addCheck({ kind: "nanoid", ...Ne.errToObj(t) }); + } + cuid(t) { + return this._addCheck({ kind: "cuid", ...Ne.errToObj(t) }); + } + cuid2(t) { + return this._addCheck({ kind: "cuid2", ...Ne.errToObj(t) }); + } + ulid(t) { + return this._addCheck({ kind: "ulid", ...Ne.errToObj(t) }); + } + base64(t) { + return this._addCheck({ kind: "base64", ...Ne.errToObj(t) }); + } + base64url(t) { + return this._addCheck({ + kind: "base64url", + ...Ne.errToObj(t) + }); + } + jwt(t) { + return this._addCheck({ kind: "jwt", ...Ne.errToObj(t) }); + } + ip(t) { + return this._addCheck({ kind: "ip", ...Ne.errToObj(t) }); + } + cidr(t) { + return this._addCheck({ kind: "cidr", ...Ne.errToObj(t) }); + } + datetime(t) { + return typeof t == "string" ? this._addCheck({ + kind: "datetime", + precision: null, + offset: !1, + local: !1, + message: t + }) : this._addCheck({ + kind: "datetime", + precision: typeof (t == null ? void 0 : t.precision) > "u" ? null : t == null ? void 0 : t.precision, + offset: (t == null ? void 0 : t.offset) ?? !1, + local: (t == null ? void 0 : t.local) ?? !1, + ...Ne.errToObj(t == null ? void 0 : t.message) + }); + } + date(t) { + return this._addCheck({ kind: "date", message: t }); + } + time(t) { + return typeof t == "string" ? this._addCheck({ + kind: "time", + precision: null, + message: t + }) : this._addCheck({ + kind: "time", + precision: typeof (t == null ? void 0 : t.precision) > "u" ? null : t == null ? void 0 : t.precision, + ...Ne.errToObj(t == null ? void 0 : t.message) + }); + } + duration(t) { + return this._addCheck({ kind: "duration", ...Ne.errToObj(t) }); + } + regex(t, e) { + return this._addCheck({ + kind: "regex", + regex: t, + ...Ne.errToObj(e) + }); + } + includes(t, e) { + return this._addCheck({ + kind: "includes", + value: t, + position: e == null ? void 0 : e.position, + ...Ne.errToObj(e == null ? void 0 : e.message) + }); + } + startsWith(t, e) { + return this._addCheck({ + kind: "startsWith", + value: t, + ...Ne.errToObj(e) + }); + } + endsWith(t, e) { + return this._addCheck({ + kind: "endsWith", + value: t, + ...Ne.errToObj(e) + }); + } + min(t, e) { + return this._addCheck({ + kind: "min", + value: t, + ...Ne.errToObj(e) + }); + } + max(t, e) { + return this._addCheck({ + kind: "max", + value: t, + ...Ne.errToObj(e) + }); + } + length(t, e) { + return this._addCheck({ + kind: "length", + value: t, + ...Ne.errToObj(e) + }); + } + /** + * Equivalent to `.min(1)` + */ + nonempty(t) { + return this.min(1, Ne.errToObj(t)); + } + trim() { + return new el({ + ...this._def, + checks: [...this._def.checks, { kind: "trim" }] + }); + } + toLowerCase() { + return new el({ + ...this._def, + checks: [...this._def.checks, { kind: "toLowerCase" }] + }); + } + toUpperCase() { + return new el({ + ...this._def, + checks: [...this._def.checks, { kind: "toUpperCase" }] + }); + } + get isDatetime() { + return !!this._def.checks.find((t) => t.kind === "datetime"); + } + get isDate() { + return !!this._def.checks.find((t) => t.kind === "date"); + } + get isTime() { + return !!this._def.checks.find((t) => t.kind === "time"); + } + get isDuration() { + return !!this._def.checks.find((t) => t.kind === "duration"); + } + get isEmail() { + return !!this._def.checks.find((t) => t.kind === "email"); + } + get isURL() { + return !!this._def.checks.find((t) => t.kind === "url"); + } + get isEmoji() { + return !!this._def.checks.find((t) => t.kind === "emoji"); + } + get isUUID() { + return !!this._def.checks.find((t) => t.kind === "uuid"); + } + get isNANOID() { + return !!this._def.checks.find((t) => t.kind === "nanoid"); + } + get isCUID() { + return !!this._def.checks.find((t) => t.kind === "cuid"); + } + get isCUID2() { + return !!this._def.checks.find((t) => t.kind === "cuid2"); + } + get isULID() { + return !!this._def.checks.find((t) => t.kind === "ulid"); + } + get isIP() { + return !!this._def.checks.find((t) => t.kind === "ip"); + } + get isCIDR() { + return !!this._def.checks.find((t) => t.kind === "cidr"); + } + get isBase64() { + return !!this._def.checks.find((t) => t.kind === "base64"); + } + get isBase64url() { + return !!this._def.checks.find((t) => t.kind === "base64url"); + } + get minLength() { + let t = null; + for (const e of this._def.checks) + e.kind === "min" && (t === null || e.value > t) && (t = e.value); + return t; + } + get maxLength() { + let t = null; + for (const e of this._def.checks) + e.kind === "max" && (t === null || e.value < t) && (t = e.value); + return t; + } +} +el.create = (n) => new el({ + checks: [], + typeName: dt.ZodString, + coerce: (n == null ? void 0 : n.coerce) ?? !1, + ...Et(n) +}); +function EF(n, t) { + const e = (n.toString().split(".")[1] || "").length, s = (t.toString().split(".")[1] || "").length, r = e > s ? e : s, i = Number.parseInt(n.toFixed(r).replace(".", "")), a = Number.parseInt(t.toFixed(r).replace(".", "")); + return i % a / 10 ** r; +} +class hf extends Bt { + constructor() { + super(...arguments), this.min = this.gte, this.max = this.lte, this.step = this.multipleOf; + } + _parse(t) { + if (this._def.coerce && (t.data = Number(t.data)), this._getType(t) !== Ae.number) { + const i = this._getOrReturnCtx(t); + return we(i, { + code: ue.invalid_type, + expected: Ae.number, + received: i.parsedType + }), ut; + } + let s; + const r = new ur(); + for (const i of this._def.checks) + i.kind === "int" ? zt.isInteger(t.data) || (s = this._getOrReturnCtx(t, s), we(s, { + code: ue.invalid_type, + expected: "integer", + received: "float", + message: i.message + }), r.dirty()) : i.kind === "min" ? (i.inclusive ? t.data < i.value : t.data <= i.value) && (s = this._getOrReturnCtx(t, s), we(s, { + code: ue.too_small, + minimum: i.value, + type: "number", + inclusive: i.inclusive, + exact: !1, + message: i.message + }), r.dirty()) : i.kind === "max" ? (i.inclusive ? t.data > i.value : t.data >= i.value) && (s = this._getOrReturnCtx(t, s), we(s, { + code: ue.too_big, + maximum: i.value, + type: "number", + inclusive: i.inclusive, + exact: !1, + message: i.message + }), r.dirty()) : i.kind === "multipleOf" ? EF(t.data, i.value) !== 0 && (s = this._getOrReturnCtx(t, s), we(s, { + code: ue.not_multiple_of, + multipleOf: i.value, + message: i.message + }), r.dirty()) : i.kind === "finite" ? Number.isFinite(t.data) || (s = this._getOrReturnCtx(t, s), we(s, { + code: ue.not_finite, + message: i.message + }), r.dirty()) : zt.assertNever(i); + return { status: r.value, value: t.data }; + } + gte(t, e) { + return this.setLimit("min", t, !0, Ne.toString(e)); + } + gt(t, e) { + return this.setLimit("min", t, !1, Ne.toString(e)); + } + lte(t, e) { + return this.setLimit("max", t, !0, Ne.toString(e)); + } + lt(t, e) { + return this.setLimit("max", t, !1, Ne.toString(e)); + } + setLimit(t, e, s, r) { + return new hf({ + ...this._def, + checks: [ + ...this._def.checks, + { + kind: t, + value: e, + inclusive: s, + message: Ne.toString(r) + } + ] + }); + } + _addCheck(t) { + return new hf({ + ...this._def, + checks: [...this._def.checks, t] + }); + } + int(t) { + return this._addCheck({ + kind: "int", + message: Ne.toString(t) + }); + } + positive(t) { + return this._addCheck({ + kind: "min", + value: 0, + inclusive: !1, + message: Ne.toString(t) + }); + } + negative(t) { + return this._addCheck({ + kind: "max", + value: 0, + inclusive: !1, + message: Ne.toString(t) + }); + } + nonpositive(t) { + return this._addCheck({ + kind: "max", + value: 0, + inclusive: !0, + message: Ne.toString(t) + }); + } + nonnegative(t) { + return this._addCheck({ + kind: "min", + value: 0, + inclusive: !0, + message: Ne.toString(t) + }); + } + multipleOf(t, e) { + return this._addCheck({ + kind: "multipleOf", + value: t, + message: Ne.toString(e) + }); + } + finite(t) { + return this._addCheck({ + kind: "finite", + message: Ne.toString(t) + }); + } + safe(t) { + return this._addCheck({ + kind: "min", + inclusive: !0, + value: Number.MIN_SAFE_INTEGER, + message: Ne.toString(t) + })._addCheck({ + kind: "max", + inclusive: !0, + value: Number.MAX_SAFE_INTEGER, + message: Ne.toString(t) + }); + } + get minValue() { + let t = null; + for (const e of this._def.checks) + e.kind === "min" && (t === null || e.value > t) && (t = e.value); + return t; + } + get maxValue() { + let t = null; + for (const e of this._def.checks) + e.kind === "max" && (t === null || e.value < t) && (t = e.value); + return t; + } + get isInt() { + return !!this._def.checks.find((t) => t.kind === "int" || t.kind === "multipleOf" && zt.isInteger(t.value)); + } + get isFinite() { + let t = null, e = null; + for (const s of this._def.checks) { + if (s.kind === "finite" || s.kind === "int" || s.kind === "multipleOf") + return !0; + s.kind === "min" ? (e === null || s.value > e) && (e = s.value) : s.kind === "max" && (t === null || s.value < t) && (t = s.value); + } + return Number.isFinite(e) && Number.isFinite(t); + } +} +hf.create = (n) => new hf({ + checks: [], + typeName: dt.ZodNumber, + coerce: (n == null ? void 0 : n.coerce) || !1, + ...Et(n) +}); +class ff extends Bt { + constructor() { + super(...arguments), this.min = this.gte, this.max = this.lte; + } + _parse(t) { + if (this._def.coerce) + try { + t.data = BigInt(t.data); + } catch { + return this._getInvalidInput(t); + } + if (this._getType(t) !== Ae.bigint) + return this._getInvalidInput(t); + let s; + const r = new ur(); + for (const i of this._def.checks) + i.kind === "min" ? (i.inclusive ? t.data < i.value : t.data <= i.value) && (s = this._getOrReturnCtx(t, s), we(s, { + code: ue.too_small, + type: "bigint", + minimum: i.value, + inclusive: i.inclusive, + message: i.message + }), r.dirty()) : i.kind === "max" ? (i.inclusive ? t.data > i.value : t.data >= i.value) && (s = this._getOrReturnCtx(t, s), we(s, { + code: ue.too_big, + type: "bigint", + maximum: i.value, + inclusive: i.inclusive, + message: i.message + }), r.dirty()) : i.kind === "multipleOf" ? t.data % i.value !== BigInt(0) && (s = this._getOrReturnCtx(t, s), we(s, { + code: ue.not_multiple_of, + multipleOf: i.value, + message: i.message + }), r.dirty()) : zt.assertNever(i); + return { status: r.value, value: t.data }; + } + _getInvalidInput(t) { + const e = this._getOrReturnCtx(t); + return we(e, { + code: ue.invalid_type, + expected: Ae.bigint, + received: e.parsedType + }), ut; + } + gte(t, e) { + return this.setLimit("min", t, !0, Ne.toString(e)); + } + gt(t, e) { + return this.setLimit("min", t, !1, Ne.toString(e)); + } + lte(t, e) { + return this.setLimit("max", t, !0, Ne.toString(e)); + } + lt(t, e) { + return this.setLimit("max", t, !1, Ne.toString(e)); + } + setLimit(t, e, s, r) { + return new ff({ + ...this._def, + checks: [ + ...this._def.checks, + { + kind: t, + value: e, + inclusive: s, + message: Ne.toString(r) + } + ] + }); + } + _addCheck(t) { + return new ff({ + ...this._def, + checks: [...this._def.checks, t] + }); + } + positive(t) { + return this._addCheck({ + kind: "min", + value: BigInt(0), + inclusive: !1, + message: Ne.toString(t) + }); + } + negative(t) { + return this._addCheck({ + kind: "max", + value: BigInt(0), + inclusive: !1, + message: Ne.toString(t) + }); + } + nonpositive(t) { + return this._addCheck({ + kind: "max", + value: BigInt(0), + inclusive: !0, + message: Ne.toString(t) + }); + } + nonnegative(t) { + return this._addCheck({ + kind: "min", + value: BigInt(0), + inclusive: !0, + message: Ne.toString(t) + }); + } + multipleOf(t, e) { + return this._addCheck({ + kind: "multipleOf", + value: t, + message: Ne.toString(e) + }); + } + get minValue() { + let t = null; + for (const e of this._def.checks) + e.kind === "min" && (t === null || e.value > t) && (t = e.value); + return t; + } + get maxValue() { + let t = null; + for (const e of this._def.checks) + e.kind === "max" && (t === null || e.value < t) && (t = e.value); + return t; + } +} +ff.create = (n) => new ff({ + checks: [], + typeName: dt.ZodBigInt, + coerce: (n == null ? void 0 : n.coerce) ?? !1, + ...Et(n) +}); +class fw extends Bt { + _parse(t) { + if (this._def.coerce && (t.data = !!t.data), this._getType(t) !== Ae.boolean) { + const s = this._getOrReturnCtx(t); + return we(s, { + code: ue.invalid_type, + expected: Ae.boolean, + received: s.parsedType + }), ut; + } + return Rr(t.data); + } +} +fw.create = (n) => new fw({ + typeName: dt.ZodBoolean, + coerce: (n == null ? void 0 : n.coerce) || !1, + ...Et(n) +}); +class Bg extends Bt { + _parse(t) { + if (this._def.coerce && (t.data = new Date(t.data)), this._getType(t) !== Ae.date) { + const i = this._getOrReturnCtx(t); + return we(i, { + code: ue.invalid_type, + expected: Ae.date, + received: i.parsedType + }), ut; + } + if (Number.isNaN(t.data.getTime())) { + const i = this._getOrReturnCtx(t); + return we(i, { + code: ue.invalid_date + }), ut; + } + const s = new ur(); + let r; + for (const i of this._def.checks) + i.kind === "min" ? t.data.getTime() < i.value && (r = this._getOrReturnCtx(t, r), we(r, { + code: ue.too_small, + message: i.message, + inclusive: !0, + exact: !1, + minimum: i.value, + type: "date" + }), s.dirty()) : i.kind === "max" ? t.data.getTime() > i.value && (r = this._getOrReturnCtx(t, r), we(r, { + code: ue.too_big, + message: i.message, + inclusive: !0, + exact: !1, + maximum: i.value, + type: "date" + }), s.dirty()) : zt.assertNever(i); + return { + status: s.value, + value: new Date(t.data.getTime()) + }; + } + _addCheck(t) { + return new Bg({ + ...this._def, + checks: [...this._def.checks, t] + }); + } + min(t, e) { + return this._addCheck({ + kind: "min", + value: t.getTime(), + message: Ne.toString(e) + }); + } + max(t, e) { + return this._addCheck({ + kind: "max", + value: t.getTime(), + message: Ne.toString(e) + }); + } + get minDate() { + let t = null; + for (const e of this._def.checks) + e.kind === "min" && (t === null || e.value > t) && (t = e.value); + return t != null ? new Date(t) : null; + } + get maxDate() { + let t = null; + for (const e of this._def.checks) + e.kind === "max" && (t === null || e.value < t) && (t = e.value); + return t != null ? new Date(t) : null; + } +} +Bg.create = (n) => new Bg({ + checks: [], + coerce: (n == null ? void 0 : n.coerce) || !1, + typeName: dt.ZodDate, + ...Et(n) +}); +class H3 extends Bt { + _parse(t) { + if (this._getType(t) !== Ae.symbol) { + const s = this._getOrReturnCtx(t); + return we(s, { + code: ue.invalid_type, + expected: Ae.symbol, + received: s.parsedType + }), ut; + } + return Rr(t.data); + } +} +H3.create = (n) => new H3({ + typeName: dt.ZodSymbol, + ...Et(n) +}); +class W3 extends Bt { + _parse(t) { + if (this._getType(t) !== Ae.undefined) { + const s = this._getOrReturnCtx(t); + return we(s, { + code: ue.invalid_type, + expected: Ae.undefined, + received: s.parsedType + }), ut; + } + return Rr(t.data); + } +} +W3.create = (n) => new W3({ + typeName: dt.ZodUndefined, + ...Et(n) +}); +class G3 extends Bt { + _parse(t) { + if (this._getType(t) !== Ae.null) { + const s = this._getOrReturnCtx(t); + return we(s, { + code: ue.invalid_type, + expected: Ae.null, + received: s.parsedType + }), ut; + } + return Rr(t.data); + } +} +G3.create = (n) => new G3({ + typeName: dt.ZodNull, + ...Et(n) +}); +class Y3 extends Bt { + constructor() { + super(...arguments), this._any = !0; + } + _parse(t) { + return Rr(t.data); + } +} +Y3.create = (n) => new Y3({ + typeName: dt.ZodAny, + ...Et(n) +}); +class K3 extends Bt { + constructor() { + super(...arguments), this._unknown = !0; + } + _parse(t) { + return Rr(t.data); + } +} +K3.create = (n) => new K3({ + typeName: dt.ZodUnknown, + ...Et(n) +}); +class ll extends Bt { + _parse(t) { + const e = this._getOrReturnCtx(t); + return we(e, { + code: ue.invalid_type, + expected: Ae.never, + received: e.parsedType + }), ut; + } +} +ll.create = (n) => new ll({ + typeName: dt.ZodNever, + ...Et(n) +}); +class Z3 extends Bt { + _parse(t) { + if (this._getType(t) !== Ae.undefined) { + const s = this._getOrReturnCtx(t); + return we(s, { + code: ue.invalid_type, + expected: Ae.void, + received: s.parsedType + }), ut; + } + return Rr(t.data); + } +} +Z3.create = (n) => new Z3({ + typeName: dt.ZodVoid, + ...Et(n) +}); +class Di extends Bt { + _parse(t) { + const { ctx: e, status: s } = this._processInputParams(t), r = this._def; + if (e.parsedType !== Ae.array) + return we(e, { + code: ue.invalid_type, + expected: Ae.array, + received: e.parsedType + }), ut; + if (r.exactLength !== null) { + const a = e.data.length > r.exactLength.value, o = e.data.length < r.exactLength.value; + (a || o) && (we(e, { + code: a ? ue.too_big : ue.too_small, + minimum: o ? r.exactLength.value : void 0, + maximum: a ? r.exactLength.value : void 0, + type: "array", + inclusive: !0, + exact: !0, + message: r.exactLength.message + }), s.dirty()); + } + if (r.minLength !== null && e.data.length < r.minLength.value && (we(e, { + code: ue.too_small, + minimum: r.minLength.value, + type: "array", + inclusive: !0, + exact: !1, + message: r.minLength.message + }), s.dirty()), r.maxLength !== null && e.data.length > r.maxLength.value && (we(e, { + code: ue.too_big, + maximum: r.maxLength.value, + type: "array", + inclusive: !0, + exact: !1, + message: r.maxLength.message + }), s.dirty()), e.common.async) + return Promise.all([...e.data].map((a, o) => r.type._parseAsync(new ol(e, a, e.path, o)))).then((a) => ur.mergeArray(s, a)); + const i = [...e.data].map((a, o) => r.type._parseSync(new ol(e, a, e.path, o))); + return ur.mergeArray(s, i); + } + get element() { + return this._def.type; + } + min(t, e) { + return new Di({ + ...this._def, + minLength: { value: t, message: Ne.toString(e) } + }); + } + max(t, e) { + return new Di({ + ...this._def, + maxLength: { value: t, message: Ne.toString(e) } + }); + } + length(t, e) { + return new Di({ + ...this._def, + exactLength: { value: t, message: Ne.toString(e) } + }); + } + nonempty(t) { + return this.min(1, t); + } +} +Di.create = (n, t) => new Di({ + type: n, + minLength: null, + maxLength: null, + exactLength: null, + typeName: dt.ZodArray, + ...Et(t) +}); +function ou(n) { + if (n instanceof Mn) { + const t = {}; + for (const e in n.shape) { + const s = n.shape[e]; + t[e] = tl.create(ou(s)); + } + return new Mn({ + ...n._def, + shape: () => t + }); + } else return n instanceof Di ? new Di({ + ...n._def, + type: ou(n.element) + }) : n instanceof tl ? tl.create(ou(n.unwrap())) : n instanceof jd ? jd.create(ou(n.unwrap())) : n instanceof Nc ? Nc.create(n.items.map((t) => ou(t))) : n; +} +class Mn extends Bt { + constructor() { + super(...arguments), this._cached = null, this.nonstrict = this.passthrough, this.augment = this.extend; + } + _getCached() { + if (this._cached !== null) + return this._cached; + const t = this._def.shape(), e = zt.objectKeys(t); + return this._cached = { shape: t, keys: e }, this._cached; + } + _parse(t) { + if (this._getType(t) !== Ae.object) { + const u = this._getOrReturnCtx(t); + return we(u, { + code: ue.invalid_type, + expected: Ae.object, + received: u.parsedType + }), ut; + } + const { status: s, ctx: r } = this._processInputParams(t), { shape: i, keys: a } = this._getCached(), o = []; + if (!(this._def.catchall instanceof ll && this._def.unknownKeys === "strip")) + for (const u in r.data) + a.includes(u) || o.push(u); + const c = []; + for (const u of a) { + const f = i[u], p = r.data[u]; + c.push({ + key: { status: "valid", value: u }, + value: f._parse(new ol(r, p, r.path, u)), + alwaysSet: u in r.data + }); + } + if (this._def.catchall instanceof ll) { + const u = this._def.unknownKeys; + if (u === "passthrough") + for (const f of o) + c.push({ + key: { status: "valid", value: f }, + value: { status: "valid", value: r.data[f] } + }); + else if (u === "strict") + o.length > 0 && (we(r, { + code: ue.unrecognized_keys, + keys: o + }), s.dirty()); + else if (u !== "strip") throw new Error("Internal ZodObject error: invalid unknownKeys value."); + } else { + const u = this._def.catchall; + for (const f of o) { + const p = r.data[f]; + c.push({ + key: { status: "valid", value: f }, + value: u._parse( + new ol(r, p, r.path, f) + //, ctx.child(key), value, getParsedType(value) + ), + alwaysSet: f in r.data + }); + } + } + return r.common.async ? Promise.resolve().then(async () => { + const u = []; + for (const f of c) { + const p = await f.key, g = await f.value; + u.push({ + key: p, + value: g, + alwaysSet: f.alwaysSet + }); + } + return u; + }).then((u) => ur.mergeObjectSync(s, u)) : ur.mergeObjectSync(s, c); + } + get shape() { + return this._def.shape(); + } + strict(t) { + return Ne.errToObj, new Mn({ + ...this._def, + unknownKeys: "strict", + ...t !== void 0 ? { + errorMap: (e, s) => { + var i, a; + const r = ((a = (i = this._def).errorMap) == null ? void 0 : a.call(i, e, s).message) ?? s.defaultError; + return e.code === "unrecognized_keys" ? { + message: Ne.errToObj(t).message ?? r + } : { + message: r + }; + } + } : {} + }); + } + strip() { + return new Mn({ + ...this._def, + unknownKeys: "strip" + }); + } + passthrough() { + return new Mn({ + ...this._def, + unknownKeys: "passthrough" + }); + } + // const AugmentFactory = + // <Def extends ZodObjectDef>(def: Def) => + // <Augmentation extends ZodRawShape>( + // augmentation: Augmentation + // ): ZodObject< + // extendShape<ReturnType<Def["shape"]>, Augmentation>, + // Def["unknownKeys"], + // Def["catchall"] + // > => { + // return new ZodObject({ + // ...def, + // shape: () => ({ + // ...def.shape(), + // ...augmentation, + // }), + // }) as any; + // }; + extend(t) { + return new Mn({ + ...this._def, + shape: () => ({ + ...this._def.shape(), + ...t + }) + }); + } + /** + * Prior to zod@1.0.12 there was a bug in the + * inferred type of merged objects. Please + * upgrade if you are experiencing issues. + */ + merge(t) { + return new Mn({ + unknownKeys: t._def.unknownKeys, + catchall: t._def.catchall, + shape: () => ({ + ...this._def.shape(), + ...t._def.shape() + }), + typeName: dt.ZodObject + }); + } + // merge< + // Incoming extends AnyZodObject, + // Augmentation extends Incoming["shape"], + // NewOutput extends { + // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation + // ? Augmentation[k]["_output"] + // : k extends keyof Output + // ? Output[k] + // : never; + // }, + // NewInput extends { + // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation + // ? Augmentation[k]["_input"] + // : k extends keyof Input + // ? Input[k] + // : never; + // } + // >( + // merging: Incoming + // ): ZodObject< + // extendShape<T, ReturnType<Incoming["_def"]["shape"]>>, + // Incoming["_def"]["unknownKeys"], + // Incoming["_def"]["catchall"], + // NewOutput, + // NewInput + // > { + // const merged: any = new ZodObject({ + // unknownKeys: merging._def.unknownKeys, + // catchall: merging._def.catchall, + // shape: () => + // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()), + // typeName: ZodFirstPartyTypeKind.ZodObject, + // }) as any; + // return merged; + // } + setKey(t, e) { + return this.augment({ [t]: e }); + } + // merge<Incoming extends AnyZodObject>( + // merging: Incoming + // ): //ZodObject<T & Incoming["_shape"], UnknownKeys, Catchall> = (merging) => { + // ZodObject< + // extendShape<T, ReturnType<Incoming["_def"]["shape"]>>, + // Incoming["_def"]["unknownKeys"], + // Incoming["_def"]["catchall"] + // > { + // // const mergedShape = objectUtil.mergeShapes( + // // this._def.shape(), + // // merging._def.shape() + // // ); + // const merged: any = new ZodObject({ + // unknownKeys: merging._def.unknownKeys, + // catchall: merging._def.catchall, + // shape: () => + // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()), + // typeName: ZodFirstPartyTypeKind.ZodObject, + // }) as any; + // return merged; + // } + catchall(t) { + return new Mn({ + ...this._def, + catchall: t + }); + } + pick(t) { + const e = {}; + for (const s of zt.objectKeys(t)) + t[s] && this.shape[s] && (e[s] = this.shape[s]); + return new Mn({ + ...this._def, + shape: () => e + }); + } + omit(t) { + const e = {}; + for (const s of zt.objectKeys(this.shape)) + t[s] || (e[s] = this.shape[s]); + return new Mn({ + ...this._def, + shape: () => e + }); + } + /** + * @deprecated + */ + deepPartial() { + return ou(this); + } + partial(t) { + const e = {}; + for (const s of zt.objectKeys(this.shape)) { + const r = this.shape[s]; + t && !t[s] ? e[s] = r : e[s] = r.optional(); + } + return new Mn({ + ...this._def, + shape: () => e + }); + } + required(t) { + const e = {}; + for (const s of zt.objectKeys(this.shape)) + if (t && !t[s]) + e[s] = this.shape[s]; + else { + let i = this.shape[s]; + for (; i instanceof tl; ) + i = i._def.innerType; + e[s] = i; + } + return new Mn({ + ...this._def, + shape: () => e + }); + } + keyof() { + return SE(zt.objectKeys(this.shape)); + } +} +Mn.create = (n, t) => new Mn({ + shape: () => n, + unknownKeys: "strip", + catchall: ll.create(), + typeName: dt.ZodObject, + ...Et(t) +}); +Mn.strictCreate = (n, t) => new Mn({ + shape: () => n, + unknownKeys: "strict", + catchall: ll.create(), + typeName: dt.ZodObject, + ...Et(t) +}); +Mn.lazycreate = (n, t) => new Mn({ + shape: n, + unknownKeys: "strip", + catchall: ll.create(), + typeName: dt.ZodObject, + ...Et(t) +}); +class Ug extends Bt { + _parse(t) { + const { ctx: e } = this._processInputParams(t), s = this._def.options; + function r(i) { + for (const o of i) + if (o.result.status === "valid") + return o.result; + for (const o of i) + if (o.result.status === "dirty") + return e.common.issues.push(...o.ctx.common.issues), o.result; + const a = i.map((o) => new Ba(o.ctx.common.issues)); + return we(e, { + code: ue.invalid_union, + unionErrors: a + }), ut; + } + if (e.common.async) + return Promise.all(s.map(async (i) => { + const a = { + ...e, + common: { + ...e.common, + issues: [] + }, + parent: null + }; + return { + result: await i._parseAsync({ + data: e.data, + path: e.path, + parent: a + }), + ctx: a + }; + })).then(r); + { + let i; + const a = []; + for (const c of s) { + const u = { + ...e, + common: { + ...e.common, + issues: [] + }, + parent: null + }, f = c._parseSync({ + data: e.data, + path: e.path, + parent: u + }); + if (f.status === "valid") + return f; + f.status === "dirty" && !i && (i = { result: f, ctx: u }), u.common.issues.length && a.push(u.common.issues); + } + if (i) + return e.common.issues.push(...i.ctx.common.issues), i.result; + const o = a.map((c) => new Ba(c)); + return we(e, { + code: ue.invalid_union, + unionErrors: o + }), ut; + } + } + get options() { + return this._def.options; + } +} +Ug.create = (n, t) => new Ug({ + options: n, + typeName: dt.ZodUnion, + ...Et(t) +}); +function pw(n, t) { + const e = mo(n), s = mo(t); + if (n === t) + return { valid: !0, data: n }; + if (e === Ae.object && s === Ae.object) { + const r = zt.objectKeys(t), i = zt.objectKeys(n).filter((o) => r.indexOf(o) !== -1), a = { ...n, ...t }; + for (const o of i) { + const c = pw(n[o], t[o]); + if (!c.valid) + return { valid: !1 }; + a[o] = c.data; + } + return { valid: !0, data: a }; + } else if (e === Ae.array && s === Ae.array) { + if (n.length !== t.length) + return { valid: !1 }; + const r = []; + for (let i = 0; i < n.length; i++) { + const a = n[i], o = t[i], c = pw(a, o); + if (!c.valid) + return { valid: !1 }; + r.push(c.data); + } + return { valid: !0, data: r }; + } else return e === Ae.date && s === Ae.date && +n == +t ? { valid: !0, data: n } : { valid: !1 }; +} +class qg extends Bt { + _parse(t) { + const { status: e, ctx: s } = this._processInputParams(t), r = (i, a) => { + if (U3(i) || U3(a)) + return ut; + const o = pw(i.value, a.value); + return o.valid ? ((q3(i) || q3(a)) && e.dirty(), { status: e.value, value: o.data }) : (we(s, { + code: ue.invalid_intersection_types + }), ut); + }; + return s.common.async ? Promise.all([ + this._def.left._parseAsync({ + data: s.data, + path: s.path, + parent: s + }), + this._def.right._parseAsync({ + data: s.data, + path: s.path, + parent: s + }) + ]).then(([i, a]) => r(i, a)) : r(this._def.left._parseSync({ + data: s.data, + path: s.path, + parent: s + }), this._def.right._parseSync({ + data: s.data, + path: s.path, + parent: s + })); + } +} +qg.create = (n, t, e) => new qg({ + left: n, + right: t, + typeName: dt.ZodIntersection, + ...Et(e) +}); +class Nc extends Bt { + _parse(t) { + const { status: e, ctx: s } = this._processInputParams(t); + if (s.parsedType !== Ae.array) + return we(s, { + code: ue.invalid_type, + expected: Ae.array, + received: s.parsedType + }), ut; + if (s.data.length < this._def.items.length) + return we(s, { + code: ue.too_small, + minimum: this._def.items.length, + inclusive: !0, + exact: !1, + type: "array" + }), ut; + !this._def.rest && s.data.length > this._def.items.length && (we(s, { + code: ue.too_big, + maximum: this._def.items.length, + inclusive: !0, + exact: !1, + type: "array" + }), e.dirty()); + const i = [...s.data].map((a, o) => { + const c = this._def.items[o] || this._def.rest; + return c ? c._parse(new ol(s, a, s.path, o)) : null; + }).filter((a) => !!a); + return s.common.async ? Promise.all(i).then((a) => ur.mergeArray(e, a)) : ur.mergeArray(e, i); + } + get items() { + return this._def.items; + } + rest(t) { + return new Nc({ + ...this._def, + rest: t + }); + } +} +Nc.create = (n, t) => { + if (!Array.isArray(n)) + throw new Error("You must pass an array of schemas to z.tuple([ ... ])"); + return new Nc({ + items: n, + typeName: dt.ZodTuple, + rest: null, + ...Et(t) + }); +}; +class X3 extends Bt { + get keySchema() { + return this._def.keyType; + } + get valueSchema() { + return this._def.valueType; + } + _parse(t) { + const { status: e, ctx: s } = this._processInputParams(t); + if (s.parsedType !== Ae.map) + return we(s, { + code: ue.invalid_type, + expected: Ae.map, + received: s.parsedType + }), ut; + const r = this._def.keyType, i = this._def.valueType, a = [...s.data.entries()].map(([o, c], u) => ({ + key: r._parse(new ol(s, o, s.path, [u, "key"])), + value: i._parse(new ol(s, c, s.path, [u, "value"])) + })); + if (s.common.async) { + const o = /* @__PURE__ */ new Map(); + return Promise.resolve().then(async () => { + for (const c of a) { + const u = await c.key, f = await c.value; + if (u.status === "aborted" || f.status === "aborted") + return ut; + (u.status === "dirty" || f.status === "dirty") && e.dirty(), o.set(u.value, f.value); + } + return { status: e.value, value: o }; + }); + } else { + const o = /* @__PURE__ */ new Map(); + for (const c of a) { + const u = c.key, f = c.value; + if (u.status === "aborted" || f.status === "aborted") + return ut; + (u.status === "dirty" || f.status === "dirty") && e.dirty(), o.set(u.value, f.value); + } + return { status: e.value, value: o }; + } + } +} +X3.create = (n, t, e) => new X3({ + valueType: t, + keyType: n, + typeName: dt.ZodMap, + ...Et(e) +}); +class pf extends Bt { + _parse(t) { + const { status: e, ctx: s } = this._processInputParams(t); + if (s.parsedType !== Ae.set) + return we(s, { + code: ue.invalid_type, + expected: Ae.set, + received: s.parsedType + }), ut; + const r = this._def; + r.minSize !== null && s.data.size < r.minSize.value && (we(s, { + code: ue.too_small, + minimum: r.minSize.value, + type: "set", + inclusive: !0, + exact: !1, + message: r.minSize.message + }), e.dirty()), r.maxSize !== null && s.data.size > r.maxSize.value && (we(s, { + code: ue.too_big, + maximum: r.maxSize.value, + type: "set", + inclusive: !0, + exact: !1, + message: r.maxSize.message + }), e.dirty()); + const i = this._def.valueType; + function a(c) { + const u = /* @__PURE__ */ new Set(); + for (const f of c) { + if (f.status === "aborted") + return ut; + f.status === "dirty" && e.dirty(), u.add(f.value); + } + return { status: e.value, value: u }; + } + const o = [...s.data.values()].map((c, u) => i._parse(new ol(s, c, s.path, u))); + return s.common.async ? Promise.all(o).then((c) => a(c)) : a(o); + } + min(t, e) { + return new pf({ + ...this._def, + minSize: { value: t, message: Ne.toString(e) } + }); + } + max(t, e) { + return new pf({ + ...this._def, + maxSize: { value: t, message: Ne.toString(e) } + }); + } + size(t, e) { + return this.min(t, e).max(t, e); + } + nonempty(t) { + return this.min(1, t); + } +} +pf.create = (n, t) => new pf({ + valueType: n, + minSize: null, + maxSize: null, + typeName: dt.ZodSet, + ...Et(t) +}); +class Q3 extends Bt { + get schema() { + return this._def.getter(); + } + _parse(t) { + const { ctx: e } = this._processInputParams(t); + return this._def.getter()._parse({ data: e.data, path: e.path, parent: e }); + } +} +Q3.create = (n, t) => new Q3({ + getter: n, + typeName: dt.ZodLazy, + ...Et(t) +}); +class J3 extends Bt { + _parse(t) { + if (t.data !== this._def.value) { + const e = this._getOrReturnCtx(t); + return we(e, { + received: e.data, + code: ue.invalid_literal, + expected: this._def.value + }), ut; + } + return { status: "valid", value: t.data }; + } + get value() { + return this._def.value; + } +} +J3.create = (n, t) => new J3({ + value: n, + typeName: dt.ZodLiteral, + ...Et(t) +}); +function SE(n, t) { + return new Dd({ + values: n, + typeName: dt.ZodEnum, + ...Et(t) + }); +} +class Dd extends Bt { + _parse(t) { + if (typeof t.data != "string") { + const e = this._getOrReturnCtx(t), s = this._def.values; + return we(e, { + expected: zt.joinValues(s), + received: e.parsedType, + code: ue.invalid_type + }), ut; + } + if (this._cache || (this._cache = new Set(this._def.values)), !this._cache.has(t.data)) { + const e = this._getOrReturnCtx(t), s = this._def.values; + return we(e, { + received: e.data, + code: ue.invalid_enum_value, + options: s + }), ut; + } + return Rr(t.data); + } + get options() { + return this._def.values; + } + get enum() { + const t = {}; + for (const e of this._def.values) + t[e] = e; + return t; + } + get Values() { + const t = {}; + for (const e of this._def.values) + t[e] = e; + return t; + } + get Enum() { + const t = {}; + for (const e of this._def.values) + t[e] = e; + return t; + } + extract(t, e = this._def) { + return Dd.create(t, { + ...this._def, + ...e + }); + } + exclude(t, e = this._def) { + return Dd.create(this.options.filter((s) => !t.includes(s)), { + ...this._def, + ...e + }); + } +} +Dd.create = SE; +class e6 extends Bt { + _parse(t) { + const e = zt.getValidEnumValues(this._def.values), s = this._getOrReturnCtx(t); + if (s.parsedType !== Ae.string && s.parsedType !== Ae.number) { + const r = zt.objectValues(e); + return we(s, { + expected: zt.joinValues(r), + received: s.parsedType, + code: ue.invalid_type + }), ut; + } + if (this._cache || (this._cache = new Set(zt.getValidEnumValues(this._def.values))), !this._cache.has(t.data)) { + const r = zt.objectValues(e); + return we(s, { + received: s.data, + code: ue.invalid_enum_value, + options: r + }), ut; + } + return Rr(t.data); + } + get enum() { + return this._def.values; + } +} +e6.create = (n, t) => new e6({ + values: n, + typeName: dt.ZodNativeEnum, + ...Et(t) +}); +class zg extends Bt { + unwrap() { + return this._def.type; + } + _parse(t) { + const { ctx: e } = this._processInputParams(t); + if (e.parsedType !== Ae.promise && e.common.async === !1) + return we(e, { + code: ue.invalid_type, + expected: Ae.promise, + received: e.parsedType + }), ut; + const s = e.parsedType === Ae.promise ? e.data : Promise.resolve(e.data); + return Rr(s.then((r) => this._def.type.parseAsync(r, { + path: e.path, + errorMap: e.common.contextualErrorMap + }))); + } +} +zg.create = (n, t) => new zg({ + type: n, + typeName: dt.ZodPromise, + ...Et(t) +}); +class Ld extends Bt { + innerType() { + return this._def.schema; + } + sourceType() { + return this._def.schema._def.typeName === dt.ZodEffects ? this._def.schema.sourceType() : this._def.schema; + } + _parse(t) { + const { status: e, ctx: s } = this._processInputParams(t), r = this._def.effect || null, i = { + addIssue: (a) => { + we(s, a), a.fatal ? e.abort() : e.dirty(); + }, + get path() { + return s.path; + } + }; + if (i.addIssue = i.addIssue.bind(i), r.type === "preprocess") { + const a = r.transform(s.data, i); + if (s.common.async) + return Promise.resolve(a).then(async (o) => { + if (e.value === "aborted") + return ut; + const c = await this._def.schema._parseAsync({ + data: o, + path: s.path, + parent: s + }); + return c.status === "aborted" ? ut : c.status === "dirty" || e.value === "dirty" ? Oh(c.value) : c; + }); + { + if (e.value === "aborted") + return ut; + const o = this._def.schema._parseSync({ + data: a, + path: s.path, + parent: s + }); + return o.status === "aborted" ? ut : o.status === "dirty" || e.value === "dirty" ? Oh(o.value) : o; + } + } + if (r.type === "refinement") { + const a = (o) => { + const c = r.refinement(o, i); + if (s.common.async) + return Promise.resolve(c); + if (c instanceof Promise) + throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead."); + return o; + }; + if (s.common.async === !1) { + const o = this._def.schema._parseSync({ + data: s.data, + path: s.path, + parent: s + }); + return o.status === "aborted" ? ut : (o.status === "dirty" && e.dirty(), a(o.value), { status: e.value, value: o.value }); + } else + return this._def.schema._parseAsync({ data: s.data, path: s.path, parent: s }).then((o) => o.status === "aborted" ? ut : (o.status === "dirty" && e.dirty(), a(o.value).then(() => ({ status: e.value, value: o.value })))); + } + if (r.type === "transform") + if (s.common.async === !1) { + const a = this._def.schema._parseSync({ + data: s.data, + path: s.path, + parent: s + }); + if (!Md(a)) + return ut; + const o = r.transform(a.value, i); + if (o instanceof Promise) + throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead."); + return { status: e.value, value: o }; + } else + return this._def.schema._parseAsync({ data: s.data, path: s.path, parent: s }).then((a) => Md(a) ? Promise.resolve(r.transform(a.value, i)).then((o) => ({ + status: e.value, + value: o + })) : ut); + zt.assertNever(r); + } +} +Ld.create = (n, t, e) => new Ld({ + schema: n, + typeName: dt.ZodEffects, + effect: t, + ...Et(e) +}); +Ld.createWithPreprocess = (n, t, e) => new Ld({ + schema: t, + effect: { type: "preprocess", transform: n }, + typeName: dt.ZodEffects, + ...Et(e) +}); +class tl extends Bt { + _parse(t) { + return this._getType(t) === Ae.undefined ? Rr(void 0) : this._def.innerType._parse(t); + } + unwrap() { + return this._def.innerType; + } +} +tl.create = (n, t) => new tl({ + innerType: n, + typeName: dt.ZodOptional, + ...Et(t) +}); +class jd extends Bt { + _parse(t) { + return this._getType(t) === Ae.null ? Rr(null) : this._def.innerType._parse(t); + } + unwrap() { + return this._def.innerType; + } +} +jd.create = (n, t) => new jd({ + innerType: n, + typeName: dt.ZodNullable, + ...Et(t) +}); +class mw extends Bt { + _parse(t) { + const { ctx: e } = this._processInputParams(t); + let s = e.data; + return e.parsedType === Ae.undefined && (s = this._def.defaultValue()), this._def.innerType._parse({ + data: s, + path: e.path, + parent: e + }); + } + removeDefault() { + return this._def.innerType; + } +} +mw.create = (n, t) => new mw({ + innerType: n, + typeName: dt.ZodDefault, + defaultValue: typeof t.default == "function" ? t.default : () => t.default, + ...Et(t) +}); +class gw extends Bt { + _parse(t) { + const { ctx: e } = this._processInputParams(t), s = { + ...e, + common: { + ...e.common, + issues: [] + } + }, r = this._def.innerType._parse({ + data: s.data, + path: s.path, + parent: { + ...s + } + }); + return Vg(r) ? r.then((i) => ({ + status: "valid", + value: i.status === "valid" ? i.value : this._def.catchValue({ + get error() { + return new Ba(s.common.issues); + }, + input: s.data + }) + })) : { + status: "valid", + value: r.status === "valid" ? r.value : this._def.catchValue({ + get error() { + return new Ba(s.common.issues); + }, + input: s.data + }) + }; + } + removeCatch() { + return this._def.innerType; + } +} +gw.create = (n, t) => new gw({ + innerType: n, + typeName: dt.ZodCatch, + catchValue: typeof t.catch == "function" ? t.catch : () => t.catch, + ...Et(t) +}); +class t6 extends Bt { + _parse(t) { + if (this._getType(t) !== Ae.nan) { + const s = this._getOrReturnCtx(t); + return we(s, { + code: ue.invalid_type, + expected: Ae.nan, + received: s.parsedType + }), ut; + } + return { status: "valid", value: t.data }; + } +} +t6.create = (n) => new t6({ + typeName: dt.ZodNaN, + ...Et(n) +}); +class kF extends Bt { + _parse(t) { + const { ctx: e } = this._processInputParams(t), s = e.data; + return this._def.type._parse({ + data: s, + path: e.path, + parent: e + }); + } + unwrap() { + return this._def.type; + } +} +class zx extends Bt { + _parse(t) { + const { status: e, ctx: s } = this._processInputParams(t); + if (s.common.async) + return (async () => { + const i = await this._def.in._parseAsync({ + data: s.data, + path: s.path, + parent: s + }); + return i.status === "aborted" ? ut : i.status === "dirty" ? (e.dirty(), Oh(i.value)) : this._def.out._parseAsync({ + data: i.value, + path: s.path, + parent: s + }); + })(); + { + const r = this._def.in._parseSync({ + data: s.data, + path: s.path, + parent: s + }); + return r.status === "aborted" ? ut : r.status === "dirty" ? (e.dirty(), { + status: "dirty", + value: r.value + }) : this._def.out._parseSync({ + data: r.value, + path: s.path, + parent: s + }); + } + } + static create(t, e) { + return new zx({ + in: t, + out: e, + typeName: dt.ZodPipeline + }); + } +} +class yw extends Bt { + _parse(t) { + const e = this._def.innerType._parse(t), s = (r) => (Md(r) && (r.value = Object.freeze(r.value)), r); + return Vg(e) ? e.then((r) => s(r)) : s(e); + } + unwrap() { + return this._def.innerType; + } +} +yw.create = (n, t) => new yw({ + innerType: n, + typeName: dt.ZodReadonly, + ...Et(t) +}); +var dt; +(function(n) { + n.ZodString = "ZodString", n.ZodNumber = "ZodNumber", n.ZodNaN = "ZodNaN", n.ZodBigInt = "ZodBigInt", n.ZodBoolean = "ZodBoolean", n.ZodDate = "ZodDate", n.ZodSymbol = "ZodSymbol", n.ZodUndefined = "ZodUndefined", n.ZodNull = "ZodNull", n.ZodAny = "ZodAny", n.ZodUnknown = "ZodUnknown", n.ZodNever = "ZodNever", n.ZodVoid = "ZodVoid", n.ZodArray = "ZodArray", n.ZodObject = "ZodObject", n.ZodUnion = "ZodUnion", n.ZodDiscriminatedUnion = "ZodDiscriminatedUnion", n.ZodIntersection = "ZodIntersection", n.ZodTuple = "ZodTuple", n.ZodRecord = "ZodRecord", n.ZodMap = "ZodMap", n.ZodSet = "ZodSet", n.ZodFunction = "ZodFunction", n.ZodLazy = "ZodLazy", n.ZodLiteral = "ZodLiteral", n.ZodEnum = "ZodEnum", n.ZodEffects = "ZodEffects", n.ZodNativeEnum = "ZodNativeEnum", n.ZodOptional = "ZodOptional", n.ZodNullable = "ZodNullable", n.ZodDefault = "ZodDefault", n.ZodCatch = "ZodCatch", n.ZodPromise = "ZodPromise", n.ZodBranded = "ZodBranded", n.ZodPipeline = "ZodPipeline", n.ZodReadonly = "ZodReadonly"; +})(dt || (dt = {})); +const mf = el.create, EE = fw.create; +ll.create; +Di.create; +const kE = Mn.create; +Ug.create; +qg.create; +Nc.create; +Dd.create; +zg.create; +tl.create; +jd.create; +const TF = mf().min(1, "Tag cannot be empty").max(50, "Tag must be less than 50 characters").regex(/^[a-zA-Z0-9_]+$/, "Tag can only contain letters, numbers, and underscores"); +function AF(n) { + if (!n) return [{ type: "text", content: "" }]; + const t = /#([a-zA-Z0-9_]+)/g; + return n.split(t).map((s, r) => { + if (r % 2 === 0) + return { type: "text", content: s }; + try { + return TF.parse(s), { type: "hashtag", content: s }; + } catch { + return { type: "text", content: `#${s}` }; + } + }); +} +const PF = ({ + children: n, + className: t = "", + onTagClick: e +}) => { + const s = Kd(), r = (a) => { + e ? e(a) : s(`/tags/${a}`); + }, i = AF(n); + return /* @__PURE__ */ h.jsx("span", { className: t, children: i.map((a, o) => a.type === "hashtag" ? /* @__PURE__ */ h.jsxs( + "button", + { + onClick: (c) => { + c.preventDefault(), c.stopPropagation(), r(a.content); + }, + className: "text-primary hover:text-primary/80 font-medium hover:underline cursor-pointer transition-colors", + children: [ + "#", + a.content + ] + }, + `tag-${o}` + ) : /* @__PURE__ */ h.jsx("span", { children: a.content }, `text-${o}`)) }); +}; +var TE = { exports: {} }; +(function(n) { + var t = typeof window < "u" ? window : typeof WorkerGlobalScope < "u" && self instanceof WorkerGlobalScope ? self : {}; + /** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT <https://opensource.org/licenses/MIT> + * @author Lea Verou <https://lea.verou.me> + * @namespace + * @public + */ + var e = function(s) { + var r = /(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i, i = 0, a = {}, o = { + /** + * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the + * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load + * additional languages or plugins yourself. + * + * By setting this value to `true`, Prism will not automatically highlight all code elements on the page. + * + * You obviously have to change this value before the automatic highlighting started. To do this, you can add an + * empty Prism object into the global scope before loading the Prism script like this: + * + * ```js + * window.Prism = window.Prism || {}; + * Prism.manual = true; + * // add a new <script> to load Prism's script + * ``` + * + * @default false + * @type {boolean} + * @memberof Prism + * @public + */ + manual: s.Prism && s.Prism.manual, + /** + * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses + * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your + * own worker, you don't want it to do this. + * + * By setting this value to `true`, Prism will not add its own listeners to the worker. + * + * You obviously have to change this value before Prism executes. To do this, you can add an + * empty Prism object into the global scope before loading the Prism script like this: + * + * ```js + * window.Prism = window.Prism || {}; + * Prism.disableWorkerMessageHandler = true; + * // Load Prism's script + * ``` + * + * @default false + * @type {boolean} + * @memberof Prism + * @public + */ + disableWorkerMessageHandler: s.Prism && s.Prism.disableWorkerMessageHandler, + /** + * A namespace for utility methods. + * + * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may + * change or disappear at any time. + * + * @namespace + * @memberof Prism + */ + util: { + encode: function x(C) { + return C instanceof c ? new c(C.type, x(C.content), C.alias) : Array.isArray(C) ? C.map(x) : C.replace(/&/g, "&").replace(/</g, "<").replace(/\u00a0/g, " "); + }, + /** + * Returns the name of the type of the given value. + * + * @param {any} o + * @returns {string} + * @example + * type(null) === 'Null' + * type(undefined) === 'Undefined' + * type(123) === 'Number' + * type('foo') === 'String' + * type(true) === 'Boolean' + * type([1, 2]) === 'Array' + * type({}) === 'Object' + * type(String) === 'Function' + * type(/abc+/) === 'RegExp' + */ + type: function(x) { + return Object.prototype.toString.call(x).slice(8, -1); + }, + /** + * Returns a unique number for the given object. Later calls will still return the same number. + * + * @param {Object} obj + * @returns {number} + */ + objId: function(x) { + return x.__id || Object.defineProperty(x, "__id", { value: ++i }), x.__id; + }, + /** + * Creates a deep clone of the given object. + * + * The main intended use of this function is to clone language definitions. + * + * @param {T} o + * @param {Record<number, any>} [visited] + * @returns {T} + * @template T + */ + clone: function x(C, _) { + _ = _ || {}; + var k, A; + switch (o.util.type(C)) { + case "Object": + if (A = o.util.objId(C), _[A]) + return _[A]; + k = /** @type {Record<string, any>} */ + {}, _[A] = k; + for (var T in C) + C.hasOwnProperty(T) && (k[T] = x(C[T], _)); + return ( + /** @type {any} */ + k + ); + case "Array": + return A = o.util.objId(C), _[A] ? _[A] : (k = [], _[A] = k, /** @type {Array} */ + /** @type {any} */ + C.forEach(function(N, $) { + k[$] = x(N, _); + }), /** @type {any} */ + k); + default: + return C; + } + }, + /** + * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class. + * + * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned. + * + * @param {Element} element + * @returns {string} + */ + getLanguage: function(x) { + for (; x; ) { + var C = r.exec(x.className); + if (C) + return C[1].toLowerCase(); + x = x.parentElement; + } + return "none"; + }, + /** + * Sets the Prism `language-xxxx` class of the given element. + * + * @param {Element} element + * @param {string} language + * @returns {void} + */ + setLanguage: function(x, C) { + x.className = x.className.replace(RegExp(r, "gi"), ""), x.classList.add("language-" + C); + }, + /** + * Returns the script element that is currently executing. + * + * This does __not__ work for line script element. + * + * @returns {HTMLScriptElement | null} + */ + currentScript: function() { + if (typeof document > "u") + return null; + if (document.currentScript && document.currentScript.tagName === "SCRIPT") + return ( + /** @type {any} */ + document.currentScript + ); + try { + throw new Error(); + } catch (k) { + var x = (/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(k.stack) || [])[1]; + if (x) { + var C = document.getElementsByTagName("script"); + for (var _ in C) + if (C[_].src == x) + return C[_]; + } + return null; + } + }, + /** + * Returns whether a given class is active for `element`. + * + * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated + * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the + * given class is just the given class with a `no-` prefix. + * + * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is + * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its + * ancestors have the given class or the negated version of it, then the default activation will be returned. + * + * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated + * version of it, the class is considered active. + * + * @param {Element} element + * @param {string} className + * @param {boolean} [defaultActivation=false] + * @returns {boolean} + */ + isActive: function(x, C, _) { + for (var k = "no-" + C; x; ) { + var A = x.classList; + if (A.contains(C)) + return !0; + if (A.contains(k)) + return !1; + x = x.parentElement; + } + return !!_; + } + }, + /** + * This namespace contains all currently loaded languages and the some helper functions to create and modify languages. + * + * @namespace + * @memberof Prism + * @public + */ + languages: { + /** + * The grammar for plain, unformatted text. + */ + plain: a, + plaintext: a, + text: a, + txt: a, + /** + * Creates a deep copy of the language with the given id and appends the given tokens. + * + * If a token in `redef` also appears in the copied language, then the existing token in the copied language + * will be overwritten at its original position. + * + * ## Best practices + * + * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language) + * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to + * understand the language definition because, normally, the order of tokens matters in Prism grammars. + * + * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens. + * Furthermore, all non-overwriting tokens should be placed after the overwriting ones. + * + * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`. + * @param {Grammar} redef The new tokens to append. + * @returns {Grammar} The new language created. + * @public + * @example + * Prism.languages['css-with-colors'] = Prism.languages.extend('css', { + * // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token + * // at its original position + * 'comment': { ... }, + * // CSS doesn't have a 'color' token, so this token will be appended + * 'color': /\b(?:red|green|blue)\b/ + * }); + */ + extend: function(x, C) { + var _ = o.util.clone(o.languages[x]); + for (var k in C) + _[k] = C[k]; + return _; + }, + /** + * Inserts tokens _before_ another token in a language definition or any other grammar. + * + * ## Usage + * + * This helper method makes it easy to modify existing languages. For example, the CSS language definition + * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded + * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the + * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do + * this: + * + * ```js + * Prism.languages.markup.style = { + * // token + * }; + * ``` + * + * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens + * before existing tokens. For the CSS example above, you would use it like this: + * + * ```js + * Prism.languages.insertBefore('markup', 'cdata', { + * 'style': { + * // token + * } + * }); + * ``` + * + * ## Special cases + * + * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar + * will be ignored. + * + * This behavior can be used to insert tokens after `before`: + * + * ```js + * Prism.languages.insertBefore('markup', 'comment', { + * 'comment': Prism.languages.markup.comment, + * // tokens after 'comment' + * }); + * ``` + * + * ## Limitations + * + * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object + * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave + * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily + * deleting properties which is necessary to insert at arbitrary positions. + * + * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object. + * Instead, it will create a new object and replace all references to the target object with the new one. This + * can be done without temporarily deleting properties, so the iteration order is well-defined. + * + * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if + * you hold the target object in a variable, then the value of the variable will not change. + * + * ```js + * var oldMarkup = Prism.languages.markup; + * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... }); + * + * assert(oldMarkup !== Prism.languages.markup); + * assert(newMarkup === Prism.languages.markup); + * ``` + * + * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the + * object to be modified. + * @param {string} before The key to insert before. + * @param {Grammar} insert An object containing the key-value pairs to be inserted. + * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the + * object to be modified. + * + * Defaults to `Prism.languages`. + * @returns {Grammar} The new grammar object. + * @public + */ + insertBefore: function(x, C, _, k) { + k = k || /** @type {any} */ + o.languages; + var A = k[x], T = {}; + for (var N in A) + if (A.hasOwnProperty(N)) { + if (N == C) + for (var $ in _) + _.hasOwnProperty($) && (T[$] = _[$]); + _.hasOwnProperty(N) || (T[N] = A[N]); + } + var D = k[x]; + return k[x] = T, o.languages.DFS(o.languages, function(V, j) { + j === D && V != x && (this[V] = T); + }), T; + }, + // Traverse a language definition with Depth First Search + DFS: function x(C, _, k, A) { + A = A || {}; + var T = o.util.objId; + for (var N in C) + if (C.hasOwnProperty(N)) { + _.call(C, N, C[N], k || N); + var $ = C[N], D = o.util.type($); + D === "Object" && !A[T($)] ? (A[T($)] = !0, x($, _, null, A)) : D === "Array" && !A[T($)] && (A[T($)] = !0, x($, _, N, A)); + } + } + }, + plugins: {}, + /** + * This is the most high-level function in Prism’s API. + * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on + * each one of them. + * + * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`. + * + * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}. + * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}. + * @memberof Prism + * @public + */ + highlightAll: function(x, C) { + o.highlightAllUnder(document, x, C); + }, + /** + * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls + * {@link Prism.highlightElement} on each one of them. + * + * The following hooks will be run: + * 1. `before-highlightall` + * 2. `before-all-elements-highlight` + * 3. All hooks of {@link Prism.highlightElement} for each element. + * + * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted. + * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers. + * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done. + * @memberof Prism + * @public + */ + highlightAllUnder: function(x, C, _) { + var k = { + callback: _, + container: x, + selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code' + }; + o.hooks.run("before-highlightall", k), k.elements = Array.prototype.slice.apply(k.container.querySelectorAll(k.selector)), o.hooks.run("before-all-elements-highlight", k); + for (var A = 0, T; T = k.elements[A++]; ) + o.highlightElement(T, C === !0, k.callback); + }, + /** + * Highlights the code inside a single element. + * + * The following hooks will be run: + * 1. `before-sanity-check` + * 2. `before-highlight` + * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`. + * 4. `before-insert` + * 5. `after-highlight` + * 6. `complete` + * + * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for + * the element's language. + * + * @param {Element} element The element containing the code. + * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier. + * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers + * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is + * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default). + * + * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for + * asynchronous highlighting to work. You can build your own bundle on the + * [Download page](https://prismjs.com/download.html). + * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done. + * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously. + * @memberof Prism + * @public + */ + highlightElement: function(x, C, _) { + var k = o.util.getLanguage(x), A = o.languages[k]; + o.util.setLanguage(x, k); + var T = x.parentElement; + T && T.nodeName.toLowerCase() === "pre" && o.util.setLanguage(T, k); + var N = x.textContent, $ = { + element: x, + language: k, + grammar: A, + code: N + }; + function D(j) { + $.highlightedCode = j, o.hooks.run("before-insert", $), $.element.innerHTML = $.highlightedCode, o.hooks.run("after-highlight", $), o.hooks.run("complete", $), _ && _.call($.element); + } + if (o.hooks.run("before-sanity-check", $), T = $.element.parentElement, T && T.nodeName.toLowerCase() === "pre" && !T.hasAttribute("tabindex") && T.setAttribute("tabindex", "0"), !$.code) { + o.hooks.run("complete", $), _ && _.call($.element); + return; + } + if (o.hooks.run("before-highlight", $), !$.grammar) { + D(o.util.encode($.code)); + return; + } + if (C && s.Worker) { + var V = new Worker(o.filename); + V.onmessage = function(j) { + D(j.data); + }, V.postMessage(JSON.stringify({ + language: $.language, + code: $.code, + immediateClose: !0 + })); + } else + D(o.highlight($.code, $.grammar, $.language)); + }, + /** + * Low-level function, only use if you know what you’re doing. It accepts a string of text as input + * and the language definitions to use, and returns a string with the HTML produced. + * + * The following hooks will be run: + * 1. `before-tokenize` + * 2. `after-tokenize` + * 3. `wrap`: On each {@link Token}. + * + * @param {string} text A string with the code to be highlighted. + * @param {Grammar} grammar An object containing the tokens to use. + * + * Usually a language definition like `Prism.languages.markup`. + * @param {string} language The name of the language definition passed to `grammar`. + * @returns {string} The highlighted HTML. + * @memberof Prism + * @public + * @example + * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript'); + */ + highlight: function(x, C, _) { + var k = { + code: x, + grammar: C, + language: _ + }; + if (o.hooks.run("before-tokenize", k), !k.grammar) + throw new Error('The language "' + k.language + '" has no grammar.'); + return k.tokens = o.tokenize(k.code, k.grammar), o.hooks.run("after-tokenize", k), c.stringify(o.util.encode(k.tokens), k.language); + }, + /** + * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input + * and the language definitions to use, and returns an array with the tokenized code. + * + * When the language definition includes nested tokens, the function is called recursively on each of these tokens. + * + * This method could be useful in other contexts as well, as a very crude parser. + * + * @param {string} text A string with the code to be highlighted. + * @param {Grammar} grammar An object containing the tokens to use. + * + * Usually a language definition like `Prism.languages.markup`. + * @returns {TokenStream} An array of strings and tokens, a token stream. + * @memberof Prism + * @public + * @example + * let code = `var foo = 0;`; + * let tokens = Prism.tokenize(code, Prism.languages.javascript); + * tokens.forEach(token => { + * if (token instanceof Prism.Token && token.type === 'number') { + * console.log(`Found numeric literal: ${token.content}`); + * } + * }); + */ + tokenize: function(x, C) { + var _ = C.rest; + if (_) { + for (var k in _) + C[k] = _[k]; + delete C.rest; + } + var A = new p(); + return g(A, A.head, x), f(x, A, C, A.head, 0), v(A); + }, + /** + * @namespace + * @memberof Prism + * @public + */ + hooks: { + all: {}, + /** + * Adds the given callback to the list of callbacks for the given hook. + * + * The callback will be invoked when the hook it is registered for is run. + * Hooks are usually directly run by a highlight function but you can also run hooks yourself. + * + * One callback function can be registered to multiple hooks and the same hook multiple times. + * + * @param {string} name The name of the hook. + * @param {HookCallback} callback The callback function which is given environment variables. + * @public + */ + add: function(x, C) { + var _ = o.hooks.all; + _[x] = _[x] || [], _[x].push(C); + }, + /** + * Runs a hook invoking all registered callbacks with the given environment variables. + * + * Callbacks will be invoked synchronously and in the order in which they were registered. + * + * @param {string} name The name of the hook. + * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered. + * @public + */ + run: function(x, C) { + var _ = o.hooks.all[x]; + if (!(!_ || !_.length)) + for (var k = 0, A; A = _[k++]; ) + A(C); + } + }, + Token: c + }; + s.Prism = o; + function c(x, C, _, k) { + this.type = x, this.content = C, this.alias = _, this.length = (k || "").length | 0; + } + c.stringify = function x(C, _) { + if (typeof C == "string") + return C; + if (Array.isArray(C)) { + var k = ""; + return C.forEach(function(D) { + k += x(D, _); + }), k; + } + var A = { + type: C.type, + content: x(C.content, _), + tag: "span", + classes: ["token", C.type], + attributes: {}, + language: _ + }, T = C.alias; + T && (Array.isArray(T) ? Array.prototype.push.apply(A.classes, T) : A.classes.push(T)), o.hooks.run("wrap", A); + var N = ""; + for (var $ in A.attributes) + N += " " + $ + '="' + (A.attributes[$] || "").replace(/"/g, """) + '"'; + return "<" + A.tag + ' class="' + A.classes.join(" ") + '"' + N + ">" + A.content + "</" + A.tag + ">"; + }; + function u(x, C, _, k) { + x.lastIndex = C; + var A = x.exec(_); + if (A && k && A[1]) { + var T = A[1].length; + A.index += T, A[0] = A[0].slice(T); + } + return A; + } + function f(x, C, _, k, A, T) { + for (var N in _) + if (!(!_.hasOwnProperty(N) || !_[N])) { + var $ = _[N]; + $ = Array.isArray($) ? $ : [$]; + for (var D = 0; D < $.length; ++D) { + if (T && T.cause == N + "," + D) + return; + var V = $[D], j = V.inside, B = !!V.lookbehind, W = !!V.greedy, J = V.alias; + if (W && !V.pattern.global) { + var G = V.pattern.toString().match(/[imsuy]*$/)[0]; + V.pattern = RegExp(V.pattern.source, G + "g"); + } + for (var q = V.pattern || V, H = k.next, L = A; H !== C.tail && !(T && L >= T.reach); L += H.value.length, H = H.next) { + var X = H.value; + if (C.length > x.length) + return; + if (!(X instanceof c)) { + var te = 1, Te; + if (W) { + if (Te = u(q, L, x, B), !Te || Te.index >= x.length) + break; + var nt = Te.index, _e = Te.index + Te[0].length, Je = L; + for (Je += H.value.length; nt >= Je; ) + H = H.next, Je += H.value.length; + if (Je -= H.value.length, L = Je, H.value instanceof c) + continue; + for (var Re = H; Re !== C.tail && (Je < _e || typeof Re.value == "string"); Re = Re.next) + te++, Je += Re.value.length; + te--, X = x.slice(L, Je), Te.index -= L; + } else if (Te = u(q, 0, X, B), !Te) + continue; + var nt = Te.index, rt = Te[0], qe = X.slice(0, nt), Ye = X.slice(nt + rt.length), ee = L + X.length; + T && ee > T.reach && (T.reach = ee); + var ge = H.prev; + qe && (ge = g(C, ge, qe), L += qe.length), y(C, ge, te); + var ze = new c(N, j ? o.tokenize(rt, j) : rt, J, rt); + if (H = g(C, ge, ze), Ye && g(C, H, Ye), te > 1) { + var st = { + cause: N + "," + D, + reach: ee + }; + f(x, C, _, H.prev, L, st), T && st.reach > T.reach && (T.reach = st.reach); + } + } + } + } + } + } + function p() { + var x = { value: null, prev: null, next: null }, C = { value: null, prev: x, next: null }; + x.next = C, this.head = x, this.tail = C, this.length = 0; + } + function g(x, C, _) { + var k = C.next, A = { value: _, prev: C, next: k }; + return C.next = A, k.prev = A, x.length++, A; + } + function y(x, C, _) { + for (var k = C.next, A = 0; A < _ && k !== x.tail; A++) + k = k.next; + C.next = k, k.prev = C, x.length -= A; + } + function v(x) { + for (var C = [], _ = x.head.next; _ !== x.tail; ) + C.push(_.value), _ = _.next; + return C; + } + if (!s.document) + return s.addEventListener && (o.disableWorkerMessageHandler || s.addEventListener("message", function(x) { + var C = JSON.parse(x.data), _ = C.language, k = C.code, A = C.immediateClose; + s.postMessage(o.highlight(k, o.languages[_], _)), A && s.close(); + }, !1)), o; + var b = o.util.currentScript(); + b && (o.filename = b.src, b.hasAttribute("data-manual") && (o.manual = !0)); + function w() { + o.manual || o.highlightAll(); + } + if (!o.manual) { + var E = document.readyState; + E === "loading" || E === "interactive" && b && b.defer ? document.addEventListener("DOMContentLoaded", w) : window.requestAnimationFrame ? window.requestAnimationFrame(w) : window.setTimeout(w, 16); + } + return o; + }(t); + n.exports && (n.exports = e), typeof b3 < "u" && (b3.Prism = e), e.languages.markup = { + comment: { + pattern: /<!--(?:(?!<!--)[\s\S])*?-->/, + greedy: !0 + }, + prolog: { + pattern: /<\?[\s\S]+?\?>/, + greedy: !0 + }, + doctype: { + // https://www.w3.org/TR/xml/#NT-doctypedecl + pattern: /<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i, + greedy: !0, + inside: { + "internal-subset": { + pattern: /(^[^\[]*\[)[\s\S]+(?=\]>$)/, + lookbehind: !0, + greedy: !0, + inside: null + // see below + }, + string: { + pattern: /"[^"]*"|'[^']*'/, + greedy: !0 + }, + punctuation: /^<!|>$|[[\]]/, + "doctype-tag": /^DOCTYPE/i, + name: /[^\s<>'"]+/ + } + }, + cdata: { + pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i, + greedy: !0 + }, + tag: { + pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/, + greedy: !0, + inside: { + tag: { + pattern: /^<\/?[^\s>\/]+/, + inside: { + punctuation: /^<\/?/, + namespace: /^[^\s>\/:]+:/ + } + }, + "special-attr": [], + "attr-value": { + pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/, + inside: { + punctuation: [ + { + pattern: /^=/, + alias: "attr-equals" + }, + { + pattern: /^(\s*)["']|["']$/, + lookbehind: !0 + } + ] + } + }, + punctuation: /\/?>/, + "attr-name": { + pattern: /[^\s>\/]+/, + inside: { + namespace: /^[^\s>\/:]+:/ + } + } + } + }, + entity: [ + { + pattern: /&[\da-z]{1,8};/i, + alias: "named-entity" + }, + /&#x?[\da-f]{1,8};/i + ] + }, e.languages.markup.tag.inside["attr-value"].inside.entity = e.languages.markup.entity, e.languages.markup.doctype.inside["internal-subset"].inside = e.languages.markup, e.hooks.add("wrap", function(s) { + s.type === "entity" && (s.attributes.title = s.content.replace(/&/, "&")); + }), Object.defineProperty(e.languages.markup.tag, "addInlined", { + /** + * Adds an inlined language to markup. + * + * An example of an inlined language is CSS with `<style>` tags. + * + * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as + * case insensitive. + * @param {string} lang The language key. + * @example + * addInlined('style', 'css'); + */ + value: function(r, i) { + var a = {}; + a["language-" + i] = { + pattern: /(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i, + lookbehind: !0, + inside: e.languages[i] + }, a.cdata = /^<!\[CDATA\[|\]\]>$/i; + var o = { + "included-cdata": { + pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i, + inside: a + } + }; + o["language-" + i] = { + pattern: /[\s\S]+/, + inside: e.languages[i] + }; + var c = {}; + c[r] = { + pattern: RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g, function() { + return r; + }), "i"), + lookbehind: !0, + greedy: !0, + inside: o + }, e.languages.insertBefore("markup", "cdata", c); + } + }), Object.defineProperty(e.languages.markup.tag, "addAttribute", { + /** + * Adds an pattern to highlight languages embedded in HTML attributes. + * + * An example of an inlined language is CSS with `style` attributes. + * + * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as + * case insensitive. + * @param {string} lang The language key. + * @example + * addAttribute('style', 'css'); + */ + value: function(s, r) { + e.languages.markup.tag.inside["special-attr"].push({ + pattern: RegExp( + /(^|["'\s])/.source + "(?:" + s + ")" + /\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source, + "i" + ), + lookbehind: !0, + inside: { + "attr-name": /^[^\s=]+/, + "attr-value": { + pattern: /=[\s\S]+/, + inside: { + value: { + pattern: /(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/, + lookbehind: !0, + alias: [r, "language-" + r], + inside: e.languages[r] + }, + punctuation: [ + { + pattern: /^=/, + alias: "attr-equals" + }, + /"|'/ + ] + } + } + } + }); + } + }), e.languages.html = e.languages.markup, e.languages.mathml = e.languages.markup, e.languages.svg = e.languages.markup, e.languages.xml = e.languages.extend("markup", {}), e.languages.ssml = e.languages.xml, e.languages.atom = e.languages.xml, e.languages.rss = e.languages.xml, function(s) { + var r = /(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/; + s.languages.css = { + comment: /\/\*[\s\S]*?\*\//, + atrule: { + pattern: RegExp("@[\\w-](?:" + /[^;{\s"']|\s+(?!\s)/.source + "|" + r.source + ")*?" + /(?:;|(?=\s*\{))/.source), + inside: { + rule: /^@[\w-]+/, + "selector-function-argument": { + pattern: /(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/, + lookbehind: !0, + alias: "selector" + }, + keyword: { + pattern: /(^|[^\w-])(?:and|not|only|or)(?![\w-])/, + lookbehind: !0 + } + // See rest below + } + }, + url: { + // https://drafts.csswg.org/css-values-3/#urls + pattern: RegExp("\\burl\\((?:" + r.source + "|" + /(?:[^\\\r\n()"']|\\[\s\S])*/.source + ")\\)", "i"), + greedy: !0, + inside: { + function: /^url/i, + punctuation: /^\(|\)$/, + string: { + pattern: RegExp("^" + r.source + "$"), + alias: "url" + } + } + }, + selector: { + pattern: RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|` + r.source + ")*(?=\\s*\\{)"), + lookbehind: !0 + }, + string: { + pattern: r, + greedy: !0 + }, + property: { + pattern: /(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i, + lookbehind: !0 + }, + important: /!important\b/i, + function: { + pattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i, + lookbehind: !0 + }, + punctuation: /[(){};:,]/ + }, s.languages.css.atrule.inside.rest = s.languages.css; + var i = s.languages.markup; + i && (i.tag.addInlined("style", "css"), i.tag.addAttribute("style", "css")); + }(e), e.languages.clike = { + comment: [ + { + pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/, + lookbehind: !0, + greedy: !0 + }, + { + pattern: /(^|[^\\:])\/\/.*/, + lookbehind: !0, + greedy: !0 + } + ], + string: { + pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, + greedy: !0 + }, + "class-name": { + pattern: /(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i, + lookbehind: !0, + inside: { + punctuation: /[.\\]/ + } + }, + keyword: /\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/, + boolean: /\b(?:false|true)\b/, + function: /\b\w+(?=\()/, + number: /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i, + operator: /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/, + punctuation: /[{}[\];(),.:]/ + }, e.languages.javascript = e.languages.extend("clike", { + "class-name": [ + e.languages.clike["class-name"], + { + pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/, + lookbehind: !0 + } + ], + keyword: [ + { + pattern: /((?:^|\})\s*)catch\b/, + lookbehind: !0 + }, + { + pattern: /(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/, + lookbehind: !0 + } + ], + // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444) + function: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/, + number: { + pattern: RegExp( + /(^|[^\w$])/.source + "(?:" + // constant + (/NaN|Infinity/.source + "|" + // binary integer + /0[bB][01]+(?:_[01]+)*n?/.source + "|" + // octal integer + /0[oO][0-7]+(?:_[0-7]+)*n?/.source + "|" + // hexadecimal integer + /0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source + "|" + // decimal bigint + /\d+(?:_\d+)*n/.source + "|" + // decimal number (integer or float) but no bigint + /(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source) + ")" + /(?![\w$])/.source + ), + lookbehind: !0 + }, + operator: /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/ + }), e.languages.javascript["class-name"][0].pattern = /(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/, e.languages.insertBefore("javascript", "keyword", { + regex: { + pattern: RegExp( + // lookbehind + // eslint-disable-next-line regexp/no-dupe-characters-character-class + /((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source + // Regex pattern: + // There are 2 regex patterns here. The RegExp set notation proposal added support for nested character + // classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible + // with the only syntax, so we have to define 2 different regex patterns. + /\//.source + "(?:" + /(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source + "|" + // `v` flag syntax. This supports 3 levels of nested character classes. + /(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source + ")" + // lookahead + /(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source + ), + lookbehind: !0, + greedy: !0, + inside: { + "regex-source": { + pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/, + lookbehind: !0, + alias: "language-regex", + inside: e.languages.regex + }, + "regex-delimiter": /^\/|\/$/, + "regex-flags": /^[a-z]+$/ + } + }, + // This must be declared before keyword because we use "function" inside the look-forward + "function-variable": { + pattern: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/, + alias: "function" + }, + parameter: [ + { + pattern: /(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/, + lookbehind: !0, + inside: e.languages.javascript + }, + { + pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i, + lookbehind: !0, + inside: e.languages.javascript + }, + { + pattern: /(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/, + lookbehind: !0, + inside: e.languages.javascript + }, + { + pattern: /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/, + lookbehind: !0, + inside: e.languages.javascript + } + ], + constant: /\b[A-Z](?:[A-Z_]|\dx?)*\b/ + }), e.languages.insertBefore("javascript", "string", { + hashbang: { + pattern: /^#!.*/, + greedy: !0, + alias: "comment" + }, + "template-string": { + pattern: /`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/, + greedy: !0, + inside: { + "template-punctuation": { + pattern: /^`|`$/, + alias: "string" + }, + interpolation: { + pattern: /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/, + lookbehind: !0, + inside: { + "interpolation-punctuation": { + pattern: /^\$\{|\}$/, + alias: "punctuation" + }, + rest: e.languages.javascript + } + }, + string: /[\s\S]+/ + } + }, + "string-property": { + pattern: /((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m, + lookbehind: !0, + greedy: !0, + alias: "property" + } + }), e.languages.insertBefore("javascript", "operator", { + "literal-property": { + pattern: /((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m, + lookbehind: !0, + alias: "property" + } + }), e.languages.markup && (e.languages.markup.tag.addInlined("script", "javascript"), e.languages.markup.tag.addAttribute( + /on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source, + "javascript" + )), e.languages.js = e.languages.javascript, function() { + if (typeof e > "u" || typeof document > "u") + return; + Element.prototype.matches || (Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector); + var s = "Loading…", r = function(b, w) { + return "✖ Error " + b + " while fetching file: " + w; + }, i = "✖ Error: File does not exist or is empty", a = { + js: "javascript", + py: "python", + rb: "ruby", + ps1: "powershell", + psm1: "powershell", + sh: "bash", + bat: "batch", + h: "c", + tex: "latex" + }, o = "data-src-status", c = "loading", u = "loaded", f = "failed", p = "pre[data-src]:not([" + o + '="' + u + '"]):not([' + o + '="' + c + '"])'; + function g(b, w, E) { + var x = new XMLHttpRequest(); + x.open("GET", b, !0), x.onreadystatechange = function() { + x.readyState == 4 && (x.status < 400 && x.responseText ? w(x.responseText) : x.status >= 400 ? E(r(x.status, x.statusText)) : E(i)); + }, x.send(null); + } + function y(b) { + var w = /^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(b || ""); + if (w) { + var E = Number(w[1]), x = w[2], C = w[3]; + return x ? C ? [E, Number(C)] : [E, void 0] : [E, E]; + } + } + e.hooks.add("before-highlightall", function(b) { + b.selector += ", " + p; + }), e.hooks.add("before-sanity-check", function(b) { + var w = ( + /** @type {HTMLPreElement} */ + b.element + ); + if (w.matches(p)) { + b.code = "", w.setAttribute(o, c); + var E = w.appendChild(document.createElement("CODE")); + E.textContent = s; + var x = w.getAttribute("data-src"), C = b.language; + if (C === "none") { + var _ = (/\.(\w+)$/.exec(x) || [, "none"])[1]; + C = a[_] || _; + } + e.util.setLanguage(E, C), e.util.setLanguage(w, C); + var k = e.plugins.autoloader; + k && k.loadLanguages(C), g( + x, + function(A) { + w.setAttribute(o, u); + var T = y(w.getAttribute("data-range")); + if (T) { + var N = A.split(/\r\n?|\n/g), $ = T[0], D = T[1] == null ? N.length : T[1]; + $ < 0 && ($ += N.length), $ = Math.max(0, Math.min($ - 1, N.length)), D < 0 && (D += N.length), D = Math.max(0, Math.min(D, N.length)), A = N.slice($, D).join(` +`), w.hasAttribute("data-start") || w.setAttribute("data-start", String($ + 1)); + } + E.textContent = A, e.highlightElement(E); + }, + function(A) { + w.setAttribute(o, f), E.textContent = A; + } + ); + } + }), e.plugins.fileHighlight = { + /** + * Executes the File Highlight plugin for all matching `pre` elements under the given container. + * + * Note: Elements which are already loaded or currently loading will not be touched by this method. + * + * @param {ParentNode} [container=document] + */ + highlight: function(w) { + for (var E = (w || document).querySelectorAll(p), x = 0, C; C = E[x++]; ) + e.highlightElement(C); + } + }; + var v = !1; + e.fileHighlight = function() { + v || (console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."), v = !0), e.plugins.fileHighlight.highlight.apply(this, arguments); + }; + }(); +})(TE); +var NF = TE.exports; +const $F = /* @__PURE__ */ J8(NF); +(function(n) { + n.languages.typescript = n.languages.extend("javascript", { + "class-name": { + pattern: /(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/, + lookbehind: !0, + greedy: !0, + inside: null + // see below + }, + builtin: /\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/ + }), n.languages.typescript.keyword.push( + /\b(?:abstract|declare|is|keyof|readonly|require)\b/, + // keywords that have to be followed by an identifier + /\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/, + // This is for `import type *, {}` + /\btype\b(?=\s*(?:[\{*]|$))/ + ), delete n.languages.typescript.parameter, delete n.languages.typescript["literal-property"]; + var t = n.languages.extend("typescript", {}); + delete t["class-name"], n.languages.typescript["class-name"].inside = t, n.languages.insertBefore("typescript", "function", { + decorator: { + pattern: /@[$\w\xA0-\uFFFF]+/, + inside: { + at: { + pattern: /^@/, + alias: "operator" + }, + function: /^[\s\S]+/ + } + }, + "generic-function": { + // e.g. foo<T extends "bar" | "baz">( ... + pattern: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/, + greedy: !0, + inside: { + function: /^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/, + generic: { + pattern: /<[\s\S]+/, + // everything after the first < + alias: "class-name", + inside: t + } + } + } + }), n.languages.ts = n.languages.typescript; +})(Prism); +Prism.languages.javascript = Prism.languages.extend("clike", { + "class-name": [ + Prism.languages.clike["class-name"], + { + pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/, + lookbehind: !0 + } + ], + keyword: [ + { + pattern: /((?:^|\})\s*)catch\b/, + lookbehind: !0 + }, + { + pattern: /(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/, + lookbehind: !0 + } + ], + // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444) + function: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/, + number: { + pattern: RegExp( + /(^|[^\w$])/.source + "(?:" + // constant + (/NaN|Infinity/.source + "|" + // binary integer + /0[bB][01]+(?:_[01]+)*n?/.source + "|" + // octal integer + /0[oO][0-7]+(?:_[0-7]+)*n?/.source + "|" + // hexadecimal integer + /0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source + "|" + // decimal bigint + /\d+(?:_\d+)*n/.source + "|" + // decimal number (integer or float) but no bigint + /(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source) + ")" + /(?![\w$])/.source + ), + lookbehind: !0 + }, + operator: /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/ +}); +Prism.languages.javascript["class-name"][0].pattern = /(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/; +Prism.languages.insertBefore("javascript", "keyword", { + regex: { + pattern: RegExp( + // lookbehind + // eslint-disable-next-line regexp/no-dupe-characters-character-class + /((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source + // Regex pattern: + // There are 2 regex patterns here. The RegExp set notation proposal added support for nested character + // classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible + // with the only syntax, so we have to define 2 different regex patterns. + /\//.source + "(?:" + /(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source + "|" + // `v` flag syntax. This supports 3 levels of nested character classes. + /(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source + ")" + // lookahead + /(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source + ), + lookbehind: !0, + greedy: !0, + inside: { + "regex-source": { + pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/, + lookbehind: !0, + alias: "language-regex", + inside: Prism.languages.regex + }, + "regex-delimiter": /^\/|\/$/, + "regex-flags": /^[a-z]+$/ + } + }, + // This must be declared before keyword because we use "function" inside the look-forward + "function-variable": { + pattern: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/, + alias: "function" + }, + parameter: [ + { + pattern: /(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/, + lookbehind: !0, + inside: Prism.languages.javascript + }, + { + pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i, + lookbehind: !0, + inside: Prism.languages.javascript + }, + { + pattern: /(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/, + lookbehind: !0, + inside: Prism.languages.javascript + }, + { + pattern: /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/, + lookbehind: !0, + inside: Prism.languages.javascript + } + ], + constant: /\b[A-Z](?:[A-Z_]|\dx?)*\b/ +}); +Prism.languages.insertBefore("javascript", "string", { + hashbang: { + pattern: /^#!.*/, + greedy: !0, + alias: "comment" + }, + "template-string": { + pattern: /`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/, + greedy: !0, + inside: { + "template-punctuation": { + pattern: /^`|`$/, + alias: "string" + }, + interpolation: { + pattern: /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/, + lookbehind: !0, + inside: { + "interpolation-punctuation": { + pattern: /^\$\{|\}$/, + alias: "punctuation" + }, + rest: Prism.languages.javascript + } + }, + string: /[\s\S]+/ + } + }, + "string-property": { + pattern: /((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m, + lookbehind: !0, + greedy: !0, + alias: "property" + } +}); +Prism.languages.insertBefore("javascript", "operator", { + "literal-property": { + pattern: /((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m, + lookbehind: !0, + alias: "property" + } +}); +Prism.languages.markup && (Prism.languages.markup.tag.addInlined("script", "javascript"), Prism.languages.markup.tag.addAttribute( + /on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source, + "javascript" +)); +Prism.languages.js = Prism.languages.javascript; +Prism.languages.json = { + property: { + pattern: /(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/, + lookbehind: !0, + greedy: !0 + }, + string: { + pattern: /(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/, + lookbehind: !0, + greedy: !0 + }, + comment: { + pattern: /\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/, + greedy: !0 + }, + number: /-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i, + punctuation: /[{}[\],]/, + operator: /:/, + boolean: /\b(?:false|true)\b/, + null: { + pattern: /\bnull\b/, + alias: "keyword" + } +}; +Prism.languages.webmanifest = Prism.languages.json; +(function(n) { + var t = "\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b", e = { + pattern: /(^(["']?)\w+\2)[ \t]+\S.*/, + lookbehind: !0, + alias: "punctuation", + // this looks reasonably well in all themes + inside: null + // see below + }, s = { + bash: e, + environment: { + pattern: RegExp("\\$" + t), + alias: "constant" + }, + variable: [ + // [0]: Arithmetic Environment + { + pattern: /\$?\(\([\s\S]+?\)\)/, + greedy: !0, + inside: { + // If there is a $ sign at the beginning highlight $(( and )) as variable + variable: [ + { + pattern: /(^\$\(\([\s\S]+)\)\)/, + lookbehind: !0 + }, + /^\$\(\(/ + ], + number: /\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/, + // Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic + operator: /--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/, + // If there is no $ sign at the beginning highlight (( and )) as punctuation + punctuation: /\(\(?|\)\)?|,|;/ + } + }, + // [1]: Command Substitution + { + pattern: /\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/, + greedy: !0, + inside: { + variable: /^\$\(|^`|\)$|`$/ + } + }, + // [2]: Brace expansion + { + pattern: /\$\{[^}]+\}/, + greedy: !0, + inside: { + operator: /:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/, + punctuation: /[\[\]]/, + environment: { + pattern: RegExp("(\\{)" + t), + lookbehind: !0, + alias: "constant" + } + } + }, + /\$(?:\w+|[#?*!@$])/ + ], + // Escape sequences from echo and printf's manuals, and escaped quotes. + entity: /\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/ + }; + n.languages.bash = { + shebang: { + pattern: /^#!\s*\/.*/, + alias: "important" + }, + comment: { + pattern: /(^|[^"{\\$])#.*/, + lookbehind: !0 + }, + "function-name": [ + // a) function foo { + // b) foo() { + // c) function foo() { + // but not “foo {” + { + // a) and c) + pattern: /(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/, + lookbehind: !0, + alias: "function" + }, + { + // b) + pattern: /\b[\w-]+(?=\s*\(\s*\)\s*\{)/, + alias: "function" + } + ], + // Highlight variable names as variables in for and select beginnings. + "for-or-select": { + pattern: /(\b(?:for|select)\s+)\w+(?=\s+in\s)/, + alias: "variable", + lookbehind: !0 + }, + // Highlight variable names as variables in the left-hand part + // of assignments (“=” and “+=”). + "assign-left": { + pattern: /(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/, + inside: { + environment: { + pattern: RegExp("(^|[\\s;|&]|[<>]\\()" + t), + lookbehind: !0, + alias: "constant" + } + }, + alias: "variable", + lookbehind: !0 + }, + // Highlight parameter names as variables + parameter: { + pattern: /(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/, + alias: "variable", + lookbehind: !0 + }, + string: [ + // Support for Here-documents https://en.wikipedia.org/wiki/Here_document + { + pattern: /((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/, + lookbehind: !0, + greedy: !0, + inside: s + }, + // Here-document with quotes around the tag + // → No expansion (so no “inside”). + { + pattern: /((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/, + lookbehind: !0, + greedy: !0, + inside: { + bash: e + } + }, + // “Normal” string + { + // https://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html + pattern: /(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/, + lookbehind: !0, + greedy: !0, + inside: s + }, + { + // https://www.gnu.org/software/bash/manual/html_node/Single-Quotes.html + pattern: /(^|[^$\\])'[^']*'/, + lookbehind: !0, + greedy: !0 + }, + { + // https://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html + pattern: /\$'(?:[^'\\]|\\[\s\S])*'/, + greedy: !0, + inside: { + entity: s.entity + } + } + ], + environment: { + pattern: RegExp("\\$?" + t), + alias: "constant" + }, + variable: s.variable, + function: { + pattern: /(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/, + lookbehind: !0 + }, + keyword: { + pattern: /(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/, + lookbehind: !0 + }, + // https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html + builtin: { + pattern: /(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/, + lookbehind: !0, + // Alias added to make those easier to distinguish from strings. + alias: "class-name" + }, + boolean: { + pattern: /(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/, + lookbehind: !0 + }, + "file-descriptor": { + pattern: /\B&\d\b/, + alias: "important" + }, + operator: { + // Lots of redirections here, but not just that. + pattern: /\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/, + inside: { + "file-descriptor": { + pattern: /^\d/, + alias: "important" + } + } + }, + punctuation: /\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/, + number: { + pattern: /(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/, + lookbehind: !0 + } + }, e.inside = n.languages.bash; + for (var r = [ + "comment", + "function-name", + "for-or-select", + "assign-left", + "parameter", + "string", + "environment", + "function", + "keyword", + "builtin", + "boolean", + "file-descriptor", + "operator", + "punctuation", + "number" + ], i = s.variable[1].inside, a = 0; a < r.length; a++) + i[r[a]] = n.languages.bash[r[a]]; + n.languages.sh = n.languages.bash, n.languages.shell = n.languages.bash; +})(Prism); +(function(n) { + var t = /(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/; + n.languages.css = { + comment: /\/\*[\s\S]*?\*\//, + atrule: { + pattern: RegExp("@[\\w-](?:" + /[^;{\s"']|\s+(?!\s)/.source + "|" + t.source + ")*?" + /(?:;|(?=\s*\{))/.source), + inside: { + rule: /^@[\w-]+/, + "selector-function-argument": { + pattern: /(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/, + lookbehind: !0, + alias: "selector" + }, + keyword: { + pattern: /(^|[^\w-])(?:and|not|only|or)(?![\w-])/, + lookbehind: !0 + } + // See rest below + } + }, + url: { + // https://drafts.csswg.org/css-values-3/#urls + pattern: RegExp("\\burl\\((?:" + t.source + "|" + /(?:[^\\\r\n()"']|\\[\s\S])*/.source + ")\\)", "i"), + greedy: !0, + inside: { + function: /^url/i, + punctuation: /^\(|\)$/, + string: { + pattern: RegExp("^" + t.source + "$"), + alias: "url" + } + } + }, + selector: { + pattern: RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|` + t.source + ")*(?=\\s*\\{)"), + lookbehind: !0 + }, + string: { + pattern: t, + greedy: !0 + }, + property: { + pattern: /(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i, + lookbehind: !0 + }, + important: /!important\b/i, + function: { + pattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i, + lookbehind: !0 + }, + punctuation: /[(){};:,]/ + }, n.languages.css.atrule.inside.rest = n.languages.css; + var e = n.languages.markup; + e && (e.tag.addInlined("style", "css"), e.tag.addAttribute("style", "css")); +})(Prism); +Prism.languages.markup = { + comment: { + pattern: /<!--(?:(?!<!--)[\s\S])*?-->/, + greedy: !0 + }, + prolog: { + pattern: /<\?[\s\S]+?\?>/, + greedy: !0 + }, + doctype: { + // https://www.w3.org/TR/xml/#NT-doctypedecl + pattern: /<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i, + greedy: !0, + inside: { + "internal-subset": { + pattern: /(^[^\[]*\[)[\s\S]+(?=\]>$)/, + lookbehind: !0, + greedy: !0, + inside: null + // see below + }, + string: { + pattern: /"[^"]*"|'[^']*'/, + greedy: !0 + }, + punctuation: /^<!|>$|[[\]]/, + "doctype-tag": /^DOCTYPE/i, + name: /[^\s<>'"]+/ + } + }, + cdata: { + pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i, + greedy: !0 + }, + tag: { + pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/, + greedy: !0, + inside: { + tag: { + pattern: /^<\/?[^\s>\/]+/, + inside: { + punctuation: /^<\/?/, + namespace: /^[^\s>\/:]+:/ + } + }, + "special-attr": [], + "attr-value": { + pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/, + inside: { + punctuation: [ + { + pattern: /^=/, + alias: "attr-equals" + }, + { + pattern: /^(\s*)["']|["']$/, + lookbehind: !0 + } + ] + } + }, + punctuation: /\/?>/, + "attr-name": { + pattern: /[^\s>\/]+/, + inside: { + namespace: /^[^\s>\/:]+:/ + } + } + } + }, + entity: [ + { + pattern: /&[\da-z]{1,8};/i, + alias: "named-entity" + }, + /&#x?[\da-f]{1,8};/i + ] +}; +Prism.languages.markup.tag.inside["attr-value"].inside.entity = Prism.languages.markup.entity; +Prism.languages.markup.doctype.inside["internal-subset"].inside = Prism.languages.markup; +Prism.hooks.add("wrap", function(n) { + n.type === "entity" && (n.attributes.title = n.content.replace(/&/, "&")); +}); +Object.defineProperty(Prism.languages.markup.tag, "addInlined", { + /** + * Adds an inlined language to markup. + * + * An example of an inlined language is CSS with `<style>` tags. + * + * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as + * case insensitive. + * @param {string} lang The language key. + * @example + * addInlined('style', 'css'); + */ + value: function(t, e) { + var s = {}; + s["language-" + e] = { + pattern: /(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i, + lookbehind: !0, + inside: Prism.languages[e] + }, s.cdata = /^<!\[CDATA\[|\]\]>$/i; + var r = { + "included-cdata": { + pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i, + inside: s + } + }; + r["language-" + e] = { + pattern: /[\s\S]+/, + inside: Prism.languages[e] + }; + var i = {}; + i[t] = { + pattern: RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g, function() { + return t; + }), "i"), + lookbehind: !0, + greedy: !0, + inside: r + }, Prism.languages.insertBefore("markup", "cdata", i); + } +}); +Object.defineProperty(Prism.languages.markup.tag, "addAttribute", { + /** + * Adds an pattern to highlight languages embedded in HTML attributes. + * + * An example of an inlined language is CSS with `style` attributes. + * + * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as + * case insensitive. + * @param {string} lang The language key. + * @example + * addAttribute('style', 'css'); + */ + value: function(n, t) { + Prism.languages.markup.tag.inside["special-attr"].push({ + pattern: RegExp( + /(^|["'\s])/.source + "(?:" + n + ")" + /\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source, + "i" + ), + lookbehind: !0, + inside: { + "attr-name": /^[^\s=]+/, + "attr-value": { + pattern: /=[\s\S]+/, + inside: { + value: { + pattern: /(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/, + lookbehind: !0, + alias: [t, "language-" + t], + inside: Prism.languages[t] + }, + punctuation: [ + { + pattern: /^=/, + alias: "attr-equals" + }, + /"|'/ + ] + } + } + } + }); + } +}); +Prism.languages.html = Prism.languages.markup; +Prism.languages.mathml = Prism.languages.markup; +Prism.languages.svg = Prism.languages.markup; +Prism.languages.xml = Prism.languages.extend("markup", {}); +Prism.languages.ssml = Prism.languages.xml; +Prism.languages.atom = Prism.languages.xml; +Prism.languages.rss = Prism.languages.xml; +const $c = he.memo(({ content: n, className: t = "" }) => { + const e = he.useRef(null), s = Ng(() => { + const i = /#[a-zA-Z0-9_]+/.test(n), a = /\[.*?\]\(.*?\)/.test(n), o = /(\*\*|__|##?|###?|####?|#####?|######?|\*|\n\*|\n-|\n\d+\.)/.test(n); + return { + hasHashtags: i, + hasMarkdownLinks: a, + hasMarkdownSyntax: o + }; + }, [n]); + if (s.hasHashtags && !s.hasMarkdownLinks && !s.hasMarkdownSyntax) + return /* @__PURE__ */ h.jsx("div", { className: `prose prose-sm max-w-none dark:prose-invert ${t}`, children: /* @__PURE__ */ h.jsx(PF, { children: n }) }); + const r = Ng(() => { + const i = n.replace(/ /g, " ").replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&").replace(/"/g, '"').replace(/'/g, "'"); + Qt.setOptions({ + breaks: !0, + // Convert \n to <br> + gfm: !0 + // GitHub flavored markdown + }); + const a = Qt.parse(i), o = (u) => { + try { + let f = u.replace(/^https?:\/\//, ""); + if (f = f.replace(/^www\./, ""), f.length > 40) { + const p = f.split("/"), g = p[0], y = p.slice(1).join("/"); + y.length > 20 ? f = `${g}/${y.substring(0, 15)}...` : f = `${g}/${y}`; + } + return f; + } catch { + return u; + } + }, c = a.replace( + /<a href="([^"]*)"([^>]*)>([^<]*)<\/a>/g, + (u, f, p, g) => { + const v = g === f || g.replace(/^https?:\/\//, "") === f.replace(/^https?:\/\//, "") ? o(f) : g; + return `<a href="${f}"${p} target="_blank" rel="noopener noreferrer" class="text-primary hover:text-primary/80 underline hover:no-underline transition-colors">${v}</a>`; + } + ); + return eF.sanitize(c, { + ADD_ATTR: ["target", "rel", "class"] + // Allow target, rel, and class attributes for links + }); + }, [n]); + return he.useEffect(() => { + e.current && $F.highlightAllUnder(e.current); + }, [r]), /* @__PURE__ */ h.jsx( + "div", + { + ref: e, + className: `prose prose-sm max-w-none dark:prose-invert ${t}`, + dangerouslySetInnerHTML: { __html: r } + } + ); +}); +$c.displayName = "MarkdownRenderer"; +function Xe(n, t, { checkForDefaultPrevented: e = !0 } = {}) { + return function(r) { + if (n == null || n(r), e === !1 || !r.defaultPrevented) + return t == null ? void 0 : t(r); + }; +} +function RF(n, t) { + const e = d.createContext(t), s = (i) => { + const { children: a, ...o } = i, c = d.useMemo(() => o, Object.values(o)); + return /* @__PURE__ */ h.jsx(e.Provider, { value: c, children: a }); + }; + s.displayName = n + "Provider"; + function r(i) { + const a = d.useContext(e); + if (a) return a; + if (t !== void 0) return t; + throw new Error(`\`${i}\` must be used within \`${n}\``); + } + return [s, r]; +} +function Ir(n, t = []) { + let e = []; + function s(i, a) { + const o = d.createContext(a), c = e.length; + e = [...e, a]; + const u = (p) => { + var E; + const { scope: g, children: y, ...v } = p, b = ((E = g == null ? void 0 : g[n]) == null ? void 0 : E[c]) || o, w = d.useMemo(() => v, Object.values(v)); + return /* @__PURE__ */ h.jsx(b.Provider, { value: w, children: y }); + }; + u.displayName = i + "Provider"; + function f(p, g) { + var b; + const y = ((b = g == null ? void 0 : g[n]) == null ? void 0 : b[c]) || o, v = d.useContext(y); + if (v) return v; + if (a !== void 0) return a; + throw new Error(`\`${p}\` must be used within \`${i}\``); + } + return [u, f]; + } + const r = () => { + const i = e.map((a) => d.createContext(a)); + return function(o) { + const c = (o == null ? void 0 : o[n]) || i; + return d.useMemo( + () => ({ [`__scope${n}`]: { ...o, [n]: c } }), + [o, c] + ); + }; + }; + return r.scopeName = n, [s, IF(r, ...t)]; +} +function IF(...n) { + const t = n[0]; + if (n.length === 1) return t; + const e = () => { + const s = n.map((r) => ({ + useScope: r(), + scopeName: r.scopeName + })); + return function(i) { + const a = s.reduce((o, { useScope: c, scopeName: u }) => { + const p = c(i)[`__scope${u}`]; + return { ...o, ...p }; + }, {}); + return d.useMemo(() => ({ [`__scope${t.scopeName}`]: a }), [a]); + }; + }; + return e.scopeName = t.scopeName, e; +} +var ai = globalThis != null && globalThis.document ? d.useLayoutEffect : () => { +}, OF = d[" useId ".trim().toString()] || (() => { +}), MF = 0; +function Sc(n) { + const [t, e] = d.useState(OF()); + return ai(() => { + e((s) => s ?? String(MF++)); + }, [n]), t ? `radix-${t}` : ""; +} +var DF = d[" useInsertionEffect ".trim().toString()] || ai; +function Hc({ + prop: n, + defaultProp: t, + onChange: e = () => { + }, + caller: s +}) { + const [r, i, a] = LF({ + defaultProp: t, + onChange: e + }), o = n !== void 0, c = o ? n : r; + { + const f = d.useRef(n !== void 0); + d.useEffect(() => { + const p = f.current; + p !== o && console.warn( + `${s} is changing from ${p ? "controlled" : "uncontrolled"} to ${o ? "controlled" : "uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.` + ), f.current = o; + }, [o, s]); + } + const u = d.useCallback( + (f) => { + var p; + if (o) { + const g = jF(f) ? f(n) : f; + g !== n && ((p = a.current) == null || p.call(a, g)); + } else + i(f); + }, + [o, n, i, a] + ); + return [c, u]; +} +function LF({ + defaultProp: n, + onChange: t +}) { + const [e, s] = d.useState(n), r = d.useRef(e), i = d.useRef(t); + return DF(() => { + i.current = t; + }, [t]), d.useEffect(() => { + var a; + r.current !== e && ((a = i.current) == null || a.call(i, e), r.current = e); + }, [e, r]), [e, s, i]; +} +function jF(n) { + return typeof n == "function"; +} +// @__NO_SIDE_EFFECTS__ +function FF(n) { + const t = /* @__PURE__ */ VF(n), e = d.forwardRef((s, r) => { + const { children: i, ...a } = s, o = d.Children.toArray(i), c = o.find(UF); + if (c) { + const u = c.props.children, f = o.map((p) => p === c ? d.Children.count(u) > 1 ? d.Children.only(null) : d.isValidElement(u) ? u.props.children : null : p); + return /* @__PURE__ */ h.jsx(t, { ...a, ref: r, children: d.isValidElement(u) ? d.cloneElement(u, void 0, f) : null }); + } + return /* @__PURE__ */ h.jsx(t, { ...a, ref: r, children: i }); + }); + return e.displayName = `${n}.Slot`, e; +} +// @__NO_SIDE_EFFECTS__ +function VF(n) { + const t = d.forwardRef((e, s) => { + const { children: r, ...i } = e; + if (d.isValidElement(r)) { + const a = zF(r), o = qF(i, r.props); + return r.type !== d.Fragment && (o.ref = s ? vl(s, a) : a), d.cloneElement(r, o); + } + return d.Children.count(r) > 1 ? d.Children.only(null) : null; + }); + return t.displayName = `${n}.SlotClone`, t; +} +var BF = Symbol("radix.slottable"); +function UF(n) { + return d.isValidElement(n) && typeof n.type == "function" && "__radixId" in n.type && n.type.__radixId === BF; +} +function qF(n, t) { + const e = { ...t }; + for (const s in t) { + const r = n[s], i = t[s]; + /^on[A-Z]/.test(s) ? r && i ? e[s] = (...o) => { + const c = i(...o); + return r(...o), c; + } : r && (e[s] = r) : s === "style" ? e[s] = { ...r, ...i } : s === "className" && (e[s] = [r, i].filter(Boolean).join(" ")); + } + return { ...n, ...e }; +} +function zF(n) { + var s, r; + let t = (s = Object.getOwnPropertyDescriptor(n.props, "ref")) == null ? void 0 : s.get, e = t && "isReactWarning" in t && t.isReactWarning; + return e ? n.ref : (t = (r = Object.getOwnPropertyDescriptor(n, "ref")) == null ? void 0 : r.get, e = t && "isReactWarning" in t && t.isReactWarning, e ? n.props.ref : n.props.ref || n.ref); +} +var HF = [ + "a", + "button", + "div", + "form", + "h2", + "h3", + "img", + "input", + "label", + "li", + "nav", + "ol", + "p", + "select", + "span", + "svg", + "ul" +], Ut = HF.reduce((n, t) => { + const e = /* @__PURE__ */ FF(`Primitive.${t}`), s = d.forwardRef((r, i) => { + const { asChild: a, ...o } = r, c = a ? e : t; + return typeof window < "u" && (window[Symbol.for("radix-ui")] = !0), /* @__PURE__ */ h.jsx(c, { ...o, ref: i }); + }); + return s.displayName = `Primitive.${t}`, { ...n, [t]: s }; +}, {}); +function AE(n, t) { + n && ZS.flushSync(() => n.dispatchEvent(t)); +} +function Fi(n) { + const t = d.useRef(n); + return d.useEffect(() => { + t.current = n; + }), d.useMemo(() => (...e) => { + var s; + return (s = t.current) == null ? void 0 : s.call(t, ...e); + }, []); +} +function WF(n, t = globalThis == null ? void 0 : globalThis.document) { + const e = Fi(n); + d.useEffect(() => { + const s = (r) => { + r.key === "Escape" && e(r); + }; + return t.addEventListener("keydown", s, { capture: !0 }), () => t.removeEventListener("keydown", s, { capture: !0 }); + }, [e, t]); +} +var GF = "DismissableLayer", vw = "dismissableLayer.update", YF = "dismissableLayer.pointerDownOutside", KF = "dismissableLayer.focusOutside", n6, PE = d.createContext({ + layers: /* @__PURE__ */ new Set(), + layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(), + branches: /* @__PURE__ */ new Set() +}), Hx = d.forwardRef( + (n, t) => { + const { + disableOutsidePointerEvents: e = !1, + onEscapeKeyDown: s, + onPointerDownOutside: r, + onFocusOutside: i, + onInteractOutside: a, + onDismiss: o, + ...c + } = n, u = d.useContext(PE), [f, p] = d.useState(null), g = (f == null ? void 0 : f.ownerDocument) ?? (globalThis == null ? void 0 : globalThis.document), [, y] = d.useState({}), v = un(t, (T) => p(T)), b = Array.from(u.layers), [w] = [...u.layersWithOutsidePointerEventsDisabled].slice(-1), E = b.indexOf(w), x = f ? b.indexOf(f) : -1, C = u.layersWithOutsidePointerEventsDisabled.size > 0, _ = x >= E, k = QF((T) => { + const N = T.target, $ = [...u.branches].some((D) => D.contains(N)); + !_ || $ || (r == null || r(T), a == null || a(T), T.defaultPrevented || o == null || o()); + }, g), A = JF((T) => { + const N = T.target; + [...u.branches].some((D) => D.contains(N)) || (i == null || i(T), a == null || a(T), T.defaultPrevented || o == null || o()); + }, g); + return WF((T) => { + x === u.layers.size - 1 && (s == null || s(T), !T.defaultPrevented && o && (T.preventDefault(), o())); + }, g), d.useEffect(() => { + if (f) + return e && (u.layersWithOutsidePointerEventsDisabled.size === 0 && (n6 = g.body.style.pointerEvents, g.body.style.pointerEvents = "none"), u.layersWithOutsidePointerEventsDisabled.add(f)), u.layers.add(f), s6(), () => { + e && u.layersWithOutsidePointerEventsDisabled.size === 1 && (g.body.style.pointerEvents = n6); + }; + }, [f, g, e, u]), d.useEffect(() => () => { + f && (u.layers.delete(f), u.layersWithOutsidePointerEventsDisabled.delete(f), s6()); + }, [f, u]), d.useEffect(() => { + const T = () => y({}); + return document.addEventListener(vw, T), () => document.removeEventListener(vw, T); + }, []), /* @__PURE__ */ h.jsx( + Ut.div, + { + ...c, + ref: v, + style: { + pointerEvents: C ? _ ? "auto" : "none" : void 0, + ...n.style + }, + onFocusCapture: Xe(n.onFocusCapture, A.onFocusCapture), + onBlurCapture: Xe(n.onBlurCapture, A.onBlurCapture), + onPointerDownCapture: Xe( + n.onPointerDownCapture, + k.onPointerDownCapture + ) + } + ); + } +); +Hx.displayName = GF; +var ZF = "DismissableLayerBranch", XF = d.forwardRef((n, t) => { + const e = d.useContext(PE), s = d.useRef(null), r = un(t, s); + return d.useEffect(() => { + const i = s.current; + if (i) + return e.branches.add(i), () => { + e.branches.delete(i); + }; + }, [e.branches]), /* @__PURE__ */ h.jsx(Ut.div, { ...n, ref: r }); +}); +XF.displayName = ZF; +function QF(n, t = globalThis == null ? void 0 : globalThis.document) { + const e = Fi(n), s = d.useRef(!1), r = d.useRef(() => { + }); + return d.useEffect(() => { + const i = (o) => { + if (o.target && !s.current) { + let c = function() { + NE( + YF, + e, + u, + { discrete: !0 } + ); + }; + const u = { originalEvent: o }; + o.pointerType === "touch" ? (t.removeEventListener("click", r.current), r.current = c, t.addEventListener("click", r.current, { once: !0 })) : c(); + } else + t.removeEventListener("click", r.current); + s.current = !1; + }, a = window.setTimeout(() => { + t.addEventListener("pointerdown", i); + }, 0); + return () => { + window.clearTimeout(a), t.removeEventListener("pointerdown", i), t.removeEventListener("click", r.current); + }; + }, [t, e]), { + // ensures we check React component tree (not just DOM tree) + onPointerDownCapture: () => s.current = !0 + }; +} +function JF(n, t = globalThis == null ? void 0 : globalThis.document) { + const e = Fi(n), s = d.useRef(!1); + return d.useEffect(() => { + const r = (i) => { + i.target && !s.current && NE(KF, e, { originalEvent: i }, { + discrete: !1 + }); + }; + return t.addEventListener("focusin", r), () => t.removeEventListener("focusin", r); + }, [t, e]), { + onFocusCapture: () => s.current = !0, + onBlurCapture: () => s.current = !1 + }; +} +function s6() { + const n = new CustomEvent(vw); + document.dispatchEvent(n); +} +function NE(n, t, e, { discrete: s }) { + const r = e.originalEvent.target, i = new CustomEvent(n, { bubbles: !1, cancelable: !0, detail: e }); + t && r.addEventListener(n, t, { once: !0 }), s ? AE(r, i) : r.dispatchEvent(i); +} +var lb = "focusScope.autoFocusOnMount", cb = "focusScope.autoFocusOnUnmount", r6 = { bubbles: !1, cancelable: !0 }, eV = "FocusScope", Wx = d.forwardRef((n, t) => { + const { + loop: e = !1, + trapped: s = !1, + onMountAutoFocus: r, + onUnmountAutoFocus: i, + ...a + } = n, [o, c] = d.useState(null), u = Fi(r), f = Fi(i), p = d.useRef(null), g = un(t, (b) => c(b)), y = d.useRef({ + paused: !1, + pause() { + this.paused = !0; + }, + resume() { + this.paused = !1; + } + }).current; + d.useEffect(() => { + if (s) { + let b = function(C) { + if (y.paused || !o) return; + const _ = C.target; + o.contains(_) ? p.current = _ : uo(p.current, { select: !0 }); + }, w = function(C) { + if (y.paused || !o) return; + const _ = C.relatedTarget; + _ !== null && (o.contains(_) || uo(p.current, { select: !0 })); + }, E = function(C) { + if (document.activeElement === document.body) + for (const k of C) + k.removedNodes.length > 0 && uo(o); + }; + document.addEventListener("focusin", b), document.addEventListener("focusout", w); + const x = new MutationObserver(E); + return o && x.observe(o, { childList: !0, subtree: !0 }), () => { + document.removeEventListener("focusin", b), document.removeEventListener("focusout", w), x.disconnect(); + }; + } + }, [s, o, y.paused]), d.useEffect(() => { + if (o) { + a6.add(y); + const b = document.activeElement; + if (!o.contains(b)) { + const E = new CustomEvent(lb, r6); + o.addEventListener(lb, u), o.dispatchEvent(E), E.defaultPrevented || (tV(aV($E(o)), { select: !0 }), document.activeElement === b && uo(o)); + } + return () => { + o.removeEventListener(lb, u), setTimeout(() => { + const E = new CustomEvent(cb, r6); + o.addEventListener(cb, f), o.dispatchEvent(E), E.defaultPrevented || uo(b ?? document.body, { select: !0 }), o.removeEventListener(cb, f), a6.remove(y); + }, 0); + }; + } + }, [o, u, f, y]); + const v = d.useCallback( + (b) => { + if (!e && !s || y.paused) return; + const w = b.key === "Tab" && !b.altKey && !b.ctrlKey && !b.metaKey, E = document.activeElement; + if (w && E) { + const x = b.currentTarget, [C, _] = nV(x); + C && _ ? !b.shiftKey && E === _ ? (b.preventDefault(), e && uo(C, { select: !0 })) : b.shiftKey && E === C && (b.preventDefault(), e && uo(_, { select: !0 })) : E === x && b.preventDefault(); + } + }, + [e, s, y.paused] + ); + return /* @__PURE__ */ h.jsx(Ut.div, { tabIndex: -1, ...a, ref: g, onKeyDown: v }); +}); +Wx.displayName = eV; +function tV(n, { select: t = !1 } = {}) { + const e = document.activeElement; + for (const s of n) + if (uo(s, { select: t }), document.activeElement !== e) return; +} +function nV(n) { + const t = $E(n), e = i6(t, n), s = i6(t.reverse(), n); + return [e, s]; +} +function $E(n) { + const t = [], e = document.createTreeWalker(n, NodeFilter.SHOW_ELEMENT, { + acceptNode: (s) => { + const r = s.tagName === "INPUT" && s.type === "hidden"; + return s.disabled || s.hidden || r ? NodeFilter.FILTER_SKIP : s.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP; + } + }); + for (; e.nextNode(); ) t.push(e.currentNode); + return t; +} +function i6(n, t) { + for (const e of n) + if (!sV(e, { upTo: t })) return e; +} +function sV(n, { upTo: t }) { + if (getComputedStyle(n).visibility === "hidden") return !0; + for (; n; ) { + if (t !== void 0 && n === t) return !1; + if (getComputedStyle(n).display === "none") return !0; + n = n.parentElement; + } + return !1; +} +function rV(n) { + return n instanceof HTMLInputElement && "select" in n; +} +function uo(n, { select: t = !1 } = {}) { + if (n && n.focus) { + const e = document.activeElement; + n.focus({ preventScroll: !0 }), n !== e && rV(n) && t && n.select(); + } +} +var a6 = iV(); +function iV() { + let n = []; + return { + add(t) { + const e = n[0]; + t !== e && (e == null || e.pause()), n = o6(n, t), n.unshift(t); + }, + remove(t) { + var e; + n = o6(n, t), (e = n[0]) == null || e.resume(); + } + }; +} +function o6(n, t) { + const e = [...n], s = e.indexOf(t); + return s !== -1 && e.splice(s, 1), e; +} +function aV(n) { + return n.filter((t) => t.tagName !== "A"); +} +var oV = "Portal", Gx = d.forwardRef((n, t) => { + var o; + const { container: e, ...s } = n, [r, i] = d.useState(!1); + ai(() => i(!0), []); + const a = e || r && ((o = globalThis == null ? void 0 : globalThis.document) == null ? void 0 : o.body); + return a ? X8.createPortal(/* @__PURE__ */ h.jsx(Ut.div, { ...s, ref: t }), a) : null; +}); +Gx.displayName = oV; +function lV(n, t) { + return d.useReducer((e, s) => t[e][s] ?? e, n); +} +var ui = (n) => { + const { present: t, children: e } = n, s = cV(t), r = typeof e == "function" ? e({ present: s.isPresent }) : d.Children.only(e), i = un(s.ref, uV(r)); + return typeof e == "function" || s.isPresent ? d.cloneElement(r, { ref: i }) : null; +}; +ui.displayName = "Presence"; +function cV(n) { + const [t, e] = d.useState(), s = d.useRef(null), r = d.useRef(n), i = d.useRef("none"), a = n ? "mounted" : "unmounted", [o, c] = lV(a, { + mounted: { + UNMOUNT: "unmounted", + ANIMATION_OUT: "unmountSuspended" + }, + unmountSuspended: { + MOUNT: "mounted", + ANIMATION_END: "unmounted" + }, + unmounted: { + MOUNT: "mounted" + } + }); + return d.useEffect(() => { + const u = fm(s.current); + i.current = o === "mounted" ? u : "none"; + }, [o]), ai(() => { + const u = s.current, f = r.current; + if (f !== n) { + const g = i.current, y = fm(u); + n ? c("MOUNT") : y === "none" || (u == null ? void 0 : u.display) === "none" ? c("UNMOUNT") : c(f && g !== y ? "ANIMATION_OUT" : "UNMOUNT"), r.current = n; + } + }, [n, c]), ai(() => { + if (t) { + let u; + const f = t.ownerDocument.defaultView ?? window, p = (y) => { + const b = fm(s.current).includes(CSS.escape(y.animationName)); + if (y.target === t && b && (c("ANIMATION_END"), !r.current)) { + const w = t.style.animationFillMode; + t.style.animationFillMode = "forwards", u = f.setTimeout(() => { + t.style.animationFillMode === "forwards" && (t.style.animationFillMode = w); + }); + } + }, g = (y) => { + y.target === t && (i.current = fm(s.current)); + }; + return t.addEventListener("animationstart", g), t.addEventListener("animationcancel", p), t.addEventListener("animationend", p), () => { + f.clearTimeout(u), t.removeEventListener("animationstart", g), t.removeEventListener("animationcancel", p), t.removeEventListener("animationend", p); + }; + } else + c("ANIMATION_END"); + }, [t, c]), { + isPresent: ["mounted", "unmountSuspended"].includes(o), + ref: d.useCallback((u) => { + s.current = u ? getComputedStyle(u) : null, e(u); + }, []) + }; +} +function fm(n) { + return (n == null ? void 0 : n.animationName) || "none"; +} +function uV(n) { + var s, r; + let t = (s = Object.getOwnPropertyDescriptor(n.props, "ref")) == null ? void 0 : s.get, e = t && "isReactWarning" in t && t.isReactWarning; + return e ? n.ref : (t = (r = Object.getOwnPropertyDescriptor(n, "ref")) == null ? void 0 : r.get, e = t && "isReactWarning" in t && t.isReactWarning, e ? n.props.ref : n.props.ref || n.ref); +} +var ub = 0; +function RE() { + d.useEffect(() => { + const n = document.querySelectorAll("[data-radix-focus-guard]"); + return document.body.insertAdjacentElement("afterbegin", n[0] ?? l6()), document.body.insertAdjacentElement("beforeend", n[1] ?? l6()), ub++, () => { + ub === 1 && document.querySelectorAll("[data-radix-focus-guard]").forEach((t) => t.remove()), ub--; + }; + }, []); +} +function l6() { + const n = document.createElement("span"); + return n.setAttribute("data-radix-focus-guard", ""), n.tabIndex = 0, n.style.outline = "none", n.style.opacity = "0", n.style.position = "fixed", n.style.pointerEvents = "none", n; +} +var $i = function() { + return $i = Object.assign || function(t) { + for (var e, s = 1, r = arguments.length; s < r; s++) { + e = arguments[s]; + for (var i in e) Object.prototype.hasOwnProperty.call(e, i) && (t[i] = e[i]); + } + return t; + }, $i.apply(this, arguments); +}; +function IE(n, t) { + var e = {}; + for (var s in n) Object.prototype.hasOwnProperty.call(n, s) && t.indexOf(s) < 0 && (e[s] = n[s]); + if (n != null && typeof Object.getOwnPropertySymbols == "function") + for (var r = 0, s = Object.getOwnPropertySymbols(n); r < s.length; r++) + t.indexOf(s[r]) < 0 && Object.prototype.propertyIsEnumerable.call(n, s[r]) && (e[s[r]] = n[s[r]]); + return e; +} +function dV(n, t, e) { + if (e || arguments.length === 2) for (var s = 0, r = t.length, i; s < r; s++) + (i || !(s in t)) && (i || (i = Array.prototype.slice.call(t, 0, s)), i[s] = t[s]); + return n.concat(i || Array.prototype.slice.call(t)); +} +var Bm = "right-scroll-bar-position", Um = "width-before-scroll-bar", hV = "with-scroll-bars-hidden", fV = "--removed-body-scroll-bar-size"; +function db(n, t) { + return typeof n == "function" ? n(t) : n && (n.current = t), n; +} +function pV(n, t) { + var e = fe(function() { + return { + // value + value: n, + // last callback + callback: t, + // "memoized" public interface + facade: { + get current() { + return e.value; + }, + set current(s) { + var r = e.value; + r !== s && (e.value = s, e.callback(s, r)); + } + } + }; + })[0]; + return e.callback = t, e.facade; +} +var mV = typeof window < "u" ? d.useLayoutEffect : d.useEffect, c6 = /* @__PURE__ */ new WeakMap(); +function gV(n, t) { + var e = pV(null, function(s) { + return n.forEach(function(r) { + return db(r, s); + }); + }); + return mV(function() { + var s = c6.get(e); + if (s) { + var r = new Set(s), i = new Set(n), a = e.current; + r.forEach(function(o) { + i.has(o) || db(o, null); + }), i.forEach(function(o) { + r.has(o) || db(o, a); + }); + } + c6.set(e, n); + }, [n]), e; +} +function yV(n) { + return n; +} +function vV(n, t) { + t === void 0 && (t = yV); + var e = [], s = !1, r = { + read: function() { + if (s) + throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`."); + return e.length ? e[e.length - 1] : n; + }, + useMedium: function(i) { + var a = t(i, s); + return e.push(a), function() { + e = e.filter(function(o) { + return o !== a; + }); + }; + }, + assignSyncMedium: function(i) { + for (s = !0; e.length; ) { + var a = e; + e = [], a.forEach(i); + } + e = { + push: function(o) { + return i(o); + }, + filter: function() { + return e; + } + }; + }, + assignMedium: function(i) { + s = !0; + var a = []; + if (e.length) { + var o = e; + e = [], o.forEach(i), a = e; + } + var c = function() { + var f = a; + a = [], f.forEach(i); + }, u = function() { + return Promise.resolve().then(c); + }; + u(), e = { + push: function(f) { + a.push(f), u(); + }, + filter: function(f) { + return a = a.filter(f), e; + } + }; + } + }; + return r; +} +function bV(n) { + n === void 0 && (n = {}); + var t = vV(null); + return t.options = $i({ async: !0, ssr: !1 }, n), t; +} +var OE = function(n) { + var t = n.sideCar, e = IE(n, ["sideCar"]); + if (!t) + throw new Error("Sidecar: please provide `sideCar` property to import the right car"); + var s = t.read(); + if (!s) + throw new Error("Sidecar medium not found"); + return d.createElement(s, $i({}, e)); +}; +OE.isSideCarExport = !0; +function wV(n, t) { + return n.useMedium(t), OE; +} +var ME = bV(), hb = function() { +}, Ky = d.forwardRef(function(n, t) { + var e = d.useRef(null), s = d.useState({ + onScrollCapture: hb, + onWheelCapture: hb, + onTouchMoveCapture: hb + }), r = s[0], i = s[1], a = n.forwardProps, o = n.children, c = n.className, u = n.removeScrollBar, f = n.enabled, p = n.shards, g = n.sideCar, y = n.noRelative, v = n.noIsolation, b = n.inert, w = n.allowPinchZoom, E = n.as, x = E === void 0 ? "div" : E, C = n.gapMode, _ = IE(n, ["forwardProps", "children", "className", "removeScrollBar", "enabled", "shards", "sideCar", "noRelative", "noIsolation", "inert", "allowPinchZoom", "as", "gapMode"]), k = g, A = gV([e, t]), T = $i($i({}, _), r); + return d.createElement( + d.Fragment, + null, + f && d.createElement(k, { sideCar: ME, removeScrollBar: u, shards: p, noRelative: y, noIsolation: v, inert: b, setCallbacks: i, allowPinchZoom: !!w, lockRef: e, gapMode: C }), + a ? d.cloneElement(d.Children.only(o), $i($i({}, T), { ref: A })) : d.createElement(x, $i({}, T, { className: c, ref: A }), o) + ); +}); +Ky.defaultProps = { + enabled: !0, + removeScrollBar: !0, + inert: !1 +}; +Ky.classNames = { + fullWidth: Um, + zeroRight: Bm +}; +var xV = function() { + if (typeof __webpack_nonce__ < "u") + return __webpack_nonce__; +}; +function CV() { + if (!document) + return null; + var n = document.createElement("style"); + n.type = "text/css"; + var t = xV(); + return t && n.setAttribute("nonce", t), n; +} +function _V(n, t) { + n.styleSheet ? n.styleSheet.cssText = t : n.appendChild(document.createTextNode(t)); +} +function SV(n) { + var t = document.head || document.getElementsByTagName("head")[0]; + t.appendChild(n); +} +var EV = function() { + var n = 0, t = null; + return { + add: function(e) { + n == 0 && (t = CV()) && (_V(t, e), SV(t)), n++; + }, + remove: function() { + n--, !n && t && (t.parentNode && t.parentNode.removeChild(t), t = null); + } + }; +}, kV = function() { + var n = EV(); + return function(t, e) { + d.useEffect(function() { + return n.add(t), function() { + n.remove(); + }; + }, [t && e]); + }; +}, DE = function() { + var n = kV(), t = function(e) { + var s = e.styles, r = e.dynamic; + return n(s, r), null; + }; + return t; +}, TV = { + left: 0, + top: 0, + right: 0, + gap: 0 +}, fb = function(n) { + return parseInt(n || "", 10) || 0; +}, AV = function(n) { + var t = window.getComputedStyle(document.body), e = t[n === "padding" ? "paddingLeft" : "marginLeft"], s = t[n === "padding" ? "paddingTop" : "marginTop"], r = t[n === "padding" ? "paddingRight" : "marginRight"]; + return [fb(e), fb(s), fb(r)]; +}, PV = function(n) { + if (n === void 0 && (n = "margin"), typeof window > "u") + return TV; + var t = AV(n), e = document.documentElement.clientWidth, s = window.innerWidth; + return { + left: t[0], + top: t[1], + right: t[2], + gap: Math.max(0, s - e + t[2] - t[0]) + }; +}, NV = DE(), bu = "data-scroll-locked", $V = function(n, t, e, s) { + var r = n.left, i = n.top, a = n.right, o = n.gap; + return e === void 0 && (e = "margin"), ` + .`.concat(hV, ` { + overflow: hidden `).concat(s, `; + padding-right: `).concat(o, "px ").concat(s, `; + } + body[`).concat(bu, `] { + overflow: hidden `).concat(s, `; + overscroll-behavior: contain; + `).concat([ + t && "position: relative ".concat(s, ";"), + e === "margin" && ` + padding-left: `.concat(r, `px; + padding-top: `).concat(i, `px; + padding-right: `).concat(a, `px; + margin-left:0; + margin-top:0; + margin-right: `).concat(o, "px ").concat(s, `; + `), + e === "padding" && "padding-right: ".concat(o, "px ").concat(s, ";") + ].filter(Boolean).join(""), ` + } + + .`).concat(Bm, ` { + right: `).concat(o, "px ").concat(s, `; + } + + .`).concat(Um, ` { + margin-right: `).concat(o, "px ").concat(s, `; + } + + .`).concat(Bm, " .").concat(Bm, ` { + right: 0 `).concat(s, `; + } + + .`).concat(Um, " .").concat(Um, ` { + margin-right: 0 `).concat(s, `; + } + + body[`).concat(bu, `] { + `).concat(fV, ": ").concat(o, `px; + } +`); +}, u6 = function() { + var n = parseInt(document.body.getAttribute(bu) || "0", 10); + return isFinite(n) ? n : 0; +}, RV = function() { + d.useEffect(function() { + return document.body.setAttribute(bu, (u6() + 1).toString()), function() { + var n = u6() - 1; + n <= 0 ? document.body.removeAttribute(bu) : document.body.setAttribute(bu, n.toString()); + }; + }, []); +}, IV = function(n) { + var t = n.noRelative, e = n.noImportant, s = n.gapMode, r = s === void 0 ? "margin" : s; + RV(); + var i = d.useMemo(function() { + return PV(r); + }, [r]); + return d.createElement(NV, { styles: $V(i, !t, r, e ? "" : "!important") }); +}, bw = !1; +if (typeof window < "u") + try { + var pm = Object.defineProperty({}, "passive", { + get: function() { + return bw = !0, !0; + } + }); + window.addEventListener("test", pm, pm), window.removeEventListener("test", pm, pm); + } catch { + bw = !1; + } +var Jc = bw ? { passive: !1 } : !1, OV = function(n) { + return n.tagName === "TEXTAREA"; +}, LE = function(n, t) { + if (!(n instanceof Element)) + return !1; + var e = window.getComputedStyle(n); + return ( + // not-not-scrollable + e[t] !== "hidden" && // contains scroll inside self + !(e.overflowY === e.overflowX && !OV(n) && e[t] === "visible") + ); +}, MV = function(n) { + return LE(n, "overflowY"); +}, DV = function(n) { + return LE(n, "overflowX"); +}, d6 = function(n, t) { + var e = t.ownerDocument, s = t; + do { + typeof ShadowRoot < "u" && s instanceof ShadowRoot && (s = s.host); + var r = jE(n, s); + if (r) { + var i = FE(n, s), a = i[1], o = i[2]; + if (a > o) + return !0; + } + s = s.parentNode; + } while (s && s !== e.body); + return !1; +}, LV = function(n) { + var t = n.scrollTop, e = n.scrollHeight, s = n.clientHeight; + return [ + t, + e, + s + ]; +}, jV = function(n) { + var t = n.scrollLeft, e = n.scrollWidth, s = n.clientWidth; + return [ + t, + e, + s + ]; +}, jE = function(n, t) { + return n === "v" ? MV(t) : DV(t); +}, FE = function(n, t) { + return n === "v" ? LV(t) : jV(t); +}, FV = function(n, t) { + return n === "h" && t === "rtl" ? -1 : 1; +}, VV = function(n, t, e, s, r) { + var i = FV(n, window.getComputedStyle(t).direction), a = i * s, o = e.target, c = t.contains(o), u = !1, f = a > 0, p = 0, g = 0; + do { + if (!o) + break; + var y = FE(n, o), v = y[0], b = y[1], w = y[2], E = b - w - i * v; + (v || E) && jE(n, o) && (p += E, g += v); + var x = o.parentNode; + o = x && x.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? x.host : x; + } while ( + // portaled content + !c && o !== document.body || // self content + c && (t.contains(o) || t === o) + ); + return (f && Math.abs(p) < 1 || !f && Math.abs(g) < 1) && (u = !0), u; +}, mm = function(n) { + return "changedTouches" in n ? [n.changedTouches[0].clientX, n.changedTouches[0].clientY] : [0, 0]; +}, h6 = function(n) { + return [n.deltaX, n.deltaY]; +}, f6 = function(n) { + return n && "current" in n ? n.current : n; +}, BV = function(n, t) { + return n[0] === t[0] && n[1] === t[1]; +}, UV = function(n) { + return ` + .block-interactivity-`.concat(n, ` {pointer-events: none;} + .allow-interactivity-`).concat(n, ` {pointer-events: all;} +`); +}, qV = 0, eu = []; +function zV(n) { + var t = d.useRef([]), e = d.useRef([0, 0]), s = d.useRef(), r = d.useState(qV++)[0], i = d.useState(DE)[0], a = d.useRef(n); + d.useEffect(function() { + a.current = n; + }, [n]), d.useEffect(function() { + if (n.inert) { + document.body.classList.add("block-interactivity-".concat(r)); + var b = dV([n.lockRef.current], (n.shards || []).map(f6), !0).filter(Boolean); + return b.forEach(function(w) { + return w.classList.add("allow-interactivity-".concat(r)); + }), function() { + document.body.classList.remove("block-interactivity-".concat(r)), b.forEach(function(w) { + return w.classList.remove("allow-interactivity-".concat(r)); + }); + }; + } + }, [n.inert, n.lockRef.current, n.shards]); + var o = d.useCallback(function(b, w) { + if ("touches" in b && b.touches.length === 2 || b.type === "wheel" && b.ctrlKey) + return !a.current.allowPinchZoom; + var E = mm(b), x = e.current, C = "deltaX" in b ? b.deltaX : x[0] - E[0], _ = "deltaY" in b ? b.deltaY : x[1] - E[1], k, A = b.target, T = Math.abs(C) > Math.abs(_) ? "h" : "v"; + if ("touches" in b && T === "h" && A.type === "range") + return !1; + var N = window.getSelection(), $ = N && N.anchorNode, D = $ ? $ === A || $.contains(A) : !1; + if (D) + return !1; + var V = d6(T, A); + if (!V) + return !0; + if (V ? k = T : (k = T === "v" ? "h" : "v", V = d6(T, A)), !V) + return !1; + if (!s.current && "changedTouches" in b && (C || _) && (s.current = k), !k) + return !0; + var j = s.current || k; + return VV(j, w, b, j === "h" ? C : _); + }, []), c = d.useCallback(function(b) { + var w = b; + if (!(!eu.length || eu[eu.length - 1] !== i)) { + var E = "deltaY" in w ? h6(w) : mm(w), x = t.current.filter(function(k) { + return k.name === w.type && (k.target === w.target || w.target === k.shadowParent) && BV(k.delta, E); + })[0]; + if (x && x.should) { + w.cancelable && w.preventDefault(); + return; + } + if (!x) { + var C = (a.current.shards || []).map(f6).filter(Boolean).filter(function(k) { + return k.contains(w.target); + }), _ = C.length > 0 ? o(w, C[0]) : !a.current.noIsolation; + _ && w.cancelable && w.preventDefault(); + } + } + }, []), u = d.useCallback(function(b, w, E, x) { + var C = { name: b, delta: w, target: E, should: x, shadowParent: HV(E) }; + t.current.push(C), setTimeout(function() { + t.current = t.current.filter(function(_) { + return _ !== C; + }); + }, 1); + }, []), f = d.useCallback(function(b) { + e.current = mm(b), s.current = void 0; + }, []), p = d.useCallback(function(b) { + u(b.type, h6(b), b.target, o(b, n.lockRef.current)); + }, []), g = d.useCallback(function(b) { + u(b.type, mm(b), b.target, o(b, n.lockRef.current)); + }, []); + d.useEffect(function() { + return eu.push(i), n.setCallbacks({ + onScrollCapture: p, + onWheelCapture: p, + onTouchMoveCapture: g + }), document.addEventListener("wheel", c, Jc), document.addEventListener("touchmove", c, Jc), document.addEventListener("touchstart", f, Jc), function() { + eu = eu.filter(function(b) { + return b !== i; + }), document.removeEventListener("wheel", c, Jc), document.removeEventListener("touchmove", c, Jc), document.removeEventListener("touchstart", f, Jc); + }; + }, []); + var y = n.removeScrollBar, v = n.inert; + return d.createElement( + d.Fragment, + null, + v ? d.createElement(i, { styles: UV(r) }) : null, + y ? d.createElement(IV, { noRelative: n.noRelative, gapMode: n.gapMode }) : null + ); +} +function HV(n) { + for (var t = null; n !== null; ) + n instanceof ShadowRoot && (t = n.host, n = n.host), n = n.parentNode; + return t; +} +const WV = wV(ME, zV); +var Yx = d.forwardRef(function(n, t) { + return d.createElement(Ky, $i({}, n, { ref: t, sideCar: WV })); +}); +Yx.classNames = Ky.classNames; +var GV = function(n) { + if (typeof document > "u") + return null; + var t = Array.isArray(n) ? n[0] : n; + return t.ownerDocument.body; +}, tu = /* @__PURE__ */ new WeakMap(), gm = /* @__PURE__ */ new WeakMap(), ym = {}, pb = 0, VE = function(n) { + return n && (n.host || VE(n.parentNode)); +}, YV = function(n, t) { + return t.map(function(e) { + if (n.contains(e)) + return e; + var s = VE(e); + return s && n.contains(s) ? s : (console.error("aria-hidden", e, "in not contained inside", n, ". Doing nothing"), null); + }).filter(function(e) { + return !!e; + }); +}, KV = function(n, t, e, s) { + var r = YV(t, Array.isArray(n) ? n : [n]); + ym[e] || (ym[e] = /* @__PURE__ */ new WeakMap()); + var i = ym[e], a = [], o = /* @__PURE__ */ new Set(), c = new Set(r), u = function(p) { + !p || o.has(p) || (o.add(p), u(p.parentNode)); + }; + r.forEach(u); + var f = function(p) { + !p || c.has(p) || Array.prototype.forEach.call(p.children, function(g) { + if (o.has(g)) + f(g); + else + try { + var y = g.getAttribute(s), v = y !== null && y !== "false", b = (tu.get(g) || 0) + 1, w = (i.get(g) || 0) + 1; + tu.set(g, b), i.set(g, w), a.push(g), b === 1 && v && gm.set(g, !0), w === 1 && g.setAttribute(e, "true"), v || g.setAttribute(s, "true"); + } catch (E) { + console.error("aria-hidden: cannot operate on ", g, E); + } + }); + }; + return f(t), o.clear(), pb++, function() { + a.forEach(function(p) { + var g = tu.get(p) - 1, y = i.get(p) - 1; + tu.set(p, g), i.set(p, y), g || (gm.has(p) || p.removeAttribute(s), gm.delete(p)), y || p.removeAttribute(e); + }), pb--, pb || (tu = /* @__PURE__ */ new WeakMap(), tu = /* @__PURE__ */ new WeakMap(), gm = /* @__PURE__ */ new WeakMap(), ym = {}); + }; +}, BE = function(n, t, e) { + e === void 0 && (e = "data-aria-hidden"); + var s = Array.from(Array.isArray(n) ? n : [n]), r = GV(n); + return r ? (s.push.apply(s, Array.from(r.querySelectorAll("[aria-live], script"))), KV(s, r, e, "aria-hidden")) : function() { + return null; + }; +}; +// @__NO_SIDE_EFFECTS__ +function ZV(n) { + const t = /* @__PURE__ */ XV(n), e = d.forwardRef((s, r) => { + const { children: i, ...a } = s, o = d.Children.toArray(i), c = o.find(JV); + if (c) { + const u = c.props.children, f = o.map((p) => p === c ? d.Children.count(u) > 1 ? d.Children.only(null) : d.isValidElement(u) ? u.props.children : null : p); + return /* @__PURE__ */ h.jsx(t, { ...a, ref: r, children: d.isValidElement(u) ? d.cloneElement(u, void 0, f) : null }); + } + return /* @__PURE__ */ h.jsx(t, { ...a, ref: r, children: i }); + }); + return e.displayName = `${n}.Slot`, e; +} +// @__NO_SIDE_EFFECTS__ +function XV(n) { + const t = d.forwardRef((e, s) => { + const { children: r, ...i } = e; + if (d.isValidElement(r)) { + const a = tB(r), o = eB(i, r.props); + return r.type !== d.Fragment && (o.ref = s ? vl(s, a) : a), d.cloneElement(r, o); + } + return d.Children.count(r) > 1 ? d.Children.only(null) : null; + }); + return t.displayName = `${n}.SlotClone`, t; +} +var QV = Symbol("radix.slottable"); +function JV(n) { + return d.isValidElement(n) && typeof n.type == "function" && "__radixId" in n.type && n.type.__radixId === QV; +} +function eB(n, t) { + const e = { ...t }; + for (const s in t) { + const r = n[s], i = t[s]; + /^on[A-Z]/.test(s) ? r && i ? e[s] = (...o) => { + const c = i(...o); + return r(...o), c; + } : r && (e[s] = r) : s === "style" ? e[s] = { ...r, ...i } : s === "className" && (e[s] = [r, i].filter(Boolean).join(" ")); + } + return { ...n, ...e }; +} +function tB(n) { + var s, r; + let t = (s = Object.getOwnPropertyDescriptor(n.props, "ref")) == null ? void 0 : s.get, e = t && "isReactWarning" in t && t.isReactWarning; + return e ? n.ref : (t = (r = Object.getOwnPropertyDescriptor(n, "ref")) == null ? void 0 : r.get, e = t && "isReactWarning" in t && t.isReactWarning, e ? n.props.ref : n.props.ref || n.ref); +} +var Zy = "Dialog", [UE, qE] = Ir(Zy), [nB, di] = UE(Zy), zE = (n) => { + const { + __scopeDialog: t, + children: e, + open: s, + defaultOpen: r, + onOpenChange: i, + modal: a = !0 + } = n, o = d.useRef(null), c = d.useRef(null), [u, f] = Hc({ + prop: s, + defaultProp: r ?? !1, + onChange: i, + caller: Zy + }); + return /* @__PURE__ */ h.jsx( + nB, + { + scope: t, + triggerRef: o, + contentRef: c, + contentId: Sc(), + titleId: Sc(), + descriptionId: Sc(), + open: u, + onOpenChange: f, + onOpenToggle: d.useCallback(() => f((p) => !p), [f]), + modal: a, + children: e + } + ); +}; +zE.displayName = Zy; +var HE = "DialogTrigger", WE = d.forwardRef( + (n, t) => { + const { __scopeDialog: e, ...s } = n, r = di(HE, e), i = un(t, r.triggerRef); + return /* @__PURE__ */ h.jsx( + Ut.button, + { + type: "button", + "aria-haspopup": "dialog", + "aria-expanded": r.open, + "aria-controls": r.contentId, + "data-state": Xx(r.open), + ...s, + ref: i, + onClick: Xe(n.onClick, r.onOpenToggle) + } + ); + } +); +WE.displayName = HE; +var Kx = "DialogPortal", [sB, GE] = UE(Kx, { + forceMount: void 0 +}), YE = (n) => { + const { __scopeDialog: t, forceMount: e, children: s, container: r } = n, i = di(Kx, t); + return /* @__PURE__ */ h.jsx(sB, { scope: t, forceMount: e, children: d.Children.map(s, (a) => /* @__PURE__ */ h.jsx(ui, { present: e || i.open, children: /* @__PURE__ */ h.jsx(Gx, { asChild: !0, container: r, children: a }) })) }); +}; +YE.displayName = Kx; +var Hg = "DialogOverlay", KE = d.forwardRef( + (n, t) => { + const e = GE(Hg, n.__scopeDialog), { forceMount: s = e.forceMount, ...r } = n, i = di(Hg, n.__scopeDialog); + return i.modal ? /* @__PURE__ */ h.jsx(ui, { present: s || i.open, children: /* @__PURE__ */ h.jsx(iB, { ...r, ref: t }) }) : null; + } +); +KE.displayName = Hg; +var rB = /* @__PURE__ */ ZV("DialogOverlay.RemoveScroll"), iB = d.forwardRef( + (n, t) => { + const { __scopeDialog: e, ...s } = n, r = di(Hg, e); + return ( + // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll` + // ie. when `Overlay` and `Content` are siblings + /* @__PURE__ */ h.jsx(Yx, { as: rB, allowPinchZoom: !0, shards: [r.contentRef], children: /* @__PURE__ */ h.jsx( + Ut.div, + { + "data-state": Xx(r.open), + ...s, + ref: t, + style: { pointerEvents: "auto", ...s.style } + } + ) }) + ); + } +), Rc = "DialogContent", ZE = d.forwardRef( + (n, t) => { + const e = GE(Rc, n.__scopeDialog), { forceMount: s = e.forceMount, ...r } = n, i = di(Rc, n.__scopeDialog); + return /* @__PURE__ */ h.jsx(ui, { present: s || i.open, children: i.modal ? /* @__PURE__ */ h.jsx(aB, { ...r, ref: t }) : /* @__PURE__ */ h.jsx(oB, { ...r, ref: t }) }); + } +); +ZE.displayName = Rc; +var aB = d.forwardRef( + (n, t) => { + const e = di(Rc, n.__scopeDialog), s = d.useRef(null), r = un(t, e.contentRef, s); + return d.useEffect(() => { + const i = s.current; + if (i) return BE(i); + }, []), /* @__PURE__ */ h.jsx( + XE, + { + ...n, + ref: r, + trapFocus: e.open, + disableOutsidePointerEvents: !0, + onCloseAutoFocus: Xe(n.onCloseAutoFocus, (i) => { + var a; + i.preventDefault(), (a = e.triggerRef.current) == null || a.focus(); + }), + onPointerDownOutside: Xe(n.onPointerDownOutside, (i) => { + const a = i.detail.originalEvent, o = a.button === 0 && a.ctrlKey === !0; + (a.button === 2 || o) && i.preventDefault(); + }), + onFocusOutside: Xe( + n.onFocusOutside, + (i) => i.preventDefault() + ) + } + ); + } +), oB = d.forwardRef( + (n, t) => { + const e = di(Rc, n.__scopeDialog), s = d.useRef(!1), r = d.useRef(!1); + return /* @__PURE__ */ h.jsx( + XE, + { + ...n, + ref: t, + trapFocus: !1, + disableOutsidePointerEvents: !1, + onCloseAutoFocus: (i) => { + var a, o; + (a = n.onCloseAutoFocus) == null || a.call(n, i), i.defaultPrevented || (s.current || (o = e.triggerRef.current) == null || o.focus(), i.preventDefault()), s.current = !1, r.current = !1; + }, + onInteractOutside: (i) => { + var c, u; + (c = n.onInteractOutside) == null || c.call(n, i), i.defaultPrevented || (s.current = !0, i.detail.originalEvent.type === "pointerdown" && (r.current = !0)); + const a = i.target; + ((u = e.triggerRef.current) == null ? void 0 : u.contains(a)) && i.preventDefault(), i.detail.originalEvent.type === "focusin" && r.current && i.preventDefault(); + } + } + ); + } +), XE = d.forwardRef( + (n, t) => { + const { __scopeDialog: e, trapFocus: s, onOpenAutoFocus: r, onCloseAutoFocus: i, ...a } = n, o = di(Rc, e), c = d.useRef(null), u = un(t, c); + return RE(), /* @__PURE__ */ h.jsxs(h.Fragment, { children: [ + /* @__PURE__ */ h.jsx( + Wx, + { + asChild: !0, + loop: !0, + trapped: s, + onMountAutoFocus: r, + onUnmountAutoFocus: i, + children: /* @__PURE__ */ h.jsx( + Hx, + { + role: "dialog", + id: o.contentId, + "aria-describedby": o.descriptionId, + "aria-labelledby": o.titleId, + "data-state": Xx(o.open), + ...a, + ref: u, + onDismiss: () => o.onOpenChange(!1) + } + ) + } + ), + /* @__PURE__ */ h.jsxs(h.Fragment, { children: [ + /* @__PURE__ */ h.jsx(cB, { titleId: o.titleId }), + /* @__PURE__ */ h.jsx(dB, { contentRef: c, descriptionId: o.descriptionId }) + ] }) + ] }); + } +), Zx = "DialogTitle", QE = d.forwardRef( + (n, t) => { + const { __scopeDialog: e, ...s } = n, r = di(Zx, e); + return /* @__PURE__ */ h.jsx(Ut.h2, { id: r.titleId, ...s, ref: t }); + } +); +QE.displayName = Zx; +var JE = "DialogDescription", ek = d.forwardRef( + (n, t) => { + const { __scopeDialog: e, ...s } = n, r = di(JE, e); + return /* @__PURE__ */ h.jsx(Ut.p, { id: r.descriptionId, ...s, ref: t }); + } +); +ek.displayName = JE; +var tk = "DialogClose", nk = d.forwardRef( + (n, t) => { + const { __scopeDialog: e, ...s } = n, r = di(tk, e); + return /* @__PURE__ */ h.jsx( + Ut.button, + { + type: "button", + ...s, + ref: t, + onClick: Xe(n.onClick, () => r.onOpenChange(!1)) + } + ); + } +); +nk.displayName = tk; +function Xx(n) { + return n ? "open" : "closed"; +} +var sk = "DialogTitleWarning", [lB, rk] = RF(sk, { + contentName: Rc, + titleName: Zx, + docsSlug: "dialog" +}), cB = ({ titleId: n }) => { + const t = rk(sk), e = `\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users. + +If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component. + +For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`; + return d.useEffect(() => { + n && (document.getElementById(n) || console.error(e)); + }, [e, n]), null; +}, uB = "DialogDescriptionWarning", dB = ({ contentRef: n, descriptionId: t }) => { + const s = `Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${rk(uB).contentName}}.`; + return d.useEffect(() => { + var i; + const r = (i = n.current) == null ? void 0 : i.getAttribute("aria-describedby"); + t && r && (document.getElementById(t) || console.warn(s)); + }, [s, n, t]), null; +}, ik = zE, hB = WE, ak = YE, Qx = KE, Jx = ZE, eC = QE, tC = ek, nC = nk; +const sC = ik, fB = ak, ok = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx( + Qx, + { + ref: e, + className: Ge( + "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", + n + ), + ...t + } +)); +ok.displayName = Qx.displayName; +const Xy = d.forwardRef(({ className: n, children: t, ...e }, s) => /* @__PURE__ */ h.jsxs(fB, { children: [ + /* @__PURE__ */ h.jsx(ok, {}), + /* @__PURE__ */ h.jsxs( + Jx, + { + ref: s, + className: Ge( + "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg", + n + ), + ...e, + children: [ + t, + /* @__PURE__ */ h.jsxs(nC, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity data-[state=open]:bg-accent data-[state=open]:text-muted-foreground hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none", children: [ + /* @__PURE__ */ h.jsx($g, { className: "h-4 w-4" }), + /* @__PURE__ */ h.jsx("span", { className: "sr-only", children: "Close" }) + ] }) + ] + } + ) +] })); +Xy.displayName = Jx.displayName; +const Qy = ({ className: n, ...t }) => /* @__PURE__ */ h.jsx("div", { className: Ge("flex flex-col space-y-1.5 text-center sm:text-left", n), ...t }); +Qy.displayName = "DialogHeader"; +const Jy = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx( + eC, + { + ref: e, + className: Ge("text-lg font-semibold leading-none tracking-tight", n), + ...t + } +)); +Jy.displayName = eC.displayName; +const lk = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx(tC, { ref: e, className: Ge("text-sm text-muted-foreground", n), ...t })); +lk.displayName = tC.displayName; +const Np = d.forwardRef( + ({ className: n, type: t, ...e }, s) => /* @__PURE__ */ h.jsx( + "input", + { + type: t, + className: Ge( + "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", + n + ), + ref: s, + ...e + } + ) +); +Np.displayName = "Input"; +var $p = (n) => n.type === "checkbox", Ol = (n) => n instanceof Date, Bs = (n) => n == null; +const ck = (n) => typeof n == "object"; +var Ln = (n) => !Bs(n) && !Array.isArray(n) && ck(n) && !Ol(n), uk = (n) => Ln(n) && n.target ? $p(n.target) ? n.target.checked : n.target.value : n, pB = (n) => n.substring(0, n.search(/\.\d+(\.|$)/)) || n, dk = (n, t) => n.has(pB(t)), mB = (n) => { + const t = n.constructor && n.constructor.prototype; + return Ln(t) && t.hasOwnProperty("isPrototypeOf"); +}, rC = typeof window < "u" && typeof window.HTMLElement < "u" && typeof document < "u"; +function In(n) { + if (n instanceof Date) + return new Date(n); + const t = typeof FileList < "u" && n instanceof FileList; + if (rC && (n instanceof Blob || t)) + return n; + const e = Array.isArray(n); + if (!e && !(Ln(n) && mB(n))) + return n; + const s = e ? [] : Object.create(Object.getPrototypeOf(n)); + for (const r in n) + Object.prototype.hasOwnProperty.call(n, r) && (s[r] = In(n[r])); + return s; +} +var ev = (n) => /^\w*$/.test(n), vn = (n) => n === void 0, iC = (n) => Array.isArray(n) ? n.filter(Boolean) : [], aC = (n) => iC(n.replace(/["|']|\]/g, "").split(/\.|\[/)), ye = (n, t, e) => { + if (!t || !Ln(n)) + return e; + const s = (ev(t) ? [t] : aC(t)).reduce((r, i) => Bs(r) ? r : r[i], n); + return vn(s) || s === n ? vn(n[t]) ? e : n[t] : s; +}, rr = (n) => typeof n == "boolean", ks = (n) => typeof n == "function", nn = (n, t, e) => { + let s = -1; + const r = ev(t) ? [t] : aC(t), i = r.length, a = i - 1; + for (; ++s < i; ) { + const o = r[s]; + let c = e; + if (s !== a) { + const u = n[o]; + c = Ln(u) || Array.isArray(u) ? u : isNaN(+r[s + 1]) ? {} : []; + } + if (o === "__proto__" || o === "constructor" || o === "prototype") + return; + n[o] = c, n = n[o]; + } +}; +const Wg = { + BLUR: "blur", + FOCUS_OUT: "focusout", + CHANGE: "change" +}, ti = { + onBlur: "onBlur", + onChange: "onChange", + onSubmit: "onSubmit", + onTouched: "onTouched", + all: "all" +}, oa = { + max: "max", + min: "min", + maxLength: "maxLength", + minLength: "minLength", + pattern: "pattern", + required: "required", + validate: "validate" +}, oC = he.createContext(null); +oC.displayName = "HookFormControlContext"; +const lC = () => he.useContext(oC); +var hk = (n, t, e, s = !0) => { + const r = { + defaultValues: t._defaultValues + }; + for (const i in n) + Object.defineProperty(r, i, { + get: () => { + const a = i; + return t._proxyFormState[a] !== ti.all && (t._proxyFormState[a] = !s || ti.all), e && (e[a] = !0), n[a]; + } + }); + return r; +}; +const cC = typeof window < "u" ? he.useLayoutEffect : he.useEffect; +function gB(n) { + const t = lC(), { control: e = t, disabled: s, name: r, exact: i } = n || {}, [a, o] = he.useState(e._formState), c = he.useRef({ + isDirty: !1, + isLoading: !1, + dirtyFields: !1, + touchedFields: !1, + validatingFields: !1, + isValidating: !1, + isValid: !1, + errors: !1 + }); + return cC(() => e._subscribe({ + name: r, + formState: c.current, + exact: i, + callback: (u) => { + !s && o({ + ...e._formState, + ...u + }); + } + }), [r, s, i]), he.useEffect(() => { + c.current.isValid && e._setValid(!0); + }, [e]), he.useMemo(() => hk(a, e, c.current, !1), [a, e]); +} +var or = (n) => typeof n == "string", ww = (n, t, e, s, r) => or(n) ? (s && t.watch.add(n), ye(e, n, r)) : Array.isArray(n) ? n.map((i) => (s && t.watch.add(i), ye(e, i))) : (s && (t.watchAll = !0), e), xw = (n) => Bs(n) || !ck(n); +function ni(n, t, e = /* @__PURE__ */ new WeakSet()) { + if (xw(n) || xw(t)) + return Object.is(n, t); + if (Ol(n) && Ol(t)) + return Object.is(n.getTime(), t.getTime()); + const s = Object.keys(n), r = Object.keys(t); + if (s.length !== r.length) + return !1; + if (e.has(n) || e.has(t)) + return !0; + e.add(n), e.add(t); + for (const i of s) { + const a = n[i]; + if (!r.includes(i)) + return !1; + if (i !== "ref") { + const o = t[i]; + if (Ol(a) && Ol(o) || Ln(a) && Ln(o) || Array.isArray(a) && Array.isArray(o) ? !ni(a, o, e) : !Object.is(a, o)) + return !1; + } + } + return !0; +} +function yB(n) { + const t = lC(), { control: e = t, name: s, defaultValue: r, disabled: i, exact: a, compute: o } = n || {}, c = he.useRef(r), u = he.useRef(o), f = he.useRef(void 0), p = he.useRef(e), g = he.useRef(s); + u.current = o; + const [y, v] = he.useState(() => { + const _ = e._getWatch(s, c.current); + return u.current ? u.current(_) : _; + }), b = he.useCallback((_) => { + const k = ww(s, e._names, _ || e._formValues, !1, c.current); + return u.current ? u.current(k) : k; + }, [e._formValues, e._names, s]), w = he.useCallback((_) => { + if (!i) { + const k = ww(s, e._names, _ || e._formValues, !1, c.current); + if (u.current) { + const A = u.current(k); + ni(A, f.current) || (v(A), f.current = A); + } else + v(k); + } + }, [e._formValues, e._names, i, s]); + cC(() => ((p.current !== e || !ni(g.current, s)) && (p.current = e, g.current = s, w()), e._subscribe({ + name: s, + formState: { + values: !0 + }, + exact: a, + callback: (_) => { + w(_.values); + } + })), [e, a, s, w]), he.useEffect(() => e._removeUnmounted()); + const E = p.current !== e, x = g.current, C = he.useMemo(() => { + if (i) + return null; + const _ = !E && !ni(x, s); + return E || _ ? b() : null; + }, [i, E, s, x, b]); + return C !== null ? C : y; +} +function vB(n) { + const t = lC(), { name: e, disabled: s, control: r = t, shouldUnregister: i, defaultValue: a, exact: o = !0 } = n, c = dk(r._names.array, e), u = he.useMemo(() => ye(r._formValues, e, ye(r._defaultValues, e, a)), [r, e, a]), f = yB({ + control: r, + name: e, + defaultValue: u, + exact: o + }), p = gB({ + control: r, + name: e, + exact: o + }), g = he.useRef(n), y = he.useRef(void 0), v = he.useRef(r.register(e, { + ...n.rules, + value: f, + ...rr(n.disabled) ? { disabled: n.disabled } : {} + })); + g.current = n; + const b = he.useMemo(() => Object.defineProperties({}, { + invalid: { + enumerable: !0, + get: () => !!ye(p.errors, e) + }, + isDirty: { + enumerable: !0, + get: () => !!ye(p.dirtyFields, e) + }, + isTouched: { + enumerable: !0, + get: () => !!ye(p.touchedFields, e) + }, + isValidating: { + enumerable: !0, + get: () => !!ye(p.validatingFields, e) + }, + error: { + enumerable: !0, + get: () => ye(p.errors, e) + } + }), [p, e]), w = he.useCallback((_) => v.current.onChange({ + target: { + value: uk(_), + name: e + }, + type: Wg.CHANGE + }), [e]), E = he.useCallback(() => v.current.onBlur({ + target: { + value: ye(r._formValues, e), + name: e + }, + type: Wg.BLUR + }), [e, r._formValues]), x = he.useCallback((_) => { + const k = ye(r._fields, e); + k && k._f && _ && (k._f.ref = { + focus: () => ks(_.focus) && _.focus(), + select: () => ks(_.select) && _.select(), + setCustomValidity: (A) => ks(_.setCustomValidity) && _.setCustomValidity(A), + reportValidity: () => ks(_.reportValidity) && _.reportValidity() + }); + }, [r._fields, e]), C = he.useMemo(() => ({ + name: e, + value: f, + ...rr(s) || p.disabled ? { disabled: p.disabled || s } : {}, + onChange: w, + onBlur: E, + ref: x + }), [e, s, p.disabled, w, E, x, f]); + return he.useEffect(() => { + const _ = r._options.shouldUnregister || i, k = y.current; + k && k !== e && !c && r.unregister(k), r.register(e, { + ...g.current.rules, + ...rr(g.current.disabled) ? { disabled: g.current.disabled } : {} + }); + const A = (T, N) => { + const $ = ye(r._fields, T); + $ && $._f && ($._f.mount = N); + }; + if (A(e, !0), _) { + const T = In(ye(r._options.defaultValues, e, g.current.defaultValue)); + nn(r._defaultValues, e, T), vn(ye(r._formValues, e)) && nn(r._formValues, e, T); + } + return !c && r.register(e), y.current = e, () => { + (c ? _ && !r._state.action : _) ? r.unregister(e) : A(e, !1); + }; + }, [e, r, c, i]), he.useEffect(() => { + r._setDisabledField({ + disabled: s, + name: e + }); + }, [s, e, r]), he.useMemo(() => ({ + field: C, + formState: p, + fieldState: b + }), [C, p, b]); +} +const bB = (n) => n.render(vB(n)), uC = he.createContext(null); +uC.displayName = "HookFormContext"; +const wB = () => he.useContext(uC), xB = (n) => { + const { children: t, watch: e, getValues: s, getFieldState: r, setError: i, clearErrors: a, setValue: o, trigger: c, formState: u, resetField: f, reset: p, handleSubmit: g, unregister: y, control: v, register: b, setFocus: w, subscribe: E } = n; + return he.createElement( + uC.Provider, + { value: he.useMemo(() => ({ + watch: e, + getValues: s, + getFieldState: r, + setError: i, + clearErrors: a, + setValue: o, + trigger: c, + formState: u, + resetField: f, + reset: p, + handleSubmit: g, + unregister: y, + control: v, + register: b, + setFocus: w, + subscribe: E + }), [ + a, + v, + u, + r, + s, + g, + b, + p, + f, + i, + w, + o, + E, + c, + y, + e + ]) }, + he.createElement(oC.Provider, { value: v }, t) + ); +}; +var fk = (n, t, e, s, r) => t ? { + ...e[n], + types: { + ...e[n] && e[n].types ? e[n].types : {}, + [s]: r || !0 + } +} : {}, Jh = (n) => Array.isArray(n) ? n : [n], p6 = () => { + let n = []; + return { + get observers() { + return n; + }, + next: (r) => { + for (const i of n) + i.next && i.next(r); + }, + subscribe: (r) => (n.push(r), { + unsubscribe: () => { + n = n.filter((i) => i !== r); + } + }), + unsubscribe: () => { + n = []; + } + }; +}; +function pk(n, t) { + const e = {}; + for (const s in n) + if (n.hasOwnProperty(s)) { + const r = n[s], i = t[s]; + if (r && Ln(r) && i) { + const a = pk(r, i); + Ln(a) && (e[s] = a); + } else n[s] && (e[s] = i); + } + return e; +} +var Es = (n) => Ln(n) && !Object.keys(n).length, dC = (n) => n.type === "file", Gg = (n) => { + if (!rC) + return !1; + const t = n ? n.ownerDocument : 0; + return n instanceof (t && t.defaultView ? t.defaultView.HTMLElement : HTMLElement); +}, mk = (n) => n.type === "select-multiple", hC = (n) => n.type === "radio", CB = (n) => hC(n) || $p(n), mb = (n) => Gg(n) && n.isConnected; +function _B(n, t) { + const e = t.slice(0, -1).length; + let s = 0; + for (; s < e; ) + n = vn(n) ? s++ : n[t[s++]]; + return n; +} +function SB(n) { + for (const t in n) + if (n.hasOwnProperty(t) && !vn(n[t])) + return !1; + return !0; +} +function On(n, t) { + const e = Array.isArray(t) ? t : ev(t) ? [t] : aC(t), s = e.length === 1 ? n : _B(n, e), r = e.length - 1, i = e[r]; + return s && delete s[i], r !== 0 && (Ln(s) && Es(s) || Array.isArray(s) && SB(s)) && On(n, e.slice(0, -1)), n; +} +var EB = (n) => { + for (const t in n) + if (ks(n[t])) + return !0; + return !1; +}; +function gk(n) { + return Array.isArray(n) || Ln(n) && !EB(n); +} +function Cw(n, t = {}) { + for (const e in n) { + const s = n[e]; + gk(s) ? (t[e] = Array.isArray(s) ? [] : {}, Cw(s, t[e])) : vn(s) || (t[e] = !0); + } + return t; +} +function lu(n, t, e) { + e || (e = Cw(t)); + for (const s in n) { + const r = n[s]; + if (gk(r)) + vn(t) || xw(e[s]) ? e[s] = Cw(r, Array.isArray(r) ? [] : {}) : lu(r, Bs(t) ? {} : t[s], e[s]); + else { + const i = t[s]; + e[s] = !ni(r, i); + } + } + return e; +} +const m6 = { + value: !1, + isValid: !1 +}, g6 = { value: !0, isValid: !0 }; +var yk = (n) => { + if (Array.isArray(n)) { + if (n.length > 1) { + const t = n.filter((e) => e && e.checked && !e.disabled).map((e) => e.value); + return { value: t, isValid: !!t.length }; + } + return n[0].checked && !n[0].disabled ? ( + // @ts-expect-error expected to work in the browser + n[0].attributes && !vn(n[0].attributes.value) ? vn(n[0].value) || n[0].value === "" ? g6 : { value: n[0].value, isValid: !0 } : g6 + ) : m6; + } + return m6; +}, vk = (n, { valueAsNumber: t, valueAsDate: e, setValueAs: s }) => vn(n) ? n : t ? n === "" ? NaN : n && +n : e && or(n) ? new Date(n) : s ? s(n) : n; +const y6 = { + isValid: !1, + value: null +}; +var bk = (n) => Array.isArray(n) ? n.reduce((t, e) => e && e.checked && !e.disabled ? { + isValid: !0, + value: e.value +} : t, y6) : y6; +function v6(n) { + const t = n.ref; + return dC(t) ? t.files : hC(t) ? bk(n.refs).value : mk(t) ? [...t.selectedOptions].map(({ value: e }) => e) : $p(t) ? yk(n.refs).value : vk(vn(t.value) ? n.ref.value : t.value, n); +} +var kB = (n, t, e, s) => { + const r = {}; + for (const i of n) { + const a = ye(t, i); + a && nn(r, i, a._f); + } + return { + criteriaMode: e, + names: [...n], + fields: r, + shouldUseNativeValidation: s + }; +}, Yg = (n) => n instanceof RegExp, Ah = (n) => vn(n) ? n : Yg(n) ? n.source : Ln(n) ? Yg(n.value) ? n.value.source : n.value : n, b6 = (n) => ({ + isOnSubmit: !n || n === ti.onSubmit, + isOnBlur: n === ti.onBlur, + isOnChange: n === ti.onChange, + isOnAll: n === ti.all, + isOnTouch: n === ti.onTouched +}); +const w6 = "AsyncFunction"; +var TB = (n) => !!n && !!n.validate && !!(ks(n.validate) && n.validate.constructor.name === w6 || Ln(n.validate) && Object.values(n.validate).find((t) => t.constructor.name === w6)), AB = (n) => n.mount && (n.required || n.min || n.max || n.maxLength || n.minLength || n.pattern || n.validate), x6 = (n, t, e) => !e && (t.watchAll || t.watch.has(n) || [...t.watch].some((s) => n.startsWith(s) && /^\.\w+/.test(n.slice(s.length)))); +const ef = (n, t, e, s) => { + for (const r of e || Object.keys(n)) { + const i = ye(n, r); + if (i) { + const { _f: a, ...o } = i; + if (a) { + if (a.refs && a.refs[0] && t(a.refs[0], r) && !s) + return !0; + if (a.ref && t(a.ref, a.name) && !s) + return !0; + if (ef(o, t)) + break; + } else if (Ln(o) && ef(o, t)) + break; + } + } +}; +function C6(n, t, e) { + const s = ye(n, e); + if (s || ev(e)) + return { + error: s, + name: e + }; + const r = e.split("."); + for (; r.length; ) { + const i = r.join("."), a = ye(t, i), o = ye(n, i); + if (a && !Array.isArray(a) && e !== i) + return { name: e }; + if (o && o.type) + return { + name: i, + error: o + }; + if (o && o.root && o.root.type) + return { + name: `${i}.root`, + error: o.root + }; + r.pop(); + } + return { + name: e + }; +} +var PB = (n, t, e, s) => { + e(n); + const { name: r, ...i } = n; + return Es(i) || Object.keys(i).length >= Object.keys(t).length || Object.keys(i).find((a) => t[a] === (!s || ti.all)); +}, NB = (n, t, e) => !n || !t || n === t || Jh(n).some((s) => s && (e ? s === t : s.startsWith(t) || t.startsWith(s))), $B = (n, t, e, s, r) => r.isOnAll ? !1 : !e && r.isOnTouch ? !(t || n) : (e ? s.isOnBlur : r.isOnBlur) ? !n : (e ? s.isOnChange : r.isOnChange) ? n : !0, RB = (n, t) => !iC(ye(n, t)).length && On(n, t), IB = (n, t, e) => { + const s = Jh(ye(n, e)); + return nn(s, "root", t[e]), nn(n, e, s), n; +}; +function _6(n, t, e = "validate") { + if (or(n) || Array.isArray(n) && n.every(or) || rr(n) && !n) + return { + type: e, + message: or(n) ? n : "", + ref: t + }; +} +var nu = (n) => Ln(n) && !Yg(n) ? n : { + value: n, + message: "" +}, S6 = async (n, t, e, s, r, i) => { + const { ref: a, refs: o, required: c, maxLength: u, minLength: f, min: p, max: g, pattern: y, validate: v, name: b, valueAsNumber: w, mount: E } = n._f, x = ye(e, b); + if (!E || t.has(b)) + return {}; + const C = o ? o[0] : a, _ = (j) => { + r && C.reportValidity && (C.setCustomValidity(rr(j) ? "" : j || ""), C.reportValidity()); + }, k = {}, A = hC(a), T = $p(a), N = A || T, $ = (w || dC(a)) && vn(a.value) && vn(x) || Gg(a) && a.value === "" || x === "" || Array.isArray(x) && !x.length, D = fk.bind(null, b, s, k), V = (j, B, W, J = oa.maxLength, G = oa.minLength) => { + const q = j ? B : W; + k[b] = { + type: j ? J : G, + message: q, + ref: a, + ...D(j ? J : G, q) + }; + }; + if (i ? !Array.isArray(x) || !x.length : c && (!N && ($ || Bs(x)) || rr(x) && !x || T && !yk(o).isValid || A && !bk(o).isValid)) { + const { value: j, message: B } = or(c) ? { value: !!c, message: c } : nu(c); + if (j && (k[b] = { + type: oa.required, + message: B, + ref: C, + ...D(oa.required, B) + }, !s)) + return _(B), k; + } + if (!$ && (!Bs(p) || !Bs(g))) { + let j, B; + const W = nu(g), J = nu(p); + if (!Bs(x) && !isNaN(x)) { + const G = a.valueAsNumber || x && +x; + Bs(W.value) || (j = G > W.value), Bs(J.value) || (B = G < J.value); + } else { + const G = a.valueAsDate || new Date(x), q = (X) => /* @__PURE__ */ new Date((/* @__PURE__ */ new Date()).toDateString() + " " + X), H = a.type == "time", L = a.type == "week"; + or(W.value) && x && (j = H ? q(x) > q(W.value) : L ? x > W.value : G > new Date(W.value)), or(J.value) && x && (B = H ? q(x) < q(J.value) : L ? x < J.value : G < new Date(J.value)); + } + if ((j || B) && (V(!!j, W.message, J.message, oa.max, oa.min), !s)) + return _(k[b].message), k; + } + if ((u || f) && !$ && (or(x) || i && Array.isArray(x))) { + const j = nu(u), B = nu(f), W = !Bs(j.value) && x.length > +j.value, J = !Bs(B.value) && x.length < +B.value; + if ((W || J) && (V(W, j.message, B.message), !s)) + return _(k[b].message), k; + } + if (y && !$ && or(x)) { + const { value: j, message: B } = nu(y); + if (Yg(j) && !x.match(j) && (k[b] = { + type: oa.pattern, + message: B, + ref: a, + ...D(oa.pattern, B) + }, !s)) + return _(B), k; + } + if (v) { + if (ks(v)) { + const j = await v(x, e), B = _6(j, C); + if (B && (k[b] = { + ...B, + ...D(oa.validate, B.message) + }, !s)) + return _(B.message), k; + } else if (Ln(v)) { + let j = {}; + for (const B in v) { + if (!Es(j) && !s) + break; + const W = _6(await v[B](x, e), C, B); + W && (j = { + ...W, + ...D(B, W.message) + }, _(W.message), s && (k[b] = j)); + } + if (!Es(j) && (k[b] = { + ref: C, + ...j + }, !s)) + return k; + } + } + return _(!0), k; +}; +const OB = { + mode: ti.onSubmit, + reValidateMode: ti.onChange, + shouldFocusError: !0 +}; +function MB(n = {}) { + let t = { + ...OB, + ...n + }, e = { + submitCount: 0, + isDirty: !1, + isReady: !1, + isLoading: ks(t.defaultValues), + isValidating: !1, + isSubmitted: !1, + isSubmitting: !1, + isSubmitSuccessful: !1, + isValid: !1, + touchedFields: {}, + dirtyFields: {}, + validatingFields: {}, + errors: t.errors || {}, + disabled: t.disabled || !1 + }, s = {}, r = Ln(t.defaultValues) || Ln(t.values) ? In(t.defaultValues || t.values) || {} : {}, i = t.shouldUnregister ? {} : In(r), a = { + action: !1, + mount: !1, + watch: !1, + keepIsValid: !1 + }, o = { + mount: /* @__PURE__ */ new Set(), + disabled: /* @__PURE__ */ new Set(), + unMount: /* @__PURE__ */ new Set(), + array: /* @__PURE__ */ new Set(), + watch: /* @__PURE__ */ new Set() + }, c, u = 0; + const f = { + isDirty: !1, + dirtyFields: !1, + validatingFields: !1, + touchedFields: !1, + isValidating: !1, + isValid: !1, + errors: !1 + }, p = { + ...f + }; + let g = { + ...p + }; + const y = { + array: p6(), + state: p6() + }, v = t.criteriaMode === ti.all, b = (R) => (F) => { + clearTimeout(u), u = setTimeout(R, F); + }, w = async (R) => { + if (!a.keepIsValid && !t.disabled && (p.isValid || g.isValid || R)) { + let F; + t.resolver ? (F = Es((await N()).errors), E()) : F = await D(s, !0), F !== e.isValid && y.state.next({ + isValid: F + }); + } + }, E = (R, F) => { + !t.disabled && (p.isValidating || p.validatingFields || g.isValidating || g.validatingFields) && ((R || Array.from(o.mount)).forEach((Y) => { + Y && (F ? nn(e.validatingFields, Y, F) : On(e.validatingFields, Y)); + }), y.state.next({ + validatingFields: e.validatingFields, + isValidating: !Es(e.validatingFields) + })); + }, x = (R, F = [], Y, le, I = !0, K = !0) => { + if (le && Y && !t.disabled) { + if (a.action = !0, K && Array.isArray(ye(s, R))) { + const se = Y(ye(s, R), le.argA, le.argB); + I && nn(s, R, se); + } + if (K && Array.isArray(ye(e.errors, R))) { + const se = Y(ye(e.errors, R), le.argA, le.argB); + I && nn(e.errors, R, se), RB(e.errors, R); + } + if ((p.touchedFields || g.touchedFields) && K && Array.isArray(ye(e.touchedFields, R))) { + const se = Y(ye(e.touchedFields, R), le.argA, le.argB); + I && nn(e.touchedFields, R, se); + } + (p.dirtyFields || g.dirtyFields) && (e.dirtyFields = lu(r, i)), y.state.next({ + name: R, + isDirty: j(R, F), + dirtyFields: e.dirtyFields, + errors: e.errors, + isValid: e.isValid + }); + } else + nn(i, R, F); + }, C = (R, F) => { + nn(e.errors, R, F), y.state.next({ + errors: e.errors + }); + }, _ = (R) => { + e.errors = R, y.state.next({ + errors: e.errors, + isValid: !1 + }); + }, k = (R, F, Y, le) => { + const I = ye(s, R); + if (I) { + const K = ye(i, R, vn(Y) ? ye(r, R) : Y); + vn(K) || le && le.defaultChecked || F ? nn(i, R, F ? K : v6(I._f)) : J(R, K), a.mount && !a.action && w(); + } + }, A = (R, F, Y, le, I) => { + let K = !1, se = !1; + const Pe = { + name: R + }; + if (!t.disabled) { + if (!Y || le) { + (p.isDirty || g.isDirty) && (se = e.isDirty, e.isDirty = Pe.isDirty = j(), K = se !== Pe.isDirty); + const xt = ni(ye(r, R), F); + se = !!ye(e.dirtyFields, R), xt ? On(e.dirtyFields, R) : nn(e.dirtyFields, R, !0), Pe.dirtyFields = e.dirtyFields, K = K || (p.dirtyFields || g.dirtyFields) && se !== !xt; + } + if (Y) { + const xt = ye(e.touchedFields, R); + xt || (nn(e.touchedFields, R, Y), Pe.touchedFields = e.touchedFields, K = K || (p.touchedFields || g.touchedFields) && xt !== Y); + } + K && I && y.state.next(Pe); + } + return K ? Pe : {}; + }, T = (R, F, Y, le) => { + const I = ye(e.errors, R), K = (p.isValid || g.isValid) && rr(F) && e.isValid !== F; + if (t.delayError && Y ? (c = b(() => C(R, Y)), c(t.delayError)) : (clearTimeout(u), c = null, Y ? nn(e.errors, R, Y) : On(e.errors, R)), (Y ? !ni(I, Y) : I) || !Es(le) || K) { + const se = { + ...le, + ...K && rr(F) ? { isValid: F } : {}, + errors: e.errors, + name: R + }; + e = { + ...e, + ...se + }, y.state.next(se); + } + }, N = async (R) => (E(R, !0), await t.resolver(i, t.context, kB(R || o.mount, s, t.criteriaMode, t.shouldUseNativeValidation))), $ = async (R) => { + const { errors: F } = await N(R); + if (E(R), R) + for (const Y of R) { + const le = ye(F, Y); + le ? nn(e.errors, Y, le) : On(e.errors, Y); + } + else + e.errors = F; + return F; + }, D = async (R, F, Y = { + valid: !0 + }) => { + for (const le in R) { + const I = R[le]; + if (I) { + const { _f: K, ...se } = I; + if (K) { + const Pe = o.array.has(K.name), xt = I._f && TB(I._f); + xt && p.validatingFields && E([K.name], !0); + const wn = await S6(I, o.disabled, i, v, t.shouldUseNativeValidation && !F, Pe); + if (xt && p.validatingFields && E([K.name]), wn[K.name] && (Y.valid = !1, F || n.shouldUseNativeValidation)) + break; + !F && (ye(wn, K.name) ? Pe ? IB(e.errors, wn, K.name) : nn(e.errors, K.name, wn[K.name]) : On(e.errors, K.name)); + } + !Es(se) && await D(se, F, Y); + } + } + return Y.valid; + }, V = () => { + for (const R of o.unMount) { + const F = ye(s, R); + F && (F._f.refs ? F._f.refs.every((Y) => !mb(Y)) : !mb(F._f.ref)) && qe(R); + } + o.unMount = /* @__PURE__ */ new Set(); + }, j = (R, F) => !t.disabled && (R && F && nn(i, R, F), !ni(te(), r)), B = (R, F, Y) => ww(R, o, { + ...a.mount ? i : vn(F) ? r : or(R) ? { [R]: F } : F + }, Y, F), W = (R) => iC(ye(a.mount ? i : r, R, t.shouldUnregister ? ye(r, R, []) : [])), J = (R, F, Y = {}) => { + const le = ye(s, R); + let I = F; + if (le) { + const K = le._f; + K && (!K.disabled && nn(i, R, vk(F, K)), I = Gg(K.ref) && Bs(F) ? "" : F, mk(K.ref) ? [...K.ref.options].forEach((se) => se.selected = I.includes(se.value)) : K.refs ? $p(K.ref) ? K.refs.forEach((se) => { + (!se.defaultChecked || !se.disabled) && (Array.isArray(I) ? se.checked = !!I.find((Pe) => Pe === se.value) : se.checked = I === se.value || !!I); + }) : K.refs.forEach((se) => se.checked = se.value === I) : dC(K.ref) ? K.ref.value = "" : (K.ref.value = I, K.ref.type || y.state.next({ + name: R, + values: In(i) + }))); + } + (Y.shouldDirty || Y.shouldTouch) && A(R, I, Y.shouldTouch, Y.shouldDirty, !0), Y.shouldValidate && X(R); + }, G = (R, F, Y) => { + for (const le in F) { + if (!F.hasOwnProperty(le)) + return; + const I = F[le], K = R + "." + le, se = ye(s, K); + (o.array.has(R) || Ln(I) || se && !se._f) && !Ol(I) ? G(K, I, Y) : J(K, I, Y); + } + }, q = (R, F, Y = {}) => { + const le = ye(s, R), I = o.array.has(R), K = In(F); + nn(i, R, K), I ? (y.array.next({ + name: R, + values: In(i) + }), (p.isDirty || p.dirtyFields || g.isDirty || g.dirtyFields) && Y.shouldDirty && y.state.next({ + name: R, + dirtyFields: lu(r, i), + isDirty: j(R, K) + })) : le && !le._f && !Bs(K) ? G(R, K, Y) : J(R, K, Y), x6(R, o) ? y.state.next({ + ...e, + name: R, + values: In(i) + }) : y.state.next({ + name: a.mount ? R : void 0, + values: In(i) + }); + }, H = async (R) => { + a.mount = !0; + const F = R.target; + let Y = F.name, le = !0; + const I = ye(s, Y), K = (xt) => { + le = Number.isNaN(xt) || Ol(xt) && isNaN(xt.getTime()) || ni(xt, ye(i, Y, xt)); + }, se = b6(t.mode), Pe = b6(t.reValidateMode); + if (I) { + let xt, wn; + const Os = F.type ? v6(I._f) : uk(R), Ms = R.type === Wg.BLUR || R.type === Wg.FOCUS_OUT, no = !AB(I._f) && !t.resolver && !ye(e.errors, Y) && !I._f.deps || $B(Ms, ye(e.touchedFields, Y), e.isSubmitted, Pe, se), fi = x6(Y, o, Ms); + nn(i, Y, Os), Ms ? (!F || !F.readOnly) && (I._f.onBlur && I._f.onBlur(R), c && c(0)) : I._f.onChange && I._f.onChange(R); + const ys = A(Y, Os, Ms), pi = !Es(ys) || fi; + if (!Ms && y.state.next({ + name: Y, + type: R.type, + values: In(i) + }), no) + return (p.isValid || g.isValid) && (t.mode === "onBlur" ? Ms && w() : Ms || w()), pi && y.state.next({ name: Y, ...fi ? {} : ys }); + if (!Ms && fi && y.state.next({ ...e }), t.resolver) { + const { errors: so } = await N([Y]); + if (E([Y]), K(Os), le) { + const sa = C6(e.errors, s, Y), Sl = C6(so, s, sa.name || Y); + xt = Sl.error, Y = Sl.name, wn = Es(so); + } + } else + E([Y], !0), xt = (await S6(I, o.disabled, i, v, t.shouldUseNativeValidation))[Y], E([Y]), K(Os), le && (xt ? wn = !1 : (p.isValid || g.isValid) && (wn = await D(s, !0))); + le && (I._f.deps && (!Array.isArray(I._f.deps) || I._f.deps.length > 0) && X(I._f.deps), T(Y, wn, xt, ys)); + } + }, L = (R, F) => { + if (ye(e.errors, F) && R.focus) + return R.focus(), 1; + }, X = async (R, F = {}) => { + let Y, le; + const I = Jh(R); + if (t.resolver) { + const K = await $(vn(R) ? R : I); + Y = Es(K), le = R ? !I.some((se) => ye(K, se)) : Y; + } else R ? (le = (await Promise.all(I.map(async (K) => { + const se = ye(s, K); + return await D(se && se._f ? { [K]: se } : se); + }))).every(Boolean), !(!le && !e.isValid) && w()) : le = Y = await D(s); + return y.state.next({ + ...!or(R) || (p.isValid || g.isValid) && Y !== e.isValid ? {} : { name: R }, + ...t.resolver || !R ? { isValid: Y } : {}, + errors: e.errors + }), F.shouldFocus && !le && ef(s, L, R ? I : o.mount), le; + }, te = (R, F) => { + let Y = { + ...a.mount ? i : r + }; + return F && (Y = pk(F.dirtyFields ? e.dirtyFields : e.touchedFields, Y)), vn(R) ? Y : or(R) ? ye(Y, R) : R.map((le) => ye(Y, le)); + }, Te = (R, F) => ({ + invalid: !!ye((F || e).errors, R), + isDirty: !!ye((F || e).dirtyFields, R), + error: ye((F || e).errors, R), + isValidating: !!ye(e.validatingFields, R), + isTouched: !!ye((F || e).touchedFields, R) + }), _e = (R) => { + R && Jh(R).forEach((F) => On(e.errors, F)), y.state.next({ + errors: R ? e.errors : {} + }); + }, Je = (R, F, Y) => { + const le = (ye(s, R, { _f: {} })._f || {}).ref, I = ye(e.errors, R) || {}, { ref: K, message: se, type: Pe, ...xt } = I; + nn(e.errors, R, { + ...xt, + ...F, + ref: le + }), y.state.next({ + name: R, + errors: e.errors, + isValid: !1 + }), Y && Y.shouldFocus && le && le.focus && le.focus(); + }, Re = (R, F) => ks(R) ? y.state.subscribe({ + next: (Y) => "values" in Y && R(B(void 0, F), Y) + }) : B(R, F, !0), nt = (R) => y.state.subscribe({ + next: (F) => { + NB(R.name, F.name, R.exact) && PB(F, R.formState || p, ne, R.reRenderRoot) && R.callback({ + values: { ...i }, + ...e, + ...F, + defaultValues: r + }); + } + }).unsubscribe, rt = (R) => (a.mount = !0, g = { + ...g, + ...R.formState + }, nt({ + ...R, + formState: { + ...f, + ...R.formState + } + })), qe = (R, F = {}) => { + for (const Y of R ? Jh(R) : o.mount) + o.mount.delete(Y), o.array.delete(Y), F.keepValue || (On(s, Y), On(i, Y)), !F.keepError && On(e.errors, Y), !F.keepDirty && On(e.dirtyFields, Y), !F.keepTouched && On(e.touchedFields, Y), !F.keepIsValidating && On(e.validatingFields, Y), !t.shouldUnregister && !F.keepDefaultValue && On(r, Y); + y.state.next({ + values: In(i) + }), y.state.next({ + ...e, + ...F.keepDirty ? { isDirty: j() } : {} + }), !F.keepIsValid && w(); + }, Ye = ({ disabled: R, name: F }) => { + if (rr(R) && a.mount || R || o.disabled.has(F)) { + const I = o.disabled.has(F) !== !!R; + R ? o.disabled.add(F) : o.disabled.delete(F), I && a.mount && !a.action && w(); + } + }, ee = (R, F = {}) => { + let Y = ye(s, R); + const le = rr(F.disabled) || rr(t.disabled); + return nn(s, R, { + ...Y || {}, + _f: { + ...Y && Y._f ? Y._f : { ref: { name: R } }, + name: R, + mount: !0, + ...F + } + }), o.mount.add(R), Y ? Ye({ + disabled: rr(F.disabled) ? F.disabled : t.disabled, + name: R + }) : k(R, !0, F.value), { + ...le ? { disabled: F.disabled || t.disabled } : {}, + ...t.progressive ? { + required: !!F.required, + min: Ah(F.min), + max: Ah(F.max), + minLength: Ah(F.minLength), + maxLength: Ah(F.maxLength), + pattern: Ah(F.pattern) + } : {}, + name: R, + onChange: H, + onBlur: H, + ref: (I) => { + if (I) { + ee(R, F), Y = ye(s, R); + const K = vn(I.value) && I.querySelectorAll && I.querySelectorAll("input,select,textarea")[0] || I, se = CB(K), Pe = Y._f.refs || []; + if (se ? Pe.find((xt) => xt === K) : K === Y._f.ref) + return; + nn(s, R, { + _f: { + ...Y._f, + ...se ? { + refs: [ + ...Pe.filter(mb), + K, + ...Array.isArray(ye(r, R)) ? [{}] : [] + ], + ref: { type: K.type, name: R } + } : { ref: K } + } + }), k(R, !1, void 0, K); + } else + Y = ye(s, R, {}), Y._f && (Y._f.mount = !1), (t.shouldUnregister || F.shouldUnregister) && !(dk(o.array, R) && a.action) && o.unMount.add(R); + } + }; + }, ge = () => t.shouldFocusError && ef(s, L, o.mount), ze = (R) => { + rr(R) && (y.state.next({ disabled: R }), ef(s, (F, Y) => { + const le = ye(s, Y); + le && (F.disabled = le._f.disabled || R, Array.isArray(le._f.refs) && le._f.refs.forEach((I) => { + I.disabled = le._f.disabled || R; + })); + }, 0, !1)); + }, st = (R, F) => async (Y) => { + let le; + Y && (Y.preventDefault && Y.preventDefault(), Y.persist && Y.persist()); + let I = In(i); + if (y.state.next({ + isSubmitting: !0 + }), t.resolver) { + const { errors: K, values: se } = await N(); + E(), e.errors = K, I = In(se); + } else + await D(s); + if (o.disabled.size) + for (const K of o.disabled) + On(I, K); + if (On(e.errors, "root"), Es(e.errors)) { + y.state.next({ + errors: {} + }); + try { + await R(I, Y); + } catch (K) { + le = K; + } + } else + F && await F({ ...e.errors }, Y), ge(), setTimeout(ge); + if (y.state.next({ + isSubmitted: !0, + isSubmitting: !1, + isSubmitSuccessful: Es(e.errors) && !le, + submitCount: e.submitCount + 1, + errors: e.errors + }), le) + throw le; + }, Pt = (R, F = {}) => { + ye(s, R) && (vn(F.defaultValue) ? q(R, In(ye(r, R))) : (q(R, F.defaultValue), nn(r, R, In(F.defaultValue))), F.keepTouched || On(e.touchedFields, R), F.keepDirty || (On(e.dirtyFields, R), e.isDirty = F.defaultValue ? j(R, In(ye(r, R))) : j()), F.keepError || (On(e.errors, R), p.isValid && w()), y.state.next({ ...e })); + }, et = (R, F = {}) => { + const Y = R ? In(R) : r, le = In(Y), I = Es(R), K = I ? r : le; + if (F.keepDefaultValues || (r = Y), !F.keepValues) { + if (F.keepDirtyValues) { + const se = /* @__PURE__ */ new Set([ + ...o.mount, + ...Object.keys(lu(r, i)) + ]); + for (const Pe of Array.from(se)) { + const xt = ye(e.dirtyFields, Pe), wn = ye(i, Pe), Os = ye(K, Pe); + xt && !vn(wn) ? nn(K, Pe, wn) : !xt && !vn(Os) && q(Pe, Os); + } + } else { + if (rC && vn(R)) + for (const se of o.mount) { + const Pe = ye(s, se); + if (Pe && Pe._f) { + const xt = Array.isArray(Pe._f.refs) ? Pe._f.refs[0] : Pe._f.ref; + if (Gg(xt)) { + const wn = xt.closest("form"); + if (wn) { + wn.reset(); + break; + } + } + } + } + if (F.keepFieldsRef) + for (const se of o.mount) + q(se, ye(K, se)); + else + s = {}; + } + i = t.shouldUnregister ? F.keepDefaultValues ? In(r) : {} : In(K), y.array.next({ + values: { ...K } + }), y.state.next({ + values: { ...K } + }); + } + o = { + mount: F.keepDirtyValues ? o.mount : /* @__PURE__ */ new Set(), + unMount: /* @__PURE__ */ new Set(), + array: /* @__PURE__ */ new Set(), + disabled: /* @__PURE__ */ new Set(), + watch: /* @__PURE__ */ new Set(), + watchAll: !1, + focus: "" + }, a.mount = !p.isValid || !!F.keepIsValid || !!F.keepDirtyValues || !t.shouldUnregister && !Es(K), a.watch = !!t.shouldUnregister, a.keepIsValid = !!F.keepIsValid, a.action = !1, F.keepErrors || (e.errors = {}), y.state.next({ + submitCount: F.keepSubmitCount ? e.submitCount : 0, + isDirty: I ? !1 : F.keepDirty ? e.isDirty : !!(F.keepDefaultValues && !ni(R, r)), + isSubmitted: F.keepIsSubmitted ? e.isSubmitted : !1, + dirtyFields: I ? {} : F.keepDirtyValues ? F.keepDefaultValues && i ? lu(r, i) : e.dirtyFields : F.keepDefaultValues && R ? lu(r, R) : F.keepDirty ? e.dirtyFields : {}, + touchedFields: F.keepTouched ? e.touchedFields : {}, + errors: F.keepErrors ? e.errors : {}, + isSubmitSuccessful: F.keepIsSubmitSuccessful ? e.isSubmitSuccessful : !1, + isSubmitting: !1, + defaultValues: r + }); + }, tn = (R, F) => et(ks(R) ? R(i) : R, { ...t.resetOptions, ...F }), hs = (R, F = {}) => { + const Y = ye(s, R), le = Y && Y._f; + if (le) { + const I = le.refs ? le.refs[0] : le.ref; + I.focus && setTimeout(() => { + I.focus(), F.shouldSelect && ks(I.select) && I.select(); + }); + } + }, ne = (R) => { + e = { + ...e, + ...R + }; + }, ht = { + control: { + register: ee, + unregister: qe, + getFieldState: Te, + handleSubmit: st, + setError: Je, + _subscribe: nt, + _runSchema: N, + _updateIsValidating: E, + _focusError: ge, + _getWatch: B, + _getDirty: j, + _setValid: w, + _setFieldArray: x, + _setDisabledField: Ye, + _setErrors: _, + _getFieldArray: W, + _reset: et, + _resetDefaultValues: () => ks(t.defaultValues) && t.defaultValues().then((R) => { + tn(R, t.resetOptions), y.state.next({ + isLoading: !1 + }); + }), + _removeUnmounted: V, + _disableForm: ze, + _subjects: y, + _proxyFormState: p, + get _fields() { + return s; + }, + get _formValues() { + return i; + }, + get _state() { + return a; + }, + set _state(R) { + a = R; + }, + get _defaultValues() { + return r; + }, + get _names() { + return o; + }, + set _names(R) { + o = R; + }, + get _formState() { + return e; + }, + get _options() { + return t; + }, + set _options(R) { + t = { + ...t, + ...R + }; + } + }, + subscribe: rt, + trigger: X, + register: ee, + handleSubmit: st, + watch: Re, + setValue: q, + getValues: te, + reset: tn, + resetField: Pt, + clearErrors: _e, + unregister: qe, + setError: Je, + setFocus: hs, + getFieldState: Te + }; + return { + ...ht, + formControl: ht + }; +} +function wk(n = {}) { + const t = he.useRef(void 0), e = he.useRef(void 0), [s, r] = he.useState({ + isDirty: !1, + isValidating: !1, + isLoading: ks(n.defaultValues), + isSubmitted: !1, + isSubmitting: !1, + isSubmitSuccessful: !1, + isValid: !1, + submitCount: 0, + dirtyFields: {}, + touchedFields: {}, + validatingFields: {}, + errors: n.errors || {}, + disabled: n.disabled || !1, + isReady: !1, + defaultValues: ks(n.defaultValues) ? void 0 : n.defaultValues + }); + if (!t.current) + if (n.formControl) + t.current = { + ...n.formControl, + formState: s + }, n.defaultValues && !ks(n.defaultValues) && n.formControl.reset(n.defaultValues, n.resetOptions); + else { + const { formControl: a, ...o } = MB(n); + t.current = { + ...o, + formState: s + }; + } + const i = t.current.control; + return i._options = n, cC(() => { + const a = i._subscribe({ + formState: i._proxyFormState, + callback: () => r({ ...i._formState }), + reRenderRoot: !0 + }); + return r((o) => ({ + ...o, + isReady: !0 + })), i._formState.isReady = !0, a; + }, [i]), he.useEffect(() => i._disableForm(n.disabled), [i, n.disabled]), he.useEffect(() => { + n.mode && (i._options.mode = n.mode), n.reValidateMode && (i._options.reValidateMode = n.reValidateMode); + }, [i, n.mode, n.reValidateMode]), he.useEffect(() => { + n.errors && (i._setErrors(n.errors), i._focusError()); + }, [i, n.errors]), he.useEffect(() => { + n.shouldUnregister && i._subjects.state.next({ + values: i._getWatch() + }); + }, [i, n.shouldUnregister]), he.useEffect(() => { + if (i._proxyFormState.isDirty) { + const a = i._getDirty(); + a !== s.isDirty && i._subjects.state.next({ + isDirty: a + }); + } + }, [i, s.isDirty]), he.useEffect(() => { + var a; + n.values && !ni(n.values, e.current) ? (i._reset(n.values, { + keepFieldsRef: !0, + ...i._options.resetOptions + }), !((a = i._options.resetOptions) === null || a === void 0) && a.keepIsValid || i._setValid(), e.current = n.values, r((o) => ({ ...o }))) : i._resetDefaultValues(); + }, [i, n.values]), he.useEffect(() => { + i._state.mount || (i._setValid(), i._state.mount = !0), i._state.watch && (i._state.watch = !1, i._subjects.state.next({ ...i._formState })), i._removeUnmounted(); + }), t.current.formState = he.useMemo(() => hk(s, i), [i, s]), t.current; +} +var DB = [ + "a", + "button", + "div", + "form", + "h2", + "h3", + "img", + "input", + "label", + "li", + "nav", + "ol", + "p", + "select", + "span", + "svg", + "ul" +], LB = DB.reduce((n, t) => { + const e = /* @__PURE__ */ $x(`Primitive.${t}`), s = d.forwardRef((r, i) => { + const { asChild: a, ...o } = r, c = a ? e : t; + return typeof window < "u" && (window[Symbol.for("radix-ui")] = !0), /* @__PURE__ */ h.jsx(c, { ...o, ref: i }); + }); + return s.displayName = `Primitive.${t}`, { ...n, [t]: s }; +}, {}), jB = "Label", xk = d.forwardRef((n, t) => /* @__PURE__ */ h.jsx( + LB.label, + { + ...n, + ref: t, + onMouseDown: (e) => { + var r; + e.target.closest("button, input, select, textarea") || ((r = n.onMouseDown) == null || r.call(n, e), !e.defaultPrevented && e.detail > 1 && e.preventDefault()); + } + } +)); +xk.displayName = jB; +var Ck = xk; +const FB = Rx("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"), ha = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx(Ck, { ref: e, className: Ge(FB(), n), ...t })); +ha.displayName = Ck.displayName; +const _k = xB, Sk = d.createContext({}), wu = ({ + ...n +}) => /* @__PURE__ */ h.jsx(Sk.Provider, { value: { name: n.name }, children: /* @__PURE__ */ h.jsx(bB, { ...n }) }), tv = () => { + const n = d.useContext(Sk), t = d.useContext(Ek), { getFieldState: e, formState: s } = wB(), r = e(n.name, s); + if (!n) + throw new Error("useFormField should be used within <FormField>"); + const { id: i } = t; + return { + id: i, + name: n.name, + formItemId: `${i}-form-item`, + formDescriptionId: `${i}-form-item-description`, + formMessageId: `${i}-form-item-message`, + ...r + }; +}, Ek = d.createContext({}), Ec = d.forwardRef( + ({ className: n, ...t }, e) => { + const s = d.useId(); + return /* @__PURE__ */ h.jsx(Ek.Provider, { value: { id: s }, children: /* @__PURE__ */ h.jsx("div", { ref: e, className: Ge("space-y-2", n), ...t }) }); + } +); +Ec.displayName = "FormItem"; +const kc = d.forwardRef(({ className: n, ...t }, e) => { + const { error: s, formItemId: r } = tv(); + return /* @__PURE__ */ h.jsx(ha, { ref: e, className: Ge(s && "text-destructive", n), htmlFor: r, ...t }); +}); +kc.displayName = "FormLabel"; +const Tc = d.forwardRef( + ({ ...n }, t) => { + const { error: e, formItemId: s, formDescriptionId: r, formMessageId: i } = tv(); + return /* @__PURE__ */ h.jsx( + JS, + { + ref: t, + id: s, + "aria-describedby": e ? `${r} ${i}` : `${r}`, + "aria-invalid": !!e, + ...n + } + ); + } +); +Tc.displayName = "FormControl"; +const VB = d.forwardRef( + ({ className: n, ...t }, e) => { + const { formDescriptionId: s } = tv(); + return /* @__PURE__ */ h.jsx("p", { ref: e, id: s, className: Ge("text-sm text-muted-foreground", n), ...t }); + } +); +VB.displayName = "FormDescription"; +const gf = d.forwardRef( + ({ className: n, children: t, ...e }, s) => { + const { error: r, formMessageId: i } = tv(), a = r ? String(r == null ? void 0 : r.message) : t; + return a ? /* @__PURE__ */ h.jsx("p", { ref: s, id: i, className: Ge("text-sm font-medium text-destructive", n), ...e, children: a }) : null; + } +); +gf.displayName = "FormMessage"; +// @__NO_SIDE_EFFECTS__ +function E6(n) { + const t = /* @__PURE__ */ BB(n), e = d.forwardRef((s, r) => { + const { children: i, ...a } = s, o = d.Children.toArray(i), c = o.find(qB); + if (c) { + const u = c.props.children, f = o.map((p) => p === c ? d.Children.count(u) > 1 ? d.Children.only(null) : d.isValidElement(u) ? u.props.children : null : p); + return /* @__PURE__ */ h.jsx(t, { ...a, ref: r, children: d.isValidElement(u) ? d.cloneElement(u, void 0, f) : null }); + } + return /* @__PURE__ */ h.jsx(t, { ...a, ref: r, children: i }); + }); + return e.displayName = `${n}.Slot`, e; +} +// @__NO_SIDE_EFFECTS__ +function BB(n) { + const t = d.forwardRef((e, s) => { + const { children: r, ...i } = e; + if (d.isValidElement(r)) { + const a = HB(r), o = zB(i, r.props); + return r.type !== d.Fragment && (o.ref = s ? vl(s, a) : a), d.cloneElement(r, o); + } + return d.Children.count(r) > 1 ? d.Children.only(null) : null; + }); + return t.displayName = `${n}.SlotClone`, t; +} +var UB = Symbol("radix.slottable"); +function qB(n) { + return d.isValidElement(n) && typeof n.type == "function" && "__radixId" in n.type && n.type.__radixId === UB; +} +function zB(n, t) { + const e = { ...t }; + for (const s in t) { + const r = n[s], i = t[s]; + /^on[A-Z]/.test(s) ? r && i ? e[s] = (...o) => { + const c = i(...o); + return r(...o), c; + } : r && (e[s] = r) : s === "style" ? e[s] = { ...r, ...i } : s === "className" && (e[s] = [r, i].filter(Boolean).join(" ")); + } + return { ...n, ...e }; +} +function HB(n) { + var s, r; + let t = (s = Object.getOwnPropertyDescriptor(n.props, "ref")) == null ? void 0 : s.get, e = t && "isReactWarning" in t && t.isReactWarning; + return e ? n.ref : (t = (r = Object.getOwnPropertyDescriptor(n, "ref")) == null ? void 0 : r.get, e = t && "isReactWarning" in t && t.isReactWarning, e ? n.props.ref : n.props.ref || n.ref); +} +function kk(n) { + const t = n + "CollectionProvider", [e, s] = Ir(t), [r, i] = e( + t, + { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() } + ), a = (b) => { + const { scope: w, children: E } = b, x = he.useRef(null), C = he.useRef(/* @__PURE__ */ new Map()).current; + return /* @__PURE__ */ h.jsx(r, { scope: w, itemMap: C, collectionRef: x, children: E }); + }; + a.displayName = t; + const o = n + "CollectionSlot", c = /* @__PURE__ */ E6(o), u = he.forwardRef( + (b, w) => { + const { scope: E, children: x } = b, C = i(o, E), _ = un(w, C.collectionRef); + return /* @__PURE__ */ h.jsx(c, { ref: _, children: x }); + } + ); + u.displayName = o; + const f = n + "CollectionItemSlot", p = "data-radix-collection-item", g = /* @__PURE__ */ E6(f), y = he.forwardRef( + (b, w) => { + const { scope: E, children: x, ...C } = b, _ = he.useRef(null), k = un(w, _), A = i(f, E); + return he.useEffect(() => (A.itemMap.set(_, { ref: _, ...C }), () => void A.itemMap.delete(_))), /* @__PURE__ */ h.jsx(g, { [p]: "", ref: k, children: x }); + } + ); + y.displayName = f; + function v(b) { + const w = i(n + "CollectionConsumer", b); + return he.useCallback(() => { + const x = w.collectionRef.current; + if (!x) return []; + const C = Array.from(x.querySelectorAll(`[${p}]`)); + return Array.from(w.itemMap.values()).sort( + (A, T) => C.indexOf(A.ref.current) - C.indexOf(T.ref.current) + ); + }, [w.collectionRef, w.itemMap]); + } + return [ + { Provider: a, Slot: u, ItemSlot: y }, + v, + s + ]; +} +var WB = d.createContext(void 0); +function nv(n) { + const t = d.useContext(WB); + return n || t || "ltr"; +} +var gb = "rovingFocusGroup.onEntryFocus", GB = { bubbles: !1, cancelable: !0 }, Rp = "RovingFocusGroup", [_w, Tk, YB] = kk(Rp), [KB, Xd] = Ir( + Rp, + [YB] +), [ZB, XB] = KB(Rp), Ak = d.forwardRef( + (n, t) => /* @__PURE__ */ h.jsx(_w.Provider, { scope: n.__scopeRovingFocusGroup, children: /* @__PURE__ */ h.jsx(_w.Slot, { scope: n.__scopeRovingFocusGroup, children: /* @__PURE__ */ h.jsx(QB, { ...n, ref: t }) }) }) +); +Ak.displayName = Rp; +var QB = d.forwardRef((n, t) => { + const { + __scopeRovingFocusGroup: e, + orientation: s, + loop: r = !1, + dir: i, + currentTabStopId: a, + defaultCurrentTabStopId: o, + onCurrentTabStopIdChange: c, + onEntryFocus: u, + preventScrollOnEntryFocus: f = !1, + ...p + } = n, g = d.useRef(null), y = un(t, g), v = nv(i), [b, w] = Hc({ + prop: a, + defaultProp: o ?? null, + onChange: c, + caller: Rp + }), [E, x] = d.useState(!1), C = Fi(u), _ = Tk(e), k = d.useRef(!1), [A, T] = d.useState(0); + return d.useEffect(() => { + const N = g.current; + if (N) + return N.addEventListener(gb, C), () => N.removeEventListener(gb, C); + }, [C]), /* @__PURE__ */ h.jsx( + ZB, + { + scope: e, + orientation: s, + dir: v, + loop: r, + currentTabStopId: b, + onItemFocus: d.useCallback( + (N) => w(N), + [w] + ), + onItemShiftTab: d.useCallback(() => x(!0), []), + onFocusableItemAdd: d.useCallback( + () => T((N) => N + 1), + [] + ), + onFocusableItemRemove: d.useCallback( + () => T((N) => N - 1), + [] + ), + children: /* @__PURE__ */ h.jsx( + Ut.div, + { + tabIndex: E || A === 0 ? -1 : 0, + "data-orientation": s, + ...p, + ref: y, + style: { outline: "none", ...n.style }, + onMouseDown: Xe(n.onMouseDown, () => { + k.current = !0; + }), + onFocus: Xe(n.onFocus, (N) => { + const $ = !k.current; + if (N.target === N.currentTarget && $ && !E) { + const D = new CustomEvent(gb, GB); + if (N.currentTarget.dispatchEvent(D), !D.defaultPrevented) { + const V = _().filter((G) => G.focusable), j = V.find((G) => G.active), B = V.find((G) => G.id === b), J = [j, B, ...V].filter( + Boolean + ).map((G) => G.ref.current); + $k(J, f); + } + } + k.current = !1; + }), + onBlur: Xe(n.onBlur, () => x(!1)) + } + ) + } + ); +}), Pk = "RovingFocusGroupItem", Nk = d.forwardRef( + (n, t) => { + const { + __scopeRovingFocusGroup: e, + focusable: s = !0, + active: r = !1, + tabStopId: i, + children: a, + ...o + } = n, c = Sc(), u = i || c, f = XB(Pk, e), p = f.currentTabStopId === u, g = Tk(e), { onFocusableItemAdd: y, onFocusableItemRemove: v, currentTabStopId: b } = f; + return d.useEffect(() => { + if (s) + return y(), () => v(); + }, [s, y, v]), /* @__PURE__ */ h.jsx( + _w.ItemSlot, + { + scope: e, + id: u, + focusable: s, + active: r, + children: /* @__PURE__ */ h.jsx( + Ut.span, + { + tabIndex: p ? 0 : -1, + "data-orientation": f.orientation, + ...o, + ref: t, + onMouseDown: Xe(n.onMouseDown, (w) => { + s ? f.onItemFocus(u) : w.preventDefault(); + }), + onFocus: Xe(n.onFocus, () => f.onItemFocus(u)), + onKeyDown: Xe(n.onKeyDown, (w) => { + if (w.key === "Tab" && w.shiftKey) { + f.onItemShiftTab(); + return; + } + if (w.target !== w.currentTarget) return; + const E = tU(w, f.orientation, f.dir); + if (E !== void 0) { + if (w.metaKey || w.ctrlKey || w.altKey || w.shiftKey) return; + w.preventDefault(); + let C = g().filter((_) => _.focusable).map((_) => _.ref.current); + if (E === "last") C.reverse(); + else if (E === "prev" || E === "next") { + E === "prev" && C.reverse(); + const _ = C.indexOf(w.currentTarget); + C = f.loop ? nU(C, _ + 1) : C.slice(_ + 1); + } + setTimeout(() => $k(C)); + } + }), + children: typeof a == "function" ? a({ isCurrentTabStop: p, hasTabStop: b != null }) : a + } + ) + } + ); + } +); +Nk.displayName = Pk; +var JB = { + ArrowLeft: "prev", + ArrowUp: "prev", + ArrowRight: "next", + ArrowDown: "next", + PageUp: "first", + Home: "first", + PageDown: "last", + End: "last" +}; +function eU(n, t) { + return t !== "rtl" ? n : n === "ArrowLeft" ? "ArrowRight" : n === "ArrowRight" ? "ArrowLeft" : n; +} +function tU(n, t, e) { + const s = eU(n.key, e); + if (!(t === "vertical" && ["ArrowLeft", "ArrowRight"].includes(s)) && !(t === "horizontal" && ["ArrowUp", "ArrowDown"].includes(s))) + return JB[s]; +} +function $k(n, t = !1) { + const e = document.activeElement; + for (const s of n) + if (s === e || (s.focus({ preventScroll: t }), document.activeElement !== e)) return; +} +function nU(n, t) { + return n.map((e, s) => n[(t + s) % n.length]); +} +var fC = Ak, pC = Nk, sv = "Tabs", [sU] = Ir(sv, [ + Xd +]), Rk = Xd(), [rU, mC] = sU(sv), Ik = d.forwardRef( + (n, t) => { + const { + __scopeTabs: e, + value: s, + onValueChange: r, + defaultValue: i, + orientation: a = "horizontal", + dir: o, + activationMode: c = "automatic", + ...u + } = n, f = nv(o), [p, g] = Hc({ + prop: s, + onChange: r, + defaultProp: i ?? "", + caller: sv + }); + return /* @__PURE__ */ h.jsx( + rU, + { + scope: e, + baseId: Sc(), + value: p, + onValueChange: g, + orientation: a, + dir: f, + activationMode: c, + children: /* @__PURE__ */ h.jsx( + Ut.div, + { + dir: f, + "data-orientation": a, + ...u, + ref: t + } + ) + } + ); + } +); +Ik.displayName = sv; +var Ok = "TabsList", Mk = d.forwardRef( + (n, t) => { + const { __scopeTabs: e, loop: s = !0, ...r } = n, i = mC(Ok, e), a = Rk(e); + return /* @__PURE__ */ h.jsx( + fC, + { + asChild: !0, + ...a, + orientation: i.orientation, + dir: i.dir, + loop: s, + children: /* @__PURE__ */ h.jsx( + Ut.div, + { + role: "tablist", + "aria-orientation": i.orientation, + ...r, + ref: t + } + ) + } + ); + } +); +Mk.displayName = Ok; +var Dk = "TabsTrigger", Lk = d.forwardRef( + (n, t) => { + const { __scopeTabs: e, value: s, disabled: r = !1, ...i } = n, a = mC(Dk, e), o = Rk(e), c = Vk(a.baseId, s), u = Bk(a.baseId, s), f = s === a.value; + return /* @__PURE__ */ h.jsx( + pC, + { + asChild: !0, + ...o, + focusable: !r, + active: f, + children: /* @__PURE__ */ h.jsx( + Ut.button, + { + type: "button", + role: "tab", + "aria-selected": f, + "aria-controls": u, + "data-state": f ? "active" : "inactive", + "data-disabled": r ? "" : void 0, + disabled: r, + id: c, + ...i, + ref: t, + onMouseDown: Xe(n.onMouseDown, (p) => { + !r && p.button === 0 && p.ctrlKey === !1 ? a.onValueChange(s) : p.preventDefault(); + }), + onKeyDown: Xe(n.onKeyDown, (p) => { + [" ", "Enter"].includes(p.key) && a.onValueChange(s); + }), + onFocus: Xe(n.onFocus, () => { + const p = a.activationMode !== "manual"; + !f && !r && p && a.onValueChange(s); + }) + } + ) + } + ); + } +); +Lk.displayName = Dk; +var jk = "TabsContent", Fk = d.forwardRef( + (n, t) => { + const { __scopeTabs: e, value: s, forceMount: r, children: i, ...a } = n, o = mC(jk, e), c = Vk(o.baseId, s), u = Bk(o.baseId, s), f = s === o.value, p = d.useRef(f); + return d.useEffect(() => { + const g = requestAnimationFrame(() => p.current = !1); + return () => cancelAnimationFrame(g); + }, []), /* @__PURE__ */ h.jsx(ui, { present: r || f, children: ({ present: g }) => /* @__PURE__ */ h.jsx( + Ut.div, + { + "data-state": f ? "active" : "inactive", + "data-orientation": o.orientation, + role: "tabpanel", + "aria-labelledby": c, + hidden: !g, + id: u, + tabIndex: 0, + ...a, + ref: t, + style: { + ...n.style, + animationDuration: p.current ? "0s" : void 0 + }, + children: g && i + } + ) }); + } +); +Fk.displayName = jk; +function Vk(n, t) { + return `${n}-trigger-${t}`; +} +function Bk(n, t) { + return `${n}-content-${t}`; +} +var iU = Ik, Uk = Mk, qk = Lk, zk = Fk; +const Hk = iU, gC = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx( + Uk, + { + ref: e, + className: Ge( + "inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground", + n + ), + ...t + } +)); +gC.displayName = Uk.displayName; +const xu = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx( + qk, + { + ref: e, + className: Ge( + "inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", + n + ), + ...t + } +)); +xu.displayName = qk.displayName; +const Cu = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx( + zk, + { + ref: e, + className: Ge( + "mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2", + n + ), + ...t + } +)); +Cu.displayName = zk.displayName; +function yC(n) { + const t = d.useRef({ value: n, previous: n }); + return d.useMemo(() => (t.current.value !== n && (t.current.previous = t.current.value, t.current.value = n), t.current.previous), [n]); +} +function rv(n) { + const [t, e] = d.useState(void 0); + return ai(() => { + if (n) { + e({ width: n.offsetWidth, height: n.offsetHeight }); + const s = new ResizeObserver((r) => { + if (!Array.isArray(r) || !r.length) + return; + const i = r[0]; + let a, o; + if ("borderBoxSize" in i) { + const c = i.borderBoxSize, u = Array.isArray(c) ? c[0] : c; + a = u.inlineSize, o = u.blockSize; + } else + a = n.offsetWidth, o = n.offsetHeight; + e({ width: a, height: o }); + }); + return s.observe(n, { box: "border-box" }), () => s.unobserve(n); + } else + e(void 0); + }, [n]), t; +} +var iv = "Switch", [aU] = Ir(iv), [oU, lU] = aU(iv), Wk = d.forwardRef( + (n, t) => { + const { + __scopeSwitch: e, + name: s, + checked: r, + defaultChecked: i, + required: a, + disabled: o, + value: c = "on", + onCheckedChange: u, + form: f, + ...p + } = n, [g, y] = d.useState(null), v = un(t, (C) => y(C)), b = d.useRef(!1), w = g ? f || !!g.closest("form") : !0, [E, x] = Hc({ + prop: r, + defaultProp: i ?? !1, + onChange: u, + caller: iv + }); + return /* @__PURE__ */ h.jsxs(oU, { scope: e, checked: E, disabled: o, children: [ + /* @__PURE__ */ h.jsx( + Ut.button, + { + type: "button", + role: "switch", + "aria-checked": E, + "aria-required": a, + "data-state": Zk(E), + "data-disabled": o ? "" : void 0, + disabled: o, + value: c, + ...p, + ref: v, + onClick: Xe(n.onClick, (C) => { + x((_) => !_), w && (b.current = C.isPropagationStopped(), b.current || C.stopPropagation()); + }) + } + ), + w && /* @__PURE__ */ h.jsx( + Kk, + { + control: g, + bubbles: !b.current, + name: s, + value: c, + checked: E, + required: a, + disabled: o, + form: f, + style: { transform: "translateX(-100%)" } + } + ) + ] }); + } +); +Wk.displayName = iv; +var Gk = "SwitchThumb", Yk = d.forwardRef( + (n, t) => { + const { __scopeSwitch: e, ...s } = n, r = lU(Gk, e); + return /* @__PURE__ */ h.jsx( + Ut.span, + { + "data-state": Zk(r.checked), + "data-disabled": r.disabled ? "" : void 0, + ...s, + ref: t + } + ); + } +); +Yk.displayName = Gk; +var cU = "SwitchBubbleInput", Kk = d.forwardRef( + ({ + __scopeSwitch: n, + control: t, + checked: e, + bubbles: s = !0, + ...r + }, i) => { + const a = d.useRef(null), o = un(a, i), c = yC(e), u = rv(t); + return d.useEffect(() => { + const f = a.current; + if (!f) return; + const p = window.HTMLInputElement.prototype, y = Object.getOwnPropertyDescriptor( + p, + "checked" + ).set; + if (c !== e && y) { + const v = new Event("click", { bubbles: s }); + y.call(f, e), f.dispatchEvent(v); + } + }, [c, e, s]), /* @__PURE__ */ h.jsx( + "input", + { + type: "checkbox", + "aria-hidden": !0, + defaultChecked: e, + ...r, + tabIndex: -1, + ref: o, + style: { + ...r.style, + ...u, + position: "absolute", + pointerEvents: "none", + opacity: 0, + margin: 0 + } + } + ); + } +); +Kk.displayName = cU; +function Zk(n) { + return n ? "checked" : "unchecked"; +} +var Xk = Wk, uU = Yk; +const vC = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx( + Xk, + { + className: Ge( + "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50", + n + ), + ...t, + ref: e, + children: /* @__PURE__ */ h.jsx( + uU, + { + className: Ge( + "pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0" + ) + } + ) + } +)); +vC.displayName = Xk.displayName; +var av = "Checkbox", [dU] = Ir(av), [hU, bC] = dU(av); +function fU(n) { + const { + __scopeCheckbox: t, + checked: e, + children: s, + defaultChecked: r, + disabled: i, + form: a, + name: o, + onCheckedChange: c, + required: u, + value: f = "on", + // @ts-expect-error + internal_do_not_use_render: p + } = n, [g, y] = Hc({ + prop: e, + defaultProp: r ?? !1, + onChange: c, + caller: av + }), [v, b] = d.useState(null), [w, E] = d.useState(null), x = d.useRef(!1), C = v ? !!a || !!v.closest("form") : ( + // We set this to true by default so that events bubble to forms without JS (SSR) + !0 + ), _ = { + checked: g, + disabled: i, + setChecked: y, + control: v, + setControl: b, + name: o, + form: a, + value: f, + hasConsumerStoppedPropagationRef: x, + required: u, + defaultChecked: nl(r) ? !1 : r, + isFormControl: C, + bubbleInput: w, + setBubbleInput: E + }; + return /* @__PURE__ */ h.jsx( + hU, + { + scope: t, + ..._, + children: pU(p) ? p(_) : s + } + ); +} +var Qk = "CheckboxTrigger", Jk = d.forwardRef( + ({ __scopeCheckbox: n, onKeyDown: t, onClick: e, ...s }, r) => { + const { + control: i, + value: a, + disabled: o, + checked: c, + required: u, + setControl: f, + setChecked: p, + hasConsumerStoppedPropagationRef: g, + isFormControl: y, + bubbleInput: v + } = bC(Qk, n), b = un(r, f), w = d.useRef(c); + return d.useEffect(() => { + const E = i == null ? void 0 : i.form; + if (E) { + const x = () => p(w.current); + return E.addEventListener("reset", x), () => E.removeEventListener("reset", x); + } + }, [i, p]), /* @__PURE__ */ h.jsx( + Ut.button, + { + type: "button", + role: "checkbox", + "aria-checked": nl(c) ? "mixed" : c, + "aria-required": u, + "data-state": rT(c), + "data-disabled": o ? "" : void 0, + disabled: o, + value: a, + ...s, + ref: b, + onKeyDown: Xe(t, (E) => { + E.key === "Enter" && E.preventDefault(); + }), + onClick: Xe(e, (E) => { + p((x) => nl(x) ? !0 : !x), v && y && (g.current = E.isPropagationStopped(), g.current || E.stopPropagation()); + }) + } + ); + } +); +Jk.displayName = Qk; +var wC = d.forwardRef( + (n, t) => { + const { + __scopeCheckbox: e, + name: s, + checked: r, + defaultChecked: i, + required: a, + disabled: o, + value: c, + onCheckedChange: u, + form: f, + ...p + } = n; + return /* @__PURE__ */ h.jsx( + fU, + { + __scopeCheckbox: e, + checked: r, + defaultChecked: i, + disabled: o, + required: a, + onCheckedChange: u, + name: s, + form: f, + value: c, + internal_do_not_use_render: ({ isFormControl: g }) => /* @__PURE__ */ h.jsxs(h.Fragment, { children: [ + /* @__PURE__ */ h.jsx( + Jk, + { + ...p, + ref: t, + __scopeCheckbox: e + } + ), + g && /* @__PURE__ */ h.jsx( + sT, + { + __scopeCheckbox: e + } + ) + ] }) + } + ); + } +); +wC.displayName = av; +var eT = "CheckboxIndicator", tT = d.forwardRef( + (n, t) => { + const { __scopeCheckbox: e, forceMount: s, ...r } = n, i = bC(eT, e); + return /* @__PURE__ */ h.jsx( + ui, + { + present: s || nl(i.checked) || i.checked === !0, + children: /* @__PURE__ */ h.jsx( + Ut.span, + { + "data-state": rT(i.checked), + "data-disabled": i.disabled ? "" : void 0, + ...r, + ref: t, + style: { pointerEvents: "none", ...n.style } + } + ) + } + ); + } +); +tT.displayName = eT; +var nT = "CheckboxBubbleInput", sT = d.forwardRef( + ({ __scopeCheckbox: n, ...t }, e) => { + const { + control: s, + hasConsumerStoppedPropagationRef: r, + checked: i, + defaultChecked: a, + required: o, + disabled: c, + name: u, + value: f, + form: p, + bubbleInput: g, + setBubbleInput: y + } = bC(nT, n), v = un(e, y), b = yC(i), w = rv(s); + d.useEffect(() => { + const x = g; + if (!x) return; + const C = window.HTMLInputElement.prototype, k = Object.getOwnPropertyDescriptor( + C, + "checked" + ).set, A = !r.current; + if (b !== i && k) { + const T = new Event("click", { bubbles: A }); + x.indeterminate = nl(i), k.call(x, nl(i) ? !1 : i), x.dispatchEvent(T); + } + }, [g, b, i, r]); + const E = d.useRef(nl(i) ? !1 : i); + return /* @__PURE__ */ h.jsx( + Ut.input, + { + type: "checkbox", + "aria-hidden": !0, + defaultChecked: a ?? E.current, + required: o, + disabled: c, + name: u, + value: f, + form: p, + ...t, + tabIndex: -1, + ref: v, + style: { + ...t.style, + ...w, + position: "absolute", + pointerEvents: "none", + opacity: 0, + margin: 0, + // We transform because the input is absolutely positioned but we have + // rendered it **after** the button. This pulls it back to sit on top + // of the button. + transform: "translateX(-100%)" + } + } + ); + } +); +sT.displayName = nT; +function pU(n) { + return typeof n == "function"; +} +function nl(n) { + return n === "indeterminate"; +} +function rT(n) { + return nl(n) ? "indeterminate" : n ? "checked" : "unchecked"; +} +const ov = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx( + wC, + { + ref: e, + className: Ge( + "peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", + n + ), + ...t, + children: /* @__PURE__ */ h.jsx(tT, { className: Ge("flex items-center justify-center text-current"), children: /* @__PURE__ */ h.jsx(Nx, { className: "h-4 w-4" }) }) + } +)); +ov.displayName = wC.displayName; +const lv = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx("div", { ref: e, className: Ge("rounded-lg bg-card text-card-foreground shadow-sm", n), ...t })); +lv.displayName = "Card"; +const mU = d.forwardRef( + ({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx("div", { ref: e, className: Ge("flex flex-col space-y-1.5 p-6", n), ...t }) +); +mU.displayName = "CardHeader"; +const gU = d.forwardRef( + ({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx("h3", { ref: e, className: Ge("text-2xl font-semibold leading-none tracking-tight", n), ...t }) +); +gU.displayName = "CardTitle"; +const yU = d.forwardRef( + ({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx("p", { ref: e, className: Ge("text-sm text-muted-foreground", n), ...t }) +); +yU.displayName = "CardDescription"; +const cv = d.forwardRef( + ({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx("div", { ref: e, className: Ge("p-6 pt-0", n), ...t }) +); +cv.displayName = "CardContent"; +const vU = d.forwardRef( + ({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx("div", { ref: e, className: Ge("flex items-center p-6 pt-0", n), ...t }) +); +vU.displayName = "CardFooter"; +const k6 = (n, t, e) => { + if (n && "reportValidity" in n) { + const s = ye(e, t); + n.setCustomValidity(s && s.message || ""), n.reportValidity(); + } +}, iT = (n, t) => { + for (const e in t.fields) { + const s = t.fields[e]; + s && s.ref && "reportValidity" in s.ref ? k6(s.ref, e, n) : s.refs && s.refs.forEach((r) => k6(r, e, n)); + } +}, bU = (n, t) => { + t.shouldUseNativeValidation && iT(n, t); + const e = {}; + for (const s in n) { + const r = ye(t.fields, s), i = Object.assign(n[s] || {}, { ref: r && r.ref }); + if (wU(t.names || Object.keys(n), s)) { + const a = Object.assign({}, ye(e, s)); + nn(a, "root", i), nn(e, s, a); + } else nn(e, s, i); + } + return e; +}, wU = (n, t) => n.some((e) => e.startsWith(t + ".")); +var xU = function(n, t) { + for (var e = {}; n.length; ) { + var s = n[0], r = s.code, i = s.message, a = s.path.join("."); + if (!e[a]) if ("unionErrors" in s) { + var o = s.unionErrors[0].errors[0]; + e[a] = { message: o.message, type: o.code }; + } else e[a] = { message: i, type: r }; + if ("unionErrors" in s && s.unionErrors.forEach(function(f) { + return f.errors.forEach(function(p) { + return n.push(p); + }); + }), t) { + var c = e[a].types, u = c && c[s.code]; + e[a] = fk(a, t, e, r, u ? [].concat(u, s.message) : s.message); + } + n.shift(); + } + return e; +}, aT = function(n, t, e) { + return e === void 0 && (e = {}), function(s, r, i) { + try { + return Promise.resolve(function(a, o) { + try { + var c = Promise.resolve(n[e.mode === "sync" ? "parse" : "parseAsync"](s, t)).then(function(u) { + return i.shouldUseNativeValidation && iT({}, i), { errors: {}, values: e.raw ? s : u }; + }); + } catch (u) { + return o(u); + } + return c && c.then ? c.then(void 0, o) : c; + }(0, function(a) { + if (function(o) { + return Array.isArray(o == null ? void 0 : o.errors); + }(a)) return { values: {}, errors: bU(xU(a.errors, !i.shouldUseNativeValidation && i.criteriaMode === "all"), i) }; + throw a; + })); + } catch (a) { + return Promise.reject(a); + } + }; +}; +const CU = Rx( + "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80", + secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + outline: "text-foreground" + } + }, + defaultVariants: { + variant: "default" + } + } +); +function tf({ className: n, variant: t, ...e }) { + return /* @__PURE__ */ h.jsx("div", { className: Ge(CU({ variant: t }), n), ...e }); +} +const _U = (n, t, e) => { + const s = n[t]; + return s ? typeof s == "function" ? s() : Promise.resolve(s) : new Promise((r, i) => { + (typeof queueMicrotask == "function" ? queueMicrotask : setTimeout)( + i.bind( + null, + new Error( + "Unknown variable dynamic import: " + t + (t.split("/").length !== e ? ". Note that variables only represent file names one level deep." : "") + ) + ) + ); + }); +}, cu = "en", Tn = {}, vm = {}, Ic = {}; +let qm = []; +const SU = (n) => (qm.push(n), () => { + qm = qm.filter((t) => t !== n); +}), T6 = () => { + qm.forEach((n) => n()); +}, EU = (n) => Ic[n] ? Promise.resolve(Tn[n] || {}) : vm[n] || (() => { + const t = _U(/* @__PURE__ */ Object.assign({}), `./i18n/${n}.json`, 3).then((e) => { + const s = e.default, r = Tn[n] || {}; + return Tn[n] = { ...r, ...s }, Ic[n] = !0, delete vm[n], T6(), Tn[n]; + }).catch((e) => (console.warn(`Could not load translations for language: ${n}`, e), delete vm[n], T6(), Tn[n] || {})); + return vm[n] = t, t; +})(), kU = (n) => { + var s; + if (typeof document > "u") return null; + const e = `; ${document.cookie}`.split(`; ${n}=`); + return e.length === 2 && ((s = e.pop()) == null ? void 0 : s.split(";").shift()) || null; +}, TU = (n, t, e = 365) => { + if (typeof document > "u") return; + const s = /* @__PURE__ */ new Date(); + s.setTime(s.getTime() + e * 24 * 60 * 60 * 1e3), document.cookie = `${n}=${t};expires=${s.toUTCString()};path=/;SameSite=Lax`; +}, xC = () => { + if (typeof window < "u") { + const n = kU("lang"); + if (n && n.length === 2) + return n; + const e = new URLSearchParams(window.location.search).get("lang"); + if (e && e.length === 2) + return TU("lang", e), e; + const s = navigator.languages || [navigator.language]; + for (const r of s) { + const i = r.split("-")[0]; + if (i && i.length === 2) + return i; + } + } + return cu; +}, AU = xC, de = (n, t) => { + const e = t || xC(); + return Ic[e] && Tn[e] && Tn[e][n] !== void 0 ? Tn[e][n] : e !== cu && Ic[cu] && Tn[cu] && Tn[cu][n] !== void 0 ? Tn[cu][n] : (Tn[e] || (Tn[e] = {}), Tn[e][n] === void 0 && (Tn[e][n] = n), n); +}, Ve = ({ children: n }) => { + const [, t] = fe(0); + Rt(() => SU(() => { + t((i) => i + 1); + }), []); + const e = xC(); + Rt(() => { + EU(e); + }, [e]); + const s = Ng(() => typeof n == "string" ? n : he.isValidElement(n) && typeof n.props.children == "string" ? n.props.children : null, [n]); + if (!s) + return /* @__PURE__ */ h.jsx(h.Fragment, { children: n }); + const r = de(s, e); + return he.isValidElement(n) && typeof n.props.children == "string" ? he.cloneElement(n, {}, r) : /* @__PURE__ */ h.jsx(h.Fragment, { children: r }); +}, PU = (n) => n ? Tn[n] || {} : Tn, NU = (n = "en") => { + const t = Tn[n] || {}, e = Ic[n], s = Object.keys(t).sort().reduce((c, u) => (c[u] = t[u], c), {}), r = JSON.stringify(s, null, 2), i = new Blob([r], { type: "application/json" }), a = URL.createObjectURL(i), o = document.createElement("a"); + o.href = a, o.download = `${n}.json`, document.body.appendChild(o), o.click(), document.body.removeChild(o), URL.revokeObjectURL(a), console.log(`Downloaded ${Object.keys(s).length} translation keys for language: ${n} (${e ? "loaded from file" : "auto-collected"})`); +}, $U = (n) => { + if (n) + return { + loaded: Ic[n] || !1, + keysCount: Object.keys(Tn[n] || {}).length + }; + const t = {}; + for (const e of Object.keys(Tn)) + t[e] = { + loaded: Ic[e] || !1, + keysCount: Object.keys(Tn[e] || {}).length + }; + return t; +}; +typeof window < "u" && (window.getTranslationCache = PU, window.translate = de, window.getCurrentLang = AU, window.downloadTranslations = NU, window.getTranslationStatus = $U); +const RU = ({ + isOpen: n, + onClose: t, + onSelect: e, + onMultiSelect: s, + onMultiSelectPictures: r, + currentValue: i, + currentValues: a = [], + multiple: o = !1 +}) => { + const { user: c } = Qa(), [u, f] = fe([]), [p, g] = fe([]), [y, v] = fe([]), [b, w] = fe(!1), [E, x] = fe(""), [C, _] = fe([]), [k, A] = fe([]), [T, N] = fe([]), [$, D] = fe(i || null); + Rt(() => { + n && (V(), j(), B()); + }, [n]), Rt(() => { + n && (o ? JSON.stringify(T) !== JSON.stringify(a) && N(a || []) : $ !== i && D(i || null)); + }, [n, i, a, o]); + const V = async () => { + w(!0); + try { + const { data: L, error: X } = await ct.from("pictures").select("id, title, image_url, thumbnail_url, type, user_id, tags, meta").eq("is_selected", !0).order("created_at", { ascending: !1 }).limit(100); + if (X) throw X; + f(L || []); + } catch (L) { + console.error("Error fetching pictures:", L); + } finally { + w(!1); + } + }, j = async () => { + try { + const { data: L, error: X } = await ct.from("pictures").select("tags").eq("is_selected", !0); + if (X) throw X; + const te = /* @__PURE__ */ new Set(); + L == null || L.forEach((Te) => { + var _e; + (_e = Te.tags) == null || _e.forEach((Je) => te.add(Je)); + }), g(Array.from(te).sort()); + } catch (L) { + console.error("Error fetching tags:", L); + } + }, B = async () => { + if (c) + try { + const { data: L, error: X } = await ct.from("collections").select("id, name, slug").eq("user_id", c.id).order("name"); + if (X) throw X; + v(L || []); + } catch (L) { + console.error("Error fetching collections:", L); + } + }, W = Ng(() => u.filter((L) => { + const X = L.title.toLowerCase().includes(E.toLowerCase()) || L.id.toLowerCase().includes(E.toLowerCase()), te = C.length === 0 || L.tags && C.some((Te) => { + var _e; + return (_e = L.tags) == null ? void 0 : _e.includes(Te); + }); + return X && te; + }), [u, E, C]), [J, G] = fe([]); + Rt(() => { + (async () => { + if (k.length === 0) { + G(W); + return; + } + try { + const { data: X, error: te } = await ct.from("collection_pictures").select("picture_id").in("collection_id", k); + if (te) throw te; + const Te = new Set((X == null ? void 0 : X.map((_e) => _e.picture_id)) || []); + G(W.filter((_e) => Te.has(_e.id))); + } catch (X) { + console.error("Error filtering by collections:", X), G(W); + } + })(); + }, [W, k]); + const q = () => { + if (o) { + if (s && s(T), r) { + const L = u.filter((X) => T.includes(X.id)); + r(L); + } + } else + $ && e && e($); + }, H = (L) => { + o ? N( + (X) => X.includes(L) ? X.filter((te) => te !== L) : [...X, L] + ) : D(L); + }; + return /* @__PURE__ */ h.jsx(sC, { open: n, onOpenChange: t, children: /* @__PURE__ */ h.jsxs(Xy, { className: "max-w-4xl max-h-[80vh] overflow-hidden flex flex-col", children: [ + /* @__PURE__ */ h.jsxs(Qy, { children: [ + /* @__PURE__ */ h.jsx(Jy, { children: /* @__PURE__ */ h.jsx(Ve, { children: "Select Picture" }) }), + /* @__PURE__ */ h.jsx(lk, { children: /* @__PURE__ */ h.jsx(Ve, { children: "Choose a picture from your published images" }) }) + ] }), + /* @__PURE__ */ h.jsxs("div", { className: "relative", children: [ + /* @__PURE__ */ h.jsx(B8, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground" }), + /* @__PURE__ */ h.jsx( + Np, + { + placeholder: de("Search by title or ID..."), + value: E, + onChange: (L) => x(L.target.value), + className: "pl-10" + } + ) + ] }), + /* @__PURE__ */ h.jsxs("div", { className: "space-y-3", children: [ + p.length > 0 && /* @__PURE__ */ h.jsxs("div", { className: "space-y-2", children: [ + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center gap-2 text-sm font-medium text-muted-foreground", children: [ + /* @__PURE__ */ h.jsx(U8, { className: "h-4 w-4" }), + /* @__PURE__ */ h.jsx("span", { children: /* @__PURE__ */ h.jsx(Ve, { children: "Tags" }) }), + C.length > 0 && /* @__PURE__ */ h.jsx( + Me, + { + variant: "ghost", + size: "sm", + className: "h-6 px-2 text-xs", + onClick: () => _([]), + children: /* @__PURE__ */ h.jsx(Ve, { children: "Clear" }) + } + ) + ] }), + /* @__PURE__ */ h.jsx("div", { className: "flex flex-wrap gap-2", children: p.slice(0, 12).map((L) => /* @__PURE__ */ h.jsxs( + tf, + { + variant: C.includes(L) ? "default" : "outline", + className: "cursor-pointer hover:shadow-md transition-shadow", + onClick: () => { + _( + (X) => X.includes(L) ? X.filter((te) => te !== L) : [...X, L] + ); + }, + children: [ + L, + C.includes(L) && /* @__PURE__ */ h.jsx($g, { className: "ml-1 h-3 w-3" }) + ] + }, + L + )) }) + ] }), + y.length > 0 && /* @__PURE__ */ h.jsxs("div", { className: "space-y-2", children: [ + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center gap-2 text-sm font-medium text-muted-foreground", children: [ + /* @__PURE__ */ h.jsx(q8, { className: "h-4 w-4" }), + /* @__PURE__ */ h.jsx("span", { children: /* @__PURE__ */ h.jsx(Ve, { children: "Collections" }) }), + k.length > 0 && /* @__PURE__ */ h.jsx( + Me, + { + variant: "ghost", + size: "sm", + className: "h-6 px-2 text-xs", + onClick: () => A([]), + children: /* @__PURE__ */ h.jsx(Ve, { children: "Clear" }) + } + ) + ] }), + /* @__PURE__ */ h.jsx("div", { className: "flex flex-wrap gap-2", children: y.map((L) => /* @__PURE__ */ h.jsxs( + tf, + { + variant: k.includes(L.id) ? "default" : "outline", + className: "cursor-pointer hover:shadow-md transition-shadow", + onClick: () => { + A( + (X) => X.includes(L.id) ? X.filter((te) => te !== L.id) : [...X, L.id] + ); + }, + children: [ + L.name, + k.includes(L.id) && /* @__PURE__ */ h.jsx($g, { className: "ml-1 h-3 w-3" }) + ] + }, + L.id + )) }) + ] }) + ] }), + /* @__PURE__ */ h.jsx("div", { className: "flex-1 overflow-y-auto min-h-0 -mx-6 px-6", children: b ? /* @__PURE__ */ h.jsx("div", { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ h.jsx("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-primary" }) }) : J.length === 0 ? /* @__PURE__ */ h.jsxs("div", { className: "text-center py-12", children: [ + /* @__PURE__ */ h.jsx(zS, { className: "h-12 w-12 mx-auto mb-4 text-muted-foreground opacity-50" }), + /* @__PURE__ */ h.jsx("p", { className: "text-muted-foreground", children: /* @__PURE__ */ h.jsx(Ve, { children: E || C.length > 0 || k.length > 0 ? "No pictures found" : "No pictures available" }) }) + ] }) : /* @__PURE__ */ h.jsx("div", { className: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4 p-1", children: J.map((L) => { + const X = o ? T.includes(L.id) : $ === L.id; + return /* @__PURE__ */ h.jsxs( + "div", + { + onClick: () => H(L.id), + onDoubleClick: () => { + o ? H(L.id) : (D(L.id), e && e(L.id)); + }, + className: `relative cursor-pointer rounded-lg overflow-hidden border-2 transition-all group ${X ? "border-primary shadow-lg scale-[1.02]" : "border-transparent hover:border-primary/50"}`, + children: [ + /* @__PURE__ */ h.jsx("div", { className: "aspect-square relative pointer-events-none", children: /* @__PURE__ */ h.jsx( + Tx, + { + id: L.id, + pictureId: L.id, + url: L.image_url, + thumbnailUrl: L.thumbnail_url, + title: L.title, + author: "Me", + authorId: L.user_id, + likes: 0, + comments: 0, + type: L.type, + meta: L.meta, + showContent: !1, + onClick: () => { + }, + onLike: void 0, + onDelete: void 0, + onEdit: void 0 + } + ) }), + /* @__PURE__ */ h.jsx("div", { className: "absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/80 to-transparent p-2 pointer-events-none", children: /* @__PURE__ */ h.jsx("p", { className: "text-white text-xs font-medium truncate", children: L.title }) }) + ] + }, + L.id + ); + }) }) }), + /* @__PURE__ */ h.jsxs("div", { className: "flex justify-between items-center pt-4 border-t mt-auto", children: [ + /* @__PURE__ */ h.jsx("div", { className: "text-sm text-muted-foreground", children: o && /* @__PURE__ */ h.jsxs("span", { children: [ + T.length, + " selected" + ] }) }), + /* @__PURE__ */ h.jsxs("div", { className: "flex gap-2", children: [ + /* @__PURE__ */ h.jsx(Me, { variant: "outline", onClick: t, children: /* @__PURE__ */ h.jsx(Ve, { children: "Cancel" }) }), + /* @__PURE__ */ h.jsx(Me, { onClick: q, disabled: o ? T.length === 0 : !$, children: /* @__PURE__ */ h.jsxs(Ve, { children: [ + "Select Picture", + o ? "s" : "" + ] }) }) + ] }) + ] }) + ] }) }); +}, IU = he.lazy(() => import("./MilkdownEditorInternal-CrHTBrS2.js")), oT = ({ + value: n, + onChange: t, + placeholder: e = "Enter description...", + className: s = "", + onKeyDown: r +}) => { + const [i, a] = fe("editor"), [o, c] = fe(!1), u = An(null); + Xh((g) => (console.log("[handleImageUpload] Called from image-block, opening ImagePickerDialog"), new Promise((y) => { + u.current = y, console.log("[handleImageUpload] Resolve function stored in ref"), c(!0); + })), []); + const f = Xh(async (g) => { + console.log("[handleImageSelect] Selected picture ID:", g); + try { + const { data: y, error: v } = await ct.from("pictures").select("image_url").eq("id", g).single(); + if (v) throw v; + const b = y.image_url, w = u.current; + w && (u.current = null, w(b)), c(!1); + } catch (y) { + console.error("[handleImageSelect] Error fetching image:", y), u.current && (u.current(""), u.current = null), c(!1); + } + }, []), p = Xh((g) => { + t(g.target.value); + }, [t]); + return /* @__PURE__ */ h.jsxs(h.Fragment, { children: [ + /* @__PURE__ */ h.jsxs("div", { className: `border rounded-md bg-background ${s}`, children: [ + /* @__PURE__ */ h.jsxs("div", { className: "flex border-b", children: [ + /* @__PURE__ */ h.jsx( + "button", + { + type: "button", + onClick: () => a("editor"), + className: `px-4 py-2 text-sm font-medium border-b-2 transition-colors ${i === "editor" ? "border-primary text-primary" : "border-transparent text-muted-foreground hover:text-foreground hover:border-border"}`, + children: "Editor" + } + ), + /* @__PURE__ */ h.jsx( + "button", + { + type: "button", + onClick: () => a("raw"), + className: `px-4 py-2 text-sm font-medium border-b-2 transition-colors ${i === "raw" ? "border-primary text-primary" : "border-transparent text-muted-foreground hover:text-foreground hover:border-border"}`, + children: "Markdown" + } + ) + ] }), + i === "editor" && /* @__PURE__ */ h.jsx(he.Suspense, { fallback: /* @__PURE__ */ h.jsx("div", { className: "p-3 text-muted-foreground", children: "Loading editor..." }), children: /* @__PURE__ */ h.jsx( + IU, + { + value: n, + onChange: t, + className: s + } + ) }), + i === "raw" && /* @__PURE__ */ h.jsx( + "textarea", + { + value: n || "", + onChange: p, + onKeyDown: r, + placeholder: e, + className: "w-full p-3 bg-transparent border-0 rounded-b-md focus:ring-0 focus:outline-none resize-none font-mono text-sm", + style: { height: "120px", minHeight: "120px" }, + "aria-label": "Raw markdown input", + autoFocus: !0 + } + ) + ] }), + /* @__PURE__ */ h.jsx( + RU, + { + isOpen: o, + onClose: () => { + c(!1), u.current && (u.current(""), u.current = null); + }, + onSelect: f, + currentValue: null + } + ) + ] }); +}; +oT.displayName = "MarkdownEditor"; +const lT = he.memo(oT, (n, t) => n.value === t.value && n.placeholder === t.placeholder && n.className === t.className && n.onKeyDown === t.onKeyDown); +var OU = Symbol("radix.slottable"); +// @__NO_SIDE_EFFECTS__ +function MU(n) { + const t = ({ children: e }) => /* @__PURE__ */ h.jsx(h.Fragment, { children: e }); + return t.displayName = `${n}.Slottable`, t.__radixId = OU, t; +} +var cT = "AlertDialog", [DU] = Ir(cT, [ + qE +]), Ja = qE(), uT = (n) => { + const { __scopeAlertDialog: t, ...e } = n, s = Ja(t); + return /* @__PURE__ */ h.jsx(ik, { ...s, ...e, modal: !0 }); +}; +uT.displayName = cT; +var LU = "AlertDialogTrigger", jU = d.forwardRef( + (n, t) => { + const { __scopeAlertDialog: e, ...s } = n, r = Ja(e); + return /* @__PURE__ */ h.jsx(hB, { ...r, ...s, ref: t }); + } +); +jU.displayName = LU; +var FU = "AlertDialogPortal", dT = (n) => { + const { __scopeAlertDialog: t, ...e } = n, s = Ja(t); + return /* @__PURE__ */ h.jsx(ak, { ...s, ...e }); +}; +dT.displayName = FU; +var VU = "AlertDialogOverlay", hT = d.forwardRef( + (n, t) => { + const { __scopeAlertDialog: e, ...s } = n, r = Ja(e); + return /* @__PURE__ */ h.jsx(Qx, { ...r, ...s, ref: t }); + } +); +hT.displayName = VU; +var _u = "AlertDialogContent", [BU, UU] = DU(_u), qU = /* @__PURE__ */ MU("AlertDialogContent"), fT = d.forwardRef( + (n, t) => { + const { __scopeAlertDialog: e, children: s, ...r } = n, i = Ja(e), a = d.useRef(null), o = un(t, a), c = d.useRef(null); + return /* @__PURE__ */ h.jsx( + lB, + { + contentName: _u, + titleName: pT, + docsSlug: "alert-dialog", + children: /* @__PURE__ */ h.jsx(BU, { scope: e, cancelRef: c, children: /* @__PURE__ */ h.jsxs( + Jx, + { + role: "alertdialog", + ...i, + ...r, + ref: o, + onOpenAutoFocus: Xe(r.onOpenAutoFocus, (u) => { + var f; + u.preventDefault(), (f = c.current) == null || f.focus({ preventScroll: !0 }); + }), + onPointerDownOutside: (u) => u.preventDefault(), + onInteractOutside: (u) => u.preventDefault(), + children: [ + /* @__PURE__ */ h.jsx(qU, { children: s }), + /* @__PURE__ */ h.jsx(HU, { contentRef: a }) + ] + } + ) }) + } + ); + } +); +fT.displayName = _u; +var pT = "AlertDialogTitle", mT = d.forwardRef( + (n, t) => { + const { __scopeAlertDialog: e, ...s } = n, r = Ja(e); + return /* @__PURE__ */ h.jsx(eC, { ...r, ...s, ref: t }); + } +); +mT.displayName = pT; +var gT = "AlertDialogDescription", yT = d.forwardRef((n, t) => { + const { __scopeAlertDialog: e, ...s } = n, r = Ja(e); + return /* @__PURE__ */ h.jsx(tC, { ...r, ...s, ref: t }); +}); +yT.displayName = gT; +var zU = "AlertDialogAction", vT = d.forwardRef( + (n, t) => { + const { __scopeAlertDialog: e, ...s } = n, r = Ja(e); + return /* @__PURE__ */ h.jsx(nC, { ...r, ...s, ref: t }); + } +); +vT.displayName = zU; +var bT = "AlertDialogCancel", wT = d.forwardRef( + (n, t) => { + const { __scopeAlertDialog: e, ...s } = n, { cancelRef: r } = UU(bT, e), i = Ja(e), a = un(t, r); + return /* @__PURE__ */ h.jsx(nC, { ...i, ...s, ref: a }); + } +); +wT.displayName = bT; +var HU = ({ contentRef: n }) => { + const t = `\`${_u}\` requires a description for the component to be accessible for screen reader users. + +You can add a description to the \`${_u}\` by passing a \`${gT}\` component as a child, which also benefits sighted users by adding visible context to the dialog. + +Alternatively, you can use your own component as a description by assigning it an \`id\` and passing the same value to the \`aria-describedby\` prop in \`${_u}\`. If the description is confusing or duplicative for sighted users, you can use the \`@radix-ui/react-visually-hidden\` primitive as a wrapper around your description component. + +For more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`; + return d.useEffect(() => { + var s; + document.getElementById( + (s = n.current) == null ? void 0 : s.getAttribute("aria-describedby") + ) || console.warn(t); + }, [t, n]), null; +}, WU = uT, GU = dT, xT = hT, CT = fT, _T = vT, ST = wT, ET = mT, kT = yT; +const YU = WU, KU = GU, TT = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx( + xT, + { + className: Ge( + "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", + n + ), + ...t, + ref: e + } +)); +TT.displayName = xT.displayName; +const AT = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsxs(KU, { children: [ + /* @__PURE__ */ h.jsx(TT, {}), + /* @__PURE__ */ h.jsx( + CT, + { + ref: e, + className: Ge( + "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg", + n + ), + ...t + } + ) +] })); +AT.displayName = CT.displayName; +const PT = ({ className: n, ...t }) => /* @__PURE__ */ h.jsx("div", { className: Ge("flex flex-col space-y-2 text-center sm:text-left", n), ...t }); +PT.displayName = "AlertDialogHeader"; +const NT = ({ className: n, ...t }) => /* @__PURE__ */ h.jsx("div", { className: Ge("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", n), ...t }); +NT.displayName = "AlertDialogFooter"; +const $T = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx(ET, { ref: e, className: Ge("text-lg font-semibold", n), ...t })); +$T.displayName = ET.displayName; +const RT = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx(kT, { ref: e, className: Ge("text-sm text-muted-foreground", n), ...t })); +RT.displayName = kT.displayName; +const IT = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx(_T, { ref: e, className: Ge(Ox(), n), ...t })); +IT.displayName = _T.displayName; +const OT = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx( + ST, + { + ref: e, + className: Ge(Ox({ variant: "outline" }), "mt-2 sm:mt-0", n), + ...t + } +)); +OT.displayName = ST.displayName; +const ZU = ({ + currentPictureId: n, + onVersionSelect: t +}) => { + const { user: e } = Qa(), [s, r] = fe([]), [i, a] = fe(!0), [o, c] = fe(null), [u, f] = fe(null), [p, g] = fe(!1), [y, v] = fe(null), [b, w] = fe(!1); + Rt(() => { + E(); + }, [n]); + const E = async () => { + if (!(!e || !n)) { + a(!0); + try { + const { data: A, error: T } = await ct.from("pictures").select("id, parent_id, title, image_url, is_selected, created_at, visible").eq("id", n).single(); + if (T) throw T; + const N = A.parent_id || A.id, { data: $, error: D } = await ct.from("pictures").select("id, title, image_url, is_selected, created_at, parent_id, visible, user_id").eq("user_id", e.id).or(`id.eq.${N},parent_id.eq.${N}`).order("created_at", { ascending: !0 }); + if (D) throw D; + r($ || []); + } catch (A) { + console.error("Error loading versions:", A), Ee.error(de("Failed to load image versions")); + } finally { + a(!1); + } + } + }, x = async (A) => { + var T; + if (e) { + c(A); + try { + const N = ((T = s.find((D) => D.parent_id === null)) == null ? void 0 : T.id) || n; + await ct.from("pictures").update({ is_selected: !1 }).eq("user_id", e.id).or(`id.eq.${N},parent_id.eq.${N}`); + const { error: $ } = await ct.from("pictures").update({ is_selected: !0 }).eq("id", A).eq("user_id", e.id); + if ($) throw $; + r( + (D) => D.map((V) => ({ + ...V, + is_selected: V.id === A + })) + ), Ee.success(de("Version selected successfully!")), t(A); + } catch (N) { + console.error("Error selecting version:", N), Ee.error(de("Failed to select version")); + } finally { + c(null); + } + } + }, C = async (A, T) => { + if (e) { + f(A); + try { + const { error: N } = await ct.from("pictures").update({ visible: !T }).eq("id", A).eq("user_id", e.id); + if (N) throw N; + r( + ($) => $.map((D) => ({ + ...D, + visible: D.id === A ? !T : D.visible + })) + ), Ee.success(de(T ? "Version hidden successfully!" : "Version made visible successfully!")); + } catch (N) { + console.error("Error toggling visibility:", N), Ee.error(de("Failed to update visibility")); + } finally { + f(null); + } + } + }, _ = (A) => { + v(A), g(!0); + }, k = async () => { + var A; + if (!(!y || !e)) { + w(!0); + try { + const { data: T, error: N } = await ct.from("pictures").select("*").eq("user_id", e.id); + if (N) throw N; + const $ = (J) => { + const G = []; + return T.filter((H) => H.parent_id === J).forEach((H) => { + G.push(H), G.push(...$(H.id)); + }), G; + }, D = $(y.id), V = [y, ...D]; + for (const J of V) + if ((A = J.image_url) != null && A.includes("supabase.co/storage/")) { + const G = J.image_url.split("/"), q = G[G.length - 1], H = `${J.user_id}/${q}`; + await ct.storage.from("pictures").remove([H]); + } + const { error: j } = await ct.from("pictures").delete().in("id", V.map((J) => J.id)); + if (j) throw j; + const B = new Set(V.map((J) => J.id)); + r((J) => J.filter((G) => !B.has(G.id))); + const W = V.length; + Ee.success(de(`Deleted ${W > 1 ? `${W} versions` : "version"} successfully`)); + } catch (T) { + console.error("Error deleting version:", T), Ee.error(de("Failed to delete version")); + } finally { + w(!1), g(!1), v(null); + } + } + }; + return i ? /* @__PURE__ */ h.jsx("div", { className: "flex items-center justify-center p-4", children: /* @__PURE__ */ h.jsx("div", { className: "text-muted-foreground", children: /* @__PURE__ */ h.jsx(Ve, { children: "Loading versions..." }) }) }) : s.length <= 1 ? /* @__PURE__ */ h.jsx("div", { className: "text-center p-4", children: /* @__PURE__ */ h.jsx("p", { className: "text-muted-foreground", children: /* @__PURE__ */ h.jsx(Ve, { children: "No other versions available for this image." }) }) }) : /* @__PURE__ */ h.jsxs("div", { className: "space-y-4", children: [ + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center gap-2 mb-4", children: [ + /* @__PURE__ */ h.jsx(zS, { className: "h-5 w-5" }), + /* @__PURE__ */ h.jsx("h3", { className: "font-semibold", children: /* @__PURE__ */ h.jsx(Ve, { children: "Image Versions" }) }), + /* @__PURE__ */ h.jsx(tf, { variant: "secondary", children: s.length }) + ] }), + /* @__PURE__ */ h.jsx("div", { className: "grid grid-cols-2 sm:grid-cols-3 gap-4", children: s.map((A) => /* @__PURE__ */ h.jsx( + lv, + { + className: `cursor-pointer transition-all hover:scale-105 ${A.is_selected ? "ring-2 ring-primary" : ""}`, + children: /* @__PURE__ */ h.jsxs(cv, { className: "p-2", children: [ + /* @__PURE__ */ h.jsxs("div", { className: "aspect-square relative mb-2 overflow-hidden rounded-md", children: [ + /* @__PURE__ */ h.jsx( + "img", + { + src: A.image_url, + alt: A.title, + className: "w-full h-full object-cover" + } + ), + A.is_selected && /* @__PURE__ */ h.jsx("div", { className: "absolute top-2 right-2 bg-primary text-primary-foreground rounded-full p-1", children: /* @__PURE__ */ h.jsx(Nx, { className: "h-3 w-3" }) }) + ] }), + /* @__PURE__ */ h.jsxs("div", { className: "space-y-1", children: [ + /* @__PURE__ */ h.jsx("p", { className: "text-xs font-medium truncate", children: A.title }), + /* @__PURE__ */ h.jsx("p", { className: "text-xs text-muted-foreground", children: new Date(A.created_at).toLocaleDateString() }), + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center gap-1", children: [ + A.parent_id === null && /* @__PURE__ */ h.jsx(tf, { variant: "outline", className: "text-xs", children: /* @__PURE__ */ h.jsx(Ve, { children: "Original" }) }), + !A.visible && /* @__PURE__ */ h.jsx(tf, { variant: "secondary", className: "text-xs", children: /* @__PURE__ */ h.jsx(Ve, { children: "Hidden" }) }) + ] }) + ] }), + /* @__PURE__ */ h.jsxs("div", { className: "flex gap-1 mt-2", children: [ + /* @__PURE__ */ h.jsx( + Me, + { + size: "sm", + className: "flex-1", + variant: A.is_selected ? "default" : "outline", + onClick: () => x(A.id), + disabled: o === A.id, + children: /* @__PURE__ */ h.jsx(Ve, { children: o === A.id ? "Selecting..." : A.is_selected ? "Selected" : "Select" }) + } + ), + /* @__PURE__ */ h.jsx( + Me, + { + size: "sm", + variant: "ghost", + onClick: () => C(A.id, A.visible), + disabled: u === A.id, + className: "px-2", + children: u === A.id ? /* @__PURE__ */ h.jsx("div", { className: "animate-spin rounded-full h-3 w-3 border border-current border-t-transparent" }) : A.visible ? /* @__PURE__ */ h.jsx(z8, { className: "h-3 w-3" }) : /* @__PURE__ */ h.jsx(H8, { className: "h-3 w-3" }) + } + ), + /* @__PURE__ */ h.jsx( + Me, + { + size: "sm", + variant: "ghost", + className: "px-2 text-destructive hover:text-destructive hover:bg-destructive/10", + onClick: () => _(A), + disabled: b || A.id === n, + title: de("Delete version"), + children: /* @__PURE__ */ h.jsx(Wy, { className: "h-3 w-3" }) + } + ) + ] }) + ] }) + }, + A.id + )) }), + /* @__PURE__ */ h.jsx(YU, { open: p, onOpenChange: g, children: /* @__PURE__ */ h.jsxs(AT, { children: [ + /* @__PURE__ */ h.jsxs(PT, { children: [ + /* @__PURE__ */ h.jsx($T, { children: /* @__PURE__ */ h.jsx(Ve, { children: "Delete Version" }) }), + /* @__PURE__ */ h.jsxs(RT, { children: [ + /* @__PURE__ */ h.jsx(Ve, { children: "Are you sure you want to delete this version?" }), + ' "', + y == null ? void 0 : y.title, + '"', + /* @__PURE__ */ h.jsx("br", {}), + /* @__PURE__ */ h.jsx("br", {}), + /* @__PURE__ */ h.jsx("span", { className: "text-destructive font-semibold", children: /* @__PURE__ */ h.jsx(Ve, { children: "This action cannot be undone." }) }) + ] }) + ] }), + /* @__PURE__ */ h.jsxs(NT, { children: [ + /* @__PURE__ */ h.jsx(OT, { children: /* @__PURE__ */ h.jsx(Ve, { children: "Cancel" }) }), + /* @__PURE__ */ h.jsx( + IT, + { + onClick: (A) => { + A.preventDefault(), k(); + }, + className: "bg-destructive text-destructive-foreground hover:bg-destructive/90", + disabled: b, + children: b ? /* @__PURE__ */ h.jsx(Ve, { children: "Deleting..." }) : /* @__PURE__ */ h.jsx(Ve, { children: "Delete" }) + } + ) + ] }) + ] }) }) + ] }); +}; +function tt(n, t, e, s, r) { + if (typeof t == "function" ? n !== t || !0 : !t.has(n)) + throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return t.set(n, e), e; +} +function z(n, t, e, s) { + if (e === "a" && !s) + throw new TypeError("Private accessor was defined without a getter"); + if (typeof t == "function" ? n !== t || !s : !t.has(n)) + throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return e === "m" ? s : e === "a" ? s.call(n) : s ? s.value : t.get(n); +} +let MT = function() { + const { crypto: n } = globalThis; + if (n != null && n.randomUUID) + return MT = n.randomUUID.bind(n), n.randomUUID(); + const t = new Uint8Array(1), e = n ? () => n.getRandomValues(t)[0] : () => Math.random() * 255 & 255; + return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (s) => (+s ^ e() & 15 >> +s / 4).toString(16)); +}; +function Sw(n) { + return typeof n == "object" && n !== null && // Spec-compliant fetch implementations + ("name" in n && n.name === "AbortError" || // Expo fetch + "message" in n && String(n.message).includes("FetchRequestCanceledException")); +} +const Ew = (n) => { + if (n instanceof Error) + return n; + if (typeof n == "object" && n !== null) { + try { + if (Object.prototype.toString.call(n) === "[object Error]") { + const t = new Error(n.message, n.cause ? { cause: n.cause } : {}); + return n.stack && (t.stack = n.stack), n.cause && !t.cause && (t.cause = n.cause), n.name && (t.name = n.name), t; + } + } catch { + } + try { + return new Error(JSON.stringify(n)); + } catch { + } + } + return new Error(n); +}; +class De extends Error { +} +class cs extends De { + constructor(t, e, s, r) { + super(`${cs.makeMessage(t, e, s)}`), this.status = t, this.headers = r, this.requestID = r == null ? void 0 : r.get("x-request-id"), this.error = e; + const i = e; + this.code = i == null ? void 0 : i.code, this.param = i == null ? void 0 : i.param, this.type = i == null ? void 0 : i.type; + } + static makeMessage(t, e, s) { + const r = e != null && e.message ? typeof e.message == "string" ? e.message : JSON.stringify(e.message) : e ? JSON.stringify(e) : s; + return t && r ? `${t} ${r}` : t ? `${t} status code (no body)` : r || "(no status code or body)"; + } + static generate(t, e, s, r) { + if (!t || !r) + return new uv({ message: s, cause: Ew(e) }); + const i = e == null ? void 0 : e.error; + return t === 400 ? new DT(t, i, s, r) : t === 401 ? new LT(t, i, s, r) : t === 403 ? new jT(t, i, s, r) : t === 404 ? new FT(t, i, s, r) : t === 409 ? new VT(t, i, s, r) : t === 422 ? new BT(t, i, s, r) : t === 429 ? new UT(t, i, s, r) : t >= 500 ? new qT(t, i, s, r) : new cs(t, i, s, r); + } +} +class Sr extends cs { + constructor({ message: t } = {}) { + super(void 0, void 0, t || "Request was aborted.", void 0); + } +} +class uv extends cs { + constructor({ message: t, cause: e }) { + super(void 0, void 0, t || "Connection error.", void 0), e && (this.cause = e); + } +} +class CC extends uv { + constructor({ message: t } = {}) { + super({ message: t ?? "Request timed out." }); + } +} +class DT extends cs { +} +class LT extends cs { +} +class jT extends cs { +} +class FT extends cs { +} +class VT extends cs { +} +class BT extends cs { +} +class UT extends cs { +} +class qT extends cs { +} +class zT extends De { + constructor() { + super("Could not parse response content as the length limit was reached"); + } +} +class HT extends De { + constructor() { + super("Could not parse response content as the request was rejected by the content filter"); + } +} +class Mh extends Error { + constructor(t) { + super(t); + } +} +const XU = /^[a-z][a-z0-9+.-]*:/i, QU = (n) => XU.test(n); +let Us = (n) => (Us = Array.isArray, Us(n)), A6 = Us; +function WT(n) { + return typeof n != "object" ? {} : n ?? {}; +} +function JU(n) { + if (!n) + return !0; + for (const t in n) + return !1; + return !0; +} +function eq(n, t) { + return Object.prototype.hasOwnProperty.call(n, t); +} +function yb(n) { + return n != null && typeof n == "object" && !Array.isArray(n); +} +const tq = (n, t) => { + if (typeof t != "number" || !Number.isInteger(t)) + throw new De(`${n} must be an integer`); + if (t < 0) + throw new De(`${n} must be a positive integer`); + return t; +}, nq = (n) => { + try { + return JSON.parse(n); + } catch { + return; + } +}, Ip = (n) => new Promise((t) => setTimeout(t, n)), uu = "6.16.0", sq = () => ( + // @ts-ignore + typeof window < "u" && // @ts-ignore + typeof window.document < "u" && // @ts-ignore + typeof navigator < "u" +); +function rq() { + return typeof Deno < "u" && Deno.build != null ? "deno" : typeof EdgeRuntime < "u" ? "edge" : Object.prototype.toString.call(typeof globalThis.process < "u" ? globalThis.process : 0) === "[object process]" ? "node" : "unknown"; +} +const iq = () => { + var e; + const n = rq(); + if (n === "deno") + return { + "X-Stainless-Lang": "js", + "X-Stainless-Package-Version": uu, + "X-Stainless-OS": N6(Deno.build.os), + "X-Stainless-Arch": P6(Deno.build.arch), + "X-Stainless-Runtime": "deno", + "X-Stainless-Runtime-Version": typeof Deno.version == "string" ? Deno.version : ((e = Deno.version) == null ? void 0 : e.deno) ?? "unknown" + }; + if (typeof EdgeRuntime < "u") + return { + "X-Stainless-Lang": "js", + "X-Stainless-Package-Version": uu, + "X-Stainless-OS": "Unknown", + "X-Stainless-Arch": `other:${EdgeRuntime}`, + "X-Stainless-Runtime": "edge", + "X-Stainless-Runtime-Version": globalThis.process.version + }; + if (n === "node") + return { + "X-Stainless-Lang": "js", + "X-Stainless-Package-Version": uu, + "X-Stainless-OS": N6(globalThis.process.platform ?? "unknown"), + "X-Stainless-Arch": P6(globalThis.process.arch ?? "unknown"), + "X-Stainless-Runtime": "node", + "X-Stainless-Runtime-Version": globalThis.process.version ?? "unknown" + }; + const t = aq(); + return t ? { + "X-Stainless-Lang": "js", + "X-Stainless-Package-Version": uu, + "X-Stainless-OS": "Unknown", + "X-Stainless-Arch": "unknown", + "X-Stainless-Runtime": `browser:${t.browser}`, + "X-Stainless-Runtime-Version": t.version + } : { + "X-Stainless-Lang": "js", + "X-Stainless-Package-Version": uu, + "X-Stainless-OS": "Unknown", + "X-Stainless-Arch": "unknown", + "X-Stainless-Runtime": "unknown", + "X-Stainless-Runtime-Version": "unknown" + }; +}; +function aq() { + if (typeof navigator > "u" || !navigator) + return null; + const n = [ + { key: "edge", pattern: /Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: "ie", pattern: /MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: "ie", pattern: /Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: "chrome", pattern: /Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: "firefox", pattern: /Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: "safari", pattern: /(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/ } + ]; + for (const { key: t, pattern: e } of n) { + const s = e.exec(navigator.userAgent); + if (s) { + const r = s[1] || 0, i = s[2] || 0, a = s[3] || 0; + return { browser: t, version: `${r}.${i}.${a}` }; + } + } + return null; +} +const P6 = (n) => n === "x32" ? "x32" : n === "x86_64" || n === "x64" ? "x64" : n === "arm" ? "arm" : n === "aarch64" || n === "arm64" ? "arm64" : n ? `other:${n}` : "unknown", N6 = (n) => (n = n.toLowerCase(), n.includes("ios") ? "iOS" : n === "android" ? "Android" : n === "darwin" ? "MacOS" : n === "win32" ? "Windows" : n === "freebsd" ? "FreeBSD" : n === "openbsd" ? "OpenBSD" : n === "linux" ? "Linux" : n ? `Other:${n}` : "Unknown"); +let $6; +const oq = () => $6 ?? ($6 = iq()); +function lq() { + if (typeof fetch < "u") + return fetch; + throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`"); +} +function GT(...n) { + const t = globalThis.ReadableStream; + if (typeof t > "u") + throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`"); + return new t(...n); +} +function YT(n) { + let t = Symbol.asyncIterator in n ? n[Symbol.asyncIterator]() : n[Symbol.iterator](); + return GT({ + start() { + }, + async pull(e) { + const { done: s, value: r } = await t.next(); + s ? e.close() : e.enqueue(r); + }, + async cancel() { + var e; + await ((e = t.return) == null ? void 0 : e.call(t)); + } + }); +} +function KT(n) { + if (n[Symbol.asyncIterator]) + return n; + const t = n.getReader(); + return { + async next() { + try { + const e = await t.read(); + return e != null && e.done && t.releaseLock(), e; + } catch (e) { + throw t.releaseLock(), e; + } + }, + async return() { + const e = t.cancel(); + return t.releaseLock(), await e, { done: !0, value: void 0 }; + }, + [Symbol.asyncIterator]() { + return this; + } + }; +} +async function cq(n) { + var s, r; + if (n === null || typeof n != "object") + return; + if (n[Symbol.asyncIterator]) { + await ((r = (s = n[Symbol.asyncIterator]()).return) == null ? void 0 : r.call(s)); + return; + } + const t = n.getReader(), e = t.cancel(); + t.releaseLock(), await e; +} +const uq = ({ headers: n, body: t }) => ({ + bodyHeaders: { + "content-type": "application/json" + }, + body: JSON.stringify(t) +}), ZT = "RFC3986", XT = (n) => String(n), R6 = { + RFC1738: (n) => String(n).replace(/%20/g, "+"), + RFC3986: XT +}, dq = "RFC1738"; +let kw = (n, t) => (kw = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty), kw(n, t)); +const mi = /* @__PURE__ */ (() => { + const n = []; + for (let t = 0; t < 256; ++t) + n.push("%" + ((t < 16 ? "0" : "") + t.toString(16)).toUpperCase()); + return n; +})(), vb = 1024, hq = (n, t, e, s, r) => { + if (n.length === 0) + return n; + let i = n; + if (typeof n == "symbol" ? i = Symbol.prototype.toString.call(n) : typeof n != "string" && (i = String(n)), e === "iso-8859-1") + return escape(i).replace(/%u[0-9a-f]{4}/gi, function(o) { + return "%26%23" + parseInt(o.slice(2), 16) + "%3B"; + }); + let a = ""; + for (let o = 0; o < i.length; o += vb) { + const c = i.length >= vb ? i.slice(o, o + vb) : i, u = []; + for (let f = 0; f < c.length; ++f) { + let p = c.charCodeAt(f); + if (p === 45 || // - + p === 46 || // . + p === 95 || // _ + p === 126 || // ~ + p >= 48 && p <= 57 || // 0-9 + p >= 65 && p <= 90 || // a-z + p >= 97 && p <= 122 || // A-Z + r === dq && (p === 40 || p === 41)) { + u[u.length] = c.charAt(f); + continue; + } + if (p < 128) { + u[u.length] = mi[p]; + continue; + } + if (p < 2048) { + u[u.length] = mi[192 | p >> 6] + mi[128 | p & 63]; + continue; + } + if (p < 55296 || p >= 57344) { + u[u.length] = mi[224 | p >> 12] + mi[128 | p >> 6 & 63] + mi[128 | p & 63]; + continue; + } + f += 1, p = 65536 + ((p & 1023) << 10 | c.charCodeAt(f) & 1023), u[u.length] = mi[240 | p >> 18] + mi[128 | p >> 12 & 63] + mi[128 | p >> 6 & 63] + mi[128 | p & 63]; + } + a += u.join(""); + } + return a; +}; +function fq(n) { + return !n || typeof n != "object" ? !1 : !!(n.constructor && n.constructor.isBuffer && n.constructor.isBuffer(n)); +} +function I6(n, t) { + if (Us(n)) { + const e = []; + for (let s = 0; s < n.length; s += 1) + e.push(t(n[s])); + return e; + } + return t(n); +} +const QT = { + brackets(n) { + return String(n) + "[]"; + }, + comma: "comma", + indices(n, t) { + return String(n) + "[" + t + "]"; + }, + repeat(n) { + return String(n); + } +}, JT = function(n, t) { + Array.prototype.push.apply(n, Us(t) ? t : [t]); +}; +let O6; +const qn = { + addQueryPrefix: !1, + allowDots: !1, + allowEmptyArrays: !1, + arrayFormat: "indices", + charset: "utf-8", + charsetSentinel: !1, + delimiter: "&", + encode: !0, + encodeDotInKeys: !1, + encoder: hq, + encodeValuesOnly: !1, + format: ZT, + formatter: XT, + /** @deprecated */ + indices: !1, + serializeDate(n) { + return (O6 ?? (O6 = Function.prototype.call.bind(Date.prototype.toISOString)))(n); + }, + skipNulls: !1, + strictNullHandling: !1 +}; +function pq(n) { + return typeof n == "string" || typeof n == "number" || typeof n == "boolean" || typeof n == "symbol" || typeof n == "bigint"; +} +const bb = {}; +function eA(n, t, e, s, r, i, a, o, c, u, f, p, g, y, v, b, w, E) { + let x = n, C = E, _ = 0, k = !1; + for (; (C = C.get(bb)) !== void 0 && !k; ) { + const D = C.get(n); + if (_ += 1, typeof D < "u") { + if (D === _) + throw new RangeError("Cyclic object value"); + k = !0; + } + typeof C.get(bb) > "u" && (_ = 0); + } + if (typeof u == "function" ? x = u(t, x) : x instanceof Date ? x = g == null ? void 0 : g(x) : e === "comma" && Us(x) && (x = I6(x, function(D) { + return D instanceof Date ? g == null ? void 0 : g(D) : D; + })), x === null) { + if (i) + return c && !b ? ( + // @ts-expect-error + c(t, qn.encoder, w, "key", y) + ) : t; + x = ""; + } + if (pq(x) || fq(x)) { + if (c) { + const D = b ? t : c(t, qn.encoder, w, "key", y); + return [ + (v == null ? void 0 : v(D)) + "=" + // @ts-expect-error + (v == null ? void 0 : v(c(x, qn.encoder, w, "value", y))) + ]; + } + return [(v == null ? void 0 : v(t)) + "=" + (v == null ? void 0 : v(String(x)))]; + } + const A = []; + if (typeof x > "u") + return A; + let T; + if (e === "comma" && Us(x)) + b && c && (x = I6(x, c)), T = [{ value: x.length > 0 ? x.join(",") || null : void 0 }]; + else if (Us(u)) + T = u; + else { + const D = Object.keys(x); + T = f ? D.sort(f) : D; + } + const N = o ? String(t).replace(/\./g, "%2E") : String(t), $ = s && Us(x) && x.length === 1 ? N + "[]" : N; + if (r && Us(x) && x.length === 0) + return $ + "[]"; + for (let D = 0; D < T.length; ++D) { + const V = T[D], j = ( + // @ts-ignore + typeof V == "object" && typeof V.value < "u" ? V.value : x[V] + ); + if (a && j === null) + continue; + const B = p && o ? V.replace(/\./g, "%2E") : V, W = Us(x) ? typeof e == "function" ? e($, B) : $ : $ + (p ? "." + B : "[" + B + "]"); + E.set(n, _); + const J = /* @__PURE__ */ new WeakMap(); + J.set(bb, E), JT(A, eA( + j, + W, + e, + s, + r, + i, + a, + o, + // @ts-ignore + e === "comma" && b && Us(x) ? null : c, + u, + f, + p, + g, + y, + v, + b, + w, + J + )); + } + return A; +} +function mq(n = qn) { + if (typeof n.allowEmptyArrays < "u" && typeof n.allowEmptyArrays != "boolean") + throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided"); + if (typeof n.encodeDotInKeys < "u" && typeof n.encodeDotInKeys != "boolean") + throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided"); + if (n.encoder !== null && typeof n.encoder < "u" && typeof n.encoder != "function") + throw new TypeError("Encoder has to be a function."); + const t = n.charset || qn.charset; + if (typeof n.charset < "u" && n.charset !== "utf-8" && n.charset !== "iso-8859-1") + throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined"); + let e = ZT; + if (typeof n.format < "u") { + if (!kw(R6, n.format)) + throw new TypeError("Unknown format option provided."); + e = n.format; + } + const s = R6[e]; + let r = qn.filter; + (typeof n.filter == "function" || Us(n.filter)) && (r = n.filter); + let i; + if (n.arrayFormat && n.arrayFormat in QT ? i = n.arrayFormat : "indices" in n ? i = n.indices ? "indices" : "repeat" : i = qn.arrayFormat, "commaRoundTrip" in n && typeof n.commaRoundTrip != "boolean") + throw new TypeError("`commaRoundTrip` must be a boolean, or absent"); + const a = typeof n.allowDots > "u" ? n.encodeDotInKeys ? !0 : qn.allowDots : !!n.allowDots; + return { + addQueryPrefix: typeof n.addQueryPrefix == "boolean" ? n.addQueryPrefix : qn.addQueryPrefix, + // @ts-ignore + allowDots: a, + allowEmptyArrays: typeof n.allowEmptyArrays == "boolean" ? !!n.allowEmptyArrays : qn.allowEmptyArrays, + arrayFormat: i, + charset: t, + charsetSentinel: typeof n.charsetSentinel == "boolean" ? n.charsetSentinel : qn.charsetSentinel, + commaRoundTrip: !!n.commaRoundTrip, + delimiter: typeof n.delimiter > "u" ? qn.delimiter : n.delimiter, + encode: typeof n.encode == "boolean" ? n.encode : qn.encode, + encodeDotInKeys: typeof n.encodeDotInKeys == "boolean" ? n.encodeDotInKeys : qn.encodeDotInKeys, + encoder: typeof n.encoder == "function" ? n.encoder : qn.encoder, + encodeValuesOnly: typeof n.encodeValuesOnly == "boolean" ? n.encodeValuesOnly : qn.encodeValuesOnly, + filter: r, + format: e, + formatter: s, + serializeDate: typeof n.serializeDate == "function" ? n.serializeDate : qn.serializeDate, + skipNulls: typeof n.skipNulls == "boolean" ? n.skipNulls : qn.skipNulls, + // @ts-ignore + sort: typeof n.sort == "function" ? n.sort : null, + strictNullHandling: typeof n.strictNullHandling == "boolean" ? n.strictNullHandling : qn.strictNullHandling + }; +} +function gq(n, t = {}) { + let e = n; + const s = mq(t); + let r, i; + typeof s.filter == "function" ? (i = s.filter, e = i("", e)) : Us(s.filter) && (i = s.filter, r = i); + const a = []; + if (typeof e != "object" || e === null) + return ""; + const o = QT[s.arrayFormat], c = o === "comma" && s.commaRoundTrip; + r || (r = Object.keys(e)), s.sort && r.sort(s.sort); + const u = /* @__PURE__ */ new WeakMap(); + for (let g = 0; g < r.length; ++g) { + const y = r[g]; + s.skipNulls && e[y] === null || JT(a, eA( + e[y], + y, + // @ts-expect-error + o, + c, + s.allowEmptyArrays, + s.strictNullHandling, + s.skipNulls, + s.encodeDotInKeys, + s.encode ? s.encoder : null, + s.filter, + s.sort, + s.allowDots, + s.serializeDate, + s.format, + s.formatter, + s.encodeValuesOnly, + s.charset, + u + )); + } + const f = a.join(s.delimiter); + let p = s.addQueryPrefix === !0 ? "?" : ""; + return s.charsetSentinel && (s.charset === "iso-8859-1" ? p += "utf8=%26%2310003%3B&" : p += "utf8=%E2%9C%93&"), f.length > 0 ? p + f : ""; +} +function yq(n) { + let t = 0; + for (const r of n) + t += r.length; + const e = new Uint8Array(t); + let s = 0; + for (const r of n) + e.set(r, s), s += r.length; + return e; +} +let M6; +function _C(n) { + let t; + return (M6 ?? (t = new globalThis.TextEncoder(), M6 = t.encode.bind(t)))(n); +} +let D6; +function L6(n) { + let t; + return (D6 ?? (t = new globalThis.TextDecoder(), D6 = t.decode.bind(t)))(n); +} +var Ws, Gs; +class dv { + constructor() { + Ws.set(this, void 0), Gs.set(this, void 0), tt(this, Ws, new Uint8Array()), tt(this, Gs, null); + } + decode(t) { + if (t == null) + return []; + const e = t instanceof ArrayBuffer ? new Uint8Array(t) : typeof t == "string" ? _C(t) : t; + tt(this, Ws, yq([z(this, Ws, "f"), e])); + const s = []; + let r; + for (; (r = vq(z(this, Ws, "f"), z(this, Gs, "f"))) != null; ) { + if (r.carriage && z(this, Gs, "f") == null) { + tt(this, Gs, r.index); + continue; + } + if (z(this, Gs, "f") != null && (r.index !== z(this, Gs, "f") + 1 || r.carriage)) { + s.push(L6(z(this, Ws, "f").subarray(0, z(this, Gs, "f") - 1))), tt(this, Ws, z(this, Ws, "f").subarray(z(this, Gs, "f"))), tt(this, Gs, null); + continue; + } + const i = z(this, Gs, "f") !== null ? r.preceding - 1 : r.preceding, a = L6(z(this, Ws, "f").subarray(0, i)); + s.push(a), tt(this, Ws, z(this, Ws, "f").subarray(r.index)), tt(this, Gs, null); + } + return s; + } + flush() { + return z(this, Ws, "f").length ? this.decode(` +`) : []; + } +} +Ws = /* @__PURE__ */ new WeakMap(), Gs = /* @__PURE__ */ new WeakMap(); +dv.NEWLINE_CHARS = /* @__PURE__ */ new Set([` +`, "\r"]); +dv.NEWLINE_REGEXP = /\r\n|[\n\r]/g; +function vq(n, t) { + for (let r = t ?? 0; r < n.length; r++) { + if (n[r] === 10) + return { preceding: r, index: r + 1, carriage: !1 }; + if (n[r] === 13) + return { preceding: r, index: r + 1, carriage: !0 }; + } + return null; +} +function bq(n) { + for (let s = 0; s < n.length - 1; s++) { + if (n[s] === 10 && n[s + 1] === 10 || n[s] === 13 && n[s + 1] === 13) + return s + 2; + if (n[s] === 13 && n[s + 1] === 10 && s + 3 < n.length && n[s + 2] === 13 && n[s + 3] === 10) + return s + 4; + } + return -1; +} +const Kg = { + off: 0, + error: 200, + warn: 300, + info: 400, + debug: 500 +}, j6 = (n, t, e) => { + if (n) { + if (eq(Kg, n)) + return n; + as(e).warn(`${t} was set to ${JSON.stringify(n)}, expected one of ${JSON.stringify(Object.keys(Kg))}`); + } +}; +function Dh() { +} +function bm(n, t, e) { + return !t || Kg[n] > Kg[e] ? Dh : t[n].bind(t); +} +const wq = { + error: Dh, + warn: Dh, + info: Dh, + debug: Dh +}; +let F6 = /* @__PURE__ */ new WeakMap(); +function as(n) { + const t = n.logger, e = n.logLevel ?? "off"; + if (!t) + return wq; + const s = F6.get(t); + if (s && s[0] === e) + return s[1]; + const r = { + error: bm("error", t, e), + warn: bm("warn", t, e), + info: bm("info", t, e), + debug: bm("debug", t, e) + }; + return F6.set(t, [e, r]), r; +} +const El = (n) => (n.options && (n.options = { ...n.options }, delete n.options.headers), n.headers && (n.headers = Object.fromEntries((n.headers instanceof Headers ? [...n.headers] : Object.entries(n.headers)).map(([t, e]) => [ + t, + t.toLowerCase() === "authorization" || t.toLowerCase() === "cookie" || t.toLowerCase() === "set-cookie" ? "***" : e +]))), "retryOfRequestLogID" in n && (n.retryOfRequestLogID && (n.retryOf = n.retryOfRequestLogID), delete n.retryOfRequestLogID), n); +var Ph; +class Ii { + constructor(t, e, s) { + this.iterator = t, Ph.set(this, void 0), this.controller = e, tt(this, Ph, s); + } + static fromSSEResponse(t, e, s) { + let r = !1; + const i = s ? as(s) : console; + async function* a() { + if (r) + throw new De("Cannot iterate over a consumed stream, use `.tee()` to split the stream."); + r = !0; + let o = !1; + try { + for await (const c of xq(t, e)) + if (!o) { + if (c.data.startsWith("[DONE]")) { + o = !0; + continue; + } + if (c.event === null || !c.event.startsWith("thread.")) { + let u; + try { + u = JSON.parse(c.data); + } catch (f) { + throw i.error("Could not parse message into JSON:", c.data), i.error("From chunk:", c.raw), f; + } + if (u && u.error) + throw new cs(void 0, u.error, void 0, t.headers); + yield u; + } else { + let u; + try { + u = JSON.parse(c.data); + } catch (f) { + throw console.error("Could not parse message into JSON:", c.data), console.error("From chunk:", c.raw), f; + } + if (c.event == "error") + throw new cs(void 0, u.error, u.message, void 0); + yield { event: c.event, data: u }; + } + } + o = !0; + } catch (c) { + if (Sw(c)) + return; + throw c; + } finally { + o || e.abort(); + } + } + return new Ii(a, e, s); + } + /** + * Generates a Stream from a newline-separated ReadableStream + * where each item is a JSON value. + */ + static fromReadableStream(t, e, s) { + let r = !1; + async function* i() { + const o = new dv(), c = KT(t); + for await (const u of c) + for (const f of o.decode(u)) + yield f; + for (const u of o.flush()) + yield u; + } + async function* a() { + if (r) + throw new De("Cannot iterate over a consumed stream, use `.tee()` to split the stream."); + r = !0; + let o = !1; + try { + for await (const c of i()) + o || c && (yield JSON.parse(c)); + o = !0; + } catch (c) { + if (Sw(c)) + return; + throw c; + } finally { + o || e.abort(); + } + } + return new Ii(a, e, s); + } + [(Ph = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { + return this.iterator(); + } + /** + * Splits the stream into two streams which can be + * independently read from at different speeds. + */ + tee() { + const t = [], e = [], s = this.iterator(), r = (i) => ({ + next: () => { + if (i.length === 0) { + const a = s.next(); + t.push(a), e.push(a); + } + return i.shift(); + } + }); + return [ + new Ii(() => r(t), this.controller, z(this, Ph, "f")), + new Ii(() => r(e), this.controller, z(this, Ph, "f")) + ]; + } + /** + * Converts this stream to a newline-separated ReadableStream of + * JSON stringified values in the stream + * which can be turned back into a Stream with `Stream.fromReadableStream()`. + */ + toReadableStream() { + const t = this; + let e; + return GT({ + async start() { + e = t[Symbol.asyncIterator](); + }, + async pull(s) { + try { + const { value: r, done: i } = await e.next(); + if (i) + return s.close(); + const a = _C(JSON.stringify(r) + ` +`); + s.enqueue(a); + } catch (r) { + s.error(r); + } + }, + async cancel() { + var s; + await ((s = e.return) == null ? void 0 : s.call(e)); + } + }); + } +} +async function* xq(n, t) { + if (!n.body) + throw t.abort(), typeof globalThis.navigator < "u" && globalThis.navigator.product === "ReactNative" ? new De("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api") : new De("Attempted to iterate over a response with no body"); + const e = new _q(), s = new dv(), r = KT(n.body); + for await (const i of Cq(r)) + for (const a of s.decode(i)) { + const o = e.decode(a); + o && (yield o); + } + for (const i of s.flush()) { + const a = e.decode(i); + a && (yield a); + } +} +async function* Cq(n) { + let t = new Uint8Array(); + for await (const e of n) { + if (e == null) + continue; + const s = e instanceof ArrayBuffer ? new Uint8Array(e) : typeof e == "string" ? _C(e) : e; + let r = new Uint8Array(t.length + s.length); + r.set(t), r.set(s, t.length), t = r; + let i; + for (; (i = bq(t)) !== -1; ) + yield t.slice(0, i), t = t.slice(i); + } + t.length > 0 && (yield t); +} +class _q { + constructor() { + this.event = null, this.data = [], this.chunks = []; + } + decode(t) { + if (t.endsWith("\r") && (t = t.substring(0, t.length - 1)), !t) { + if (!this.event && !this.data.length) + return null; + const i = { + event: this.event, + data: this.data.join(` +`), + raw: this.chunks + }; + return this.event = null, this.data = [], this.chunks = [], i; + } + if (this.chunks.push(t), t.startsWith(":")) + return null; + let [e, s, r] = Sq(t, ":"); + return r.startsWith(" ") && (r = r.substring(1)), e === "event" ? this.event = r : e === "data" && this.data.push(r), null; + } +} +function Sq(n, t) { + const e = n.indexOf(t); + return e !== -1 ? [n.substring(0, e), t, n.substring(e + t.length)] : [n, "", ""]; +} +async function tA(n, t) { + const { response: e, requestLogID: s, retryOfRequestLogID: r, startTime: i } = t, a = await (async () => { + var p; + if (t.options.stream) + return as(n).debug("response", e.status, e.url, e.headers, e.body), t.options.__streamClass ? t.options.__streamClass.fromSSEResponse(e, t.controller, n) : Ii.fromSSEResponse(e, t.controller, n); + if (e.status === 204) + return null; + if (t.options.__binaryResponse) + return e; + const o = e.headers.get("content-type"), c = (p = o == null ? void 0 : o.split(";")[0]) == null ? void 0 : p.trim(); + if ((c == null ? void 0 : c.includes("application/json")) || (c == null ? void 0 : c.endsWith("+json"))) { + const g = await e.json(); + return nA(g, e); + } + return await e.text(); + })(); + return as(n).debug(`[${s}] response parsed`, El({ + retryOfRequestLogID: r, + url: e.url, + status: e.status, + body: a, + durationMs: Date.now() - i + })), a; +} +function nA(n, t) { + return !n || typeof n != "object" || Array.isArray(n) ? n : Object.defineProperty(n, "_request_id", { + value: t.headers.get("x-request-id"), + enumerable: !1 + }); +} +var Lh; +class hv extends Promise { + constructor(t, e, s = tA) { + super((r) => { + r(null); + }), this.responsePromise = e, this.parseResponse = s, Lh.set(this, void 0), tt(this, Lh, t); + } + _thenUnwrap(t) { + return new hv(z(this, Lh, "f"), this.responsePromise, async (e, s) => nA(t(await this.parseResponse(e, s), s), s.response)); + } + /** + * Gets the raw `Response` instance instead of parsing the response + * data. + * + * If you want to parse the response body but still get the `Response` + * instance, you can use {@link withResponse()}. + * + * 👋 Getting the wrong TypeScript type for `Response`? + * Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]` + * to your `tsconfig.json`. + */ + asResponse() { + return this.responsePromise.then((t) => t.response); + } + /** + * Gets the parsed response data, the raw `Response` instance and the ID of the request, + * returned via the X-Request-ID header which is useful for debugging requests and reporting + * issues to OpenAI. + * + * If you just want to get the raw `Response` instance without parsing it, + * you can use {@link asResponse()}. + * + * 👋 Getting the wrong TypeScript type for `Response`? + * Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]` + * to your `tsconfig.json`. + */ + async withResponse() { + const [t, e] = await Promise.all([this.parse(), this.asResponse()]); + return { data: t, response: e, request_id: e.headers.get("x-request-id") }; + } + parse() { + return this.parsedPromise || (this.parsedPromise = this.responsePromise.then((t) => this.parseResponse(z(this, Lh, "f"), t))), this.parsedPromise; + } + then(t, e) { + return this.parse().then(t, e); + } + catch(t) { + return this.parse().catch(t); + } + finally(t) { + return this.parse().finally(t); + } +} +Lh = /* @__PURE__ */ new WeakMap(); +var wm; +class SC { + constructor(t, e, s, r) { + wm.set(this, void 0), tt(this, wm, t), this.options = r, this.response = e, this.body = s; + } + hasNextPage() { + return this.getPaginatedItems().length ? this.nextPageRequestOptions() != null : !1; + } + async getNextPage() { + const t = this.nextPageRequestOptions(); + if (!t) + throw new De("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`."); + return await z(this, wm, "f").requestAPIList(this.constructor, t); + } + async *iterPages() { + let t = this; + for (yield t; t.hasNextPage(); ) + t = await t.getNextPage(), yield t; + } + async *[(wm = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { + for await (const t of this.iterPages()) + for (const e of t.getPaginatedItems()) + yield e; + } +} +class Eq extends hv { + constructor(t, e, s) { + super(t, e, async (r, i) => new s(r, i.response, await tA(r, i), i.options)); + } + /** + * Allow auto-paginating iteration on an unawaited list call, eg: + * + * for await (const item of client.items.list()) { + * console.log(item) + * } + */ + async *[Symbol.asyncIterator]() { + const t = await this; + for await (const e of t) + yield e; + } +} +class fv extends SC { + constructor(t, e, s, r) { + super(t, e, s, r), this.data = s.data || [], this.object = s.object; + } + getPaginatedItems() { + return this.data ?? []; + } + nextPageRequestOptions() { + return null; + } +} +class Fn extends SC { + constructor(t, e, s, r) { + super(t, e, s, r), this.data = s.data || [], this.has_more = s.has_more || !1; + } + getPaginatedItems() { + return this.data ?? []; + } + hasNextPage() { + return this.has_more === !1 ? !1 : super.hasNextPage(); + } + nextPageRequestOptions() { + var s; + const t = this.getPaginatedItems(), e = (s = t[t.length - 1]) == null ? void 0 : s.id; + return e ? { + ...this.options, + query: { + ...WT(this.options.query), + after: e + } + } : null; + } +} +class Zg extends SC { + constructor(t, e, s, r) { + super(t, e, s, r), this.data = s.data || [], this.has_more = s.has_more || !1, this.last_id = s.last_id || ""; + } + getPaginatedItems() { + return this.data ?? []; + } + hasNextPage() { + return this.has_more === !1 ? !1 : super.hasNextPage(); + } + nextPageRequestOptions() { + const t = this.last_id; + return t ? { + ...this.options, + query: { + ...WT(this.options.query), + after: t + } + } : null; + } +} +const sA = () => { + var n; + if (typeof File > "u") { + const { process: t } = globalThis, e = typeof ((n = t == null ? void 0 : t.versions) == null ? void 0 : n.node) == "string" && parseInt(t.versions.node.split(".")) < 20; + throw new Error("`File` is not defined as a global, which is required for file uploads." + (e ? " Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`." : "")); + } +}; +function nf(n, t, e) { + return sA(), new File(n, t ?? "unknown_file", e); +} +function zm(n) { + return (typeof n == "object" && n !== null && ("name" in n && n.name && String(n.name) || "url" in n && n.url && String(n.url) || "filename" in n && n.filename && String(n.filename) || "path" in n && n.path && String(n.path)) || "").split(/[\\/]/).pop() || void 0; +} +const EC = (n) => n != null && typeof n == "object" && typeof n[Symbol.asyncIterator] == "function", V6 = async (n, t) => Tw(n.body) ? { ...n, body: await rA(n.body, t) } : n, Oc = async (n, t) => ({ ...n, body: await rA(n.body, t) }), B6 = /* @__PURE__ */ new WeakMap(); +function kq(n) { + const t = typeof n == "function" ? n : n.fetch, e = B6.get(t); + if (e) + return e; + const s = (async () => { + try { + const r = "Response" in t ? t.Response : (await t("data:,")).constructor, i = new FormData(); + return i.toString() !== await new r(i).text(); + } catch { + return !0; + } + })(); + return B6.set(t, s), s; +} +const rA = async (n, t) => { + if (!await kq(t)) + throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class."); + const e = new FormData(); + return await Promise.all(Object.entries(n || {}).map(([s, r]) => Aw(e, s, r))), e; +}, iA = (n) => n instanceof Blob && "name" in n, Tq = (n) => typeof n == "object" && n !== null && (n instanceof Response || EC(n) || iA(n)), Tw = (n) => { + if (Tq(n)) + return !0; + if (Array.isArray(n)) + return n.some(Tw); + if (n && typeof n == "object") { + for (const t in n) + if (Tw(n[t])) + return !0; + } + return !1; +}, Aw = async (n, t, e) => { + if (e !== void 0) { + if (e == null) + throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`); + if (typeof e == "string" || typeof e == "number" || typeof e == "boolean") + n.append(t, String(e)); + else if (e instanceof Response) + n.append(t, nf([await e.blob()], zm(e))); + else if (EC(e)) + n.append(t, nf([await new Response(YT(e)).blob()], zm(e))); + else if (iA(e)) + n.append(t, e, zm(e)); + else if (Array.isArray(e)) + await Promise.all(e.map((s) => Aw(n, t + "[]", s))); + else if (typeof e == "object") + await Promise.all(Object.entries(e).map(([s, r]) => Aw(n, `${t}[${s}]`, r))); + else + throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${e} instead`); + } +}, aA = (n) => n != null && typeof n == "object" && typeof n.size == "number" && typeof n.type == "string" && typeof n.text == "function" && typeof n.slice == "function" && typeof n.arrayBuffer == "function", Aq = (n) => n != null && typeof n == "object" && typeof n.name == "string" && typeof n.lastModified == "number" && aA(n), Pq = (n) => n != null && typeof n == "object" && typeof n.url == "string" && typeof n.blob == "function"; +async function Nq(n, t, e) { + if (sA(), n = await n, Aq(n)) + return n instanceof File ? n : nf([await n.arrayBuffer()], n.name); + if (Pq(n)) { + const r = await n.blob(); + return t || (t = new URL(n.url).pathname.split(/[\\/]/).pop()), nf(await Pw(r), t, e); + } + const s = await Pw(n); + if (t || (t = zm(n)), !(e != null && e.type)) { + const r = s.find((i) => typeof i == "object" && "type" in i && i.type); + typeof r == "string" && (e = { ...e, type: r }); + } + return nf(s, t, e); +} +async function Pw(n) { + var e; + let t = []; + if (typeof n == "string" || ArrayBuffer.isView(n) || // includes Uint8Array, Buffer, etc. + n instanceof ArrayBuffer) + t.push(n); + else if (aA(n)) + t.push(n instanceof Blob ? n : await n.arrayBuffer()); + else if (EC(n)) + for await (const s of n) + t.push(...await Pw(s)); + else { + const s = (e = n == null ? void 0 : n.constructor) == null ? void 0 : e.name; + throw new Error(`Unexpected data type: ${typeof n}${s ? `; constructor: ${s}` : ""}${$q(n)}`); + } + return t; +} +function $q(n) { + return typeof n != "object" || n === null ? "" : `; props: [${Object.getOwnPropertyNames(n).map((e) => `"${e}"`).join(", ")}]`; +} +class Ie { + constructor(t) { + this._client = t; + } +} +function oA(n) { + return n.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g, encodeURIComponent); +} +const U6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null)), Rq = (n = oA) => function(e, ...s) { + if (e.length === 1) + return e[0]; + let r = !1; + const i = [], a = e.reduce((f, p, g) => { + var b; + /[?#]/.test(p) && (r = !0); + const y = s[g]; + let v = (r ? encodeURIComponent : n)("" + y); + return g !== s.length && (y == null || typeof y == "object" && // handle values from other realms + y.toString === ((b = Object.getPrototypeOf(Object.getPrototypeOf(y.hasOwnProperty ?? U6) ?? U6)) == null ? void 0 : b.toString)) && (v = y + "", i.push({ + start: f.length + p.length, + length: v.length, + error: `Value of type ${Object.prototype.toString.call(y).slice(8, -1)} is not a valid path parameter` + })), f + p + (g === s.length ? "" : v); + }, ""), o = a.split(/[?#]/, 1)[0], c = new RegExp("(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)", "gi"); + let u; + for (; (u = c.exec(o)) !== null; ) + i.push({ + start: u.index, + length: u[0].length, + error: `Value "${u[0]}" can't be safely passed as a path parameter` + }); + if (i.sort((f, p) => f.start - p.start), i.length > 0) { + let f = 0; + const p = i.reduce((g, y) => { + const v = " ".repeat(y.start - f), b = "^".repeat(y.length); + return f = y.start + y.length, g + v + b; + }, ""); + throw new De(`Path parameters result in path with invalid segments: +${i.map((g) => g.error).join(` +`)} +${a} +${p}`); + } + return a; +}, oe = /* @__PURE__ */ Rq(oA); +let lA = class extends Ie { + /** + * Get the messages in a stored chat completion. Only Chat Completions that have + * been created with the `store` parameter set to `true` will be returned. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list( + * 'completion_id', + * )) { + * // ... + * } + * ``` + */ + list(t, e = {}, s) { + return this._client.getAPIList(oe`/chat/completions/${t}/messages`, Fn, { query: e, ...s }); + } +}; +function Xg(n) { + return n !== void 0 && "function" in n && n.function !== void 0; +} +function kC(n) { + return (n == null ? void 0 : n.$brand) === "auto-parseable-response-format"; +} +function Op(n) { + return (n == null ? void 0 : n.$brand) === "auto-parseable-tool"; +} +function Iq(n, t) { + return !t || !cA(t) ? { + ...n, + choices: n.choices.map((e) => (uA(e.message.tool_calls), { + ...e, + message: { + ...e.message, + parsed: null, + ...e.message.tool_calls ? { + tool_calls: e.message.tool_calls + } : void 0 + } + })) + } : TC(n, t); +} +function TC(n, t) { + const e = n.choices.map((s) => { + var r; + if (s.finish_reason === "length") + throw new zT(); + if (s.finish_reason === "content_filter") + throw new HT(); + return uA(s.message.tool_calls), { + ...s, + message: { + ...s.message, + ...s.message.tool_calls ? { + tool_calls: ((r = s.message.tool_calls) == null ? void 0 : r.map((i) => Mq(t, i))) ?? void 0 + } : void 0, + parsed: s.message.content && !s.message.refusal ? Oq(t, s.message.content) : null + } + }; + }); + return { ...n, choices: e }; +} +function Oq(n, t) { + var e, s; + return ((e = n.response_format) == null ? void 0 : e.type) !== "json_schema" ? null : ((s = n.response_format) == null ? void 0 : s.type) === "json_schema" ? "$parseRaw" in n.response_format ? n.response_format.$parseRaw(t) : JSON.parse(t) : null; +} +function Mq(n, t) { + var s; + const e = (s = n.tools) == null ? void 0 : s.find((r) => { + var i; + return Xg(r) && ((i = r.function) == null ? void 0 : i.name) === t.function.name; + }); + return { + ...t, + function: { + ...t.function, + parsed_arguments: Op(e) ? e.$parseRaw(t.function.arguments) : e != null && e.function.strict ? JSON.parse(t.function.arguments) : null + } + }; +} +function Dq(n, t) { + var s; + if (!n || !("tools" in n) || !n.tools) + return !1; + const e = (s = n.tools) == null ? void 0 : s.find((r) => { + var i; + return Xg(r) && ((i = r.function) == null ? void 0 : i.name) === t.function.name; + }); + return Xg(e) && (Op(e) || (e == null ? void 0 : e.function.strict) || !1); +} +function cA(n) { + var t; + return kC(n.response_format) ? !0 : ((t = n.tools) == null ? void 0 : t.some((e) => Op(e) || e.type === "function" && e.function.strict === !0)) ?? !1; +} +function uA(n) { + for (const t of n || []) + if (t.type !== "function") + throw new De(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``); +} +function Lq(n) { + for (const t of n ?? []) { + if (t.type !== "function") + throw new De(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``); + if (t.function.strict !== !0) + throw new De(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`); + } +} +const Qg = (n) => (n == null ? void 0 : n.role) === "assistant", dA = (n) => (n == null ? void 0 : n.role) === "tool"; +var Nw, Hm, Wm, jh, Fh, Gm, Vh, da, Bh, Jg, ey, du, hA; +class AC { + constructor() { + Nw.add(this), this.controller = new AbortController(), Hm.set(this, void 0), Wm.set(this, () => { + }), jh.set(this, () => { + }), Fh.set(this, void 0), Gm.set(this, () => { + }), Vh.set(this, () => { + }), da.set(this, {}), Bh.set(this, !1), Jg.set(this, !1), ey.set(this, !1), du.set(this, !1), tt(this, Hm, new Promise((t, e) => { + tt(this, Wm, t, "f"), tt(this, jh, e, "f"); + })), tt(this, Fh, new Promise((t, e) => { + tt(this, Gm, t, "f"), tt(this, Vh, e, "f"); + })), z(this, Hm, "f").catch(() => { + }), z(this, Fh, "f").catch(() => { + }); + } + _run(t) { + setTimeout(() => { + t().then(() => { + this._emitFinal(), this._emit("end"); + }, z(this, Nw, "m", hA).bind(this)); + }, 0); + } + _connected() { + this.ended || (z(this, Wm, "f").call(this), this._emit("connect")); + } + get ended() { + return z(this, Bh, "f"); + } + get errored() { + return z(this, Jg, "f"); + } + get aborted() { + return z(this, ey, "f"); + } + abort() { + this.controller.abort(); + } + /** + * Adds the listener function to the end of the listeners array for the event. + * No checks are made to see if the listener has already been added. Multiple calls passing + * the same combination of event and listener will result in the listener being added, and + * called, multiple times. + * @returns this ChatCompletionStream, so that calls can be chained + */ + on(t, e) { + return (z(this, da, "f")[t] || (z(this, da, "f")[t] = [])).push({ listener: e }), this; + } + /** + * Removes the specified listener from the listener array for the event. + * off() will remove, at most, one instance of a listener from the listener array. If any single + * listener has been added multiple times to the listener array for the specified event, then + * off() must be called multiple times to remove each instance. + * @returns this ChatCompletionStream, so that calls can be chained + */ + off(t, e) { + const s = z(this, da, "f")[t]; + if (!s) + return this; + const r = s.findIndex((i) => i.listener === e); + return r >= 0 && s.splice(r, 1), this; + } + /** + * Adds a one-time listener function for the event. The next time the event is triggered, + * this listener is removed and then invoked. + * @returns this ChatCompletionStream, so that calls can be chained + */ + once(t, e) { + return (z(this, da, "f")[t] || (z(this, da, "f")[t] = [])).push({ listener: e, once: !0 }), this; + } + /** + * This is similar to `.once()`, but returns a Promise that resolves the next time + * the event is triggered, instead of calling a listener callback. + * @returns a Promise that resolves the next time given event is triggered, + * or rejects if an error is emitted. (If you request the 'error' event, + * returns a promise that resolves with the error). + * + * Example: + * + * const message = await stream.emitted('message') // rejects if the stream errors + */ + emitted(t) { + return new Promise((e, s) => { + tt(this, du, !0), t !== "error" && this.once("error", s), this.once(t, e); + }); + } + async done() { + tt(this, du, !0), await z(this, Fh, "f"); + } + _emit(t, ...e) { + if (z(this, Bh, "f")) + return; + t === "end" && (tt(this, Bh, !0), z(this, Gm, "f").call(this)); + const s = z(this, da, "f")[t]; + if (s && (z(this, da, "f")[t] = s.filter((r) => !r.once), s.forEach(({ listener: r }) => r(...e))), t === "abort") { + const r = e[0]; + !z(this, du, "f") && !(s != null && s.length) && Promise.reject(r), z(this, jh, "f").call(this, r), z(this, Vh, "f").call(this, r), this._emit("end"); + return; + } + if (t === "error") { + const r = e[0]; + !z(this, du, "f") && !(s != null && s.length) && Promise.reject(r), z(this, jh, "f").call(this, r), z(this, Vh, "f").call(this, r), this._emit("end"); + } + } + _emitFinal() { + } +} +Hm = /* @__PURE__ */ new WeakMap(), Wm = /* @__PURE__ */ new WeakMap(), jh = /* @__PURE__ */ new WeakMap(), Fh = /* @__PURE__ */ new WeakMap(), Gm = /* @__PURE__ */ new WeakMap(), Vh = /* @__PURE__ */ new WeakMap(), da = /* @__PURE__ */ new WeakMap(), Bh = /* @__PURE__ */ new WeakMap(), Jg = /* @__PURE__ */ new WeakMap(), ey = /* @__PURE__ */ new WeakMap(), du = /* @__PURE__ */ new WeakMap(), Nw = /* @__PURE__ */ new WeakSet(), hA = function(t) { + if (tt(this, Jg, !0), t instanceof Error && t.name === "AbortError" && (t = new Sr()), t instanceof Sr) + return tt(this, ey, !0), this._emit("abort", t); + if (t instanceof De) + return this._emit("error", t); + if (t instanceof Error) { + const e = new De(t.message); + return e.cause = t, this._emit("error", e); + } + return this._emit("error", new De(String(t))); +}; +function jq(n) { + return typeof n.parse == "function"; +} +var bs, $w, ty, Rw, Iw, Ow, fA, pA; +const Fq = 10; +class mA extends AC { + constructor() { + super(...arguments), bs.add(this), this._chatCompletions = [], this.messages = []; + } + _addChatCompletion(t) { + var s; + this._chatCompletions.push(t), this._emit("chatCompletion", t); + const e = (s = t.choices[0]) == null ? void 0 : s.message; + return e && this._addMessage(e), t; + } + _addMessage(t, e = !0) { + if ("content" in t || (t.content = null), this.messages.push(t), e) { + if (this._emit("message", t), dA(t) && t.content) + this._emit("functionToolCallResult", t.content); + else if (Qg(t) && t.tool_calls) + for (const s of t.tool_calls) + s.type === "function" && this._emit("functionToolCall", s.function); + } + } + /** + * @returns a promise that resolves with the final ChatCompletion, or rejects + * if an error occurred or the stream ended prematurely without producing a ChatCompletion. + */ + async finalChatCompletion() { + await this.done(); + const t = this._chatCompletions[this._chatCompletions.length - 1]; + if (!t) + throw new De("stream ended without producing a ChatCompletion"); + return t; + } + /** + * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects + * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage. + */ + async finalContent() { + return await this.done(), z(this, bs, "m", $w).call(this); + } + /** + * @returns a promise that resolves with the the final assistant ChatCompletionMessage response, + * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage. + */ + async finalMessage() { + return await this.done(), z(this, bs, "m", ty).call(this); + } + /** + * @returns a promise that resolves with the content of the final FunctionCall, or rejects + * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage. + */ + async finalFunctionToolCall() { + return await this.done(), z(this, bs, "m", Rw).call(this); + } + async finalFunctionToolCallResult() { + return await this.done(), z(this, bs, "m", Iw).call(this); + } + async totalUsage() { + return await this.done(), z(this, bs, "m", Ow).call(this); + } + allChatCompletions() { + return [...this._chatCompletions]; + } + _emitFinal() { + const t = this._chatCompletions[this._chatCompletions.length - 1]; + t && this._emit("finalChatCompletion", t); + const e = z(this, bs, "m", ty).call(this); + e && this._emit("finalMessage", e); + const s = z(this, bs, "m", $w).call(this); + s && this._emit("finalContent", s); + const r = z(this, bs, "m", Rw).call(this); + r && this._emit("finalFunctionToolCall", r); + const i = z(this, bs, "m", Iw).call(this); + i != null && this._emit("finalFunctionToolCallResult", i), this._chatCompletions.some((a) => a.usage) && this._emit("totalUsage", z(this, bs, "m", Ow).call(this)); + } + async _createChatCompletion(t, e, s) { + const r = s == null ? void 0 : s.signal; + r && (r.aborted && this.controller.abort(), r.addEventListener("abort", () => this.controller.abort())), z(this, bs, "m", fA).call(this, e); + const i = await t.chat.completions.create({ ...e, stream: !1 }, { ...s, signal: this.controller.signal }); + return this._connected(), this._addChatCompletion(TC(i, e)); + } + async _runChatCompletion(t, e, s) { + for (const r of e.messages) + this._addMessage(r, !1); + return await this._createChatCompletion(t, e, s); + } + async _runTools(t, e, s) { + var y, v, b; + const r = "tool", { tool_choice: i = "auto", stream: a, ...o } = e, c = typeof i != "string" && i.type === "function" && ((y = i == null ? void 0 : i.function) == null ? void 0 : y.name), { maxChatCompletions: u = Fq } = s || {}, f = e.tools.map((w) => { + if (Op(w)) { + if (!w.$callback) + throw new De("Tool given to `.runTools()` that does not have an associated function"); + return { + type: "function", + function: { + function: w.$callback, + name: w.function.name, + description: w.function.description || "", + parameters: w.function.parameters, + parse: w.$parseRaw, + strict: !0 + } + }; + } + return w; + }), p = {}; + for (const w of f) + w.type === "function" && (p[w.function.name || w.function.function.name] = w.function); + const g = "tools" in e ? f.map((w) => w.type === "function" ? { + type: "function", + function: { + name: w.function.name || w.function.function.name, + parameters: w.function.parameters, + description: w.function.description, + strict: w.function.strict + } + } : w) : void 0; + for (const w of e.messages) + this._addMessage(w, !1); + for (let w = 0; w < u; ++w) { + const x = (v = (await this._createChatCompletion(t, { + ...o, + tool_choice: i, + tools: g, + messages: [...this.messages] + }, s)).choices[0]) == null ? void 0 : v.message; + if (!x) + throw new De("missing message in ChatCompletion response"); + if (!((b = x.tool_calls) != null && b.length)) + return; + for (const C of x.tool_calls) { + if (C.type !== "function") + continue; + const _ = C.id, { name: k, arguments: A } = C.function, T = p[k]; + if (T) { + if (c && c !== k) { + const V = `Invalid tool_call: ${JSON.stringify(k)}. ${JSON.stringify(c)} requested. Please try again`; + this._addMessage({ role: r, tool_call_id: _, content: V }); + continue; + } + } else { + const V = `Invalid tool_call: ${JSON.stringify(k)}. Available options are: ${Object.keys(p).map((j) => JSON.stringify(j)).join(", ")}. Please try again`; + this._addMessage({ role: r, tool_call_id: _, content: V }); + continue; + } + let N; + try { + N = jq(T) ? await T.parse(A) : A; + } catch (V) { + const j = V instanceof Error ? V.message : String(V); + this._addMessage({ role: r, tool_call_id: _, content: j }); + continue; + } + const $ = await T.function(N, this), D = z(this, bs, "m", pA).call(this, $); + if (this._addMessage({ role: r, tool_call_id: _, content: D }), c) + return; + } + } + } +} +bs = /* @__PURE__ */ new WeakSet(), $w = function() { + return z(this, bs, "m", ty).call(this).content ?? null; +}, ty = function() { + let t = this.messages.length; + for (; t-- > 0; ) { + const e = this.messages[t]; + if (Qg(e)) + return { + ...e, + content: e.content ?? null, + refusal: e.refusal ?? null + }; + } + throw new De("stream ended without producing a ChatCompletionMessage with role=assistant"); +}, Rw = function() { + var t, e; + for (let s = this.messages.length - 1; s >= 0; s--) { + const r = this.messages[s]; + if (Qg(r) && ((t = r == null ? void 0 : r.tool_calls) != null && t.length)) + return (e = r.tool_calls.filter((i) => i.type === "function").at(-1)) == null ? void 0 : e.function; + } +}, Iw = function() { + for (let t = this.messages.length - 1; t >= 0; t--) { + const e = this.messages[t]; + if (dA(e) && e.content != null && typeof e.content == "string" && this.messages.some((s) => { + var r; + return s.role === "assistant" && ((r = s.tool_calls) == null ? void 0 : r.some((i) => i.type === "function" && i.id === e.tool_call_id)); + })) + return e.content; + } +}, Ow = function() { + const t = { + completion_tokens: 0, + prompt_tokens: 0, + total_tokens: 0 + }; + for (const { usage: e } of this._chatCompletions) + e && (t.completion_tokens += e.completion_tokens, t.prompt_tokens += e.prompt_tokens, t.total_tokens += e.total_tokens); + return t; +}, fA = function(t) { + if (t.n != null && t.n > 1) + throw new De("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly."); +}, pA = function(t) { + return typeof t == "string" ? t : t === void 0 ? "undefined" : JSON.stringify(t); +}; +class PC extends mA { + static runTools(t, e, s) { + const r = new PC(), i = { + ...s, + headers: { ...s == null ? void 0 : s.headers, "X-Stainless-Helper-Method": "runTools" } + }; + return r._run(() => r._runTools(t, e, i)), r; + } + _addMessage(t, e = !0) { + super._addMessage(t, e), Qg(t) && t.content && this._emit("content", t.content); + } +} +const gA = 1, yA = 2, vA = 4, bA = 8, wA = 16, xA = 32, CA = 64, _A = 128, SA = 256, EA = _A | SA, kA = wA | xA | EA | CA, TA = gA | yA | kA, AA = vA | bA, Vq = TA | AA, Kn = { + STR: gA, + NUM: yA, + ARR: vA, + OBJ: bA, + NULL: wA, + BOOL: xA, + NAN: CA, + INFINITY: _A, + MINUS_INFINITY: SA, + INF: EA, + SPECIAL: kA, + ATOM: TA, + COLLECTION: AA, + ALL: Vq +}; +class Bq extends Error { +} +class Uq extends Error { +} +function qq(n, t = Kn.ALL) { + if (typeof n != "string") + throw new TypeError(`expecting str, got ${typeof n}`); + if (!n.trim()) + throw new Error(`${n} is empty`); + return zq(n.trim(), t); +} +const zq = (n, t) => { + const e = n.length; + let s = 0; + const r = (g) => { + throw new Bq(`${g} at position ${s}`); + }, i = (g) => { + throw new Uq(`${g} at position ${s}`); + }, a = () => (p(), s >= e && r("Unexpected end of input"), n[s] === '"' ? o() : n[s] === "{" ? c() : n[s] === "[" ? u() : n.substring(s, s + 4) === "null" || Kn.NULL & t && e - s < 4 && "null".startsWith(n.substring(s)) ? (s += 4, null) : n.substring(s, s + 4) === "true" || Kn.BOOL & t && e - s < 4 && "true".startsWith(n.substring(s)) ? (s += 4, !0) : n.substring(s, s + 5) === "false" || Kn.BOOL & t && e - s < 5 && "false".startsWith(n.substring(s)) ? (s += 5, !1) : n.substring(s, s + 8) === "Infinity" || Kn.INFINITY & t && e - s < 8 && "Infinity".startsWith(n.substring(s)) ? (s += 8, 1 / 0) : n.substring(s, s + 9) === "-Infinity" || Kn.MINUS_INFINITY & t && 1 < e - s && e - s < 9 && "-Infinity".startsWith(n.substring(s)) ? (s += 9, -1 / 0) : n.substring(s, s + 3) === "NaN" || Kn.NAN & t && e - s < 3 && "NaN".startsWith(n.substring(s)) ? (s += 3, NaN) : f()), o = () => { + const g = s; + let y = !1; + for (s++; s < e && (n[s] !== '"' || y && n[s - 1] === "\\"); ) + y = n[s] === "\\" ? !y : !1, s++; + if (n.charAt(s) == '"') + try { + return JSON.parse(n.substring(g, ++s - Number(y))); + } catch (v) { + i(String(v)); + } + else if (Kn.STR & t) + try { + return JSON.parse(n.substring(g, s - Number(y)) + '"'); + } catch { + return JSON.parse(n.substring(g, n.lastIndexOf("\\")) + '"'); + } + r("Unterminated string literal"); + }, c = () => { + s++, p(); + const g = {}; + try { + for (; n[s] !== "}"; ) { + if (p(), s >= e && Kn.OBJ & t) + return g; + const y = o(); + p(), s++; + try { + const v = a(); + Object.defineProperty(g, y, { value: v, writable: !0, enumerable: !0, configurable: !0 }); + } catch (v) { + if (Kn.OBJ & t) + return g; + throw v; + } + p(), n[s] === "," && s++; + } + } catch { + if (Kn.OBJ & t) + return g; + r("Expected '}' at end of object"); + } + return s++, g; + }, u = () => { + s++; + const g = []; + try { + for (; n[s] !== "]"; ) + g.push(a()), p(), n[s] === "," && s++; + } catch { + if (Kn.ARR & t) + return g; + r("Expected ']' at end of array"); + } + return s++, g; + }, f = () => { + if (s === 0) { + n === "-" && Kn.NUM & t && r("Not sure what '-' is"); + try { + return JSON.parse(n); + } catch (y) { + if (Kn.NUM & t) + try { + return n[n.length - 1] === "." ? JSON.parse(n.substring(0, n.lastIndexOf("."))) : JSON.parse(n.substring(0, n.lastIndexOf("e"))); + } catch { + } + i(String(y)); + } + } + const g = s; + for (n[s] === "-" && s++; n[s] && !",]}".includes(n[s]); ) + s++; + s == e && !(Kn.NUM & t) && r("Unterminated number literal"); + try { + return JSON.parse(n.substring(g, s)); + } catch { + n.substring(g, s) === "-" && Kn.NUM & t && r("Not sure what '-' is"); + try { + return JSON.parse(n.substring(g, n.lastIndexOf("e"))); + } catch (v) { + i(String(v)); + } + } + }, p = () => { + for (; s < e && ` +\r `.includes(n[s]); ) + s++; + }; + return a(); +}, q6 = (n) => qq(n, Kn.ALL ^ Kn.NUM); +var Un, la, su, lo, wb, xm, xb, Cb, _b, Cm, Sb, z6; +class yf extends mA { + constructor(t) { + super(), Un.add(this), la.set(this, void 0), su.set(this, void 0), lo.set(this, void 0), tt(this, la, t), tt(this, su, []); + } + get currentChatCompletionSnapshot() { + return z(this, lo, "f"); + } + /** + * Intended for use on the frontend, consuming a stream produced with + * `.toReadableStream()` on the backend. + * + * Note that messages sent to the model do not appear in `.on('message')` + * in this context. + */ + static fromReadableStream(t) { + const e = new yf(null); + return e._run(() => e._fromReadableStream(t)), e; + } + static createChatCompletion(t, e, s) { + const r = new yf(e); + return r._run(() => r._runChatCompletion(t, { ...e, stream: !0 }, { ...s, headers: { ...s == null ? void 0 : s.headers, "X-Stainless-Helper-Method": "stream" } })), r; + } + async _createChatCompletion(t, e, s) { + var a; + super._createChatCompletion; + const r = s == null ? void 0 : s.signal; + r && (r.aborted && this.controller.abort(), r.addEventListener("abort", () => this.controller.abort())), z(this, Un, "m", wb).call(this); + const i = await t.chat.completions.create({ ...e, stream: !0 }, { ...s, signal: this.controller.signal }); + this._connected(); + for await (const o of i) + z(this, Un, "m", xb).call(this, o); + if ((a = i.controller.signal) != null && a.aborted) + throw new Sr(); + return this._addChatCompletion(z(this, Un, "m", Cm).call(this)); + } + async _fromReadableStream(t, e) { + var a; + const s = e == null ? void 0 : e.signal; + s && (s.aborted && this.controller.abort(), s.addEventListener("abort", () => this.controller.abort())), z(this, Un, "m", wb).call(this), this._connected(); + const r = Ii.fromReadableStream(t, this.controller); + let i; + for await (const o of r) + i && i !== o.id && this._addChatCompletion(z(this, Un, "m", Cm).call(this)), z(this, Un, "m", xb).call(this, o), i = o.id; + if ((a = r.controller.signal) != null && a.aborted) + throw new Sr(); + return this._addChatCompletion(z(this, Un, "m", Cm).call(this)); + } + [(la = /* @__PURE__ */ new WeakMap(), su = /* @__PURE__ */ new WeakMap(), lo = /* @__PURE__ */ new WeakMap(), Un = /* @__PURE__ */ new WeakSet(), wb = function() { + this.ended || tt(this, lo, void 0); + }, xm = function(e) { + let s = z(this, su, "f")[e.index]; + return s || (s = { + content_done: !1, + refusal_done: !1, + logprobs_content_done: !1, + logprobs_refusal_done: !1, + done_tool_calls: /* @__PURE__ */ new Set(), + current_tool_call_index: null + }, z(this, su, "f")[e.index] = s, s); + }, xb = function(e) { + var r, i, a, o, c, u, f, p, g, y, v, b, w, E, x; + if (this.ended) + return; + const s = z(this, Un, "m", z6).call(this, e); + this._emit("chunk", e, s); + for (const C of e.choices) { + const _ = s.choices[C.index]; + C.delta.content != null && ((r = _.message) == null ? void 0 : r.role) === "assistant" && ((i = _.message) != null && i.content) && (this._emit("content", C.delta.content, _.message.content), this._emit("content.delta", { + delta: C.delta.content, + snapshot: _.message.content, + parsed: _.message.parsed + })), C.delta.refusal != null && ((a = _.message) == null ? void 0 : a.role) === "assistant" && ((o = _.message) != null && o.refusal) && this._emit("refusal.delta", { + delta: C.delta.refusal, + snapshot: _.message.refusal + }), ((c = C.logprobs) == null ? void 0 : c.content) != null && ((u = _.message) == null ? void 0 : u.role) === "assistant" && this._emit("logprobs.content.delta", { + content: (f = C.logprobs) == null ? void 0 : f.content, + snapshot: ((p = _.logprobs) == null ? void 0 : p.content) ?? [] + }), ((g = C.logprobs) == null ? void 0 : g.refusal) != null && ((y = _.message) == null ? void 0 : y.role) === "assistant" && this._emit("logprobs.refusal.delta", { + refusal: (v = C.logprobs) == null ? void 0 : v.refusal, + snapshot: ((b = _.logprobs) == null ? void 0 : b.refusal) ?? [] + }); + const k = z(this, Un, "m", xm).call(this, _); + _.finish_reason && (z(this, Un, "m", _b).call(this, _), k.current_tool_call_index != null && z(this, Un, "m", Cb).call(this, _, k.current_tool_call_index)); + for (const A of C.delta.tool_calls ?? []) + k.current_tool_call_index !== A.index && (z(this, Un, "m", _b).call(this, _), k.current_tool_call_index != null && z(this, Un, "m", Cb).call(this, _, k.current_tool_call_index)), k.current_tool_call_index = A.index; + for (const A of C.delta.tool_calls ?? []) { + const T = (w = _.message.tool_calls) == null ? void 0 : w[A.index]; + T != null && T.type && ((T == null ? void 0 : T.type) === "function" ? this._emit("tool_calls.function.arguments.delta", { + name: (E = T.function) == null ? void 0 : E.name, + index: A.index, + arguments: T.function.arguments, + parsed_arguments: T.function.parsed_arguments, + arguments_delta: ((x = A.function) == null ? void 0 : x.arguments) ?? "" + }) : (T == null || T.type, void 0)); + } + } + }, Cb = function(e, s) { + var a, o, c; + if (z(this, Un, "m", xm).call(this, e).done_tool_calls.has(s)) + return; + const i = (a = e.message.tool_calls) == null ? void 0 : a[s]; + if (!i) + throw new Error("no tool call snapshot"); + if (!i.type) + throw new Error("tool call snapshot missing `type`"); + if (i.type === "function") { + const u = (c = (o = z(this, la, "f")) == null ? void 0 : o.tools) == null ? void 0 : c.find((f) => Xg(f) && f.function.name === i.function.name); + this._emit("tool_calls.function.arguments.done", { + name: i.function.name, + index: s, + arguments: i.function.arguments, + parsed_arguments: Op(u) ? u.$parseRaw(i.function.arguments) : u != null && u.function.strict ? JSON.parse(i.function.arguments) : null + }); + } else + i.type; + }, _b = function(e) { + var r, i; + const s = z(this, Un, "m", xm).call(this, e); + if (e.message.content && !s.content_done) { + s.content_done = !0; + const a = z(this, Un, "m", Sb).call(this); + this._emit("content.done", { + content: e.message.content, + parsed: a ? a.$parseRaw(e.message.content) : null + }); + } + e.message.refusal && !s.refusal_done && (s.refusal_done = !0, this._emit("refusal.done", { refusal: e.message.refusal })), (r = e.logprobs) != null && r.content && !s.logprobs_content_done && (s.logprobs_content_done = !0, this._emit("logprobs.content.done", { content: e.logprobs.content })), (i = e.logprobs) != null && i.refusal && !s.logprobs_refusal_done && (s.logprobs_refusal_done = !0, this._emit("logprobs.refusal.done", { refusal: e.logprobs.refusal })); + }, Cm = function() { + if (this.ended) + throw new De("stream has ended, this shouldn't happen"); + const e = z(this, lo, "f"); + if (!e) + throw new De("request ended without sending any chunks"); + return tt(this, lo, void 0), tt(this, su, []), Hq(e, z(this, la, "f")); + }, Sb = function() { + var s; + const e = (s = z(this, la, "f")) == null ? void 0 : s.response_format; + return kC(e) ? e : null; + }, z6 = function(e) { + var s, r, i, a; + let o = z(this, lo, "f"); + const { choices: c, ...u } = e; + o ? Object.assign(o, u) : o = tt(this, lo, { + ...u, + choices: [] + }); + for (const { delta: f, finish_reason: p, index: g, logprobs: y = null, ...v } of e.choices) { + let b = o.choices[g]; + if (b || (b = o.choices[g] = { finish_reason: p, index: g, message: {}, logprobs: y, ...v }), y) + if (!b.logprobs) + b.logprobs = Object.assign({}, y); + else { + const { content: A, refusal: T, ...N } = y; + Object.assign(b.logprobs, N), A && ((s = b.logprobs).content ?? (s.content = []), b.logprobs.content.push(...A)), T && ((r = b.logprobs).refusal ?? (r.refusal = []), b.logprobs.refusal.push(...T)); + } + if (p && (b.finish_reason = p, z(this, la, "f") && cA(z(this, la, "f")))) { + if (p === "length") + throw new zT(); + if (p === "content_filter") + throw new HT(); + } + if (Object.assign(b, v), !f) + continue; + const { content: w, refusal: E, function_call: x, role: C, tool_calls: _, ...k } = f; + if (Object.assign(b.message, k), E && (b.message.refusal = (b.message.refusal || "") + E), C && (b.message.role = C), x && (b.message.function_call ? (x.name && (b.message.function_call.name = x.name), x.arguments && ((i = b.message.function_call).arguments ?? (i.arguments = ""), b.message.function_call.arguments += x.arguments)) : b.message.function_call = x), w && (b.message.content = (b.message.content || "") + w, !b.message.refusal && z(this, Un, "m", Sb).call(this) && (b.message.parsed = q6(b.message.content))), _) { + b.message.tool_calls || (b.message.tool_calls = []); + for (const { index: A, id: T, type: N, function: $, ...D } of _) { + const V = (a = b.message.tool_calls)[A] ?? (a[A] = {}); + Object.assign(V, D), T && (V.id = T), N && (V.type = N), $ && (V.function ?? (V.function = { name: $.name ?? "", arguments: "" })), $ != null && $.name && (V.function.name = $.name), $ != null && $.arguments && (V.function.arguments += $.arguments, Dq(z(this, la, "f"), V) && (V.function.parsed_arguments = q6(V.function.arguments))); + } + } + } + return o; + }, Symbol.asyncIterator)]() { + const t = [], e = []; + let s = !1; + return this.on("chunk", (r) => { + const i = e.shift(); + i ? i.resolve(r) : t.push(r); + }), this.on("end", () => { + s = !0; + for (const r of e) + r.resolve(void 0); + e.length = 0; + }), this.on("abort", (r) => { + s = !0; + for (const i of e) + i.reject(r); + e.length = 0; + }), this.on("error", (r) => { + s = !0; + for (const i of e) + i.reject(r); + e.length = 0; + }), { + next: async () => t.length ? { value: t.shift(), done: !1 } : s ? { value: void 0, done: !0 } : new Promise((i, a) => e.push({ resolve: i, reject: a })).then((i) => i ? { value: i, done: !1 } : { value: void 0, done: !0 }), + return: async () => (this.abort(), { value: void 0, done: !0 }) + }; + } + toReadableStream() { + return new Ii(this[Symbol.asyncIterator].bind(this), this.controller).toReadableStream(); + } +} +function Hq(n, t) { + const { id: e, choices: s, created: r, model: i, system_fingerprint: a, ...o } = n, c = { + ...o, + id: e, + choices: s.map(({ message: u, finish_reason: f, index: p, logprobs: g, ...y }) => { + if (!f) + throw new De(`missing finish_reason for choice ${p}`); + const { content: v = null, function_call: b, tool_calls: w, ...E } = u, x = u.role; + if (!x) + throw new De(`missing role for choice ${p}`); + if (b) { + const { arguments: C, name: _ } = b; + if (C == null) + throw new De(`missing function_call.arguments for choice ${p}`); + if (!_) + throw new De(`missing function_call.name for choice ${p}`); + return { + ...y, + message: { + content: v, + function_call: { arguments: C, name: _ }, + role: x, + refusal: u.refusal ?? null + }, + finish_reason: f, + index: p, + logprobs: g + }; + } + return w ? { + ...y, + index: p, + finish_reason: f, + logprobs: g, + message: { + ...E, + role: x, + content: v, + refusal: u.refusal ?? null, + tool_calls: w.map((C, _) => { + const { function: k, type: A, id: T, ...N } = C, { arguments: $, name: D, ...V } = k || {}; + if (T == null) + throw new De(`missing choices[${p}].tool_calls[${_}].id +${_m(n)}`); + if (A == null) + throw new De(`missing choices[${p}].tool_calls[${_}].type +${_m(n)}`); + if (D == null) + throw new De(`missing choices[${p}].tool_calls[${_}].function.name +${_m(n)}`); + if ($ == null) + throw new De(`missing choices[${p}].tool_calls[${_}].function.arguments +${_m(n)}`); + return { ...N, id: T, type: A, function: { ...V, name: D, arguments: $ } }; + }) + } + } : { + ...y, + message: { ...E, content: v, role: x, refusal: u.refusal ?? null }, + finish_reason: f, + index: p, + logprobs: g + }; + }), + created: r, + model: i, + object: "chat.completion", + ...a ? { system_fingerprint: a } : {} + }; + return Iq(c, t); +} +function _m(n) { + return JSON.stringify(n); +} +class ny extends yf { + static fromReadableStream(t) { + const e = new ny(null); + return e._run(() => e._fromReadableStream(t)), e; + } + static runTools(t, e, s) { + const r = new ny( + // @ts-expect-error TODO these types are incompatible + e + ), i = { + ...s, + headers: { ...s == null ? void 0 : s.headers, "X-Stainless-Helper-Method": "runTools" } + }; + return r._run(() => r._runTools(t, e, i)), r; + } +} +let NC = class extends Ie { + constructor() { + super(...arguments), this.messages = new lA(this._client); + } + create(t, e) { + return this._client.post("/chat/completions", { body: t, ...e, stream: t.stream ?? !1 }); + } + /** + * Get a stored chat completion. Only Chat Completions that have been created with + * the `store` parameter set to `true` will be returned. + * + * @example + * ```ts + * const chatCompletion = + * await client.chat.completions.retrieve('completion_id'); + * ``` + */ + retrieve(t, e) { + return this._client.get(oe`/chat/completions/${t}`, e); + } + /** + * Modify a stored chat completion. Only Chat Completions that have been created + * with the `store` parameter set to `true` can be modified. Currently, the only + * supported modification is to update the `metadata` field. + * + * @example + * ```ts + * const chatCompletion = await client.chat.completions.update( + * 'completion_id', + * { metadata: { foo: 'string' } }, + * ); + * ``` + */ + update(t, e, s) { + return this._client.post(oe`/chat/completions/${t}`, { body: e, ...s }); + } + /** + * List stored Chat Completions. Only Chat Completions that have been stored with + * the `store` parameter set to `true` will be returned. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const chatCompletion of client.chat.completions.list()) { + * // ... + * } + * ``` + */ + list(t = {}, e) { + return this._client.getAPIList("/chat/completions", Fn, { query: t, ...e }); + } + /** + * Delete a stored chat completion. Only Chat Completions that have been created + * with the `store` parameter set to `true` can be deleted. + * + * @example + * ```ts + * const chatCompletionDeleted = + * await client.chat.completions.delete('completion_id'); + * ``` + */ + delete(t, e) { + return this._client.delete(oe`/chat/completions/${t}`, e); + } + parse(t, e) { + return Lq(t.tools), this._client.chat.completions.create(t, { + ...e, + headers: { + ...e == null ? void 0 : e.headers, + "X-Stainless-Helper-Method": "chat.completions.parse" + } + })._thenUnwrap((s) => TC(s, t)); + } + runTools(t, e) { + return t.stream ? ny.runTools(this._client, t, e) : PC.runTools(this._client, t, e); + } + /** + * Creates a chat completion stream + */ + stream(t, e) { + return yf.createChatCompletion(this._client, t, e); + } +}; +NC.Messages = lA; +class $C extends Ie { + constructor() { + super(...arguments), this.completions = new NC(this._client); + } +} +$C.Completions = NC; +const PA = /* @__PURE__ */ Symbol("brand.privateNullableHeaders"); +function* Wq(n) { + if (!n) + return; + if (PA in n) { + const { values: s, nulls: r } = n; + yield* s.entries(); + for (const i of r) + yield [i, null]; + return; + } + let t = !1, e; + n instanceof Headers ? e = n.entries() : A6(n) ? e = n : (t = !0, e = Object.entries(n ?? {})); + for (let s of e) { + const r = s[0]; + if (typeof r != "string") + throw new TypeError("expected header name to be a string"); + const i = A6(s[1]) ? s[1] : [s[1]]; + let a = !1; + for (const o of i) + o !== void 0 && (t && !a && (a = !0, yield [r, null]), yield [r, o]); + } +} +const ke = (n) => { + const t = new Headers(), e = /* @__PURE__ */ new Set(); + for (const s of n) { + const r = /* @__PURE__ */ new Set(); + for (const [i, a] of Wq(s)) { + const o = i.toLowerCase(); + r.has(o) || (t.delete(i), r.add(o)), a === null ? (t.delete(i), e.add(o)) : (t.append(i, a), e.delete(o)); + } + } + return { [PA]: !0, values: t, nulls: e }; +}; +class NA extends Ie { + /** + * Generates audio from the input text. + * + * @example + * ```ts + * const speech = await client.audio.speech.create({ + * input: 'input', + * model: 'string', + * voice: 'ash', + * }); + * + * const content = await speech.blob(); + * console.log(content); + * ``` + */ + create(t, e) { + return this._client.post("/audio/speech", { + body: t, + ...e, + headers: ke([{ Accept: "application/octet-stream" }, e == null ? void 0 : e.headers]), + __binaryResponse: !0 + }); + } +} +class $A extends Ie { + create(t, e) { + return this._client.post("/audio/transcriptions", Oc({ + body: t, + ...e, + stream: t.stream ?? !1, + __metadata: { model: t.model } + }, this._client)); + } +} +class RA extends Ie { + create(t, e) { + return this._client.post("/audio/translations", Oc({ body: t, ...e, __metadata: { model: t.model } }, this._client)); + } +} +class Mp extends Ie { + constructor() { + super(...arguments), this.transcriptions = new $A(this._client), this.translations = new RA(this._client), this.speech = new NA(this._client); + } +} +Mp.Transcriptions = $A; +Mp.Translations = RA; +Mp.Speech = NA; +class IA extends Ie { + /** + * Creates and executes a batch from an uploaded file of requests + */ + create(t, e) { + return this._client.post("/batches", { body: t, ...e }); + } + /** + * Retrieves a batch. + */ + retrieve(t, e) { + return this._client.get(oe`/batches/${t}`, e); + } + /** + * List your organization's batches. + */ + list(t = {}, e) { + return this._client.getAPIList("/batches", Fn, { query: t, ...e }); + } + /** + * Cancels an in-progress batch. The batch will be in status `cancelling` for up to + * 10 minutes, before changing to `cancelled`, where it will have partial results + * (if any) available in the output file. + */ + cancel(t, e) { + return this._client.post(oe`/batches/${t}/cancel`, e); + } +} +class OA extends Ie { + /** + * Create an assistant with a model and instructions. + * + * @example + * ```ts + * const assistant = await client.beta.assistants.create({ + * model: 'gpt-4o', + * }); + * ``` + */ + create(t, e) { + return this._client.post("/assistants", { + body: t, + ...e, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, e == null ? void 0 : e.headers]) + }); + } + /** + * Retrieves an assistant. + * + * @example + * ```ts + * const assistant = await client.beta.assistants.retrieve( + * 'assistant_id', + * ); + * ``` + */ + retrieve(t, e) { + return this._client.get(oe`/assistants/${t}`, { + ...e, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, e == null ? void 0 : e.headers]) + }); + } + /** + * Modifies an assistant. + * + * @example + * ```ts + * const assistant = await client.beta.assistants.update( + * 'assistant_id', + * ); + * ``` + */ + update(t, e, s) { + return this._client.post(oe`/assistants/${t}`, { + body: e, + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Returns a list of assistants. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const assistant of client.beta.assistants.list()) { + * // ... + * } + * ``` + */ + list(t = {}, e) { + return this._client.getAPIList("/assistants", Fn, { + query: t, + ...e, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, e == null ? void 0 : e.headers]) + }); + } + /** + * Delete an assistant. + * + * @example + * ```ts + * const assistantDeleted = + * await client.beta.assistants.delete('assistant_id'); + * ``` + */ + delete(t, e) { + return this._client.delete(oe`/assistants/${t}`, { + ...e, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, e == null ? void 0 : e.headers]) + }); + } +} +let MA = class extends Ie { + /** + * Create an ephemeral API token for use in client-side applications with the + * Realtime API. Can be configured with the same session parameters as the + * `session.update` client event. + * + * It responds with a session object, plus a `client_secret` key which contains a + * usable ephemeral API token that can be used to authenticate browser clients for + * the Realtime API. + * + * @example + * ```ts + * const session = + * await client.beta.realtime.sessions.create(); + * ``` + */ + create(t, e) { + return this._client.post("/realtime/sessions", { + body: t, + ...e, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, e == null ? void 0 : e.headers]) + }); + } +}; +class DA extends Ie { + /** + * Create an ephemeral API token for use in client-side applications with the + * Realtime API specifically for realtime transcriptions. Can be configured with + * the same session parameters as the `transcription_session.update` client event. + * + * It responds with a session object, plus a `client_secret` key which contains a + * usable ephemeral API token that can be used to authenticate browser clients for + * the Realtime API. + * + * @example + * ```ts + * const transcriptionSession = + * await client.beta.realtime.transcriptionSessions.create(); + * ``` + */ + create(t, e) { + return this._client.post("/realtime/transcription_sessions", { + body: t, + ...e, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, e == null ? void 0 : e.headers]) + }); + } +} +let pv = class extends Ie { + constructor() { + super(...arguments), this.sessions = new MA(this._client), this.transcriptionSessions = new DA(this._client); + } +}; +pv.Sessions = MA; +pv.TranscriptionSessions = DA; +class LA extends Ie { + /** + * Create a ChatKit session + * + * @example + * ```ts + * const chatSession = + * await client.beta.chatkit.sessions.create({ + * user: 'x', + * workflow: { id: 'id' }, + * }); + * ``` + */ + create(t, e) { + return this._client.post("/chatkit/sessions", { + body: t, + ...e, + headers: ke([{ "OpenAI-Beta": "chatkit_beta=v1" }, e == null ? void 0 : e.headers]) + }); + } + /** + * Cancel a ChatKit session + * + * @example + * ```ts + * const chatSession = + * await client.beta.chatkit.sessions.cancel('cksess_123'); + * ``` + */ + cancel(t, e) { + return this._client.post(oe`/chatkit/sessions/${t}/cancel`, { + ...e, + headers: ke([{ "OpenAI-Beta": "chatkit_beta=v1" }, e == null ? void 0 : e.headers]) + }); + } +} +let jA = class extends Ie { + /** + * Retrieve a ChatKit thread + * + * @example + * ```ts + * const chatkitThread = + * await client.beta.chatkit.threads.retrieve('cthr_123'); + * ``` + */ + retrieve(t, e) { + return this._client.get(oe`/chatkit/threads/${t}`, { + ...e, + headers: ke([{ "OpenAI-Beta": "chatkit_beta=v1" }, e == null ? void 0 : e.headers]) + }); + } + /** + * List ChatKit threads + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const chatkitThread of client.beta.chatkit.threads.list()) { + * // ... + * } + * ``` + */ + list(t = {}, e) { + return this._client.getAPIList("/chatkit/threads", Zg, { + query: t, + ...e, + headers: ke([{ "OpenAI-Beta": "chatkit_beta=v1" }, e == null ? void 0 : e.headers]) + }); + } + /** + * Delete a ChatKit thread + * + * @example + * ```ts + * const thread = await client.beta.chatkit.threads.delete( + * 'cthr_123', + * ); + * ``` + */ + delete(t, e) { + return this._client.delete(oe`/chatkit/threads/${t}`, { + ...e, + headers: ke([{ "OpenAI-Beta": "chatkit_beta=v1" }, e == null ? void 0 : e.headers]) + }); + } + /** + * List ChatKit thread items + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const thread of client.beta.chatkit.threads.listItems( + * 'cthr_123', + * )) { + * // ... + * } + * ``` + */ + listItems(t, e = {}, s) { + return this._client.getAPIList(oe`/chatkit/threads/${t}/items`, Zg, { query: e, ...s, headers: ke([{ "OpenAI-Beta": "chatkit_beta=v1" }, s == null ? void 0 : s.headers]) }); + } +}; +class mv extends Ie { + constructor() { + super(...arguments), this.sessions = new LA(this._client), this.threads = new jA(this._client); + } +} +mv.Sessions = LA; +mv.Threads = jA; +class FA extends Ie { + /** + * Create a message. + * + * @deprecated The Assistants API is deprecated in favor of the Responses API + */ + create(t, e, s) { + return this._client.post(oe`/threads/${t}/messages`, { + body: e, + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Retrieve a message. + * + * @deprecated The Assistants API is deprecated in favor of the Responses API + */ + retrieve(t, e, s) { + const { thread_id: r } = e; + return this._client.get(oe`/threads/${r}/messages/${t}`, { + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Modifies a message. + * + * @deprecated The Assistants API is deprecated in favor of the Responses API + */ + update(t, e, s) { + const { thread_id: r, ...i } = e; + return this._client.post(oe`/threads/${r}/messages/${t}`, { + body: i, + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Returns a list of messages for a given thread. + * + * @deprecated The Assistants API is deprecated in favor of the Responses API + */ + list(t, e = {}, s) { + return this._client.getAPIList(oe`/threads/${t}/messages`, Fn, { + query: e, + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Deletes a message. + * + * @deprecated The Assistants API is deprecated in favor of the Responses API + */ + delete(t, e, s) { + const { thread_id: r } = e; + return this._client.delete(oe`/threads/${r}/messages/${t}`, { + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } +} +let VA = class extends Ie { + /** + * Retrieves a run step. + * + * @deprecated The Assistants API is deprecated in favor of the Responses API + */ + retrieve(t, e, s) { + const { thread_id: r, run_id: i, ...a } = e; + return this._client.get(oe`/threads/${r}/runs/${i}/steps/${t}`, { + query: a, + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Returns a list of run steps belonging to a run. + * + * @deprecated The Assistants API is deprecated in favor of the Responses API + */ + list(t, e, s) { + const { thread_id: r, ...i } = e; + return this._client.getAPIList(oe`/threads/${r}/runs/${t}/steps`, Fn, { + query: i, + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } +}; +const Gq = (n) => { + if (typeof Buffer < "u") { + const t = Buffer.from(n, "base64"); + return Array.from(new Float32Array(t.buffer, t.byteOffset, t.length / Float32Array.BYTES_PER_ELEMENT)); + } else { + const t = atob(n), e = t.length, s = new Uint8Array(e); + for (let r = 0; r < e; r++) + s[r] = t.charCodeAt(r); + return Array.from(new Float32Array(s.buffer)); + } +}, ru = (n) => { + var t, e, s, r, i; + if (typeof globalThis.process < "u") + return ((e = (t = globalThis.process.env) == null ? void 0 : t[n]) == null ? void 0 : e.trim()) ?? void 0; + if (typeof globalThis.Deno < "u") + return (i = (r = (s = globalThis.Deno.env) == null ? void 0 : s.get) == null ? void 0 : r.call(s, n)) == null ? void 0 : i.trim(); +}; +var os, Ml, Mw, vi, Ym, jr, Dl, yu, $l, sy, Zs, Km, Zm, sf, Uh, qh, H6, W6, G6, Y6, K6, Z6, X6; +class rf extends AC { + constructor() { + super(...arguments), os.add(this), Mw.set(this, []), vi.set(this, {}), Ym.set(this, {}), jr.set(this, void 0), Dl.set(this, void 0), yu.set(this, void 0), $l.set(this, void 0), sy.set(this, void 0), Zs.set(this, void 0), Km.set(this, void 0), Zm.set(this, void 0), sf.set(this, void 0); + } + [(Mw = /* @__PURE__ */ new WeakMap(), vi = /* @__PURE__ */ new WeakMap(), Ym = /* @__PURE__ */ new WeakMap(), jr = /* @__PURE__ */ new WeakMap(), Dl = /* @__PURE__ */ new WeakMap(), yu = /* @__PURE__ */ new WeakMap(), $l = /* @__PURE__ */ new WeakMap(), sy = /* @__PURE__ */ new WeakMap(), Zs = /* @__PURE__ */ new WeakMap(), Km = /* @__PURE__ */ new WeakMap(), Zm = /* @__PURE__ */ new WeakMap(), sf = /* @__PURE__ */ new WeakMap(), os = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { + const t = [], e = []; + let s = !1; + return this.on("event", (r) => { + const i = e.shift(); + i ? i.resolve(r) : t.push(r); + }), this.on("end", () => { + s = !0; + for (const r of e) + r.resolve(void 0); + e.length = 0; + }), this.on("abort", (r) => { + s = !0; + for (const i of e) + i.reject(r); + e.length = 0; + }), this.on("error", (r) => { + s = !0; + for (const i of e) + i.reject(r); + e.length = 0; + }), { + next: async () => t.length ? { value: t.shift(), done: !1 } : s ? { value: void 0, done: !0 } : new Promise((i, a) => e.push({ resolve: i, reject: a })).then((i) => i ? { value: i, done: !1 } : { value: void 0, done: !0 }), + return: async () => (this.abort(), { value: void 0, done: !0 }) + }; + } + static fromReadableStream(t) { + const e = new Ml(); + return e._run(() => e._fromReadableStream(t)), e; + } + async _fromReadableStream(t, e) { + var i; + const s = e == null ? void 0 : e.signal; + s && (s.aborted && this.controller.abort(), s.addEventListener("abort", () => this.controller.abort())), this._connected(); + const r = Ii.fromReadableStream(t, this.controller); + for await (const a of r) + z(this, os, "m", Uh).call(this, a); + if ((i = r.controller.signal) != null && i.aborted) + throw new Sr(); + return this._addRun(z(this, os, "m", qh).call(this)); + } + toReadableStream() { + return new Ii(this[Symbol.asyncIterator].bind(this), this.controller).toReadableStream(); + } + static createToolAssistantStream(t, e, s, r) { + const i = new Ml(); + return i._run(() => i._runToolAssistantStream(t, e, s, { + ...r, + headers: { ...r == null ? void 0 : r.headers, "X-Stainless-Helper-Method": "stream" } + })), i; + } + async _createToolAssistantStream(t, e, s, r) { + var c; + const i = r == null ? void 0 : r.signal; + i && (i.aborted && this.controller.abort(), i.addEventListener("abort", () => this.controller.abort())); + const a = { ...s, stream: !0 }, o = await t.submitToolOutputs(e, a, { + ...r, + signal: this.controller.signal + }); + this._connected(); + for await (const u of o) + z(this, os, "m", Uh).call(this, u); + if ((c = o.controller.signal) != null && c.aborted) + throw new Sr(); + return this._addRun(z(this, os, "m", qh).call(this)); + } + static createThreadAssistantStream(t, e, s) { + const r = new Ml(); + return r._run(() => r._threadAssistantStream(t, e, { + ...s, + headers: { ...s == null ? void 0 : s.headers, "X-Stainless-Helper-Method": "stream" } + })), r; + } + static createAssistantStream(t, e, s, r) { + const i = new Ml(); + return i._run(() => i._runAssistantStream(t, e, s, { + ...r, + headers: { ...r == null ? void 0 : r.headers, "X-Stainless-Helper-Method": "stream" } + })), i; + } + currentEvent() { + return z(this, Km, "f"); + } + currentRun() { + return z(this, Zm, "f"); + } + currentMessageSnapshot() { + return z(this, jr, "f"); + } + currentRunStepSnapshot() { + return z(this, sf, "f"); + } + async finalRunSteps() { + return await this.done(), Object.values(z(this, vi, "f")); + } + async finalMessages() { + return await this.done(), Object.values(z(this, Ym, "f")); + } + async finalRun() { + if (await this.done(), !z(this, Dl, "f")) + throw Error("Final run was not received."); + return z(this, Dl, "f"); + } + async _createThreadAssistantStream(t, e, s) { + var o; + const r = s == null ? void 0 : s.signal; + r && (r.aborted && this.controller.abort(), r.addEventListener("abort", () => this.controller.abort())); + const i = { ...e, stream: !0 }, a = await t.createAndRun(i, { ...s, signal: this.controller.signal }); + this._connected(); + for await (const c of a) + z(this, os, "m", Uh).call(this, c); + if ((o = a.controller.signal) != null && o.aborted) + throw new Sr(); + return this._addRun(z(this, os, "m", qh).call(this)); + } + async _createAssistantStream(t, e, s, r) { + var c; + const i = r == null ? void 0 : r.signal; + i && (i.aborted && this.controller.abort(), i.addEventListener("abort", () => this.controller.abort())); + const a = { ...s, stream: !0 }, o = await t.create(e, a, { ...r, signal: this.controller.signal }); + this._connected(); + for await (const u of o) + z(this, os, "m", Uh).call(this, u); + if ((c = o.controller.signal) != null && c.aborted) + throw new Sr(); + return this._addRun(z(this, os, "m", qh).call(this)); + } + static accumulateDelta(t, e) { + for (const [s, r] of Object.entries(e)) { + if (!t.hasOwnProperty(s)) { + t[s] = r; + continue; + } + let i = t[s]; + if (i == null) { + t[s] = r; + continue; + } + if (s === "index" || s === "type") { + t[s] = r; + continue; + } + if (typeof i == "string" && typeof r == "string") + i += r; + else if (typeof i == "number" && typeof r == "number") + i += r; + else if (yb(i) && yb(r)) + i = this.accumulateDelta(i, r); + else if (Array.isArray(i) && Array.isArray(r)) { + if (i.every((a) => typeof a == "string" || typeof a == "number")) { + i.push(...r); + continue; + } + for (const a of r) { + if (!yb(a)) + throw new Error(`Expected array delta entry to be an object but got: ${a}`); + const o = a.index; + if (o == null) + throw console.error(a), new Error("Expected array delta entry to have an `index` property"); + if (typeof o != "number") + throw new Error(`Expected array delta entry \`index\` property to be a number but got ${o}`); + const c = i[o]; + c == null ? i.push(a) : i[o] = this.accumulateDelta(c, a); + } + continue; + } else + throw Error(`Unhandled record type: ${s}, deltaValue: ${r}, accValue: ${i}`); + t[s] = i; + } + return t; + } + _addRun(t) { + return t; + } + async _threadAssistantStream(t, e, s) { + return await this._createThreadAssistantStream(e, t, s); + } + async _runAssistantStream(t, e, s, r) { + return await this._createAssistantStream(e, t, s, r); + } + async _runToolAssistantStream(t, e, s, r) { + return await this._createToolAssistantStream(e, t, s, r); + } +} +Ml = rf, Uh = function(t) { + if (!this.ended) + switch (tt(this, Km, t), z(this, os, "m", G6).call(this, t), t.event) { + case "thread.created": + break; + case "thread.run.created": + case "thread.run.queued": + case "thread.run.in_progress": + case "thread.run.requires_action": + case "thread.run.completed": + case "thread.run.incomplete": + case "thread.run.failed": + case "thread.run.cancelling": + case "thread.run.cancelled": + case "thread.run.expired": + z(this, os, "m", X6).call(this, t); + break; + case "thread.run.step.created": + case "thread.run.step.in_progress": + case "thread.run.step.delta": + case "thread.run.step.completed": + case "thread.run.step.failed": + case "thread.run.step.cancelled": + case "thread.run.step.expired": + z(this, os, "m", W6).call(this, t); + break; + case "thread.message.created": + case "thread.message.in_progress": + case "thread.message.delta": + case "thread.message.completed": + case "thread.message.incomplete": + z(this, os, "m", H6).call(this, t); + break; + case "error": + throw new Error("Encountered an error event in event processing - errors should be processed earlier"); + } +}, qh = function() { + if (this.ended) + throw new De("stream has ended, this shouldn't happen"); + if (!z(this, Dl, "f")) + throw Error("Final run has not been received"); + return z(this, Dl, "f"); +}, H6 = function(t) { + const [e, s] = z(this, os, "m", K6).call(this, t, z(this, jr, "f")); + tt(this, jr, e), z(this, Ym, "f")[e.id] = e; + for (const r of s) { + const i = e.content[r.index]; + (i == null ? void 0 : i.type) == "text" && this._emit("textCreated", i.text); + } + switch (t.event) { + case "thread.message.created": + this._emit("messageCreated", t.data); + break; + case "thread.message.in_progress": + break; + case "thread.message.delta": + if (this._emit("messageDelta", t.data.delta, e), t.data.delta.content) + for (const r of t.data.delta.content) { + if (r.type == "text" && r.text) { + let i = r.text, a = e.content[r.index]; + if (a && a.type == "text") + this._emit("textDelta", i, a.text); + else + throw Error("The snapshot associated with this text delta is not text or missing"); + } + if (r.index != z(this, yu, "f")) { + if (z(this, $l, "f")) + switch (z(this, $l, "f").type) { + case "text": + this._emit("textDone", z(this, $l, "f").text, z(this, jr, "f")); + break; + case "image_file": + this._emit("imageFileDone", z(this, $l, "f").image_file, z(this, jr, "f")); + break; + } + tt(this, yu, r.index); + } + tt(this, $l, e.content[r.index]); + } + break; + case "thread.message.completed": + case "thread.message.incomplete": + if (z(this, yu, "f") !== void 0) { + const r = t.data.content[z(this, yu, "f")]; + if (r) + switch (r.type) { + case "image_file": + this._emit("imageFileDone", r.image_file, z(this, jr, "f")); + break; + case "text": + this._emit("textDone", r.text, z(this, jr, "f")); + break; + } + } + z(this, jr, "f") && this._emit("messageDone", t.data), tt(this, jr, void 0); + } +}, W6 = function(t) { + const e = z(this, os, "m", Y6).call(this, t); + switch (tt(this, sf, e), t.event) { + case "thread.run.step.created": + this._emit("runStepCreated", t.data); + break; + case "thread.run.step.delta": + const s = t.data.delta; + if (s.step_details && s.step_details.type == "tool_calls" && s.step_details.tool_calls && e.step_details.type == "tool_calls") + for (const i of s.step_details.tool_calls) + i.index == z(this, sy, "f") ? this._emit("toolCallDelta", i, e.step_details.tool_calls[i.index]) : (z(this, Zs, "f") && this._emit("toolCallDone", z(this, Zs, "f")), tt(this, sy, i.index), tt(this, Zs, e.step_details.tool_calls[i.index]), z(this, Zs, "f") && this._emit("toolCallCreated", z(this, Zs, "f"))); + this._emit("runStepDelta", t.data.delta, e); + break; + case "thread.run.step.completed": + case "thread.run.step.failed": + case "thread.run.step.cancelled": + case "thread.run.step.expired": + tt(this, sf, void 0), t.data.step_details.type == "tool_calls" && z(this, Zs, "f") && (this._emit("toolCallDone", z(this, Zs, "f")), tt(this, Zs, void 0)), this._emit("runStepDone", t.data, e); + break; + } +}, G6 = function(t) { + z(this, Mw, "f").push(t), this._emit("event", t); +}, Y6 = function(t) { + switch (t.event) { + case "thread.run.step.created": + return z(this, vi, "f")[t.data.id] = t.data, t.data; + case "thread.run.step.delta": + let e = z(this, vi, "f")[t.data.id]; + if (!e) + throw Error("Received a RunStepDelta before creation of a snapshot"); + let s = t.data; + if (s.delta) { + const r = Ml.accumulateDelta(e, s.delta); + z(this, vi, "f")[t.data.id] = r; + } + return z(this, vi, "f")[t.data.id]; + case "thread.run.step.completed": + case "thread.run.step.failed": + case "thread.run.step.cancelled": + case "thread.run.step.expired": + case "thread.run.step.in_progress": + z(this, vi, "f")[t.data.id] = t.data; + break; + } + if (z(this, vi, "f")[t.data.id]) + return z(this, vi, "f")[t.data.id]; + throw new Error("No snapshot available"); +}, K6 = function(t, e) { + let s = []; + switch (t.event) { + case "thread.message.created": + return [t.data, s]; + case "thread.message.delta": + if (!e) + throw Error("Received a delta with no existing snapshot (there should be one from message creation)"); + let r = t.data; + if (r.delta.content) + for (const i of r.delta.content) + if (i.index in e.content) { + let a = e.content[i.index]; + e.content[i.index] = z(this, os, "m", Z6).call(this, i, a); + } else + e.content[i.index] = i, s.push(i); + return [e, s]; + case "thread.message.in_progress": + case "thread.message.completed": + case "thread.message.incomplete": + if (e) + return [e, s]; + throw Error("Received thread message event with no existing snapshot"); + } + throw Error("Tried to accumulate a non-message event"); +}, Z6 = function(t, e) { + return Ml.accumulateDelta(e, t); +}, X6 = function(t) { + switch (tt(this, Zm, t.data), t.event) { + case "thread.run.created": + break; + case "thread.run.queued": + break; + case "thread.run.in_progress": + break; + case "thread.run.requires_action": + case "thread.run.cancelled": + case "thread.run.failed": + case "thread.run.completed": + case "thread.run.expired": + case "thread.run.incomplete": + tt(this, Dl, t.data), z(this, Zs, "f") && (this._emit("toolCallDone", z(this, Zs, "f")), tt(this, Zs, void 0)); + break; + } +}; +let RC = class extends Ie { + constructor() { + super(...arguments), this.steps = new VA(this._client); + } + create(t, e, s) { + const { include: r, ...i } = e; + return this._client.post(oe`/threads/${t}/runs`, { + query: { include: r }, + body: i, + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]), + stream: e.stream ?? !1 + }); + } + /** + * Retrieves a run. + * + * @deprecated The Assistants API is deprecated in favor of the Responses API + */ + retrieve(t, e, s) { + const { thread_id: r } = e; + return this._client.get(oe`/threads/${r}/runs/${t}`, { + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Modifies a run. + * + * @deprecated The Assistants API is deprecated in favor of the Responses API + */ + update(t, e, s) { + const { thread_id: r, ...i } = e; + return this._client.post(oe`/threads/${r}/runs/${t}`, { + body: i, + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Returns a list of runs belonging to a thread. + * + * @deprecated The Assistants API is deprecated in favor of the Responses API + */ + list(t, e = {}, s) { + return this._client.getAPIList(oe`/threads/${t}/runs`, Fn, { + query: e, + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Cancels a run that is `in_progress`. + * + * @deprecated The Assistants API is deprecated in favor of the Responses API + */ + cancel(t, e, s) { + const { thread_id: r } = e; + return this._client.post(oe`/threads/${r}/runs/${t}/cancel`, { + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * A helper to create a run an poll for a terminal state. More information on Run + * lifecycles can be found here: + * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps + */ + async createAndPoll(t, e, s) { + const r = await this.create(t, e, s); + return await this.poll(r.id, { thread_id: t }, s); + } + /** + * Create a Run stream + * + * @deprecated use `stream` instead + */ + createAndStream(t, e, s) { + return rf.createAssistantStream(t, this._client.beta.threads.runs, e, s); + } + /** + * A helper to poll a run status until it reaches a terminal state. More + * information on Run lifecycles can be found here: + * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps + */ + async poll(t, e, s) { + var i; + const r = ke([ + s == null ? void 0 : s.headers, + { + "X-Stainless-Poll-Helper": "true", + "X-Stainless-Custom-Poll-Interval": ((i = s == null ? void 0 : s.pollIntervalMs) == null ? void 0 : i.toString()) ?? void 0 + } + ]); + for (; ; ) { + const { data: a, response: o } = await this.retrieve(t, e, { + ...s, + headers: { ...s == null ? void 0 : s.headers, ...r } + }).withResponse(); + switch (a.status) { + case "queued": + case "in_progress": + case "cancelling": + let c = 5e3; + if (s != null && s.pollIntervalMs) + c = s.pollIntervalMs; + else { + const u = o.headers.get("openai-poll-after-ms"); + if (u) { + const f = parseInt(u); + isNaN(f) || (c = f); + } + } + await Ip(c); + break; + case "requires_action": + case "incomplete": + case "cancelled": + case "completed": + case "failed": + case "expired": + return a; + } + } + } + /** + * Create a Run stream + */ + stream(t, e, s) { + return rf.createAssistantStream(t, this._client.beta.threads.runs, e, s); + } + submitToolOutputs(t, e, s) { + const { thread_id: r, ...i } = e; + return this._client.post(oe`/threads/${r}/runs/${t}/submit_tool_outputs`, { + body: i, + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]), + stream: e.stream ?? !1 + }); + } + /** + * A helper to submit a tool output to a run and poll for a terminal run state. + * More information on Run lifecycles can be found here: + * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps + */ + async submitToolOutputsAndPoll(t, e, s) { + const r = await this.submitToolOutputs(t, e, s); + return await this.poll(r.id, e, s); + } + /** + * Submit the tool outputs from a previous run and stream the run to a terminal + * state. More information on Run lifecycles can be found here: + * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps + */ + submitToolOutputsStream(t, e, s) { + return rf.createToolAssistantStream(t, this._client.beta.threads.runs, e, s); + } +}; +RC.Steps = VA; +class gv extends Ie { + constructor() { + super(...arguments), this.runs = new RC(this._client), this.messages = new FA(this._client); + } + /** + * Create a thread. + * + * @deprecated The Assistants API is deprecated in favor of the Responses API + */ + create(t = {}, e) { + return this._client.post("/threads", { + body: t, + ...e, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, e == null ? void 0 : e.headers]) + }); + } + /** + * Retrieves a thread. + * + * @deprecated The Assistants API is deprecated in favor of the Responses API + */ + retrieve(t, e) { + return this._client.get(oe`/threads/${t}`, { + ...e, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, e == null ? void 0 : e.headers]) + }); + } + /** + * Modifies a thread. + * + * @deprecated The Assistants API is deprecated in favor of the Responses API + */ + update(t, e, s) { + return this._client.post(oe`/threads/${t}`, { + body: e, + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Delete a thread. + * + * @deprecated The Assistants API is deprecated in favor of the Responses API + */ + delete(t, e) { + return this._client.delete(oe`/threads/${t}`, { + ...e, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, e == null ? void 0 : e.headers]) + }); + } + createAndRun(t, e) { + return this._client.post("/threads/runs", { + body: t, + ...e, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, e == null ? void 0 : e.headers]), + stream: t.stream ?? !1 + }); + } + /** + * A helper to create a thread, start a run and then poll for a terminal state. + * More information on Run lifecycles can be found here: + * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps + */ + async createAndRunPoll(t, e) { + const s = await this.createAndRun(t, e); + return await this.runs.poll(s.id, { thread_id: s.thread_id }, e); + } + /** + * Create a thread and stream the run back + */ + createAndRunStream(t, e) { + return rf.createThreadAssistantStream(t, this._client.beta.threads, e); + } +} +gv.Runs = RC; +gv.Messages = FA; +class Qd extends Ie { + constructor() { + super(...arguments), this.realtime = new pv(this._client), this.chatkit = new mv(this._client), this.assistants = new OA(this._client), this.threads = new gv(this._client); + } +} +Qd.Realtime = pv; +Qd.ChatKit = mv; +Qd.Assistants = OA; +Qd.Threads = gv; +class BA extends Ie { + create(t, e) { + return this._client.post("/completions", { body: t, ...e, stream: t.stream ?? !1 }); + } +} +let UA = class extends Ie { + /** + * Retrieve Container File Content + */ + retrieve(t, e, s) { + const { container_id: r } = e; + return this._client.get(oe`/containers/${r}/files/${t}/content`, { + ...s, + headers: ke([{ Accept: "application/binary" }, s == null ? void 0 : s.headers]), + __binaryResponse: !0 + }); + } +}, IC = class extends Ie { + constructor() { + super(...arguments), this.content = new UA(this._client); + } + /** + * Create a Container File + * + * You can send either a multipart/form-data request with the raw file content, or + * a JSON request with a file ID. + */ + create(t, e, s) { + return this._client.post(oe`/containers/${t}/files`, Oc({ body: e, ...s }, this._client)); + } + /** + * Retrieve Container File + */ + retrieve(t, e, s) { + const { container_id: r } = e; + return this._client.get(oe`/containers/${r}/files/${t}`, s); + } + /** + * List Container files + */ + list(t, e = {}, s) { + return this._client.getAPIList(oe`/containers/${t}/files`, Fn, { + query: e, + ...s + }); + } + /** + * Delete Container File + */ + delete(t, e, s) { + const { container_id: r } = e; + return this._client.delete(oe`/containers/${r}/files/${t}`, { + ...s, + headers: ke([{ Accept: "*/*" }, s == null ? void 0 : s.headers]) + }); + } +}; +IC.Content = UA; +class OC extends Ie { + constructor() { + super(...arguments), this.files = new IC(this._client); + } + /** + * Create Container + */ + create(t, e) { + return this._client.post("/containers", { body: t, ...e }); + } + /** + * Retrieve Container + */ + retrieve(t, e) { + return this._client.get(oe`/containers/${t}`, e); + } + /** + * List Containers + */ + list(t = {}, e) { + return this._client.getAPIList("/containers", Fn, { query: t, ...e }); + } + /** + * Delete Container + */ + delete(t, e) { + return this._client.delete(oe`/containers/${t}`, { + ...e, + headers: ke([{ Accept: "*/*" }, e == null ? void 0 : e.headers]) + }); + } +} +OC.Files = IC; +let qA = class extends Ie { + /** + * Create items in a conversation with the given ID. + */ + create(t, e, s) { + const { include: r, ...i } = e; + return this._client.post(oe`/conversations/${t}/items`, { + query: { include: r }, + body: i, + ...s + }); + } + /** + * Get a single item from a conversation with the given IDs. + */ + retrieve(t, e, s) { + const { conversation_id: r, ...i } = e; + return this._client.get(oe`/conversations/${r}/items/${t}`, { query: i, ...s }); + } + /** + * List all items for a conversation with the given ID. + */ + list(t, e = {}, s) { + return this._client.getAPIList(oe`/conversations/${t}/items`, Zg, { query: e, ...s }); + } + /** + * Delete an item from a conversation with the given IDs. + */ + delete(t, e, s) { + const { conversation_id: r } = e; + return this._client.delete(oe`/conversations/${r}/items/${t}`, s); + } +}; +class MC extends Ie { + constructor() { + super(...arguments), this.items = new qA(this._client); + } + /** + * Create a conversation. + */ + create(t = {}, e) { + return this._client.post("/conversations", { body: t, ...e }); + } + /** + * Get a conversation + */ + retrieve(t, e) { + return this._client.get(oe`/conversations/${t}`, e); + } + /** + * Update a conversation + */ + update(t, e, s) { + return this._client.post(oe`/conversations/${t}`, { body: e, ...s }); + } + /** + * Delete a conversation. Items in the conversation will not be deleted. + */ + delete(t, e) { + return this._client.delete(oe`/conversations/${t}`, e); + } +} +MC.Items = qA; +class zA extends Ie { + /** + * Creates an embedding vector representing the input text. + * + * @example + * ```ts + * const createEmbeddingResponse = + * await client.embeddings.create({ + * input: 'The quick brown fox jumped over the lazy dog', + * model: 'text-embedding-3-small', + * }); + * ``` + */ + create(t, e) { + const s = !!t.encoding_format; + let r = s ? t.encoding_format : "base64"; + s && as(this._client).debug("embeddings/user defined encoding_format:", t.encoding_format); + const i = this._client.post("/embeddings", { + body: { + ...t, + encoding_format: r + }, + ...e + }); + return s ? i : (as(this._client).debug("embeddings/decoding base64 embeddings from base64"), i._thenUnwrap((a) => (a && a.data && a.data.forEach((o) => { + const c = o.embedding; + o.embedding = Gq(c); + }), a))); + } +} +class HA extends Ie { + /** + * Get an evaluation run output item by ID. + */ + retrieve(t, e, s) { + const { eval_id: r, run_id: i } = e; + return this._client.get(oe`/evals/${r}/runs/${i}/output_items/${t}`, s); + } + /** + * Get a list of output items for an evaluation run. + */ + list(t, e, s) { + const { eval_id: r, ...i } = e; + return this._client.getAPIList(oe`/evals/${r}/runs/${t}/output_items`, Fn, { query: i, ...s }); + } +} +class DC extends Ie { + constructor() { + super(...arguments), this.outputItems = new HA(this._client); + } + /** + * Kicks off a new run for a given evaluation, specifying the data source, and what + * model configuration to use to test. The datasource will be validated against the + * schema specified in the config of the evaluation. + */ + create(t, e, s) { + return this._client.post(oe`/evals/${t}/runs`, { body: e, ...s }); + } + /** + * Get an evaluation run by ID. + */ + retrieve(t, e, s) { + const { eval_id: r } = e; + return this._client.get(oe`/evals/${r}/runs/${t}`, s); + } + /** + * Get a list of runs for an evaluation. + */ + list(t, e = {}, s) { + return this._client.getAPIList(oe`/evals/${t}/runs`, Fn, { + query: e, + ...s + }); + } + /** + * Delete an eval run. + */ + delete(t, e, s) { + const { eval_id: r } = e; + return this._client.delete(oe`/evals/${r}/runs/${t}`, s); + } + /** + * Cancel an ongoing evaluation run. + */ + cancel(t, e, s) { + const { eval_id: r } = e; + return this._client.post(oe`/evals/${r}/runs/${t}`, s); + } +} +DC.OutputItems = HA; +class LC extends Ie { + constructor() { + super(...arguments), this.runs = new DC(this._client); + } + /** + * Create the structure of an evaluation that can be used to test a model's + * performance. An evaluation is a set of testing criteria and the config for a + * data source, which dictates the schema of the data used in the evaluation. After + * creating an evaluation, you can run it on different models and model parameters. + * We support several types of graders and datasources. For more information, see + * the [Evals guide](https://platform.openai.com/docs/guides/evals). + */ + create(t, e) { + return this._client.post("/evals", { body: t, ...e }); + } + /** + * Get an evaluation by ID. + */ + retrieve(t, e) { + return this._client.get(oe`/evals/${t}`, e); + } + /** + * Update certain properties of an evaluation. + */ + update(t, e, s) { + return this._client.post(oe`/evals/${t}`, { body: e, ...s }); + } + /** + * List evaluations for a project. + */ + list(t = {}, e) { + return this._client.getAPIList("/evals", Fn, { query: t, ...e }); + } + /** + * Delete an evaluation. + */ + delete(t, e) { + return this._client.delete(oe`/evals/${t}`, e); + } +} +LC.Runs = DC; +let WA = class extends Ie { + /** + * Upload a file that can be used across various endpoints. Individual files can be + * up to 512 MB, and the size of all files uploaded by one organization can be up + * to 1 TB. + * + * - The Assistants API supports files up to 2 million tokens and of specific file + * types. See the + * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) + * for details. + * - The Fine-tuning API only supports `.jsonl` files. The input also has certain + * required formats for fine-tuning + * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) + * or + * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input) + * models. + * - The Batch API only supports `.jsonl` files up to 200 MB in size. The input + * also has a specific required + * [format](https://platform.openai.com/docs/api-reference/batch/request-input). + * + * Please [contact us](https://help.openai.com/) if you need to increase these + * storage limits. + */ + create(t, e) { + return this._client.post("/files", Oc({ body: t, ...e }, this._client)); + } + /** + * Returns information about a specific file. + */ + retrieve(t, e) { + return this._client.get(oe`/files/${t}`, e); + } + /** + * Returns a list of files. + */ + list(t = {}, e) { + return this._client.getAPIList("/files", Fn, { query: t, ...e }); + } + /** + * Delete a file and remove it from all vector stores. + */ + delete(t, e) { + return this._client.delete(oe`/files/${t}`, e); + } + /** + * Returns the contents of the specified file. + */ + content(t, e) { + return this._client.get(oe`/files/${t}/content`, { + ...e, + headers: ke([{ Accept: "application/binary" }, e == null ? void 0 : e.headers]), + __binaryResponse: !0 + }); + } + /** + * Waits for the given file to be processed, default timeout is 30 mins. + */ + async waitForProcessing(t, { pollInterval: e = 5e3, maxWait: s = 30 * 60 * 1e3 } = {}) { + const r = /* @__PURE__ */ new Set(["processed", "error", "deleted"]), i = Date.now(); + let a = await this.retrieve(t); + for (; !a.status || !r.has(a.status); ) + if (await Ip(e), a = await this.retrieve(t), Date.now() - i > s) + throw new CC({ + message: `Giving up on waiting for file ${t} to finish processing after ${s} milliseconds.` + }); + return a; + } +}; +class GA extends Ie { +} +let YA = class extends Ie { + /** + * Run a grader. + * + * @example + * ```ts + * const response = await client.fineTuning.alpha.graders.run({ + * grader: { + * input: 'input', + * name: 'name', + * operation: 'eq', + * reference: 'reference', + * type: 'string_check', + * }, + * model_sample: 'model_sample', + * }); + * ``` + */ + run(t, e) { + return this._client.post("/fine_tuning/alpha/graders/run", { body: t, ...e }); + } + /** + * Validate a grader. + * + * @example + * ```ts + * const response = + * await client.fineTuning.alpha.graders.validate({ + * grader: { + * input: 'input', + * name: 'name', + * operation: 'eq', + * reference: 'reference', + * type: 'string_check', + * }, + * }); + * ``` + */ + validate(t, e) { + return this._client.post("/fine_tuning/alpha/graders/validate", { body: t, ...e }); + } +}; +class jC extends Ie { + constructor() { + super(...arguments), this.graders = new YA(this._client); + } +} +jC.Graders = YA; +class KA extends Ie { + /** + * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys). + * + * This enables organization owners to share fine-tuned models with other projects + * in their organization. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create( + * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd', + * { project_ids: ['string'] }, + * )) { + * // ... + * } + * ``` + */ + create(t, e, s) { + return this._client.getAPIList(oe`/fine_tuning/checkpoints/${t}/permissions`, fv, { body: e, method: "post", ...s }); + } + /** + * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys). + * + * Organization owners can use this endpoint to view all permissions for a + * fine-tuned model checkpoint. + * + * @example + * ```ts + * const permission = + * await client.fineTuning.checkpoints.permissions.retrieve( + * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F', + * ); + * ``` + */ + retrieve(t, e = {}, s) { + return this._client.get(oe`/fine_tuning/checkpoints/${t}/permissions`, { + query: e, + ...s + }); + } + /** + * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys). + * + * Organization owners can use this endpoint to delete a permission for a + * fine-tuned model checkpoint. + * + * @example + * ```ts + * const permission = + * await client.fineTuning.checkpoints.permissions.delete( + * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB', + * { + * fine_tuned_model_checkpoint: + * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd', + * }, + * ); + * ``` + */ + delete(t, e, s) { + const { fine_tuned_model_checkpoint: r } = e; + return this._client.delete(oe`/fine_tuning/checkpoints/${r}/permissions/${t}`, s); + } +} +let FC = class extends Ie { + constructor() { + super(...arguments), this.permissions = new KA(this._client); + } +}; +FC.Permissions = KA; +class ZA extends Ie { + /** + * List checkpoints for a fine-tuning job. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list( + * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F', + * )) { + * // ... + * } + * ``` + */ + list(t, e = {}, s) { + return this._client.getAPIList(oe`/fine_tuning/jobs/${t}/checkpoints`, Fn, { query: e, ...s }); + } +} +class VC extends Ie { + constructor() { + super(...arguments), this.checkpoints = new ZA(this._client); + } + /** + * Creates a fine-tuning job which begins the process of creating a new model from + * a given dataset. + * + * Response includes details of the enqueued job including job status and the name + * of the fine-tuned models once complete. + * + * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization) + * + * @example + * ```ts + * const fineTuningJob = await client.fineTuning.jobs.create({ + * model: 'gpt-4o-mini', + * training_file: 'file-abc123', + * }); + * ``` + */ + create(t, e) { + return this._client.post("/fine_tuning/jobs", { body: t, ...e }); + } + /** + * Get info about a fine-tuning job. + * + * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization) + * + * @example + * ```ts + * const fineTuningJob = await client.fineTuning.jobs.retrieve( + * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F', + * ); + * ``` + */ + retrieve(t, e) { + return this._client.get(oe`/fine_tuning/jobs/${t}`, e); + } + /** + * List your organization's fine-tuning jobs + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const fineTuningJob of client.fineTuning.jobs.list()) { + * // ... + * } + * ``` + */ + list(t = {}, e) { + return this._client.getAPIList("/fine_tuning/jobs", Fn, { query: t, ...e }); + } + /** + * Immediately cancel a fine-tune job. + * + * @example + * ```ts + * const fineTuningJob = await client.fineTuning.jobs.cancel( + * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F', + * ); + * ``` + */ + cancel(t, e) { + return this._client.post(oe`/fine_tuning/jobs/${t}/cancel`, e); + } + /** + * Get status updates for a fine-tuning job. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents( + * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F', + * )) { + * // ... + * } + * ``` + */ + listEvents(t, e = {}, s) { + return this._client.getAPIList(oe`/fine_tuning/jobs/${t}/events`, Fn, { query: e, ...s }); + } + /** + * Pause a fine-tune job. + * + * @example + * ```ts + * const fineTuningJob = await client.fineTuning.jobs.pause( + * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F', + * ); + * ``` + */ + pause(t, e) { + return this._client.post(oe`/fine_tuning/jobs/${t}/pause`, e); + } + /** + * Resume a fine-tune job. + * + * @example + * ```ts + * const fineTuningJob = await client.fineTuning.jobs.resume( + * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F', + * ); + * ``` + */ + resume(t, e) { + return this._client.post(oe`/fine_tuning/jobs/${t}/resume`, e); + } +} +VC.Checkpoints = ZA; +class Jd extends Ie { + constructor() { + super(...arguments), this.methods = new GA(this._client), this.jobs = new VC(this._client), this.checkpoints = new FC(this._client), this.alpha = new jC(this._client); + } +} +Jd.Methods = GA; +Jd.Jobs = VC; +Jd.Checkpoints = FC; +Jd.Alpha = jC; +class XA extends Ie { +} +class BC extends Ie { + constructor() { + super(...arguments), this.graderModels = new XA(this._client); + } +} +BC.GraderModels = XA; +class QA extends Ie { + /** + * Creates a variation of a given image. This endpoint only supports `dall-e-2`. + * + * @example + * ```ts + * const imagesResponse = await client.images.createVariation({ + * image: fs.createReadStream('otter.png'), + * }); + * ``` + */ + createVariation(t, e) { + return this._client.post("/images/variations", Oc({ body: t, ...e }, this._client)); + } + edit(t, e) { + return this._client.post("/images/edits", Oc({ body: t, ...e, stream: t.stream ?? !1 }, this._client)); + } + generate(t, e) { + return this._client.post("/images/generations", { body: t, ...e, stream: t.stream ?? !1 }); + } +} +class JA extends Ie { + /** + * Retrieves a model instance, providing basic information about the model such as + * the owner and permissioning. + */ + retrieve(t, e) { + return this._client.get(oe`/models/${t}`, e); + } + /** + * Lists the currently available models, and provides basic information about each + * one such as the owner and availability. + */ + list(t) { + return this._client.getAPIList("/models", fv, t); + } + /** + * Delete a fine-tuned model. You must have the Owner role in your organization to + * delete a model. + */ + delete(t, e) { + return this._client.delete(oe`/models/${t}`, e); + } +} +class e9 extends Ie { + /** + * Classifies if text and/or image inputs are potentially harmful. Learn more in + * the [moderation guide](https://platform.openai.com/docs/guides/moderation). + */ + create(t, e) { + return this._client.post("/moderations", { body: t, ...e }); + } +} +class t9 extends Ie { + /** + * Accept an incoming SIP call and configure the realtime session that will handle + * it. + * + * @example + * ```ts + * await client.realtime.calls.accept('call_id', { + * type: 'realtime', + * }); + * ``` + */ + accept(t, e, s) { + return this._client.post(oe`/realtime/calls/${t}/accept`, { + body: e, + ...s, + headers: ke([{ Accept: "*/*" }, s == null ? void 0 : s.headers]) + }); + } + /** + * End an active Realtime API call, whether it was initiated over SIP or WebRTC. + * + * @example + * ```ts + * await client.realtime.calls.hangup('call_id'); + * ``` + */ + hangup(t, e) { + return this._client.post(oe`/realtime/calls/${t}/hangup`, { + ...e, + headers: ke([{ Accept: "*/*" }, e == null ? void 0 : e.headers]) + }); + } + /** + * Transfer an active SIP call to a new destination using the SIP REFER verb. + * + * @example + * ```ts + * await client.realtime.calls.refer('call_id', { + * target_uri: 'tel:+14155550123', + * }); + * ``` + */ + refer(t, e, s) { + return this._client.post(oe`/realtime/calls/${t}/refer`, { + body: e, + ...s, + headers: ke([{ Accept: "*/*" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Decline an incoming SIP call by returning a SIP status code to the caller. + * + * @example + * ```ts + * await client.realtime.calls.reject('call_id'); + * ``` + */ + reject(t, e = {}, s) { + return this._client.post(oe`/realtime/calls/${t}/reject`, { + body: e, + ...s, + headers: ke([{ Accept: "*/*" }, s == null ? void 0 : s.headers]) + }); + } +} +class n9 extends Ie { + /** + * Create a Realtime client secret with an associated session configuration. + * + * @example + * ```ts + * const clientSecret = + * await client.realtime.clientSecrets.create(); + * ``` + */ + create(t, e) { + return this._client.post("/realtime/client_secrets", { body: t, ...e }); + } +} +class yv extends Ie { + constructor() { + super(...arguments), this.clientSecrets = new n9(this._client), this.calls = new t9(this._client); + } +} +yv.ClientSecrets = n9; +yv.Calls = t9; +function Yq(n, t) { + return !t || !Zq(t) ? { + ...n, + output_parsed: null, + output: n.output.map((e) => e.type === "function_call" ? { + ...e, + parsed_arguments: null + } : e.type === "message" ? { + ...e, + content: e.content.map((s) => ({ + ...s, + parsed: null + })) + } : e) + } : s9(n, t); +} +function s9(n, t) { + const e = n.output.map((r) => { + if (r.type === "function_call") + return { + ...r, + parsed_arguments: Jq(t, r) + }; + if (r.type === "message") { + const i = r.content.map((a) => a.type === "output_text" ? { + ...a, + parsed: Kq(t, a.text) + } : a); + return { + ...r, + content: i + }; + } + return r; + }), s = Object.assign({}, n, { output: e }); + return Object.getOwnPropertyDescriptor(n, "output_text") || Dw(s), Object.defineProperty(s, "output_parsed", { + enumerable: !0, + get() { + for (const r of s.output) + if (r.type === "message") { + for (const i of r.content) + if (i.type === "output_text" && i.parsed !== null) + return i.parsed; + } + return null; + } + }), s; +} +function Kq(n, t) { + var e, s, r, i; + return ((s = (e = n.text) == null ? void 0 : e.format) == null ? void 0 : s.type) !== "json_schema" ? null : "$parseRaw" in ((r = n.text) == null ? void 0 : r.format) ? ((i = n.text) == null ? void 0 : i.format).$parseRaw(t) : JSON.parse(t); +} +function Zq(n) { + var t; + return !!kC((t = n.text) == null ? void 0 : t.format); +} +function Xq(n) { + return (n == null ? void 0 : n.$brand) === "auto-parseable-tool"; +} +function Qq(n, t) { + return n.find((e) => e.type === "function" && e.name === t); +} +function Jq(n, t) { + const e = Qq(n.tools ?? [], t.name); + return { + ...t, + ...t, + parsed_arguments: Xq(e) ? e.$parseRaw(t.arguments) : e != null && e.strict ? JSON.parse(t.arguments) : null + }; +} +function Dw(n) { + const t = []; + for (const e of n.output) + if (e.type === "message") + for (const s of e.content) + s.type === "output_text" && t.push(s.text); + n.output_text = t.join(""); +} +var iu, Sm, co, Em, Q6, J6, e_, t_; +class UC extends AC { + constructor(t) { + super(), iu.add(this), Sm.set(this, void 0), co.set(this, void 0), Em.set(this, void 0), tt(this, Sm, t); + } + static createResponse(t, e, s) { + const r = new UC(e); + return r._run(() => r._createOrRetrieveResponse(t, e, { + ...s, + headers: { ...s == null ? void 0 : s.headers, "X-Stainless-Helper-Method": "stream" } + })), r; + } + async _createOrRetrieveResponse(t, e, s) { + var o; + const r = s == null ? void 0 : s.signal; + r && (r.aborted && this.controller.abort(), r.addEventListener("abort", () => this.controller.abort())), z(this, iu, "m", Q6).call(this); + let i, a = null; + "response_id" in e ? (i = await t.responses.retrieve(e.response_id, { stream: !0 }, { ...s, signal: this.controller.signal, stream: !0 }), a = e.starting_after ?? null) : i = await t.responses.create({ ...e, stream: !0 }, { ...s, signal: this.controller.signal }), this._connected(); + for await (const c of i) + z(this, iu, "m", J6).call(this, c, a); + if ((o = i.controller.signal) != null && o.aborted) + throw new Sr(); + return z(this, iu, "m", e_).call(this); + } + [(Sm = /* @__PURE__ */ new WeakMap(), co = /* @__PURE__ */ new WeakMap(), Em = /* @__PURE__ */ new WeakMap(), iu = /* @__PURE__ */ new WeakSet(), Q6 = function() { + this.ended || tt(this, co, void 0); + }, J6 = function(e, s) { + if (this.ended) + return; + const r = (a, o) => { + (s == null || o.sequence_number > s) && this._emit(a, o); + }, i = z(this, iu, "m", t_).call(this, e); + switch (r("event", e), e.type) { + case "response.output_text.delta": { + const a = i.output[e.output_index]; + if (!a) + throw new De(`missing output at index ${e.output_index}`); + if (a.type === "message") { + const o = a.content[e.content_index]; + if (!o) + throw new De(`missing content at index ${e.content_index}`); + if (o.type !== "output_text") + throw new De(`expected content to be 'output_text', got ${o.type}`); + r("response.output_text.delta", { + ...e, + snapshot: o.text + }); + } + break; + } + case "response.function_call_arguments.delta": { + const a = i.output[e.output_index]; + if (!a) + throw new De(`missing output at index ${e.output_index}`); + a.type === "function_call" && r("response.function_call_arguments.delta", { + ...e, + snapshot: a.arguments + }); + break; + } + default: + r(e.type, e); + break; + } + }, e_ = function() { + if (this.ended) + throw new De("stream has ended, this shouldn't happen"); + const e = z(this, co, "f"); + if (!e) + throw new De("request ended without sending any events"); + tt(this, co, void 0); + const s = ez(e, z(this, Sm, "f")); + return tt(this, Em, s), s; + }, t_ = function(e) { + var r; + let s = z(this, co, "f"); + if (!s) { + if (e.type !== "response.created") + throw new De(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`); + return s = tt(this, co, e.response), s; + } + switch (e.type) { + case "response.output_item.added": { + s.output.push(e.item); + break; + } + case "response.content_part.added": { + const i = s.output[e.output_index]; + if (!i) + throw new De(`missing output at index ${e.output_index}`); + const a = i.type, o = e.part; + a === "message" && o.type !== "reasoning_text" ? i.content.push(o) : a === "reasoning" && o.type === "reasoning_text" && (i.content || (i.content = []), i.content.push(o)); + break; + } + case "response.output_text.delta": { + const i = s.output[e.output_index]; + if (!i) + throw new De(`missing output at index ${e.output_index}`); + if (i.type === "message") { + const a = i.content[e.content_index]; + if (!a) + throw new De(`missing content at index ${e.content_index}`); + if (a.type !== "output_text") + throw new De(`expected content to be 'output_text', got ${a.type}`); + a.text += e.delta; + } + break; + } + case "response.function_call_arguments.delta": { + const i = s.output[e.output_index]; + if (!i) + throw new De(`missing output at index ${e.output_index}`); + i.type === "function_call" && (i.arguments += e.delta); + break; + } + case "response.reasoning_text.delta": { + const i = s.output[e.output_index]; + if (!i) + throw new De(`missing output at index ${e.output_index}`); + if (i.type === "reasoning") { + const a = (r = i.content) == null ? void 0 : r[e.content_index]; + if (!a) + throw new De(`missing content at index ${e.content_index}`); + if (a.type !== "reasoning_text") + throw new De(`expected content to be 'reasoning_text', got ${a.type}`); + a.text += e.delta; + } + break; + } + case "response.completed": { + tt(this, co, e.response); + break; + } + } + return s; + }, Symbol.asyncIterator)]() { + const t = [], e = []; + let s = !1; + return this.on("event", (r) => { + const i = e.shift(); + i ? i.resolve(r) : t.push(r); + }), this.on("end", () => { + s = !0; + for (const r of e) + r.resolve(void 0); + e.length = 0; + }), this.on("abort", (r) => { + s = !0; + for (const i of e) + i.reject(r); + e.length = 0; + }), this.on("error", (r) => { + s = !0; + for (const i of e) + i.reject(r); + e.length = 0; + }), { + next: async () => t.length ? { value: t.shift(), done: !1 } : s ? { value: void 0, done: !0 } : new Promise((i, a) => e.push({ resolve: i, reject: a })).then((i) => i ? { value: i, done: !1 } : { value: void 0, done: !0 }), + return: async () => (this.abort(), { value: void 0, done: !0 }) + }; + } + /** + * @returns a promise that resolves with the final Response, or rejects + * if an error occurred or the stream ended prematurely without producing a REsponse. + */ + async finalResponse() { + await this.done(); + const t = z(this, Em, "f"); + if (!t) + throw new De("stream ended without producing a ChatCompletion"); + return t; + } +} +function ez(n, t) { + return Yq(n, t); +} +class r9 extends Ie { + /** + * Returns a list of input items for a given response. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const responseItem of client.responses.inputItems.list( + * 'response_id', + * )) { + * // ... + * } + * ``` + */ + list(t, e = {}, s) { + return this._client.getAPIList(oe`/responses/${t}/input_items`, Fn, { query: e, ...s }); + } +} +class i9 extends Ie { + /** + * Get input token counts + * + * @example + * ```ts + * const response = await client.responses.inputTokens.count(); + * ``` + */ + count(t = {}, e) { + return this._client.post("/responses/input_tokens", { body: t, ...e }); + } +} +class vv extends Ie { + constructor() { + super(...arguments), this.inputItems = new r9(this._client), this.inputTokens = new i9(this._client); + } + create(t, e) { + return this._client.post("/responses", { body: t, ...e, stream: t.stream ?? !1 })._thenUnwrap((s) => ("object" in s && s.object === "response" && Dw(s), s)); + } + retrieve(t, e = {}, s) { + return this._client.get(oe`/responses/${t}`, { + query: e, + ...s, + stream: (e == null ? void 0 : e.stream) ?? !1 + })._thenUnwrap((r) => ("object" in r && r.object === "response" && Dw(r), r)); + } + /** + * Deletes a model response with the given ID. + * + * @example + * ```ts + * await client.responses.delete( + * 'resp_677efb5139a88190b512bc3fef8e535d', + * ); + * ``` + */ + delete(t, e) { + return this._client.delete(oe`/responses/${t}`, { + ...e, + headers: ke([{ Accept: "*/*" }, e == null ? void 0 : e.headers]) + }); + } + parse(t, e) { + return this._client.responses.create(t, e)._thenUnwrap((s) => s9(s, t)); + } + /** + * Creates a model response stream + */ + stream(t, e) { + return UC.createResponse(this._client, t, e); + } + /** + * Cancels a model response with the given ID. Only responses created with the + * `background` parameter set to `true` can be cancelled. + * [Learn more](https://platform.openai.com/docs/guides/background). + * + * @example + * ```ts + * const response = await client.responses.cancel( + * 'resp_677efb5139a88190b512bc3fef8e535d', + * ); + * ``` + */ + cancel(t, e) { + return this._client.post(oe`/responses/${t}/cancel`, e); + } + /** + * Compact conversation + * + * @example + * ```ts + * const compactedResponse = await client.responses.compact({ + * model: 'gpt-5.2', + * }); + * ``` + */ + compact(t, e) { + return this._client.post("/responses/compact", { body: t, ...e }); + } +} +vv.InputItems = r9; +vv.InputTokens = i9; +class a9 extends Ie { + /** + * Adds a + * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an + * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object. + * A Part represents a chunk of bytes from the file you are trying to upload. + * + * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload + * maximum of 8 GB. + * + * It is possible to add multiple Parts in parallel. You can decide the intended + * order of the Parts when you + * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete). + */ + create(t, e, s) { + return this._client.post(oe`/uploads/${t}/parts`, Oc({ body: e, ...s }, this._client)); + } +} +class qC extends Ie { + constructor() { + super(...arguments), this.parts = new a9(this._client); + } + /** + * Creates an intermediate + * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object + * that you can add + * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to. + * Currently, an Upload can accept at most 8 GB in total and expires after an hour + * after you create it. + * + * Once you complete the Upload, we will create a + * [File](https://platform.openai.com/docs/api-reference/files/object) object that + * contains all the parts you uploaded. This File is usable in the rest of our + * platform as a regular File object. + * + * For certain `purpose` values, the correct `mime_type` must be specified. Please + * refer to documentation for the + * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files). + * + * For guidance on the proper filename extensions for each purpose, please follow + * the documentation on + * [creating a File](https://platform.openai.com/docs/api-reference/files/create). + */ + create(t, e) { + return this._client.post("/uploads", { body: t, ...e }); + } + /** + * Cancels the Upload. No Parts may be added after an Upload is cancelled. + */ + cancel(t, e) { + return this._client.post(oe`/uploads/${t}/cancel`, e); + } + /** + * Completes the + * [Upload](https://platform.openai.com/docs/api-reference/uploads/object). + * + * Within the returned Upload object, there is a nested + * [File](https://platform.openai.com/docs/api-reference/files/object) object that + * is ready to use in the rest of the platform. + * + * You can specify the order of the Parts by passing in an ordered list of the Part + * IDs. + * + * The number of bytes uploaded upon completion must match the number of bytes + * initially specified when creating the Upload object. No Parts may be added after + * an Upload is completed. + */ + complete(t, e, s) { + return this._client.post(oe`/uploads/${t}/complete`, { body: e, ...s }); + } +} +qC.Parts = a9; +const tz = async (n) => { + const t = await Promise.allSettled(n), e = t.filter((r) => r.status === "rejected"); + if (e.length) { + for (const r of e) + console.error(r.reason); + throw new Error(`${e.length} promise(s) failed - see the above errors`); + } + const s = []; + for (const r of t) + r.status === "fulfilled" && s.push(r.value); + return s; +}; +class o9 extends Ie { + /** + * Create a vector store file batch. + */ + create(t, e, s) { + return this._client.post(oe`/vector_stores/${t}/file_batches`, { + body: e, + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Retrieves a vector store file batch. + */ + retrieve(t, e, s) { + const { vector_store_id: r } = e; + return this._client.get(oe`/vector_stores/${r}/file_batches/${t}`, { + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Cancel a vector store file batch. This attempts to cancel the processing of + * files in this batch as soon as possible. + */ + cancel(t, e, s) { + const { vector_store_id: r } = e; + return this._client.post(oe`/vector_stores/${r}/file_batches/${t}/cancel`, { + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Create a vector store batch and poll until all files have been processed. + */ + async createAndPoll(t, e, s) { + const r = await this.create(t, e); + return await this.poll(t, r.id, s); + } + /** + * Returns a list of vector store files in a batch. + */ + listFiles(t, e, s) { + const { vector_store_id: r, ...i } = e; + return this._client.getAPIList(oe`/vector_stores/${r}/file_batches/${t}/files`, Fn, { query: i, ...s, headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) }); + } + /** + * Wait for the given file batch to be processed. + * + * Note: this will return even if one of the files failed to process, you need to + * check batch.file_counts.failed_count to handle this case. + */ + async poll(t, e, s) { + var i; + const r = ke([ + s == null ? void 0 : s.headers, + { + "X-Stainless-Poll-Helper": "true", + "X-Stainless-Custom-Poll-Interval": ((i = s == null ? void 0 : s.pollIntervalMs) == null ? void 0 : i.toString()) ?? void 0 + } + ]); + for (; ; ) { + const { data: a, response: o } = await this.retrieve(e, { vector_store_id: t }, { + ...s, + headers: r + }).withResponse(); + switch (a.status) { + case "in_progress": + let c = 5e3; + if (s != null && s.pollIntervalMs) + c = s.pollIntervalMs; + else { + const u = o.headers.get("openai-poll-after-ms"); + if (u) { + const f = parseInt(u); + isNaN(f) || (c = f); + } + } + await Ip(c); + break; + case "failed": + case "cancelled": + case "completed": + return a; + } + } + } + /** + * Uploads the given files concurrently and then creates a vector store file batch. + * + * The concurrency limit is configurable using the `maxConcurrency` parameter. + */ + async uploadAndPoll(t, { files: e, fileIds: s = [] }, r) { + if (e == null || e.length == 0) + throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead"); + const i = (r == null ? void 0 : r.maxConcurrency) ?? 5, a = Math.min(i, e.length), o = this._client, c = e.values(), u = [...s]; + async function f(g) { + for (let y of g) { + const v = await o.files.create({ file: y, purpose: "assistants" }, r); + u.push(v.id); + } + } + const p = Array(a).fill(c).map(f); + return await tz(p), await this.createAndPoll(t, { + file_ids: u + }); + } +} +class l9 extends Ie { + /** + * Create a vector store file by attaching a + * [File](https://platform.openai.com/docs/api-reference/files) to a + * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object). + */ + create(t, e, s) { + return this._client.post(oe`/vector_stores/${t}/files`, { + body: e, + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Retrieves a vector store file. + */ + retrieve(t, e, s) { + const { vector_store_id: r } = e; + return this._client.get(oe`/vector_stores/${r}/files/${t}`, { + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Update attributes on a vector store file. + */ + update(t, e, s) { + const { vector_store_id: r, ...i } = e; + return this._client.post(oe`/vector_stores/${r}/files/${t}`, { + body: i, + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Returns a list of vector store files. + */ + list(t, e = {}, s) { + return this._client.getAPIList(oe`/vector_stores/${t}/files`, Fn, { + query: e, + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Delete a vector store file. This will remove the file from the vector store but + * the file itself will not be deleted. To delete the file, use the + * [delete file](https://platform.openai.com/docs/api-reference/files/delete) + * endpoint. + */ + delete(t, e, s) { + const { vector_store_id: r } = e; + return this._client.delete(oe`/vector_stores/${r}/files/${t}`, { + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Attach a file to the given vector store and wait for it to be processed. + */ + async createAndPoll(t, e, s) { + const r = await this.create(t, e, s); + return await this.poll(t, r.id, s); + } + /** + * Wait for the vector store file to finish processing. + * + * Note: this will return even if the file failed to process, you need to check + * file.last_error and file.status to handle these cases + */ + async poll(t, e, s) { + var i; + const r = ke([ + s == null ? void 0 : s.headers, + { + "X-Stainless-Poll-Helper": "true", + "X-Stainless-Custom-Poll-Interval": ((i = s == null ? void 0 : s.pollIntervalMs) == null ? void 0 : i.toString()) ?? void 0 + } + ]); + for (; ; ) { + const a = await this.retrieve(e, { + vector_store_id: t + }, { ...s, headers: r }).withResponse(), o = a.data; + switch (o.status) { + case "in_progress": + let c = 5e3; + if (s != null && s.pollIntervalMs) + c = s.pollIntervalMs; + else { + const u = a.response.headers.get("openai-poll-after-ms"); + if (u) { + const f = parseInt(u); + isNaN(f) || (c = f); + } + } + await Ip(c); + break; + case "failed": + case "completed": + return o; + } + } + } + /** + * Upload a file to the `files` API and then attach it to the given vector store. + * + * Note the file will be asynchronously processed (you can use the alternative + * polling helper method to wait for processing to complete). + */ + async upload(t, e, s) { + const r = await this._client.files.create({ file: e, purpose: "assistants" }, s); + return this.create(t, { file_id: r.id }, s); + } + /** + * Add a file to a vector store and poll until processing is complete. + */ + async uploadAndPoll(t, e, s) { + const r = await this.upload(t, e, s); + return await this.poll(t, r.id, s); + } + /** + * Retrieve the parsed contents of a vector store file. + */ + content(t, e, s) { + const { vector_store_id: r } = e; + return this._client.getAPIList(oe`/vector_stores/${r}/files/${t}/content`, fv, { ...s, headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) }); + } +} +class bv extends Ie { + constructor() { + super(...arguments), this.files = new l9(this._client), this.fileBatches = new o9(this._client); + } + /** + * Create a vector store. + */ + create(t, e) { + return this._client.post("/vector_stores", { + body: t, + ...e, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, e == null ? void 0 : e.headers]) + }); + } + /** + * Retrieves a vector store. + */ + retrieve(t, e) { + return this._client.get(oe`/vector_stores/${t}`, { + ...e, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, e == null ? void 0 : e.headers]) + }); + } + /** + * Modifies a vector store. + */ + update(t, e, s) { + return this._client.post(oe`/vector_stores/${t}`, { + body: e, + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } + /** + * Returns a list of vector stores. + */ + list(t = {}, e) { + return this._client.getAPIList("/vector_stores", Fn, { + query: t, + ...e, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, e == null ? void 0 : e.headers]) + }); + } + /** + * Delete a vector store. + */ + delete(t, e) { + return this._client.delete(oe`/vector_stores/${t}`, { + ...e, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, e == null ? void 0 : e.headers]) + }); + } + /** + * Search a vector store for relevant chunks based on a query and file attributes + * filter. + */ + search(t, e, s) { + return this._client.getAPIList(oe`/vector_stores/${t}/search`, fv, { + body: e, + method: "post", + ...s, + headers: ke([{ "OpenAI-Beta": "assistants=v2" }, s == null ? void 0 : s.headers]) + }); + } +} +bv.Files = l9; +bv.FileBatches = o9; +class c9 extends Ie { + /** + * Create a video + */ + create(t, e) { + return this._client.post("/videos", V6({ body: t, ...e }, this._client)); + } + /** + * Retrieve a video + */ + retrieve(t, e) { + return this._client.get(oe`/videos/${t}`, e); + } + /** + * List videos + */ + list(t = {}, e) { + return this._client.getAPIList("/videos", Zg, { query: t, ...e }); + } + /** + * Delete a video + */ + delete(t, e) { + return this._client.delete(oe`/videos/${t}`, e); + } + /** + * Download video content + */ + downloadContent(t, e = {}, s) { + return this._client.get(oe`/videos/${t}/content`, { + query: e, + ...s, + headers: ke([{ Accept: "application/binary" }, s == null ? void 0 : s.headers]), + __binaryResponse: !0 + }); + } + /** + * Create a video remix + */ + remix(t, e, s) { + return this._client.post(oe`/videos/${t}/remix`, V6({ body: e, ...s }, this._client)); + } +} +var hu, u9, Xm; +class d9 extends Ie { + constructor() { + super(...arguments), hu.add(this); + } + /** + * Validates that the given payload was sent by OpenAI and parses the payload. + */ + async unwrap(t, e, s = this._client.webhookSecret, r = 300) { + return await this.verifySignature(t, e, s, r), JSON.parse(t); + } + /** + * Validates whether or not the webhook payload was sent by OpenAI. + * + * An error will be raised if the webhook payload was not sent by OpenAI. + * + * @param payload - The webhook payload + * @param headers - The webhook headers + * @param secret - The webhook secret (optional, will use client secret if not provided) + * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes) + */ + async verifySignature(t, e, s = this._client.webhookSecret, r = 300) { + if (typeof crypto > "u" || typeof crypto.subtle.importKey != "function" || typeof crypto.subtle.verify != "function") + throw new Error("Webhook signature verification is only supported when the `crypto` global is defined"); + z(this, hu, "m", u9).call(this, s); + const i = ke([e]).values, a = z(this, hu, "m", Xm).call(this, i, "webhook-signature"), o = z(this, hu, "m", Xm).call(this, i, "webhook-timestamp"), c = z(this, hu, "m", Xm).call(this, i, "webhook-id"), u = parseInt(o, 10); + if (isNaN(u)) + throw new Mh("Invalid webhook timestamp format"); + const f = Math.floor(Date.now() / 1e3); + if (f - u > r) + throw new Mh("Webhook timestamp is too old"); + if (u > f + r) + throw new Mh("Webhook timestamp is too new"); + const p = a.split(" ").map((b) => b.startsWith("v1,") ? b.substring(3) : b), g = s.startsWith("whsec_") ? Buffer.from(s.replace("whsec_", ""), "base64") : Buffer.from(s, "utf-8"), y = c ? `${c}.${o}.${t}` : `${o}.${t}`, v = await crypto.subtle.importKey("raw", g, { name: "HMAC", hash: "SHA-256" }, !1, ["verify"]); + for (const b of p) + try { + const w = Buffer.from(b, "base64"); + if (await crypto.subtle.verify("HMAC", v, w, new TextEncoder().encode(y))) + return; + } catch { + continue; + } + throw new Mh("The given webhook signature does not match the expected signature"); + } +} +hu = /* @__PURE__ */ new WeakSet(), u9 = function(t) { + if (typeof t != "string" || t.length === 0) + throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function"); +}, Xm = function(t, e) { + if (!t) + throw new Error("Headers are required"); + const s = t.get(e); + if (s == null) + throw new Error(`Missing required header: ${e}`); + return s; +}; +var Lw, zC, Qm, h9; +class wt { + /** + * API Client for interfacing with the OpenAI API. + * + * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined] + * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null] + * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null] + * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null] + * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API. + * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out. + * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls. + * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation. + * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request. + * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API. + * @param {Record<string, string | undefined>} opts.defaultQuery - Default query parameters to include with every request to the API. + * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers. + */ + constructor({ baseURL: t = ru("OPENAI_BASE_URL"), apiKey: e = ru("OPENAI_API_KEY"), organization: s = ru("OPENAI_ORG_ID") ?? null, project: r = ru("OPENAI_PROJECT_ID") ?? null, webhookSecret: i = ru("OPENAI_WEBHOOK_SECRET") ?? null, ...a } = {}) { + if (Lw.add(this), Qm.set(this, void 0), this.completions = new BA(this), this.chat = new $C(this), this.embeddings = new zA(this), this.files = new WA(this), this.images = new QA(this), this.audio = new Mp(this), this.moderations = new e9(this), this.models = new JA(this), this.fineTuning = new Jd(this), this.graders = new BC(this), this.vectorStores = new bv(this), this.webhooks = new d9(this), this.beta = new Qd(this), this.batches = new IA(this), this.uploads = new qC(this), this.responses = new vv(this), this.realtime = new yv(this), this.conversations = new MC(this), this.evals = new LC(this), this.containers = new OC(this), this.videos = new c9(this), e === void 0) + throw new De("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable."); + const o = { + apiKey: e, + organization: s, + project: r, + webhookSecret: i, + ...a, + baseURL: t || "https://api.openai.com/v1" + }; + if (!o.dangerouslyAllowBrowser && sq()) + throw new De(`It looks like you're running in a browser-like environment. + +This is disabled by default, as it risks exposing your secret API credentials to attackers. +If you understand the risks and have appropriate mitigations in place, +you can set the \`dangerouslyAllowBrowser\` option to \`true\`, e.g., + +new OpenAI({ apiKey, dangerouslyAllowBrowser: true }); + +https://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety +`); + this.baseURL = o.baseURL, this.timeout = o.timeout ?? zC.DEFAULT_TIMEOUT, this.logger = o.logger ?? console; + const c = "warn"; + this.logLevel = c, this.logLevel = j6(o.logLevel, "ClientOptions.logLevel", this) ?? j6(ru("OPENAI_LOG"), "process.env['OPENAI_LOG']", this) ?? c, this.fetchOptions = o.fetchOptions, this.maxRetries = o.maxRetries ?? 2, this.fetch = o.fetch ?? lq(), tt(this, Qm, uq), this._options = o, this.apiKey = typeof e == "string" ? e : "Missing Key", this.organization = s, this.project = r, this.webhookSecret = i; + } + /** + * Create a new client instance re-using the same options given to the current client with optional overriding. + */ + withOptions(t) { + return new this.constructor({ + ...this._options, + baseURL: this.baseURL, + maxRetries: this.maxRetries, + timeout: this.timeout, + logger: this.logger, + logLevel: this.logLevel, + fetch: this.fetch, + fetchOptions: this.fetchOptions, + apiKey: this.apiKey, + organization: this.organization, + project: this.project, + webhookSecret: this.webhookSecret, + ...t + }); + } + defaultQuery() { + return this._options.defaultQuery; + } + validateHeaders({ values: t, nulls: e }) { + } + async authHeaders(t) { + return ke([{ Authorization: `Bearer ${this.apiKey}` }]); + } + stringifyQuery(t) { + return gq(t, { arrayFormat: "brackets" }); + } + getUserAgent() { + return `${this.constructor.name}/JS ${uu}`; + } + defaultIdempotencyKey() { + return `stainless-node-retry-${MT()}`; + } + makeStatusError(t, e, s, r) { + return cs.generate(t, e, s, r); + } + async _callApiKey() { + const t = this._options.apiKey; + if (typeof t != "function") + return !1; + let e; + try { + e = await t(); + } catch (s) { + throw s instanceof De ? s : new De( + `Failed to get token from 'apiKey' function: ${s.message}`, + // @ts-ignore + { cause: s } + ); + } + if (typeof e != "string" || !e) + throw new De(`Expected 'apiKey' function argument to return a string but it returned ${e}`); + return this.apiKey = e, !0; + } + buildURL(t, e, s) { + const r = !z(this, Lw, "m", h9).call(this) && s || this.baseURL, i = QU(t) ? new URL(t) : new URL(r + (r.endsWith("/") && t.startsWith("/") ? t.slice(1) : t)), a = this.defaultQuery(); + return JU(a) || (e = { ...a, ...e }), typeof e == "object" && e && !Array.isArray(e) && (i.search = this.stringifyQuery(e)), i.toString(); + } + /** + * Used as a callback for mutating the given `FinalRequestOptions` object. + */ + async prepareOptions(t) { + await this._callApiKey(); + } + /** + * Used as a callback for mutating the given `RequestInit` object. + * + * This is useful for cases where you want to add certain headers based off of + * the request properties, e.g. `method` or `url`. + */ + async prepareRequest(t, { url: e, options: s }) { + } + get(t, e) { + return this.methodRequest("get", t, e); + } + post(t, e) { + return this.methodRequest("post", t, e); + } + patch(t, e) { + return this.methodRequest("patch", t, e); + } + put(t, e) { + return this.methodRequest("put", t, e); + } + delete(t, e) { + return this.methodRequest("delete", t, e); + } + methodRequest(t, e, s) { + return this.request(Promise.resolve(s).then((r) => ({ method: t, path: e, ...r }))); + } + request(t, e = null) { + return new hv(this, this.makeRequest(t, e, void 0)); + } + async makeRequest(t, e, s) { + var E, x; + const r = await t, i = r.maxRetries ?? this.maxRetries; + e == null && (e = i), await this.prepareOptions(r); + const { req: a, url: o, timeout: c } = await this.buildRequest(r, { + retryCount: i - e + }); + await this.prepareRequest(a, { url: o, options: r }); + const u = "log_" + (Math.random() * (1 << 24) | 0).toString(16).padStart(6, "0"), f = s === void 0 ? "" : `, retryOf: ${s}`, p = Date.now(); + if (as(this).debug(`[${u}] sending request`, El({ + retryOfRequestLogID: s, + method: r.method, + url: o, + options: r, + headers: a.headers + })), (E = r.signal) != null && E.aborted) + throw new Sr(); + const g = new AbortController(), y = await this.fetchWithTimeout(o, a, c, g).catch(Ew), v = Date.now(); + if (y instanceof globalThis.Error) { + const C = `retrying, ${e} attempts remaining`; + if ((x = r.signal) != null && x.aborted) + throw new Sr(); + const _ = Sw(y) || /timed? ?out/i.test(String(y) + ("cause" in y ? String(y.cause) : "")); + if (e) + return as(this).info(`[${u}] connection ${_ ? "timed out" : "failed"} - ${C}`), as(this).debug(`[${u}] connection ${_ ? "timed out" : "failed"} (${C})`, El({ + retryOfRequestLogID: s, + url: o, + durationMs: v - p, + message: y.message + })), this.retryRequest(r, e, s ?? u); + throw as(this).info(`[${u}] connection ${_ ? "timed out" : "failed"} - error; no more retries left`), as(this).debug(`[${u}] connection ${_ ? "timed out" : "failed"} (error; no more retries left)`, El({ + retryOfRequestLogID: s, + url: o, + durationMs: v - p, + message: y.message + })), _ ? new CC() : new uv({ cause: y }); + } + const b = [...y.headers.entries()].filter(([C]) => C === "x-request-id").map(([C, _]) => ", " + C + ": " + JSON.stringify(_)).join(""), w = `[${u}${f}${b}] ${a.method} ${o} ${y.ok ? "succeeded" : "failed"} with status ${y.status} in ${v - p}ms`; + if (!y.ok) { + const C = await this.shouldRetry(y); + if (e && C) { + const $ = `retrying, ${e} attempts remaining`; + return await cq(y.body), as(this).info(`${w} - ${$}`), as(this).debug(`[${u}] response error (${$})`, El({ + retryOfRequestLogID: s, + url: y.url, + status: y.status, + headers: y.headers, + durationMs: v - p + })), this.retryRequest(r, e, s ?? u, y.headers); + } + const _ = C ? "error; no more retries left" : "error; not retryable"; + as(this).info(`${w} - ${_}`); + const k = await y.text().catch(($) => Ew($).message), A = nq(k), T = A ? void 0 : k; + throw as(this).debug(`[${u}] response error (${_})`, El({ + retryOfRequestLogID: s, + url: y.url, + status: y.status, + headers: y.headers, + message: T, + durationMs: Date.now() - p + })), this.makeStatusError(y.status, A, T, y.headers); + } + return as(this).info(w), as(this).debug(`[${u}] response start`, El({ + retryOfRequestLogID: s, + url: y.url, + status: y.status, + headers: y.headers, + durationMs: v - p + })), { response: y, options: r, controller: g, requestLogID: u, retryOfRequestLogID: s, startTime: p }; + } + getAPIList(t, e, s) { + return this.requestAPIList(e, { method: "get", path: t, ...s }); + } + requestAPIList(t, e) { + const s = this.makeRequest(e, null, void 0); + return new Eq(this, s, t); + } + async fetchWithTimeout(t, e, s, r) { + const { signal: i, method: a, ...o } = e || {}; + i && i.addEventListener("abort", () => r.abort()); + const c = setTimeout(() => r.abort(), s), u = globalThis.ReadableStream && o.body instanceof globalThis.ReadableStream || typeof o.body == "object" && o.body !== null && Symbol.asyncIterator in o.body, f = { + signal: r.signal, + ...u ? { duplex: "half" } : {}, + method: "GET", + ...o + }; + a && (f.method = a.toUpperCase()); + try { + return await this.fetch.call(void 0, t, f); + } finally { + clearTimeout(c); + } + } + async shouldRetry(t) { + const e = t.headers.get("x-should-retry"); + return e === "true" ? !0 : e === "false" ? !1 : t.status === 408 || t.status === 409 || t.status === 429 || t.status >= 500; + } + async retryRequest(t, e, s, r) { + let i; + const a = r == null ? void 0 : r.get("retry-after-ms"); + if (a) { + const c = parseFloat(a); + Number.isNaN(c) || (i = c); + } + const o = r == null ? void 0 : r.get("retry-after"); + if (o && !i) { + const c = parseFloat(o); + Number.isNaN(c) ? i = Date.parse(o) - Date.now() : i = c * 1e3; + } + if (!(i && 0 <= i && i < 60 * 1e3)) { + const c = t.maxRetries ?? this.maxRetries; + i = this.calculateDefaultRetryTimeoutMillis(e, c); + } + return await Ip(i), this.makeRequest(t, e - 1, s); + } + calculateDefaultRetryTimeoutMillis(t, e) { + const i = e - t, a = Math.min(0.5 * Math.pow(2, i), 8), o = 1 - Math.random() * 0.25; + return a * o * 1e3; + } + async buildRequest(t, { retryCount: e = 0 } = {}) { + const s = { ...t }, { method: r, path: i, query: a, defaultBaseURL: o } = s, c = this.buildURL(i, a, o); + "timeout" in s && tq("timeout", s.timeout), s.timeout = s.timeout ?? this.timeout; + const { bodyHeaders: u, body: f } = this.buildBody({ options: s }), p = await this.buildHeaders({ options: t, method: r, bodyHeaders: u, retryCount: e }); + return { req: { + method: r, + headers: p, + ...s.signal && { signal: s.signal }, + ...globalThis.ReadableStream && f instanceof globalThis.ReadableStream && { duplex: "half" }, + ...f && { body: f }, + ...this.fetchOptions ?? {}, + ...s.fetchOptions ?? {} + }, url: c, timeout: s.timeout }; + } + async buildHeaders({ options: t, method: e, bodyHeaders: s, retryCount: r }) { + let i = {}; + this.idempotencyHeader && e !== "get" && (t.idempotencyKey || (t.idempotencyKey = this.defaultIdempotencyKey()), i[this.idempotencyHeader] = t.idempotencyKey); + const a = ke([ + i, + { + Accept: "application/json", + "User-Agent": this.getUserAgent(), + "X-Stainless-Retry-Count": String(r), + ...t.timeout ? { "X-Stainless-Timeout": String(Math.trunc(t.timeout / 1e3)) } : {}, + ...oq(), + "OpenAI-Organization": this.organization, + "OpenAI-Project": this.project + }, + await this.authHeaders(t), + this._options.defaultHeaders, + s, + t.headers + ]); + return this.validateHeaders(a), a.values; + } + buildBody({ options: { body: t, headers: e } }) { + if (!t) + return { bodyHeaders: void 0, body: void 0 }; + const s = ke([e]); + return ( + // Pass raw type verbatim + ArrayBuffer.isView(t) || t instanceof ArrayBuffer || t instanceof DataView || typeof t == "string" && // Preserve legacy string encoding behavior for now + s.values.has("content-type") || // `Blob` is superset of `File` + globalThis.Blob && t instanceof globalThis.Blob || // `FormData` -> `multipart/form-data` + t instanceof FormData || // `URLSearchParams` -> `application/x-www-form-urlencoded` + t instanceof URLSearchParams || // Send chunked stream (each chunk has own `length`) + globalThis.ReadableStream && t instanceof globalThis.ReadableStream ? { bodyHeaders: void 0, body: t } : typeof t == "object" && (Symbol.asyncIterator in t || Symbol.iterator in t && "next" in t && typeof t.next == "function") ? { bodyHeaders: void 0, body: YT(t) } : z(this, Qm, "f").call(this, { body: t, headers: s }) + ); + } +} +zC = wt, Qm = /* @__PURE__ */ new WeakMap(), Lw = /* @__PURE__ */ new WeakSet(), h9 = function() { + return this.baseURL !== "https://api.openai.com/v1"; +}; +wt.OpenAI = zC; +wt.DEFAULT_TIMEOUT = 6e5; +wt.OpenAIError = De; +wt.APIError = cs; +wt.APIConnectionError = uv; +wt.APIConnectionTimeoutError = CC; +wt.APIUserAbortError = Sr; +wt.NotFoundError = FT; +wt.ConflictError = VT; +wt.RateLimitError = UT; +wt.BadRequestError = DT; +wt.AuthenticationError = LT; +wt.InternalServerError = qT; +wt.PermissionDeniedError = jT; +wt.UnprocessableEntityError = BT; +wt.InvalidWebhookSignatureError = Mh; +wt.toFile = Nq; +wt.Completions = BA; +wt.Chat = $C; +wt.Embeddings = zA; +wt.Files = WA; +wt.Images = QA; +wt.Audio = Mp; +wt.Moderations = e9; +wt.Models = JA; +wt.FineTuning = Jd; +wt.Graders = BC; +wt.VectorStores = bv; +wt.Webhooks = d9; +wt.Beta = Qd; +wt.Batches = IA; +wt.Uploads = qC; +wt.Responses = vv; +wt.Realtime = yv; +wt.Conversations = MC; +wt.Evals = LC; +wt.Containers = OC; +wt.Videos = c9; +new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789"); +var n_; +(function(n) { + n.STRING = "string", n.NUMBER = "number", n.INTEGER = "integer", n.BOOLEAN = "boolean", n.ARRAY = "array", n.OBJECT = "object"; +})(n_ || (n_ = {})); +/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +var s_; +(function(n) { + n.LANGUAGE_UNSPECIFIED = "language_unspecified", n.PYTHON = "python"; +})(s_ || (s_ = {})); +var r_; +(function(n) { + n.OUTCOME_UNSPECIFIED = "outcome_unspecified", n.OUTCOME_OK = "outcome_ok", n.OUTCOME_FAILED = "outcome_failed", n.OUTCOME_DEADLINE_EXCEEDED = "outcome_deadline_exceeded"; +})(r_ || (r_ = {})); +/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const i_ = ["user", "model", "function", "system"]; +var a_; +(function(n) { + n.HARM_CATEGORY_UNSPECIFIED = "HARM_CATEGORY_UNSPECIFIED", n.HARM_CATEGORY_HATE_SPEECH = "HARM_CATEGORY_HATE_SPEECH", n.HARM_CATEGORY_SEXUALLY_EXPLICIT = "HARM_CATEGORY_SEXUALLY_EXPLICIT", n.HARM_CATEGORY_HARASSMENT = "HARM_CATEGORY_HARASSMENT", n.HARM_CATEGORY_DANGEROUS_CONTENT = "HARM_CATEGORY_DANGEROUS_CONTENT", n.HARM_CATEGORY_CIVIC_INTEGRITY = "HARM_CATEGORY_CIVIC_INTEGRITY"; +})(a_ || (a_ = {})); +var o_; +(function(n) { + n.HARM_BLOCK_THRESHOLD_UNSPECIFIED = "HARM_BLOCK_THRESHOLD_UNSPECIFIED", n.BLOCK_LOW_AND_ABOVE = "BLOCK_LOW_AND_ABOVE", n.BLOCK_MEDIUM_AND_ABOVE = "BLOCK_MEDIUM_AND_ABOVE", n.BLOCK_ONLY_HIGH = "BLOCK_ONLY_HIGH", n.BLOCK_NONE = "BLOCK_NONE"; +})(o_ || (o_ = {})); +var l_; +(function(n) { + n.HARM_PROBABILITY_UNSPECIFIED = "HARM_PROBABILITY_UNSPECIFIED", n.NEGLIGIBLE = "NEGLIGIBLE", n.LOW = "LOW", n.MEDIUM = "MEDIUM", n.HIGH = "HIGH"; +})(l_ || (l_ = {})); +var c_; +(function(n) { + n.BLOCKED_REASON_UNSPECIFIED = "BLOCKED_REASON_UNSPECIFIED", n.SAFETY = "SAFETY", n.OTHER = "OTHER"; +})(c_ || (c_ = {})); +var af; +(function(n) { + n.FINISH_REASON_UNSPECIFIED = "FINISH_REASON_UNSPECIFIED", n.STOP = "STOP", n.MAX_TOKENS = "MAX_TOKENS", n.SAFETY = "SAFETY", n.RECITATION = "RECITATION", n.LANGUAGE = "LANGUAGE", n.BLOCKLIST = "BLOCKLIST", n.PROHIBITED_CONTENT = "PROHIBITED_CONTENT", n.SPII = "SPII", n.MALFORMED_FUNCTION_CALL = "MALFORMED_FUNCTION_CALL", n.OTHER = "OTHER"; +})(af || (af = {})); +var u_; +(function(n) { + n.TASK_TYPE_UNSPECIFIED = "TASK_TYPE_UNSPECIFIED", n.RETRIEVAL_QUERY = "RETRIEVAL_QUERY", n.RETRIEVAL_DOCUMENT = "RETRIEVAL_DOCUMENT", n.SEMANTIC_SIMILARITY = "SEMANTIC_SIMILARITY", n.CLASSIFICATION = "CLASSIFICATION", n.CLUSTERING = "CLUSTERING"; +})(u_ || (u_ = {})); +var d_; +(function(n) { + n.MODE_UNSPECIFIED = "MODE_UNSPECIFIED", n.AUTO = "AUTO", n.ANY = "ANY", n.NONE = "NONE"; +})(d_ || (d_ = {})); +var h_; +(function(n) { + n.MODE_UNSPECIFIED = "MODE_UNSPECIFIED", n.MODE_DYNAMIC = "MODE_DYNAMIC"; +})(h_ || (h_ = {})); +/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +class ms extends Error { + constructor(t) { + super(`[GoogleGenerativeAI Error]: ${t}`); + } +} +class au extends ms { + constructor(t, e) { + super(t), this.response = e; + } +} +class f9 extends ms { + constructor(t, e, s, r) { + super(t), this.status = e, this.statusText = s, this.errorDetails = r; + } +} +class sl extends ms { +} +class p9 extends ms { +} +/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const nz = "https://generativelanguage.googleapis.com", sz = "v1beta", rz = "0.24.1", iz = "genai-js"; +var Mc; +(function(n) { + n.GENERATE_CONTENT = "generateContent", n.STREAM_GENERATE_CONTENT = "streamGenerateContent", n.COUNT_TOKENS = "countTokens", n.EMBED_CONTENT = "embedContent", n.BATCH_EMBED_CONTENTS = "batchEmbedContents"; +})(Mc || (Mc = {})); +class az { + constructor(t, e, s, r, i) { + this.model = t, this.task = e, this.apiKey = s, this.stream = r, this.requestOptions = i; + } + toString() { + var t, e; + const s = ((t = this.requestOptions) === null || t === void 0 ? void 0 : t.apiVersion) || sz; + let i = `${((e = this.requestOptions) === null || e === void 0 ? void 0 : e.baseUrl) || nz}/${s}/${this.model}:${this.task}`; + return this.stream && (i += "?alt=sse"), i; + } +} +function oz(n) { + const t = []; + return n != null && n.apiClient && t.push(n.apiClient), t.push(`${iz}/${rz}`), t.join(" "); +} +async function lz(n) { + var t; + const e = new Headers(); + e.append("Content-Type", "application/json"), e.append("x-goog-api-client", oz(n.requestOptions)), e.append("x-goog-api-key", n.apiKey); + let s = (t = n.requestOptions) === null || t === void 0 ? void 0 : t.customHeaders; + if (s) { + if (!(s instanceof Headers)) + try { + s = new Headers(s); + } catch (r) { + throw new sl(`unable to convert customHeaders value ${JSON.stringify(s)} to Headers: ${r.message}`); + } + for (const [r, i] of s.entries()) { + if (r === "x-goog-api-key") + throw new sl(`Cannot set reserved header name ${r}`); + if (r === "x-goog-api-client") + throw new sl(`Header name ${r} can only be set using the apiClient field`); + e.append(r, i); + } + } + return e; +} +async function cz(n, t, e, s, r, i) { + const a = new az(n, t, e, s, i); + return { + url: a.toString(), + fetchOptions: Object.assign(Object.assign({}, fz(i)), { method: "POST", headers: await lz(a), body: r }) + }; +} +async function Dp(n, t, e, s, r, i = {}, a = fetch) { + const { url: o, fetchOptions: c } = await cz(n, t, e, s, r, i); + return uz(o, c, a); +} +async function uz(n, t, e = fetch) { + let s; + try { + s = await e(n, t); + } catch (r) { + dz(r, n); + } + return s.ok || await hz(s, n), s; +} +function dz(n, t) { + let e = n; + throw e.name === "AbortError" ? (e = new p9(`Request aborted when fetching ${t.toString()}: ${n.message}`), e.stack = n.stack) : n instanceof f9 || n instanceof sl || (e = new ms(`Error fetching from ${t.toString()}: ${n.message}`), e.stack = n.stack), e; +} +async function hz(n, t) { + let e = "", s; + try { + const r = await n.json(); + e = r.error.message, r.error.details && (e += ` ${JSON.stringify(r.error.details)}`, s = r.error.details); + } catch { + } + throw new f9(`Error fetching from ${t.toString()}: [${n.status} ${n.statusText}] ${e}`, n.status, n.statusText, s); +} +function fz(n) { + const t = {}; + if ((n == null ? void 0 : n.signal) !== void 0 || (n == null ? void 0 : n.timeout) >= 0) { + const e = new AbortController(); + (n == null ? void 0 : n.timeout) >= 0 && setTimeout(() => e.abort(), n.timeout), n != null && n.signal && n.signal.addEventListener("abort", () => { + e.abort(); + }), t.signal = e.signal; + } + return t; +} +/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +function HC(n) { + return n.text = () => { + if (n.candidates && n.candidates.length > 0) { + if (n.candidates.length > 1 && console.warn(`This response had ${n.candidates.length} candidates. Returning text from the first candidate only. Access response.candidates directly to use the other candidates.`), Jm(n.candidates[0])) + throw new au(`${go(n)}`, n); + return pz(n); + } else if (n.promptFeedback) + throw new au(`Text not available. ${go(n)}`, n); + return ""; + }, n.functionCall = () => { + if (n.candidates && n.candidates.length > 0) { + if (n.candidates.length > 1 && console.warn(`This response had ${n.candidates.length} candidates. Returning function calls from the first candidate only. Access response.candidates directly to use the other candidates.`), Jm(n.candidates[0])) + throw new au(`${go(n)}`, n); + return console.warn("response.functionCall() is deprecated. Use response.functionCalls() instead."), f_(n)[0]; + } else if (n.promptFeedback) + throw new au(`Function call not available. ${go(n)}`, n); + }, n.functionCalls = () => { + if (n.candidates && n.candidates.length > 0) { + if (n.candidates.length > 1 && console.warn(`This response had ${n.candidates.length} candidates. Returning function calls from the first candidate only. Access response.candidates directly to use the other candidates.`), Jm(n.candidates[0])) + throw new au(`${go(n)}`, n); + return f_(n); + } else if (n.promptFeedback) + throw new au(`Function call not available. ${go(n)}`, n); + }, n; +} +function pz(n) { + var t, e, s, r; + const i = []; + if (!((e = (t = n.candidates) === null || t === void 0 ? void 0 : t[0].content) === null || e === void 0) && e.parts) + for (const a of (r = (s = n.candidates) === null || s === void 0 ? void 0 : s[0].content) === null || r === void 0 ? void 0 : r.parts) + a.text && i.push(a.text), a.executableCode && i.push("\n```" + a.executableCode.language + ` +` + a.executableCode.code + "\n```\n"), a.codeExecutionResult && i.push("\n```\n" + a.codeExecutionResult.output + "\n```\n"); + return i.length > 0 ? i.join("") : ""; +} +function f_(n) { + var t, e, s, r; + const i = []; + if (!((e = (t = n.candidates) === null || t === void 0 ? void 0 : t[0].content) === null || e === void 0) && e.parts) + for (const a of (r = (s = n.candidates) === null || s === void 0 ? void 0 : s[0].content) === null || r === void 0 ? void 0 : r.parts) + a.functionCall && i.push(a.functionCall); + if (i.length > 0) + return i; +} +const mz = [ + af.RECITATION, + af.SAFETY, + af.LANGUAGE +]; +function Jm(n) { + return !!n.finishReason && mz.includes(n.finishReason); +} +function go(n) { + var t, e, s; + let r = ""; + if ((!n.candidates || n.candidates.length === 0) && n.promptFeedback) + r += "Response was blocked", !((t = n.promptFeedback) === null || t === void 0) && t.blockReason && (r += ` due to ${n.promptFeedback.blockReason}`), !((e = n.promptFeedback) === null || e === void 0) && e.blockReasonMessage && (r += `: ${n.promptFeedback.blockReasonMessage}`); + else if (!((s = n.candidates) === null || s === void 0) && s[0]) { + const i = n.candidates[0]; + Jm(i) && (r += `Candidate was blocked due to ${i.finishReason}`, i.finishMessage && (r += `: ${i.finishMessage}`)); + } + return r; +} +function vf(n) { + return this instanceof vf ? (this.v = n, this) : new vf(n); +} +function gz(n, t, e) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var s = e.apply(n, t || []), r, i = []; + return r = {}, a("next"), a("throw"), a("return"), r[Symbol.asyncIterator] = function() { + return this; + }, r; + function a(g) { + s[g] && (r[g] = function(y) { + return new Promise(function(v, b) { + i.push([g, y, v, b]) > 1 || o(g, y); + }); + }); + } + function o(g, y) { + try { + c(s[g](y)); + } catch (v) { + p(i[0][3], v); + } + } + function c(g) { + g.value instanceof vf ? Promise.resolve(g.value.v).then(u, f) : p(i[0][2], g); + } + function u(g) { + o("next", g); + } + function f(g) { + o("throw", g); + } + function p(g, y) { + g(y), i.shift(), i.length && o(i[0][0], i[0][1]); + } +} +/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const p_ = /^data\: (.*)(?:\n\n|\r\r|\r\n\r\n)/; +function yz(n) { + const t = n.body.pipeThrough(new TextDecoderStream("utf8", { fatal: !0 })), e = wz(t), [s, r] = e.tee(); + return { + stream: bz(s), + response: vz(r) + }; +} +async function vz(n) { + const t = [], e = n.getReader(); + for (; ; ) { + const { done: s, value: r } = await e.read(); + if (s) + return HC(xz(t)); + t.push(r); + } +} +function bz(n) { + return gz(this, arguments, function* () { + const e = n.getReader(); + for (; ; ) { + const { value: s, done: r } = yield vf(e.read()); + if (r) + break; + yield yield vf(HC(s)); + } + }); +} +function wz(n) { + const t = n.getReader(); + return new ReadableStream({ + start(s) { + let r = ""; + return i(); + function i() { + return t.read().then(({ value: a, done: o }) => { + if (o) { + if (r.trim()) { + s.error(new ms("Failed to parse stream")); + return; + } + s.close(); + return; + } + r += a; + let c = r.match(p_), u; + for (; c; ) { + try { + u = JSON.parse(c[1]); + } catch { + s.error(new ms(`Error parsing JSON response: "${c[1]}"`)); + return; + } + s.enqueue(u), r = r.substring(c[0].length), c = r.match(p_); + } + return i(); + }).catch((a) => { + let o = a; + throw o.stack = a.stack, o.name === "AbortError" ? o = new p9("Request aborted when reading from the stream") : o = new ms("Error reading from the stream"), o; + }); + } + } + }); +} +function xz(n) { + const t = n[n.length - 1], e = { + promptFeedback: t == null ? void 0 : t.promptFeedback + }; + for (const s of n) { + if (s.candidates) { + let r = 0; + for (const i of s.candidates) + if (e.candidates || (e.candidates = []), e.candidates[r] || (e.candidates[r] = { + index: r + }), e.candidates[r].citationMetadata = i.citationMetadata, e.candidates[r].groundingMetadata = i.groundingMetadata, e.candidates[r].finishReason = i.finishReason, e.candidates[r].finishMessage = i.finishMessage, e.candidates[r].safetyRatings = i.safetyRatings, i.content && i.content.parts) { + e.candidates[r].content || (e.candidates[r].content = { + role: i.content.role || "user", + parts: [] + }); + const a = {}; + for (const o of i.content.parts) + o.text && (a.text = o.text), o.functionCall && (a.functionCall = o.functionCall), o.executableCode && (a.executableCode = o.executableCode), o.codeExecutionResult && (a.codeExecutionResult = o.codeExecutionResult), Object.keys(a).length === 0 && (a.text = ""), e.candidates[r].content.parts.push(a); + } + r++; + } + s.usageMetadata && (e.usageMetadata = s.usageMetadata); + } + return e; +} +/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +async function m9(n, t, e, s) { + const r = await Dp( + t, + Mc.STREAM_GENERATE_CONTENT, + n, + /* stream */ + !0, + JSON.stringify(e), + s + ); + return yz(r); +} +async function g9(n, t, e, s) { + const i = await (await Dp( + t, + Mc.GENERATE_CONTENT, + n, + /* stream */ + !1, + JSON.stringify(e), + s + )).json(); + return { + response: HC(i) + }; +} +/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +function y9(n) { + if (n != null) { + if (typeof n == "string") + return { role: "system", parts: [{ text: n }] }; + if (n.text) + return { role: "system", parts: [n] }; + if (n.parts) + return n.role ? n : { role: "system", parts: n.parts }; + } +} +function bf(n) { + let t = []; + if (typeof n == "string") + t = [{ text: n }]; + else + for (const e of n) + typeof e == "string" ? t.push({ text: e }) : t.push(e); + return Cz(t); +} +function Cz(n) { + const t = { role: "user", parts: [] }, e = { role: "function", parts: [] }; + let s = !1, r = !1; + for (const i of n) + "functionResponse" in i ? (e.parts.push(i), r = !0) : (t.parts.push(i), s = !0); + if (s && r) + throw new ms("Within a single message, FunctionResponse cannot be mixed with other type of part in the request for sending chat message."); + if (!s && !r) + throw new ms("No content is provided for sending chat message."); + return s ? t : e; +} +function _z(n, t) { + var e; + let s = { + model: t == null ? void 0 : t.model, + generationConfig: t == null ? void 0 : t.generationConfig, + safetySettings: t == null ? void 0 : t.safetySettings, + tools: t == null ? void 0 : t.tools, + toolConfig: t == null ? void 0 : t.toolConfig, + systemInstruction: t == null ? void 0 : t.systemInstruction, + cachedContent: (e = t == null ? void 0 : t.cachedContent) === null || e === void 0 ? void 0 : e.name, + contents: [] + }; + const r = n.generateContentRequest != null; + if (n.contents) { + if (r) + throw new sl("CountTokensRequest must have one of contents or generateContentRequest, not both."); + s.contents = n.contents; + } else if (r) + s = Object.assign(Object.assign({}, s), n.generateContentRequest); + else { + const i = bf(n); + s.contents = [i]; + } + return { generateContentRequest: s }; +} +function m_(n) { + let t; + return n.contents ? t = n : t = { contents: [bf(n)] }, n.systemInstruction && (t.systemInstruction = y9(n.systemInstruction)), t; +} +function Sz(n) { + return typeof n == "string" || Array.isArray(n) ? { content: bf(n) } : n; +} +/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const g_ = [ + "text", + "inlineData", + "functionCall", + "functionResponse", + "executableCode", + "codeExecutionResult" +], Ez = { + user: ["text", "inlineData"], + function: ["functionResponse"], + model: ["text", "functionCall", "executableCode", "codeExecutionResult"], + // System instructions shouldn't be in history anyway. + system: ["text"] +}; +function kz(n) { + let t = !1; + for (const e of n) { + const { role: s, parts: r } = e; + if (!t && s !== "user") + throw new ms(`First content should be with role 'user', got ${s}`); + if (!i_.includes(s)) + throw new ms(`Each item should include role field. Got ${s} but valid roles are: ${JSON.stringify(i_)}`); + if (!Array.isArray(r)) + throw new ms("Content should have 'parts' property with an array of Parts"); + if (r.length === 0) + throw new ms("Each Content should have at least one part"); + const i = { + text: 0, + inlineData: 0, + functionCall: 0, + functionResponse: 0, + fileData: 0, + executableCode: 0, + codeExecutionResult: 0 + }; + for (const o of r) + for (const c of g_) + c in o && (i[c] += 1); + const a = Ez[s]; + for (const o of g_) + if (!a.includes(o) && i[o] > 0) + throw new ms(`Content with role '${s}' can't contain '${o}' part`); + t = !0; + } +} +function y_(n) { + var t; + if (n.candidates === void 0 || n.candidates.length === 0) + return !1; + const e = (t = n.candidates[0]) === null || t === void 0 ? void 0 : t.content; + if (e === void 0 || e.parts === void 0 || e.parts.length === 0) + return !1; + for (const s of e.parts) + if (s === void 0 || Object.keys(s).length === 0 || s.text !== void 0 && s.text === "") + return !1; + return !0; +} +/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const v_ = "SILENT_ERROR"; +class Tz { + constructor(t, e, s, r = {}) { + this.model = e, this.params = s, this._requestOptions = r, this._history = [], this._sendPromise = Promise.resolve(), this._apiKey = t, s != null && s.history && (kz(s.history), this._history = s.history); + } + /** + * Gets the chat history so far. Blocked prompts are not added to history. + * Blocked candidates are not added to history, nor are the prompts that + * generated them. + */ + async getHistory() { + return await this._sendPromise, this._history; + } + /** + * Sends a chat message and receives a non-streaming + * {@link GenerateContentResult}. + * + * Fields set in the optional {@link SingleRequestOptions} parameter will + * take precedence over the {@link RequestOptions} values provided to + * {@link GoogleGenerativeAI.getGenerativeModel }. + */ + async sendMessage(t, e = {}) { + var s, r, i, a, o, c; + await this._sendPromise; + const u = bf(t), f = { + safetySettings: (s = this.params) === null || s === void 0 ? void 0 : s.safetySettings, + generationConfig: (r = this.params) === null || r === void 0 ? void 0 : r.generationConfig, + tools: (i = this.params) === null || i === void 0 ? void 0 : i.tools, + toolConfig: (a = this.params) === null || a === void 0 ? void 0 : a.toolConfig, + systemInstruction: (o = this.params) === null || o === void 0 ? void 0 : o.systemInstruction, + cachedContent: (c = this.params) === null || c === void 0 ? void 0 : c.cachedContent, + contents: [...this._history, u] + }, p = Object.assign(Object.assign({}, this._requestOptions), e); + let g; + return this._sendPromise = this._sendPromise.then(() => g9(this._apiKey, this.model, f, p)).then((y) => { + var v; + if (y_(y.response)) { + this._history.push(u); + const b = Object.assign({ + parts: [], + // Response seems to come back without a role set. + role: "model" + }, (v = y.response.candidates) === null || v === void 0 ? void 0 : v[0].content); + this._history.push(b); + } else { + const b = go(y.response); + b && console.warn(`sendMessage() was unsuccessful. ${b}. Inspect response object for details.`); + } + g = y; + }).catch((y) => { + throw this._sendPromise = Promise.resolve(), y; + }), await this._sendPromise, g; + } + /** + * Sends a chat message and receives the response as a + * {@link GenerateContentStreamResult} containing an iterable stream + * and a response promise. + * + * Fields set in the optional {@link SingleRequestOptions} parameter will + * take precedence over the {@link RequestOptions} values provided to + * {@link GoogleGenerativeAI.getGenerativeModel }. + */ + async sendMessageStream(t, e = {}) { + var s, r, i, a, o, c; + await this._sendPromise; + const u = bf(t), f = { + safetySettings: (s = this.params) === null || s === void 0 ? void 0 : s.safetySettings, + generationConfig: (r = this.params) === null || r === void 0 ? void 0 : r.generationConfig, + tools: (i = this.params) === null || i === void 0 ? void 0 : i.tools, + toolConfig: (a = this.params) === null || a === void 0 ? void 0 : a.toolConfig, + systemInstruction: (o = this.params) === null || o === void 0 ? void 0 : o.systemInstruction, + cachedContent: (c = this.params) === null || c === void 0 ? void 0 : c.cachedContent, + contents: [...this._history, u] + }, p = Object.assign(Object.assign({}, this._requestOptions), e), g = m9(this._apiKey, this.model, f, p); + return this._sendPromise = this._sendPromise.then(() => g).catch((y) => { + throw new Error(v_); + }).then((y) => y.response).then((y) => { + if (y_(y)) { + this._history.push(u); + const v = Object.assign({}, y.candidates[0].content); + v.role || (v.role = "model"), this._history.push(v); + } else { + const v = go(y); + v && console.warn(`sendMessageStream() was unsuccessful. ${v}. Inspect response object for details.`); + } + }).catch((y) => { + y.message !== v_ && console.error(y); + }), g; + } +} +/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +async function Az(n, t, e, s) { + return (await Dp(t, Mc.COUNT_TOKENS, n, !1, JSON.stringify(e), s)).json(); +} +/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +async function Pz(n, t, e, s) { + return (await Dp(t, Mc.EMBED_CONTENT, n, !1, JSON.stringify(e), s)).json(); +} +async function Nz(n, t, e, s) { + const r = e.requests.map((a) => Object.assign(Object.assign({}, a), { model: t })); + return (await Dp(t, Mc.BATCH_EMBED_CONTENTS, n, !1, JSON.stringify({ requests: r }), s)).json(); +} +/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +class b_ { + constructor(t, e, s = {}) { + this.apiKey = t, this._requestOptions = s, e.model.includes("/") ? this.model = e.model : this.model = `models/${e.model}`, this.generationConfig = e.generationConfig || {}, this.safetySettings = e.safetySettings || [], this.tools = e.tools, this.toolConfig = e.toolConfig, this.systemInstruction = y9(e.systemInstruction), this.cachedContent = e.cachedContent; + } + /** + * Makes a single non-streaming call to the model + * and returns an object containing a single {@link GenerateContentResponse}. + * + * Fields set in the optional {@link SingleRequestOptions} parameter will + * take precedence over the {@link RequestOptions} values provided to + * {@link GoogleGenerativeAI.getGenerativeModel }. + */ + async generateContent(t, e = {}) { + var s; + const r = m_(t), i = Object.assign(Object.assign({}, this._requestOptions), e); + return g9(this.apiKey, this.model, Object.assign({ generationConfig: this.generationConfig, safetySettings: this.safetySettings, tools: this.tools, toolConfig: this.toolConfig, systemInstruction: this.systemInstruction, cachedContent: (s = this.cachedContent) === null || s === void 0 ? void 0 : s.name }, r), i); + } + /** + * Makes a single streaming call to the model and returns an object + * containing an iterable stream that iterates over all chunks in the + * streaming response as well as a promise that returns the final + * aggregated response. + * + * Fields set in the optional {@link SingleRequestOptions} parameter will + * take precedence over the {@link RequestOptions} values provided to + * {@link GoogleGenerativeAI.getGenerativeModel }. + */ + async generateContentStream(t, e = {}) { + var s; + const r = m_(t), i = Object.assign(Object.assign({}, this._requestOptions), e); + return m9(this.apiKey, this.model, Object.assign({ generationConfig: this.generationConfig, safetySettings: this.safetySettings, tools: this.tools, toolConfig: this.toolConfig, systemInstruction: this.systemInstruction, cachedContent: (s = this.cachedContent) === null || s === void 0 ? void 0 : s.name }, r), i); + } + /** + * Gets a new {@link ChatSession} instance which can be used for + * multi-turn chats. + */ + startChat(t) { + var e; + return new Tz(this.apiKey, this.model, Object.assign({ generationConfig: this.generationConfig, safetySettings: this.safetySettings, tools: this.tools, toolConfig: this.toolConfig, systemInstruction: this.systemInstruction, cachedContent: (e = this.cachedContent) === null || e === void 0 ? void 0 : e.name }, t), this._requestOptions); + } + /** + * Counts the tokens in the provided request. + * + * Fields set in the optional {@link SingleRequestOptions} parameter will + * take precedence over the {@link RequestOptions} values provided to + * {@link GoogleGenerativeAI.getGenerativeModel }. + */ + async countTokens(t, e = {}) { + const s = _z(t, { + model: this.model, + generationConfig: this.generationConfig, + safetySettings: this.safetySettings, + tools: this.tools, + toolConfig: this.toolConfig, + systemInstruction: this.systemInstruction, + cachedContent: this.cachedContent + }), r = Object.assign(Object.assign({}, this._requestOptions), e); + return Az(this.apiKey, this.model, s, r); + } + /** + * Embeds the provided content. + * + * Fields set in the optional {@link SingleRequestOptions} parameter will + * take precedence over the {@link RequestOptions} values provided to + * {@link GoogleGenerativeAI.getGenerativeModel }. + */ + async embedContent(t, e = {}) { + const s = Sz(t), r = Object.assign(Object.assign({}, this._requestOptions), e); + return Pz(this.apiKey, this.model, s, r); + } + /** + * Embeds an array of {@link EmbedContentRequest}s. + * + * Fields set in the optional {@link SingleRequestOptions} parameter will + * take precedence over the {@link RequestOptions} values provided to + * {@link GoogleGenerativeAI.getGenerativeModel }. + */ + async batchEmbedContents(t, e = {}) { + const s = Object.assign(Object.assign({}, this._requestOptions), e); + return Nz(this.apiKey, this.model, t, s); + } +} +/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +class $z { + constructor(t) { + this.apiKey = t; + } + /** + * Gets a {@link GenerativeModel} instance for the provided model name. + */ + getGenerativeModel(t, e) { + if (!t.model) + throw new ms("Must provide a model name. Example: genai.getGenerativeModel({ model: 'my-model-name' })"); + return new b_(this.apiKey, t, e); + } + /** + * Creates a {@link GenerativeModel} instance from provided content cache. + */ + getGenerativeModelFromCachedContent(t, e, s) { + if (!t.name) + throw new sl("Cached content must contain a `name` field."); + if (!t.model) + throw new sl("Cached content must contain a `model` field."); + const r = ["model", "systemInstruction"]; + for (const a of r) + if (e != null && e[a] && t[a] && (e == null ? void 0 : e[a]) !== t[a]) { + if (a === "model") { + const o = e.model.startsWith("models/") ? e.model.replace("models/", "") : e.model, c = t.model.startsWith("models/") ? t.model.replace("models/", "") : t.model; + if (o === c) + continue; + } + throw new sl(`Different value for "${a}" specified in modelParams (${e[a]}) and cachedContent (${t[a]})`); + } + const i = Object.assign(Object.assign({}, e), { model: t.model, tools: t.tools, toolConfig: t.toolConfig, systemInstruction: t.systemInstruction, cachedContent: t }); + return new b_(this.apiKey, i, s); + } +} +const tr = { + debug: (n, t) => console.debug(`[DEBUG] ${n}`, t), + info: (n, t) => console.info(`[INFO] ${n}`, t), + warn: (n, t) => console.warn(`[WARN] ${n}`, t), + error: (n, t) => console.error(`[ERROR] ${n}`, t) +}, Rz = async () => { + var n; + try { + const { data: { user: t } } = await ct.auth.getUser(); + if (!t) + return tr.error("No authenticated user found"), null; + const { data: e, error: s } = await ct.from("user_secrets").select("settings").eq("user_id", t.id).maybeSingle(); + if (s) + return tr.error("Error fetching user secrets:", s), null; + const r = e == null ? void 0 : e.settings, i = (n = r == null ? void 0 : r.api_keys) == null ? void 0 : n.google_api_key; + return i || (tr.error("No Google API key found in user secrets. Please add your Google API key in your profile settings."), null); + } catch (t) { + return tr.error("Error getting Google API key:", t), null; + } +}, Iz = async (n) => { + const t = await Rz(); + return t ? new $z(t) : (tr.error("No Google API key found. Please provide an API key or set it in your profile."), null); +}, Oz = (n) => { + var s; + const t = (s = n.split(".").pop()) == null ? void 0 : s.toLowerCase(); + return { + png: "image/png", + jpg: "image/jpeg", + jpeg: "image/jpeg", + webp: "image/webp", + gif: "image/gif" + }[t || ""] || "image/png"; +}, Mz = (n) => new Promise((t, e) => { + const s = new FileReader(); + s.readAsDataURL(n), s.onload = () => { + const i = s.result.split(",")[1]; + t(i); + }, s.onerror = (r) => e(r); +}), Dz = async (n, t, e = "gemini-3-pro-image-preview", s, r, i, a) => { + var u; + const o = await Iz(); + if (!o) + return null; + const c = o.getGenerativeModel({ + model: e, + // @ts-ignore + tools: void 0 + }); + try { + const f = await Promise.all(t.map(async (_) => { + const k = await Mz(_); + return { + inlineData: { + mimeType: Oz(_.name), + data: k + } + }; + })), p = { text: n }, g = [...f, p], y = {}; + let v; + Object.keys(y).length > 0 ? v = await c.generateContent(g, y) : v = await c.generateContent(g); + const b = v.response; + if (tr.debug("Google AI API response structure (editImage):", { + hasResponse: !!b, + hasCandidates: !!(b != null && b.candidates), + candidatesLength: (u = b == null ? void 0 : b.candidates) == null ? void 0 : u.length + }), !b || !b.candidates || b.candidates.length === 0) + throw tr.error("Invalid API response structure - no candidates found (editImage)"), new Error("No candidates returned from Google AI API. The content may have been blocked due to safety filters or other restrictions."); + const w = b.candidates[0]; + if (w.finishReason && w.finishReason !== "STOP") { + const k = { + SAFETY: "Content blocked by safety filters. The prompt contains content that violates Google AI safety policies.", + RECITATION: "Content blocked due to recitation concerns. The generated content may be too similar to existing copyrighted material.", + OTHER: "Content generation stopped for other safety or policy reasons." + }[w.finishReason] || `Content generation stopped. Reason: ${w.finishReason}`; + throw tr.error("Google AI blocked image edit due to safety filters:", { + finishReason: w.finishReason, + rejectionMessage: k + }), new Error(`Request blocked by Google AI: ${k}`); + } + if (!w.content || !w.content.parts) + throw tr.error("Invalid candidate structure - no content parts found (editImage)"), new Error("Invalid response structure from Google AI API - no content parts found."); + const E = w.content.parts; + let x = null, C = null; + for (const _ of E) + if ("inlineData" in _ && _.inlineData) { + const k = atob(_.inlineData.data), A = new Uint8Array(k.length); + for (let T = 0; T < k.length; T++) + A[T] = k.charCodeAt(T); + x = A.buffer; + } else "text" in _ && _.text && (C ? C += " " + _.text.trim() : C = _.text.trim()); + if (x) + return tr.info("Successfully found image data in editImage response", { + hasText: !!C, + textPreview: C == null ? void 0 : C.substring(0, 100) + }), { imageData: x, text: C || void 0 }; + throw C ? (tr.info("Google AI returned text response instead of image (editImage):", { + textResponse: C, + finishReason: w.finishReason + }), new Error(`Google AI returned text instead of image: ${C}`)) : (tr.warn("No image data found in API response parts (editImage)"), new Error("No image data found in API response. The model may not have generated an image.")); + } catch (f) { + throw tr.error("Google AI API error in editImage:", { + error: f.message, + prompt: n.substring(0, 100) + "...", + imageCount: t.length + }), f; + } +}, zn = { + debug: (n, t) => console.debug(`[OPENAI-DEBUG] ${n}`, t), + info: (n, t) => console.info(`[OPENAI-INFO] ${n}`, t), + warn: (n, t) => console.warn(`[OPENAI-WARN] ${n}`, t), + error: (n, t) => console.error(`[OPENAI-ERROR] ${n}`, t) +}, Lz = async () => { + var n; + try { + const { data: { user: t } } = await ct.auth.getUser(); + if (!t) + return zn.error("No authenticated user found"), null; + const { data: e, error: s } = await ct.from("user_secrets").select("settings").eq("user_id", t.id).maybeSingle(); + if (s) + return zn.error("Error fetching user secrets:", s), null; + const r = e == null ? void 0 : e.settings, i = (n = r == null ? void 0 : r.api_keys) == null ? void 0 : n.openai_api_key; + return i || (zn.error("No OpenAI API key found in user secrets. Please add your OpenAI API key in your profile settings."), null); + } catch (t) { + return zn.error("Error getting OpenAI API key:", t), null; + } +}, jz = async (n) => { + const t = await Lz(); + if (!t) + return zn.error("No OpenAI API key found. Please provide an API key or set it in your profile."), null; + try { + return new wt({ + apiKey: t, + dangerouslyAllowBrowser: !0 + // Required for client-side usage + }); + } catch (e) { + return zn.error("Error creating OpenAI client:", e), null; + } +}, v9 = async (n, t, e) => { + try { + const s = await jz(e); + return s ? await n(s) : (zn.warn("OpenAI client not available, using fallback or returning null"), t ?? null); + } catch (s) { + return zn.error("OpenAI operation failed:", s), t ?? null; + } +}, w_ = (n) => new Promise((t, e) => { + const s = new FileReader(); + s.readAsDataURL(n), s.onload = () => { + const i = s.result.split(",")[1]; + t(i); + }, s.onerror = (r) => e(r); +}), x_ = (n) => n.type || "image/jpeg", Fz = async (n, t = "Analyze this image and provide a detailed description and suggest a creative title.", e = "gpt-4o-mini", s) => v9(async (r) => { + var i, a, o; + try { + if (n.length === 0) + return zn.warn("No images provided for analysis"), null; + const c = await Promise.all( + n.map(async (w) => { + const E = await w_(w); + return { + type: "input_image", + image_url: `data:${x_(w)};base64,${E}` + }; + }) + ), u = [ + { type: "input_text", text: t }, + ...c + ], f = await ((i = r.responses) == null ? void 0 : i.create({ + model: e, + input: [ + { + role: "user", + content: u + } + ] + })); + if (!(f != null && f.output_text)) + return zn.warn("No output text returned from OpenAI image analysis"), null; + const p = f.output_text, g = p.split(` +`).filter((w) => w.trim()); + let y = p, v = `Analysis of ${n.length} image${n.length > 1 ? "s" : ""}`, b = -1; + for (let w = 0; w < g.length; w++) { + const E = g[w], x = E.toLowerCase(); + if (x.includes("title:") || x.includes("suggested title:")) { + v = E.replace(/^.*title:\s*/i, "").trim(), b = w; + break; + } + } + return b >= 0 && (y = g.filter((E, x) => x !== b).join(` +`).trim()), zn.info("Successfully analyzed images", { + imageCount: n.length, + descriptionLength: y.length, + title: v.substring(0, 50) + "...", + model: e + }), { description: y, title: v }; + } catch (c) { + zn.error("OpenAI image analysis failed:", { + error: c.message, + model: e, + imageCount: n.length, + promptPreview: t.substring(0, 100) + "..." + }); + try { + zn.info("Falling back to chat completions for image analysis"); + const u = await Promise.all( + n.map(async (w) => { + const E = await w_(w); + return { + type: "image_url", + image_url: { + url: `data:${x_(w)};base64,${E}` + } + }; + }) + ), p = (o = (a = (await r.chat.completions.create({ + model: "gpt-4-vision-preview", + // Use vision model for fallback + messages: [ + { + role: "user", + content: [ + { type: "text", text: t }, + ...u + ] + } + ] + })).choices[0]) == null ? void 0 : a.message) == null ? void 0 : o.content; + if (!p) + return zn.warn("No content returned from fallback image analysis"), null; + const g = p.split(` +`).filter((w) => w.trim()); + let y = p, v = `Analysis of ${n.length} image${n.length > 1 ? "s" : ""}`, b = -1; + for (let w = 0; w < g.length; w++) { + const E = g[w], x = E.toLowerCase(); + if (x.includes("title:") || x.includes("suggested title:")) { + v = E.replace(/^.*title:\s*/i, "").trim(), b = w; + break; + } + } + return b >= 0 && (y = g.filter((E, x) => x !== b).join(` +`).trim()), { description: y, title: v }; + } catch (u) { + throw zn.error("Fallback image analysis also failed:", u.message), c; + } + } +}, null, s), b9 = async (n, t = "whisper-1", e) => v9(async (s) => { + try { + zn.info("Starting audio transcription", { + fileName: n.name, + fileSize: n.size, + fileType: n.type, + model: t + }); + const i = (await s.audio.transcriptions.create({ + file: n, + model: t, + response_format: "verbose_json", + timestamp_granularities: ["word"] + })).text; + return i ? (zn.info("Successfully transcribed audio", { + textLength: i.length, + textPreview: i.substring(0, 100) + "...", + model: t + }), i) : (zn.warn("No text returned from audio transcription"), null); + } catch (r) { + throw zn.error("OpenAI audio transcription failed:", { + error: r.message, + fileName: n.name, + model: t + }), r; + } +}, null, e), Vz = "Analyze this image and provide: 1) A creative, engaging title (max 50 characters), and 2) A detailed description. Format your response with 'Title: [your title]' on the first line, followed by the description on the next lines.", C_ = 30, Bz = [ + { id: "1", name: "Enhance", prompt: "Enhance and improve this image", icon: "✨" }, + { id: "2", name: "Make Artistic", prompt: "Transform this into a beautiful artistic painting", icon: "🎨" }, + { id: "3", name: "Cyberpunk Style", prompt: "Transform this into cyberpunk style with neon colors", icon: "🌆" }, + { id: "4", name: "Fantasy", prompt: "Transform this into a fantasy art style", icon: "🧙‍♂️" }, + { id: "5", name: "Portrait", prompt: "Transform this into a professional portrait", icon: "👤" } +], Uz = kE({ + title: mf().max(100, "Title must be less than 100 characters").optional(), + description: mf().max(1e3, "Description must be less than 1000 characters").optional(), + visible: EE() +}), qz = ({ + open: n, + onOpenChange: t, + pictureId: e, + currentTitle: s, + currentDescription: r, + currentVisible: i, + imageUrl: a, + onUpdateSuccess: o +}) => { + const [c, u] = fe(!1), [f, p] = fe(!1), { user: g } = Qa(), [y, v] = fe(!1), [b, w] = fe(!1), E = An(null), x = An([]), [C, _] = fe([]), [k, A] = fe(/* @__PURE__ */ new Set()), [T, N] = fe(!1), $ = wk({ + resolver: aT(Uz), + defaultValues: { + title: s, + description: r || "", + visible: i + } + }); + Rt(() => { + n && g && (D(), V()); + }, [n, g, e]); + const D = async () => { + if (g) { + N(!0); + try { + const { data: q, error: H } = await ct.from("collections").select("*").eq("user_id", g.id).order("created_at", { ascending: !1 }); + if (H) throw H; + _(q || []); + } catch (q) { + console.error("Error fetching collections:", q), Ee.error(de("Failed to load collections")); + } finally { + N(!1); + } + } + }, V = async () => { + if (g) + try { + const { data: q, error: H } = await ct.from("collection_pictures").select("collection_id").eq("picture_id", e); + if (H) throw H; + const L = new Set(q.map((X) => X.collection_id)); + A(L); + } catch (q) { + console.error("Error fetching picture collections:", q); + } + }, j = async (q) => { + if (!g) return; + const H = k.has(q); + try { + if (H) { + const { error: L } = await ct.from("collection_pictures").delete().eq("collection_id", q).eq("picture_id", e); + if (L) throw L; + A((X) => { + const te = new Set(X); + return te.delete(q), te; + }), Ee.success(de("Removed from collection")); + } else { + const { error: L } = await ct.from("collection_pictures").insert({ + collection_id: q, + picture_id: e + }); + if (L) throw L; + A((X) => /* @__PURE__ */ new Set([...X, q])), Ee.success(de("Added to collection")); + } + } catch (L) { + console.error("Error toggling collection:", L), Ee.error(de("Failed to update collection")); + } + }, B = async (q) => { + var H; + if (g) { + u(!0); + try { + const { error: L } = await ct.from("pictures").update({ + title: ((H = q.title) == null ? void 0 : H.trim()) || null, + description: q.description || null, + visible: q.visible, + updated_at: (/* @__PURE__ */ new Date()).toISOString() + }).eq("id", e).eq("user_id", g.id); + if (L) throw L; + Ee.success(de("Picture updated successfully!")), o(); + } catch (L) { + console.error("Error updating picture:", L), Ee.error(de("Failed to update picture")); + } finally { + u(!1); + } + } + }, W = () => { + $.reset(), t(!1); + }, J = async () => { + if (!a) { + Ee.error(de("No image URL available")); + return; + } + p(!0); + try { + const H = await (await fetch(a)).blob(), L = new File([H], "image.png", { type: H.type || "image/png" }), X = await Fz([L], Vz); + if (!X) { + Ee.error(de("OpenAI API key not configured. Please add your OpenAI API key in your profile settings.")); + return; + } + $.setValue("title", X.title), $.setValue("description", X.description), Ee.success(de("Title and description generated!")); + } catch (q) { + console.error("Error generating metadata:", q), Ee.error(q.message || de("Failed to generate metadata. Please check your OpenAI API key.")); + } finally { + p(!1); + } + }, G = async () => { + if (y) + E.current && E.current.state === "recording" && (E.current.stop(), v(!1)); + else + try { + if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) { + Ee.error(de("Audio recording is not supported in your browser")); + return; + } + const q = await navigator.mediaDevices.getUserMedia({ audio: !0 }), H = { mimeType: "audio/webm" }; + let L; + try { + L = new MediaRecorder(q, H); + } catch { + L = new MediaRecorder(q); + } + E.current = L, x.current = [], L.ondataavailable = (X) => { + X.data.size > 0 && x.current.push(X.data); + }, L.onstop = async () => { + w(!0); + try { + const X = new Blob(x.current, { type: "audio/webm" }), te = new File([X], "recording.webm", { type: "audio/webm" }); + Ee.info(de("Transcribing audio...")); + const Te = await b9(te); + if (Te) { + const Je = ($.getValues("description") || "").trim(), Re = Je ? `${Je} + +${Te}` : Te; + $.setValue("description", Re), Ee.success(de("Audio transcribed successfully!")); + } else + Ee.error(de("Failed to transcribe audio. Please check your OpenAI API key.")); + } catch (X) { + console.error("Error transcribing audio:", X), Ee.error(X.message || de("Failed to transcribe audio")); + } finally { + w(!1), x.current = [], q.getTracks().forEach((X) => X.stop()); + } + }, L.start(), v(!0), Ee.info(de("Recording started... Click again to stop")); + } catch (q) { + console.error("Error accessing microphone:", q), q.name === "NotAllowedError" ? Ee.error(de("Microphone access denied. Please allow microphone access in your browser settings.")) : Ee.error(de("Failed to access microphone") + ": " + q.message); + } + }; + return /* @__PURE__ */ h.jsx(sC, { open: n, onOpenChange: W, children: /* @__PURE__ */ h.jsxs(Xy, { className: "max-w-2xl max-h-[80vh] overflow-y-auto", children: [ + /* @__PURE__ */ h.jsx(Qy, { children: /* @__PURE__ */ h.jsxs(Jy, { className: "flex items-center gap-2", children: [ + /* @__PURE__ */ h.jsx(Rd, { className: "h-5 w-5" }), + /* @__PURE__ */ h.jsx(Ve, { children: "Edit Picture" }) + ] }) }), + /* @__PURE__ */ h.jsxs(Hk, { defaultValue: "edit", className: "w-full", children: [ + /* @__PURE__ */ h.jsxs(gC, { className: "grid w-full grid-cols-3", children: [ + /* @__PURE__ */ h.jsxs(xu, { value: "edit", className: "flex items-center gap-2", children: [ + /* @__PURE__ */ h.jsx(Rd, { className: "h-4 w-4" }), + /* @__PURE__ */ h.jsx(Ve, { children: "Edit Details" }) + ] }), + /* @__PURE__ */ h.jsxs(xu, { value: "collections", className: "flex items-center gap-2", children: [ + /* @__PURE__ */ h.jsx(Id, { className: "h-4 w-4" }), + /* @__PURE__ */ h.jsx(Ve, { children: "Collections" }) + ] }), + /* @__PURE__ */ h.jsxs(xu, { value: "versions", className: "flex items-center gap-2", children: [ + /* @__PURE__ */ h.jsx(tw, { className: "h-4 w-4" }), + /* @__PURE__ */ h.jsx(Ve, { children: "Versions" }) + ] }) + ] }), + /* @__PURE__ */ h.jsx(Cu, { value: "edit", className: "mt-4", children: /* @__PURE__ */ h.jsx(_k, { ...$, children: /* @__PURE__ */ h.jsxs("form", { onSubmit: $.handleSubmit(B), className: "space-y-4", children: [ + a && /* @__PURE__ */ h.jsx( + Me, + { + type: "button", + variant: "outline", + className: "w-full", + onClick: J, + disabled: f || c, + children: f ? /* @__PURE__ */ h.jsxs(h.Fragment, { children: [ + /* @__PURE__ */ h.jsx("div", { className: "animate-spin rounded-full h-4 w-4 border-2 border-primary border-t-transparent mr-2" }), + /* @__PURE__ */ h.jsx(Ve, { children: "Generating..." }) + ] }) : /* @__PURE__ */ h.jsxs(h.Fragment, { children: [ + /* @__PURE__ */ h.jsx(HS, { className: "h-4 w-4 mr-2" }), + /* @__PURE__ */ h.jsx(Ve, { children: "Generate Title & Description with AI" }) + ] }) + } + ), + /* @__PURE__ */ h.jsx( + wu, + { + control: $.control, + name: "title", + render: ({ field: q }) => /* @__PURE__ */ h.jsxs(Ec, { children: [ + /* @__PURE__ */ h.jsx(kc, { children: /* @__PURE__ */ h.jsx(Ve, { children: "Title (Optional)" }) }), + /* @__PURE__ */ h.jsx(Tc, { children: /* @__PURE__ */ h.jsx( + Np, + { + placeholder: de("Enter a title..."), + ...q, + onKeyDown: (H) => { + (H.ctrlKey || H.metaKey) && H.key === "Enter" && (H.preventDefault(), $.handleSubmit(B)()); + } + } + ) }), + /* @__PURE__ */ h.jsx(gf, {}) + ] }) + } + ), + /* @__PURE__ */ h.jsx( + wu, + { + control: $.control, + name: "description", + render: ({ field: q }) => /* @__PURE__ */ h.jsxs(Ec, { children: [ + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center justify-between mb-2", children: [ + /* @__PURE__ */ h.jsx(kc, { children: /* @__PURE__ */ h.jsx(Ve, { children: "Description (Optional)" }) }), + /* @__PURE__ */ h.jsx( + "button", + { + type: "button", + onClick: G, + disabled: b || c, + className: `p-1.5 rounded-md transition-colors ${y ? "bg-red-100 text-red-600 hover:bg-red-200" : "text-muted-foreground hover:text-foreground hover:bg-accent"}`, + title: de(y ? "Stop recording" : "Record audio"), + children: b ? /* @__PURE__ */ h.jsx(Il, { className: "h-4 w-4 animate-spin" }) : y ? /* @__PURE__ */ h.jsx(Rg, { className: "h-4 w-4" }) : /* @__PURE__ */ h.jsx(Ig, { className: "h-4 w-4" }) + } + ) + ] }), + /* @__PURE__ */ h.jsx(Tc, { children: /* @__PURE__ */ h.jsx( + lT, + { + value: q.value || "", + onChange: q.onChange, + placeholder: de("Describe your photo... You can use **markdown** formatting!"), + className: "min-h-[120px]", + onKeyDown: (H) => { + (H.ctrlKey || H.metaKey) && H.key === "Enter" && (H.preventDefault(), $.handleSubmit(B)()); + } + } + ) }), + /* @__PURE__ */ h.jsx(gf, {}) + ] }) + } + ), + /* @__PURE__ */ h.jsx( + wu, + { + control: $.control, + name: "visible", + render: ({ field: q }) => /* @__PURE__ */ h.jsxs(Ec, { className: "flex flex-row items-center justify-between rounded-lg border p-4", children: [ + /* @__PURE__ */ h.jsxs("div", { className: "space-y-0.5", children: [ + /* @__PURE__ */ h.jsx(kc, { className: "text-base", children: /* @__PURE__ */ h.jsx(Ve, { children: "Visible" }) }), + /* @__PURE__ */ h.jsx("div", { className: "text-sm text-muted-foreground", children: /* @__PURE__ */ h.jsx(Ve, { children: "Make this picture visible to others" }) }) + ] }), + /* @__PURE__ */ h.jsx(Tc, { children: /* @__PURE__ */ h.jsx( + vC, + { + checked: q.value, + onCheckedChange: q.onChange + } + ) }) + ] }) + } + ), + /* @__PURE__ */ h.jsxs("div", { className: "flex gap-2", children: [ + /* @__PURE__ */ h.jsx( + Me, + { + type: "button", + variant: "outline", + className: "flex-1", + onClick: W, + disabled: c, + children: /* @__PURE__ */ h.jsx(Ve, { children: "Cancel" }) + } + ), + /* @__PURE__ */ h.jsx( + Me, + { + type: "submit", + className: "flex-1", + disabled: c, + children: /* @__PURE__ */ h.jsx(Ve, { children: c ? "Updating..." : "Update" }) + } + ) + ] }) + ] }) }) }), + /* @__PURE__ */ h.jsx(Cu, { value: "collections", className: "mt-4", children: /* @__PURE__ */ h.jsxs("div", { className: "space-y-4", children: [ + T ? /* @__PURE__ */ h.jsx("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ h.jsx(Il, { className: "h-6 w-6 animate-spin text-muted-foreground" }) }) : C.length === 0 ? /* @__PURE__ */ h.jsxs("div", { className: "text-center py-8", children: [ + /* @__PURE__ */ h.jsx(Id, { className: "h-12 w-12 mx-auto mb-3 text-muted-foreground opacity-50" }), + /* @__PURE__ */ h.jsx("p", { className: "text-muted-foreground mb-4", children: /* @__PURE__ */ h.jsx(Ve, { children: "No collections yet" }) }), + /* @__PURE__ */ h.jsx( + Me, + { + variant: "outline", + onClick: () => { + W(), window.location.href = "/collections/new"; + }, + children: /* @__PURE__ */ h.jsx(Ve, { children: "Create Collection" }) + } + ) + ] }) : /* @__PURE__ */ h.jsx("div", { className: "space-y-2 max-h-96 overflow-y-auto", children: C.map((q) => /* @__PURE__ */ h.jsx( + lv, + { + className: `cursor-pointer transition-colors ${k.has(q.id) ? "bg-primary/10 border-primary" : "hover:bg-muted/50"}`, + onClick: () => j(q.id), + children: /* @__PURE__ */ h.jsx(cv, { className: "p-3", children: /* @__PURE__ */ h.jsxs("div", { className: "flex items-center justify-between", children: [ + /* @__PURE__ */ h.jsxs("div", { className: "flex-1 mr-3", children: [ + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center gap-2", children: [ + /* @__PURE__ */ h.jsx("h4", { className: "font-medium", children: q.name }), + !q.is_public && /* @__PURE__ */ h.jsx("span", { className: "text-xs text-muted-foreground", children: "(Private)" }) + ] }), + q.description && /* @__PURE__ */ h.jsx("p", { className: "text-sm text-muted-foreground line-clamp-1", children: q.description }) + ] }), + /* @__PURE__ */ h.jsx( + ov, + { + checked: k.has(q.id), + onCheckedChange: () => j(q.id), + onClick: (H) => H.stopPropagation() + } + ) + ] }) }) + }, + q.id + )) }), + /* @__PURE__ */ h.jsx("div", { className: "pt-2 text-sm text-muted-foreground text-center", children: /* @__PURE__ */ h.jsx(Ve, { children: k.size === 0 ? "Not in any collections" : k.size === 1 ? "In 1 collection" : `In ${k.size} collections` }) }) + ] }) }), + /* @__PURE__ */ h.jsx(Cu, { value: "versions", className: "mt-4", children: /* @__PURE__ */ h.jsx( + ZU, + { + currentPictureId: e, + onVersionSelect: o + } + ) }) + ] }) + ] }) }); +}; +var Er = function(n, t) { + return Number(n.toFixed(t)); +}, zz = function(n, t) { + return typeof n == "number" ? n : t; +}, yn = function(n, t, e) { + e && typeof e == "function" && e(n, t); +}, Hz = function(n) { + return -Math.cos(n * Math.PI) / 2 + 0.5; +}, Wz = function(n) { + return n; +}, Gz = function(n) { + return n * n; +}, Yz = function(n) { + return n * (2 - n); +}, Kz = function(n) { + return n < 0.5 ? 2 * n * n : -1 + (4 - 2 * n) * n; +}, Zz = function(n) { + return n * n * n; +}, Xz = function(n) { + return --n * n * n + 1; +}, Qz = function(n) { + return n < 0.5 ? 4 * n * n * n : (n - 1) * (2 * n - 2) * (2 * n - 2) + 1; +}, Jz = function(n) { + return n * n * n * n; +}, eH = function(n) { + return 1 - --n * n * n * n; +}, tH = function(n) { + return n < 0.5 ? 8 * n * n * n * n : 1 - 8 * --n * n * n * n; +}, nH = function(n) { + return n * n * n * n * n; +}, sH = function(n) { + return 1 + --n * n * n * n * n; +}, rH = function(n) { + return n < 0.5 ? 16 * n * n * n * n * n : 1 + 16 * --n * n * n * n * n; +}, w9 = { + easeOut: Hz, + linear: Wz, + easeInQuad: Gz, + easeOutQuad: Yz, + easeInOutQuad: Kz, + easeInCubic: Zz, + easeOutCubic: Xz, + easeInOutCubic: Qz, + easeInQuart: Jz, + easeOutQuart: eH, + easeInOutQuart: tH, + easeInQuint: nH, + easeOutQuint: sH, + easeInOutQuint: rH +}, x9 = function(n) { + typeof n == "number" && cancelAnimationFrame(n); +}, ei = function(n) { + n.mounted && (x9(n.animation), n.animate = !1, n.animation = null, n.velocity = null); +}; +function C9(n, t, e, s) { + if (n.mounted) { + var r = (/* @__PURE__ */ new Date()).getTime(), i = 1; + ei(n), n.animation = function() { + if (!n.mounted) + return x9(n.animation); + var a = (/* @__PURE__ */ new Date()).getTime() - r, o = a / e, c = w9[t], u = c(o); + a >= e ? (s(i), n.animation = null) : n.animation && (s(u), requestAnimationFrame(n.animation)); + }, requestAnimationFrame(n.animation); + } +} +function iH(n) { + var t = n.scale, e = n.positionX, s = n.positionY; + return !(Number.isNaN(t) || Number.isNaN(e) || Number.isNaN(s)); +} +function bl(n, t, e, s) { + var r = iH(t); + if (!(!n.mounted || !r)) { + var i = n.setTransformState, a = n.transformState, o = a.scale, c = a.positionX, u = a.positionY, f = t.scale - o, p = t.positionX - c, g = t.positionY - u; + e === 0 ? i(t.scale, t.positionX, t.positionY) : C9(n, s, e, function(y) { + var v = o + f * y, b = c + p * y, w = u + g * y; + i(v, b, w); + }); + } +} +function aH(n, t, e) { + var s = n.offsetWidth, r = n.offsetHeight, i = t.offsetWidth, a = t.offsetHeight, o = i * e, c = a * e, u = s - o, f = r - c; + return { + wrapperWidth: s, + wrapperHeight: r, + newContentWidth: o, + newDiffWidth: u, + newContentHeight: c, + newDiffHeight: f + }; +} +var oH = function(n, t, e, s, r, i, a) { + var o = n > t ? e * (a ? 1 : 0.5) : 0, c = s > r ? i * (a ? 1 : 0.5) : 0, u = n - t - o, f = o, p = s - r - c, g = c; + return { minPositionX: u, maxPositionX: f, minPositionY: p, maxPositionY: g }; +}, WC = function(n, t) { + var e = n.wrapperComponent, s = n.contentComponent, r = n.setup.centerZoomedOut; + if (!e || !s) + throw new Error("Components are not mounted"); + var i = aH(e, s, t), a = i.wrapperWidth, o = i.wrapperHeight, c = i.newContentWidth, u = i.newDiffWidth, f = i.newContentHeight, p = i.newDiffHeight, g = oH(a, c, u, o, f, p, !!r); + return g; +}, jw = function(n, t, e, s) { + return s ? n < t ? Er(t, 2) : n > e ? Er(e, 2) : Er(n, 2) : Er(n, 2); +}, Ac = function(n, t) { + var e = WC(n, t); + return n.bounds = e, e; +}; +function Lp(n, t, e, s, r, i, a) { + var o = e.minPositionX, c = e.minPositionY, u = e.maxPositionX, f = e.maxPositionY, p = 0, g = 0; + a && (p = r, g = i); + var y = jw(n, o - p, u + p, s), v = jw(t, c - g, f + g, s); + return { x: y, y: v }; +} +function wv(n, t, e, s, r, i) { + var a = n.transformState, o = a.scale, c = a.positionX, u = a.positionY, f = s - o; + if (typeof t != "number" || typeof e != "number") + return console.error("Mouse X and Y position were not provided!"), { x: c, y: u }; + var p = c - t * f, g = u - e * f, y = Lp(p, g, r, i, 0, 0, null); + return y; +} +function jp(n, t, e, s, r) { + var i = r ? s : 0, a = t - i; + return !Number.isNaN(e) && n >= e ? e : !Number.isNaN(t) && n <= a ? a : n; +} +var __ = function(n, t) { + var e = n.setup.panning.excluded, s = n.isInitialized, r = n.wrapperComponent, i = t.target, a = "shadowRoot" in i && "composedPath" in t, o = a ? t.composedPath().some(function(f) { + return f instanceof Element ? r == null ? void 0 : r.contains(f) : !1; + }) : r == null ? void 0 : r.contains(i), c = s && i && o; + if (!c) + return !1; + var u = xv(i, e); + return !u; +}, S_ = function(n) { + var t = n.isInitialized, e = n.isPanning, s = n.setup, r = s.panning.disabled, i = t && e && !r; + return !!i; +}, lH = function(n, t) { + var e = n.transformState, s = e.positionX, r = e.positionY; + n.isPanning = !0; + var i = t.clientX, a = t.clientY; + n.startCoords = { x: i - s, y: a - r }; +}, cH = function(n, t) { + var e = t.touches, s = n.transformState, r = s.positionX, i = s.positionY; + n.isPanning = !0; + var a = e.length === 1; + if (a) { + var o = e[0].clientX, c = e[0].clientY; + n.startCoords = { x: o - r, y: c - i }; + } +}; +function uH(n) { + var t = n.transformState, e = t.positionX, s = t.positionY, r = t.scale, i = n.setup, a = i.disabled, o = i.limitToBounds, c = i.centerZoomedOut, u = n.wrapperComponent; + if (!(a || !u || !n.bounds)) { + var f = n.bounds, p = f.maxPositionX, g = f.minPositionX, y = f.maxPositionY, v = f.minPositionY, b = e > p || e < g, w = s > y || s < v, E = e > p ? u.offsetWidth : n.setup.minPositionX || 0, x = s > y ? u.offsetHeight : n.setup.minPositionY || 0, C = wv(n, E, x, r, n.bounds, o || c), _ = C.x, k = C.y; + return { + scale: r, + positionX: b ? _ : e, + positionY: w ? k : s + }; + } +} +function _9(n, t, e, s, r) { + var i = n.setup.limitToBounds, a = n.wrapperComponent, o = n.bounds, c = n.transformState, u = c.scale, f = c.positionX, p = c.positionY; + if (!(a === null || o === null || t === f && e === p)) { + var g = Lp(t, e, o, i, s, r, a), y = g.x, v = g.y; + n.setTransformState(u, y, v); + } +} +var dH = function(n, t, e) { + var s = n.startCoords, r = n.transformState, i = n.setup.panning, a = i.lockAxisX, o = i.lockAxisY, c = r.positionX, u = r.positionY; + if (!s) + return { x: c, y: u }; + var f = t - s.x, p = e - s.y, g = a ? c : f, y = o ? u : p; + return { x: g, y }; +}, cl = function(n, t) { + var e = n.setup, s = n.transformState, r = s.scale, i = e.minScale, a = e.disablePadding; + return t > 0 && r >= i && !a ? t : 0; +}, hH = function(n) { + var t = n.mounted, e = n.setup, s = e.disabled, r = e.velocityAnimation, i = n.transformState.scale, a = r.disabled, o = !a || i > 1 || !s || t; + return !!o; +}, fH = function(n) { + var t = n.mounted, e = n.velocity, s = n.bounds, r = n.setup, i = r.disabled, a = r.velocityAnimation, o = n.transformState.scale, c = a.disabled, u = !c || o > 1 || !i || t; + return !(!u || !e || !s); +}; +function pH(n, t) { + var e = n.setup.velocityAnimation, s = e.equalToMove, r = e.animationTime, i = e.sensitivity; + return s ? r * t * i : r; +} +function E_(n, t, e, s, r, i, a, o, c, u) { + if (r) { + if (t > a && e > a) { + var f = a + (n - a) * u; + return f > c ? c : f < a ? a : f; + } + if (t < i && e < i) { + var f = i + (n - i) * u; + return f < o ? o : f > i ? i : f; + } + } + return s ? t : jw(n, i, a, r); +} +function mH(n, t) { + var e = 1; + return t ? Math.min(e, n.offsetWidth / window.innerWidth) : e; +} +function gH(n, t) { + var e = hH(n); + if (e) { + var s = n.lastMousePosition, r = n.velocityTime, i = n.setup, a = n.wrapperComponent, o = i.velocityAnimation.equalToMove, c = Date.now(); + if (s && r && a) { + var u = mH(a, o), f = t.x - s.x, p = t.y - s.y, g = f / u, y = p / u, v = c - r, b = f * f + p * p, w = Math.sqrt(b) / v; + n.velocity = { velocityX: g, velocityY: y, total: w }; + } + n.lastMousePosition = t, n.velocityTime = c; + } +} +function yH(n) { + var t = n.velocity, e = n.bounds, s = n.setup, r = n.wrapperComponent, i = fH(n); + if (!(!i || !t || !e || !r)) { + var a = t.velocityX, o = t.velocityY, c = t.total, u = e.maxPositionX, f = e.minPositionX, p = e.maxPositionY, g = e.minPositionY, y = s.limitToBounds, v = s.alignmentAnimation, b = s.zoomAnimation, w = s.panning, E = w.lockAxisY, x = w.lockAxisX, C = b.animationType, _ = v.sizeX, k = v.sizeY, A = v.velocityAlignmentTime, T = A, N = pH(n, c), $ = Math.max(N, T), D = cl(n, _), V = cl(n, k), j = D * r.offsetWidth / 100, B = V * r.offsetHeight / 100, W = u + j, J = f - j, G = p + B, q = g - B, H = n.transformState, L = (/* @__PURE__ */ new Date()).getTime(); + C9(n, C, $, function(X) { + var te = n.transformState, Te = te.scale, _e = te.positionX, Je = te.positionY, Re = (/* @__PURE__ */ new Date()).getTime() - L, nt = Re / T, rt = w9[v.animationType], qe = 1 - rt(Math.min(1, nt)), Ye = 1 - X, ee = _e + a * Ye, ge = Je + o * Ye, ze = E_(ee, H.positionX, _e, x, y, f, u, J, W, qe), st = E_(ge, H.positionY, Je, E, y, g, p, q, G, qe); + (_e !== ee || Je !== ge) && n.setTransformState(Te, ze, st); + }); + } +} +function k_(n, t) { + var e = n.transformState.scale; + ei(n), Ac(n, e), window.TouchEvent !== void 0 && t instanceof TouchEvent ? cH(n, t) : lH(n, t); +} +function GC(n, t) { + var e = n.transformState.scale, s = n.setup, r = s.minScale, i = s.alignmentAnimation, a = i.disabled, o = i.sizeX, c = i.sizeY, u = i.animationTime, f = i.animationType, p = a || e < r || !o && !c; + if (!p) { + var g = uH(n); + g && bl(n, g, t ?? u, f); + } +} +function T_(n, t, e) { + var s = n.startCoords, r = n.setup, i = r.alignmentAnimation, a = i.sizeX, o = i.sizeY; + if (s) { + var c = dH(n, t, e), u = c.x, f = c.y, p = cl(n, a), g = cl(n, o); + gH(n, { x: u, y: f }), _9(n, u, f, p, g); + } +} +function vH(n) { + if (n.isPanning) { + var t = n.setup.panning.velocityDisabled, e = n.velocity, s = n.wrapperComponent, r = n.contentComponent; + n.isPanning = !1, n.animate = !1, n.animation = null; + var i = s == null ? void 0 : s.getBoundingClientRect(), a = r == null ? void 0 : r.getBoundingClientRect(), o = (i == null ? void 0 : i.width) || 0, c = (i == null ? void 0 : i.height) || 0, u = (a == null ? void 0 : a.width) || 0, f = (a == null ? void 0 : a.height) || 0, p = o < u || c < f, g = !t && e && (e == null ? void 0 : e.total) > 0.1 && p; + g ? yH(n) : GC(n); + } +} +function YC(n, t, e, s) { + var r = n.setup, i = r.minScale, a = r.maxScale, o = r.limitToBounds, c = jp(Er(t, 2), i, a, 0, !1), u = Ac(n, c), f = wv(n, e, s, c, u, o), p = f.x, g = f.y; + return { scale: c, positionX: p, positionY: g }; +} +function S9(n, t, e) { + var s = n.transformState.scale, r = n.wrapperComponent, i = n.setup, a = i.minScale, o = i.limitToBounds, c = i.zoomAnimation, u = c.disabled, f = c.animationTime, p = c.animationType, g = u || s >= a; + if ((s >= 1 || o) && GC(n), !(g || !r || !n.mounted)) { + var y = t || r.offsetWidth / 2, v = e || r.offsetHeight / 2, b = YC(n, a, y, v); + b && bl(n, b, f, p); + } +} +var rl = function() { + return rl = Object.assign || function(t) { + for (var e, s = 1, r = arguments.length; s < r; s++) { + e = arguments[s]; + for (var i in e) Object.prototype.hasOwnProperty.call(e, i) && (t[i] = e[i]); + } + return t; + }, rl.apply(this, arguments); +}; +function A_(n, t, e) { + for (var s = 0, r = t.length, i; s < r; s++) + (i || !(s in t)) && (i || (i = Array.prototype.slice.call(t, 0, s)), i[s] = t[s]); + return n.concat(i || Array.prototype.slice.call(t)); +} +var km = { + scale: 1, + positionX: 0, + positionY: 0 +}, Nh = { + disabled: !1, + minPositionX: null, + maxPositionX: null, + minPositionY: null, + maxPositionY: null, + minScale: 1, + maxScale: 8, + limitToBounds: !0, + centerZoomedOut: !1, + centerOnInit: !1, + disablePadding: !1, + smooth: !0, + wheel: { + step: 0.2, + disabled: !1, + smoothStep: 1e-3, + wheelDisabled: !1, + touchPadDisabled: !1, + activationKeys: [], + excluded: [] + }, + panning: { + disabled: !1, + velocityDisabled: !1, + lockAxisX: !1, + lockAxisY: !1, + allowLeftClickPan: !0, + allowMiddleClickPan: !0, + allowRightClickPan: !0, + wheelPanning: !1, + activationKeys: [], + excluded: [] + }, + pinch: { + step: 5, + disabled: !1, + excluded: [] + }, + doubleClick: { + disabled: !1, + step: 0.7, + mode: "zoomIn", + animationType: "easeOut", + animationTime: 200, + excluded: [] + }, + zoomAnimation: { + disabled: !1, + size: 0.4, + animationTime: 200, + animationType: "easeOut" + }, + alignmentAnimation: { + disabled: !1, + sizeX: 100, + sizeY: 100, + animationTime: 200, + velocityAlignmentTime: 400, + animationType: "easeOut" + }, + velocityAnimation: { + disabled: !1, + sensitivity: 1, + animationTime: 400, + animationType: "easeOut", + equalToMove: !0 + } +}, Fw = { + wrapperClass: "react-transform-wrapper", + contentClass: "react-transform-component" +}, E9 = function(n) { + var t, e, s, r; + return { + previousScale: (t = n.initialScale) !== null && t !== void 0 ? t : km.scale, + scale: (e = n.initialScale) !== null && e !== void 0 ? e : km.scale, + positionX: (s = n.initialPositionX) !== null && s !== void 0 ? s : km.positionX, + positionY: (r = n.initialPositionY) !== null && r !== void 0 ? r : km.positionY + }; +}, P_ = function(n) { + var t = rl({}, Nh); + return Object.keys(n).forEach(function(e) { + var s = typeof n[e] < "u", r = typeof Nh[e] < "u"; + if (r && s) { + var i = Object.prototype.toString.call(Nh[e]), a = i === "[object Object]", o = i === "[object Array]"; + a ? t[e] = rl(rl({}, Nh[e]), n[e]) : o ? t[e] = A_(A_([], Nh[e], !0), n[e]) : t[e] = n[e]; + } + }), t; +}, k9 = function(n, t, e) { + var s = n.transformState.scale, r = n.wrapperComponent, i = n.setup, a = i.maxScale, o = i.minScale, c = i.zoomAnimation, u = i.smooth, f = c.size; + if (!r) + throw new Error("Wrapper is not mounted"); + var p = u ? s * Math.exp(t * e) : s + t * e, g = jp(Er(p, 3), o, a, f, !1); + return g; +}; +function T9(n, t, e, s, r) { + var i = n.wrapperComponent, a = n.transformState, o = a.scale, c = a.positionX, u = a.positionY; + if (!i) + return console.error("No WrapperComponent found"); + var f = i.offsetWidth, p = i.offsetHeight, g = (f / 2 - c) / o, y = (p / 2 - u) / o, v = k9(n, t, e), b = YC(n, v, g, y); + if (!b) + return console.error("Error during zoom event. New transformation state was not calculated."); + bl(n, b, s, r); +} +function A9(n, t, e, s) { + var r = n.setup, i = n.wrapperComponent, a = r.limitToBounds, o = E9(n.props), c = n.transformState, u = c.scale, f = c.positionX, p = c.positionY; + if (i) { + var g = WC(n, o.scale), y = Lp(o.positionX, o.positionY, g, a, 0, 0, i), v = { + scale: o.scale, + positionX: y.x, + positionY: y.y + }; + u === o.scale && f === o.positionX && p === o.positionY || (s == null || s(), bl(n, v, t, e)); + } +} +function bH(n, t, e, s) { + var r = n.getBoundingClientRect(), i = t.getBoundingClientRect(), a = e.getBoundingClientRect(), o = i.x * s.scale, c = i.y * s.scale; + return { + x: (r.x - a.x + o) / s.scale, + y: (r.y - a.y + c) / s.scale + }; +} +function wH(n, t, e) { + var s = n.wrapperComponent, r = n.contentComponent, i = n.transformState, a = n.setup, o = a.limitToBounds, c = a.minScale, u = a.maxScale; + if (!s || !r) + return i; + var f = s.getBoundingClientRect(), p = t.getBoundingClientRect(), g = bH(t, s, r, i), y = g.x, v = g.y, b = p.width / i.scale, w = p.height / i.scale, E = s.offsetWidth / b, x = s.offsetHeight / w, C = jp(e || Math.min(E, x), c, u, 0, !1), _ = (f.width - b * C) / 2, k = (f.height - w * C) / 2, A = (f.left - y) * C + _, T = (f.top - v) * C + k, N = WC(n, C), $ = Lp(A, T, N, o, 0, 0, s), D = $.x, V = $.y; + return { positionX: D, positionY: V, scale: C }; +} +var xH = function(n) { + return function(t, e, s) { + t === void 0 && (t = 0.5), e === void 0 && (e = 300), s === void 0 && (s = "easeOut"), T9(n, 1, t, e, s); + }; +}, CH = function(n) { + return function(t, e, s) { + t === void 0 && (t = 0.5), e === void 0 && (e = 300), s === void 0 && (s = "easeOut"), T9(n, -1, t, e, s); + }; +}, _H = function(n) { + return function(t, e, s, r, i) { + r === void 0 && (r = 300), i === void 0 && (i = "easeOut"); + var a = n.transformState, o = a.positionX, c = a.positionY, u = a.scale, f = n.wrapperComponent, p = n.contentComponent, g = n.setup.disabled; + if (!(g || !f || !p)) { + var y = { + positionX: Number.isNaN(t) ? o : t, + positionY: Number.isNaN(e) ? c : e, + scale: Number.isNaN(s) ? u : s + }; + bl(n, y, r, i); + } + }; +}, SH = function(n) { + return function(t, e) { + t === void 0 && (t = 200), e === void 0 && (e = "easeOut"), A9(n, t, e); + }; +}, EH = function(n) { + return function(t, e, s) { + e === void 0 && (e = 200), s === void 0 && (s = "easeOut"); + var r = n.transformState, i = n.wrapperComponent, a = n.contentComponent; + if (i && a) { + var o = P9(t || r.scale, i, a); + bl(n, o, e, s); + } + }; +}, kH = function(n) { + return function(t, e, s, r) { + s === void 0 && (s = 600), r === void 0 && (r = "easeOut"), ei(n); + var i = n.wrapperComponent, a = typeof t == "string" ? document.getElementById(t) : t; + if (i && a && i.contains(a)) { + var o = wH(n, a, e); + bl(n, o, s, r); + } + }; +}, Vw = function(n) { + return { + instance: n, + zoomIn: xH(n), + zoomOut: CH(n), + setTransform: _H(n), + resetTransform: SH(n), + centerView: EH(n), + zoomToElement: kH(n) + }; +}, TH = function(n) { + return { + instance: n, + state: n.transformState + }; +}, cn = function(n) { + var t = {}; + return Object.assign(t, TH(n)), Object.assign(t, Vw(n)), t; +}, Eb = !1; +function kb() { + try { + var n = { + get passive() { + return Eb = !0, !1; + } + }; + return n; + } catch { + return Eb = !1, Eb; + } +} +var Tm = ".".concat(Fw.wrapperClass), xv = function(n, t) { + return t.some(function(e) { + return n.matches("".concat(Tm, " ").concat(e, ", ").concat(Tm, " .").concat(e, ", ").concat(Tm, " ").concat(e, " *, ").concat(Tm, " .").concat(e, " *")); + }); +}, Bw = function(n) { + n && clearTimeout(n); +}, AH = function(n, t, e) { + return "translate(".concat(n, "px, ").concat(t, "px) scale(").concat(e, ")"); +}, P9 = function(n, t, e) { + var s = e.offsetWidth * n, r = e.offsetHeight * n, i = (t.offsetWidth - s) / 2, a = (t.offsetHeight - r) / 2; + return { + scale: n, + positionX: i, + positionY: a + }; +}; +function PH(n) { + return function(t) { + n.forEach(function(e) { + typeof e == "function" ? e(t) : e != null && (e.current = t); + }); + }; +} +var NH = function(n, t) { + var e = n.setup.wheel, s = e.disabled, r = e.wheelDisabled, i = e.touchPadDisabled, a = e.excluded, o = n.isInitialized, c = n.isPanning, u = t.target, f = o && !c && !s && u; + if (!f || r && !t.ctrlKey || i && t.ctrlKey) + return !1; + var p = xv(u, a); + return !p; +}, $H = function(n) { + return n ? n.deltaY < 0 ? 1 : -1 : 0; +}; +function RH(n, t) { + var e = $H(n), s = zz(t, e); + return s; +} +function N9(n, t, e) { + var s = t.getBoundingClientRect(), r = 0, i = 0; + if ("clientX" in n) + r = (n.clientX - s.left) / e, i = (n.clientY - s.top) / e; + else { + var a = n.touches[0]; + r = (a.clientX - s.left) / e, i = (a.clientY - s.top) / e; + } + return (Number.isNaN(r) || Number.isNaN(i)) && console.error("No mouse or touch offset found"), { + x: r, + y: i + }; +} +var IH = function(n, t, e, s, r) { + var i = n.transformState.scale, a = n.wrapperComponent, o = n.setup, c = o.maxScale, u = o.minScale, f = o.zoomAnimation, p = o.disablePadding, g = f.size, y = f.disabled; + if (!a) + throw new Error("Wrapper is not mounted"); + var v = i + t * e, b = s ? !1 : !y, w = jp(Er(v, 3), u, c, g, b && !p); + return w; +}, OH = function(n, t) { + var e = n.previousWheelEvent, s = n.transformState.scale, r = n.setup, i = r.maxScale, a = r.minScale; + return e ? s < i || s > a || Math.sign(e.deltaY) !== Math.sign(t.deltaY) || e.deltaY > 0 && e.deltaY < t.deltaY || e.deltaY < 0 && e.deltaY > t.deltaY || Math.sign(e.deltaY) !== Math.sign(t.deltaY) : !1; +}, MH = function(n, t) { + var e = n.setup.pinch, s = e.disabled, r = e.excluded, i = n.isInitialized, a = t.target, o = i && !s && a; + if (!o) + return !1; + var c = xv(a, r); + return !c; +}, DH = function(n) { + var t = n.setup.pinch.disabled, e = n.isInitialized, s = n.pinchStartDistance, r = e && !t && s; + return !!r; +}, LH = function(n, t, e) { + var s = e.getBoundingClientRect(), r = n.touches, i = Er(r[0].clientX - s.left, 5), a = Er(r[0].clientY - s.top, 5), o = Er(r[1].clientX - s.left, 5), c = Er(r[1].clientY - s.top, 5); + return { + x: (i + o) / 2 / t, + y: (a + c) / 2 / t + }; +}, $9 = function(n) { + return Math.sqrt(Math.pow(n.touches[0].pageX - n.touches[1].pageX, 2) + Math.pow(n.touches[0].pageY - n.touches[1].pageY, 2)); +}, jH = function(n, t) { + var e = n.pinchStartScale, s = n.pinchStartDistance, r = n.setup, i = r.maxScale, a = r.minScale, o = r.zoomAnimation, c = r.disablePadding, u = o.size, f = o.disabled; + if (!e || s === null || !t) + throw new Error("Pinch touches distance was not provided"); + if (t < 0) + return n.transformState.scale; + var p = t / s, g = p * e; + return jp(Er(g, 2), a, i, u, !f && !c); +}, FH = 160, VH = 100, BH = function(n, t) { + var e = n.props, s = e.onWheelStart, r = e.onZoomStart; + n.wheelStopEventTimer || (ei(n), yn(cn(n), t, s), yn(cn(n), t, r)); +}, UH = function(n, t) { + var e = n.props, s = e.onWheel, r = e.onZoom, i = n.contentComponent, a = n.setup, o = n.transformState, c = o.scale, u = a.limitToBounds, f = a.centerZoomedOut, p = a.zoomAnimation, g = a.wheel, y = a.disablePadding, v = a.smooth, b = p.size, w = p.disabled, E = g.step, x = g.smoothStep; + if (!i) + throw new Error("Component not mounted"); + t.preventDefault(), t.stopPropagation(); + var C = RH(t, null), _ = v ? x * Math.abs(t.deltaY) : E, k = IH(n, C, _, !t.ctrlKey); + if (c !== k) { + var A = Ac(n, k), T = N9(t, i, c), N = w || b === 0 || f || y, $ = u && N, D = wv(n, T.x, T.y, k, A, $), V = D.x, j = D.y; + n.previousWheelEvent = t, n.setTransformState(k, V, j), yn(cn(n), t, s), yn(cn(n), t, r); + } +}, qH = function(n, t) { + var e = n.props, s = e.onWheelStop, r = e.onZoomStop; + Bw(n.wheelAnimationTimer), n.wheelAnimationTimer = setTimeout(function() { + n.mounted && (S9(n, t.x, t.y), n.wheelAnimationTimer = null); + }, VH); + var i = OH(n, t); + i && (Bw(n.wheelStopEventTimer), n.wheelStopEventTimer = setTimeout(function() { + n.mounted && (n.wheelStopEventTimer = null, yn(cn(n), t, s), yn(cn(n), t, r)); + }, FH)); +}, R9 = function(n) { + for (var t = 0, e = 0, s = 0; s < 2; s += 1) + t += n.touches[s].clientX, e += n.touches[s].clientY; + var r = t / 2, i = e / 2; + return { x: r, y: i }; +}, zH = function(n, t) { + var e = $9(t); + n.pinchStartDistance = e, n.lastDistance = e, n.pinchStartScale = n.transformState.scale, n.isPanning = !1; + var s = R9(t); + n.pinchLastCenterX = s.x, n.pinchLastCenterY = s.y, ei(n); +}, HH = function(n, t) { + var e = n.contentComponent, s = n.pinchStartDistance, r = n.wrapperComponent, i = n.transformState.scale, a = n.setup, o = a.limitToBounds, c = a.centerZoomedOut, u = a.zoomAnimation, f = a.alignmentAnimation, p = u.disabled, g = u.size; + if (!(s === null || !e)) { + var y = LH(t, i, e); + if (!(!Number.isFinite(y.x) || !Number.isFinite(y.y))) { + var v = $9(t), b = jH(n, v), w = R9(t), E = w.x - (n.pinchLastCenterX || 0), x = w.y - (n.pinchLastCenterY || 0); + if (!(b === i && E === 0 && x === 0)) { + n.pinchLastCenterX = w.x, n.pinchLastCenterY = w.y; + var C = Ac(n, b), _ = p || g === 0 || c, k = o && _, A = wv(n, y.x, y.y, b, C, k), T = A.x, N = A.y; + n.pinchMidpoint = y, n.lastDistance = v; + var $ = f.sizeX, D = f.sizeY, V = cl(n, $), j = cl(n, D), B = T + E, W = N + x, J = Lp(B, W, C, o, V, j, r), G = J.x, q = J.y; + n.setTransformState(b, G, q); + } + } + } +}, WH = function(n) { + var t = n.pinchMidpoint; + n.velocity = null, n.lastDistance = null, n.pinchMidpoint = null, n.pinchStartScale = null, n.pinchStartDistance = null, S9(n, t == null ? void 0 : t.x, t == null ? void 0 : t.y); +}, I9 = function(n, t) { + var e = n.props.onZoomStop, s = n.setup.doubleClick.animationTime; + Bw(n.doubleClickStopEventTimer), n.doubleClickStopEventTimer = setTimeout(function() { + n.doubleClickStopEventTimer = null, yn(cn(n), t, e); + }, s); +}, GH = function(n, t) { + var e = n.props, s = e.onZoomStart, r = e.onZoom, i = n.setup.doubleClick, a = i.animationTime, o = i.animationType; + yn(cn(n), t, s), A9(n, a, o, function() { + return yn(cn(n), t, r); + }), I9(n, t); +}; +function YH(n, t) { + return n === "toggle" ? t === 1 ? 1 : -1 : n === "zoomOut" ? -1 : 1; +} +function KH(n, t) { + var e = n.setup, s = n.doubleClickStopEventTimer, r = n.transformState, i = n.contentComponent, a = r.scale, o = n.props, c = o.onZoomStart, u = o.onZoom, f = e.doubleClick, p = f.disabled, g = f.mode, y = f.step, v = f.animationTime, b = f.animationType; + if (!p && !s) { + if (g === "reset") + return GH(n, t); + if (!i) + return console.error("No ContentComponent found"); + var w = YH(g, n.transformState.scale), E = k9(n, w, y); + if (a !== E) { + yn(cn(n), t, c); + var x = N9(t, i, a), C = YC(n, E, x.x, x.y); + if (!C) + return console.error("Error during zoom event. New transformation state was not calculated."); + yn(cn(n), t, u), bl(n, C, v, b), I9(n, t); + } + } +} +var ZH = function(n, t) { + var e = n.isInitialized, s = n.setup, r = n.wrapperComponent, i = s.doubleClick, a = i.disabled, o = i.excluded, c = t.target, u = r == null ? void 0 : r.contains(c), f = e && c && u && !a; + if (!f) + return !1; + var p = xv(c, o); + return !p; +}, XH = ( + /** @class */ + /* @__PURE__ */ function() { + function n(t) { + var e = this; + this.mounted = !0, this.pinchLastCenterX = null, this.pinchLastCenterY = null, this.onChangeCallbacks = /* @__PURE__ */ new Set(), this.onInitCallbacks = /* @__PURE__ */ new Set(), this.wrapperComponent = null, this.contentComponent = null, this.isInitialized = !1, this.bounds = null, this.previousWheelEvent = null, this.wheelStopEventTimer = null, this.wheelAnimationTimer = null, this.isPanning = !1, this.isWheelPanning = !1, this.startCoords = null, this.lastTouch = null, this.distance = null, this.lastDistance = null, this.pinchStartDistance = null, this.pinchStartScale = null, this.pinchMidpoint = null, this.doubleClickStopEventTimer = null, this.velocity = null, this.velocityTime = null, this.lastMousePosition = null, this.animate = !1, this.animation = null, this.maxBounds = null, this.pressedKeys = {}, this.mount = function() { + e.initializeWindowEvents(); + }, this.unmount = function() { + e.cleanupWindowEvents(); + }, this.update = function(s) { + e.props = s, Ac(e, e.transformState.scale), e.setup = P_(s); + }, this.initializeWindowEvents = function() { + var s, r, i = kb(), a = (s = e.wrapperComponent) === null || s === void 0 ? void 0 : s.ownerDocument, o = a == null ? void 0 : a.defaultView; + (r = e.wrapperComponent) === null || r === void 0 || r.addEventListener("wheel", e.onWheelPanning, i), o == null || o.addEventListener("mousedown", e.onPanningStart, i), o == null || o.addEventListener("mousemove", e.onPanning, i), o == null || o.addEventListener("mouseup", e.onPanningStop, i), a == null || a.addEventListener("mouseleave", e.clearPanning, i), o == null || o.addEventListener("keyup", e.setKeyUnPressed, i), o == null || o.addEventListener("keydown", e.setKeyPressed, i); + }, this.cleanupWindowEvents = function() { + var s, r, i = kb(), a = (s = e.wrapperComponent) === null || s === void 0 ? void 0 : s.ownerDocument, o = a == null ? void 0 : a.defaultView; + o == null || o.removeEventListener("mousedown", e.onPanningStart, i), o == null || o.removeEventListener("mousemove", e.onPanning, i), o == null || o.removeEventListener("mouseup", e.onPanningStop, i), a == null || a.removeEventListener("mouseleave", e.clearPanning, i), o == null || o.removeEventListener("keyup", e.setKeyUnPressed, i), o == null || o.removeEventListener("keydown", e.setKeyPressed, i), document.removeEventListener("mouseleave", e.clearPanning, i), ei(e), (r = e.observer) === null || r === void 0 || r.disconnect(); + }, this.handleInitializeWrapperEvents = function(s) { + var r = kb(); + s.addEventListener("wheel", e.onWheelZoom, r), s.addEventListener("dblclick", e.onDoubleClick, r), s.addEventListener("touchstart", e.onTouchPanningStart, r), s.addEventListener("touchmove", e.onTouchPanning, r), s.addEventListener("touchend", e.onTouchPanningStop, r); + }, this.handleInitialize = function(s, r) { + var i = !1, a = e.setup.centerOnInit, o = function(c, u) { + for (var f = 0, p = c; f < p.length; f++) { + var g = p[f]; + if (g.target === u) + return !0; + } + return !1; + }; + e.applyTransformation(), e.onInitCallbacks.forEach(function(c) { + c(cn(e)); + }), e.observer = new ResizeObserver(function(c) { + if (o(c, s) || o(c, r)) + if (a && !i) { + var u = r.offsetWidth, f = r.offsetHeight; + (u > 0 || f > 0) && (i = !0, e.setCenter()); + } else + ei(e), Ac(e, e.transformState.scale), GC(e, 0); + }), e.observer.observe(s), e.observer.observe(r); + }, this.onWheelZoom = function(s) { + var r = e.setup.disabled; + if (!r) { + var i = NH(e, s); + if (i) { + var a = e.isPressingKeys(e.setup.wheel.activationKeys); + a && (BH(e, s), UH(e, s), qH(e, s)); + } + } + }, this.onWheelPanning = function(s) { + var r = e.setup, i = r.disabled, a = r.wheel, o = r.panning; + if (!(!e.wrapperComponent || !e.contentComponent || i || !a.wheelDisabled || o.disabled || !o.wheelPanning || s.ctrlKey)) { + s.preventDefault(), s.stopPropagation(); + var c = e.transformState, u = c.positionX, f = c.positionY, p = u - s.deltaX, g = f - s.deltaY, y = o.lockAxisX ? u : p, v = o.lockAxisY ? f : g, b = e.setup.alignmentAnimation, w = b.sizeX, E = b.sizeY, x = cl(e, w), C = cl(e, E); + y === u && v === f || _9(e, y, v, x, C); + } + }, this.onPanningStart = function(s) { + var r = e.setup.disabled, i = e.props.onPanningStart; + if (!r) { + var a = __(e, s); + if (a) { + var o = e.isPressingKeys(e.setup.panning.activationKeys); + o && (s.button === 0 && !e.setup.panning.allowLeftClickPan || s.button === 1 && !e.setup.panning.allowMiddleClickPan || s.button === 2 && !e.setup.panning.allowRightClickPan || (s.preventDefault(), s.stopPropagation(), ei(e), k_(e, s), yn(cn(e), s, i))); + } + } + }, this.onPanning = function(s) { + var r = e.setup.disabled, i = e.props.onPanning; + if (!r) { + var a = S_(e); + if (a) { + var o = e.isPressingKeys(e.setup.panning.activationKeys); + o && (s.preventDefault(), s.stopPropagation(), T_(e, s.clientX, s.clientY), yn(cn(e), s, i)); + } + } + }, this.onPanningStop = function(s) { + var r = e.props.onPanningStop; + e.isPanning && (vH(e), yn(cn(e), s, r)); + }, this.onPinchStart = function(s) { + var r = e.setup.disabled, i = e.props, a = i.onPinchingStart, o = i.onZoomStart; + if (!r) { + var c = MH(e, s); + c && (zH(e, s), ei(e), yn(cn(e), s, a), yn(cn(e), s, o)); + } + }, this.onPinch = function(s) { + var r = e.setup.disabled, i = e.props, a = i.onPinching, o = i.onZoom; + if (!r) { + var c = DH(e); + c && (s.preventDefault(), s.stopPropagation(), HH(e, s), yn(cn(e), s, a), yn(cn(e), s, o)); + } + }, this.onPinchStop = function(s) { + var r = e.props, i = r.onPinchingStop, a = r.onZoomStop; + e.pinchStartScale && (WH(e), yn(cn(e), s, i), yn(cn(e), s, a)); + }, this.onTouchPanningStart = function(s) { + var r = e.setup.disabled, i = e.props.onPanningStart; + if (!r) { + var a = __(e, s); + if (a) { + var o = e.lastTouch && +/* @__PURE__ */ new Date() - e.lastTouch < 200 && s.touches.length === 1; + if (!o) { + e.lastTouch = +/* @__PURE__ */ new Date(), ei(e); + var c = s.touches, u = c.length === 1, f = c.length === 2; + u && (ei(e), k_(e, s), yn(cn(e), s, i)), f && e.onPinchStart(s); + } + } + } + }, this.onTouchPanning = function(s) { + var r = e.setup.disabled, i = e.props.onPanning; + if (e.isPanning && s.touches.length === 1) { + if (r) + return; + var a = S_(e); + if (!a) + return; + s.preventDefault(), s.stopPropagation(); + var o = s.touches[0]; + T_(e, o.clientX, o.clientY), yn(cn(e), s, i); + } else s.touches.length > 1 && e.onPinch(s); + }, this.onTouchPanningStop = function(s) { + e.onPanningStop(s), e.onPinchStop(s); + }, this.onDoubleClick = function(s) { + var r = e.setup.disabled; + if (!r) { + var i = ZH(e, s); + i && KH(e, s); + } + }, this.clearPanning = function(s) { + e.isPanning && e.onPanningStop(s); + }, this.setKeyPressed = function(s) { + e.pressedKeys[s.key] = !0; + }, this.setKeyUnPressed = function(s) { + e.pressedKeys[s.key] = !1; + }, this.isPressingKeys = function(s) { + return s.length ? !!s.find(function(r) { + return e.pressedKeys[r]; + }) : !0; + }, this.setTransformState = function(s, r, i) { + var a = e.props.onTransformed; + if (!Number.isNaN(s) && !Number.isNaN(r) && !Number.isNaN(i)) { + s !== e.transformState.scale && (e.transformState.previousScale = e.transformState.scale, e.transformState.scale = s), e.transformState.positionX = r, e.transformState.positionY = i, e.applyTransformation(); + var o = cn(e); + e.onChangeCallbacks.forEach(function(c) { + return c(o); + }), yn(o, { scale: s, positionX: r, positionY: i }, a); + } else + console.error("Detected NaN set state values"); + }, this.setCenter = function() { + if (e.wrapperComponent && e.contentComponent) { + var s = P9(e.transformState.scale, e.wrapperComponent, e.contentComponent); + e.setTransformState(s.scale, s.positionX, s.positionY); + } + }, this.handleTransformStyles = function(s, r, i) { + return e.props.customTransform ? e.props.customTransform(s, r, i) : AH(s, r, i); + }, this.applyTransformation = function() { + if (!(!e.mounted || !e.contentComponent)) { + var s = e.transformState, r = s.scale, i = s.positionX, a = s.positionY, o = e.handleTransformStyles(i, a, r); + e.contentComponent.style.transform = o; + } + }, this.getContext = function() { + return cn(e); + }, this.onChange = function(s) { + return e.onChangeCallbacks.has(s) || e.onChangeCallbacks.add(s), function() { + e.onChangeCallbacks.delete(s); + }; + }, this.onInit = function(s) { + return e.onInitCallbacks.has(s) || e.onInitCallbacks.add(s), function() { + e.onInitCallbacks.delete(s); + }; + }, this.init = function(s, r) { + e.cleanupWindowEvents(), e.wrapperComponent = s, e.contentComponent = r, Ac(e, e.transformState.scale), e.handleInitializeWrapperEvents(s), e.handleInitialize(s, r), e.initializeWindowEvents(), e.isInitialized = !0; + var i = cn(e); + yn(i, void 0, e.props.onInit); + }, this.props = t, this.setup = P_(this.props), this.transformState = E9(this.props); + } + return n; + }() +), KC = he.createContext(null), QH = function(n, t) { + return typeof n == "function" ? n(t) : n; +}, JH = he.forwardRef(function(n, t) { + var e = An(new XH(n)).current, s = QH(n.children, Vw(e)); + return F8(t, function() { + return Vw(e); + }, [e]), Rt(function() { + e.update(n); + }, [e, n]), he.createElement(KC.Provider, { value: e }, s); +}); +he.forwardRef(function(n, t) { + var e = An(null), s = qc(KC); + return Rt(function() { + return s.onChange(function(r) { + if (e.current) { + var i = 0, a = 0; + e.current.style.transform = s.handleTransformStyles(i, a, 1 / r.instance.transformState.scale); + } + }); + }, [s]), he.createElement("div", rl({}, n, { ref: PH([e, t]) })); +}); +function eW(n, t) { + t === void 0 && (t = {}); + var e = t.insertAt; + if (!(typeof document > "u")) { + var s = document.head || document.getElementsByTagName("head")[0], r = document.createElement("style"); + r.type = "text/css", e === "top" && s.firstChild ? s.insertBefore(r, s.firstChild) : s.appendChild(r), r.styleSheet ? r.styleSheet.cssText = n : r.appendChild(document.createTextNode(n)); + } +} +var tW = `.transform-component-module_wrapper__SPB86 { + position: relative; + width: -moz-fit-content; + width: fit-content; + height: -moz-fit-content; + height: fit-content; + overflow: hidden; + -webkit-touch-callout: none; /* iOS Safari */ + -webkit-user-select: none; /* Safari */ + -khtml-user-select: none; /* Konqueror HTML */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* Internet Explorer/Edge */ + user-select: none; + margin: 0; + padding: 0; + transform: translate3d(0, 0, 0); +} +.transform-component-module_content__FBWxo { + display: flex; + flex-wrap: wrap; + width: -moz-fit-content; + width: fit-content; + height: -moz-fit-content; + height: fit-content; + margin: 0; + padding: 0; + transform-origin: 0% 0%; +} +.transform-component-module_content__FBWxo img { + pointer-events: none; +} +`, N_ = { wrapper: "transform-component-module_wrapper__SPB86", content: "transform-component-module_content__FBWxo" }; +eW(tW); +var nW = function(n) { + var t = n.children, e = n.wrapperClass, s = e === void 0 ? "" : e, r = n.contentClass, i = r === void 0 ? "" : r, a = n.wrapperStyle, o = n.contentStyle, c = n.wrapperProps, u = c === void 0 ? {} : c, f = n.contentProps, p = f === void 0 ? {} : f, g = qc(KC), y = g.init, v = g.cleanupWindowEvents, b = An(null), w = An(null); + return Rt(function() { + var E = b.current, x = w.current; + return E !== null && x !== null && y && (y == null || y(E, x)), function() { + v == null || v(); + }; + }, []), he.createElement( + "div", + rl({}, u, { ref: b, className: "".concat(Fw.wrapperClass, " ").concat(N_.wrapper, " ").concat(s), style: a }), + he.createElement("div", rl({}, p, { ref: w, className: "".concat(Fw.contentClass, " ").concat(N_.content, " ").concat(i), style: o }), t) + ); +}; +const ry = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx( + "textarea", + { + className: Ge( + "flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", + n + ), + ref: e, + ...t + } +)); +ry.displayName = "Textarea"; +var ZC = "Radio", [sW, O9] = Ir(ZC), [rW, iW] = sW(ZC), M9 = d.forwardRef( + (n, t) => { + const { + __scopeRadio: e, + name: s, + checked: r = !1, + required: i, + disabled: a, + value: o = "on", + onCheck: c, + form: u, + ...f + } = n, [p, g] = d.useState(null), y = un(t, (w) => g(w)), v = d.useRef(!1), b = p ? u || !!p.closest("form") : !0; + return /* @__PURE__ */ h.jsxs(rW, { scope: e, checked: r, disabled: a, children: [ + /* @__PURE__ */ h.jsx( + Ut.button, + { + type: "button", + role: "radio", + "aria-checked": r, + "data-state": F9(r), + "data-disabled": a ? "" : void 0, + disabled: a, + value: o, + ...f, + ref: y, + onClick: Xe(n.onClick, (w) => { + r || c == null || c(), b && (v.current = w.isPropagationStopped(), v.current || w.stopPropagation()); + }) + } + ), + b && /* @__PURE__ */ h.jsx( + j9, + { + control: p, + bubbles: !v.current, + name: s, + value: o, + checked: r, + required: i, + disabled: a, + form: u, + style: { transform: "translateX(-100%)" } + } + ) + ] }); + } +); +M9.displayName = ZC; +var D9 = "RadioIndicator", L9 = d.forwardRef( + (n, t) => { + const { __scopeRadio: e, forceMount: s, ...r } = n, i = iW(D9, e); + return /* @__PURE__ */ h.jsx(ui, { present: s || i.checked, children: /* @__PURE__ */ h.jsx( + Ut.span, + { + "data-state": F9(i.checked), + "data-disabled": i.disabled ? "" : void 0, + ...r, + ref: t + } + ) }); + } +); +L9.displayName = D9; +var aW = "RadioBubbleInput", j9 = d.forwardRef( + ({ + __scopeRadio: n, + control: t, + checked: e, + bubbles: s = !0, + ...r + }, i) => { + const a = d.useRef(null), o = un(a, i), c = yC(e), u = rv(t); + return d.useEffect(() => { + const f = a.current; + if (!f) return; + const p = window.HTMLInputElement.prototype, y = Object.getOwnPropertyDescriptor( + p, + "checked" + ).set; + if (c !== e && y) { + const v = new Event("click", { bubbles: s }); + y.call(f, e), f.dispatchEvent(v); + } + }, [c, e, s]), /* @__PURE__ */ h.jsx( + Ut.input, + { + type: "radio", + "aria-hidden": !0, + defaultChecked: e, + ...r, + tabIndex: -1, + ref: o, + style: { + ...r.style, + ...u, + position: "absolute", + pointerEvents: "none", + opacity: 0, + margin: 0 + } + } + ); + } +); +j9.displayName = aW; +function F9(n) { + return n ? "checked" : "unchecked"; +} +var oW = ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"], Cv = "RadioGroup", [lW] = Ir(Cv, [ + Xd, + O9 +]), V9 = Xd(), B9 = O9(), [cW, uW] = lW(Cv), U9 = d.forwardRef( + (n, t) => { + const { + __scopeRadioGroup: e, + name: s, + defaultValue: r, + value: i, + required: a = !1, + disabled: o = !1, + orientation: c, + dir: u, + loop: f = !0, + onValueChange: p, + ...g + } = n, y = V9(e), v = nv(u), [b, w] = Hc({ + prop: i, + defaultProp: r ?? null, + onChange: p, + caller: Cv + }); + return /* @__PURE__ */ h.jsx( + cW, + { + scope: e, + name: s, + required: a, + disabled: o, + value: b, + onValueChange: w, + children: /* @__PURE__ */ h.jsx( + fC, + { + asChild: !0, + ...y, + orientation: c, + dir: v, + loop: f, + children: /* @__PURE__ */ h.jsx( + Ut.div, + { + role: "radiogroup", + "aria-required": a, + "aria-orientation": c, + "data-disabled": o ? "" : void 0, + dir: v, + ...g, + ref: t + } + ) + } + ) + } + ); + } +); +U9.displayName = Cv; +var q9 = "RadioGroupItem", z9 = d.forwardRef( + (n, t) => { + const { __scopeRadioGroup: e, disabled: s, ...r } = n, i = uW(q9, e), a = i.disabled || s, o = V9(e), c = B9(e), u = d.useRef(null), f = un(t, u), p = i.value === r.value, g = d.useRef(!1); + return d.useEffect(() => { + const y = (b) => { + oW.includes(b.key) && (g.current = !0); + }, v = () => g.current = !1; + return document.addEventListener("keydown", y), document.addEventListener("keyup", v), () => { + document.removeEventListener("keydown", y), document.removeEventListener("keyup", v); + }; + }, []), /* @__PURE__ */ h.jsx( + pC, + { + asChild: !0, + ...o, + focusable: !a, + active: p, + children: /* @__PURE__ */ h.jsx( + M9, + { + disabled: a, + required: i.required, + checked: p, + ...c, + ...r, + name: i.name, + ref: f, + onCheck: () => i.onValueChange(r.value), + onKeyDown: Xe((y) => { + y.key === "Enter" && y.preventDefault(); + }), + onFocus: Xe(r.onFocus, () => { + var y; + g.current && ((y = u.current) == null || y.click()); + }) + } + ) + } + ); + } +); +z9.displayName = q9; +var dW = "RadioGroupIndicator", H9 = d.forwardRef( + (n, t) => { + const { __scopeRadioGroup: e, ...s } = n, r = B9(e); + return /* @__PURE__ */ h.jsx(L9, { ...r, ...s, ref: t }); + } +); +H9.displayName = dW; +var W9 = U9, G9 = z9, hW = H9; +const Y9 = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx(W9, { className: Ge("grid gap-2", n), ...t, ref: e })); +Y9.displayName = W9.displayName; +const eg = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx( + G9, + { + ref: e, + className: Ge( + "aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", + n + ), + ...t, + children: /* @__PURE__ */ h.jsx(hW, { className: "flex items-center justify-center", children: /* @__PURE__ */ h.jsx(WS, { className: "h-2.5 w-2.5 fill-current text-current" }) }) + } +)); +eg.displayName = G9.displayName; +function fW({ + isOpen: n, + onClose: t, + onPublish: e, + originalTitle: s, + originalImageId: r, + isPublishing: i = !1, + editingPostId: a +}) { + const { user: o } = Qa(), [c, u] = fe("new"), [f, p] = fe(s), [g, y] = fe(""), [v, b] = fe([]), [w, E] = fe([]), [x, C] = fe(!1); + Rt(() => { + n && o && (_(), u(a ? "add-to-post" : "new")); + }, [n, o, a]); + const _ = async () => { + if (o) { + C(!0); + try { + const { data: N, error: $ } = await ct.from("collections").select("id, name, slug").eq("user_id", o.id).order("name"); + if ($) throw $; + b(N || []); + } catch (N) { + console.error("Error loading collections:", N); + } finally { + C(!1); + } + } + }, k = (N) => { + E( + ($) => $.includes(N) ? $.filter((D) => D !== N) : [...$, N] + ); + }, A = (N) => { + N.preventDefault(), e( + c, + f.trim() || void 0, + g.trim() || void 0, + r, + w.length > 0 ? w : void 0 + ); + }, T = () => { + i || t(); + }; + return n ? /* @__PURE__ */ h.jsx("div", { className: "fixed inset-0 bg-black/50 z-[10000] flex items-center justify-center p-4", children: /* @__PURE__ */ h.jsx("div", { className: "bg-background rounded-xl shadow-2xl max-w-md w-full max-h-[90vh] overflow-y-auto", children: /* @__PURE__ */ h.jsxs("div", { className: "p-6", children: [ + /* @__PURE__ */ h.jsx("h2", { className: "text-xl font-semibold text-foreground mb-4", children: "Publish Generated Image" }), + /* @__PURE__ */ h.jsxs("form", { onSubmit: A, className: "space-y-4", children: [ + /* @__PURE__ */ h.jsxs("div", { children: [ + /* @__PURE__ */ h.jsx(ha, { className: "text-sm font-medium text-foreground mb-3 block", children: "Publishing Option" }), + /* @__PURE__ */ h.jsxs( + Y9, + { + value: c, + onValueChange: (N) => u(N), + className: "space-y-3", + children: [ + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center space-x-2 p-3 border rounded-lg hover:bg-muted/50 transition-colors", children: [ + /* @__PURE__ */ h.jsx(eg, { value: "overwrite", id: "overwrite" }), + /* @__PURE__ */ h.jsxs("div", { className: "flex-1", children: [ + /* @__PURE__ */ h.jsx(ha, { htmlFor: "overwrite", className: "font-medium cursor-pointer", children: /* @__PURE__ */ h.jsxs("div", { className: "flex items-center gap-2", children: [ + /* @__PURE__ */ h.jsx(m3, { className: "h-4 w-4" }), + "Overwrite Original" + ] }) }), + /* @__PURE__ */ h.jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Replace the original image with the generated version" }) + ] }) + ] }), + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center space-x-2 p-3 border rounded-lg hover:bg-muted/50 transition-colors", children: [ + /* @__PURE__ */ h.jsx(eg, { value: "new", id: "new" }), + /* @__PURE__ */ h.jsxs("div", { className: "flex-1", children: [ + /* @__PURE__ */ h.jsx(ha, { htmlFor: "new", className: "font-medium cursor-pointer", children: /* @__PURE__ */ h.jsxs("div", { className: "flex items-center gap-2", children: [ + /* @__PURE__ */ h.jsx(nw, { className: "h-4 w-4" }), + "Create New Post" + ] }) }), + /* @__PURE__ */ h.jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Save as a new image in your gallery" }) + ] }) + ] }), + r && /* @__PURE__ */ h.jsxs("div", { className: "flex items-center space-x-2 p-3 border rounded-lg hover:bg-muted/50 transition-colors", children: [ + /* @__PURE__ */ h.jsx(eg, { value: "version", id: "version" }), + /* @__PURE__ */ h.jsxs("div", { className: "flex-1", children: [ + /* @__PURE__ */ h.jsx(ha, { htmlFor: "version", className: "font-medium cursor-pointer", children: /* @__PURE__ */ h.jsxs("div", { className: "flex items-center gap-2", children: [ + /* @__PURE__ */ h.jsx(tw, { className: "h-4 w-4" }), + "Save as Version" + ] }) }), + /* @__PURE__ */ h.jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Create a new version linked to the original image" }) + ] }) + ] }) + ] + } + ) + ] }), + (c === "new" || c === "version" || c === "add-to-post") && /* @__PURE__ */ h.jsxs("div", { className: "space-y-4 pt-2", children: [ + /* @__PURE__ */ h.jsxs("div", { children: [ + /* @__PURE__ */ h.jsxs(ha, { htmlFor: "title", className: "text-sm font-medium text-foreground", children: [ + "Title ", + /* @__PURE__ */ h.jsx("span", { className: "text-muted-foreground", children: "(optional)" }) + ] }), + /* @__PURE__ */ h.jsx( + Np, + { + id: "title", + value: f, + onChange: (N) => p(N.target.value), + placeholder: "Enter a title...", + className: "mt-1", + disabled: i + } + ) + ] }), + /* @__PURE__ */ h.jsxs("div", { children: [ + /* @__PURE__ */ h.jsxs(ha, { htmlFor: "description", className: "text-sm font-medium text-foreground", children: [ + "Description ", + /* @__PURE__ */ h.jsx("span", { className: "text-muted-foreground", children: "(optional)" }) + ] }), + /* @__PURE__ */ h.jsx( + ry, + { + id: "description", + value: g, + onChange: (N) => y(N.target.value), + placeholder: "Add a description for your generated image...", + className: "mt-1 resize-none", + rows: 3, + disabled: i + } + ) + ] }), + v.length > 0 && /* @__PURE__ */ h.jsxs("div", { children: [ + /* @__PURE__ */ h.jsxs(ha, { className: "text-sm font-medium text-foreground mb-2 flex items-center gap-2", children: [ + /* @__PURE__ */ h.jsx(Id, { className: "h-4 w-4" }), + "Add to Collections ", + /* @__PURE__ */ h.jsx("span", { className: "text-muted-foreground", children: "(optional)" }) + ] }), + /* @__PURE__ */ h.jsx("div", { className: "mt-2 space-y-2 max-h-32 overflow-y-auto border rounded-lg p-3", children: x ? /* @__PURE__ */ h.jsx("div", { className: "text-sm text-muted-foreground text-center py-2", children: "Loading collections..." }) : v.map((N) => /* @__PURE__ */ h.jsxs("div", { className: "flex items-center space-x-2", children: [ + /* @__PURE__ */ h.jsx( + ov, + { + id: `collection-${N.id}`, + checked: w.includes(N.id), + onCheckedChange: () => k(N.id), + disabled: i + } + ), + /* @__PURE__ */ h.jsx( + "label", + { + htmlFor: `collection-${N.id}`, + className: "text-sm cursor-pointer flex-1", + children: N.name + } + ) + ] }, N.id)) }), + w.length > 0 && /* @__PURE__ */ h.jsxs("p", { className: "text-xs text-muted-foreground mt-2", children: [ + "Will be added to ", + w.length, + " collection", + w.length > 1 ? "s" : "" + ] }) + ] }) + ] }), + /* @__PURE__ */ h.jsxs("div", { className: "flex gap-3 pt-4", children: [ + /* @__PURE__ */ h.jsx( + Me, + { + type: "button", + variant: "outline", + onClick: T, + className: "flex-1", + disabled: i, + children: "Cancel" + } + ), + /* @__PURE__ */ h.jsx( + Me, + { + type: "submit", + className: "flex-1", + disabled: i, + children: i ? /* @__PURE__ */ h.jsxs("div", { className: "flex items-center gap-2", children: [ + /* @__PURE__ */ h.jsx("div", { className: "animate-spin rounded-full h-4 w-4 border-2 border-white border-t-transparent" }), + "Publishing..." + ] }) : /* @__PURE__ */ h.jsxs("div", { className: "flex items-center gap-2", children: [ + c === "overwrite" && /* @__PURE__ */ h.jsx(m3, { className: "h-4 w-4" }), + c === "new" && /* @__PURE__ */ h.jsx(nw, { className: "h-4 w-4" }), + c === "version" && /* @__PURE__ */ h.jsx(tw, { className: "h-4 w-4" }), + c === "add-to-post" && /* @__PURE__ */ h.jsx(Id, { className: "h-4 w-4" }), + c === "overwrite" ? "Overwrite" : c === "version" ? "Save Version" : c === "add-to-post" ? "Add to Post" : "Publish New" + ] }) + } + ) + ] }) + ] }) + ] }) }) }) : null; +} +const pW = ["top", "right", "bottom", "left"], ul = Math.min, ir = Math.max, iy = Math.round, Am = Math.floor, Li = (n) => ({ + x: n, + y: n +}), mW = { + left: "right", + right: "left", + bottom: "top", + top: "bottom" +}, gW = { + start: "end", + end: "start" +}; +function Uw(n, t, e) { + return ir(n, ul(t, e)); +} +function Ua(n, t) { + return typeof n == "function" ? n(t) : n; +} +function qa(n) { + return n.split("-")[0]; +} +function eh(n) { + return n.split("-")[1]; +} +function XC(n) { + return n === "x" ? "y" : "x"; +} +function QC(n) { + return n === "y" ? "height" : "width"; +} +const yW = /* @__PURE__ */ new Set(["top", "bottom"]); +function Oi(n) { + return yW.has(qa(n)) ? "y" : "x"; +} +function JC(n) { + return XC(Oi(n)); +} +function vW(n, t, e) { + e === void 0 && (e = !1); + const s = eh(n), r = JC(n), i = QC(r); + let a = r === "x" ? s === (e ? "end" : "start") ? "right" : "left" : s === "start" ? "bottom" : "top"; + return t.reference[i] > t.floating[i] && (a = ay(a)), [a, ay(a)]; +} +function bW(n) { + const t = ay(n); + return [qw(n), t, qw(t)]; +} +function qw(n) { + return n.replace(/start|end/g, (t) => gW[t]); +} +const $_ = ["left", "right"], R_ = ["right", "left"], wW = ["top", "bottom"], xW = ["bottom", "top"]; +function CW(n, t, e) { + switch (n) { + case "top": + case "bottom": + return e ? t ? R_ : $_ : t ? $_ : R_; + case "left": + case "right": + return t ? wW : xW; + default: + return []; + } +} +function _W(n, t, e, s) { + const r = eh(n); + let i = CW(qa(n), e === "start", s); + return r && (i = i.map((a) => a + "-" + r), t && (i = i.concat(i.map(qw)))), i; +} +function ay(n) { + return n.replace(/left|right|bottom|top/g, (t) => mW[t]); +} +function SW(n) { + return { + top: 0, + right: 0, + bottom: 0, + left: 0, + ...n + }; +} +function K9(n) { + return typeof n != "number" ? SW(n) : { + top: n, + right: n, + bottom: n, + left: n + }; +} +function oy(n) { + const { + x: t, + y: e, + width: s, + height: r + } = n; + return { + width: s, + height: r, + top: e, + left: t, + right: t + s, + bottom: e + r, + x: t, + y: e + }; +} +function I_(n, t, e) { + let { + reference: s, + floating: r + } = n; + const i = Oi(t), a = JC(t), o = QC(a), c = qa(t), u = i === "y", f = s.x + s.width / 2 - r.width / 2, p = s.y + s.height / 2 - r.height / 2, g = s[o] / 2 - r[o] / 2; + let y; + switch (c) { + case "top": + y = { + x: f, + y: s.y - r.height + }; + break; + case "bottom": + y = { + x: f, + y: s.y + s.height + }; + break; + case "right": + y = { + x: s.x + s.width, + y: p + }; + break; + case "left": + y = { + x: s.x - r.width, + y: p + }; + break; + default: + y = { + x: s.x, + y: s.y + }; + } + switch (eh(t)) { + case "start": + y[a] -= g * (e && u ? -1 : 1); + break; + case "end": + y[a] += g * (e && u ? -1 : 1); + break; + } + return y; +} +const EW = async (n, t, e) => { + const { + placement: s = "bottom", + strategy: r = "absolute", + middleware: i = [], + platform: a + } = e, o = i.filter(Boolean), c = await (a.isRTL == null ? void 0 : a.isRTL(t)); + let u = await a.getElementRects({ + reference: n, + floating: t, + strategy: r + }), { + x: f, + y: p + } = I_(u, s, c), g = s, y = {}, v = 0; + for (let b = 0; b < o.length; b++) { + const { + name: w, + fn: E + } = o[b], { + x, + y: C, + data: _, + reset: k + } = await E({ + x: f, + y: p, + initialPlacement: s, + placement: g, + strategy: r, + middlewareData: y, + rects: u, + platform: a, + elements: { + reference: n, + floating: t + } + }); + f = x ?? f, p = C ?? p, y = { + ...y, + [w]: { + ...y[w], + ..._ + } + }, k && v <= 50 && (v++, typeof k == "object" && (k.placement && (g = k.placement), k.rects && (u = k.rects === !0 ? await a.getElementRects({ + reference: n, + floating: t, + strategy: r + }) : k.rects), { + x: f, + y: p + } = I_(u, g, c)), b = -1); + } + return { + x: f, + y: p, + placement: g, + strategy: r, + middlewareData: y + }; +}; +async function wf(n, t) { + var e; + t === void 0 && (t = {}); + const { + x: s, + y: r, + platform: i, + rects: a, + elements: o, + strategy: c + } = n, { + boundary: u = "clippingAncestors", + rootBoundary: f = "viewport", + elementContext: p = "floating", + altBoundary: g = !1, + padding: y = 0 + } = Ua(t, n), v = K9(y), w = o[g ? p === "floating" ? "reference" : "floating" : p], E = oy(await i.getClippingRect({ + element: (e = await (i.isElement == null ? void 0 : i.isElement(w))) == null || e ? w : w.contextElement || await (i.getDocumentElement == null ? void 0 : i.getDocumentElement(o.floating)), + boundary: u, + rootBoundary: f, + strategy: c + })), x = p === "floating" ? { + x: s, + y: r, + width: a.floating.width, + height: a.floating.height + } : a.reference, C = await (i.getOffsetParent == null ? void 0 : i.getOffsetParent(o.floating)), _ = await (i.isElement == null ? void 0 : i.isElement(C)) ? await (i.getScale == null ? void 0 : i.getScale(C)) || { + x: 1, + y: 1 + } : { + x: 1, + y: 1 + }, k = oy(i.convertOffsetParentRelativeRectToViewportRelativeRect ? await i.convertOffsetParentRelativeRectToViewportRelativeRect({ + elements: o, + rect: x, + offsetParent: C, + strategy: c + }) : x); + return { + top: (E.top - k.top + v.top) / _.y, + bottom: (k.bottom - E.bottom + v.bottom) / _.y, + left: (E.left - k.left + v.left) / _.x, + right: (k.right - E.right + v.right) / _.x + }; +} +const kW = (n) => ({ + name: "arrow", + options: n, + async fn(t) { + const { + x: e, + y: s, + placement: r, + rects: i, + platform: a, + elements: o, + middlewareData: c + } = t, { + element: u, + padding: f = 0 + } = Ua(n, t) || {}; + if (u == null) + return {}; + const p = K9(f), g = { + x: e, + y: s + }, y = JC(r), v = QC(y), b = await a.getDimensions(u), w = y === "y", E = w ? "top" : "left", x = w ? "bottom" : "right", C = w ? "clientHeight" : "clientWidth", _ = i.reference[v] + i.reference[y] - g[y] - i.floating[v], k = g[y] - i.reference[y], A = await (a.getOffsetParent == null ? void 0 : a.getOffsetParent(u)); + let T = A ? A[C] : 0; + (!T || !await (a.isElement == null ? void 0 : a.isElement(A))) && (T = o.floating[C] || i.floating[v]); + const N = _ / 2 - k / 2, $ = T / 2 - b[v] / 2 - 1, D = ul(p[E], $), V = ul(p[x], $), j = D, B = T - b[v] - V, W = T / 2 - b[v] / 2 + N, J = Uw(j, W, B), G = !c.arrow && eh(r) != null && W !== J && i.reference[v] / 2 - (W < j ? D : V) - b[v] / 2 < 0, q = G ? W < j ? W - j : W - B : 0; + return { + [y]: g[y] + q, + data: { + [y]: J, + centerOffset: W - J - q, + ...G && { + alignmentOffset: q + } + }, + reset: G + }; + } +}), TW = function(n) { + return n === void 0 && (n = {}), { + name: "flip", + options: n, + async fn(t) { + var e, s; + const { + placement: r, + middlewareData: i, + rects: a, + initialPlacement: o, + platform: c, + elements: u + } = t, { + mainAxis: f = !0, + crossAxis: p = !0, + fallbackPlacements: g, + fallbackStrategy: y = "bestFit", + fallbackAxisSideDirection: v = "none", + flipAlignment: b = !0, + ...w + } = Ua(n, t); + if ((e = i.arrow) != null && e.alignmentOffset) + return {}; + const E = qa(r), x = Oi(o), C = qa(o) === o, _ = await (c.isRTL == null ? void 0 : c.isRTL(u.floating)), k = g || (C || !b ? [ay(o)] : bW(o)), A = v !== "none"; + !g && A && k.push(..._W(o, b, v, _)); + const T = [o, ...k], N = await wf(t, w), $ = []; + let D = ((s = i.flip) == null ? void 0 : s.overflows) || []; + if (f && $.push(N[E]), p) { + const W = vW(r, a, _); + $.push(N[W[0]], N[W[1]]); + } + if (D = [...D, { + placement: r, + overflows: $ + }], !$.every((W) => W <= 0)) { + var V, j; + const W = (((V = i.flip) == null ? void 0 : V.index) || 0) + 1, J = T[W]; + if (J && (!(p === "alignment" ? x !== Oi(J) : !1) || // We leave the current main axis only if every placement on that axis + // overflows the main axis. + D.every((H) => Oi(H.placement) === x ? H.overflows[0] > 0 : !0))) + return { + data: { + index: W, + overflows: D + }, + reset: { + placement: J + } + }; + let G = (j = D.filter((q) => q.overflows[0] <= 0).sort((q, H) => q.overflows[1] - H.overflows[1])[0]) == null ? void 0 : j.placement; + if (!G) + switch (y) { + case "bestFit": { + var B; + const q = (B = D.filter((H) => { + if (A) { + const L = Oi(H.placement); + return L === x || // Create a bias to the `y` side axis due to horizontal + // reading directions favoring greater width. + L === "y"; + } + return !0; + }).map((H) => [H.placement, H.overflows.filter((L) => L > 0).reduce((L, X) => L + X, 0)]).sort((H, L) => H[1] - L[1])[0]) == null ? void 0 : B[0]; + q && (G = q); + break; + } + case "initialPlacement": + G = o; + break; + } + if (r !== G) + return { + reset: { + placement: G + } + }; + } + return {}; + } + }; +}; +function O_(n, t) { + return { + top: n.top - t.height, + right: n.right - t.width, + bottom: n.bottom - t.height, + left: n.left - t.width + }; +} +function M_(n) { + return pW.some((t) => n[t] >= 0); +} +const AW = function(n) { + return n === void 0 && (n = {}), { + name: "hide", + options: n, + async fn(t) { + const { + rects: e + } = t, { + strategy: s = "referenceHidden", + ...r + } = Ua(n, t); + switch (s) { + case "referenceHidden": { + const i = await wf(t, { + ...r, + elementContext: "reference" + }), a = O_(i, e.reference); + return { + data: { + referenceHiddenOffsets: a, + referenceHidden: M_(a) + } + }; + } + case "escaped": { + const i = await wf(t, { + ...r, + altBoundary: !0 + }), a = O_(i, e.floating); + return { + data: { + escapedOffsets: a, + escaped: M_(a) + } + }; + } + default: + return {}; + } + } + }; +}, Z9 = /* @__PURE__ */ new Set(["left", "top"]); +async function PW(n, t) { + const { + placement: e, + platform: s, + elements: r + } = n, i = await (s.isRTL == null ? void 0 : s.isRTL(r.floating)), a = qa(e), o = eh(e), c = Oi(e) === "y", u = Z9.has(a) ? -1 : 1, f = i && c ? -1 : 1, p = Ua(t, n); + let { + mainAxis: g, + crossAxis: y, + alignmentAxis: v + } = typeof p == "number" ? { + mainAxis: p, + crossAxis: 0, + alignmentAxis: null + } : { + mainAxis: p.mainAxis || 0, + crossAxis: p.crossAxis || 0, + alignmentAxis: p.alignmentAxis + }; + return o && typeof v == "number" && (y = o === "end" ? v * -1 : v), c ? { + x: y * f, + y: g * u + } : { + x: g * u, + y: y * f + }; +} +const NW = function(n) { + return n === void 0 && (n = 0), { + name: "offset", + options: n, + async fn(t) { + var e, s; + const { + x: r, + y: i, + placement: a, + middlewareData: o + } = t, c = await PW(t, n); + return a === ((e = o.offset) == null ? void 0 : e.placement) && (s = o.arrow) != null && s.alignmentOffset ? {} : { + x: r + c.x, + y: i + c.y, + data: { + ...c, + placement: a + } + }; + } + }; +}, $W = function(n) { + return n === void 0 && (n = {}), { + name: "shift", + options: n, + async fn(t) { + const { + x: e, + y: s, + placement: r + } = t, { + mainAxis: i = !0, + crossAxis: a = !1, + limiter: o = { + fn: (w) => { + let { + x: E, + y: x + } = w; + return { + x: E, + y: x + }; + } + }, + ...c + } = Ua(n, t), u = { + x: e, + y: s + }, f = await wf(t, c), p = Oi(qa(r)), g = XC(p); + let y = u[g], v = u[p]; + if (i) { + const w = g === "y" ? "top" : "left", E = g === "y" ? "bottom" : "right", x = y + f[w], C = y - f[E]; + y = Uw(x, y, C); + } + if (a) { + const w = p === "y" ? "top" : "left", E = p === "y" ? "bottom" : "right", x = v + f[w], C = v - f[E]; + v = Uw(x, v, C); + } + const b = o.fn({ + ...t, + [g]: y, + [p]: v + }); + return { + ...b, + data: { + x: b.x - e, + y: b.y - s, + enabled: { + [g]: i, + [p]: a + } + } + }; + } + }; +}, RW = function(n) { + return n === void 0 && (n = {}), { + options: n, + fn(t) { + const { + x: e, + y: s, + placement: r, + rects: i, + middlewareData: a + } = t, { + offset: o = 0, + mainAxis: c = !0, + crossAxis: u = !0 + } = Ua(n, t), f = { + x: e, + y: s + }, p = Oi(r), g = XC(p); + let y = f[g], v = f[p]; + const b = Ua(o, t), w = typeof b == "number" ? { + mainAxis: b, + crossAxis: 0 + } : { + mainAxis: 0, + crossAxis: 0, + ...b + }; + if (c) { + const C = g === "y" ? "height" : "width", _ = i.reference[g] - i.floating[C] + w.mainAxis, k = i.reference[g] + i.reference[C] - w.mainAxis; + y < _ ? y = _ : y > k && (y = k); + } + if (u) { + var E, x; + const C = g === "y" ? "width" : "height", _ = Z9.has(qa(r)), k = i.reference[p] - i.floating[C] + (_ && ((E = a.offset) == null ? void 0 : E[p]) || 0) + (_ ? 0 : w.crossAxis), A = i.reference[p] + i.reference[C] + (_ ? 0 : ((x = a.offset) == null ? void 0 : x[p]) || 0) - (_ ? w.crossAxis : 0); + v < k ? v = k : v > A && (v = A); + } + return { + [g]: y, + [p]: v + }; + } + }; +}, IW = function(n) { + return n === void 0 && (n = {}), { + name: "size", + options: n, + async fn(t) { + var e, s; + const { + placement: r, + rects: i, + platform: a, + elements: o + } = t, { + apply: c = () => { + }, + ...u + } = Ua(n, t), f = await wf(t, u), p = qa(r), g = eh(r), y = Oi(r) === "y", { + width: v, + height: b + } = i.floating; + let w, E; + p === "top" || p === "bottom" ? (w = p, E = g === (await (a.isRTL == null ? void 0 : a.isRTL(o.floating)) ? "start" : "end") ? "left" : "right") : (E = p, w = g === "end" ? "top" : "bottom"); + const x = b - f.top - f.bottom, C = v - f.left - f.right, _ = ul(b - f[w], x), k = ul(v - f[E], C), A = !t.middlewareData.shift; + let T = _, N = k; + if ((e = t.middlewareData.shift) != null && e.enabled.x && (N = C), (s = t.middlewareData.shift) != null && s.enabled.y && (T = x), A && !g) { + const D = ir(f.left, 0), V = ir(f.right, 0), j = ir(f.top, 0), B = ir(f.bottom, 0); + y ? N = v - 2 * (D !== 0 || V !== 0 ? D + V : ir(f.left, f.right)) : T = b - 2 * (j !== 0 || B !== 0 ? j + B : ir(f.top, f.bottom)); + } + await c({ + ...t, + availableWidth: N, + availableHeight: T + }); + const $ = await a.getDimensions(o.floating); + return v !== $.width || b !== $.height ? { + reset: { + rects: !0 + } + } : {}; + } + }; +}; +function _v() { + return typeof window < "u"; +} +function th(n) { + return X9(n) ? (n.nodeName || "").toLowerCase() : "#document"; +} +function lr(n) { + var t; + return (n == null || (t = n.ownerDocument) == null ? void 0 : t.defaultView) || window; +} +function Qi(n) { + var t; + return (t = (X9(n) ? n.ownerDocument : n.document) || window.document) == null ? void 0 : t.documentElement; +} +function X9(n) { + return _v() ? n instanceof Node || n instanceof lr(n).Node : !1; +} +function oi(n) { + return _v() ? n instanceof Element || n instanceof lr(n).Element : !1; +} +function Vi(n) { + return _v() ? n instanceof HTMLElement || n instanceof lr(n).HTMLElement : !1; +} +function D_(n) { + return !_v() || typeof ShadowRoot > "u" ? !1 : n instanceof ShadowRoot || n instanceof lr(n).ShadowRoot; +} +const OW = /* @__PURE__ */ new Set(["inline", "contents"]); +function Fp(n) { + const { + overflow: t, + overflowX: e, + overflowY: s, + display: r + } = li(n); + return /auto|scroll|overlay|hidden|clip/.test(t + s + e) && !OW.has(r); +} +const MW = /* @__PURE__ */ new Set(["table", "td", "th"]); +function DW(n) { + return MW.has(th(n)); +} +const LW = [":popover-open", ":modal"]; +function Sv(n) { + return LW.some((t) => { + try { + return n.matches(t); + } catch { + return !1; + } + }); +} +const jW = ["transform", "translate", "scale", "rotate", "perspective"], FW = ["transform", "translate", "scale", "rotate", "perspective", "filter"], VW = ["paint", "layout", "strict", "content"]; +function e2(n) { + const t = t2(), e = oi(n) ? li(n) : n; + return jW.some((s) => e[s] ? e[s] !== "none" : !1) || (e.containerType ? e.containerType !== "normal" : !1) || !t && (e.backdropFilter ? e.backdropFilter !== "none" : !1) || !t && (e.filter ? e.filter !== "none" : !1) || FW.some((s) => (e.willChange || "").includes(s)) || VW.some((s) => (e.contain || "").includes(s)); +} +function BW(n) { + let t = dl(n); + for (; Vi(t) && !Fd(t); ) { + if (e2(t)) + return t; + if (Sv(t)) + return null; + t = dl(t); + } + return null; +} +function t2() { + return typeof CSS > "u" || !CSS.supports ? !1 : CSS.supports("-webkit-backdrop-filter", "none"); +} +const UW = /* @__PURE__ */ new Set(["html", "body", "#document"]); +function Fd(n) { + return UW.has(th(n)); +} +function li(n) { + return lr(n).getComputedStyle(n); +} +function Ev(n) { + return oi(n) ? { + scrollLeft: n.scrollLeft, + scrollTop: n.scrollTop + } : { + scrollLeft: n.scrollX, + scrollTop: n.scrollY + }; +} +function dl(n) { + if (th(n) === "html") + return n; + const t = ( + // Step into the shadow DOM of the parent of a slotted node. + n.assignedSlot || // DOM Element detected. + n.parentNode || // ShadowRoot detected. + D_(n) && n.host || // Fallback. + Qi(n) + ); + return D_(t) ? t.host : t; +} +function Q9(n) { + const t = dl(n); + return Fd(t) ? n.ownerDocument ? n.ownerDocument.body : n.body : Vi(t) && Fp(t) ? t : Q9(t); +} +function xf(n, t, e) { + var s; + t === void 0 && (t = []), e === void 0 && (e = !0); + const r = Q9(n), i = r === ((s = n.ownerDocument) == null ? void 0 : s.body), a = lr(r); + if (i) { + const o = zw(a); + return t.concat(a, a.visualViewport || [], Fp(r) ? r : [], o && e ? xf(o) : []); + } + return t.concat(r, xf(r, [], e)); +} +function zw(n) { + return n.parent && Object.getPrototypeOf(n.parent) ? n.frameElement : null; +} +function J9(n) { + const t = li(n); + let e = parseFloat(t.width) || 0, s = parseFloat(t.height) || 0; + const r = Vi(n), i = r ? n.offsetWidth : e, a = r ? n.offsetHeight : s, o = iy(e) !== i || iy(s) !== a; + return o && (e = i, s = a), { + width: e, + height: s, + $: o + }; +} +function n2(n) { + return oi(n) ? n : n.contextElement; +} +function Su(n) { + const t = n2(n); + if (!Vi(t)) + return Li(1); + const e = t.getBoundingClientRect(), { + width: s, + height: r, + $: i + } = J9(t); + let a = (i ? iy(e.width) : e.width) / s, o = (i ? iy(e.height) : e.height) / r; + return (!a || !Number.isFinite(a)) && (a = 1), (!o || !Number.isFinite(o)) && (o = 1), { + x: a, + y: o + }; +} +const qW = /* @__PURE__ */ Li(0); +function eP(n) { + const t = lr(n); + return !t2() || !t.visualViewport ? qW : { + x: t.visualViewport.offsetLeft, + y: t.visualViewport.offsetTop + }; +} +function zW(n, t, e) { + return t === void 0 && (t = !1), !e || t && e !== lr(n) ? !1 : t; +} +function Dc(n, t, e, s) { + t === void 0 && (t = !1), e === void 0 && (e = !1); + const r = n.getBoundingClientRect(), i = n2(n); + let a = Li(1); + t && (s ? oi(s) && (a = Su(s)) : a = Su(n)); + const o = zW(i, e, s) ? eP(i) : Li(0); + let c = (r.left + o.x) / a.x, u = (r.top + o.y) / a.y, f = r.width / a.x, p = r.height / a.y; + if (i) { + const g = lr(i), y = s && oi(s) ? lr(s) : s; + let v = g, b = zw(v); + for (; b && s && y !== v; ) { + const w = Su(b), E = b.getBoundingClientRect(), x = li(b), C = E.left + (b.clientLeft + parseFloat(x.paddingLeft)) * w.x, _ = E.top + (b.clientTop + parseFloat(x.paddingTop)) * w.y; + c *= w.x, u *= w.y, f *= w.x, p *= w.y, c += C, u += _, v = lr(b), b = zw(v); + } + } + return oy({ + width: f, + height: p, + x: c, + y: u + }); +} +function kv(n, t) { + const e = Ev(n).scrollLeft; + return t ? t.left + e : Dc(Qi(n)).left + e; +} +function tP(n, t) { + const e = n.getBoundingClientRect(), s = e.left + t.scrollLeft - kv(n, e), r = e.top + t.scrollTop; + return { + x: s, + y: r + }; +} +function HW(n) { + let { + elements: t, + rect: e, + offsetParent: s, + strategy: r + } = n; + const i = r === "fixed", a = Qi(s), o = t ? Sv(t.floating) : !1; + if (s === a || o && i) + return e; + let c = { + scrollLeft: 0, + scrollTop: 0 + }, u = Li(1); + const f = Li(0), p = Vi(s); + if ((p || !p && !i) && ((th(s) !== "body" || Fp(a)) && (c = Ev(s)), Vi(s))) { + const y = Dc(s); + u = Su(s), f.x = y.x + s.clientLeft, f.y = y.y + s.clientTop; + } + const g = a && !p && !i ? tP(a, c) : Li(0); + return { + width: e.width * u.x, + height: e.height * u.y, + x: e.x * u.x - c.scrollLeft * u.x + f.x + g.x, + y: e.y * u.y - c.scrollTop * u.y + f.y + g.y + }; +} +function WW(n) { + return Array.from(n.getClientRects()); +} +function GW(n) { + const t = Qi(n), e = Ev(n), s = n.ownerDocument.body, r = ir(t.scrollWidth, t.clientWidth, s.scrollWidth, s.clientWidth), i = ir(t.scrollHeight, t.clientHeight, s.scrollHeight, s.clientHeight); + let a = -e.scrollLeft + kv(n); + const o = -e.scrollTop; + return li(s).direction === "rtl" && (a += ir(t.clientWidth, s.clientWidth) - r), { + width: r, + height: i, + x: a, + y: o + }; +} +const L_ = 25; +function YW(n, t) { + const e = lr(n), s = Qi(n), r = e.visualViewport; + let i = s.clientWidth, a = s.clientHeight, o = 0, c = 0; + if (r) { + i = r.width, a = r.height; + const f = t2(); + (!f || f && t === "fixed") && (o = r.offsetLeft, c = r.offsetTop); + } + const u = kv(s); + if (u <= 0) { + const f = s.ownerDocument, p = f.body, g = getComputedStyle(p), y = f.compatMode === "CSS1Compat" && parseFloat(g.marginLeft) + parseFloat(g.marginRight) || 0, v = Math.abs(s.clientWidth - p.clientWidth - y); + v <= L_ && (i -= v); + } else u <= L_ && (i += u); + return { + width: i, + height: a, + x: o, + y: c + }; +} +const KW = /* @__PURE__ */ new Set(["absolute", "fixed"]); +function ZW(n, t) { + const e = Dc(n, !0, t === "fixed"), s = e.top + n.clientTop, r = e.left + n.clientLeft, i = Vi(n) ? Su(n) : Li(1), a = n.clientWidth * i.x, o = n.clientHeight * i.y, c = r * i.x, u = s * i.y; + return { + width: a, + height: o, + x: c, + y: u + }; +} +function j_(n, t, e) { + let s; + if (t === "viewport") + s = YW(n, e); + else if (t === "document") + s = GW(Qi(n)); + else if (oi(t)) + s = ZW(t, e); + else { + const r = eP(n); + s = { + x: t.x - r.x, + y: t.y - r.y, + width: t.width, + height: t.height + }; + } + return oy(s); +} +function nP(n, t) { + const e = dl(n); + return e === t || !oi(e) || Fd(e) ? !1 : li(e).position === "fixed" || nP(e, t); +} +function XW(n, t) { + const e = t.get(n); + if (e) + return e; + let s = xf(n, [], !1).filter((o) => oi(o) && th(o) !== "body"), r = null; + const i = li(n).position === "fixed"; + let a = i ? dl(n) : n; + for (; oi(a) && !Fd(a); ) { + const o = li(a), c = e2(a); + !c && o.position === "fixed" && (r = null), (i ? !c && !r : !c && o.position === "static" && !!r && KW.has(r.position) || Fp(a) && !c && nP(n, a)) ? s = s.filter((f) => f !== a) : r = o, a = dl(a); + } + return t.set(n, s), s; +} +function QW(n) { + let { + element: t, + boundary: e, + rootBoundary: s, + strategy: r + } = n; + const a = [...e === "clippingAncestors" ? Sv(t) ? [] : XW(t, this._c) : [].concat(e), s], o = a[0], c = a.reduce((u, f) => { + const p = j_(t, f, r); + return u.top = ir(p.top, u.top), u.right = ul(p.right, u.right), u.bottom = ul(p.bottom, u.bottom), u.left = ir(p.left, u.left), u; + }, j_(t, o, r)); + return { + width: c.right - c.left, + height: c.bottom - c.top, + x: c.left, + y: c.top + }; +} +function JW(n) { + const { + width: t, + height: e + } = J9(n); + return { + width: t, + height: e + }; +} +function eG(n, t, e) { + const s = Vi(t), r = Qi(t), i = e === "fixed", a = Dc(n, !0, i, t); + let o = { + scrollLeft: 0, + scrollTop: 0 + }; + const c = Li(0); + function u() { + c.x = kv(r); + } + if (s || !s && !i) + if ((th(t) !== "body" || Fp(r)) && (o = Ev(t)), s) { + const y = Dc(t, !0, i, t); + c.x = y.x + t.clientLeft, c.y = y.y + t.clientTop; + } else r && u(); + i && !s && r && u(); + const f = r && !s && !i ? tP(r, o) : Li(0), p = a.left + o.scrollLeft - c.x - f.x, g = a.top + o.scrollTop - c.y - f.y; + return { + x: p, + y: g, + width: a.width, + height: a.height + }; +} +function Tb(n) { + return li(n).position === "static"; +} +function F_(n, t) { + if (!Vi(n) || li(n).position === "fixed") + return null; + if (t) + return t(n); + let e = n.offsetParent; + return Qi(n) === e && (e = e.ownerDocument.body), e; +} +function sP(n, t) { + const e = lr(n); + if (Sv(n)) + return e; + if (!Vi(n)) { + let r = dl(n); + for (; r && !Fd(r); ) { + if (oi(r) && !Tb(r)) + return r; + r = dl(r); + } + return e; + } + let s = F_(n, t); + for (; s && DW(s) && Tb(s); ) + s = F_(s, t); + return s && Fd(s) && Tb(s) && !e2(s) ? e : s || BW(n) || e; +} +const tG = async function(n) { + const t = this.getOffsetParent || sP, e = this.getDimensions, s = await e(n.floating); + return { + reference: eG(n.reference, await t(n.floating), n.strategy), + floating: { + x: 0, + y: 0, + width: s.width, + height: s.height + } + }; +}; +function nG(n) { + return li(n).direction === "rtl"; +} +const sG = { + convertOffsetParentRelativeRectToViewportRelativeRect: HW, + getDocumentElement: Qi, + getClippingRect: QW, + getOffsetParent: sP, + getElementRects: tG, + getClientRects: WW, + getDimensions: JW, + getScale: Su, + isElement: oi, + isRTL: nG +}; +function rP(n, t) { + return n.x === t.x && n.y === t.y && n.width === t.width && n.height === t.height; +} +function rG(n, t) { + let e = null, s; + const r = Qi(n); + function i() { + var o; + clearTimeout(s), (o = e) == null || o.disconnect(), e = null; + } + function a(o, c) { + o === void 0 && (o = !1), c === void 0 && (c = 1), i(); + const u = n.getBoundingClientRect(), { + left: f, + top: p, + width: g, + height: y + } = u; + if (o || t(), !g || !y) + return; + const v = Am(p), b = Am(r.clientWidth - (f + g)), w = Am(r.clientHeight - (p + y)), E = Am(f), C = { + rootMargin: -v + "px " + -b + "px " + -w + "px " + -E + "px", + threshold: ir(0, ul(1, c)) || 1 + }; + let _ = !0; + function k(A) { + const T = A[0].intersectionRatio; + if (T !== c) { + if (!_) + return a(); + T ? a(!1, T) : s = setTimeout(() => { + a(!1, 1e-7); + }, 1e3); + } + T === 1 && !rP(u, n.getBoundingClientRect()) && a(), _ = !1; + } + try { + e = new IntersectionObserver(k, { + ...C, + // Handle <iframe>s + root: r.ownerDocument + }); + } catch { + e = new IntersectionObserver(k, C); + } + e.observe(n); + } + return a(!0), i; +} +function iP(n, t, e, s) { + s === void 0 && (s = {}); + const { + ancestorScroll: r = !0, + ancestorResize: i = !0, + elementResize: a = typeof ResizeObserver == "function", + layoutShift: o = typeof IntersectionObserver == "function", + animationFrame: c = !1 + } = s, u = n2(n), f = r || i ? [...u ? xf(u) : [], ...xf(t)] : []; + f.forEach((E) => { + r && E.addEventListener("scroll", e, { + passive: !0 + }), i && E.addEventListener("resize", e); + }); + const p = u && o ? rG(u, e) : null; + let g = -1, y = null; + a && (y = new ResizeObserver((E) => { + let [x] = E; + x && x.target === u && y && (y.unobserve(t), cancelAnimationFrame(g), g = requestAnimationFrame(() => { + var C; + (C = y) == null || C.observe(t); + })), e(); + }), u && !c && y.observe(u), y.observe(t)); + let v, b = c ? Dc(n) : null; + c && w(); + function w() { + const E = Dc(n); + b && !rP(b, E) && e(), b = E, v = requestAnimationFrame(w); + } + return e(), () => { + var E; + f.forEach((x) => { + r && x.removeEventListener("scroll", e), i && x.removeEventListener("resize", e); + }), p == null || p(), (E = y) == null || E.disconnect(), y = null, c && cancelAnimationFrame(v); + }; +} +const iG = NW, aP = $W, oP = TW, aG = IW, oG = AW, V_ = kW, lG = RW, lP = (n, t, e) => { + const s = /* @__PURE__ */ new Map(), r = { + platform: sG, + ...e + }, i = { + ...r.platform, + _c: s + }; + return EW(n, t, { + ...r, + platform: i + }); +}; +var cG = typeof document < "u", uG = function() { +}, tg = cG ? qS : uG; +function ly(n, t) { + if (n === t) + return !0; + if (typeof n != typeof t) + return !1; + if (typeof n == "function" && n.toString() === t.toString()) + return !0; + let e, s, r; + if (n && t && typeof n == "object") { + if (Array.isArray(n)) { + if (e = n.length, e !== t.length) return !1; + for (s = e; s-- !== 0; ) + if (!ly(n[s], t[s])) + return !1; + return !0; + } + if (r = Object.keys(n), e = r.length, e !== Object.keys(t).length) + return !1; + for (s = e; s-- !== 0; ) + if (!{}.hasOwnProperty.call(t, r[s])) + return !1; + for (s = e; s-- !== 0; ) { + const i = r[s]; + if (!(i === "_owner" && n.$$typeof) && !ly(n[i], t[i])) + return !1; + } + return !0; + } + return n !== n && t !== t; +} +function cP(n) { + return typeof window > "u" ? 1 : (n.ownerDocument.defaultView || window).devicePixelRatio || 1; +} +function B_(n, t) { + const e = cP(n); + return Math.round(t * e) / e; +} +function Ab(n) { + const t = d.useRef(n); + return tg(() => { + t.current = n; + }), t; +} +function dG(n) { + n === void 0 && (n = {}); + const { + placement: t = "bottom", + strategy: e = "absolute", + middleware: s = [], + platform: r, + elements: { + reference: i, + floating: a + } = {}, + transform: o = !0, + whileElementsMounted: c, + open: u + } = n, [f, p] = d.useState({ + x: 0, + y: 0, + strategy: e, + placement: t, + middlewareData: {}, + isPositioned: !1 + }), [g, y] = d.useState(s); + ly(g, s) || y(s); + const [v, b] = d.useState(null), [w, E] = d.useState(null), x = d.useCallback((H) => { + H !== A.current && (A.current = H, b(H)); + }, []), C = d.useCallback((H) => { + H !== T.current && (T.current = H, E(H)); + }, []), _ = i || v, k = a || w, A = d.useRef(null), T = d.useRef(null), N = d.useRef(f), $ = c != null, D = Ab(c), V = Ab(r), j = Ab(u), B = d.useCallback(() => { + if (!A.current || !T.current) + return; + const H = { + placement: t, + strategy: e, + middleware: g + }; + V.current && (H.platform = V.current), lP(A.current, T.current, H).then((L) => { + const X = { + ...L, + // The floating element's position may be recomputed while it's closed + // but still mounted (such as when transitioning out). To ensure + // `isPositioned` will be `false` initially on the next open, avoid + // setting it to `true` when `open === false` (must be specified). + isPositioned: j.current !== !1 + }; + W.current && !ly(N.current, X) && (N.current = X, ZS.flushSync(() => { + p(X); + })); + }); + }, [g, t, e, V, j]); + tg(() => { + u === !1 && N.current.isPositioned && (N.current.isPositioned = !1, p((H) => ({ + ...H, + isPositioned: !1 + }))); + }, [u]); + const W = d.useRef(!1); + tg(() => (W.current = !0, () => { + W.current = !1; + }), []), tg(() => { + if (_ && (A.current = _), k && (T.current = k), _ && k) { + if (D.current) + return D.current(_, k, B); + B(); + } + }, [_, k, B, D, $]); + const J = d.useMemo(() => ({ + reference: A, + floating: T, + setReference: x, + setFloating: C + }), [x, C]), G = d.useMemo(() => ({ + reference: _, + floating: k + }), [_, k]), q = d.useMemo(() => { + const H = { + position: e, + left: 0, + top: 0 + }; + if (!G.floating) + return H; + const L = B_(G.floating, f.x), X = B_(G.floating, f.y); + return o ? { + ...H, + transform: "translate(" + L + "px, " + X + "px)", + ...cP(G.floating) >= 1.5 && { + willChange: "transform" + } + } : { + position: e, + left: L, + top: X + }; + }, [e, o, G.floating, f.x, f.y]); + return d.useMemo(() => ({ + ...f, + update: B, + refs: J, + elements: G, + floatingStyles: q + }), [f, B, J, G, q]); +} +const hG = (n) => { + function t(e) { + return {}.hasOwnProperty.call(e, "current"); + } + return { + name: "arrow", + options: n, + fn(e) { + const { + element: s, + padding: r + } = typeof n == "function" ? n(e) : n; + return s && t(s) ? s.current != null ? V_({ + element: s.current, + padding: r + }).fn(e) : {} : s ? V_({ + element: s, + padding: r + }).fn(e) : {}; + } + }; +}, fG = (n, t) => ({ + ...iG(n), + options: [n, t] +}), pG = (n, t) => ({ + ...aP(n), + options: [n, t] +}), mG = (n, t) => ({ + ...lG(n), + options: [n, t] +}), gG = (n, t) => ({ + ...oP(n), + options: [n, t] +}), yG = (n, t) => ({ + ...aG(n), + options: [n, t] +}), vG = (n, t) => ({ + ...oG(n), + options: [n, t] +}), bG = (n, t) => ({ + ...hG(n), + options: [n, t] +}); +var wG = "Arrow", uP = d.forwardRef((n, t) => { + const { children: e, width: s = 10, height: r = 5, ...i } = n; + return /* @__PURE__ */ h.jsx( + Ut.svg, + { + ...i, + ref: t, + width: s, + height: r, + viewBox: "0 0 30 10", + preserveAspectRatio: "none", + children: n.asChild ? e : /* @__PURE__ */ h.jsx("polygon", { points: "0,0 30,0 15,10" }) + } + ); +}); +uP.displayName = wG; +var xG = uP, s2 = "Popper", [dP, hP] = Ir(s2), [CG, fP] = dP(s2), pP = (n) => { + const { __scopePopper: t, children: e } = n, [s, r] = d.useState(null); + return /* @__PURE__ */ h.jsx(CG, { scope: t, anchor: s, onAnchorChange: r, children: e }); +}; +pP.displayName = s2; +var mP = "PopperAnchor", gP = d.forwardRef( + (n, t) => { + const { __scopePopper: e, virtualRef: s, ...r } = n, i = fP(mP, e), a = d.useRef(null), o = un(t, a), c = d.useRef(null); + return d.useEffect(() => { + const u = c.current; + c.current = (s == null ? void 0 : s.current) || a.current, u !== c.current && i.onAnchorChange(c.current); + }), s ? null : /* @__PURE__ */ h.jsx(Ut.div, { ...r, ref: o }); + } +); +gP.displayName = mP; +var r2 = "PopperContent", [_G, SG] = dP(r2), yP = d.forwardRef( + (n, t) => { + var rt, qe, Ye, ee, ge, ze; + const { + __scopePopper: e, + side: s = "bottom", + sideOffset: r = 0, + align: i = "center", + alignOffset: a = 0, + arrowPadding: o = 0, + avoidCollisions: c = !0, + collisionBoundary: u = [], + collisionPadding: f = 0, + sticky: p = "partial", + hideWhenDetached: g = !1, + updatePositionStrategy: y = "optimized", + onPlaced: v, + ...b + } = n, w = fP(r2, e), [E, x] = d.useState(null), C = un(t, (st) => x(st)), [_, k] = d.useState(null), A = rv(_), T = (A == null ? void 0 : A.width) ?? 0, N = (A == null ? void 0 : A.height) ?? 0, $ = s + (i !== "center" ? "-" + i : ""), D = typeof f == "number" ? f : { top: 0, right: 0, bottom: 0, left: 0, ...f }, V = Array.isArray(u) ? u : [u], j = V.length > 0, B = { + padding: D, + boundary: V.filter(kG), + // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries + altBoundary: j + }, { refs: W, floatingStyles: J, placement: G, isPositioned: q, middlewareData: H } = dG({ + // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues + strategy: "fixed", + placement: $, + whileElementsMounted: (...st) => iP(...st, { + animationFrame: y === "always" + }), + elements: { + reference: w.anchor + }, + middleware: [ + fG({ mainAxis: r + N, alignmentAxis: a }), + c && pG({ + mainAxis: !0, + crossAxis: !1, + limiter: p === "partial" ? mG() : void 0, + ...B + }), + c && gG({ ...B }), + yG({ + ...B, + apply: ({ elements: st, rects: Pt, availableWidth: et, availableHeight: tn }) => { + const { width: hs, height: ne } = Pt.reference, ce = st.floating.style; + ce.setProperty("--radix-popper-available-width", `${et}px`), ce.setProperty("--radix-popper-available-height", `${tn}px`), ce.setProperty("--radix-popper-anchor-width", `${hs}px`), ce.setProperty("--radix-popper-anchor-height", `${ne}px`); + } + }), + _ && bG({ element: _, padding: o }), + TG({ arrowWidth: T, arrowHeight: N }), + g && vG({ strategy: "referenceHidden", ...B }) + ] + }), [L, X] = wP(G), te = Fi(v); + ai(() => { + q && (te == null || te()); + }, [q, te]); + const Te = (rt = H.arrow) == null ? void 0 : rt.x, _e = (qe = H.arrow) == null ? void 0 : qe.y, Je = ((Ye = H.arrow) == null ? void 0 : Ye.centerOffset) !== 0, [Re, nt] = d.useState(); + return ai(() => { + E && nt(window.getComputedStyle(E).zIndex); + }, [E]), /* @__PURE__ */ h.jsx( + "div", + { + ref: W.setFloating, + "data-radix-popper-content-wrapper": "", + style: { + ...J, + transform: q ? J.transform : "translate(0, -200%)", + // keep off the page when measuring + minWidth: "max-content", + zIndex: Re, + "--radix-popper-transform-origin": [ + (ee = H.transformOrigin) == null ? void 0 : ee.x, + (ge = H.transformOrigin) == null ? void 0 : ge.y + ].join(" "), + // hide the content if using the hide middleware and should be hidden + // set visibility to hidden and disable pointer events so the UI behaves + // as if the PopperContent isn't there at all + ...((ze = H.hide) == null ? void 0 : ze.referenceHidden) && { + visibility: "hidden", + pointerEvents: "none" + } + }, + dir: n.dir, + children: /* @__PURE__ */ h.jsx( + _G, + { + scope: e, + placedSide: L, + onArrowChange: k, + arrowX: Te, + arrowY: _e, + shouldHideArrow: Je, + children: /* @__PURE__ */ h.jsx( + Ut.div, + { + "data-side": L, + "data-align": X, + ...b, + ref: C, + style: { + ...b.style, + // if the PopperContent hasn't been placed yet (not all measurements done) + // we prevent animations so that users's animation don't kick in too early referring wrong sides + animation: q ? void 0 : "none" + } + } + ) + } + ) + } + ); + } +); +yP.displayName = r2; +var vP = "PopperArrow", EG = { + top: "bottom", + right: "left", + bottom: "top", + left: "right" +}, bP = d.forwardRef(function(t, e) { + const { __scopePopper: s, ...r } = t, i = SG(vP, s), a = EG[i.placedSide]; + return ( + // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`) + // doesn't report size as we'd expect on SVG elements. + // it reports their bounding box which is effectively the largest path inside the SVG. + /* @__PURE__ */ h.jsx( + "span", + { + ref: i.onArrowChange, + style: { + position: "absolute", + left: i.arrowX, + top: i.arrowY, + [a]: 0, + transformOrigin: { + top: "", + right: "0 0", + bottom: "center 0", + left: "100% 0" + }[i.placedSide], + transform: { + top: "translateY(100%)", + right: "translateY(50%) rotate(90deg) translateX(-50%)", + bottom: "rotate(180deg)", + left: "translateY(50%) rotate(-90deg) translateX(50%)" + }[i.placedSide], + visibility: i.shouldHideArrow ? "hidden" : void 0 + }, + children: /* @__PURE__ */ h.jsx( + xG, + { + ...r, + ref: e, + style: { + ...r.style, + // ensures the element can be measured correctly (mostly for if SVG) + display: "block" + } + } + ) + } + ) + ); +}); +bP.displayName = vP; +function kG(n) { + return n !== null; +} +var TG = (n) => ({ + name: "transformOrigin", + options: n, + fn(t) { + var w, E, x; + const { placement: e, rects: s, middlewareData: r } = t, a = ((w = r.arrow) == null ? void 0 : w.centerOffset) !== 0, o = a ? 0 : n.arrowWidth, c = a ? 0 : n.arrowHeight, [u, f] = wP(e), p = { start: "0%", center: "50%", end: "100%" }[f], g = (((E = r.arrow) == null ? void 0 : E.x) ?? 0) + o / 2, y = (((x = r.arrow) == null ? void 0 : x.y) ?? 0) + c / 2; + let v = "", b = ""; + return u === "bottom" ? (v = a ? p : `${g}px`, b = `${-c}px`) : u === "top" ? (v = a ? p : `${g}px`, b = `${s.floating.height + c}px`) : u === "right" ? (v = `${-c}px`, b = a ? p : `${y}px`) : u === "left" && (v = `${s.floating.width + c}px`, b = a ? p : `${y}px`), { data: { x: v, y: b } }; + } +}); +function wP(n) { + const [t, e = "center"] = n.split("-"); + return [t, e]; +} +var AG = pP, PG = gP, NG = yP, $G = bP; +// @__NO_SIDE_EFFECTS__ +function RG(n) { + const t = /* @__PURE__ */ IG(n), e = d.forwardRef((s, r) => { + const { children: i, ...a } = s, o = d.Children.toArray(i), c = o.find(MG); + if (c) { + const u = c.props.children, f = o.map((p) => p === c ? d.Children.count(u) > 1 ? d.Children.only(null) : d.isValidElement(u) ? u.props.children : null : p); + return /* @__PURE__ */ h.jsx(t, { ...a, ref: r, children: d.isValidElement(u) ? d.cloneElement(u, void 0, f) : null }); + } + return /* @__PURE__ */ h.jsx(t, { ...a, ref: r, children: i }); + }); + return e.displayName = `${n}.Slot`, e; +} +// @__NO_SIDE_EFFECTS__ +function IG(n) { + const t = d.forwardRef((e, s) => { + const { children: r, ...i } = e; + if (d.isValidElement(r)) { + const a = LG(r), o = DG(i, r.props); + return r.type !== d.Fragment && (o.ref = s ? vl(s, a) : a), d.cloneElement(r, o); + } + return d.Children.count(r) > 1 ? d.Children.only(null) : null; + }); + return t.displayName = `${n}.SlotClone`, t; +} +var OG = Symbol("radix.slottable"); +function MG(n) { + return d.isValidElement(n) && typeof n.type == "function" && "__radixId" in n.type && n.type.__radixId === OG; +} +function DG(n, t) { + const e = { ...t }; + for (const s in t) { + const r = n[s], i = t[s]; + /^on[A-Z]/.test(s) ? r && i ? e[s] = (...o) => { + const c = i(...o); + return r(...o), c; + } : r && (e[s] = r) : s === "style" ? e[s] = { ...r, ...i } : s === "className" && (e[s] = [r, i].filter(Boolean).join(" ")); + } + return { ...n, ...e }; +} +function LG(n) { + var s, r; + let t = (s = Object.getOwnPropertyDescriptor(n.props, "ref")) == null ? void 0 : s.get, e = t && "isReactWarning" in t && t.isReactWarning; + return e ? n.ref : (t = (r = Object.getOwnPropertyDescriptor(n, "ref")) == null ? void 0 : r.get, e = t && "isReactWarning" in t && t.isReactWarning, e ? n.props.ref : n.props.ref || n.ref); +} +var Hw = ["Enter", " "], jG = ["ArrowDown", "PageUp", "Home"], xP = ["ArrowUp", "PageDown", "End"], FG = [...jG, ...xP], VG = { + ltr: [...Hw, "ArrowRight"], + rtl: [...Hw, "ArrowLeft"] +}, BG = { + ltr: ["ArrowLeft"], + rtl: ["ArrowRight"] +}, Vp = "Menu", [Cf, UG, qG] = kk(Vp), [Wc, CP] = Ir(Vp, [ + qG, + hP, + Xd +]), Tv = hP(), _P = Xd(), [zG, Gc] = Wc(Vp), [HG, Bp] = Wc(Vp), SP = (n) => { + const { __scopeMenu: t, open: e = !1, children: s, dir: r, onOpenChange: i, modal: a = !0 } = n, o = Tv(t), [c, u] = d.useState(null), f = d.useRef(!1), p = Fi(i), g = nv(r); + return d.useEffect(() => { + const y = () => { + f.current = !0, document.addEventListener("pointerdown", v, { capture: !0, once: !0 }), document.addEventListener("pointermove", v, { capture: !0, once: !0 }); + }, v = () => f.current = !1; + return document.addEventListener("keydown", y, { capture: !0 }), () => { + document.removeEventListener("keydown", y, { capture: !0 }), document.removeEventListener("pointerdown", v, { capture: !0 }), document.removeEventListener("pointermove", v, { capture: !0 }); + }; + }, []), /* @__PURE__ */ h.jsx(AG, { ...o, children: /* @__PURE__ */ h.jsx( + zG, + { + scope: t, + open: e, + onOpenChange: p, + content: c, + onContentChange: u, + children: /* @__PURE__ */ h.jsx( + HG, + { + scope: t, + onClose: d.useCallback(() => p(!1), [p]), + isUsingKeyboardRef: f, + dir: g, + modal: a, + children: s + } + ) + } + ) }); +}; +SP.displayName = Vp; +var WG = "MenuAnchor", i2 = d.forwardRef( + (n, t) => { + const { __scopeMenu: e, ...s } = n, r = Tv(e); + return /* @__PURE__ */ h.jsx(PG, { ...r, ...s, ref: t }); + } +); +i2.displayName = WG; +var a2 = "MenuPortal", [GG, EP] = Wc(a2, { + forceMount: void 0 +}), kP = (n) => { + const { __scopeMenu: t, forceMount: e, children: s, container: r } = n, i = Gc(a2, t); + return /* @__PURE__ */ h.jsx(GG, { scope: t, forceMount: e, children: /* @__PURE__ */ h.jsx(ui, { present: e || i.open, children: /* @__PURE__ */ h.jsx(Gx, { asChild: !0, container: r, children: s }) }) }); +}; +kP.displayName = a2; +var kr = "MenuContent", [YG, o2] = Wc(kr), TP = d.forwardRef( + (n, t) => { + const e = EP(kr, n.__scopeMenu), { forceMount: s = e.forceMount, ...r } = n, i = Gc(kr, n.__scopeMenu), a = Bp(kr, n.__scopeMenu); + return /* @__PURE__ */ h.jsx(Cf.Provider, { scope: n.__scopeMenu, children: /* @__PURE__ */ h.jsx(ui, { present: s || i.open, children: /* @__PURE__ */ h.jsx(Cf.Slot, { scope: n.__scopeMenu, children: a.modal ? /* @__PURE__ */ h.jsx(KG, { ...r, ref: t }) : /* @__PURE__ */ h.jsx(ZG, { ...r, ref: t }) }) }) }); + } +), KG = d.forwardRef( + (n, t) => { + const e = Gc(kr, n.__scopeMenu), s = d.useRef(null), r = un(t, s); + return d.useEffect(() => { + const i = s.current; + if (i) return BE(i); + }, []), /* @__PURE__ */ h.jsx( + l2, + { + ...n, + ref: r, + trapFocus: e.open, + disableOutsidePointerEvents: e.open, + disableOutsideScroll: !0, + onFocusOutside: Xe( + n.onFocusOutside, + (i) => i.preventDefault(), + { checkForDefaultPrevented: !1 } + ), + onDismiss: () => e.onOpenChange(!1) + } + ); + } +), ZG = d.forwardRef((n, t) => { + const e = Gc(kr, n.__scopeMenu); + return /* @__PURE__ */ h.jsx( + l2, + { + ...n, + ref: t, + trapFocus: !1, + disableOutsidePointerEvents: !1, + disableOutsideScroll: !1, + onDismiss: () => e.onOpenChange(!1) + } + ); +}), XG = /* @__PURE__ */ RG("MenuContent.ScrollLock"), l2 = d.forwardRef( + (n, t) => { + const { + __scopeMenu: e, + loop: s = !1, + trapFocus: r, + onOpenAutoFocus: i, + onCloseAutoFocus: a, + disableOutsidePointerEvents: o, + onEntryFocus: c, + onEscapeKeyDown: u, + onPointerDownOutside: f, + onFocusOutside: p, + onInteractOutside: g, + onDismiss: y, + disableOutsideScroll: v, + ...b + } = n, w = Gc(kr, e), E = Bp(kr, e), x = Tv(e), C = _P(e), _ = UG(e), [k, A] = d.useState(null), T = d.useRef(null), N = un(t, T, w.onContentChange), $ = d.useRef(0), D = d.useRef(""), V = d.useRef(0), j = d.useRef(null), B = d.useRef("right"), W = d.useRef(0), J = v ? Yx : d.Fragment, G = v ? { as: XG, allowPinchZoom: !0 } : void 0, q = (L) => { + var rt, qe; + const X = D.current + L, te = _().filter((Ye) => !Ye.disabled), Te = document.activeElement, _e = (rt = te.find((Ye) => Ye.ref.current === Te)) == null ? void 0 : rt.textValue, Je = te.map((Ye) => Ye.textValue), Re = cY(Je, X, _e), nt = (qe = te.find((Ye) => Ye.textValue === Re)) == null ? void 0 : qe.ref.current; + (function Ye(ee) { + D.current = ee, window.clearTimeout($.current), ee !== "" && ($.current = window.setTimeout(() => Ye(""), 1e3)); + })(X), nt && setTimeout(() => nt.focus()); + }; + d.useEffect(() => () => window.clearTimeout($.current), []), RE(); + const H = d.useCallback((L) => { + var te, Te; + return B.current === ((te = j.current) == null ? void 0 : te.side) && dY(L, (Te = j.current) == null ? void 0 : Te.area); + }, []); + return /* @__PURE__ */ h.jsx( + YG, + { + scope: e, + searchRef: D, + onItemEnter: d.useCallback( + (L) => { + H(L) && L.preventDefault(); + }, + [H] + ), + onItemLeave: d.useCallback( + (L) => { + var X; + H(L) || ((X = T.current) == null || X.focus(), A(null)); + }, + [H] + ), + onTriggerLeave: d.useCallback( + (L) => { + H(L) && L.preventDefault(); + }, + [H] + ), + pointerGraceTimerRef: V, + onPointerGraceIntentChange: d.useCallback((L) => { + j.current = L; + }, []), + children: /* @__PURE__ */ h.jsx(J, { ...G, children: /* @__PURE__ */ h.jsx( + Wx, + { + asChild: !0, + trapped: r, + onMountAutoFocus: Xe(i, (L) => { + var X; + L.preventDefault(), (X = T.current) == null || X.focus({ preventScroll: !0 }); + }), + onUnmountAutoFocus: a, + children: /* @__PURE__ */ h.jsx( + Hx, + { + asChild: !0, + disableOutsidePointerEvents: o, + onEscapeKeyDown: u, + onPointerDownOutside: f, + onFocusOutside: p, + onInteractOutside: g, + onDismiss: y, + children: /* @__PURE__ */ h.jsx( + fC, + { + asChild: !0, + ...C, + dir: E.dir, + orientation: "vertical", + loop: s, + currentTabStopId: k, + onCurrentTabStopIdChange: A, + onEntryFocus: Xe(c, (L) => { + E.isUsingKeyboardRef.current || L.preventDefault(); + }), + preventScrollOnEntryFocus: !0, + children: /* @__PURE__ */ h.jsx( + NG, + { + role: "menu", + "aria-orientation": "vertical", + "data-state": qP(w.open), + "data-radix-menu-content": "", + dir: E.dir, + ...x, + ...b, + ref: N, + style: { outline: "none", ...b.style }, + onKeyDown: Xe(b.onKeyDown, (L) => { + const te = L.target.closest("[data-radix-menu-content]") === L.currentTarget, Te = L.ctrlKey || L.altKey || L.metaKey, _e = L.key.length === 1; + te && (L.key === "Tab" && L.preventDefault(), !Te && _e && q(L.key)); + const Je = T.current; + if (L.target !== Je || !FG.includes(L.key)) return; + L.preventDefault(); + const nt = _().filter((rt) => !rt.disabled).map((rt) => rt.ref.current); + xP.includes(L.key) && nt.reverse(), oY(nt); + }), + onBlur: Xe(n.onBlur, (L) => { + L.currentTarget.contains(L.target) || (window.clearTimeout($.current), D.current = ""); + }), + onPointerMove: Xe( + n.onPointerMove, + _f((L) => { + const X = L.target, te = W.current !== L.clientX; + if (L.currentTarget.contains(X) && te) { + const Te = L.clientX > W.current ? "right" : "left"; + B.current = Te, W.current = L.clientX; + } + }) + ) + } + ) + } + ) + } + ) + } + ) }) + } + ); + } +); +TP.displayName = kr; +var QG = "MenuGroup", c2 = d.forwardRef( + (n, t) => { + const { __scopeMenu: e, ...s } = n; + return /* @__PURE__ */ h.jsx(Ut.div, { role: "group", ...s, ref: t }); + } +); +c2.displayName = QG; +var JG = "MenuLabel", AP = d.forwardRef( + (n, t) => { + const { __scopeMenu: e, ...s } = n; + return /* @__PURE__ */ h.jsx(Ut.div, { ...s, ref: t }); + } +); +AP.displayName = JG; +var cy = "MenuItem", U_ = "menu.itemSelect", Av = d.forwardRef( + (n, t) => { + const { disabled: e = !1, onSelect: s, ...r } = n, i = d.useRef(null), a = Bp(cy, n.__scopeMenu), o = o2(cy, n.__scopeMenu), c = un(t, i), u = d.useRef(!1), f = () => { + const p = i.current; + if (!e && p) { + const g = new CustomEvent(U_, { bubbles: !0, cancelable: !0 }); + p.addEventListener(U_, (y) => s == null ? void 0 : s(y), { once: !0 }), AE(p, g), g.defaultPrevented ? u.current = !1 : a.onClose(); + } + }; + return /* @__PURE__ */ h.jsx( + PP, + { + ...r, + ref: c, + disabled: e, + onClick: Xe(n.onClick, f), + onPointerDown: (p) => { + var g; + (g = n.onPointerDown) == null || g.call(n, p), u.current = !0; + }, + onPointerUp: Xe(n.onPointerUp, (p) => { + var g; + u.current || (g = p.currentTarget) == null || g.click(); + }), + onKeyDown: Xe(n.onKeyDown, (p) => { + const g = o.searchRef.current !== ""; + e || g && p.key === " " || Hw.includes(p.key) && (p.currentTarget.click(), p.preventDefault()); + }) + } + ); + } +); +Av.displayName = cy; +var PP = d.forwardRef( + (n, t) => { + const { __scopeMenu: e, disabled: s = !1, textValue: r, ...i } = n, a = o2(cy, e), o = _P(e), c = d.useRef(null), u = un(t, c), [f, p] = d.useState(!1), [g, y] = d.useState(""); + return d.useEffect(() => { + const v = c.current; + v && y((v.textContent ?? "").trim()); + }, [i.children]), /* @__PURE__ */ h.jsx( + Cf.ItemSlot, + { + scope: e, + disabled: s, + textValue: r ?? g, + children: /* @__PURE__ */ h.jsx(pC, { asChild: !0, ...o, focusable: !s, children: /* @__PURE__ */ h.jsx( + Ut.div, + { + role: "menuitem", + "data-highlighted": f ? "" : void 0, + "aria-disabled": s || void 0, + "data-disabled": s ? "" : void 0, + ...i, + ref: u, + onPointerMove: Xe( + n.onPointerMove, + _f((v) => { + s ? a.onItemLeave(v) : (a.onItemEnter(v), v.defaultPrevented || v.currentTarget.focus({ preventScroll: !0 })); + }) + ), + onPointerLeave: Xe( + n.onPointerLeave, + _f((v) => a.onItemLeave(v)) + ), + onFocus: Xe(n.onFocus, () => p(!0)), + onBlur: Xe(n.onBlur, () => p(!1)) + } + ) }) + } + ); + } +), eY = "MenuCheckboxItem", NP = d.forwardRef( + (n, t) => { + const { checked: e = !1, onCheckedChange: s, ...r } = n; + return /* @__PURE__ */ h.jsx(MP, { scope: n.__scopeMenu, checked: e, children: /* @__PURE__ */ h.jsx( + Av, + { + role: "menuitemcheckbox", + "aria-checked": uy(e) ? "mixed" : e, + ...r, + ref: t, + "data-state": d2(e), + onSelect: Xe( + r.onSelect, + () => s == null ? void 0 : s(uy(e) ? !0 : !e), + { checkForDefaultPrevented: !1 } + ) + } + ) }); + } +); +NP.displayName = eY; +var $P = "MenuRadioGroup", [tY, nY] = Wc( + $P, + { value: void 0, onValueChange: () => { + } } +), RP = d.forwardRef( + (n, t) => { + const { value: e, onValueChange: s, ...r } = n, i = Fi(s); + return /* @__PURE__ */ h.jsx(tY, { scope: n.__scopeMenu, value: e, onValueChange: i, children: /* @__PURE__ */ h.jsx(c2, { ...r, ref: t }) }); + } +); +RP.displayName = $P; +var IP = "MenuRadioItem", OP = d.forwardRef( + (n, t) => { + const { value: e, ...s } = n, r = nY(IP, n.__scopeMenu), i = e === r.value; + return /* @__PURE__ */ h.jsx(MP, { scope: n.__scopeMenu, checked: i, children: /* @__PURE__ */ h.jsx( + Av, + { + role: "menuitemradio", + "aria-checked": i, + ...s, + ref: t, + "data-state": d2(i), + onSelect: Xe( + s.onSelect, + () => { + var a; + return (a = r.onValueChange) == null ? void 0 : a.call(r, e); + }, + { checkForDefaultPrevented: !1 } + ) + } + ) }); + } +); +OP.displayName = IP; +var u2 = "MenuItemIndicator", [MP, sY] = Wc( + u2, + { checked: !1 } +), DP = d.forwardRef( + (n, t) => { + const { __scopeMenu: e, forceMount: s, ...r } = n, i = sY(u2, e); + return /* @__PURE__ */ h.jsx( + ui, + { + present: s || uy(i.checked) || i.checked === !0, + children: /* @__PURE__ */ h.jsx( + Ut.span, + { + ...r, + ref: t, + "data-state": d2(i.checked) + } + ) + } + ); + } +); +DP.displayName = u2; +var rY = "MenuSeparator", LP = d.forwardRef( + (n, t) => { + const { __scopeMenu: e, ...s } = n; + return /* @__PURE__ */ h.jsx( + Ut.div, + { + role: "separator", + "aria-orientation": "horizontal", + ...s, + ref: t + } + ); + } +); +LP.displayName = rY; +var iY = "MenuArrow", jP = d.forwardRef( + (n, t) => { + const { __scopeMenu: e, ...s } = n, r = Tv(e); + return /* @__PURE__ */ h.jsx($G, { ...r, ...s, ref: t }); + } +); +jP.displayName = iY; +var aY = "MenuSub", [one, FP] = Wc(aY), zh = "MenuSubTrigger", VP = d.forwardRef( + (n, t) => { + const e = Gc(zh, n.__scopeMenu), s = Bp(zh, n.__scopeMenu), r = FP(zh, n.__scopeMenu), i = o2(zh, n.__scopeMenu), a = d.useRef(null), { pointerGraceTimerRef: o, onPointerGraceIntentChange: c } = i, u = { __scopeMenu: n.__scopeMenu }, f = d.useCallback(() => { + a.current && window.clearTimeout(a.current), a.current = null; + }, []); + return d.useEffect(() => f, [f]), d.useEffect(() => { + const p = o.current; + return () => { + window.clearTimeout(p), c(null); + }; + }, [o, c]), /* @__PURE__ */ h.jsx(i2, { asChild: !0, ...u, children: /* @__PURE__ */ h.jsx( + PP, + { + id: r.triggerId, + "aria-haspopup": "menu", + "aria-expanded": e.open, + "aria-controls": r.contentId, + "data-state": qP(e.open), + ...n, + ref: vl(t, r.onTriggerChange), + onClick: (p) => { + var g; + (g = n.onClick) == null || g.call(n, p), !(n.disabled || p.defaultPrevented) && (p.currentTarget.focus(), e.open || e.onOpenChange(!0)); + }, + onPointerMove: Xe( + n.onPointerMove, + _f((p) => { + i.onItemEnter(p), !p.defaultPrevented && !n.disabled && !e.open && !a.current && (i.onPointerGraceIntentChange(null), a.current = window.setTimeout(() => { + e.onOpenChange(!0), f(); + }, 100)); + }) + ), + onPointerLeave: Xe( + n.onPointerLeave, + _f((p) => { + var y, v; + f(); + const g = (y = e.content) == null ? void 0 : y.getBoundingClientRect(); + if (g) { + const b = (v = e.content) == null ? void 0 : v.dataset.side, w = b === "right", E = w ? -5 : 5, x = g[w ? "left" : "right"], C = g[w ? "right" : "left"]; + i.onPointerGraceIntentChange({ + area: [ + // Apply a bleed on clientX to ensure that our exit point is + // consistently within polygon bounds + { x: p.clientX + E, y: p.clientY }, + { x, y: g.top }, + { x: C, y: g.top }, + { x: C, y: g.bottom }, + { x, y: g.bottom } + ], + side: b + }), window.clearTimeout(o.current), o.current = window.setTimeout( + () => i.onPointerGraceIntentChange(null), + 300 + ); + } else { + if (i.onTriggerLeave(p), p.defaultPrevented) return; + i.onPointerGraceIntentChange(null); + } + }) + ), + onKeyDown: Xe(n.onKeyDown, (p) => { + var y; + const g = i.searchRef.current !== ""; + n.disabled || g && p.key === " " || VG[s.dir].includes(p.key) && (e.onOpenChange(!0), (y = e.content) == null || y.focus(), p.preventDefault()); + }) + } + ) }); + } +); +VP.displayName = zh; +var BP = "MenuSubContent", UP = d.forwardRef( + (n, t) => { + const e = EP(kr, n.__scopeMenu), { forceMount: s = e.forceMount, ...r } = n, i = Gc(kr, n.__scopeMenu), a = Bp(kr, n.__scopeMenu), o = FP(BP, n.__scopeMenu), c = d.useRef(null), u = un(t, c); + return /* @__PURE__ */ h.jsx(Cf.Provider, { scope: n.__scopeMenu, children: /* @__PURE__ */ h.jsx(ui, { present: s || i.open, children: /* @__PURE__ */ h.jsx(Cf.Slot, { scope: n.__scopeMenu, children: /* @__PURE__ */ h.jsx( + l2, + { + id: o.contentId, + "aria-labelledby": o.triggerId, + ...r, + ref: u, + align: "start", + side: a.dir === "rtl" ? "left" : "right", + disableOutsidePointerEvents: !1, + disableOutsideScroll: !1, + trapFocus: !1, + onOpenAutoFocus: (f) => { + var p; + a.isUsingKeyboardRef.current && ((p = c.current) == null || p.focus()), f.preventDefault(); + }, + onCloseAutoFocus: (f) => f.preventDefault(), + onFocusOutside: Xe(n.onFocusOutside, (f) => { + f.target !== o.trigger && i.onOpenChange(!1); + }), + onEscapeKeyDown: Xe(n.onEscapeKeyDown, (f) => { + a.onClose(), f.preventDefault(); + }), + onKeyDown: Xe(n.onKeyDown, (f) => { + var y; + const p = f.currentTarget.contains(f.target), g = BG[a.dir].includes(f.key); + p && g && (i.onOpenChange(!1), (y = o.trigger) == null || y.focus(), f.preventDefault()); + }) + } + ) }) }) }); + } +); +UP.displayName = BP; +function qP(n) { + return n ? "open" : "closed"; +} +function uy(n) { + return n === "indeterminate"; +} +function d2(n) { + return uy(n) ? "indeterminate" : n ? "checked" : "unchecked"; +} +function oY(n) { + const t = document.activeElement; + for (const e of n) + if (e === t || (e.focus(), document.activeElement !== t)) return; +} +function lY(n, t) { + return n.map((e, s) => n[(t + s) % n.length]); +} +function cY(n, t, e) { + const r = t.length > 1 && Array.from(t).every((u) => u === t[0]) ? t[0] : t, i = e ? n.indexOf(e) : -1; + let a = lY(n, Math.max(i, 0)); + r.length === 1 && (a = a.filter((u) => u !== e)); + const c = a.find( + (u) => u.toLowerCase().startsWith(r.toLowerCase()) + ); + return c !== e ? c : void 0; +} +function uY(n, t) { + const { x: e, y: s } = n; + let r = !1; + for (let i = 0, a = t.length - 1; i < t.length; a = i++) { + const o = t[i], c = t[a], u = o.x, f = o.y, p = c.x, g = c.y; + f > s != g > s && e < (p - u) * (s - f) / (g - f) + u && (r = !r); + } + return r; +} +function dY(n, t) { + if (!t) return !1; + const e = { x: n.clientX, y: n.clientY }; + return uY(e, t); +} +function _f(n) { + return (t) => t.pointerType === "mouse" ? n(t) : void 0; +} +var hY = SP, fY = i2, pY = kP, mY = TP, gY = c2, yY = AP, vY = Av, bY = NP, wY = RP, xY = OP, CY = DP, _Y = LP, SY = jP, EY = VP, kY = UP, Pv = "DropdownMenu", [TY] = Ir( + Pv, + [CP] +), Is = CP(), [AY, zP] = TY(Pv), HP = (n) => { + const { + __scopeDropdownMenu: t, + children: e, + dir: s, + open: r, + defaultOpen: i, + onOpenChange: a, + modal: o = !0 + } = n, c = Is(t), u = d.useRef(null), [f, p] = Hc({ + prop: r, + defaultProp: i ?? !1, + onChange: a, + caller: Pv + }); + return /* @__PURE__ */ h.jsx( + AY, + { + scope: t, + triggerId: Sc(), + triggerRef: u, + contentId: Sc(), + open: f, + onOpenChange: p, + onOpenToggle: d.useCallback(() => p((g) => !g), [p]), + modal: o, + children: /* @__PURE__ */ h.jsx(hY, { ...c, open: f, onOpenChange: p, dir: s, modal: o, children: e }) + } + ); +}; +HP.displayName = Pv; +var WP = "DropdownMenuTrigger", GP = d.forwardRef( + (n, t) => { + const { __scopeDropdownMenu: e, disabled: s = !1, ...r } = n, i = zP(WP, e), a = Is(e); + return /* @__PURE__ */ h.jsx(fY, { asChild: !0, ...a, children: /* @__PURE__ */ h.jsx( + Ut.button, + { + type: "button", + id: i.triggerId, + "aria-haspopup": "menu", + "aria-expanded": i.open, + "aria-controls": i.open ? i.contentId : void 0, + "data-state": i.open ? "open" : "closed", + "data-disabled": s ? "" : void 0, + disabled: s, + ...r, + ref: vl(t, i.triggerRef), + onPointerDown: Xe(n.onPointerDown, (o) => { + !s && o.button === 0 && o.ctrlKey === !1 && (i.onOpenToggle(), i.open || o.preventDefault()); + }), + onKeyDown: Xe(n.onKeyDown, (o) => { + s || (["Enter", " "].includes(o.key) && i.onOpenToggle(), o.key === "ArrowDown" && i.onOpenChange(!0), ["Enter", " ", "ArrowDown"].includes(o.key) && o.preventDefault()); + }) + } + ) }); + } +); +GP.displayName = WP; +var PY = "DropdownMenuPortal", YP = (n) => { + const { __scopeDropdownMenu: t, ...e } = n, s = Is(t); + return /* @__PURE__ */ h.jsx(pY, { ...s, ...e }); +}; +YP.displayName = PY; +var KP = "DropdownMenuContent", ZP = d.forwardRef( + (n, t) => { + const { __scopeDropdownMenu: e, ...s } = n, r = zP(KP, e), i = Is(e), a = d.useRef(!1); + return /* @__PURE__ */ h.jsx( + mY, + { + id: r.contentId, + "aria-labelledby": r.triggerId, + ...i, + ...s, + ref: t, + onCloseAutoFocus: Xe(n.onCloseAutoFocus, (o) => { + var c; + a.current || (c = r.triggerRef.current) == null || c.focus(), a.current = !1, o.preventDefault(); + }), + onInteractOutside: Xe(n.onInteractOutside, (o) => { + const c = o.detail.originalEvent, u = c.button === 0 && c.ctrlKey === !0, f = c.button === 2 || u; + (!r.modal || f) && (a.current = !0); + }), + style: { + ...n.style, + "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)", + "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)", + "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)", + "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)", + "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)" + } + } + ); + } +); +ZP.displayName = KP; +var NY = "DropdownMenuGroup", $Y = d.forwardRef( + (n, t) => { + const { __scopeDropdownMenu: e, ...s } = n, r = Is(e); + return /* @__PURE__ */ h.jsx(gY, { ...r, ...s, ref: t }); + } +); +$Y.displayName = NY; +var RY = "DropdownMenuLabel", XP = d.forwardRef( + (n, t) => { + const { __scopeDropdownMenu: e, ...s } = n, r = Is(e); + return /* @__PURE__ */ h.jsx(yY, { ...r, ...s, ref: t }); + } +); +XP.displayName = RY; +var IY = "DropdownMenuItem", QP = d.forwardRef( + (n, t) => { + const { __scopeDropdownMenu: e, ...s } = n, r = Is(e); + return /* @__PURE__ */ h.jsx(vY, { ...r, ...s, ref: t }); + } +); +QP.displayName = IY; +var OY = "DropdownMenuCheckboxItem", JP = d.forwardRef((n, t) => { + const { __scopeDropdownMenu: e, ...s } = n, r = Is(e); + return /* @__PURE__ */ h.jsx(bY, { ...r, ...s, ref: t }); +}); +JP.displayName = OY; +var MY = "DropdownMenuRadioGroup", DY = d.forwardRef((n, t) => { + const { __scopeDropdownMenu: e, ...s } = n, r = Is(e); + return /* @__PURE__ */ h.jsx(wY, { ...r, ...s, ref: t }); +}); +DY.displayName = MY; +var LY = "DropdownMenuRadioItem", eN = d.forwardRef((n, t) => { + const { __scopeDropdownMenu: e, ...s } = n, r = Is(e); + return /* @__PURE__ */ h.jsx(xY, { ...r, ...s, ref: t }); +}); +eN.displayName = LY; +var jY = "DropdownMenuItemIndicator", tN = d.forwardRef((n, t) => { + const { __scopeDropdownMenu: e, ...s } = n, r = Is(e); + return /* @__PURE__ */ h.jsx(CY, { ...r, ...s, ref: t }); +}); +tN.displayName = jY; +var FY = "DropdownMenuSeparator", nN = d.forwardRef((n, t) => { + const { __scopeDropdownMenu: e, ...s } = n, r = Is(e); + return /* @__PURE__ */ h.jsx(_Y, { ...r, ...s, ref: t }); +}); +nN.displayName = FY; +var VY = "DropdownMenuArrow", BY = d.forwardRef( + (n, t) => { + const { __scopeDropdownMenu: e, ...s } = n, r = Is(e); + return /* @__PURE__ */ h.jsx(SY, { ...r, ...s, ref: t }); + } +); +BY.displayName = VY; +var UY = "DropdownMenuSubTrigger", sN = d.forwardRef((n, t) => { + const { __scopeDropdownMenu: e, ...s } = n, r = Is(e); + return /* @__PURE__ */ h.jsx(EY, { ...r, ...s, ref: t }); +}); +sN.displayName = UY; +var qY = "DropdownMenuSubContent", rN = d.forwardRef((n, t) => { + const { __scopeDropdownMenu: e, ...s } = n, r = Is(e); + return /* @__PURE__ */ h.jsx( + kY, + { + ...r, + ...s, + ref: t, + style: { + ...n.style, + "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)", + "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)", + "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)", + "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)", + "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)" + } + } + ); +}); +rN.displayName = qY; +var zY = HP, HY = GP, WY = YP, iN = ZP, aN = XP, oN = QP, lN = JP, cN = eN, uN = tN, dN = nN, hN = sN, fN = rN; +const q_ = zY, z_ = HY, GY = d.forwardRef(({ className: n, inset: t, children: e, ...s }, r) => /* @__PURE__ */ h.jsxs( + hN, + { + ref: r, + className: Ge( + "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[state=open]:bg-accent focus:bg-accent", + t && "pl-8", + n + ), + ...s, + children: [ + e, + /* @__PURE__ */ h.jsx(W8, { className: "ml-auto h-4 w-4" }) + ] + } +)); +GY.displayName = hN.displayName; +const YY = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx( + fN, + { + ref: e, + className: Ge( + "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", + n + ), + ...t + } +)); +YY.displayName = fN.displayName; +const Ww = d.forwardRef(({ className: n, sideOffset: t = 4, ...e }, s) => /* @__PURE__ */ h.jsx(WY, { children: /* @__PURE__ */ h.jsx( + iN, + { + ref: s, + sideOffset: t, + className: Ge( + "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", + n + ), + ...e + } +) })); +Ww.displayName = iN.displayName; +const ng = d.forwardRef(({ className: n, inset: t, ...e }, s) => /* @__PURE__ */ h.jsx( + oN, + { + ref: s, + className: Ge( + "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground", + t && "pl-8", + n + ), + ...e + } +)); +ng.displayName = oN.displayName; +const KY = d.forwardRef(({ className: n, children: t, checked: e, ...s }, r) => /* @__PURE__ */ h.jsxs( + lN, + { + ref: r, + className: Ge( + "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground", + n + ), + checked: e, + ...s, + children: [ + /* @__PURE__ */ h.jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ h.jsx(uN, { children: /* @__PURE__ */ h.jsx(Nx, { className: "h-4 w-4" }) }) }), + t + ] + } +)); +KY.displayName = lN.displayName; +const ZY = d.forwardRef(({ className: n, children: t, ...e }, s) => /* @__PURE__ */ h.jsxs( + cN, + { + ref: s, + className: Ge( + "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground", + n + ), + ...e, + children: [ + /* @__PURE__ */ h.jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ h.jsx(uN, { children: /* @__PURE__ */ h.jsx(WS, { className: "h-2 w-2 fill-current" }) }) }), + t + ] + } +)); +ZY.displayName = cN.displayName; +const XY = d.forwardRef(({ className: n, inset: t, ...e }, s) => /* @__PURE__ */ h.jsx( + aN, + { + ref: s, + className: Ge("px-2 py-1.5 text-sm font-semibold", t && "pl-8", n), + ...e + } +)); +XY.displayName = aN.displayName; +const pN = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx(dN, { ref: e, className: Ge("-mx-1 my-1 h-px bg-muted", n), ...t })); +pN.displayName = dN.displayName; +const H_ = ({ + presets: n, + onSelect: t, + disabled: e = !1, + activeId: s, + className: r = "", + variant: i = "default" +}) => n.length === 0 ? null : /* @__PURE__ */ h.jsx("div", { className: Ge("flex flex-wrap items-center gap-2", r), children: n.map((a) => /* @__PURE__ */ h.jsxs( + Me, + { + type: "button", + variant: i === "minimal" ? "ghost" : "secondary", + size: "sm", + disabled: e, + onClick: (o) => { + o.stopPropagation(), t(a); + }, + className: Ge( + i === "minimal" ? "h-6 px-2.5 text-xs text-white border border-white/20 hover:bg-white/20 hover:text-white rounded-full bg-black/40 backdrop-blur-md shadow-sm transition-all duration-200 hover:scale-105" : "h-8 px-3 text-xs", + s === a.id && "ring-2 ring-primary bg-primary/20", + "transition-all duration-200" + ), + title: a.prompt, + children: [ + a.icon && /* @__PURE__ */ h.jsx("span", { className: "mr-1.5", children: a.icon }), + /* @__PURE__ */ h.jsx("span", { children: a.name }) + ] + }, + a.id +)) }); +function QY({ + isOpen: n, + onClose: t, + imageUrl: e, + imageTitle: s, + originalImageId: r, + onPromptSubmit: i, + onPublish: a, + isGenerating: o = !1, + isPublishing: c = !1, + showPrompt: u = !0, + showPublish: f = !1, + generatedImageUrl: p, + currentIndex: g, + totalCount: y, + onNavigate: v, + onPreload: b, + // Wizard features + showWizardFeatures: w = !1, + promptTemplates: E = [], + onApplyTemplate: x, + onSaveTemplate: C, + onDeleteTemplate: _, + onOptimizePrompt: k, + isOptimizing: A = !1, + onMicrophoneToggle: T, + isRecording: N = !1, + isTranscribing: $ = !1, + showQuickPublish: D = !1, + onQuickPublish: V, + prompt: j, + onPromptChange: B, + // Prompt history + promptHistory: W = [], + historyIndex: J = -1, + onNavigateHistory: G, + onManualPromptEdit: q, + // Wizard navigation + onOpenInWizard: H, + quickActions: L = Bz +}) { + const [X, te] = fe(!1), [Te, _e] = fe(!1), [Je, Re] = fe(1), [nt, rt] = fe(""), [qe, Ye] = fe(!1), [ee, ge] = fe(!1), [ze, st] = fe(!1); + An(null); + const Pt = An(null); + An(0); + const et = An(null), tn = An(!1), hs = An(!1), ne = j !== void 0 ? j : nt, ce = (I) => { + B ? B(I) : rt(I); + }; + Rt(() => { + n && ge(!1); + }, [n]), Rt(() => { + if (!n) return; + const I = (K) => { + const se = K.target, Pe = se instanceof HTMLTextAreaElement || se instanceof HTMLInputElement || (se == null ? void 0 : se.contentEditable) === "true" || (se == null ? void 0 : se.tagName) === "TEXTAREA" || (se == null ? void 0 : se.tagName) === "INPUT"; + if (K.key === "Escape") { + if (Pe) + return; + t(); + } else K.key === "ArrowUp" && K.ctrlKey && G ? (K.preventDefault(), G("up")) : K.key === "ArrowDown" && K.ctrlKey && G ? (K.preventDefault(), G("down")) : K.key === "ArrowLeft" && !Pe && v ? (K.preventDefault(), v("prev")) : K.key === "ArrowRight" && !Pe && v ? (K.preventDefault(), v("next")) : K.key === " " && !Pe && u && (K.preventDefault(), ge(!ee)); + }; + return document.addEventListener("keydown", I), () => document.removeEventListener("keydown", I); + }, [n, t, v, g, y, u, ee, G]), Rt(() => () => { + Pt.current && clearTimeout(Pt.current); + }, []); + const ht = (I, K) => { + et.current = { x: I, y: K, time: Date.now() }, tn.current = !1; + }, R = (I, K) => { + if (!et.current || !v) + return; + const se = I - et.current.x, Pe = K - et.current.y, xt = Date.now() - et.current.time; + Math.abs(se) > 50 && Math.abs(Pe) < 100 && xt < 500 && !Te && (se > 0 ? v("prev") : se < 0 && v("next")), et.current = null, tn.current = !1; + }, F = () => { + ne.trim() && !o && i && i(ne); + }, Y = () => { + Ye(!0); + }, le = (I, K, se, Pe, xt) => { + a && a(I, p || e, K, se, Pe, xt), Ye(!1); + }; + return n ? /* @__PURE__ */ h.jsxs( + "div", + { + className: "fixed inset-0 bg-black/95 z-[9999] flex items-center justify-center", + onClick: (I) => { + I.target === I.currentTarget && (u ? ge(!ee) : t()); + }, + onTouchStart: (I) => { + if (I.target === I.currentTarget) { + const K = I.touches[0]; + ht(K.clientX, K.clientY); + } + }, + onTouchEnd: (I) => { + if (I.target === I.currentTarget) { + const K = I.changedTouches[0]; + R(K.clientX, K.clientY); + } + }, + children: [ + /* @__PURE__ */ h.jsxs("div", { className: "relative w-full h-full flex items-center justify-center", children: [ + /* @__PURE__ */ h.jsx("div", { className: "relative w-full h-full flex items-center justify-center", children: /* @__PURE__ */ h.jsx( + JH, + { + initialScale: 1, + minScale: 1, + maxScale: 40, + centerOnInit: !0, + centerZoomedOut: !0, + limitToBounds: !0, + alignmentAnimation: { animationTime: 200, animationType: "easeOut" }, + wheel: { step: 1 }, + doubleClick: { disabled: !1, step: 0.7 }, + pinch: { step: 20 }, + onTransformed: (I) => Re(I.state.scale), + children: /* @__PURE__ */ h.jsx( + nW, + { + wrapperClass: "w-full h-full", + contentClass: "", + children: /* @__PURE__ */ h.jsx( + Mg, + { + src: p || e, + alt: s, + sizes: `${Math.ceil(Je * 100)}vw`, + responsiveSizes: [640, 1024, 2048], + imgClassName: "max-w-[90vw] max-h-[90vh] object-contain cursor-grab active:cursor-grabbing pointer-events-auto", + className: "w-full h-full flex items-center justify-center", + loading: "eager", + draggable: !1, + onLoad: () => te(!0), + onClick: (I) => { + !hs.current && u && (I.stopPropagation(), ge(!ee)); + } + } + ) + } + ) + } + ) }), + !X && /* @__PURE__ */ h.jsx("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none z-10", children: /* @__PURE__ */ h.jsx("div", { className: "w-12 h-12 border-4 border-white/30 border-t-white rounded-full animate-spin" }) }), + /* @__PURE__ */ h.jsx( + "button", + { + onClick: (I) => { + I.stopPropagation(), t(); + }, + className: "absolute top-4 right-4 text-white text-2xl p-4 bg-black/75 rounded-lg hover:bg-black/90 transition-all duration-200 z-20", + title: "Close (ESC)", + children: "×" + } + ), + v && g !== void 0 && y !== void 0 && y > 1 && /* @__PURE__ */ h.jsxs(h.Fragment, { children: [ + g > 0 && /* @__PURE__ */ h.jsx( + "button", + { + onClick: (I) => { + I.stopPropagation(), v("prev"); + }, + className: "absolute left-4 top-1/2 transform -translate-y-1/2 p-4 text-white text-3xl bg-black/75 rounded-lg hover:bg-black/90 transition-all duration-200", + style: { zIndex: 50 }, + title: "Previous (←)", + children: "‹" + } + ), + g < y - 1 && /* @__PURE__ */ h.jsx( + "button", + { + onClick: (I) => { + I.stopPropagation(), v("next"); + }, + className: "absolute right-4 top-1/2 transform -translate-y-1/2 p-4 text-white text-3xl bg-black/75 rounded-lg hover:bg-black/90 transition-all duration-200", + style: { zIndex: 50 }, + title: "Next (→)", + children: "›" + } + ) + ] }), + u && ee && X && /* @__PURE__ */ h.jsx( + "div", + { + className: "absolute bottom-4 left-1/2 transform -translate-x-1/2 w-[90vw] md:w-[80vw] max-w-4xl z-40", + onClick: (I) => { + I.target === I.currentTarget && ge(!1); + }, + children: /* @__PURE__ */ h.jsx( + "div", + { + className: "bg-black/80 backdrop-blur-sm rounded-xl p-3 md:p-4 shadow-2xl border border-white/20", + onClick: (I) => I.stopPropagation(), + children: w ? ( + /* Wizard Mode: Textarea + Separate Actions Row */ + /* @__PURE__ */ h.jsxs(h.Fragment, { children: [ + W.length > 0 && /* @__PURE__ */ h.jsxs("div", { className: "flex items-center justify-between mb-2 text-xs", children: [ + /* @__PURE__ */ h.jsxs("span", { className: "text-white/60", children: [ + "History: ", + J >= 0 ? `${J + 1}/${W.length}` : "Current" + ] }), + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center gap-1", children: [ + /* @__PURE__ */ h.jsxs(q_, { modal: !1, children: [ + /* @__PURE__ */ h.jsx(z_, { asChild: !0, children: /* @__PURE__ */ h.jsx( + Me, + { + type: "button", + variant: "ghost", + onClick: (I) => I.stopPropagation(), + className: "h-6 w-6 p-0 text-white hover:text-primary", + title: "Browse prompt history", + children: /* @__PURE__ */ h.jsx(G8, { className: "h-3 w-3" }) + } + ) }), + /* @__PURE__ */ h.jsx(Ww, { align: "end", className: "w-80 max-h-64 overflow-y-auto z-[10000]", children: W.length === 0 ? /* @__PURE__ */ h.jsx("div", { className: "px-2 py-3 text-sm text-muted-foreground text-center", children: /* @__PURE__ */ h.jsx(Ve, { children: "No history yet" }) }) : /* @__PURE__ */ h.jsx(h.Fragment, { children: [...W].reverse().map((I, K) => { + const se = W.length - 1 - K; + return /* @__PURE__ */ h.jsxs( + ng, + { + onSelect: () => { + ce(I); + }, + className: `flex flex-col items-start gap-1 py-2 ${J === se ? "bg-primary/10" : ""}`, + children: [ + /* @__PURE__ */ h.jsxs("div", { className: "text-xs text-muted-foreground", children: [ + "#", + W.length - K, + J === se && " (current)" + ] }), + /* @__PURE__ */ h.jsx("div", { className: "text-sm line-clamp-2 w-full", children: I }) + ] + }, + se + ); + }) }) }) + ] }), + /* @__PURE__ */ h.jsx( + Me, + { + type: "button", + variant: "ghost", + onClick: (I) => { + I.stopPropagation(), G == null || G("up"); + }, + disabled: W.length === 0 || J === W.length - 1, + className: "h-6 w-6 p-0 text-white hover:text-primary disabled:opacity-30", + title: "Previous prompt (Ctrl+↑)", + children: /* @__PURE__ */ h.jsx(om, { className: "h-3 w-3" }) + } + ), + /* @__PURE__ */ h.jsx( + Me, + { + type: "button", + variant: "ghost", + onClick: (I) => { + I.stopPropagation(), G == null || G("down"); + }, + disabled: J === -1, + className: "h-6 w-6 p-0 text-white hover:text-primary disabled:opacity-30", + title: "Next prompt (Ctrl+↓)", + children: /* @__PURE__ */ h.jsx(om, { className: "h-3 w-3 rotate-180" }) + } + ) + ] }) + ] }), + /* @__PURE__ */ h.jsx("div", { className: "flex gap-2 mb-2 md:mb-0", children: /* @__PURE__ */ h.jsxs("div", { className: "flex-1 relative", children: [ + /* @__PURE__ */ h.jsx( + ry, + { + value: ne, + onChange: (I) => { + ce(I.target.value), q == null || q(); + }, + placeholder: de("Quick edit prompt..."), + disabled: o, + rows: 2, + className: "w-full bg-white/10 border border-white/30 rounded-lg px-3 py-2 pr-10 text-white placeholder-white/60 focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent backdrop-blur-sm disabled:opacity-50 resize-none text-sm md:text-base", + onKeyDown: (I) => { + I.key === "Enter" && I.ctrlKey || I.key === "Enter" && !I.shiftKey && ne.trim() && !o ? (I.stopPropagation(), I.preventDefault(), F(), I.ctrlKey || ce("")) : I.key === "ArrowUp" && I.ctrlKey ? (I.stopPropagation(), I.preventDefault(), G == null || G("up")) : I.key === "ArrowDown" && I.ctrlKey ? (I.stopPropagation(), I.preventDefault(), G == null || G("down")) : I.key === "Escape" ? (I.stopPropagation(), I.preventDefault(), ce("")) : (I.key.startsWith("Arrow") || I.key === "Delete" || I.key === "Backspace") && I.stopPropagation(); + }, + onClick: (I) => I.stopPropagation() + } + ), + /* @__PURE__ */ h.jsx( + "button", + { + onClick: (I) => { + I.stopPropagation(), T == null || T(); + }, + disabled: $, + className: `absolute right-2 bottom-2 p-1 rounded-md transition-colors ${N ? "bg-red-600/80 text-white hover:bg-red-700" : "text-white/60 hover:text-white hover:bg-white/10"}`, + title: N ? "Stop recording" : "Record audio", + children: $ ? /* @__PURE__ */ h.jsx("div", { className: "animate-spin rounded-full h-4 w-4 border-2 border-white border-t-transparent" }) : N ? /* @__PURE__ */ h.jsx(Rg, { size: 16 }) : /* @__PURE__ */ h.jsx(Ig, { size: 16 }) + } + ) + ] }) }), + /* @__PURE__ */ h.jsx("div", { className: "mb-2 mt-2", children: /* @__PURE__ */ h.jsx( + H_, + { + presets: L, + onSelect: (I) => { + const se = (ne || "").trim(); + ce(`${se}${se ? ", " : ""}${I.prompt}`); + }, + variant: "minimal", + disabled: o + } + ) }), + /* @__PURE__ */ h.jsxs("div", { className: "flex gap-2 flex-wrap md:flex-nowrap", children: [ + /* @__PURE__ */ h.jsxs(q_, { modal: !1, children: [ + /* @__PURE__ */ h.jsx(z_, { asChild: !0, children: /* @__PURE__ */ h.jsx( + Me, + { + onClick: (I) => I.stopPropagation(), + variant: "ghost", + className: "text-white hover:text-primary disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0", + title: de("Prompt Templates"), + children: /* @__PURE__ */ h.jsx(Fm, { size: 20, className: "md:w-5 md:h-5" }) + } + ) }), + /* @__PURE__ */ h.jsxs(Ww, { align: "end", className: "w-64 z-[10000]", children: [ + E.length === 0 ? /* @__PURE__ */ h.jsx("div", { className: "px-2 py-3 text-sm text-muted-foreground text-center", children: /* @__PURE__ */ h.jsx(Ve, { children: "No templates saved yet" }) }) : /* @__PURE__ */ h.jsxs(h.Fragment, { children: [ + E.map((I, K) => /* @__PURE__ */ h.jsxs( + ng, + { + onSelect: () => x == null ? void 0 : x(I.template), + className: "flex items-center justify-between group", + children: [ + /* @__PURE__ */ h.jsx("span", { className: "flex-1 truncate", children: I.name }), + /* @__PURE__ */ h.jsx( + "button", + { + onClick: (se) => { + se.stopPropagation(), _ == null || _(K); + }, + className: "opacity-0 group-hover:opacity-100 ml-2 p-1 hover:bg-destructive/20 rounded", + title: de("Delete template"), + children: /* @__PURE__ */ h.jsx(Wy, { className: "h-3 w-3 text-destructive" }) + } + ) + ] + }, + K + )), + /* @__PURE__ */ h.jsx(pN, {}) + ] }), + /* @__PURE__ */ h.jsxs(ng, { onSelect: () => C == null ? void 0 : C(), children: [ + /* @__PURE__ */ h.jsx(Y8, { className: "h-3 w-3 mr-2" }), + /* @__PURE__ */ h.jsx(Ve, { children: "Save current as template" }) + ] }) + ] }) + ] }), + H && /* @__PURE__ */ h.jsx( + Me, + { + onClick: (I) => { + I.stopPropagation(), H(); + }, + variant: "ghost", + className: "text-white hover:text-purple-400 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0", + title: de("Open in AI Wizard for advanced editing"), + children: /* @__PURE__ */ h.jsx(sw, { size: 20, className: "md:w-5 md:h-5" }) + } + ), + /* @__PURE__ */ h.jsx( + Me, + { + onClick: (I) => { + I.stopPropagation(), k == null || k(); + }, + disabled: A || !ne.trim(), + variant: "ghost", + className: "text-white hover:text-primary disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0", + title: de("Optimize prompt with AI"), + children: A ? /* @__PURE__ */ h.jsx("div", { className: "animate-spin rounded-full h-5 w-5 border-2 border-white border-t-transparent" }) : /* @__PURE__ */ h.jsx(HS, { size: 20, className: "md:w-5 md:h-5" }) + } + ), + /* @__PURE__ */ h.jsx( + Me, + { + onClick: (I) => { + I.stopPropagation(), ne.trim() && !o && (F(), ce("")); + }, + disabled: !ne.trim() || o, + variant: "ghost", + className: "text-primary hover:text-primary/80 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0", + title: "Generate (Enter to submit)", + children: o ? /* @__PURE__ */ h.jsx("div", { className: "animate-spin rounded-full h-5 w-5 border-2 border-primary border-t-transparent" }) : /* @__PURE__ */ h.jsx(om, { size: 20, className: "md:w-5 md:h-5" }) + } + ), + D && /* @__PURE__ */ h.jsx( + Me, + { + onClick: (I) => { + I.stopPropagation(), V == null || V(); + }, + disabled: c, + variant: "ghost", + className: "text-green-500 hover:text-green-400 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0", + title: "Quick Publish with prompt as description", + children: c ? /* @__PURE__ */ h.jsx("div", { className: "animate-spin rounded-full h-5 w-5 border-2 border-green-500 border-t-transparent" }) : /* @__PURE__ */ h.jsx(nw, { size: 20, className: "md:w-5 md:h-5" }) + } + ), + f && /* @__PURE__ */ h.jsx( + Me, + { + onClick: (I) => { + I.stopPropagation(), Y(); + }, + disabled: c, + variant: "ghost", + className: "text-green-500 hover:text-green-400 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0", + title: "Publish to gallery with options", + children: c ? /* @__PURE__ */ h.jsx("div", { className: "animate-spin rounded-full h-5 w-5 border-2 border-green-500 border-t-transparent" }) : /* @__PURE__ */ h.jsx(g3, { size: 20, className: "md:w-5 md:h-5" }) + } + ), + /* @__PURE__ */ h.jsx( + Me, + { + onClick: (I) => { + I.stopPropagation(), ge(!1); + }, + variant: "ghost", + className: "text-white/60 hover:text-white p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0 md:ml-auto", + title: de("Hide prompt"), + type: "button", + children: /* @__PURE__ */ h.jsx(y3, { size: 20, className: "md:w-5 md:h-5" }) + } + ) + ] }) + ] }) + ) : ( + /* Simple Mode: Same layout as wizard, fewer buttons */ + /* @__PURE__ */ h.jsxs(h.Fragment, { children: [ + /* @__PURE__ */ h.jsx("div", { className: "flex gap-2 mb-2 md:mb-0", children: /* @__PURE__ */ h.jsx("div", { className: "flex-1 relative", children: /* @__PURE__ */ h.jsx( + ry, + { + value: ne, + onChange: (I) => { + ce(I.target.value), q == null || q(); + }, + placeholder: de("Quick edit prompt..."), + disabled: o, + rows: 2, + className: "w-full bg-white/10 border border-white/30 rounded-lg px-3 py-2 text-white placeholder-white/60 focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent backdrop-blur-sm disabled:opacity-50 resize-none text-sm md:text-base", + onKeyDown: (I) => { + I.key === "Enter" && !I.shiftKey && ne.trim() && !o ? (I.stopPropagation(), I.preventDefault(), F()) : I.key === "Escape" ? (I.stopPropagation(), I.preventDefault(), ce("")) : (I.key.startsWith("Arrow") || I.key === "Delete" || I.key === "Backspace") && I.stopPropagation(); + }, + onClick: (I) => I.stopPropagation() + } + ) }) }), + /* @__PURE__ */ h.jsx("div", { className: "mb-2 mt-2", children: /* @__PURE__ */ h.jsx( + H_, + { + presets: L, + onSelect: (I) => { + const se = (ne || "").trim(); + ce(`${se}${se ? ", " : ""}${I.prompt}`); + }, + variant: "minimal", + disabled: o + } + ) }), + /* @__PURE__ */ h.jsxs("div", { className: "flex gap-2", children: [ + /* @__PURE__ */ h.jsx( + Me, + { + onClick: (I) => { + I.stopPropagation(), ne.trim() && !o && F(); + }, + disabled: !ne.trim() || o, + variant: "ghost", + className: "text-primary hover:text-primary/80 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0", + title: "Generate (Enter to submit)", + children: o ? /* @__PURE__ */ h.jsx("div", { className: "animate-spin rounded-full h-5 w-5 border-2 border-primary border-t-transparent" }) : /* @__PURE__ */ h.jsx(om, { size: 20, className: "md:w-5 md:h-5" }) + } + ), + f && /* @__PURE__ */ h.jsx( + Me, + { + onClick: (I) => { + I.stopPropagation(), Y(); + }, + disabled: c, + variant: "ghost", + className: "text-green-500 hover:text-green-400 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0", + title: "Publish to gallery", + children: c ? /* @__PURE__ */ h.jsx("div", { className: "animate-spin rounded-full h-5 w-5 border-2 border-green-500 border-t-transparent" }) : /* @__PURE__ */ h.jsx(g3, { size: 20, className: "md:w-5 md:h-5" }) + } + ), + /* @__PURE__ */ h.jsx( + Me, + { + onClick: (I) => { + I.stopPropagation(), ge(!1); + }, + variant: "ghost", + className: "text-white/60 hover:text-white p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0", + title: de("Hide prompt"), + type: "button", + children: /* @__PURE__ */ h.jsx(y3, { size: 20, className: "md:w-5 md:h-5" }) + } + ) + ] }) + ] }) + ) + } + ) + } + ), + u && !ee && X && /* @__PURE__ */ h.jsx("div", { className: "absolute bottom-4 left-1/2 transform -translate-x-1/2 z-50", children: /* @__PURE__ */ h.jsx( + "button", + { + onClick: (I) => { + I.stopPropagation(), ge(!0); + }, + className: "bg-primary/80 hover:bg-primary text-primary-foreground p-2 rounded-full shadow-lg transition-all duration-200 hover:scale-110", + title: "Show prompt field (Space)", + children: /* @__PURE__ */ h.jsx(sw, { size: 20 }) + } + ) }), + ze && X && ee && /* @__PURE__ */ h.jsxs( + "div", + { + className: "absolute bottom-16 left-1/2 transform -translate-x-1/2 bg-black/80 backdrop-blur-md text-white px-4 py-3 rounded-lg text-sm max-w-md text-center border border-white/20 z-50", + onClick: (I) => I.stopPropagation(), + children: [ + c ? /* @__PURE__ */ h.jsxs("div", { className: "flex items-center justify-center gap-2", children: [ + /* @__PURE__ */ h.jsx("div", { className: "animate-spin rounded-full h-3 w-3 border-2 border-white border-t-transparent" }), + /* @__PURE__ */ h.jsx("span", { children: "Publishing... • ESC to close" }) + ] }) : /* @__PURE__ */ h.jsxs("div", { className: "space-y-2", children: [ + /* @__PURE__ */ h.jsx("div", { className: "font-medium", children: s }), + g !== void 0 && y !== void 0 && /* @__PURE__ */ h.jsxs("div", { className: "text-white/80 text-xs", children: [ + g + 1, + " of ", + y + ] }), + /* @__PURE__ */ h.jsxs("div", { className: "text-white/70 text-xs space-y-1", children: [ + /* @__PURE__ */ h.jsx("div", { children: "• Enter: generate" }), + /* @__PURE__ */ h.jsx("div", { children: "• Space/Click: hide prompt" }), + w && W.length > 0 && /* @__PURE__ */ h.jsx("div", { children: "• Ctrl+↑↓: prompt history" }), + v && y && y > 1 && /* @__PURE__ */ h.jsx("div", { children: "• ← → keys or swipe: navigate" }), + /* @__PURE__ */ h.jsx("div", { children: "• ESC: close lightbox" }) + ] }) + ] }), + /* @__PURE__ */ h.jsx( + "div", + { + className: "fixed inset-0 z-[-1]", + onClick: () => st(!1) + } + ) + ] + } + ) + ] }), + /* @__PURE__ */ h.jsx( + fW, + { + isOpen: qe, + onClose: () => Ye(!1), + onPublish: le, + originalTitle: s, + originalImageId: r, + isPublishing: c + } + ) + ] + } + ) : null; +} +const W_ = (n) => { + let t; + const e = /* @__PURE__ */ new Set(), s = (u, f) => { + const p = typeof u == "function" ? u(t) : u; + if (!Object.is(p, t)) { + const g = t; + t = f ?? (typeof p != "object" || p === null) ? p : Object.assign({}, t, p), e.forEach((y) => y(t, g)); + } + }, r = () => t, o = { setState: s, getState: r, getInitialState: () => c, subscribe: (u) => (e.add(u), () => e.delete(u)) }, c = t = n(s, r, o); + return o; +}, JY = (n) => n ? W_(n) : W_, eK = (n) => n; +function tK(n, t = eK) { + const e = he.useSyncExternalStore( + n.subscribe, + he.useCallback(() => t(n.getState()), [n, t]), + he.useCallback(() => t(n.getInitialState()), [n, t]) + ); + return he.useDebugValue(e), e; +} +const G_ = (n) => { + const t = JY(n), e = (s) => tK(t, s); + return Object.assign(e, t), e; +}, nK = (n) => n ? G_(n) : G_; +function mN(n, t) { + let e; + try { + e = n(); + } catch { + return; + } + return { + getItem: (r) => { + var i; + const a = (c) => c === null ? null : JSON.parse(c, void 0), o = (i = e.getItem(r)) != null ? i : null; + return o instanceof Promise ? o.then(a) : a(o); + }, + setItem: (r, i) => e.setItem(r, JSON.stringify(i, void 0)), + removeItem: (r) => e.removeItem(r) + }; +} +const Gw = (n) => (t) => { + try { + const e = n(t); + return e instanceof Promise ? e : { + then(s) { + return Gw(s)(e); + }, + catch(s) { + return this; + } + }; + } catch (e) { + return { + then(s) { + return this; + }, + catch(s) { + return Gw(s)(e); + } + }; + } +}, sK = (n, t) => (e, s, r) => { + let i = { + storage: mN(() => localStorage), + partialize: (w) => w, + version: 0, + merge: (w, E) => ({ + ...E, + ...w + }), + ...t + }, a = !1, o = 0; + const c = /* @__PURE__ */ new Set(), u = /* @__PURE__ */ new Set(); + let f = i.storage; + if (!f) + return n( + (...w) => { + console.warn( + `[zustand persist middleware] Unable to update item '${i.name}', the given storage is currently unavailable.` + ), e(...w); + }, + s, + r + ); + const p = () => { + const w = i.partialize({ ...s() }); + return f.setItem(i.name, { + state: w, + version: i.version + }); + }, g = r.setState; + r.setState = (w, E) => (g(w, E), p()); + const y = n( + (...w) => (e(...w), p()), + s, + r + ); + r.getInitialState = () => y; + let v; + const b = () => { + var w, E; + if (!f) return; + const x = ++o; + a = !1, c.forEach((_) => { + var k; + return _((k = s()) != null ? k : y); + }); + const C = ((E = i.onRehydrateStorage) == null ? void 0 : E.call(i, (w = s()) != null ? w : y)) || void 0; + return Gw(f.getItem.bind(f))(i.name).then((_) => { + if (_) + if (typeof _.version == "number" && _.version !== i.version) { + if (i.migrate) { + const k = i.migrate( + _.state, + _.version + ); + return k instanceof Promise ? k.then((A) => [!0, A]) : [!0, k]; + } + console.error( + "State loaded from storage couldn't be migrated since no migrate function was provided" + ); + } else + return [!1, _.state]; + return [!1, void 0]; + }).then((_) => { + var k; + if (x !== o) + return; + const [A, T] = _; + if (v = i.merge( + T, + (k = s()) != null ? k : y + ), e(v, !0), A) + return p(); + }).then(() => { + x === o && (C == null || C(v, void 0), v = s(), a = !0, u.forEach((_) => _(v))); + }).catch((_) => { + x === o && (C == null || C(void 0, _)); + }); + }; + return r.persist = { + setOptions: (w) => { + i = { + ...i, + ...w + }, w.storage && (f = w.storage); + }, + clearStorage: () => { + f == null || f.removeItem(i.name); + }, + getOptions: () => i, + rehydrate: () => b(), + hasHydrated: () => a, + onHydrate: (w) => (c.add(w), () => { + c.delete(w); + }), + onFinishHydration: (w) => (u.add(w), () => { + u.delete(w); + }) + }, i.skipHydration || b(), v || y; +}, rK = sK, iK = (n) => { + if (!n) return; + const t = new Image(); + t.src = n; +}, Xr = nK()( + rK( + (n, t) => ({ + // Initial state + navigationData: null, + history: [], + wizardInitialImage: null, + wizardReturnPath: null, + creationWizardOpen: !1, + creationWizardMode: "default", + // Set navigation data + setNavigationData: (e) => { + n({ navigationData: e }); + }, + // Update just the current index (faster than full data update) + updateCurrentIndex: (e) => { + const s = t().navigationData; + s && n({ + navigationData: { ...s, currentIndex: e } + }); + }, + // Push navigation to history stack + pushHistory: (e, s) => { + const a = [...t().history, { + path: e, + data: s, + timestamp: Date.now() + }].slice(-50); + n({ + history: a, + navigationData: s + }); + }, + // Pop from history stack + popHistory: () => { + const e = t(); + if (e.history.length === 0) return null; + const s = [...e.history], r = s.pop(), i = s.length > 0 ? s[s.length - 1].data : null; + return n({ + history: s, + navigationData: i + }), r; + }, + // Clear history + clearHistory: () => { + n({ history: [] }); + }, + // Check if can go back + canGoBack: () => t().history.length > 1, + // Set wizard image (replaces sessionStorage) + setWizardImage: (e, s) => { + n({ + wizardInitialImage: e, + wizardReturnPath: s || null + }); + }, + // Clear wizard image + clearWizardImage: () => { + n({ + wizardInitialImage: null, + wizardReturnPath: null + }); + }, + // Set global creation wizard open state + setCreationWizardOpen: (e, s = "default") => { + n({ + creationWizardOpen: e, + creationWizardMode: s + }); + }, + // Preload image + preloadImage: (e) => { + iK(e); + }, + // Reset entire store + reset: () => { + n({ + navigationData: null, + history: [], + wizardInitialImage: null, + wizardReturnPath: null, + creationWizardOpen: !1, + creationWizardMode: "default" + }); + } + }), + { + name: "pm-pics-navigation", + // localStorage key + storage: mN(() => localStorage), + // Use localStorage + // Only persist certain fields (not history - too large) + partialize: (n) => ({ + navigationData: n.navigationData, + wizardInitialImage: n.wizardInitialImage, + wizardReturnPath: n.wizardReturnPath + // Don't persist history - it's too large and not needed across sessions + }), + // Version for migrations + version: 1, + // Skip hydration on server (if using SSR) + skipHydration: !1 + } + ) +), aK = (n) => n.navigationData, oK = (n) => n.wizardInitialImage, lK = (n) => n.wizardReturnPath, cK = () => { + const n = Xr(oK), t = Xr(lK), e = Xr((o) => o.setWizardImage), s = Xr((o) => o.clearWizardImage), r = Xr((o) => o.creationWizardOpen), i = Xr((o) => o.creationWizardMode), a = Xr((o) => o.setCreationWizardOpen); + return { + wizardInitialImage: n, + wizardReturnPath: t, + setWizardImage: e, + clearWizardImage: s, + creationWizardOpen: r, + creationWizardMode: i, + setCreationWizardOpen: a + }; +}, Y_ = ({ + imageUrl: n, + imageTitle: t, + className: e = "", + size: s = "sm", + variant: r = "ghost", + onClick: i, + editingPostId: a, + pictureId: o, + children: c +}) => { + const { user: u } = Qa(), f = Kd(), { setWizardImage: p } = cK(), g = async (y) => { + if (y.preventDefault(), y.stopPropagation(), i) { + i(y); + return; + } + if (!u) { + Ee.error(de("Please sign in to use the AI wizard")); + return; + } + const v = window.location.pathname; + let b = null; + if (a !== void 0) + b = a; + else { + const x = v.match(/\/post\/([a-f0-9-]{36})/); + x && (b = x[1]); + } + let w = o || null; + if (!w) { + const x = v.match(/\/post\/([a-f0-9-]{36})/); + w = x ? x[1] : null; + } + const E = { + id: w || `external-${Date.now()}`, + src: n, + title: t, + selected: !0, + realDatabaseId: w + // Store the real database ID separately + }; + p(E, window.location.pathname), f("/wizard", { + state: { + mode: "default", + // Keep default mode but passing editingPostId allows "Add to Post" + editingPostId: b + } + }); + }; + return u ? /* @__PURE__ */ h.jsxs( + Me, + { + size: s, + variant: r, + onClick: g, + className: `${e != null && e.includes("p-0"), "text-foreground hover:text-primary transition-colors"} ${e}`, + title: de("Edit with AI Wizard"), + children: [ + /* @__PURE__ */ h.jsx(sw, { className: `${s === "sm" ? "h-6 w-6" : "h-5 w-5"} ${e != null && e.includes("p-0") ? "" : "mr-1"} drop-shadow-sm` }), + c + ] + } + ) : null; +}, uK = async (n, t) => { + try { + if (n.startsWith("data:")) { + dK(n, t); + return; + } + const e = await fetch(n, { mode: "cors" }); + if (!e.ok) throw new Error("Failed to fetch image"); + const s = await e.blob(), r = window.URL.createObjectURL(s), i = t || fK(n) || "image.jpg"; + hK(r, i), window.URL.revokeObjectURL(r); + } catch (e) { + console.error("Error downloading image:", e), window.open(n, "_blank"); + } +}, dK = (n, t) => { + const e = document.createElement("a"); + e.href = n, e.download = t || "image.png", document.body.appendChild(e), e.click(), document.body.removeChild(e); +}, hK = (n, t) => { + const e = document.createElement("a"); + e.href = n, e.download = t, document.body.appendChild(e), e.click(), document.body.removeChild(e); +}, fK = (n) => { + try { + const e = new URL(n).pathname, s = e.substring(e.lastIndexOf("/") + 1); + return s && s.includes(".") ? s : null; + } catch { + return null; + } +}, pK = (n, t = "jpg") => { + const e = (/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-"); + return `${n ? n.replace(/[^a-zA-Z0-9\s-_]/g, "").replace(/\s+/g, "-").toLowerCase() : "image"}-${e}.${t}`; +}, mK = Ap(void 0), gK = () => { + const n = qc(mK); + if (n === void 0) + throw new Error("usePostNavigation must be used within a PostNavigationProvider"); + return n; +}, Yw = (n) => { + if (!n) return ""; + const t = new Date(n), s = (/* @__PURE__ */ new Date()).getTime() - t.getTime(), r = Math.floor(s / (1e3 * 60 * 60 * 24)); + if (r < 7) { + if (r === 0) { + const i = Math.floor(s / 36e5); + return i === 0 ? `${Math.floor(s / 6e4)}m ago` : `${i}h ago`; + } + return `${r}d ago`; + } + return t.toLocaleDateString(void 0, { month: "short", day: "numeric" }); +}, Kw = (n) => n ? !!(/\.(jpg|jpeg|png|gif|webp|mp4|mov|avi|mkv|webm|heic|tiff|bmp|svg)$/i.test(n) || /^[\d_-]+$/.test(n) || /^(IMG|VID|DSC|P|MOV)[\d_-]+/i.test(n) || /^\d{4}[-_]\d{2}[-_]\d{2}/.test(n) || /^Screenshot_/.test(n) || /^Screen\s?Shot/.test(n)) : !1; +function yK(n, t = []) { + let e = []; + function s(i, a) { + const o = d.createContext(a); + o.displayName = i + "Context"; + const c = e.length; + e = [...e, a]; + const u = (p) => { + var E; + const { scope: g, children: y, ...v } = p, b = ((E = g == null ? void 0 : g[n]) == null ? void 0 : E[c]) || o, w = d.useMemo(() => v, Object.values(v)); + return /* @__PURE__ */ h.jsx(b.Provider, { value: w, children: y }); + }; + u.displayName = i + "Provider"; + function f(p, g) { + var b; + const y = ((b = g == null ? void 0 : g[n]) == null ? void 0 : b[c]) || o, v = d.useContext(y); + if (v) return v; + if (a !== void 0) return a; + throw new Error(`\`${p}\` must be used within \`${i}\``); + } + return [u, f]; + } + const r = () => { + const i = e.map((a) => d.createContext(a)); + return function(o) { + const c = (o == null ? void 0 : o[n]) || i; + return d.useMemo( + () => ({ [`__scope${n}`]: { ...o, [n]: c } }), + [o, c] + ); + }; + }; + return r.scopeName = n, [s, vK(r, ...t)]; +} +function vK(...n) { + const t = n[0]; + if (n.length === 1) return t; + const e = () => { + const s = n.map((r) => ({ + useScope: r(), + scopeName: r.scopeName + })); + return function(i) { + const a = s.reduce((o, { useScope: c, scopeName: u }) => { + const p = c(i)[`__scope${u}`]; + return { ...o, ...p }; + }, {}); + return d.useMemo(() => ({ [`__scope${t.scopeName}`]: a }), [a]); + }; + }; + return e.scopeName = t.scopeName, e; +} +var bK = [ + "a", + "button", + "div", + "form", + "h2", + "h3", + "img", + "input", + "label", + "li", + "nav", + "ol", + "p", + "select", + "span", + "svg", + "ul" +], h2 = bK.reduce((n, t) => { + const e = /* @__PURE__ */ $x(`Primitive.${t}`), s = d.forwardRef((r, i) => { + const { asChild: a, ...o } = r, c = a ? e : t; + return typeof window < "u" && (window[Symbol.for("radix-ui")] = !0), /* @__PURE__ */ h.jsx(c, { ...o, ref: i }); + }); + return s.displayName = `Primitive.${t}`, { ...n, [t]: s }; +}, {}), Zw = { exports: {} }, Pb = {}; +/** + * @license React + * use-sync-external-store-shim.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var K_; +function wK() { + if (K_) return Pb; + K_ = 1; + var n = he; + function t(p, g) { + return p === g && (p !== 0 || 1 / p === 1 / g) || p !== p && g !== g; + } + var e = typeof Object.is == "function" ? Object.is : t, s = n.useState, r = n.useEffect, i = n.useLayoutEffect, a = n.useDebugValue; + function o(p, g) { + var y = g(), v = s({ inst: { value: y, getSnapshot: g } }), b = v[0].inst, w = v[1]; + return i( + function() { + b.value = y, b.getSnapshot = g, c(b) && w({ inst: b }); + }, + [p, y, g] + ), r( + function() { + return c(b) && w({ inst: b }), p(function() { + c(b) && w({ inst: b }); + }); + }, + [p] + ), a(y), y; + } + function c(p) { + var g = p.getSnapshot; + p = p.value; + try { + var y = g(); + return !e(p, y); + } catch { + return !0; + } + } + function u(p, g) { + return g(); + } + var f = typeof window > "u" || typeof window.document > "u" || typeof window.document.createElement > "u" ? u : o; + return Pb.useSyncExternalStore = n.useSyncExternalStore !== void 0 ? n.useSyncExternalStore : f, Pb; +} +var Nb = {}; +/** + * @license React + * use-sync-external-store-shim.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var Z_; +function xK() { + return Z_ || (Z_ = 1, process.env.NODE_ENV !== "production" && function() { + function n(y, v) { + return y === v && (y !== 0 || 1 / y === 1 / v) || y !== y && v !== v; + } + function t(y, v) { + f || r.startTransition === void 0 || (f = !0, console.error( + "You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release." + )); + var b = v(); + if (!p) { + var w = v(); + i(b, w) || (console.error( + "The result of getSnapshot should be cached to avoid an infinite loop" + ), p = !0); + } + w = a({ + inst: { value: b, getSnapshot: v } + }); + var E = w[0].inst, x = w[1]; + return c( + function() { + E.value = b, E.getSnapshot = v, e(E) && x({ inst: E }); + }, + [y, b, v] + ), o( + function() { + return e(E) && x({ inst: E }), y(function() { + e(E) && x({ inst: E }); + }); + }, + [y] + ), u(b), b; + } + function e(y) { + var v = y.getSnapshot; + y = y.value; + try { + var b = v(); + return !i(y, b); + } catch { + return !0; + } + } + function s(y, v) { + return v(); + } + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < "u" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart == "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); + var r = he, i = typeof Object.is == "function" ? Object.is : n, a = r.useState, o = r.useEffect, c = r.useLayoutEffect, u = r.useDebugValue, f = !1, p = !1, g = typeof window > "u" || typeof window.document > "u" || typeof window.document.createElement > "u" ? s : t; + Nb.useSyncExternalStore = r.useSyncExternalStore !== void 0 ? r.useSyncExternalStore : g, typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < "u" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop == "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); + }()), Nb; +} +process.env.NODE_ENV === "production" ? Zw.exports = wK() : Zw.exports = xK(); +var CK = Zw.exports; +function _K() { + return CK.useSyncExternalStore( + SK, + () => !0, + () => !1 + ); +} +function SK() { + return () => { + }; +} +var f2 = "Avatar", [EK] = yK(f2), [kK, gN] = EK(f2), yN = d.forwardRef( + (n, t) => { + const { __scopeAvatar: e, ...s } = n, [r, i] = d.useState("idle"); + return /* @__PURE__ */ h.jsx( + kK, + { + scope: e, + imageLoadingStatus: r, + onImageLoadingStatusChange: i, + children: /* @__PURE__ */ h.jsx(h2.span, { ...s, ref: t }) + } + ); + } +); +yN.displayName = f2; +var vN = "AvatarImage", bN = d.forwardRef( + (n, t) => { + const { __scopeAvatar: e, src: s, onLoadingStatusChange: r = () => { + }, ...i } = n, a = gN(vN, e), o = TK(s, i), c = Fi((u) => { + r(u), a.onImageLoadingStatusChange(u); + }); + return ai(() => { + o !== "idle" && c(o); + }, [o, c]), o === "loaded" ? /* @__PURE__ */ h.jsx(h2.img, { ...i, ref: t, src: s }) : null; + } +); +bN.displayName = vN; +var wN = "AvatarFallback", xN = d.forwardRef( + (n, t) => { + const { __scopeAvatar: e, delayMs: s, ...r } = n, i = gN(wN, e), [a, o] = d.useState(s === void 0); + return d.useEffect(() => { + if (s !== void 0) { + const c = window.setTimeout(() => o(!0), s); + return () => window.clearTimeout(c); + } + }, [s]), a && i.imageLoadingStatus !== "loaded" ? /* @__PURE__ */ h.jsx(h2.span, { ...r, ref: t }) : null; + } +); +xN.displayName = wN; +function X_(n, t) { + return n ? t ? (n.src !== t && (n.src = t), n.complete && n.naturalWidth > 0 ? "loaded" : "loading") : "error" : "idle"; +} +function TK(n, { referrerPolicy: t, crossOrigin: e }) { + const s = _K(), r = d.useRef(null), i = s ? (r.current || (r.current = new window.Image()), r.current) : null, [a, o] = d.useState( + () => X_(i, n) + ); + return ai(() => { + o(X_(i, n)); + }, [i, n]), ai(() => { + const c = (p) => () => { + o(p); + }; + if (!i) return; + const u = c("loaded"), f = c("error"); + return i.addEventListener("load", u), i.addEventListener("error", f), t && (i.referrerPolicy = t), typeof e == "string" && (i.crossOrigin = e), () => { + i.removeEventListener("load", u), i.removeEventListener("error", f); + }; + }, [i, e, t]), a; +} +var CN = yN, _N = bN, SN = xN; +const EN = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx( + CN, + { + ref: e, + className: Ge("relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full", n), + ...t + } +)); +EN.displayName = CN.displayName; +const kN = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx(_N, { ref: e, className: Ge("aspect-square h-full w-full", n), ...t })); +kN.displayName = _N.displayName; +const TN = d.forwardRef(({ className: n, ...t }, e) => /* @__PURE__ */ h.jsx( + SN, + { + ref: e, + className: Ge("flex h-full w-full items-center justify-center rounded-full bg-muted", n), + ...t + } +)); +TN.displayName = SN.displayName; +const AK = Ap(void 0), AN = () => { + const n = qc(AK); + if (n === void 0) + throw new Error("useProfiles must be used within a ProfilesProvider"); + return n; +}, Vd = ({ + userId: n, + avatarUrl: t, + displayName: e, + createdAt: s, + className: r = "w-8 h-8", + showDate: i = !0, + onClick: a, + hoverStyle: o = !1, + textSize: c = "sm" +}) => { + Kd(); + const { profiles: u, fetchProfile: f } = AN(), p = u[n], g = t || (p == null ? void 0 : p.avatar_url), y = e || (p == null ? void 0 : p.display_name) || `User ${n.slice(0, 8)}`; + Rt(() => { + p || f(n); + }, [n, p, f]); + const v = (E) => { + if (a) { + a(E); + return; + } + E.stopPropagation(), window.location.href = `/user/${n}`; + }, b = o ? `text-white text-${c} font-medium hover:underline cursor-pointer` : `font-semibold hover:underline text-${c}`, w = o ? "text-white/60 text-xs" : "text-xs text-muted-foreground"; + return /* @__PURE__ */ h.jsxs("div", { className: "flex items-center space-x-2", onClick: v, children: [ + /* @__PURE__ */ h.jsxs(EN, { className: `${r} bg-background hover:scale-105 transition-transform cursor-pointer`, children: [ + /* @__PURE__ */ h.jsx(kN, { src: g || void 0, alt: y || "Avatar", className: "object-cover" }), + /* @__PURE__ */ h.jsx(TN, { className: "bg-gradient-to-br from-purple-500 to-indigo-600 text-white", children: /* @__PURE__ */ h.jsx(K8, { className: "h-1/2 w-1/2" }) }) + ] }), + /* @__PURE__ */ h.jsxs("div", { className: "flex flex-col min-w-0", children: [ + /* @__PURE__ */ h.jsx("span", { className: b, children: y }), + i && s && /* @__PURE__ */ h.jsx("span", { className: w, children: new Date(s).toLocaleDateString() }) + ] }) + ] }); +}, PK = ({ + pictureId: n, + image: t, + title: e, + author: s, + authorId: r, + likes: i, + comments: a, + isLiked: o = !1, + description: c, + onClick: u, + onLike: f, + onDelete: p, + isVid: g, + onEdit: y, + createdAt: v, + authorAvatarUrl: b, + showContent: w = !0, + responsive: E, + variant: x = "grid", + apiUrl: C +}) => { + const { user: _ } = Qa(), k = Kd(), { navigationData: A, setNavigationData: T, preloadImage: N } = gK(), [$, D] = fe(o), [V, j] = fe(i), [B, W] = fe(!1), [J, G] = fe(!1), [q, H] = fe(!1), [L, X] = fe(!1), [te, Te] = fe(!1), [_e, Je] = fe(null), [Re, nt] = fe(0), rt = (_ == null ? void 0 : _.id) === r; + Rt(() => { + (async () => { + if (!(!rt || !_)) + try { + const { data: ce } = await ct.from("pictures").select("parent_id").eq("id", n).single(); + if (!ce) return; + let ht = ct.from("pictures").select("id", { count: "exact", head: !0 }); + ce.parent_id ? ht = ht.or(`parent_id.eq.${ce.parent_id},id.eq.${ce.parent_id}`) : ht = ht.or(`parent_id.eq.${n},id.eq.${n}`); + const { count: R } = await ht; + nt(R || 1); + } catch (ce) { + console.error("Error fetching version count:", ce); + } + })(); + }, [n, rt, _]); + const qe = async (ne) => { + if (ne.stopPropagation(), !_) { + Ee.error(de("Please sign in to like pictures")); + return; + } + try { + if ($) { + const { error: ce } = await ct.from("likes").delete().eq("user_id", _.id).eq("picture_id", n); + if (ce) throw ce; + D(!1), j((ht) => ht - 1); + } else { + const { error: ce } = await ct.from("likes").insert([{ user_id: _.id, picture_id: n }]); + if (ce) throw ce; + D(!0), j((ht) => ht + 1); + } + f == null || f(); + } catch (ce) { + console.error("Error toggling like:", ce), Ee.error(de("Failed to update like")); + } + }, Ye = async (ne) => { + if (ne.stopPropagation(), !_ || !rt) { + Ee.error(de("You can only delete your own images")); + return; + } + if (confirm(de("Are you sure you want to delete this image? This action cannot be undone."))) { + G(!0); + try { + const { data: ce, error: ht } = await ct.from("pictures").select("image_url").eq("id", n).single(); + if (ht) throw ht; + const { error: R } = await ct.from("pictures").delete().eq("id", n); + if (R) throw R; + if (ce != null && ce.image_url) { + const F = ce.image_url.split("/"), Y = F[F.length - 1], le = F[F.length - 2], { error: I } = await ct.storage.from("pictures").remove([`${le}/${Y}`]); + I && console.error("Error deleting from storage:", I); + } + Ee.success(de("Image deleted successfully")), p == null || p(); + } catch (ce) { + console.error("Error deleting image:", ce), Ee.error(de("Failed to delete image")); + } finally { + G(!1); + } + } + }, ee = async () => { + try { + const ne = pK(e); + await uK(t, ne), Ee.success(de("Image downloaded successfully")); + } catch (ne) { + console.error("Error downloading image:", ne), Ee.error(de("Failed to download image")); + } + }, ge = () => { + if (A) { + const ne = A.posts.findIndex((ce) => ce.id === n); + ne !== -1 && T({ + ...A, + currentIndex: ne + }); + } + H(!0); + }, ze = (ne) => { + if (!A || !A.posts.length) { + Ee.error(de("No navigation data available")); + return; + } + const ce = ne === "next" ? A.currentIndex + 1 : A.currentIndex - 1; + if (ce >= 0 && ce < A.posts.length) { + const ht = A.posts[ce]; + T({ + ...A, + currentIndex: ce + }), k(`/post/${ht.id}`); + } else + Ee.info(de(ne === "next" ? "No next post available" : "No previous post available")); + }, st = (ne) => { + if (!A) return; + const ce = ne === "next" ? A.currentIndex + 1 : A.currentIndex - 1; + if (ce >= 0 && ce < A.posts.length) { + const ht = A.posts[ce]; + N(ht.image_url); + } + }, Pt = async (ne) => { + if (!ne.trim()) { + Ee.error(de("Please enter a prompt")); + return; + } + X(!0); + try { + const ht = await (await fetch(t)).blob(), R = new File([ht], e || "image.png", { + type: ht.type || "image/png" + }), F = await Dz(ne, [R]); + if (F) { + const Y = new Uint8Array(F.imageData), le = new Blob([Y], { type: "image/png" }), I = new FileReader(); + I.onload = () => { + const K = I.result; + Je(K), Ee.success(de("Image generated successfully!")); + }, I.readAsDataURL(le); + } + } catch (ce) { + console.error("Error generating image:", ce), Ee.error(de("Failed to generate image. Please check your Google API key.")); + } finally { + X(!1); + } + }, et = async (ne, ce, ht, R) => { + if (!_) { + Ee.error(de("Please sign in to publish images")); + return; + } + Te(!0); + try { + const Y = await (await fetch(ce)).blob(); + if (ne === "overwrite") { + const le = t; + if (le.includes("supabase.co/storage/")) { + const I = le.split("/"), K = I[I.length - 1], se = `${r}/${K}`, { error: Pe } = await ct.storage.from("pictures").update(se, Y, { + cacheControl: "0", + // Disable caching to ensure immediate update + upsert: !0 + }); + if (Pe) throw Pe; + Ee.success(de("Image updated successfully!")); + } else { + Ee.error(de("Cannot overwrite this image")); + return; + } + } else { + const le = `${_.id}/${Date.now()}-generated.png`, { data: I, error: K } = await ct.storage.from("pictures").upload(le, Y); + if (K) throw K; + const { data: { publicUrl: se } } = ct.storage.from("pictures").getPublicUrl(le), { error: Pe } = await ct.from("pictures").insert([{ + title: ht, + description: R || de("Generated from") + `: ${e}`, + image_url: se, + user_id: _.id + }]); + if (Pe) throw Pe; + Ee.success(de("Image published to gallery!")); + } + H(!1), Je(null), f == null || f(); + } catch (F) { + console.error("Error publishing image:", F), Ee.error(de("Failed to publish image")); + } finally { + Te(!1); + } + }, tn = (ne) => { + ne.preventDefault(), ne.stopPropagation(), u == null || u(n); + }, hs = (ne) => { + g ? ge() : tn(ne); + }; + return /* @__PURE__ */ h.jsxs( + "div", + { + "data-testid": "photo-card", + className: "group relative overflow-hidden bg-card transition-all duration-300 cursor-pointer w-full", + onClick: hs, + children: [ + /* @__PURE__ */ h.jsx("div", { className: `${x === "grid" ? "aspect-square" : ""} overflow-hidden`, children: /* @__PURE__ */ h.jsx( + Mg, + { + src: t, + alt: e, + className: "w-full h-full", + imgClassName: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105", + sizes: x === "grid" ? "(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw" : "100vw", + responsiveSizes: x === "grid" ? [320, 640, 1024, 1280] : [640, 1024, 1280, 1920], + data: E, + apiUrl: C + } + ) }), + w && x === "grid" && /* @__PURE__ */ h.jsx("div", { className: "hidden md:block absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none", children: /* @__PURE__ */ h.jsxs("div", { className: "absolute bottom-0 left-0 right-0 p-4 pointer-events-auto", children: [ + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center justify-between mb-2", children: [ + /* @__PURE__ */ h.jsx("div", { className: "flex items-center space-x-2", children: /* @__PURE__ */ h.jsx( + Vd, + { + userId: r, + avatarUrl: b, + displayName: s, + hoverStyle: !0, + showDate: !1 + } + ) }), + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center space-x-1", children: [ + /* @__PURE__ */ h.jsx( + Me, + { + size: "sm", + variant: "ghost", + onClick: qe, + className: `h-8 w-8 p-0 ${$ ? "text-red-500" : "text-white hover:text-red-500"}`, + children: /* @__PURE__ */ h.jsx(Od, { className: "h-4 w-4", fill: $ ? "currentColor" : "none" }) + } + ), + V > 0 && /* @__PURE__ */ h.jsx("span", { className: "text-white text-sm", children: V }), + /* @__PURE__ */ h.jsx( + Me, + { + size: "sm", + variant: "ghost", + className: "h-8 w-8 p-0 text-white hover:text-blue-400 ml-2", + children: /* @__PURE__ */ h.jsx(df, { className: "h-4 w-4" }) + } + ), + /* @__PURE__ */ h.jsx("span", { className: "text-white text-sm", children: a }), + rt && /* @__PURE__ */ h.jsxs(h.Fragment, { children: [ + /* @__PURE__ */ h.jsx( + Me, + { + size: "sm", + variant: "ghost", + onClick: (ne) => { + ne.stopPropagation(), y ? y(n) : W(!0); + }, + className: "h-8 w-8 p-0 text-white hover:text-green-400 ml-2", + children: /* @__PURE__ */ h.jsx(Rd, { className: "h-4 w-4" }) + } + ), + /* @__PURE__ */ h.jsx( + Me, + { + size: "sm", + variant: "ghost", + onClick: Ye, + disabled: J, + className: "h-8 w-8 p-0 text-white hover:text-red-400 ml-2", + children: /* @__PURE__ */ h.jsx(Wy, { className: "h-4 w-4" }) + } + ), + Re > 1 && /* @__PURE__ */ h.jsxs("div", { className: "flex items-center ml-2 px-2 py-1 bg-white/20 rounded text-white text-xs", children: [ + /* @__PURE__ */ h.jsx(GS, { className: "h-3 w-3 mr-1" }), + Re + ] }) + ] }) + ] }) + ] }), + !Kw(e) && /* @__PURE__ */ h.jsx("h3", { className: "text-white font-medium mb-1", children: e }), + c && /* @__PURE__ */ h.jsx("div", { className: "text-white/80 text-sm mb-1 line-clamp-2 overflow-hidden", children: /* @__PURE__ */ h.jsx($c, { content: c, className: "prose-invert prose-white" }) }), + v && /* @__PURE__ */ h.jsx("div", { className: "text-white/60 text-xs mb-2", children: Yw(v) }), + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center space-x-1", children: [ + /* @__PURE__ */ h.jsxs( + Me, + { + size: "sm", + variant: "secondary", + className: "h-6 px-2 text-xs bg-white/20 hover:bg-white/30 border-0 text-white", + onClick: (ne) => { + ne.stopPropagation(), ee(); + }, + children: [ + /* @__PURE__ */ h.jsx(Og, { className: "h-3 w-3 mr-1" }), + /* @__PURE__ */ h.jsx(Ve, { children: "Save" }) + ] + } + ), + /* @__PURE__ */ h.jsx( + Me, + { + size: "sm", + variant: "secondary", + className: "h-6 w-6 p-0 bg-white/20 hover:bg-white/30 border-0 text-white", + onClick: (ne) => { + ne.stopPropagation(), ge(); + }, + title: "View in lightbox", + children: /* @__PURE__ */ h.jsx(YS, { className: "h-2.5 w-2.5" }) + } + ), + /* @__PURE__ */ h.jsx(Me, { size: "sm", variant: "secondary", className: "h-6 w-6 p-0 bg-white/20 hover:bg-white/30 border-0 text-white", children: /* @__PURE__ */ h.jsx(KS, { className: "h-2.5 w-2.5" }) }), + /* @__PURE__ */ h.jsx( + Y_, + { + imageUrl: t, + imageTitle: e, + size: "sm", + variant: "ghost", + className: "h-6 px-2 text-xs bg-white/20 hover:bg-white/30 border-0 text-white" + } + ) + ] }) + ] }) }), + w && (x === "feed" || x === "grid" && !0) && /* @__PURE__ */ h.jsxs("div", { className: `${x === "grid" ? "md:hidden" : ""} pb-2 space-y-2`, children: [ + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center justify-between px-2 pt-2", children: [ + /* @__PURE__ */ h.jsx( + Vd, + { + userId: r, + avatarUrl: b, + displayName: s === "User" ? void 0 : s, + className: "w-8 h-8", + showDate: !1 + } + ), + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center gap-1", children: [ + /* @__PURE__ */ h.jsx( + Me, + { + size: "icon", + variant: "ghost", + onClick: qe, + className: $ ? "text-red-500 hover:text-red-600" : "", + children: /* @__PURE__ */ h.jsx(Od, { className: "h-6 w-6", fill: $ ? "currentColor" : "none" }) + } + ), + V > 0 && /* @__PURE__ */ h.jsx("span", { className: "text-sm font-medium text-foreground mr-1", children: V }), + /* @__PURE__ */ h.jsx( + Me, + { + size: "icon", + variant: "ghost", + className: "text-foreground", + children: /* @__PURE__ */ h.jsx(df, { className: "h-6 w-6 -rotate-90" }) + } + ), + a > 0 && /* @__PURE__ */ h.jsx("span", { className: "text-sm font-medium text-foreground mr-1", children: a }), + /* @__PURE__ */ h.jsx( + Me, + { + size: "icon", + variant: "ghost", + className: "text-foreground", + onClick: (ne) => { + ne.stopPropagation(), ee(); + }, + children: /* @__PURE__ */ h.jsx(Og, { className: "h-6 w-6" }) + } + ), + /* @__PURE__ */ h.jsx( + Y_, + { + imageUrl: t, + imageTitle: e, + size: "icon", + variant: "ghost", + className: "text-foreground hover:text-primary" + } + ), + rt && /* @__PURE__ */ h.jsx( + Me, + { + size: "icon", + variant: "ghost", + onClick: (ne) => { + ne.stopPropagation(), y ? y(n) : W(!0); + }, + className: "text-foreground hover:text-green-400", + children: /* @__PURE__ */ h.jsx(Rd, { className: "h-6 w-6" }) + } + ) + ] }) + ] }), + /* @__PURE__ */ h.jsxs("div", { className: "px-4 space-y-1", children: [ + !Kw(e) && e && /* @__PURE__ */ h.jsx("div", { className: "font-semibold text-sm", children: e }), + c && /* @__PURE__ */ h.jsx("div", { className: "text-sm text-foreground/90 line-clamp-3", children: /* @__PURE__ */ h.jsx($c, { content: c, className: "prose-sm dark:prose-invert" }) }), + v && /* @__PURE__ */ h.jsx("div", { className: "text-xs text-muted-foreground pt-1", children: Yw(v) }) + ] }) + ] }), + B && /* @__PURE__ */ h.jsx( + qz, + { + open: B, + onOpenChange: W, + pictureId: n, + currentTitle: e, + currentDescription: c, + currentVisible: !0, + onUpdateSuccess: () => { + W(!1), f == null || f(); + } + } + ), + /* @__PURE__ */ h.jsx( + QY, + { + isOpen: q, + onClose: () => { + H(!1), Je(null); + }, + imageUrl: _e || t, + imageTitle: e, + onPromptSubmit: Pt, + onPublish: et, + isGenerating: L, + isPublishing: te, + showPrompt: !0, + showPublish: !!_e, + generatedImageUrl: _e || void 0, + currentIndex: A == null ? void 0 : A.currentIndex, + totalCount: A == null ? void 0 : A.posts.length, + onNavigate: ze, + onPreload: st + } + ) + ] + } + ); +}, ci = typeof document > "u", Bi = Symbol(0); +let dy = !1, Xw = !1, si = null, Eu = null, Cr = null, nr = 0, fu = [], p2 = {}; +const NK = () => { +}, nh = 0, PN = 1, hy = 2, Nv = 3; +function $K() { + dy = !0, queueMicrotask(NN); +} +function NN() { + if (!fu.length) { + dy = !1; + return; + } + Xw = !0; + for (let n = 0; n < fu.length; n++) + fu[n].$st !== nh && RK(fu[n]); + fu = [], dy = !1, Xw = !1; +} +function RK(n) { + let t = [n]; + for (; n = n[Bi]; ) + n.$e && n.$st !== nh && t.push(n); + for (let e = t.length - 1; e >= 0; e--) + x2(t[e]); +} +function IK(n) { + const t = qd(); + return qp(t, n.length ? n.bind(null, Ud.bind(t)) : n, null); +} +function pe(n) { + return qp(si, n, null); +} +function Bd(n) { + return qp(null, n, null); +} +function ri() { + Xw || NN(); +} +function Up() { + return si; +} +function Dn(n, t) { + try { + return qp(t, n, null); + } catch (e) { + g2(t, e); + return; + } +} +function m2(n, t = si) { + return t == null ? void 0 : t.$cx[n]; +} +function OK(n, t, e = si) { + e && (e.$cx = { ...e.$cx, [n]: t }); +} +function ft(n) { + if (!n || !si) + return n || NK; + const t = si; + return t.$d ? Array.isArray(t.$d) ? t.$d.push(n) : t.$d = [t.$d, n] : t.$d = n, function() { + t.$st !== Nv && (n.call(null), $v(t.$d) ? t.$d = null : Array.isArray(t.$d) && t.$d.splice(t.$d.indexOf(n), 1)); + }; +} +function Ud(n = !0) { + if (this.$st !== Nv) { + if (this.$h) + if (Array.isArray(this.$h)) + for (let t = this.$h.length - 1; t >= 0; t--) + Ud.call(this.$h[t]); + else + Ud.call(this.$h); + if (n) { + const t = this[Bi]; + t && (Array.isArray(t.$h) ? t.$h.splice(t.$h.indexOf(this), 1) : t.$h = null), MK(this); + } + } +} +function MK(n) { + n.$st = Nv, n.$d && $N(n), n.$s && Qw(n, 0), n[Bi] = null, n.$s = null, n.$o = null, n.$h = null, n.$cx = p2, n.$eh = null; +} +function $N(n) { + try { + if (Array.isArray(n.$d)) + for (let t = n.$d.length - 1; t >= 0; t--) { + const e = n.$d[t]; + e.call(e); + } + else + n.$d.call(n.$d); + n.$d = null; + } catch (t) { + g2(n, t); + } +} +function qp(n, t, e) { + const s = si, r = Eu; + si = n, Eu = e; + try { + return t.call(n); + } finally { + si = s, Eu = r; + } +} +function g2(n, t) { + if (!n || !n.$eh) + throw t; + let e = 0, s = n.$eh.length, r = t; + for (e = 0; e < s; e++) + try { + n.$eh[e](r); + break; + } catch (i) { + r = i; + } + if (e === s) + throw r; +} +function y2() { + return this.$st === Nv ? this.$v : (Eu && !this.$e && (!Cr && Eu.$s && Eu.$s[nr] == this ? nr++ : Cr ? Cr.push(this) : Cr = [this]), this.$c && x2(this), this.$v); +} +function RN(n) { + const t = $v(n) ? n(this.$v) : n; + if (this.$ch(this.$v, t) && (this.$v = t, this.$o)) + for (let e = 0; e < this.$o.length; e++) + MN(this.$o[e], hy); + return this.$v; +} +const v2 = function() { + this[Bi] = null, this.$h = null, si && si.append(this); +}, Yc = v2.prototype; +Yc.$cx = p2; +Yc.$eh = null; +Yc.$c = null; +Yc.$d = null; +Yc.append = function(n) { + n[Bi] = this, this.$h ? Array.isArray(this.$h) ? this.$h.push(n) : this.$h = [this.$h, n] : this.$h = n, n.$cx = n.$cx === p2 ? this.$cx : { ...this.$cx, ...n.$cx }, this.$eh && (n.$eh = n.$eh ? [...n.$eh, ...this.$eh] : this.$eh); +}; +Yc.dispose = function() { + Ud.call(this); +}; +function qd() { + return new v2(); +} +const IN = function(t, e, s) { + v2.call(this), this.$st = e ? hy : nh, this.$i = !1, this.$e = !1, this.$s = null, this.$o = null, this.$v = t, e && (this.$c = e), s && s.dirty && (this.$ch = s.dirty); +}, b2 = IN.prototype; +Object.setPrototypeOf(b2, Yc); +b2.$ch = DK; +b2.call = y2; +function w2(n, t, e) { + return new IN(n, t, e); +} +function DK(n, t) { + return n !== t; +} +function $v(n) { + return typeof n == "function"; +} +function x2(n) { + if (n.$st === PN) + for (let t = 0; t < n.$s.length && (x2(n.$s[t]), n.$st !== hy); t++) + ; + n.$st === hy ? ON(n) : n.$st = nh; +} +function LK(n) { + n.$h && Ud.call(n, !1), n.$d && $N(n), n.$eh = n[Bi] ? n[Bi].$eh : null; +} +function ON(n) { + let t = Cr, e = nr; + Cr = null, nr = 0; + try { + LK(n); + const s = qp(n, n.$c, n); + Q_(n), !n.$e && n.$i ? RN.call(n, s) : (n.$v = s, n.$i = !0); + } catch (s) { + Q_(n), g2(n, s); + } finally { + Cr = t, nr = e, n.$st = nh; + } +} +function Q_(n) { + if (Cr) { + if (n.$s && Qw(n, nr), n.$s && nr > 0) { + n.$s.length = nr + Cr.length; + for (let e = 0; e < Cr.length; e++) + n.$s[nr + e] = Cr[e]; + } else + n.$s = Cr; + let t; + for (let e = nr; e < n.$s.length; e++) + t = n.$s[e], t.$o ? t.$o.push(n) : t.$o = [n]; + } else n.$s && nr < n.$s.length && (Qw(n, nr), n.$s.length = nr); +} +function MN(n, t) { + if (!(n.$st >= t) && (n.$e && n.$st === nh && (fu.push(n), dy || $K()), n.$st = t, n.$o)) + for (let e = 0; e < n.$o.length; e++) + MN(n.$o[e], PN); +} +function Qw(n, t) { + let e, s; + for (let r = t; r < n.$s.length; r++) + e = n.$s[r], e.$o && (s = e.$o.indexOf(n), e.$o[s] = e.$o[e.$o.length - 1], e.$o.pop()); +} +function He(n, t) { + const e = w2(n, null, t), s = y2.bind(e); + return s[Bi] = !0, s.set = RN.bind(e), s; +} +function jK(n) { + return $v(n) && Bi in n; +} +function za(n, t) { + const e = w2( + t == null ? void 0 : t.initial, + n, + t + ), s = y2.bind(e); + return s[Bi] = !0, s; +} +function C2(n, t) { + const e = w2( + null, + function() { + let r = n(); + return $v(r) && ft(r), null; + }, + void 0 + ); + return e.$e = !0, ON(e), Ud.bind(e, !0); +} +function DN(n) { + return jK(n) && "set" in n; +} +function cr(...n) { +} +function ii(n) { + return n === null; +} +function jn(n) { + return typeof n > "u"; +} +function LN(n) { + return ii(n) || jn(n); +} +function jN(n) { + return (n == null ? void 0 : n.constructor) === Object; +} +function zs(n) { + return typeof n == "number" && !Number.isNaN(n); +} +function Le(n) { + return typeof n == "string"; +} +function zd(n) { + return typeof n == "boolean"; +} +function Hs(n) { + return typeof n == "function"; +} +function En(n) { + return Array.isArray(n); +} +const Z = ci ? FK : C2; +function FK(n, t) { + var e; + return typeof process < "u" && ((e = process.env) == null ? void 0 : e.NODE_ENV) === "test" ? C2(n) : cr; +} +const VK = ci ? class { +} : Event, FN = Symbol("DOM_EVENT"); +var IS, OS; +class Nt extends (OS = VK, IS = FN, OS) { + constructor(e, ...s) { + var i, a; + super(e, s[0]); + U(this, IS, !0); + /** + * The event detail. + */ + U(this, "detail"); + /** + * The event trigger chain. + */ + U(this, "triggers", new BK()); + this.detail = (i = s[0]) == null ? void 0 : i.detail; + const r = (a = s[0]) == null ? void 0 : a.trigger; + r && this.triggers.add(r); + } + /** + * The preceding event that was responsible for this event being fired. + */ + get trigger() { + return this.triggers.source; + } + /** + * The origin event that lead to this event being fired. + */ + get originEvent() { + return this.triggers.origin; + } + /** + * Whether the origin event was triggered by the user. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted} + */ + get isOriginTrusted() { + var e; + return ((e = this.triggers.origin) == null ? void 0 : e.isTrusted) ?? !1; + } +} +class BK { + constructor() { + U(this, "chain", []); + } + get source() { + return this.chain[0]; + } + get origin() { + return this.chain[this.chain.length - 1]; + } + /** + * Appends the event to the end of the chain. + */ + add(t) { + this.chain.push(t), UK(t) && this.chain.push(...t.triggers); + } + /** + * Removes the event from the chain and returns it (if found). + */ + remove(t) { + return this.chain.splice(this.chain.indexOf(t), 1)[0]; + } + /** + * Returns whether the chain contains the given `event`. + */ + has(t) { + return this.chain.some((e) => e === t); + } + /** + * Returns whether the chain contains the given event type. + */ + hasType(t) { + return !!this.findType(t); + } + /** + * Returns the first event with the given `type` found in the chain. + */ + findType(t) { + return this.chain.find((e) => e.type === t); + } + /** + * Walks an event chain on a given `event`, and invokes the given `callback` for each trigger event. + */ + walk(t) { + for (const e of this.chain) { + const s = t(e); + if (s) return [e, s]; + } + } + [Symbol.iterator]() { + return this.chain.values(); + } +} +function UK(n) { + return !!(n != null && n[FN]); +} +class _2 extends EventTarget { + constructor() { + super(...arguments); + /** @internal type only */ + U(this, "$ts__events"); + } + addEventListener(e, s, r) { + return super.addEventListener(e, s, r); + } + removeEventListener(e, s, r) { + return super.removeEventListener(e, s, r); + } +} +function dn(n, t, e, s) { + return ci ? cr : (n.addEventListener(t, e, s), ft(() => n.removeEventListener(t, e, s))); +} +var ku, Tu; +class Dt { + constructor(t) { + S(this, ku); + S(this, Tu); + P(this, ku, t), P(this, Tu, new AbortController()), ft(this.abort.bind(this)); + } + get signal() { + return l(this, Tu).signal; + } + add(t, e, s) { + if (this.signal.aborted) throw Error("aborted"); + return l(this, ku).addEventListener(t, e, { + ...s, + signal: s != null && s.signal ? qK(this.signal, s.signal) : this.signal + }), this; + } + remove(t, e) { + return l(this, ku).removeEventListener(t, e), this; + } + abort(t) { + l(this, Tu).abort(t); + } +} +ku = new WeakMap(), Tu = new WeakMap(); +function qK(...n) { + const t = new AbortController(), e = { signal: t.signal }; + function s(r) { + t.abort(r.target.reason); + } + for (const r of n) { + if (r.aborted) { + t.abort(r.reason); + break; + } + r.addEventListener("abort", s, e); + } + return t.signal; +} +function Jw(n) { + return !!(n != null && n.type.startsWith("pointer")); +} +function of(n) { + return !!(n != null && n.type.startsWith("touch")); +} +function VN(n) { + return /^(click|mouse)/.test((n == null ? void 0 : n.type) ?? ""); +} +function zp(n) { + return !!(n != null && n.type.startsWith("key")); +} +function BN(n) { + return zp(n) && n.key === "Enter"; +} +function Rv(n) { + return zp(n) && (n.key === "Enter" || n.key === " "); +} +function UN(n) { + return n instanceof Node; +} +function Ze(n, t, e) { + if (n) if (!e && e !== "" && e !== 0) + n.removeAttribute(t); + else { + const s = e === !0 ? "" : e + ""; + n.getAttribute(t) !== s && n.setAttribute(t, s); + } + else return; +} +function Ps(n, t, e) { + if (n) !e && e !== 0 ? n.style.removeProperty(t) : n.style.setProperty(t, e + ""); + else return; +} +function qN(n, t, e) { + n.classList[e ? "add" : "remove"](t); +} +function J_(n) { + let t = n; + for (; typeof t == "function"; ) t = t.call(this); + return t; +} +function eo(n) { + return { id: Symbol(), provide: n }; +} +function dr(n, t, e = Up()) { + var r; + const s = !jn(t); + OK(n.id, s ? t : (r = n.provide) == null ? void 0 : r.call(n), e); +} +function Cn(n) { + return m2(n.id); +} +function Ha(n) { + return !jn(m2(n.id)); +} +const $b = /* @__PURE__ */ Symbol(0), Rb = /* @__PURE__ */ Symbol(0), Iv = /* @__PURE__ */ Symbol(0), Ib = {}; +var MS, Au, Pu, jl, Nu, Ui, zN, HN, WN, GN; +MS = Iv; +class zK { + constructor(t, e, s) { + S(this, Ui); + /** @internal type only */ + U(this, "$ts__events"); + /** @internal type only */ + U(this, "$ts__vars"); + /* @internal */ + U(this, MS, null); + U(this, "$el", He(null)); + U(this, "el", null); + U(this, "scope", null); + U(this, "attachScope", null); + U(this, "connectScope", null); + U(this, "component", null); + U(this, "destroyed", !1); + U(this, "props", Ib); + U(this, "attrs", null); + U(this, "styles", null); + U(this, "state"); + U(this, "$state"); + S(this, Au, []); + S(this, Pu, []); + S(this, jl, []); + S(this, Nu, []); + var a; + this.scope = e, s != null && s.scope && s.scope.append(e); + let r = t.state, i = t.props; + if (r && (this.$state = r.create(), this.state = new Proxy(this.$state, { + get: (o, c) => this.$state[c]() + }), dr(r, this.$state)), i && (this.props = HK(i), s != null && s.props)) + for (const o of Object.keys(s.props)) + (a = this.props[o]) == null || a.set(s.props[o]); + ft(this.destroy.bind(this)); + } + setup() { + Dn(() => { + for (const t of l(this, Au)) t(); + }, this.scope); + } + attach(t) { + this.el || (this.el = t, this.$el.set(t), Dn(() => { + this.attachScope = qd(), Dn(() => { + for (const e of l(this, Pu)) e(this.el); + m(this, Ui, zN).call(this), m(this, Ui, HN).call(this); + }, this.attachScope); + }, this.scope), t.dispatchEvent(new Event("attached"))); + } + detach() { + var t; + (t = this.attachScope) == null || t.dispose(), this.attachScope = null, this.connectScope = null, this.el = null, this.$el.set(null); + } + connect() { + !this.el || !this.attachScope || !l(this, jl).length || Dn(() => { + this.connectScope = qd(), Dn(() => { + for (const t of l(this, jl)) t(this.el); + }, this.connectScope); + }, this.attachScope); + } + disconnect() { + var t; + (t = this.connectScope) == null || t.dispose(), this.connectScope = null; + } + destroy() { + if (this.destroyed) return; + this.destroyed = !0, Dn(() => { + for (const e of l(this, Nu)) e(this.el); + }, this.scope); + const t = this.el; + this.detach(), this.scope.dispose(), l(this, Au).length = 0, l(this, Pu).length = 0, l(this, jl).length = 0, l(this, Nu).length = 0, this.component = null, this.attrs = null, this.styles = null, this.props = Ib, this.scope = null, this.state = Ib, this.$state = null, t && delete t.$; + } + addHooks(t) { + t.onSetup && l(this, Au).push(t.onSetup.bind(t)), t.onAttach && l(this, Pu).push(t.onAttach.bind(t)), t.onConnect && l(this, jl).push(t.onConnect.bind(t)), t.onDestroy && l(this, Nu).push(t.onDestroy.bind(t)); + } +} +Au = new WeakMap(), Pu = new WeakMap(), jl = new WeakMap(), Nu = new WeakMap(), Ui = new WeakSet(), zN = function() { + if (this.attrs) + for (const t of Object.keys(this.attrs)) + ci ? Ze(this.el, t, J_.call(this.component, this.attrs[t])) : Hs(this.attrs[t]) ? Z(m(this, Ui, WN).bind(this, t)) : Ze(this.el, t, this.attrs[t]); +}, HN = function() { + if (this.styles) + for (const t of Object.keys(this.styles)) + ci ? Ps(this.el, t, J_.call(this.component, this.styles[t])) : Hs(this.styles[t]) ? Z(m(this, Ui, GN).bind(this, t)) : Ps(this.el, t, this.styles[t]); +}, WN = function(t) { + Ze(this.el, t, this.attrs[t].call(this.component)); +}, GN = function(t) { + Ps(this.el, t, this.styles[t].call(this.component)); +}; +function HK(n) { + const t = {}; + for (const e of Object.keys(n)) { + const s = n[e]; + t[e] = He(s, s); + } + return t; +} +let lf = { $$: null }; +function YN(n, t) { + return IK(() => { + lf.$$ = new zK(n, Up(), t); + const e = new n(); + return lf.$$.component = e, lf.$$ = null, e; + }); +} +class mr extends EventTarget { + constructor() { + super(); + /** @internal */ + U(this, "$$"); + lf.$$ && this.attach(lf); + } + get el() { + return this.$$.el; + } + get $el() { + return this.$$.$el(); + } + get scope() { + return this.$$.scope; + } + get attachScope() { + return this.$$.attachScope; + } + get connectScope() { + return this.$$.connectScope; + } + /** @internal */ + get $props() { + return this.$$.props; + } + /** @internal */ + get $state() { + return this.$$.$state; + } + get state() { + return this.$$.state; + } + attach({ $$: e }) { + return this.$$ = e, e.addHooks(this), this; + } + addEventListener(e, s, r) { + this.listen(e, s, r); + } + removeEventListener(e, s, r) { + var i; + (i = this.el) == null || i.removeEventListener(e, s, r); + } + /** + * The given callback is invoked when the component is ready to be set up. + * + * - This hook will run once. + * - This hook is called both client-side and server-side. + * - It's safe to use context inside this hook. + * - The host element has not attached yet - wait for `onAttach`. + */ + /** + * This method can be used to specify attributes that should be set on the host element. Any + * attributes that are assigned to a function will be considered a signal and updated accordingly. + */ + setAttributes(e) { + this.$$.attrs || (this.$$.attrs = {}), Object.assign(this.$$.attrs, e); + } + /** + * This method can be used to specify styles that should set be set on the host element. Any + * styles that are assigned to a function will be considered a signal and updated accordingly. + */ + setStyles(e) { + this.$$.styles || (this.$$.styles = {}), Object.assign(this.$$.styles, e); + } + /** + * This method is used to satisfy the CSS variables contract specified on the current + * component. Other CSS variables can be set via the `setStyles` method. + */ + setCSSVars(e) { + this.setStyles(e); + } + /** + * Type-safe utility for creating component DOM events. + */ + createEvent(e, ...s) { + return new Nt(e, s[0]); + } + /** + * Creates a `DOMEvent` and dispatches it from the host element. This method is typed to + * match all component events. + */ + dispatch(e, ...s) { + if (ci || !this.el) return !1; + const r = e instanceof Event ? e : new Nt(e, s[0]); + return Object.defineProperty(r, "target", { + get: () => this.$$.component + }), Bd(() => { + var i, a; + return (a = (i = this.$$)[Iv]) == null || a.call(i, r), this.el.dispatchEvent(r); + }); + } + dispatchEvent(e) { + return this.dispatch(e); + } + /** + * Adds an event listener for the given `type` and returns a function which can be invoked to + * remove the event listener. + * + * - The listener is removed if the current scope is disposed. + * - This method is safe to use on the server (noop). + */ + listen(e, s, r) { + return ci || !this.el ? cr : dn(this.el, e, s, r); + } +} +class yt extends mr { + subscribe(t) { + return Dn(() => Z(() => t(this.state)), this.$$.scope); + } + destroy() { + this.$$.destroy(); + } +} +function Kt(n, t, e) { + n[$b] || (n[$b] = /* @__PURE__ */ new Set()), n[$b].add(t); +} +function Yn(n, t, e) { + n[Rb] || (n[Rb] = /* @__PURE__ */ new Set()), n[Rb].add(t); +} +var $u; +class to { + constructor(t) { + U(this, "id", Symbol(0)); + U(this, "record"); + S(this, $u); + this.record = t, P(this, $u, Object.getOwnPropertyDescriptors(t)); + } + create() { + const t = {}, e = new Proxy(t, { get: (s, r) => t[r]() }); + for (const s of Object.keys(this.record)) { + const r = l(this, $u)[s].get; + t[s] = r ? za(r.bind(e)) : He(this.record[s]); + } + return t; + } + reset(t, e) { + for (const s of Object.keys(t)) + !l(this, $u)[s].get && (!e || e(s)) && t[s].set(this.record[s]); + } +} +$u = new WeakMap(); +function sh(n) { + return Cn(n); +} +function Wa(n) { + return n.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase(); +} +function S2(n) { + return n.replace(/-./g, (t) => t[1].toUpperCase()); +} +function WK(n) { + return GK(n).replace(/\s/g, ""); +} +function GK(n) { + return rh(n.replace(/-./g, (t) => " " + t[1].toUpperCase())); +} +function rh(n) { + return n.charAt(0).toUpperCase() + n.slice(1); +} +const Hp = d.createContext({ current: null }); +Hp.displayName = "Scope"; +function KN(n, ...t) { + return d.createElement(Hp.Provider, { value: n }, ...t); +} +function ih() { + return d.useContext(Hp).current; +} +function E2(n) { + const t = ih(); + return d.useMemo(() => m2(n.id, t), [t]); +} +function ZN(n, t) { + typeof n == "function" ? n(t) : n && (n.current = t); +} +function Wt(...n) { + return (t) => n.forEach((e) => ZN(e, t)); +} +function YK(n, t) { + const e = d.forwardRef((s, r) => { + var w, E, x, C, _, k, A, T; + let i = d.useContext(Hp), a = d.useRef(null), o = d.useRef(); + if (!o.current) { + const N = ZK(), $ = nS(n, N, s, i.current); + N.component = $, o.current = N, a.current = $.scope; + } + function c() { + let N = o.current, $ = i.current; + if (window.cancelAnimationFrame(N.destroyId), N.destroyId = -1, N.component.$$.destroyed) { + const D = nS(n, N, s, $); + N.component = D, N.attached = !1, N.forwardRef = !1, a.current = D.scope; + } + return N.el && tS(N, N.el), N.forwardRef || (ZN(r, N.component), N.forwardRef = !0), () => sg(N); + } + function u(N) { + const $ = o.current; + if (!$.forwardRef) { + $.el = N; + return; + } + window.cancelAnimationFrame($.refChangeId), $.refChangeId = window.requestAnimationFrame(() => { + const D = o.current; + D.refChangeId = -1, D.el !== N && (sg(D), N && tS(D, N), D.el = N); + }); + } + d.useEffect(() => { + const N = o.current; + return window.cancelAnimationFrame(N.destroyId), N.destroyId = -1, function() { + Hs(s.children) && (window.cancelAnimationFrame(N.refChangeId), N.refChangeId = -1, window.cancelAnimationFrame(N.connectId), N.connectId = -1, window.cancelAnimationFrame(N.destroyId), N.destroyId = window.requestAnimationFrame(() => { + N.destroyId = -1, sg(N), N.component.$$.destroy(), N.component.$$[Iv] = null, N.callbacks = {}, N.domCallbacks = {}, a.current = null; + })); + }; + }, []), d.useEffect(ri); + let f = o.current, { children: p, ...g } = s, y = {}, v = f.prevProps, b = Object.keys(g); + f.callbacks = {}; + for (const N of [...v, ...b]) + if (t.props.has(N)) + f.component.$props[N].set( + // If the prop was removed we'll use the default value provided on Component creation. + jn(g[N]) ? (w = n.props) == null ? void 0 : w[N] : g[N] + ); + else if ((E = t.events) != null && E.has(N) || (x = t.eventsRE) != null && x.test(N)) + f.callbacks[N] = g[N]; + else if ((C = t.domEvents) != null && C.has(N) || (_ = t.domEventsRE) != null && _.test(N)) { + let $ = Wa(N.slice(2)); + f.domCallbacks[$] = g[N], b.includes(N) ? f.el && !((T = f.listening) != null && T.has($)) && (f.listening || (f.listening = /* @__PURE__ */ new Set()), f.listening.add($), f.el.addEventListener($, f.onDOMEvent)) : ((k = f.el) == null || k.removeEventListener($, f.onDOMEvent), (A = f.listening) == null || A.delete($)); + } else + y[N] = g[N]; + return f.prevProps = b, KN( + a, + d.createElement(KK, { + effect: c + }), + Hs(p) ? p == null ? void 0 : p( + { + ...y, + suppressHydrationWarning: !0, + ref: u + }, + f.component + ) : p + ); + }); + return e.displayName = n.name + "Bridge", e; +} +function KK({ effect: n }) { + return d.useEffect(n, []), null; +} +const eS = /* @__PURE__ */ new Map(); +function ZK() { + const n = { + el: null, + prevProps: [], + callbacks: {}, + domCallbacks: {}, + refChangeId: -1, + connectId: -1, + destroyId: -1, + attached: !1, + forwardRef: !1, + listening: null, + onDOMEvent(t) { + var s, r; + const e = jn(t.detail) ? [t] : [t.detail, t]; + (r = (s = n.domCallbacks)[t.type]) == null || r.call(s, ...e); + } + }; + return n; +} +function tS(n, t) { + if (!(n.el === t && n.attached)) { + if (n.attached && sg(n), n.domCallbacks) { + n.listening || (n.listening = /* @__PURE__ */ new Set()); + for (const e of Object.keys(n.domCallbacks)) + n.listening.has(e) || (t.addEventListener(e, n.onDOMEvent), n.listening.add(e)); + } + n.component.$$.attach(t), n.connectId = window.requestAnimationFrame(() => { + n.component.$$.connect(), n.connectId = -1; + }), n.attached = !0; + } +} +function sg(n) { + if (n.attached && (window.cancelAnimationFrame(n.connectId), n.connectId = -1, n.component.$$.detach(), n.attached = !1, n.el && n.listening)) { + for (const t of n.listening) + n.el.removeEventListener(t, n.onDOMEvent); + n.listening.clear(); + } +} +function XK(n) { + var s, r; + let t = eS.get(n.type), e = jn(n.detail) ? [n] : [n.detail, n]; + t || eS.set(n.type, t = `on${WK(n.type)}`), (r = (s = this.callbacks)[t]) == null || r.call(s, ...e); +} +function nS(n, t, e, s) { + const r = YN(n, { props: e, scope: s }); + return r.$$[Iv] = XK.bind(t), r.$$.setup(), r; +} +function XN(n, t = !1) { + const e = typeof n; + if (e !== "string") + return !t && e === "function" ? XN(n()) : t && e === "boolean" ? n + "" : n; + const s = t ? '"' : "<", r = t ? """ : "<"; + let i = n.indexOf(s), a = n.indexOf("&"); + if (i < 0 && a < 0) return n; + let o = 0, c = ""; + for (; i >= 0 && a >= 0; ) + i < a ? (o < i && (c += n.substring(o, i)), c += r, o = i + 1, i = n.indexOf(s, o)) : (o < a && (c += n.substring(o, a)), c += "&", o = a + 1, a = n.indexOf("&", o)); + if (i >= 0) + do + o < i && (c += n.substring(o, i)), c += r, o = i + 1, i = n.indexOf(s, o); + while (i >= 0); + else + for (; a >= 0; ) + o < a && (c += n.substring(o, a)), c += "&", o = a + 1, a = n.indexOf("&", o); + return o < n.length ? c + n.substring(o) : c; +} +const QK = /* @__PURE__ */ Symbol(0), JK = /\s+/; +function eZ(n, t) { + const e = t.trim().split(JK); + for (const s of e) n.add(s); +} +const tZ = /\s*:\s*/, nZ = /\s*;\s*/; +function sZ(n, t) { + const e = t.trim().split(nZ); + for (let s = 0; s < e.length; s++) { + if (e[s] === "") continue; + const [r, i] = e[s].split(tZ); + n.set(r, i); + } +} +class rZ { + constructor(t) { + U(this, "keepAlive", !1); + U(this, "forwardKeepAlive", !0); + U(this, "$"); + U(this, "attributes", new iZ()); + U(this, "style", new aZ()); + U(this, "classList", new oZ()); + this.$ = t; + } + get $props() { + return this.$.$$.props; + } + get $state() { + return this.$.$$.$state; + } + get state() { + return this.$.state; + } + setup() { + const t = this.$.$$; + Dn(() => { + this.hasAttribute("class") && eZ(this.classList.tokens, this.getAttribute("class")), this.hasAttribute("style") && sZ(this.style.tokens, this.getAttribute("style")), t.setup(), t.attach(this), this.classList.length > 0 && this.setAttribute("class", this.classList.toString()), this.style.length > 0 && this.setAttribute("style", this.style.toString()), this.keepAlive && this.setAttribute("keep-alive", ""); + }, t.scope); + } + getAttribute(t) { + return this.attributes.getAttribute(t); + } + setAttribute(t, e) { + this.attributes.setAttribute(t, e); + } + hasAttribute(t) { + return this.attributes.hasAttribute(t); + } + removeAttribute(t) { + return this.attributes.removeAttribute(t); + } + [QK]() { + } + addEventListener() { + } + removeEventListener() { + } + dispatchEvent() { + return !1; + } + subscribe() { + return cr; + } + destroy() { + this.$.destroy(); + } +} +var Fr; +class iZ { + constructor() { + S(this, Fr, /* @__PURE__ */ new Map()); + } + get length() { + return l(this, Fr).size; + } + get tokens() { + return l(this, Fr); + } + getAttribute(t) { + return l(this, Fr).get(t) ?? null; + } + hasAttribute(t) { + return l(this, Fr).has(t); + } + setAttribute(t, e) { + l(this, Fr).set(t, e + ""); + } + removeAttribute(t) { + l(this, Fr).delete(t); + } + toString() { + if (l(this, Fr).size === 0) return ""; + let t = ""; + for (const [e, s] of l(this, Fr)) + t += ` ${e}="${XN(s, !0)}"`; + return t; + } +} +Fr = new WeakMap(); +var Vr; +class aZ { + constructor() { + S(this, Vr, /* @__PURE__ */ new Map()); + } + get length() { + return l(this, Vr).size; + } + get tokens() { + return l(this, Vr); + } + getPropertyValue(t) { + return l(this, Vr).get(t) ?? ""; + } + setProperty(t, e) { + l(this, Vr).set(t, e ?? ""); + } + removeProperty(t) { + const e = l(this, Vr).get(t); + return l(this, Vr).delete(t), e ?? ""; + } + toString() { + if (l(this, Vr).size === 0) return ""; + let t = ""; + for (const [e, s] of l(this, Vr)) + t += `${e}: ${s};`; + return t; + } +} +Vr = new WeakMap(); +var ws; +class oZ { + constructor() { + S(this, ws, /* @__PURE__ */ new Set()); + } + get length() { + return l(this, ws).size; + } + get tokens() { + return l(this, ws); + } + add(...t) { + for (const e of t) + l(this, ws).add(e); + } + contains(t) { + return l(this, ws).has(t); + } + remove(t) { + l(this, ws).delete(t); + } + replace(t, e) { + return l(this, ws).has(t) ? (l(this, ws).delete(t), l(this, ws).add(e), !0) : !1; + } + toggle(t, e) { + return e !== !0 && (l(this, ws).has(t) || e === !1) ? (l(this, ws).delete(t), !1) : (l(this, ws).add(t), !0); + } + toString() { + return Array.from(l(this, ws)).join(" "); + } +} +ws = new WeakMap(); +const lZ = { + acceptcharset: "acceptCharset", + "accept-charset": "acceptCharset", + accesskey: "accessKey", + allowfullscreen: "allowFullScreen", + autocapitalize: "autoCapitalize", + autocomplete: "autoComplete", + autocorrect: "autoCorrect", + autofocus: "autoFocus", + autoplay: "autoPlay", + autosave: "autoSave", + cellpadding: "cellPadding", + cellspacing: "cellSpacing", + charset: "charSet", + class: "className", + classid: "classID", + classname: "className", + colspan: "colSpan", + contenteditable: "contentEditable", + contextmenu: "contextMenu", + controlslist: "controlsList", + crossorigin: "crossOrigin", + dangerouslysetinnerhtml: "dangerouslySetInnerHTML", + datetime: "dateTime", + defaultchecked: "defaultChecked", + defaultvalue: "defaultValue", + disablepictureinpicture: "disablePictureInPicture", + disableremoteplayback: "disableRemotePlayback", + enctype: "encType", + enterkeyhint: "enterKeyHint", + fetchpriority: "fetchPriority", + for: "htmlFor", + formmethod: "formMethod", + formaction: "formAction", + formenctype: "formEncType", + formnovalidate: "formNoValidate", + formtarget: "formTarget", + frameborder: "frameBorder", + hreflang: "hrefLang", + htmlfor: "htmlFor", + httpequiv: "httpEquiv", + "http-equiv": "httpEquiv", + imagesizes: "imageSizes", + imagesrcset: "imageSrcSet", + innerhtml: "innerHTML", + inputmode: "inputMode", + itemid: "itemID", + itemprop: "itemProp", + itemref: "itemRef", + itemscope: "itemScope", + itemtype: "itemType", + keyparams: "keyParams", + keytype: "keyType", + marginwidth: "marginWidth", + marginheight: "marginHeight", + maxlength: "maxLength", + mediagroup: "mediaGroup", + minlength: "minLength", + nomodule: "noModule", + novalidate: "noValidate", + playsinline: "playsInline", + radiogroup: "radioGroup", + readonly: "readOnly", + referrerpolicy: "referrerPolicy", + rowspan: "rowSpan", + spellcheck: "spellCheck", + srcdoc: "srcDoc", + srclang: "srcLang", + srcset: "srcSet", + tabindex: "tabIndex", + usemap: "useMap" +}; +function cZ(n, t) { + function e(s) { + let r = d.useContext(Hp), i = YN(n, { + props: s, + scope: r.current + }), a = new rZ(i), o = {}, { style: c = {}, children: u, forwardRef: f, ...p } = s; + if (t.props.size) + for (const g of Object.keys(p)) + t.props.has(g) || (o[g] = p[g]); + else + o = p; + if (a.setup(), a.hasAttribute("style")) { + for (const [g, y] of a.style.tokens) + c[g.startsWith("--") ? g : S2(g)] = y; + a.removeAttribute("style"); + } + for (const [g, y] of a.attributes.tokens) { + const v = lZ[g]; + v && (v in o || (o[v] = y), a.removeAttribute(g)); + } + return KN( + { current: i.$$.scope }, + Hs(u) ? u == null ? void 0 : u( + { + ...Object.fromEntries(a.attributes.tokens), + ...o, + style: c + }, + i + ) : u, + d.createElement(() => (a.destroy(), null)) + ); + } + return e.displayName = n.name + "Bridge", e; +} +function ah(n) { + return E2(n); +} +function gt(n, t) { + const [, e] = d.useState(); + return d.useEffect(() => C2(() => { + n(), e({}); + }), [t ?? n]), n(); +} +function Sf(n) { + return n ? "true" : "false"; +} +function QN(n) { + return Object.keys(n); +} +function fy() { + let n, t; + return { promise: new Promise((s, r) => { + n = s, t = r; + }), resolve: n, reject: t }; +} +function JN(n) { + return new Promise((t) => setTimeout(t, n)); +} +function wl(n) { + if (ci) return cr; + let t = -1, e; + function s(...r) { + e = r, !(t >= 0) && (t = window.requestAnimationFrame(() => { + n.apply(this, e), t = -1, e = void 0; + })); + } + return s; +} +const uZ = ci ? cr : typeof window < "u" ? "requestIdleCallback" in window ? window.requestIdleCallback : (n) => window.setTimeout(n, 1) : cr; +function e$(n, t) { + return ci ? Promise.resolve() : new Promise((e) => { + uZ((s) => { + n == null || n(s), e(); + }, t); + }); +} +function vt(n, t) { + return ci ? cZ(n, { + props: new Set(Object.keys(n.props || {})) + }) : YK(n, { + props: new Set(Object.keys(n.props || {})), + events: new Set(t == null ? void 0 : t.events), + eventsRE: t == null ? void 0 : t.eventsRegex, + domEvents: t == null ? void 0 : t.domEvents, + domEventsRE: t == null ? void 0 : t.domEventsRegex + }); +} +var Ys = { + fullscreenEnabled: 0, + fullscreenElement: 1, + requestFullscreen: 2, + exitFullscreen: 3, + fullscreenchange: 4, + fullscreenerror: 5, + fullscreen: 6 +}, sS = [ + "webkitFullscreenEnabled", + "webkitFullscreenElement", + "webkitRequestFullscreen", + "webkitExitFullscreen", + "webkitfullscreenchange", + "webkitfullscreenerror", + "-webkit-full-screen" +], rS = [ + "mozFullScreenEnabled", + "mozFullScreenElement", + "mozRequestFullScreen", + "mozCancelFullScreen", + "mozfullscreenchange", + "mozfullscreenerror", + "-moz-full-screen" +], iS = [ + "msFullscreenEnabled", + "msFullscreenElement", + "msRequestFullscreen", + "msExitFullscreen", + "MSFullscreenChange", + "MSFullscreenError", + "-ms-fullscreen" +], Vs = typeof window < "u" && typeof window.document < "u" ? window.document : {}, yr = "fullscreenEnabled" in Vs && Object.keys(Ys) || sS[0] in Vs && sS || rS[0] in Vs && rS || iS[0] in Vs && iS || [], il = { + requestFullscreen: function(n) { + return n[yr[Ys.requestFullscreen]](); + }, + requestFullscreenFunction: function(n) { + return n[yr[Ys.requestFullscreen]]; + }, + get exitFullscreen() { + return Vs[yr[Ys.exitFullscreen]].bind(Vs); + }, + get fullscreenPseudoClass() { + return ":" + yr[Ys.fullscreen]; + }, + addEventListener: function(n, t, e) { + return Vs.addEventListener(yr[Ys[n]], t, e); + }, + removeEventListener: function(n, t, e) { + return Vs.removeEventListener(yr[Ys[n]], t, e); + }, + get fullscreenEnabled() { + return !!Vs[yr[Ys.fullscreenEnabled]]; + }, + set fullscreenEnabled(n) { + }, + get fullscreenElement() { + return Vs[yr[Ys.fullscreenElement]]; + }, + set fullscreenElement(n) { + }, + get onfullscreenchange() { + return Vs[("on" + yr[Ys.fullscreenchange]).toLowerCase()]; + }, + set onfullscreenchange(n) { + return Vs[("on" + yr[Ys.fullscreenchange]).toLowerCase()] = n; + }, + get onfullscreenerror() { + return Vs[("on" + yr[Ys.fullscreenerror]).toLowerCase()]; + }, + set onfullscreenerror(n) { + return Vs[("on" + yr[Ys.fullscreenerror]).toLowerCase()] = n; + } +}, xl = dZ; +function dZ(n, t, e) { + var s = null, r = null, i = e && e.leading, a = e && e.trailing; + i == null && (i = !0), a == null && (a = !i), i == !0 && (a = !1); + var o = function() { + s && (clearTimeout(s), s = null); + }, c = function() { + var f = r; + o(), f && f(); + }, u = function() { + var f = i && !s, p = this, g = arguments; + if (r = function() { + return n.apply(p, g); + }, s || (s = setTimeout(function() { + if (s = null, a) + return r(); + }, t)), f) + return f = !1, r(); + }; + return u.cancel = o, u.flush = c, u; +} +var Ov = hZ; +function hZ(n, t, e) { + var s = null, r = null, i = function() { + s && (clearTimeout(s), r = null, s = null); + }, a = function() { + var c = r; + i(), c && c(); + }, o = function() { + if (!t) + return n.apply(this, arguments); + var c = this, u = arguments, f = e && !s; + if (i(), r = function() { + n.apply(c, u); + }, s = setTimeout(function() { + if (s = null, !f) { + var p = r; + return r = null, p(); + } + }, t), f) + return r(); + }; + return o.cancel = i, o.flush = a, o; +} +const aS = (n) => typeof n == "object" && n != null && n.nodeType === 1, oS = (n, t) => (!t || n !== "hidden") && n !== "visible" && n !== "clip", Pm = (n, t) => { + if (n.clientHeight < n.scrollHeight || n.clientWidth < n.scrollWidth) { + const e = getComputedStyle(n, null); + return oS(e.overflowY, t) || oS(e.overflowX, t) || ((s) => { + const r = ((i) => { + if (!i.ownerDocument || !i.ownerDocument.defaultView) return null; + try { + return i.ownerDocument.defaultView.frameElement; + } catch { + return null; + } + })(s); + return !!r && (r.clientHeight < s.scrollHeight || r.clientWidth < s.scrollWidth); + })(n); + } + return !1; +}, Nm = (n, t, e, s, r, i, a, o) => i < n && a > t || i > n && a < t ? 0 : i <= n && o <= e || a >= t && o >= e ? i - n - s : a > t && o < e || i < n && o > e ? a - t + r : 0, fZ = (n) => { + const t = n.parentElement; + return t ?? (n.getRootNode().host || null); +}, t$ = (n, t) => { + var e, s, r, i; + if (typeof document > "u") return []; + const { scrollMode: a, block: o, inline: c, boundary: u, skipOverflowHiddenElements: f } = t, p = typeof u == "function" ? u : (G) => G !== u; + if (!aS(n)) throw new TypeError("Invalid target"); + const g = document.scrollingElement || document.documentElement, y = []; + let v = n; + for (; aS(v) && p(v); ) { + if (v = fZ(v), v === g) { + y.push(v); + break; + } + v != null && v === document.body && Pm(v) && !Pm(document.documentElement) || v != null && Pm(v, f) && y.push(v); + } + const b = (s = (e = window.visualViewport) == null ? void 0 : e.width) != null ? s : innerWidth, w = (i = (r = window.visualViewport) == null ? void 0 : r.height) != null ? i : innerHeight, { scrollX: E, scrollY: x } = window, { height: C, width: _, top: k, right: A, bottom: T, left: N } = n.getBoundingClientRect(), { top: $, right: D, bottom: V, left: j } = ((G) => { + const q = window.getComputedStyle(G); + return { top: parseFloat(q.scrollMarginTop) || 0, right: parseFloat(q.scrollMarginRight) || 0, bottom: parseFloat(q.scrollMarginBottom) || 0, left: parseFloat(q.scrollMarginLeft) || 0 }; + })(n); + let B = o === "start" || o === "nearest" ? k - $ : o === "end" ? T + V : k + C / 2 - $ + V, W = c === "center" ? N + _ / 2 - j + D : c === "end" ? A + D : N - j; + const J = []; + for (let G = 0; G < y.length; G++) { + const q = y[G], { height: H, width: L, top: X, right: te, bottom: Te, left: _e } = q.getBoundingClientRect(); + if (a === "if-needed" && k >= 0 && N >= 0 && T <= w && A <= b && (q === g && !Pm(q) || k >= X && T <= Te && N >= _e && A <= te)) return J; + const Je = getComputedStyle(q), Re = parseInt(Je.borderLeftWidth, 10), nt = parseInt(Je.borderTopWidth, 10), rt = parseInt(Je.borderRightWidth, 10), qe = parseInt(Je.borderBottomWidth, 10); + let Ye = 0, ee = 0; + const ge = "offsetWidth" in q ? q.offsetWidth - q.clientWidth - Re - rt : 0, ze = "offsetHeight" in q ? q.offsetHeight - q.clientHeight - nt - qe : 0, st = "offsetWidth" in q ? q.offsetWidth === 0 ? 0 : L / q.offsetWidth : 0, Pt = "offsetHeight" in q ? q.offsetHeight === 0 ? 0 : H / q.offsetHeight : 0; + if (g === q) Ye = o === "start" ? B : o === "end" ? B - w : o === "nearest" ? Nm(x, x + w, w, nt, qe, x + B, x + B + C, C) : B - w / 2, ee = c === "start" ? W : c === "center" ? W - b / 2 : c === "end" ? W - b : Nm(E, E + b, b, Re, rt, E + W, E + W + _, _), Ye = Math.max(0, Ye + x), ee = Math.max(0, ee + E); + else { + Ye = o === "start" ? B - X - nt : o === "end" ? B - Te + qe + ze : o === "nearest" ? Nm(X, Te, H, nt, qe + ze, B, B + C, C) : B - (X + H / 2) + ze / 2, ee = c === "start" ? W - _e - Re : c === "center" ? W - (_e + L / 2) + ge / 2 : c === "end" ? W - te + rt + ge : Nm(_e, te, L, Re, rt + ge, W, W + _, _); + const { scrollLeft: et, scrollTop: tn } = q; + Ye = Pt === 0 ? 0 : Math.max(0, Math.min(tn + Ye / Pt, q.scrollHeight - H / Pt + ze)), ee = st === 0 ? 0 : Math.max(0, Math.min(et + ee / st, q.scrollWidth - L / st + ge)), B += tn - Ye, W += et - ee; + } + J.push({ el: q, top: Ye, left: ee }); + } + return J; +}; +var n$ = '<path fill-rule="evenodd" clip-rule="evenodd" d="M15.0007 28.7923C15.0007 29.0152 14.9774 29.096 14.9339 29.1775C14.8903 29.259 14.8263 29.323 14.7449 29.3665C14.6634 29.4101 14.5826 29.4333 14.3597 29.4333H12.575C12.3521 29.4333 12.2713 29.4101 12.1898 29.3665C12.1083 29.323 12.0443 29.259 12.0008 29.1775C11.9572 29.096 11.934 29.0152 11.934 28.7923V12.2993L5.97496 12.3C5.75208 12.3 5.67125 12.2768 5.58977 12.2332C5.50829 12.1896 5.44434 12.1257 5.40077 12.0442C5.35719 11.9627 5.33398 11.8819 5.33398 11.659V9.87429C5.33398 9.65141 5.35719 9.57059 5.40077 9.48911C5.44434 9.40762 5.50829 9.34368 5.58977 9.3001C5.67125 9.25652 5.75208 9.23332 5.97496 9.23332H26.0263C26.2492 9.23332 26.33 9.25652 26.4115 9.3001C26.493 9.34368 26.557 9.40762 26.6005 9.48911C26.6441 9.57059 26.6673 9.65141 26.6673 9.87429V11.659C26.6673 11.8819 26.6441 11.9627 26.6005 12.0442C26.557 12.1257 26.493 12.1896 26.4115 12.2332C26.33 12.2768 26.2492 12.3 26.0263 12.3L20.067 12.2993L20.0673 28.7923C20.0673 29.0152 20.0441 29.096 20.0005 29.1775C19.957 29.259 19.893 29.323 19.8115 29.3665C19.73 29.4101 19.6492 29.4333 19.4263 29.4333H17.6416C17.4187 29.4333 17.3379 29.4101 17.2564 29.3665C17.175 29.323 17.111 29.259 17.0674 29.1775C17.0239 29.096 17.0007 29.0152 17.0007 28.7923L17 22.7663H15L15.0007 28.7923Z" fill="currentColor"/> <path d="M16.0007 7.89998C17.4734 7.89998 18.6673 6.70608 18.6673 5.23332C18.6673 3.76056 17.4734 2.56665 16.0007 2.56665C14.5279 2.56665 13.334 3.76056 13.334 5.23332C13.334 6.70608 14.5279 7.89998 16.0007 7.89998Z" fill="currentColor"/>', s$ = '<path d="M5.33334 6.00001C5.33334 5.63182 5.63181 5.33334 6 5.33334H26C26.3682 5.33334 26.6667 5.63182 26.6667 6.00001V20.6667C26.6667 21.0349 26.3682 21.3333 26 21.3333H23.7072C23.4956 21.3333 23.2966 21.233 23.171 21.0628L22.1859 19.7295C21.8607 19.2894 22.1749 18.6667 22.7221 18.6667H23.3333C23.7015 18.6667 24 18.3682 24 18V8.66668C24 8.29849 23.7015 8.00001 23.3333 8.00001H8.66667C8.29848 8.00001 8 8.29849 8 8.66668V18C8 18.3682 8.29848 18.6667 8.66667 18.6667H9.29357C9.84072 18.6667 10.1549 19.2894 9.82976 19.7295L8.84467 21.0628C8.71898 21.233 8.52 21.3333 8.30848 21.3333H6C5.63181 21.3333 5.33334 21.0349 5.33334 20.6667V6.00001Z" fill="currentColor"/> <path d="M8.78528 25.6038C8.46013 26.0439 8.77431 26.6667 9.32147 26.6667L22.6785 26.6667C23.2256 26.6667 23.5398 26.0439 23.2146 25.6038L16.5358 16.5653C16.2693 16.2046 15.73 16.2047 15.4635 16.5653L8.78528 25.6038Z" fill="currentColor"/>', e1 = '<path d="M17.4853 18.9093C17.4853 19.0281 17.6289 19.0875 17.7129 19.0035L22.4185 14.2979C22.6788 14.0376 23.1009 14.0376 23.3613 14.2979L24.7755 15.7122C25.0359 15.9725 25.0359 16.3946 24.7755 16.655L16.2902 25.1403C16.0299 25.4006 15.6078 25.4006 15.3474 25.1403L13.9332 23.726L13.9319 23.7247L6.86189 16.6547C6.60154 16.3944 6.60154 15.9723 6.86189 15.7119L8.2761 14.2977C8.53645 14.0373 8.95856 14.0373 9.21891 14.2977L13.9243 19.0031C14.0083 19.0871 14.1519 19.0276 14.1519 18.9088L14.1519 6.00004C14.1519 5.63185 14.4504 5.33337 14.8186 5.33337L16.8186 5.33337C17.1868 5.33337 17.4853 5.63185 17.4853 6.00004L17.4853 18.9093Z" fill="currentColor"/>', r$ = '<path d="M13.0908 14.3334C12.972 14.3334 12.9125 14.1898 12.9965 14.1058L17.7021 9.40022C17.9625 9.13987 17.9625 8.71776 17.7021 8.45741L16.2879 7.04319C16.0275 6.78284 15.6054 6.78284 15.3451 7.04319L6.8598 15.5285C6.59945 15.7888 6.59945 16.2109 6.8598 16.4713L8.27401 17.8855L8.27536 17.8868L15.3453 24.9568C15.6057 25.2172 16.0278 25.2172 16.2881 24.9568L17.7024 23.5426C17.9627 23.2822 17.9627 22.8601 17.7024 22.5998L12.9969 17.8944C12.9129 17.8104 12.9724 17.6668 13.0912 17.6668L26 17.6668C26.3682 17.6668 26.6667 17.3683 26.6667 17.0001V15.0001C26.6667 14.6319 26.3682 14.3334 26 14.3334L13.0908 14.3334Z" fill="currentColor"/>', t1 = '<path d="M14.1521 13.0929C14.1521 12.9741 14.0085 12.9147 13.9245 12.9987L9.21891 17.7043C8.95856 17.9646 8.53645 17.9646 8.2761 17.7043L6.86189 16.29C6.60154 16.0297 6.60154 15.6076 6.86189 15.3472L15.3472 6.86195C15.6075 6.6016 16.0296 6.6016 16.29 6.86195L17.7042 8.27616L17.7055 8.27751L24.7755 15.3475C25.0359 15.6078 25.0359 16.0299 24.7755 16.2903L23.3613 17.7045C23.1009 17.9649 22.6788 17.9649 22.4185 17.7045L17.7131 12.9991C17.6291 12.9151 17.4855 12.9746 17.4855 13.0934V26.0022C17.4855 26.3704 17.187 26.6688 16.8188 26.6688H14.8188C14.4506 26.6688 14.1521 26.3704 14.1521 26.0022L14.1521 13.0929Z" fill="currentColor"/>', i$ = '<path d="M16.6927 25.3346C16.3245 25.3346 16.026 25.0361 16.026 24.6679L16.026 7.3346C16.026 6.96641 16.3245 6.66794 16.6927 6.66794L18.6927 6.66794C19.0609 6.66794 19.3594 6.96642 19.3594 7.3346L19.3594 24.6679C19.3594 25.0361 19.0609 25.3346 18.6927 25.3346H16.6927Z" fill="currentColor"/> <path d="M24.026 25.3346C23.6578 25.3346 23.3594 25.0361 23.3594 24.6679L23.3594 7.3346C23.3594 6.96641 23.6578 6.66794 24.026 6.66794L26.026 6.66794C26.3942 6.66794 26.6927 6.96642 26.6927 7.3346V24.6679C26.6927 25.0361 26.3942 25.3346 26.026 25.3346H24.026Z" fill="currentColor"/> <path d="M5.48113 23.9407C5.38584 24.2963 5.59689 24.6619 5.95254 24.7572L7.88439 25.2748C8.24003 25.3701 8.60559 25.159 8.70089 24.8034L13.1871 8.06067C13.2824 7.70503 13.0713 7.33947 12.7157 7.24417L10.7838 6.72654C10.4282 6.63124 10.0626 6.8423 9.96733 7.19794L5.48113 23.9407Z" fill="currentColor"/>', a$ = '<path fill-rule="evenodd" clip-rule="evenodd" d="M24.9266 7.57992C25.015 7.60672 25.0886 7.64746 25.2462 7.80506L26.956 9.51488C27.1136 9.67248 27.1543 9.74604 27.1811 9.83447C27.2079 9.9229 27.2079 10.0133 27.1811 10.1018C27.1543 10.1902 27.1136 10.2638 26.956 10.4214L13.1822 24.1951C13.0246 24.3527 12.951 24.3935 12.8626 24.4203C12.797 24.4402 12.7304 24.4453 12.6642 24.4357L12.7319 24.4203C12.6435 24.4471 12.553 24.4471 12.4646 24.4203C12.3762 24.3935 12.3026 24.3527 12.145 24.1951L5.04407 17.0942C4.88647 16.9366 4.84573 16.863 4.81893 16.7746C4.79213 16.6862 4.79213 16.5957 4.81893 16.5073C4.84573 16.4189 4.88647 16.3453 5.04407 16.1877L6.7539 14.4779C6.9115 14.3203 6.98506 14.2796 7.07349 14.2528C7.16191 14.226 7.25235 14.226 7.34078 14.2528C7.42921 14.2796 7.50277 14.3203 7.66037 14.4779L12.6628 19.4808L24.3397 7.80506C24.4973 7.64746 24.5709 7.60672 24.6593 7.57992C24.7477 7.55311 24.8382 7.55311 24.9266 7.57992Z" fill="currentColor"/>', o$ = '<path d="M17.947 16.095C17.999 16.043 17.999 15.9585 17.947 15.9065L11.6295 9.58899C11.3691 9.32864 11.3691 8.90653 11.6295 8.64618L13.2323 7.04341C13.4926 6.78306 13.9147 6.78306 14.1751 7.04341L21.0289 13.8973C21.0392 13.9064 21.0493 13.9158 21.0591 13.9257L22.6619 15.5285C22.9223 15.7888 22.9223 16.2109 22.6619 16.4713L14.1766 24.9565C13.9163 25.2169 13.4942 25.2169 13.2338 24.9565L11.631 23.3538C11.3707 23.0934 11.3707 22.6713 11.631 22.411L17.947 16.095Z" fill="currentColor"/>', k2 = '<path fill-rule="evenodd" clip-rule="evenodd" d="M6 7C5.63181 7 5.33333 7.29848 5.33333 7.66667V14.8667C5.33333 14.9403 5.39361 14.9999 5.46724 15.0009C10.8844 15.0719 15.2614 19.449 15.3325 24.8661C15.3334 24.9397 15.393 25 15.4667 25H26C26.3682 25 26.6667 24.7015 26.6667 24.3333V7.66667C26.6667 7.29848 26.3682 7 26 7H6ZM17.0119 22.2294C17.0263 22.29 17.0802 22.3333 17.1425 22.3333H23.3333C23.7015 22.3333 24 22.0349 24 21.6667V10.3333C24 9.96514 23.7015 9.66667 23.3333 9.66667H8.66667C8.29848 9.66667 8 9.96514 8 10.3333V13.1909C8 13.2531 8.04332 13.3071 8.10392 13.3214C12.5063 14.3618 15.9715 17.827 17.0119 22.2294Z" fill="currentColor"/> <path d="M13.2 25C13.2736 25 13.3334 24.9398 13.3322 24.8661C13.2615 20.5544 9.77889 17.0718 5.46718 17.0011C5.39356 16.9999 5.33333 17.0597 5.33333 17.1333V18.8667C5.33333 18.9403 5.39348 18.9999 5.4671 19.0015C8.67465 19.0716 11.2617 21.6587 11.3319 24.8662C11.3335 24.9399 11.393 25 11.4667 25H13.2Z" fill="currentColor"/> <path d="M5.33333 21.1333C5.33333 21.0597 5.39332 20.9998 5.46692 21.0022C7.57033 21.0712 9.26217 22.763 9.33114 24.8664C9.33356 24.94 9.27364 25 9.2 25H6C5.63181 25 5.33333 24.7015 5.33333 24.3333V21.1333Z" fill="currentColor"/>', pZ = /* @__PURE__ */ Object.freeze({ + __proto__: null, + default: k2 +}), n1 = '<path d="M8 28.0003C8 27.6321 8.29848 27.3336 8.66667 27.3336H23.3333C23.7015 27.3336 24 27.6321 24 28.0003V29.3336C24 29.7018 23.7015 30.0003 23.3333 30.0003H8.66667C8.29848 30.0003 8 29.7018 8 29.3336V28.0003Z" fill="currentColor"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M4.66602 6.66699C4.29783 6.66699 3.99935 6.96547 3.99935 7.33366V24.667C3.99935 25.0352 4.29783 25.3337 4.66602 25.3337H27.3327C27.7009 25.3337 27.9994 25.0352 27.9994 24.667V7.33366C27.9994 6.96547 27.7009 6.66699 27.3327 6.66699H4.66602ZM8.66659 21.3333C8.2984 21.3333 7.99992 21.0349 7.99992 20.6667V11.3333C7.99992 10.9651 8.2984 10.6667 8.66659 10.6667H13.9999C14.3681 10.6667 14.6666 10.9651 14.6666 11.3333V12.6667C14.6666 13.0349 14.3681 13.3333 13.9999 13.3333H10.7999C10.7263 13.3333 10.6666 13.393 10.6666 13.4667V18.5333C10.6666 18.607 10.7263 18.6667 10.7999 18.6667H13.9999C14.3681 18.6667 14.6666 18.9651 14.6666 19.3333V20.6667C14.6666 21.0349 14.3681 21.3333 13.9999 21.3333H8.66659ZM17.9999 21.3333C17.6317 21.3333 17.3333 21.0349 17.3333 20.6667V11.3333C17.3333 10.9651 17.6317 10.6667 17.9999 10.6667H23.3333C23.7014 10.6667 23.9999 10.9651 23.9999 11.3333V12.6667C23.9999 13.0349 23.7014 13.3333 23.3333 13.3333H20.1333C20.0596 13.3333 19.9999 13.393 19.9999 13.4667V18.5333C19.9999 18.607 20.0596 18.6667 20.1333 18.6667H23.3333C23.7014 18.6667 23.9999 18.9651 23.9999 19.3333V20.6667C23.9999 21.0349 23.7014 21.3333 23.3333 21.3333H17.9999Z" fill="currentColor"/>', rg = '<path fill-rule="evenodd" clip-rule="evenodd" d="M4.6661 6.66699C4.29791 6.66699 3.99943 6.96547 3.99943 7.33366V24.667C3.99943 25.0352 4.29791 25.3337 4.6661 25.3337H27.3328C27.701 25.3337 27.9994 25.0352 27.9994 24.667V7.33366C27.9994 6.96547 27.701 6.66699 27.3328 6.66699H4.6661ZM8.66667 21.3333C8.29848 21.3333 8 21.0349 8 20.6667V11.3333C8 10.9651 8.29848 10.6667 8.66667 10.6667H14C14.3682 10.6667 14.6667 10.9651 14.6667 11.3333V12.6667C14.6667 13.0349 14.3682 13.3333 14 13.3333H10.8C10.7264 13.3333 10.6667 13.393 10.6667 13.4667V18.5333C10.6667 18.607 10.7264 18.6667 10.8 18.6667H14C14.3682 18.6667 14.6667 18.9651 14.6667 19.3333V20.6667C14.6667 21.0349 14.3682 21.3333 14 21.3333H8.66667ZM18 21.3333C17.6318 21.3333 17.3333 21.0349 17.3333 20.6667V11.3333C17.3333 10.9651 17.6318 10.6667 18 10.6667H23.3333C23.7015 10.6667 24 10.9651 24 11.3333V12.6667C24 13.0349 23.7015 13.3333 23.3333 13.3333H20.1333C20.0597 13.3333 20 13.393 20 13.4667V18.5333C20 18.607 20.0597 18.6667 20.1333 18.6667H23.3333C23.7015 18.6667 24 18.9651 24 19.3333V20.6667C24 21.0349 23.7015 21.3333 23.3333 21.3333H18Z" fill="currentColor"/>', l$ = '<path d="M14.2225 13.7867C14.3065 13.8706 14.4501 13.8112 14.4501 13.6924V5.99955C14.4501 5.63136 14.7486 5.33289 15.1167 5.33289H16.8501C17.2183 5.33289 17.5167 5.63136 17.5167 5.99955V13.6916C17.5167 13.8104 17.6604 13.8699 17.7444 13.7859L19.9433 11.5869C20.2037 11.3266 20.6258 11.3266 20.8861 11.5869L22.1118 12.8126C22.3722 13.0729 22.3722 13.4951 22.1118 13.7554L16.4549 19.4123C16.1946 19.6726 15.772 19.6731 15.5116 19.4128L9.85479 13.7559C9.59444 13.4956 9.59444 13.0734 9.85479 12.8131L11.0804 11.5874C11.3408 11.3271 11.7629 11.3271 12.0233 11.5874L14.2225 13.7867Z" fill="currentColor"/> <path d="M5.99998 20.267C5.63179 20.267 5.33331 20.5654 5.33331 20.9336V25.9997C5.33331 26.3678 5.63179 26.6663 5.99998 26.6663H26C26.3682 26.6663 26.6666 26.3678 26.6666 25.9997V20.9336C26.6666 20.5654 26.3682 20.267 26 20.267H24.2666C23.8985 20.267 23.6 20.5654 23.6 20.9336V22.9333C23.6 23.3014 23.3015 23.5999 22.9333 23.5999H9.06638C8.69819 23.5999 8.39972 23.3014 8.39972 22.9333V20.9336C8.39972 20.5654 8.10124 20.267 7.73305 20.267H5.99998Z" fill="currentColor"/>', c$ = '<path d="M16 20C18.2091 20 20 18.2092 20 16C20 13.7909 18.2091 12 16 12C13.7909 12 12 13.7909 12 16C12 18.2092 13.7909 20 16 20Z" fill="currentColor"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M28 16.0058C28 18.671 23.5 25.3334 16 25.3334C8.5 25.3334 4 18.6762 4 16.0058C4 13.3354 8.50447 6.66669 16 6.66669C23.4955 6.66669 28 13.3406 28 16.0058ZM25.3318 15.9934C25.3328 16.0017 25.3328 16.0099 25.3318 16.0182C25.3274 16.0571 25.3108 16.1728 25.2485 16.3708C25.1691 16.6229 25.0352 16.9462 24.8327 17.3216C24.4264 18.0749 23.7969 18.9398 22.9567 19.754C21.2791 21.3798 18.9148 22.6667 16 22.6667C13.0845 22.6667 10.7202 21.3805 9.04298 19.7557C8.20295 18.9419 7.57362 18.0773 7.16745 17.3241C6.96499 16.9486 6.83114 16.6252 6.75172 16.3729C6.67942 16.1431 6.66856 16.0243 6.66695 16.0066L6.66695 16.005C6.66859 15.9871 6.67951 15.8682 6.75188 15.6383C6.83145 15.3854 6.96554 15.0614 7.16831 14.6853C7.57507 13.9306 8.20514 13.0644 9.04577 12.249C10.7245 10.6208 13.0886 9.33335 16 9.33335C18.9108 9.33335 21.2748 10.6215 22.9539 12.2507C23.7947 13.0664 24.4249 13.933 24.8318 14.6877C25.0346 15.0639 25.1688 15.3878 25.2483 15.6404C25.3107 15.8386 25.3274 15.9545 25.3318 15.9934Z" fill="currentColor"/>', s1 = '<path d="M15.8747 8.11857C16.3148 7.79342 16.9375 8.10759 16.9375 8.65476V14.2575C16.9375 14.3669 17.0621 14.4297 17.1501 14.3647L25.6038 8.11857C26.0439 7.79342 26.6667 8.10759 26.6667 8.65476V23.3451C26.6667 23.8923 26.0439 24.2064 25.6038 23.8813L17.1501 17.6346C17.0621 17.5695 16.9375 17.6324 16.9375 17.7418L16.9375 23.3451C16.9375 23.8923 16.3147 24.2064 15.8747 23.8813L5.93387 16.5358C5.57322 16.2693 5.57323 15.7299 5.93389 15.4634L15.8747 8.11857Z" fill="currentColor"/>', r1 = '<path d="M16.1253 8.11866C15.6852 7.7935 15.0625 8.10768 15.0625 8.65484V14.2576C15.0625 14.367 14.9379 14.4298 14.8499 14.3648L6.39615 8.11866C5.95607 7.7935 5.33331 8.10768 5.33331 8.65484V23.3452C5.33331 23.8923 5.9561 24.2065 6.39617 23.8813L14.8499 17.6347C14.9379 17.5696 15.0625 17.6325 15.0625 17.7419L15.0625 23.3452C15.0625 23.8923 15.6853 24.2065 16.1253 23.8813L26.0661 16.5358C26.4268 16.2694 26.4268 15.73 26.0661 15.4635L16.1253 8.11866Z" fill="currentColor"/>', i1 = '<path d="M19.3334 13.3333C18.9652 13.3333 18.6667 13.0349 18.6667 12.6667L18.6667 7.33333C18.6667 6.96514 18.9652 6.66666 19.3334 6.66666H21.3334C21.7015 6.66666 22 6.96514 22 7.33333V9.86666C22 9.9403 22.0597 10 22.1334 10L24.6667 10C25.0349 10 25.3334 10.2985 25.3334 10.6667V12.6667C25.3334 13.0349 25.0349 13.3333 24.6667 13.3333L19.3334 13.3333Z" fill="currentColor"/> <path d="M13.3334 19.3333C13.3334 18.9651 13.0349 18.6667 12.6667 18.6667H7.33335C6.96516 18.6667 6.66669 18.9651 6.66669 19.3333V21.3333C6.66669 21.7015 6.96516 22 7.33335 22H9.86669C9.94032 22 10 22.0597 10 22.1333L10 24.6667C10 25.0349 10.2985 25.3333 10.6667 25.3333H12.6667C13.0349 25.3333 13.3334 25.0349 13.3334 24.6667L13.3334 19.3333Z" fill="currentColor"/> <path d="M18.6667 24.6667C18.6667 25.0349 18.9652 25.3333 19.3334 25.3333H21.3334C21.7015 25.3333 22 25.0349 22 24.6667V22.1333C22 22.0597 22.0597 22 22.1334 22H24.6667C25.0349 22 25.3334 21.7015 25.3334 21.3333V19.3333C25.3334 18.9651 25.0349 18.6667 24.6667 18.6667L19.3334 18.6667C18.9652 18.6667 18.6667 18.9651 18.6667 19.3333L18.6667 24.6667Z" fill="currentColor"/> <path d="M10.6667 13.3333H12.6667C13.0349 13.3333 13.3334 13.0349 13.3334 12.6667L13.3334 10.6667V7.33333C13.3334 6.96514 13.0349 6.66666 12.6667 6.66666H10.6667C10.2985 6.66666 10 6.96514 10 7.33333L10 9.86666C10 9.9403 9.94033 10 9.86669 10L7.33335 10C6.96516 10 6.66669 10.2985 6.66669 10.6667V12.6667C6.66669 13.0349 6.96516 13.3333 7.33335 13.3333L10.6667 13.3333Z" fill="currentColor"/>', a1 = '<path d="M25.3299 7.26517C25.2958 6.929 25.0119 6.66666 24.6667 6.66666H19.3334C18.9652 6.66666 18.6667 6.96514 18.6667 7.33333V9.33333C18.6667 9.70152 18.9652 10 19.3334 10L21.8667 10C21.9403 10 22 10.0597 22 10.1333V12.6667C22 13.0349 22.2985 13.3333 22.6667 13.3333H24.6667C25.0349 13.3333 25.3334 13.0349 25.3334 12.6667V7.33333C25.3334 7.31032 25.3322 7.28758 25.3299 7.26517Z" fill="currentColor"/> <path d="M22 21.8667C22 21.9403 21.9403 22 21.8667 22L19.3334 22C18.9652 22 18.6667 22.2985 18.6667 22.6667V24.6667C18.6667 25.0349 18.9652 25.3333 19.3334 25.3333L24.6667 25.3333C25.0349 25.3333 25.3334 25.0349 25.3334 24.6667V19.3333C25.3334 18.9651 25.0349 18.6667 24.6667 18.6667H22.6667C22.2985 18.6667 22 18.9651 22 19.3333V21.8667Z" fill="currentColor"/> <path d="M12.6667 22H10.1334C10.0597 22 10 21.9403 10 21.8667V19.3333C10 18.9651 9.70154 18.6667 9.33335 18.6667H7.33335C6.96516 18.6667 6.66669 18.9651 6.66669 19.3333V24.6667C6.66669 25.0349 6.96516 25.3333 7.33335 25.3333H12.6667C13.0349 25.3333 13.3334 25.0349 13.3334 24.6667V22.6667C13.3334 22.2985 13.0349 22 12.6667 22Z" fill="currentColor"/> <path d="M10 12.6667V10.1333C10 10.0597 10.0597 10 10.1334 10L12.6667 10C13.0349 10 13.3334 9.70152 13.3334 9.33333V7.33333C13.3334 6.96514 13.0349 6.66666 12.6667 6.66666H7.33335C6.96516 6.66666 6.66669 6.96514 6.66669 7.33333V12.6667C6.66669 13.0349 6.96516 13.3333 7.33335 13.3333H9.33335C9.70154 13.3333 10 13.0349 10 12.6667Z" fill="currentColor"/>', u$ = '<path fill-rule="evenodd" clip-rule="evenodd" d="M26.6667 5.99998C26.6667 5.63179 26.3682 5.33331 26 5.33331H11.3333C10.9651 5.33331 10.6667 5.63179 10.6667 5.99998V17.5714C10.6667 17.6694 10.5644 17.7342 10.4741 17.6962C9.91823 17.4625 9.30754 17.3333 8.66667 17.3333C6.08934 17.3333 4 19.4226 4 22C4 24.5773 6.08934 26.6666 8.66667 26.6666C11.244 26.6666 13.3333 24.5773 13.3333 22V8.66665C13.3333 8.29846 13.6318 7.99998 14 7.99998L23.3333 7.99998C23.7015 7.99998 24 8.29846 24 8.66665V14.9048C24 15.0027 23.8978 15.0675 23.8075 15.0296C23.2516 14.7958 22.6409 14.6666 22 14.6666C19.4227 14.6666 17.3333 16.756 17.3333 19.3333C17.3333 21.9106 19.4227 24 22 24C24.5773 24 26.6667 21.9106 26.6667 19.3333V5.99998ZM22 21.3333C23.1046 21.3333 24 20.4379 24 19.3333C24 18.2287 23.1046 17.3333 22 17.3333C20.8954 17.3333 20 18.2287 20 19.3333C20 20.4379 20.8954 21.3333 22 21.3333ZM8.66667 24C9.77124 24 10.6667 23.1045 10.6667 22C10.6667 20.8954 9.77124 20 8.66667 20C7.5621 20 6.66667 20.8954 6.66667 22C6.66667 23.1045 7.5621 24 8.66667 24Z" fill="currentColor"/>', o1 = '<path d="M17.5091 24.6594C17.5091 25.2066 16.8864 25.5208 16.4463 25.1956L9.44847 20.0252C9.42553 20.0083 9.39776 19.9991 9.36923 19.9991H4.66667C4.29848 19.9991 4 19.7006 4 19.3325V12.6658C4 12.2976 4.29848 11.9991 4.66667 11.9991H9.37115C9.39967 11.9991 9.42745 11.99 9.45039 11.973L16.4463 6.8036C16.8863 6.47842 17.5091 6.79259 17.5091 7.33977L17.5091 24.6594Z" fill="currentColor"/> <path d="M28.8621 13.6422C29.1225 13.3818 29.1225 12.9597 28.8621 12.6994L27.9193 11.7566C27.659 11.4962 27.2368 11.4962 26.9765 11.7566L24.7134 14.0197C24.6613 14.0717 24.5769 14.0717 24.5248 14.0197L22.262 11.7568C22.0016 11.4964 21.5795 11.4964 21.3191 11.7568L20.3763 12.6996C20.116 12.9599 20.116 13.382 20.3763 13.6424L22.6392 15.9053C22.6913 15.9573 22.6913 16.0418 22.6392 16.0938L20.3768 18.3562C20.1165 18.6166 20.1165 19.0387 20.3768 19.299L21.3196 20.2419C21.58 20.5022 22.0021 20.5022 22.2624 20.2418L24.5248 17.9795C24.5769 17.9274 24.6613 17.9274 24.7134 17.9795L26.976 20.2421C27.2363 20.5024 27.6585 20.5024 27.9188 20.2421L28.8616 19.2992C29.122 19.0389 29.122 18.6168 28.8616 18.3564L26.599 16.0938C26.547 16.0418 26.547 15.9573 26.599 15.9053L28.8621 13.6422Z" fill="currentColor"/>', d$ = '<path d="M26.6009 16.0725C26.6009 16.424 26.4302 17.1125 25.9409 18.0213C25.4676 18.8976 24.7542 19.8715 23.8182 20.7783C21.9489 22.5905 19.2662 24.0667 15.9342 24.0667C12.6009 24.0667 9.91958 22.5915 8.04891 20.78C7.11424 19.8736 6.40091 18.9 5.92758 18.0236C5.43824 17.1149 5.26758 16.4257 5.26758 16.0725C5.26758 15.7193 5.43824 15.0293 5.92891 14.1193C6.40224 13.2416 7.11558 12.2665 8.05158 11.3587C9.92224 9.54398 12.6049 8.06665 15.9342 8.06665C19.2636 8.06665 21.9449 9.54505 23.8169 11.3604C24.7529 12.2687 25.4662 13.2441 25.9396 14.1216C26.4302 15.0317 26.6009 15.7209 26.6009 16.0725Z" stroke="currentColor" stroke-width="3"/> <path d="M15.9336 20.0667C18.1427 20.0667 19.9336 18.2758 19.9336 16.0667C19.9336 13.8575 18.1427 12.0667 15.9336 12.0667C13.7245 12.0667 11.9336 13.8575 11.9336 16.0667C11.9336 18.2758 13.7245 20.0667 15.9336 20.0667Z" fill="currentColor"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M27.2323 25.0624L6.93878 4.76886C6.78118 4.61126 6.70762 4.57052 6.61919 4.54372C6.53077 4.51692 6.44033 4.51691 6.3519 4.54372C6.26347 4.57052 6.18991 4.61126 6.03231 4.76886L4.77032 6.03085C4.61272 6.18845 4.57198 6.26201 4.54518 6.35044C4.51838 6.43887 4.51838 6.5293 4.54518 6.61773C4.57198 6.70616 4.61272 6.77972 4.77032 6.93732L25.0639 27.2308C25.2215 27.3884 25.295 27.4292 25.3834 27.456C25.4719 27.4828 25.5623 27.4828 25.6507 27.456C25.7392 27.4292 25.8127 27.3885 25.9703 27.2309L27.2323 25.9689C27.3899 25.8113 27.4307 25.7377 27.4575 25.6493C27.4843 25.5608 27.4843 25.4704 27.4575 25.382C27.4307 25.2935 27.3899 25.22 27.2323 25.0624Z" fill="currentColor"/>', l1 = '<path d="M8.66667 6.66667C8.29848 6.66667 8 6.96514 8 7.33333V24.6667C8 25.0349 8.29848 25.3333 8.66667 25.3333H12.6667C13.0349 25.3333 13.3333 25.0349 13.3333 24.6667V7.33333C13.3333 6.96514 13.0349 6.66667 12.6667 6.66667H8.66667Z" fill="currentColor"/> <path d="M19.3333 6.66667C18.9651 6.66667 18.6667 6.96514 18.6667 7.33333V24.6667C18.6667 25.0349 18.9651 25.3333 19.3333 25.3333H23.3333C23.7015 25.3333 24 25.0349 24 24.6667V7.33333C24 6.96514 23.7015 6.66667 23.3333 6.66667H19.3333Z" fill="currentColor"/>', c1 = '<path d="M5.33334 26V19.4667C5.33334 19.393 5.39304 19.3333 5.46668 19.3333H7.86668C7.94031 19.3333 8.00001 19.393 8.00001 19.4667V23.3333C8.00001 23.7015 8.29849 24 8.66668 24H23.3333C23.7015 24 24 23.7015 24 23.3333V8.66666C24 8.29847 23.7015 7.99999 23.3333 7.99999H19.4667C19.393 7.99999 19.3333 7.9403 19.3333 7.86666V5.46666C19.3333 5.39302 19.393 5.33333 19.4667 5.33333H26C26.3682 5.33333 26.6667 5.63181 26.6667 5.99999V26C26.6667 26.3682 26.3682 26.6667 26 26.6667H6.00001C5.63182 26.6667 5.33334 26.3682 5.33334 26Z" fill="currentColor"/> <path d="M14.0098 8.42359H10.806C10.6872 8.42359 10.6277 8.56721 10.7117 8.6512L16.5491 14.4886C16.8094 14.7489 16.8094 15.171 16.5491 15.4314L15.3234 16.657C15.0631 16.9174 14.641 16.9174 14.3806 16.657L8.63739 10.9138C8.55339 10.8298 8.40978 10.8893 8.40978 11.0081V14.0236C8.40978 14.3918 8.1113 14.6903 7.74311 14.6903H6.00978C5.64159 14.6903 5.34311 14.3918 5.34311 14.0236L5.34311 6.02359C5.34311 5.6554 5.64159 5.35692 6.00978 5.35692L14.0098 5.35692C14.378 5.35692 14.6764 5.6554 14.6764 6.02359V7.75692C14.6764 8.12511 14.378 8.42359 14.0098 8.42359Z" fill="currentColor"/>', u1 = '<path d="M16 15.3333C15.6318 15.3333 15.3333 15.6318 15.3333 16V20C15.3333 20.3682 15.6318 20.6667 16 20.6667H21.3333C21.7015 20.6667 22 20.3682 22 20V16C22 15.6318 21.7015 15.3333 21.3333 15.3333H16Z" fill="currentColor"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M5.33333 7.33334C5.33333 6.96515 5.63181 6.66667 5.99999 6.66667H26C26.3682 6.66667 26.6667 6.96515 26.6667 7.33334V24.6667C26.6667 25.0349 26.3682 25.3333 26 25.3333H5.99999C5.63181 25.3333 5.33333 25.0349 5.33333 24.6667V7.33334ZM7.99999 10C7.99999 9.63182 8.29847 9.33334 8.66666 9.33334H23.3333C23.7015 9.33334 24 9.63182 24 10V22C24 22.3682 23.7015 22.6667 23.3333 22.6667H8.66666C8.29847 22.6667 7.99999 22.3682 7.99999 22V10Z" fill="currentColor"/>', d1 = '<path d="M10.6667 6.6548C10.6667 6.10764 11.2894 5.79346 11.7295 6.11862L24.377 15.4634C24.7377 15.7298 24.7377 16.2692 24.3771 16.5357L11.7295 25.8813C11.2895 26.2065 10.6667 25.8923 10.6667 25.3451L10.6667 6.6548Z" fill="currentColor"/>', h$ = '<path d="M13.9213 5.53573C14.3146 5.45804 14.6666 5.76987 14.6666 6.17079V7.57215C14.6666 7.89777 14.4305 8.17277 14.114 8.24925C12.5981 8.61559 11.2506 9.41368 10.2091 10.506C9.98474 10.7414 9.62903 10.8079 9.34742 10.6453L8.14112 9.94885C7.79394 9.7484 7.69985 9.28777 7.96359 8.98585C9.48505 7.24409 11.5636 6.00143 13.9213 5.53573Z" fill="currentColor"/> <path d="M5.88974 12.5908C6.01805 12.2101 6.46491 12.0603 6.81279 12.2611L8.01201 12.9535C8.29379 13.1162 8.41396 13.4577 8.32238 13.7699C8.11252 14.4854 7.99998 15.2424 7.99998 16.0257C7.99998 16.809 8.11252 17.566 8.32238 18.2814C8.41396 18.5936 8.29378 18.9352 8.01201 19.0979L6.82742 19.7818C6.48051 19.9821 6.03488 19.8337 5.90521 19.4547C5.5345 18.3712 5.33331 17.2091 5.33331 16C5.33331 14.8078 5.5289 13.6613 5.88974 12.5908Z" fill="currentColor"/> <path d="M8.17106 22.0852C7.82291 22.2862 7.72949 22.7486 7.99532 23.0502C9.51387 24.773 11.5799 26.0017 13.9213 26.4642C14.3146 26.5419 14.6666 26.2301 14.6666 25.8291V24.4792C14.6666 24.1536 14.4305 23.8786 14.114 23.8021C12.5981 23.4358 11.2506 22.6377 10.2091 21.5453C9.98474 21.31 9.62903 21.2435 9.34742 21.4061L8.17106 22.0852Z" fill="currentColor"/> <path d="M17.3333 25.8291C17.3333 26.2301 17.6857 26.5418 18.079 26.4641C22.9748 25.4969 26.6666 21.1796 26.6666 16C26.6666 10.8204 22.9748 6.50302 18.079 5.5358C17.6857 5.4581 17.3333 5.76987 17.3333 6.17079V7.57215C17.3333 7.89777 17.5697 8.17282 17.8862 8.24932C21.3942 9.09721 24 12.2572 24 16.0257C24 19.7942 21.3942 22.9542 17.8862 23.802C17.5697 23.8785 17.3333 24.1536 17.3333 24.4792V25.8291Z" fill="currentColor"/> <path d="M14.3961 10.4163C13.9561 10.0911 13.3333 10.4053 13.3333 10.9525L13.3333 21.0474C13.3333 21.5946 13.9561 21.9087 14.3962 21.5836L21.2273 16.5359C21.5879 16.2694 21.5879 15.73 21.2273 15.4635L14.3961 10.4163Z" fill="currentColor"/>', f$ = '<path d="M15.6038 12.2147C16.0439 12.5399 16.6667 12.2257 16.6667 11.6786V10.1789C16.6667 10.1001 16.7351 10.0384 16.8134 10.0479C20.1116 10.4494 22.6667 13.2593 22.6667 16.6659C22.6667 20.3481 19.6817 23.3332 15.9995 23.3332C12.542 23.3332 9.69927 20.7014 9.36509 17.332C9.32875 16.9655 9.03371 16.6662 8.66548 16.6662L6.66655 16.6666C6.29841 16.6666 5.99769 16.966 6.02187 17.3334C6.36494 22.5454 10.7012 26.6667 16 26.6667C21.5228 26.6667 26 22.1895 26 16.6667C26 11.4103 21.9444 7.10112 16.7916 6.69757C16.7216 6.69209 16.6667 6.63396 16.6667 6.56372V4.98824C16.6667 4.44106 16.0439 4.12689 15.6038 4.45206L11.0765 7.79738C10.7159 8.06387 10.7159 8.60326 11.0766 8.86973L15.6038 12.2147Z" fill="currentColor"/>', p$ = '<path d="M16.6667 10.3452C16.6667 10.8924 16.0439 11.2066 15.6038 10.8814L11.0766 7.5364C10.7159 7.26993 10.7159 6.73054 11.0766 6.46405L15.6038 3.11873C16.0439 2.79356 16.6667 3.10773 16.6667 3.6549V5.22682C16.6667 5.29746 16.7223 5.35579 16.7927 5.36066C22.6821 5.76757 27.3333 10.674 27.3333 16.6667C27.3333 22.9259 22.2592 28 16 28C9.96483 28 5.03145 23.2827 4.68601 17.3341C4.66466 16.9665 4.96518 16.6673 5.33339 16.6673H7.3334C7.70157 16.6673 7.99714 16.9668 8.02743 17.3337C8.36638 21.4399 11.8064 24.6667 16 24.6667C20.4183 24.6667 24 21.085 24 16.6667C24 12.5225 20.8483 9.11428 16.8113 8.70739C16.7337 8.69957 16.6667 8.76096 16.6667 8.83893V10.3452Z" fill="currentColor"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M17.0879 19.679C17.4553 19.9195 17.8928 20.0398 18.4004 20.0398C18.9099 20.0398 19.3474 19.9205 19.7129 19.6818C20.0803 19.4413 20.3635 19.0938 20.5623 18.6392C20.7612 18.1847 20.8606 17.6373 20.8606 16.9972C20.8625 16.3608 20.764 15.8192 20.5652 15.3722C20.3663 14.9252 20.0822 14.5853 19.7129 14.3523C19.3455 14.1175 18.908 14 18.4004 14C17.8928 14 17.4553 14.1175 17.0879 14.3523C16.7224 14.5853 16.4402 14.9252 16.2413 15.3722C16.0443 15.8173 15.9449 16.3589 15.943 16.9972C15.9411 17.6354 16.0396 18.1818 16.2385 18.6364C16.4373 19.089 16.7205 19.4366 17.0879 19.679ZM19.1362 18.4262C18.9487 18.7349 18.7034 18.8892 18.4004 18.8892C18.1996 18.8892 18.0226 18.8211 17.8691 18.6847C17.7157 18.5464 17.5964 18.3372 17.5112 18.0568C17.4279 17.7765 17.3871 17.4233 17.389 16.9972C17.3909 16.3684 17.4847 15.9025 17.6703 15.5995C17.8559 15.2945 18.0993 15.1421 18.4004 15.1421C18.603 15.1421 18.7801 15.2093 18.9316 15.3438C19.0832 15.4782 19.2015 15.6828 19.2868 15.9574C19.372 16.2301 19.4146 16.5767 19.4146 16.9972C19.4165 17.6392 19.3237 18.1156 19.1362 18.4262Z" fill="currentColor"/> <path d="M13.7746 19.8978C13.8482 19.8978 13.9079 19.8381 13.9079 19.7644V14.2129C13.9079 14.1393 13.8482 14.0796 13.7746 14.0796H12.642C12.6171 14.0796 12.5927 14.0865 12.5716 14.0997L11.2322 14.9325C11.1931 14.9568 11.1693 14.9996 11.1693 15.0457V15.9497C11.1693 16.0539 11.2833 16.1178 11.3722 16.0635L12.464 15.396C12.4682 15.3934 12.473 15.3921 12.4779 15.3921C12.4926 15.3921 12.5045 15.404 12.5045 15.4187V19.7644C12.5045 19.8381 12.5642 19.8978 12.6378 19.8978H13.7746Z" fill="currentColor"/>', m$ = '<path d="M15.3333 10.3452C15.3333 10.8924 15.9561 11.2066 16.3962 10.8814L20.9234 7.5364C21.2841 7.26993 21.2841 6.73054 20.9235 6.46405L16.3962 3.11873C15.9561 2.79356 15.3333 3.10773 15.3333 3.6549V5.22682C15.3333 5.29746 15.2778 5.35579 15.2073 5.36066C9.31791 5.76757 4.66667 10.674 4.66667 16.6667C4.66667 22.9259 9.74078 28 16 28C22.0352 28 26.9686 23.2827 27.314 17.3341C27.3354 16.9665 27.0348 16.6673 26.6666 16.6673H24.6666C24.2984 16.6673 24.0029 16.9668 23.9726 17.3337C23.6336 21.4399 20.1937 24.6667 16 24.6667C11.5817 24.6667 8 21.085 8 16.6667C8 12.5225 11.1517 9.11428 15.1887 8.70739C15.2663 8.69957 15.3333 8.76096 15.3333 8.83893V10.3452Z" fill="currentColor"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M17.0879 19.679C17.4553 19.9195 17.8928 20.0398 18.4004 20.0398C18.9099 20.0398 19.3474 19.9205 19.7129 19.6818C20.0803 19.4413 20.3635 19.0938 20.5623 18.6392C20.7612 18.1847 20.8606 17.6373 20.8606 16.9972C20.8625 16.3608 20.764 15.8192 20.5652 15.3722C20.3663 14.9252 20.0822 14.5853 19.7129 14.3523C19.3455 14.1175 18.908 14 18.4004 14C17.8928 14 17.4553 14.1175 17.0879 14.3523C16.7224 14.5853 16.4402 14.9252 16.2413 15.3722C16.0443 15.8173 15.9449 16.3589 15.943 16.9972C15.9411 17.6354 16.0396 18.1818 16.2385 18.6364C16.4373 19.089 16.7205 19.4366 17.0879 19.679ZM19.1362 18.4262C18.9487 18.7349 18.7034 18.8892 18.4004 18.8892C18.1996 18.8892 18.0225 18.8211 17.8691 18.6847C17.7157 18.5464 17.5964 18.3372 17.5112 18.0568C17.4278 17.7765 17.3871 17.4233 17.389 16.9972C17.3909 16.3684 17.4847 15.9025 17.6703 15.5995C17.8559 15.2945 18.0992 15.1421 18.4004 15.1421C18.603 15.1421 18.7801 15.2093 18.9316 15.3438C19.0831 15.4782 19.2015 15.6828 19.2867 15.9574C19.372 16.2301 19.4146 16.5767 19.4146 16.9972C19.4165 17.6392 19.3237 18.1156 19.1362 18.4262Z" fill="currentColor"/> <path d="M13.7746 19.8978C13.8482 19.8978 13.9079 19.8381 13.9079 19.7644V14.2129C13.9079 14.1393 13.8482 14.0796 13.7746 14.0796H12.642C12.6171 14.0796 12.5927 14.0865 12.5716 14.0997L11.2322 14.9325C11.1931 14.9568 11.1693 14.9996 11.1693 15.0457V15.9497C11.1693 16.0539 11.2833 16.1178 11.3722 16.0635L12.464 15.396C12.4682 15.3934 12.473 15.3921 12.4779 15.3921C12.4926 15.3921 12.5045 15.404 12.5045 15.4187V19.7644C12.5045 19.8381 12.5642 19.8978 12.6378 19.8978H13.7746Z" fill="currentColor"/>', g$ = '<path fill-rule="evenodd" clip-rule="evenodd" d="M13.5722 5.33333C13.2429 5.33333 12.9629 5.57382 12.9132 5.89938L12.4063 9.21916C12.4 9.26058 12.3746 9.29655 12.3378 9.31672C12.2387 9.37118 12.1409 9.42779 12.0444 9.48648C12.0086 9.5083 11.9646 9.51242 11.9255 9.49718L8.79572 8.27692C8.48896 8.15732 8.14083 8.27958 7.9762 8.56472L5.5491 12.7686C5.38444 13.0538 5.45271 13.4165 5.70981 13.6223L8.33308 15.7225C8.3658 15.7487 8.38422 15.7887 8.38331 15.8306C8.38209 15.8867 8.38148 15.9429 8.38148 15.9993C8.38148 16.0558 8.3821 16.1121 8.38332 16.1684C8.38423 16.2102 8.36582 16.2503 8.33313 16.2765L5.7103 18.3778C5.45334 18.5836 5.38515 18.9462 5.54978 19.2314L7.97688 23.4352C8.14155 23.7205 8.48981 23.8427 8.79661 23.723L11.926 22.5016C11.9651 22.4864 12.009 22.4905 12.0449 22.5123C12.1412 22.5709 12.2388 22.6274 12.3378 22.6818C12.3745 22.7019 12.4 22.7379 12.4063 22.7793L12.9132 26.0993C12.9629 26.4249 13.2429 26.6654 13.5722 26.6654H18.4264C18.7556 26.6654 19.0356 26.425 19.0854 26.0995L19.5933 22.7801C19.5997 22.7386 19.6252 22.7027 19.6619 22.6825C19.7614 22.6279 19.8596 22.5711 19.9564 22.5121C19.9923 22.4903 20.0362 22.4862 20.0754 22.5015L23.2035 23.7223C23.5103 23.842 23.8585 23.7198 24.0232 23.4346L26.4503 19.2307C26.6149 18.9456 26.5467 18.583 26.2898 18.3771L23.6679 16.2766C23.6352 16.2504 23.6168 16.2104 23.6177 16.1685C23.619 16.1122 23.6196 16.0558 23.6196 15.9993C23.6196 15.9429 23.619 15.8866 23.6177 15.8305C23.6168 15.7886 23.6353 15.7486 23.668 15.7224L26.2903 13.623C26.5474 13.4172 26.6156 13.0544 26.451 12.7692L24.0239 8.56537C23.8592 8.28023 23.5111 8.15797 23.2043 8.27757L20.0758 9.49734C20.0367 9.51258 19.9927 9.50846 19.9569 9.48664C19.8599 9.42762 19.7616 9.37071 19.6618 9.31596C19.6251 9.2958 19.5997 9.25984 19.5933 9.21843L19.0854 5.89915C19.0356 5.57369 18.7556 5.33333 18.4264 5.33333H13.5722ZM16.0001 20.2854C18.3672 20.2854 20.2862 18.3664 20.2862 15.9993C20.2862 13.6322 18.3672 11.7132 16.0001 11.7132C13.6329 11.7132 11.714 13.6322 11.714 15.9993C11.714 18.3664 13.6329 20.2854 16.0001 20.2854Z" fill="currentColor"/>', ig = '<path d="M17.5091 24.6595C17.5091 25.2066 16.8864 25.5208 16.4463 25.1956L9.44847 20.0252C9.42553 20.0083 9.39776 19.9992 9.36923 19.9992H4.66667C4.29848 19.9992 4 19.7007 4 19.3325V12.6658C4 12.2976 4.29848 11.9992 4.66667 11.9992H9.37115C9.39967 11.9992 9.42745 11.99 9.45039 11.9731L16.4463 6.80363C16.8863 6.47845 17.5091 6.79262 17.5091 7.3398L17.5091 24.6595Z" fill="currentColor"/> <path d="M27.5091 9.33336C27.8773 9.33336 28.1758 9.63184 28.1758 10V22C28.1758 22.3682 27.8773 22.6667 27.5091 22.6667H26.1758C25.8076 22.6667 25.5091 22.3682 25.5091 22V10C25.5091 9.63184 25.8076 9.33336 26.1758 9.33336L27.5091 9.33336Z" fill="currentColor"/> <path d="M22.1758 12C22.544 12 22.8424 12.2985 22.8424 12.6667V19.3334C22.8424 19.7016 22.544 20 22.1758 20H20.8424C20.4743 20 20.1758 19.7016 20.1758 19.3334V12.6667C20.1758 12.2985 20.4743 12 20.8424 12H22.1758Z" fill="currentColor"/>', ag = '<path d="M17.5091 24.6594C17.5091 25.2066 16.8864 25.5207 16.4463 25.1956L9.44847 20.0252C9.42553 20.0083 9.39776 19.9991 9.36923 19.9991H4.66667C4.29848 19.9991 4 19.7006 4 19.3324V12.6658C4 12.2976 4.29848 11.9991 4.66667 11.9991H9.37115C9.39967 11.9991 9.42745 11.99 9.45039 11.973L16.4463 6.80358C16.8863 6.4784 17.5091 6.79258 17.5091 7.33975L17.5091 24.6594Z" fill="currentColor"/> <path d="M22.8424 12.6667C22.8424 12.2985 22.544 12 22.1758 12H20.8424C20.4743 12 20.1758 12.2985 20.1758 12.6667V19.3333C20.1758 19.7015 20.4743 20 20.8424 20H22.1758C22.544 20 22.8424 19.7015 22.8424 19.3333V12.6667Z" fill="currentColor"/>'; +const mZ = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + Component: yt, + DOMEvent: Nt, + EventsController: Dt, + EventsTarget: _2, + Icon$0: n$, + Icon$104: ig, + Icon$105: ag, + Icon$11: r$, + Icon$13: t1, + Icon$16: i$, + Icon$19: a$, + Icon$22: o$, + Icon$24: k2, + Icon$26: n1, + Icon$27: rg, + Icon$31: l$, + Icon$33: c$, + Icon$34: s1, + Icon$35: r1, + Icon$39: i1, + Icon$40: a1, + Icon$5: s$, + Icon$53: u$, + Icon$54: o1, + Icon$56: d$, + Icon$59: l1, + Icon$60: c1, + Icon$61: u1, + Icon$62: d1, + Icon$63: h$, + Icon$74: f$, + Icon$77: p$, + Icon$8: e1, + Icon$81: m$, + Icon$88: g$, + State: to, + ViewController: mr, + animationFrameThrottle: wl, + ariaBool: Sf, + camelToKebabCase: Wa, + chromecast: pZ, + composeRefs: Wt, + computed: za, + createContext: eo, + createReactComponent: vt, + createScope: qd, + deferredPromise: fy, + effect: Z, + fscreen: il, + functionDebounce: Ov, + functionThrottle: xl, + getScope: Up, + hasProvidedContext: Ha, + isArray: En, + isBoolean: zd, + isDOMNode: UN, + isFunction: Hs, + isKeyboardClick: Rv, + isKeyboardEvent: zp, + isMouseEvent: VN, + isNil: LN, + isNull: ii, + isNumber: zs, + isObject: jN, + isPointerEvent: Jw, + isString: Le, + isTouchEvent: of, + isUndefined: jn, + isWriteSignal: DN, + kebabToCamelCase: S2, + keysOf: QN, + listenEvent: dn, + method: Yn, + noop: cr, + onDispose: ft, + peek: pe, + prop: Kt, + provideContext: dr, + r: t$, + scoped: Dn, + setAttribute: Ze, + setStyle: Ps, + signal: He, + tick: ri, + toggleClass: qN, + untrack: Bd, + uppercaseFirstChar: rh, + useContext: Cn, + useReactContext: E2, + useReactScope: ih, + useSignal: gt, + useState: sh, + useStateContext: ah, + waitIdlePeriod: e$, + waitTimeout: JN, + wasEnterKeyPressed: BN +}, Symbol.toStringTag, { value: "Module" })); +function h1(n) { + return !Le(n) && "width" in n && "height" in n && zs(n.width) && zs(n.height); +} +const Se = typeof document > "u", gZ = Se ? "" : (navigator == null ? void 0 : navigator.userAgent.toLowerCase()) || "", T2 = !Se && /iphone|ipad|ipod|ios|crios|fxios/i.test(gZ), y$ = !Se && /(iphone|ipod)/gi.test((navigator == null ? void 0 : navigator.platform) || ""), v$ = !Se && !!window.chrome, py = !Se && (!!window.safari || T2); +function b$() { + return yZ() && Hs(screen.orientation.unlock); +} +function yZ() { + return !Se && !jn(window.screen.orientation) && !jn(window.screen.orientation.lock); +} +function w$(n, t) { + return Se ? !1 : (n || (n = document.createElement("audio")), n.canPlayType(t).length > 0); +} +function x$(n, t) { + return Se ? !1 : (n || (n = document.createElement("video")), n.canPlayType(t).length > 0); +} +function C$(n) { + return Se ? !1 : (n || (n = document.createElement("video")), n.canPlayType("application/vnd.apple.mpegurl").length > 0); +} +function _$(n) { + return Se ? !1 : !!document.pictureInPictureEnabled && !(n != null && n.disablePictureInPicture); +} +function S$(n) { + return Se ? !1 : Hs(n == null ? void 0 : n.webkitSupportsPresentationMode) && Hs(n == null ? void 0 : n.webkitSetPresentationMode); +} +async function vZ() { + const n = document.createElement("video"); + return n.volume = 0.5, await JN(0), n.volume === 0.5; +} +function bZ() { + return Se ? void 0 : (window == null ? void 0 : window.ManagedMediaSource) ?? (window == null ? void 0 : window.MediaSource) ?? (window == null ? void 0 : window.WebKitMediaSource); +} +function wZ() { + return Se ? void 0 : (window == null ? void 0 : window.SourceBuffer) ?? (window == null ? void 0 : window.WebKitSourceBuffer); +} +function A2() { + if (Se) return !1; + const n = bZ(); + if (jn(n)) return !1; + const t = n && Hs(n.isTypeSupported) && n.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"'), e = wZ(), s = jn(e) || !jn(e.prototype) && Hs(e.prototype.appendBuffer) && Hs(e.prototype.remove); + return !!t && !!s; +} +function E$() { + return A2(); +} +var fa; +class og { + constructor(t, e) { + S(this, fa); + En(t) ? P(this, fa, t) : !jn(t) && !jn(e) ? P(this, fa, [[t, e]]) : P(this, fa, []); + } + get length() { + return l(this, fa).length; + } + start(t) { + return l(this, fa)[t][0] ?? 1 / 0; + } + end(t) { + return l(this, fa)[t][1] ?? 1 / 0; + } +} +fa = new WeakMap(); +function lS(n) { + if (!n.length) return null; + let t = n.start(0); + for (let e = 1; e < n.length; e++) { + const s = n.start(e); + s < t && (t = s); + } + return t; +} +function Rl(n) { + if (!n.length) return null; + let t = n.end(0); + for (let e = 1; e < n.length; e++) { + const s = n.end(e); + s > t && (t = s); + } + return t; +} +function xZ(n) { + if (n.length <= 1) + return n; + n.sort((s, r) => s[0] - r[0]); + let t = [], e = n[0]; + for (let s = 1; s < n.length; s++) { + const r = n[s]; + e[1] >= r[0] - 1 ? e = [e[0], Math.max(e[1], r[1])] : (t.push(e), e = r); + } + return t.push(e), t; +} +function CZ(n, t, e) { + let s = t[0], r = t[1]; + return e < s ? [e, -1] : e === s ? t : s === -1 ? (t[0] = e, t) : (e > s && (t[1] = e, r === -1 && n.push(t)), xZ(n), t); +} +const _Z = /\.(m4a|m4b|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx|flac)($|\?)/i, SZ = /* @__PURE__ */ new Set([ + "audio/mpeg", + "audio/ogg", + "audio/3gp", + "audio/mp3", + "audio/webm", + "audio/flac", + "audio/m4a", + "audio/m4b", + "audio/mp4a", + "audio/mp4" +]), EZ = /\.(mp4|og[gv]|webm|mov|m4v)(#t=[,\d+]+)?($|\?)/i, kZ = /* @__PURE__ */ new Set([ + "video/mp4", + "video/webm", + "video/3gp", + "video/ogg", + "video/avi", + "video/mpeg" +]), TZ = /\.(m3u8)($|\?)/i, AZ = /\.(mpd)($|\?)/i, PZ = /* @__PURE__ */ new Set([ + // Apple sanctioned + "application/vnd.apple.mpegurl", + // Apple sanctioned for backwards compatibility + "audio/mpegurl", + // Very common + "audio/x-mpegurl", + // Very common + "application/x-mpegurl", + // Included for completeness + "video/x-mpegurl", + "video/mpegurl", + "application/mpegurl" +]), NZ = /* @__PURE__ */ new Set(["application/dash+xml"]); +function P2({ src: n, type: t }) { + return Le(n) ? _Z.test(n) || SZ.has(t) || n.startsWith("blob:") && t === "audio/object" : t === "audio/object"; +} +function N2(n) { + return Le(n.src) ? EZ.test(n.src) || kZ.has(n.type) || n.src.startsWith("blob:") && n.type === "video/object" || oh(n) && (Se || C$()) : n.type === "video/object"; +} +function oh({ src: n, type: t }) { + return Le(n) && TZ.test(n) || PZ.has(t); +} +function $2({ src: n, type: t }) { + return Le(n) && AZ.test(n) || NZ.has(t); +} +function $Z(n) { + return Le(n.src) && (P2(n) || N2(n) || oh(n)); +} +function RZ(n) { + return !Se && typeof window.MediaStream < "u" && n instanceof window.MediaStream; +} +function cne(n, t) { + const e = new URL(n); + for (const s of Object.keys(t)) + e.searchParams.set(s, t[s] + ""); + return e.toString(); +} +function lh(n, t = "preconnect") { + if (Se) return !1; + const e = document.querySelector(`link[href="${n}"]`); + if (!ii(e)) return !0; + const s = document.createElement("link"); + return s.rel = t, s.href = n, s.crossOrigin = "true", document.head.append(s), !0; +} +const $h = {}; +function IZ(n) { + if ($h[n]) return $h[n].promise; + const t = fy(), e = document.querySelector(`script[src="${n}"]`); + if (!ii(e)) + return t.resolve(), t.promise; + $h[n] = t; + const s = document.createElement("script"); + return s.src = n, s.onload = () => { + t.resolve(), delete $h[n]; + }, s.onerror = () => { + t.reject(), delete $h[n]; + }, setTimeout(() => document.head.append(s), 0), t.promise; +} +function cf(n) { + return n === "use-credentials" ? "include" : Le(n) ? "same-origin" : void 0; +} +function OZ({ + title: n, + src: t, + download: e +}) { + const s = zd(e) || e === "" ? t.src : Le(e) ? e : e == null ? void 0 : e.url; + return MZ({ url: s, src: t, download: e }) ? { + url: s, + name: !zd(e) && !Le(e) && (e == null ? void 0 : e.filename) || n.toLowerCase() || "media" + } : null; +} +function MZ({ + url: n, + src: t, + download: e +}) { + return Le(n) && (e && e !== !0 || P2(t) || N2(t)); +} +const DZ = Symbol(0), LZ = Symbol(0), jZ = Symbol(0), FZ = Symbol(0), VZ = Symbol(0), BZ = Symbol(0), UZ = Symbol(0), lt = { + crossOrigin: DZ, + readyState: LZ, + updateActiveCues: jZ, + canLoad: FZ, + onModeChange: VZ, + native: BZ, + nativeHLS: UZ +}; +function cS(n, t) { + return t >= n.startTime && t < n.endTime; +} +function R2(n, t, e) { + let s = null, r = Up(); + function i() { + const a = Le(t) ? [t] : t, o = n.toArray().find((c) => a.includes(c.kind) && c.mode === "showing"); + if (o !== s) { + if (!o) { + e(null), s = null; + return; + } + o.readyState == 2 ? e(o) : (e(null), Dn(() => { + const c = dn( + o, + "load", + () => { + e(o), c(); + }, + { once: !0 } + ); + }, r)), s = o; + } + } + return i(), dn(n, "mode-change", i); +} +var DS, LS, jS, FS, kf, pa, Fl, Tf, Vl, ns, ma, Nn, k$, f1, Hh, p1, m1, g1; +class Hd extends _2 { + constructor(e) { + super(); + S(this, Nn); + U(this, "src"); + U(this, "content"); + U(this, "type"); + U(this, "encoding"); + U(this, "id", ""); + U(this, "label", ""); + U(this, "language", ""); + U(this, "kind"); + U(this, "default", !1); + S(this, kf, !1); + S(this, pa, 0); + S(this, Fl, "disabled"); + S(this, Tf, {}); + S(this, Vl, []); + S(this, ns, []); + S(this, ma, []); + /** @internal */ + U(this, FS, 0); + /** @internal */ + U(this, jS); + /** @internal */ + U(this, LS, null); + /** @internal */ + U(this, DS, null); + for (const s of Object.keys(e)) this[s] = e[s]; + this.type || (this.type = "vtt"), !Se && e.content ? m(this, Nn, k$).call(this, e) : e.src || (this[lt.readyState] = 2); + } + static createId(e) { + return `vds-${e.type}-${e.kind}-${e.src ?? e.label ?? "?"}`; + } + get metadata() { + return l(this, Tf); + } + get regions() { + return l(this, Vl); + } + get cues() { + return l(this, ns); + } + get activeCues() { + return l(this, ma); + } + /** + * - 0: Not Loading + * - 1: Loading + * - 2: Ready + * - 3: Error + */ + get readyState() { + return this[lt.readyState]; + } + get mode() { + return l(this, Fl); + } + set mode(e) { + this.setMode(e); + } + addCue(e, s) { + var a; + let r = 0, i = l(this, ns).length; + for (r = 0; r < i && !(e.endTime <= l(this, ns)[r].startTime); r++) ; + r === i ? l(this, ns).push(e) : l(this, ns).splice(r, 0, e), e instanceof TextTrackCue || (a = this[lt.native]) == null || a.track.addCue(e), this.dispatchEvent(new Nt("add-cue", { detail: e, trigger: s })), cS(e, l(this, pa)) && this[lt.updateActiveCues](l(this, pa), s); + } + removeCue(e, s) { + var i; + const r = l(this, ns).indexOf(e); + if (r >= 0) { + const a = l(this, ma).includes(e); + l(this, ns).splice(r, 1), (i = this[lt.native]) == null || i.track.removeCue(e), this.dispatchEvent(new Nt("remove-cue", { detail: e, trigger: s })), a && this[lt.updateActiveCues](l(this, pa), s); + } + } + setMode(e, s) { + var r; + l(this, Fl) !== e && (P(this, Fl, e), e === "disabled" ? (P(this, ma, []), m(this, Nn, g1).call(this)) : this.readyState === 2 ? this[lt.updateActiveCues](l(this, pa), s) : m(this, Nn, f1).call(this), this.dispatchEvent(new Nt("mode-change", { detail: this, trigger: s })), (r = this[lt.onModeChange]) == null || r.call(this)); + } + /** @internal */ + [(FS = lt.readyState, jS = lt.crossOrigin, LS = lt.onModeChange, DS = lt.native, lt.updateActiveCues)](e, s) { + if (P(this, pa, e), this.mode === "disabled" || !l(this, ns).length) return; + const r = []; + for (let a = 0, o = l(this, ns).length; a < o; a++) { + const c = l(this, ns)[a]; + cS(c, e) && r.push(c); + } + let i = r.length !== l(this, ma).length; + if (!i) { + for (let a = 0; a < r.length; a++) + if (!l(this, ma).includes(r[a])) { + i = !0; + break; + } + } + P(this, ma, r), i && m(this, Nn, g1).call(this, s); + } + /** @internal */ + [lt.canLoad]() { + P(this, kf, !0), l(this, Fl) !== "disabled" && m(this, Nn, f1).call(this); + } +} +kf = new WeakMap(), pa = new WeakMap(), Fl = new WeakMap(), Tf = new WeakMap(), Vl = new WeakMap(), ns = new WeakMap(), ma = new WeakMap(), Nn = new WeakSet(), k$ = function(e) { + import("./prod-DTLJXtPo.js").then((s) => s.d).then(({ parseText: s, VTTCue: r, VTTRegion: i }) => { + !Le(e.content) || e.type === "json" ? (m(this, Nn, m1).call(this, e.content, r, i), this.readyState !== 3 && m(this, Nn, Hh).call(this)) : s(e.content, { type: e.type }).then(({ cues: a, regions: o }) => { + P(this, ns, a), P(this, Vl, o), m(this, Nn, Hh).call(this); + }); + }); +}, f1 = async function() { + var e, s; + if (!(!l(this, kf) || this[lt.readyState] > 0)) { + if (this[lt.readyState] = 1, this.dispatchEvent(new Nt("load-start")), !this.src) { + m(this, Nn, Hh).call(this); + return; + } + try { + const { parseResponse: r, VTTCue: i, VTTRegion: a } = await import("./prod-DTLJXtPo.js").then((u) => u.d), o = (e = this[lt.crossOrigin]) == null ? void 0 : e.call(this), c = fetch(this.src, { + headers: this.type === "json" ? { "Content-Type": "application/json" } : void 0, + credentials: cf(o) + }); + if (this.type === "json") + m(this, Nn, m1).call(this, await (await c).text(), i, a); + else { + const { errors: u, metadata: f, regions: p, cues: g } = await r(c, { + type: this.type, + encoding: this.encoding + }); + if (((s = u[0]) == null ? void 0 : s.code) === 0) + throw u[0]; + P(this, Tf, f), P(this, Vl, p), P(this, ns, g); + } + m(this, Nn, Hh).call(this); + } catch (r) { + m(this, Nn, p1).call(this, r); + } + } +}, Hh = function() { + if (this[lt.readyState] = 2, !this.src || this.type !== "vtt") { + const s = this[lt.native]; + if (s && !s.managed) + for (const r of l(this, ns)) s.track.addCue(r); + } + const e = new Nt("load"); + this[lt.updateActiveCues](l(this, pa), e), this.dispatchEvent(e); +}, p1 = function(e) { + this[lt.readyState] = 3, this.dispatchEvent(new Nt("error", { detail: e })); +}, m1 = function(e, s, r) { + try { + const { regions: i, cues: a } = zZ(e, s, r); + P(this, Vl, i), P(this, ns, a); + } catch (i) { + m(this, Nn, p1).call(this, i); + } +}, g1 = function(e) { + this.dispatchEvent(new Nt("cue-change", { trigger: e })); +}; +const qZ = /captions|subtitles/; +function As(n) { + return qZ.test(n.kind); +} +function zZ(n, t, e) { + const s = Le(n) ? JSON.parse(n) : n; + let r = [], i = []; + return s.regions && e && (r = s.regions.map((a) => Object.assign(new e(), a))), (s.cues || En(s)) && (i = (En(s) ? s : s.cues).filter((a) => zs(a.startTime) && zs(a.endTime)).map((a) => Object.assign(new t(0, 0, ""), a))), { regions: r, cues: i }; +} +const Wp = new to({ + artist: "", + artwork: null, + audioTrack: null, + audioTracks: [], + autoPlay: !1, + autoPlayError: null, + audioGain: null, + buffered: new og(), + canLoad: !1, + canLoadPoster: !1, + canFullscreen: !1, + canOrientScreen: b$(), + canPictureInPicture: !1, + canPlay: !1, + clipStartTime: 0, + clipEndTime: 0, + controls: !1, + get iOSControls() { + return y$ && this.mediaType === "video" && (!this.playsInline || !il.fullscreenEnabled && this.fullscreen); + }, + get nativeControls() { + return this.controls || this.iOSControls; + }, + controlsVisible: !1, + get controlsHidden() { + return !this.controlsVisible; + }, + crossOrigin: null, + ended: !1, + error: null, + fullscreen: !1, + get loop() { + return this.providedLoop || this.userPrefersLoop; + }, + logLevel: "silent", + mediaType: "unknown", + muted: !1, + paused: !0, + played: new og(), + playing: !1, + playsInline: !1, + pictureInPicture: !1, + preload: "metadata", + playbackRate: 1, + qualities: [], + quality: null, + autoQuality: !1, + canSetQuality: !0, + canSetPlaybackRate: !0, + canSetVolume: !1, + canSetAudioGain: !1, + seekable: new og(), + seeking: !1, + source: { src: "", type: "" }, + sources: [], + started: !1, + textTracks: [], + textTrack: null, + get hasCaptions() { + return this.textTracks.filter(As).length > 0; + }, + volume: 1, + waiting: !1, + realCurrentTime: 0, + get currentTime() { + return this.ended ? this.duration : this.clipStartTime > 0 ? Math.max(0, Math.min(this.realCurrentTime - this.clipStartTime, this.duration)) : this.realCurrentTime; + }, + providedDuration: -1, + intrinsicDuration: 0, + get duration() { + return this.seekableWindow; + }, + get title() { + return this.providedTitle || this.inferredTitle; + }, + get poster() { + return this.providedPoster || this.inferredPoster; + }, + get viewType() { + return this.providedViewType !== "unknown" ? this.providedViewType : this.inferredViewType; + }, + get streamType() { + return this.providedStreamType !== "unknown" ? this.providedStreamType : this.inferredStreamType; + }, + get currentSrc() { + return this.source; + }, + get bufferedStart() { + const n = lS(this.buffered) ?? 0; + return Math.max(n, this.clipStartTime); + }, + get bufferedEnd() { + const n = Rl(this.buffered) ?? 0; + return Math.min(this.seekableEnd, Math.max(0, n - this.clipStartTime)); + }, + get bufferedWindow() { + return Math.max(0, this.bufferedEnd - this.bufferedStart); + }, + get seekableStart() { + if (this.isLiveDVR && this.liveDVRWindow > 0) + return Math.max(0, this.seekableEnd - this.liveDVRWindow); + const n = lS(this.seekable) ?? 0; + return Math.max(n, this.clipStartTime); + }, + get seekableEnd() { + if (this.providedDuration > 0) return this.providedDuration; + const n = this.liveSyncPosition > 0 ? this.liveSyncPosition : this.canPlay ? Rl(this.seekable) ?? 1 / 0 : 0; + return this.clipEndTime > 0 ? Math.min(this.clipEndTime, n) : n; + }, + get seekableWindow() { + const n = this.seekableEnd - this.seekableStart; + return isNaN(n) ? 1 / 0 : Math.max(0, n); + }, + // ~~ remote playback ~~ + canAirPlay: !1, + canGoogleCast: !1, + remotePlaybackState: "disconnected", + remotePlaybackType: "none", + remotePlaybackLoader: null, + remotePlaybackInfo: null, + get isAirPlayConnected() { + return this.remotePlaybackType === "airplay" && this.remotePlaybackState === "connected"; + }, + get isGoogleCastConnected() { + return this.remotePlaybackType === "google-cast" && this.remotePlaybackState === "connected"; + }, + // ~~ responsive design ~~ + pointer: "fine", + orientation: "landscape", + width: 0, + height: 0, + mediaWidth: 0, + mediaHeight: 0, + lastKeyboardAction: null, + // ~~ user props ~~ + userBehindLiveEdge: !1, + // ~~ live props ~~ + liveEdgeTolerance: 10, + minLiveDVRWindow: 60, + get canSeek() { + return /unknown|on-demand|:dvr/.test(this.streamType) && Number.isFinite(this.duration) && (!this.isLiveDVR || this.duration >= this.liveDVRWindow); + }, + get live() { + return this.streamType.includes("live") || !Number.isFinite(this.duration); + }, + get liveEdgeStart() { + return this.live && Number.isFinite(this.seekableEnd) ? Math.max(0, this.seekableEnd - this.liveEdgeTolerance) : 0; + }, + get liveEdge() { + return this.live && (!this.canSeek || !this.userBehindLiveEdge && this.currentTime >= this.liveEdgeStart); + }, + get liveEdgeWindow() { + return this.live && Number.isFinite(this.seekableEnd) ? this.seekableEnd - this.liveEdgeStart : 0; + }, + get isLiveDVR() { + return /:dvr/.test(this.streamType); + }, + get liveDVRWindow() { + return Math.max(this.inferredLiveDVRWindow, this.minLiveDVRWindow); + }, + // ~~ internal props ~~ + autoPlaying: !1, + providedTitle: "", + inferredTitle: "", + providedLoop: !1, + userPrefersLoop: !1, + providedPoster: "", + inferredPoster: "", + inferredViewType: "unknown", + providedViewType: "unknown", + providedStreamType: "unknown", + inferredStreamType: "unknown", + liveSyncPosition: null, + inferredLiveDVRWindow: 0, + savedState: null +}), T$ = /* @__PURE__ */ new Set([ + "autoPlayError", + "autoPlaying", + "buffered", + "canPlay", + "error", + "paused", + "played", + "playing", + "seekable", + "seeking", + "waiting" +]), HZ = /* @__PURE__ */ new Set([ + ...T$, + "ended", + "inferredPoster", + "inferredStreamType", + "inferredTitle", + "intrinsicDuration", + "inferredLiveDVRWindow", + "liveSyncPosition", + "realCurrentTime", + "savedState", + "started", + "userBehindLiveEdge" +]); +function uS(n, t = !1) { + const e = t ? T$ : HZ; + Wp.reset(n, (s) => e.has(s)), ri(); +} +function A$(n, t) { + const e = n + t.clipStartTime(), s = Math.floor(n) === Math.floor(t.seekableStart()), r = Math.floor(e) === Math.floor(t.seekableEnd()); + return s ? t.seekableStart() : r ? t.seekableEnd() : t.isLiveDVR() && t.liveDVRWindow() > 0 && e < t.seekableEnd() - t.liveDVRWindow() ? t.bufferedStart() : Math.min(Math.max(t.seekableStart() + 0.1, e), t.seekableEnd() - 0.1); +} +const Gp = eo(); +function en() { + return Cn(Gp); +} +var Bl, Xs, Ru, ky, Ft, Xt, GZ; +class WZ { + constructor(t = void 0) { + S(this, Ft); + S(this, Bl, null); + S(this, Xs, null); + S(this, Ru, -1); + S(this, ky); + P(this, ky, t); + } + /** + * Set the target from which to dispatch media requests events from. The events should bubble + * up from this target to the player element. + * + * @example + * ```ts + * const button = document.querySelector('button'); + * remote.setTarget(button); + * ``` + */ + setTarget(t) { + P(this, Bl, t); + } + /** + * Returns the current player element. This method will attempt to find the player by + * searching up from either the given `target` or default target set via `remote.setTarget`. + * + * @example + * ```ts + * const player = remote.getPlayer(); + * ``` + */ + getPlayer(t) { + var e; + return l(this, Xs) ? l(this, Xs) : ((e = t ?? l(this, Bl)) == null || e.dispatchEvent( + new Nt("find-media-player", { + detail: (s) => void P(this, Xs, s), + bubbles: !0, + composed: !0 + }) + ), l(this, Xs)); + } + /** + * Set the current player element so the remote can support toggle methods such as + * `togglePaused` as they rely on the current media state. + */ + setPlayer(t) { + P(this, Xs, t); + } + /** + * Dispatch a request to start the media loading process. This will only work if the media + * player has been initialized with a custom loading strategy `load="custom">`. + * + * @docs {@link https://www.vidstack.io/docs/player/core-concepts/loading#load-strategies} + */ + startLoading(t) { + m(this, Ft, Xt).call(this, "media-start-loading", t); + } + /** + * Dispatch a request to start the poster loading process. This will only work if the media + * player has been initialized with a custom poster loading strategy `posterLoad="custom">`. + * + * @docs {@link https://www.vidstack.io/docs/player/core-concepts/loading#load-strategies} + */ + startLoadingPoster(t) { + m(this, Ft, Xt).call(this, "media-poster-start-loading", t); + } + /** + * Dispatch a request to connect to AirPlay. + * + * @see {@link https://www.apple.com/au/airplay} + */ + requestAirPlay(t) { + m(this, Ft, Xt).call(this, "media-airplay-request", t); + } + /** + * Dispatch a request to connect to Google Cast. + * + * @see {@link https://developers.google.com/cast/docs/overview} + */ + requestGoogleCast(t) { + m(this, Ft, Xt).call(this, "media-google-cast-request", t); + } + /** + * Dispatch a request to begin/resume media playback. + */ + play(t) { + m(this, Ft, Xt).call(this, "media-play-request", t); + } + /** + * Dispatch a request to pause media playback. + */ + pause(t) { + m(this, Ft, Xt).call(this, "media-pause-request", t); + } + /** + * Dispatch a request to set the media volume to mute (0). + */ + mute(t) { + m(this, Ft, Xt).call(this, "media-mute-request", t); + } + /** + * Dispatch a request to unmute the media volume and set it back to it's previous state. + */ + unmute(t) { + m(this, Ft, Xt).call(this, "media-unmute-request", t); + } + /** + * Dispatch a request to enter fullscreen. + * + * @docs {@link https://www.vidstack.io/docs/player/api/fullscreen#remote-control} + */ + enterFullscreen(t, e) { + m(this, Ft, Xt).call(this, "media-enter-fullscreen-request", e, t); + } + /** + * Dispatch a request to exit fullscreen. + * + * @docs {@link https://www.vidstack.io/docs/player/api/fullscreen#remote-control} + */ + exitFullscreen(t, e) { + m(this, Ft, Xt).call(this, "media-exit-fullscreen-request", e, t); + } + /** + * Dispatch a request to lock the screen orientation. + * + * @docs {@link https://www.vidstack.io/docs/player/screen-orientation#remote-control} + */ + lockScreenOrientation(t, e) { + m(this, Ft, Xt).call(this, "media-orientation-lock-request", e, t); + } + /** + * Dispatch a request to unlock the screen orientation. + * + * @docs {@link https://www.vidstack.io/docs/player/api/screen-orientation#remote-control} + */ + unlockScreenOrientation(t) { + m(this, Ft, Xt).call(this, "media-orientation-unlock-request", t); + } + /** + * Dispatch a request to enter picture-in-picture mode. + * + * @docs {@link https://www.vidstack.io/docs/player/api/picture-in-picture#remote-control} + */ + enterPictureInPicture(t) { + m(this, Ft, Xt).call(this, "media-enter-pip-request", t); + } + /** + * Dispatch a request to exit picture-in-picture mode. + * + * @docs {@link https://www.vidstack.io/docs/player/api/picture-in-picture#remote-control} + */ + exitPictureInPicture(t) { + m(this, Ft, Xt).call(this, "media-exit-pip-request", t); + } + /** + * Notify the media player that a seeking process is happening and to seek to the given `time`. + */ + seeking(t, e) { + m(this, Ft, Xt).call(this, "media-seeking-request", e, t); + } + /** + * Notify the media player that a seeking operation has completed and to seek to the given `time`. + * This is generally called after a series of `remote.seeking()` calls. + */ + seek(t, e) { + m(this, Ft, Xt).call(this, "media-seek-request", e, t); + } + seekToLiveEdge(t) { + m(this, Ft, Xt).call(this, "media-live-edge-request", t); + } + /** + * Dispatch a request to update the length of the media in seconds. + * + * @example + * ```ts + * remote.changeDuration(100); // 100 seconds + * ``` + */ + changeDuration(t, e) { + m(this, Ft, Xt).call(this, "media-duration-change-request", e, t); + } + /** + * Dispatch a request to update the clip start time. This is the time at which media playback + * should start at. + * + * @example + * ```ts + * remote.changeClipStart(100); // start at 100 seconds + * ``` + */ + changeClipStart(t, e) { + m(this, Ft, Xt).call(this, "media-clip-start-change-request", e, t); + } + /** + * Dispatch a request to update the clip end time. This is the time at which media playback + * should end at. + * + * @example + * ```ts + * remote.changeClipEnd(100); // end at 100 seconds + * ``` + */ + changeClipEnd(t, e) { + m(this, Ft, Xt).call(this, "media-clip-end-change-request", e, t); + } + /** + * Dispatch a request to update the media volume to the given `volume` level which is a value + * between 0 and 1. + * + * @docs {@link https://www.vidstack.io/docs/player/api/audio-gain#remote-control} + * @example + * ```ts + * remote.changeVolume(0); // 0% + * remote.changeVolume(0.05); // 5% + * remote.changeVolume(0.5); // 50% + * remote.changeVolume(0.75); // 70% + * remote.changeVolume(1); // 100% + * ``` + */ + changeVolume(t, e) { + m(this, Ft, Xt).call(this, "media-volume-change-request", e, Math.max(0, Math.min(1, t))); + } + /** + * Dispatch a request to change the current audio track. + * + * @example + * ```ts + * remote.changeAudioTrack(1); // track at index 1 + * ``` + */ + changeAudioTrack(t, e) { + m(this, Ft, Xt).call(this, "media-audio-track-change-request", e, t); + } + /** + * Dispatch a request to change the video quality. The special value `-1` represents auto quality + * selection. + * + * @example + * ```ts + * remote.changeQuality(-1); // auto + * remote.changeQuality(1); // quality at index 1 + * ``` + */ + changeQuality(t, e) { + m(this, Ft, Xt).call(this, "media-quality-change-request", e, t); + } + /** + * Request auto quality selection. + */ + requestAutoQuality(t) { + this.changeQuality(-1, t); + } + /** + * Dispatch a request to change the mode of the text track at the given index. + * + * @example + * ```ts + * remote.changeTextTrackMode(1, 'showing'); // track at index 1 + * ``` + */ + changeTextTrackMode(t, e, s) { + m(this, Ft, Xt).call(this, "media-text-track-change-request", s, { + index: t, + mode: e + }); + } + /** + * Dispatch a request to change the media playback rate. + * + * @example + * ```ts + * remote.changePlaybackRate(0.5); // Half the normal speed + * remote.changePlaybackRate(1); // Normal speed + * remote.changePlaybackRate(1.5); // 50% faster than normal + * remote.changePlaybackRate(2); // Double the normal speed + * ``` + */ + changePlaybackRate(t, e) { + m(this, Ft, Xt).call(this, "media-rate-change-request", e, t); + } + /** + * Dispatch a request to change the media audio gain. + * + * @example + * ```ts + * remote.changeAudioGain(1); // Disable audio gain + * remote.changeAudioGain(1.5); // 50% louder + * remote.changeAudioGain(2); // 100% louder + * ``` + */ + changeAudioGain(t, e) { + m(this, Ft, Xt).call(this, "media-audio-gain-change-request", e, t); + } + /** + * Dispatch a request to resume idle tracking on controls. + */ + resumeControls(t) { + m(this, Ft, Xt).call(this, "media-resume-controls-request", t); + } + /** + * Dispatch a request to pause controls idle tracking. Pausing tracking will result in the + * controls being visible until `remote.resumeControls()` is called. This method + * is generally used when building custom controls and you'd like to prevent the UI from + * disappearing. + * + * @example + * ```ts + * // Prevent controls hiding while menu is being interacted with. + * function onSettingsOpen() { + * remote.pauseControls(); + * } + * + * function onSettingsClose() { + * remote.resumeControls(); + * } + * ``` + */ + pauseControls(t) { + m(this, Ft, Xt).call(this, "media-pause-controls-request", t); + } + /** + * Dispatch a request to toggle the media playback state. + */ + togglePaused(t) { + const e = this.getPlayer(t == null ? void 0 : t.target); + e && (e.state.paused ? this.play(t) : this.pause(t)); + } + /** + * Dispatch a request to toggle the controls visibility. + */ + toggleControls(t) { + const e = this.getPlayer(t == null ? void 0 : t.target); + e && (e.controls.showing ? e.controls.hide(0, t) : e.controls.show(0, t)); + } + /** + * Dispatch a request to toggle the media muted state. + */ + toggleMuted(t) { + const e = this.getPlayer(t == null ? void 0 : t.target); + e && (e.state.muted ? this.unmute(t) : this.mute(t)); + } + /** + * Dispatch a request to toggle the media fullscreen state. + * + * @docs {@link https://www.vidstack.io/docs/player/api/fullscreen#remote-control} + */ + toggleFullscreen(t, e) { + const s = this.getPlayer(e == null ? void 0 : e.target); + s && (s.state.fullscreen ? this.exitFullscreen(t, e) : this.enterFullscreen(t, e)); + } + /** + * Dispatch a request to toggle the media picture-in-picture mode. + * + * @docs {@link https://www.vidstack.io/docs/player/api/picture-in-picture#remote-control} + */ + togglePictureInPicture(t) { + const e = this.getPlayer(t == null ? void 0 : t.target); + e && (e.state.pictureInPicture ? this.exitPictureInPicture(t) : this.enterPictureInPicture(t)); + } + /** + * Show captions. + */ + showCaptions(t) { + const e = this.getPlayer(t == null ? void 0 : t.target); + if (!e) + return; + let s = e.state.textTracks, r = l(this, Ru); + (!s[r] || !As(s[r])) && (r = -1), r === -1 && (r = s.findIndex((i) => As(i) && i.default)), r === -1 && (r = s.findIndex((i) => As(i))), r >= 0 && this.changeTextTrackMode(r, "showing", t), P(this, Ru, -1); + } + /** + * Turn captions off. + */ + disableCaptions(t) { + const e = this.getPlayer(t == null ? void 0 : t.target); + if (!e) + return; + const s = e.state.textTracks, r = e.state.textTrack; + if (r) { + const i = s.indexOf(r); + this.changeTextTrackMode(i, "disabled", t), P(this, Ru, i); + } + } + /** + * Dispatch a request to toggle the current captions mode. + */ + toggleCaptions(t) { + const e = this.getPlayer(t == null ? void 0 : t.target); + e && (e.state.textTrack ? this.disableCaptions() : this.showCaptions()); + } + userPrefersLoopChange(t, e) { + m(this, Ft, Xt).call(this, "media-user-loop-change-request", e, t); + } +} +Bl = new WeakMap(), Xs = new WeakMap(), Ru = new WeakMap(), ky = new WeakMap(), Ft = new WeakSet(), Xt = function(t, e, s) { + var o, c; + const r = new Nt(t, { + bubbles: !0, + composed: !0, + cancelable: !0, + detail: s, + trigger: e + }); + let i = (e == null ? void 0 : e.target) || null; + i && i instanceof yt && (i = i.el), i = !i || i === document || i === window || i === document.body || ((o = l(this, Xs)) == null ? void 0 : o.el) && i instanceof Node && !l(this, Xs).el.contains(i) ? l(this, Bl) ?? ((c = this.getPlayer()) == null ? void 0 : c.el) : i ?? l(this, Bl), l(this, Xs) ? t === "media-play-request" && !l(this, Xs).state.canLoad ? i == null || i.dispatchEvent(r) : l(this, Xs).canPlayQueue.enqueue(t, () => i == null ? void 0 : i.dispatchEvent(r)) : i == null || i.dispatchEvent(r); +}, GZ = function(t) { +}; +var Sn; +class YZ { + constructor() { + U(this, "playerId", "vds-player"); + U(this, "mediaId", null); + S(this, Sn, { + volume: null, + muted: null, + audioGain: null, + time: null, + lang: null, + captions: null, + rate: null, + quality: null + }); + U(this, "saveTimeThrottled", xl(this.saveTime.bind(this), 1e3)); + } + async getVolume() { + return l(this, Sn).volume; + } + async setVolume(t) { + l(this, Sn).volume = t, this.save(); + } + async getMuted() { + return l(this, Sn).muted; + } + async setMuted(t) { + l(this, Sn).muted = t, this.save(); + } + async getTime() { + return l(this, Sn).time; + } + async setTime(t, e) { + const s = t < 0; + l(this, Sn).time = s ? null : t, s || e ? this.saveTime() : this.saveTimeThrottled(); + } + async getLang() { + return l(this, Sn).lang; + } + async setLang(t) { + l(this, Sn).lang = t, this.save(); + } + async getCaptions() { + return l(this, Sn).captions; + } + async setCaptions(t) { + l(this, Sn).captions = t, this.save(); + } + async getPlaybackRate() { + return l(this, Sn).rate; + } + async setPlaybackRate(t) { + l(this, Sn).rate = t, this.save(); + } + async getAudioGain() { + return l(this, Sn).audioGain; + } + async setAudioGain(t) { + l(this, Sn).audioGain = t, this.save(); + } + async getVideoQuality() { + return l(this, Sn).quality; + } + async setVideoQuality(t) { + l(this, Sn).quality = t, this.save(); + } + onChange(t, e, s = "vds-player") { + const r = s ? localStorage.getItem(s) : null, i = e ? localStorage.getItem(e) : null; + this.playerId = s, this.mediaId = e, P(this, Sn, { + volume: null, + muted: null, + audioGain: null, + lang: null, + captions: null, + rate: null, + quality: null, + ...r ? JSON.parse(r) : {}, + time: i ? +i : null + }); + } + save() { + if (Se || !this.playerId) return; + const t = JSON.stringify({ ...l(this, Sn), time: void 0 }); + localStorage.setItem(this.playerId, t); + } + saveTime() { + if (Se || !this.mediaId) return; + const t = (l(this, Sn).time ?? 0).toString(); + localStorage.setItem(this.mediaId, t); + } +} +Sn = new WeakMap(); +const KZ = Symbol(0), ZZ = Symbol(0), XZ = Symbol(0), QZ = Symbol(0), JZ = Symbol(0), eX = Symbol(0), tX = Symbol(0), nX = Symbol(0), sX = Symbol(0), bt = { + add: KZ, + remove: ZZ, + reset: XZ, + select: QZ, + readonly: JZ, + setReadonly: eX, + onReset: tX, + onRemove: nX, + onUserSelect: sX +}; +var VS; +class P$ extends _2 { + constructor() { + super(...arguments); + U(this, "items", []); + /** @internal */ + U(this, VS, !1); + } + get length() { + return this.items.length; + } + get readonly() { + return this[bt.readonly]; + } + /** + * Returns the index of the first occurrence of the given item, or -1 if it is not present. + */ + indexOf(e) { + return this.items.indexOf(e); + } + /** + * Returns an item matching the given `id`, or `null` if not present. + */ + getById(e) { + return e === "" ? null : this.items.find((s) => s.id === e) ?? null; + } + /** + * Transform list to an array. + */ + toArray() { + return [...this.items]; + } + [(VS = bt.readonly, Symbol.iterator)]() { + return this.items.values(); + } + /** @internal */ + [bt.add](e, s) { + const r = this.items.length; + "" + r in this || Object.defineProperty(this, r, { + get() { + return this.items[r]; + } + }), !this.items.includes(e) && (this.items.push(e), this.dispatchEvent(new Nt("add", { detail: e, trigger: s }))); + } + /** @internal */ + [bt.remove](e, s) { + var i; + const r = this.items.indexOf(e); + r >= 0 && ((i = this[bt.onRemove]) == null || i.call(this, e, s), this.items.splice(r, 1), this.dispatchEvent(new Nt("remove", { detail: e, trigger: s }))); + } + /** @internal */ + [bt.reset](e) { + var s; + for (const r of [...this.items]) this[bt.remove](r, e); + this.items = [], this[bt.setReadonly](!1, e), (s = this[bt.onReset]) == null || s.call(this); + } + /** @internal */ + [bt.setReadonly](e, s) { + this[bt.readonly] !== e && (this[bt.readonly] = e, this.dispatchEvent(new Nt("readonly-change", { detail: e, trigger: s }))); + } +} +const Rh = Symbol(0); +class N$ extends P$ { + get selected() { + return this.items.find((t) => t.selected) ?? null; + } + get selectedIndex() { + return this.items.findIndex((t) => t.selected); + } + /** @internal */ + [bt.onRemove](t, e) { + this[bt.select](t, !1, e); + } + /** @internal */ + [bt.add](t, e) { + t[Rh] = !1, Object.defineProperty(t, "selected", { + get() { + return this[Rh]; + }, + set: (s) => { + var r; + this.readonly || ((r = this[bt.onUserSelect]) == null || r.call(this), this[bt.select](t, s)); + } + }), super[bt.add](t, e); + } + /** @internal */ + [bt.select](t, e, s) { + if (e === (t == null ? void 0 : t[Rh])) return; + const r = this.selected; + t && (t[Rh] = e), (e ? r !== t : r === t) && (r && (r[Rh] = !1), this.dispatchEvent( + new Nt("change", { + detail: { + prev: r, + current: this.selected + }, + trigger: s + }) + )); + } +} +class rX extends N$ { +} +function ls(n, t = 2) { + return Number(n.toFixed(t)); +} +function y1(n) { + var t; + return ((t = String(n).split(".")[1]) == null ? void 0 : t.length) ?? 0; +} +function I2(n, t, e) { + return Math.max(n, Math.min(e, t)); +} +function dS(n, t) { + const e = t.composedPath()[0]; + return UN(e) && n.contains(e); +} +const v1 = /* @__PURE__ */ new Set(); +if (!Se) { + let n = function() { + for (const t of v1) + try { + t(); + } catch { + } + window.requestAnimationFrame(n); + }; + n(); +} +function iX(n) { + return v1.add(n), () => v1.delete(n); +} +function Yt(n, t, e) { + n.hasAttribute(t) || n.setAttribute(t, e); +} +function Cl(n, t) { + if (n.hasAttribute("aria-label") || n.hasAttribute("data-no-label")) return; + if (!Hs(t)) { + Ze(n, "aria-label", t); + return; + } + function e() { + Ze(n, "aria-label", t()); + } + Se ? e() : Z(e); +} +function $$(n) { + const t = getComputedStyle(n); + return t.display !== "none" && parseInt(t.opacity) > 0; +} +function aX(n) { + return !!n && ("checkVisibility" in n ? n.checkVisibility({ checkOpacity: !0, checkVisibilityCSS: !0 }) : $$(n)); +} +function R$(n, t) { + return iX(() => t(aX(n))); +} +function I$(n, t, e) { + for (; t; ) { + if (t === n) + return !0; + if (e != null && e(t)) + break; + t = t.parentElement; + } + return !1; +} +function hl(n, t) { + return new Dt(n).add("pointerup", (e) => { + e.button === 0 && !e.defaultPrevented && t(e); + }).add("keydown", (e) => { + Rv(e) && t(e); + }); +} +function O2(n) { + return of(n) && (n.touches.length > 1 || n.changedTouches.length > 1); +} +function O$(n) { + if (Se) return n(); + let t = Up(), e = window.requestAnimationFrame(() => { + Dn(n, t), e = -1; + }); + return () => void window.cancelAnimationFrame(e); +} +function M$(n, t, e, { + offsetVarName: s, + xOffset: r, + yOffset: i, + ...a +}) { + if (!n) return; + const o = e.replace(" ", "-").replace("-center", ""); + if (Ps(n, "visibility", t ? null : "hidden"), !t) return; + let c = e.includes("top"); + const u = (p) => e.includes("left") ? `calc(-1 * ${p})` : p, f = (p) => c ? `calc(-1 * ${p})` : p; + return iP(t, n, () => { + lP(t, n, { + placement: o, + middleware: [ + ...a.middleware ?? [], + oP({ fallbackAxisSideDirection: "start", crossAxis: !1 }), + aP() + ], + ...a + }).then(({ x: p, y: g, middlewareData: y }) => { + var b; + const v = !!((b = y.flip) != null && b.index); + c = e.includes(v ? "bottom" : "top"), n.setAttribute( + "data-placement", + v ? e.startsWith("top") ? e.replace("top", "bottom") : e.replace("bottom", "top") : e + ), Object.assign(n.style, { + top: `calc(${g + "px"} + ${f( + i ? i + "px" : `var(--${s}-y-offset, 0px)` + )})`, + left: `calc(${p + "px"} + ${u( + r ? r + "px" : `var(--${s}-x-offset, 0px)` + )})` + }); + }); + }); +} +function oX(n) { + return getComputedStyle(n).animationName !== "none"; +} +function my(n) { + return n instanceof HTMLElement; +} +var Af, ga, Pf, yo, Ar, D$, L$, b1, w1; +class lX { + constructor() { + S(this, Ar); + U(this, "priority", 0); + S(this, Af, !0); + S(this, ga, null); + S(this, Pf, null); + S(this, yo, /* @__PURE__ */ new Set()); + } + canRender(t, e) { + return !!e; + } + attach(t) { + P(this, ga, t), t && (t.textTracks.onchange = m(this, Ar, w1).bind(this)); + } + addTrack(t) { + l(this, yo).add(t), m(this, Ar, D$).call(this, t); + } + removeTrack(t) { + var e, s; + (s = (e = t[lt.native]) == null ? void 0 : e.remove) == null || s.call(e), t[lt.native] = null, l(this, yo).delete(t); + } + changeTrack(t) { + const e = t == null ? void 0 : t[lt.native]; + e && e.track.mode !== "showing" && (e.track.mode = "showing"), P(this, Pf, t); + } + setDisplay(t) { + P(this, Af, t), m(this, Ar, w1).call(this); + } + detach() { + l(this, ga) && (l(this, ga).textTracks.onchange = null); + for (const t of l(this, yo)) this.removeTrack(t); + l(this, yo).clear(), P(this, ga, null), P(this, Pf, null); + } +} +Af = new WeakMap(), ga = new WeakMap(), Pf = new WeakMap(), yo = new WeakMap(), Ar = new WeakSet(), D$ = function(t) { + var s; + if (!l(this, ga)) return; + const e = t[s = lt.native] ?? (t[s] = m(this, Ar, L$).call(this, t)); + my(e) && (l(this, ga).append(e), e.track.mode = e.default ? "showing" : "disabled"); +}, L$ = function(t) { + const e = document.createElement("track"), s = t.default || t.mode === "showing", r = t.src && t.type === "vtt"; + return e.id = t.id, e.src = r ? t.src : "", e.label = t.label, e.kind = t.kind, e.default = s, t.language && (e.srclang = t.language), s && !r && m(this, Ar, b1).call(this, t, e.track), e; +}, b1 = function(t, e) { + var s; + if (!(t.src && t.type === "vtt" || (s = e.cues) != null && s.length)) + for (const r of t.cues) e.addCue(r); +}, w1 = function(t) { + for (const e of l(this, yo)) { + const s = e[lt.native]; + if (!s) continue; + if (!l(this, Af)) { + s.track.mode = s.managed ? "hidden" : "disabled"; + continue; + } + const r = s.track.mode === "showing"; + r && m(this, Ar, b1).call(this, e, s.track), e.setMode(r ? "showing" : "disabled", t); + } +}; +var Ul, Iu, ql, Nf, $f, Qs, bi, Pn, j$, x1, F$, V$, B$, pu, U$; +class cX { + constructor(t) { + S(this, Pn); + S(this, Ul, null); + S(this, Iu); + S(this, ql, []); + S(this, Nf); + S(this, $f, !1); + S(this, Qs, null); + S(this, bi, null); + P(this, Nf, t); + const e = t.textTracks; + P(this, Iu, e), Z(m(this, Pn, j$).bind(this)), ft(m(this, Pn, U$).bind(this)), new Dt(e).add("add", m(this, Pn, V$).bind(this)).add("remove", m(this, Pn, B$).bind(this)).add("mode-change", m(this, Pn, pu).bind(this)); + } + add(t) { + l(this, ql).push(t), Bd(m(this, Pn, pu).bind(this)); + } + remove(t) { + t.detach(), l(this, ql).splice(l(this, ql).indexOf(t), 1), Bd(m(this, Pn, pu).bind(this)); + } + /** @internal */ + attachVideo(t) { + requestAnimationFrame(() => { + if (P(this, Ul, t), t) { + P(this, Qs, new lX()), l(this, Qs).attach(t); + for (const e of l(this, Iu)) m(this, Pn, x1).call(this, e); + } + m(this, Pn, pu).call(this); + }); + } +} +Ul = new WeakMap(), Iu = new WeakMap(), ql = new WeakMap(), Nf = new WeakMap(), $f = new WeakMap(), Qs = new WeakMap(), bi = new WeakMap(), Pn = new WeakSet(), j$ = function() { + const { nativeControls: t } = l(this, Nf).$state; + P(this, $f, t()), m(this, Pn, pu).call(this); +}, x1 = function(t) { + var e; + As(t) && ((e = l(this, Qs)) == null || e.addTrack(t)); +}, F$ = function(t) { + var e; + As(t) && ((e = l(this, Qs)) == null || e.removeTrack(t)); +}, V$ = function(t) { + m(this, Pn, x1).call(this, t.detail); +}, B$ = function(t) { + m(this, Pn, F$).call(this, t.detail); +}, pu = function() { + var s, r, i, a, o, c, u; + const t = l(this, Iu).selected; + if (l(this, Ul) && (l(this, $f) || t != null && t[lt.nativeHLS])) { + (s = l(this, bi)) == null || s.changeTrack(null), (r = l(this, Qs)) == null || r.setDisplay(!0), (i = l(this, Qs)) == null || i.changeTrack(t); + return; + } + if ((a = l(this, Qs)) == null || a.setDisplay(!1), (o = l(this, Qs)) == null || o.changeTrack(null), !t) { + (c = l(this, bi)) == null || c.changeTrack(null); + return; + } + const e = l(this, ql).sort((f, p) => f.priority - p.priority).find((f) => f.canRender(t, l(this, Ul))); + l(this, bi) !== e && ((u = l(this, bi)) == null || u.detach(), e == null || e.attach(l(this, Ul)), P(this, bi, e ?? null)), e == null || e.changeTrack(t); +}, U$ = function() { + var t, e; + (t = l(this, Qs)) == null || t.detach(), P(this, Qs, null), (e = l(this, bi)) == null || e.detach(), P(this, bi, null); +}; +var BS, zl, wi, xi, Ci, Rf, Ou, If, qi, q$, C1, _1; +class uX extends P$ { + constructor() { + super(); + S(this, qi); + S(this, zl, !1); + S(this, wi, {}); + S(this, xi, null); + S(this, Ci, null); + /** @internal */ + U(this, BS); + S(this, Rf, Ov(async () => { + var r; + if (!l(this, zl)) return; + !l(this, Ci) && l(this, xi) && P(this, Ci, await l(this, xi).getLang()); + const e = await ((r = l(this, xi)) == null ? void 0 : r.getCaptions()), s = [ + ["captions", "subtitles"], + "chapters", + "descriptions", + "metadata" + ]; + for (const i of s) { + const a = this.getByKind(i); + if (a.find((p) => p.mode === "showing")) continue; + const o = l(this, Ci) ? a.find((p) => p.language === l(this, Ci)) : null, c = En(i) ? l(this, wi)[i.find((p) => l(this, wi)[p]) || ""] : l(this, wi)[i], u = o ?? c, f = u && As(u); + u && (!f || e !== !1) && (u.mode = "showing", f && m(this, qi, C1).call(this, u)); + } + }, 300)); + S(this, Ou, null); + S(this, If, m(this, qi, q$).bind(this)); + } + get selected() { + return this.items.find((s) => s.mode === "showing" && As(s)) ?? null; + } + get selectedIndex() { + const e = this.selected; + return e ? this.indexOf(e) : -1; + } + get preferredLang() { + return l(this, Ci); + } + set preferredLang(e) { + P(this, Ci, e), m(this, qi, _1).call(this, e); + } + add(e, s) { + const r = e instanceof Hd, i = r ? e : new Hd(e), a = e.kind === "captions" || e.kind === "subtitles" ? "captions" : e.kind; + return l(this, wi)[a] && e.default && delete e.default, i.addEventListener("mode-change", l(this, If)), this[bt.add](i, s), i[lt.crossOrigin] = this[lt.crossOrigin], l(this, zl) && i[lt.canLoad](), e.default && (l(this, wi)[a] = i), l(this, Rf).call(this), this; + } + remove(e, s) { + if (P(this, Ou, e), !!this.items.includes(e)) + return e === l(this, wi)[e.kind] && delete l(this, wi)[e.kind], e.mode = "disabled", e[lt.onModeChange] = null, e.removeEventListener("mode-change", l(this, If)), this[bt.remove](e, s), P(this, Ou, null), this; + } + clear(e) { + for (const s of [...this.items]) + this.remove(s, e); + return this; + } + getByKind(e) { + const s = Array.isArray(e) ? e : [e]; + return this.items.filter((r) => s.includes(r.kind)); + } + /** @internal */ + [(BS = lt.crossOrigin, lt.canLoad)]() { + if (!l(this, zl)) { + for (const e of this.items) e[lt.canLoad](); + P(this, zl, !0), l(this, Rf).call(this); + } + } + setStorage(e) { + P(this, xi, e); + } +} +zl = new WeakMap(), wi = new WeakMap(), xi = new WeakMap(), Ci = new WeakMap(), Rf = new WeakMap(), Ou = new WeakMap(), If = new WeakMap(), qi = new WeakSet(), q$ = function(e) { + const s = e.detail; + if (l(this, xi) && As(s) && s !== l(this, Ou) && m(this, qi, C1).call(this, s), s.mode === "showing") { + const r = As(s) ? ["captions", "subtitles"] : [s.kind]; + for (const i of this.items) + i.mode === "showing" && i != s && r.includes(i.kind) && (i.mode = "disabled"); + } + this.dispatchEvent( + new Nt("mode-change", { + detail: e.detail, + trigger: e + }) + ); +}, C1 = function(e) { + var s, r; + e.mode !== "disabled" && m(this, qi, _1).call(this, e.language), (r = (s = l(this, xi)) == null ? void 0 : s.setCaptions) == null || r.call(s, e.mode === "showing"); +}, _1 = function(e) { + var s, r; + (r = (s = l(this, xi)) == null ? void 0 : s.setLang) == null || r.call(s, P(this, Ci, e)); +}; +const dX = Symbol(0), hX = Symbol(0), sr = { + setAuto: dX, + enableAuto: hX +}; +var US, Hl; +class fX extends N$ { + constructor() { + super(...arguments); + S(this, Hl, !1); + /** + * Configures quality switching: + * + * - `current`: Trigger an immediate quality level switch. This will abort the current fragment + * request if any, flush the whole buffer, and fetch fragment matching with current position + * and requested quality level. + * + * - `next`: Trigger a quality level switch for next fragment. This could eventually flush + * already buffered next fragment. + * + * - `load`: Set quality level for next loaded fragment. + * + * @see {@link https://www.vidstack.io/docs/player/api/video-quality#switch} + * @see {@link https://github.com/video-dev/hls.js/blob/master/docs/API.md#quality-switch-control-api} + */ + U(this, "switch", "current"); + /** @internal */ + U(this, US); + } + /** + * Whether automatic quality selection is enabled. + */ + get auto() { + return l(this, Hl) || this.readonly; + } + /** @internal */ + [(US = sr.enableAuto, bt.onUserSelect)]() { + this[sr.setAuto](!1); + } + /** @internal */ + [bt.onReset](e) { + this[sr.enableAuto] = void 0, this[sr.setAuto](!1, e); + } + /** + * Request automatic quality selection (if supported). This will be a no-op if the list is + * `readonly` as that already implies auto-selection. + */ + autoSelect(e) { + var s; + this.readonly || l(this, Hl) || !this[sr.enableAuto] || ((s = this[sr.enableAuto]) == null || s.call(this, e), this[sr.setAuto](!0, e)); + } + getBySrc(e) { + return this.items.find((s) => s.src === e); + } + /** @internal */ + [sr.setAuto](e, s) { + l(this, Hl) !== e && (P(this, Hl, e), this.dispatchEvent( + new Nt("auto-change", { + detail: e, + trigger: s + }) + )); + } +} +Hl = new WeakMap(); +function z$(n, t) { + return [...n].sort(pX); +} +function pX(n, t) { + return n.height === t.height ? (n.bitrate ?? 0) - (t.bitrate ?? 0) : n.height - t.height; +} +function mX(n) { + return !Se && n instanceof HTMLAudioElement; +} +function gX(n) { + return !Se && n instanceof HTMLVideoElement; +} +function yX(n) { + return mX(n) || gX(n); +} +class Kc extends mr { +} +const vX = { + togglePaused: "k Space", + toggleMuted: "m", + toggleFullscreen: "f", + togglePictureInPicture: "i", + toggleCaptions: "c", + seekBackward: "j J ArrowLeft", + seekForward: "l L ArrowRight", + volumeUp: "ArrowUp", + volumeDown: "ArrowDown", + speedUp: ">", + slowDown: "<" +}, Wh = /* @__PURE__ */ new Set(["Shift", "Alt", "Meta", "Ctrl"]), bX = 'button, [role="button"]', hS = 'input, textarea, select, [contenteditable], [role^="menuitem"], [role="timer"]'; +var Zn, $n, H$, W$, G$, Y$, lg, Wl, K$, ya, S1, Z$; +class wX extends Kc { + constructor(e) { + super(); + S(this, $n); + S(this, Zn); + S(this, Wl); + S(this, ya, null); + P(this, Zn, e); + } + onConnect() { + Z(m(this, $n, H$).bind(this)); + } +} +Zn = new WeakMap(), $n = new WeakSet(), H$ = function() { + const { keyDisabled: e, keyTarget: s } = this.$props; + if (e()) return; + const r = s() === "player" ? this.el : document, i = He(!1); + r === this.el ? new Dt(this.el).add("focusin", () => i.set(!0)).add("focusout", (a) => { + this.el.contains(a.target) || i.set(!1); + }) : (pe(i) || i.set(document.querySelector("[data-media-player]") === this.el), dn(document, "focusin", (a) => { + const o = a.composedPath().find((c) => c instanceof Element && c.localName === "media-player"); + o !== void 0 && i.set(this.el === o); + })), Z(() => { + i() && new Dt(r).add("keyup", m(this, $n, W$).bind(this)).add("keydown", m(this, $n, G$).bind(this)).add("keydown", m(this, $n, Y$).bind(this), { capture: !0 }); + }); +}, W$ = function(e) { + var a, o; + const s = document.activeElement; + if (!e.key || !this.$state.canSeek() || s != null && s.matches(hS)) + return; + let { method: r, value: i } = m(this, $n, lg).call(this, e); + if (!Le(i) && !En(i)) { + (a = i == null ? void 0 : i.onKeyUp) == null || a.call(i, { + event: e, + player: l(this, Zn).player, + remote: l(this, Zn).remote + }), (o = i == null ? void 0 : i.callback) == null || o.call(i, e, l(this, Zn).remote); + return; + } + if (r != null && r.startsWith("seek") && (e.preventDefault(), e.stopPropagation(), l(this, ya) ? (m(this, $n, S1).call(this, e, r === "seekForward"), P(this, ya, null)) : (l(this, Zn).remote.seek(l(this, Wl), e), P(this, Wl, void 0))), r != null && r.startsWith("volume")) { + const c = this.el.querySelector("[data-media-volume-slider]"); + c == null || c.dispatchEvent( + new KeyboardEvent("keyup", { + key: r === "volumeUp" ? "Up" : "Down", + shiftKey: e.shiftKey, + trigger: e + }) + ); + } +}, G$ = function(e) { + var o, c, u, f; + if (!e.key || Wh.has(e.key)) return; + const s = document.activeElement; + if (s != null && s.matches(hS) || Rv(e) && (s != null && s.matches(bX))) + return; + let { method: r, value: i } = m(this, $n, lg).call(this, e), a = !e.metaKey && /^[0-9]$/.test(e.key); + if (!Le(i) && !En(i) && !a) { + (o = i == null ? void 0 : i.onKeyDown) == null || o.call(i, { + event: e, + player: l(this, Zn).player, + remote: l(this, Zn).remote + }), (c = i == null ? void 0 : i.callback) == null || c.call(i, e, l(this, Zn).remote); + return; + } + if (!r && a && !_X(e)) { + e.preventDefault(), e.stopPropagation(), l(this, Zn).remote.seek(this.$state.duration() / 10 * Number(e.key), e); + return; + } + if (r) { + switch (e.preventDefault(), e.stopPropagation(), r) { + case "seekForward": + case "seekBackward": + m(this, $n, Z$).call(this, e, r, r === "seekForward"); + break; + case "volumeUp": + case "volumeDown": + const p = this.el.querySelector("[data-media-volume-slider]"); + if (p) + p.dispatchEvent( + new KeyboardEvent("keydown", { + key: r === "volumeUp" ? "Up" : "Down", + shiftKey: e.shiftKey, + trigger: e + }) + ); + else { + const y = e.shiftKey ? 0.1 : 0.05; + l(this, Zn).remote.changeVolume( + this.$state.volume() + (r === "volumeUp" ? +y : -y), + e + ); + } + break; + case "toggleFullscreen": + l(this, Zn).remote.toggleFullscreen("prefer-media", e); + break; + case "speedUp": + case "slowDown": + const g = this.$state.playbackRate(); + l(this, Zn).remote.changePlaybackRate( + Math.max(0.25, Math.min(2, g + (r === "speedUp" ? 0.25 : -0.25))), + e + ); + break; + default: + (f = (u = l(this, Zn).remote)[r]) == null || f.call(u, e); + } + this.$state.lastKeyboardAction.set({ + action: r, + event: e + }); + } +}, Y$ = function(e) { + yX(e.target) && m(this, $n, lg).call(this, e).method && e.preventDefault(); +}, lg = function(e) { + const s = { + ...this.$props.keyShortcuts(), + ...l(this, Zn).ariaKeys + }, r = Object.keys(s).find((i) => { + var u; + const a = s[i], o = En(a) ? a.join(" ") : Le(a) ? a : a == null ? void 0 : a.keys, c = (u = En(o) ? o : o == null ? void 0 : o.split(" ")) == null ? void 0 : u.map( + (f) => CX(f).replace(/Control/g, "Ctrl").split("+") + ); + return c == null ? void 0 : c.some((f) => { + const p = new Set(f.filter((g) => Wh.has(g))); + for (const g of Wh) { + const y = g.toLowerCase() + "Key"; + if (!p.has(g) && e[y]) + return !1; + } + return f.every((g) => Wh.has(g) ? e[g.toLowerCase() + "Key"] : e.key === g.replace("Space", " ")); + }); + }); + return { + method: r, + value: r ? s[r] : null + }; +}, Wl = new WeakMap(), K$ = function(e, s) { + const r = e.shiftKey ? 10 : 5; + return P(this, Wl, Math.max( + 0, + Math.min( + (l(this, Wl) ?? this.$state.currentTime()) + (s === "seekForward" ? +r : -r), + this.$state.duration() + ) + )); +}, ya = new WeakMap(), S1 = function(e, s) { + var r; + (r = l(this, ya)) == null || r.dispatchEvent( + new KeyboardEvent(e.type, { + key: s ? "Right" : "Left", + shiftKey: e.shiftKey, + trigger: e + }) + ); +}, Z$ = function(e, s, r) { + this.$state.canSeek() && (l(this, ya) || P(this, ya, this.el.querySelector("[data-media-time-slider]")), l(this, ya) ? m(this, $n, S1).call(this, e, r) : l(this, Zn).remote.seeking(m(this, $n, K$).call(this, e, s), e)); +}; +const xX = ["!", "@", "#", "$", "%", "^", "&", "*", "(", ")"]; +function CX(n) { + return n.replace(/Shift\+(\d)/g, (t, e) => xX[e - 1]); +} +function _X(n) { + for (const t of Wh) + if (n[t.toLowerCase() + "Key"]) + return !0; + return !1; +} +var Gl; +class SX extends mr { + constructor(e) { + super(); + S(this, Gl); + P(this, Gl, e); + } + onAttach(e) { + const { $props: s, ariaKeys: r } = en(), i = e.getAttribute("aria-keyshortcuts"); + if (i) { + r[l(this, Gl)] = i, Se || ft(() => { + delete r[l(this, Gl)]; + }); + return; + } + const a = s.keyShortcuts()[l(this, Gl)]; + if (a) { + const o = En(a) ? a.join(" ") : Le(a) ? a : a == null ? void 0 : a.keys; + e.setAttribute("aria-keyshortcuts", En(o) ? o.join(" ") : o); + } + } +} +Gl = new WeakMap(); +var Mu, va, Of, Du, vo, Lu, Vt, X$, Q$, J$, eR, tR, nR, sR, rR, cg, E1, Gh, k1; +class EX extends Kc { + constructor() { + super(...arguments); + S(this, Vt); + S(this, Mu, -2); + S(this, va, !1); + S(this, Of, He(!1)); + S(this, Du, He(!1)); + S(this, vo, null); + S(this, Lu, He(!0)); + /** + * The default amount of delay in milliseconds while media playback is progressing without user + * activity to indicate an idle state (i.e., hide controls). + * + * @defaultValue 2000 + */ + U(this, "defaultDelay", 2e3); + } + /** + * Whether controls can hide after a delay in user interaction. If this is false, controls will + * not hide and be user controlled. + */ + get canIdle() { + return l(this, Lu).call(this); + } + set canIdle(e) { + l(this, Lu).set(e); + } + /** + * Whether controls visibility should be toggled when the mouse enters and leaves the player + * container. + * + * @defaultValue false + */ + get hideOnMouseLeave() { + const { hideControlsOnMouseLeave: e } = this.$props; + return l(this, Of).call(this) || e(); + } + set hideOnMouseLeave(e) { + l(this, Of).set(e); + } + /** + * Whether media controls are currently visible. + */ + get showing() { + return this.$state.controlsVisible(); + } + /** + * Show controls. + */ + show(e = 0, s) { + m(this, Vt, cg).call(this), l(this, va) || m(this, Vt, Gh).call(this, !0, e, s); + } + /** + * Hide controls. + */ + hide(e = this.defaultDelay, s) { + m(this, Vt, cg).call(this), l(this, va) || m(this, Vt, Gh).call(this, !1, e, s); + } + /** + * Whether all idle tracking on controls should be paused until resumed again. + */ + pause(e) { + P(this, va, !0), m(this, Vt, cg).call(this), m(this, Vt, Gh).call(this, !0, 0, e); + } + resume(e) { + P(this, va, !1), !this.$state.paused() && m(this, Vt, Gh).call(this, !1, this.defaultDelay, e); + } + onConnect() { + Z(m(this, Vt, X$).bind(this)); + } +} +Mu = new WeakMap(), va = new WeakMap(), Of = new WeakMap(), Du = new WeakMap(), vo = new WeakMap(), Lu = new WeakMap(), Vt = new WeakSet(), X$ = function() { + const { viewType: e } = this.$state; + if (!this.el || !l(this, Lu).call(this)) return; + if (e() === "audio") { + this.show(); + return; + } + Z(m(this, Vt, Q$).bind(this)), Z(m(this, Vt, J$).bind(this)); + const s = m(this, Vt, eR).bind(this), r = m(this, Vt, tR).bind(this), i = m(this, Vt, nR).bind(this); + new Dt(this.el).add("can-play", (a) => this.show(0, a)).add("play", s).add("pause", r).add("end", i).add("auto-play-fail", r); +}, Q$ = function() { + if (!this.el) return; + const { started: e, pointer: s, paused: r } = this.$state; + if (!e() || s() !== "fine") return; + const i = new Dt(this.el), a = this.hideOnMouseLeave; + (!a || !l(this, Du).call(this)) && Z(() => { + r() || i.add("pointermove", m(this, Vt, E1).bind(this)); + }), a && i.add("mouseenter", m(this, Vt, sR).bind(this)).add("mouseleave", m(this, Vt, rR).bind(this)); +}, J$ = function() { + const { paused: e, started: s, autoPlayError: r } = this.$state; + if (e() || r() && !s()) return; + const i = m(this, Vt, E1).bind(this); + Z(() => { + if (!this.el) return; + const a = this.$state.pointer(), o = a === "coarse", c = new Dt(this.el), u = [o ? "touchend" : "pointerup", "keydown"]; + for (const f of u) + c.add(f, i, { passive: !1 }); + }); +}, eR = function(e) { + e.triggers.hasType("ended") || (this.show(0, e), this.hide(void 0, e)); +}, tR = function(e) { + this.show(0, e); +}, nR = function(e) { + const { loop: s } = this.$state; + s() && this.hide(0, e); +}, sR = function(e) { + l(this, Du).set(!1), this.show(0, e), this.hide(void 0, e); +}, rR = function(e) { + l(this, Du).set(!0), this.hide(0, e); +}, cg = function() { + window.clearTimeout(l(this, Mu)), P(this, Mu, -1); +}, E1 = function(e) { + var s; + // @ts-expect-error + e.MEDIA_GESTURE || l(this, va) || O2(e) || (zp(e) && (e.key === "Escape" ? ((s = this.el) == null || s.focus(), P(this, vo, null)) : l(this, vo) && (e.preventDefault(), requestAnimationFrame(() => { + var r; + (r = l(this, vo)) == null || r.focus(), P(this, vo, null); + }))), this.show(0, e), this.hide(this.defaultDelay, e)); +}, Gh = function(e, s, r) { + if (s === 0) { + m(this, Vt, k1).call(this, e, r); + return; + } + P(this, Mu, window.setTimeout(() => { + this.scope && m(this, Vt, k1).call(this, e && !l(this, va), r); + }, s)); +}, k1 = function(e, s) { + var r; + this.$state.controlsVisible() !== e && (this.$state.controlsVisible.set(e), !e && document.activeElement && ((r = this.el) != null && r.contains(document.activeElement)) && (P(this, vo, document.activeElement), requestAnimationFrame(() => { + var i; + (i = this.el) == null || i.focus({ preventScroll: !0 }); + })), this.dispatch("controls-change", { + detail: e, + trigger: s + })); +}; +const T1 = il.fullscreenEnabled; +var bo, ju, fl, iR, aR, oR; +class kX extends mr { + constructor() { + super(...arguments); + S(this, fl); + /** + * Tracks whether we're the active fullscreen event listener. Fullscreen events can only be + * listened to globally on the document so we need to know if they relate to the current host + * element or not. + */ + S(this, bo, !1); + S(this, ju, !1); + } + get active() { + return l(this, ju); + } + get supported() { + return T1; + } + onConnect() { + new Dt(il).add("fullscreenchange", m(this, fl, aR).bind(this)).add("fullscreenerror", m(this, fl, oR).bind(this)), ft(m(this, fl, iR).bind(this)); + } + async enter() { + try { + return P(this, bo, !0), !this.el || Ob(this.el) ? void 0 : (fS(), il.requestFullscreen(this.el)); + } catch (e) { + throw P(this, bo, !1), e; + } + } + async exit() { + if (!(!this.el || !Ob(this.el))) + return fS(), il.exitFullscreen(); + } +} +bo = new WeakMap(), ju = new WeakMap(), fl = new WeakSet(), iR = async function() { + T1 && await this.exit(); +}, aR = function(e) { + const s = Ob(this.el); + s !== l(this, ju) && (s || P(this, bo, !1), P(this, ju, s), this.dispatch("fullscreen-change", { detail: s, trigger: e })); +}, oR = function(e) { + l(this, bo) && (this.dispatch("fullscreen-error", { detail: null, trigger: e }), P(this, bo, !1)); +}; +function Ob(n) { + if (il.fullscreenElement === n) return !0; + try { + return n.matches( + // @ts-expect-error - `fullscreenPseudoClass` is missing from `@types/fscreen`. + il.fullscreenPseudoClass + ); + } catch { + return !1; + } +} +function fS() { + if (!T1) + throw Error( + "[vidstack] no fullscreen API" + ); +} +var wo, ba, Yl, fr, lR, A1, P1, N1; +const Ty = class Ty extends mr { + constructor() { + super(...arguments); + S(this, fr); + S(this, wo, He(m(this, fr, N1).call(this))); + S(this, ba, He(!1)); + S(this, Yl); + } + /** + * The current screen orientation type. + * + * @signal + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/ScreenOrientation} + * @see https://w3c.github.io/screen-orientation/#screen-orientation-types-and-locks + */ + get type() { + return l(this, wo).call(this); + } + /** + * Whether the screen orientation is currently locked. + * + * @signal + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/ScreenOrientation} + * @see https://w3c.github.io/screen-orientation/#screen-orientation-types-and-locks + */ + get locked() { + return l(this, ba).call(this); + } + /** + * Whether the viewport is in a portrait orientation. + * + * @signal + */ + get portrait() { + return l(this, wo).call(this).startsWith("portrait"); + } + /** + * Whether the viewport is in a landscape orientation. + * + * @signal + */ + get landscape() { + return l(this, wo).call(this).startsWith("landscape"); + } + /** + * Whether the native Screen Orientation API is available. + */ + get supported() { + return Ty.supported; + } + onConnect() { + if (this.supported) + dn(screen.orientation, "change", m(this, fr, A1).bind(this)); + else { + const e = window.matchMedia("(orientation: landscape)"); + e.onchange = m(this, fr, A1).bind(this), ft(() => e.onchange = null); + } + ft(m(this, fr, lR).bind(this)); + } + /** + * Locks the orientation of the screen to the desired orientation type using the + * Screen Orientation API. + * + * @param lockType - The screen lock orientation type. + * @throws Error - If screen orientation API is unavailable. + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Screen/orientation} + * @see {@link https://w3c.github.io/screen-orientation} + */ + async lock(e) { + pe(l(this, ba)) || l(this, Yl) === e || (m(this, fr, P1).call(this), await screen.orientation.lock(e), l(this, ba).set(!0), P(this, Yl, e)); + } + /** + * Unlocks the orientation of the screen to it's default state using the Screen Orientation + * API. This method will throw an error if the API is unavailable. + * + * @throws Error - If screen orientation API is unavailable. + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Screen/orientation} + * @see {@link https://w3c.github.io/screen-orientation} + */ + async unlock() { + pe(l(this, ba)) && (m(this, fr, P1).call(this), P(this, Yl, void 0), await screen.orientation.unlock(), l(this, ba).set(!1)); + } +}; +wo = new WeakMap(), ba = new WeakMap(), Yl = new WeakMap(), fr = new WeakSet(), lR = async function() { + this.supported && l(this, ba).call(this) && await this.unlock(); +}, A1 = function(e) { + l(this, wo).set(m(this, fr, N1).call(this)), this.dispatch("orientation-change", { + detail: { + orientation: pe(l(this, wo)), + lock: l(this, Yl) + }, + trigger: e + }); +}, P1 = function() { + if (!this.supported) + throw Error( + "[vidstack] no orientation API" + ); +}, N1 = function() { + return Se ? "portrait-primary" : this.supported ? window.screen.orientation.type : window.innerWidth >= window.innerHeight ? "landscape-primary" : "portrait-primary"; +}, /** + * Whether the native Screen Orientation API is available. + */ +U(Ty, "supported", b$()); +let gy = Ty; +class TX { + constructor() { + U(this, "name", "audio"); + U(this, "target"); + } + canPlay(t) { + return P2(t) ? Se || !Le(t.src) || t.type === "?" || w$(this.target, t.type) : !1; + } + mediaType() { + return "audio"; + } + async load(t) { + if (Se) + throw Error("[vidstack] can not load audio provider server-side"); + return new (await import("./vidstack-R_ot4AhB-HEsIT7bU.js")).AudioProvider(this.target, t); + } +} +class M2 { + constructor() { + U(this, "name", "video"); + U(this, "target"); + } + canPlay(t) { + return N2(t) ? Se || !Le(t.src) || t.type === "?" || x$(this.target, t.type) : !1; + } + mediaType() { + return "video"; + } + async load(t) { + if (Se) + throw Error("[vidstack] can not load video provider server-side"); + return new (await Promise.resolve().then(function() { + return GX; + })).VideoProvider(this.target, t); + } +} +const Ay = class Ay extends M2 { + constructor() { + super(...arguments); + U(this, "name", "hls"); + } + canPlay(e) { + return Ay.supported && oh(e); + } + async load(e) { + if (Se) + throw Error("[vidstack] can not load hls provider server-side"); + return new (await import("./vidstack-BN7_0WI--BfSbBAjt.js")).HLSProvider(this.target, e); + } +}; +U(Ay, "supported", A2()); +let $1 = Ay, ug = null, yy = [], vy = []; +function D2() { + return ug ?? (ug = new AudioContext()); +} +function AX() { + const n = D2(), t = n.createGain(); + return t.connect(n.destination), yy.push(t), t; +} +function PX(n, t) { + const e = D2(), s = e.createMediaElementSource(n); + return t && s.connect(t), vy.push(s), s; +} +function NX(n) { + const t = yy.indexOf(n); + t !== -1 && (yy.splice(t, 1), n.disconnect(), cR()); +} +function $X(n) { + const t = vy.indexOf(n); + t !== -1 && (vy.splice(t, 1), n.disconnect(), cR()); +} +function cR() { + ug && yy.length === 0 && vy.length === 0 && ug.close().then(() => { + ug = null; + }); +} +var Mf, Fu, Js, vr, Fc, uR, R1; +class RX { + constructor(t, e) { + S(this, Fc); + S(this, Mf); + S(this, Fu); + S(this, Js, null); + S(this, vr, null); + P(this, Mf, t), P(this, Fu, e); + } + get currentGain() { + var t, e; + return ((e = (t = l(this, Js)) == null ? void 0 : t.gain) == null ? void 0 : e.value) ?? null; + } + get supported() { + return !0; + } + setGain(t) { + const e = this.currentGain; + if (t !== this.currentGain) { + if (t === 1 && e !== 1) { + this.removeGain(); + return; + } + l(this, Js) || (P(this, Js, AX()), l(this, vr) && l(this, vr).connect(l(this, Js))), l(this, vr) || P(this, vr, PX(l(this, Mf), l(this, Js))), l(this, Js).gain.value = t, l(this, Fu).call(this, t); + } + } + removeGain() { + l(this, Js) && (l(this, vr) && l(this, vr).connect(D2().destination), m(this, Fc, R1).call(this), l(this, Fu).call(this, null)); + } + destroy() { + m(this, Fc, uR).call(this), m(this, Fc, R1).call(this); + } +} +Mf = new WeakMap(), Fu = new WeakMap(), Js = new WeakMap(), vr = new WeakMap(), Fc = new WeakSet(), uR = function() { + if (l(this, vr)) + try { + $X(l(this, vr)); + } catch { + } finally { + P(this, vr, null); + } +}, R1 = function() { + if (l(this, Js)) + try { + NX(l(this, Js)); + } catch { + } finally { + P(this, Js, null); + } +}; +const IX = ["focus", "blur", "visibilitychange", "pageshow", "pagehide"]; +var Kl, Vu, Df, Py, dR; +class OX { + constructor() { + S(this, Py); + S(this, Kl, He(pS())); + S(this, Vu, He(Se ? "visible" : document.visibilityState)); + S(this, Df); + } + connect() { + const t = new Dt(window), e = m(this, Py, dR).bind(this); + for (const s of IX) + t.add(s, e); + py && t.add("beforeunload", (s) => { + P(this, Df, setTimeout(() => { + s.defaultPrevented || s.returnValue.length > 0 || (l(this, Kl).set("hidden"), l(this, Vu).set("hidden")); + }, 0)); + }); + } + /** + * The current page state. Important to note we only account for a subset of page states, as + * the rest aren't valuable to the player at the moment. + * + * - **active:** A page is in the active state if it is visible and has input focus. + * - **passive:** A page is in the passive state if it is visible and does not have input focus. + * - **hidden:** A page is in the hidden state if it is not visible. + * + * @see https://developers.google.com/web/updates/2018/07/page-lifecycle-api#states + */ + get pageState() { + return l(this, Kl).call(this); + } + /** + * The current document visibility state. + * + * - **visible:** The page content may be at least partially visible. In practice, this means that + * the page is the foreground tab of a non-minimized window. + * - **hidden:** The page content is not visible to the user. In practice this means that the + * document is either a background tab or part of a minimized window, or the OS screen lock is + * active. + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilityState + */ + get visibility() { + return l(this, Vu).call(this); + } +} +Kl = new WeakMap(), Vu = new WeakMap(), Df = new WeakMap(), Py = new WeakSet(), dR = function(t) { + py && window.clearTimeout(l(this, Df)), (t.type !== "blur" || l(this, Kl).call(this) === "active") && (l(this, Kl).set(pS(t)), l(this, Vu).set(document.visibilityState == "hidden" ? "hidden" : "visible")); +}; +function pS(n) { + return Se || (n == null ? void 0 : n.type) === "blur" || document.visibilityState === "hidden" ? "hidden" : document.hasFocus() ? "active" : "passive"; +} +var wa, Lf, jf, I1; +class hR { + constructor(t) { + S(this, jf); + S(this, wa); + S(this, Lf); + P(this, Lf, t); + } + start() { + jn(l(this, wa)) && m(this, jf, I1).call(this); + } + stop() { + zs(l(this, wa)) && window.cancelAnimationFrame(l(this, wa)), P(this, wa, void 0); + } +} +wa = new WeakMap(), Lf = new WeakMap(), jf = new WeakSet(), I1 = function() { + P(this, wa, window.requestAnimationFrame(() => { + jn(l(this, wa)) || (l(this, Lf).call(this), m(this, jf, I1).call(this)); + })); +}; +var Ff, At, xo, Bu, Uu, Zl, Vf, qu, Q, jt, fR, zu, Hu, pR, mR, gR, yR, Ny, Ax, _n, DX, kl, vR, O1, bR, wR, xR, dg, CR, _R, SR, ER, kR, TR, AR, PR, NR, $R, RR, IR, OR, MR, DR, LR, jR, FR; +class MX { + constructor(t, e) { + S(this, Q); + S(this, Ff); + S(this, At); + S(this, xo, !1); + S(this, Bu, !1); + S(this, Uu, !1); + S(this, Zl, new hR(m(this, Q, pR).bind(this))); + S(this, Vf, new OX()); + S(this, qu); + /** + * The `timeupdate` event fires surprisingly infrequently during playback, meaning your progress + * bar (or whatever else is synced to the currentTime) moves in a choppy fashion. This helps + * resolve that by retrieving time updates in a request animation frame loop. + */ + S(this, zu, 0); + S(this, Hu, -1); + S(this, Ny); + S(this, Ax); + P(this, Ff, t), P(this, At, e), P(this, qu, new Dt(t.media)), m(this, Q, mR).call(this), l(this, Vf).connect(), Z(m(this, Q, NR).bind(this)), ft(m(this, Q, fR).bind(this)); + } +} +Ff = new WeakMap(), At = new WeakMap(), xo = new WeakMap(), Bu = new WeakMap(), Uu = new WeakMap(), Zl = new WeakMap(), Vf = new WeakMap(), qu = new WeakMap(), Q = new WeakSet(), jt = function() { + return l(this, Ff).media; +}, fR = function() { + var t; + P(this, Bu, !1), P(this, Uu, !1), l(this, Zl).stop(), l(this, qu).abort(), (t = l(this, Ny)) == null || t.clear(); +}, zu = new WeakMap(), Hu = new WeakMap(), pR = function() { + const t = l(this, Q, jt).currentTime; + !(py && t - l(this, Hu) < 0.35) && l(this, zu) !== t && (m(this, Q, kl).call(this, t), P(this, zu, t)); +}, mR = function() { + m(this, Q, _n).call(this, "loadstart", m(this, Q, vR)), m(this, Q, _n).call(this, "abort", m(this, Q, O1)), m(this, Q, _n).call(this, "emptied", m(this, Q, bR)), m(this, Q, _n).call(this, "error", m(this, Q, FR)), m(this, Q, _n).call(this, "volumechange", m(this, Q, IR)); +}, gR = function() { + l(this, Bu) || (m(this, Q, _n).call(this, "loadeddata", m(this, Q, wR)), m(this, Q, _n).call(this, "loadedmetadata", m(this, Q, xR)), m(this, Q, _n).call(this, "canplay", m(this, Q, SR)), m(this, Q, _n).call(this, "canplaythrough", m(this, Q, ER)), m(this, Q, _n).call(this, "durationchange", m(this, Q, RR)), m(this, Q, _n).call(this, "play", m(this, Q, CR)), m(this, Q, _n).call(this, "progress", m(this, Q, DR)), m(this, Q, _n).call(this, "stalled", m(this, Q, TR)), m(this, Q, _n).call(this, "suspend", m(this, Q, LR)), m(this, Q, _n).call(this, "ratechange", m(this, Q, jR)), P(this, Bu, !0)); +}, yR = function() { + l(this, Uu) || (m(this, Q, _n).call(this, "pause", m(this, Q, _R)), m(this, Q, _n).call(this, "playing", m(this, Q, kR)), m(this, Q, _n).call(this, "seeked", m(this, Q, OR)), m(this, Q, _n).call(this, "seeking", m(this, Q, MR)), m(this, Q, _n).call(this, "ended", m(this, Q, PR)), m(this, Q, _n).call(this, "waiting", m(this, Q, AR)), P(this, Uu, !0)); +}, Ny = new WeakMap(), Ax = new WeakMap(), _n = function(t, e) { + l(this, qu).add(t, e.bind(this)); +}, DX = function(t) { +}, kl = function(t, e) { + const s = Math.min(t, l(this, At).$state.seekableEnd()); + l(this, At).notify("time-change", s, e); +}, vR = function(t) { + if (l(this, Q, jt).networkState === 3) { + m(this, Q, O1).call(this, t); + return; + } + m(this, Q, gR).call(this), l(this, At).notify("load-start", void 0, t); +}, O1 = function(t) { + l(this, At).notify("abort", void 0, t); +}, bR = function() { + l(this, At).notify("emptied", void 0, event); +}, wR = function(t) { + l(this, At).notify("loaded-data", void 0, t); +}, xR = function(t) { + P(this, zu, 0), P(this, Hu, -1), m(this, Q, yR).call(this), l(this, At).notify("loaded-metadata", void 0, t), (T2 || py && oh(l(this, At).$state.source())) && l(this, At).delegate.ready(m(this, Q, dg).call(this), t); +}, dg = function() { + return { + provider: pe(l(this, At).$provider), + duration: l(this, Q, jt).duration, + buffered: l(this, Q, jt).buffered, + seekable: l(this, Q, jt).seekable + }; +}, CR = function(t) { + l(this, At).$state.canPlay && l(this, At).notify("play", void 0, t); +}, _R = function(t) { + l(this, Q, jt).readyState === 1 && !l(this, xo) || (P(this, xo, !1), l(this, Zl).stop(), l(this, At).notify("pause", void 0, t)); +}, SR = function(t) { + l(this, At).delegate.ready(m(this, Q, dg).call(this), t); +}, ER = function(t) { + l(this, At).$state.started() || l(this, At).notify("can-play-through", m(this, Q, dg).call(this), t); +}, kR = function(t) { + l(this, Q, jt).paused || (P(this, xo, !1), l(this, At).notify("playing", void 0, t), l(this, Zl).start()); +}, TR = function(t) { + l(this, At).notify("stalled", void 0, t), l(this, Q, jt).readyState < 3 && (P(this, xo, !0), l(this, At).notify("waiting", void 0, t)); +}, AR = function(t) { + l(this, Q, jt).readyState < 3 && (P(this, xo, !0), l(this, At).notify("waiting", void 0, t)); +}, PR = function(t) { + l(this, Zl).stop(), m(this, Q, kl).call(this, l(this, Q, jt).duration, t), l(this, At).notify("end", void 0, t), l(this, At).$state.loop() && LN(l(this, Q, jt).controls) && (l(this, Q, jt).controls = !1); +}, NR = function() { + const t = l(this, At).$state.paused(), e = l(this, Vf).visibility === "hidden"; + (t || e) && dn(l(this, Q, jt), "timeupdate", m(this, Q, $R).bind(this)); +}, $R = function(t) { + m(this, Q, kl).call(this, l(this, Q, jt).currentTime, t); +}, RR = function(t) { + l(this, At).$state.ended() && m(this, Q, kl).call(this, l(this, Q, jt).duration, t), l(this, At).notify("duration-change", l(this, Q, jt).duration, t); +}, IR = function(t) { + const e = { + volume: l(this, Q, jt).volume, + muted: l(this, Q, jt).muted + }; + l(this, At).notify("volume-change", e, t); +}, OR = function(t) { + P(this, Hu, l(this, Q, jt).currentTime), m(this, Q, kl).call(this, l(this, Q, jt).currentTime, t), l(this, At).notify("seeked", l(this, Q, jt).currentTime, t), Math.trunc(l(this, Q, jt).currentTime) === Math.trunc(l(this, Q, jt).duration) && y1(l(this, Q, jt).duration) > y1(l(this, Q, jt).currentTime) && (m(this, Q, kl).call(this, l(this, Q, jt).duration, t), l(this, Q, jt).ended || l(this, At).player.dispatch( + new Nt("media-play-request", { + trigger: t + }) + )); +}, MR = function(t) { + l(this, At).notify("seeking", l(this, Q, jt).currentTime, t); +}, DR = function(t) { + const e = { + buffered: l(this, Q, jt).buffered, + seekable: l(this, Q, jt).seekable + }; + l(this, At).notify("progress", e, t); +}, LR = function(t) { + l(this, At).notify("suspend", void 0, t); +}, jR = function(t) { + l(this, At).notify("rate-change", l(this, Q, jt).playbackRate, t); +}, FR = function(t) { + const e = l(this, Q, jt).error; + if (!e) return; + const s = { + message: e.message, + code: e.code, + mediaError: e + }; + l(this, At).notify("error", s, t); +}; +var Bf, Br, Hn, mu, VR, BR, UR, M1, qR; +class LX { + constructor(t, e) { + S(this, Hn); + S(this, Bf); + S(this, Br); + P(this, Bf, t), P(this, Br, e), l(this, Hn, mu).onaddtrack = m(this, Hn, VR).bind(this), l(this, Hn, mu).onremovetrack = m(this, Hn, BR).bind(this), l(this, Hn, mu).onchange = m(this, Hn, UR).bind(this), dn(l(this, Br).audioTracks, "change", m(this, Hn, qR).bind(this)); + } +} +Bf = new WeakMap(), Br = new WeakMap(), Hn = new WeakSet(), mu = function() { + return l(this, Bf).media.audioTracks; +}, VR = function(t) { + const e = t.track; + if (e.label === "") return; + const s = e.id.toString() || `native-audio-${l(this, Br).audioTracks.length}`, r = { + id: s, + label: e.label, + language: e.language, + kind: e.kind, + selected: !1 + }; + l(this, Br).audioTracks[bt.add](r, t), e.enabled && (r.selected = !0); +}, BR = function(t) { + const e = l(this, Br).audioTracks.getById(t.track.id); + e && l(this, Br).audioTracks[bt.remove](e, t); +}, UR = function(t) { + let e = m(this, Hn, M1).call(this); + if (!e) return; + const s = l(this, Br).audioTracks.getById(e.id); + s && l(this, Br).audioTracks[bt.select](s, !0, t); +}, M1 = function() { + return Array.from(l(this, Hn, mu)).find((t) => t.enabled); +}, qR = function(t) { + const { current: e } = t.detail; + if (!e) return; + const s = l(this, Hn, mu).getTrackById(e.id); + if (s) { + const r = m(this, Hn, M1).call(this); + r && (r.enabled = !1), s.enabled = !0; + } +}; +var Uf, D1; +class jX { + constructor(t, e) { + S(this, Uf); + U(this, "scope", qd()); + U(this, "currentSrc", null); + U(this, "audioGain"); + this.media = t, this.ctx = e, this.audioGain = new RX(t, (s) => { + this.ctx.notify("audio-gain-change", s); + }); + } + setup() { + new MX(this, this.ctx), "audioTracks" in this.media && new LX(this, this.ctx), ft(() => { + this.audioGain.destroy(), this.media.srcObject = null, this.media.removeAttribute("src"); + for (const t of this.media.querySelectorAll("source")) t.remove(); + this.media.load(); + }); + } + get type() { + return ""; + } + setPlaybackRate(t) { + this.media.playbackRate = t; + } + async play() { + return this.media.play(); + } + async pause() { + return this.media.pause(); + } + setMuted(t) { + this.media.muted = t; + } + setVolume(t) { + this.media.volume = t; + } + setCurrentTime(t) { + this.media.currentTime = t; + } + setPlaysInline(t) { + Ze(this.media, "playsinline", t); + } + async loadSource({ src: t, type: e }, s) { + this.media.preload = s || "", RZ(t) ? (this.removeSource(), this.media.srcObject = t) : (this.media.srcObject = null, Le(t) ? e !== "?" ? this.appendSource({ src: t, type: e }) : (this.removeSource(), this.media.src = m(this, Uf, D1).call(this, t)) : (this.removeSource(), this.media.src = window.URL.createObjectURL(t))), this.media.load(), this.currentSrc = { src: t, type: e }; + } + /** + * Append source so it works when requesting AirPlay since hls.js will remove it. + */ + appendSource(t, e) { + const s = this.media.querySelector("source[data-vds]"), r = s ?? document.createElement("source"); + Ze(r, "src", m(this, Uf, D1).call(this, t.src)), Ze(r, "type", t.type !== "?" ? t.type : e), Ze(r, "data-vds", ""), s || this.media.append(r); + } + removeSource() { + var t; + (t = this.media.querySelector("source[data-vds]")) == null || t.remove(); + } +} +Uf = new WeakSet(), D1 = function(t) { + const { clipStartTime: e, clipEndTime: s } = this.ctx.$state, r = e(), i = s(); + return r > 0 && i > 0 ? `${t}#t=${r},${i}` : r > 0 ? `${t}#t=${r}` : i > 0 ? `${t}#t=0,${i}` : t; +}; +var br, qf, zf, Xl, pl, zR, HR, WR; +class FX { + constructor(t, e) { + S(this, pl); + S(this, br); + S(this, qf); + S(this, zf); + S(this, Xl, He(!1)); + P(this, br, t), P(this, qf, e), m(this, pl, zR).call(this); + } + get supported() { + return l(this, Xl).call(this); + } + async prompt() { + if (!this.supported) throw Error("Not supported on this platform."); + return this.type === "airplay" && l(this, br).webkitShowPlaybackTargetPicker ? l(this, br).webkitShowPlaybackTargetPicker() : l(this, br).remote.prompt(); + } +} +br = new WeakMap(), qf = new WeakMap(), zf = new WeakMap(), Xl = new WeakMap(), pl = new WeakSet(), zR = function() { + var t; + Se || !((t = l(this, br)) != null && t.remote) || !this.canPrompt || (l(this, br).remote.watchAvailability((e) => { + l(this, Xl).set(e); + }).catch(() => { + l(this, Xl).set(!1); + }), Z(m(this, pl, HR).bind(this))); +}, HR = function() { + if (!l(this, Xl).call(this)) return; + const t = ["connecting", "connect", "disconnect"], e = m(this, pl, WR).bind(this); + e(), dn(l(this, br), "playing", e); + const s = new Dt(l(this, br).remote); + for (const r of t) + s.add(r, e); +}, WR = function(t) { + const e = l(this, br).remote.state; + if (e === l(this, zf)) return; + const s = { type: this.type, state: e }; + l(this, qf).notify("remote-playback-change", s, t), P(this, zf, e); +}; +class VX extends FX { + constructor() { + super(...arguments); + U(this, "type", "airplay"); + } + get canPrompt() { + return "WebKitPlaybackTargetAvailabilityEvent" in window; + } +} +var Wu, Gu, Gd, GR, YR; +class BX { + constructor(t, e) { + S(this, Gd); + S(this, Wu); + S(this, Gu); + P(this, Wu, t), P(this, Gu, e), t.textTracks.onaddtrack = m(this, Gd, GR).bind(this), ft(m(this, Gd, YR).bind(this)); + } +} +Wu = new WeakMap(), Gu = new WeakMap(), Gd = new WeakSet(), GR = function(t) { + const e = t.track; + if (!e || UX(l(this, Wu), e)) return; + const s = new Hd({ + id: e.id, + kind: e.kind, + label: e.label ?? "", + language: e.language, + type: "vtt" + }); + s[lt.native] = { track: e }, s[lt.readyState] = 2, s[lt.nativeHLS] = !0; + let r = 0; + const i = (a) => { + if (e.cues) + for (let o = r; o < e.cues.length; o++) + s.addCue(e.cues[o], a), r++; + }; + i(t), e.oncuechange = i, l(this, Gu).textTracks.add(s, t), s.setMode(e.mode, t); +}, YR = function() { + var t; + l(this, Wu).textTracks.onaddtrack = null; + for (const e of l(this, Gu).textTracks) { + const s = (t = e[lt.native]) == null ? void 0 : t.track; + s != null && s.oncuechange && (s.oncuechange = null); + } +}; +function UX(n, t) { + return Array.from(n.children).find((e) => e.track === t); +} +var Ql, Hf, Yd, KR, ZR, Wf; +class qX { + constructor(t, e) { + S(this, Yd); + S(this, Ql); + S(this, Hf); + S(this, Wf, (t, e) => { + l(this, Hf).notify("picture-in-picture-change", t, e); + }); + P(this, Ql, t), P(this, Hf, e), new Dt(t).add("enterpictureinpicture", m(this, Yd, KR).bind(this)).add("leavepictureinpicture", m(this, Yd, ZR).bind(this)); + } + get active() { + return document.pictureInPictureElement === l(this, Ql); + } + get supported() { + return _$(l(this, Ql)); + } + async enter() { + return l(this, Ql).requestPictureInPicture(); + } + exit() { + return document.exitPictureInPicture(); + } +} +Ql = new WeakMap(), Hf = new WeakMap(), Yd = new WeakSet(), KR = function(t) { + l(this, Wf).call(this, !0, t); +}, ZR = function(t) { + l(this, Wf).call(this, !1, t); +}, Wf = new WeakMap(); +var Jl, Yu, _i, $y, XR; +class zX { + constructor(t, e) { + S(this, $y); + S(this, Jl); + S(this, Yu); + S(this, _i, "inline"); + P(this, Jl, t), P(this, Yu, e), dn(t, "webkitpresentationmodechanged", m(this, $y, XR).bind(this)); + } + get mode() { + return l(this, _i); + } + get supported() { + return S$(l(this, Jl)); + } + async setPresentationMode(t) { + l(this, _i) !== t && l(this, Jl).webkitSetPresentationMode(t); + } +} +Jl = new WeakMap(), Yu = new WeakMap(), _i = new WeakMap(), $y = new WeakSet(), XR = function(t) { + var s; + const e = l(this, _i); + P(this, _i, l(this, Jl).webkitPresentationMode), (s = l(this, Yu).player) == null || s.dispatch( + new Nt("video-presentation-change", { + detail: l(this, _i), + trigger: t + }) + ), ["fullscreen", "picture-in-picture"].forEach((r) => { + (l(this, _i) === r || e === r) && l(this, Yu).notify(`${r}-change`, l(this, _i) === r, t); + }); +}; +var Co; +class HX { + constructor(t) { + S(this, Co); + P(this, Co, t); + } + get active() { + return l(this, Co).mode === "fullscreen"; + } + get supported() { + return l(this, Co).supported; + } + async enter() { + l(this, Co).setPresentationMode("fullscreen"); + } + async exit() { + l(this, Co).setPresentationMode("inline"); + } +} +Co = new WeakMap(); +var _o; +class WX { + constructor(t) { + S(this, _o); + P(this, _o, t); + } + get active() { + return l(this, _o).mode === "picture-in-picture"; + } + get supported() { + return l(this, _o).supported; + } + async enter() { + l(this, _o).setPresentationMode("picture-in-picture"); + } + async exit() { + l(this, _o).setPresentationMode("inline"); + } +} +_o = new WeakMap(); +let QR = class extends jX { + constructor(e, s) { + super(e, s); + U(this, "$$PROVIDER_TYPE", "VIDEO"); + U(this, "airPlay"); + U(this, "fullscreen"); + U(this, "pictureInPicture"); + Dn(() => { + if (this.airPlay = new VX(e, s), S$(e)) { + const r = new zX(e, s); + this.fullscreen = new HX(r), this.pictureInPicture = new WX(r); + } else _$(e) && (this.pictureInPicture = new qX(e, s)); + }, this.scope); + } + get type() { + return "video"; + } + setup() { + super.setup(), C$(this.video) && new BX(this.video, this.ctx), this.ctx.textRenderers.attachVideo(this.video), ft(() => { + this.ctx.textRenderers.attachVideo(null); + }), this.type === "video" && this.ctx.notify("provider-setup", this); + } + /** + * The native HTML `<video>` element. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement} + */ + get video() { + return this.media; + } +}; +var GX = /* @__PURE__ */ Object.freeze({ + __proto__: null, + VideoProvider: QR +}); +function mS(n) { + try { + return new Intl.DisplayNames(navigator.languages, { type: "language" }).of(n) ?? null; + } catch { + return null; + } +} +const YX = (n) => `dash-${Wa(n)}`; +var So, sn, _t, Ku, Zu, Ue, Tl, JR, e4, t4, xa, Xu, n4, s4, r4, i4, a4, o4, l4, c4, Eo, u4, hg, L1, d4, j1, h4, f4, F1; +class KX { + constructor(t, e) { + S(this, Ue); + S(this, So); + S(this, sn); + S(this, _t, null); + S(this, Ku, /* @__PURE__ */ new Set()); + S(this, Zu, null); + U(this, "config", {}); + S(this, xa, null); + S(this, Xu, {}); + S(this, Eo, -1); + P(this, So, t), P(this, sn, e); + } + get instance() { + return l(this, _t); + } + setup(t) { + P(this, _t, t().create()); + const e = m(this, Ue, t4).bind(this); + for (const s of Object.values(t.events)) l(this, _t).on(s, e); + l(this, _t).on(t.events.ERROR, m(this, Ue, o4).bind(this)); + for (const s of l(this, Ku)) s(l(this, _t)); + l(this, sn).player.dispatch("dash-instance", { + detail: l(this, _t) + }), l(this, _t).initialize(l(this, So), void 0, !1), l(this, _t).updateSettings({ + streaming: { + text: { + // Disabling text rendering by dash. + defaultEnabled: !1, + dispatchForManualRendering: !0 + }, + buffer: { + /// Enables buffer replacement when switching bitrates for faster switching. + fastSwitchEnabled: !0 + } + }, + ...this.config + }), l(this, _t).on(t.events.FRAGMENT_LOADING_STARTED, m(this, Ue, l4).bind(this)), l(this, _t).on( + t.events.FRAGMENT_LOADING_COMPLETED, + m(this, Ue, c4).bind(this) + ), l(this, _t).on(t.events.MANIFEST_LOADED, m(this, Ue, a4).bind(this)), l(this, _t).on(t.events.QUALITY_CHANGE_RENDERED, m(this, Ue, i4).bind(this)), l(this, _t).on(t.events.TEXT_TRACKS_ADDED, m(this, Ue, s4).bind(this)), l(this, _t).on(t.events.TRACK_CHANGE_RENDERED, m(this, Ue, r4).bind(this)), l(this, sn).qualities[sr.enableAuto] = m(this, Ue, d4).bind(this), dn(l(this, sn).qualities, "change", m(this, Ue, h4).bind(this)), dn(l(this, sn).audioTracks, "change", m(this, Ue, f4).bind(this)), P(this, Zu, Z(m(this, Ue, JR).bind(this))); + } + onInstance(t) { + return l(this, Ku).add(t), () => l(this, Ku).delete(t); + } + loadSource(t) { + var e; + m(this, Ue, F1).call(this), Le(t.src) && ((e = l(this, _t)) == null || e.attachSource(t.src)); + } + destroy() { + var t, e; + m(this, Ue, F1).call(this), (t = l(this, _t)) == null || t.destroy(), P(this, _t, null), (e = l(this, Zu)) == null || e.call(this), P(this, Zu, null); + } +} +So = new WeakMap(), sn = new WeakMap(), _t = new WeakMap(), Ku = new WeakMap(), Zu = new WeakMap(), Ue = new WeakSet(), Tl = function(t) { + return new Nt(YX(t.type), { detail: t }); +}, JR = function() { + if (!l(this, sn).$state.live()) return; + const t = new hR(m(this, Ue, e4).bind(this)); + return t.start(), t.stop.bind(t); +}, e4 = function() { + if (!l(this, _t)) return; + const t = l(this, _t).duration() - l(this, _t).time(); + l(this, sn).$state.liveSyncPosition.set(isNaN(t) ? 1 / 0 : t); +}, t4 = function(t) { + var e; + (e = l(this, sn).player) == null || e.dispatch(m(this, Ue, Tl).call(this, t)); +}, xa = new WeakMap(), Xu = new WeakMap(), n4 = function(t) { + var o; + const e = (o = l(this, xa)) == null ? void 0 : o[lt.native], s = (e == null ? void 0 : e.track).cues; + if (!e || !s) return; + const r = l(this, xa).id, i = l(this, Xu)[r] ?? 0, a = m(this, Ue, Tl).call(this, t); + for (let c = i; c < s.length; c++) { + const u = s[c]; + u.positionAlign || (u.positionAlign = "auto"), l(this, xa).addCue(u, a); + } + l(this, Xu)[r] = s.length; +}, s4 = function(t) { + var i; + if (!l(this, _t)) return; + const e = t.tracks, s = [...l(this, So).textTracks].filter((a) => "manualMode" in a), r = m(this, Ue, Tl).call(this, t); + for (let a = 0; a < s.length; a++) { + const o = e[a], c = s[a], u = `dash-${o.kind}-${a}`, f = new Hd({ + id: u, + label: (o == null ? void 0 : o.label) ?? ((i = o.labels.find((p) => p.text)) == null ? void 0 : i.text) ?? ((o == null ? void 0 : o.lang) && mS(o.lang)) ?? (o == null ? void 0 : o.lang) ?? void 0, + language: o.lang ?? void 0, + kind: o.kind, + default: o.defaultTrack + }); + f[lt.native] = { + managed: !0, + track: c + }, f[lt.readyState] = 2, f[lt.onModeChange] = () => { + l(this, _t) && (f.mode === "showing" ? (l(this, _t).setTextTrack(a), P(this, xa, f)) : (l(this, _t).setTextTrack(-1), P(this, xa, null))); + }, l(this, sn).textTracks.add(f, r); + } +}, r4 = function(t) { + const { mediaType: e, newMediaInfo: s } = t; + if (e === "audio") { + const r = l(this, sn).audioTracks.getById(`dash-audio-${s.index}`); + if (r) { + const i = m(this, Ue, Tl).call(this, t); + l(this, sn).audioTracks[bt.select](r, !0, i); + } + } +}, i4 = function(t) { + if (t.mediaType !== "video") return; + const e = l(this, sn).qualities[t.newQuality]; + if (e) { + const s = m(this, Ue, Tl).call(this, t); + l(this, sn).qualities[bt.select](e, !0, s); + } +}, a4 = function(t) { + if (l(this, sn).$state.canPlay() || !l(this, _t)) return; + const { type: e, mediaPresentationDuration: s } = t.data, r = m(this, Ue, Tl).call(this, t); + l(this, sn).notify("stream-type-change", e !== "static" ? "live" : "on-demand", r), l(this, sn).notify("duration-change", s, r), l(this, sn).qualities[sr.setAuto](!0, r); + const i = l(this, _t).getVideoElement(), a = l(this, _t).getTracksForTypeFromManifest( + "video", + t.data + ), o = [...new Set(a.map((p) => p.mimeType))].find( + (p) => p && x$(i, p) + ), c = a.filter( + (p) => o === p.mimeType + )[0]; + let u = l(this, _t).getTracksForTypeFromManifest( + "audio", + t.data + ); + const f = [...new Set(u.map((p) => p.mimeType))].find( + (p) => p && w$(i, p) + ); + if (u = u.filter((p) => f === p.mimeType), c.bitrateList.forEach((p, g) => { + var v; + const y = { + id: ((v = p.id) == null ? void 0 : v.toString()) ?? `dash-bitrate-${g}`, + width: p.width ?? 0, + height: p.height ?? 0, + bitrate: p.bandwidth ?? 0, + codec: c.codec, + index: g + }; + l(this, sn).qualities[bt.add](y, r); + }), zs(c.index)) { + const p = l(this, sn).qualities[c.index]; + p && l(this, sn).qualities[bt.select](p, !0, r); + } + u.forEach((p, g) => { + const v = p.labels.find((w) => navigator.languages.some((E) => w.lang && E.toLowerCase().startsWith(w.lang.toLowerCase()))) || p.labels[0], b = { + id: `dash-audio-${p == null ? void 0 : p.index}`, + label: (v == null ? void 0 : v.text) ?? (p.lang && mS(p.lang)) ?? p.lang ?? "", + language: p.lang ?? "", + kind: "main", + mimeType: p.mimeType, + codec: p.codec, + index: g + }; + l(this, sn).audioTracks[bt.add](b, r); + }), i.dispatchEvent(new Nt("canplay", { trigger: r })); +}, o4 = function(t) { + const { type: e, error: s } = t; + switch (s.code) { + case 27: + m(this, Ue, u4).call(this, s); + break; + default: + m(this, Ue, L1).call(this, s); + break; + } +}, l4 = function() { + l(this, Eo) >= 0 && m(this, Ue, hg).call(this); +}, c4 = function(t) { + t.mediaType === "text" && requestAnimationFrame(m(this, Ue, n4).bind(this, t)); +}, Eo = new WeakMap(), u4 = function(t) { + var e; + m(this, Ue, hg).call(this), (e = l(this, _t)) == null || e.play(), P(this, Eo, window.setTimeout(() => { + P(this, Eo, -1), m(this, Ue, L1).call(this, t); + }, 5e3)); +}, hg = function() { + clearTimeout(l(this, Eo)), P(this, Eo, -1); +}, L1 = function(t) { + l(this, sn).notify("error", { + message: t.message ?? "", + code: 1, + error: t + }); +}, d4 = function() { + var e; + m(this, Ue, j1).call(this, "video", !0); + const { qualities: t } = l(this, sn); + (e = l(this, _t)) == null || e.setQualityFor("video", t.selectedIndex, !0); +}, j1 = function(t, e) { + var s; + (s = l(this, _t)) == null || s.updateSettings({ + streaming: { abr: { autoSwitchBitrate: { [t]: e } } } + }); +}, h4 = function() { + const { qualities: t } = l(this, sn); + !l(this, _t) || t.auto || !t.selected || (m(this, Ue, j1).call(this, "video", !1), l(this, _t).setQualityFor("video", t.selectedIndex, t.switch === "current"), v$ && (l(this, So).currentTime = l(this, So).currentTime)); +}, f4 = function() { + if (!l(this, _t)) return; + const { audioTracks: t } = l(this, sn), e = l(this, _t).getTracksFor("audio").find( + (s) => t.selected && t.selected.id === `dash-audio-${s.index}` + ); + e && l(this, _t).setCurrentTrack(e); +}, F1 = function() { + m(this, Ue, hg).call(this), P(this, xa, null), P(this, Xu, {}); +}; +function fg(n) { + return n instanceof Error ? n : Error(typeof n == "string" ? n : JSON.stringify(n)); +} +function ca(n, t) { + if (!n) + throw Error("Assertion failed."); +} +var ec, Si, Gf, zi, p4, m4, g4, y4; +class ZX { + constructor(t, e, s) { + S(this, zi); + S(this, ec); + S(this, Si); + S(this, Gf); + P(this, ec, t), P(this, Si, e), P(this, Gf, s), m(this, zi, p4).call(this); + } +} +ec = new WeakMap(), Si = new WeakMap(), Gf = new WeakMap(), zi = new WeakSet(), p4 = async function() { + const t = { + onLoadStart: m(this, zi, m4).bind(this), + onLoaded: m(this, zi, g4).bind(this), + onLoadError: m(this, zi, y4).bind(this) + }; + let e = await QX(l(this, ec), t); + if (jn(e) && !Le(l(this, ec)) && (e = await XX(l(this, ec), t)), !e) return null; + if (!window.dashjs.supportsMediaSource()) { + const s = "[vidstack] `dash.js` is not supported in this environment"; + return l(this, Si).player.dispatch(new Nt("dash-unsupported")), l(this, Si).notify("error", { message: s, code: 4 }), null; + } + return e; +}, m4 = function() { + l(this, Si).player.dispatch(new Nt("dash-lib-load-start")); +}, g4 = function(t) { + l(this, Si).player.dispatch( + new Nt("dash-lib-loaded", { + detail: t + }) + ), l(this, Gf).call(this, t); +}, y4 = function(t) { + const e = fg(t); + l(this, Si).player.dispatch( + new Nt("dash-lib-load-error", { + detail: e + }) + ), l(this, Si).notify("error", { + message: e.message, + code: 4, + error: e + }); +}; +async function XX(n, t = {}) { + var e, s, r, i, a, o, c; + if (!jn(n)) { + if ((e = t.onLoadStart) == null || e.call(t), JX(n)) + return (s = t.onLoaded) == null || s.call(t, n), n; + if (gS(n)) { + const u = n.MediaPlayer; + return (r = t.onLoaded) == null || r.call(t, u), u; + } + try { + const u = (i = await n()) == null ? void 0 : i.default; + if (gS(u)) + return (a = t.onLoaded) == null || a.call(t, u.MediaPlayer), u.MediaPlayer; + if (u) + (o = t.onLoaded) == null || o.call(t, u); + else + throw Error( + "" + ); + return u; + } catch (u) { + (c = t.onLoadError) == null || c.call(t, u); + } + } +} +async function QX(n, t = {}) { + var e, s, r; + if (Le(n)) { + (e = t.onLoadStart) == null || e.call(t); + try { + if (await IZ(n), !Hs(window.dashjs.MediaPlayer)) + throw Error( + "" + ); + const i = window.dashjs.MediaPlayer; + return (s = t.onLoaded) == null || s.call(t, i), i; + } catch (i) { + (r = t.onLoadError) == null || r.call(t, i); + } + } +} +function JX(n) { + return n && n.prototype && n.prototype !== Function; +} +function gS(n) { + return n && "MediaPlayer" in n; +} +const eQ = "https://cdn.jsdelivr.net"; +var Yf, Ur, ko; +class v4 extends QR { + constructor() { + super(...arguments); + U(this, "$$PROVIDER_TYPE", "DASH"); + S(this, Yf, null); + S(this, Ur, new KX(this.video, this.ctx)); + S(this, ko, `${eQ}/npm/dashjs@4.7.4/dist/dash.all.min.js`); + } + /** + * The `dash.js` constructor. + */ + get ctor() { + return l(this, Yf); + } + /** + * The current `dash.js` instance. + */ + get instance() { + return l(this, Ur).instance; + } + get type() { + return "dash"; + } + get canLiveSync() { + return !0; + } + /** + * The `dash.js` configuration object. + * + * @see {@link https://cdn.dashjs.org/latest/jsdoc/module-Settings.html} + */ + get config() { + return l(this, Ur).config; + } + set config(e) { + l(this, Ur).config = e; + } + /** + * The `dash.js` constructor (supports dynamic imports) or a URL of where it can be found. + * + * @defaultValue `https://cdn.jsdelivr.net/npm/dashjs@4.7.4/dist/dash.all.min.js` + */ + get library() { + return l(this, ko); + } + set library(e) { + P(this, ko, e); + } + preconnect() { + Le(l(this, ko)) && lh(l(this, ko)); + } + setup() { + super.setup(), new ZX(l(this, ko), this.ctx, (e) => { + P(this, Yf, e), l(this, Ur).setup(e), this.ctx.notify("provider-setup", this); + const s = pe(this.ctx.$state.source); + s && this.loadSource(s); + }); + } + async loadSource(e, s) { + if (!Le(e.src)) { + this.removeSource(); + return; + } + this.media.preload = s || "", this.appendSource(e, "application/x-mpegurl"), l(this, Ur).loadSource(e), this.currentSrc = e; + } + /** + * The given callback is invoked when a new `dash.js` instance is created and right before it's + * attached to media. + */ + onInstance(e) { + const s = l(this, Ur).instance; + return s && e(s), l(this, Ur).onInstance(e); + } + destroy() { + l(this, Ur).destroy(); + } +} +Yf = new WeakMap(), Ur = new WeakMap(), ko = new WeakMap(), /** + * Whether `dash.js` is supported in this environment. + */ +U(v4, "supported", E$()); +var tQ = /* @__PURE__ */ Object.freeze({ + __proto__: null, + DASHProvider: v4 +}); +const Ry = class Ry extends M2 { + constructor() { + super(...arguments); + U(this, "name", "dash"); + } + canPlay(e) { + return Ry.supported && $2(e); + } + async load(e) { + if (Se) + throw Error("[vidstack] can not load dash provider server-side"); + return new (await Promise.resolve().then(function() { + return tQ; + })).DASHProvider(this.target, e); + } +}; +U(Ry, "supported", E$()); +let V1 = Ry; +class nQ { + constructor() { + U(this, "name", "vimeo"); + U(this, "target"); + } + preconnect() { + const t = [ + "https://i.vimeocdn.com", + "https://f.vimeocdn.com", + "https://fresnel.vimeocdn.com" + ]; + for (const e of t) + lh(e); + } + canPlay(t) { + return Le(t.src) && t.type === "video/vimeo"; + } + mediaType() { + return "video"; + } + async load(t) { + if (Se) + throw Error("[vidstack] can not load vimeo provider server-side"); + return new (await import("./vidstack-BqgQkvb4-BAUzB5A8.js")).VimeoProvider(this.target, t); + } + async loadPoster(t, e, s) { + const { resolveVimeoVideoId: r, getVimeoVideoInfo: i } = await import("./vidstack-krOAtKMi-B4IZWKdc.js"); + if (!Le(t.src)) return null; + const { videoId: a, hash: o } = r(t.src); + return a ? i(a, s, o).then((c) => c ? c.poster : null) : null; + } +} +class sQ { + constructor() { + U(this, "name", "youtube"); + U(this, "target"); + } + preconnect() { + const t = [ + // Botguard script. + "https://www.google.com", + // Posters. + "https://i.ytimg.com", + // Ads. + "https://googleads.g.doubleclick.net", + "https://static.doubleclick.net" + ]; + for (const e of t) + lh(e); + } + canPlay(t) { + return Le(t.src) && t.type === "video/youtube"; + } + mediaType() { + return "video"; + } + async load(t) { + if (Se) + throw Error("[vidstack] can not load youtube provider server-side"); + return new (await import("./vidstack-DHmfHold-D561ZrLq.js")).YouTubeProvider(this.target, t); + } + async loadPoster(t, e, s) { + const { findYouTubePoster: r, resolveYouTubeVideoId: i } = await import("./vidstack-Dm1xEU9Q-qSXq3AI-.js"), a = Le(t.src) && i(t.src); + return a ? r(a, s) : null; + } +} +function Mb(n, t) { + const e = String(n), s = e.length; + if (s < t) { + const i = t - s; + return `${"0".repeat(i)}${n}`; + } + return e; +} +function b4(n) { + const t = Math.trunc(n / 3600), e = Math.trunc(n % 3600 / 60), s = Math.trunc(n % 60), r = Number((n - Math.trunc(n)).toPrecision(3)); + return { + hours: t, + minutes: e, + seconds: s, + fraction: r + }; +} +function Mv(n, { padHrs: t = null, padMins: e = null, showHrs: s = !1, showMs: r = !1 } = {}) { + const { hours: i, minutes: a, seconds: o, fraction: c } = b4(n), u = t ? Mb(i, 2) : i, f = e || ii(e) && n >= 3600 ? Mb(a, 2) : a, p = Mb(o, 2), g = r && c > 0 ? `.${String(c).replace(/^0?\./, "")}` : "", y = `${f}:${p}${g}`; + return i > 0 || s ? `${u}:${y}` : y; +} +function by(n) { + const t = [], { hours: e, minutes: s, seconds: r } = b4(n); + return e > 0 && t.push(`${e} hour`), s > 0 && t.push(`${s} min`), (r > 0 || t.length === 0) && t.push(`${r} sec`), t.join(" "); +} +const Db = Symbol(0), rQ = [ + "autoPlay", + "canAirPlay", + "canFullscreen", + "canGoogleCast", + "canLoad", + "canLoadPoster", + "canPictureInPicture", + "canPlay", + "canSeek", + "ended", + "fullscreen", + "isAirPlayConnected", + "isGoogleCastConnected", + "live", + "liveEdge", + "loop", + "mediaType", + "muted", + "paused", + "pictureInPicture", + "playing", + "playsInline", + "remotePlaybackState", + "remotePlaybackType", + "seeking", + "started", + "streamType", + "viewType", + "waiting" +], iQ = { + artist: "", + artwork: null, + autoplay: !1, + autoPlay: !1, + clipStartTime: 0, + clipEndTime: 0, + controls: !1, + currentTime: 0, + crossorigin: null, + crossOrigin: null, + duration: -1, + fullscreenOrientation: "landscape", + googleCast: {}, + load: "visible", + posterLoad: "visible", + logLevel: "silent", + loop: !1, + muted: !1, + paused: !0, + playsinline: !1, + playsInline: !1, + playbackRate: 1, + poster: "", + preload: "metadata", + preferNativeHLS: !1, + src: "", + title: "", + controlsDelay: 2e3, + hideControlsOnMouseLeave: !1, + viewType: "unknown", + streamType: "unknown", + volume: 1, + liveEdgeTolerance: 10, + minLiveDVRWindow: 60, + keyDisabled: !1, + keyTarget: "player", + keyShortcuts: vX, + storage: null +}; +var Kf, tc; +class yS extends Kc { + constructor(e, s) { + super(); + S(this, Kf); + S(this, tc); + P(this, Kf, e), P(this, tc, s); + } + async onAttach(e) { + if (Se) return; + const s = this.$props[l(this, Kf)](); + if (s === "eager") + requestAnimationFrame(l(this, tc)); + else if (s === "idle") + e$(l(this, tc)); + else if (s === "visible") { + let r, i = new IntersectionObserver((a) => { + this.scope && a[0].isIntersecting && (r == null || r(), r = void 0, l(this, tc).call(this)); + }); + i.observe(e), r = ft(() => i.disconnect()); + } + } +} +Kf = new WeakMap(), tc = new WeakMap(); +var Zf, qr, Iy, w4; +class aQ { + constructor(t, e) { + S(this, Iy); + S(this, Zf); + S(this, qr); + P(this, Zf, t), P(this, qr, e); + } + notify(t, ...e) { + Se || l(this, Zf).call(this, new Nt(t, { + detail: e == null ? void 0 : e[0], + trigger: e == null ? void 0 : e[1] + })); + } + async ready(t, e) { + if (!Se) + return Bd(async () => { + var j, B, W, J, G, q, H; + const { logger: s } = l(this, qr), { + autoPlay: r, + canPlay: i, + started: a, + duration: o, + seekable: c, + buffered: u, + remotePlaybackInfo: f, + playsInline: p, + savedState: g, + source: y + } = l(this, qr).$state; + if (i()) return; + const v = { + duration: (t == null ? void 0 : t.duration) ?? o(), + seekable: (t == null ? void 0 : t.seekable) ?? c(), + buffered: (t == null ? void 0 : t.buffered) ?? u(), + provider: l(this, qr).$provider() + }; + this.notify("can-play", v, e), ri(); + let b = l(this, qr).$provider(), { storage: w, qualities: E } = l(this, qr), { muted: x, volume: C, clipStartTime: _, playbackRate: k } = l(this, qr).$props; + await ((j = w == null ? void 0 : w.onLoad) == null ? void 0 : j.call(w, y())); + const A = (B = g()) == null ? void 0 : B.currentTime, T = (W = g()) == null ? void 0 : W.paused, N = await (w == null ? void 0 : w.getTime()), $ = A ?? N ?? _(), D = T === !1 || T !== !0 && !a() && r(); + if (b) { + b.setVolume(await (w == null ? void 0 : w.getVolume()) ?? C()), b.setMuted(x() || !!await (w == null ? void 0 : w.getMuted())); + const L = await (w == null ? void 0 : w.getAudioGain()) ?? 1; + L > 1 && ((G = (J = b.audioGain) == null ? void 0 : J.setGain) == null || G.call(J, L)), (q = b.setPlaybackRate) == null || q.call(b, await (w == null ? void 0 : w.getPlaybackRate()) ?? k()), (H = b.setPlaysInline) == null || H.call(b, p()), $ > 0 && b.setCurrentTime($); + } + const V = await (w == null ? void 0 : w.getVideoQuality()); + if (V && E.length) { + let L = null, X = 1 / 0; + for (const te of E) { + const Te = Math.abs(V.width - te.width) + Math.abs(V.height - te.height) + (V.bitrate ? Math.abs(V.bitrate - (te.bitrate ?? 0)) : 0); + Te < X && (L = te, X = Te); + } + L && (L.selected = !0); + } + i() && D ? await m(this, Iy, w4).call(this, e) : N && N > 0 && this.notify("started", void 0, e), f.set(null); + }); + } +} +Zf = new WeakMap(), qr = new WeakMap(), Iy = new WeakSet(), w4 = async function(t) { + const { + player: e, + $state: { autoPlaying: s, muted: r } + } = l(this, qr); + s.set(!0); + const i = new Nt("auto-play-attempt", { trigger: t }); + try { + await e.play(i); + } catch { + } +}; +var To; +class oQ { + constructor() { + S(this, To, /* @__PURE__ */ new Map()); + } + /** + * Queue the given `item` under the given `key` to be processed at a later time by calling + * `serve(key)`. + */ + enqueue(t, e) { + l(this, To).set(t, e); + } + /** + * Process item in queue for the given `key`. + */ + serve(t) { + const e = this.peek(t); + return l(this, To).delete(t), e; + } + /** + * Peek at item in queue for the given `key`. + */ + peek(t) { + return l(this, To).get(t); + } + /** + * Removes queued item under the given `key`. + */ + delete(t) { + l(this, To).delete(t); + } + /** + * Clear all items in the queue. + */ + clear() { + l(this, To).clear(); + } +} +To = new WeakMap(); +var Ao, Qu, zr, ml, B1, U1; +class x4 { + constructor() { + S(this, ml); + S(this, Ao, !1); + S(this, Qu, fy()); + S(this, zr, /* @__PURE__ */ new Map()); + } + /** + * The number of callbacks that are currently in queue. + */ + get size() { + return l(this, zr).size; + } + /** + * Whether items in the queue are being served immediately, otherwise they're queued to + * be processed later. + */ + get isServing() { + return l(this, Ao); + } + /** + * Waits for the queue to be flushed (ie: start serving). + */ + async waitForFlush() { + l(this, Ao) || await l(this, Qu).promise; + } + /** + * Queue the given `callback` to be invoked at a later time by either calling the `serve()` or + * `start()` methods. If the queue has started serving (i.e., `start()` was already called), + * then the callback will be invoked immediately. + * + * @param key - Uniquely identifies this callback so duplicates are ignored. + * @param callback - The function to call when this item in the queue is being served. + */ + enqueue(t, e) { + if (l(this, Ao)) { + e(); + return; + } + l(this, zr).delete(t), l(this, zr).set(t, e); + } + /** + * Invokes the callback with the given `key` in the queue (if it exists). + */ + serve(t) { + var e; + (e = l(this, zr).get(t)) == null || e(), l(this, zr).delete(t); + } + /** + * Flush all queued items and start serving future requests immediately until `stop()` is called. + */ + start() { + m(this, ml, B1).call(this), P(this, Ao, !0), l(this, zr).size > 0 && m(this, ml, B1).call(this); + } + /** + * Stop serving requests, they'll be queued until you begin processing again by calling `start()`. + */ + stop() { + P(this, Ao, !1); + } + /** + * Stop serving requests, empty the request queue, and release any promises waiting for the + * queue to flush. + */ + reset() { + this.stop(), l(this, zr).clear(), m(this, ml, U1).call(this); + } +} +Ao = new WeakMap(), Qu = new WeakMap(), zr = new WeakMap(), ml = new WeakSet(), B1 = function() { + for (const t of l(this, zr).keys()) this.serve(t); + m(this, ml, U1).call(this); +}, U1 = function() { + l(this, Qu).resolve(), P(this, Qu, fy()); +}; +function lQ(n) { + return n ? "true" : "false"; +} +function us(n) { + return () => lQ(n()); +} +function cQ() { + return typeof window > "u" ? !1 : window.matchMedia("(prefers-reduced-motion: reduce)").matches; +} +var Ca, ot, _a, nc, Sa, fn, Po, kt, C4, _4, S4, q1, Ju, z1, H1, E4, k4, T4, A4, P4, N4, sc, $4, W1, G1, dQ; +class uQ extends Kc { + constructor(e, s, r) { + super(); + S(this, kt); + S(this, Ca); + S(this, ot); + S(this, _a); + U(this, "controls"); + S(this, nc); + S(this, Sa); + S(this, fn); + S(this, Po, new x4()); + S(this, Ju, !1); + S(this, sc); + P(this, Ca, e), P(this, ot, s), P(this, _a, r), P(this, fn, r.$provider), this.controls = new EX(), P(this, nc, new kX()), P(this, Sa, new gy()); + } + onAttach() { + this.listen("fullscreen-change", m(this, kt, $4).bind(this)); + } + onConnect(e) { + const s = Object.getOwnPropertyNames(Object.getPrototypeOf(this)), r = new Dt(e), i = m(this, kt, S4).bind(this); + for (const a of s) + a.startsWith("media-") && r.add(a, i); + m(this, kt, C4).call(this), Z(m(this, kt, _4).bind(this)), Z(m(this, kt, E4).bind(this)), Z(m(this, kt, k4).bind(this)), Z(m(this, kt, T4).bind(this)), Z(m(this, kt, A4).bind(this)), Z(m(this, kt, P4).bind(this)), Z(m(this, kt, N4).bind(this)); + } + onDestroy() { + try { + const e = this.createEvent("destroy"), { pictureInPicture: s, fullscreen: r } = this.$state; + r() && this.exitFullscreen("prefer-media", e), s() && this.exitPictureInPicture(e); + } catch { + } + l(this, Po).reset(); + } + async play(e) { + if (Se) return; + const { canPlay: s, paused: r, autoPlaying: i } = this.$state; + if (m(this, kt, q1).call(this, e) || !pe(r)) return; + e && l(this, ot).queue.enqueue("media-play-request", e); + const a = pe(i); + try { + const o = pe(l(this, fn)); + return Lb(o, pe(s)), hQ(a), await o.play(); + } catch (o) { + const c = this.createEvent("play-fail", { + detail: fg(o), + trigger: e + }); + throw c.autoPlay = a, l(this, Ca).handle(c), o; + } + } + async pause(e) { + if (Se) return; + const { canPlay: s, paused: r } = this.$state; + if (!pe(r)) { + e && l(this, ot).queue.enqueue("media-pause-request", e); + try { + const i = pe(l(this, fn)); + return Lb(i, pe(s)), await i.pause(); + } catch (i) { + throw l(this, ot).queue.delete("media-pause-request"), i; + } + } + } + setAudioGain(e, s) { + const { audioGain: r, canSetAudioGain: i } = this.$state; + if (r() === e) return; + const a = l(this, fn).call(this); + if (!(a != null && a.audioGain) || !i()) + throw Error("[vidstack] audio gain api not available"); + s && l(this, ot).queue.enqueue("media-audio-gain-change-request", s), a.audioGain.setGain(e); + } + seekToLiveEdge(e) { + if (Se) return; + const { canPlay: s, live: r, liveEdge: i, canSeek: a, liveSyncPosition: o, seekableEnd: c, userBehindLiveEdge: u } = this.$state; + if (u.set(!1), pe(() => !r() || i() || !a())) return; + const f = pe(l(this, fn)); + Lb(f, pe(s)), e && l(this, ot).queue.enqueue("media-seek-request", e); + const p = c() - 2; + f.setCurrentTime(Math.min(p, o() ?? p)); + } + async enterFullscreen(e = "prefer-media", s) { + if (Se) return; + const r = m(this, kt, z1).call(this, e); + if (vS(e, r), !r.active) + return pe(this.$state.pictureInPicture) && (P(this, Ju, !0), await this.exitPictureInPicture(s)), s && l(this, ot).queue.enqueue("media-enter-fullscreen-request", s), r.enter(); + } + async exitFullscreen(e = "prefer-media", s) { + if (Se) return; + const r = m(this, kt, z1).call(this, e); + if (vS(e, r), !!r.active) { + s && l(this, ot).queue.enqueue("media-exit-fullscreen-request", s); + try { + const i = await r.exit(); + return l(this, Ju) && pe(this.$state.canPictureInPicture) && await this.enterPictureInPicture(), i; + } finally { + P(this, Ju, !1); + } + } + } + async enterPictureInPicture(e) { + if (!Se && (m(this, kt, H1).call(this), !this.$state.pictureInPicture())) + return e && l(this, ot).queue.enqueue("media-enter-pip-request", e), await l(this, fn).call(this).pictureInPicture.enter(); + } + async exitPictureInPicture(e) { + if (!Se && (m(this, kt, H1).call(this), !!this.$state.pictureInPicture())) + return e && l(this, ot).queue.enqueue("media-exit-pip-request", e), await l(this, fn).call(this).pictureInPicture.exit(); + } + async "media-airplay-request"(e) { + try { + await this.requestAirPlay(e); + } catch { + } + } + async requestAirPlay(e) { + var s; + try { + const r = (s = l(this, fn).call(this)) == null ? void 0 : s.airPlay; + if (!(r != null && r.supported)) + throw Error("No AirPlay adapter."); + return e && l(this, ot).queue.enqueue("media-airplay-request", e), await r.prompt(); + } catch (r) { + throw l(this, ot).queue.delete("media-airplay-request"), r; + } + } + async "media-google-cast-request"(e) { + try { + await this.requestGoogleCast(e); + } catch { + } + } + async requestGoogleCast(e) { + try { + const { canGoogleCast: s } = this.$state; + if (!pe(s)) { + const i = Error( + "Cast not available." + ); + throw i.code = "CAST_NOT_AVAILABLE", i; + } + if (lh("https://www.gstatic.com"), !l(this, sc)) { + const i = await import("./vidstack-CQQ1xKSy-CZZk6e1l.js").then(function(a) { + return a.loader; + }); + P(this, sc, new i.GoogleCastLoader()); + } + await l(this, sc).prompt(l(this, _a)), e && l(this, ot).queue.enqueue("media-google-cast-request", e); + const r = pe(this.$state.remotePlaybackState) !== "disconnected"; + r && this.$state.savedState.set({ + paused: pe(this.$state.paused), + currentTime: pe(this.$state.currentTime) + }), this.$state.remotePlaybackLoader.set(r ? l(this, sc) : null); + } catch (s) { + throw l(this, ot).queue.delete("media-google-cast-request"), s; + } + } + "media-clip-start-change-request"(e) { + const { clipStartTime: s } = this.$state; + s.set(e.detail); + } + "media-clip-end-change-request"(e) { + const { clipEndTime: s } = this.$state; + s.set(e.detail), this.dispatch("duration-change", { + detail: e.detail, + trigger: e + }); + } + "media-duration-change-request"(e) { + const { providedDuration: s, clipEndTime: r } = this.$state; + s.set(e.detail), r() <= 0 && this.dispatch("duration-change", { + detail: e.detail, + trigger: e + }); + } + "media-audio-track-change-request"(e) { + const { logger: s, audioTracks: r } = l(this, _a); + if (r.readonly) + return; + const i = e.detail, a = r[i]; + if (a) { + const o = e.type; + l(this, ot).queue.enqueue(o, e), a.selected = !0; + } + } + async "media-enter-fullscreen-request"(e) { + try { + await this.enterFullscreen(e.detail, e); + } catch (s) { + m(this, kt, W1).call(this, s, e); + } + } + async "media-exit-fullscreen-request"(e) { + try { + await this.exitFullscreen(e.detail, e); + } catch (s) { + m(this, kt, W1).call(this, s, e); + } + } + async "media-orientation-lock-request"(e) { + const s = e.type; + try { + l(this, ot).queue.enqueue(s, e), await l(this, Sa).lock(e.detail); + } catch { + l(this, ot).queue.delete(s); + } + } + async "media-orientation-unlock-request"(e) { + const s = e.type; + try { + l(this, ot).queue.enqueue(s, e), await l(this, Sa).unlock(); + } catch { + l(this, ot).queue.delete(s); + } + } + async "media-enter-pip-request"(e) { + try { + await this.enterPictureInPicture(e); + } catch (s) { + m(this, kt, G1).call(this, s, e); + } + } + async "media-exit-pip-request"(e) { + try { + await this.exitPictureInPicture(e); + } catch (s) { + m(this, kt, G1).call(this, s, e); + } + } + "media-live-edge-request"(e) { + const { live: s, liveEdge: r, canSeek: i } = this.$state; + if (!(!s() || r() || !i())) { + l(this, ot).queue.enqueue("media-seek-request", e); + try { + this.seekToLiveEdge(); + } catch { + l(this, ot).queue.delete("media-seek-request"); + } + } + } + async "media-loop-request"(e) { + try { + l(this, ot).looping = !0, l(this, ot).replaying = !0, await this.play(e); + } catch { + l(this, ot).looping = !1; + } + } + "media-user-loop-change-request"(e) { + this.$state.userPrefersLoop.set(e.detail); + } + async "media-pause-request"(e) { + if (!this.$state.paused()) + try { + await this.pause(e); + } catch { + } + } + async "media-play-request"(e) { + if (this.$state.paused()) + try { + await this.play(e); + } catch { + } + } + "media-rate-change-request"(e) { + const { playbackRate: s, canSetPlaybackRate: r } = this.$state; + if (s() === e.detail || !r()) return; + const i = l(this, fn).call(this); + i != null && i.setPlaybackRate && (l(this, ot).queue.enqueue("media-rate-change-request", e), i.setPlaybackRate(e.detail)); + } + "media-audio-gain-change-request"(e) { + try { + this.setAudioGain(e.detail, e); + } catch { + } + } + "media-quality-change-request"(e) { + var o, c; + const { qualities: s, storage: r, logger: i } = l(this, _a); + if (s.readonly) + return; + l(this, ot).queue.enqueue("media-quality-change-request", e); + const a = e.detail; + if (a < 0) + s.autoSelect(e), e.isOriginTrusted && ((o = r == null ? void 0 : r.setVideoQuality) == null || o.call(r, null)); + else { + const u = s[a]; + u && (u.selected = !0, e.isOriginTrusted && ((c = r == null ? void 0 : r.setVideoQuality) == null || c.call(r, { + id: u.id, + width: u.width, + height: u.height, + bitrate: u.bitrate + }))); + } + } + "media-pause-controls-request"(e) { + const s = e.type; + l(this, ot).queue.enqueue(s, e), this.controls.pause(e); + } + "media-resume-controls-request"(e) { + const s = e.type; + l(this, ot).queue.enqueue(s, e), this.controls.resume(e); + } + "media-seek-request"(e) { + const { canSeek: s, ended: r, live: i, seekableEnd: a, userBehindLiveEdge: o } = this.$state, c = e.detail; + r() && (l(this, ot).replaying = !0); + const u = e.type; + l(this, ot).seeking = !1, l(this, ot).queue.delete(u); + const f = A$(c, this.$state); + !Number.isFinite(f) || !s() || (l(this, ot).queue.enqueue(u, e), l(this, fn).call(this).setCurrentTime(f), i() && e.isOriginTrusted && Math.abs(a() - f) >= 2 && o.set(!0)); + } + "media-seeking-request"(e) { + const s = e.type; + l(this, ot).queue.enqueue(s, e), this.$state.seeking.set(!0), l(this, ot).seeking = !0; + } + "media-start-loading"(e) { + if (this.$state.canLoad()) return; + const s = e.type; + l(this, ot).queue.enqueue(s, e), l(this, Ca).handle(this.createEvent("can-load")); + } + "media-poster-start-loading"(e) { + if (this.$state.canLoadPoster()) return; + const s = e.type; + l(this, ot).queue.enqueue(s, e), l(this, Ca).handle(this.createEvent("can-load-poster")); + } + "media-text-track-change-request"(e) { + const { index: s, mode: r } = e.detail, i = l(this, _a).textTracks[s]; + if (i) { + const a = e.type; + l(this, ot).queue.enqueue(a, e), i.setMode(r, e); + } + } + "media-mute-request"(e) { + if (this.$state.muted()) return; + const s = e.type; + l(this, ot).queue.enqueue(s, e), l(this, fn).call(this).setMuted(!0); + } + "media-unmute-request"(e) { + const { muted: s, volume: r } = this.$state; + if (!s()) return; + const i = e.type; + l(this, ot).queue.enqueue(i, e), l(this, _a).$provider().setMuted(!1), r() === 0 && (l(this, ot).queue.enqueue(i, e), l(this, fn).call(this).setVolume(0.25)); + } + "media-volume-change-request"(e) { + const { muted: s, volume: r } = this.$state, i = e.detail; + if (r() === i) return; + const a = e.type; + l(this, ot).queue.enqueue(a, e), l(this, fn).call(this).setVolume(i), i > 0 && s() && (l(this, ot).queue.enqueue(a, e), l(this, fn).call(this).setMuted(!1)); + } +} +Ca = new WeakMap(), ot = new WeakMap(), _a = new WeakMap(), nc = new WeakMap(), Sa = new WeakMap(), fn = new WeakMap(), Po = new WeakMap(), kt = new WeakSet(), C4 = function() { + const { load: e } = this.$props, { canLoad: s } = this.$state; + if (e() !== "play" || s()) return; + const r = this.listen("media-play-request", (i) => { + m(this, kt, q1).call(this, i), r(); + }); +}, _4 = function() { + const e = l(this, fn).call(this), s = this.$state.canPlay(); + return e && s && l(this, Po).start(), () => { + l(this, Po).stop(); + }; +}, S4 = function(e) { + e.stopPropagation(), !e.defaultPrevented && this[e.type] && (pe(l(this, fn)) ? this[e.type](e) : l(this, Po).enqueue(e.type, () => { + pe(l(this, fn)) && this[e.type](e); + })); +}, q1 = function(e) { + const { load: s } = this.$props, { canLoad: r } = this.$state; + if (s() === "play" && !r()) { + const i = this.createEvent("media-start-loading", { trigger: e }); + return this.dispatchEvent(i), l(this, Po).enqueue("media-play-request", async () => { + try { + await this.play(i); + } catch { + } + }), !0; + } + return !1; +}, Ju = new WeakMap(), z1 = function(e) { + const s = pe(l(this, fn)); + return e === "prefer-media" && l(this, nc).supported || e === "media" ? l(this, nc) : s == null ? void 0 : s.fullscreen; +}, H1 = function() { + if (!this.$state.canPictureInPicture()) + throw Error( + "[vidstack] no pip support" + ); +}, E4 = function() { + this.controls.defaultDelay = this.$props.controlsDelay(); +}, k4 = function() { + var r, i; + const { canSetAudioGain: e } = this.$state, s = !!((i = (r = l(this, fn).call(this)) == null ? void 0 : r.audioGain) != null && i.supported); + e.set(s); +}, T4 = function() { + var r, i; + const { canAirPlay: e } = this.$state, s = !!((i = (r = l(this, fn).call(this)) == null ? void 0 : r.airPlay) != null && i.supported); + e.set(s); +}, A4 = function() { + const { canGoogleCast: e, source: s } = this.$state, r = v$ && !T2 && $Z(s()); + e.set(r); +}, P4 = function() { + var r, i; + const { canFullscreen: e } = this.$state, s = l(this, nc).supported || !!((i = (r = l(this, fn).call(this)) == null ? void 0 : r.fullscreen) != null && i.supported); + e.set(s); +}, N4 = function() { + var r, i; + const { canPictureInPicture: e } = this.$state, s = !!((i = (r = l(this, fn).call(this)) == null ? void 0 : r.pictureInPicture) != null && i.supported); + e.set(s); +}, sc = new WeakMap(), $4 = async function(e) { + const s = pe(this.$props.fullscreenOrientation), r = e.detail; + if (!(jn(s) || s === "none" || !l(this, Sa).supported)) + if (r) { + if (l(this, Sa).locked) return; + this.dispatch("media-orientation-lock-request", { + detail: s, + trigger: e + }); + } else l(this, Sa).locked && this.dispatch("media-orientation-unlock-request", { + trigger: e + }); +}, W1 = function(e, s) { + l(this, Ca).handle( + this.createEvent("fullscreen-error", { + detail: fg(e) + }) + ); +}, G1 = function(e, s) { + l(this, Ca).handle( + this.createEvent("picture-in-picture-error", { + detail: fg(e) + }) + ); +}, dQ = function(e, s, r) { +}; +function Lb(n, t) { + if (!(n && t)) + throw Error( + "[vidstack] media not ready" + ); +} +function vS(n, t) { + if (!(t != null && t.supported)) + throw Error( + "[vidstack] no fullscreen support" + ); +} +function hQ(n) { + if (!(!cQ() || !n)) + throw Error( + "[vidstack] autoplay blocked" + ); +} +class fQ { + constructor() { + U(this, "seeking", !1); + U(this, "looping", !1); + U(this, "replaying", !1); + U(this, "queue", new oQ()); + } +} +const pQ = /* @__PURE__ */ new Set([ + "auto-play", + "auto-play-fail", + "can-load", + "sources-change", + "source-change", + "load-start", + "abort", + "error", + "loaded-metadata", + "loaded-data", + "can-play", + "play", + "play-fail", + "pause", + "playing", + "seeking", + "seeked", + "waiting" +]); +var xs, Ot, rn, rc, ed, ic, ac, Ea, No, ae, R4, I4, ho, xn, O4, M4, D4, pg, Y1, K1, L4, Z1, j4, F4, td, X1, mg, V4, B4, U4, Q1, J1, e0, q4, t0, z4, nd, H4, n0; +class mQ extends Kc { + constructor(e, s) { + super(); + S(this, ae); + S(this, xs); + S(this, Ot); + S(this, rn, /* @__PURE__ */ new Map()); + S(this, rc, !1); + S(this, ed, []); + S(this, ic, [-1, -1]); + S(this, ac, !1); + S(this, Ea); + S(this, No, !1); + S(this, td, null); + U(this, "seeking", xl( + (e) => { + const { seeking: s, realCurrentTime: r, paused: i } = this.$state; + s.set(!0), r.set(e.detail), m(this, ae, xn).call(this, "media-seeking-request", e), i() && (P(this, Ea, e), l(this, nd).call(this)), P(this, ic, [-1, -1]); + }, + 150, + { leading: !0 } + )); + S(this, nd, Ov(() => { + if (!l(this, Ea)) return; + P(this, ac, !0); + const { waiting: e, playing: s } = this.$state; + e.set(!0), s.set(!1); + const r = this.createEvent("waiting", { trigger: l(this, Ea) }); + l(this, rn).set("waiting", r), this.dispatch(r), P(this, Ea, void 0), P(this, ac, !1); + }, 300)); + P(this, xs, e), P(this, Ot, s); + } + onAttach(e) { + e.setAttribute("aria-busy", "true"), new Dt(this).add("fullscreen-change", this["fullscreen-change"].bind(this)).add("fullscreen-error", this["fullscreen-error"].bind(this)).add("orientation-change", this["orientation-change"].bind(this)); + } + onConnect(e) { + Z(m(this, ae, B4).bind(this)), m(this, ae, O4).call(this), m(this, ae, M4).call(this), m(this, ae, D4).call(this), m(this, ae, R4).call(this), ft(m(this, ae, I4).bind(this)); + } + onDestroy() { + const { audioTracks: e, qualities: s, textTracks: r } = l(this, Ot); + e[bt.reset](), s[bt.reset](), r[bt.reset](), m(this, ae, mg).call(this); + } + handle(e) { + if (!this.scope) return; + const s = e.type; + Bd(() => { + var r; + return (r = this[e.type]) == null ? void 0 : r.call(this, e); + }), Se || (pQ.has(s) && l(this, rn).set(s, e), this.dispatch(e)); + } + "provider-change"(e) { + var i, a; + const s = l(this, Ot).$provider(), r = e.detail; + (s == null ? void 0 : s.type) !== (r == null ? void 0 : r.type) && ((i = s == null ? void 0 : s.destroy) == null || i.call(s), (a = s == null ? void 0 : s.scope) == null || a.dispose(), l(this, Ot).$provider.set(e.detail), s && e.detail === null && m(this, ae, Q1).call(this, e)); + } + "provider-loader-change"(e) { + } + "auto-play"(e) { + this.$state.autoPlayError.set(null); + } + "auto-play-fail"(e) { + this.$state.autoPlayError.set(e.detail), m(this, ae, ho).call(this); + } + "can-load"(e) { + this.$state.canLoad.set(!0), l(this, rn).set("can-load", e), l(this, Ot).textTracks[lt.canLoad](), m(this, ae, xn).call(this, "media-start-loading", e); + } + "can-load-poster"(e) { + this.$state.canLoadPoster.set(!0), l(this, rn).set("can-load-poster", e), m(this, ae, xn).call(this, "media-poster-start-loading", e); + } + "media-type-change"(e) { + const s = l(this, rn).get("source-change"); + s && e.triggers.add(s); + const r = this.$state.viewType(); + this.$state.mediaType.set(e.detail); + const i = this.$state.providedViewType(), a = i === "unknown" ? e.detail : i; + r !== a && (Se ? this.$state.inferredViewType.set(a) : setTimeout(() => { + requestAnimationFrame(() => { + this.scope && (this.$state.inferredViewType.set(e.detail), this.dispatch("view-type-change", { + detail: a, + trigger: e + })); + }); + }, 0)); + } + "stream-type-change"(e) { + const s = l(this, rn).get("source-change"); + s && e.triggers.add(s); + const { streamType: r, inferredStreamType: i } = this.$state; + i.set(e.detail), e.detail = r(); + } + "rate-change"(e) { + var i; + const { storage: s } = l(this, Ot), { canPlay: r } = this.$state; + this.$state.playbackRate.set(e.detail), m(this, ae, xn).call(this, "media-rate-change-request", e), r() && ((i = s == null ? void 0 : s.setPlaybackRate) == null || i.call(s, e.detail)); + } + "remote-playback-change"(e) { + const { remotePlaybackState: s, remotePlaybackType: r } = this.$state, { type: i, state: a } = e.detail, o = a === "connected"; + r.set(i), s.set(a); + const c = i === "airplay" ? "media-airplay-request" : "media-google-cast-request"; + if (o) + m(this, ae, xn).call(this, c, e); + else { + const u = l(this, xs).queue.peek(c); + u && (e.request = u, e.triggers.add(u)); + } + } + "sources-change"(e) { + const s = this.$state.sources(), r = e.detail; + this.$state.sources.set(r), m(this, ae, U4).call(this, s, r, e); + } + "source-change"(e) { + var r, i; + e.isQualityChange = ((r = e.originEvent) == null ? void 0 : r.type) === "quality-change"; + const s = e.detail; + m(this, ae, Q1).call(this, e, e.isQualityChange), l(this, rn).set(e.type, e), this.$state.source.set(s), (i = this.el) == null || i.setAttribute("aria-busy", "true"); + } + abort(e) { + const s = l(this, rn).get("source-change"); + s && e.triggers.add(s); + const r = l(this, rn).get("can-load"); + r && !e.triggers.hasType("can-load") && e.triggers.add(r); + } + "load-start"(e) { + const s = l(this, rn).get("source-change"); + s && e.triggers.add(s); + } + error(e) { + this.$state.error.set(e.detail); + const s = l(this, rn).get("abort"); + s && e.triggers.add(s); + } + "loaded-metadata"(e) { + const s = l(this, rn).get("load-start"); + s && e.triggers.add(s); + } + "loaded-data"(e) { + const s = l(this, rn).get("load-start"); + s && e.triggers.add(s); + } + "can-play"(e) { + var r; + const s = l(this, rn).get("loaded-metadata"); + s && e.triggers.add(s), m(this, ae, J1).call(this, e.detail), (r = this.el) == null || r.setAttribute("aria-busy", "false"); + } + "can-play-through"(e) { + m(this, ae, J1).call(this, e.detail); + const s = l(this, rn).get("can-play"); + s && e.triggers.add(s); + } + "duration-change"(e) { + const { live: s, intrinsicDuration: r, providedDuration: i, clipEndTime: a, ended: o } = this.$state, c = e.detail; + if (!s()) { + const u = Number.isNaN(c) ? 0 : c; + r.set(u), o() && m(this, ae, t0).call(this, e); + } + (i() > 0 || a() > 0) && e.stopImmediatePropagation(); + } + progress(e) { + const { buffered: s, seekable: r } = this.$state, { buffered: i, seekable: a } = e.detail, o = Rl(i), c = i.length !== s().length, u = o !== Rl(s()), f = Rl(a), p = a.length !== r().length, g = f !== Rl(r()); + (c || u) && s.set(i), (p || g) && r.set(a); + } + play(e) { + const { + paused: s, + autoPlayError: r, + ended: i, + autoPlaying: a, + playsInline: o, + pointer: c, + muted: u, + viewType: f, + live: p, + userBehindLiveEdge: g + } = this.$state; + if (m(this, ae, e0).call(this), !s()) { + e.stopImmediatePropagation(); + return; + } + e.autoPlay = a(); + const y = l(this, rn).get("waiting"); + y && e.triggers.add(y), m(this, ae, xn).call(this, "media-play-request", e), l(this, rn).set("play", e), s.set(!1), r.set(null), e.autoPlay && (this.handle( + this.createEvent("auto-play", { + detail: { muted: u() }, + trigger: e + }) + ), a.set(!1)), (i() || l(this, xs).replaying) && (l(this, xs).replaying = !1, i.set(!1), this.handle(this.createEvent("replay", { trigger: e }))), !o() && f() === "video" && c() === "coarse" && l(this, Ot).remote.enterFullscreen("prefer-media", e), p() && !g() && l(this, Ot).remote.seekToLiveEdge(e); + } + "play-fail"(e) { + const { muted: s, autoPlaying: r } = this.$state, i = l(this, rn).get("play"); + i && e.triggers.add(i), m(this, ae, xn).call(this, "media-play-request", e); + const { paused: a, playing: o } = this.$state; + a.set(!0), o.set(!1), m(this, ae, ho).call(this), l(this, rn).set("play-fail", e), e.autoPlay && (this.handle( + this.createEvent("auto-play-fail", { + detail: { + muted: s(), + error: e.detail + }, + trigger: e + }) + ), r.set(!1)); + } + playing(e) { + const s = l(this, rn).get("play"), r = l(this, rn).get("seeked"); + s ? e.triggers.add(s) : r && e.triggers.add(r), setTimeout(() => m(this, ae, ho).call(this), 0); + const { + paused: i, + playing: a, + live: o, + liveSyncPosition: c, + seekableEnd: u, + started: f, + currentTime: p, + seeking: g, + ended: y + } = this.$state; + if (i.set(!1), a.set(!0), g.set(!1), y.set(!1), l(this, xs).looping) { + l(this, xs).looping = !1; + return; + } + if (o() && !f() && p() === 0) { + const v = c() ?? u() - 2; + Number.isFinite(v) && l(this, Ot).$provider().setCurrentTime(v); + } + this.started(e); + } + started(e) { + const { started: s } = this.$state; + s() || (s.set(!0), this.handle(this.createEvent("started", { trigger: e }))); + } + pause(e) { + var a; + (a = this.el) != null && a.isConnected || P(this, No, !0), m(this, ae, xn).call(this, "media-pause-request", e); + const s = l(this, rn).get("seeked"); + s && e.triggers.add(s); + const { paused: r, playing: i } = this.$state; + r.set(!0), i.set(!1), l(this, rc) && setTimeout(() => { + this.handle(this.createEvent("end", { trigger: e })), P(this, rc, !1); + }, 0), m(this, ae, ho).call(this); + } + "time-change"(e) { + if (l(this, xs).looping) { + e.stopImmediatePropagation(); + return; + } + let { waiting: s, played: r, clipEndTime: i, realCurrentTime: a, currentTime: o } = this.$state, c = e.detail, u = i(); + a.set(c), m(this, ae, q4).call(this), s.set(!1); + for (const f of l(this, Ot).textTracks) + f[lt.updateActiveCues](c, e); + u > 0 && c >= u && (P(this, rc, !0), this.dispatch("media-pause-request", { trigger: e })), m(this, ae, z4).call(this), this.dispatch("time-update", { + detail: { currentTime: o(), played: r() }, + trigger: e + }); + } + "audio-gain-change"(e) { + var a; + const { storage: s } = l(this, Ot), { canPlay: r, audioGain: i } = this.$state; + i.set(e.detail), m(this, ae, xn).call(this, "media-audio-gain-change-request", e), r() && ((a = s == null ? void 0 : s.setAudioGain) == null || a.call(s, i())); + } + "volume-change"(e) { + var c, u; + const { storage: s } = l(this, Ot), { volume: r, muted: i, canPlay: a } = this.$state, o = e.detail; + r.set(o.volume), i.set(o.muted || o.volume === 0), m(this, ae, xn).call(this, "media-volume-change-request", e), m(this, ae, xn).call(this, o.muted ? "media-mute-request" : "media-unmute-request", e), a() && ((c = s == null ? void 0 : s.setVolume) == null || c.call(s, r()), (u = s == null ? void 0 : s.setMuted) == null || u.call(s, i())); + } + seeked(e) { + const { seeking: s, currentTime: r, realCurrentTime: i, paused: a, seekableEnd: o, ended: c, live: u } = this.$state; + if (l(this, xs).seeking) + s.set(!0), e.stopImmediatePropagation(); + else if (s()) { + const f = l(this, rn).get("waiting"); + f && e.triggers.add(f); + const p = l(this, rn).get("seeking"); + p && !e.triggers.has(p) && e.triggers.add(p), a() && m(this, ae, n0).call(this), s.set(!1), i.set(e.detail), m(this, ae, xn).call(this, "media-seek-request", e); + const g = e == null ? void 0 : e.originEvent; + g != null && g.isTrusted && !(g instanceof MessageEvent) && !/seek/.test(g.type) && this.started(e); + } + u() || (Math.floor(r()) !== Math.floor(o()) ? c.set(!1) : this.end(e)); + } + waiting(e) { + l(this, ac) || l(this, xs).seeking || (e.stopImmediatePropagation(), P(this, Ea, e), l(this, nd).call(this)); + } + end(e) { + const { loop: s, ended: r } = this.$state; + if (!(!s() && r())) { + if (s()) { + setTimeout(() => { + requestAnimationFrame(() => { + m(this, ae, e0).call(this, e), this.dispatch("media-loop-request", { trigger: e }); + }); + }, 10); + return; + } + setTimeout(() => m(this, ae, H4).call(this, e), 0); + } + } + "fullscreen-change"(e) { + const s = e.detail; + this.$state.fullscreen.set(s), m(this, ae, xn).call(this, s ? "media-enter-fullscreen-request" : "media-exit-fullscreen-request", e); + } + "fullscreen-error"(e) { + m(this, ae, xn).call(this, "media-enter-fullscreen-request", e), m(this, ae, xn).call(this, "media-exit-fullscreen-request", e); + } + "orientation-change"(e) { + const s = e.detail.lock; + m(this, ae, xn).call(this, s ? "media-orientation-lock-request" : "media-orientation-unlock-request", e); + } + "picture-in-picture-change"(e) { + const s = e.detail; + this.$state.pictureInPicture.set(s), m(this, ae, xn).call(this, s ? "media-enter-pip-request" : "media-exit-pip-request", e); + } + "picture-in-picture-error"(e) { + m(this, ae, xn).call(this, "media-enter-pip-request", e), m(this, ae, xn).call(this, "media-exit-pip-request", e); + } + "title-change"(e) { + e.trigger && (e.stopImmediatePropagation(), this.$state.inferredTitle.set(e.detail)); + } + "poster-change"(e) { + e.trigger && (e.stopImmediatePropagation(), this.$state.inferredPoster.set(e.detail)); + } +} +xs = new WeakMap(), Ot = new WeakMap(), rn = new WeakMap(), rc = new WeakMap(), ed = new WeakMap(), ic = new WeakMap(), ac = new WeakMap(), Ea = new WeakMap(), No = new WeakMap(), ae = new WeakSet(), R4 = function() { + l(this, No) && (requestAnimationFrame(() => { + this.scope && l(this, Ot).remote.play(new Nt("dom-connect")); + }), P(this, No, !1)); +}, I4 = function() { + var e; + l(this, No) || (P(this, No, !this.$state.paused()), (e = l(this, Ot).$provider()) == null || e.pause()); +}, ho = function() { + m(this, ae, n0).call(this), P(this, rc, !1), l(this, xs).replaying = !1, l(this, xs).looping = !1, P(this, ac, !1), P(this, Ea, void 0), l(this, rn).clear(); +}, xn = function(e, s) { + const r = l(this, xs).queue.serve(e); + r && (s.request = r, s.triggers.add(r)); +}, O4 = function() { + m(this, ae, pg).call(this), m(this, ae, Y1).call(this); + const e = l(this, Ot).textTracks; + new Dt(e).add("add", m(this, ae, pg).bind(this)).add("remove", m(this, ae, pg).bind(this)).add("mode-change", m(this, ae, Y1).bind(this)); +}, M4 = function() { + const e = l(this, Ot).qualities; + new Dt(e).add("add", m(this, ae, Z1).bind(this)).add("remove", m(this, ae, Z1).bind(this)).add("change", m(this, ae, j4).bind(this)).add("auto-change", m(this, ae, F4).bind(this)).add("readonly-change", m(this, ae, V4).bind(this)); +}, D4 = function() { + const e = l(this, Ot).audioTracks; + new Dt(e).add("add", m(this, ae, K1).bind(this)).add("remove", m(this, ae, K1).bind(this)).add("change", m(this, ae, L4).bind(this)); +}, pg = function(e) { + const { textTracks: s } = this.$state; + s.set(l(this, Ot).textTracks.toArray()), this.dispatch("text-tracks-change", { + detail: s(), + trigger: e + }); +}, Y1 = function(e) { + e && m(this, ae, xn).call(this, "media-text-track-change-request", e); + const s = l(this, Ot).textTracks.selected, { textTrack: r } = this.$state; + r() !== s && (r.set(s), this.dispatch("text-track-change", { + detail: s, + trigger: e + })); +}, K1 = function(e) { + const { audioTracks: s } = this.$state; + s.set(l(this, Ot).audioTracks.toArray()), this.dispatch("audio-tracks-change", { + detail: s(), + trigger: e + }); +}, L4 = function(e) { + const { audioTrack: s } = this.$state; + s.set(l(this, Ot).audioTracks.selected), e && m(this, ae, xn).call(this, "media-audio-track-change-request", e), this.dispatch("audio-track-change", { + detail: s(), + trigger: e + }); +}, Z1 = function(e) { + const { qualities: s } = this.$state; + s.set(l(this, Ot).qualities.toArray()), this.dispatch("qualities-change", { + detail: s(), + trigger: e + }); +}, j4 = function(e) { + const { quality: s } = this.$state; + s.set(l(this, Ot).qualities.selected), e && m(this, ae, xn).call(this, "media-quality-change-request", e), this.dispatch("quality-change", { + detail: s(), + trigger: e + }); +}, F4 = function() { + const { qualities: e } = l(this, Ot), s = e.auto; + this.$state.autoQuality.set(s), s || m(this, ae, mg).call(this); +}, td = new WeakMap(), X1 = function() { + m(this, ae, mg).call(this), P(this, td, Z(() => { + const { qualities: e } = l(this, Ot), { mediaWidth: s, mediaHeight: r } = this.$state, i = s(), a = r(); + if (i === 0 || a === 0) return; + let o = null, c = 1 / 0; + for (const u of e) { + const f = Math.abs(u.width - i) + Math.abs(u.height - a); + f < c && (c = f, o = u); + } + o && e[bt.select]( + o, + !0, + new Nt("resize", { detail: { width: i, height: a } }) + ); + })); +}, mg = function() { + var e; + (e = l(this, td)) == null || e.call(this), P(this, td, null); +}, V4 = function() { + this.$state.canSetQuality.set(!l(this, Ot).qualities.readonly); +}, B4 = function() { + const { canSetVolume: e, isGoogleCastConnected: s } = this.$state; + if (s()) { + e.set(!1); + return; + } + vZ().then(e.set); +}, U4 = function(e, s, r) { + let { qualities: i } = l(this, Ot), a = !1, o = !1; + for (const c of e) { + if (!h1(c)) continue; + if (!s.some((f) => f.src === c.src)) { + const f = i.getBySrc(c.src); + f && (i[bt.remove](f, r), o = !0); + } + } + o && !i.length && (this.$state.savedState.set(null), i[bt.reset](r)); + for (const c of s) { + if (!h1(c) || i.getBySrc(c.src)) continue; + const u = { + id: c.id ?? c.height + "p", + bitrate: null, + codec: null, + ...c, + selected: !1 + }; + i[bt.add](u, r), a = !0; + } + a && !i[sr.enableAuto] && (m(this, ae, X1).call(this), i[sr.enableAuto] = m(this, ae, X1).bind(this), i[sr.setAuto](!0, r)); +}, Q1 = function(e, s = !1) { + const { audioTracks: r, qualities: i } = l(this, Ot); + if (!s) { + P(this, ed, []), P(this, ic, [-1, -1]), r[bt.reset](e), i[bt.reset](e), uS(this.$state, s), m(this, ae, ho).call(this); + return; + } + uS(this.$state, s), m(this, ae, ho).call(this); +}, J1 = function(e) { + const { seekable: s, buffered: r, intrinsicDuration: i, canPlay: a } = this.$state; + a.set(!0), r.set(e.buffered), s.set(e.seekable); + const o = Rl(e.seekable) ?? 1 / 0; + i.set(o); +}, e0 = function(e) { + if (!pe(l(this, Ot).$provider)) return; + const { ended: r, seekableStart: i, clipEndTime: a, currentTime: o, realCurrentTime: c, duration: u } = this.$state, f = r() || c() < i() || a() > 0 && c() >= a() || Math.abs(o() - u()) < 0.1; + return f && this.dispatch("media-seek-request", { + detail: i(), + trigger: e + }), f; +}, q4 = function() { + const { currentTime: e, played: s, paused: r } = this.$state; + r() || (P(this, ic, CZ( + l(this, ed), + l(this, ic), + e() + )), s.set(new og(l(this, ed)))); +}, // Called to update time again incase duration precision has changed. +t0 = function(e) { + const { clipStartTime: s, clipEndTime: r, duration: i } = this.$state; + s() > 0 || r() > 0 || this.handle( + this.createEvent("time-change", { + detail: i(), + trigger: e + }) + ); +}, z4 = function() { + var i; + const { storage: e } = l(this, Ot), { canPlay: s, realCurrentTime: r } = this.$state; + s() && ((i = e == null ? void 0 : e.setTime) == null || i.call(e, r())); +}, nd = new WeakMap(), H4 = function(e) { + var c; + const { storage: s } = l(this, Ot), { paused: r, seeking: i, ended: a, duration: o } = this.$state; + m(this, ae, t0).call(this, e), r() || this.dispatch("pause", { trigger: e }), i() && this.dispatch("seeked", { + detail: o(), + trigger: e + }), a.set(!0), m(this, ae, ho).call(this), (c = s == null ? void 0 : s.setTime) == null || c.call(s, o(), !0), this.dispatch("ended", { + trigger: e + }); +}, n0 = function() { + l(this, nd).cancel(), this.$state.waiting.set(!1); +}; +var It, W4, G4, yQ, Y4, K4, Z4, X4, Q4, J4, e5, t5, n5, s5, r5, i5, a5, o5; +class gQ extends Kc { + constructor() { + super(...arguments); + S(this, It); + } + onSetup() { + if (m(this, It, W4).call(this), Se) return; + const e = [ + m(this, It, Y4), + m(this, It, Z4), + m(this, It, s5), + m(this, It, r5), + m(this, It, Q4), + m(this, It, e5), + m(this, It, t5), + m(this, It, i5), + m(this, It, o5), + m(this, It, a5), + m(this, It, X4), + m(this, It, n5), + m(this, It, J4), + m(this, It, G4), + m(this, It, K4) + ]; + for (const s of e) + Z(s.bind(this)); + } +} +It = new WeakSet(), W4 = function() { + var r; + const e = { + duration: "providedDuration", + loop: "providedLoop", + poster: "providedPoster", + streamType: "providedStreamType", + title: "providedTitle", + viewType: "providedViewType" + }, s = /* @__PURE__ */ new Set([ + "currentTime", + "paused", + "playbackRate", + "volume" + ]); + for (const i of Object.keys(this.$props)) + s.has(i) || (r = this.$state[e[i] ?? i]) == null || r.set(this.$props[i]()); + this.$state.muted.set(this.$props.muted() || this.$props.volume() === 0); +}, // Sync "provided" props with internal state. Provided props are used to differentiate from +// provider inferred values. +G4 = function() { + const { viewType: e, streamType: s, title: r, poster: i, loop: a } = this.$props, o = this.$state; + o.providedPoster.set(i()), o.providedStreamType.set(s()), o.providedViewType.set(e()), o.providedTitle.set(r()), o.providedLoop.set(a()); +}, yQ = function() { +}, Y4 = function() { + const { artist: e, artwork: s } = this.$props; + this.$state.artist.set(e()), this.$state.artwork.set(s()); +}, K4 = function() { + const { title: e } = this.$state; + this.dispatch("title-change", { detail: e() }); +}, Z4 = function() { + const e = this.$props.autoPlay() || this.$props.autoplay(); + this.$state.autoPlay.set(e), this.dispatch("auto-play-change", { detail: e }); +}, X4 = function() { + const e = this.$state.loop(); + this.dispatch("loop-change", { detail: e }); +}, Q4 = function() { + const e = this.$props.controls(); + this.$state.controls.set(e); +}, J4 = function() { + const { poster: e } = this.$state; + this.dispatch("poster-change", { detail: e() }); +}, e5 = function() { + const e = this.$props.crossOrigin() ?? this.$props.crossorigin(), s = e === !0 ? "" : e; + this.$state.crossOrigin.set(s); +}, t5 = function() { + const { duration: e } = this.$props; + this.dispatch("media-duration-change-request", { + detail: e() + }); +}, n5 = function() { + const e = this.$props.playsInline() || this.$props.playsinline(); + this.$state.playsInline.set(e), this.dispatch("plays-inline-change", { detail: e }); +}, s5 = function() { + const { clipStartTime: e } = this.$props; + this.dispatch("media-clip-start-change-request", { + detail: e() + }); +}, r5 = function() { + const { clipEndTime: e } = this.$props; + this.dispatch("media-clip-end-change-request", { + detail: e() + }); +}, i5 = function() { + this.dispatch("live-change", { detail: this.$state.live() }); +}, a5 = function() { + this.$state.liveEdgeTolerance.set(this.$props.liveEdgeTolerance()), this.$state.minLiveDVRWindow.set(this.$props.minLiveDVRWindow()); +}, o5 = function() { + this.dispatch("live-edge-change", { detail: this.$state.liveEdge() }); +}; +const bS = ["play", "pause", "seekforward", "seekbackward", "seekto"]; +var Hi, l5, c5, u5, d5; +class vQ extends Kc { + constructor() { + super(...arguments); + S(this, Hi); + } + onConnect() { + Z(m(this, Hi, c5).bind(this)), Z(m(this, Hi, u5).bind(this)); + const e = m(this, Hi, d5).bind(this); + for (const s of bS) + navigator.mediaSession.setActionHandler(s, e); + ft(m(this, Hi, l5).bind(this)); + } +} +Hi = new WeakSet(), l5 = function() { + for (const e of bS) + navigator.mediaSession.setActionHandler(e, null); +}, c5 = function() { + const { title: e, artist: s, artwork: r, poster: i } = this.$state; + navigator.mediaSession.metadata = new MediaMetadata({ + title: e(), + artist: s(), + artwork: r() ?? [{ src: i() }] + }); +}, u5 = function() { + const { canPlay: e, paused: s } = this.$state; + navigator.mediaSession.playbackState = e() ? s() ? "paused" : "playing" : "none"; +}, d5 = function(e) { + const s = new Nt("media-session-action", { detail: e }); + switch (e.action) { + case "play": + this.dispatch("media-play-request", { trigger: s }); + break; + case "pause": + this.dispatch("media-pause-request", { trigger: s }); + break; + case "seekto": + case "seekforward": + case "seekbackward": + this.dispatch("media-seek-request", { + detail: zs(e.seekTime) ? e.seekTime : this.$state.currentTime() + (e.seekOffset ?? (e.action === "seekforward" ? 10 : -10)), + trigger: s + }); + break; + } +}; +let wy = He(!1); +Se || (dn(document, "pointerdown", () => { + wy.set(!1); +}), dn(document, "keydown", (n) => { + n.metaKey || n.altKey || n.ctrlKey || wy.set(!0); +})); +var $o, Wi, h5, f5, p5, m5; +class hi extends mr { + constructor() { + super(...arguments); + S(this, Wi); + S(this, $o, He(!1)); + } + onConnect(e) { + Z(() => { + const s = new Dt(e); + if (!wy()) { + l(this, $o).set(!1), $m(e, !1), s.add("pointerenter", m(this, Wi, p5).bind(this)).add("pointerleave", m(this, Wi, m5).bind(this)); + return; + } + const r = document.activeElement === e; + l(this, $o).set(r), $m(e, r), s.add("focus", m(this, Wi, h5).bind(this)).add("blur", m(this, Wi, f5).bind(this)); + }); + } + focused() { + return l(this, $o).call(this); + } +} +$o = new WeakMap(), Wi = new WeakSet(), h5 = function() { + l(this, $o).set(!0), $m(this.el, !0); +}, f5 = function() { + l(this, $o).set(!1), $m(this.el, !1); +}, p5 = function() { + wS(this.el, !0); +}, m5 = function() { + wS(this.el, !1); +}; +function $m(n, t) { + Ze(n, "data-focus", t), Ze(n, "data-hocus", t); +} +function wS(n, t) { + Ze(n, "data-hocus", t), Ze(n, "data-hover", t); +} +var Ri, ss, oc, rs, ve, Ks, gg, sd, s0, r0, y5, v5, b5, Yh, i0, w5, a0, x5, o0, C5, l0, _5, c0, S5, u0, E5, k5, T5, A5; +let g5 = (Ri = class extends yt { + constructor() { + super(); + S(this, ve); + S(this, ss); + S(this, oc); + S(this, rs); + U(this, "canPlayQueue", new x4()); + U(this, "remoteControl"); + S(this, sd, !1); + /** + * Controls the screen orientation of the current browser window and dispatches orientation + * change events on the player. + */ + U(this, "orientation"); + new gQ(); + const e = { + player: this, + qualities: new fX(), + audioTracks: new rX(), + storage: null, + $provider: He(null), + $providerSetup: He(!1), + $props: this.$props, + $state: this.$state + }; + e.remote = this.remoteControl = new WZ( + void 0 + ), e.remote.setPlayer(this), e.textTracks = new uX(), e.textTracks[lt.crossOrigin] = this.$state.crossOrigin, e.textRenderers = new cX(e), e.ariaKeys = {}, P(this, ss, e), dr(Gp, e), this.orientation = new gy(), new hi(), new wX(e); + const s = new fQ(); + P(this, oc, new mQ(s, e)), P(this, rs, new uQ(l(this, oc), s, e)), e.delegate = new aQ(l(this, oc).handle.bind(l(this, oc)), e), e.notify = e.delegate.notify.bind(e.delegate), typeof navigator < "u" && "mediaSession" in navigator && new vQ(), new yS("load", this.startLoading.bind(this)), new yS("posterLoad", this.startLoadingPoster.bind(this)); + } + onSetup() { + m(this, ve, v5).call(this), Z(m(this, ve, y5).bind(this)), Z(m(this, ve, x5).bind(this)), Z(m(this, ve, w5).bind(this)), Z(m(this, ve, _5).bind(this)), Z(m(this, ve, C5).bind(this)), Z(m(this, ve, E5).bind(this)), Z(m(this, ve, S5).bind(this)); + } + onAttach(e) { + e.setAttribute("data-media-player", ""), Yt(e, "tabindex", "0"), Yt(e, "role", "region"), Z(m(this, ve, T5).bind(this)), Se ? m(this, ve, s0).call(this) : Z(m(this, ve, s0).bind(this)), Se ? m(this, ve, r0).call(this) : Z(m(this, ve, r0).bind(this)), dn(e, "find-media-player", m(this, ve, b5).bind(this)); + } + onConnect(e) { + y$ && Ze(e, "data-iphone", ""); + const s = window.matchMedia("(pointer: coarse)"); + m(this, ve, i0).call(this, s), s.onchange = m(this, ve, i0).bind(this); + const r = new ResizeObserver(wl(m(this, ve, Yh).bind(this))); + r.observe(e), Z(m(this, ve, Yh).bind(this)), this.dispatch("media-player-connect", { + detail: this, + bubbles: !0, + composed: !0 + }), ft(() => { + r.disconnect(), s.onchange = null; + }); + } + onDestroy() { + l(this, ss).player = null, this.canPlayQueue.reset(); + } + /** + * The current media provider. + */ + get provider() { + return l(this, ve, Ks); + } + /** + * Media controls settings. + */ + get controls() { + return l(this, rs).controls; + } + set controls(e) { + l(this, ve, gg).controls.set(e); + } + /** + * The title of the current media. + */ + get title() { + return pe(this.$state.title); + } + set title(e) { + if (l(this, sd)) { + P(this, sd, !1); + return; + } + l(this, ve, gg).title.set(e); + } + /** + * A list of all `VideoQuality` objects representing the set of available video renditions. + * + * @see {@link https://vidstack.io/docs/player/api/video-quality} + */ + get qualities() { + return l(this, ss).qualities; + } + /** + * A list of all `AudioTrack` objects representing the set of available audio tracks. + * + * @see {@link https://vidstack.io/docs/player/api/audio-tracks} + */ + get audioTracks() { + return l(this, ss).audioTracks; + } + /** + * A list of all `TextTrack` objects representing the set of available text tracks. + * + * @see {@link https://vidstack.io/docs/player/api/text-tracks} + */ + get textTracks() { + return l(this, ss).textTracks; + } + /** + * Contains text renderers which are responsible for loading, parsing, and rendering text + * tracks. + */ + get textRenderers() { + return l(this, ss).textRenderers; + } + get duration() { + return this.$state.duration(); + } + set duration(e) { + l(this, ve, gg).duration.set(e); + } + get paused() { + return pe(this.$state.paused); + } + set paused(e) { + m(this, ve, a0).call(this, e); + } + get muted() { + return pe(this.$state.muted); + } + set muted(e) { + m(this, ve, o0).call(this, e); + } + get currentTime() { + return pe(this.$state.currentTime); + } + set currentTime(e) { + m(this, ve, l0).call(this, e); + } + get volume() { + return pe(this.$state.volume); + } + set volume(e) { + m(this, ve, c0).call(this, e); + } + get playbackRate() { + return pe(this.$state.playbackRate); + } + set playbackRate(e) { + m(this, ve, u0).call(this, e); + } + /** + * Begins/resumes playback of the media. If this method is called programmatically before the + * user has interacted with the player, the promise may be rejected subject to the browser's + * autoplay policies. This method will throw if called before media is ready for playback. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/play} + */ + async play(e) { + return l(this, rs).play(e); + } + /** + * Pauses playback of the media. This method will throw if called before media is ready for + * playback. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/pause} + */ + async pause(e) { + return l(this, rs).pause(e); + } + /** + * Attempts to display the player in fullscreen. The promise will resolve if successful, and + * reject if not. This method will throw if any fullscreen API is _not_ currently available. + * + * @see {@link https://vidstack.io/docs/player/api/fullscreen} + */ + async enterFullscreen(e, s) { + return l(this, rs).enterFullscreen(e, s); + } + /** + * Attempts to display the player inline by exiting fullscreen. This method will throw if any + * fullscreen API is _not_ currently available. + * + * @see {@link https://vidstack.io/docs/player/api/fullscreen} + */ + async exitFullscreen(e, s) { + return l(this, rs).exitFullscreen(e, s); + } + /** + * Attempts to display the player in picture-in-picture mode. This method will throw if PIP is + * not supported. This method will also return a `PictureInPictureWindow` if the current + * provider supports it. + * + * @see {@link https://vidstack.io/docs/player/api/picture-in-picture} + */ + enterPictureInPicture(e) { + return l(this, rs).enterPictureInPicture(e); + } + /** + * Attempts to display the player in inline by exiting picture-in-picture mode. This method + * will throw if not supported. + * + * @see {@link https://vidstack.io/docs/player/api/picture-in-picture} + */ + exitPictureInPicture(e) { + return l(this, rs).exitPictureInPicture(e); + } + /** + * Sets the current time to the live edge (i.e., `duration`). This is a no-op for non-live + * streams and will throw if called before media is ready for playback. + * + * @see {@link https://vidstack.io/docs/player/api/live} + */ + seekToLiveEdge(e) { + l(this, rs).seekToLiveEdge(e); + } + /** + * Called when media can begin loading. Calling this method will trigger the initial provider + * loading process. Calling it more than once has no effect. + * + * @see {@link https://vidstack.io/docs/player/core-concepts/loading#load-strategies} + */ + startLoading(e) { + l(this, ss).notify("can-load", void 0, e); + } + /** + * Called when the poster image can begin loading. Calling it more than once has no effect. + * + * @see {@link https://vidstack.io/docs/player/core-concepts/loading#load-strategies} + */ + startLoadingPoster(e) { + l(this, ss).notify("can-load-poster", void 0, e); + } + /** + * Request Apple AirPlay picker to open. + */ + requestAirPlay(e) { + return l(this, rs).requestAirPlay(e); + } + /** + * Request Google Cast device picker to open. The Google Cast framework will be loaded if it + * hasn't yet. + */ + requestGoogleCast(e) { + return l(this, rs).requestGoogleCast(e); + } + /** + * Set the audio gain, amplifying volume and enabling a maximum volume above 100%. + * + * @see {@link https://vidstack.io/docs/player/api/audio-gain} + */ + setAudioGain(e, s) { + return l(this, rs).setAudioGain(e, s); + } + destroy() { + super.destroy(), l(this, ss).remote.setPlayer(null), this.dispatch("destroy"); + } +}, ss = new WeakMap(), oc = new WeakMap(), rs = new WeakMap(), ve = new WeakSet(), Ks = function() { + return l(this, ss).$provider(); +}, gg = function() { + return this.$props; +}, sd = new WeakMap(), s0 = function() { + const e = this.$el, { title: s, live: r, viewType: i, providedTitle: a } = this.$state, o = r(), c = rh(i()), u = c !== "Unknown" ? `${o ? "Live " : ""}${c}` : o ? "Live" : "Media", f = s(); + Ze( + this.el, + "aria-label", + `${u} Player` + (f ? ` - ${f}` : "") + ), !Se && (e != null && e.hasAttribute("title")) && (P(this, sd, !0), e == null || e.removeAttribute("title")); +}, r0 = function() { + const e = this.orientation.landscape ? "landscape" : "portrait"; + this.$state.orientation.set(e), Ze(this.el, "data-orientation", e), m(this, ve, Yh).call(this); +}, y5 = function() { + this.$state.canPlay() && l(this, ve, Ks) ? this.canPlayQueue.start() : this.canPlayQueue.stop(); +}, v5 = function() { + if (Ri[Db]) { + this.setAttributes(Ri[Db]); + return; + } + const e = { + "data-load": function() { + return this.$props.load(); + }, + "data-captions": function() { + const r = this.$state.textTrack(); + return !!r && As(r); + }, + "data-ios-controls": function() { + return this.$state.iOSControls(); + }, + "data-controls": function() { + return this.controls.showing; + }, + "data-buffering": function() { + const { canLoad: r, canPlay: i, waiting: a } = this.$state; + return r() && (!i() || a()); + }, + "data-error": function() { + const { error: r } = this.$state; + return !!r(); + }, + "data-autoplay-error": function() { + const { autoPlayError: r } = this.$state; + return !!r(); + } + }, s = { + autoPlay: "autoplay", + canAirPlay: "can-airplay", + canPictureInPicture: "can-pip", + pictureInPicture: "pip", + playsInline: "playsinline", + remotePlaybackState: "remote-state", + remotePlaybackType: "remote-type", + isAirPlayConnected: "airplay", + isGoogleCastConnected: "google-cast" + }; + for (const r of rQ) { + const i = "data-" + (s[r] ?? Wa(r)); + e[i] = function() { + return this.$state[r](); + }; + } + delete e.title, Ri[Db] = e, this.setAttributes(e); +}, b5 = function(e) { + e.detail(this); +}, Yh = function() { + if (Se || !this.el) return; + const e = this.el.clientWidth, s = this.el.clientHeight; + this.$state.width.set(e), this.$state.height.set(s), Ps(this.el, "--player-width", e + "px"), Ps(this.el, "--player-height", s + "px"); +}, i0 = function(e) { + if (Se) return; + const s = e.matches ? "coarse" : "fine"; + Ze(this.el, "data-pointer", s), this.$state.pointer.set(s), m(this, ve, Yh).call(this); +}, w5 = function() { + m(this, ve, a0).call(this, this.$props.paused()); +}, a0 = function(e) { + e ? this.canPlayQueue.enqueue("paused", () => l(this, rs).pause()) : this.canPlayQueue.enqueue("paused", () => l(this, rs).play()); +}, x5 = function() { + m(this, ve, o0).call(this, this.$props.muted()); +}, o0 = function(e) { + this.canPlayQueue.enqueue("muted", () => { + l(this, ve, Ks) && l(this, ve, Ks).setMuted(e); + }); +}, C5 = function() { + m(this, ve, l0).call(this, this.$props.currentTime()); +}, l0 = function(e) { + this.canPlayQueue.enqueue("currentTime", () => { + const { currentTime: s } = this.$state; + e !== pe(s) && pe(() => { + if (!l(this, ve, Ks)) return; + const r = A$(e, this.$state); + Number.isFinite(r) && l(this, ve, Ks).setCurrentTime(r); + }); + }); +}, _5 = function() { + m(this, ve, c0).call(this, this.$props.volume()); +}, c0 = function(e) { + const s = I2(0, e, 1); + this.canPlayQueue.enqueue("volume", () => { + l(this, ve, Ks) && l(this, ve, Ks).setVolume(s); + }); +}, S5 = function() { + m(this, ve, u0).call(this, this.$props.playbackRate()); +}, u0 = function(e) { + this.canPlayQueue.enqueue("rate", () => { + var s, r; + l(this, ve, Ks) && ((r = (s = l(this, ve, Ks)).setPlaybackRate) == null || r.call(s, e)); + }); +}, E5 = function() { + m(this, ve, k5).call(this, this.$props.playsInline()); +}, k5 = function(e) { + this.canPlayQueue.enqueue("playsinline", () => { + var s, r; + l(this, ve, Ks) && ((r = (s = l(this, ve, Ks)).setPlaysInline) == null || r.call(s, e)); + }); +}, T5 = function() { + var r; + let e = this.$props.storage(), s = Le(e) ? new YZ() : e; + if (s != null && s.onChange) { + const { source: i } = this.$state, a = Le(e) ? e : (r = this.el) == null ? void 0 : r.id, o = za(m(this, ve, A5).bind(this)); + Z(() => s.onChange(i(), o(), a || void 0)); + } + l(this, ss).storage = s, l(this, ss).textTracks.setStorage(s), ft(() => { + var i; + (i = s == null ? void 0 : s.onDestroy) == null || i.call(s), l(this, ss).storage = null, l(this, ss).textTracks.setStorage(null); + }); +}, A5 = function() { + const { clipStartTime: e, clipEndTime: s } = this.$props, { source: r } = this.$state, i = r(); + return i.src ? `${i.src}:${e()}:${s()}` : null; +}, U(Ri, "props", iQ), U(Ri, "state", Wp), Ri); +const an = g5.prototype; +Kt(an, "canPlayQueue"); +Kt(an, "remoteControl"); +Kt(an, "provider"); +Kt(an, "controls"); +Kt(an, "orientation"); +Kt(an, "title"); +Kt(an, "qualities"); +Kt(an, "audioTracks"); +Kt(an, "textTracks"); +Kt(an, "textRenderers"); +Kt(an, "duration"); +Kt(an, "paused"); +Kt(an, "muted"); +Kt(an, "currentTime"); +Kt(an, "volume"); +Kt(an, "playbackRate"); +Yn(an, "play"); +Yn(an, "pause"); +Yn(an, "enterFullscreen"); +Yn(an, "exitFullscreen"); +Yn(an, "enterPictureInPicture"); +Yn(an, "exitPictureInPicture"); +Yn(an, "seekToLiveEdge"); +Yn(an, "startLoading"); +Yn(an, "startLoadingPoster"); +Yn(an, "requestAirPlay"); +Yn(an, "requestGoogleCast"); +Yn(an, "setAudioGain"); +function bQ(n, t) { + return fetch(n, t).then((e) => e.text()).then((e) => /type="static"/.test(e) ? "on-demand" : "live"); +} +function P5(n, t) { + return fetch(n, t).then((e) => e.text()).then((e) => { + const s = wQ(e); + if (s) + return P5( + /^https?:/.test(s) ? s : new URL(s, n).href, + t + ); + const r = /EXT-X-PLAYLIST-TYPE:\s*VOD/.test(e) ? "on-demand" : "live"; + return r === "live" && xQ(e) >= 10 && (/#EXT-X-DVR-ENABLED:\s*true/.test(e) || e.includes("#EXT-X-DISCONTINUITY")) ? "live:dvr" : r; + }); +} +function wQ(n) { + const t = n.match(/#EXT-X-STREAM-INF:[^\n]+(\n[^\n]+)*/g); + return t ? t[0].split(` +`)[1].trim() : null; +} +function xQ(n) { + const t = n.split(` +`); + for (const e of t) + if (e.startsWith("#EXT-X-TARGETDURATION")) { + const s = parseFloat(e.split(":")[1]); + if (!isNaN(s)) + return s; + } + return -1; +} +const d0 = /* @__PURE__ */ new Map(); +var rd, id, Xf, Mt, ka, Rn, N5, $5, h0, f0, p0, R5, I5, O5; +class CQ { + constructor(t, e, s, r = []) { + S(this, Rn); + S(this, rd, !1); + S(this, id); + S(this, Xf); + S(this, Mt); + S(this, ka); + P(this, Xf, t), P(this, Mt, e), P(this, ka, s); + const i = new V1(), a = new $1(), o = new M2(), c = new TX(), u = new sQ(), f = new nQ(), p = [u, f]; + P(this, id, za(() => { + const y = e.$state.remotePlaybackLoader(), v = e.$props.preferNativeHLS() ? [o, c, i, a, ...p, ...r] : [a, o, c, i, ...p, ...r]; + return y ? [y, ...v] : v; + })); + const { $state: g } = e; + g.sources.set(xS(e.$props.src())); + for (const y of g.sources()) { + const v = l(this, id).call(this).find((w) => w.canPlay(y)); + if (!v) continue; + const b = v.mediaType(y); + e.$state.source.set(y), e.$state.mediaType.set(b), e.$state.inferredViewType.set(b), l(this, ka).set(v), P(this, rd, !0); + break; + } + } + connect() { + const t = l(this, ka).call(this); + l(this, rd) && (m(this, Rn, f0).call(this, l(this, Mt).$state.source(), t), m(this, Rn, p0).call(this, t), P(this, rd, !1)), Z(m(this, Rn, N5).bind(this)), Z(m(this, Rn, $5).bind(this)), Z(m(this, Rn, R5).bind(this)), Z(m(this, Rn, I5).bind(this)), Z(m(this, Rn, O5).bind(this)); + } +} +rd = new WeakMap(), id = new WeakMap(), Xf = new WeakMap(), Mt = new WeakMap(), ka = new WeakMap(), Rn = new WeakSet(), N5 = function() { + l(this, Mt).notify("sources-change", [ + ...xS(l(this, Mt).$props.src()), + ...l(this, Xf).call(this) + ]); +}, $5 = function() { + var a; + const { $state: t } = l(this, Mt), e = t.sources(), s = pe(t.source), r = m(this, Rn, h0).call(this, s, e); + if (((a = e[0]) == null ? void 0 : a.src) && !r.src && !r.type) { + const { crossOrigin: o } = t, c = cf(o()), u = new AbortController(); + return Promise.all( + e.map( + (f) => Le(f.src) && f.type === "?" ? fetch(f.src, { + method: "HEAD", + credentials: c, + signal: u.signal + }).then((p) => (f.type = p.headers.get("content-type") || "??", d0.set(f.src, f.type), f)).catch(() => f) : f + ) + ).then((f) => { + if (u.signal.aborted) return; + const p = m(this, Rn, h0).call(this, pe(t.source), f); + ri(), p.src || l(this, Mt).notify("error", { + message: "Failed to load resource.", + code: 4 + }); + }), () => u.abort(); + } + ri(); +}, h0 = function(t, e) { + let s = { src: "", type: "" }, r = null, i = new Nt("sources-change", { detail: { sources: e } }), a = l(this, id).call(this), { started: o, paused: c, currentTime: u, quality: f, savedState: p } = l(this, Mt).$state; + for (const g of e) { + const y = a.find((v) => v.canPlay(g)); + if (y) { + s = g, r = y; + break; + } + } + if (h1(s)) { + const g = f(), y = e.find((v) => v.src === (g == null ? void 0 : g.src)); + pe(o) ? p.set({ + paused: pe(c), + currentTime: pe(u) + }) : p.set(null), y && (s = y, i = new Nt("quality-change", { + detail: { quality: g } + })); + } + return _S(t, s) || m(this, Rn, f0).call(this, s, r, i), r !== pe(l(this, ka)) && m(this, Rn, p0).call(this, r, i), s; +}, f0 = function(t, e, s) { + l(this, Mt).notify("source-change", t, s), l(this, Mt).notify("media-type-change", (e == null ? void 0 : e.mediaType(t)) || "unknown", s); +}, p0 = function(t, e) { + l(this, Mt).$providerSetup.set(!1), l(this, Mt).notify("provider-change", null, e), t && pe(() => { + var s; + return (s = t.preconnect) == null ? void 0 : s.call(t, l(this, Mt)); + }), l(this, ka).set(t), l(this, Mt).notify("provider-loader-change", t, e); +}, R5 = function() { + const t = l(this, Mt).$provider(); + if (!(!t || pe(l(this, Mt).$providerSetup))) { + if (l(this, Mt).$state.canLoad()) { + Dn(() => t.setup(), t.scope), l(this, Mt).$providerSetup.set(!0); + return; + } + pe(() => { + var e; + return (e = t.preconnect) == null ? void 0 : e.call(t); + }); + } +}, I5 = function() { + if (!l(this, Mt).$providerSetup()) return; + const t = l(this, Mt).$provider(), e = l(this, Mt).$state.source(), s = pe(l(this, Mt).$state.crossOrigin), r = pe(l(this, Mt).$props.preferNativeHLS); + if (!_S(t == null ? void 0 : t.currentSrc, e)) { + if (l(this, Mt).$state.canLoad()) { + const i = new AbortController(); + return oh(e) ? (r || !A2()) && P5(e.src, { + credentials: cf(s), + signal: i.signal + }).then((a) => { + l(this, Mt).notify("stream-type-change", a); + }).catch(cr) : $2(e) ? bQ(e.src, { + credentials: cf(s), + signal: i.signal + }).then((a) => { + l(this, Mt).notify("stream-type-change", a); + }).catch(cr) : l(this, Mt).notify("stream-type-change", "on-demand"), pe(() => { + const a = pe(l(this, Mt).$state.preload); + return t == null ? void 0 : t.loadSource(e, a).catch((o) => { + }); + }), () => i.abort(); + } + try { + Le(e.src) && lh(new URL(e.src).origin); + } catch { + } + } +}, O5 = function() { + const t = l(this, ka).call(this), { providedPoster: e, source: s, canLoadPoster: r } = l(this, Mt).$state; + if (!t || !t.loadPoster || !s() || !r() || e()) return; + const i = new AbortController(), a = new Nt("source-change", { detail: s }); + return t.loadPoster(s(), l(this, Mt), i).then((o) => { + l(this, Mt).notify("poster-change", o || "", a); + }).catch(() => { + l(this, Mt).notify("poster-change", "", a); + }), () => { + i.abort(); + }; +}; +function xS(n) { + return (En(n) ? n : [n]).map((t) => Le(t) ? { src: t, type: CS(t) } : { ...t, type: CS(t.src, t.type) }); +} +function CS(n, t) { + return Le(t) && t.length ? t : Le(n) && d0.has(n) ? d0.get(n) : !t && oh({ src: n, type: "" }) ? "application/x-mpegurl" : !t && $2({ src: n, type: "" }) ? "application/dash+xml" : !Le(n) || n.startsWith("blob:") ? "video/object" : n.includes("youtube") || n.includes("youtu.be") ? "video/youtube" : n.includes("vimeo") && !n.includes("progressive_redirect") && !n.includes(".m3u8") ? "video/vimeo" : "?"; +} +function _S(n, t) { + return (n == null ? void 0 : n.src) === (t == null ? void 0 : t.src) && (n == null ? void 0 : n.type) === (t == null ? void 0 : t.type); +} +var Qf, Ro, Jf, Oy, M5; +class _Q { + constructor(t, e) { + S(this, Oy); + S(this, Qf); + S(this, Ro); + S(this, Jf, []); + P(this, Qf, t), P(this, Ro, e), Z(m(this, Oy, M5).bind(this)); + } +} +Qf = new WeakMap(), Ro = new WeakMap(), Jf = new WeakMap(), Oy = new WeakSet(), M5 = function() { + const t = l(this, Qf).call(this); + for (const e of l(this, Jf)) + if (!t.some((s) => s.id === e.id)) { + const s = e.id && l(this, Ro).textTracks.getById(e.id); + s && l(this, Ro).textTracks.remove(s); + } + for (const e of t) { + const s = e.id || Hd.createId(e); + l(this, Ro).textTracks.getById(s) || (e.id = s, l(this, Ro).textTracks.add(e)); + } + P(this, Jf, t); +}; +var Om, Hr, ep, tp, np, ad, od, pr, L5, m0, g0, y0; +let D5 = (Om = class extends yt { + constructor() { + super(...arguments); + S(this, pr); + S(this, Hr); + S(this, ep); + S(this, tp, He([])); + S(this, np, He([])); + S(this, ad, null); + S(this, od, -1); + } + onSetup() { + P(this, Hr, en()), P(this, ep, new CQ( + l(this, tp), + l(this, Hr), + this.$state.loader, + this.$props.loaders() + )); + } + onAttach(e) { + e.setAttribute("data-media-provider", ""); + } + onConnect(e) { + l(this, ep).connect(), new _Q(l(this, np), l(this, Hr)); + const s = new ResizeObserver(wl(m(this, pr, g0).bind(this))); + s.observe(e); + const r = new MutationObserver(m(this, pr, y0).bind(this)); + r.observe(e, { attributes: !0, childList: !0 }), m(this, pr, g0).call(this), m(this, pr, y0).call(this), ft(() => { + s.disconnect(), r.disconnect(); + }); + } + load(e) { + e == null || e.setAttribute("aria-hidden", "true"), window.cancelAnimationFrame(l(this, od)), P(this, od, requestAnimationFrame(() => m(this, pr, L5).call(this, e))), ft(() => { + window.cancelAnimationFrame(l(this, od)); + }); + } + onDestroy() { + P(this, ad, null), m(this, pr, m0).call(this); + } +}, Hr = new WeakMap(), ep = new WeakMap(), tp = new WeakMap(), np = new WeakMap(), ad = new WeakMap(), od = new WeakMap(), pr = new WeakSet(), L5 = function(e) { + if (!this.scope) return; + const s = this.$state.loader(), { $provider: r } = l(this, Hr); + l(this, ad) === s && (s == null ? void 0 : s.target) === e && pe(r) || (m(this, pr, m0).call(this), P(this, ad, s), s && (s.target = e || null), !(!s || !e) && s.load(l(this, Hr)).then((i) => { + this.scope && pe(this.$state.loader) === s && l(this, Hr).notify("provider-change", i); + })); +}, m0 = function() { + var e; + (e = l(this, Hr)) == null || e.notify("provider-change", null); +}, g0 = function() { + if (!this.el) return; + const { player: e, $state: s } = l(this, Hr), r = this.el.offsetWidth, i = this.el.offsetHeight; + e && (s.mediaWidth.set(r), s.mediaHeight.set(i), e.el && (Ps(e.el, "--media-width", r + "px"), Ps(e.el, "--media-height", i + "px"))); +}, y0 = function() { + const e = [], s = [], r = this.el.children; + for (const i of r) + if (!i.hasAttribute("data-vds")) { + if (i instanceof HTMLSourceElement) { + const a = { + id: i.id, + src: i.src, + type: i.type + }; + for (const o of ["id", "src", "width", "height", "bitrate", "codec"]) { + const c = i.getAttribute(`data-${o}`); + Le(c) && (a[o] = /id|src|codec/.test(o) ? c : Number(c)); + } + e.push(a); + } else if (i instanceof HTMLTrackElement) { + const a = { + src: i.src, + kind: i.track.kind, + language: i.srclang, + label: i.label, + default: i.default, + type: i.getAttribute("data-type") + }; + s.push({ + id: i.id || Hd.createId(a), + ...a + }); + } + } + l(this, tp).set(e), l(this, np).set(s), ri(); +}, U(Om, "props", { + loaders: [] +}), U(Om, "state", new to({ + loader: null +})), Om); +const SQ = D5.prototype; +Yn(SQ, "load"); +var Mm, Ei, ld, on, j5, F5, V5, B5, U5, Io, cd, q5, yg, z5, Al; +let EQ = (Mm = class extends yt { + constructor() { + super(...arguments); + S(this, on); + S(this, Ei); + S(this, ld, !1); + S(this, Io, -1); + S(this, cd, -1); + } + onSetup() { + P(this, Ei, en()); + } + onAttach(e) { + e.style.display = "contents"; + } + onConnect(e) { + e.setAttribute("data-media-announcer", ""), Yt(e, "role", "status"), Yt(e, "aria-live", "polite"); + const { busy: s } = this.$state; + this.setAttributes({ + "aria-busy": () => s() ? "true" : null + }), P(this, ld, !0), Z(m(this, on, j5).bind(this)), Z(m(this, on, U5).bind(this)), Z(m(this, on, B5).bind(this)), Z(m(this, on, F5).bind(this)), Z(m(this, on, V5).bind(this)), Z(m(this, on, q5).bind(this)), Z(m(this, on, z5).bind(this)), ri(), P(this, ld, !1); + } +}, Ei = new WeakMap(), ld = new WeakMap(), on = new WeakSet(), j5 = function() { + const { paused: e } = l(this, Ei).$state; + m(this, on, Al).call(this, e() ? "Pause" : "Play"); +}, F5 = function() { + const { fullscreen: e } = l(this, Ei).$state; + m(this, on, Al).call(this, e() ? "Enter Fullscreen" : "Exit Fullscreen"); +}, V5 = function() { + const { pictureInPicture: e } = l(this, Ei).$state; + m(this, on, Al).call(this, e() ? "Enter PiP" : "Exit PiP"); +}, B5 = function() { + const { textTrack: e } = l(this, Ei).$state; + m(this, on, Al).call(this, e() ? "Closed-Captions On" : "Closed-Captions Off"); +}, U5 = function() { + const { muted: e, volume: s, audioGain: r } = l(this, Ei).$state; + m(this, on, Al).call(this, e() || s() === 0 ? "Mute" : `${Math.round(s() * (r() ?? 1) * 100)}% ${m(this, on, yg).call(this, "Volume")}`); +}, Io = new WeakMap(), cd = new WeakMap(), q5 = function() { + const { seeking: e, currentTime: s } = l(this, Ei).$state, r = e(); + l(this, Io) > 0 ? (window.clearTimeout(l(this, cd)), P(this, cd, window.setTimeout(() => { + if (!this.scope) return; + const i = pe(s), a = Math.abs(i - l(this, Io)); + if (a >= 1) { + const o = i >= l(this, Io), c = by(a); + m(this, on, Al).call(this, `${m(this, on, yg).call(this, o ? "Seek Forward" : "Seek Backward")} ${c}`); + } + P(this, Io, -1), P(this, cd, -1); + }, 300))) : r && P(this, Io, pe(s)); +}, yg = function(e) { + var r; + const { translations: s } = this.$props; + return ((r = s == null ? void 0 : s()) == null ? void 0 : r[e || ""]) ?? e; +}, z5 = function() { + const { label: e, busy: s } = this.$state, r = m(this, on, yg).call(this, e()); + if (l(this, ld)) return; + s.set(!0); + const i = window.setTimeout(() => void s.set(!1), 150); + return this.el && Ze(this.el, "aria-label", r), Le(r) && this.dispatch("change", { detail: r }), () => window.clearTimeout(i); +}, Al = function(e) { + const { label: s } = this.$state; + s.set(e); +}, U(Mm, "props", { + translations: null +}), U(Mm, "state", new to({ + label: null, + busy: !1 +})), Mm); +var Ta, Ga, W5, G5, v0; +class H5 extends yt { + constructor() { + super(...arguments); + S(this, Ga); + S(this, Ta); + } + onSetup() { + P(this, Ta, en()), Z(m(this, Ga, G5).bind(this)); + } + onAttach(e) { + const { pictureInPicture: s, fullscreen: r } = l(this, Ta).$state; + Ps(e, "pointer-events", "none"), Yt(e, "role", "group"), this.setAttributes({ + "data-visible": m(this, Ga, v0).bind(this), + "data-fullscreen": r, + "data-pip": s + }), Z(() => { + this.dispatch("change", { detail: m(this, Ga, v0).call(this) }); + }), Z(m(this, Ga, W5).bind(this)), Z(() => { + const i = r(); + for (const a of ["top", "right", "bottom", "left"]) + Ps(e, `padding-${a}`, i && `env(safe-area-inset-${a})`); + }); + } +} +Ta = new WeakMap(), Ga = new WeakSet(), W5 = function() { + if (!this.el) return; + const { nativeControls: e } = l(this, Ta).$state, s = e(); + Ze(this.el, "aria-hidden", s ? "true" : null), Ps(this.el, "display", s ? "none" : null); +}, G5 = function() { + const { controls: e } = l(this, Ta).player, { hideDelay: s, hideOnMouseLeave: r } = this.$props; + e.defaultDelay = s() === 2e3 ? l(this, Ta).$props.controlsDelay() : s(), e.hideOnMouseLeave = r(); +}, v0 = function() { + const { controlsVisible: e } = l(this, Ta).$state; + return e(); +}, U(H5, "props", { + hideDelay: 2e3, + hideOnMouseLeave: !1 +}); +class kQ extends yt { + onAttach(t) { + t.style.pointerEvents || Ps(t, "pointer-events", "auto"); + } +} +var Wr, al, K5, lc, cc, ki, vg; +class Y5 extends mr { + constructor(e) { + super(); + S(this, al); + S(this, Wr); + S(this, lc, -1); + S(this, cc, -1); + S(this, ki, null); + P(this, Wr, e), Z(m(this, al, K5).bind(this)); + } + onDestroy() { + var e; + (e = l(this, ki)) == null || e.call(this), P(this, ki, null); + } + show(e) { + var s, r, i; + m(this, al, vg).call(this), window.cancelAnimationFrame(l(this, cc)), P(this, cc, -1), (s = l(this, ki)) == null || s.call(this), P(this, ki, null), P(this, lc, window.setTimeout(() => { + P(this, lc, -1); + const a = l(this, Wr).content(); + a && a.style.removeProperty("display"), pe(() => l(this, Wr).onChange(!0, e)); + }, ((i = (r = l(this, Wr)).showDelay) == null ? void 0 : i.call(r)) ?? 0)); + } + hide(e) { + m(this, al, vg).call(this), pe(() => l(this, Wr).onChange(!1, e)), P(this, cc, requestAnimationFrame(() => { + var r; + m(this, al, vg).call(this), P(this, cc, -1); + const s = l(this, Wr).content(); + if (s) { + const i = () => { + s.style.display = "none", P(this, ki, null); + }; + if (oX(s)) { + (r = l(this, ki)) == null || r.call(this); + const o = dn(s, "animationend", i, { once: !0 }); + P(this, ki, o); + } else + i(); + } + })); + } +} +Wr = new WeakMap(), al = new WeakSet(), K5 = function() { + const e = l(this, Wr).trigger(); + if (!e) { + this.hide(); + return; + } + const s = this.show.bind(this), r = this.hide.bind(this); + l(this, Wr).listen(e, s, r); +}, lc = new WeakMap(), cc = new WeakMap(), ki = new WeakMap(), vg = function() { + window.clearTimeout(l(this, lc)), P(this, lc, -1); +}; +const Ll = eo(); +let TQ = 0; +var ud, Oo, Mo, sp, Pr, X5, Q5, J5, e7, t7; +class Z5 extends yt { + constructor() { + super(); + S(this, Pr); + S(this, ud, `media-tooltip-${++TQ}`); + S(this, Oo, He(null)); + S(this, Mo, He(null)); + S(this, sp, He(!1)); + new hi(); + const { showDelay: e } = this.$props; + new Y5({ + trigger: l(this, Oo), + content: l(this, Mo), + showDelay: e, + listen(s, r, i) { + Z(() => { + wy() && dn(s, "focus", r), dn(s, "blur", i); + }), new Dt(s).add("touchstart", (a) => a.preventDefault(), { passive: !1 }).add("mouseenter", r).add("mouseleave", i); + }, + onChange: m(this, Pr, t7).bind(this) + }); + } + onAttach(e) { + e.style.setProperty("display", "contents"); + } + onSetup() { + dr(Ll, { + trigger: l(this, Oo), + content: l(this, Mo), + showing: l(this, sp), + attachTrigger: m(this, Pr, X5).bind(this), + detachTrigger: m(this, Pr, Q5).bind(this), + attachContent: m(this, Pr, J5).bind(this), + detachContent: m(this, Pr, e7).bind(this) + }); + } +} +ud = new WeakMap(), Oo = new WeakMap(), Mo = new WeakMap(), sp = new WeakMap(), Pr = new WeakSet(), X5 = function(e) { + var r; + l(this, Oo).set(e); + let s = e.getAttribute("data-media-tooltip"); + s && ((r = this.el) == null || r.setAttribute(`data-media-${s}-tooltip`, "")), Ze(e, "data-describedby", l(this, ud)); +}, Q5 = function(e) { + e.removeAttribute("data-describedby"), e.removeAttribute("aria-describedby"), l(this, Oo).set(null); +}, J5 = function(e) { + e.setAttribute("id", l(this, ud)), e.style.display = "none", Yt(e, "role", "tooltip"), l(this, Mo).set(e); +}, e7 = function(e) { + e.removeAttribute("id"), e.removeAttribute("role"), l(this, Mo).set(null); +}, t7 = function(e) { + const s = l(this, Oo).call(this), r = l(this, Mo).call(this); + s && Ze(s, "aria-describedby", e ? l(this, ud) : null); + for (const i of [this.el, s, r]) + i && Ze(i, "data-visible", e); + l(this, sp).set(e); +}, U(Z5, "props", { + showDelay: 700 +}); +var Vc, n7, b0; +class AQ extends yt { + constructor() { + super(); + S(this, Vc); + new hi(); + } + onConnect(e) { + ft( + O$(() => { + if (!this.connectScope) return; + m(this, Vc, n7).call(this); + const s = Cn(Ll); + ft(() => { + const r = m(this, Vc, b0).call(this); + r && s.detachTrigger(r); + }); + }) + ); + } +} +Vc = new WeakSet(), n7 = function() { + const e = m(this, Vc, b0).call(this), s = Cn(Ll); + e && s.attachTrigger(e); +}, b0 = function() { + const e = this.el.firstElementChild; + return (e == null ? void 0 : e.localName) === "button" || (e == null ? void 0 : e.getAttribute("role")) === "button" ? e : this.el; +}; +var Ya, w0, r7, i7; +class s7 extends yt { + constructor() { + super(); + S(this, Ya); + new hi(); + const { placement: e } = this.$props; + this.setAttributes({ + "data-placement": e + }); + } + onAttach(e) { + m(this, Ya, w0).call(this, e), Object.assign(e.style, { + position: "absolute", + top: 0, + left: 0, + width: "max-content" + }); + } + onConnect(e) { + m(this, Ya, w0).call(this, e); + const s = Cn(Ll); + ft(() => s.detachContent(e)), ft( + O$(() => { + this.connectScope && Z(m(this, Ya, r7).bind(this)); + }) + ); + } +} +Ya = new WeakSet(), w0 = function(e) { + Cn(Ll).attachContent(e); +}, r7 = function() { + const { showing: e } = Cn(Ll); + if (!e()) return; + const { placement: s, offset: r, alignOffset: i } = this.$props; + return M$(this.el, m(this, Ya, i7).call(this), s(), { + offsetVarName: "media-tooltip", + xOffset: i(), + yOffset: r() + }); +}, i7 = function() { + return Cn(Ll).trigger(); +}, U(s7, "props", { + placement: "top center", + offset: 0, + alignOffset: 0 +}); +var Aa, Gi, a7, o7, l7, c7; +class gs extends mr { + constructor(e) { + super(); + S(this, Gi); + S(this, Aa); + P(this, Aa, e), new hi(), e.keyShortcut && new SX(e.keyShortcut); + } + onSetup() { + const { disabled: e } = this.$props; + this.setAttributes({ + "data-pressed": l(this, Aa).isPresssed, + "aria-pressed": m(this, Gi, a7).bind(this), + "aria-disabled": () => e() ? "true" : null + }); + } + onAttach(e) { + Yt(e, "tabindex", "0"), Yt(e, "role", "button"), Yt(e, "type", "button"); + } + onConnect(e) { + const s = hl(e, m(this, Gi, l7).bind(this)); + for (const r of ["click", "touchstart"]) + s.add(r, m(this, Gi, c7).bind(this), { + passive: !0 + }); + } +} +Aa = new WeakMap(), Gi = new WeakSet(), a7 = function() { + return Sf(l(this, Aa).isPresssed()); +}, o7 = function(e) { + DN(l(this, Aa).isPresssed) && l(this, Aa).isPresssed.set((s) => !s); +}, l7 = function(e) { + if (this.$props.disabled() || this.el.hasAttribute("data-disabled")) { + e.preventDefault(), e.stopImmediatePropagation(); + return; + } + e.preventDefault(), (l(this, Aa).onPress ?? m(this, Gi, o7)).call(this, e); +}, c7 = function(e) { + this.$props.disabled() && (e.preventDefault(), e.stopImmediatePropagation()); +}, U(gs, "props", { + disabled: !1 +}); +var zb, rp; +let u7 = (zb = class extends yt { + constructor() { + super(); + S(this, rp, He(!1)); + new gs({ + isPresssed: l(this, rp) + }); + } + /** + * Whether the toggle is currently in a `pressed` state. + */ + get pressed() { + return l(this, rp).call(this); + } +}, rp = new WeakMap(), U(zb, "props", { + disabled: !1, + defaultPressed: !1 +}), zb); +const PQ = u7.prototype; +Kt(PQ, "pressed"); +var Hb, Pa, Yi, d7, h7, f7, p7; +let NQ = (Hb = class extends yt { + constructor() { + super(); + S(this, Yi); + S(this, Pa); + new gs({ + isPresssed: m(this, Yi, h7).bind(this), + onPress: m(this, Yi, d7).bind(this) + }); + } + onSetup() { + P(this, Pa, en()); + const { canAirPlay: e, isAirPlayConnected: s } = l(this, Pa).$state; + this.setAttributes({ + "data-active": s, + "data-supported": e, + "data-state": m(this, Yi, f7).bind(this), + "aria-hidden": us(() => !e()) + }); + } + onAttach(e) { + e.setAttribute("data-media-tooltip", "airplay"), Cl(e, m(this, Yi, p7).bind(this)); + } +}, Pa = new WeakMap(), Yi = new WeakSet(), d7 = function(e) { + l(this, Pa).remote.requestAirPlay(e); +}, h7 = function() { + const { remotePlaybackType: e, remotePlaybackState: s } = l(this, Pa).$state; + return e() === "airplay" && s() !== "disconnected"; +}, f7 = function() { + const { remotePlaybackType: e, remotePlaybackState: s } = l(this, Pa).$state; + return e() === "airplay" && s(); +}, p7 = function() { + const { remotePlaybackState: e } = l(this, Pa).$state; + return `AirPlay ${e()}`; +}, U(Hb, "props", gs.props), Hb); +var Wb, Na, Ki, m7, g7, y7, v7; +let $Q = (Wb = class extends yt { + constructor() { + super(); + S(this, Ki); + S(this, Na); + new gs({ + isPresssed: m(this, Ki, g7).bind(this), + onPress: m(this, Ki, m7).bind(this) + }); + } + onSetup() { + P(this, Na, en()); + const { canGoogleCast: e, isGoogleCastConnected: s } = l(this, Na).$state; + this.setAttributes({ + "data-active": s, + "data-supported": e, + "data-state": m(this, Ki, y7).bind(this), + "aria-hidden": us(() => !e()) + }); + } + onAttach(e) { + e.setAttribute("data-media-tooltip", "google-cast"), Cl(e, m(this, Ki, v7).bind(this)); + } +}, Na = new WeakMap(), Ki = new WeakSet(), m7 = function(e) { + l(this, Na).remote.requestGoogleCast(e); +}, g7 = function() { + const { remotePlaybackType: e, remotePlaybackState: s } = l(this, Na).$state; + return e() === "google-cast" && s() !== "disconnected"; +}, y7 = function() { + const { remotePlaybackType: e, remotePlaybackState: s } = l(this, Na).$state; + return e() === "google-cast" && s(); +}, v7 = function() { + const { remotePlaybackState: e } = l(this, Na).$state; + return `Google Cast ${e()}`; +}, U(Wb, "props", gs.props), Wb); +var Gb, uc, Bc, b7, x0; +let RQ = (Gb = class extends yt { + constructor() { + super(); + S(this, Bc); + S(this, uc); + new gs({ + isPresssed: m(this, Bc, x0).bind(this), + keyShortcut: "togglePaused", + onPress: m(this, Bc, b7).bind(this) + }); + } + onSetup() { + P(this, uc, en()); + const { paused: e, ended: s } = l(this, uc).$state; + this.setAttributes({ + "data-paused": e, + "data-ended": s + }); + } + onAttach(e) { + e.setAttribute("data-media-tooltip", "play"), Cl(e, "Play"); + } +}, uc = new WeakMap(), Bc = new WeakSet(), b7 = function(e) { + const s = l(this, uc).remote; + m(this, Bc, x0).call(this) ? s.pause(e) : s.play(e); +}, x0 = function() { + const { paused: e } = l(this, uc).$state; + return !e(); +}, U(Gb, "props", gs.props), Gb); +var Yb, dc, Zi, w7, C0, _0; +let IQ = (Yb = class extends yt { + constructor() { + super(); + S(this, Zi); + S(this, dc); + new gs({ + isPresssed: m(this, Zi, C0).bind(this), + keyShortcut: "toggleCaptions", + onPress: m(this, Zi, w7).bind(this) + }); + } + onSetup() { + P(this, dc, en()), this.setAttributes({ + "data-active": m(this, Zi, C0).bind(this), + "data-supported": () => !m(this, Zi, _0).call(this), + "aria-hidden": us(m(this, Zi, _0).bind(this)) + }); + } + onAttach(e) { + e.setAttribute("data-media-tooltip", "caption"), Cl(e, "Captions"); + } +}, dc = new WeakMap(), Zi = new WeakSet(), w7 = function(e) { + l(this, dc).remote.toggleCaptions(e); +}, C0 = function() { + const { textTrack: e } = l(this, dc).$state, s = e(); + return !!s && As(s); +}, _0 = function() { + const { hasCaptions: e } = l(this, dc).$state; + return !e(); +}, U(Yb, "props", gs.props), Yb); +var Kb, Do, Ka, x7, S0, C7; +let OQ = (Kb = class extends yt { + constructor() { + super(); + S(this, Ka); + S(this, Do); + new gs({ + isPresssed: m(this, Ka, S0).bind(this), + keyShortcut: "toggleFullscreen", + onPress: m(this, Ka, x7).bind(this) + }); + } + onSetup() { + P(this, Do, en()); + const { fullscreen: e } = l(this, Do).$state, s = m(this, Ka, C7).bind(this); + this.setAttributes({ + "data-active": e, + "data-supported": s, + "aria-hidden": us(() => !s()) + }); + } + onAttach(e) { + e.setAttribute("data-media-tooltip", "fullscreen"), Cl(e, "Fullscreen"); + } +}, Do = new WeakMap(), Ka = new WeakSet(), x7 = function(e) { + const s = l(this, Do).remote, r = this.$props.target(); + m(this, Ka, S0).call(this) ? s.exitFullscreen(r, e) : s.enterFullscreen(r, e); +}, S0 = function() { + const { fullscreen: e } = l(this, Do).$state; + return e(); +}, C7 = function() { + const { canFullscreen: e } = l(this, Do).$state; + return e(); +}, U(Kb, "props", { + ...gs.props, + target: "prefer-media" +}), Kb); +var Zb, hc, ji, _7, bg, S7; +let MQ = (Zb = class extends yt { + constructor() { + super(); + S(this, ji); + S(this, hc); + new gs({ + isPresssed: m(this, ji, bg).bind(this), + keyShortcut: "toggleMuted", + onPress: m(this, ji, _7).bind(this) + }); + } + onSetup() { + P(this, hc, en()), this.setAttributes({ + "data-muted": m(this, ji, bg).bind(this), + "data-state": m(this, ji, S7).bind(this) + }); + } + onAttach(e) { + e.setAttribute("data-media-mute-button", ""), e.setAttribute("data-media-tooltip", "mute"), Cl(e, "Mute"); + } +}, hc = new WeakMap(), ji = new WeakSet(), _7 = function(e) { + const s = l(this, hc).remote; + m(this, ji, bg).call(this) ? s.unmute(e) : s.mute(e); +}, bg = function() { + const { muted: e, volume: s } = l(this, hc).$state; + return e() || s() === 0; +}, S7 = function() { + const { muted: e, volume: s } = l(this, hc).$state, r = s(); + if (e() || r === 0) return "muted"; + if (r >= 0.5) return "high"; + if (r < 0.5) return "low"; +}, U(Zb, "props", gs.props), Zb); +var Xb, Lo, Za, E7, E0, k7; +let DQ = (Xb = class extends yt { + constructor() { + super(); + S(this, Za); + S(this, Lo); + new gs({ + isPresssed: m(this, Za, E0).bind(this), + keyShortcut: "togglePictureInPicture", + onPress: m(this, Za, E7).bind(this) + }); + } + onSetup() { + P(this, Lo, en()); + const { pictureInPicture: e } = l(this, Lo).$state, s = m(this, Za, k7).bind(this); + this.setAttributes({ + "data-active": e, + "data-supported": s, + "aria-hidden": us(() => !s()) + }); + } + onAttach(e) { + e.setAttribute("data-media-tooltip", "pip"), Cl(e, "PiP"); + } +}, Lo = new WeakMap(), Za = new WeakSet(), E7 = function(e) { + const s = l(this, Lo).remote; + m(this, Za, E0).call(this) ? s.exitPictureInPicture(e) : s.enterPictureInPicture(e); +}, E0 = function() { + const { pictureInPicture: e } = l(this, Lo).$state; + return e(); +}, k7 = function() { + const { canPictureInPicture: e } = l(this, Lo).$state; + return e(); +}, U(Xb, "props", gs.props), Xb); +var Qb, jo, gl, T7, A7, P7; +let LQ = (Qb = class extends yt { + constructor() { + super(); + S(this, gl); + S(this, jo); + new hi(); + } + onSetup() { + P(this, jo, en()); + const { seeking: e } = l(this, jo).$state, { seconds: s } = this.$props, r = m(this, gl, T7).bind(this); + this.setAttributes({ + seconds: s, + "data-seeking": e, + "data-supported": r, + "aria-hidden": us(() => !r()) + }); + } + onAttach(e) { + Yt(e, "tabindex", "0"), Yt(e, "role", "button"), Yt(e, "type", "button"), e.setAttribute("data-media-tooltip", "seek"), Cl(e, m(this, gl, A7).bind(this)); + } + onConnect(e) { + hl(e, m(this, gl, P7).bind(this)); + } +}, jo = new WeakMap(), gl = new WeakSet(), T7 = function() { + const { canSeek: e } = l(this, jo).$state; + return e(); +}, A7 = function() { + const { seconds: e } = this.$props; + return `Seek ${e() > 0 ? "forward" : "backward"} ${e()} seconds`; +}, P7 = function(e) { + const { seconds: s, disabled: r } = this.$props; + if (r()) return; + const { currentTime: i } = l(this, jo).$state, a = i() + s(); + l(this, jo).remote.seek(a, e); +}, U(Qb, "props", { + disabled: !1, + seconds: 30 +}), Qb); +var Jb, fc, My, N7; +let jQ = (Jb = class extends yt { + constructor() { + super(); + S(this, My); + S(this, fc); + new hi(); + } + onSetup() { + P(this, fc, en()); + const { disabled: e } = this.$props, { live: s, liveEdge: r } = l(this, fc).$state, i = () => !s(); + this.setAttributes({ + "data-edge": r, + "data-hidden": i, + "aria-disabled": us(() => e() || r()), + "aria-hidden": us(i) + }); + } + onAttach(e) { + Yt(e, "tabindex", "0"), Yt(e, "role", "button"), Yt(e, "type", "button"), e.setAttribute("data-media-tooltip", "live"); + } + onConnect(e) { + hl(e, m(this, My, N7).bind(this)); + } +}, fc = new WeakMap(), My = new WeakSet(), N7 = function(e) { + const { disabled: s } = this.$props, { liveEdge: r } = l(this, fc).$state; + s() || r() || l(this, fc).remote.seekToLiveEdge(e); +}, U(Jb, "props", { + disabled: !1 +}), Jb); +const Zc = new to({ + min: 0, + max: 100, + value: 0, + step: 1, + pointerValue: 0, + focused: !1, + dragging: !1, + pointing: !1, + hidden: !1, + get active() { + return this.dragging || this.focused || this.pointing; + }, + get fillRate() { + return SS(this.min, this.max, this.value); + }, + get fillPercent() { + return this.fillRate * 100; + }, + get pointerRate() { + return SS(this.min, this.max, this.pointerValue); + }, + get pointerPercent() { + return this.pointerRate * 100; + } +}); +function SS(n, t, e) { + const s = t - n, r = e - n; + return s > 0 ? r / s : 0; +} +var dd, Fo, Dy, R7; +class $7 extends mr { + constructor(e) { + super(); + S(this, Dy); + S(this, dd); + S(this, Fo); + P(this, dd, e); + } + onConnect(e) { + P(this, Fo, new IntersectionObserver((s) => { + var r, i; + (i = (r = l(this, dd)).callback) == null || i.call(r, s, l(this, Fo)); + }, l(this, dd))), l(this, Fo).observe(e), ft(m(this, Dy, R7).bind(this)); + } +} +dd = new WeakMap(), Fo = new WeakMap(), Dy = new WeakSet(), /** + * Disconnect any active intersection observers. + */ +R7 = function() { + var e; + (e = l(this, Fo)) == null || e.disconnect(), P(this, Fo, void 0); +}; +const L2 = eo(), uf = eo(); +function FQ(n, t, e, s) { + return I2(n, ls(e, y1(s)), t); +} +function VQ(n, t, e, s) { + const r = I2(0, e, 1), i = t - n, a = i * r, o = a / s, c = s * Math.round(o); + return n + c; +} +const jb = { + Left: -1, + ArrowLeft: -1, + Up: 1, + ArrowUp: 1, + Right: 1, + ArrowRight: 1, + Down: -1, + ArrowDown: -1 +}; +var is, Vo, hd, $e, I7, Bo, Gr, $a, O7, M7, D7, L7, j7, wg, fo, Kh, F7, V7, B7, U7, xg, k0, fd, Ra, q7, z7, T0, A0, H7, W7, Ly; +class BQ extends mr { + constructor(e, s) { + super(); + S(this, $e); + S(this, is); + S(this, Vo); + S(this, hd); + S(this, Bo, null); + S(this, Gr, null); + S(this, $a, null); + // ------------------------------------------------------------------------------------------- + // Keyboard Events + // ------------------------------------------------------------------------------------------- + S(this, fd); + S(this, Ra, !1); + S(this, Ly, xl( + (e) => { + m(this, $e, fo).call(this, m(this, $e, Kh).call(this, e), e); + }, + 20, + { leading: !0 } + )); + P(this, is, e), P(this, Vo, s); + } + onSetup() { + Ha(uf) && P(this, hd, Cn(uf)); + } + onConnect(e) { + Z(m(this, $e, D7).bind(this, e)), Z(m(this, $e, L7).bind(this, e)), l(this, is).swipeGesture && Z(m(this, $e, I7).bind(this)); + } +} +is = new WeakMap(), Vo = new WeakMap(), hd = new WeakMap(), $e = new WeakSet(), I7 = function() { + var s; + const { pointer: e } = l(this, Vo).$state; + if (e() !== "coarse" || !l(this, is).swipeGesture()) { + P(this, Bo, null); + return; + } + P(this, Bo, (s = l(this, Vo).player.el) == null ? void 0 : s.querySelector( + "media-provider,[data-media-provider]" + )), l(this, Bo) && new Dt(l(this, Bo)).add("touchstart", m(this, $e, O7).bind(this), { + passive: !0 + }).add("touchmove", m(this, $e, M7).bind(this), { passive: !1 }); +}, Bo = new WeakMap(), Gr = new WeakMap(), $a = new WeakMap(), O7 = function(e) { + P(this, Gr, e.touches[0]); +}, M7 = function(e) { + if (ii(l(this, Gr)) || O2(e)) return; + const s = e.touches[0], r = s.clientX - l(this, Gr).clientX, i = s.clientY - l(this, Gr).clientY, a = this.$state.dragging(); + !a && Math.abs(i) > 5 || a || (e.preventDefault(), Math.abs(r) > 20 && (P(this, Gr, s), P(this, $a, this.$state.value()), m(this, $e, xg).call(this, l(this, $a), e))); +}, D7 = function(e) { + const { hidden: s } = this.$props; + dn(e, "focus", m(this, $e, j7).bind(this)), !(s() || l(this, is).isDisabled()) && new Dt(e).add("keyup", m(this, $e, z7).bind(this)).add("keydown", m(this, $e, q7).bind(this)).add("pointerenter", m(this, $e, F7).bind(this)).add("pointermove", m(this, $e, V7).bind(this)).add("pointerleave", m(this, $e, B7).bind(this)).add("pointerdown", m(this, $e, U7).bind(this)); +}, L7 = function(e) { + l(this, is).isDisabled() || !this.$state.dragging() || new Dt(document).add("pointerup", m(this, $e, H7).bind(this), { capture: !0 }).add("pointermove", l(this, Ly).bind(this)).add("touchmove", m(this, $e, W7).bind(this), { + passive: !1 + }); +}, j7 = function() { + m(this, $e, fo).call(this, this.$state.value()); +}, wg = function(e, s) { + var f, p, g, y; + const { value: r, min: i, max: a, dragging: o } = this.$state, c = Math.max(i(), Math.min(e, a())); + r.set(c); + const u = this.createEvent("value-change", { detail: c, trigger: s }); + if (this.dispatch(u), (p = (f = l(this, is)).onValueChange) == null || p.call(f, u), o()) { + const v = this.createEvent("drag-value-change", { detail: c, trigger: s }); + this.dispatch(v), (y = (g = l(this, is)).onDragValueChange) == null || y.call(g, v); + } +}, fo = function(e, s) { + const { pointerValue: r, dragging: i } = this.$state; + r.set(e), this.dispatch("pointer-value-change", { detail: e, trigger: s }), i() && m(this, $e, wg).call(this, e, s); +}, Kh = function(e) { + let s, r = this.el.getBoundingClientRect(), { min: i, max: a } = this.$state; + if (this.$props.orientation() === "vertical") { + const { bottom: o, height: c } = r; + s = (o - e.clientY) / c; + } else if (l(this, Gr) && zs(l(this, $a))) { + const { width: o } = l(this, Bo).getBoundingClientRect(), c = (e.clientX - l(this, Gr).clientX) / o, u = a() - i(), f = u * Math.abs(c); + s = (c < 0 ? l(this, $a) - f : l(this, $a) + f) / u; + } else { + const { left: o, width: c } = r; + s = (e.clientX - o) / c; + } + return Math.max( + i(), + Math.min( + a(), + l(this, is).roundValue( + VQ(i(), a(), s, l(this, is).getStep()) + ) + ) + ); +}, F7 = function(e) { + this.$state.pointing.set(!0); +}, V7 = function(e) { + const { dragging: s } = this.$state; + s() || m(this, $e, fo).call(this, m(this, $e, Kh).call(this, e), e); +}, B7 = function(e) { + this.$state.pointing.set(!1); +}, U7 = function(e) { + if (e.button !== 0) return; + const s = m(this, $e, Kh).call(this, e); + m(this, $e, xg).call(this, s, e), m(this, $e, fo).call(this, s, e); +}, xg = function(e, s) { + var a, o, c, u; + const { dragging: r } = this.$state; + if (r()) return; + r.set(!0), l(this, Vo).remote.pauseControls(s); + const i = this.createEvent("drag-start", { detail: e, trigger: s }); + this.dispatch(i), (o = (a = l(this, is)).onDragStart) == null || o.call(a, i), (u = (c = l(this, hd)) == null ? void 0 : c.onDragStart) == null || u.call(c); +}, k0 = function(e, s) { + var a, o, c, u; + const { dragging: r } = this.$state; + if (!r()) return; + r.set(!1), l(this, Vo).remote.resumeControls(s); + const i = this.createEvent("drag-end", { detail: e, trigger: s }); + this.dispatch(i), (o = (a = l(this, is)).onDragEnd) == null || o.call(a, i), P(this, Gr, null), P(this, $a, null), (u = (c = l(this, hd)) == null ? void 0 : c.onDragEnd) == null || u.call(c); +}, fd = new WeakMap(), Ra = new WeakMap(), q7 = function(e) { + if (!Object.keys(jb).includes(e.key)) return; + const { key: r } = e, i = m(this, $e, T0).call(this, e); + if (!ii(i)) { + m(this, $e, fo).call(this, i, e), m(this, $e, wg).call(this, i, e); + return; + } + const a = m(this, $e, A0).call(this, e); + l(this, Ra) || (P(this, Ra, r === l(this, fd)), !this.$state.dragging() && l(this, Ra) && m(this, $e, xg).call(this, a, e)), m(this, $e, fo).call(this, a, e), P(this, fd, r); +}, z7 = function(e) { + if (!Object.keys(jb).includes(e.key) || !ii(m(this, $e, T0).call(this, e))) return; + const r = l(this, Ra) ? this.$state.pointerValue() : m(this, $e, A0).call(this, e); + m(this, $e, wg).call(this, r, e), m(this, $e, k0).call(this, r, e), P(this, fd, ""), P(this, Ra, !1); +}, T0 = function(e) { + let s = e.key, { min: r, max: i } = this.$state; + return s === "Home" || s === "PageUp" ? r() : s === "End" || s === "PageDown" ? i() : !e.metaKey && /^[0-9]$/.test(s) ? (i() - r()) / 10 * Number(s) : null; +}, A0 = function(e) { + var E, x; + const { key: s, shiftKey: r } = e; + e.preventDefault(), e.stopPropagation(); + const { shiftKeyMultiplier: i } = this.$props, { min: a, max: o, value: c, pointerValue: u } = this.$state, f = l(this, is).getStep(), p = l(this, is).getKeyStep(), g = r ? p * i() : p, y = Number(jb[s]), v = g * y, b = l(this, Ra) ? u() : ((x = (E = l(this, is)).getValue) == null ? void 0 : x.call(E)) ?? c(), w = (b + v) / f; + return Math.max(a(), Math.min(o(), Number((f * w).toFixed(3)))); +}, // ------------------------------------------------------------------------------------------- +// Document (Pointer Events) +// ------------------------------------------------------------------------------------------- +H7 = function(e) { + if (e.button !== 0) return; + e.preventDefault(), e.stopImmediatePropagation(); + const s = m(this, $e, Kh).call(this, e); + m(this, $e, fo).call(this, s, e), m(this, $e, k0).call(this, s, e); +}, W7 = function(e) { + e.preventDefault(); +}, Ly = new WeakMap(); +const Wd = eo(() => ({})); +var ip, Ds, ap, op, Wn, G7, Y7, K7, Z7, X7, Q7, J7, P0, jy; +class hr extends mr { + constructor(e) { + super(); + S(this, Wn); + S(this, ip); + S(this, Ds); + S(this, ap, He(!0)); + S(this, op, He(!0)); + S(this, jy, wl((e, s) => { + var r, i; + (r = this.el) == null || r.style.setProperty("--slider-fill", e + "%"), (i = this.el) == null || i.style.setProperty("--slider-pointer", s + "%"); + })); + P(this, Ds, e); + } + onSetup() { + P(this, ip, en()); + const e = new hi(); + e.attach(this), this.$state.focused = e.focused.bind(e), Ha(Wd) || dr(Wd, { + default: "value" + }), dr(L2, { + orientation: this.$props.orientation, + disabled: l(this, Ds).isDisabled, + preview: He(null) + }), Z(m(this, Wn, K7).bind(this)), Z(m(this, Wn, Z7).bind(this)), Z(m(this, Wn, X7).bind(this)), m(this, Wn, J7).call(this), new BQ(l(this, Ds), l(this, ip)).attach(this), new $7({ + callback: m(this, Wn, G7).bind(this) + }).attach(this); + } + onAttach(e) { + Yt(e, "role", "slider"), Yt(e, "tabindex", "0"), Yt(e, "autocomplete", "off"), Se ? m(this, Wn, P0).call(this) : Z(m(this, Wn, P0).bind(this)); + } + onConnect(e) { + ft(R$(e, l(this, ap).set)), Z(m(this, Wn, Y7).bind(this)); + } +} +ip = new WeakMap(), Ds = new WeakMap(), ap = new WeakMap(), op = new WeakMap(), Wn = new WeakSet(), G7 = function(e) { + l(this, op).set(e[0].isIntersecting); +}, // ------------------------------------------------------------------------------------------- +// Watch +// ------------------------------------------------------------------------------------------- +Y7 = function() { + const { hidden: e } = this.$props; + this.$state.hidden.set(e() || !l(this, ap).call(this) || !l(this, op).bind(this)); +}, K7 = function() { + const { dragging: e, value: s, min: r, max: i } = this.$state; + pe(e) || s.set(FQ(r(), i(), s(), l(this, Ds).getStep())); +}, Z7 = function() { + this.$state.step.set(l(this, Ds).getStep()); +}, X7 = function() { + if (!l(this, Ds).isDisabled()) return; + const { dragging: e, pointing: s } = this.$state; + e.set(!1), s.set(!1); +}, // ------------------------------------------------------------------------------------------- +// ARIA +// ------------------------------------------------------------------------------------------- +Q7 = function() { + return Sf(l(this, Ds).isDisabled()); +}, // ------------------------------------------------------------------------------------------- +// Attributes +// ------------------------------------------------------------------------------------------- +J7 = function() { + const { orientation: e } = this.$props, { dragging: s, active: r, pointing: i } = this.$state; + this.setAttributes({ + "data-dragging": s, + "data-pointing": i, + "data-active": r, + "aria-disabled": m(this, Wn, Q7).bind(this), + "aria-valuemin": l(this, Ds).aria.valueMin ?? this.$state.min, + "aria-valuemax": l(this, Ds).aria.valueMax ?? this.$state.max, + "aria-valuenow": l(this, Ds).aria.valueNow, + "aria-valuetext": l(this, Ds).aria.valueText, + "aria-orientation": e + }); +}, P0 = function() { + const { fillPercent: e, pointerPercent: s } = this.$state; + l(this, jy).call(this, ls(e(), 3), ls(s(), 3)); +}, jy = new WeakMap(), U(hr, "props", { + hidden: !1, + disabled: !1, + step: 1, + keyStep: 1, + orientation: "horizontal", + shiftKeyMultiplier: 5 +}); +var Xi, eI, tI, nI, sI; +class Lc extends yt { + constructor() { + super(); + S(this, Xi); + new hr({ + getStep: this.$props.step, + getKeyStep: this.$props.keyStep, + roundValue: Math.round, + isDisabled: this.$props.disabled, + aria: { + valueNow: m(this, Xi, eI).bind(this), + valueText: m(this, Xi, tI).bind(this) + } + }); + } + onSetup() { + Z(m(this, Xi, nI).bind(this)), Z(m(this, Xi, sI).bind(this)); + } +} +Xi = new WeakSet(), // ------------------------------------------------------------------------------------------- +// Props +// ------------------------------------------------------------------------------------------- +eI = function() { + const { value: e } = this.$state; + return Math.round(e()); +}, tI = function() { + const { value: e, max: s } = this.$state; + return ls(e() / s() * 100, 2) + "%"; +}, // ------------------------------------------------------------------------------------------- +// Watch +// ------------------------------------------------------------------------------------------- +nI = function() { + const { value: e } = this.$props; + this.$state.value.set(e()); +}, sI = function() { + const { min: e, max: s } = this.$props; + this.$state.min.set(e()), this.$state.max.set(s()); +}, U(Lc, "props", { + ...hr.props, + min: 0, + max: 100, + value: 0 +}), U(Lc, "state", Zc); +const ua = /* @__PURE__ */ new Map(), Rm = /* @__PURE__ */ new Map(); +var lp, pd, cp, bn, rI, iI, $0, R0, I0, O0, aI, Cg; +const u3 = class u3 { + constructor(t, e, s) { + S(this, bn); + S(this, lp); + S(this, pd); + S(this, cp); + U(this, "$images", He([])); + P(this, pd, t), P(this, cp, e), P(this, lp, s), Z(m(this, bn, rI).bind(this)); + } + static create(t, e) { + const s = en(); + return new u3(t, e, s); + } +}; +lp = new WeakMap(), pd = new WeakMap(), cp = new WeakMap(), bn = new WeakSet(), rI = function() { + var s; + const { canLoad: t } = l(this, lp).$state; + if (!t()) return; + const e = l(this, pd).call(this); + if (e) { + if (Le(e) && ua.has(e)) { + const r = ua.get(e); + if (ua.delete(e), ua.set(e, r), ua.size > 99) { + const i = ua.keys().next().value; + ua.delete(i); + } + this.$images.set(ua.get(e)); + } else if (Le(e)) { + const r = l(this, cp).call(this), i = e + "::" + r; + if (!Rm.has(i)) { + const a = new Promise(async (o, c) => { + try { + const u = await fetch(e, { + credentials: cf(r) + }); + if (u.headers.get("content-type") === "application/json") { + const p = await u.json(); + if (En(p)) + if (p[0] && "text" in p[0]) + o(m(this, bn, R0).call(this, p)); + else { + for (let g = 0; g < p.length; g++) { + const y = p[g]; + ca(jN(y), !1), ca( + "url" in y && Le(y.url), + !1 + ), ca( + "startTime" in y && zs(y.startTime), + !1 + ); + } + o(p); + } + else + o(m(this, bn, $0).call(this, p)); + return; + } + import("./prod-DTLJXtPo.js").then((p) => p.d).then(async ({ parseResponse: p }) => { + try { + const { cues: g } = await p(u); + o(m(this, bn, R0).call(this, g)); + } catch (g) { + c(g); + } + }); + } catch (u) { + c(u); + } + }).then((o) => (ua.set(i, o), o)).catch((o) => { + m(this, bn, Cg).call(this, e, o); + }).finally(() => { + Le(i) && Rm.delete(i); + }); + Rm.set(i, a); + } + (s = Rm.get(i)) == null || s.then((a) => { + this.$images.set(a || []); + }); + } else if (En(e)) + try { + this.$images.set(m(this, bn, iI).call(this, e)); + } catch (r) { + m(this, bn, Cg).call(this, e, r); + } + else + try { + this.$images.set(m(this, bn, $0).call(this, e)); + } catch (r) { + m(this, bn, Cg).call(this, e, r); + } + return () => { + this.$images.set([]); + }; + } +}, iI = function(t) { + const e = m(this, bn, I0).call(this); + return t.map((s, r) => (ca( + s.url && Le(s.url) + ), ca( + "startTime" in s && zs(s.startTime) + ), { + ...s, + url: Le(s.url) ? m(this, bn, O0).call(this, s.url, e) : s.url + })); +}, $0 = function(t) { + var a; + ca(Le(t.url)), ca(En(t.tiles) && ((a = t.tiles) == null ? void 0 : a.length)); + const e = new URL(t.url), s = [], r = "tile_width" in t ? t.tile_width : t.tileWidth, i = "tile_height" in t ? t.tile_height : t.tileHeight; + for (const o of t.tiles) + s.push({ + url: e, + startTime: "start" in o ? o.start : o.startTime, + width: r, + height: i, + coords: { x: o.x, y: o.y } + }); + return s; +}, R0 = function(t) { + for (let r = 0; r < t.length; r++) { + const i = t[r]; + ca( + "startTime" in i && zs(i.startTime) + ), ca( + "text" in i && Le(i.text) + ); + } + const e = [], s = m(this, bn, I0).call(this); + for (const r of t) { + const [i, a] = r.text.split("#"), o = m(this, bn, aI).call(this, a); + e.push({ + url: m(this, bn, O0).call(this, i, s), + startTime: r.startTime, + endTime: r.endTime, + width: o == null ? void 0 : o.w, + height: o == null ? void 0 : o.h, + coords: o && zs(o.x) && zs(o.y) ? { x: o.x, y: o.y } : void 0 + }); + } + return e; +}, I0 = function() { + let t = pe(l(this, pd)); + return !Le(t) || !/^https?:/.test(t) ? location.href : t; +}, O0 = function(t, e) { + return /^https?:/.test(t) ? new URL(t) : new URL(t, e); +}, aI = function(t) { + if (!t) return {}; + const [e, s] = t.split("="), r = s == null ? void 0 : s.split(","), i = {}; + if (!e || !r) + return null; + for (let a = 0; a < e.length; a++) { + const o = +r[a]; + isNaN(o) || (i[e[a]] = o); + } + return i; +}, Cg = function(t, e) { +}; +let N0 = u3; +var Dm, md, gd, $t, lI, M0, cI, uI, dI, hI, D0, fI, pI, L0, po, mI; +let oI = (Dm = class extends yt { + constructor() { + super(...arguments); + S(this, $t); + U(this, "media"); + S(this, md); + S(this, gd, []); + } + onSetup() { + this.media = en(), P(this, md, N0.create(this.$props.src, this.$state.crossOrigin)), m(this, $t, M0).call(this), this.setAttributes({ + "data-loading": m(this, $t, hI).bind(this), + "data-error": m(this, $t, D0).bind(this), + "data-hidden": this.$state.hidden, + "aria-hidden": us(this.$state.hidden) + }); + } + onConnect(e) { + Z(m(this, $t, lI).bind(this)), Z(m(this, $t, fI).bind(this)), Z(m(this, $t, M0).bind(this)), Z(m(this, $t, cI).bind(this)), Z(m(this, $t, pI).bind(this)), Z(m(this, $t, L0).bind(this)); + } + getTime() { + return this.$props.time(); + } +}, md = new WeakMap(), gd = new WeakMap(), $t = new WeakSet(), lI = function() { + const e = this.$state.img(); + e && new Dt(e).add("load", m(this, $t, uI).bind(this)).add("error", m(this, $t, dI).bind(this)); +}, M0 = function() { + const { crossOrigin: e } = this.$props, { crossOrigin: s } = this.$state, { crossOrigin: r } = this.media.$state, i = e() !== null ? e() : r(); + s.set(i === !0 ? "anonymous" : i); +}, cI = function() { + const { src: e, loading: s, error: r } = this.$state; + return e() && (s.set(!0), r.set(null)), () => { + m(this, $t, mI).call(this), s.set(!1), r.set(null); + }; +}, uI = function() { + const { loading: e, error: s } = this.$state; + m(this, $t, L0).call(this), e.set(!1), s.set(null); +}, dI = function(e) { + const { loading: s, error: r } = this.$state; + s.set(!1), r.set(e); +}, hI = function() { + const { loading: e, hidden: s } = this.$state; + return !s() && e(); +}, D0 = function() { + const { error: e } = this.$state; + return !ii(e()); +}, fI = function() { + const { hidden: e } = this.$state, { duration: s } = this.media.$state, r = l(this, md).$images(); + e.set(m(this, $t, D0).call(this) || !Number.isFinite(s()) || r.length === 0); +}, pI = function() { + let e = l(this, md).$images(); + if (!e.length) return; + let s = this.getTime(), { src: r, activeThumbnail: i } = this.$state, a = -1, o = null; + for (let c = e.length - 1; c >= 0; c--) { + const u = e[c]; + if (s >= u.startTime && (!u.endTime || s < u.endTime)) { + a = c; + break; + } + } + e[a] && (o = e[a]), i.set(o), r.set((o == null ? void 0 : o.url.href) || ""); +}, L0 = function() { + if (!this.scope || this.$state.hidden()) return; + const e = this.el, s = this.$state.img(), r = this.$state.activeThumbnail(); + if (!s || !r || !e) return; + let i = r.width ?? s.naturalWidth, a = (r == null ? void 0 : r.height) ?? s.naturalHeight, { + maxWidth: o, + maxHeight: c, + minWidth: u, + minHeight: f, + width: p, + height: g + } = getComputedStyle(this.el); + u === "100%" && (u = parseFloat(p) + ""), f === "100%" && (f = parseFloat(g) + ""); + let y = Math.max(parseInt(u) / i, parseInt(f) / a), v = Math.min( + Math.max(parseInt(u), parseInt(o)) / i, + Math.max(parseInt(f), parseInt(c)) / a + ), b = !isNaN(v) && v < 1 ? v : y > 1 ? y : 1; + m(this, $t, po).call(this, e, "--thumbnail-width", `${i * b}px`), m(this, $t, po).call(this, e, "--thumbnail-height", `${a * b}px`), m(this, $t, po).call(this, e, "--thumbnail-aspect-ratio", String(ls(i / a, 5))), m(this, $t, po).call(this, s, "width", `${s.naturalWidth * b}px`), m(this, $t, po).call(this, s, "height", `${s.naturalHeight * b}px`), m(this, $t, po).call(this, s, "transform", r.coords ? `translate(-${r.coords.x * b}px, -${r.coords.y * b}px)` : ""), m(this, $t, po).call(this, s, "max-width", "none"); +}, po = function(e, s, r) { + e.style.setProperty(s, r), l(this, gd).push(() => e.style.removeProperty(s)); +}, mI = function() { + for (const e of l(this, gd)) e(); + P(this, gd, []); +}, U(Dm, "props", { + src: null, + time: 0, + crossOrigin: null +}), U(Dm, "state", new to({ + src: "", + img: null, + thumbnails: [], + activeThumbnail: null, + crossOrigin: null, + loading: !1, + error: null, + hidden: !1 +})), Dm); +var up; +class UQ extends oI { + constructor() { + super(...arguments); + S(this, up); + } + onAttach(e) { + P(this, up, sh(Lc.state)); + } + getTime() { + const { duration: e, clipStartTime: s } = this.media.$state; + return s() + l(this, up).pointerRate() * e(); + } +} +up = new WeakMap(); +var Uo, dp, mn, gI, yI, j0, vI, F0, bI, wI, V0, xI, CI; +class xy extends yt { + constructor() { + super(...arguments); + S(this, mn); + S(this, Uo); + S(this, dp); + } + get video() { + return this.$state.video(); + } + onSetup() { + P(this, Uo, en()), P(this, dp, sh(Lc.state)), m(this, mn, j0).call(this), this.setAttributes({ + "data-loading": m(this, mn, vI).bind(this), + "data-hidden": this.$state.hidden, + "data-error": m(this, mn, F0).bind(this), + "aria-hidden": us(this.$state.hidden) + }); + } + onAttach(e) { + Z(m(this, mn, gI).bind(this)), Z(m(this, mn, yI).bind(this)), Z(m(this, mn, j0).bind(this)), Z(m(this, mn, bI).bind(this)), Z(m(this, mn, wI).bind(this)), Z(m(this, mn, CI).bind(this)); + } +} +Uo = new WeakMap(), dp = new WeakMap(), mn = new WeakSet(), gI = function() { + const e = this.$state.video(); + e && (e.readyState >= 2 && m(this, mn, V0).call(this), new Dt(e).add("canplay", m(this, mn, V0).bind(this)).add("error", m(this, mn, xI).bind(this))); +}, yI = function() { + const { src: e } = this.$state, { canLoad: s } = l(this, Uo).$state; + e.set(s() ? this.$props.src() : null); +}, j0 = function() { + const { crossOrigin: e } = this.$props, { crossOrigin: s } = this.$state, { crossOrigin: r } = l(this, Uo).$state, i = e() !== null ? e() : r(); + s.set(i === !0 ? "anonymous" : i); +}, vI = function() { + const { canPlay: e, hidden: s } = this.$state; + return !e() && !s(); +}, F0 = function() { + const { error: e } = this.$state; + return !ii(e); +}, bI = function() { + const { src: e, hidden: s } = this.$state, { canLoad: r, duration: i } = l(this, Uo).$state; + s.set(r() && (!e() || m(this, mn, F0).call(this) || !Number.isFinite(i()))); +}, wI = function() { + const { src: e, canPlay: s, error: r } = this.$state; + e(), s.set(!1), r.set(null); +}, V0 = function(e) { + const { canPlay: s, error: r } = this.$state; + s.set(!0), r.set(null), this.dispatch("can-play", { trigger: e }); +}, xI = function(e) { + const { canPlay: s, error: r } = this.$state; + s.set(!1), r.set(e), this.dispatch("error", { trigger: e }); +}, CI = function() { + const { video: e, canPlay: s } = this.$state, { duration: r } = l(this, Uo).$state, { pointerRate: i } = l(this, dp), a = e(); + s() && a && Number.isFinite(r()) && Number.isFinite(i()) && (a.currentTime = i() * r()); +}, U(xy, "props", { + src: null, + crossOrigin: null +}), U(xy, "state", new to({ + video: null, + src: null, + crossOrigin: null, + canPlay: !1, + error: null, + hidden: !1 +})); +const qQ = xy.prototype; +Kt(qQ, "video"); +var qo, Fy, hp; +class j2 extends yt { + constructor() { + super(...arguments); + S(this, qo); + S(this, Fy); + S(this, hp); + } + onSetup() { + P(this, hp, sh(Lc.state)), P(this, qo, Cn(Wd)), P(this, Fy, za(this.getValueText.bind(this))); + } + /** + * Returns the current value formatted as text based on prop settings. + */ + getValueText() { + var b, w; + const { + type: e, + format: s, + decimalPlaces: r, + padHours: i, + padMinutes: a, + showHours: o, + showMs: c + } = this.$props, { value: u, pointerValue: f, min: p, max: g } = l(this, hp), y = (s == null ? void 0 : s()) ?? l(this, qo).default, v = e() === "current" ? u() : f(); + if (y === "percent") { + const E = g() - p(), x = v / E * 100; + return (l(this, qo).percent ?? ls)(x, r()) + "%"; + } else return y === "time" ? (l(this, qo).time ?? Mv)(v, { + padHrs: i(), + padMins: a(), + showHrs: o(), + showMs: c() + }) : (((w = (b = l(this, qo)).value) == null ? void 0 : w.call(b, v)) ?? v.toFixed(2)) + ""; + } +} +qo = new WeakMap(), Fy = new WeakMap(), hp = new WeakMap(), U(j2, "props", { + type: "pointer", + format: null, + showHours: !1, + showMs: !1, + padHours: null, + padMinutes: null, + decimalPlaces: 2 +}); +const zQ = j2.prototype; +Yn(zQ, "getValueText"); +var yd, fp; +class _I extends yt { + constructor() { + super(...arguments); + S(this, yd); + S(this, fp, wl(() => { + const { disabled: e, orientation: s } = l(this, yd); + if (e()) return; + const r = this.el, { offset: i, noClamp: a } = this.$props; + r && HQ(r, { + clamp: !a(), + offset: i(), + orientation: s() + }); + })); + } + onSetup() { + P(this, yd, Cn(L2)); + const { active: e } = sh(Lc.state); + this.setAttributes({ + "data-visible": e + }); + } + onAttach(e) { + Object.assign(e.style, { + position: "absolute", + top: 0, + left: 0, + width: "max-content" + }); + } + onConnect(e) { + const { preview: s } = l(this, yd); + s.set(e), ft(() => s.set(null)), Z(l(this, fp).bind(this)); + const r = new ResizeObserver(l(this, fp).bind(this)); + r.observe(e), ft(() => r.disconnect()); + } +} +yd = new WeakMap(), fp = new WeakMap(), U(_I, "props", { + offset: 0, + noClamp: !1 +}); +function HQ(n, { + clamp: t, + offset: e, + orientation: s +}) { + const r = getComputedStyle(n), i = parseFloat(r.width), a = parseFloat(r.height), o = { + top: null, + right: null, + bottom: null, + left: null + }; + if (o[s === "horizontal" ? "bottom" : "left"] = `calc(100% + var(--media-slider-preview-offset, ${e}px))`, s === "horizontal") { + const c = i / 2; + if (!t) + o.left = `calc(var(--slider-pointer) - ${c}px)`; + else { + const u = `max(0px, calc(var(--slider-pointer) - ${c}px))`, f = `calc(100% - ${i}px)`; + o.left = `min(${u}, ${f})`; + } + } else { + const c = a / 2; + if (!t) + o.bottom = `calc(var(--slider-pointer) - ${c}px)`; + else { + const u = `max(${c}px, calc(var(--slider-pointer) - ${c}px))`, f = `calc(100% - ${a}px)`; + o.bottom = `min(${u}, ${f})`; + } + } + Object.assign(n.style, o); +} +var wr, Qn, SI, EI, kI, TI, AI, pp, PI, NI, $I; +class B0 extends yt { + constructor() { + super(...arguments); + S(this, Qn); + S(this, wr); + S(this, pp, xl(m(this, Qn, PI).bind(this), 25)); + } + onSetup() { + P(this, wr, en()); + const { audioGain: e } = l(this, wr).$state; + dr(Wd, { + default: "percent", + value(s) { + return (s * (e() ?? 1)).toFixed(2); + }, + percent(s) { + return Math.round(s * (e() ?? 1)); + } + }), new hr({ + getStep: this.$props.step, + getKeyStep: this.$props.keyStep, + roundValue: Math.round, + isDisabled: m(this, Qn, TI).bind(this), + aria: { + valueMax: m(this, Qn, kI).bind(this), + valueNow: m(this, Qn, SI).bind(this), + valueText: m(this, Qn, EI).bind(this) + }, + onDragValueChange: m(this, Qn, $I).bind(this), + onValueChange: m(this, Qn, NI).bind(this) + }).attach(this), Z(m(this, Qn, AI).bind(this)); + } + onAttach(e) { + e.setAttribute("data-media-volume-slider", ""), Yt(e, "aria-label", "Volume"); + const { canSetVolume: s } = l(this, wr).$state; + this.setAttributes({ + "data-supported": s, + "aria-hidden": us(() => !s()) + }); + } +} +wr = new WeakMap(), Qn = new WeakSet(), SI = function() { + const { value: e } = this.$state, { audioGain: s } = l(this, wr).$state; + return Math.round(e() * (s() ?? 1)); +}, EI = function() { + const { value: e, max: s } = this.$state, { audioGain: r } = l(this, wr).$state; + return ls(e() / s() * (r() ?? 1) * 100, 2) + "%"; +}, kI = function() { + const { audioGain: e } = l(this, wr).$state; + return this.$state.max() * (e() ?? 1); +}, TI = function() { + const { disabled: e } = this.$props, { canSetVolume: s } = l(this, wr).$state; + return e() || !s(); +}, AI = function() { + const { muted: e, volume: s } = l(this, wr).$state, r = e() ? 0 : s() * 100; + this.$state.value.set(r), this.dispatch("value-change", { detail: r }); +}, pp = new WeakMap(), PI = function(e) { + if (!e.trigger) return; + const s = ls(e.detail / 100, 3); + l(this, wr).remote.changeVolume(s, e); +}, NI = function(e) { + l(this, pp).call(this, e); +}, $I = function(e) { + l(this, pp).call(this, e); +}, U(B0, "props", { + ...hr.props, + keyStep: 5, + shiftKeyMultiplier: 2 +}), U(B0, "state", Zc); +var zo, Gn, RI, II, OI, MI, DI, q0, LI, jI; +class U0 extends yt { + constructor() { + super(...arguments); + S(this, Gn); + S(this, zo); + } + onSetup() { + P(this, zo, en()), dr(Wd, { + default: "percent", + percent: (e, s) => ls(this.$state.value(), s) + "%" + }), new hr({ + getStep: this.$props.step, + getKeyStep: this.$props.keyStep, + roundValue: Math.round, + isDisabled: m(this, Gn, DI).bind(this), + aria: { + valueNow: m(this, Gn, RI).bind(this), + valueText: m(this, Gn, II).bind(this) + }, + onDragValueChange: m(this, Gn, jI).bind(this), + onValueChange: m(this, Gn, LI).bind(this) + }).attach(this), Z(m(this, Gn, OI).bind(this)), Z(m(this, Gn, MI).bind(this)); + } + onAttach(e) { + e.setAttribute("data-media-audio-gain-slider", ""), Yt(e, "aria-label", "Audio Boost"); + const { canSetAudioGain: s } = l(this, zo).$state; + this.setAttributes({ + "data-supported": s, + "aria-hidden": us(() => !s()) + }); + } +} +zo = new WeakMap(), Gn = new WeakSet(), RI = function() { + const { value: e } = this.$state; + return Math.round(e()); +}, II = function() { + const { value: e } = this.$state; + return e() + "%"; +}, OI = function() { + const { min: e, max: s } = this.$props; + this.$state.min.set(e()), this.$state.max.set(s()); +}, MI = function() { + const { audioGain: e } = l(this, zo).$state, s = ((e() ?? 1) - 1) * 100; + this.$state.value.set(s), this.dispatch("value-change", { detail: s }); +}, DI = function() { + const { disabled: e } = this.$props, { canSetAudioGain: s } = l(this, zo).$state; + return e() || !s(); +}, q0 = function(e) { + if (!e.trigger) return; + const s = ls(1 + e.detail / 100, 2); + l(this, zo).remote.changeAudioGain(s, e); +}, LI = function(e) { + m(this, Gn, q0).call(this, e); +}, jI = function(e) { + m(this, Gn, q0).call(this, e); +}, U(U0, "props", { + ...hr.props, + step: 25, + keyStep: 25, + shiftKeyMultiplier: 2, + min: 0, + max: 300 +}), U(U0, "state", Zc); +var Ho, Vn, FI, VI, BI, UI, qI, zI, mp, HI, WI, GI; +class z0 extends yt { + constructor() { + super(...arguments); + S(this, Vn); + S(this, Ho); + S(this, mp, xl(m(this, Vn, HI).bind(this), 25)); + } + onSetup() { + P(this, Ho, en()), new hr({ + getStep: this.$props.step, + getKeyStep: this.$props.keyStep, + roundValue: m(this, Vn, qI), + isDisabled: m(this, Vn, zI).bind(this), + aria: { + valueNow: m(this, Vn, FI).bind(this), + valueText: m(this, Vn, VI).bind(this) + }, + onDragValueChange: m(this, Vn, GI).bind(this), + onValueChange: m(this, Vn, WI).bind(this) + }).attach(this), Z(m(this, Vn, BI).bind(this)), Z(m(this, Vn, UI).bind(this)); + } + onAttach(e) { + e.setAttribute("data-media-speed-slider", ""), Yt(e, "aria-label", "Speed"); + const { canSetPlaybackRate: s } = l(this, Ho).$state; + this.setAttributes({ + "data-supported": s, + "aria-hidden": us(() => !s()) + }); + } +} +Ho = new WeakMap(), Vn = new WeakSet(), FI = function() { + const { value: e } = this.$state; + return e(); +}, VI = function() { + const { value: e } = this.$state; + return e() + "x"; +}, BI = function() { + const { min: e, max: s } = this.$props; + this.$state.min.set(e()), this.$state.max.set(s()); +}, UI = function() { + const { playbackRate: e } = l(this, Ho).$state, s = e(); + this.$state.value.set(s), this.dispatch("value-change", { detail: s }); +}, qI = function(e) { + return ls(e, 2); +}, zI = function() { + const { disabled: e } = this.$props, { canSetPlaybackRate: s } = l(this, Ho).$state; + return e() || !s(); +}, mp = new WeakMap(), HI = function(e) { + if (!e.trigger) return; + const s = e.detail; + l(this, Ho).remote.changePlaybackRate(s, e); +}, WI = function(e) { + l(this, mp).call(this, e); +}, GI = function(e) { + l(this, mp).call(this, e); +}, U(z0, "props", { + ...hr.props, + step: 0.25, + keyStep: 0.25, + shiftKeyMultiplier: 2, + min: 0, + max: 2 +}), U(z0, "state", Zc); +var Yr, vd, Jn, YI, KI, ZI, XI, QI, gp, JI, eO, tO; +class H0 extends yt { + constructor() { + super(...arguments); + S(this, Jn); + S(this, Yr); + S(this, vd, za(() => { + const { qualities: e } = l(this, Yr).$state; + return z$(e()); + })); + S(this, gp, xl(m(this, Jn, JI).bind(this), 25)); + } + onSetup() { + P(this, Yr, en()), new hr({ + getStep: this.$props.step, + getKeyStep: this.$props.keyStep, + roundValue: Math.round, + isDisabled: m(this, Jn, QI).bind(this), + aria: { + valueNow: m(this, Jn, YI).bind(this), + valueText: m(this, Jn, KI).bind(this) + }, + onDragValueChange: m(this, Jn, tO).bind(this), + onValueChange: m(this, Jn, eO).bind(this) + }).attach(this), Z(m(this, Jn, ZI).bind(this)), Z(m(this, Jn, XI).bind(this)); + } + onAttach(e) { + e.setAttribute("data-media-quality-slider", ""), Yt(e, "aria-label", "Video Quality"); + const { qualities: s, canSetQuality: r } = l(this, Yr).$state, i = za(() => r() && s().length > 0); + this.setAttributes({ + "data-supported": i, + "aria-hidden": us(() => !i()) + }); + } +} +Yr = new WeakMap(), vd = new WeakMap(), Jn = new WeakSet(), YI = function() { + const { value: e } = this.$state; + return e(); +}, KI = function() { + const { quality: e } = l(this, Yr).$state; + if (!e()) return ""; + const { height: s, bitrate: r } = e(), i = r && r > 0 ? `${(r / 1e6).toFixed(2)} Mbps` : null; + return s ? `${s}p${i ? ` (${i})` : ""}` : "Auto"; +}, ZI = function() { + const e = l(this, vd).call(this); + this.$state.max.set(Math.max(0, e.length - 1)); +}, XI = function() { + let { quality: e } = l(this, Yr).$state, s = l(this, vd).call(this), r = Math.max(0, s.indexOf(e())); + this.$state.value.set(r), this.dispatch("value-change", { detail: r }); +}, QI = function() { + const { disabled: e } = this.$props, { canSetQuality: s, qualities: r } = l(this, Yr).$state; + return e() || r().length <= 1 || !s(); +}, gp = new WeakMap(), JI = function(e) { + if (!e.trigger) return; + const { qualities: s } = l(this, Yr), r = pe(l(this, vd))[e.detail]; + l(this, Yr).remote.changeQuality(s.indexOf(r), e); +}, eO = function(e) { + l(this, gp).call(this, e); +}, tO = function(e) { + l(this, gp).call(this, e); +}, U(H0, "props", { + ...hr.props, + step: 1, + keyStep: 1, + shiftKeyMultiplier: 1 +}), U(H0, "state", Zc); +var pn, bd, yp, je, nO, sO, rO, iO, aO, W0, oO, wd, lO, cO, G0, uO, Y0, dO, hO, fO, pO, mO, gO, Pl, yO, vO, bO; +class Cy extends yt { + constructor() { + super(); + S(this, je); + S(this, pn); + S(this, bd); + S(this, yp, He(null)); + S(this, wd, !1); + const { noSwipeGesture: e } = this.$props; + new hr({ + swipeGesture: () => !e(), + getValue: m(this, je, Y0).bind(this), + getStep: m(this, je, dO).bind(this), + getKeyStep: m(this, je, hO).bind(this), + roundValue: m(this, je, fO), + isDisabled: m(this, je, pO).bind(this), + aria: { + valueNow: m(this, je, mO).bind(this), + valueText: m(this, je, gO).bind(this) + }, + onDragStart: m(this, je, lO).bind(this), + onDragValueChange: m(this, je, cO).bind(this), + onDragEnd: m(this, je, G0).bind(this), + onValueChange: m(this, je, uO).bind(this) + }); + } + onSetup() { + P(this, pn, en()), dr(Wd, { + default: "time", + value: m(this, je, vO).bind(this), + time: m(this, je, bO).bind(this) + }), this.setAttributes({ + "data-chapters": m(this, je, sO).bind(this) + }), this.setStyles({ + "--slider-progress": m(this, je, nO).bind(this) + }), Z(m(this, je, iO).bind(this)), Z(m(this, je, rO).bind(this)); + } + onAttach(e) { + e.setAttribute("data-media-time-slider", ""), Yt(e, "aria-label", "Seek"); + } + onConnect(e) { + Z(m(this, je, aO).bind(this)), R2(l(this, pn).textTracks, "chapters", l(this, yp).set); + } +} +pn = new WeakMap(), bd = new WeakMap(), yp = new WeakMap(), je = new WeakSet(), nO = function() { + const { bufferedEnd: e, duration: s } = l(this, pn).$state; + return ls(Math.min(e() / Math.max(s(), 1), 1) * 100, 3) + "%"; +}, sO = function() { + var s; + const { duration: e } = l(this, pn).$state; + return ((s = l(this, yp).call(this)) == null ? void 0 : s.cues.length) && Number.isFinite(e()) && e() > 0; +}, rO = function() { + P(this, bd, xl( + m(this, je, W0).bind(this), + this.$props.seekingRequestThrottle() + )); +}, iO = function() { + if (this.$state.hidden()) return; + const { value: e, dragging: s } = this.$state, r = m(this, je, Y0).call(this); + pe(s) || (e.set(r), this.dispatch("value-change", { detail: r })); +}, aO = function() { + const e = l(this, pn).player.el, { preview: s } = Cn(L2); + e && s() && Ze(e, "data-preview", this.$state.active()); +}, W0 = function(e, s) { + l(this, pn).remote.seeking(e, s); +}, oO = function(e, s, r) { + l(this, bd).cancel(); + const { live: i } = l(this, pn).$state; + if (i() && s >= 99) { + l(this, pn).remote.seekToLiveEdge(r); + return; + } + l(this, pn).remote.seek(e, r); +}, wd = new WeakMap(), lO = function(e) { + const { pauseWhileDragging: s } = this.$props; + if (s()) { + const { paused: r } = l(this, pn).$state; + P(this, wd, !r()), l(this, pn).remote.pause(e); + } +}, cO = function(e) { + l(this, bd).call(this, m(this, je, Pl).call(this, e.detail), e); +}, G0 = function(e) { + const { seeking: s } = l(this, pn).$state; + pe(s) || m(this, je, W0).call(this, m(this, je, Pl).call(this, e.detail), e); + const r = e.detail; + m(this, je, oO).call(this, m(this, je, Pl).call(this, r), r, e); + const { pauseWhileDragging: i } = this.$props; + i() && l(this, wd) && (l(this, pn).remote.play(e), P(this, wd, !1)); +}, uO = function(e) { + const { dragging: s } = this.$state; + s() || !e.trigger || m(this, je, G0).call(this, e); +}, // ------------------------------------------------------------------------------------------- +// Props +// ------------------------------------------------------------------------------------------- +Y0 = function() { + const { currentTime: e } = l(this, pn).$state; + return m(this, je, yO).call(this, e()); +}, dO = function() { + const e = this.$props.step() / l(this, pn).$state.duration() * 100; + return Number.isFinite(e) ? e : 1; +}, hO = function() { + const e = this.$props.keyStep() / l(this, pn).$state.duration() * 100; + return Number.isFinite(e) ? e : 1; +}, fO = function(e) { + return ls(e, 3); +}, pO = function() { + const { disabled: e } = this.$props, { canSeek: s } = l(this, pn).$state; + return e() || !s(); +}, // ------------------------------------------------------------------------------------------- +// ARIA +// ------------------------------------------------------------------------------------------- +mO = function() { + const { value: e } = this.$state; + return Math.round(e()); +}, gO = function() { + const e = m(this, je, Pl).call(this, this.$state.value()), { duration: s } = l(this, pn).$state; + return Number.isFinite(e) ? `${by(e)} out of ${by(s())}` : "live"; +}, // ------------------------------------------------------------------------------------------- +// Format +// ------------------------------------------------------------------------------------------- +Pl = function(e) { + const { duration: s } = l(this, pn).$state; + return ls(e / 100 * s(), 5); +}, yO = function(e) { + const { liveEdge: s, duration: r } = l(this, pn).$state, i = Math.max(0, Math.min(1, s() ? 1 : Math.min(e, r()) / r())); + return Number.isNaN(i) ? 0 : Number.isFinite(i) ? i * 100 : 100; +}, vO = function(e) { + const s = m(this, je, Pl).call(this, e), { live: r, duration: i } = l(this, pn).$state; + return Number.isFinite(s) ? (r() ? s - i() : s).toFixed(0) : "LIVE"; +}, bO = function(e, s) { + const r = m(this, je, Pl).call(this, e), { live: i, duration: a } = l(this, pn).$state, o = i() ? r - a() : r; + return Number.isFinite(r) ? `${o < 0 ? "-" : ""}${Mv(Math.abs(o), s)}` : "LIVE"; +}, U(Cy, "props", { + ...hr.props, + step: 0.1, + keyStep: 5, + shiftKeyMultiplier: 2, + pauseWhileDragging: !1, + noSwipeGesture: !1, + seekingRequestThrottle: 100 +}), U(Cy, "state", Zc); +var Ls, pc, xd, Ti, Cs, mc, _s, Ia, gc, Wo, Fe, K0, Z0, wO, xO, CO, _O, SO, _g, X0, Q0, EO, Vy, By, kO, Sg, Eg, TO, AO, PO, NO, vp, $O, RO, IO; +class F2 extends yt { + constructor() { + super(...arguments); + S(this, Fe); + S(this, Ls); + S(this, pc); + S(this, xd); + S(this, Ti, null); + S(this, Cs, []); + S(this, mc, He(null)); + S(this, _s, He([])); + S(this, Ia, He(-1)); + S(this, gc, He(-1)); + S(this, Wo, 0); + S(this, Vy, wl((e) => { + var c; + let s, r = l(this, _s).call(this), { seekableStart: i } = l(this, Ls).$state, a = i(), o = m(this, Fe, Sg).call(this, r); + for (let u = l(this, Wo); u < l(this, Cs).length; u++) + if (s = m(this, Fe, Eg).call(this, r[u], e, a, o), (c = l(this, Cs)[u]) == null || c.style.setProperty("--chapter-progress", s + "%"), s < 100) { + P(this, Wo, u); + break; + } + })); + S(this, By, za(m(this, Fe, kO).bind(this))); + S(this, vp, Ov( + () => { + const e = pe(l(this, mc)); + !this.scope || !e || !e.cues.length || (l(this, _s).set(m(this, Fe, TO).call(this, e.cues)), l(this, Ia).set(0), P(this, Wo, 0)); + }, + 150, + !0 + )); + } + get cues() { + return l(this, _s).call(this); + } + get activeCue() { + return l(this, _s).call(this)[l(this, Ia).call(this)] || null; + } + get activePointerCue() { + return l(this, _s).call(this)[l(this, gc).call(this)] || null; + } + onSetup() { + P(this, Ls, en()), P(this, pc, sh(Cy.state)); + } + onAttach(e) { + R2(l(this, Ls).textTracks, "chapters", m(this, Fe, K0).bind(this)), Z(m(this, Fe, AO).bind(this)); + } + onConnect() { + ft(() => m(this, Fe, Z0).bind(this)); + } + onDestroy() { + m(this, Fe, K0).call(this, null); + } + setRefs(e) { + var s; + if (P(this, Cs, e), (s = l(this, xd)) == null || s.dispose(), l(this, Cs).length === 1) { + const r = l(this, Cs)[0]; + r.style.width = "100%", r.style.setProperty("--chapter-fill", "var(--slider-fill)"), r.style.setProperty("--chapter-progress", "var(--slider-progress)"); + } else l(this, Cs).length > 0 && Dn(() => m(this, Fe, wO).call(this), P(this, xd, qd())); + } +} +Ls = new WeakMap(), pc = new WeakMap(), xd = new WeakMap(), Ti = new WeakMap(), Cs = new WeakMap(), mc = new WeakMap(), _s = new WeakMap(), Ia = new WeakMap(), gc = new WeakMap(), Wo = new WeakMap(), Fe = new WeakSet(), K0 = function(e) { + pe(l(this, mc)) !== e && (m(this, Fe, Z0).call(this), l(this, mc).set(e)); +}, Z0 = function() { + var e; + P(this, Cs, []), l(this, _s).set([]), l(this, Ia).set(-1), l(this, gc).set(-1), P(this, Wo, 0), (e = l(this, xd)) == null || e.dispose(); +}, wO = function() { + l(this, Cs).length && Z(m(this, Fe, xO).bind(this)); +}, xO = function() { + const { hidden: e } = l(this, pc); + e() || (Z(m(this, Fe, CO).bind(this)), Z(m(this, Fe, _O).bind(this)), Z(m(this, Fe, SO).bind(this)), Z(m(this, Fe, EO).bind(this))); +}, CO = function() { + const e = l(this, _s).call(this); + if (!e.length) return; + let s, { seekableStart: r, seekableEnd: i } = l(this, Ls).$state, a = r(), o = i() || e[e.length - 1].endTime, c = o - a, u = 100; + for (let f = 0; f < e.length; f++) + if (s = e[f], l(this, Cs)[f]) { + const p = f === e.length - 1 ? u : ls((s.endTime - Math.max(a, s.startTime)) / c * 100, 3); + l(this, Cs)[f].style.width = p + "%", u -= p; + } +}, _O = function() { + let { liveEdge: e, seekableStart: s, seekableEnd: r } = l(this, Ls).$state, { fillPercent: i, value: a } = l(this, pc), o = l(this, _s).call(this), c = e(), u = pe(l(this, Ia)), f = o[u], p = c ? l(this, _s).length - 1 : m(this, Fe, Q0).call(this, f && f.startTime / r() * 100 <= pe(a) ? u : 0, i()); + c || !f ? m(this, Fe, _g).call(this, 0, o.length, 100) : p > u ? m(this, Fe, _g).call(this, u, p, 100) : p < u && m(this, Fe, _g).call(this, p + 1, u + 1, 0); + const g = c ? 100 : m(this, Fe, Eg).call(this, o[p], i(), s(), m(this, Fe, Sg).call(this, o)); + m(this, Fe, X0).call(this, l(this, Cs)[p], g), l(this, Ia).set(p); +}, SO = function() { + let { hidden: e, pointerPercent: s } = l(this, pc); + if (e()) { + l(this, gc).set(-1); + return; + } + const r = m(this, Fe, Q0).call(this, 0, s()); + l(this, gc).set(r); +}, _g = function(e, s, r) { + for (let i = e; i < s; i++) m(this, Fe, X0).call(this, l(this, Cs)[i], r); +}, X0 = function(e, s) { + e && (e.style.setProperty("--chapter-fill", s + "%"), Ze(e, "data-active", s > 0 && s < 100), Ze(e, "data-ended", s === 100)); +}, Q0 = function(e, s) { + let r = 0, i = l(this, _s).call(this); + if (s === 0) return 0; + if (s === 100) return i.length - 1; + let { seekableStart: a } = l(this, Ls).$state, o = a(), c = m(this, Fe, Sg).call(this, i); + for (let u = e; u < i.length; u++) + if (r = m(this, Fe, Eg).call(this, i[u], s, o, c), r >= 0 && r < 100) return u; + return 0; +}, EO = function() { + l(this, Vy).call(this, l(this, By).call(this)); +}, Vy = new WeakMap(), By = new WeakMap(), kO = function() { + const { bufferedEnd: e, duration: s } = l(this, Ls).$state; + return ls(Math.min(e() / Math.max(s(), 1), 1), 3) * 100; +}, Sg = function(e) { + var i; + const { seekableEnd: s } = l(this, Ls).$state, r = s(); + return Number.isFinite(r) ? r : ((i = e[e.length - 1]) == null ? void 0 : i.endTime) || 0; +}, Eg = function(e, s, r, i) { + if (!e || l(this, _s).call(this).length === 0) return 0; + const o = i - r, c = Math.max(0, e.startTime - r), u = Math.min(i, e.endTime) - r, f = c / o, p = f * 100, g = Math.min(1, f + (u - c) / o) * 100; + return Math.max( + 0, + ls( + s >= g ? 100 : (s - p) / (g - p) * 100, + 3 + ) + ); +}, TO = function(e) { + let s = [], { seekableStart: r, seekableEnd: i, duration: a } = l(this, Ls).$state, o = r(), c = i(); + e = e.filter((p) => p.startTime <= c && p.endTime >= o); + const u = e[0]; + u && u.startTime > o && s.push(new window.VTTCue(o, u.startTime, "")); + for (let p = 0; p < e.length - 1; p++) { + const g = e[p], y = e[p + 1]; + if (s.push(g), y) { + const v = y.startTime - g.endTime; + v > 0 && s.push(new window.VTTCue(g.endTime, g.endTime + v, "")); + } + } + const f = e[e.length - 1]; + if (f) { + s.push(f); + const p = a(); + p >= 0 && p - f.endTime > 1 && s.push(new window.VTTCue(f.endTime, a(), "")); + } + return s; +}, AO = function() { + const { source: e } = l(this, Ls).$state; + e(), m(this, Fe, PO).call(this); +}, PO = function() { + if (!this.scope) return; + const { disabled: e } = this.$props; + if (e()) { + l(this, _s).set([]), l(this, Ia).set(0), P(this, Wo, 0); + return; + } + const s = l(this, mc).call(this); + if (s) { + const r = l(this, vp).bind(this); + r(), new Dt(s).add("add-cue", r).add("remove-cue", r), Z(m(this, Fe, NO).bind(this)); + } + return P(this, Ti, m(this, Fe, IO).call(this)), l(this, Ti) && Z(m(this, Fe, $O).bind(this)), () => { + l(this, Ti) && (l(this, Ti).textContent = "", P(this, Ti, null)); + }; +}, NO = function() { + l(this, Ls).$state.duration(), l(this, vp).call(this); +}, vp = new WeakMap(), $O = function() { + const e = this.activePointerCue || this.activeCue; + l(this, Ti) && (l(this, Ti).textContent = (e == null ? void 0 : e.text) || ""); +}, RO = function() { + let e = this.el; + for (; e && e.getAttribute("role") !== "slider"; ) + e = e.parentElement; + return e; +}, IO = function() { + const e = m(this, Fe, RO).call(this); + return e ? e.querySelector('[data-part="chapter-title"]') : null; +}, U(F2, "props", { + disabled: !1 +}); +const Dv = F2.prototype; +Kt(Dv, "cues"); +Kt(Dv, "activeCue"); +Kt(Dv, "activePointerCue"); +Yn(Dv, "setRefs"); +const Va = eo(); +function WQ(n, t) { + const e = t$(n, t); + for (const { el: s, top: r, left: i } of e) + s.scroll({ top: r, left: i, behavior: t.behavior }); +} +function GQ(n, t = {}) { + WQ(n, { + scrollMode: "if-needed", + block: "center", + inline: "center", + ...t + }); +} +const YQ = /* @__PURE__ */ [ + "a[href]", + "[tabindex]", + "input", + "select", + "button" +].map((n) => `${n}:not([aria-hidden='true'])`).join(","), KQ = /* @__PURE__ */ new Set([ + "Escape", + "Tab", + "ArrowUp", + "ArrowDown", + "Home", + "PageUp", + "End", + "PageDown", + "Enter", + " " +]); +var Go, Kr, js, bp, ln, Nl, J0, OO, ex, MO, DO, kg, LO; +class ZQ { + constructor(t) { + S(this, ln); + S(this, Go, -1); + S(this, Kr, null); + S(this, js, []); + S(this, bp); + P(this, bp, t); + } + get items() { + return l(this, js); + } + attachMenu(t) { + dn(t, "focus", m(this, ln, OO).bind(this)), P(this, Kr, t), ft(() => { + P(this, Kr, null); + }); + } + listen() { + l(this, Kr) && (this.update(), new Dt(l(this, Kr)).add("keyup", m(this, ln, MO).bind(this)).add("keydown", m(this, ln, DO).bind(this)), ft(() => { + P(this, Go, -1), P(this, js, []); + })); + } + update() { + P(this, Go, 0), P(this, js, m(this, ln, LO).call(this)); + } + scroll(t = m(this, ln, J0).call(this)) { + const e = l(this, js)[t]; + e && requestAnimationFrame(() => { + requestAnimationFrame(() => { + GQ(e, { + behavior: "smooth", + boundary: (s) => !s.hasAttribute("data-root") + }); + }); + }); + } + focusActive(t = !0) { + const e = m(this, ln, J0).call(this); + m(this, ln, Nl).call(this, e >= 0 ? e : 0, t); + } +} +Go = new WeakMap(), Kr = new WeakMap(), js = new WeakMap(), bp = new WeakMap(), ln = new WeakSet(), Nl = function(t, e = !0) { + var s; + P(this, Go, t), l(this, js)[t] ? (l(this, js)[t].focus({ preventScroll: !0 }), e && this.scroll(t)) : (s = l(this, Kr)) == null || s.focus({ preventScroll: !0 }); +}, J0 = function() { + return l(this, js).findIndex( + (t) => document.activeElement === t || t.getAttribute("role") === "menuitemradio" && t.getAttribute("aria-checked") === "true" + ); +}, OO = function() { + l(this, Go) >= 0 || (this.update(), this.focusActive()); +}, ex = function(t) { + const e = t.target; + if (BN(t) && e instanceof Element) { + const s = e.getAttribute("role"); + return !/a|input|select|button/.test(e.localName) && !s; + } + return KQ.has(t.key); +}, MO = function(t) { + m(this, ln, ex).call(this, t) && (t.stopPropagation(), t.preventDefault()); +}, DO = function(t) { + if (m(this, ln, ex).call(this, t)) + switch (t.stopPropagation(), t.preventDefault(), t.key) { + case "Escape": + l(this, bp).closeMenu(t); + break; + case "Tab": + m(this, ln, Nl).call(this, m(this, ln, kg).call(this, t.shiftKey ? -1 : 1)); + break; + case "ArrowUp": + m(this, ln, Nl).call(this, m(this, ln, kg).call(this, -1)); + break; + case "ArrowDown": + m(this, ln, Nl).call(this, m(this, ln, kg).call(this, 1)); + break; + case "Home": + case "PageUp": + m(this, ln, Nl).call(this, 0); + break; + case "End": + case "PageDown": + m(this, ln, Nl).call(this, l(this, js).length - 1); + break; + } +}, kg = function(t) { + var s; + let e = l(this, Go); + do + e = (e + t + l(this, js).length) % l(this, js).length; + while (((s = l(this, js)[e]) == null ? void 0 : s.offsetParent) === null); + return e; +}, LO = function() { + if (!l(this, Kr)) return []; + const t = l(this, Kr).querySelectorAll(YQ), e = [], s = (r) => r.getAttribute("role") === "menu"; + for (const r of t) + my(r) && r.offsetParent !== null && // does not have display: none + I$(l(this, Kr), r, s) && e.push(r); + return e; +}; +var XQ = Object.defineProperty, QQ = Object.getOwnPropertyDescriptor, Yp = (n, t, e, s) => { + for (var r = QQ(t, e), i = n.length - 1, a; i >= 0; i--) + (a = n[i]) && (r = a(t, e, r) || r); + return r && XQ(t, e, r), r; +}; +let JQ = 0; +var Zr, Cd, _d, Ss, wp, Ai, Xn, Yo, Ko, yc, vc, Oa, bc, xp, wc, Qe, jO, FO, VO, BO, UO, tx, qO, Sd, zO, nx, HO, Zh, WO, GO, YO, KO, ZO, XO, Uy, QO, Ed, qy, JO, zy, eM, kd, Td, tM; +class Xc extends yt { + constructor() { + super(); + S(this, Qe); + S(this, Zr); + S(this, Cd); + S(this, _d); + S(this, Ss, He(!1)); + S(this, wp, He(!1)); + S(this, Ai, He(null)); + S(this, Xn, He(null)); + S(this, Yo); + S(this, Ko, /* @__PURE__ */ new Set()); + S(this, yc, null); + S(this, vc); + S(this, Oa); + S(this, bc, !1); + S(this, xp, He(!1)); + S(this, wc, /* @__PURE__ */ new Set()); + S(this, Sd, !1); + S(this, Uy, m(this, Qe, QO).bind(this)); + S(this, Ed, !1); + S(this, qy, m(this, Qe, JO).bind(this)); + S(this, zy, m(this, Qe, eM).bind(this)); + S(this, kd, wl(() => { + const e = pe(l(this, Xn)); + if (!e || Se) return; + let s = 0, r = getComputedStyle(e), i = [...e.children]; + for (const a of ["paddingTop", "paddingBottom", "borderTopWidth", "borderBottomWidth"]) + s += parseFloat(r[a]) || 0; + for (const a of i) + if (my(a) && a.style.display === "contents") + i.push(...a.children); + else if (a.nodeType === 3) + s += parseFloat(getComputedStyle(a).fontSize); + else if (my(a)) { + if (!$$(a)) continue; + const o = getComputedStyle(a); + s += a.offsetHeight + (parseFloat(o.marginTop) || 0) + (parseFloat(o.marginBottom) || 0); + } + Ps(e, "--menu-height", s + "px"); + })); + S(this, Td, !1); + const { showDelay: e } = this.$props; + P(this, vc, new Y5({ + trigger: l(this, Ai), + content: l(this, Xn), + showDelay: e, + listen: (s, r, i) => { + hl(s, (o) => { + l(this, Ss).call(this) ? i(o) : r(o); + }); + const a = m(this, Qe, KO).call(this); + a && hl(a, (o) => { + o.stopPropagation(), i(o); + }); + }, + onChange: m(this, Qe, zO).bind(this) + })); + } + get triggerElement() { + return l(this, Ai).call(this); + } + get contentElement() { + return l(this, Xn).call(this); + } + get isSubmenu() { + return !!l(this, Yo); + } + onSetup() { + P(this, Zr, en()); + const e = ++JQ; + P(this, Cd, `media-menu-${e}`), P(this, _d, `media-menu-button-${e}`), P(this, Oa, new ZQ({ + closeMenu: this.close.bind(this) + })), Ha(Va) && P(this, Yo, Cn(Va)), m(this, Qe, jO).call(this), this.setAttributes({ + "data-open": l(this, Ss), + "data-root": !this.isSubmenu, + "data-submenu": this.isSubmenu, + "data-disabled": m(this, Qe, Zh).bind(this) + }), dr(Va, { + button: l(this, Ai), + content: l(this, Xn), + expanded: l(this, Ss), + hint: He(""), + submenu: !!l(this, Yo), + disable: m(this, Qe, WO).bind(this), + attachMenuButton: m(this, Qe, VO).bind(this), + attachMenuItems: m(this, Qe, BO).bind(this), + attachObserver: m(this, Qe, UO).bind(this), + disableMenuButton: m(this, Qe, qO).bind(this), + addSubmenu: m(this, Qe, XO).bind(this), + onTransitionEvent: (s) => { + l(this, wc).add(s), ft(() => { + l(this, wc).delete(s); + }); + } + }); + } + onAttach(e) { + e.style.setProperty("display", "contents"); + } + onConnect(e) { + var s; + Z(m(this, Qe, FO).bind(this)), this.isSubmenu && ((s = l(this, Yo)) == null || s.addSubmenu(this)); + } + onDestroy() { + l(this, Ai).set(null), l(this, Xn).set(null), P(this, yc, null), l(this, wc).clear(); + } + open(e) { + pe(l(this, Ss)) || (l(this, vc).show(e), ri()); + } + close(e) { + pe(l(this, Ss)) && (l(this, vc).hide(e), ri()); + } +} +Zr = new WeakMap(), Cd = new WeakMap(), _d = new WeakMap(), Ss = new WeakMap(), wp = new WeakMap(), Ai = new WeakMap(), Xn = new WeakMap(), Yo = new WeakMap(), Ko = new WeakMap(), yc = new WeakMap(), vc = new WeakMap(), Oa = new WeakMap(), bc = new WeakMap(), xp = new WeakMap(), wc = new WeakMap(), Qe = new WeakSet(), jO = function() { + let e = -1, s = Ha(uf) ? Cn(uf) : null; + dr(uf, { + onDragStart: () => { + var r; + (r = s == null ? void 0 : s.onDragStart) == null || r.call(s), window.clearTimeout(e), e = -1, P(this, bc, !0); + }, + onDragEnd: () => { + var r; + (r = s == null ? void 0 : s.onDragEnd) == null || r.call(s), e = window.setTimeout(() => { + P(this, bc, !1), e = -1; + }, 300); + } + }); +}, FO = function() { + const e = m(this, Qe, HO).call(this); + this.isSubmenu || l(this, kd).call(this), m(this, Qe, tx).call(this, e), e && (Z(() => { + const { height: s } = l(this, Zr).$state, r = l(this, Xn).call(this); + r && Ps(r, "--player-height", s() + "px"); + }), l(this, Oa).listen(), this.listen("pointerup", m(this, Qe, GO).bind(this)), dn(window, "pointerup", m(this, Qe, YO).bind(this))); +}, VO = function(e) { + const s = e.el, r = this.isSubmenu, i = us(m(this, Qe, Zh).bind(this)); + Yt(s, "tabindex", r ? "-1" : "0"), Yt(s, "role", r ? "menuitem" : "button"), Ze(s, "id", l(this, _d)), Ze(s, "aria-haspopup", "menu"), Ze(s, "aria-expanded", "false"), Ze(s, "data-root", !this.isSubmenu), Ze(s, "data-submenu", this.isSubmenu); + const a = () => { + Ze(s, "data-open", l(this, Ss).call(this)), Ze(s, "aria-disabled", i()); + }; + Se ? a() : Z(a), l(this, Ai).set(s), ft(() => { + l(this, Ai).set(null); + }); +}, BO = function(e) { + var a; + const s = e.el; + s.style.setProperty("display", "none"), Ze(s, "id", l(this, Cd)), Yt(s, "role", "menu"), Yt(s, "tabindex", "-1"), Ze(s, "data-root", !this.isSubmenu), Ze(s, "data-submenu", this.isSubmenu), l(this, Xn).set(s), ft(() => l(this, Xn).set(null)); + const r = () => Ze(s, "data-open", l(this, Ss).call(this)); + Se ? r() : Z(r), l(this, Oa).attachMenu(s), m(this, Qe, tx).call(this, !1); + const i = m(this, Qe, tM).bind(this); + this.isSubmenu ? (a = l(this, Yo)) == null || a.onTransitionEvent(i) : (e.listen("transitionstart", i), e.listen("transitionend", i), e.listen("animationend", l(this, kd)), e.listen("vds-menu-resize", l(this, kd))); +}, UO = function(e) { + P(this, yc, e); +}, tx = function(e) { + const s = pe(l(this, Xn)); + s && Ze(s, "aria-hidden", Sf(!e)); +}, qO = function(e) { + l(this, xp).set(e); +}, Sd = new WeakMap(), zO = function(e, s) { + var a, o, c, u, f, p; + if (P(this, Sd, zp(s)), s == null || s.stopPropagation(), l(this, Ss).call(this) === e) return; + if (m(this, Qe, Zh).call(this)) { + e && l(this, vc).hide(s); + return; + } + (a = this.el) == null || a.dispatchEvent( + new Event("vds-menu-resize", { + bubbles: !0, + composed: !0 + }) + ); + const r = l(this, Ai).call(this), i = l(this, Xn).call(this); + if (r && (Ze(r, "aria-controls", e && l(this, Cd)), Ze(r, "aria-expanded", Sf(e))), i && Ze(i, "aria-labelledby", e && l(this, _d)), l(this, Ss).set(e), m(this, Qe, ZO).call(this, s), ri(), l(this, Sd)) { + e ? i == null || i.focus() : r == null || r.focus(); + for (const g of [this.el, i]) + g && g.setAttribute("data-keyboard", ""); + } else + for (const g of [this.el, i]) + g && g.removeAttribute("data-keyboard"); + if (this.dispatch(e ? "open" : "close", { trigger: s }), e) + !this.isSubmenu && l(this, Zr).activeMenu !== this && ((o = l(this, Zr).activeMenu) == null || o.close(s), l(this, Zr).activeMenu = this), (u = (c = l(this, yc)) == null ? void 0 : c.onOpen) == null || u.call(c, s); + else { + if (this.isSubmenu) + for (const g of l(this, Ko)) g.close(s); + else + l(this, Zr).activeMenu = null; + (p = (f = l(this, yc)) == null ? void 0 : f.onClose) == null || p.call(f, s); + } + e && requestAnimationFrame(m(this, Qe, nx).bind(this)); +}, nx = function() { + l(this, Td) || l(this, Ed) || (l(this, Oa).update(), requestAnimationFrame(() => { + l(this, Sd) ? l(this, Oa).focusActive() : l(this, Oa).scroll(); + })); +}, HO = function() { + return !m(this, Qe, Zh).call(this) && l(this, Ss).call(this); +}, Zh = function() { + return l(this, wp).call(this) || l(this, xp).call(this); +}, WO = function(e) { + l(this, wp).set(e); +}, GO = function(e) { + const s = l(this, Xn).call(this); + l(this, bc) || s && dS(s, e) || e.stopPropagation(); +}, YO = function(e) { + const s = l(this, Xn).call(this); + l(this, bc) || s && dS(s, e) || this.close(e); +}, KO = function() { + var s; + const e = (s = this.el) == null ? void 0 : s.querySelector('[data-part="close-target"]'); + return this.el && e && I$(this.el, e, (r) => r.getAttribute("role") === "menu") ? e : null; +}, ZO = function(e) { + this.isSubmenu || (l(this, Ss).call(this) ? l(this, Zr).remote.pauseControls(e) : l(this, Zr).remote.resumeControls(e)); +}, XO = function(e) { + l(this, Ko).add(e), new Dt(e).add("open", l(this, qy)).add("close", l(this, zy)), ft(l(this, Uy)); +}, Uy = new WeakMap(), QO = function(e) { + l(this, Ko).delete(e); +}, Ed = new WeakMap(), qy = new WeakMap(), JO = function(e) { + var r; + P(this, Ed, !0); + const s = l(this, Xn).call(this); + this.isSubmenu && ((r = this.triggerElement) == null || r.setAttribute("aria-hidden", "true")); + for (const i of l(this, Ko)) + if (i !== e.target) + for (const a of [i.el, i.triggerElement]) + a == null || a.setAttribute("aria-hidden", "true"); + if (s) { + const i = e.target.el; + for (const a of s.children) + a.contains(i) ? a.setAttribute("data-open", "") : a !== i && a.setAttribute("data-hidden", ""); + } +}, zy = new WeakMap(), eM = function(e) { + var r; + P(this, Ed, !1); + const s = l(this, Xn).call(this); + this.isSubmenu && ((r = this.triggerElement) == null || r.setAttribute("aria-hidden", "false")); + for (const i of l(this, Ko)) + for (const a of [i.el, i.triggerElement]) + a == null || a.setAttribute("aria-hidden", "false"); + if (s) + for (const i of s.children) + i.removeAttribute("data-open"), i.removeAttribute("data-hidden"); +}, kd = new WeakMap(), Td = new WeakMap(), tM = function(e) { + const s = l(this, Xn).call(this); + s && e.propertyName === "height" && (P(this, Td, e.type === "transitionstart"), Ze(s, "data-transition", l(this, Td) ? "height" : null), l(this, Ss).call(this) && m(this, Qe, nx).call(this)); + for (const r of l(this, wc)) r(e); +}, U(Xc, "props", { + showDelay: 0 +}); +Yp([ + Kt +], Xc.prototype, "triggerElement"); +Yp([ + Kt +], Xc.prototype, "contentElement"); +Yp([ + Kt +], Xc.prototype, "isSubmenu"); +Yp([ + Yn +], Xc.prototype, "open"); +Yp([ + Yn +], Xc.prototype, "close"); +var Zo, Cp, Xa, nM, sM, sx; +class Lv extends yt { + constructor() { + super(); + S(this, Xa); + S(this, Zo); + S(this, Cp, He(null)); + new hi(); + } + get expanded() { + var e; + return ((e = l(this, Zo)) == null ? void 0 : e.expanded()) ?? !1; + } + onSetup() { + P(this, Zo, Cn(Va)); + } + onAttach(e) { + l(this, Zo).attachMenuButton(this), Z(m(this, Xa, nM).bind(this)), Yt(e, "type", "button"); + } + onConnect(e) { + Z(m(this, Xa, sM).bind(this)), m(this, Xa, sx).call(this); + const s = new MutationObserver(m(this, Xa, sx).bind(this)); + s.observe(e, { attributeFilter: ["data-part"], childList: !0, subtree: !0 }), ft(() => s.disconnect()), hl(e, (r) => { + this.dispatch("select", { trigger: r }); + }); + } +} +Zo = new WeakMap(), Cp = new WeakMap(), Xa = new WeakSet(), nM = function() { + l(this, Zo).disableMenuButton(this.$props.disabled()); +}, sM = function() { + const e = l(this, Cp).call(this); + e && Z(() => { + const s = l(this, Zo).hint(); + s && (e.textContent = s); + }); +}, sx = function() { + var s; + const e = (s = this.el) == null ? void 0 : s.querySelector('[data-part="hint"]'); + l(this, Cp).set(e ?? null); +}, U(Lv, "props", { + disabled: !1 +}); +const eJ = Lv.prototype; +Kt(eJ, "expanded"); +class tJ extends Lv { +} +const Fb = eo(); +var xc, yl, iM, aM, oM; +class rM extends yt { + constructor() { + super(); + S(this, yl); + S(this, xc); + new hi(); + const { placement: e } = this.$props; + this.setAttributes({ + "data-placement": e + }); + } + onAttach(e) { + if (P(this, xc, Cn(Va)), l(this, xc).attachMenuItems(this), Ha(Fb)) { + const s = Cn(Fb); + s && (dr(Fb, null), s.attach(e), ft(() => s.attach(null))); + } + } + onConnect(e) { + Z(m(this, yl, iM).bind(this)); + } +} +xc = new WeakMap(), yl = new WeakSet(), iM = function() { + const { expanded: e } = l(this, xc); + if (!this.el || !e()) return; + const s = this.$props.placement(); + if (!s) return; + Object.assign(this.el.style, { + position: "absolute", + top: 0, + left: 0, + width: "max-content" + }); + const { offset: r, alignOffset: i } = this.$props; + ft( + M$(this.el, m(this, yl, oM).call(this), s, { + offsetVarName: "media-menu", + xOffset: i(), + yOffset: r() + }) + ), ft(m(this, yl, aM).bind(this)); +}, aM = function() { + this.el && (this.el.removeAttribute("style"), this.el.style.display = "none"); +}, oM = function() { + return l(this, xc).button(); +}, U(rM, "props", { + placement: null, + offset: 0, + alignOffset: 0 +}); +const rx = eo(); +var Ma, Xo, Px, Nr, cM, uM, Hy, ix, ax; +class lM extends mr { + constructor() { + super(...arguments); + S(this, Nr); + S(this, Ma, /* @__PURE__ */ new Set()); + S(this, Xo, He("")); + S(this, Px, null); + U(this, "onValueChange"); + S(this, Hy, m(this, Nr, ix).bind(this)); + } + get values() { + return Array.from(l(this, Ma)).map((e) => e.value()); + } + get value() { + return l(this, Xo).call(this); + } + set value(e) { + m(this, Nr, ix).call(this, e); + } + onSetup() { + dr(rx, { + add: m(this, Nr, cM).bind(this), + remove: m(this, Nr, uM).bind(this) + }); + } + onAttach(e) { + Ha(Va) || Yt(e, "role", "radiogroup"), this.setAttributes({ value: l(this, Xo) }); + } + onDestroy() { + l(this, Ma).clear(); + } +} +Ma = new WeakMap(), Xo = new WeakMap(), Px = new WeakMap(), Nr = new WeakSet(), cM = function(e) { + l(this, Ma).has(e) || (l(this, Ma).add(e), e.onCheck = l(this, Hy), e.check(e.value() === l(this, Xo).call(this))); +}, uM = function(e) { + e.onCheck = null, l(this, Ma).delete(e); +}, Hy = new WeakMap(), ix = function(e, s) { + var o; + const r = pe(l(this, Xo)); + if (!e || e === r) return; + const i = m(this, Nr, ax).call(this, r), a = m(this, Nr, ax).call(this, e); + i == null || i.check(!1, s), a == null || a.check(!0, s), l(this, Xo).set(e), (o = this.onValueChange) == null || o.call(this, e, s); +}, ax = function(e) { + for (const s of l(this, Ma)) + if (e === pe(s.value)) return s; + return null; +}; +var Da, Uc, ox, dM; +class V2 extends yt { + constructor() { + super(); + S(this, Uc); + S(this, Da); + P(this, Da, new lM()), l(this, Da).onValueChange = m(this, Uc, dM).bind(this); + } + /** + * A list of radio values that belong this group. + */ + get values() { + return l(this, Da).values; + } + /** + * The radio value that is checked in this group. + */ + get value() { + return l(this, Da).value; + } + set value(e) { + l(this, Da).value = e; + } + onSetup() { + Se ? m(this, Uc, ox).call(this) : Z(m(this, Uc, ox).bind(this)); + } +} +Da = new WeakMap(), Uc = new WeakSet(), ox = function() { + l(this, Da).value = this.$props.value(); +}, dM = function(e, s) { + const r = this.createEvent("change", { detail: e, trigger: s }); + this.dispatch(r); +}, U(V2, "props", { + value: "" +}); +const hM = V2.prototype; +Kt(hM, "values"); +Kt(hM, "value"); +var Pi, Cc, ds, fM, pM, mM, gM, yM, lx, vM; +class B2 extends yt { + constructor() { + super(); + S(this, ds); + S(this, Pi, He(!1)); + S(this, Cc, { + value: this.$props.value, + check: m(this, ds, yM).bind(this), + onCheck: null + }); + new hi(); + } + /** + * Whether this radio is currently checked. + */ + get checked() { + return l(this, Pi).call(this); + } + onSetup() { + this.setAttributes({ + value: this.$props.value, + "data-checked": l(this, Pi), + "aria-checked": us(l(this, Pi)) + }); + } + onAttach(e) { + const s = Ha(Va); + Yt(e, "tabindex", s ? "-1" : "0"), Yt(e, "role", s ? "menuitemradio" : "radio"), Z(m(this, ds, mM).bind(this)); + } + onConnect(e) { + m(this, ds, pM).call(this), hl(e, m(this, ds, gM).bind(this)), ft(m(this, ds, fM).bind(this)); + } +} +Pi = new WeakMap(), Cc = new WeakMap(), ds = new WeakSet(), fM = function() { + Dn(() => { + Cn(rx).remove(l(this, Cc)); + }, this.connectScope); +}, pM = function() { + Cn(rx).add(l(this, Cc)); +}, mM = function() { + var r, i; + const { value: e } = this.$props, s = e(); + pe(l(this, Pi)) && ((i = (r = l(this, Cc)).onCheck) == null || i.call(r, s)); +}, gM = function(e) { + var s, r; + pe(l(this, Pi)) || (m(this, ds, lx).call(this, !0, e), m(this, ds, vM).call(this, e), (r = (s = l(this, Cc)).onCheck) == null || r.call(s, pe(this.$props.value), e)); +}, yM = function(e, s) { + pe(l(this, Pi)) !== e && m(this, ds, lx).call(this, e, s); +}, lx = function(e, s) { + l(this, Pi).set(e), this.dispatch("change", { detail: e, trigger: s }); +}, vM = function(e) { + this.dispatch("select", { trigger: e }); +}, U(B2, "props", { + value: "" +}); +const nJ = B2.prototype; +Kt(nJ, "checked"); +var ew, er, Ad, Rs, bM, Ni, _p, wM, cx, xM, CM, _M; +let sJ = (ew = class extends yt { + constructor() { + super(...arguments); + S(this, Rs); + S(this, er); + S(this, Ad, null); + S(this, Ni, 0); + S(this, _p, -1); + } + onSetup() { + P(this, er, en()); + const { event: e, action: s } = this.$props; + this.setAttributes({ + event: e, + action: s + }); + } + onAttach(e) { + e.setAttribute("data-media-gesture", ""), e.style.setProperty("pointer-events", "none"); + } + onConnect(e) { + var s; + P(this, Ad, (s = l(this, er).player.el) == null ? void 0 : s.querySelector( + "[data-media-provider]" + )), Z(m(this, Rs, bM).bind(this)); + } +}, er = new WeakMap(), Ad = new WeakMap(), Rs = new WeakSet(), bM = function() { + let e = this.$props.event(), s = this.$props.disabled(); + !l(this, Ad) || !e || s || (/^dbl/.test(e) && (e = e.split(/^dbl/)[1]), (e === "pointerup" || e === "pointerdown") && l(this, er).$state.pointer() === "coarse" && (e = e === "pointerup" ? "touchend" : "touchstart"), dn( + l(this, Ad), + e, + m(this, Rs, wM).bind(this), + { passive: !1 } + )); +}, Ni = new WeakMap(), _p = new WeakMap(), wM = function(e) { + if (this.$props.disabled() || Jw(e) && (e.button !== 0 || l(this, er).activeMenu) || of(e) && l(this, er).activeMenu || O2(e) || !m(this, Rs, xM).call(this, e)) + return; + e.MEDIA_GESTURE = !0, e.preventDefault(); + const s = pe(this.$props.event); + if (!(s == null ? void 0 : s.startsWith("dbl"))) + l(this, Ni) === 0 && setTimeout(() => { + l(this, Ni) === 1 && m(this, Rs, cx).call(this, e); + }, 250); + else if (l(this, Ni) === 1) { + queueMicrotask(() => m(this, Rs, cx).call(this, e)), clearTimeout(l(this, _p)), P(this, Ni, 0); + return; + } + l(this, Ni) === 0 && P(this, _p, window.setTimeout(() => { + P(this, Ni, 0); + }, 275)), p3(this, Ni)._++; +}, cx = function(e) { + this.el.setAttribute("data-triggered", ""), requestAnimationFrame(() => { + m(this, Rs, CM).call(this) && m(this, Rs, _M).call(this, pe(this.$props.action), e), requestAnimationFrame(() => { + this.el.removeAttribute("data-triggered"); + }); + }); +}, /** Validate event occurred in gesture bounds. */ +xM = function(e) { + if (!this.el) return !1; + if (Jw(e) || VN(e) || of(e)) { + const s = of(e) ? e.changedTouches[0] ?? e.touches[0] : void 0, r = (s == null ? void 0 : s.clientX) ?? e.clientX, i = (s == null ? void 0 : s.clientY) ?? e.clientY, a = this.el.getBoundingClientRect(), o = i >= a.top && i <= a.bottom && r >= a.left && r <= a.right; + return e.type.includes("leave") ? !o : o; + } + return !0; +}, /** Validate gesture has the highest z-index in this triggered group. */ +CM = function() { + const e = l(this, er).player.el.querySelectorAll( + "[data-media-gesture][data-triggered]" + ); + return Array.from(e).sort( + (s, r) => +getComputedStyle(r).zIndex - +getComputedStyle(s).zIndex + )[0] === this.el; +}, _M = function(e, s) { + if (!e) return; + const r = new Nt("will-trigger", { + detail: e, + cancelable: !0, + trigger: s + }); + if (this.dispatchEvent(r), r.defaultPrevented) return; + const [i, a] = e.replace(/:([a-z])/, "-$1").split(":"); + e.includes(":fullscreen") ? l(this, er).remote.toggleFullscreen("prefer-media", s) : e.includes("seek:") ? l(this, er).remote.seek(pe(l(this, er).$state.currentTime) + (+a || 0), s) : l(this, er).remote[S2(i)](s), this.dispatch("trigger", { + detail: e, + trigger: s + }); +}, U(ew, "props", { + disabled: !1, + event: void 0, + action: void 0 +}), ew); +var Pd, La, ja, Sp, ux; +class rJ { + constructor(t) { + S(this, Sp); + U(this, "priority", 10); + S(this, Pd, null); + S(this, La); + S(this, ja); + P(this, La, t); + } + attach() { + } + canRender() { + return !0; + } + detach() { + var t; + (t = l(this, ja)) == null || t.abort(), P(this, ja, void 0), l(this, La).reset(), P(this, Pd, null); + } + changeTrack(t) { + var e; + !t || l(this, Pd) === t || ((e = l(this, ja)) == null || e.abort(), P(this, ja, new Dt(t)), t.readyState < 2 ? (l(this, La).reset(), l(this, ja).add("load", () => m(this, Sp, ux).call(this, t), { once: !0 })) : m(this, Sp, ux).call(this, t), l(this, ja).add("add-cue", (s) => { + l(this, La).addCue(s.detail); + }).add("remove-cue", (s) => { + l(this, La).removeCue(s.detail); + }), P(this, Pd, t)); + } +} +Pd = new WeakMap(), La = new WeakMap(), ja = new WeakMap(), Sp = new WeakSet(), ux = function(t) { + l(this, La).changeTrack({ + cues: [...t.cues], + regions: [...t.regions] + }); +}; +var ar, Fs, pt, Tg, SM, EM, kM, dx, TM, AM, PM, NM, hx, $M, RM, Fa, fx, Ag, px, mx; +let iJ = (ar = class extends yt { + constructor() { + super(...arguments); + S(this, pt); + S(this, Fs); + S(this, Fa, -1); + } + onSetup() { + P(this, Fs, en()), this.setAttributes({ + "aria-hidden": us(m(this, pt, Tg).bind(this)) + }); + } + onAttach(e) { + e.style.setProperty("pointer-events", "none"); + } + onConnect(e) { + ar.lib() || import("./prod-DTLJXtPo.js").then((s) => s.d).then((s) => ar.lib.set(s)), Z(m(this, pt, SM).bind(this)); + } +}, Fs = new WeakMap(), pt = new WeakSet(), Tg = function() { + const { textTrack: e, remotePlaybackState: s, iOSControls: r } = l(this, Fs).$state, i = e(); + return r() || s() === "connected" || !i || !As(i); +}, SM = function() { + if (!ar.lib()) return; + const { viewType: e } = l(this, Fs).$state; + return e() === "audio" ? m(this, pt, EM).call(this) : m(this, pt, AM).call(this); +}, EM = function() { + return Z(m(this, pt, kM).bind(this)), m(this, pt, hx).call(this, null), () => { + this.el.textContent = ""; + }; +}, kM = function() { + if (m(this, pt, Tg).call(this)) return; + m(this, pt, dx).call(this); + const { textTrack: e } = l(this, Fs).$state; + dn(e(), "cue-change", m(this, pt, dx).bind(this)), Z(m(this, pt, TM).bind(this)); +}, dx = function() { + this.el.textContent = "", l(this, Fa) >= 0 && m(this, pt, Ag).call(this); + const { realCurrentTime: e, textTrack: s } = l(this, Fs).$state, { renderVTTCueString: r } = ar.lib(), i = pe(e), a = pe(s).activeCues; + for (const o of a) { + const c = m(this, pt, px).call(this), u = m(this, pt, mx).call(this); + u.innerHTML = r(o, i), c.append(u), this.el.append(u); + } +}, TM = function() { + const { realCurrentTime: e } = l(this, Fs).$state, { updateTimedVTTCueNodes: s } = ar.lib(); + s(this.el, e()); +}, AM = function() { + const { CaptionsRenderer: e } = ar.lib(), s = new e(this.el), r = new rJ(s); + return l(this, Fs).textRenderers.add(r), Z(m(this, pt, PM).bind(this, s)), Z(m(this, pt, NM).bind(this, s)), m(this, pt, hx).call(this, s), () => { + this.el.textContent = "", l(this, Fs).textRenderers.remove(r), s.destroy(); + }; +}, PM = function(e) { + e.dir = this.$props.textDir(); +}, NM = function(e) { + var i; + if (m(this, pt, Tg).call(this)) return; + const { realCurrentTime: s, textTrack: r } = l(this, Fs).$state; + e.currentTime = s(), l(this, Fa) >= 0 && ((i = r()) != null && i.activeCues[0]) && m(this, pt, Ag).call(this); +}, hx = function(e) { + const s = l(this, Fs).player; + if (!s) return; + const r = m(this, pt, $M).bind(this, e); + dn(s, "vds-font-change", r); +}, $M = function(e) { + var r; + if (l(this, Fa) >= 0) { + m(this, pt, fx).call(this); + return; + } + const { textTrack: s } = l(this, Fs).$state; + (r = s()) != null && r.activeCues[0] ? e == null || e.update(!0) : m(this, pt, RM).call(this); +}, RM = function() { + var r, i; + const e = m(this, pt, px).call(this); + Ze(e, "data-example", ""); + const s = m(this, pt, mx).call(this); + Ze(s, "data-example", ""), s.textContent = this.$props.exampleText(), e == null || e.append(s), (r = this.el) == null || r.append(e), (i = this.el) == null || i.setAttribute("data-example", ""), m(this, pt, fx).call(this); +}, Fa = new WeakMap(), fx = function() { + window.clearTimeout(l(this, Fa)), P(this, Fa, window.setTimeout(m(this, pt, Ag).bind(this), 2500)); +}, Ag = function() { + var e, s; + (e = this.el) == null || e.removeAttribute("data-example"), (s = this.el) != null && s.querySelector("[data-example]") && (this.el.textContent = ""), P(this, Fa, -1); +}, px = function() { + const e = document.createElement("div"); + return Ze(e, "data-part", "cue-display"), e; +}, mx = function() { + const e = document.createElement("div"); + return Ze(e, "data-part", "cue"), e; +}, U(ar, "props", { + textDir: "ltr", + exampleText: "Captions look like this." +}), U(ar, "lib", He(null)), ar); +var Lm, xr, Jt, gx, IM, yx, OM, MM, Ep, vx, bx, wx, DM, xx, LM; +let aJ = (Lm = class extends yt { + constructor() { + super(...arguments); + S(this, Jt); + S(this, xr); + S(this, Ep, ""); + } + onSetup() { + P(this, xr, en()), m(this, Jt, vx).call(this), m(this, Jt, bx).call(this), m(this, Jt, wx).call(this), m(this, Jt, yx).call(this); + } + onAttach(e) { + e.style.setProperty("pointer-events", "none"), Z(m(this, Jt, MM).bind(this)), Z(m(this, Jt, vx).bind(this)), Z(m(this, Jt, bx).bind(this)), Z(m(this, Jt, wx).bind(this)), Z(m(this, Jt, yx).bind(this)); + const { started: s } = l(this, xr).$state; + this.setAttributes({ + "data-visible": () => !s() && !this.$state.hidden(), + "data-loading": m(this, Jt, OM).bind(this), + "data-error": m(this, Jt, gx).bind(this), + "data-hidden": this.$state.hidden + }); + } + onConnect(e) { + Z(m(this, Jt, IM).bind(this)), Z(m(this, Jt, DM).bind(this)); + } +}, xr = new WeakMap(), Jt = new WeakSet(), gx = function() { + const { error: e } = this.$state; + return !ii(e()); +}, IM = function() { + const { canLoadPoster: e, poster: s } = l(this, xr).$state; + !e() && s() && lh(s(), "preconnect"); +}, yx = function() { + const { src: e } = this.$props, { poster: s, nativeControls: r } = l(this, xr).$state; + this.el && Ze(this.el, "display", r() ? "none" : null), this.$state.hidden.set(m(this, Jt, gx).call(this) || !(e() || s()) || r()); +}, OM = function() { + const { loading: e, hidden: s } = this.$state; + return !s() && e(); +}, MM = function() { + const e = this.$state.img(); + e && (new Dt(e).add("load", m(this, Jt, xx).bind(this)).add("error", m(this, Jt, LM).bind(this)), e.complete && m(this, Jt, xx).call(this)); +}, Ep = new WeakMap(), vx = function() { + const { poster: e } = l(this, xr).$props, { canLoadPoster: s, providedPoster: r, inferredPoster: i } = l(this, xr).$state, a = this.$props.src() || "", o = a || e() || i(); + l(this, Ep) === r() && r.set(a), this.$state.src.set(s() && o.length ? o : null), P(this, Ep, a); +}, bx = function() { + const { src: e } = this.$props, { alt: s } = this.$state, { poster: r } = l(this, xr).$state; + s.set(e() || r() ? this.$props.alt() : null); +}, wx = function() { + const { crossOrigin: e } = this.$props, { crossOrigin: s } = this.$state, { crossOrigin: r, poster: i } = l(this, xr).$state, a = e() !== null ? e() : r(); + s.set( + /ytimg\.com|vimeo/.test(i() || "") ? null : a === !0 ? "anonymous" : a + ); +}, DM = function() { + const { loading: e, error: s } = this.$state, { canLoadPoster: r, poster: i } = l(this, xr).$state; + e.set(r() && !!i()), s.set(null); +}, xx = function() { + const { loading: e, error: s } = this.$state; + e.set(!1), s.set(null); +}, LM = function(e) { + const { loading: s, error: r } = this.$state; + s.set(!1), r.set(e); +}, U(Lm, "props", { + src: null, + alt: null, + crossOrigin: null +}), U(Lm, "state", new to({ + img: null, + src: null, + alt: null, + crossOrigin: null, + loading: !0, + error: null, + hidden: !1 +})), Lm); +var jm, Nd, Qo, kp, Tp, Bn, jM, FM, VM, Cx, BM, UM, _x, qM; +let oJ = (jm = class extends yt { + constructor() { + super(...arguments); + S(this, Bn); + S(this, Nd); + S(this, Qo, He(null)); + S(this, kp, He(!0)); + S(this, Tp, He(!0)); + } + onSetup() { + P(this, Nd, en()), m(this, Bn, Cx).call(this); + const { type: e } = this.$props; + this.setAttributes({ + "data-type": e, + "data-remainder": m(this, Bn, _x).bind(this) + }), new $7({ + callback: m(this, Bn, jM).bind(this) + }).attach(this); + } + onAttach(e) { + e.hasAttribute("role") || Z(m(this, Bn, BM).bind(this)), Z(m(this, Bn, Cx).bind(this)); + } + onConnect(e) { + ft(R$(e, l(this, kp).set)), Z(m(this, Bn, FM).bind(this)), Z(m(this, Bn, VM).bind(this)); + } +}, Nd = new WeakMap(), Qo = new WeakMap(), kp = new WeakMap(), Tp = new WeakMap(), Bn = new WeakSet(), jM = function(e) { + l(this, Tp).set(e[0].isIntersecting); +}, FM = function() { + const { hidden: e } = this.$props; + this.$state.hidden.set(e() || !l(this, kp).call(this) || !l(this, Tp).call(this)); +}, VM = function() { + if (!this.$props.toggle()) { + l(this, Qo).set(null); + return; + } + this.el && hl(this.el, m(this, Bn, qM).bind(this)); +}, Cx = function() { + const { hidden: e, timeText: s } = this.$state, { duration: r } = l(this, Nd).$state; + if (e()) return; + const { type: i, padHours: a, padMinutes: o, showHours: c } = this.$props, u = m(this, Bn, UM).call(this, i()), f = r(), p = m(this, Bn, _x).call(this); + if (!Number.isFinite(u + f)) { + s.set("LIVE"); + return; + } + const g = p ? Math.max(0, f - u) : u, y = Mv(g, { + padHrs: a(), + padMins: o(), + showHrs: c() + }); + s.set((p ? "-" : "") + y); +}, BM = function() { + if (!this.el) return; + const { toggle: e } = this.$props; + Ze(this.el, "role", e() ? "timer" : null), Ze(this.el, "tabindex", e() ? 0 : null); +}, UM = function(e) { + const { bufferedEnd: s, duration: r, currentTime: i } = l(this, Nd).$state; + switch (e) { + case "buffered": + return s(); + case "duration": + return r(); + default: + return i(); + } +}, _x = function() { + return this.$props.remainder() && l(this, Qo).call(this) !== !1; +}, qM = function(e) { + if (e.preventDefault(), l(this, Qo).call(this) === null) { + l(this, Qo).set(!this.$props.remainder()); + return; + } + l(this, Qo).set((s) => !s); +}, U(jm, "props", { + type: "current", + showHours: !1, + padHours: null, + padMinutes: null, + remainder: !1, + toggle: !1, + hidden: !1 +}), U(jm, "state", new to({ + timeText: "", + hidden: !1 +})), jm); +class zM extends g5 { +} +class lJ extends D5 { +} +class cJ extends EQ { +} +class uJ extends H5 { +} +class dJ extends kQ { +} +class hJ extends u7 { +} +class fJ extends IQ { +} +class pJ extends OQ { +} +class mJ extends jQ { +} +class gJ extends MQ { +} +class yJ extends DQ { +} +class vJ extends RQ { +} +class bJ extends NQ { +} +class wJ extends $Q { +} +class xJ extends LQ { +} +class CJ extends Z5 { +} +class _J extends AQ { +} +class SJ extends s7 { +} +class HM extends Lc { +} +class EJ extends Cy { +} +class kJ extends B0 { +} +class TJ extends U0 { +} +class AJ extends z0 { +} +class PJ extends H0 { +} +class NJ extends UQ { +} +class $J extends j2 { +} +class RJ extends xy { +} +class IJ extends _I { +} +class OJ extends F2 { +} +class MJ extends Xc { +} +class DJ extends Lv { +} +class LJ extends rM { +} +class jJ extends tJ { +} +class FJ extends V2 { +} +class VJ extends B2 { +} +class BJ extends iJ { +} +class UJ extends sJ { +} +class qJ extends aJ { +} +class WM extends oI { +} +class zJ extends oJ { +} +const GM = d.forwardRef((n, t) => { + const { children: e, ...s } = n, r = d.Children.toArray(e), i = r.find(WJ); + if (i) { + const a = i.props.children, o = r.map((c) => c === i ? d.Children.count(a) > 1 ? d.Children.only(null) : d.isValidElement(a) ? a.props.children : null : c); + return /* @__PURE__ */ d.createElement(Sx, { ...s, ref: t }, d.isValidElement(a) ? d.cloneElement(a, void 0, o) : null); + } + return /* @__PURE__ */ d.createElement(Sx, { ...s, ref: t }, e); +}); +GM.displayName = "Slot"; +const Sx = d.forwardRef((n, t) => { + const { children: e, ...s } = n; + return d.isValidElement(e) ? d.cloneElement(e, { + ...GJ(s, e.props), + ref: t ? Wt(t, e.ref) : e.ref + }) : d.Children.count(e) > 1 ? d.Children.only(null) : null; +}); +Sx.displayName = "SlotClone"; +const HJ = ({ children: n }) => /* @__PURE__ */ d.createElement(d.Fragment, null, n); +function WJ(n) { + return d.isValidElement(n) && n.type === HJ; +} +function GJ(n, t) { + const e = { ...t }; + for (const s in t) { + const r = n[s], i = t[s]; + /^on[A-Z]/.test(s) ? r && i ? e[s] = (...o) => { + i(...o), r(...o); + } : r && (e[s] = r) : s === "style" ? e[s] = { ...r, ...i } : s === "className" && (e[s] = [r, i].filter(Boolean).join(" ")); + } + return { ...n, ...e }; +} +const YJ = ["button", "div", "span", "img", "video", "audio"], We = YJ.reduce((n, t) => { + const e = d.forwardRef((s, r) => { + const { asChild: i, ...a } = s, o = i ? GM : t; + return /* @__PURE__ */ d.createElement(o, { ...a, ref: r }); + }); + return e.displayName = `Primitive.${t}`, { ...n, [t]: e }; +}, {}); +function KJ(n) { + return (n == null ? void 0 : n.$$PROVIDER_TYPE) === "REMOTION"; +} +function YM(n) { + return (n == null ? void 0 : n.type) === "video/remotion"; +} +const ES = HM.state.record, ZJ = Object.keys(ES).reduce( + (n, t) => ({ + ...n, + [t]() { + return ES[t]; + } + }), + {} +); +function Vb(n, t) { + const e = ah(Zc); + return gt((e || ZJ)[n]); +} +const kS = zM.state.record, XJ = Object.keys(kS).reduce( + (n, t) => ({ + ...n, + [t]() { + return kS[t]; + } + }), + {} +); +function it(n, t) { + const e = ah(Wp); + return gt((e || XJ)[n]); +} +function Ji() { + return E2(Gp); +} +const QJ = vt(bJ, { + domEventsRegex: /^onMedia/ +}), KM = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(QJ, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.button, + { + ...s, + ref: Wt(s.ref, e) + }, + n + )) +); +KM.displayName = "AirPlayButton"; +const JJ = vt(vJ, { + domEventsRegex: /^onMedia/ +}), ZM = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(JJ, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.button, + { + ...s, + ref: Wt(s.ref, e) + }, + n + )) +); +ZM.displayName = "PlayButton"; +const eee = vt(fJ, { + domEventsRegex: /^onMedia/ +}), XM = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(eee, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.button, + { + ...s, + ref: Wt(s.ref, e) + }, + n + )) +); +XM.displayName = "CaptionButton"; +const tee = vt(pJ, { + domEventsRegex: /^onMedia/ +}), QM = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(tee, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.button, + { + ...s, + ref: Wt(s.ref, e) + }, + n + )) +); +QM.displayName = "FullscreenButton"; +const nee = vt(gJ, { + domEventsRegex: /^onMedia/ +}), JM = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(nee, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.button, + { + ...s, + ref: Wt(s.ref, e) + }, + n + )) +); +JM.displayName = "MuteButton"; +const see = vt(yJ, { + domEventsRegex: /^onMedia/ +}), eD = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(see, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.button, + { + ...s, + ref: Wt(s.ref, e) + }, + n + )) +); +eD.displayName = "PIPButton"; +const ree = vt(xJ, { + domEventsRegex: /^onMedia/ +}), tD = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(ree, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.button, + { + ...s, + ref: Wt(s.ref, e) + }, + n + )) +); +tD.displayName = "SeekButton"; +const iee = vt(mJ, { + domEventsRegex: /^onMedia/ +}), nD = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(iee, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.button, + { + ...s, + ref: Wt(s.ref, e) + }, + n + )) +); +nD.displayName = "LiveButton"; +const ch = [ + "onDragStart", + "onDragEnd", + "onDragValueChange", + "onValueChange", + "onPointerValueChange" +], aee = vt($J), oee = vt(HM, { + events: ch +}), sD = d.forwardRef(({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(oee, { ...t, ref: e }, (s) => /* @__PURE__ */ d.createElement(We.div, { ...s }, n))); +sD.displayName = "Slider"; +const jv = d.forwardRef((n, t) => /* @__PURE__ */ d.createElement(We.div, { ...n, ref: t })); +jv.displayName = "SliderThumb"; +const Fv = d.forwardRef((n, t) => /* @__PURE__ */ d.createElement(We.div, { ...n, ref: t })); +Fv.displayName = "SliderTrack"; +const Vv = d.forwardRef((n, t) => /* @__PURE__ */ d.createElement(We.div, { ...n, ref: t })); +Vv.displayName = "SliderTrackFill"; +const lee = vt(IJ), U2 = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(lee, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.div, + { + ...s, + ref: Wt(s.ref, e) + }, + n + )) +); +U2.displayName = "SliderPreview"; +const q2 = d.forwardRef(({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(aee, { ...t }, (s, r) => { + const i = gt(() => r.getValueText(), r); + return /* @__PURE__ */ d.createElement(We.div, { ...s, ref: e }, i, n); +})); +q2.displayName = "SliderValue"; +const rD = d.forwardRef(({ children: n, ...t }, e) => { + const s = Vb("min"), r = Vb("max"), i = Vb("step"), a = (r - s) / i; + return /* @__PURE__ */ d.createElement(We.div, { ...t, ref: e }, Array.from({ length: Math.floor(a) + 1 }).map((o, c) => n(c))); +}); +rD.displayName = "SliderSteps"; +const cee = vt(kJ, { + events: ch, + domEventsRegex: /^onMedia/ +}), iD = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(cee, { ...t, ref: e }, (s) => /* @__PURE__ */ d.createElement(We.div, { ...s }, n)) +); +iD.displayName = "VolumeSlider"; +function uee(n = 0, t = 0, e = "") { + return Se ? { + startTime: n, + endTime: t, + text: e, + addEventListener: cr, + removeEventListener: cr, + dispatchEvent: cr + } : new window.VTTCue(n, t, e); +} +function dee(n, t) { + const e = new URL(n); + for (const s of Object.keys(t)) + e.searchParams.set(s, t[s] + ""); + return e.toString(); +} +const hee = vt(WM), aD = d.forwardRef(({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(hee, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.div, + { + ...s, + ref: Wt(s.ref, e) + }, + n +))); +aD.displayName = "Thumbnail"; +const z2 = d.forwardRef(({ children: n, ...t }, e) => { + const { src: s, img: r, crossOrigin: i } = ah(WM.state), a = gt(s), o = gt(i); + return /* @__PURE__ */ d.createElement( + We.img, + { + crossOrigin: o, + ...t, + src: a || void 0, + ref: Wt(r.set, e) + }, + n + ); +}); +z2.displayName = "ThumbnailImg"; +const Bv = d.createContext({ + $chapters: He(null) +}); +Bv.displayName = "TimeSliderContext"; +const fee = vt(EJ, { + events: ch, + domEventsRegex: /^onMedia/ +}), oD = d.forwardRef( + ({ children: n, ...t }, e) => { + const s = d.useMemo(() => He(null), []); + return /* @__PURE__ */ d.createElement(Bv.Provider, { value: { $chapters: s } }, /* @__PURE__ */ d.createElement(fee, { ...t, ref: e }, (r) => /* @__PURE__ */ d.createElement(We.div, { ...r }, n))); + } +); +oD.displayName = "TimeSlider"; +const pee = vt(OJ), lD = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(pee, { ...t }, (s, r) => /* @__PURE__ */ d.createElement( + We.div, + { + ...s, + ref: Wt(s.ref, e) + }, + /* @__PURE__ */ d.createElement(cD, { instance: r }, n) + )) +); +lD.displayName = "SliderChapters"; +function cD({ instance: n, children: t }) { + const e = gt(() => n.cues, n), s = d.useRef([]), r = d.useRef(null), { $chapters: i } = d.useContext(Bv); + return r.current || (r.current = uee()), d.useEffect(() => (i.set(n), () => void i.set(null)), [n]), d.useEffect(() => { + n.setRefs(s.current); + }, [e]), t(e.length ? e : [r.current], (a) => { + if (!a) { + s.current.length = 0; + return; + } + s.current.push(a); + }); +} +cD.displayName = "SliderChapterTracks"; +const uD = d.forwardRef( + ({ children: n, ...t }, e) => { + const { $chapters: s } = d.useContext(Bv), [r, i] = d.useState(); + return d.useEffect(() => Z(() => { + const a = s(), o = (a == null ? void 0 : a.activePointerCue) || (a == null ? void 0 : a.activeCue); + i((o == null ? void 0 : o.text) || ""); + }), []), /* @__PURE__ */ d.createElement(We.div, { ...t, ref: e }, r, n); + } +); +uD.displayName = "SliderChapterTitle"; +const dD = d.forwardRef((n, t) => /* @__PURE__ */ d.createElement(We.div, { ...n, ref: t })); +dD.displayName = "SliderProgress"; +const mee = vt(NJ), hD = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(mee, { ...t }, (s) => /* @__PURE__ */ d.createElement(We.div, { ...s, ref: Wt(s.ref, e) }, n)) +); +hD.displayName = "SliderThumbnail"; +const TS = { + Root: hD, + Img: z2 +}, gee = vt(RJ, { + events: ["onCanPlay", "onError"] +}), yee = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(gee, { ...t }, (s, r) => /* @__PURE__ */ d.createElement( + fD, + { + ...s, + instance: r, + ref: Wt(s.ref, e) + }, + n + )) +); +yee.displayName = "SliderVideo"; +const fD = d.forwardRef( + ({ instance: n, children: t, ...e }, s) => { + const { canLoad: r } = ah(Wp), { src: i, video: a, crossOrigin: o } = n.$state, c = gt(i), u = gt(r), f = gt(o); + return /* @__PURE__ */ d.createElement( + We.video, + { + style: { maxWidth: "unset" }, + ...e, + src: c || void 0, + muted: !0, + playsInline: !0, + preload: u ? "auto" : "none", + crossOrigin: f || void 0, + ref: Wt(a.set, s) + }, + t + ); + } +); +fD.displayName = "SliderVideoProvider"; +const vee = vt(FJ, { + events: ["onChange"] +}), Kp = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(vee, { ...t, ref: e }, (s) => /* @__PURE__ */ d.createElement(We.div, { ...s }, n)) +); +Kp.displayName = "RadioGroup"; +const bee = vt(VJ, { + events: ["onChange", "onSelect"] +}), Zp = d.forwardRef(({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(bee, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.div, + { + ...s, + ref: Wt(s.ref, e) + }, + n +))); +Zp.displayName = "RadioItem"; +const wee = vt(MJ, { + events: ["onOpen", "onClose"], + domEventsRegex: /^onMedia/ +}), ea = d.forwardRef(({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(wee, { ...t, ref: e }, (s, r) => /* @__PURE__ */ d.createElement( + We.div, + { + ...s, + style: { display: r.isSubmenu ? void 0 : "contents", ...s.style } + }, + n +))); +ea.displayName = "Menu"; +const xee = vt(DJ, { + events: ["onSelect"] +}), Uv = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(xee, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.button, + { + ...s, + ref: Wt(s.ref, e) + }, + n + )) +); +Uv.displayName = "MenuButton"; +const H2 = d.forwardRef( + ({ container: n = null, disabled: t = !1, children: e, ...s }, r) => { + let i = it("fullscreen"), a = t === "fullscreen" ? !i : !t; + const o = d.useMemo(() => Se ? null : (Le(n) ? document.querySelector(n) : n) ?? document.body, [n]); + return !o || !a ? e : Q8( + /* @__PURE__ */ d.createElement( + We.div, + { + ...s, + style: { display: "contents", ...s.style }, + ref: r + }, + e + ), + o + ); + } +); +H2.displayName = "MenuPortal"; +const Cee = vt(LJ), ta = d.forwardRef(({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(Cee, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.div, + { + ...s, + ref: Wt(s.ref, e) + }, + n +))); +ta.displayName = "MenuItems"; +const _ee = vt(jJ), See = d.forwardRef(({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(_ee, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.div, + { + ...s, + ref: Wt(s.ref, e) + }, + n +))); +See.displayName = "MenuItem"; +const Eee = vt(UJ, { + events: ["onWillTrigger", "onTrigger"] +}), gu = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(Eee, { ...t, ref: e }, (s) => /* @__PURE__ */ d.createElement(We.div, { ...s }, n)) +); +gu.displayName = "Gesture"; +const kee = vt(zJ), Ef = d.forwardRef(({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(kee, { ...t }, (s, r) => /* @__PURE__ */ d.createElement( + pD, + { + ...s, + instance: r, + ref: Wt(s.ref, e) + }, + n +))); +Ef.displayName = "Time"; +const pD = d.forwardRef( + ({ instance: n, children: t, ...e }, s) => { + const { timeText: r } = n.$state, i = gt(r); + return /* @__PURE__ */ d.createElement(We.div, { ...e, ref: s }, i, t); + } +); +pD.displayName = "TimeText"; +function mD() { + const n = Ji(); + return (n == null ? void 0 : n.player) || null; +} +function Tee() { + const n = Ji(), { audioTracks: t, audioTrack: e } = n.$state, s = gt(t); + return gt(e), d.useMemo(() => { + const r = s.map((i) => ({ + track: i, + label: i.label, + value: AS(i), + get selected() { + return e() === i; + }, + select(a) { + const o = t().indexOf(i); + o >= 0 && n.remote.changeAudioTrack(o, a); + } + })); + return Object.defineProperty(r, "disabled", { + get() { + return r.length <= 1; + } + }), Object.defineProperty(r, "selectedTrack", { + get() { + return e(); + } + }), Object.defineProperty(r, "selectedValue", { + get() { + const i = e(); + return i ? AS(i) : void 0; + } + }), r; + }, [s]); +} +function AS(n) { + return n.label.toLowerCase(); +} +function Aee({ off: n = !0 } = {}) { + const t = Ji(), { textTracks: e, textTrack: s } = t.$state, r = gt(e); + return gt(s), d.useMemo(() => { + const i = r.filter(As), a = i.map((o) => ({ + track: o, + label: o.label, + value: PS(o), + get selected() { + return s() === o; + }, + select(c) { + const u = e().indexOf(o); + u >= 0 && t.remote.changeTextTrackMode(u, "showing", c); + } + })); + return n && a.unshift({ + track: null, + label: Le(n) ? n : "Off", + value: "off", + get selected() { + return !s(); + }, + select(o) { + t.remote.toggleCaptions(o); + } + }), Object.defineProperty(a, "disabled", { + get() { + return !i.length; + } + }), Object.defineProperty(a, "selectedTrack", { + get() { + return s(); + } + }), Object.defineProperty(a, "selectedValue", { + get() { + const o = s(); + return o ? PS(o) : "off"; + } + }), a; + }, [r]); +} +function PS(n) { + return n.id + ":" + n.kind + "-" + n.label.toLowerCase(); +} +const Pee = vt(cJ, { + events: ["onChange"] +}), gD = d.forwardRef( + ({ style: n, children: t, ...e }, s) => /* @__PURE__ */ d.createElement(Pee, { ...e }, (r) => /* @__PURE__ */ d.createElement( + We.div, + { + ...r, + style: { display: "contents", ...n }, + ref: Wt(r.ref, s) + }, + t + )) +); +gD.displayName = "MediaAnnouncer"; +const Nee = vt(uJ), qv = d.forwardRef(({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(Nee, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.div, + { + ...s, + ref: Wt(s.ref, e) + }, + n +))); +qv.displayName = "Controls"; +const $ee = vt(dJ), Mi = d.forwardRef(({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement($ee, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.div, + { + ...s, + ref: Wt(s.ref, e) + }, + n +))); +Mi.displayName = "ControlsGroup"; +const Ree = vt(CJ); +function yD({ children: n, ...t }) { + return /* @__PURE__ */ d.createElement(Ree, { ...t }, n); +} +yD.displayName = "Tooltip"; +const Iee = vt(_J), vD = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(Iee, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.button, + { + ...s, + ref: Wt(s.ref, e) + }, + n + )) +); +vD.displayName = "TooltipTrigger"; +const Oee = vt(SJ), bD = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(Oee, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.div, + { + ...s, + ref: Wt(s.ref, e) + }, + n + )) +); +bD.displayName = "TooltipContent"; +const Mee = vt(wJ, { + domEventsRegex: /^onMedia/ +}), wD = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(Mee, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.button, + { + ...s, + ref: Wt(s.ref, e) + }, + n + )) +); +wD.displayName = "GoogleCastButton"; +const Dee = vt(PJ, { + events: ch, + domEventsRegex: /^onMedia/ +}), xD = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(Dee, { ...t, ref: e }, (s) => /* @__PURE__ */ d.createElement(We.div, { ...s }, n)) +); +xD.displayName = "QualitySlider"; +const Lee = vt(TJ, { + events: ch, + domEventsRegex: /^onMedia/ +}), CD = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(Lee, { ...t, ref: e }, (s) => /* @__PURE__ */ d.createElement(We.div, { ...s }, n)) +); +CD.displayName = "AudioGainSlider"; +const jee = vt(AJ, { + events: ch, + domEventsRegex: /^onMedia/ +}), _D = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(jee, { ...t, ref: e }, (s) => /* @__PURE__ */ d.createElement(We.div, { ...s }, n)) +); +_D.displayName = "SpeedSlider"; +const SD = d.forwardRef(({ children: n, ...t }, e) => { + const s = it("title"); + return /* @__PURE__ */ d.createElement(We.span, { ...t, ref: e }, s, n); +}); +SD.displayName = "Title"; +function ED(n) { + const [t, e] = d.useState([]); + return d.useEffect(() => { + if (!n) { + e([]); + return; + } + function s() { + n && e(n.activeCues); + } + return s(), dn(n, "cue-change", s); + }, [n]), t; +} +function W2(n) { + const t = Ji(), [e, s] = d.useState(null); + return d.useEffect(() => R2(t.textTracks, n, s), [n]), e; +} +function kD() { + var e; + const n = W2("chapters"); + return ((e = ED(n)[0]) == null ? void 0 : e.text) || ""; +} +const TD = d.forwardRef( + ({ defaultText: n = "", children: t, ...e }, s) => { + const r = kD(); + return /* @__PURE__ */ d.createElement(We.span, { ...e, ref: s }, r || n, t); + } +); +TD.displayName = "ChapterTitle"; +const Fee = vt(BJ), AD = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(Fee, { ...t, ref: e }, (s) => /* @__PURE__ */ d.createElement(We.div, { ...s }, n)) +); +AD.displayName = "Captions"; +const Vee = d.forwardRef( + ({ size: n = 96, children: t, ...e }, s) => /* @__PURE__ */ d.createElement( + "svg", + { + width: n, + height: n, + fill: "none", + viewBox: "0 0 120 120", + "aria-hidden": "true", + "data-part": "root", + ...e, + ref: s + }, + t + ) +), Bee = d.forwardRef( + ({ width: n = 8, children: t, ...e }, s) => /* @__PURE__ */ d.createElement( + "circle", + { + cx: "60", + cy: "60", + r: "54", + stroke: "currentColor", + strokeWidth: n, + "data-part": "track", + ...e, + ref: s + }, + t + ) +), Uee = d.forwardRef( + ({ width: n = 8, fillPercent: t = 50, children: e, ...s }, r) => /* @__PURE__ */ d.createElement( + "circle", + { + cx: "60", + cy: "60", + r: "54", + stroke: "currentColor", + pathLength: "100", + strokeWidth: n, + strokeDasharray: 100, + strokeDashoffset: 100 - t, + "data-part": "track-fill", + ...s, + ref: r + }, + e + ) +); +function Bb(n, t = []) { + const e = ih(); + return d.useMemo(() => Dn(() => He(n), e), [e, ...t]); +} +function _y(n, t = []) { + const e = ih(); + return d.useMemo(() => Dn(() => za(n), e), [e, ...t]); +} +function qee(n, t = []) { + const e = ih(); + d.useEffect(() => Dn(() => Z(n), e), [e, ...t]); +} +function zee(n) { + const t = ih(); + return d.useMemo(() => Dn(n, t), [t]); +} +function Hee(n) { + const [t, e] = d.useState([]); + return d.useEffect(() => { + if (!n) return; + function s() { + n && e([...n.cues]); + } + const r = new Dt(n).add("add-cue", s).add("remove-cue", s); + return s(), () => { + e([]), r.abort(); + }; + }, [n]), t; +} +function Wee() { + const n = Ji(), t = W2("chapters"), e = Hee(t), s = gt(n.$state.seekableStart), r = gt(n.$state.seekableEnd); + return ED(t), d.useMemo(() => { + const i = t ? e.filter((a) => a.startTime <= r && a.endTime >= s).map((a, o) => { + let c = null, u; + return { + cue: a, + label: a.text, + value: o.toString(), + startTimeText: Mv(Math.max(0, a.startTime - s)), + durationText: by( + Math.min(r, a.endTime) - Math.max(s, a.startTime) + ), + get selected() { + return a === t.activeCues[0]; + }, + setProgressVar(f) { + if (!f || a !== t.activeCues[0]) { + u == null || u(), u = void 0, f == null || f.style.setProperty("--progress", "0%"), c = null; + return; + } + c !== f && (c = f, u == null || u(), u = Z(() => { + const { realCurrentTime: p } = n.$state, g = p(), y = Math.max(s, a.startTime), v = Math.min(r, a.endTime) - y, b = Math.max(0, g - y) / v * 100; + f.style.setProperty("--progress", b.toFixed(3) + "%"); + })); + }, + select(f) { + n.remote.seek(a.startTime - s, f); + } + }; + }) : []; + return Object.defineProperty(i, "selectedValue", { + get() { + const a = i.findIndex((o) => o.selected); + return (a >= 0 ? a : 0).toString(); + } + }), i; + }, [e, s, r]); +} +function PD(n, t) { + d.useEffect(() => { + if (!n) return; + t(); + const e = new ResizeObserver(wl(t)); + return e.observe(n), () => e.disconnect(); + }, [n, t]); +} +function Gee(n) { + const [t, e] = d.useState(!1); + return d.useEffect(() => { + if (!n) return; + const s = new Dt(n).add("transitionstart", () => e(!0)).add("transitionend", () => e(!1)); + return () => s.abort(); + }, [n]), t; +} +function Yee(n) { + const [t, e] = d.useState(!1); + return d.useEffect(() => { + if (!n) return; + const s = new Dt(n).add("mouseenter", () => e(!0)).add("mouseleave", () => e(!1)); + return () => s.abort(); + }, [n]), t; +} +function Kee(n) { + const [t, e] = d.useState(!1); + return d.useEffect(() => { + if (!n) return; + const s = new Dt(n).add("focusin", () => e(!0)).add("focusout", () => e(!1)); + return () => s.abort(); + }, [n]), t; +} +function Zee(n) { + const t = Yee(n), e = Kee(n), s = d.useRef(!1); + return s.current && !t ? !1 : (s.current = t, t || e); +} +function Xee() { + const [n, t] = d.useState("dark"); + return d.useEffect(() => { + const e = window.matchMedia("(prefers-color-scheme: light)"); + function s() { + t(e.matches ? "light" : "dark"); + } + return s(), dn(e, "change", s); + }, []), n; +} +function ND(n) { + const t = mD(); + d.useEffect(() => { + if (t) + return Z(() => { + const e = t.$el; + return e == null || e.setAttribute("data-layout", n), () => e == null ? void 0 : e.removeAttribute("data-layout"); + }); + }, [t]); +} +const Qee = /* @__PURE__ */ He(null), Jee = /* @__PURE__ */ He(null), uh = d.createContext({}); +uh.displayName = "DefaultLayoutContext"; +function at() { + return d.useContext(uh); +} +function Be(n) { + const { translations: t } = at(); + return G2(t, n); +} +function G2(n, t) { + return (n == null ? void 0 : n[t]) ?? t; +} +function Y2(n) { + const t = Xee(); + return n === "default" ? null : n === "system" ? t : n; +} +function $D({ + type: n, + smLayoutWhen: t, + renderLayout: e +}) { + const s = d.forwardRef( + ({ + children: r, + className: i, + disableTimeSlider: a = !1, + hideQualityBitrate: o = !1, + icons: c, + colorScheme: u = "system", + download: f = null, + menuContainer: p = null, + menuGroup: g = "bottom", + noAudioGain: y = !1, + audioGains: v = { min: 0, max: 300, step: 25 }, + noGestures: b = !1, + noKeyboardAnimations: w = !1, + noModal: E = !1, + noScrubGesture: x, + playbackRates: C = { min: 0, max: 2, step: 0.25 }, + seekStep: _ = 10, + showMenuDelay: k, + showTooltipDelay: A = 700, + sliderChaptersMinWidth: T = 325, + slots: N, + smallLayoutWhen: $ = t, + thumbnails: D = null, + translations: V, + ...j + }, B) => { + const W = Ji(), J = gt(W.$props.load), G = it("canLoad"), q = it("viewType"), H = it("streamType"), L = _y(() => zd($) ? $ : $(W.player.state), [$]), X = Bb(!0), te = Bb(!0), Te = q === n, _e = L(), Je = zd($), Re = J === "play" && !G, nt = G || Je || Re, rt = Y2(u), qe = Bb(null); + return gt(L), /* @__PURE__ */ d.createElement( + "div", + { + ...j, + className: `vds-${n}-layout` + (rt ? ` ${rt}` : "") + (i ? ` ${i}` : ""), + "data-match": Te ? "" : null, + "data-sm": _e ? "" : null, + "data-lg": _e ? null : "", + "data-size": _e ? "sm" : "lg", + "data-no-scrub-gesture": x ? "" : null, + ref: Wt(qe.set, B) + }, + nt && Te ? /* @__PURE__ */ d.createElement( + uh.Provider, + { + value: { + disableTimeSlider: a, + hideQualityBitrate: o, + icons: c, + colorScheme: u, + download: f, + isSmallLayout: _e, + menuContainer: p, + menuGroup: g, + noAudioGain: y, + audioGains: v, + layoutEl: qe, + noGestures: b, + noKeyboardAnimations: w, + noModal: E, + noScrubGesture: x, + showMenuDelay: k, + showTooltipDelay: A, + sliderChaptersMinWidth: T, + slots: N, + seekStep: _, + playbackRates: C, + thumbnails: D, + translations: V, + userPrefersAnnouncements: X, + userPrefersKeyboardAnimations: te + } + }, + e({ streamType: H, isSmallLayout: _e, isLoadLayout: Re }), + r + ) : null + ); + } + ); + return s.displayName = "DefaultMediaLayout", s; +} +function RD() { + return d.useContext(uh).slots; +} +function K2() { + return d.useContext(uh).slots; +} +function xe(n, t, e) { + const s = n == null ? void 0 : n[t], r = rh(t); + return /* @__PURE__ */ d.createElement(d.Fragment, null, n == null ? void 0 : n[`before${r}`], jn(s) ? e : s, n == null ? void 0 : n[`after${r}`]); +} +function zv() { + const { userPrefersAnnouncements: n, translations: t } = at(); + return gt(n) ? /* @__PURE__ */ d.createElement(gD, { translations: t }) : null; +} +zv.displayName = "DefaultAnnouncer"; +function Or({ content: n, placement: t, children: e }) { + const { showTooltipDelay: s } = at(); + return /* @__PURE__ */ d.createElement(yD, { showDelay: s }, /* @__PURE__ */ d.createElement(vD, { asChild: !0 }, e), /* @__PURE__ */ d.createElement(bD, { className: "vds-tooltip-content", placement: t }, n)); +} +Or.displayName = "DefaultTooltip"; +function Xp({ tooltip: n }) { + const { icons: t } = at(), e = Be("Play"), s = Be("Pause"), r = it("paused"), i = it("ended"); + return /* @__PURE__ */ d.createElement(Or, { content: r ? e : s, placement: n }, /* @__PURE__ */ d.createElement(ZM, { className: "vds-play-button vds-button", "aria-label": e }, i ? /* @__PURE__ */ d.createElement(t.PlayButton.Replay, { className: "vds-icon" }) : r ? /* @__PURE__ */ d.createElement(t.PlayButton.Play, { className: "vds-icon" }) : /* @__PURE__ */ d.createElement(t.PlayButton.Pause, { className: "vds-icon" }))); +} +Xp.displayName = "DefaultPlayButton"; +const ID = d.forwardRef( + ({ tooltip: n }, t) => { + const { icons: e } = at(), s = Be("Mute"), r = Be("Unmute"), i = it("muted"), a = it("volume"); + return /* @__PURE__ */ d.createElement(Or, { content: i ? r : s, placement: n }, /* @__PURE__ */ d.createElement(JM, { className: "vds-mute-button vds-button", "aria-label": s, ref: t }, i || a == 0 ? /* @__PURE__ */ d.createElement(e.MuteButton.Mute, { className: "vds-icon" }) : a < 0.5 ? /* @__PURE__ */ d.createElement(e.MuteButton.VolumeLow, { className: "vds-icon" }) : /* @__PURE__ */ d.createElement(e.MuteButton.VolumeHigh, { className: "vds-icon" }))); + } +); +ID.displayName = "DefaultMuteButton"; +function Hv({ tooltip: n }) { + const { icons: t } = at(), e = Be("Captions"), s = Be("Closed-Captions On"), r = Be("Closed-Captions Off"), i = it("textTrack"), a = i && As(i); + return /* @__PURE__ */ d.createElement(Or, { content: a ? s : r, placement: n }, /* @__PURE__ */ d.createElement(XM, { className: "vds-caption-button vds-button", "aria-label": e }, a ? /* @__PURE__ */ d.createElement(t.CaptionButton.On, { className: "vds-icon" }) : /* @__PURE__ */ d.createElement(t.CaptionButton.Off, { className: "vds-icon" }))); +} +Hv.displayName = "DefaultCaptionButton"; +function OD({ tooltip: n }) { + const { icons: t } = at(), e = Be("PiP"), s = Be("Enter PiP"), r = Be("Exit PiP"), i = it("pictureInPicture"); + return /* @__PURE__ */ d.createElement(Or, { content: i ? r : s, placement: n }, /* @__PURE__ */ d.createElement(eD, { className: "vds-pip-button vds-button", "aria-label": e }, i ? /* @__PURE__ */ d.createElement(t.PIPButton.Exit, { className: "vds-icon" }) : /* @__PURE__ */ d.createElement(t.PIPButton.Enter, { className: "vds-icon" }))); +} +OD.displayName = "DefaultPIPButton"; +function Z2({ tooltip: n }) { + const { icons: t } = at(), e = Be("Fullscreen"), s = Be("Enter Fullscreen"), r = Be("Exit Fullscreen"), i = it("fullscreen"); + return /* @__PURE__ */ d.createElement(Or, { content: i ? r : s, placement: n }, /* @__PURE__ */ d.createElement(QM, { className: "vds-fullscreen-button vds-button", "aria-label": e }, i ? /* @__PURE__ */ d.createElement(t.FullscreenButton.Exit, { className: "vds-icon" }) : /* @__PURE__ */ d.createElement(t.FullscreenButton.Enter, { className: "vds-icon" }))); +} +Z2.displayName = "DefaultFullscreenButton"; +function Ex({ + backward: n, + tooltip: t +}) { + const { icons: e, seekStep: s } = at(), r = Be("Seek Forward"), i = Be("Seek Backward"), a = (n ? -1 : 1) * s, o = a >= 0 ? r : i; + return /* @__PURE__ */ d.createElement(Or, { content: o, placement: t }, /* @__PURE__ */ d.createElement(tD, { className: "vds-seek-button vds-button", seconds: a, "aria-label": o }, a >= 0 ? /* @__PURE__ */ d.createElement(e.SeekButton.Forward, { className: "vds-icon" }) : /* @__PURE__ */ d.createElement(e.SeekButton.Backward, { className: "vds-icon" }))); +} +Ex.displayName = "DefaultSeekButton"; +function X2({ tooltip: n }) { + const { icons: t } = at(), e = Be("AirPlay"), s = it("remotePlaybackState"), r = Be(rh(s)), i = `${e} ${r}`, a = (s === "connecting" ? t.AirPlayButton.Connecting : s === "connected" ? t.AirPlayButton.Connected : null) ?? t.AirPlayButton.Default; + return /* @__PURE__ */ d.createElement(Or, { content: e, placement: n }, /* @__PURE__ */ d.createElement(KM, { className: "vds-airplay-button vds-button", "aria-label": i }, /* @__PURE__ */ d.createElement(a, { className: "vds-icon" }))); +} +X2.displayName = "DefaultAirPlayButton"; +function Q2({ tooltip: n }) { + const { icons: t } = at(), e = Be("Google Cast"), s = it("remotePlaybackState"), r = Be(rh(s)), i = `${e} ${r}`, a = (s === "connecting" ? t.GoogleCastButton.Connecting : s === "connected" ? t.GoogleCastButton.Connected : null) ?? t.GoogleCastButton.Default; + return /* @__PURE__ */ d.createElement(Or, { content: e, placement: n }, /* @__PURE__ */ d.createElement(wD, { className: "vds-google-cast-button vds-button", "aria-label": i }, /* @__PURE__ */ d.createElement(a, { className: "vds-icon" }))); +} +Q2.displayName = "DefaultGoogleCastButton"; +function J2() { + const n = it("live"), t = Be("Skip To Live"), e = Be("LIVE"); + return n ? /* @__PURE__ */ d.createElement(nD, { className: "vds-live-button", "aria-label": t }, /* @__PURE__ */ d.createElement("span", { className: "vds-live-button-text" }, e)) : null; +} +J2.displayName = "DefaultLiveButton"; +function Wv() { + const { download: n, icons: t } = at(), e = it("source"), s = it("title"), r = OZ({ + title: s, + src: e, + download: n + }), i = Be("Download"); + return Le(r == null ? void 0 : r.url) ? /* @__PURE__ */ d.createElement(Or, { content: i, placement: "top" }, /* @__PURE__ */ d.createElement( + "a", + { + role: "button", + className: "vds-download-button vds-button", + "aria-label": i, + href: dee(r.url, { download: r.name }), + download: r.name, + target: "_blank" + }, + t.DownloadButton ? /* @__PURE__ */ d.createElement(t.DownloadButton.Default, { className: "vds-icon" }) : null + )) : null; +} +Wv.displayName = "DefaultDownloadButton"; +function Gv() { + const n = Be("Captions look like this"); + return /* @__PURE__ */ d.createElement(AD, { className: "vds-captions", exampleText: n }); +} +Gv.displayName = "DefaultCaptions"; +function qs() { + return /* @__PURE__ */ d.createElement("div", { className: "vds-controls-spacer" }); +} +qs.displayName = "DefaultControlsSpacer"; +function MD() { + const { layoutEl: n } = at(), t = gt(n); + return d.useMemo(() => t == null ? void 0 : t.closest("dialog"), [t]); +} +function e3({ tooltip: n, placement: t, portalClass: e = "" }) { + const { + showMenuDelay: s, + noModal: r, + isSmallLayout: i, + icons: a, + menuGroup: o, + menuContainer: c, + colorScheme: u + } = at(), f = Be("Chapters"), p = Wee(), g = !p.length, { thumbnails: y } = at(), v = it("currentSrc"), b = it("viewType"), w = !i && o === "bottom" && b === "video" ? 26 : 0, E = gt(Qee), x = Y2(u), [C, _] = d.useState(!1), k = MD(); + if (g) return null; + function A() { + XS(() => { + _(!0); + }); + } + function T() { + _(!1); + } + const N = /* @__PURE__ */ d.createElement( + ta, + { + className: "vds-chapters-menu-items vds-menu-items", + placement: t, + offset: w + }, + C ? /* @__PURE__ */ d.createElement( + Kp, + { + className: "vds-chapters-radio-group vds-radio-group", + value: p.selectedValue, + "data-thumbnails": y ? "" : null + }, + p.map( + ({ cue: $, label: D, value: V, startTimeText: j, durationText: B, select: W, setProgressVar: J }) => /* @__PURE__ */ d.createElement( + Zp, + { + className: "vds-chapter-radio vds-radio", + value: V, + key: V, + onSelect: W, + ref: J + }, + y ? /* @__PURE__ */ d.createElement(aD, { src: y, className: "vds-thumbnail", time: $.startTime }, /* @__PURE__ */ d.createElement(z2, null)) : E && YM(v) ? /* @__PURE__ */ d.createElement(E, { className: "vds-thumbnail", frame: $.startTime * v.fps }) : null, + /* @__PURE__ */ d.createElement("div", { className: "vds-chapter-radio-content" }, /* @__PURE__ */ d.createElement("span", { className: "vds-chapter-radio-label" }, D), /* @__PURE__ */ d.createElement("span", { className: "vds-chapter-radio-start-time" }, j), /* @__PURE__ */ d.createElement("span", { className: "vds-chapter-radio-duration" }, B)) + ) + ) + ) : null + ); + return /* @__PURE__ */ d.createElement( + ea, + { + className: "vds-chapters-menu vds-menu", + showDelay: s, + onOpen: A, + onClose: T + }, + /* @__PURE__ */ d.createElement(Or, { content: f, placement: n }, /* @__PURE__ */ d.createElement( + Uv, + { + className: "vds-menu-button vds-button", + disabled: g, + "aria-label": f + }, + /* @__PURE__ */ d.createElement(a.Menu.Chapters, { className: "vds-icon" }) + )), + r || !i ? N : /* @__PURE__ */ d.createElement( + H2, + { + container: c ?? k, + className: e + (x ? ` ${x}` : ""), + disabled: "fullscreen", + "data-sm": i ? "" : null, + "data-lg": i ? null : "", + "data-size": i ? "sm" : "lg" + }, + N + ) + ); +} +e3.displayName = "DefaultChaptersMenu"; +const t3 = { + type: "color" +}, ete = { + type: "radio", + values: { + "Monospaced Serif": "mono-serif", + "Proportional Serif": "pro-serif", + "Monospaced Sans-Serif": "mono-sans", + "Proportional Sans-Serif": "pro-sans", + Casual: "casual", + Cursive: "cursive", + "Small Capitals": "capitals" + } +}, tte = { + type: "slider", + min: 0, + max: 400, + step: 25, + upIcon: null, + downIcon: null +}, n3 = { + type: "slider", + min: 0, + max: 100, + step: 5, + upIcon: null, + downIcon: null +}, nte = { + type: "radio", + values: ["None", "Drop Shadow", "Raised", "Depressed", "Outline"] +}, Sy = { + fontFamily: "pro-sans", + fontSize: "100%", + textColor: "#ffffff", + textOpacity: "100%", + textShadow: "none", + textBg: "#000000", + textBgOpacity: "100%", + displayBg: "#000000", + displayBgOpacity: "0%" +}, jc = Object.keys(Sy).reduce( + (n, t) => ({ + ...n, + [t]: He(Sy[t]) + }), + {} +); +if (!Se) + for (const n of Object.keys(jc)) { + const t = localStorage.getItem(`vds-player:${Wa(n)}`); + Le(t) && jc[n].set(t); + } +function ste() { + for (const n of Object.keys(jc)) { + const t = Sy[n]; + jc[n].set(t); + } +} +function Ub(n) { + const { style: t } = new Option(); + return t.color = n, t.color.match(/\((.*?)\)/)[1].replace(/,/g, " "); +} +let NS = !1, qb = /* @__PURE__ */ new Set(); +function rte() { + if (Se) return; + const { player: n } = en(); + qb.add(n), ft(() => qb.delete(n)), NS || (Dn(() => { + for (const t of QN(jc)) { + const e = jc[t], s = Sy[t], r = `--media-user-${Wa(t)}`, i = `vds-player:${Wa(t)}`; + Z(() => { + var u; + const a = e(), o = a === s, c = o ? null : ite(n, t, a); + for (const f of qb) + (u = f.el) == null || u.style.setProperty(r, c); + o ? localStorage.removeItem(i) : localStorage.setItem(i, a); + }); + } + }, null), NS = !0); +} +function ite(n, t, e) { + var s; + switch (t) { + case "fontFamily": + const r = e === "capitals" ? "small-caps" : ""; + return (s = n.el) == null || s.style.setProperty("--media-user-font-variant", r), ote(e); + case "fontSize": + case "textOpacity": + case "textBgOpacity": + case "displayBgOpacity": + return ate(e); + case "textColor": + return `rgb(${Ub(e)} / var(--media-user-text-opacity, 1))`; + case "textShadow": + return lte(e); + case "textBg": + return `rgb(${Ub(e)} / var(--media-user-text-bg-opacity, 1))`; + case "displayBg": + return `rgb(${Ub(e)} / var(--media-user-display-bg-opacity, 1))`; + } +} +function ate(n) { + return (parseInt(n) / 100).toString(); +} +function ote(n) { + switch (n) { + case "mono-serif": + return '"Courier New", Courier, "Nimbus Mono L", "Cutive Mono", monospace'; + case "mono-sans": + return '"Deja Vu Sans Mono", "Lucida Console", Monaco, Consolas, "PT Mono", monospace'; + case "pro-sans": + return 'Roboto, "Arial Unicode Ms", Arial, Helvetica, Verdana, "PT Sans Caption", sans-serif'; + case "casual": + return '"Comic Sans MS", Impact, Handlee, fantasy'; + case "cursive": + return '"Monotype Corsiva", "URW Chancery L", "Apple Chancery", "Dancing Script", cursive'; + case "capitals": + return '"Arial Unicode Ms", Arial, Helvetica, Verdana, "Marcellus SC", sans-serif + font-variant=small-caps'; + default: + return '"Times New Roman", Times, Georgia, Cambria, "PT Serif Caption", serif'; + } +} +function lte(n) { + switch (n) { + case "drop shadow": + return "rgb(34, 34, 34) 1.86389px 1.86389px 2.79583px, rgb(34, 34, 34) 1.86389px 1.86389px 3.72778px, rgb(34, 34, 34) 1.86389px 1.86389px 4.65972px"; + case "raised": + return "rgb(34, 34, 34) 1px 1px, rgb(34, 34, 34) 2px 2px"; + case "depressed": + return "rgb(204, 204, 204) 1px 1px, rgb(34, 34, 34) -1px -1px"; + case "outline": + return "rgb(34, 34, 34) 0px 0px 1.86389px, rgb(34, 34, 34) 0px 0px 1.86389px, rgb(34, 34, 34) 0px 0px 1.86389px, rgb(34, 34, 34) 0px 0px 1.86389px, rgb(34, 34, 34) 0px 0px 1.86389px"; + default: + return ""; + } +} +function _r({ label: n, value: t, children: e }) { + const s = d.useId(); + return n ? /* @__PURE__ */ d.createElement("section", { className: "vds-menu-section", role: "group", "aria-labelledby": s }, /* @__PURE__ */ d.createElement("div", { className: "vds-menu-section-title" }, /* @__PURE__ */ d.createElement("header", { id: s }, n), t ? /* @__PURE__ */ d.createElement("div", { className: "vds-menu-section-value" }, t) : null), /* @__PURE__ */ d.createElement("div", { className: "vds-menu-section-body" }, e)) : /* @__PURE__ */ d.createElement("div", { className: "vds-menu-section" }, /* @__PURE__ */ d.createElement("div", { className: "vds-menu-section-body" }, e)); +} +_r.displayName = "DefaultMenuSection"; +function _l({ label: n, hint: t = "", Icon: e, disabled: s = !1 }) { + const { icons: r } = d.useContext(uh); + return /* @__PURE__ */ d.createElement(Uv, { className: "vds-menu-item", disabled: s }, /* @__PURE__ */ d.createElement(r.Menu.ArrowLeft, { className: "vds-menu-close-icon vds-icon" }), e ? /* @__PURE__ */ d.createElement(e, { className: "vds-menu-item-icon vds-icon" }) : null, /* @__PURE__ */ d.createElement("span", { className: "vds-menu-item-label" }, n), /* @__PURE__ */ d.createElement("span", { className: "vds-menu-item-hint" }, t), /* @__PURE__ */ d.createElement(r.Menu.ArrowRight, { className: "vds-menu-open-icon vds-icon" })); +} +_l.displayName = "DefaultMenuButton"; +function dh({ label: n, children: t }) { + return /* @__PURE__ */ d.createElement("div", { className: "vds-menu-item" }, /* @__PURE__ */ d.createElement("div", { className: "vds-menu-item-label" }, n), t); +} +dh.displayName = "DefaultMenuItem"; +function DD({ value: n, options: t, onChange: e }) { + const { icons: s } = at(); + return /* @__PURE__ */ d.createElement(Kp, { className: "vds-radio-group", value: n, onChange: e }, t.map((r) => /* @__PURE__ */ d.createElement(Zp, { className: "vds-radio", value: r.value, key: r.value }, /* @__PURE__ */ d.createElement(s.Menu.RadioCheck, { className: "vds-icon" }), /* @__PURE__ */ d.createElement("span", { className: "vds-radio-label", "data-part": "label" }, r.label)))); +} +DD.displayName = "DefaultMenuRadioGroup"; +function cte(n) { + return d.useMemo( + () => En(n) ? n.map((t) => ({ label: t, value: t.toLowerCase() })) : Object.keys(n).map((t) => ({ label: t, value: n[t] })), + [n] + ); +} +function Qp({ + label: n, + value: t, + UpIcon: e, + DownIcon: s, + children: r, + isMin: i, + isMax: a +}) { + const o = n || t, c = /* @__PURE__ */ d.createElement(d.Fragment, null, s ? /* @__PURE__ */ d.createElement(s, { className: "vds-icon down" }) : null, r, e ? /* @__PURE__ */ d.createElement(e, { className: "vds-icon up" }) : null); + return /* @__PURE__ */ d.createElement( + "div", + { + className: `vds-menu-item vds-menu-slider-item${o ? " group" : ""}`, + "data-min": i ? "" : null, + "data-max": a ? "" : null + }, + o ? /* @__PURE__ */ d.createElement(d.Fragment, null, /* @__PURE__ */ d.createElement("div", { className: "vds-menu-slider-title" }, n ? /* @__PURE__ */ d.createElement("div", null, n) : null, t ? /* @__PURE__ */ d.createElement("div", null, t) : null), /* @__PURE__ */ d.createElement("div", { className: "vds-menu-slider-body" }, c)) : c + ); +} +Qp.displayName = "DefaultMenuSliderItem"; +function Jp() { + return /* @__PURE__ */ d.createElement(d.Fragment, null, /* @__PURE__ */ d.createElement(Fv, { className: "vds-slider-track" }), /* @__PURE__ */ d.createElement(Vv, { className: "vds-slider-track-fill vds-slider-track" }), /* @__PURE__ */ d.createElement(jv, { className: "vds-slider-thumb" })); +} +Jp.displayName = "DefaultSliderParts"; +function em() { + return /* @__PURE__ */ d.createElement(rD, { className: "vds-slider-steps" }, (n) => /* @__PURE__ */ d.createElement("div", { className: "vds-slider-step", key: String(n) })); +} +em.displayName = "DefaultSliderSteps"; +function LD() { + const n = Be("Caption Styles"), t = it("hasCaptions"), e = Be("Font"), s = Be("Text"), r = Be("Text Background"), i = Be("Display Background"); + return t ? /* @__PURE__ */ d.createElement(ea, { className: "vds-font-menu vds-menu" }, /* @__PURE__ */ d.createElement(_l, { label: n }), /* @__PURE__ */ d.createElement(ta, { className: "vds-font-style-items vds-menu-items" }, /* @__PURE__ */ d.createElement(_r, { label: e }, /* @__PURE__ */ d.createElement(jD, null), /* @__PURE__ */ d.createElement(FD, null)), /* @__PURE__ */ d.createElement(_r, { label: s }, /* @__PURE__ */ d.createElement(VD, null), /* @__PURE__ */ d.createElement(UD, null), /* @__PURE__ */ d.createElement(BD, null)), /* @__PURE__ */ d.createElement(_r, { label: r }, /* @__PURE__ */ d.createElement(qD, null), /* @__PURE__ */ d.createElement(zD, null)), /* @__PURE__ */ d.createElement(_r, { label: i }, /* @__PURE__ */ d.createElement(HD, null), /* @__PURE__ */ d.createElement(WD, null)), /* @__PURE__ */ d.createElement(_r, null, /* @__PURE__ */ d.createElement(YD, null)))) : null; +} +LD.displayName = "DefaultFontMenu"; +function jD() { + return /* @__PURE__ */ d.createElement(na, { label: "Family", type: "fontFamily", option: ete }); +} +jD.displayName = "DefaultFontFamilyMenu"; +function FD() { + const { icons: n } = at(), t = { + ...tte, + upIcon: n.Menu.FontSizeUp, + downIcon: n.Menu.FontSizeDown + }; + return /* @__PURE__ */ d.createElement(na, { label: "Size", type: "fontSize", option: t }); +} +FD.displayName = "DefaultFontSizeSlider"; +function VD() { + return /* @__PURE__ */ d.createElement(na, { label: "Color", type: "textColor", option: t3 }); +} +VD.displayName = "DefaultTextColorInput"; +function BD() { + const { icons: n } = at(), t = { + ...n3, + upIcon: n.Menu.OpacityUp, + downIcon: n.Menu.OpacityDown + }; + return /* @__PURE__ */ d.createElement(na, { label: "Opacity", type: "textOpacity", option: t }); +} +BD.displayName = "DefaultTextOpacitySlider"; +function UD() { + return /* @__PURE__ */ d.createElement(na, { label: "Shadow", type: "textShadow", option: nte }); +} +UD.displayName = "DefaultTextShadowMenu"; +function qD() { + return /* @__PURE__ */ d.createElement(na, { label: "Color", type: "textBg", option: t3 }); +} +qD.displayName = "DefaultTextBgInput"; +function zD() { + const { icons: n } = at(), t = { + ...n3, + upIcon: n.Menu.OpacityUp, + downIcon: n.Menu.OpacityDown + }; + return /* @__PURE__ */ d.createElement(na, { label: "Opacity", type: "textBgOpacity", option: t }); +} +zD.displayName = "DefaultTextBgOpacitySlider"; +function HD() { + return /* @__PURE__ */ d.createElement(na, { label: "Color", type: "displayBg", option: t3 }); +} +HD.displayName = "DefaultDisplayBgInput"; +function WD() { + const { icons: n } = at(), t = { + ...n3, + upIcon: n.Menu.OpacityUp, + downIcon: n.Menu.OpacityDown + }; + return /* @__PURE__ */ d.createElement(na, { label: "Opacity", type: "displayBgOpacity", option: t }); +} +WD.displayName = "DefaultDisplayBgOpacitySlider"; +function na({ label: n, option: t, type: e }) { + const s = mD(), r = jc[e], i = gt(r), a = Be(n), o = d.useCallback(() => { + s == null || s.dispatchEvent(new Event("vds-font-change")); + }, [s]), c = d.useCallback( + (u) => { + r.set(u), o(); + }, + [r, o] + ); + if (t.type === "color") { + let u = function(f) { + c(f.target.value); + }; + return /* @__PURE__ */ d.createElement(dh, { label: a }, /* @__PURE__ */ d.createElement("input", { className: "vds-color-picker", type: "color", value: i, onChange: u })); + } + if (t.type === "slider") { + let u = function(b) { + c(b + "%"); + }; + const { min: f, max: p, step: g, upIcon: y, downIcon: v } = t; + return /* @__PURE__ */ d.createElement( + Qp, + { + label: a, + value: i, + UpIcon: y, + DownIcon: v, + isMin: i === f + "%", + isMax: i === p + "%" + }, + /* @__PURE__ */ d.createElement( + sD, + { + className: "vds-slider", + min: f, + max: p, + step: g, + keyStep: g, + value: parseInt(i), + "aria-label": a, + onValueChange: u, + onDragValueChange: u + }, + /* @__PURE__ */ d.createElement(Jp, null), + /* @__PURE__ */ d.createElement(em, null) + ) + ); + } + return t.type === "radio" ? /* @__PURE__ */ d.createElement( + GD, + { + id: Wa(e), + label: a, + value: i, + values: t.values, + onChange: c + } + ) : null; +} +na.displayName = "DefaultFontSetting"; +function GD({ id: n, label: t, value: e, values: s, onChange: r }) { + const i = cte(s), { translations: a } = at(), o = d.useMemo(() => { + var u; + const c = ((u = i.find((f) => f.value === e)) == null ? void 0 : u.label) || ""; + return G2(a, c); + }, [e, i]); + return /* @__PURE__ */ d.createElement(ea, { className: `vds-${n}-menu vds-menu` }, /* @__PURE__ */ d.createElement(_l, { label: t, hint: o }), /* @__PURE__ */ d.createElement(ta, { className: "vds-menu-items" }, /* @__PURE__ */ d.createElement(DD, { value: e, options: i, onChange: r }))); +} +GD.displayName = "DefaultFontRadioGroup"; +function YD() { + const n = Be("Reset"); + return /* @__PURE__ */ d.createElement("button", { className: "vds-menu-item", role: "menuitem", onClick: ste }, /* @__PURE__ */ d.createElement("span", { className: "vds-menu-item-label" }, n)); +} +YD.displayName = "DefaultResetMenuItem"; +function tm({ + label: n, + checked: t, + storageKey: e, + defaultChecked: s = !1, + onChange: r +}) { + const [i, a] = d.useState(s), [o, c] = d.useState(!1); + d.useEffect(() => { + const g = e ? localStorage.getItem(e) : null, y = !!(g ?? s); + a(y), r == null || r(y); + }, []), d.useEffect(() => { + zd(t) && a(t); + }, [t]); + function u(g) { + if (g && "button" in g && (g == null ? void 0 : g.button) === 1) return; + const y = !i; + a(y), e && localStorage.setItem(e, y ? "1" : ""), r == null || r(y, g == null ? void 0 : g.nativeEvent), c(!1); + } + function f(g) { + g.button === 0 && c(!0); + } + function p(g) { + Rv(g.nativeEvent) && u(); + } + return /* @__PURE__ */ d.createElement( + "div", + { + className: "vds-menu-checkbox", + role: "menuitemcheckbox", + tabIndex: 0, + "aria-label": n, + "aria-checked": i ? "true" : "false", + "data-active": o ? "" : null, + onPointerUp: u, + onPointerDown: f, + onKeyDown: p + } + ); +} +tm.displayName = "DefaultMenuCheckbox"; +function KD({ slots: n }) { + const t = Be("Accessibility"), { icons: e } = at(); + return /* @__PURE__ */ d.createElement(ea, { className: "vds-accessibility-menu vds-menu" }, /* @__PURE__ */ d.createElement(_l, { label: t, Icon: e.Menu.Accessibility }), /* @__PURE__ */ d.createElement(ta, { className: "vds-menu-items" }, xe(n, "accessibilityMenuItemsStart", null), /* @__PURE__ */ d.createElement(_r, null, /* @__PURE__ */ d.createElement(ZD, null), /* @__PURE__ */ d.createElement(XD, null)), /* @__PURE__ */ d.createElement(_r, null, /* @__PURE__ */ d.createElement(LD, null)), xe(n, "accessibilityMenuItemsEnd", null))); +} +KD.displayName = "DefaultAccessibilityMenu"; +function ZD() { + const { userPrefersAnnouncements: n } = at(), t = Be("Announcements"); + function e(s) { + n.set(s); + } + return /* @__PURE__ */ d.createElement(dh, { label: t }, /* @__PURE__ */ d.createElement( + tm, + { + label: t, + defaultChecked: !0, + storageKey: "vds-player::announcements", + onChange: e + } + )); +} +ZD.displayName = "DefaultAnnouncementsMenuCheckbox"; +function XD() { + const n = it("viewType"), { userPrefersKeyboardAnimations: t, noKeyboardAnimations: e } = at(), s = Be("Keyboard Animations"); + if (n !== "video" || e) return null; + function r(i) { + t.set(i); + } + return /* @__PURE__ */ d.createElement(dh, { label: s }, /* @__PURE__ */ d.createElement( + tm, + { + label: s, + defaultChecked: !0, + storageKey: "vds-player::keyboard-animations", + onChange: r + } + )); +} +XD.displayName = "DefaultKeyboardAnimationsMenuCheckbox"; +function QD({ slots: n }) { + const t = Be("Audio"), e = it("canSetAudioGain"), s = it("audioTracks"), { noAudioGain: r, icons: i } = at(), a = e && !r; + return !a && s.length <= 1 ? null : /* @__PURE__ */ d.createElement(ea, { className: "vds-audio-menu vds-menu" }, /* @__PURE__ */ d.createElement(_l, { label: t, Icon: i.Menu.Audio }), /* @__PURE__ */ d.createElement(ta, { className: "vds-menu-items" }, xe(n, "audioMenuItemsStart", null), /* @__PURE__ */ d.createElement(s8, null), a ? /* @__PURE__ */ d.createElement(JD, null) : null, xe(n, "audioMenuItemsEnd", null))); +} +QD.displayName = "DefaultAudioMenu"; +function JD() { + const n = it("audioGain"), t = Be("Boost"), e = Math.round(((n ?? 1) - 1) * 100) + "%", s = it("canSetAudioGain"), { noAudioGain: r, icons: i } = at(), a = !s || r, o = e8(), c = t8(); + return a ? null : /* @__PURE__ */ d.createElement(_r, { label: t, value: e }, /* @__PURE__ */ d.createElement( + Qp, + { + UpIcon: i.Menu.AudioBoostUp, + DownIcon: i.Menu.AudioBoostDown, + isMin: ((n ?? 1) - 1) * 100 <= o, + isMax: ((n ?? 1) - 1) * 100 === c + }, + /* @__PURE__ */ d.createElement(n8, null) + )); +} +JD.displayName = "DefaultAudioBoostMenuSection"; +function e8() { + const { audioGains: n } = at(); + return (En(n) ? n[0] : n == null ? void 0 : n.min) ?? 0; +} +function t8() { + const { audioGains: n } = at(); + return (En(n) ? n[n.length - 1] : n == null ? void 0 : n.max) ?? 300; +} +function ute() { + const { audioGains: n } = at(); + return (En(n) ? n[1] - n[0] : n == null ? void 0 : n.step) || 25; +} +function n8() { + const n = Be("Audio Boost"), t = e8(), e = t8(), s = ute(); + return /* @__PURE__ */ d.createElement( + CD, + { + className: "vds-audio-gain-slider vds-slider", + "aria-label": n, + min: t, + max: e, + step: s, + keyStep: s + }, + /* @__PURE__ */ d.createElement(Jp, null), + /* @__PURE__ */ d.createElement(em, null) + ); +} +n8.displayName = "DefaultAudioGainSlider"; +function s8() { + const { icons: n } = at(), t = Be("Track"), e = Be("Default"), s = it("audioTrack"), r = Tee(); + return r.disabled ? null : /* @__PURE__ */ d.createElement(ea, { className: "vds-audio-track-menu vds-menu" }, /* @__PURE__ */ d.createElement( + _l, + { + label: t, + hint: (s == null ? void 0 : s.label) ?? e, + disabled: r.disabled, + Icon: n.Menu.Audio + } + ), /* @__PURE__ */ d.createElement(ta, { className: "vds-menu-items" }, /* @__PURE__ */ d.createElement( + Kp, + { + className: "vds-audio-radio-group vds-radio-group", + value: r.selectedValue + }, + r.map(({ label: i, value: a, select: o }) => /* @__PURE__ */ d.createElement( + Zp, + { + className: "vds-audio-radio vds-radio", + value: a, + onSelect: o, + key: a + }, + /* @__PURE__ */ d.createElement(n.Menu.RadioCheck, { className: "vds-icon" }), + /* @__PURE__ */ d.createElement("span", { className: "vds-radio-label" }, i) + )) + ))); +} +s8.displayName = "DefaultAudioTracksMenu"; +function r8({ slots: n }) { + var a; + const { icons: t } = at(), e = Be("Captions"), s = Be("Off"), r = Aee({ off: s }), i = ((a = r.selectedTrack) == null ? void 0 : a.label) ?? s; + return r.disabled ? null : /* @__PURE__ */ d.createElement(ea, { className: "vds-captions-menu vds-menu" }, /* @__PURE__ */ d.createElement( + _l, + { + label: e, + hint: i, + disabled: r.disabled, + Icon: t.Menu.Captions + } + ), /* @__PURE__ */ d.createElement(ta, { className: "vds-menu-items" }, xe(n, "captionsMenuItemsStart", null), /* @__PURE__ */ d.createElement( + Kp, + { + className: "vds-captions-radio-group vds-radio-group", + value: r.selectedValue + }, + r.map(({ label: o, value: c, select: u }) => /* @__PURE__ */ d.createElement( + Zp, + { + className: "vds-caption-radio vds-radio", + value: c, + onSelect: u, + key: c + }, + /* @__PURE__ */ d.createElement(t.Menu.RadioCheck, { className: "vds-icon" }), + /* @__PURE__ */ d.createElement("span", { className: "vds-radio-label" }, o) + )) + ), xe(n, "captionsMenuItemsEnd", null))); +} +r8.displayName = "DefaultCaptionMenu"; +function i8({ slots: n }) { + const t = Be("Playback"), { icons: e } = at(); + return /* @__PURE__ */ d.createElement(ea, { className: "vds-playback-menu vds-menu" }, /* @__PURE__ */ d.createElement(_l, { label: t, Icon: e.Menu.Playback }), /* @__PURE__ */ d.createElement(ta, { className: "vds-menu-items" }, xe(n, "playbackMenuItemsStart", null), /* @__PURE__ */ d.createElement(_r, null, xe(n, "playbackMenuLoop", /* @__PURE__ */ d.createElement(a8, null))), /* @__PURE__ */ d.createElement(dte, null), /* @__PURE__ */ d.createElement(l8, null), xe(n, "playbackMenuItemsEnd", null))); +} +i8.displayName = "DefaultPlaybackMenu"; +function a8() { + const { remote: n } = Ji(), t = Be("Loop"); + function e(s, r) { + n.userPrefersLoopChange(s, r); + } + return /* @__PURE__ */ d.createElement(dh, { label: t }, /* @__PURE__ */ d.createElement(tm, { label: t, storageKey: "vds-player::user-loop", onChange: e })); +} +a8.displayName = "DefaultLoopMenuCheckbox"; +function o8() { + const { remote: n, qualities: t } = Ji(), e = it("autoQuality"), s = Be("Auto"); + function r(i, a) { + i ? n.requestAutoQuality(a) : n.changeQuality(t.selectedIndex, a); + } + return /* @__PURE__ */ d.createElement(dh, { label: s }, /* @__PURE__ */ d.createElement( + tm, + { + label: s, + checked: e, + onChange: r, + defaultChecked: e + } + )); +} +o8.displayName = "DefaultAutoQualityMenuCheckbox"; +function l8() { + const { hideQualityBitrate: n, icons: t } = at(), e = it("canSetQuality"), s = it("qualities"), r = it("quality"), i = Be("Quality"), a = Be("Auto"), o = d.useMemo(() => z$(s), [s]); + if (!e || s.length <= 1) return null; + const c = r == null ? void 0 : r.height, u = n ? null : r == null ? void 0 : r.bitrate, f = u && u > 0 ? `${(u / 1e6).toFixed(2)} Mbps` : null, p = c ? `${c}p${f ? ` (${f})` : ""}` : a, g = o[0] === r, y = o.at(-1) === r; + return /* @__PURE__ */ d.createElement(_r, { label: i, value: p }, /* @__PURE__ */ d.createElement( + Qp, + { + UpIcon: t.Menu.QualityUp, + DownIcon: t.Menu.QualityDown, + isMin: g, + isMax: y + }, + /* @__PURE__ */ d.createElement(c8, null) + ), /* @__PURE__ */ d.createElement(o8, null)); +} +l8.displayName = "DefaultQualityMenuSection"; +function c8() { + const n = Be("Quality"); + return /* @__PURE__ */ d.createElement(xD, { className: "vds-quality-slider vds-slider", "aria-label": n }, /* @__PURE__ */ d.createElement(Jp, null), /* @__PURE__ */ d.createElement(em, null)); +} +c8.displayName = "DefaultQualitySlider"; +function dte() { + const { icons: n } = at(), t = it("playbackRate"), e = it("canSetPlaybackRate"), s = Be("Speed"), r = Be("Normal"), i = u8(), a = d8(), o = t === 1 ? r : t + "x"; + return e ? /* @__PURE__ */ d.createElement(_r, { label: s, value: o }, /* @__PURE__ */ d.createElement( + Qp, + { + UpIcon: n.Menu.SpeedUp, + DownIcon: n.Menu.SpeedDown, + isMin: t === i, + isMax: t === a + }, + /* @__PURE__ */ d.createElement(h8, null) + )) : null; +} +function u8() { + const { playbackRates: n } = at(), t = n; + return (En(t) ? t[0] : t == null ? void 0 : t.min) ?? 0; +} +function d8() { + const { playbackRates: n } = at(), t = n; + return (En(t) ? t[t.length - 1] : t == null ? void 0 : t.max) ?? 2; +} +function hte() { + const { playbackRates: n } = at(), t = n; + return (En(t) ? t[1] - t[0] : t == null ? void 0 : t.step) || 0.25; +} +function h8() { + const n = Be("Speed"), t = u8(), e = d8(), s = hte(); + return /* @__PURE__ */ d.createElement( + _D, + { + className: "vds-speed-slider vds-slider", + "aria-label": n, + min: t, + max: e, + step: s, + keyStep: s + }, + /* @__PURE__ */ d.createElement(Jp, null), + /* @__PURE__ */ d.createElement(em, null) + ); +} +h8.displayName = "DefaultSpeedSlider"; +function s3({ + tooltip: n, + placement: t, + portalClass: e = "", + slots: s +}) { + const { + showMenuDelay: r, + icons: i, + isSmallLayout: a, + menuContainer: o, + menuGroup: c, + noModal: u, + colorScheme: f + } = at(), p = Be("Settings"), g = it("viewType"), y = !a && c === "bottom" && g === "video" ? 26 : 0, v = Y2(f), [b, w] = d.useState(!1), E = MD(); + zee(rte); + function x() { + XS(() => { + w(!0); + }); + } + function C() { + w(!1); + } + const _ = /* @__PURE__ */ d.createElement( + ta, + { + className: "vds-settings-menu-items vds-menu-items", + placement: t, + offset: y + }, + b ? /* @__PURE__ */ d.createElement(d.Fragment, null, xe(s, "settingsMenuItemsStart", null), xe(s, "settingsMenuStartItems", null), /* @__PURE__ */ d.createElement(i8, { slots: s }), /* @__PURE__ */ d.createElement(KD, { slots: s }), /* @__PURE__ */ d.createElement(QD, { slots: s }), /* @__PURE__ */ d.createElement(r8, { slots: s }), xe(s, "settingsMenuEndItems", null), xe(s, "settingsMenuItemsEnd", null)) : null + ); + return /* @__PURE__ */ d.createElement( + ea, + { + className: "vds-settings-menu vds-menu", + showDelay: r, + onOpen: x, + onClose: C + }, + /* @__PURE__ */ d.createElement(Or, { content: p, placement: n }, /* @__PURE__ */ d.createElement(Uv, { className: "vds-menu-button vds-button", "aria-label": p }, /* @__PURE__ */ d.createElement(i.Menu.Settings, { className: "vds-icon vds-rotate-icon" }))), + u || !a ? _ : /* @__PURE__ */ d.createElement( + H2, + { + className: e + (v ? ` ${v}` : ""), + container: o ?? E, + disabled: "fullscreen", + "data-sm": a ? "" : null, + "data-lg": a ? null : "", + "data-size": a ? "sm" : "lg", + "data-view-type": g + }, + _ + ) + ); +} +s3.displayName = "DefaultSettingsMenu"; +function Yv({ tooltip: n, orientation: t, slots: e }) { + const s = it("pointer"), r = it("muted"), i = it("canSetVolume"), [a, o] = d.useState(null), c = Zee(a), u = xe(e, "muteButton", /* @__PURE__ */ d.createElement(ID, { tooltip: n })); + return i ? s === "coarse" && !r ? null : /* @__PURE__ */ d.createElement("div", { className: "vds-volume", "data-active": c ? "" : null, ref: o }, u, /* @__PURE__ */ d.createElement("div", { className: "vds-volume-popup" }, xe(e, "volumeSlider", /* @__PURE__ */ d.createElement(f8, { orientation: t })))) : u; +} +Yv.displayName = "DefaultVolumePopup"; +function f8(n) { + const t = Be("Volume"); + return /* @__PURE__ */ d.createElement(iD, { className: "vds-volume-slider vds-slider", "aria-label": t, ...n }, /* @__PURE__ */ d.createElement(Fv, { className: "vds-slider-track" }), /* @__PURE__ */ d.createElement(Vv, { className: "vds-slider-track-fill vds-slider-track" }), /* @__PURE__ */ d.createElement(jv, { className: "vds-slider-thumb" }), /* @__PURE__ */ d.createElement(U2, { className: "vds-slider-preview", noClamp: !0 }, /* @__PURE__ */ d.createElement(q2, { className: "vds-slider-value" }))); +} +f8.displayName = "DefaultVolumeSlider"; +function Kv() { + const [n, t] = d.useState(null), [e, s] = d.useState(0), r = it("currentSrc"), { thumbnails: i, sliderChaptersMinWidth: a, disableTimeSlider: o, seekStep: c, noScrubGesture: u } = at(), f = Be("Seek"), p = gt(Jee), g = d.useCallback(() => { + const y = n == null ? void 0 : n.el; + y && s(y.clientWidth); + }, [n]); + return PD(n == null ? void 0 : n.el, g), /* @__PURE__ */ d.createElement( + oD, + { + className: "vds-time-slider vds-slider", + "aria-label": f, + disabled: o, + noSwipeGesture: u, + keyStep: c, + ref: t + }, + /* @__PURE__ */ d.createElement( + lD, + { + className: "vds-slider-chapters", + disabled: e < a + }, + (y, v) => y.map((b) => /* @__PURE__ */ d.createElement("div", { className: "vds-slider-chapter", key: b.startTime, ref: v }, /* @__PURE__ */ d.createElement(Fv, { className: "vds-slider-track" }), /* @__PURE__ */ d.createElement(Vv, { className: "vds-slider-track-fill vds-slider-track" }), /* @__PURE__ */ d.createElement(dD, { className: "vds-slider-progress vds-slider-track" }))) + ), + /* @__PURE__ */ d.createElement(jv, { className: "vds-slider-thumb" }), + /* @__PURE__ */ d.createElement(U2, { className: "vds-slider-preview" }, i ? /* @__PURE__ */ d.createElement( + TS.Root, + { + src: i, + className: "vds-slider-thumbnail vds-thumbnail" + }, + /* @__PURE__ */ d.createElement(TS.Img, null) + ) : p && YM(r) ? /* @__PURE__ */ d.createElement(p, { className: "vds-slider-thumbnail vds-thumbnail" }) : null, /* @__PURE__ */ d.createElement(uD, { className: "vds-slider-chapter-title" }), /* @__PURE__ */ d.createElement(q2, { className: "vds-slider-value" })) + ); +} +Kv.displayName = "DefaultTimeSlider"; +function p8({ slots: n }) { + return it("duration") ? /* @__PURE__ */ d.createElement("div", { className: "vds-time-group" }, xe(n, "currentTime", /* @__PURE__ */ d.createElement(Ef, { className: "vds-time", type: "current" })), xe(n, "timeDivider", /* @__PURE__ */ d.createElement("div", { className: "vds-time-divider" }, "/")), xe(n, "endTime", /* @__PURE__ */ d.createElement(Ef, { className: "vds-time", type: "duration" }))) : null; +} +p8.displayName = "DefaultTimeGroup"; +function r3({ slots: n }) { + return it("live") ? xe(n, "liveButton", /* @__PURE__ */ d.createElement(J2, null)) : /* @__PURE__ */ d.createElement(p8, { slots: n }); +} +r3.displayName = "DefaultTimeInfo"; +function m8({ slots: n }) { + const t = it("live"), e = it("duration"); + return t ? xe(n, "liveButton", /* @__PURE__ */ d.createElement(J2, null)) : xe( + n, + "endTime", + e ? /* @__PURE__ */ d.createElement(Ef, { className: "vds-time", type: "current", toggle: !0, remainder: !0 }) : null + ); +} +m8.displayName = "DefaultTimeInvert"; +$D({ + type: "audio", + smLayoutWhen({ width: n }) { + return n < 576; + }, + renderLayout: () => /* @__PURE__ */ d.createElement(g8, null) +}); +function g8() { + const n = RD(); + return ND("audio"), /* @__PURE__ */ d.createElement(d.Fragment, null, /* @__PURE__ */ d.createElement(zv, null), /* @__PURE__ */ d.createElement(Gv, null), /* @__PURE__ */ d.createElement(qv, { className: "vds-controls" }, /* @__PURE__ */ d.createElement(Mi, { className: "vds-controls-group" }, xe(n, "seekBackwardButton", /* @__PURE__ */ d.createElement(Ex, { backward: !0, tooltip: "top start" })), xe(n, "playButton", /* @__PURE__ */ d.createElement(Xp, { tooltip: "top center" })), xe(n, "seekForwardButton", /* @__PURE__ */ d.createElement(Ex, { tooltip: "top center" })), /* @__PURE__ */ d.createElement(v8, null), xe(n, "timeSlider", /* @__PURE__ */ d.createElement(Kv, null)), /* @__PURE__ */ d.createElement(m8, { slots: n }), /* @__PURE__ */ d.createElement(Yv, { orientation: "vertical", tooltip: "top", slots: n }), xe(n, "captionButton", /* @__PURE__ */ d.createElement(Hv, { tooltip: "top center" })), xe(n, "downloadButton", /* @__PURE__ */ d.createElement(Wv, null)), /* @__PURE__ */ d.createElement(y8, { slots: n })))); +} +g8.displayName = "AudioLayout"; +function y8({ slots: n }) { + const { isSmallLayout: t, noModal: e } = at(), s = e ? "top end" : t ? null : "top end"; + return /* @__PURE__ */ d.createElement(d.Fragment, null, xe( + n, + "chaptersMenu", + /* @__PURE__ */ d.createElement(e3, { tooltip: "top", placement: s, portalClass: "vds-audio-layout" }) + ), xe( + n, + "settingsMenu", + /* @__PURE__ */ d.createElement( + s3, + { + tooltip: "top end", + placement: s, + portalClass: "vds-audio-layout", + slots: n + } + ) + )); +} +y8.displayName = "DefaultAudioMenus"; +function v8() { + const [n, t] = d.useState(null), e = Ji(), { translations: s } = at(), [r, i] = d.useState(!1), a = _y(() => { + const { started: y, currentTime: v } = e.$state; + return y() || v() > 0; + }), o = gt( + _y(() => { + const { title: y, ended: v } = e.$state; + if (!y()) return ""; + const b = v() ? "Replay" : a() ? "Continue" : "Play"; + return `${G2(s, b)}: ${y()}`; + }) + ), c = kD(), u = gt(a), f = u ? c : "", p = Gee(n); + d.useEffect(() => { + var y; + p && document.activeElement === document.body && ((y = e.player.el) == null || y.focus({ preventScroll: !0 })); + }, []); + const g = d.useCallback(() => { + const y = n, v = !!y && !p && y.clientWidth < y.children[0].clientWidth; + y && qN(y, "vds-marquee", v), i(v); + }, [n, p]); + return PD(n, g), o ? /* @__PURE__ */ d.createElement("span", { className: "vds-title", title: o, ref: t }, /* @__PURE__ */ d.createElement(kx, { title: o, chapterTitle: f }), r && !p ? /* @__PURE__ */ d.createElement(kx, { title: o, chapterTitle: f }) : null) : /* @__PURE__ */ d.createElement(qs, null); +} +v8.displayName = "DefaultAudioTitle"; +function kx({ title: n, chapterTitle: t }) { + const e = RD(); + return /* @__PURE__ */ d.createElement("span", { className: "vds-title-text" }, xe(e, "title", n), xe(e, "chapterTitle", /* @__PURE__ */ d.createElement("span", { className: "vds-chapter-title" }, t))); +} +kx.displayName = "AudioTitle"; +const b8 = d.forwardRef( + ({ icons: n, ...t }, e) => { + const [s, r] = d.useState(!1), [i, a] = d.useState(null), [o, c] = d.useState(0), u = it("lastKeyboardAction"); + d.useEffect(() => { + c((v) => v + 1); + }, [u]); + const f = d.useMemo(() => { + const v = u == null ? void 0 : u.action; + return v && s ? Wa(v) : null; + }, [s, u]), p = d.useMemo( + () => `vds-kb-action${s ? "" : " hidden"}${t.className ? ` ${t.className}` : ""}`, + [s] + ), g = _y(fte), y = gt(g); + return qee(() => { + const v = pte(n); + a(() => v); + }, [n]), d.useEffect(() => { + r(!!u); + const v = setTimeout(() => r(!1), 500); + return () => { + r(!1), window.clearTimeout(v); + }; + }, [u]), i ? /* @__PURE__ */ d.createElement( + We.div, + { + ...t, + className: p, + "data-action": f, + ref: e + }, + /* @__PURE__ */ d.createElement("div", { className: "vds-kb-text-wrapper" }, /* @__PURE__ */ d.createElement("div", { className: "vds-kb-text" }, y)), + /* @__PURE__ */ d.createElement("div", { className: "vds-kb-bezel", key: o }, /* @__PURE__ */ d.createElement("div", { className: "vds-kb-icon" }, /* @__PURE__ */ d.createElement(i, null))) + ) : null; + } +); +b8.displayName = "DefaultKeyboardDisplay"; +function fte() { + var s; + const { $state: n } = Cn(Gp), t = (s = n.lastKeyboardAction()) == null ? void 0 : s.action, e = n.audioGain() ?? 1; + switch (t) { + case "toggleMuted": + return n.muted() ? "0%" : $S(n.volume(), e); + case "volumeUp": + case "volumeDown": + return $S(n.volume(), e); + default: + return ""; + } +} +function $S(n, t) { + return `${Math.round(n * t * 100)}%`; +} +function pte(n) { + var s; + const { $state: t } = Cn(Gp); + switch ((s = t.lastKeyboardAction()) == null ? void 0 : s.action) { + case "togglePaused": + return t.paused() ? n.Pause : n.Play; + case "toggleMuted": + return t.muted() || t.volume() === 0 ? n.Mute : t.volume() >= 0.5 ? n.VolumeUp : n.VolumeDown; + case "toggleFullscreen": + return t.fullscreen() ? n.EnterFullscreen : n.ExitFullscreen; + case "togglePictureInPicture": + return t.pictureInPicture() ? n.EnterPiP : n.ExitPiP; + case "toggleCaptions": + return t.hasCaptions() ? t.textTrack() ? n.CaptionsOn : n.CaptionsOff : null; + case "volumeUp": + return n.VolumeUp; + case "volumeDown": + return n.VolumeDown; + case "seekForward": + return n.SeekForward; + case "seekBackward": + return n.SeekBackward; + default: + return null; + } +} +function i3() { + const n = it("started"), t = it("title"); + return W2("chapters") && (n || !t) ? /* @__PURE__ */ d.createElement(TD, { className: "vds-chapter-title" }) : /* @__PURE__ */ d.createElement(SD, { className: "vds-chapter-title" }); +} +i3.displayName = "DefaultTitle"; +const mte = $D({ + type: "video", + smLayoutWhen({ width: n, height: t }) { + return n < 576 || t < 380; + }, + renderLayout(n) { + return /* @__PURE__ */ d.createElement(x8, { ...n }); + } +}); +function w8(n) { + return /* @__PURE__ */ d.createElement(mte, { ...n }); +} +w8.displayName = "DefaultVideoLayout"; +function x8({ streamType: n, isLoadLayout: t, isSmallLayout: e }) { + return ND("video"), t ? /* @__PURE__ */ d.createElement(E8, null) : n === "unknown" ? /* @__PURE__ */ d.createElement(nm, null) : e ? /* @__PURE__ */ d.createElement(_8, null) : /* @__PURE__ */ d.createElement(C8, null); +} +x8.displayName = "VideoLayout"; +function C8() { + const { menuGroup: n } = at(), t = K2(), e = { ...t, ...t == null ? void 0 : t.largeLayout }; + return /* @__PURE__ */ d.createElement(d.Fragment, null, /* @__PURE__ */ d.createElement(zv, null), /* @__PURE__ */ d.createElement(a3, null), /* @__PURE__ */ d.createElement(o3, null), xe(e, "bufferingIndicator", /* @__PURE__ */ d.createElement(nm, null)), xe(e, "captions", /* @__PURE__ */ d.createElement(Gv, null)), /* @__PURE__ */ d.createElement(qv, { className: "vds-controls" }, /* @__PURE__ */ d.createElement(Mi, { className: "vds-controls-group" }, xe(e, "topControlsGroupStart", null), /* @__PURE__ */ d.createElement(qs, null), xe(e, "topControlsGroupCenter", null), /* @__PURE__ */ d.createElement(qs, null), xe(e, "topControlsGroupEnd", null), n === "top" && /* @__PURE__ */ d.createElement(Ey, { slots: e })), /* @__PURE__ */ d.createElement(qs, null), /* @__PURE__ */ d.createElement(Mi, { className: "vds-controls-group" }, xe(e, "centerControlsGroupStart", null), /* @__PURE__ */ d.createElement(qs, null), xe(e, "centerControlsGroupCenter", null), /* @__PURE__ */ d.createElement(qs, null), xe(e, "centerControlsGroupEnd", null)), /* @__PURE__ */ d.createElement(qs, null), /* @__PURE__ */ d.createElement(Mi, { className: "vds-controls-group" }, xe(e, "timeSlider", /* @__PURE__ */ d.createElement(Kv, null))), /* @__PURE__ */ d.createElement(Mi, { className: "vds-controls-group" }, xe(e, "playButton", /* @__PURE__ */ d.createElement(Xp, { tooltip: "top start" })), /* @__PURE__ */ d.createElement(Yv, { orientation: "horizontal", tooltip: "top", slots: e }), /* @__PURE__ */ d.createElement(r3, { slots: e }), xe(e, "chapterTitle", /* @__PURE__ */ d.createElement(i3, null)), xe(e, "captionButton", /* @__PURE__ */ d.createElement(Hv, { tooltip: "top" })), n === "bottom" && /* @__PURE__ */ d.createElement(Ey, { slots: e }), xe(e, "airPlayButton", /* @__PURE__ */ d.createElement(X2, { tooltip: "top" })), xe(e, "googleCastButton", /* @__PURE__ */ d.createElement(Q2, { tooltip: "top" })), xe(e, "downloadButton", /* @__PURE__ */ d.createElement(Wv, null)), xe(e, "pipButton", /* @__PURE__ */ d.createElement(OD, { tooltip: "top" })), xe(e, "fullscreenButton", /* @__PURE__ */ d.createElement(Z2, { tooltip: "top end" }))))); +} +C8.displayName = "DefaultVideoLargeLayout"; +function _8() { + const n = K2(), t = { ...n, ...n == null ? void 0 : n.smallLayout }; + return /* @__PURE__ */ d.createElement(d.Fragment, null, /* @__PURE__ */ d.createElement(zv, null), /* @__PURE__ */ d.createElement(a3, null), /* @__PURE__ */ d.createElement(o3, null), xe(t, "bufferingIndicator", /* @__PURE__ */ d.createElement(nm, null)), xe(t, "captions", /* @__PURE__ */ d.createElement(Gv, null)), /* @__PURE__ */ d.createElement(qv, { className: "vds-controls" }, /* @__PURE__ */ d.createElement(Mi, { className: "vds-controls-group" }, xe(t, "topControlsGroupStart", null), xe(t, "airPlayButton", /* @__PURE__ */ d.createElement(X2, { tooltip: "top start" })), xe(t, "googleCastButton", /* @__PURE__ */ d.createElement(Q2, { tooltip: "top start" })), /* @__PURE__ */ d.createElement(qs, null), xe(t, "topControlsGroupCenter", null), /* @__PURE__ */ d.createElement(qs, null), xe(t, "captionButton", /* @__PURE__ */ d.createElement(Hv, { tooltip: "bottom" })), xe(t, "downloadButton", /* @__PURE__ */ d.createElement(Wv, null)), /* @__PURE__ */ d.createElement(Ey, { slots: t }), /* @__PURE__ */ d.createElement(Yv, { orientation: "vertical", tooltip: "bottom end", slots: t }), xe(t, "topControlsGroupEnd", null)), /* @__PURE__ */ d.createElement(qs, null), /* @__PURE__ */ d.createElement(Mi, { className: "vds-controls-group", style: { pointerEvents: "none" } }, xe(t, "centerControlsGroupStart", null), /* @__PURE__ */ d.createElement(qs, null), xe(t, "centerControlsGroupCenter", null), xe(t, "playButton", /* @__PURE__ */ d.createElement(Xp, { tooltip: "top" })), /* @__PURE__ */ d.createElement(qs, null), xe(t, "centerControlsGroupEnd", null)), /* @__PURE__ */ d.createElement(qs, null), /* @__PURE__ */ d.createElement(Mi, { className: "vds-controls-group" }, /* @__PURE__ */ d.createElement(r3, { slots: t }), xe(t, "chapterTitle", /* @__PURE__ */ d.createElement(i3, null)), xe(t, "fullscreenButton", /* @__PURE__ */ d.createElement(Z2, { tooltip: "top end" }))), /* @__PURE__ */ d.createElement(Mi, { className: "vds-controls-group" }, xe(t, "timeSlider", /* @__PURE__ */ d.createElement(Kv, null)))), xe(t, "startDuration", /* @__PURE__ */ d.createElement(S8, null))); +} +_8.displayName = "DefaultVideoSmallLayout"; +function S8() { + return it("duration") === 0 ? null : /* @__PURE__ */ d.createElement("div", { className: "vds-start-duration" }, /* @__PURE__ */ d.createElement(Ef, { className: "vds-time", type: "duration" })); +} +S8.displayName = "DefaultVideoStartDuration"; +function a3() { + const { noGestures: n } = at(); + return n ? null : /* @__PURE__ */ d.createElement("div", { className: "vds-gestures" }, /* @__PURE__ */ d.createElement(gu, { className: "vds-gesture", event: "pointerup", action: "toggle:paused" }), /* @__PURE__ */ d.createElement(gu, { className: "vds-gesture", event: "pointerup", action: "toggle:controls" }), /* @__PURE__ */ d.createElement(gu, { className: "vds-gesture", event: "dblpointerup", action: "toggle:fullscreen" }), /* @__PURE__ */ d.createElement(gu, { className: "vds-gesture", event: "dblpointerup", action: "seek:-10" }), /* @__PURE__ */ d.createElement(gu, { className: "vds-gesture", event: "dblpointerup", action: "seek:10" })); +} +a3.displayName = "DefaultVideoGestures"; +function nm() { + return /* @__PURE__ */ d.createElement("div", { className: "vds-buffering-indicator" }, /* @__PURE__ */ d.createElement(Vee, { className: "vds-buffering-spinner" }, /* @__PURE__ */ d.createElement(Bee, { className: "vds-buffering-track" }), /* @__PURE__ */ d.createElement(Uee, { className: "vds-buffering-track-fill" }))); +} +nm.displayName = "DefaultBufferingIndicator"; +function Ey({ slots: n }) { + const { isSmallLayout: t, noModal: e, menuGroup: s } = at(), r = s === "top" || t ? "bottom" : "top", i = `${r} end`, a = e ? `${r} end` : t ? null : `${r} end`; + return /* @__PURE__ */ d.createElement(d.Fragment, null, xe( + n, + "chaptersMenu", + /* @__PURE__ */ d.createElement( + e3, + { + tooltip: i, + placement: a, + portalClass: "vds-video-layout" + } + ) + ), xe( + n, + "settingsMenu", + /* @__PURE__ */ d.createElement( + s3, + { + tooltip: i, + placement: a, + portalClass: "vds-video-layout", + slots: n + } + ) + )); +} +Ey.displayName = "DefaultVideoMenus"; +function E8() { + const { isSmallLayout: n } = at(), t = K2(), e = { ...t, ...t == null ? void 0 : t[n ? "smallLayout" : "largeLayout"] }; + return /* @__PURE__ */ d.createElement("div", { className: "vds-load-container" }, xe(e, "bufferingIndicator", /* @__PURE__ */ d.createElement(nm, null)), xe(e, "loadButton", /* @__PURE__ */ d.createElement(Xp, { tooltip: "top" }))); +} +E8.displayName = "DefaultVideoLoadLayout"; +function o3() { + const { noKeyboardAnimations: n, icons: t, userPrefersKeyboardAnimations: e } = at(), s = gt(e); + return n || !s || !t.KeyboardDisplay ? null : /* @__PURE__ */ d.createElement(b8, { icons: t.KeyboardDisplay }); +} +o3.displayName = "DefaultVideoKeyboardDisplay"; +const l3 = /* @__PURE__ */ d.forwardRef((n, t) => { + const { width: e, height: s, size: r = null, paths: i, ...a } = n; + return d.createElement("svg", { + viewBox: "0 0 32 32", + ...a, + width: e ?? r, + height: s ?? r, + fill: "none", + "aria-hidden": "true", + focusable: "false", + xmlns: "http://www.w3.org/2000/svg", + ref: t, + dangerouslySetInnerHTML: { __html: i } + }); +}); +l3.displayName = "VidstackIcon"; +function Ke(n) { + function t(e) { + return /* @__PURE__ */ d.createElement(l3, { paths: n, ...e }); + } + return t.displayName = "DefaultLayoutIcon", t; +} +const gte = { + AirPlayButton: { + Default: Ke(s$) + }, + GoogleCastButton: { + Default: Ke(k2) + }, + PlayButton: { + Play: Ke(d1), + Pause: Ke(l1), + Replay: Ke(f$) + }, + MuteButton: { + Mute: Ke(o1), + VolumeLow: Ke(ag), + VolumeHigh: Ke(ig) + }, + CaptionButton: { + On: Ke(n1), + Off: Ke(rg) + }, + PIPButton: { + Enter: Ke(u1), + Exit: Ke(c1) + }, + FullscreenButton: { + Enter: Ke(a1), + Exit: Ke(i1) + }, + SeekButton: { + Backward: Ke(p$), + Forward: Ke(m$) + }, + DownloadButton: { + Default: Ke(l$) + }, + Menu: { + Accessibility: Ke(n$), + ArrowLeft: Ke(r$), + ArrowRight: Ke(o$), + Audio: Ke(u$), + Chapters: Ke(i$), + Captions: Ke(rg), + Playback: Ke(h$), + Settings: Ke(g$), + AudioBoostUp: Ke(ig), + AudioBoostDown: Ke(ag), + SpeedUp: Ke(r1), + SpeedDown: Ke(s1), + QualityUp: Ke(t1), + QualityDown: Ke(e1), + FontSizeUp: Ke(t1), + FontSizeDown: Ke(e1), + OpacityUp: Ke(c$), + OpacityDown: Ke(d$), + RadioCheck: Ke(a$) + }, + KeyboardDisplay: { + Play: Ke(d1), + Pause: Ke(l1), + Mute: Ke(o1), + VolumeUp: Ke(ig), + VolumeDown: Ke(ag), + EnterFullscreen: Ke(a1), + ExitFullscreen: Ke(i1), + EnterPiP: Ke(u1), + ExitPiP: Ke(c1), + CaptionsOn: Ke(n1), + CaptionsOff: Ke(rg), + SeekForward: Ke(r1), + SeekBackward: Ke(s1) + } +}, yte = kE({ + title: mf().max(100, "Title must be less than 100 characters").optional(), + description: mf().max(1e3, "Description must be less than 1000 characters").optional(), + visible: EE() +}), vte = ({ + open: n, + onOpenChange: t, + videoId: e, + currentTitle: s, + currentDescription: r, + currentVisible: i, + onUpdateSuccess: a +}) => { + const [o, c] = fe(!1), { user: u } = Qa(), [f, p] = fe(!1), [g, y] = fe(!1), v = An(null), b = An([]), [w, E] = fe([]), [x, C] = fe(/* @__PURE__ */ new Set()), [_, k] = fe(!1), A = wk({ + resolver: aT(yte), + defaultValues: { + title: s, + description: r || "", + visible: i + } + }); + Rt(() => { + n && u && (T(), N()); + }, [n, u, e]); + const T = async () => { + if (u) { + k(!0); + try { + const { data: j, error: B } = await ct.from("collections").select("*").eq("user_id", u.id).order("created_at", { ascending: !1 }); + if (B) throw B; + E(j || []); + } catch (j) { + console.error("Error fetching collections:", j), Ee.error(de("Failed to load collections")); + } finally { + k(!1); + } + } + }, N = async () => { + if (u) + try { + const { data: j, error: B } = await ct.from("collection_pictures").select("collection_id").eq("picture_id", e); + if (B) throw B; + if (j) { + const W = j.map((J) => J.collection_id); + C(new Set(W)); + } + } catch (j) { + console.error("Error fetching video collections:", j); + } + }, $ = (j) => { + const B = new Set(x); + B.has(j) ? B.delete(j) : B.add(j), C(B); + }, D = async (j) => { + var B, W; + if (u) { + c(!0); + try { + const { error: J } = await ct.from("pictures").update({ + title: ((B = j.title) == null ? void 0 : B.trim()) || null, + description: ((W = j.description) == null ? void 0 : W.trim()) || null, + visible: j.visible, + updated_at: (/* @__PURE__ */ new Date()).toISOString() + }).eq("id", e).eq("user_id", u.id).eq("type", "mux-video"); + if (J) throw J; + try { + if (await ct.from("collection_pictures").delete().eq("picture_id", e), x.size > 0) { + const G = Array.from(x).map((q) => ({ + collection_id: q, + picture_id: e + })); + await ct.from("collection_pictures").insert(G); + } + } catch (G) { + console.error("Collection update failed:", G), Ee.error(de("Failed to update collections")); + } + Ee.success(de("Video updated successfully")), a(), t(!1); + } catch (J) { + console.error("Error updating video:", J), Ee.error(de("Failed to update video")); + } finally { + c(!1); + } + } + }, V = async (j) => { + if (f) + v.current && v.current.state === "recording" && v.current.stop(), p(!1); + else + try { + const B = await navigator.mediaDevices.getUserMedia({ audio: !0 }), W = new MediaRecorder(B); + v.current = W, b.current = [], W.ondataavailable = (J) => { + J.data.size > 0 && b.current.push(J.data); + }, W.onstop = async () => { + const J = new Blob(b.current, { type: "audio/webm" }); + B.getTracks().forEach((G) => G.stop()), y(!0); + try { + const G = new File([J], "recording.webm", { type: "audio/webm" }), q = await b9(G); + if (q) { + if (j === "title") + A.setValue("title", q); + else { + const H = A.getValues("description") || ""; + A.setValue("description", H ? `${H} + +${q}` : q); + } + Ee.success(de("Voice transcribed successfully!")); + } + } catch (G) { + console.error("Error transcribing audio:", G), Ee.error(de("Failed to transcribe audio")); + } finally { + y(!1); + } + }, W.start(), p(!0), Ee.info(de("Recording... Click again to stop")); + } catch (B) { + console.error("Error starting recording:", B), Ee.error(de("Failed to start recording. Please check microphone permissions.")); + } + }; + return /* @__PURE__ */ h.jsx(sC, { open: n, onOpenChange: t, children: /* @__PURE__ */ h.jsxs(Xy, { className: "sm:max-w-[600px] max-h-[90vh] overflow-y-auto", children: [ + /* @__PURE__ */ h.jsx(Qy, { children: /* @__PURE__ */ h.jsx(Jy, { children: /* @__PURE__ */ h.jsx(Ve, { children: "Edit Video" }) }) }), + /* @__PURE__ */ h.jsx(_k, { ...A, children: /* @__PURE__ */ h.jsxs("form", { onSubmit: A.handleSubmit(D), className: "space-y-4", children: [ + /* @__PURE__ */ h.jsxs(Hk, { defaultValue: "metadata", className: "w-full", children: [ + /* @__PURE__ */ h.jsxs(gC, { className: "grid w-full grid-cols-2", children: [ + /* @__PURE__ */ h.jsx(xu, { value: "metadata", children: /* @__PURE__ */ h.jsx(Ve, { children: "Metadata" }) }), + /* @__PURE__ */ h.jsxs(xu, { value: "collections", children: [ + /* @__PURE__ */ h.jsx(Id, { className: "h-4 w-4 mr-1" }), + /* @__PURE__ */ h.jsx(Ve, { children: "Collections" }) + ] }) + ] }), + /* @__PURE__ */ h.jsxs(Cu, { value: "metadata", className: "space-y-4", children: [ + /* @__PURE__ */ h.jsx( + wu, + { + control: A.control, + name: "title", + render: ({ field: j }) => /* @__PURE__ */ h.jsxs(Ec, { children: [ + /* @__PURE__ */ h.jsx(kc, { children: /* @__PURE__ */ h.jsx(Ve, { children: "Title" }) }), + /* @__PURE__ */ h.jsxs("div", { className: "relative", children: [ + /* @__PURE__ */ h.jsx(Tc, { children: /* @__PURE__ */ h.jsx(Np, { placeholder: de("Video title"), ...j }) }), + /* @__PURE__ */ h.jsx( + "button", + { + type: "button", + onClick: () => V("title"), + disabled: g, + className: "absolute right-2 top-1/2 -translate-y-1/2 p-1.5 rounded-md hover:bg-accent transition-colors", + children: g ? /* @__PURE__ */ h.jsx(Il, { className: "h-4 w-4 animate-spin" }) : f ? /* @__PURE__ */ h.jsx(Rg, { className: "h-4 w-4 text-red-500" }) : /* @__PURE__ */ h.jsx(Ig, { className: "h-4 w-4" }) + } + ) + ] }), + /* @__PURE__ */ h.jsx(gf, {}) + ] }) + } + ), + /* @__PURE__ */ h.jsx( + wu, + { + control: A.control, + name: "description", + render: ({ field: j }) => /* @__PURE__ */ h.jsxs(Ec, { children: [ + /* @__PURE__ */ h.jsx(kc, { children: /* @__PURE__ */ h.jsx(Ve, { children: "Description" }) }), + /* @__PURE__ */ h.jsxs("div", { className: "relative", children: [ + /* @__PURE__ */ h.jsx(Tc, { children: /* @__PURE__ */ h.jsx( + lT, + { + value: j.value || "", + onChange: j.onChange, + placeholder: de("Add a description (supports Markdown)"), + className: "min-h-[120px]" + } + ) }), + /* @__PURE__ */ h.jsx( + "button", + { + type: "button", + onClick: () => V("description"), + disabled: g, + className: "absolute right-2 top-2 p-1.5 rounded-md hover:bg-accent transition-colors z-10", + children: g ? /* @__PURE__ */ h.jsx(Il, { className: "h-4 w-4 animate-spin" }) : f ? /* @__PURE__ */ h.jsx(Rg, { className: "h-4 w-4 text-red-500" }) : /* @__PURE__ */ h.jsx(Ig, { className: "h-4 w-4" }) + } + ) + ] }), + /* @__PURE__ */ h.jsx(gf, {}) + ] }) + } + ), + /* @__PURE__ */ h.jsx( + wu, + { + control: A.control, + name: "visible", + render: ({ field: j }) => /* @__PURE__ */ h.jsxs(Ec, { className: "flex flex-row items-center justify-between rounded-lg border p-4", children: [ + /* @__PURE__ */ h.jsxs("div", { className: "space-y-0.5", children: [ + /* @__PURE__ */ h.jsx(kc, { className: "text-base", children: /* @__PURE__ */ h.jsx(Ve, { children: "Visibility" }) }), + /* @__PURE__ */ h.jsx("div", { className: "text-sm text-muted-foreground", children: /* @__PURE__ */ h.jsx(Ve, { children: "Make this video visible to others" }) }) + ] }), + /* @__PURE__ */ h.jsx(Tc, { children: /* @__PURE__ */ h.jsx( + vC, + { + checked: j.value, + onCheckedChange: j.onChange + } + ) }) + ] }) + } + ) + ] }), + /* @__PURE__ */ h.jsx(Cu, { value: "collections", className: "space-y-4", children: _ ? /* @__PURE__ */ h.jsx("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ h.jsx(Il, { className: "h-6 w-6 animate-spin" }) }) : w.length === 0 ? /* @__PURE__ */ h.jsxs("div", { className: "text-center py-8 text-muted-foreground", children: [ + /* @__PURE__ */ h.jsx(Id, { className: "h-12 w-12 mx-auto mb-3 opacity-50" }), + /* @__PURE__ */ h.jsx("p", { children: /* @__PURE__ */ h.jsx(Ve, { children: "No collections yet" }) }), + /* @__PURE__ */ h.jsx("p", { className: "text-sm", children: /* @__PURE__ */ h.jsx(Ve, { children: "Create a collection first to organize your videos" }) }) + ] }) : /* @__PURE__ */ h.jsx("div", { className: "space-y-2", children: w.map((j) => /* @__PURE__ */ h.jsx(lv, { className: "cursor-pointer hover:bg-accent/50 transition-colors", children: /* @__PURE__ */ h.jsx(cv, { className: "p-4", children: /* @__PURE__ */ h.jsxs("div", { className: "flex items-center space-x-3", children: [ + /* @__PURE__ */ h.jsx( + ov, + { + checked: x.has(j.id), + onCheckedChange: () => $(j.id) + } + ), + /* @__PURE__ */ h.jsxs("div", { className: "flex-1", children: [ + /* @__PURE__ */ h.jsx("h4", { className: "font-medium", children: j.name }), + j.description && /* @__PURE__ */ h.jsx("p", { className: "text-sm text-muted-foreground line-clamp-1", children: j.description }) + ] }) + ] }) }) }, j.id)) }) }) + ] }), + /* @__PURE__ */ h.jsxs("div", { className: "flex justify-end space-x-2", children: [ + /* @__PURE__ */ h.jsx(Me, { type: "button", variant: "outline", onClick: () => t(!1), children: /* @__PURE__ */ h.jsx(Ve, { children: "Cancel" }) }), + /* @__PURE__ */ h.jsx(Me, { type: "submit", disabled: o, children: o ? /* @__PURE__ */ h.jsxs(h.Fragment, { children: [ + /* @__PURE__ */ h.jsx(Il, { className: "mr-2 h-4 w-4 animate-spin" }), + /* @__PURE__ */ h.jsx(Ve, { children: "Updating..." }) + ] }) : /* @__PURE__ */ h.jsx(Ve, { children: "Save Changes" }) }) + ] }) + ] }) }) + ] }) }); +}, ps = { + SUPABASE_IMAGE: "supabase-image", + MUX_VIDEO: "mux-video", + VIDEO_INTERN: "video-intern", + YOUTUBE: "youtube", + TIKTOK: "tiktok", + PAGE: "page-intern", + PAGE_EXTERNAL: "page-external" +}; +function Pg(n) { + return !n || n === ps.SUPABASE_IMAGE ? ps.SUPABASE_IMAGE : n; +} +function RS(n) { + return n === ps.MUX_VIDEO || n === ps.YOUTUBE || n === ps.TIKTOK || n === ps.VIDEO_INTERN; +} +function bte(n, t) { + return n.includes("/api/videos/") ? ps.VIDEO_INTERN : n.includes("stream.mux.com") || n.includes(".m3u8") ? ps.MUX_VIDEO : n.includes("youtube.com") || n.includes("youtu.be") ? ps.YOUTUBE : n.includes("tiktok.com") ? ps.TIKTOK : t && (t.mux_asset_id || t.mux_playback_id) ? ps.MUX_VIDEO : ps.SUPABASE_IMAGE; +} +const wte = [1, 1.25, 1.5, 1.75, 2, 2.5, 3, 4]; +var Jo, $d, _c, $r, T8, A8, P8, N8, $8; +class k8 extends yt { + constructor() { + super(); + S(this, $r); + S(this, Jo); + S(this, $d); + S(this, _c); + P(this, _c, new lM()), l(this, _c).onValueChange = m(this, $r, $8).bind(this); + } + get value() { + return l(this, _c).value; + } + get disabled() { + const { gains: e } = this.$props, { canSetAudioGain: s } = l(this, Jo).$state; + return !s() || e().length === 0; + } + onSetup() { + P(this, Jo, en()), Ha(Va) && P(this, $d, Cn(Va)); + } + onConnect(e) { + Z(m(this, $r, T8).bind(this)), Z(m(this, $r, A8).bind(this)), Z(m(this, $r, P8).bind(this)); + } + getOptions() { + const { gains: e, normalLabel: s } = this.$props; + return e().map((r) => ({ + label: r === 1 || r === null ? s : String(r * 100) + "%", + value: r.toString() + })); + } +} +Jo = new WeakMap(), $d = new WeakMap(), _c = new WeakMap(), $r = new WeakSet(), T8 = function() { + l(this, _c).value = m(this, $r, N8).call(this); +}, A8 = function() { + var i; + const { normalLabel: e } = this.$props, { audioGain: s } = l(this, Jo).$state, r = s(); + (i = l(this, $d)) == null || i.hint.set(r === 1 || r == null ? e() : String(r * 100) + "%"); +}, P8 = function() { + var e; + (e = l(this, $d)) == null || e.disable(this.disabled); +}, N8 = function() { + var s; + const { audioGain: e } = l(this, Jo).$state; + return ((s = e()) == null ? void 0 : s.toString()) ?? "1"; +}, $8 = function(e, s) { + if (this.disabled) return; + const r = +e; + l(this, Jo).remote.changeAudioGain(r, s), this.dispatch("change", { detail: r, trigger: s }); +}, U(k8, "props", { + normalLabel: "Disabled", + gains: wte +}); +const c3 = k8.prototype; +Kt(c3, "value"); +Kt(c3, "disabled"); +Yn(c3, "getOptions"); +const xte = [ + "onAbort", + "onAudioTrackChange", + "onAudioTracksChange", + "onAutoPlay", + "onAutoPlayChange", + "onAutoPlayFail", + "onCanLoad", + "onCanPlay", + "onCanPlayThrough", + "onControlsChange", + "onDestroy", + "onDurationChange", + "onEmptied", + "onEnd", + "onEnded", + "onError", + "onFindMediaPlayer", + "onFullscreenChange", + "onFullscreenError", + "onLiveChange", + "onLiveEdgeChange", + "onLoadedData", + "onLoadedMetadata", + "onLoadStart", + "onLoopChange", + "onOrientationChange", + "onPause", + "onPictureInPictureChange", + "onPictureInPictureError", + "onPlay", + "onPlayFail", + "onPlaying", + "onPlaysInlineChange", + "onPosterChange", + "onProgress", + "onProviderChange", + "onProviderLoaderChange", + "onProviderSetup", + "onQualitiesChange", + "onQualityChange", + "onRateChange", + "onReplay", + "onSeeked", + "onSeeking", + "onSourceChange", + "onSourceChange", + "onStalled", + "onStarted", + "onStreamTypeChange", + "onSuspend", + "onTextTrackChange", + "onTextTracksChange", + "onTimeUpdate", + "onTitleChange", + "onVdsLog", + "onVideoPresentationChange", + "onVolumeChange", + "onWaiting" +], Cte = vt(zM, { + events: xte, + eventsRegex: /^onHls/, + domEventsRegex: /^onMedia/ +}), R8 = d.forwardRef( + ({ aspectRatio: n, children: t, ...e }, s) => /* @__PURE__ */ d.createElement( + Cte, + { + ...e, + src: e.src, + ref: s, + style: { + aspectRatio: n, + ...e.style + } + }, + (r) => /* @__PURE__ */ d.createElement(We.div, { ...r }, t) + ) +); +R8.displayName = "MediaPlayer"; +const _te = vt(lJ), I8 = d.forwardRef( + ({ loaders: n = [], children: t, iframeProps: e, mediaProps: s, ...r }, i) => { + const a = d.useMemo(() => n.map((o) => new o()), n); + return /* @__PURE__ */ d.createElement(_te, { ...r, loaders: a, ref: i }, (o, c) => /* @__PURE__ */ d.createElement("div", { ...o }, /* @__PURE__ */ d.createElement(O8, { provider: c, mediaProps: s, iframeProps: e }), t)); + } +); +I8.displayName = "MediaProvider"; +function O8({ provider: n, mediaProps: t, iframeProps: e }) { + const { sources: s, crossOrigin: r, poster: i, remotePlaybackInfo: a, nativeControls: o, viewType: c } = ah(Wp), { loader: u } = n.$state, { $provider: f, $providerSetup: p } = Ji(), g = gt(s), y = gt(o), v = gt(r), b = gt(i), w = gt(u), E = gt(f), x = gt(p), C = gt(a), _ = w == null ? void 0 : w.mediaType(), k = gt(c), A = k === "audio", T = (w == null ? void 0 : w.name) === "youtube", N = (w == null ? void 0 : w.name) === "vimeo", $ = T || N, D = (w == null ? void 0 : w.name) === "remotion", V = (w == null ? void 0 : w.name) === "google-cast", [j, B] = d.useState(""), [W, J] = d.useState(!1); + return d.useEffect(() => { + !V || j || Promise.resolve().then(() => mZ).then(function(G) { + return G.chromecast; + }).then((G) => { + B(G.default); + }); + }, [V]), d.useEffect(() => { + J(!0); + }, []), V ? /* @__PURE__ */ d.createElement( + "div", + { + className: "vds-google-cast", + ref: (G) => { + n.load(G); + } + }, + /* @__PURE__ */ d.createElement(l3, { paths: j }), + C != null && C.deviceName ? /* @__PURE__ */ d.createElement("span", { className: "vds-google-cast-info" }, "Google Cast on", " ", /* @__PURE__ */ d.createElement("span", { className: "vds-google-cast-device-name" }, C.deviceName)) : null + ) : D ? /* @__PURE__ */ d.createElement("div", { "data-remotion-canvas": !0 }, /* @__PURE__ */ d.createElement( + "div", + { + "data-remotion-container": !0, + ref: (G) => { + n.load(G); + } + }, + KJ(E) && x ? d.createElement(E.render) : null + )) : $ ? d.createElement( + d.Fragment, + null, + d.createElement("iframe", { + ...e, + className: (e != null && e.className ? `${e.className} ` : "") + T ? "vds-youtube" : "vds-vimeo", + suppressHydrationWarning: !0, + tabIndex: y ? void 0 : -1, + "aria-hidden": "true", + "data-no-controls": y ? void 0 : "", + ref(G) { + n.load(G); + } + }), + !y && !A ? d.createElement("div", { className: "vds-blocker" }) : null + ) : _ ? d.createElement(_ === "audio" ? "audio" : "video", { + ...t, + controls: y ? !0 : null, + crossOrigin: typeof v == "boolean" ? "" : v, + poster: _ === "video" && y && b ? b : null, + suppressHydrationWarning: !0, + children: W ? null : g.map( + ({ src: G, type: q }) => Le(G) ? /* @__PURE__ */ d.createElement("source", { src: G, type: q !== "?" ? q : void 0, key: G }) : null + ), + ref(G) { + n.load(G); + } + }) : null; +} +O8.displayName = "MediaOutlet"; +const Ste = vt(hJ), Ete = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement(Ste, { ...t }, (s) => /* @__PURE__ */ d.createElement( + We.button, + { + ...s, + ref: Wt(s.ref, e) + }, + n + )) +); +Ete.displayName = "ToggleButton"; +const kte = vt(qJ), Tte = d.forwardRef( + ({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement( + kte, + { + src: t.asChild && d.isValidElement(n) ? n.props.src : void 0, + ...t + }, + (s, r) => /* @__PURE__ */ d.createElement( + M8, + { + ...s, + instance: r, + ref: Wt(s.ref, e) + }, + n + ) + ) +); +Tte.displayName = "Poster"; +const M8 = d.forwardRef( + ({ instance: n, children: t, ...e }, s) => { + const { src: r, img: i, alt: a, crossOrigin: o, hidden: c } = n.$state, u = gt(r), f = gt(a), p = gt(o), g = gt(c); + return /* @__PURE__ */ d.createElement( + We.img, + { + ...e, + src: u || void 0, + alt: f || void 0, + crossOrigin: p || void 0, + ref: Wt(i.set, s), + style: { display: g ? "none" : void 0 } + }, + t + ); + } +); +M8.displayName = "PosterImg"; +const Ate = d.forwardRef(({ children: n, ...t }, e) => /* @__PURE__ */ d.createElement( + We.div, + { + translate: "yes", + "aria-live": "off", + "aria-atomic": "true", + ...t, + ref: e + }, + n +)); +Ate.displayName = "Caption"; +const Pte = d.forwardRef((n, t) => { + const e = it("textTrack"), [s, r] = d.useState(); + return d.useEffect(() => { + if (!e) return; + function i() { + r(e == null ? void 0 : e.activeCues[0]); + } + return e.addEventListener("cue-change", i), () => { + e.removeEventListener("cue-change", i), r(void 0); + }; + }, [e]), /* @__PURE__ */ d.createElement( + We.span, + { + ...n, + "data-part": "cue", + dangerouslySetInnerHTML: { + __html: (s == null ? void 0 : s.text) || "" + }, + ref: t + } + ); +}); +Pte.displayName = "CaptionText"; +const Nte = ({ + videoId: n, + videoUrl: t, + thumbnailUrl: e, + title: s, + author: r, + authorId: i, + likes: a, + comments: o, + isLiked: c = !1, + description: u, + onClick: f, + onLike: p, + onDelete: g, + maxResolution: y = "270p", + authorAvatarUrl: v, + showContent: b = !0, + showPlayButton: w = !1, + created_at: E, + job: x, + variant: C = "grid", + apiUrl: _ +}) => { + const { user: k } = Qa(); + Kd(); + const A = Z8(), [T, N] = fe(c), [$, D] = fe(a), [V, j] = fe(!1), [B, W] = fe(0), [J, G] = fe(!1), [q, H] = fe(!1), L = An(null); + Rt(() => (console.log(`[VideoCard ${n}] Mounted`), (() => { + var ce; + J && console.log(`[VideoCard ${n}] Navigation detected - stopping`), G(!1), (ce = L.current) == null || ce.pause(); + })(), () => { + var ce; + console.log(`[VideoCard ${n}] Unmounting - pausing player`), (ce = L.current) == null || ce.pause(); + }), [A.pathname]); + const [X, te] = fe("unknown"), [Te, _e] = fe(0), [Je, Re] = fe(null), nt = (k == null ? void 0 : k.id) === i, qe = bte(t) === ps.VIDEO_INTERN, Ye = (() => { + if (e) + return qe ? e : `${e}?width=640&height=640&fit_mode=smartcrop&time=0`; + })(), ge = ((ne) => { + if (qe) return ne; + try { + const ce = new URL(ne); + return ce.searchParams.set("max_resolution", y), ce.toString(); + } catch { + const ce = ne.includes("?") ? "&" : "?"; + return `${ne}${ce}max_resolution=${y}`; + } + })(t); + Rt(() => { + (async () => { + })(); + }, [n, nt, k]), Rt(() => { + if (!qe) return; + if (x) { + if (x.status === "completed") { + te("completed"); + return; + } + if (x.status === "failed") { + te("failed"); + return; + } + te("active"), _e(x.progress || 0); + } + const ne = t.match(/\/api\/videos\/jobs\/([^\/]+)\//) || (x ? [null, x.id] : null); + if (!ne) return; + const ce = ne[1]; + let ht = "http://localhost:3333"; + (t.startsWith("/") || t.includes(window.location.origin)) && (ht = window.location.origin); + let R = null, F = !0; + return (async () => { + if (ce) + try { + const le = await fetch(`${ht}/api/videos/jobs/${ce}`); + if (!le.ok) throw new Error("Failed to fetch job"); + const I = await le.json(); + if (!F) return; + if (I.status === "completed") { + te("completed"); + return; + } else if (I.status === "failed") { + te("failed"); + return; + } + te("active"); + const K = `${ht}/api/videos/jobs/${ce}/progress`; + R = new EventSource(K), R.addEventListener("progress", (se) => { + if (F) + try { + const Pe = JSON.parse(se.data); + Pe.progress !== void 0 && _e(Math.round(Pe.progress)), Pe.status && (Pe.status === "completed" ? (te("completed"), R == null || R.close()) : Pe.status === "failed" ? (te("failed"), R == null || R.close()) : te("active")); + } catch (Pe) { + console.error("SSE Parse Error", Pe); + } + }), R.onerror = (se) => { + R == null || R.close(); + }; + } catch (le) { + console.error("Error checking video status:", le), F && te("unknown"); + } + })(), () => { + F = !1, R && R.close(); + }; + }, [qe, t, x]); + const ze = async (ne) => { + if (ne.stopPropagation(), !confirm("Cancel this upload?")) return; + const ce = t.match(/\/api\/videos\/jobs\/([^\/]+)\//); + if (!ce) return; + const ht = ce[1]; + let R = "http://localhost:3333"; + (t.startsWith("/") || t.includes(window.location.origin)) && (R = window.location.origin); + try { + await fetch(`${R}/api/videos/jobs/${ht}`, { + method: "DELETE" + }), Ee.info(de("Upload cancelled")), g == null || g(); + } catch (F) { + console.error("Failed to cancel", F), Ee.error(de("Failed to cancel upload")); + } + }, st = async (ne) => { + if (ne.stopPropagation(), !k) { + Ee.error(de("Please sign in to like videos")); + return; + } + try { + T ? Ee.info("Video likes coming soon") : Ee.info("Video likes coming soon"), p == null || p(); + } catch (ce) { + console.error("Error toggling like:", ce), Ee.error(de("Failed to update like")); + } + }, Pt = async (ne) => { + if (ne.stopPropagation(), !k || !nt) { + Ee.error(de("You can only delete your own videos")); + return; + } + if (confirm(de("Are you sure you want to delete this video? This action cannot be undone."))) { + j(!0); + try { + const { data: ce, error: ht } = await ct.from("pictures").select("image_url").eq("id", n).single(); + if (ht) throw ht; + const { error: R } = await ct.from("pictures").delete().eq("id", n); + if (R) throw R; + if (ce != null && ce.image_url) { + const F = ce.image_url.split("/"), Y = F[F.length - 1], le = F[F.length - 2], { error: I } = await ct.storage.from("videos").remove([`${le}/${Y}`]); + I && console.error("Error deleting from storage:", I); + } + Ee.success(de("Video deleted successfully")), g == null || g(); + } catch (ce) { + console.error("Error deleting video:", ce), Ee.error(de("Failed to delete video")); + } finally { + j(!1); + } + } + }, et = async () => { + try { + const ne = document.createElement("a"); + ne.href = t, ne.download = `${s}.mp4`, document.body.appendChild(ne), ne.click(), document.body.removeChild(ne), Ee.success(de("Video download started")); + } catch (ne) { + console.error("Error downloading video:", ne), Ee.error(de("Failed to download video")); + } + }, tn = (ne) => { + console.log("Video clicked"), ne.preventDefault(), ne.stopPropagation(), f == null || f(n); + }; + Rt(() => { + const ne = (ce) => { + var R, F; + ((R = ce.detail) == null ? void 0 : R.sourceId) !== n && J && (console.log(`[VideoCard ${n}] Stopping due to global event`), G(!1), (F = L.current) == null || F.pause()); + }; + return window.addEventListener("stop-video", ne), () => window.removeEventListener("stop-video", ne); + }, [J, n]); + const hs = (ne) => { + console.log("Play clicked"), ne.preventDefault(), ne.stopPropagation(), window.dispatchEvent(new CustomEvent("stop-video", { detail: { sourceId: n } })), G(!0); + }; + return /* @__PURE__ */ h.jsxs( + "div", + { + "data-testid": "video-card", + className: "group relative overflow-hidden bg-card transition-all duration-300 cursor-pointer w-full", + onClick: tn, + children: [ + /* @__PURE__ */ h.jsx("div", { className: `${C === "grid" ? "aspect-square" : "w-full"} overflow-hidden relative`, children: J ? ( + // Show MediaPlayer when playing + /* @__PURE__ */ h.jsxs( + R8, + { + ref: L, + title: s, + src: ge.includes(".m3u8") ? { src: ge, type: "application/x-mpegurl" } : x != null && x.resultUrl && x.status === "completed" ? { src: x.resultUrl, type: "application/x-mpegurl" } : ge.includes("/api/videos/jobs") ? { src: ge, type: "video/mp4" } : ge, + poster: Ye, + fullscreenOrientation: "any", + controls: !0, + playsInline: !0, + className: `w-full ${C === "grid" ? "h-full" : ""}`, + children: [ + /* @__PURE__ */ h.jsx(I8, {}), + /* @__PURE__ */ h.jsx(w8, { icons: gte }) + ] + }, + n + ) + ) : ( + // Show thumbnail with play button overlay + /* @__PURE__ */ h.jsxs(h.Fragment, { children: [ + /* @__PURE__ */ h.jsx( + "img", + { + src: Ye || "/placeholder.svg", + alt: s, + className: "w-full h-full object-cover" + } + ), + qe && X !== "completed" && X !== "unknown" && /* @__PURE__ */ h.jsx("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-black/60 z-10", children: X === "failed" ? /* @__PURE__ */ h.jsx("div", { className: "text-red-500 flex flex-col items-center", children: /* @__PURE__ */ h.jsx("span", { className: "text-sm font-medium", children: "Processing Failed" }) }) : /* @__PURE__ */ h.jsxs("div", { className: "flex flex-col items-center text-white space-y-2", children: [ + /* @__PURE__ */ h.jsx(Il, { className: "w-8 h-8 animate-spin text-primary" }), + /* @__PURE__ */ h.jsxs("span", { className: "text-xs font-medium", children: [ + "Processing ", + Te, + "%" + ] }), + /* @__PURE__ */ h.jsxs( + Me, + { + size: "sm", + variant: "destructive", + className: "h-6 text-xs mt-2", + onClick: ze, + children: [ + /* @__PURE__ */ h.jsx($g, { className: "w-3 h-3 mr-1" }), + " Cancel" + ] + } + ) + ] }) }), + w && (!qe || X === "completed" || X === "unknown") && /* @__PURE__ */ h.jsx( + "button", + { + onClick: hs, + className: "absolute inset-0 flex items-center justify-center bg-black/30 hover:bg-black/40 transition-colors group", + "aria-label": "Play video", + children: /* @__PURE__ */ h.jsx("div", { className: "w-16 h-16 rounded-full bg-white/90 flex items-center justify-center group-hover:bg-white group-hover:scale-110 transition-all", children: /* @__PURE__ */ h.jsx( + "svg", + { + className: "w-8 h-8 text-black ml-1", + fill: "currentColor", + viewBox: "0 0 24 24", + children: /* @__PURE__ */ h.jsx("path", { d: "M8 5v14l11-7z" }) + } + ) }) + } + ) + ] }) + ) }), + b && C === "grid" && !J && /* @__PURE__ */ h.jsx("div", { className: "hidden md:block absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none", children: /* @__PURE__ */ h.jsxs("div", { className: "absolute bottom-0 left-0 right-0 p-4 pointer-events-auto", children: [ + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center justify-between mb-2", children: [ + /* @__PURE__ */ h.jsx("div", { className: "flex items-center space-x-2", children: /* @__PURE__ */ h.jsx( + Vd, + { + userId: i, + avatarUrl: v, + displayName: r, + hoverStyle: !0, + showDate: !1 + } + ) }), + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center space-x-1", children: [ + /* @__PURE__ */ h.jsx( + Me, + { + size: "sm", + variant: "ghost", + onClick: st, + className: `h-8 w-8 p-0 ${T ? "text-red-500" : "text-white hover:text-red-500"}`, + children: /* @__PURE__ */ h.jsx(Od, { className: "h-4 w-4", fill: T ? "currentColor" : "none" }) + } + ), + /* @__PURE__ */ h.jsx("span", { className: "text-white text-sm", children: $ }), + /* @__PURE__ */ h.jsx( + Me, + { + size: "sm", + variant: "ghost", + className: "h-8 w-8 p-0 text-white hover:text-blue-400 ml-2", + children: /* @__PURE__ */ h.jsx(df, { className: "h-4 w-4" }) + } + ), + /* @__PURE__ */ h.jsx("span", { className: "text-white text-sm", children: o }), + nt && /* @__PURE__ */ h.jsxs(h.Fragment, { children: [ + /* @__PURE__ */ h.jsx( + Me, + { + size: "sm", + variant: "ghost", + onClick: (ne) => { + ne.stopPropagation(), H(!0); + }, + className: "h-8 w-8 p-0 text-white hover:text-green-400 ml-2", + children: /* @__PURE__ */ h.jsx(Rd, { className: "h-4 w-4" }) + } + ), + /* @__PURE__ */ h.jsx( + Me, + { + size: "sm", + variant: "ghost", + onClick: Pt, + disabled: V, + className: "h-8 w-8 p-0 text-white hover:text-red-400 ml-2", + children: /* @__PURE__ */ h.jsx(Wy, { className: "h-4 w-4" }) + } + ), + B > 1 && /* @__PURE__ */ h.jsxs("div", { className: "flex items-center ml-2 px-2 py-1 bg-white/20 rounded text-white text-xs", children: [ + /* @__PURE__ */ h.jsx(GS, { className: "h-3 w-3 mr-1" }), + B + ] }) + ] }) + ] }) + ] }), + /* @__PURE__ */ h.jsx("h3", { className: "text-white font-medium mb-1", children: s }), + u && /* @__PURE__ */ h.jsx("div", { className: "text-white/80 text-sm mb-3 line-clamp-3 overflow-hidden", children: /* @__PURE__ */ h.jsx($c, { content: u, className: "prose-invert prose-white" }) }), + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center space-x-1", children: [ + /* @__PURE__ */ h.jsxs( + Me, + { + size: "sm", + variant: "secondary", + className: "h-6 px-2 text-xs bg-white/20 hover:bg-white/30 border-0 text-white", + onClick: (ne) => { + ne.stopPropagation(), et(); + }, + children: [ + /* @__PURE__ */ h.jsx(Og, { className: "h-3 w-3 mr-1" }), + /* @__PURE__ */ h.jsx(Ve, { children: "Download" }) + ] + } + ), + /* @__PURE__ */ h.jsx(Me, { size: "sm", variant: "secondary", className: "h-6 w-6 p-0 bg-white/20 hover:bg-white/30 border-0 text-white", children: /* @__PURE__ */ h.jsx(KS, { className: "h-2.5 w-2.5" }) }) + ] }) + ] }) }), + b && (C === "feed" || C === "grid" && !0) && /* @__PURE__ */ h.jsxs("div", { className: `${C === "grid" ? "md:hidden" : ""} pb-2 space-y-2`, children: [ + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center justify-between px-2 pt-2", children: [ + /* @__PURE__ */ h.jsx( + Vd, + { + userId: i, + avatarUrl: v, + displayName: r === "User" ? void 0 : r, + className: "w-8 h-8", + showDate: !1 + } + ), + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center gap-1", children: [ + /* @__PURE__ */ h.jsx( + Me, + { + size: "icon", + variant: "ghost", + onClick: st, + className: T ? "text-red-500 hover:text-red-600" : "", + children: /* @__PURE__ */ h.jsx(Od, { className: "h-6 w-6", fill: T ? "currentColor" : "none" }) + } + ), + $ > 0 && /* @__PURE__ */ h.jsx("span", { className: "text-sm font-medium text-foreground mr-1", children: $ }), + /* @__PURE__ */ h.jsx( + Me, + { + size: "icon", + variant: "ghost", + className: "text-foreground", + children: /* @__PURE__ */ h.jsx(df, { className: "h-6 w-6 -rotate-90" }) + } + ), + o > 0 && /* @__PURE__ */ h.jsx("span", { className: "text-sm font-medium text-foreground mr-1", children: o }), + /* @__PURE__ */ h.jsx( + Me, + { + size: "icon", + variant: "ghost", + className: "text-foreground", + onClick: (ne) => { + ne.stopPropagation(), et(); + }, + children: /* @__PURE__ */ h.jsx(Og, { className: "h-6 w-6" }) + } + ), + nt && /* @__PURE__ */ h.jsx(h.Fragment, { children: /* @__PURE__ */ h.jsx( + Me, + { + size: "icon", + variant: "ghost", + onClick: (ne) => { + ne.stopPropagation(), H(!0); + }, + className: "text-foreground hover:text-green-400", + children: /* @__PURE__ */ h.jsx(Rd, { className: "h-6 w-6" }) + } + ) }) + ] }) + ] }), + /* @__PURE__ */ h.jsxs("div", { className: "px-4 space-y-1", children: [ + !Kw(s) && s && /* @__PURE__ */ h.jsx("div", { className: "font-semibold text-sm", children: s }), + u && /* @__PURE__ */ h.jsx("div", { className: "text-sm text-foreground/90 line-clamp-3 pl-8", children: /* @__PURE__ */ h.jsx($c, { content: u, className: "prose-sm dark:prose-invert" }) }), + E && /* @__PURE__ */ h.jsx("div", { className: "text-xs text-muted-foreground pt-1", children: Yw(E) }) + ] }) + ] }), + q && /* @__PURE__ */ h.jsx( + vte, + { + open: q, + onOpenChange: H, + videoId: n, + currentTitle: s, + currentDescription: u || null, + currentVisible: !0, + onUpdateSuccess: () => { + H(!1), g == null || g(); + } + } + ) + ] + } + ); +}; +function $te(n) { + if (!n) return null; + const t = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/, e = n.match(t); + return e && e[2].length === 11 ? e[2] : null; +} +function Rte(n) { + if (!n) return null; + try { + const t = new URL(n); + if (t.hostname.includes("tiktok.com") && t.pathname.includes("/video/")) { + const e = t.pathname.split("/video/"); + if (e.length > 1) + return e[1].split(/[?#]/)[0]; + } + } catch { + return null; + } + return null; +} +const Ite = ({ + id: n, + url: t, + thumbnailUrl: e, + title: s, + author: r, + authorId: i, + authorAvatarUrl: a, + likes: o, + comments: c, + isLiked: u, + description: f, + onClick: p, + onLike: g, + created_at: y, + variant: v = "grid", + responsive: b, + showContent: w = !0, + apiUrl: E +}) => { + const x = e || t || "https://picsum.photos/640", [C, _] = he.useState(!1), k = Rte(t), A = $te(t), T = !!(k || A), N = (D) => { + D.stopPropagation(), g == null || g(); + }, $ = (D) => { + D.stopPropagation(), p == null || p(n); + }; + return v === "feed" ? /* @__PURE__ */ h.jsxs( + "div", + { + className: "group relative overflow-hidden bg-card transition-all duration-300 cursor-pointer w-full border rounded-lg mb-4", + onClick: $, + children: [ + /* @__PURE__ */ h.jsx("div", { className: "p-4 border-b flex items-center justify-between", children: /* @__PURE__ */ h.jsx( + Vd, + { + userId: i, + avatarUrl: a, + displayName: r, + className: "w-8 h-8", + showDate: !0, + createdAt: y + } + ) }), + /* @__PURE__ */ h.jsx("div", { className: `relative w-full ${k ? "aspect-[9/16]" : "aspect-[16/9]"} overflow-hidden bg-muted`, children: C && T ? /* @__PURE__ */ h.jsx("div", { className: "w-full h-full bg-black flex justify-center", children: /* @__PURE__ */ h.jsx( + "iframe", + { + src: k ? `https://www.tiktok.com/embed/v2/${k}` : `https://www.youtube.com/embed/${A}?autoplay=1`, + className: "w-full h-full border-0", + allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture", + allowFullScreen: !0, + title: s + } + ) }) : /* @__PURE__ */ h.jsxs(h.Fragment, { children: [ + /* @__PURE__ */ h.jsx( + Mg, + { + src: x, + alt: s, + className: "w-full h-full", + imgClassName: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105", + sizes: "100vw", + data: b, + apiUrl: E + } + ), + /* @__PURE__ */ h.jsx("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none", children: T ? /* @__PURE__ */ h.jsx( + "div", + { + className: "bg-black/50 p-4 rounded-full backdrop-blur-sm pointer-events-auto cursor-pointer hover:bg-black/70 transition-colors", + onClick: (D) => { + D.stopPropagation(), _(!0); + }, + children: /* @__PURE__ */ h.jsx(lm, { className: "w-8 h-8 text-white fill-white" }) + } + ) : /* @__PURE__ */ h.jsx("div", { className: "bg-black/50 p-4 rounded-full backdrop-blur-sm", children: /* @__PURE__ */ h.jsx(Fm, { className: "w-8 h-8 text-white" }) }) }) + ] }) }), + /* @__PURE__ */ h.jsxs("div", { className: "p-4 space-y-2", children: [ + /* @__PURE__ */ h.jsx("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ h.jsx("h3", { className: "text-xl font-semibold", children: s }) }), + f && /* @__PURE__ */ h.jsx("div", { className: "text-sm text-foreground/90 line-clamp-3", children: /* @__PURE__ */ h.jsx($c, { content: f, className: "prose-sm dark:prose-invert" }) }), + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center gap-4 pt-2", children: [ + /* @__PURE__ */ h.jsxs(Me, { size: "sm", variant: "ghost", className: "px-0 gap-1", onClick: N, children: [ + /* @__PURE__ */ h.jsx(Od, { className: `h-5 w-5 ${u ? "fill-red-500 text-red-500" : ""}` }), + /* @__PURE__ */ h.jsx("span", { children: o }) + ] }), + /* @__PURE__ */ h.jsxs(Me, { size: "sm", variant: "ghost", className: "px-0 gap-1", children: [ + /* @__PURE__ */ h.jsx(df, { className: "h-5 w-5" }), + /* @__PURE__ */ h.jsx("span", { children: c }) + ] }) + ] }) + ] }) + ] + } + ) : /* @__PURE__ */ h.jsx( + "div", + { + className: `group relative overflow-hidden bg-card transition-all duration-300 cursor-pointer w-full ${C && k ? "aspect-[9/16]" : "aspect-square"}`, + onClick: (D) => { + T && !C ? (D.stopPropagation(), _(!0)) : $(D); + }, + children: C && T ? /* @__PURE__ */ h.jsx("div", { className: "w-full h-full bg-black flex justify-center", children: /* @__PURE__ */ h.jsx( + "iframe", + { + src: k ? `https://www.tiktok.com/embed/v2/${k}` : `https://www.youtube.com/embed/${A}?autoplay=1`, + className: "w-full h-full border-0", + allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture", + allowFullScreen: !0, + title: s + } + ) }) : /* @__PURE__ */ h.jsxs(h.Fragment, { children: [ + /* @__PURE__ */ h.jsx( + Mg, + { + src: x, + alt: s, + className: "w-full h-full", + imgClassName: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105", + sizes: "(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw", + responsiveSizes: [320, 640, 1024], + data: b, + apiUrl: E + } + ), + /* @__PURE__ */ h.jsx("div", { className: "absolute top-2 right-2 p-1.5 bg-black/60 rounded-md backdrop-blur-sm z-10", children: T ? /* @__PURE__ */ h.jsx(lm, { className: "w-4 h-4 text-white fill-white" }) : /* @__PURE__ */ h.jsx(Fm, { className: "w-4 h-4 text-white" }) }), + T && /* @__PURE__ */ h.jsx("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none", children: /* @__PURE__ */ h.jsx("div", { className: "bg-black/50 p-3 rounded-full backdrop-blur-sm group-hover:bg-black/70 transition-colors", children: /* @__PURE__ */ h.jsx(lm, { className: "w-8 h-8 text-white fill-white" }) }) }), + w && /* @__PURE__ */ h.jsx("div", { className: "hidden md:block absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none", children: /* @__PURE__ */ h.jsxs("div", { className: "absolute bottom-0 left-0 right-0 p-4 pointer-events-auto", children: [ + /* @__PURE__ */ h.jsxs("div", { className: "flex items-center justify-between mb-2", children: [ + /* @__PURE__ */ h.jsx( + Vd, + { + userId: i, + avatarUrl: a, + displayName: r, + hoverStyle: !0, + showDate: !1 + } + ), + /* @__PURE__ */ h.jsx("div", { className: "flex items-center space-x-1", children: /* @__PURE__ */ h.jsx( + Me, + { + size: "sm", + variant: "ghost", + onClick: N, + className: `h-8 w-8 p-0 ${u ? "text-red-500" : "text-white hover:text-red-500"}`, + children: /* @__PURE__ */ h.jsx(Od, { className: "h-4 w-4", fill: u ? "currentColor" : "none" }) + } + ) }) + ] }), + /* @__PURE__ */ h.jsx("h3", { className: "text-white font-medium mb-1 line-clamp-1", children: s }), + f && /* @__PURE__ */ h.jsx("div", { className: "text-white/80 text-sm mb-1 line-clamp-2", children: /* @__PURE__ */ h.jsx($c, { content: f, className: "prose-invert prose-white" }) }) + ] }) }), + /* @__PURE__ */ h.jsx("div", { className: "md:hidden absolute bottom-0 left-0 right-0 p-2 bg-gradient-to-t from-black/80 to-transparent", children: /* @__PURE__ */ h.jsxs("div", { className: "flex items-center justify-between text-white", children: [ + /* @__PURE__ */ h.jsx("span", { className: "text-xs font-medium truncate flex-1 mr-2", children: s }), + T ? /* @__PURE__ */ h.jsx(lm, { className: "w-3 h-3 flex-shrink-0 fill-white" }) : /* @__PURE__ */ h.jsx(Fm, { className: "w-3 h-3 flex-shrink-0" }) + ] }) }) + ] }) + } + ); +}, Tx = ({ + id: n, + pictureId: t, + url: e, + thumbnailUrl: s, + title: r, + author: i, + authorAvatarUrl: a, + authorId: o, + likes: c, + comments: u, + isLiked: f, + description: p, + type: g, + meta: y, + onClick: v, + onLike: b, + onDelete: w, + onEdit: E, + created_at: x, + showContent: C = !0, + responsive: _, + job: k, + variant: A = "grid", + apiUrl: T +}) => { + const N = Pg(g); + return N === "tiktok" ? /* @__PURE__ */ h.jsx("div", { className: "w-full h-full bg-black flex justify-center aspect-[9/16] rounded-md overflow-hidden shadow-sm border relative", children: /* @__PURE__ */ h.jsx( + "iframe", + { + src: e, + className: "w-full h-full border-0", + title: r + } + ) }) : N === ps.VIDEO_INTERN ? /* @__PURE__ */ h.jsx( + Nte, + { + videoId: t || n, + videoUrl: e, + thumbnailUrl: s || void 0, + title: r, + author: i, + authorId: o, + likes: c, + comments: u, + isLiked: f, + description: p, + onClick: () => v == null ? void 0 : v(n), + onLike: b, + onDelete: w, + showContent: C, + created_at: x, + authorAvatarUrl: a, + job: k, + variant: A, + apiUrl: T + } + ) : N === ps.PAGE || N === ps.PAGE_EXTERNAL ? /* @__PURE__ */ h.jsx( + Ite, + { + id: n, + url: e, + thumbnailUrl: s, + title: r, + author: i, + authorId: o, + authorAvatarUrl: a, + likes: c, + comments: u, + isLiked: f, + description: p, + type: g, + meta: y, + onClick: () => v == null ? void 0 : v(n), + onLike: b, + onDelete: w, + showContent: C, + created_at: x, + responsive: _, + variant: A, + apiUrl: T + } + ) : /* @__PURE__ */ h.jsx( + PK, + { + pictureId: t || n, + image: e, + title: r, + author: i, + authorId: o, + likes: c, + comments: u, + isLiked: f, + description: p, + onClick: v, + onLike: b, + onDelete: w, + onEdit: E, + createdAt: x, + authorAvatarUrl: a, + showContent: C, + responsive: _, + variant: A, + apiUrl: T + } + ); +}, Ote = () => { + const n = Xr(aK), t = Xr((r) => r.setNavigationData), e = Xr((r) => r.preloadImage), s = Xr((r) => r.updateCurrentIndex); + return { + navigationData: n, + setNavigationData: t, + preloadImage: e, + updateCurrentIndex: s + }; +}, Mte = Ap({ + orgSlug: null, + isOrgContext: !1 +}), Dte = () => qc(Mte), Lte = Ap(null), D8 = () => { + const n = qc(Lte); + if (!n) + throw new Error("useFeedCache must be used within a FeedCacheProvider"); + return n; +}, jte = ({ + source: n = "home", + sourceId: t, + isOrgContext: e, + orgSlug: s, + enabled: r = !0, + sortBy: i = "latest", + supabaseClient: a +}) => { + const { getCache: o, saveCache: c } = D8(), u = `${n}-${t || ""}-${e ? "org" : "personal"}-${s || ""}-${i}`, [f, p] = fe(() => { + const D = o(u); + return D ? D.posts : []; + }), [g, y] = fe(() => { + const D = o(u); + return D ? D.page : 0; + }), [v, b] = fe(() => { + const D = o(u); + return D !== null ? D.hasMore : !0; + }), [w, E] = fe(() => !o(u)), [x, C] = fe(!1), [_, k] = fe(null), { fetchProfiles: A } = AN(), T = An(!!o(u)); + Rt(() => { + const D = o(u); + D ? (p(D.posts), y(D.page), b(D.hasMore), E(!1), T.current = !0) : (p([]), y(0), b(!0), E(!0), T.current = !1); + }, [n, t, e, s, u, o]), Rt(() => { + if (!w && f.length > 0) { + const D = o(u); + c(u, { + posts: f, + page: g, + hasMore: v, + scrollY: (D == null ? void 0 : D.scrollY) || 0 + }); + } + }, [f, g, v, w, u, c, o]); + const N = Xh(async (D, V) => { + var B; + if (!r) { + E(!1); + return; + } + V ? C(!0) : E(!0), k(null); + let j = []; + try { + n === "home" && !t && D === 0 && ((B = window.__INITIAL_STATE__) != null && B.feed) ? (j = window.__INITIAL_STATE__.feed, window.__INITIAL_STATE__.feed = void 0, console.log("Hydrated feed", j)) : j = await oL( + n, + t, + e, + s, + D, + C_, + a + ), j.length < C_ ? b(!1) : b(!0); + const W = cL(j), J = Fte(W, i); + p((q) => { + const H = V ? [...q, ...J] : J; + return Vte(H, i); + }); + const G = Array.from(new Set(W.map((q) => q.user_id))); + G.length > 0 && A(G); + } catch (W) { + k(W instanceof Error ? W : new Error("Unknown error fetching feed")); + } finally { + E(!1), C(!1); + } + }, [n, t, e, s, r, A, i, a]); + Rt(() => { + if (T.current) { + T.current = !1; + return; + } + N(0, !1); + }, [N]); + const $ = Xh(() => { + if (!v || x || w) return; + const D = g + 1; + y(D), N(D, !0); + }, [v, x, w, g, N]); + return { posts: f, loading: w, error: _, hasMore: v, loadMore: $, isFetchingMore: x }; +}, Fte = (n, t) => n.map((e) => { + if (!e.pictures || e.pictures.length === 0) + return e; + const s = e.pictures.filter((i) => i.visible !== !1); + if (s.length === 0) + return e; + let r; + return t === "latest" ? r = s.reduce((i, a) => { + const o = new Date(i.created_at || e.created_at).getTime(); + return new Date(a.created_at || e.created_at).getTime() > o ? a : i; + }) : r = [...s].sort((a, o) => (a.position || 0) - (o.position || 0))[0], { + ...e, + cover: r + }; +}), Vte = (n, t) => { + const e = [...n]; + return t === "top" ? e.sort((s, r) => { + const i = s.likes_count || 0, a = r.likes_count || 0; + return a !== i ? a - i : new Date(r.created_at).getTime() - new Date(s.created_at).getTime(); + }) : e.sort((s, r) => { + const i = s.pictures && s.pictures.length > 0 ? Math.max(...s.pictures.map((o) => new Date(o.created_at || s.created_at).getTime())) : new Date(s.created_at).getTime(); + return (r.pictures && r.pictures.length > 0 ? Math.max(...r.pictures.map((o) => new Date(o.created_at || r.created_at).getTime())) : new Date(r.created_at).getTime()) - i; + }), e; +}, Tne = ({ + customPictures: n, + customLoading: t, + navigationSource: e = "home", + navigationSourceId: s, + isOwner: r = !1, + onFilesDrop: i, + showVideos: a = !0, + sortBy: o = "latest", + supabaseClient: c, + apiUrl: u +}) => { + const { user: f } = Qa(), p = c || ct, g = Kd(), { setNavigationData: y, navigationData: v } = Ote(), { getCache: b, saveCache: w } = D8(), { orgSlug: E, isOrgContext: x } = Dte(), [C, _] = fe([]), [k, A] = fe(/* @__PURE__ */ new Set()), [T, N] = fe(!0), [$, D] = fe(!1), V = An(null), { + posts: j, + loading: B, + hasMore: W, + loadMore: J, + isFetchingMore: G + } = jte({ + source: e, + sourceId: s, + isOrgContext: x, + orgSlug: E, + sortBy: o, + // Disable hook if we have custom pictures + enabled: !n, + supabaseClient: c + }), q = An(null); + Rt(() => { + const ee = new IntersectionObserver( + (ge) => { + ge[0].isIntersecting && W && !B && !G && J(); + }, + { threshold: 1 } + ); + return q.current && ee.observe(q.current), () => { + q.current && ee.unobserve(q.current); + }; + }, [W, B, G, J]), Rt(() => { + let ee = []; + if (n ? (ee = n, N(t || !1)) : (ee = lL(j, o), N(B)), _(ee), ee.length > 0) { + const ge = { + posts: ee.map((ze) => ({ + id: ze.id, + title: ze.title, + image_url: ze.image_url, + user_id: ze.user_id, + type: Pg(ze.type) + })), + currentIndex: 0, + source: e, + sourceId: s + }; + y(ge); + } + }, [j, B, n, t, e, s, y, o]); + const H = `${e}-${s || ""}-${x ? "org" : "personal"}-${E || ""}`, L = An(!1); + qS(() => { + if (C.length > 0 && !L.current && (!n || e === "widget" && s)) { + const ge = b(H); + ge && ge.scrollY > 0 && window.scrollTo(0, ge.scrollY), L.current = !0; + } + }, [C, H, b, n, e, s]), Rt(() => { + L.current = !1; + }, [H]); + const X = An(window.scrollY); + Rt(() => { + const ee = () => { + X.current = window.scrollY; + }; + return window.addEventListener("scroll", ee), () => window.removeEventListener("scroll", ee); + }, []), Rt(() => () => { + if (!n || e === "widget" && s) { + const ge = b(H); + ge && X.current > 0 && w(H, { ...ge, scrollY: X.current }); + } + }, [H, b, w, n, e, s]); + const te = async () => { + window.location.reload(); + }, Te = async () => { + if (!(!f || C.length === 0)) + try { + const ee = C.map((st) => st.picture_id || st.id).filter(Boolean); + if (ee.length === 0) return; + const { data: ge, error: ze } = await p.from("likes").select("picture_id").eq("user_id", f.id).in("picture_id", ee); + if (ze) throw ze; + A((st) => { + const Pt = new Set(st); + return ge == null || ge.forEach((et) => Pt.add(et.picture_id)), Pt; + }); + } catch (ee) { + console.error("Error fetching user likes:", ee); + } + }, _e = (ee, ge, ze) => { + var st; + if (ge === "page-intern") { + const Pt = C.find((et) => et.id === ee); + if (Pt && ((st = Pt.meta) != null && st.slug)) { + g(`/user/${Pt.user_id}/pages/${Pt.meta.slug}`); + return; + } + } + v && y({ ...v, currentIndex: ze }), g(`/post/${ee}`); + }, Je = (ee) => { + ee.preventDefault(), ee.stopPropagation(), V.current && clearTimeout(V.current), r && i && D(!0); + }, Re = (ee) => { + ee.preventDefault(), ee.stopPropagation(), V.current && clearTimeout(V.current), V.current = window.setTimeout(() => { + D(!1); + }, 100); + }, nt = (ee) => { + ee.preventDefault(), ee.stopPropagation(); + }, rt = (ee) => { + if (ee.preventDefault(), ee.stopPropagation(), D(!1), !r || !i) return; + const ge = [...ee.dataTransfer.files].filter((ze) => ze.type.startsWith("image/")); + ge.length > 0 && i(ge); + }, qe = async (ee) => { + try { + const ge = Ee.loading("Loading post for editing..."), { data: ze, error: st } = await p.from("posts").select("*, pictures(*)").eq("id", ee).single(); + if (st) throw st; + if (!ze.pictures || ze.pictures.length === 0) + throw new Error("No pictures found in post"); + const Pt = ze.pictures.sort((et, tn) => et.position - tn.position).map((et) => ({ + id: et.id, + path: et.id, + src: et.image_url, + title: et.title, + description: et.description || "", + selected: !1, + realDatabaseId: et.id + })); + Ee.dismiss(ge), g("/wizard", { + state: { + mode: "post", + initialImages: Pt, + postTitle: ze.title, + postDescription: ze.description, + editingPostId: ze.id + } + }); + } catch (ge) { + console.error("Error opening post editor:", ge), Ee.error("Failed to open post editor"); + } + }; + if (Rt(() => { + if (C.length > 0 && n) { + const ee = { + posts: C.filter((ge) => !RS(Pg(ge.type))).map((ge) => ({ + id: ge.id, + title: ge.title, + image_url: ge.image_url, + user_id: ge.user_id + })), + currentIndex: 0, + source: e, + sourceId: s + }; + y(ee); + } + }, [C, n, e, s, y]), T) + return /* @__PURE__ */ h.jsx("div", { className: "py-8", children: /* @__PURE__ */ h.jsx("div", { className: "text-center text-muted-foreground", children: "Loading media..." }) }); + const Ye = C.length > 0; + return /* @__PURE__ */ h.jsxs("div", { className: "w-full relative", children: [ + Ye && r && i && e === "collection" && /* @__PURE__ */ h.jsxs( + "div", + { + className: `my-4 border-2 border-dashed border-muted rounded-lg p-6 text-center text-muted-foreground transition-all ${$ ? "ring-4 ring-primary ring-offset-2 border-solid border-primary bg-primary/5" : ""} `, + onDragEnter: Je, + onDragLeave: Re, + onDragOver: nt, + onDrop: rt, + children: [ + /* @__PURE__ */ h.jsx(v3, { className: "mx-auto h-8 w-8 text-muted-foreground" }), + /* @__PURE__ */ h.jsx("p", { className: "mt-2 text-sm", children: "Drag and drop more images here to upload." }) + ] + } + ), + Ye ? /* @__PURE__ */ h.jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4", children: C.map((ee, ge) => { + var et, tn; + const ze = Pg(ee.type), st = RS(ze), Pt = ee.image_url; + return st ? /* @__PURE__ */ h.jsxs("div", { className: "relative group", children: [ + /* @__PURE__ */ h.jsx( + Tx, + { + id: ee.id, + pictureId: ee.picture_id, + url: Pt, + thumbnailUrl: ee.thumbnail_url, + title: ee.title, + author: void 0, + authorAvatarUrl: void 0, + authorId: ee.user_id, + likes: ee.likes_count || 0, + comments: ((et = ee.comments[0]) == null ? void 0 : et.count) || 0, + isLiked: k.has(ee.picture_id || ee.id), + description: ee.description, + type: ze, + meta: ee.meta, + onClick: () => _e(ee.id, ze, ge), + onLike: Te, + onDelete: te, + onEdit: qe, + created_at: ee.created_at, + job: ee.job, + responsive: ee.responsive, + apiUrl: u + } + ), + /* @__PURE__ */ h.jsx("div", { className: "absolute top-2 right-2 flex items-center justify-center w-8 h-8 bg-black/50 rounded-full opacity-0 group-hover:opacity-100 transition-opacity", children: /* @__PURE__ */ h.jsx(YS, { className: "w-4 h-4 text-white" }) }) + ] }, ee.id) : /* @__PURE__ */ h.jsx( + Tx, + { + id: ee.id, + pictureId: ee.picture_id, + url: Pt, + thumbnailUrl: ee.thumbnail_url, + title: ee.title, + author: void 0, + authorAvatarUrl: void 0, + authorId: ee.user_id, + likes: ee.likes_count || 0, + comments: ((tn = ee.comments[0]) == null ? void 0 : tn.count) || 0, + isLiked: k.has(ee.picture_id || ee.id), + description: ee.description, + type: ze, + meta: ee.meta, + onClick: () => _e(ee.id, ze, ge), + onLike: Te, + onDelete: te, + onEdit: qe, + created_at: ee.created_at, + job: ee.job, + responsive: ee.responsive, + apiUrl: u + }, + ee.id + ); + }) }) : r && e === "collection" && i ? /* @__PURE__ */ h.jsx( + "div", + { + className: "py-8", + onDragEnter: Je, + onDragLeave: Re, + onDragOver: nt, + onDrop: rt, + children: /* @__PURE__ */ h.jsxs("div", { className: `border-2 border-dashed border-muted rounded-lg p-12 text-center text-muted-foreground transition-all ${$ ? "ring-4 ring-primary ring-offset-2 border-solid border-primary bg-primary/5" : ""} `, children: [ + /* @__PURE__ */ h.jsx(v3, { className: "mx-auto h-12 w-12 text-muted-foreground" }), + /* @__PURE__ */ h.jsx("h3", { className: "mt-4 text-lg font-semibold", children: "This collection is empty" }), + /* @__PURE__ */ h.jsx("p", { className: "mt-2", children: "Drag and drop images here to get started." }) + ] }) + } + ) : /* @__PURE__ */ h.jsx("div", { className: "py-8", children: /* @__PURE__ */ h.jsxs("div", { className: "text-center text-muted-foreground", children: [ + /* @__PURE__ */ h.jsx("p", { className: "text-lg", children: "No media yet!" }), + /* @__PURE__ */ h.jsx("p", { children: "Be the first to share content with the community." }) + ] }) }), + /* @__PURE__ */ h.jsx("div", { ref: q, className: "h-10 w-full flex items-center justify-center p-4", children: G && /* @__PURE__ */ h.jsx("div", { className: "animate-spin rounded-full h-6 w-6 border-b-2 border-gray-900 dark:border-white" }) }) + ] }); +}; +export { + fy as A, + En as B, + jN as C, + Nt as D, + zs as E, + zd as F, + cne as G, + jX as H, + v$ as I, + Se as J, + $Z as K, + bt as L, + T2 as M, + QN as N, + ft as O, + Bd as P, + sr as Q, + hR as R, + Mg as S, + Hd as T, + Tne as U, + QR as V, + tE as a, + iP as b, + lP as c, + Dn as d, + VX as e, + oP as f, + J8 as g, + Le as h, + A2 as i, + h as j, + lh as k, + pe as l, + dn as m, + Z as n, + iG as o, + eF as p, + Wa as q, + lt as r, + aP as s, + jn as t, + fg as u, + IZ as v, + Hs as w, + qd as x, + He as y, + og as z +}; +//# sourceMappingURL=lib-export-CI8auKfP.js.map diff --git a/packages/ui/dist-lib/lib-export-CI8auKfP.js.map b/packages/ui/dist-lib/lib-export-CI8auKfP.js.map new file mode 100644 index 00000000..f12583d9 --- /dev/null +++ b/packages/ui/dist-lib/lib-export-CI8auKfP.js.map @@ -0,0 +1 @@ +{"version":3,"file":"lib-export-CI8auKfP.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/hooks/useResponsiveImage.ts","../src/components/ResponsiveImage.tsx","../src/integrations/supabase/client.ts","../src/lib/db.ts","../node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/clsx/dist/clsx.mjs","../node_modules/class-variance-authority/dist/index.mjs","../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/lib/utils.ts","../src/components/ui/button.tsx","../src/hooks/useAuth.tsx","../node_modules/marked/lib/marked.esm.js","../node_modules/dompurify/dist/purify.es.mjs","../node_modules/zod/v3/helpers/util.js","../node_modules/zod/v3/ZodError.js","../node_modules/zod/v3/locales/en.js","../node_modules/zod/v3/errors.js","../node_modules/zod/v3/helpers/parseUtil.js","../node_modules/zod/v3/helpers/errorUtil.js","../node_modules/zod/v3/types.js","../src/utils/tagUtils.ts","../src/components/HashtagText.tsx","../node_modules/prismjs/prism.js","../node_modules/prismjs/components/prism-typescript.js","../node_modules/prismjs/components/prism-javascript.js","../node_modules/prismjs/components/prism-json.js","../node_modules/prismjs/components/prism-bash.js","../node_modules/prismjs/components/prism-css.js","../node_modules/prismjs/components/prism-markup.js","../src/components/MarkdownRenderer.tsx","../node_modules/@radix-ui/primitive/dist/index.mjs","../node_modules/@radix-ui/react-context/dist/index.mjs","../node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../node_modules/@radix-ui/react-id/dist/index.mjs","../node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs","../node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../node_modules/@radix-ui/react-focus-scope/dist/index.mjs","../node_modules/@radix-ui/react-portal/dist/index.mjs","../node_modules/@radix-ui/react-presence/dist/index.mjs","../node_modules/@radix-ui/react-focus-guards/dist/index.mjs","../node_modules/tslib/tslib.es6.mjs","../node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../node_modules/use-callback-ref/dist/es2015/assignRef.js","../node_modules/use-callback-ref/dist/es2015/useRef.js","../node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../node_modules/use-sidecar/dist/es2015/medium.js","../node_modules/use-sidecar/dist/es2015/exports.js","../node_modules/react-remove-scroll/dist/es2015/medium.js","../node_modules/react-remove-scroll/dist/es2015/UI.js","../node_modules/get-nonce/dist/es2015/index.js","../node_modules/react-style-singleton/dist/es2015/singleton.js","../node_modules/react-style-singleton/dist/es2015/hook.js","../node_modules/react-style-singleton/dist/es2015/component.js","../node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../node_modules/react-remove-scroll-bar/dist/es2015/component.js","../node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../node_modules/react-remove-scroll/dist/es2015/sidecar.js","../node_modules/react-remove-scroll/dist/es2015/Combination.js","../node_modules/aria-hidden/dist/es2015/index.js","../node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-dialog/dist/index.mjs","../src/components/ui/dialog.tsx","../src/components/ui/input.tsx","../node_modules/react-hook-form/dist/index.esm.mjs","../node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/@radix-ui/react-label/dist/index.mjs","../src/components/ui/label.tsx","../src/components/ui/form.tsx","../node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-collection/dist/index.mjs","../node_modules/@radix-ui/react-direction/dist/index.mjs","../node_modules/@radix-ui/react-roving-focus/dist/index.mjs","../node_modules/@radix-ui/react-tabs/dist/index.mjs","../src/components/ui/tabs.tsx","../node_modules/@radix-ui/react-use-previous/dist/index.mjs","../node_modules/@radix-ui/react-use-size/dist/index.mjs","../node_modules/@radix-ui/react-switch/dist/index.mjs","../src/components/ui/switch.tsx","../node_modules/@radix-ui/react-checkbox/dist/index.mjs","../src/components/ui/checkbox.tsx","../src/components/ui/card.tsx","../node_modules/@hookform/resolvers/dist/resolvers.mjs","../node_modules/@hookform/resolvers/zod/dist/zod.mjs","../src/components/ui/badge.tsx","../src/i18n.tsx","../src/components/widgets/ImagePickerDialog.tsx","../src/components/MarkdownEditor.tsx","../node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-alert-dialog/dist/index.mjs","../src/components/ui/alert-dialog.tsx","../src/components/VersionSelector.tsx","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/chatkit/sessions.mjs","../node_modules/openai/resources/beta/chatkit/threads.mjs","../node_modules/openai/resources/beta/chatkit/chatkit.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/calls.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/input-tokens.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/videos.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../node_modules/zod-to-json-schema/dist/esm/parsers/string.js","../node_modules/@google/generative-ai/dist/index.mjs","../src/image-api.ts","../src/lib/openai.ts","../src/constants.ts","../src/components/EditImageModal.tsx","../node_modules/react-zoom-pan-pinch/dist/index.esm.js","../src/components/ui/textarea.tsx","../node_modules/@radix-ui/react-radio-group/dist/index.mjs","../src/components/ui/radio-group.tsx","../src/components/PublishDialog.tsx","../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../node_modules/@radix-ui/react-arrow/dist/index.mjs","../node_modules/@radix-ui/react-popper/dist/index.mjs","../node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-menu/dist/index.mjs","../node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs","../src/components/ui/dropdown-menu.tsx","../src/components/StylePresetSelector.tsx","../src/components/ImageLightbox.tsx","../node_modules/zustand/esm/vanilla.mjs","../node_modules/zustand/esm/react.mjs","../node_modules/zustand/esm/middleware.mjs","../src/stores/navigationStore.ts","../src/hooks/useWizardContext.ts","../src/components/MagicWizardButton.tsx","../src/utils/downloadUtils.ts","../src/contexts/PostNavigationContext.tsx","../src/utils/textUtils.ts","../node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-context/dist/index.mjs","../node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../node_modules/use-sync-external-store/shim/index.js","../node_modules/@radix-ui/react-use-is-hydrated/dist/index.mjs","../node_modules/@radix-ui/react-avatar/dist/index.mjs","../src/components/ui/avatar.tsx","../src/contexts/ProfilesContext.tsx","../src/components/UserAvatarBlock.tsx","../src/components/PhotoCard.tsx","../node_modules/@vidstack/react/prod/chunks/vidstack-CZgUA94N.js","../node_modules/@vidstack/react/prod/chunks/vidstack-D5Pzx_k5.js","../node_modules/@vidstack/react/prod/chunks/vidstack-CQ3Bde2N.js","../node_modules/@vidstack/react/prod/chunks/vidstack-DqtDbuaC.js","../node_modules/@vidstack/react/prod/chunks/vidstack-DzQtn4XB.js","../node_modules/@vidstack/react/prod/chunks/vidstack-vqp2QaHR.js","../node_modules/@vidstack/react/prod/chunks/vidstack-D27o2o-g.js","../node_modules/@vidstack/react/prod/chunks/vidstack-CBF7iUqu.js","../node_modules/@vidstack/react/prod/player/vidstack-default-icons.js","../src/components/EditVideoModal.tsx","../src/lib/mediaRegistry.ts","../node_modules/@vidstack/react/prod/vidstack.js","../src/components/VideoCard.tsx","../src/utils/mediaUtils.ts","../src/components/PageCard.tsx","../src/components/MediaCard.tsx","../src/hooks/usePostNavigation.ts","../src/contexts/OrganizationContext.tsx","../src/contexts/FeedCacheContext.tsx","../src/hooks/useFeedData.ts","../src/components/PhotoGrid.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar React = require('react');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n // eslint-disable-next-line no-fallthrough\n }\n }\n\n return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if ( !fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n return type;\n }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner$1.current) {\n var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement$1(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object') {\n return;\n }\n\n if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n {\n if (hasOwnProperty.call(props, 'key')) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(props).filter(function (k) {\n return k !== 'key';\n });\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, true);\n }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, false);\n }\n}\n\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs = jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","\r\nimport { useState, useEffect } from 'react';\r\nimport { ResponsiveData } from '@/components/ResponsiveImage';\r\n\r\ninterface UseResponsiveImageProps {\r\n src: string | File | null;\r\n responsiveSizes?: number[];\r\n formats?: string[];\r\n enabled?: boolean;\r\n apiUrl?: string;\r\n}\r\n\r\n// Module-level cache to deduplicate requests\r\n// Key: stringified request params, Value: Promise<ResponsiveData>\r\nconst requestCache = new Map<string, Promise<ResponsiveData>>();\r\n\r\nexport const useResponsiveImage = ({\r\n src,\r\n responsiveSizes = [180, 640, 1024],\r\n formats = ['avif', 'webp', 'jpeg'],\r\n enabled = true,\r\n apiUrl,\r\n}: UseResponsiveImageProps) => {\r\n const [data, setData] = useState<ResponsiveData | null>(null);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n useEffect(() => {\r\n let isMounted = true;\r\n\r\n const generateResponsiveImages = async () => {\r\n if (!src || !enabled) {\r\n if (isMounted) {\r\n // Only reset if disabled or no src, but if we already have data we might want to keep it?\r\n // actually if distinct src change, reset. if just disabled, maybe do nothing?\r\n // For now, if disabled, we just don't start.\r\n if (!src) {\r\n setData(null);\r\n setLoading(false);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (isMounted) {\r\n setLoading(true);\r\n setError(null);\r\n }\r\n\r\n try {\r\n // Only cache string URLs (remote images)\r\n // File objects are harder to cache reliably and usually come from user input anyway\r\n if (typeof src === 'string') {\r\n // Check for Data URI\r\n if (src.startsWith('data:')) {\r\n if (isMounted) {\r\n setData({\r\n img: {\r\n src: src,\r\n width: 0, // Unknown dimensions without parsing\r\n height: 0,\r\n format: 'unknown'\r\n },\r\n sources: [] // No alternative sources for raw data URI\r\n });\r\n setLoading(false);\r\n }\r\n return;\r\n }\r\n\r\n const cacheKey = JSON.stringify({ src, sizes: responsiveSizes, formats, apiUrl });\r\n\r\n if (!requestCache.has(cacheKey)) {\r\n const requestPromise = (async () => {\r\n const formData = new FormData();\r\n formData.append('url', src);\r\n formData.append('sizes', JSON.stringify(responsiveSizes));\r\n formData.append('formats', JSON.stringify(formats));\r\n\r\n const serverUrl = apiUrl || import.meta.env.VITE_SERVER_IMAGE_API_URL || 'http://192.168.1.11:3333';\r\n const response = await fetch(`${serverUrl}/api/images/responsive`, {\r\n method: 'POST',\r\n body: formData,\r\n });\r\n\r\n if (!response.ok) {\r\n const txt = await response.text();\r\n // Remove from cache on error so it can be retried\r\n requestCache.delete(cacheKey);\r\n throw new Error(txt || 'Failed to generate responsive images');\r\n }\r\n\r\n return response.json();\r\n })();\r\n\r\n requestCache.set(cacheKey, requestPromise);\r\n }\r\n\r\n const result = await requestCache.get(cacheKey)!;\r\n if (isMounted) {\r\n setData(result);\r\n }\r\n } else {\r\n // Handle File objects (no caching)\r\n const formData = new FormData();\r\n formData.append('file', src);\r\n formData.append('sizes', JSON.stringify(responsiveSizes));\r\n formData.append('formats', JSON.stringify(formats));\r\n\r\n const serverUrl = apiUrl || import.meta.env.VITE_SERVER_IMAGE_API_URL || '';\r\n const response = await fetch(`${serverUrl}/api/images/responsive`, {\r\n method: 'POST',\r\n body: formData,\r\n });\r\n\r\n if (!response.ok) {\r\n const txt = await response.text();\r\n throw new Error(txt || 'Failed to generate responsive images');\r\n }\r\n\r\n const result = await response.json();\r\n if (isMounted) {\r\n setData(result);\r\n }\r\n }\r\n } catch (err: any) {\r\n console.error('Error generating responsive images:', err);\r\n if (isMounted) {\r\n setError(err.message);\r\n }\r\n } finally {\r\n if (isMounted) {\r\n setLoading(false);\r\n }\r\n }\r\n };\r\n\r\n generateResponsiveImages();\r\n\r\n return () => {\r\n isMounted = false;\r\n };\r\n }, [src, JSON.stringify(responsiveSizes), JSON.stringify(formats), enabled]);\r\n\r\n return { data, loading, error };\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useResponsiveImage } from '@/hooks/useResponsiveImage';\r\n\r\ninterface ResponsiveImageProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'src'> {\r\n src: string | File;\r\n sizes?: string;\r\n className?: string;\r\n imgClassName?: string;\r\n responsiveSizes?: number[];\r\n formats?: string[];\r\n alt: string;\r\n onDataLoaded?: (data: ResponsiveData) => void;\r\n rootMargin?: string;\r\n data?: ResponsiveData;\r\n apiUrl?: string;\r\n}\r\n\r\nexport interface ResponsiveData {\r\n img: {\r\n src: string;\r\n width: number;\r\n height: number;\r\n format: string;\r\n };\r\n sources?: {\r\n srcset: string;\r\n type: string;\r\n }[];\r\n}\r\n\r\nconst ResponsiveImage: React.FC<ResponsiveImageProps> = ({\r\n src,\r\n sizes = '(max-width: 1024px) 100vw, 50vw',\r\n className,\r\n imgClassName,\r\n responsiveSizes = [180, 640, 1024, 1280, 1600],\r\n formats = ['avif', 'webp'],\r\n alt,\r\n onDataLoaded,\r\n rootMargin = '800px',\r\n onLoad,\r\n onError,\r\n data: providedData,\r\n apiUrl,\r\n ...props\r\n}) => {\r\n // Lazy load logic\r\n const [isInView, setIsInView] = useState(props.loading === 'eager');\r\n const [imgLoaded, setImgLoaded] = useState(false);\r\n const ref = React.useRef<HTMLDivElement>(null);\r\n const imgRef = React.useRef<HTMLImageElement>(null);\r\n\r\n useEffect(() => {\r\n if (props.loading === 'eager' || providedData) {\r\n setIsInView(true);\r\n return;\r\n }\r\n\r\n const observer = new IntersectionObserver(([entry]) => {\r\n if (entry.isIntersecting) {\r\n setIsInView(true);\r\n observer.disconnect();\r\n }\r\n }, {\r\n rootMargin\r\n });\r\n\r\n if (ref.current) {\r\n observer.observe(ref.current);\r\n }\r\n\r\n return () => {\r\n observer.disconnect();\r\n };\r\n }, [props.loading, rootMargin, providedData]);\r\n\r\n const hookResult = useResponsiveImage({\r\n src: src as string | File,\r\n responsiveSizes,\r\n formats,\r\n enabled: isInView && !providedData,\r\n apiUrl: apiUrl\r\n });\r\n\r\n const data = providedData || hookResult.data;\r\n const loading = !providedData && hookResult.loading;\r\n const error = !providedData && hookResult.error;\r\n\r\n useEffect(() => {\r\n if (data && onDataLoaded) {\r\n onDataLoaded(data);\r\n }\r\n }, [data, onDataLoaded]);\r\n\r\n // Reset loaded state when src changes\r\n useEffect(() => {\r\n setImgLoaded(false);\r\n }, [src]);\r\n\r\n // Check if image is already loaded (from cache)\r\n useEffect(() => {\r\n if (imgRef.current?.complete) {\r\n setImgLoaded(true);\r\n }\r\n }, [data, imgLoaded]);\r\n\r\n // If we are enabled (isInView) but have no data and no error yet,\r\n // we are effectively in a \"pending load\" state.\r\n const isLoadingOrPending = loading || (isInView && !data && !error);\r\n\r\n if (!isInView || isLoadingOrPending) {\r\n // Use className for wrapper if provided, otherwise generic\r\n // We attach the ref here to detect when this placeholder comes into view\r\n return <div ref={ref} className={`animate-pulse bg-gray-200 w-full h-full ${className || ''}`} />;\r\n }\r\n\r\n if (error || !data) {\r\n // Fallback if generation failed\r\n if (typeof src === 'string') {\r\n return <img src={src} alt={alt} className={imgClassName || className} {...props} />;\r\n }\r\n return <div className=\"text-red-500 text-xs\">Failed to load image</div>;\r\n }\r\n\r\n return (\r\n <div className={`relative w-full h-full ${className || ''}`}>\r\n <picture>\r\n {(data.sources || []).map((source, index) => (\r\n <source key={index} srcSet={source.srcset} type={source.type} sizes={sizes} />\r\n ))}\r\n <img\r\n ref={imgRef}\r\n src={data.img.src}\r\n alt={alt}\r\n // Only apply width/height if they are known (> 0)\r\n // This fixes an issue where Data URIs (which return 0/0) render as invisible 0x0 images\r\n width={data.img.width > 0 ? data.img.width : undefined}\r\n height={data.img.height > 0 ? data.img.height : undefined}\r\n className={`${imgClassName || ''} transition-opacity duration-300 ${imgLoaded ? 'opacity-100' : 'opacity-0'}`}\r\n onLoad={(e) => {\r\n setImgLoaded(true);\r\n onLoad?.(e);\r\n }}\r\n onError={(e) => {\r\n setImgLoaded(true);\r\n onError?.(e);\r\n }}\r\n loading={props.loading || \"lazy\"}\r\n decoding=\"async\"\r\n {...props}\r\n />\r\n </picture>\r\n {!imgLoaded && (\r\n <div className=\"absolute inset-0 flex items-center justify-center bg-gray-100/50 z-10 pointer-events-none\">\r\n <div className=\"animate-spin rounded-full h-8 w-8 border-2 border-primary border-t-transparent\"></div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ResponsiveImage;\r\n","// This file is automatically generated. Do not edit it directly.\nimport { createClient } from '@supabase/supabase-js';\nimport type { Database } from './types';\n\nconst SUPABASE_URL = \"https://ytoadlpbdguriiccjnip.supabase.co\";\nconst SUPABASE_PUBLISHABLE_KEY = \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inl0b2FkbHBiZGd1cmlpY2NqbmlwIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTg5NjU5OTAsImV4cCI6MjA3NDU0MTk5MH0.mXt594NQ2QsJQ_F-HqsSlBsLQ5EUB4iFxXtPE7zyaX8\";\n\n// Import the supabase client like this:\n// import { supabase } from \"@/integrations/supabase/client\";\n\nexport const supabase = createClient<Database>(SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY, {\n auth: {\n storage: localStorage,\n persistSession: true,\n autoRefreshToken: true,\n }\n});","import { supabase as defaultSupabase } from \"@/integrations/supabase/client\";\r\nimport { UserProfile, PostMediaItem } from \"@/pages/Post/types\";\r\nimport { MediaType, MediaItem } from \"@/types\";\r\nimport { SupabaseClient } from \"@supabase/supabase-js\";\r\n\r\n// Request cache for deduplication\r\nconst requestCache = new Map<string, Promise<any>>();\r\n\r\nconst fetchWithDeduplication = async <T>(key: string, fetcher: () => Promise<T>): Promise<T> => {\r\n if (!requestCache.has(key)) {\r\n const promise = fetcher().catch((err) => {\r\n requestCache.delete(key);\r\n throw err;\r\n }).finally(() => {\r\n // Clear cache after a short delay to allow immediate re-renders to share data\r\n // but prevent stale data issues.\r\n setTimeout(() => requestCache.delete(key), 2500);\r\n });\r\n requestCache.set(key, promise);\r\n }\r\n return requestCache.get(key) as Promise<T>;\r\n};\r\n\r\nexport const fetchPostById = async (id: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`post-${id}`, async () => {\r\n const { data, error } = await supabase\r\n .from('posts')\r\n .select(`\r\n *,\r\n pictures (\r\n *\r\n )\r\n `)\r\n .eq('id', id)\r\n .maybeSingle();\r\n\r\n if (error) throw error;\r\n return data;\r\n });\r\n};\r\n\r\nexport const fetchPictureById = async (id: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`picture-${id}`, async () => {\r\n const { data, error } = await supabase\r\n .from('pictures')\r\n .select(`\r\n *,\r\n post:posts (\r\n *\r\n )\r\n `)\r\n .eq('id', id)\r\n .maybeSingle();\r\n\r\n if (error) throw error;\r\n return data;\r\n });\r\n};\r\n\r\nexport const fetchPageById = async (id: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`page-${id}`, async () => {\r\n const { data, error } = await supabase\r\n .from('pages')\r\n .select('*')\r\n .eq('id', id)\r\n .maybeSingle();\r\n\r\n if (error) throw error;\r\n return data;\r\n });\r\n};\r\n\r\nexport const fetchFullPost = async (postId: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`full-post-${postId}`, async () => {\r\n const { data, error } = await supabase\r\n .from('posts')\r\n .select(`*, pictures (*)`)\r\n .eq('id', postId)\r\n .single();\r\n\r\n if (error) throw error;\r\n return data;\r\n });\r\n};\r\n\r\nexport const fetchAuthorProfile = async (userId: string, client?: SupabaseClient): Promise<UserProfile | null> => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`profile-${userId}`, async () => {\r\n const { data, error } = await supabase\r\n .from('profiles')\r\n .select('user_id, avatar_url, display_name, username')\r\n .eq('user_id', userId)\r\n .single();\r\n\r\n if (error && error.code !== 'PGRST116') throw error;\r\n return data as UserProfile;\r\n });\r\n};\r\n\r\nexport const fetchVersions = async (mediaItem: PostMediaItem, userId?: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n const key = `versions-${mediaItem.id}-${userId || 'anon'}`;\r\n return fetchWithDeduplication(key, async () => {\r\n let query = supabase\r\n .from('pictures')\r\n .select('*')\r\n .or(`parent_id.eq.${mediaItem.parent_id || mediaItem.id},id.eq.${mediaItem.parent_id || mediaItem.id}`)\r\n .or('type.is.null,type.eq.supabase-image');\r\n\r\n if (!userId || userId !== mediaItem.user_id) {\r\n query = query.eq('visible', true);\r\n }\r\n\r\n const { data, error } = await query.order('created_at', { ascending: true });\r\n if (error) throw error;\r\n return data;\r\n });\r\n};\r\n\r\nexport const checkLikeStatus = async (userId: string, pictureId: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`like-${userId}-${pictureId}`, async () => {\r\n const { data, error } = await supabase\r\n .from('likes')\r\n .select('id')\r\n .eq('user_id', userId)\r\n .eq('picture_id', pictureId)\r\n .maybeSingle();\r\n\r\n if (error) throw error;\r\n return !!data;\r\n });\r\n};\r\n\r\nexport const toggleLike = async (userId: string, pictureId: string, isLiked: boolean, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n // Invalidate like status cache immediately\r\n const cacheKey = `like-${userId}-${pictureId}`;\r\n if (requestCache.has(cacheKey)) requestCache.delete(cacheKey);\r\n\r\n if (isLiked) {\r\n const { error } = await supabase\r\n .from('likes')\r\n .delete()\r\n .eq('user_id', userId)\r\n .eq('picture_id', pictureId);\r\n if (error) throw error;\r\n return false;\r\n } else {\r\n const { error } = await supabase\r\n .from('likes')\r\n .insert([{ user_id: userId, picture_id: pictureId }]);\r\n if (error) throw error;\r\n return true;\r\n }\r\n};\r\n\r\nexport const uploadFileToStorage = async (userId: string, file: File | Blob, fileName?: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n const name = fileName || `${userId}/${Date.now()}-${Math.random().toString(36).substring(7)}`;\r\n const { error } = await supabase.storage.from('pictures').upload(name, file);\r\n if (error) throw error;\r\n\r\n const { data: { publicUrl } } = supabase.storage.from('pictures').getPublicUrl(name);\r\n return publicUrl;\r\n};\r\n\r\nexport const createPicture = async (picture: Partial<PostMediaItem>, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n // Ensure type is a valid MediaType (string/enum compatibility)\r\n const dbPicture: any = { ...picture };\r\n\r\n const { data, error } = await supabase\r\n .from('pictures')\r\n .insert([dbPicture])\r\n .select()\r\n .single();\r\n\r\n if (error) throw error;\r\n return data;\r\n};\r\n\r\nexport const updatePostDetails = async (postId: string, updates: { title: string, description: string }, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n const { error } = await supabase\r\n .from('posts')\r\n .update(updates)\r\n .eq('id', postId);\r\n if (error) throw error;\r\n\r\n // Invalidate post cache\r\n const cacheKey = `post-${postId}`;\r\n if (requestCache.has(cacheKey)) requestCache.delete(cacheKey);\r\n const fullCacheKey = `full-post-${postId}`;\r\n if (requestCache.has(fullCacheKey)) requestCache.delete(fullCacheKey);\r\n};\r\n\r\nexport const unlinkPictures = async (ids: string[], client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n const { error } = await supabase\r\n .from('pictures')\r\n .update({ post_id: null, position: -1 } as any)\r\n .in('id', ids);\r\n if (error) throw error;\r\n};\r\n\r\nexport const upsertPictures = async (pictures: Partial<PostMediaItem>[], client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n const { error } = await supabase\r\n .from('pictures')\r\n .upsert(pictures as any, { onConflict: 'id' });\r\n if (error) throw error;\r\n};\r\n\r\nexport const getUserSettings = async (userId: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`settings-${userId}`, async () => {\r\n const { data, error } = await supabase\r\n .from('profiles')\r\n .select('settings')\r\n .eq('user_id', userId)\r\n .single();\r\n if (error) throw error;\r\n return (data?.settings as any) || {};\r\n });\r\n};\r\n\r\nexport const updateUserSettings = async (userId: string, settings: any, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n await supabase\r\n .from('profiles')\r\n .update({ settings })\r\n .eq('user_id', userId);\r\n\r\n // Invalidate settings cache\r\n const cacheKey = `settings-${userId}`;\r\n if (requestCache.has(cacheKey)) requestCache.delete(cacheKey);\r\n};\r\n\r\nexport const getUserOpenAIKey = async (userId: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`openai-${userId}`, async () => {\r\n const { data, error } = await supabase\r\n .from('user_secrets')\r\n .select('settings')\r\n .eq('user_id', userId)\r\n .maybeSingle();\r\n\r\n if (error) throw error;\r\n const settings = data?.settings as any;\r\n return settings?.api_keys?.openai_api_key;\r\n });\r\n}\r\n\r\nexport const addCollectionPictures = async (inserts: { collection_id: string, picture_id: string }[], client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n const { error } = await supabase\r\n .from('collection_pictures')\r\n .insert(inserts);\r\n if (error) throw error;\r\n};\r\n\r\nexport const updateStorageFile = async (path: string, blob: Blob, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n const { error } = await supabase.storage.from('pictures').update(path, blob, {\r\n cacheControl: '0',\r\n upsert: true\r\n });\r\n if (error) throw error;\r\n};\r\n\r\nexport const fetchSelectedVersions = async (rootIds: string[], client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n if (rootIds.length === 0) return [];\r\n\r\n // Sort ids to ensure consistent cache key\r\n const sortedIds = [...rootIds].sort();\r\n const key = `selected-versions-${sortedIds.join(',')}`;\r\n\r\n return fetchWithDeduplication(key, async () => {\r\n // safe query format\r\n const idsString = `(${rootIds.join(',')})`;\r\n const { data, error } = await supabase\r\n .from('pictures')\r\n .select('*')\r\n .eq('is_selected', true)\r\n .or(`parent_id.in.${idsString},id.in.${idsString}`);\r\n\r\n if (error) throw error;\r\n return data;\r\n });\r\n};\r\n\r\nexport const fetchRelatedVersions = async (rootIds: string[], client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n if (rootIds.length === 0) return [];\r\n\r\n const sortedIds = [...rootIds].sort();\r\n const key = `related-versions-${sortedIds.join(',')}`;\r\n\r\n return fetchWithDeduplication(key, async () => {\r\n const idsString = `(${rootIds.join(',')})`;\r\n const { data, error } = await supabase\r\n .from('pictures')\r\n .select('*')\r\n .or(`parent_id.in.${idsString},id.in.${idsString}`)\r\n .order('created_at', { ascending: true }); // Ensure deterministic order\r\n\r\n if (error) throw error;\r\n return data;\r\n });\r\n};\r\n\r\nexport const fetchUserRoles = async (userId: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`roles-${userId}`, async () => {\r\n const { data, error } = await supabase\r\n .from('user_roles')\r\n .select('role')\r\n .eq('user_id', userId);\r\n\r\n if (error) {\r\n console.error('Error fetching user roles:', error);\r\n return [];\r\n }\r\n return data.map(r => r.role);\r\n });\r\n};\r\n\r\nexport const fetchUserLikesForPictures = async (userId: string, pictureIds: string[], client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n if (pictureIds.length === 0) return [];\r\n\r\n // Create a deterministic cache key. Max length consideration might be needed for very large posts,\r\n // but for now simple join is fine or we can skip cache for very large sets.\r\n const sortedIds = [...pictureIds].sort();\r\n // Using a hash or truncated key might be safer for URL limits if this was GET, but internal map is fine.\r\n const key = `likes-batch-${userId}-${sortedIds.slice(0, 5).join(',')}-${sortedIds.length}`;\r\n\r\n return fetchWithDeduplication(key, async () => {\r\n const { data, error } = await supabase\r\n .from('likes')\r\n .select('picture_id')\r\n .eq('user_id', userId)\r\n .in('picture_id', pictureIds);\r\n\r\n if (error) throw error;\r\n // Return array of liked picture IDs\r\n return data.map(like => like.picture_id);\r\n });\r\n};\r\n\r\nexport interface FeedPost {\r\n id: string; // Post ID\r\n title: string;\r\n description: string | null;\r\n created_at: string;\r\n user_id: string;\r\n pictures: MediaItem[]; // All visible pictures\r\n cover: MediaItem; // The selected cover picture\r\n likes_count: number;\r\n comments_count: number;\r\n type: MediaType;\r\n author_profile?: UserProfile;\r\n}\r\n\r\nexport const fetchFeedPosts = async (\r\n source: 'home' | 'collection' | 'tag' | 'user' = 'home',\r\n sourceId?: string,\r\n isOrgContext?: boolean,\r\n orgSlug?: string,\r\n client?: SupabaseClient\r\n): Promise<FeedPost[]> => {\r\n // Forward to paginated version with defaults\r\n return fetchFeedPostsPaginated(source, sourceId, isOrgContext, orgSlug, 0, 30, client);\r\n};\r\n\r\nexport const fetchFeedPostsPaginated = async (\r\n source: 'home' | 'collection' | 'tag' | 'user' = 'home',\r\n sourceId?: string,\r\n isOrgContext?: boolean,\r\n orgSlug?: string,\r\n page: number = 0,\r\n pageSize: number = 30,\r\n client?: SupabaseClient\r\n): Promise<FeedPost[]> => {\r\n const supabase = client || defaultSupabase;\r\n const start = page * pageSize;\r\n const end = start + pageSize - 1;\r\n\r\n // 1. Fetch Posts\r\n let query = supabase\r\n .from('posts')\r\n .select(`\r\n *,\r\n pictures(\r\n id,\r\n image_url,\r\n thumbnail_url,\r\n type,\r\n meta,\r\n description,\r\n likes_count,\r\n visible,\r\n is_selected,\r\n position,\r\n parent_id,\r\n created_at,\r\n title\r\n )\r\n `)\r\n .order('created_at', { ascending: false })\r\n .range(start, end);\r\n\r\n // Filter out non-public posts (listed/private) for the home feed\r\n if (!sourceId && source === 'home') {\r\n query = query.or('settings.is.null,settings->>visibility.eq.public');\r\n }\r\n\r\n // Org context logic (placeholder from PhotoGrid)\r\n if (isOrgContext && orgSlug) {\r\n /*\r\n const { data: org } = await supabase\r\n .from('organizations')\r\n .select('id')\r\n .eq('slug', orgSlug)\r\n .single();\r\n */\r\n }\r\n\r\n const { data: postsData, error: postsError } = await query;\r\n if (postsError) throw postsError;\r\n\r\n // 2. Fetch Pages (if applicable)\r\n // Only fetch pages for home/user/org sources to keep it simple for now\r\n let pagesData: any[] = [];\r\n if (source === 'home' || source === 'user' || source === 'collection') {\r\n let pageQuery = supabase\r\n .from('pages')\r\n .select('*')\r\n .order('created_at', { ascending: false })\r\n .range(start, end);\r\n\r\n if (source === 'user' && sourceId) {\r\n pageQuery = pageQuery.eq('owner', sourceId);\r\n // If viewing someone else's profile, usually only public pages\r\n // But let's assume if sourceId is provided we might want to filter visibility\r\n // For now, let's fetch all public ones if not owner? \r\n // Logic in PageManager was: if (!isOwnProfile) eq('is_public', true).eq('visible', true)\r\n // We'll mimic strict visibility for feed:\r\n pageQuery = pageQuery.eq('is_public', true).eq('visible', true);\r\n } else if (source === 'home') {\r\n pageQuery = pageQuery.eq('is_public', true).eq('visible', true);\r\n }\r\n\r\n const { data: pages, error: pagesError } = await pageQuery;\r\n\r\n if (!pagesError && pages) {\r\n pagesData = pages;\r\n }\r\n console.log('pagesData : source', source, pagesData);\r\n } else {\r\n console.log('no pages for source', source);\r\n }\r\n\r\n // 2.5 Extract Page Images\r\n const pageImageIds: string[] = [];\r\n const pageIdToImageId = new Map<string, string>();\r\n pagesData.forEach(page => {\r\n let content = page.content;\r\n if (typeof content === 'string') {\r\n try {\r\n content = JSON.parse(content);\r\n } catch (e) {\r\n console.error(`[db] Failed to parse content for page ${page.id}`, e);\r\n return;\r\n }\r\n }\r\n\r\n // Handle new structure: { pages: { [pageId]: { containers: [] } } }\r\n let containers = content?.containers;\r\n\r\n if (!containers && content?.pages) {\r\n // Find the first page in the dictionary\r\n const firstPageKey = Object.keys(content.pages)[0];\r\n if (firstPageKey && content.pages[firstPageKey]?.containers) {\r\n containers = content.pages[firstPageKey].containers;\r\n // console.log(`[db] Found containers in nested page ${firstPageKey}`);\r\n }\r\n }\r\n\r\n if (!containers) {\r\n\r\n return;\r\n }\r\n\r\n // Find first photo-card\r\n for (const container of containers) {\r\n if (container.widgets) {\r\n const photoWidget = container.widgets.find((w: any) => w.widgetId === 'photo-card' && w.props?.pictureId);\r\n if (photoWidget) {\r\n const picId = photoWidget.props.pictureId;\r\n\r\n pageImageIds.push(picId);\r\n pageIdToImageId.set(page.id, picId);\r\n break; // Found first image for this page\r\n }\r\n }\r\n }\r\n });\r\n\r\n const pageImages = new Map<string, string>();\r\n if (pageImageIds.length > 0) {\r\n const { data: pics } = await supabase\r\n .from('pictures')\r\n .select('id, image_url')\r\n .in('id', pageImageIds);\r\n\r\n pics?.forEach(p => pageImages.set(p.id, p.image_url));\r\n }\r\n\r\n // 3. Process Posts (existing logic)\r\n const rootIds = new Set<string>();\r\n const postCandidates = new Map<string, any>();\r\n\r\n (postsData as any[] || []).forEach((post) => {\r\n const pics = post.pictures as any[] || [];\r\n const validPics = pics.filter(p => p.visible !== false);\r\n validPics.sort((a, b) => (a.position || 0) - (b.position || 0));\r\n\r\n const cover = validPics[0];\r\n if (cover) {\r\n postCandidates.set(post.id, cover);\r\n rootIds.add(cover.parent_id || cover.id);\r\n }\r\n });\r\n\r\n // 4. Fetch overrides\r\n let selectedVersions: any[] = [];\r\n if (rootIds.size > 0) {\r\n selectedVersions = await fetchSelectedVersions(Array.from(rootIds), supabase); // Pass supabase client\r\n }\r\n\r\n // 5. Transform Posts\r\n const transformedPosts: FeedPost[] = (postsData as any[] || [])\r\n .map((post) => {\r\n let coverPic = postCandidates.get(post.id);\r\n\r\n // Handle Link Posts (no pictures but has link settings)\r\n if (!coverPic) {\r\n const settings = (post.settings as any) || {};\r\n if (settings && settings.link) {\r\n // Create virtual picture for link post\r\n coverPic = {\r\n id: post.id,\r\n picture_id: post.id,\r\n title: post.title,\r\n description: post.description,\r\n image_url: settings.image_url || 'https://picsum.photos/seed/' + post.id + '/600/400', // Fallback or use settings image\r\n thumbnail_url: settings.thumbnail_url || null,\r\n type: 'page-external',\r\n meta: { url: settings.link },\r\n created_at: post.created_at,\r\n user_id: post.user_id,\r\n likes_count: 0,\r\n comments: [{ count: 0 }],\r\n visible: true,\r\n is_selected: false,\r\n position: 0\r\n };\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n const rootId = coverPic.parent_id || coverPic.id;\r\n const selected = selectedVersions?.find((v: any) =>\r\n (v.id === rootId || v.parent_id === rootId) && v.is_selected\r\n );\r\n\r\n if (selected && selected.id !== coverPic.id) {\r\n coverPic = selected;\r\n }\r\n\r\n const pics = post.pictures as any[] || [];\r\n const validPics = pics.filter(p => p.visible !== false)\r\n .sort((a, b) => (a.position || 0) - (b.position || 0));\r\n\r\n return {\r\n id: post.id,\r\n title: post.title,\r\n description: post.description,\r\n created_at: post.created_at,\r\n user_id: post.user_id,\r\n pictures: validPics,\r\n cover: coverPic,\r\n likes_count: validPics.reduce((sum, p) => sum + (p.likes_count || 0), 0),\r\n comments_count: 0,\r\n type: coverPic.type as MediaType,\r\n };\r\n })\r\n .filter((item) => item !== null) as FeedPost[];\r\n\r\n // 6. Transform Pages\r\n // We treat Pages as FeedPosts with a single \"virtual\" picture of type 'page-intern'\r\n const transformedPages: FeedPost[] = pagesData.map(page => {\r\n // Resolve mage\r\n let displayImage = \"https://picsum.photos/640\"; // Fallback\r\n const requiredPicId = pageIdToImageId.get(page.id);\r\n if (requiredPicId) {\r\n const foundUrl = pageImages.get(requiredPicId);\r\n if (foundUrl) displayImage = foundUrl;\r\n }\r\n\r\n\r\n // Virtual picture for the page\r\n const virtualPic: any = {\r\n id: page.id, // Use page ID as picture ID in grid context? Or make a virtual one? \r\n // Using page ID is risky if IDs collide, but UUIDs shouldn't.\r\n image_url: displayImage,\r\n thumbnail_url: null,\r\n type: 'page-intern',\r\n meta: { slug: page.slug }, // Store slug in meta for easy access\r\n description: null,\r\n likes_count: 0,\r\n visible: true,\r\n is_selected: false,\r\n position: 0,\r\n created_at: page.created_at,\r\n title: page.title\r\n };\r\n\r\n return {\r\n id: page.id,\r\n title: page.title,\r\n description: null, // Could parse content?\r\n created_at: page.created_at,\r\n user_id: page.owner,\r\n pictures: [virtualPic],\r\n cover: virtualPic,\r\n likes_count: 0,\r\n comments_count: 0,\r\n type: 'page-intern' as MediaType,\r\n };\r\n });\r\n\r\n // 7. Merge and Sort\r\n const allItems = [...transformedPosts, ...transformedPages];\r\n allItems.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());\r\n\r\n return allItems;\r\n};\r\n\r\n// Map FeedPost[] back to MediaItemType[] for backward compatibility w/ PhotoGrid\r\nexport const mapFeedPostsToMediaItems = (posts: FeedPost[], sortBy: 'latest' | 'top' = 'latest'): any[] => {\r\n return posts.map(post => {\r\n let cover = post.cover;\r\n\r\n // Select cover based on sort mode\r\n if (post.pictures && post.pictures.length > 0) {\r\n const validPics = post.pictures.filter((p: any) => p.visible !== false);\r\n\r\n if (validPics.length > 0) {\r\n if (sortBy === 'latest') {\r\n // For \"Latest\" mode: Show the newest picture (by created_at)\r\n cover = validPics.reduce((newest, current) => {\r\n const newestDate = new Date(newest.created_at || post.created_at).getTime();\r\n const currentDate = new Date(current.created_at || post.created_at).getTime();\r\n return currentDate > newestDate ? current : newest;\r\n });\r\n } else {\r\n // For \"Top\" or default: Use first by position (existing behavior)\r\n const sortedByPosition = [...validPics].sort((a, b) => (a.position || 0) - (b.position || 0));\r\n cover = sortedByPosition[0];\r\n }\r\n } else {\r\n cover = post.pictures[0]; // Fallback to any picture\r\n }\r\n }\r\n\r\n if (!cover) return null;\r\n return {\r\n id: post.id,\r\n picture_id: cover.id,\r\n title: post.title,\r\n description: post.description,\r\n image_url: cover.image_url,\r\n thumbnail_url: cover.thumbnail_url,\r\n type: cover.type as MediaType,\r\n meta: cover.meta,\r\n created_at: post.created_at,\r\n user_id: post.user_id,\r\n likes_count: post.likes_count,\r\n comments: [{ count: post.comments_count }],\r\n responsive: (cover as any).responsive,\r\n job: (cover as any).job,\r\n // author_profile must be populated externally\r\n };\r\n }).filter(item => item !== null);\r\n};\r\n\r\n// Augment posts if they come from API/Hydration (missing cover/author_profile)\r\nexport const augmentFeedPosts = (posts: any[]): FeedPost[] => {\r\n return posts.map(p => {\r\n // Check if we need to augment (heuristic: missing cover)\r\n if (!p.cover) {\r\n const pics = p.pictures || [];\r\n const validPics = pics.filter((pic: any) => pic.visible !== false)\r\n .sort((a: any, b: any) => (a.position || 0) - (b.position || 0));\r\n\r\n return {\r\n ...p,\r\n cover: validPics[0] || pics[0], // fallback to first if none visible?\r\n author_profile: p.author ? {\r\n user_id: p.author.user_id,\r\n username: p.author.username,\r\n display_name: p.author.display_name,\r\n avatar_url: p.author.avatar_url\r\n } : undefined\r\n };\r\n }\r\n return p;\r\n });\r\n};\r\n","// packages/react/compose-refs/src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\nfunction composeRefs(...refs) {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\nfunction useComposedRefs(...refs) {\n return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n composeRefs,\n useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\nvar REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nvar use = React[\" use \".trim().toString()];\nfunction isPromiseLike(value) {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\nfunction isLazyComponent(element) {\n return element != null && typeof element === \"object\" && \"$$typeof\" in element && element.$$typeof === REACT_LAZY_TYPE && \"_payload\" in element && isPromiseLike(element._payload);\n}\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift();\n }\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n const conflicts = conflictingClassGroups[classGroupId] || [];\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n }\n return conflicts;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[0];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart;\n }\n if (classPartObject.validators.length === 0) {\n return undefined;\n }\n const classRest = classParts.join(CLASS_PART_SEPARATOR);\n return classPartObject.validators.find(({\n validator\n }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property;\n }\n }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n prefix\n } = config;\n const classMap = {\n nextPart: new Map(),\n validators: []\n };\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme);\n });\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n classGroup.forEach(classDefinition => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n return;\n }\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId\n });\n return;\n }\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n });\n });\n};\nconst getPart = (classPartObject, path) => {\n let currentClassPartObject = classPartObject;\n path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: []\n });\n }\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n });\n return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\nconst getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {\n if (!prefix) {\n return classGroupEntries;\n }\n return classGroupEntries.map(([classGroupId, classGroup]) => {\n const prefixedClassGroup = classGroup.map(classDefinition => {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition;\n }\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));\n }\n return classDefinition;\n });\n return [classGroupId, prefixedClassGroup];\n });\n};\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = new Map();\n let previousCache = new Map();\n const update = (key, value) => {\n cache.set(key, value);\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = new Map();\n }\n };\n return {\n get(key) {\n let value = cache.get(key);\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value);\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst createParseClassName = config => {\n const {\n separator,\n experimentalParseClassName\n } = config;\n const isSeparatorSingleCharacter = separator.length === 1;\n const firstSeparatorCharacter = separator[0];\n const separatorLength = separator.length;\n // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n const parseClassName = className => {\n const modifiers = [];\n let bracketDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index];\n if (bracketDepth === 0) {\n if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + separatorLength;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') {\n bracketDepth++;\n } else if (currentCharacter === ']') {\n bracketDepth--;\n }\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);\n const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n };\n };\n if (experimentalParseClassName) {\n return className => experimentalParseClassName({\n className,\n parseClassName\n });\n }\n return parseClassName;\n};\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst sortModifiers = modifiers => {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n const sortedModifiers = [];\n let unsortedModifiers = [];\n modifiers.forEach(modifier => {\n const isArbitraryVariant = modifier[0] === '[';\n if (isArbitraryVariant) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n unsortedModifiers = [];\n } else {\n unsortedModifiers.push(modifier);\n }\n });\n sortedModifiers.push(...unsortedModifiers.sort());\n return sortedModifiers;\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition);\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n const variantModifier = sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < arguments.length) {\n if (argument = arguments[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n}\nconst toValue = mix => {\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall = initTailwindMerge;\n function initTailwindMerge(classList) {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n }\n function tailwindMerge(classList) {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n }\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments));\n };\n}\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || [];\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly);\nconst isNumber = value => Boolean(value) && !Number.isNaN(Number(value));\nconst isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber);\nconst isInteger = value => Boolean(value) && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);\nconst isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever);\nconst imageLabels = /*#__PURE__*/new Set(['image', 'url']);\nconst isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow);\nconst isAny = () => true;\nconst getIsArbitraryValue = (value, label, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return typeof label === 'string' ? result[1] === label : label.has(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isInteger,\n isLength,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n const colors = fromTheme('colors');\n const spacing = fromTheme('spacing');\n const blur = fromTheme('blur');\n const brightness = fromTheme('brightness');\n const borderColor = fromTheme('borderColor');\n const borderRadius = fromTheme('borderRadius');\n const borderSpacing = fromTheme('borderSpacing');\n const borderWidth = fromTheme('borderWidth');\n const contrast = fromTheme('contrast');\n const grayscale = fromTheme('grayscale');\n const hueRotate = fromTheme('hueRotate');\n const invert = fromTheme('invert');\n const gap = fromTheme('gap');\n const gradientColorStops = fromTheme('gradientColorStops');\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions');\n const inset = fromTheme('inset');\n const margin = fromTheme('margin');\n const opacity = fromTheme('opacity');\n const padding = fromTheme('padding');\n const saturate = fromTheme('saturate');\n const scale = fromTheme('scale');\n const sepia = fromTheme('sepia');\n const skew = fromTheme('skew');\n const space = fromTheme('space');\n const translate = fromTheme('translate');\n const getOverscroll = () => ['auto', 'contain', 'none'];\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing];\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength];\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue];\n const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'];\n const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue];\n const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];\n return {\n cacheSize: 500,\n separator: ':',\n theme: {\n colors: [isAny],\n spacing: [isLength, isArbitraryLength],\n blur: ['none', '', isTshirtSize, isArbitraryValue],\n brightness: getNumberAndArbitrary(),\n borderColor: [colors],\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n borderSpacing: getSpacingWithArbitrary(),\n borderWidth: getLengthWithEmptyAndArbitrary(),\n contrast: getNumberAndArbitrary(),\n grayscale: getZeroAndEmpty(),\n hueRotate: getNumberAndArbitrary(),\n invert: getZeroAndEmpty(),\n gap: getSpacingWithArbitrary(),\n gradientColorStops: [colors],\n gradientColorStopPositions: [isPercent, isArbitraryLength],\n inset: getSpacingWithAutoAndArbitrary(),\n margin: getSpacingWithAutoAndArbitrary(),\n opacity: getNumberAndArbitrary(),\n padding: getSpacingWithArbitrary(),\n saturate: getNumberAndArbitrary(),\n scale: getNumberAndArbitrary(),\n sepia: getZeroAndEmpty(),\n skew: getNumberAndArbitrary(),\n space: getSpacingWithArbitrary(),\n translate: getSpacingWithArbitrary()\n },\n classGroups: {\n // Layout\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', 'video', isArbitraryValue]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isTshirtSize]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': getBreaks()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': getBreaks()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: [...getPositions(), isArbitraryValue]\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: getOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': getOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': getOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: getOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': getOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': getOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: [inset]\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': [inset]\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': [inset]\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: [inset]\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: [inset]\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: [inset]\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: [inset]\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: [inset]\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: [inset]\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: ['auto', isInteger, isArbitraryValue]\n }],\n // Flexbox and Grid\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: getSpacingWithAutoAndArbitrary()\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['wrap', 'wrap-reverse', 'nowrap']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: getZeroAndEmpty()\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: getZeroAndEmpty()\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: ['first', 'last', 'none', isInteger, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': [isAny]\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: ['auto', {\n span: ['full', isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': [isAny]\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: ['auto', {\n span: [isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: [gap]\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': [gap]\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': [gap]\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: ['normal', ...getAlign()]\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': ['start', 'end', 'center', 'stretch']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...getAlign(), 'baseline']\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': [...getAlign(), 'baseline']\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: [padding]\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: [padding]\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: [padding]\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: [padding]\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: [padding]\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: [padding]\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: [padding]\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: [padding]\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: [padding]\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: [margin]\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: [margin]\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: [margin]\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: [margin]\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: [margin]\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: [margin]\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: [margin]\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: [margin]\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: [margin]\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x': [{\n 'space-x': [space]\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y': [{\n 'space-y': [space]\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y-reverse': ['space-y-reverse'],\n // Sizing\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit']\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', {\n screen: [isTshirtSize]\n }, isTshirtSize]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Size\n * @see https://tailwindcss.com/docs/size\n */\n size: [{\n size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']\n }],\n // Typography\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', isTshirtSize, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isAny]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': ['none', isNumber, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryValue]\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['none', 'disc', 'decimal', isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: [colors]\n }],\n /**\n * Placeholder Opacity\n * @see https://tailwindcss.com/docs/placeholder-opacity\n */\n 'placeholder-opacity': [{\n 'placeholder-opacity': [opacity]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: [colors]\n }],\n /**\n * Text Opacity\n * @see https://tailwindcss.com/docs/text-opacity\n */\n 'text-opacity': [{\n 'text-opacity': [opacity]\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...getLineStyles(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: ['auto', 'from-font', isLength, isArbitraryLength]\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': ['auto', isLength, isArbitraryValue]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: [colors]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: getSpacingWithArbitrary()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryValue]\n }],\n // Backgrounds\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Opacity\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/background-opacity\n */\n 'bg-opacity': [{\n 'bg-opacity': [opacity]\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: [...getPositions(), isArbitraryPosition]\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: ['no-repeat', {\n repeat: ['', 'x', 'y', 'round', 'space']\n }]\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: ['auto', 'cover', 'contain', isArbitrarySize]\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: [colors]\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: [gradientColorStops]\n }],\n // Borders\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: [borderRadius]\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': [borderRadius]\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': [borderRadius]\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': [borderRadius]\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': [borderRadius]\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': [borderRadius]\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': [borderRadius]\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': [borderRadius]\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': [borderRadius]\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': [borderRadius]\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': [borderRadius]\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': [borderRadius]\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': [borderRadius]\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': [borderRadius]\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': [borderRadius]\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: [borderWidth]\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': [borderWidth]\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': [borderWidth]\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': [borderWidth]\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': [borderWidth]\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': [borderWidth]\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': [borderWidth]\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': [borderWidth]\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': [borderWidth]\n }],\n /**\n * Border Opacity\n * @see https://tailwindcss.com/docs/border-opacity\n */\n 'border-opacity': [{\n 'border-opacity': [opacity]\n }],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...getLineStyles(), 'hidden']\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x': [{\n 'divide-x': [borderWidth]\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y': [{\n 'divide-y': [borderWidth]\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Divide Opacity\n * @see https://tailwindcss.com/docs/divide-opacity\n */\n 'divide-opacity': [{\n 'divide-opacity': [opacity]\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/divide-style\n */\n 'divide-style': [{\n divide: getLineStyles()\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: [borderColor]\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': [borderColor]\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': [borderColor]\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': [borderColor]\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': [borderColor]\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': [borderColor]\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': [borderColor]\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': [borderColor]\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': [borderColor]\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: [borderColor]\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: ['', ...getLineStyles()]\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isLength, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: [isLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: [colors]\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w': [{\n ring: getLengthWithEmptyAndArbitrary()\n }],\n /**\n * Ring Width Inset\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/ring-color\n */\n 'ring-color': [{\n ring: [colors]\n }],\n /**\n * Ring Opacity\n * @see https://tailwindcss.com/docs/ring-opacity\n */\n 'ring-opacity': [{\n 'ring-opacity': [opacity]\n }],\n /**\n * Ring Offset Width\n * @see https://tailwindcss.com/docs/ring-offset-width\n */\n 'ring-offset-w': [{\n 'ring-offset': [isLength, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://tailwindcss.com/docs/ring-offset-color\n */\n 'ring-offset-color': [{\n 'ring-offset': [colors]\n }],\n // Effects\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow-color\n */\n 'shadow-color': [{\n shadow: [isAny]\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [opacity]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': getBlendModes()\n }],\n // Filters\n /**\n * Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: ['', 'none']\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: [blur]\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [brightness]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [contrast]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: [grayscale]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [hueRotate]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: [invert]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [saturate]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: [sepia]\n }],\n /**\n * Backdrop Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': ['', 'none']\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': [blur]\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [brightness]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [contrast]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': [grayscale]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [hueRotate]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': [invert]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [opacity]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [saturate]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': [sepia]\n }],\n // Tables\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': [borderSpacing]\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': [borderSpacing]\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': [borderSpacing]\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // Transitions and Animation\n /**\n * Tranisition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: getNumberAndArbitrary()\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: getNumberAndArbitrary()\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]\n }],\n // Transforms\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: ['', 'gpu', 'none']\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: [scale]\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': [scale]\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': [scale]\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: [isInteger, isArbitraryValue]\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': [translate]\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': [translate]\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': [skew]\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': [skew]\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]\n }],\n // Interactivity\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: ['auto', colors]\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue]\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: [colors]\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['none', 'auto']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', 'y', 'x', '']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]\n }],\n // SVG\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: [colors, 'none']\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: [colors, 'none']\n }],\n // Accessibility\n /**\n * Screen Readers\n * @see https://tailwindcss.com/docs/screen-readers\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n }\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n separator,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'separator', separator);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n for (const configKey in override) {\n overrideConfigProperties(baseConfig[configKey], override[configKey]);\n }\n for (const key in extend) {\n mergeConfigProperties(baseConfig[key], extend[key]);\n }\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = (baseObject[key] || []).concat(mergeValue);\n }\n }\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return <Comp className={cn(buttonVariants({ variant, size, className }))} ref={ref} {...props} />;\n },\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import { createContext, useContext, useEffect, useState } from 'react';\nimport { User, Session } from '@supabase/supabase-js';\nimport { supabase } from '@/integrations/supabase/client';\nimport { useToast } from '@/hooks/use-toast';\nimport * as db from '@/pages/Post/db';\n\ninterface AuthContextType {\n user: User | null;\n session: Session | null;\n roles: string[];\n loading: boolean;\n signUp: (email: string, password: string, username: string, displayName: string) => Promise<{ data: any; error: any }>;\n signIn: (email: string, password: string) => Promise<{ error: any }>;\n signInWithGithub: () => Promise<{ error: any }>;\n signInWithGoogle: () => Promise<{ error: any }>;\n signOut: () => Promise<void>;\n}\n\nconst AuthContext = createContext<AuthContextType | undefined>(undefined);\n\nexport const AuthProvider = ({ children }: { children: React.ReactNode }) => {\n const [user, setUser] = useState<User | null>(null);\n const [session, setSession] = useState<Session | null>(null);\n const [roles, setRoles] = useState<string[]>([]);\n const [loading, setLoading] = useState(true);\n const { toast } = useToast();\n\n useEffect(() => {\n setLoading(true);\n supabase.auth.getSession().then(({ data: { session } }) => {\n setSession(session);\n setUser(session?.user ?? null);\n setLoading(false);\n });\n\n const { data: { subscription } } = supabase.auth.onAuthStateChange(\n (_event, session) => {\n setSession(session);\n setUser(session?.user ?? null);\n }\n );\n\n return () => subscription.unsubscribe();\n }, []);\n\n useEffect(() => {\n let mounted = true;\n\n const loadRoles = async () => {\n if (user) {\n try {\n const roles = await db.fetchUserRoles(user.id);\n if (mounted) setRoles(roles);\n } catch (error) {\n console.error('Error fetching user roles:', error);\n if (mounted) setRoles([]);\n }\n } else {\n if (mounted) setRoles([]);\n }\n };\n\n loadRoles();\n\n return () => {\n mounted = false;\n };\n }, [user]);\n\n const signUp = async (email: string, password: string, username: string, displayName: string) => {\n const redirectUrl = `${window.location.origin}/`;\n\n const { data, error } = await supabase.auth.signUp({\n email,\n password,\n options: {\n emailRedirectTo: redirectUrl,\n data: {\n username,\n display_name: displayName\n }\n }\n });\n\n if (error) {\n toast({\n title: \"Sign up failed\",\n description: error.message,\n variant: \"destructive\",\n });\n } else {\n toast({\n title: \"Check your email\",\n description: \"Please check your email to confirm your account.\",\n });\n }\n\n return { data, error };\n };\n\n const signIn = async (email: string, password: string) => {\n const { error } = await supabase.auth.signInWithPassword({\n email,\n password,\n });\n\n if (error) {\n toast({\n title: \"Sign in failed\",\n description: error.message,\n variant: \"destructive\",\n });\n }\n\n return { error };\n };\n\n const signInWithGithub = async () => {\n const { error } = await supabase.auth.signInWithOAuth({\n provider: 'github',\n options: {\n redirectTo: `${window.location.origin}/`\n }\n });\n\n if (error) {\n toast({\n title: \"Sign in failed\",\n description: error.message,\n variant: \"destructive\",\n });\n }\n\n return { error };\n };\n\n const signInWithGoogle = async () => {\n const redirectTo = `${window.location.origin}/`;\n const { error } = await supabase.auth.signInWithOAuth({\n provider: 'google',\n options: {\n redirectTo\n }\n });\n\n if (error) {\n toast({\n title: \"Sign in failed\",\n description: error.message,\n variant: \"destructive\",\n });\n }\n\n return { error };\n };\n\n const signOut = async () => {\n const { error } = await supabase.auth.signOut();\n\n debugger\n\n if (error) {\n toast({\n title: \"Sign out failed\",\n description: error.message,\n variant: \"destructive\",\n });\n return;\n }\n\n setUser(null);\n setSession(null);\n setRoles([]);\n };\n\n return (\n <AuthContext.Provider value={{\n user,\n session,\n roles,\n loading,\n signUp,\n signIn,\n signInWithGithub,\n signInWithGoogle,\n signOut,\n }}>\n {children}\n </AuthContext.Provider>\n );\n};\n\nexport const useAuth = () => {\n const context = useContext(AuthContext);\n if (context === undefined) {\n throw new Error('useAuth must be used within an AuthProvider');\n }\n return context;\n};","/**\n * marked v16.4.2 - a markdown parser\n * Copyright (c) 2018-2025, MarkedJS. (MIT License)\n * Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var T=L();function G(l){T=l}var E={exec:()=>null};function d(l,e=\"\"){let t=typeof l==\"string\"?l:l.source,n={replace:(r,i)=>{let s=typeof i==\"string\"?i:i.source;return s=s.replace(m.caret,\"$1\"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var be=(()=>{try{return!!new RegExp(\"(?<=1)(?<!1)\")}catch{return!1}})(),m={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,listReplaceTabs:/^\\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] /,listReplaceTask:/^\\[[ xX]\\] +/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/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,unescapeTest:/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}#`),htmlBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}<(?:[a-z].*>|!--)`,\"i\")},Re=/^(?:[ \\t]*(?:\\n|$))+/,Te=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,Oe=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,I=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,we=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,F=/(?:[*+-]|\\d{1,9}[.)])/,ie=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,oe=d(ie).replace(/bull/g,F).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(),ye=d(ie).replace(/bull/g,F).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(),j=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,Pe=/^[^\\n]+/,Q=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,Se=d(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",Q).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),$e=d(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,F).getRegex(),v=\"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\",U=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,_e=d(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",U).replace(\"tag\",v).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),ae=d(j).replace(\"hr\",I).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[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),Le=d(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",ae).getRegex(),K={blockquote:Le,code:Te,def:Se,fences:Oe,heading:we,hr:I,html:_e,lheading:oe,list:$e,newline:Re,paragraph:ae,table:E,text:Pe},re=d(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),Me={...K,lheading:ye,table:re,paragraph:d(j).replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",re).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex()},ze={...K,html:d(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",U).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:E,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:d(j).replace(\"hr\",I).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",oe).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Ae=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,Ee=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,le=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ie=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,D=/[\\p{P}\\p{S}]/u,W=/[\\s\\p{P}\\p{S}]/u,ue=/[^\\s\\p{P}\\p{S}]/u,Ce=d(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,W).getRegex(),pe=/(?!~)[\\p{P}\\p{S}]/u,Be=/(?!~)[\\s\\p{P}\\p{S}]/u,qe=/(?:[^\\s\\p{P}\\p{S}]|~)/u,ve=d(/link|precode-code|html/,\"g\").replace(\"link\",/\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/).replace(\"precode-\",be?\"(?<!`)()\":\"(^^|[^`])\").replace(\"code\",/(?<b>`+)[^`]+\\k<b>(?!`)/).replace(\"html\",/<(?! )[^<>]*?>/).getRegex(),ce=/^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/,De=d(ce,\"u\").replace(/punct/g,D).getRegex(),He=d(ce,\"u\").replace(/punct/g,pe).getRegex(),he=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",Ze=d(he,\"gu\").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Ge=d(he,\"gu\").replace(/notPunctSpace/g,qe).replace(/punctSpace/g,Be).replace(/punct/g,pe).getRegex(),Ne=d(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Fe=d(/\\\\(punct)/,\"gu\").replace(/punct/g,D).getRegex(),je=d(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Qe=d(U).replace(\"(?:-->|$)\",\"-->\").getRegex(),Ue=d(\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\").replace(\"comment\",Qe).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),q=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+[^`]*?`+(?!`)|[^\\[\\]\\\\`])*?/,Ke=d(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\",q).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),de=d(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",q).replace(\"ref\",Q).getRegex(),ke=d(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",Q).getRegex(),We=d(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",de).replace(\"nolink\",ke).getRegex(),se=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,X={_backpedal:E,anyPunctuation:Fe,autolink:je,blockSkip:ve,br:le,code:Ee,del:E,emStrongLDelim:De,emStrongRDelimAst:Ze,emStrongRDelimUnd:Ne,escape:Ae,link:Ke,nolink:ke,punctuation:Ce,reflink:de,reflinkSearch:We,tag:Ue,text:Ie,url:E},Xe={...X,link:d(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",q).getRegex(),reflink:d(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",q).getRegex()},N={...X,emStrongRDelimAst:Ge,emStrongLDelim:He,url:d(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/).replace(\"protocol\",se).replace(\"email\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:d(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/).replace(\"protocol\",se).getRegex()},Je={...N,br:d(le).replace(\"{2,}\",\"*\").getRegex(),text:d(N.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},C={normal:K,gfm:Me,pedantic:ze},M={normal:X,gfm:N,breaks:Je,pedantic:Xe};var Ve={\"&\":\"&\",\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\"},ge=l=>Ve[l];function w(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,ge)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,ge);return l}function J(l){try{l=encodeURI(l).replace(m.percentDecode,\"%\")}catch{return null}return l}function V(l,e){let t=l.replace(m.findPipe,(i,s,a)=>{let o=!1,p=s;for(;--p>=0&&a[p]===\"\\\\\";)o=!o;return o?\"|\":\" |\"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(\"\");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,\"|\");return n}function z(l,e,t){let n=l.length;if(n===0)return\"\";let r=0;for(;r<n;){let i=l.charAt(n-r-1);if(i===e&&!t)r++;else if(i!==e&&t)r++;else break}return l.slice(0,n-r)}function fe(l,e){if(l.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<l.length;n++)if(l[n]===\"\\\\\")n++;else if(l[n]===e[0])t++;else if(l[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function me(l,e,t,n,r){let i=e.href,s=e.title||null,a=l[1].replace(r.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let o={type:l[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:i,title:s,text:a,tokens:n.inlineTokens(a)};return n.state.inLink=!1,o}function Ye(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`\n`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[a]=s;return a.length>=r.length?i.slice(r.length):i}).join(`\n`)}var y=class{options;rules;lexer;constructor(e){this.options=e||T}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:z(n,`\n`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=Ye(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=z(n,\"#\");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:z(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=z(t[0],`\n`).split(`\n`),r=\"\",i=\"\",s=[];for(;n.length>0;){let a=!1,o=[],p;for(p=0;p<n.length;p++)if(this.rules.other.blockquoteStart.test(n[p]))o.push(n[p]),a=!0;else if(!a)o.push(n[p]);else break;n=n.slice(p);let u=o.join(`\n`),c=u.replace(this.rules.other.blockquoteSetextReplace,`\n $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");r=r?`${r}\n${u}`:u,i=i?`${i}\n${c}`:c;let g=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,s,!0),this.lexer.state.top=g,n.length===0)break;let h=s.at(-1);if(h?.type===\"code\")break;if(h?.type===\"blockquote\"){let R=h,f=R.raw+`\n`+n.join(`\n`),O=this.blockquote(f);s[s.length-1]=O,r=r.substring(0,r.length-R.raw.length)+O.raw,i=i.substring(0,i.length-R.text.length)+O.text;break}else if(h?.type===\"list\"){let R=h,f=R.raw+`\n`+n.join(`\n`),O=this.list(f);s[s.length-1]=O,r=r.substring(0,r.length-h.raw.length)+O.raw,i=i.substring(0,i.length-R.raw.length)+O.raw,n=f.substring(s.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:\"list\",raw:\"\",ordered:r,start:r?+n.slice(0,-1):\"\",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?n:\"[*+-]\");let s=this.rules.other.listItemRegex(n),a=!1;for(;e;){let p=!1,u=\"\",c=\"\";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;u=t[0],e=e.substring(u.length);let g=t[2].split(`\n`,1)[0].replace(this.rules.other.listReplaceTabs,H=>\" \".repeat(3*H.length)),h=e.split(`\n`,1)[0],R=!g.trim(),f=0;if(this.options.pedantic?(f=2,c=g.trimStart()):R?f=t[1].length+1:(f=t[2].search(this.rules.other.nonSpaceChar),f=f>4?1:f,c=g.slice(f),f+=t[1].length),R&&this.rules.other.blankLine.test(h)&&(u+=h+`\n`,e=e.substring(h.length+1),p=!0),!p){let H=this.rules.other.nextBulletRegex(f),ee=this.rules.other.hrRegex(f),te=this.rules.other.fencesBeginRegex(f),ne=this.rules.other.headingBeginRegex(f),xe=this.rules.other.htmlBeginRegex(f);for(;e;){let Z=e.split(`\n`,1)[0],A;if(h=Z,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting,\" \"),A=h):A=h.replace(this.rules.other.tabCharGlobal,\" \"),te.test(h)||ne.test(h)||xe.test(h)||H.test(h)||ee.test(h))break;if(A.search(this.rules.other.nonSpaceChar)>=f||!h.trim())c+=`\n`+A.slice(f);else{if(R||g.replace(this.rules.other.tabCharGlobal,\" \").search(this.rules.other.nonSpaceChar)>=4||te.test(g)||ne.test(g)||ee.test(g))break;c+=`\n`+h}!R&&!h.trim()&&(R=!0),u+=Z+`\n`,e=e.substring(Z.length+1),g=A.slice(f)}}i.loose||(a?i.loose=!0:this.rules.other.doubleBlankLine.test(u)&&(a=!0));let O=null,Y;this.options.gfm&&(O=this.rules.other.listIsTask.exec(c),O&&(Y=O[0]!==\"[ ] \",c=c.replace(this.rules.other.listReplaceTask,\"\"))),i.items.push({type:\"list_item\",raw:u,task:!!O,checked:Y,loose:!1,text:c,tokens:[]}),i.raw+=u}let o=i.items.at(-1);if(o)o.raw=o.raw.trimEnd(),o.text=o.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let p=0;p<i.items.length;p++)if(this.lexer.state.top=!1,i.items[p].tokens=this.lexer.blockTokens(i.items[p].text,[]),!i.loose){let u=i.items[p].tokens.filter(g=>g.type===\"space\"),c=u.length>0&&u.some(g=>this.rules.other.anyLine.test(g.raw));i.loose=c}if(i.loose)for(let p=0;p<i.items.length;p++)i.items[p].loose=!0;return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:\"html\",block:!0,raw:t[0],pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,\" \"),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=V(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],s={type:\"table\",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let a of r)this.rules.other.tableAlignRight.test(a)?s.align.push(\"right\"):this.rules.other.tableAlignCenter.test(a)?s.align.push(\"center\"):this.rules.other.tableAlignLeft.test(a)?s.align.push(\"left\"):s.align.push(null);for(let a=0;a<n.length;a++)s.header.push({text:n[a],tokens:this.lexer.inline(n[a]),header:!0,align:s.align[a]});for(let a of i)s.rows.push(V(a,s.header.length).map((o,p)=>({text:o,tokens:this.lexer.inline(o),header:!1,align:s.align[p]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:t[2].charAt(0)===\"=\"?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=z(n.slice(0,-1),\"\\\\\");if((n.length-s.length)%2===0)return}else{let s=fe(t[2],\"()\");if(s===-2)return;if(s>-1){let o=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,o).trim(),t[3]=\"\"}}let r=t[2],i=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),me(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:i&&i.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return me(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,a,o,p=s,u=0,c=r[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a)continue;if(o=[...a].length,r[3]||r[4]){p+=o;continue}else if((r[5]||r[6])&&s%3&&!((s+o)%3)){u+=o;continue}if(p-=o,p>0)continue;o=Math.min(o,o+p+u);let g=[...r[0]][0].length,h=e.slice(0,s+r.index+g+o);if(Math.min(s,o)%2){let f=h.slice(1,-1);return{type:\"em\",raw:h,text:f,tokens:this.lexer.inlineTokens(f)}}let R=h.slice(2,-2);return{type:\"strong\",raw:h,text:R,tokens:this.lexer.inlineTokens(R)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:\"del\",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]===\"@\"?(n=t[1],r=\"mailto:\"+n):(n=t[1],r=n),{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]===\"@\")n=t[0],r=\"mailto:\"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(i!==t[0]);n=t[0],t[1]===\"www.\"?r=\"http://\"+t[0]:r=t[0]}return{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var x=class l{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||T,this.options.tokenizer=this.options.tokenizer||new y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:C.normal,inline:M.normal};this.options.pedantic?(t.block=C.pedantic,t.inline=M.pedantic):this.options.gfm&&(t.block=C.gfm,this.options.breaks?t.inline=M.breaks:t.inline=M.gfm),this.tokenizer.rules=t}static get rules(){return{block:C,inline:M}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.options.pedantic&&(e=e.replace(m.tabCharGlobal,\" \").replace(m.spaceLine,\"\"));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,a=e.slice(1),o;this.options.extensions.startBlock.forEach(p=>{o=p.call({lexer:this},a),typeof o==\"number\"&&o>=0&&(s=Math.min(s,o))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+\"[\"+\"a\".repeat(r[0].length-i-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let s=!1,a=\"\";for(;e;){s||(a=\"\"),s=!1;let o;if(this.options.extensions?.inline?.some(u=>(o=u.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let u=t.at(-1);o.type===\"text\"&&u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,a)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let p=e;if(this.options.extensions?.startInline){let u=1/0,c=e.slice(1),g;this.options.extensions.startInline.forEach(h=>{g=h.call({lexer:this},c),typeof g==\"number\"&&g>=0&&(u=Math.min(u,g))}),u<1/0&&u>=0&&(p=e.substring(0,u+1))}if(o=this.tokenizer.inlineText(p)){e=e.substring(o.raw.length),o.raw.slice(-1)!==\"_\"&&(a=o.raw.slice(-1)),s=!0;let u=t.at(-1);u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(e){let u=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(u);break}else throw new Error(u)}}return t}};var P=class{options;parser;constructor(e){this.options=e||T}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let r=(t||\"\").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,\"\")+`\n`;return r?'<pre><code class=\"language-'+w(r)+'\">'+(n?i:w(i,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?i:w(i,!0))+`</code></pre>\n`}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}def(e){return\"\"}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\n`}hr(e){return`<hr>\n`}list(e){let t=e.ordered,n=e.start,r=\"\";for(let a=0;a<e.items.length;a++){let o=e.items[a];r+=this.listitem(o)}let i=t?\"ol\":\"ul\",s=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+i+s+`>\n`+r+\"</\"+i+`>\n`}listitem(e){let t=\"\";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type===\"paragraph\"?(e.tokens[0].text=n+\" \"+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type===\"text\"&&(e.tokens[0].tokens[0].text=n+\" \"+w(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:\"text\",raw:n+\" \",text:n+\" \",escaped:!0}):t+=n+\" \"}return t+=this.parser.parse(e.tokens,!!e.loose),`<li>${t}</li>\n`}checkbox({checked:e}){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\">'}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\n`}table(e){let t=\"\",n=\"\";for(let i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let r=\"\";for(let i=0;i<e.rows.length;i++){let s=e.rows[i];n=\"\";for(let a=0;a<s.length;a++)n+=this.tablecell(s[a]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+r+`</table>\n`}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${w(e,!0)}</code>`}br(e){return\"<br>\"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=J(e);if(i===null)return r;e=i;let s='<a href=\"'+e+'\"';return t&&(s+=' title=\"'+w(t)+'\"'),s+=\">\"+r+\"</a>\",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=J(e);if(i===null)return w(n);e=i;let s=`<img src=\"${e}\" alt=\"${n}\"`;return t&&(s+=` title=\"${w(t)}\"`),s+=\">\",s}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:w(e.text)}};var $=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}};var b=class l{options;renderer;textRenderer;constructor(e){this.options=e||T,this.options.renderer=this.options.renderer||new P,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new $}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e,t=!0){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let a=i,o=this.options.extensions.renderers[a.type].call({parser:this},a);if(o!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"def\",\"paragraph\",\"text\"].includes(a.type)){n+=o||\"\";continue}}let s=i;switch(s.type){case\"space\":{n+=this.renderer.space(s);continue}case\"hr\":{n+=this.renderer.hr(s);continue}case\"heading\":{n+=this.renderer.heading(s);continue}case\"code\":{n+=this.renderer.code(s);continue}case\"table\":{n+=this.renderer.table(s);continue}case\"blockquote\":{n+=this.renderer.blockquote(s);continue}case\"list\":{n+=this.renderer.list(s);continue}case\"html\":{n+=this.renderer.html(s);continue}case\"def\":{n+=this.renderer.def(s);continue}case\"paragraph\":{n+=this.renderer.paragraph(s);continue}case\"text\":{let a=s,o=this.renderer.text(a);for(;r+1<e.length&&e[r+1].type===\"text\";)a=e[++r],o+=`\n`+this.renderer.text(a);t?n+=this.renderer.paragraph({type:\"paragraph\",raw:o,text:o,tokens:[{type:\"text\",raw:o,text:o,escaped:!0}]}):n+=o;continue}default:{let a='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(a),\"\";throw new Error(a)}}}return n}parseInline(e,t=this.renderer){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let a=this.options.extensions.renderers[i.type].call({parser:this},i);if(a!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(i.type)){n+=a||\"\";continue}}let s=i;switch(s.type){case\"escape\":{n+=t.text(s);break}case\"html\":{n+=t.html(s);break}case\"link\":{n+=t.link(s);break}case\"image\":{n+=t.image(s);break}case\"strong\":{n+=t.strong(s);break}case\"em\":{n+=t.em(s);break}case\"codespan\":{n+=t.codespan(s);break}case\"br\":{n+=t.br(s);break}case\"del\":{n+=t.del(s);break}case\"text\":{n+=t.text(s);break}default:{let a='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(a),\"\";throw new Error(a)}}}return n}};var S=class{options;block;constructor(e){this.options=e||T}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\",\"emStrongMask\"]);static passThroughHooksRespectAsync=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?x.lex:x.lexInline}provideParser(){return this.block?b.parse:b.parseInline}};var B=class{defaults=L();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=b;Renderer=P;TextRenderer=$;Lexer=x;Tokenizer=y;Hooks=S;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case\"table\":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let a of s)n=n.concat(this.walkTokens(a.tokens,t));break}case\"list\":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let a=i[s].flat(1/0);n=n.concat(this.walkTokens(a,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error(\"extension name required\");if(\"renderer\"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...a){let o=i.renderer.apply(this,a);return o===!1&&(o=s.apply(this,a)),o}:t.renderers[i.name]=i.renderer}if(\"tokenizer\"in i){if(!i.level||i.level!==\"block\"&&i.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level===\"block\"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level===\"inline\"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}\"childTokens\"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new P(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if([\"options\",\"parser\"].includes(s))continue;let a=s,o=n.renderer[a],p=i[a];i[a]=(...u)=>{let c=o.apply(i,u);return c===!1&&(c=p.apply(i,u)),c||\"\"}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new y(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(s))continue;let a=s,o=n.tokenizer[a],p=i[a];i[a]=(...u)=>{let c=o.apply(i,u);return c===!1&&(c=p.apply(i,u)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new S;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if([\"options\",\"block\"].includes(s))continue;let a=s,o=n.hooks[a],p=i[a];S.passThroughHooks.has(s)?i[a]=u=>{if(this.defaults.async&&S.passThroughHooksRespectAsync.has(s))return(async()=>{let g=await o.call(i,u);return p.call(i,g)})();let c=o.call(i,u);return p.call(i,c)}:i[a]=(...u)=>{if(this.defaults.async)return(async()=>{let g=await o.apply(i,u);return g===!1&&(g=await p.apply(i,u)),g})();let c=o.apply(i,u);return c===!1&&(c=p.apply(i,u)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(a){let o=[];return o.push(s.call(this,a)),i&&(o=o.concat(i.call(this,a))),o}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return x.lex(e,t??this.defaults)}parser(e,t){return b.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},a=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return a(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return a(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return a(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));if(s.hooks&&(s.hooks.options=s,s.hooks.block=e),s.async)return(async()=>{let o=s.hooks?await s.hooks.preprocess(n):n,u=await(s.hooks?await s.hooks.provideLexer():e?x.lex:x.lexInline)(o,s),c=s.hooks?await s.hooks.processAllTokens(u):u;s.walkTokens&&await Promise.all(this.walkTokens(c,s.walkTokens));let h=await(s.hooks?await s.hooks.provideParser():e?b.parse:b.parseInline)(c,s);return s.hooks?await s.hooks.postprocess(h):h})().catch(a);try{s.hooks&&(n=s.hooks.preprocess(n));let p=(s.hooks?s.hooks.provideLexer():e?x.lex:x.lexInline)(n,s);s.hooks&&(p=s.hooks.processAllTokens(p)),s.walkTokens&&this.walkTokens(p,s.walkTokens);let c=(s.hooks?s.hooks.provideParser():e?b.parse:b.parseInline)(p,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(o){return a(o)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let r=\"<p>An error occurred:</p><pre>\"+w(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var _=new B;function k(l,e){return _.parse(l,e)}k.options=k.setOptions=function(l){return _.setOptions(l),k.defaults=_.defaults,G(k.defaults),k};k.getDefaults=L;k.defaults=T;k.use=function(...l){return _.use(...l),k.defaults=_.defaults,G(k.defaults),k};k.walkTokens=function(l,e){return _.walkTokens(l,e)};k.parseInline=_.parseInline;k.Parser=b;k.parser=b.parse;k.Renderer=P;k.TextRenderer=$;k.Lexer=x;k.lexer=x.lex;k.Tokenizer=y;k.Hooks=S;k.parse=k;var Zt=k.options,Gt=k.setOptions,Nt=k.use,Ft=k.walkTokens,jt=k.parseInline,Qt=k,Ut=b.parse,Kt=x.lex;export{S as Hooks,x as Lexer,B as Marked,b as Parser,P as Renderer,$ as TextRenderer,y as Tokenizer,T as defaults,L as getDefaults,Kt as lexer,k as marked,Zt as options,Qt as parse,jt as parseInline,Ut as parser,Gt as setOptions,Nt as use,Ft as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\n","/*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE */\n\nconst {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n} = Object;\nlet {\n freeze,\n seal,\n create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n apply,\n construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n}\nif (!seal) {\n seal = function seal(x) {\n return x;\n };\n}\nif (!apply) {\n apply = function apply(func, thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n return func.apply(thisArg, args);\n };\n}\nif (!construct) {\n construct = function construct(Func) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n return new Func(...args);\n };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n return function (thisArg) {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return apply(func, thisArg, args);\n };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(Func) {\n return function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return construct(Func, args);\n };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'search', 'section', 'select', 'shadow', 'slot', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'enterkeyhint', 'exportparts', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'inputmode', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'part', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'mask-type', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ARIA_ATTR: ARIA_ATTR,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n DATA_ATTR: DATA_ATTR,\n DOCTYPE_NAME: DOCTYPE_NAME,\n ERB_EXPR: ERB_EXPR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\nconst _createHooksMap = function _createHooksMap() {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: []\n };\n};\nfunction createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n DOMPurify.version = '3.3.1';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = _createHooksMap();\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n tagCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n }\n }));\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n /* Decide if document with <html>... should be returned */\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (typeof cfg.ADD_TAGS === 'function') {\n EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n } else {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n }\n if (cfg.ADD_ATTR) {\n if (typeof cfg.ADD_ATTR === 'function') {\n EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n } else {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n if (cfg.ADD_FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either <annotation-xml> or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, element) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element\n });\n }\n element.removeAttribute(name);\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n * _isClobbered\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(element) {\n return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n };\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param value object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n const _isNode = function _isNode(value) {\n return typeof Node === 'function' && value instanceof Node;\n };\n function _executeHooks(hooks, currentNode, data) {\n arrayForEach(hooks, hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */\n if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\\w!]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */\n if (!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n const {\n attributes\n } = currentNode;\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined\n };\n let l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title|textarea)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n if (lcName === 'attributename' && stringMatch(value, 'href')) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */\n DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n return arrayPop(hooks[entryPoint]);\n };\n DOMPurify.removeHooks = function (entryPoint) {\n hooks[entryPoint] = [];\n };\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import { z } from 'zod';\n\n// Tag validation schema\nexport const tagSchema = z.string()\n .min(1, 'Tag cannot be empty')\n .max(50, 'Tag must be less than 50 characters')\n .regex(/^[a-zA-Z0-9_]+$/, 'Tag can only contain letters, numbers, and underscores');\n\n/**\n * Extract hashtags from text content\n * @param content - Text content to parse\n * @returns Array of unique tags (without # symbol)\n */\nexport function extractHashtags(content: string): string[] {\n if (!content) return [];\n \n const hashtagRegex = /#([a-zA-Z0-9_]+)/g;\n const matches = content.match(hashtagRegex) || [];\n \n // Remove # symbol and deduplicate\n const tags = matches\n .map(tag => tag.substring(1))\n .filter(tag => {\n try {\n tagSchema.parse(tag);\n return true;\n } catch {\n return false;\n }\n });\n \n return [...new Set(tags)];\n}\n\n/**\n * Parse content into segments with hashtag information\n * @param content - Text content with hashtags\n * @returns Array of segments with type and content\n */\nexport interface ContentSegment {\n type: 'text' | 'hashtag';\n content: string;\n}\n\nexport function parseHashtagContent(content: string): ContentSegment[] {\n if (!content) return [{ type: 'text', content: '' }];\n \n const hashtagRegex = /#([a-zA-Z0-9_]+)/g;\n const parts = content.split(hashtagRegex);\n \n return parts.map((part, index) => {\n // Even indices are regular text, odd indices are hashtag content\n if (index % 2 === 0) {\n return { type: 'text', content: part };\n }\n \n // This is a hashtag - validate it\n try {\n tagSchema.parse(part);\n return { type: 'hashtag', content: part };\n } catch {\n // Invalid hashtag, render as regular text\n return { type: 'text', content: `#${part}` };\n }\n });\n}\n\n/**\n * Clean and normalize tag for URL usage\n */\nexport function normalizeTag(tag: string): string {\n return tag.toLowerCase().replace(/[^a-z0-9_]/g, '');\n}","import React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { parseHashtagContent, type ContentSegment } from '@/utils/tagUtils';\n\ninterface HashtagTextProps {\n children: string;\n className?: string;\n onTagClick?: (tag: string) => void;\n}\n\nconst HashtagText: React.FC<HashtagTextProps> = ({ \n children, \n className = '',\n onTagClick \n}) => {\n const navigate = useNavigate();\n \n const handleTagClick = (tag: string) => {\n if (onTagClick) {\n onTagClick(tag);\n } else {\n navigate(`/tags/${tag}`);\n }\n };\n\n const segments = parseHashtagContent(children);\n\n return (\n <span className={className}>\n {segments.map((segment: ContentSegment, index: number) => {\n if (segment.type === 'hashtag') {\n return (\n <button\n key={`tag-${index}`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n handleTagClick(segment.content);\n }}\n className=\"text-primary hover:text-primary/80 font-medium hover:underline cursor-pointer transition-colors\"\n >\n #{segment.content}\n </button>\n );\n }\n return <span key={`text-${index}`}>{segment.content}</span>;\n })}\n </span>\n );\n};\n\nexport default HashtagText;","\n/* **********************************************\n Begin prism-core.js\n********************************************** */\n\n/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {} // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&').replace(/</g, '<').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null) === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123) === 'Number'\n\t\t\t * type('foo') === 'String'\n\t\t\t * type(true) === 'Boolean'\n\t\t\t * type([1, 2]) === 'Array'\n\t\t\t * type({}) === 'Object'\n\t\t\t * type(String) === 'Function'\n\t\t\t * type(/abc+/) === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (document.currentScript && document.currentScript.tagName === 'SCRIPT' && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t// at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t// at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t * // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t * // at its original position\n\t\t\t * 'comment': { ... },\n\t\t\t * // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t * 'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t * // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t * 'style': {\n\t\t\t * // token\n\t\t\t * }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t * 'comment': Prism.languages.markup.comment,\n\t\t\t * // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism’s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you’re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t * if (token instanceof Prism.Token && token.type === 'number') {\n\t\t * console.log(`Found numeric literal: ${token.content}`);\n\t\t * }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t// @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t * The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '"') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n\n\n/* **********************************************\n Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n\n\n/* **********************************************\n Begin prism-css.js\n********************************************** */\n\n(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n\n\n/* **********************************************\n Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n\n/* **********************************************\n Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading…';\n\tvar FAILURE_MESSAGE = function (status, message) {\n\t\treturn '✖ Error ' + status + ' while fetching file: ' + message;\n\t};\n\tvar FAILURE_EMPTY_MESSAGE = '✖ Error: File does not exist or is empty';\n\n\tvar EXTENSIONS = {\n\t\t'js': 'javascript',\n\t\t'py': 'python',\n\t\t'rb': 'ruby',\n\t\t'ps1': 'powershell',\n\t\t'psm1': 'powershell',\n\t\t'sh': 'bash',\n\t\t'bat': 'batch',\n\t\t'h': 'c',\n\t\t'tex': 'latex'\n\t};\n\n\tvar STATUS_ATTR = 'data-src-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-src]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\t/**\n\t * Loads the given file.\n\t *\n\t * @param {string} src The URL or path of the source file to load.\n\t * @param {(result: string) => void} success\n\t * @param {(reason: string) => void} error\n\t */\n\tfunction loadFile(src, success, error) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', src, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState == 4) {\n\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\tsuccess(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tif (xhr.status >= 400) {\n\t\t\t\t\t\terror(FAILURE_MESSAGE(xhr.status, xhr.statusText));\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror(FAILURE_EMPTY_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.send(null);\n\t}\n\n\t/**\n\t * Parses the given range.\n\t *\n\t * This returns a range with inclusive ends.\n\t *\n\t * @param {string | null | undefined} range\n\t * @returns {[number, number | undefined] | undefined}\n\t */\n\tfunction parseRange(range) {\n\t\tvar m = /^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(range || '');\n\t\tif (m) {\n\t\t\tvar start = Number(m[1]);\n\t\t\tvar comma = m[2];\n\t\t\tvar end = m[3];\n\n\t\t\tif (!comma) {\n\t\t\t\treturn [start, start];\n\t\t\t}\n\t\t\tif (!end) {\n\t\t\t\treturn [start, undefined];\n\t\t\t}\n\t\t\treturn [start, Number(end)];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING); // mark as loading\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language = env.language;\n\t\t\tif (language === 'none') {\n\t\t\t\t// the language might be 'none' because there is no language set;\n\t\t\t\t// in this case, we want to use the extension as the language\n\t\t\t\tvar extension = (/\\.(\\w+)$/.exec(src) || [, 'none'])[1];\n\t\t\t\tlanguage = EXTENSIONS[extension] || extension;\n\t\t\t}\n\n\t\t\t// set language classes\n\t\t\tPrism.util.setLanguage(code, language);\n\t\t\tPrism.util.setLanguage(pre, language);\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\t// load file\n\t\t\tloadFile(\n\t\t\t\tsrc,\n\t\t\t\tfunction (text) {\n\t\t\t\t\t// mark as loaded\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t// handle data-range\n\t\t\t\t\tvar range = parseRange(pre.getAttribute('data-range'));\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tvar lines = text.split(/\\r\\n?|\\n/g);\n\n\t\t\t\t\t\t// the range is one-based and inclusive on both ends\n\t\t\t\t\t\tvar start = range[0];\n\t\t\t\t\t\tvar end = range[1] == null ? lines.length : range[1];\n\n\t\t\t\t\t\tif (start < 0) { start += lines.length; }\n\t\t\t\t\t\tstart = Math.max(0, Math.min(start - 1, lines.length));\n\t\t\t\t\t\tif (end < 0) { end += lines.length; }\n\t\t\t\t\t\tend = Math.max(0, Math.min(end, lines.length));\n\n\t\t\t\t\t\ttext = lines.slice(start, end).join('\\n');\n\n\t\t\t\t\t\t// add data-start for line numbers\n\t\t\t\t\t\tif (!pre.hasAttribute('data-start')) {\n\t\t\t\t\t\t\tpre.setAttribute('data-start', String(start + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// highlight code\n\t\t\t\t\tcode.textContent = text;\n\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = error;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\tPrism.plugins.fileHighlight = {\n\t\t/**\n\t\t * Executes the File Highlight plugin for all matching `pre` elements under the given container.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {ParentNode} [container=document]\n\t\t */\n\t\thighlight: function highlight(container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar logged = false;\n\t/** @deprecated Use `Prism.plugins.fileHighlight.highlight` instead. */\n\tPrism.fileHighlight = function () {\n\t\tif (!logged) {\n\t\t\tconsole.warn('Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.');\n\t\t\tlogged = true;\n\t\t}\n\t\tPrism.plugins.fileHighlight.highlight.apply(this, arguments);\n\t};\n\n}());\n","(function (Prism) {\n\n\tPrism.languages.typescript = Prism.languages.extend('javascript', {\n\t\t'class-name': {\n\t\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|type)\\s+)(?!keyof\\b)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?:\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: null // see below\n\t\t},\n\t\t'builtin': /\\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\\b/,\n\t});\n\n\t// The keywords TypeScript adds to JavaScript\n\tPrism.languages.typescript.keyword.push(\n\t\t/\\b(?:abstract|declare|is|keyof|readonly|require)\\b/,\n\t\t// keywords that have to be followed by an identifier\n\t\t/\\b(?:asserts|infer|interface|module|namespace|type)\\b(?=\\s*(?:[{_$a-zA-Z\\xA0-\\uFFFF]|$))/,\n\t\t// This is for `import type *, {}`\n\t\t/\\btype\\b(?=\\s*(?:[\\{*]|$))/\n\t);\n\n\t// doesn't work with TS because TS is too complex\n\tdelete Prism.languages.typescript['parameter'];\n\tdelete Prism.languages.typescript['literal-property'];\n\n\t// a version of typescript specifically for highlighting types\n\tvar typeInside = Prism.languages.extend('typescript', {});\n\tdelete typeInside['class-name'];\n\n\tPrism.languages.typescript['class-name'].inside = typeInside;\n\n\tPrism.languages.insertBefore('typescript', 'function', {\n\t\t'decorator': {\n\t\t\tpattern: /@[$\\w\\xA0-\\uFFFF]+/,\n\t\t\tinside: {\n\t\t\t\t'at': {\n\t\t\t\t\tpattern: /^@/,\n\t\t\t\t\talias: 'operator'\n\t\t\t\t},\n\t\t\t\t'function': /^[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t'generic-function': {\n\t\t\t// e.g. foo<T extends \"bar\" | \"baz\">( ...\n\t\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\\s*\\()/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<[\\s\\S]+/, // everything after the first <\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: typeInside\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.ts = Prism.languages.typescript;\n\n}(Prism));\n","Prism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n","// https://www.json.org/json-en.html\nPrism.languages.json = {\n\t'property': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?!\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'comment': {\n\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'number': /-?\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,\n\t'punctuation': /[{}[\\],]/,\n\t'operator': /:/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'null': {\n\t\tpattern: /\\bnull\\b/,\n\t\talias: 'keyword'\n\t}\n};\n\nPrism.languages.webmanifest = Prism.languages.json;\n","(function (Prism) {\n\t// $ set | grep '^[A-Z][^[:space:]]*=' | cut -d= -f1 | tr '\\n' '|'\n\t// + LC_ALL, RANDOM, REPLY, SECONDS.\n\t// + make sure PS1..4 are here as they are not always set,\n\t// - some useless things.\n\tvar envVars = '\\\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\\\b';\n\n\tvar commandAfterHeredoc = {\n\t\tpattern: /(^([\"']?)\\w+\\2)[ \\t]+\\S.*/,\n\t\tlookbehind: true,\n\t\talias: 'punctuation', // this looks reasonably well in all themes\n\t\tinside: null // see below\n\t};\n\n\tvar insideString = {\n\t\t'bash': commandAfterHeredoc,\n\t\t'environment': {\n\t\t\tpattern: RegExp('\\\\$' + envVars),\n\t\t\talias: 'constant'\n\t\t},\n\t\t'variable': [\n\t\t\t// [0]: Arithmetic Environment\n\t\t\t{\n\t\t\t\tpattern: /\\$?\\(\\([\\s\\S]+?\\)\\)/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t// If there is a $ sign at the beginning highlight $(( and )) as variable\n\t\t\t\t\t'variable': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /(^\\$\\(\\([\\s\\S]+)\\)\\)/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/^\\$\\(\\(/\n\t\t\t\t\t],\n\t\t\t\t\t'number': /\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee]-?\\d+)?/,\n\t\t\t\t\t// Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic\n\t\t\t\t\t'operator': /--|\\+\\+|\\*\\*=?|<<=?|>>=?|&&|\\|\\||[=!+\\-*/%<>^&|]=?|[?~:]/,\n\t\t\t\t\t// If there is no $ sign at the beginning highlight (( and )) as punctuation\n\t\t\t\t\t'punctuation': /\\(\\(?|\\)\\)?|,|;/\n\t\t\t\t}\n\t\t\t},\n\t\t\t// [1]: Command Substitution\n\t\t\t{\n\t\t\t\tpattern: /\\$\\((?:\\([^)]+\\)|[^()])+\\)|`[^`]+`/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'variable': /^\\$\\(|^`|\\)$|`$/\n\t\t\t\t}\n\t\t\t},\n\t\t\t// [2]: Brace expansion\n\t\t\t{\n\t\t\t\tpattern: /\\$\\{[^}]+\\}/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'operator': /:[-=?+]?|[!\\/]|##?|%%?|\\^\\^?|,,?/,\n\t\t\t\t\t'punctuation': /[\\[\\]]/,\n\t\t\t\t\t'environment': {\n\t\t\t\t\t\tpattern: RegExp('(\\\\{)' + envVars),\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\talias: 'constant'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t/\\$(?:\\w+|[#?*!@$])/\n\t\t],\n\t\t// Escape sequences from echo and printf's manuals, and escaped quotes.\n\t\t'entity': /\\\\(?:[abceEfnrtv\\\\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/\n\t};\n\n\tPrism.languages.bash = {\n\t\t'shebang': {\n\t\t\tpattern: /^#!\\s*\\/.*/,\n\t\t\talias: 'important'\n\t\t},\n\t\t'comment': {\n\t\t\tpattern: /(^|[^\"{\\\\$])#.*/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'function-name': [\n\t\t\t// a) function foo {\n\t\t\t// b) foo() {\n\t\t\t// c) function foo() {\n\t\t\t// but not “foo {”\n\t\t\t{\n\t\t\t\t// a) and c)\n\t\t\t\tpattern: /(\\bfunction\\s+)[\\w-]+(?=(?:\\s*\\(?:\\s*\\))?\\s*\\{)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'function'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// b)\n\t\t\t\tpattern: /\\b[\\w-]+(?=\\s*\\(\\s*\\)\\s*\\{)/,\n\t\t\t\talias: 'function'\n\t\t\t}\n\t\t],\n\t\t// Highlight variable names as variables in for and select beginnings.\n\t\t'for-or-select': {\n\t\t\tpattern: /(\\b(?:for|select)\\s+)\\w+(?=\\s+in\\s)/,\n\t\t\talias: 'variable',\n\t\t\tlookbehind: true\n\t\t},\n\t\t// Highlight variable names as variables in the left-hand part\n\t\t// of assignments (“=” and “+=”).\n\t\t'assign-left': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()\\w+(?:\\.\\w+)*(?=\\+?=)/,\n\t\t\tinside: {\n\t\t\t\t'environment': {\n\t\t\t\t\tpattern: RegExp('(^|[\\\\s;|&]|[<>]\\\\()' + envVars),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'constant'\n\t\t\t\t}\n\t\t\t},\n\t\t\talias: 'variable',\n\t\t\tlookbehind: true\n\t\t},\n\t\t// Highlight parameter names as variables\n\t\t'parameter': {\n\t\t\tpattern: /(^|\\s)-{1,2}(?:\\w+:[+-]?)?\\w+(?:\\.\\w+)*(?=[=\\s]|$)/,\n\t\t\talias: 'variable',\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': [\n\t\t\t// Support for Here-documents https://en.wikipedia.org/wiki/Here_document\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)(\\w+)\\s[\\s\\S]*?(?:\\r?\\n|\\r)\\2/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: insideString\n\t\t\t},\n\t\t\t// Here-document with quotes around the tag\n\t\t\t// → No expansion (so no “inside”).\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)([\"'])(\\w+)\\2\\s[\\s\\S]*?(?:\\r?\\n|\\r)\\3/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'bash': commandAfterHeredoc\n\t\t\t\t}\n\t\t\t},\n\t\t\t// “Normal” string\n\t\t\t{\n\t\t\t\t// https://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html\n\t\t\t\tpattern: /(^|[^\\\\](?:\\\\\\\\)*)\"(?:\\\\[\\s\\S]|\\$\\([^)]+\\)|\\$(?!\\()|`[^`]+`|[^\"\\\\`$])*\"/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: insideString\n\t\t\t},\n\t\t\t{\n\t\t\t\t// https://www.gnu.org/software/bash/manual/html_node/Single-Quotes.html\n\t\t\t\tpattern: /(^|[^$\\\\])'[^']*'/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// https://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html\n\t\t\t\tpattern: /\\$'(?:[^'\\\\]|\\\\[\\s\\S])*'/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'entity': insideString.entity\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'environment': {\n\t\t\tpattern: RegExp('\\\\$?' + envVars),\n\t\t\talias: 'constant'\n\t\t},\n\t\t'variable': insideString.variable,\n\t\t'function': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'keyword': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t// https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n\t\t'builtin': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:\\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true,\n\t\t\t// Alias added to make those easier to distinguish from strings.\n\t\t\talias: 'class-name'\n\t\t},\n\t\t'boolean': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:false|true)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'file-descriptor': {\n\t\t\tpattern: /\\B&\\d\\b/,\n\t\t\talias: 'important'\n\t\t},\n\t\t'operator': {\n\t\t\t// Lots of redirections here, but not just that.\n\t\t\tpattern: /\\d?<>|>\\||\\+=|=[=~]?|!=?|<<[<-]?|[&\\d]?>>|\\d[<>]&?|[<>][&=]?|&[>&]?|\\|[&|]?/,\n\t\t\tinside: {\n\t\t\t\t'file-descriptor': {\n\t\t\t\t\tpattern: /^\\d/,\n\t\t\t\t\talias: 'important'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'punctuation': /\\$?\\(\\(?|\\)\\)?|\\.\\.|[{}[\\];\\\\]/,\n\t\t'number': {\n\t\t\tpattern: /(^|\\s)(?:[1-9]\\d*|0)(?:[.,]\\d+)?\\b/,\n\t\t\tlookbehind: true\n\t\t}\n\t};\n\n\tcommandAfterHeredoc.inside = Prism.languages.bash;\n\n\t/* Patterns in command substitution. */\n\tvar toBeCopied = [\n\t\t'comment',\n\t\t'function-name',\n\t\t'for-or-select',\n\t\t'assign-left',\n\t\t'parameter',\n\t\t'string',\n\t\t'environment',\n\t\t'function',\n\t\t'keyword',\n\t\t'builtin',\n\t\t'boolean',\n\t\t'file-descriptor',\n\t\t'operator',\n\t\t'punctuation',\n\t\t'number'\n\t];\n\tvar inside = insideString.variable[1].inside;\n\tfor (var i = 0; i < toBeCopied.length; i++) {\n\t\tinside[toBeCopied[i]] = Prism.languages.bash[toBeCopied[i]];\n\t}\n\n\tPrism.languages.sh = Prism.languages.bash;\n\tPrism.languages.shell = Prism.languages.bash;\n}(Prism));\n","(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n","Prism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n","import React, { useMemo, useEffect, useRef } from 'react';\nimport { marked } from 'marked';\nimport DOMPurify from 'dompurify';\nimport HashtagText from './HashtagText';\nimport Prism from 'prismjs';\n\nimport 'prismjs/components/prism-typescript';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-markup';\nimport '../styles/prism-custom-theme.css';\n\ninterface MarkdownRendererProps {\n content: string;\n className?: string;\n}\n\nconst MarkdownRenderer = React.memo(({ content, className = \"\" }: MarkdownRendererProps) => {\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n // Memoize content analysis\n const contentAnalysis = useMemo(() => {\n const hasHashtags = /#[a-zA-Z0-9_]+/.test(content);\n const hasMarkdownLinks = /\\[.*?\\]\\(.*?\\)/.test(content);\n const hasMarkdownSyntax = /(\\*\\*|__|##?|###?|####?|#####?|######?|\\*|\\n\\*|\\n-|\\n\\d+\\.)/.test(content);\n\n return {\n hasHashtags,\n hasMarkdownLinks,\n hasMarkdownSyntax\n };\n }, [content]);\n\n // Only use HashtagText if content has hashtags but NO markdown syntax at all\n // This preserves hashtag linking for simple text while allowing markdown to render properly\n if (contentAnalysis.hasHashtags && !contentAnalysis.hasMarkdownLinks && !contentAnalysis.hasMarkdownSyntax) {\n return (\n <div className={`prose prose-sm max-w-none dark:prose-invert ${className}`}>\n <HashtagText>{content}</HashtagText>\n </div>\n );\n }\n\n // Memoize the expensive HTML processing\n const htmlContent = useMemo(() => {\n // Decode HTML entities first if present\n const decodedContent = content\n .replace(/ /g, ' ')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\");\n\n // Configure marked options for regular markdown\n marked.setOptions({\n breaks: true, // Convert \\n to <br>\n gfm: true, // GitHub flavored markdown\n });\n\n // Convert markdown to HTML\n const rawHtml = marked.parse(decodedContent) as string;\n\n // Helper function to format URL display text\n const formatUrlDisplay = (url: string): string => {\n try {\n // Remove protocol\n let displayUrl = url.replace(/^https?:\\/\\//, '');\n\n // Remove www. if present\n displayUrl = displayUrl.replace(/^www\\./, '');\n\n // Truncate if too long (keep domain + some path)\n if (displayUrl.length > 40) {\n const parts = displayUrl.split('/');\n const domain = parts[0];\n const path = parts.slice(1).join('/');\n\n if (path.length > 20) {\n displayUrl = `${domain}/${path.substring(0, 15)}...`;\n } else {\n displayUrl = `${domain}/${path}`;\n }\n }\n\n return displayUrl;\n } catch {\n return url;\n }\n };\n\n // Post-process to add target=\"_blank\", styling, and format link text\n const processedHtml = rawHtml.replace(\n /<a href=\"([^\"]*)\"([^>]*)>([^<]*)<\\/a>/g,\n (match, href, attrs, text) => {\n // If the link text is the same as the URL (auto-generated), format it nicely\n const isAutoLink = text === href || text.replace(/^https?:\\/\\//, '') === href.replace(/^https?:\\/\\//, '');\n const displayText = isAutoLink ? formatUrlDisplay(href) : text;\n\n return `<a href=\"${href}\"${attrs} target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-primary hover:text-primary/80 underline hover:no-underline transition-colors\">${displayText}</a>`;\n }\n );\n\n return DOMPurify.sanitize(processedHtml, {\n ADD_ATTR: ['target', 'rel', 'class'] // Allow target, rel, and class attributes for links\n });\n }, [content]);\n\n // Apply syntax highlighting after render\n React.useEffect(() => {\n if (containerRef.current) {\n Prism.highlightAllUnder(containerRef.current);\n }\n }, [htmlContent]);\n\n return (\n <div\n ref={containerRef}\n className={`prose prose-sm max-w-none dark:prose-invert ${className}`}\n dangerouslySetInnerHTML={{ __html: htmlContent }}\n />\n );\n});\n\nMarkdownRenderer.displayName = 'MarkdownRenderer';\n\nexport default MarkdownRenderer;","// src/primitive.tsx\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n return function handleEvent(event) {\n originalEventHandler?.(event);\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\nfunction getOwnerWindow(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access window outside of the DOM\");\n }\n return element?.ownerDocument?.defaultView ?? window;\n}\nfunction getOwnerDocument(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access document outside of the DOM\");\n }\n return element?.ownerDocument ?? document;\n}\nfunction getActiveElement(node, activeDescendant = false) {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n return null;\n }\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n if (activeDescendant) {\n const id = activeElement.getAttribute(\"aria-activedescendant\");\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n return activeElement;\n}\nfunction isFrame(element) {\n return element.tagName === \"IFRAME\";\n}\nexport {\n canUseDOM,\n composeEventHandlers,\n getActiveElement,\n getOwnerDocument,\n getOwnerWindow,\n isFrame\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/context/src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-layout-effect/src/use-layout-effect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {\n};\nexport {\n useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/id/src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\" useId \".trim().toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n const [id, setId] = React.useState(useReactId());\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : \"\");\n}\nexport {\n useId\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n prop,\n defaultProp,\n onChange = () => {\n },\n caller\n}) {\n const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== void 0;\n const value = isControlled ? prop : uncontrolledProp;\n if (true) {\n const isControlledRef = React.useRef(prop !== void 0);\n React.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const setValue = React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;\n if (value2 !== prop) {\n onChangeRef.current?.(value2);\n }\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, onChangeRef]\n );\n return [value, setValue];\n}\nfunction useUncontrolledState({\n defaultProp,\n onChange\n}) {\n const [value, setValue] = React.useState(defaultProp);\n const prevValueRef = React.useRef(value);\n const onChangeRef = React.useRef(onChange);\n useInsertionEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n onChangeRef.current?.(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef]);\n return [value, setValue, onChangeRef];\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nvar SYNC_STATE = Symbol(\"RADIX:SYNC_STATE\");\nfunction useControllableStateReducer(reducer, userArgs, initialArg, init) {\n const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n const isControlled = controlledState !== void 0;\n const onChange = useEffectEvent(onChangeProp);\n if (true) {\n const isControlledRef = React2.useRef(controlledState !== void 0);\n React2.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const args = [{ ...initialArg, state: defaultProp }];\n if (init) {\n args.push(init);\n }\n const [internalState, dispatch] = React2.useReducer(\n (state2, action) => {\n if (action.type === SYNC_STATE) {\n return { ...state2, state: action.state };\n }\n const next = reducer(state2, action);\n if (isControlled && !Object.is(next.state, state2.state)) {\n onChange(next.state);\n }\n return next;\n },\n ...args\n );\n const uncontrolledState = internalState.state;\n const prevValueRef = React2.useRef(uncontrolledState);\n React2.useEffect(() => {\n if (prevValueRef.current !== uncontrolledState) {\n prevValueRef.current = uncontrolledState;\n if (!isControlled) {\n onChange(uncontrolledState);\n }\n }\n }, [onChange, uncontrolledState, prevValueRef, isControlled]);\n const state = React2.useMemo(() => {\n const isControlled2 = controlledState !== void 0;\n if (isControlled2) {\n return { ...internalState, state: controlledState };\n }\n return internalState;\n }, [internalState, controlledState]);\n React2.useEffect(() => {\n if (isControlled && !Object.is(controlledState, internalState.state)) {\n dispatch({ type: SYNC_STATE, state: controlledState });\n }\n }, [controlledState, internalState.state, isControlled]);\n return [state, dispatch];\n}\nexport {\n useControllableState,\n useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-callback-ref/src/use-callback-ref.tsx\nimport * as React from \"react\";\nfunction useCallbackRef(callback) {\n const callbackRef = React.useRef(callback);\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => (...args) => callbackRef.current?.(...args), []);\n}\nexport {\n useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-escape-keydown/src/use-escape-keydown.tsx\nimport * as React from \"react\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nfunction useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n React.useEffect(() => {\n const handleKeyDown = (event) => {\n if (event.key === \"Escape\") {\n onEscapeKeyDown(event);\n }\n };\n ownerDocument.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n }, [onEscapeKeyDown, ownerDocument]);\n}\nexport {\n useEscapeKeydown\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dismissable-layer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DISMISSABLE_LAYER_NAME = \"DismissableLayer\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n layers: /* @__PURE__ */ new Set(),\n layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n branches: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n const focusOutside = useFocusOutside((event) => {\n const target = event.target;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = \"none\";\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...layerProps,\n ref: composedRefs,\n style: {\n pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n ...props.style\n },\n onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n onPointerDownCapture: composeEventHandlers(\n props.onPointerDownCapture,\n pointerDownOutside.onPointerDownCapture\n )\n }\n );\n }\n);\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\nvar BRANCH_NAME = \"DismissableLayerBranch\";\nvar DismissableLayerBranch = React.forwardRef((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n});\nDismissableLayerBranch.displayName = BRANCH_NAME;\nfunction usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {\n });\n React.useEffect(() => {\n const handlePointerDown = (event) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n let handleAndDispatchPointerDownOutsideEvent2 = function() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n };\n var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n const eventDetail = { originalEvent: event };\n if (event.pointerType === \"touch\") {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent2();\n }\n } else {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true\n };\n}\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n const handleFocusOutside = useCallbackRef(onFocusOutside);\n const isFocusInsideReactTreeRef = React.useRef(false);\n React.useEffect(() => {\n const handleFocus = (event) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false\n });\n }\n };\n ownerDocument.addEventListener(\"focusin\", handleFocus);\n return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n return {\n onFocusCapture: () => isFocusInsideReactTreeRef.current = true,\n onBlurCapture: () => isFocusInsideReactTreeRef.current = false\n };\n}\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler, { once: true });\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n Branch,\n DismissableLayer,\n DismissableLayerBranch,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-scope.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AUTOFOCUS_ON_MOUNT = \"focusScope.autoFocusOnMount\";\nvar AUTOFOCUS_ON_UNMOUNT = \"focusScope.autoFocusOnUnmount\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar FOCUS_SCOPE_NAME = \"FocusScope\";\nvar FocusScope = React.forwardRef((props, forwardedRef) => {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n }\n }).current;\n React.useEffect(() => {\n if (trapped) {\n let handleFocusIn2 = function(event) {\n if (focusScope.paused || !container) return;\n const target = event.target;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleFocusOut2 = function(event) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget;\n if (relatedTarget === null) return;\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleMutations2 = function(mutations) {\n const focusedElement = document.activeElement;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n };\n var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2;\n document.addEventListener(\"focusin\", handleFocusIn2);\n document.addEventListener(\"focusout\", handleFocusOut2);\n const mutationObserver = new MutationObserver(handleMutations2);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n return () => {\n document.removeEventListener(\"focusin\", handleFocusIn2);\n document.removeEventListener(\"focusout\", handleFocusOut2);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n const handleKeyDown = React.useCallback(\n (event) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n const isTabKey = event.key === \"Tab\" && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement;\n if (isTabKey && focusedElement) {\n const container2 = event.currentTarget;\n const [first, last] = getTabbableEdges(container2);\n const hasTabbableElementsInside = first && last;\n if (!hasTabbableElementsInside) {\n if (focusedElement === container2) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n return /* @__PURE__ */ jsx(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });\n});\nFocusScope.displayName = FOCUS_SCOPE_NAME;\nfunction focusFirst(candidates, { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\nfunction getTabbableEdges(container) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last];\n}\nfunction getTabbableCandidates(container) {\n const nodes = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node) => {\n const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n }\n });\n while (walker.nextNode()) nodes.push(walker.currentNode);\n return nodes;\n}\nfunction findVisible(elements, container) {\n for (const element of elements) {\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\nfunction isHidden(node, { upTo }) {\n if (getComputedStyle(node).visibility === \"hidden\") return true;\n while (node) {\n if (upTo !== void 0 && node === upTo) return false;\n if (getComputedStyle(node).display === \"none\") return true;\n node = node.parentElement;\n }\n return false;\n}\nfunction isSelectableInput(element) {\n return element instanceof HTMLInputElement && \"select\" in element;\n}\nfunction focus(element, { select = false } = {}) {\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n element.focus({ preventScroll: true });\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\nvar focusScopesStack = createFocusScopesStack();\nfunction createFocusScopesStack() {\n let stack = [];\n return {\n add(focusScope) {\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n remove(focusScope) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n }\n };\n}\nfunction arrayRemove(array, item) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\nfunction removeLinks(items) {\n return items.filter((item) => item.tagName !== \"A\");\n}\nvar Root = FocusScope;\nexport {\n FocusScope,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/portal.tsx\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PORTAL_NAME = \"Portal\";\nvar Portal = React.forwardRef((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || mounted && globalThis?.document?.body;\n return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;\n});\nPortal.displayName = PORTAL_NAME;\nvar Root = Portal;\nexport {\n Portal,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/presence.tsx\nimport * as React2 from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// src/use-state-machine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// src/presence.tsx\nvar Presence = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === \"function\";\n return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n const [node, setNode] = React2.useState();\n const stylesRef = React2.useRef(null);\n const prevPresentRef = React2.useRef(present);\n const prevAnimationNameRef = React2.useRef(\"none\");\n const initialState = present ? \"mounted\" : \"unmounted\";\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: \"unmounted\",\n ANIMATION_OUT: \"unmountSuspended\"\n },\n unmountSuspended: {\n MOUNT: \"mounted\",\n ANIMATION_END: \"unmounted\"\n },\n unmounted: {\n MOUNT: \"mounted\"\n }\n });\n React2.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n }, [state]);\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n if (present) {\n send(\"MOUNT\");\n } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n send(\"UNMOUNT\");\n } else {\n const isAnimating = prevAnimationName !== currentAnimationName;\n if (wasPresent && isAnimating) {\n send(\"ANIMATION_OUT\");\n } else {\n send(\"UNMOUNT\");\n }\n }\n prevPresentRef.current = present;\n }\n }, [present, send]);\n useLayoutEffect(() => {\n if (node) {\n let timeoutId;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n const handleAnimationEnd = (event) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n send(\"ANIMATION_END\");\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = \"forwards\";\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === \"forwards\") {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event) => {\n if (event.target === node) {\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener(\"animationstart\", handleAnimationStart);\n node.addEventListener(\"animationcancel\", handleAnimationEnd);\n node.addEventListener(\"animationend\", handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener(\"animationstart\", handleAnimationStart);\n node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n node.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n } else {\n send(\"ANIMATION_END\");\n }\n }, [node, send]);\n return {\n isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n ref: React2.useCallback((node2) => {\n stylesRef.current = node2 ? getComputedStyle(node2) : null;\n setNode(node2);\n }, [])\n };\n}\nfunction getAnimationName(styles) {\n return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nvar Root = Presence;\nexport {\n Presence,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-guards.tsx\nimport * as React from \"react\";\nvar count = 0;\nfunction FocusGuards(props) {\n useFocusGuards();\n return props.children;\n}\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll(\"[data-radix-focus-guard]\");\n document.body.insertAdjacentElement(\"afterbegin\", edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement(\"beforeend\", edgeGuards[1] ?? createFocusGuard());\n count++;\n return () => {\n if (count === 1) {\n document.querySelectorAll(\"[data-radix-focus-guard]\").forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n}\nfunction createFocusGuard() {\n const element = document.createElement(\"span\");\n element.setAttribute(\"data-radix-focus-guard\", \"\");\n element.tabIndex = 0;\n element.style.outline = \"none\";\n element.style.opacity = \"0\";\n element.style.position = \"fixed\";\n element.style.pointerEvents = \"none\";\n return element;\n}\nexport {\n FocusGuards,\n FocusGuards as Root,\n useFocusGuards\n};\n//# sourceMappingURL=index.mjs.map\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n },\n },\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n * return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n // handle refs changes - added or removed\n useIsomorphicLayoutEffect(function () {\n var oldValue = currentValues.get(callbackRef);\n if (oldValue) {\n var prevRefs_1 = new Set(oldValue);\n var nextRefs_1 = new Set(refs);\n var current_1 = callbackRef.current;\n prevRefs_1.forEach(function (ref) {\n if (!nextRefs_1.has(ref)) {\n assignRef(ref, null);\n }\n });\n nextRefs_1.forEach(function (ref) {\n if (!prevRefs_1.has(ref)) {\n assignRef(ref, current_1);\n }\n });\n }\n currentValues.set(callbackRef, refs);\n }, [refs]);\n return callbackRef;\n}\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = __assign({ async: true, ssr: false }, options);\n return medium;\n}\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n if (!sideCar) {\n throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n }\n var Target = sideCar.read();\n if (!Target) {\n throw new Error('Sidecar medium not found');\n }\n return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n medium.useMedium(exported);\n return SideCar;\n}\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noRelative\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noRelative: noRelative, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","var currentNonce;\nexport var setNonce = function (nonce) {\n currentNonce = nonce;\n};\nexport var getNonce = function () {\n if (currentNonce) {\n return currentNonce;\n }\n if (typeof __webpack_nonce__ !== 'undefined') {\n return __webpack_nonce__;\n }\n return undefined;\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n if (!document)\n return null;\n var tag = document.createElement('style');\n tag.type = 'text/css';\n var nonce = getNonce();\n if (nonce) {\n tag.setAttribute('nonce', nonce);\n }\n return tag;\n}\nfunction injectStyles(tag, css) {\n // @ts-ignore\n if (tag.styleSheet) {\n // @ts-ignore\n tag.styleSheet.cssText = css;\n }\n else {\n tag.appendChild(document.createTextNode(css));\n }\n}\nfunction insertStyleTag(tag) {\n var head = document.head || document.getElementsByTagName('head')[0];\n head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n var counter = 0;\n var stylesheet = null;\n return {\n add: function (style) {\n if (counter == 0) {\n if ((stylesheet = makeStyleTag())) {\n injectStyles(stylesheet, style);\n insertStyleTag(stylesheet);\n }\n }\n counter++;\n },\n remove: function () {\n counter--;\n if (!counter && stylesheet) {\n stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n stylesheet = null;\n }\n },\n };\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n var sheet = stylesheetSingleton();\n return function (styles, isDynamic) {\n React.useEffect(function () {\n sheet.add(styles);\n return function () {\n sheet.remove();\n };\n }, [styles && isDynamic]);\n };\n};\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n var useStyle = styleHookSingleton();\n var Sheet = function (_a) {\n var styles = _a.styles, dynamic = _a.dynamic;\n useStyle(styles, dynamic);\n return null;\n };\n return Sheet;\n};\n","export var zeroGap = {\n left: 0,\n top: 0,\n right: 0,\n gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n var cs = window.getComputedStyle(document.body);\n var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n if (gapMode === void 0) { gapMode = 'margin'; }\n if (typeof window === 'undefined') {\n return zeroGap;\n }\n var offsets = getOffset(gapMode);\n var documentWidth = document.documentElement.clientWidth;\n var windowWidth = window.innerWidth;\n return {\n left: offsets[0],\n top: offsets[1],\n right: offsets[2],\n gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\".concat(noScrollbarsClassName, \" {\\n overflow: hidden \").concat(important, \";\\n padding-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n body[\").concat(lockAttribute, \"] {\\n overflow: hidden \").concat(important, \";\\n overscroll-behavior: contain;\\n \").concat([\n allowRelative && \"position: relative \".concat(important, \";\"),\n gapMode === 'margin' &&\n \"\\n padding-left: \".concat(left, \"px;\\n padding-top: \").concat(top, \"px;\\n padding-right: \").concat(right, \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n \"),\n gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n ]\n .filter(Boolean)\n .join(''), \"\\n }\\n \\n .\").concat(zeroRightClassName, \" {\\n right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" {\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n right: 0 \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n margin-right: 0 \").concat(important, \";\\n }\\n \\n body[\").concat(lockAttribute, \"] {\\n \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n }\\n\");\n};\nvar getCurrentUseCounter = function () {\n var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n React.useEffect(function () {\n document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n return function () {\n var newCounter = getCurrentUseCounter() - 1;\n if (newCounter <= 0) {\n document.body.removeAttribute(lockAttribute);\n }\n else {\n document.body.setAttribute(lockAttribute, newCounter.toString());\n }\n };\n }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n useLockAttribute();\n /*\n gap will be measured on every component mount\n however it will be used only by the \"first\" invocation\n due to singleton nature of <Style\n */\n var gap = React.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);\n return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });\n};\n","var passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n return true;\n },\n });\n // @ts-ignore\n window.addEventListener('test', options, options);\n // @ts-ignore\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n","var alwaysContainsScroll = function (node) {\n // textarea will always _contain_ scroll inside self. It only can be hidden\n return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n if (!(node instanceof Element)) {\n return false;\n }\n var styles = window.getComputedStyle(node);\n return (\n // not-not-scrollable\n styles[overflow] !== 'hidden' &&\n // contains scroll inside self\n !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n var ownerDocument = node.ownerDocument;\n var current = node;\n do {\n // Skip over shadow root\n if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n current = current.host;\n }\n var isScrollable = elementCouldBeScrolled(axis, current);\n if (isScrollable) {\n var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];\n if (scrollHeight > clientHeight) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n if (!target) {\n break;\n }\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n var parent_1 = target.parentNode;\n // we will \"bubble\" from ShadowDom in case we are, or just to the parent in normal case\n // this is the same logic used in focus-lock\n target = (parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1);\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(styleSingleton)[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n // allow drag selection (iOS); check if selection's anchorNode is the same as target or contains target\n var selection = window.getSelection();\n var anchorNode = selection && selection.anchorNode;\n var isTouchingSelection = anchorNode ? anchorNode === target || anchorNode.contains(target) : false;\n if (isTouchingSelection) {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n var shadowParent = null;\n while (node !== null) {\n if (node instanceof ShadowRoot) {\n shadowParent = node.host;\n node = node.host;\n }\n node = node.parentNode;\n }\n return shadowParent;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","var getDefaultParent = function (originalTarget) {\n if (typeof document === 'undefined') {\n return null;\n }\n var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n return targets\n .map(function (target) {\n if (parent.contains(target)) {\n return target;\n }\n var correctedTarget = unwrapHost(target);\n if (correctedTarget && parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n return null;\n })\n .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n var markerCounter = markerMap[markerName];\n var hiddenNodes = [];\n var elementsToKeep = new Set();\n var elementsToStop = new Set(targets);\n var keep = function (el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n keep(el.parentNode);\n };\n targets.forEach(keep);\n var deep = function (parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n Array.prototype.forEach.call(parent.children, function (node) {\n if (elementsToKeep.has(node)) {\n deep(node);\n }\n else {\n try {\n var attr = node.getAttribute(controlAttribute);\n var alreadyHidden = attr !== null && attr !== 'false';\n var counterValue = (counterMap.get(node) || 0) + 1;\n var markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenNodes.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledNodes.set(node, true);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, 'true');\n }\n if (!alreadyHidden) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n catch (e) {\n console.error('aria-hidden: cannot operate on ', node, e);\n }\n }\n });\n };\n deep(parentNode);\n elementsToKeep.clear();\n lockCount++;\n return function () {\n hiddenNodes.forEach(function (node) {\n var counterValue = counterMap.get(node) - 1;\n var markerValue = markerCounter.get(node) - 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n if (!counterValue) {\n if (!uncontrolledNodes.has(node)) {\n node.removeAttribute(controlAttribute);\n }\n uncontrolledNodes.delete(node);\n }\n if (!markerValue) {\n node.removeAttribute(markerName);\n }\n });\n lockCount--;\n if (!lockCount) {\n // clear\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledNodes = new WeakMap();\n markerMap = {};\n }\n };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n // we should not hide aria-live elements - https://github.com/theKashey/aria-hidden/issues/10\n // and script elements, as they have no impact on accessibility.\n targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live], script')));\n return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-inert-ed'; }\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-suppressed'; }\n return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContext, createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = (props) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME\n });\n return /* @__PURE__ */ jsx(\n DialogProvider,\n {\n scope: __scopeDialog,\n triggerRef,\n contentRef,\n contentId: useId(),\n titleId: useId(),\n descriptionId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children\n }\n );\n};\nDialog.displayName = DIALOG_NAME;\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar DialogPortal = (props) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n};\nDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n }\n);\nDialogOverlay.displayName = OVERLAY_NAME;\nvar Slot = createSlot(\"DialogOverlay.RemoveScroll\");\nvar DialogOverlayImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n ...overlayProps,\n ref: forwardedRef,\n style: { pointerEvents: \"auto\", ...overlayProps.style }\n }\n ) })\n );\n }\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nDialogContent.displayName = CONTENT_NAME;\nvar DialogContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (isRightClick) event.preventDefault();\n }),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault()\n )\n }\n );\n }\n);\nvar DialogContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar DialogContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n useFocusGuards();\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n role: \"dialog\",\n id: context.contentId,\n \"aria-describedby\": context.descriptionId,\n \"aria-labelledby\": context.titleId,\n \"data-state\": getState(context.open),\n ...contentProps,\n ref: composedRefs,\n onDismiss: () => context.onOpenChange(false)\n }\n )\n }\n ),\n /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(TitleWarning, { titleId: context.titleId }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })\n ] })\n ] });\n }\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n }\n);\nDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n }\n);\nDialogDescription.displayName = DESCRIPTION_NAME;\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nDialogClose.displayName = CLOSE_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar TITLE_WARNING_NAME = \"DialogTitleWarning\";\nvar [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"dialog\"\n});\nvar TitleWarning = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n return null;\n};\nvar DESCRIPTION_WARNING_NAME = \"DialogDescriptionWarning\";\nvar DescriptionWarning = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute(\"aria-describedby\");\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n return null;\n};\nvar Root = Dialog;\nvar Trigger = DialogTrigger;\nvar Portal = DialogPortal;\nvar Overlay = DialogOverlay;\nvar Content = DialogContent;\nvar Title = DialogTitle;\nvar Description = DialogDescription;\nvar Close = DialogClose;\nexport {\n Close,\n Content,\n Description,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n Overlay,\n Portal,\n Root,\n Title,\n Trigger,\n WarningProvider,\n createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity data-[state=open]:bg-accent data-[state=open]:text-muted-foreground hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col space-y-1.5 text-center sm:text-left\", className)} {...props} />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className)} {...props} />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n },\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","import React from 'react';\n\nvar isCheckBoxInput = (element) => element.type === 'checkbox';\n\nvar isDateObject = (value) => value instanceof Date;\n\nvar isNullOrUndefined = (value) => value == null;\n\nconst isObjectType = (value) => typeof value === 'object';\nvar isObject = (value) => !isNullOrUndefined(value) &&\n !Array.isArray(value) &&\n isObjectType(value) &&\n !isDateObject(value);\n\nvar getEventValue = (event) => isObject(event) && event.target\n ? isCheckBoxInput(event.target)\n ? event.target.checked\n : event.target.value\n : event;\n\nvar getNodeParentName = (name) => name.substring(0, name.search(/\\.\\d+(\\.|$)/)) || name;\n\nvar isNameInFieldArray = (names, name) => names.has(getNodeParentName(name));\n\nvar isPlainObject = (tempObject) => {\n const prototypeCopy = tempObject.constructor && tempObject.constructor.prototype;\n return (isObject(prototypeCopy) && prototypeCopy.hasOwnProperty('isPrototypeOf'));\n};\n\nvar isWeb = typeof window !== 'undefined' &&\n typeof window.HTMLElement !== 'undefined' &&\n typeof document !== 'undefined';\n\nfunction cloneObject(data) {\n if (data instanceof Date) {\n return new Date(data);\n }\n const isFileListInstance = typeof FileList !== 'undefined' && data instanceof FileList;\n if (isWeb && (data instanceof Blob || isFileListInstance)) {\n return data;\n }\n const isArray = Array.isArray(data);\n if (!isArray && !(isObject(data) && isPlainObject(data))) {\n return data;\n }\n const copy = isArray ? [] : Object.create(Object.getPrototypeOf(data));\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n copy[key] = cloneObject(data[key]);\n }\n }\n return copy;\n}\n\nvar isKey = (value) => /^\\w*$/.test(value);\n\nvar isUndefined = (val) => val === undefined;\n\nvar compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];\n\nvar stringToPath = (input) => compact(input.replace(/[\"|']|\\]/g, '').split(/\\.|\\[/));\n\nvar get = (object, path, defaultValue) => {\n if (!path || !isObject(object)) {\n return defaultValue;\n }\n const result = (isKey(path) ? [path] : stringToPath(path)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], object);\n return isUndefined(result) || result === object\n ? isUndefined(object[path])\n ? defaultValue\n : object[path]\n : result;\n};\n\nvar isBoolean = (value) => typeof value === 'boolean';\n\nvar isFunction = (value) => typeof value === 'function';\n\nvar set = (object, path, value) => {\n let index = -1;\n const tempPath = isKey(path) ? [path] : stringToPath(path);\n const length = tempPath.length;\n const lastIndex = length - 1;\n while (++index < length) {\n const key = tempPath[index];\n let newValue = value;\n if (index !== lastIndex) {\n const objValue = object[key];\n newValue =\n isObject(objValue) || Array.isArray(objValue)\n ? objValue\n : !isNaN(+tempPath[index + 1])\n ? []\n : {};\n }\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return;\n }\n object[key] = newValue;\n object = object[key];\n }\n};\n\nconst EVENTS = {\n BLUR: 'blur',\n FOCUS_OUT: 'focusout',\n CHANGE: 'change',\n};\nconst VALIDATION_MODE = {\n onBlur: 'onBlur',\n onChange: 'onChange',\n onSubmit: 'onSubmit',\n onTouched: 'onTouched',\n all: 'all',\n};\nconst INPUT_VALIDATION_RULES = {\n max: 'max',\n min: 'min',\n maxLength: 'maxLength',\n minLength: 'minLength',\n pattern: 'pattern',\n required: 'required',\n validate: 'validate',\n};\n\n/**\n * Separate context for `control` to prevent unnecessary rerenders.\n * Internal hooks that only need control use this instead of full form context.\n */\nconst HookFormControlContext = React.createContext(null);\nHookFormControlContext.displayName = 'HookFormControlContext';\n/**\n * @internal Internal hook to access only control from context.\n */\nconst useFormControlContext = () => React.useContext(HookFormControlContext);\n\nvar getProxyFormState = (formState, control, localProxyFormState, isRoot = true) => {\n const result = {\n defaultValues: control._defaultValues,\n };\n for (const key in formState) {\n Object.defineProperty(result, key, {\n get: () => {\n const _key = key;\n if (control._proxyFormState[_key] !== VALIDATION_MODE.all) {\n control._proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;\n }\n localProxyFormState && (localProxyFormState[_key] = true);\n return formState[_key];\n },\n });\n }\n return result;\n};\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\n/**\n * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformstate) • [Demo](https://codesandbox.io/s/useformstate-75xly)\n *\n * @param props - include options on specify fields to subscribe. {@link UseFormStateReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, control } = useForm({\n * defaultValues: {\n * firstName: \"firstName\"\n * }});\n * const { dirtyFields } = useFormState({\n * control\n * });\n * const onSubmit = (data) => console.log(data);\n *\n * return (\n * <form onSubmit={handleSubmit(onSubmit)}>\n * <input {...register(\"firstName\")} placeholder=\"First Name\" />\n * {dirtyFields.firstName && <p>Field is dirty.</p>}\n * <input type=\"submit\" />\n * </form>\n * );\n * }\n * ```\n */\nfunction useFormState(props) {\n const formControl = useFormControlContext();\n const { control = formControl, disabled, name, exact } = props || {};\n const [formState, updateFormState] = React.useState(control._formState);\n const _localProxyFormState = React.useRef({\n isDirty: false,\n isLoading: false,\n dirtyFields: false,\n touchedFields: false,\n validatingFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n });\n useIsomorphicLayoutEffect(() => control._subscribe({\n name,\n formState: _localProxyFormState.current,\n exact,\n callback: (formState) => {\n !disabled &&\n updateFormState({\n ...control._formState,\n ...formState,\n });\n },\n }), [name, disabled, exact]);\n React.useEffect(() => {\n _localProxyFormState.current.isValid && control._setValid(true);\n }, [control]);\n return React.useMemo(() => getProxyFormState(formState, control, _localProxyFormState.current, false), [formState, control]);\n}\n\nvar isString = (value) => typeof value === 'string';\n\nvar generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) => {\n if (isString(names)) {\n isGlobal && _names.watch.add(names);\n return get(formValues, names, defaultValue);\n }\n if (Array.isArray(names)) {\n return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName),\n get(formValues, fieldName)));\n }\n isGlobal && (_names.watchAll = true);\n return formValues;\n};\n\nvar isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);\n\nfunction deepEqual(object1, object2, _internal_visited = new WeakSet()) {\n if (isPrimitive(object1) || isPrimitive(object2)) {\n return Object.is(object1, object2);\n }\n if (isDateObject(object1) && isDateObject(object2)) {\n return Object.is(object1.getTime(), object2.getTime());\n }\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n if (_internal_visited.has(object1) || _internal_visited.has(object2)) {\n return true;\n }\n _internal_visited.add(object1);\n _internal_visited.add(object2);\n for (const key of keys1) {\n const val1 = object1[key];\n if (!keys2.includes(key)) {\n return false;\n }\n if (key !== 'ref') {\n const val2 = object2[key];\n if ((isDateObject(val1) && isDateObject(val2)) ||\n (isObject(val1) && isObject(val2)) ||\n (Array.isArray(val1) && Array.isArray(val2))\n ? !deepEqual(val1, val2, _internal_visited)\n : !Object.is(val1, val2)) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * name: \"fieldName\"\n * control,\n * })\n * ```\n */\nfunction useWatch(props) {\n const formControl = useFormControlContext();\n const { control = formControl, name, defaultValue, disabled, exact, compute, } = props || {};\n const _defaultValue = React.useRef(defaultValue);\n const _compute = React.useRef(compute);\n const _computeFormValues = React.useRef(undefined);\n const _prevControl = React.useRef(control);\n const _prevName = React.useRef(name);\n _compute.current = compute;\n const [value, updateValue] = React.useState(() => {\n const defaultValue = control._getWatch(name, _defaultValue.current);\n return _compute.current ? _compute.current(defaultValue) : defaultValue;\n });\n const getCurrentOutput = React.useCallback((values) => {\n const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n return _compute.current ? _compute.current(formValues) : formValues;\n }, [control._formValues, control._names, name]);\n const refreshValue = React.useCallback((values) => {\n if (!disabled) {\n const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n if (_compute.current) {\n const computedFormValues = _compute.current(formValues);\n if (!deepEqual(computedFormValues, _computeFormValues.current)) {\n updateValue(computedFormValues);\n _computeFormValues.current = computedFormValues;\n }\n }\n else {\n updateValue(formValues);\n }\n }\n }, [control._formValues, control._names, disabled, name]);\n useIsomorphicLayoutEffect(() => {\n if (_prevControl.current !== control ||\n !deepEqual(_prevName.current, name)) {\n _prevControl.current = control;\n _prevName.current = name;\n refreshValue();\n }\n return control._subscribe({\n name,\n formState: {\n values: true,\n },\n exact,\n callback: (formState) => {\n refreshValue(formState.values);\n },\n });\n }, [control, exact, name, refreshValue]);\n React.useEffect(() => control._removeUnmounted());\n // If name or control changed for this render, synchronously reflect the\n // latest value so callers (like useController) see the correct value\n // immediately on the same render.\n // Optimize: Check control reference first before expensive deepEqual\n const controlChanged = _prevControl.current !== control;\n const prevName = _prevName.current;\n // Cache the computed output to avoid duplicate calls within the same render\n // We include shouldReturnImmediate in deps to ensure proper recomputation\n const computedOutput = React.useMemo(() => {\n if (disabled) {\n return null;\n }\n const nameChanged = !controlChanged && !deepEqual(prevName, name);\n const shouldReturnImmediate = controlChanged || nameChanged;\n return shouldReturnImmediate ? getCurrentOutput() : null;\n }, [disabled, controlChanged, name, prevName, getCurrentOutput]);\n return computedOutput !== null ? computedOutput : value;\n}\n\n/**\n * Custom hook to work with controlled component, this function provide you with both form and field level state. Re-render is isolated at the hook level.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller) • [Demo](https://codesandbox.io/s/usecontroller-0o8px)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns field properties, field and form state. {@link UseControllerReturn}\n *\n * @example\n * ```tsx\n * function Input(props) {\n * const { field, fieldState, formState } = useController(props);\n * return (\n * <div>\n * <input {...field} placeholder={props.name} />\n * <p>{fieldState.isTouched && \"Touched\"}</p>\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n * </div>\n * );\n * }\n * ```\n */\nfunction useController(props) {\n const formControl = useFormControlContext();\n const { name, disabled, control = formControl, shouldUnregister, defaultValue, exact = true, } = props;\n const isArrayField = isNameInFieldArray(control._names.array, name);\n const defaultValueMemo = React.useMemo(() => get(control._formValues, name, get(control._defaultValues, name, defaultValue)), [control, name, defaultValue]);\n const value = useWatch({\n control,\n name,\n defaultValue: defaultValueMemo,\n exact,\n });\n const formState = useFormState({\n control,\n name,\n exact,\n });\n const _props = React.useRef(props);\n const _previousNameRef = React.useRef(undefined);\n const _registerProps = React.useRef(control.register(name, {\n ...props.rules,\n value,\n ...(isBoolean(props.disabled) ? { disabled: props.disabled } : {}),\n }));\n _props.current = props;\n const fieldState = React.useMemo(() => Object.defineProperties({}, {\n invalid: {\n enumerable: true,\n get: () => !!get(formState.errors, name),\n },\n isDirty: {\n enumerable: true,\n get: () => !!get(formState.dirtyFields, name),\n },\n isTouched: {\n enumerable: true,\n get: () => !!get(formState.touchedFields, name),\n },\n isValidating: {\n enumerable: true,\n get: () => !!get(formState.validatingFields, name),\n },\n error: {\n enumerable: true,\n get: () => get(formState.errors, name),\n },\n }), [formState, name]);\n const onChange = React.useCallback((event) => _registerProps.current.onChange({\n target: {\n value: getEventValue(event),\n name: name,\n },\n type: EVENTS.CHANGE,\n }), [name]);\n const onBlur = React.useCallback(() => _registerProps.current.onBlur({\n target: {\n value: get(control._formValues, name),\n name: name,\n },\n type: EVENTS.BLUR,\n }), [name, control._formValues]);\n const ref = React.useCallback((elm) => {\n const field = get(control._fields, name);\n if (field && field._f && elm) {\n field._f.ref = {\n focus: () => isFunction(elm.focus) && elm.focus(),\n select: () => isFunction(elm.select) && elm.select(),\n setCustomValidity: (message) => isFunction(elm.setCustomValidity) && elm.setCustomValidity(message),\n reportValidity: () => isFunction(elm.reportValidity) && elm.reportValidity(),\n };\n }\n }, [control._fields, name]);\n const field = React.useMemo(() => ({\n name,\n value,\n ...(isBoolean(disabled) || formState.disabled\n ? { disabled: formState.disabled || disabled }\n : {}),\n onChange,\n onBlur,\n ref,\n }), [name, disabled, formState.disabled, onChange, onBlur, ref, value]);\n React.useEffect(() => {\n const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;\n const previousName = _previousNameRef.current;\n if (previousName && previousName !== name && !isArrayField) {\n control.unregister(previousName);\n }\n control.register(name, {\n ..._props.current.rules,\n ...(isBoolean(_props.current.disabled)\n ? { disabled: _props.current.disabled }\n : {}),\n });\n const updateMounted = (name, value) => {\n const field = get(control._fields, name);\n if (field && field._f) {\n field._f.mount = value;\n }\n };\n updateMounted(name, true);\n if (_shouldUnregisterField) {\n const value = cloneObject(get(control._options.defaultValues, name, _props.current.defaultValue));\n set(control._defaultValues, name, value);\n if (isUndefined(get(control._formValues, name))) {\n set(control._formValues, name, value);\n }\n }\n !isArrayField && control.register(name);\n _previousNameRef.current = name;\n return () => {\n (isArrayField\n ? _shouldUnregisterField && !control._state.action\n : _shouldUnregisterField)\n ? control.unregister(name)\n : updateMounted(name, false);\n };\n }, [name, control, isArrayField, shouldUnregister]);\n React.useEffect(() => {\n control._setDisabledField({\n disabled,\n name,\n });\n }, [disabled, name, control]);\n return React.useMemo(() => ({\n field,\n formState,\n fieldState,\n }), [field, formState, fieldState]);\n}\n\n/**\n * Component based on `useController` hook to work with controlled component.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller/controller) • [Demo](https://codesandbox.io/s/react-hook-form-v6-controller-ts-jwyzw) • [Video](https://www.youtube.com/watch?v=N2UNk_UCVyA)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns provide field handler functions, field and form state.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control } = useForm<FormValues>({\n * defaultValues: {\n * test: \"\"\n * }\n * });\n *\n * return (\n * <form>\n * <Controller\n * control={control}\n * name=\"test\"\n * render={({ field: { onChange, onBlur, value, ref }, formState, fieldState }) => (\n * <>\n * <input\n * onChange={onChange} // send value to hook form\n * onBlur={onBlur} // notify when input is touched\n * value={value} // return updated value\n * ref={ref} // set ref for focus management\n * />\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n * <p>{fieldState.isTouched ? \"touched\" : \"\"}</p>\n * </>\n * )}\n * />\n * </form>\n * );\n * }\n * ```\n */\nconst Controller = (props) => props.render(useController(props));\n\nconst flatten = (obj) => {\n const output = {};\n for (const key of Object.keys(obj)) {\n if (isObjectType(obj[key]) && obj[key] !== null) {\n const nested = flatten(obj[key]);\n for (const nestedKey of Object.keys(nested)) {\n output[`${key}.${nestedKey}`] = nested[nestedKey];\n }\n }\n else {\n output[key] = obj[key];\n }\n }\n return output;\n};\n\nconst HookFormContext = React.createContext(null);\nHookFormContext.displayName = 'HookFormContext';\n/**\n * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @returns return all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * <FormProvider {...methods} >\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\n * <NestedInput />\n * <input type=\"submit\" />\n * </form>\n * </FormProvider>\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst useFormContext = () => React.useContext(HookFormContext);\n/**\n * A provider component that propagates the `useForm` methods to all children components via [React Context](https://react.dev/reference/react/useContext) API. To be used with {@link useFormContext}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @param props - all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * <FormProvider {...methods} >\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\n * <NestedInput />\n * <input type=\"submit\" />\n * </form>\n * </FormProvider>\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst FormProvider = (props) => {\n const { children, watch, getValues, getFieldState, setError, clearErrors, setValue, trigger, formState, resetField, reset, handleSubmit, unregister, control, register, setFocus, subscribe, } = props;\n return (React.createElement(HookFormContext.Provider, { value: React.useMemo(() => ({\n watch,\n getValues,\n getFieldState,\n setError,\n clearErrors,\n setValue,\n trigger,\n formState,\n resetField,\n reset,\n handleSubmit,\n unregister,\n control,\n register,\n setFocus,\n subscribe,\n }), [\n clearErrors,\n control,\n formState,\n getFieldState,\n getValues,\n handleSubmit,\n register,\n reset,\n resetField,\n setError,\n setFocus,\n setValue,\n subscribe,\n trigger,\n unregister,\n watch,\n ]) },\n React.createElement(HookFormControlContext.Provider, { value: control }, children)));\n};\n\nconst POST_REQUEST = 'post';\n/**\n * Form component to manage submission.\n *\n * @param props - to setup submission detail. {@link FormProps}\n *\n * @returns form component or headless render prop.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control, formState: { errors } } = useForm();\n *\n * return (\n * <Form action=\"/api\" control={control}>\n * <input {...register(\"name\")} />\n * <p>{errors?.root?.server && 'Server error'}</p>\n * <button>Submit</button>\n * </Form>\n * );\n * }\n * ```\n */\nfunction Form(props) {\n const methods = useFormContext();\n const [mounted, setMounted] = React.useState(false);\n const { control = methods.control, onSubmit, children, action, method = POST_REQUEST, headers, encType, onError, render, onSuccess, validateStatus, ...rest } = props;\n const submit = async (event) => {\n let hasError = false;\n let type = '';\n await control.handleSubmit(async (data) => {\n const formData = new FormData();\n let formDataJson = '';\n try {\n formDataJson = JSON.stringify(data);\n }\n catch (_a) { }\n const flattenFormValues = flatten(control._formValues);\n for (const key in flattenFormValues) {\n formData.append(key, flattenFormValues[key]);\n }\n if (onSubmit) {\n await onSubmit({\n data,\n event,\n method,\n formData,\n formDataJson,\n });\n }\n if (action) {\n try {\n const shouldStringifySubmissionData = [\n headers && headers['Content-Type'],\n encType,\n ].some((value) => value && value.includes('json'));\n const response = await fetch(String(action), {\n method,\n headers: {\n ...headers,\n ...(encType && encType !== 'multipart/form-data'\n ? { 'Content-Type': encType }\n : {}),\n },\n body: shouldStringifySubmissionData ? formDataJson : formData,\n });\n if (response &&\n (validateStatus\n ? !validateStatus(response.status)\n : response.status < 200 || response.status >= 300)) {\n hasError = true;\n onError && onError({ response });\n type = String(response.status);\n }\n else {\n onSuccess && onSuccess({ response });\n }\n }\n catch (error) {\n hasError = true;\n onError && onError({ error });\n }\n }\n })(event);\n if (hasError && props.control) {\n props.control._subjects.state.next({\n isSubmitSuccessful: false,\n });\n props.control.setError('root.server', {\n type,\n });\n }\n };\n React.useEffect(() => {\n setMounted(true);\n }, []);\n return render ? (React.createElement(React.Fragment, null, render({\n submit,\n }))) : (React.createElement(\"form\", { noValidate: mounted, action: action, method: method, encType: encType, onSubmit: submit, ...rest }, children));\n}\n\nconst FormStateSubscribe = ({ control, disabled, exact, name, render, }) => render(useFormState({ control, name, disabled, exact }));\n\nvar appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria\n ? {\n ...errors[name],\n types: {\n ...(errors[name] && errors[name].types ? errors[name].types : {}),\n [type]: message || true,\n },\n }\n : {};\n\nvar convertToArrayPayload = (value) => (Array.isArray(value) ? value : [value]);\n\nvar createSubject = () => {\n let _observers = [];\n const next = (value) => {\n for (const observer of _observers) {\n observer.next && observer.next(value);\n }\n };\n const subscribe = (observer) => {\n _observers.push(observer);\n return {\n unsubscribe: () => {\n _observers = _observers.filter((o) => o !== observer);\n },\n };\n };\n const unsubscribe = () => {\n _observers = [];\n };\n return {\n get observers() {\n return _observers;\n },\n next,\n subscribe,\n unsubscribe,\n };\n};\n\nfunction extractFormValues(fieldsState, formValues) {\n const values = {};\n for (const key in fieldsState) {\n if (fieldsState.hasOwnProperty(key)) {\n const fieldState = fieldsState[key];\n const fieldValue = formValues[key];\n if (fieldState && isObject(fieldState) && fieldValue) {\n const nestedFieldsState = extractFormValues(fieldState, fieldValue);\n if (isObject(nestedFieldsState)) {\n values[key] = nestedFieldsState;\n }\n }\n else if (fieldsState[key]) {\n values[key] = fieldValue;\n }\n }\n }\n return values;\n}\n\nvar isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;\n\nvar isFileInput = (element) => element.type === 'file';\n\nvar isHTMLElement = (value) => {\n if (!isWeb) {\n return false;\n }\n const owner = value ? value.ownerDocument : 0;\n return (value instanceof\n (owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement));\n};\n\nvar isMultipleSelect = (element) => element.type === `select-multiple`;\n\nvar isRadioInput = (element) => element.type === 'radio';\n\nvar isRadioOrCheckbox = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);\n\nvar live = (ref) => isHTMLElement(ref) && ref.isConnected;\n\nfunction baseGet(object, updatePath) {\n const length = updatePath.slice(0, -1).length;\n let index = 0;\n while (index < length) {\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\n }\n return object;\n}\nfunction isEmptyArray(obj) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && !isUndefined(obj[key])) {\n return false;\n }\n }\n return true;\n}\nfunction unset(object, path) {\n const paths = Array.isArray(path)\n ? path\n : isKey(path)\n ? [path]\n : stringToPath(path);\n const childObject = paths.length === 1 ? object : baseGet(object, paths);\n const index = paths.length - 1;\n const key = paths[index];\n if (childObject) {\n delete childObject[key];\n }\n if (index !== 0 &&\n ((isObject(childObject) && isEmptyObject(childObject)) ||\n (Array.isArray(childObject) && isEmptyArray(childObject)))) {\n unset(object, paths.slice(0, -1));\n }\n return object;\n}\n\nvar objectHasFunction = (data) => {\n for (const key in data) {\n if (isFunction(data[key])) {\n return true;\n }\n }\n return false;\n};\n\nfunction isTraversable(value) {\n return Array.isArray(value) || (isObject(value) && !objectHasFunction(value));\n}\nfunction markFieldsDirty(data, fields = {}) {\n for (const key in data) {\n const value = data[key];\n if (isTraversable(value)) {\n fields[key] = Array.isArray(value) ? [] : {};\n markFieldsDirty(value, fields[key]);\n }\n else if (!isUndefined(value)) {\n fields[key] = true;\n }\n }\n return fields;\n}\nfunction getDirtyFields(data, formValues, dirtyFieldsFromValues) {\n if (!dirtyFieldsFromValues) {\n dirtyFieldsFromValues = markFieldsDirty(formValues);\n }\n for (const key in data) {\n const value = data[key];\n if (isTraversable(value)) {\n if (isUndefined(formValues) || isPrimitive(dirtyFieldsFromValues[key])) {\n dirtyFieldsFromValues[key] = markFieldsDirty(value, Array.isArray(value) ? [] : {});\n }\n else {\n getDirtyFields(value, isNullOrUndefined(formValues) ? {} : formValues[key], dirtyFieldsFromValues[key]);\n }\n }\n else {\n const formValue = formValues[key];\n dirtyFieldsFromValues[key] = !deepEqual(value, formValue);\n }\n }\n return dirtyFieldsFromValues;\n}\n\nconst defaultResult = {\n value: false,\n isValid: false,\n};\nconst validResult = { value: true, isValid: true };\nvar getCheckboxValue = (options) => {\n if (Array.isArray(options)) {\n if (options.length > 1) {\n const values = options\n .filter((option) => option && option.checked && !option.disabled)\n .map((option) => option.value);\n return { value: values, isValid: !!values.length };\n }\n return options[0].checked && !options[0].disabled\n ? // @ts-expect-error expected to work in the browser\n options[0].attributes && !isUndefined(options[0].attributes.value)\n ? isUndefined(options[0].value) || options[0].value === ''\n ? validResult\n : { value: options[0].value, isValid: true }\n : validResult\n : defaultResult;\n }\n return defaultResult;\n};\n\nvar getFieldValueAs = (value, { valueAsNumber, valueAsDate, setValueAs }) => isUndefined(value)\n ? value\n : valueAsNumber\n ? value === ''\n ? NaN\n : value\n ? +value\n : value\n : valueAsDate && isString(value)\n ? new Date(value)\n : setValueAs\n ? setValueAs(value)\n : value;\n\nconst defaultReturn = {\n isValid: false,\n value: null,\n};\nvar getRadioValue = (options) => Array.isArray(options)\n ? options.reduce((previous, option) => option && option.checked && !option.disabled\n ? {\n isValid: true,\n value: option.value,\n }\n : previous, defaultReturn)\n : defaultReturn;\n\nfunction getFieldValue(_f) {\n const ref = _f.ref;\n if (isFileInput(ref)) {\n return ref.files;\n }\n if (isRadioInput(ref)) {\n return getRadioValue(_f.refs).value;\n }\n if (isMultipleSelect(ref)) {\n return [...ref.selectedOptions].map(({ value }) => value);\n }\n if (isCheckBoxInput(ref)) {\n return getCheckboxValue(_f.refs).value;\n }\n return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);\n}\n\nvar getResolverOptions = (fieldsNames, _fields, criteriaMode, shouldUseNativeValidation) => {\n const fields = {};\n for (const name of fieldsNames) {\n const field = get(_fields, name);\n field && set(fields, name, field._f);\n }\n return {\n criteriaMode,\n names: [...fieldsNames],\n fields,\n shouldUseNativeValidation,\n };\n};\n\nvar isRegex = (value) => value instanceof RegExp;\n\nvar getRuleValue = (rule) => isUndefined(rule)\n ? rule\n : isRegex(rule)\n ? rule.source\n : isObject(rule)\n ? isRegex(rule.value)\n ? rule.value.source\n : rule.value\n : rule;\n\nvar getValidationModes = (mode) => ({\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\n isOnBlur: mode === VALIDATION_MODE.onBlur,\n isOnChange: mode === VALIDATION_MODE.onChange,\n isOnAll: mode === VALIDATION_MODE.all,\n isOnTouch: mode === VALIDATION_MODE.onTouched,\n});\n\nconst ASYNC_FUNCTION = 'AsyncFunction';\nvar hasPromiseValidation = (fieldReference) => !!fieldReference &&\n !!fieldReference.validate &&\n !!((isFunction(fieldReference.validate) &&\n fieldReference.validate.constructor.name === ASYNC_FUNCTION) ||\n (isObject(fieldReference.validate) &&\n Object.values(fieldReference.validate).find((validateFunction) => validateFunction.constructor.name === ASYNC_FUNCTION)));\n\nvar hasValidation = (options) => options.mount &&\n (options.required ||\n options.min ||\n options.max ||\n options.maxLength ||\n options.minLength ||\n options.pattern ||\n options.validate);\n\nvar isWatched = (name, _names, isBlurEvent) => !isBlurEvent &&\n (_names.watchAll ||\n _names.watch.has(name) ||\n [..._names.watch].some((watchName) => name.startsWith(watchName) &&\n /^\\.\\w+/.test(name.slice(watchName.length))));\n\nconst iterateFieldsByAction = (fields, action, fieldsNames, abortEarly) => {\n for (const key of fieldsNames || Object.keys(fields)) {\n const field = get(fields, key);\n if (field) {\n const { _f, ...currentField } = field;\n if (_f) {\n if (_f.refs && _f.refs[0] && action(_f.refs[0], key) && !abortEarly) {\n return true;\n }\n else if (_f.ref && action(_f.ref, _f.name) && !abortEarly) {\n return true;\n }\n else {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n }\n else if (isObject(currentField)) {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n }\n }\n return;\n};\n\nfunction schemaErrorLookup(errors, _fields, name) {\n const error = get(errors, name);\n if (error || isKey(name)) {\n return {\n error,\n name,\n };\n }\n const names = name.split('.');\n while (names.length) {\n const fieldName = names.join('.');\n const field = get(_fields, fieldName);\n const foundError = get(errors, fieldName);\n if (field && !Array.isArray(field) && name !== fieldName) {\n return { name };\n }\n if (foundError && foundError.type) {\n return {\n name: fieldName,\n error: foundError,\n };\n }\n if (foundError && foundError.root && foundError.root.type) {\n return {\n name: `${fieldName}.root`,\n error: foundError.root,\n };\n }\n names.pop();\n }\n return {\n name,\n };\n}\n\nvar shouldRenderFormState = (formStateData, _proxyFormState, updateFormState, isRoot) => {\n updateFormState(formStateData);\n const { name, ...formState } = formStateData;\n return (isEmptyObject(formState) ||\n Object.keys(formState).length >= Object.keys(_proxyFormState).length ||\n Object.keys(formState).find((key) => _proxyFormState[key] ===\n (!isRoot || VALIDATION_MODE.all)));\n};\n\nvar shouldSubscribeByName = (name, signalName, exact) => !name ||\n !signalName ||\n name === signalName ||\n convertToArrayPayload(name).some((currentName) => currentName &&\n (exact\n ? currentName === signalName\n : currentName.startsWith(signalName) ||\n signalName.startsWith(currentName)));\n\nvar skipValidation = (isBlurEvent, isTouched, isSubmitted, reValidateMode, mode) => {\n if (mode.isOnAll) {\n return false;\n }\n else if (!isSubmitted && mode.isOnTouch) {\n return !(isTouched || isBlurEvent);\n }\n else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {\n return !isBlurEvent;\n }\n else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {\n return isBlurEvent;\n }\n return true;\n};\n\nvar unsetEmptyArray = (ref, name) => !compact(get(ref, name)).length && unset(ref, name);\n\nvar updateFieldArrayRootError = (errors, error, name) => {\n const fieldArrayErrors = convertToArrayPayload(get(errors, name));\n set(fieldArrayErrors, 'root', error[name]);\n set(errors, name, fieldArrayErrors);\n return errors;\n};\n\nfunction getValidateError(result, ref, type = 'validate') {\n if (isString(result) ||\n (Array.isArray(result) && result.every(isString)) ||\n (isBoolean(result) && !result)) {\n return {\n type,\n message: isString(result) ? result : '',\n ref,\n };\n }\n}\n\nvar getValueAndMessage = (validationData) => isObject(validationData) && !isRegex(validationData)\n ? validationData\n : {\n value: validationData,\n message: '',\n };\n\nvar validateField = async (field, disabledFieldNames, formValues, validateAllFieldCriteria, shouldUseNativeValidation, isFieldArray) => {\n const { ref, refs, required, maxLength, minLength, min, max, pattern, validate, name, valueAsNumber, mount, } = field._f;\n const inputValue = get(formValues, name);\n if (!mount || disabledFieldNames.has(name)) {\n return {};\n }\n const inputRef = refs ? refs[0] : ref;\n const setCustomValidity = (message) => {\n if (shouldUseNativeValidation && inputRef.reportValidity) {\n inputRef.setCustomValidity(isBoolean(message) ? '' : message || '');\n inputRef.reportValidity();\n }\n };\n const error = {};\n const isRadio = isRadioInput(ref);\n const isCheckBox = isCheckBoxInput(ref);\n const isRadioOrCheckbox = isRadio || isCheckBox;\n const isEmpty = ((valueAsNumber || isFileInput(ref)) &&\n isUndefined(ref.value) &&\n isUndefined(inputValue)) ||\n (isHTMLElement(ref) && ref.value === '') ||\n inputValue === '' ||\n (Array.isArray(inputValue) && !inputValue.length);\n const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);\n const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\n error[name] = {\n type: exceedMax ? maxType : minType,\n message,\n ref,\n ...appendErrorsCurry(exceedMax ? maxType : minType, message),\n };\n };\n if (isFieldArray\n ? !Array.isArray(inputValue) || !inputValue.length\n : required &&\n ((!isRadioOrCheckbox && (isEmpty || isNullOrUndefined(inputValue))) ||\n (isBoolean(inputValue) && !inputValue) ||\n (isCheckBox && !getCheckboxValue(refs).isValid) ||\n (isRadio && !getRadioValue(refs).isValid))) {\n const { value, message } = isString(required)\n ? { value: !!required, message: required }\n : getValueAndMessage(required);\n if (value) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.required,\n message,\n ref: inputRef,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {\n let exceedMax;\n let exceedMin;\n const maxOutput = getValueAndMessage(max);\n const minOutput = getValueAndMessage(min);\n if (!isNullOrUndefined(inputValue) && !isNaN(inputValue)) {\n const valueNumber = ref.valueAsNumber ||\n (inputValue ? +inputValue : inputValue);\n if (!isNullOrUndefined(maxOutput.value)) {\n exceedMax = valueNumber > maxOutput.value;\n }\n if (!isNullOrUndefined(minOutput.value)) {\n exceedMin = valueNumber < minOutput.value;\n }\n }\n else {\n const valueDate = ref.valueAsDate || new Date(inputValue);\n const convertTimeToDate = (time) => new Date(new Date().toDateString() + ' ' + time);\n const isTime = ref.type == 'time';\n const isWeek = ref.type == 'week';\n if (isString(maxOutput.value) && inputValue) {\n exceedMax = isTime\n ? convertTimeToDate(inputValue) > convertTimeToDate(maxOutput.value)\n : isWeek\n ? inputValue > maxOutput.value\n : valueDate > new Date(maxOutput.value);\n }\n if (isString(minOutput.value) && inputValue) {\n exceedMin = isTime\n ? convertTimeToDate(inputValue) < convertTimeToDate(minOutput.value)\n : isWeek\n ? inputValue < minOutput.value\n : valueDate < new Date(minOutput.value);\n }\n }\n if (exceedMax || exceedMin) {\n getMinMaxMessage(!!exceedMax, maxOutput.message, minOutput.message, INPUT_VALIDATION_RULES.max, INPUT_VALIDATION_RULES.min);\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name].message);\n return error;\n }\n }\n }\n if ((maxLength || minLength) &&\n !isEmpty &&\n (isString(inputValue) || (isFieldArray && Array.isArray(inputValue)))) {\n const maxLengthOutput = getValueAndMessage(maxLength);\n const minLengthOutput = getValueAndMessage(minLength);\n const exceedMax = !isNullOrUndefined(maxLengthOutput.value) &&\n inputValue.length > +maxLengthOutput.value;\n const exceedMin = !isNullOrUndefined(minLengthOutput.value) &&\n inputValue.length < +minLengthOutput.value;\n if (exceedMax || exceedMin) {\n getMinMaxMessage(exceedMax, maxLengthOutput.message, minLengthOutput.message);\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name].message);\n return error;\n }\n }\n }\n if (pattern && !isEmpty && isString(inputValue)) {\n const { value: patternValue, message } = getValueAndMessage(pattern);\n if (isRegex(patternValue) && !inputValue.match(patternValue)) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.pattern,\n message,\n ref,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n if (validate) {\n if (isFunction(validate)) {\n const result = await validate(inputValue, formValues);\n const validateError = getValidateError(result, inputRef);\n if (validateError) {\n error[name] = {\n ...validateError,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.validate, validateError.message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(validateError.message);\n return error;\n }\n }\n }\n else if (isObject(validate)) {\n let validationResult = {};\n for (const key in validate) {\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\n break;\n }\n const validateError = getValidateError(await validate[key](inputValue, formValues), inputRef, key);\n if (validateError) {\n validationResult = {\n ...validateError,\n ...appendErrorsCurry(key, validateError.message),\n };\n setCustomValidity(validateError.message);\n if (validateAllFieldCriteria) {\n error[name] = validationResult;\n }\n }\n }\n if (!isEmptyObject(validationResult)) {\n error[name] = {\n ref: inputRef,\n ...validationResult,\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n }\n setCustomValidity(true);\n return error;\n};\n\nconst defaultOptions = {\n mode: VALIDATION_MODE.onSubmit,\n reValidateMode: VALIDATION_MODE.onChange,\n shouldFocusError: true,\n};\nfunction createFormControl(props = {}) {\n let _options = {\n ...defaultOptions,\n ...props,\n };\n let _formState = {\n submitCount: 0,\n isDirty: false,\n isReady: false,\n isLoading: isFunction(_options.defaultValues),\n isValidating: false,\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n touchedFields: {},\n dirtyFields: {},\n validatingFields: {},\n errors: _options.errors || {},\n disabled: _options.disabled || false,\n };\n let _fields = {};\n let _defaultValues = isObject(_options.defaultValues) || isObject(_options.values)\n ? cloneObject(_options.defaultValues || _options.values) || {}\n : {};\n let _formValues = _options.shouldUnregister\n ? {}\n : cloneObject(_defaultValues);\n let _state = {\n action: false,\n mount: false,\n watch: false,\n keepIsValid: false,\n };\n let _names = {\n mount: new Set(),\n disabled: new Set(),\n unMount: new Set(),\n array: new Set(),\n watch: new Set(),\n };\n let delayErrorCallback;\n let timer = 0;\n const defaultProxyFormState = {\n isDirty: false,\n dirtyFields: false,\n validatingFields: false,\n touchedFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n };\n const _proxyFormState = {\n ...defaultProxyFormState,\n };\n let _proxySubscribeFormState = {\n ..._proxyFormState,\n };\n const _subjects = {\n array: createSubject(),\n state: createSubject(),\n };\n const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;\n const debounce = (callback) => (wait) => {\n clearTimeout(timer);\n timer = setTimeout(callback, wait);\n };\n const _setValid = async (shouldUpdateValid) => {\n if (_state.keepIsValid) {\n return;\n }\n if (!_options.disabled &&\n (_proxyFormState.isValid ||\n _proxySubscribeFormState.isValid ||\n shouldUpdateValid)) {\n let isValid;\n if (_options.resolver) {\n isValid = isEmptyObject((await _runSchema()).errors);\n _updateIsValidating();\n }\n else {\n isValid = await executeBuiltInValidation(_fields, true);\n }\n if (isValid !== _formState.isValid) {\n _subjects.state.next({\n isValid,\n });\n }\n }\n };\n const _updateIsValidating = (names, isValidating) => {\n if (!_options.disabled &&\n (_proxyFormState.isValidating ||\n _proxyFormState.validatingFields ||\n _proxySubscribeFormState.isValidating ||\n _proxySubscribeFormState.validatingFields)) {\n (names || Array.from(_names.mount)).forEach((name) => {\n if (name) {\n isValidating\n ? set(_formState.validatingFields, name, isValidating)\n : unset(_formState.validatingFields, name);\n }\n });\n _subjects.state.next({\n validatingFields: _formState.validatingFields,\n isValidating: !isEmptyObject(_formState.validatingFields),\n });\n }\n };\n const _setFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndState = true) => {\n if (args && method && !_options.disabled) {\n _state.action = true;\n if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {\n const fieldValues = method(get(_fields, name), args.argA, args.argB);\n shouldSetValues && set(_fields, name, fieldValues);\n }\n if (shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.errors, name))) {\n const errors = method(get(_formState.errors, name), args.argA, args.argB);\n shouldSetValues && set(_formState.errors, name, errors);\n unsetEmptyArray(_formState.errors, name);\n }\n if ((_proxyFormState.touchedFields ||\n _proxySubscribeFormState.touchedFields) &&\n shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.touchedFields, name))) {\n const touchedFields = method(get(_formState.touchedFields, name), args.argA, args.argB);\n shouldSetValues && set(_formState.touchedFields, name, touchedFields);\n }\n if (_proxyFormState.dirtyFields || _proxySubscribeFormState.dirtyFields) {\n _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\n }\n _subjects.state.next({\n name,\n isDirty: _getDirty(name, values),\n dirtyFields: _formState.dirtyFields,\n errors: _formState.errors,\n isValid: _formState.isValid,\n });\n }\n else {\n set(_formValues, name, values);\n }\n };\n const updateErrors = (name, error) => {\n set(_formState.errors, name, error);\n _subjects.state.next({\n errors: _formState.errors,\n });\n };\n const _setErrors = (errors) => {\n _formState.errors = errors;\n _subjects.state.next({\n errors: _formState.errors,\n isValid: false,\n });\n };\n const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {\n const field = get(_fields, name);\n if (field) {\n const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);\n isUndefined(defaultValue) ||\n (ref && ref.defaultChecked) ||\n shouldSkipSetValueAs\n ? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f))\n : setFieldValue(name, defaultValue);\n _state.mount && !_state.action && _setValid();\n }\n };\n const updateTouchAndDirty = (name, fieldValue, isBlurEvent, shouldDirty, shouldRender) => {\n let shouldUpdateField = false;\n let isPreviousDirty = false;\n const output = {\n name,\n };\n if (!_options.disabled) {\n if (!isBlurEvent || shouldDirty) {\n if (_proxyFormState.isDirty || _proxySubscribeFormState.isDirty) {\n isPreviousDirty = _formState.isDirty;\n _formState.isDirty = output.isDirty = _getDirty();\n shouldUpdateField = isPreviousDirty !== output.isDirty;\n }\n const isCurrentFieldPristine = deepEqual(get(_defaultValues, name), fieldValue);\n isPreviousDirty = !!get(_formState.dirtyFields, name);\n isCurrentFieldPristine\n ? unset(_formState.dirtyFields, name)\n : set(_formState.dirtyFields, name, true);\n output.dirtyFields = _formState.dirtyFields;\n shouldUpdateField =\n shouldUpdateField ||\n ((_proxyFormState.dirtyFields ||\n _proxySubscribeFormState.dirtyFields) &&\n isPreviousDirty !== !isCurrentFieldPristine);\n }\n if (isBlurEvent) {\n const isPreviousFieldTouched = get(_formState.touchedFields, name);\n if (!isPreviousFieldTouched) {\n set(_formState.touchedFields, name, isBlurEvent);\n output.touchedFields = _formState.touchedFields;\n shouldUpdateField =\n shouldUpdateField ||\n ((_proxyFormState.touchedFields ||\n _proxySubscribeFormState.touchedFields) &&\n isPreviousFieldTouched !== isBlurEvent);\n }\n }\n shouldUpdateField && shouldRender && _subjects.state.next(output);\n }\n return shouldUpdateField ? output : {};\n };\n const shouldRenderByError = (name, isValid, error, fieldState) => {\n const previousFieldError = get(_formState.errors, name);\n const shouldUpdateValid = (_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n isBoolean(isValid) &&\n _formState.isValid !== isValid;\n if (_options.delayError && error) {\n delayErrorCallback = debounce(() => updateErrors(name, error));\n delayErrorCallback(_options.delayError);\n }\n else {\n clearTimeout(timer);\n delayErrorCallback = null;\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n if ((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||\n !isEmptyObject(fieldState) ||\n shouldUpdateValid) {\n const updatedFormState = {\n ...fieldState,\n ...(shouldUpdateValid && isBoolean(isValid) ? { isValid } : {}),\n errors: _formState.errors,\n name,\n };\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n _subjects.state.next(updatedFormState);\n }\n };\n const _runSchema = async (name) => {\n _updateIsValidating(name, true);\n const result = await _options.resolver(_formValues, _options.context, getResolverOptions(name || _names.mount, _fields, _options.criteriaMode, _options.shouldUseNativeValidation));\n return result;\n };\n const executeSchemaAndUpdateState = async (names) => {\n const { errors } = await _runSchema(names);\n _updateIsValidating(names);\n if (names) {\n for (const name of names) {\n const error = get(errors, name);\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n }\n else {\n _formState.errors = errors;\n }\n return errors;\n };\n const executeBuiltInValidation = async (fields, shouldOnlyCheckValid, context = {\n valid: true,\n }) => {\n for (const name in fields) {\n const field = fields[name];\n if (field) {\n const { _f, ...fieldValue } = field;\n if (_f) {\n const isFieldArrayRoot = _names.array.has(_f.name);\n const isPromiseFunction = field._f && hasPromiseValidation(field._f);\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([_f.name], true);\n }\n const fieldError = await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation && !shouldOnlyCheckValid, isFieldArrayRoot);\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([_f.name]);\n }\n if (fieldError[_f.name]) {\n context.valid = false;\n if (shouldOnlyCheckValid || props.shouldUseNativeValidation) {\n break;\n }\n }\n !shouldOnlyCheckValid &&\n (get(fieldError, _f.name)\n ? isFieldArrayRoot\n ? updateFieldArrayRootError(_formState.errors, fieldError, _f.name)\n : set(_formState.errors, _f.name, fieldError[_f.name])\n : unset(_formState.errors, _f.name));\n }\n !isEmptyObject(fieldValue) &&\n (await executeBuiltInValidation(fieldValue, shouldOnlyCheckValid, context));\n }\n }\n return context.valid;\n };\n const _removeUnmounted = () => {\n for (const name of _names.unMount) {\n const field = get(_fields, name);\n field &&\n (field._f.refs\n ? field._f.refs.every((ref) => !live(ref))\n : !live(field._f.ref)) &&\n unregister(name);\n }\n _names.unMount = new Set();\n };\n const _getDirty = (name, data) => !_options.disabled &&\n (name && data && set(_formValues, name, data),\n !deepEqual(getValues(), _defaultValues));\n const _getWatch = (names, defaultValue, isGlobal) => generateWatchOutput(names, _names, {\n ...(_state.mount\n ? _formValues\n : isUndefined(defaultValue)\n ? _defaultValues\n : isString(names)\n ? { [names]: defaultValue }\n : defaultValue),\n }, isGlobal, defaultValue);\n const _getFieldArray = (name) => compact(get(_state.mount ? _formValues : _defaultValues, name, _options.shouldUnregister ? get(_defaultValues, name, []) : []));\n const setFieldValue = (name, value, options = {}) => {\n const field = get(_fields, name);\n let fieldValue = value;\n if (field) {\n const fieldReference = field._f;\n if (fieldReference) {\n !fieldReference.disabled &&\n set(_formValues, name, getFieldValueAs(value, fieldReference));\n fieldValue =\n isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)\n ? ''\n : value;\n if (isMultipleSelect(fieldReference.ref)) {\n [...fieldReference.ref.options].forEach((optionRef) => (optionRef.selected = fieldValue.includes(optionRef.value)));\n }\n else if (fieldReference.refs) {\n if (isCheckBoxInput(fieldReference.ref)) {\n fieldReference.refs.forEach((checkboxRef) => {\n if (!checkboxRef.defaultChecked || !checkboxRef.disabled) {\n if (Array.isArray(fieldValue)) {\n checkboxRef.checked = !!fieldValue.find((data) => data === checkboxRef.value);\n }\n else {\n checkboxRef.checked =\n fieldValue === checkboxRef.value || !!fieldValue;\n }\n }\n });\n }\n else {\n fieldReference.refs.forEach((radioRef) => (radioRef.checked = radioRef.value === fieldValue));\n }\n }\n else if (isFileInput(fieldReference.ref)) {\n fieldReference.ref.value = '';\n }\n else {\n fieldReference.ref.value = fieldValue;\n if (!fieldReference.ref.type) {\n _subjects.state.next({\n name,\n values: cloneObject(_formValues),\n });\n }\n }\n }\n }\n (options.shouldDirty || options.shouldTouch) &&\n updateTouchAndDirty(name, fieldValue, options.shouldTouch, options.shouldDirty, true);\n options.shouldValidate && trigger(name);\n };\n const setValues = (name, value, options) => {\n for (const fieldKey in value) {\n if (!value.hasOwnProperty(fieldKey)) {\n return;\n }\n const fieldValue = value[fieldKey];\n const fieldName = name + '.' + fieldKey;\n const field = get(_fields, fieldName);\n (_names.array.has(name) ||\n isObject(fieldValue) ||\n (field && !field._f)) &&\n !isDateObject(fieldValue)\n ? setValues(fieldName, fieldValue, options)\n : setFieldValue(fieldName, fieldValue, options);\n }\n };\n const setValue = (name, value, options = {}) => {\n const field = get(_fields, name);\n const isFieldArray = _names.array.has(name);\n const cloneValue = cloneObject(value);\n set(_formValues, name, cloneValue);\n if (isFieldArray) {\n _subjects.array.next({\n name,\n values: cloneObject(_formValues),\n });\n if ((_proxyFormState.isDirty ||\n _proxyFormState.dirtyFields ||\n _proxySubscribeFormState.isDirty ||\n _proxySubscribeFormState.dirtyFields) &&\n options.shouldDirty) {\n _subjects.state.next({\n name,\n dirtyFields: getDirtyFields(_defaultValues, _formValues),\n isDirty: _getDirty(name, cloneValue),\n });\n }\n }\n else {\n field && !field._f && !isNullOrUndefined(cloneValue)\n ? setValues(name, cloneValue, options)\n : setFieldValue(name, cloneValue, options);\n }\n if (isWatched(name, _names)) {\n _subjects.state.next({\n ..._formState,\n name,\n values: cloneObject(_formValues),\n });\n }\n else {\n _subjects.state.next({\n name: _state.mount ? name : undefined,\n values: cloneObject(_formValues),\n });\n }\n };\n const onChange = async (event) => {\n _state.mount = true;\n const target = event.target;\n let name = target.name;\n let isFieldValueUpdated = true;\n const field = get(_fields, name);\n const _updateIsFieldValueUpdated = (fieldValue) => {\n isFieldValueUpdated =\n Number.isNaN(fieldValue) ||\n (isDateObject(fieldValue) && isNaN(fieldValue.getTime())) ||\n deepEqual(fieldValue, get(_formValues, name, fieldValue));\n };\n const validationModeBeforeSubmit = getValidationModes(_options.mode);\n const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\n if (field) {\n let error;\n let isValid;\n const fieldValue = target.type\n ? getFieldValue(field._f)\n : getEventValue(event);\n const isBlurEvent = event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;\n const shouldSkipValidation = (!hasValidation(field._f) &&\n !_options.resolver &&\n !get(_formState.errors, name) &&\n !field._f.deps) ||\n skipValidation(isBlurEvent, get(_formState.touchedFields, name), _formState.isSubmitted, validationModeAfterSubmit, validationModeBeforeSubmit);\n const watched = isWatched(name, _names, isBlurEvent);\n set(_formValues, name, fieldValue);\n if (isBlurEvent) {\n if (!target || !target.readOnly) {\n field._f.onBlur && field._f.onBlur(event);\n delayErrorCallback && delayErrorCallback(0);\n }\n }\n else if (field._f.onChange) {\n field._f.onChange(event);\n }\n const fieldState = updateTouchAndDirty(name, fieldValue, isBlurEvent);\n const shouldRender = !isEmptyObject(fieldState) || watched;\n !isBlurEvent &&\n _subjects.state.next({\n name,\n type: event.type,\n values: cloneObject(_formValues),\n });\n if (shouldSkipValidation) {\n if (_proxyFormState.isValid || _proxySubscribeFormState.isValid) {\n if (_options.mode === 'onBlur') {\n if (isBlurEvent) {\n _setValid();\n }\n }\n else if (!isBlurEvent) {\n _setValid();\n }\n }\n return (shouldRender &&\n _subjects.state.next({ name, ...(watched ? {} : fieldState) }));\n }\n !isBlurEvent && watched && _subjects.state.next({ ..._formState });\n if (_options.resolver) {\n const { errors } = await _runSchema([name]);\n _updateIsValidating([name]);\n _updateIsFieldValueUpdated(fieldValue);\n if (isFieldValueUpdated) {\n const previousErrorLookupResult = schemaErrorLookup(_formState.errors, _fields, name);\n const errorLookupResult = schemaErrorLookup(errors, _fields, previousErrorLookupResult.name || name);\n error = errorLookupResult.error;\n name = errorLookupResult.name;\n isValid = isEmptyObject(errors);\n }\n }\n else {\n _updateIsValidating([name], true);\n error = (await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation))[name];\n _updateIsValidating([name]);\n _updateIsFieldValueUpdated(fieldValue);\n if (isFieldValueUpdated) {\n if (error) {\n isValid = false;\n }\n else if (_proxyFormState.isValid ||\n _proxySubscribeFormState.isValid) {\n isValid = await executeBuiltInValidation(_fields, true);\n }\n }\n }\n if (isFieldValueUpdated) {\n field._f.deps &&\n (!Array.isArray(field._f.deps) || field._f.deps.length > 0) &&\n trigger(field._f.deps);\n shouldRenderByError(name, isValid, error, fieldState);\n }\n }\n };\n const _focusInput = (ref, key) => {\n if (get(_formState.errors, key) && ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n };\n const trigger = async (name, options = {}) => {\n let isValid;\n let validationResult;\n const fieldNames = convertToArrayPayload(name);\n if (_options.resolver) {\n const errors = await executeSchemaAndUpdateState(isUndefined(name) ? name : fieldNames);\n isValid = isEmptyObject(errors);\n validationResult = name\n ? !fieldNames.some((name) => get(errors, name))\n : isValid;\n }\n else if (name) {\n validationResult = (await Promise.all(fieldNames.map(async (fieldName) => {\n const field = get(_fields, fieldName);\n return await executeBuiltInValidation(field && field._f ? { [fieldName]: field } : field);\n }))).every(Boolean);\n !(!validationResult && !_formState.isValid) && _setValid();\n }\n else {\n validationResult = isValid = await executeBuiltInValidation(_fields);\n }\n _subjects.state.next({\n ...(!isString(name) ||\n ((_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n isValid !== _formState.isValid)\n ? {}\n : { name }),\n ...(_options.resolver || !name ? { isValid } : {}),\n errors: _formState.errors,\n });\n options.shouldFocus &&\n !validationResult &&\n iterateFieldsByAction(_fields, _focusInput, name ? fieldNames : _names.mount);\n return validationResult;\n };\n const getValues = (fieldNames, config) => {\n let values = {\n ...(_state.mount ? _formValues : _defaultValues),\n };\n if (config) {\n values = extractFormValues(config.dirtyFields ? _formState.dirtyFields : _formState.touchedFields, values);\n }\n return isUndefined(fieldNames)\n ? values\n : isString(fieldNames)\n ? get(values, fieldNames)\n : fieldNames.map((name) => get(values, name));\n };\n const getFieldState = (name, formState) => ({\n invalid: !!get((formState || _formState).errors, name),\n isDirty: !!get((formState || _formState).dirtyFields, name),\n error: get((formState || _formState).errors, name),\n isValidating: !!get(_formState.validatingFields, name),\n isTouched: !!get((formState || _formState).touchedFields, name),\n });\n const clearErrors = (name) => {\n name &&\n convertToArrayPayload(name).forEach((inputName) => unset(_formState.errors, inputName));\n _subjects.state.next({\n errors: name ? _formState.errors : {},\n });\n };\n const setError = (name, error, options) => {\n const ref = (get(_fields, name, { _f: {} })._f || {}).ref;\n const currentError = get(_formState.errors, name) || {};\n // Don't override existing error messages elsewhere in the object tree.\n const { ref: currentRef, message, type, ...restOfErrorTree } = currentError;\n set(_formState.errors, name, {\n ...restOfErrorTree,\n ...error,\n ref,\n });\n _subjects.state.next({\n name,\n errors: _formState.errors,\n isValid: false,\n });\n options && options.shouldFocus && ref && ref.focus && ref.focus();\n };\n const watch = (name, defaultValue) => isFunction(name)\n ? _subjects.state.subscribe({\n next: (payload) => 'values' in payload &&\n name(_getWatch(undefined, defaultValue), payload),\n })\n : _getWatch(name, defaultValue, true);\n const _subscribe = (props) => _subjects.state.subscribe({\n next: (formState) => {\n if (shouldSubscribeByName(props.name, formState.name, props.exact) &&\n shouldRenderFormState(formState, props.formState || _proxyFormState, _setFormState, props.reRenderRoot)) {\n props.callback({\n values: { ..._formValues },\n ..._formState,\n ...formState,\n defaultValues: _defaultValues,\n });\n }\n },\n }).unsubscribe;\n const subscribe = (props) => {\n _state.mount = true;\n _proxySubscribeFormState = {\n ..._proxySubscribeFormState,\n ...props.formState,\n };\n return _subscribe({\n ...props,\n formState: {\n ...defaultProxyFormState,\n ...props.formState,\n },\n });\n };\n const unregister = (name, options = {}) => {\n for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {\n _names.mount.delete(fieldName);\n _names.array.delete(fieldName);\n if (!options.keepValue) {\n unset(_fields, fieldName);\n unset(_formValues, fieldName);\n }\n !options.keepError && unset(_formState.errors, fieldName);\n !options.keepDirty && unset(_formState.dirtyFields, fieldName);\n !options.keepTouched && unset(_formState.touchedFields, fieldName);\n !options.keepIsValidating &&\n unset(_formState.validatingFields, fieldName);\n !_options.shouldUnregister &&\n !options.keepDefaultValue &&\n unset(_defaultValues, fieldName);\n }\n _subjects.state.next({\n values: cloneObject(_formValues),\n });\n _subjects.state.next({\n ..._formState,\n ...(!options.keepDirty ? {} : { isDirty: _getDirty() }),\n });\n !options.keepIsValid && _setValid();\n };\n const _setDisabledField = ({ disabled, name, }) => {\n if ((isBoolean(disabled) && _state.mount) ||\n !!disabled ||\n _names.disabled.has(name)) {\n const wasDisabled = _names.disabled.has(name);\n const isDisabled = !!disabled;\n const disabledStateChanged = wasDisabled !== isDisabled;\n disabled ? _names.disabled.add(name) : _names.disabled.delete(name);\n disabledStateChanged && _state.mount && !_state.action && _setValid();\n }\n };\n const register = (name, options = {}) => {\n let field = get(_fields, name);\n const disabledIsDefined = isBoolean(options.disabled) || isBoolean(_options.disabled);\n set(_fields, name, {\n ...(field || {}),\n _f: {\n ...(field && field._f ? field._f : { ref: { name } }),\n name,\n mount: true,\n ...options,\n },\n });\n _names.mount.add(name);\n if (field) {\n _setDisabledField({\n disabled: isBoolean(options.disabled)\n ? options.disabled\n : _options.disabled,\n name,\n });\n }\n else {\n updateValidAndValue(name, true, options.value);\n }\n return {\n ...(disabledIsDefined\n ? { disabled: options.disabled || _options.disabled }\n : {}),\n ...(_options.progressive\n ? {\n required: !!options.required,\n min: getRuleValue(options.min),\n max: getRuleValue(options.max),\n minLength: getRuleValue(options.minLength),\n maxLength: getRuleValue(options.maxLength),\n pattern: getRuleValue(options.pattern),\n }\n : {}),\n name,\n onChange,\n onBlur: onChange,\n ref: (ref) => {\n if (ref) {\n register(name, options);\n field = get(_fields, name);\n const fieldRef = isUndefined(ref.value)\n ? ref.querySelectorAll\n ? ref.querySelectorAll('input,select,textarea')[0] || ref\n : ref\n : ref;\n const radioOrCheckbox = isRadioOrCheckbox(fieldRef);\n const refs = field._f.refs || [];\n if (radioOrCheckbox\n ? refs.find((option) => option === fieldRef)\n : fieldRef === field._f.ref) {\n return;\n }\n set(_fields, name, {\n _f: {\n ...field._f,\n ...(radioOrCheckbox\n ? {\n refs: [\n ...refs.filter(live),\n fieldRef,\n ...(Array.isArray(get(_defaultValues, name)) ? [{}] : []),\n ],\n ref: { type: fieldRef.type, name },\n }\n : { ref: fieldRef }),\n },\n });\n updateValidAndValue(name, false, undefined, fieldRef);\n }\n else {\n field = get(_fields, name, {});\n if (field._f) {\n field._f.mount = false;\n }\n (_options.shouldUnregister || options.shouldUnregister) &&\n !(isNameInFieldArray(_names.array, name) && _state.action) &&\n _names.unMount.add(name);\n }\n },\n };\n };\n const _focusError = () => _options.shouldFocusError &&\n iterateFieldsByAction(_fields, _focusInput, _names.mount);\n const _disableForm = (disabled) => {\n if (isBoolean(disabled)) {\n _subjects.state.next({ disabled });\n iterateFieldsByAction(_fields, (ref, name) => {\n const currentField = get(_fields, name);\n if (currentField) {\n ref.disabled = currentField._f.disabled || disabled;\n if (Array.isArray(currentField._f.refs)) {\n currentField._f.refs.forEach((inputRef) => {\n inputRef.disabled = currentField._f.disabled || disabled;\n });\n }\n }\n }, 0, false);\n }\n };\n const handleSubmit = (onValid, onInvalid) => async (e) => {\n let onValidError = undefined;\n if (e) {\n e.preventDefault && e.preventDefault();\n e.persist &&\n e.persist();\n }\n let fieldValues = cloneObject(_formValues);\n _subjects.state.next({\n isSubmitting: true,\n });\n if (_options.resolver) {\n const { errors, values } = await _runSchema();\n _updateIsValidating();\n _formState.errors = errors;\n fieldValues = cloneObject(values);\n }\n else {\n await executeBuiltInValidation(_fields);\n }\n if (_names.disabled.size) {\n for (const name of _names.disabled) {\n unset(fieldValues, name);\n }\n }\n unset(_formState.errors, 'root');\n if (isEmptyObject(_formState.errors)) {\n _subjects.state.next({\n errors: {},\n });\n try {\n await onValid(fieldValues, e);\n }\n catch (error) {\n onValidError = error;\n }\n }\n else {\n if (onInvalid) {\n await onInvalid({ ..._formState.errors }, e);\n }\n _focusError();\n setTimeout(_focusError);\n }\n _subjects.state.next({\n isSubmitted: true,\n isSubmitting: false,\n isSubmitSuccessful: isEmptyObject(_formState.errors) && !onValidError,\n submitCount: _formState.submitCount + 1,\n errors: _formState.errors,\n });\n if (onValidError) {\n throw onValidError;\n }\n };\n const resetField = (name, options = {}) => {\n if (get(_fields, name)) {\n if (isUndefined(options.defaultValue)) {\n setValue(name, cloneObject(get(_defaultValues, name)));\n }\n else {\n setValue(name, options.defaultValue);\n set(_defaultValues, name, cloneObject(options.defaultValue));\n }\n if (!options.keepTouched) {\n unset(_formState.touchedFields, name);\n }\n if (!options.keepDirty) {\n unset(_formState.dirtyFields, name);\n _formState.isDirty = options.defaultValue\n ? _getDirty(name, cloneObject(get(_defaultValues, name)))\n : _getDirty();\n }\n if (!options.keepError) {\n unset(_formState.errors, name);\n _proxyFormState.isValid && _setValid();\n }\n _subjects.state.next({ ..._formState });\n }\n };\n const _reset = (formValues, keepStateOptions = {}) => {\n const updatedValues = formValues ? cloneObject(formValues) : _defaultValues;\n const cloneUpdatedValues = cloneObject(updatedValues);\n const isEmptyResetValues = isEmptyObject(formValues);\n const values = isEmptyResetValues ? _defaultValues : cloneUpdatedValues;\n if (!keepStateOptions.keepDefaultValues) {\n _defaultValues = updatedValues;\n }\n if (!keepStateOptions.keepValues) {\n if (keepStateOptions.keepDirtyValues) {\n const fieldsToCheck = new Set([\n ..._names.mount,\n ...Object.keys(getDirtyFields(_defaultValues, _formValues)),\n ]);\n for (const fieldName of Array.from(fieldsToCheck)) {\n const isDirty = get(_formState.dirtyFields, fieldName);\n const existingValue = get(_formValues, fieldName);\n const newValue = get(values, fieldName);\n if (isDirty && !isUndefined(existingValue)) {\n set(values, fieldName, existingValue);\n }\n else if (!isDirty && !isUndefined(newValue)) {\n setValue(fieldName, newValue);\n }\n }\n }\n else {\n if (isWeb && isUndefined(formValues)) {\n for (const name of _names.mount) {\n const field = get(_fields, name);\n if (field && field._f) {\n const fieldReference = Array.isArray(field._f.refs)\n ? field._f.refs[0]\n : field._f.ref;\n if (isHTMLElement(fieldReference)) {\n const form = fieldReference.closest('form');\n if (form) {\n form.reset();\n break;\n }\n }\n }\n }\n }\n if (keepStateOptions.keepFieldsRef) {\n for (const fieldName of _names.mount) {\n setValue(fieldName, get(values, fieldName));\n }\n }\n else {\n _fields = {};\n }\n }\n _formValues = _options.shouldUnregister\n ? keepStateOptions.keepDefaultValues\n ? cloneObject(_defaultValues)\n : {}\n : cloneObject(values);\n _subjects.array.next({\n values: { ...values },\n });\n _subjects.state.next({\n values: { ...values },\n });\n }\n _names = {\n mount: keepStateOptions.keepDirtyValues ? _names.mount : new Set(),\n unMount: new Set(),\n array: new Set(),\n disabled: new Set(),\n watch: new Set(),\n watchAll: false,\n focus: '',\n };\n _state.mount =\n !_proxyFormState.isValid ||\n !!keepStateOptions.keepIsValid ||\n !!keepStateOptions.keepDirtyValues ||\n (!_options.shouldUnregister && !isEmptyObject(values));\n _state.watch = !!_options.shouldUnregister;\n _state.keepIsValid = !!keepStateOptions.keepIsValid;\n _state.action = false;\n // Clear errors synchronously to prevent validation errors on subsequent submissions\n // This fixes the issue where form.reset() causes validation errors on subsequent\n // submissions in Next.js 16 with Server Actions\n if (!keepStateOptions.keepErrors) {\n _formState.errors = {};\n }\n _subjects.state.next({\n submitCount: keepStateOptions.keepSubmitCount\n ? _formState.submitCount\n : 0,\n isDirty: isEmptyResetValues\n ? false\n : keepStateOptions.keepDirty\n ? _formState.isDirty\n : !!(keepStateOptions.keepDefaultValues &&\n !deepEqual(formValues, _defaultValues)),\n isSubmitted: keepStateOptions.keepIsSubmitted\n ? _formState.isSubmitted\n : false,\n dirtyFields: isEmptyResetValues\n ? {}\n : keepStateOptions.keepDirtyValues\n ? keepStateOptions.keepDefaultValues && _formValues\n ? getDirtyFields(_defaultValues, _formValues)\n : _formState.dirtyFields\n : keepStateOptions.keepDefaultValues && formValues\n ? getDirtyFields(_defaultValues, formValues)\n : keepStateOptions.keepDirty\n ? _formState.dirtyFields\n : {},\n touchedFields: keepStateOptions.keepTouched\n ? _formState.touchedFields\n : {},\n errors: keepStateOptions.keepErrors ? _formState.errors : {},\n isSubmitSuccessful: keepStateOptions.keepIsSubmitSuccessful\n ? _formState.isSubmitSuccessful\n : false,\n isSubmitting: false,\n defaultValues: _defaultValues,\n });\n };\n const reset = (formValues, keepStateOptions) => _reset(isFunction(formValues)\n ? formValues(_formValues)\n : formValues, { ..._options.resetOptions, ...keepStateOptions });\n const setFocus = (name, options = {}) => {\n const field = get(_fields, name);\n const fieldReference = field && field._f;\n if (fieldReference) {\n const fieldRef = fieldReference.refs\n ? fieldReference.refs[0]\n : fieldReference.ref;\n if (fieldRef.focus) {\n // Use setTimeout to ensure focus happens after any pending state updates\n // This fixes the issue where setFocus doesn't work immediately after setError\n setTimeout(() => {\n fieldRef.focus();\n options.shouldSelect &&\n isFunction(fieldRef.select) &&\n fieldRef.select();\n });\n }\n }\n };\n const _setFormState = (updatedFormState) => {\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n };\n const _resetDefaultValues = () => isFunction(_options.defaultValues) &&\n _options.defaultValues().then((values) => {\n reset(values, _options.resetOptions);\n _subjects.state.next({\n isLoading: false,\n });\n });\n const methods = {\n control: {\n register,\n unregister,\n getFieldState,\n handleSubmit,\n setError,\n _subscribe,\n _runSchema,\n _updateIsValidating,\n _focusError,\n _getWatch,\n _getDirty,\n _setValid,\n _setFieldArray,\n _setDisabledField,\n _setErrors,\n _getFieldArray,\n _reset,\n _resetDefaultValues,\n _removeUnmounted,\n _disableForm,\n _subjects,\n _proxyFormState,\n get _fields() {\n return _fields;\n },\n get _formValues() {\n return _formValues;\n },\n get _state() {\n return _state;\n },\n set _state(value) {\n _state = value;\n },\n get _defaultValues() {\n return _defaultValues;\n },\n get _names() {\n return _names;\n },\n set _names(value) {\n _names = value;\n },\n get _formState() {\n return _formState;\n },\n get _options() {\n return _options;\n },\n set _options(value) {\n _options = {\n ..._options,\n ...value,\n };\n },\n },\n subscribe,\n trigger,\n register,\n handleSubmit,\n watch,\n setValue,\n getValues,\n reset,\n resetField,\n clearErrors,\n unregister,\n setError,\n setFocus,\n getFieldState,\n };\n return {\n ...methods,\n formControl: methods,\n };\n}\n\nvar generateId = () => {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = ((Math.random() * 16 + d) % 16) | 0;\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n};\n\nvar getFocusFieldName = (name, index, options = {}) => options.shouldFocus || isUndefined(options.shouldFocus)\n ? options.focusName ||\n `${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`\n : '';\n\nvar appendAt = (data, value) => [\n ...data,\n ...convertToArrayPayload(value),\n];\n\nvar fillEmptyArray = (value) => Array.isArray(value) ? value.map(() => undefined) : undefined;\n\nfunction insert(data, index, value) {\n return [\n ...data.slice(0, index),\n ...convertToArrayPayload(value),\n ...data.slice(index),\n ];\n}\n\nvar moveArrayAt = (data, from, to) => {\n if (!Array.isArray(data)) {\n return [];\n }\n if (isUndefined(data[to])) {\n data[to] = undefined;\n }\n data.splice(to, 0, data.splice(from, 1)[0]);\n return data;\n};\n\nvar prependAt = (data, value) => [\n ...convertToArrayPayload(value),\n ...convertToArrayPayload(data),\n];\n\nfunction removeAtIndexes(data, indexes) {\n let i = 0;\n const temp = [...data];\n for (const index of indexes) {\n temp.splice(index - i, 1);\n i++;\n }\n return compact(temp).length ? temp : [];\n}\nvar removeArrayAt = (data, index) => isUndefined(index)\n ? []\n : removeAtIndexes(data, convertToArrayPayload(index).sort((a, b) => a - b));\n\nvar swapArrayAt = (data, indexA, indexB) => {\n [data[indexA], data[indexB]] = [data[indexB], data[indexA]];\n};\n\nvar updateAt = (fieldValues, index, value) => {\n fieldValues[index] = value;\n return fieldValues;\n};\n\n/**\n * A custom hook that exposes convenient methods to perform operations with a list of dynamic inputs that need to be appended, updated, removed etc. • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn) • [Video](https://youtu.be/4MrbfGSFY2A)\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usefieldarray) • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn)\n *\n * @param props - useFieldArray props\n *\n * @returns methods - functions to manipulate with the Field Arrays (dynamic inputs) {@link UseFieldArrayReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, control, handleSubmit, reset, trigger, setError } = useForm({\n * defaultValues: {\n * test: []\n * }\n * });\n * const { fields, append } = useFieldArray({\n * control,\n * name: \"test\"\n * });\n *\n * return (\n * <form onSubmit={handleSubmit(data => console.log(data))}>\n * {fields.map((item, index) => (\n * <input key={item.id} {...register(`test.${index}.firstName`)} />\n * ))}\n * <button type=\"button\" onClick={() => append({ firstName: \"bill\" })}>\n * append\n * </button>\n * <input type=\"submit\" />\n * </form>\n * );\n * }\n * ```\n */\nfunction useFieldArray(props) {\n const formControl = useFormControlContext();\n const { control = formControl, name, keyName = 'id', shouldUnregister, rules, } = props;\n const [fields, setFields] = React.useState(control._getFieldArray(name));\n const ids = React.useRef(control._getFieldArray(name).map(generateId));\n const _actioned = React.useRef(false);\n control._names.array.add(name);\n React.useMemo(() => rules &&\n fields.length >= 0 &&\n control.register(name, rules), [control, name, fields.length, rules]);\n useIsomorphicLayoutEffect(() => control._subjects.array.subscribe({\n next: ({ values, name: fieldArrayName, }) => {\n if (fieldArrayName === name || !fieldArrayName) {\n const fieldValues = get(values, name);\n if (Array.isArray(fieldValues)) {\n setFields(fieldValues);\n ids.current = fieldValues.map(generateId);\n }\n }\n },\n }).unsubscribe, [control, name]);\n const updateValues = React.useCallback((updatedFieldArrayValues) => {\n _actioned.current = true;\n control._setFieldArray(name, updatedFieldArrayValues);\n }, [control, name]);\n const append = (value, options) => {\n const appendValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = appendAt(control._getFieldArray(name), appendValue);\n control._names.focus = getFocusFieldName(name, updatedFieldArrayValues.length - 1, options);\n ids.current = appendAt(ids.current, appendValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, appendAt, {\n argA: fillEmptyArray(value),\n });\n };\n const prepend = (value, options) => {\n const prependValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = prependAt(control._getFieldArray(name), prependValue);\n control._names.focus = getFocusFieldName(name, 0, options);\n ids.current = prependAt(ids.current, prependValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, prependAt, {\n argA: fillEmptyArray(value),\n });\n };\n const remove = (index) => {\n const updatedFieldArrayValues = removeArrayAt(control._getFieldArray(name), index);\n ids.current = removeArrayAt(ids.current, index);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n !Array.isArray(get(control._fields, name)) &&\n set(control._fields, name, undefined);\n control._setFieldArray(name, updatedFieldArrayValues, removeArrayAt, {\n argA: index,\n });\n };\n const insert$1 = (index, value, options) => {\n const insertValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = insert(control._getFieldArray(name), index, insertValue);\n control._names.focus = getFocusFieldName(name, index, options);\n ids.current = insert(ids.current, index, insertValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, insert, {\n argA: index,\n argB: fillEmptyArray(value),\n });\n };\n const swap = (indexA, indexB) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n swapArrayAt(updatedFieldArrayValues, indexA, indexB);\n swapArrayAt(ids.current, indexA, indexB);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, swapArrayAt, {\n argA: indexA,\n argB: indexB,\n }, false);\n };\n const move = (from, to) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n moveArrayAt(updatedFieldArrayValues, from, to);\n moveArrayAt(ids.current, from, to);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, moveArrayAt, {\n argA: from,\n argB: to,\n }, false);\n };\n const update = (index, value) => {\n const updateValue = cloneObject(value);\n const updatedFieldArrayValues = updateAt(control._getFieldArray(name), index, updateValue);\n ids.current = [...updatedFieldArrayValues].map((item, i) => !item || i === index ? generateId() : ids.current[i]);\n updateValues(updatedFieldArrayValues);\n setFields([...updatedFieldArrayValues]);\n control._setFieldArray(name, updatedFieldArrayValues, updateAt, {\n argA: index,\n argB: updateValue,\n }, true, false);\n };\n const replace = (value) => {\n const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));\n ids.current = updatedFieldArrayValues.map(generateId);\n updateValues([...updatedFieldArrayValues]);\n setFields([...updatedFieldArrayValues]);\n control._setFieldArray(name, [...updatedFieldArrayValues], (data) => data, {}, true, false);\n };\n React.useEffect(() => {\n control._state.action = false;\n isWatched(name, control._names) &&\n control._subjects.state.next({\n ...control._formState,\n });\n if (_actioned.current &&\n (!getValidationModes(control._options.mode).isOnSubmit ||\n control._formState.isSubmitted) &&\n !getValidationModes(control._options.reValidateMode).isOnSubmit) {\n if (control._options.resolver) {\n control._runSchema([name]).then((result) => {\n control._updateIsValidating([name]);\n const error = get(result.errors, name);\n const existingError = get(control._formState.errors, name);\n if (existingError\n ? (!error && existingError.type) ||\n (error &&\n (existingError.type !== error.type ||\n existingError.message !== error.message))\n : error && error.type) {\n error\n ? set(control._formState.errors, name, error)\n : unset(control._formState.errors, name);\n control._subjects.state.next({\n errors: control._formState.errors,\n });\n }\n });\n }\n else {\n const field = get(control._fields, name);\n if (field &&\n field._f &&\n !(getValidationModes(control._options.reValidateMode).isOnSubmit &&\n getValidationModes(control._options.mode).isOnSubmit)) {\n validateField(field, control._names.disabled, control._formValues, control._options.criteriaMode === VALIDATION_MODE.all, control._options.shouldUseNativeValidation, true).then((error) => !isEmptyObject(error) &&\n control._subjects.state.next({\n errors: updateFieldArrayRootError(control._formState.errors, error, name),\n }));\n }\n }\n }\n control._subjects.state.next({\n name,\n values: cloneObject(control._formValues),\n });\n control._names.focus &&\n iterateFieldsByAction(control._fields, (ref, key) => {\n if (control._names.focus &&\n key.startsWith(control._names.focus) &&\n ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n });\n control._names.focus = '';\n control._setValid();\n _actioned.current = false;\n }, [fields, name, control]);\n React.useEffect(() => {\n !get(control._formValues, name) && control._setFieldArray(name);\n return () => {\n const updateMounted = (name, value) => {\n const field = get(control._fields, name);\n if (field && field._f) {\n field._f.mount = value;\n }\n };\n control._options.shouldUnregister || shouldUnregister\n ? control.unregister(name)\n : updateMounted(name, false);\n };\n }, [name, control, keyName, shouldUnregister]);\n return {\n swap: React.useCallback(swap, [updateValues, name, control]),\n move: React.useCallback(move, [updateValues, name, control]),\n prepend: React.useCallback(prepend, [updateValues, name, control]),\n append: React.useCallback(append, [updateValues, name, control]),\n remove: React.useCallback(remove, [updateValues, name, control]),\n insert: React.useCallback(insert$1, [updateValues, name, control]),\n update: React.useCallback(update, [updateValues, name, control]),\n replace: React.useCallback(replace, [updateValues, name, control]),\n fields: React.useMemo(() => fields.map((field, index) => ({\n ...field,\n [keyName]: ids.current[index] || generateId(),\n })), [fields, keyName]),\n };\n}\n\n/**\n * Custom hook to manage the entire form.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useform) • [Demo](https://codesandbox.io/s/react-hook-form-get-started-ts-5ksmm) • [Video](https://www.youtube.com/watch?v=RkXv4AXXC_4)\n *\n * @param props - form configuration and validation parameters.\n *\n * @returns methods - individual functions to manage the form state. {@link UseFormReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, watch, formState: { errors } } = useForm();\n * const onSubmit = data => console.log(data);\n *\n * console.log(watch(\"example\"));\n *\n * return (\n * <form onSubmit={handleSubmit(onSubmit)}>\n * <input defaultValue=\"test\" {...register(\"example\")} />\n * <input {...register(\"exampleRequired\", { required: true })} />\n * {errors.exampleRequired && <span>This field is required</span>}\n * <button>Submit</button>\n * </form>\n * );\n * }\n * ```\n */\nfunction useForm(props = {}) {\n const _formControl = React.useRef(undefined);\n const _values = React.useRef(undefined);\n const [formState, updateFormState] = React.useState({\n isDirty: false,\n isValidating: false,\n isLoading: isFunction(props.defaultValues),\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n submitCount: 0,\n dirtyFields: {},\n touchedFields: {},\n validatingFields: {},\n errors: props.errors || {},\n disabled: props.disabled || false,\n isReady: false,\n defaultValues: isFunction(props.defaultValues)\n ? undefined\n : props.defaultValues,\n });\n if (!_formControl.current) {\n if (props.formControl) {\n _formControl.current = {\n ...props.formControl,\n formState,\n };\n if (props.defaultValues && !isFunction(props.defaultValues)) {\n props.formControl.reset(props.defaultValues, props.resetOptions);\n }\n }\n else {\n const { formControl, ...rest } = createFormControl(props);\n _formControl.current = {\n ...rest,\n formState,\n };\n }\n }\n const control = _formControl.current.control;\n control._options = props;\n useIsomorphicLayoutEffect(() => {\n const sub = control._subscribe({\n formState: control._proxyFormState,\n callback: () => updateFormState({ ...control._formState }),\n reRenderRoot: true,\n });\n updateFormState((data) => ({\n ...data,\n isReady: true,\n }));\n control._formState.isReady = true;\n return sub;\n }, [control]);\n React.useEffect(() => control._disableForm(props.disabled), [control, props.disabled]);\n React.useEffect(() => {\n if (props.mode) {\n control._options.mode = props.mode;\n }\n if (props.reValidateMode) {\n control._options.reValidateMode = props.reValidateMode;\n }\n }, [control, props.mode, props.reValidateMode]);\n React.useEffect(() => {\n if (props.errors) {\n control._setErrors(props.errors);\n control._focusError();\n }\n }, [control, props.errors]);\n React.useEffect(() => {\n props.shouldUnregister &&\n control._subjects.state.next({\n values: control._getWatch(),\n });\n }, [control, props.shouldUnregister]);\n React.useEffect(() => {\n if (control._proxyFormState.isDirty) {\n const isDirty = control._getDirty();\n if (isDirty !== formState.isDirty) {\n control._subjects.state.next({\n isDirty,\n });\n }\n }\n }, [control, formState.isDirty]);\n React.useEffect(() => {\n var _a;\n if (props.values && !deepEqual(props.values, _values.current)) {\n control._reset(props.values, {\n keepFieldsRef: true,\n ...control._options.resetOptions,\n });\n if (!((_a = control._options.resetOptions) === null || _a === void 0 ? void 0 : _a.keepIsValid)) {\n control._setValid();\n }\n _values.current = props.values;\n updateFormState((state) => ({ ...state }));\n }\n else {\n control._resetDefaultValues();\n }\n }, [control, props.values]);\n React.useEffect(() => {\n if (!control._state.mount) {\n control._setValid();\n control._state.mount = true;\n }\n if (control._state.watch) {\n control._state.watch = false;\n control._subjects.state.next({ ...control._formState });\n }\n control._removeUnmounted();\n });\n _formControl.current.formState = React.useMemo(() => getProxyFormState(formState, control), [control, formState]);\n return _formControl.current;\n}\n\n/**\n * Watch component that subscribes to form field changes and re-renders when watched fields update.\n *\n * @param control - The form control object from useForm\n * @param name - Can be field name, array of field names, or undefined to watch the entire form\n * @param disabled - Disable subscription\n * @param exact - Whether to watch exact field names or not\n * @param defaultValue - The default value to use if the field is not yet set\n * @param compute - Function to compute derived values from watched fields\n * @param render - The function that receives watched values and returns ReactNode\n * @returns The result of calling render function with watched values\n *\n * @example\n * The `Watch` component only re-render when the values of `foo`, `bar`, and `baz.qux` change.\n * The types of `foo`, `bar`, and `baz.qux` are precisely inferred.\n *\n * ```tsx\n * const { control } = useForm();\n *\n * <Watch\n * control={control}\n * names={['foo', 'bar', 'baz.qux']}\n * render={([foo, bar, baz_qux]) => <div>{foo}{bar}{baz_qux}</div>}\n * />\n * ```\n */\nconst Watch = (props) => props.render(useWatch({ name: props.names, ...props }));\n\nexport { Controller, Form, FormProvider, FormStateSubscribe, Watch, appendErrors, createFormControl, get, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };\n//# sourceMappingURL=index.esm.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/label.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Label\";\nvar Label = React.forwardRef((props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.label,\n {\n ...props,\n ref: forwardedRef,\n onMouseDown: (event) => {\n const target = event.target;\n if (target.closest(\"button, input, select, textarea\")) return;\n props.onMouseDown?.(event);\n if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n }\n }\n );\n});\nLabel.displayName = NAME;\nvar Root = Label;\nexport {\n Label,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst labelVariants = cva(\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\");\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root ref={ref} className={cn(labelVariants(), className)} {...props} />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { Controller, ControllerProps, FieldPath, FieldValues, FormProvider, useFormContext } from \"react-hook-form\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Label } from \"@/components/ui/label\";\n\nconst Form = FormProvider;\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>({} as FormFieldContextValue);\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext);\n const itemContext = React.useContext(FormItemContext);\n const { getFieldState, formState } = useFormContext();\n\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\");\n }\n\n const { id } = itemContext;\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n };\n};\n\ntype FormItemContextValue = {\n id: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>({} as FormItemContextValue);\n\nconst FormItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const id = React.useId();\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div ref={ref} className={cn(\"space-y-2\", className)} {...props} />\n </FormItemContext.Provider>\n );\n },\n);\nFormItem.displayName = \"FormItem\";\n\nconst FormLabel = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => {\n const { error, formItemId } = useFormField();\n\n return <Label ref={ref} className={cn(error && \"text-destructive\", className)} htmlFor={formItemId} {...props} />;\n});\nFormLabel.displayName = \"FormLabel\";\n\nconst FormControl = React.forwardRef<React.ElementRef<typeof Slot>, React.ComponentPropsWithoutRef<typeof Slot>>(\n ({ ...props }, ref) => {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField();\n\n return (\n <Slot\n ref={ref}\n id={formItemId}\n aria-describedby={!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`}\n aria-invalid={!!error}\n {...props}\n />\n );\n },\n);\nFormControl.displayName = \"FormControl\";\n\nconst FormDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => {\n const { formDescriptionId } = useFormField();\n\n return <p ref={ref} id={formDescriptionId} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />;\n },\n);\nFormDescription.displayName = \"FormDescription\";\n\nconst FormMessage = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, children, ...props }, ref) => {\n const { error, formMessageId } = useFormField();\n const body = error ? String(error?.message) : children;\n\n if (!body) {\n return null;\n }\n\n return (\n <p ref={ref} id={formMessageId} className={cn(\"text-sm font-medium text-destructive\", className)} {...props}>\n {body}\n </p>\n );\n },\n);\nFormMessage.displayName = \"FormMessage\";\n\nexport { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField };\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/collection-legacy.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n );\n const CollectionProvider = (props) => {\n const { scope, children } = props;\n const ref = React.useRef(null);\n const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...itemData });\n return () => void context.itemMap.delete(ref);\n });\n return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useCollection(scope) {\n const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n return getItems;\n }\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\n\n// src/collection.tsx\nimport React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n #keys;\n constructor(entries) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n set(key, value) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n insert(index, key, value) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n const size = this.size + (has ? 0 : 1);\n if (relativeIndex < 0) {\n actualIndex++;\n }\n const keys = [...this.#keys];\n let nextValue;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i];\n if (keys[i] === key) {\n nextKey = keys[i + 1];\n }\n if (has) {\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1];\n const currentValue = nextValue;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n with(index, key, value) {\n const copy = new _OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n before(key) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n after(key) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n first() {\n return this.entryAt(0);\n }\n last() {\n return this.entryAt(-1);\n }\n clear() {\n this.#keys = [];\n return super.clear();\n }\n delete(key) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n deleteAt(index) {\n const key = this.keyAt(index);\n if (key !== void 0) {\n return this.delete(key);\n }\n return false;\n }\n at(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return this.get(key);\n }\n }\n entryAt(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return [key, this.get(key)];\n }\n }\n indexOf(key) {\n return this.#keys.indexOf(key);\n }\n keyAt(index) {\n return at(this.#keys, index);\n }\n from(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n keyFrom(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n find(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return void 0;\n }\n findIndex(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n filter(predicate, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new _OrderedDict(entries);\n }\n map(callbackfn, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new _OrderedDict(entries);\n }\n reduce(...args) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0);\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n reduceRight(...args) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1);\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index);\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n toSorted(compareFn) {\n const entries = [...this.entries()].sort(compareFn);\n return new _OrderedDict(entries);\n }\n toReversed() {\n const reversed = new _OrderedDict();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index);\n const element = this.get(key);\n reversed.set(key, element);\n }\n return reversed;\n }\n toSpliced(...args) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new _OrderedDict(entries);\n }\n slice(start, end) {\n const result = new _OrderedDict();\n let stop = this.size - 1;\n if (start === void 0) {\n return result;\n }\n if (start < 0) {\n start = start + this.size;\n }\n if (end !== void 0 && end > 0) {\n stop = end - 1;\n }\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index);\n const element = this.get(key);\n result.set(key, element);\n }\n return result;\n }\n every(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n some(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n};\nfunction at(array, index) {\n if (\"at\" in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0\n }\n );\n const CollectionProvider = ({ state, ...props }) => {\n return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const CollectionInit = (props) => {\n const state = useInitCollection();\n return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n };\n CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n const CollectionProviderImpl = (props) => {\n const { scope, children, state } = props;\n const ref = React2.useRef(null);\n const [collectionElement, setCollectionElement] = React2.useState(\n null\n );\n const composeRefs = useComposedRefs2(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n React2.useEffect(() => {\n if (!collectionElement) return;\n const observer = getChildListObserver(() => {\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n return /* @__PURE__ */ jsx2(\n CollectionContextProvider,\n {\n scope,\n itemMap,\n setItemMap,\n collectionRef: composeRefs,\n collectionRefObject: ref,\n collectionElement,\n children\n }\n );\n };\n CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n const CollectionSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n const CollectionItemSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React2.useRef(null);\n const [element, setElement] = React2.useState(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n const { setItemMap } = context;\n const itemDataRef = React2.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n React2.useEffect(() => {\n const itemData2 = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n if (!map.has(element)) {\n map.set(element, { ...itemData2, element });\n return map.toSorted(sortByDocumentPosition);\n }\n return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n });\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useInitCollection() {\n return React2.useState(new OrderedDict());\n }\n function useCollection(scope) {\n const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n return itemMap;\n }\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection\n };\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions\n ];\n}\nfunction shallowEqual(a, b) {\n if (a === b) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\nfunction isElementPreceding(a, b) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === \"childList\") {\n callback();\n return;\n }\n }\n });\n return observer;\n}\nexport {\n createCollection,\n createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/direction/src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n DirectionProvider,\n Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/roving-focus-group.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar GROUP_NAME = \"RovingFocusGroup\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);\nvar [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope]\n);\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });\n }\n);\nRovingFocusGroup.displayName = GROUP_NAME;\nvar RovingFocusGroupImpl = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n orientation,\n loop = false,\n dir,\n currentTabStopId: currentTabStopIdProp,\n defaultCurrentTabStopId,\n onCurrentTabStopIdChange,\n onEntryFocus,\n preventScrollOnEntryFocus = false,\n ...groupProps\n } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const direction = useDirection(dir);\n const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n prop: currentTabStopIdProp,\n defaultProp: defaultCurrentTabStopId ?? null,\n onChange: onCurrentTabStopIdChange,\n caller: GROUP_NAME\n });\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const handleEntryFocus = useCallbackRef(onEntryFocus);\n const getItems = useCollection(__scopeRovingFocusGroup);\n const isClickFocusRef = React.useRef(false);\n const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n }\n }, [handleEntryFocus]);\n return /* @__PURE__ */ jsx(\n RovingFocusProvider,\n {\n scope: __scopeRovingFocusGroup,\n orientation,\n dir: direction,\n loop,\n currentTabStopId,\n onItemFocus: React.useCallback(\n (tabStopId) => setCurrentTabStopId(tabStopId),\n [setCurrentTabStopId]\n ),\n onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),\n onFocusableItemAdd: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount + 1),\n []\n ),\n onFocusableItemRemove: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount - 1),\n []\n ),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,\n \"data-orientation\": orientation,\n ...groupProps,\n ref: composedRefs,\n style: { outline: \"none\", ...props.style },\n onMouseDown: composeEventHandlers(props.onMouseDown, () => {\n isClickFocusRef.current = true;\n }),\n onFocus: composeEventHandlers(props.onFocus, (event) => {\n const isKeyboardFocus = !isClickFocusRef.current;\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().filter((item) => item.focusable);\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === currentTabStopId);\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean\n );\n const candidateNodes = candidateItems.map((item) => item.ref.current);\n focusFirst(candidateNodes, preventScrollOnEntryFocus);\n }\n }\n isClickFocusRef.current = false;\n }),\n onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))\n }\n )\n }\n );\n});\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n focusable = true,\n active = false,\n tabStopId,\n children,\n ...itemProps\n } = props;\n const autoId = useId();\n const id = tabStopId || autoId;\n const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n const isCurrentTabStop = context.currentTabStopId === id;\n const getItems = useCollection(__scopeRovingFocusGroup);\n const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n React.useEffect(() => {\n if (focusable) {\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }\n }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeRovingFocusGroup,\n id,\n focusable,\n active,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n tabIndex: isCurrentTabStop ? 0 : -1,\n \"data-orientation\": context.orientation,\n ...itemProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!focusable) event.preventDefault();\n else context.onItemFocus(id);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Tab\" && event.shiftKey) {\n context.onItemShiftTab();\n return;\n }\n if (event.target !== event.currentTarget) return;\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n if (focusIntent !== void 0) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n event.preventDefault();\n const items = getItems().filter((item) => item.focusable);\n let candidateNodes = items.map((item) => item.ref.current);\n if (focusIntent === \"last\") candidateNodes.reverse();\n else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(event.currentTarget);\n candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n }\n }),\n children: typeof children === \"function\" ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null }) : children\n }\n )\n }\n );\n }\n);\nRovingFocusGroupItem.displayName = ITEM_NAME;\nvar MAP_KEY_TO_FOCUS_INTENT = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\"\n};\nfunction getDirectionAwareKey(key, dir) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\nfunction getFocusIntent(event, orientation, dir) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) return void 0;\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key)) return void 0;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\nfunction focusFirst(candidates, preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root = RovingFocusGroup;\nvar Item = RovingFocusGroupItem;\nexport {\n Item,\n Root,\n RovingFocusGroup,\n RovingFocusGroupItem,\n createRovingFocusGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = \"horizontal\",\n dir,\n activationMode = \"automatic\",\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue ?? \"\",\n caller: TABS_NAME\n });\n return /* @__PURE__ */ jsx(\n TabsProvider,\n {\n scope: __scopeTabs,\n baseId: useId(),\n value,\n onValueChange: setValue,\n orientation,\n dir: direction,\n activationMode,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n \"data-orientation\": orientation,\n ...tabsProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation: context.orientation,\n dir: context.dir,\n loop,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"tablist\",\n \"aria-orientation\": context.orientation,\n ...listProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: isSelected,\n children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"tab\",\n \"aria-selected\": isSelected,\n \"aria-controls\": contentId,\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n id: triggerId,\n ...triggerProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n const isAutomaticActivation = context.activationMode !== \"manual\";\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })\n }\n )\n }\n );\n }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-orientation\": context.orientation,\n role: \"tabpanel\",\n \"aria-labelledby\": triggerId,\n hidden: !present,\n id: contentId,\n tabIndex: 0,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n },\n children: present && children\n }\n ) });\n }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n Content,\n List,\n Root2 as Root,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Trigger,\n createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground\",\n className,\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className,\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","// packages/react/use-previous/src/use-previous.tsx\nimport * as React from \"react\";\nfunction usePrevious(value) {\n const ref = React.useRef({ value, previous: value });\n return React.useMemo(() => {\n if (ref.current.value !== value) {\n ref.current.previous = ref.current.value;\n ref.current.value = value;\n }\n return ref.current.previous;\n }, [value]);\n}\nexport {\n usePrevious\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-size/src/use-size.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nfunction useSize(element) {\n const [size, setSize] = React.useState(void 0);\n useLayoutEffect(() => {\n if (element) {\n setSize({ width: element.offsetWidth, height: element.offsetHeight });\n const resizeObserver = new ResizeObserver((entries) => {\n if (!Array.isArray(entries)) {\n return;\n }\n if (!entries.length) {\n return;\n }\n const entry = entries[0];\n let width;\n let height;\n if (\"borderBoxSize\" in entry) {\n const borderSizeEntry = entry[\"borderBoxSize\"];\n const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n width = borderSize[\"inlineSize\"];\n height = borderSize[\"blockSize\"];\n } else {\n width = element.offsetWidth;\n height = element.offsetHeight;\n }\n setSize({ width, height });\n });\n resizeObserver.observe(element, { box: \"border-box\" });\n return () => resizeObserver.unobserve(element);\n } else {\n setSize(void 0);\n }\n }, [element]);\n return size;\n}\nexport {\n useSize\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n \"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0\",\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","\"use client\";\n\n// src/checkbox.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar CHECKBOX_NAME = \"Checkbox\";\nvar [createCheckboxContext, createCheckboxScope] = createContextScope(CHECKBOX_NAME);\nvar [CheckboxProviderImpl, useCheckboxContext] = createCheckboxContext(CHECKBOX_NAME);\nfunction CheckboxProvider(props) {\n const {\n __scopeCheckbox,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = \"on\",\n // @ts-expect-error\n internal_do_not_use_render\n } = props;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: CHECKBOX_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n // We set this to true by default so that events bubble to forms without JS (SSR)\n true\n );\n const context = {\n checked,\n disabled,\n setChecked,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n required,\n defaultChecked: isIndeterminate(defaultChecked) ? false : defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(\n CheckboxProviderImpl,\n {\n scope: __scopeCheckbox,\n ...context,\n children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children\n }\n );\n}\nvar TRIGGER_NAME = \"CheckboxTrigger\";\nvar CheckboxTrigger = React.forwardRef(\n ({ __scopeCheckbox, onKeyDown, onClick, ...checkboxProps }, forwardedRef) => {\n const {\n control,\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n isFormControl,\n bubbleInput\n } = useCheckboxContext(TRIGGER_NAME, __scopeCheckbox);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const form = control?.form;\n if (form) {\n const reset = () => setChecked(initialCheckedStateRef.current);\n form.addEventListener(\"reset\", reset);\n return () => form.removeEventListener(\"reset\", reset);\n }\n }, [control, setChecked]);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"checkbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...checkboxProps,\n ref: composedRefs,\n onKeyDown: composeEventHandlers(onKeyDown, (event) => {\n if (event.key === \"Enter\") event.preventDefault();\n }),\n onClick: composeEventHandlers(onClick, (event) => {\n setChecked((prevChecked) => isIndeterminate(prevChecked) ? true : !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }\n);\nCheckboxTrigger.displayName = TRIGGER_NAME;\nvar Checkbox = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeCheckbox,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...checkboxProps\n } = props;\n return /* @__PURE__ */ jsx(\n CheckboxProvider,\n {\n __scopeCheckbox,\n checked,\n defaultChecked,\n disabled,\n required,\n onCheckedChange,\n name,\n form,\n value,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n CheckboxTrigger,\n {\n ...checkboxProps,\n ref: forwardedRef,\n __scopeCheckbox\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n CheckboxBubbleInput,\n {\n __scopeCheckbox\n }\n )\n ] })\n }\n );\n }\n);\nCheckbox.displayName = CHECKBOX_NAME;\nvar INDICATOR_NAME = \"CheckboxIndicator\";\nvar CheckboxIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeCheckbox, forceMount, ...indicatorProps } = props;\n const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);\n return /* @__PURE__ */ jsx(\n Presence,\n {\n present: forceMount || isIndeterminate(context.checked) || context.checked === true,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...indicatorProps,\n ref: forwardedRef,\n style: { pointerEvents: \"none\", ...props.style }\n }\n )\n }\n );\n }\n);\nCheckboxIndicator.displayName = INDICATOR_NAME;\nvar BUBBLE_INPUT_NAME = \"CheckboxBubbleInput\";\nvar CheckboxBubbleInput = React.forwardRef(\n ({ __scopeCheckbox, ...props }, forwardedRef) => {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useCheckboxContext(BUBBLE_INPUT_NAME, __scopeCheckbox);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n const bubbles = !hasConsumerStoppedPropagationRef.current;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n input.indeterminate = isIndeterminate(checked);\n setChecked.call(input, isIndeterminate(checked) ? false : checked);\n input.dispatchEvent(event);\n }\n }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n const defaultCheckedRef = React.useRef(isIndeterminate(checked) ? false : checked);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n required,\n disabled,\n name,\n value,\n form,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: \"translateX(-100%)\"\n }\n }\n );\n }\n);\nCheckboxBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\nfunction getState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nexport {\n Checkbox,\n CheckboxIndicator,\n CheckboxIndicator as Indicator,\n Checkbox as Root,\n createCheckboxScope,\n CheckboxBubbleInput as unstable_BubbleInput,\n CheckboxBubbleInput as unstable_CheckboxBubbleInput,\n CheckboxProvider as unstable_CheckboxProvider,\n CheckboxTrigger as unstable_CheckboxTrigger,\n CheckboxProvider as unstable_Provider,\n CheckboxTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className={cn(\"flex items-center justify-center text-current\")}>\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"rounded-lg bg-card text-card-foreground shadow-sm\", className)} {...props} />\n));\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n ),\n);\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn(\"text-2xl font-semibold leading-none tracking-tight\", className)} {...props} />\n ),\n);\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n ),\n);\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />,\n);\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center p-6 pt-0\", className)} {...props} />\n ),\n);\nCardFooter.displayName = \"CardFooter\";\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n","import{get as t,set as e}from\"react-hook-form\";const s=(e,s,o)=>{if(e&&\"reportValidity\"in e){const r=t(o,s);e.setCustomValidity(r&&r.message||\"\"),e.reportValidity()}},o=(t,e)=>{for(const o in e.fields){const r=e.fields[o];r&&r.ref&&\"reportValidity\"in r.ref?s(r.ref,o,t):r.refs&&r.refs.forEach(e=>s(e,o,t))}},r=(s,r)=>{r.shouldUseNativeValidation&&o(s,r);const f={};for(const o in s){const n=t(r.fields,o),a=Object.assign(s[o]||{},{ref:n&&n.ref});if(i(r.names||Object.keys(s),o)){const s=Object.assign({},t(f,o));e(s,\"root\",a),e(f,o,s)}else e(f,o,a)}return f},i=(t,e)=>t.some(t=>t.startsWith(e+\".\"));export{r as toNestErrors,o as validateFieldsNatively};\n//# sourceMappingURL=resolvers.mjs.map\n","import{validateFieldsNatively as r,toNestErrors as e}from\"@hookform/resolvers\";import{appendErrors as o}from\"react-hook-form\";var n=function(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(\".\");if(!n[a])if(\"unionErrors\"in t){var u=t.unionErrors[0].errors[0];n[a]={message:u.message,type:u.code}}else n[a]={message:i,type:s};if(\"unionErrors\"in t&&t.unionErrors.forEach(function(e){return e.errors.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=o(a,e,n,s,f?[].concat(f,t.message):t.message)}r.shift()}return n},t=function(o,t,s){return void 0===s&&(s={}),function(i,a,u){try{return Promise.resolve(function(e,n){try{var a=Promise.resolve(o[\"sync\"===s.mode?\"parse\":\"parseAsync\"](i,t)).then(function(e){return u.shouldUseNativeValidation&&r({},u),{errors:{},values:s.raw?i:e}})}catch(r){return n(r)}return a&&a.then?a.then(void 0,n):a}(0,function(r){if(function(r){return Array.isArray(null==r?void 0:r.errors)}(r))return{values:{},errors:e(n(r.errors,!u.shouldUseNativeValidation&&\"all\"===u.criteriaMode),u)};throw r}))}catch(r){return Promise.reject(r)}}};export{t as zodResolver};\n//# sourceMappingURL=zod.module.js.map\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-primary text-primary-foreground hover:bg-primary/80\",\n secondary: \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive: \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n outline: \"text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return <div className={cn(badgeVariants({ variant }), className)} {...props} />;\n}\n\nexport { Badge, badgeVariants };\n","import React, { useState, useEffect, ReactNode, useMemo } from 'react';\n// import { translations as generatedTranslations } from '../src/translations'; // Generated translations\n\n// --- Language Configuration ---\ntype LangCode = 'en' | 'fr' | 'sw' | 'de' | 'es' | 'it' | 'ja' | 'ko' | 'pt' | 'ru' | 'tr' | 'zh' | 'nl';\nconst DEFAULT_LANG: LangCode = 'en';\n\nexport const supportedLanguages = [\n { code: 'en', name: 'English' },\n { code: 'fr', name: 'Français' },\n { code: 'sw', name: 'Kiswahili' },\n { code: 'de', name: 'Deutsch' },\n { code: 'es', name: 'Español' },\n { code: 'nl', name: 'Nederlands' }\n];\n\n// --- Caching and Loading ---\nconst translationCache: { [lang: string]: Record<string, string> } = {};\nconst loadingPromises: { [lang: string]: Promise<Record<string, string>> } = {};\nconst translationsLoaded: { [lang: string]: boolean } = {};\n\n// --- Pub/Sub for updates ---\nlet listeners: (() => void)[] = [];\nconst subscribe = (callback: () => void) => {\n listeners.push(callback);\n return () => {\n listeners = listeners.filter(l => l !== callback);\n };\n};\nconst notify = () => {\n listeners.forEach(l => l());\n};\n\nconst loadTranslations = (lang: LangCode): Promise<Record<string, string>> => {\n if (translationsLoaded[lang]) {\n return Promise.resolve(translationCache[lang] || {});\n }\n\n return loadingPromises[lang] || (() => {\n const promise = import(`./i18n/${lang}.json`)\n .then(module => {\n const translations = module.default;\n // Merge with existing auto-collected keys, but prioritize loaded translations\n const existingCache = translationCache[lang] || {};\n translationCache[lang] = { ...existingCache, ...translations };\n translationsLoaded[lang] = true;\n delete loadingPromises[lang];\n notify(); // Notify components to re-render with new translations\n return translationCache[lang];\n })\n .catch(error => {\n console.warn(`Could not load translations for language: ${lang}`, error);\n // Don't mark as loaded if it failed, but keep auto-collected keys\n delete loadingPromises[lang];\n notify(); // Still notify to update state\n return translationCache[lang] || {};\n });\n \n loadingPromises[lang] = promise;\n return promise;\n })();\n};\n\n// Helper to get cookie value\nconst getCookie = (name: string): string | null => {\n if (typeof document === 'undefined') return null;\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) return parts.pop()?.split(';').shift() || null;\n return null;\n};\n\n// Helper to set cookie value\nconst setCookie = (name: string, value: string, days: number = 365) => {\n if (typeof document === 'undefined') return;\n const expires = new Date();\n expires.setTime(expires.getTime() + days * 24 * 60 * 60 * 1000);\n document.cookie = `${name}=${value};expires=${expires.toUTCString()};path=/;SameSite=Lax`;\n};\n\nconst getCurrentLangInternal = (): LangCode => {\n if (typeof window !== 'undefined') {\n // 1. Check cookie first\n const cookieLang = getCookie('lang') as LangCode;\n if (cookieLang && cookieLang.length === 2) {\n return cookieLang;\n }\n\n // 2. Check URL parameter (for backward compatibility)\n const params = new URLSearchParams(window.location.search);\n const langParam = params.get('lang') as LangCode;\n if (langParam && langParam.length === 2) {\n // Save to cookie for future visits\n setCookie('lang', langParam);\n return langParam;\n }\n\n // 3. Fallback to browser language\n const browserLangs = navigator.languages || [navigator.language];\n for (const lang of browserLangs) {\n const shortLang = lang.split('-')[0] as LangCode;\n if (shortLang && shortLang.length === 2) {\n return shortLang;\n }\n }\n }\n return DEFAULT_LANG;\n};\nexport const getCurrentLang = getCurrentLangInternal;\n\n// Function to change language and save to cookie\nexport const setLanguage = (langCode: LangCode) => {\n setCookie('lang', langCode);\n // Reload to apply new language\n if (typeof window !== 'undefined') {\n window.location.reload();\n }\n};\n\n\n// Helper function to get a translated string directly (SYNC)\nexport const translate = (textKey: string, langParam?: LangCode): string => {\n const langToUse = langParam || getCurrentLangInternal();\n \n // 1. Try loaded translations for current language\n if (translationsLoaded[langToUse] && translationCache[langToUse] && translationCache[langToUse][textKey] !== undefined) {\n return translationCache[langToUse][textKey];\n }\n\n // 2. If not found and lang is not default, try loaded translations for default language\n if (langToUse !== DEFAULT_LANG && translationsLoaded[DEFAULT_LANG] && translationCache[DEFAULT_LANG] && translationCache[DEFAULT_LANG][textKey] !== undefined) {\n return translationCache[DEFAULT_LANG][textKey];\n }\n\n // 3. Auto-populate cache with key for dictionary building (only if not already loaded)\n if (!translationCache[langToUse]) {\n translationCache[langToUse] = {};\n }\n if (translationCache[langToUse][textKey] === undefined) {\n translationCache[langToUse][textKey] = textKey; // Store key as value for now\n }\n\n // 4. Ultimate fallback: return the key itself\n return textKey;\n};\n\ninterface TProps {\n children: ReactNode;\n}\n\nconst T: React.FC<TProps> = ({ children }) => {\n const [, forceUpdate] = useState(0);\n\n useEffect(() => {\n return subscribe(() => {\n forceUpdate(c => c + 1);\n });\n }, []);\n\n const currentLang = getCurrentLangInternal();\n useEffect(() => {\n loadTranslations(currentLang);\n }, [currentLang]);\n\n const textKey = useMemo(() => {\n if (typeof children === 'string') return children;\n if (React.isValidElement(children) && typeof children.props.children === 'string') {\n return children.props.children;\n }\n return null;\n }, [children]);\n\n if (!textKey) {\n return <>{children}</>;\n }\n\n const translatedString = translate(textKey, currentLang);\n\n if (React.isValidElement(children) && typeof children.props.children === 'string') {\n return React.cloneElement(children, {}, translatedString);\n }\n return <>{translatedString}</>;\n};\n\nexport const getTranslationCache = (lang?: LangCode): Record<string, string> | Record<string, Record<string, string>> => {\n if (lang) {\n return translationCache[lang] || {};\n }\n return translationCache;\n};\n\n// Helper function to download collected translations as JSON file\nexport const downloadTranslations = (lang: LangCode = 'en') => {\n const translations = translationCache[lang] || {};\n const isLoaded = translationsLoaded[lang];\n \n const sortedTranslations = Object.keys(translations)\n .sort()\n .reduce((result, key) => {\n result[key] = translations[key];\n return result;\n }, {} as Record<string, string>);\n \n const jsonString = JSON.stringify(sortedTranslations, null, 2);\n const blob = new Blob([jsonString], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n \n const link = document.createElement('a');\n link.href = url;\n link.download = `${lang}.json`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n \n console.log(`Downloaded ${Object.keys(sortedTranslations).length} translation keys for language: ${lang} (${isLoaded ? 'loaded from file' : 'auto-collected'})`);\n};\n\n// Helper function to check translation loading status\nexport const getTranslationStatus = (lang?: LangCode) => {\n if (lang) {\n return {\n loaded: translationsLoaded[lang] || false,\n keysCount: Object.keys(translationCache[lang] || {}).length\n };\n }\n \n const status: Record<string, { loaded: boolean; keysCount: number }> = {};\n for (const langCode of Object.keys(translationCache)) {\n status[langCode] = {\n loaded: translationsLoaded[langCode] || false,\n keysCount: Object.keys(translationCache[langCode] || {}).length\n };\n }\n return status;\n};\n\nif (typeof window !== 'undefined') {\n (window as any).getTranslationCache = getTranslationCache;\n (window as any).translate = translate; \n (window as any).getCurrentLang = getCurrentLang;\n (window as any).downloadTranslations = downloadTranslations;\n (window as any).getTranslationStatus = getTranslationStatus;\n}\n\nexport { T };\n","import React, { useState, useEffect, useMemo } from 'react';\r\nimport { supabase } from '@/integrations/supabase/client';\r\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '@/components/ui/dialog';\r\nimport { Input } from '@/components/ui/input';\r\nimport { Button } from '@/components/ui/button';\r\nimport { Badge } from '@/components/ui/badge';\r\nimport { T, translate } from '@/i18n';\r\nimport { Search, Image as ImageIcon, Check, Tag, FolderOpen, X } from 'lucide-react';\r\nimport { useAuth } from '@/hooks/useAuth';\r\nimport MediaCard from '@/components/MediaCard';\r\nimport { MediaType } from '@/lib/mediaRegistry';\r\n\r\ninterface ImagePickerDialogProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n onSelect?: (pictureId: string) => void;\r\n onMultiSelect?: (pictureIds: string[]) => void;\r\n onMultiSelectPictures?: (pictures: Picture[]) => void;\r\n currentValue?: string | null;\r\n currentValues?: string[];\r\n multiple?: boolean;\r\n}\r\ninterface Picture {\r\n id: string;\r\n title: string;\r\n image_url: string;\r\n thumbnail_url?: string;\r\n type?: string;\r\n user_id: string;\r\n tags: string[] | null;\r\n meta: any;\r\n}\r\n\r\ninterface Collection {\r\n id: string;\r\n name: string;\r\n slug: string;\r\n}\r\n\r\nexport const ImagePickerDialog: React.FC<ImagePickerDialogProps> = ({\r\n isOpen,\r\n onClose,\r\n onSelect,\r\n onMultiSelect,\r\n onMultiSelectPictures,\r\n currentValue,\r\n currentValues = [],\r\n multiple = false\r\n}) => {\r\n const { user } = useAuth();\r\n const [pictures, setPictures] = useState<Picture[]>([]);\r\n const [allTags, setAllTags] = useState<string[]>([]);\r\n const [collections, setCollections] = useState<Collection[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n const [searchQuery, setSearchQuery] = useState('');\r\n const [selectedTags, setSelectedTags] = useState<string[]>([]);\r\n const [selectedCollections, setSelectedCollections] = useState<string[]>([]);\r\n const [selectedIds, setSelectedIds] = useState<string[]>([]);\r\n const [selectedId, setSelectedId] = useState<string | null>(currentValue || null);\r\n\r\n // Initial data fetch - only runs when dialog opens\r\n useEffect(() => {\r\n if (isOpen) {\r\n fetchPictures();\r\n fetchTags();\r\n fetchCollections();\r\n }\r\n }, [isOpen]);\r\n\r\n // Sync props to local state - runs when props change\r\n useEffect(() => {\r\n if (isOpen) {\r\n if (multiple) {\r\n // Only update if actually different to avoid cycles if parent passes new array ref\r\n if (JSON.stringify(selectedIds) !== JSON.stringify(currentValues)) {\r\n setSelectedIds(currentValues || []);\r\n }\r\n } else {\r\n if (selectedId !== currentValue) {\r\n setSelectedId(currentValue || null);\r\n }\r\n }\r\n }\r\n }, [isOpen, currentValue, currentValues, multiple]);\r\n\r\n const fetchPictures = async () => {\r\n setLoading(true);\r\n try {\r\n const { data, error } = await supabase\r\n .from('pictures')\r\n .select('id, title, image_url, thumbnail_url, type, user_id, tags, meta')\r\n .eq('is_selected', true)\r\n .order('created_at', { ascending: false })\r\n .limit(100);\r\n\r\n if (error) throw error;\r\n setPictures(data || []);\r\n } catch (error) {\r\n console.error('Error fetching pictures:', error);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const fetchTags = async () => {\r\n try {\r\n const { data, error } = await supabase\r\n .from('pictures')\r\n .select('tags')\r\n .eq('is_selected', true);\r\n\r\n if (error) throw error;\r\n\r\n // Extract unique tags\r\n const tagsSet = new Set<string>();\r\n data?.forEach(pic => {\r\n pic.tags?.forEach(tag => tagsSet.add(tag));\r\n });\r\n\r\n setAllTags(Array.from(tagsSet).sort());\r\n } catch (error) {\r\n console.error('Error fetching tags:', error);\r\n }\r\n };\r\n\r\n const fetchCollections = async () => {\r\n if (!user) return;\r\n\r\n try {\r\n const { data, error } = await supabase\r\n .from('collections')\r\n .select('id, name, slug')\r\n .eq('user_id', user.id)\r\n .order('name');\r\n\r\n if (error) throw error;\r\n setCollections(data || []);\r\n } catch (error) {\r\n console.error('Error fetching collections:', error);\r\n }\r\n };\r\n\r\n const filteredPictures = useMemo(() => {\r\n return pictures.filter(pic => {\r\n // Search filter\r\n const matchesSearch = pic.title.toLowerCase().includes(searchQuery.toLowerCase()) ||\r\n pic.id.toLowerCase().includes(searchQuery.toLowerCase());\r\n\r\n // Tag filter\r\n const matchesTags = selectedTags.length === 0 ||\r\n (pic.tags && selectedTags.some(tag => pic.tags?.includes(tag)));\r\n\r\n return matchesSearch && matchesTags;\r\n });\r\n }, [pictures, searchQuery, selectedTags]);\r\n\r\n // Further filter by collections if any selected\r\n const [finalPictures, setFinalPictures] = useState<Picture[]>([]);\r\n\r\n useEffect(() => {\r\n const filterByCollections = async () => {\r\n if (selectedCollections.length === 0) {\r\n setFinalPictures(filteredPictures);\r\n return;\r\n }\r\n\r\n try {\r\n const { data, error } = await supabase\r\n .from('collection_pictures')\r\n .select('picture_id')\r\n .in('collection_id', selectedCollections);\r\n\r\n if (error) throw error;\r\n\r\n const pictureIdsInCollections = new Set(data?.map(cp => cp.picture_id) || []);\r\n setFinalPictures(filteredPictures.filter(pic => pictureIdsInCollections.has(pic.id)));\r\n } catch (error) {\r\n console.error('Error filtering by collections:', error);\r\n setFinalPictures(filteredPictures);\r\n }\r\n };\r\n\r\n filterByCollections();\r\n }, [filteredPictures, selectedCollections]);\r\n\r\n const handleSelect = () => {\r\n if (multiple) {\r\n if (onMultiSelect) {\r\n onMultiSelect(selectedIds);\r\n }\r\n if (onMultiSelectPictures) {\r\n const selectedPictures = pictures.filter(p => selectedIds.includes(p.id));\r\n onMultiSelectPictures(selectedPictures);\r\n }\r\n } else {\r\n if (selectedId && onSelect) {\r\n onSelect(selectedId);\r\n }\r\n }\r\n };\r\n\r\n const toggleSelection = (id: string) => {\r\n if (multiple) {\r\n setSelectedIds(prev =>\r\n prev.includes(id)\r\n ? prev.filter(pid => pid !== id)\r\n : [...prev, id]\r\n );\r\n } else {\r\n setSelectedId(id);\r\n }\r\n };\r\n\r\n return (\r\n <Dialog open={isOpen} onOpenChange={onClose}>\r\n <DialogContent className=\"max-w-4xl max-h-[80vh] overflow-hidden flex flex-col\">\r\n <DialogHeader>\r\n <DialogTitle><T>Select Picture</T></DialogTitle>\r\n <DialogDescription>\r\n <T>Choose a picture from your published images</T>\r\n </DialogDescription>\r\n </DialogHeader>\r\n\r\n {/* Search */}\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\r\n <Input\r\n placeholder={translate('Search by title or ID...')}\r\n value={searchQuery}\r\n onChange={(e) => setSearchQuery(e.target.value)}\r\n className=\"pl-10\"\r\n />\r\n </div>\r\n\r\n {/* Filter Buttons */}\r\n <div className=\"space-y-3\">\r\n {/* Tags Filter */}\r\n {allTags.length > 0 && (\r\n <div className=\"space-y-2\">\r\n <div className=\"flex items-center gap-2 text-sm font-medium text-muted-foreground\">\r\n <Tag className=\"h-4 w-4\" />\r\n <span><T>Tags</T></span>\r\n {selectedTags.length > 0 && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-6 px-2 text-xs\"\r\n onClick={() => setSelectedTags([])}\r\n >\r\n <T>Clear</T>\r\n </Button>\r\n )}\r\n </div>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {allTags.slice(0, 12).map(tag => (\r\n <Badge\r\n key={tag}\r\n variant={selectedTags.includes(tag) ? \"default\" : \"outline\"}\r\n className=\"cursor-pointer hover:shadow-md transition-shadow\"\r\n onClick={() => {\r\n setSelectedTags(prev =>\r\n prev.includes(tag)\r\n ? prev.filter(t => t !== tag)\r\n : [...prev, tag]\r\n );\r\n }}\r\n >\r\n {tag}\r\n {selectedTags.includes(tag) && (\r\n <X className=\"ml-1 h-3 w-3\" />\r\n )}\r\n </Badge>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Collections Filter */}\r\n {collections.length > 0 && (\r\n <div className=\"space-y-2\">\r\n <div className=\"flex items-center gap-2 text-sm font-medium text-muted-foreground\">\r\n <FolderOpen className=\"h-4 w-4\" />\r\n <span><T>Collections</T></span>\r\n {selectedCollections.length > 0 && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-6 px-2 text-xs\"\r\n onClick={() => setSelectedCollections([])}\r\n >\r\n <T>Clear</T>\r\n </Button>\r\n )}\r\n </div>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {collections.map(collection => (\r\n <Badge\r\n key={collection.id}\r\n variant={selectedCollections.includes(collection.id) ? \"default\" : \"outline\"}\r\n className=\"cursor-pointer hover:shadow-md transition-shadow\"\r\n onClick={() => {\r\n setSelectedCollections(prev =>\r\n prev.includes(collection.id)\r\n ? prev.filter(c => c !== collection.id)\r\n : [...prev, collection.id]\r\n );\r\n }}\r\n >\r\n {collection.name}\r\n {selectedCollections.includes(collection.id) && (\r\n <X className=\"ml-1 h-3 w-3\" />\r\n )}\r\n </Badge>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Pictures Grid */}\r\n <div className=\"flex-1 overflow-y-auto min-h-0 -mx-6 px-6\">\r\n {loading ? (\r\n <div className=\"flex items-center justify-center py-12\">\r\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-primary\"></div>\r\n </div>\r\n ) : finalPictures.length === 0 ? (\r\n <div className=\"text-center py-12\">\r\n <ImageIcon className=\"h-12 w-12 mx-auto mb-4 text-muted-foreground opacity-50\" />\r\n <p className=\"text-muted-foreground\">\r\n <T>{searchQuery || selectedTags.length > 0 || selectedCollections.length > 0 ? 'No pictures found' : 'No pictures available'}</T>\r\n </p>\r\n </div>\r\n ) : (\r\n <div className=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4 p-1\">\r\n {finalPictures.map((picture) => {\r\n const isSelected = multiple\r\n ? selectedIds.includes(picture.id)\r\n : selectedId === picture.id;\r\n\r\n return (\r\n <div\r\n key={picture.id}\r\n onClick={() => toggleSelection(picture.id)}\r\n onDoubleClick={() => {\r\n if (!multiple) {\r\n setSelectedId(picture.id);\r\n if (onSelect) onSelect(picture.id);\r\n } else {\r\n toggleSelection(picture.id);\r\n }\r\n }}\r\n className={`relative cursor-pointer rounded-lg overflow-hidden border-2 transition-all group ${isSelected\r\n ? 'border-primary shadow-lg scale-[1.02]'\r\n : 'border-transparent hover:border-primary/50'\r\n }`}\r\n >\r\n <div className=\"aspect-square relative pointer-events-none\">\r\n <MediaCard\r\n id={picture.id}\r\n pictureId={picture.id}\r\n url={picture.image_url}\r\n thumbnailUrl={picture.thumbnail_url}\r\n title={picture.title}\r\n author={'Me'}\r\n authorId={picture.user_id}\r\n likes={0}\r\n comments={0}\r\n type={picture.type as MediaType}\r\n meta={picture.meta}\r\n showContent={false}\r\n onClick={() => { }}\r\n onLike={undefined}\r\n onDelete={undefined}\r\n onEdit={undefined}\r\n />\r\n </div>\r\n {/* Overlay Title */}\r\n <div className=\"absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/80 to-transparent p-2 pointer-events-none\">\r\n <p className=\"text-white text-xs font-medium truncate\">\r\n {picture.title}\r\n </p>\r\n </div>\r\n </div>\r\n )\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Actions */}\r\n <div className=\"flex justify-between items-center pt-4 border-t mt-auto\">\r\n <div className=\"text-sm text-muted-foreground\">\r\n {multiple && <span>{selectedIds.length} selected</span>}\r\n </div>\r\n <div className=\"flex gap-2\">\r\n <Button variant=\"outline\" onClick={onClose}>\r\n <T>Cancel</T>\r\n </Button>\r\n <Button onClick={handleSelect} disabled={multiple ? selectedIds.length === 0 : !selectedId}>\r\n <T>Select Picture{multiple ? 's' : ''}</T>\r\n </Button>\r\n </div>\r\n </div>\r\n </DialogContent>\r\n </Dialog>\r\n );\r\n};\r\n","import React, { useEffect, useRef, useState, useCallback } from 'react';\nimport { ImagePickerDialog } from '@/components/widgets/ImagePickerDialog';\nimport { supabase } from '@/integrations/supabase/client';\n\n\n// Lazy load the heavy editor component\nconst MilkdownEditorInternal = React.lazy(() => import('@/components/lazy-editors/MilkdownEditorInternal'));\n\ninterface MarkdownEditorProps {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n className?: string;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n}\n\nconst MarkdownEditor: React.FC<MarkdownEditorProps> = ({\n value,\n onChange,\n placeholder = \"Enter description...\",\n className = \"\",\n onKeyDown\n}) => {\n const [activeTab, setActiveTab] = useState<'editor' | 'raw'>('editor');\n const [imagePickerOpen, setImagePickerOpen] = useState(false);\n const pendingImageResolveRef = useRef<((url: string) => void) | null>(null);\n\n // Handler for image upload - opens the ImagePickerDialog\n const handleImageUpload = useCallback((_file?: File): Promise<string> => {\n console.log('[handleImageUpload] Called from image-block, opening ImagePickerDialog');\n return new Promise((resolve) => {\n pendingImageResolveRef.current = resolve;\n console.log('[handleImageUpload] Resolve function stored in ref');\n setImagePickerOpen(true);\n });\n }, []);\n\n // Handler for image selection from picker\n const handleImageSelect = useCallback(async (pictureId: string) => {\n console.log('[handleImageSelect] Selected picture ID:', pictureId);\n try {\n // Fetch the image URL from Supabase\n const { data, error } = await supabase\n .from('pictures')\n .select('image_url')\n .eq('id', pictureId)\n .single();\n\n if (error) throw error;\n\n const imageUrl = data.image_url;\n\n const resolveFunc = pendingImageResolveRef.current;\n\n if (resolveFunc) {\n pendingImageResolveRef.current = null;\n resolveFunc(imageUrl);\n }\n\n setImagePickerOpen(false);\n } catch (error) {\n console.error('[handleImageSelect] Error fetching image:', error);\n if (pendingImageResolveRef.current) {\n pendingImageResolveRef.current('');\n pendingImageResolveRef.current = null;\n }\n setImagePickerOpen(false);\n }\n }, []);\n\n const handleRawChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange(e.target.value);\n }, [onChange]);\n\n return (\n <>\n <div className={`border rounded-md bg-background ${className}`}>\n <div className=\"flex border-b\">\n <button\n type=\"button\"\n onClick={() => setActiveTab('editor')}\n className={`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${activeTab === 'editor'\n ? 'border-primary text-primary'\n : 'border-transparent text-muted-foreground hover:text-foreground hover:border-border'\n }`}\n >\n Editor\n </button>\n <button\n type=\"button\"\n onClick={() => setActiveTab('raw')}\n className={`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${activeTab === 'raw'\n ? 'border-primary text-primary'\n : 'border-transparent text-muted-foreground hover:text-foreground hover:border-border'\n }`}\n >\n Markdown\n </button>\n </div>\n {activeTab === 'editor' && (\n <React.Suspense fallback={<div className=\"p-3 text-muted-foreground\">Loading editor...</div>}>\n <MilkdownEditorInternal\n value={value}\n onChange={onChange}\n className={className}\n />\n </React.Suspense>\n )}\n {activeTab === 'raw' && (\n <textarea\n value={value || ''}\n onChange={handleRawChange}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n className=\"w-full p-3 bg-transparent border-0 rounded-b-md focus:ring-0 focus:outline-none resize-none font-mono text-sm\"\n style={{ height: '120px', minHeight: '120px' }}\n aria-label=\"Raw markdown input\"\n autoFocus\n />\n )}\n </div>\n\n {/* Image Picker Dialog */}\n <ImagePickerDialog\n isOpen={imagePickerOpen}\n onClose={() => {\n setImagePickerOpen(false);\n // Reject the promise if closed without selection\n if (pendingImageResolveRef.current) {\n pendingImageResolveRef.current('');\n pendingImageResolveRef.current = null;\n }\n }}\n onSelect={handleImageSelect}\n currentValue={null}\n />\n </>\n );\n};\n\nMarkdownEditor.displayName = 'MarkdownEditor';\n\n// Memoize with custom comparison\nexport default React.memo(MarkdownEditor, (prevProps, nextProps) => {\n // Re-render if value, placeholder, className, or onKeyDown change\n return (\n prevProps.value === nextProps.value &&\n prevProps.placeholder === nextProps.placeholder &&\n prevProps.className === nextProps.className &&\n prevProps.onKeyDown === nextProps.onKeyDown\n // onChange is intentionally omitted to prevent unnecessary re-renders\n );\n});","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/alert-dialog.tsx\nimport * as React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { createDialogScope } from \"@radix-ui/react-dialog\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createSlottable } from \"@radix-ui/react-slot\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar ROOT_NAME = \"AlertDialog\";\nvar [createAlertDialogContext, createAlertDialogScope] = createContextScope(ROOT_NAME, [\n createDialogScope\n]);\nvar useDialogScope = createDialogScope();\nvar AlertDialog = (props) => {\n const { __scopeAlertDialog, ...alertDialogProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Root, { ...dialogScope, ...alertDialogProps, modal: true });\n};\nAlertDialog.displayName = ROOT_NAME;\nvar TRIGGER_NAME = \"AlertDialogTrigger\";\nvar AlertDialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...triggerProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Trigger, { ...dialogScope, ...triggerProps, ref: forwardedRef });\n }\n);\nAlertDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"AlertDialogPortal\";\nvar AlertDialogPortal = (props) => {\n const { __scopeAlertDialog, ...portalProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Portal, { ...dialogScope, ...portalProps });\n};\nAlertDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"AlertDialogOverlay\";\nvar AlertDialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...overlayProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Overlay, { ...dialogScope, ...overlayProps, ref: forwardedRef });\n }\n);\nAlertDialogOverlay.displayName = OVERLAY_NAME;\nvar CONTENT_NAME = \"AlertDialogContent\";\nvar [AlertDialogContentProvider, useAlertDialogContentContext] = createAlertDialogContext(CONTENT_NAME);\nvar Slottable = createSlottable(\"AlertDialogContent\");\nvar AlertDialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, children, ...contentProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const cancelRef = React.useRef(null);\n return /* @__PURE__ */ jsx(\n DialogPrimitive.WarningProvider,\n {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"alert-dialog\",\n children: /* @__PURE__ */ jsx(AlertDialogContentProvider, { scope: __scopeAlertDialog, cancelRef, children: /* @__PURE__ */ jsxs(\n DialogPrimitive.Content,\n {\n role: \"alertdialog\",\n ...dialogScope,\n ...contentProps,\n ref: composedRefs,\n onOpenAutoFocus: composeEventHandlers(contentProps.onOpenAutoFocus, (event) => {\n event.preventDefault();\n cancelRef.current?.focus({ preventScroll: true });\n }),\n onPointerDownOutside: (event) => event.preventDefault(),\n onInteractOutside: (event) => event.preventDefault(),\n children: [\n /* @__PURE__ */ jsx(Slottable, { children }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef })\n ]\n }\n ) })\n }\n );\n }\n);\nAlertDialogContent.displayName = CONTENT_NAME;\nvar TITLE_NAME = \"AlertDialogTitle\";\nvar AlertDialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...titleProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Title, { ...dialogScope, ...titleProps, ref: forwardedRef });\n }\n);\nAlertDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"AlertDialogDescription\";\nvar AlertDialogDescription = React.forwardRef((props, forwardedRef) => {\n const { __scopeAlertDialog, ...descriptionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Description, { ...dialogScope, ...descriptionProps, ref: forwardedRef });\n});\nAlertDialogDescription.displayName = DESCRIPTION_NAME;\nvar ACTION_NAME = \"AlertDialogAction\";\nvar AlertDialogAction = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...actionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Close, { ...dialogScope, ...actionProps, ref: forwardedRef });\n }\n);\nAlertDialogAction.displayName = ACTION_NAME;\nvar CANCEL_NAME = \"AlertDialogCancel\";\nvar AlertDialogCancel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...cancelProps } = props;\n const { cancelRef } = useAlertDialogContentContext(CANCEL_NAME, __scopeAlertDialog);\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const ref = useComposedRefs(forwardedRef, cancelRef);\n return /* @__PURE__ */ jsx(DialogPrimitive.Close, { ...dialogScope, ...cancelProps, ref });\n }\n);\nAlertDialogCancel.displayName = CANCEL_NAME;\nvar DescriptionWarning = ({ contentRef }) => {\n const MESSAGE = `\\`${CONTENT_NAME}\\` requires a description for the component to be accessible for screen reader users.\n\nYou can add a description to the \\`${CONTENT_NAME}\\` by passing a \\`${DESCRIPTION_NAME}\\` component as a child, which also benefits sighted users by adding visible context to the dialog.\n\nAlternatively, you can use your own component as a description by assigning it an \\`id\\` and passing the same value to the \\`aria-describedby\\` prop in \\`${CONTENT_NAME}\\`. If the description is confusing or duplicative for sighted users, you can use the \\`@radix-ui/react-visually-hidden\\` primitive as a wrapper around your description component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;\n React.useEffect(() => {\n const hasDescription = document.getElementById(\n contentRef.current?.getAttribute(\"aria-describedby\")\n );\n if (!hasDescription) console.warn(MESSAGE);\n }, [MESSAGE, contentRef]);\n return null;\n};\nvar Root2 = AlertDialog;\nvar Trigger2 = AlertDialogTrigger;\nvar Portal2 = AlertDialogPortal;\nvar Overlay2 = AlertDialogOverlay;\nvar Content2 = AlertDialogContent;\nvar Action = AlertDialogAction;\nvar Cancel = AlertDialogCancel;\nvar Title2 = AlertDialogTitle;\nvar Description2 = AlertDialogDescription;\nexport {\n Action,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n Cancel,\n Content2 as Content,\n Description2 as Description,\n Overlay2 as Overlay,\n Portal2 as Portal,\n Root2 as Root,\n Title2 as Title,\n Trigger2 as Trigger,\n createAlertDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\n\nimport { cn } from \"@/lib/utils\";\nimport { buttonVariants } from \"@/components/ui/button\";\n\nconst AlertDialog = AlertDialogPrimitive.Root;\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n ref={ref}\n />\n));\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\n\nconst AlertDialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col space-y-2 text-center sm:text-left\", className)} {...props} />\n);\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\nconst AlertDialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className)} {...props} />\n);\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title ref={ref} className={cn(\"text-lg font-semibold\", className)} {...props} />\n));\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n));\nAlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action ref={ref} className={cn(buttonVariants(), className)} {...props} />\n));\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(buttonVariants({ variant: \"outline\" }), \"mt-2 sm:mt-0\", className)}\n {...props}\n />\n));\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n","import React, { useState, useEffect } from 'react';\nimport { Button } from '@/components/ui/button';\nimport { Card, CardContent } from '@/components/ui/card';\nimport { Badge } from '@/components/ui/badge';\nimport { Check, Image as ImageIcon, Eye, EyeOff, Trash2 } from 'lucide-react';\nimport { supabase } from '@/integrations/supabase/client';\nimport { useAuth } from '@/hooks/useAuth';\nimport { toast } from 'sonner';\nimport { T, translate } from '@/i18n';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\";\n\ninterface Version {\n id: string;\n title: string;\n image_url: string;\n is_selected: boolean;\n created_at: string;\n parent_id: string | null;\n visible: boolean;\n user_id: string; // Added for storage deletion path\n}\n\ninterface VersionSelectorProps {\n currentPictureId: string;\n onVersionSelect: (selectedVersionId: string) => void;\n}\n\nconst VersionSelector: React.FC<VersionSelectorProps> = ({\n currentPictureId,\n onVersionSelect\n}) => {\n const { user } = useAuth();\n const [versions, setVersions] = useState<Version[]>([]);\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState<string | null>(null);\n const [toggling, setToggling] = useState<string | null>(null);\n const [showDeleteDialog, setShowDeleteDialog] = useState(false);\n const [versionToDelete, setVersionToDelete] = useState<Version | null>(null);\n const [isDeleting, setIsDeleting] = useState(false);\n\n useEffect(() => {\n loadVersions();\n }, [currentPictureId]);\n\n const loadVersions = async () => {\n if (!user || !currentPictureId) return;\n\n setLoading(true);\n try {\n // Get the current picture to determine if it's a parent or child\n const { data: currentPicture, error: currentError } = await supabase\n .from('pictures')\n .select('id, parent_id, title, image_url, is_selected, created_at, visible')\n .eq('id', currentPictureId)\n .single();\n\n if (currentError) throw currentError;\n\n // Determine the root parent ID\n const rootParentId = currentPicture.parent_id || currentPicture.id;\n\n // Get all versions (parent + children) for this image tree\n const { data: allVersions, error: versionsError } = await supabase\n .from('pictures')\n .select('id, title, image_url, is_selected, created_at, parent_id, visible, user_id')\n .eq('user_id', user.id)\n .or(`id.eq.${rootParentId},parent_id.eq.${rootParentId}`)\n .order('created_at', { ascending: true });\n\n if (versionsError) throw versionsError;\n\n setVersions(allVersions || []);\n } catch (error) {\n console.error('Error loading versions:', error);\n toast.error(translate('Failed to load image versions'));\n } finally {\n setLoading(false);\n }\n };\n\n const handleVersionSelect = async (versionId: string) => {\n if (!user) return;\n\n setUpdating(versionId);\n try {\n // First, unselect all versions in this image tree\n const rootParentId = versions.find(v => v.parent_id === null)?.id || currentPictureId;\n\n await supabase\n .from('pictures')\n .update({ is_selected: false })\n .eq('user_id', user.id)\n .or(`id.eq.${rootParentId},parent_id.eq.${rootParentId}`);\n\n // Then select the chosen version\n const { error: selectError } = await supabase\n .from('pictures')\n .update({ is_selected: true })\n .eq('id', versionId)\n .eq('user_id', user.id);\n\n if (selectError) throw selectError;\n\n // Update local state\n setVersions(prevVersions =>\n prevVersions.map(v => ({\n ...v,\n is_selected: v.id === versionId\n }))\n );\n\n toast.success(translate('Version selected successfully!'));\n onVersionSelect(versionId);\n } catch (error) {\n console.error('Error selecting version:', error);\n toast.error(translate('Failed to select version'));\n } finally {\n setUpdating(null);\n }\n };\n\n const handleToggleVisibility = async (versionId: string, currentVisibility: boolean) => {\n if (!user) return;\n\n setToggling(versionId);\n try {\n const { error } = await supabase\n .from('pictures')\n .update({ visible: !currentVisibility })\n .eq('id', versionId)\n .eq('user_id', user.id);\n\n if (error) throw error;\n\n // Update local state\n setVersions(prevVersions =>\n prevVersions.map(v => ({\n ...v,\n visible: v.id === versionId ? !currentVisibility : v.visible\n }))\n );\n\n toast.success(translate(!currentVisibility ? 'Version made visible successfully!' : 'Version hidden successfully!'));\n } catch (error) {\n console.error('Error toggling visibility:', error);\n toast.error(translate('Failed to update visibility'));\n } finally {\n setToggling(null);\n }\n };\n\n const handleDeleteClick = (version: Version) => {\n setVersionToDelete(version);\n setShowDeleteDialog(true);\n };\n\n const confirmDelete = async () => {\n if (!versionToDelete || !user) return;\n\n setIsDeleting(true);\n try {\n // 1. Find all descendants to delete (cascade)\n const { data: allUserPictures, error: loadError } = await supabase\n .from('pictures')\n .select('*')\n .eq('user_id', user.id); // Fetch all to build tree (optimization: could just fetch relevant sub-tree but this is safer)\n\n if (loadError) throw loadError;\n\n const findDescendants = (parentId: string): typeof versionToDelete[] => {\n const descendants: typeof versionToDelete[] = [];\n const children = allUserPictures.filter(p => p.parent_id === parentId);\n children.forEach(child => {\n descendants.push(child);\n descendants.push(...findDescendants(child.id));\n });\n return descendants;\n };\n\n const descendantsToDelete = findDescendants(versionToDelete.id);\n const allToDelete = [versionToDelete, ...descendantsToDelete];\n\n // 2. Delete from Storage for ALL items\n for (const item of allToDelete) {\n if (item.image_url?.includes('supabase.co/storage/')) {\n const urlParts = item.image_url.split('/');\n const fileName = urlParts[urlParts.length - 1];\n const bucketPath = `${item.user_id}/${fileName}`;\n\n await supabase.storage\n .from('pictures')\n .remove([bucketPath]);\n }\n }\n\n // 3. Delete from Database (bulk)\n const { error: dbError } = await supabase\n .from('pictures')\n .delete()\n .in('id', allToDelete.map(v => v.id));\n\n if (dbError) throw dbError;\n\n // 4. Update local state\n const deletedIds = new Set(allToDelete.map(v => v.id));\n setVersions(prev => prev.filter(v => !deletedIds.has(v.id)));\n\n const totalDeleted = allToDelete.length;\n toast.success(translate(`Deleted ${totalDeleted > 1 ? `${totalDeleted} versions` : 'version'} successfully`));\n\n } catch (error) {\n console.error('Error deleting version:', error);\n toast.error(translate('Failed to delete version'));\n } finally {\n setIsDeleting(false);\n setShowDeleteDialog(false);\n setVersionToDelete(null);\n }\n };\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center p-4\">\n <div className=\"text-muted-foreground\"><T>Loading versions...</T></div>\n </div>\n );\n }\n\n if (versions.length <= 1) {\n return (\n <div className=\"text-center p-4\">\n <p className=\"text-muted-foreground\"><T>No other versions available for this image.</T></p>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center gap-2 mb-4\">\n <ImageIcon className=\"h-5 w-5\" />\n <h3 className=\"font-semibold\"><T>Image Versions</T></h3>\n <Badge variant=\"secondary\">{versions.length}</Badge>\n </div>\n\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-4\">\n {versions.map((version) => (\n <Card\n key={version.id}\n className={`cursor-pointer transition-all hover:scale-105 ${version.is_selected ? 'ring-2 ring-primary' : ''\n }`}\n >\n <CardContent className=\"p-2\">\n <div className=\"aspect-square relative mb-2 overflow-hidden rounded-md\">\n <img\n src={version.image_url}\n alt={version.title}\n className=\"w-full h-full object-cover\"\n />\n {version.is_selected && (\n <div className=\"absolute top-2 right-2 bg-primary text-primary-foreground rounded-full p-1\">\n <Check className=\"h-3 w-3\" />\n </div>\n )}\n </div>\n\n <div className=\"space-y-1\">\n <p className=\"text-xs font-medium truncate\">{version.title}</p>\n <p className=\"text-xs text-muted-foreground\">\n {new Date(version.created_at).toLocaleDateString()}\n </p>\n <div className=\"flex items-center gap-1\">\n {version.parent_id === null && (\n <Badge variant=\"outline\" className=\"text-xs\"><T>Original</T></Badge>\n )}\n {!version.visible && (\n <Badge variant=\"secondary\" className=\"text-xs\"><T>Hidden</T></Badge>\n )}\n </div>\n </div>\n\n <div className=\"flex gap-1 mt-2\">\n <Button\n size=\"sm\"\n className=\"flex-1\"\n variant={version.is_selected ? \"default\" : \"outline\"}\n onClick={() => handleVersionSelect(version.id)}\n disabled={updating === version.id}\n >\n <T>{updating === version.id ? 'Selecting...' :\n version.is_selected ? 'Selected' : 'Select'}</T>\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => handleToggleVisibility(version.id, version.visible)}\n disabled={toggling === version.id}\n className=\"px-2\"\n >\n {toggling === version.id ? (\n <div className=\"animate-spin rounded-full h-3 w-3 border border-current border-t-transparent\" />\n ) : version.visible ? (\n <Eye className=\"h-3 w-3\" />\n ) : (\n <EyeOff className=\"h-3 w-3\" />\n )}\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"px-2 text-destructive hover:text-destructive hover:bg-destructive/10\"\n onClick={() => handleDeleteClick(version)}\n disabled={isDeleting || version.id === currentPictureId} // Disable deleting the currently ACTIVE one? Or just handle correctly?\n title={translate(\"Delete version\")}\n >\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <AlertDialog open={showDeleteDialog} onOpenChange={setShowDeleteDialog}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle><T>Delete Version</T></AlertDialogTitle>\n <AlertDialogDescription>\n <T>Are you sure you want to delete this version?</T> \"{versionToDelete?.title}\"\n <br /><br />\n <span className=\"text-destructive font-semibold\">\n <T>This action cannot be undone.</T>\n </span>\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel><T>Cancel</T></AlertDialogCancel>\n <AlertDialogAction\n onClick={(e) => {\n e.preventDefault();\n confirmDelete();\n }}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n disabled={isDeleting}\n >\n {isDeleting ? <T>Deleting...</T> : <T>Delete</T>}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n};\n\nexport default VersionSelector;","function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '6.16.0'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream<T>`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, BlobLikePart, or AsyncIterable of BlobLikeParts\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create a ChatKit session\n *\n * @example\n * ```ts\n * const chatSession =\n * await client.beta.chatkit.sessions.create({\n * user: 'x',\n * workflow: { id: 'id' },\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/chatkit/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n });\n }\n /**\n * Cancel a ChatKit session\n *\n * @example\n * ```ts\n * const chatSession =\n * await client.beta.chatkit.sessions.cancel('cksess_123');\n * ```\n */\n cancel(sessionID, options) {\n return this._client.post(path `/chatkit/sessions/${sessionID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Threads extends APIResource {\n /**\n * Retrieve a ChatKit thread\n *\n * @example\n * ```ts\n * const chatkitThread =\n * await client.beta.chatkit.threads.retrieve('cthr_123');\n * ```\n */\n retrieve(threadID, options) {\n return this._client.get(path `/chatkit/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n });\n }\n /**\n * List ChatKit threads\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatkitThread of client.beta.chatkit.threads.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chatkit/threads', (ConversationCursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n });\n }\n /**\n * Delete a ChatKit thread\n *\n * @example\n * ```ts\n * const thread = await client.beta.chatkit.threads.delete(\n * 'cthr_123',\n * );\n * ```\n */\n delete(threadID, options) {\n return this._client.delete(path `/chatkit/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n });\n }\n /**\n * List ChatKit thread items\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const thread of client.beta.chatkit.threads.listItems(\n * 'cthr_123',\n * )) {\n * // ...\n * }\n * ```\n */\n listItems(threadID, query = {}, options) {\n return this._client.getAPIList(path `/chatkit/threads/${threadID}/items`, (ConversationCursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions } from \"./sessions.mjs\";\nimport * as ThreadsAPI from \"./threads.mjs\";\nimport { Threads, } from \"./threads.mjs\";\nexport class ChatKit extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nChatKit.Sessions = Sessions;\nChatKit.Threads = Threads;\n//# sourceMappingURL=chatkit.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ChatKitAPI from \"./chatkit/chatkit.mjs\";\nimport { ChatKit } from \"./chatkit/chatkit.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.chatkit = new ChatKitAPI.ChatKit(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.ChatKit = ChatKit;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * - The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools)\n * for details.\n * - The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input)\n * or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n * - The Batch API only supports `.jsonl` files up to 200 MB in size. The input\n * also has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file and remove it from all vector stores.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Calls extends APIResource {\n /**\n * Accept an incoming SIP call and configure the realtime session that will handle\n * it.\n *\n * @example\n * ```ts\n * await client.realtime.calls.accept('call_id', {\n * type: 'realtime',\n * });\n * ```\n */\n accept(callID, body, options) {\n return this._client.post(path `/realtime/calls/${callID}/accept`, {\n body,\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n /**\n * End an active Realtime API call, whether it was initiated over SIP or WebRTC.\n *\n * @example\n * ```ts\n * await client.realtime.calls.hangup('call_id');\n * ```\n */\n hangup(callID, options) {\n return this._client.post(path `/realtime/calls/${callID}/hangup`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n /**\n * Transfer an active SIP call to a new destination using the SIP REFER verb.\n *\n * @example\n * ```ts\n * await client.realtime.calls.refer('call_id', {\n * target_uri: 'tel:+14155550123',\n * });\n * ```\n */\n refer(callID, body, options) {\n return this._client.post(path `/realtime/calls/${callID}/refer`, {\n body,\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n /**\n * Decline an incoming SIP call by returning a SIP status code to the caller.\n *\n * @example\n * ```ts\n * await client.realtime.calls.reject('call_id');\n * ```\n */\n reject(callID, body = {}, options) {\n return this._client.post(path `/realtime/calls/${callID}/reject`, {\n body,\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=calls.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n *\n * @example\n * ```ts\n * const clientSecret =\n * await client.realtime.clientSecrets.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CallsAPI from \"./calls.mjs\";\nimport { Calls } from \"./calls.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n this.calls = new CallsAPI.Calls(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\nRealtime.Calls = Calls;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class InputTokens extends APIResource {\n /**\n * Get input token counts\n *\n * @example\n * ```ts\n * const response = await client.responses.inputTokens.count();\n * ```\n */\n count(body = {}, options) {\n return this._client.post('/responses/input_tokens', { body, ...options });\n }\n}\n//# sourceMappingURL=input-tokens.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport * as InputTokensAPI from \"./input-tokens.mjs\";\nimport { InputTokens } from \"./input-tokens.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n this.inputTokens = new InputTokensAPI.InputTokens(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n /**\n * Compact conversation\n *\n * @example\n * ```ts\n * const compactedResponse = await client.responses.compact({\n * model: 'gpt-5.2',\n * });\n * ```\n */\n compact(body, options) {\n return this._client.post('/responses/compact', { body, ...options });\n }\n}\nResponses.InputItems = InputItems;\nResponses.InputTokens = InputTokens;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { ConversationCursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { maybeMultipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Videos extends APIResource {\n /**\n * Create a video\n */\n create(body, options) {\n return this._client.post('/videos', maybeMultipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve a video\n */\n retrieve(videoID, options) {\n return this._client.get(path `/videos/${videoID}`, options);\n }\n /**\n * List videos\n */\n list(query = {}, options) {\n return this._client.getAPIList('/videos', (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete a video\n */\n delete(videoID, options) {\n return this._client.delete(path `/videos/${videoID}`, options);\n }\n /**\n * Download video content\n */\n downloadContent(videoID, query = {}, options) {\n return this._client.get(path `/videos/${videoID}/content`, {\n query,\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Create a video remix\n */\n remix(videoID, body, options) {\n return this._client.post(path `/videos/${videoID}/remix`, maybeMultipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=videos.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1,<base64> format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,<base64>. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Videos, } from \"./resources/videos.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record<string, string | undefined>} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n this.videos = new API.Videos(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\nOpenAI.Videos = Videos;\n//# sourceMappingURL=client.mjs.map","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nlet emojiRegex = undefined;\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n /**\n * `c` was changed to `[cC]` to replicate /i flag\n */\n cuid: /^[cC][^\\s-]{8,}$/,\n cuid2: /^[0-9a-z]+$/,\n ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n /**\n * `a-z` was added to replicate /i flag\n */\n email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n /**\n * Constructed a valid Unicode RegExp\n *\n * Lazily instantiate since this type of regex isn't supported\n * in all envs (e.g. React Native).\n *\n * See:\n * https://github.com/colinhacks/zod/issues/2433\n * Fix in Zod:\n * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n */\n emoji: () => {\n if (emojiRegex === undefined) {\n emojiRegex = RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\");\n }\n return emojiRegex;\n },\n /**\n * Unused\n */\n uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n /**\n * Unused\n */\n ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n /**\n * Unused\n */\n ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n nanoid: /^[a-zA-Z0-9_-]{21}$/,\n jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n};\nexport function parseStringDef(def, refs) {\n const res = {\n type: \"string\",\n };\n if (def.checks) {\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"max\":\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"email\":\n switch (refs.emailStrategy) {\n case \"format:email\":\n addFormat(res, \"email\", check.message, refs);\n break;\n case \"format:idn-email\":\n addFormat(res, \"idn-email\", check.message, refs);\n break;\n case \"pattern:zod\":\n addPattern(res, zodPatterns.email, check.message, refs);\n break;\n }\n break;\n case \"url\":\n addFormat(res, \"uri\", check.message, refs);\n break;\n case \"uuid\":\n addFormat(res, \"uuid\", check.message, refs);\n break;\n case \"regex\":\n addPattern(res, check.regex, check.message, refs);\n break;\n case \"cuid\":\n addPattern(res, zodPatterns.cuid, check.message, refs);\n break;\n case \"cuid2\":\n addPattern(res, zodPatterns.cuid2, check.message, refs);\n break;\n case \"startsWith\":\n addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);\n break;\n case \"endsWith\":\n addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);\n break;\n case \"datetime\":\n addFormat(res, \"date-time\", check.message, refs);\n break;\n case \"date\":\n addFormat(res, \"date\", check.message, refs);\n break;\n case \"time\":\n addFormat(res, \"time\", check.message, refs);\n break;\n case \"duration\":\n addFormat(res, \"duration\", check.message, refs);\n break;\n case \"length\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"includes\": {\n addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);\n break;\n }\n case \"ip\": {\n if (check.version !== \"v6\") {\n addFormat(res, \"ipv4\", check.message, refs);\n }\n if (check.version !== \"v4\") {\n addFormat(res, \"ipv6\", check.message, refs);\n }\n break;\n }\n case \"base64url\":\n addPattern(res, zodPatterns.base64url, check.message, refs);\n break;\n case \"jwt\":\n addPattern(res, zodPatterns.jwt, check.message, refs);\n break;\n case \"cidr\": {\n if (check.version !== \"v6\") {\n addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n }\n if (check.version !== \"v4\") {\n addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n }\n break;\n }\n case \"emoji\":\n addPattern(res, zodPatterns.emoji(), check.message, refs);\n break;\n case \"ulid\": {\n addPattern(res, zodPatterns.ulid, check.message, refs);\n break;\n }\n case \"base64\": {\n switch (refs.base64Strategy) {\n case \"format:binary\": {\n addFormat(res, \"binary\", check.message, refs);\n break;\n }\n case \"contentEncoding:base64\": {\n setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n break;\n }\n case \"pattern:zod\": {\n addPattern(res, zodPatterns.base64, check.message, refs);\n break;\n }\n }\n break;\n }\n case \"nanoid\": {\n addPattern(res, zodPatterns.nanoid, check.message, refs);\n }\n case \"toLowerCase\":\n case \"toUpperCase\":\n case \"trim\":\n break;\n default:\n ((_) => { })(check);\n }\n }\n }\n return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n return refs.patternStrategy === \"escape\"\n ? escapeNonAlphaNumeric(literal)\n : literal;\n}\nconst ALPHA_NUMERIC = new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");\nfunction escapeNonAlphaNumeric(source) {\n let result = \"\";\n for (let i = 0; i < source.length; i++) {\n if (!ALPHA_NUMERIC.has(source[i])) {\n result += \"\\\\\";\n }\n result += source[i];\n }\n return result;\n}\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(schema, value, message, refs) {\n if (schema.format || schema.anyOf?.some((x) => x.format)) {\n if (!schema.anyOf) {\n schema.anyOf = [];\n }\n if (schema.format) {\n schema.anyOf.push({\n format: schema.format,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { format: schema.errorMessage.format },\n }),\n });\n delete schema.format;\n if (schema.errorMessage) {\n delete schema.errorMessage.format;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.anyOf.push({\n format: value,\n ...(message &&\n refs.errorMessages && { errorMessage: { format: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"format\", value, message, refs);\n }\n}\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(schema, regex, message, refs) {\n if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n if (!schema.allOf) {\n schema.allOf = [];\n }\n if (schema.pattern) {\n schema.allOf.push({\n pattern: schema.pattern,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { pattern: schema.errorMessage.pattern },\n }),\n });\n delete schema.pattern;\n if (schema.errorMessage) {\n delete schema.errorMessage.pattern;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.allOf.push({\n pattern: stringifyRegExpWithFlags(regex, refs),\n ...(message &&\n refs.errorMessages && { errorMessage: { pattern: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"pattern\", stringifyRegExpWithFlags(regex, refs), message, refs);\n }\n}\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex, refs) {\n if (!refs.applyRegexFlags || !regex.flags) {\n return regex.source;\n }\n // Currently handled flags\n const flags = {\n i: regex.flags.includes(\"i\"),\n m: regex.flags.includes(\"m\"),\n s: regex.flags.includes(\"s\"), // `.` matches newlines\n };\n // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n const source = flags.i ? regex.source.toLowerCase() : regex.source;\n let pattern = \"\";\n let isEscaped = false;\n let inCharGroup = false;\n let inCharRange = false;\n for (let i = 0; i < source.length; i++) {\n if (isEscaped) {\n pattern += source[i];\n isEscaped = false;\n continue;\n }\n if (flags.i) {\n if (inCharGroup) {\n if (source[i].match(/[a-z]/)) {\n if (inCharRange) {\n pattern += source[i];\n pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n inCharRange = false;\n }\n else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n pattern += source[i];\n inCharRange = true;\n }\n else {\n pattern += `${source[i]}${source[i].toUpperCase()}`;\n }\n continue;\n }\n }\n else if (source[i].match(/[a-z]/)) {\n pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n continue;\n }\n }\n if (flags.m) {\n if (source[i] === \"^\") {\n pattern += `(^|(?<=[\\r\\n]))`;\n continue;\n }\n else if (source[i] === \"$\") {\n pattern += `($|(?=[\\r\\n]))`;\n continue;\n }\n }\n if (flags.s && source[i] === \".\") {\n pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n continue;\n }\n pattern += source[i];\n if (source[i] === \"\\\\\") {\n isEscaped = true;\n }\n else if (inCharGroup && source[i] === \"]\") {\n inCharGroup = false;\n }\n else if (!inCharGroup && source[i] === \"[\") {\n inCharGroup = true;\n }\n }\n try {\n new RegExp(pattern);\n }\n catch {\n console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n return regex.source;\n }\n return pattern;\n}\n","/**\n * Contains the list of OpenAPI data types\n * as defined by https://swagger.io/docs/specification/data-models/data-types/\n * @public\n */\nvar SchemaType;\n(function (SchemaType) {\n /** String type. */\n SchemaType[\"STRING\"] = \"string\";\n /** Number type. */\n SchemaType[\"NUMBER\"] = \"number\";\n /** Integer type. */\n SchemaType[\"INTEGER\"] = \"integer\";\n /** Boolean type. */\n SchemaType[\"BOOLEAN\"] = \"boolean\";\n /** Array type. */\n SchemaType[\"ARRAY\"] = \"array\";\n /** Object type. */\n SchemaType[\"OBJECT\"] = \"object\";\n})(SchemaType || (SchemaType = {}));\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @public\n */\nvar ExecutableCodeLanguage;\n(function (ExecutableCodeLanguage) {\n ExecutableCodeLanguage[\"LANGUAGE_UNSPECIFIED\"] = \"language_unspecified\";\n ExecutableCodeLanguage[\"PYTHON\"] = \"python\";\n})(ExecutableCodeLanguage || (ExecutableCodeLanguage = {}));\n/**\n * Possible outcomes of code execution.\n * @public\n */\nvar Outcome;\n(function (Outcome) {\n /**\n * Unspecified status. This value should not be used.\n */\n Outcome[\"OUTCOME_UNSPECIFIED\"] = \"outcome_unspecified\";\n /**\n * Code execution completed successfully.\n */\n Outcome[\"OUTCOME_OK\"] = \"outcome_ok\";\n /**\n * Code execution finished but with a failure. `stderr` should contain the\n * reason.\n */\n Outcome[\"OUTCOME_FAILED\"] = \"outcome_failed\";\n /**\n * Code execution ran for too long, and was cancelled. There may or may not\n * be a partial output present.\n */\n Outcome[\"OUTCOME_DEADLINE_EXCEEDED\"] = \"outcome_deadline_exceeded\";\n})(Outcome || (Outcome = {}));\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Possible roles.\n * @public\n */\nconst POSSIBLE_ROLES = [\"user\", \"model\", \"function\", \"system\"];\n/**\n * Harm categories that would cause prompts or candidates to be blocked.\n * @public\n */\nvar HarmCategory;\n(function (HarmCategory) {\n HarmCategory[\"HARM_CATEGORY_UNSPECIFIED\"] = \"HARM_CATEGORY_UNSPECIFIED\";\n HarmCategory[\"HARM_CATEGORY_HATE_SPEECH\"] = \"HARM_CATEGORY_HATE_SPEECH\";\n HarmCategory[\"HARM_CATEGORY_SEXUALLY_EXPLICIT\"] = \"HARM_CATEGORY_SEXUALLY_EXPLICIT\";\n HarmCategory[\"HARM_CATEGORY_HARASSMENT\"] = \"HARM_CATEGORY_HARASSMENT\";\n HarmCategory[\"HARM_CATEGORY_DANGEROUS_CONTENT\"] = \"HARM_CATEGORY_DANGEROUS_CONTENT\";\n HarmCategory[\"HARM_CATEGORY_CIVIC_INTEGRITY\"] = \"HARM_CATEGORY_CIVIC_INTEGRITY\";\n})(HarmCategory || (HarmCategory = {}));\n/**\n * Threshold above which a prompt or candidate will be blocked.\n * @public\n */\nvar HarmBlockThreshold;\n(function (HarmBlockThreshold) {\n /** Threshold is unspecified. */\n HarmBlockThreshold[\"HARM_BLOCK_THRESHOLD_UNSPECIFIED\"] = \"HARM_BLOCK_THRESHOLD_UNSPECIFIED\";\n /** Content with NEGLIGIBLE will be allowed. */\n HarmBlockThreshold[\"BLOCK_LOW_AND_ABOVE\"] = \"BLOCK_LOW_AND_ABOVE\";\n /** Content with NEGLIGIBLE and LOW will be allowed. */\n HarmBlockThreshold[\"BLOCK_MEDIUM_AND_ABOVE\"] = \"BLOCK_MEDIUM_AND_ABOVE\";\n /** Content with NEGLIGIBLE, LOW, and MEDIUM will be allowed. */\n HarmBlockThreshold[\"BLOCK_ONLY_HIGH\"] = \"BLOCK_ONLY_HIGH\";\n /** All content will be allowed. */\n HarmBlockThreshold[\"BLOCK_NONE\"] = \"BLOCK_NONE\";\n})(HarmBlockThreshold || (HarmBlockThreshold = {}));\n/**\n * Probability that a prompt or candidate matches a harm category.\n * @public\n */\nvar HarmProbability;\n(function (HarmProbability) {\n /** Probability is unspecified. */\n HarmProbability[\"HARM_PROBABILITY_UNSPECIFIED\"] = \"HARM_PROBABILITY_UNSPECIFIED\";\n /** Content has a negligible chance of being unsafe. */\n HarmProbability[\"NEGLIGIBLE\"] = \"NEGLIGIBLE\";\n /** Content has a low chance of being unsafe. */\n HarmProbability[\"LOW\"] = \"LOW\";\n /** Content has a medium chance of being unsafe. */\n HarmProbability[\"MEDIUM\"] = \"MEDIUM\";\n /** Content has a high chance of being unsafe. */\n HarmProbability[\"HIGH\"] = \"HIGH\";\n})(HarmProbability || (HarmProbability = {}));\n/**\n * Reason that a prompt was blocked.\n * @public\n */\nvar BlockReason;\n(function (BlockReason) {\n // A blocked reason was not specified.\n BlockReason[\"BLOCKED_REASON_UNSPECIFIED\"] = \"BLOCKED_REASON_UNSPECIFIED\";\n // Content was blocked by safety settings.\n BlockReason[\"SAFETY\"] = \"SAFETY\";\n // Content was blocked, but the reason is uncategorized.\n BlockReason[\"OTHER\"] = \"OTHER\";\n})(BlockReason || (BlockReason = {}));\n/**\n * Reason that a candidate finished.\n * @public\n */\nvar FinishReason;\n(function (FinishReason) {\n // Default value. This value is unused.\n FinishReason[\"FINISH_REASON_UNSPECIFIED\"] = \"FINISH_REASON_UNSPECIFIED\";\n // Natural stop point of the model or provided stop sequence.\n FinishReason[\"STOP\"] = \"STOP\";\n // The maximum number of tokens as specified in the request was reached.\n FinishReason[\"MAX_TOKENS\"] = \"MAX_TOKENS\";\n // The candidate content was flagged for safety reasons.\n FinishReason[\"SAFETY\"] = \"SAFETY\";\n // The candidate content was flagged for recitation reasons.\n FinishReason[\"RECITATION\"] = \"RECITATION\";\n // The candidate content was flagged for using an unsupported language.\n FinishReason[\"LANGUAGE\"] = \"LANGUAGE\";\n // Token generation stopped because the content contains forbidden terms.\n FinishReason[\"BLOCKLIST\"] = \"BLOCKLIST\";\n // Token generation stopped for potentially containing prohibited content.\n FinishReason[\"PROHIBITED_CONTENT\"] = \"PROHIBITED_CONTENT\";\n // Token generation stopped because the content potentially contains Sensitive Personally Identifiable Information (SPII).\n FinishReason[\"SPII\"] = \"SPII\";\n // The function call generated by the model is invalid.\n FinishReason[\"MALFORMED_FUNCTION_CALL\"] = \"MALFORMED_FUNCTION_CALL\";\n // Unknown reason.\n FinishReason[\"OTHER\"] = \"OTHER\";\n})(FinishReason || (FinishReason = {}));\n/**\n * Task type for embedding content.\n * @public\n */\nvar TaskType;\n(function (TaskType) {\n TaskType[\"TASK_TYPE_UNSPECIFIED\"] = \"TASK_TYPE_UNSPECIFIED\";\n TaskType[\"RETRIEVAL_QUERY\"] = \"RETRIEVAL_QUERY\";\n TaskType[\"RETRIEVAL_DOCUMENT\"] = \"RETRIEVAL_DOCUMENT\";\n TaskType[\"SEMANTIC_SIMILARITY\"] = \"SEMANTIC_SIMILARITY\";\n TaskType[\"CLASSIFICATION\"] = \"CLASSIFICATION\";\n TaskType[\"CLUSTERING\"] = \"CLUSTERING\";\n})(TaskType || (TaskType = {}));\n/**\n * @public\n */\nvar FunctionCallingMode;\n(function (FunctionCallingMode) {\n // Unspecified function calling mode. This value should not be used.\n FunctionCallingMode[\"MODE_UNSPECIFIED\"] = \"MODE_UNSPECIFIED\";\n // Default model behavior, model decides to predict either a function call\n // or a natural language repspose.\n FunctionCallingMode[\"AUTO\"] = \"AUTO\";\n // Model is constrained to always predicting a function call only.\n // If \"allowed_function_names\" are set, the predicted function call will be\n // limited to any one of \"allowed_function_names\", else the predicted\n // function call will be any one of the provided \"function_declarations\".\n FunctionCallingMode[\"ANY\"] = \"ANY\";\n // Model will not predict any function call. Model behavior is same as when\n // not passing any function declarations.\n FunctionCallingMode[\"NONE\"] = \"NONE\";\n})(FunctionCallingMode || (FunctionCallingMode = {}));\n/**\n * The mode of the predictor to be used in dynamic retrieval.\n * @public\n */\nvar DynamicRetrievalMode;\n(function (DynamicRetrievalMode) {\n // Unspecified function calling mode. This value should not be used.\n DynamicRetrievalMode[\"MODE_UNSPECIFIED\"] = \"MODE_UNSPECIFIED\";\n // Run retrieval only when system decides it is necessary.\n DynamicRetrievalMode[\"MODE_DYNAMIC\"] = \"MODE_DYNAMIC\";\n})(DynamicRetrievalMode || (DynamicRetrievalMode = {}));\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Basic error type for this SDK.\n * @public\n */\nclass GoogleGenerativeAIError extends Error {\n constructor(message) {\n super(`[GoogleGenerativeAI Error]: ${message}`);\n }\n}\n/**\n * Errors in the contents of a response from the model. This includes parsing\n * errors, or responses including a safety block reason.\n * @public\n */\nclass GoogleGenerativeAIResponseError extends GoogleGenerativeAIError {\n constructor(message, response) {\n super(message);\n this.response = response;\n }\n}\n/**\n * Error class covering HTTP errors when calling the server. Includes HTTP\n * status, statusText, and optional details, if provided in the server response.\n * @public\n */\nclass GoogleGenerativeAIFetchError extends GoogleGenerativeAIError {\n constructor(message, status, statusText, errorDetails) {\n super(message);\n this.status = status;\n this.statusText = statusText;\n this.errorDetails = errorDetails;\n }\n}\n/**\n * Errors in the contents of a request originating from user input.\n * @public\n */\nclass GoogleGenerativeAIRequestInputError extends GoogleGenerativeAIError {\n}\n/**\n * Error thrown when a request is aborted, either due to a timeout or\n * intentional cancellation by the user.\n * @public\n */\nclass GoogleGenerativeAIAbortError extends GoogleGenerativeAIError {\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_BASE_URL = \"https://generativelanguage.googleapis.com\";\nconst DEFAULT_API_VERSION = \"v1beta\";\n/**\n * We can't `require` package.json if this runs on web. We will use rollup to\n * swap in the version number here at build time.\n */\nconst PACKAGE_VERSION = \"0.24.1\";\nconst PACKAGE_LOG_HEADER = \"genai-js\";\nvar Task;\n(function (Task) {\n Task[\"GENERATE_CONTENT\"] = \"generateContent\";\n Task[\"STREAM_GENERATE_CONTENT\"] = \"streamGenerateContent\";\n Task[\"COUNT_TOKENS\"] = \"countTokens\";\n Task[\"EMBED_CONTENT\"] = \"embedContent\";\n Task[\"BATCH_EMBED_CONTENTS\"] = \"batchEmbedContents\";\n})(Task || (Task = {}));\nclass RequestUrl {\n constructor(model, task, apiKey, stream, requestOptions) {\n this.model = model;\n this.task = task;\n this.apiKey = apiKey;\n this.stream = stream;\n this.requestOptions = requestOptions;\n }\n toString() {\n var _a, _b;\n const apiVersion = ((_a = this.requestOptions) === null || _a === void 0 ? void 0 : _a.apiVersion) || DEFAULT_API_VERSION;\n const baseUrl = ((_b = this.requestOptions) === null || _b === void 0 ? void 0 : _b.baseUrl) || DEFAULT_BASE_URL;\n let url = `${baseUrl}/${apiVersion}/${this.model}:${this.task}`;\n if (this.stream) {\n url += \"?alt=sse\";\n }\n return url;\n }\n}\n/**\n * Simple, but may become more complex if we add more versions to log.\n */\nfunction getClientHeaders(requestOptions) {\n const clientHeaders = [];\n if (requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.apiClient) {\n clientHeaders.push(requestOptions.apiClient);\n }\n clientHeaders.push(`${PACKAGE_LOG_HEADER}/${PACKAGE_VERSION}`);\n return clientHeaders.join(\" \");\n}\nasync function getHeaders(url) {\n var _a;\n const headers = new Headers();\n headers.append(\"Content-Type\", \"application/json\");\n headers.append(\"x-goog-api-client\", getClientHeaders(url.requestOptions));\n headers.append(\"x-goog-api-key\", url.apiKey);\n let customHeaders = (_a = url.requestOptions) === null || _a === void 0 ? void 0 : _a.customHeaders;\n if (customHeaders) {\n if (!(customHeaders instanceof Headers)) {\n try {\n customHeaders = new Headers(customHeaders);\n }\n catch (e) {\n throw new GoogleGenerativeAIRequestInputError(`unable to convert customHeaders value ${JSON.stringify(customHeaders)} to Headers: ${e.message}`);\n }\n }\n for (const [headerName, headerValue] of customHeaders.entries()) {\n if (headerName === \"x-goog-api-key\") {\n throw new GoogleGenerativeAIRequestInputError(`Cannot set reserved header name ${headerName}`);\n }\n else if (headerName === \"x-goog-api-client\") {\n throw new GoogleGenerativeAIRequestInputError(`Header name ${headerName} can only be set using the apiClient field`);\n }\n headers.append(headerName, headerValue);\n }\n }\n return headers;\n}\nasync function constructModelRequest(model, task, apiKey, stream, body, requestOptions) {\n const url = new RequestUrl(model, task, apiKey, stream, requestOptions);\n return {\n url: url.toString(),\n fetchOptions: Object.assign(Object.assign({}, buildFetchOptions(requestOptions)), { method: \"POST\", headers: await getHeaders(url), body }),\n };\n}\nasync function makeModelRequest(model, task, apiKey, stream, body, requestOptions = {}, \n// Allows this to be stubbed for tests\nfetchFn = fetch) {\n const { url, fetchOptions } = await constructModelRequest(model, task, apiKey, stream, body, requestOptions);\n return makeRequest(url, fetchOptions, fetchFn);\n}\nasync function makeRequest(url, fetchOptions, fetchFn = fetch) {\n let response;\n try {\n response = await fetchFn(url, fetchOptions);\n }\n catch (e) {\n handleResponseError(e, url);\n }\n if (!response.ok) {\n await handleResponseNotOk(response, url);\n }\n return response;\n}\nfunction handleResponseError(e, url) {\n let err = e;\n if (err.name === \"AbortError\") {\n err = new GoogleGenerativeAIAbortError(`Request aborted when fetching ${url.toString()}: ${e.message}`);\n err.stack = e.stack;\n }\n else if (!(e instanceof GoogleGenerativeAIFetchError ||\n e instanceof GoogleGenerativeAIRequestInputError)) {\n err = new GoogleGenerativeAIError(`Error fetching from ${url.toString()}: ${e.message}`);\n err.stack = e.stack;\n }\n throw err;\n}\nasync function handleResponseNotOk(response, url) {\n let message = \"\";\n let errorDetails;\n try {\n const json = await response.json();\n message = json.error.message;\n if (json.error.details) {\n message += ` ${JSON.stringify(json.error.details)}`;\n errorDetails = json.error.details;\n }\n }\n catch (e) {\n // ignored\n }\n throw new GoogleGenerativeAIFetchError(`Error fetching from ${url.toString()}: [${response.status} ${response.statusText}] ${message}`, response.status, response.statusText, errorDetails);\n}\n/**\n * Generates the request options to be passed to the fetch API.\n * @param requestOptions - The user-defined request options.\n * @returns The generated request options.\n */\nfunction buildFetchOptions(requestOptions) {\n const fetchOptions = {};\n if ((requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.signal) !== undefined || (requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeout) >= 0) {\n const controller = new AbortController();\n if ((requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeout) >= 0) {\n setTimeout(() => controller.abort(), requestOptions.timeout);\n }\n if (requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.signal) {\n requestOptions.signal.addEventListener(\"abort\", () => {\n controller.abort();\n });\n }\n fetchOptions.signal = controller.signal;\n }\n return fetchOptions;\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Adds convenience helper methods to a response object, including stream\n * chunks (as long as each chunk is a complete GenerateContentResponse JSON).\n */\nfunction addHelpers(response) {\n response.text = () => {\n if (response.candidates && response.candidates.length > 0) {\n if (response.candidates.length > 1) {\n console.warn(`This response had ${response.candidates.length} ` +\n `candidates. Returning text from the first candidate only. ` +\n `Access response.candidates directly to use the other candidates.`);\n }\n if (hadBadFinishReason(response.candidates[0])) {\n throw new GoogleGenerativeAIResponseError(`${formatBlockErrorMessage(response)}`, response);\n }\n return getText(response);\n }\n else if (response.promptFeedback) {\n throw new GoogleGenerativeAIResponseError(`Text not available. ${formatBlockErrorMessage(response)}`, response);\n }\n return \"\";\n };\n /**\n * TODO: remove at next major version\n */\n response.functionCall = () => {\n if (response.candidates && response.candidates.length > 0) {\n if (response.candidates.length > 1) {\n console.warn(`This response had ${response.candidates.length} ` +\n `candidates. Returning function calls from the first candidate only. ` +\n `Access response.candidates directly to use the other candidates.`);\n }\n if (hadBadFinishReason(response.candidates[0])) {\n throw new GoogleGenerativeAIResponseError(`${formatBlockErrorMessage(response)}`, response);\n }\n console.warn(`response.functionCall() is deprecated. ` +\n `Use response.functionCalls() instead.`);\n return getFunctionCalls(response)[0];\n }\n else if (response.promptFeedback) {\n throw new GoogleGenerativeAIResponseError(`Function call not available. ${formatBlockErrorMessage(response)}`, response);\n }\n return undefined;\n };\n response.functionCalls = () => {\n if (response.candidates && response.candidates.length > 0) {\n if (response.candidates.length > 1) {\n console.warn(`This response had ${response.candidates.length} ` +\n `candidates. Returning function calls from the first candidate only. ` +\n `Access response.candidates directly to use the other candidates.`);\n }\n if (hadBadFinishReason(response.candidates[0])) {\n throw new GoogleGenerativeAIResponseError(`${formatBlockErrorMessage(response)}`, response);\n }\n return getFunctionCalls(response);\n }\n else if (response.promptFeedback) {\n throw new GoogleGenerativeAIResponseError(`Function call not available. ${formatBlockErrorMessage(response)}`, response);\n }\n return undefined;\n };\n return response;\n}\n/**\n * Returns all text found in all parts of first candidate.\n */\nfunction getText(response) {\n var _a, _b, _c, _d;\n const textStrings = [];\n if ((_b = (_a = response.candidates) === null || _a === void 0 ? void 0 : _a[0].content) === null || _b === void 0 ? void 0 : _b.parts) {\n for (const part of (_d = (_c = response.candidates) === null || _c === void 0 ? void 0 : _c[0].content) === null || _d === void 0 ? void 0 : _d.parts) {\n if (part.text) {\n textStrings.push(part.text);\n }\n if (part.executableCode) {\n textStrings.push(\"\\n```\" +\n part.executableCode.language +\n \"\\n\" +\n part.executableCode.code +\n \"\\n```\\n\");\n }\n if (part.codeExecutionResult) {\n textStrings.push(\"\\n```\\n\" + part.codeExecutionResult.output + \"\\n```\\n\");\n }\n }\n }\n if (textStrings.length > 0) {\n return textStrings.join(\"\");\n }\n else {\n return \"\";\n }\n}\n/**\n * Returns functionCall of first candidate.\n */\nfunction getFunctionCalls(response) {\n var _a, _b, _c, _d;\n const functionCalls = [];\n if ((_b = (_a = response.candidates) === null || _a === void 0 ? void 0 : _a[0].content) === null || _b === void 0 ? void 0 : _b.parts) {\n for (const part of (_d = (_c = response.candidates) === null || _c === void 0 ? void 0 : _c[0].content) === null || _d === void 0 ? void 0 : _d.parts) {\n if (part.functionCall) {\n functionCalls.push(part.functionCall);\n }\n }\n }\n if (functionCalls.length > 0) {\n return functionCalls;\n }\n else {\n return undefined;\n }\n}\nconst badFinishReasons = [\n FinishReason.RECITATION,\n FinishReason.SAFETY,\n FinishReason.LANGUAGE,\n];\nfunction hadBadFinishReason(candidate) {\n return (!!candidate.finishReason &&\n badFinishReasons.includes(candidate.finishReason));\n}\nfunction formatBlockErrorMessage(response) {\n var _a, _b, _c;\n let message = \"\";\n if ((!response.candidates || response.candidates.length === 0) &&\n response.promptFeedback) {\n message += \"Response was blocked\";\n if ((_a = response.promptFeedback) === null || _a === void 0 ? void 0 : _a.blockReason) {\n message += ` due to ${response.promptFeedback.blockReason}`;\n }\n if ((_b = response.promptFeedback) === null || _b === void 0 ? void 0 : _b.blockReasonMessage) {\n message += `: ${response.promptFeedback.blockReasonMessage}`;\n }\n }\n else if ((_c = response.candidates) === null || _c === void 0 ? void 0 : _c[0]) {\n const firstCandidate = response.candidates[0];\n if (hadBadFinishReason(firstCandidate)) {\n message += `Candidate was blocked due to ${firstCandidate.finishReason}`;\n if (firstCandidate.finishMessage) {\n message += `: ${firstCandidate.finishMessage}`;\n }\n }\n }\n return message;\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\n\r\nfunction __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nfunction __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst responseLineRE = /^data\\: (.*)(?:\\n\\n|\\r\\r|\\r\\n\\r\\n)/;\n/**\n * Process a response.body stream from the backend and return an\n * iterator that provides one complete GenerateContentResponse at a time\n * and a promise that resolves with a single aggregated\n * GenerateContentResponse.\n *\n * @param response - Response from a fetch call\n */\nfunction processStream(response) {\n const inputStream = response.body.pipeThrough(new TextDecoderStream(\"utf8\", { fatal: true }));\n const responseStream = getResponseStream(inputStream);\n const [stream1, stream2] = responseStream.tee();\n return {\n stream: generateResponseSequence(stream1),\n response: getResponsePromise(stream2),\n };\n}\nasync function getResponsePromise(stream) {\n const allResponses = [];\n const reader = stream.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n return addHelpers(aggregateResponses(allResponses));\n }\n allResponses.push(value);\n }\n}\nfunction generateResponseSequence(stream) {\n return __asyncGenerator(this, arguments, function* generateResponseSequence_1() {\n const reader = stream.getReader();\n while (true) {\n const { value, done } = yield __await(reader.read());\n if (done) {\n break;\n }\n yield yield __await(addHelpers(value));\n }\n });\n}\n/**\n * Reads a raw stream from the fetch response and join incomplete\n * chunks, returning a new stream that provides a single complete\n * GenerateContentResponse in each iteration.\n */\nfunction getResponseStream(inputStream) {\n const reader = inputStream.getReader();\n const stream = new ReadableStream({\n start(controller) {\n let currentText = \"\";\n return pump();\n function pump() {\n return reader\n .read()\n .then(({ value, done }) => {\n if (done) {\n if (currentText.trim()) {\n controller.error(new GoogleGenerativeAIError(\"Failed to parse stream\"));\n return;\n }\n controller.close();\n return;\n }\n currentText += value;\n let match = currentText.match(responseLineRE);\n let parsedResponse;\n while (match) {\n try {\n parsedResponse = JSON.parse(match[1]);\n }\n catch (e) {\n controller.error(new GoogleGenerativeAIError(`Error parsing JSON response: \"${match[1]}\"`));\n return;\n }\n controller.enqueue(parsedResponse);\n currentText = currentText.substring(match[0].length);\n match = currentText.match(responseLineRE);\n }\n return pump();\n })\n .catch((e) => {\n let err = e;\n err.stack = e.stack;\n if (err.name === \"AbortError\") {\n err = new GoogleGenerativeAIAbortError(\"Request aborted when reading from the stream\");\n }\n else {\n err = new GoogleGenerativeAIError(\"Error reading from the stream\");\n }\n throw err;\n });\n }\n },\n });\n return stream;\n}\n/**\n * Aggregates an array of `GenerateContentResponse`s into a single\n * GenerateContentResponse.\n */\nfunction aggregateResponses(responses) {\n const lastResponse = responses[responses.length - 1];\n const aggregatedResponse = {\n promptFeedback: lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.promptFeedback,\n };\n for (const response of responses) {\n if (response.candidates) {\n let candidateIndex = 0;\n for (const candidate of response.candidates) {\n if (!aggregatedResponse.candidates) {\n aggregatedResponse.candidates = [];\n }\n if (!aggregatedResponse.candidates[candidateIndex]) {\n aggregatedResponse.candidates[candidateIndex] = {\n index: candidateIndex,\n };\n }\n // Keep overwriting, the last one will be final\n aggregatedResponse.candidates[candidateIndex].citationMetadata =\n candidate.citationMetadata;\n aggregatedResponse.candidates[candidateIndex].groundingMetadata =\n candidate.groundingMetadata;\n aggregatedResponse.candidates[candidateIndex].finishReason =\n candidate.finishReason;\n aggregatedResponse.candidates[candidateIndex].finishMessage =\n candidate.finishMessage;\n aggregatedResponse.candidates[candidateIndex].safetyRatings =\n candidate.safetyRatings;\n /**\n * Candidates should always have content and parts, but this handles\n * possible malformed responses.\n */\n if (candidate.content && candidate.content.parts) {\n if (!aggregatedResponse.candidates[candidateIndex].content) {\n aggregatedResponse.candidates[candidateIndex].content = {\n role: candidate.content.role || \"user\",\n parts: [],\n };\n }\n const newPart = {};\n for (const part of candidate.content.parts) {\n if (part.text) {\n newPart.text = part.text;\n }\n if (part.functionCall) {\n newPart.functionCall = part.functionCall;\n }\n if (part.executableCode) {\n newPart.executableCode = part.executableCode;\n }\n if (part.codeExecutionResult) {\n newPart.codeExecutionResult = part.codeExecutionResult;\n }\n if (Object.keys(newPart).length === 0) {\n newPart.text = \"\";\n }\n aggregatedResponse.candidates[candidateIndex].content.parts.push(newPart);\n }\n }\n }\n candidateIndex++;\n }\n if (response.usageMetadata) {\n aggregatedResponse.usageMetadata = response.usageMetadata;\n }\n }\n return aggregatedResponse;\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function generateContentStream(apiKey, model, params, requestOptions) {\n const response = await makeModelRequest(model, Task.STREAM_GENERATE_CONTENT, apiKey, \n /* stream */ true, JSON.stringify(params), requestOptions);\n return processStream(response);\n}\nasync function generateContent(apiKey, model, params, requestOptions) {\n const response = await makeModelRequest(model, Task.GENERATE_CONTENT, apiKey, \n /* stream */ false, JSON.stringify(params), requestOptions);\n const responseJson = await response.json();\n const enhancedResponse = addHelpers(responseJson);\n return {\n response: enhancedResponse,\n };\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction formatSystemInstruction(input) {\n // null or undefined\n if (input == null) {\n return undefined;\n }\n else if (typeof input === \"string\") {\n return { role: \"system\", parts: [{ text: input }] };\n }\n else if (input.text) {\n return { role: \"system\", parts: [input] };\n }\n else if (input.parts) {\n if (!input.role) {\n return { role: \"system\", parts: input.parts };\n }\n else {\n return input;\n }\n }\n}\nfunction formatNewContent(request) {\n let newParts = [];\n if (typeof request === \"string\") {\n newParts = [{ text: request }];\n }\n else {\n for (const partOrString of request) {\n if (typeof partOrString === \"string\") {\n newParts.push({ text: partOrString });\n }\n else {\n newParts.push(partOrString);\n }\n }\n }\n return assignRoleToPartsAndValidateSendMessageRequest(newParts);\n}\n/**\n * When multiple Part types (i.e. FunctionResponsePart and TextPart) are\n * passed in a single Part array, we may need to assign different roles to each\n * part. Currently only FunctionResponsePart requires a role other than 'user'.\n * @private\n * @param parts Array of parts to pass to the model\n * @returns Array of content items\n */\nfunction assignRoleToPartsAndValidateSendMessageRequest(parts) {\n const userContent = { role: \"user\", parts: [] };\n const functionContent = { role: \"function\", parts: [] };\n let hasUserContent = false;\n let hasFunctionContent = false;\n for (const part of parts) {\n if (\"functionResponse\" in part) {\n functionContent.parts.push(part);\n hasFunctionContent = true;\n }\n else {\n userContent.parts.push(part);\n hasUserContent = true;\n }\n }\n if (hasUserContent && hasFunctionContent) {\n throw new GoogleGenerativeAIError(\"Within a single message, FunctionResponse cannot be mixed with other type of part in the request for sending chat message.\");\n }\n if (!hasUserContent && !hasFunctionContent) {\n throw new GoogleGenerativeAIError(\"No content is provided for sending chat message.\");\n }\n if (hasUserContent) {\n return userContent;\n }\n return functionContent;\n}\nfunction formatCountTokensInput(params, modelParams) {\n var _a;\n let formattedGenerateContentRequest = {\n model: modelParams === null || modelParams === void 0 ? void 0 : modelParams.model,\n generationConfig: modelParams === null || modelParams === void 0 ? void 0 : modelParams.generationConfig,\n safetySettings: modelParams === null || modelParams === void 0 ? void 0 : modelParams.safetySettings,\n tools: modelParams === null || modelParams === void 0 ? void 0 : modelParams.tools,\n toolConfig: modelParams === null || modelParams === void 0 ? void 0 : modelParams.toolConfig,\n systemInstruction: modelParams === null || modelParams === void 0 ? void 0 : modelParams.systemInstruction,\n cachedContent: (_a = modelParams === null || modelParams === void 0 ? void 0 : modelParams.cachedContent) === null || _a === void 0 ? void 0 : _a.name,\n contents: [],\n };\n const containsGenerateContentRequest = params.generateContentRequest != null;\n if (params.contents) {\n if (containsGenerateContentRequest) {\n throw new GoogleGenerativeAIRequestInputError(\"CountTokensRequest must have one of contents or generateContentRequest, not both.\");\n }\n formattedGenerateContentRequest.contents = params.contents;\n }\n else if (containsGenerateContentRequest) {\n formattedGenerateContentRequest = Object.assign(Object.assign({}, formattedGenerateContentRequest), params.generateContentRequest);\n }\n else {\n // Array or string\n const content = formatNewContent(params);\n formattedGenerateContentRequest.contents = [content];\n }\n return { generateContentRequest: formattedGenerateContentRequest };\n}\nfunction formatGenerateContentInput(params) {\n let formattedRequest;\n if (params.contents) {\n formattedRequest = params;\n }\n else {\n // Array or string\n const content = formatNewContent(params);\n formattedRequest = { contents: [content] };\n }\n if (params.systemInstruction) {\n formattedRequest.systemInstruction = formatSystemInstruction(params.systemInstruction);\n }\n return formattedRequest;\n}\nfunction formatEmbedContentInput(params) {\n if (typeof params === \"string\" || Array.isArray(params)) {\n const content = formatNewContent(params);\n return { content };\n }\n return params;\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// https://ai.google.dev/api/rest/v1beta/Content#part\nconst VALID_PART_FIELDS = [\n \"text\",\n \"inlineData\",\n \"functionCall\",\n \"functionResponse\",\n \"executableCode\",\n \"codeExecutionResult\",\n];\nconst VALID_PARTS_PER_ROLE = {\n user: [\"text\", \"inlineData\"],\n function: [\"functionResponse\"],\n model: [\"text\", \"functionCall\", \"executableCode\", \"codeExecutionResult\"],\n // System instructions shouldn't be in history anyway.\n system: [\"text\"],\n};\nfunction validateChatHistory(history) {\n let prevContent = false;\n for (const currContent of history) {\n const { role, parts } = currContent;\n if (!prevContent && role !== \"user\") {\n throw new GoogleGenerativeAIError(`First content should be with role 'user', got ${role}`);\n }\n if (!POSSIBLE_ROLES.includes(role)) {\n throw new GoogleGenerativeAIError(`Each item should include role field. Got ${role} but valid roles are: ${JSON.stringify(POSSIBLE_ROLES)}`);\n }\n if (!Array.isArray(parts)) {\n throw new GoogleGenerativeAIError(\"Content should have 'parts' property with an array of Parts\");\n }\n if (parts.length === 0) {\n throw new GoogleGenerativeAIError(\"Each Content should have at least one part\");\n }\n const countFields = {\n text: 0,\n inlineData: 0,\n functionCall: 0,\n functionResponse: 0,\n fileData: 0,\n executableCode: 0,\n codeExecutionResult: 0,\n };\n for (const part of parts) {\n for (const key of VALID_PART_FIELDS) {\n if (key in part) {\n countFields[key] += 1;\n }\n }\n }\n const validParts = VALID_PARTS_PER_ROLE[role];\n for (const key of VALID_PART_FIELDS) {\n if (!validParts.includes(key) && countFields[key] > 0) {\n throw new GoogleGenerativeAIError(`Content with role '${role}' can't contain '${key}' part`);\n }\n }\n prevContent = true;\n }\n}\n/**\n * Returns true if the response is valid (could be appended to the history), flase otherwise.\n */\nfunction isValidResponse(response) {\n var _a;\n if (response.candidates === undefined || response.candidates.length === 0) {\n return false;\n }\n const content = (_a = response.candidates[0]) === null || _a === void 0 ? void 0 : _a.content;\n if (content === undefined) {\n return false;\n }\n if (content.parts === undefined || content.parts.length === 0) {\n return false;\n }\n for (const part of content.parts) {\n if (part === undefined || Object.keys(part).length === 0) {\n return false;\n }\n if (part.text !== undefined && part.text === \"\") {\n return false;\n }\n }\n return true;\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Do not log a message for this error.\n */\nconst SILENT_ERROR = \"SILENT_ERROR\";\n/**\n * ChatSession class that enables sending chat messages and stores\n * history of sent and received messages so far.\n *\n * @public\n */\nclass ChatSession {\n constructor(apiKey, model, params, _requestOptions = {}) {\n this.model = model;\n this.params = params;\n this._requestOptions = _requestOptions;\n this._history = [];\n this._sendPromise = Promise.resolve();\n this._apiKey = apiKey;\n if (params === null || params === void 0 ? void 0 : params.history) {\n validateChatHistory(params.history);\n this._history = params.history;\n }\n }\n /**\n * Gets the chat history so far. Blocked prompts are not added to history.\n * Blocked candidates are not added to history, nor are the prompts that\n * generated them.\n */\n async getHistory() {\n await this._sendPromise;\n return this._history;\n }\n /**\n * Sends a chat message and receives a non-streaming\n * {@link GenerateContentResult}.\n *\n * Fields set in the optional {@link SingleRequestOptions} parameter will\n * take precedence over the {@link RequestOptions} values provided to\n * {@link GoogleGenerativeAI.getGenerativeModel }.\n */\n async sendMessage(request, requestOptions = {}) {\n var _a, _b, _c, _d, _e, _f;\n await this._sendPromise;\n const newContent = formatNewContent(request);\n const generateContentRequest = {\n safetySettings: (_a = this.params) === null || _a === void 0 ? void 0 : _a.safetySettings,\n generationConfig: (_b = this.params) === null || _b === void 0 ? void 0 : _b.generationConfig,\n tools: (_c = this.params) === null || _c === void 0 ? void 0 : _c.tools,\n toolConfig: (_d = this.params) === null || _d === void 0 ? void 0 : _d.toolConfig,\n systemInstruction: (_e = this.params) === null || _e === void 0 ? void 0 : _e.systemInstruction,\n cachedContent: (_f = this.params) === null || _f === void 0 ? void 0 : _f.cachedContent,\n contents: [...this._history, newContent],\n };\n const chatSessionRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n let finalResult;\n // Add onto the chain.\n this._sendPromise = this._sendPromise\n .then(() => generateContent(this._apiKey, this.model, generateContentRequest, chatSessionRequestOptions))\n .then((result) => {\n var _a;\n if (isValidResponse(result.response)) {\n this._history.push(newContent);\n const responseContent = Object.assign({ parts: [], \n // Response seems to come back without a role set.\n role: \"model\" }, (_a = result.response.candidates) === null || _a === void 0 ? void 0 : _a[0].content);\n this._history.push(responseContent);\n }\n else {\n const blockErrorMessage = formatBlockErrorMessage(result.response);\n if (blockErrorMessage) {\n console.warn(`sendMessage() was unsuccessful. ${blockErrorMessage}. Inspect response object for details.`);\n }\n }\n finalResult = result;\n })\n .catch((e) => {\n // Resets _sendPromise to avoid subsequent calls failing and throw error.\n this._sendPromise = Promise.resolve();\n throw e;\n });\n await this._sendPromise;\n return finalResult;\n }\n /**\n * Sends a chat message and receives the response as a\n * {@link GenerateContentStreamResult} containing an iterable stream\n * and a response promise.\n *\n * Fields set in the optional {@link SingleRequestOptions} parameter will\n * take precedence over the {@link RequestOptions} values provided to\n * {@link GoogleGenerativeAI.getGenerativeModel }.\n */\n async sendMessageStream(request, requestOptions = {}) {\n var _a, _b, _c, _d, _e, _f;\n await this._sendPromise;\n const newContent = formatNewContent(request);\n const generateContentRequest = {\n safetySettings: (_a = this.params) === null || _a === void 0 ? void 0 : _a.safetySettings,\n generationConfig: (_b = this.params) === null || _b === void 0 ? void 0 : _b.generationConfig,\n tools: (_c = this.params) === null || _c === void 0 ? void 0 : _c.tools,\n toolConfig: (_d = this.params) === null || _d === void 0 ? void 0 : _d.toolConfig,\n systemInstruction: (_e = this.params) === null || _e === void 0 ? void 0 : _e.systemInstruction,\n cachedContent: (_f = this.params) === null || _f === void 0 ? void 0 : _f.cachedContent,\n contents: [...this._history, newContent],\n };\n const chatSessionRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n const streamPromise = generateContentStream(this._apiKey, this.model, generateContentRequest, chatSessionRequestOptions);\n // Add onto the chain.\n this._sendPromise = this._sendPromise\n .then(() => streamPromise)\n // This must be handled to avoid unhandled rejection, but jump\n // to the final catch block with a label to not log this error.\n .catch((_ignored) => {\n throw new Error(SILENT_ERROR);\n })\n .then((streamResult) => streamResult.response)\n .then((response) => {\n if (isValidResponse(response)) {\n this._history.push(newContent);\n const responseContent = Object.assign({}, response.candidates[0].content);\n // Response seems to come back without a role set.\n if (!responseContent.role) {\n responseContent.role = \"model\";\n }\n this._history.push(responseContent);\n }\n else {\n const blockErrorMessage = formatBlockErrorMessage(response);\n if (blockErrorMessage) {\n console.warn(`sendMessageStream() was unsuccessful. ${blockErrorMessage}. Inspect response object for details.`);\n }\n }\n })\n .catch((e) => {\n // Errors in streamPromise are already catchable by the user as\n // streamPromise is returned.\n // Avoid duplicating the error message in logs.\n if (e.message !== SILENT_ERROR) {\n // Users do not have access to _sendPromise to catch errors\n // downstream from streamPromise, so they should not throw.\n console.error(e);\n }\n });\n return streamPromise;\n }\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function countTokens(apiKey, model, params, singleRequestOptions) {\n const response = await makeModelRequest(model, Task.COUNT_TOKENS, apiKey, false, JSON.stringify(params), singleRequestOptions);\n return response.json();\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function embedContent(apiKey, model, params, requestOptions) {\n const response = await makeModelRequest(model, Task.EMBED_CONTENT, apiKey, false, JSON.stringify(params), requestOptions);\n return response.json();\n}\nasync function batchEmbedContents(apiKey, model, params, requestOptions) {\n const requestsWithModel = params.requests.map((request) => {\n return Object.assign(Object.assign({}, request), { model });\n });\n const response = await makeModelRequest(model, Task.BATCH_EMBED_CONTENTS, apiKey, false, JSON.stringify({ requests: requestsWithModel }), requestOptions);\n return response.json();\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class for generative model APIs.\n * @public\n */\nclass GenerativeModel {\n constructor(apiKey, modelParams, _requestOptions = {}) {\n this.apiKey = apiKey;\n this._requestOptions = _requestOptions;\n if (modelParams.model.includes(\"/\")) {\n // Models may be named \"models/model-name\" or \"tunedModels/model-name\"\n this.model = modelParams.model;\n }\n else {\n // If path is not included, assume it's a non-tuned model.\n this.model = `models/${modelParams.model}`;\n }\n this.generationConfig = modelParams.generationConfig || {};\n this.safetySettings = modelParams.safetySettings || [];\n this.tools = modelParams.tools;\n this.toolConfig = modelParams.toolConfig;\n this.systemInstruction = formatSystemInstruction(modelParams.systemInstruction);\n this.cachedContent = modelParams.cachedContent;\n }\n /**\n * Makes a single non-streaming call to the model\n * and returns an object containing a single {@link GenerateContentResponse}.\n *\n * Fields set in the optional {@link SingleRequestOptions} parameter will\n * take precedence over the {@link RequestOptions} values provided to\n * {@link GoogleGenerativeAI.getGenerativeModel }.\n */\n async generateContent(request, requestOptions = {}) {\n var _a;\n const formattedParams = formatGenerateContentInput(request);\n const generativeModelRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n return generateContent(this.apiKey, this.model, Object.assign({ generationConfig: this.generationConfig, safetySettings: this.safetySettings, tools: this.tools, toolConfig: this.toolConfig, systemInstruction: this.systemInstruction, cachedContent: (_a = this.cachedContent) === null || _a === void 0 ? void 0 : _a.name }, formattedParams), generativeModelRequestOptions);\n }\n /**\n * Makes a single streaming call to the model and returns an object\n * containing an iterable stream that iterates over all chunks in the\n * streaming response as well as a promise that returns the final\n * aggregated response.\n *\n * Fields set in the optional {@link SingleRequestOptions} parameter will\n * take precedence over the {@link RequestOptions} values provided to\n * {@link GoogleGenerativeAI.getGenerativeModel }.\n */\n async generateContentStream(request, requestOptions = {}) {\n var _a;\n const formattedParams = formatGenerateContentInput(request);\n const generativeModelRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n return generateContentStream(this.apiKey, this.model, Object.assign({ generationConfig: this.generationConfig, safetySettings: this.safetySettings, tools: this.tools, toolConfig: this.toolConfig, systemInstruction: this.systemInstruction, cachedContent: (_a = this.cachedContent) === null || _a === void 0 ? void 0 : _a.name }, formattedParams), generativeModelRequestOptions);\n }\n /**\n * Gets a new {@link ChatSession} instance which can be used for\n * multi-turn chats.\n */\n startChat(startChatParams) {\n var _a;\n return new ChatSession(this.apiKey, this.model, Object.assign({ generationConfig: this.generationConfig, safetySettings: this.safetySettings, tools: this.tools, toolConfig: this.toolConfig, systemInstruction: this.systemInstruction, cachedContent: (_a = this.cachedContent) === null || _a === void 0 ? void 0 : _a.name }, startChatParams), this._requestOptions);\n }\n /**\n * Counts the tokens in the provided request.\n *\n * Fields set in the optional {@link SingleRequestOptions} parameter will\n * take precedence over the {@link RequestOptions} values provided to\n * {@link GoogleGenerativeAI.getGenerativeModel }.\n */\n async countTokens(request, requestOptions = {}) {\n const formattedParams = formatCountTokensInput(request, {\n model: this.model,\n generationConfig: this.generationConfig,\n safetySettings: this.safetySettings,\n tools: this.tools,\n toolConfig: this.toolConfig,\n systemInstruction: this.systemInstruction,\n cachedContent: this.cachedContent,\n });\n const generativeModelRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n return countTokens(this.apiKey, this.model, formattedParams, generativeModelRequestOptions);\n }\n /**\n * Embeds the provided content.\n *\n * Fields set in the optional {@link SingleRequestOptions} parameter will\n * take precedence over the {@link RequestOptions} values provided to\n * {@link GoogleGenerativeAI.getGenerativeModel }.\n */\n async embedContent(request, requestOptions = {}) {\n const formattedParams = formatEmbedContentInput(request);\n const generativeModelRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n return embedContent(this.apiKey, this.model, formattedParams, generativeModelRequestOptions);\n }\n /**\n * Embeds an array of {@link EmbedContentRequest}s.\n *\n * Fields set in the optional {@link SingleRequestOptions} parameter will\n * take precedence over the {@link RequestOptions} values provided to\n * {@link GoogleGenerativeAI.getGenerativeModel }.\n */\n async batchEmbedContents(batchEmbedContentRequest, requestOptions = {}) {\n const generativeModelRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n return batchEmbedContents(this.apiKey, this.model, batchEmbedContentRequest, generativeModelRequestOptions);\n }\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Top-level class for this SDK\n * @public\n */\nclass GoogleGenerativeAI {\n constructor(apiKey) {\n this.apiKey = apiKey;\n }\n /**\n * Gets a {@link GenerativeModel} instance for the provided model name.\n */\n getGenerativeModel(modelParams, requestOptions) {\n if (!modelParams.model) {\n throw new GoogleGenerativeAIError(`Must provide a model name. ` +\n `Example: genai.getGenerativeModel({ model: 'my-model-name' })`);\n }\n return new GenerativeModel(this.apiKey, modelParams, requestOptions);\n }\n /**\n * Creates a {@link GenerativeModel} instance from provided content cache.\n */\n getGenerativeModelFromCachedContent(cachedContent, modelParams, requestOptions) {\n if (!cachedContent.name) {\n throw new GoogleGenerativeAIRequestInputError(\"Cached content must contain a `name` field.\");\n }\n if (!cachedContent.model) {\n throw new GoogleGenerativeAIRequestInputError(\"Cached content must contain a `model` field.\");\n }\n /**\n * Not checking tools and toolConfig for now as it would require a deep\n * equality comparison and isn't likely to be a common case.\n */\n const disallowedDuplicates = [\"model\", \"systemInstruction\"];\n for (const key of disallowedDuplicates) {\n if ((modelParams === null || modelParams === void 0 ? void 0 : modelParams[key]) &&\n cachedContent[key] &&\n (modelParams === null || modelParams === void 0 ? void 0 : modelParams[key]) !== cachedContent[key]) {\n if (key === \"model\") {\n const modelParamsComp = modelParams.model.startsWith(\"models/\")\n ? modelParams.model.replace(\"models/\", \"\")\n : modelParams.model;\n const cachedContentComp = cachedContent.model.startsWith(\"models/\")\n ? cachedContent.model.replace(\"models/\", \"\")\n : cachedContent.model;\n if (modelParamsComp === cachedContentComp) {\n continue;\n }\n }\n throw new GoogleGenerativeAIRequestInputError(`Different value for \"${key}\" specified in modelParams` +\n ` (${modelParams[key]}) and cachedContent (${cachedContent[key]})`);\n }\n }\n const modelParamsFromCache = Object.assign(Object.assign({}, modelParams), { model: cachedContent.model, tools: cachedContent.tools, toolConfig: cachedContent.toolConfig, systemInstruction: cachedContent.systemInstruction, cachedContent });\n return new GenerativeModel(this.apiKey, modelParamsFromCache, requestOptions);\n }\n}\n\nexport { BlockReason, ChatSession, DynamicRetrievalMode, ExecutableCodeLanguage, FinishReason, FunctionCallingMode, GenerativeModel, GoogleGenerativeAI, GoogleGenerativeAIAbortError, GoogleGenerativeAIError, GoogleGenerativeAIFetchError, GoogleGenerativeAIRequestInputError, GoogleGenerativeAIResponseError, HarmBlockThreshold, HarmCategory, HarmProbability, Outcome, POSSIBLE_ROLES, SchemaType, TaskType };\n//# sourceMappingURL=index.mjs.map\n","import { GoogleGenerativeAI, Part, GenerationConfig } from \"@google/generative-ai\";\nimport { supabase } from \"@/integrations/supabase/client\";\n\n// Simple logger for user feedback (safety messages)\nconst logger = {\n debug: (message: string, data?: any) => console.debug(`[DEBUG] ${message}`, data),\n info: (message: string, data?: any) => console.info(`[INFO] ${message}`, data),\n warn: (message: string, data?: any) => console.warn(`[WARN] ${message}`, data),\n error: (message: string, data?: any) => console.error(`[ERROR] ${message}`, data),\n};\n\nexport interface ImageGenerationRequest {\n prompt: string;\n width?: number;\n height?: number;\n model?: string;\n}\n\nexport interface ImageGenerationResponse {\n success: boolean;\n imagePath?: string;\n imageUrl?: string;\n text?: string; // Add text field for AI descriptions\n error?: string;\n}\n\nexport interface ImageEditRequest {\n imagePath: string;\n prompt: string;\n action: string;\n}\n\ninterface ImageResult {\n imageData: ArrayBuffer;\n text?: string;\n}\n\n// Get user's Google API key from user_secrets\nexport const getGoogleApiKey = async (): Promise<string | null> => {\n try {\n const { data: { user } } = await supabase.auth.getUser();\n if (!user) {\n logger.error('No authenticated user found');\n return null;\n }\n\n const { data: secretData, error } = await supabase\n .from('user_secrets')\n .select('settings')\n .eq('user_id', user.id)\n .maybeSingle();\n\n if (error) {\n logger.error('Error fetching user secrets:', error);\n return null;\n }\n\n const settings = secretData?.settings as { api_keys?: Record<string, string> } | null;\n const apiKey = settings?.api_keys?.google_api_key;\n\n if (!apiKey) {\n logger.error('No Google API key found in user secrets. Please add your Google API key in your profile settings.');\n return null;\n }\n\n return apiKey;\n } catch (error) {\n logger.error('Error getting Google API key:', error);\n return null;\n }\n};\n\n\n// Create Google GenAI client\nconst createGoogleGenAIClient = async (apiKey?: string) => {\n const key = apiKey || await getGoogleApiKey();\n\n if (!key) {\n logger.error('No Google API key found. Please provide an API key or set it in your profile.');\n return null;\n }\n\n return new GoogleGenerativeAI(key);\n};\n\n// Helper to get MIME type from file extension\nconst getMimeType = (filename: string): string => {\n const ext = filename.split('.').pop()?.toLowerCase();\n const mimeTypes: { [key: string]: string } = {\n 'png': 'image/png',\n 'jpg': 'image/jpeg',\n 'jpeg': 'image/jpeg',\n 'webp': 'image/webp',\n 'gif': 'image/gif'\n };\n return mimeTypes[ext || ''] || 'image/png';\n};\n\n// Helper to convert File to base64\nconst fileToBase64 = (file: File): Promise<string> => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n const result = reader.result as string;\n // Remove data URL prefix to get just the base64 string\n const base64 = result.split(',')[1];\n resolve(base64);\n };\n reader.onerror = error => reject(error);\n });\n};\n\nexport const createImage = async (\n prompt: string,\n model: string = 'gemini-3-pro-image-preview',\n apiKey?: string,\n aspectRatio?: string,\n resolution?: string,\n enableSearchGrounding?: boolean\n): Promise<ImageResult | null> => {\n const ai = await createGoogleGenAIClient(apiKey);\n if (!ai) {\n return null;\n }\n\n const genModel = ai.getGenerativeModel({\n model,\n // @ts-ignore - tools is not in the version of the SDK used, but are supported by the API\n tools: enableSearchGrounding ? [{ 'google_search': {} }] : undefined,\n });\n\n const generationConfig: GenerationConfig = {};\n if (model === 'gemini-3-pro-image-preview' && (aspectRatio || resolution)) {\n // @ts-ignore - imageConfig and imageSize are not in the version of the SDK used, but are supported by the API\n generationConfig.imageConfig = {};\n if (aspectRatio) {\n // @ts-ignore\n generationConfig.imageConfig.aspectRatio = aspectRatio;\n }\n if (resolution) {\n // @ts-ignore\n generationConfig.imageConfig.imageSize = resolution;\n }\n }\n\n try {\n let result;\n if (Object.keys(generationConfig).length > 0) {\n // @ts-ignore\n result = await genModel.generateContent(prompt, generationConfig);\n } else {\n result = await genModel.generateContent(prompt);\n }\n\n const response = result.response;\n logger.debug('Google AI API response structure:', {\n hasResponse: !!response,\n hasCandidates: !!response?.candidates,\n candidatesLength: response?.candidates?.length,\n });\n\n if (!response || !response.candidates || response.candidates.length === 0) {\n logger.error('Invalid API response structure - no candidates found');\n throw new Error('No candidates returned from Google AI API. The content may have been blocked due to safety filters or other restrictions.');\n }\n\n const candidate = response.candidates[0];\n\n // Check for safety filter rejections first\n if (candidate.finishReason && candidate.finishReason !== 'STOP') {\n const finishReasonMessages: { [key: string]: string } = {\n 'SAFETY': 'Content blocked by safety filters. The prompt contains content that violates Google AI safety policies.',\n 'RECITATION': 'Content blocked due to recitation concerns. The generated content may be too similar to existing copyrighted material.',\n 'OTHER': 'Content generation stopped for other safety or policy reasons.'\n };\n\n const message = finishReasonMessages[candidate.finishReason] ||\n `Content generation stopped. Reason: ${candidate.finishReason}`;\n\n logger.error('Google AI blocked content due to safety filters:', {\n finishReason: candidate.finishReason,\n rejectionMessage: message,\n });\n throw new Error(`Request blocked by Google AI: ${message}`);\n }\n\n if (!candidate.content || !candidate.content.parts) {\n logger.error('Invalid candidate structure - no content parts found');\n throw new Error('Invalid response structure from Google AI API - no content parts found.');\n }\n\n const parts = candidate.content.parts;\n\n let imageData: ArrayBuffer | null = null;\n let aiText: string | null = null;\n\n // Extract both image data and text from all parts\n for (const part of parts) {\n if ('inlineData' in part && part.inlineData) {\n // Convert base64 to ArrayBuffer\n const binaryString = atob(part.inlineData.data);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n imageData = bytes.buffer;\n } else if ('text' in part && part.text) {\n // Collect text descriptions\n if (!aiText) {\n aiText = part.text.trim();\n } else {\n aiText += ' ' + part.text.trim();\n }\n }\n }\n\n if (imageData) {\n logger.info('Successfully found image data in response', {\n hasText: !!aiText,\n textPreview: aiText?.substring(0, 100)\n });\n return { imageData, text: aiText || undefined };\n }\n\n // Only if no image data found, check for text responses to provide helpful error\n if (aiText) {\n logger.info('Google AI returned text response instead of image:', {\n textResponse: aiText,\n finishReason: candidate.finishReason\n });\n throw new Error(`Google AI returned text instead of image: ${aiText}`);\n }\n\n logger.warn('No image data found in API response parts');\n throw new Error('No image data found in API response. The model may not have generated an image.');\n\n } catch (error: any) {\n logger.error('Google AI API error in createImage:', {\n error: error.message,\n prompt: prompt.substring(0, 100) + '...'\n });\n throw error;\n }\n};\n\nexport const editImage = async (\n prompt: string,\n imageFiles: File[],\n model: string = 'gemini-3-pro-image-preview',\n apiKey?: string,\n aspectRatio?: string,\n resolution?: string,\n enableSearchGrounding?: boolean\n): Promise<ImageResult | null> => {\n const ai = await createGoogleGenAIClient(apiKey);\n if (!ai) {\n return null;\n }\n\n const genModel = ai.getGenerativeModel({\n model,\n // @ts-ignore\n tools: enableSearchGrounding ? [{ 'google_search': {} }] : undefined,\n });\n\n try {\n const imageParts: Part[] = await Promise.all(imageFiles.map(async (file) => {\n const base64Data = await fileToBase64(file);\n const mimeType = getMimeType(file.name);\n return {\n inlineData: {\n mimeType,\n data: base64Data,\n },\n };\n }));\n\n const textPart: Part = { text: prompt };\n const promptParts = [...imageParts, textPart];\n\n const generationConfig: GenerationConfig = {};\n if (model === 'gemini-3-pro-image-preview' && (aspectRatio || resolution)) {\n // @ts-ignore\n generationConfig.imageConfig = {};\n if (aspectRatio) {\n // @ts-ignore\n generationConfig.imageConfig.aspectRatio = aspectRatio;\n }\n if (resolution) {\n // @ts-ignore\n generationConfig.imageConfig.imageSize = resolution;\n }\n }\n\n let result;\n if (Object.keys(generationConfig).length > 0) {\n // @ts-ignore\n result = await genModel.generateContent(promptParts, generationConfig);\n } else {\n result = await genModel.generateContent(promptParts);\n }\n\n const response = result.response;\n logger.debug('Google AI API response structure (editImage):', {\n hasResponse: !!response,\n hasCandidates: !!response?.candidates,\n candidatesLength: response?.candidates?.length,\n });\n\n if (!response || !response.candidates || response.candidates.length === 0) {\n logger.error('Invalid API response structure - no candidates found (editImage)');\n throw new Error('No candidates returned from Google AI API. The content may have been blocked due to safety filters or other restrictions.');\n }\n\n const candidate = response.candidates[0];\n\n // Check for safety filter rejections first\n if (candidate.finishReason && candidate.finishReason !== 'STOP') {\n const finishReasonMessages: { [key: string]: string } = {\n 'SAFETY': 'Content blocked by safety filters. The prompt contains content that violates Google AI safety policies.',\n 'RECITATION': 'Content blocked due to recitation concerns. The generated content may be too similar to existing copyrighted material.',\n 'OTHER': 'Content generation stopped for other safety or policy reasons.'\n };\n\n const message = finishReasonMessages[candidate.finishReason] ||\n `Content generation stopped. Reason: ${candidate.finishReason}`;\n\n logger.error('Google AI blocked image edit due to safety filters:', {\n finishReason: candidate.finishReason,\n rejectionMessage: message,\n });\n throw new Error(`Request blocked by Google AI: ${message}`);\n }\n\n if (!candidate.content || !candidate.content.parts) {\n logger.error('Invalid candidate structure - no content parts found (editImage)');\n throw new Error('Invalid response structure from Google AI API - no content parts found.');\n }\n\n const parts = candidate.content.parts;\n\n let imageData: ArrayBuffer | null = null;\n let aiText: string | null = null;\n\n // Extract both image data and text from all parts\n for (const part of parts) {\n if ('inlineData' in part && part.inlineData) {\n // Convert base64 to ArrayBuffer\n const binaryString = atob(part.inlineData.data);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n imageData = bytes.buffer;\n } else if ('text' in part && part.text) {\n // Collect text descriptions\n if (!aiText) {\n aiText = part.text.trim();\n } else {\n aiText += ' ' + part.text.trim();\n }\n }\n }\n\n if (imageData) {\n logger.info('Successfully found image data in editImage response', {\n hasText: !!aiText,\n textPreview: aiText?.substring(0, 100)\n });\n return { imageData, text: aiText || undefined };\n }\n\n // Only if no image data found, check for text responses to provide helpful error\n if (aiText) {\n logger.info('Google AI returned text response instead of image (editImage):', {\n textResponse: aiText,\n finishReason: candidate.finishReason\n });\n throw new Error(`Google AI returned text instead of image: ${aiText}`);\n }\n\n logger.warn('No image data found in API response parts (editImage)');\n throw new Error('No image data found in API response. The model may not have generated an image.');\n\n } catch (error: any) {\n logger.error('Google AI API error in editImage:', {\n error: error.message,\n prompt: prompt.substring(0, 100) + '...',\n imageCount: imageFiles.length,\n });\n throw error;\n }\n};\n\nexport const imageApi = {\n // Generate new image from text prompt\n generateImage: async (request: ImageGenerationRequest): Promise<ImageGenerationResponse> => {\n console.log('🎨 Generate image:', request);\n\n try {\n const imageBuffer = await createImage(request.prompt, request.model);\n if (!imageBuffer) {\n return {\n success: false,\n error: 'Failed to generate image - no Google API key found'\n };\n }\n\n // Convert ArrayBuffer to blob URL for display\n const uint8Array = new Uint8Array(imageBuffer.imageData);\n const blob = new Blob([uint8Array], { type: 'image/png' });\n const imageUrl = URL.createObjectURL(blob);\n\n return {\n success: true,\n imagePath: `generated_${Date.now()}.png`,\n imageUrl,\n text: imageBuffer.text\n };\n } catch (error: any) {\n logger.error('Image generation failed:', error);\n return {\n success: false,\n error: error.message || 'Failed to generate image'\n };\n }\n },\n\n // Edit existing image with prompt\n editImage: async (request: ImageEditRequest): Promise<ImageGenerationResponse> => {\n console.log('✏️ Edit image:', request);\n\n try {\n // For now, we'll need to get the image file from the path\n // This would need to be adapted based on how images are stored\n console.warn('Image editing requires File objects - this needs to be called with actual File objects');\n\n return {\n success: false,\n error: 'Image editing requires File objects - please use the editImage function directly'\n };\n } catch (error: any) {\n logger.error('Image editing failed:', error);\n return {\n success: false,\n error: error.message || 'Failed to edit image'\n };\n }\n },\n\n // Upload image file\n uploadImage: async (file: File): Promise<{ success: boolean; path?: string; error?: string }> => {\n console.log('📤 Upload image:', file.name);\n\n return {\n success: true,\n path: `uploaded_${Date.now()}_${file.name}`\n };\n },\n\n // Get image from URL\n downloadImage: async (url: string): Promise<{ success: boolean; path?: string; error?: string }> => {\n console.log('📥 Download image from URL:', url);\n\n return {\n success: true,\n path: `downloaded_${Date.now()}.png`\n };\n }\n};","/**\n * OpenAI Integration with Tool Presets\n * \n * PRESET QUICK REFERENCE:\n * ----------------------\n * Agent/Voice Agent: 'smart-generation' (optimize → generate → metadata, NO publish)\n * Workflows: 'metadata-only' for metadata step\n * Auto workflows: 'auto-publish' (includes publish tool)\n * \n * See PRESET_TOOLS mapping below for tool combinations.\n */\nimport OpenAI from 'openai';\nimport { supabase } from \"@/integrations/supabase/client\";\nimport { z } from 'zod';\nimport { zodToJsonSchema } from 'zod-to-json-schema';\nimport { RunnableToolFunctionWithParse } from 'openai/lib/RunnableFunction';\nimport { JSONSchema } from 'openai/lib/jsonschema';\nimport { createImage as createImageRouter, editImage as editImageRouter } from '@/lib/image-router';\nimport { generateTextWithImagesTool } from '@/lib/markdownImageTools';\nimport { createPageTool } from '@/lib/pageTools';\n\ntype LogFunction = (level: string, message: string, data?: any) => void;\n\n// Simple logger for user feedback\nconst consoleLogger = {\n debug: (message: string, data?: any) => console.debug(`[OPENAI-DEBUG] ${message}`, data),\n info: (message: string, data?: any) => console.info(`[OPENAI-INFO] ${message}`, data),\n warn: (message: string, data?: any) => console.warn(`[OPENAI-WARN] ${message}`, data),\n error: (message: string, data?: any) => console.error(`[OPENAI-ERROR] ${message}`, data),\n};\n\n/**\n * SIMPLE TOOL PRESET MAPPING\n * \n * This mapping defines common tool combinations:\n * - generate-only: [generate]\n * - generate-metadata: [generate, metadata]\n * - generate-publish: [generate, metadata, publish]\n * - metadata-only: [metadata]\n * - optimize-generate: [optimize, generate, metadata]\n * \n * Use these to avoid calling unwanted tools (e.g., publish when user wants manual control)\n */\nexport type PresetType =\n | 'generate-only' // Just generate image\n | 'generate-metadata' // Generate + metadata\n | 'generate-publish' // Generate + metadata + publish\n | 'metadata-only' // Only metadata\n | 'optimize-generate'; // Optimize + generate + metadata\n\nconst PRESET_TOOLS: Record<PresetType, (apiKey?: string) => RunnableToolFunctionWithParse<any>[]> = {\n 'generate-only': (apiKey) => [\n generateImageTool(apiKey)\n ],\n 'generate-metadata': (apiKey) => [\n generateImageTool(apiKey),\n generateImageMetadataTool(apiKey)\n ],\n 'generate-publish': (apiKey) => [\n generateImageTool(apiKey),\n generateImageMetadataTool(apiKey),\n publishImageTool()\n ],\n 'metadata-only': (apiKey) => [\n generateImageMetadataTool(apiKey)\n ],\n 'optimize-generate': (apiKey) => [\n optimizePromptTool(apiKey),\n generateImageTool(apiKey),\n generateImageMetadataTool(apiKey)\n ],\n};\n\n// Get user's OpenAI API key from user_secrets\nconst getOpenAIApiKey = async (): Promise<string | null> => {\n try {\n const { data: { user } } = await supabase.auth.getUser();\n if (!user) {\n consoleLogger.error('No authenticated user found');\n return null;\n }\n\n const { data: secretData, error } = await supabase\n .from('user_secrets')\n .select('settings')\n .eq('user_id', user.id)\n .maybeSingle();\n\n if (error) {\n consoleLogger.error('Error fetching user secrets:', error);\n return null;\n }\n\n const settings = secretData?.settings as { api_keys?: Record<string, string> } | null;\n const apiKey = settings?.api_keys?.openai_api_key;\n\n if (!apiKey) {\n consoleLogger.error('No OpenAI API key found in user secrets. Please add your OpenAI API key in your profile settings.');\n return null;\n }\n\n return apiKey;\n } catch (error) {\n consoleLogger.error('Error getting OpenAI API key:', error);\n return null;\n }\n};\n\n\n// Create OpenAI client\nexport const createOpenAIClient = async (apiKey?: string): Promise<OpenAI | null> => {\n const key = apiKey || await getOpenAIApiKey();\n\n if (!key) {\n consoleLogger.error('No OpenAI API key found. Please provide an API key or set it in your profile.');\n return null;\n }\n\n try {\n return new OpenAI({\n apiKey: key,\n dangerouslyAllowBrowser: true // Required for client-side usage\n });\n } catch (error) {\n consoleLogger.error('Error creating OpenAI client:', error);\n return null;\n }\n};\n\n// Helper function to check if OpenAI is available (non-throwing)\nexport const isOpenAIAvailable = async (apiKey?: string): Promise<boolean> => {\n try {\n const client = await createOpenAIClient(apiKey);\n return client !== null;\n } catch (error) {\n consoleLogger.debug('OpenAI not available:', error);\n return false;\n }\n};\n\n// Safe wrapper for OpenAI operations that handles missing API key gracefully\nexport const withOpenAI = async <T>(\n operation: (client: OpenAI) => Promise<T>,\n fallback?: T,\n apiKey?: string\n): Promise<T | null> => {\n try {\n const client = await createOpenAIClient(apiKey);\n if (!client) {\n consoleLogger.warn('OpenAI client not available, using fallback or returning null');\n return fallback ?? null;\n }\n\n return await operation(client);\n } catch (error) {\n consoleLogger.error('OpenAI operation failed:', error);\n return fallback ?? null;\n }\n};\n\n// Simple text completion function\nexport const generateText = async (\n input: string,\n model: string = \"gpt-5\",\n apiKey?: string,\n\n signal?: AbortSignal,\n onChunk?: (chunk: string) => void,\n webSearch?: boolean\n): Promise<string | null> => {\n return withOpenAI(async (client) => {\n try {\n // If web search is enabled, we MUST use the responses API\n if (webSearch) {\n consoleLogger.info('Using web_search with responses API', { model });\n\n const response = await (client as any).responses?.create({\n model,\n tools: [{ type: \"web_search\" }],\n input,\n });\n\n // Parse response.output array structure\n if (response?.output && Array.isArray(response.output)) {\n const messageItem = response.output.find((item: any) => item.type === 'message');\n\n if (messageItem?.content && Array.isArray(messageItem.content)) {\n const textItem = messageItem.content.find((c: any) => c.type === 'output_text');\n\n if (textItem?.text) {\n consoleLogger.info('Successfully generated text with web search', {\n inputLength: input.length,\n outputLength: textItem.text.length,\n model\n });\n return textItem.text;\n }\n }\n }\n\n consoleLogger.warn('Web search response had no valid text content', { response });\n }\n\n // Streaming implementation\n if (onChunk) {\n const stream = await client.chat.completions.create({\n model,\n messages: [{ role: \"user\", content: input }],\n stream: true,\n }, { signal });\n\n let fullContent = '';\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content || '';\n if (delta) {\n fullContent += delta;\n onChunk(delta);\n }\n }\n\n consoleLogger.info('Successfully streamed text response', {\n inputLength: input.length,\n outputLength: fullContent.length,\n model\n });\n\n return fullContent;\n }\n\n // Non-streaming implementation\n const response = await client.chat.completions.create({\n model,\n messages: [{ role: \"user\", content: input }]\n }, {\n signal, // Pass abort signal to OpenAI client\n });\n\n const content = response.choices[0]?.message?.content;\n if (!content) {\n consoleLogger.warn('No content returned from OpenAI');\n return null;\n }\n\n consoleLogger.info('Successfully generated text response', {\n inputLength: input.length,\n outputLength: content.length,\n model,\n content\n });\n\n return content;\n } catch (error: any) {\n // Handle abort error specifically\n if (error.name === 'AbortError' || error.message?.includes('aborted')) {\n consoleLogger.info('Text generation aborted by user');\n return null;\n }\n\n consoleLogger.error('OpenAI text generation failed:', {\n error: error.message,\n model,\n inputPreview: input.substring(0, 100) + '...'\n });\n throw error;\n }\n }, null, apiKey);\n};\n\n// Alternative function using the responses API (if available)\nexport const generateResponse = async (\n input: string,\n model: string = \"gpt-4o-mini\",\n apiKey?: string\n): Promise<string | null> => {\n return withOpenAI(async (client) => {\n try {\n // Note: The responses API might not be available in all OpenAI versions\n // This is a placeholder for the API structure you mentioned\n const response = await (client as any).responses?.create({\n model,\n input,\n });\n\n if (!response) {\n consoleLogger.warn('Responses API not available, falling back to chat completions');\n return generateText(input, model, apiKey);\n }\n\n consoleLogger.info('Successfully generated response', {\n inputLength: input.length,\n model\n });\n\n return response;\n } catch (error: any) {\n consoleLogger.error('OpenAI responses API failed, falling back to chat completions:', error.message);\n // Fallback to standard chat completions\n return generateText(input, model, apiKey);\n }\n }, null, apiKey);\n};\n\n// Helper to convert File to base64 (browser-compatible)\nconst fileToBase64 = (file: File): Promise<string> => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n const result = reader.result as string;\n // Remove data URL prefix to get just the base64 string\n const base64 = result.split(',')[1];\n resolve(base64);\n };\n reader.onerror = error => reject(error);\n });\n};\n\n// Get MIME type from file\nconst getImageMimeType = (file: File): string => {\n return file.type || 'image/jpeg';\n};\n\n// Image analysis function for generating descriptions and titles\nexport const analyzeImages = async (\n imageFiles: File[],\n prompt: string = \"Analyze this image and provide a detailed description and suggest a creative title.\",\n model: string = \"gpt-4o-mini\",\n apiKey?: string\n): Promise<{ description: string; title: string } | null> => {\n return withOpenAI(async (client) => {\n try {\n if (imageFiles.length === 0) {\n consoleLogger.warn('No images provided for analysis');\n return null;\n }\n\n // Convert all images to base64\n const imageContents = await Promise.all(\n imageFiles.map(async (file) => {\n const base64 = await fileToBase64(file);\n const mimeType = getImageMimeType(file);\n return {\n type: \"input_image\" as const,\n image_url: `data:${mimeType};base64,${base64}`,\n };\n })\n );\n\n // Create the content array with text prompt and images\n const content = [\n { type: \"input_text\" as const, text: prompt },\n ...imageContents\n ];\n\n // Use responses API for image analysis\n const response = await (client as any).responses?.create({\n model,\n input: [\n {\n role: \"user\",\n content,\n },\n ],\n });\n\n if (!response?.output_text) {\n consoleLogger.warn('No output text returned from OpenAI image analysis');\n return null;\n }\n\n const outputText = response.output_text;\n\n // Try to parse description and title from the response\n // This assumes the AI will format it properly, but we'll add some parsing logic\n const lines = outputText.split('\\n').filter(line => line.trim());\n\n let description = outputText;\n let title = `Analysis of ${imageFiles.length} image${imageFiles.length > 1 ? 's' : ''}`;\n let titleLineIndex = -1;\n\n // Simple parsing - look for title patterns\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const lowerLine = line.toLowerCase();\n if (lowerLine.includes('title:') || lowerLine.includes('suggested title:')) {\n title = line.replace(/^.*title:\\s*/i, '').trim();\n titleLineIndex = i;\n break;\n }\n }\n\n // Remove title line from description\n if (titleLineIndex >= 0) {\n const descriptionLines = lines.filter((_, index) => index !== titleLineIndex);\n description = descriptionLines.join('\\n').trim();\n }\n\n consoleLogger.info('Successfully analyzed images', {\n imageCount: imageFiles.length,\n descriptionLength: description.length,\n title: title.substring(0, 50) + '...',\n model\n });\n\n return { description, title };\n\n } catch (error: any) {\n consoleLogger.error('OpenAI image analysis failed:', {\n error: error.message,\n model,\n imageCount: imageFiles.length,\n promptPreview: prompt.substring(0, 100) + '...'\n });\n\n // Fallback to chat completions if responses API fails\n try {\n consoleLogger.info('Falling back to chat completions for image analysis');\n\n const imageContents = await Promise.all(\n imageFiles.map(async (file) => {\n const base64 = await fileToBase64(file);\n const mimeType = getImageMimeType(file);\n return {\n type: \"image_url\" as const,\n image_url: {\n url: `data:${mimeType};base64,${base64}`,\n },\n };\n })\n );\n\n const response = await client.chat.completions.create({\n model: \"gpt-4-vision-preview\", // Use vision model for fallback\n messages: [\n {\n role: \"user\",\n content: [\n { type: \"text\", text: prompt },\n ...imageContents\n ],\n },\n ]\n });\n\n const content = response.choices[0]?.message?.content;\n if (!content) {\n consoleLogger.warn('No content returned from fallback image analysis');\n return null;\n }\n\n // Parse the fallback response\n const lines = content.split('\\n').filter(line => line.trim());\n let description = content;\n let title = `Analysis of ${imageFiles.length} image${imageFiles.length > 1 ? 's' : ''}`;\n let titleLineIndex = -1;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const lowerLine = line.toLowerCase();\n if (lowerLine.includes('title:') || lowerLine.includes('suggested title:')) {\n title = line.replace(/^.*title:\\s*/i, '').trim();\n titleLineIndex = i;\n break;\n }\n }\n\n // Remove title line from description\n if (titleLineIndex >= 0) {\n const descriptionLines = lines.filter((_, index) => index !== titleLineIndex);\n description = descriptionLines.join('\\n').trim();\n }\n\n return { description, title };\n\n } catch (fallbackError: any) {\n consoleLogger.error('Fallback image analysis also failed:', fallbackError.message);\n throw error; // Throw original error\n }\n }\n }, null, apiKey);\n};\n\n// Simplified function for wizard integration (disabled for now)\nexport const generateImageMetadata = async (\n imageFiles: File[],\n apiKey?: string\n): Promise<{ description: string; title: string } | null> => {\n // This function is disabled for now as mentioned in requirements\n consoleLogger.info('Image metadata generation is currently disabled');\n return null;\n\n // When enabled, uncomment this:\n // return analyzeImages(\n // imageFiles,\n // \"Analyze these images and provide: 1) A detailed description of what you see, and 2) A creative, engaging title. Format your response with 'Title: [your title]' on the first line, followed by the description.\",\n // \"gpt-4.1-mini\",\n // apiKey\n // );\n};\n\n// Audio transcription function using Whisper\nexport const transcribeAudio = async (\n audioFile: File,\n model: string = \"whisper-1\",\n apiKey?: string\n): Promise<string | null> => {\n return withOpenAI(async (client) => {\n try {\n consoleLogger.info('Starting audio transcription', {\n fileName: audioFile.name,\n fileSize: audioFile.size,\n fileType: audioFile.type,\n model\n });\n\n const transcription = await client.audio.transcriptions.create({\n file: audioFile,\n model,\n response_format: \"verbose_json\",\n timestamp_granularities: [\"word\"]\n });\n\n const transcribedText = transcription.text;\n\n if (!transcribedText) {\n consoleLogger.warn('No text returned from audio transcription');\n return null;\n }\n\n consoleLogger.info('Successfully transcribed audio', {\n textLength: transcribedText.length,\n textPreview: transcribedText.substring(0, 100) + '...',\n model\n });\n\n return transcribedText;\n } catch (error: any) {\n consoleLogger.error('OpenAI audio transcription failed:', {\n error: error.message,\n fileName: audioFile.name,\n model\n });\n throw error;\n }\n }, null, apiKey);\n};\n\n// Optimize prompt for image generation\nexport const optimizePrompt = async (\n userPrompt: string,\n model: string = \"gpt-5\",\n apiKey?: string\n): Promise<string | null> => {\n return withOpenAI(async (client) => {\n try {\n consoleLogger.info('Starting prompt optimization', {\n originalPromptLength: userPrompt.length,\n originalPromptPreview: userPrompt.substring(0, 100) + '...',\n model\n });\n\n const systemPrompt = `You are an expert at writing prompts for AI image generation models. Your task is to optimize user prompts to produce better, more detailed, and more visually striking images.\n\nGuidelines for optimization:\n- Add specific visual details (lighting, composition, style, mood, colors)\n- Include technical photography/art terms when relevant (e.g., \"bokeh\", \"golden hour\", \"rule of thirds\")\n- Specify artistic styles if not mentioned (e.g., \"cinematic\", \"photorealistic\", \"digital art\")\n- Add quality enhancers (e.g., \"highly detailed\", \"4k\", \"masterpiece\")\n- Keep the core intent of the user's prompt\n- Make it concise but descriptive (aim for 1-3 sentences)\n- Return ONLY the optimized prompt, no explanations or additional text\n\nExample:\nUser: \"a cat sitting on a chair\"\nOptimized: \"A fluffy tabby cat sitting gracefully on a vintage wooden chair, soft natural lighting from a nearby window creating gentle shadows, photorealistic style, highly detailed fur texture, warm color palette, shallow depth of field\"`;\n\n const response = await client.chat.completions.create({\n model,\n messages: [\n { role: \"system\", content: systemPrompt },\n { role: \"user\", content: userPrompt }\n ]\n });\n\n const optimizedPrompt = response.choices[0]?.message?.content?.trim();\n\n if (!optimizedPrompt) {\n consoleLogger.warn('No optimized prompt returned from OpenAI');\n return null;\n }\n\n consoleLogger.info('Successfully optimized prompt', {\n originalLength: userPrompt.length,\n optimizedLength: optimizedPrompt.length,\n optimizedPreview: optimizedPrompt.substring(0, 100) + '...',\n model\n });\n\n return optimizedPrompt;\n } catch (error: any) {\n consoleLogger.error('OpenAI prompt optimization failed:', {\n error: error.message,\n promptPreview: userPrompt.substring(0, 100) + '...',\n model\n });\n throw error;\n }\n }, null, apiKey);\n};\n\n// ====================================================================\n// TOOL SYSTEM - LLM with Function Calling\n// ====================================================================\n\n/**\n * Helper function to create Zod-validated OpenAI tools\n * Based on ref/tools/index.ts\n */\nexport const zodFunction = <T extends object>({\n function: fn,\n schema,\n description = '',\n name,\n}: {\n function: (args: T) => Promise<object>;\n schema: z.ZodSchema<T>;\n description?: string;\n name?: string;\n}): RunnableToolFunctionWithParse<T> => {\n return {\n type: 'function',\n function: {\n function: fn,\n name: name ?? fn.name,\n description: description,\n parameters: zodToJsonSchema(schema) as JSONSchema,\n parse(input: string): T {\n const obj = JSON.parse(input);\n return schema.parse(obj);\n },\n },\n };\n};\n\n// ====================================================================\n// TOOL DEFINITIONS\n// ====================================================================\n\n/**\n * Tool: Generate Image\n * Creates a new image from a text prompt using the specified AI model\n */\nexport const generateImageTool = (apiKey?: string) =>\n zodFunction({\n name: 'generate_image',\n description: 'Generate one or more images from a text prompt using AI image generation models. Supports multiple providers (Google, Replicate, Bria, AIML API). Can generate multiple images if count is specified.',\n schema: z.object({\n prompt: z.string().describe('The text prompt describing the image to generate'),\n count: z.number().optional().describe('Number of images to generate (1-4). Default: 1'),\n model: z.string().optional().describe('Model string in format \"provider/model-name\". Default: \"google/gemini-3-pro-image-preview\"'),\n }),\n function: async (args) => {\n try {\n const count = Math.min(Math.max(args.count || 1, 1), 4); // Clamp between 1-4\n consoleLogger.info('Tool::GenerateImage called', {\n prompt: args.prompt,\n model: args.model,\n count\n });\n\n // Image Router will fetch the appropriate provider API key from user profile\n // Don't pass OpenAI API key to image generation\n const results = [];\n\n // Generate multiple images if count > 1\n for (let i = 0; i < count; i++) {\n const result = await createImageRouter(\n args.prompt,\n args.model || 'google/gemini-3-pro-image-preview',\n undefined // Let Image Router fetch the correct provider API key\n );\n\n if (!result) {\n consoleLogger.warn(`Image ${i + 1}/${count} generation failed`);\n continue;\n }\n\n // Convert ArrayBuffer to blob URL\n const uint8Array = new Uint8Array(result.imageData);\n const blob = new Blob([uint8Array], { type: 'image/png' });\n const imageUrl = URL.createObjectURL(blob);\n\n results.push({\n imageUrl,\n text: result.text,\n });\n }\n\n if (results.length === 0) {\n return { success: false, error: 'Failed to generate any images' };\n }\n\n return {\n success: true,\n images: results,\n count: results.length,\n message: `${results.length} image${results.length > 1 ? 's' : ''} generated successfully`,\n };\n } catch (error: any) {\n consoleLogger.error('Tool::GenerateImage failed', error);\n return { success: false, error: error.message };\n }\n },\n });\n\n/**\n * Tool: Transcribe Audio\n * Converts speech/audio to text using OpenAI Whisper\n */\nexport const transcribeAudioTool = (apiKey?: string) =>\n zodFunction({\n name: 'transcribe_audio',\n description: 'Transcribe audio or speech to text using OpenAI Whisper model. Accepts audio files in various formats.',\n schema: z.object({\n audioFile: z.any().describe('The audio file to transcribe (File object)'),\n model: z.string().optional().describe('Whisper model to use. Default: \"whisper-1\"'),\n }),\n function: async (args) => {\n try {\n consoleLogger.info('Tool::TranscribeAudio called', { model: args.model });\n\n const text = await transcribeAudio(args.audioFile, args.model, apiKey);\n\n if (!text) {\n return { success: false, error: 'Failed to transcribe audio' };\n }\n\n return {\n success: true,\n text,\n message: 'Audio transcribed successfully',\n };\n } catch (error: any) {\n consoleLogger.error('Tool::TranscribeAudio failed', error);\n return { success: false, error: error.message };\n }\n },\n });\n\n/**\n * Tool: Optimize Prompt\n * Enhances a user's prompt to produce better image generation results\n */\nexport const optimizePromptTool = (apiKey?: string) =>\n zodFunction({\n name: 'optimize_prompt',\n description: 'Optimize and enhance a text prompt for better image generation results. Adds specific visual details, technical terms, and quality enhancers.',\n schema: z.object({\n prompt: z.string().describe('The original user prompt to optimize'),\n model: z.string().optional().describe('GPT model to use for optimization. Default: \"gpt-4o-mini\"'),\n }),\n function: async (args) => {\n try {\n consoleLogger.info('Tool::OptimizePrompt called', { promptLength: args.prompt.length });\n\n const optimized = await optimizePrompt(args.prompt, args.model, apiKey);\n\n if (!optimized) {\n return { success: false, error: 'Failed to optimize prompt' };\n }\n\n return {\n success: true,\n originalPrompt: args.prompt,\n optimizedPrompt: optimized,\n message: 'Prompt optimized successfully',\n };\n } catch (error: any) {\n consoleLogger.error('Tool::OptimizePrompt failed', error);\n return { success: false, error: error.message };\n }\n },\n });\n\n/**\n * Tool: Generate Text\n * Generates text completion using GPT models\n */\nexport const generateTextTool = (apiKey?: string) =>\n zodFunction({\n name: 'generate_text',\n description: 'Generate text completion using OpenAI GPT models. Useful for creating descriptions, titles, or any text content.',\n schema: z.object({\n input: z.string().describe('The input text or prompt'),\n model: z.string().optional().describe('GPT model to use. Default: \"gpt-4o-mini\"'),\n }),\n function: async (args) => {\n try {\n consoleLogger.info('Tool::GenerateText called', { inputLength: args.input.length });\n\n const text = await generateText(args.input, args.model, apiKey);\n\n if (!text) {\n return { success: false, error: 'Failed to generate text' };\n }\n\n return {\n success: true,\n text,\n message: 'Text generated successfully',\n };\n } catch (error: any) {\n consoleLogger.error('Tool::GenerateText failed', error);\n return { success: false, error: error.message };\n }\n },\n });\n\n/**\n * Tool: Generate Image Metadata\n * Generates title and description for an image based on the prompt or image content\n */\nexport const generateImageMetadataTool = (apiKey?: string) =>\n zodFunction({\n name: 'generate_image_metadata',\n description: 'Generate a creative title and detailed description for an image based on the prompt or image concept. Returns both title and description.',\n schema: z.object({\n prompt: z.string().describe('The image prompt or concept to generate metadata for'),\n style: z.string().optional().describe('Optional style hint for the metadata (e.g., \"creative\", \"professional\", \"poetic\")'),\n }),\n function: async (args) => {\n try {\n consoleLogger.info('Tool::GenerateImageMetadata called', { promptLength: args.prompt.length });\n\n const style = args.style || 'creative';\n const metadataPrompt = `Based on this image concept: \"${args.prompt}\"\n\nGenerate a ${style} title and description for this image.\n\nRequirements:\n- Title: Short, catchy, and descriptive (5-8 words max)\n- Description: Engaging description that captures the essence (2-3 sentences)\n\nFormat your response EXACTLY as:\nTitle: [your title here]\nDescription: [your description here]`;\n\n const response = await generateText(metadataPrompt, 'gpt-4o-mini', apiKey);\n\n if (!response) {\n return { success: false, error: 'Failed to generate metadata' };\n }\n\n // Parse title and description from response\n const titleMatch = response.match(/Title:\\s*(.+?)(?:\\n|$)/i);\n const descMatch = response.match(/Description:\\s*(.+?)$/is);\n\n const title = titleMatch ? titleMatch[1].trim() : `Generated: ${args.prompt.substring(0, 50)}`;\n const description = descMatch ? descMatch[1].trim() : args.prompt;\n\n consoleLogger.info('Successfully generated image metadata', {\n titleLength: title.length,\n descriptionLength: description.length,\n });\n\n return {\n success: true,\n title,\n description,\n message: 'Image metadata generated successfully',\n };\n } catch (error: any) {\n consoleLogger.error('Tool::GenerateImageMetadata failed', error);\n return { success: false, error: error.message };\n }\n },\n });\n\n/**\n * Tool: Publish Image to Gallery\n * Publishes a generated image to the user's gallery with title and description\n */\nexport const publishImageTool = () =>\n zodFunction({\n name: 'publish_image',\n description: 'Publish a generated image to the gallery with title, description, and optional tags. This saves the image permanently to the user\\'s account.',\n schema: z.object({\n imageUrl: z.string().describe('The URL or blob URL of the image to publish'),\n title: z.string().describe('The title for the image'),\n description: z.string().optional().describe('Optional description for the image'),\n tags: z.array(z.string()).optional().describe('Optional array of tags for the image'),\n prompt: z.string().optional().describe('The prompt used to generate the image'),\n }),\n function: async (args) => {\n try {\n consoleLogger.info('Tool::PublishImage called', { title: args.title });\n\n // Note: This is a placeholder. The actual publishing logic needs to be\n // implemented in the component that calls runTools, as it requires\n // access to Supabase client, user context, and File handling.\n // The tool returns the data needed for publishing.\n\n return {\n success: true,\n publishData: {\n imageUrl: args.imageUrl,\n title: args.title,\n description: args.description || '',\n tags: args.tags || [],\n prompt: args.prompt || '',\n },\n message: 'Image ready to publish. Please confirm publication in the UI.',\n requiresConfirmation: true,\n };\n } catch (error: any) {\n consoleLogger.error('Tool::PublishImage failed', error);\n return { success: false, error: error.message };\n }\n },\n });\n\n// ====================================================================\n// TOOL PRESETS\n// ====================================================================\n\nexport interface ToolPreset {\n name: string;\n description: string;\n model: string;\n tools: RunnableToolFunctionWithParse<any>[];\n systemPrompt?: string;\n}\n\n\n/**\n * Create a simple custom preset using the preset type mapping\n */\nexport const createSimplePreset = (\n type: PresetType,\n systemPrompt: string,\n apiKey?: string\n): ToolPreset => ({\n name: `Custom ${type}`,\n description: type,\n model: 'gpt-4o-mini',\n tools: PRESET_TOOLS[type](apiKey),\n systemPrompt,\n});\n\n/**\n * Create tool presets with API key\n */\nexport const createToolPresets = (apiKey?: string, userId?: string, addLog?: LogFunction): Record<string, ToolPreset> => ({\n 'image-wizard': {\n name: 'Image Generation Wizard',\n description: 'Optimize → generate → metadata',\n model: 'gpt-4o-mini',\n tools: PRESET_TOOLS['optimize-generate'](apiKey),\n systemPrompt: `You are an AI image generation assistant. Your role is to:\n1. Optimize prompts for better results\n2. Generate images using optimized prompts\n3. Create metadata (title + description)\n\nExecute these steps automatically. Do NOT publish - user handles publishing.`,\n },\n\n 'speech-to-image': {\n name: 'Speech to Image',\n description: 'Complete workflow: transcribe audio → optimize prompt → generate image',\n model: 'gpt-4o-mini',\n tools: [\n transcribeAudioTool(apiKey),\n optimizePromptTool(apiKey),\n generateImageTool(apiKey),\n ],\n systemPrompt: `You are an AI assistant that converts speech to images. Your workflow:\n1. Transcribe audio input to text (using transcribe_audio tool)\n2. Optimize the transcribed text as an image prompt (using optimize_prompt tool)\n3. Generate an image from the optimized prompt (using generate_image tool)\n4. Provide clear feedback at each step\n\nExecute all steps automatically when given audio input.`,\n },\n\n 'text-to-image': {\n name: 'Text to Image',\n description: 'Optimize → generate → metadata',\n model: 'gpt-4o-mini',\n tools: PRESET_TOOLS['optimize-generate'](apiKey),\n systemPrompt: `You are a text-to-image generation assistant. \n- Optimize prompts and generate images\n- Create metadata automatically\n- Do NOT publish - user handles that`,\n },\n\n\n 'smart-generation': {\n name: 'Smart Generation',\n description: 'Optimize → generate → metadata (no publish)',\n model: 'gpt-4o-mini',\n tools: PRESET_TOOLS['optimize-generate'](apiKey),\n systemPrompt: `You are an intelligent image generation assistant.\n\nWorkflow: Optimize prompt → Generate image → Create metadata\n\nExecute automatically. Do NOT publish - user handles publishing.\nKeep responses brief.`,\n },\n\n 'auto-publish': {\n name: 'Auto-Publish Workflow',\n description: 'Optimize → generate → metadata → publish (full automation)',\n model: 'gpt-4o-mini',\n tools: PRESET_TOOLS['generate-publish'](apiKey),\n systemPrompt: `You are an auto-publishing assistant.\n\nWorkflow: Optimize → Generate → Metadata → Publish\n\nExecute all steps automatically. Always include metadata.`,\n },\n\n 'metadata-generator': {\n name: 'Metadata Generator',\n description: 'Generate title and description for image concepts or existing images',\n model: 'gpt-4o-mini',\n tools: [\n generateImageMetadataTool(apiKey),\n ],\n systemPrompt: `You are a creative metadata generator for images.\nYour job is to create engaging titles and descriptions that capture the essence of the image.\n\nFor titles: Make them short, catchy, and memorable (5-8 words)\nFor descriptions: Create 2-3 sentences that are engaging and descriptive\n\nBe creative and match the style of the image concept.`,\n },\n\n 'metadata-only': {\n name: 'Metadata Only',\n description: 'Only generate title and description',\n model: 'gpt-4o-mini',\n tools: PRESET_TOOLS['metadata-only'](apiKey),\n systemPrompt: `Generate title and description for the prompt.\nTitle: 5-8 words. Description: 2-3 sentences.`,\n },\n 'page-generator': {\n name: 'Page Generator',\n description: 'Generate a complete page with text, images, and metadata from a single voice command.',\n model: 'gpt-4o',\n tools: [\n generateTextWithImagesTool(userId || 'anonymous-user', addLog),\n createPageTool(userId || 'anonymous-user', addLog),\n ],\n systemPrompt: `You are an AI assistant that creates well-structured pages with text and images. Your only task is to use the 'generate_text_with_images' tool to create rich, comprehensive markdown content based on the user's request. Include at least one relevant image unless otherwise specified.`,\n },\n 'page-generator-text-only': {\n name: 'Page Generator (Text Only)',\n description: 'Generate a complete page with text from a single command, without images.',\n model: 'gpt-4o',\n tools: [\n createPageTool(userId || 'anonymous-user', addLog),\n ],\n systemPrompt: `You are an AI assistant that writes well-structured, comprehensive markdown documents. Based on the user's request, generate the full text content for a page, then call the 'create_page' tool with that content and a suitable title and tags. Your final response must be only the 'create_page' tool call.`,\n }\n});\n\n// ====================================================================\n// RUN TOOLS - Main Orchestration Function\n// ====================================================================\n\nexport interface RunToolsOptions {\n prompt: string;\n preset?: string | ToolPreset;\n apiKey?: string;\n onMessage?: (message: any) => void;\n onToolCall?: (toolCall: any) => void;\n onContent?: (content: string) => void;\n model?: string;\n maxIterations?: number;\n userId?: string;\n images?: string[];\n addLog?: LogFunction;\n}\n\nexport interface RunToolsResult {\n success: boolean;\n content?: string;\n messages: any[];\n toolCalls: any[];\n error?: string;\n}\n\n/**\n * Run OpenAI with tools - main orchestration function\n * Based on ref/run-tools.ts\n * \n * @example\n * // Use preset\n * const result = await runTools({\n * prompt: \"Create a beautiful sunset over mountains\",\n * preset: \"image-wizard\"\n * });\n * \n * @example\n * // Custom tools\n * const result = await runTools({\n * prompt: \"Generate an image of a cat\",\n * preset: {\n * name: \"custom\",\n * model: \"gpt-4o-mini\",\n * tools: [generateImageTool()],\n * systemPrompt: \"You are a helpful assistant\"\n * }\n * });\n */\nexport const runTools = async (options: RunToolsOptions): Promise<RunToolsResult> => {\n const {\n prompt,\n preset,\n apiKey,\n onMessage,\n onToolCall,\n onContent,\n maxIterations = 10,\n userId,\n images,\n addLog,\n } = options;\n\n const logger = addLog ? {\n debug: (m: string, d?: any) => addLog('debug', `[OPENAI] ${m}`, d),\n info: (m: string, d?: any) => addLog('info', `[OPENAI] ${m}`, d),\n warn: (m: string, d?: any) => addLog('warn', `[OPENAI] ${m}`, d),\n error: (m: string, d?: any) => addLog('error', `[OPENAI] ${m}`, d),\n } : consoleLogger;\n\n\n const messages: any[] = [];\n const toolCalls: any[] = [];\n\n try {\n // Create OpenAI client\n const client = await createOpenAIClient(apiKey);\n if (!client) {\n return {\n success: false,\n messages,\n toolCalls,\n error: 'Failed to create OpenAI client - no API key available',\n };\n }\n\n // Get preset configuration\n const presets = createToolPresets(apiKey, userId, addLog);\n const presetConfig: ToolPreset =\n typeof preset === 'string'\n ? presets[preset] || presets['image-wizard']\n : preset || presets['image-wizard'];\n\n logger.info('Using preset', {\n name: presetConfig.name,\n model: presetConfig.model,\n toolCount: presetConfig.tools.length\n });\n\n // Build messages\n const initialMessages: OpenAI.Chat.ChatCompletionMessageParam[] = [];\n\n if (presetConfig.systemPrompt) {\n initialMessages.push({\n role: 'system',\n content: presetConfig.systemPrompt,\n });\n }\n\n // Handle multimodal input if images are provided\n if (images && images.length > 0) {\n logger.info('Adding images to request', { count: images.length });\n\n const content: any[] = [\n { type: \"text\", text: prompt }\n ];\n\n images.forEach(url => {\n content.push({\n type: \"image_url\",\n image_url: {\n url,\n detail: \"auto\"\n }\n });\n });\n\n initialMessages.push({\n role: 'user',\n content: content,\n });\n } else {\n initialMessages.push({\n role: 'user',\n content: prompt,\n });\n }\n\n // Run tools\n const runner = client.chat.completions\n .runTools({\n model: options.model || presetConfig.model,\n messages: initialMessages,\n tools: presetConfig.tools\n });\n\n logger.info('RunTools started', {\n prompt: prompt.substring(0, 100),\n preset: typeof preset === 'string' ? preset : 'custom',\n model: options.model || presetConfig.model,\n toolCount: presetConfig.tools.length,\n initialMessages\n });\n\n await runner.done();\n\n const finalMessages = runner.messages;\n const finalContent = await runner.finalContent();\n\n // Manually reconstruct tool calls with their output from the message history\n // This is more reliable than depending on the runner's final state.\n const completedToolCalls = finalMessages\n .filter((msg): msg is OpenAI.Chat.Completions.ChatCompletionMessage & { tool_calls: OpenAI.Chat.Completions.ChatCompletionMessageToolCall[] } => msg.role === 'assistant' && !!msg.tool_calls)\n .flatMap(msg => msg.tool_calls);\n\n for (const toolCall of completedToolCalls) {\n const toolOutputMessage = finalMessages.find(\n (msg): msg is OpenAI.Chat.Completions.ChatCompletionMessage => msg.role === 'tool' && msg.tool_call_id === toolCall.id\n );\n if (toolOutputMessage && 'function' in toolCall && toolCall.function) {\n (toolCall.function as any).output = toolOutputMessage.content;\n }\n }\n\n logger.info('RunTools completed', {\n messageCount: finalMessages.length,\n toolCallCount: completedToolCalls.length,\n completedToolCalls,\n finalMessages: finalMessages,\n finalContent: finalContent,\n });\n\n // The SDK should handle parsing, but as a safeguard, parse stringified outputs.\n for (const toolCall of completedToolCalls) {\n if ('function' in toolCall && toolCall.function && 'output' in toolCall.function && typeof toolCall.function.output === 'string') {\n try {\n // Attempt to parse the output, but don't fail if it's just a raw string.\n const parsedOutput = JSON.parse(toolCall.function.output);\n (toolCall.function as any).output = parsedOutput;\n } catch (e) {\n logger.debug('Tool output was a non-JSON string.', { output: toolCall.function.output });\n }\n }\n }\n\n return {\n success: true,\n content: finalContent ?? undefined,\n messages: finalMessages,\n toolCalls: completedToolCalls,\n };\n } catch (error: any) {\n\n logger.error('RunTools failed', {\n error: error.message,\n prompt: prompt.substring(0, 100),\n });\n\n return {\n success: false,\n messages,\n toolCalls,\n error: error.message || 'Unknown error occurred',\n };\n }\n};\n","export const ENABLE_ZOOM = true;\n\nexport enum TauriCommand {\n SUBMIT_PROMPT = 'submit_prompt',\n LOG_ERROR = 'log_error_to_console',\n RESOLVE_PATH = 'resolve_path_relative_to_home',\n ADD_DEBUG_MESSAGE = 'add_debug_message',\n SEND_IPC_MESSAGE = 'send_ipc_message',\n REQUEST_CONFIG = 'request_config_from_images',\n GENERATE_IMAGE = 'generate_image_via_backend',\n REQUEST_FILE_DELETION = 'request_file_deletion',\n}\n\nexport enum TauriEvent {\n CONFIG_RECEIVED = 'config-received',\n IMAGE_RECEIVED = 'image-received',\n GENERATION_ERROR = 'generation-error',\n GENERATION_COMPLETE = 'generation-complete',\n FILE_DELETED_SUCCESSFULLY = 'file-deleted-successfully',\n FILE_DELETION_ERROR = 'file-deletion-error',\n}\n\nexport const QUICK_STYLES = [\n 'cartoon style',\n 'photorealistic',\n 'noir style',\n 'product mockup',\n 'watercolor painting',\n 'digital art',\n 'minimalist design',\n 'vintage poster',\n 'cyberpunk aesthetic'\n] as const;\n\nexport const QUICK_ACTIONS = [\n {\n name: 'Remove Background',\n prompt: 'remove the background, make it transparent',\n iconName: 'Eraser'\n },\n {\n name: 'Cleanup',\n prompt: 'clean up and enhance the image, remove noise and artifacts',\n iconName: 'Sparkles'\n },\n {\n name: 'Crop Foreground',\n prompt: 'crop to focus on the main subject, remove unnecessary background',\n iconName: 'Crop'\n },\n {\n name: 'Improve Colors',\n prompt: 'enhance colors, improve saturation and contrast',\n iconName: 'Palette'\n },\n {\n name: 'Product Presentation',\n prompt: 'professional product photography style, clean background, studio lighting',\n iconName: 'Package'\n }\n] as const;\n\n// AI Image Analysis Prompt\nexport const AI_IMAGE_ANALYSIS_PROMPT =\n \"Analyze this image and provide: 1) A creative, engaging title (max 50 characters), and 2) A detailed description. Format your response with 'Title: [your title]' on the first line, followed by the description on the next lines.\" as const;\n\n// Photo Grid Image Dimensions\nexport const PHOTO_GRID_THUMBNAIL_WIDTH = 600;\nexport const PHOTO_GRID_IMAGE_FORMAT = 'jpg' as const; // 'jpg' | 'png'\n\n// Feed Configuration\nexport const FEED_PAGE_SIZE = 30;\nexport const FEED_API_ENDPOINT = '/api/feed';\n\n// Split Prompts Configuration\nexport const MAX_SPLIT_PROMPTS = 10;\n\n/**\n * Split a prompt into multiple lines for sequential generation\n * @param prompt The full prompt text\n * @param maxLines Maximum number of lines to accept (default: 10)\n * @returns Array of prompt lines, trimmed and filtered for empty lines\n */\nexport const splitPromptByLines = (prompt: string, maxLines: number = MAX_SPLIT_PROMPTS): string[] => {\n return prompt\n .split('\\n')\n .map(line => line.trim())\n .map(line => line.replace(/^[-•*]\\s*/, '')) // Remove leading bullets/dashes\n .filter(line => line.length > 0)\n .slice(0, maxLines);\n};\n\n// Default Quick Actions for ImageWizard\nexport interface QuickAction {\n id: string;\n name: string;\n prompt: string;\n icon: string;\n}\n\nexport const DEFAULT_QUICK_ACTIONS: QuickAction[] = [\n { id: '1', name: \"Enhance\", prompt: \"Enhance and improve this image\", icon: \"✨\" },\n { id: '2', name: \"Make Artistic\", prompt: \"Transform this into a beautiful artistic painting\", icon: \"🎨\" },\n { id: '3', name: \"Cyberpunk Style\", prompt: \"Transform this into cyberpunk style with neon colors\", icon: \"🌆\" },\n { id: '4', name: \"Fantasy\", prompt: \"Transform this into a fantasy art style\", icon: \"🧙‍♂️\" },\n { id: '5', name: \"Portrait\", prompt: \"Transform this into a professional portrait\", icon: \"👤\" },\n];","import { useState, useRef, useEffect } from 'react';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { Switch } from '@/components/ui/switch';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { Card, CardContent } from '@/components/ui/card';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { z } from 'zod';\nimport { supabase } from '@/integrations/supabase/client';\nimport { useAuth } from '@/hooks/useAuth';\nimport { toast } from 'sonner';\nimport { Edit3, GitBranch, Sparkles, Mic, MicOff, Loader2, Bookmark } from 'lucide-react';\nimport MarkdownEditor from '@/components/MarkdownEditor';\nimport VersionSelector from '@/components/VersionSelector';\nimport { analyzeImages, transcribeAudio } from '@/lib/openai';\nimport { AI_IMAGE_ANALYSIS_PROMPT } from '@/constants';\nimport { T, translate } from '@/i18n';\n\ninterface Collection {\n id: string;\n name: string;\n description: string | null;\n slug: string;\n is_public: boolean;\n}\n\nconst editSchema = z.object({\n title: z.string().max(100, 'Title must be less than 100 characters').optional(),\n description: z.string().max(1000, 'Description must be less than 1000 characters').optional(),\n visible: z.boolean(),\n});\n\ntype EditFormData = z.infer<typeof editSchema>;\n\ninterface EditImageModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n pictureId: string;\n currentTitle: string;\n currentDescription: string | null;\n currentVisible: boolean;\n imageUrl?: string;\n onUpdateSuccess: () => void;\n}\n\nconst EditImageModal = ({ \n open, \n onOpenChange, \n pictureId, \n currentTitle, \n currentDescription,\n currentVisible,\n imageUrl,\n onUpdateSuccess \n}: EditImageModalProps) => {\n const [updating, setUpdating] = useState(false);\n const [isGenerating, setIsGenerating] = useState(false);\n const { user } = useAuth();\n \n // Microphone recording state\n const [isRecording, setIsRecording] = useState(false);\n const [isTranscribing, setIsTranscribing] = useState(false);\n const mediaRecorderRef = useRef<MediaRecorder | null>(null);\n const audioChunksRef = useRef<Blob[]>([]);\n\n // Collections state\n const [collections, setCollections] = useState<Collection[]>([]);\n const [selectedCollections, setSelectedCollections] = useState<Set<string>>(new Set());\n const [loadingCollections, setLoadingCollections] = useState(false);\n\n const form = useForm<EditFormData>({\n resolver: zodResolver(editSchema),\n defaultValues: {\n title: currentTitle,\n description: currentDescription || '',\n visible: currentVisible,\n },\n });\n\n // Load collections when modal opens\n useEffect(() => {\n if (open && user) {\n fetchCollections();\n fetchPictureCollections();\n }\n }, [open, user, pictureId]);\n\n const fetchCollections = async () => {\n if (!user) return;\n\n setLoadingCollections(true);\n try {\n const { data, error } = await supabase\n .from('collections')\n .select('*')\n .eq('user_id', user.id)\n .order('created_at', { ascending: false });\n\n if (error) throw error;\n setCollections(data || []);\n } catch (error) {\n console.error('Error fetching collections:', error);\n toast.error(translate('Failed to load collections'));\n } finally {\n setLoadingCollections(false);\n }\n };\n\n const fetchPictureCollections = async () => {\n if (!user) return;\n\n try {\n const { data, error } = await supabase\n .from('collection_pictures')\n .select('collection_id')\n .eq('picture_id', pictureId);\n\n if (error) throw error;\n\n const collectionIds = new Set(data.map(item => item.collection_id));\n setSelectedCollections(collectionIds);\n } catch (error) {\n console.error('Error fetching picture collections:', error);\n }\n };\n\n const handleToggleCollection = async (collectionId: string) => {\n if (!user) return;\n\n const isSelected = selectedCollections.has(collectionId);\n\n try {\n if (isSelected) {\n // Remove from collection\n const { error } = await supabase\n .from('collection_pictures')\n .delete()\n .eq('collection_id', collectionId)\n .eq('picture_id', pictureId);\n\n if (error) throw error;\n\n setSelectedCollections(prev => {\n const newSet = new Set(prev);\n newSet.delete(collectionId);\n return newSet;\n });\n\n toast.success(translate('Removed from collection'));\n } else {\n // Add to collection\n const { error } = await supabase\n .from('collection_pictures')\n .insert({\n collection_id: collectionId,\n picture_id: pictureId\n });\n\n if (error) throw error;\n\n setSelectedCollections(prev => new Set([...prev, collectionId]));\n toast.success(translate('Added to collection'));\n }\n } catch (error) {\n console.error('Error toggling collection:', error);\n toast.error(translate('Failed to update collection'));\n }\n };\n\n const onSubmit = async (data: EditFormData) => {\n if (!user) return;\n \n setUpdating(true);\n try {\n const { error } = await supabase\n .from('pictures')\n .update({\n title: data.title?.trim() || null,\n description: data.description || null,\n visible: data.visible,\n updated_at: new Date().toISOString(),\n })\n .eq('id', pictureId)\n .eq('user_id', user.id);\n\n if (error) throw error;\n\n toast.success(translate('Picture updated successfully!'));\n onUpdateSuccess();\n } catch (error: any) {\n console.error('Error updating picture:', error);\n toast.error(translate('Failed to update picture'));\n } finally {\n setUpdating(false);\n }\n };\n\n const handleClose = () => {\n form.reset();\n onOpenChange(false);\n };\n\n const handleMagicGenerate = async () => {\n if (!imageUrl) {\n toast.error(translate('No image URL available'));\n return;\n }\n\n setIsGenerating(true);\n try {\n // Fetch the image and convert to File\n const response = await fetch(imageUrl);\n const blob = await response.blob();\n const file = new File([blob], 'image.png', { type: blob.type || 'image/png' });\n\n // Call OpenAI to analyze the image\n const result = await analyzeImages([file], AI_IMAGE_ANALYSIS_PROMPT);\n\n if (!result) {\n toast.error(translate('OpenAI API key not configured. Please add your OpenAI API key in your profile settings.'));\n return;\n }\n\n // Update form fields with generated content\n form.setValue('title', result.title);\n form.setValue('description', result.description);\n \n toast.success(translate('Title and description generated!'));\n } catch (error: any) {\n console.error('Error generating metadata:', error);\n toast.error(error.message || translate('Failed to generate metadata. Please check your OpenAI API key.'));\n } finally {\n setIsGenerating(false);\n }\n };\n\n const handleMicrophone = async () => {\n if (isRecording) {\n // Stop recording\n if (mediaRecorderRef.current && mediaRecorderRef.current.state === 'recording') {\n mediaRecorderRef.current.stop();\n setIsRecording(false);\n }\n } else {\n // Start recording\n try {\n // Check if MediaRecorder is supported\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\n toast.error(translate('Audio recording is not supported in your browser'));\n return;\n }\n\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n \n // Create MediaRecorder with common audio format\n const options = { mimeType: 'audio/webm' };\n let mediaRecorder: MediaRecorder;\n \n try {\n mediaRecorder = new MediaRecorder(stream, options);\n } catch (e) {\n // Fallback without options if the format is not supported\n mediaRecorder = new MediaRecorder(stream);\n }\n \n mediaRecorderRef.current = mediaRecorder;\n audioChunksRef.current = [];\n\n mediaRecorder.ondataavailable = (event) => {\n if (event.data.size > 0) {\n audioChunksRef.current.push(event.data);\n }\n };\n\n mediaRecorder.onstop = async () => {\n setIsTranscribing(true);\n \n try {\n const audioBlob = new Blob(audioChunksRef.current, { type: 'audio/webm' });\n const audioFile = new File([audioBlob], 'recording.webm', { type: 'audio/webm' });\n \n toast.info(translate('Transcribing audio...'));\n const transcribedText = await transcribeAudio(audioFile);\n \n if (transcribedText) {\n // Append transcribed text to description field\n const currentDescription = form.getValues('description') || '';\n const trimmed = currentDescription.trim();\n const newDescription = trimmed ? `${trimmed}\\n\\n${transcribedText}` : transcribedText;\n \n form.setValue('description', newDescription);\n toast.success(translate('Audio transcribed successfully!'));\n } else {\n toast.error(translate('Failed to transcribe audio. Please check your OpenAI API key.'));\n }\n } catch (error: any) {\n console.error('Error transcribing audio:', error);\n toast.error(error.message || translate('Failed to transcribe audio'));\n } finally {\n setIsTranscribing(false);\n audioChunksRef.current = [];\n \n // Stop all tracks\n stream.getTracks().forEach(track => track.stop());\n }\n };\n\n mediaRecorder.start();\n setIsRecording(true);\n toast.info(translate('Recording started... Click again to stop'));\n \n } catch (error: any) {\n console.error('Error accessing microphone:', error);\n if (error.name === 'NotAllowedError') {\n toast.error(translate('Microphone access denied. Please allow microphone access in your browser settings.'));\n } else {\n toast.error(translate('Failed to access microphone') + ': ' + error.message);\n }\n }\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={handleClose}>\n <DialogContent className=\"max-w-2xl max-h-[80vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n <Edit3 className=\"h-5 w-5\" />\n <T>Edit Picture</T>\n </DialogTitle>\n </DialogHeader>\n \n <Tabs defaultValue=\"edit\" className=\"w-full\">\n <TabsList className=\"grid w-full grid-cols-3\">\n <TabsTrigger value=\"edit\" className=\"flex items-center gap-2\">\n <Edit3 className=\"h-4 w-4\" />\n <T>Edit Details</T>\n </TabsTrigger>\n <TabsTrigger value=\"collections\" className=\"flex items-center gap-2\">\n <Bookmark className=\"h-4 w-4\" />\n <T>Collections</T>\n </TabsTrigger>\n <TabsTrigger value=\"versions\" className=\"flex items-center gap-2\">\n <GitBranch className=\"h-4 w-4\" />\n <T>Versions</T>\n </TabsTrigger>\n </TabsList>\n \n <TabsContent value=\"edit\" className=\"mt-4\">\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-4\">\n {/* Magic Generate Button */}\n {imageUrl && (\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"w-full\"\n onClick={handleMagicGenerate}\n disabled={isGenerating || updating}\n >\n {isGenerating ? (\n <>\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-primary border-t-transparent mr-2\"></div>\n <T>Generating...</T>\n </>\n ) : (\n <>\n <Sparkles className=\"h-4 w-4 mr-2\" />\n <T>Generate Title & Description with AI</T>\n </>\n )}\n </Button>\n )}\n \n <FormField\n control={form.control}\n name=\"title\"\n render={({ field }) => (\n <FormItem>\n <FormLabel><T>Title (Optional)</T></FormLabel>\n <FormControl>\n <Input \n placeholder={translate(\"Enter a title...\")} \n {...field}\n onKeyDown={(e) => {\n if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') {\n e.preventDefault();\n form.handleSubmit(onSubmit)();\n }\n }}\n />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <FormField\n control={form.control}\n name=\"description\"\n render={({ field }) => (\n <FormItem>\n <div className=\"flex items-center justify-between mb-2\">\n <FormLabel><T>Description (Optional)</T></FormLabel>\n <button\n type=\"button\"\n onClick={handleMicrophone}\n disabled={isTranscribing || updating}\n className={`p-1.5 rounded-md transition-colors ${\n isRecording\n ? 'bg-red-100 text-red-600 hover:bg-red-200' \n : 'text-muted-foreground hover:text-foreground hover:bg-accent'\n }`}\n title={translate(isRecording ? 'Stop recording' : 'Record audio')}\n >\n {isTranscribing ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : isRecording ? (\n <MicOff className=\"h-4 w-4\" />\n ) : (\n <Mic className=\"h-4 w-4\" />\n )}\n </button>\n </div>\n <FormControl>\n <MarkdownEditor\n value={field.value || ''}\n onChange={field.onChange}\n placeholder={translate(\"Describe your photo... You can use **markdown** formatting!\")}\n className=\"min-h-[120px]\"\n onKeyDown={(e) => {\n if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') {\n e.preventDefault();\n form.handleSubmit(onSubmit)();\n }\n }}\n />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <FormField\n control={form.control}\n name=\"visible\"\n render={({ field }) => (\n <FormItem className=\"flex flex-row items-center justify-between rounded-lg border p-4\">\n <div className=\"space-y-0.5\">\n <FormLabel className=\"text-base\">\n <T>Visible</T>\n </FormLabel>\n <div className=\"text-sm text-muted-foreground\">\n <T>Make this picture visible to others</T>\n </div>\n </div>\n <FormControl>\n <Switch\n checked={field.value}\n onCheckedChange={field.onChange}\n />\n </FormControl>\n </FormItem>\n )}\n />\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"flex-1\"\n onClick={handleClose}\n disabled={updating}\n >\n <T>Cancel</T>\n </Button>\n <Button\n type=\"submit\"\n className=\"flex-1\"\n disabled={updating}\n >\n <T>{updating ? 'Updating...' : 'Update'}</T>\n </Button>\n </div>\n </form>\n </Form>\n </TabsContent>\n \n <TabsContent value=\"collections\" className=\"mt-4\">\n <div className=\"space-y-4\">\n {loadingCollections ? (\n <div className=\"flex items-center justify-center py-8\">\n <Loader2 className=\"h-6 w-6 animate-spin text-muted-foreground\" />\n </div>\n ) : collections.length === 0 ? (\n <div className=\"text-center py-8\">\n <Bookmark className=\"h-12 w-12 mx-auto mb-3 text-muted-foreground opacity-50\" />\n <p className=\"text-muted-foreground mb-4\">\n <T>No collections yet</T>\n </p>\n <Button\n variant=\"outline\"\n onClick={() => {\n handleClose();\n // Navigate to create collection - could be improved with proper navigation\n window.location.href = '/collections/new';\n }}\n >\n <T>Create Collection</T>\n </Button>\n </div>\n ) : (\n <div className=\"space-y-2 max-h-96 overflow-y-auto\">\n {collections.map((collection) => (\n <Card\n key={collection.id}\n className={`cursor-pointer transition-colors ${\n selectedCollections.has(collection.id)\n ? 'bg-primary/10 border-primary'\n : 'hover:bg-muted/50'\n }`}\n onClick={() => handleToggleCollection(collection.id)}\n >\n <CardContent className=\"p-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex-1 mr-3\">\n <div className=\"flex items-center gap-2\">\n <h4 className=\"font-medium\">{collection.name}</h4>\n {!collection.is_public && (\n <span className=\"text-xs text-muted-foreground\">(Private)</span>\n )}\n </div>\n {collection.description && (\n <p className=\"text-sm text-muted-foreground line-clamp-1\">\n {collection.description}\n </p>\n )}\n </div>\n <Checkbox\n checked={selectedCollections.has(collection.id)}\n onCheckedChange={() => handleToggleCollection(collection.id)}\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n )}\n \n <div className=\"pt-2 text-sm text-muted-foreground text-center\">\n <T>\n {selectedCollections.size === 0\n ? 'Not in any collections'\n : selectedCollections.size === 1\n ? 'In 1 collection'\n : `In ${selectedCollections.size} collections`}\n </T>\n </div>\n </div>\n </TabsContent>\n \n <TabsContent value=\"versions\" className=\"mt-4\">\n <VersionSelector \n currentPictureId={pictureId}\n onVersionSelect={onUpdateSuccess}\n />\n </TabsContent>\n </Tabs>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default EditImageModal;","import React, { useRef, useImperativeHandle, useEffect, useContext, useLayoutEffect, useState, useCallback, useMemo } from 'react';\n\n/**\n * Rounds number to given decimal\n * eg. roundNumber(2.34343, 1) => 2.3\n */\nvar roundNumber = function (num, decimal) {\n return Number(num.toFixed(decimal));\n};\n/**\n * Checks if value is number, if not it returns default value\n * 1# eg. checkIsNumber(2, 30) => 2\n * 2# eg. checkIsNumber(null, 30) => 30\n */\nvar checkIsNumber = function (num, defaultValue) {\n return typeof num === \"number\" ? num : defaultValue;\n};\n\nvar handleCallback = function (context, event, callback) {\n if (callback && typeof callback === \"function\") {\n callback(context, event);\n }\n};\n\n/* eslint-disable no-plusplus */\n/* eslint-disable no-param-reassign */\n/**\n * Functions should return denominator of the target value, which is the next animation step.\n * t is a value from 0 to 1, reflecting the percentage of animation status.\n */\nvar easeOut = function (t) {\n return -Math.cos(t * Math.PI) / 2 + 0.5;\n};\n// linear\nvar linear = function (t) {\n return t;\n};\n// accelerating from zero velocity\nvar easeInQuad = function (t) {\n return t * t;\n};\n// decelerating to zero velocity\nvar easeOutQuad = function (t) {\n return t * (2 - t);\n};\n// acceleration until halfway, then deceleration\nvar easeInOutQuad = function (t) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n};\n// accelerating from zero velocity\nvar easeInCubic = function (t) {\n return t * t * t;\n};\n// decelerating to zero velocity\nvar easeOutCubic = function (t) {\n return --t * t * t + 1;\n};\n// acceleration until halfway, then deceleration\nvar easeInOutCubic = function (t) {\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n};\n// accelerating from zero velocity\nvar easeInQuart = function (t) {\n return t * t * t * t;\n};\n// decelerating to zero velocity\nvar easeOutQuart = function (t) {\n return 1 - --t * t * t * t;\n};\n// acceleration until halfway, then deceleration\nvar easeInOutQuart = function (t) {\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n};\n// accelerating from zero velocity\nvar easeInQuint = function (t) {\n return t * t * t * t * t;\n};\n// decelerating to zero velocity\nvar easeOutQuint = function (t) {\n return 1 + --t * t * t * t * t;\n};\n// acceleration until halfway, then deceleration\nvar easeInOutQuint = function (t) {\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\n};\nvar animations = {\n easeOut: easeOut,\n linear: linear,\n easeInQuad: easeInQuad,\n easeOutQuad: easeOutQuad,\n easeInOutQuad: easeInOutQuad,\n easeInCubic: easeInCubic,\n easeOutCubic: easeOutCubic,\n easeInOutCubic: easeInOutCubic,\n easeInQuart: easeInQuart,\n easeOutQuart: easeOutQuart,\n easeInOutQuart: easeInOutQuart,\n easeInQuint: easeInQuint,\n easeOutQuint: easeOutQuint,\n easeInOutQuint: easeInOutQuint,\n};\n\n/* eslint-disable no-param-reassign */\nvar handleCancelAnimationFrame = function (animation) {\n if (typeof animation === \"number\") {\n cancelAnimationFrame(animation);\n }\n};\nvar handleCancelAnimation = function (contextInstance) {\n if (!contextInstance.mounted)\n return;\n handleCancelAnimationFrame(contextInstance.animation);\n // Clear animation state\n contextInstance.animate = false;\n contextInstance.animation = null;\n contextInstance.velocity = null;\n};\nfunction handleSetupAnimation(contextInstance, animationName, animationTime, callback) {\n if (!contextInstance.mounted)\n return;\n var startTime = new Date().getTime();\n var lastStep = 1;\n // if another animation is active\n handleCancelAnimation(contextInstance);\n // new animation\n contextInstance.animation = function () {\n if (!contextInstance.mounted) {\n return handleCancelAnimationFrame(contextInstance.animation);\n }\n var frameTime = new Date().getTime() - startTime;\n var animationProgress = frameTime / animationTime;\n var animationType = animations[animationName];\n var step = animationType(animationProgress);\n if (frameTime >= animationTime) {\n callback(lastStep);\n contextInstance.animation = null;\n }\n else if (contextInstance.animation) {\n callback(step);\n requestAnimationFrame(contextInstance.animation);\n }\n };\n requestAnimationFrame(contextInstance.animation);\n}\nfunction isValidTargetState(targetState) {\n var scale = targetState.scale, positionX = targetState.positionX, positionY = targetState.positionY;\n if (Number.isNaN(scale) ||\n Number.isNaN(positionX) ||\n Number.isNaN(positionY)) {\n return false;\n }\n return true;\n}\nfunction animate(contextInstance, targetState, animationTime, animationName) {\n var isValid = isValidTargetState(targetState);\n if (!contextInstance.mounted || !isValid)\n return;\n var setTransformState = contextInstance.setTransformState;\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n var scaleDiff = targetState.scale - scale;\n var positionXDiff = targetState.positionX - positionX;\n var positionYDiff = targetState.positionY - positionY;\n if (animationTime === 0) {\n setTransformState(targetState.scale, targetState.positionX, targetState.positionY);\n }\n else {\n // animation start timestamp\n handleSetupAnimation(contextInstance, animationName, animationTime, function (step) {\n var newScale = scale + scaleDiff * step;\n var newPositionX = positionX + positionXDiff * step;\n var newPositionY = positionY + positionYDiff * step;\n setTransformState(newScale, newPositionX, newPositionY);\n });\n }\n}\n\n/* eslint-disable no-param-reassign */\nfunction getComponentsSizes(wrapperComponent, contentComponent, newScale) {\n var wrapperWidth = wrapperComponent.offsetWidth;\n var wrapperHeight = wrapperComponent.offsetHeight;\n var contentWidth = contentComponent.offsetWidth;\n var contentHeight = contentComponent.offsetHeight;\n var newContentWidth = contentWidth * newScale;\n var newContentHeight = contentHeight * newScale;\n var newDiffWidth = wrapperWidth - newContentWidth;\n var newDiffHeight = wrapperHeight - newContentHeight;\n return {\n wrapperWidth: wrapperWidth,\n wrapperHeight: wrapperHeight,\n newContentWidth: newContentWidth,\n newDiffWidth: newDiffWidth,\n newContentHeight: newContentHeight,\n newDiffHeight: newDiffHeight,\n };\n}\nvar getBounds = function (wrapperWidth, newContentWidth, diffWidth, wrapperHeight, newContentHeight, diffHeight, centerZoomedOut) {\n var scaleWidthFactor = wrapperWidth > newContentWidth\n ? diffWidth * (centerZoomedOut ? 1 : 0.5)\n : 0;\n var scaleHeightFactor = wrapperHeight > newContentHeight\n ? diffHeight * (centerZoomedOut ? 1 : 0.5)\n : 0;\n var minPositionX = wrapperWidth - newContentWidth - scaleWidthFactor;\n var maxPositionX = scaleWidthFactor;\n var minPositionY = wrapperHeight - newContentHeight - scaleHeightFactor;\n var maxPositionY = scaleHeightFactor;\n return { minPositionX: minPositionX, maxPositionX: maxPositionX, minPositionY: minPositionY, maxPositionY: maxPositionY };\n};\nvar calculateBounds = function (contextInstance, newScale) {\n var wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n var centerZoomedOut = contextInstance.setup.centerZoomedOut;\n if (!wrapperComponent || !contentComponent) {\n throw new Error(\"Components are not mounted\");\n }\n var _a = getComponentsSizes(wrapperComponent, contentComponent, newScale), wrapperWidth = _a.wrapperWidth, wrapperHeight = _a.wrapperHeight, newContentWidth = _a.newContentWidth, newDiffWidth = _a.newDiffWidth, newContentHeight = _a.newContentHeight, newDiffHeight = _a.newDiffHeight;\n var bounds = getBounds(wrapperWidth, newContentWidth, newDiffWidth, wrapperHeight, newContentHeight, newDiffHeight, Boolean(centerZoomedOut));\n return bounds;\n};\n/**\n * Keeps value between given bounds, used for limiting view to given boundaries\n * 1# eg. boundLimiter(2, 0, 3, true) => 2\n * 2# eg. boundLimiter(4, 0, 3, true) => 3\n * 3# eg. boundLimiter(-2, 0, 3, true) => 0\n * 4# eg. boundLimiter(10, 0, 3, false) => 10\n */\nvar boundLimiter = function (value, minBound, maxBound, isActive) {\n if (!isActive)\n return roundNumber(value, 2);\n if (value < minBound)\n return roundNumber(minBound, 2);\n if (value > maxBound)\n return roundNumber(maxBound, 2);\n return roundNumber(value, 2);\n};\nvar handleCalculateBounds = function (contextInstance, newScale) {\n var bounds = calculateBounds(contextInstance, newScale);\n // Save bounds\n contextInstance.bounds = bounds;\n return bounds;\n};\nfunction getMouseBoundedPosition(positionX, positionY, bounds, limitToBounds, paddingValueX, paddingValueY, wrapperComponent) {\n var minPositionX = bounds.minPositionX, minPositionY = bounds.minPositionY, maxPositionX = bounds.maxPositionX, maxPositionY = bounds.maxPositionY;\n var paddingX = 0;\n var paddingY = 0;\n if (wrapperComponent) {\n paddingX = paddingValueX;\n paddingY = paddingValueY;\n }\n var x = boundLimiter(positionX, minPositionX - paddingX, maxPositionX + paddingX, limitToBounds);\n var y = boundLimiter(positionY, minPositionY - paddingY, maxPositionY + paddingY, limitToBounds);\n return { x: x, y: y };\n}\n\nfunction handleCalculateZoomPositions(contextInstance, mouseX, mouseY, newScale, bounds, limitToBounds) {\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n var scaleDifference = newScale - scale;\n if (typeof mouseX !== \"number\" || typeof mouseY !== \"number\") {\n console.error(\"Mouse X and Y position were not provided!\");\n return { x: positionX, y: positionY };\n }\n var calculatedPositionX = positionX - mouseX * scaleDifference;\n var calculatedPositionY = positionY - mouseY * scaleDifference;\n // do not limit to bounds when there is padding animation,\n // it causes animation strange behaviour\n var newPositions = getMouseBoundedPosition(calculatedPositionX, calculatedPositionY, bounds, limitToBounds, 0, 0, null);\n return newPositions;\n}\nfunction checkZoomBounds(zoom, minScale, maxScale, zoomPadding, enablePadding) {\n var scalePadding = enablePadding ? zoomPadding : 0;\n var minScaleWithPadding = minScale - scalePadding;\n if (!Number.isNaN(maxScale) && zoom >= maxScale)\n return maxScale;\n if (!Number.isNaN(minScale) && zoom <= minScaleWithPadding)\n return minScaleWithPadding;\n return zoom;\n}\n\nvar isPanningStartAllowed = function (contextInstance, event) {\n var excluded = contextInstance.setup.panning.excluded;\n var isInitialized = contextInstance.isInitialized, wrapperComponent = contextInstance.wrapperComponent;\n var target = event.target;\n var targetIsShadowDom = \"shadowRoot\" in target && \"composedPath\" in event;\n var isWrapperChild = targetIsShadowDom\n ? event.composedPath().some(function (el) {\n if (!(el instanceof Element)) {\n return false;\n }\n return wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.contains(el);\n })\n : wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.contains(target);\n var isAllowed = isInitialized && target && isWrapperChild;\n if (!isAllowed)\n return false;\n var isExcluded = isExcludedNode(target, excluded);\n if (isExcluded)\n return false;\n return true;\n};\nvar isPanningAllowed = function (contextInstance) {\n var isInitialized = contextInstance.isInitialized, isPanning = contextInstance.isPanning, setup = contextInstance.setup;\n var disabled = setup.panning.disabled;\n var isAllowed = isInitialized && isPanning && !disabled;\n if (!isAllowed)\n return false;\n return true;\n};\nvar handlePanningSetup = function (contextInstance, event) {\n var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY;\n contextInstance.isPanning = true;\n // Panning with mouse\n var x = event.clientX;\n var y = event.clientY;\n contextInstance.startCoords = { x: x - positionX, y: y - positionY };\n};\nvar handleTouchPanningSetup = function (contextInstance, event) {\n var touches = event.touches;\n var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY;\n contextInstance.isPanning = true;\n // Panning with touch\n var oneFingerTouch = touches.length === 1;\n if (oneFingerTouch) {\n var x = touches[0].clientX;\n var y = touches[0].clientY;\n contextInstance.startCoords = { x: x - positionX, y: y - positionY };\n }\n};\nfunction handlePanToBounds(contextInstance) {\n var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY, scale = _a.scale;\n var _b = contextInstance.setup, disabled = _b.disabled, limitToBounds = _b.limitToBounds, centerZoomedOut = _b.centerZoomedOut;\n var wrapperComponent = contextInstance.wrapperComponent;\n if (disabled || !wrapperComponent || !contextInstance.bounds)\n return;\n var _c = contextInstance.bounds, maxPositionX = _c.maxPositionX, minPositionX = _c.minPositionX, maxPositionY = _c.maxPositionY, minPositionY = _c.minPositionY;\n var xChanged = positionX > maxPositionX || positionX < minPositionX;\n var yChanged = positionY > maxPositionY || positionY < minPositionY;\n var mousePosX = positionX > maxPositionX\n ? wrapperComponent.offsetWidth\n : contextInstance.setup.minPositionX || 0;\n var mousePosY = positionY > maxPositionY\n ? wrapperComponent.offsetHeight\n : contextInstance.setup.minPositionY || 0;\n var _d = handleCalculateZoomPositions(contextInstance, mousePosX, mousePosY, scale, contextInstance.bounds, limitToBounds || centerZoomedOut), x = _d.x, y = _d.y;\n return {\n scale: scale,\n positionX: xChanged ? x : positionX,\n positionY: yChanged ? y : positionY,\n };\n}\nfunction handleNewPosition(contextInstance, newPositionX, newPositionY, paddingValueX, paddingValueY) {\n var limitToBounds = contextInstance.setup.limitToBounds;\n var wrapperComponent = contextInstance.wrapperComponent, bounds = contextInstance.bounds;\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n if (wrapperComponent === null ||\n bounds === null ||\n (newPositionX === positionX && newPositionY === positionY)) {\n return;\n }\n var _b = getMouseBoundedPosition(newPositionX, newPositionY, bounds, limitToBounds, paddingValueX, paddingValueY, wrapperComponent), x = _b.x, y = _b.y;\n contextInstance.setTransformState(scale, x, y);\n}\nvar getPanningClientPosition = function (contextInstance, clientX, clientY) {\n var startCoords = contextInstance.startCoords, transformState = contextInstance.transformState;\n var panning = contextInstance.setup.panning;\n var lockAxisX = panning.lockAxisX, lockAxisY = panning.lockAxisY;\n var positionX = transformState.positionX, positionY = transformState.positionY;\n if (!startCoords) {\n return { x: positionX, y: positionY };\n }\n var mouseX = clientX - startCoords.x;\n var mouseY = clientY - startCoords.y;\n var newPositionX = lockAxisX ? positionX : mouseX;\n var newPositionY = lockAxisY ? positionY : mouseY;\n return { x: newPositionX, y: newPositionY };\n};\nvar getPaddingValue = function (contextInstance, size) {\n var setup = contextInstance.setup, transformState = contextInstance.transformState;\n var scale = transformState.scale;\n var minScale = setup.minScale, disablePadding = setup.disablePadding;\n if (size > 0 && scale >= minScale && !disablePadding) {\n return size;\n }\n return 0;\n};\n\nvar isVelocityCalculationAllowed = function (contextInstance) {\n var mounted = contextInstance.mounted;\n var _a = contextInstance.setup, disabled = _a.disabled, velocityAnimation = _a.velocityAnimation;\n var scale = contextInstance.transformState.scale;\n var disabledVelocity = velocityAnimation.disabled;\n var isAllowed = !disabledVelocity || scale > 1 || !disabled || mounted;\n if (!isAllowed)\n return false;\n return true;\n};\nvar isVelocityAllowed = function (contextInstance) {\n var mounted = contextInstance.mounted, velocity = contextInstance.velocity, bounds = contextInstance.bounds;\n var _a = contextInstance.setup, disabled = _a.disabled, velocityAnimation = _a.velocityAnimation;\n var scale = contextInstance.transformState.scale;\n var disabledVelocity = velocityAnimation.disabled;\n var isAllowed = !disabledVelocity || scale > 1 || !disabled || mounted;\n if (!isAllowed)\n return false;\n if (!velocity || !bounds)\n return false;\n return true;\n};\nfunction getVelocityMoveTime(contextInstance, velocity) {\n var velocityAnimation = contextInstance.setup.velocityAnimation;\n var equalToMove = velocityAnimation.equalToMove, animationTime = velocityAnimation.animationTime, sensitivity = velocityAnimation.sensitivity;\n if (equalToMove) {\n return animationTime * velocity * sensitivity;\n }\n return animationTime;\n}\nfunction getVelocityPosition(newPosition, startPosition, currentPosition, isLocked, limitToBounds, minPosition, maxPosition, minTarget, maxTarget, step) {\n if (limitToBounds) {\n if (startPosition > maxPosition && currentPosition > maxPosition) {\n var calculatedPosition = maxPosition + (newPosition - maxPosition) * step;\n if (calculatedPosition > maxTarget)\n return maxTarget;\n if (calculatedPosition < maxPosition)\n return maxPosition;\n return calculatedPosition;\n }\n if (startPosition < minPosition && currentPosition < minPosition) {\n var calculatedPosition = minPosition + (newPosition - minPosition) * step;\n if (calculatedPosition < minTarget)\n return minTarget;\n if (calculatedPosition > minPosition)\n return minPosition;\n return calculatedPosition;\n }\n }\n if (isLocked)\n return startPosition;\n return boundLimiter(newPosition, minPosition, maxPosition, limitToBounds);\n}\n\nfunction getSizeMultiplier(wrapperComponent, equalToMove) {\n var defaultMultiplier = 1;\n if (equalToMove) {\n return Math.min(defaultMultiplier, wrapperComponent.offsetWidth / window.innerWidth);\n }\n return defaultMultiplier;\n}\nfunction handleCalculateVelocity(contextInstance, position) {\n var isAllowed = isVelocityCalculationAllowed(contextInstance);\n if (!isAllowed) {\n return;\n }\n var lastMousePosition = contextInstance.lastMousePosition, velocityTime = contextInstance.velocityTime, setup = contextInstance.setup;\n var wrapperComponent = contextInstance.wrapperComponent;\n var equalToMove = setup.velocityAnimation.equalToMove;\n var now = Date.now();\n if (lastMousePosition && velocityTime && wrapperComponent) {\n var sizeMultiplier = getSizeMultiplier(wrapperComponent, equalToMove);\n var distanceX = position.x - lastMousePosition.x;\n var distanceY = position.y - lastMousePosition.y;\n var velocityX = distanceX / sizeMultiplier;\n var velocityY = distanceY / sizeMultiplier;\n var interval = now - velocityTime;\n var speed = distanceX * distanceX + distanceY * distanceY;\n var velocity = Math.sqrt(speed) / interval;\n contextInstance.velocity = { velocityX: velocityX, velocityY: velocityY, total: velocity };\n }\n contextInstance.lastMousePosition = position;\n contextInstance.velocityTime = now;\n}\nfunction handleVelocityPanning(contextInstance) {\n var velocity = contextInstance.velocity, bounds = contextInstance.bounds, setup = contextInstance.setup, wrapperComponent = contextInstance.wrapperComponent;\n var isAllowed = isVelocityAllowed(contextInstance);\n if (!isAllowed || !velocity || !bounds || !wrapperComponent) {\n return;\n }\n var velocityX = velocity.velocityX, velocityY = velocity.velocityY, total = velocity.total;\n var maxPositionX = bounds.maxPositionX, minPositionX = bounds.minPositionX, maxPositionY = bounds.maxPositionY, minPositionY = bounds.minPositionY;\n var limitToBounds = setup.limitToBounds, alignmentAnimation = setup.alignmentAnimation;\n var zoomAnimation = setup.zoomAnimation, panning = setup.panning;\n var lockAxisY = panning.lockAxisY, lockAxisX = panning.lockAxisX;\n var animationType = zoomAnimation.animationType;\n var sizeX = alignmentAnimation.sizeX, sizeY = alignmentAnimation.sizeY, velocityAlignmentTime = alignmentAnimation.velocityAlignmentTime;\n var alignAnimationTime = velocityAlignmentTime;\n var moveAnimationTime = getVelocityMoveTime(contextInstance, total);\n var finalAnimationTime = Math.max(moveAnimationTime, alignAnimationTime);\n var paddingValueX = getPaddingValue(contextInstance, sizeX);\n var paddingValueY = getPaddingValue(contextInstance, sizeY);\n var paddingX = (paddingValueX * wrapperComponent.offsetWidth) / 100;\n var paddingY = (paddingValueY * wrapperComponent.offsetHeight) / 100;\n var maxTargetX = maxPositionX + paddingX;\n var minTargetX = minPositionX - paddingX;\n var maxTargetY = maxPositionY + paddingY;\n var minTargetY = minPositionY - paddingY;\n var startState = contextInstance.transformState;\n var startTime = new Date().getTime();\n handleSetupAnimation(contextInstance, animationType, finalAnimationTime, function (step) {\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n var frameTime = new Date().getTime() - startTime;\n var animationProgress = frameTime / alignAnimationTime;\n var alignAnimation = animations[alignmentAnimation.animationType];\n var alignStep = 1 - alignAnimation(Math.min(1, animationProgress));\n var customStep = 1 - step;\n var newPositionX = positionX + velocityX * customStep;\n var newPositionY = positionY + velocityY * customStep;\n var currentPositionX = getVelocityPosition(newPositionX, startState.positionX, positionX, lockAxisX, limitToBounds, minPositionX, maxPositionX, minTargetX, maxTargetX, alignStep);\n var currentPositionY = getVelocityPosition(newPositionY, startState.positionY, positionY, lockAxisY, limitToBounds, minPositionY, maxPositionY, minTargetY, maxTargetY, alignStep);\n if (positionX !== newPositionX || positionY !== newPositionY) {\n contextInstance.setTransformState(scale, currentPositionX, currentPositionY);\n }\n });\n}\n\nfunction handlePanningStart(contextInstance, event) {\n var scale = contextInstance.transformState.scale;\n handleCancelAnimation(contextInstance);\n handleCalculateBounds(contextInstance, scale);\n if (window.TouchEvent !== undefined && event instanceof TouchEvent) {\n handleTouchPanningSetup(contextInstance, event);\n }\n else {\n handlePanningSetup(contextInstance, event);\n }\n}\nfunction handleAlignToBounds(contextInstance, customAnimationTime) {\n var scale = contextInstance.transformState.scale;\n var _a = contextInstance.setup, minScale = _a.minScale, alignmentAnimation = _a.alignmentAnimation;\n var disabled = alignmentAnimation.disabled, sizeX = alignmentAnimation.sizeX, sizeY = alignmentAnimation.sizeY, animationTime = alignmentAnimation.animationTime, animationType = alignmentAnimation.animationType;\n var isDisabled = disabled || scale < minScale || (!sizeX && !sizeY);\n if (isDisabled)\n return;\n var targetState = handlePanToBounds(contextInstance);\n if (targetState) {\n animate(contextInstance, targetState, customAnimationTime !== null && customAnimationTime !== void 0 ? customAnimationTime : animationTime, animationType);\n }\n}\nfunction handlePanning(contextInstance, clientX, clientY) {\n var startCoords = contextInstance.startCoords, setup = contextInstance.setup;\n var _a = setup.alignmentAnimation, sizeX = _a.sizeX, sizeY = _a.sizeY;\n if (!startCoords)\n return;\n var _b = getPanningClientPosition(contextInstance, clientX, clientY), x = _b.x, y = _b.y;\n var paddingValueX = getPaddingValue(contextInstance, sizeX);\n var paddingValueY = getPaddingValue(contextInstance, sizeY);\n handleCalculateVelocity(contextInstance, { x: x, y: y });\n handleNewPosition(contextInstance, x, y, paddingValueX, paddingValueY);\n}\nfunction handlePanningEnd(contextInstance) {\n if (contextInstance.isPanning) {\n var velocityDisabled = contextInstance.setup.panning.velocityDisabled;\n var velocity = contextInstance.velocity, wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n contextInstance.isPanning = false;\n contextInstance.animate = false;\n contextInstance.animation = null;\n var wrapperRect = wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.getBoundingClientRect();\n var contentRect = contentComponent === null || contentComponent === void 0 ? void 0 : contentComponent.getBoundingClientRect();\n var wrapperWidth = (wrapperRect === null || wrapperRect === void 0 ? void 0 : wrapperRect.width) || 0;\n var wrapperHeight = (wrapperRect === null || wrapperRect === void 0 ? void 0 : wrapperRect.height) || 0;\n var contentWidth = (contentRect === null || contentRect === void 0 ? void 0 : contentRect.width) || 0;\n var contentHeight = (contentRect === null || contentRect === void 0 ? void 0 : contentRect.height) || 0;\n var isZoomed = wrapperWidth < contentWidth || wrapperHeight < contentHeight;\n var shouldAnimate = !velocityDisabled && velocity && (velocity === null || velocity === void 0 ? void 0 : velocity.total) > 0.1 && isZoomed;\n if (shouldAnimate) {\n handleVelocityPanning(contextInstance);\n }\n else {\n handleAlignToBounds(contextInstance);\n }\n }\n}\n\nfunction handleZoomToPoint(contextInstance, scale, mouseX, mouseY) {\n var _a = contextInstance.setup, minScale = _a.minScale, maxScale = _a.maxScale, limitToBounds = _a.limitToBounds;\n var newScale = checkZoomBounds(roundNumber(scale, 2), minScale, maxScale, 0, false);\n var bounds = handleCalculateBounds(contextInstance, newScale);\n var _b = handleCalculateZoomPositions(contextInstance, mouseX, mouseY, newScale, bounds, limitToBounds), x = _b.x, y = _b.y;\n return { scale: newScale, positionX: x, positionY: y };\n}\nfunction handleAlignToScaleBounds(contextInstance, mousePositionX, mousePositionY) {\n var scale = contextInstance.transformState.scale;\n var wrapperComponent = contextInstance.wrapperComponent;\n var _a = contextInstance.setup, minScale = _a.minScale, limitToBounds = _a.limitToBounds, zoomAnimation = _a.zoomAnimation;\n var disabled = zoomAnimation.disabled, animationTime = zoomAnimation.animationTime, animationType = zoomAnimation.animationType;\n var isDisabled = disabled || scale >= minScale;\n if (scale >= 1 || limitToBounds) {\n // fire fit to bounds animation\n handleAlignToBounds(contextInstance);\n }\n if (isDisabled || !wrapperComponent || !contextInstance.mounted)\n return;\n var mouseX = mousePositionX || wrapperComponent.offsetWidth / 2;\n var mouseY = mousePositionY || wrapperComponent.offsetHeight / 2;\n var targetState = handleZoomToPoint(contextInstance, minScale, mouseX, mouseY);\n if (targetState) {\n animate(contextInstance, targetState, animationTime, animationType);\n }\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nvar initialState = {\n previousScale: 1,\n scale: 1,\n positionX: 0,\n positionY: 0,\n};\nvar initialSetup = {\n disabled: false,\n minPositionX: null,\n maxPositionX: null,\n minPositionY: null,\n maxPositionY: null,\n minScale: 1,\n maxScale: 8,\n limitToBounds: true,\n centerZoomedOut: false,\n centerOnInit: false,\n disablePadding: false,\n smooth: true,\n wheel: {\n step: 0.2,\n disabled: false,\n smoothStep: 0.001,\n wheelDisabled: false,\n touchPadDisabled: false,\n activationKeys: [],\n excluded: [],\n },\n panning: {\n disabled: false,\n velocityDisabled: false,\n lockAxisX: false,\n lockAxisY: false,\n allowLeftClickPan: true,\n allowMiddleClickPan: true,\n allowRightClickPan: true,\n wheelPanning: false,\n activationKeys: [],\n excluded: [],\n },\n pinch: {\n step: 5,\n disabled: false,\n excluded: [],\n },\n doubleClick: {\n disabled: false,\n step: 0.7,\n mode: \"zoomIn\",\n animationType: \"easeOut\",\n animationTime: 200,\n excluded: [],\n },\n zoomAnimation: {\n disabled: false,\n size: 0.4,\n animationTime: 200,\n animationType: \"easeOut\",\n },\n alignmentAnimation: {\n disabled: false,\n sizeX: 100,\n sizeY: 100,\n animationTime: 200,\n velocityAlignmentTime: 400,\n animationType: \"easeOut\",\n },\n velocityAnimation: {\n disabled: false,\n sensitivity: 1,\n animationTime: 400,\n animationType: \"easeOut\",\n equalToMove: true,\n },\n};\nvar baseClasses = {\n wrapperClass: \"react-transform-wrapper\",\n contentClass: \"react-transform-component\",\n};\n\nvar createState = function (props) {\n var _a, _b, _c, _d;\n return {\n previousScale: (_a = props.initialScale) !== null && _a !== void 0 ? _a : initialState.scale,\n scale: (_b = props.initialScale) !== null && _b !== void 0 ? _b : initialState.scale,\n positionX: (_c = props.initialPositionX) !== null && _c !== void 0 ? _c : initialState.positionX,\n positionY: (_d = props.initialPositionY) !== null && _d !== void 0 ? _d : initialState.positionY,\n };\n};\nvar createSetup = function (props) {\n var newSetup = __assign({}, initialSetup);\n Object.keys(props).forEach(function (key) {\n var validValue = typeof props[key] !== \"undefined\";\n var validParameter = typeof initialSetup[key] !== \"undefined\";\n if (validParameter && validValue) {\n var dataType = Object.prototype.toString.call(initialSetup[key]);\n var isObject = dataType === \"[object Object]\";\n var isArray = dataType === \"[object Array]\";\n if (isObject) {\n newSetup[key] = __assign(__assign({}, initialSetup[key]), props[key]);\n }\n else if (isArray) {\n newSetup[key] = __spreadArray(__spreadArray([], initialSetup[key], true), props[key], true);\n }\n else {\n newSetup[key] = props[key];\n }\n }\n });\n return newSetup;\n};\n\nvar handleCalculateButtonZoom = function (contextInstance, delta, step) {\n var scale = contextInstance.transformState.scale;\n var wrapperComponent = contextInstance.wrapperComponent, setup = contextInstance.setup;\n var maxScale = setup.maxScale, minScale = setup.minScale, zoomAnimation = setup.zoomAnimation, smooth = setup.smooth;\n var size = zoomAnimation.size;\n if (!wrapperComponent) {\n throw new Error(\"Wrapper is not mounted\");\n }\n var targetScale = smooth\n ? scale * Math.exp(delta * step)\n : scale + delta * step;\n var newScale = checkZoomBounds(roundNumber(targetScale, 3), minScale, maxScale, size, false);\n return newScale;\n};\nfunction handleZoomToViewCenter(contextInstance, delta, step, animationTime, animationType) {\n var wrapperComponent = contextInstance.wrapperComponent;\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n if (!wrapperComponent)\n return console.error(\"No WrapperComponent found\");\n var wrapperWidth = wrapperComponent.offsetWidth;\n var wrapperHeight = wrapperComponent.offsetHeight;\n var mouseX = (wrapperWidth / 2 - positionX) / scale;\n var mouseY = (wrapperHeight / 2 - positionY) / scale;\n var newScale = handleCalculateButtonZoom(contextInstance, delta, step);\n var targetState = handleZoomToPoint(contextInstance, newScale, mouseX, mouseY);\n if (!targetState) {\n return console.error(\"Error during zoom event. New transformation state was not calculated.\");\n }\n animate(contextInstance, targetState, animationTime, animationType);\n}\nfunction resetTransformations(contextInstance, animationTime, animationType, onResetTransformation) {\n var setup = contextInstance.setup, wrapperComponent = contextInstance.wrapperComponent;\n var limitToBounds = setup.limitToBounds;\n var initialTransformation = createState(contextInstance.props);\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n if (!wrapperComponent)\n return;\n var newBounds = calculateBounds(contextInstance, initialTransformation.scale);\n var boundedPositions = getMouseBoundedPosition(initialTransformation.positionX, initialTransformation.positionY, newBounds, limitToBounds, 0, 0, wrapperComponent);\n var newState = {\n scale: initialTransformation.scale,\n positionX: boundedPositions.x,\n positionY: boundedPositions.y,\n };\n if (scale === initialTransformation.scale &&\n positionX === initialTransformation.positionX &&\n positionY === initialTransformation.positionY) {\n return;\n }\n onResetTransformation === null || onResetTransformation === void 0 ? void 0 : onResetTransformation();\n animate(contextInstance, newState, animationTime, animationType);\n}\nfunction getOffset(element, wrapper, content, state) {\n var offset = element.getBoundingClientRect();\n var wrapperOffset = wrapper.getBoundingClientRect();\n var contentOffset = content.getBoundingClientRect();\n var xOff = wrapperOffset.x * state.scale;\n var yOff = wrapperOffset.y * state.scale;\n return {\n x: (offset.x - contentOffset.x + xOff) / state.scale,\n y: (offset.y - contentOffset.y + yOff) / state.scale,\n };\n}\nfunction calculateZoomToNode(contextInstance, node, customZoom) {\n var wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent, transformState = contextInstance.transformState;\n var _a = contextInstance.setup, limitToBounds = _a.limitToBounds, minScale = _a.minScale, maxScale = _a.maxScale;\n if (!wrapperComponent || !contentComponent)\n return transformState;\n var wrapperRect = wrapperComponent.getBoundingClientRect();\n var nodeRect = node.getBoundingClientRect();\n var nodeOffset = getOffset(node, wrapperComponent, contentComponent, transformState);\n var nodeLeft = nodeOffset.x;\n var nodeTop = nodeOffset.y;\n var nodeWidth = nodeRect.width / transformState.scale;\n var nodeHeight = nodeRect.height / transformState.scale;\n var scaleX = wrapperComponent.offsetWidth / nodeWidth;\n var scaleY = wrapperComponent.offsetHeight / nodeHeight;\n var newScale = checkZoomBounds(customZoom || Math.min(scaleX, scaleY), minScale, maxScale, 0, false);\n var offsetX = (wrapperRect.width - nodeWidth * newScale) / 2;\n var offsetY = (wrapperRect.height - nodeHeight * newScale) / 2;\n var newPositionX = (wrapperRect.left - nodeLeft) * newScale + offsetX;\n var newPositionY = (wrapperRect.top - nodeTop) * newScale + offsetY;\n var bounds = calculateBounds(contextInstance, newScale);\n var _b = getMouseBoundedPosition(newPositionX, newPositionY, bounds, limitToBounds, 0, 0, wrapperComponent), x = _b.x, y = _b.y;\n return { positionX: x, positionY: y, scale: newScale };\n}\n\nvar zoomIn = function (contextInstance) {\n return function (step, animationTime, animationType) {\n if (step === void 0) { step = 0.5; }\n if (animationTime === void 0) { animationTime = 300; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n handleZoomToViewCenter(contextInstance, 1, step, animationTime, animationType);\n };\n};\nvar zoomOut = function (contextInstance) {\n return function (step, animationTime, animationType) {\n if (step === void 0) { step = 0.5; }\n if (animationTime === void 0) { animationTime = 300; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n handleZoomToViewCenter(contextInstance, -1, step, animationTime, animationType);\n };\n};\nvar setTransform = function (contextInstance) {\n return function (newPositionX, newPositionY, newScale, animationTime, animationType) {\n if (animationTime === void 0) { animationTime = 300; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY, scale = _a.scale;\n var wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n var disabled = contextInstance.setup.disabled;\n if (disabled || !wrapperComponent || !contentComponent)\n return;\n var targetState = {\n positionX: Number.isNaN(newPositionX) ? positionX : newPositionX,\n positionY: Number.isNaN(newPositionY) ? positionY : newPositionY,\n scale: Number.isNaN(newScale) ? scale : newScale,\n };\n animate(contextInstance, targetState, animationTime, animationType);\n };\n};\nvar resetTransform = function (contextInstance) {\n return function (animationTime, animationType) {\n if (animationTime === void 0) { animationTime = 200; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n resetTransformations(contextInstance, animationTime, animationType);\n };\n};\nvar centerView = function (contextInstance) {\n return function (scale, animationTime, animationType) {\n if (animationTime === void 0) { animationTime = 200; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n var transformState = contextInstance.transformState, wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n if (wrapperComponent && contentComponent) {\n var targetState = getCenterPosition(scale || transformState.scale, wrapperComponent, contentComponent);\n animate(contextInstance, targetState, animationTime, animationType);\n }\n };\n};\nvar zoomToElement = function (contextInstance) {\n return function (node, scale, animationTime, animationType) {\n if (animationTime === void 0) { animationTime = 600; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n handleCancelAnimation(contextInstance);\n var wrapperComponent = contextInstance.wrapperComponent;\n var target = typeof node === \"string\" ? document.getElementById(node) : node;\n if (wrapperComponent && target && wrapperComponent.contains(target)) {\n var targetState = calculateZoomToNode(contextInstance, target, scale);\n animate(contextInstance, targetState, animationTime, animationType);\n }\n };\n};\n\nvar getControls = function (contextInstance) {\n return {\n instance: contextInstance,\n zoomIn: zoomIn(contextInstance),\n zoomOut: zoomOut(contextInstance),\n setTransform: setTransform(contextInstance),\n resetTransform: resetTransform(contextInstance),\n centerView: centerView(contextInstance),\n zoomToElement: zoomToElement(contextInstance),\n };\n};\nvar getState = function (contextInstance) {\n return {\n instance: contextInstance,\n state: contextInstance.transformState,\n };\n};\nvar getContext = function (contextInstance) {\n var ref = {};\n Object.assign(ref, getState(contextInstance));\n Object.assign(ref, getControls(contextInstance));\n return ref;\n};\n\n// We want to make event listeners non-passive, and to do so have to check\n// that browsers support EventListenerOptions in the first place.\n// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\nvar passiveSupported = false;\nfunction makePassiveEventOption() {\n try {\n var options = {\n get passive() {\n // This function will be called when the browser\n // attempts to access the passive property.\n passiveSupported = true;\n return false;\n },\n };\n return options;\n }\n catch (err) {\n passiveSupported = false;\n return passiveSupported;\n }\n}\n\nvar matchPrefix = \".\".concat(baseClasses.wrapperClass);\nvar isExcludedNode = function (node, excluded) {\n return excluded.some(function (exclude) {\n return node.matches(\"\".concat(matchPrefix, \" \").concat(exclude, \", \").concat(matchPrefix, \" .\").concat(exclude, \", \").concat(matchPrefix, \" \").concat(exclude, \" *, \").concat(matchPrefix, \" .\").concat(exclude, \" *\"));\n });\n};\nvar cancelTimeout = function (timeout) {\n if (timeout) {\n clearTimeout(timeout);\n }\n};\n\nvar getTransformStyles = function (x, y, scale) {\n // Standard translate prevents blurry svg on the safari\n return \"translate(\".concat(x, \"px, \").concat(y, \"px) scale(\").concat(scale, \")\");\n};\nvar getMatrixTransformStyles = function (x, y, scale) {\n // The shorthand for matrix does not work for Safari hence the need to explicitly use matrix3d\n // Refer to https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix\n var a = scale;\n var b = 0;\n var c = 0;\n var d = scale;\n var tx = x;\n var ty = y;\n return \"matrix3d(\".concat(a, \", \").concat(b, \", 0, 0, \").concat(c, \", \").concat(d, \", 0, 0, 0, 0, 1, 0, \").concat(tx, \", \").concat(ty, \", 0, 1)\");\n};\nvar getCenterPosition = function (scale, wrapperComponent, contentComponent) {\n var contentWidth = contentComponent.offsetWidth * scale;\n var contentHeight = contentComponent.offsetHeight * scale;\n var centerPositionX = (wrapperComponent.offsetWidth - contentWidth) / 2;\n var centerPositionY = (wrapperComponent.offsetHeight - contentHeight) / 2;\n return {\n scale: scale,\n positionX: centerPositionX,\n positionY: centerPositionY,\n };\n};\n\nfunction mergeRefs(refs) {\n return function (value) {\n refs.forEach(function (ref) {\n if (typeof ref === \"function\") {\n ref(value);\n }\n else if (ref != null) {\n ref.current = value;\n }\n });\n };\n}\n\nvar isWheelAllowed = function (contextInstance, event) {\n var _a = contextInstance.setup.wheel, disabled = _a.disabled, wheelDisabled = _a.wheelDisabled, touchPadDisabled = _a.touchPadDisabled, excluded = _a.excluded;\n var isInitialized = contextInstance.isInitialized, isPanning = contextInstance.isPanning;\n var target = event.target;\n var isAllowed = isInitialized && !isPanning && !disabled && target;\n if (!isAllowed)\n return false;\n // Event ctrlKey detects if touchpad action is executing wheel or pinch gesture\n if (wheelDisabled && !event.ctrlKey)\n return false;\n if (touchPadDisabled && event.ctrlKey)\n return false;\n var isExcluded = isExcludedNode(target, excluded);\n if (isExcluded)\n return false;\n return true;\n};\nvar getDeltaY = function (event) {\n if (event) {\n return event.deltaY < 0 ? 1 : -1;\n }\n return 0;\n};\nfunction getDelta(event, customDelta) {\n var deltaY = getDeltaY(event);\n var delta = checkIsNumber(customDelta, deltaY);\n return delta;\n}\nfunction getMousePosition(event, contentComponent, scale) {\n var contentRect = contentComponent.getBoundingClientRect();\n var mouseX = 0;\n var mouseY = 0;\n if (\"clientX\" in event) {\n // mouse position x, y over wrapper component\n mouseX = (event.clientX - contentRect.left) / scale;\n mouseY = (event.clientY - contentRect.top) / scale;\n }\n else {\n var touch = event.touches[0];\n mouseX = (touch.clientX - contentRect.left) / scale;\n mouseY = (touch.clientY - contentRect.top) / scale;\n }\n if (Number.isNaN(mouseX) || Number.isNaN(mouseY))\n console.error(\"No mouse or touch offset found\");\n return {\n x: mouseX,\n y: mouseY,\n };\n}\nvar handleCalculateWheelZoom = function (contextInstance, delta, step, disable, getTarget) {\n var scale = contextInstance.transformState.scale;\n var wrapperComponent = contextInstance.wrapperComponent, setup = contextInstance.setup;\n var maxScale = setup.maxScale, minScale = setup.minScale, zoomAnimation = setup.zoomAnimation, disablePadding = setup.disablePadding;\n var size = zoomAnimation.size, disabled = zoomAnimation.disabled;\n if (!wrapperComponent) {\n throw new Error(\"Wrapper is not mounted\");\n }\n var targetScale = scale + delta * step;\n if (getTarget)\n return targetScale;\n var paddingEnabled = disable ? false : !disabled;\n var newScale = checkZoomBounds(roundNumber(targetScale, 3), minScale, maxScale, size, paddingEnabled && !disablePadding);\n return newScale;\n};\nvar handleWheelZoomStop = function (contextInstance, event) {\n var previousWheelEvent = contextInstance.previousWheelEvent;\n var scale = contextInstance.transformState.scale;\n var _a = contextInstance.setup, maxScale = _a.maxScale, minScale = _a.minScale;\n if (!previousWheelEvent)\n return false;\n if (scale < maxScale || scale > minScale)\n return true;\n if (Math.sign(previousWheelEvent.deltaY) !== Math.sign(event.deltaY))\n return true;\n if (previousWheelEvent.deltaY > 0 && previousWheelEvent.deltaY < event.deltaY)\n return true;\n if (previousWheelEvent.deltaY < 0 && previousWheelEvent.deltaY > event.deltaY)\n return true;\n if (Math.sign(previousWheelEvent.deltaY) !== Math.sign(event.deltaY))\n return true;\n return false;\n};\n\nvar isPinchStartAllowed = function (contextInstance, event) {\n var _a = contextInstance.setup.pinch, disabled = _a.disabled, excluded = _a.excluded;\n var isInitialized = contextInstance.isInitialized;\n var target = event.target;\n var isAllowed = isInitialized && !disabled && target;\n if (!isAllowed)\n return false;\n var isExcluded = isExcludedNode(target, excluded);\n if (isExcluded)\n return false;\n return true;\n};\nvar isPinchAllowed = function (contextInstance) {\n var disabled = contextInstance.setup.pinch.disabled;\n var isInitialized = contextInstance.isInitialized, pinchStartDistance = contextInstance.pinchStartDistance;\n var isAllowed = isInitialized && !disabled && pinchStartDistance;\n if (!isAllowed)\n return false;\n return true;\n};\nvar calculateTouchMidPoint = function (event, scale, contentComponent) {\n var contentRect = contentComponent.getBoundingClientRect();\n var touches = event.touches;\n var firstPointX = roundNumber(touches[0].clientX - contentRect.left, 5);\n var firstPointY = roundNumber(touches[0].clientY - contentRect.top, 5);\n var secondPointX = roundNumber(touches[1].clientX - contentRect.left, 5);\n var secondPointY = roundNumber(touches[1].clientY - contentRect.top, 5);\n return {\n x: (firstPointX + secondPointX) / 2 / scale,\n y: (firstPointY + secondPointY) / 2 / scale,\n };\n};\nvar getTouchDistance = function (event) {\n return Math.sqrt(Math.pow((event.touches[0].pageX - event.touches[1].pageX), 2) +\n Math.pow((event.touches[0].pageY - event.touches[1].pageY), 2));\n};\nvar calculatePinchZoom = function (contextInstance, currentDistance) {\n var pinchStartScale = contextInstance.pinchStartScale, pinchStartDistance = contextInstance.pinchStartDistance, setup = contextInstance.setup;\n var maxScale = setup.maxScale, minScale = setup.minScale, zoomAnimation = setup.zoomAnimation, disablePadding = setup.disablePadding;\n var size = zoomAnimation.size, disabled = zoomAnimation.disabled;\n if (!pinchStartScale || pinchStartDistance === null || !currentDistance) {\n throw new Error(\"Pinch touches distance was not provided\");\n }\n if (currentDistance < 0) {\n return contextInstance.transformState.scale;\n }\n var touchProportion = currentDistance / pinchStartDistance;\n var scaleDifference = touchProportion * pinchStartScale;\n return checkZoomBounds(roundNumber(scaleDifference, 2), minScale, maxScale, size, !disabled && !disablePadding);\n};\n\nvar wheelStopEventTime = 160;\nvar wheelAnimationTime = 100;\nvar handleWheelStart = function (contextInstance, event) {\n var _a = contextInstance.props, onWheelStart = _a.onWheelStart, onZoomStart = _a.onZoomStart;\n if (!contextInstance.wheelStopEventTimer) {\n handleCancelAnimation(contextInstance);\n handleCallback(getContext(contextInstance), event, onWheelStart);\n handleCallback(getContext(contextInstance), event, onZoomStart);\n }\n};\nvar handleWheelZoom = function (contextInstance, event) {\n var _a = contextInstance.props, onWheel = _a.onWheel, onZoom = _a.onZoom;\n var contentComponent = contextInstance.contentComponent, setup = contextInstance.setup, transformState = contextInstance.transformState;\n var scale = transformState.scale;\n var limitToBounds = setup.limitToBounds, centerZoomedOut = setup.centerZoomedOut, zoomAnimation = setup.zoomAnimation, wheel = setup.wheel, disablePadding = setup.disablePadding, smooth = setup.smooth;\n var size = zoomAnimation.size, disabled = zoomAnimation.disabled;\n var step = wheel.step, smoothStep = wheel.smoothStep;\n if (!contentComponent) {\n throw new Error(\"Component not mounted\");\n }\n event.preventDefault();\n event.stopPropagation();\n var delta = getDelta(event, null);\n var zoomStep = smooth ? smoothStep * Math.abs(event.deltaY) : step;\n var newScale = handleCalculateWheelZoom(contextInstance, delta, zoomStep, !event.ctrlKey);\n // if scale not change\n if (scale === newScale)\n return;\n var bounds = handleCalculateBounds(contextInstance, newScale);\n var mousePosition = getMousePosition(event, contentComponent, scale);\n var isPaddingDisabled = disabled || size === 0 || centerZoomedOut || disablePadding;\n var isLimitedToBounds = limitToBounds && isPaddingDisabled;\n var _b = handleCalculateZoomPositions(contextInstance, mousePosition.x, mousePosition.y, newScale, bounds, isLimitedToBounds), x = _b.x, y = _b.y;\n contextInstance.previousWheelEvent = event;\n contextInstance.setTransformState(newScale, x, y);\n handleCallback(getContext(contextInstance), event, onWheel);\n handleCallback(getContext(contextInstance), event, onZoom);\n};\nvar handleWheelStop = function (contextInstance, event) {\n var _a = contextInstance.props, onWheelStop = _a.onWheelStop, onZoomStop = _a.onZoomStop;\n // fire animation\n cancelTimeout(contextInstance.wheelAnimationTimer);\n contextInstance.wheelAnimationTimer = setTimeout(function () {\n if (!contextInstance.mounted)\n return;\n handleAlignToScaleBounds(contextInstance, event.x, event.y);\n contextInstance.wheelAnimationTimer = null;\n }, wheelAnimationTime);\n // Wheel stop event\n var hasStoppedZooming = handleWheelZoomStop(contextInstance, event);\n if (hasStoppedZooming) {\n cancelTimeout(contextInstance.wheelStopEventTimer);\n contextInstance.wheelStopEventTimer = setTimeout(function () {\n if (!contextInstance.mounted)\n return;\n contextInstance.wheelStopEventTimer = null;\n handleCallback(getContext(contextInstance), event, onWheelStop);\n handleCallback(getContext(contextInstance), event, onZoomStop);\n }, wheelStopEventTime);\n }\n};\n\nvar getTouchCenter = function (event) {\n var totalX = 0;\n var totalY = 0;\n // Sum up the positions of all touches\n for (var i = 0; i < 2; i += 1) {\n totalX += event.touches[i].clientX;\n totalY += event.touches[i].clientY;\n }\n // Calculate the average position\n var x = totalX / 2;\n var y = totalY / 2;\n return { x: x, y: y };\n};\nvar handlePinchStart = function (contextInstance, event) {\n var distance = getTouchDistance(event);\n contextInstance.pinchStartDistance = distance;\n contextInstance.lastDistance = distance;\n contextInstance.pinchStartScale = contextInstance.transformState.scale;\n contextInstance.isPanning = false;\n var center = getTouchCenter(event);\n contextInstance.pinchLastCenterX = center.x;\n contextInstance.pinchLastCenterY = center.y;\n handleCancelAnimation(contextInstance);\n};\nvar handlePinchZoom = function (contextInstance, event) {\n var contentComponent = contextInstance.contentComponent, pinchStartDistance = contextInstance.pinchStartDistance, wrapperComponent = contextInstance.wrapperComponent;\n var scale = contextInstance.transformState.scale;\n var _a = contextInstance.setup, limitToBounds = _a.limitToBounds, centerZoomedOut = _a.centerZoomedOut, zoomAnimation = _a.zoomAnimation, alignmentAnimation = _a.alignmentAnimation;\n var disabled = zoomAnimation.disabled, size = zoomAnimation.size;\n // if one finger starts from outside of wrapper\n if (pinchStartDistance === null || !contentComponent)\n return;\n var midPoint = calculateTouchMidPoint(event, scale, contentComponent);\n // if touches goes off of the wrapper element\n if (!Number.isFinite(midPoint.x) || !Number.isFinite(midPoint.y))\n return;\n var currentDistance = getTouchDistance(event);\n var newScale = calculatePinchZoom(contextInstance, currentDistance);\n var center = getTouchCenter(event);\n // pan should be scale invariant.\n var panX = center.x - (contextInstance.pinchLastCenterX || 0);\n var panY = center.y - (contextInstance.pinchLastCenterY || 0);\n if (newScale === scale && panX === 0 && panY === 0)\n return;\n contextInstance.pinchLastCenterX = center.x;\n contextInstance.pinchLastCenterY = center.y;\n var bounds = handleCalculateBounds(contextInstance, newScale);\n var isPaddingDisabled = disabled || size === 0 || centerZoomedOut;\n var isLimitedToBounds = limitToBounds && isPaddingDisabled;\n var _b = handleCalculateZoomPositions(contextInstance, midPoint.x, midPoint.y, newScale, bounds, isLimitedToBounds), x = _b.x, y = _b.y;\n contextInstance.pinchMidpoint = midPoint;\n contextInstance.lastDistance = currentDistance;\n var sizeX = alignmentAnimation.sizeX, sizeY = alignmentAnimation.sizeY;\n var paddingValueX = getPaddingValue(contextInstance, sizeX);\n var paddingValueY = getPaddingValue(contextInstance, sizeY);\n var newPositionX = x + panX;\n var newPositionY = y + panY;\n var _c = getMouseBoundedPosition(newPositionX, newPositionY, bounds, limitToBounds, paddingValueX, paddingValueY, wrapperComponent), finalX = _c.x, finalY = _c.y;\n contextInstance.setTransformState(newScale, finalX, finalY);\n};\nvar handlePinchStop = function (contextInstance) {\n var pinchMidpoint = contextInstance.pinchMidpoint;\n contextInstance.velocity = null;\n contextInstance.lastDistance = null;\n contextInstance.pinchMidpoint = null;\n contextInstance.pinchStartScale = null;\n contextInstance.pinchStartDistance = null;\n handleAlignToScaleBounds(contextInstance, pinchMidpoint === null || pinchMidpoint === void 0 ? void 0 : pinchMidpoint.x, pinchMidpoint === null || pinchMidpoint === void 0 ? void 0 : pinchMidpoint.y);\n};\n\nvar handleDoubleClickStop = function (contextInstance, event) {\n var onZoomStop = contextInstance.props.onZoomStop;\n var animationTime = contextInstance.setup.doubleClick.animationTime;\n cancelTimeout(contextInstance.doubleClickStopEventTimer);\n contextInstance.doubleClickStopEventTimer = setTimeout(function () {\n contextInstance.doubleClickStopEventTimer = null;\n handleCallback(getContext(contextInstance), event, onZoomStop);\n }, animationTime);\n};\nvar handleDoubleClickResetMode = function (contextInstance, event) {\n var _a = contextInstance.props, onZoomStart = _a.onZoomStart, onZoom = _a.onZoom;\n var _b = contextInstance.setup.doubleClick, animationTime = _b.animationTime, animationType = _b.animationType;\n handleCallback(getContext(contextInstance), event, onZoomStart);\n resetTransformations(contextInstance, animationTime, animationType, function () {\n return handleCallback(getContext(contextInstance), event, onZoom);\n });\n handleDoubleClickStop(contextInstance, event);\n};\nfunction getDoubleClickScale(mode, scale) {\n if (mode === \"toggle\") {\n return scale === 1 ? 1 : -1;\n }\n return mode === \"zoomOut\" ? -1 : 1;\n}\nfunction handleDoubleClick(contextInstance, event) {\n var setup = contextInstance.setup, doubleClickStopEventTimer = contextInstance.doubleClickStopEventTimer, transformState = contextInstance.transformState, contentComponent = contextInstance.contentComponent;\n var scale = transformState.scale;\n var _a = contextInstance.props, onZoomStart = _a.onZoomStart, onZoom = _a.onZoom;\n var _b = setup.doubleClick, disabled = _b.disabled, mode = _b.mode, step = _b.step, animationTime = _b.animationTime, animationType = _b.animationType;\n if (disabled)\n return;\n if (doubleClickStopEventTimer)\n return;\n if (mode === \"reset\") {\n return handleDoubleClickResetMode(contextInstance, event);\n }\n if (!contentComponent)\n return console.error(\"No ContentComponent found\");\n var delta = getDoubleClickScale(mode, contextInstance.transformState.scale);\n var newScale = handleCalculateButtonZoom(contextInstance, delta, step);\n // stop execution when scale didn't change\n if (scale === newScale)\n return;\n handleCallback(getContext(contextInstance), event, onZoomStart);\n var mousePosition = getMousePosition(event, contentComponent, scale);\n var targetState = handleZoomToPoint(contextInstance, newScale, mousePosition.x, mousePosition.y);\n if (!targetState) {\n return console.error(\"Error during zoom event. New transformation state was not calculated.\");\n }\n handleCallback(getContext(contextInstance), event, onZoom);\n animate(contextInstance, targetState, animationTime, animationType);\n handleDoubleClickStop(contextInstance, event);\n}\nvar isDoubleClickAllowed = function (contextInstance, event) {\n var isInitialized = contextInstance.isInitialized, setup = contextInstance.setup, wrapperComponent = contextInstance.wrapperComponent;\n var _a = setup.doubleClick, disabled = _a.disabled, excluded = _a.excluded;\n var target = event.target;\n var isWrapperChild = wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.contains(target);\n var isAllowed = isInitialized && target && isWrapperChild && !disabled;\n if (!isAllowed)\n return false;\n var isExcluded = isExcludedNode(target, excluded);\n if (isExcluded)\n return false;\n return true;\n};\n\nvar ZoomPanPinch = /** @class */ (function () {\n function ZoomPanPinch(props) {\n var _this = this;\n this.mounted = true;\n this.pinchLastCenterX = null;\n this.pinchLastCenterY = null;\n this.onChangeCallbacks = new Set();\n this.onInitCallbacks = new Set();\n // Components\n this.wrapperComponent = null;\n this.contentComponent = null;\n // Initialization\n this.isInitialized = false;\n this.bounds = null;\n // wheel helpers\n this.previousWheelEvent = null;\n this.wheelStopEventTimer = null;\n this.wheelAnimationTimer = null;\n // panning helpers\n this.isPanning = false;\n this.isWheelPanning = false;\n this.startCoords = null;\n this.lastTouch = null;\n // pinch helpers\n this.distance = null;\n this.lastDistance = null;\n this.pinchStartDistance = null;\n this.pinchStartScale = null;\n this.pinchMidpoint = null;\n // double click helpers\n this.doubleClickStopEventTimer = null;\n // velocity helpers\n this.velocity = null;\n this.velocityTime = null;\n this.lastMousePosition = null;\n // animations helpers\n this.animate = false;\n this.animation = null;\n this.maxBounds = null;\n // key press\n this.pressedKeys = {};\n this.mount = function () {\n _this.initializeWindowEvents();\n };\n this.unmount = function () {\n _this.cleanupWindowEvents();\n };\n this.update = function (newProps) {\n _this.props = newProps;\n handleCalculateBounds(_this, _this.transformState.scale);\n _this.setup = createSetup(newProps);\n };\n this.initializeWindowEvents = function () {\n var _a, _b;\n var passive = makePassiveEventOption();\n var currentDocument = (_a = _this.wrapperComponent) === null || _a === void 0 ? void 0 : _a.ownerDocument;\n var currentWindow = currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.defaultView;\n (_b = _this.wrapperComponent) === null || _b === void 0 ? void 0 : _b.addEventListener(\"wheel\", _this.onWheelPanning, passive);\n // Panning on window to allow panning when mouse is out of component wrapper\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"mousedown\", _this.onPanningStart, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"mousemove\", _this.onPanning, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"mouseup\", _this.onPanningStop, passive);\n currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.addEventListener(\"mouseleave\", _this.clearPanning, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"keyup\", _this.setKeyUnPressed, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"keydown\", _this.setKeyPressed, passive);\n };\n this.cleanupWindowEvents = function () {\n var _a, _b;\n var passive = makePassiveEventOption();\n var currentDocument = (_a = _this.wrapperComponent) === null || _a === void 0 ? void 0 : _a.ownerDocument;\n var currentWindow = currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.defaultView;\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"mousedown\", _this.onPanningStart, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"mousemove\", _this.onPanning, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"mouseup\", _this.onPanningStop, passive);\n currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.removeEventListener(\"mouseleave\", _this.clearPanning, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"keyup\", _this.setKeyUnPressed, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"keydown\", _this.setKeyPressed, passive);\n document.removeEventListener(\"mouseleave\", _this.clearPanning, passive);\n handleCancelAnimation(_this);\n (_b = _this.observer) === null || _b === void 0 ? void 0 : _b.disconnect();\n };\n this.handleInitializeWrapperEvents = function (wrapper) {\n // Zooming events on wrapper\n var passive = makePassiveEventOption();\n wrapper.addEventListener(\"wheel\", _this.onWheelZoom, passive);\n wrapper.addEventListener(\"dblclick\", _this.onDoubleClick, passive);\n wrapper.addEventListener(\"touchstart\", _this.onTouchPanningStart, passive);\n wrapper.addEventListener(\"touchmove\", _this.onTouchPanning, passive);\n wrapper.addEventListener(\"touchend\", _this.onTouchPanningStop, passive);\n };\n this.handleInitialize = function (wrapper, contentComponent) {\n var isCentered = false;\n var centerOnInit = _this.setup.centerOnInit;\n var hasTarget = function (entries, target) {\n // eslint-disable-next-line no-restricted-syntax\n for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n var entry = entries_1[_i];\n if (entry.target === target) {\n return true;\n }\n }\n return false;\n };\n _this.applyTransformation();\n _this.onInitCallbacks.forEach(function (callback) {\n callback(getContext(_this));\n });\n _this.observer = new ResizeObserver(function (entries) {\n if (hasTarget(entries, wrapper) || hasTarget(entries, contentComponent)) {\n if (centerOnInit && !isCentered) {\n var currentWidth = contentComponent.offsetWidth;\n var currentHeight = contentComponent.offsetHeight;\n if (currentWidth > 0 || currentHeight > 0) {\n isCentered = true;\n _this.setCenter();\n }\n }\n else {\n handleCancelAnimation(_this);\n handleCalculateBounds(_this, _this.transformState.scale);\n handleAlignToBounds(_this, 0);\n }\n }\n });\n // Start observing the target node for configured mutations\n _this.observer.observe(wrapper);\n _this.observer.observe(contentComponent);\n };\n /// ///////\n // Zoom\n /// ///////\n this.onWheelZoom = function (event) {\n var disabled = _this.setup.disabled;\n if (disabled)\n return;\n var isAllowed = isWheelAllowed(_this, event);\n if (!isAllowed)\n return;\n var keysPressed = _this.isPressingKeys(_this.setup.wheel.activationKeys);\n if (!keysPressed)\n return;\n handleWheelStart(_this, event);\n handleWheelZoom(_this, event);\n handleWheelStop(_this, event);\n };\n /// ///////\n // Pan\n /// ///////\n this.onWheelPanning = function (event) {\n var _a = _this.setup, disabled = _a.disabled, wheel = _a.wheel, panning = _a.panning;\n if (!_this.wrapperComponent ||\n !_this.contentComponent ||\n disabled ||\n !wheel.wheelDisabled ||\n panning.disabled ||\n !panning.wheelPanning ||\n event.ctrlKey) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n var _b = _this.transformState, positionX = _b.positionX, positionY = _b.positionY;\n var mouseX = positionX - event.deltaX;\n var mouseY = positionY - event.deltaY;\n var newPositionX = panning.lockAxisX ? positionX : mouseX;\n var newPositionY = panning.lockAxisY ? positionY : mouseY;\n var _c = _this.setup.alignmentAnimation, sizeX = _c.sizeX, sizeY = _c.sizeY;\n var paddingValueX = getPaddingValue(_this, sizeX);\n var paddingValueY = getPaddingValue(_this, sizeY);\n if (newPositionX === positionX && newPositionY === positionY)\n return;\n handleNewPosition(_this, newPositionX, newPositionY, paddingValueX, paddingValueY);\n };\n this.onPanningStart = function (event) {\n var disabled = _this.setup.disabled;\n var onPanningStart = _this.props.onPanningStart;\n if (disabled)\n return;\n var isAllowed = isPanningStartAllowed(_this, event);\n if (!isAllowed)\n return;\n var keysPressed = _this.isPressingKeys(_this.setup.panning.activationKeys);\n if (!keysPressed)\n return;\n if (event.button === 0 && !_this.setup.panning.allowLeftClickPan)\n return;\n if (event.button === 1 && !_this.setup.panning.allowMiddleClickPan)\n return;\n if (event.button === 2 && !_this.setup.panning.allowRightClickPan)\n return;\n event.preventDefault();\n event.stopPropagation();\n handleCancelAnimation(_this);\n handlePanningStart(_this, event);\n handleCallback(getContext(_this), event, onPanningStart);\n };\n this.onPanning = function (event) {\n var disabled = _this.setup.disabled;\n var onPanning = _this.props.onPanning;\n if (disabled)\n return;\n var isAllowed = isPanningAllowed(_this);\n if (!isAllowed)\n return;\n var keysPressed = _this.isPressingKeys(_this.setup.panning.activationKeys);\n if (!keysPressed)\n return;\n event.preventDefault();\n event.stopPropagation();\n handlePanning(_this, event.clientX, event.clientY);\n handleCallback(getContext(_this), event, onPanning);\n };\n this.onPanningStop = function (event) {\n var onPanningStop = _this.props.onPanningStop;\n if (_this.isPanning) {\n handlePanningEnd(_this);\n handleCallback(getContext(_this), event, onPanningStop);\n }\n };\n /// ///////\n // Pinch\n /// ///////\n this.onPinchStart = function (event) {\n var disabled = _this.setup.disabled;\n var _a = _this.props, onPinchingStart = _a.onPinchingStart, onZoomStart = _a.onZoomStart;\n if (disabled)\n return;\n var isAllowed = isPinchStartAllowed(_this, event);\n if (!isAllowed)\n return;\n handlePinchStart(_this, event);\n handleCancelAnimation(_this);\n handleCallback(getContext(_this), event, onPinchingStart);\n handleCallback(getContext(_this), event, onZoomStart);\n };\n this.onPinch = function (event) {\n var disabled = _this.setup.disabled;\n var _a = _this.props, onPinching = _a.onPinching, onZoom = _a.onZoom;\n if (disabled)\n return;\n var isAllowed = isPinchAllowed(_this);\n if (!isAllowed)\n return;\n event.preventDefault();\n event.stopPropagation();\n handlePinchZoom(_this, event);\n handleCallback(getContext(_this), event, onPinching);\n handleCallback(getContext(_this), event, onZoom);\n };\n this.onPinchStop = function (event) {\n var _a = _this.props, onPinchingStop = _a.onPinchingStop, onZoomStop = _a.onZoomStop;\n if (_this.pinchStartScale) {\n handlePinchStop(_this);\n handleCallback(getContext(_this), event, onPinchingStop);\n handleCallback(getContext(_this), event, onZoomStop);\n }\n };\n /// ///////\n // Touch\n /// ///////\n this.onTouchPanningStart = function (event) {\n var disabled = _this.setup.disabled;\n var onPanningStart = _this.props.onPanningStart;\n if (disabled)\n return;\n var isAllowed = isPanningStartAllowed(_this, event);\n if (!isAllowed)\n return;\n var isDoubleTap = _this.lastTouch &&\n +new Date() - _this.lastTouch < 200 &&\n event.touches.length === 1;\n if (!isDoubleTap) {\n _this.lastTouch = +new Date();\n handleCancelAnimation(_this);\n var touches = event.touches;\n var isPanningAction = touches.length === 1;\n var isPinchAction = touches.length === 2;\n if (isPanningAction) {\n handleCancelAnimation(_this);\n handlePanningStart(_this, event);\n handleCallback(getContext(_this), event, onPanningStart);\n }\n if (isPinchAction) {\n _this.onPinchStart(event);\n }\n }\n };\n this.onTouchPanning = function (event) {\n var disabled = _this.setup.disabled;\n var onPanning = _this.props.onPanning;\n if (_this.isPanning && event.touches.length === 1) {\n if (disabled)\n return;\n var isAllowed = isPanningAllowed(_this);\n if (!isAllowed)\n return;\n event.preventDefault();\n event.stopPropagation();\n var touch = event.touches[0];\n handlePanning(_this, touch.clientX, touch.clientY);\n handleCallback(getContext(_this), event, onPanning);\n }\n else if (event.touches.length > 1) {\n _this.onPinch(event);\n }\n };\n this.onTouchPanningStop = function (event) {\n _this.onPanningStop(event);\n _this.onPinchStop(event);\n };\n /// ///////\n // Double Click\n /// ///////\n this.onDoubleClick = function (event) {\n var disabled = _this.setup.disabled;\n if (disabled)\n return;\n var isAllowed = isDoubleClickAllowed(_this, event);\n if (!isAllowed)\n return;\n handleDoubleClick(_this, event);\n };\n /// ///////\n // Helpers\n /// ///////\n this.clearPanning = function (event) {\n if (_this.isPanning) {\n _this.onPanningStop(event);\n }\n };\n this.setKeyPressed = function (e) {\n _this.pressedKeys[e.key] = true;\n };\n this.setKeyUnPressed = function (e) {\n _this.pressedKeys[e.key] = false;\n };\n this.isPressingKeys = function (keys) {\n if (!keys.length) {\n return true;\n }\n return Boolean(keys.find(function (key) { return _this.pressedKeys[key]; }));\n };\n this.setTransformState = function (scale, positionX, positionY) {\n var onTransformed = _this.props.onTransformed;\n if (!Number.isNaN(scale) &&\n !Number.isNaN(positionX) &&\n !Number.isNaN(positionY)) {\n if (scale !== _this.transformState.scale) {\n _this.transformState.previousScale = _this.transformState.scale;\n _this.transformState.scale = scale;\n }\n _this.transformState.positionX = positionX;\n _this.transformState.positionY = positionY;\n _this.applyTransformation();\n var ctx_1 = getContext(_this);\n _this.onChangeCallbacks.forEach(function (callback) { return callback(ctx_1); });\n handleCallback(ctx_1, { scale: scale, positionX: positionX, positionY: positionY }, onTransformed);\n }\n else {\n console.error(\"Detected NaN set state values\");\n }\n };\n this.setCenter = function () {\n if (_this.wrapperComponent && _this.contentComponent) {\n var targetState = getCenterPosition(_this.transformState.scale, _this.wrapperComponent, _this.contentComponent);\n _this.setTransformState(targetState.scale, targetState.positionX, targetState.positionY);\n }\n };\n this.handleTransformStyles = function (x, y, scale) {\n if (_this.props.customTransform) {\n return _this.props.customTransform(x, y, scale);\n }\n return getTransformStyles(x, y, scale);\n };\n this.applyTransformation = function () {\n if (!_this.mounted || !_this.contentComponent)\n return;\n var _a = _this.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n var transform = _this.handleTransformStyles(positionX, positionY, scale);\n _this.contentComponent.style.transform = transform;\n };\n this.getContext = function () {\n return getContext(_this);\n };\n /**\n * Hooks\n */\n this.onChange = function (callback) {\n if (!_this.onChangeCallbacks.has(callback)) {\n _this.onChangeCallbacks.add(callback);\n }\n return function () {\n _this.onChangeCallbacks.delete(callback);\n };\n };\n this.onInit = function (callback) {\n if (!_this.onInitCallbacks.has(callback)) {\n _this.onInitCallbacks.add(callback);\n }\n return function () {\n _this.onInitCallbacks.delete(callback);\n };\n };\n /**\n * Initialization\n */\n this.init = function (wrapperComponent, contentComponent) {\n _this.cleanupWindowEvents();\n _this.wrapperComponent = wrapperComponent;\n _this.contentComponent = contentComponent;\n handleCalculateBounds(_this, _this.transformState.scale);\n _this.handleInitializeWrapperEvents(wrapperComponent);\n _this.handleInitialize(wrapperComponent, contentComponent);\n _this.initializeWindowEvents();\n _this.isInitialized = true;\n var ctx = getContext(_this);\n handleCallback(ctx, undefined, _this.props.onInit);\n };\n this.props = props;\n this.setup = createSetup(this.props);\n this.transformState = createState(this.props);\n }\n return ZoomPanPinch;\n}());\n\nvar Context = React.createContext(null);\nvar getContent = function (children, ctx) {\n if (typeof children === \"function\") {\n return children(ctx);\n }\n return children;\n};\nvar TransformWrapper = React.forwardRef(function (props, ref) {\n var instance = useRef(new ZoomPanPinch(props)).current;\n var content = getContent(props.children, getControls(instance));\n useImperativeHandle(ref, function () { return getControls(instance); }, [instance]);\n useEffect(function () {\n instance.update(props);\n }, [instance, props]);\n return React.createElement(Context.Provider, { value: instance }, content);\n});\n\nvar KeepScale = React.forwardRef(function (props, ref) {\n var localRef = useRef(null);\n var instance = useContext(Context);\n useEffect(function () {\n return instance.onChange(function (ctx) {\n if (localRef.current) {\n var positionX = 0;\n var positionY = 0;\n localRef.current.style.transform = instance.handleTransformStyles(positionX, positionY, 1 / ctx.instance.transformState.scale);\n }\n });\n }, [instance]);\n return React.createElement(\"div\", __assign({}, props, { ref: mergeRefs([localRef, ref]) }));\n});\n\nvar initialElementRect = {\n width: 0,\n height: 0,\n y: 0,\n x: 0,\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n};\nvar useResize = function (ref, onResize, dependencies) {\n var resizeObserverRef = useRef();\n var rectRef = useRef(initialElementRect);\n var didUnmount = useRef(false);\n useLayoutEffect(function () {\n var _a;\n didUnmount.current = false;\n if (!(\"ResizeObserver\" in window)) {\n return;\n }\n if (ref) {\n resizeObserverRef.current = new ResizeObserver(function (entries) {\n var newSize = ref.getBoundingClientRect();\n if (!Array.isArray(entries) ||\n !entries.length ||\n didUnmount.current ||\n (newSize.width === rectRef.current.width &&\n newSize.height === rectRef.current.height))\n return;\n onResize(newSize, ref);\n rectRef.current = newSize;\n });\n (_a = resizeObserverRef.current) === null || _a === void 0 ? void 0 : _a.observe(ref);\n }\n return function () {\n var _a;\n didUnmount.current = true;\n if (ref) {\n (_a = resizeObserverRef.current) === null || _a === void 0 ? void 0 : _a.unobserve(ref);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, __spreadArray([onResize, ref], dependencies, true));\n};\n\nvar previewStyles = {\n position: \"absolute\",\n zIndex: 2,\n top: \"0px\",\n left: \"0px\",\n boxSizing: \"border-box\",\n border: \"3px solid red\",\n transformOrigin: \"0% 0%\",\n boxShadow: \"rgba(0,0,0,0.2) 0 0 0 10000000px\",\n};\nvar MiniMap = function (_a) {\n var _b = _a.width, width = _b === void 0 ? 200 : _b, _c = _a.height, height = _c === void 0 ? 200 : _c, _d = _a.borderColor, borderColor = _d === void 0 ? \"red\" : _d, children = _a.children, rest = __rest(_a, [\"width\", \"height\", \"borderColor\", \"children\"]);\n var _e = useState(false), initialized = _e[0], setInitialized = _e[1];\n var instance = useTransformContext();\n var miniMapInstance = useRef(null);\n var mainRef = useRef(null);\n var wrapperRef = useRef(null);\n var previewRef = useRef(null);\n var getViewportSize = useCallback(function () {\n if (instance.wrapperComponent) {\n var rect = instance.wrapperComponent.getBoundingClientRect();\n return {\n width: rect.width,\n height: rect.height,\n };\n }\n return {\n width: 0,\n height: 0,\n };\n }, [instance.wrapperComponent]);\n var getContentSize = useCallback(function () {\n if (instance.contentComponent) {\n var rect = instance.contentComponent.getBoundingClientRect();\n return {\n width: rect.width / instance.transformState.scale,\n height: rect.height / instance.transformState.scale,\n };\n }\n return {\n width: 0,\n height: 0,\n };\n }, [instance.contentComponent, instance.transformState.scale]);\n var computeMiniMapScale = useCallback(function () {\n var contentSize = getContentSize();\n var scaleX = width / contentSize.width;\n var scaleY = height / contentSize.height;\n var scale = scaleY > scaleX ? scaleX : scaleY;\n return scale;\n }, [getContentSize, height, width]);\n var computeMiniMapSize = function () {\n var contentSize = getContentSize();\n var scaleX = width / contentSize.width;\n var scaleY = height / contentSize.height;\n if (scaleY > scaleX) {\n return { width: width, height: contentSize.height * scaleX };\n }\n return { width: contentSize.width * scaleY, height: height };\n };\n var computeMiniMapStyle = function () {\n var scale = computeMiniMapScale();\n var style = {\n transform: \"scale(\".concat(scale || 1, \")\"),\n transformOrigin: \"0% 0%\",\n position: \"absolute\",\n boxSizing: \"border-box\",\n zIndex: 1,\n overflow: \"hidden\",\n };\n Object.keys(style).forEach(function (key) {\n if (wrapperRef.current) {\n wrapperRef.current.style[key] = style[key];\n }\n });\n };\n var transformMiniMap = function () {\n computeMiniMapStyle();\n var miniSize = computeMiniMapSize();\n var wrapSize = getContentSize();\n if (wrapperRef.current) {\n wrapperRef.current.style.width = \"\".concat(wrapSize.width, \"px\");\n wrapperRef.current.style.height = \"\".concat(wrapSize.height, \"px\");\n }\n if (mainRef.current) {\n mainRef.current.style.width = \"\".concat(miniSize.width, \"px\");\n mainRef.current.style.height = \"\".concat(miniSize.height, \"px\");\n }\n if (previewRef.current) {\n var size = getViewportSize();\n var scale = computeMiniMapScale();\n var previewScale = scale * (1 / instance.transformState.scale);\n var transform = instance.handleTransformStyles(-instance.transformState.positionX * previewScale, -instance.transformState.positionY * previewScale, 1);\n previewRef.current.style.transform = transform;\n previewRef.current.style.width = \"\".concat(size.width * previewScale, \"px\");\n previewRef.current.style.height = \"\".concat(size.height * previewScale, \"px\");\n }\n };\n var initialize = function () {\n transformMiniMap();\n };\n useTransformEffect(function () {\n transformMiniMap();\n });\n useTransformInit(function () {\n initialize();\n setInitialized(true);\n });\n useResize(instance.contentComponent, initialize, [initialized]);\n useEffect(function () {\n return instance.onChange(function (zpp) {\n var scale = computeMiniMapScale();\n if (miniMapInstance.current) {\n miniMapInstance.current.instance.transformState.scale =\n zpp.instance.transformState.scale;\n miniMapInstance.current.instance.transformState.positionX =\n zpp.instance.transformState.positionX * scale;\n miniMapInstance.current.instance.transformState.positionY =\n zpp.instance.transformState.positionY * scale;\n }\n });\n }, [computeMiniMapScale, instance, miniMapInstance]);\n var wrapperStyle = useMemo(function () {\n return {\n position: \"relative\",\n zIndex: 2,\n overflow: \"hidden\",\n };\n }, []);\n return (React.createElement(\"div\", __assign({}, rest, { ref: mainRef, style: wrapperStyle, className: \"rzpp-mini-map \".concat(rest.className || \"\") }),\n React.createElement(\"div\", __assign({}, rest, { ref: wrapperRef, className: \"rzpp-wrapper\" }), children),\n React.createElement(\"div\", { className: \"rzpp-preview\", ref: previewRef, style: __assign(__assign({}, previewStyles), { borderColor: borderColor }) })));\n};\n\nfunction styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar css_248z = \".transform-component-module_wrapper__SPB86 {\\n position: relative;\\n width: -moz-fit-content;\\n width: fit-content;\\n height: -moz-fit-content;\\n height: fit-content;\\n overflow: hidden;\\n -webkit-touch-callout: none; /* iOS Safari */\\n -webkit-user-select: none; /* Safari */\\n -khtml-user-select: none; /* Konqueror HTML */\\n -moz-user-select: none; /* Firefox */\\n -ms-user-select: none; /* Internet Explorer/Edge */\\n user-select: none;\\n margin: 0;\\n padding: 0;\\n transform: translate3d(0, 0, 0);\\n}\\n.transform-component-module_content__FBWxo {\\n display: flex;\\n flex-wrap: wrap;\\n width: -moz-fit-content;\\n width: fit-content;\\n height: -moz-fit-content;\\n height: fit-content;\\n margin: 0;\\n padding: 0;\\n transform-origin: 0% 0%;\\n}\\n.transform-component-module_content__FBWxo img {\\n pointer-events: none;\\n}\\n\";\nvar styles = {\"wrapper\":\"transform-component-module_wrapper__SPB86\",\"content\":\"transform-component-module_content__FBWxo\"};\nstyleInject(css_248z);\n\nvar TransformComponent = function (_a) {\n var children = _a.children, _b = _a.wrapperClass, wrapperClass = _b === void 0 ? \"\" : _b, _c = _a.contentClass, contentClass = _c === void 0 ? \"\" : _c, wrapperStyle = _a.wrapperStyle, contentStyle = _a.contentStyle, _d = _a.wrapperProps, wrapperProps = _d === void 0 ? {} : _d, _e = _a.contentProps, contentProps = _e === void 0 ? {} : _e;\n var _f = useContext(Context), init = _f.init, cleanupWindowEvents = _f.cleanupWindowEvents;\n var wrapperRef = useRef(null);\n var contentRef = useRef(null);\n useEffect(function () {\n var wrapper = wrapperRef.current;\n var content = contentRef.current;\n if (wrapper !== null && content !== null && init) {\n init === null || init === void 0 ? void 0 : init(wrapper, content);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return function () {\n cleanupWindowEvents === null || cleanupWindowEvents === void 0 ? void 0 : cleanupWindowEvents();\n };\n }, []);\n return (React.createElement(\"div\", __assign({}, wrapperProps, { ref: wrapperRef, className: \"\".concat(baseClasses.wrapperClass, \" \").concat(styles.wrapper, \" \").concat(wrapperClass), style: wrapperStyle }),\n React.createElement(\"div\", __assign({}, contentProps, { ref: contentRef, className: \"\".concat(baseClasses.contentClass, \" \").concat(styles.content, \" \").concat(contentClass), style: contentStyle }), children)));\n};\n\nvar useTransformContext = function () {\n var libraryContext = useContext(Context);\n if (!libraryContext) {\n throw new Error(\"Transform context must be placed inside TransformWrapper\");\n }\n return libraryContext;\n};\n\nvar useControls = function () {\n var libraryContext = useTransformContext();\n return getControls(libraryContext);\n};\n\nvar useTransformInit = function (callback) {\n var libraryContext = useTransformContext();\n useEffect(function () {\n var unmountCallback;\n var unmount;\n if (libraryContext.contentComponent && libraryContext.wrapperComponent) {\n unmountCallback = callback(getState(libraryContext));\n }\n else {\n unmount = libraryContext.onInit(function (ref) {\n unmountCallback = callback(getState(ref.instance));\n });\n }\n return function () {\n unmount === null || unmount === void 0 ? void 0 : unmount();\n unmountCallback === null || unmountCallback === void 0 ? void 0 : unmountCallback();\n };\n }, []);\n};\n\nvar useTransformEffect = function (callback) {\n var libraryContext = useTransformContext();\n useEffect(function () {\n var unmountCallback;\n var unmount = libraryContext.onChange(function (ref) {\n unmountCallback = callback(getState(ref.instance));\n });\n return function () {\n unmount();\n unmountCallback === null || unmountCallback === void 0 ? void 0 : unmountCallback();\n };\n }, [callback, libraryContext]);\n};\n\nfunction useTransformComponent(callback) {\n var libraryContext = useTransformContext();\n var _a = useState(callback(getState(libraryContext))), transformRender = _a[0], setTransformRender = _a[1];\n useEffect(function () {\n var mounted = true;\n var unmount = libraryContext.onChange(function (ref) {\n if (mounted) {\n setTransformRender(callback(getState(ref.instance)));\n }\n });\n return function () {\n unmount();\n mounted = false;\n };\n }, [callback, libraryContext]);\n return transformRender;\n}\n\nexport { Context, KeepScale, MiniMap, TransformComponent, TransformWrapper, getCenterPosition, getMatrixTransformStyles, getTransformStyles, useControls, useTransformComponent, useTransformContext, useTransformEffect, useTransformInit };\n//# sourceMappingURL=index.esm.js.map\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n});\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","\"use client\";\n\n// src/radio-group.tsx\nimport * as React2 from \"react\";\nimport { composeEventHandlers as composeEventHandlers2 } from \"@radix-ui/primitive\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { Primitive as Primitive2 } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\n\n// src/radio.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar RADIO_NAME = \"Radio\";\nvar [createRadioContext, createRadioScope] = createContextScope(RADIO_NAME);\nvar [RadioProvider, useRadioContext] = createRadioContext(RADIO_NAME);\nvar Radio = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRadio,\n name,\n checked = false,\n required,\n disabled,\n value = \"on\",\n onCheck,\n form,\n ...radioProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n return /* @__PURE__ */ jsxs(RadioProvider, { scope: __scopeRadio, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"radio\",\n \"aria-checked\": checked,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...radioProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n if (!checked) onCheck?.();\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n RadioBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nRadio.displayName = RADIO_NAME;\nvar INDICATOR_NAME = \"RadioIndicator\";\nvar RadioIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeRadio, forceMount, ...indicatorProps } = props;\n const context = useRadioContext(INDICATOR_NAME, __scopeRadio);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.checked, children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...indicatorProps,\n ref: forwardedRef\n }\n ) });\n }\n);\nRadioIndicator.displayName = INDICATOR_NAME;\nvar BUBBLE_INPUT_NAME = \"RadioBubbleInput\";\nvar RadioBubbleInput = React.forwardRef(\n ({\n __scopeRadio,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"radio\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nRadioBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\n\n// src/radio-group.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nvar ARROW_KEYS = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"];\nvar RADIO_GROUP_NAME = \"RadioGroup\";\nvar [createRadioGroupContext, createRadioGroupScope] = createContextScope2(RADIO_GROUP_NAME, [\n createRovingFocusGroupScope,\n createRadioScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar useRadioScope = createRadioScope();\nvar [RadioGroupProvider, useRadioGroupContext] = createRadioGroupContext(RADIO_GROUP_NAME);\nvar RadioGroup = React2.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRadioGroup,\n name,\n defaultValue,\n value: valueProp,\n required = false,\n disabled = false,\n orientation,\n dir,\n loop = true,\n onValueChange,\n ...groupProps\n } = props;\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeRadioGroup);\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? null,\n onChange: onValueChange,\n caller: RADIO_GROUP_NAME\n });\n return /* @__PURE__ */ jsx2(\n RadioGroupProvider,\n {\n scope: __scopeRadioGroup,\n name,\n required,\n disabled,\n value,\n onValueChange: setValue,\n children: /* @__PURE__ */ jsx2(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation,\n dir: direction,\n loop,\n children: /* @__PURE__ */ jsx2(\n Primitive2.div,\n {\n role: \"radiogroup\",\n \"aria-required\": required,\n \"aria-orientation\": orientation,\n \"data-disabled\": disabled ? \"\" : void 0,\n dir: direction,\n ...groupProps,\n ref: forwardedRef\n }\n )\n }\n )\n }\n );\n }\n);\nRadioGroup.displayName = RADIO_GROUP_NAME;\nvar ITEM_NAME = \"RadioGroupItem\";\nvar RadioGroupItem = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeRadioGroup, disabled, ...itemProps } = props;\n const context = useRadioGroupContext(ITEM_NAME, __scopeRadioGroup);\n const isDisabled = context.disabled || disabled;\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeRadioGroup);\n const radioScope = useRadioScope(__scopeRadioGroup);\n const ref = React2.useRef(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref);\n const checked = context.value === itemProps.value;\n const isArrowKeyPressedRef = React2.useRef(false);\n React2.useEffect(() => {\n const handleKeyDown = (event) => {\n if (ARROW_KEYS.includes(event.key)) {\n isArrowKeyPressedRef.current = true;\n }\n };\n const handleKeyUp = () => isArrowKeyPressedRef.current = false;\n document.addEventListener(\"keydown\", handleKeyDown);\n document.addEventListener(\"keyup\", handleKeyUp);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.removeEventListener(\"keyup\", handleKeyUp);\n };\n }, []);\n return /* @__PURE__ */ jsx2(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !isDisabled,\n active: checked,\n children: /* @__PURE__ */ jsx2(\n Radio,\n {\n disabled: isDisabled,\n required: context.required,\n checked,\n ...radioScope,\n ...itemProps,\n name: context.name,\n ref: composedRefs,\n onCheck: () => context.onValueChange(itemProps.value),\n onKeyDown: composeEventHandlers2((event) => {\n if (event.key === \"Enter\") event.preventDefault();\n }),\n onFocus: composeEventHandlers2(itemProps.onFocus, () => {\n if (isArrowKeyPressedRef.current) ref.current?.click();\n })\n }\n )\n }\n );\n }\n);\nRadioGroupItem.displayName = ITEM_NAME;\nvar INDICATOR_NAME2 = \"RadioGroupIndicator\";\nvar RadioGroupIndicator = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeRadioGroup, ...indicatorProps } = props;\n const radioScope = useRadioScope(__scopeRadioGroup);\n return /* @__PURE__ */ jsx2(RadioIndicator, { ...radioScope, ...indicatorProps, ref: forwardedRef });\n }\n);\nRadioGroupIndicator.displayName = INDICATOR_NAME2;\nvar Root2 = RadioGroup;\nvar Item2 = RadioGroupItem;\nvar Indicator = RadioGroupIndicator;\nexport {\n Indicator,\n Item2 as Item,\n RadioGroup,\n RadioGroupIndicator,\n RadioGroupItem,\n Root2 as Root,\n createRadioGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { Circle } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return <RadioGroupPrimitive.Root className={cn(\"grid gap-2\", className)} {...props} ref={ref} />;\n});\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n});\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n","import { useState, useEffect } from 'react';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Textarea } from '@/components/ui/textarea';\nimport { Label } from '@/components/ui/label';\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { Upload, RefreshCw, GitBranch, Bookmark } from 'lucide-react';\nimport { supabase } from '@/integrations/supabase/client';\nimport { useAuth } from '@/hooks/useAuth';\n\ninterface Collection {\n id: string;\n name: string;\n slug: string;\n}\n\ninterface PublishDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onPublish: (option: 'overwrite' | 'new' | 'version' | 'add-to-post', title?: string, description?: string, parentId?: string, collectionIds?: string[]) => void;\n originalTitle: string;\n originalImageId?: string;\n isPublishing?: boolean;\n editingPostId?: string;\n}\n\nexport default function PublishDialog({\n isOpen,\n onClose,\n onPublish,\n originalTitle,\n originalImageId,\n isPublishing = false,\n editingPostId\n}: PublishDialogProps) {\n const { user } = useAuth();\n const [publishOption, setPublishOption] = useState<'overwrite' | 'new' | 'version' | 'add-to-post'>('new');\n const [title, setTitle] = useState(originalTitle);\n const [description, setDescription] = useState('');\n const [collections, setCollections] = useState<Collection[]>([]);\n const [selectedCollections, setSelectedCollections] = useState<string[]>([]);\n const [loadingCollections, setLoadingCollections] = useState(false);\n\n // Load user's collections when dialog opens\n useEffect(() => {\n if (isOpen && user) {\n loadCollections();\n // Default to \"add-to-post\" if editing a post\n if (editingPostId) {\n setPublishOption('add-to-post');\n } else {\n setPublishOption('new');\n }\n }\n }, [isOpen, user, editingPostId]);\n\n const loadCollections = async () => {\n if (!user) return;\n\n setLoadingCollections(true);\n try {\n const { data, error } = await supabase\n .from('collections')\n .select('id, name, slug')\n .eq('user_id', user.id)\n .order('name');\n\n if (error) throw error;\n setCollections(data || []);\n } catch (error) {\n console.error('Error loading collections:', error);\n } finally {\n setLoadingCollections(false);\n }\n };\n\n const toggleCollection = (collectionId: string) => {\n setSelectedCollections(prev =>\n prev.includes(collectionId)\n ? prev.filter(id => id !== collectionId)\n : [...prev, collectionId]\n );\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n onPublish(\n publishOption,\n title.trim() || undefined,\n description.trim() || undefined,\n originalImageId,\n selectedCollections.length > 0 ? selectedCollections : undefined\n );\n };\n\n const handleClose = () => {\n if (!isPublishing) {\n onClose();\n }\n };\n\n if (!isOpen) return null;\n\n return (\n <div className=\"fixed inset-0 bg-black/50 z-[10000] flex items-center justify-center p-4\">\n <div className=\"bg-background rounded-xl shadow-2xl max-w-md w-full max-h-[90vh] overflow-y-auto\">\n <div className=\"p-6\">\n <h2 className=\"text-xl font-semibold text-foreground mb-4\">\n Publish Generated Image\n </h2>\n\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div>\n <Label className=\"text-sm font-medium text-foreground mb-3 block\">\n Publishing Option\n </Label>\n <RadioGroup\n value={publishOption}\n onValueChange={(value) => setPublishOption(value as 'overwrite' | 'new' | 'version' | 'add-to-post')}\n className=\"space-y-3\"\n >\n <div className=\"flex items-center space-x-2 p-3 border rounded-lg hover:bg-muted/50 transition-colors\">\n <RadioGroupItem value=\"overwrite\" id=\"overwrite\" />\n <div className=\"flex-1\">\n <Label htmlFor=\"overwrite\" className=\"font-medium cursor-pointer\">\n <div className=\"flex items-center gap-2\">\n <RefreshCw className=\"h-4 w-4\" />\n Overwrite Original\n </div>\n </Label>\n <p className=\"text-sm text-muted-foreground mt-1\">\n Replace the original image with the generated version\n </p>\n </div>\n </div>\n\n <div className=\"flex items-center space-x-2 p-3 border rounded-lg hover:bg-muted/50 transition-colors\">\n <RadioGroupItem value=\"new\" id=\"new\" />\n <div className=\"flex-1\">\n <Label htmlFor=\"new\" className=\"font-medium cursor-pointer\">\n <div className=\"flex items-center gap-2\">\n <Upload className=\"h-4 w-4\" />\n Create New Post\n </div>\n </Label>\n <p className=\"text-sm text-muted-foreground mt-1\">\n Save as a new image in your gallery\n </p>\n </div>\n </div>\n\n {originalImageId && (\n <div className=\"flex items-center space-x-2 p-3 border rounded-lg hover:bg-muted/50 transition-colors\">\n <RadioGroupItem value=\"version\" id=\"version\" />\n <div className=\"flex-1\">\n <Label htmlFor=\"version\" className=\"font-medium cursor-pointer\">\n <div className=\"flex items-center gap-2\">\n <GitBranch className=\"h-4 w-4\" />\n Save as Version\n </div>\n </Label>\n <p className=\"text-sm text-muted-foreground mt-1\">\n Create a new version linked to the original image\n </p>\n </div>\n </div>\n )}\n </RadioGroup>\n </div>\n\n {(publishOption === 'new' || publishOption === 'version' || publishOption === 'add-to-post') && (\n <div className=\"space-y-4 pt-2\">\n <div>\n <Label htmlFor=\"title\" className=\"text-sm font-medium text-foreground\">\n Title <span className=\"text-muted-foreground\">(optional)</span>\n </Label>\n <Input\n id=\"title\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n placeholder=\"Enter a title...\"\n className=\"mt-1\"\n disabled={isPublishing}\n />\n </div>\n\n <div>\n <Label htmlFor=\"description\" className=\"text-sm font-medium text-foreground\">\n Description <span className=\"text-muted-foreground\">(optional)</span>\n </Label>\n <Textarea\n id=\"description\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"Add a description for your generated image...\"\n className=\"mt-1 resize-none\"\n rows={3}\n disabled={isPublishing}\n />\n </div>\n\n {/* Collections Selection */}\n {collections.length > 0 && (\n <div>\n <Label className=\"text-sm font-medium text-foreground mb-2 flex items-center gap-2\">\n <Bookmark className=\"h-4 w-4\" />\n Add to Collections <span className=\"text-muted-foreground\">(optional)</span>\n </Label>\n <div className=\"mt-2 space-y-2 max-h-32 overflow-y-auto border rounded-lg p-3\">\n {loadingCollections ? (\n <div className=\"text-sm text-muted-foreground text-center py-2\">\n Loading collections...\n </div>\n ) : (\n collections.map((collection) => (\n <div key={collection.id} className=\"flex items-center space-x-2\">\n <Checkbox\n id={`collection-${collection.id}`}\n checked={selectedCollections.includes(collection.id)}\n onCheckedChange={() => toggleCollection(collection.id)}\n disabled={isPublishing}\n />\n <label\n htmlFor={`collection-${collection.id}`}\n className=\"text-sm cursor-pointer flex-1\"\n >\n {collection.name}\n </label>\n </div>\n ))\n )}\n </div>\n {selectedCollections.length > 0 && (\n <p className=\"text-xs text-muted-foreground mt-2\">\n Will be added to {selectedCollections.length} collection{selectedCollections.length > 1 ? 's' : ''}\n </p>\n )}\n </div>\n )}\n </div>\n )}\n\n <div className=\"flex gap-3 pt-4\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleClose}\n className=\"flex-1\"\n disabled={isPublishing}\n >\n Cancel\n </Button>\n <Button\n type=\"submit\"\n className=\"flex-1\"\n disabled={isPublishing}\n >\n {isPublishing ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white border-t-transparent\"></div>\n Publishing...\n </div>\n ) : (\n <div className=\"flex items-center gap-2\">\n {publishOption === 'overwrite' && <RefreshCw className=\"h-4 w-4\" />}\n {publishOption === 'new' && <Upload className=\"h-4 w-4\" />}\n {publishOption === 'version' && <GitBranch className=\"h-4 w-4\" />}\n {publishOption === 'add-to-post' && <Bookmark className=\"h-4 w-4\" />}\n {publishOption === 'overwrite' ? 'Overwrite' :\n publishOption === 'version' ? 'Save Version' :\n publishOption === 'add-to-post' ? 'Add to Post' : 'Publish New'}\n </div>\n )}\n </Button>\n </div>\n </form>\n </div>\n </div>\n </div>\n );\n}","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nconst yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);\nfunction getSideAxis(placement) {\n return yAxisSides.has(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nconst invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);\n}\nconst tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);\nfunction isTableElement(element) {\n return tableElements.has(getNodeName(element));\n}\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(element) {\n return topLayerSelectors.some(selector => {\n try {\n return element.matches(selector);\n } catch (_e) {\n return false;\n }\n });\n}\nconst transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];\nconst willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];\nconst containValues = ['paint', 'layout', 'strict', 'content'];\nfunction isContainingBlock(elementOrCss) {\n const webkit = isWebKit();\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nconst lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);\nfunction isLastTraversableNode(node) {\n return lastTraversableNodeNames.has(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\nconst absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n resizeObserver.observe(floating);\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { computePosition, arrow as arrow$2, autoPlacement as autoPlacement$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar isClient = typeof document !== 'undefined';\n\nvar noop = function noop() {};\nvar index = isClient ? useLayoutEffect : noop;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (typeof a === 'function' && a.toString() === b.toString()) {\n return true;\n }\n let length;\n let i;\n let keys;\n if (a && b && typeof a === 'object') {\n if (Array.isArray(a)) {\n length = a.length;\n if (length !== b.length) return false;\n for (i = length; i-- !== 0;) {\n if (!deepEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) {\n return false;\n }\n for (i = length; i-- !== 0;) {\n if (!{}.hasOwnProperty.call(b, keys[i])) {\n return false;\n }\n }\n for (i = length; i-- !== 0;) {\n const key = keys[i];\n if (key === '_owner' && a.$$typeof) {\n continue;\n }\n if (!deepEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n const ref = React.useRef(value);\n index(() => {\n ref.current = value;\n });\n return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform,\n elements: {\n reference: externalReference,\n floating: externalFloating\n } = {},\n transform = true,\n whileElementsMounted,\n open\n } = options;\n const [data, setData] = React.useState({\n x: 0,\n y: 0,\n strategy,\n placement,\n middlewareData: {},\n isPositioned: false\n });\n const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n if (!deepEqual(latestMiddleware, middleware)) {\n setLatestMiddleware(middleware);\n }\n const [_reference, _setReference] = React.useState(null);\n const [_floating, _setFloating] = React.useState(null);\n const setReference = React.useCallback(node => {\n if (node !== referenceRef.current) {\n referenceRef.current = node;\n _setReference(node);\n }\n }, []);\n const setFloating = React.useCallback(node => {\n if (node !== floatingRef.current) {\n floatingRef.current = node;\n _setFloating(node);\n }\n }, []);\n const referenceEl = externalReference || _reference;\n const floatingEl = externalFloating || _floating;\n const referenceRef = React.useRef(null);\n const floatingRef = React.useRef(null);\n const dataRef = React.useRef(data);\n const hasWhileElementsMounted = whileElementsMounted != null;\n const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n const platformRef = useLatestRef(platform);\n const openRef = useLatestRef(open);\n const update = React.useCallback(() => {\n if (!referenceRef.current || !floatingRef.current) {\n return;\n }\n const config = {\n placement,\n strategy,\n middleware: latestMiddleware\n };\n if (platformRef.current) {\n config.platform = platformRef.current;\n }\n computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n const fullData = {\n ...data,\n // The floating element's position may be recomputed while it's closed\n // but still mounted (such as when transitioning out). To ensure\n // `isPositioned` will be `false` initially on the next open, avoid\n // setting it to `true` when `open === false` (must be specified).\n isPositioned: openRef.current !== false\n };\n if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n dataRef.current = fullData;\n ReactDOM.flushSync(() => {\n setData(fullData);\n });\n }\n });\n }, [latestMiddleware, placement, strategy, platformRef, openRef]);\n index(() => {\n if (open === false && dataRef.current.isPositioned) {\n dataRef.current.isPositioned = false;\n setData(data => ({\n ...data,\n isPositioned: false\n }));\n }\n }, [open]);\n const isMountedRef = React.useRef(false);\n index(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n index(() => {\n if (referenceEl) referenceRef.current = referenceEl;\n if (floatingEl) floatingRef.current = floatingEl;\n if (referenceEl && floatingEl) {\n if (whileElementsMountedRef.current) {\n return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n }\n update();\n }\n }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\n const refs = React.useMemo(() => ({\n reference: referenceRef,\n floating: floatingRef,\n setReference,\n setFloating\n }), [setReference, setFloating]);\n const elements = React.useMemo(() => ({\n reference: referenceEl,\n floating: floatingEl\n }), [referenceEl, floatingEl]);\n const floatingStyles = React.useMemo(() => {\n const initialStyles = {\n position: strategy,\n left: 0,\n top: 0\n };\n if (!elements.floating) {\n return initialStyles;\n }\n const x = roundByDPR(elements.floating, data.x);\n const y = roundByDPR(elements.floating, data.y);\n if (transform) {\n return {\n ...initialStyles,\n transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n ...(getDPR(elements.floating) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy,\n left: x,\n top: y\n };\n }, [strategy, transform, elements.floating, data.x, data.y]);\n return React.useMemo(() => ({\n ...data,\n update,\n refs,\n elements,\n floatingStyles\n }), [data, update, refs, elements, floatingStyles]);\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow$1 = options => {\n function isRef(value) {\n return {}.hasOwnProperty.call(value, 'current');\n }\n return {\n name: 'arrow',\n options,\n fn(state) {\n const {\n element,\n padding\n } = typeof options === 'function' ? options(state) : options;\n if (element && isRef(element)) {\n if (element.current != null) {\n return arrow$2({\n element: element.current,\n padding\n }).fn(state);\n }\n return {};\n }\n if (element) {\n return arrow$2({\n element,\n padding\n }).fn(state);\n }\n return {};\n }\n };\n};\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = (options, deps) => ({\n ...offset$1(options),\n options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = (options, deps) => ({\n ...shift$1(options),\n options: [options, deps]\n});\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => ({\n ...limitShift$1(options),\n options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = (options, deps) => ({\n ...flip$1(options),\n options: [options, deps]\n});\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = (options, deps) => ({\n ...size$1(options),\n options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = (options, deps) => ({\n ...autoPlacement$1(options),\n options: [options, deps]\n});\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = (options, deps) => ({\n ...hide$1(options),\n options: [options, deps]\n});\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = (options, deps) => ({\n ...inline$1(options),\n options: [options, deps]\n});\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = (options, deps) => ({\n ...arrow$1(options),\n options: [options, deps]\n});\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","// src/arrow.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Arrow\";\nvar Arrow = React.forwardRef((props, forwardedRef) => {\n const { children, width = 10, height = 5, ...arrowProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.svg,\n {\n ...arrowProps,\n ref: forwardedRef,\n width,\n height,\n viewBox: \"0 0 30 10\",\n preserveAspectRatio: \"none\",\n children: props.asChild ? children : /* @__PURE__ */ jsx(\"polygon\", { points: \"0,0 30,0 15,10\" })\n }\n );\n});\nArrow.displayName = NAME;\nvar Root = Arrow;\nexport {\n Arrow,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/popper.tsx\nimport * as React from \"react\";\nimport {\n useFloating,\n autoUpdate,\n offset,\n shift,\n limitShift,\n hide,\n arrow as floatingUIarrow,\n flip,\n size\n} from \"@floating-ui/react-dom\";\nimport * as ArrowPrimitive from \"@radix-ui/react-arrow\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"];\nvar ALIGN_OPTIONS = [\"start\", \"center\", \"end\"];\nvar POPPER_NAME = \"Popper\";\nvar [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\nvar [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);\nvar Popper = (props) => {\n const { __scopePopper, children } = props;\n const [anchor, setAnchor] = React.useState(null);\n return /* @__PURE__ */ jsx(PopperProvider, { scope: __scopePopper, anchor, onAnchorChange: setAnchor, children });\n};\nPopper.displayName = POPPER_NAME;\nvar ANCHOR_NAME = \"PopperAnchor\";\nvar PopperAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopper, virtualRef, ...anchorProps } = props;\n const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const anchorRef = React.useRef(null);\n React.useEffect(() => {\n const previousAnchor = anchorRef.current;\n anchorRef.current = virtualRef?.current || ref.current;\n if (previousAnchor !== anchorRef.current) {\n context.onAnchorChange(anchorRef.current);\n }\n });\n return virtualRef ? null : /* @__PURE__ */ jsx(Primitive.div, { ...anchorProps, ref: composedRefs });\n }\n);\nPopperAnchor.displayName = ANCHOR_NAME;\nvar CONTENT_NAME = \"PopperContent\";\nvar [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);\nvar PopperContent = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopper,\n side = \"bottom\",\n sideOffset = 0,\n align = \"center\",\n alignOffset = 0,\n arrowPadding = 0,\n avoidCollisions = true,\n collisionBoundary = [],\n collisionPadding: collisionPaddingProp = 0,\n sticky = \"partial\",\n hideWhenDetached = false,\n updatePositionStrategy = \"optimized\",\n onPlaced,\n ...contentProps\n } = props;\n const context = usePopperContext(CONTENT_NAME, __scopePopper);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [arrow, setArrow] = React.useState(null);\n const arrowSize = useSize(arrow);\n const arrowWidth = arrowSize?.width ?? 0;\n const arrowHeight = arrowSize?.height ?? 0;\n const desiredPlacement = side + (align !== \"center\" ? \"-\" + align : \"\");\n const collisionPadding = typeof collisionPaddingProp === \"number\" ? collisionPaddingProp : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n const hasExplicitBoundaries = boundary.length > 0;\n const detectOverflowOptions = {\n padding: collisionPadding,\n boundary: boundary.filter(isNotNull),\n // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n altBoundary: hasExplicitBoundaries\n };\n const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n strategy: \"fixed\",\n placement: desiredPlacement,\n whileElementsMounted: (...args) => {\n const cleanup = autoUpdate(...args, {\n animationFrame: updatePositionStrategy === \"always\"\n });\n return cleanup;\n },\n elements: {\n reference: context.anchor\n },\n middleware: [\n offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n avoidCollisions && shift({\n mainAxis: true,\n crossAxis: false,\n limiter: sticky === \"partial\" ? limitShift() : void 0,\n ...detectOverflowOptions\n }),\n avoidCollisions && flip({ ...detectOverflowOptions }),\n size({\n ...detectOverflowOptions,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const { width: anchorWidth, height: anchorHeight } = rects.reference;\n const contentStyle = elements.floating.style;\n contentStyle.setProperty(\"--radix-popper-available-width\", `${availableWidth}px`);\n contentStyle.setProperty(\"--radix-popper-available-height\", `${availableHeight}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-width\", `${anchorWidth}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-height\", `${anchorHeight}px`);\n }\n }),\n arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n transformOrigin({ arrowWidth, arrowHeight }),\n hideWhenDetached && hide({ strategy: \"referenceHidden\", ...detectOverflowOptions })\n ]\n });\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const handlePlaced = useCallbackRef(onPlaced);\n useLayoutEffect(() => {\n if (isPositioned) {\n handlePlaced?.();\n }\n }, [isPositioned, handlePlaced]);\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n return /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: refs.setFloating,\n \"data-radix-popper-content-wrapper\": \"\",\n style: {\n ...floatingStyles,\n transform: isPositioned ? floatingStyles.transform : \"translate(0, -200%)\",\n // keep off the page when measuring\n minWidth: \"max-content\",\n zIndex: contentZIndex,\n [\"--radix-popper-transform-origin\"]: [\n middlewareData.transformOrigin?.x,\n middlewareData.transformOrigin?.y\n ].join(\" \"),\n // hide the content if using the hide middleware and should be hidden\n // set visibility to hidden and disable pointer events so the UI behaves\n // as if the PopperContent isn't there at all\n ...middlewareData.hide?.referenceHidden && {\n visibility: \"hidden\",\n pointerEvents: \"none\"\n }\n },\n dir: props.dir,\n children: /* @__PURE__ */ jsx(\n PopperContentProvider,\n {\n scope: __scopePopper,\n placedSide,\n onArrowChange: setArrow,\n arrowX,\n arrowY,\n shouldHideArrow: cannotCenterArrow,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-side\": placedSide,\n \"data-align\": placedAlign,\n ...contentProps,\n ref: composedRefs,\n style: {\n ...contentProps.style,\n // if the PopperContent hasn't been placed yet (not all measurements done)\n // we prevent animations so that users's animation don't kick in too early referring wrong sides\n animation: !isPositioned ? \"none\" : void 0\n }\n }\n )\n }\n )\n }\n );\n }\n);\nPopperContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"PopperArrow\";\nvar OPPOSITE_SIDE = {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\"\n};\nvar PopperArrow = React.forwardRef(function PopperArrow2(props, forwardedRef) {\n const { __scopePopper, ...arrowProps } = props;\n const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n return (\n // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n // doesn't report size as we'd expect on SVG elements.\n // it reports their bounding box which is effectively the largest path inside the SVG.\n /* @__PURE__ */ jsx(\n \"span\",\n {\n ref: contentContext.onArrowChange,\n style: {\n position: \"absolute\",\n left: contentContext.arrowX,\n top: contentContext.arrowY,\n [baseSide]: 0,\n transformOrigin: {\n top: \"\",\n right: \"0 0\",\n bottom: \"center 0\",\n left: \"100% 0\"\n }[contentContext.placedSide],\n transform: {\n top: \"translateY(100%)\",\n right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n bottom: `rotate(180deg)`,\n left: \"translateY(50%) rotate(-90deg) translateX(50%)\"\n }[contentContext.placedSide],\n visibility: contentContext.shouldHideArrow ? \"hidden\" : void 0\n },\n children: /* @__PURE__ */ jsx(\n ArrowPrimitive.Root,\n {\n ...arrowProps,\n ref: forwardedRef,\n style: {\n ...arrowProps.style,\n // ensures the element can be measured correctly (mostly for if SVG)\n display: \"block\"\n }\n }\n )\n }\n )\n );\n});\nPopperArrow.displayName = ARROW_NAME;\nfunction isNotNull(value) {\n return value !== null;\n}\nvar transformOrigin = (options) => ({\n name: \"transformOrigin\",\n options,\n fn(data) {\n const { placement, rects, middlewareData } = data;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isArrowHidden = cannotCenterArrow;\n const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const noArrowAlign = { start: \"0%\", center: \"50%\", end: \"100%\" }[placedAlign];\n const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n let x = \"\";\n let y = \"\";\n if (placedSide === \"bottom\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${-arrowHeight}px`;\n } else if (placedSide === \"top\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${rects.floating.height + arrowHeight}px`;\n } else if (placedSide === \"right\") {\n x = `${-arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n } else if (placedSide === \"left\") {\n x = `${rects.floating.width + arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n }\n return { data: { x, y } };\n }\n});\nfunction getSideAndAlignFromPlacement(placement) {\n const [side, align = \"center\"] = placement.split(\"-\");\n return [side, align];\n}\nvar Root2 = Popper;\nvar Anchor = PopperAnchor;\nvar Content = PopperContent;\nvar Arrow = PopperArrow;\nexport {\n ALIGN_OPTIONS,\n Anchor,\n Arrow,\n Content,\n Popper,\n PopperAnchor,\n PopperArrow,\n PopperContent,\n Root2 as Root,\n SIDE_OPTIONS,\n createPopperScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs, composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SELECTION_KEYS = [\"Enter\", \" \"];\nvar FIRST_KEYS = [\"ArrowDown\", \"PageUp\", \"Home\"];\nvar LAST_KEYS = [\"ArrowUp\", \"PageDown\", \"End\"];\nvar FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];\nvar SUB_OPEN_KEYS = {\n ltr: [...SELECTION_KEYS, \"ArrowRight\"],\n rtl: [...SELECTION_KEYS, \"ArrowLeft\"]\n};\nvar SUB_CLOSE_KEYS = {\n ltr: [\"ArrowLeft\"],\n rtl: [\"ArrowRight\"]\n};\nvar MENU_NAME = \"Menu\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(MENU_NAME);\nvar [createMenuContext, createMenuScope] = createContextScope(MENU_NAME, [\n createCollectionScope,\n createPopperScope,\n createRovingFocusGroupScope\n]);\nvar usePopperScope = createPopperScope();\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [MenuProvider, useMenuContext] = createMenuContext(MENU_NAME);\nvar [MenuRootProvider, useMenuRootContext] = createMenuContext(MENU_NAME);\nvar Menu = (props) => {\n const { __scopeMenu, open = false, children, dir, onOpenChange, modal = true } = props;\n const popperScope = usePopperScope(__scopeMenu);\n const [content, setContent] = React.useState(null);\n const isUsingKeyboardRef = React.useRef(false);\n const handleOpenChange = useCallbackRef(onOpenChange);\n const direction = useDirection(dir);\n React.useEffect(() => {\n const handleKeyDown = () => {\n isUsingKeyboardRef.current = true;\n document.addEventListener(\"pointerdown\", handlePointer, { capture: true, once: true });\n document.addEventListener(\"pointermove\", handlePointer, { capture: true, once: true });\n };\n const handlePointer = () => isUsingKeyboardRef.current = false;\n document.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n document.removeEventListener(\"pointerdown\", handlePointer, { capture: true });\n document.removeEventListener(\"pointermove\", handlePointer, { capture: true });\n };\n }, []);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuRootProvider,\n {\n scope: __scopeMenu,\n onClose: React.useCallback(() => handleOpenChange(false), [handleOpenChange]),\n isUsingKeyboardRef,\n dir: direction,\n modal,\n children\n }\n )\n }\n ) });\n};\nMenu.displayName = MENU_NAME;\nvar ANCHOR_NAME = \"MenuAnchor\";\nvar MenuAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...anchorProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n }\n);\nMenuAnchor.displayName = ANCHOR_NAME;\nvar PORTAL_NAME = \"MenuPortal\";\nvar [PortalProvider, usePortalContext] = createMenuContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar MenuPortal = (props) => {\n const { __scopeMenu, forceMount, children, container } = props;\n const context = useMenuContext(PORTAL_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeMenu, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"MenuContent\";\nvar [MenuContentProvider, useMenuContentContext] = createMenuContext(CONTENT_NAME);\nvar MenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: rootContext.modal ? /* @__PURE__ */ jsx(MenuRootContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(MenuRootContentNonModal, { ...contentProps, ref: forwardedRef }) }) }) });\n }\n);\nvar MenuRootContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const content = ref.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: context.open,\n disableOutsideScroll: true,\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n ),\n onDismiss: () => context.onOpenChange(false)\n }\n );\n }\n);\nvar MenuRootContentNonModal = React.forwardRef((props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n onDismiss: () => context.onOpenChange(false)\n }\n );\n});\nvar Slot = createSlot(\"MenuContent.ScrollLock\");\nvar MenuContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeMenu,\n loop = false,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEntryFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n disableOutsideScroll,\n ...contentProps\n } = props;\n const context = useMenuContext(CONTENT_NAME, __scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const getItems = useCollection(__scopeMenu);\n const [currentItemId, setCurrentItemId] = React.useState(null);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef, context.onContentChange);\n const timerRef = React.useRef(0);\n const searchRef = React.useRef(\"\");\n const pointerGraceTimerRef = React.useRef(0);\n const pointerGraceIntentRef = React.useRef(null);\n const pointerDirRef = React.useRef(\"right\");\n const lastPointerXRef = React.useRef(0);\n const ScrollLockWrapper = disableOutsideScroll ? RemoveScroll : React.Fragment;\n const scrollLockWrapperProps = disableOutsideScroll ? { as: Slot, allowPinchZoom: true } : void 0;\n const handleTypeaheadSearch = (key) => {\n const search = searchRef.current + key;\n const items = getItems().filter((item) => !item.disabled);\n const currentItem = document.activeElement;\n const currentMatch = items.find((item) => item.ref.current === currentItem)?.textValue;\n const values = items.map((item) => item.textValue);\n const nextMatch = getNextMatch(values, search, currentMatch);\n const newItem = items.find((item) => item.textValue === nextMatch)?.ref.current;\n (function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n })(search);\n if (newItem) {\n setTimeout(() => newItem.focus());\n }\n };\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n useFocusGuards();\n const isPointerMovingToSubmenu = React.useCallback((event) => {\n const isMovingTowards = pointerDirRef.current === pointerGraceIntentRef.current?.side;\n return isMovingTowards && isPointerInGraceArea(event, pointerGraceIntentRef.current?.area);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentProvider,\n {\n scope: __scopeMenu,\n searchRef,\n onItemEnter: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n onItemLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) return;\n contentRef.current?.focus();\n setCurrentItemId(null);\n },\n [isPointerMovingToSubmenu]\n ),\n onTriggerLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n pointerGraceTimerRef,\n onPointerGraceIntentChange: React.useCallback((intent) => {\n pointerGraceIntentRef.current = intent;\n }, []),\n children: /* @__PURE__ */ jsx(ScrollLockWrapper, { ...scrollLockWrapperProps, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: trapFocus,\n onMountAutoFocus: composeEventHandlers(onOpenAutoFocus, (event) => {\n event.preventDefault();\n contentRef.current?.focus({ preventScroll: true });\n }),\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n children: /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n dir: rootContext.dir,\n orientation: \"vertical\",\n loop,\n currentTabStopId: currentItemId,\n onCurrentTabStopIdChange: setCurrentItemId,\n onEntryFocus: composeEventHandlers(onEntryFocus, (event) => {\n if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();\n }),\n preventScrollOnEntryFocus: true,\n children: /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n role: \"menu\",\n \"aria-orientation\": \"vertical\",\n \"data-state\": getOpenState(context.open),\n \"data-radix-menu-content\": \"\",\n dir: rootContext.dir,\n ...popperScope,\n ...contentProps,\n ref: composedRefs,\n style: { outline: \"none\", ...contentProps.style },\n onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n const target = event.target;\n const isKeyDownInside = target.closest(\"[data-radix-menu-content]\") === event.currentTarget;\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n const isCharacterKey = event.key.length === 1;\n if (isKeyDownInside) {\n if (event.key === \"Tab\") event.preventDefault();\n if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key);\n }\n const content = contentRef.current;\n if (event.target !== content) return;\n if (!FIRST_LAST_KEYS.includes(event.key)) return;\n event.preventDefault();\n const items = getItems().filter((item) => !item.disabled);\n const candidateNodes = items.map((item) => item.ref.current);\n if (LAST_KEYS.includes(event.key)) candidateNodes.reverse();\n focusFirst(candidateNodes);\n }),\n onBlur: composeEventHandlers(props.onBlur, (event) => {\n if (!event.currentTarget.contains(event.target)) {\n window.clearTimeout(timerRef.current);\n searchRef.current = \"\";\n }\n }),\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n const target = event.target;\n const pointerXHasChanged = lastPointerXRef.current !== event.clientX;\n if (event.currentTarget.contains(target) && pointerXHasChanged) {\n const newDir = event.clientX > lastPointerXRef.current ? \"right\" : \"left\";\n pointerDirRef.current = newDir;\n lastPointerXRef.current = event.clientX;\n }\n })\n )\n }\n )\n }\n )\n }\n )\n }\n ) })\n }\n );\n }\n);\nMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"MenuGroup\";\nvar MenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...groupProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", ...groupProps, ref: forwardedRef });\n }\n);\nMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"MenuLabel\";\nvar MenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...labelProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { ...labelProps, ref: forwardedRef });\n }\n);\nMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"MenuItem\";\nvar ITEM_SELECT = \"menu.itemSelect\";\nvar MenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { disabled = false, onSelect, ...itemProps } = props;\n const ref = React.useRef(null);\n const rootContext = useMenuRootContext(ITEM_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(ITEM_NAME, props.__scopeMenu);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const isPointerDownRef = React.useRef(false);\n const handleSelect = () => {\n const menuItem = ref.current;\n if (!disabled && menuItem) {\n const itemSelectEvent = new CustomEvent(ITEM_SELECT, { bubbles: true, cancelable: true });\n menuItem.addEventListener(ITEM_SELECT, (event) => onSelect?.(event), { once: true });\n dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);\n if (itemSelectEvent.defaultPrevented) {\n isPointerDownRef.current = false;\n } else {\n rootContext.onClose();\n }\n }\n };\n return /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n ...itemProps,\n ref: composedRefs,\n disabled,\n onClick: composeEventHandlers(props.onClick, handleSelect),\n onPointerDown: (event) => {\n props.onPointerDown?.(event);\n isPointerDownRef.current = true;\n },\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n if (!isPointerDownRef.current) event.currentTarget?.click();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (disabled || isTypingAhead && event.key === \" \") return;\n if (SELECTION_KEYS.includes(event.key)) {\n event.currentTarget.click();\n event.preventDefault();\n }\n })\n }\n );\n }\n);\nMenuItem.displayName = ITEM_NAME;\nvar MenuItemImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, disabled = false, textValue, ...itemProps } = props;\n const contentContext = useMenuContentContext(ITEM_NAME, __scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [isFocused, setIsFocused] = React.useState(false);\n const [textContent, setTextContent] = React.useState(\"\");\n React.useEffect(() => {\n const menuItem = ref.current;\n if (menuItem) {\n setTextContent((menuItem.textContent ?? \"\").trim());\n }\n }, [itemProps.children]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeMenu,\n disabled,\n textValue: textValue ?? textContent,\n children: /* @__PURE__ */ jsx(RovingFocusGroup.Item, { asChild: true, ...rovingFocusGroupScope, focusable: !disabled, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"menuitem\",\n \"data-highlighted\": isFocused ? \"\" : void 0,\n \"aria-disabled\": disabled || void 0,\n \"data-disabled\": disabled ? \"\" : void 0,\n ...itemProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n if (disabled) {\n contentContext.onItemLeave(event);\n } else {\n contentContext.onItemEnter(event);\n if (!event.defaultPrevented) {\n const item = event.currentTarget;\n item.focus({ preventScroll: true });\n }\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => contentContext.onItemLeave(event))\n ),\n onFocus: composeEventHandlers(props.onFocus, () => setIsFocused(true)),\n onBlur: composeEventHandlers(props.onBlur, () => setIsFocused(false))\n }\n ) })\n }\n );\n }\n);\nvar CHECKBOX_ITEM_NAME = \"MenuCheckboxItem\";\nvar MenuCheckboxItem = React.forwardRef(\n (props, forwardedRef) => {\n const { checked = false, onCheckedChange, ...checkboxItemProps } = props;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemcheckbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n ...checkboxItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n checkboxItemProps.onSelect,\n () => onCheckedChange?.(isIndeterminate(checked) ? true : !checked),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"MenuRadioGroup\";\nvar [RadioGroupProvider, useRadioGroupContext] = createMenuContext(\n RADIO_GROUP_NAME,\n { value: void 0, onValueChange: () => {\n } }\n);\nvar MenuRadioGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { value, onValueChange, ...groupProps } = props;\n const handleValueChange = useCallbackRef(onValueChange);\n return /* @__PURE__ */ jsx(RadioGroupProvider, { scope: props.__scopeMenu, value, onValueChange: handleValueChange, children: /* @__PURE__ */ jsx(MenuGroup, { ...groupProps, ref: forwardedRef }) });\n }\n);\nMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"MenuRadioItem\";\nvar MenuRadioItem = React.forwardRef(\n (props, forwardedRef) => {\n const { value, ...radioItemProps } = props;\n const context = useRadioGroupContext(RADIO_ITEM_NAME, props.__scopeMenu);\n const checked = value === context.value;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemradio\",\n \"aria-checked\": checked,\n ...radioItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n radioItemProps.onSelect,\n () => context.onValueChange?.(value),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar ITEM_INDICATOR_NAME = \"MenuItemIndicator\";\nvar [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext(\n ITEM_INDICATOR_NAME,\n { checked: false }\n);\nvar MenuItemIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, forceMount, ...itemIndicatorProps } = props;\n const indicatorContext = useItemIndicatorContext(ITEM_INDICATOR_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(\n Presence,\n {\n present: forceMount || isIndeterminate(indicatorContext.checked) || indicatorContext.checked === true,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...itemIndicatorProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(indicatorContext.checked)\n }\n )\n }\n );\n }\n);\nMenuItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SEPARATOR_NAME = \"MenuSeparator\";\nvar MenuSeparator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...separatorProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"separator\",\n \"aria-orientation\": \"horizontal\",\n ...separatorProps,\n ref: forwardedRef\n }\n );\n }\n);\nMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"MenuArrow\";\nvar MenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nMenuArrow.displayName = ARROW_NAME;\nvar SUB_NAME = \"MenuSub\";\nvar [MenuSubProvider, useMenuSubContext] = createMenuContext(SUB_NAME);\nvar MenuSub = (props) => {\n const { __scopeMenu, children, open = false, onOpenChange } = props;\n const parentMenuContext = useMenuContext(SUB_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const [trigger, setTrigger] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const handleOpenChange = useCallbackRef(onOpenChange);\n React.useEffect(() => {\n if (parentMenuContext.open === false) handleOpenChange(false);\n return () => handleOpenChange(false);\n }, [parentMenuContext.open, handleOpenChange]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuSubProvider,\n {\n scope: __scopeMenu,\n contentId: useId(),\n triggerId: useId(),\n trigger,\n onTriggerChange: setTrigger,\n children\n }\n )\n }\n ) });\n};\nMenuSub.displayName = SUB_NAME;\nvar SUB_TRIGGER_NAME = \"MenuSubTrigger\";\nvar MenuSubTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const openTimerRef = React.useRef(null);\n const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext;\n const scope = { __scopeMenu: props.__scopeMenu };\n const clearOpenTimer = React.useCallback(() => {\n if (openTimerRef.current) window.clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }, []);\n React.useEffect(() => clearOpenTimer, [clearOpenTimer]);\n React.useEffect(() => {\n const pointerGraceTimer = pointerGraceTimerRef.current;\n return () => {\n window.clearTimeout(pointerGraceTimer);\n onPointerGraceIntentChange(null);\n };\n }, [pointerGraceTimerRef, onPointerGraceIntentChange]);\n return /* @__PURE__ */ jsx(MenuAnchor, { asChild: true, ...scope, children: /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n id: subContext.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": subContext.contentId,\n \"data-state\": getOpenState(context.open),\n ...props,\n ref: composeRefs(forwardedRef, subContext.onTriggerChange),\n onClick: (event) => {\n props.onClick?.(event);\n if (props.disabled || event.defaultPrevented) return;\n event.currentTarget.focus();\n if (!context.open) context.onOpenChange(true);\n },\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n contentContext.onItemEnter(event);\n if (event.defaultPrevented) return;\n if (!props.disabled && !context.open && !openTimerRef.current) {\n contentContext.onPointerGraceIntentChange(null);\n openTimerRef.current = window.setTimeout(() => {\n context.onOpenChange(true);\n clearOpenTimer();\n }, 100);\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => {\n clearOpenTimer();\n const contentRect = context.content?.getBoundingClientRect();\n if (contentRect) {\n const side = context.content?.dataset.side;\n const rightSide = side === \"right\";\n const bleed = rightSide ? -5 : 5;\n const contentNearEdge = contentRect[rightSide ? \"left\" : \"right\"];\n const contentFarEdge = contentRect[rightSide ? \"right\" : \"left\"];\n contentContext.onPointerGraceIntentChange({\n area: [\n // Apply a bleed on clientX to ensure that our exit point is\n // consistently within polygon bounds\n { x: event.clientX + bleed, y: event.clientY },\n { x: contentNearEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.bottom },\n { x: contentNearEdge, y: contentRect.bottom }\n ],\n side\n });\n window.clearTimeout(pointerGraceTimerRef.current);\n pointerGraceTimerRef.current = window.setTimeout(\n () => contentContext.onPointerGraceIntentChange(null),\n 300\n );\n } else {\n contentContext.onTriggerLeave(event);\n if (event.defaultPrevented) return;\n contentContext.onPointerGraceIntentChange(null);\n }\n })\n ),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (props.disabled || isTypingAhead && event.key === \" \") return;\n if (SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {\n context.onOpenChange(true);\n context.content?.focus();\n event.preventDefault();\n }\n })\n }\n ) });\n }\n);\nMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"MenuSubContent\";\nvar MenuSubContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...subContentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n id: subContext.contentId,\n \"aria-labelledby\": subContext.triggerId,\n ...subContentProps,\n ref: composedRefs,\n align: \"start\",\n side: rootContext.dir === \"rtl\" ? \"left\" : \"right\",\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n trapFocus: false,\n onOpenAutoFocus: (event) => {\n if (rootContext.isUsingKeyboardRef.current) ref.current?.focus();\n event.preventDefault();\n },\n onCloseAutoFocus: (event) => event.preventDefault(),\n onFocusOutside: composeEventHandlers(props.onFocusOutside, (event) => {\n if (event.target !== subContext.trigger) context.onOpenChange(false);\n }),\n onEscapeKeyDown: composeEventHandlers(props.onEscapeKeyDown, (event) => {\n rootContext.onClose();\n event.preventDefault();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isKeyDownInside = event.currentTarget.contains(event.target);\n const isCloseKey = SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);\n if (isKeyDownInside && isCloseKey) {\n context.onOpenChange(false);\n subContext.trigger?.focus();\n event.preventDefault();\n }\n })\n }\n ) }) }) });\n }\n);\nMenuSubContent.displayName = SUB_CONTENT_NAME;\nfunction getOpenState(open) {\n return open ? \"open\" : \"closed\";\n}\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\nfunction getCheckedState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nfunction focusFirst(candidates) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nfunction getNextMatch(values, search, currentMatch) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1;\n let wrappedValues = wrapArray(values, Math.max(currentMatchIndex, 0));\n const excludeCurrentMatch = normalizedSearch.length === 1;\n if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v) => v !== currentMatch);\n const nextMatch = wrappedValues.find(\n (value) => value.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextMatch !== currentMatch ? nextMatch : void 0;\n}\nfunction isPointInPolygon(point, polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const ii = polygon[i];\n const jj = polygon[j];\n const xi = ii.x;\n const yi = ii.y;\n const xj = jj.x;\n const yj = jj.y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\nfunction isPointerInGraceArea(event, area) {\n if (!area) return false;\n const cursorPos = { x: event.clientX, y: event.clientY };\n return isPointInPolygon(cursorPos, area);\n}\nfunction whenMouse(handler) {\n return (event) => event.pointerType === \"mouse\" ? handler(event) : void 0;\n}\nvar Root3 = Menu;\nvar Anchor2 = MenuAnchor;\nvar Portal = MenuPortal;\nvar Content2 = MenuContent;\nvar Group = MenuGroup;\nvar Label = MenuLabel;\nvar Item2 = MenuItem;\nvar CheckboxItem = MenuCheckboxItem;\nvar RadioGroup = MenuRadioGroup;\nvar RadioItem = MenuRadioItem;\nvar ItemIndicator = MenuItemIndicator;\nvar Separator = MenuSeparator;\nvar Arrow2 = MenuArrow;\nvar Sub = MenuSub;\nvar SubTrigger = MenuSubTrigger;\nvar SubContent = MenuSubContent;\nexport {\n Anchor2 as Anchor,\n Arrow2 as Arrow,\n CheckboxItem,\n Content2 as Content,\n Group,\n Item2 as Item,\n ItemIndicator,\n Label,\n Menu,\n MenuAnchor,\n MenuArrow,\n MenuCheckboxItem,\n MenuContent,\n MenuGroup,\n MenuItem,\n MenuItemIndicator,\n MenuLabel,\n MenuPortal,\n MenuRadioGroup,\n MenuRadioItem,\n MenuSeparator,\n MenuSub,\n MenuSubContent,\n MenuSubTrigger,\n Portal,\n RadioGroup,\n RadioItem,\n Root3 as Root,\n Separator,\n Sub,\n SubContent,\n SubTrigger,\n createMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dropdown-menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as MenuPrimitive from \"@radix-ui/react-menu\";\nimport { createMenuScope } from \"@radix-ui/react-menu\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DROPDOWN_MENU_NAME = \"DropdownMenu\";\nvar [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(\n DROPDOWN_MENU_NAME,\n [createMenuScope]\n);\nvar useMenuScope = createMenuScope();\nvar [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);\nvar DropdownMenu = (props) => {\n const {\n __scopeDropdownMenu,\n children,\n dir,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const triggerRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DROPDOWN_MENU_NAME\n });\n return /* @__PURE__ */ jsx(\n DropdownMenuProvider,\n {\n scope: __scopeDropdownMenu,\n triggerId: useId(),\n triggerRef,\n contentId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children: /* @__PURE__ */ jsx(MenuPrimitive.Root, { ...menuScope, open, onOpenChange: setOpen, dir, modal, children })\n }\n );\n};\nDropdownMenu.displayName = DROPDOWN_MENU_NAME;\nvar TRIGGER_NAME = \"DropdownMenuTrigger\";\nvar DropdownMenuTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;\n const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Anchor, { asChild: true, ...menuScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n id: context.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.open ? context.contentId : void 0,\n \"data-state\": context.open ? \"open\" : \"closed\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n ...triggerProps,\n ref: composeRefs(forwardedRef, context.triggerRef),\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onOpenToggle();\n if (!context.open) event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (disabled) return;\n if ([\"Enter\", \" \"].includes(event.key)) context.onOpenToggle();\n if (event.key === \"ArrowDown\") context.onOpenChange(true);\n if ([\"Enter\", \" \", \"ArrowDown\"].includes(event.key)) event.preventDefault();\n })\n }\n ) });\n }\n);\nDropdownMenuTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DropdownMenuPortal\";\nvar DropdownMenuPortal = (props) => {\n const { __scopeDropdownMenu, ...portalProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Portal, { ...menuScope, ...portalProps });\n};\nDropdownMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"DropdownMenuContent\";\nvar DropdownMenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...contentProps } = props;\n const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const hasInteractedOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.Content,\n {\n id: context.contentId,\n \"aria-labelledby\": context.triggerId,\n ...menuScope,\n ...contentProps,\n ref: forwardedRef,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n hasInteractedOutsideRef.current = false;\n event.preventDefault();\n }),\n onInteractOutside: composeEventHandlers(props.onInteractOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;\n }),\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n }\n);\nDropdownMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"DropdownMenuGroup\";\nvar DropdownMenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...groupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Group, { ...menuScope, ...groupProps, ref: forwardedRef });\n }\n);\nDropdownMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"DropdownMenuLabel\";\nvar DropdownMenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...labelProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Label, { ...menuScope, ...labelProps, ref: forwardedRef });\n }\n);\nDropdownMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"DropdownMenuItem\";\nvar DropdownMenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Item, { ...menuScope, ...itemProps, ref: forwardedRef });\n }\n);\nDropdownMenuItem.displayName = ITEM_NAME;\nvar CHECKBOX_ITEM_NAME = \"DropdownMenuCheckboxItem\";\nvar DropdownMenuCheckboxItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...checkboxItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.CheckboxItem, { ...menuScope, ...checkboxItemProps, ref: forwardedRef });\n});\nDropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"DropdownMenuRadioGroup\";\nvar DropdownMenuRadioGroup = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioGroupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioGroup, { ...menuScope, ...radioGroupProps, ref: forwardedRef });\n});\nDropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"DropdownMenuRadioItem\";\nvar DropdownMenuRadioItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioItem, { ...menuScope, ...radioItemProps, ref: forwardedRef });\n});\nDropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar INDICATOR_NAME = \"DropdownMenuItemIndicator\";\nvar DropdownMenuItemIndicator = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemIndicatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.ItemIndicator, { ...menuScope, ...itemIndicatorProps, ref: forwardedRef });\n});\nDropdownMenuItemIndicator.displayName = INDICATOR_NAME;\nvar SEPARATOR_NAME = \"DropdownMenuSeparator\";\nvar DropdownMenuSeparator = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...separatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Separator, { ...menuScope, ...separatorProps, ref: forwardedRef });\n});\nDropdownMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"DropdownMenuArrow\";\nvar DropdownMenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...arrowProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Arrow, { ...menuScope, ...arrowProps, ref: forwardedRef });\n }\n);\nDropdownMenuArrow.displayName = ARROW_NAME;\nvar DropdownMenuSub = (props) => {\n const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: \"DropdownMenuSub\"\n });\n return /* @__PURE__ */ jsx(MenuPrimitive.Sub, { ...menuScope, open, onOpenChange: setOpen, children });\n};\nvar SUB_TRIGGER_NAME = \"DropdownMenuSubTrigger\";\nvar DropdownMenuSubTrigger = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...subTriggerProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.SubTrigger, { ...menuScope, ...subTriggerProps, ref: forwardedRef });\n});\nDropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"DropdownMenuSubContent\";\nvar DropdownMenuSubContent = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...subContentProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.SubContent,\n {\n ...menuScope,\n ...subContentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nDropdownMenuSubContent.displayName = SUB_CONTENT_NAME;\nvar Root2 = DropdownMenu;\nvar Trigger = DropdownMenuTrigger;\nvar Portal2 = DropdownMenuPortal;\nvar Content2 = DropdownMenuContent;\nvar Group2 = DropdownMenuGroup;\nvar Label2 = DropdownMenuLabel;\nvar Item2 = DropdownMenuItem;\nvar CheckboxItem2 = DropdownMenuCheckboxItem;\nvar RadioGroup2 = DropdownMenuRadioGroup;\nvar RadioItem2 = DropdownMenuRadioItem;\nvar ItemIndicator2 = DropdownMenuItemIndicator;\nvar Separator2 = DropdownMenuSeparator;\nvar Arrow2 = DropdownMenuArrow;\nvar Sub2 = DropdownMenuSub;\nvar SubTrigger2 = DropdownMenuSubTrigger;\nvar SubContent2 = DropdownMenuSubContent;\nexport {\n Arrow2 as Arrow,\n CheckboxItem2 as CheckboxItem,\n Content2 as Content,\n DropdownMenu,\n DropdownMenuArrow,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuItemIndicator,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n Group2 as Group,\n Item2 as Item,\n ItemIndicator2 as ItemIndicator,\n Label2 as Label,\n Portal2 as Portal,\n RadioGroup2 as RadioGroup,\n RadioItem2 as RadioItem,\n Root2 as Root,\n Separator2 as Separator,\n Sub2 as Sub,\n SubContent2 as SubContent,\n SubTrigger2 as SubTrigger,\n Trigger,\n createDropdownMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[state=open]:bg-accent focus:bg-accent\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 text-sm font-semibold\", inset && \"pl-8\", className)}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator ref={ref} className={cn(\"-mx-1 my-1 h-px bg-muted\", className)} {...props} />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\n return <span className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)} {...props} />;\n};\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n};\n","import React from 'react';\r\nimport { Button } from '@/components/ui/button';\r\nimport { QuickAction } from '@/constants';\r\nimport { cn } from '@/lib/utils';\r\n\r\ninterface StylePresetSelectorProps {\r\n presets: QuickAction[];\r\n onSelect: (preset: QuickAction) => void;\r\n disabled?: boolean;\r\n activeId?: string;\r\n className?: string;\r\n variant?: 'default' | 'minimal' | 'compact';\r\n}\r\n\r\nexport const StylePresetSelector: React.FC<StylePresetSelectorProps> = ({\r\n presets,\r\n onSelect,\r\n disabled = false,\r\n activeId,\r\n className = '',\r\n variant = 'default',\r\n}) => {\r\n if (presets.length === 0) return null;\r\n\r\n return (\r\n <div className={cn(\"flex flex-wrap items-center gap-2\", className)}>\r\n {presets.map((preset) => (\r\n <Button\r\n key={preset.id}\r\n type=\"button\"\r\n variant={variant === 'minimal' ? 'ghost' : 'secondary'}\r\n size=\"sm\"\r\n disabled={disabled}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onSelect(preset);\r\n }}\r\n className={cn(\r\n variant === 'minimal'\r\n ? 'h-6 px-2.5 text-xs text-white border border-white/20 hover:bg-white/20 hover:text-white rounded-full bg-black/40 backdrop-blur-md shadow-sm transition-all duration-200 hover:scale-105'\r\n : 'h-8 px-3 text-xs',\r\n activeId === preset.id && 'ring-2 ring-primary bg-primary/20',\r\n \"transition-all duration-200\"\r\n )}\r\n title={preset.prompt}\r\n >\r\n {preset.icon && <span className=\"mr-1.5\">{preset.icon}</span>}\r\n <span>{preset.name}</span>\r\n </Button>\r\n ))}\r\n </div>\r\n );\r\n};\r\n","import { useState, useEffect, useRef } from 'react';\r\nimport { TransformWrapper, TransformComponent } from 'react-zoom-pan-pinch';\r\nimport { ArrowUp, ArrowDown, Upload, Info, FileText, Sparkles, Mic, MicOff, Plus, Trash2, Save, History, Wand2 } from 'lucide-react';\r\nimport { Button } from '@/components/ui/button';\r\nimport { Textarea } from '@/components/ui/textarea';\r\nimport PublishDialog from '@/components/PublishDialog';\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuSeparator,\r\n DropdownMenuTrigger,\r\n} from \"@/components/ui/dropdown-menu\";\r\nimport { T, translate } from \"@/i18n\";\r\nimport { QuickAction, DEFAULT_QUICK_ACTIONS } from \"@/constants\";\r\nimport { StylePresetSelector } from \"./StylePresetSelector\";\r\n\r\ninterface ImageLightboxProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n imageUrl: string;\r\n imageTitle: string;\r\n originalImageId?: string;\r\n onPromptSubmit?: (prompt: string) => void;\r\n onPublish?: (option: 'overwrite' | 'new' | 'version', imageUrl: string, title: string, description?: string, parentId?: string, collectionIds?: string[]) => void;\r\n isGenerating?: boolean;\r\n isPublishing?: boolean;\r\n showPrompt?: boolean;\r\n showPublish?: boolean;\r\n generatedImageUrl?: string;\r\n // Navigation props\r\n currentIndex?: number;\r\n totalCount?: number;\r\n onNavigate?: (direction: 'prev' | 'next') => void;\r\n onPreload?: (direction: 'prev' | 'next') => void;\r\n // Wizard features (optional)\r\n showWizardFeatures?: boolean;\r\n promptTemplates?: Array<{ name: string; template: string }>;\r\n onApplyTemplate?: (template: string) => void;\r\n onSaveTemplate?: () => void;\r\n onDeleteTemplate?: (index: number) => void;\r\n onOptimizePrompt?: () => void;\r\n isOptimizing?: boolean;\r\n onMicrophoneToggle?: () => void;\r\n isRecording?: boolean;\r\n isTranscribing?: boolean;\r\n showQuickPublish?: boolean;\r\n onQuickPublish?: () => void;\r\n prompt?: string;\r\n onPromptChange?: (value: string) => void;\r\n quickActions?: QuickAction[];\r\n // Prompt history\r\n promptHistory?: string[];\r\n historyIndex?: number;\r\n onNavigateHistory?: (direction: 'up' | 'down') => void;\r\n onManualPromptEdit?: () => void; // Callback to reset history index when user manually types\r\n // Wizard navigation\r\n onOpenInWizard?: () => void; // Open current image in full wizard\r\n}\r\n\r\nimport ResponsiveImage from './ResponsiveImage';\r\n\r\nexport default function ImageLightbox({\r\n isOpen,\r\n onClose,\r\n imageUrl,\r\n imageTitle,\r\n originalImageId,\r\n onPromptSubmit,\r\n onPublish,\r\n isGenerating = false,\r\n isPublishing = false,\r\n showPrompt = true,\r\n showPublish = false,\r\n generatedImageUrl,\r\n currentIndex,\r\n totalCount,\r\n onNavigate,\r\n onPreload,\r\n // Wizard features\r\n showWizardFeatures = false,\r\n promptTemplates = [],\r\n onApplyTemplate,\r\n onSaveTemplate,\r\n onDeleteTemplate,\r\n onOptimizePrompt,\r\n isOptimizing = false,\r\n onMicrophoneToggle,\r\n isRecording = false,\r\n isTranscribing = false,\r\n showQuickPublish = false,\r\n onQuickPublish,\r\n prompt: externalPrompt,\r\n onPromptChange,\r\n // Prompt history\r\n promptHistory = [],\r\n historyIndex = -1,\r\n onNavigateHistory,\r\n onManualPromptEdit,\r\n // Wizard navigation\r\n onOpenInWizard,\r\n quickActions = DEFAULT_QUICK_ACTIONS\r\n}: ImageLightboxProps) {\r\n const [lightboxLoaded, setLightboxLoaded] = useState(false);\r\n const [isPanning, setIsPanning] = useState(false);\r\n const [scale, setScale] = useState(1);\r\n const [internalPrompt, setInternalPrompt] = useState('');\r\n const [showPublishDialog, setShowPublishDialog] = useState(false);\r\n const [showPromptField, setShowPromptField] = useState(false);\r\n const [showInfoPopup, setShowInfoPopup] = useState(false);\r\n const panStartRef = useRef<{ x: number; y: number } | null>(null);\r\n const tapTimeoutRef = useRef<NodeJS.Timeout | null>(null);\r\n const lastTapRef = useRef<number>(0);\r\n const swipeStartRef = useRef<{ x: number; y: number; time: number } | null>(null);\r\n const isSwipingRef = useRef(false);\r\n const isPanningRef = useRef(false);\r\n\r\n // Use external prompt if provided (controlled), otherwise internal state (uncontrolled)\r\n const lightboxPrompt = externalPrompt !== undefined ? externalPrompt : internalPrompt;\r\n const setLightboxPrompt = (value: string) => {\r\n if (onPromptChange) {\r\n onPromptChange(value);\r\n } else {\r\n setInternalPrompt(value);\r\n }\r\n };\r\n\r\n // Preload image when lightbox opens\r\n useEffect(() => {\r\n if (isOpen) {\r\n // Ensure prompt field is hidden by default when opening\r\n setShowPromptField(false);\r\n }\r\n }, [isOpen]);\r\n\r\n // Handle keyboard events\r\n useEffect(() => {\r\n if (!isOpen) return;\r\n\r\n const handleKeyDown = (event: KeyboardEvent) => {\r\n // Check if user is typing in the textarea or any input field\r\n const target = event.target as HTMLElement;\r\n const isTypingInInput = target instanceof HTMLTextAreaElement ||\r\n target instanceof HTMLInputElement ||\r\n target?.contentEditable === 'true' ||\r\n target?.tagName === 'TEXTAREA' ||\r\n target?.tagName === 'INPUT';\r\n\r\n\r\n if (event.key === 'Escape') {\r\n if (isTypingInInput) {\r\n // If typing in input, ESC should hide prompt and clear text (handled in textarea onKeyDown)\r\n return;\r\n }\r\n onClose();\r\n } else if (event.key === 'ArrowUp' && event.ctrlKey && onNavigateHistory) {\r\n // Ctrl+ArrowUp for prompt history navigation\r\n event.preventDefault();\r\n onNavigateHistory('up');\r\n } else if (event.key === 'ArrowDown' && event.ctrlKey && onNavigateHistory) {\r\n // Ctrl+ArrowDown for prompt history navigation\r\n event.preventDefault();\r\n onNavigateHistory('down');\r\n } else if (event.key === 'ArrowLeft' && !isTypingInInput && onNavigate) {\r\n event.preventDefault();\r\n onNavigate('prev');\r\n } else if (event.key === 'ArrowRight' && !isTypingInInput && onNavigate) {\r\n event.preventDefault();\r\n onNavigate('next');\r\n } else if (event.key === ' ' && !isTypingInInput && showPrompt) {\r\n // Spacebar to toggle prompt field (only when not typing)\r\n event.preventDefault();\r\n setShowPromptField(!showPromptField);\r\n }\r\n };\r\n\r\n document.addEventListener('keydown', handleKeyDown);\r\n return () => document.removeEventListener('keydown', handleKeyDown);\r\n }, [isOpen, onClose, onNavigate, currentIndex, totalCount, showPrompt, showPromptField, onNavigateHistory]);\r\n\r\n // Cleanup timeout on unmount\r\n useEffect(() => {\r\n return () => {\r\n if (tapTimeoutRef.current) {\r\n clearTimeout(tapTimeoutRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n // Swipe detection functions\r\n const handleSwipeStart = (clientX: number, clientY: number) => {\r\n swipeStartRef.current = { x: clientX, y: clientY, time: Date.now() };\r\n isSwipingRef.current = false;\r\n };\r\n\r\n const handleSwipeEnd = (clientX: number, clientY: number) => {\r\n if (!swipeStartRef.current || !onNavigate) {\r\n return;\r\n }\r\n\r\n const deltaX = clientX - swipeStartRef.current.x;\r\n const deltaY = clientY - swipeStartRef.current.y;\r\n const deltaTime = Date.now() - swipeStartRef.current.time;\r\n\r\n // Swipe thresholds\r\n const minSwipeDistance = 50; // Minimum distance for a swipe\r\n const maxSwipeTime = 500; // Maximum time for a swipe (ms)\r\n const maxVerticalDistance = 100; // Maximum vertical movement for horizontal swipe\r\n\r\n // Check if this is a valid horizontal swipe\r\n if (\r\n Math.abs(deltaX) > minSwipeDistance &&\r\n Math.abs(deltaY) < maxVerticalDistance &&\r\n deltaTime < maxSwipeTime &&\r\n !isPanning // Don't trigger swipe if user was panning/zooming\r\n ) {\r\n if (deltaX > 0) {\r\n // Swipe right = previous image\r\n onNavigate('prev');\r\n } else if (deltaX < 0) {\r\n // Swipe left = next image \r\n onNavigate('next');\r\n }\r\n }\r\n\r\n swipeStartRef.current = null;\r\n isSwipingRef.current = false;\r\n };\r\n\r\n const handlePromptSubmit = () => {\r\n if (lightboxPrompt.trim() && !isGenerating && onPromptSubmit) {\r\n onPromptSubmit(lightboxPrompt);\r\n // Don't clear the prompt - keep it for reference/reuse\r\n }\r\n };\r\n\r\n const handlePublishClick = () => {\r\n setShowPublishDialog(true);\r\n };\r\n\r\n const handlePublish = (option: 'overwrite' | 'new' | 'version', title: string, description?: string, parentId?: string, collectionIds?: string[]) => {\r\n if (onPublish) {\r\n const urlToPublish = generatedImageUrl || imageUrl;\r\n onPublish(option, urlToPublish, title, description, parentId, collectionIds);\r\n }\r\n setShowPublishDialog(false);\r\n };\r\n\r\n if (!isOpen) return null;\r\n\r\n\r\n return (\r\n <div\r\n className=\"fixed inset-0 bg-black/95 z-[9999] flex items-center justify-center\"\r\n onClick={(e) => {\r\n // Only close if clicking on the main background (not on image area)\r\n if (e.target === e.currentTarget) {\r\n if (showPrompt) {\r\n setShowPromptField(!showPromptField);\r\n } else {\r\n onClose();\r\n }\r\n }\r\n }}\r\n onTouchStart={(e) => {\r\n // Only handle swipe on the main container, not on child elements\r\n if (e.target === e.currentTarget) {\r\n const touch = e.touches[0];\r\n handleSwipeStart(touch.clientX, touch.clientY);\r\n }\r\n }}\r\n onTouchEnd={(e) => {\r\n // Only handle swipe on the main container, not on child elements\r\n if (e.target === e.currentTarget) {\r\n const touch = e.changedTouches[0];\r\n handleSwipeEnd(touch.clientX, touch.clientY);\r\n }\r\n }}\r\n >\r\n <div className=\"relative w-full h-full flex items-center justify-center\">\r\n <div className=\"relative w-full h-full flex items-center justify-center\">\r\n <TransformWrapper\r\n initialScale={1}\r\n minScale={1}\r\n maxScale={40}\r\n centerOnInit={true}\r\n centerZoomedOut={true}\r\n limitToBounds={true}\r\n\r\n alignmentAnimation={{ animationTime: 200, animationType: 'easeOut' }}\r\n wheel={{ step: 1 }}\r\n doubleClick={{ disabled: false, step: 0.7 }}\r\n pinch={{ step: 20 }}\r\n onTransformed={(e) => setScale(e.state.scale)}\r\n >\r\n <TransformComponent\r\n wrapperClass=\"w-full h-full\"\r\n contentClass=\"\"\r\n >\r\n <ResponsiveImage\r\n src={generatedImageUrl || imageUrl}\r\n alt={imageTitle}\r\n sizes={`${Math.ceil(scale * 100)}vw`}\r\n responsiveSizes={[640, 1024, 2048]}\r\n imgClassName=\"max-w-[90vw] max-h-[90vh] object-contain cursor-grab active:cursor-grabbing pointer-events-auto\"\r\n className=\"w-full h-full flex items-center justify-center\"\r\n loading=\"eager\"\r\n draggable={false}\r\n onLoad={() => setLightboxLoaded(true)}\r\n onClick={(e: React.MouseEvent) => {\r\n // Only toggle controls if we haven't been panning\r\n if (!isPanningRef.current && showPrompt) {\r\n e.stopPropagation();\r\n setShowPromptField(!showPromptField);\r\n }\r\n }}\r\n />\r\n </TransformComponent>\r\n </TransformWrapper>\r\n </div>\r\n {!lightboxLoaded && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none z-10\">\r\n <div className=\"w-12 h-12 border-4 border-white/30 border-t-white rounded-full animate-spin\"></div>\r\n </div>\r\n )}\r\n\r\n {/* Close Button */}\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onClose();\r\n }}\r\n className=\"absolute top-4 right-4 text-white text-2xl p-4 bg-black/75 rounded-lg hover:bg-black/90 transition-all duration-200 z-20\"\r\n title=\"Close (ESC)\"\r\n >\r\n ×\r\n </button>\r\n\r\n {/* Navigation Buttons - show if navigation function exists and we have valid navigation data */}\r\n {onNavigate && currentIndex !== undefined && totalCount !== undefined && totalCount > 1 && (\r\n <>\r\n {currentIndex > 0 && (\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onNavigate('prev');\r\n }}\r\n className=\"absolute left-4 top-1/2 transform -translate-y-1/2 p-4 text-white text-3xl bg-black/75 rounded-lg hover:bg-black/90 transition-all duration-200\"\r\n style={{ zIndex: 50 }}\r\n title=\"Previous (←)\"\r\n >\r\n ‹\r\n </button>\r\n )}\r\n\r\n {currentIndex < totalCount - 1 && (\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onNavigate('next');\r\n }}\r\n className=\"absolute right-4 top-1/2 transform -translate-y-1/2 p-4 text-white text-3xl bg-black/75 rounded-lg hover:bg-black/90 transition-all duration-200\"\r\n style={{ zIndex: 50 }}\r\n title=\"Next (→)\"\r\n >\r\n ›\r\n </button>\r\n )}\r\n </>\r\n )}\r\n\r\n {/* Quick Prompt Field */}\r\n {showPrompt && showPromptField && lightboxLoaded && (\r\n <div\r\n className=\"absolute bottom-4 left-1/2 transform -translate-x-1/2 w-[90vw] md:w-[80vw] max-w-4xl z-40\"\r\n onClick={(e) => {\r\n // Allow clicking outside the prompt container to hide it\r\n if (e.target === e.currentTarget) {\r\n setShowPromptField(false);\r\n }\r\n }}\r\n >\r\n <div\r\n className=\"bg-black/80 backdrop-blur-sm rounded-xl p-3 md:p-4 shadow-2xl border border-white/20\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {showWizardFeatures ? (\r\n /* Wizard Mode: Textarea + Separate Actions Row */\r\n <>\r\n {/* Prompt History Indicator */}\r\n {promptHistory.length > 0 && (\r\n <div className=\"flex items-center justify-between mb-2 text-xs\">\r\n <span className=\"text-white/60\">\r\n History: {historyIndex >= 0 ? `${historyIndex + 1}/${promptHistory.length}` : 'Current'}\r\n </span>\r\n <div className=\"flex items-center gap-1\">\r\n {/* History Picker Dropdown */}\r\n <DropdownMenu modal={false}>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"h-6 w-6 p-0 text-white hover:text-primary\"\r\n title=\"Browse prompt history\"\r\n >\r\n <History className=\"h-3 w-3\" />\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"end\" className=\"w-80 max-h-64 overflow-y-auto z-[10000]\">\r\n {promptHistory.length === 0 ? (\r\n <div className=\"px-2 py-3 text-sm text-muted-foreground text-center\">\r\n <T>No history yet</T>\r\n </div>\r\n ) : (\r\n <>\r\n {[...promptHistory].reverse().map((historyPrompt, reverseIndex) => {\r\n const actualIndex = promptHistory.length - 1 - reverseIndex;\r\n return (\r\n <DropdownMenuItem\r\n key={actualIndex}\r\n onSelect={() => {\r\n setLightboxPrompt(historyPrompt);\r\n }}\r\n className={`flex flex-col items-start gap-1 py-2 ${historyIndex === actualIndex ? 'bg-primary/10' : ''\r\n }`}\r\n >\r\n <div className=\"text-xs text-muted-foreground\">\r\n #{promptHistory.length - reverseIndex}\r\n {historyIndex === actualIndex && ' (current)'}\r\n </div>\r\n <div className=\"text-sm line-clamp-2 w-full\">\r\n {historyPrompt}\r\n </div>\r\n </DropdownMenuItem>\r\n );\r\n })}\r\n </>\r\n )}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onNavigateHistory?.('up');\r\n }}\r\n disabled={promptHistory.length === 0 || historyIndex === promptHistory.length - 1}\r\n className=\"h-6 w-6 p-0 text-white hover:text-primary disabled:opacity-30\"\r\n title=\"Previous prompt (Ctrl+↑)\"\r\n >\r\n <ArrowUp className=\"h-3 w-3\" />\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onNavigateHistory?.('down');\r\n }}\r\n disabled={historyIndex === -1}\r\n className=\"h-6 w-6 p-0 text-white hover:text-primary disabled:opacity-30\"\r\n title=\"Next prompt (Ctrl+↓)\"\r\n >\r\n <ArrowUp className=\"h-3 w-3 rotate-180\" />\r\n </Button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Input Row */}\r\n <div className=\"flex gap-2 mb-2 md:mb-0\">\r\n <div className=\"flex-1 relative\">\r\n <Textarea\r\n value={lightboxPrompt}\r\n onChange={(e) => {\r\n setLightboxPrompt(e.target.value);\r\n onManualPromptEdit?.(); // Reset history index when manually typing\r\n }}\r\n placeholder={translate(\"Quick edit prompt...\")}\r\n disabled={isGenerating}\r\n rows={2}\r\n className=\"w-full bg-white/10 border border-white/30 rounded-lg px-3 py-2 pr-10 text-white placeholder-white/60 focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent backdrop-blur-sm disabled:opacity-50 resize-none text-sm md:text-base\"\r\n onKeyDown={(e) => {\r\n if ((e.key === 'Enter' && e.ctrlKey) || (e.key === 'Enter' && !e.shiftKey && lightboxPrompt.trim() && !isGenerating)) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n handlePromptSubmit();\r\n if (!e.ctrlKey) {\r\n setLightboxPrompt('');\r\n }\r\n } else if (e.key === 'ArrowUp' && e.ctrlKey) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n onNavigateHistory?.('up');\r\n } else if (e.key === 'ArrowDown' && e.ctrlKey) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n onNavigateHistory?.('down');\r\n } else if (e.key === 'Escape') {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n setLightboxPrompt('');\r\n } else if (e.key.startsWith('Arrow') || e.key === 'Delete' || e.key === 'Backspace') {\r\n e.stopPropagation();\r\n }\r\n }}\r\n onClick={(e) => e.stopPropagation()}\r\n />\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onMicrophoneToggle?.();\r\n }}\r\n disabled={isTranscribing}\r\n className={`absolute right-2 bottom-2 p-1 rounded-md transition-colors ${isRecording\r\n ? 'bg-red-600/80 text-white hover:bg-red-700'\r\n : 'text-white/60 hover:text-white hover:bg-white/10'\r\n }`}\r\n title={isRecording ? 'Stop recording' : 'Record audio'}\r\n >\r\n {isTranscribing ? (\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white border-t-transparent\"></div>\r\n ) : isRecording ? (\r\n <MicOff size={16} />\r\n ) : (\r\n <Mic size={16} />\r\n )}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {/* Style Presets - Minimal Row */}\r\n <div className=\"mb-2 mt-2\">\r\n <StylePresetSelector\r\n presets={quickActions}\r\n onSelect={(preset) => {\r\n const current = lightboxPrompt || '';\r\n const trimmed = current.trim();\r\n const separator = trimmed ? ', ' : '';\r\n setLightboxPrompt(`${trimmed}${separator}${preset.prompt}`);\r\n }}\r\n variant=\"minimal\"\r\n disabled={isGenerating}\r\n />\r\n </div>\r\n\r\n {/* Actions Row - Separate on mobile */}\r\n <div className=\"flex gap-2 flex-wrap md:flex-nowrap\">\r\n {/* Templates Dropdown */}\r\n <DropdownMenu modal={false}>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n onClick={(e) => e.stopPropagation()}\r\n variant=\"ghost\"\r\n className=\"text-white hover:text-primary disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title={translate(\"Prompt Templates\")}\r\n >\r\n <FileText size={20} className=\"md:w-5 md:h-5\" />\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"end\" className=\"w-64 z-[10000]\">\r\n {promptTemplates.length === 0 ? (\r\n <div className=\"px-2 py-3 text-sm text-muted-foreground text-center\">\r\n <T>No templates saved yet</T>\r\n </div>\r\n ) : (\r\n <>\r\n {promptTemplates.map((template, index) => (\r\n <DropdownMenuItem\r\n key={index}\r\n onSelect={() => onApplyTemplate?.(template.template)}\r\n className=\"flex items-center justify-between group\"\r\n >\r\n <span className=\"flex-1 truncate\">{template.name}</span>\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onDeleteTemplate?.(index);\r\n }}\r\n className=\"opacity-0 group-hover:opacity-100 ml-2 p-1 hover:bg-destructive/20 rounded\"\r\n title={translate(\"Delete template\")}\r\n >\r\n <Trash2 className=\"h-3 w-3 text-destructive\" />\r\n </button>\r\n </DropdownMenuItem>\r\n ))}\r\n <DropdownMenuSeparator />\r\n </>\r\n )}\r\n <DropdownMenuItem onSelect={() => onSaveTemplate?.()}>\r\n <Plus className=\"h-3 w-3 mr-2\" />\r\n <T>Save current as template</T>\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n {onOpenInWizard && (\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onOpenInWizard();\r\n }}\r\n variant=\"ghost\"\r\n className=\"text-white hover:text-purple-400 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title={translate(\"Open in AI Wizard for advanced editing\")}\r\n >\r\n <Wand2 size={20} className=\"md:w-5 md:h-5\" />\r\n </Button>\r\n )}\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onOptimizePrompt?.();\r\n }}\r\n disabled={isOptimizing || !lightboxPrompt.trim()}\r\n variant=\"ghost\"\r\n className=\"text-white hover:text-primary disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title={translate(\"Optimize prompt with AI\")}\r\n >\r\n {isOptimizing ? (\r\n <div className=\"animate-spin rounded-full h-5 w-5 border-2 border-white border-t-transparent\"></div>\r\n ) : (\r\n <Sparkles size={20} className=\"md:w-5 md:h-5\" />\r\n )}\r\n </Button>\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n if (lightboxPrompt.trim() && !isGenerating) {\r\n handlePromptSubmit();\r\n setLightboxPrompt('');\r\n }\r\n }}\r\n disabled={!lightboxPrompt.trim() || isGenerating}\r\n variant=\"ghost\"\r\n className=\"text-primary hover:text-primary/80 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title=\"Generate (Enter to submit)\"\r\n >\r\n {isGenerating ? (\r\n <div className=\"animate-spin rounded-full h-5 w-5 border-2 border-primary border-t-transparent\"></div>\r\n ) : (\r\n <ArrowUp size={20} className=\"md:w-5 md:h-5\" />\r\n )}\r\n </Button>\r\n {showQuickPublish && (\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onQuickPublish?.();\r\n }}\r\n disabled={isPublishing}\r\n variant=\"ghost\"\r\n className=\"text-green-500 hover:text-green-400 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title=\"Quick Publish with prompt as description\"\r\n >\r\n {isPublishing ? (\r\n <div className=\"animate-spin rounded-full h-5 w-5 border-2 border-green-500 border-t-transparent\"></div>\r\n ) : (\r\n <Upload size={20} className=\"md:w-5 md:h-5\" />\r\n )}\r\n </Button>\r\n )}\r\n {showPublish && (\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handlePublishClick();\r\n }}\r\n disabled={isPublishing}\r\n variant=\"ghost\"\r\n className=\"text-green-500 hover:text-green-400 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title=\"Publish to gallery with options\"\r\n >\r\n {isPublishing ? (\r\n <div className=\"animate-spin rounded-full h-5 w-5 border-2 border-green-500 border-t-transparent\"></div>\r\n ) : (\r\n <Save size={20} className=\"md:w-5 md:h-5\" />\r\n )}\r\n </Button>\r\n )}\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setShowPromptField(false);\r\n }}\r\n variant=\"ghost\"\r\n className=\"text-white/60 hover:text-white p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0 md:ml-auto\"\r\n title={translate(\"Hide prompt\")}\r\n type=\"button\"\r\n >\r\n <ArrowDown size={20} className=\"md:w-5 md:h-5\" />\r\n </Button>\r\n </div>\r\n </>\r\n ) : (\r\n /* Simple Mode: Same layout as wizard, fewer buttons */\r\n <>\r\n {/* Input Row */}\r\n <div className=\"flex gap-2 mb-2 md:mb-0\">\r\n <div className=\"flex-1 relative\">\r\n <Textarea\r\n value={lightboxPrompt}\r\n onChange={(e) => {\r\n setLightboxPrompt(e.target.value);\r\n onManualPromptEdit?.(); // Reset history index when manually typing\r\n }}\r\n placeholder={translate(\"Quick edit prompt...\")}\r\n disabled={isGenerating}\r\n rows={2}\r\n className=\"w-full bg-white/10 border border-white/30 rounded-lg px-3 py-2 text-white placeholder-white/60 focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent backdrop-blur-sm disabled:opacity-50 resize-none text-sm md:text-base\"\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter' && !e.shiftKey && lightboxPrompt.trim() && !isGenerating) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n handlePromptSubmit();\r\n } else if (e.key === 'Escape') {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n setLightboxPrompt('');\r\n } else if (e.key.startsWith('Arrow') || e.key === 'Delete' || e.key === 'Backspace') {\r\n e.stopPropagation();\r\n }\r\n }}\r\n onClick={(e) => e.stopPropagation()}\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Style Presets - Minimal Row (Simple Mode) */}\r\n <div className=\"mb-2 mt-2\">\r\n <StylePresetSelector\r\n presets={quickActions}\r\n onSelect={(preset) => {\r\n const current = lightboxPrompt || '';\r\n const trimmed = current.trim();\r\n const separator = trimmed ? ', ' : '';\r\n setLightboxPrompt(`${trimmed}${separator}${preset.prompt}`);\r\n }}\r\n variant=\"minimal\"\r\n disabled={isGenerating}\r\n />\r\n </div>\r\n\r\n {/* Actions Row - Simple mode */}\r\n <div className=\"flex gap-2\">\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n if (lightboxPrompt.trim() && !isGenerating) {\r\n handlePromptSubmit();\r\n }\r\n }}\r\n disabled={!lightboxPrompt.trim() || isGenerating}\r\n variant=\"ghost\"\r\n className=\"text-primary hover:text-primary/80 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title=\"Generate (Enter to submit)\"\r\n >\r\n {isGenerating ? (\r\n <div className=\"animate-spin rounded-full h-5 w-5 border-2 border-primary border-t-transparent\"></div>\r\n ) : (\r\n <ArrowUp size={20} className=\"md:w-5 md:h-5\" />\r\n )}\r\n </Button>\r\n {showPublish && (\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handlePublishClick();\r\n }}\r\n disabled={isPublishing}\r\n variant=\"ghost\"\r\n className=\"text-green-500 hover:text-green-400 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title=\"Publish to gallery\"\r\n >\r\n {isPublishing ? (\r\n <div className=\"animate-spin rounded-full h-5 w-5 border-2 border-green-500 border-t-transparent\"></div>\r\n ) : (\r\n <Save size={20} className=\"md:w-5 md:h-5\" />\r\n )}\r\n </Button>\r\n )}\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setShowPromptField(false);\r\n }}\r\n variant=\"ghost\"\r\n className=\"text-white/60 hover:text-white p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title={translate(\"Hide prompt\")}\r\n type=\"button\"\r\n >\r\n <ArrowDown size={20} className=\"md:w-5 md:h-5\" />\r\n </Button>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n {/* Prompt Toggle Button - shown when prompt is hidden */}\r\n {\r\n showPrompt && !showPromptField && lightboxLoaded && (\r\n <div className=\"absolute bottom-4 left-1/2 transform -translate-x-1/2 z-50\">\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setShowPromptField(true);\r\n }}\r\n className=\"bg-primary/80 hover:bg-primary text-primary-foreground p-2 rounded-full shadow-lg transition-all duration-200 hover:scale-110\"\r\n title=\"Show prompt field (Space)\"\r\n >\r\n <Wand2 size={20} />\r\n </button>\r\n </div>\r\n )\r\n }\r\n\r\n {/* Info Popup */}\r\n {\r\n showInfoPopup && lightboxLoaded && showPromptField && (\r\n <div\r\n className=\"absolute bottom-16 left-1/2 transform -translate-x-1/2 bg-black/80 backdrop-blur-md text-white px-4 py-3 rounded-lg text-sm max-w-md text-center border border-white/20 z-50\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {isPublishing ? (\r\n <div className=\"flex items-center justify-center gap-2\">\r\n <div className=\"animate-spin rounded-full h-3 w-3 border-2 border-white border-t-transparent\"></div>\r\n <span>Publishing... • ESC to close</span>\r\n </div>\r\n ) : (\r\n <div className=\"space-y-2\">\r\n <div className=\"font-medium\">{imageTitle}</div>\r\n {currentIndex !== undefined && totalCount !== undefined && (\r\n <div className=\"text-white/80 text-xs\">{currentIndex + 1} of {totalCount}</div>\r\n )}\r\n <div className=\"text-white/70 text-xs space-y-1\">\r\n <div>• Enter: generate</div>\r\n <div>• Space/Click: hide prompt</div>\r\n {showWizardFeatures && promptHistory.length > 0 && (\r\n <div>• Ctrl+↑↓: prompt history</div>\r\n )}\r\n {onNavigate && totalCount && totalCount > 1 && (\r\n <div>• ← → keys or swipe: navigate</div>\r\n )}\r\n <div>• ESC: close lightbox</div>\r\n </div>\r\n </div>\r\n )}\r\n {/* Close popup when clicking outside */}\r\n <div\r\n className=\"fixed inset-0 z-[-1]\"\r\n onClick={() => setShowInfoPopup(false)}\r\n />\r\n </div>\r\n )\r\n }\r\n </div >\r\n\r\n <PublishDialog\r\n isOpen={showPublishDialog}\r\n onClose={() => setShowPublishDialog(false)}\r\n onPublish={handlePublish}\r\n originalTitle={imageTitle}\r\n originalImageId={originalImageId}\r\n isPublishing={isPublishing}\r\n />\r\n </div >\r\n );\r\n}\r\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n React.useCallback(() => selector(api.getState()), [api, selector]),\n React.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...args) => api.dispatch(...args), ...initial };\n};\nconst redux = reduxImpl;\n\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api) return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst removeStoreFromTrackedConnections = (name, store) => {\n if (store === void 0) return;\n const connectionInfo = trackedConnections.get(name);\n if (!connectionInfo) return;\n delete connectionInfo.stores[store];\n if (Object.keys(connectionInfo.stores).length === 0) {\n trackedConnections.delete(name);\n }\n};\nconst findCallerName = (stack) => {\n var _a, _b;\n if (!stack) return void 0;\n const traceLines = stack.split(\"\\n\");\n const apiSetStateLineIndex = traceLines.findIndex(\n (traceLine) => traceLine.includes(\"api.setState\")\n );\n if (apiSetStateLineIndex < 0) return void 0;\n const callerLine = ((_a = traceLines[apiSetStateLineIndex + 1]) == null ? void 0 : _a.trim()) || \"\";\n return (_b = /.+ (.+) .+/.exec(callerLine)) == null ? void 0 : _b[1];\n};\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = ((state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording) return r;\n const action = nameOrAction === void 0 ? {\n type: anonymousActionType || findCallerName(new Error().stack) || \"anonymous\"\n } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n });\n api.devtools = {\n cleanup: () => {\n if (connection && typeof connection.unsubscribe === \"function\") {\n connection.unsubscribe();\n }\n removeStoreFromTrackedConnections(options.name, store);\n }\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (api.dispatchFromDevtools && typeof api.dispatch === \"function\") {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...args) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && args[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...args);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format.\n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (!api.dispatchFromDevtools) return;\n if (typeof api.dispatch !== \"function\") return;\n api.dispatch(action);\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState) return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, fn) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0) fn(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = ((selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n });\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nfunction combine(initialState, create) {\n return (...args) => Object.assign({}, initialState, create(...args));\n}\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(name, JSON.stringify(newValue, options == null ? void 0 : options.replacer)),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst persistImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n let hydrationVersion = 0;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n return setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n return setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage) return;\n const currentVersion = ++hydrationVersion;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n const migration = options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n if (migration instanceof Promise) {\n return migration.then((result) => [true, result]);\n }\n return [true, migration];\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return [false, deserializedStorageValue.state];\n }\n }\n return [false, void 0];\n }).then((migrationResult) => {\n var _a2;\n if (currentVersion !== hydrationVersion) {\n return;\n }\n const [migrated, migratedState] = migrationResult;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n if (migrated) {\n return setItem();\n }\n }).then(() => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persist = persistImpl;\n\nfunction ssrSafe(config, isSSR = typeof window === \"undefined\") {\n return (set, get, api) => {\n if (!isSSR) {\n return config(set, get, api);\n }\n const ssrSet = () => {\n throw new Error(\"Cannot set state of Zustand store in SSR\");\n };\n api.setState = ssrSet;\n return config(ssrSet, get, api);\n };\n}\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector, ssrSafe as unstable_ssrSafe };\n","import { create } from 'zustand';\r\nimport { persist, createJSONStorage } from 'zustand/middleware';\r\n\r\n// Types\r\nexport interface NavigationPost {\r\n id: string;\r\n title: string;\r\n image_url: string;\r\n user_id: string;\r\n}\r\n\r\nexport interface NavigationData {\r\n posts: NavigationPost[];\r\n currentIndex: number;\r\n source: 'home' | 'collection' | 'tag' | 'search' | 'user' | 'photogrid';\r\n sourceId?: string;\r\n}\r\n\r\nexport interface NavigationHistory {\r\n path: string;\r\n data: NavigationData;\r\n timestamp: number;\r\n}\r\n\r\nexport interface WizardInitialImage {\r\n id: string;\r\n src: string;\r\n title: string;\r\n realDatabaseId?: string;\r\n selected: boolean;\r\n}\r\n\r\ninterface NavigationStore {\r\n // Current navigation state\r\n navigationData: NavigationData | null;\r\n\r\n // Navigation history stack\r\n history: NavigationHistory[];\r\n\r\n // Wizard state (replaces sessionStorage)\r\n wizardInitialImage: WizardInitialImage | null;\r\n wizardReturnPath: string | null;\r\n\r\n // Global Creation Wizard state\r\n creationWizardOpen: boolean;\r\n creationWizardMode: 'default' | 'page'; // Add more modes if needed\r\n\r\n // Actions\r\n setNavigationData: (data: NavigationData | null) => void;\r\n updateCurrentIndex: (index: number) => void;\r\n\r\n // History management\r\n pushHistory: (path: string, data: NavigationData) => void;\r\n popHistory: () => NavigationHistory | null;\r\n clearHistory: () => void;\r\n canGoBack: () => boolean;\r\n\r\n // Wizard actions\r\n setWizardImage: (image: WizardInitialImage | null, returnPath?: string) => void;\r\n clearWizardImage: () => void;\r\n setCreationWizardOpen: (open: boolean, mode?: 'default' | 'page') => void;\r\n\r\n // Preloading\r\n preloadImage: (url: string) => void;\r\n\r\n // Reset all\r\n reset: () => void;\r\n}\r\n\r\n// Preload image helper\r\nconst preloadImageHelper = (url: string) => {\r\n if (!url) return;\r\n const img = new Image();\r\n img.src = url;\r\n};\r\n\r\nexport const useNavigationStore = create<NavigationStore>()(\r\n persist(\r\n (set, get) => ({\r\n // Initial state\r\n navigationData: null,\r\n history: [],\r\n wizardInitialImage: null,\r\n wizardReturnPath: null,\r\n creationWizardOpen: false,\r\n creationWizardMode: 'default',\r\n\r\n // Set navigation data\r\n setNavigationData: (data) => {\r\n set({ navigationData: data });\r\n },\r\n\r\n // Update just the current index (faster than full data update)\r\n updateCurrentIndex: (index) => {\r\n const current = get().navigationData;\r\n if (current) {\r\n set({\r\n navigationData: { ...current, currentIndex: index }\r\n });\r\n }\r\n },\r\n\r\n // Push navigation to history stack\r\n pushHistory: (path, data) => {\r\n const state = get();\r\n const newHistory = [...state.history, {\r\n path,\r\n data,\r\n timestamp: Date.now()\r\n }];\r\n\r\n // Limit history to 50 entries\r\n const limitedHistory = newHistory.slice(-50);\r\n\r\n set({\r\n history: limitedHistory,\r\n navigationData: data\r\n });\r\n },\r\n\r\n // Pop from history stack\r\n popHistory: () => {\r\n const state = get();\r\n if (state.history.length === 0) return null;\r\n\r\n const newHistory = [...state.history];\r\n const previous = newHistory.pop()!;\r\n\r\n const previousData = newHistory.length > 0\r\n ? newHistory[newHistory.length - 1].data\r\n : null;\r\n\r\n set({\r\n history: newHistory,\r\n navigationData: previousData\r\n });\r\n\r\n return previous;\r\n },\r\n\r\n // Clear history\r\n clearHistory: () => {\r\n set({ history: [] });\r\n },\r\n\r\n // Check if can go back\r\n canGoBack: () => {\r\n return get().history.length > 1;\r\n },\r\n\r\n // Set wizard image (replaces sessionStorage)\r\n setWizardImage: (image, returnPath) => {\r\n set({\r\n wizardInitialImage: image,\r\n wizardReturnPath: returnPath || null\r\n });\r\n },\r\n\r\n // Clear wizard image\r\n clearWizardImage: () => {\r\n set({\r\n wizardInitialImage: null,\r\n wizardReturnPath: null\r\n });\r\n },\r\n\r\n // Set global creation wizard open state\r\n setCreationWizardOpen: (open, mode = 'default') => {\r\n set({\r\n creationWizardOpen: open,\r\n creationWizardMode: mode\r\n });\r\n },\r\n\r\n // Preload image\r\n preloadImage: (url) => {\r\n preloadImageHelper(url);\r\n },\r\n\r\n // Reset entire store\r\n reset: () => {\r\n set({\r\n navigationData: null,\r\n history: [],\r\n wizardInitialImage: null,\r\n wizardReturnPath: null,\r\n creationWizardOpen: false,\r\n creationWizardMode: 'default'\r\n });\r\n }\r\n }),\r\n {\r\n name: 'pm-pics-navigation', // localStorage key\r\n storage: createJSONStorage(() => localStorage), // Use localStorage\r\n\r\n // Only persist certain fields (not history - too large)\r\n partialize: (state) => ({\r\n navigationData: state.navigationData,\r\n wizardInitialImage: state.wizardInitialImage,\r\n wizardReturnPath: state.wizardReturnPath,\r\n // Don't persist history - it's too large and not needed across sessions\r\n }),\r\n\r\n // Version for migrations\r\n version: 1,\r\n\r\n // Skip hydration on server (if using SSR)\r\n skipHydration: false,\r\n }\r\n )\r\n);\r\n\r\n// Selectors for better performance (only re-render when needed)\r\nexport const selectNavigationData = (state: NavigationStore) => state.navigationData;\r\nexport const selectCurrentIndex = (state: NavigationStore) => state.navigationData?.currentIndex;\r\nexport const selectPosts = (state: NavigationStore) => state.navigationData?.posts;\r\nexport const selectCanGoBack = (state: NavigationStore) => state.canGoBack();\r\nexport const selectWizardImage = (state: NavigationStore) => state.wizardInitialImage;\r\nexport const selectWizardReturnPath = (state: NavigationStore) => state.wizardReturnPath;\r\nexport const selectCreationWizardOpen = (state: NavigationStore) => state.creationWizardOpen;\r\nexport const selectCreationWizardMode = (state: NavigationStore) => state.creationWizardMode;\r\n\r\n","/**\r\n * useWizardContext Hook\r\n * \r\n * Replaces sessionStorage for wizard initial image and return path\r\n * Uses Zustand store with localStorage persistence\r\n */\r\n\r\nimport { useNavigationStore, selectWizardImage, selectWizardReturnPath } from '@/stores/navigationStore';\r\n\r\nexport const useWizardContext = () => {\r\n const wizardInitialImage = useNavigationStore(selectWizardImage);\r\n const wizardReturnPath = useNavigationStore(selectWizardReturnPath);\r\n const setWizardImage = useNavigationStore((state) => state.setWizardImage);\r\n const clearWizardImage = useNavigationStore((state) => state.clearWizardImage);\r\n\r\n const creationWizardOpen = useNavigationStore((state) => state.creationWizardOpen);\r\n const creationWizardMode = useNavigationStore((state) => state.creationWizardMode);\r\n const setCreationWizardOpen = useNavigationStore((state) => state.setCreationWizardOpen);\r\n\r\n return {\r\n wizardInitialImage,\r\n wizardReturnPath,\r\n setWizardImage,\r\n clearWizardImage,\r\n creationWizardOpen,\r\n creationWizardMode,\r\n setCreationWizardOpen,\r\n };\r\n};\r\n\r\nexport default useWizardContext;\r\n\r\n","import React from \"react\";\nimport { Wand2 } from \"lucide-react\";\nimport { Button } from \"@/components/ui/button\";\nimport { useAuth } from \"@/hooks/useAuth\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useWizardContext } from \"@/hooks/useWizardContext\";\nimport { toast } from \"sonner\";\nimport { translate } from \"@/i18n\";\n\ninterface MagicWizardButtonProps {\n imageUrl: string;\n imageTitle: string;\n className?: string;\n size?: \"sm\" | \"default\" | \"lg\" | \"icon\";\n variant?: \"default\" | \"ghost\" | \"outline\";\n onClick?: (e: React.MouseEvent) => void;\n editingPostId?: string | null; // Explicitly pass the post ID if known, or null to prevent auto-detection\n pictureId?: string; // Explicitly pass the picture ID if known\n children?: React.ReactNode;\n}\n\nconst MagicWizardButton: React.FC<MagicWizardButtonProps> = ({\n imageUrl,\n imageTitle,\n className = \"\",\n size = \"sm\",\n variant = \"ghost\",\n onClick,\n editingPostId: explicitPostId,\n pictureId: explicitPictureId,\n children\n}) => {\n const { user } = useAuth();\n const navigate = useNavigate();\n const { setWizardImage } = useWizardContext();\n\n const handleClick = async (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (onClick) {\n onClick(e);\n return;\n }\n\n if (!user) {\n toast.error(translate('Please sign in to use the AI wizard'));\n return;\n }\n\n // Get the real picture ID from the URL path if available\n const urlPath = window.location.pathname;\n\n // Check if we are in a post context\n // If explicitPostId is provided (even as null), use it.\n // If it is undefined, try to infer from URL.\n let editingPostId: string | null = null;\n\n if (explicitPostId !== undefined) {\n editingPostId = explicitPostId;\n } else {\n const postMatch = urlPath.match(/\\/post\\/([a-f0-9-]{36})/);\n if (postMatch) {\n editingPostId = postMatch[1];\n }\n }\n\n let realPictureId = explicitPictureId || null;\n\n // Only try to guess from URL if explicitPictureId is not provided\n if (!realPictureId) {\n const pictureIdMatch = urlPath.match(/\\/post\\/([a-f0-9-]{36})/);\n realPictureId = pictureIdMatch ? pictureIdMatch[1] : null;\n }\n\n const imageData = {\n id: realPictureId || `external-${Date.now()}`,\n src: imageUrl,\n title: imageTitle,\n selected: true,\n realDatabaseId: realPictureId // Store the real database ID separately\n };\n // Store in Zustand (replaces sessionStorage) with return path\n setWizardImage(imageData, window.location.pathname);\n // Navigate to wizard\n // Note: navigationData is now maintained by Zustand - no manual storage needed!\n navigate('/wizard', {\n state: {\n mode: 'default', // Keep default mode but passing editingPostId allows \"Add to Post\"\n editingPostId: editingPostId\n }\n });\n };\n\n // Don't render if user is not logged in\n if (!user) {\n return null;\n }\n\n return (\n <Button\n size={size}\n variant={variant}\n onClick={handleClick}\n className={`${className?.includes('p-0')\n ? 'text-foreground hover:text-primary transition-colors'\n : 'text-foreground hover:text-primary transition-colors'\n } ${className}`}\n title={translate(\"Edit with AI Wizard\")}\n >\n <Wand2 className={`${size === 'sm' ? 'h-6 w-6' : 'h-5 w-5'} ${className?.includes('p-0') ? '' : 'mr-1'} drop-shadow-sm`} />\n {children}\n </Button>\n );\n};\n\nexport default MagicWizardButton;","/**\n * Download an image from a URL or data URI\n */\nexport const downloadImage = async (imageUrl: string, filename?: string) => {\n try {\n // If it's a data URI, download directly\n if (imageUrl.startsWith('data:')) {\n downloadFromDataUri(imageUrl, filename);\n return;\n }\n\n // For external URLs, fetch and download\n const response = await fetch(imageUrl, { mode: 'cors' });\n if (!response.ok) throw new Error('Failed to fetch image');\n \n const blob = await response.blob();\n const url = window.URL.createObjectURL(blob);\n \n // Extract filename from URL or use provided filename\n const defaultFilename = filename || extractFilenameFromUrl(imageUrl) || 'image.jpg';\n \n downloadFromUrl(url, defaultFilename);\n window.URL.revokeObjectURL(url);\n } catch (error) {\n console.error('Error downloading image:', error);\n // Fallback: try to open image in new tab\n window.open(imageUrl, '_blank');\n }\n};\n\n/**\n * Download from data URI\n */\nconst downloadFromDataUri = (dataUri: string, filename?: string) => {\n const link = document.createElement('a');\n link.href = dataUri;\n link.download = filename || 'image.png';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n};\n\n/**\n * Download from blob URL\n */\nconst downloadFromUrl = (url: string, filename: string) => {\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n};\n\n/**\n * Extract filename from URL\n */\nconst extractFilenameFromUrl = (url: string): string | null => {\n try {\n const urlObj = new URL(url);\n const pathname = urlObj.pathname;\n const filename = pathname.substring(pathname.lastIndexOf('/') + 1);\n return filename && filename.includes('.') ? filename : null;\n } catch {\n return null;\n }\n};\n\n/**\n * Generate a filename based on title and timestamp\n */\nexport const generateFilename = (title?: string, extension = 'jpg'): string => {\n const timestamp = new Date().toISOString().slice(0, 19).replace(/:/g, '-');\n const cleanTitle = title \n ? title.replace(/[^a-zA-Z0-9\\s-_]/g, '').replace(/\\s+/g, '-').toLowerCase()\n : 'image';\n \n return `${cleanTitle}-${timestamp}.${extension}`;\n};","import { createContext, useContext, useState, ReactNode } from 'react';\r\n\r\nimport { PostNavigationData } from '../types';\r\n\r\ninterface PostNavigationContextType {\r\n navigationData: PostNavigationData | null;\r\n setNavigationData: (data: PostNavigationData | null) => void;\r\n preloadedImages: Map<string, boolean>;\r\n preloadImage: (imageUrl: string) => void;\r\n}\r\n\r\nconst PostNavigationContext = createContext<PostNavigationContextType | undefined>(undefined);\r\n\r\nexport const usePostNavigation = () => {\r\n const context = useContext(PostNavigationContext);\r\n if (context === undefined) {\r\n throw new Error('usePostNavigation must be used within a PostNavigationProvider');\r\n }\r\n return context;\r\n};\r\n\r\ninterface PostNavigationProviderProps {\r\n children: ReactNode;\r\n}\r\n\r\nexport const PostNavigationProvider = ({ children }: PostNavigationProviderProps) => {\r\n const [navigationData, setNavigationData] = useState<PostNavigationData | null>(null);\r\n const [preloadedImages, setPreloadedImages] = useState<Map<string, boolean>>(new Map());\r\n\r\n const preloadImage = (imageUrl: string) => {\r\n if (preloadedImages.has(imageUrl)) return;\r\n\r\n const img = new Image();\r\n img.onload = () => {\r\n setPreloadedImages(prev => new Map(prev).set(imageUrl, true));\r\n };\r\n img.onerror = () => {\r\n setPreloadedImages(prev => new Map(prev).set(imageUrl, false));\r\n };\r\n img.src = imageUrl;\r\n };\r\n\r\n return (\r\n <PostNavigationContext.Provider\r\n value={{\r\n navigationData,\r\n setNavigationData,\r\n preloadedImages,\r\n preloadImage,\r\n }}\r\n >\r\n {children}\r\n </PostNavigationContext.Provider>\r\n );\r\n};\r\n","\r\n/**\r\n * Formats a date string to a relative time (e.g. \"5m ago\", \"2h ago\", \"3d ago\")\r\n * if less than 7 days, otherwise returns a short date (e.g. \"Oct 24\").\r\n */\r\nexport const formatDate = (dateStr?: string) => {\r\n if (!dateStr) return '';\r\n const date = new Date(dateStr);\r\n const now = new Date();\r\n const diff = now.getTime() - date.getTime();\r\n const days = Math.floor(diff / (1000 * 60 * 60 * 24));\r\n\r\n if (days < 7) {\r\n if (days === 0) {\r\n const hours = Math.floor(diff / (1000 * 60 * 60));\r\n if (hours === 0) {\r\n const minutes = Math.floor(diff / (1000 * 60));\r\n return `${minutes}m ago`;\r\n }\r\n return `${hours}h ago`;\r\n }\r\n return `${days}d ago`;\r\n }\r\n return date.toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\r\n};\r\n\r\n/**\r\n * Checks if a title string looks like a filename.\r\n * Used to hide titles that aren't meaningful user descriptions.\r\n */\r\nexport const isLikelyFilename = (title: string) => {\r\n if (!title) return false;\r\n\r\n // Check for common file extensions\r\n // Expanded list to catch more cases\r\n if (/\\.(jpg|jpeg|png|gif|webp|mp4|mov|avi|mkv|webm|heic|tiff|bmp|svg)$/i.test(title)) return true;\r\n\r\n // Check for date-like filenames (e.g. 2023-10-24, IMG_2023...)\r\n if (/^[\\d_-]+$/.test(title)) return true; // Only numbers, dashes, underscores\r\n if (/^(IMG|VID|DSC|P|MOV)[\\d_-]+/i.test(title)) return true; // Camera prefixes\r\n if (/^\\d{4}[-_]\\d{2}[-_]\\d{2}/.test(title)) return true; // Date start\r\n\r\n // Check for screenshot patterns\r\n if (/^Screenshot_/.test(title)) return true;\r\n if (/^Screen\\s?Shot/.test(title)) return true;\r\n\r\n return false;\r\n};\r\n","// src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n Context.displayName = rootComponentName + \"Context\";\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n BaseContext.displayName = rootComponentName + \"Context\";\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n ));\n var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","// src/use-is-hydrated.tsx\nimport { useSyncExternalStore } from \"use-sync-external-store/shim\";\nfunction useIsHydrated() {\n return useSyncExternalStore(\n subscribe,\n () => true,\n () => false\n );\n}\nfunction subscribe() {\n return () => {\n };\n}\nexport {\n useIsHydrated\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/avatar.tsx\nimport * as React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useIsHydrated } from \"@radix-ui/react-use-is-hydrated\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AVATAR_NAME = \"Avatar\";\nvar [createAvatarContext, createAvatarScope] = createContextScope(AVATAR_NAME);\nvar [AvatarProvider, useAvatarContext] = createAvatarContext(AVATAR_NAME);\nvar Avatar = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAvatar, ...avatarProps } = props;\n const [imageLoadingStatus, setImageLoadingStatus] = React.useState(\"idle\");\n return /* @__PURE__ */ jsx(\n AvatarProvider,\n {\n scope: __scopeAvatar,\n imageLoadingStatus,\n onImageLoadingStatusChange: setImageLoadingStatus,\n children: /* @__PURE__ */ jsx(Primitive.span, { ...avatarProps, ref: forwardedRef })\n }\n );\n }\n);\nAvatar.displayName = AVATAR_NAME;\nvar IMAGE_NAME = \"AvatarImage\";\nvar AvatarImage = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAvatar, src, onLoadingStatusChange = () => {\n }, ...imageProps } = props;\n const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);\n const imageLoadingStatus = useImageLoadingStatus(src, imageProps);\n const handleLoadingStatusChange = useCallbackRef((status) => {\n onLoadingStatusChange(status);\n context.onImageLoadingStatusChange(status);\n });\n useLayoutEffect(() => {\n if (imageLoadingStatus !== \"idle\") {\n handleLoadingStatusChange(imageLoadingStatus);\n }\n }, [imageLoadingStatus, handleLoadingStatusChange]);\n return imageLoadingStatus === \"loaded\" ? /* @__PURE__ */ jsx(Primitive.img, { ...imageProps, ref: forwardedRef, src }) : null;\n }\n);\nAvatarImage.displayName = IMAGE_NAME;\nvar FALLBACK_NAME = \"AvatarFallback\";\nvar AvatarFallback = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAvatar, delayMs, ...fallbackProps } = props;\n const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);\n const [canRender, setCanRender] = React.useState(delayMs === void 0);\n React.useEffect(() => {\n if (delayMs !== void 0) {\n const timerId = window.setTimeout(() => setCanRender(true), delayMs);\n return () => window.clearTimeout(timerId);\n }\n }, [delayMs]);\n return canRender && context.imageLoadingStatus !== \"loaded\" ? /* @__PURE__ */ jsx(Primitive.span, { ...fallbackProps, ref: forwardedRef }) : null;\n }\n);\nAvatarFallback.displayName = FALLBACK_NAME;\nfunction resolveLoadingStatus(image, src) {\n if (!image) {\n return \"idle\";\n }\n if (!src) {\n return \"error\";\n }\n if (image.src !== src) {\n image.src = src;\n }\n return image.complete && image.naturalWidth > 0 ? \"loaded\" : \"loading\";\n}\nfunction useImageLoadingStatus(src, { referrerPolicy, crossOrigin }) {\n const isHydrated = useIsHydrated();\n const imageRef = React.useRef(null);\n const image = (() => {\n if (!isHydrated) return null;\n if (!imageRef.current) {\n imageRef.current = new window.Image();\n }\n return imageRef.current;\n })();\n const [loadingStatus, setLoadingStatus] = React.useState(\n () => resolveLoadingStatus(image, src)\n );\n useLayoutEffect(() => {\n setLoadingStatus(resolveLoadingStatus(image, src));\n }, [image, src]);\n useLayoutEffect(() => {\n const updateStatus = (status) => () => {\n setLoadingStatus(status);\n };\n if (!image) return;\n const handleLoad = updateStatus(\"loaded\");\n const handleError = updateStatus(\"error\");\n image.addEventListener(\"load\", handleLoad);\n image.addEventListener(\"error\", handleError);\n if (referrerPolicy) {\n image.referrerPolicy = referrerPolicy;\n }\n if (typeof crossOrigin === \"string\") {\n image.crossOrigin = crossOrigin;\n }\n return () => {\n image.removeEventListener(\"load\", handleLoad);\n image.removeEventListener(\"error\", handleError);\n };\n }, [image, crossOrigin, referrerPolicy]);\n return loadingStatus;\n}\nvar Root = Avatar;\nvar Image = AvatarImage;\nvar Fallback = AvatarFallback;\nexport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n Fallback,\n Image,\n Root,\n createAvatarScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\", className)}\n {...props}\n />\n));\nAvatar.displayName = AvatarPrimitive.Root.displayName;\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image ref={ref} className={cn(\"aspect-square h-full w-full\", className)} {...props} />\n));\nAvatarImage.displayName = AvatarPrimitive.Image.displayName;\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\"flex h-full w-full items-center justify-center rounded-full bg-muted\", className)}\n {...props}\n />\n));\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\n\nexport { Avatar, AvatarImage, AvatarFallback };\n","import React, { createContext, useContext, useState, useEffect, useCallback } from 'react';\r\nimport { supabase } from \"@/integrations/supabase/client\";\r\nimport { UserProfile } from \"@/pages/Post/types\";\r\n\r\ninterface ProfilesContextType {\r\n profiles: Record<string, UserProfile>;\r\n fetchProfile: (userId: string) => Promise<UserProfile | null>;\r\n fetchProfiles: (userIds: string[]) => Promise<void>;\r\n isLoading: boolean;\r\n}\r\n\r\nconst ProfilesContext = createContext<ProfilesContextType | undefined>(undefined);\r\n\r\nexport const ProfilesProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\r\n const [profiles, setProfiles] = useState<Record<string, UserProfile>>({});\r\n const [isLoading, setIsLoading] = useState(false);\r\n const fetchedIds = React.useRef<Set<string>>(new Set());\r\n const profilesRef = React.useRef(profiles);\r\n\r\n // Keep ref in sync\r\n useEffect(() => {\r\n profilesRef.current = profiles;\r\n }, [profiles]);\r\n\r\n const fetchProfiles = useCallback(async (userIds: string[]) => {\r\n // Filter out existing AND already requested to prevent loops\r\n const missingIds = userIds.filter(id => !fetchedIds.current.has(id) && !profilesRef.current[id]);\r\n const uniqueMissingIds = Array.from(new Set(missingIds));\r\n if (uniqueMissingIds.length === 0) return;\r\n // Mark as fetched immediately to prevent re-entry\r\n uniqueMissingIds.forEach(id => fetchedIds.current.add(id));\r\n setIsLoading(true);\r\n try {\r\n // Use the new batch API endpoint\r\n const SERVER_URL = import.meta.env.VITE_SERVER_IMAGE_API_URL;\r\n const res = await fetch(`${SERVER_URL}/api/profiles?ids=${uniqueMissingIds.join(',')}`);\r\n if (!res.ok) {\r\n console.error('Error fetching profiles context:', res.statusText);\r\n return;\r\n }\r\n\r\n const data: Record<string, UserProfile> = await res.json();\r\n\r\n if (data) {\r\n setProfiles(prev => {\r\n const next = { ...prev, ...data };\r\n // If any IDs are missing from response, we might want to mark them as 'not found' \r\n // to prevent refetch loops, but for now we trust the server response map.\r\n return next;\r\n });\r\n }\r\n } catch (e) {\r\n console.error('Error in fetchProfiles context:', e);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n }, []); // Stable callback\r\n\r\n // but ideally remove it if logic allows. \r\n // Since we check !profiles[id], we depend on it. \r\n // However, fetchedIds prevents the loop even if profiles is stale.\r\n\r\n const fetchProfile = useCallback(async (userId: string) => {\r\n if (profiles[userId]) return profiles[userId];\r\n\r\n await fetchProfiles([userId]);\r\n return profiles[userId] || null;\r\n }, [profiles, fetchProfiles]);\r\n\r\n return (\r\n <ProfilesContext.Provider value={{ profiles, fetchProfile, fetchProfiles, isLoading }}>\r\n {children}\r\n </ProfilesContext.Provider>\r\n );\r\n};\r\n\r\nexport const useProfiles = () => {\r\n const context = useContext(ProfilesContext);\r\n if (context === undefined) {\r\n throw new Error('useProfiles must be used within a ProfilesProvider');\r\n }\r\n return context;\r\n};\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { User as UserIcon } from \"lucide-react\";\r\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\";\r\nimport { useNavigate } from \"react-router-dom\";\r\nimport { useProfiles } from \"@/contexts/ProfilesContext\";\r\n\r\ninterface UserAvatarBlockProps {\r\n userId: string;\r\n avatarUrl?: string | null;\r\n displayName?: string | null;\r\n createdAt?: string;\r\n className?: string;\r\n showDate?: boolean;\r\n onClick?: (e: React.MouseEvent) => void;\r\n hoverStyle?: boolean;\r\n textSize?: \"xs\" | \"sm\" | \"base\";\r\n}\r\n\r\nconst UserAvatarBlock: React.FC<UserAvatarBlockProps> = ({\r\n userId,\r\n avatarUrl,\r\n displayName,\r\n createdAt,\r\n className = \"w-8 h-8\",\r\n showDate = true,\r\n onClick,\r\n hoverStyle = false,\r\n textSize = \"sm\"\r\n}) => {\r\n const navigate = useNavigate();\r\n const { profiles, fetchProfile } = useProfiles();\r\n\r\n // Use prop if available, otherwise look up in context\r\n const profile = profiles[userId];\r\n const effectiveAvatarUrl = avatarUrl || profile?.avatar_url;\r\n\r\n // Prefer prop displayName if truthy (e.g. override), else usage context\r\n const effectiveDisplayName = displayName || profile?.display_name || `User ${userId.slice(0, 8)}`;\r\n\r\n useEffect(() => {\r\n // If we don't have the profile in context, ask for it\r\n if (!profile) {\r\n fetchProfile(userId);\r\n }\r\n }, [userId, profile, fetchProfile]);\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n if (onClick) {\r\n onClick(e);\r\n return;\r\n }\r\n e.stopPropagation();\r\n window.location.href = `/user/${userId}`;\r\n };\r\n\r\n const nameClass = hoverStyle\r\n ? `text-white text-${textSize} font-medium hover:underline cursor-pointer`\r\n : `font-semibold hover:underline text-${textSize}`;\r\n\r\n const dateClass = hoverStyle\r\n ? \"text-white/60 text-xs\"\r\n : \"text-xs text-muted-foreground\";\r\n\r\n return (\r\n <div className=\"flex items-center space-x-2\" onClick={handleClick}>\r\n <Avatar className={`${className} bg-background hover:scale-105 transition-transform cursor-pointer`}>\r\n <AvatarImage src={effectiveAvatarUrl || undefined} alt={effectiveDisplayName || \"Avatar\"} className=\"object-cover\" />\r\n <AvatarFallback className=\"bg-gradient-to-br from-purple-500 to-indigo-600 text-white\">\r\n <UserIcon className=\"h-1/2 w-1/2\" />\r\n </AvatarFallback>\r\n </Avatar>\r\n <div className=\"flex flex-col min-w-0\">\r\n <span className={nameClass}>\r\n {effectiveDisplayName}\r\n </span>\r\n {showDate && createdAt && (\r\n <span className={dateClass}>\r\n {new Date(createdAt).toLocaleDateString()}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default UserAvatarBlock;\r\n","import { Heart, Download, Share2, User, MessageCircle, Edit3, Trash2, Maximize, Layers } from \"lucide-react\";\nimport { Button } from \"@/components/ui/button\";\nimport { supabase } from \"@/integrations/supabase/client\";\nimport { useAuth } from \"@/hooks/useAuth\";\nimport { toast } from \"sonner\";\nimport { useState, useEffect } from \"react\";\nimport MarkdownRenderer from \"@/components/MarkdownRenderer\";\nimport EditImageModal from \"@/components/EditImageModal\";\nimport ImageLightbox from \"@/components/ImageLightbox\";\nimport MagicWizardButton from \"@/components/MagicWizardButton\";\nimport { downloadImage, generateFilename } from \"@/utils/downloadUtils\";\nimport { editImage } from \"@/image-api\";\nimport { usePostNavigation } from \"@/contexts/PostNavigationContext\";\nimport { useNavigate } from \"react-router-dom\";\nimport ResponsiveImage from \"@/components/ResponsiveImage\";\nimport { T, translate } from \"@/i18n\";\nimport { isLikelyFilename, formatDate } from \"@/utils/textUtils\";\nimport UserAvatarBlock from \"@/components/UserAvatarBlock\";\n\ninterface PhotoCardProps {\n pictureId: string;\n image: string;\n title: string;\n author: string;\n authorId: string;\n likes: number;\n comments: number;\n isLiked?: boolean;\n description?: string | null;\n onClick?: (pictureId: string) => void;\n onLike?: () => void;\n onDelete?: () => void;\n isVid?: boolean;\n onEdit?: (pictureId: string) => void;\n createdAt?: string;\n authorAvatarUrl?: string | null;\n showContent?: boolean;\n responsive?: any;\n variant?: 'grid' | 'feed';\n apiUrl?: string;\n}\n\nconst PhotoCard = ({\n pictureId,\n image,\n title,\n author,\n authorId,\n likes,\n comments,\n isLiked = false,\n description,\n onClick,\n onLike,\n onDelete,\n isVid,\n onEdit,\n createdAt,\n authorAvatarUrl,\n showContent = true,\n responsive,\n variant = 'grid',\n apiUrl\n}: PhotoCardProps) => {\n const { user } = useAuth();\n const navigate = useNavigate();\n const { navigationData, setNavigationData, preloadImage } = usePostNavigation();\n const [localIsLiked, setLocalIsLiked] = useState(isLiked);\n const [localLikes, setLocalLikes] = useState(likes);\n const [showEditModal, setShowEditModal] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n const [showLightbox, setShowLightbox] = useState(false);\n const [isGenerating, setIsGenerating] = useState(false);\n const [isPublishing, setIsPublishing] = useState(false);\n const [generatedImageUrl, setGeneratedImageUrl] = useState<string | null>(null);\n const [versionCount, setVersionCount] = useState<number>(0);\n\n const isOwner = user?.id === authorId;\n\n // Fetch version count for owners only\n useEffect(() => {\n const fetchVersionCount = async () => {\n if (!isOwner || !user) return;\n\n try {\n // Count pictures that have this picture as parent OR pictures that share the same parent\n const { data: currentPicture } = await supabase\n .from('pictures')\n .select('parent_id')\n .eq('id', pictureId)\n .single();\n\n if (!currentPicture) return;\n\n let query = supabase\n .from('pictures')\n .select('id', { count: 'exact', head: true });\n\n if (currentPicture.parent_id) {\n // This is a version - count all versions with same parent_id + the parent itself\n query = query.or(`parent_id.eq.${currentPicture.parent_id},id.eq.${currentPicture.parent_id}`);\n } else {\n // This is the original - count this picture + all its versions\n query = query.or(`parent_id.eq.${pictureId},id.eq.${pictureId}`);\n }\n\n const { count } = await query;\n // console.log('Version count:', count);\n setVersionCount(count || 1);\n } catch (error) {\n console.error('Error fetching version count:', error);\n }\n };\n\n fetchVersionCount();\n }, [pictureId, isOwner, user]);\n\n const handleLike = async (e: React.MouseEvent) => {\n e.stopPropagation();\n\n if (!user) {\n toast.error(translate('Please sign in to like pictures'));\n return;\n }\n\n try {\n if (localIsLiked) {\n // Unlike\n const { error } = await supabase\n .from('likes')\n .delete()\n .eq('user_id', user.id)\n .eq('picture_id', pictureId);\n\n if (error) throw error;\n setLocalIsLiked(false);\n setLocalLikes(prev => prev - 1);\n } else {\n // Like\n const { error } = await supabase\n .from('likes')\n .insert([{ user_id: user.id, picture_id: pictureId }]);\n\n if (error) throw error;\n setLocalIsLiked(true);\n setLocalLikes(prev => prev + 1);\n }\n\n onLike?.();\n } catch (error) {\n console.error('Error toggling like:', error);\n toast.error(translate('Failed to update like'));\n }\n };\n const handleDelete = async (e: React.MouseEvent) => {\n e.stopPropagation();\n\n if (!user || !isOwner) {\n toast.error(translate('You can only delete your own images'));\n return;\n }\n\n if (!confirm(translate('Are you sure you want to delete this image? This action cannot be undone.'))) {\n return;\n }\n\n setIsDeleting(true);\n try {\n // First get the picture details for storage cleanup\n const { data: picture, error: fetchError } = await supabase\n .from('pictures')\n .select('image_url')\n .eq('id', pictureId)\n .single();\n\n if (fetchError) throw fetchError;\n\n // Delete from database (this will cascade delete likes and comments due to foreign keys)\n const { error: deleteError } = await supabase\n .from('pictures')\n .delete()\n .eq('id', pictureId);\n\n if (deleteError) throw deleteError;\n\n // Try to delete from storage as well\n if (picture?.image_url) {\n const urlParts = picture.image_url.split('/');\n const fileName = urlParts[urlParts.length - 1];\n const userIdFromUrl = urlParts[urlParts.length - 2];\n\n const { error: storageError } = await supabase.storage\n .from('pictures')\n .remove([`${userIdFromUrl}/${fileName}`]);\n\n if (storageError) {\n console.error('Error deleting from storage:', storageError);\n // Don't show error to user as the main deletion succeeded\n }\n }\n\n toast.success(translate('Image deleted successfully'));\n onDelete?.(); // Trigger refresh of the parent component\n } catch (error) {\n console.error('Error deleting image:', error);\n toast.error(translate('Failed to delete image'));\n } finally {\n setIsDeleting(false);\n }\n };\n\n const handleDownload = async () => {\n try {\n const filename = generateFilename(title);\n await downloadImage(image, filename);\n toast.success(translate('Image downloaded successfully'));\n } catch (error) {\n console.error('Error downloading image:', error);\n toast.error(translate('Failed to download image'));\n }\n };\n\n const handleLightboxOpen = () => {\n // Update current index in navigation data\n if (navigationData) {\n const currentIndex = navigationData.posts.findIndex(p => p.id === pictureId);\n if (currentIndex !== -1) {\n setNavigationData({\n ...navigationData,\n currentIndex\n });\n }\n }\n setShowLightbox(true);\n };\n\n const handleNavigate = (direction: 'prev' | 'next') => {\n if (!navigationData || !navigationData.posts.length) {\n toast.error(translate('No navigation data available'));\n return;\n }\n\n const newIndex = direction === 'next'\n ? navigationData.currentIndex + 1\n : navigationData.currentIndex - 1;\n\n if (newIndex >= 0 && newIndex < navigationData.posts.length) {\n const newPost = navigationData.posts[newIndex];\n setNavigationData({\n ...navigationData,\n currentIndex: newIndex\n });\n\n // Navigate to the new post\n navigate(`/post/${newPost.id}`);\n } else {\n toast.info(translate(direction === 'next' ? 'No next post available' : 'No previous post available'));\n }\n };\n\n const handlePreload = (direction: 'prev' | 'next') => {\n if (!navigationData) return;\n\n const targetIndex = direction === 'next'\n ? navigationData.currentIndex + 1\n : navigationData.currentIndex - 1;\n\n if (targetIndex >= 0 && targetIndex < navigationData.posts.length) {\n const targetPost = navigationData.posts[targetIndex];\n preloadImage(targetPost.image_url);\n }\n };\n\n const handlePromptSubmit = async (prompt: string) => {\n if (!prompt.trim()) {\n toast.error(translate('Please enter a prompt'));\n return;\n }\n\n setIsGenerating(true);\n try {\n // Convert image URL to File for API\n const response = await fetch(image);\n const blob = await response.blob();\n const file = new File([blob], title || 'image.png', {\n type: blob.type || 'image/png'\n });\n\n const result = await editImage(prompt, [file]);\n\n if (result) {\n // Convert ArrayBuffer to base64 data URL \n const uint8Array = new Uint8Array(result.imageData);\n const imageBlob = new Blob([uint8Array], { type: 'image/png' });\n const reader = new FileReader();\n\n reader.onload = () => {\n const dataUrl = reader.result as string;\n setGeneratedImageUrl(dataUrl);\n toast.success(translate('Image generated successfully!'));\n };\n\n reader.readAsDataURL(imageBlob);\n }\n } catch (error) {\n console.error('Error generating image:', error);\n toast.error(translate('Failed to generate image. Please check your Google API key.'));\n } finally {\n setIsGenerating(false);\n }\n };\n\n const handlePublish = async (option: 'overwrite' | 'new', imageUrl: string, newTitle: string, description?: string) => {\n if (!user) {\n toast.error(translate('Please sign in to publish images'));\n return;\n }\n\n setIsPublishing(true);\n try {\n // Convert data URL to blob for upload\n const response = await fetch(imageUrl);\n const blob = await response.blob();\n\n if (option === 'overwrite') {\n // Overwrite the existing image\n // First, get the current image URL to extract the file path\n const currentImageUrl = image;\n if (currentImageUrl.includes('supabase.co/storage/')) {\n const urlParts = currentImageUrl.split('/');\n const fileName = urlParts[urlParts.length - 1];\n const bucketPath = `${authorId}/${fileName}`;\n\n // Upload new image with same path (overwrite)\n const { error: uploadError } = await supabase.storage\n .from('pictures')\n .update(bucketPath, blob, {\n cacheControl: '0', // Disable caching to ensure immediate update\n upsert: true\n });\n\n if (uploadError) throw uploadError;\n\n toast.success(translate('Image updated successfully!'));\n } else {\n toast.error(translate('Cannot overwrite this image'));\n return;\n }\n } else {\n // Create new image\n const fileName = `${user.id}/${Date.now()}-generated.png`;\n const { data: uploadData, error: uploadError } = await supabase.storage\n .from('pictures')\n .upload(fileName, blob);\n\n if (uploadError) throw uploadError;\n\n // Get public URL\n const { data: { publicUrl } } = supabase.storage\n .from('pictures')\n .getPublicUrl(fileName);\n\n // Save to database\n const { error: dbError } = await supabase\n .from('pictures')\n .insert([{\n title: newTitle,\n description: description || translate('Generated from') + `: ${title}`,\n image_url: publicUrl,\n user_id: user.id\n }]);\n\n if (dbError) throw dbError;\n\n toast.success(translate('Image published to gallery!'));\n }\n\n setShowLightbox(false);\n setGeneratedImageUrl(null);\n\n // Trigger refresh if available\n onLike?.();\n } catch (error) {\n console.error('Error publishing image:', error);\n toast.error(translate('Failed to publish image'));\n } finally {\n setIsPublishing(false);\n }\n };\n\n const handleClick = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onClick?.(pictureId);\n };\n\n const handleCardClick = (e: React.MouseEvent) => {\n if (isVid) {\n handleLightboxOpen();\n } else {\n handleClick(e);\n }\n };\n\n return (\n <div\n data-testid=\"photo-card\"\n className=\"group relative overflow-hidden bg-card transition-all duration-300 cursor-pointer w-full\"\n onClick={handleCardClick}\n >\n {/* Image */}\n <div className={`${variant === 'grid' ? \"aspect-square\" : \"\"} overflow-hidden`}>\n <ResponsiveImage\n src={image}\n alt={title}\n className=\"w-full h-full\"\n imgClassName=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n sizes={variant === 'grid'\n ? \"(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw\"\n : \"100vw\"\n }\n responsiveSizes={variant === 'grid' ? [320, 640, 1024, 1280] : [640, 1024, 1280, 1920]} // 1920 added\n data={responsive}\n apiUrl={apiUrl}\n />\n </div>\n\n {/* Desktop Hover Overlay - hidden on mobile, and hidden in feed variant */}\n {showContent && variant === 'grid' && (\n <div className=\"hidden md:block absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none\">\n <div className=\"absolute bottom-0 left-0 right-0 p-4 pointer-events-auto\">\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"flex items-center space-x-2\">\n <UserAvatarBlock\n userId={authorId}\n avatarUrl={authorAvatarUrl}\n displayName={author}\n hoverStyle={true}\n showDate={false}\n />\n </div>\n <div className=\"flex items-center space-x-1\">\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={handleLike}\n className={`h-8 w-8 p-0 ${localIsLiked ? \"text-red-500\" : \"text-white hover:text-red-500\"\n }`}\n >\n <Heart className=\"h-4 w-4\" fill={localIsLiked ? \"currentColor\" : \"none\"} />\n </Button>\n {localLikes > 0 && <span className=\"text-white text-sm\">{localLikes}</span>}\n\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-8 w-8 p-0 text-white hover:text-blue-400 ml-2\"\n >\n <MessageCircle className=\"h-4 w-4\" />\n </Button>\n <span className=\"text-white text-sm\">{comments}</span>\n\n {isOwner && (\n <>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n if (onEdit) {\n onEdit(pictureId);\n } else {\n setShowEditModal(true);\n }\n }}\n className=\"h-8 w-8 p-0 text-white hover:text-green-400 ml-2\"\n >\n <Edit3 className=\"h-4 w-4\" />\n </Button>\n\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={handleDelete}\n disabled={isDeleting}\n className=\"h-8 w-8 p-0 text-white hover:text-red-400 ml-2\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n\n {versionCount > 1 && (\n <div className=\"flex items-center ml-2 px-2 py-1 bg-white/20 rounded text-white text-xs\">\n <Layers className=\"h-3 w-3 mr-1\" />\n {versionCount}\n </div>\n )}\n </>\n )}\n </div>\n </div>\n\n {!isLikelyFilename(title) && <h3 className=\"text-white font-medium mb-1\">{title}</h3>}\n {description && (\n <div className=\"text-white/80 text-sm mb-1 line-clamp-2 overflow-hidden\">\n <MarkdownRenderer content={description} className=\"prose-invert prose-white\" />\n </div>\n )}\n {createdAt && (\n <div className=\"text-white/60 text-xs mb-2\">\n {formatDate(createdAt)}\n </div>\n )}\n\n <div className=\"flex items-center space-x-1\">\n <Button\n size=\"sm\"\n variant=\"secondary\"\n className=\"h-6 px-2 text-xs bg-white/20 hover:bg-white/30 border-0 text-white\"\n onClick={(e) => {\n e.stopPropagation();\n handleDownload();\n }}\n >\n <Download className=\"h-3 w-3 mr-1\" />\n <T>Save</T>\n </Button>\n <Button\n size=\"sm\"\n variant=\"secondary\"\n className=\"h-6 w-6 p-0 bg-white/20 hover:bg-white/30 border-0 text-white\"\n onClick={(e) => {\n e.stopPropagation();\n handleLightboxOpen();\n }}\n title=\"View in lightbox\"\n >\n <Maximize className=\"h-2.5 w-2.5\" />\n </Button>\n <Button size=\"sm\" variant=\"secondary\" className=\"h-6 w-6 p-0 bg-white/20 hover:bg-white/30 border-0 text-white\">\n <Share2 className=\"h-2.5 w-2.5\" />\n </Button>\n <MagicWizardButton\n imageUrl={image}\n imageTitle={title}\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-6 px-2 text-xs bg-white/20 hover:bg-white/30 border-0 text-white\"\n />\n </div>\n </div>\n </div>\n )}\n\n {/* Mobile/Feed Content - always visible below image */}\n {showContent && (variant === 'feed' || (variant === 'grid' && true)) && (\n <div className={`${variant === 'grid' ? \"md:hidden\" : \"\"} pb-2 space-y-2`}>\n {/* Row 1: User Avatar (Left) + Actions (Right) */}\n <div className=\"flex items-center justify-between px-2 pt-2\">\n {/* User Avatar Block */}\n <UserAvatarBlock\n userId={authorId}\n avatarUrl={authorAvatarUrl}\n displayName={author === 'User' ? undefined : author}\n className=\"w-8 h-8\"\n showDate={false}\n />\n\n {/* Actions */}\n <div className=\"flex items-center gap-1\">\n <Button\n size=\"icon\"\n variant=\"ghost\"\n onClick={handleLike}\n className={localIsLiked ? \"text-red-500 hover:text-red-600\" : \"\"}\n >\n <Heart className=\"h-6 w-6\" fill={localIsLiked ? \"currentColor\" : \"none\"} />\n </Button>\n {localLikes > 0 && (\n <span className=\"text-sm font-medium text-foreground mr-1\">{localLikes}</span>\n )}\n\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"text-foreground\"\n >\n <MessageCircle className=\"h-6 w-6 -rotate-90\" />\n </Button>\n {comments > 0 && (\n <span className=\"text-sm font-medium text-foreground mr-1\">{comments}</span>\n )}\n\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"text-foreground\"\n onClick={(e) => {\n e.stopPropagation();\n handleDownload();\n }}\n >\n <Download className=\"h-6 w-6\" />\n </Button>\n\n <MagicWizardButton\n imageUrl={image}\n imageTitle={title}\n size=\"icon\"\n variant=\"ghost\"\n className=\"text-foreground hover:text-primary\"\n />\n {isOwner && (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n if (onEdit) {\n onEdit(pictureId);\n } else {\n setShowEditModal(true);\n }\n }}\n className=\"text-foreground hover:text-green-400\"\n >\n <Edit3 className=\"h-6 w-6\" />\n </Button>\n )}\n </div>\n </div>\n\n {/* Likes */}\n\n\n {/* Caption / Description section */}\n <div className=\"px-4 space-y-1\">\n {(!isLikelyFilename(title) && title) && (\n <div className=\"font-semibold text-sm\">{title}</div>\n )}\n\n {description && (\n <div className=\"text-sm text-foreground/90 line-clamp-3\">\n <MarkdownRenderer content={description} className=\"prose-sm dark:prose-invert\" />\n </div>\n )}\n\n {createdAt && (\n <div className=\"text-xs text-muted-foreground pt-1\">\n {formatDate(createdAt)}\n </div>\n )}\n </div>\n </div>\n )}\n\n {showEditModal && (\n <EditImageModal\n open={showEditModal}\n onOpenChange={setShowEditModal}\n pictureId={pictureId}\n currentTitle={title}\n currentDescription={description}\n currentVisible={true} // Default to true until we can properly pass this\n onUpdateSuccess={() => {\n setShowEditModal(false);\n onLike?.(); // Trigger refresh\n }}\n />\n )}\n\n <ImageLightbox\n isOpen={showLightbox}\n onClose={() => {\n setShowLightbox(false);\n setGeneratedImageUrl(null);\n }}\n imageUrl={generatedImageUrl || image}\n imageTitle={title}\n onPromptSubmit={handlePromptSubmit}\n onPublish={handlePublish}\n isGenerating={isGenerating}\n isPublishing={isPublishing}\n showPrompt={true}\n showPublish={!!generatedImageUrl}\n generatedImageUrl={generatedImageUrl || undefined}\n currentIndex={navigationData?.currentIndex}\n totalCount={navigationData?.posts.length}\n onNavigate={handleNavigate}\n onPreload={handlePreload}\n />\n </div>\n );\n};\n\nexport default PhotoCard;","\"use client\"\n\nimport * as React from 'react';\n\nconst IS_SERVER = typeof document === \"undefined\";\nconst SCOPE = Symbol(0);\nlet scheduledEffects = false, runningEffects = false, currentScope = null, currentObserver = null, currentObservers = null, currentObserversIndex = 0, effects = [], defaultContext = {};\nconst NOOP = () => {\n}, STATE_CLEAN = 0, STATE_CHECK = 1, STATE_DIRTY = 2, STATE_DISPOSED = 3;\nfunction flushEffects() {\n scheduledEffects = true;\n queueMicrotask(runEffects);\n}\nfunction runEffects() {\n if (!effects.length) {\n scheduledEffects = false;\n return;\n }\n runningEffects = true;\n for (let i = 0; i < effects.length; i++) {\n if (effects[i].$st !== STATE_CLEAN)\n runTop(effects[i]);\n }\n effects = [];\n scheduledEffects = false;\n runningEffects = false;\n}\nfunction runTop(node) {\n let ancestors = [node];\n while (node = node[SCOPE]) {\n if (node.$e && node.$st !== STATE_CLEAN)\n ancestors.push(node);\n }\n for (let i = ancestors.length - 1; i >= 0; i--) {\n updateCheck(ancestors[i]);\n }\n}\nfunction root(init) {\n const scope = createScope();\n return compute(scope, !init.length ? init : init.bind(null, dispose.bind(scope)), null);\n}\nfunction peek(fn) {\n return compute(currentScope, fn, null);\n}\nfunction untrack(fn) {\n return compute(null, fn, null);\n}\nfunction tick() {\n if (!runningEffects)\n runEffects();\n}\nfunction getScope() {\n return currentScope;\n}\nfunction scoped(run2, scope) {\n try {\n return compute(scope, run2, null);\n } catch (error) {\n handleError(scope, error);\n return;\n }\n}\nfunction getContext(key, scope = currentScope) {\n return scope?.$cx[key];\n}\nfunction setContext(key, value, scope = currentScope) {\n if (scope)\n scope.$cx = { ...scope.$cx, [key]: value };\n}\nfunction onDispose(disposable) {\n if (!disposable || !currentScope)\n return disposable || NOOP;\n const node = currentScope;\n if (!node.$d) {\n node.$d = disposable;\n } else if (Array.isArray(node.$d)) {\n node.$d.push(disposable);\n } else {\n node.$d = [node.$d, disposable];\n }\n return function removeDispose() {\n if (node.$st === STATE_DISPOSED)\n return;\n disposable.call(null);\n if (isFunction$1(node.$d)) {\n node.$d = null;\n } else if (Array.isArray(node.$d)) {\n node.$d.splice(node.$d.indexOf(disposable), 1);\n }\n };\n}\nfunction dispose(self = true) {\n if (this.$st === STATE_DISPOSED)\n return;\n if (this.$h) {\n if (Array.isArray(this.$h)) {\n for (let i = this.$h.length - 1; i >= 0; i--) {\n dispose.call(this.$h[i]);\n }\n } else {\n dispose.call(this.$h);\n }\n }\n if (self) {\n const parent = this[SCOPE];\n if (parent) {\n if (Array.isArray(parent.$h)) {\n parent.$h.splice(parent.$h.indexOf(this), 1);\n } else {\n parent.$h = null;\n }\n }\n disposeNode(this);\n }\n}\nfunction disposeNode(node) {\n node.$st = STATE_DISPOSED;\n if (node.$d)\n emptyDisposal(node);\n if (node.$s)\n removeSourceObservers(node, 0);\n node[SCOPE] = null;\n node.$s = null;\n node.$o = null;\n node.$h = null;\n node.$cx = defaultContext;\n node.$eh = null;\n}\nfunction emptyDisposal(scope) {\n try {\n if (Array.isArray(scope.$d)) {\n for (let i = scope.$d.length - 1; i >= 0; i--) {\n const callable = scope.$d[i];\n callable.call(callable);\n }\n } else {\n scope.$d.call(scope.$d);\n }\n scope.$d = null;\n } catch (error) {\n handleError(scope, error);\n }\n}\nfunction compute(scope, compute2, observer) {\n const prevScope = currentScope, prevObserver = currentObserver;\n currentScope = scope;\n currentObserver = observer;\n try {\n return compute2.call(scope);\n } finally {\n currentScope = prevScope;\n currentObserver = prevObserver;\n }\n}\nfunction handleError(scope, error) {\n if (!scope || !scope.$eh)\n throw error;\n let i = 0, len = scope.$eh.length, currentError = error;\n for (i = 0; i < len; i++) {\n try {\n scope.$eh[i](currentError);\n break;\n } catch (error2) {\n currentError = error2;\n }\n }\n if (i === len)\n throw currentError;\n}\nfunction read() {\n if (this.$st === STATE_DISPOSED)\n return this.$v;\n if (currentObserver && !this.$e) {\n if (!currentObservers && currentObserver.$s && currentObserver.$s[currentObserversIndex] == this) {\n currentObserversIndex++;\n } else if (!currentObservers)\n currentObservers = [this];\n else\n currentObservers.push(this);\n }\n if (this.$c)\n updateCheck(this);\n return this.$v;\n}\nfunction write(newValue) {\n const value = isFunction$1(newValue) ? newValue(this.$v) : newValue;\n if (this.$ch(this.$v, value)) {\n this.$v = value;\n if (this.$o) {\n for (let i = 0; i < this.$o.length; i++) {\n notify(this.$o[i], STATE_DIRTY);\n }\n }\n }\n return this.$v;\n}\nconst ScopeNode = function Scope() {\n this[SCOPE] = null;\n this.$h = null;\n if (currentScope)\n currentScope.append(this);\n};\nconst ScopeProto = ScopeNode.prototype;\nScopeProto.$cx = defaultContext;\nScopeProto.$eh = null;\nScopeProto.$c = null;\nScopeProto.$d = null;\nScopeProto.append = function(child) {\n child[SCOPE] = this;\n if (!this.$h) {\n this.$h = child;\n } else if (Array.isArray(this.$h)) {\n this.$h.push(child);\n } else {\n this.$h = [this.$h, child];\n }\n child.$cx = child.$cx === defaultContext ? this.$cx : { ...this.$cx, ...child.$cx };\n if (this.$eh) {\n child.$eh = !child.$eh ? this.$eh : [...child.$eh, ...this.$eh];\n }\n};\nScopeProto.dispose = function() {\n dispose.call(this);\n};\nfunction createScope() {\n return new ScopeNode();\n}\nconst ComputeNode = function Computation(initialValue, compute2, options) {\n ScopeNode.call(this);\n this.$st = compute2 ? STATE_DIRTY : STATE_CLEAN;\n this.$i = false;\n this.$e = false;\n this.$s = null;\n this.$o = null;\n this.$v = initialValue;\n if (compute2)\n this.$c = compute2;\n if (options && options.dirty)\n this.$ch = options.dirty;\n};\nconst ComputeProto = ComputeNode.prototype;\nObject.setPrototypeOf(ComputeProto, ScopeProto);\nComputeProto.$ch = isNotEqual;\nComputeProto.call = read;\nfunction createComputation(initialValue, compute2, options) {\n return new ComputeNode(initialValue, compute2, options);\n}\nfunction isNotEqual(a, b) {\n return a !== b;\n}\nfunction isFunction$1(value) {\n return typeof value === \"function\";\n}\nfunction updateCheck(node) {\n if (node.$st === STATE_CHECK) {\n for (let i = 0; i < node.$s.length; i++) {\n updateCheck(node.$s[i]);\n if (node.$st === STATE_DIRTY) {\n break;\n }\n }\n }\n if (node.$st === STATE_DIRTY)\n update(node);\n else\n node.$st = STATE_CLEAN;\n}\nfunction cleanup(node) {\n if (node.$h)\n dispose.call(node, false);\n if (node.$d)\n emptyDisposal(node);\n node.$eh = node[SCOPE] ? node[SCOPE].$eh : null;\n}\nfunction update(node) {\n let prevObservers = currentObservers, prevObserversIndex = currentObserversIndex;\n currentObservers = null;\n currentObserversIndex = 0;\n try {\n cleanup(node);\n const result = compute(node, node.$c, node);\n updateObservers(node);\n if (!node.$e && node.$i) {\n write.call(node, result);\n } else {\n node.$v = result;\n node.$i = true;\n }\n } catch (error) {\n updateObservers(node);\n handleError(node, error);\n } finally {\n currentObservers = prevObservers;\n currentObserversIndex = prevObserversIndex;\n node.$st = STATE_CLEAN;\n }\n}\nfunction updateObservers(node) {\n if (currentObservers) {\n if (node.$s)\n removeSourceObservers(node, currentObserversIndex);\n if (node.$s && currentObserversIndex > 0) {\n node.$s.length = currentObserversIndex + currentObservers.length;\n for (let i = 0; i < currentObservers.length; i++) {\n node.$s[currentObserversIndex + i] = currentObservers[i];\n }\n } else {\n node.$s = currentObservers;\n }\n let source;\n for (let i = currentObserversIndex; i < node.$s.length; i++) {\n source = node.$s[i];\n if (!source.$o)\n source.$o = [node];\n else\n source.$o.push(node);\n }\n } else if (node.$s && currentObserversIndex < node.$s.length) {\n removeSourceObservers(node, currentObserversIndex);\n node.$s.length = currentObserversIndex;\n }\n}\nfunction notify(node, state) {\n if (node.$st >= state)\n return;\n if (node.$e && node.$st === STATE_CLEAN) {\n effects.push(node);\n if (!scheduledEffects)\n flushEffects();\n }\n node.$st = state;\n if (node.$o) {\n for (let i = 0; i < node.$o.length; i++) {\n notify(node.$o[i], STATE_CHECK);\n }\n }\n}\nfunction removeSourceObservers(node, index) {\n let source, swap;\n for (let i = index; i < node.$s.length; i++) {\n source = node.$s[i];\n if (source.$o) {\n swap = source.$o.indexOf(node);\n source.$o[swap] = source.$o[source.$o.length - 1];\n source.$o.pop();\n }\n }\n}\nfunction signal(initialValue, options) {\n const node = createComputation(initialValue, null, options), signal2 = read.bind(node);\n signal2[SCOPE] = true;\n signal2.set = write.bind(node);\n return signal2;\n}\nfunction isReadSignal(fn) {\n return isFunction$1(fn) && SCOPE in fn;\n}\nfunction computed(compute2, options) {\n const node = createComputation(\n options?.initial,\n compute2,\n options\n ), signal2 = read.bind(node);\n signal2[SCOPE] = true;\n return signal2;\n}\nfunction effect$1(effect2, options) {\n const signal2 = createComputation(\n null,\n function runEffect() {\n let effectResult = effect2();\n isFunction$1(effectResult) && onDispose(effectResult);\n return null;\n },\n void 0\n );\n signal2.$e = true;\n update(signal2);\n return dispose.bind(signal2, true);\n}\nfunction isWriteSignal(fn) {\n return isReadSignal(fn) && \"set\" in fn;\n}\nfunction noop(...args) {\n}\nfunction isNull(value) {\n return value === null;\n}\nfunction isUndefined(value) {\n return typeof value === \"undefined\";\n}\nfunction isNil(value) {\n return isNull(value) || isUndefined(value);\n}\nfunction isObject(value) {\n return value?.constructor === Object;\n}\nfunction isNumber(value) {\n return typeof value === \"number\" && !Number.isNaN(value);\n}\nfunction isString(value) {\n return typeof value === \"string\";\n}\nfunction isBoolean(value) {\n return typeof value === \"boolean\";\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction isArray(value) {\n return Array.isArray(value);\n}\nconst effect = IS_SERVER ? serverEffect : effect$1;\nfunction serverEffect(effect2, options) {\n if (typeof process !== \"undefined\" && process.env?.NODE_ENV === \"test\") {\n return effect$1(effect2);\n }\n return noop;\n}\nconst EVENT = IS_SERVER ? class Event2 {\n} : Event, DOM_EVENT = Symbol(\"DOM_EVENT\");\nclass DOMEvent extends EVENT {\n [DOM_EVENT] = true;\n /**\n * The event detail.\n */\n detail;\n /**\n * The event trigger chain.\n */\n triggers = new EventTriggers();\n /**\n * The preceding event that was responsible for this event being fired.\n */\n get trigger() {\n return this.triggers.source;\n }\n /**\n * The origin event that lead to this event being fired.\n */\n get originEvent() {\n return this.triggers.origin;\n }\n /**\n * Whether the origin event was triggered by the user.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted}\n */\n get isOriginTrusted() {\n return this.triggers.origin?.isTrusted ?? false;\n }\n constructor(type, ...init) {\n super(type, init[0]);\n this.detail = init[0]?.detail;\n const trigger = init[0]?.trigger;\n if (trigger) this.triggers.add(trigger);\n }\n}\nclass EventTriggers {\n chain = [];\n get source() {\n return this.chain[0];\n }\n get origin() {\n return this.chain[this.chain.length - 1];\n }\n /**\n * Appends the event to the end of the chain.\n */\n add(event) {\n this.chain.push(event);\n if (isDOMEvent(event)) {\n this.chain.push(...event.triggers);\n }\n }\n /**\n * Removes the event from the chain and returns it (if found).\n */\n remove(event) {\n return this.chain.splice(this.chain.indexOf(event), 1)[0];\n }\n /**\n * Returns whether the chain contains the given `event`.\n */\n has(event) {\n return this.chain.some((e) => e === event);\n }\n /**\n * Returns whether the chain contains the given event type.\n */\n hasType(type) {\n return !!this.findType(type);\n }\n /**\n * Returns the first event with the given `type` found in the chain.\n */\n findType(type) {\n return this.chain.find((e) => e.type === type);\n }\n /**\n * Walks an event chain on a given `event`, and invokes the given `callback` for each trigger event.\n */\n walk(callback) {\n for (const event of this.chain) {\n const returnValue = callback(event);\n if (returnValue) return [event, returnValue];\n }\n }\n [Symbol.iterator]() {\n return this.chain.values();\n }\n}\nfunction isDOMEvent(event) {\n return !!event?.[DOM_EVENT];\n}\nfunction walkTriggerEventChain(event, callback) {\n if (!isDOMEvent(event)) return;\n return event.triggers.walk(callback);\n}\nfunction findTriggerEvent(event, type) {\n return isDOMEvent(event) ? event.triggers.findType(type) : void 0;\n}\nfunction hasTriggerEvent(event, type) {\n return !!findTriggerEvent(event, type);\n}\nfunction appendTriggerEvent(event, trigger) {\n if (trigger) event.triggers.add(trigger);\n}\nclass EventsTarget extends EventTarget {\n /** @internal type only */\n $ts__events;\n addEventListener(type, callback, options) {\n return super.addEventListener(type, callback, options);\n }\n removeEventListener(type, callback, options) {\n return super.removeEventListener(type, callback, options);\n }\n}\nfunction listenEvent(target, type, handler, options) {\n if (IS_SERVER) return noop;\n target.addEventListener(type, handler, options);\n return onDispose(() => target.removeEventListener(type, handler, options));\n}\nclass EventsController {\n #target;\n #controller;\n get signal() {\n return this.#controller.signal;\n }\n constructor(target) {\n this.#target = target;\n this.#controller = new AbortController();\n onDispose(this.abort.bind(this));\n }\n add(type, handler, options) {\n if (this.signal.aborted) throw Error(\"aborted\");\n this.#target.addEventListener(type, handler, {\n ...options,\n signal: options?.signal ? anySignal(this.signal, options.signal) : this.signal\n });\n return this;\n }\n remove(type, handler) {\n this.#target.removeEventListener(type, handler);\n return this;\n }\n abort(reason) {\n this.#controller.abort(reason);\n }\n}\nfunction anySignal(...signals) {\n const controller = new AbortController(), options = { signal: controller.signal };\n function onAbort(event) {\n controller.abort(event.target.reason);\n }\n for (const signal2 of signals) {\n if (signal2.aborted) {\n controller.abort(signal2.reason);\n break;\n }\n signal2.addEventListener(\"abort\", onAbort, options);\n }\n return controller.signal;\n}\nfunction isPointerEvent(event) {\n return !!event?.type.startsWith(\"pointer\");\n}\nfunction isTouchEvent(event) {\n return !!event?.type.startsWith(\"touch\");\n}\nfunction isMouseEvent(event) {\n return /^(click|mouse)/.test(event?.type ?? \"\");\n}\nfunction isKeyboardEvent(event) {\n return !!event?.type.startsWith(\"key\");\n}\nfunction wasEnterKeyPressed(event) {\n return isKeyboardEvent(event) && event.key === \"Enter\";\n}\nfunction isKeyboardClick(event) {\n return isKeyboardEvent(event) && (event.key === \"Enter\" || event.key === \" \");\n}\nfunction isDOMNode(node) {\n return node instanceof Node;\n}\nfunction setAttribute(host, name, value) {\n if (!host) return;\n else if (!value && value !== \"\" && value !== 0) {\n host.removeAttribute(name);\n } else {\n const attrValue = value === true ? \"\" : value + \"\";\n if (host.getAttribute(name) !== attrValue) {\n host.setAttribute(name, attrValue);\n }\n }\n}\nfunction setStyle(host, property, value) {\n if (!host) return;\n else if (!value && value !== 0) {\n host.style.removeProperty(property);\n } else {\n host.style.setProperty(property, value + \"\");\n }\n}\nfunction toggleClass(host, name, value) {\n host.classList[value ? \"add\" : \"remove\"](name);\n}\nfunction unwrapDeep(fn) {\n let value = fn;\n while (typeof value === \"function\") value = value.call(this);\n return value;\n}\nfunction createContext(provide) {\n return { id: Symbol(), provide };\n}\nfunction provideContext(context, value, scope = getScope()) {\n const hasProvidedValue = !isUndefined(value);\n setContext(context.id, hasProvidedValue ? value : context.provide?.(), scope);\n}\nfunction useContext(context) {\n const value = getContext(context.id);\n return value;\n}\nfunction hasProvidedContext(context) {\n return !isUndefined(getContext(context.id));\n}\nconst PROPS = /* @__PURE__ */ Symbol(0);\nconst METHODS = /* @__PURE__ */ Symbol(0);\nconst ON_DISPATCH = /* @__PURE__ */ Symbol(0);\nconst EMPTY_PROPS = {};\nclass Instance {\n /** @internal type only */\n $ts__events;\n /** @internal type only */\n $ts__vars;\n /* @internal */\n [ON_DISPATCH] = null;\n $el = signal(null);\n el = null;\n scope = null;\n attachScope = null;\n connectScope = null;\n component = null;\n destroyed = false;\n props = EMPTY_PROPS;\n attrs = null;\n styles = null;\n state;\n $state;\n #setupCallbacks = [];\n #attachCallbacks = [];\n #connectCallbacks = [];\n #destroyCallbacks = [];\n constructor(Component2, scope, init) {\n this.scope = scope;\n if (init?.scope) init.scope.append(scope);\n let stateFactory = Component2.state, props = Component2.props;\n if (stateFactory) {\n this.$state = stateFactory.create();\n this.state = new Proxy(this.$state, {\n get: (_, prop2) => this.$state[prop2]()\n });\n provideContext(stateFactory, this.$state);\n }\n if (props) {\n this.props = createInstanceProps(props);\n if (init?.props) {\n for (const prop2 of Object.keys(init.props)) {\n this.props[prop2]?.set(init.props[prop2]);\n }\n }\n }\n onDispose(this.destroy.bind(this));\n }\n setup() {\n scoped(() => {\n for (const callback of this.#setupCallbacks) callback();\n }, this.scope);\n }\n attach(el) {\n if (this.el) return;\n this.el = el;\n this.$el.set(el);\n scoped(() => {\n this.attachScope = createScope();\n scoped(() => {\n for (const callback of this.#attachCallbacks) callback(this.el);\n this.#attachAttrs();\n this.#attachStyles();\n }, this.attachScope);\n }, this.scope);\n el.dispatchEvent(new Event(\"attached\"));\n }\n detach() {\n this.attachScope?.dispose();\n this.attachScope = null;\n this.connectScope = null;\n this.el = null;\n this.$el.set(null);\n }\n connect() {\n if (!this.el || !this.attachScope || !this.#connectCallbacks.length) return;\n scoped(() => {\n this.connectScope = createScope();\n scoped(() => {\n for (const callback of this.#connectCallbacks) callback(this.el);\n }, this.connectScope);\n }, this.attachScope);\n }\n disconnect() {\n this.connectScope?.dispose();\n this.connectScope = null;\n }\n destroy() {\n if (this.destroyed) return;\n this.destroyed = true;\n scoped(() => {\n for (const callback of this.#destroyCallbacks) callback(this.el);\n }, this.scope);\n const el = this.el;\n this.detach();\n this.scope.dispose();\n this.#setupCallbacks.length = 0;\n this.#attachCallbacks.length = 0;\n this.#connectCallbacks.length = 0;\n this.#destroyCallbacks.length = 0;\n this.component = null;\n this.attrs = null;\n this.styles = null;\n this.props = EMPTY_PROPS;\n this.scope = null;\n this.state = EMPTY_PROPS;\n this.$state = null;\n if (el) delete el.$;\n }\n addHooks(target) {\n if (target.onSetup) this.#setupCallbacks.push(target.onSetup.bind(target));\n if (target.onAttach) this.#attachCallbacks.push(target.onAttach.bind(target));\n if (target.onConnect) this.#connectCallbacks.push(target.onConnect.bind(target));\n if (target.onDestroy) this.#destroyCallbacks.push(target.onDestroy.bind(target));\n }\n #attachAttrs() {\n if (!this.attrs) return;\n for (const name of Object.keys(this.attrs)) {\n if (IS_SERVER) {\n setAttribute(this.el, name, unwrapDeep.call(this.component, this.attrs[name]));\n } else if (isFunction(this.attrs[name])) {\n effect(this.#setAttr.bind(this, name));\n } else {\n setAttribute(this.el, name, this.attrs[name]);\n }\n }\n }\n #attachStyles() {\n if (!this.styles) return;\n for (const name of Object.keys(this.styles)) {\n if (IS_SERVER) {\n setStyle(this.el, name, unwrapDeep.call(this.component, this.styles[name]));\n } else if (isFunction(this.styles[name])) {\n effect(this.#setStyle.bind(this, name));\n } else {\n setStyle(this.el, name, this.styles[name]);\n }\n }\n }\n #setAttr(name) {\n setAttribute(this.el, name, this.attrs[name].call(this.component));\n }\n #setStyle(name) {\n setStyle(this.el, name, this.styles[name].call(this.component));\n }\n}\nfunction createInstanceProps(props) {\n const $props = {};\n for (const name of Object.keys(props)) {\n const def = props[name];\n $props[name] = signal(def, def);\n }\n return $props;\n}\nlet currentInstance = { $$: null };\nfunction createComponent(Component2, init) {\n return root(() => {\n currentInstance.$$ = new Instance(Component2, getScope(), init);\n const component = new Component2();\n currentInstance.$$.component = component;\n currentInstance.$$ = null;\n return component;\n });\n}\nclass ViewController extends EventTarget {\n /** @internal */\n $$;\n get el() {\n return this.$$.el;\n }\n get $el() {\n return this.$$.$el();\n }\n get scope() {\n return this.$$.scope;\n }\n get attachScope() {\n return this.$$.attachScope;\n }\n get connectScope() {\n return this.$$.connectScope;\n }\n /** @internal */\n get $props() {\n return this.$$.props;\n }\n /** @internal */\n get $state() {\n return this.$$.$state;\n }\n get state() {\n return this.$$.state;\n }\n constructor() {\n super();\n if (currentInstance.$$) this.attach(currentInstance);\n }\n attach({ $$ }) {\n this.$$ = $$;\n $$.addHooks(this);\n return this;\n }\n addEventListener(type, callback, options) {\n this.listen(type, callback, options);\n }\n removeEventListener(type, callback, options) {\n this.el?.removeEventListener(type, callback, options);\n }\n /**\n * The given callback is invoked when the component is ready to be set up.\n *\n * - This hook will run once.\n * - This hook is called both client-side and server-side.\n * - It's safe to use context inside this hook.\n * - The host element has not attached yet - wait for `onAttach`.\n */\n /**\n * This method can be used to specify attributes that should be set on the host element. Any\n * attributes that are assigned to a function will be considered a signal and updated accordingly.\n */\n setAttributes(attributes) {\n if (!this.$$.attrs) this.$$.attrs = {};\n Object.assign(this.$$.attrs, attributes);\n }\n /**\n * This method can be used to specify styles that should set be set on the host element. Any\n * styles that are assigned to a function will be considered a signal and updated accordingly.\n */\n setStyles(styles) {\n if (!this.$$.styles) this.$$.styles = {};\n Object.assign(this.$$.styles, styles);\n }\n /**\n * This method is used to satisfy the CSS variables contract specified on the current\n * component. Other CSS variables can be set via the `setStyles` method.\n */\n setCSSVars(vars) {\n this.setStyles(vars);\n }\n /**\n * Type-safe utility for creating component DOM events.\n */\n createEvent(type, ...init) {\n return new DOMEvent(type, init[0]);\n }\n /**\n * Creates a `DOMEvent` and dispatches it from the host element. This method is typed to\n * match all component events.\n */\n dispatch(type, ...init) {\n if (IS_SERVER || !this.el) return false;\n const event = type instanceof Event ? type : new DOMEvent(type, init[0]);\n Object.defineProperty(event, \"target\", {\n get: () => this.$$.component\n });\n return untrack(() => {\n this.$$[ON_DISPATCH]?.(event);\n return this.el.dispatchEvent(event);\n });\n }\n dispatchEvent(event) {\n return this.dispatch(event);\n }\n /**\n * Adds an event listener for the given `type` and returns a function which can be invoked to\n * remove the event listener.\n *\n * - The listener is removed if the current scope is disposed.\n * - This method is safe to use on the server (noop).\n */\n listen(type, handler, options) {\n if (IS_SERVER || !this.el) return noop;\n return listenEvent(this.el, type, handler, options);\n }\n}\nclass Component extends ViewController {\n subscribe(callback) {\n return scoped(() => effect(() => callback(this.state)), this.$$.scope);\n }\n destroy() {\n this.$$.destroy();\n }\n}\nfunction prop(target, propertyKey, descriptor) {\n if (!target[PROPS]) target[PROPS] = /* @__PURE__ */ new Set();\n target[PROPS].add(propertyKey);\n}\nfunction method(target, propertyKey, descriptor) {\n if (!target[METHODS]) target[METHODS] = /* @__PURE__ */ new Set();\n target[METHODS].add(propertyKey);\n}\nclass State {\n id = Symbol(0);\n record;\n #descriptors;\n constructor(record) {\n this.record = record;\n this.#descriptors = Object.getOwnPropertyDescriptors(record);\n }\n create() {\n const store = {}, state = new Proxy(store, { get: (_, prop2) => store[prop2]() });\n for (const name of Object.keys(this.record)) {\n const getter = this.#descriptors[name].get;\n store[name] = getter ? computed(getter.bind(state)) : signal(this.record[name]);\n }\n return store;\n }\n reset(record, filter) {\n for (const name of Object.keys(record)) {\n if (!this.#descriptors[name].get && (!filter || filter(name))) {\n record[name].set(this.record[name]);\n }\n }\n }\n}\nfunction useState(state) {\n return useContext(state);\n}\nfunction camelToKebabCase(str) {\n return str.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\nfunction kebabToCamelCase(str) {\n return str.replace(/-./g, (x) => x[1].toUpperCase());\n}\nfunction kebabToPascalCase(str) {\n return kebabToTitleCase(str).replace(/\\s/g, \"\");\n}\nfunction kebabToTitleCase(str) {\n return uppercaseFirstChar(str.replace(/-./g, (x) => \" \" + x[1].toUpperCase()));\n}\nfunction uppercaseFirstChar(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst ReactScopeContext = React.createContext({ current: null });\nReactScopeContext.displayName = \"Scope\";\nfunction WithScope(scope, ...children) {\n return React.createElement(ReactScopeContext.Provider, { value: scope }, ...children);\n}\nfunction useReactScope() {\n return React.useContext(ReactScopeContext).current;\n}\nfunction useReactContext(context) {\n const scope = useReactScope();\n return React.useMemo(() => getContext(context.id, scope), [scope]);\n}\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}\nfunction composeRefs(...refs) {\n return (node) => refs.forEach((ref) => setRef(ref, node));\n}\nfunction createClientComponent(Component2, options) {\n const forwardComponent = React.forwardRef((props, forwardRef) => {\n let parentScopeRef = React.useContext(ReactScopeContext), scopeRef = React.useRef(null), stateRef = React.useRef();\n if (!stateRef.current) {\n const state2 = createInternalState(), component = initComponent(Component2, state2, props, parentScopeRef.current);\n state2.component = component;\n stateRef.current = state2;\n scopeRef.current = component.scope;\n }\n function onAttach() {\n let state2 = stateRef.current, scope = parentScopeRef.current;\n window.cancelAnimationFrame(state2.destroyId);\n state2.destroyId = -1;\n if (state2.component.$$.destroyed) {\n const component = initComponent(Component2, state2, props, scope);\n state2.component = component;\n state2.attached = false;\n state2.forwardRef = false;\n scopeRef.current = component.scope;\n }\n if (state2.el) {\n attachToHost(state2, state2.el);\n }\n if (!state2.forwardRef) {\n setRef(forwardRef, state2.component);\n state2.forwardRef = true;\n }\n return () => detachFromHost(state2);\n }\n function onRefChange(el) {\n const state2 = stateRef.current;\n if (!state2.forwardRef) {\n state2.el = el;\n return;\n }\n window.cancelAnimationFrame(state2.refChangeId);\n state2.refChangeId = window.requestAnimationFrame(() => {\n const state3 = stateRef.current;\n state3.refChangeId = -1;\n if (state3.el === el) return;\n detachFromHost(state3);\n if (el) attachToHost(state3, el);\n state3.el = el;\n });\n }\n React.useEffect(() => {\n const state2 = stateRef.current;\n window.cancelAnimationFrame(state2.destroyId);\n state2.destroyId = -1;\n return function onDestroy() {\n if (!isFunction(props.children)) return;\n window.cancelAnimationFrame(state2.refChangeId);\n state2.refChangeId = -1;\n window.cancelAnimationFrame(state2.connectId);\n state2.connectId = -1;\n window.cancelAnimationFrame(state2.destroyId);\n state2.destroyId = window.requestAnimationFrame(() => {\n state2.destroyId = -1;\n detachFromHost(state2);\n state2.component.$$.destroy();\n state2.component.$$[ON_DISPATCH] = null;\n state2.callbacks = {};\n state2.domCallbacks = {};\n scopeRef.current = null;\n });\n };\n }, []);\n React.useEffect(tick);\n let state = stateRef.current, { children, ...renderProps } = props, attrs = {}, prevPropNames = state.prevProps, newPropNames = Object.keys(renderProps);\n state.callbacks = {};\n for (const name of [...prevPropNames, ...newPropNames]) {\n if (options.props.has(name)) {\n state.component.$props[name].set(\n // If the prop was removed we'll use the default value provided on Component creation.\n isUndefined(renderProps[name]) ? Component2.props?.[name] : renderProps[name]\n );\n } else if (options.events?.has(name) || options.eventsRE?.test(name)) {\n state.callbacks[name] = renderProps[name];\n } else if (options.domEvents?.has(name) || options.domEventsRE?.test(name)) {\n let type = camelToKebabCase(name.slice(2));\n state.domCallbacks[type] = renderProps[name];\n if (!newPropNames.includes(name)) {\n state.el?.removeEventListener(type, state.onDOMEvent);\n state.listening?.delete(type);\n } else if (state.el && !state.listening?.has(type)) {\n if (!state.listening) state.listening = /* @__PURE__ */ new Set();\n state.listening.add(type);\n state.el.addEventListener(type, state.onDOMEvent);\n }\n } else {\n attrs[name] = renderProps[name];\n }\n }\n state.prevProps = newPropNames;\n return WithScope(\n scopeRef,\n React.createElement(AttachEffect, {\n effect: onAttach\n }),\n isFunction(children) ? children?.(\n {\n ...attrs,\n suppressHydrationWarning: true,\n ref: onRefChange\n },\n state.component\n ) : children\n );\n });\n forwardComponent.displayName = Component2.name + \"Bridge\";\n return forwardComponent;\n}\nfunction AttachEffect({ effect: effect2 }) {\n React.useEffect(effect2, []);\n return null;\n}\nconst eventTypeToCallbackName = /* @__PURE__ */ new Map();\nfunction createInternalState() {\n const state = {\n el: null,\n prevProps: [],\n callbacks: {},\n domCallbacks: {},\n refChangeId: -1,\n connectId: -1,\n destroyId: -1,\n attached: false,\n forwardRef: false,\n listening: null,\n onDOMEvent(event) {\n const args = !isUndefined(event.detail) ? [event.detail, event] : [event];\n state.domCallbacks[event.type]?.(...args);\n }\n };\n return state;\n}\nfunction attachToHost(state, el) {\n if (state.el === el && state.attached) return;\n else if (state.attached) detachFromHost(state);\n if (state.domCallbacks) {\n if (!state.listening) state.listening = /* @__PURE__ */ new Set();\n for (const type of Object.keys(state.domCallbacks)) {\n if (state.listening.has(type)) continue;\n el.addEventListener(type, state.onDOMEvent);\n state.listening.add(type);\n }\n }\n state.component.$$.attach(el);\n state.connectId = window.requestAnimationFrame(() => {\n state.component.$$.connect();\n state.connectId = -1;\n });\n state.attached = true;\n}\nfunction detachFromHost(state) {\n if (!state.attached) return;\n window.cancelAnimationFrame(state.connectId);\n state.connectId = -1;\n state.component.$$.detach();\n state.attached = false;\n if (state.el && state.listening) {\n for (const type of state.listening) {\n state.el.removeEventListener(type, state.onDOMEvent);\n }\n state.listening.clear();\n }\n}\nfunction onDispatch(event) {\n let callbackProp = eventTypeToCallbackName.get(event.type), args = !isUndefined(event.detail) ? [event.detail, event] : [event];\n if (!callbackProp) {\n eventTypeToCallbackName.set(event.type, callbackProp = `on${kebabToPascalCase(event.type)}`);\n }\n this.callbacks[callbackProp]?.(...args);\n}\nfunction initComponent(Component2, state, props, scope) {\n const component = createComponent(Component2, { props, scope });\n component.$$[ON_DISPATCH] = onDispatch.bind(state);\n component.$$.setup();\n return component;\n}\nfunction escape(value, isAttr = false) {\n const type = typeof value;\n if (type !== \"string\") {\n if (!isAttr && type === \"function\") return escape(value());\n if (isAttr && type === \"boolean\") return value + \"\";\n return value;\n }\n const delimeter = isAttr ? '\"' : \"<\", escapeDelimeter = isAttr ? \""\" : \"<\";\n let iDelimeter = value.indexOf(delimeter), isAmpersand = value.indexOf(\"&\");\n if (iDelimeter < 0 && isAmpersand < 0) return value;\n let left = 0, out = \"\";\n while (iDelimeter >= 0 && isAmpersand >= 0) {\n if (iDelimeter < isAmpersand) {\n if (left < iDelimeter) out += value.substring(left, iDelimeter);\n out += escapeDelimeter;\n left = iDelimeter + 1;\n iDelimeter = value.indexOf(delimeter, left);\n } else {\n if (left < isAmpersand) out += value.substring(left, isAmpersand);\n out += \"&\";\n left = isAmpersand + 1;\n isAmpersand = value.indexOf(\"&\", left);\n }\n }\n if (iDelimeter >= 0) {\n do {\n if (left < iDelimeter) out += value.substring(left, iDelimeter);\n out += escapeDelimeter;\n left = iDelimeter + 1;\n iDelimeter = value.indexOf(delimeter, left);\n } while (iDelimeter >= 0);\n } else\n while (isAmpersand >= 0) {\n if (left < isAmpersand) out += value.substring(left, isAmpersand);\n out += \"&\";\n left = isAmpersand + 1;\n isAmpersand = value.indexOf(\"&\", left);\n }\n return left < value.length ? out + value.substring(left) : out;\n}\nconst SETUP = /* @__PURE__ */ Symbol(0);\nconst classSplitRE = /\\s+/;\nfunction parseClassAttr(tokens, attrValue) {\n const classes = attrValue.trim().split(classSplitRE);\n for (const token of classes) tokens.add(token);\n}\nconst styleSplitRE = /\\s*:\\s*/;\nconst stylesDelimeterRE = /\\s*;\\s*/;\nfunction parseStyleAttr(tokens, attrValue) {\n const styles = attrValue.trim().split(stylesDelimeterRE);\n for (let i = 0; i < styles.length; i++) {\n if (styles[i] === \"\") continue;\n const [name, value] = styles[i].split(styleSplitRE);\n tokens.set(name, value);\n }\n}\nclass MaverickServerElement {\n keepAlive = false;\n forwardKeepAlive = true;\n $;\n attributes = new ServerAttributes();\n style = new ServerStyle();\n classList = new ServerClassList();\n get $props() {\n return this.$.$$.props;\n }\n get $state() {\n return this.$.$$.$state;\n }\n get state() {\n return this.$.state;\n }\n constructor(component) {\n this.$ = component;\n }\n setup() {\n const instance = this.$.$$;\n scoped(() => {\n if (this.hasAttribute(\"class\")) {\n parseClassAttr(this.classList.tokens, this.getAttribute(\"class\"));\n }\n if (this.hasAttribute(\"style\")) {\n parseStyleAttr(this.style.tokens, this.getAttribute(\"style\"));\n }\n instance.setup();\n instance.attach(this);\n if (this.classList.length > 0) {\n this.setAttribute(\"class\", this.classList.toString());\n }\n if (this.style.length > 0) {\n this.setAttribute(\"style\", this.style.toString());\n }\n if (this.keepAlive) {\n this.setAttribute(\"keep-alive\", \"\");\n }\n }, instance.scope);\n }\n getAttribute(name) {\n return this.attributes.getAttribute(name);\n }\n setAttribute(name, value) {\n this.attributes.setAttribute(name, value);\n }\n hasAttribute(name) {\n return this.attributes.hasAttribute(name);\n }\n removeAttribute(name) {\n return this.attributes.removeAttribute(name);\n }\n [SETUP]() {\n }\n addEventListener() {\n }\n removeEventListener() {\n }\n dispatchEvent() {\n return false;\n }\n subscribe() {\n return noop;\n }\n destroy() {\n this.$.destroy();\n }\n}\nclass ServerAttributes {\n #tokens = /* @__PURE__ */ new Map();\n get length() {\n return this.#tokens.size;\n }\n get tokens() {\n return this.#tokens;\n }\n getAttribute(name) {\n return this.#tokens.get(name) ?? null;\n }\n hasAttribute(name) {\n return this.#tokens.has(name);\n }\n setAttribute(name, value) {\n this.#tokens.set(name, value + \"\");\n }\n removeAttribute(name) {\n this.#tokens.delete(name);\n }\n toString() {\n if (this.#tokens.size === 0) return \"\";\n let result = \"\";\n for (const [name, value] of this.#tokens) {\n result += ` ${name}=\"${escape(value, true)}\"`;\n }\n return result;\n }\n}\nclass ServerStyle {\n #tokens = /* @__PURE__ */ new Map();\n get length() {\n return this.#tokens.size;\n }\n get tokens() {\n return this.#tokens;\n }\n getPropertyValue(prop2) {\n return this.#tokens.get(prop2) ?? \"\";\n }\n setProperty(prop2, value) {\n this.#tokens.set(prop2, value ?? \"\");\n }\n removeProperty(prop2) {\n const value = this.#tokens.get(prop2);\n this.#tokens.delete(prop2);\n return value ?? \"\";\n }\n toString() {\n if (this.#tokens.size === 0) return \"\";\n let result = \"\";\n for (const [name, value] of this.#tokens) {\n result += `${name}: ${value};`;\n }\n return result;\n }\n}\nclass ServerClassList {\n #tokens = /* @__PURE__ */ new Set();\n get length() {\n return this.#tokens.size;\n }\n get tokens() {\n return this.#tokens;\n }\n add(...tokens) {\n for (const token of tokens) {\n this.#tokens.add(token);\n }\n }\n contains(token) {\n return this.#tokens.has(token);\n }\n remove(token) {\n this.#tokens.delete(token);\n }\n replace(token, newToken) {\n if (!this.#tokens.has(token)) return false;\n this.#tokens.delete(token);\n this.#tokens.add(newToken);\n return true;\n }\n toggle(token, force) {\n if (force !== true && (this.#tokens.has(token) || force === false)) {\n this.#tokens.delete(token);\n return false;\n } else {\n this.#tokens.add(token);\n return true;\n }\n }\n toString() {\n return Array.from(this.#tokens).join(\" \");\n }\n}\nconst attrsToProps = {\n acceptcharset: \"acceptCharset\",\n \"accept-charset\": \"acceptCharset\",\n accesskey: \"accessKey\",\n allowfullscreen: \"allowFullScreen\",\n autocapitalize: \"autoCapitalize\",\n autocomplete: \"autoComplete\",\n autocorrect: \"autoCorrect\",\n autofocus: \"autoFocus\",\n autoplay: \"autoPlay\",\n autosave: \"autoSave\",\n cellpadding: \"cellPadding\",\n cellspacing: \"cellSpacing\",\n charset: \"charSet\",\n class: \"className\",\n classid: \"classID\",\n classname: \"className\",\n colspan: \"colSpan\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n controlslist: \"controlsList\",\n crossorigin: \"crossOrigin\",\n dangerouslysetinnerhtml: \"dangerouslySetInnerHTML\",\n datetime: \"dateTime\",\n defaultchecked: \"defaultChecked\",\n defaultvalue: \"defaultValue\",\n disablepictureinpicture: \"disablePictureInPicture\",\n disableremoteplayback: \"disableRemotePlayback\",\n enctype: \"encType\",\n enterkeyhint: \"enterKeyHint\",\n fetchpriority: \"fetchPriority\",\n for: \"htmlFor\",\n formmethod: \"formMethod\",\n formaction: \"formAction\",\n formenctype: \"formEncType\",\n formnovalidate: \"formNoValidate\",\n formtarget: \"formTarget\",\n frameborder: \"frameBorder\",\n hreflang: \"hrefLang\",\n htmlfor: \"htmlFor\",\n httpequiv: \"httpEquiv\",\n \"http-equiv\": \"httpEquiv\",\n imagesizes: \"imageSizes\",\n imagesrcset: \"imageSrcSet\",\n innerhtml: \"innerHTML\",\n inputmode: \"inputMode\",\n itemid: \"itemID\",\n itemprop: \"itemProp\",\n itemref: \"itemRef\",\n itemscope: \"itemScope\",\n itemtype: \"itemType\",\n keyparams: \"keyParams\",\n keytype: \"keyType\",\n marginwidth: \"marginWidth\",\n marginheight: \"marginHeight\",\n maxlength: \"maxLength\",\n mediagroup: \"mediaGroup\",\n minlength: \"minLength\",\n nomodule: \"noModule\",\n novalidate: \"noValidate\",\n playsinline: \"playsInline\",\n radiogroup: \"radioGroup\",\n readonly: \"readOnly\",\n referrerpolicy: \"referrerPolicy\",\n rowspan: \"rowSpan\",\n spellcheck: \"spellCheck\",\n srcdoc: \"srcDoc\",\n srclang: \"srcLang\",\n srcset: \"srcSet\",\n tabindex: \"tabIndex\",\n usemap: \"useMap\"\n};\nfunction createServerComponent(Component2, options) {\n function ServerComponent(props) {\n let scope = React.useContext(ReactScopeContext), component = createComponent(Component2, {\n props,\n scope: scope.current\n }), host = new MaverickServerElement(component), attrs = {}, { style = {}, children, forwardRef, ...renderProps } = props;\n if (options.props.size) {\n for (const prop2 of Object.keys(renderProps)) {\n if (!options.props.has(prop2)) attrs[prop2] = renderProps[prop2];\n }\n } else {\n attrs = renderProps;\n }\n host.setup();\n if (host.hasAttribute(\"style\")) {\n for (const [name, value] of host.style.tokens) {\n style[name.startsWith(\"--\") ? name : kebabToCamelCase(name)] = value;\n }\n host.removeAttribute(\"style\");\n }\n for (const [attrName, attrValue] of host.attributes.tokens) {\n const propName = attrsToProps[attrName];\n if (propName) {\n if (!(propName in attrs)) {\n attrs[propName] = attrValue;\n }\n host.removeAttribute(attrName);\n }\n }\n return WithScope(\n { current: component.$$.scope },\n isFunction(children) ? children?.(\n {\n ...Object.fromEntries(host.attributes.tokens),\n ...attrs,\n style\n },\n component\n ) : children,\n React.createElement(() => {\n host.destroy();\n return null;\n })\n );\n }\n ServerComponent.displayName = Component2.name + \"Bridge\";\n return ServerComponent;\n}\nfunction useStateContext(state) {\n return useReactContext(state);\n}\nfunction useSignal(signal2, key) {\n const [, scheduleReactUpdate] = React.useState();\n React.useEffect(() => {\n return effect$1(() => {\n signal2();\n scheduleReactUpdate({});\n });\n }, [key ?? signal2]);\n return signal2();\n}\nfunction ariaBool(value) {\n return value ? \"true\" : \"false\";\n}\nfunction createDisposalBin() {\n const disposal = /* @__PURE__ */ new Set();\n return {\n add(...callbacks) {\n for (const callback of callbacks) disposal.add(callback);\n },\n empty() {\n for (const callback of disposal) callback();\n disposal.clear();\n }\n };\n}\nfunction keysOf(obj) {\n return Object.keys(obj);\n}\nfunction deferredPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\nfunction waitTimeout(delay) {\n return new Promise((resolve) => setTimeout(resolve, delay));\n}\nfunction animationFrameThrottle(func) {\n if (IS_SERVER) return noop;\n let id = -1, lastArgs;\n function throttle(...args) {\n lastArgs = args;\n if (id >= 0) return;\n id = window.requestAnimationFrame(() => {\n func.apply(this, lastArgs);\n id = -1;\n lastArgs = void 0;\n });\n }\n return throttle;\n}\nconst requestIdleCallback = IS_SERVER ? noop : typeof window !== \"undefined\" ? \"requestIdleCallback\" in window ? window.requestIdleCallback : (cb) => window.setTimeout(cb, 1) : noop;\nfunction waitIdlePeriod(callback, options) {\n if (IS_SERVER) return Promise.resolve();\n return new Promise((resolve) => {\n requestIdleCallback((deadline) => {\n callback?.(deadline);\n resolve();\n }, options);\n });\n}\nfunction useSignalRecord($state) {\n const [, scheduleReactUpdate] = React.useState(), tracking = React.useRef(null);\n if (tracking.current == null) {\n tracking.current = {\n state: {},\n $update: signal({}),\n props: /* @__PURE__ */ new Set()\n };\n }\n React.useEffect(() => {\n let { state, $update, props } = tracking.current;\n return effect(() => {\n for (const prop2 of props) {\n const value = $state[prop2]();\n state[prop2] = isArray(value) ? [...value] : value;\n }\n $update();\n scheduleReactUpdate({});\n });\n }, [$state]);\n return React.useMemo(() => {\n let { state, $update, props } = tracking.current, scheduledUpdate = false;\n props.clear();\n return new Proxy(state, {\n get(_, prop2) {\n if (!props.has(prop2) && prop2 in $state) {\n props.add(prop2);\n const value = $state[prop2]();\n state[prop2] = isArray(value) ? [...value] : value;\n if (!scheduledUpdate) {\n $update.set({});\n scheduledUpdate = true;\n queueMicrotask(() => scheduledUpdate = false);\n }\n }\n return state[prop2];\n },\n set(_, prop2, newValue) {\n if (!(prop2 in $state)) state[prop2] = newValue;\n return true;\n }\n });\n }, [$state]);\n}\nfunction createReactComponent(Component2, options) {\n if (IS_SERVER) {\n return createServerComponent(Component2, {\n props: new Set(Object.keys(Component2.props || {}))\n });\n } else {\n return createClientComponent(Component2, {\n props: new Set(Object.keys(Component2.props || {})),\n events: new Set(options?.events),\n eventsRE: options?.eventsRegex,\n domEvents: options?.domEvents,\n domEventsRE: options?.domEventsRegex\n });\n }\n}\n\nvar key = {\n fullscreenEnabled: 0,\n fullscreenElement: 1,\n requestFullscreen: 2,\n exitFullscreen: 3,\n fullscreenchange: 4,\n fullscreenerror: 5,\n fullscreen: 6\n};\nvar webkit = [\n \"webkitFullscreenEnabled\",\n \"webkitFullscreenElement\",\n \"webkitRequestFullscreen\",\n \"webkitExitFullscreen\",\n \"webkitfullscreenchange\",\n \"webkitfullscreenerror\",\n \"-webkit-full-screen\"\n];\nvar moz = [\n \"mozFullScreenEnabled\",\n \"mozFullScreenElement\",\n \"mozRequestFullScreen\",\n \"mozCancelFullScreen\",\n \"mozfullscreenchange\",\n \"mozfullscreenerror\",\n \"-moz-full-screen\"\n];\nvar ms = [\n \"msFullscreenEnabled\",\n \"msFullscreenElement\",\n \"msRequestFullscreen\",\n \"msExitFullscreen\",\n \"MSFullscreenChange\",\n \"MSFullscreenError\",\n \"-ms-fullscreen\"\n];\nvar document$1 = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" ? window.document : {};\nvar vendor = \"fullscreenEnabled\" in document$1 && Object.keys(key) || webkit[0] in document$1 && webkit || moz[0] in document$1 && moz || ms[0] in document$1 && ms || [];\nvar fscreen = {\n requestFullscreen: function(element) {\n return element[vendor[key.requestFullscreen]]();\n },\n requestFullscreenFunction: function(element) {\n return element[vendor[key.requestFullscreen]];\n },\n get exitFullscreen() {\n return document$1[vendor[key.exitFullscreen]].bind(document$1);\n },\n get fullscreenPseudoClass() {\n return \":\" + vendor[key.fullscreen];\n },\n addEventListener: function(type, handler, options) {\n return document$1.addEventListener(vendor[key[type]], handler, options);\n },\n removeEventListener: function(type, handler, options) {\n return document$1.removeEventListener(vendor[key[type]], handler, options);\n },\n get fullscreenEnabled() {\n return Boolean(document$1[vendor[key.fullscreenEnabled]]);\n },\n set fullscreenEnabled(val) {\n },\n get fullscreenElement() {\n return document$1[vendor[key.fullscreenElement]];\n },\n set fullscreenElement(val) {\n },\n get onfullscreenchange() {\n return document$1[(\"on\" + vendor[key.fullscreenchange]).toLowerCase()];\n },\n set onfullscreenchange(handler) {\n return document$1[(\"on\" + vendor[key.fullscreenchange]).toLowerCase()] = handler;\n },\n get onfullscreenerror() {\n return document$1[(\"on\" + vendor[key.fullscreenerror]).toLowerCase()];\n },\n set onfullscreenerror(handler) {\n return document$1[(\"on\" + vendor[key.fullscreenerror]).toLowerCase()] = handler;\n }\n};\n\nvar functionThrottle = throttle;\n\nfunction throttle(fn, interval, options) {\n var timeoutId = null;\n var throttledFn = null;\n var leading = (options && options.leading);\n var trailing = (options && options.trailing);\n\n if (leading == null) {\n leading = true; // default\n }\n\n if (trailing == null) {\n trailing = !leading; //default\n }\n\n if (leading == true) {\n trailing = false; // forced because there should be invocation per call\n }\n\n var cancel = function() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n var flush = function() {\n var call = throttledFn;\n cancel();\n\n if (call) {\n call();\n }\n };\n\n var throttleWrapper = function() {\n var callNow = leading && !timeoutId;\n var context = this;\n var args = arguments;\n\n throttledFn = function() {\n return fn.apply(context, args);\n };\n\n if (!timeoutId) {\n timeoutId = setTimeout(function() {\n timeoutId = null;\n\n if (trailing) {\n return throttledFn();\n }\n }, interval);\n }\n\n if (callNow) {\n callNow = false;\n return throttledFn();\n }\n };\n\n throttleWrapper.cancel = cancel;\n throttleWrapper.flush = flush;\n\n return throttleWrapper;\n}\n\nvar functionDebounce = debounce;\n\nfunction debounce(fn, wait, callFirst) {\n var timeout = null;\n var debouncedFn = null;\n\n var clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n\n debouncedFn = null;\n timeout = null;\n }\n };\n\n var flush = function() {\n var call = debouncedFn;\n clear();\n\n if (call) {\n call();\n }\n };\n\n var debounceWrapper = function() {\n if (!wait) {\n return fn.apply(this, arguments);\n }\n\n var context = this;\n var args = arguments;\n var callNow = callFirst && !timeout;\n clear();\n\n debouncedFn = function() {\n fn.apply(context, args);\n };\n\n timeout = setTimeout(function() {\n timeout = null;\n\n if (!callNow) {\n var call = debouncedFn;\n debouncedFn = null;\n\n return call();\n }\n }, wait);\n\n if (callNow) {\n return debouncedFn();\n }\n };\n\n debounceWrapper.cancel = clear;\n debounceWrapper.flush = flush;\n\n return debounceWrapper;\n}\n\nconst t = (t2) => \"object\" == typeof t2 && null != t2 && 1 === t2.nodeType, e = (t2, e2) => (!e2 || \"hidden\" !== t2) && (\"visible\" !== t2 && \"clip\" !== t2), n = (t2, n2) => {\n if (t2.clientHeight < t2.scrollHeight || t2.clientWidth < t2.scrollWidth) {\n const o2 = getComputedStyle(t2, null);\n return e(o2.overflowY, n2) || e(o2.overflowX, n2) || ((t3) => {\n const e2 = ((t4) => {\n if (!t4.ownerDocument || !t4.ownerDocument.defaultView) return null;\n try {\n return t4.ownerDocument.defaultView.frameElement;\n } catch (t5) {\n return null;\n }\n })(t3);\n return !!e2 && (e2.clientHeight < t3.scrollHeight || e2.clientWidth < t3.scrollWidth);\n })(t2);\n }\n return false;\n}, o = (t2, e2, n2, o2, l2, r2, i, s) => r2 < t2 && i > e2 || r2 > t2 && i < e2 ? 0 : r2 <= t2 && s <= n2 || i >= e2 && s >= n2 ? r2 - t2 - o2 : i > e2 && s < n2 || r2 < t2 && s > n2 ? i - e2 + l2 : 0, l = (t2) => {\n const e2 = t2.parentElement;\n return null == e2 ? t2.getRootNode().host || null : e2;\n}, r = (e2, r2) => {\n var i, s, d, h;\n if (\"undefined\" == typeof document) return [];\n const { scrollMode: c, block: f, inline: u, boundary: a, skipOverflowHiddenElements: g } = r2, p = \"function\" == typeof a ? a : (t2) => t2 !== a;\n if (!t(e2)) throw new TypeError(\"Invalid target\");\n const m = document.scrollingElement || document.documentElement, w = [];\n let W = e2;\n for (; t(W) && p(W); ) {\n if (W = l(W), W === m) {\n w.push(W);\n break;\n }\n null != W && W === document.body && n(W) && !n(document.documentElement) || null != W && n(W, g) && w.push(W);\n }\n const b = null != (s = null == (i = window.visualViewport) ? void 0 : i.width) ? s : innerWidth, H = null != (h = null == (d = window.visualViewport) ? void 0 : d.height) ? h : innerHeight, { scrollX: y, scrollY: M } = window, { height: v, width: E, top: x, right: C, bottom: I, left: R } = e2.getBoundingClientRect(), { top: T, right: B, bottom: F, left: V } = ((t2) => {\n const e3 = window.getComputedStyle(t2);\n return { top: parseFloat(e3.scrollMarginTop) || 0, right: parseFloat(e3.scrollMarginRight) || 0, bottom: parseFloat(e3.scrollMarginBottom) || 0, left: parseFloat(e3.scrollMarginLeft) || 0 };\n })(e2);\n let k = \"start\" === f || \"nearest\" === f ? x - T : \"end\" === f ? I + F : x + v / 2 - T + F, D = \"center\" === u ? R + E / 2 - V + B : \"end\" === u ? C + B : R - V;\n const L = [];\n for (let t2 = 0; t2 < w.length; t2++) {\n const e3 = w[t2], { height: l2, width: r3, top: i2, right: s2, bottom: d2, left: h2 } = e3.getBoundingClientRect();\n if (\"if-needed\" === c && x >= 0 && R >= 0 && I <= H && C <= b && (e3 === m && !n(e3) || x >= i2 && I <= d2 && R >= h2 && C <= s2)) return L;\n const a2 = getComputedStyle(e3), g2 = parseInt(a2.borderLeftWidth, 10), p2 = parseInt(a2.borderTopWidth, 10), W2 = parseInt(a2.borderRightWidth, 10), T2 = parseInt(a2.borderBottomWidth, 10);\n let B2 = 0, F2 = 0;\n const V2 = \"offsetWidth\" in e3 ? e3.offsetWidth - e3.clientWidth - g2 - W2 : 0, S = \"offsetHeight\" in e3 ? e3.offsetHeight - e3.clientHeight - p2 - T2 : 0, X = \"offsetWidth\" in e3 ? 0 === e3.offsetWidth ? 0 : r3 / e3.offsetWidth : 0, Y = \"offsetHeight\" in e3 ? 0 === e3.offsetHeight ? 0 : l2 / e3.offsetHeight : 0;\n if (m === e3) B2 = \"start\" === f ? k : \"end\" === f ? k - H : \"nearest\" === f ? o(M, M + H, H, p2, T2, M + k, M + k + v, v) : k - H / 2, F2 = \"start\" === u ? D : \"center\" === u ? D - b / 2 : \"end\" === u ? D - b : o(y, y + b, b, g2, W2, y + D, y + D + E, E), B2 = Math.max(0, B2 + M), F2 = Math.max(0, F2 + y);\n else {\n B2 = \"start\" === f ? k - i2 - p2 : \"end\" === f ? k - d2 + T2 + S : \"nearest\" === f ? o(i2, d2, l2, p2, T2 + S, k, k + v, v) : k - (i2 + l2 / 2) + S / 2, F2 = \"start\" === u ? D - h2 - g2 : \"center\" === u ? D - (h2 + r3 / 2) + V2 / 2 : \"end\" === u ? D - s2 + W2 + V2 : o(h2, s2, r3, g2, W2 + V2, D, D + E, E);\n const { scrollLeft: t3, scrollTop: n2 } = e3;\n B2 = 0 === Y ? 0 : Math.max(0, Math.min(n2 + B2 / Y, e3.scrollHeight - l2 / Y + S)), F2 = 0 === X ? 0 : Math.max(0, Math.min(t3 + F2 / X, e3.scrollWidth - r3 / X + V2)), k += n2 - B2, D += t3 - F2;\n }\n L.push({ el: e3, top: B2, left: F2 });\n }\n return L;\n};\n\nvar Icon$0 = `<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M15.0007 28.7923C15.0007 29.0152 14.9774 29.096 14.9339 29.1775C14.8903 29.259 14.8263 29.323 14.7449 29.3665C14.6634 29.4101 14.5826 29.4333 14.3597 29.4333H12.575C12.3521 29.4333 12.2713 29.4101 12.1898 29.3665C12.1083 29.323 12.0443 29.259 12.0008 29.1775C11.9572 29.096 11.934 29.0152 11.934 28.7923V12.2993L5.97496 12.3C5.75208 12.3 5.67125 12.2768 5.58977 12.2332C5.50829 12.1896 5.44434 12.1257 5.40077 12.0442C5.35719 11.9627 5.33398 11.8819 5.33398 11.659V9.87429C5.33398 9.65141 5.35719 9.57059 5.40077 9.48911C5.44434 9.40762 5.50829 9.34368 5.58977 9.3001C5.67125 9.25652 5.75208 9.23332 5.97496 9.23332H26.0263C26.2492 9.23332 26.33 9.25652 26.4115 9.3001C26.493 9.34368 26.557 9.40762 26.6005 9.48911C26.6441 9.57059 26.6673 9.65141 26.6673 9.87429V11.659C26.6673 11.8819 26.6441 11.9627 26.6005 12.0442C26.557 12.1257 26.493 12.1896 26.4115 12.2332C26.33 12.2768 26.2492 12.3 26.0263 12.3L20.067 12.2993L20.0673 28.7923C20.0673 29.0152 20.0441 29.096 20.0005 29.1775C19.957 29.259 19.893 29.323 19.8115 29.3665C19.73 29.4101 19.6492 29.4333 19.4263 29.4333H17.6416C17.4187 29.4333 17.3379 29.4101 17.2564 29.3665C17.175 29.323 17.111 29.259 17.0674 29.1775C17.0239 29.096 17.0007 29.0152 17.0007 28.7923L17 22.7663H15L15.0007 28.7923Z\" fill=\"currentColor\"/> <path d=\"M16.0007 7.89998C17.4734 7.89998 18.6673 6.70608 18.6673 5.23332C18.6673 3.76056 17.4734 2.56665 16.0007 2.56665C14.5279 2.56665 13.334 3.76056 13.334 5.23332C13.334 6.70608 14.5279 7.89998 16.0007 7.89998Z\" fill=\"currentColor\"/>`;\n\nvar Icon$5 = `<path d=\"M5.33334 6.00001C5.33334 5.63182 5.63181 5.33334 6 5.33334H26C26.3682 5.33334 26.6667 5.63182 26.6667 6.00001V20.6667C26.6667 21.0349 26.3682 21.3333 26 21.3333H23.7072C23.4956 21.3333 23.2966 21.233 23.171 21.0628L22.1859 19.7295C21.8607 19.2894 22.1749 18.6667 22.7221 18.6667H23.3333C23.7015 18.6667 24 18.3682 24 18V8.66668C24 8.29849 23.7015 8.00001 23.3333 8.00001H8.66667C8.29848 8.00001 8 8.29849 8 8.66668V18C8 18.3682 8.29848 18.6667 8.66667 18.6667H9.29357C9.84072 18.6667 10.1549 19.2894 9.82976 19.7295L8.84467 21.0628C8.71898 21.233 8.52 21.3333 8.30848 21.3333H6C5.63181 21.3333 5.33334 21.0349 5.33334 20.6667V6.00001Z\" fill=\"currentColor\"/> <path d=\"M8.78528 25.6038C8.46013 26.0439 8.77431 26.6667 9.32147 26.6667L22.6785 26.6667C23.2256 26.6667 23.5398 26.0439 23.2146 25.6038L16.5358 16.5653C16.2693 16.2046 15.73 16.2047 15.4635 16.5653L8.78528 25.6038Z\" fill=\"currentColor\"/>`;\n\nvar Icon$8 = `<path d=\"M17.4853 18.9093C17.4853 19.0281 17.6289 19.0875 17.7129 19.0035L22.4185 14.2979C22.6788 14.0376 23.1009 14.0376 23.3613 14.2979L24.7755 15.7122C25.0359 15.9725 25.0359 16.3946 24.7755 16.655L16.2902 25.1403C16.0299 25.4006 15.6078 25.4006 15.3474 25.1403L13.9332 23.726L13.9319 23.7247L6.86189 16.6547C6.60154 16.3944 6.60154 15.9723 6.86189 15.7119L8.2761 14.2977C8.53645 14.0373 8.95856 14.0373 9.21891 14.2977L13.9243 19.0031C14.0083 19.0871 14.1519 19.0276 14.1519 18.9088L14.1519 6.00004C14.1519 5.63185 14.4504 5.33337 14.8186 5.33337L16.8186 5.33337C17.1868 5.33337 17.4853 5.63185 17.4853 6.00004L17.4853 18.9093Z\" fill=\"currentColor\"/>`;\n\nvar Icon$11 = `<path d=\"M13.0908 14.3334C12.972 14.3334 12.9125 14.1898 12.9965 14.1058L17.7021 9.40022C17.9625 9.13987 17.9625 8.71776 17.7021 8.45741L16.2879 7.04319C16.0275 6.78284 15.6054 6.78284 15.3451 7.04319L6.8598 15.5285C6.59945 15.7888 6.59945 16.2109 6.8598 16.4713L8.27401 17.8855L8.27536 17.8868L15.3453 24.9568C15.6057 25.2172 16.0278 25.2172 16.2881 24.9568L17.7024 23.5426C17.9627 23.2822 17.9627 22.8601 17.7024 22.5998L12.9969 17.8944C12.9129 17.8104 12.9724 17.6668 13.0912 17.6668L26 17.6668C26.3682 17.6668 26.6667 17.3683 26.6667 17.0001V15.0001C26.6667 14.6319 26.3682 14.3334 26 14.3334L13.0908 14.3334Z\" fill=\"currentColor\"/>`;\n\nvar Icon$13 = `<path d=\"M14.1521 13.0929C14.1521 12.9741 14.0085 12.9147 13.9245 12.9987L9.21891 17.7043C8.95856 17.9646 8.53645 17.9646 8.2761 17.7043L6.86189 16.29C6.60154 16.0297 6.60154 15.6076 6.86189 15.3472L15.3472 6.86195C15.6075 6.6016 16.0296 6.6016 16.29 6.86195L17.7042 8.27616L17.7055 8.27751L24.7755 15.3475C25.0359 15.6078 25.0359 16.0299 24.7755 16.2903L23.3613 17.7045C23.1009 17.9649 22.6788 17.9649 22.4185 17.7045L17.7131 12.9991C17.6291 12.9151 17.4855 12.9746 17.4855 13.0934V26.0022C17.4855 26.3704 17.187 26.6688 16.8188 26.6688H14.8188C14.4506 26.6688 14.1521 26.3704 14.1521 26.0022L14.1521 13.0929Z\" fill=\"currentColor\"/>`;\n\nvar Icon$16 = `<path d=\"M16.6927 25.3346C16.3245 25.3346 16.026 25.0361 16.026 24.6679L16.026 7.3346C16.026 6.96641 16.3245 6.66794 16.6927 6.66794L18.6927 6.66794C19.0609 6.66794 19.3594 6.96642 19.3594 7.3346L19.3594 24.6679C19.3594 25.0361 19.0609 25.3346 18.6927 25.3346H16.6927Z\" fill=\"currentColor\"/> <path d=\"M24.026 25.3346C23.6578 25.3346 23.3594 25.0361 23.3594 24.6679L23.3594 7.3346C23.3594 6.96641 23.6578 6.66794 24.026 6.66794L26.026 6.66794C26.3942 6.66794 26.6927 6.96642 26.6927 7.3346V24.6679C26.6927 25.0361 26.3942 25.3346 26.026 25.3346H24.026Z\" fill=\"currentColor\"/> <path d=\"M5.48113 23.9407C5.38584 24.2963 5.59689 24.6619 5.95254 24.7572L7.88439 25.2748C8.24003 25.3701 8.60559 25.159 8.70089 24.8034L13.1871 8.06067C13.2824 7.70503 13.0713 7.33947 12.7157 7.24417L10.7838 6.72654C10.4282 6.63124 10.0626 6.8423 9.96733 7.19794L5.48113 23.9407Z\" fill=\"currentColor\"/>`;\n\nvar Icon$19 = `<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M24.9266 7.57992C25.015 7.60672 25.0886 7.64746 25.2462 7.80506L26.956 9.51488C27.1136 9.67248 27.1543 9.74604 27.1811 9.83447C27.2079 9.9229 27.2079 10.0133 27.1811 10.1018C27.1543 10.1902 27.1136 10.2638 26.956 10.4214L13.1822 24.1951C13.0246 24.3527 12.951 24.3935 12.8626 24.4203C12.797 24.4402 12.7304 24.4453 12.6642 24.4357L12.7319 24.4203C12.6435 24.4471 12.553 24.4471 12.4646 24.4203C12.3762 24.3935 12.3026 24.3527 12.145 24.1951L5.04407 17.0942C4.88647 16.9366 4.84573 16.863 4.81893 16.7746C4.79213 16.6862 4.79213 16.5957 4.81893 16.5073C4.84573 16.4189 4.88647 16.3453 5.04407 16.1877L6.7539 14.4779C6.9115 14.3203 6.98506 14.2796 7.07349 14.2528C7.16191 14.226 7.25235 14.226 7.34078 14.2528C7.42921 14.2796 7.50277 14.3203 7.66037 14.4779L12.6628 19.4808L24.3397 7.80506C24.4973 7.64746 24.5709 7.60672 24.6593 7.57992C24.7477 7.55311 24.8382 7.55311 24.9266 7.57992Z\" fill=\"currentColor\"/>`;\n\nvar Icon$22 = `<path d=\"M17.947 16.095C17.999 16.043 17.999 15.9585 17.947 15.9065L11.6295 9.58899C11.3691 9.32864 11.3691 8.90653 11.6295 8.64618L13.2323 7.04341C13.4926 6.78306 13.9147 6.78306 14.1751 7.04341L21.0289 13.8973C21.0392 13.9064 21.0493 13.9158 21.0591 13.9257L22.6619 15.5285C22.9223 15.7888 22.9223 16.2109 22.6619 16.4713L14.1766 24.9565C13.9163 25.2169 13.4942 25.2169 13.2338 24.9565L11.631 23.3538C11.3707 23.0934 11.3707 22.6713 11.631 22.411L17.947 16.095Z\" fill=\"currentColor\"/>`;\n\nvar Icon$24 = `<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M6 7C5.63181 7 5.33333 7.29848 5.33333 7.66667V14.8667C5.33333 14.9403 5.39361 14.9999 5.46724 15.0009C10.8844 15.0719 15.2614 19.449 15.3325 24.8661C15.3334 24.9397 15.393 25 15.4667 25H26C26.3682 25 26.6667 24.7015 26.6667 24.3333V7.66667C26.6667 7.29848 26.3682 7 26 7H6ZM17.0119 22.2294C17.0263 22.29 17.0802 22.3333 17.1425 22.3333H23.3333C23.7015 22.3333 24 22.0349 24 21.6667V10.3333C24 9.96514 23.7015 9.66667 23.3333 9.66667H8.66667C8.29848 9.66667 8 9.96514 8 10.3333V13.1909C8 13.2531 8.04332 13.3071 8.10392 13.3214C12.5063 14.3618 15.9715 17.827 17.0119 22.2294Z\" fill=\"currentColor\"/> <path d=\"M13.2 25C13.2736 25 13.3334 24.9398 13.3322 24.8661C13.2615 20.5544 9.77889 17.0718 5.46718 17.0011C5.39356 16.9999 5.33333 17.0597 5.33333 17.1333V18.8667C5.33333 18.9403 5.39348 18.9999 5.4671 19.0015C8.67465 19.0716 11.2617 21.6587 11.3319 24.8662C11.3335 24.9399 11.393 25 11.4667 25H13.2Z\" fill=\"currentColor\"/> <path d=\"M5.33333 21.1333C5.33333 21.0597 5.39332 20.9998 5.46692 21.0022C7.57033 21.0712 9.26217 22.763 9.33114 24.8664C9.33356 24.94 9.27364 25 9.2 25H6C5.63181 25 5.33333 24.7015 5.33333 24.3333V21.1333Z\" fill=\"currentColor\"/>`;\n\nvar chromecast = /*#__PURE__*/Object.freeze({\n __proto__: null,\n default: Icon$24\n});\n\nvar Icon$26 = `<path d=\"M8 28.0003C8 27.6321 8.29848 27.3336 8.66667 27.3336H23.3333C23.7015 27.3336 24 27.6321 24 28.0003V29.3336C24 29.7018 23.7015 30.0003 23.3333 30.0003H8.66667C8.29848 30.0003 8 29.7018 8 29.3336V28.0003Z\" fill=\"currentColor\"/> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.66602 6.66699C4.29783 6.66699 3.99935 6.96547 3.99935 7.33366V24.667C3.99935 25.0352 4.29783 25.3337 4.66602 25.3337H27.3327C27.7009 25.3337 27.9994 25.0352 27.9994 24.667V7.33366C27.9994 6.96547 27.7009 6.66699 27.3327 6.66699H4.66602ZM8.66659 21.3333C8.2984 21.3333 7.99992 21.0349 7.99992 20.6667V11.3333C7.99992 10.9651 8.2984 10.6667 8.66659 10.6667H13.9999C14.3681 10.6667 14.6666 10.9651 14.6666 11.3333V12.6667C14.6666 13.0349 14.3681 13.3333 13.9999 13.3333H10.7999C10.7263 13.3333 10.6666 13.393 10.6666 13.4667V18.5333C10.6666 18.607 10.7263 18.6667 10.7999 18.6667H13.9999C14.3681 18.6667 14.6666 18.9651 14.6666 19.3333V20.6667C14.6666 21.0349 14.3681 21.3333 13.9999 21.3333H8.66659ZM17.9999 21.3333C17.6317 21.3333 17.3333 21.0349 17.3333 20.6667V11.3333C17.3333 10.9651 17.6317 10.6667 17.9999 10.6667H23.3333C23.7014 10.6667 23.9999 10.9651 23.9999 11.3333V12.6667C23.9999 13.0349 23.7014 13.3333 23.3333 13.3333H20.1333C20.0596 13.3333 19.9999 13.393 19.9999 13.4667V18.5333C19.9999 18.607 20.0596 18.6667 20.1333 18.6667H23.3333C23.7014 18.6667 23.9999 18.9651 23.9999 19.3333V20.6667C23.9999 21.0349 23.7014 21.3333 23.3333 21.3333H17.9999Z\" fill=\"currentColor\"/>`;\n\nvar Icon$27 = `<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.6661 6.66699C4.29791 6.66699 3.99943 6.96547 3.99943 7.33366V24.667C3.99943 25.0352 4.29791 25.3337 4.6661 25.3337H27.3328C27.701 25.3337 27.9994 25.0352 27.9994 24.667V7.33366C27.9994 6.96547 27.701 6.66699 27.3328 6.66699H4.6661ZM8.66667 21.3333C8.29848 21.3333 8 21.0349 8 20.6667V11.3333C8 10.9651 8.29848 10.6667 8.66667 10.6667H14C14.3682 10.6667 14.6667 10.9651 14.6667 11.3333V12.6667C14.6667 13.0349 14.3682 13.3333 14 13.3333H10.8C10.7264 13.3333 10.6667 13.393 10.6667 13.4667V18.5333C10.6667 18.607 10.7264 18.6667 10.8 18.6667H14C14.3682 18.6667 14.6667 18.9651 14.6667 19.3333V20.6667C14.6667 21.0349 14.3682 21.3333 14 21.3333H8.66667ZM18 21.3333C17.6318 21.3333 17.3333 21.0349 17.3333 20.6667V11.3333C17.3333 10.9651 17.6318 10.6667 18 10.6667H23.3333C23.7015 10.6667 24 10.9651 24 11.3333V12.6667C24 13.0349 23.7015 13.3333 23.3333 13.3333H20.1333C20.0597 13.3333 20 13.393 20 13.4667V18.5333C20 18.607 20.0597 18.6667 20.1333 18.6667H23.3333C23.7015 18.6667 24 18.9651 24 19.3333V20.6667C24 21.0349 23.7015 21.3333 23.3333 21.3333H18Z\" fill=\"currentColor\"/>`;\n\nvar Icon$31 = `<path d=\"M14.2225 13.7867C14.3065 13.8706 14.4501 13.8112 14.4501 13.6924V5.99955C14.4501 5.63136 14.7486 5.33289 15.1167 5.33289H16.8501C17.2183 5.33289 17.5167 5.63136 17.5167 5.99955V13.6916C17.5167 13.8104 17.6604 13.8699 17.7444 13.7859L19.9433 11.5869C20.2037 11.3266 20.6258 11.3266 20.8861 11.5869L22.1118 12.8126C22.3722 13.0729 22.3722 13.4951 22.1118 13.7554L16.4549 19.4123C16.1946 19.6726 15.772 19.6731 15.5116 19.4128L9.85479 13.7559C9.59444 13.4956 9.59444 13.0734 9.85479 12.8131L11.0804 11.5874C11.3408 11.3271 11.7629 11.3271 12.0233 11.5874L14.2225 13.7867Z\" fill=\"currentColor\"/> <path d=\"M5.99998 20.267C5.63179 20.267 5.33331 20.5654 5.33331 20.9336V25.9997C5.33331 26.3678 5.63179 26.6663 5.99998 26.6663H26C26.3682 26.6663 26.6666 26.3678 26.6666 25.9997V20.9336C26.6666 20.5654 26.3682 20.267 26 20.267H24.2666C23.8985 20.267 23.6 20.5654 23.6 20.9336V22.9333C23.6 23.3014 23.3015 23.5999 22.9333 23.5999H9.06638C8.69819 23.5999 8.39972 23.3014 8.39972 22.9333V20.9336C8.39972 20.5654 8.10124 20.267 7.73305 20.267H5.99998Z\" fill=\"currentColor\"/>`;\n\nvar Icon$33 = `<path d=\"M16 20C18.2091 20 20 18.2092 20 16C20 13.7909 18.2091 12 16 12C13.7909 12 12 13.7909 12 16C12 18.2092 13.7909 20 16 20Z\" fill=\"currentColor\"/> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M28 16.0058C28 18.671 23.5 25.3334 16 25.3334C8.5 25.3334 4 18.6762 4 16.0058C4 13.3354 8.50447 6.66669 16 6.66669C23.4955 6.66669 28 13.3406 28 16.0058ZM25.3318 15.9934C25.3328 16.0017 25.3328 16.0099 25.3318 16.0182C25.3274 16.0571 25.3108 16.1728 25.2485 16.3708C25.1691 16.6229 25.0352 16.9462 24.8327 17.3216C24.4264 18.0749 23.7969 18.9398 22.9567 19.754C21.2791 21.3798 18.9148 22.6667 16 22.6667C13.0845 22.6667 10.7202 21.3805 9.04298 19.7557C8.20295 18.9419 7.57362 18.0773 7.16745 17.3241C6.96499 16.9486 6.83114 16.6252 6.75172 16.3729C6.67942 16.1431 6.66856 16.0243 6.66695 16.0066L6.66695 16.005C6.66859 15.9871 6.67951 15.8682 6.75188 15.6383C6.83145 15.3854 6.96554 15.0614 7.16831 14.6853C7.57507 13.9306 8.20514 13.0644 9.04577 12.249C10.7245 10.6208 13.0886 9.33335 16 9.33335C18.9108 9.33335 21.2748 10.6215 22.9539 12.2507C23.7947 13.0664 24.4249 13.933 24.8318 14.6877C25.0346 15.0639 25.1688 15.3878 25.2483 15.6404C25.3107 15.8386 25.3274 15.9545 25.3318 15.9934Z\" fill=\"currentColor\"/>`;\n\nvar Icon$34 = `<path d=\"M15.8747 8.11857C16.3148 7.79342 16.9375 8.10759 16.9375 8.65476V14.2575C16.9375 14.3669 17.0621 14.4297 17.1501 14.3647L25.6038 8.11857C26.0439 7.79342 26.6667 8.10759 26.6667 8.65476V23.3451C26.6667 23.8923 26.0439 24.2064 25.6038 23.8813L17.1501 17.6346C17.0621 17.5695 16.9375 17.6324 16.9375 17.7418L16.9375 23.3451C16.9375 23.8923 16.3147 24.2064 15.8747 23.8813L5.93387 16.5358C5.57322 16.2693 5.57323 15.7299 5.93389 15.4634L15.8747 8.11857Z\" fill=\"currentColor\"/>`;\n\nvar Icon$35 = `<path d=\"M16.1253 8.11866C15.6852 7.7935 15.0625 8.10768 15.0625 8.65484V14.2576C15.0625 14.367 14.9379 14.4298 14.8499 14.3648L6.39615 8.11866C5.95607 7.7935 5.33331 8.10768 5.33331 8.65484V23.3452C5.33331 23.8923 5.9561 24.2065 6.39617 23.8813L14.8499 17.6347C14.9379 17.5696 15.0625 17.6325 15.0625 17.7419L15.0625 23.3452C15.0625 23.8923 15.6853 24.2065 16.1253 23.8813L26.0661 16.5358C26.4268 16.2694 26.4268 15.73 26.0661 15.4635L16.1253 8.11866Z\" fill=\"currentColor\"/>`;\n\nvar Icon$39 = `<path d=\"M19.3334 13.3333C18.9652 13.3333 18.6667 13.0349 18.6667 12.6667L18.6667 7.33333C18.6667 6.96514 18.9652 6.66666 19.3334 6.66666H21.3334C21.7015 6.66666 22 6.96514 22 7.33333V9.86666C22 9.9403 22.0597 10 22.1334 10L24.6667 10C25.0349 10 25.3334 10.2985 25.3334 10.6667V12.6667C25.3334 13.0349 25.0349 13.3333 24.6667 13.3333L19.3334 13.3333Z\" fill=\"currentColor\"/> <path d=\"M13.3334 19.3333C13.3334 18.9651 13.0349 18.6667 12.6667 18.6667H7.33335C6.96516 18.6667 6.66669 18.9651 6.66669 19.3333V21.3333C6.66669 21.7015 6.96516 22 7.33335 22H9.86669C9.94032 22 10 22.0597 10 22.1333L10 24.6667C10 25.0349 10.2985 25.3333 10.6667 25.3333H12.6667C13.0349 25.3333 13.3334 25.0349 13.3334 24.6667L13.3334 19.3333Z\" fill=\"currentColor\"/> <path d=\"M18.6667 24.6667C18.6667 25.0349 18.9652 25.3333 19.3334 25.3333H21.3334C21.7015 25.3333 22 25.0349 22 24.6667V22.1333C22 22.0597 22.0597 22 22.1334 22H24.6667C25.0349 22 25.3334 21.7015 25.3334 21.3333V19.3333C25.3334 18.9651 25.0349 18.6667 24.6667 18.6667L19.3334 18.6667C18.9652 18.6667 18.6667 18.9651 18.6667 19.3333L18.6667 24.6667Z\" fill=\"currentColor\"/> <path d=\"M10.6667 13.3333H12.6667C13.0349 13.3333 13.3334 13.0349 13.3334 12.6667L13.3334 10.6667V7.33333C13.3334 6.96514 13.0349 6.66666 12.6667 6.66666H10.6667C10.2985 6.66666 10 6.96514 10 7.33333L10 9.86666C10 9.9403 9.94033 10 9.86669 10L7.33335 10C6.96516 10 6.66669 10.2985 6.66669 10.6667V12.6667C6.66669 13.0349 6.96516 13.3333 7.33335 13.3333L10.6667 13.3333Z\" fill=\"currentColor\"/>`;\n\nvar Icon$40 = `<path d=\"M25.3299 7.26517C25.2958 6.929 25.0119 6.66666 24.6667 6.66666H19.3334C18.9652 6.66666 18.6667 6.96514 18.6667 7.33333V9.33333C18.6667 9.70152 18.9652 10 19.3334 10L21.8667 10C21.9403 10 22 10.0597 22 10.1333V12.6667C22 13.0349 22.2985 13.3333 22.6667 13.3333H24.6667C25.0349 13.3333 25.3334 13.0349 25.3334 12.6667V7.33333C25.3334 7.31032 25.3322 7.28758 25.3299 7.26517Z\" fill=\"currentColor\"/> <path d=\"M22 21.8667C22 21.9403 21.9403 22 21.8667 22L19.3334 22C18.9652 22 18.6667 22.2985 18.6667 22.6667V24.6667C18.6667 25.0349 18.9652 25.3333 19.3334 25.3333L24.6667 25.3333C25.0349 25.3333 25.3334 25.0349 25.3334 24.6667V19.3333C25.3334 18.9651 25.0349 18.6667 24.6667 18.6667H22.6667C22.2985 18.6667 22 18.9651 22 19.3333V21.8667Z\" fill=\"currentColor\"/> <path d=\"M12.6667 22H10.1334C10.0597 22 10 21.9403 10 21.8667V19.3333C10 18.9651 9.70154 18.6667 9.33335 18.6667H7.33335C6.96516 18.6667 6.66669 18.9651 6.66669 19.3333V24.6667C6.66669 25.0349 6.96516 25.3333 7.33335 25.3333H12.6667C13.0349 25.3333 13.3334 25.0349 13.3334 24.6667V22.6667C13.3334 22.2985 13.0349 22 12.6667 22Z\" fill=\"currentColor\"/> <path d=\"M10 12.6667V10.1333C10 10.0597 10.0597 10 10.1334 10L12.6667 10C13.0349 10 13.3334 9.70152 13.3334 9.33333V7.33333C13.3334 6.96514 13.0349 6.66666 12.6667 6.66666H7.33335C6.96516 6.66666 6.66669 6.96514 6.66669 7.33333V12.6667C6.66669 13.0349 6.96516 13.3333 7.33335 13.3333H9.33335C9.70154 13.3333 10 13.0349 10 12.6667Z\" fill=\"currentColor\"/>`;\n\nvar Icon$53 = `<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M26.6667 5.99998C26.6667 5.63179 26.3682 5.33331 26 5.33331H11.3333C10.9651 5.33331 10.6667 5.63179 10.6667 5.99998V17.5714C10.6667 17.6694 10.5644 17.7342 10.4741 17.6962C9.91823 17.4625 9.30754 17.3333 8.66667 17.3333C6.08934 17.3333 4 19.4226 4 22C4 24.5773 6.08934 26.6666 8.66667 26.6666C11.244 26.6666 13.3333 24.5773 13.3333 22V8.66665C13.3333 8.29846 13.6318 7.99998 14 7.99998L23.3333 7.99998C23.7015 7.99998 24 8.29846 24 8.66665V14.9048C24 15.0027 23.8978 15.0675 23.8075 15.0296C23.2516 14.7958 22.6409 14.6666 22 14.6666C19.4227 14.6666 17.3333 16.756 17.3333 19.3333C17.3333 21.9106 19.4227 24 22 24C24.5773 24 26.6667 21.9106 26.6667 19.3333V5.99998ZM22 21.3333C23.1046 21.3333 24 20.4379 24 19.3333C24 18.2287 23.1046 17.3333 22 17.3333C20.8954 17.3333 20 18.2287 20 19.3333C20 20.4379 20.8954 21.3333 22 21.3333ZM8.66667 24C9.77124 24 10.6667 23.1045 10.6667 22C10.6667 20.8954 9.77124 20 8.66667 20C7.5621 20 6.66667 20.8954 6.66667 22C6.66667 23.1045 7.5621 24 8.66667 24Z\" fill=\"currentColor\"/>`;\n\nvar Icon$54 = `<path d=\"M17.5091 24.6594C17.5091 25.2066 16.8864 25.5208 16.4463 25.1956L9.44847 20.0252C9.42553 20.0083 9.39776 19.9991 9.36923 19.9991H4.66667C4.29848 19.9991 4 19.7006 4 19.3325V12.6658C4 12.2976 4.29848 11.9991 4.66667 11.9991H9.37115C9.39967 11.9991 9.42745 11.99 9.45039 11.973L16.4463 6.8036C16.8863 6.47842 17.5091 6.79259 17.5091 7.33977L17.5091 24.6594Z\" fill=\"currentColor\"/> <path d=\"M28.8621 13.6422C29.1225 13.3818 29.1225 12.9597 28.8621 12.6994L27.9193 11.7566C27.659 11.4962 27.2368 11.4962 26.9765 11.7566L24.7134 14.0197C24.6613 14.0717 24.5769 14.0717 24.5248 14.0197L22.262 11.7568C22.0016 11.4964 21.5795 11.4964 21.3191 11.7568L20.3763 12.6996C20.116 12.9599 20.116 13.382 20.3763 13.6424L22.6392 15.9053C22.6913 15.9573 22.6913 16.0418 22.6392 16.0938L20.3768 18.3562C20.1165 18.6166 20.1165 19.0387 20.3768 19.299L21.3196 20.2419C21.58 20.5022 22.0021 20.5022 22.2624 20.2418L24.5248 17.9795C24.5769 17.9274 24.6613 17.9274 24.7134 17.9795L26.976 20.2421C27.2363 20.5024 27.6585 20.5024 27.9188 20.2421L28.8616 19.2992C29.122 19.0389 29.122 18.6168 28.8616 18.3564L26.599 16.0938C26.547 16.0418 26.547 15.9573 26.599 15.9053L28.8621 13.6422Z\" fill=\"currentColor\"/>`;\n\nvar Icon$56 = `<path d=\"M26.6009 16.0725C26.6009 16.424 26.4302 17.1125 25.9409 18.0213C25.4676 18.8976 24.7542 19.8715 23.8182 20.7783C21.9489 22.5905 19.2662 24.0667 15.9342 24.0667C12.6009 24.0667 9.91958 22.5915 8.04891 20.78C7.11424 19.8736 6.40091 18.9 5.92758 18.0236C5.43824 17.1149 5.26758 16.4257 5.26758 16.0725C5.26758 15.7193 5.43824 15.0293 5.92891 14.1193C6.40224 13.2416 7.11558 12.2665 8.05158 11.3587C9.92224 9.54398 12.6049 8.06665 15.9342 8.06665C19.2636 8.06665 21.9449 9.54505 23.8169 11.3604C24.7529 12.2687 25.4662 13.2441 25.9396 14.1216C26.4302 15.0317 26.6009 15.7209 26.6009 16.0725Z\" stroke=\"currentColor\" stroke-width=\"3\"/> <path d=\"M15.9336 20.0667C18.1427 20.0667 19.9336 18.2758 19.9336 16.0667C19.9336 13.8575 18.1427 12.0667 15.9336 12.0667C13.7245 12.0667 11.9336 13.8575 11.9336 16.0667C11.9336 18.2758 13.7245 20.0667 15.9336 20.0667Z\" fill=\"currentColor\"/> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M27.2323 25.0624L6.93878 4.76886C6.78118 4.61126 6.70762 4.57052 6.61919 4.54372C6.53077 4.51692 6.44033 4.51691 6.3519 4.54372C6.26347 4.57052 6.18991 4.61126 6.03231 4.76886L4.77032 6.03085C4.61272 6.18845 4.57198 6.26201 4.54518 6.35044C4.51838 6.43887 4.51838 6.5293 4.54518 6.61773C4.57198 6.70616 4.61272 6.77972 4.77032 6.93732L25.0639 27.2308C25.2215 27.3884 25.295 27.4292 25.3834 27.456C25.4719 27.4828 25.5623 27.4828 25.6507 27.456C25.7392 27.4292 25.8127 27.3885 25.9703 27.2309L27.2323 25.9689C27.3899 25.8113 27.4307 25.7377 27.4575 25.6493C27.4843 25.5608 27.4843 25.4704 27.4575 25.382C27.4307 25.2935 27.3899 25.22 27.2323 25.0624Z\" fill=\"currentColor\"/>`;\n\nvar Icon$59 = `<path d=\"M8.66667 6.66667C8.29848 6.66667 8 6.96514 8 7.33333V24.6667C8 25.0349 8.29848 25.3333 8.66667 25.3333H12.6667C13.0349 25.3333 13.3333 25.0349 13.3333 24.6667V7.33333C13.3333 6.96514 13.0349 6.66667 12.6667 6.66667H8.66667Z\" fill=\"currentColor\"/> <path d=\"M19.3333 6.66667C18.9651 6.66667 18.6667 6.96514 18.6667 7.33333V24.6667C18.6667 25.0349 18.9651 25.3333 19.3333 25.3333H23.3333C23.7015 25.3333 24 25.0349 24 24.6667V7.33333C24 6.96514 23.7015 6.66667 23.3333 6.66667H19.3333Z\" fill=\"currentColor\"/>`;\n\nvar Icon$60 = `<path d=\"M5.33334 26V19.4667C5.33334 19.393 5.39304 19.3333 5.46668 19.3333H7.86668C7.94031 19.3333 8.00001 19.393 8.00001 19.4667V23.3333C8.00001 23.7015 8.29849 24 8.66668 24H23.3333C23.7015 24 24 23.7015 24 23.3333V8.66666C24 8.29847 23.7015 7.99999 23.3333 7.99999H19.4667C19.393 7.99999 19.3333 7.9403 19.3333 7.86666V5.46666C19.3333 5.39302 19.393 5.33333 19.4667 5.33333H26C26.3682 5.33333 26.6667 5.63181 26.6667 5.99999V26C26.6667 26.3682 26.3682 26.6667 26 26.6667H6.00001C5.63182 26.6667 5.33334 26.3682 5.33334 26Z\" fill=\"currentColor\"/> <path d=\"M14.0098 8.42359H10.806C10.6872 8.42359 10.6277 8.56721 10.7117 8.6512L16.5491 14.4886C16.8094 14.7489 16.8094 15.171 16.5491 15.4314L15.3234 16.657C15.0631 16.9174 14.641 16.9174 14.3806 16.657L8.63739 10.9138C8.55339 10.8298 8.40978 10.8893 8.40978 11.0081V14.0236C8.40978 14.3918 8.1113 14.6903 7.74311 14.6903H6.00978C5.64159 14.6903 5.34311 14.3918 5.34311 14.0236L5.34311 6.02359C5.34311 5.6554 5.64159 5.35692 6.00978 5.35692L14.0098 5.35692C14.378 5.35692 14.6764 5.6554 14.6764 6.02359V7.75692C14.6764 8.12511 14.378 8.42359 14.0098 8.42359Z\" fill=\"currentColor\"/>`;\n\nvar Icon$61 = `<path d=\"M16 15.3333C15.6318 15.3333 15.3333 15.6318 15.3333 16V20C15.3333 20.3682 15.6318 20.6667 16 20.6667H21.3333C21.7015 20.6667 22 20.3682 22 20V16C22 15.6318 21.7015 15.3333 21.3333 15.3333H16Z\" fill=\"currentColor\"/> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.33333 7.33334C5.33333 6.96515 5.63181 6.66667 5.99999 6.66667H26C26.3682 6.66667 26.6667 6.96515 26.6667 7.33334V24.6667C26.6667 25.0349 26.3682 25.3333 26 25.3333H5.99999C5.63181 25.3333 5.33333 25.0349 5.33333 24.6667V7.33334ZM7.99999 10C7.99999 9.63182 8.29847 9.33334 8.66666 9.33334H23.3333C23.7015 9.33334 24 9.63182 24 10V22C24 22.3682 23.7015 22.6667 23.3333 22.6667H8.66666C8.29847 22.6667 7.99999 22.3682 7.99999 22V10Z\" fill=\"currentColor\"/>`;\n\nvar Icon$62 = `<path d=\"M10.6667 6.6548C10.6667 6.10764 11.2894 5.79346 11.7295 6.11862L24.377 15.4634C24.7377 15.7298 24.7377 16.2692 24.3771 16.5357L11.7295 25.8813C11.2895 26.2065 10.6667 25.8923 10.6667 25.3451L10.6667 6.6548Z\" fill=\"currentColor\"/>`;\n\nvar Icon$63 = `<path d=\"M13.9213 5.53573C14.3146 5.45804 14.6666 5.76987 14.6666 6.17079V7.57215C14.6666 7.89777 14.4305 8.17277 14.114 8.24925C12.5981 8.61559 11.2506 9.41368 10.2091 10.506C9.98474 10.7414 9.62903 10.8079 9.34742 10.6453L8.14112 9.94885C7.79394 9.7484 7.69985 9.28777 7.96359 8.98585C9.48505 7.24409 11.5636 6.00143 13.9213 5.53573Z\" fill=\"currentColor\"/> <path d=\"M5.88974 12.5908C6.01805 12.2101 6.46491 12.0603 6.81279 12.2611L8.01201 12.9535C8.29379 13.1162 8.41396 13.4577 8.32238 13.7699C8.11252 14.4854 7.99998 15.2424 7.99998 16.0257C7.99998 16.809 8.11252 17.566 8.32238 18.2814C8.41396 18.5936 8.29378 18.9352 8.01201 19.0979L6.82742 19.7818C6.48051 19.9821 6.03488 19.8337 5.90521 19.4547C5.5345 18.3712 5.33331 17.2091 5.33331 16C5.33331 14.8078 5.5289 13.6613 5.88974 12.5908Z\" fill=\"currentColor\"/> <path d=\"M8.17106 22.0852C7.82291 22.2862 7.72949 22.7486 7.99532 23.0502C9.51387 24.773 11.5799 26.0017 13.9213 26.4642C14.3146 26.5419 14.6666 26.2301 14.6666 25.8291V24.4792C14.6666 24.1536 14.4305 23.8786 14.114 23.8021C12.5981 23.4358 11.2506 22.6377 10.2091 21.5453C9.98474 21.31 9.62903 21.2435 9.34742 21.4061L8.17106 22.0852Z\" fill=\"currentColor\"/> <path d=\"M17.3333 25.8291C17.3333 26.2301 17.6857 26.5418 18.079 26.4641C22.9748 25.4969 26.6666 21.1796 26.6666 16C26.6666 10.8204 22.9748 6.50302 18.079 5.5358C17.6857 5.4581 17.3333 5.76987 17.3333 6.17079V7.57215C17.3333 7.89777 17.5697 8.17282 17.8862 8.24932C21.3942 9.09721 24 12.2572 24 16.0257C24 19.7942 21.3942 22.9542 17.8862 23.802C17.5697 23.8785 17.3333 24.1536 17.3333 24.4792V25.8291Z\" fill=\"currentColor\"/> <path d=\"M14.3961 10.4163C13.9561 10.0911 13.3333 10.4053 13.3333 10.9525L13.3333 21.0474C13.3333 21.5946 13.9561 21.9087 14.3962 21.5836L21.2273 16.5359C21.5879 16.2694 21.5879 15.73 21.2273 15.4635L14.3961 10.4163Z\" fill=\"currentColor\"/>`;\n\nvar Icon$74 = `<path d=\"M15.6038 12.2147C16.0439 12.5399 16.6667 12.2257 16.6667 11.6786V10.1789C16.6667 10.1001 16.7351 10.0384 16.8134 10.0479C20.1116 10.4494 22.6667 13.2593 22.6667 16.6659C22.6667 20.3481 19.6817 23.3332 15.9995 23.3332C12.542 23.3332 9.69927 20.7014 9.36509 17.332C9.32875 16.9655 9.03371 16.6662 8.66548 16.6662L6.66655 16.6666C6.29841 16.6666 5.99769 16.966 6.02187 17.3334C6.36494 22.5454 10.7012 26.6667 16 26.6667C21.5228 26.6667 26 22.1895 26 16.6667C26 11.4103 21.9444 7.10112 16.7916 6.69757C16.7216 6.69209 16.6667 6.63396 16.6667 6.56372V4.98824C16.6667 4.44106 16.0439 4.12689 15.6038 4.45206L11.0765 7.79738C10.7159 8.06387 10.7159 8.60326 11.0766 8.86973L15.6038 12.2147Z\" fill=\"currentColor\"/>`;\n\nvar Icon$77 = `<path d=\"M16.6667 10.3452C16.6667 10.8924 16.0439 11.2066 15.6038 10.8814L11.0766 7.5364C10.7159 7.26993 10.7159 6.73054 11.0766 6.46405L15.6038 3.11873C16.0439 2.79356 16.6667 3.10773 16.6667 3.6549V5.22682C16.6667 5.29746 16.7223 5.35579 16.7927 5.36066C22.6821 5.76757 27.3333 10.674 27.3333 16.6667C27.3333 22.9259 22.2592 28 16 28C9.96483 28 5.03145 23.2827 4.68601 17.3341C4.66466 16.9665 4.96518 16.6673 5.33339 16.6673H7.3334C7.70157 16.6673 7.99714 16.9668 8.02743 17.3337C8.36638 21.4399 11.8064 24.6667 16 24.6667C20.4183 24.6667 24 21.085 24 16.6667C24 12.5225 20.8483 9.11428 16.8113 8.70739C16.7337 8.69957 16.6667 8.76096 16.6667 8.83893V10.3452Z\" fill=\"currentColor\"/> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M17.0879 19.679C17.4553 19.9195 17.8928 20.0398 18.4004 20.0398C18.9099 20.0398 19.3474 19.9205 19.7129 19.6818C20.0803 19.4413 20.3635 19.0938 20.5623 18.6392C20.7612 18.1847 20.8606 17.6373 20.8606 16.9972C20.8625 16.3608 20.764 15.8192 20.5652 15.3722C20.3663 14.9252 20.0822 14.5853 19.7129 14.3523C19.3455 14.1175 18.908 14 18.4004 14C17.8928 14 17.4553 14.1175 17.0879 14.3523C16.7224 14.5853 16.4402 14.9252 16.2413 15.3722C16.0443 15.8173 15.9449 16.3589 15.943 16.9972C15.9411 17.6354 16.0396 18.1818 16.2385 18.6364C16.4373 19.089 16.7205 19.4366 17.0879 19.679ZM19.1362 18.4262C18.9487 18.7349 18.7034 18.8892 18.4004 18.8892C18.1996 18.8892 18.0226 18.8211 17.8691 18.6847C17.7157 18.5464 17.5964 18.3372 17.5112 18.0568C17.4279 17.7765 17.3871 17.4233 17.389 16.9972C17.3909 16.3684 17.4847 15.9025 17.6703 15.5995C17.8559 15.2945 18.0993 15.1421 18.4004 15.1421C18.603 15.1421 18.7801 15.2093 18.9316 15.3438C19.0832 15.4782 19.2015 15.6828 19.2868 15.9574C19.372 16.2301 19.4146 16.5767 19.4146 16.9972C19.4165 17.6392 19.3237 18.1156 19.1362 18.4262Z\" fill=\"currentColor\"/> <path d=\"M13.7746 19.8978C13.8482 19.8978 13.9079 19.8381 13.9079 19.7644V14.2129C13.9079 14.1393 13.8482 14.0796 13.7746 14.0796H12.642C12.6171 14.0796 12.5927 14.0865 12.5716 14.0997L11.2322 14.9325C11.1931 14.9568 11.1693 14.9996 11.1693 15.0457V15.9497C11.1693 16.0539 11.2833 16.1178 11.3722 16.0635L12.464 15.396C12.4682 15.3934 12.473 15.3921 12.4779 15.3921C12.4926 15.3921 12.5045 15.404 12.5045 15.4187V19.7644C12.5045 19.8381 12.5642 19.8978 12.6378 19.8978H13.7746Z\" fill=\"currentColor\"/>`;\n\nvar Icon$81 = `<path d=\"M15.3333 10.3452C15.3333 10.8924 15.9561 11.2066 16.3962 10.8814L20.9234 7.5364C21.2841 7.26993 21.2841 6.73054 20.9235 6.46405L16.3962 3.11873C15.9561 2.79356 15.3333 3.10773 15.3333 3.6549V5.22682C15.3333 5.29746 15.2778 5.35579 15.2073 5.36066C9.31791 5.76757 4.66667 10.674 4.66667 16.6667C4.66667 22.9259 9.74078 28 16 28C22.0352 28 26.9686 23.2827 27.314 17.3341C27.3354 16.9665 27.0348 16.6673 26.6666 16.6673H24.6666C24.2984 16.6673 24.0029 16.9668 23.9726 17.3337C23.6336 21.4399 20.1937 24.6667 16 24.6667C11.5817 24.6667 8 21.085 8 16.6667C8 12.5225 11.1517 9.11428 15.1887 8.70739C15.2663 8.69957 15.3333 8.76096 15.3333 8.83893V10.3452Z\" fill=\"currentColor\"/> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M17.0879 19.679C17.4553 19.9195 17.8928 20.0398 18.4004 20.0398C18.9099 20.0398 19.3474 19.9205 19.7129 19.6818C20.0803 19.4413 20.3635 19.0938 20.5623 18.6392C20.7612 18.1847 20.8606 17.6373 20.8606 16.9972C20.8625 16.3608 20.764 15.8192 20.5652 15.3722C20.3663 14.9252 20.0822 14.5853 19.7129 14.3523C19.3455 14.1175 18.908 14 18.4004 14C17.8928 14 17.4553 14.1175 17.0879 14.3523C16.7224 14.5853 16.4402 14.9252 16.2413 15.3722C16.0443 15.8173 15.9449 16.3589 15.943 16.9972C15.9411 17.6354 16.0396 18.1818 16.2385 18.6364C16.4373 19.089 16.7205 19.4366 17.0879 19.679ZM19.1362 18.4262C18.9487 18.7349 18.7034 18.8892 18.4004 18.8892C18.1996 18.8892 18.0225 18.8211 17.8691 18.6847C17.7157 18.5464 17.5964 18.3372 17.5112 18.0568C17.4278 17.7765 17.3871 17.4233 17.389 16.9972C17.3909 16.3684 17.4847 15.9025 17.6703 15.5995C17.8559 15.2945 18.0992 15.1421 18.4004 15.1421C18.603 15.1421 18.7801 15.2093 18.9316 15.3438C19.0831 15.4782 19.2015 15.6828 19.2867 15.9574C19.372 16.2301 19.4146 16.5767 19.4146 16.9972C19.4165 17.6392 19.3237 18.1156 19.1362 18.4262Z\" fill=\"currentColor\"/> <path d=\"M13.7746 19.8978C13.8482 19.8978 13.9079 19.8381 13.9079 19.7644V14.2129C13.9079 14.1393 13.8482 14.0796 13.7746 14.0796H12.642C12.6171 14.0796 12.5927 14.0865 12.5716 14.0997L11.2322 14.9325C11.1931 14.9568 11.1693 14.9996 11.1693 15.0457V15.9497C11.1693 16.0539 11.2833 16.1178 11.3722 16.0635L12.464 15.396C12.4682 15.3934 12.473 15.3921 12.4779 15.3921C12.4926 15.3921 12.5045 15.404 12.5045 15.4187V19.7644C12.5045 19.8381 12.5642 19.8978 12.6378 19.8978H13.7746Z\" fill=\"currentColor\"/>`;\n\nvar Icon$88 = `<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M13.5722 5.33333C13.2429 5.33333 12.9629 5.57382 12.9132 5.89938L12.4063 9.21916C12.4 9.26058 12.3746 9.29655 12.3378 9.31672C12.2387 9.37118 12.1409 9.42779 12.0444 9.48648C12.0086 9.5083 11.9646 9.51242 11.9255 9.49718L8.79572 8.27692C8.48896 8.15732 8.14083 8.27958 7.9762 8.56472L5.5491 12.7686C5.38444 13.0538 5.45271 13.4165 5.70981 13.6223L8.33308 15.7225C8.3658 15.7487 8.38422 15.7887 8.38331 15.8306C8.38209 15.8867 8.38148 15.9429 8.38148 15.9993C8.38148 16.0558 8.3821 16.1121 8.38332 16.1684C8.38423 16.2102 8.36582 16.2503 8.33313 16.2765L5.7103 18.3778C5.45334 18.5836 5.38515 18.9462 5.54978 19.2314L7.97688 23.4352C8.14155 23.7205 8.48981 23.8427 8.79661 23.723L11.926 22.5016C11.9651 22.4864 12.009 22.4905 12.0449 22.5123C12.1412 22.5709 12.2388 22.6274 12.3378 22.6818C12.3745 22.7019 12.4 22.7379 12.4063 22.7793L12.9132 26.0993C12.9629 26.4249 13.2429 26.6654 13.5722 26.6654H18.4264C18.7556 26.6654 19.0356 26.425 19.0854 26.0995L19.5933 22.7801C19.5997 22.7386 19.6252 22.7027 19.6619 22.6825C19.7614 22.6279 19.8596 22.5711 19.9564 22.5121C19.9923 22.4903 20.0362 22.4862 20.0754 22.5015L23.2035 23.7223C23.5103 23.842 23.8585 23.7198 24.0232 23.4346L26.4503 19.2307C26.6149 18.9456 26.5467 18.583 26.2898 18.3771L23.6679 16.2766C23.6352 16.2504 23.6168 16.2104 23.6177 16.1685C23.619 16.1122 23.6196 16.0558 23.6196 15.9993C23.6196 15.9429 23.619 15.8866 23.6177 15.8305C23.6168 15.7886 23.6353 15.7486 23.668 15.7224L26.2903 13.623C26.5474 13.4172 26.6156 13.0544 26.451 12.7692L24.0239 8.56537C23.8592 8.28023 23.5111 8.15797 23.2043 8.27757L20.0758 9.49734C20.0367 9.51258 19.9927 9.50846 19.9569 9.48664C19.8599 9.42762 19.7616 9.37071 19.6618 9.31596C19.6251 9.2958 19.5997 9.25984 19.5933 9.21843L19.0854 5.89915C19.0356 5.57369 18.7556 5.33333 18.4264 5.33333H13.5722ZM16.0001 20.2854C18.3672 20.2854 20.2862 18.3664 20.2862 15.9993C20.2862 13.6322 18.3672 11.7132 16.0001 11.7132C13.6329 11.7132 11.714 13.6322 11.714 15.9993C11.714 18.3664 13.6329 20.2854 16.0001 20.2854Z\" fill=\"currentColor\"/>`;\n\nvar Icon$104 = `<path d=\"M17.5091 24.6595C17.5091 25.2066 16.8864 25.5208 16.4463 25.1956L9.44847 20.0252C9.42553 20.0083 9.39776 19.9992 9.36923 19.9992H4.66667C4.29848 19.9992 4 19.7007 4 19.3325V12.6658C4 12.2976 4.29848 11.9992 4.66667 11.9992H9.37115C9.39967 11.9992 9.42745 11.99 9.45039 11.9731L16.4463 6.80363C16.8863 6.47845 17.5091 6.79262 17.5091 7.3398L17.5091 24.6595Z\" fill=\"currentColor\"/> <path d=\"M27.5091 9.33336C27.8773 9.33336 28.1758 9.63184 28.1758 10V22C28.1758 22.3682 27.8773 22.6667 27.5091 22.6667H26.1758C25.8076 22.6667 25.5091 22.3682 25.5091 22V10C25.5091 9.63184 25.8076 9.33336 26.1758 9.33336L27.5091 9.33336Z\" fill=\"currentColor\"/> <path d=\"M22.1758 12C22.544 12 22.8424 12.2985 22.8424 12.6667V19.3334C22.8424 19.7016 22.544 20 22.1758 20H20.8424C20.4743 20 20.1758 19.7016 20.1758 19.3334V12.6667C20.1758 12.2985 20.4743 12 20.8424 12H22.1758Z\" fill=\"currentColor\"/>`;\n\nvar Icon$105 = `<path d=\"M17.5091 24.6594C17.5091 25.2066 16.8864 25.5207 16.4463 25.1956L9.44847 20.0252C9.42553 20.0083 9.39776 19.9991 9.36923 19.9991H4.66667C4.29848 19.9991 4 19.7006 4 19.3324V12.6658C4 12.2976 4.29848 11.9991 4.66667 11.9991H9.37115C9.39967 11.9991 9.42745 11.99 9.45039 11.973L16.4463 6.80358C16.8863 6.4784 17.5091 6.79258 17.5091 7.33975L17.5091 24.6594Z\" fill=\"currentColor\"/> <path d=\"M22.8424 12.6667C22.8424 12.2985 22.544 12 22.1758 12H20.8424C20.4743 12 20.1758 12.2985 20.1758 12.6667V19.3333C20.1758 19.7015 20.4743 20 20.8424 20H22.1758C22.544 20 22.8424 19.7015 22.8424 19.3333V12.6667Z\" fill=\"currentColor\"/>`;\n\nexport { Component, DOMEvent, EventsController, EventsTarget, Icon$0, Icon$104, Icon$105, Icon$11, Icon$13, Icon$16, Icon$19, Icon$22, Icon$24, Icon$26, Icon$27, Icon$31, Icon$33, Icon$34, Icon$35, Icon$39, Icon$40, Icon$5, Icon$53, Icon$54, Icon$56, Icon$59, Icon$60, Icon$61, Icon$62, Icon$63, Icon$74, Icon$77, Icon$8, Icon$81, Icon$88, State, ViewController, animationFrameThrottle, appendTriggerEvent, ariaBool, camelToKebabCase, chromecast, composeRefs, computed, createContext, createDisposalBin, createReactComponent, createScope, deferredPromise, effect, findTriggerEvent, fscreen, functionDebounce, functionThrottle, getScope, hasProvidedContext, hasTriggerEvent, isArray, isBoolean, isDOMNode, isFunction, isKeyboardClick, isKeyboardEvent, isMouseEvent, isNil, isNull, isNumber, isObject, isPointerEvent, isString, isTouchEvent, isUndefined, isWriteSignal, kebabToCamelCase, keysOf, listenEvent, method, noop, onDispose, peek, prop, provideContext, r, scoped, setAttribute, setStyle, signal, tick, toggleClass, untrack, uppercaseFirstChar, useContext, useReactContext, useReactScope, useSignal, useSignalRecord, useState, useStateContext, waitIdlePeriod, waitTimeout, walkTriggerEventChain, wasEnterKeyPressed };\n","\"use client\"\n\nimport * as React from 'react';\nimport { isNumber, isString, isFunction, waitTimeout, isUndefined, isArray, isNull, deferredPromise, isBoolean, listenEvent, scoped, getScope, EventsTarget, DOMEvent, State, fscreen, tick, useContext, createContext, Component, functionThrottle, isTouchEvent, setStyle, EventsController, isKeyboardClick, setAttribute, effect, isDOMNode, onDispose, untrack, functionDebounce, ViewController, signal, peek, isKeyboardEvent, isNil, createScope, camelToKebabCase, waitIdlePeriod, provideContext, animationFrameThrottle, uppercaseFirstChar, computed, prop, method, noop, ariaBool as ariaBool$1, isWriteSignal, hasProvidedContext, isObject, useState, r, wasEnterKeyPressed, isPointerEvent, isMouseEvent, kebabToCamelCase, composeRefs, useStateContext, useSignal, useSignalRecord } from './vidstack-CZgUA94N.js';\nimport { autoUpdate, computePosition, flip, shift } from '@floating-ui/dom';\n\nfunction isVideoQualitySrc(src) {\n return !isString(src) && \"width\" in src && \"height\" in src && isNumber(src.width) && isNumber(src.height);\n}\n\nconst IS_SERVER = typeof document === \"undefined\";\n\nconst UA = IS_SERVER ? \"\" : navigator?.userAgent.toLowerCase() || \"\";\nconst IS_IOS = !IS_SERVER && /iphone|ipad|ipod|ios|crios|fxios/i.test(UA);\nconst IS_IPHONE = !IS_SERVER && /(iphone|ipod)/gi.test(navigator?.platform || \"\");\nconst IS_CHROME = !IS_SERVER && !!window.chrome;\nconst IS_SAFARI = !IS_SERVER && (!!window.safari || IS_IOS);\nfunction canOrientScreen() {\n return canRotateScreen() && isFunction(screen.orientation.unlock);\n}\nfunction canRotateScreen() {\n return !IS_SERVER && !isUndefined(window.screen.orientation) && !isUndefined(window.screen.orientation.lock);\n}\nfunction canPlayAudioType(audio, type) {\n if (IS_SERVER) return false;\n if (!audio) audio = document.createElement(\"audio\");\n return audio.canPlayType(type).length > 0;\n}\nfunction canPlayVideoType(video, type) {\n if (IS_SERVER) return false;\n if (!video) video = document.createElement(\"video\");\n return video.canPlayType(type).length > 0;\n}\nfunction canPlayHLSNatively(video) {\n if (IS_SERVER) return false;\n if (!video) video = document.createElement(\"video\");\n return video.canPlayType(\"application/vnd.apple.mpegurl\").length > 0;\n}\nfunction canUsePictureInPicture(video) {\n if (IS_SERVER) return false;\n return !!document.pictureInPictureEnabled && !video?.disablePictureInPicture;\n}\nfunction canUseVideoPresentation(video) {\n if (IS_SERVER) return false;\n return isFunction(video?.webkitSupportsPresentationMode) && isFunction(video?.webkitSetPresentationMode);\n}\nasync function canChangeVolume() {\n const video = document.createElement(\"video\");\n video.volume = 0.5;\n await waitTimeout(0);\n return video.volume === 0.5;\n}\nfunction getMediaSource() {\n return IS_SERVER ? void 0 : window?.ManagedMediaSource ?? window?.MediaSource ?? window?.WebKitMediaSource;\n}\nfunction getSourceBuffer() {\n return IS_SERVER ? void 0 : window?.SourceBuffer ?? window?.WebKitSourceBuffer;\n}\nfunction isHLSSupported() {\n if (IS_SERVER) return false;\n const MediaSource = getMediaSource();\n if (isUndefined(MediaSource)) return false;\n const isTypeSupported = MediaSource && isFunction(MediaSource.isTypeSupported) && MediaSource.isTypeSupported('video/mp4; codecs=\"avc1.42E01E,mp4a.40.2\"');\n const SourceBuffer = getSourceBuffer();\n const isSourceBufferValid = isUndefined(SourceBuffer) || !isUndefined(SourceBuffer.prototype) && isFunction(SourceBuffer.prototype.appendBuffer) && isFunction(SourceBuffer.prototype.remove);\n return !!isTypeSupported && !!isSourceBufferValid;\n}\nfunction isDASHSupported() {\n return isHLSSupported();\n}\n\nclass TimeRange {\n #ranges;\n get length() {\n return this.#ranges.length;\n }\n constructor(start, end) {\n if (isArray(start)) {\n this.#ranges = start;\n } else if (!isUndefined(start) && !isUndefined(end)) {\n this.#ranges = [[start, end]];\n } else {\n this.#ranges = [];\n }\n }\n start(index) {\n return this.#ranges[index][0] ?? Infinity;\n }\n end(index) {\n return this.#ranges[index][1] ?? Infinity;\n }\n}\nfunction getTimeRangesStart(range) {\n if (!range.length) return null;\n let min = range.start(0);\n for (let i = 1; i < range.length; i++) {\n const value = range.start(i);\n if (value < min) min = value;\n }\n return min;\n}\nfunction getTimeRangesEnd(range) {\n if (!range.length) return null;\n let max = range.end(0);\n for (let i = 1; i < range.length; i++) {\n const value = range.end(i);\n if (value > max) max = value;\n }\n return max;\n}\nfunction normalizeTimeIntervals(intervals) {\n if (intervals.length <= 1) {\n return intervals;\n }\n intervals.sort((a, b) => a[0] - b[0]);\n let normalized = [], current = intervals[0];\n for (let i = 1; i < intervals.length; i++) {\n const next = intervals[i];\n if (current[1] >= next[0] - 1) {\n current = [current[0], Math.max(current[1], next[1])];\n } else {\n normalized.push(current);\n current = next;\n }\n }\n normalized.push(current);\n return normalized;\n}\nfunction updateTimeIntervals(intervals, interval, value) {\n let start = interval[0], end = interval[1];\n if (value < start) {\n return [value, -1];\n } else if (value === start) {\n return interval;\n } else if (start === -1) {\n interval[0] = value;\n return interval;\n } else if (value > start) {\n interval[1] = value;\n if (end === -1) intervals.push(interval);\n }\n normalizeTimeIntervals(intervals);\n return interval;\n}\n\nconst AUDIO_EXTENSIONS = /\\.(m4a|m4b|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx|flac)($|\\?)/i;\nconst AUDIO_TYPES = /* @__PURE__ */ new Set([\n \"audio/mpeg\",\n \"audio/ogg\",\n \"audio/3gp\",\n \"audio/mp3\",\n \"audio/webm\",\n \"audio/flac\",\n \"audio/m4a\",\n \"audio/m4b\",\n \"audio/mp4a\",\n \"audio/mp4\"\n]);\nconst VIDEO_EXTENSIONS = /\\.(mp4|og[gv]|webm|mov|m4v)(#t=[,\\d+]+)?($|\\?)/i;\nconst VIDEO_TYPES = /* @__PURE__ */ new Set([\n \"video/mp4\",\n \"video/webm\",\n \"video/3gp\",\n \"video/ogg\",\n \"video/avi\",\n \"video/mpeg\"\n]);\nconst HLS_VIDEO_EXTENSIONS = /\\.(m3u8)($|\\?)/i;\nconst DASH_VIDEO_EXTENSIONS = /\\.(mpd)($|\\?)/i;\nconst HLS_VIDEO_TYPES = /* @__PURE__ */ new Set([\n // Apple sanctioned\n \"application/vnd.apple.mpegurl\",\n // Apple sanctioned for backwards compatibility\n \"audio/mpegurl\",\n // Very common\n \"audio/x-mpegurl\",\n // Very common\n \"application/x-mpegurl\",\n // Included for completeness\n \"video/x-mpegurl\",\n \"video/mpegurl\",\n \"application/mpegurl\"\n]);\nconst DASH_VIDEO_TYPES = /* @__PURE__ */ new Set([\"application/dash+xml\"]);\nfunction isAudioSrc({ src, type }) {\n return isString(src) ? AUDIO_EXTENSIONS.test(src) || AUDIO_TYPES.has(type) || src.startsWith(\"blob:\") && type === \"audio/object\" : type === \"audio/object\";\n}\nfunction isVideoSrc(src) {\n return isString(src.src) ? VIDEO_EXTENSIONS.test(src.src) || VIDEO_TYPES.has(src.type) || src.src.startsWith(\"blob:\") && src.type === \"video/object\" || isHLSSrc(src) && (IS_SERVER || canPlayHLSNatively()) : src.type === \"video/object\";\n}\nfunction isHLSSrc({ src, type }) {\n return isString(src) && HLS_VIDEO_EXTENSIONS.test(src) || HLS_VIDEO_TYPES.has(type);\n}\nfunction isDASHSrc({ src, type }) {\n return isString(src) && DASH_VIDEO_EXTENSIONS.test(src) || DASH_VIDEO_TYPES.has(type);\n}\nfunction canGoogleCastSrc(src) {\n return isString(src.src) && (isAudioSrc(src) || isVideoSrc(src) || isHLSSrc(src));\n}\nfunction isMediaStream(src) {\n return !IS_SERVER && typeof window.MediaStream !== \"undefined\" && src instanceof window.MediaStream;\n}\n\nfunction appendParamsToURL(baseUrl, params) {\n const url = new URL(baseUrl);\n for (const key of Object.keys(params)) {\n url.searchParams.set(key, params[key] + \"\");\n }\n return url.toString();\n}\nfunction preconnect(url, rel = \"preconnect\") {\n if (IS_SERVER) return false;\n const exists = document.querySelector(`link[href=\"${url}\"]`);\n if (!isNull(exists)) return true;\n const link = document.createElement(\"link\");\n link.rel = rel;\n link.href = url;\n link.crossOrigin = \"true\";\n document.head.append(link);\n return true;\n}\nconst pendingRequests = {};\nfunction loadScript(src) {\n if (pendingRequests[src]) return pendingRequests[src].promise;\n const promise = deferredPromise(), exists = document.querySelector(`script[src=\"${src}\"]`);\n if (!isNull(exists)) {\n promise.resolve();\n return promise.promise;\n }\n pendingRequests[src] = promise;\n const script = document.createElement(\"script\");\n script.src = src;\n script.onload = () => {\n promise.resolve();\n delete pendingRequests[src];\n };\n script.onerror = () => {\n promise.reject();\n delete pendingRequests[src];\n };\n setTimeout(() => document.head.append(script), 0);\n return promise.promise;\n}\nfunction getRequestCredentials(crossOrigin) {\n return crossOrigin === \"use-credentials\" ? \"include\" : isString(crossOrigin) ? \"same-origin\" : void 0;\n}\nfunction getDownloadFile({\n title,\n src,\n download\n}) {\n const url = isBoolean(download) || download === \"\" ? src.src : isString(download) ? download : download?.url;\n if (!isValidFileDownload({ url, src, download })) return null;\n return {\n url,\n name: !isBoolean(download) && !isString(download) && download?.filename || title.toLowerCase() || \"media\"\n };\n}\nfunction isValidFileDownload({\n url,\n src,\n download\n}) {\n return isString(url) && (download && download !== true || isAudioSrc(src) || isVideoSrc(src));\n}\n\nconst CROSS_ORIGIN = Symbol(0), READY_STATE = Symbol(0), UPDATE_ACTIVE_CUES = Symbol(0), CAN_LOAD = Symbol(0), ON_MODE_CHANGE = Symbol(0), NATIVE = Symbol(0), NATIVE_HLS = Symbol(0);\nconst TextTrackSymbol = {\n crossOrigin: CROSS_ORIGIN,\n readyState: READY_STATE,\n updateActiveCues: UPDATE_ACTIVE_CUES,\n canLoad: CAN_LOAD,\n onModeChange: ON_MODE_CHANGE,\n native: NATIVE,\n nativeHLS: NATIVE_HLS\n};\n\nfunction findActiveCue(cues, time) {\n for (let i = 0, len = cues.length; i < len; i++) {\n if (isCueActive(cues[i], time)) return cues[i];\n }\n return null;\n}\nfunction isCueActive(cue, time) {\n return time >= cue.startTime && time < cue.endTime;\n}\nfunction watchActiveTextTrack(tracks, kind, onChange) {\n let currentTrack = null, scope = getScope();\n function onModeChange() {\n const kinds = isString(kind) ? [kind] : kind, track = tracks.toArray().find((track2) => kinds.includes(track2.kind) && track2.mode === \"showing\");\n if (track === currentTrack) return;\n if (!track) {\n onChange(null);\n currentTrack = null;\n return;\n }\n if (track.readyState == 2) {\n onChange(track);\n } else {\n onChange(null);\n scoped(() => {\n const off = listenEvent(\n track,\n \"load\",\n () => {\n onChange(track);\n off();\n },\n { once: true }\n );\n }, scope);\n }\n currentTrack = track;\n }\n onModeChange();\n return listenEvent(tracks, \"mode-change\", onModeChange);\n}\nfunction watchCueTextChange(tracks, kind, callback) {\n watchActiveTextTrack(tracks, kind, (track) => {\n if (!track) {\n callback(\"\");\n return;\n }\n const onCueChange = () => {\n const activeCue = track?.activeCues[0];\n callback(activeCue?.text || \"\");\n };\n onCueChange();\n listenEvent(track, \"cue-change\", onCueChange);\n });\n}\n\nclass TextTrack extends EventsTarget {\n static createId(track) {\n return `vds-${track.type}-${track.kind}-${track.src ?? track.label ?? \"?\"}`;\n }\n src;\n content;\n type;\n encoding;\n id = \"\";\n label = \"\";\n language = \"\";\n kind;\n default = false;\n #canLoad = false;\n #currentTime = 0;\n #mode = \"disabled\";\n #metadata = {};\n #regions = [];\n #cues = [];\n #activeCues = [];\n /** @internal */\n [TextTrackSymbol.readyState] = 0;\n /** @internal */\n [TextTrackSymbol.crossOrigin];\n /** @internal */\n [TextTrackSymbol.onModeChange] = null;\n /** @internal */\n [TextTrackSymbol.native] = null;\n get metadata() {\n return this.#metadata;\n }\n get regions() {\n return this.#regions;\n }\n get cues() {\n return this.#cues;\n }\n get activeCues() {\n return this.#activeCues;\n }\n /**\n * - 0: Not Loading\n * - 1: Loading\n * - 2: Ready\n * - 3: Error\n */\n get readyState() {\n return this[TextTrackSymbol.readyState];\n }\n get mode() {\n return this.#mode;\n }\n set mode(mode) {\n this.setMode(mode);\n }\n constructor(init) {\n super();\n for (const prop of Object.keys(init)) this[prop] = init[prop];\n if (!this.type) this.type = \"vtt\";\n if (!IS_SERVER && init.content) {\n this.#parseContent(init);\n } else if (!init.src) {\n this[TextTrackSymbol.readyState] = 2;\n }\n }\n addCue(cue, trigger) {\n let i = 0, length = this.#cues.length;\n for (i = 0; i < length; i++) if (cue.endTime <= this.#cues[i].startTime) break;\n if (i === length) this.#cues.push(cue);\n else this.#cues.splice(i, 0, cue);\n if (!(cue instanceof TextTrackCue)) {\n this[TextTrackSymbol.native]?.track.addCue(cue);\n }\n this.dispatchEvent(new DOMEvent(\"add-cue\", { detail: cue, trigger }));\n if (isCueActive(cue, this.#currentTime)) {\n this[TextTrackSymbol.updateActiveCues](this.#currentTime, trigger);\n }\n }\n removeCue(cue, trigger) {\n const index = this.#cues.indexOf(cue);\n if (index >= 0) {\n const isActive = this.#activeCues.includes(cue);\n this.#cues.splice(index, 1);\n this[TextTrackSymbol.native]?.track.removeCue(cue);\n this.dispatchEvent(new DOMEvent(\"remove-cue\", { detail: cue, trigger }));\n if (isActive) {\n this[TextTrackSymbol.updateActiveCues](this.#currentTime, trigger);\n }\n }\n }\n setMode(mode, trigger) {\n if (this.#mode === mode) return;\n this.#mode = mode;\n if (mode === \"disabled\") {\n this.#activeCues = [];\n this.#activeCuesChanged();\n } else if (this.readyState === 2) {\n this[TextTrackSymbol.updateActiveCues](this.#currentTime, trigger);\n } else {\n this.#load();\n }\n this.dispatchEvent(new DOMEvent(\"mode-change\", { detail: this, trigger }));\n this[TextTrackSymbol.onModeChange]?.();\n }\n /** @internal */\n [TextTrackSymbol.updateActiveCues](currentTime, trigger) {\n this.#currentTime = currentTime;\n if (this.mode === \"disabled\" || !this.#cues.length) return;\n const activeCues = [];\n for (let i = 0, length = this.#cues.length; i < length; i++) {\n const cue = this.#cues[i];\n if (isCueActive(cue, currentTime)) activeCues.push(cue);\n }\n let changed = activeCues.length !== this.#activeCues.length;\n if (!changed) {\n for (let i = 0; i < activeCues.length; i++) {\n if (!this.#activeCues.includes(activeCues[i])) {\n changed = true;\n break;\n }\n }\n }\n this.#activeCues = activeCues;\n if (changed) this.#activeCuesChanged(trigger);\n }\n /** @internal */\n [TextTrackSymbol.canLoad]() {\n this.#canLoad = true;\n if (this.#mode !== \"disabled\") this.#load();\n }\n #parseContent(init) {\n import('media-captions').then(({ parseText, VTTCue, VTTRegion }) => {\n if (!isString(init.content) || init.type === \"json\") {\n this.#parseJSON(init.content, VTTCue, VTTRegion);\n if (this.readyState !== 3) this.#ready();\n } else {\n parseText(init.content, { type: init.type }).then(({ cues, regions }) => {\n this.#cues = cues;\n this.#regions = regions;\n this.#ready();\n });\n }\n });\n }\n async #load() {\n if (!this.#canLoad || this[TextTrackSymbol.readyState] > 0) return;\n this[TextTrackSymbol.readyState] = 1;\n this.dispatchEvent(new DOMEvent(\"load-start\"));\n if (!this.src) {\n this.#ready();\n return;\n }\n try {\n const { parseResponse, VTTCue, VTTRegion } = await import('media-captions'), crossOrigin = this[TextTrackSymbol.crossOrigin]?.();\n const response = fetch(this.src, {\n headers: this.type === \"json\" ? { \"Content-Type\": \"application/json\" } : void 0,\n credentials: getRequestCredentials(crossOrigin)\n });\n if (this.type === \"json\") {\n this.#parseJSON(await (await response).text(), VTTCue, VTTRegion);\n } else {\n const { errors, metadata, regions, cues } = await parseResponse(response, {\n type: this.type,\n encoding: this.encoding\n });\n if (errors[0]?.code === 0) {\n throw errors[0];\n } else {\n this.#metadata = metadata;\n this.#regions = regions;\n this.#cues = cues;\n }\n }\n this.#ready();\n } catch (error) {\n this.#error(error);\n }\n }\n #ready() {\n this[TextTrackSymbol.readyState] = 2;\n if (!this.src || this.type !== \"vtt\") {\n const native = this[TextTrackSymbol.native];\n if (native && !native.managed) {\n for (const cue of this.#cues) native.track.addCue(cue);\n }\n }\n const loadEvent = new DOMEvent(\"load\");\n this[TextTrackSymbol.updateActiveCues](this.#currentTime, loadEvent);\n this.dispatchEvent(loadEvent);\n }\n #error(error) {\n this[TextTrackSymbol.readyState] = 3;\n this.dispatchEvent(new DOMEvent(\"error\", { detail: error }));\n }\n #parseJSON(json, VTTCue, VTTRegion) {\n try {\n const { regions, cues } = parseJSONCaptionsFile(json, VTTCue, VTTRegion);\n this.#regions = regions;\n this.#cues = cues;\n } catch (error) {\n this.#error(error);\n }\n }\n #activeCuesChanged(trigger) {\n this.dispatchEvent(new DOMEvent(\"cue-change\", { trigger }));\n }\n}\nconst captionRE = /captions|subtitles/;\nfunction isTrackCaptionKind(track) {\n return captionRE.test(track.kind);\n}\nfunction parseJSONCaptionsFile(json, Cue, Region) {\n const content = isString(json) ? JSON.parse(json) : json;\n let regions = [], cues = [];\n if (content.regions && Region) {\n regions = content.regions.map((region) => Object.assign(new Region(), region));\n }\n if (content.cues || isArray(content)) {\n cues = (isArray(content) ? content : content.cues).filter((content2) => isNumber(content2.startTime) && isNumber(content2.endTime)).map((cue) => Object.assign(new Cue(0, 0, \"\"), cue));\n }\n return { regions, cues };\n}\n\nconst mediaState = new State({\n artist: \"\",\n artwork: null,\n audioTrack: null,\n audioTracks: [],\n autoPlay: false,\n autoPlayError: null,\n audioGain: null,\n buffered: new TimeRange(),\n canLoad: false,\n canLoadPoster: false,\n canFullscreen: false,\n canOrientScreen: canOrientScreen(),\n canPictureInPicture: false,\n canPlay: false,\n clipStartTime: 0,\n clipEndTime: 0,\n controls: false,\n get iOSControls() {\n return IS_IPHONE && this.mediaType === \"video\" && (!this.playsInline || !fscreen.fullscreenEnabled && this.fullscreen);\n },\n get nativeControls() {\n return this.controls || this.iOSControls;\n },\n controlsVisible: false,\n get controlsHidden() {\n return !this.controlsVisible;\n },\n crossOrigin: null,\n ended: false,\n error: null,\n fullscreen: false,\n get loop() {\n return this.providedLoop || this.userPrefersLoop;\n },\n logLevel: \"silent\",\n mediaType: \"unknown\",\n muted: false,\n paused: true,\n played: new TimeRange(),\n playing: false,\n playsInline: false,\n pictureInPicture: false,\n preload: \"metadata\",\n playbackRate: 1,\n qualities: [],\n quality: null,\n autoQuality: false,\n canSetQuality: true,\n canSetPlaybackRate: true,\n canSetVolume: false,\n canSetAudioGain: false,\n seekable: new TimeRange(),\n seeking: false,\n source: { src: \"\", type: \"\" },\n sources: [],\n started: false,\n textTracks: [],\n textTrack: null,\n get hasCaptions() {\n return this.textTracks.filter(isTrackCaptionKind).length > 0;\n },\n volume: 1,\n waiting: false,\n realCurrentTime: 0,\n get currentTime() {\n return this.ended ? this.duration : this.clipStartTime > 0 ? Math.max(0, Math.min(this.realCurrentTime - this.clipStartTime, this.duration)) : this.realCurrentTime;\n },\n providedDuration: -1,\n intrinsicDuration: 0,\n get duration() {\n return this.seekableWindow;\n },\n get title() {\n return this.providedTitle || this.inferredTitle;\n },\n get poster() {\n return this.providedPoster || this.inferredPoster;\n },\n get viewType() {\n return this.providedViewType !== \"unknown\" ? this.providedViewType : this.inferredViewType;\n },\n get streamType() {\n return this.providedStreamType !== \"unknown\" ? this.providedStreamType : this.inferredStreamType;\n },\n get currentSrc() {\n return this.source;\n },\n get bufferedStart() {\n const start = getTimeRangesStart(this.buffered) ?? 0;\n return Math.max(start, this.clipStartTime);\n },\n get bufferedEnd() {\n const end = getTimeRangesEnd(this.buffered) ?? 0;\n return Math.min(this.seekableEnd, Math.max(0, end - this.clipStartTime));\n },\n get bufferedWindow() {\n return Math.max(0, this.bufferedEnd - this.bufferedStart);\n },\n get seekableStart() {\n if (this.isLiveDVR && this.liveDVRWindow > 0) {\n return Math.max(0, this.seekableEnd - this.liveDVRWindow);\n }\n const start = getTimeRangesStart(this.seekable) ?? 0;\n return Math.max(start, this.clipStartTime);\n },\n get seekableEnd() {\n if (this.providedDuration > 0) return this.providedDuration;\n const end = this.liveSyncPosition > 0 ? this.liveSyncPosition : this.canPlay ? getTimeRangesEnd(this.seekable) ?? Infinity : 0;\n return this.clipEndTime > 0 ? Math.min(this.clipEndTime, end) : end;\n },\n get seekableWindow() {\n const window = this.seekableEnd - this.seekableStart;\n return !isNaN(window) ? Math.max(0, window) : Infinity;\n },\n // ~~ remote playback ~~\n canAirPlay: false,\n canGoogleCast: false,\n remotePlaybackState: \"disconnected\",\n remotePlaybackType: \"none\",\n remotePlaybackLoader: null,\n remotePlaybackInfo: null,\n get isAirPlayConnected() {\n return this.remotePlaybackType === \"airplay\" && this.remotePlaybackState === \"connected\";\n },\n get isGoogleCastConnected() {\n return this.remotePlaybackType === \"google-cast\" && this.remotePlaybackState === \"connected\";\n },\n // ~~ responsive design ~~\n pointer: \"fine\",\n orientation: \"landscape\",\n width: 0,\n height: 0,\n mediaWidth: 0,\n mediaHeight: 0,\n lastKeyboardAction: null,\n // ~~ user props ~~\n userBehindLiveEdge: false,\n // ~~ live props ~~\n liveEdgeTolerance: 10,\n minLiveDVRWindow: 60,\n get canSeek() {\n return /unknown|on-demand|:dvr/.test(this.streamType) && Number.isFinite(this.duration) && (!this.isLiveDVR || this.duration >= this.liveDVRWindow);\n },\n get live() {\n return this.streamType.includes(\"live\") || !Number.isFinite(this.duration);\n },\n get liveEdgeStart() {\n return this.live && Number.isFinite(this.seekableEnd) ? Math.max(0, this.seekableEnd - this.liveEdgeTolerance) : 0;\n },\n get liveEdge() {\n return this.live && (!this.canSeek || !this.userBehindLiveEdge && this.currentTime >= this.liveEdgeStart);\n },\n get liveEdgeWindow() {\n return this.live && Number.isFinite(this.seekableEnd) ? this.seekableEnd - this.liveEdgeStart : 0;\n },\n get isLiveDVR() {\n return /:dvr/.test(this.streamType);\n },\n get liveDVRWindow() {\n return Math.max(this.inferredLiveDVRWindow, this.minLiveDVRWindow);\n },\n // ~~ internal props ~~\n autoPlaying: false,\n providedTitle: \"\",\n inferredTitle: \"\",\n providedLoop: false,\n userPrefersLoop: false,\n providedPoster: \"\",\n inferredPoster: \"\",\n inferredViewType: \"unknown\",\n providedViewType: \"unknown\",\n providedStreamType: \"unknown\",\n inferredStreamType: \"unknown\",\n liveSyncPosition: null,\n inferredLiveDVRWindow: 0,\n savedState: null\n});\nconst RESET_ON_SRC_QUALITY_CHANGE = /* @__PURE__ */ new Set([\n \"autoPlayError\",\n \"autoPlaying\",\n \"buffered\",\n \"canPlay\",\n \"error\",\n \"paused\",\n \"played\",\n \"playing\",\n \"seekable\",\n \"seeking\",\n \"waiting\"\n]);\nconst RESET_ON_SRC_CHANGE = /* @__PURE__ */ new Set([\n ...RESET_ON_SRC_QUALITY_CHANGE,\n \"ended\",\n \"inferredPoster\",\n \"inferredStreamType\",\n \"inferredTitle\",\n \"intrinsicDuration\",\n \"inferredLiveDVRWindow\",\n \"liveSyncPosition\",\n \"realCurrentTime\",\n \"savedState\",\n \"started\",\n \"userBehindLiveEdge\"\n]);\nfunction softResetMediaState($media, isSourceQualityChange = false) {\n const filter = isSourceQualityChange ? RESET_ON_SRC_QUALITY_CHANGE : RESET_ON_SRC_CHANGE;\n mediaState.reset($media, (prop) => filter.has(prop));\n tick();\n}\nfunction boundTime(time, store) {\n const clippedTime = time + store.clipStartTime(), isStart = Math.floor(time) === Math.floor(store.seekableStart()), isEnd = Math.floor(clippedTime) === Math.floor(store.seekableEnd());\n if (isStart) {\n return store.seekableStart();\n }\n if (isEnd) {\n return store.seekableEnd();\n }\n if (store.isLiveDVR() && store.liveDVRWindow() > 0 && clippedTime < store.seekableEnd() - store.liveDVRWindow()) {\n return store.bufferedStart();\n }\n return Math.min(Math.max(store.seekableStart() + 0.1, clippedTime), store.seekableEnd() - 0.1);\n}\n\nconst mediaContext = createContext();\nfunction useMediaContext() {\n return useContext(mediaContext);\n}\n\nclass MediaRemoteControl {\n #target = null;\n #player = null;\n #prevTrackIndex = -1;\n #logger;\n constructor(logger = void 0) {\n this.#logger = logger;\n }\n /**\n * Set the target from which to dispatch media requests events from. The events should bubble\n * up from this target to the player element.\n *\n * @example\n * ```ts\n * const button = document.querySelector('button');\n * remote.setTarget(button);\n * ```\n */\n setTarget(target) {\n this.#target = target;\n }\n /**\n * Returns the current player element. This method will attempt to find the player by\n * searching up from either the given `target` or default target set via `remote.setTarget`.\n *\n * @example\n * ```ts\n * const player = remote.getPlayer();\n * ```\n */\n getPlayer(target) {\n if (this.#player) return this.#player;\n (target ?? this.#target)?.dispatchEvent(\n new DOMEvent(\"find-media-player\", {\n detail: (player) => void (this.#player = player),\n bubbles: true,\n composed: true\n })\n );\n return this.#player;\n }\n /**\n * Set the current player element so the remote can support toggle methods such as\n * `togglePaused` as they rely on the current media state.\n */\n setPlayer(player) {\n this.#player = player;\n }\n /**\n * Dispatch a request to start the media loading process. This will only work if the media\n * player has been initialized with a custom loading strategy `load=\"custom\">`.\n *\n * @docs {@link https://www.vidstack.io/docs/player/core-concepts/loading#load-strategies}\n */\n startLoading(trigger) {\n this.#dispatchRequest(\"media-start-loading\", trigger);\n }\n /**\n * Dispatch a request to start the poster loading process. This will only work if the media\n * player has been initialized with a custom poster loading strategy `posterLoad=\"custom\">`.\n *\n * @docs {@link https://www.vidstack.io/docs/player/core-concepts/loading#load-strategies}\n */\n startLoadingPoster(trigger) {\n this.#dispatchRequest(\"media-poster-start-loading\", trigger);\n }\n /**\n * Dispatch a request to connect to AirPlay.\n *\n * @see {@link https://www.apple.com/au/airplay}\n */\n requestAirPlay(trigger) {\n this.#dispatchRequest(\"media-airplay-request\", trigger);\n }\n /**\n * Dispatch a request to connect to Google Cast.\n *\n * @see {@link https://developers.google.com/cast/docs/overview}\n */\n requestGoogleCast(trigger) {\n this.#dispatchRequest(\"media-google-cast-request\", trigger);\n }\n /**\n * Dispatch a request to begin/resume media playback.\n */\n play(trigger) {\n this.#dispatchRequest(\"media-play-request\", trigger);\n }\n /**\n * Dispatch a request to pause media playback.\n */\n pause(trigger) {\n this.#dispatchRequest(\"media-pause-request\", trigger);\n }\n /**\n * Dispatch a request to set the media volume to mute (0).\n */\n mute(trigger) {\n this.#dispatchRequest(\"media-mute-request\", trigger);\n }\n /**\n * Dispatch a request to unmute the media volume and set it back to it's previous state.\n */\n unmute(trigger) {\n this.#dispatchRequest(\"media-unmute-request\", trigger);\n }\n /**\n * Dispatch a request to enter fullscreen.\n *\n * @docs {@link https://www.vidstack.io/docs/player/api/fullscreen#remote-control}\n */\n enterFullscreen(target, trigger) {\n this.#dispatchRequest(\"media-enter-fullscreen-request\", trigger, target);\n }\n /**\n * Dispatch a request to exit fullscreen.\n *\n * @docs {@link https://www.vidstack.io/docs/player/api/fullscreen#remote-control}\n */\n exitFullscreen(target, trigger) {\n this.#dispatchRequest(\"media-exit-fullscreen-request\", trigger, target);\n }\n /**\n * Dispatch a request to lock the screen orientation.\n *\n * @docs {@link https://www.vidstack.io/docs/player/screen-orientation#remote-control}\n */\n lockScreenOrientation(lockType, trigger) {\n this.#dispatchRequest(\"media-orientation-lock-request\", trigger, lockType);\n }\n /**\n * Dispatch a request to unlock the screen orientation.\n *\n * @docs {@link https://www.vidstack.io/docs/player/api/screen-orientation#remote-control}\n */\n unlockScreenOrientation(trigger) {\n this.#dispatchRequest(\"media-orientation-unlock-request\", trigger);\n }\n /**\n * Dispatch a request to enter picture-in-picture mode.\n *\n * @docs {@link https://www.vidstack.io/docs/player/api/picture-in-picture#remote-control}\n */\n enterPictureInPicture(trigger) {\n this.#dispatchRequest(\"media-enter-pip-request\", trigger);\n }\n /**\n * Dispatch a request to exit picture-in-picture mode.\n *\n * @docs {@link https://www.vidstack.io/docs/player/api/picture-in-picture#remote-control}\n */\n exitPictureInPicture(trigger) {\n this.#dispatchRequest(\"media-exit-pip-request\", trigger);\n }\n /**\n * Notify the media player that a seeking process is happening and to seek to the given `time`.\n */\n seeking(time, trigger) {\n this.#dispatchRequest(\"media-seeking-request\", trigger, time);\n }\n /**\n * Notify the media player that a seeking operation has completed and to seek to the given `time`.\n * This is generally called after a series of `remote.seeking()` calls.\n */\n seek(time, trigger) {\n this.#dispatchRequest(\"media-seek-request\", trigger, time);\n }\n seekToLiveEdge(trigger) {\n this.#dispatchRequest(\"media-live-edge-request\", trigger);\n }\n /**\n * Dispatch a request to update the length of the media in seconds.\n *\n * @example\n * ```ts\n * remote.changeDuration(100); // 100 seconds\n * ```\n */\n changeDuration(duration, trigger) {\n this.#dispatchRequest(\"media-duration-change-request\", trigger, duration);\n }\n /**\n * Dispatch a request to update the clip start time. This is the time at which media playback\n * should start at.\n *\n * @example\n * ```ts\n * remote.changeClipStart(100); // start at 100 seconds\n * ```\n */\n changeClipStart(startTime, trigger) {\n this.#dispatchRequest(\"media-clip-start-change-request\", trigger, startTime);\n }\n /**\n * Dispatch a request to update the clip end time. This is the time at which media playback\n * should end at.\n *\n * @example\n * ```ts\n * remote.changeClipEnd(100); // end at 100 seconds\n * ```\n */\n changeClipEnd(endTime, trigger) {\n this.#dispatchRequest(\"media-clip-end-change-request\", trigger, endTime);\n }\n /**\n * Dispatch a request to update the media volume to the given `volume` level which is a value\n * between 0 and 1.\n *\n * @docs {@link https://www.vidstack.io/docs/player/api/audio-gain#remote-control}\n * @example\n * ```ts\n * remote.changeVolume(0); // 0%\n * remote.changeVolume(0.05); // 5%\n * remote.changeVolume(0.5); // 50%\n * remote.changeVolume(0.75); // 70%\n * remote.changeVolume(1); // 100%\n * ```\n */\n changeVolume(volume, trigger) {\n this.#dispatchRequest(\"media-volume-change-request\", trigger, Math.max(0, Math.min(1, volume)));\n }\n /**\n * Dispatch a request to change the current audio track.\n *\n * @example\n * ```ts\n * remote.changeAudioTrack(1); // track at index 1\n * ```\n */\n changeAudioTrack(index, trigger) {\n this.#dispatchRequest(\"media-audio-track-change-request\", trigger, index);\n }\n /**\n * Dispatch a request to change the video quality. The special value `-1` represents auto quality\n * selection.\n *\n * @example\n * ```ts\n * remote.changeQuality(-1); // auto\n * remote.changeQuality(1); // quality at index 1\n * ```\n */\n changeQuality(index, trigger) {\n this.#dispatchRequest(\"media-quality-change-request\", trigger, index);\n }\n /**\n * Request auto quality selection.\n */\n requestAutoQuality(trigger) {\n this.changeQuality(-1, trigger);\n }\n /**\n * Dispatch a request to change the mode of the text track at the given index.\n *\n * @example\n * ```ts\n * remote.changeTextTrackMode(1, 'showing'); // track at index 1\n * ```\n */\n changeTextTrackMode(index, mode, trigger) {\n this.#dispatchRequest(\"media-text-track-change-request\", trigger, {\n index,\n mode\n });\n }\n /**\n * Dispatch a request to change the media playback rate.\n *\n * @example\n * ```ts\n * remote.changePlaybackRate(0.5); // Half the normal speed\n * remote.changePlaybackRate(1); // Normal speed\n * remote.changePlaybackRate(1.5); // 50% faster than normal\n * remote.changePlaybackRate(2); // Double the normal speed\n * ```\n */\n changePlaybackRate(rate, trigger) {\n this.#dispatchRequest(\"media-rate-change-request\", trigger, rate);\n }\n /**\n * Dispatch a request to change the media audio gain.\n *\n * @example\n * ```ts\n * remote.changeAudioGain(1); // Disable audio gain\n * remote.changeAudioGain(1.5); // 50% louder\n * remote.changeAudioGain(2); // 100% louder\n * ```\n */\n changeAudioGain(gain, trigger) {\n this.#dispatchRequest(\"media-audio-gain-change-request\", trigger, gain);\n }\n /**\n * Dispatch a request to resume idle tracking on controls.\n */\n resumeControls(trigger) {\n this.#dispatchRequest(\"media-resume-controls-request\", trigger);\n }\n /**\n * Dispatch a request to pause controls idle tracking. Pausing tracking will result in the\n * controls being visible until `remote.resumeControls()` is called. This method\n * is generally used when building custom controls and you'd like to prevent the UI from\n * disappearing.\n *\n * @example\n * ```ts\n * // Prevent controls hiding while menu is being interacted with.\n * function onSettingsOpen() {\n * remote.pauseControls();\n * }\n *\n * function onSettingsClose() {\n * remote.resumeControls();\n * }\n * ```\n */\n pauseControls(trigger) {\n this.#dispatchRequest(\"media-pause-controls-request\", trigger);\n }\n /**\n * Dispatch a request to toggle the media playback state.\n */\n togglePaused(trigger) {\n const player = this.getPlayer(trigger?.target);\n if (!player) {\n return;\n }\n if (player.state.paused) this.play(trigger);\n else this.pause(trigger);\n }\n /**\n * Dispatch a request to toggle the controls visibility.\n */\n toggleControls(trigger) {\n const player = this.getPlayer(trigger?.target);\n if (!player) {\n return;\n }\n if (!player.controls.showing) {\n player.controls.show(0, trigger);\n } else {\n player.controls.hide(0, trigger);\n }\n }\n /**\n * Dispatch a request to toggle the media muted state.\n */\n toggleMuted(trigger) {\n const player = this.getPlayer(trigger?.target);\n if (!player) {\n return;\n }\n if (player.state.muted) this.unmute(trigger);\n else this.mute(trigger);\n }\n /**\n * Dispatch a request to toggle the media fullscreen state.\n *\n * @docs {@link https://www.vidstack.io/docs/player/api/fullscreen#remote-control}\n */\n toggleFullscreen(target, trigger) {\n const player = this.getPlayer(trigger?.target);\n if (!player) {\n return;\n }\n if (player.state.fullscreen) this.exitFullscreen(target, trigger);\n else this.enterFullscreen(target, trigger);\n }\n /**\n * Dispatch a request to toggle the media picture-in-picture mode.\n *\n * @docs {@link https://www.vidstack.io/docs/player/api/picture-in-picture#remote-control}\n */\n togglePictureInPicture(trigger) {\n const player = this.getPlayer(trigger?.target);\n if (!player) {\n return;\n }\n if (player.state.pictureInPicture) this.exitPictureInPicture(trigger);\n else this.enterPictureInPicture(trigger);\n }\n /**\n * Show captions.\n */\n showCaptions(trigger) {\n const player = this.getPlayer(trigger?.target);\n if (!player) {\n return;\n }\n let tracks = player.state.textTracks, index = this.#prevTrackIndex;\n if (!tracks[index] || !isTrackCaptionKind(tracks[index])) {\n index = -1;\n }\n if (index === -1) {\n index = tracks.findIndex((track) => isTrackCaptionKind(track) && track.default);\n }\n if (index === -1) {\n index = tracks.findIndex((track) => isTrackCaptionKind(track));\n }\n if (index >= 0) this.changeTextTrackMode(index, \"showing\", trigger);\n this.#prevTrackIndex = -1;\n }\n /**\n * Turn captions off.\n */\n disableCaptions(trigger) {\n const player = this.getPlayer(trigger?.target);\n if (!player) {\n return;\n }\n const tracks = player.state.textTracks, track = player.state.textTrack;\n if (track) {\n const index = tracks.indexOf(track);\n this.changeTextTrackMode(index, \"disabled\", trigger);\n this.#prevTrackIndex = index;\n }\n }\n /**\n * Dispatch a request to toggle the current captions mode.\n */\n toggleCaptions(trigger) {\n const player = this.getPlayer(trigger?.target);\n if (!player) {\n return;\n }\n if (player.state.textTrack) {\n this.disableCaptions();\n } else {\n this.showCaptions();\n }\n }\n userPrefersLoopChange(prefersLoop, trigger) {\n this.#dispatchRequest(\"media-user-loop-change-request\", trigger, prefersLoop);\n }\n #dispatchRequest(type, trigger, detail) {\n const request = new DOMEvent(type, {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail,\n trigger\n });\n let target = trigger?.target || null;\n if (target && target instanceof Component) target = target.el;\n const shouldUsePlayer = !target || target === document || target === window || target === document.body || this.#player?.el && target instanceof Node && !this.#player.el.contains(target);\n target = shouldUsePlayer ? this.#target ?? this.getPlayer()?.el : target ?? this.#target;\n if (this.#player) {\n if (type === \"media-play-request\" && !this.#player.state.canLoad) {\n target?.dispatchEvent(request);\n } else {\n this.#player.canPlayQueue.enqueue(type, () => target?.dispatchEvent(request));\n }\n } else {\n target?.dispatchEvent(request);\n }\n }\n #noPlayerWarning(method) {\n }\n}\n\nclass LocalMediaStorage {\n playerId = \"vds-player\";\n mediaId = null;\n #data = {\n volume: null,\n muted: null,\n audioGain: null,\n time: null,\n lang: null,\n captions: null,\n rate: null,\n quality: null\n };\n async getVolume() {\n return this.#data.volume;\n }\n async setVolume(volume) {\n this.#data.volume = volume;\n this.save();\n }\n async getMuted() {\n return this.#data.muted;\n }\n async setMuted(muted) {\n this.#data.muted = muted;\n this.save();\n }\n async getTime() {\n return this.#data.time;\n }\n async setTime(time, ended) {\n const shouldClear = time < 0;\n this.#data.time = !shouldClear ? time : null;\n if (shouldClear || ended) this.saveTime();\n else this.saveTimeThrottled();\n }\n async getLang() {\n return this.#data.lang;\n }\n async setLang(lang) {\n this.#data.lang = lang;\n this.save();\n }\n async getCaptions() {\n return this.#data.captions;\n }\n async setCaptions(enabled) {\n this.#data.captions = enabled;\n this.save();\n }\n async getPlaybackRate() {\n return this.#data.rate;\n }\n async setPlaybackRate(rate) {\n this.#data.rate = rate;\n this.save();\n }\n async getAudioGain() {\n return this.#data.audioGain;\n }\n async setAudioGain(gain) {\n this.#data.audioGain = gain;\n this.save();\n }\n async getVideoQuality() {\n return this.#data.quality;\n }\n async setVideoQuality(quality) {\n this.#data.quality = quality;\n this.save();\n }\n onChange(src, mediaId, playerId = \"vds-player\") {\n const savedData = playerId ? localStorage.getItem(playerId) : null, savedTime = mediaId ? localStorage.getItem(mediaId) : null;\n this.playerId = playerId;\n this.mediaId = mediaId;\n this.#data = {\n volume: null,\n muted: null,\n audioGain: null,\n lang: null,\n captions: null,\n rate: null,\n quality: null,\n ...savedData ? JSON.parse(savedData) : {},\n time: savedTime ? +savedTime : null\n };\n }\n save() {\n if (IS_SERVER || !this.playerId) return;\n const data = JSON.stringify({ ...this.#data, time: void 0 });\n localStorage.setItem(this.playerId, data);\n }\n saveTimeThrottled = functionThrottle(this.saveTime.bind(this), 1e3);\n saveTime() {\n if (IS_SERVER || !this.mediaId) return;\n const data = (this.#data.time ?? 0).toString();\n localStorage.setItem(this.mediaId, data);\n }\n}\n\nconst ADD = Symbol(0), REMOVE = Symbol(0), RESET = Symbol(0), SELECT = Symbol(0), READONLY = Symbol(0), SET_READONLY = Symbol(0), ON_RESET = Symbol(0), ON_REMOVE = Symbol(0), ON_USER_SELECT = Symbol(0);\nconst ListSymbol = {\n add: ADD,\n remove: REMOVE,\n reset: RESET,\n select: SELECT,\n readonly: READONLY,\n setReadonly: SET_READONLY,\n onReset: ON_RESET,\n onRemove: ON_REMOVE,\n onUserSelect: ON_USER_SELECT\n};\n\nclass List extends EventsTarget {\n items = [];\n /** @internal */\n [ListSymbol.readonly] = false;\n get length() {\n return this.items.length;\n }\n get readonly() {\n return this[ListSymbol.readonly];\n }\n /**\n * Returns the index of the first occurrence of the given item, or -1 if it is not present.\n */\n indexOf(item) {\n return this.items.indexOf(item);\n }\n /**\n * Returns an item matching the given `id`, or `null` if not present.\n */\n getById(id) {\n if (id === \"\") return null;\n return this.items.find((item) => item.id === id) ?? null;\n }\n /**\n * Transform list to an array.\n */\n toArray() {\n return [...this.items];\n }\n [Symbol.iterator]() {\n return this.items.values();\n }\n /** @internal */\n [ListSymbol.add](item, trigger) {\n const index = this.items.length;\n if (!(\"\" + index in this)) {\n Object.defineProperty(this, index, {\n get() {\n return this.items[index];\n }\n });\n }\n if (this.items.includes(item)) return;\n this.items.push(item);\n this.dispatchEvent(new DOMEvent(\"add\", { detail: item, trigger }));\n }\n /** @internal */\n [ListSymbol.remove](item, trigger) {\n const index = this.items.indexOf(item);\n if (index >= 0) {\n this[ListSymbol.onRemove]?.(item, trigger);\n this.items.splice(index, 1);\n this.dispatchEvent(new DOMEvent(\"remove\", { detail: item, trigger }));\n }\n }\n /** @internal */\n [ListSymbol.reset](trigger) {\n for (const item of [...this.items]) this[ListSymbol.remove](item, trigger);\n this.items = [];\n this[ListSymbol.setReadonly](false, trigger);\n this[ListSymbol.onReset]?.();\n }\n /** @internal */\n [ListSymbol.setReadonly](readonly, trigger) {\n if (this[ListSymbol.readonly] === readonly) return;\n this[ListSymbol.readonly] = readonly;\n this.dispatchEvent(new DOMEvent(\"readonly-change\", { detail: readonly, trigger }));\n }\n}\n\nconst SELECTED = Symbol(0);\nclass SelectList extends List {\n get selected() {\n return this.items.find((item) => item.selected) ?? null;\n }\n get selectedIndex() {\n return this.items.findIndex((item) => item.selected);\n }\n /** @internal */\n [ListSymbol.onRemove](item, trigger) {\n this[ListSymbol.select](item, false, trigger);\n }\n /** @internal */\n [ListSymbol.add](item, trigger) {\n item[SELECTED] = false;\n Object.defineProperty(item, \"selected\", {\n get() {\n return this[SELECTED];\n },\n set: (selected) => {\n if (this.readonly) return;\n this[ListSymbol.onUserSelect]?.();\n this[ListSymbol.select](item, selected);\n }\n });\n super[ListSymbol.add](item, trigger);\n }\n /** @internal */\n [ListSymbol.select](item, selected, trigger) {\n if (selected === item?.[SELECTED]) return;\n const prev = this.selected;\n if (item) item[SELECTED] = selected;\n const changed = !selected ? prev === item : prev !== item;\n if (changed) {\n if (prev) prev[SELECTED] = false;\n this.dispatchEvent(\n new DOMEvent(\"change\", {\n detail: {\n prev,\n current: this.selected\n },\n trigger\n })\n );\n }\n }\n}\n\nclass AudioTrackList extends SelectList {\n}\n\nfunction round(num, decimalPlaces = 2) {\n return Number(num.toFixed(decimalPlaces));\n}\nfunction getNumberOfDecimalPlaces(num) {\n return String(num).split(\".\")[1]?.length ?? 0;\n}\nfunction clampNumber(min, value, max) {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction isEventInside(el, event) {\n const target = event.composedPath()[0];\n return isDOMNode(target) && el.contains(target);\n}\nconst rafJobs = /* @__PURE__ */ new Set();\nif (!IS_SERVER) {\n let processJobs = function() {\n for (const job of rafJobs) {\n try {\n job();\n } catch (e) {\n }\n }\n window.requestAnimationFrame(processJobs);\n };\n processJobs();\n}\nfunction scheduleRafJob(job) {\n rafJobs.add(job);\n return () => rafJobs.delete(job);\n}\nfunction setAttributeIfEmpty(target, name, value) {\n if (!target.hasAttribute(name)) target.setAttribute(name, value);\n}\nfunction setARIALabel(target, $label) {\n if (target.hasAttribute(\"aria-label\") || target.hasAttribute(\"data-no-label\")) return;\n if (!isFunction($label)) {\n setAttribute(target, \"aria-label\", $label);\n return;\n }\n function updateAriaDescription() {\n setAttribute(target, \"aria-label\", $label());\n }\n if (IS_SERVER) updateAriaDescription();\n else effect(updateAriaDescription);\n}\nfunction isElementVisible(el) {\n const style = getComputedStyle(el);\n return style.display !== \"none\" && parseInt(style.opacity) > 0;\n}\nfunction checkVisibility(el) {\n return !!el && (\"checkVisibility\" in el ? el.checkVisibility({ checkOpacity: true, checkVisibilityCSS: true }) : isElementVisible(el));\n}\nfunction observeVisibility(el, callback) {\n return scheduleRafJob(() => callback(checkVisibility(el)));\n}\nfunction isElementParent(owner, node, test) {\n while (node) {\n if (node === owner) {\n return true;\n } else if (test?.(node)) {\n break;\n } else {\n node = node.parentElement;\n }\n }\n return false;\n}\nfunction onPress(target, handler) {\n return new EventsController(target).add(\"pointerup\", (event) => {\n if (event.button === 0 && !event.defaultPrevented) handler(event);\n }).add(\"keydown\", (event) => {\n if (isKeyboardClick(event)) handler(event);\n });\n}\nfunction isTouchPinchEvent(event) {\n return isTouchEvent(event) && (event.touches.length > 1 || event.changedTouches.length > 1);\n}\nfunction requestScopedAnimationFrame(callback) {\n if (IS_SERVER) return callback();\n let scope = getScope(), id = window.requestAnimationFrame(() => {\n scoped(callback, scope);\n id = -1;\n });\n return () => void window.cancelAnimationFrame(id);\n}\nfunction autoPlacement(el, trigger, placement, {\n offsetVarName,\n xOffset,\n yOffset,\n ...options\n}) {\n if (!el) return;\n const floatingPlacement = placement.replace(\" \", \"-\").replace(\"-center\", \"\");\n setStyle(el, \"visibility\", !trigger ? \"hidden\" : null);\n if (!trigger) return;\n let isTop = placement.includes(\"top\");\n const negateX = (x) => placement.includes(\"left\") ? `calc(-1 * ${x})` : x, negateY = (y) => isTop ? `calc(-1 * ${y})` : y;\n return autoUpdate(trigger, el, () => {\n computePosition(trigger, el, {\n placement: floatingPlacement,\n middleware: [\n ...options.middleware ?? [],\n flip({ fallbackAxisSideDirection: \"start\", crossAxis: false }),\n shift()\n ],\n ...options\n }).then(({ x, y, middlewareData }) => {\n const hasFlipped = !!middlewareData.flip?.index;\n isTop = placement.includes(hasFlipped ? \"bottom\" : \"top\");\n el.setAttribute(\n \"data-placement\",\n hasFlipped ? placement.startsWith(\"top\") ? placement.replace(\"top\", \"bottom\") : placement.replace(\"bottom\", \"top\") : placement\n );\n Object.assign(el.style, {\n top: `calc(${y + \"px\"} + ${negateY(\n yOffset ? yOffset + \"px\" : `var(--${offsetVarName}-y-offset, 0px)`\n )})`,\n left: `calc(${x + \"px\"} + ${negateX(\n xOffset ? xOffset + \"px\" : `var(--${offsetVarName}-x-offset, 0px)`\n )})`\n });\n });\n });\n}\nfunction hasAnimation(el) {\n const styles = getComputedStyle(el);\n return styles.animationName !== \"none\";\n}\nfunction isHTMLElement(el) {\n return el instanceof HTMLElement;\n}\n\nclass NativeTextRenderer {\n priority = 0;\n #display = true;\n #video = null;\n #track = null;\n #tracks = /* @__PURE__ */ new Set();\n canRender(_, video) {\n return !!video;\n }\n attach(video) {\n this.#video = video;\n if (video) video.textTracks.onchange = this.#onChange.bind(this);\n }\n addTrack(track) {\n this.#tracks.add(track);\n this.#attachTrack(track);\n }\n removeTrack(track) {\n track[TextTrackSymbol.native]?.remove?.();\n track[TextTrackSymbol.native] = null;\n this.#tracks.delete(track);\n }\n changeTrack(track) {\n const current = track?.[TextTrackSymbol.native];\n if (current && current.track.mode !== \"showing\") {\n current.track.mode = \"showing\";\n }\n this.#track = track;\n }\n setDisplay(display) {\n this.#display = display;\n this.#onChange();\n }\n detach() {\n if (this.#video) this.#video.textTracks.onchange = null;\n for (const track of this.#tracks) this.removeTrack(track);\n this.#tracks.clear();\n this.#video = null;\n this.#track = null;\n }\n #attachTrack(track) {\n if (!this.#video) return;\n const el = track[TextTrackSymbol.native] ??= this.#createTrackElement(track);\n if (isHTMLElement(el)) {\n this.#video.append(el);\n el.track.mode = el.default ? \"showing\" : \"disabled\";\n }\n }\n #createTrackElement(track) {\n const el = document.createElement(\"track\"), isDefault = track.default || track.mode === \"showing\", isSupported = track.src && track.type === \"vtt\";\n el.id = track.id;\n el.src = isSupported ? track.src : \"\";\n el.label = track.label;\n el.kind = track.kind;\n el.default = isDefault;\n track.language && (el.srclang = track.language);\n if (isDefault && !isSupported) {\n this.#copyCues(track, el.track);\n }\n return el;\n }\n #copyCues(track, native) {\n if (track.src && track.type === \"vtt\" || native.cues?.length) return;\n for (const cue of track.cues) native.addCue(cue);\n }\n #onChange(event) {\n for (const track of this.#tracks) {\n const native = track[TextTrackSymbol.native];\n if (!native) continue;\n if (!this.#display) {\n native.track.mode = native.managed ? \"hidden\" : \"disabled\";\n continue;\n }\n const isShowing = native.track.mode === \"showing\";\n if (isShowing) this.#copyCues(track, native.track);\n track.setMode(isShowing ? \"showing\" : \"disabled\", event);\n }\n }\n}\n\nclass TextRenderers {\n #video = null;\n #textTracks;\n #renderers = [];\n #media;\n #nativeDisplay = false;\n #nativeRenderer = null;\n #customRenderer = null;\n constructor(media) {\n this.#media = media;\n const textTracks = media.textTracks;\n this.#textTracks = textTracks;\n effect(this.#watchControls.bind(this));\n onDispose(this.#detach.bind(this));\n new EventsController(textTracks).add(\"add\", this.#onAddTrack.bind(this)).add(\"remove\", this.#onRemoveTrack.bind(this)).add(\"mode-change\", this.#update.bind(this));\n }\n #watchControls() {\n const { nativeControls } = this.#media.$state;\n this.#nativeDisplay = nativeControls();\n this.#update();\n }\n add(renderer) {\n this.#renderers.push(renderer);\n untrack(this.#update.bind(this));\n }\n remove(renderer) {\n renderer.detach();\n this.#renderers.splice(this.#renderers.indexOf(renderer), 1);\n untrack(this.#update.bind(this));\n }\n /** @internal */\n attachVideo(video) {\n requestAnimationFrame(() => {\n this.#video = video;\n if (video) {\n this.#nativeRenderer = new NativeTextRenderer();\n this.#nativeRenderer.attach(video);\n for (const track of this.#textTracks) this.#addNativeTrack(track);\n }\n this.#update();\n });\n }\n #addNativeTrack(track) {\n if (!isTrackCaptionKind(track)) return;\n this.#nativeRenderer?.addTrack(track);\n }\n #removeNativeTrack(track) {\n if (!isTrackCaptionKind(track)) return;\n this.#nativeRenderer?.removeTrack(track);\n }\n #onAddTrack(event) {\n this.#addNativeTrack(event.detail);\n }\n #onRemoveTrack(event) {\n this.#removeNativeTrack(event.detail);\n }\n #update() {\n const currentTrack = this.#textTracks.selected;\n if (this.#video && (this.#nativeDisplay || currentTrack?.[TextTrackSymbol.nativeHLS])) {\n this.#customRenderer?.changeTrack(null);\n this.#nativeRenderer?.setDisplay(true);\n this.#nativeRenderer?.changeTrack(currentTrack);\n return;\n }\n this.#nativeRenderer?.setDisplay(false);\n this.#nativeRenderer?.changeTrack(null);\n if (!currentTrack) {\n this.#customRenderer?.changeTrack(null);\n return;\n }\n const customRenderer = this.#renderers.sort((a, b) => a.priority - b.priority).find((renderer) => renderer.canRender(currentTrack, this.#video));\n if (this.#customRenderer !== customRenderer) {\n this.#customRenderer?.detach();\n customRenderer?.attach(this.#video);\n this.#customRenderer = customRenderer ?? null;\n }\n customRenderer?.changeTrack(currentTrack);\n }\n #detach() {\n this.#nativeRenderer?.detach();\n this.#nativeRenderer = null;\n this.#customRenderer?.detach();\n this.#customRenderer = null;\n }\n}\n\nclass TextTrackList extends List {\n #canLoad = false;\n #defaults = {};\n #storage = null;\n #preferredLang = null;\n /** @internal */\n [TextTrackSymbol.crossOrigin];\n constructor() {\n super();\n }\n get selected() {\n const track = this.items.find((t) => t.mode === \"showing\" && isTrackCaptionKind(t));\n return track ?? null;\n }\n get selectedIndex() {\n const selected = this.selected;\n return selected ? this.indexOf(selected) : -1;\n }\n get preferredLang() {\n return this.#preferredLang;\n }\n set preferredLang(lang) {\n this.#preferredLang = lang;\n this.#saveLang(lang);\n }\n add(init, trigger) {\n const isTrack = init instanceof TextTrack, track = isTrack ? init : new TextTrack(init), kind = init.kind === \"captions\" || init.kind === \"subtitles\" ? \"captions\" : init.kind;\n if (this.#defaults[kind] && init.default) delete init.default;\n track.addEventListener(\"mode-change\", this.#onTrackModeChangeBind);\n this[ListSymbol.add](track, trigger);\n track[TextTrackSymbol.crossOrigin] = this[TextTrackSymbol.crossOrigin];\n if (this.#canLoad) track[TextTrackSymbol.canLoad]();\n if (init.default) this.#defaults[kind] = track;\n this.#selectTracks();\n return this;\n }\n remove(track, trigger) {\n this.#pendingRemoval = track;\n if (!this.items.includes(track)) return;\n if (track === this.#defaults[track.kind]) delete this.#defaults[track.kind];\n track.mode = \"disabled\";\n track[TextTrackSymbol.onModeChange] = null;\n track.removeEventListener(\"mode-change\", this.#onTrackModeChangeBind);\n this[ListSymbol.remove](track, trigger);\n this.#pendingRemoval = null;\n return this;\n }\n clear(trigger) {\n for (const track of [...this.items]) {\n this.remove(track, trigger);\n }\n return this;\n }\n getByKind(kind) {\n const kinds = Array.isArray(kind) ? kind : [kind];\n return this.items.filter((track) => kinds.includes(track.kind));\n }\n /** @internal */\n [TextTrackSymbol.canLoad]() {\n if (this.#canLoad) return;\n for (const track of this.items) track[TextTrackSymbol.canLoad]();\n this.#canLoad = true;\n this.#selectTracks();\n }\n #selectTracks = functionDebounce(async () => {\n if (!this.#canLoad) return;\n if (!this.#preferredLang && this.#storage) {\n this.#preferredLang = await this.#storage.getLang();\n }\n const showCaptions = await this.#storage?.getCaptions(), kinds = [\n [\"captions\", \"subtitles\"],\n \"chapters\",\n \"descriptions\",\n \"metadata\"\n ];\n for (const kind of kinds) {\n const tracks = this.getByKind(kind);\n if (tracks.find((t) => t.mode === \"showing\")) continue;\n const preferredTrack = this.#preferredLang ? tracks.find((track2) => track2.language === this.#preferredLang) : null;\n const defaultTrack = isArray(kind) ? this.#defaults[kind.find((kind2) => this.#defaults[kind2]) || \"\"] : this.#defaults[kind];\n const track = preferredTrack ?? defaultTrack, isCaptionsKind = track && isTrackCaptionKind(track);\n if (track && (!isCaptionsKind || showCaptions !== false)) {\n track.mode = \"showing\";\n if (isCaptionsKind) this.#saveCaptionsTrack(track);\n }\n }\n }, 300);\n #pendingRemoval = null;\n #onTrackModeChangeBind = this.#onTrackModeChange.bind(this);\n #onTrackModeChange(event) {\n const track = event.detail;\n if (this.#storage && isTrackCaptionKind(track) && track !== this.#pendingRemoval) {\n this.#saveCaptionsTrack(track);\n }\n if (track.mode === \"showing\") {\n const kinds = isTrackCaptionKind(track) ? [\"captions\", \"subtitles\"] : [track.kind];\n for (const t of this.items) {\n if (t.mode === \"showing\" && t != track && kinds.includes(t.kind)) {\n t.mode = \"disabled\";\n }\n }\n }\n this.dispatchEvent(\n new DOMEvent(\"mode-change\", {\n detail: event.detail,\n trigger: event\n })\n );\n }\n #saveCaptionsTrack(track) {\n if (track.mode !== \"disabled\") {\n this.#saveLang(track.language);\n }\n this.#storage?.setCaptions?.(track.mode === \"showing\");\n }\n #saveLang(lang) {\n this.#storage?.setLang?.(this.#preferredLang = lang);\n }\n setStorage(storage) {\n this.#storage = storage;\n }\n}\n\nconst SET_AUTO = Symbol(0), ENABLE_AUTO = Symbol(0);\nconst QualitySymbol = {\n setAuto: SET_AUTO,\n enableAuto: ENABLE_AUTO\n};\n\nclass VideoQualityList extends SelectList {\n #auto = false;\n /**\n * Configures quality switching:\n *\n * - `current`: Trigger an immediate quality level switch. This will abort the current fragment\n * request if any, flush the whole buffer, and fetch fragment matching with current position\n * and requested quality level.\n *\n * - `next`: Trigger a quality level switch for next fragment. This could eventually flush\n * already buffered next fragment.\n *\n * - `load`: Set quality level for next loaded fragment.\n *\n * @see {@link https://www.vidstack.io/docs/player/api/video-quality#switch}\n * @see {@link https://github.com/video-dev/hls.js/blob/master/docs/API.md#quality-switch-control-api}\n */\n switch = \"current\";\n /**\n * Whether automatic quality selection is enabled.\n */\n get auto() {\n return this.#auto || this.readonly;\n }\n /** @internal */\n [QualitySymbol.enableAuto];\n /** @internal */\n [ListSymbol.onUserSelect]() {\n this[QualitySymbol.setAuto](false);\n }\n /** @internal */\n [ListSymbol.onReset](trigger) {\n this[QualitySymbol.enableAuto] = void 0;\n this[QualitySymbol.setAuto](false, trigger);\n }\n /**\n * Request automatic quality selection (if supported). This will be a no-op if the list is\n * `readonly` as that already implies auto-selection.\n */\n autoSelect(trigger) {\n if (this.readonly || this.#auto || !this[QualitySymbol.enableAuto]) return;\n this[QualitySymbol.enableAuto]?.(trigger);\n this[QualitySymbol.setAuto](true, trigger);\n }\n getBySrc(src) {\n return this.items.find((quality) => quality.src === src);\n }\n /** @internal */\n [QualitySymbol.setAuto](auto, trigger) {\n if (this.#auto === auto) return;\n this.#auto = auto;\n this.dispatchEvent(\n new DOMEvent(\"auto-change\", {\n detail: auto,\n trigger\n })\n );\n }\n}\n\nfunction sortVideoQualities(qualities, desc) {\n return [...qualities].sort(desc ? compareVideoQualityDesc : compareVideoQualityAsc);\n}\nfunction compareVideoQualityAsc(a, b) {\n return a.height === b.height ? (a.bitrate ?? 0) - (b.bitrate ?? 0) : a.height - b.height;\n}\nfunction compareVideoQualityDesc(a, b) {\n return b.height === a.height ? (b.bitrate ?? 0) - (a.bitrate ?? 0) : b.height - a.height;\n}\n\nfunction isAudioProvider(provider) {\n return provider?.$$PROVIDER_TYPE === \"AUDIO\";\n}\nfunction isVideoProvider(provider) {\n return provider?.$$PROVIDER_TYPE === \"VIDEO\";\n}\nfunction isHLSProvider(provider) {\n return provider?.$$PROVIDER_TYPE === \"HLS\";\n}\nfunction isDASHProvider(provider) {\n return provider?.$$PROVIDER_TYPE === \"DASH\";\n}\nfunction isYouTubeProvider(provider) {\n return provider?.$$PROVIDER_TYPE === \"YOUTUBE\";\n}\nfunction isVimeoProvider(provider) {\n return provider?.$$PROVIDER_TYPE === \"VIMEO\";\n}\nfunction isGoogleCastProvider(provider) {\n return provider?.$$PROVIDER_TYPE === \"GOOGLE_CAST\";\n}\nfunction isHTMLAudioElement(element) {\n return !IS_SERVER && element instanceof HTMLAudioElement;\n}\nfunction isHTMLVideoElement(element) {\n return !IS_SERVER && element instanceof HTMLVideoElement;\n}\nfunction isHTMLMediaElement(element) {\n return isHTMLAudioElement(element) || isHTMLVideoElement(element);\n}\nfunction isHTMLIFrameElement(element) {\n return !IS_SERVER && element instanceof HTMLIFrameElement;\n}\n\nclass MediaPlayerController extends ViewController {\n}\n\nconst MEDIA_KEY_SHORTCUTS = {\n togglePaused: \"k Space\",\n toggleMuted: \"m\",\n toggleFullscreen: \"f\",\n togglePictureInPicture: \"i\",\n toggleCaptions: \"c\",\n seekBackward: \"j J ArrowLeft\",\n seekForward: \"l L ArrowRight\",\n volumeUp: \"ArrowUp\",\n volumeDown: \"ArrowDown\",\n speedUp: \">\",\n slowDown: \"<\"\n};\nconst MODIFIER_KEYS = /* @__PURE__ */ new Set([\"Shift\", \"Alt\", \"Meta\", \"Ctrl\"]), BUTTON_SELECTORS = 'button, [role=\"button\"]', IGNORE_SELECTORS = 'input, textarea, select, [contenteditable], [role^=\"menuitem\"], [role=\"timer\"]';\nclass MediaKeyboardController extends MediaPlayerController {\n #media;\n constructor(media) {\n super();\n this.#media = media;\n }\n onConnect() {\n effect(this.#onTargetChange.bind(this));\n }\n #onTargetChange() {\n const { keyDisabled, keyTarget } = this.$props;\n if (keyDisabled()) return;\n const target = keyTarget() === \"player\" ? this.el : document, $active = signal(false);\n if (target === this.el) {\n new EventsController(this.el).add(\"focusin\", () => $active.set(true)).add(\"focusout\", (event) => {\n if (!this.el.contains(event.target)) $active.set(false);\n });\n } else {\n if (!peek($active)) $active.set(document.querySelector(\"[data-media-player]\") === this.el);\n listenEvent(document, \"focusin\", (event) => {\n const activePlayer = event.composedPath().find((el) => el instanceof Element && el.localName === \"media-player\");\n if (activePlayer !== void 0) $active.set(this.el === activePlayer);\n });\n }\n effect(() => {\n if (!$active()) return;\n new EventsController(target).add(\"keyup\", this.#onKeyUp.bind(this)).add(\"keydown\", this.#onKeyDown.bind(this)).add(\"keydown\", this.#onPreventVideoKeys.bind(this), { capture: true });\n });\n }\n #onKeyUp(event) {\n const focusedEl = document.activeElement;\n if (!event.key || !this.$state.canSeek() || focusedEl?.matches(IGNORE_SELECTORS)) {\n return;\n }\n let { method, value } = this.#getMatchingMethod(event);\n if (!isString(value) && !isArray(value)) {\n value?.onKeyUp?.({\n event,\n player: this.#media.player,\n remote: this.#media.remote\n });\n value?.callback?.(event, this.#media.remote);\n return;\n }\n if (method?.startsWith(\"seek\")) {\n event.preventDefault();\n event.stopPropagation();\n if (this.#timeSlider) {\n this.#forwardTimeKeyboardEvent(event, method === \"seekForward\");\n this.#timeSlider = null;\n } else {\n this.#media.remote.seek(this.#seekTotal, event);\n this.#seekTotal = void 0;\n }\n }\n if (method?.startsWith(\"volume\")) {\n const volumeSlider = this.el.querySelector(\"[data-media-volume-slider]\");\n volumeSlider?.dispatchEvent(\n new KeyboardEvent(\"keyup\", {\n key: method === \"volumeUp\" ? \"Up\" : \"Down\",\n shiftKey: event.shiftKey,\n trigger: event\n })\n );\n }\n }\n #onKeyDown(event) {\n if (!event.key || MODIFIER_KEYS.has(event.key)) return;\n const focusedEl = document.activeElement;\n if (focusedEl?.matches(IGNORE_SELECTORS) || isKeyboardClick(event) && focusedEl?.matches(BUTTON_SELECTORS)) {\n return;\n }\n let { method, value } = this.#getMatchingMethod(event), isNumberPress = !event.metaKey && /^[0-9]$/.test(event.key);\n if (!isString(value) && !isArray(value) && !isNumberPress) {\n value?.onKeyDown?.({\n event,\n player: this.#media.player,\n remote: this.#media.remote\n });\n value?.callback?.(event, this.#media.remote);\n return;\n }\n if (!method && isNumberPress && !modifierKeyPressed(event)) {\n event.preventDefault();\n event.stopPropagation();\n this.#media.remote.seek(this.$state.duration() / 10 * Number(event.key), event);\n return;\n }\n if (!method) return;\n event.preventDefault();\n event.stopPropagation();\n switch (method) {\n case \"seekForward\":\n case \"seekBackward\":\n this.#seeking(event, method, method === \"seekForward\");\n break;\n case \"volumeUp\":\n case \"volumeDown\":\n const volumeSlider = this.el.querySelector(\"[data-media-volume-slider]\");\n if (volumeSlider) {\n volumeSlider.dispatchEvent(\n new KeyboardEvent(\"keydown\", {\n key: method === \"volumeUp\" ? \"Up\" : \"Down\",\n shiftKey: event.shiftKey,\n trigger: event\n })\n );\n } else {\n const value2 = event.shiftKey ? 0.1 : 0.05;\n this.#media.remote.changeVolume(\n this.$state.volume() + (method === \"volumeUp\" ? +value2 : -value2),\n event\n );\n }\n break;\n case \"toggleFullscreen\":\n this.#media.remote.toggleFullscreen(\"prefer-media\", event);\n break;\n case \"speedUp\":\n case \"slowDown\":\n const playbackRate = this.$state.playbackRate();\n this.#media.remote.changePlaybackRate(\n Math.max(0.25, Math.min(2, playbackRate + (method === \"speedUp\" ? 0.25 : -0.25))),\n event\n );\n break;\n default:\n this.#media.remote[method]?.(event);\n }\n this.$state.lastKeyboardAction.set({\n action: method,\n event\n });\n }\n #onPreventVideoKeys(event) {\n if (isHTMLMediaElement(event.target) && this.#getMatchingMethod(event).method) {\n event.preventDefault();\n }\n }\n #getMatchingMethod(event) {\n const keyShortcuts = {\n ...this.$props.keyShortcuts(),\n ...this.#media.ariaKeys\n };\n const method = Object.keys(keyShortcuts).find((method2) => {\n const value = keyShortcuts[method2], keys = isArray(value) ? value.join(\" \") : isString(value) ? value : value?.keys;\n const combinations = (isArray(keys) ? keys : keys?.split(\" \"))?.map(\n (key) => replaceSymbolKeys(key).replace(/Control/g, \"Ctrl\").split(\"+\")\n );\n return combinations?.some((combo) => {\n const modifierKeys = new Set(combo.filter((key) => MODIFIER_KEYS.has(key)));\n for (const modKey of MODIFIER_KEYS) {\n const modKeyProp = modKey.toLowerCase() + \"Key\";\n if (!modifierKeys.has(modKey) && event[modKeyProp]) {\n return false;\n }\n }\n return combo.every((key) => {\n return MODIFIER_KEYS.has(key) ? event[key.toLowerCase() + \"Key\"] : event.key === key.replace(\"Space\", \" \");\n });\n });\n });\n return {\n method,\n value: method ? keyShortcuts[method] : null\n };\n }\n #seekTotal;\n #calcSeekAmount(event, type) {\n const seekBy = event.shiftKey ? 10 : 5;\n return this.#seekTotal = Math.max(\n 0,\n Math.min(\n (this.#seekTotal ?? this.$state.currentTime()) + (type === \"seekForward\" ? +seekBy : -seekBy),\n this.$state.duration()\n )\n );\n }\n #timeSlider = null;\n #forwardTimeKeyboardEvent(event, forward) {\n this.#timeSlider?.dispatchEvent(\n new KeyboardEvent(event.type, {\n key: !forward ? \"Left\" : \"Right\",\n shiftKey: event.shiftKey,\n trigger: event\n })\n );\n }\n #seeking(event, type, forward) {\n if (!this.$state.canSeek()) return;\n if (!this.#timeSlider) {\n this.#timeSlider = this.el.querySelector(\"[data-media-time-slider]\");\n }\n if (this.#timeSlider) {\n this.#forwardTimeKeyboardEvent(event, forward);\n } else {\n this.#media.remote.seeking(this.#calcSeekAmount(event, type), event);\n }\n }\n}\nconst SYMBOL_KEY_MAP = [\"!\", \"@\", \"#\", \"$\", \"%\", \"^\", \"&\", \"*\", \"(\", \")\"];\nfunction replaceSymbolKeys(key) {\n return key.replace(/Shift\\+(\\d)/g, (_, num) => SYMBOL_KEY_MAP[num - 1]);\n}\nfunction modifierKeyPressed(event) {\n for (const key of MODIFIER_KEYS) {\n if (event[key.toLowerCase() + \"Key\"]) {\n return true;\n }\n }\n return false;\n}\n\nclass ARIAKeyShortcuts extends ViewController {\n #shortcut;\n constructor(shortcut) {\n super();\n this.#shortcut = shortcut;\n }\n onAttach(el) {\n const { $props, ariaKeys } = useMediaContext(), keys = el.getAttribute(\"aria-keyshortcuts\");\n if (keys) {\n ariaKeys[this.#shortcut] = keys;\n if (!IS_SERVER) {\n onDispose(() => {\n delete ariaKeys[this.#shortcut];\n });\n }\n return;\n }\n const shortcuts = $props.keyShortcuts()[this.#shortcut];\n if (shortcuts) {\n const keys2 = isArray(shortcuts) ? shortcuts.join(\" \") : isString(shortcuts) ? shortcuts : shortcuts?.keys;\n el.setAttribute(\"aria-keyshortcuts\", isArray(keys2) ? keys2.join(\" \") : keys2);\n }\n }\n}\n\nclass MediaControls extends MediaPlayerController {\n #idleTimer = -2;\n #pausedTracking = false;\n #hideOnMouseLeave = signal(false);\n #isMouseOutside = signal(false);\n #focusedItem = null;\n #canIdle = signal(true);\n /**\n * The default amount of delay in milliseconds while media playback is progressing without user\n * activity to indicate an idle state (i.e., hide controls).\n *\n * @defaultValue 2000\n */\n defaultDelay = 2e3;\n /**\n * Whether controls can hide after a delay in user interaction. If this is false, controls will\n * not hide and be user controlled.\n */\n get canIdle() {\n return this.#canIdle();\n }\n set canIdle(canIdle) {\n this.#canIdle.set(canIdle);\n }\n /**\n * Whether controls visibility should be toggled when the mouse enters and leaves the player\n * container.\n *\n * @defaultValue false\n */\n get hideOnMouseLeave() {\n const { hideControlsOnMouseLeave } = this.$props;\n return this.#hideOnMouseLeave() || hideControlsOnMouseLeave();\n }\n set hideOnMouseLeave(hide) {\n this.#hideOnMouseLeave.set(hide);\n }\n /**\n * Whether media controls are currently visible.\n */\n get showing() {\n return this.$state.controlsVisible();\n }\n /**\n * Show controls.\n */\n show(delay = 0, trigger) {\n this.#clearIdleTimer();\n if (!this.#pausedTracking) {\n this.#changeVisibility(true, delay, trigger);\n }\n }\n /**\n * Hide controls.\n */\n hide(delay = this.defaultDelay, trigger) {\n this.#clearIdleTimer();\n if (!this.#pausedTracking) {\n this.#changeVisibility(false, delay, trigger);\n }\n }\n /**\n * Whether all idle tracking on controls should be paused until resumed again.\n */\n pause(trigger) {\n this.#pausedTracking = true;\n this.#clearIdleTimer();\n this.#changeVisibility(true, 0, trigger);\n }\n resume(trigger) {\n this.#pausedTracking = false;\n if (this.$state.paused()) return;\n this.#changeVisibility(false, this.defaultDelay, trigger);\n }\n onConnect() {\n effect(this.#init.bind(this));\n }\n #init() {\n const { viewType } = this.$state;\n if (!this.el || !this.#canIdle()) return;\n if (viewType() === \"audio\") {\n this.show();\n return;\n }\n effect(this.#watchMouse.bind(this));\n effect(this.#watchPaused.bind(this));\n const onPlay = this.#onPlay.bind(this), onPause = this.#onPause.bind(this), onEnd = this.#onEnd.bind(this);\n new EventsController(this.el).add(\"can-play\", (event) => this.show(0, event)).add(\"play\", onPlay).add(\"pause\", onPause).add(\"end\", onEnd).add(\"auto-play-fail\", onPause);\n }\n #watchMouse() {\n if (!this.el) return;\n const { started, pointer, paused } = this.$state;\n if (!started() || pointer() !== \"fine\") return;\n const events = new EventsController(this.el), shouldHideOnMouseLeave = this.hideOnMouseLeave;\n if (!shouldHideOnMouseLeave || !this.#isMouseOutside()) {\n effect(() => {\n if (!paused()) events.add(\"pointermove\", this.#onStopIdle.bind(this));\n });\n }\n if (shouldHideOnMouseLeave) {\n events.add(\"mouseenter\", this.#onMouseEnter.bind(this)).add(\"mouseleave\", this.#onMouseLeave.bind(this));\n }\n }\n #watchPaused() {\n const { paused, started, autoPlayError } = this.$state;\n if (paused() || autoPlayError() && !started()) return;\n const onStopIdle = this.#onStopIdle.bind(this);\n effect(() => {\n if (!this.el) return;\n const pointer = this.$state.pointer(), isTouch = pointer === \"coarse\", events = new EventsController(this.el), eventTypes = [isTouch ? \"touchend\" : \"pointerup\", \"keydown\"];\n for (const eventType of eventTypes) {\n events.add(eventType, onStopIdle, { passive: false });\n }\n });\n }\n #onPlay(event) {\n if (event.triggers.hasType(\"ended\")) return;\n this.show(0, event);\n this.hide(void 0, event);\n }\n #onPause(event) {\n this.show(0, event);\n }\n #onEnd(event) {\n const { loop } = this.$state;\n if (loop()) this.hide(0, event);\n }\n #onMouseEnter(event) {\n this.#isMouseOutside.set(false);\n this.show(0, event);\n this.hide(void 0, event);\n }\n #onMouseLeave(event) {\n this.#isMouseOutside.set(true);\n this.hide(0, event);\n }\n #clearIdleTimer() {\n window.clearTimeout(this.#idleTimer);\n this.#idleTimer = -1;\n }\n #onStopIdle(event) {\n if (\n // @ts-expect-error\n event.MEDIA_GESTURE || this.#pausedTracking || isTouchPinchEvent(event)\n ) {\n return;\n }\n if (isKeyboardEvent(event)) {\n if (event.key === \"Escape\") {\n this.el?.focus();\n this.#focusedItem = null;\n } else if (this.#focusedItem) {\n event.preventDefault();\n requestAnimationFrame(() => {\n this.#focusedItem?.focus();\n this.#focusedItem = null;\n });\n }\n }\n this.show(0, event);\n this.hide(this.defaultDelay, event);\n }\n #changeVisibility(visible, delay, trigger) {\n if (delay === 0) {\n this.#onChange(visible, trigger);\n return;\n }\n this.#idleTimer = window.setTimeout(() => {\n if (!this.scope) return;\n this.#onChange(visible && !this.#pausedTracking, trigger);\n }, delay);\n }\n #onChange(visible, trigger) {\n if (this.$state.controlsVisible() === visible) return;\n this.$state.controlsVisible.set(visible);\n if (!visible && document.activeElement && this.el?.contains(document.activeElement)) {\n this.#focusedItem = document.activeElement;\n requestAnimationFrame(() => {\n this.el?.focus({ preventScroll: true });\n });\n }\n this.dispatch(\"controls-change\", {\n detail: visible,\n trigger\n });\n }\n}\n\nconst CAN_FULLSCREEN = fscreen.fullscreenEnabled;\nclass FullscreenController extends ViewController {\n /**\n * Tracks whether we're the active fullscreen event listener. Fullscreen events can only be\n * listened to globally on the document so we need to know if they relate to the current host\n * element or not.\n */\n #listening = false;\n #active = false;\n get active() {\n return this.#active;\n }\n get supported() {\n return CAN_FULLSCREEN;\n }\n onConnect() {\n new EventsController(fscreen).add(\"fullscreenchange\", this.#onChange.bind(this)).add(\"fullscreenerror\", this.#onError.bind(this));\n onDispose(this.#onDisconnect.bind(this));\n }\n async #onDisconnect() {\n if (CAN_FULLSCREEN) await this.exit();\n }\n #onChange(event) {\n const active = isFullscreen(this.el);\n if (active === this.#active) return;\n if (!active) this.#listening = false;\n this.#active = active;\n this.dispatch(\"fullscreen-change\", { detail: active, trigger: event });\n }\n #onError(event) {\n if (!this.#listening) return;\n this.dispatch(\"fullscreen-error\", { detail: null, trigger: event });\n this.#listening = false;\n }\n async enter() {\n try {\n this.#listening = true;\n if (!this.el || isFullscreen(this.el)) return;\n assertFullscreenAPI();\n return fscreen.requestFullscreen(this.el);\n } catch (error) {\n this.#listening = false;\n throw error;\n }\n }\n async exit() {\n if (!this.el || !isFullscreen(this.el)) return;\n assertFullscreenAPI();\n return fscreen.exitFullscreen();\n }\n}\nfunction canFullscreen() {\n return CAN_FULLSCREEN;\n}\nfunction isFullscreen(host) {\n if (fscreen.fullscreenElement === host) return true;\n try {\n return host.matches(\n // @ts-expect-error - `fullscreenPseudoClass` is missing from `@types/fscreen`.\n fscreen.fullscreenPseudoClass\n );\n } catch (error) {\n return false;\n }\n}\nfunction assertFullscreenAPI() {\n if (CAN_FULLSCREEN) return;\n throw Error(\n \"[vidstack] no fullscreen API\"\n );\n}\n\nclass ScreenOrientationController extends ViewController {\n #type = signal(this.#getScreenOrientation());\n #locked = signal(false);\n #currentLock;\n /**\n * The current screen orientation type.\n *\n * @signal\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/ScreenOrientation}\n * @see https://w3c.github.io/screen-orientation/#screen-orientation-types-and-locks\n */\n get type() {\n return this.#type();\n }\n /**\n * Whether the screen orientation is currently locked.\n *\n * @signal\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/ScreenOrientation}\n * @see https://w3c.github.io/screen-orientation/#screen-orientation-types-and-locks\n */\n get locked() {\n return this.#locked();\n }\n /**\n * Whether the viewport is in a portrait orientation.\n *\n * @signal\n */\n get portrait() {\n return this.#type().startsWith(\"portrait\");\n }\n /**\n * Whether the viewport is in a landscape orientation.\n *\n * @signal\n */\n get landscape() {\n return this.#type().startsWith(\"landscape\");\n }\n /**\n * Whether the native Screen Orientation API is available.\n */\n static supported = canOrientScreen();\n /**\n * Whether the native Screen Orientation API is available.\n */\n get supported() {\n return ScreenOrientationController.supported;\n }\n onConnect() {\n if (this.supported) {\n listenEvent(screen.orientation, \"change\", this.#onOrientationChange.bind(this));\n } else {\n const query = window.matchMedia(\"(orientation: landscape)\");\n query.onchange = this.#onOrientationChange.bind(this);\n onDispose(() => query.onchange = null);\n }\n onDispose(this.#onDisconnect.bind(this));\n }\n async #onDisconnect() {\n if (this.supported && this.#locked()) await this.unlock();\n }\n #onOrientationChange(event) {\n this.#type.set(this.#getScreenOrientation());\n this.dispatch(\"orientation-change\", {\n detail: {\n orientation: peek(this.#type),\n lock: this.#currentLock\n },\n trigger: event\n });\n }\n /**\n * Locks the orientation of the screen to the desired orientation type using the\n * Screen Orientation API.\n *\n * @param lockType - The screen lock orientation type.\n * @throws Error - If screen orientation API is unavailable.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Screen/orientation}\n * @see {@link https://w3c.github.io/screen-orientation}\n */\n async lock(lockType) {\n if (peek(this.#locked) || this.#currentLock === lockType) return;\n this.#assertScreenOrientationAPI();\n await screen.orientation.lock(lockType);\n this.#locked.set(true);\n this.#currentLock = lockType;\n }\n /**\n * Unlocks the orientation of the screen to it's default state using the Screen Orientation\n * API. This method will throw an error if the API is unavailable.\n *\n * @throws Error - If screen orientation API is unavailable.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Screen/orientation}\n * @see {@link https://w3c.github.io/screen-orientation}\n */\n async unlock() {\n if (!peek(this.#locked)) return;\n this.#assertScreenOrientationAPI();\n this.#currentLock = void 0;\n await screen.orientation.unlock();\n this.#locked.set(false);\n }\n #assertScreenOrientationAPI() {\n if (this.supported) return;\n throw Error(\n \"[vidstack] no orientation API\"\n );\n }\n #getScreenOrientation() {\n if (IS_SERVER) return \"portrait-primary\";\n if (this.supported) return window.screen.orientation.type;\n return window.innerWidth >= window.innerHeight ? \"landscape-primary\" : \"portrait-primary\";\n }\n}\n\nclass AudioProviderLoader {\n name = \"audio\";\n target;\n canPlay(src) {\n if (!isAudioSrc(src)) return false;\n return IS_SERVER || !isString(src.src) || src.type === \"?\" || canPlayAudioType(this.target, src.type);\n }\n mediaType() {\n return \"audio\";\n }\n async load(ctx) {\n if (IS_SERVER) {\n throw Error(\"[vidstack] can not load audio provider server-side\");\n }\n return new (await import('./vidstack-R_ot4AhB.js')).AudioProvider(this.target, ctx);\n }\n}\n\nclass VideoProviderLoader {\n name = \"video\";\n target;\n canPlay(src) {\n if (!isVideoSrc(src)) return false;\n return IS_SERVER || !isString(src.src) || src.type === \"?\" || canPlayVideoType(this.target, src.type);\n }\n mediaType() {\n return \"video\";\n }\n async load(ctx) {\n if (IS_SERVER) {\n throw Error(\"[vidstack] can not load video provider server-side\");\n }\n return new (await Promise.resolve().then(function () { return provider$1; })).VideoProvider(this.target, ctx);\n }\n}\n\nclass HLSProviderLoader extends VideoProviderLoader {\n static supported = isHLSSupported();\n name = \"hls\";\n canPlay(src) {\n return HLSProviderLoader.supported && isHLSSrc(src);\n }\n async load(context) {\n if (IS_SERVER) {\n throw Error(\"[vidstack] can not load hls provider server-side\");\n }\n return new (await import('./vidstack-BN7_0WI-.js')).HLSProvider(this.target, context);\n }\n}\n\nlet audioContext = null, gainNodes = [], elAudioSources = [];\nfunction getOrCreateAudioCtx() {\n return audioContext ??= new AudioContext();\n}\nfunction createGainNode() {\n const audioCtx = getOrCreateAudioCtx(), gainNode = audioCtx.createGain();\n gainNode.connect(audioCtx.destination);\n gainNodes.push(gainNode);\n return gainNode;\n}\nfunction createElementSource(el, gainNode) {\n const audioCtx = getOrCreateAudioCtx(), src = audioCtx.createMediaElementSource(el);\n if (gainNode) {\n src.connect(gainNode);\n }\n elAudioSources.push(src);\n return src;\n}\nfunction destroyGainNode(node) {\n const idx = gainNodes.indexOf(node);\n if (idx !== -1) {\n gainNodes.splice(idx, 1);\n node.disconnect();\n freeAudioCtxWhenAllResourcesFreed();\n }\n}\nfunction destroyElementSource(src) {\n const idx = elAudioSources.indexOf(src);\n if (idx !== -1) {\n elAudioSources.splice(idx, 1);\n src.disconnect();\n freeAudioCtxWhenAllResourcesFreed();\n }\n}\nfunction freeAudioCtxWhenAllResourcesFreed() {\n if (audioContext && gainNodes.length === 0 && elAudioSources.length === 0) {\n audioContext.close().then(() => {\n audioContext = null;\n });\n }\n}\n\nclass AudioGain {\n #media;\n #onChange;\n #gainNode = null;\n #srcAudioNode = null;\n get currentGain() {\n return this.#gainNode?.gain?.value ?? null;\n }\n get supported() {\n return true;\n }\n constructor(media, onChange) {\n this.#media = media;\n this.#onChange = onChange;\n }\n setGain(gain) {\n const currGain = this.currentGain;\n if (gain === this.currentGain) {\n return;\n }\n if (gain === 1 && currGain !== 1) {\n this.removeGain();\n return;\n }\n if (!this.#gainNode) {\n this.#gainNode = createGainNode();\n if (this.#srcAudioNode) {\n this.#srcAudioNode.connect(this.#gainNode);\n }\n }\n if (!this.#srcAudioNode) {\n this.#srcAudioNode = createElementSource(this.#media, this.#gainNode);\n }\n this.#gainNode.gain.value = gain;\n this.#onChange(gain);\n }\n removeGain() {\n if (!this.#gainNode) return;\n if (this.#srcAudioNode) {\n this.#srcAudioNode.connect(getOrCreateAudioCtx().destination);\n }\n this.#destroyGainNode();\n this.#onChange(null);\n }\n destroy() {\n this.#destroySrcNode();\n this.#destroyGainNode();\n }\n #destroySrcNode() {\n if (!this.#srcAudioNode) return;\n try {\n destroyElementSource(this.#srcAudioNode);\n } catch (e) {\n } finally {\n this.#srcAudioNode = null;\n }\n }\n #destroyGainNode() {\n if (!this.#gainNode) return;\n try {\n destroyGainNode(this.#gainNode);\n } catch (e) {\n } finally {\n this.#gainNode = null;\n }\n }\n}\n\nconst PAGE_EVENTS = [\"focus\", \"blur\", \"visibilitychange\", \"pageshow\", \"pagehide\"];\nclass PageVisibility {\n #state = signal(determinePageState());\n #visibility = signal(IS_SERVER ? \"visible\" : document.visibilityState);\n #safariBeforeUnloadTimeout;\n connect() {\n const events = new EventsController(window), handlePageEvent = this.#handlePageEvent.bind(this);\n for (const eventType of PAGE_EVENTS) {\n events.add(eventType, handlePageEvent);\n }\n if (IS_SAFARI) {\n events.add(\"beforeunload\", (event) => {\n this.#safariBeforeUnloadTimeout = setTimeout(() => {\n if (!(event.defaultPrevented || event.returnValue.length > 0)) {\n this.#state.set(\"hidden\");\n this.#visibility.set(\"hidden\");\n }\n }, 0);\n });\n }\n }\n /**\n * The current page state. Important to note we only account for a subset of page states, as\n * the rest aren't valuable to the player at the moment.\n *\n * - **active:** A page is in the active state if it is visible and has input focus.\n * - **passive:** A page is in the passive state if it is visible and does not have input focus.\n * - **hidden:** A page is in the hidden state if it is not visible.\n *\n * @see https://developers.google.com/web/updates/2018/07/page-lifecycle-api#states\n */\n get pageState() {\n return this.#state();\n }\n /**\n * The current document visibility state.\n *\n * - **visible:** The page content may be at least partially visible. In practice, this means that\n * the page is the foreground tab of a non-minimized window.\n * - **hidden:** The page content is not visible to the user. In practice this means that the\n * document is either a background tab or part of a minimized window, or the OS screen lock is\n * active.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilityState\n */\n get visibility() {\n return this.#visibility();\n }\n #handlePageEvent(event) {\n if (IS_SAFARI) window.clearTimeout(this.#safariBeforeUnloadTimeout);\n if (event.type !== \"blur\" || this.#state() === \"active\") {\n this.#state.set(determinePageState(event));\n this.#visibility.set(document.visibilityState == \"hidden\" ? \"hidden\" : \"visible\");\n }\n }\n}\nfunction determinePageState(event) {\n if (IS_SERVER) return \"hidden\";\n if (event?.type === \"blur\" || document.visibilityState === \"hidden\") return \"hidden\";\n if (document.hasFocus()) return \"active\";\n return \"passive\";\n}\n\nclass RAFLoop {\n #id;\n #callback;\n constructor(callback) {\n this.#callback = callback;\n }\n start() {\n if (!isUndefined(this.#id)) return;\n this.#loop();\n }\n stop() {\n if (isNumber(this.#id)) window.cancelAnimationFrame(this.#id);\n this.#id = void 0;\n }\n #loop() {\n this.#id = window.requestAnimationFrame(() => {\n if (isUndefined(this.#id)) return;\n this.#callback();\n this.#loop();\n });\n }\n}\n\nclass HTMLMediaEvents {\n #provider;\n #ctx;\n #waiting = false;\n #attachedLoadStart = false;\n #attachedCanPlay = false;\n #timeRAF = new RAFLoop(this.#onAnimationFrame.bind(this));\n #pageVisibility = new PageVisibility();\n #events;\n get #media() {\n return this.#provider.media;\n }\n constructor(provider, ctx) {\n this.#provider = provider;\n this.#ctx = ctx;\n this.#events = new EventsController(provider.media);\n this.#attachInitialListeners();\n this.#pageVisibility.connect();\n effect(this.#attachTimeUpdate.bind(this));\n onDispose(this.#onDispose.bind(this));\n }\n #onDispose() {\n this.#attachedLoadStart = false;\n this.#attachedCanPlay = false;\n this.#timeRAF.stop();\n this.#events.abort();\n this.#devHandlers?.clear();\n }\n /**\n * The `timeupdate` event fires surprisingly infrequently during playback, meaning your progress\n * bar (or whatever else is synced to the currentTime) moves in a choppy fashion. This helps\n * resolve that by retrieving time updates in a request animation frame loop.\n */\n #lastSeenTime = 0;\n #seekedTo = -1;\n #onAnimationFrame() {\n const newTime = this.#media.currentTime;\n const didStutter = IS_SAFARI && newTime - this.#seekedTo < 0.35;\n if (!didStutter && this.#lastSeenTime !== newTime) {\n this.#updateCurrentTime(newTime);\n this.#lastSeenTime = newTime;\n }\n }\n #attachInitialListeners() {\n this.#attachEventListener(\"loadstart\", this.#onLoadStart);\n this.#attachEventListener(\"abort\", this.#onAbort);\n this.#attachEventListener(\"emptied\", this.#onEmptied);\n this.#attachEventListener(\"error\", this.#onError);\n this.#attachEventListener(\"volumechange\", this.#onVolumeChange);\n }\n #attachLoadStartListeners() {\n if (this.#attachedLoadStart) return;\n this.#attachEventListener(\"loadeddata\", this.#onLoadedData);\n this.#attachEventListener(\"loadedmetadata\", this.#onLoadedMetadata);\n this.#attachEventListener(\"canplay\", this.#onCanPlay);\n this.#attachEventListener(\"canplaythrough\", this.#onCanPlayThrough);\n this.#attachEventListener(\"durationchange\", this.#onDurationChange);\n this.#attachEventListener(\"play\", this.#onPlay);\n this.#attachEventListener(\"progress\", this.#onProgress);\n this.#attachEventListener(\"stalled\", this.#onStalled);\n this.#attachEventListener(\"suspend\", this.#onSuspend);\n this.#attachEventListener(\"ratechange\", this.#onRateChange);\n this.#attachedLoadStart = true;\n }\n #attachCanPlayListeners() {\n if (this.#attachedCanPlay) return;\n this.#attachEventListener(\"pause\", this.#onPause);\n this.#attachEventListener(\"playing\", this.#onPlaying);\n this.#attachEventListener(\"seeked\", this.#onSeeked);\n this.#attachEventListener(\"seeking\", this.#onSeeking);\n this.#attachEventListener(\"ended\", this.#onEnded);\n this.#attachEventListener(\"waiting\", this.#onWaiting);\n this.#attachedCanPlay = true;\n }\n #devHandlers = void 0;\n #handleDevEvent = void 0;\n #attachEventListener(eventType, handler) {\n this.#events.add(eventType, handler.bind(this));\n }\n #onDevEvent(event2) {\n return;\n }\n #updateCurrentTime(time, trigger) {\n const newTime = Math.min(time, this.#ctx.$state.seekableEnd());\n this.#ctx.notify(\"time-change\", newTime, trigger);\n }\n #onLoadStart(event2) {\n if (this.#media.networkState === 3) {\n this.#onAbort(event2);\n return;\n }\n this.#attachLoadStartListeners();\n this.#ctx.notify(\"load-start\", void 0, event2);\n }\n #onAbort(event2) {\n this.#ctx.notify(\"abort\", void 0, event2);\n }\n #onEmptied() {\n this.#ctx.notify(\"emptied\", void 0, event);\n }\n #onLoadedData(event2) {\n this.#ctx.notify(\"loaded-data\", void 0, event2);\n }\n #onLoadedMetadata(event2) {\n this.#lastSeenTime = 0;\n this.#seekedTo = -1;\n this.#attachCanPlayListeners();\n this.#ctx.notify(\"loaded-metadata\", void 0, event2);\n if (IS_IOS || IS_SAFARI && isHLSSrc(this.#ctx.$state.source())) {\n this.#ctx.delegate.ready(this.#getCanPlayDetail(), event2);\n }\n }\n #getCanPlayDetail() {\n return {\n provider: peek(this.#ctx.$provider),\n duration: this.#media.duration,\n buffered: this.#media.buffered,\n seekable: this.#media.seekable\n };\n }\n #onPlay(event2) {\n if (!this.#ctx.$state.canPlay) return;\n this.#ctx.notify(\"play\", void 0, event2);\n }\n #onPause(event2) {\n if (this.#media.readyState === 1 && !this.#waiting) return;\n this.#waiting = false;\n this.#timeRAF.stop();\n this.#ctx.notify(\"pause\", void 0, event2);\n }\n #onCanPlay(event2) {\n this.#ctx.delegate.ready(this.#getCanPlayDetail(), event2);\n }\n #onCanPlayThrough(event2) {\n if (this.#ctx.$state.started()) return;\n this.#ctx.notify(\"can-play-through\", this.#getCanPlayDetail(), event2);\n }\n #onPlaying(event2) {\n if (this.#media.paused) return;\n this.#waiting = false;\n this.#ctx.notify(\"playing\", void 0, event2);\n this.#timeRAF.start();\n }\n #onStalled(event2) {\n this.#ctx.notify(\"stalled\", void 0, event2);\n if (this.#media.readyState < 3) {\n this.#waiting = true;\n this.#ctx.notify(\"waiting\", void 0, event2);\n }\n }\n #onWaiting(event2) {\n if (this.#media.readyState < 3) {\n this.#waiting = true;\n this.#ctx.notify(\"waiting\", void 0, event2);\n }\n }\n #onEnded(event2) {\n this.#timeRAF.stop();\n this.#updateCurrentTime(this.#media.duration, event2);\n this.#ctx.notify(\"end\", void 0, event2);\n if (this.#ctx.$state.loop()) {\n const hasCustomControls = isNil(this.#media.controls);\n if (hasCustomControls) this.#media.controls = false;\n }\n }\n #attachTimeUpdate() {\n const isPaused = this.#ctx.$state.paused(), isPageHidden = this.#pageVisibility.visibility === \"hidden\", shouldListenToTimeUpdates = isPaused || isPageHidden;\n if (shouldListenToTimeUpdates) {\n listenEvent(this.#media, \"timeupdate\", this.#onTimeUpdate.bind(this));\n }\n }\n #onTimeUpdate(event2) {\n this.#updateCurrentTime(this.#media.currentTime, event2);\n }\n #onDurationChange(event2) {\n if (this.#ctx.$state.ended()) {\n this.#updateCurrentTime(this.#media.duration, event2);\n }\n this.#ctx.notify(\"duration-change\", this.#media.duration, event2);\n }\n #onVolumeChange(event2) {\n const detail = {\n volume: this.#media.volume,\n muted: this.#media.muted\n };\n this.#ctx.notify(\"volume-change\", detail, event2);\n }\n #onSeeked(event2) {\n this.#seekedTo = this.#media.currentTime;\n this.#updateCurrentTime(this.#media.currentTime, event2);\n this.#ctx.notify(\"seeked\", this.#media.currentTime, event2);\n if (Math.trunc(this.#media.currentTime) === Math.trunc(this.#media.duration) && getNumberOfDecimalPlaces(this.#media.duration) > getNumberOfDecimalPlaces(this.#media.currentTime)) {\n this.#updateCurrentTime(this.#media.duration, event2);\n if (!this.#media.ended) {\n this.#ctx.player.dispatch(\n new DOMEvent(\"media-play-request\", {\n trigger: event2\n })\n );\n }\n }\n }\n #onSeeking(event2) {\n this.#ctx.notify(\"seeking\", this.#media.currentTime, event2);\n }\n #onProgress(event2) {\n const detail = {\n buffered: this.#media.buffered,\n seekable: this.#media.seekable\n };\n this.#ctx.notify(\"progress\", detail, event2);\n }\n #onSuspend(event2) {\n this.#ctx.notify(\"suspend\", void 0, event2);\n }\n #onRateChange(event2) {\n this.#ctx.notify(\"rate-change\", this.#media.playbackRate, event2);\n }\n #onError(event2) {\n const error = this.#media.error;\n if (!error) return;\n const detail = {\n message: error.message,\n code: error.code,\n mediaError: error\n };\n this.#ctx.notify(\"error\", detail, event2);\n }\n}\n\nclass NativeAudioTracks {\n #provider;\n #ctx;\n get #nativeTracks() {\n return this.#provider.media.audioTracks;\n }\n constructor(provider, ctx) {\n this.#provider = provider;\n this.#ctx = ctx;\n this.#nativeTracks.onaddtrack = this.#onAddNativeTrack.bind(this);\n this.#nativeTracks.onremovetrack = this.#onRemoveNativeTrack.bind(this);\n this.#nativeTracks.onchange = this.#onChangeNativeTrack.bind(this);\n listenEvent(this.#ctx.audioTracks, \"change\", this.#onChangeTrack.bind(this));\n }\n #onAddNativeTrack(event) {\n const nativeTrack = event.track;\n if (nativeTrack.label === \"\") return;\n const id = nativeTrack.id.toString() || `native-audio-${this.#ctx.audioTracks.length}`, audioTrack = {\n id,\n label: nativeTrack.label,\n language: nativeTrack.language,\n kind: nativeTrack.kind,\n selected: false\n };\n this.#ctx.audioTracks[ListSymbol.add](audioTrack, event);\n if (nativeTrack.enabled) audioTrack.selected = true;\n }\n #onRemoveNativeTrack(event) {\n const track = this.#ctx.audioTracks.getById(event.track.id);\n if (track) this.#ctx.audioTracks[ListSymbol.remove](track, event);\n }\n #onChangeNativeTrack(event) {\n let enabledTrack = this.#getEnabledNativeTrack();\n if (!enabledTrack) return;\n const track = this.#ctx.audioTracks.getById(enabledTrack.id);\n if (track) this.#ctx.audioTracks[ListSymbol.select](track, true, event);\n }\n #getEnabledNativeTrack() {\n return Array.from(this.#nativeTracks).find((track) => track.enabled);\n }\n #onChangeTrack(event) {\n const { current } = event.detail;\n if (!current) return;\n const track = this.#nativeTracks.getTrackById(current.id);\n if (track) {\n const prev = this.#getEnabledNativeTrack();\n if (prev) prev.enabled = false;\n track.enabled = true;\n }\n }\n}\n\nclass HTMLMediaProvider {\n constructor(media, ctx) {\n this.media = media;\n this.ctx = ctx;\n this.audioGain = new AudioGain(media, (gain) => {\n this.ctx.notify(\"audio-gain-change\", gain);\n });\n }\n scope = createScope();\n currentSrc = null;\n audioGain;\n setup() {\n new HTMLMediaEvents(this, this.ctx);\n if (\"audioTracks\" in this.media) new NativeAudioTracks(this, this.ctx);\n onDispose(() => {\n this.audioGain.destroy();\n this.media.srcObject = null;\n this.media.removeAttribute(\"src\");\n for (const source of this.media.querySelectorAll(\"source\")) source.remove();\n this.media.load();\n });\n }\n get type() {\n return \"\";\n }\n setPlaybackRate(rate) {\n this.media.playbackRate = rate;\n }\n async play() {\n return this.media.play();\n }\n async pause() {\n return this.media.pause();\n }\n setMuted(muted) {\n this.media.muted = muted;\n }\n setVolume(volume) {\n this.media.volume = volume;\n }\n setCurrentTime(time) {\n this.media.currentTime = time;\n }\n setPlaysInline(inline) {\n setAttribute(this.media, \"playsinline\", inline);\n }\n async loadSource({ src, type }, preload) {\n this.media.preload = preload || \"\";\n if (isMediaStream(src)) {\n this.removeSource();\n this.media.srcObject = src;\n } else {\n this.media.srcObject = null;\n if (isString(src)) {\n if (type !== \"?\") {\n this.appendSource({ src, type });\n } else {\n this.removeSource();\n this.media.src = this.#appendMediaFragment(src);\n }\n } else {\n this.removeSource();\n this.media.src = window.URL.createObjectURL(src);\n }\n }\n this.media.load();\n this.currentSrc = { src, type };\n }\n /**\n * Append source so it works when requesting AirPlay since hls.js will remove it.\n */\n appendSource(src, defaultType) {\n const prevSource = this.media.querySelector(\"source[data-vds]\"), source = prevSource ?? document.createElement(\"source\");\n setAttribute(source, \"src\", this.#appendMediaFragment(src.src));\n setAttribute(source, \"type\", src.type !== \"?\" ? src.type : defaultType);\n setAttribute(source, \"data-vds\", \"\");\n if (!prevSource) this.media.append(source);\n }\n removeSource() {\n this.media.querySelector(\"source[data-vds]\")?.remove();\n }\n #appendMediaFragment(src) {\n const { clipStartTime, clipEndTime } = this.ctx.$state, startTime = clipStartTime(), endTime = clipEndTime();\n if (startTime > 0 && endTime > 0) {\n return `${src}#t=${startTime},${endTime}`;\n } else if (startTime > 0) {\n return `${src}#t=${startTime}`;\n } else if (endTime > 0) {\n return `${src}#t=0,${endTime}`;\n }\n return src;\n }\n}\n\nclass HTMLRemotePlaybackAdapter {\n #media;\n #ctx;\n #state;\n #supported = signal(false);\n get supported() {\n return this.#supported();\n }\n constructor(media, ctx) {\n this.#media = media;\n this.#ctx = ctx;\n this.#setup();\n }\n #setup() {\n if (IS_SERVER || !this.#media?.remote || !this.canPrompt) return;\n this.#media.remote.watchAvailability((available) => {\n this.#supported.set(available);\n }).catch(() => {\n this.#supported.set(false);\n });\n effect(this.#watchSupported.bind(this));\n }\n #watchSupported() {\n if (!this.#supported()) return;\n const events = [\"connecting\", \"connect\", \"disconnect\"], onStateChange = this.#onStateChange.bind(this);\n onStateChange();\n listenEvent(this.#media, \"playing\", onStateChange);\n const remoteEvents = new EventsController(this.#media.remote);\n for (const type of events) {\n remoteEvents.add(type, onStateChange);\n }\n }\n async prompt() {\n if (!this.supported) throw Error(\"Not supported on this platform.\");\n if (this.type === \"airplay\" && this.#media.webkitShowPlaybackTargetPicker) {\n return this.#media.webkitShowPlaybackTargetPicker();\n }\n return this.#media.remote.prompt();\n }\n #onStateChange(event) {\n const state = this.#media.remote.state;\n if (state === this.#state) return;\n const detail = { type: this.type, state };\n this.#ctx.notify(\"remote-playback-change\", detail, event);\n this.#state = state;\n }\n}\nclass HTMLAirPlayAdapter extends HTMLRemotePlaybackAdapter {\n type = \"airplay\";\n get canPrompt() {\n return \"WebKitPlaybackTargetAvailabilityEvent\" in window;\n }\n}\n\nclass NativeHLSTextTracks {\n #video;\n #ctx;\n constructor(video, ctx) {\n this.#video = video;\n this.#ctx = ctx;\n video.textTracks.onaddtrack = this.#onAddTrack.bind(this);\n onDispose(this.#onDispose.bind(this));\n }\n #onAddTrack(event) {\n const nativeTrack = event.track;\n if (!nativeTrack || findTextTrackElement(this.#video, nativeTrack)) return;\n const track = new TextTrack({\n id: nativeTrack.id,\n kind: nativeTrack.kind,\n label: nativeTrack.label ?? \"\",\n language: nativeTrack.language,\n type: \"vtt\"\n });\n track[TextTrackSymbol.native] = { track: nativeTrack };\n track[TextTrackSymbol.readyState] = 2;\n track[TextTrackSymbol.nativeHLS] = true;\n let lastIndex = 0;\n const onCueChange = (event2) => {\n if (!nativeTrack.cues) return;\n for (let i = lastIndex; i < nativeTrack.cues.length; i++) {\n track.addCue(nativeTrack.cues[i], event2);\n lastIndex++;\n }\n };\n onCueChange(event);\n nativeTrack.oncuechange = onCueChange;\n this.#ctx.textTracks.add(track, event);\n track.setMode(nativeTrack.mode, event);\n }\n #onDispose() {\n this.#video.textTracks.onaddtrack = null;\n for (const track of this.#ctx.textTracks) {\n const nativeTrack = track[TextTrackSymbol.native]?.track;\n if (nativeTrack?.oncuechange) nativeTrack.oncuechange = null;\n }\n }\n}\nfunction findTextTrackElement(video, track) {\n return Array.from(video.children).find((el) => el.track === track);\n}\n\nclass VideoPictureInPicture {\n #video;\n #media;\n constructor(video, media) {\n this.#video = video;\n this.#media = media;\n new EventsController(video).add(\"enterpictureinpicture\", this.#onEnter.bind(this)).add(\"leavepictureinpicture\", this.#onExit.bind(this));\n }\n get active() {\n return document.pictureInPictureElement === this.#video;\n }\n get supported() {\n return canUsePictureInPicture(this.#video);\n }\n async enter() {\n return this.#video.requestPictureInPicture();\n }\n exit() {\n return document.exitPictureInPicture();\n }\n #onEnter(event) {\n this.#onChange(true, event);\n }\n #onExit(event) {\n this.#onChange(false, event);\n }\n #onChange = (active, event) => {\n this.#media.notify(\"picture-in-picture-change\", active, event);\n };\n}\n\nclass VideoPresentation {\n #video;\n #media;\n #mode = \"inline\";\n get mode() {\n return this.#mode;\n }\n constructor(video, media) {\n this.#video = video;\n this.#media = media;\n listenEvent(video, \"webkitpresentationmodechanged\", this.#onModeChange.bind(this));\n }\n get supported() {\n return canUseVideoPresentation(this.#video);\n }\n async setPresentationMode(mode) {\n if (this.#mode === mode) return;\n this.#video.webkitSetPresentationMode(mode);\n }\n #onModeChange(event) {\n const prevMode = this.#mode;\n this.#mode = this.#video.webkitPresentationMode;\n this.#media.player?.dispatch(\n new DOMEvent(\"video-presentation-change\", {\n detail: this.#mode,\n trigger: event\n })\n );\n [\"fullscreen\", \"picture-in-picture\"].forEach((type) => {\n if (this.#mode === type || prevMode === type) {\n this.#media.notify(`${type}-change`, this.#mode === type, event);\n }\n });\n }\n}\nclass FullscreenPresentationAdapter {\n #presentation;\n get active() {\n return this.#presentation.mode === \"fullscreen\";\n }\n get supported() {\n return this.#presentation.supported;\n }\n constructor(presentation) {\n this.#presentation = presentation;\n }\n async enter() {\n this.#presentation.setPresentationMode(\"fullscreen\");\n }\n async exit() {\n this.#presentation.setPresentationMode(\"inline\");\n }\n}\nclass PIPPresentationAdapter {\n #presentation;\n get active() {\n return this.#presentation.mode === \"picture-in-picture\";\n }\n get supported() {\n return this.#presentation.supported;\n }\n constructor(presentation) {\n this.#presentation = presentation;\n }\n async enter() {\n this.#presentation.setPresentationMode(\"picture-in-picture\");\n }\n async exit() {\n this.#presentation.setPresentationMode(\"inline\");\n }\n}\n\nclass VideoProvider extends HTMLMediaProvider {\n $$PROVIDER_TYPE = \"VIDEO\";\n get type() {\n return \"video\";\n }\n airPlay;\n fullscreen;\n pictureInPicture;\n constructor(video, ctx) {\n super(video, ctx);\n scoped(() => {\n this.airPlay = new HTMLAirPlayAdapter(video, ctx);\n if (canUseVideoPresentation(video)) {\n const presentation = new VideoPresentation(video, ctx);\n this.fullscreen = new FullscreenPresentationAdapter(presentation);\n this.pictureInPicture = new PIPPresentationAdapter(presentation);\n } else if (canUsePictureInPicture(video)) {\n this.pictureInPicture = new VideoPictureInPicture(video, ctx);\n }\n }, this.scope);\n }\n setup() {\n super.setup();\n if (canPlayHLSNatively(this.video)) {\n new NativeHLSTextTracks(this.video, this.ctx);\n }\n this.ctx.textRenderers.attachVideo(this.video);\n onDispose(() => {\n this.ctx.textRenderers.attachVideo(null);\n });\n if (this.type === \"video\") this.ctx.notify(\"provider-setup\", this);\n }\n /**\n * The native HTML `<video>` element.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement}\n */\n get video() {\n return this.media;\n }\n}\n\nvar provider$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n VideoProvider: VideoProvider\n});\n\nfunction getLangName(langCode) {\n try {\n const displayNames = new Intl.DisplayNames(navigator.languages, { type: \"language\" });\n const languageName = displayNames.of(langCode);\n return languageName ?? null;\n } catch (err) {\n return null;\n }\n}\n\nconst toDOMEventType = (type) => `dash-${camelToKebabCase(type)}`;\nclass DASHController {\n #video;\n #ctx;\n #instance = null;\n #callbacks = /* @__PURE__ */ new Set();\n #stopLiveSync = null;\n config = {};\n get instance() {\n return this.#instance;\n }\n constructor(video, ctx) {\n this.#video = video;\n this.#ctx = ctx;\n }\n setup(ctor) {\n this.#instance = ctor().create();\n const dispatcher = this.#dispatchDASHEvent.bind(this);\n for (const event of Object.values(ctor.events)) this.#instance.on(event, dispatcher);\n this.#instance.on(ctor.events.ERROR, this.#onError.bind(this));\n for (const callback of this.#callbacks) callback(this.#instance);\n this.#ctx.player.dispatch(\"dash-instance\", {\n detail: this.#instance\n });\n this.#instance.initialize(this.#video, void 0, false);\n this.#instance.updateSettings({\n streaming: {\n text: {\n // Disabling text rendering by dash.\n defaultEnabled: false,\n dispatchForManualRendering: true\n },\n buffer: {\n /// Enables buffer replacement when switching bitrates for faster switching.\n fastSwitchEnabled: true\n }\n },\n ...this.config\n });\n this.#instance.on(ctor.events.FRAGMENT_LOADING_STARTED, this.#onFragmentLoadStart.bind(this));\n this.#instance.on(\n ctor.events.FRAGMENT_LOADING_COMPLETED,\n this.#onFragmentLoadComplete.bind(this)\n );\n this.#instance.on(ctor.events.MANIFEST_LOADED, this.#onManifestLoaded.bind(this));\n this.#instance.on(ctor.events.QUALITY_CHANGE_RENDERED, this.#onQualityChange.bind(this));\n this.#instance.on(ctor.events.TEXT_TRACKS_ADDED, this.#onTextTracksAdded.bind(this));\n this.#instance.on(ctor.events.TRACK_CHANGE_RENDERED, this.#onTrackChange.bind(this));\n this.#ctx.qualities[QualitySymbol.enableAuto] = this.#enableAutoQuality.bind(this);\n listenEvent(this.#ctx.qualities, \"change\", this.#onUserQualityChange.bind(this));\n listenEvent(this.#ctx.audioTracks, \"change\", this.#onUserAudioChange.bind(this));\n this.#stopLiveSync = effect(this.#liveSync.bind(this));\n }\n #createDOMEvent(event) {\n return new DOMEvent(toDOMEventType(event.type), { detail: event });\n }\n #liveSync() {\n if (!this.#ctx.$state.live()) return;\n const raf = new RAFLoop(this.#liveSyncPosition.bind(this));\n raf.start();\n return raf.stop.bind(raf);\n }\n #liveSyncPosition() {\n if (!this.#instance) return;\n const position = this.#instance.duration() - this.#instance.time();\n this.#ctx.$state.liveSyncPosition.set(!isNaN(position) ? position : Infinity);\n }\n #dispatchDASHEvent(event) {\n this.#ctx.player?.dispatch(this.#createDOMEvent(event));\n }\n #currentTrack = null;\n #cueTracker = {};\n #onTextFragmentLoaded(event) {\n const native = this.#currentTrack?.[TextTrackSymbol.native], cues = (native?.track).cues;\n if (!native || !cues) return;\n const id = this.#currentTrack.id, startIndex = this.#cueTracker[id] ?? 0, trigger = this.#createDOMEvent(event);\n for (let i = startIndex; i < cues.length; i++) {\n const cue = cues[i];\n if (!cue.positionAlign) cue.positionAlign = \"auto\";\n this.#currentTrack.addCue(cue, trigger);\n }\n this.#cueTracker[id] = cues.length;\n }\n #onTextTracksAdded(event) {\n if (!this.#instance) return;\n const data = event.tracks, nativeTextTracks = [...this.#video.textTracks].filter((track) => \"manualMode\" in track), trigger = this.#createDOMEvent(event);\n for (let i = 0; i < nativeTextTracks.length; i++) {\n const textTrackInfo = data[i], nativeTextTrack = nativeTextTracks[i];\n const id = `dash-${textTrackInfo.kind}-${i}`, track = new TextTrack({\n id,\n label: textTrackInfo?.label ?? textTrackInfo.labels.find((t) => t.text)?.text ?? (textTrackInfo?.lang && getLangName(textTrackInfo.lang)) ?? textTrackInfo?.lang ?? void 0,\n language: textTrackInfo.lang ?? void 0,\n kind: textTrackInfo.kind,\n default: textTrackInfo.defaultTrack\n });\n track[TextTrackSymbol.native] = {\n managed: true,\n track: nativeTextTrack\n };\n track[TextTrackSymbol.readyState] = 2;\n track[TextTrackSymbol.onModeChange] = () => {\n if (!this.#instance) return;\n if (track.mode === \"showing\") {\n this.#instance.setTextTrack(i);\n this.#currentTrack = track;\n } else {\n this.#instance.setTextTrack(-1);\n this.#currentTrack = null;\n }\n };\n this.#ctx.textTracks.add(track, trigger);\n }\n }\n #onTrackChange(event) {\n const { mediaType, newMediaInfo } = event;\n if (mediaType === \"audio\") {\n const track = this.#ctx.audioTracks.getById(`dash-audio-${newMediaInfo.index}`);\n if (track) {\n const trigger = this.#createDOMEvent(event);\n this.#ctx.audioTracks[ListSymbol.select](track, true, trigger);\n }\n }\n }\n #onQualityChange(event) {\n if (event.mediaType !== \"video\") return;\n const quality = this.#ctx.qualities[event.newQuality];\n if (quality) {\n const trigger = this.#createDOMEvent(event);\n this.#ctx.qualities[ListSymbol.select](quality, true, trigger);\n }\n }\n #onManifestLoaded(event) {\n if (this.#ctx.$state.canPlay() || !this.#instance) return;\n const { type, mediaPresentationDuration } = event.data, trigger = this.#createDOMEvent(event);\n this.#ctx.notify(\"stream-type-change\", type !== \"static\" ? \"live\" : \"on-demand\", trigger);\n this.#ctx.notify(\"duration-change\", mediaPresentationDuration, trigger);\n this.#ctx.qualities[QualitySymbol.setAuto](true, trigger);\n const media = this.#instance.getVideoElement();\n const videoQualities = this.#instance.getTracksForTypeFromManifest(\n \"video\",\n event.data\n );\n const supportedVideoMimeType = [...new Set(videoQualities.map((e) => e.mimeType))].find(\n (type2) => type2 && canPlayVideoType(media, type2)\n );\n const videoQuality = videoQualities.filter(\n (track) => supportedVideoMimeType === track.mimeType\n )[0];\n let audioTracks = this.#instance.getTracksForTypeFromManifest(\n \"audio\",\n event.data\n );\n const supportedAudioMimeType = [...new Set(audioTracks.map((e) => e.mimeType))].find(\n (type2) => type2 && canPlayAudioType(media, type2)\n );\n audioTracks = audioTracks.filter((track) => supportedAudioMimeType === track.mimeType);\n videoQuality.bitrateList.forEach((bitrate, index) => {\n const quality = {\n id: bitrate.id?.toString() ?? `dash-bitrate-${index}`,\n width: bitrate.width ?? 0,\n height: bitrate.height ?? 0,\n bitrate: bitrate.bandwidth ?? 0,\n codec: videoQuality.codec,\n index\n };\n this.#ctx.qualities[ListSymbol.add](quality, trigger);\n });\n if (isNumber(videoQuality.index)) {\n const quality = this.#ctx.qualities[videoQuality.index];\n if (quality) this.#ctx.qualities[ListSymbol.select](quality, true, trigger);\n }\n audioTracks.forEach((audioTrack, index) => {\n const matchingLabel = audioTrack.labels.find((label2) => {\n return navigator.languages.some((language) => {\n return label2.lang && language.toLowerCase().startsWith(label2.lang.toLowerCase());\n });\n });\n const label = matchingLabel || audioTrack.labels[0];\n const localTrack = {\n id: `dash-audio-${audioTrack?.index}`,\n label: label?.text ?? (audioTrack.lang && getLangName(audioTrack.lang)) ?? audioTrack.lang ?? \"\",\n language: audioTrack.lang ?? \"\",\n kind: \"main\",\n mimeType: audioTrack.mimeType,\n codec: audioTrack.codec,\n index\n };\n this.#ctx.audioTracks[ListSymbol.add](localTrack, trigger);\n });\n media.dispatchEvent(new DOMEvent(\"canplay\", { trigger }));\n }\n #onError(event) {\n const { type: eventType, error: data } = event;\n switch (data.code) {\n case 27:\n this.#onNetworkError(data);\n break;\n default:\n this.#onFatalError(data);\n break;\n }\n }\n #onFragmentLoadStart() {\n if (this.#retryLoadingTimer >= 0) this.#clearRetryTimer();\n }\n #onFragmentLoadComplete(event) {\n const mediaType = event.mediaType;\n if (mediaType === \"text\") {\n requestAnimationFrame(this.#onTextFragmentLoaded.bind(this, event));\n }\n }\n #retryLoadingTimer = -1;\n #onNetworkError(error) {\n this.#clearRetryTimer();\n this.#instance?.play();\n this.#retryLoadingTimer = window.setTimeout(() => {\n this.#retryLoadingTimer = -1;\n this.#onFatalError(error);\n }, 5e3);\n }\n #clearRetryTimer() {\n clearTimeout(this.#retryLoadingTimer);\n this.#retryLoadingTimer = -1;\n }\n #onFatalError(error) {\n this.#ctx.notify(\"error\", {\n message: error.message ?? \"\",\n code: 1,\n error\n });\n }\n #enableAutoQuality() {\n this.#switchAutoBitrate(\"video\", true);\n const { qualities } = this.#ctx;\n this.#instance?.setQualityFor(\"video\", qualities.selectedIndex, true);\n }\n #switchAutoBitrate(type, auto) {\n this.#instance?.updateSettings({\n streaming: { abr: { autoSwitchBitrate: { [type]: auto } } }\n });\n }\n #onUserQualityChange() {\n const { qualities } = this.#ctx;\n if (!this.#instance || qualities.auto || !qualities.selected) return;\n this.#switchAutoBitrate(\"video\", false);\n this.#instance.setQualityFor(\"video\", qualities.selectedIndex, qualities.switch === \"current\");\n if (IS_CHROME) {\n this.#video.currentTime = this.#video.currentTime;\n }\n }\n #onUserAudioChange() {\n if (!this.#instance) return;\n const { audioTracks } = this.#ctx, selectedTrack = this.#instance.getTracksFor(\"audio\").find(\n (track) => audioTracks.selected && audioTracks.selected.id === `dash-audio-${track.index}`\n );\n if (selectedTrack) this.#instance.setCurrentTrack(selectedTrack);\n }\n #reset() {\n this.#clearRetryTimer();\n this.#currentTrack = null;\n this.#cueTracker = {};\n }\n onInstance(callback) {\n this.#callbacks.add(callback);\n return () => this.#callbacks.delete(callback);\n }\n loadSource(src) {\n this.#reset();\n if (!isString(src.src)) return;\n this.#instance?.attachSource(src.src);\n }\n destroy() {\n this.#reset();\n this.#instance?.destroy();\n this.#instance = null;\n this.#stopLiveSync?.();\n this.#stopLiveSync = null;\n }\n}\n\nfunction coerceToError(error) {\n return error instanceof Error ? error : Error(typeof error === \"string\" ? error : JSON.stringify(error));\n}\nfunction assert(condition, message) {\n if (!condition) {\n throw Error(\"Assertion failed.\");\n }\n}\n\nclass DASHLibLoader {\n #lib;\n #ctx;\n #callback;\n constructor(lib, ctx, callback) {\n this.#lib = lib;\n this.#ctx = ctx;\n this.#callback = callback;\n this.#startLoading();\n }\n async #startLoading() {\n const callbacks = {\n onLoadStart: this.#onLoadStart.bind(this),\n onLoaded: this.#onLoaded.bind(this),\n onLoadError: this.#onLoadError.bind(this)\n };\n let ctor = await loadDASHScript(this.#lib, callbacks);\n if (isUndefined(ctor) && !isString(this.#lib)) ctor = await importDASH(this.#lib, callbacks);\n if (!ctor) return null;\n if (!window.dashjs.supportsMediaSource()) {\n const message = \"[vidstack] `dash.js` is not supported in this environment\";\n this.#ctx.player.dispatch(new DOMEvent(\"dash-unsupported\"));\n this.#ctx.notify(\"error\", { message, code: 4 });\n return null;\n }\n return ctor;\n }\n #onLoadStart() {\n this.#ctx.player.dispatch(new DOMEvent(\"dash-lib-load-start\"));\n }\n #onLoaded(ctor) {\n this.#ctx.player.dispatch(\n new DOMEvent(\"dash-lib-loaded\", {\n detail: ctor\n })\n );\n this.#callback(ctor);\n }\n #onLoadError(e) {\n const error = coerceToError(e);\n this.#ctx.player.dispatch(\n new DOMEvent(\"dash-lib-load-error\", {\n detail: error\n })\n );\n this.#ctx.notify(\"error\", {\n message: error.message,\n code: 4,\n error\n });\n }\n}\nasync function importDASH(loader, callbacks = {}) {\n if (isUndefined(loader)) return void 0;\n callbacks.onLoadStart?.();\n if (isDASHConstructor(loader)) {\n callbacks.onLoaded?.(loader);\n return loader;\n }\n if (isDASHNamespace(loader)) {\n const ctor = loader.MediaPlayer;\n callbacks.onLoaded?.(ctor);\n return ctor;\n }\n try {\n const ctor = (await loader())?.default;\n if (isDASHNamespace(ctor)) {\n callbacks.onLoaded?.(ctor.MediaPlayer);\n return ctor.MediaPlayer;\n }\n if (ctor) {\n callbacks.onLoaded?.(ctor);\n } else {\n throw Error(\n false ? \"[vidstack] failed importing `dash.js`. Dynamic import returned invalid object.\" : \"\"\n );\n }\n return ctor;\n } catch (err) {\n callbacks.onLoadError?.(err);\n }\n return void 0;\n}\nasync function loadDASHScript(src, callbacks = {}) {\n if (!isString(src)) return void 0;\n callbacks.onLoadStart?.();\n try {\n await loadScript(src);\n if (!isFunction(window.dashjs.MediaPlayer)) {\n throw Error(\n false ? \"[vidstack] failed loading `dash.js`. Could not find a valid `Dash` constructor on window\" : \"\"\n );\n }\n const ctor = window.dashjs.MediaPlayer;\n callbacks.onLoaded?.(ctor);\n return ctor;\n } catch (err) {\n callbacks.onLoadError?.(err);\n }\n return void 0;\n}\nfunction isDASHConstructor(value) {\n return value && value.prototype && value.prototype !== Function;\n}\nfunction isDASHNamespace(value) {\n return value && \"MediaPlayer\" in value;\n}\n\nconst JS_DELIVR_CDN = \"https://cdn.jsdelivr.net\";\nclass DASHProvider extends VideoProvider {\n $$PROVIDER_TYPE = \"DASH\";\n #ctor = null;\n #controller = new DASHController(this.video, this.ctx);\n /**\n * The `dash.js` constructor.\n */\n get ctor() {\n return this.#ctor;\n }\n /**\n * The current `dash.js` instance.\n */\n get instance() {\n return this.#controller.instance;\n }\n /**\n * Whether `dash.js` is supported in this environment.\n */\n static supported = isDASHSupported();\n get type() {\n return \"dash\";\n }\n get canLiveSync() {\n return true;\n }\n #library = `${JS_DELIVR_CDN}/npm/dashjs@4.7.4/dist/dash${\".all.min.js\"}`;\n /**\n * The `dash.js` configuration object.\n *\n * @see {@link https://cdn.dashjs.org/latest/jsdoc/module-Settings.html}\n */\n get config() {\n return this.#controller.config;\n }\n set config(config) {\n this.#controller.config = config;\n }\n /**\n * The `dash.js` constructor (supports dynamic imports) or a URL of where it can be found.\n *\n * @defaultValue `https://cdn.jsdelivr.net/npm/dashjs@4.7.4/dist/dash.all.min.js`\n */\n get library() {\n return this.#library;\n }\n set library(library) {\n this.#library = library;\n }\n preconnect() {\n if (!isString(this.#library)) return;\n preconnect(this.#library);\n }\n setup() {\n super.setup();\n new DASHLibLoader(this.#library, this.ctx, (ctor) => {\n this.#ctor = ctor;\n this.#controller.setup(ctor);\n this.ctx.notify(\"provider-setup\", this);\n const src = peek(this.ctx.$state.source);\n if (src) this.loadSource(src);\n });\n }\n async loadSource(src, preload) {\n if (!isString(src.src)) {\n this.removeSource();\n return;\n }\n this.media.preload = preload || \"\";\n this.appendSource(src, \"application/x-mpegurl\");\n this.#controller.loadSource(src);\n this.currentSrc = src;\n }\n /**\n * The given callback is invoked when a new `dash.js` instance is created and right before it's\n * attached to media.\n */\n onInstance(callback) {\n const instance = this.#controller.instance;\n if (instance) callback(instance);\n return this.#controller.onInstance(callback);\n }\n destroy() {\n this.#controller.destroy();\n }\n}\n\nvar provider = /*#__PURE__*/Object.freeze({\n __proto__: null,\n DASHProvider: DASHProvider\n});\n\nclass DASHProviderLoader extends VideoProviderLoader {\n static supported = isDASHSupported();\n name = \"dash\";\n canPlay(src) {\n return DASHProviderLoader.supported && isDASHSrc(src);\n }\n async load(context) {\n if (IS_SERVER) {\n throw Error(\"[vidstack] can not load dash provider server-side\");\n }\n return new (await Promise.resolve().then(function () { return provider; })).DASHProvider(this.target, context);\n }\n}\n\nclass VimeoProviderLoader {\n name = \"vimeo\";\n target;\n preconnect() {\n const connections = [\n \"https://i.vimeocdn.com\",\n \"https://f.vimeocdn.com\",\n \"https://fresnel.vimeocdn.com\"\n ];\n for (const url of connections) {\n preconnect(url);\n }\n }\n canPlay(src) {\n return isString(src.src) && src.type === \"video/vimeo\";\n }\n mediaType() {\n return \"video\";\n }\n async load(ctx) {\n if (IS_SERVER) {\n throw Error(\"[vidstack] can not load vimeo provider server-side\");\n }\n return new (await import('./vidstack-BqgQkvb4.js')).VimeoProvider(this.target, ctx);\n }\n async loadPoster(src, ctx, abort) {\n const { resolveVimeoVideoId, getVimeoVideoInfo } = await import('./vidstack-krOAtKMi.js');\n if (!isString(src.src)) return null;\n const { videoId, hash } = resolveVimeoVideoId(src.src);\n if (videoId) {\n return getVimeoVideoInfo(videoId, abort, hash).then((info) => info ? info.poster : null);\n }\n return null;\n }\n}\n\nclass YouTubeProviderLoader {\n name = \"youtube\";\n target;\n preconnect() {\n const connections = [\n // Botguard script.\n \"https://www.google.com\",\n // Posters.\n \"https://i.ytimg.com\",\n // Ads.\n \"https://googleads.g.doubleclick.net\",\n \"https://static.doubleclick.net\"\n ];\n for (const url of connections) {\n preconnect(url);\n }\n }\n canPlay(src) {\n return isString(src.src) && src.type === \"video/youtube\";\n }\n mediaType() {\n return \"video\";\n }\n async load(ctx) {\n if (IS_SERVER) {\n throw Error(\"[vidstack] can not load youtube provider server-side\");\n }\n return new (await import('./vidstack-DHmfHold.js')).YouTubeProvider(this.target, ctx);\n }\n async loadPoster(src, ctx, abort) {\n const { findYouTubePoster, resolveYouTubeVideoId } = await import('./vidstack-Dm1xEU9Q.js');\n const videoId = isString(src.src) && resolveYouTubeVideoId(src.src);\n if (videoId) return findYouTubePoster(videoId, abort);\n return null;\n }\n}\n\nfunction padNumberWithZeroes(num, expectedLength) {\n const str = String(num);\n const actualLength = str.length;\n const shouldPad = actualLength < expectedLength;\n if (shouldPad) {\n const padLength = expectedLength - actualLength;\n const padding = `0`.repeat(padLength);\n return `${padding}${num}`;\n }\n return str;\n}\nfunction parseTime(duration) {\n const hours = Math.trunc(duration / 3600);\n const minutes = Math.trunc(duration % 3600 / 60);\n const seconds = Math.trunc(duration % 60);\n const fraction = Number((duration - Math.trunc(duration)).toPrecision(3));\n return {\n hours,\n minutes,\n seconds,\n fraction\n };\n}\nfunction formatTime(duration, { padHrs = null, padMins = null, showHrs = false, showMs = false } = {}) {\n const { hours, minutes, seconds, fraction } = parseTime(duration), paddedHours = padHrs ? padNumberWithZeroes(hours, 2) : hours, paddedMinutes = padMins || isNull(padMins) && duration >= 3600 ? padNumberWithZeroes(minutes, 2) : minutes, paddedSeconds = padNumberWithZeroes(seconds, 2), paddedMs = showMs && fraction > 0 ? `.${String(fraction).replace(/^0?\\./, \"\")}` : \"\", time = `${paddedMinutes}:${paddedSeconds}${paddedMs}`;\n return hours > 0 || showHrs ? `${paddedHours}:${time}` : time;\n}\nfunction formatSpokenTime(duration) {\n const spokenParts = [];\n const { hours, minutes, seconds } = parseTime(duration);\n if (hours > 0) {\n spokenParts.push(`${hours} hour`);\n }\n if (minutes > 0) {\n spokenParts.push(`${minutes} min`);\n }\n if (seconds > 0 || spokenParts.length === 0) {\n spokenParts.push(`${seconds} sec`);\n }\n return spokenParts.join(\" \");\n}\n\nconst MEDIA_ATTRIBUTES = Symbol(0);\nconst mediaAttributes = [\n \"autoPlay\",\n \"canAirPlay\",\n \"canFullscreen\",\n \"canGoogleCast\",\n \"canLoad\",\n \"canLoadPoster\",\n \"canPictureInPicture\",\n \"canPlay\",\n \"canSeek\",\n \"ended\",\n \"fullscreen\",\n \"isAirPlayConnected\",\n \"isGoogleCastConnected\",\n \"live\",\n \"liveEdge\",\n \"loop\",\n \"mediaType\",\n \"muted\",\n \"paused\",\n \"pictureInPicture\",\n \"playing\",\n \"playsInline\",\n \"remotePlaybackState\",\n \"remotePlaybackType\",\n \"seeking\",\n \"started\",\n \"streamType\",\n \"viewType\",\n \"waiting\"\n];\n\nconst mediaPlayerProps = {\n artist: \"\",\n artwork: null,\n autoplay: false,\n autoPlay: false,\n clipStartTime: 0,\n clipEndTime: 0,\n controls: false,\n currentTime: 0,\n crossorigin: null,\n crossOrigin: null,\n duration: -1,\n fullscreenOrientation: \"landscape\",\n googleCast: {},\n load: \"visible\",\n posterLoad: \"visible\",\n logLevel: \"silent\",\n loop: false,\n muted: false,\n paused: true,\n playsinline: false,\n playsInline: false,\n playbackRate: 1,\n poster: \"\",\n preload: \"metadata\",\n preferNativeHLS: false,\n src: \"\",\n title: \"\",\n controlsDelay: 2e3,\n hideControlsOnMouseLeave: false,\n viewType: \"unknown\",\n streamType: \"unknown\",\n volume: 1,\n liveEdgeTolerance: 10,\n minLiveDVRWindow: 60,\n keyDisabled: false,\n keyTarget: \"player\",\n keyShortcuts: MEDIA_KEY_SHORTCUTS,\n storage: null\n};\n\nclass MediaLoadController extends MediaPlayerController {\n #type;\n #callback;\n constructor(type, callback) {\n super();\n this.#type = type;\n this.#callback = callback;\n }\n async onAttach(el) {\n if (IS_SERVER) return;\n const load = this.$props[this.#type]();\n if (load === \"eager\") {\n requestAnimationFrame(this.#callback);\n } else if (load === \"idle\") {\n waitIdlePeriod(this.#callback);\n } else if (load === \"visible\") {\n let dispose, observer = new IntersectionObserver((entries) => {\n if (!this.scope) return;\n if (entries[0].isIntersecting) {\n dispose?.();\n dispose = void 0;\n this.#callback();\n }\n });\n observer.observe(el);\n dispose = onDispose(() => observer.disconnect());\n }\n }\n}\n\nclass MediaPlayerDelegate {\n #handle;\n #media;\n constructor(handle, media) {\n this.#handle = handle;\n this.#media = media;\n }\n notify(type, ...init) {\n if (IS_SERVER) return;\n this.#handle(\n new DOMEvent(type, {\n detail: init?.[0],\n trigger: init?.[1]\n })\n );\n }\n async ready(info, trigger) {\n if (IS_SERVER) return;\n return untrack(async () => {\n const { logger } = this.#media, {\n autoPlay,\n canPlay,\n started,\n duration,\n seekable,\n buffered,\n remotePlaybackInfo,\n playsInline,\n savedState,\n source\n } = this.#media.$state;\n if (canPlay()) return;\n const detail = {\n duration: info?.duration ?? duration(),\n seekable: info?.seekable ?? seekable(),\n buffered: info?.buffered ?? buffered(),\n provider: this.#media.$provider()\n };\n this.notify(\"can-play\", detail, trigger);\n tick();\n let provider = this.#media.$provider(), { storage, qualities } = this.#media, { muted, volume, clipStartTime, playbackRate } = this.#media.$props;\n await storage?.onLoad?.(source());\n const savedPlaybackTime = savedState()?.currentTime, savedPausedState = savedState()?.paused, storageTime = await storage?.getTime(), startTime = savedPlaybackTime ?? storageTime ?? clipStartTime(), shouldAutoPlay = savedPausedState === false || savedPausedState !== true && !started() && autoPlay();\n if (provider) {\n provider.setVolume(await storage?.getVolume() ?? volume());\n provider.setMuted(muted() || !!await storage?.getMuted());\n const audioGain = await storage?.getAudioGain() ?? 1;\n if (audioGain > 1) provider.audioGain?.setGain?.(audioGain);\n provider.setPlaybackRate?.(await storage?.getPlaybackRate() ?? playbackRate());\n provider.setPlaysInline?.(playsInline());\n if (startTime > 0) provider.setCurrentTime(startTime);\n }\n const prefQuality = await storage?.getVideoQuality();\n if (prefQuality && qualities.length) {\n let currentQuality = null, currentScore = Infinity;\n for (const quality of qualities) {\n const score = Math.abs(prefQuality.width - quality.width) + Math.abs(prefQuality.height - quality.height) + (prefQuality.bitrate ? Math.abs(prefQuality.bitrate - (quality.bitrate ?? 0)) : 0);\n if (score < currentScore) {\n currentQuality = quality;\n currentScore = score;\n }\n }\n if (currentQuality) currentQuality.selected = true;\n }\n if (canPlay() && shouldAutoPlay) {\n await this.#attemptAutoplay(trigger);\n } else if (storageTime && storageTime > 0) {\n this.notify(\"started\", void 0, trigger);\n }\n remotePlaybackInfo.set(null);\n });\n }\n async #attemptAutoplay(trigger) {\n const {\n player,\n $state: { autoPlaying, muted }\n } = this.#media;\n autoPlaying.set(true);\n const attemptEvent = new DOMEvent(\"auto-play-attempt\", { trigger });\n try {\n await player.play(attemptEvent);\n } catch (error) {\n }\n }\n}\n\nclass Queue {\n #queue = /* @__PURE__ */ new Map();\n /**\n * Queue the given `item` under the given `key` to be processed at a later time by calling\n * `serve(key)`.\n */\n enqueue(key, item) {\n this.#queue.set(key, item);\n }\n /**\n * Process item in queue for the given `key`.\n */\n serve(key) {\n const value = this.peek(key);\n this.#queue.delete(key);\n return value;\n }\n /**\n * Peek at item in queue for the given `key`.\n */\n peek(key) {\n return this.#queue.get(key);\n }\n /**\n * Removes queued item under the given `key`.\n */\n delete(key) {\n this.#queue.delete(key);\n }\n /**\n * Clear all items in the queue.\n */\n clear() {\n this.#queue.clear();\n }\n}\n\nclass RequestQueue {\n #serving = false;\n #pending = deferredPromise();\n #queue = /* @__PURE__ */ new Map();\n /**\n * The number of callbacks that are currently in queue.\n */\n get size() {\n return this.#queue.size;\n }\n /**\n * Whether items in the queue are being served immediately, otherwise they're queued to\n * be processed later.\n */\n get isServing() {\n return this.#serving;\n }\n /**\n * Waits for the queue to be flushed (ie: start serving).\n */\n async waitForFlush() {\n if (this.#serving) return;\n await this.#pending.promise;\n }\n /**\n * Queue the given `callback` to be invoked at a later time by either calling the `serve()` or\n * `start()` methods. If the queue has started serving (i.e., `start()` was already called),\n * then the callback will be invoked immediately.\n *\n * @param key - Uniquely identifies this callback so duplicates are ignored.\n * @param callback - The function to call when this item in the queue is being served.\n */\n enqueue(key, callback) {\n if (this.#serving) {\n callback();\n return;\n }\n this.#queue.delete(key);\n this.#queue.set(key, callback);\n }\n /**\n * Invokes the callback with the given `key` in the queue (if it exists).\n */\n serve(key) {\n this.#queue.get(key)?.();\n this.#queue.delete(key);\n }\n /**\n * Flush all queued items and start serving future requests immediately until `stop()` is called.\n */\n start() {\n this.#flush();\n this.#serving = true;\n if (this.#queue.size > 0) this.#flush();\n }\n /**\n * Stop serving requests, they'll be queued until you begin processing again by calling `start()`.\n */\n stop() {\n this.#serving = false;\n }\n /**\n * Stop serving requests, empty the request queue, and release any promises waiting for the\n * queue to flush.\n */\n reset() {\n this.stop();\n this.#queue.clear();\n this.#release();\n }\n #flush() {\n for (const key of this.#queue.keys()) this.serve(key);\n this.#release();\n }\n #release() {\n this.#pending.resolve();\n this.#pending = deferredPromise();\n }\n}\n\nfunction ariaBool(value) {\n return value ? \"true\" : \"false\";\n}\nfunction $ariaBool(signal) {\n return () => ariaBool(signal());\n}\nfunction prefersReducedMotion() {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\nclass MediaRequestManager extends MediaPlayerController {\n #stateMgr;\n #request;\n #media;\n controls;\n #fullscreen;\n #orientation;\n #$provider;\n #providerQueue = new RequestQueue();\n constructor(stateMgr, request, media) {\n super();\n this.#stateMgr = stateMgr;\n this.#request = request;\n this.#media = media;\n this.#$provider = media.$provider;\n this.controls = new MediaControls();\n this.#fullscreen = new FullscreenController();\n this.#orientation = new ScreenOrientationController();\n }\n onAttach() {\n this.listen(\"fullscreen-change\", this.#onFullscreenChange.bind(this));\n }\n onConnect(el) {\n const names = Object.getOwnPropertyNames(Object.getPrototypeOf(this)), events = new EventsController(el), handleRequest = this.#handleRequest.bind(this);\n for (const name of names) {\n if (name.startsWith(\"media-\")) {\n events.add(name, handleRequest);\n }\n }\n this.#attachLoadPlayListener();\n effect(this.#watchProvider.bind(this));\n effect(this.#watchControlsDelayChange.bind(this));\n effect(this.#watchAudioGainSupport.bind(this));\n effect(this.#watchAirPlaySupport.bind(this));\n effect(this.#watchGoogleCastSupport.bind(this));\n effect(this.#watchFullscreenSupport.bind(this));\n effect(this.#watchPiPSupport.bind(this));\n }\n onDestroy() {\n try {\n const destroyEvent = this.createEvent(\"destroy\"), { pictureInPicture, fullscreen } = this.$state;\n if (fullscreen()) this.exitFullscreen(\"prefer-media\", destroyEvent);\n if (pictureInPicture()) this.exitPictureInPicture(destroyEvent);\n } catch (e) {\n }\n this.#providerQueue.reset();\n }\n #attachLoadPlayListener() {\n const { load } = this.$props, { canLoad } = this.$state;\n if (load() !== \"play\" || canLoad()) return;\n const off = this.listen(\"media-play-request\", (event) => {\n this.#handleLoadPlayStrategy(event);\n off();\n });\n }\n #watchProvider() {\n const provider = this.#$provider(), canPlay = this.$state.canPlay();\n if (provider && canPlay) {\n this.#providerQueue.start();\n }\n return () => {\n this.#providerQueue.stop();\n };\n }\n #handleRequest(event) {\n event.stopPropagation();\n if (event.defaultPrevented) return;\n if (!this[event.type]) return;\n if (peek(this.#$provider)) {\n this[event.type](event);\n } else {\n this.#providerQueue.enqueue(event.type, () => {\n if (peek(this.#$provider)) this[event.type](event);\n });\n }\n }\n async play(trigger) {\n if (IS_SERVER) return;\n const { canPlay, paused, autoPlaying } = this.$state;\n if (this.#handleLoadPlayStrategy(trigger)) return;\n if (!peek(paused)) return;\n if (trigger) this.#request.queue.enqueue(\"media-play-request\", trigger);\n const isAutoPlaying = peek(autoPlaying);\n try {\n const provider = peek(this.#$provider);\n throwIfNotReadyForPlayback(provider, peek(canPlay));\n throwIfAutoplayingWithReducedMotion(isAutoPlaying);\n return await provider.play();\n } catch (error) {\n const errorEvent = this.createEvent(\"play-fail\", {\n detail: coerceToError(error),\n trigger\n });\n errorEvent.autoPlay = isAutoPlaying;\n this.#stateMgr.handle(errorEvent);\n throw error;\n }\n }\n #handleLoadPlayStrategy(trigger) {\n const { load } = this.$props, { canLoad } = this.$state;\n if (load() === \"play\" && !canLoad()) {\n const event = this.createEvent(\"media-start-loading\", { trigger });\n this.dispatchEvent(event);\n this.#providerQueue.enqueue(\"media-play-request\", async () => {\n try {\n await this.play(event);\n } catch (error) {\n }\n });\n return true;\n }\n return false;\n }\n async pause(trigger) {\n if (IS_SERVER) return;\n const { canPlay, paused } = this.$state;\n if (peek(paused)) return;\n if (trigger) {\n this.#request.queue.enqueue(\"media-pause-request\", trigger);\n }\n try {\n const provider = peek(this.#$provider);\n throwIfNotReadyForPlayback(provider, peek(canPlay));\n return await provider.pause();\n } catch (error) {\n this.#request.queue.delete(\"media-pause-request\");\n throw error;\n }\n }\n setAudioGain(gain, trigger) {\n const { audioGain, canSetAudioGain } = this.$state;\n if (audioGain() === gain) return;\n const provider = this.#$provider();\n if (!provider?.audioGain || !canSetAudioGain()) {\n throw Error(\"[vidstack] audio gain api not available\");\n }\n if (trigger) {\n this.#request.queue.enqueue(\"media-audio-gain-change-request\", trigger);\n }\n provider.audioGain.setGain(gain);\n }\n seekToLiveEdge(trigger) {\n if (IS_SERVER) return;\n const { canPlay, live, liveEdge, canSeek, liveSyncPosition, seekableEnd, userBehindLiveEdge } = this.$state;\n userBehindLiveEdge.set(false);\n if (peek(() => !live() || liveEdge() || !canSeek())) return;\n const provider = peek(this.#$provider);\n throwIfNotReadyForPlayback(provider, peek(canPlay));\n if (trigger) this.#request.queue.enqueue(\"media-seek-request\", trigger);\n const end = seekableEnd() - 2;\n provider.setCurrentTime(Math.min(end, liveSyncPosition() ?? end));\n }\n #wasPIPActive = false;\n async enterFullscreen(target = \"prefer-media\", trigger) {\n if (IS_SERVER) return;\n const adapter = this.#getFullscreenAdapter(target);\n throwIfFullscreenNotSupported(target, adapter);\n if (adapter.active) return;\n if (peek(this.$state.pictureInPicture)) {\n this.#wasPIPActive = true;\n await this.exitPictureInPicture(trigger);\n }\n if (trigger) {\n this.#request.queue.enqueue(\"media-enter-fullscreen-request\", trigger);\n }\n return adapter.enter();\n }\n async exitFullscreen(target = \"prefer-media\", trigger) {\n if (IS_SERVER) return;\n const adapter = this.#getFullscreenAdapter(target);\n throwIfFullscreenNotSupported(target, adapter);\n if (!adapter.active) return;\n if (trigger) {\n this.#request.queue.enqueue(\"media-exit-fullscreen-request\", trigger);\n }\n try {\n const result = await adapter.exit();\n if (this.#wasPIPActive && peek(this.$state.canPictureInPicture)) {\n await this.enterPictureInPicture();\n }\n return result;\n } finally {\n this.#wasPIPActive = false;\n }\n }\n #getFullscreenAdapter(target) {\n const provider = peek(this.#$provider);\n return target === \"prefer-media\" && this.#fullscreen.supported || target === \"media\" ? this.#fullscreen : provider?.fullscreen;\n }\n async enterPictureInPicture(trigger) {\n if (IS_SERVER) return;\n this.#throwIfPIPNotSupported();\n if (this.$state.pictureInPicture()) return;\n if (trigger) {\n this.#request.queue.enqueue(\"media-enter-pip-request\", trigger);\n }\n return await this.#$provider().pictureInPicture.enter();\n }\n async exitPictureInPicture(trigger) {\n if (IS_SERVER) return;\n this.#throwIfPIPNotSupported();\n if (!this.$state.pictureInPicture()) return;\n if (trigger) {\n this.#request.queue.enqueue(\"media-exit-pip-request\", trigger);\n }\n return await this.#$provider().pictureInPicture.exit();\n }\n #throwIfPIPNotSupported() {\n if (this.$state.canPictureInPicture()) return;\n throw Error(\n \"[vidstack] no pip support\"\n );\n }\n #watchControlsDelayChange() {\n this.controls.defaultDelay = this.$props.controlsDelay();\n }\n #watchAudioGainSupport() {\n const { canSetAudioGain } = this.$state, supported = !!this.#$provider()?.audioGain?.supported;\n canSetAudioGain.set(supported);\n }\n #watchAirPlaySupport() {\n const { canAirPlay } = this.$state, supported = !!this.#$provider()?.airPlay?.supported;\n canAirPlay.set(supported);\n }\n #watchGoogleCastSupport() {\n const { canGoogleCast, source } = this.$state, supported = IS_CHROME && !IS_IOS && canGoogleCastSrc(source());\n canGoogleCast.set(supported);\n }\n #watchFullscreenSupport() {\n const { canFullscreen } = this.$state, supported = this.#fullscreen.supported || !!this.#$provider()?.fullscreen?.supported;\n canFullscreen.set(supported);\n }\n #watchPiPSupport() {\n const { canPictureInPicture } = this.$state, supported = !!this.#$provider()?.pictureInPicture?.supported;\n canPictureInPicture.set(supported);\n }\n async [\"media-airplay-request\"](event) {\n try {\n await this.requestAirPlay(event);\n } catch (error) {\n }\n }\n async requestAirPlay(trigger) {\n try {\n const adapter = this.#$provider()?.airPlay;\n if (!adapter?.supported) {\n throw Error(false ? \"AirPlay adapter not available on provider.\" : \"No AirPlay adapter.\");\n }\n if (trigger) {\n this.#request.queue.enqueue(\"media-airplay-request\", trigger);\n }\n return await adapter.prompt();\n } catch (error) {\n this.#request.queue.delete(\"media-airplay-request\");\n throw error;\n }\n }\n async [\"media-google-cast-request\"](event) {\n try {\n await this.requestGoogleCast(event);\n } catch (error) {\n }\n }\n #googleCastLoader;\n async requestGoogleCast(trigger) {\n try {\n const { canGoogleCast } = this.$state;\n if (!peek(canGoogleCast)) {\n const error = Error(\n false ? \"Google Cast not available on this platform.\" : \"Cast not available.\"\n );\n error.code = \"CAST_NOT_AVAILABLE\";\n throw error;\n }\n preconnect(\"https://www.gstatic.com\");\n if (!this.#googleCastLoader) {\n const $module = await import('./vidstack-CQQ1xKSy.js').then(function (n) { return n.loader; });\n this.#googleCastLoader = new $module.GoogleCastLoader();\n }\n await this.#googleCastLoader.prompt(this.#media);\n if (trigger) {\n this.#request.queue.enqueue(\"media-google-cast-request\", trigger);\n }\n const isConnecting = peek(this.$state.remotePlaybackState) !== \"disconnected\";\n if (isConnecting) {\n this.$state.savedState.set({\n paused: peek(this.$state.paused),\n currentTime: peek(this.$state.currentTime)\n });\n }\n this.$state.remotePlaybackLoader.set(isConnecting ? this.#googleCastLoader : null);\n } catch (error) {\n this.#request.queue.delete(\"media-google-cast-request\");\n throw error;\n }\n }\n [\"media-clip-start-change-request\"](event) {\n const { clipStartTime } = this.$state;\n clipStartTime.set(event.detail);\n }\n [\"media-clip-end-change-request\"](event) {\n const { clipEndTime } = this.$state;\n clipEndTime.set(event.detail);\n this.dispatch(\"duration-change\", {\n detail: event.detail,\n trigger: event\n });\n }\n [\"media-duration-change-request\"](event) {\n const { providedDuration, clipEndTime } = this.$state;\n providedDuration.set(event.detail);\n if (clipEndTime() <= 0) {\n this.dispatch(\"duration-change\", {\n detail: event.detail,\n trigger: event\n });\n }\n }\n [\"media-audio-track-change-request\"](event) {\n const { logger, audioTracks } = this.#media;\n if (audioTracks.readonly) {\n return;\n }\n const index = event.detail, track = audioTracks[index];\n if (track) {\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n track.selected = true;\n }\n }\n async [\"media-enter-fullscreen-request\"](event) {\n try {\n await this.enterFullscreen(event.detail, event);\n } catch (error) {\n this.#onFullscreenError(error, event);\n }\n }\n async [\"media-exit-fullscreen-request\"](event) {\n try {\n await this.exitFullscreen(event.detail, event);\n } catch (error) {\n this.#onFullscreenError(error, event);\n }\n }\n async #onFullscreenChange(event) {\n const lockType = peek(this.$props.fullscreenOrientation), isFullscreen = event.detail;\n if (isUndefined(lockType) || lockType === \"none\" || !this.#orientation.supported) return;\n if (isFullscreen) {\n if (this.#orientation.locked) return;\n this.dispatch(\"media-orientation-lock-request\", {\n detail: lockType,\n trigger: event\n });\n } else if (this.#orientation.locked) {\n this.dispatch(\"media-orientation-unlock-request\", {\n trigger: event\n });\n }\n }\n #onFullscreenError(error, request) {\n this.#stateMgr.handle(\n this.createEvent(\"fullscreen-error\", {\n detail: coerceToError(error)\n })\n );\n }\n async [\"media-orientation-lock-request\"](event) {\n const key = event.type;\n try {\n this.#request.queue.enqueue(key, event);\n await this.#orientation.lock(event.detail);\n } catch (error) {\n this.#request.queue.delete(key);\n }\n }\n async [\"media-orientation-unlock-request\"](event) {\n const key = event.type;\n try {\n this.#request.queue.enqueue(key, event);\n await this.#orientation.unlock();\n } catch (error) {\n this.#request.queue.delete(key);\n }\n }\n async [\"media-enter-pip-request\"](event) {\n try {\n await this.enterPictureInPicture(event);\n } catch (error) {\n this.#onPictureInPictureError(error, event);\n }\n }\n async [\"media-exit-pip-request\"](event) {\n try {\n await this.exitPictureInPicture(event);\n } catch (error) {\n this.#onPictureInPictureError(error, event);\n }\n }\n #onPictureInPictureError(error, request) {\n this.#stateMgr.handle(\n this.createEvent(\"picture-in-picture-error\", {\n detail: coerceToError(error)\n })\n );\n }\n [\"media-live-edge-request\"](event) {\n const { live, liveEdge, canSeek } = this.$state;\n if (!live() || liveEdge() || !canSeek()) return;\n this.#request.queue.enqueue(\"media-seek-request\", event);\n try {\n this.seekToLiveEdge();\n } catch (error) {\n this.#request.queue.delete(\"media-seek-request\");\n }\n }\n async [\"media-loop-request\"](event) {\n try {\n this.#request.looping = true;\n this.#request.replaying = true;\n await this.play(event);\n } catch (error) {\n this.#request.looping = false;\n }\n }\n [\"media-user-loop-change-request\"](event) {\n this.$state.userPrefersLoop.set(event.detail);\n }\n async [\"media-pause-request\"](event) {\n if (this.$state.paused()) return;\n try {\n await this.pause(event);\n } catch (error) {\n }\n }\n async [\"media-play-request\"](event) {\n if (!this.$state.paused()) return;\n try {\n await this.play(event);\n } catch (e) {\n }\n }\n [\"media-rate-change-request\"](event) {\n const { playbackRate, canSetPlaybackRate } = this.$state;\n if (playbackRate() === event.detail || !canSetPlaybackRate()) return;\n const provider = this.#$provider();\n if (!provider?.setPlaybackRate) return;\n this.#request.queue.enqueue(\"media-rate-change-request\", event);\n provider.setPlaybackRate(event.detail);\n }\n [\"media-audio-gain-change-request\"](event) {\n try {\n this.setAudioGain(event.detail, event);\n } catch (e) {\n }\n }\n [\"media-quality-change-request\"](event) {\n const { qualities, storage, logger } = this.#media;\n if (qualities.readonly) {\n return;\n }\n this.#request.queue.enqueue(\"media-quality-change-request\", event);\n const index = event.detail;\n if (index < 0) {\n qualities.autoSelect(event);\n if (event.isOriginTrusted) storage?.setVideoQuality?.(null);\n } else {\n const quality = qualities[index];\n if (quality) {\n quality.selected = true;\n if (event.isOriginTrusted) {\n storage?.setVideoQuality?.({\n id: quality.id,\n width: quality.width,\n height: quality.height,\n bitrate: quality.bitrate\n });\n }\n }\n }\n }\n [\"media-pause-controls-request\"](event) {\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n this.controls.pause(event);\n }\n [\"media-resume-controls-request\"](event) {\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n this.controls.resume(event);\n }\n [\"media-seek-request\"](event) {\n const { canSeek, ended, live, seekableEnd, userBehindLiveEdge } = this.$state, seekTime = event.detail;\n if (ended()) this.#request.replaying = true;\n const key = event.type;\n this.#request.seeking = false;\n this.#request.queue.delete(key);\n const boundedTime = boundTime(seekTime, this.$state);\n if (!Number.isFinite(boundedTime) || !canSeek()) return;\n this.#request.queue.enqueue(key, event);\n this.#$provider().setCurrentTime(boundedTime);\n if (live() && event.isOriginTrusted && Math.abs(seekableEnd() - boundedTime) >= 2) {\n userBehindLiveEdge.set(true);\n }\n }\n [\"media-seeking-request\"](event) {\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n this.$state.seeking.set(true);\n this.#request.seeking = true;\n }\n [\"media-start-loading\"](event) {\n if (this.$state.canLoad()) return;\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n this.#stateMgr.handle(this.createEvent(\"can-load\"));\n }\n [\"media-poster-start-loading\"](event) {\n if (this.$state.canLoadPoster()) return;\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n this.#stateMgr.handle(this.createEvent(\"can-load-poster\"));\n }\n [\"media-text-track-change-request\"](event) {\n const { index, mode } = event.detail, track = this.#media.textTracks[index];\n if (track) {\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n track.setMode(mode, event);\n }\n }\n [\"media-mute-request\"](event) {\n if (this.$state.muted()) return;\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n this.#$provider().setMuted(true);\n }\n [\"media-unmute-request\"](event) {\n const { muted, volume } = this.$state;\n if (!muted()) return;\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n this.#media.$provider().setMuted(false);\n if (volume() === 0) {\n this.#request.queue.enqueue(key, event);\n this.#$provider().setVolume(0.25);\n }\n }\n [\"media-volume-change-request\"](event) {\n const { muted, volume } = this.$state;\n const newVolume = event.detail;\n if (volume() === newVolume) return;\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n this.#$provider().setVolume(newVolume);\n if (newVolume > 0 && muted()) {\n this.#request.queue.enqueue(key, event);\n this.#$provider().setMuted(false);\n }\n }\n #logError(title, error, request) {\n return;\n }\n}\nfunction throwIfNotReadyForPlayback(provider, canPlay) {\n if (provider && canPlay) return;\n throw Error(\n \"[vidstack] media not ready\"\n );\n}\nfunction throwIfFullscreenNotSupported(target, fullscreen) {\n if (fullscreen?.supported) return;\n throw Error(\n \"[vidstack] no fullscreen support\"\n );\n}\nfunction throwIfAutoplayingWithReducedMotion(autoplaying) {\n if (!prefersReducedMotion() || !autoplaying) return;\n throw Error(\n \"[vidstack] autoplay blocked\"\n );\n}\nclass MediaRequestContext {\n seeking = false;\n looping = false;\n replaying = false;\n queue = new Queue();\n}\n\nconst TRACKED_EVENT = /* @__PURE__ */ new Set([\n \"auto-play\",\n \"auto-play-fail\",\n \"can-load\",\n \"sources-change\",\n \"source-change\",\n \"load-start\",\n \"abort\",\n \"error\",\n \"loaded-metadata\",\n \"loaded-data\",\n \"can-play\",\n \"play\",\n \"play-fail\",\n \"pause\",\n \"playing\",\n \"seeking\",\n \"seeked\",\n \"waiting\"\n]);\n\nclass MediaStateManager extends MediaPlayerController {\n #request;\n #media;\n #trackedEvents = /* @__PURE__ */ new Map();\n #clipEnded = false;\n #playedIntervals = [];\n #playedInterval = [-1, -1];\n #firingWaiting = false;\n #waitingTrigger;\n constructor(request, media) {\n super();\n this.#request = request;\n this.#media = media;\n }\n onAttach(el) {\n el.setAttribute(\"aria-busy\", \"true\");\n new EventsController(this).add(\"fullscreen-change\", this[\"fullscreen-change\"].bind(this)).add(\"fullscreen-error\", this[\"fullscreen-error\"].bind(this)).add(\"orientation-change\", this[\"orientation-change\"].bind(this));\n }\n onConnect(el) {\n effect(this.#watchCanSetVolume.bind(this));\n this.#addTextTrackListeners();\n this.#addQualityListeners();\n this.#addAudioTrackListeners();\n this.#resumePlaybackOnConnect();\n onDispose(this.#pausePlaybackOnDisconnect.bind(this));\n }\n onDestroy() {\n const { audioTracks, qualities, textTracks } = this.#media;\n audioTracks[ListSymbol.reset]();\n qualities[ListSymbol.reset]();\n textTracks[ListSymbol.reset]();\n this.#stopWatchingQualityResize();\n }\n handle(event) {\n if (!this.scope) return;\n const type = event.type;\n untrack(() => this[event.type]?.(event));\n if (!IS_SERVER) {\n if (TRACKED_EVENT.has(type)) this.#trackedEvents.set(type, event);\n this.dispatch(event);\n }\n }\n #isPlayingOnDisconnect = false;\n #resumePlaybackOnConnect() {\n if (!this.#isPlayingOnDisconnect) return;\n requestAnimationFrame(() => {\n if (!this.scope) return;\n this.#media.remote.play(new DOMEvent(\"dom-connect\"));\n });\n this.#isPlayingOnDisconnect = false;\n }\n #pausePlaybackOnDisconnect() {\n if (this.#isPlayingOnDisconnect) return;\n this.#isPlayingOnDisconnect = !this.$state.paused();\n this.#media.$provider()?.pause();\n }\n #resetTracking() {\n this.#stopWaiting();\n this.#clipEnded = false;\n this.#request.replaying = false;\n this.#request.looping = false;\n this.#firingWaiting = false;\n this.#waitingTrigger = void 0;\n this.#trackedEvents.clear();\n }\n #satisfyRequest(request, event) {\n const requestEvent = this.#request.queue.serve(request);\n if (!requestEvent) return;\n event.request = requestEvent;\n event.triggers.add(requestEvent);\n }\n #addTextTrackListeners() {\n this.#onTextTracksChange();\n this.#onTextTrackModeChange();\n const textTracks = this.#media.textTracks;\n new EventsController(textTracks).add(\"add\", this.#onTextTracksChange.bind(this)).add(\"remove\", this.#onTextTracksChange.bind(this)).add(\"mode-change\", this.#onTextTrackModeChange.bind(this));\n }\n #addQualityListeners() {\n const qualities = this.#media.qualities;\n new EventsController(qualities).add(\"add\", this.#onQualitiesChange.bind(this)).add(\"remove\", this.#onQualitiesChange.bind(this)).add(\"change\", this.#onQualityChange.bind(this)).add(\"auto-change\", this.#onAutoQualityChange.bind(this)).add(\"readonly-change\", this.#onCanSetQualityChange.bind(this));\n }\n #addAudioTrackListeners() {\n const audioTracks = this.#media.audioTracks;\n new EventsController(audioTracks).add(\"add\", this.#onAudioTracksChange.bind(this)).add(\"remove\", this.#onAudioTracksChange.bind(this)).add(\"change\", this.#onAudioTrackChange.bind(this));\n }\n #onTextTracksChange(event) {\n const { textTracks } = this.$state;\n textTracks.set(this.#media.textTracks.toArray());\n this.dispatch(\"text-tracks-change\", {\n detail: textTracks(),\n trigger: event\n });\n }\n #onTextTrackModeChange(event) {\n if (event) this.#satisfyRequest(\"media-text-track-change-request\", event);\n const current = this.#media.textTracks.selected, { textTrack } = this.$state;\n if (textTrack() !== current) {\n textTrack.set(current);\n this.dispatch(\"text-track-change\", {\n detail: current,\n trigger: event\n });\n }\n }\n #onAudioTracksChange(event) {\n const { audioTracks } = this.$state;\n audioTracks.set(this.#media.audioTracks.toArray());\n this.dispatch(\"audio-tracks-change\", {\n detail: audioTracks(),\n trigger: event\n });\n }\n #onAudioTrackChange(event) {\n const { audioTrack } = this.$state;\n audioTrack.set(this.#media.audioTracks.selected);\n if (event) this.#satisfyRequest(\"media-audio-track-change-request\", event);\n this.dispatch(\"audio-track-change\", {\n detail: audioTrack(),\n trigger: event\n });\n }\n #onQualitiesChange(event) {\n const { qualities } = this.$state;\n qualities.set(this.#media.qualities.toArray());\n this.dispatch(\"qualities-change\", {\n detail: qualities(),\n trigger: event\n });\n }\n #onQualityChange(event) {\n const { quality } = this.$state;\n quality.set(this.#media.qualities.selected);\n if (event) this.#satisfyRequest(\"media-quality-change-request\", event);\n this.dispatch(\"quality-change\", {\n detail: quality(),\n trigger: event\n });\n }\n #onAutoQualityChange() {\n const { qualities } = this.#media, isAuto = qualities.auto;\n this.$state.autoQuality.set(isAuto);\n if (!isAuto) this.#stopWatchingQualityResize();\n }\n #stopQualityResizeEffect = null;\n #watchQualityResize() {\n this.#stopWatchingQualityResize();\n this.#stopQualityResizeEffect = effect(() => {\n const { qualities } = this.#media, { mediaWidth, mediaHeight } = this.$state, w = mediaWidth(), h = mediaHeight();\n if (w === 0 || h === 0) return;\n let selectedQuality = null, minScore = Infinity;\n for (const quality of qualities) {\n const score = Math.abs(quality.width - w) + Math.abs(quality.height - h);\n if (score < minScore) {\n minScore = score;\n selectedQuality = quality;\n }\n }\n if (selectedQuality) {\n qualities[ListSymbol.select](\n selectedQuality,\n true,\n new DOMEvent(\"resize\", { detail: { width: w, height: h } })\n );\n }\n });\n }\n #stopWatchingQualityResize() {\n this.#stopQualityResizeEffect?.();\n this.#stopQualityResizeEffect = null;\n }\n #onCanSetQualityChange() {\n this.$state.canSetQuality.set(!this.#media.qualities.readonly);\n }\n #watchCanSetVolume() {\n const { canSetVolume, isGoogleCastConnected } = this.$state;\n if (isGoogleCastConnected()) {\n canSetVolume.set(false);\n return;\n }\n canChangeVolume().then(canSetVolume.set);\n }\n [\"provider-change\"](event) {\n const prevProvider = this.#media.$provider(), newProvider = event.detail;\n if (prevProvider?.type === newProvider?.type) return;\n prevProvider?.destroy?.();\n prevProvider?.scope?.dispose();\n this.#media.$provider.set(event.detail);\n if (prevProvider && event.detail === null) {\n this.#resetMediaState(event);\n }\n }\n [\"provider-loader-change\"](event) {\n }\n [\"auto-play\"](event) {\n this.$state.autoPlayError.set(null);\n }\n [\"auto-play-fail\"](event) {\n this.$state.autoPlayError.set(event.detail);\n this.#resetTracking();\n }\n [\"can-load\"](event) {\n this.$state.canLoad.set(true);\n this.#trackedEvents.set(\"can-load\", event);\n this.#media.textTracks[TextTrackSymbol.canLoad]();\n this.#satisfyRequest(\"media-start-loading\", event);\n }\n [\"can-load-poster\"](event) {\n this.$state.canLoadPoster.set(true);\n this.#trackedEvents.set(\"can-load-poster\", event);\n this.#satisfyRequest(\"media-poster-start-loading\", event);\n }\n [\"media-type-change\"](event) {\n const sourceChangeEvent = this.#trackedEvents.get(\"source-change\");\n if (sourceChangeEvent) event.triggers.add(sourceChangeEvent);\n const viewType = this.$state.viewType();\n this.$state.mediaType.set(event.detail);\n const providedViewType = this.$state.providedViewType(), currentViewType = providedViewType === \"unknown\" ? event.detail : providedViewType;\n if (viewType !== currentViewType) {\n if (IS_SERVER) {\n this.$state.inferredViewType.set(currentViewType);\n } else {\n setTimeout(() => {\n requestAnimationFrame(() => {\n if (!this.scope) return;\n this.$state.inferredViewType.set(event.detail);\n this.dispatch(\"view-type-change\", {\n detail: currentViewType,\n trigger: event\n });\n });\n }, 0);\n }\n }\n }\n [\"stream-type-change\"](event) {\n const sourceChangeEvent = this.#trackedEvents.get(\"source-change\");\n if (sourceChangeEvent) event.triggers.add(sourceChangeEvent);\n const { streamType, inferredStreamType } = this.$state;\n inferredStreamType.set(event.detail);\n event.detail = streamType();\n }\n [\"rate-change\"](event) {\n const { storage } = this.#media, { canPlay } = this.$state;\n this.$state.playbackRate.set(event.detail);\n this.#satisfyRequest(\"media-rate-change-request\", event);\n if (canPlay()) {\n storage?.setPlaybackRate?.(event.detail);\n }\n }\n [\"remote-playback-change\"](event) {\n const { remotePlaybackState, remotePlaybackType } = this.$state, { type, state } = event.detail, isConnected = state === \"connected\";\n remotePlaybackType.set(type);\n remotePlaybackState.set(state);\n const key = type === \"airplay\" ? \"media-airplay-request\" : \"media-google-cast-request\";\n if (isConnected) {\n this.#satisfyRequest(key, event);\n } else {\n const requestEvent = this.#request.queue.peek(key);\n if (requestEvent) {\n event.request = requestEvent;\n event.triggers.add(requestEvent);\n }\n }\n }\n [\"sources-change\"](event) {\n const prevSources = this.$state.sources(), newSources = event.detail;\n this.$state.sources.set(newSources);\n this.#onSourceQualitiesChange(prevSources, newSources, event);\n }\n #onSourceQualitiesChange(prevSources, newSources, trigger) {\n let { qualities } = this.#media, added = false, removed = false;\n for (const prevSrc of prevSources) {\n if (!isVideoQualitySrc(prevSrc)) continue;\n const exists = newSources.some((s) => s.src === prevSrc.src);\n if (!exists) {\n const quality = qualities.getBySrc(prevSrc.src);\n if (quality) {\n qualities[ListSymbol.remove](quality, trigger);\n removed = true;\n }\n }\n }\n if (removed && !qualities.length) {\n this.$state.savedState.set(null);\n qualities[ListSymbol.reset](trigger);\n }\n for (const src of newSources) {\n if (!isVideoQualitySrc(src) || qualities.getBySrc(src.src)) continue;\n const quality = {\n id: src.id ?? src.height + \"p\",\n bitrate: null,\n codec: null,\n ...src,\n selected: false\n };\n qualities[ListSymbol.add](quality, trigger);\n added = true;\n }\n if (added && !qualities[QualitySymbol.enableAuto]) {\n this.#watchQualityResize();\n qualities[QualitySymbol.enableAuto] = this.#watchQualityResize.bind(this);\n qualities[QualitySymbol.setAuto](true, trigger);\n }\n }\n [\"source-change\"](event) {\n event.isQualityChange = event.originEvent?.type === \"quality-change\";\n const source = event.detail;\n this.#resetMediaState(event, event.isQualityChange);\n this.#trackedEvents.set(event.type, event);\n this.$state.source.set(source);\n this.el?.setAttribute(\"aria-busy\", \"true\");\n }\n #resetMediaState(event, isSourceQualityChange = false) {\n const { audioTracks, qualities } = this.#media;\n if (!isSourceQualityChange) {\n this.#playedIntervals = [];\n this.#playedInterval = [-1, -1];\n audioTracks[ListSymbol.reset](event);\n qualities[ListSymbol.reset](event);\n softResetMediaState(this.$state, isSourceQualityChange);\n this.#resetTracking();\n return;\n }\n softResetMediaState(this.$state, isSourceQualityChange);\n this.#resetTracking();\n }\n [\"abort\"](event) {\n const sourceChangeEvent = this.#trackedEvents.get(\"source-change\");\n if (sourceChangeEvent) event.triggers.add(sourceChangeEvent);\n const canLoadEvent = this.#trackedEvents.get(\"can-load\");\n if (canLoadEvent && !event.triggers.hasType(\"can-load\")) {\n event.triggers.add(canLoadEvent);\n }\n }\n [\"load-start\"](event) {\n const sourceChangeEvent = this.#trackedEvents.get(\"source-change\");\n if (sourceChangeEvent) event.triggers.add(sourceChangeEvent);\n }\n [\"error\"](event) {\n this.$state.error.set(event.detail);\n const abortEvent = this.#trackedEvents.get(\"abort\");\n if (abortEvent) event.triggers.add(abortEvent);\n }\n [\"loaded-metadata\"](event) {\n const loadStartEvent = this.#trackedEvents.get(\"load-start\");\n if (loadStartEvent) event.triggers.add(loadStartEvent);\n }\n [\"loaded-data\"](event) {\n const loadStartEvent = this.#trackedEvents.get(\"load-start\");\n if (loadStartEvent) event.triggers.add(loadStartEvent);\n }\n [\"can-play\"](event) {\n const loadedMetadata = this.#trackedEvents.get(\"loaded-metadata\");\n if (loadedMetadata) event.triggers.add(loadedMetadata);\n this.#onCanPlayDetail(event.detail);\n this.el?.setAttribute(\"aria-busy\", \"false\");\n }\n [\"can-play-through\"](event) {\n this.#onCanPlayDetail(event.detail);\n const canPlay = this.#trackedEvents.get(\"can-play\");\n if (canPlay) event.triggers.add(canPlay);\n }\n #onCanPlayDetail(detail) {\n const { seekable, buffered, intrinsicDuration, canPlay } = this.$state;\n canPlay.set(true);\n buffered.set(detail.buffered);\n seekable.set(detail.seekable);\n const seekableEnd = getTimeRangesEnd(detail.seekable) ?? Infinity;\n intrinsicDuration.set(seekableEnd);\n }\n [\"duration-change\"](event) {\n const { live, intrinsicDuration, providedDuration, clipEndTime, ended } = this.$state, time = event.detail;\n if (!live()) {\n const duration = !Number.isNaN(time) ? time : 0;\n intrinsicDuration.set(duration);\n if (ended()) this.#onEndPrecisionChange(event);\n }\n if (providedDuration() > 0 || clipEndTime() > 0) {\n event.stopImmediatePropagation();\n }\n }\n [\"progress\"](event) {\n const { buffered, seekable } = this.$state, { buffered: newBuffered, seekable: newSeekable } = event.detail, newBufferedEnd = getTimeRangesEnd(newBuffered), hasBufferedLengthChanged = newBuffered.length !== buffered().length, hasBufferedEndChanged = newBufferedEnd !== getTimeRangesEnd(buffered()), newSeekableEnd = getTimeRangesEnd(newSeekable), hasSeekableLengthChanged = newSeekable.length !== seekable().length, hasSeekableEndChanged = newSeekableEnd !== getTimeRangesEnd(seekable());\n if (hasBufferedLengthChanged || hasBufferedEndChanged) {\n buffered.set(newBuffered);\n }\n if (hasSeekableLengthChanged || hasSeekableEndChanged) {\n seekable.set(newSeekable);\n }\n }\n [\"play\"](event) {\n const {\n paused,\n autoPlayError,\n ended,\n autoPlaying,\n playsInline,\n pointer,\n muted,\n viewType,\n live,\n userBehindLiveEdge\n } = this.$state;\n this.#resetPlaybackIfNeeded();\n if (!paused()) {\n event.stopImmediatePropagation();\n return;\n }\n event.autoPlay = autoPlaying();\n const waitingEvent = this.#trackedEvents.get(\"waiting\");\n if (waitingEvent) event.triggers.add(waitingEvent);\n this.#satisfyRequest(\"media-play-request\", event);\n this.#trackedEvents.set(\"play\", event);\n paused.set(false);\n autoPlayError.set(null);\n if (event.autoPlay) {\n this.handle(\n this.createEvent(\"auto-play\", {\n detail: { muted: muted() },\n trigger: event\n })\n );\n autoPlaying.set(false);\n }\n if (ended() || this.#request.replaying) {\n this.#request.replaying = false;\n ended.set(false);\n this.handle(this.createEvent(\"replay\", { trigger: event }));\n }\n if (!playsInline() && viewType() === \"video\" && pointer() === \"coarse\") {\n this.#media.remote.enterFullscreen(\"prefer-media\", event);\n }\n if (live() && !userBehindLiveEdge()) {\n this.#media.remote.seekToLiveEdge(event);\n }\n }\n #resetPlaybackIfNeeded(trigger) {\n const provider = peek(this.#media.$provider);\n if (!provider) return;\n const { ended, seekableStart, clipEndTime, currentTime, realCurrentTime, duration } = this.$state;\n const shouldReset = ended() || realCurrentTime() < seekableStart() || clipEndTime() > 0 && realCurrentTime() >= clipEndTime() || Math.abs(currentTime() - duration()) < 0.1;\n if (shouldReset) {\n this.dispatch(\"media-seek-request\", {\n detail: seekableStart(),\n trigger\n });\n }\n return shouldReset;\n }\n [\"play-fail\"](event) {\n const { muted, autoPlaying } = this.$state;\n const playEvent = this.#trackedEvents.get(\"play\");\n if (playEvent) event.triggers.add(playEvent);\n this.#satisfyRequest(\"media-play-request\", event);\n const { paused, playing } = this.$state;\n paused.set(true);\n playing.set(false);\n this.#resetTracking();\n this.#trackedEvents.set(\"play-fail\", event);\n if (event.autoPlay) {\n this.handle(\n this.createEvent(\"auto-play-fail\", {\n detail: {\n muted: muted(),\n error: event.detail\n },\n trigger: event\n })\n );\n autoPlaying.set(false);\n }\n }\n [\"playing\"](event) {\n const playEvent = this.#trackedEvents.get(\"play\"), seekedEvent = this.#trackedEvents.get(\"seeked\");\n if (playEvent) event.triggers.add(playEvent);\n else if (seekedEvent) event.triggers.add(seekedEvent);\n setTimeout(() => this.#resetTracking(), 0);\n const {\n paused,\n playing,\n live,\n liveSyncPosition,\n seekableEnd,\n started,\n currentTime,\n seeking,\n ended\n } = this.$state;\n paused.set(false);\n playing.set(true);\n seeking.set(false);\n ended.set(false);\n if (this.#request.looping) {\n this.#request.looping = false;\n return;\n }\n if (live() && !started() && currentTime() === 0) {\n const end = liveSyncPosition() ?? seekableEnd() - 2;\n if (Number.isFinite(end)) this.#media.$provider().setCurrentTime(end);\n }\n this[\"started\"](event);\n }\n [\"started\"](event) {\n const { started } = this.$state;\n if (!started()) {\n started.set(true);\n this.handle(this.createEvent(\"started\", { trigger: event }));\n }\n }\n [\"pause\"](event) {\n if (!this.el?.isConnected) {\n this.#isPlayingOnDisconnect = true;\n }\n this.#satisfyRequest(\"media-pause-request\", event);\n const seekedEvent = this.#trackedEvents.get(\"seeked\");\n if (seekedEvent) event.triggers.add(seekedEvent);\n const { paused, playing } = this.$state;\n paused.set(true);\n playing.set(false);\n if (this.#clipEnded) {\n setTimeout(() => {\n this.handle(this.createEvent(\"end\", { trigger: event }));\n this.#clipEnded = false;\n }, 0);\n }\n this.#resetTracking();\n }\n [\"time-change\"](event) {\n if (this.#request.looping) {\n event.stopImmediatePropagation();\n return;\n }\n let { waiting, played, clipEndTime, realCurrentTime, currentTime } = this.$state, newTime = event.detail, endTime = clipEndTime();\n realCurrentTime.set(newTime);\n this.#updatePlayed();\n waiting.set(false);\n for (const track of this.#media.textTracks) {\n track[TextTrackSymbol.updateActiveCues](newTime, event);\n }\n if (endTime > 0 && newTime >= endTime) {\n this.#clipEnded = true;\n this.dispatch(\"media-pause-request\", { trigger: event });\n }\n this.#saveTime();\n this.dispatch(\"time-update\", {\n detail: { currentTime: currentTime(), played: played() },\n trigger: event\n });\n }\n #updatePlayed() {\n const { currentTime, played, paused } = this.$state;\n if (paused()) return;\n this.#playedInterval = updateTimeIntervals(\n this.#playedIntervals,\n this.#playedInterval,\n currentTime()\n );\n played.set(new TimeRange(this.#playedIntervals));\n }\n // Called to update time again incase duration precision has changed.\n #onEndPrecisionChange(trigger) {\n const { clipStartTime, clipEndTime, duration } = this.$state, isClipped = clipStartTime() > 0 || clipEndTime() > 0;\n if (isClipped) return;\n this.handle(\n this.createEvent(\"time-change\", {\n detail: duration(),\n trigger\n })\n );\n }\n #saveTime() {\n const { storage } = this.#media, { canPlay, realCurrentTime } = this.$state;\n if (canPlay()) {\n storage?.setTime?.(realCurrentTime());\n }\n }\n [\"audio-gain-change\"](event) {\n const { storage } = this.#media, { canPlay, audioGain } = this.$state;\n audioGain.set(event.detail);\n this.#satisfyRequest(\"media-audio-gain-change-request\", event);\n if (canPlay()) storage?.setAudioGain?.(audioGain());\n }\n [\"volume-change\"](event) {\n const { storage } = this.#media, { volume, muted, canPlay } = this.$state, detail = event.detail;\n volume.set(detail.volume);\n muted.set(detail.muted || detail.volume === 0);\n this.#satisfyRequest(\"media-volume-change-request\", event);\n this.#satisfyRequest(detail.muted ? \"media-mute-request\" : \"media-unmute-request\", event);\n if (canPlay()) {\n storage?.setVolume?.(volume());\n storage?.setMuted?.(muted());\n }\n }\n [\"seeking\"] = functionThrottle(\n (event) => {\n const { seeking, realCurrentTime, paused } = this.$state;\n seeking.set(true);\n realCurrentTime.set(event.detail);\n this.#satisfyRequest(\"media-seeking-request\", event);\n if (paused()) {\n this.#waitingTrigger = event;\n this.#fireWaiting();\n }\n this.#playedInterval = [-1, -1];\n },\n 150,\n { leading: true }\n );\n [\"seeked\"](event) {\n const { seeking, currentTime, realCurrentTime, paused, seekableEnd, ended, live } = this.$state;\n if (this.#request.seeking) {\n seeking.set(true);\n event.stopImmediatePropagation();\n } else if (seeking()) {\n const waitingEvent = this.#trackedEvents.get(\"waiting\");\n if (waitingEvent) event.triggers.add(waitingEvent);\n const seekingEvent = this.#trackedEvents.get(\"seeking\");\n if (seekingEvent && !event.triggers.has(seekingEvent)) {\n event.triggers.add(seekingEvent);\n }\n if (paused()) this.#stopWaiting();\n seeking.set(false);\n realCurrentTime.set(event.detail);\n this.#satisfyRequest(\"media-seek-request\", event);\n const origin = event?.originEvent;\n if (origin?.isTrusted && !(origin instanceof MessageEvent) && !/seek/.test(origin.type)) {\n this[\"started\"](event);\n }\n }\n if (!live()) {\n if (Math.floor(currentTime()) !== Math.floor(seekableEnd())) {\n ended.set(false);\n } else {\n this.end(event);\n }\n }\n }\n [\"waiting\"](event) {\n if (this.#firingWaiting || this.#request.seeking) return;\n event.stopImmediatePropagation();\n this.#waitingTrigger = event;\n this.#fireWaiting();\n }\n #fireWaiting = functionDebounce(() => {\n if (!this.#waitingTrigger) return;\n this.#firingWaiting = true;\n const { waiting, playing } = this.$state;\n waiting.set(true);\n playing.set(false);\n const event = this.createEvent(\"waiting\", { trigger: this.#waitingTrigger });\n this.#trackedEvents.set(\"waiting\", event);\n this.dispatch(event);\n this.#waitingTrigger = void 0;\n this.#firingWaiting = false;\n }, 300);\n [\"end\"](event) {\n const { loop, ended } = this.$state;\n if (!loop() && ended()) return;\n if (loop()) {\n setTimeout(() => {\n requestAnimationFrame(() => {\n this.#resetPlaybackIfNeeded(event);\n this.dispatch(\"media-loop-request\", { trigger: event });\n });\n }, 10);\n return;\n }\n setTimeout(() => this.#onEnded(event), 0);\n }\n #onEnded(event) {\n const { storage } = this.#media, { paused, seeking, ended, duration } = this.$state;\n this.#onEndPrecisionChange(event);\n if (!paused()) {\n this.dispatch(\"pause\", { trigger: event });\n }\n if (seeking()) {\n this.dispatch(\"seeked\", {\n detail: duration(),\n trigger: event\n });\n }\n ended.set(true);\n this.#resetTracking();\n storage?.setTime?.(duration(), true);\n this.dispatch(\"ended\", {\n trigger: event\n });\n }\n #stopWaiting() {\n this.#fireWaiting.cancel();\n this.$state.waiting.set(false);\n }\n [\"fullscreen-change\"](event) {\n const isFullscreen = event.detail;\n this.$state.fullscreen.set(isFullscreen);\n this.#satisfyRequest(\n isFullscreen ? \"media-enter-fullscreen-request\" : \"media-exit-fullscreen-request\",\n event\n );\n }\n [\"fullscreen-error\"](event) {\n this.#satisfyRequest(\"media-enter-fullscreen-request\", event);\n this.#satisfyRequest(\"media-exit-fullscreen-request\", event);\n }\n [\"orientation-change\"](event) {\n const isLocked = event.detail.lock;\n this.#satisfyRequest(\n isLocked ? \"media-orientation-lock-request\" : \"media-orientation-unlock-request\",\n event\n );\n }\n [\"picture-in-picture-change\"](event) {\n const isPiP = event.detail;\n this.$state.pictureInPicture.set(isPiP);\n this.#satisfyRequest(isPiP ? \"media-enter-pip-request\" : \"media-exit-pip-request\", event);\n }\n [\"picture-in-picture-error\"](event) {\n this.#satisfyRequest(\"media-enter-pip-request\", event);\n this.#satisfyRequest(\"media-exit-pip-request\", event);\n }\n [\"title-change\"](event) {\n if (!event.trigger) return;\n event.stopImmediatePropagation();\n this.$state.inferredTitle.set(event.detail);\n }\n [\"poster-change\"](event) {\n if (!event.trigger) return;\n event.stopImmediatePropagation();\n this.$state.inferredPoster.set(event.detail);\n }\n}\n\nclass MediaStateSync extends MediaPlayerController {\n onSetup() {\n this.#init();\n if (IS_SERVER) return;\n const effects = [\n this.#watchMetadata,\n this.#watchAutoplay,\n this.#watchClipStartTime,\n this.#watchClipEndTime,\n this.#watchControls,\n this.#watchCrossOrigin,\n this.#watchDuration,\n this.#watchLive,\n this.#watchLiveEdge,\n this.#watchLiveTolerance,\n this.#watchLoop,\n this.#watchPlaysInline,\n this.#watchPoster,\n this.#watchProvidedTypes,\n this.#watchTitle\n ];\n for (const callback of effects) {\n effect(callback.bind(this));\n }\n }\n #init() {\n const providedProps = {\n duration: \"providedDuration\",\n loop: \"providedLoop\",\n poster: \"providedPoster\",\n streamType: \"providedStreamType\",\n title: \"providedTitle\",\n viewType: \"providedViewType\"\n };\n const skip = /* @__PURE__ */ new Set([\n \"currentTime\",\n \"paused\",\n \"playbackRate\",\n \"volume\"\n ]);\n for (const prop of Object.keys(this.$props)) {\n if (skip.has(prop)) continue;\n this.$state[providedProps[prop] ?? prop]?.set(this.$props[prop]());\n }\n this.$state.muted.set(this.$props.muted() || this.$props.volume() === 0);\n }\n // Sync \"provided\" props with internal state. Provided props are used to differentiate from\n // provider inferred values.\n #watchProvidedTypes() {\n const { viewType, streamType, title, poster, loop } = this.$props, $state = this.$state;\n $state.providedPoster.set(poster());\n $state.providedStreamType.set(streamType());\n $state.providedViewType.set(viewType());\n $state.providedTitle.set(title());\n $state.providedLoop.set(loop());\n }\n #watchLogLevel() {\n return;\n }\n #watchMetadata() {\n const { artist, artwork } = this.$props;\n this.$state.artist.set(artist());\n this.$state.artwork.set(artwork());\n }\n #watchTitle() {\n const { title } = this.$state;\n this.dispatch(\"title-change\", { detail: title() });\n }\n #watchAutoplay() {\n const autoPlay = this.$props.autoPlay() || this.$props.autoplay();\n this.$state.autoPlay.set(autoPlay);\n this.dispatch(\"auto-play-change\", { detail: autoPlay });\n }\n #watchLoop() {\n const loop = this.$state.loop();\n this.dispatch(\"loop-change\", { detail: loop });\n }\n #watchControls() {\n const controls = this.$props.controls();\n this.$state.controls.set(controls);\n }\n #watchPoster() {\n const { poster } = this.$state;\n this.dispatch(\"poster-change\", { detail: poster() });\n }\n #watchCrossOrigin() {\n const crossOrigin = this.$props.crossOrigin() ?? this.$props.crossorigin(), value = crossOrigin === true ? \"\" : crossOrigin;\n this.$state.crossOrigin.set(value);\n }\n #watchDuration() {\n const { duration } = this.$props;\n this.dispatch(\"media-duration-change-request\", {\n detail: duration()\n });\n }\n #watchPlaysInline() {\n const inline = this.$props.playsInline() || this.$props.playsinline();\n this.$state.playsInline.set(inline);\n this.dispatch(\"plays-inline-change\", { detail: inline });\n }\n #watchClipStartTime() {\n const { clipStartTime } = this.$props;\n this.dispatch(\"media-clip-start-change-request\", {\n detail: clipStartTime()\n });\n }\n #watchClipEndTime() {\n const { clipEndTime } = this.$props;\n this.dispatch(\"media-clip-end-change-request\", {\n detail: clipEndTime()\n });\n }\n #watchLive() {\n this.dispatch(\"live-change\", { detail: this.$state.live() });\n }\n #watchLiveTolerance() {\n this.$state.liveEdgeTolerance.set(this.$props.liveEdgeTolerance());\n this.$state.minLiveDVRWindow.set(this.$props.minLiveDVRWindow());\n }\n #watchLiveEdge() {\n this.dispatch(\"live-edge-change\", { detail: this.$state.liveEdge() });\n }\n}\n\nconst actions = [\"play\", \"pause\", \"seekforward\", \"seekbackward\", \"seekto\"];\nclass NavigatorMediaSession extends MediaPlayerController {\n onConnect() {\n effect(this.#onMetadataChange.bind(this));\n effect(this.#onPlaybackStateChange.bind(this));\n const handleAction = this.#handleAction.bind(this);\n for (const action of actions) {\n navigator.mediaSession.setActionHandler(action, handleAction);\n }\n onDispose(this.#onDisconnect.bind(this));\n }\n #onDisconnect() {\n for (const action of actions) {\n navigator.mediaSession.setActionHandler(action, null);\n }\n }\n #onMetadataChange() {\n const { title, artist, artwork, poster } = this.$state;\n navigator.mediaSession.metadata = new MediaMetadata({\n title: title(),\n artist: artist(),\n artwork: artwork() ?? [{ src: poster() }]\n });\n }\n #onPlaybackStateChange() {\n const { canPlay, paused } = this.$state;\n navigator.mediaSession.playbackState = !canPlay() ? \"none\" : paused() ? \"paused\" : \"playing\";\n }\n #handleAction(details) {\n const trigger = new DOMEvent(`media-session-action`, { detail: details });\n switch (details.action) {\n case \"play\":\n this.dispatch(\"media-play-request\", { trigger });\n break;\n case \"pause\":\n this.dispatch(\"media-pause-request\", { trigger });\n break;\n case \"seekto\":\n case \"seekforward\":\n case \"seekbackward\":\n this.dispatch(\"media-seek-request\", {\n detail: isNumber(details.seekTime) ? details.seekTime : this.$state.currentTime() + (details.seekOffset ?? (details.action === \"seekforward\" ? 10 : -10)),\n trigger\n });\n break;\n }\n }\n}\n\nlet $keyboard = signal(false);\nif (!IS_SERVER) {\n listenEvent(document, \"pointerdown\", () => {\n $keyboard.set(false);\n });\n listenEvent(document, \"keydown\", (e) => {\n if (e.metaKey || e.altKey || e.ctrlKey) return;\n $keyboard.set(true);\n });\n}\nclass FocusVisibleController extends ViewController {\n #focused = signal(false);\n onConnect(el) {\n effect(() => {\n const events = new EventsController(el);\n if (!$keyboard()) {\n this.#focused.set(false);\n updateFocusAttr(el, false);\n events.add(\"pointerenter\", this.#onPointerEnter.bind(this)).add(\"pointerleave\", this.#onPointerLeave.bind(this));\n return;\n }\n const active = document.activeElement === el;\n this.#focused.set(active);\n updateFocusAttr(el, active);\n events.add(\"focus\", this.#onFocus.bind(this)).add(\"blur\", this.#onBlur.bind(this));\n });\n }\n focused() {\n return this.#focused();\n }\n #onFocus() {\n this.#focused.set(true);\n updateFocusAttr(this.el, true);\n }\n #onBlur() {\n this.#focused.set(false);\n updateFocusAttr(this.el, false);\n }\n #onPointerEnter() {\n updateHoverAttr(this.el, true);\n }\n #onPointerLeave() {\n updateHoverAttr(this.el, false);\n }\n}\nfunction updateFocusAttr(el, isFocused) {\n setAttribute(el, \"data-focus\", isFocused);\n setAttribute(el, \"data-hocus\", isFocused);\n}\nfunction updateHoverAttr(el, isHovering) {\n setAttribute(el, \"data-hocus\", isHovering);\n setAttribute(el, \"data-hover\", isHovering);\n}\n\nclass MediaPlayer extends Component {\n static props = mediaPlayerProps;\n static state = mediaState;\n #media;\n #stateMgr;\n #requestMgr;\n canPlayQueue = new RequestQueue();\n remoteControl;\n get #provider() {\n return this.#media.$provider();\n }\n get #props() {\n return this.$props;\n }\n constructor() {\n super();\n new MediaStateSync();\n const context = {\n player: this,\n qualities: new VideoQualityList(),\n audioTracks: new AudioTrackList(),\n storage: null,\n $provider: signal(null),\n $providerSetup: signal(false),\n $props: this.$props,\n $state: this.$state\n };\n context.remote = this.remoteControl = new MediaRemoteControl(\n void 0\n );\n context.remote.setPlayer(this);\n context.textTracks = new TextTrackList();\n context.textTracks[TextTrackSymbol.crossOrigin] = this.$state.crossOrigin;\n context.textRenderers = new TextRenderers(context);\n context.ariaKeys = {};\n this.#media = context;\n provideContext(mediaContext, context);\n this.orientation = new ScreenOrientationController();\n new FocusVisibleController();\n new MediaKeyboardController(context);\n const request = new MediaRequestContext();\n this.#stateMgr = new MediaStateManager(request, context);\n this.#requestMgr = new MediaRequestManager(this.#stateMgr, request, context);\n context.delegate = new MediaPlayerDelegate(this.#stateMgr.handle.bind(this.#stateMgr), context);\n context.notify = context.delegate.notify.bind(context.delegate);\n if (typeof navigator !== \"undefined\" && \"mediaSession\" in navigator) {\n new NavigatorMediaSession();\n }\n new MediaLoadController(\"load\", this.startLoading.bind(this));\n new MediaLoadController(\"posterLoad\", this.startLoadingPoster.bind(this));\n }\n onSetup() {\n this.#setupMediaAttributes();\n effect(this.#watchCanPlay.bind(this));\n effect(this.#watchMuted.bind(this));\n effect(this.#watchPaused.bind(this));\n effect(this.#watchVolume.bind(this));\n effect(this.#watchCurrentTime.bind(this));\n effect(this.#watchPlaysInline.bind(this));\n effect(this.#watchPlaybackRate.bind(this));\n }\n onAttach(el) {\n el.setAttribute(\"data-media-player\", \"\");\n setAttributeIfEmpty(el, \"tabindex\", \"0\");\n setAttributeIfEmpty(el, \"role\", \"region\");\n effect(this.#watchStorage.bind(this));\n if (IS_SERVER) this.#watchTitle();\n else effect(this.#watchTitle.bind(this));\n if (IS_SERVER) this.#watchOrientation();\n else effect(this.#watchOrientation.bind(this));\n listenEvent(el, \"find-media-player\", this.#onFindPlayer.bind(this));\n }\n onConnect(el) {\n if (IS_IPHONE) setAttribute(el, \"data-iphone\", \"\");\n const pointerQuery = window.matchMedia(\"(pointer: coarse)\");\n this.#onPointerChange(pointerQuery);\n pointerQuery.onchange = this.#onPointerChange.bind(this);\n const resize = new ResizeObserver(animationFrameThrottle(this.#onResize.bind(this)));\n resize.observe(el);\n effect(this.#onResize.bind(this));\n this.dispatch(\"media-player-connect\", {\n detail: this,\n bubbles: true,\n composed: true\n });\n onDispose(() => {\n resize.disconnect();\n pointerQuery.onchange = null;\n });\n }\n onDestroy() {\n this.#media.player = null;\n this.canPlayQueue.reset();\n }\n #skipTitleUpdate = false;\n #watchTitle() {\n const el = this.$el, { title, live, viewType, providedTitle } = this.$state, isLive = live(), type = uppercaseFirstChar(viewType()), typeText = type !== \"Unknown\" ? `${isLive ? \"Live \" : \"\"}${type}` : isLive ? \"Live\" : \"Media\", currentTitle = title();\n setAttribute(\n this.el,\n \"aria-label\",\n `${typeText} Player` + (currentTitle ? ` - ${currentTitle}` : \"\")\n );\n if (!IS_SERVER && el?.hasAttribute(\"title\")) {\n this.#skipTitleUpdate = true;\n el?.removeAttribute(\"title\");\n }\n }\n #watchOrientation() {\n const orientation = this.orientation.landscape ? \"landscape\" : \"portrait\";\n this.$state.orientation.set(orientation);\n setAttribute(this.el, \"data-orientation\", orientation);\n this.#onResize();\n }\n #watchCanPlay() {\n if (this.$state.canPlay() && this.#provider) this.canPlayQueue.start();\n else this.canPlayQueue.stop();\n }\n #setupMediaAttributes() {\n if (MediaPlayer[MEDIA_ATTRIBUTES]) {\n this.setAttributes(MediaPlayer[MEDIA_ATTRIBUTES]);\n return;\n }\n const $attrs = {\n \"data-load\": function() {\n return this.$props.load();\n },\n \"data-captions\": function() {\n const track = this.$state.textTrack();\n return !!track && isTrackCaptionKind(track);\n },\n \"data-ios-controls\": function() {\n return this.$state.iOSControls();\n },\n \"data-controls\": function() {\n return this.controls.showing;\n },\n \"data-buffering\": function() {\n const { canLoad, canPlay, waiting } = this.$state;\n return canLoad() && (!canPlay() || waiting());\n },\n \"data-error\": function() {\n const { error } = this.$state;\n return !!error();\n },\n \"data-autoplay-error\": function() {\n const { autoPlayError } = this.$state;\n return !!autoPlayError();\n }\n };\n const alias = {\n autoPlay: \"autoplay\",\n canAirPlay: \"can-airplay\",\n canPictureInPicture: \"can-pip\",\n pictureInPicture: \"pip\",\n playsInline: \"playsinline\",\n remotePlaybackState: \"remote-state\",\n remotePlaybackType: \"remote-type\",\n isAirPlayConnected: \"airplay\",\n isGoogleCastConnected: \"google-cast\"\n };\n for (const prop2 of mediaAttributes) {\n const attrName = \"data-\" + (alias[prop2] ?? camelToKebabCase(prop2));\n $attrs[attrName] = function() {\n return this.$state[prop2]();\n };\n }\n delete $attrs.title;\n MediaPlayer[MEDIA_ATTRIBUTES] = $attrs;\n this.setAttributes($attrs);\n }\n #onFindPlayer(event) {\n event.detail(this);\n }\n #onResize() {\n if (IS_SERVER || !this.el) return;\n const width = this.el.clientWidth, height = this.el.clientHeight;\n this.$state.width.set(width);\n this.$state.height.set(height);\n setStyle(this.el, \"--player-width\", width + \"px\");\n setStyle(this.el, \"--player-height\", height + \"px\");\n }\n #onPointerChange(queryList) {\n if (IS_SERVER) return;\n const pointer = queryList.matches ? \"coarse\" : \"fine\";\n setAttribute(this.el, \"data-pointer\", pointer);\n this.$state.pointer.set(pointer);\n this.#onResize();\n }\n /**\n * The current media provider.\n */\n get provider() {\n return this.#provider;\n }\n /**\n * Media controls settings.\n */\n get controls() {\n return this.#requestMgr.controls;\n }\n set controls(controls) {\n this.#props.controls.set(controls);\n }\n /**\n * Controls the screen orientation of the current browser window and dispatches orientation\n * change events on the player.\n */\n orientation;\n /**\n * The title of the current media.\n */\n get title() {\n return peek(this.$state.title);\n }\n set title(newTitle) {\n if (this.#skipTitleUpdate) {\n this.#skipTitleUpdate = false;\n return;\n }\n this.#props.title.set(newTitle);\n }\n /**\n * A list of all `VideoQuality` objects representing the set of available video renditions.\n *\n * @see {@link https://vidstack.io/docs/player/api/video-quality}\n */\n get qualities() {\n return this.#media.qualities;\n }\n /**\n * A list of all `AudioTrack` objects representing the set of available audio tracks.\n *\n * @see {@link https://vidstack.io/docs/player/api/audio-tracks}\n */\n get audioTracks() {\n return this.#media.audioTracks;\n }\n /**\n * A list of all `TextTrack` objects representing the set of available text tracks.\n *\n * @see {@link https://vidstack.io/docs/player/api/text-tracks}\n */\n get textTracks() {\n return this.#media.textTracks;\n }\n /**\n * Contains text renderers which are responsible for loading, parsing, and rendering text\n * tracks.\n */\n get textRenderers() {\n return this.#media.textRenderers;\n }\n get duration() {\n return this.$state.duration();\n }\n set duration(duration) {\n this.#props.duration.set(duration);\n }\n get paused() {\n return peek(this.$state.paused);\n }\n set paused(paused) {\n this.#queuePausedUpdate(paused);\n }\n #watchPaused() {\n this.#queuePausedUpdate(this.$props.paused());\n }\n #queuePausedUpdate(paused) {\n if (paused) {\n this.canPlayQueue.enqueue(\"paused\", () => this.#requestMgr.pause());\n } else this.canPlayQueue.enqueue(\"paused\", () => this.#requestMgr.play());\n }\n get muted() {\n return peek(this.$state.muted);\n }\n set muted(muted) {\n this.#queueMutedUpdate(muted);\n }\n #watchMuted() {\n this.#queueMutedUpdate(this.$props.muted());\n }\n #queueMutedUpdate(muted) {\n this.canPlayQueue.enqueue(\"muted\", () => {\n if (this.#provider) this.#provider.setMuted(muted);\n });\n }\n get currentTime() {\n return peek(this.$state.currentTime);\n }\n set currentTime(time) {\n this.#queueCurrentTimeUpdate(time);\n }\n #watchCurrentTime() {\n this.#queueCurrentTimeUpdate(this.$props.currentTime());\n }\n #queueCurrentTimeUpdate(time) {\n this.canPlayQueue.enqueue(\"currentTime\", () => {\n const { currentTime } = this.$state;\n if (time === peek(currentTime)) return;\n peek(() => {\n if (!this.#provider) return;\n const boundedTime = boundTime(time, this.$state);\n if (Number.isFinite(boundedTime)) {\n this.#provider.setCurrentTime(boundedTime);\n }\n });\n });\n }\n get volume() {\n return peek(this.$state.volume);\n }\n set volume(volume) {\n this.#queueVolumeUpdate(volume);\n }\n #watchVolume() {\n this.#queueVolumeUpdate(this.$props.volume());\n }\n #queueVolumeUpdate(volume) {\n const clampedVolume = clampNumber(0, volume, 1);\n this.canPlayQueue.enqueue(\"volume\", () => {\n if (this.#provider) this.#provider.setVolume(clampedVolume);\n });\n }\n get playbackRate() {\n return peek(this.$state.playbackRate);\n }\n set playbackRate(rate) {\n this.#queuePlaybackRateUpdate(rate);\n }\n #watchPlaybackRate() {\n this.#queuePlaybackRateUpdate(this.$props.playbackRate());\n }\n #queuePlaybackRateUpdate(rate) {\n this.canPlayQueue.enqueue(\"rate\", () => {\n if (this.#provider) this.#provider.setPlaybackRate?.(rate);\n });\n }\n #watchPlaysInline() {\n this.#queuePlaysInlineUpdate(this.$props.playsInline());\n }\n #queuePlaysInlineUpdate(inline) {\n this.canPlayQueue.enqueue(\"playsinline\", () => {\n if (this.#provider) this.#provider.setPlaysInline?.(inline);\n });\n }\n #watchStorage() {\n let storageValue = this.$props.storage(), storage = isString(storageValue) ? new LocalMediaStorage() : storageValue;\n if (storage?.onChange) {\n const { source } = this.$state, playerId = isString(storageValue) ? storageValue : this.el?.id, mediaId = computed(this.#computeMediaId.bind(this));\n effect(() => storage.onChange(source(), mediaId(), playerId || void 0));\n }\n this.#media.storage = storage;\n this.#media.textTracks.setStorage(storage);\n onDispose(() => {\n storage?.onDestroy?.();\n this.#media.storage = null;\n this.#media.textTracks.setStorage(null);\n });\n }\n #computeMediaId() {\n const { clipStartTime, clipEndTime } = this.$props, { source } = this.$state, src = source();\n return src.src ? `${src.src}:${clipStartTime()}:${clipEndTime()}` : null;\n }\n /**\n * Begins/resumes playback of the media. If this method is called programmatically before the\n * user has interacted with the player, the promise may be rejected subject to the browser's\n * autoplay policies. This method will throw if called before media is ready for playback.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/play}\n */\n async play(trigger) {\n return this.#requestMgr.play(trigger);\n }\n /**\n * Pauses playback of the media. This method will throw if called before media is ready for\n * playback.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/pause}\n */\n async pause(trigger) {\n return this.#requestMgr.pause(trigger);\n }\n /**\n * Attempts to display the player in fullscreen. The promise will resolve if successful, and\n * reject if not. This method will throw if any fullscreen API is _not_ currently available.\n *\n * @see {@link https://vidstack.io/docs/player/api/fullscreen}\n */\n async enterFullscreen(target, trigger) {\n return this.#requestMgr.enterFullscreen(target, trigger);\n }\n /**\n * Attempts to display the player inline by exiting fullscreen. This method will throw if any\n * fullscreen API is _not_ currently available.\n *\n * @see {@link https://vidstack.io/docs/player/api/fullscreen}\n */\n async exitFullscreen(target, trigger) {\n return this.#requestMgr.exitFullscreen(target, trigger);\n }\n /**\n * Attempts to display the player in picture-in-picture mode. This method will throw if PIP is\n * not supported. This method will also return a `PictureInPictureWindow` if the current\n * provider supports it.\n *\n * @see {@link https://vidstack.io/docs/player/api/picture-in-picture}\n */\n enterPictureInPicture(trigger) {\n return this.#requestMgr.enterPictureInPicture(trigger);\n }\n /**\n * Attempts to display the player in inline by exiting picture-in-picture mode. This method\n * will throw if not supported.\n *\n * @see {@link https://vidstack.io/docs/player/api/picture-in-picture}\n */\n exitPictureInPicture(trigger) {\n return this.#requestMgr.exitPictureInPicture(trigger);\n }\n /**\n * Sets the current time to the live edge (i.e., `duration`). This is a no-op for non-live\n * streams and will throw if called before media is ready for playback.\n *\n * @see {@link https://vidstack.io/docs/player/api/live}\n */\n seekToLiveEdge(trigger) {\n this.#requestMgr.seekToLiveEdge(trigger);\n }\n /**\n * Called when media can begin loading. Calling this method will trigger the initial provider\n * loading process. Calling it more than once has no effect.\n *\n * @see {@link https://vidstack.io/docs/player/core-concepts/loading#load-strategies}\n */\n startLoading(trigger) {\n this.#media.notify(\"can-load\", void 0, trigger);\n }\n /**\n * Called when the poster image can begin loading. Calling it more than once has no effect.\n *\n * @see {@link https://vidstack.io/docs/player/core-concepts/loading#load-strategies}\n */\n startLoadingPoster(trigger) {\n this.#media.notify(\"can-load-poster\", void 0, trigger);\n }\n /**\n * Request Apple AirPlay picker to open.\n */\n requestAirPlay(trigger) {\n return this.#requestMgr.requestAirPlay(trigger);\n }\n /**\n * Request Google Cast device picker to open. The Google Cast framework will be loaded if it\n * hasn't yet.\n */\n requestGoogleCast(trigger) {\n return this.#requestMgr.requestGoogleCast(trigger);\n }\n /**\n * Set the audio gain, amplifying volume and enabling a maximum volume above 100%.\n *\n * @see {@link https://vidstack.io/docs/player/api/audio-gain}\n */\n setAudioGain(gain, trigger) {\n return this.#requestMgr.setAudioGain(gain, trigger);\n }\n destroy() {\n super.destroy();\n this.#media.remote.setPlayer(null);\n this.dispatch(\"destroy\");\n }\n}\nconst mediaplayer__proto = MediaPlayer.prototype;\nprop(mediaplayer__proto, \"canPlayQueue\");\nprop(mediaplayer__proto, \"remoteControl\");\nprop(mediaplayer__proto, \"provider\");\nprop(mediaplayer__proto, \"controls\");\nprop(mediaplayer__proto, \"orientation\");\nprop(mediaplayer__proto, \"title\");\nprop(mediaplayer__proto, \"qualities\");\nprop(mediaplayer__proto, \"audioTracks\");\nprop(mediaplayer__proto, \"textTracks\");\nprop(mediaplayer__proto, \"textRenderers\");\nprop(mediaplayer__proto, \"duration\");\nprop(mediaplayer__proto, \"paused\");\nprop(mediaplayer__proto, \"muted\");\nprop(mediaplayer__proto, \"currentTime\");\nprop(mediaplayer__proto, \"volume\");\nprop(mediaplayer__proto, \"playbackRate\");\nmethod(mediaplayer__proto, \"play\");\nmethod(mediaplayer__proto, \"pause\");\nmethod(mediaplayer__proto, \"enterFullscreen\");\nmethod(mediaplayer__proto, \"exitFullscreen\");\nmethod(mediaplayer__proto, \"enterPictureInPicture\");\nmethod(mediaplayer__proto, \"exitPictureInPicture\");\nmethod(mediaplayer__proto, \"seekToLiveEdge\");\nmethod(mediaplayer__proto, \"startLoading\");\nmethod(mediaplayer__proto, \"startLoadingPoster\");\nmethod(mediaplayer__proto, \"requestAirPlay\");\nmethod(mediaplayer__proto, \"requestGoogleCast\");\nmethod(mediaplayer__proto, \"setAudioGain\");\n\nfunction resolveStreamTypeFromDASHManifest(manifestSrc, requestInit) {\n return fetch(manifestSrc, requestInit).then((res) => res.text()).then((manifest) => {\n return /type=\"static\"/.test(manifest) ? \"on-demand\" : \"live\";\n });\n}\nfunction resolveStreamTypeFromHLSManifest(manifestSrc, requestInit) {\n return fetch(manifestSrc, requestInit).then((res) => res.text()).then((manifest) => {\n const renditionURI = resolveHLSRenditionURI(manifest);\n if (renditionURI) {\n return resolveStreamTypeFromHLSManifest(\n /^https?:/.test(renditionURI) ? renditionURI : new URL(renditionURI, manifestSrc).href,\n requestInit\n );\n }\n const streamType = /EXT-X-PLAYLIST-TYPE:\\s*VOD/.test(manifest) ? \"on-demand\" : \"live\";\n if (streamType === \"live\" && resolveTargetDuration(manifest) >= 10 && (/#EXT-X-DVR-ENABLED:\\s*true/.test(manifest) || manifest.includes(\"#EXT-X-DISCONTINUITY\"))) {\n return \"live:dvr\";\n }\n return streamType;\n });\n}\nfunction resolveHLSRenditionURI(manifest) {\n const matches = manifest.match(/#EXT-X-STREAM-INF:[^\\n]+(\\n[^\\n]+)*/g);\n return matches ? matches[0].split(\"\\n\")[1].trim() : null;\n}\nfunction resolveTargetDuration(manifest) {\n const lines = manifest.split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"#EXT-X-TARGETDURATION\")) {\n const duration = parseFloat(line.split(\":\")[1]);\n if (!isNaN(duration)) {\n return duration;\n }\n }\n }\n return -1;\n}\n\nconst sourceTypes = /* @__PURE__ */ new Map();\nclass SourceSelection {\n #initialize = false;\n #loaders;\n #domSources;\n #media;\n #loader;\n constructor(domSources, media, loader, customLoaders = []) {\n this.#domSources = domSources;\n this.#media = media;\n this.#loader = loader;\n const DASH_LOADER = new DASHProviderLoader(), HLS_LOADER = new HLSProviderLoader(), VIDEO_LOADER = new VideoProviderLoader(), AUDIO_LOADER = new AudioProviderLoader(), YOUTUBE_LOADER = new YouTubeProviderLoader(), VIMEO_LOADER = new VimeoProviderLoader(), EMBED_LOADERS = [YOUTUBE_LOADER, VIMEO_LOADER];\n this.#loaders = computed(() => {\n const remoteLoader = media.$state.remotePlaybackLoader();\n const loaders = media.$props.preferNativeHLS() ? [VIDEO_LOADER, AUDIO_LOADER, DASH_LOADER, HLS_LOADER, ...EMBED_LOADERS, ...customLoaders] : [HLS_LOADER, VIDEO_LOADER, AUDIO_LOADER, DASH_LOADER, ...EMBED_LOADERS, ...customLoaders];\n return remoteLoader ? [remoteLoader, ...loaders] : loaders;\n });\n const { $state } = media;\n $state.sources.set(normalizeSrc(media.$props.src()));\n for (const src of $state.sources()) {\n const loader2 = this.#loaders().find((loader3) => loader3.canPlay(src));\n if (!loader2) continue;\n const mediaType = loader2.mediaType(src);\n media.$state.source.set(src);\n media.$state.mediaType.set(mediaType);\n media.$state.inferredViewType.set(mediaType);\n this.#loader.set(loader2);\n this.#initialize = true;\n break;\n }\n }\n connect() {\n const loader = this.#loader();\n if (this.#initialize) {\n this.#notifySourceChange(this.#media.$state.source(), loader);\n this.#notifyLoaderChange(loader);\n this.#initialize = false;\n }\n effect(this.#onSourcesChange.bind(this));\n effect(this.#onSourceChange.bind(this));\n effect(this.#onSetup.bind(this));\n effect(this.#onLoadSource.bind(this));\n effect(this.#onLoadPoster.bind(this));\n }\n #onSourcesChange() {\n this.#media.notify(\"sources-change\", [\n ...normalizeSrc(this.#media.$props.src()),\n ...this.#domSources()\n ]);\n }\n #onSourceChange() {\n const { $state } = this.#media;\n const sources = $state.sources(), currentSource = peek($state.source), newSource = this.#findNewSource(currentSource, sources), noMatch = sources[0]?.src && !newSource.src && !newSource.type;\n if (noMatch) {\n const { crossOrigin } = $state, credentials = getRequestCredentials(crossOrigin()), abort = new AbortController();\n Promise.all(\n sources.map(\n (source) => isString(source.src) && source.type === \"?\" ? fetch(source.src, {\n method: \"HEAD\",\n credentials,\n signal: abort.signal\n }).then((res) => {\n source.type = res.headers.get(\"content-type\") || \"??\";\n sourceTypes.set(source.src, source.type);\n return source;\n }).catch(() => source) : source\n )\n ).then((sources2) => {\n if (abort.signal.aborted) return;\n const newSource2 = this.#findNewSource(peek($state.source), sources2);\n tick();\n if (!newSource2.src) {\n this.#media.notify(\"error\", {\n message: \"Failed to load resource.\",\n code: 4\n });\n }\n });\n return () => abort.abort();\n }\n tick();\n }\n #findNewSource(currentSource, sources) {\n let newSource = { src: \"\", type: \"\" }, newLoader = null, triggerEvent = new DOMEvent(\"sources-change\", { detail: { sources } }), loaders = this.#loaders(), { started, paused, currentTime, quality, savedState } = this.#media.$state;\n for (const src of sources) {\n const loader = loaders.find((loader2) => loader2.canPlay(src));\n if (loader) {\n newSource = src;\n newLoader = loader;\n break;\n }\n }\n if (isVideoQualitySrc(newSource)) {\n const currentQuality = quality(), sourceQuality = sources.find((s) => s.src === currentQuality?.src);\n if (peek(started)) {\n savedState.set({\n paused: peek(paused),\n currentTime: peek(currentTime)\n });\n } else {\n savedState.set(null);\n }\n if (sourceQuality) {\n newSource = sourceQuality;\n triggerEvent = new DOMEvent(\"quality-change\", {\n detail: { quality: currentQuality }\n });\n }\n }\n if (!isSameSrc(currentSource, newSource)) {\n this.#notifySourceChange(newSource, newLoader, triggerEvent);\n }\n if (newLoader !== peek(this.#loader)) {\n this.#notifyLoaderChange(newLoader, triggerEvent);\n }\n return newSource;\n }\n #notifySourceChange(src, loader, trigger) {\n this.#media.notify(\"source-change\", src, trigger);\n this.#media.notify(\"media-type-change\", loader?.mediaType(src) || \"unknown\", trigger);\n }\n #notifyLoaderChange(loader, trigger) {\n this.#media.$providerSetup.set(false);\n this.#media.notify(\"provider-change\", null, trigger);\n loader && peek(() => loader.preconnect?.(this.#media));\n this.#loader.set(loader);\n this.#media.notify(\"provider-loader-change\", loader, trigger);\n }\n #onSetup() {\n const provider = this.#media.$provider();\n if (!provider || peek(this.#media.$providerSetup)) return;\n if (this.#media.$state.canLoad()) {\n scoped(() => provider.setup(), provider.scope);\n this.#media.$providerSetup.set(true);\n return;\n }\n peek(() => provider.preconnect?.());\n }\n #onLoadSource() {\n if (!this.#media.$providerSetup()) return;\n const provider = this.#media.$provider(), source = this.#media.$state.source(), crossOrigin = peek(this.#media.$state.crossOrigin), preferNativeHLS = peek(this.#media.$props.preferNativeHLS);\n if (isSameSrc(provider?.currentSrc, source)) {\n return;\n }\n if (this.#media.$state.canLoad()) {\n const abort = new AbortController();\n if (isHLSSrc(source)) {\n if (preferNativeHLS || !isHLSSupported()) {\n resolveStreamTypeFromHLSManifest(source.src, {\n credentials: getRequestCredentials(crossOrigin),\n signal: abort.signal\n }).then((streamType) => {\n this.#media.notify(\"stream-type-change\", streamType);\n }).catch(noop);\n }\n } else if (isDASHSrc(source)) {\n resolveStreamTypeFromDASHManifest(source.src, {\n credentials: getRequestCredentials(crossOrigin),\n signal: abort.signal\n }).then((streamType) => {\n this.#media.notify(\"stream-type-change\", streamType);\n }).catch(noop);\n } else {\n this.#media.notify(\"stream-type-change\", \"on-demand\");\n }\n peek(() => {\n const preload = peek(this.#media.$state.preload);\n return provider?.loadSource(source, preload).catch((error) => {\n });\n });\n return () => abort.abort();\n }\n try {\n isString(source.src) && preconnect(new URL(source.src).origin);\n } catch (error) {\n }\n }\n #onLoadPoster() {\n const loader = this.#loader(), { providedPoster, source, canLoadPoster } = this.#media.$state;\n if (!loader || !loader.loadPoster || !source() || !canLoadPoster() || providedPoster()) return;\n const abort = new AbortController(), trigger = new DOMEvent(\"source-change\", { detail: source });\n loader.loadPoster(source(), this.#media, abort).then((url) => {\n this.#media.notify(\"poster-change\", url || \"\", trigger);\n }).catch(() => {\n this.#media.notify(\"poster-change\", \"\", trigger);\n });\n return () => {\n abort.abort();\n };\n }\n}\nfunction normalizeSrc(src) {\n return (isArray(src) ? src : [src]).map((src2) => {\n if (isString(src2)) {\n return { src: src2, type: inferType(src2) };\n } else {\n return { ...src2, type: inferType(src2.src, src2.type) };\n }\n });\n}\nfunction inferType(src, type) {\n if (isString(type) && type.length) {\n return type;\n } else if (isString(src) && sourceTypes.has(src)) {\n return sourceTypes.get(src);\n } else if (!type && isHLSSrc({ src, type: \"\" })) {\n return \"application/x-mpegurl\";\n } else if (!type && isDASHSrc({ src, type: \"\" })) {\n return \"application/dash+xml\";\n } else if (!isString(src) || src.startsWith(\"blob:\")) {\n return \"video/object\";\n } else if (src.includes(\"youtube\") || src.includes(\"youtu.be\")) {\n return \"video/youtube\";\n } else if (src.includes(\"vimeo\") && !src.includes(\"progressive_redirect\") && !src.includes(\".m3u8\")) {\n return \"video/vimeo\";\n }\n return \"?\";\n}\nfunction isSameSrc(a, b) {\n return a?.src === b?.src && a?.type === b?.type;\n}\n\nclass Tracks {\n #domTracks;\n #media;\n #prevTracks = [];\n constructor(domTracks, media) {\n this.#domTracks = domTracks;\n this.#media = media;\n effect(this.#onTracksChange.bind(this));\n }\n #onTracksChange() {\n const newTracks = this.#domTracks();\n for (const oldTrack of this.#prevTracks) {\n if (!newTracks.some((t) => t.id === oldTrack.id)) {\n const track = oldTrack.id && this.#media.textTracks.getById(oldTrack.id);\n if (track) this.#media.textTracks.remove(track);\n }\n }\n for (const newTrack of newTracks) {\n const id = newTrack.id || TextTrack.createId(newTrack);\n if (!this.#media.textTracks.getById(id)) {\n newTrack.id = id;\n this.#media.textTracks.add(newTrack);\n }\n }\n this.#prevTracks = newTracks;\n }\n}\n\nclass MediaProvider extends Component {\n static props = {\n loaders: []\n };\n static state = new State({\n loader: null\n });\n #media;\n #sources;\n #domSources = signal([]);\n #domTracks = signal([]);\n #loader = null;\n onSetup() {\n this.#media = useMediaContext();\n this.#sources = new SourceSelection(\n this.#domSources,\n this.#media,\n this.$state.loader,\n this.$props.loaders()\n );\n }\n onAttach(el) {\n el.setAttribute(\"data-media-provider\", \"\");\n }\n onConnect(el) {\n this.#sources.connect();\n new Tracks(this.#domTracks, this.#media);\n const resize = new ResizeObserver(animationFrameThrottle(this.#onResize.bind(this)));\n resize.observe(el);\n const mutations = new MutationObserver(this.#onMutation.bind(this));\n mutations.observe(el, { attributes: true, childList: true });\n this.#onResize();\n this.#onMutation();\n onDispose(() => {\n resize.disconnect();\n mutations.disconnect();\n });\n }\n #loadRafId = -1;\n load(target) {\n target?.setAttribute(\"aria-hidden\", \"true\");\n window.cancelAnimationFrame(this.#loadRafId);\n this.#loadRafId = requestAnimationFrame(() => this.#runLoader(target));\n onDispose(() => {\n window.cancelAnimationFrame(this.#loadRafId);\n });\n }\n #runLoader(target) {\n if (!this.scope) return;\n const loader = this.$state.loader(), { $provider } = this.#media;\n if (this.#loader === loader && loader?.target === target && peek($provider)) return;\n this.#destroyProvider();\n this.#loader = loader;\n if (loader) loader.target = target || null;\n if (!loader || !target) return;\n loader.load(this.#media).then((provider) => {\n if (!this.scope) return;\n if (peek(this.$state.loader) !== loader) return;\n this.#media.notify(\"provider-change\", provider);\n });\n }\n onDestroy() {\n this.#loader = null;\n this.#destroyProvider();\n }\n #destroyProvider() {\n this.#media?.notify(\"provider-change\", null);\n }\n #onResize() {\n if (!this.el) return;\n const { player, $state } = this.#media, width = this.el.offsetWidth, height = this.el.offsetHeight;\n if (!player) return;\n $state.mediaWidth.set(width);\n $state.mediaHeight.set(height);\n if (player.el) {\n setStyle(player.el, \"--media-width\", width + \"px\");\n setStyle(player.el, \"--media-height\", height + \"px\");\n }\n }\n #onMutation() {\n const sources = [], tracks = [], children = this.el.children;\n for (const el of children) {\n if (el.hasAttribute(\"data-vds\")) continue;\n if (el instanceof HTMLSourceElement) {\n const src = {\n id: el.id,\n src: el.src,\n type: el.type\n };\n for (const prop of [\"id\", \"src\", \"width\", \"height\", \"bitrate\", \"codec\"]) {\n const value = el.getAttribute(`data-${prop}`);\n if (isString(value)) src[prop] = /id|src|codec/.test(prop) ? value : Number(value);\n }\n sources.push(src);\n } else if (el instanceof HTMLTrackElement) {\n const track = {\n src: el.src,\n kind: el.track.kind,\n language: el.srclang,\n label: el.label,\n default: el.default,\n type: el.getAttribute(\"data-type\")\n };\n tracks.push({\n id: el.id || TextTrack.createId(track),\n ...track\n });\n }\n }\n this.#domSources.set(sources);\n this.#domTracks.set(tracks);\n tick();\n }\n}\nconst mediaprovider__proto = MediaProvider.prototype;\nmethod(mediaprovider__proto, \"load\");\n\nclass MediaAnnouncer extends Component {\n static props = {\n translations: null\n };\n static state = new State({\n label: null,\n busy: false\n });\n #media;\n #initializing = false;\n onSetup() {\n this.#media = useMediaContext();\n }\n onAttach(el) {\n el.style.display = \"contents\";\n }\n onConnect(el) {\n el.setAttribute(\"data-media-announcer\", \"\");\n setAttributeIfEmpty(el, \"role\", \"status\");\n setAttributeIfEmpty(el, \"aria-live\", \"polite\");\n const { busy } = this.$state;\n this.setAttributes({\n \"aria-busy\": () => busy() ? \"true\" : null\n });\n this.#initializing = true;\n effect(this.#watchPaused.bind(this));\n effect(this.#watchVolume.bind(this));\n effect(this.#watchCaptions.bind(this));\n effect(this.#watchFullscreen.bind(this));\n effect(this.#watchPiP.bind(this));\n effect(this.#watchSeeking.bind(this));\n effect(this.#watchLabel.bind(this));\n tick();\n this.#initializing = false;\n }\n #watchPaused() {\n const { paused } = this.#media.$state;\n this.#setLabel(!paused() ? \"Play\" : \"Pause\");\n }\n #watchFullscreen() {\n const { fullscreen } = this.#media.$state;\n this.#setLabel(fullscreen() ? \"Enter Fullscreen\" : \"Exit Fullscreen\");\n }\n #watchPiP() {\n const { pictureInPicture } = this.#media.$state;\n this.#setLabel(pictureInPicture() ? \"Enter PiP\" : \"Exit PiP\");\n }\n #watchCaptions() {\n const { textTrack } = this.#media.$state;\n this.#setLabel(textTrack() ? \"Closed-Captions On\" : \"Closed-Captions Off\");\n }\n #watchVolume() {\n const { muted, volume, audioGain } = this.#media.$state;\n this.#setLabel(\n muted() || volume() === 0 ? \"Mute\" : `${Math.round(volume() * (audioGain() ?? 1) * 100)}% ${this.#translate(\"Volume\")}`\n );\n }\n #startedSeekingAt = -1;\n #seekTimer = -1;\n #watchSeeking() {\n const { seeking, currentTime } = this.#media.$state, isSeeking = seeking();\n if (this.#startedSeekingAt > 0) {\n window.clearTimeout(this.#seekTimer);\n this.#seekTimer = window.setTimeout(() => {\n if (!this.scope) return;\n const newTime = peek(currentTime), seconds = Math.abs(newTime - this.#startedSeekingAt);\n if (seconds >= 1) {\n const isForward = newTime >= this.#startedSeekingAt, spokenTime = formatSpokenTime(seconds);\n this.#setLabel(\n `${this.#translate(isForward ? \"Seek Forward\" : \"Seek Backward\")} ${spokenTime}`\n );\n }\n this.#startedSeekingAt = -1;\n this.#seekTimer = -1;\n }, 300);\n } else if (isSeeking) {\n this.#startedSeekingAt = peek(currentTime);\n }\n }\n #translate(word) {\n const { translations } = this.$props;\n return translations?.()?.[word || \"\"] ?? word;\n }\n #watchLabel() {\n const { label, busy } = this.$state, $label = this.#translate(label());\n if (this.#initializing) return;\n busy.set(true);\n const id = window.setTimeout(() => void busy.set(false), 150);\n this.el && setAttribute(this.el, \"aria-label\", $label);\n if (isString($label)) {\n this.dispatch(\"change\", { detail: $label });\n }\n return () => window.clearTimeout(id);\n }\n #setLabel(word) {\n const { label } = this.$state;\n label.set(word);\n }\n}\n\nclass Controls extends Component {\n static props = {\n hideDelay: 2e3,\n hideOnMouseLeave: false\n };\n #media;\n onSetup() {\n this.#media = useMediaContext();\n effect(this.#watchProps.bind(this));\n }\n onAttach(el) {\n const { pictureInPicture, fullscreen } = this.#media.$state;\n setStyle(el, \"pointer-events\", \"none\");\n setAttributeIfEmpty(el, \"role\", \"group\");\n this.setAttributes({\n \"data-visible\": this.#isShowing.bind(this),\n \"data-fullscreen\": fullscreen,\n \"data-pip\": pictureInPicture\n });\n effect(() => {\n this.dispatch(\"change\", { detail: this.#isShowing() });\n });\n effect(this.#hideControls.bind(this));\n effect(() => {\n const isFullscreen = fullscreen();\n for (const side of [\"top\", \"right\", \"bottom\", \"left\"]) {\n setStyle(el, `padding-${side}`, isFullscreen && `env(safe-area-inset-${side})`);\n }\n });\n }\n #hideControls() {\n if (!this.el) return;\n const { nativeControls } = this.#media.$state, isHidden = nativeControls();\n setAttribute(this.el, \"aria-hidden\", isHidden ? \"true\" : null);\n setStyle(this.el, \"display\", isHidden ? \"none\" : null);\n }\n #watchProps() {\n const { controls } = this.#media.player, { hideDelay, hideOnMouseLeave } = this.$props;\n controls.defaultDelay = hideDelay() === 2e3 ? this.#media.$props.controlsDelay() : hideDelay();\n controls.hideOnMouseLeave = hideOnMouseLeave();\n }\n #isShowing() {\n const { controlsVisible } = this.#media.$state;\n return controlsVisible();\n }\n}\n\nclass ControlsGroup extends Component {\n onAttach(el) {\n if (!el.style.pointerEvents) setStyle(el, \"pointer-events\", \"auto\");\n }\n}\n\nclass Popper extends ViewController {\n #delegate;\n constructor(delegate) {\n super();\n this.#delegate = delegate;\n effect(this.#watchTrigger.bind(this));\n }\n onDestroy() {\n this.#stopAnimationEndListener?.();\n this.#stopAnimationEndListener = null;\n }\n #watchTrigger() {\n const trigger = this.#delegate.trigger();\n if (!trigger) {\n this.hide();\n return;\n }\n const show = this.show.bind(this), hide = this.hide.bind(this);\n this.#delegate.listen(trigger, show, hide);\n }\n #showTimerId = -1;\n #hideRafId = -1;\n #stopAnimationEndListener = null;\n show(trigger) {\n this.#cancelShowing();\n window.cancelAnimationFrame(this.#hideRafId);\n this.#hideRafId = -1;\n this.#stopAnimationEndListener?.();\n this.#stopAnimationEndListener = null;\n this.#showTimerId = window.setTimeout(() => {\n this.#showTimerId = -1;\n const content = this.#delegate.content();\n if (content) content.style.removeProperty(\"display\");\n peek(() => this.#delegate.onChange(true, trigger));\n }, this.#delegate.showDelay?.() ?? 0);\n }\n hide(trigger) {\n this.#cancelShowing();\n peek(() => this.#delegate.onChange(false, trigger));\n this.#hideRafId = requestAnimationFrame(() => {\n this.#cancelShowing();\n this.#hideRafId = -1;\n const content = this.#delegate.content();\n if (content) {\n const onHide = () => {\n content.style.display = \"none\";\n this.#stopAnimationEndListener = null;\n };\n const isAnimated = hasAnimation(content);\n if (isAnimated) {\n this.#stopAnimationEndListener?.();\n const stop = listenEvent(content, \"animationend\", onHide, { once: true });\n this.#stopAnimationEndListener = stop;\n } else {\n onHide();\n }\n }\n });\n }\n #cancelShowing() {\n window.clearTimeout(this.#showTimerId);\n this.#showTimerId = -1;\n }\n}\n\nconst tooltipContext = createContext();\n\nlet id = 0;\nclass Tooltip extends Component {\n static props = {\n showDelay: 700\n };\n #id = `media-tooltip-${++id}`;\n #trigger = signal(null);\n #content = signal(null);\n #showing = signal(false);\n constructor() {\n super();\n new FocusVisibleController();\n const { showDelay } = this.$props;\n new Popper({\n trigger: this.#trigger,\n content: this.#content,\n showDelay,\n listen(trigger, show, hide) {\n effect(() => {\n if ($keyboard()) listenEvent(trigger, \"focus\", show);\n listenEvent(trigger, \"blur\", hide);\n });\n new EventsController(trigger).add(\"touchstart\", (e) => e.preventDefault(), { passive: false }).add(\"mouseenter\", show).add(\"mouseleave\", hide);\n },\n onChange: this.#onShowingChange.bind(this)\n });\n }\n onAttach(el) {\n el.style.setProperty(\"display\", \"contents\");\n }\n onSetup() {\n provideContext(tooltipContext, {\n trigger: this.#trigger,\n content: this.#content,\n showing: this.#showing,\n attachTrigger: this.#attachTrigger.bind(this),\n detachTrigger: this.#detachTrigger.bind(this),\n attachContent: this.#attachContent.bind(this),\n detachContent: this.#detachContent.bind(this)\n });\n }\n #attachTrigger(el) {\n this.#trigger.set(el);\n let tooltipName = el.getAttribute(\"data-media-tooltip\");\n if (tooltipName) {\n this.el?.setAttribute(`data-media-${tooltipName}-tooltip`, \"\");\n }\n setAttribute(el, \"data-describedby\", this.#id);\n }\n #detachTrigger(el) {\n el.removeAttribute(\"data-describedby\");\n el.removeAttribute(\"aria-describedby\");\n this.#trigger.set(null);\n }\n #attachContent(el) {\n el.setAttribute(\"id\", this.#id);\n el.style.display = \"none\";\n setAttributeIfEmpty(el, \"role\", \"tooltip\");\n this.#content.set(el);\n }\n #detachContent(el) {\n el.removeAttribute(\"id\");\n el.removeAttribute(\"role\");\n this.#content.set(null);\n }\n #onShowingChange(isShowing) {\n const trigger = this.#trigger(), content = this.#content();\n if (trigger) {\n setAttribute(trigger, \"aria-describedby\", isShowing ? this.#id : null);\n }\n for (const el of [this.el, trigger, content]) {\n el && setAttribute(el, \"data-visible\", isShowing);\n }\n this.#showing.set(isShowing);\n }\n}\n\nclass TooltipTrigger extends Component {\n constructor() {\n super();\n new FocusVisibleController();\n }\n onConnect(el) {\n onDispose(\n requestScopedAnimationFrame(() => {\n if (!this.connectScope) return;\n this.#attach();\n const tooltip = useContext(tooltipContext);\n onDispose(() => {\n const button = this.#getButton();\n button && tooltip.detachTrigger(button);\n });\n })\n );\n }\n #attach() {\n const button = this.#getButton(), tooltip = useContext(tooltipContext);\n button && tooltip.attachTrigger(button);\n }\n #getButton() {\n const candidate = this.el.firstElementChild;\n return candidate?.localName === \"button\" || candidate?.getAttribute(\"role\") === \"button\" ? candidate : this.el;\n }\n}\n\nclass TooltipContent extends Component {\n static props = {\n placement: \"top center\",\n offset: 0,\n alignOffset: 0\n };\n constructor() {\n super();\n new FocusVisibleController();\n const { placement } = this.$props;\n this.setAttributes({\n \"data-placement\": placement\n });\n }\n onAttach(el) {\n this.#attach(el);\n Object.assign(el.style, {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"max-content\"\n });\n }\n onConnect(el) {\n this.#attach(el);\n const tooltip = useContext(tooltipContext);\n onDispose(() => tooltip.detachContent(el));\n onDispose(\n requestScopedAnimationFrame(() => {\n if (!this.connectScope) return;\n effect(this.#watchPlacement.bind(this));\n })\n );\n }\n #attach(el) {\n const tooltip = useContext(tooltipContext);\n tooltip.attachContent(el);\n }\n #watchPlacement() {\n const { showing } = useContext(tooltipContext);\n if (!showing()) return;\n const { placement, offset: mainOffset, alignOffset } = this.$props;\n return autoPlacement(this.el, this.#getTrigger(), placement(), {\n offsetVarName: \"media-tooltip\",\n xOffset: alignOffset(),\n yOffset: mainOffset()\n });\n }\n #getTrigger() {\n return useContext(tooltipContext).trigger();\n }\n}\n\nclass ToggleButtonController extends ViewController {\n static props = {\n disabled: false\n };\n #delegate;\n constructor(delegate) {\n super();\n this.#delegate = delegate;\n new FocusVisibleController();\n if (delegate.keyShortcut) {\n new ARIAKeyShortcuts(delegate.keyShortcut);\n }\n }\n onSetup() {\n const { disabled } = this.$props;\n this.setAttributes({\n \"data-pressed\": this.#delegate.isPresssed,\n \"aria-pressed\": this.#isARIAPressed.bind(this),\n \"aria-disabled\": () => disabled() ? \"true\" : null\n });\n }\n onAttach(el) {\n setAttributeIfEmpty(el, \"tabindex\", \"0\");\n setAttributeIfEmpty(el, \"role\", \"button\");\n setAttributeIfEmpty(el, \"type\", \"button\");\n }\n onConnect(el) {\n const events = onPress(el, this.#onMaybePress.bind(this));\n for (const type of [\"click\", \"touchstart\"]) {\n events.add(type, this.#onInteraction.bind(this), {\n passive: true\n });\n }\n }\n #isARIAPressed() {\n return ariaBool$1(this.#delegate.isPresssed());\n }\n #onPressed(event) {\n if (isWriteSignal(this.#delegate.isPresssed)) {\n this.#delegate.isPresssed.set((p) => !p);\n }\n }\n #onMaybePress(event) {\n const disabled = this.$props.disabled() || this.el.hasAttribute(\"data-disabled\");\n if (disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n event.preventDefault();\n (this.#delegate.onPress ?? this.#onPressed).call(this, event);\n }\n #onInteraction(event) {\n if (this.$props.disabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n}\n\nclass ToggleButton extends Component {\n static props = {\n disabled: false,\n defaultPressed: false\n };\n #pressed = signal(false);\n /**\n * Whether the toggle is currently in a `pressed` state.\n */\n get pressed() {\n return this.#pressed();\n }\n constructor() {\n super();\n new ToggleButtonController({\n isPresssed: this.#pressed\n });\n }\n}\nconst togglebutton__proto = ToggleButton.prototype;\nprop(togglebutton__proto, \"pressed\");\n\nclass AirPlayButton extends Component {\n static props = ToggleButtonController.props;\n #media;\n constructor() {\n super();\n new ToggleButtonController({\n isPresssed: this.#isPressed.bind(this),\n onPress: this.#onPress.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n const { canAirPlay, isAirPlayConnected } = this.#media.$state;\n this.setAttributes({\n \"data-active\": isAirPlayConnected,\n \"data-supported\": canAirPlay,\n \"data-state\": this.#getState.bind(this),\n \"aria-hidden\": $ariaBool(() => !canAirPlay())\n });\n }\n onAttach(el) {\n el.setAttribute(\"data-media-tooltip\", \"airplay\");\n setARIALabel(el, this.#getDefaultLabel.bind(this));\n }\n #onPress(event) {\n const remote = this.#media.remote;\n remote.requestAirPlay(event);\n }\n #isPressed() {\n const { remotePlaybackType, remotePlaybackState } = this.#media.$state;\n return remotePlaybackType() === \"airplay\" && remotePlaybackState() !== \"disconnected\";\n }\n #getState() {\n const { remotePlaybackType, remotePlaybackState } = this.#media.$state;\n return remotePlaybackType() === \"airplay\" && remotePlaybackState();\n }\n #getDefaultLabel() {\n const { remotePlaybackState } = this.#media.$state;\n return `AirPlay ${remotePlaybackState()}`;\n }\n}\n\nclass GoogleCastButton extends Component {\n static props = ToggleButtonController.props;\n #media;\n constructor() {\n super();\n new ToggleButtonController({\n isPresssed: this.#isPressed.bind(this),\n onPress: this.#onPress.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n const { canGoogleCast, isGoogleCastConnected } = this.#media.$state;\n this.setAttributes({\n \"data-active\": isGoogleCastConnected,\n \"data-supported\": canGoogleCast,\n \"data-state\": this.#getState.bind(this),\n \"aria-hidden\": $ariaBool(() => !canGoogleCast())\n });\n }\n onAttach(el) {\n el.setAttribute(\"data-media-tooltip\", \"google-cast\");\n setARIALabel(el, this.#getDefaultLabel.bind(this));\n }\n #onPress(event) {\n const remote = this.#media.remote;\n remote.requestGoogleCast(event);\n }\n #isPressed() {\n const { remotePlaybackType, remotePlaybackState } = this.#media.$state;\n return remotePlaybackType() === \"google-cast\" && remotePlaybackState() !== \"disconnected\";\n }\n #getState() {\n const { remotePlaybackType, remotePlaybackState } = this.#media.$state;\n return remotePlaybackType() === \"google-cast\" && remotePlaybackState();\n }\n #getDefaultLabel() {\n const { remotePlaybackState } = this.#media.$state;\n return `Google Cast ${remotePlaybackState()}`;\n }\n}\n\nclass PlayButton extends Component {\n static props = ToggleButtonController.props;\n #media;\n constructor() {\n super();\n new ToggleButtonController({\n isPresssed: this.#isPressed.bind(this),\n keyShortcut: \"togglePaused\",\n onPress: this.#onPress.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n const { paused, ended } = this.#media.$state;\n this.setAttributes({\n \"data-paused\": paused,\n \"data-ended\": ended\n });\n }\n onAttach(el) {\n el.setAttribute(\"data-media-tooltip\", \"play\");\n setARIALabel(el, \"Play\");\n }\n #onPress(event) {\n const remote = this.#media.remote;\n this.#isPressed() ? remote.pause(event) : remote.play(event);\n }\n #isPressed() {\n const { paused } = this.#media.$state;\n return !paused();\n }\n}\n\nclass CaptionButton extends Component {\n static props = ToggleButtonController.props;\n #media;\n constructor() {\n super();\n new ToggleButtonController({\n isPresssed: this.#isPressed.bind(this),\n keyShortcut: \"toggleCaptions\",\n onPress: this.#onPress.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n this.setAttributes({\n \"data-active\": this.#isPressed.bind(this),\n \"data-supported\": () => !this.#isHidden(),\n \"aria-hidden\": $ariaBool(this.#isHidden.bind(this))\n });\n }\n onAttach(el) {\n el.setAttribute(\"data-media-tooltip\", \"caption\");\n setARIALabel(el, \"Captions\");\n }\n #onPress(event) {\n this.#media.remote.toggleCaptions(event);\n }\n #isPressed() {\n const { textTrack } = this.#media.$state, track = textTrack();\n return !!track && isTrackCaptionKind(track);\n }\n #isHidden() {\n const { hasCaptions } = this.#media.$state;\n return !hasCaptions();\n }\n}\n\nclass FullscreenButton extends Component {\n static props = {\n ...ToggleButtonController.props,\n target: \"prefer-media\"\n };\n #media;\n constructor() {\n super();\n new ToggleButtonController({\n isPresssed: this.#isPressed.bind(this),\n keyShortcut: \"toggleFullscreen\",\n onPress: this.#onPress.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n const { fullscreen } = this.#media.$state, isSupported = this.#isSupported.bind(this);\n this.setAttributes({\n \"data-active\": fullscreen,\n \"data-supported\": isSupported,\n \"aria-hidden\": $ariaBool(() => !isSupported())\n });\n }\n onAttach(el) {\n el.setAttribute(\"data-media-tooltip\", \"fullscreen\");\n setARIALabel(el, \"Fullscreen\");\n }\n #onPress(event) {\n const remote = this.#media.remote, target = this.$props.target();\n this.#isPressed() ? remote.exitFullscreen(target, event) : remote.enterFullscreen(target, event);\n }\n #isPressed() {\n const { fullscreen } = this.#media.$state;\n return fullscreen();\n }\n #isSupported() {\n const { canFullscreen } = this.#media.$state;\n return canFullscreen();\n }\n}\n\nclass MuteButton extends Component {\n static props = ToggleButtonController.props;\n #media;\n constructor() {\n super();\n new ToggleButtonController({\n isPresssed: this.#isPressed.bind(this),\n keyShortcut: \"toggleMuted\",\n onPress: this.#onPress.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n this.setAttributes({\n \"data-muted\": this.#isPressed.bind(this),\n \"data-state\": this.#getState.bind(this)\n });\n }\n onAttach(el) {\n el.setAttribute(\"data-media-mute-button\", \"\");\n el.setAttribute(\"data-media-tooltip\", \"mute\");\n setARIALabel(el, \"Mute\");\n }\n #onPress(event) {\n const remote = this.#media.remote;\n this.#isPressed() ? remote.unmute(event) : remote.mute(event);\n }\n #isPressed() {\n const { muted, volume } = this.#media.$state;\n return muted() || volume() === 0;\n }\n #getState() {\n const { muted, volume } = this.#media.$state, $volume = volume();\n if (muted() || $volume === 0) return \"muted\";\n else if ($volume >= 0.5) return \"high\";\n else if ($volume < 0.5) return \"low\";\n }\n}\n\nclass PIPButton extends Component {\n static props = ToggleButtonController.props;\n #media;\n constructor() {\n super();\n new ToggleButtonController({\n isPresssed: this.#isPressed.bind(this),\n keyShortcut: \"togglePictureInPicture\",\n onPress: this.#onPress.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n const { pictureInPicture } = this.#media.$state, isSupported = this.#isSupported.bind(this);\n this.setAttributes({\n \"data-active\": pictureInPicture,\n \"data-supported\": isSupported,\n \"aria-hidden\": $ariaBool(() => !isSupported())\n });\n }\n onAttach(el) {\n el.setAttribute(\"data-media-tooltip\", \"pip\");\n setARIALabel(el, \"PiP\");\n }\n #onPress(event) {\n const remote = this.#media.remote;\n this.#isPressed() ? remote.exitPictureInPicture(event) : remote.enterPictureInPicture(event);\n }\n #isPressed() {\n const { pictureInPicture } = this.#media.$state;\n return pictureInPicture();\n }\n #isSupported() {\n const { canPictureInPicture } = this.#media.$state;\n return canPictureInPicture();\n }\n}\n\nclass SeekButton extends Component {\n static props = {\n disabled: false,\n seconds: 30\n };\n #media;\n constructor() {\n super();\n new FocusVisibleController();\n }\n onSetup() {\n this.#media = useMediaContext();\n const { seeking } = this.#media.$state, { seconds } = this.$props, isSupported = this.#isSupported.bind(this);\n this.setAttributes({\n seconds,\n \"data-seeking\": seeking,\n \"data-supported\": isSupported,\n \"aria-hidden\": $ariaBool(() => !isSupported())\n });\n }\n onAttach(el) {\n setAttributeIfEmpty(el, \"tabindex\", \"0\");\n setAttributeIfEmpty(el, \"role\", \"button\");\n setAttributeIfEmpty(el, \"type\", \"button\");\n el.setAttribute(\"data-media-tooltip\", \"seek\");\n setARIALabel(el, this.#getDefaultLabel.bind(this));\n }\n onConnect(el) {\n onPress(el, this.#onPress.bind(this));\n }\n #isSupported() {\n const { canSeek } = this.#media.$state;\n return canSeek();\n }\n #getDefaultLabel() {\n const { seconds } = this.$props;\n return `Seek ${seconds() > 0 ? \"forward\" : \"backward\"} ${seconds()} seconds`;\n }\n #onPress(event) {\n const { seconds, disabled } = this.$props;\n if (disabled()) return;\n const { currentTime } = this.#media.$state, seekTo = currentTime() + seconds();\n this.#media.remote.seek(seekTo, event);\n }\n}\n\nclass LiveButton extends Component {\n static props = {\n disabled: false\n };\n #media;\n constructor() {\n super();\n new FocusVisibleController();\n }\n onSetup() {\n this.#media = useMediaContext();\n const { disabled } = this.$props, { live, liveEdge } = this.#media.$state, isHidden = () => !live();\n this.setAttributes({\n \"data-edge\": liveEdge,\n \"data-hidden\": isHidden,\n \"aria-disabled\": $ariaBool(() => disabled() || liveEdge()),\n \"aria-hidden\": $ariaBool(isHidden)\n });\n }\n onAttach(el) {\n setAttributeIfEmpty(el, \"tabindex\", \"0\");\n setAttributeIfEmpty(el, \"role\", \"button\");\n setAttributeIfEmpty(el, \"type\", \"button\");\n el.setAttribute(\"data-media-tooltip\", \"live\");\n }\n onConnect(el) {\n onPress(el, this.#onPress.bind(this));\n }\n #onPress(event) {\n const { disabled } = this.$props, { liveEdge } = this.#media.$state;\n if (disabled() || liveEdge()) return;\n this.#media.remote.seekToLiveEdge(event);\n }\n}\n\nconst sliderState = new State({\n min: 0,\n max: 100,\n value: 0,\n step: 1,\n pointerValue: 0,\n focused: false,\n dragging: false,\n pointing: false,\n hidden: false,\n get active() {\n return this.dragging || this.focused || this.pointing;\n },\n get fillRate() {\n return calcRate(this.min, this.max, this.value);\n },\n get fillPercent() {\n return this.fillRate * 100;\n },\n get pointerRate() {\n return calcRate(this.min, this.max, this.pointerValue);\n },\n get pointerPercent() {\n return this.pointerRate * 100;\n }\n});\nfunction calcRate(min, max, value) {\n const range = max - min, offset = value - min;\n return range > 0 ? offset / range : 0;\n}\n\nclass IntersectionObserverController extends ViewController {\n #init;\n #observer;\n constructor(init) {\n super();\n this.#init = init;\n }\n onConnect(el) {\n this.#observer = new IntersectionObserver((entries) => {\n this.#init.callback?.(entries, this.#observer);\n }, this.#init);\n this.#observer.observe(el);\n onDispose(this.#onDisconnect.bind(this));\n }\n /**\n * Disconnect any active intersection observers.\n */\n #onDisconnect() {\n this.#observer?.disconnect();\n this.#observer = void 0;\n }\n}\n\nconst sliderContext = createContext();\nconst sliderObserverContext = createContext();\n\nfunction getClampedValue(min, max, value, step) {\n return clampNumber(min, round(value, getNumberOfDecimalPlaces(step)), max);\n}\nfunction getValueFromRate(min, max, rate, step) {\n const boundRate = clampNumber(0, rate, 1), range = max - min, fill = range * boundRate, stepRatio = fill / step, steps = step * Math.round(stepRatio);\n return min + steps;\n}\n\nconst SliderKeyDirection = {\n Left: -1,\n ArrowLeft: -1,\n Up: 1,\n ArrowUp: 1,\n Right: 1,\n ArrowRight: 1,\n Down: -1,\n ArrowDown: -1\n};\nclass SliderEventsController extends ViewController {\n #delegate;\n #media;\n #observer;\n constructor(delegate, media) {\n super();\n this.#delegate = delegate;\n this.#media = media;\n }\n onSetup() {\n if (hasProvidedContext(sliderObserverContext)) {\n this.#observer = useContext(sliderObserverContext);\n }\n }\n onConnect(el) {\n effect(this.#attachEventListeners.bind(this, el));\n effect(this.#attachPointerListeners.bind(this, el));\n if (this.#delegate.swipeGesture) effect(this.#watchSwipeGesture.bind(this));\n }\n #watchSwipeGesture() {\n const { pointer } = this.#media.$state;\n if (pointer() !== \"coarse\" || !this.#delegate.swipeGesture()) {\n this.#provider = null;\n return;\n }\n this.#provider = this.#media.player.el?.querySelector(\n \"media-provider,[data-media-provider]\"\n );\n if (!this.#provider) return;\n new EventsController(this.#provider).add(\"touchstart\", this.#onTouchStart.bind(this), {\n passive: true\n }).add(\"touchmove\", this.#onTouchMove.bind(this), { passive: false });\n }\n #provider = null;\n #touch = null;\n #touchStartValue = null;\n #onTouchStart(event) {\n this.#touch = event.touches[0];\n }\n #onTouchMove(event) {\n if (isNull(this.#touch) || isTouchPinchEvent(event)) return;\n const touch = event.touches[0], xDiff = touch.clientX - this.#touch.clientX, yDiff = touch.clientY - this.#touch.clientY, isDragging = this.$state.dragging();\n if (!isDragging && Math.abs(yDiff) > 5) {\n return;\n }\n if (isDragging) return;\n event.preventDefault();\n if (Math.abs(xDiff) > 20) {\n this.#touch = touch;\n this.#touchStartValue = this.$state.value();\n this.#onStartDragging(this.#touchStartValue, event);\n }\n }\n #attachEventListeners(el) {\n const { hidden } = this.$props;\n listenEvent(el, \"focus\", this.#onFocus.bind(this));\n if (hidden() || this.#delegate.isDisabled()) return;\n new EventsController(el).add(\"keyup\", this.#onKeyUp.bind(this)).add(\"keydown\", this.#onKeyDown.bind(this)).add(\"pointerenter\", this.#onPointerEnter.bind(this)).add(\"pointermove\", this.#onPointerMove.bind(this)).add(\"pointerleave\", this.#onPointerLeave.bind(this)).add(\"pointerdown\", this.#onPointerDown.bind(this));\n }\n #attachPointerListeners(el) {\n if (this.#delegate.isDisabled() || !this.$state.dragging()) return;\n new EventsController(document).add(\"pointerup\", this.#onDocumentPointerUp.bind(this), { capture: true }).add(\"pointermove\", this.#onDocumentPointerMove.bind(this)).add(\"touchmove\", this.#onDocumentTouchMove.bind(this), {\n passive: false\n });\n }\n #onFocus() {\n this.#updatePointerValue(this.$state.value());\n }\n #updateValue(newValue, trigger) {\n const { value, min, max, dragging } = this.$state;\n const clampedValue = Math.max(min(), Math.min(newValue, max()));\n value.set(clampedValue);\n const event = this.createEvent(\"value-change\", { detail: clampedValue, trigger });\n this.dispatch(event);\n this.#delegate.onValueChange?.(event);\n if (dragging()) {\n const event2 = this.createEvent(\"drag-value-change\", { detail: clampedValue, trigger });\n this.dispatch(event2);\n this.#delegate.onDragValueChange?.(event2);\n }\n }\n #updatePointerValue(value, trigger) {\n const { pointerValue, dragging } = this.$state;\n pointerValue.set(value);\n this.dispatch(\"pointer-value-change\", { detail: value, trigger });\n if (dragging()) {\n this.#updateValue(value, trigger);\n }\n }\n #getPointerValue(event) {\n let thumbPositionRate, rect = this.el.getBoundingClientRect(), { min, max } = this.$state;\n if (this.$props.orientation() === \"vertical\") {\n const { bottom: trackBottom, height: trackHeight } = rect;\n thumbPositionRate = (trackBottom - event.clientY) / trackHeight;\n } else {\n if (this.#touch && isNumber(this.#touchStartValue)) {\n const { width } = this.#provider.getBoundingClientRect(), rate = (event.clientX - this.#touch.clientX) / width, range = max() - min(), diff = range * Math.abs(rate);\n thumbPositionRate = (rate < 0 ? this.#touchStartValue - diff : this.#touchStartValue + diff) / range;\n } else {\n const { left: trackLeft, width: trackWidth } = rect;\n thumbPositionRate = (event.clientX - trackLeft) / trackWidth;\n }\n }\n return Math.max(\n min(),\n Math.min(\n max(),\n this.#delegate.roundValue(\n getValueFromRate(min(), max(), thumbPositionRate, this.#delegate.getStep())\n )\n )\n );\n }\n #onPointerEnter(event) {\n this.$state.pointing.set(true);\n }\n #onPointerMove(event) {\n const { dragging } = this.$state;\n if (dragging()) return;\n this.#updatePointerValue(this.#getPointerValue(event), event);\n }\n #onPointerLeave(event) {\n this.$state.pointing.set(false);\n }\n #onPointerDown(event) {\n if (event.button !== 0) return;\n const value = this.#getPointerValue(event);\n this.#onStartDragging(value, event);\n this.#updatePointerValue(value, event);\n }\n #onStartDragging(value, trigger) {\n const { dragging } = this.$state;\n if (dragging()) return;\n dragging.set(true);\n this.#media.remote.pauseControls(trigger);\n const event = this.createEvent(\"drag-start\", { detail: value, trigger });\n this.dispatch(event);\n this.#delegate.onDragStart?.(event);\n this.#observer?.onDragStart?.();\n }\n #onStopDragging(value, trigger) {\n const { dragging } = this.$state;\n if (!dragging()) return;\n dragging.set(false);\n this.#media.remote.resumeControls(trigger);\n const event = this.createEvent(\"drag-end\", { detail: value, trigger });\n this.dispatch(event);\n this.#delegate.onDragEnd?.(event);\n this.#touch = null;\n this.#touchStartValue = null;\n this.#observer?.onDragEnd?.();\n }\n // -------------------------------------------------------------------------------------------\n // Keyboard Events\n // -------------------------------------------------------------------------------------------\n #lastDownKey;\n #repeatedKeys = false;\n #onKeyDown(event) {\n const isValidKey = Object.keys(SliderKeyDirection).includes(event.key);\n if (!isValidKey) return;\n const { key } = event, jumpValue = this.#calcJumpValue(event);\n if (!isNull(jumpValue)) {\n this.#updatePointerValue(jumpValue, event);\n this.#updateValue(jumpValue, event);\n return;\n }\n const newValue = this.#calcNewKeyValue(event);\n if (!this.#repeatedKeys) {\n this.#repeatedKeys = key === this.#lastDownKey;\n if (!this.$state.dragging() && this.#repeatedKeys) {\n this.#onStartDragging(newValue, event);\n }\n }\n this.#updatePointerValue(newValue, event);\n this.#lastDownKey = key;\n }\n #onKeyUp(event) {\n const isValidKey = Object.keys(SliderKeyDirection).includes(event.key);\n if (!isValidKey || !isNull(this.#calcJumpValue(event))) return;\n const newValue = this.#repeatedKeys ? this.$state.pointerValue() : this.#calcNewKeyValue(event);\n this.#updateValue(newValue, event);\n this.#onStopDragging(newValue, event);\n this.#lastDownKey = \"\";\n this.#repeatedKeys = false;\n }\n #calcJumpValue(event) {\n let key = event.key, { min, max } = this.$state;\n if (key === \"Home\" || key === \"PageUp\") {\n return min();\n } else if (key === \"End\" || key === \"PageDown\") {\n return max();\n } else if (!event.metaKey && /^[0-9]$/.test(key)) {\n return (max() - min()) / 10 * Number(key);\n }\n return null;\n }\n #calcNewKeyValue(event) {\n const { key, shiftKey } = event;\n event.preventDefault();\n event.stopPropagation();\n const { shiftKeyMultiplier } = this.$props;\n const { min, max, value, pointerValue } = this.$state, step = this.#delegate.getStep(), keyStep = this.#delegate.getKeyStep();\n const modifiedStep = !shiftKey ? keyStep : keyStep * shiftKeyMultiplier(), direction = Number(SliderKeyDirection[key]), diff = modifiedStep * direction, currentValue = this.#repeatedKeys ? pointerValue() : this.#delegate.getValue?.() ?? value(), steps = (currentValue + diff) / step;\n return Math.max(min(), Math.min(max(), Number((step * steps).toFixed(3))));\n }\n // -------------------------------------------------------------------------------------------\n // Document (Pointer Events)\n // -------------------------------------------------------------------------------------------\n #onDocumentPointerUp(event) {\n if (event.button !== 0) return;\n event.preventDefault();\n event.stopImmediatePropagation();\n const value = this.#getPointerValue(event);\n this.#updatePointerValue(value, event);\n this.#onStopDragging(value, event);\n }\n #onDocumentTouchMove(event) {\n event.preventDefault();\n }\n #onDocumentPointerMove = functionThrottle(\n (event) => {\n this.#updatePointerValue(this.#getPointerValue(event), event);\n },\n 20,\n { leading: true }\n );\n}\n\nconst sliderValueFormatContext = createContext(() => ({}));\n\nclass SliderController extends ViewController {\n static props = {\n hidden: false,\n disabled: false,\n step: 1,\n keyStep: 1,\n orientation: \"horizontal\",\n shiftKeyMultiplier: 5\n };\n #media;\n #delegate;\n #isVisible = signal(true);\n #isIntersecting = signal(true);\n constructor(delegate) {\n super();\n this.#delegate = delegate;\n }\n onSetup() {\n this.#media = useMediaContext();\n const focus = new FocusVisibleController();\n focus.attach(this);\n this.$state.focused = focus.focused.bind(focus);\n if (!hasProvidedContext(sliderValueFormatContext)) {\n provideContext(sliderValueFormatContext, {\n default: \"value\"\n });\n }\n provideContext(sliderContext, {\n orientation: this.$props.orientation,\n disabled: this.#delegate.isDisabled,\n preview: signal(null)\n });\n effect(this.#watchValue.bind(this));\n effect(this.#watchStep.bind(this));\n effect(this.#watchDisabled.bind(this));\n this.#setupAttrs();\n new SliderEventsController(this.#delegate, this.#media).attach(this);\n new IntersectionObserverController({\n callback: this.#onIntersectionChange.bind(this)\n }).attach(this);\n }\n onAttach(el) {\n setAttributeIfEmpty(el, \"role\", \"slider\");\n setAttributeIfEmpty(el, \"tabindex\", \"0\");\n setAttributeIfEmpty(el, \"autocomplete\", \"off\");\n if (IS_SERVER) this.#watchCSSVars();\n else effect(this.#watchCSSVars.bind(this));\n }\n onConnect(el) {\n onDispose(observeVisibility(el, this.#isVisible.set));\n effect(this.#watchHidden.bind(this));\n }\n #onIntersectionChange(entries) {\n this.#isIntersecting.set(entries[0].isIntersecting);\n }\n // -------------------------------------------------------------------------------------------\n // Watch\n // -------------------------------------------------------------------------------------------\n #watchHidden() {\n const { hidden } = this.$props;\n this.$state.hidden.set(hidden() || !this.#isVisible() || !this.#isIntersecting.bind(this));\n }\n #watchValue() {\n const { dragging, value, min, max } = this.$state;\n if (peek(dragging)) return;\n value.set(getClampedValue(min(), max(), value(), this.#delegate.getStep()));\n }\n #watchStep() {\n this.$state.step.set(this.#delegate.getStep());\n }\n #watchDisabled() {\n if (!this.#delegate.isDisabled()) return;\n const { dragging, pointing } = this.$state;\n dragging.set(false);\n pointing.set(false);\n }\n // -------------------------------------------------------------------------------------------\n // ARIA\n // -------------------------------------------------------------------------------------------\n #getARIADisabled() {\n return ariaBool$1(this.#delegate.isDisabled());\n }\n // -------------------------------------------------------------------------------------------\n // Attributes\n // -------------------------------------------------------------------------------------------\n #setupAttrs() {\n const { orientation } = this.$props, { dragging, active, pointing } = this.$state;\n this.setAttributes({\n \"data-dragging\": dragging,\n \"data-pointing\": pointing,\n \"data-active\": active,\n \"aria-disabled\": this.#getARIADisabled.bind(this),\n \"aria-valuemin\": this.#delegate.aria.valueMin ?? this.$state.min,\n \"aria-valuemax\": this.#delegate.aria.valueMax ?? this.$state.max,\n \"aria-valuenow\": this.#delegate.aria.valueNow,\n \"aria-valuetext\": this.#delegate.aria.valueText,\n \"aria-orientation\": orientation\n });\n }\n #watchCSSVars() {\n const { fillPercent, pointerPercent } = this.$state;\n this.#updateSliderVars(round(fillPercent(), 3), round(pointerPercent(), 3));\n }\n #updateSliderVars = animationFrameThrottle((fillPercent, pointerPercent) => {\n this.el?.style.setProperty(\"--slider-fill\", fillPercent + \"%\");\n this.el?.style.setProperty(\"--slider-pointer\", pointerPercent + \"%\");\n });\n}\n\nclass Slider extends Component {\n static props = {\n ...SliderController.props,\n min: 0,\n max: 100,\n value: 0\n };\n static state = sliderState;\n constructor() {\n super();\n new SliderController({\n getStep: this.$props.step,\n getKeyStep: this.$props.keyStep,\n roundValue: Math.round,\n isDisabled: this.$props.disabled,\n aria: {\n valueNow: this.#getARIAValueNow.bind(this),\n valueText: this.#getARIAValueText.bind(this)\n }\n });\n }\n onSetup() {\n effect(this.#watchValue.bind(this));\n effect(this.#watchMinMax.bind(this));\n }\n // -------------------------------------------------------------------------------------------\n // Props\n // -------------------------------------------------------------------------------------------\n #getARIAValueNow() {\n const { value } = this.$state;\n return Math.round(value());\n }\n #getARIAValueText() {\n const { value, max } = this.$state;\n return round(value() / max() * 100, 2) + \"%\";\n }\n // -------------------------------------------------------------------------------------------\n // Watch\n // -------------------------------------------------------------------------------------------\n #watchValue() {\n const { value } = this.$props;\n this.$state.value.set(value());\n }\n #watchMinMax() {\n const { min, max } = this.$props;\n this.$state.min.set(min());\n this.$state.max.set(max());\n }\n}\n\nconst cache = /* @__PURE__ */ new Map(), pending = /* @__PURE__ */ new Map();\nclass ThumbnailsLoader {\n #media;\n #src;\n #crossOrigin;\n $images = signal([]);\n static create(src, crossOrigin) {\n const media = useMediaContext();\n return new ThumbnailsLoader(src, crossOrigin, media);\n }\n constructor(src, crossOrigin, media) {\n this.#src = src;\n this.#crossOrigin = crossOrigin;\n this.#media = media;\n effect(this.#onLoadCues.bind(this));\n }\n #onLoadCues() {\n const { canLoad } = this.#media.$state;\n if (!canLoad()) return;\n const src = this.#src();\n if (!src) return;\n if (isString(src) && cache.has(src)) {\n const cues = cache.get(src);\n cache.delete(src);\n cache.set(src, cues);\n if (cache.size > 99) {\n const firstKey = cache.keys().next().value;\n cache.delete(firstKey);\n }\n this.$images.set(cache.get(src));\n } else if (isString(src)) {\n const crossOrigin = this.#crossOrigin(), currentKey = src + \"::\" + crossOrigin;\n if (!pending.has(currentKey)) {\n const promise = new Promise(async (resolve, reject) => {\n try {\n const response = await fetch(src, {\n credentials: getRequestCredentials(crossOrigin)\n }), isJSON = response.headers.get(\"content-type\") === \"application/json\";\n if (isJSON) {\n const json = await response.json();\n if (isArray(json)) {\n if (json[0] && \"text\" in json[0]) {\n resolve(this.#processVTTCues(json));\n } else {\n for (let i = 0; i < json.length; i++) {\n const image = json[i];\n assert(isObject(image), false);\n assert(\n \"url\" in image && isString(image.url),\n false\n );\n assert(\n \"startTime\" in image && isNumber(image.startTime),\n false\n );\n }\n resolve(json);\n }\n } else {\n resolve(this.#processStoryboard(json));\n }\n return;\n }\n import('media-captions').then(async ({ parseResponse }) => {\n try {\n const { cues } = await parseResponse(response);\n resolve(this.#processVTTCues(cues));\n } catch (e) {\n reject(e);\n }\n });\n } catch (e) {\n reject(e);\n }\n }).then((images) => {\n cache.set(currentKey, images);\n return images;\n }).catch((error) => {\n this.#onError(src, error);\n }).finally(() => {\n if (isString(currentKey)) pending.delete(currentKey);\n });\n pending.set(currentKey, promise);\n }\n pending.get(currentKey)?.then((images) => {\n this.$images.set(images || []);\n });\n } else if (isArray(src)) {\n try {\n this.$images.set(this.#processImages(src));\n } catch (error) {\n this.#onError(src, error);\n }\n } else {\n try {\n this.$images.set(this.#processStoryboard(src));\n } catch (error) {\n this.#onError(src, error);\n }\n }\n return () => {\n this.$images.set([]);\n };\n }\n #processImages(images) {\n const baseURL = this.#resolveBaseUrl();\n return images.map((img, i) => {\n assert(\n img.url && isString(img.url));\n assert(\n \"startTime\" in img && isNumber(img.startTime));\n return {\n ...img,\n url: isString(img.url) ? this.#resolveURL(img.url, baseURL) : img.url\n };\n });\n }\n #processStoryboard(board) {\n assert(isString(board.url));\n assert(isArray(board.tiles) && board.tiles?.length);\n const url = new URL(board.url), images = [];\n const tileWidth = \"tile_width\" in board ? board.tile_width : board.tileWidth, tileHeight = \"tile_height\" in board ? board.tile_height : board.tileHeight;\n for (const tile of board.tiles) {\n images.push({\n url,\n startTime: \"start\" in tile ? tile.start : tile.startTime,\n width: tileWidth,\n height: tileHeight,\n coords: { x: tile.x, y: tile.y }\n });\n }\n return images;\n }\n #processVTTCues(cues) {\n for (let i = 0; i < cues.length; i++) {\n const cue = cues[i];\n assert(\n \"startTime\" in cue && isNumber(cue.startTime));\n assert(\n \"text\" in cue && isString(cue.text));\n }\n const images = [], baseURL = this.#resolveBaseUrl();\n for (const cue of cues) {\n const [url, hash] = cue.text.split(\"#\"), data = this.#resolveData(hash);\n images.push({\n url: this.#resolveURL(url, baseURL),\n startTime: cue.startTime,\n endTime: cue.endTime,\n width: data?.w,\n height: data?.h,\n coords: data && isNumber(data.x) && isNumber(data.y) ? { x: data.x, y: data.y } : void 0\n });\n }\n return images;\n }\n #resolveBaseUrl() {\n let baseURL = peek(this.#src);\n if (!isString(baseURL) || !/^https?:/.test(baseURL)) {\n return location.href;\n }\n return baseURL;\n }\n #resolveURL(src, baseURL) {\n return /^https?:/.test(src) ? new URL(src) : new URL(src, baseURL);\n }\n #resolveData(hash) {\n if (!hash) return {};\n const [hashProps, values] = hash.split(\"=\"), hashValues = values?.split(\",\"), data = {};\n if (!hashProps || !hashValues) {\n return null;\n }\n for (let i = 0; i < hashProps.length; i++) {\n const value = +hashValues[i];\n if (!isNaN(value)) data[hashProps[i]] = value;\n }\n return data;\n }\n #onError(src, error) {\n return;\n }\n}\n\nclass Thumbnail extends Component {\n static props = {\n src: null,\n time: 0,\n crossOrigin: null\n };\n static state = new State({\n src: \"\",\n img: null,\n thumbnails: [],\n activeThumbnail: null,\n crossOrigin: null,\n loading: false,\n error: null,\n hidden: false\n });\n media;\n #loader;\n #styleResets = [];\n onSetup() {\n this.media = useMediaContext();\n this.#loader = ThumbnailsLoader.create(this.$props.src, this.$state.crossOrigin);\n this.#watchCrossOrigin();\n this.setAttributes({\n \"data-loading\": this.#isLoading.bind(this),\n \"data-error\": this.#hasError.bind(this),\n \"data-hidden\": this.$state.hidden,\n \"aria-hidden\": $ariaBool(this.$state.hidden)\n });\n }\n onConnect(el) {\n effect(this.#watchImg.bind(this));\n effect(this.#watchHidden.bind(this));\n effect(this.#watchCrossOrigin.bind(this));\n effect(this.#onLoadStart.bind(this));\n effect(this.#onFindActiveThumbnail.bind(this));\n effect(this.#resize.bind(this));\n }\n #watchImg() {\n const img = this.$state.img();\n if (!img) return;\n new EventsController(img).add(\"load\", this.#onLoaded.bind(this)).add(\"error\", this.#onError.bind(this));\n }\n #watchCrossOrigin() {\n const { crossOrigin: crossOriginProp } = this.$props, { crossOrigin: crossOriginState } = this.$state, { crossOrigin: mediaCrossOrigin } = this.media.$state, crossOrigin = crossOriginProp() !== null ? crossOriginProp() : mediaCrossOrigin();\n crossOriginState.set(crossOrigin === true ? \"anonymous\" : crossOrigin);\n }\n #onLoadStart() {\n const { src, loading, error } = this.$state;\n if (src()) {\n loading.set(true);\n error.set(null);\n }\n return () => {\n this.#resetStyles();\n loading.set(false);\n error.set(null);\n };\n }\n #onLoaded() {\n const { loading, error } = this.$state;\n this.#resize();\n loading.set(false);\n error.set(null);\n }\n #onError(event) {\n const { loading, error } = this.$state;\n loading.set(false);\n error.set(event);\n }\n #isLoading() {\n const { loading, hidden } = this.$state;\n return !hidden() && loading();\n }\n #hasError() {\n const { error } = this.$state;\n return !isNull(error());\n }\n #watchHidden() {\n const { hidden } = this.$state, { duration } = this.media.$state, images = this.#loader.$images();\n hidden.set(this.#hasError() || !Number.isFinite(duration()) || images.length === 0);\n }\n getTime() {\n return this.$props.time();\n }\n #onFindActiveThumbnail() {\n let images = this.#loader.$images();\n if (!images.length) return;\n let time = this.getTime(), { src, activeThumbnail } = this.$state, activeIndex = -1, activeImage = null;\n for (let i = images.length - 1; i >= 0; i--) {\n const image = images[i];\n if (time >= image.startTime && (!image.endTime || time < image.endTime)) {\n activeIndex = i;\n break;\n }\n }\n if (images[activeIndex]) {\n activeImage = images[activeIndex];\n }\n activeThumbnail.set(activeImage);\n src.set(activeImage?.url.href || \"\");\n }\n #resize() {\n if (!this.scope || this.$state.hidden()) return;\n const rootEl = this.el, imgEl = this.$state.img(), thumbnail = this.$state.activeThumbnail();\n if (!imgEl || !thumbnail || !rootEl) return;\n let width = thumbnail.width ?? imgEl.naturalWidth, height = thumbnail?.height ?? imgEl.naturalHeight, {\n maxWidth,\n maxHeight,\n minWidth,\n minHeight,\n width: elWidth,\n height: elHeight\n } = getComputedStyle(this.el);\n if (minWidth === \"100%\") minWidth = parseFloat(elWidth) + \"\";\n if (minHeight === \"100%\") minHeight = parseFloat(elHeight) + \"\";\n let minRatio = Math.max(parseInt(minWidth) / width, parseInt(minHeight) / height), maxRatio = Math.min(\n Math.max(parseInt(minWidth), parseInt(maxWidth)) / width,\n Math.max(parseInt(minHeight), parseInt(maxHeight)) / height\n ), scale = !isNaN(maxRatio) && maxRatio < 1 ? maxRatio : minRatio > 1 ? minRatio : 1;\n this.#style(rootEl, \"--thumbnail-width\", `${width * scale}px`);\n this.#style(rootEl, \"--thumbnail-height\", `${height * scale}px`);\n this.#style(rootEl, \"--thumbnail-aspect-ratio\", String(round(width / height, 5)));\n this.#style(imgEl, \"width\", `${imgEl.naturalWidth * scale}px`);\n this.#style(imgEl, \"height\", `${imgEl.naturalHeight * scale}px`);\n this.#style(\n imgEl,\n \"transform\",\n thumbnail.coords ? `translate(-${thumbnail.coords.x * scale}px, -${thumbnail.coords.y * scale}px)` : \"\"\n );\n this.#style(imgEl, \"max-width\", \"none\");\n }\n #style(el, name, value) {\n el.style.setProperty(name, value);\n this.#styleResets.push(() => el.style.removeProperty(name));\n }\n #resetStyles() {\n for (const reset of this.#styleResets) reset();\n this.#styleResets = [];\n }\n}\n\nclass SliderThumbnail extends Thumbnail {\n #slider;\n onAttach(el) {\n this.#slider = useState(Slider.state);\n }\n getTime() {\n const { duration, clipStartTime } = this.media.$state;\n return clipStartTime() + this.#slider.pointerRate() * duration();\n }\n}\n\nclass SliderVideo extends Component {\n static props = {\n src: null,\n crossOrigin: null\n };\n static state = new State({\n video: null,\n src: null,\n crossOrigin: null,\n canPlay: false,\n error: null,\n hidden: false\n });\n #media;\n #slider;\n get video() {\n return this.$state.video();\n }\n onSetup() {\n this.#media = useMediaContext();\n this.#slider = useState(Slider.state);\n this.#watchCrossOrigin();\n this.setAttributes({\n \"data-loading\": this.#isLoading.bind(this),\n \"data-hidden\": this.$state.hidden,\n \"data-error\": this.#hasError.bind(this),\n \"aria-hidden\": $ariaBool(this.$state.hidden)\n });\n }\n onAttach(el) {\n effect(this.#watchVideo.bind(this));\n effect(this.#watchSrc.bind(this));\n effect(this.#watchCrossOrigin.bind(this));\n effect(this.#watchHidden.bind(this));\n effect(this.#onSrcChange.bind(this));\n effect(this.#onUpdateTime.bind(this));\n }\n #watchVideo() {\n const video = this.$state.video();\n if (!video) return;\n if (video.readyState >= 2) this.#onCanPlay();\n new EventsController(video).add(\"canplay\", this.#onCanPlay.bind(this)).add(\"error\", this.#onError.bind(this));\n }\n #watchSrc() {\n const { src } = this.$state, { canLoad } = this.#media.$state;\n src.set(canLoad() ? this.$props.src() : null);\n }\n #watchCrossOrigin() {\n const { crossOrigin: crossOriginProp } = this.$props, { crossOrigin: crossOriginState } = this.$state, { crossOrigin: mediaCrossOrigin } = this.#media.$state, crossOrigin = crossOriginProp() !== null ? crossOriginProp() : mediaCrossOrigin();\n crossOriginState.set(crossOrigin === true ? \"anonymous\" : crossOrigin);\n }\n #isLoading() {\n const { canPlay, hidden } = this.$state;\n return !canPlay() && !hidden();\n }\n #hasError() {\n const { error } = this.$state;\n return !isNull(error);\n }\n #watchHidden() {\n const { src, hidden } = this.$state, { canLoad, duration } = this.#media.$state;\n hidden.set(canLoad() && (!src() || this.#hasError() || !Number.isFinite(duration())));\n }\n #onSrcChange() {\n const { src, canPlay, error } = this.$state;\n src();\n canPlay.set(false);\n error.set(null);\n }\n #onCanPlay(event) {\n const { canPlay, error } = this.$state;\n canPlay.set(true);\n error.set(null);\n this.dispatch(\"can-play\", { trigger: event });\n }\n #onError(event) {\n const { canPlay, error } = this.$state;\n canPlay.set(false);\n error.set(event);\n this.dispatch(\"error\", { trigger: event });\n }\n #onUpdateTime() {\n const { video, canPlay } = this.$state, { duration } = this.#media.$state, { pointerRate } = this.#slider, media = video(), canUpdate = canPlay() && media && Number.isFinite(duration()) && Number.isFinite(pointerRate());\n if (canUpdate) {\n media.currentTime = pointerRate() * duration();\n }\n }\n}\nconst slidervideo__proto = SliderVideo.prototype;\nprop(slidervideo__proto, \"video\");\n\nclass SliderValue extends Component {\n static props = {\n type: \"pointer\",\n format: null,\n showHours: false,\n showMs: false,\n padHours: null,\n padMinutes: null,\n decimalPlaces: 2\n };\n #format;\n #text;\n #slider;\n onSetup() {\n this.#slider = useState(Slider.state);\n this.#format = useContext(sliderValueFormatContext);\n this.#text = computed(this.getValueText.bind(this));\n }\n /**\n * Returns the current value formatted as text based on prop settings.\n */\n getValueText() {\n const {\n type,\n format: $format,\n decimalPlaces,\n padHours,\n padMinutes,\n showHours,\n showMs\n } = this.$props, { value: sliderValue, pointerValue, min, max } = this.#slider, format = $format?.() ?? this.#format.default;\n const value = type() === \"current\" ? sliderValue() : pointerValue();\n if (format === \"percent\") {\n const range = max() - min();\n const percent = value / range * 100;\n return (this.#format.percent ?? round)(percent, decimalPlaces()) + \"%\";\n } else if (format === \"time\") {\n return (this.#format.time ?? formatTime)(value, {\n padHrs: padHours(),\n padMins: padMinutes(),\n showHrs: showHours(),\n showMs: showMs()\n });\n } else {\n return (this.#format.value?.(value) ?? value.toFixed(2)) + \"\";\n }\n }\n}\nconst slidervalue__proto = SliderValue.prototype;\nmethod(slidervalue__proto, \"getValueText\");\n\nclass SliderPreview extends Component {\n static props = {\n offset: 0,\n noClamp: false\n };\n #slider;\n onSetup() {\n this.#slider = useContext(sliderContext);\n const { active } = useState(Slider.state);\n this.setAttributes({\n \"data-visible\": active\n });\n }\n onAttach(el) {\n Object.assign(el.style, {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"max-content\"\n });\n }\n onConnect(el) {\n const { preview } = this.#slider;\n preview.set(el);\n onDispose(() => preview.set(null));\n effect(this.#updatePlacement.bind(this));\n const resize = new ResizeObserver(this.#updatePlacement.bind(this));\n resize.observe(el);\n onDispose(() => resize.disconnect());\n }\n #updatePlacement = animationFrameThrottle(() => {\n const { disabled, orientation } = this.#slider;\n if (disabled()) return;\n const el = this.el, { offset, noClamp } = this.$props;\n if (!el) return;\n updateSliderPreviewPlacement(el, {\n clamp: !noClamp(),\n offset: offset(),\n orientation: orientation()\n });\n });\n}\nfunction updateSliderPreviewPlacement(el, {\n clamp,\n offset,\n orientation\n}) {\n const computedStyle = getComputedStyle(el), width = parseFloat(computedStyle.width), height = parseFloat(computedStyle.height), styles = {\n top: null,\n right: null,\n bottom: null,\n left: null\n };\n styles[orientation === \"horizontal\" ? \"bottom\" : \"left\"] = `calc(100% + var(--media-slider-preview-offset, ${offset}px))`;\n if (orientation === \"horizontal\") {\n const widthHalf = width / 2;\n if (!clamp) {\n styles.left = `calc(var(--slider-pointer) - ${widthHalf}px)`;\n } else {\n const leftClamp = `max(0px, calc(var(--slider-pointer) - ${widthHalf}px))`, rightClamp = `calc(100% - ${width}px)`;\n styles.left = `min(${leftClamp}, ${rightClamp})`;\n }\n } else {\n const heightHalf = height / 2;\n if (!clamp) {\n styles.bottom = `calc(var(--slider-pointer) - ${heightHalf}px)`;\n } else {\n const topClamp = `max(${heightHalf}px, calc(var(--slider-pointer) - ${heightHalf}px))`, bottomClamp = `calc(100% - ${height}px)`;\n styles.bottom = `min(${topClamp}, ${bottomClamp})`;\n }\n }\n Object.assign(el.style, styles);\n}\n\nclass VolumeSlider extends Component {\n static props = {\n ...SliderController.props,\n keyStep: 5,\n shiftKeyMultiplier: 2\n };\n static state = sliderState;\n #media;\n onSetup() {\n this.#media = useMediaContext();\n const { audioGain } = this.#media.$state;\n provideContext(sliderValueFormatContext, {\n default: \"percent\",\n value(value) {\n return (value * (audioGain() ?? 1)).toFixed(2);\n },\n percent(value) {\n return Math.round(value * (audioGain() ?? 1));\n }\n });\n new SliderController({\n getStep: this.$props.step,\n getKeyStep: this.$props.keyStep,\n roundValue: Math.round,\n isDisabled: this.#isDisabled.bind(this),\n aria: {\n valueMax: this.#getARIAValueMax.bind(this),\n valueNow: this.#getARIAValueNow.bind(this),\n valueText: this.#getARIAValueText.bind(this)\n },\n onDragValueChange: this.#onDragValueChange.bind(this),\n onValueChange: this.#onValueChange.bind(this)\n }).attach(this);\n effect(this.#watchVolume.bind(this));\n }\n onAttach(el) {\n el.setAttribute(\"data-media-volume-slider\", \"\");\n setAttributeIfEmpty(el, \"aria-label\", \"Volume\");\n const { canSetVolume } = this.#media.$state;\n this.setAttributes({\n \"data-supported\": canSetVolume,\n \"aria-hidden\": $ariaBool(() => !canSetVolume())\n });\n }\n #getARIAValueNow() {\n const { value } = this.$state, { audioGain } = this.#media.$state;\n return Math.round(value() * (audioGain() ?? 1));\n }\n #getARIAValueText() {\n const { value, max } = this.$state, { audioGain } = this.#media.$state;\n return round(value() / max() * (audioGain() ?? 1) * 100, 2) + \"%\";\n }\n #getARIAValueMax() {\n const { audioGain } = this.#media.$state;\n return this.$state.max() * (audioGain() ?? 1);\n }\n #isDisabled() {\n const { disabled } = this.$props, { canSetVolume } = this.#media.$state;\n return disabled() || !canSetVolume();\n }\n #watchVolume() {\n const { muted, volume } = this.#media.$state;\n const newValue = muted() ? 0 : volume() * 100;\n this.$state.value.set(newValue);\n this.dispatch(\"value-change\", { detail: newValue });\n }\n #throttleVolumeChange = functionThrottle(this.#onVolumeChange.bind(this), 25);\n #onVolumeChange(event) {\n if (!event.trigger) return;\n const mediaVolume = round(event.detail / 100, 3);\n this.#media.remote.changeVolume(mediaVolume, event);\n }\n #onValueChange(event) {\n this.#throttleVolumeChange(event);\n }\n #onDragValueChange(event) {\n this.#throttleVolumeChange(event);\n }\n}\n\nclass AudioGainSlider extends Component {\n static props = {\n ...SliderController.props,\n step: 25,\n keyStep: 25,\n shiftKeyMultiplier: 2,\n min: 0,\n max: 300\n };\n static state = sliderState;\n #media;\n onSetup() {\n this.#media = useMediaContext();\n provideContext(sliderValueFormatContext, {\n default: \"percent\",\n percent: (_, decimalPlaces) => {\n return round(this.$state.value(), decimalPlaces) + \"%\";\n }\n });\n new SliderController({\n getStep: this.$props.step,\n getKeyStep: this.$props.keyStep,\n roundValue: Math.round,\n isDisabled: this.#isDisabled.bind(this),\n aria: {\n valueNow: this.#getARIAValueNow.bind(this),\n valueText: this.#getARIAValueText.bind(this)\n },\n onDragValueChange: this.#onDragValueChange.bind(this),\n onValueChange: this.#onValueChange.bind(this)\n }).attach(this);\n effect(this.#watchMinMax.bind(this));\n effect(this.#watchAudioGain.bind(this));\n }\n onAttach(el) {\n el.setAttribute(\"data-media-audio-gain-slider\", \"\");\n setAttributeIfEmpty(el, \"aria-label\", \"Audio Boost\");\n const { canSetAudioGain } = this.#media.$state;\n this.setAttributes({\n \"data-supported\": canSetAudioGain,\n \"aria-hidden\": $ariaBool(() => !canSetAudioGain())\n });\n }\n #getARIAValueNow() {\n const { value } = this.$state;\n return Math.round(value());\n }\n #getARIAValueText() {\n const { value } = this.$state;\n return value() + \"%\";\n }\n #watchMinMax() {\n const { min, max } = this.$props;\n this.$state.min.set(min());\n this.$state.max.set(max());\n }\n #watchAudioGain() {\n const { audioGain } = this.#media.$state, value = ((audioGain() ?? 1) - 1) * 100;\n this.$state.value.set(value);\n this.dispatch(\"value-change\", { detail: value });\n }\n #isDisabled() {\n const { disabled } = this.$props, { canSetAudioGain } = this.#media.$state;\n return disabled() || !canSetAudioGain();\n }\n #onAudioGainChange(event) {\n if (!event.trigger) return;\n const gain = round(1 + event.detail / 100, 2);\n this.#media.remote.changeAudioGain(gain, event);\n }\n #onValueChange(event) {\n this.#onAudioGainChange(event);\n }\n #onDragValueChange(event) {\n this.#onAudioGainChange(event);\n }\n}\n\nclass SpeedSlider extends Component {\n static props = {\n ...SliderController.props,\n step: 0.25,\n keyStep: 0.25,\n shiftKeyMultiplier: 2,\n min: 0,\n max: 2\n };\n static state = sliderState;\n #media;\n onSetup() {\n this.#media = useMediaContext();\n new SliderController({\n getStep: this.$props.step,\n getKeyStep: this.$props.keyStep,\n roundValue: this.#roundValue,\n isDisabled: this.#isDisabled.bind(this),\n aria: {\n valueNow: this.#getARIAValueNow.bind(this),\n valueText: this.#getARIAValueText.bind(this)\n },\n onDragValueChange: this.#onDragValueChange.bind(this),\n onValueChange: this.#onValueChange.bind(this)\n }).attach(this);\n effect(this.#watchMinMax.bind(this));\n effect(this.#watchPlaybackRate.bind(this));\n }\n onAttach(el) {\n el.setAttribute(\"data-media-speed-slider\", \"\");\n setAttributeIfEmpty(el, \"aria-label\", \"Speed\");\n const { canSetPlaybackRate } = this.#media.$state;\n this.setAttributes({\n \"data-supported\": canSetPlaybackRate,\n \"aria-hidden\": $ariaBool(() => !canSetPlaybackRate())\n });\n }\n #getARIAValueNow() {\n const { value } = this.$state;\n return value();\n }\n #getARIAValueText() {\n const { value } = this.$state;\n return value() + \"x\";\n }\n #watchMinMax() {\n const { min, max } = this.$props;\n this.$state.min.set(min());\n this.$state.max.set(max());\n }\n #watchPlaybackRate() {\n const { playbackRate } = this.#media.$state;\n const newValue = playbackRate();\n this.$state.value.set(newValue);\n this.dispatch(\"value-change\", { detail: newValue });\n }\n #roundValue(value) {\n return round(value, 2);\n }\n #isDisabled() {\n const { disabled } = this.$props, { canSetPlaybackRate } = this.#media.$state;\n return disabled() || !canSetPlaybackRate();\n }\n #throttledSpeedChange = functionThrottle(this.#onPlaybackRateChange.bind(this), 25);\n #onPlaybackRateChange(event) {\n if (!event.trigger) return;\n const rate = event.detail;\n this.#media.remote.changePlaybackRate(rate, event);\n }\n #onValueChange(event) {\n this.#throttledSpeedChange(event);\n }\n #onDragValueChange(event) {\n this.#throttledSpeedChange(event);\n }\n}\n\nclass QualitySlider extends Component {\n static props = {\n ...SliderController.props,\n step: 1,\n keyStep: 1,\n shiftKeyMultiplier: 1\n };\n static state = sliderState;\n #media;\n #sortedQualities = computed(() => {\n const { qualities } = this.#media.$state;\n return sortVideoQualities(qualities());\n });\n onSetup() {\n this.#media = useMediaContext();\n new SliderController({\n getStep: this.$props.step,\n getKeyStep: this.$props.keyStep,\n roundValue: Math.round,\n isDisabled: this.#isDisabled.bind(this),\n aria: {\n valueNow: this.#getARIAValueNow.bind(this),\n valueText: this.#getARIAValueText.bind(this)\n },\n onDragValueChange: this.#onDragValueChange.bind(this),\n onValueChange: this.#onValueChange.bind(this)\n }).attach(this);\n effect(this.#watchMax.bind(this));\n effect(this.#watchQuality.bind(this));\n }\n onAttach(el) {\n el.setAttribute(\"data-media-quality-slider\", \"\");\n setAttributeIfEmpty(el, \"aria-label\", \"Video Quality\");\n const { qualities, canSetQuality } = this.#media.$state, $supported = computed(() => canSetQuality() && qualities().length > 0);\n this.setAttributes({\n \"data-supported\": $supported,\n \"aria-hidden\": $ariaBool(() => !$supported())\n });\n }\n #getARIAValueNow() {\n const { value } = this.$state;\n return value();\n }\n #getARIAValueText() {\n const { quality } = this.#media.$state;\n if (!quality()) return \"\";\n const { height, bitrate } = quality(), bitrateText = bitrate && bitrate > 0 ? `${(bitrate / 1e6).toFixed(2)} Mbps` : null;\n return height ? `${height}p${bitrateText ? ` (${bitrateText})` : \"\"}` : \"Auto\";\n }\n #watchMax() {\n const $qualities = this.#sortedQualities();\n this.$state.max.set(Math.max(0, $qualities.length - 1));\n }\n #watchQuality() {\n let { quality } = this.#media.$state, $qualities = this.#sortedQualities(), value = Math.max(0, $qualities.indexOf(quality()));\n this.$state.value.set(value);\n this.dispatch(\"value-change\", { detail: value });\n }\n #isDisabled() {\n const { disabled } = this.$props, { canSetQuality, qualities } = this.#media.$state;\n return disabled() || qualities().length <= 1 || !canSetQuality();\n }\n #throttledQualityChange = functionThrottle(this.#onQualityChange.bind(this), 25);\n #onQualityChange(event) {\n if (!event.trigger) return;\n const { qualities } = this.#media, quality = peek(this.#sortedQualities)[event.detail];\n this.#media.remote.changeQuality(qualities.indexOf(quality), event);\n }\n #onValueChange(event) {\n this.#throttledQualityChange(event);\n }\n #onDragValueChange(event) {\n this.#throttledQualityChange(event);\n }\n}\n\nclass TimeSlider extends Component {\n static props = {\n ...SliderController.props,\n step: 0.1,\n keyStep: 5,\n shiftKeyMultiplier: 2,\n pauseWhileDragging: false,\n noSwipeGesture: false,\n seekingRequestThrottle: 100\n };\n static state = sliderState;\n #media;\n #dispatchSeeking;\n #chapter = signal(null);\n constructor() {\n super();\n const { noSwipeGesture } = this.$props;\n new SliderController({\n swipeGesture: () => !noSwipeGesture(),\n getValue: this.#getValue.bind(this),\n getStep: this.#getStep.bind(this),\n getKeyStep: this.#getKeyStep.bind(this),\n roundValue: this.#roundValue,\n isDisabled: this.#isDisabled.bind(this),\n aria: {\n valueNow: this.#getARIAValueNow.bind(this),\n valueText: this.#getARIAValueText.bind(this)\n },\n onDragStart: this.#onDragStart.bind(this),\n onDragValueChange: this.#onDragValueChange.bind(this),\n onDragEnd: this.#onDragEnd.bind(this),\n onValueChange: this.#onValueChange.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n provideContext(sliderValueFormatContext, {\n default: \"time\",\n value: this.#formatValue.bind(this),\n time: this.#formatTime.bind(this)\n });\n this.setAttributes({\n \"data-chapters\": this.#hasChapters.bind(this)\n });\n this.setStyles({\n \"--slider-progress\": this.#calcBufferedPercent.bind(this)\n });\n effect(this.#watchCurrentTime.bind(this));\n effect(this.#watchSeekingThrottle.bind(this));\n }\n onAttach(el) {\n el.setAttribute(\"data-media-time-slider\", \"\");\n setAttributeIfEmpty(el, \"aria-label\", \"Seek\");\n }\n onConnect(el) {\n effect(this.#watchPreviewing.bind(this));\n watchActiveTextTrack(this.#media.textTracks, \"chapters\", this.#chapter.set);\n }\n #calcBufferedPercent() {\n const { bufferedEnd, duration } = this.#media.$state;\n return round(Math.min(bufferedEnd() / Math.max(duration(), 1), 1) * 100, 3) + \"%\";\n }\n #hasChapters() {\n const { duration } = this.#media.$state;\n return this.#chapter()?.cues.length && Number.isFinite(duration()) && duration() > 0;\n }\n #watchSeekingThrottle() {\n this.#dispatchSeeking = functionThrottle(\n this.#seeking.bind(this),\n this.$props.seekingRequestThrottle()\n );\n }\n #watchCurrentTime() {\n if (this.$state.hidden()) return;\n const { value, dragging } = this.$state, newValue = this.#getValue();\n if (!peek(dragging)) {\n value.set(newValue);\n this.dispatch(\"value-change\", { detail: newValue });\n }\n }\n #watchPreviewing() {\n const player = this.#media.player.el, { preview } = useContext(sliderContext);\n player && preview() && setAttribute(player, \"data-preview\", this.$state.active());\n }\n #seeking(time, event) {\n this.#media.remote.seeking(time, event);\n }\n #seek(time, percent, event) {\n this.#dispatchSeeking.cancel();\n const { live } = this.#media.$state;\n if (live() && percent >= 99) {\n this.#media.remote.seekToLiveEdge(event);\n return;\n }\n this.#media.remote.seek(time, event);\n }\n #playingBeforeDragStart = false;\n #onDragStart(event) {\n const { pauseWhileDragging } = this.$props;\n if (pauseWhileDragging()) {\n const { paused } = this.#media.$state;\n this.#playingBeforeDragStart = !paused();\n this.#media.remote.pause(event);\n }\n }\n #onDragValueChange(event) {\n this.#dispatchSeeking(this.#percentToTime(event.detail), event);\n }\n #onDragEnd(event) {\n const { seeking } = this.#media.$state;\n if (!peek(seeking)) this.#seeking(this.#percentToTime(event.detail), event);\n const percent = event.detail;\n this.#seek(this.#percentToTime(percent), percent, event);\n const { pauseWhileDragging } = this.$props;\n if (pauseWhileDragging() && this.#playingBeforeDragStart) {\n this.#media.remote.play(event);\n this.#playingBeforeDragStart = false;\n }\n }\n #onValueChange(event) {\n const { dragging } = this.$state;\n if (dragging() || !event.trigger) return;\n this.#onDragEnd(event);\n }\n // -------------------------------------------------------------------------------------------\n // Props\n // -------------------------------------------------------------------------------------------\n #getValue() {\n const { currentTime } = this.#media.$state;\n return this.#timeToPercent(currentTime());\n }\n #getStep() {\n const value = this.$props.step() / this.#media.$state.duration() * 100;\n return Number.isFinite(value) ? value : 1;\n }\n #getKeyStep() {\n const value = this.$props.keyStep() / this.#media.$state.duration() * 100;\n return Number.isFinite(value) ? value : 1;\n }\n #roundValue(value) {\n return round(value, 3);\n }\n #isDisabled() {\n const { disabled } = this.$props, { canSeek } = this.#media.$state;\n return disabled() || !canSeek();\n }\n // -------------------------------------------------------------------------------------------\n // ARIA\n // -------------------------------------------------------------------------------------------\n #getARIAValueNow() {\n const { value } = this.$state;\n return Math.round(value());\n }\n #getARIAValueText() {\n const time = this.#percentToTime(this.$state.value()), { duration } = this.#media.$state;\n return Number.isFinite(time) ? `${formatSpokenTime(time)} out of ${formatSpokenTime(duration())}` : \"live\";\n }\n // -------------------------------------------------------------------------------------------\n // Format\n // -------------------------------------------------------------------------------------------\n #percentToTime(percent) {\n const { duration } = this.#media.$state;\n return round(percent / 100 * duration(), 5);\n }\n #timeToPercent(time) {\n const { liveEdge, duration } = this.#media.$state, rate = Math.max(0, Math.min(1, liveEdge() ? 1 : Math.min(time, duration()) / duration()));\n return Number.isNaN(rate) ? 0 : Number.isFinite(rate) ? rate * 100 : 100;\n }\n #formatValue(percent) {\n const time = this.#percentToTime(percent), { live, duration } = this.#media.$state;\n return Number.isFinite(time) ? (live() ? time - duration() : time).toFixed(0) : \"LIVE\";\n }\n #formatTime(percent, options) {\n const time = this.#percentToTime(percent), { live, duration } = this.#media.$state, value = live() ? time - duration() : time;\n return Number.isFinite(time) ? `${value < 0 ? \"-\" : \"\"}${formatTime(Math.abs(value), options)}` : \"LIVE\";\n }\n}\n\nclass SliderChapters extends Component {\n static props = {\n disabled: false\n };\n #media;\n #sliderState;\n #updateScope;\n #titleRef = null;\n #refs = [];\n #$track = signal(null);\n #$cues = signal([]);\n #activeIndex = signal(-1);\n #activePointerIndex = signal(-1);\n #bufferedIndex = 0;\n get cues() {\n return this.#$cues();\n }\n get activeCue() {\n return this.#$cues()[this.#activeIndex()] || null;\n }\n get activePointerCue() {\n return this.#$cues()[this.#activePointerIndex()] || null;\n }\n onSetup() {\n this.#media = useMediaContext();\n this.#sliderState = useState(TimeSlider.state);\n }\n onAttach(el) {\n watchActiveTextTrack(this.#media.textTracks, \"chapters\", this.#setTrack.bind(this));\n effect(this.#watchSource.bind(this));\n }\n onConnect() {\n onDispose(() => this.#reset.bind(this));\n }\n onDestroy() {\n this.#setTrack(null);\n }\n setRefs(refs) {\n this.#refs = refs;\n this.#updateScope?.dispose();\n if (this.#refs.length === 1) {\n const el = this.#refs[0];\n el.style.width = \"100%\";\n el.style.setProperty(\"--chapter-fill\", \"var(--slider-fill)\");\n el.style.setProperty(\"--chapter-progress\", \"var(--slider-progress)\");\n } else if (this.#refs.length > 0) {\n scoped(() => this.#watch(), this.#updateScope = createScope());\n }\n }\n #setTrack(track) {\n if (peek(this.#$track) === track) return;\n this.#reset();\n this.#$track.set(track);\n }\n #reset() {\n this.#refs = [];\n this.#$cues.set([]);\n this.#activeIndex.set(-1);\n this.#activePointerIndex.set(-1);\n this.#bufferedIndex = 0;\n this.#updateScope?.dispose();\n }\n #watch() {\n if (!this.#refs.length) return;\n effect(this.#watchUpdates.bind(this));\n }\n #watchUpdates() {\n const { hidden } = this.#sliderState;\n if (hidden()) return;\n effect(this.#watchContainerWidths.bind(this));\n effect(this.#watchFillPercent.bind(this));\n effect(this.#watchPointerPercent.bind(this));\n effect(this.#watchBufferedPercent.bind(this));\n }\n #watchContainerWidths() {\n const cues = this.#$cues();\n if (!cues.length) return;\n let cue, { seekableStart, seekableEnd } = this.#media.$state, startTime = seekableStart(), endTime = seekableEnd() || cues[cues.length - 1].endTime, duration = endTime - startTime, remainingWidth = 100;\n for (let i = 0; i < cues.length; i++) {\n cue = cues[i];\n if (this.#refs[i]) {\n const width = i === cues.length - 1 ? remainingWidth : round((cue.endTime - Math.max(startTime, cue.startTime)) / duration * 100, 3);\n this.#refs[i].style.width = width + \"%\";\n remainingWidth -= width;\n }\n }\n }\n #watchFillPercent() {\n let { liveEdge, seekableStart, seekableEnd } = this.#media.$state, { fillPercent, value } = this.#sliderState, cues = this.#$cues(), isLiveEdge = liveEdge(), prevActiveIndex = peek(this.#activeIndex), currentChapter = cues[prevActiveIndex];\n let currentActiveIndex = isLiveEdge ? this.#$cues.length - 1 : this.#findActiveChapterIndex(\n currentChapter ? currentChapter.startTime / seekableEnd() * 100 <= peek(value) ? prevActiveIndex : 0 : 0,\n fillPercent()\n );\n if (isLiveEdge || !currentChapter) {\n this.#updateFillPercents(0, cues.length, 100);\n } else if (currentActiveIndex > prevActiveIndex) {\n this.#updateFillPercents(prevActiveIndex, currentActiveIndex, 100);\n } else if (currentActiveIndex < prevActiveIndex) {\n this.#updateFillPercents(currentActiveIndex + 1, prevActiveIndex + 1, 0);\n }\n const percent = isLiveEdge ? 100 : this.#calcPercent(\n cues[currentActiveIndex],\n fillPercent(),\n seekableStart(),\n this.#getEndTime(cues)\n );\n this.#updateFillPercent(this.#refs[currentActiveIndex], percent);\n this.#activeIndex.set(currentActiveIndex);\n }\n #watchPointerPercent() {\n let { hidden, pointerPercent } = this.#sliderState;\n if (hidden()) {\n this.#activePointerIndex.set(-1);\n return;\n }\n const activeIndex = this.#findActiveChapterIndex(0, pointerPercent());\n this.#activePointerIndex.set(activeIndex);\n }\n #updateFillPercents(start, end, percent) {\n for (let i = start; i < end; i++) this.#updateFillPercent(this.#refs[i], percent);\n }\n #updateFillPercent(ref, percent) {\n if (!ref) return;\n ref.style.setProperty(\"--chapter-fill\", percent + \"%\");\n setAttribute(ref, \"data-active\", percent > 0 && percent < 100);\n setAttribute(ref, \"data-ended\", percent === 100);\n }\n #findActiveChapterIndex(startIndex, percent) {\n let chapterPercent = 0, cues = this.#$cues();\n if (percent === 0) return 0;\n else if (percent === 100) return cues.length - 1;\n let { seekableStart } = this.#media.$state, startTime = seekableStart(), endTime = this.#getEndTime(cues);\n for (let i = startIndex; i < cues.length; i++) {\n chapterPercent = this.#calcPercent(cues[i], percent, startTime, endTime);\n if (chapterPercent >= 0 && chapterPercent < 100) return i;\n }\n return 0;\n }\n #watchBufferedPercent() {\n this.#updateBufferedPercent(this.#bufferedPercent());\n }\n #updateBufferedPercent = animationFrameThrottle((bufferedPercent) => {\n let percent, cues = this.#$cues(), { seekableStart } = this.#media.$state, startTime = seekableStart(), endTime = this.#getEndTime(cues);\n for (let i = this.#bufferedIndex; i < this.#refs.length; i++) {\n percent = this.#calcPercent(cues[i], bufferedPercent, startTime, endTime);\n this.#refs[i]?.style.setProperty(\"--chapter-progress\", percent + \"%\");\n if (percent < 100) {\n this.#bufferedIndex = i;\n break;\n }\n }\n });\n #bufferedPercent = computed(this.#calcMediaBufferedPercent.bind(this));\n #calcMediaBufferedPercent() {\n const { bufferedEnd, duration } = this.#media.$state;\n return round(Math.min(bufferedEnd() / Math.max(duration(), 1), 1), 3) * 100;\n }\n #getEndTime(cues) {\n const { seekableEnd } = this.#media.$state, endTime = seekableEnd();\n return Number.isFinite(endTime) ? endTime : cues[cues.length - 1]?.endTime || 0;\n }\n #calcPercent(cue, percent, startTime, endTime) {\n if (!cue) return 0;\n const cues = this.#$cues();\n if (cues.length === 0) return 0;\n const duration = endTime - startTime, cueStartTime = Math.max(0, cue.startTime - startTime), cueEndTime = Math.min(endTime, cue.endTime) - startTime;\n const startRatio = cueStartTime / duration, startPercent = startRatio * 100, endPercent = Math.min(1, startRatio + (cueEndTime - cueStartTime) / duration) * 100;\n return Math.max(\n 0,\n round(\n percent >= endPercent ? 100 : (percent - startPercent) / (endPercent - startPercent) * 100,\n 3\n )\n );\n }\n #fillGaps(cues) {\n let chapters = [], { seekableStart, seekableEnd, duration } = this.#media.$state, startTime = seekableStart(), endTime = seekableEnd();\n cues = cues.filter((cue) => cue.startTime <= endTime && cue.endTime >= startTime);\n const firstCue = cues[0];\n if (firstCue && firstCue.startTime > startTime) {\n chapters.push(new window.VTTCue(startTime, firstCue.startTime, \"\"));\n }\n for (let i = 0; i < cues.length - 1; i++) {\n const currentCue = cues[i], nextCue = cues[i + 1];\n chapters.push(currentCue);\n if (nextCue) {\n const timeDiff = nextCue.startTime - currentCue.endTime;\n if (timeDiff > 0) {\n chapters.push(new window.VTTCue(currentCue.endTime, currentCue.endTime + timeDiff, \"\"));\n }\n }\n }\n const lastCue = cues[cues.length - 1];\n if (lastCue) {\n chapters.push(lastCue);\n const endTime2 = duration();\n if (endTime2 >= 0 && endTime2 - lastCue.endTime > 1) {\n chapters.push(new window.VTTCue(lastCue.endTime, duration(), \"\"));\n }\n }\n return chapters;\n }\n #watchSource() {\n const { source } = this.#media.$state;\n source();\n this.#onTrackChange();\n }\n #onTrackChange() {\n if (!this.scope) return;\n const { disabled } = this.$props;\n if (disabled()) {\n this.#$cues.set([]);\n this.#activeIndex.set(0);\n this.#bufferedIndex = 0;\n return;\n }\n const track = this.#$track();\n if (track) {\n const onCuesChange = this.#onCuesChange.bind(this);\n onCuesChange();\n new EventsController(track).add(\"add-cue\", onCuesChange).add(\"remove-cue\", onCuesChange);\n effect(this.#watchMediaDuration.bind(this));\n }\n this.#titleRef = this.#findChapterTitleRef();\n if (this.#titleRef) effect(this.#onChapterTitleChange.bind(this));\n return () => {\n if (this.#titleRef) {\n this.#titleRef.textContent = \"\";\n this.#titleRef = null;\n }\n };\n }\n #watchMediaDuration() {\n this.#media.$state.duration();\n this.#onCuesChange();\n }\n #onCuesChange = functionDebounce(\n () => {\n const track = peek(this.#$track);\n if (!this.scope || !track || !track.cues.length) return;\n this.#$cues.set(this.#fillGaps(track.cues));\n this.#activeIndex.set(0);\n this.#bufferedIndex = 0;\n },\n 150,\n true\n );\n #onChapterTitleChange() {\n const cue = this.activePointerCue || this.activeCue;\n if (this.#titleRef) this.#titleRef.textContent = cue?.text || \"\";\n }\n #findParentSlider() {\n let node = this.el;\n while (node && node.getAttribute(\"role\") !== \"slider\") {\n node = node.parentElement;\n }\n return node;\n }\n #findChapterTitleRef() {\n const slider = this.#findParentSlider();\n return slider ? slider.querySelector('[data-part=\"chapter-title\"]') : null;\n }\n}\nconst sliderchapters__proto = SliderChapters.prototype;\nprop(sliderchapters__proto, \"cues\");\nprop(sliderchapters__proto, \"activeCue\");\nprop(sliderchapters__proto, \"activePointerCue\");\nmethod(sliderchapters__proto, \"setRefs\");\n\nconst menuContext = createContext();\n\nfunction scrollIntoView(el, options) {\n const scrolls = r(el, options);\n for (const { el: el2, top, left } of scrolls) {\n el2.scroll({ top, left, behavior: options.behavior });\n }\n}\nfunction scrollIntoCenter(el, options = {}) {\n scrollIntoView(el, {\n scrollMode: \"if-needed\",\n block: \"center\",\n inline: \"center\",\n ...options\n });\n}\n\nconst FOCUSABLE_ELEMENTS_SELECTOR = /* @__PURE__ */ [\n \"a[href]\",\n \"[tabindex]\",\n \"input\",\n \"select\",\n \"button\"\n].map((selector) => `${selector}:not([aria-hidden='true'])`).join(\",\");\nconst VALID_KEYS = /* @__PURE__ */ new Set([\n \"Escape\",\n \"Tab\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"Home\",\n \"PageUp\",\n \"End\",\n \"PageDown\",\n \"Enter\",\n \" \"\n]);\nclass MenuFocusController {\n #index = -1;\n #el = null;\n #elements = [];\n #delegate;\n get items() {\n return this.#elements;\n }\n constructor(delegate) {\n this.#delegate = delegate;\n }\n attachMenu(el) {\n listenEvent(el, \"focus\", this.#onFocus.bind(this));\n this.#el = el;\n onDispose(() => {\n this.#el = null;\n });\n }\n listen() {\n if (!this.#el) return;\n this.update();\n new EventsController(this.#el).add(\"keyup\", this.#onKeyUp.bind(this)).add(\"keydown\", this.#onKeyDown.bind(this));\n onDispose(() => {\n this.#index = -1;\n this.#elements = [];\n });\n }\n update() {\n this.#index = 0;\n this.#elements = this.#getFocusableElements();\n }\n scroll(index = this.#findActiveIndex()) {\n const element = this.#elements[index];\n if (element) {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n scrollIntoCenter(element, {\n behavior: \"smooth\",\n boundary: (el) => {\n return !el.hasAttribute(\"data-root\");\n }\n });\n });\n });\n }\n }\n focusActive(scroll = true) {\n const index = this.#findActiveIndex();\n this.#focusAt(index >= 0 ? index : 0, scroll);\n }\n #focusAt(index, scroll = true) {\n this.#index = index;\n if (this.#elements[index]) {\n this.#elements[index].focus({ preventScroll: true });\n if (scroll) this.scroll(index);\n } else {\n this.#el?.focus({ preventScroll: true });\n }\n }\n #findActiveIndex() {\n return this.#elements.findIndex(\n (el) => document.activeElement === el || el.getAttribute(\"role\") === \"menuitemradio\" && el.getAttribute(\"aria-checked\") === \"true\"\n );\n }\n #onFocus() {\n if (this.#index >= 0) return;\n this.update();\n this.focusActive();\n }\n #validateKeyEvent(event) {\n const el = event.target;\n if (wasEnterKeyPressed(event) && el instanceof Element) {\n const role = el.getAttribute(\"role\");\n return !/a|input|select|button/.test(el.localName) && !role;\n }\n return VALID_KEYS.has(event.key);\n }\n #onKeyUp(event) {\n if (!this.#validateKeyEvent(event)) return;\n event.stopPropagation();\n event.preventDefault();\n }\n #onKeyDown(event) {\n if (!this.#validateKeyEvent(event)) return;\n event.stopPropagation();\n event.preventDefault();\n switch (event.key) {\n case \"Escape\":\n this.#delegate.closeMenu(event);\n break;\n case \"Tab\":\n this.#focusAt(this.#nextIndex(event.shiftKey ? -1 : 1));\n break;\n case \"ArrowUp\":\n this.#focusAt(this.#nextIndex(-1));\n break;\n case \"ArrowDown\":\n this.#focusAt(this.#nextIndex(1));\n break;\n case \"Home\":\n case \"PageUp\":\n this.#focusAt(0);\n break;\n case \"End\":\n case \"PageDown\":\n this.#focusAt(this.#elements.length - 1);\n break;\n }\n }\n #nextIndex(delta) {\n let index = this.#index;\n do {\n index = (index + delta + this.#elements.length) % this.#elements.length;\n } while (this.#elements[index]?.offsetParent === null);\n return index;\n }\n #getFocusableElements() {\n if (!this.#el) return [];\n const focusableElements = this.#el.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR), elements = [];\n const is = (node) => {\n return node.getAttribute(\"role\") === \"menu\";\n };\n for (const el of focusableElements) {\n if (isHTMLElement(el) && el.offsetParent !== null && // does not have display: none\n isElementParent(this.#el, el, is)) {\n elements.push(el);\n }\n }\n return elements;\n }\n}\n\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __decorateClass = (decorators, target, key, kind) => {\n var result = __getOwnPropDesc(target, key) ;\n for (var i = decorators.length - 1, decorator; i >= 0; i--)\n if (decorator = decorators[i])\n result = (decorator(target, key, result) ) || result;\n if (result) __defProp(target, key, result);\n return result;\n};\nlet idCount = 0;\nclass Menu extends Component {\n static props = {\n showDelay: 0\n };\n #media;\n #menuId;\n #menuButtonId;\n #expanded = signal(false);\n #disabled = signal(false);\n #trigger = signal(null);\n #content = signal(null);\n #parentMenu;\n #submenus = /* @__PURE__ */ new Set();\n #menuObserver = null;\n #popper;\n #focus;\n #isSliderActive = false;\n #isTriggerDisabled = signal(false);\n #transitionCallbacks = /* @__PURE__ */ new Set();\n get triggerElement() {\n return this.#trigger();\n }\n get contentElement() {\n return this.#content();\n }\n get isSubmenu() {\n return !!this.#parentMenu;\n }\n constructor() {\n super();\n const { showDelay } = this.$props;\n this.#popper = new Popper({\n trigger: this.#trigger,\n content: this.#content,\n showDelay,\n listen: (trigger, show, hide) => {\n onPress(trigger, (event) => {\n if (this.#expanded()) hide(event);\n else show(event);\n });\n const closeTarget = this.#getCloseTarget();\n if (closeTarget) {\n onPress(closeTarget, (event) => {\n event.stopPropagation();\n hide(event);\n });\n }\n },\n onChange: this.#onExpandedChange.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n const currentIdCount = ++idCount;\n this.#menuId = `media-menu-${currentIdCount}`;\n this.#menuButtonId = `media-menu-button-${currentIdCount}`;\n this.#focus = new MenuFocusController({\n closeMenu: this.close.bind(this)\n });\n if (hasProvidedContext(menuContext)) {\n this.#parentMenu = useContext(menuContext);\n }\n this.#observeSliders();\n this.setAttributes({\n \"data-open\": this.#expanded,\n \"data-root\": !this.isSubmenu,\n \"data-submenu\": this.isSubmenu,\n \"data-disabled\": this.#isDisabled.bind(this)\n });\n provideContext(menuContext, {\n button: this.#trigger,\n content: this.#content,\n expanded: this.#expanded,\n hint: signal(\"\"),\n submenu: !!this.#parentMenu,\n disable: this.#disable.bind(this),\n attachMenuButton: this.#attachMenuButton.bind(this),\n attachMenuItems: this.#attachMenuItems.bind(this),\n attachObserver: this.#attachObserver.bind(this),\n disableMenuButton: this.#disableMenuButton.bind(this),\n addSubmenu: this.#addSubmenu.bind(this),\n onTransitionEvent: (callback) => {\n this.#transitionCallbacks.add(callback);\n onDispose(() => {\n this.#transitionCallbacks.delete(callback);\n });\n }\n });\n }\n onAttach(el) {\n el.style.setProperty(\"display\", \"contents\");\n }\n onConnect(el) {\n effect(this.#watchExpanded.bind(this));\n if (this.isSubmenu) {\n this.#parentMenu?.addSubmenu(this);\n }\n }\n onDestroy() {\n this.#trigger.set(null);\n this.#content.set(null);\n this.#menuObserver = null;\n this.#transitionCallbacks.clear();\n }\n #observeSliders() {\n let sliderActiveTimer = -1, parentSliderObserver = hasProvidedContext(sliderObserverContext) ? useContext(sliderObserverContext) : null;\n provideContext(sliderObserverContext, {\n onDragStart: () => {\n parentSliderObserver?.onDragStart?.();\n window.clearTimeout(sliderActiveTimer);\n sliderActiveTimer = -1;\n this.#isSliderActive = true;\n },\n onDragEnd: () => {\n parentSliderObserver?.onDragEnd?.();\n sliderActiveTimer = window.setTimeout(() => {\n this.#isSliderActive = false;\n sliderActiveTimer = -1;\n }, 300);\n }\n });\n }\n #watchExpanded() {\n const expanded = this.#isExpanded();\n if (!this.isSubmenu) this.#onResize();\n this.#updateMenuItemsHidden(expanded);\n if (!expanded) return;\n effect(() => {\n const { height } = this.#media.$state, content = this.#content();\n content && setStyle(content, \"--player-height\", height() + \"px\");\n });\n this.#focus.listen();\n this.listen(\"pointerup\", this.#onPointerUp.bind(this));\n listenEvent(window, \"pointerup\", this.#onWindowPointerUp.bind(this));\n }\n #attachMenuButton(button) {\n const el = button.el, isMenuItem = this.isSubmenu, isARIADisabled = $ariaBool(this.#isDisabled.bind(this));\n setAttributeIfEmpty(el, \"tabindex\", isMenuItem ? \"-1\" : \"0\");\n setAttributeIfEmpty(el, \"role\", isMenuItem ? \"menuitem\" : \"button\");\n setAttribute(el, \"id\", this.#menuButtonId);\n setAttribute(el, \"aria-haspopup\", \"menu\");\n setAttribute(el, \"aria-expanded\", \"false\");\n setAttribute(el, \"data-root\", !this.isSubmenu);\n setAttribute(el, \"data-submenu\", this.isSubmenu);\n const watchAttrs = () => {\n setAttribute(el, \"data-open\", this.#expanded());\n setAttribute(el, \"aria-disabled\", isARIADisabled());\n };\n if (IS_SERVER) watchAttrs();\n else effect(watchAttrs);\n this.#trigger.set(el);\n onDispose(() => {\n this.#trigger.set(null);\n });\n }\n #attachMenuItems(items) {\n const el = items.el;\n el.style.setProperty(\"display\", \"none\");\n setAttribute(el, \"id\", this.#menuId);\n setAttributeIfEmpty(el, \"role\", \"menu\");\n setAttributeIfEmpty(el, \"tabindex\", \"-1\");\n setAttribute(el, \"data-root\", !this.isSubmenu);\n setAttribute(el, \"data-submenu\", this.isSubmenu);\n this.#content.set(el);\n onDispose(() => this.#content.set(null));\n const watchAttrs = () => setAttribute(el, \"data-open\", this.#expanded());\n if (IS_SERVER) watchAttrs();\n else effect(watchAttrs);\n this.#focus.attachMenu(el);\n this.#updateMenuItemsHidden(false);\n const onTransition = this.#onResizeTransition.bind(this);\n if (!this.isSubmenu) {\n items.listen(\"transitionstart\", onTransition);\n items.listen(\"transitionend\", onTransition);\n items.listen(\"animationend\", this.#onResize);\n items.listen(\"vds-menu-resize\", this.#onResize);\n } else {\n this.#parentMenu?.onTransitionEvent(onTransition);\n }\n }\n #attachObserver(observer) {\n this.#menuObserver = observer;\n }\n #updateMenuItemsHidden(expanded) {\n const content = peek(this.#content);\n if (content) setAttribute(content, \"aria-hidden\", ariaBool$1(!expanded));\n }\n #disableMenuButton(disabled) {\n this.#isTriggerDisabled.set(disabled);\n }\n #wasKeyboardExpand = false;\n #onExpandedChange(isExpanded, event) {\n this.#wasKeyboardExpand = isKeyboardEvent(event);\n event?.stopPropagation();\n if (this.#expanded() === isExpanded) return;\n if (this.#isDisabled()) {\n if (isExpanded) this.#popper.hide(event);\n return;\n }\n this.el?.dispatchEvent(\n new Event(\"vds-menu-resize\", {\n bubbles: true,\n composed: true\n })\n );\n const trigger = this.#trigger(), content = this.#content();\n if (trigger) {\n setAttribute(trigger, \"aria-controls\", isExpanded && this.#menuId);\n setAttribute(trigger, \"aria-expanded\", ariaBool$1(isExpanded));\n }\n if (content) setAttribute(content, \"aria-labelledby\", isExpanded && this.#menuButtonId);\n this.#expanded.set(isExpanded);\n this.#toggleMediaControls(event);\n tick();\n if (this.#wasKeyboardExpand) {\n if (isExpanded) content?.focus();\n else trigger?.focus();\n for (const el of [this.el, content]) {\n el && el.setAttribute(\"data-keyboard\", \"\");\n }\n } else {\n for (const el of [this.el, content]) {\n el && el.removeAttribute(\"data-keyboard\");\n }\n }\n this.dispatch(isExpanded ? \"open\" : \"close\", { trigger: event });\n if (isExpanded) {\n if (!this.isSubmenu && this.#media.activeMenu !== this) {\n this.#media.activeMenu?.close(event);\n this.#media.activeMenu = this;\n }\n this.#menuObserver?.onOpen?.(event);\n } else {\n if (this.isSubmenu) {\n for (const el of this.#submenus) el.close(event);\n } else {\n this.#media.activeMenu = null;\n }\n this.#menuObserver?.onClose?.(event);\n }\n if (isExpanded) {\n requestAnimationFrame(this.#updateFocus.bind(this));\n }\n }\n #updateFocus() {\n if (this.#isTransitionActive || this.#isSubmenuOpen) return;\n this.#focus.update();\n requestAnimationFrame(() => {\n if (this.#wasKeyboardExpand) {\n this.#focus.focusActive();\n } else {\n this.#focus.scroll();\n }\n });\n }\n #isExpanded() {\n return !this.#isDisabled() && this.#expanded();\n }\n #isDisabled() {\n return this.#disabled() || this.#isTriggerDisabled();\n }\n #disable(disabled) {\n this.#disabled.set(disabled);\n }\n #onPointerUp(event) {\n const content = this.#content();\n if (this.#isSliderActive || content && isEventInside(content, event)) {\n return;\n }\n event.stopPropagation();\n }\n #onWindowPointerUp(event) {\n const content = this.#content();\n if (this.#isSliderActive || content && isEventInside(content, event)) {\n return;\n }\n this.close(event);\n }\n #getCloseTarget() {\n const target = this.el?.querySelector('[data-part=\"close-target\"]');\n return this.el && target && isElementParent(this.el, target, (node) => node.getAttribute(\"role\") === \"menu\") ? target : null;\n }\n #toggleMediaControls(trigger) {\n if (this.isSubmenu) return;\n if (this.#expanded()) this.#media.remote.pauseControls(trigger);\n else this.#media.remote.resumeControls(trigger);\n }\n #addSubmenu(menu) {\n this.#submenus.add(menu);\n new EventsController(menu).add(\"open\", this.#onSubmenuOpenBind).add(\"close\", this.#onSubmenuCloseBind);\n onDispose(this.#removeSubmenuBind);\n }\n #removeSubmenuBind = this.#removeSubmenu.bind(this);\n #removeSubmenu(menu) {\n this.#submenus.delete(menu);\n }\n #isSubmenuOpen = false;\n #onSubmenuOpenBind = this.#onSubmenuOpen.bind(this);\n #onSubmenuOpen(event) {\n this.#isSubmenuOpen = true;\n const content = this.#content();\n if (this.isSubmenu) {\n this.triggerElement?.setAttribute(\"aria-hidden\", \"true\");\n }\n for (const target of this.#submenus) {\n if (target !== event.target) {\n for (const el of [target.el, target.triggerElement]) {\n el?.setAttribute(\"aria-hidden\", \"true\");\n }\n }\n }\n if (content) {\n const el = event.target.el;\n for (const child of content.children) {\n if (child.contains(el)) {\n child.setAttribute(\"data-open\", \"\");\n } else if (child !== el) {\n child.setAttribute(\"data-hidden\", \"\");\n }\n }\n }\n }\n #onSubmenuCloseBind = this.#onSubmenuClose.bind(this);\n #onSubmenuClose(event) {\n this.#isSubmenuOpen = false;\n const content = this.#content();\n if (this.isSubmenu) {\n this.triggerElement?.setAttribute(\"aria-hidden\", \"false\");\n }\n for (const target of this.#submenus) {\n for (const el of [target.el, target.triggerElement]) {\n el?.setAttribute(\"aria-hidden\", \"false\");\n }\n }\n if (content) {\n for (const child of content.children) {\n child.removeAttribute(\"data-open\");\n child.removeAttribute(\"data-hidden\");\n }\n }\n }\n #onResize = animationFrameThrottle(() => {\n const content = peek(this.#content);\n if (!content || IS_SERVER) return;\n let height = 0, styles = getComputedStyle(content), children = [...content.children];\n for (const prop2 of [\"paddingTop\", \"paddingBottom\", \"borderTopWidth\", \"borderBottomWidth\"]) {\n height += parseFloat(styles[prop2]) || 0;\n }\n for (const child of children) {\n if (isHTMLElement(child) && child.style.display === \"contents\") {\n children.push(...child.children);\n } else if (child.nodeType === 3) {\n height += parseFloat(getComputedStyle(child).fontSize);\n } else if (isHTMLElement(child)) {\n if (!isElementVisible(child)) continue;\n const style = getComputedStyle(child);\n height += child.offsetHeight + (parseFloat(style.marginTop) || 0) + (parseFloat(style.marginBottom) || 0);\n }\n }\n setStyle(content, \"--menu-height\", height + \"px\");\n });\n #isTransitionActive = false;\n #onResizeTransition(event) {\n const content = this.#content();\n if (content && event.propertyName === \"height\") {\n this.#isTransitionActive = event.type === \"transitionstart\";\n setAttribute(content, \"data-transition\", this.#isTransitionActive ? \"height\" : null);\n if (this.#expanded()) this.#updateFocus();\n }\n for (const callback of this.#transitionCallbacks) callback(event);\n }\n open(trigger) {\n if (peek(this.#expanded)) return;\n this.#popper.show(trigger);\n tick();\n }\n close(trigger) {\n if (!peek(this.#expanded)) return;\n this.#popper.hide(trigger);\n tick();\n }\n}\n__decorateClass([\n prop\n], Menu.prototype, \"triggerElement\");\n__decorateClass([\n prop\n], Menu.prototype, \"contentElement\");\n__decorateClass([\n prop\n], Menu.prototype, \"isSubmenu\");\n__decorateClass([\n method\n], Menu.prototype, \"open\");\n__decorateClass([\n method\n], Menu.prototype, \"close\");\n\nclass MenuButton extends Component {\n static props = {\n disabled: false\n };\n #menu;\n #hintEl = signal(null);\n get expanded() {\n return this.#menu?.expanded() ?? false;\n }\n constructor() {\n super();\n new FocusVisibleController();\n }\n onSetup() {\n this.#menu = useContext(menuContext);\n }\n onAttach(el) {\n this.#menu.attachMenuButton(this);\n effect(this.#watchDisabled.bind(this));\n setAttributeIfEmpty(el, \"type\", \"button\");\n }\n onConnect(el) {\n effect(this.#watchHintEl.bind(this));\n this.#onMutation();\n const mutations = new MutationObserver(this.#onMutation.bind(this));\n mutations.observe(el, { attributeFilter: [\"data-part\"], childList: true, subtree: true });\n onDispose(() => mutations.disconnect());\n onPress(el, (trigger) => {\n this.dispatch(\"select\", { trigger });\n });\n }\n #watchDisabled() {\n this.#menu.disableMenuButton(this.$props.disabled());\n }\n #watchHintEl() {\n const el = this.#hintEl();\n if (!el) return;\n effect(() => {\n const text = this.#menu.hint();\n if (text) el.textContent = text;\n });\n }\n #onMutation() {\n const hintEl = this.el?.querySelector('[data-part=\"hint\"]');\n this.#hintEl.set(hintEl ?? null);\n }\n}\nconst menubutton__proto = MenuButton.prototype;\nprop(menubutton__proto, \"expanded\");\n\nclass MenuItem extends MenuButton {\n}\n\nclass MenuPortal extends Component {\n static props = {\n container: null,\n disabled: false\n };\n #target = null;\n #media;\n onSetup() {\n this.#media = useMediaContext();\n provideContext(menuPortalContext, {\n attach: this.#attachElement.bind(this)\n });\n }\n onAttach(el) {\n el.style.setProperty(\"display\", \"contents\");\n }\n // Need this so connect scope is defined.\n onConnect(el) {\n }\n onDestroy() {\n this.#target?.remove();\n this.#target = null;\n }\n #attachElement(el) {\n this.#portal(false);\n this.#target = el;\n requestScopedAnimationFrame(() => {\n requestScopedAnimationFrame(() => {\n if (!this.connectScope) return;\n effect(this.#watchDisabled.bind(this));\n });\n });\n }\n #watchDisabled() {\n const { fullscreen } = this.#media.$state, { disabled } = this.$props;\n this.#portal(disabled() === \"fullscreen\" ? !fullscreen() : !disabled());\n }\n #portal(shouldPortal) {\n if (!this.#target) return;\n let container = this.#getContainer(this.$props.container());\n if (!container) return;\n const isPortalled = this.#target.parentElement === container;\n setAttribute(this.#target, \"data-portal\", shouldPortal);\n if (shouldPortal) {\n if (!isPortalled) {\n this.#target.remove();\n container.append(this.#target);\n }\n } else if (isPortalled && this.#target.parentElement === container) {\n this.#target.remove();\n this.el?.append(this.#target);\n }\n }\n #getContainer(selector) {\n if (isHTMLElement(selector)) return selector;\n return selector ? document.querySelector(selector) : document.body;\n }\n}\nconst menuPortalContext = createContext();\n\nclass MenuItems extends Component {\n static props = {\n placement: null,\n offset: 0,\n alignOffset: 0\n };\n #menu;\n constructor() {\n super();\n new FocusVisibleController();\n const { placement } = this.$props;\n this.setAttributes({\n \"data-placement\": placement\n });\n }\n onAttach(el) {\n this.#menu = useContext(menuContext);\n this.#menu.attachMenuItems(this);\n if (hasProvidedContext(menuPortalContext)) {\n const portal = useContext(menuPortalContext);\n if (portal) {\n provideContext(menuPortalContext, null);\n portal.attach(el);\n onDispose(() => portal.attach(null));\n }\n }\n }\n onConnect(el) {\n effect(this.#watchPlacement.bind(this));\n }\n #watchPlacement() {\n const { expanded } = this.#menu;\n if (!this.el || !expanded()) return;\n const placement = this.$props.placement();\n if (!placement) return;\n Object.assign(this.el.style, {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"max-content\"\n });\n const { offset: mainOffset, alignOffset } = this.$props;\n onDispose(\n autoPlacement(this.el, this.#getButton(), placement, {\n offsetVarName: \"media-menu\",\n xOffset: alignOffset(),\n yOffset: mainOffset()\n })\n );\n onDispose(this.#hide.bind(this));\n }\n #hide() {\n if (!this.el) return;\n this.el.removeAttribute(\"style\");\n this.el.style.display = \"none\";\n }\n #getButton() {\n return this.#menu.button();\n }\n}\n\nconst radioControllerContext = createContext();\n\nclass RadioGroupController extends ViewController {\n #group = /* @__PURE__ */ new Set();\n #value = signal(\"\");\n #controller = null;\n onValueChange;\n get values() {\n return Array.from(this.#group).map((radio) => radio.value());\n }\n get value() {\n return this.#value();\n }\n set value(value) {\n this.#onChange(value);\n }\n onSetup() {\n provideContext(radioControllerContext, {\n add: this.#addRadio.bind(this),\n remove: this.#removeRadio.bind(this)\n });\n }\n onAttach(el) {\n const isMenuItem = hasProvidedContext(menuContext);\n if (!isMenuItem) setAttributeIfEmpty(el, \"role\", \"radiogroup\");\n this.setAttributes({ value: this.#value });\n }\n onDestroy() {\n this.#group.clear();\n }\n #addRadio(radio) {\n if (this.#group.has(radio)) return;\n this.#group.add(radio);\n radio.onCheck = this.#onChangeBind;\n radio.check(radio.value() === this.#value());\n }\n #removeRadio(radio) {\n radio.onCheck = null;\n this.#group.delete(radio);\n }\n #onChangeBind = this.#onChange.bind(this);\n #onChange(newValue, trigger) {\n const currentValue = peek(this.#value);\n if (!newValue || newValue === currentValue) return;\n const currentRadio = this.#findRadio(currentValue), newRadio = this.#findRadio(newValue);\n currentRadio?.check(false, trigger);\n newRadio?.check(true, trigger);\n this.#value.set(newValue);\n this.onValueChange?.(newValue, trigger);\n }\n #findRadio(newValue) {\n for (const radio of this.#group) {\n if (newValue === peek(radio.value)) return radio;\n }\n return null;\n }\n}\n\nclass RadioGroup extends Component {\n static props = {\n value: \"\"\n };\n #controller;\n /**\n * A list of radio values that belong this group.\n */\n get values() {\n return this.#controller.values;\n }\n /**\n * The radio value that is checked in this group.\n */\n get value() {\n return this.#controller.value;\n }\n set value(newValue) {\n this.#controller.value = newValue;\n }\n constructor() {\n super();\n this.#controller = new RadioGroupController();\n this.#controller.onValueChange = this.#onValueChange.bind(this);\n }\n onSetup() {\n if (IS_SERVER) this.#watchValue();\n else effect(this.#watchValue.bind(this));\n }\n #watchValue() {\n this.#controller.value = this.$props.value();\n }\n #onValueChange(value, trigger) {\n const event = this.createEvent(\"change\", { detail: value, trigger });\n this.dispatch(event);\n }\n}\nconst radiogroup__proto = RadioGroup.prototype;\nprop(radiogroup__proto, \"values\");\nprop(radiogroup__proto, \"value\");\n\nclass Radio extends Component {\n static props = {\n value: \"\"\n };\n #checked = signal(false);\n #controller = {\n value: this.$props.value,\n check: this.#check.bind(this),\n onCheck: null\n };\n /**\n * Whether this radio is currently checked.\n */\n get checked() {\n return this.#checked();\n }\n constructor() {\n super();\n new FocusVisibleController();\n }\n onSetup() {\n this.setAttributes({\n value: this.$props.value,\n \"data-checked\": this.#checked,\n \"aria-checked\": $ariaBool(this.#checked)\n });\n }\n onAttach(el) {\n const isMenuItem = hasProvidedContext(menuContext);\n setAttributeIfEmpty(el, \"tabindex\", isMenuItem ? \"-1\" : \"0\");\n setAttributeIfEmpty(el, \"role\", isMenuItem ? \"menuitemradio\" : \"radio\");\n effect(this.#watchValue.bind(this));\n }\n onConnect(el) {\n this.#addToGroup();\n onPress(el, this.#onPress.bind(this));\n onDispose(this.#onDisconnect.bind(this));\n }\n #onDisconnect() {\n scoped(() => {\n const group = useContext(radioControllerContext);\n group.remove(this.#controller);\n }, this.connectScope);\n }\n #addToGroup() {\n const group = useContext(radioControllerContext);\n group.add(this.#controller);\n }\n #watchValue() {\n const { value } = this.$props, newValue = value();\n if (peek(this.#checked)) {\n this.#controller.onCheck?.(newValue);\n }\n }\n #onPress(event) {\n if (peek(this.#checked)) return;\n this.#onChange(true, event);\n this.#onSelect(event);\n this.#controller.onCheck?.(peek(this.$props.value), event);\n }\n #check(value, trigger) {\n if (peek(this.#checked) === value) return;\n this.#onChange(value, trigger);\n }\n #onChange(value, trigger) {\n this.#checked.set(value);\n this.dispatch(\"change\", { detail: value, trigger });\n }\n #onSelect(trigger) {\n this.dispatch(\"select\", { trigger });\n }\n}\nconst radio__proto = Radio.prototype;\nprop(radio__proto, \"checked\");\n\nclass Gesture extends Component {\n static props = {\n disabled: false,\n event: void 0,\n action: void 0\n };\n #media;\n #provider = null;\n onSetup() {\n this.#media = useMediaContext();\n const { event, action } = this.$props;\n this.setAttributes({\n event,\n action\n });\n }\n onAttach(el) {\n el.setAttribute(\"data-media-gesture\", \"\");\n el.style.setProperty(\"pointer-events\", \"none\");\n }\n onConnect(el) {\n this.#provider = this.#media.player.el?.querySelector(\n \"[data-media-provider]\"\n );\n effect(this.#attachListener.bind(this));\n }\n #attachListener() {\n let eventType = this.$props.event(), disabled = this.$props.disabled();\n if (!this.#provider || !eventType || disabled) return;\n if (/^dbl/.test(eventType)) {\n eventType = eventType.split(/^dbl/)[1];\n }\n if (eventType === \"pointerup\" || eventType === \"pointerdown\") {\n const pointer = this.#media.$state.pointer();\n if (pointer === \"coarse\") {\n eventType = eventType === \"pointerup\" ? \"touchend\" : \"touchstart\";\n }\n }\n listenEvent(\n this.#provider,\n eventType,\n this.#acceptEvent.bind(this),\n { passive: false }\n );\n }\n #presses = 0;\n #pressTimerId = -1;\n #acceptEvent(event) {\n if (this.$props.disabled() || isPointerEvent(event) && (event.button !== 0 || this.#media.activeMenu) || isTouchEvent(event) && this.#media.activeMenu || isTouchPinchEvent(event) || !this.#inBounds(event)) {\n return;\n }\n event.MEDIA_GESTURE = true;\n event.preventDefault();\n const eventType = peek(this.$props.event), isDblEvent = eventType?.startsWith(\"dbl\");\n if (!isDblEvent) {\n if (this.#presses === 0) {\n setTimeout(() => {\n if (this.#presses === 1) this.#handleEvent(event);\n }, 250);\n }\n } else if (this.#presses === 1) {\n queueMicrotask(() => this.#handleEvent(event));\n clearTimeout(this.#pressTimerId);\n this.#presses = 0;\n return;\n }\n if (this.#presses === 0) {\n this.#pressTimerId = window.setTimeout(() => {\n this.#presses = 0;\n }, 275);\n }\n this.#presses++;\n }\n #handleEvent(event) {\n this.el.setAttribute(\"data-triggered\", \"\");\n requestAnimationFrame(() => {\n if (this.#isTopLayer()) {\n this.#performAction(peek(this.$props.action), event);\n }\n requestAnimationFrame(() => {\n this.el.removeAttribute(\"data-triggered\");\n });\n });\n }\n /** Validate event occurred in gesture bounds. */\n #inBounds(event) {\n if (!this.el) return false;\n if (isPointerEvent(event) || isMouseEvent(event) || isTouchEvent(event)) {\n const touch = isTouchEvent(event) ? event.changedTouches[0] ?? event.touches[0] : void 0;\n const clientX = touch?.clientX ?? event.clientX;\n const clientY = touch?.clientY ?? event.clientY;\n const rect = this.el.getBoundingClientRect();\n const inBounds = clientY >= rect.top && clientY <= rect.bottom && clientX >= rect.left && clientX <= rect.right;\n return event.type.includes(\"leave\") ? !inBounds : inBounds;\n }\n return true;\n }\n /** Validate gesture has the highest z-index in this triggered group. */\n #isTopLayer() {\n const gestures = this.#media.player.el.querySelectorAll(\n \"[data-media-gesture][data-triggered]\"\n );\n return Array.from(gestures).sort(\n (a, b) => +getComputedStyle(b).zIndex - +getComputedStyle(a).zIndex\n )[0] === this.el;\n }\n #performAction(action, trigger) {\n if (!action) return;\n const willTriggerEvent = new DOMEvent(\"will-trigger\", {\n detail: action,\n cancelable: true,\n trigger\n });\n this.dispatchEvent(willTriggerEvent);\n if (willTriggerEvent.defaultPrevented) return;\n const [method, value] = action.replace(/:([a-z])/, \"-$1\").split(\":\");\n if (action.includes(\":fullscreen\")) {\n this.#media.remote.toggleFullscreen(\"prefer-media\", trigger);\n } else if (action.includes(\"seek:\")) {\n this.#media.remote.seek(peek(this.#media.$state.currentTime) + (+value || 0), trigger);\n } else {\n this.#media.remote[kebabToCamelCase(method)](trigger);\n }\n this.dispatch(\"trigger\", {\n detail: action,\n trigger\n });\n }\n}\n\nclass CaptionsTextRenderer {\n priority = 10;\n #track = null;\n #renderer;\n #events;\n constructor(renderer) {\n this.#renderer = renderer;\n }\n attach() {\n }\n canRender() {\n return true;\n }\n detach() {\n this.#events?.abort();\n this.#events = void 0;\n this.#renderer.reset();\n this.#track = null;\n }\n changeTrack(track) {\n if (!track || this.#track === track) return;\n this.#events?.abort();\n this.#events = new EventsController(track);\n if (track.readyState < 2) {\n this.#renderer.reset();\n this.#events.add(\"load\", () => this.#changeTrack(track), { once: true });\n } else {\n this.#changeTrack(track);\n }\n this.#events.add(\"add-cue\", (event) => {\n this.#renderer.addCue(event.detail);\n }).add(\"remove-cue\", (event) => {\n this.#renderer.removeCue(event.detail);\n });\n this.#track = track;\n }\n #changeTrack(track) {\n this.#renderer.changeTrack({\n cues: [...track.cues],\n regions: [...track.regions]\n });\n }\n}\n\nclass Captions extends Component {\n static props = {\n textDir: \"ltr\",\n exampleText: \"Captions look like this.\"\n };\n #media;\n static lib = signal(null);\n onSetup() {\n this.#media = useMediaContext();\n this.setAttributes({\n \"aria-hidden\": $ariaBool(this.#isHidden.bind(this))\n });\n }\n onAttach(el) {\n el.style.setProperty(\"pointer-events\", \"none\");\n }\n onConnect(el) {\n if (!Captions.lib()) {\n import('media-captions').then((lib) => Captions.lib.set(lib));\n }\n effect(this.#watchViewType.bind(this));\n }\n #isHidden() {\n const { textTrack, remotePlaybackState, iOSControls } = this.#media.$state, track = textTrack();\n return iOSControls() || remotePlaybackState() === \"connected\" || !track || !isTrackCaptionKind(track);\n }\n #watchViewType() {\n if (!Captions.lib()) return;\n const { viewType } = this.#media.$state;\n if (viewType() === \"audio\") {\n return this.#setupAudioView();\n } else {\n return this.#setupVideoView();\n }\n }\n #setupAudioView() {\n effect(this.#onTrackChange.bind(this));\n this.#listenToFontStyleChanges(null);\n return () => {\n this.el.textContent = \"\";\n };\n }\n #onTrackChange() {\n if (this.#isHidden()) return;\n this.#onCueChange();\n const { textTrack } = this.#media.$state;\n listenEvent(textTrack(), \"cue-change\", this.#onCueChange.bind(this));\n effect(this.#onUpdateTimedNodes.bind(this));\n }\n #onCueChange() {\n this.el.textContent = \"\";\n if (this.#hideExampleTimer >= 0) {\n this.#removeExample();\n }\n const { realCurrentTime, textTrack } = this.#media.$state, { renderVTTCueString } = Captions.lib(), time = peek(realCurrentTime), activeCues = peek(textTrack).activeCues;\n for (const cue of activeCues) {\n const displayEl = this.#createCueDisplayElement(), cueEl = this.#createCueElement();\n cueEl.innerHTML = renderVTTCueString(cue, time);\n displayEl.append(cueEl);\n this.el.append(cueEl);\n }\n }\n #onUpdateTimedNodes() {\n const { realCurrentTime } = this.#media.$state, { updateTimedVTTCueNodes } = Captions.lib();\n updateTimedVTTCueNodes(this.el, realCurrentTime());\n }\n #setupVideoView() {\n const { CaptionsRenderer } = Captions.lib(), renderer = new CaptionsRenderer(this.el), textRenderer = new CaptionsTextRenderer(renderer);\n this.#media.textRenderers.add(textRenderer);\n effect(this.#watchTextDirection.bind(this, renderer));\n effect(this.#watchMediaTime.bind(this, renderer));\n this.#listenToFontStyleChanges(renderer);\n return () => {\n this.el.textContent = \"\";\n this.#media.textRenderers.remove(textRenderer);\n renderer.destroy();\n };\n }\n #watchTextDirection(renderer) {\n renderer.dir = this.$props.textDir();\n }\n #watchMediaTime(renderer) {\n if (this.#isHidden()) return;\n const { realCurrentTime, textTrack } = this.#media.$state;\n renderer.currentTime = realCurrentTime();\n if (this.#hideExampleTimer >= 0 && textTrack()?.activeCues[0]) {\n this.#removeExample();\n }\n }\n #listenToFontStyleChanges(renderer) {\n const player = this.#media.player;\n if (!player) return;\n const onChange = this.#onFontStyleChange.bind(this, renderer);\n listenEvent(player, \"vds-font-change\", onChange);\n }\n #onFontStyleChange(renderer) {\n if (this.#hideExampleTimer >= 0) {\n this.#hideExample();\n return;\n }\n const { textTrack } = this.#media.$state;\n if (!textTrack()?.activeCues[0]) {\n this.#showExample();\n } else {\n renderer?.update(true);\n }\n }\n #showExample() {\n const display = this.#createCueDisplayElement();\n setAttribute(display, \"data-example\", \"\");\n const cue = this.#createCueElement();\n setAttribute(cue, \"data-example\", \"\");\n cue.textContent = this.$props.exampleText();\n display?.append(cue);\n this.el?.append(display);\n this.el?.setAttribute(\"data-example\", \"\");\n this.#hideExample();\n }\n #hideExampleTimer = -1;\n #hideExample() {\n window.clearTimeout(this.#hideExampleTimer);\n this.#hideExampleTimer = window.setTimeout(this.#removeExample.bind(this), 2500);\n }\n #removeExample() {\n this.el?.removeAttribute(\"data-example\");\n if (this.el?.querySelector(\"[data-example]\")) this.el.textContent = \"\";\n this.#hideExampleTimer = -1;\n }\n #createCueDisplayElement() {\n const el = document.createElement(\"div\");\n setAttribute(el, \"data-part\", \"cue-display\");\n return el;\n }\n #createCueElement() {\n const el = document.createElement(\"div\");\n setAttribute(el, \"data-part\", \"cue\");\n return el;\n }\n}\n\nclass Poster extends Component {\n static props = {\n src: null,\n alt: null,\n crossOrigin: null\n };\n static state = new State({\n img: null,\n src: null,\n alt: null,\n crossOrigin: null,\n loading: true,\n error: null,\n hidden: false\n });\n #media;\n onSetup() {\n this.#media = useMediaContext();\n this.#watchSrc();\n this.#watchAlt();\n this.#watchCrossOrigin();\n this.#watchHidden();\n }\n onAttach(el) {\n el.style.setProperty(\"pointer-events\", \"none\");\n effect(this.#watchImg.bind(this));\n effect(this.#watchSrc.bind(this));\n effect(this.#watchAlt.bind(this));\n effect(this.#watchCrossOrigin.bind(this));\n effect(this.#watchHidden.bind(this));\n const { started } = this.#media.$state;\n this.setAttributes({\n \"data-visible\": () => !started() && !this.$state.hidden(),\n \"data-loading\": this.#isLoading.bind(this),\n \"data-error\": this.#hasError.bind(this),\n \"data-hidden\": this.$state.hidden\n });\n }\n onConnect(el) {\n effect(this.#onPreconnect.bind(this));\n effect(this.#onLoadStart.bind(this));\n }\n #hasError() {\n const { error } = this.$state;\n return !isNull(error());\n }\n #onPreconnect() {\n const { canLoadPoster, poster } = this.#media.$state;\n if (!canLoadPoster() && poster()) preconnect(poster(), \"preconnect\");\n }\n #watchHidden() {\n const { src } = this.$props, { poster, nativeControls } = this.#media.$state;\n this.el && setAttribute(this.el, \"display\", nativeControls() ? \"none\" : null);\n this.$state.hidden.set(this.#hasError() || !(src() || poster()) || nativeControls());\n }\n #isLoading() {\n const { loading, hidden } = this.$state;\n return !hidden() && loading();\n }\n #watchImg() {\n const img = this.$state.img();\n if (!img) return;\n new EventsController(img).add(\"load\", this.#onLoad.bind(this)).add(\"error\", this.#onError.bind(this));\n if (img.complete) this.#onLoad();\n }\n #prevSrc = \"\";\n #watchSrc() {\n const { poster: defaultPoster } = this.#media.$props, { canLoadPoster, providedPoster, inferredPoster } = this.#media.$state;\n const src = this.$props.src() || \"\", poster = src || defaultPoster() || inferredPoster();\n if (this.#prevSrc === providedPoster()) {\n providedPoster.set(src);\n }\n this.$state.src.set(canLoadPoster() && poster.length ? poster : null);\n this.#prevSrc = src;\n }\n #watchAlt() {\n const { src } = this.$props, { alt } = this.$state, { poster } = this.#media.$state;\n alt.set(src() || poster() ? this.$props.alt() : null);\n }\n #watchCrossOrigin() {\n const { crossOrigin: crossOriginProp } = this.$props, { crossOrigin: crossOriginState } = this.$state, { crossOrigin: mediaCrossOrigin, poster: src } = this.#media.$state, crossOrigin = crossOriginProp() !== null ? crossOriginProp() : mediaCrossOrigin();\n crossOriginState.set(\n /ytimg\\.com|vimeo/.test(src() || \"\") ? null : crossOrigin === true ? \"anonymous\" : crossOrigin\n );\n }\n #onLoadStart() {\n const { loading, error } = this.$state, { canLoadPoster, poster } = this.#media.$state;\n loading.set(canLoadPoster() && !!poster());\n error.set(null);\n }\n #onLoad() {\n const { loading, error } = this.$state;\n loading.set(false);\n error.set(null);\n }\n #onError(event) {\n const { loading, error } = this.$state;\n loading.set(false);\n error.set(event);\n }\n}\n\nclass Time extends Component {\n static props = {\n type: \"current\",\n showHours: false,\n padHours: null,\n padMinutes: null,\n remainder: false,\n toggle: false,\n hidden: false\n };\n static state = new State({\n timeText: \"\",\n hidden: false\n });\n #media;\n #invert = signal(null);\n #isVisible = signal(true);\n #isIntersecting = signal(true);\n onSetup() {\n this.#media = useMediaContext();\n this.#watchTime();\n const { type } = this.$props;\n this.setAttributes({\n \"data-type\": type,\n \"data-remainder\": this.#shouldInvert.bind(this)\n });\n new IntersectionObserverController({\n callback: this.#onIntersectionChange.bind(this)\n }).attach(this);\n }\n onAttach(el) {\n if (!el.hasAttribute(\"role\")) effect(this.#watchRole.bind(this));\n effect(this.#watchTime.bind(this));\n }\n onConnect(el) {\n onDispose(observeVisibility(el, this.#isVisible.set));\n effect(this.#watchHidden.bind(this));\n effect(this.#watchToggle.bind(this));\n }\n #onIntersectionChange(entries) {\n this.#isIntersecting.set(entries[0].isIntersecting);\n }\n #watchHidden() {\n const { hidden } = this.$props;\n this.$state.hidden.set(hidden() || !this.#isVisible() || !this.#isIntersecting());\n }\n #watchToggle() {\n if (!this.$props.toggle()) {\n this.#invert.set(null);\n return;\n }\n if (this.el) {\n onPress(this.el, this.#onToggle.bind(this));\n }\n }\n #watchTime() {\n const { hidden, timeText } = this.$state, { duration } = this.#media.$state;\n if (hidden()) return;\n const { type, padHours, padMinutes, showHours } = this.$props, seconds = this.#getSeconds(type()), $duration = duration(), shouldInvert = this.#shouldInvert();\n if (!Number.isFinite(seconds + $duration)) {\n timeText.set(\"LIVE\");\n return;\n }\n const time = shouldInvert ? Math.max(0, $duration - seconds) : seconds, formattedTime = formatTime(time, {\n padHrs: padHours(),\n padMins: padMinutes(),\n showHrs: showHours()\n });\n timeText.set((shouldInvert ? \"-\" : \"\") + formattedTime);\n }\n #watchRole() {\n if (!this.el) return;\n const { toggle } = this.$props;\n setAttribute(this.el, \"role\", toggle() ? \"timer\" : null);\n setAttribute(this.el, \"tabindex\", toggle() ? 0 : null);\n }\n #getSeconds(type) {\n const { bufferedEnd, duration, currentTime } = this.#media.$state;\n switch (type) {\n case \"buffered\":\n return bufferedEnd();\n case \"duration\":\n return duration();\n default:\n return currentTime();\n }\n }\n #shouldInvert() {\n return this.$props.remainder() && this.#invert() !== false;\n }\n #onToggle(event) {\n event.preventDefault();\n if (this.#invert() === null) {\n this.#invert.set(!this.$props.remainder());\n return;\n }\n this.#invert.set((v) => !v);\n }\n}\n\nclass MediaPlayerInstance extends MediaPlayer {\n}\nclass MediaProviderInstance extends MediaProvider {\n}\nclass MediaAnnouncerInstance extends MediaAnnouncer {\n}\nclass ControlsInstance extends Controls {\n}\nclass ControlsGroupInstance extends ControlsGroup {\n}\nclass ToggleButtonInstance extends ToggleButton {\n}\nclass CaptionButtonInstance extends CaptionButton {\n}\nclass FullscreenButtonInstance extends FullscreenButton {\n}\nclass LiveButtonInstance extends LiveButton {\n}\nclass MuteButtonInstance extends MuteButton {\n}\nclass PIPButtonInstance extends PIPButton {\n}\nclass PlayButtonInstance extends PlayButton {\n}\nclass AirPlayButtonInstance extends AirPlayButton {\n}\nclass GoogleCastButtonInstance extends GoogleCastButton {\n}\nclass SeekButtonInstance extends SeekButton {\n}\nclass TooltipInstance extends Tooltip {\n}\nclass TooltipTriggerInstance extends TooltipTrigger {\n}\nclass TooltipContentInstance extends TooltipContent {\n}\nclass SliderInstance extends Slider {\n}\nclass TimeSliderInstance extends TimeSlider {\n}\nclass VolumeSliderInstance extends VolumeSlider {\n}\nclass AudioGainSliderInstance extends AudioGainSlider {\n}\nclass SpeedSliderInstance extends SpeedSlider {\n}\nclass QualitySliderInstance extends QualitySlider {\n}\nclass SliderThumbnailInstance extends SliderThumbnail {\n}\nclass SliderValueInstance extends SliderValue {\n}\nclass SliderVideoInstance extends SliderVideo {\n}\nclass SliderPreviewInstance extends SliderPreview {\n}\nclass SliderChaptersInstance extends SliderChapters {\n}\nclass MenuInstance extends Menu {\n}\nclass MenuButtonInstance extends MenuButton {\n}\nclass MenuItemsInstance extends MenuItems {\n}\nclass MenuItemInstance extends MenuItem {\n}\nclass MenuPortalInstance extends MenuPortal {\n}\nclass RadioGroupInstance extends RadioGroup {\n}\nclass RadioInstance extends Radio {\n}\nclass CaptionsInstance extends Captions {\n}\nclass GestureInstance extends Gesture {\n}\nclass PosterInstance extends Poster {\n}\nclass ThumbnailInstance extends Thumbnail {\n}\nclass TimeInstance extends Time {\n}\n\nconst Slot = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ React.createElement(SlotClone, { ...slotProps, ref: forwardedRef }, React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null);\n }\n return /* @__PURE__ */ React.createElement(SlotClone, { ...slotProps, ref: forwardedRef }, children);\n});\nSlot.displayName = \"Slot\";\nconst SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n return React.cloneElement(children, {\n ...mergeProps(slotProps, children.props),\n ref: forwardedRef ? composeRefs(forwardedRef, children.ref) : children.ref\n });\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n});\nSlotClone.displayName = \"SlotClone\";\nconst Slottable = ({ children }) => {\n return /* @__PURE__ */ React.createElement(React.Fragment, null, children);\n};\nfunction isSlottable(child) {\n return React.isValidElement(child) && child.type === Slottable;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n childPropValue(...args);\n slotPropValue(...args);\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\n\nconst NODES = [\"button\", \"div\", \"span\", \"img\", \"video\", \"audio\"];\nconst Primitive = NODES.reduce((primitives, node) => {\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n return /* @__PURE__ */ React.createElement(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitives, [node]: Node };\n}, {});\n\nfunction isRemotionProvider(provider) {\n return provider?.$$PROVIDER_TYPE === \"REMOTION\";\n}\nfunction isRemotionSrc(src) {\n return src?.type === \"video/remotion\";\n}\n\nconst sliderStateRecord = SliderInstance.state.record, initialSliderStore = Object.keys(sliderStateRecord).reduce(\n (store, prop) => ({\n ...store,\n [prop]() {\n return sliderStateRecord[prop];\n }\n }),\n {}\n);\nfunction useSliderState(prop, ref) {\n const $state = useStateContext(sliderState);\n return useSignal((ref?.current?.$state || $state || initialSliderStore)[prop]);\n}\nfunction useSliderStore(ref) {\n const $state = useStateContext(sliderState);\n return useSignalRecord(ref?.current ? ref.current.$state : $state || initialSliderStore);\n}\n\nconst mediaStateRecord = MediaPlayerInstance.state.record, initialMediaStore = Object.keys(mediaStateRecord).reduce(\n (store, prop) => ({\n ...store,\n [prop]() {\n return mediaStateRecord[prop];\n }\n }),\n {}\n);\nfunction useMediaState(prop, ref) {\n const $state = useStateContext(mediaState);\n return useSignal((ref?.current?.$state || $state || initialMediaStore)[prop]);\n}\nfunction useMediaStore(ref) {\n const $state = useStateContext(mediaState);\n return useSignalRecord(ref?.current ? ref.current.$state : $state || initialMediaStore);\n}\n\nexport { ARIAKeyShortcuts, AUDIO_EXTENSIONS, AUDIO_TYPES, AirPlayButtonInstance, AudioGainSliderInstance, AudioProviderLoader, AudioTrackList, CaptionButtonInstance, CaptionsInstance, ControlsGroupInstance, ControlsInstance, DASHProviderLoader, DASH_VIDEO_EXTENSIONS, DASH_VIDEO_TYPES, FullscreenButtonInstance, FullscreenController, GestureInstance, GoogleCastButtonInstance, HLSProviderLoader, HLS_VIDEO_EXTENSIONS, HLS_VIDEO_TYPES, HTMLAirPlayAdapter, HTMLMediaProvider, IS_CHROME, IS_IOS, IS_SERVER, List, ListSymbol, LiveButtonInstance, LocalMediaStorage, MEDIA_KEY_SHORTCUTS, MediaAnnouncerInstance, MediaControls, MediaPlayerInstance, MediaProviderInstance, MediaRemoteControl, MenuButtonInstance, MenuInstance, MenuItemInstance, MenuItemsInstance, MenuPortalInstance, MuteButtonInstance, PIPButtonInstance, PlayButtonInstance, PosterInstance, Primitive, QualitySliderInstance, QualitySymbol, RAFLoop, RadioGroupController, RadioGroupInstance, RadioInstance, ScreenOrientationController, SeekButtonInstance, SliderChaptersInstance, SliderInstance, SliderPreviewInstance, SliderThumbnailInstance, SliderValueInstance, SliderVideoInstance, SpeedSliderInstance, TextRenderers, TextTrack, TextTrackList, TextTrackSymbol, ThumbnailInstance, ThumbnailsLoader, TimeInstance, TimeRange, TimeSliderInstance, ToggleButtonInstance, TooltipContentInstance, TooltipInstance, TooltipTriggerInstance, VIDEO_EXTENSIONS, VIDEO_TYPES, VideoProvider, VideoProviderLoader, VideoQualityList, VimeoProviderLoader, VolumeSliderInstance, YouTubeProviderLoader, appendParamsToURL, boundTime, canChangeVolume, canFullscreen, canGoogleCastSrc, canOrientScreen, canPlayHLSNatively, canRotateScreen, canUsePictureInPicture, canUseVideoPresentation, coerceToError, findActiveCue, formatSpokenTime, formatTime, getDownloadFile, getTimeRangesEnd, getTimeRangesStart, isAudioProvider, isAudioSrc, isCueActive, isDASHProvider, isDASHSrc, isGoogleCastProvider, isHLSProvider, isHLSSrc, isHLSSupported, isHTMLAudioElement, isHTMLIFrameElement, isHTMLMediaElement, isHTMLVideoElement, isMediaStream, isRemotionProvider, isRemotionSrc, isTrackCaptionKind, isVideoProvider, isVideoQualitySrc, isVideoSrc, isVimeoProvider, isYouTubeProvider, loadScript, mediaContext, mediaState, menuContext, normalizeTimeIntervals, parseJSONCaptionsFile, preconnect, sliderState, softResetMediaState, sortVideoQualities, updateSliderPreviewPlacement, updateTimeIntervals, useMediaContext, useMediaState, useMediaStore, useSliderState, useSliderStore, watchActiveTextTrack, watchCueTextChange };\n","\"use client\"\n\nimport * as React from 'react';\nimport { useReactContext, createReactComponent, composeRefs, useSignal, noop, useStateContext, signal, effect, isString } from './vidstack-CZgUA94N.js';\nimport { mediaContext, AirPlayButtonInstance, Primitive, PlayButtonInstance, CaptionButtonInstance, FullscreenButtonInstance, MuteButtonInstance, PIPButtonInstance, SeekButtonInstance, LiveButtonInstance, SliderValueInstance, SliderInstance, SliderPreviewInstance, useSliderState, VolumeSliderInstance, IS_SERVER, ThumbnailInstance, TimeSliderInstance, SliderChaptersInstance, SliderThumbnailInstance, SliderVideoInstance, mediaState, RadioGroupInstance, RadioInstance, MenuInstance, MenuButtonInstance, useMediaState, MenuItemsInstance, MenuItemInstance, GestureInstance, TimeInstance, isTrackCaptionKind } from './vidstack-D5Pzx_k5.js';\nimport { createPortal } from 'react-dom';\n\nfunction useMediaContext() {\n return useReactContext(mediaContext);\n}\n\nconst AirPlayButtonBridge = createReactComponent(AirPlayButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst AirPlayButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(AirPlayButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nAirPlayButton.displayName = \"AirPlayButton\";\n\nconst PlayButtonBridge = createReactComponent(PlayButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst PlayButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(PlayButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nPlayButton.displayName = \"PlayButton\";\n\nconst CaptionButtonBridge = createReactComponent(CaptionButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst CaptionButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(CaptionButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nCaptionButton.displayName = \"CaptionButton\";\n\nconst FullscreenButtonBridge = createReactComponent(FullscreenButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst FullscreenButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(FullscreenButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nFullscreenButton.displayName = \"FullscreenButton\";\n\nconst MuteButtonBridge = createReactComponent(MuteButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst MuteButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(MuteButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nMuteButton.displayName = \"MuteButton\";\n\nconst PIPButtonBridge = createReactComponent(PIPButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst PIPButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(PIPButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nPIPButton.displayName = \"PIPButton\";\n\nconst SeekButtonBridge = createReactComponent(SeekButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst SeekButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(SeekButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nSeekButton.displayName = \"SeekButton\";\n\nconst LiveButtonBridge = createReactComponent(LiveButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst LiveButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(LiveButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nLiveButton.displayName = \"LiveButton\";\n\nconst sliderCallbacks = [\n \"onDragStart\",\n \"onDragEnd\",\n \"onDragValueChange\",\n \"onValueChange\",\n \"onPointerValueChange\"\n];\n\nconst SliderValueBridge = createReactComponent(SliderValueInstance);\n\nconst SliderBridge = createReactComponent(SliderInstance, {\n events: sliderCallbacks\n});\nconst Root$5 = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(SliderBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children));\n});\nRoot$5.displayName = \"Slider\";\nconst Thumb = React.forwardRef((props, forwardRef) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props, ref: forwardRef }));\nThumb.displayName = \"SliderThumb\";\nconst Track = React.forwardRef((props, forwardRef) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props, ref: forwardRef }));\nTrack.displayName = \"SliderTrack\";\nconst TrackFill = React.forwardRef((props, forwardRef) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props, ref: forwardRef }));\nTrackFill.displayName = \"SliderTrackFill\";\nconst PreviewBridge = createReactComponent(SliderPreviewInstance);\nconst Preview = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(PreviewBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nPreview.displayName = \"SliderPreview\";\nconst Value = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(SliderValueBridge, { ...props }, (props2, instance) => {\n const $text = useSignal(() => instance.getValueText(), instance);\n return /* @__PURE__ */ React.createElement(Primitive.div, { ...props2, ref: forwardRef }, $text, children);\n });\n});\nValue.displayName = \"SliderValue\";\nconst Steps = React.forwardRef(({ children, ...props }, forwardRef) => {\n const $min = useSliderState(\"min\"), $max = useSliderState(\"max\"), $step = useSliderState(\"step\"), steps = ($max - $min) / $step;\n return /* @__PURE__ */ React.createElement(Primitive.div, { ...props, ref: forwardRef }, Array.from({ length: Math.floor(steps) + 1 }).map((_, step) => children(step)));\n});\nSteps.displayName = \"SliderSteps\";\n\nvar slider = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Preview: Preview,\n Root: Root$5,\n Steps: Steps,\n Thumb: Thumb,\n Track: Track,\n TrackFill: TrackFill,\n Value: Value\n});\n\nconst VolumeSliderBridge = createReactComponent(VolumeSliderInstance, {\n events: sliderCallbacks,\n domEventsRegex: /^onMedia/\n});\nconst Root$4 = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(VolumeSliderBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children));\n }\n);\nRoot$4.displayName = \"VolumeSlider\";\n\nvar volumeSlider = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Preview: Preview,\n Root: Root$4,\n Steps: Steps,\n Thumb: Thumb,\n Track: Track,\n TrackFill: TrackFill,\n Value: Value\n});\n\nfunction createVTTCue(startTime = 0, endTime = 0, text = \"\") {\n if (IS_SERVER) {\n return {\n startTime,\n endTime,\n text,\n addEventListener: noop,\n removeEventListener: noop,\n dispatchEvent: noop\n };\n }\n return new window.VTTCue(startTime, endTime, text);\n}\nfunction appendParamsToURL(baseUrl, params) {\n const url = new URL(baseUrl);\n for (const key of Object.keys(params)) {\n url.searchParams.set(key, params[key] + \"\");\n }\n return url.toString();\n}\n\nconst ThumbnailBridge = createReactComponent(ThumbnailInstance);\nconst Root$3 = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ThumbnailBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n});\nRoot$3.displayName = \"Thumbnail\";\nconst Img = React.forwardRef(({ children, ...props }, forwardRef) => {\n const { src, img, crossOrigin } = useStateContext(ThumbnailInstance.state), $src = useSignal(src), $crossOrigin = useSignal(crossOrigin);\n return /* @__PURE__ */ React.createElement(\n Primitive.img,\n {\n crossOrigin: $crossOrigin,\n ...props,\n src: $src || void 0,\n ref: composeRefs(img.set, forwardRef)\n },\n children\n );\n});\nImg.displayName = \"ThumbnailImg\";\n\nvar thumbnail = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Img: Img,\n Root: Root$3\n});\n\nconst TimeSliderContext = React.createContext({\n $chapters: signal(null)\n});\nTimeSliderContext.displayName = \"TimeSliderContext\";\nconst TimeSliderBridge = createReactComponent(TimeSliderInstance, {\n events: sliderCallbacks,\n domEventsRegex: /^onMedia/\n});\nconst Root$2 = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n const $chapters = React.useMemo(() => signal(null), []);\n return /* @__PURE__ */ React.createElement(TimeSliderContext.Provider, { value: { $chapters } }, /* @__PURE__ */ React.createElement(TimeSliderBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children)));\n }\n);\nRoot$2.displayName = \"TimeSlider\";\nconst SliderChaptersBridge = createReactComponent(SliderChaptersInstance);\nconst Chapters = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(SliderChaptersBridge, { ...props }, (props2, instance) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n /* @__PURE__ */ React.createElement(ChapterTracks, { instance }, children)\n ));\n }\n);\nChapters.displayName = \"SliderChapters\";\nfunction ChapterTracks({ instance, children }) {\n const $cues = useSignal(() => instance.cues, instance), refs = React.useRef([]), emptyCue = React.useRef(null), { $chapters } = React.useContext(TimeSliderContext);\n if (!emptyCue.current) {\n emptyCue.current = createVTTCue();\n }\n React.useEffect(() => {\n $chapters.set(instance);\n return () => void $chapters.set(null);\n }, [instance]);\n React.useEffect(() => {\n instance.setRefs(refs.current);\n }, [$cues]);\n return children($cues.length ? $cues : [emptyCue.current], (el) => {\n if (!el) {\n refs.current.length = 0;\n return;\n }\n refs.current.push(el);\n });\n}\nChapterTracks.displayName = \"SliderChapterTracks\";\nconst ChapterTitle = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n const { $chapters } = React.useContext(TimeSliderContext), [title, setTitle] = React.useState();\n React.useEffect(() => {\n return effect(() => {\n const chapters = $chapters(), cue = chapters?.activePointerCue || chapters?.activeCue;\n setTitle(cue?.text || \"\");\n });\n }, []);\n return /* @__PURE__ */ React.createElement(Primitive.div, { ...props, ref: forwardRef }, title, children);\n }\n);\nChapterTitle.displayName = \"SliderChapterTitle\";\nconst Progress = React.forwardRef((props, forwardRef) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props, ref: forwardRef }));\nProgress.displayName = \"SliderProgress\";\nconst SliderThumbnailBridge = createReactComponent(SliderThumbnailInstance);\nconst ThumbnailRoot = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(SliderThumbnailBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2, ref: composeRefs(props2.ref, forwardRef) }, children));\n }\n);\nThumbnailRoot.displayName = \"SliderThumbnail\";\nconst Thumbnail = {\n Root: ThumbnailRoot,\n Img: Img\n};\nconst VideoBridge = createReactComponent(SliderVideoInstance, {\n events: [\"onCanPlay\", \"onError\"]\n});\nconst Video = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(VideoBridge, { ...props }, (props2, instance) => /* @__PURE__ */ React.createElement(\n VideoProvider,\n {\n ...props2,\n instance,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nVideo.displayName = \"SliderVideo\";\nconst VideoProvider = React.forwardRef(\n ({ instance, children, ...props }, forwardRef) => {\n const { canLoad } = useStateContext(mediaState), { src, video, crossOrigin } = instance.$state, $src = useSignal(src), $canLoad = useSignal(canLoad), $crossOrigin = useSignal(crossOrigin);\n return /* @__PURE__ */ React.createElement(\n Primitive.video,\n {\n style: { maxWidth: \"unset\" },\n ...props,\n src: $src || void 0,\n muted: true,\n playsInline: true,\n preload: $canLoad ? \"auto\" : \"none\",\n crossOrigin: $crossOrigin || void 0,\n ref: composeRefs(video.set, forwardRef)\n },\n children\n );\n }\n);\nVideoProvider.displayName = \"SliderVideoProvider\";\n\nvar timeSlider = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ChapterTitle: ChapterTitle,\n Chapters: Chapters,\n Preview: Preview,\n Progress: Progress,\n Root: Root$2,\n Steps: Steps,\n Thumb: Thumb,\n Thumbnail: Thumbnail,\n Track: Track,\n TrackFill: TrackFill,\n Value: Value,\n Video: Video\n});\n\nconst RadioGroupBridge = createReactComponent(RadioGroupInstance, {\n events: [\"onChange\"]\n});\nconst Root$1 = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(RadioGroupBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children));\n }\n);\nRoot$1.displayName = \"RadioGroup\";\nconst ItemBridge$1 = createReactComponent(RadioInstance, {\n events: [\"onChange\", \"onSelect\"]\n});\nconst Item$1 = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ItemBridge$1, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n});\nItem$1.displayName = \"RadioItem\";\n\nvar radioGroup = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Item: Item$1,\n Root: Root$1\n});\n\nconst MenuBridge = createReactComponent(MenuInstance, {\n events: [\"onOpen\", \"onClose\"],\n domEventsRegex: /^onMedia/\n});\nconst Root = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(MenuBridge, { ...props, ref: forwardRef }, (props2, instance) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n style: { display: !instance.isSubmenu ? \"contents\" : void 0, ...props2.style }\n },\n children\n ));\n});\nRoot.displayName = \"Menu\";\nconst ButtonBridge = createReactComponent(MenuButtonInstance, {\n events: [\"onSelect\"]\n});\nconst Button = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nButton.displayName = \"MenuButton\";\nconst Portal = React.forwardRef(\n ({ container = null, disabled = false, children, ...props }, forwardRef) => {\n let fullscreen = useMediaState(\"fullscreen\"), shouldPortal = disabled === \"fullscreen\" ? !fullscreen : !disabled;\n const target = React.useMemo(() => {\n if (IS_SERVER) return null;\n const node = isString(container) ? document.querySelector(container) : container;\n return node ?? document.body;\n }, [container]);\n return !target || !shouldPortal ? children : createPortal(\n /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props,\n style: { display: \"contents\", ...props.style },\n ref: forwardRef\n },\n children\n ),\n target\n );\n }\n);\nPortal.displayName = \"MenuPortal\";\nconst ItemsBridge = createReactComponent(MenuItemsInstance);\nconst Items = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ItemsBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n});\nItems.displayName = \"MenuItems\";\nconst ItemBridge = createReactComponent(MenuItemInstance);\nconst Item = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ItemBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n});\nItem.displayName = \"MenuItem\";\n\nvar menu = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Button: Button,\n Content: Items,\n Item: Item,\n Items: Items,\n Portal: Portal,\n Radio: Item$1,\n RadioGroup: Root$1,\n Root: Root\n});\n\nconst GestureBridge = createReactComponent(GestureInstance, {\n events: [\"onWillTrigger\", \"onTrigger\"]\n});\nconst Gesture = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(GestureBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children));\n }\n);\nGesture.displayName = \"Gesture\";\n\nconst TimeBridge = createReactComponent(TimeInstance);\nconst Time = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(TimeBridge, { ...props }, (props2, instance) => /* @__PURE__ */ React.createElement(\n TimeText,\n {\n ...props2,\n instance,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n});\nTime.displayName = \"Time\";\nconst TimeText = React.forwardRef(\n ({ instance, children, ...props }, forwardRef) => {\n const { timeText } = instance.$state, $timeText = useSignal(timeText);\n return /* @__PURE__ */ React.createElement(Primitive.div, { ...props, ref: forwardRef }, $timeText, children);\n }\n);\nTimeText.displayName = \"TimeText\";\n\nfunction useMediaPlayer() {\n const context = useMediaContext();\n return context?.player || null;\n}\n\nfunction useAudioOptions() {\n const media = useMediaContext(), { audioTracks, audioTrack } = media.$state, $audioTracks = useSignal(audioTracks);\n useSignal(audioTrack);\n return React.useMemo(() => {\n const options = $audioTracks.map((track) => ({\n track,\n label: track.label,\n value: getTrackValue$1(track),\n get selected() {\n return audioTrack() === track;\n },\n select(trigger) {\n const index = audioTracks().indexOf(track);\n if (index >= 0) media.remote.changeAudioTrack(index, trigger);\n }\n }));\n Object.defineProperty(options, \"disabled\", {\n get() {\n return options.length <= 1;\n }\n });\n Object.defineProperty(options, \"selectedTrack\", {\n get() {\n return audioTrack();\n }\n });\n Object.defineProperty(options, \"selectedValue\", {\n get() {\n const track = audioTrack();\n return track ? getTrackValue$1(track) : void 0;\n }\n });\n return options;\n }, [$audioTracks]);\n}\nfunction getTrackValue$1(track) {\n return track.label.toLowerCase();\n}\n\nfunction useCaptionOptions({ off = true } = {}) {\n const media = useMediaContext(), { textTracks, textTrack } = media.$state, $textTracks = useSignal(textTracks);\n useSignal(textTrack);\n return React.useMemo(() => {\n const captionTracks = $textTracks.filter(isTrackCaptionKind), options = captionTracks.map((track) => ({\n track,\n label: track.label,\n value: getTrackValue(track),\n get selected() {\n return textTrack() === track;\n },\n select(trigger) {\n const index = textTracks().indexOf(track);\n if (index >= 0) media.remote.changeTextTrackMode(index, \"showing\", trigger);\n }\n }));\n if (off) {\n options.unshift({\n track: null,\n label: isString(off) ? off : \"Off\",\n value: \"off\",\n get selected() {\n return !textTrack();\n },\n select(trigger) {\n media.remote.toggleCaptions(trigger);\n }\n });\n }\n Object.defineProperty(options, \"disabled\", {\n get() {\n return !captionTracks.length;\n }\n });\n Object.defineProperty(options, \"selectedTrack\", {\n get() {\n return textTrack();\n }\n });\n Object.defineProperty(options, \"selectedValue\", {\n get() {\n const track = textTrack();\n return track ? getTrackValue(track) : \"off\";\n }\n });\n return options;\n }, [$textTracks]);\n}\nfunction getTrackValue(track) {\n return track.id + \":\" + track.kind + \"-\" + track.label.toLowerCase();\n}\n\nexport { AirPlayButton, Button, CaptionButton, ChapterTitle, Chapters, FullscreenButton, Gesture, Img, Item$1 as Item, Items, LiveButton, MuteButton, PIPButton, PlayButton, Portal, Preview, Progress, Root$3 as Root, Root$2 as Root$1, Root as Root$2, Root$1 as Root$3, Root$4, Root$5, SeekButton, Steps, Thumb, Thumbnail, Time, Track, TrackFill, Value, appendParamsToURL, menu, radioGroup, slider, sliderCallbacks, thumbnail, timeSlider, useAudioOptions, useCaptionOptions, useMediaContext, useMediaPlayer, volumeSlider };\n","\"use client\"\n\nimport * as React from 'react';\nimport { createReactComponent, composeRefs, listenEvent, useReactScope, scoped, computed, signal, effect, EventsController, useSignal } from './vidstack-CZgUA94N.js';\nimport { MediaAnnouncerInstance, Primitive, ControlsInstance, ControlsGroupInstance, TooltipInstance, TooltipTriggerInstance, TooltipContentInstance, GoogleCastButtonInstance, QualitySliderInstance, AudioGainSliderInstance, SpeedSliderInstance, useMediaState, watchActiveTextTrack, CaptionsInstance, formatSpokenTime, formatTime } from './vidstack-D5Pzx_k5.js';\nimport { sliderCallbacks, Preview, Steps, Thumb, Track as Track$1, TrackFill as TrackFill$1, Value, useMediaContext } from './vidstack-CQ3Bde2N.js';\n\nconst MediaAnnouncerBridge = createReactComponent(MediaAnnouncerInstance, {\n events: [\"onChange\"]\n});\nconst MediaAnnouncer = React.forwardRef(\n ({ style, children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(MediaAnnouncerBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n style: { display: \"contents\", ...style },\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nMediaAnnouncer.displayName = \"MediaAnnouncer\";\n\nconst ControlsBridge = createReactComponent(ControlsInstance);\nconst Root$5 = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ControlsBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n});\nRoot$5.displayName = \"Controls\";\nconst ControlsGroupBridge = createReactComponent(ControlsGroupInstance);\nconst Group = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ControlsGroupBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n});\nGroup.displayName = \"ControlsGroup\";\n\nvar controls = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Group: Group,\n Root: Root$5\n});\n\nconst TooltipBridge = createReactComponent(TooltipInstance);\nfunction Root$4({ children, ...props }) {\n return /* @__PURE__ */ React.createElement(TooltipBridge, { ...props }, children);\n}\nRoot$4.displayName = \"Tooltip\";\nconst TriggerBridge = createReactComponent(TooltipTriggerInstance);\nconst Trigger = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(TriggerBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nTrigger.displayName = \"TooltipTrigger\";\nconst ContentBridge = createReactComponent(TooltipContentInstance);\nconst Content = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ContentBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nContent.displayName = \"TooltipContent\";\n\nvar tooltip = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Content: Content,\n Root: Root$4,\n Trigger: Trigger\n});\n\nconst GoogleCastButtonBridge = createReactComponent(GoogleCastButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst GoogleCastButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(GoogleCastButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nGoogleCastButton.displayName = \"GoogleCastButton\";\n\nconst QualitySliderBridge = createReactComponent(QualitySliderInstance, {\n events: sliderCallbacks,\n domEventsRegex: /^onMedia/\n});\nconst Root$3 = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(QualitySliderBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children));\n }\n);\nRoot$3.displayName = \"QualitySlider\";\n\nvar qualitySlider = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Preview: Preview,\n Root: Root$3,\n Steps: Steps,\n Thumb: Thumb,\n Track: Track$1,\n TrackFill: TrackFill$1,\n Value: Value\n});\n\nconst AudioGainSliderBridge = createReactComponent(AudioGainSliderInstance, {\n events: sliderCallbacks,\n domEventsRegex: /^onMedia/\n});\nconst Root$2 = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(AudioGainSliderBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children));\n }\n);\nRoot$2.displayName = \"AudioGainSlider\";\n\nvar audioGainSlider = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Preview: Preview,\n Root: Root$2,\n Steps: Steps,\n Thumb: Thumb,\n Track: Track$1,\n TrackFill: TrackFill$1,\n Value: Value\n});\n\nconst SpeedSliderBridge = createReactComponent(SpeedSliderInstance, {\n events: sliderCallbacks,\n domEventsRegex: /^onMedia/\n});\nconst Root$1 = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(SpeedSliderBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children));\n }\n);\nRoot$1.displayName = \"SpeedSlider\";\n\nvar speedSlider = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Preview: Preview,\n Root: Root$1,\n Steps: Steps,\n Thumb: Thumb,\n Track: Track$1,\n TrackFill: TrackFill$1,\n Value: Value\n});\n\nconst Title = React.forwardRef(({ children, ...props }, forwardRef) => {\n const $title = useMediaState(\"title\");\n return /* @__PURE__ */ React.createElement(Primitive.span, { ...props, ref: forwardRef }, $title, children);\n});\nTitle.displayName = \"Title\";\n\nfunction useActiveTextCues(track) {\n const [activeCues, setActiveCues] = React.useState([]);\n React.useEffect(() => {\n if (!track) {\n setActiveCues([]);\n return;\n }\n function onCuesChange() {\n if (track) setActiveCues(track.activeCues);\n }\n onCuesChange();\n return listenEvent(track, \"cue-change\", onCuesChange);\n }, [track]);\n return activeCues;\n}\n\nfunction useActiveTextTrack(kind) {\n const media = useMediaContext(), [track, setTrack] = React.useState(null);\n React.useEffect(() => {\n return watchActiveTextTrack(media.textTracks, kind, setTrack);\n }, [kind]);\n return track;\n}\n\nfunction useChapterTitle() {\n const $track = useActiveTextTrack(\"chapters\"), $cues = useActiveTextCues($track);\n return $cues[0]?.text || \"\";\n}\n\nconst ChapterTitle = React.forwardRef(\n ({ defaultText = \"\", children, ...props }, forwardRef) => {\n const $chapterTitle = useChapterTitle();\n return /* @__PURE__ */ React.createElement(Primitive.span, { ...props, ref: forwardRef }, $chapterTitle || defaultText, children);\n }\n);\nChapterTitle.displayName = \"ChapterTitle\";\n\nconst CaptionsBridge = createReactComponent(CaptionsInstance);\nconst Captions = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(CaptionsBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children));\n }\n);\nCaptions.displayName = \"Captions\";\n\nconst Root = React.forwardRef(\n ({ size = 96, children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(\n \"svg\",\n {\n width: size,\n height: size,\n fill: \"none\",\n viewBox: \"0 0 120 120\",\n \"aria-hidden\": \"true\",\n \"data-part\": \"root\",\n ...props,\n ref: forwardRef\n },\n children\n );\n }\n);\nconst Track = React.forwardRef(\n ({ width = 8, children, ...props }, ref) => /* @__PURE__ */ React.createElement(\n \"circle\",\n {\n cx: \"60\",\n cy: \"60\",\n r: \"54\",\n stroke: \"currentColor\",\n strokeWidth: width,\n \"data-part\": \"track\",\n ...props,\n ref\n },\n children\n )\n);\nconst TrackFill = React.forwardRef(\n ({ width = 8, fillPercent = 50, children, ...props }, ref) => /* @__PURE__ */ React.createElement(\n \"circle\",\n {\n cx: \"60\",\n cy: \"60\",\n r: \"54\",\n stroke: \"currentColor\",\n pathLength: \"100\",\n strokeWidth: width,\n strokeDasharray: 100,\n strokeDashoffset: 100 - fillPercent,\n \"data-part\": \"track-fill\",\n ...props,\n ref\n },\n children\n )\n);\n\nvar spinner = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Root: Root,\n Track: Track,\n TrackFill: TrackFill\n});\n\nfunction createSignal(initialValue, deps = []) {\n const scope = useReactScope();\n return React.useMemo(() => scoped(() => signal(initialValue), scope), [scope, ...deps]);\n}\nfunction createComputed(compute, deps = []) {\n const scope = useReactScope();\n return React.useMemo(() => scoped(() => computed(compute), scope), [scope, ...deps]);\n}\nfunction createEffect(compute, deps = []) {\n const scope = useReactScope();\n React.useEffect(() => scoped(() => effect(compute), scope), [scope, ...deps]);\n}\nfunction useScoped(compute) {\n const scope = useReactScope();\n return React.useMemo(() => scoped(compute, scope), [scope]);\n}\n\nfunction useTextCues(track) {\n const [cues, setCues] = React.useState([]);\n React.useEffect(() => {\n if (!track) return;\n function onCuesChange() {\n if (track) setCues([...track.cues]);\n }\n const events = new EventsController(track).add(\"add-cue\", onCuesChange).add(\"remove-cue\", onCuesChange);\n onCuesChange();\n return () => {\n setCues([]);\n events.abort();\n };\n }, [track]);\n return cues;\n}\n\nfunction useChapterOptions() {\n const media = useMediaContext(), track = useActiveTextTrack(\"chapters\"), cues = useTextCues(track), $startTime = useSignal(media.$state.seekableStart), $endTime = useSignal(media.$state.seekableEnd);\n useActiveTextCues(track);\n return React.useMemo(() => {\n const options = track ? cues.filter((cue) => cue.startTime <= $endTime && cue.endTime >= $startTime).map((cue, i) => {\n let currentRef = null, stopProgressEffect;\n return {\n cue,\n label: cue.text,\n value: i.toString(),\n startTimeText: formatTime(Math.max(0, cue.startTime - $startTime)),\n durationText: formatSpokenTime(\n Math.min($endTime, cue.endTime) - Math.max($startTime, cue.startTime)\n ),\n get selected() {\n return cue === track.activeCues[0];\n },\n setProgressVar(ref) {\n if (!ref || cue !== track.activeCues[0]) {\n stopProgressEffect?.();\n stopProgressEffect = void 0;\n ref?.style.setProperty(\"--progress\", \"0%\");\n currentRef = null;\n return;\n }\n if (currentRef === ref) return;\n currentRef = ref;\n stopProgressEffect?.();\n stopProgressEffect = effect(() => {\n const { realCurrentTime } = media.$state, time = realCurrentTime(), cueStartTime = Math.max($startTime, cue.startTime), duration = Math.min($endTime, cue.endTime) - cueStartTime, progress = Math.max(0, time - cueStartTime) / duration * 100;\n ref.style.setProperty(\"--progress\", progress.toFixed(3) + \"%\");\n });\n },\n select(trigger) {\n media.remote.seek(cue.startTime - $startTime, trigger);\n }\n };\n }) : [];\n Object.defineProperty(options, \"selectedValue\", {\n get() {\n const index = options.findIndex((option) => option.selected);\n return (index >= 0 ? index : 0).toString();\n }\n });\n return options;\n }, [cues, $startTime, $endTime]);\n}\n\nexport { Captions, ChapterTitle, Content, GoogleCastButton, Group, MediaAnnouncer, Root$4 as Root, Root$2 as Root$1, Root$1 as Root$2, Root$3, Root$5 as Root$4, Root as Root$5, Title, Track, TrackFill, Trigger, audioGainSlider, controls, createComputed, createEffect, createSignal, qualitySlider, speedSlider, spinner, tooltip, useActiveTextCues, useActiveTextTrack, useChapterOptions, useChapterTitle, useScoped, useTextCues };\n","\"use client\"\n\nimport * as React from 'react';\nimport { listenEvent, EventsController, animationFrameThrottle, effect } from './vidstack-CZgUA94N.js';\nimport { useMediaPlayer } from './vidstack-CQ3Bde2N.js';\n\nfunction useClassName(el, className) {\n React.useEffect(() => {\n if (!el || !className) return;\n const tokens = className.split(\" \");\n for (const token of tokens) el.classList.add(token);\n return () => {\n for (const token of tokens) el.classList.remove(token);\n };\n }, [el, className]);\n}\nfunction useResizeObserver(el, callback) {\n React.useEffect(() => {\n if (!el) return;\n callback();\n const observer = new ResizeObserver(animationFrameThrottle(callback));\n observer.observe(el);\n return () => observer.disconnect();\n }, [el, callback]);\n}\nfunction useTransitionActive(el) {\n const [isActive, setIsActive] = React.useState(false);\n React.useEffect(() => {\n if (!el) return;\n const events = new EventsController(el).add(\"transitionstart\", () => setIsActive(true)).add(\"transitionend\", () => setIsActive(false));\n return () => events.abort();\n }, [el]);\n return isActive;\n}\nfunction useMouseEnter(el) {\n const [isMouseEnter, setIsMouseEnter] = React.useState(false);\n React.useEffect(() => {\n if (!el) return;\n const events = new EventsController(el).add(\"mouseenter\", () => setIsMouseEnter(true)).add(\"mouseleave\", () => setIsMouseEnter(false));\n return () => events.abort();\n }, [el]);\n return isMouseEnter;\n}\nfunction useFocusIn(el) {\n const [isFocusIn, setIsFocusIn] = React.useState(false);\n React.useEffect(() => {\n if (!el) return;\n const events = new EventsController(el).add(\"focusin\", () => setIsFocusIn(true)).add(\"focusout\", () => setIsFocusIn(false));\n return () => events.abort();\n }, [el]);\n return isFocusIn;\n}\nfunction useActive(el) {\n const isMouseEnter = useMouseEnter(el), isFocusIn = useFocusIn(el), prevMouseEnter = React.useRef(false);\n if (prevMouseEnter.current && !isMouseEnter) return false;\n prevMouseEnter.current = isMouseEnter;\n return isMouseEnter || isFocusIn;\n}\nfunction useColorSchemePreference() {\n const [colorScheme, setColorScheme] = React.useState(\"dark\");\n React.useEffect(() => {\n const media = window.matchMedia(\"(prefers-color-scheme: light)\");\n function onChange() {\n setColorScheme(media.matches ? \"light\" : \"dark\");\n }\n onChange();\n return listenEvent(media, \"change\", onChange);\n }, []);\n return colorScheme;\n}\n\nfunction useLayoutName(name) {\n const player = useMediaPlayer();\n React.useEffect(() => {\n if (!player) return;\n return effect(() => {\n const el = player.$el;\n el?.setAttribute(\"data-layout\", name);\n return () => el?.removeAttribute(\"data-layout\");\n });\n }, [player]);\n}\n\nexport { useActive, useClassName, useColorSchemePreference, useLayoutName, useResizeObserver, useTransitionActive };\n","\"use client\"\n\nimport { signal } from './vidstack-CZgUA94N.js';\n\nconst RemotionThumbnail = /* @__PURE__ */ signal(null);\nconst RemotionSliderThumbnail = /* @__PURE__ */ signal(null);\nconst RemotionPoster = /* @__PURE__ */ signal(null);\n\nexport { RemotionPoster, RemotionSliderThumbnail, RemotionThumbnail };\n","\"use client\"\n\nimport * as React from 'react';\nimport { useSignal, composeRefs, isBoolean, uppercaseFirstChar, isUndefined, isString, signal, camelToKebabCase, onDispose, scoped, keysOf, effect, isArray, isKeyboardClick, listenEvent, toggleClass, useContext } from './vidstack-CZgUA94N.js';\nimport { createComputed, createSignal, MediaAnnouncer, Root, Trigger, Content, GoogleCastButton, Captions, useChapterOptions, Root$1 as Root$5, Root$2 as Root$6, Root$3 as Root$7, useScoped, Root$4 as Root$a, Group, useChapterTitle, createEffect, useActiveTextTrack, ChapterTitle as ChapterTitle$1, Title, Root$5 as Root$b, Track as Track$1, TrackFill as TrackFill$1 } from './vidstack-DqtDbuaC.js';\nimport { useColorSchemePreference, useActive, useResizeObserver, useLayoutName, useTransitionActive } from './vidstack-DzQtn4XB.js';\nimport { useMediaContext, MuteButton, LiveButton, SeekButton, PlayButton, CaptionButton, appendParamsToURL, PIPButton, FullscreenButton, AirPlayButton, Items, Root$3 as Root$1, Item, Root as Root$2, Img, Root$2 as Root$3, Button, Portal, Track, TrackFill, Thumb, Steps, useMediaPlayer, Root$5 as Root$4, useAudioOptions, useCaptionOptions, Root$4 as Root$8, Preview, Value, Root$1 as Root$9, Chapters, Progress, Thumbnail, ChapterTitle, Time, Gesture } from './vidstack-CQ3Bde2N.js';\nimport { useMediaState, isTrackCaptionKind, getDownloadFile, isRemotionSrc, IS_SERVER, useMediaContext as useMediaContext$1, sortVideoQualities, Primitive, mediaContext } from './vidstack-D5Pzx_k5.js';\nimport { flushSync } from 'react-dom';\nimport { RemotionThumbnail, RemotionSliderThumbnail } from './vidstack-vqp2QaHR.js';\n\nconst DefaultLayoutContext = React.createContext({});\nDefaultLayoutContext.displayName = \"DefaultLayoutContext\";\nfunction useDefaultLayoutContext() {\n return React.useContext(DefaultLayoutContext);\n}\nfunction useDefaultLayoutWord(word) {\n const { translations } = useDefaultLayoutContext();\n return i18n(translations, word);\n}\nfunction i18n(translations, word) {\n return translations?.[word] ?? word;\n}\n\nfunction useColorSchemeClass(colorScheme) {\n const systemColorPreference = useColorSchemePreference();\n if (colorScheme === \"default\") {\n return null;\n } else if (colorScheme === \"system\") {\n return systemColorPreference;\n } else {\n return colorScheme;\n }\n}\n\nfunction createDefaultMediaLayout({\n type,\n smLayoutWhen,\n renderLayout\n}) {\n const Layout = React.forwardRef(\n ({\n children,\n className,\n disableTimeSlider = false,\n hideQualityBitrate = false,\n icons,\n colorScheme = \"system\",\n download = null,\n menuContainer = null,\n menuGroup = \"bottom\",\n noAudioGain = false,\n audioGains = { min: 0, max: 300, step: 25 },\n noGestures = false,\n noKeyboardAnimations = false,\n noModal = false,\n noScrubGesture,\n playbackRates = { min: 0, max: 2, step: 0.25 },\n seekStep = 10,\n showMenuDelay,\n showTooltipDelay = 700,\n sliderChaptersMinWidth = 325,\n slots,\n smallLayoutWhen = smLayoutWhen,\n thumbnails = null,\n translations,\n ...props\n }, forwardRef) => {\n const media = useMediaContext(), $load = useSignal(media.$props.load), $canLoad = useMediaState(\"canLoad\"), $viewType = useMediaState(\"viewType\"), $streamType = useMediaState(\"streamType\"), $smallWhen = createComputed(() => {\n return isBoolean(smallLayoutWhen) ? smallLayoutWhen : smallLayoutWhen(media.player.state);\n }, [smallLayoutWhen]), userPrefersAnnouncements = createSignal(true), userPrefersKeyboardAnimations = createSignal(true), isMatch = $viewType === type, isSmallLayout = $smallWhen(), isForcedLayout = isBoolean(smallLayoutWhen), isLoadLayout = $load === \"play\" && !$canLoad, canRender = $canLoad || isForcedLayout || isLoadLayout, colorSchemeClass = useColorSchemeClass(colorScheme), layoutEl = createSignal(null);\n useSignal($smallWhen);\n return /* @__PURE__ */ React.createElement(\n \"div\",\n {\n ...props,\n className: `vds-${type}-layout` + (colorSchemeClass ? ` ${colorSchemeClass}` : \"\") + (className ? ` ${className}` : \"\"),\n \"data-match\": isMatch ? \"\" : null,\n \"data-sm\": isSmallLayout ? \"\" : null,\n \"data-lg\": !isSmallLayout ? \"\" : null,\n \"data-size\": isSmallLayout ? \"sm\" : \"lg\",\n \"data-no-scrub-gesture\": noScrubGesture ? \"\" : null,\n ref: composeRefs(layoutEl.set, forwardRef)\n },\n canRender && isMatch ? /* @__PURE__ */ React.createElement(\n DefaultLayoutContext.Provider,\n {\n value: {\n disableTimeSlider,\n hideQualityBitrate,\n icons,\n colorScheme,\n download,\n isSmallLayout,\n menuContainer,\n menuGroup,\n noAudioGain,\n audioGains,\n layoutEl,\n noGestures,\n noKeyboardAnimations,\n noModal,\n noScrubGesture,\n showMenuDelay,\n showTooltipDelay,\n sliderChaptersMinWidth,\n slots,\n seekStep,\n playbackRates,\n thumbnails,\n translations,\n userPrefersAnnouncements,\n userPrefersKeyboardAnimations\n }\n },\n renderLayout({ streamType: $streamType, isSmallLayout, isLoadLayout }),\n children\n ) : null\n );\n }\n );\n Layout.displayName = \"DefaultMediaLayout\";\n return Layout;\n}\n\nfunction useDefaultAudioLayoutSlots() {\n return React.useContext(DefaultLayoutContext).slots;\n}\nfunction useDefaultVideoLayoutSlots() {\n return React.useContext(DefaultLayoutContext).slots;\n}\nfunction slot(slots, name, defaultValue) {\n const slot2 = slots?.[name], capitalizedName = uppercaseFirstChar(name);\n return /* @__PURE__ */ React.createElement(React.Fragment, null, slots?.[`before${capitalizedName}`], isUndefined(slot2) ? defaultValue : slot2, slots?.[`after${capitalizedName}`]);\n}\n\nfunction DefaultAnnouncer() {\n const { userPrefersAnnouncements, translations } = useDefaultLayoutContext(), $userPrefersAnnouncements = useSignal(userPrefersAnnouncements);\n if (!$userPrefersAnnouncements) return null;\n return /* @__PURE__ */ React.createElement(MediaAnnouncer, { translations });\n}\nDefaultAnnouncer.displayName = \"DefaultAnnouncer\";\n\nfunction DefaultTooltip({ content, placement, children }) {\n const { showTooltipDelay } = useDefaultLayoutContext();\n return /* @__PURE__ */ React.createElement(Root, { showDelay: showTooltipDelay }, /* @__PURE__ */ React.createElement(Trigger, { asChild: true }, children), /* @__PURE__ */ React.createElement(Content, { className: \"vds-tooltip-content\", placement }, content));\n}\nDefaultTooltip.displayName = \"DefaultTooltip\";\n\nfunction DefaultPlayButton({ tooltip }) {\n const { icons: Icons } = useDefaultLayoutContext(), playText = useDefaultLayoutWord(\"Play\"), pauseText = useDefaultLayoutWord(\"Pause\"), $paused = useMediaState(\"paused\"), $ended = useMediaState(\"ended\");\n return /* @__PURE__ */ React.createElement(DefaultTooltip, { content: $paused ? playText : pauseText, placement: tooltip }, /* @__PURE__ */ React.createElement(PlayButton, { className: \"vds-play-button vds-button\", \"aria-label\": playText }, $ended ? /* @__PURE__ */ React.createElement(Icons.PlayButton.Replay, { className: \"vds-icon\" }) : $paused ? /* @__PURE__ */ React.createElement(Icons.PlayButton.Play, { className: \"vds-icon\" }) : /* @__PURE__ */ React.createElement(Icons.PlayButton.Pause, { className: \"vds-icon\" })));\n}\nDefaultPlayButton.displayName = \"DefaultPlayButton\";\nconst DefaultMuteButton = React.forwardRef(\n ({ tooltip }, forwardRef) => {\n const { icons: Icons } = useDefaultLayoutContext(), muteText = useDefaultLayoutWord(\"Mute\"), unmuteText = useDefaultLayoutWord(\"Unmute\"), $muted = useMediaState(\"muted\"), $volume = useMediaState(\"volume\");\n return /* @__PURE__ */ React.createElement(DefaultTooltip, { content: $muted ? unmuteText : muteText, placement: tooltip }, /* @__PURE__ */ React.createElement(MuteButton, { className: \"vds-mute-button vds-button\", \"aria-label\": muteText, ref: forwardRef }, $muted || $volume == 0 ? /* @__PURE__ */ React.createElement(Icons.MuteButton.Mute, { className: \"vds-icon\" }) : $volume < 0.5 ? /* @__PURE__ */ React.createElement(Icons.MuteButton.VolumeLow, { className: \"vds-icon\" }) : /* @__PURE__ */ React.createElement(Icons.MuteButton.VolumeHigh, { className: \"vds-icon\" })));\n }\n);\nDefaultMuteButton.displayName = \"DefaultMuteButton\";\nfunction DefaultCaptionButton({ tooltip }) {\n const { icons: Icons } = useDefaultLayoutContext(), captionsText = useDefaultLayoutWord(\"Captions\"), onText = useDefaultLayoutWord(\"Closed-Captions On\"), offText = useDefaultLayoutWord(\"Closed-Captions Off\"), $track = useMediaState(\"textTrack\"), isOn = $track && isTrackCaptionKind($track);\n return /* @__PURE__ */ React.createElement(DefaultTooltip, { content: isOn ? onText : offText, placement: tooltip }, /* @__PURE__ */ React.createElement(CaptionButton, { className: \"vds-caption-button vds-button\", \"aria-label\": captionsText }, isOn ? /* @__PURE__ */ React.createElement(Icons.CaptionButton.On, { className: \"vds-icon\" }) : /* @__PURE__ */ React.createElement(Icons.CaptionButton.Off, { className: \"vds-icon\" })));\n}\nDefaultCaptionButton.displayName = \"DefaultCaptionButton\";\nfunction DefaultPIPButton({ tooltip }) {\n const { icons: Icons } = useDefaultLayoutContext(), pipText = useDefaultLayoutWord(\"PiP\"), enterText = useDefaultLayoutWord(\"Enter PiP\"), exitText = useDefaultLayoutWord(\"Exit PiP\"), $pip = useMediaState(\"pictureInPicture\");\n return /* @__PURE__ */ React.createElement(DefaultTooltip, { content: $pip ? exitText : enterText, placement: tooltip }, /* @__PURE__ */ React.createElement(PIPButton, { className: \"vds-pip-button vds-button\", \"aria-label\": pipText }, $pip ? /* @__PURE__ */ React.createElement(Icons.PIPButton.Exit, { className: \"vds-icon\" }) : /* @__PURE__ */ React.createElement(Icons.PIPButton.Enter, { className: \"vds-icon\" })));\n}\nDefaultPIPButton.displayName = \"DefaultPIPButton\";\nfunction DefaultFullscreenButton({ tooltip }) {\n const { icons: Icons } = useDefaultLayoutContext(), fullscreenText = useDefaultLayoutWord(\"Fullscreen\"), enterText = useDefaultLayoutWord(\"Enter Fullscreen\"), exitText = useDefaultLayoutWord(\"Exit Fullscreen\"), $fullscreen = useMediaState(\"fullscreen\");\n return /* @__PURE__ */ React.createElement(DefaultTooltip, { content: $fullscreen ? exitText : enterText, placement: tooltip }, /* @__PURE__ */ React.createElement(FullscreenButton, { className: \"vds-fullscreen-button vds-button\", \"aria-label\": fullscreenText }, $fullscreen ? /* @__PURE__ */ React.createElement(Icons.FullscreenButton.Exit, { className: \"vds-icon\" }) : /* @__PURE__ */ React.createElement(Icons.FullscreenButton.Enter, { className: \"vds-icon\" })));\n}\nDefaultFullscreenButton.displayName = \"DefaultFullscreenButton\";\nfunction DefaultSeekButton({\n backward,\n tooltip\n}) {\n const { icons: Icons, seekStep } = useDefaultLayoutContext(), seekForwardText = useDefaultLayoutWord(\"Seek Forward\"), seekBackwardText = useDefaultLayoutWord(\"Seek Backward\"), seconds = (backward ? -1 : 1) * seekStep, label = seconds >= 0 ? seekForwardText : seekBackwardText;\n return /* @__PURE__ */ React.createElement(DefaultTooltip, { content: label, placement: tooltip }, /* @__PURE__ */ React.createElement(SeekButton, { className: \"vds-seek-button vds-button\", seconds, \"aria-label\": label }, seconds >= 0 ? /* @__PURE__ */ React.createElement(Icons.SeekButton.Forward, { className: \"vds-icon\" }) : /* @__PURE__ */ React.createElement(Icons.SeekButton.Backward, { className: \"vds-icon\" })));\n}\nDefaultSeekButton.displayName = \"DefaultSeekButton\";\nfunction DefaultAirPlayButton({ tooltip }) {\n const { icons: Icons } = useDefaultLayoutContext(), airPlayText = useDefaultLayoutWord(\"AirPlay\"), $state = useMediaState(\"remotePlaybackState\"), stateText = useDefaultLayoutWord(uppercaseFirstChar($state)), label = `${airPlayText} ${stateText}`, Icon = ($state === \"connecting\" ? Icons.AirPlayButton.Connecting : $state === \"connected\" ? Icons.AirPlayButton.Connected : null) ?? Icons.AirPlayButton.Default;\n return /* @__PURE__ */ React.createElement(DefaultTooltip, { content: airPlayText, placement: tooltip }, /* @__PURE__ */ React.createElement(AirPlayButton, { className: \"vds-airplay-button vds-button\", \"aria-label\": label }, /* @__PURE__ */ React.createElement(Icon, { className: \"vds-icon\" })));\n}\nDefaultAirPlayButton.displayName = \"DefaultAirPlayButton\";\nfunction DefaultGoogleCastButton({ tooltip }) {\n const { icons: Icons } = useDefaultLayoutContext(), googleCastText = useDefaultLayoutWord(\"Google Cast\"), $state = useMediaState(\"remotePlaybackState\"), stateText = useDefaultLayoutWord(uppercaseFirstChar($state)), label = `${googleCastText} ${stateText}`, Icon = ($state === \"connecting\" ? Icons.GoogleCastButton.Connecting : $state === \"connected\" ? Icons.GoogleCastButton.Connected : null) ?? Icons.GoogleCastButton.Default;\n return /* @__PURE__ */ React.createElement(DefaultTooltip, { content: googleCastText, placement: tooltip }, /* @__PURE__ */ React.createElement(GoogleCastButton, { className: \"vds-google-cast-button vds-button\", \"aria-label\": label }, /* @__PURE__ */ React.createElement(Icon, { className: \"vds-icon\" })));\n}\nDefaultGoogleCastButton.displayName = \"DefaultGoogleCastButton\";\nfunction DefaultLiveButton() {\n const $live = useMediaState(\"live\"), label = useDefaultLayoutWord(\"Skip To Live\"), liveText = useDefaultLayoutWord(\"LIVE\");\n return $live ? /* @__PURE__ */ React.createElement(LiveButton, { className: \"vds-live-button\", \"aria-label\": label }, /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-live-button-text\" }, liveText)) : null;\n}\nDefaultLiveButton.displayName = \"DefaultLiveButton\";\nfunction DefaultDownloadButton() {\n const { download, icons: Icons } = useDefaultLayoutContext(), $src = useMediaState(\"source\"), $title = useMediaState(\"title\"), file = getDownloadFile({\n title: $title,\n src: $src,\n download\n }), downloadText = useDefaultLayoutWord(\"Download\");\n return isString(file?.url) ? /* @__PURE__ */ React.createElement(DefaultTooltip, { content: downloadText, placement: \"top\" }, /* @__PURE__ */ React.createElement(\n \"a\",\n {\n role: \"button\",\n className: \"vds-download-button vds-button\",\n \"aria-label\": downloadText,\n href: appendParamsToURL(file.url, { download: file.name }),\n download: file.name,\n target: \"_blank\"\n },\n Icons.DownloadButton ? /* @__PURE__ */ React.createElement(Icons.DownloadButton.Default, { className: \"vds-icon\" }) : null\n )) : null;\n}\nDefaultDownloadButton.displayName = \"DefaultDownloadButton\";\n\nfunction DefaultCaptions() {\n const exampleText = useDefaultLayoutWord(\"Captions look like this\");\n return /* @__PURE__ */ React.createElement(Captions, { className: \"vds-captions\", exampleText });\n}\nDefaultCaptions.displayName = \"DefaultCaptions\";\n\nfunction DefaultControlsSpacer() {\n return /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-controls-spacer\" });\n}\nDefaultControlsSpacer.displayName = \"DefaultControlsSpacer\";\n\nfunction useParentDialogEl() {\n const { layoutEl } = useDefaultLayoutContext(), $layoutEl = useSignal(layoutEl);\n return React.useMemo(() => $layoutEl?.closest(\"dialog\"), [$layoutEl]);\n}\n\nfunction DefaultChaptersMenu({ tooltip, placement, portalClass = \"\" }) {\n const {\n showMenuDelay,\n noModal,\n isSmallLayout,\n icons: Icons,\n menuGroup,\n menuContainer,\n colorScheme\n } = useDefaultLayoutContext(), chaptersText = useDefaultLayoutWord(\"Chapters\"), options = useChapterOptions(), disabled = !options.length, { thumbnails } = useDefaultLayoutContext(), $src = useMediaState(\"currentSrc\"), $viewType = useMediaState(\"viewType\"), $offset = !isSmallLayout && menuGroup === \"bottom\" && $viewType === \"video\" ? 26 : 0, $RemotionThumbnail = useSignal(RemotionThumbnail), colorSchemeClass = useColorSchemeClass(colorScheme), [isOpen, setIsOpen] = React.useState(false), dialogEl = useParentDialogEl();\n if (disabled) return null;\n function onOpen() {\n flushSync(() => {\n setIsOpen(true);\n });\n }\n function onClose() {\n setIsOpen(false);\n }\n const Content = /* @__PURE__ */ React.createElement(\n Items,\n {\n className: \"vds-chapters-menu-items vds-menu-items\",\n placement,\n offset: $offset\n },\n isOpen ? /* @__PURE__ */ React.createElement(\n Root$1,\n {\n className: \"vds-chapters-radio-group vds-radio-group\",\n value: options.selectedValue,\n \"data-thumbnails\": thumbnails ? \"\" : null\n },\n options.map(\n ({ cue, label, value, startTimeText, durationText, select, setProgressVar }) => /* @__PURE__ */ React.createElement(\n Item,\n {\n className: \"vds-chapter-radio vds-radio\",\n value,\n key: value,\n onSelect: select,\n ref: setProgressVar\n },\n thumbnails ? /* @__PURE__ */ React.createElement(Root$2, { src: thumbnails, className: \"vds-thumbnail\", time: cue.startTime }, /* @__PURE__ */ React.createElement(Img, null)) : $RemotionThumbnail && isRemotionSrc($src) ? /* @__PURE__ */ React.createElement($RemotionThumbnail, { className: \"vds-thumbnail\", frame: cue.startTime * $src.fps }) : null,\n /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-chapter-radio-content\" }, /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-chapter-radio-label\" }, label), /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-chapter-radio-start-time\" }, startTimeText), /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-chapter-radio-duration\" }, durationText))\n )\n )\n ) : null\n );\n return /* @__PURE__ */ React.createElement(\n Root$3,\n {\n className: \"vds-chapters-menu vds-menu\",\n showDelay: showMenuDelay,\n onOpen,\n onClose\n },\n /* @__PURE__ */ React.createElement(DefaultTooltip, { content: chaptersText, placement: tooltip }, /* @__PURE__ */ React.createElement(\n Button,\n {\n className: \"vds-menu-button vds-button\",\n disabled,\n \"aria-label\": chaptersText\n },\n /* @__PURE__ */ React.createElement(Icons.Menu.Chapters, { className: \"vds-icon\" })\n )),\n noModal || !isSmallLayout ? Content : /* @__PURE__ */ React.createElement(\n Portal,\n {\n container: menuContainer ?? dialogEl,\n className: portalClass + (colorSchemeClass ? ` ${colorSchemeClass}` : \"\"),\n disabled: \"fullscreen\",\n \"data-sm\": isSmallLayout ? \"\" : null,\n \"data-lg\": !isSmallLayout ? \"\" : null,\n \"data-size\": isSmallLayout ? \"sm\" : \"lg\"\n },\n Content\n )\n );\n}\nDefaultChaptersMenu.displayName = \"DefaultChaptersMenu\";\n\nconst FONT_COLOR_OPTION = {\n type: \"color\"\n};\nconst FONT_FAMILY_OPTION = {\n type: \"radio\",\n values: {\n \"Monospaced Serif\": \"mono-serif\",\n \"Proportional Serif\": \"pro-serif\",\n \"Monospaced Sans-Serif\": \"mono-sans\",\n \"Proportional Sans-Serif\": \"pro-sans\",\n Casual: \"casual\",\n Cursive: \"cursive\",\n \"Small Capitals\": \"capitals\"\n }\n};\nconst FONT_SIZE_OPTION = {\n type: \"slider\",\n min: 0,\n max: 400,\n step: 25,\n upIcon: null,\n downIcon: null\n};\nconst FONT_OPACITY_OPTION = {\n type: \"slider\",\n min: 0,\n max: 100,\n step: 5,\n upIcon: null,\n downIcon: null\n};\nconst FONT_TEXT_SHADOW_OPTION = {\n type: \"radio\",\n values: [\"None\", \"Drop Shadow\", \"Raised\", \"Depressed\", \"Outline\"]\n};\nconst FONT_DEFAULTS = {\n fontFamily: \"pro-sans\",\n fontSize: \"100%\",\n textColor: \"#ffffff\",\n textOpacity: \"100%\",\n textShadow: \"none\",\n textBg: \"#000000\",\n textBgOpacity: \"100%\",\n displayBg: \"#000000\",\n displayBgOpacity: \"0%\"\n};\nconst FONT_SIGNALS = Object.keys(FONT_DEFAULTS).reduce(\n (prev, type) => ({\n ...prev,\n [type]: signal(FONT_DEFAULTS[type])\n }),\n {}\n);\nif (!IS_SERVER) {\n for (const type of Object.keys(FONT_SIGNALS)) {\n const value = localStorage.getItem(`vds-player:${camelToKebabCase(type)}`);\n if (isString(value)) FONT_SIGNALS[type].set(value);\n }\n}\nfunction onFontReset() {\n for (const type of Object.keys(FONT_SIGNALS)) {\n const defaultValue = FONT_DEFAULTS[type];\n FONT_SIGNALS[type].set(defaultValue);\n }\n}\n\nfunction hexToRgb(hex) {\n const { style } = new Option();\n style.color = hex;\n return style.color.match(/\\((.*?)\\)/)[1].replace(/,/g, \" \");\n}\n\nlet isWatchingVars = false, players = /* @__PURE__ */ new Set();\nfunction updateFontCssVars() {\n if (IS_SERVER) return;\n const { player } = useMediaContext$1();\n players.add(player);\n onDispose(() => players.delete(player));\n if (!isWatchingVars) {\n scoped(() => {\n for (const type of keysOf(FONT_SIGNALS)) {\n const $value = FONT_SIGNALS[type], defaultValue = FONT_DEFAULTS[type], varName = `--media-user-${camelToKebabCase(type)}`, storageKey = `vds-player:${camelToKebabCase(type)}`;\n effect(() => {\n const value = $value(), isDefaultVarValue = value === defaultValue, varValue = !isDefaultVarValue ? getCssVarValue(player, type, value) : null;\n for (const player2 of players) {\n player2.el?.style.setProperty(varName, varValue);\n }\n if (isDefaultVarValue) {\n localStorage.removeItem(storageKey);\n } else {\n localStorage.setItem(storageKey, value);\n }\n });\n }\n }, null);\n isWatchingVars = true;\n }\n}\nfunction getCssVarValue(player, type, value) {\n switch (type) {\n case \"fontFamily\":\n const fontVariant = value === \"capitals\" ? \"small-caps\" : \"\";\n player.el?.style.setProperty(\"--media-user-font-variant\", fontVariant);\n return getFontFamilyCSSVarValue(value);\n case \"fontSize\":\n case \"textOpacity\":\n case \"textBgOpacity\":\n case \"displayBgOpacity\":\n return percentToRatio(value);\n case \"textColor\":\n return `rgb(${hexToRgb(value)} / var(--media-user-text-opacity, 1))`;\n case \"textShadow\":\n return getTextShadowCssVarValue(value);\n case \"textBg\":\n return `rgb(${hexToRgb(value)} / var(--media-user-text-bg-opacity, 1))`;\n case \"displayBg\":\n return `rgb(${hexToRgb(value)} / var(--media-user-display-bg-opacity, 1))`;\n }\n}\nfunction percentToRatio(value) {\n return (parseInt(value) / 100).toString();\n}\nfunction getFontFamilyCSSVarValue(value) {\n switch (value) {\n case \"mono-serif\":\n return '\"Courier New\", Courier, \"Nimbus Mono L\", \"Cutive Mono\", monospace';\n case \"mono-sans\":\n return '\"Deja Vu Sans Mono\", \"Lucida Console\", Monaco, Consolas, \"PT Mono\", monospace';\n case \"pro-sans\":\n return 'Roboto, \"Arial Unicode Ms\", Arial, Helvetica, Verdana, \"PT Sans Caption\", sans-serif';\n case \"casual\":\n return '\"Comic Sans MS\", Impact, Handlee, fantasy';\n case \"cursive\":\n return '\"Monotype Corsiva\", \"URW Chancery L\", \"Apple Chancery\", \"Dancing Script\", cursive';\n case \"capitals\":\n return '\"Arial Unicode Ms\", Arial, Helvetica, Verdana, \"Marcellus SC\", sans-serif + font-variant=small-caps';\n default:\n return '\"Times New Roman\", Times, Georgia, Cambria, \"PT Serif Caption\", serif';\n }\n}\nfunction getTextShadowCssVarValue(value) {\n switch (value) {\n case \"drop shadow\":\n return \"rgb(34, 34, 34) 1.86389px 1.86389px 2.79583px, rgb(34, 34, 34) 1.86389px 1.86389px 3.72778px, rgb(34, 34, 34) 1.86389px 1.86389px 4.65972px\";\n case \"raised\":\n return \"rgb(34, 34, 34) 1px 1px, rgb(34, 34, 34) 2px 2px\";\n case \"depressed\":\n return \"rgb(204, 204, 204) 1px 1px, rgb(34, 34, 34) -1px -1px\";\n case \"outline\":\n return \"rgb(34, 34, 34) 0px 0px 1.86389px, rgb(34, 34, 34) 0px 0px 1.86389px, rgb(34, 34, 34) 0px 0px 1.86389px, rgb(34, 34, 34) 0px 0px 1.86389px, rgb(34, 34, 34) 0px 0px 1.86389px\";\n default:\n return \"\";\n }\n}\n\nfunction DefaultMenuSection({ label, value, children }) {\n const id = React.useId();\n if (!label) {\n return /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-section\" }, /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-section-body\" }, children));\n }\n return /* @__PURE__ */ React.createElement(\"section\", { className: \"vds-menu-section\", role: \"group\", \"aria-labelledby\": id }, /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-section-title\" }, /* @__PURE__ */ React.createElement(\"header\", { id }, label), value ? /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-section-value\" }, value) : null), /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-section-body\" }, children));\n}\nDefaultMenuSection.displayName = \"DefaultMenuSection\";\nfunction DefaultMenuButton({ label, hint = \"\", Icon, disabled = false }) {\n const { icons: Icons } = React.useContext(DefaultLayoutContext);\n return /* @__PURE__ */ React.createElement(Button, { className: \"vds-menu-item\", disabled }, /* @__PURE__ */ React.createElement(Icons.Menu.ArrowLeft, { className: \"vds-menu-close-icon vds-icon\" }), Icon ? /* @__PURE__ */ React.createElement(Icon, { className: \"vds-menu-item-icon vds-icon\" }) : null, /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-menu-item-label\" }, label), /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-menu-item-hint\" }, hint), /* @__PURE__ */ React.createElement(Icons.Menu.ArrowRight, { className: \"vds-menu-open-icon vds-icon\" }));\n}\nDefaultMenuButton.displayName = \"DefaultMenuButton\";\nfunction DefaultMenuItem({ label, children }) {\n return /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-item\" }, /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-item-label\" }, label), children);\n}\nDefaultMenuItem.displayName = \"DefaultMenuItem\";\nfunction DefaultMenuRadioGroup({ value, options, onChange }) {\n const { icons: Icons } = useDefaultLayoutContext();\n return /* @__PURE__ */ React.createElement(Root$1, { className: \"vds-radio-group\", value, onChange }, options.map((option) => /* @__PURE__ */ React.createElement(Item, { className: \"vds-radio\", value: option.value, key: option.value }, /* @__PURE__ */ React.createElement(Icons.Menu.RadioCheck, { className: \"vds-icon\" }), /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-radio-label\", \"data-part\": \"label\" }, option.label))));\n}\nDefaultMenuRadioGroup.displayName = \"DefaultMenuRadioGroup\";\nfunction createRadioOptions(entries) {\n return React.useMemo(\n () => isArray(entries) ? entries.map((entry) => ({ label: entry, value: entry.toLowerCase() })) : Object.keys(entries).map((label) => ({ label, value: entries[label] })),\n [entries]\n );\n}\n\nfunction DefaultMenuSliderItem({\n label,\n value,\n UpIcon,\n DownIcon,\n children,\n isMin,\n isMax\n}) {\n const hasTitle = label || value, Content = /* @__PURE__ */ React.createElement(React.Fragment, null, DownIcon ? /* @__PURE__ */ React.createElement(DownIcon, { className: \"vds-icon down\" }) : null, children, UpIcon ? /* @__PURE__ */ React.createElement(UpIcon, { className: \"vds-icon up\" }) : null);\n return /* @__PURE__ */ React.createElement(\n \"div\",\n {\n className: `vds-menu-item vds-menu-slider-item${hasTitle ? \" group\" : \"\"}`,\n \"data-min\": isMin ? \"\" : null,\n \"data-max\": isMax ? \"\" : null\n },\n hasTitle ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-slider-title\" }, label ? /* @__PURE__ */ React.createElement(\"div\", null, label) : null, value ? /* @__PURE__ */ React.createElement(\"div\", null, value) : null), /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-slider-body\" }, Content)) : Content\n );\n}\nDefaultMenuSliderItem.displayName = \"DefaultMenuSliderItem\";\nfunction DefaultSliderParts() {\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Track, { className: \"vds-slider-track\" }), /* @__PURE__ */ React.createElement(TrackFill, { className: \"vds-slider-track-fill vds-slider-track\" }), /* @__PURE__ */ React.createElement(Thumb, { className: \"vds-slider-thumb\" }));\n}\nDefaultSliderParts.displayName = \"DefaultSliderParts\";\nfunction DefaultSliderSteps() {\n return /* @__PURE__ */ React.createElement(Steps, { className: \"vds-slider-steps\" }, (step) => /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-slider-step\", key: String(step) }));\n}\nDefaultSliderSteps.displayName = \"DefaultSliderSteps\";\n\nfunction DefaultFontMenu() {\n const label = useDefaultLayoutWord(\"Caption Styles\"), $hasCaptions = useMediaState(\"hasCaptions\"), fontSectionLabel = useDefaultLayoutWord(\"Font\"), textSectionLabel = useDefaultLayoutWord(\"Text\"), textBgSectionLabel = useDefaultLayoutWord(\"Text Background\"), displayBgSectionLabel = useDefaultLayoutWord(\"Display Background\");\n if (!$hasCaptions) return null;\n return /* @__PURE__ */ React.createElement(Root$3, { className: \"vds-font-menu vds-menu\" }, /* @__PURE__ */ React.createElement(DefaultMenuButton, { label }), /* @__PURE__ */ React.createElement(Items, { className: \"vds-font-style-items vds-menu-items\" }, /* @__PURE__ */ React.createElement(DefaultMenuSection, { label: fontSectionLabel }, /* @__PURE__ */ React.createElement(DefaultFontFamilyMenu, null), /* @__PURE__ */ React.createElement(DefaultFontSizeSlider, null)), /* @__PURE__ */ React.createElement(DefaultMenuSection, { label: textSectionLabel }, /* @__PURE__ */ React.createElement(DefaultTextColorInput, null), /* @__PURE__ */ React.createElement(DefaultTextShadowMenu, null), /* @__PURE__ */ React.createElement(DefaultTextOpacitySlider, null)), /* @__PURE__ */ React.createElement(DefaultMenuSection, { label: textBgSectionLabel }, /* @__PURE__ */ React.createElement(DefaultTextBgInput, null), /* @__PURE__ */ React.createElement(DefaultTextBgOpacitySlider, null)), /* @__PURE__ */ React.createElement(DefaultMenuSection, { label: displayBgSectionLabel }, /* @__PURE__ */ React.createElement(DefaultDisplayBgInput, null), /* @__PURE__ */ React.createElement(DefaultDisplayBgOpacitySlider, null)), /* @__PURE__ */ React.createElement(DefaultMenuSection, null, /* @__PURE__ */ React.createElement(DefaultResetMenuItem, null))));\n}\nDefaultFontMenu.displayName = \"DefaultFontMenu\";\nfunction DefaultFontFamilyMenu() {\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Family\", type: \"fontFamily\", option: FONT_FAMILY_OPTION });\n}\nDefaultFontFamilyMenu.displayName = \"DefaultFontFamilyMenu\";\nfunction DefaultFontSizeSlider() {\n const { icons: Icons } = useDefaultLayoutContext(), option = {\n ...FONT_SIZE_OPTION,\n upIcon: Icons.Menu.FontSizeUp,\n downIcon: Icons.Menu.FontSizeDown\n };\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Size\", type: \"fontSize\", option });\n}\nDefaultFontSizeSlider.displayName = \"DefaultFontSizeSlider\";\nfunction DefaultTextColorInput() {\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Color\", type: \"textColor\", option: FONT_COLOR_OPTION });\n}\nDefaultTextColorInput.displayName = \"DefaultTextColorInput\";\nfunction DefaultTextOpacitySlider() {\n const { icons: Icons } = useDefaultLayoutContext(), option = {\n ...FONT_OPACITY_OPTION,\n upIcon: Icons.Menu.OpacityUp,\n downIcon: Icons.Menu.OpacityDown\n };\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Opacity\", type: \"textOpacity\", option });\n}\nDefaultTextOpacitySlider.displayName = \"DefaultTextOpacitySlider\";\nfunction DefaultTextShadowMenu() {\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Shadow\", type: \"textShadow\", option: FONT_TEXT_SHADOW_OPTION });\n}\nDefaultTextShadowMenu.displayName = \"DefaultTextShadowMenu\";\nfunction DefaultTextBgInput() {\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Color\", type: \"textBg\", option: FONT_COLOR_OPTION });\n}\nDefaultTextBgInput.displayName = \"DefaultTextBgInput\";\nfunction DefaultTextBgOpacitySlider() {\n const { icons: Icons } = useDefaultLayoutContext(), option = {\n ...FONT_OPACITY_OPTION,\n upIcon: Icons.Menu.OpacityUp,\n downIcon: Icons.Menu.OpacityDown\n };\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Opacity\", type: \"textBgOpacity\", option });\n}\nDefaultTextBgOpacitySlider.displayName = \"DefaultTextBgOpacitySlider\";\nfunction DefaultDisplayBgInput() {\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Color\", type: \"displayBg\", option: FONT_COLOR_OPTION });\n}\nDefaultDisplayBgInput.displayName = \"DefaultDisplayBgInput\";\nfunction DefaultDisplayBgOpacitySlider() {\n const { icons: Icons } = useDefaultLayoutContext(), option = {\n ...FONT_OPACITY_OPTION,\n upIcon: Icons.Menu.OpacityUp,\n downIcon: Icons.Menu.OpacityDown\n };\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Opacity\", type: \"displayBgOpacity\", option });\n}\nDefaultDisplayBgOpacitySlider.displayName = \"DefaultDisplayBgOpacitySlider\";\nfunction DefaultFontSetting({ label, option, type }) {\n const player = useMediaPlayer(), $currentValue = FONT_SIGNALS[type], $value = useSignal($currentValue), translatedLabel = useDefaultLayoutWord(label);\n const notify = React.useCallback(() => {\n player?.dispatchEvent(new Event(\"vds-font-change\"));\n }, [player]);\n const onChange = React.useCallback(\n (newValue) => {\n $currentValue.set(newValue);\n notify();\n },\n [$currentValue, notify]\n );\n if (option.type === \"color\") {\n let onColorChange2 = function(event) {\n onChange(event.target.value);\n };\n return /* @__PURE__ */ React.createElement(DefaultMenuItem, { label: translatedLabel }, /* @__PURE__ */ React.createElement(\"input\", { className: \"vds-color-picker\", type: \"color\", value: $value, onChange: onColorChange2 }));\n }\n if (option.type === \"slider\") {\n let onSliderValueChange2 = function(value) {\n onChange(value + \"%\");\n };\n const { min, max, step, upIcon, downIcon } = option;\n return /* @__PURE__ */ React.createElement(\n DefaultMenuSliderItem,\n {\n label: translatedLabel,\n value: $value,\n UpIcon: upIcon,\n DownIcon: downIcon,\n isMin: $value === min + \"%\",\n isMax: $value === max + \"%\"\n },\n /* @__PURE__ */ React.createElement(\n Root$4,\n {\n className: \"vds-slider\",\n min,\n max,\n step,\n keyStep: step,\n value: parseInt($value),\n \"aria-label\": translatedLabel,\n onValueChange: onSliderValueChange2,\n onDragValueChange: onSliderValueChange2\n },\n /* @__PURE__ */ React.createElement(DefaultSliderParts, null),\n /* @__PURE__ */ React.createElement(DefaultSliderSteps, null)\n )\n );\n }\n if (option.type === \"radio\") {\n return /* @__PURE__ */ React.createElement(\n DefaultFontRadioGroup,\n {\n id: camelToKebabCase(type),\n label: translatedLabel,\n value: $value,\n values: option.values,\n onChange\n }\n );\n }\n return null;\n}\nDefaultFontSetting.displayName = \"DefaultFontSetting\";\nfunction DefaultFontRadioGroup({ id, label, value, values, onChange }) {\n const radioOptions = createRadioOptions(values), { translations } = useDefaultLayoutContext(), hint = React.useMemo(() => {\n const label2 = radioOptions.find((radio) => radio.value === value)?.label || \"\";\n return i18n(translations, label2);\n }, [value, radioOptions]);\n return /* @__PURE__ */ React.createElement(Root$3, { className: `vds-${id}-menu vds-menu` }, /* @__PURE__ */ React.createElement(DefaultMenuButton, { label, hint }), /* @__PURE__ */ React.createElement(Items, { className: \"vds-menu-items\" }, /* @__PURE__ */ React.createElement(DefaultMenuRadioGroup, { value, options: radioOptions, onChange })));\n}\nDefaultFontRadioGroup.displayName = \"DefaultFontRadioGroup\";\nfunction DefaultResetMenuItem() {\n const resetText = useDefaultLayoutWord(\"Reset\");\n return /* @__PURE__ */ React.createElement(\"button\", { className: \"vds-menu-item\", role: \"menuitem\", onClick: onFontReset }, /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-menu-item-label\" }, resetText));\n}\nDefaultResetMenuItem.displayName = \"DefaultResetMenuItem\";\n\nfunction DefaultMenuCheckbox({\n label,\n checked,\n storageKey,\n defaultChecked = false,\n onChange\n}) {\n const [isChecked, setIsChecked] = React.useState(defaultChecked), [isActive, setIsActive] = React.useState(false);\n React.useEffect(() => {\n const savedValue = storageKey ? localStorage.getItem(storageKey) : null, checked2 = !!(savedValue ?? defaultChecked);\n setIsChecked(checked2);\n onChange?.(checked2);\n }, []);\n React.useEffect(() => {\n if (isBoolean(checked)) setIsChecked(checked);\n }, [checked]);\n function onPress(event) {\n if (event && \"button\" in event && event?.button === 1) return;\n const toggledCheck = !isChecked;\n setIsChecked(toggledCheck);\n if (storageKey) localStorage.setItem(storageKey, toggledCheck ? \"1\" : \"\");\n onChange?.(toggledCheck, event?.nativeEvent);\n setIsActive(false);\n }\n function onActive(event) {\n if (event.button !== 0) return;\n setIsActive(true);\n }\n function onKeyDown(event) {\n if (isKeyboardClick(event.nativeEvent)) onPress();\n }\n return /* @__PURE__ */ React.createElement(\n \"div\",\n {\n className: \"vds-menu-checkbox\",\n role: \"menuitemcheckbox\",\n tabIndex: 0,\n \"aria-label\": label,\n \"aria-checked\": isChecked ? \"true\" : \"false\",\n \"data-active\": isActive ? \"\" : null,\n onPointerUp: onPress,\n onPointerDown: onActive,\n onKeyDown\n }\n );\n}\nDefaultMenuCheckbox.displayName = \"DefaultMenuCheckbox\";\n\nfunction DefaultAccessibilityMenu({ slots }) {\n const label = useDefaultLayoutWord(\"Accessibility\"), { icons: Icons } = useDefaultLayoutContext();\n return /* @__PURE__ */ React.createElement(Root$3, { className: \"vds-accessibility-menu vds-menu\" }, /* @__PURE__ */ React.createElement(DefaultMenuButton, { label, Icon: Icons.Menu.Accessibility }), /* @__PURE__ */ React.createElement(Items, { className: \"vds-menu-items\" }, slot(slots, \"accessibilityMenuItemsStart\", null), /* @__PURE__ */ React.createElement(DefaultMenuSection, null, /* @__PURE__ */ React.createElement(DefaultAnnouncementsMenuCheckbox, null), /* @__PURE__ */ React.createElement(DefaultKeyboardAnimationsMenuCheckbox, null)), /* @__PURE__ */ React.createElement(DefaultMenuSection, null, /* @__PURE__ */ React.createElement(DefaultFontMenu, null)), slot(slots, \"accessibilityMenuItemsEnd\", null)));\n}\nDefaultAccessibilityMenu.displayName = \"DefaultAccessibilityMenu\";\nfunction DefaultAnnouncementsMenuCheckbox() {\n const { userPrefersAnnouncements } = useDefaultLayoutContext(), label = useDefaultLayoutWord(\"Announcements\");\n function onChange(checked) {\n userPrefersAnnouncements.set(checked);\n }\n return /* @__PURE__ */ React.createElement(DefaultMenuItem, { label }, /* @__PURE__ */ React.createElement(\n DefaultMenuCheckbox,\n {\n label,\n defaultChecked: true,\n storageKey: \"vds-player::announcements\",\n onChange\n }\n ));\n}\nDefaultAnnouncementsMenuCheckbox.displayName = \"DefaultAnnouncementsMenuCheckbox\";\nfunction DefaultKeyboardAnimationsMenuCheckbox() {\n const $viewType = useMediaState(\"viewType\"), { userPrefersKeyboardAnimations, noKeyboardAnimations } = useDefaultLayoutContext(), label = useDefaultLayoutWord(\"Keyboard Animations\");\n if ($viewType !== \"video\" || noKeyboardAnimations) return null;\n function onChange(checked) {\n userPrefersKeyboardAnimations.set(checked);\n }\n return /* @__PURE__ */ React.createElement(DefaultMenuItem, { label }, /* @__PURE__ */ React.createElement(\n DefaultMenuCheckbox,\n {\n label,\n defaultChecked: true,\n storageKey: \"vds-player::keyboard-animations\",\n onChange\n }\n ));\n}\nDefaultKeyboardAnimationsMenuCheckbox.displayName = \"DefaultKeyboardAnimationsMenuCheckbox\";\n\nfunction DefaultAudioMenu({ slots }) {\n const label = useDefaultLayoutWord(\"Audio\"), $canSetAudioGain = useMediaState(\"canSetAudioGain\"), $audioTracks = useMediaState(\"audioTracks\"), { noAudioGain, icons: Icons } = useDefaultLayoutContext(), hasGainSlider = $canSetAudioGain && !noAudioGain, $disabled = !hasGainSlider && $audioTracks.length <= 1;\n if ($disabled) return null;\n return /* @__PURE__ */ React.createElement(Root$3, { className: \"vds-audio-menu vds-menu\" }, /* @__PURE__ */ React.createElement(DefaultMenuButton, { label, Icon: Icons.Menu.Audio }), /* @__PURE__ */ React.createElement(Items, { className: \"vds-menu-items\" }, slot(slots, \"audioMenuItemsStart\", null), /* @__PURE__ */ React.createElement(DefaultAudioTracksMenu, null), hasGainSlider ? /* @__PURE__ */ React.createElement(DefaultAudioBoostMenuSection, null) : null, slot(slots, \"audioMenuItemsEnd\", null)));\n}\nDefaultAudioMenu.displayName = \"DefaultAudioMenu\";\nfunction DefaultAudioBoostMenuSection() {\n const $audioGain = useMediaState(\"audioGain\"), label = useDefaultLayoutWord(\"Boost\"), value = Math.round((($audioGain ?? 1) - 1) * 100) + \"%\", $canSetAudioGain = useMediaState(\"canSetAudioGain\"), { noAudioGain, icons: Icons } = useDefaultLayoutContext(), $disabled = !$canSetAudioGain || noAudioGain, min = useGainMin(), max = useGainMax();\n if ($disabled) return null;\n return /* @__PURE__ */ React.createElement(DefaultMenuSection, { label, value }, /* @__PURE__ */ React.createElement(\n DefaultMenuSliderItem,\n {\n UpIcon: Icons.Menu.AudioBoostUp,\n DownIcon: Icons.Menu.AudioBoostDown,\n isMin: (($audioGain ?? 1) - 1) * 100 <= min,\n isMax: (($audioGain ?? 1) - 1) * 100 === max\n },\n /* @__PURE__ */ React.createElement(DefaultAudioGainSlider, null)\n ));\n}\nDefaultAudioBoostMenuSection.displayName = \"DefaultAudioBoostMenuSection\";\nfunction useGainMin() {\n const { audioGains } = useDefaultLayoutContext(), min = isArray(audioGains) ? audioGains[0] : audioGains?.min;\n return min ?? 0;\n}\nfunction useGainMax() {\n const { audioGains } = useDefaultLayoutContext(), max = isArray(audioGains) ? audioGains[audioGains.length - 1] : audioGains?.max;\n return max ?? 300;\n}\nfunction useGainStep() {\n const { audioGains } = useDefaultLayoutContext(), step = isArray(audioGains) ? audioGains[1] - audioGains[0] : audioGains?.step;\n return step || 25;\n}\nfunction DefaultAudioGainSlider() {\n const label = useDefaultLayoutWord(\"Audio Boost\"), min = useGainMin(), max = useGainMax(), step = useGainStep();\n return /* @__PURE__ */ React.createElement(\n Root$5,\n {\n className: \"vds-audio-gain-slider vds-slider\",\n \"aria-label\": label,\n min,\n max,\n step,\n keyStep: step\n },\n /* @__PURE__ */ React.createElement(DefaultSliderParts, null),\n /* @__PURE__ */ React.createElement(DefaultSliderSteps, null)\n );\n}\nDefaultAudioGainSlider.displayName = \"DefaultAudioGainSlider\";\nfunction DefaultAudioTracksMenu() {\n const { icons: Icons } = useDefaultLayoutContext(), label = useDefaultLayoutWord(\"Track\"), defaultText = useDefaultLayoutWord(\"Default\"), $track = useMediaState(\"audioTrack\"), options = useAudioOptions();\n if (options.disabled) return null;\n return /* @__PURE__ */ React.createElement(Root$3, { className: \"vds-audio-track-menu vds-menu\" }, /* @__PURE__ */ React.createElement(\n DefaultMenuButton,\n {\n label,\n hint: $track?.label ?? defaultText,\n disabled: options.disabled,\n Icon: Icons.Menu.Audio\n }\n ), /* @__PURE__ */ React.createElement(Items, { className: \"vds-menu-items\" }, /* @__PURE__ */ React.createElement(\n Root$1,\n {\n className: \"vds-audio-radio-group vds-radio-group\",\n value: options.selectedValue\n },\n options.map(({ label: label2, value, select }) => /* @__PURE__ */ React.createElement(\n Item,\n {\n className: \"vds-audio-radio vds-radio\",\n value,\n onSelect: select,\n key: value\n },\n /* @__PURE__ */ React.createElement(Icons.Menu.RadioCheck, { className: \"vds-icon\" }),\n /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-radio-label\" }, label2)\n ))\n )));\n}\nDefaultAudioTracksMenu.displayName = \"DefaultAudioTracksMenu\";\n\nfunction DefaultCaptionMenu({ slots }) {\n const { icons: Icons } = useDefaultLayoutContext(), label = useDefaultLayoutWord(\"Captions\"), offText = useDefaultLayoutWord(\"Off\"), options = useCaptionOptions({ off: offText }), hint = options.selectedTrack?.label ?? offText;\n if (options.disabled) return null;\n return /* @__PURE__ */ React.createElement(Root$3, { className: \"vds-captions-menu vds-menu\" }, /* @__PURE__ */ React.createElement(\n DefaultMenuButton,\n {\n label,\n hint,\n disabled: options.disabled,\n Icon: Icons.Menu.Captions\n }\n ), /* @__PURE__ */ React.createElement(Items, { className: \"vds-menu-items\" }, slot(slots, \"captionsMenuItemsStart\", null), /* @__PURE__ */ React.createElement(\n Root$1,\n {\n className: \"vds-captions-radio-group vds-radio-group\",\n value: options.selectedValue\n },\n options.map(({ label: label2, value, select }) => /* @__PURE__ */ React.createElement(\n Item,\n {\n className: \"vds-caption-radio vds-radio\",\n value,\n onSelect: select,\n key: value\n },\n /* @__PURE__ */ React.createElement(Icons.Menu.RadioCheck, { className: \"vds-icon\" }),\n /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-radio-label\" }, label2)\n ))\n ), slot(slots, \"captionsMenuItemsEnd\", null)));\n}\nDefaultCaptionMenu.displayName = \"DefaultCaptionMenu\";\n\nfunction DefaultPlaybackMenu({ slots }) {\n const label = useDefaultLayoutWord(\"Playback\"), { icons: Icons } = useDefaultLayoutContext();\n return /* @__PURE__ */ React.createElement(Root$3, { className: \"vds-playback-menu vds-menu\" }, /* @__PURE__ */ React.createElement(DefaultMenuButton, { label, Icon: Icons.Menu.Playback }), /* @__PURE__ */ React.createElement(Items, { className: \"vds-menu-items\" }, slot(slots, \"playbackMenuItemsStart\", null), /* @__PURE__ */ React.createElement(DefaultMenuSection, null, slot(slots, \"playbackMenuLoop\", /* @__PURE__ */ React.createElement(DefaultLoopMenuCheckbox, null))), /* @__PURE__ */ React.createElement(DefaultSpeedMenuSection, null), /* @__PURE__ */ React.createElement(DefaultQualityMenuSection, null), slot(slots, \"playbackMenuItemsEnd\", null)));\n}\nDefaultPlaybackMenu.displayName = \"DefaultPlaybackMenu\";\nfunction DefaultLoopMenuCheckbox() {\n const { remote } = useMediaContext(), label = useDefaultLayoutWord(\"Loop\");\n function onChange(checked, trigger) {\n remote.userPrefersLoopChange(checked, trigger);\n }\n return /* @__PURE__ */ React.createElement(DefaultMenuItem, { label }, /* @__PURE__ */ React.createElement(DefaultMenuCheckbox, { label, storageKey: \"vds-player::user-loop\", onChange }));\n}\nDefaultLoopMenuCheckbox.displayName = \"DefaultLoopMenuCheckbox\";\nfunction DefaultAutoQualityMenuCheckbox() {\n const { remote, qualities } = useMediaContext(), $autoQuality = useMediaState(\"autoQuality\"), label = useDefaultLayoutWord(\"Auto\");\n function onChange(checked, trigger) {\n if (checked) {\n remote.requestAutoQuality(trigger);\n } else {\n remote.changeQuality(qualities.selectedIndex, trigger);\n }\n }\n return /* @__PURE__ */ React.createElement(DefaultMenuItem, { label }, /* @__PURE__ */ React.createElement(\n DefaultMenuCheckbox,\n {\n label,\n checked: $autoQuality,\n onChange,\n defaultChecked: $autoQuality\n }\n ));\n}\nDefaultAutoQualityMenuCheckbox.displayName = \"DefaultAutoQualityMenuCheckbox\";\nfunction DefaultQualityMenuSection() {\n const { hideQualityBitrate, icons: Icons } = useDefaultLayoutContext(), $canSetQuality = useMediaState(\"canSetQuality\"), $qualities = useMediaState(\"qualities\"), $quality = useMediaState(\"quality\"), label = useDefaultLayoutWord(\"Quality\"), autoText = useDefaultLayoutWord(\"Auto\"), sortedQualities = React.useMemo(() => sortVideoQualities($qualities), [$qualities]);\n if (!$canSetQuality || $qualities.length <= 1) return null;\n const height = $quality?.height, bitrate = !hideQualityBitrate ? $quality?.bitrate : null, bitrateText = bitrate && bitrate > 0 ? `${(bitrate / 1e6).toFixed(2)} Mbps` : null, value = height ? `${height}p${bitrateText ? ` (${bitrateText})` : \"\"}` : autoText, isMin = sortedQualities[0] === $quality, isMax = sortedQualities.at(-1) === $quality;\n return /* @__PURE__ */ React.createElement(DefaultMenuSection, { label, value }, /* @__PURE__ */ React.createElement(\n DefaultMenuSliderItem,\n {\n UpIcon: Icons.Menu.QualityUp,\n DownIcon: Icons.Menu.QualityDown,\n isMin,\n isMax\n },\n /* @__PURE__ */ React.createElement(DefaultQualitySlider, null)\n ), /* @__PURE__ */ React.createElement(DefaultAutoQualityMenuCheckbox, null));\n}\nDefaultQualityMenuSection.displayName = \"DefaultQualityMenuSection\";\nfunction DefaultQualitySlider() {\n const label = useDefaultLayoutWord(\"Quality\");\n return /* @__PURE__ */ React.createElement(Root$7, { className: \"vds-quality-slider vds-slider\", \"aria-label\": label }, /* @__PURE__ */ React.createElement(DefaultSliderParts, null), /* @__PURE__ */ React.createElement(DefaultSliderSteps, null));\n}\nDefaultQualitySlider.displayName = \"DefaultQualitySlider\";\nfunction DefaultSpeedMenuSection() {\n const { icons: Icons } = useDefaultLayoutContext(), $playbackRate = useMediaState(\"playbackRate\"), $canSetPlaybackRate = useMediaState(\"canSetPlaybackRate\"), label = useDefaultLayoutWord(\"Speed\"), normalText = useDefaultLayoutWord(\"Normal\"), min = useSpeedMin(), max = useSpeedMax(), value = $playbackRate === 1 ? normalText : $playbackRate + \"x\";\n if (!$canSetPlaybackRate) return null;\n return /* @__PURE__ */ React.createElement(DefaultMenuSection, { label, value }, /* @__PURE__ */ React.createElement(\n DefaultMenuSliderItem,\n {\n UpIcon: Icons.Menu.SpeedUp,\n DownIcon: Icons.Menu.SpeedDown,\n isMin: $playbackRate === min,\n isMax: $playbackRate === max\n },\n /* @__PURE__ */ React.createElement(DefaultSpeedSlider, null)\n ));\n}\nfunction useSpeedMin() {\n const { playbackRates } = useDefaultLayoutContext(), rates = playbackRates;\n return (isArray(rates) ? rates[0] : rates?.min) ?? 0;\n}\nfunction useSpeedMax() {\n const { playbackRates } = useDefaultLayoutContext(), rates = playbackRates;\n return (isArray(rates) ? rates[rates.length - 1] : rates?.max) ?? 2;\n}\nfunction useSpeedStep() {\n const { playbackRates } = useDefaultLayoutContext(), rates = playbackRates;\n return (isArray(rates) ? rates[1] - rates[0] : rates?.step) || 0.25;\n}\nfunction DefaultSpeedSlider() {\n const label = useDefaultLayoutWord(\"Speed\"), min = useSpeedMin(), max = useSpeedMax(), step = useSpeedStep();\n return /* @__PURE__ */ React.createElement(\n Root$6,\n {\n className: \"vds-speed-slider vds-slider\",\n \"aria-label\": label,\n min,\n max,\n step,\n keyStep: step\n },\n /* @__PURE__ */ React.createElement(DefaultSliderParts, null),\n /* @__PURE__ */ React.createElement(DefaultSliderSteps, null)\n );\n}\nDefaultSpeedSlider.displayName = \"DefaultSpeedSlider\";\n\nfunction DefaultSettingsMenu({\n tooltip,\n placement,\n portalClass = \"\",\n slots\n}) {\n const {\n showMenuDelay,\n icons: Icons,\n isSmallLayout,\n menuContainer,\n menuGroup,\n noModal,\n colorScheme\n } = useDefaultLayoutContext(), settingsText = useDefaultLayoutWord(\"Settings\"), $viewType = useMediaState(\"viewType\"), $offset = !isSmallLayout && menuGroup === \"bottom\" && $viewType === \"video\" ? 26 : 0, colorSchemeClass = useColorSchemeClass(colorScheme), [isOpen, setIsOpen] = React.useState(false), dialogEl = useParentDialogEl();\n useScoped(updateFontCssVars);\n function onOpen() {\n flushSync(() => {\n setIsOpen(true);\n });\n }\n function onClose() {\n setIsOpen(false);\n }\n const Content = /* @__PURE__ */ React.createElement(\n Items,\n {\n className: \"vds-settings-menu-items vds-menu-items\",\n placement,\n offset: $offset\n },\n isOpen ? /* @__PURE__ */ React.createElement(React.Fragment, null, slot(slots, \"settingsMenuItemsStart\", null), slot(slots, \"settingsMenuStartItems\", null), /* @__PURE__ */ React.createElement(DefaultPlaybackMenu, { slots }), /* @__PURE__ */ React.createElement(DefaultAccessibilityMenu, { slots }), /* @__PURE__ */ React.createElement(DefaultAudioMenu, { slots }), /* @__PURE__ */ React.createElement(DefaultCaptionMenu, { slots }), slot(slots, \"settingsMenuEndItems\", null), slot(slots, \"settingsMenuItemsEnd\", null)) : null\n );\n return /* @__PURE__ */ React.createElement(\n Root$3,\n {\n className: \"vds-settings-menu vds-menu\",\n showDelay: showMenuDelay,\n onOpen,\n onClose\n },\n /* @__PURE__ */ React.createElement(DefaultTooltip, { content: settingsText, placement: tooltip }, /* @__PURE__ */ React.createElement(Button, { className: \"vds-menu-button vds-button\", \"aria-label\": settingsText }, /* @__PURE__ */ React.createElement(Icons.Menu.Settings, { className: \"vds-icon vds-rotate-icon\" }))),\n noModal || !isSmallLayout ? Content : /* @__PURE__ */ React.createElement(\n Portal,\n {\n className: portalClass + (colorSchemeClass ? ` ${colorSchemeClass}` : \"\"),\n container: menuContainer ?? dialogEl,\n disabled: \"fullscreen\",\n \"data-sm\": isSmallLayout ? \"\" : null,\n \"data-lg\": !isSmallLayout ? \"\" : null,\n \"data-size\": isSmallLayout ? \"sm\" : \"lg\",\n \"data-view-type\": $viewType\n },\n Content\n )\n );\n}\nDefaultSettingsMenu.displayName = \"DefaultSettingsMenu\";\n\nfunction DefaultVolumePopup({ tooltip, orientation, slots }) {\n const $pointer = useMediaState(\"pointer\"), $muted = useMediaState(\"muted\"), $canSetVolume = useMediaState(\"canSetVolume\"), [rootEl, setRootEl] = React.useState(null), isRootActive = useActive(rootEl), muteButton = slot(slots, \"muteButton\", /* @__PURE__ */ React.createElement(DefaultMuteButton, { tooltip }));\n if (!$canSetVolume) {\n return muteButton;\n }\n return $pointer === \"coarse\" && !$muted ? null : /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-volume\", \"data-active\": isRootActive ? \"\" : null, ref: setRootEl }, muteButton, /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-volume-popup\" }, slot(slots, \"volumeSlider\", /* @__PURE__ */ React.createElement(DefaultVolumeSlider, { orientation }))));\n}\nDefaultVolumePopup.displayName = \"DefaultVolumePopup\";\nfunction DefaultVolumeSlider(props) {\n const label = useDefaultLayoutWord(\"Volume\");\n return /* @__PURE__ */ React.createElement(Root$8, { className: \"vds-volume-slider vds-slider\", \"aria-label\": label, ...props }, /* @__PURE__ */ React.createElement(Track, { className: \"vds-slider-track\" }), /* @__PURE__ */ React.createElement(TrackFill, { className: \"vds-slider-track-fill vds-slider-track\" }), /* @__PURE__ */ React.createElement(Thumb, { className: \"vds-slider-thumb\" }), /* @__PURE__ */ React.createElement(Preview, { className: \"vds-slider-preview\", noClamp: true }, /* @__PURE__ */ React.createElement(Value, { className: \"vds-slider-value\" })));\n}\nDefaultVolumeSlider.displayName = \"DefaultVolumeSlider\";\nfunction DefaultTimeSlider() {\n const [instance, setInstance] = React.useState(null), [width, setWidth] = React.useState(0), $src = useMediaState(\"currentSrc\"), { thumbnails, sliderChaptersMinWidth, disableTimeSlider, seekStep, noScrubGesture } = useDefaultLayoutContext(), label = useDefaultLayoutWord(\"Seek\"), $RemotionSliderThumbnail = useSignal(RemotionSliderThumbnail);\n const onResize = React.useCallback(() => {\n const el = instance?.el;\n el && setWidth(el.clientWidth);\n }, [instance]);\n useResizeObserver(instance?.el, onResize);\n return /* @__PURE__ */ React.createElement(\n Root$9,\n {\n className: \"vds-time-slider vds-slider\",\n \"aria-label\": label,\n disabled: disableTimeSlider,\n noSwipeGesture: noScrubGesture,\n keyStep: seekStep,\n ref: setInstance\n },\n /* @__PURE__ */ React.createElement(\n Chapters,\n {\n className: \"vds-slider-chapters\",\n disabled: width < sliderChaptersMinWidth\n },\n (cues, forwardRef) => cues.map((cue) => /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-slider-chapter\", key: cue.startTime, ref: forwardRef }, /* @__PURE__ */ React.createElement(Track, { className: \"vds-slider-track\" }), /* @__PURE__ */ React.createElement(TrackFill, { className: \"vds-slider-track-fill vds-slider-track\" }), /* @__PURE__ */ React.createElement(Progress, { className: \"vds-slider-progress vds-slider-track\" })))\n ),\n /* @__PURE__ */ React.createElement(Thumb, { className: \"vds-slider-thumb\" }),\n /* @__PURE__ */ React.createElement(Preview, { className: \"vds-slider-preview\" }, thumbnails ? /* @__PURE__ */ React.createElement(\n Thumbnail.Root,\n {\n src: thumbnails,\n className: \"vds-slider-thumbnail vds-thumbnail\"\n },\n /* @__PURE__ */ React.createElement(Thumbnail.Img, null)\n ) : $RemotionSliderThumbnail && isRemotionSrc($src) ? /* @__PURE__ */ React.createElement($RemotionSliderThumbnail, { className: \"vds-slider-thumbnail vds-thumbnail\" }) : null, /* @__PURE__ */ React.createElement(ChapterTitle, { className: \"vds-slider-chapter-title\" }), /* @__PURE__ */ React.createElement(Value, { className: \"vds-slider-value\" }))\n );\n}\nDefaultTimeSlider.displayName = \"DefaultTimeSlider\";\n\nfunction DefaultTimeGroup({ slots }) {\n const $duration = useMediaState(\"duration\");\n if (!$duration) return null;\n return /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-time-group\" }, slot(slots, \"currentTime\", /* @__PURE__ */ React.createElement(Time, { className: \"vds-time\", type: \"current\" })), slot(slots, \"timeDivider\", /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-time-divider\" }, \"/\")), slot(slots, \"endTime\", /* @__PURE__ */ React.createElement(Time, { className: \"vds-time\", type: \"duration\" })));\n}\nDefaultTimeGroup.displayName = \"DefaultTimeGroup\";\nfunction DefaultTimeInfo({ slots }) {\n const $live = useMediaState(\"live\");\n return $live ? slot(slots, \"liveButton\", /* @__PURE__ */ React.createElement(DefaultLiveButton, null)) : /* @__PURE__ */ React.createElement(DefaultTimeGroup, { slots });\n}\nDefaultTimeInfo.displayName = \"DefaultTimeInfo\";\nfunction DefaultTimeInvert({ slots }) {\n const $live = useMediaState(\"live\"), $duration = useMediaState(\"duration\");\n return $live ? slot(slots, \"liveButton\", /* @__PURE__ */ React.createElement(DefaultLiveButton, null)) : slot(\n slots,\n \"endTime\",\n $duration ? /* @__PURE__ */ React.createElement(Time, { className: \"vds-time\", type: \"current\", toggle: true, remainder: true }) : null\n );\n}\nDefaultTimeInvert.displayName = \"DefaultTimeInvert\";\n\nconst MediaLayout$1 = createDefaultMediaLayout({\n type: \"audio\",\n smLayoutWhen({ width }) {\n return width < 576;\n },\n renderLayout: () => /* @__PURE__ */ React.createElement(AudioLayout, null)\n});\nfunction DefaultAudioLayout(props) {\n const [scrubbing, setScrubbing] = React.useState(false), $pointer = useMediaState(\"pointer\");\n const onStartScrubbing = React.useCallback((event) => {\n const { target } = event, hasTimeSlider = !!(target instanceof HTMLElement && target.closest(\".vds-time-slider\"));\n if (!hasTimeSlider) return;\n event.nativeEvent.stopImmediatePropagation();\n setScrubbing(true);\n }, []);\n const onStopScrubbing = React.useCallback(() => {\n setScrubbing(false);\n }, []);\n React.useEffect(() => {\n if (scrubbing) return listenEvent(window, \"pointerdown\", onStopScrubbing);\n }, [scrubbing, onStopScrubbing]);\n return /* @__PURE__ */ React.createElement(\n MediaLayout$1,\n {\n ...props,\n \"data-scrubbing\": scrubbing ? \"\" : null,\n onPointerDown: scrubbing ? (e) => e.stopPropagation() : void 0,\n onPointerDownCapture: $pointer === \"coarse\" && !scrubbing ? onStartScrubbing : void 0\n }\n );\n}\nDefaultAudioLayout.displayName = \"DefaultAudioLayout\";\nfunction AudioLayout() {\n const slots = useDefaultAudioLayoutSlots();\n useLayoutName(\"audio\");\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(DefaultAnnouncer, null), /* @__PURE__ */ React.createElement(DefaultCaptions, null), /* @__PURE__ */ React.createElement(Root$a, { className: \"vds-controls\" }, /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\" }, slot(slots, \"seekBackwardButton\", /* @__PURE__ */ React.createElement(DefaultSeekButton, { backward: true, tooltip: \"top start\" })), slot(slots, \"playButton\", /* @__PURE__ */ React.createElement(DefaultPlayButton, { tooltip: \"top center\" })), slot(slots, \"seekForwardButton\", /* @__PURE__ */ React.createElement(DefaultSeekButton, { tooltip: \"top center\" })), /* @__PURE__ */ React.createElement(DefaultAudioTitle, null), slot(slots, \"timeSlider\", /* @__PURE__ */ React.createElement(DefaultTimeSlider, null)), /* @__PURE__ */ React.createElement(DefaultTimeInvert, { slots }), /* @__PURE__ */ React.createElement(DefaultVolumePopup, { orientation: \"vertical\", tooltip: \"top\", slots }), slot(slots, \"captionButton\", /* @__PURE__ */ React.createElement(DefaultCaptionButton, { tooltip: \"top center\" })), slot(slots, \"downloadButton\", /* @__PURE__ */ React.createElement(DefaultDownloadButton, null)), /* @__PURE__ */ React.createElement(DefaultAudioMenus, { slots }))));\n}\nAudioLayout.displayName = \"AudioLayout\";\nfunction DefaultAudioMenus({ slots }) {\n const { isSmallLayout, noModal } = useDefaultLayoutContext(), placement = noModal ? \"top end\" : !isSmallLayout ? \"top end\" : null;\n return /* @__PURE__ */ React.createElement(React.Fragment, null, slot(\n slots,\n \"chaptersMenu\",\n /* @__PURE__ */ React.createElement(DefaultChaptersMenu, { tooltip: \"top\", placement, portalClass: \"vds-audio-layout\" })\n ), slot(\n slots,\n \"settingsMenu\",\n /* @__PURE__ */ React.createElement(\n DefaultSettingsMenu,\n {\n tooltip: \"top end\",\n placement,\n portalClass: \"vds-audio-layout\",\n slots\n }\n )\n ));\n}\nDefaultAudioMenus.displayName = \"DefaultAudioMenus\";\nfunction DefaultAudioTitle() {\n const [rootEl, setRootEl] = React.useState(null), media = useMediaContext(), { translations } = useDefaultLayoutContext(), [isTextOverflowing, setIsTextOverflowing] = React.useState(false);\n const isContinued = createComputed(() => {\n const { started, currentTime } = media.$state;\n return started() || currentTime() > 0;\n });\n const $title = useSignal(\n createComputed(() => {\n const { title, ended } = media.$state;\n if (!title()) return \"\";\n const word = ended() ? \"Replay\" : isContinued() ? \"Continue\" : \"Play\";\n return `${i18n(translations, word)}: ${title()}`;\n })\n );\n const chapterTitle = useChapterTitle(), $isContinued = useSignal(isContinued), $chapterTitle = $isContinued ? chapterTitle : \"\", isTransitionActive = useTransitionActive(rootEl);\n React.useEffect(() => {\n if (isTransitionActive && document.activeElement === document.body) {\n media.player.el?.focus({ preventScroll: true });\n }\n }, []);\n const onResize = React.useCallback(() => {\n const el = rootEl, isOverflowing = !!el && !isTransitionActive && el.clientWidth < el.children[0].clientWidth;\n if (el) toggleClass(el, \"vds-marquee\", isOverflowing);\n setIsTextOverflowing(isOverflowing);\n }, [rootEl, isTransitionActive]);\n useResizeObserver(rootEl, onResize);\n return $title ? /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-title\", title: $title, ref: setRootEl }, /* @__PURE__ */ React.createElement(AudioTitle, { title: $title, chapterTitle: $chapterTitle }), isTextOverflowing && !isTransitionActive ? /* @__PURE__ */ React.createElement(AudioTitle, { title: $title, chapterTitle: $chapterTitle }) : null) : /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null);\n}\nDefaultAudioTitle.displayName = \"DefaultAudioTitle\";\nfunction AudioTitle({ title, chapterTitle }) {\n const slots = useDefaultAudioLayoutSlots();\n return /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-title-text\" }, slot(slots, \"title\", title), slot(slots, \"chapterTitle\", /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-chapter-title\" }, chapterTitle)));\n}\nAudioTitle.displayName = \"AudioTitle\";\n\nconst DefaultKeyboardDisplay = React.forwardRef(\n ({ icons: Icons, ...props }, forwardRef) => {\n const [visible, setVisible] = React.useState(false), [Icon, setIcon] = React.useState(null), [count, setCount] = React.useState(0), $lastKeyboardAction = useMediaState(\"lastKeyboardAction\");\n React.useEffect(() => {\n setCount((n) => n + 1);\n }, [$lastKeyboardAction]);\n const actionDataAttr = React.useMemo(() => {\n const action = $lastKeyboardAction?.action;\n return action && visible ? camelToKebabCase(action) : null;\n }, [visible, $lastKeyboardAction]);\n const className = React.useMemo(\n () => `vds-kb-action${!visible ? \" hidden\" : \"\"}${props.className ? ` ${props.className}` : \"\"}`,\n [visible]\n );\n const $$text = createComputed(getText), $text = useSignal($$text);\n createEffect(() => {\n const Icon2 = getIcon(Icons);\n setIcon(() => Icon2);\n }, [Icons]);\n React.useEffect(() => {\n setVisible(!!$lastKeyboardAction);\n const id = setTimeout(() => setVisible(false), 500);\n return () => {\n setVisible(false);\n window.clearTimeout(id);\n };\n }, [$lastKeyboardAction]);\n return Icon ? /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props,\n className,\n \"data-action\": actionDataAttr,\n ref: forwardRef\n },\n /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-kb-text-wrapper\" }, /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-kb-text\" }, $text)),\n /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-kb-bezel\", key: count }, /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-kb-icon\" }, /* @__PURE__ */ React.createElement(Icon, null)))\n ) : null;\n }\n);\nDefaultKeyboardDisplay.displayName = \"DefaultKeyboardDisplay\";\nfunction getText() {\n const { $state } = useContext(mediaContext), action = $state.lastKeyboardAction()?.action, audioGain = $state.audioGain() ?? 1;\n switch (action) {\n case \"toggleMuted\":\n return $state.muted() ? \"0%\" : getVolumeText($state.volume(), audioGain);\n case \"volumeUp\":\n case \"volumeDown\":\n return getVolumeText($state.volume(), audioGain);\n default:\n return \"\";\n }\n}\nfunction getVolumeText(volume, gain) {\n return `${Math.round(volume * gain * 100)}%`;\n}\nfunction getIcon(Icons) {\n const { $state } = useContext(mediaContext), action = $state.lastKeyboardAction()?.action;\n switch (action) {\n case \"togglePaused\":\n return !$state.paused() ? Icons.Play : Icons.Pause;\n case \"toggleMuted\":\n return $state.muted() || $state.volume() === 0 ? Icons.Mute : $state.volume() >= 0.5 ? Icons.VolumeUp : Icons.VolumeDown;\n case \"toggleFullscreen\":\n return $state.fullscreen() ? Icons.EnterFullscreen : Icons.ExitFullscreen;\n case \"togglePictureInPicture\":\n return $state.pictureInPicture() ? Icons.EnterPiP : Icons.ExitPiP;\n case \"toggleCaptions\":\n return $state.hasCaptions() ? $state.textTrack() ? Icons.CaptionsOn : Icons.CaptionsOff : null;\n case \"volumeUp\":\n return Icons.VolumeUp;\n case \"volumeDown\":\n return Icons.VolumeDown;\n case \"seekForward\":\n return Icons.SeekForward;\n case \"seekBackward\":\n return Icons.SeekBackward;\n default:\n return null;\n }\n}\n\nfunction DefaultTitle() {\n const $started = useMediaState(\"started\"), $title = useMediaState(\"title\"), $hasChapters = useActiveTextTrack(\"chapters\");\n return $hasChapters && ($started || !$title) ? /* @__PURE__ */ React.createElement(ChapterTitle$1, { className: \"vds-chapter-title\" }) : /* @__PURE__ */ React.createElement(Title, { className: \"vds-chapter-title\" });\n}\nDefaultTitle.displayName = \"DefaultTitle\";\n\nconst MediaLayout = createDefaultMediaLayout({\n type: \"video\",\n smLayoutWhen({ width, height }) {\n return width < 576 || height < 380;\n },\n renderLayout(props) {\n return /* @__PURE__ */ React.createElement(VideoLayout, { ...props });\n }\n});\nfunction DefaultVideoLayout(props) {\n return /* @__PURE__ */ React.createElement(MediaLayout, { ...props });\n}\nDefaultVideoLayout.displayName = \"DefaultVideoLayout\";\nfunction VideoLayout({ streamType, isLoadLayout, isSmallLayout }) {\n useLayoutName(\"video\");\n return isLoadLayout ? /* @__PURE__ */ React.createElement(DefaultVideoLoadLayout, null) : streamType === \"unknown\" ? /* @__PURE__ */ React.createElement(DefaultBufferingIndicator, null) : isSmallLayout ? /* @__PURE__ */ React.createElement(DefaultVideoSmallLayout, null) : /* @__PURE__ */ React.createElement(DefaultVideoLargeLayout, null);\n}\nVideoLayout.displayName = \"VideoLayout\";\nfunction DefaultVideoLargeLayout() {\n const { menuGroup } = useDefaultLayoutContext(), baseSlots = useDefaultVideoLayoutSlots(), slots = { ...baseSlots, ...baseSlots?.largeLayout };\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(DefaultAnnouncer, null), /* @__PURE__ */ React.createElement(DefaultVideoGestures, null), /* @__PURE__ */ React.createElement(DefaultVideoKeyboardDisplay, null), slot(slots, \"bufferingIndicator\", /* @__PURE__ */ React.createElement(DefaultBufferingIndicator, null)), slot(slots, \"captions\", /* @__PURE__ */ React.createElement(DefaultCaptions, null)), /* @__PURE__ */ React.createElement(Root$a, { className: \"vds-controls\" }, /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\" }, slot(slots, \"topControlsGroupStart\", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, \"topControlsGroupCenter\", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, \"topControlsGroupEnd\", null), menuGroup === \"top\" && /* @__PURE__ */ React.createElement(DefaultVideoMenus, { slots })), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\" }, slot(slots, \"centerControlsGroupStart\", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, \"centerControlsGroupCenter\", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, \"centerControlsGroupEnd\", null)), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\" }, slot(slots, \"timeSlider\", /* @__PURE__ */ React.createElement(DefaultTimeSlider, null))), /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\" }, slot(slots, \"playButton\", /* @__PURE__ */ React.createElement(DefaultPlayButton, { tooltip: \"top start\" })), /* @__PURE__ */ React.createElement(DefaultVolumePopup, { orientation: \"horizontal\", tooltip: \"top\", slots }), /* @__PURE__ */ React.createElement(DefaultTimeInfo, { slots }), slot(slots, \"chapterTitle\", /* @__PURE__ */ React.createElement(DefaultTitle, null)), slot(slots, \"captionButton\", /* @__PURE__ */ React.createElement(DefaultCaptionButton, { tooltip: \"top\" })), menuGroup === \"bottom\" && /* @__PURE__ */ React.createElement(DefaultVideoMenus, { slots }), slot(slots, \"airPlayButton\", /* @__PURE__ */ React.createElement(DefaultAirPlayButton, { tooltip: \"top\" })), slot(slots, \"googleCastButton\", /* @__PURE__ */ React.createElement(DefaultGoogleCastButton, { tooltip: \"top\" })), slot(slots, \"downloadButton\", /* @__PURE__ */ React.createElement(DefaultDownloadButton, null)), slot(slots, \"pipButton\", /* @__PURE__ */ React.createElement(DefaultPIPButton, { tooltip: \"top\" })), slot(slots, \"fullscreenButton\", /* @__PURE__ */ React.createElement(DefaultFullscreenButton, { tooltip: \"top end\" })))));\n}\nDefaultVideoLargeLayout.displayName = \"DefaultVideoLargeLayout\";\nfunction DefaultVideoSmallLayout() {\n const baseSlots = useDefaultVideoLayoutSlots(), slots = { ...baseSlots, ...baseSlots?.smallLayout };\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(DefaultAnnouncer, null), /* @__PURE__ */ React.createElement(DefaultVideoGestures, null), /* @__PURE__ */ React.createElement(DefaultVideoKeyboardDisplay, null), slot(slots, \"bufferingIndicator\", /* @__PURE__ */ React.createElement(DefaultBufferingIndicator, null)), slot(slots, \"captions\", /* @__PURE__ */ React.createElement(DefaultCaptions, null)), /* @__PURE__ */ React.createElement(Root$a, { className: \"vds-controls\" }, /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\" }, slot(slots, \"topControlsGroupStart\", null), slot(slots, \"airPlayButton\", /* @__PURE__ */ React.createElement(DefaultAirPlayButton, { tooltip: \"top start\" })), slot(slots, \"googleCastButton\", /* @__PURE__ */ React.createElement(DefaultGoogleCastButton, { tooltip: \"top start\" })), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, \"topControlsGroupCenter\", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, \"captionButton\", /* @__PURE__ */ React.createElement(DefaultCaptionButton, { tooltip: \"bottom\" })), slot(slots, \"downloadButton\", /* @__PURE__ */ React.createElement(DefaultDownloadButton, null)), /* @__PURE__ */ React.createElement(DefaultVideoMenus, { slots }), /* @__PURE__ */ React.createElement(DefaultVolumePopup, { orientation: \"vertical\", tooltip: \"bottom end\", slots }), slot(slots, \"topControlsGroupEnd\", null)), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\", style: { pointerEvents: \"none\" } }, slot(slots, \"centerControlsGroupStart\", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, \"centerControlsGroupCenter\", null), slot(slots, \"playButton\", /* @__PURE__ */ React.createElement(DefaultPlayButton, { tooltip: \"top\" })), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, \"centerControlsGroupEnd\", null)), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\" }, /* @__PURE__ */ React.createElement(DefaultTimeInfo, { slots }), slot(slots, \"chapterTitle\", /* @__PURE__ */ React.createElement(DefaultTitle, null)), slot(slots, \"fullscreenButton\", /* @__PURE__ */ React.createElement(DefaultFullscreenButton, { tooltip: \"top end\" }))), /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\" }, slot(slots, \"timeSlider\", /* @__PURE__ */ React.createElement(DefaultTimeSlider, null)))), slot(slots, \"startDuration\", /* @__PURE__ */ React.createElement(DefaultVideoStartDuration, null)));\n}\nDefaultVideoSmallLayout.displayName = \"DefaultVideoSmallLayout\";\nfunction DefaultVideoStartDuration() {\n const $duration = useMediaState(\"duration\");\n if ($duration === 0) return null;\n return /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-start-duration\" }, /* @__PURE__ */ React.createElement(Time, { className: \"vds-time\", type: \"duration\" }));\n}\nDefaultVideoStartDuration.displayName = \"DefaultVideoStartDuration\";\nfunction DefaultVideoGestures() {\n const { noGestures } = useDefaultLayoutContext();\n if (noGestures) return null;\n return /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-gestures\" }, /* @__PURE__ */ React.createElement(Gesture, { className: \"vds-gesture\", event: \"pointerup\", action: \"toggle:paused\" }), /* @__PURE__ */ React.createElement(Gesture, { className: \"vds-gesture\", event: \"pointerup\", action: \"toggle:controls\" }), /* @__PURE__ */ React.createElement(Gesture, { className: \"vds-gesture\", event: \"dblpointerup\", action: \"toggle:fullscreen\" }), /* @__PURE__ */ React.createElement(Gesture, { className: \"vds-gesture\", event: \"dblpointerup\", action: \"seek:-10\" }), /* @__PURE__ */ React.createElement(Gesture, { className: \"vds-gesture\", event: \"dblpointerup\", action: \"seek:10\" }));\n}\nDefaultVideoGestures.displayName = \"DefaultVideoGestures\";\nfunction DefaultBufferingIndicator() {\n return /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-buffering-indicator\" }, /* @__PURE__ */ React.createElement(Root$b, { className: \"vds-buffering-spinner\" }, /* @__PURE__ */ React.createElement(Track$1, { className: \"vds-buffering-track\" }), /* @__PURE__ */ React.createElement(TrackFill$1, { className: \"vds-buffering-track-fill\" })));\n}\nDefaultBufferingIndicator.displayName = \"DefaultBufferingIndicator\";\nfunction DefaultVideoMenus({ slots }) {\n const { isSmallLayout, noModal, menuGroup } = useDefaultLayoutContext(), side = menuGroup === \"top\" || isSmallLayout ? \"bottom\" : \"top\", tooltip = `${side} end`, placement = noModal ? `${side} end` : !isSmallLayout ? `${side} end` : null;\n return /* @__PURE__ */ React.createElement(React.Fragment, null, slot(\n slots,\n \"chaptersMenu\",\n /* @__PURE__ */ React.createElement(\n DefaultChaptersMenu,\n {\n tooltip,\n placement,\n portalClass: \"vds-video-layout\"\n }\n )\n ), slot(\n slots,\n \"settingsMenu\",\n /* @__PURE__ */ React.createElement(\n DefaultSettingsMenu,\n {\n tooltip,\n placement,\n portalClass: \"vds-video-layout\",\n slots\n }\n )\n ));\n}\nDefaultVideoMenus.displayName = \"DefaultVideoMenus\";\nfunction DefaultVideoLoadLayout() {\n const { isSmallLayout } = useDefaultLayoutContext(), baseSlots = useDefaultVideoLayoutSlots(), slots = { ...baseSlots, ...baseSlots?.[isSmallLayout ? \"smallLayout\" : \"largeLayout\"] };\n return /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-load-container\" }, slot(slots, \"bufferingIndicator\", /* @__PURE__ */ React.createElement(DefaultBufferingIndicator, null)), slot(slots, \"loadButton\", /* @__PURE__ */ React.createElement(DefaultPlayButton, { tooltip: \"top\" })));\n}\nDefaultVideoLoadLayout.displayName = \"DefaultVideoLoadLayout\";\nfunction DefaultVideoKeyboardDisplay() {\n const { noKeyboardAnimations, icons, userPrefersKeyboardAnimations } = useDefaultLayoutContext(), $userPrefersKeyboardAnimations = useSignal(userPrefersKeyboardAnimations), disabled = noKeyboardAnimations || !$userPrefersKeyboardAnimations;\n if (disabled || !icons.KeyboardDisplay) return null;\n return /* @__PURE__ */ React.createElement(DefaultKeyboardDisplay, { icons: icons.KeyboardDisplay });\n}\nDefaultVideoKeyboardDisplay.displayName = \"DefaultVideoKeyboardDisplay\";\n\nexport { DefaultAudioLayout, DefaultBufferingIndicator, DefaultKeyboardDisplay, DefaultLayoutContext, DefaultMenuButton, DefaultMenuCheckbox, DefaultMenuItem, DefaultMenuRadioGroup, DefaultMenuSection, DefaultMenuSliderItem, DefaultSliderParts, DefaultSliderSteps, DefaultTooltip, DefaultVideoGestures, DefaultVideoLargeLayout, DefaultVideoLayout, DefaultVideoSmallLayout, createRadioOptions, i18n, useDefaultLayoutContext, useDefaultLayoutWord };\n","\"use client\"\n\nimport * as React from 'react';\n\nconst Icon = /* @__PURE__ */ React.forwardRef((props, ref) => {\n const { width, height, size = null, paths, ...restProps } = props;\n return React.createElement(\"svg\", {\n viewBox: \"0 0 32 32\",\n ...restProps,\n width: width ?? size,\n height: height ?? size,\n fill: \"none\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref,\n dangerouslySetInnerHTML: { __html: paths }\n });\n});\nIcon.displayName = \"VidstackIcon\";\n\nexport { Icon };\n","\"use client\"\n\nimport * as React from 'react';\nimport { Icon$34, Icon$35, Icon$27, Icon$26, Icon$60, Icon$61, Icon$39, Icon$40, Icon$105, Icon$104, Icon$54, Icon$59, Icon$62, Icon$19, Icon$56, Icon$33, Icon$8, Icon$13, Icon$88, Icon$63, Icon$16, Icon$53, Icon$22, Icon$11, Icon$0, Icon$31, Icon$81, Icon$77, Icon$74, Icon$24, Icon$5 } from '../chunks/vidstack-CZgUA94N.js';\nimport { Icon } from '../chunks/vidstack-CBF7iUqu.js';\n\nfunction createIcon(paths) {\n function DefaultLayoutIcon(props) {\n return /* @__PURE__ */ React.createElement(Icon, { paths, ...props });\n }\n DefaultLayoutIcon.displayName = \"DefaultLayoutIcon\";\n return DefaultLayoutIcon;\n}\nconst defaultLayoutIcons = {\n AirPlayButton: {\n Default: createIcon(Icon$5)\n },\n GoogleCastButton: {\n Default: createIcon(Icon$24)\n },\n PlayButton: {\n Play: createIcon(Icon$62),\n Pause: createIcon(Icon$59),\n Replay: createIcon(Icon$74)\n },\n MuteButton: {\n Mute: createIcon(Icon$54),\n VolumeLow: createIcon(Icon$105),\n VolumeHigh: createIcon(Icon$104)\n },\n CaptionButton: {\n On: createIcon(Icon$26),\n Off: createIcon(Icon$27)\n },\n PIPButton: {\n Enter: createIcon(Icon$61),\n Exit: createIcon(Icon$60)\n },\n FullscreenButton: {\n Enter: createIcon(Icon$40),\n Exit: createIcon(Icon$39)\n },\n SeekButton: {\n Backward: createIcon(Icon$77),\n Forward: createIcon(Icon$81)\n },\n DownloadButton: {\n Default: createIcon(Icon$31)\n },\n Menu: {\n Accessibility: createIcon(Icon$0),\n ArrowLeft: createIcon(Icon$11),\n ArrowRight: createIcon(Icon$22),\n Audio: createIcon(Icon$53),\n Chapters: createIcon(Icon$16),\n Captions: createIcon(Icon$27),\n Playback: createIcon(Icon$63),\n Settings: createIcon(Icon$88),\n AudioBoostUp: createIcon(Icon$104),\n AudioBoostDown: createIcon(Icon$105),\n SpeedUp: createIcon(Icon$35),\n SpeedDown: createIcon(Icon$34),\n QualityUp: createIcon(Icon$13),\n QualityDown: createIcon(Icon$8),\n FontSizeUp: createIcon(Icon$13),\n FontSizeDown: createIcon(Icon$8),\n OpacityUp: createIcon(Icon$33),\n OpacityDown: createIcon(Icon$56),\n RadioCheck: createIcon(Icon$19)\n },\n KeyboardDisplay: {\n Play: createIcon(Icon$62),\n Pause: createIcon(Icon$59),\n Mute: createIcon(Icon$54),\n VolumeUp: createIcon(Icon$104),\n VolumeDown: createIcon(Icon$105),\n EnterFullscreen: createIcon(Icon$40),\n ExitFullscreen: createIcon(Icon$39),\n EnterPiP: createIcon(Icon$61),\n ExitPiP: createIcon(Icon$60),\n CaptionsOn: createIcon(Icon$26),\n CaptionsOff: createIcon(Icon$27),\n SeekForward: createIcon(Icon$35),\n SeekBackward: createIcon(Icon$34)\n }\n};\n\nexport { defaultLayoutIcons };\n","import { useState, useRef, useEffect } from 'react';\r\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog';\r\nimport { Button } from '@/components/ui/button';\r\nimport { Input } from '@/components/ui/input';\r\nimport { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form';\r\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\r\nimport { Switch } from '@/components/ui/switch';\r\nimport { Checkbox } from '@/components/ui/checkbox';\r\nimport { Card, CardContent } from '@/components/ui/card';\r\nimport { useForm } from 'react-hook-form';\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { z } from 'zod';\r\nimport { supabase } from '@/integrations/supabase/client';\r\nimport { useAuth } from '@/hooks/useAuth';\r\nimport { toast } from 'sonner';\r\nimport { Mic, MicOff, Loader2, Bookmark } from 'lucide-react';\r\nimport MarkdownEditor from '@/components/MarkdownEditor';\r\nimport { transcribeAudio } from '@/lib/openai';\r\nimport { T, translate } from '@/i18n';\r\n\r\ninterface Collection {\r\n id: string;\r\n name: string;\r\n description: string | null;\r\n slug: string;\r\n is_public: boolean;\r\n}\r\n\r\nconst editSchema = z.object({\r\n title: z.string().max(100, 'Title must be less than 100 characters').optional(),\r\n description: z.string().max(1000, 'Description must be less than 1000 characters').optional(),\r\n visible: z.boolean(),\r\n});\r\n\r\ntype EditFormData = z.infer<typeof editSchema>;\r\n\r\ninterface EditVideoModalProps {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n videoId: string;\r\n currentTitle: string;\r\n currentDescription: string | null;\r\n currentVisible: boolean;\r\n onUpdateSuccess: () => void;\r\n}\r\n\r\nconst EditVideoModal = ({ \r\n open, \r\n onOpenChange, \r\n videoId, \r\n currentTitle, \r\n currentDescription,\r\n currentVisible,\r\n onUpdateSuccess \r\n}: EditVideoModalProps) => {\r\n const [updating, setUpdating] = useState(false);\r\n const { user } = useAuth();\r\n \r\n // Microphone recording state\r\n const [isRecording, setIsRecording] = useState(false);\r\n const [isTranscribing, setIsTranscribing] = useState(false);\r\n const mediaRecorderRef = useRef<MediaRecorder | null>(null);\r\n const audioChunksRef = useRef<Blob[]>([]);\r\n\r\n // Collections state\r\n const [collections, setCollections] = useState<Collection[]>([]);\r\n const [selectedCollections, setSelectedCollections] = useState<Set<string>>(new Set());\r\n const [loadingCollections, setLoadingCollections] = useState(false);\r\n\r\n const form = useForm<EditFormData>({\r\n resolver: zodResolver(editSchema),\r\n defaultValues: {\r\n title: currentTitle,\r\n description: currentDescription || '',\r\n visible: currentVisible,\r\n },\r\n });\r\n\r\n // Load collections when modal opens\r\n useEffect(() => {\r\n if (open && user) {\r\n fetchCollections();\r\n fetchVideoCollections();\r\n }\r\n }, [open, user, videoId]);\r\n\r\n const fetchCollections = async () => {\r\n if (!user) return;\r\n\r\n setLoadingCollections(true);\r\n try {\r\n const { data, error } = await supabase\r\n .from('collections')\r\n .select('*')\r\n .eq('user_id', user.id)\r\n .order('created_at', { ascending: false });\r\n\r\n if (error) throw error;\r\n setCollections(data || []);\r\n } catch (error) {\r\n console.error('Error fetching collections:', error);\r\n toast.error(translate('Failed to load collections'));\r\n } finally {\r\n setLoadingCollections(false);\r\n }\r\n };\r\n\r\n const fetchVideoCollections = async () => {\r\n if (!user) return;\r\n\r\n try {\r\n // Reuse collection_pictures table with picture_id field for videos\r\n const { data, error } = await supabase\r\n .from('collection_pictures')\r\n .select('collection_id')\r\n .eq('picture_id', videoId);\r\n\r\n if (error) throw error;\r\n\r\n if (data) {\r\n const collectionIds = data.map(cp => cp.collection_id);\r\n setSelectedCollections(new Set(collectionIds));\r\n }\r\n } catch (error) {\r\n console.error('Error fetching video collections:', error);\r\n }\r\n };\r\n\r\n const handleCollectionToggle = (collectionId: string) => {\r\n const newSelected = new Set(selectedCollections);\r\n if (newSelected.has(collectionId)) {\r\n newSelected.delete(collectionId);\r\n } else {\r\n newSelected.add(collectionId);\r\n }\r\n setSelectedCollections(newSelected);\r\n };\r\n\r\n const onSubmit = async (data: EditFormData) => {\r\n if (!user) return;\r\n\r\n setUpdating(true);\r\n try {\r\n // Update video metadata in pictures table\r\n const { error: updateError } = await supabase\r\n .from('pictures')\r\n .update({\r\n title: data.title?.trim() || null,\r\n description: data.description?.trim() || null,\r\n visible: data.visible,\r\n updated_at: new Date().toISOString(),\r\n })\r\n .eq('id', videoId)\r\n .eq('user_id', user.id)\r\n .eq('type', 'mux-video');\r\n\r\n if (updateError) throw updateError;\r\n\r\n // Update collections (reuse collection_pictures table with picture_id for videos)\r\n try {\r\n // First, remove all existing collection associations\r\n await supabase\r\n .from('collection_pictures')\r\n .delete()\r\n .eq('picture_id', videoId);\r\n\r\n // Then add new associations\r\n if (selectedCollections.size > 0) {\r\n const collectionInserts = Array.from(selectedCollections).map(collectionId => ({\r\n collection_id: collectionId,\r\n picture_id: videoId,\r\n }));\r\n\r\n await supabase\r\n .from('collection_pictures')\r\n .insert(collectionInserts);\r\n }\r\n } catch (collectionError) {\r\n console.error('Collection update failed:', collectionError);\r\n toast.error(translate('Failed to update collections'));\r\n // Don't fail the whole update if collections fail\r\n }\r\n\r\n toast.success(translate('Video updated successfully'));\r\n onUpdateSuccess();\r\n onOpenChange(false);\r\n } catch (error) {\r\n console.error('Error updating video:', error);\r\n toast.error(translate('Failed to update video'));\r\n } finally {\r\n setUpdating(false);\r\n }\r\n };\r\n\r\n const handleMicrophone = async (field: 'title' | 'description') => {\r\n if (isRecording) {\r\n // Stop recording\r\n if (mediaRecorderRef.current && mediaRecorderRef.current.state === 'recording') {\r\n mediaRecorderRef.current.stop();\r\n }\r\n setIsRecording(false);\r\n } else {\r\n // Start recording\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\r\n const mediaRecorder = new MediaRecorder(stream);\r\n mediaRecorderRef.current = mediaRecorder;\r\n audioChunksRef.current = [];\r\n\r\n mediaRecorder.ondataavailable = (event) => {\r\n if (event.data.size > 0) {\r\n audioChunksRef.current.push(event.data);\r\n }\r\n };\r\n\r\n mediaRecorder.onstop = async () => {\r\n const audioBlob = new Blob(audioChunksRef.current, { type: 'audio/webm' });\r\n \r\n // Stop all tracks\r\n stream.getTracks().forEach(track => track.stop());\r\n \r\n // Transcribe audio\r\n setIsTranscribing(true);\r\n try {\r\n const audioFile = new File([audioBlob], 'recording.webm', { type: 'audio/webm' });\r\n const transcription = await transcribeAudio(audioFile);\r\n \r\n if (transcription) {\r\n if (field === 'title') {\r\n form.setValue('title', transcription);\r\n } else {\r\n const currentDesc = form.getValues('description') || '';\r\n form.setValue('description', currentDesc ? `${currentDesc}\\n\\n${transcription}` : transcription);\r\n }\r\n toast.success(translate('Voice transcribed successfully!'));\r\n }\r\n } catch (error) {\r\n console.error('Error transcribing audio:', error);\r\n toast.error(translate('Failed to transcribe audio'));\r\n } finally {\r\n setIsTranscribing(false);\r\n }\r\n };\r\n\r\n mediaRecorder.start();\r\n setIsRecording(true);\r\n toast.info(translate('Recording... Click again to stop'));\r\n } catch (error) {\r\n console.error('Error starting recording:', error);\r\n toast.error(translate('Failed to start recording. Please check microphone permissions.'));\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <Dialog open={open} onOpenChange={onOpenChange}>\r\n <DialogContent className=\"sm:max-w-[600px] max-h-[90vh] overflow-y-auto\">\r\n <DialogHeader>\r\n <DialogTitle><T>Edit Video</T></DialogTitle>\r\n </DialogHeader>\r\n\r\n <Form {...form}>\r\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-4\">\r\n <Tabs defaultValue=\"metadata\" className=\"w-full\">\r\n <TabsList className=\"grid w-full grid-cols-2\">\r\n <TabsTrigger value=\"metadata\"><T>Metadata</T></TabsTrigger>\r\n <TabsTrigger value=\"collections\">\r\n <Bookmark className=\"h-4 w-4 mr-1\" />\r\n <T>Collections</T>\r\n </TabsTrigger>\r\n </TabsList>\r\n\r\n <TabsContent value=\"metadata\" className=\"space-y-4\">\r\n <FormField\r\n control={form.control}\r\n name=\"title\"\r\n render={({ field }) => (\r\n <FormItem>\r\n <FormLabel><T>Title</T></FormLabel>\r\n <div className=\"relative\">\r\n <FormControl>\r\n <Input placeholder={translate('Video title')} {...field} />\r\n </FormControl>\r\n <button\r\n type=\"button\"\r\n onClick={() => handleMicrophone('title')}\r\n disabled={isTranscribing}\r\n className=\"absolute right-2 top-1/2 -translate-y-1/2 p-1.5 rounded-md hover:bg-accent transition-colors\"\r\n >\r\n {isTranscribing ? (\r\n <Loader2 className=\"h-4 w-4 animate-spin\" />\r\n ) : isRecording ? (\r\n <MicOff className=\"h-4 w-4 text-red-500\" />\r\n ) : (\r\n <Mic className=\"h-4 w-4\" />\r\n )}\r\n </button>\r\n </div>\r\n <FormMessage />\r\n </FormItem>\r\n )}\r\n />\r\n\r\n <FormField\r\n control={form.control}\r\n name=\"description\"\r\n render={({ field }) => (\r\n <FormItem>\r\n <FormLabel><T>Description</T></FormLabel>\r\n <div className=\"relative\">\r\n <FormControl>\r\n <MarkdownEditor\r\n value={field.value || ''}\r\n onChange={field.onChange}\r\n placeholder={translate('Add a description (supports Markdown)')}\r\n className=\"min-h-[120px]\"\r\n />\r\n </FormControl>\r\n <button\r\n type=\"button\"\r\n onClick={() => handleMicrophone('description')}\r\n disabled={isTranscribing}\r\n className=\"absolute right-2 top-2 p-1.5 rounded-md hover:bg-accent transition-colors z-10\"\r\n >\r\n {isTranscribing ? (\r\n <Loader2 className=\"h-4 w-4 animate-spin\" />\r\n ) : isRecording ? (\r\n <MicOff className=\"h-4 w-4 text-red-500\" />\r\n ) : (\r\n <Mic className=\"h-4 w-4\" />\r\n )}\r\n </button>\r\n </div>\r\n <FormMessage />\r\n </FormItem>\r\n )}\r\n />\r\n\r\n <FormField\r\n control={form.control}\r\n name=\"visible\"\r\n render={({ field }) => (\r\n <FormItem className=\"flex flex-row items-center justify-between rounded-lg border p-4\">\r\n <div className=\"space-y-0.5\">\r\n <FormLabel className=\"text-base\"><T>Visibility</T></FormLabel>\r\n <div className=\"text-sm text-muted-foreground\">\r\n <T>Make this video visible to others</T>\r\n </div>\r\n </div>\r\n <FormControl>\r\n <Switch\r\n checked={field.value}\r\n onCheckedChange={field.onChange}\r\n />\r\n </FormControl>\r\n </FormItem>\r\n )}\r\n />\r\n </TabsContent>\r\n\r\n <TabsContent value=\"collections\" className=\"space-y-4\">\r\n {loadingCollections ? (\r\n <div className=\"flex items-center justify-center py-8\">\r\n <Loader2 className=\"h-6 w-6 animate-spin\" />\r\n </div>\r\n ) : collections.length === 0 ? (\r\n <div className=\"text-center py-8 text-muted-foreground\">\r\n <Bookmark className=\"h-12 w-12 mx-auto mb-3 opacity-50\" />\r\n <p><T>No collections yet</T></p>\r\n <p className=\"text-sm\"><T>Create a collection first to organize your videos</T></p>\r\n </div>\r\n ) : (\r\n <div className=\"space-y-2\">\r\n {collections.map((collection) => (\r\n <Card key={collection.id} className=\"cursor-pointer hover:bg-accent/50 transition-colors\">\r\n <CardContent className=\"p-4\">\r\n <div className=\"flex items-center space-x-3\">\r\n <Checkbox\r\n checked={selectedCollections.has(collection.id)}\r\n onCheckedChange={() => handleCollectionToggle(collection.id)}\r\n />\r\n <div className=\"flex-1\">\r\n <h4 className=\"font-medium\">{collection.name}</h4>\r\n {collection.description && (\r\n <p className=\"text-sm text-muted-foreground line-clamp-1\">\r\n {collection.description}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n </CardContent>\r\n </Card>\r\n ))}\r\n </div>\r\n )}\r\n </TabsContent>\r\n </Tabs>\r\n\r\n <div className=\"flex justify-end space-x-2\">\r\n <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\r\n <T>Cancel</T>\r\n </Button>\r\n <Button type=\"submit\" disabled={updating}>\r\n {updating ? (\r\n <>\r\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\r\n <T>Updating...</T>\r\n </>\r\n ) : (\r\n <T>Save Changes</T>\r\n )}\r\n </Button>\r\n </div>\r\n </form>\r\n </Form>\r\n </DialogContent>\r\n </Dialog>\r\n );\r\n};\r\n\r\nexport default EditVideoModal;\r\n\r\n","/**\r\n * Media Type Registry\r\n * \r\n * Unified system for handling different media types in the 'pictures' table\r\n * based on the 'type' column:\r\n * \r\n * - NULL or 'supabase-image' => Traditional images (PhotoCard)\r\n * - 'mux-video' => Mux-powered videos (MuxVideoCard)\r\n * - 'youtube' => YouTube videos\r\n */\r\n\r\nimport React from 'react';\r\n\r\n// Media type identifiers\r\nexport const MEDIA_TYPES = {\r\n SUPABASE_IMAGE: 'supabase-image',\r\n MUX_VIDEO: 'mux-video',\r\n VIDEO_INTERN: 'video-intern',\r\n YOUTUBE: 'youtube',\r\n TIKTOK: 'tiktok',\r\n PAGE: 'page-intern',\r\n PAGE_EXTERNAL: 'page-external',\r\n} as const;\r\n\r\nexport type MediaType = typeof MEDIA_TYPES[keyof typeof MEDIA_TYPES] | null;\r\n\r\n// Normalize type - treat NULL as SUPABASE_IMAGE (backward compatibility)\r\nexport function normalizeMediaType(type: string | null | undefined): MediaType {\r\n if (!type || type === MEDIA_TYPES.SUPABASE_IMAGE) {\r\n return MEDIA_TYPES.SUPABASE_IMAGE;\r\n }\r\n return type as MediaType;\r\n}\r\n\r\n// Check if a media type is a video\r\nexport function isVideoType(type: MediaType): boolean {\r\n return type === MEDIA_TYPES.MUX_VIDEO || type === MEDIA_TYPES.YOUTUBE || type === MEDIA_TYPES.TIKTOK || type === MEDIA_TYPES.VIDEO_INTERN;\r\n}\r\n\r\n// Check if a media type is an image\r\nexport function isImageType(type: MediaType): boolean {\r\n return !type || type === MEDIA_TYPES.SUPABASE_IMAGE;\r\n}\r\n\r\n// Get URL field name based on type\r\nexport function getMediaUrlField(type: MediaType): 'image_url' | 'image_url' {\r\n // For now, both use image_url (videos store their m3u8 URL there)\r\n return 'image_url';\r\n}\r\n\r\n// Get thumbnail field\r\nexport function getThumbnailField(type: MediaType): 'thumbnail_url' | null {\r\n return 'thumbnail_url';\r\n}\r\n\r\n// Media renderer registry\r\nexport interface MediaRendererProps {\r\n id: string;\r\n url: string;\r\n thumbnailUrl?: string | null;\r\n title: string;\r\n author: string;\r\n authorId: string;\r\n likes: number;\r\n comments: number;\r\n isLiked?: boolean;\r\n description?: string | null;\r\n type: MediaType;\r\n meta?: any;\r\n onClick?: (id: string) => void;\r\n onLike?: () => void;\r\n onDelete?: () => void;\r\n}\r\n\r\n// Registry interface\r\ninterface MediaTypeConfig {\r\n name: string;\r\n component: React.ComponentType<MediaRendererProps>;\r\n uploadComponent?: React.ComponentType<any>;\r\n}\r\n\r\n// The registry will be populated by importing the components\r\nconst registry = new Map<MediaType, MediaTypeConfig>();\r\n\r\n// Register a media type\r\nexport function registerMediaType(\r\n type: MediaType,\r\n config: MediaTypeConfig\r\n): void {\r\n registry.set(type, config);\r\n}\r\n\r\n// Get renderer for a media type\r\nexport function getMediaRenderer(type: MediaType): React.ComponentType<MediaRendererProps> | null {\r\n const normalized = normalizeMediaType(type);\r\n const config = registry.get(normalized);\r\n return config?.component || null;\r\n}\r\n\r\n// Get media type config\r\nexport function getMediaTypeConfig(type: MediaType): MediaTypeConfig | null {\r\n const normalized = normalizeMediaType(type);\r\n return registry.get(normalized) || null;\r\n}\r\n\r\n// Helper to determine media type from URL or other properties\r\nexport function detectMediaType(url: string, meta?: any): MediaType {\r\n // Check for Internal Video\r\n if (url.includes('/api/videos/')) {\r\n return MEDIA_TYPES.VIDEO_INTERN;\r\n }\r\n\r\n // Check if it's a Mux video (HLS stream)\r\n if (url.includes('stream.mux.com') || url.includes('.m3u8')) {\r\n return MEDIA_TYPES.MUX_VIDEO;\r\n }\r\n\r\n // Check if it's a YouTube video\r\n if (url.includes('youtube.com') || url.includes('youtu.be')) {\r\n return MEDIA_TYPES.YOUTUBE;\r\n }\r\n\r\n // Check if it's a TikTok video\r\n if (url.includes('tiktok.com')) {\r\n return MEDIA_TYPES.TIKTOK;\r\n }\r\n\r\n // Check meta for Mux identifiers\r\n if (meta && (meta.mux_asset_id || meta.mux_playback_id)) {\r\n return MEDIA_TYPES.MUX_VIDEO;\r\n }\r\n\r\n // Default to image\r\n return MEDIA_TYPES.SUPABASE_IMAGE;\r\n}\r\n\r\nexport default {\r\n MEDIA_TYPES,\r\n normalizeMediaType,\r\n isVideoType,\r\n isImageType,\r\n getMediaUrlField,\r\n getThumbnailField,\r\n registerMediaType,\r\n getMediaRenderer,\r\n getMediaTypeConfig,\r\n detectMediaType,\r\n};\r\n","\"use client\"\n\nimport { TextTrackSymbol, RadioGroupController, useMediaContext, menuContext, Primitive, MediaPlayerInstance, MediaProviderInstance, isRemotionProvider, mediaState, TextTrack, ToggleButtonInstance, PosterInstance, useMediaState, ThumbnailsLoader, updateSliderPreviewPlacement } from './chunks/vidstack-D5Pzx_k5.js';\nexport { ARIAKeyShortcuts, AUDIO_EXTENSIONS, AUDIO_TYPES, AirPlayButtonInstance, AudioGainSliderInstance, AudioProviderLoader, AudioTrackList, CaptionButtonInstance, CaptionsInstance, ControlsGroupInstance, ControlsInstance, DASHProviderLoader, DASH_VIDEO_EXTENSIONS, DASH_VIDEO_TYPES, FullscreenButtonInstance, FullscreenController, GestureInstance, GoogleCastButtonInstance, HLSProviderLoader, HLS_VIDEO_EXTENSIONS, HLS_VIDEO_TYPES, List, LiveButtonInstance, LocalMediaStorage, MEDIA_KEY_SHORTCUTS, MediaAnnouncerInstance, MediaControls, MediaRemoteControl, MenuButtonInstance, MenuInstance, MenuItemInstance, MenuItemsInstance, MenuPortalInstance, MuteButtonInstance, PIPButtonInstance, PlayButtonInstance, QualitySliderInstance, RadioGroupInstance, RadioInstance, ScreenOrientationController, SeekButtonInstance, SliderChaptersInstance, SliderInstance, SliderPreviewInstance, SliderThumbnailInstance, SliderValueInstance, SliderVideoInstance, SpeedSliderInstance, TextRenderers, TextTrackList, ThumbnailInstance, TimeInstance, TimeRange, TimeSliderInstance, TooltipContentInstance, TooltipInstance, TooltipTriggerInstance, VIDEO_EXTENSIONS, VIDEO_TYPES, VideoProviderLoader, VideoQualityList, VimeoProviderLoader, VolumeSliderInstance, YouTubeProviderLoader, boundTime, canChangeVolume, canFullscreen, canGoogleCastSrc, canOrientScreen, canPlayHLSNatively, canRotateScreen, canUsePictureInPicture, canUseVideoPresentation, findActiveCue, formatSpokenTime, formatTime, getDownloadFile, getTimeRangesEnd, getTimeRangesStart, isAudioProvider, isAudioSrc, isCueActive, isDASHProvider, isDASHSrc, isGoogleCastProvider, isHLSProvider, isHLSSrc, isHTMLAudioElement, isHTMLIFrameElement, isHTMLMediaElement, isHTMLVideoElement, isMediaStream, isTrackCaptionKind, isVideoProvider, isVideoQualitySrc, isVideoSrc, isVimeoProvider, isYouTubeProvider, mediaContext, normalizeTimeIntervals, parseJSONCaptionsFile, sliderState, softResetMediaState, sortVideoQualities, updateTimeIntervals, useMediaStore, useSliderState, useSliderStore, watchActiveTextTrack, watchCueTextChange } from './chunks/vidstack-D5Pzx_k5.js';\nimport * as React from 'react';\nimport { DOMEvent, isString, EventsController, prop, method, Component, hasProvidedContext, useContext, effect, createReactComponent, useStateContext, useSignal, composeRefs, useSignalRecord, useReactScope, signal } from './chunks/vidstack-CZgUA94N.js';\nexport { appendTriggerEvent, findTriggerEvent, hasTriggerEvent, isKeyboardClick, isKeyboardEvent, isPointerEvent, walkTriggerEventChain } from './chunks/vidstack-CZgUA94N.js';\nimport { createSignal, useScoped } from './chunks/vidstack-DqtDbuaC.js';\nexport { audioGainSlider as AudioGainSlider, Captions, ChapterTitle, controls as Controls, GoogleCastButton, MediaAnnouncer, qualitySlider as QualitySlider, speedSlider as SpeedSlider, spinner as Spinner, Title, tooltip as Tooltip, useActiveTextCues, useActiveTextTrack, useChapterOptions, useChapterTitle, useTextCues } from './chunks/vidstack-DqtDbuaC.js';\nimport { useMediaContext as useMediaContext$1 } from './chunks/vidstack-CQ3Bde2N.js';\nexport { AirPlayButton, CaptionButton, FullscreenButton, Gesture, LiveButton, menu as Menu, MuteButton, PIPButton, PlayButton, radioGroup as RadioGroup, SeekButton, slider as Slider, thumbnail as Thumbnail, Time, timeSlider as TimeSlider, volumeSlider as VolumeSlider, useAudioOptions, useCaptionOptions, useMediaPlayer } from './chunks/vidstack-CQ3Bde2N.js';\nimport { Icon } from './chunks/vidstack-CBF7iUqu.js';\nexport { DEFAULT_PLAYBACK_RATES, useMediaRemote, usePlaybackRateOptions, useVideoQualityOptions } from './chunks/vidstack-CEWbu4SL.js';\nimport '@floating-ui/dom';\nimport 'react-dom';\n\nconst GROUPED_LOG = Symbol(0);\nclass GroupedLog {\n constructor(logger, level, title, root, parent) {\n this.logger = logger;\n this.level = level;\n this.title = title;\n this.root = root;\n this.parent = parent;\n }\n [GROUPED_LOG] = true;\n logs = [];\n log(...data) {\n this.logs.push({ data });\n return this;\n }\n labelledLog(label, ...data) {\n this.logs.push({ label, data });\n return this;\n }\n groupStart(title) {\n return new GroupedLog(this.logger, this.level, title, this.root ?? this, this);\n }\n groupEnd() {\n this.parent?.logs.push(this);\n return this.parent ?? this;\n }\n dispatch() {\n return this.logger.dispatch(this.level, this.root ?? this);\n }\n}\n\nclass Logger {\n #target = null;\n error(...data) {\n return this.dispatch(\"error\", ...data);\n }\n warn(...data) {\n return this.dispatch(\"warn\", ...data);\n }\n info(...data) {\n return this.dispatch(\"info\", ...data);\n }\n debug(...data) {\n return this.dispatch(\"debug\", ...data);\n }\n errorGroup(title) {\n return new GroupedLog(this, \"error\", title);\n }\n warnGroup(title) {\n return new GroupedLog(this, \"warn\", title);\n }\n infoGroup(title) {\n return new GroupedLog(this, \"info\", title);\n }\n debugGroup(title) {\n return new GroupedLog(this, \"debug\", title);\n }\n setTarget(newTarget) {\n this.#target = newTarget;\n }\n dispatch(level, ...data) {\n return this.#target?.dispatchEvent(\n new DOMEvent(\"vds-log\", {\n bubbles: true,\n composed: true,\n detail: { level, data }\n })\n ) || false;\n }\n}\n\nclass LibASSTextRenderer {\n constructor(loader, config) {\n this.loader = loader;\n this.config = config;\n }\n priority = 1;\n #instance = null;\n #track = null;\n #typeRE = /(ssa|ass)$/;\n canRender(track, video) {\n return !!video && !!track.src && (isString(track.type) && this.#typeRE.test(track.type) || this.#typeRE.test(track.src));\n }\n attach(video) {\n if (!video) return;\n this.loader().then(async (mod) => {\n this.#instance = new mod.default({\n ...this.config,\n video,\n subUrl: this.#track?.src || \"\"\n });\n new EventsController(this.#instance).add(\"ready\", () => {\n const canvas = this.#instance?._canvas;\n if (canvas) canvas.style.pointerEvents = \"none\";\n }).add(\"error\", (event) => {\n if (!this.#track) return;\n this.#track[TextTrackSymbol.readyState] = 3;\n this.#track.dispatchEvent(\n new DOMEvent(\"error\", {\n trigger: event,\n detail: event.error\n })\n );\n });\n });\n }\n changeTrack(track) {\n if (!track || track.readyState === 3) {\n this.#freeTrack();\n } else if (this.#track !== track) {\n this.#instance?.setTrackByUrl(track.src);\n this.#track = track;\n }\n }\n detach() {\n this.#freeTrack();\n }\n #freeTrack() {\n this.#instance?.freeTrack();\n this.#track = null;\n }\n}\n\nconst DEFAULT_AUDIO_GAINS = [1, 1.25, 1.5, 1.75, 2, 2.5, 3, 4];\nclass AudioGainRadioGroup extends Component {\n static props = {\n normalLabel: \"Disabled\",\n gains: DEFAULT_AUDIO_GAINS\n };\n #media;\n #menu;\n #controller;\n get value() {\n return this.#controller.value;\n }\n get disabled() {\n const { gains } = this.$props, { canSetAudioGain } = this.#media.$state;\n return !canSetAudioGain() || gains().length === 0;\n }\n constructor() {\n super();\n this.#controller = new RadioGroupController();\n this.#controller.onValueChange = this.#onValueChange.bind(this);\n }\n onSetup() {\n this.#media = useMediaContext();\n if (hasProvidedContext(menuContext)) {\n this.#menu = useContext(menuContext);\n }\n }\n onConnect(el) {\n effect(this.#watchValue.bind(this));\n effect(this.#watchHintText.bind(this));\n effect(this.#watchControllerDisabled.bind(this));\n }\n getOptions() {\n const { gains, normalLabel } = this.$props;\n return gains().map((gain) => ({\n label: gain === 1 || gain === null ? normalLabel : String(gain * 100) + \"%\",\n value: gain.toString()\n }));\n }\n #watchValue() {\n this.#controller.value = this.#getValue();\n }\n #watchHintText() {\n const { normalLabel } = this.$props, { audioGain } = this.#media.$state, gain = audioGain();\n this.#menu?.hint.set(gain === 1 || gain == null ? normalLabel() : String(gain * 100) + \"%\");\n }\n #watchControllerDisabled() {\n this.#menu?.disable(this.disabled);\n }\n #getValue() {\n const { audioGain } = this.#media.$state;\n return audioGain()?.toString() ?? \"1\";\n }\n #onValueChange(value, trigger) {\n if (this.disabled) return;\n const gain = +value;\n this.#media.remote.changeAudioGain(gain, trigger);\n this.dispatch(\"change\", { detail: gain, trigger });\n }\n}\nconst audiogainradiogroup__proto = AudioGainRadioGroup.prototype;\nprop(audiogainradiogroup__proto, \"value\");\nprop(audiogainradiogroup__proto, \"disabled\");\nmethod(audiogainradiogroup__proto, \"getOptions\");\n\nconst playerCallbacks = [\n \"onAbort\",\n \"onAudioTrackChange\",\n \"onAudioTracksChange\",\n \"onAutoPlay\",\n \"onAutoPlayChange\",\n \"onAutoPlayFail\",\n \"onCanLoad\",\n \"onCanPlay\",\n \"onCanPlayThrough\",\n \"onControlsChange\",\n \"onDestroy\",\n \"onDurationChange\",\n \"onEmptied\",\n \"onEnd\",\n \"onEnded\",\n \"onError\",\n \"onFindMediaPlayer\",\n \"onFullscreenChange\",\n \"onFullscreenError\",\n \"onLiveChange\",\n \"onLiveEdgeChange\",\n \"onLoadedData\",\n \"onLoadedMetadata\",\n \"onLoadStart\",\n \"onLoopChange\",\n \"onOrientationChange\",\n \"onPause\",\n \"onPictureInPictureChange\",\n \"onPictureInPictureError\",\n \"onPlay\",\n \"onPlayFail\",\n \"onPlaying\",\n \"onPlaysInlineChange\",\n \"onPosterChange\",\n \"onProgress\",\n \"onProviderChange\",\n \"onProviderLoaderChange\",\n \"onProviderSetup\",\n \"onQualitiesChange\",\n \"onQualityChange\",\n \"onRateChange\",\n \"onReplay\",\n \"onSeeked\",\n \"onSeeking\",\n \"onSourceChange\",\n \"onSourceChange\",\n \"onStalled\",\n \"onStarted\",\n \"onStreamTypeChange\",\n \"onSuspend\",\n \"onTextTrackChange\",\n \"onTextTracksChange\",\n \"onTimeUpdate\",\n \"onTitleChange\",\n \"onVdsLog\",\n \"onVideoPresentationChange\",\n \"onVolumeChange\",\n \"onWaiting\"\n];\n\nconst MediaPlayerBridge = createReactComponent(MediaPlayerInstance, {\n events: playerCallbacks,\n eventsRegex: /^onHls/,\n domEventsRegex: /^onMedia/\n});\nconst MediaPlayer = React.forwardRef(\n ({ aspectRatio, children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(\n MediaPlayerBridge,\n {\n ...props,\n src: props.src,\n ref: forwardRef,\n style: {\n aspectRatio,\n ...props.style\n }\n },\n (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children)\n );\n }\n);\nMediaPlayer.displayName = \"MediaPlayer\";\n\nconst MediaProviderBridge = createReactComponent(MediaProviderInstance);\nconst MediaProvider = React.forwardRef(\n ({ loaders = [], children, iframeProps, mediaProps, ...props }, forwardRef) => {\n const reactLoaders = React.useMemo(() => loaders.map((Loader) => new Loader()), loaders);\n return /* @__PURE__ */ React.createElement(MediaProviderBridge, { ...props, loaders: reactLoaders, ref: forwardRef }, (props2, instance) => /* @__PURE__ */ React.createElement(\"div\", { ...props2 }, /* @__PURE__ */ React.createElement(MediaOutlet, { provider: instance, mediaProps, iframeProps }), children));\n }\n);\nMediaProvider.displayName = \"MediaProvider\";\nfunction MediaOutlet({ provider, mediaProps, iframeProps }) {\n const { sources, crossOrigin, poster, remotePlaybackInfo, nativeControls, viewType } = useStateContext(mediaState), { loader } = provider.$state, { $provider: $$provider, $providerSetup: $$providerSetup } = useMediaContext$1(), $sources = useSignal(sources), $nativeControls = useSignal(nativeControls), $crossOrigin = useSignal(crossOrigin), $poster = useSignal(poster), $loader = useSignal(loader), $provider = useSignal($$provider), $providerSetup = useSignal($$providerSetup), $remoteInfo = useSignal(remotePlaybackInfo), $mediaType = $loader?.mediaType(), $viewType = useSignal(viewType), isAudioView = $viewType === \"audio\", isYouTubeEmbed = $loader?.name === \"youtube\", isVimeoEmbed = $loader?.name === \"vimeo\", isEmbed = isYouTubeEmbed || isVimeoEmbed, isRemotion = $loader?.name === \"remotion\", isGoogleCast = $loader?.name === \"google-cast\", [googleCastIconPaths, setGoogleCastIconPaths] = React.useState(\"\"), [hasMounted, setHasMounted] = React.useState(false);\n React.useEffect(() => {\n if (!isGoogleCast || googleCastIconPaths) return;\n import('./chunks/vidstack-CZgUA94N.js').then(function (n) { return n.chromecast; }).then((mod) => {\n setGoogleCastIconPaths(mod.default);\n });\n }, [isGoogleCast]);\n React.useEffect(() => {\n setHasMounted(true);\n }, []);\n if (isGoogleCast) {\n return /* @__PURE__ */ React.createElement(\n \"div\",\n {\n className: \"vds-google-cast\",\n ref: (el) => {\n provider.load(el);\n }\n },\n /* @__PURE__ */ React.createElement(Icon, { paths: googleCastIconPaths }),\n $remoteInfo?.deviceName ? /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-google-cast-info\" }, \"Google Cast on\", \" \", /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-google-cast-device-name\" }, $remoteInfo.deviceName)) : null\n );\n }\n if (isRemotion) {\n return /* @__PURE__ */ React.createElement(\"div\", { \"data-remotion-canvas\": true }, /* @__PURE__ */ React.createElement(\n \"div\",\n {\n \"data-remotion-container\": true,\n ref: (el) => {\n provider.load(el);\n }\n },\n isRemotionProvider($provider) && $providerSetup ? React.createElement($provider.render) : null\n ));\n }\n return isEmbed ? React.createElement(\n React.Fragment,\n null,\n React.createElement(\"iframe\", {\n ...iframeProps,\n className: (iframeProps?.className ? `${iframeProps.className} ` : \"\") + isYouTubeEmbed ? \"vds-youtube\" : \"vds-vimeo\",\n suppressHydrationWarning: true,\n tabIndex: !$nativeControls ? -1 : void 0,\n \"aria-hidden\": \"true\",\n \"data-no-controls\": !$nativeControls ? \"\" : void 0,\n ref(el) {\n provider.load(el);\n }\n }),\n !$nativeControls && !isAudioView ? React.createElement(\"div\", { className: \"vds-blocker\" }) : null\n ) : $mediaType ? React.createElement($mediaType === \"audio\" ? \"audio\" : \"video\", {\n ...mediaProps,\n controls: $nativeControls ? true : null,\n crossOrigin: typeof $crossOrigin === \"boolean\" ? \"\" : $crossOrigin,\n poster: $mediaType === \"video\" && $nativeControls && $poster ? $poster : null,\n suppressHydrationWarning: true,\n children: !hasMounted ? $sources.map(\n ({ src, type }) => isString(src) ? /* @__PURE__ */ React.createElement(\"source\", { src, type: type !== \"?\" ? type : void 0, key: src }) : null\n ) : null,\n ref(el) {\n provider.load(el);\n }\n }) : null;\n}\nMediaOutlet.displayName = \"MediaOutlet\";\n\nfunction createTextTrack(init) {\n const media = useMediaContext$1(), track = React.useMemo(() => new TextTrack(init), Object.values(init));\n React.useEffect(() => {\n media.textTracks.add(track);\n return () => void media.textTracks.remove(track);\n }, [track]);\n return track;\n}\n\nfunction Track({ lang, ...props }) {\n createTextTrack({ language: lang, ...props });\n return null;\n}\nTrack.displayName = \"Track\";\n\nconst ToggleButtonBridge = createReactComponent(ToggleButtonInstance);\nconst ToggleButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ToggleButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nToggleButton.displayName = \"ToggleButton\";\n\nconst PosterBridge = createReactComponent(PosterInstance);\nconst Poster = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(\n PosterBridge,\n {\n src: props.asChild && React.isValidElement(children) ? children.props.src : void 0,\n ...props\n },\n (props2, instance) => /* @__PURE__ */ React.createElement(\n PosterImg,\n {\n ...props2,\n instance,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n )\n );\n }\n);\nPoster.displayName = \"Poster\";\nconst PosterImg = React.forwardRef(\n ({ instance, children, ...props }, forwardRef) => {\n const { src, img, alt, crossOrigin, hidden } = instance.$state, $src = useSignal(src), $alt = useSignal(alt), $crossOrigin = useSignal(crossOrigin), $hidden = useSignal(hidden);\n return /* @__PURE__ */ React.createElement(\n Primitive.img,\n {\n ...props,\n src: $src || void 0,\n alt: $alt || void 0,\n crossOrigin: $crossOrigin || void 0,\n ref: composeRefs(img.set, forwardRef),\n style: { display: $hidden ? \"none\" : void 0 }\n },\n children\n );\n }\n);\nPosterImg.displayName = \"PosterImg\";\n\nconst Root = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n translate: \"yes\",\n \"aria-live\": \"off\",\n \"aria-atomic\": \"true\",\n ...props,\n ref: forwardRef\n },\n children\n );\n});\nRoot.displayName = \"Caption\";\nconst Text = React.forwardRef((props, forwardRef) => {\n const textTrack = useMediaState(\"textTrack\"), [activeCue, setActiveCue] = React.useState();\n React.useEffect(() => {\n if (!textTrack) return;\n function onCueChange() {\n setActiveCue(textTrack?.activeCues[0]);\n }\n textTrack.addEventListener(\"cue-change\", onCueChange);\n return () => {\n textTrack.removeEventListener(\"cue-change\", onCueChange);\n setActiveCue(void 0);\n };\n }, [textTrack]);\n return /* @__PURE__ */ React.createElement(\n Primitive.span,\n {\n ...props,\n \"data-part\": \"cue\",\n dangerouslySetInnerHTML: {\n __html: activeCue?.text || \"\"\n },\n ref: forwardRef\n }\n );\n});\nText.displayName = \"CaptionText\";\n\nvar caption = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Root: Root,\n Text: Text\n});\n\nfunction useState(ctor, prop, ref) {\n const initialValue = React.useMemo(() => ctor.state.record[prop], [ctor, prop]);\n return useSignal(ref.current ? ref.current.$state[prop] : initialValue);\n}\nconst storesCache = /* @__PURE__ */ new Map();\nfunction useStore(ctor, ref) {\n const initialStore = React.useMemo(() => {\n let store = storesCache.get(ctor);\n if (!store) {\n store = new Proxy(ctor.state.record, {\n get: (_, prop) => () => ctor.state.record[prop]\n });\n storesCache.set(ctor, store);\n }\n return store;\n }, [ctor]);\n return useSignalRecord(ref.current ? ref.current.$state : initialStore);\n}\n\nfunction useMediaProvider() {\n const [provider, setProvider] = React.useState(null), context = useMediaContext$1();\n React.useEffect(() => {\n if (!context) return;\n return effect(() => {\n setProvider(context.$provider());\n });\n }, []);\n return provider;\n}\n\nfunction useThumbnails(src, crossOrigin = null) {\n useReactScope(); const $src = createSignal(src), $crossOrigin = createSignal(crossOrigin), loader = useScoped(() => ThumbnailsLoader.create($src, $crossOrigin));\n React.useEffect(() => {\n $src.set(src);\n }, [src]);\n React.useEffect(() => {\n $crossOrigin.set(crossOrigin);\n }, [crossOrigin]);\n return useSignal(loader.$images);\n}\nfunction useActiveThumbnail(thumbnails, time) {\n return React.useMemo(() => {\n let activeIndex = -1;\n for (let i = thumbnails.length - 1; i >= 0; i--) {\n const image = thumbnails[i];\n if (time >= image.startTime && (!image.endTime || time < image.endTime)) {\n activeIndex = i;\n break;\n }\n }\n return thumbnails[activeIndex] || null;\n }, [thumbnails, time]);\n}\n\nfunction useSliderPreview({\n clamp = false,\n offset = 0,\n orientation = \"horizontal\"\n} = {}) {\n const [rootRef, setRootRef] = React.useState(null), [previewRef, setPreviewRef] = React.useState(null), [pointerValue, setPointerValue] = React.useState(0), [isVisible, setIsVisible] = React.useState(false);\n React.useEffect(() => {\n if (!rootRef) return;\n const dragging = signal(false);\n function updatePointerValue(event) {\n if (!rootRef) return;\n setPointerValue(getPointerValue(rootRef, event, orientation));\n }\n return effect(() => {\n if (!dragging()) {\n new EventsController(rootRef).add(\"pointerenter\", () => {\n setIsVisible(true);\n previewRef?.setAttribute(\"data-visible\", \"\");\n }).add(\"pointerdown\", (event) => {\n dragging.set(true);\n updatePointerValue(event);\n }).add(\"pointerleave\", () => {\n setIsVisible(false);\n previewRef?.removeAttribute(\"data-visible\");\n }).add(\"pointermove\", updatePointerValue);\n }\n previewRef?.setAttribute(\"data-dragging\", \"\");\n new EventsController(document).add(\"pointerup\", (event) => {\n dragging.set(false);\n previewRef?.removeAttribute(\"data-dragging\");\n updatePointerValue(event);\n }).add(\"pointermove\", updatePointerValue).add(\"touchmove\", (e) => e.preventDefault(), { passive: false });\n });\n }, [rootRef]);\n React.useEffect(() => {\n if (previewRef) {\n previewRef.style.setProperty(\"--slider-pointer\", pointerValue + \"%\");\n }\n }, [previewRef, pointerValue]);\n React.useEffect(() => {\n if (!previewRef) return;\n const update = () => {\n updateSliderPreviewPlacement(previewRef, {\n offset,\n clamp,\n orientation\n });\n };\n update();\n const resize = new ResizeObserver(update);\n resize.observe(previewRef);\n return () => resize.disconnect();\n }, [previewRef, clamp, offset, orientation]);\n return {\n previewRootRef: setRootRef,\n previewRef: setPreviewRef,\n previewValue: pointerValue,\n isPreviewVisible: isVisible\n };\n}\nfunction getPointerValue(root, event, orientation) {\n let thumbPositionRate, rect = root.getBoundingClientRect();\n if (orientation === \"vertical\") {\n const { bottom: trackBottom, height: trackHeight } = rect;\n thumbPositionRate = (trackBottom - event.clientY) / trackHeight;\n } else {\n const { left: trackLeft, width: trackWidth } = rect;\n thumbPositionRate = (event.clientX - trackLeft) / trackWidth;\n }\n return round(Math.max(0, Math.min(100, 100 * thumbPositionRate)));\n}\nfunction round(num) {\n return Number(num.toFixed(3));\n}\n\nfunction useAudioGainOptions({\n gains = DEFAULT_AUDIO_GAINS,\n disabledLabel = \"disabled\"\n} = {}) {\n const media = useMediaContext$1(), { audioGain, canSetAudioGain } = media.$state;\n useSignal(audioGain);\n useSignal(canSetAudioGain);\n return React.useMemo(() => {\n const options = gains.map((opt) => {\n const label = typeof opt === \"number\" ? opt === 1 && disabledLabel ? disabledLabel : opt * 100 + \"%\" : opt.label, gain = typeof opt === \"number\" ? opt : opt.gain;\n return {\n label,\n value: gain.toString(),\n gain,\n get selected() {\n return audioGain() === gain;\n },\n select(trigger) {\n media.remote.changeAudioGain(gain, trigger);\n }\n };\n });\n Object.defineProperty(options, \"disabled\", {\n get() {\n return !canSetAudioGain() || !options.length;\n }\n });\n Object.defineProperty(options, \"selectedValue\", {\n get() {\n return audioGain()?.toString();\n }\n });\n return options;\n }, [gains]);\n}\n\nexport { caption as Caption, DEFAULT_AUDIO_GAINS, Icon, LibASSTextRenderer, Logger, MediaPlayer, MediaPlayerInstance, MediaProvider, MediaProviderInstance, Poster, PosterInstance, TextTrack, ToggleButton, ToggleButtonInstance, Track, createTextTrack, mediaState, useActiveThumbnail, useAudioGainOptions, useMediaContext$1 as useMediaContext, useMediaProvider, useMediaState, useSliderPreview, useState, useStore, useThumbnails };\n","import { Heart, Download, Share2, MessageCircle, Edit3, Trash2, Layers, Loader2, X } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { supabase } from \"@/integrations/supabase/client\";\r\nimport { useAuth } from \"@/hooks/useAuth\";\r\nimport { toast } from \"sonner\";\r\nimport { useState, useEffect, useRef } from \"react\";\r\nimport MarkdownRenderer from \"@/components/MarkdownRenderer\";\r\nimport { defaultLayoutIcons, DefaultVideoLayout } from '@vidstack/react/player/layouts/default';\r\nimport { useNavigate, useLocation } from \"react-router-dom\";\r\nimport { T, translate } from \"@/i18n\";\r\nimport type { MuxResolution } from \"@/types\";\r\nimport EditVideoModal from \"@/components/EditVideoModal\";\r\nimport { detectMediaType, MEDIA_TYPES } from \"@/lib/mediaRegistry\";\r\nimport UserAvatarBlock from \"@/components/UserAvatarBlock\";\r\nimport { formatDate, isLikelyFilename } from \"@/utils/textUtils\";\r\n\r\nimport {\r\n MediaPlayer, MediaProvider, type MediaPlayerInstance\r\n} from '@vidstack/react';\r\n\r\n// Import Vidstack styles\r\nimport '@vidstack/react/player/styles/default/theme.css';\r\nimport '@vidstack/react/player/styles/default/layouts/video.css';\r\n\r\ninterface VideoCardProps {\r\n videoId: string;\r\n videoUrl: string;\r\n thumbnailUrl?: string;\r\n title: string;\r\n author: string;\r\n authorId: string;\r\n likes: number;\r\n comments: number;\r\n isLiked?: boolean;\r\n description?: string | null;\r\n onClick?: (videoId: string) => void;\r\n onLike?: () => void;\r\n onDelete?: () => void;\r\n maxResolution?: MuxResolution;\r\n authorAvatarUrl?: string | null;\r\n showContent?: boolean;\r\n\r\n created_at?: string;\r\n job?: any;\r\n variant?: 'grid' | 'feed';\r\n showPlayButton?: boolean;\r\n apiUrl?: string;\r\n}\r\n\r\nconst VideoCard = ({\r\n videoId,\r\n videoUrl,\r\n thumbnailUrl,\r\n title,\r\n author,\r\n authorId,\r\n likes,\r\n comments,\r\n isLiked = false,\r\n description,\r\n onClick,\r\n onLike,\r\n onDelete,\r\n maxResolution = '270p',\r\n authorAvatarUrl,\r\n showContent = true,\r\n showPlayButton = false,\r\n\r\n created_at,\r\n job,\r\n variant = 'grid',\r\n apiUrl\r\n}: VideoCardProps) => {\r\n const { user } = useAuth();\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n const [localIsLiked, setLocalIsLiked] = useState(isLiked);\r\n const [localLikes, setLocalLikes] = useState(likes);\r\n const [isDeleting, setIsDeleting] = useState(false);\r\n const [versionCount, setVersionCount] = useState<number>(0);\r\n const [isPlaying, setIsPlaying] = useState(false);\r\n const [showEditModal, setShowEditModal] = useState(false);\r\n const player = useRef<MediaPlayerInstance>(null);\r\n\r\n // Stop playback on navigation & Cleanup\r\n useEffect(() => {\r\n console.log(`[VideoCard ${videoId}] Mounted`);\r\n const handleNavigation = () => {\r\n if (isPlaying) {\r\n console.log(`[VideoCard ${videoId}] Navigation detected - stopping`);\r\n }\r\n setIsPlaying(false);\r\n player.current?.pause();\r\n };\r\n\r\n handleNavigation();\r\n\r\n return () => {\r\n console.log(`[VideoCard ${videoId}] Unmounting - pausing player`);\r\n player.current?.pause();\r\n };\r\n }, [location.pathname]);\r\n const [processingStatus, setProcessingStatus] = useState<'active' | 'completed' | 'failed' | 'unknown'>('unknown');\r\n const [progress, setProgress] = useState(0);\r\n const [videoMeta, setVideoMeta] = useState<any>(null);\r\n\r\n const isOwner = user?.id === authorId;\r\n const mediaType = detectMediaType(videoUrl);\r\n const isInternalVideo = mediaType === MEDIA_TYPES.VIDEO_INTERN;\r\n\r\n // Handle poster URL based on media type\r\n const posterUrl = (() => {\r\n if (!thumbnailUrl) return undefined;\r\n\r\n if (isInternalVideo) {\r\n return thumbnailUrl; // Use direct thumbnail for internal videos\r\n }\r\n\r\n // Default to Mux behavior\r\n return `${thumbnailUrl}?width=640&height=640&fit_mode=smartcrop&time=0`;\r\n })();\r\n\r\n // Add max_resolution query parameter to video URL for bandwidth optimization\r\n // See: https://www.mux.com/docs/guides/control-playback-resolution\r\n const getVideoUrlWithResolution = (url: string) => {\r\n if (isInternalVideo) return url; // Internal videos handle quality differently (via HLS/presets in future)\r\n\r\n try {\r\n const urlObj = new URL(url);\r\n urlObj.searchParams.set('max_resolution', maxResolution);\r\n return urlObj.toString();\r\n } catch {\r\n // If URL parsing fails, append as query string\r\n const separator = url.includes('?') ? '&' : '?';\r\n return `${url}${separator}max_resolution=${maxResolution}`;\r\n }\r\n };\r\n\r\n const playbackUrl = getVideoUrlWithResolution(videoUrl);\r\n\r\n // Fetch version count for owners only\r\n useEffect(() => {\r\n const fetchVersionCount = async () => {\r\n if (!isOwner || !user) return;\r\n return;\r\n };\r\n\r\n fetchVersionCount();\r\n\r\n }, [videoId, isOwner, user]);\r\n\r\n // Handle Video Processing Status (SSE)\r\n useEffect(() => {\r\n if (!isInternalVideo) return;\r\n\r\n // 1. Use verified job data from server if available (e.g. from Feed)\r\n if (job) {\r\n if (job.status === 'completed') {\r\n setProcessingStatus('completed');\r\n // If we have a verified resultUrl, we might want to use it? \r\n // But the parent component passes `videoUrl`, so we assume parent updated it or logic below handles it.\r\n return;\r\n }\r\n if (job.status === 'failed') {\r\n setProcessingStatus('failed');\r\n return;\r\n }\r\n // If active, we fall through to start SSE below, but init state first\r\n setProcessingStatus('active');\r\n setProgress(job.progress || 0);\r\n }\r\n\r\n // Extract Job ID from URL\r\n // Format: .../api/videos/jobs/:jobId/... (regex: /api/videos/jobs/([^/]+)\\//)\r\n const match = videoUrl.match(/\\/api\\/videos\\/jobs\\/([^\\/]+)\\//) || (job ? [null, job.id] : null);\r\n if (!match) return;\r\n\r\n const jobId = match[1];\r\n\r\n // Use VITE_SERVER_IMAGE_API_URL or default. Do NOT infer from videoUrl if it logic fails.\r\n let baseUrl = import.meta.env.VITE_SERVER_IMAGE_API_URL || 'http://localhost:3333';\r\n\r\n // Fallback: If videoUrl is internal (same origin), use that origin. \r\n // But for Supabase URLs, we MUST use the API server URL.\r\n if (videoUrl.startsWith('/') || videoUrl.includes(window.location.origin)) {\r\n baseUrl = window.location.origin;\r\n }\r\n\r\n let eventSource: EventSource | null = null;\r\n let isMounted = true;\r\n\r\n const checkStatusAndConnect = async () => {\r\n if (!jobId) return;\r\n try {\r\n const res = await fetch(`${baseUrl}/api/videos/jobs/${jobId}`);\r\n if (!res.ok) throw new Error('Failed to fetch job');\r\n const data = await res.json();\r\n\r\n if (!isMounted) return;\r\n\r\n if (data.status === 'completed') {\r\n setProcessingStatus('completed');\r\n return;\r\n } else if (data.status === 'failed') {\r\n setProcessingStatus('failed');\r\n return;\r\n }\r\n\r\n // Only connect SSE if still active/created/waiting\r\n setProcessingStatus('active');\r\n const sseUrl = `${baseUrl}/api/videos/jobs/${jobId}/progress`;\r\n eventSource = new EventSource(sseUrl);\r\n\r\n eventSource.addEventListener('progress', (e) => {\r\n if (!isMounted) return;\r\n try {\r\n const data = JSON.parse((e as MessageEvent).data);\r\n if (data.progress !== undefined) {\r\n setProgress(Math.round(data.progress));\r\n }\r\n if (data.status) {\r\n if (data.status === 'completed') {\r\n setProcessingStatus('completed');\r\n eventSource?.close();\r\n } else if (data.status === 'failed') {\r\n setProcessingStatus('failed');\r\n eventSource?.close();\r\n } else {\r\n setProcessingStatus('active');\r\n }\r\n }\r\n } catch (err) {\r\n console.error('SSE Parse Error', err);\r\n }\r\n });\r\n\r\n eventSource.onerror = (e) => {\r\n eventSource?.close();\r\n // Fallback check handled by initial check logic or user refresh\r\n // But we can retry once\r\n };\r\n\r\n } catch (error) {\r\n console.error('Error checking video status:', error);\r\n if (isMounted) setProcessingStatus('unknown');\r\n }\r\n };\r\n\r\n checkStatusAndConnect();\r\n\r\n return () => {\r\n isMounted = false;\r\n if (eventSource) {\r\n eventSource.close();\r\n }\r\n };\r\n }, [isInternalVideo, videoUrl, job]);\r\n\r\n const handleCancelProcessing = async (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n if (!confirm('Cancel this upload?')) return;\r\n\r\n const match = videoUrl.match(/\\/api\\/videos\\/jobs\\/([^\\/]+)\\//);\r\n if (!match) return;\r\n\r\n const jobId = match[1];\r\n\r\n // Use VITE_SERVER_IMAGE_API_URL or default\r\n let baseUrl = import.meta.env.VITE_SERVER_IMAGE_API_URL || 'http://localhost:3333';\r\n\r\n if (videoUrl.startsWith('/') || videoUrl.includes(window.location.origin)) {\r\n baseUrl = window.location.origin;\r\n }\r\n\r\n try {\r\n await fetch(`${baseUrl}/api/videos/jobs/${jobId}`, {\r\n method: 'DELETE'\r\n });\r\n toast.info(translate('Upload cancelled'));\r\n // Trigger delete to remove from UI\r\n onDelete?.();\r\n } catch (err) {\r\n console.error('Failed to cancel', err);\r\n toast.error(translate('Failed to cancel upload'));\r\n }\r\n };\r\n\r\n\r\n const handleLike = async (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n\r\n if (!user) {\r\n toast.error(translate('Please sign in to like videos'));\r\n return;\r\n }\r\n\r\n try {\r\n if (localIsLiked) {\r\n // Unlike - need to implement video likes table\r\n toast.info('Video likes coming soon');\r\n } else {\r\n // Like - need to implement video likes table\r\n toast.info('Video likes coming soon');\r\n }\r\n\r\n onLike?.();\r\n } catch (error) {\r\n console.error('Error toggling like:', error);\r\n toast.error(translate('Failed to update like'));\r\n }\r\n };\r\n\r\n const handleDelete = async (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n\r\n if (!user || !isOwner) {\r\n toast.error(translate('You can only delete your own videos'));\r\n return;\r\n }\r\n\r\n if (!confirm(translate('Are you sure you want to delete this video? This action cannot be undone.'))) {\r\n return;\r\n }\r\n\r\n setIsDeleting(true);\r\n try {\r\n // First get the video details for storage cleanup\r\n const { data: video, error: fetchError } = await supabase\r\n .from('pictures')\r\n .select('image_url')\r\n .eq('id', videoId)\r\n .single();\r\n\r\n if (fetchError) throw fetchError;\r\n\r\n // Delete from database (this will cascade delete likes and comments due to foreign keys)\r\n const { error: deleteError } = await supabase\r\n .from('pictures')\r\n .delete()\r\n .eq('id', videoId);\r\n\r\n if (deleteError) throw deleteError;\r\n\r\n // Try to delete from storage as well (videos use image_url field for HLS URL)\r\n if (video?.image_url) {\r\n const urlParts = video.image_url.split('/');\r\n const fileName = urlParts[urlParts.length - 1];\r\n const userIdFromUrl = urlParts[urlParts.length - 2];\r\n\r\n const { error: storageError } = await supabase.storage\r\n .from('videos')\r\n .remove([`${userIdFromUrl}/${fileName}`]);\r\n\r\n if (storageError) {\r\n console.error('Error deleting from storage:', storageError);\r\n // Don't show error to user as the main deletion succeeded\r\n }\r\n }\r\n\r\n toast.success(translate('Video deleted successfully'));\r\n onDelete?.(); // Trigger refresh of the parent component\r\n } catch (error) {\r\n console.error('Error deleting video:', error);\r\n toast.error(translate('Failed to delete video'));\r\n } finally {\r\n setIsDeleting(false);\r\n }\r\n };\r\n\r\n const handleDownload = async () => {\r\n try {\r\n const link = document.createElement('a');\r\n link.href = videoUrl;\r\n link.download = `${title}.mp4`;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n toast.success(translate('Video download started'));\r\n } catch (error) {\r\n console.error('Error downloading video:', error);\r\n toast.error(translate('Failed to download video'));\r\n }\r\n };\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n console.log('Video clicked');\r\n e.preventDefault();\r\n e.stopPropagation();\r\n onClick?.(videoId);\r\n };\r\n\r\n // Handle global stop-video event\r\n useEffect(() => {\r\n const handleStopVideo = (e: Event) => {\r\n const customEvent = e as CustomEvent;\r\n if (customEvent.detail?.sourceId !== videoId && isPlaying) {\r\n console.log(`[VideoCard ${videoId}] Stopping due to global event`);\r\n setIsPlaying(false);\r\n player.current?.pause();\r\n }\r\n };\r\n\r\n window.addEventListener('stop-video', handleStopVideo);\r\n return () => window.removeEventListener('stop-video', handleStopVideo);\r\n }, [isPlaying, videoId]);\r\n\r\n const handlePlayClick = (e: React.MouseEvent) => {\r\n console.log('Play clicked');\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n // Stop other videos\r\n window.dispatchEvent(new CustomEvent('stop-video', { detail: { sourceId: videoId } }));\r\n\r\n setIsPlaying(true);\r\n };\r\n\r\n return (\r\n <div\r\n data-testid=\"video-card\"\r\n className=\"group relative overflow-hidden bg-card transition-all duration-300 cursor-pointer w-full\"\r\n onClick={handleClick}\r\n >\r\n {/* Video Player - usage square aspect to match PhotoCard unless variant is feed */}\r\n <div className={`${variant === 'grid' ? \"aspect-square\" : \"w-full\"} overflow-hidden relative`}>\r\n {!isPlaying ? (\r\n // Show thumbnail with play button overlay\r\n <>\r\n <img\r\n src={posterUrl || '/placeholder.svg'}\r\n alt={title}\r\n className=\"w-full h-full object-cover\"\r\n />\r\n {/* Processing Overlay */}\r\n {isInternalVideo && processingStatus !== 'completed' && processingStatus !== 'unknown' && (\r\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-black/60 z-10\">\r\n {processingStatus === 'failed' ? (\r\n <div className=\"text-red-500 flex flex-col items-center\">\r\n <span className=\"text-sm font-medium\">Processing Failed</span>\r\n </div>\r\n ) : (\r\n <div className=\"flex flex-col items-center text-white space-y-2\">\r\n <Loader2 className=\"w-8 h-8 animate-spin text-primary\" />\r\n\r\n <span className=\"text-xs font-medium\">Processing {progress}%</span>\r\n <Button\r\n size=\"sm\"\r\n variant=\"destructive\"\r\n className=\"h-6 text-xs mt-2\"\r\n onClick={handleCancelProcessing}\r\n >\r\n <X className=\"w-3 h-3 mr-1\" /> Cancel\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Play Button Overlay */}\r\n {showPlayButton && (!isInternalVideo || processingStatus === 'completed' || processingStatus === 'unknown') && (\r\n <button\r\n onClick={handlePlayClick}\r\n className=\"absolute inset-0 flex items-center justify-center bg-black/30 hover:bg-black/40 transition-colors group\"\r\n aria-label=\"Play video\"\r\n >\r\n <div className=\"w-16 h-16 rounded-full bg-white/90 flex items-center justify-center group-hover:bg-white group-hover:scale-110 transition-all\">\r\n <svg\r\n className=\"w-8 h-8 text-black ml-1\"\r\n fill=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path d=\"M8 5v14l11-7z\" />\r\n </svg>\r\n </div>\r\n </button>\r\n )}\r\n </>\r\n ) : (\r\n // Show MediaPlayer when playing\r\n <MediaPlayer\r\n key={videoId}\r\n ref={player}\r\n title={title}\r\n src={\r\n playbackUrl.includes('.m3u8')\r\n ? { src: playbackUrl, type: 'application/x-mpegurl' }\r\n : (job?.resultUrl && job.status === 'completed')\r\n ? { src: job.resultUrl, type: 'application/x-mpegurl' }\r\n : playbackUrl.includes('/api/videos/jobs')\r\n ? { src: playbackUrl, type: 'video/mp4' }\r\n : playbackUrl\r\n }\r\n poster={posterUrl}\r\n fullscreenOrientation=\"any\"\r\n controls\r\n playsInline\r\n className={`w-full ${variant === 'grid' ? \"h-full\" : \"\"}`}\r\n >\r\n <MediaProvider />\r\n <DefaultVideoLayout icons={defaultLayoutIcons} />\r\n </MediaPlayer>\r\n )}\r\n </div>\r\n\r\n {/* Desktop Hover Overlay - hidden on mobile, and hidden in feed variant. Also hidden when playing to avoid blocking controls. */}\r\n {showContent && variant === 'grid' && !isPlaying && (\r\n <div className=\"hidden md:block absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none\">\r\n <div className=\"absolute bottom-0 left-0 right-0 p-4 pointer-events-auto\">\r\n <div className=\"flex items-center justify-between mb-2\">\r\n <div className=\"flex items-center space-x-2\">\r\n <UserAvatarBlock\r\n userId={authorId}\r\n avatarUrl={authorAvatarUrl}\r\n displayName={author}\r\n hoverStyle={true}\r\n showDate={false}\r\n />\r\n </div>\r\n <div className=\"flex items-center space-x-1\">\r\n <Button\r\n size=\"sm\"\r\n variant=\"ghost\"\r\n onClick={handleLike}\r\n className={`h-8 w-8 p-0 ${localIsLiked ? \"text-red-500\" : \"text-white hover:text-red-500\"\r\n }`}\r\n >\r\n <Heart className=\"h-4 w-4\" fill={localIsLiked ? \"currentColor\" : \"none\"} />\r\n </Button>\r\n <span className=\"text-white text-sm\">{localLikes}</span>\r\n\r\n <Button\r\n size=\"sm\"\r\n variant=\"ghost\"\r\n className=\"h-8 w-8 p-0 text-white hover:text-blue-400 ml-2\"\r\n >\r\n <MessageCircle className=\"h-4 w-4\" />\r\n </Button>\r\n <span className=\"text-white text-sm\">{comments}</span>\r\n\r\n {isOwner && (\r\n <>\r\n <Button\r\n size=\"sm\"\r\n variant=\"ghost\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setShowEditModal(true);\r\n }}\r\n className=\"h-8 w-8 p-0 text-white hover:text-green-400 ml-2\"\r\n >\r\n <Edit3 className=\"h-4 w-4\" />\r\n </Button>\r\n\r\n <Button\r\n size=\"sm\"\r\n variant=\"ghost\"\r\n onClick={handleDelete}\r\n disabled={isDeleting}\r\n className=\"h-8 w-8 p-0 text-white hover:text-red-400 ml-2\"\r\n >\r\n <Trash2 className=\"h-4 w-4\" />\r\n </Button>\r\n\r\n {versionCount > 1 && (\r\n <div className=\"flex items-center ml-2 px-2 py-1 bg-white/20 rounded text-white text-xs\">\r\n <Layers className=\"h-3 w-3 mr-1\" />\r\n {versionCount}\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <h3 className=\"text-white font-medium mb-1\">{title}</h3>\r\n {description && (\r\n <div className=\"text-white/80 text-sm mb-3 line-clamp-3 overflow-hidden\">\r\n <MarkdownRenderer content={description} className=\"prose-invert prose-white\" />\r\n </div>\r\n )}\r\n\r\n <div className=\"flex items-center space-x-1\">\r\n <Button\r\n size=\"sm\"\r\n variant=\"secondary\"\r\n className=\"h-6 px-2 text-xs bg-white/20 hover:bg-white/30 border-0 text-white\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleDownload();\r\n }}\r\n >\r\n <Download className=\"h-3 w-3 mr-1\" />\r\n <T>Download</T>\r\n </Button>\r\n <Button size=\"sm\" variant=\"secondary\" className=\"h-6 w-6 p-0 bg-white/20 hover:bg-white/30 border-0 text-white\">\r\n <Share2 className=\"h-2.5 w-2.5\" />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Mobile/Feed Content - always visible below video */}\r\n {showContent && (variant === 'feed' || (variant === 'grid' && true)) && (\r\n <div className={`${variant === 'grid' ? \"md:hidden\" : \"\"} pb-2 space-y-2`}>\r\n {/* Row 1: Avatar + Actions */}\r\n <div className=\"flex items-center justify-between px-2 pt-2\">\r\n <UserAvatarBlock\r\n userId={authorId}\r\n avatarUrl={authorAvatarUrl}\r\n displayName={author === 'User' ? undefined : author}\r\n className=\"w-8 h-8\"\r\n showDate={false}\r\n />\r\n\r\n <div className=\"flex items-center gap-1\">\r\n <Button\r\n size=\"icon\"\r\n variant=\"ghost\"\r\n onClick={handleLike}\r\n className={localIsLiked ? \"text-red-500 hover:text-red-600\" : \"\"}\r\n >\r\n <Heart className=\"h-6 w-6\" fill={localIsLiked ? \"currentColor\" : \"none\"} />\r\n </Button>\r\n {localLikes > 0 && (\r\n <span className=\"text-sm font-medium text-foreground mr-1\">{localLikes}</span>\r\n )}\r\n\r\n <Button\r\n size=\"icon\"\r\n variant=\"ghost\"\r\n className=\"text-foreground\"\r\n >\r\n <MessageCircle className=\"h-6 w-6 -rotate-90\" />\r\n </Button>\r\n {comments > 0 && (\r\n <span className=\"text-sm font-medium text-foreground mr-1\">{comments}</span>\r\n )}\r\n\r\n <Button\r\n size=\"icon\"\r\n variant=\"ghost\"\r\n className=\"text-foreground\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleDownload();\r\n }}\r\n >\r\n <Download className=\"h-6 w-6\" />\r\n </Button>\r\n\r\n {isOwner && (\r\n <>\r\n <Button\r\n size=\"icon\"\r\n variant=\"ghost\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setShowEditModal(true);\r\n }}\r\n className=\"text-foreground hover:text-green-400\"\r\n >\r\n <Edit3 className=\"h-6 w-6\" />\r\n </Button>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Likes */}\r\n\r\n\r\n {/* Caption / Description section */}\r\n <div className=\"px-4 space-y-1\">\r\n {(!isLikelyFilename(title) && title) && (\r\n <div className=\"font-semibold text-sm\">{title}</div>\r\n )}\r\n\r\n {description && (\r\n <div className=\"text-sm text-foreground/90 line-clamp-3 pl-8\">\r\n <MarkdownRenderer content={description} className=\"prose-sm dark:prose-invert\" />\r\n </div>\r\n )}\r\n\r\n {created_at && (\r\n <div className=\"text-xs text-muted-foreground pt-1\">\r\n {formatDate(created_at)}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {showEditModal && (\r\n <EditVideoModal\r\n open={showEditModal}\r\n onOpenChange={setShowEditModal}\r\n videoId={videoId}\r\n currentTitle={title}\r\n currentDescription={description || null}\r\n currentVisible={true} // Default to true until we can properly pass this\r\n onUpdateSuccess={() => {\r\n setShowEditModal(false);\r\n onDelete?.(); // Trigger refresh\r\n }}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default VideoCard;\r\n","import { supabase } from \"@/integrations/supabase/client\";\nimport { filterPrivateCollectionPictures } from \"@/utils/collectionUtils\";\n\nexport interface MediaItem {\n id: string;\n type: 'picture' | 'video' | 'page-external';\n title: string;\n description: string | null;\n url: string; // image_url or video_url\n thumbnail_url: string | null;\n likes_count: number;\n created_at: string;\n user_id: string;\n comments_count: number;\n meta?: any;\n}\n\ninterface FetchMediaOptions {\n organizationId?: string | null;\n includePrivate?: boolean;\n limit?: number;\n userId?: string; // Filter by specific user\n tag?: string; // Filter by tag\n}\n\n/**\n * Fetches and merges pictures and videos from the database\n * Returns a unified array of media items sorted by created_at\n */\nexport async function fetchMediaItems(options: FetchMediaOptions = {}): Promise<MediaItem[]> {\n const { organizationId, includePrivate = false, limit, userId, tag } = options;\n\n try {\n // Fetch pictures\n let picturesQuery = supabase\n .from('pictures')\n .select('*')\n .eq('is_selected', true)\n .eq('visible', true);\n\n // Apply filters\n if (organizationId !== undefined) {\n if (organizationId === null) {\n picturesQuery = picturesQuery.is('organization_id', null);\n } else {\n picturesQuery = picturesQuery.eq('organization_id', organizationId);\n }\n }\n\n if (userId) {\n picturesQuery = picturesQuery.eq('user_id', userId);\n }\n\n if (tag) {\n picturesQuery = picturesQuery.contains('tags', [tag]);\n }\n\n const { data: picturesData, error: picturesError } = await picturesQuery\n .order('created_at', { ascending: false });\n\n if (picturesError) throw picturesError;\n\n // Filter private collections if needed\n const publicPictures = includePrivate\n ? (picturesData || [])\n : await filterPrivateCollectionPictures(picturesData || []);\n\n // Get comment counts for pictures\n const picturesWithComments = await Promise.all(\n publicPictures.map(async (picture) => {\n const { count } = await supabase\n .from('comments')\n .select('*', { count: 'exact', head: true })\n .eq('picture_id', picture.id);\n\n return { ...picture, comments_count: count || 0 };\n })\n );\n\n // Convert to unified MediaItem format\n // Videos have type='mux-video' or type='video', everything else is a picture\n const allMedia: MediaItem[] = picturesWithComments.map(p => {\n const isLegacyVideo = p.type === 'video-intern';\n let url = p.image_url; // Default for pictures\n if (isLegacyVideo) {\n url = p.image_url;\n }\n\n return {\n id: p.id,\n type: isLegacyVideo ? 'video' as const : 'picture' as const,\n title: p.title,\n description: p.description,\n url: url, // Use the constructed URL\n thumbnail_url: p.thumbnail_url,\n likes_count: p.likes_count || 0,\n created_at: p.created_at,\n user_id: p.user_id,\n comments_count: p.comments_count,\n meta: p.meta,\n };\n }).sort(\n (a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()\n );\n\n // Apply limit if specified\n return limit ? allMedia.slice(0, limit) : allMedia;\n } catch (error) {\n console.error('Error fetching media items:', error);\n throw error;\n }\n}\n\n/**\n * Fetches user likes for all media (both pictures and videos)\n * Note: Videos are also stored in the pictures table with type='mux-video'\n */\nexport async function fetchUserMediaLikes(userId: string): Promise<{\n pictureLikes: Set<string>;\n videoLikes: Set<string>;\n}> {\n try {\n // Fetch all likes (both pictures and videos are in the same table)\n const { data: likesData, error: likesError } = await supabase\n .from('likes')\n .select('picture_id')\n .eq('user_id', userId);\n\n if (likesError) throw likesError;\n\n // Since videos are also in the pictures table, all likes are in picture_id\n const allLikedIds = new Set(likesData?.map(like => like.picture_id) || []);\n\n return {\n pictureLikes: allLikedIds,\n videoLikes: allLikedIds, // Same set since videos are also in pictures table\n };\n } catch (error) {\n console.error('Error fetching user likes:', error);\n throw error;\n }\n}\n\n\n/**\n * Checks if a given URL is a TikTok URL\n */\nexport function isTikTokUrl(url: string | null | undefined): boolean {\n if (!url) return false;\n return url.includes('tiktok.com');\n}\n\n/**\n * Extracts YouTube Video ID from various URL formats\n */\nexport function getYouTubeVideoId(url: string | null | undefined): string | null {\n if (!url) return null;\n\n // Regular expressions for different YouTube URL formats\n const regExp = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n const match = url.match(regExp);\n\n return (match && match[2].length === 11) ? match[2] : null;\n}\n\n/**\n * Extracts TikTok Video ID\n */\nexport function getTikTokVideoId(url: string | null | undefined): string | null {\n if (!url) return null;\n try {\n const urlObj = new URL(url);\n if (urlObj.hostname.includes('tiktok.com') && urlObj.pathname.includes('/video/')) {\n const parts = urlObj.pathname.split('/video/');\n if (parts.length > 1) {\n return parts[1].split(/[?#]/)[0];\n }\n }\n } catch {\n return null;\n }\n return null;\n}\n","import React from 'react';\r\nimport { FileText, Heart, MessageCircle, Maximize, Play } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport ResponsiveImage from \"@/components/ResponsiveImage\";\r\nimport UserAvatarBlock from \"@/components/UserAvatarBlock\";\r\nimport MarkdownRenderer from \"@/components/MarkdownRenderer\";\r\nimport type { MediaRendererProps } from \"@/lib/mediaRegistry\";\r\nimport { getTikTokVideoId, getYouTubeVideoId } from \"@/utils/mediaUtils\";\r\n\r\ninterface PageCardProps extends Omit<MediaRendererProps, 'created_at'> {\r\n variant?: 'grid' | 'feed';\r\n responsive?: any;\r\n showContent?: boolean;\r\n authorAvatarUrl?: string | null;\r\n created_at?: string;\r\n apiUrl?: string;\r\n}\r\n\r\nconst PageCard: React.FC<PageCardProps> = ({\r\n id,\r\n url,\r\n thumbnailUrl,\r\n title,\r\n author,\r\n authorId,\r\n authorAvatarUrl,\r\n likes,\r\n comments,\r\n isLiked,\r\n description,\r\n onClick,\r\n onLike,\r\n created_at,\r\n variant = 'grid',\r\n responsive,\r\n showContent = true,\r\n apiUrl\r\n}) => {\r\n // Determine image source\r\n // If url is missing or empty, fallback to picsum\r\n // For PAGE_EXTERNAL, currently 'url' is the link and 'thumbnailUrl' is the image.\r\n const displayImage = thumbnailUrl || url || \"https://picsum.photos/640\";\r\n const [isPlaying, setIsPlaying] = React.useState(false);\r\n\r\n // Check for External Video Types\r\n const tikTokId = getTikTokVideoId(url);\r\n const ytId = getYouTubeVideoId(url);\r\n const isExternalVideo = !!(tikTokId || ytId);\r\n\r\n\r\n // Use thumbnail if available and preferred (logic from MediaCard usually handles this before passing url, \r\n // but here we ensure we have *something*).\r\n\r\n const handleLike = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n onLike?.();\r\n };\r\n\r\n const handleCardClick = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n onClick?.(id);\r\n };\r\n\r\n if (variant === 'feed') {\r\n return (\r\n <div\r\n className=\"group relative overflow-hidden bg-card transition-all duration-300 cursor-pointer w-full border rounded-lg mb-4\"\r\n onClick={handleCardClick}\r\n >\r\n <div className=\"p-4 border-b flex items-center justify-between\">\r\n <UserAvatarBlock\r\n userId={authorId}\r\n avatarUrl={authorAvatarUrl}\r\n displayName={author}\r\n className=\"w-8 h-8\"\r\n showDate={true}\r\n createdAt={created_at}\r\n />\r\n </div>\r\n\r\n <div className={`relative w-full ${tikTokId ? 'aspect-[9/16]' : 'aspect-[16/9]'} overflow-hidden bg-muted`}>\r\n {isPlaying && isExternalVideo ? (\r\n <div className=\"w-full h-full bg-black flex justify-center\">\r\n <iframe\r\n src={tikTokId\r\n ? `https://www.tiktok.com/embed/v2/${tikTokId}`\r\n : `https://www.youtube.com/embed/${ytId}?autoplay=1`\r\n }\r\n className=\"w-full h-full border-0\"\r\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\r\n allowFullScreen\r\n title={title}\r\n ></iframe>\r\n </div>\r\n ) : (\r\n <>\r\n <ResponsiveImage\r\n src={displayImage}\r\n alt={title}\r\n className=\"w-full h-full\"\r\n imgClassName=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\r\n sizes=\"100vw\"\r\n data={responsive}\r\n apiUrl={apiUrl}\r\n />\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none\">\r\n {isExternalVideo ? (\r\n <div\r\n className=\"bg-black/50 p-4 rounded-full backdrop-blur-sm pointer-events-auto cursor-pointer hover:bg-black/70 transition-colors\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setIsPlaying(true);\r\n }}\r\n >\r\n <Play className=\"w-8 h-8 text-white fill-white\" />\r\n </div>\r\n ) : (\r\n <div className=\"bg-black/50 p-4 rounded-full backdrop-blur-sm\">\r\n <FileText className=\"w-8 h-8 text-white\" />\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n\r\n <div className=\"p-4 space-y-2\">\r\n <div className=\"flex items-center justify-between\">\r\n <h3 className=\"text-xl font-semibold\">{title}</h3>\r\n </div>\r\n\r\n {description && (\r\n <div className=\"text-sm text-foreground/90 line-clamp-3\">\r\n <MarkdownRenderer content={description} className=\"prose-sm dark:prose-invert\" />\r\n </div>\r\n )}\r\n\r\n <div className=\"flex items-center gap-4 pt-2\">\r\n <Button size=\"sm\" variant=\"ghost\" className=\"px-0 gap-1\" onClick={handleLike}>\r\n <Heart className={`h-5 w-5 ${isLiked ? \"fill-red-500 text-red-500\" : \"\"}`} />\r\n <span>{likes}</span>\r\n </Button>\r\n <Button size=\"sm\" variant=\"ghost\" className=\"px-0 gap-1\">\r\n <MessageCircle className=\"h-5 w-5\" />\r\n <span>{comments}</span>\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Grid Variant\r\n return (\r\n <div\r\n className={`group relative overflow-hidden bg-card transition-all duration-300 cursor-pointer w-full ${isPlaying && tikTokId ? 'aspect-[9/16]' : 'aspect-square'}`}\r\n onClick={(e) => {\r\n if (isExternalVideo && !isPlaying) {\r\n e.stopPropagation();\r\n setIsPlaying(true);\r\n } else {\r\n handleCardClick(e);\r\n }\r\n }}\r\n >\r\n {isPlaying && isExternalVideo ? (\r\n <div className=\"w-full h-full bg-black flex justify-center\">\r\n <iframe\r\n src={tikTokId\r\n ? `https://www.tiktok.com/embed/v2/${tikTokId}`\r\n : `https://www.youtube.com/embed/${ytId}?autoplay=1`\r\n }\r\n className=\"w-full h-full border-0\"\r\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\r\n allowFullScreen\r\n title={title}\r\n ></iframe>\r\n </div>\r\n ) : (\r\n <>\r\n <ResponsiveImage\r\n src={displayImage}\r\n alt={title}\r\n className=\"w-full h-full\"\r\n imgClassName=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\r\n sizes=\"(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw\"\r\n responsiveSizes={[320, 640, 1024]}\r\n data={responsive}\r\n apiUrl={apiUrl}\r\n />\r\n\r\n <div className=\"absolute top-2 right-2 p-1.5 bg-black/60 rounded-md backdrop-blur-sm z-10\">\r\n {isExternalVideo ? (\r\n <Play className=\"w-4 h-4 text-white fill-white\" />\r\n ) : (\r\n <FileText className=\"w-4 h-4 text-white\" />\r\n )}\r\n </div>\r\n\r\n {isExternalVideo && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none\">\r\n <div className=\"bg-black/50 p-3 rounded-full backdrop-blur-sm group-hover:bg-black/70 transition-colors\">\r\n <Play className=\"w-8 h-8 text-white fill-white\" />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {showContent && (\r\n <div className=\"hidden md:block absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none\">\r\n <div className=\"absolute bottom-0 left-0 right-0 p-4 pointer-events-auto\">\r\n <div className=\"flex items-center justify-between mb-2\">\r\n <UserAvatarBlock\r\n userId={authorId}\r\n avatarUrl={authorAvatarUrl}\r\n displayName={author}\r\n hoverStyle={true}\r\n showDate={false}\r\n />\r\n\r\n <div className=\"flex items-center space-x-1\">\r\n <Button\r\n size=\"sm\"\r\n variant=\"ghost\"\r\n onClick={handleLike}\r\n className={`h-8 w-8 p-0 ${isLiked ? \"text-red-500\" : \"text-white hover:text-red-500\"}`}\r\n >\r\n <Heart className=\"h-4 w-4\" fill={isLiked ? \"currentColor\" : \"none\"} />\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n <h3 className=\"text-white font-medium mb-1 line-clamp-1\">{title}</h3>\r\n {description && (\r\n <div className=\"text-white/80 text-sm mb-1 line-clamp-2\">\r\n <MarkdownRenderer content={description} className=\"prose-invert prose-white\" />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Mobile Footer used in Grid view on mobile */}\r\n <div className=\"md:hidden absolute bottom-0 left-0 right-0 p-2 bg-gradient-to-t from-black/80 to-transparent\">\r\n <div className=\"flex items-center justify-between text-white\">\r\n <span className=\"text-xs font-medium truncate flex-1 mr-2\">{title}</span>\r\n {isExternalVideo ? (\r\n <Play className=\"w-3 h-3 flex-shrink-0 fill-white\" />\r\n ) : (\r\n <FileText className=\"w-3 h-3 flex-shrink-0\" />\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default PageCard;\r\n","/**\r\n * MediaCard - Unified component that renders the appropriate card type\r\n * based on the media type from the 'pictures' table\r\n */\r\n\r\nimport React from 'react';\r\nimport PhotoCard from './PhotoCard';\r\nimport VideoCard from '@/components/VideoCard';\r\nimport PageCard from '@/components/PageCard';\r\nimport { normalizeMediaType, MEDIA_TYPES, type MediaType } from '@/lib/mediaRegistry';\r\n\r\ninterface MediaCardProps {\r\n id: string;\r\n pictureId?: string; // Add pictureId explicitly\r\n url: string;\r\n thumbnailUrl?: string | null;\r\n title: string;\r\n author: string;\r\n authorId: string;\r\n likes: number;\r\n comments: number;\r\n isLiked?: boolean;\r\n description?: string | null;\r\n type: MediaType;\r\n meta?: any;\r\n responsive?: any; // Keeping as any for now to avoid tight coupling or import ResponsiveData\r\n onClick?: (id: string) => void;\r\n onLike?: () => void;\r\n onDelete?: () => void;\r\n onEdit?: (id: string) => void;\r\n created_at?: string;\r\n authorAvatarUrl?: string | null;\r\n showContent?: boolean;\r\n job?: any;\r\n variant?: 'grid' | 'feed';\r\n apiUrl?: string;\r\n}\r\n\r\nconst MediaCard: React.FC<MediaCardProps> = ({\r\n id,\r\n pictureId,\r\n url,\r\n thumbnailUrl,\r\n title,\r\n author,\r\n authorAvatarUrl,\r\n authorId,\r\n likes,\r\n comments,\r\n isLiked,\r\n description,\r\n type,\r\n meta,\r\n onClick,\r\n onLike,\r\n onDelete,\r\n onEdit,\r\n created_at,\r\n showContent = true,\r\n responsive,\r\n job,\r\n variant = 'grid',\r\n apiUrl\r\n}) => {\r\n const normalizedType = normalizeMediaType(type);\r\n // Render based on type\r\n if (normalizedType === 'tiktok') {\r\n return (\r\n <div className=\"w-full h-full bg-black flex justify-center aspect-[9/16] rounded-md overflow-hidden shadow-sm border relative\">\r\n <iframe\r\n src={url}\r\n className=\"w-full h-full border-0\"\r\n title={title}\r\n ></iframe>\r\n </div>\r\n );\r\n }\r\n\r\n if (normalizedType === MEDIA_TYPES.VIDEO_INTERN) {\r\n return (\r\n <VideoCard\r\n videoId={pictureId || id}\r\n videoUrl={url}\r\n thumbnailUrl={thumbnailUrl || undefined}\r\n title={title}\r\n author={author}\r\n authorId={authorId}\r\n likes={likes}\r\n comments={comments}\r\n isLiked={isLiked}\r\n description={description}\r\n onClick={() => onClick?.(id)}\r\n onLike={onLike}\r\n onDelete={onDelete}\r\n showContent={showContent}\r\n created_at={created_at}\r\n authorAvatarUrl={authorAvatarUrl}\r\n job={job}\r\n variant={variant}\r\n apiUrl={apiUrl}\r\n />\r\n );\r\n }\r\n if (normalizedType === MEDIA_TYPES.PAGE || normalizedType === MEDIA_TYPES.PAGE_EXTERNAL) {\r\n return (\r\n <PageCard\r\n id={id}\r\n url={url} // For external pages, this is the link\r\n thumbnailUrl={thumbnailUrl} // Preview image\r\n title={title}\r\n author={author}\r\n authorId={authorId}\r\n authorAvatarUrl={authorAvatarUrl}\r\n likes={likes}\r\n comments={comments}\r\n isLiked={isLiked}\r\n description={description}\r\n type={type}\r\n meta={meta}\r\n onClick={() => onClick?.(id)}\r\n onLike={onLike}\r\n onDelete={onDelete}\r\n showContent={showContent}\r\n created_at={created_at}\r\n responsive={responsive}\r\n variant={variant}\r\n apiUrl={apiUrl}\r\n />\r\n );\r\n }\r\n\r\n // Default to PhotoCard for images (type === null or 'supabase-image')\r\n return (\r\n <PhotoCard\r\n pictureId={pictureId || id} // Use pictureId if available\r\n image={url}\r\n title={title}\r\n author={author}\r\n authorId={authorId}\r\n likes={likes}\r\n comments={comments}\r\n isLiked={isLiked}\r\n description={description}\r\n onClick={onClick}\r\n onLike={onLike}\r\n onDelete={onDelete}\r\n onEdit={onEdit}\r\n createdAt={created_at}\r\n authorAvatarUrl={authorAvatarUrl}\r\n showContent={showContent}\r\n responsive={responsive}\r\n variant={variant}\r\n apiUrl={apiUrl}\r\n />\r\n );\r\n};\r\n\r\nexport default MediaCard;\r\n","/**\r\n * usePostNavigation Hook\r\n * \r\n * Compatibility wrapper around Zustand navigationStore\r\n * Provides same API as old PostNavigationContext for easy migration\r\n */\r\n\r\nimport { useNavigationStore, selectNavigationData } from '@/stores/navigationStore';\r\n\r\nexport const usePostNavigation = () => {\r\n const navigationData = useNavigationStore(selectNavigationData);\r\n const setNavigationData = useNavigationStore((state) => state.setNavigationData);\r\n const preloadImage = useNavigationStore((state) => state.preloadImage);\r\n const updateCurrentIndex = useNavigationStore((state) => state.updateCurrentIndex);\r\n\r\n return {\r\n navigationData,\r\n setNavigationData,\r\n preloadImage,\r\n updateCurrentIndex,\r\n };\r\n};\r\n\r\n// Export for backward compatibility\r\nexport default usePostNavigation;\r\n\r\n","import { createContext, useContext, ReactNode } from 'react';\nimport { useLocation } from 'react-router-dom';\n\ninterface OrganizationContextType {\n orgSlug: string | null;\n isOrgContext: boolean;\n}\n\nconst OrganizationContext = createContext<OrganizationContextType>({\n orgSlug: null,\n isOrgContext: false,\n});\n\nexport const useOrganization = () => {\n const context = useContext(OrganizationContext);\n return context;\n};\n\nexport const OrganizationProvider = ({ children }: { children: ReactNode }) => {\n const location = useLocation();\n \n // Parse orgSlug from pathname like /org/:orgSlug/...\n const orgSlugMatch = location.pathname.match(/^\\/org\\/([^\\/]+)/);\n const orgSlug = orgSlugMatch ? orgSlugMatch[1] : null;\n \n return (\n <OrganizationContext.Provider\n value={{\n orgSlug,\n isOrgContext: !!orgSlug,\n }}\n >\n {children}\n </OrganizationContext.Provider>\n );\n};\n","import React, { createContext, useContext, useRef, useCallback } from 'react';\r\nimport { FeedPost } from '@/lib/db';\r\n\r\ninterface FeedCacheState {\r\n posts: FeedPost[];\r\n page: number;\r\n hasMore: boolean;\r\n scrollY: number;\r\n timestamp: number;\r\n}\r\n\r\ninterface FeedCacheContextType {\r\n saveCache: (key: string, state: Omit<FeedCacheState, 'timestamp'>) => void;\r\n getCache: (key: string) => FeedCacheState | null;\r\n clearCache: (key?: string) => void;\r\n}\r\n\r\nconst FeedCacheContext = createContext<FeedCacheContextType | null>(null);\r\n\r\nconst CACHE_TTL = 5 * 60 * 1000; // 5 minutes\r\n\r\nexport const FeedCacheProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\r\n const cache = useRef<Map<string, FeedCacheState>>(new Map());\r\n\r\n const saveCache = useCallback((key: string, state: Omit<FeedCacheState, 'timestamp'>) => {\r\n\r\n cache.current.set(key, { ...state, timestamp: Date.now() });\r\n }, []);\r\n\r\n const getCache = useCallback((key: string) => {\r\n const item = cache.current.get(key);\r\n if (!item) {\r\n return null;\r\n }\r\n\r\n if (Date.now() - item.timestamp > CACHE_TTL) {\r\n\r\n cache.current.delete(key);\r\n return null;\r\n }\r\n\r\n\r\n return item;\r\n }, []);\r\n\r\n const clearCache = useCallback((key?: string) => {\r\n if (key) {\r\n cache.current.delete(key);\r\n } else {\r\n cache.current.clear();\r\n }\r\n }, []);\r\n\r\n return (\r\n <FeedCacheContext.Provider value={{ saveCache, getCache, clearCache }}>\r\n {children}\r\n </FeedCacheContext.Provider>\r\n );\r\n};\r\n\r\nexport const useFeedCache = () => {\r\n const context = useContext(FeedCacheContext);\r\n if (!context) {\r\n throw new Error('useFeedCache must be used within a FeedCacheProvider');\r\n }\r\n return context;\r\n};\r\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { FeedPost } from '@/lib/db';\nimport * as db from '@/lib/db';\nimport { FEED_PAGE_SIZE } from '@/constants';\nimport { useProfiles } from '@/contexts/ProfilesContext';\nimport { useFeedCache } from '@/contexts/FeedCacheContext';\n\nexport type FeedSortOption = 'latest' | 'top';\n\ninterface UseFeedDataProps {\n source?: 'home' | 'collection' | 'tag' | 'user';\n sourceId?: string;\n isOrgContext?: boolean;\n orgSlug?: string;\n enabled?: boolean;\n sortBy?: FeedSortOption;\n supabaseClient?: any; // Using any to avoid importing SupabaseClient type if not strictly needed here, or better import it\n}\n\nexport const useFeedData = ({\n source = 'home',\n sourceId,\n isOrgContext,\n orgSlug,\n enabled = true,\n sortBy = 'latest',\n supabaseClient\n}: UseFeedDataProps) => {\n const { getCache, saveCache } = useFeedCache();\n const cacheKey = `${source}-${sourceId || ''}-${isOrgContext ? 'org' : 'personal'}-${orgSlug || ''}-${sortBy}`;\n\n // Initialize from cache if available\n const [posts, setPosts] = useState<FeedPost[]>(() => {\n const cached = getCache(cacheKey);\n return cached ? cached.posts : [];\n });\n const [page, setPage] = useState(() => {\n const cached = getCache(cacheKey);\n return cached ? cached.page : 0;\n });\n const [hasMore, setHasMore] = useState(() => {\n const cached = getCache(cacheKey);\n return cached !== null ? cached.hasMore : true;\n });\n const [loading, setLoading] = useState(() => {\n const cached = getCache(cacheKey);\n return cached ? false : true;\n });\n\n const [isFetchingMore, setIsFetchingMore] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const { fetchProfiles } = useProfiles();\n\n // Track if we mounted with cache to avoid double fetch\n const mountedWithCache = useRef(!!getCache(cacheKey));\n\n // Reset pagination when source changes (if not cached)\n useEffect(() => {\n const cached = getCache(cacheKey);\n if (cached) {\n setPosts(cached.posts);\n setPage(cached.page);\n setHasMore(cached.hasMore);\n setLoading(false);\n mountedWithCache.current = true;\n } else {\n setPosts([]);\n setPage(0);\n setHasMore(true);\n setLoading(true);\n mountedWithCache.current = false;\n }\n }, [source, sourceId, isOrgContext, orgSlug, cacheKey, getCache]);\n\n // Update Cache whenever state changes\n useEffect(() => {\n if (!loading && posts.length > 0) {\n // We only cache the data state here. \n // Scroll position is updated by the consumer (PhotoGrid) before unmount/nav.\n // But verify if we need to merge with existing cache to preserve scrollY?\n // saveCache replaces the object.\n // So we need to retrieve current scrollY from cache or keep it.\n // Actually, the provider's saveCache typically overwrites.\n // Let's modify saveCache usage or trust that PhotoGrid saves scrollY *after* these updates?\n // No, PhotoGrid saves scrollY on unmount.\n // If we update posts here, we might overwrite scrollY with undefined if we clean write.\n // We should get current cache to preserve scrollY.\n const currentCache = getCache(cacheKey);\n saveCache(cacheKey, {\n posts,\n page,\n hasMore,\n scrollY: currentCache?.scrollY || 0\n });\n }\n }, [posts, page, hasMore, loading, cacheKey, saveCache, getCache]);\n\n const loadFeed = useCallback(async (currentPage: number, isLoadMore: boolean) => {\n if (!enabled) {\n setLoading(false);\n return;\n }\n\n if (isLoadMore) {\n setIsFetchingMore(true);\n } else {\n setLoading(true);\n }\n\n setError(null);\n let fetchedPosts: any[] = [];\n\n try {\n // 1. Hydration (Home only, first page)\n if (source === 'home' && !sourceId && currentPage === 0 && window.__INITIAL_STATE__?.feed) {\n fetchedPosts = window.__INITIAL_STATE__.feed;\n window.__INITIAL_STATE__.feed = undefined;\n\n console.log('Hydrated feed', fetchedPosts);\n }\n // 2. API Fetch (Home only - disabled to use client-side DB logic with pagination/pages support)\n /*\n else if (source === 'home' && !sourceId) {\n const SERVER_URL = import.meta.env.VITE_SERVER_IMAGE_API_URL || '';\n const fetchUrl = SERVER_URL\n ? `${SERVER_URL}${FEED_API_ENDPOINT}?page=${currentPage}&limit=${FEED_PAGE_SIZE}`\n : `${FEED_API_ENDPOINT}?page=${currentPage}&limit=${FEED_PAGE_SIZE}`;\n\n const res = await fetch(fetchUrl);\n if (!res.ok) throw new Error(`Feed fetch failed: ${res.statusText}`);\n fetchedPosts = await res.json();\n }\n */\n // 3. Fallback DB Fetch\n else {\n fetchedPosts = await db.fetchFeedPostsPaginated(\n source,\n sourceId,\n isOrgContext,\n orgSlug,\n currentPage,\n FEED_PAGE_SIZE,\n supabaseClient\n );\n }\n\n if (fetchedPosts.length < FEED_PAGE_SIZE) {\n setHasMore(false);\n } else {\n setHasMore(true);\n }\n\n // Augment posts (ensure cover, author profiles etc are set)\n const augmentedPosts = db.augmentFeedPosts(fetchedPosts);\n\n // Update cover based on sort mode\n const postsWithUpdatedCovers = updatePostCovers(augmentedPosts, sortBy);\n\n // Apply client-side sorting\n setPosts(prev => {\n const combined = isLoadMore ? [...prev, ...postsWithUpdatedCovers] : postsWithUpdatedCovers;\n // Re-sort the entire combined list to maintain correct order across pages\n return sortFeedPosts(combined, sortBy);\n });\n\n // Fetch profiles via context for any users in the feed\n const userIds = Array.from(new Set(augmentedPosts.map((p: any) => p.user_id)));\n if (userIds.length > 0) {\n fetchProfiles(userIds as string[]);\n }\n\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Unknown error fetching feed'));\n } finally {\n setLoading(false);\n setIsFetchingMore(false);\n }\n }, [source, sourceId, isOrgContext, orgSlug, enabled, fetchProfiles, sortBy, supabaseClient]);\n\n // Initial Load\n useEffect(() => {\n // If we initialized from cache, don't fetch page 0 again immediately.\n if (mountedWithCache.current) {\n mountedWithCache.current = false;\n return;\n }\n loadFeed(0, false);\n }, [loadFeed]);\n\n const loadMore = useCallback(() => {\n if (!hasMore || isFetchingMore || loading) return;\n const nextPage = page + 1;\n setPage(nextPage);\n loadFeed(nextPage, true);\n }, [hasMore, isFetchingMore, loading, page, loadFeed]);\n\n return { posts, loading, error, hasMore, loadMore, isFetchingMore };\n};\n\n// Helper function to update post covers based on sort mode\nconst updatePostCovers = (posts: FeedPost[], sortBy: FeedSortOption): FeedPost[] => {\n return posts.map(post => {\n if (!post.pictures || post.pictures.length === 0) {\n return post;\n }\n\n const validPics = post.pictures.filter((p: any) => p.visible !== false);\n if (validPics.length === 0) {\n return post;\n }\n\n let newCover;\n if (sortBy === 'latest') {\n // For \"Latest\" mode: Show the newest picture (by created_at)\n newCover = validPics.reduce((newest, current) => {\n const newestDate = new Date(newest.created_at || post.created_at).getTime();\n const currentDate = new Date(current.created_at || post.created_at).getTime();\n return currentDate > newestDate ? current : newest;\n });\n } else {\n // For \"Top\" or default: Use first by position\n const sortedByPosition = [...validPics].sort((a, b) => (a.position || 0) - (b.position || 0));\n newCover = sortedByPosition[0];\n }\n\n return {\n ...post,\n cover: newCover\n };\n });\n};\n\n// Helper function to sort feed posts\nconst sortFeedPosts = (posts: FeedPost[], sortBy: FeedSortOption): FeedPost[] => {\n const sorted = [...posts];\n\n if (sortBy === 'top') {\n // Sort by likes_count descending, then by created_at descending as tiebreaker\n sorted.sort((a, b) => {\n const likesA = a.likes_count || 0;\n const likesB = b.likes_count || 0;\n\n if (likesB !== likesA) {\n return likesB - likesA;\n }\n\n // Tiebreaker: most recent first\n return new Date(b.created_at).getTime() - new Date(a.created_at).getTime();\n });\n } else {\n // 'latest' - Sort by created_at descending (most recent first)\n // Also consider the latest picture modification if pictures array has dates\n sorted.sort((a, b) => {\n // Check if post has pictures with created_at dates\n const latestPicDateA = a.pictures && a.pictures.length > 0\n ? Math.max(...a.pictures.map(p => new Date(p.created_at || a.created_at).getTime()))\n : new Date(a.created_at).getTime();\n\n const latestPicDateB = b.pictures && b.pictures.length > 0\n ? Math.max(...b.pictures.map(p => new Date(p.created_at || b.created_at).getTime()))\n : new Date(b.created_at).getTime();\n\n return latestPicDateB - latestPicDateA;\n });\n }\n\n return sorted;\n};\n","import { supabase as defaultSupabase } from \"@/integrations/supabase/client\";\nimport * as db from '../pages/Post/db';\nimport { UserProfile } from '../pages/Post/types';\nimport MediaCard from \"./MediaCard\";\nimport React, { useEffect, useState, useRef } from \"react\";\nimport { useAuth } from \"@/hooks/useAuth\";\nimport { useNavigate } from \"react-router-dom\";\nimport { usePostNavigation } from \"@/hooks/usePostNavigation\";\nimport { useOrganization } from \"@/contexts/OrganizationContext\";\nimport { useFeedCache } from \"@/contexts/FeedCacheContext\";\nimport { useLayoutEffect } from \"react\";\n\nimport { useFeedData } from \"@/hooks/useFeedData\";\n\nimport { normalizeMediaType, isVideoType } from \"@/lib/mediaRegistry\";\nimport { UploadCloud, Maximize } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport type { MediaType } from \"@/types\";\n\nexport interface MediaItemType {\n id: string;\n picture_id?: string;\n title: string;\n description: string | null;\n image_url: string;\n thumbnail_url: string | null;\n type: MediaType;\n meta: any | null;\n likes_count: number;\n created_at: string;\n user_id: string;\n comments: { count: number }[];\n\n author_profile?: UserProfile;\n job?: any;\n responsive?: any; // Add responsive data\n}\n\nimport type { FeedSortOption } from '@/hooks/useFeedData';\n\n\ninterface MediaGridProps {\n customPictures?: MediaItemType[];\n customLoading?: boolean;\n navigationSource?: 'home' | 'collection' | 'tag' | 'user' | 'widget';\n navigationSourceId?: string;\n isOwner?: boolean;\n onFilesDrop?: (files: File[]) => void;\n showVideos?: boolean; // Toggle video display (kept for backward compatibility)\n sortBy?: FeedSortOption;\n supabaseClient?: any;\n apiUrl?: string;\n}\n\nconst MediaGrid = ({\n customPictures,\n customLoading,\n navigationSource = 'home',\n navigationSourceId,\n isOwner = false,\n onFilesDrop,\n\n showVideos = true,\n sortBy = 'latest',\n supabaseClient,\n apiUrl\n}: MediaGridProps) => {\n const { user } = useAuth();\n // Use provided client or fallback to default\n const supabase = supabaseClient || defaultSupabase;\n const navigate = useNavigate();\n const { setNavigationData, navigationData } = usePostNavigation();\n const { getCache, saveCache } = useFeedCache();\n\n\n\n const { orgSlug, isOrgContext } = useOrganization();\n // State definitions restored\n const [mediaItems, setMediaItems] = useState<MediaItemType[]>([]);\n const [userLikes, setUserLikes] = useState<Set<string>>(new Set());\n const [loading, setLoading] = useState(true);\n const [isDragging, setIsDragging] = useState(false);\n const dragLeaveTimeoutRef = useRef<number | null>(null);\n\n // 1. Data Fetching\n const {\n posts: feedPosts,\n loading: feedLoading,\n hasMore,\n loadMore,\n isFetchingMore\n } = useFeedData({\n source: navigationSource,\n sourceId: navigationSourceId,\n isOrgContext,\n orgSlug,\n sortBy,\n // Disable hook if we have custom pictures\n enabled: !customPictures,\n supabaseClient\n });\n\n // Infinite Scroll Observer\n const observerTarget = useRef(null);\n\n useEffect(() => {\n const observer = new IntersectionObserver(\n entries => {\n if (entries[0].isIntersecting && hasMore && !feedLoading && !isFetchingMore) {\n loadMore();\n }\n },\n { threshold: 1.0 }\n );\n\n if (observerTarget.current) {\n observer.observe(observerTarget.current);\n }\n\n return () => {\n if (observerTarget.current) {\n observer.unobserve(observerTarget.current);\n }\n };\n }, [hasMore, feedLoading, isFetchingMore, loadMore]);\n\n // 2. State & Effects\n useEffect(() => {\n let finalMedia: MediaItemType[] = [];\n\n if (customPictures) {\n finalMedia = customPictures;\n setLoading(customLoading || false);\n } else {\n // Map FeedPost[] -> MediaItemType[]\n finalMedia = db.mapFeedPostsToMediaItems(feedPosts as any, sortBy);\n setLoading(feedLoading);\n }\n\n setMediaItems(finalMedia);\n\n // Update Navigation Data\n if (finalMedia.length > 0) {\n const navData = {\n posts: finalMedia.map(item => ({\n id: item.id,\n title: item.title,\n image_url: item.image_url,\n user_id: item.user_id,\n type: normalizeMediaType(item.type)\n })),\n currentIndex: 0,\n source: navigationSource,\n sourceId: navigationSourceId\n };\n setNavigationData(navData);\n }\n }, [feedPosts, feedLoading, customPictures, customLoading, navigationSource, navigationSourceId, setNavigationData, sortBy]);\n\n // Scroll Restoration Logic\n const cacheKey = `${navigationSource}-${navigationSourceId || ''}-${isOrgContext ? 'org' : 'personal'}-${orgSlug || ''}`;\n const hasRestoredScroll = useRef(false);\n\n // Restore scroll when mediaItems are populated\n useLayoutEffect(() => {\n // Enable restoration if we have items, haven't restored yet, and either it's NOT custom pictures OR it IS a widget with an ID\n const shouldRestore = mediaItems.length > 0 &&\n !hasRestoredScroll.current &&\n (!customPictures || (navigationSource === 'widget' && navigationSourceId));\n\n if (shouldRestore) {\n const cached = getCache(cacheKey);\n\n if (cached && cached.scrollY > 0) {\n window.scrollTo(0, cached.scrollY);\n }\n hasRestoredScroll.current = true;\n }\n }, [mediaItems, cacheKey, getCache, customPictures, navigationSource, navigationSourceId]);\n\n // Reset restored flag when source changes\n useEffect(() => {\n hasRestoredScroll.current = false;\n }, [cacheKey]);\n\n // Track scroll position\n const lastScrollY = useRef(window.scrollY);\n\n useEffect(() => {\n const handleScroll = () => {\n lastScrollY.current = window.scrollY;\n };\n window.addEventListener('scroll', handleScroll);\n return () => window.removeEventListener('scroll', handleScroll);\n }, []);\n\n // Save scroll position on unmount or before source change\n useEffect(() => {\n return () => {\n // Save if not custom pictures OR if it is a widget with an ID\n const shouldSave = !customPictures || (navigationSource === 'widget' && navigationSourceId);\n\n if (shouldSave) {\n const cached = getCache(cacheKey); // Get latest data from cache (posts etc)\n // Use lastScrollY instead of window.scrollY because unmount might happen after a scroll-to-top by router\n\n if (cached && lastScrollY.current > 0) {\n saveCache(cacheKey, { ...cached, scrollY: lastScrollY.current });\n }\n }\n };\n }, [cacheKey, getCache, saveCache, customPictures, navigationSource, navigationSourceId]);\n\n const fetchMediaFromPicturesTable = async () => {\n // Manual Refresh Stub if needed - for onDelete/refresh actions\n // Since the hook data is reactive, we might need a refresh function from the hook\n // But for now, we can just reload the page or implement refresh in future.\n window.location.reload();\n };\n\n const fetchUserLikes = async () => {\n if (!user || mediaItems.length === 0) return;\n\n try {\n // Collect IDs to check (picture_id for feed, id for collection/direct pictures)\n const targetIds = mediaItems\n .map(item => item.picture_id || item.id)\n .filter(Boolean) as string[];\n\n if (targetIds.length === 0) return;\n\n // Fetch likes only for the displayed items\n const { data: likesData, error } = await supabase\n .from('likes')\n .select('picture_id')\n .eq('user_id', user.id)\n .in('picture_id', targetIds);\n\n if (error) throw error;\n\n // Merge new likes with existing set\n setUserLikes(prev => {\n const newSet = new Set(prev);\n likesData?.forEach(l => newSet.add(l.picture_id));\n return newSet;\n });\n } catch (error) {\n console.error('Error fetching user likes:', error);\n }\n };\n\n const handleMediaClick = (mediaId: string, type: MediaType, index: number) => {\n // Handle Page navigation\n if (type === 'page-intern') {\n const item = mediaItems.find(i => i.id === mediaId);\n if (item && item.meta?.slug) {\n navigate(`/user/${item.user_id}/pages/${item.meta.slug}`);\n return;\n }\n }\n\n // Update navigation data with current index for correct Prev/Next behavior\n if (navigationData) {\n setNavigationData({ ...navigationData, currentIndex: index });\n }\n navigate(`/post/${mediaId}`);\n };\n\n const handleDragEnter = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (dragLeaveTimeoutRef.current) {\n clearTimeout(dragLeaveTimeoutRef.current);\n }\n if (isOwner && onFilesDrop) setIsDragging(true);\n };\n\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (dragLeaveTimeoutRef.current) {\n clearTimeout(dragLeaveTimeoutRef.current);\n }\n dragLeaveTimeoutRef.current = window.setTimeout(() => {\n setIsDragging(false);\n }, 100);\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n\n if (!isOwner || !onFilesDrop) return;\n\n const files = [...e.dataTransfer.files].filter(f => f.type.startsWith('image/'));\n if (files.length > 0) {\n onFilesDrop(files);\n }\n };\n\n const handleEditPost = async (postId: string) => {\n try {\n const toastId = toast.loading('Loading post for editing...');\n\n // Fetch full post with all pictures\n const { data: post, error } = await supabase\n .from('posts')\n .select(`*, pictures(*)`)\n .eq('id', postId)\n .single();\n\n if (error) throw error;\n\n if (!post.pictures || post.pictures.length === 0) {\n throw new Error('No pictures found in post');\n }\n\n // Transform pictures for wizard\n const wizardImages = post.pictures\n .sort((a: any, b: any) => (a.position - b.position))\n .map((p: any) => ({\n id: p.id,\n path: p.id,\n src: p.image_url,\n title: p.title,\n description: p.description || '',\n selected: false,\n realDatabaseId: p.id\n }));\n\n toast.dismiss(toastId);\n\n navigate('/wizard', {\n state: {\n mode: 'post',\n initialImages: wizardImages,\n postTitle: post.title,\n postDescription: post.description,\n editingPostId: post.id\n }\n });\n } catch (error) {\n console.error('Error opening post editor:', error);\n toast.error('Failed to open post editor');\n }\n };\n\n\n // Set up navigation data when media items change (for custom media)\n useEffect(() => {\n if (mediaItems.length > 0 && customPictures) {\n const navData = {\n posts: mediaItems\n .filter(item => !isVideoType(normalizeMediaType(item.type)))\n .map(item => ({\n id: item.id,\n title: item.title,\n image_url: item.image_url,\n user_id: item.user_id\n })),\n currentIndex: 0,\n source: navigationSource,\n sourceId: navigationSourceId\n };\n setNavigationData(navData);\n }\n }, [mediaItems, customPictures, navigationSource, navigationSourceId, setNavigationData]);\n\n if (loading) {\n return (\n <div className=\"py-8\">\n <div className=\"text-center text-muted-foreground\">\n Loading media...\n </div>\n </div>\n );\n }\n\n const hasItems = mediaItems.length > 0;\n\n return (\n <div className=\"w-full relative\">\n {hasItems && isOwner && onFilesDrop && navigationSource === 'collection' && (\n <div\n className={`my-4 border-2 border-dashed border-muted rounded-lg p-6 text-center text-muted-foreground transition-all ${isDragging ? 'ring-4 ring-primary ring-offset-2 border-solid border-primary bg-primary/5' : ''\n } `}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <UploadCloud className=\"mx-auto h-8 w-8 text-muted-foreground\" />\n <p className=\"mt-2 text-sm\">Drag and drop more images here to upload.</p>\n </div>\n )}\n\n {!hasItems ? (\n isOwner && navigationSource === 'collection' && onFilesDrop ? (\n <div\n className=\"py-8\"\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <div className={`border-2 border-dashed border-muted rounded-lg p-12 text-center text-muted-foreground transition-all ${isDragging ? 'ring-4 ring-primary ring-offset-2 border-solid border-primary bg-primary/5' : ''\n } `}>\n <UploadCloud className=\"mx-auto h-12 w-12 text-muted-foreground\" />\n <h3 className=\"mt-4 text-lg font-semibold\">This collection is empty</h3>\n <p className=\"mt-2\">Drag and drop images here to get started.</p>\n </div>\n </div>\n ) : (\n <div className=\"py-8\">\n <div className=\"text-center text-muted-foreground\">\n <p className=\"text-lg\">No media yet!</p>\n <p>Be the first to share content with the community.</p>\n </div>\n </div>\n )\n ) : (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {mediaItems.map((item, index) => {\n const itemType = normalizeMediaType(item.type);\n const isVideo = isVideoType(itemType);\n\n // For images, convert URL to optimized format\n const displayUrl = item.image_url;\n\n if (isVideo) {\n return (\n <div key={item.id} className=\"relative group\">\n <MediaCard\n id={item.id}\n pictureId={item.picture_id}\n url={displayUrl}\n thumbnailUrl={item.thumbnail_url}\n title={item.title}\n // Pass blank/undefined so UserAvatarBlock uses context data\n author={undefined as any}\n authorAvatarUrl={undefined}\n authorId={item.user_id}\n likes={item.likes_count || 0}\n comments={item.comments[0]?.count || 0}\n isLiked={userLikes.has(item.picture_id || item.id)}\n description={item.description}\n type={itemType}\n meta={item.meta}\n onClick={() => handleMediaClick(item.id, itemType, index)}\n onLike={fetchUserLikes}\n onDelete={fetchMediaFromPicturesTable}\n onEdit={handleEditPost}\n created_at={item.created_at}\n job={item.job}\n responsive={item.responsive}\n apiUrl={apiUrl}\n />\n <div className=\"absolute top-2 right-2 flex items-center justify-center w-8 h-8 bg-black/50 rounded-full opacity-0 group-hover:opacity-100 transition-opacity\">\n <Maximize className=\"w-4 h-4 text-white\" />\n </div>\n </div>\n );\n }\n\n return (\n <MediaCard\n key={item.id}\n id={item.id}\n pictureId={item.picture_id}\n url={displayUrl}\n thumbnailUrl={item.thumbnail_url}\n title={item.title}\n author={undefined as any}\n authorAvatarUrl={undefined}\n authorId={item.user_id}\n likes={item.likes_count || 0}\n comments={item.comments[0]?.count || 0}\n isLiked={userLikes.has(item.picture_id || item.id)}\n description={item.description}\n type={itemType}\n meta={item.meta}\n onClick={() => handleMediaClick(item.id, itemType, index)}\n onLike={fetchUserLikes}\n onDelete={fetchMediaFromPicturesTable}\n onEdit={handleEditPost}\n\n created_at={item.created_at}\n job={item.job}\n responsive={item.responsive}\n apiUrl={apiUrl}\n />\n );\n })}\n </div>\n )}\n\n {/* Loading Indicator / Observer Target */}\n <div ref={observerTarget} className=\"h-10 w-full flex items-center justify-center p-4\">\n {isFetchingMore && (\n <div className=\"animate-spin rounded-full h-6 w-6 border-b-2 border-gray-900 dark:border-white\"></div>\n )}\n </div>\n </div>\n );\n};\n\n// Backward compatibility export\nexport default MediaGrid;\n\n// Named exports for clarity\nexport { MediaGrid };\nexport const PhotoGrid = MediaGrid;"],"names":["f","require$$0","k","l","m","n","p","q","c","a","g","b","d","e","h","reactJsxRuntime_production_min","React","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_OFFSCREEN_TYPE","MAYBE_ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","maybeIterator","ReactSharedInternals","error","format","_len2","args","_key2","printWarning","level","ReactDebugCurrentFrame","stack","argsWithFormat","item","enableScopeAPI","enableCacheElement","enableTransitionTracing","enableLegacyHidden","enableDebugTracing","REACT_MODULE_REFERENCE","isValidElementType","type","getWrappedName","outerType","innerType","wrapperName","displayName","functionName","getContextName","getComponentNameFromType","context","provider","outerName","lazyComponent","payload","init","assign","disabledDepth","prevLog","prevInfo","prevWarn","prevError","prevGroup","prevGroupCollapsed","prevGroupEnd","disabledLog","disableLogs","props","reenableLogs","ReactCurrentDispatcher","prefix","describeBuiltInComponentFrame","name","source","ownerFn","x","match","reentry","componentFrameCache","PossiblyWeakMap","describeNativeComponentFrame","fn","construct","frame","control","previousPrepareStackTrace","previousDispatcher","Fake","sample","sampleLines","controlLines","s","_frame","syntheticFrame","describeFunctionComponentFrame","shouldConstruct","Component","prototype","describeUnknownElementTypeFrameInDEV","hasOwnProperty","loggedTypeFailures","setCurrentlyValidatingElement","element","owner","checkPropTypes","typeSpecs","values","location","componentName","has","typeSpecName","error$1","err","ex","isArrayImpl","isArray","typeName","value","hasToStringTag","willCoercionThrow","testStringCoercion","checkKeyStringCoercion","ReactCurrentOwner","RESERVED_PROPS","specialPropKeyWarningShown","specialPropRefWarningShown","hasValidRef","config","getter","hasValidKey","warnIfStringRefCannotBeAutoConverted","self","defineKeyPropWarningGetter","warnAboutAccessingKey","defineRefPropWarningGetter","warnAboutAccessingRef","ReactElement","key","ref","jsxDEV","maybeKey","propName","defaultProps","ReactCurrentOwner$1","ReactDebugCurrentFrame$1","setCurrentlyValidatingElement$1","propTypesMisspellWarningShown","isValidElement","object","getDeclarationErrorAddendum","getSourceInfoErrorAddendum","ownerHasKeyUseWarning","getCurrentComponentErrorInfo","parentType","info","parentName","validateExplicitKey","currentComponentErrorInfo","childOwner","validateChildKeys","node","i","child","iteratorFn","iterator","step","validatePropTypes","propTypes","_name","validateFragmentProps","fragment","keys","didWarnAboutKeySpread","jsxWithValidation","isStaticChildren","validType","sourceInfo","typeString","children","beforeExample","afterExample","jsxWithValidationStatic","jsxWithValidationDynamic","jsx","jsxs","reactJsxRuntime_development","jsxRuntimeModule","require$$1","requestCache","useResponsiveImage","src","responsiveSizes","formats","enabled","apiUrl","data","setData","useState","loading","setLoading","setError","useEffect","isMounted","cacheKey","requestPromise","formData","response","txt","result","ResponsiveImage","sizes","className","imgClassName","alt","onDataLoaded","rootMargin","onLoad","onError","providedData","isInView","setIsInView","imgLoaded","setImgLoaded","imgRef","observer","entry","hookResult","_a","index","SUPABASE_URL","SUPABASE_PUBLISHABLE_KEY","supabase","createClient","fetchWithDeduplication","fetcher","promise","fetchSelectedVersions","rootIds","client","defaultSupabase","idsString","fetchFeedPostsPaginated","sourceId","isOrgContext","orgSlug","page","pageSize","start","end","query","postsData","postsError","pagesData","pageQuery","pages","pagesError","pageImageIds","pageIdToImageId","content","containers","firstPageKey","container","photoWidget","w","picId","pageImages","pics","postCandidates","post","validPics","cover","selectedVersions","transformedPosts","coverPic","settings","rootId","selected","v","sum","transformedPages","displayImage","requiredPicId","foundUrl","virtualPic","allItems","mapFeedPostsToMediaItems","posts","sortBy","newest","current","newestDate","augmentFeedPosts","pic","setRef","composeRefs","refs","hasCleanup","cleanups","cleanup","useComposedRefs","use","isPromiseLike","isLazyComponent","createSlot","ownerName","SlotClone","createSlotClone","Slot2","forwardedRef","slotProps","childrenArray","slottable","isSlottable","newElement","newChildren","Slot","childrenRef","getElementRef","props2","mergeProps","SLOTTABLE_IDENTIFIER","childProps","overrideProps","slotPropValue","childPropValue","mayWarn","_b","r","o","clsx","falsyToString","cx","cva","base","_config_compoundVariants","variants","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","acc","param","getCompoundVariantClassNames","cvClass","cvClassName","compoundVariantOptions","CLASS_PART_SEPARATOR","createClassGroupUtils","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","validator","arbitraryPropertyRegex","arbitraryPropertyClassName","property","theme","getPrefixedClassGroupEntries","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","path","currentClassPartObject","pathPart","func","classGroupEntries","prefixedClassGroup","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","createParseClassName","separator","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","modifier","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","classGroupsInConflict","classNames","originalClassName","variantModifier","modifierId","classId","conflictGroups","group","twJoin","argument","resolvedValue","string","toValue","mix","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isLength","isNumber","isArbitraryLength","getIsArbitraryValue","isLengthOnly","isArbitraryNumber","isInteger","isPercent","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","label","testValue","getDefaultConfig","colors","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","invert","gap","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","getNumberWithAutoAndArbitrary","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumberAndArbitrary","twMerge","cn","inputs","buttonVariants","Button","size","asChild","Comp","AuthContext","createContext","useAuth","useContext","L","T","G","E","t","be","Re","Te","Oe","I","we","F","ie","oe","ye","j","Pe","Q","Se","$e","U","_e","ae","Le","K","re","Me","ze","Ae","Ee","le","Ie","D","W","ue","Ce","pe","Be","qe","ve","ce","De","He","he","Ze","Ge","Ne","Fe","je","Qe","Ue","Ke","de","ke","We","se","X","Xe","N","Je","C","M","Ve","ge","J","V","z","fe","me","Ye","y","__publicField","R","O","H","ee","te","ne","xe","Z","A","Y","u","_c","_d","P","$","S","B","_","entries","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","apply","thisArg","_len","_key","Func","arrayForEach","unapply","arrayLastIndexOf","arrayPop","arrayPush","arraySplice","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","objectHasOwnProperty","regExpTest","typeErrorCreate","unconstruct","_len3","_key3","_len4","_key4","addToSet","set","array","transformCaseFunc","lcElement","cleanArray","clone","newObject","lookupGetter","prop","desc","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","text","html","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","EXPRESSIONS","NODE_TYPE","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","suffix","ATTR_NAME","policyName","scriptUrl","_createHooksMap","createDOMPurify","window","DOMPurify","root","document","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","NamedNodeMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","remove","getNextSibling","getChildNodes","getParentNode","template","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","FORBID_TAGS","FORBID_ATTR","EXTRA_ELEMENT_HANDLING","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","_parseConfig","cfg","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","parent","tagName","parentTagName","_forceRemove","_removeAttribute","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","body","_createNodeIterator","_isClobbered","_isNode","_executeHooks","currentNode","hook","_sanitizeElements","_isBasicCustomElement","parentNode","childNodes","childCount","childClone","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","attributes","hookEvent","attr","namespaceURI","attrValue","initValue","_sanitizeShadowDOM","shadowNode","shadowIterator","importedNode","returnNode","nodeIterator","serializedHTML","tag","entryPoint","hookFunction","purify","util","assertIs","_arg","assertNever","_x","items","obj","validKeys","filtered","arr","checker","val","joinValues","objectUtil","first","second","ZodParsedType","getParsedType","ZodIssueCode","ZodError","issues","sub","subs","actualProto","_mapper","mapper","issue","fieldErrors","processError","curr","el","formErrors","firstEl","errorMap","_ctx","message","overrideErrorMap","defaultErrorMap","getErrorMap","makeIssue","params","errorMaps","issueData","fullPath","fullIssue","errorMessage","maps","map","addIssueToContext","ctx","overrideMap","ParseStatus","status","results","arrayValue","INVALID","pairs","syncPairs","pair","finalObject","DIRTY","OK","isAborted","isDirty","isValid","isAsync","errorUtil","ParseInputLazyPath","handleResult","processCreateParams","invalid_type_error","required_error","description","iss","ZodType","input","maybeAsyncResult","check","getIssueProperties","refinementData","refinement","ZodEffects","ZodFirstPartyTypeKind","def","ZodOptional","ZodNullable","ZodArray","ZodPromise","option","ZodUnion","incoming","ZodIntersection","transform","defaultValueFunc","ZodDefault","ZodBranded","catchValueFunc","ZodCatch","This","target","ZodPipeline","ZodReadonly","cuidRegex","cuid2Regex","ulidRegex","uuidRegex","nanoidRegex","jwtRegex","durationRegex","emailRegex","_emojiRegex","emojiRegex","ipv4Regex","ipv4CidrRegex","ipv6Regex","ipv6CidrRegex","base64Regex","base64urlRegex","dateRegexSource","dateRegex","timeRegexSource","secondsRegexSource","secondsQuantifier","timeRegex","datetimeRegex","regex","opts","isValidIP","ip","version","isValidJWT","jwt","alg","header","base64","decoded","isValidCidr","ZodString","tooBig","tooSmall","validation","options","minLength","maxLength","len","ch","min","max","floatSafeRemainder","valDecCount","stepDecCount","decCount","valInt","stepInt","ZodNumber","kind","inclusive","ZodBigInt","ZodBoolean","ZodDate","minDate","maxDate","ZodSymbol","ZodUndefined","ZodNull","ZodAny","ZodUnknown","ZodNever","ZodVoid","schema","deepPartialify","ZodObject","newShape","fieldSchema","ZodTuple","shape","shapeKeys","extraKeys","keyValidator","unknownKeys","catchall","defaultError","augmentation","merging","mask","newField","createZodEnum","handleResults","unionErrors","childCtx","types","mergeValues","aType","bType","bKeys","sharedKeys","newObj","sharedValue","newArray","itemA","itemB","handleParsed","parsedLeft","parsedRight","merged","left","right","itemIndex","rest","schemas","ZodMap","keyType","valueType","finalMap","ZodSet","finalizeSet","elements","parsedSet","minSize","maxSize","ZodLazy","ZodLiteral","ZodEnum","expectedValues","enumValues","newDef","opt","ZodNativeEnum","nativeEnumValues","promisified","effect","checkCtx","arg","processed","executeRefinement","inner","preprocess","newCtx","ZodNaN","inResult","stringType","booleanType","objectType","tagSchema","z.string","parseHashtagContent","hashtagRegex","part","HashtagText","onTagClick","navigate","useNavigate","handleTagClick","segments","segment","_self","Prism","lang","uniqueId","plainTextGrammar","encode","tokens","Token","deepClone","visited","id","language","scripts","defaultActivation","no","redef","inside","before","insert","grammar","ret","token","newToken","old","DFS","callback","objId","propertyType","async","env","code","insertHighlightedCode","highlightedCode","worker","evt","tokenList","LinkedList","addAfter","matchGrammar","toArray","callbacks","alias","matchedStr","stringify","aliases","matchPattern","pattern","pos","lookbehind","lookbehindLength","startNode","startPos","rematch","patterns","patternObj","greedy","flags","str","removeCount","from","to","matchStr","after","reach","removeFrom","removeRange","wrapped","nestedRematch","head","tail","list","next","newNode","count","immediateClose","script","highlightAutomaticallyCallback","readyState","module","global","includedCdataInside","attrName","markup","LOADING_MESSAGE","FAILURE_MESSAGE","FAILURE_EMPTY_MESSAGE","EXTENSIONS","STATUS_ATTR","STATUS_LOADING","STATUS_LOADED","STATUS_FAILED","SELECTOR","loadFile","success","xhr","parseRange","range","comma","pre","extension","autoloader","lines","logged","typeInside","envVars","commandAfterHeredoc","insideString","toBeCopied","MarkdownRenderer","containerRef","contentAnalysis","useMemo","hasHashtags","hasMarkdownLinks","hasMarkdownSyntax","htmlContent","decodedContent","marked","rawHtml","formatUrlDisplay","url","displayUrl","parts","domain","processedHtml","href","attrs","displayText","composeEventHandlers","originalEventHandler","ourEventHandler","checkForDefaultPrevented","event","createContext2","rootComponentName","defaultContext","Context","Provider","useContext2","consumerName","createContextScope","scopeName","createContextScopeDeps","defaultContexts","createContext3","BaseContext","scope","createScope","scopeContexts","contexts","composeContextScopes","scopes","baseScope","scopeHooks","createScope2","overrideScopes","nextScopes","nextScopes2","useScope","currentScope","useLayoutEffect2","useReactId","useId","deterministicId","setId","useLayoutEffect","reactId","useInsertionEffect","useControllableState","defaultProp","onChange","caller","uncontrolledProp","setUncontrolledProp","onChangeRef","useUncontrolledState","isControlled","isControlledRef","wasControlled","setValue","nextValue","value2","isFunction","prevValueRef","NODES","Primitive","primitive","primitiveProps","dispatchDiscreteCustomEvent","ReactDOM","useCallbackRef","callbackRef","useEscapeKeydown","onEscapeKeyDownProp","ownerDocument","onEscapeKeyDown","handleKeyDown","DISMISSABLE_LAYER_NAME","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableLayerContext","DismissableLayer","disableOutsidePointerEvents","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","layerProps","setNode","force","composedRefs","node2","layers","highestLayerWithOutsidePointerEventsDisabled","highestLayerWithOutsidePointerEventsDisabledIndex","isBodyPointerEventsDisabled","isPointerEventsEnabled","pointerDownOutside","usePointerDownOutside","isPointerDownOnBranch","branch","focusOutside","useFocusOutside","dispatchUpdate","handleUpdate","BRANCH_NAME","DismissableLayerBranch","handlePointerDownOutside","isPointerInsideReactTreeRef","handleClickRef","handlePointerDown","handleAndDispatchPointerDownOutsideEvent2","handleAndDispatchCustomEvent","eventDetail","timerId","handleFocusOutside","isFocusInsideReactTreeRef","handleFocus","handler","detail","discrete","AUTOFOCUS_ON_MOUNT","AUTOFOCUS_ON_UNMOUNT","EVENT_OPTIONS","FOCUS_SCOPE_NAME","FocusScope","loop","trapped","onMountAutoFocusProp","onUnmountAutoFocusProp","scopeProps","setContainer","onMountAutoFocus","onUnmountAutoFocus","lastFocusedElementRef","focusScope","handleFocusIn2","focus","handleFocusOut2","relatedTarget","handleMutations2","mutations","mutation","mutationObserver","focusScopesStack","previouslyFocusedElement","mountEvent","focusFirst","removeLinks","getTabbableCandidates","unmountEvent","isTabKey","focusedElement","container2","last","getTabbableEdges","candidates","select","candidate","findVisible","nodes","walker","isHiddenInput","isHidden","upTo","isSelectableInput","createFocusScopesStack","activeFocusScope","arrayRemove","updatedArray","PORTAL_NAME","Portal","containerProp","portalProps","mounted","setMounted","useStateMachine","initialState","machine","state","Presence","present","presence","usePresence","React2","stylesRef","prevPresentRef","prevAnimationNameRef","send","currentAnimationName","getAnimationName","styles","wasPresent","prevAnimationName","timeoutId","ownerWindow","handleAnimationEnd","isCurrentAnimation","currentFillMode","handleAnimationStart","useFocusGuards","edgeGuards","createFocusGuard","__assign","__rest","__spreadArray","pack","ar","zeroRightClassName","fullWidthClassName","noScrollbarsClassName","removedBarSizeVariable","assignRef","initialValue","useIsomorphicLayoutEffect","currentValues","useMergeRefs","defaultValue","newValue","oldValue","prevRefs_1","nextRefs_1","current_1","ItoI","innerCreateMedium","defaults","middleware","buffer","assigned","medium","cb","cbs","pendingQueue","executeQueue","cycle","filter","createSidecarMedium","SideCar","sideCar","Target","exportSidecar","exported","effectCar","nothing","RemoveScroll","parentRef","setCallbacks","forwardProps","removeScrollBar","shards","noRelative","noIsolation","inert","allowPinchZoom","Container","gapMode","containerProps","getNonce","makeStyleTag","nonce","injectStyles","css","insertStyleTag","stylesheetSingleton","counter","stylesheet","style","styleHookSingleton","sheet","isDynamic","styleSingleton","useStyle","Sheet","dynamic","zeroGap","parse","getOffset","cs","top","getGapWidth","offsets","documentWidth","windowWidth","Style","lockAttribute","getStyles","allowRelative","important","getCurrentUseCounter","useLockAttribute","newCounter","RemoveScrollBar","noImportant","passiveSupported","nonPassive","alwaysContainsScroll","elementCanBeScrolled","overflow","elementCouldBeVScrolled","elementCouldBeHScrolled","locationCouldBeScrolled","axis","isScrollable","elementCouldBeScrolled","getScrollVariables","scrollHeight","clientHeight","getVScrollVariables","scrollTop","getHScrollVariables","scrollLeft","scrollWidth","clientWidth","getDirectionFactor","direction","handleScroll","endTarget","sourceDelta","noOverscroll","directionFactor","delta","targetInLock","shouldCancelScroll","isDeltaPositive","availableScroll","availableScrollTop","position","scroll_1","capacity","elementScroll","parent_1","getTouchXY","getDeltaXY","extractRef","deltaCompare","generateStyle","idCounter","lockStack","RemoveScrollSideCar","shouldPreventQueue","touchStartRef","activeAxis","lastProps","allow_1","shouldCancelEvent","touch","touchStart","deltaX","deltaY","currentAxis","moveDirection","selection","anchorNode","isTouchingSelection","canBeScrolledInMainDirection","cancelingAxis","shouldPrevent","_event","sourceEvent","shardNodes","shouldStop","shouldCancel","should","getOutermostShadowParent","scrollTouchStart","scrollWheel","scrollTouchMove","inst","shadowParent","ReactRemoveScroll","getDefaultParent","originalTarget","sampleTarget","counterMap","uncontrolledNodes","markerMap","lockCount","unwrapHost","correctTargets","targets","correctedTarget","applyAttributeToOthers","markerName","controlAttribute","markerCounter","hiddenNodes","elementsToKeep","elementsToStop","keep","deep","alreadyHidden","counterValue","markerValue","hideOthers","activeParentNode","DIALOG_NAME","createDialogContext","createDialogScope","DialogProvider","useDialogContext","Dialog","__scopeDialog","openProp","defaultOpen","onOpenChange","modal","triggerRef","contentRef","open","setOpen","prevOpen","TRIGGER_NAME","DialogTrigger","triggerProps","composedTriggerRef","getState","PortalProvider","usePortalContext","DialogPortal","forceMount","PortalPrimitive","OVERLAY_NAME","DialogOverlay","portalContext","overlayProps","DialogOverlayImpl","CONTENT_NAME","DialogContent","contentProps","DialogContentModal","DialogContentNonModal","DialogContentImpl","originalEvent","ctrlLeftClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","trapFocus","onOpenAutoFocus","onCloseAutoFocus","Fragment","TitleWarning","DescriptionWarning","TITLE_NAME","DialogTitle","titleProps","DESCRIPTION_NAME","DialogDescription","descriptionProps","CLOSE_NAME","DialogClose","closeProps","TITLE_WARNING_NAME","WarningProvider","useWarningContext","titleId","titleWarningContext","MESSAGE","DESCRIPTION_WARNING_NAME","descriptionId","describedById","Root","Trigger","Overlay","Content","Title","Description","Close","DialogPrimitive.Root","DialogPrimitive.Portal","DialogPrimitive.Overlay","DialogPrimitive.Content","DialogPrimitive.Close","DialogHeader","DialogPrimitive.Title","DialogPrimitive.Description","Input","isCheckBoxInput","isDateObject","isNullOrUndefined","isObjectType","isObject","getEventValue","getNodeParentName","isNameInFieldArray","names","isPlainObject","tempObject","prototypeCopy","isWeb","cloneObject","isFileListInstance","copy","isKey","isUndefined","compact","stringToPath","get","isBoolean","tempPath","length","lastIndex","objValue","EVENTS","VALIDATION_MODE","INPUT_VALIDATION_RULES","HookFormControlContext","useFormControlContext","getProxyFormState","formState","localProxyFormState","isRoot","useFormState","formControl","disabled","exact","updateFormState","_localProxyFormState","isString","generateWatchOutput","_names","formValues","isGlobal","fieldName","isPrimitive","deepEqual","object1","object2","_internal_visited","keys1","keys2","val1","val2","useWatch","compute","_defaultValue","_compute","_computeFormValues","_prevControl","_prevName","updateValue","getCurrentOutput","refreshValue","computedFormValues","controlChanged","prevName","computedOutput","nameChanged","useController","shouldUnregister","isArrayField","defaultValueMemo","_props","_previousNameRef","_registerProps","fieldState","onBlur","elm","field","_shouldUnregisterField","previousName","updateMounted","Controller","HookFormContext","useFormContext","FormProvider","watch","getValues","getFieldState","clearErrors","trigger","resetField","reset","handleSubmit","unregister","register","setFocus","subscribe","appendErrors","validateAllFieldCriteria","errors","convertToArrayPayload","createSubject","_observers","extractFormValues","fieldsState","fieldValue","nestedFieldsState","isEmptyObject","isFileInput","isHTMLElement","isMultipleSelect","isRadioInput","isRadioOrCheckbox","live","baseGet","updatePath","isEmptyArray","unset","paths","childObject","objectHasFunction","isTraversable","markFieldsDirty","fields","getDirtyFields","dirtyFieldsFromValues","formValue","defaultResult","validResult","getCheckboxValue","getFieldValueAs","valueAsNumber","valueAsDate","setValueAs","defaultReturn","getRadioValue","previous","getFieldValue","_f","getResolverOptions","fieldsNames","_fields","criteriaMode","shouldUseNativeValidation","isRegex","getRuleValue","rule","getValidationModes","mode","ASYNC_FUNCTION","hasPromiseValidation","fieldReference","validateFunction","hasValidation","isWatched","isBlurEvent","watchName","iterateFieldsByAction","action","abortEarly","currentField","schemaErrorLookup","foundError","shouldRenderFormState","formStateData","_proxyFormState","shouldSubscribeByName","signalName","currentName","skipValidation","isTouched","isSubmitted","reValidateMode","unsetEmptyArray","updateFieldArrayRootError","fieldArrayErrors","getValidateError","getValueAndMessage","validationData","validateField","disabledFieldNames","isFieldArray","required","validate","mount","inputValue","inputRef","setCustomValidity","isRadio","isCheckBox","isEmpty","appendErrorsCurry","getMinMaxMessage","exceedMax","maxLengthMessage","minLengthMessage","maxType","minType","exceedMin","maxOutput","minOutput","valueNumber","valueDate","convertTimeToDate","time","isTime","isWeek","maxLengthOutput","minLengthOutput","patternValue","validateError","validationResult","defaultOptions","createFormControl","_options","_formState","_defaultValues","_formValues","_state","delayErrorCallback","timer","defaultProxyFormState","_proxySubscribeFormState","_subjects","shouldDisplayAllAssociatedErrors","debounce","wait","_setValid","shouldUpdateValid","_runSchema","_updateIsValidating","executeBuiltInValidation","isValidating","_setFieldArray","method","shouldSetValues","shouldUpdateFieldsAndState","fieldValues","touchedFields","_getDirty","updateErrors","_setErrors","updateValidAndValue","shouldSkipSetValueAs","setFieldValue","updateTouchAndDirty","shouldDirty","shouldRender","shouldUpdateField","isPreviousDirty","output","isCurrentFieldPristine","isPreviousFieldTouched","shouldRenderByError","previousFieldError","updatedFormState","executeSchemaAndUpdateState","shouldOnlyCheckValid","isFieldArrayRoot","isPromiseFunction","fieldError","_removeUnmounted","_getWatch","_getFieldArray","optionRef","checkboxRef","radioRef","setValues","fieldKey","cloneValue","isFieldValueUpdated","_updateIsFieldValueUpdated","validationModeBeforeSubmit","validationModeAfterSubmit","shouldSkipValidation","watched","previousErrorLookupResult","errorLookupResult","_focusInput","fieldNames","inputName","currentError","currentRef","restOfErrorTree","_subscribe","_setFormState","_setDisabledField","disabledStateChanged","disabledIsDefined","fieldRef","radioOrCheckbox","_focusError","_disableForm","onValid","onInvalid","onValidError","_reset","keepStateOptions","updatedValues","cloneUpdatedValues","isEmptyResetValues","fieldsToCheck","existingValue","form","methods","useForm","_formControl","_values","NAME","Label","labelVariants","LabelPrimitive.Root","Form","FormFieldContext","FormField","useFormField","fieldContext","itemContext","FormItemContext","FormItem","FormLabel","formItemId","FormControl","formDescriptionId","formMessageId","FormDescription","FormMessage","createCollection","PROVIDER_NAME","createCollectionContext","createCollectionScope","CollectionProviderImpl","useCollectionContext","CollectionProvider","itemMap","COLLECTION_SLOT_NAME","CollectionSlotImpl","CollectionSlot","ITEM_SLOT_NAME","ITEM_DATA_ATTR","CollectionItemSlotImpl","CollectionItemSlot","itemData","useCollection","collectionNode","orderedNodes","DirectionContext","useDirection","localDir","globalDir","ENTRY_FOCUS","GROUP_NAME","Collection","createRovingFocusGroupContext","createRovingFocusGroupScope","RovingFocusProvider","useRovingFocusContext","RovingFocusGroup","RovingFocusGroupImpl","__scopeRovingFocusGroup","orientation","dir","currentTabStopIdProp","defaultCurrentTabStopId","onCurrentTabStopIdChange","onEntryFocus","preventScrollOnEntryFocus","groupProps","currentTabStopId","setCurrentTabStopId","isTabbingBackOut","setIsTabbingBackOut","handleEntryFocus","getItems","isClickFocusRef","focusableItemsCount","setFocusableItemsCount","tabStopId","prevCount","isKeyboardFocus","entryFocusEvent","activeItem","currentItem","candidateNodes","ITEM_NAME","RovingFocusGroupItem","focusable","active","itemProps","autoId","isCurrentTabStop","onFocusableItemAdd","onFocusableItemRemove","focusIntent","getFocusIntent","currentIndex","wrapArray","MAP_KEY_TO_FOCUS_INTENT","getDirectionAwareKey","preventScroll","PREVIOUSLY_FOCUSED_ELEMENT","startIndex","Item","TABS_NAME","createTabsContext","useRovingFocusGroupScope","TabsProvider","useTabsContext","Tabs","__scopeTabs","valueProp","onValueChange","activationMode","tabsProps","TAB_LIST_NAME","TabsList","listProps","rovingFocusGroupScope","RovingFocusGroup.Root","TabsTrigger","triggerId","makeTriggerId","contentId","makeContentId","isSelected","RovingFocusGroup.Item","isAutomaticActivation","TabsContent","isMountAnimationPreventedRef","rAF","baseId","Root2","List","TabsPrimitive.Root","TabsPrimitive.List","TabsPrimitive.Trigger","TabsPrimitive.Content","usePrevious","useSize","setSize","resizeObserver","width","height","borderSizeEntry","borderSize","SWITCH_NAME","createSwitchContext","SwitchProvider","useSwitchContext","Switch","__scopeSwitch","checkedProp","defaultChecked","onCheckedChange","switchProps","button","setButton","hasConsumerStoppedPropagationRef","isFormControl","checked","setChecked","prevChecked","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","BUBBLE_INPUT_NAME","bubbles","controlSize","inputProto","Thumb","SwitchPrimitives.Root","SwitchPrimitives.Thumb","CHECKBOX_NAME","createCheckboxContext","CheckboxProviderImpl","useCheckboxContext","CheckboxProvider","__scopeCheckbox","internal_do_not_use_render","setControl","bubbleInput","setBubbleInput","isIndeterminate","CheckboxTrigger","onKeyDown","onClick","checkboxProps","initialCheckedStateRef","Checkbox","CheckboxBubbleInput","INDICATOR_NAME","CheckboxIndicator","indicatorProps","defaultCheckedRef","CheckboxPrimitive.Root","CheckboxPrimitive.Indicator","Check","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","badgeVariants","Badge","DEFAULT_LANG","translationCache","loadingPromises","translationsLoaded","listeners","notify","loadTranslations","__variableDynamicImportRuntimeHelper","translations","existingCache","getCookie","setCookie","days","expires","getCurrentLangInternal","cookieLang","langParam","browserLangs","shortLang","getCurrentLang","textKey","langToUse","forceUpdate","currentLang","translatedString","getTranslationCache","downloadTranslations","isLoaded","sortedTranslations","jsonString","blob","link","getTranslationStatus","langCode","ImagePickerDialog","isOpen","onClose","onSelect","onMultiSelect","onMultiSelectPictures","currentValue","multiple","user","pictures","setPictures","allTags","setAllTags","collections","setCollections","searchQuery","setSearchQuery","selectedTags","setSelectedTags","selectedCollections","setSelectedCollections","selectedIds","setSelectedIds","selectedId","setSelectedId","fetchPictures","fetchTags","fetchCollections","tagsSet","filteredPictures","matchesSearch","matchesTags","finalPictures","setFinalPictures","pictureIdsInCollections","cp","handleSelect","selectedPictures","toggleSelection","prev","pid","Search","Tag","FolderOpen","collection","ImageIcon","picture","MediaCard","MilkdownEditorInternal","MarkdownEditor","placeholder","activeTab","setActiveTab","imagePickerOpen","setImagePickerOpen","pendingImageResolveRef","useRef","useCallback","_file","resolve","handleImageSelect","pictureId","imageUrl","resolveFunc","handleRawChange","MarkdownEditor$1","prevProps","nextProps","createSlottable","Slottable2","Fragment2","ROOT_NAME","createAlertDialogContext","useDialogScope","AlertDialog","__scopeAlertDialog","alertDialogProps","dialogScope","AlertDialogTrigger","DialogPrimitive.Trigger","AlertDialogPortal","AlertDialogOverlay","AlertDialogContentProvider","useAlertDialogContentContext","Slottable","AlertDialogContent","cancelRef","DialogPrimitive.WarningProvider","AlertDialogTitle","AlertDialogDescription","ACTION_NAME","AlertDialogAction","actionProps","CANCEL_NAME","AlertDialogCancel","cancelProps","Portal2","Overlay2","Content2","Action","Cancel","Title2","Description2","AlertDialogPrimitive.Root","AlertDialogPrimitive.Portal","AlertDialogPrimitive.Overlay","AlertDialogPrimitive.Content","AlertDialogHeader","AlertDialogFooter","AlertDialogPrimitive.Title","AlertDialogPrimitive.Description","AlertDialogPrimitive.Action","AlertDialogPrimitive.Cancel","VersionSelector","currentPictureId","onVersionSelect","versions","setVersions","updating","setUpdating","toggling","setToggling","showDeleteDialog","setShowDeleteDialog","versionToDelete","setVersionToDelete","isDeleting","setIsDeleting","loadVersions","currentPicture","rootParentId","allVersions","versionsError","toast","handleVersionSelect","versionId","selectError","prevVersions","handleToggleVisibility","currentVisibility","handleDeleteClick","confirmDelete","allUserPictures","loadError","findDescendants","parentId","descendants","descendantsToDelete","allToDelete","urlParts","fileName","bucketPath","dbError","deletedIds","totalDeleted","Eye","EyeOff","Trash2","__classPrivateFieldSet","receiver","__classPrivateFieldGet","uuid4","crypto","u8","randomByte","isAbortError","castToError","OpenAIError","APIError","headers","msg","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","cause","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isAbsoluteURL","isReadonlyArray","maybeObj","isEmptyObj","_k","hasOwn","isObj","validatePositiveInteger","safeJSON","sleep","ms","VERSION","isRunningInBrowser","getDetectedPlatform","getPlatformProperties","detectedPlatform","normalizePlatform","normalizeArch","browserInfo","getBrowserInfo","browserPatterns","major","minor","patch","arch","platform","_platformHeaders","getPlatformHeaders","getDefaultFetch","makeReadableStream","ReadableStream","ReadableStreamFrom","iterable","iter","controller","done","ReadableStreamToAsyncIterable","stream","reader","cancelPromise","CancelReadableStream","FallbackEncoder","default_format","default_formatter","formatters","RFC1738","hex_table","limit","_defaultEncoder","charset","_kind","$0","out","is_buffer","maybe_map","mapped","array_prefix_generators","push_to_array","value_or_array","toISOString","date","is_non_nullish_primitive","sentinel","inner_stringify","generateArrayPrefix","commaRoundTrip","allowEmptyArrays","strictNullHandling","skipNulls","encodeDotInKeys","encoder","sort","allowDots","serializeDate","formatter","encodeValuesOnly","sideChannel","tmp_sc","find_flag","key_value","obj_keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","normalize_stringify_options","arrayFormat","joined","concatBytes","buffers","encodeUTF8_","encodeUTF8","decodeUTF8_","decodeUTF8","bytes","decoder","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","patternIndex","findNewlineIndex","endIndex","line","findDoubleNewlineIndex","levelNumbers","parseLogLevel","maybeLevel","sourceName","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","_Stream_client","Stream","consumed","sse","_iterSSEMessages","readableStream","iterLines","lineDecoder","teeIterator","queue","ctrl","sseDecoder","SSEDecoder","sseChunk","iterSSEChunks","newData","fieldname","partition","delimiter","defaultParseResponse","requestLogID","retryOfRequestLogID","startTime","contentType","mediaType","json","addRequestID","_APIPromise_client","APIPromise","responsePromise","parseResponse","onfulfilled","onrejected","onfinally","_AbstractPage_client","AbstractPage","nextOptions","PagePromise","request","Page","CursorPage","ConversationCursorPage","cursor","checkFileSupport","process","isOldNode","makeFile","fileBits","getName","isAsyncIterable","maybeMultipartFormRequestOptions","fetch","hasUploadableValue","createForm","multipartFormRequestOptions","supportsFormDataMap","supportsFormData","fetchObject","cached","FetchResponse","addFormValue","isNamedBlob","isUploadable","isBlobLike","isFileLike","isResponseLike","toFile","getBytes","constructor","propsForError","APIResource","encodeURIPath","EMPTY","createPathTagFunction","pathEncoder","statics","postPath","invalidSegments","previousValue","encoded","pathOnly","invalidSegmentPattern","lastEnd","underline","spaces","arrows","completionID","isChatCompletionFunctionTool","tool","isAutoParsableResponseFormat","response_format","isAutoParsableTool","maybeParseChatCompletion","completion","hasAutoParseableInput","choice","assertToolCallsAreChatCompletionFunctionToolCalls","parseChatCompletion","choices","toolCall","parseToolCall","parseResponseFormat","inputTool","shouldParseToolCall","toolCalls","validateInputTools","tools","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","EventStream","reject","executor","listener","openAIError","isRunnableFunctionWithParse","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","chatCompletion","emit","tool_call","finalMessage","finalContent","finalFunctionCall","finalFunctionCallResult","signal","role","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","functionsByName","tool_call_id","parsed","rawContent","total","usage","ChatCompletionRunner","runner","STR","NUM","ARR","OBJ","NULL","BOOL","NAN","INFINITY","MINUS_INFINITY","INF","SPECIAL","ATOM","COLLECTION","ALL","Allow","PartialJSON","MalformedJSON","parseJSON","allowPartial","_parseJSON","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","parseNum","escape","partialParse","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","chatId","choiceSnapshot","_g","_h","_i","_j","_l","toolCallDelta","toolCallSnapshot","_m","_n","_o","toolCallIndex","responseFormat","snapshot","finalizeChatCompletion","finish_reason","logprobs","other","refusal","function_call","tool_calls","pushQueue","readQueue","created","model","system_fingerprint","choiceRest","messageRest","toolRest","fnRest","ChatCompletionStreamingRunner","MessagesAPI.Messages","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","row","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Transcriptions","Translations","Audio","TranscriptionsAPI.Transcriptions","TranslationsAPI.Translations","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","TranscriptionSessions","SessionsAPI.Sessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","Sessions","sessionID","threadID","ChatKit","ThreadsAPI.Threads","Threads","messageID","thread_id","stepID","run_id","runID","toFloat32Array","base64Str","buf","binaryStr","readEnv","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","runId","runs","run","thread","threadId","deltaValue","accValue","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","currentContent","accumulatedRunStep","accumulated","contentElement","StepsAPI.Steps","include","sleepInterval","headerInterval","headerIntervalMs","Runs","Steps","RunsAPI.Runs","Beta","RealtimeAPI.Realtime","ChatKitAPI.ChatKit","AssistantsAPI.Assistants","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","FilesAPI.Files","conversationID","itemID","conversation_id","Conversations","ItemsAPI.Items","Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","OutputItems","outputItemID","eval_id","OutputItemsAPI.OutputItems","evalID","Evals","pollInterval","maxWait","TERMINAL_STATES","file","Methods","Alpha","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","permissionID","fine_tuned_model_checkpoint","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","CheckpointsAPI.Checkpoints","FineTuning","MethodsAPI.Methods","JobsAPI.Jobs","AlphaAPI.Alpha","GraderModels","GraderModelsAPI.GraderModels","Images","Models","Moderations","Calls","callID","ClientSecrets","ClientSecretsAPI.ClientSecrets","CallsAPI.Calls","maybeParseResponse","parseTextFormat","addOutputText","getInputToolByName","input_tools","rsp","texts","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","starting_after","maybeEmit","parsedResponse","finalizeResponse","InputItems","responseID","InputTokens","Responses","InputItemsAPI.InputItems","InputTokensAPI.InputTokens","Parts","uploadID","Uploads","PartsAPI.Parts","allSettledWithThrow","promises","rejected","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","files","fileIds","configuredConcurrency","concurrencyLimit","fileIterator","allFileIds","processFiles","fileObj","workers","fileResponse","fileInfo","VectorStores","FileBatchesAPI.FileBatches","Videos","videoID","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","Webhooks","secret","tolerance","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","signatures","decodedSecret","signedPayload","signature","signatureBytes","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","OpenAI","baseURL","apiKey","organization","project","webhookSecret","API.Completions","API.Chat","API.Embeddings","API.Files","API.Images","API.Audio","API.Moderations","API.Models","API.FineTuning","API.Graders","API.VectorStores","API.Webhooks","API.Beta","API.Batches","API.Uploads","API.Responses","API.Realtime","API.Conversations","API.Evals","API.Containers","API.Videos","Errors.OpenAIError","defaultLogLevel","Shims.getDefaultFetch","Opts.FallbackEncoder","qs.stringify","Errors.APIError","defaultBaseURL","defaultQuery","remainingRetries","optionsInput","retriesRemaining","maxRetries","req","timeout","retryLogStr","Errors.APIUserAbortError","headersTime","retryMessage","isTimeout","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","specialHeaders","responseInfo","shouldRetry","Shims.CancelReadableStream","errText","errJSON","errMessage","Pagination.PagePromise","isReadableBody","fetchOptions","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","retryAfterHeader","timeoutSeconds","numRetries","sleepSeconds","jitter","inputOptions","retryCount","bodyHeaders","reqHeaders","idempotencyHeaders","rawHeaders","Shims.ReadableStreamFrom","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","Uploads.toFile","UploadsAPIUploads","SchemaType","ExecutableCodeLanguage","Outcome","POSSIBLE_ROLES","HarmCategory","HarmBlockThreshold","HarmProbability","BlockReason","FinishReason","TaskType","FunctionCallingMode","DynamicRetrievalMode","GoogleGenerativeAIError","GoogleGenerativeAIResponseError","GoogleGenerativeAIFetchError","statusText","errorDetails","GoogleGenerativeAIRequestInputError","GoogleGenerativeAIAbortError","DEFAULT_BASE_URL","DEFAULT_API_VERSION","PACKAGE_VERSION","PACKAGE_LOG_HEADER","Task","RequestUrl","task","requestOptions","apiVersion","getClientHeaders","clientHeaders","getHeaders","customHeaders","headerName","headerValue","constructModelRequest","buildFetchOptions","makeModelRequest","fetchFn","makeRequest","handleResponseError","handleResponseNotOk","addHelpers","hadBadFinishReason","formatBlockErrorMessage","getText","getFunctionCalls","textStrings","functionCalls","badFinishReasons","firstCandidate","__await","__asyncGenerator","_arguments","generator","verb","resume","settle","fulfill","responseLineRE","processStream","inputStream","responseStream","getResponseStream","stream1","stream2","generateResponseSequence","getResponsePromise","allResponses","aggregateResponses","currentText","pump","responses","lastResponse","aggregatedResponse","candidateIndex","newPart","generateContentStream","generateContent","responseJson","formatSystemInstruction","formatNewContent","newParts","partOrString","assignRoleToPartsAndValidateSendMessageRequest","userContent","functionContent","hasUserContent","hasFunctionContent","formatCountTokensInput","modelParams","formattedGenerateContentRequest","containsGenerateContentRequest","formatGenerateContentInput","formattedRequest","formatEmbedContentInput","VALID_PART_FIELDS","VALID_PARTS_PER_ROLE","validateChatHistory","history","prevContent","currContent","countFields","validParts","isValidResponse","SILENT_ERROR","ChatSession","_requestOptions","generateContentRequest","chatSessionRequestOptions","finalResult","responseContent","blockErrorMessage","streamPromise","_ignored","streamResult","countTokens","singleRequestOptions","embedContent","batchEmbedContents","requestsWithModel","GenerativeModel","formattedParams","generativeModelRequestOptions","startChatParams","batchEmbedContentRequest","GoogleGenerativeAI","cachedContent","disallowedDuplicates","modelParamsComp","cachedContentComp","modelParamsFromCache","getGoogleApiKey","secretData","createGoogleGenAIClient","getMimeType","filename","ext","fileToBase64","editImage","prompt","imageFiles","aspectRatio","resolution","enableSearchGrounding","ai","genModel","imageParts","base64Data","textPart","promptParts","generationConfig","imageData","aiText","binaryString","consoleLogger","getOpenAIApiKey","createOpenAIClient","withOpenAI","operation","fallback","getImageMimeType","analyzeImages","imageContents","outputText","title","titleLineIndex","lowerLine","fallbackError","transcribeAudio","audioFile","transcribedText","AI_IMAGE_ANALYSIS_PROMPT","FEED_PAGE_SIZE","DEFAULT_QUICK_ACTIONS","editSchema","z.object","z.boolean","EditImageModal","currentTitle","currentDescription","currentVisible","onUpdateSuccess","isGenerating","setIsGenerating","isRecording","setIsRecording","isTranscribing","setIsTranscribing","mediaRecorderRef","audioChunksRef","loadingCollections","setLoadingCollections","zodResolver","fetchPictureCollections","collectionIds","handleToggleCollection","collectionId","newSet","onSubmit","handleClose","handleMagicGenerate","handleMicrophone","mediaRecorder","audioBlob","trimmed","newDescription","track","Edit3","Bookmark","GitBranch","Sparkles","Loader2","MicOff","Mic","roundNumber","num","decimal","checkIsNumber","handleCallback","easeOut","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","animations","handleCancelAnimationFrame","animation","handleCancelAnimation","contextInstance","handleSetupAnimation","animationName","animationTime","lastStep","frameTime","animationProgress","animationType","isValidTargetState","targetState","positionX","positionY","animate","setTransformState","scaleDiff","positionXDiff","positionYDiff","newScale","newPositionX","newPositionY","getComponentsSizes","wrapperComponent","contentComponent","wrapperWidth","wrapperHeight","contentWidth","contentHeight","newContentWidth","newContentHeight","newDiffWidth","newDiffHeight","getBounds","diffWidth","diffHeight","centerZoomedOut","scaleWidthFactor","scaleHeightFactor","minPositionX","maxPositionX","minPositionY","maxPositionY","calculateBounds","bounds","boundLimiter","minBound","maxBound","isActive","handleCalculateBounds","getMouseBoundedPosition","limitToBounds","paddingValueX","paddingValueY","paddingX","paddingY","handleCalculateZoomPositions","mouseX","mouseY","scaleDifference","calculatedPositionX","calculatedPositionY","newPositions","checkZoomBounds","zoom","minScale","maxScale","zoomPadding","enablePadding","scalePadding","minScaleWithPadding","isPanningStartAllowed","excluded","isInitialized","targetIsShadowDom","isWrapperChild","isAllowed","isExcluded","isExcludedNode","isPanningAllowed","isPanning","setup","handlePanningSetup","handleTouchPanningSetup","touches","oneFingerTouch","handlePanToBounds","xChanged","yChanged","mousePosX","mousePosY","handleNewPosition","getPanningClientPosition","clientX","clientY","startCoords","transformState","panning","lockAxisX","lockAxisY","getPaddingValue","disablePadding","isVelocityCalculationAllowed","velocityAnimation","disabledVelocity","isVelocityAllowed","velocity","getVelocityMoveTime","equalToMove","sensitivity","getVelocityPosition","newPosition","startPosition","currentPosition","isLocked","minPosition","maxPosition","minTarget","maxTarget","calculatedPosition","getSizeMultiplier","defaultMultiplier","handleCalculateVelocity","lastMousePosition","velocityTime","now","sizeMultiplier","distanceX","distanceY","velocityX","velocityY","interval","speed","handleVelocityPanning","alignmentAnimation","zoomAnimation","sizeX","sizeY","velocityAlignmentTime","alignAnimationTime","moveAnimationTime","finalAnimationTime","maxTargetX","minTargetX","maxTargetY","minTargetY","startState","alignAnimation","alignStep","customStep","currentPositionX","currentPositionY","handlePanningStart","handleAlignToBounds","customAnimationTime","isDisabled","handlePanning","handlePanningEnd","velocityDisabled","wrapperRect","contentRect","isZoomed","shouldAnimate","handleZoomToPoint","handleAlignToScaleBounds","mousePositionX","mousePositionY","initialSetup","baseClasses","createState","createSetup","newSetup","validValue","validParameter","dataType","handleCalculateButtonZoom","smooth","targetScale","handleZoomToViewCenter","resetTransformations","onResetTransformation","initialTransformation","newBounds","boundedPositions","newState","wrapper","offset","wrapperOffset","contentOffset","xOff","yOff","calculateZoomToNode","customZoom","nodeRect","nodeOffset","nodeLeft","nodeTop","nodeWidth","nodeHeight","scaleX","scaleY","offsetX","offsetY","zoomIn","zoomOut","setTransform","resetTransform","centerView","getCenterPosition","zoomToElement","getControls","getContext","makePassiveEventOption","matchPrefix","exclude","cancelTimeout","getTransformStyles","centerPositionX","centerPositionY","mergeRefs","isWheelAllowed","wheelDisabled","touchPadDisabled","getDeltaY","getDelta","customDelta","getMousePosition","handleCalculateWheelZoom","disable","getTarget","paddingEnabled","handleWheelZoomStop","previousWheelEvent","isPinchStartAllowed","isPinchAllowed","pinchStartDistance","calculateTouchMidPoint","firstPointX","firstPointY","secondPointX","secondPointY","getTouchDistance","calculatePinchZoom","currentDistance","pinchStartScale","touchProportion","wheelStopEventTime","wheelAnimationTime","handleWheelStart","onWheelStart","onZoomStart","handleWheelZoom","onWheel","onZoom","wheel","smoothStep","zoomStep","mousePosition","isPaddingDisabled","isLimitedToBounds","handleWheelStop","onWheelStop","onZoomStop","hasStoppedZooming","getTouchCenter","totalX","totalY","handlePinchStart","distance","center","handlePinchZoom","midPoint","panX","panY","finalX","finalY","handlePinchStop","pinchMidpoint","handleDoubleClickStop","handleDoubleClickResetMode","getDoubleClickScale","handleDoubleClick","doubleClickStopEventTimer","isDoubleClickAllowed","ZoomPanPinch","_this","newProps","passive","currentDocument","currentWindow","isCentered","centerOnInit","hasTarget","entries_1","currentWidth","currentHeight","keysPressed","onPanningStart","onPanning","onPanningStop","onPinchingStart","onPinching","onPinchingStop","isDoubleTap","isPanningAction","isPinchAction","onTransformed","ctx_1","getContent","TransformWrapper","instance","useImperativeHandle","localRef","styleInject","insertAt","css_248z","TransformComponent","wrapperClass","contentClass","wrapperStyle","contentStyle","wrapperProps","cleanupWindowEvents","wrapperRef","Textarea","RADIO_NAME","createRadioContext","createRadioScope","RadioProvider","useRadioContext","Radio","__scopeRadio","onCheck","radioProps","RadioBubbleInput","RadioIndicator","ARROW_KEYS","RADIO_GROUP_NAME","createRadioGroupContext","createContextScope2","useRadioScope","RadioGroupProvider","useRadioGroupContext","RadioGroup","__scopeRadioGroup","jsx2","Primitive2","RadioGroupItem","radioScope","useComposedRefs2","isArrowKeyPressedRef","handleKeyUp","composeEventHandlers2","INDICATOR_NAME2","RadioGroupIndicator","Item2","Indicator","RadioGroupPrimitive.Root","RadioGroupPrimitive.Item","RadioGroupPrimitive.Indicator","Circle","PublishDialog","onPublish","originalTitle","originalImageId","isPublishing","editingPostId","publishOption","setPublishOption","setTitle","setDescription","loadCollections","toggleCollection","RefreshCw","Upload","sides","round","floor","createCoords","oppositeSideMap","oppositeAlignmentMap","clamp","evaluate","getSide","placement","getAlignment","getOppositeAxis","getAxisLength","yAxisSides","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","lrPlacement","rlPlacement","tbPlacement","btPlacement","getSideList","side","isStart","getOppositeAxisPlacements","flipAlignment","expandPaddingObject","getPaddingObject","rectToClientRect","rect","computeCoordsFromPlacement","_ref","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","computePosition","strategy","validMiddleware","statefulPlacement","middlewareData","resetCount","nextX","nextY","detectOverflow","_await$platform$isEle","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","shouldAddOffset","alignmentOffset","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","placements","overflows","overflowsData","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","resetPlacement","_overflowsData$filter2","currentSideAxis","getSideOffsets","isAnySideFullyClipped","hide","originSides","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","limitShift","rawOffset","computedOffset","limitMin","limitMax","_middlewareData$offse2","isOriginSide","_state$middlewareData","_state$middlewareData2","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","xMin","xMax","yMin","yMax","nextDimensions","hasWindow","getNodeName","isNode","getWindow","_node$ownerDocument","getDocumentElement","isElement","isShadowRoot","invalidOverflowDisplayValues","isOverflowElement","overflowX","overflowY","display","getComputedStyle","tableElements","isTableElement","topLayerSelectors","isTopLayer","selector","transformProperties","willChangeValues","containValues","isContainingBlock","elementOrCss","webkit","isWebKit","getContainingBlock","isLastTraversableNode","lastTraversableNodeNames","getNodeScroll","getNearestOverflowAncestor","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","getComputedStyle$1","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","getWindowScrollBarX","leftScroll","getHTMLOffset","documentElement","scroll","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","SCROLLBAR_MAX","getViewportRect","visualViewport","visualViewportBased","windowScrollbarX","bodyStyles","bodyMarginInline","clippingStableScrollbarWidth","absoluteOrFixed","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","rectsAreEqual","observeMove","onMove","io","_io","refresh","skip","threshold","elementRectForRootMargin","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","ratio","autoUpdate","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset$1","shift$1","flip$1","size$1","hide$1","arrow$1","limitShift$1","mergedOptions","platformWithCache","computePosition$1","isClient","getDPR","roundByDPR","dpr","useLatestRef","useFloating","externalReference","externalFloating","whileElementsMounted","latestMiddleware","setLatestMiddleware","_reference","_setReference","_floating","_setFloating","setReference","referenceRef","setFloating","floatingRef","floatingEl","dataRef","hasWhileElementsMounted","whileElementsMountedRef","platformRef","openRef","fullData","isMountedRef","floatingStyles","initialStyles","isRef","arrow$2","deps","Arrow","arrowProps","POPPER_NAME","createPopperContext","createPopperScope","PopperProvider","usePopperContext","Popper","__scopePopper","anchor","setAnchor","ANCHOR_NAME","PopperAnchor","virtualRef","anchorProps","anchorRef","previousAnchor","PopperContentProvider","useContentContext","PopperContent","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPaddingProp","sticky","hideWhenDetached","updatePositionStrategy","onPlaced","setContent","setArrow","arrowSize","arrowWidth","arrowHeight","desiredPlacement","collisionPadding","hasExplicitBoundaries","isNotNull","isPositioned","anchorWidth","anchorHeight","floatingUIarrow","transformOrigin","placedSide","placedAlign","getSideAndAlignFromPlacement","handlePlaced","arrowX","arrowY","cannotCenterArrow","contentZIndex","setContentZIndex","ARROW_NAME","OPPOSITE_SIDE","PopperArrow","contentContext","baseSide","ArrowPrimitive.Root","isArrowHidden","noArrowAlign","arrowXCenter","arrowYCenter","Anchor","SELECTION_KEYS","FIRST_KEYS","LAST_KEYS","FIRST_LAST_KEYS","SUB_OPEN_KEYS","SUB_CLOSE_KEYS","MENU_NAME","createMenuContext","createMenuScope","usePopperScope","MenuProvider","useMenuContext","MenuRootProvider","useMenuRootContext","Menu","__scopeMenu","popperScope","isUsingKeyboardRef","handleOpenChange","handlePointer","PopperPrimitive.Root","MenuAnchor","PopperPrimitive.Anchor","MenuPortal","MenuContentProvider","useMenuContentContext","MenuContent","rootContext","MenuRootContentModal","MenuRootContentNonModal","MenuContentImpl","disableOutsideScroll","currentItemId","setCurrentItemId","timerRef","searchRef","pointerGraceTimerRef","pointerGraceIntentRef","pointerDirRef","lastPointerXRef","ScrollLockWrapper","scrollLockWrapperProps","handleTypeaheadSearch","search","currentMatch","nextMatch","getNextMatch","newItem","updateSearch","isPointerMovingToSubmenu","isPointerInGraceArea","intent","PopperPrimitive.Content","getOpenState","isKeyDownInside","isModifierKey","isCharacterKey","whenMouse","pointerXHasChanged","newDir","MenuGroup","LABEL_NAME","MenuLabel","labelProps","ITEM_SELECT","MenuItem","isPointerDownRef","menuItem","itemSelectEvent","MenuItemImpl","isTypingAhead","textValue","isFocused","setIsFocused","textContent","setTextContent","CHECKBOX_ITEM_NAME","MenuCheckboxItem","checkboxItemProps","ItemIndicatorProvider","getCheckedState","MenuRadioGroup","handleValueChange","RADIO_ITEM_NAME","MenuRadioItem","radioItemProps","ITEM_INDICATOR_NAME","useItemIndicatorContext","MenuItemIndicator","itemIndicatorProps","indicatorContext","SEPARATOR_NAME","MenuSeparator","separatorProps","MenuArrow","PopperPrimitive.Arrow","SUB_NAME","MenuSubProvider","useMenuSubContext","SUB_TRIGGER_NAME","MenuSubTrigger","subContext","openTimerRef","onPointerGraceIntentChange","clearOpenTimer","pointerGraceTimer","rightSide","bleed","contentNearEdge","contentFarEdge","SUB_CONTENT_NAME","MenuSubContent","subContentProps","isCloseKey","normalizedSearch","char","currentMatchIndex","wrappedValues","isPointInPolygon","point","polygon","ii","jj","xi","yi","xj","yj","area","cursorPos","Root3","Anchor2","Group","CheckboxItem","RadioItem","ItemIndicator","Separator","Arrow2","SubTrigger","SubContent","DROPDOWN_MENU_NAME","createDropdownMenuContext","useMenuScope","DropdownMenuProvider","useDropdownMenuContext","DropdownMenu","__scopeDropdownMenu","menuScope","MenuPrimitive.Root","DropdownMenuTrigger","MenuPrimitive.Anchor","DropdownMenuPortal","MenuPrimitive.Portal","DropdownMenuContent","MenuPrimitive.Content","isRightClick","DropdownMenuGroup","MenuPrimitive.Group","DropdownMenuLabel","MenuPrimitive.Label","DropdownMenuItem","MenuPrimitive.Item","DropdownMenuCheckboxItem","MenuPrimitive.CheckboxItem","DropdownMenuRadioGroup","radioGroupProps","MenuPrimitive.RadioGroup","DropdownMenuRadioItem","MenuPrimitive.RadioItem","DropdownMenuItemIndicator","MenuPrimitive.ItemIndicator","DropdownMenuSeparator","MenuPrimitive.Separator","DropdownMenuArrow","MenuPrimitive.Arrow","DropdownMenuSubTrigger","subTriggerProps","MenuPrimitive.SubTrigger","DropdownMenuSubContent","MenuPrimitive.SubContent","Label2","CheckboxItem2","RadioItem2","ItemIndicator2","Separator2","SubTrigger2","SubContent2","DropdownMenuPrimitive.Root","DropdownMenuPrimitive.Trigger","DropdownMenuPrimitive.SubTrigger","ChevronRight","DropdownMenuPrimitive.SubContent","DropdownMenuPrimitive.Portal","DropdownMenuPrimitive.Content","DropdownMenuPrimitive.Item","DropdownMenuPrimitive.CheckboxItem","DropdownMenuPrimitive.ItemIndicator","DropdownMenuPrimitive.RadioItem","DropdownMenuPrimitive.Label","DropdownMenuPrimitive.Separator","StylePresetSelector","presets","activeId","preset","ImageLightbox","imageTitle","onPromptSubmit","showPrompt","showPublish","generatedImageUrl","totalCount","onNavigate","onPreload","showWizardFeatures","promptTemplates","onApplyTemplate","onSaveTemplate","onDeleteTemplate","onOptimizePrompt","isOptimizing","onMicrophoneToggle","showQuickPublish","onQuickPublish","externalPrompt","onPromptChange","promptHistory","historyIndex","onNavigateHistory","onManualPromptEdit","onOpenInWizard","quickActions","lightboxLoaded","setLightboxLoaded","setIsPanning","setScale","internalPrompt","setInternalPrompt","showPublishDialog","setShowPublishDialog","showPromptField","setShowPromptField","showInfoPopup","setShowInfoPopup","tapTimeoutRef","swipeStartRef","isSwipingRef","isPanningRef","lightboxPrompt","setLightboxPrompt","isTypingInInput","handleSwipeStart","handleSwipeEnd","deltaTime","handlePromptSubmit","handlePublishClick","handlePublish","History","historyPrompt","reverseIndex","actualIndex","ArrowUp","FileText","Plus","Wand2","Save","ArrowDown","createStoreImpl","setState","partial","replace","nextState","previousState","api","createStore","identity","useStore","slice","createImpl","useBoundStore","createJSONStorage","getStorage","storage","str2","toThenable","onFulfilled","_onRejected","_onFulfilled","onRejected","persistImpl","baseOptions","persistedState","currentState","hasHydrated","hydrationVersion","hydrationListeners","finishHydrationListeners","setItem","savedSetState","configResult","stateFromStorage","hydrate","currentVersion","_a2","postRehydrationCallback","deserializedStorageValue","migration","migrationResult","migrated","migratedState","newOptions","persist","preloadImageHelper","img","useNavigationStore","limitedHistory","newHistory","previousData","image","returnPath","selectNavigationData","selectWizardImage","selectWizardReturnPath","useWizardContext","wizardInitialImage","wizardReturnPath","setWizardImage","clearWizardImage","creationWizardOpen","creationWizardMode","setCreationWizardOpen","MagicWizardButton","explicitPostId","explicitPictureId","handleClick","urlPath","postMatch","realPictureId","pictureIdMatch","downloadImage","downloadFromDataUri","defaultFilename","extractFilenameFromUrl","downloadFromUrl","dataUri","pathname","generateFilename","PostNavigationContext","usePostNavigation","formatDate","dateStr","diff","hours","isLikelyFilename","is","objectIs","useDebugValue","useSyncExternalStore$2","getSnapshot","_useState","checkIfSnapshotChanged","latestGetSnapshot","useSyncExternalStore$1","shim","useSyncExternalStoreShim_production","didWarnOld18Alpha","didWarnUncachedGetSnapshot","cachedValue","useSyncExternalStoreShim_development","shimModule","useIsHydrated","useSyncExternalStore","AVATAR_NAME","createAvatarContext","AvatarProvider","useAvatarContext","Avatar","__scopeAvatar","avatarProps","imageLoadingStatus","setImageLoadingStatus","IMAGE_NAME","AvatarImage","onLoadingStatusChange","imageProps","useImageLoadingStatus","handleLoadingStatusChange","FALLBACK_NAME","AvatarFallback","delayMs","fallbackProps","canRender","setCanRender","resolveLoadingStatus","referrerPolicy","crossOrigin","isHydrated","imageRef","loadingStatus","setLoadingStatus","updateStatus","handleLoad","handleError","Image","Fallback","AvatarPrimitive.Root","AvatarPrimitive.Image","AvatarPrimitive.Fallback","ProfilesContext","useProfiles","UserAvatarBlock","userId","avatarUrl","createdAt","showDate","hoverStyle","textSize","profiles","fetchProfile","profile","effectiveAvatarUrl","effectiveDisplayName","nameClass","dateClass","UserIcon","PhotoCard","author","authorId","likes","comments","isLiked","onLike","onDelete","isVid","onEdit","authorAvatarUrl","showContent","responsive","navigationData","setNavigationData","preloadImage","localIsLiked","setLocalIsLiked","localLikes","setLocalLikes","showEditModal","setShowEditModal","showLightbox","setShowLightbox","setIsPublishing","setGeneratedImageUrl","versionCount","setVersionCount","isOwner","handleLike","handleDelete","fetchError","deleteError","userIdFromUrl","storageError","handleDownload","handleLightboxOpen","handleNavigate","newIndex","newPost","handlePreload","targetIndex","targetPost","uint8Array","imageBlob","dataUrl","newTitle","currentImageUrl","uploadError","uploadData","publicUrl","handleCardClick","Heart","MessageCircle","Layers","Download","Maximize","Share2","IS_SERVER","SCOPE","scheduledEffects","runningEffects","currentObserver","currentObservers","currentObserversIndex","effects","NOOP","STATE_CLEAN","STATE_CHECK","STATE_DIRTY","STATE_DISPOSED","flushEffects","runEffects","runTop","updateCheck","dispose","peek","untrack","tick","getScope","scoped","run2","setContext","onDispose","disposable","isFunction$1","disposeNode","emptyDisposal","removeSourceObservers","callable","compute2","prevScope","prevObserver","error2","read","write","ScopeNode","ScopeProto","ComputeNode","ComputeProto","isNotEqual","createComputation","prevObservers","prevObserversIndex","updateObservers","swap","signal2","isReadSignal","computed","effect$1","effect2","effectResult","isWriteSignal","isNull","isNil","serverEffect","EVENT","DOM_EVENT","DOMEvent","EventTriggers","isDOMEvent","returnValue","EventsTarget","listenEvent","EventsController","__privateAdd","_target","_controller","__privateSet","__privateGet","anySignal","reason","signals","onAbort","isPointerEvent","isTouchEvent","isMouseEvent","isKeyboardEvent","wasEnterKeyPressed","isKeyboardClick","isDOMNode","setAttribute","host","setStyle","toggleClass","unwrapDeep","provide","provideContext","hasProvidedValue","hasProvidedContext","PROPS","METHODS","ON_DISPATCH","EMPTY_PROPS","Instance","Component2","_Instance_instances","_setupCallbacks","_attachCallbacks","_connectCallbacks","_destroyCallbacks","stateFactory","prop2","createInstanceProps","__privateMethod","attachAttrs_fn","attachStyles_fn","setAttr_fn","setStyle_fn","$props","currentInstance","createComponent","component","ViewController","$$","vars","propertyKey","descriptor","State","record","_descriptors","store","camelToKebabCase","kebabToCamelCase","kebabToPascalCase","kebabToTitleCase","uppercaseFirstChar","ReactScopeContext","WithScope","useReactScope","useReactContext","createClientComponent","forwardComponent","forwardRef","parentScopeRef","scopeRef","stateRef","state2","createInternalState","initComponent","onAttach","attachToHost","detachFromHost","onRefChange","state3","renderProps","prevPropNames","newPropNames","AttachEffect","eventTypeToCallbackName","onDispatch","callbackProp","isAttr","delimeter","escapeDelimeter","iDelimeter","isAmpersand","SETUP","classSplitRE","parseClassAttr","classes","styleSplitRE","stylesDelimeterRE","parseStyleAttr","MaverickServerElement","ServerAttributes","ServerStyle","ServerClassList","_tokens","attrsToProps","createServerComponent","ServerComponent","useStateContext","useSignal","scheduleReactUpdate","ariaBool","keysOf","deferredPromise","res","rej","waitTimeout","delay","animationFrameThrottle","lastArgs","throttle","requestIdleCallback","waitIdlePeriod","deadline","createReactComponent","moz","document$1","vendor","fscreen","functionThrottle","throttledFn","leading","trailing","cancel","flush","call","throttleWrapper","callNow","functionDebounce","callFirst","debouncedFn","clear","debounceWrapper","t2","e2","n2","o2","t3","t4","l2","r2","e3","r3","i2","s2","d2","h2","a2","g2","p2","W2","T2","B2","F2","V2","Icon$0","Icon$5","Icon$8","Icon$11","Icon$13","Icon$16","Icon$19","Icon$22","Icon$24","chromecast","Icon$26","Icon$27","Icon$31","Icon$33","Icon$34","Icon$35","Icon$39","Icon$40","Icon$53","Icon$54","Icon$56","Icon$59","Icon$60","Icon$61","Icon$62","Icon$63","Icon$74","Icon$77","Icon$81","Icon$88","Icon$104","Icon$105","isVideoQualitySrc","UA","IS_IOS","IS_IPHONE","IS_CHROME","IS_SAFARI","canOrientScreen","canRotateScreen","canPlayAudioType","audio","canPlayVideoType","video","canPlayHLSNatively","canUsePictureInPicture","canUseVideoPresentation","canChangeVolume","getMediaSource","getSourceBuffer","isHLSSupported","MediaSource","isTypeSupported","SourceBuffer","isSourceBufferValid","isDASHSupported","TimeRange","_ranges","getTimeRangesStart","getTimeRangesEnd","normalizeTimeIntervals","intervals","normalized","updateTimeIntervals","AUDIO_EXTENSIONS","AUDIO_TYPES","VIDEO_EXTENSIONS","VIDEO_TYPES","HLS_VIDEO_EXTENSIONS","DASH_VIDEO_EXTENSIONS","HLS_VIDEO_TYPES","DASH_VIDEO_TYPES","isAudioSrc","isVideoSrc","isHLSSrc","isDASHSrc","canGoogleCastSrc","isMediaStream","appendParamsToURL","baseUrl","preconnect","rel","exists","pendingRequests","loadScript","getRequestCredentials","getDownloadFile","download","isValidFileDownload","CROSS_ORIGIN","READY_STATE","UPDATE_ACTIVE_CUES","CAN_LOAD","ON_MODE_CHANGE","NATIVE","NATIVE_HLS","TextTrackSymbol","isCueActive","cue","watchActiveTextTrack","tracks","currentTrack","onModeChange","kinds","track2","off","TextTrack","_TextTrack_instances","_canLoad","_currentTime","_mode","_metadata","_regions","_cues","_activeCues","parseContent_fn","activeCuesChanged_fn","load_fn","currentTime","activeCues","changed","parseText","VTTCue","VTTRegion","parseJSON_fn","ready_fn","cues","regions","metadata","error_fn","native","loadEvent","parseJSONCaptionsFile","captionRE","isTrackCaptionKind","Cue","Region","region","content2","mediaState","RESET_ON_SRC_QUALITY_CHANGE","RESET_ON_SRC_CHANGE","softResetMediaState","$media","isSourceQualityChange","boundTime","clippedTime","isEnd","mediaContext","useMediaContext","MediaRemoteControl","_MediaRemoteControl_instances","_player","_prevTrackIndex","_logger","player","dispatchRequest_fn","lockType","duration","endTime","volume","rate","gain","prefersLoop","noPlayerWarning_fn","LocalMediaStorage","_data","muted","ended","quality","mediaId","playerId","savedData","savedTime","ADD","REMOVE","RESET","SELECT","READONLY","SET_READONLY","ON_RESET","ON_REMOVE","ON_USER_SELECT","ListSymbol","readonly","SELECTED","SelectList","AudioTrackList","decimalPlaces","getNumberOfDecimalPlaces","clampNumber","isEventInside","rafJobs","processJobs","job","scheduleRafJob","setAttributeIfEmpty","setARIALabel","$label","updateAriaDescription","isElementVisible","checkVisibility","observeVisibility","isElementParent","test","onPress","isTouchPinchEvent","requestScopedAnimationFrame","autoPlacement","offsetVarName","xOffset","yOffset","floatingPlacement","isTop","negateX","negateY","hasFlipped","hasAnimation","NativeTextRenderer","_NativeTextRenderer_instances","_display","_video","_track","_tracks","onChange_fn","attachTrack_fn","createTrackElement_fn","isDefault","isSupported","copyCues_fn","isShowing","TextRenderers","media","_TextRenderers_instances","_textTracks","_renderers","_media","_nativeDisplay","_nativeRenderer","_customRenderer","textTracks","watchControls_fn","detach_fn","onAddTrack_fn","onRemoveTrack_fn","update_fn","renderer","addNativeTrack_fn","nativeControls","removeNativeTrack_fn","customRenderer","TextTrackList","_TextTrackList_instances","_defaults","_storage","_preferredLang","_selectTracks","showCaptions","preferredTrack","defaultTrack","kind2","isCaptionsKind","saveCaptionsTrack_fn","_pendingRemoval","_onTrackModeChangeBind","onTrackModeChange_fn","saveLang_fn","isTrack","SET_AUTO","ENABLE_AUTO","QualitySymbol","VideoQualityList","_auto","auto","sortVideoQualities","qualities","compareVideoQualityAsc","isHTMLAudioElement","isHTMLVideoElement","isHTMLMediaElement","MediaPlayerController","MEDIA_KEY_SHORTCUTS","MODIFIER_KEYS","BUTTON_SELECTORS","IGNORE_SELECTORS","MediaKeyboardController","_MediaKeyboardController_instances","_seekTotal","_timeSlider","onTargetChange_fn","keyDisabled","keyTarget","$active","activePlayer","onKeyUp_fn","onKeyDown_fn","onPreventVideoKeys_fn","focusedEl","getMatchingMethod_fn","forwardTimeKeyboardEvent_fn","volumeSlider","isNumberPress","modifierKeyPressed","seeking_fn","playbackRate","keyShortcuts","method2","combinations","replaceSymbolKeys","combo","modifierKeys","modKey","modKeyProp","calcSeekAmount_fn","seekBy","forward","SYMBOL_KEY_MAP","ARIAKeyShortcuts","shortcut","_shortcut","ariaKeys","shortcuts","MediaControls","_MediaControls_instances","_idleTimer","_pausedTracking","_hideOnMouseLeave","_isMouseOutside","_focusedItem","_canIdle","canIdle","hideControlsOnMouseLeave","clearIdleTimer_fn","changeVisibility_fn","init_fn","viewType","watchMouse_fn","watchPaused_fn","onPlay","onPlay_fn","onPause","onPause_fn","onEnd","onEnd_fn","started","pointer","paused","events","shouldHideOnMouseLeave","onStopIdle_fn","onMouseEnter_fn","onMouseLeave_fn","autoPlayError","onStopIdle","isTouch","eventTypes","eventType","visible","CAN_FULLSCREEN","FullscreenController","_FullscreenController_instances","_listening","_active","onError_fn","onDisconnect_fn","isFullscreen","assertFullscreenAPI","_ScreenOrientationController","_ScreenOrientationController_instances","_type","getScreenOrientation_fn","_locked","_currentLock","onOrientationChange_fn","assertScreenOrientationAPI_fn","ScreenOrientationController","AudioProviderLoader","VideoProviderLoader","provider$1","_HLSProviderLoader","HLSProviderLoader","audioContext","gainNodes","elAudioSources","getOrCreateAudioCtx","createGainNode","audioCtx","gainNode","createElementSource","destroyGainNode","idx","freeAudioCtxWhenAllResourcesFreed","destroyElementSource","AudioGain","_AudioGain_instances","_onChange","_gainNode","_srcAudioNode","currGain","destroyGainNode_fn","destroySrcNode_fn","PAGE_EVENTS","PageVisibility","_PageVisibility_instances","determinePageState","_visibility","_safariBeforeUnloadTimeout","handlePageEvent","handlePageEvent_fn","RAFLoop","_RAFLoop_instances","_id","_callback","loop_fn","HTMLMediaEvents","_HTMLMediaEvents_instances","_provider","_waiting","_attachedLoadStart","_attachedCanPlay","_timeRAF","onAnimationFrame_fn","_pageVisibility","_events","_lastSeenTime","_seekedTo","_devHandlers","_handleDevEvent","attachInitialListeners_fn","attachTimeUpdate_fn","onDispose_fn","media_get","newTime","updateCurrentTime_fn","attachEventListener_fn","onLoadStart_fn","onAbort_fn","onEmptied_fn","onVolumeChange_fn","attachLoadStartListeners_fn","onLoadedData_fn","onLoadedMetadata_fn","onCanPlay_fn","onCanPlayThrough_fn","onDurationChange_fn","onProgress_fn","onStalled_fn","onSuspend_fn","onRateChange_fn","attachCanPlayListeners_fn","onPlaying_fn","onSeeked_fn","onSeeking_fn","onEnded_fn","onWaiting_fn","onDevEvent_fn","event2","getCanPlayDetail_fn","isPaused","isPageHidden","onTimeUpdate_fn","NativeAudioTracks","_NativeAudioTracks_instances","nativeTracks_get","onAddNativeTrack_fn","onRemoveNativeTrack_fn","onChangeNativeTrack_fn","onChangeTrack_fn","nativeTrack","audioTrack","enabledTrack","getEnabledNativeTrack_fn","HTMLMediaProvider","_HTMLMediaProvider_instances","inline","preload","appendMediaFragment_fn","defaultType","prevSource","clipStartTime","clipEndTime","HTMLRemotePlaybackAdapter","_HTMLRemotePlaybackAdapter_instances","_supported","setup_fn","available","watchSupported_fn","onStateChange","onStateChange_fn","remoteEvents","HTMLAirPlayAdapter","NativeHLSTextTracks","_NativeHLSTextTracks_instances","findTextTrackElement","onCueChange","VideoPictureInPicture","_VideoPictureInPicture_instances","onEnter_fn","onExit_fn","VideoPresentation","_VideoPresentation_instances","onModeChange_fn","prevMode","FullscreenPresentationAdapter","presentation","_presentation","PIPPresentationAdapter","VideoProvider","getLangName","toDOMEventType","DASHController","_DASHController_instances","_instance","_callbacks","_stopLiveSync","_currentTrack","_cueTracker","_retryLoadingTimer","ctor","dispatcher","dispatchDASHEvent_fn","onFragmentLoadStart_fn","onFragmentLoadComplete_fn","onManifestLoaded_fn","onQualityChange_fn","onTextTracksAdded_fn","onTrackChange_fn","enableAutoQuality_fn","onUserQualityChange_fn","onUserAudioChange_fn","liveSync_fn","reset_fn","createDOMEvent_fn","raf","liveSyncPosition_fn","onTextFragmentLoaded_fn","nativeTextTracks","textTrackInfo","nativeTextTrack","newMediaInfo","mediaPresentationDuration","videoQualities","supportedVideoMimeType","type2","videoQuality","audioTracks","supportedAudioMimeType","bitrate","label2","localTrack","onNetworkError_fn","onFatalError_fn","clearRetryTimer_fn","switchAutoBitrate_fn","selectedTrack","coerceToError","assert","condition","DASHLibLoader","lib","_DASHLibLoader_instances","_lib","startLoading_fn","onLoaded_fn","onLoadError_fn","loadDASHScript","importDASH","loader","isDASHConstructor","isDASHNamespace","JS_DELIVR_CDN","DASHProvider","_ctor","_library","library","_DASHProviderLoader","DASHProviderLoader","VimeoProviderLoader","connections","abort","resolveVimeoVideoId","getVimeoVideoInfo","videoId","hash","YouTubeProviderLoader","findYouTubePoster","resolveYouTubeVideoId","padNumberWithZeroes","expectedLength","actualLength","padLength","parseTime","minutes","seconds","fraction","formatTime","padHrs","padMins","showHrs","showMs","paddedHours","paddedMinutes","paddedSeconds","paddedMs","formatSpokenTime","spokenParts","MEDIA_ATTRIBUTES","mediaAttributes","mediaPlayerProps","MediaLoadController","load","MediaPlayerDelegate","handle","_MediaPlayerDelegate_instances","_handle","autoPlay","canPlay","seekable","buffered","remotePlaybackInfo","playsInline","savedState","savedPlaybackTime","savedPausedState","storageTime","shouldAutoPlay","audioGain","prefQuality","currentQuality","currentScore","score","attemptAutoplay_fn","autoPlaying","attemptEvent","Queue","_queue","RequestQueue","_RequestQueue_instances","_serving","_pending","flush_fn","release_fn","$ariaBool","prefersReducedMotion","MediaRequestManager","stateMgr","_MediaRequestManager_instances","_stateMgr","_request","_fullscreen","_orientation","_$provider","_providerQueue","_wasPIPActive","_googleCastLoader","onFullscreenChange_fn","handleRequest","handleRequest_fn","attachLoadPlayListener_fn","watchProvider_fn","watchControlsDelayChange_fn","watchAudioGainSupport_fn","watchAirPlaySupport_fn","watchGoogleCastSupport_fn","watchFullscreenSupport_fn","watchPiPSupport_fn","destroyEvent","pictureInPicture","fullscreen","handleLoadPlayStrategy_fn","isAutoPlaying","throwIfNotReadyForPlayback","throwIfAutoplayingWithReducedMotion","errorEvent","canSetAudioGain","liveEdge","canSeek","liveSyncPosition","seekableEnd","userBehindLiveEdge","adapter","getFullscreenAdapter_fn","throwIfFullscreenNotSupported","throwIfPIPNotSupported_fn","canGoogleCast","$module","isConnecting","providedDuration","onFullscreenError_fn","onPictureInPictureError_fn","canSetPlaybackRate","seekTime","boundedTime","newVolume","canLoad","supported","canAirPlay","canFullscreen","canPictureInPicture","logError_fn","autoplaying","MediaRequestContext","TRACKED_EVENT","MediaStateManager","_MediaStateManager_instances","_trackedEvents","_clipEnded","_playedIntervals","_playedInterval","_firingWaiting","_waitingTrigger","_isPlayingOnDisconnect","_stopQualityResizeEffect","seeking","realCurrentTime","satisfyRequest_fn","_fireWaiting","waiting","playing","watchCanSetVolume_fn","addTextTrackListeners_fn","addQualityListeners_fn","addAudioTrackListeners_fn","resumePlaybackOnConnect_fn","pausePlaybackOnDisconnect_fn","stopWatchingQualityResize_fn","prevProvider","newProvider","resetMediaState_fn","resetTracking_fn","sourceChangeEvent","providedViewType","currentViewType","streamType","inferredStreamType","remotePlaybackState","remotePlaybackType","isConnected","requestEvent","prevSources","newSources","onSourceQualitiesChange_fn","canLoadEvent","abortEvent","loadStartEvent","loadedMetadata","onCanPlayDetail_fn","intrinsicDuration","onEndPrecisionChange_fn","newBuffered","newSeekable","newBufferedEnd","hasBufferedLengthChanged","hasBufferedEndChanged","newSeekableEnd","hasSeekableLengthChanged","hasSeekableEndChanged","resetPlaybackIfNeeded_fn","waitingEvent","playEvent","seekedEvent","played","updatePlayed_fn","saveTime_fn","seekingEvent","stopWaiting_fn","origin","isPiP","onTextTracksChange_fn","onTextTrackModeChange_fn","onQualitiesChange_fn","onAutoQualityChange_fn","onCanSetQualityChange_fn","onAudioTracksChange_fn","onAudioTrackChange_fn","textTrack","isAuto","watchQualityResize_fn","mediaWidth","mediaHeight","selectedQuality","minScore","canSetVolume","isGoogleCastConnected","added","removed","prevSrc","seekableStart","shouldReset","MediaStateSync","_MediaStateSync_instances","watchMetadata_fn","watchAutoplay_fn","watchClipStartTime_fn","watchClipEndTime_fn","watchCrossOrigin_fn","watchDuration_fn","watchLive_fn","watchLiveEdge_fn","watchLiveTolerance_fn","watchLoop_fn","watchPlaysInline_fn","watchPoster_fn","watchProvidedTypes_fn","watchTitle_fn","providedProps","poster","$state","watchLogLevel_fn","artist","artwork","controls","actions","NavigatorMediaSession","_NavigatorMediaSession_instances","onMetadataChange_fn","onPlaybackStateChange_fn","handleAction","handleAction_fn","$keyboard","FocusVisibleController","_FocusVisibleController_instances","_focused","updateFocusAttr","onPointerEnter_fn","onPointerLeave_fn","onFocus_fn","onBlur_fn","updateHoverAttr","isHovering","_MediaPlayer_instances","_requestMgr","_skipTitleUpdate","setupMediaAttributes_fn","watchCanPlay_fn","watchMuted_fn","watchVolume_fn","watchCurrentTime_fn","watchPlaybackRate_fn","watchStorage_fn","watchOrientation_fn","onFindPlayer_fn","pointerQuery","onPointerChange_fn","resize","onResize_fn","provider_get","props_get","queuePausedUpdate_fn","queueMutedUpdate_fn","queueCurrentTimeUpdate_fn","queueVolumeUpdate_fn","queuePlaybackRateUpdate_fn","providedTitle","isLive","typeText","$attrs","queryList","clampedVolume","queuePlaysInlineUpdate_fn","storageValue","computeMediaId_fn","mediaplayer__proto","MediaPlayer","resolveStreamTypeFromDASHManifest","manifestSrc","requestInit","manifest","resolveStreamTypeFromHLSManifest","renditionURI","resolveHLSRenditionURI","resolveTargetDuration","sourceTypes","SourceSelection","domSources","customLoaders","_SourceSelection_instances","_initialize","_loaders","_domSources","_loader","DASH_LOADER","HLS_LOADER","VIDEO_LOADER","AUDIO_LOADER","YOUTUBE_LOADER","VIMEO_LOADER","EMBED_LOADERS","remoteLoader","loaders","normalizeSrc","loader2","loader3","notifySourceChange_fn","notifyLoaderChange_fn","onSourcesChange_fn","onSourceChange_fn","onSetup_fn","onLoadSource_fn","onLoadPoster_fn","sources","currentSource","newSource","findNewSource_fn","credentials","sources2","newSource2","newLoader","triggerEvent","sourceQuality","isSameSrc","preferNativeHLS","providedPoster","canLoadPoster","src2","inferType","Tracks","domTracks","_Tracks_instances","_domTracks","_prevTracks","onTracksChange_fn","newTracks","oldTrack","newTrack","_MediaProvider_instances","_sources","_loadRafId","onMutation_fn","runLoader_fn","destroyProvider_fn","$provider","mediaprovider__proto","MediaProvider","_MediaAnnouncer_instances","_initializing","_startedSeekingAt","_seekTimer","busy","watchCaptions_fn","watchFullscreen_fn","watchPiP_fn","watchSeeking_fn","watchLabel_fn","setLabel_fn","translate_fn","isSeeking","isForward","spokenTime","word","Controls","_Controls_instances","watchProps_fn","isShowing_fn","hideControls_fn","hideDelay","hideOnMouseLeave","controlsVisible","ControlsGroup","delegate","_Popper_instances","_delegate","_showTimerId","_hideRafId","_stopAnimationEndListener","watchTrigger_fn","cancelShowing_fn","onHide","stop","show","tooltipContext","Tooltip","_Tooltip_instances","_trigger","_content","_showing","showDelay","onShowingChange_fn","attachTrigger_fn","detachTrigger_fn","attachContent_fn","detachContent_fn","tooltipName","TooltipTrigger","_TooltipTrigger_instances","attach_fn","tooltip","getButton_fn","TooltipContent","_TooltipContent_instances","watchPlacement_fn","showing","mainOffset","getTrigger_fn","ToggleButtonController","_ToggleButtonController_instances","isARIAPressed_fn","onMaybePress_fn","onInteraction_fn","ariaBool$1","onPressed_fn","_pressed","togglebutton__proto","ToggleButton","_AirPlayButton_instances","isPressed_fn","onPress_fn","isAirPlayConnected","getState_fn","getDefaultLabel_fn","_GoogleCastButton_instances","_PlayButton_instances","remote","_CaptionButton_instances","isHidden_fn","hasCaptions","_FullscreenButton_instances","isSupported_fn","_MuteButton_instances","$volume","_PIPButton_instances","_SeekButton_instances","seekTo","_LiveButton_instances","sliderState","calcRate","IntersectionObserverController","_IntersectionObserverController_instances","_init","_observer","sliderContext","sliderObserverContext","getClampedValue","getValueFromRate","boundRate","fill","stepRatio","steps","SliderKeyDirection","SliderEventsController","_SliderEventsController_instances","_touch","_touchStartValue","_lastDownKey","_repeatedKeys","_onDocumentPointerMove","updatePointerValue_fn","getPointerValue_fn","attachEventListeners_fn","attachPointerListeners_fn","watchSwipeGesture_fn","onTouchStart_fn","onTouchMove_fn","xDiff","yDiff","isDragging","onStartDragging_fn","hidden","onPointerMove_fn","onPointerDown_fn","onDocumentPointerUp_fn","onDocumentTouchMove_fn","updateValue_fn","dragging","clampedValue","pointerValue","thumbPositionRate","trackBottom","trackHeight","trackLeft","trackWidth","onStopDragging_fn","jumpValue","calcJumpValue_fn","calcNewKeyValue_fn","shiftKey","shiftKeyMultiplier","keyStep","modifiedStep","sliderValueFormatContext","SliderController","_SliderController_instances","_isVisible","_isIntersecting","_updateSliderVars","fillPercent","pointerPercent","watchValue_fn","watchStep_fn","watchDisabled_fn","setupAttrs_fn","onIntersectionChange_fn","watchCSSVars_fn","watchHidden_fn","pointing","getARIADisabled_fn","Slider","_Slider_instances","getARIAValueNow_fn","getARIAValueText_fn","watchMinMax_fn","pending","_ThumbnailsLoader","_ThumbnailsLoader_instances","_src","_crossOrigin","onLoadCues_fn","firstKey","currentKey","processVTTCues_fn","processStoryboard_fn","images","processImages_fn","resolveBaseUrl_fn","resolveURL_fn","board","tileWidth","tileHeight","tile","resolveData_fn","hashProps","hashValues","ThumbnailsLoader","_Thumbnail_instances","_styleResets","isLoading_fn","hasError_fn","watchImg_fn","onFindActiveThumbnail_fn","resize_fn","crossOriginProp","crossOriginState","mediaCrossOrigin","resetStyles_fn","activeThumbnail","activeIndex","activeImage","rootEl","imgEl","thumbnail","maxWidth","maxHeight","minWidth","minHeight","elWidth","elHeight","minRatio","maxRatio","style_fn","SliderThumbnail","Thumbnail","_slider","SliderVideo","_SliderVideo_instances","watchVideo_fn","watchSrc_fn","onSrcChange_fn","onUpdateTime_fn","pointerRate","slidervideo__proto","SliderValue","_format","_text","$format","padHours","padMinutes","showHours","sliderValue","percent","slidervalue__proto","SliderPreview","_updatePlacement","noClamp","updateSliderPreviewPlacement","preview","widthHalf","leftClamp","rightClamp","heightHalf","topClamp","bottomClamp","VolumeSlider","_VolumeSlider_instances","_throttleVolumeChange","isDisabled_fn","getARIAValueMax_fn","onDragValueChange_fn","onValueChange_fn","mediaVolume","AudioGainSlider","_AudioGainSlider_instances","watchAudioGain_fn","onAudioGainChange_fn","SpeedSlider","_SpeedSlider_instances","_throttledSpeedChange","onPlaybackRateChange_fn","roundValue_fn","QualitySlider","_QualitySlider_instances","_sortedQualities","_throttledQualityChange","watchMax_fn","watchQuality_fn","canSetQuality","$supported","bitrateText","$qualities","TimeSlider","_TimeSlider_instances","_dispatchSeeking","_chapter","_playingBeforeDragStart","noSwipeGesture","getValue_fn","getStep_fn","getKeyStep_fn","onDragStart_fn","onDragEnd_fn","formatValue_fn","formatTime_fn","hasChapters_fn","calcBufferedPercent_fn","watchSeekingThrottle_fn","watchPreviewing_fn","bufferedEnd","seek_fn","pauseWhileDragging","percentToTime_fn","timeToPercent_fn","SliderChapters","_SliderChapters_instances","_sliderState","_updateScope","_titleRef","_refs","_$track","_$cues","_activeIndex","_activePointerIndex","_bufferedIndex","_updateBufferedPercent","bufferedPercent","getEndTime_fn","calcPercent_fn","_bufferedPercent","calcMediaBufferedPercent_fn","_onCuesChange","fillGaps_fn","setTrack_fn","watchSource_fn","watch_fn","watchUpdates_fn","watchContainerWidths_fn","watchFillPercent_fn","watchPointerPercent_fn","watchBufferedPercent_fn","remainingWidth","isLiveEdge","prevActiveIndex","currentChapter","currentActiveIndex","findActiveChapterIndex_fn","updateFillPercents_fn","updateFillPercent_fn","chapterPercent","cueStartTime","cueEndTime","startRatio","startPercent","endPercent","chapters","firstCue","currentCue","nextCue","timeDiff","lastCue","endTime2","onCuesChange","watchMediaDuration_fn","findChapterTitleRef_fn","onChapterTitleChange_fn","findParentSlider_fn","slider","sliderchapters__proto","menuContext","scrollIntoView","scrolls","el2","scrollIntoCenter","FOCUSABLE_ELEMENTS_SELECTOR","VALID_KEYS","MenuFocusController","_MenuFocusController_instances","_index","_el","_elements","getFocusableElements_fn","findActiveIndex_fn","focusAt_fn","validateKeyEvent_fn","nextIndex_fn","focusableElements","__defProp","__getOwnPropDesc","__decorateClass","decorators","decorator","idCount","_Menu_instances","_menuId","_menuButtonId","_expanded","_disabled","_parentMenu","_submenus","_menuObserver","_popper","_focus","_isSliderActive","_isTriggerDisabled","_transitionCallbacks","_wasKeyboardExpand","_removeSubmenuBind","removeSubmenu_fn","_isSubmenuOpen","_onSubmenuOpenBind","onSubmenuOpen_fn","_onSubmenuCloseBind","onSubmenuClose_fn","_onResize","_isTransitionActive","closeTarget","getCloseTarget_fn","onExpandedChange_fn","currentIdCount","observeSliders_fn","disable_fn","attachMenuButton_fn","attachMenuItems_fn","attachObserver_fn","disableMenuButton_fn","addSubmenu_fn","watchExpanded_fn","sliderActiveTimer","parentSliderObserver","expanded","isExpanded_fn","updateMenuItemsHidden_fn","onPointerUp_fn","onWindowPointerUp_fn","isMenuItem","isARIADisabled","watchAttrs","onTransition","onResizeTransition_fn","isExpanded","toggleMediaControls_fn","updateFocus_fn","menu","MenuButton","_MenuButton_instances","_menu","_hintEl","watchHintEl_fn","hintEl","menubutton__proto","menuPortalContext","MenuItems","_MenuItems_instances","portal","hide_fn","radioControllerContext","RadioGroupController","_RadioGroupController_instances","_group","_value","_onChangeBind","radio","addRadio_fn","removeRadio_fn","currentRadio","findRadio_fn","newRadio","_RadioGroup_instances","radiogroup__proto","_Radio_instances","_checked","check_fn","addToGroup_fn","onSelect_fn","radio__proto","_Gesture_instances","_presses","_pressTimerId","attachListener_fn","acceptEvent_fn","inBounds_fn","handleEvent_fn","__privateWrapper","isTopLayer_fn","performAction_fn","inBounds","gestures","willTriggerEvent","CaptionsTextRenderer","_CaptionsTextRenderer_instances","_renderer","changeTrack_fn","_Captions_instances","_hideExampleTimer","watchViewType_fn","iOSControls","setupAudioView_fn","setupVideoView_fn","listenToFontStyleChanges_fn","onCueChange_fn","onUpdateTimedNodes_fn","removeExample_fn","renderVTTCueString","displayEl","createCueDisplayElement_fn","cueEl","createCueElement_fn","updateTimedVTTCueNodes","CaptionsRenderer","textRenderer","watchTextDirection_fn","watchMediaTime_fn","onFontStyleChange_fn","hideExample_fn","showExample_fn","_Poster_instances","_prevSrc","watchAlt_fn","onPreconnect_fn","onLoad_fn","defaultPoster","inferredPoster","_Time_instances","_invert","watchTime_fn","shouldInvert_fn","watchRole_fn","watchToggle_fn","onToggle_fn","timeText","getSeconds_fn","$duration","shouldInvert","formattedTime","toggle","MediaPlayerInstance","MediaProviderInstance","MediaAnnouncerInstance","MediaAnnouncer","ControlsInstance","ControlsGroupInstance","ToggleButtonInstance","CaptionButtonInstance","CaptionButton","FullscreenButtonInstance","FullscreenButton","LiveButtonInstance","LiveButton","MuteButtonInstance","MuteButton","PIPButtonInstance","PIPButton","PlayButtonInstance","PlayButton","AirPlayButtonInstance","AirPlayButton","GoogleCastButtonInstance","GoogleCastButton","SeekButtonInstance","SeekButton","TooltipInstance","TooltipTriggerInstance","TooltipContentInstance","SliderInstance","TimeSliderInstance","VolumeSliderInstance","AudioGainSliderInstance","SpeedSliderInstance","QualitySliderInstance","SliderThumbnailInstance","SliderValueInstance","SliderVideoInstance","SliderPreviewInstance","SliderChaptersInstance","MenuInstance","MenuButtonInstance","MenuItemsInstance","MenuItemInstance","RadioGroupInstance","RadioInstance","CaptionsInstance","Captions","GestureInstance","Gesture","PosterInstance","Poster","ThumbnailInstance","TimeInstance","Time","primitives","isRemotionProvider","isRemotionSrc","sliderStateRecord","initialSliderStore","useSliderState","mediaStateRecord","initialMediaStore","useMediaState","AirPlayButtonBridge","PlayButtonBridge","CaptionButtonBridge","FullscreenButtonBridge","MuteButtonBridge","PIPButtonBridge","SeekButtonBridge","LiveButtonBridge","sliderCallbacks","SliderValueBridge","SliderBridge","Root$5","Track","TrackFill","PreviewBridge","Preview","Value","$text","$min","$max","$step","VolumeSliderBridge","Root$4","createVTTCue","ThumbnailBridge","Root$3","Img","$src","$crossOrigin","TimeSliderContext","TimeSliderBridge","Root$2","$chapters","SliderChaptersBridge","Chapters","ChapterTracks","$cues","emptyCue","ChapterTitle","Progress","SliderThumbnailBridge","ThumbnailRoot","VideoBridge","Video","$canLoad","RadioGroupBridge","Root$1","ItemBridge$1","Item$1","MenuBridge","ButtonBridge","shouldPortal","createPortal","ItemsBridge","ItemBridge","GestureBridge","TimeBridge","TimeText","$timeText","useMediaPlayer","useAudioOptions","$audioTracks","getTrackValue$1","useCaptionOptions","$textTracks","captionTracks","getTrackValue","MediaAnnouncerBridge","ControlsBridge","ControlsGroupBridge","TooltipBridge","TriggerBridge","ContentBridge","GoogleCastButtonBridge","QualitySliderBridge","AudioGainSliderBridge","SpeedSliderBridge","$title","useActiveTextCues","setActiveCues","useActiveTextTrack","setTrack","useChapterTitle","$track","defaultText","$chapterTitle","CaptionsBridge","createSignal","createComputed","createEffect","useScoped","useTextCues","setCues","useChapterOptions","$startTime","$endTime","stopProgressEffect","progress","useResizeObserver","useTransitionActive","setIsActive","useMouseEnter","isMouseEnter","setIsMouseEnter","useFocusIn","isFocusIn","setIsFocusIn","useActive","prevMouseEnter","useColorSchemePreference","colorScheme","setColorScheme","useLayoutName","RemotionThumbnail","RemotionSliderThumbnail","DefaultLayoutContext","useDefaultLayoutContext","useDefaultLayoutWord","i18n","useColorSchemeClass","systemColorPreference","createDefaultMediaLayout","smLayoutWhen","renderLayout","Layout","disableTimeSlider","hideQualityBitrate","icons","menuContainer","menuGroup","noAudioGain","audioGains","noGestures","noKeyboardAnimations","noModal","noScrubGesture","playbackRates","seekStep","showMenuDelay","showTooltipDelay","sliderChaptersMinWidth","slots","smallLayoutWhen","thumbnails","$load","$viewType","$streamType","$smallWhen","userPrefersAnnouncements","userPrefersKeyboardAnimations","isMatch","isSmallLayout","isForcedLayout","isLoadLayout","colorSchemeClass","layoutEl","useDefaultAudioLayoutSlots","useDefaultVideoLayoutSlots","slot","slot2","capitalizedName","DefaultAnnouncer","DefaultTooltip","DefaultPlayButton","Icons","playText","pauseText","$paused","$ended","DefaultMuteButton","muteText","unmuteText","$muted","DefaultCaptionButton","captionsText","onText","offText","isOn","DefaultPIPButton","pipText","enterText","exitText","$pip","DefaultFullscreenButton","fullscreenText","$fullscreen","DefaultSeekButton","backward","seekForwardText","seekBackwardText","DefaultAirPlayButton","airPlayText","stateText","Icon","DefaultGoogleCastButton","googleCastText","DefaultLiveButton","$live","liveText","DefaultDownloadButton","downloadText","DefaultCaptions","exampleText","DefaultControlsSpacer","useParentDialogEl","$layoutEl","DefaultChaptersMenu","portalClass","chaptersText","$offset","$RemotionThumbnail","setIsOpen","dialogEl","onOpen","flushSync","startTimeText","durationText","setProgressVar","FONT_COLOR_OPTION","FONT_FAMILY_OPTION","FONT_SIZE_OPTION","FONT_OPACITY_OPTION","FONT_TEXT_SHADOW_OPTION","FONT_DEFAULTS","FONT_SIGNALS","onFontReset","hexToRgb","hex","isWatchingVars","players","updateFontCssVars","useMediaContext$1","$value","varName","storageKey","isDefaultVarValue","varValue","getCssVarValue","player2","fontVariant","getFontFamilyCSSVarValue","percentToRatio","getTextShadowCssVarValue","DefaultMenuSection","DefaultMenuButton","hint","DefaultMenuItem","DefaultMenuRadioGroup","createRadioOptions","DefaultMenuSliderItem","UpIcon","DownIcon","isMin","isMax","hasTitle","DefaultSliderParts","DefaultSliderSteps","DefaultFontMenu","$hasCaptions","fontSectionLabel","textSectionLabel","textBgSectionLabel","displayBgSectionLabel","DefaultFontFamilyMenu","DefaultFontSizeSlider","DefaultTextColorInput","DefaultTextShadowMenu","DefaultTextOpacitySlider","DefaultTextBgInput","DefaultTextBgOpacitySlider","DefaultDisplayBgInput","DefaultDisplayBgOpacitySlider","DefaultResetMenuItem","DefaultFontSetting","$currentValue","translatedLabel","onColorChange2","onSliderValueChange2","upIcon","downIcon","DefaultFontRadioGroup","radioOptions","resetText","DefaultMenuCheckbox","isChecked","setIsChecked","savedValue","checked2","toggledCheck","onActive","DefaultAccessibilityMenu","DefaultAnnouncementsMenuCheckbox","DefaultKeyboardAnimationsMenuCheckbox","DefaultAudioMenu","$canSetAudioGain","hasGainSlider","DefaultAudioTracksMenu","DefaultAudioBoostMenuSection","$audioGain","$disabled","useGainMin","useGainMax","DefaultAudioGainSlider","useGainStep","DefaultCaptionMenu","DefaultPlaybackMenu","DefaultLoopMenuCheckbox","DefaultSpeedMenuSection","DefaultQualityMenuSection","DefaultAutoQualityMenuCheckbox","$autoQuality","$canSetQuality","$quality","autoText","sortedQualities","DefaultQualitySlider","Root$7","$playbackRate","$canSetPlaybackRate","normalText","useSpeedMin","useSpeedMax","DefaultSpeedSlider","rates","useSpeedStep","Root$6","DefaultSettingsMenu","settingsText","DefaultVolumePopup","$pointer","$canSetVolume","setRootEl","isRootActive","muteButton","DefaultVolumeSlider","Root$8","DefaultTimeSlider","setInstance","setWidth","$RemotionSliderThumbnail","onResize","Root$9","DefaultTimeGroup","DefaultTimeInfo","DefaultTimeInvert","AudioLayout","Root$a","DefaultAudioTitle","DefaultAudioMenus","isTextOverflowing","setIsTextOverflowing","isContinued","chapterTitle","$isContinued","isTransitionActive","isOverflowing","AudioTitle","DefaultKeyboardDisplay","setVisible","setIcon","setCount","$lastKeyboardAction","actionDataAttr","$$text","Icon2","getIcon","getVolumeText","DefaultTitle","$started","ChapterTitle$1","MediaLayout","VideoLayout","DefaultVideoLayout","DefaultVideoLoadLayout","DefaultBufferingIndicator","DefaultVideoSmallLayout","DefaultVideoLargeLayout","baseSlots","DefaultVideoGestures","DefaultVideoKeyboardDisplay","DefaultVideoMenus","DefaultVideoStartDuration","Root$b","Track$1","TrackFill$1","$userPrefersKeyboardAnimations","restProps","createIcon","DefaultLayoutIcon","defaultLayoutIcons","EditVideoModal","fetchVideoCollections","handleCollectionToggle","newSelected","updateError","collectionInserts","collectionError","transcription","currentDesc","MEDIA_TYPES","normalizeMediaType","isVideoType","detectMediaType","meta","DEFAULT_AUDIO_GAINS","AudioGainRadioGroup","_AudioGainRadioGroup_instances","gains","watchHintText_fn","watchControllerDisabled_fn","normalLabel","audiogainradiogroup__proto","playerCallbacks","MediaPlayerBridge","MediaProviderBridge","iframeProps","mediaProps","reactLoaders","Loader","MediaOutlet","$$provider","$$providerSetup","$sources","$nativeControls","$poster","$loader","$providerSetup","$remoteInfo","$mediaType","isAudioView","isYouTubeEmbed","isVimeoEmbed","isEmbed","isRemotion","isGoogleCast","googleCastIconPaths","setGoogleCastIconPaths","hasMounted","setHasMounted","vidstackCZgUA94N","mod","ToggleButtonBridge","PosterBridge","PosterImg","$alt","$hidden","Text","activeCue","setActiveCue","VideoCard","videoUrl","thumbnailUrl","maxResolution","showPlayButton","created_at","useLocation","isPlaying","setIsPlaying","processingStatus","setProcessingStatus","setProgress","videoMeta","setVideoMeta","isInternalVideo","posterUrl","playbackUrl","urlObj","jobId","eventSource","sseUrl","handleCancelProcessing","handleStopVideo","handlePlayClick","getYouTubeVideoId","regExp","getTikTokVideoId","PageCard","tikTokId","ytId","isExternalVideo","Play","normalizedType","updateCurrentIndex","OrganizationContext","useOrganization","FeedCacheContext","useFeedCache","useFeedData","supabaseClient","getCache","saveCache","setPosts","setPage","hasMore","setHasMore","isFetchingMore","setIsFetchingMore","fetchProfiles","mountedWithCache","currentCache","loadFeed","currentPage","isLoadMore","fetchedPosts","db.fetchFeedPostsPaginated","augmentedPosts","db.augmentFeedPosts","postsWithUpdatedCovers","updatePostCovers","combined","sortFeedPosts","userIds","loadMore","nextPage","newCover","sorted","likesA","likesB","latestPicDateA","MediaGrid","customPictures","customLoading","navigationSource","navigationSourceId","onFilesDrop","showVideos","mediaItems","setMediaItems","userLikes","setUserLikes","setIsDragging","dragLeaveTimeoutRef","feedPosts","feedLoading","observerTarget","finalMedia","db.mapFeedPostsToMediaItems","navData","hasRestoredScroll","lastScrollY","fetchMediaFromPicturesTable","fetchUserLikes","targetIds","likesData","handleMediaClick","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleEditPost","postId","toastId","wizardImages","hasItems","UploadCloud","itemType","isVideo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASa,MAAIA,IAAEC,IAAiBC,IAAE,OAAO,IAAI,eAAe,GAAEC,IAAE,OAAO,IAAI,gBAAgB,GAAEC,IAAE,OAAO,UAAU,gBAAeC,IAAEL,EAAE,mDAAmD,mBAAkBM,IAAE,EAAC,KAAI,IAAG,KAAI,IAAG,QAAO,IAAG,UAAS,GAAE;AAClP,WAASC,EAAEC,GAAEC,GAAEC,GAAE;AAAC,QAAIC,GAAEC,IAAE,CAAA,GAAGC,IAAE,MAAKC,IAAE;AAAK,IAASJ,MAAT,WAAaG,IAAE,KAAGH,IAAYD,EAAE,QAAX,WAAiBI,IAAE,KAAGJ,EAAE,MAAcA,EAAE,QAAX,WAAiBK,IAAEL,EAAE;AAAK,SAAIE,KAAKF,EAAE,CAAAL,EAAE,KAAKK,GAAEE,CAAC,KAAG,CAACL,EAAE,eAAeK,CAAC,MAAIC,EAAED,CAAC,IAAEF,EAAEE,CAAC;AAAG,QAAGH,KAAGA,EAAE,aAAa,MAAIG,KAAKF,IAAED,EAAE,cAAaC,EAAE,CAASG,EAAED,CAAC,MAAZ,WAAgBC,EAAED,CAAC,IAAEF,EAAEE,CAAC;AAAG,WAAM,EAAC,UAAST,GAAE,MAAKM,GAAE,KAAIK,GAAE,KAAIC,GAAE,OAAMF,GAAE,QAAOP,EAAE,QAAO;AAAA,EAAC;AAAC,SAAAU,cAAiBZ,GAAEY,GAAA,MAAYR,GAAEQ,GAAA,OAAaR;;;;;;;;;;;;;;wBCEtW,QAAQ,IAAI,aAAa,gBAC1B,WAAW;AAGd,QAAIS,IAAQf,IAMRgB,IAAqB,OAAO,IAAI,eAAe,GAC/CC,IAAoB,OAAO,IAAI,cAAc,GAC7CC,IAAsB,OAAO,IAAI,gBAAgB,GACjDC,IAAyB,OAAO,IAAI,mBAAmB,GACvDC,IAAsB,OAAO,IAAI,gBAAgB,GACjDC,IAAsB,OAAO,IAAI,gBAAgB,GACjDC,IAAqB,OAAO,IAAI,eAAe,GAC/CC,IAAyB,OAAO,IAAI,mBAAmB,GACvDC,IAAsB,OAAO,IAAI,gBAAgB,GACjDC,IAA2B,OAAO,IAAI,qBAAqB,GAC3DC,IAAkB,OAAO,IAAI,YAAY,GACzCC,IAAkB,OAAO,IAAI,YAAY,GACzCC,IAAuB,OAAO,IAAI,iBAAiB,GACnDC,IAAwB,OAAO,UAC/BC,IAAuB;AAC3B,aAASC,EAAcC,GAAe;AACpC,UAAIA,MAAkB,QAAQ,OAAOA,KAAkB;AACrD,eAAO;AAGT,UAAIC,KAAgBJ,KAAyBG,EAAcH,CAAqB,KAAKG,EAAcF,CAAoB;AAEvH,aAAI,OAAOG,MAAkB,aACpBA,KAGF;AAAA,IACT;AAEA,QAAIC,IAAuBnB,EAAM;AAEjC,aAASoB,EAAMC,GAAQ;AAEnB;AACE,iBAASC,KAAQ,UAAU,QAAQC,KAAO,IAAI,MAAMD,KAAQ,IAAIA,KAAQ,IAAI,CAAC,GAAGE,KAAQ,GAAGA,KAAQF,IAAOE;AACxG,UAAAD,GAAKC,KAAQ,CAAC,IAAI,UAAUA,EAAK;AAGnC,QAAAC,EAAa,SAASJ,GAAQE,EAAI;AAAA,MACxC;AAAA,IAEA;AAEA,aAASE,EAAaC,GAAOL,IAAQE,IAAM;AAGzC;AACE,YAAII,KAAyBR,EAAqB,wBAC9CS,KAAQD,GAAuB,iBAAgB;AAEnD,QAAIC,OAAU,OACZP,MAAU,MACVE,KAAOA,GAAK,OAAO,CAACK,EAAK,CAAC;AAI5B,YAAIC,KAAiBN,GAAK,IAAI,SAAUO,IAAM;AAC5C,iBAAO,OAAOA,EAAI;AAAA,QACxB,CAAK;AAED,QAAAD,GAAe,QAAQ,cAAcR,EAAM,GAI3C,SAAS,UAAU,MAAM,KAAK,QAAQK,CAAK,GAAG,SAASG,EAAc;AAAA,MACzE;AAAA,IACA;AAIA,QAAIE,IAAiB,IACjBC,IAAqB,IACrBC,IAA0B,IAE1BC,IAAqB,IAIrBC,IAAqB,IAErBC;AAGF,IAAAA,IAAyB,OAAO,IAAI,wBAAwB;AAG9D,aAASC,EAAmBC,GAAM;AAUhC,aATI,UAAOA,KAAS,YAAY,OAAOA,KAAS,cAK5CA,MAASnC,KAAuBmC,MAASjC,KAAuB8B,KAAuBG,MAASlC,KAA0BkC,MAAS7B,KAAuB6B,MAAS5B,KAA4BwB,KAAuBI,MAASzB,KAAwBkB,KAAmBC,KAAuBC,KAIjS,OAAOK,KAAS,YAAYA,MAAS,SACnCA,EAAK,aAAa1B,KAAmB0B,EAAK,aAAa3B,KAAmB2B,EAAK,aAAahC,KAAuBgC,EAAK,aAAa/B,KAAsB+B,EAAK,aAAa9B;AAAA;AAAA;AAAA;AAAA,MAIjL8B,EAAK,aAAaF,KAA0BE,EAAK,gBAAgB;AAAA,IAMrE;AAEA,aAASC,EAAeC,GAAWC,IAAWC,IAAa;AACzD,UAAIC,KAAcH,EAAU;AAE5B,UAAIG;AACF,eAAOA;AAGT,UAAIC,KAAeH,GAAU,eAAeA,GAAU,QAAQ;AAC9D,aAAOG,OAAiB,KAAKF,KAAc,MAAME,KAAe,MAAMF;AAAA,IACxE;AAGA,aAASG,EAAeP,GAAM;AAC5B,aAAOA,EAAK,eAAe;AAAA,IAC7B;AAGA,aAASQ,EAAyBR,GAAM;AACtC,UAAIA,KAAQ;AAEV,eAAO;AAST,UALM,OAAOA,EAAK,OAAQ,YACtBlB,EAAM,mHAAwH,GAI9H,OAAOkB,KAAS;AAClB,eAAOA,EAAK,eAAeA,EAAK,QAAQ;AAG1C,UAAI,OAAOA,KAAS;AAClB,eAAOA;AAGT,cAAQA,GAAI;AAAA,QACV,KAAKnC;AACH,iBAAO;AAAA,QAET,KAAKD;AACH,iBAAO;AAAA,QAET,KAAKG;AACH,iBAAO;AAAA,QAET,KAAKD;AACH,iBAAO;AAAA,QAET,KAAKK;AACH,iBAAO;AAAA,QAET,KAAKC;AACH,iBAAO;AAAA;AAIX,UAAI,OAAO4B,KAAS;AAClB,gBAAQA,EAAK,UAAQ;AAAA,UACnB,KAAK/B;AACH,gBAAIwC,KAAUT;AACd,mBAAOO,EAAeE,EAAO,IAAI;AAAA,UAEnC,KAAKzC;AACH,gBAAI0C,KAAWV;AACf,mBAAOO,EAAeG,GAAS,QAAQ,IAAI;AAAA,UAE7C,KAAKxC;AACH,mBAAO+B,EAAeD,GAAMA,EAAK,QAAQ,YAAY;AAAA,UAEvD,KAAK3B;AACH,gBAAIsC,KAAYX,EAAK,eAAe;AAEpC,mBAAIW,OAAc,OACTA,KAGFH,EAAyBR,EAAK,IAAI,KAAK;AAAA,UAEhD,KAAK1B,GACH;AACE,gBAAIsC,KAAgBZ,GAChBa,KAAUD,GAAc,UACxBE,KAAOF,GAAc;AAEzB,gBAAI;AACF,qBAAOJ,EAAyBM,GAAKD,EAAO,CAAC;AAAA,YACzD,QAAsB;AACV,qBAAO;AAAA,YACnB;AAAA,UACA;AAAA;AAME,aAAO;AAAA,IACT;AAEA,QAAIE,IAAS,OAAO,QAMhBC,IAAgB,GAChBC,GACAC,GACAC,GACAC,GACAC,GACAC,IACAC;AAEJ,aAASC,KAAc;AAAA,IAAA;AAEvB,IAAAA,GAAY,qBAAqB;AACjC,aAASC,KAAc;AACrB;AACE,YAAIT,MAAkB,GAAG;AAEvB,UAAAC,IAAU,QAAQ,KAClBC,IAAW,QAAQ,MACnBC,IAAW,QAAQ,MACnBC,IAAY,QAAQ,OACpBC,IAAY,QAAQ,OACpBC,KAAqB,QAAQ,gBAC7BC,KAAe,QAAQ;AAEvB,cAAIG,IAAQ;AAAA,YACV,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,OAAOF;AAAA,YACP,UAAU;AAAA,UAClB;AAEM,iBAAO,iBAAiB,SAAS;AAAA,YAC/B,MAAME;AAAA,YACN,KAAKA;AAAA,YACL,MAAMA;AAAA,YACN,OAAOA;AAAA,YACP,OAAOA;AAAA,YACP,gBAAgBA;AAAA,YAChB,UAAUA;AAAA,UAClB,CAAO;AAAA,QAEP;AAEI,QAAAV;AAAA,MACJ;AAAA,IACA;AACA,aAASW,KAAe;AACtB;AAGE,YAFAX,KAEIA,MAAkB,GAAG;AAEvB,cAAIU,IAAQ;AAAA,YACV,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,UAAU;AAAA,UAClB;AAEM,iBAAO,iBAAiB,SAAS;AAAA,YAC/B,KAAKX,EAAO,CAAA,GAAIW,GAAO;AAAA,cACrB,OAAOT;AAAA,YACjB,CAAS;AAAA,YACD,MAAMF,EAAO,CAAA,GAAIW,GAAO;AAAA,cACtB,OAAOR;AAAA,YACjB,CAAS;AAAA,YACD,MAAMH,EAAO,CAAA,GAAIW,GAAO;AAAA,cACtB,OAAOP;AAAA,YACjB,CAAS;AAAA,YACD,OAAOJ,EAAO,CAAA,GAAIW,GAAO;AAAA,cACvB,OAAON;AAAA,YACjB,CAAS;AAAA,YACD,OAAOL,EAAO,CAAA,GAAIW,GAAO;AAAA,cACvB,OAAOL;AAAA,YACjB,CAAS;AAAA,YACD,gBAAgBN,EAAO,CAAA,GAAIW,GAAO;AAAA,cAChC,OAAOJ;AAAA,YACjB,CAAS;AAAA,YACD,UAAUP,EAAO,CAAA,GAAIW,GAAO;AAAA,cAC1B,OAAOH;AAAA,YACjB,CAAS;AAAA,UACT,CAAO;AAAA,QAEP;AAEI,QAAIP,IAAgB,KAClBlC,EAAM,8EAAmF;AAAA,MAE/F;AAAA,IACA;AAEA,QAAI8C,KAAyB/C,EAAqB,wBAC9CgD;AACJ,aAASC,GAA8BC,GAAMC,IAAQC,IAAS;AAC5D;AACE,YAAIJ,OAAW;AAEb,cAAI;AACF,kBAAM,MAAK;AAAA,UACnB,SAAeK,IAAG;AACV,gBAAIC,KAAQD,GAAE,MAAM,KAAI,EAAG,MAAM,cAAc;AAC/C,YAAAL,KAASM,MAASA,GAAM,CAAC,KAAK;AAAA,UACtC;AAII,eAAO;AAAA,IAAON,KAASE;AAAA,MAC3B;AAAA,IACA;AACA,QAAIK,KAAU,IACVC;AAEJ;AACE,UAAIC,KAAkB,OAAO,WAAY,aAAa,UAAU;AAChE,MAAAD,KAAsB,IAAIC,GAAe;AAAA,IAC3C;AAEA,aAASC,GAA6BC,GAAIC,IAAW;AAEnD,UAAK,CAACD,KAAMJ;AACV,eAAO;AAGT;AACE,YAAIM,KAAQL,GAAoB,IAAIG,CAAE;AAEtC,YAAIE,OAAU;AACZ,iBAAOA;AAAA,MAEb;AAEE,UAAIC;AACJ,MAAAP,KAAU;AACV,UAAIQ,KAA4B,MAAM;AAEtC,YAAM,oBAAoB;AAC1B,UAAIC;AAGF,MAAAA,KAAqBjB,GAAuB,SAG5CA,GAAuB,UAAU,MACjCH,GAAW;AAGb,UAAI;AAEF,YAAIgB,IAAW;AAEb,cAAIK,KAAO,WAAY;AACrB,kBAAM,MAAK;AAAA,UACnB;AAWM,cARA,OAAO,eAAeA,GAAK,WAAW,SAAS;AAAA,YAC7C,KAAK,WAAY;AAGf,oBAAM,MAAK;AAAA,YACrB;AAAA,UACA,CAAO,GAEG,OAAO,WAAY,YAAY,QAAQ,WAAW;AAGpD,gBAAI;AACF,sBAAQ,UAAUA,IAAM,EAAE;AAAA,YACpC,SAAiBZ,IAAG;AACV,cAAAS,KAAUT;AAAA,YACpB;AAEQ,oBAAQ,UAAUM,GAAI,CAAA,GAAIM,EAAI;AAAA,UACtC,OAAa;AACL,gBAAI;AACF,cAAAA,GAAK,KAAI;AAAA,YACnB,SAAiBZ,IAAG;AACV,cAAAS,KAAUT;AAAA,YACpB;AAEQ,YAAAM,EAAG,KAAKM,GAAK,SAAS;AAAA,UAC9B;AAAA,QACA,OAAW;AACL,cAAI;AACF,kBAAM,MAAK;AAAA,UACnB,SAAeZ,IAAG;AACV,YAAAS,KAAUT;AAAA,UAClB;AAEM,UAAAM,EAAE;AAAA,QACR;AAAA,MACA,SAAWO,IAAQ;AAEf,YAAIA,MAAUJ,MAAW,OAAOI,GAAO,SAAU,UAAU;AAQzD,mBALIC,KAAcD,GAAO,MAAM,MAAM;AAAA,CAAI,GACrCE,KAAeN,GAAQ,MAAM,MAAM;AAAA,CAAI,GACvCO,KAAIF,GAAY,SAAS,GACzB9F,IAAI+F,GAAa,SAAS,GAEvBC,MAAK,KAAKhG,KAAK,KAAK8F,GAAYE,EAAC,MAAMD,GAAa/F,CAAC;AAO1D,YAAAA;AAGF,iBAAOgG,MAAK,KAAKhG,KAAK,GAAGgG,MAAKhG;AAG5B,gBAAI8F,GAAYE,EAAC,MAAMD,GAAa/F,CAAC,GAAG;AAMtC,kBAAIgG,OAAM,KAAKhG,MAAM;AACnB;AAKE,sBAJAgG,MACAhG,KAGIA,IAAI,KAAK8F,GAAYE,EAAC,MAAMD,GAAa/F,CAAC,GAAG;AAE/C,wBAAIiG,KAAS;AAAA,IAAOH,GAAYE,EAAC,EAAE,QAAQ,YAAY,MAAM;AAK7D,2BAAIV,EAAG,eAAeW,GAAO,SAAS,aAAa,MACjDA,KAASA,GAAO,QAAQ,eAAeX,EAAG,WAAW,IAIjD,OAAOA,KAAO,cAChBH,GAAoB,IAAIG,GAAIW,EAAM,GAK/BA;AAAA,kBACvB;AAAA,uBACqBD,MAAK,KAAKhG,KAAK;AAG1B;AAAA,YACV;AAAA,QAEA;AAAA,MACA,UAAG;AACC,QAAAkF,KAAU,IAGRR,GAAuB,UAAUiB,IACjClB,GAAY,GAGd,MAAM,oBAAoBiB;AAAA,MAC9B;AAGE,UAAIb,KAAOS,IAAKA,EAAG,eAAeA,EAAG,OAAO,IACxCY,KAAiBrB,KAAOD,GAA8BC,EAAI,IAAI;AAGhE,aAAI,OAAOS,KAAO,cAChBH,GAAoB,IAAIG,GAAIY,EAAc,GAIvCA;AAAA,IACT;AACA,aAASC,GAA+Bb,GAAIR,IAAQC,IAAS;AAEzD,aAAOM,GAA6BC,GAAI,EAAK;AAAA,IAEjD;AAEA,aAASc,GAAgBC,GAAW;AAClC,UAAIC,KAAYD,EAAU;AAC1B,aAAO,CAAC,EAAEC,MAAaA,GAAU;AAAA,IACnC;AAEA,aAASC,GAAqCzD,GAAMgC,IAAQC,IAAS;AAEnE,UAAIjC,KAAQ;AACV,eAAO;AAGT,UAAI,OAAOA,KAAS;AAEhB,eAAOuC,GAA6BvC,GAAMsD,GAAgBtD,CAAI,CAAC;AAInE,UAAI,OAAOA,KAAS;AAClB,eAAO8B,GAA8B9B,CAAI;AAG3C,cAAQA,GAAI;AAAA,QACV,KAAK7B;AACH,iBAAO2D,GAA8B,UAAU;AAAA,QAEjD,KAAK1D;AACH,iBAAO0D,GAA8B,cAAc;AAAA;AAGvD,UAAI,OAAO9B,KAAS;AAClB,gBAAQA,EAAK,UAAQ;AAAA,UACnB,KAAK9B;AACH,mBAAOmF,GAA+BrD,EAAK,MAAM;AAAA,UAEnD,KAAK3B;AAEH,mBAAOoF,GAAqCzD,EAAK,MAAMgC,IAAQC,EAAO;AAAA,UAExE,KAAK3D,GACH;AACE,gBAAIsC,KAAgBZ,GAChBa,KAAUD,GAAc,UACxBE,KAAOF,GAAc;AAEzB,gBAAI;AAEF,qBAAO6C,GAAqC3C,GAAKD,EAAO,GAAGmB,IAAQC,EAAO;AAAA,YACtF,QAAsB;AAAA,YAAA;AAAA,UACtB;AAAA;AAIE,aAAO;AAAA,IACT;AAEA,QAAIyB,KAAiB,OAAO,UAAU,gBAElCC,KAAqB,CAAA,GACrBtE,KAAyBR,EAAqB;AAElD,aAAS+E,GAA8BC,GAAS;AAE5C,UAAIA,GAAS;AACX,YAAIC,KAAQD,EAAQ,QAChBvE,KAAQmE,GAAqCI,EAAQ,MAAMA,EAAQ,SAASC,KAAQA,GAAM,OAAO,IAAI;AACzG,QAAAzE,GAAuB,mBAAmBC,EAAK;AAAA,MACrD;AACM,QAAAD,GAAuB,mBAAmB,IAAI;AAAA,IAGpD;AAEA,aAAS0E,GAAeC,GAAWC,IAAQC,IAAUC,IAAeN,IAAS;AAC3E;AAEE,YAAIO,KAAM,SAAS,KAAK,KAAKV,EAAc;AAE3C,iBAASW,MAAgBL;AACvB,cAAII,GAAIJ,GAAWK,EAAY,GAAG;AAChC,gBAAIC,KAAU;AAId,gBAAI;AAGF,kBAAI,OAAON,EAAUK,EAAY,KAAM,YAAY;AAEjD,oBAAIE,KAAM,OAAOJ,MAAiB,iBAAiB,OAAOD,KAAW,YAAYG,KAAe,+FAAoG,OAAOL,EAAUK,EAAY,IAAI,iGAAsG;AAC3U,sBAAAE,GAAI,OAAO,uBACLA;AAAA,cAClB;AAEU,cAAAD,KAAUN,EAAUK,EAAY,EAAEJ,IAAQI,IAAcF,IAAeD,IAAU,MAAM,8CAA8C;AAAA,YAC/I,SAAiBM,IAAI;AACX,cAAAF,KAAUE;AAAA,YACpB;AAEQ,YAAIF,MAAW,EAAEA,cAAmB,WAClCV,GAA8BC,EAAO,GAErC/E,EAAM,4RAAqTqF,MAAiB,eAAeD,IAAUG,IAAc,OAAOC,EAAO,GAEjYV,GAA8B,IAAI,IAGhCU,cAAmB,SAAS,EAAEA,GAAQ,WAAWX,QAGnDA,GAAmBW,GAAQ,OAAO,IAAI,IACtCV,GAA8BC,EAAO,GAErC/E,EAAM,sBAAsBoF,IAAUI,GAAQ,OAAO,GAErDV,GAA8B,IAAI;AAAA,UAE5C;AAAA,MAEA;AAAA,IACA;AAEA,QAAIa,IAAc,MAAM;AAExB,aAASC,EAAQvH,GAAG;AAClB,aAAOsH,EAAYtH,CAAC;AAAA,IACtB;AAYA,aAASwH,EAASC,GAAO;AACvB;AAEE,YAAIC,KAAiB,OAAO,UAAW,cAAc,OAAO,aACxD7E,KAAO6E,MAAkBD,EAAM,OAAO,WAAW,KAAKA,EAAM,YAAY,QAAQ;AACpF,eAAO5E;AAAA,MACX;AAAA,IACA;AAGA,aAAS8E,GAAkBF,GAAO;AAE9B,UAAI;AACF,eAAAG,EAAmBH,CAAK,GACjB;AAAA,MACb,QAAgB;AACV,eAAO;AAAA,MACb;AAAA,IAEA;AAEA,aAASG,EAAmBH,GAAO;AAwBjC,aAAO,KAAKA;AAAA,IACd;AACA,aAASI,EAAuBJ,GAAO;AAEnC,UAAIE,GAAkBF,CAAK;AACzB,eAAA9F,EAAM,mHAAwH6F,EAASC,CAAK,CAAC,GAEtIG,EAAmBH,CAAK;AAAA,IAGrC;AAEA,QAAIK,KAAoBpG,EAAqB,mBACzCqG,KAAiB;AAAA,MACnB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,UAAU;AAAA,IACZ,GACIC,IACAC;AAOJ,aAASC,GAAYC,GAAQ;AAEzB,UAAI5B,GAAe,KAAK4B,GAAQ,KAAK,GAAG;AACtC,YAAIC,KAAS,OAAO,yBAAyBD,GAAQ,KAAK,EAAE;AAE5D,YAAIC,MAAUA,GAAO;AACnB,iBAAO;AAAA,MAEf;AAGE,aAAOD,EAAO,QAAQ;AAAA,IACxB;AAEA,aAASE,GAAYF,GAAQ;AAEzB,UAAI5B,GAAe,KAAK4B,GAAQ,KAAK,GAAG;AACtC,YAAIC,KAAS,OAAO,yBAAyBD,GAAQ,KAAK,EAAE;AAE5D,YAAIC,MAAUA,GAAO;AACnB,iBAAO;AAAA,MAEf;AAGE,aAAOD,EAAO,QAAQ;AAAA,IACxB;AAEA,aAASG,GAAqCH,GAAQI,IAAM;AAExD,MAAI,OAAOJ,EAAO,OAAQ,YAAYL,GAAkB;AAAA,IAU5D;AAEA,aAASU,GAA2BjE,GAAOrB,IAAa;AACtD;AACE,YAAIuF,KAAwB,WAAY;AACtC,UAAKT,OACHA,KAA6B,IAE7BrG,EAAM,6OAA4PuB,EAAW;AAAA,QAErR;AAEI,QAAAuF,GAAsB,iBAAiB,IACvC,OAAO,eAAelE,GAAO,OAAO;AAAA,UAClC,KAAKkE;AAAA,UACL,cAAc;AAAA,QACpB,CAAK;AAAA,MACL;AAAA,IACA;AAEA,aAASC,GAA2BnE,GAAOrB,IAAa;AACtD;AACE,YAAIyF,KAAwB,WAAY;AACtC,UAAKV,OACHA,KAA6B,IAE7BtG,EAAM,6OAA4PuB,EAAW;AAAA,QAErR;AAEI,QAAAyF,GAAsB,iBAAiB,IACvC,OAAO,eAAepE,GAAO,OAAO;AAAA,UAClC,KAAKoE;AAAA,UACL,cAAc;AAAA,QACpB,CAAK;AAAA,MACL;AAAA,IACA;AAuBA,QAAIC,KAAe,SAAU/F,GAAMgG,IAAKC,IAAKP,IAAM1D,IAAQ8B,IAAOpC,IAAO;AACvE,UAAImC,KAAU;AAAA;AAAA,QAEZ,UAAUlG;AAAA;AAAA,QAEV,MAAMqC;AAAA,QACN,KAAKgG;AAAA,QACL,KAAKC;AAAA,QACL,OAAOvE;AAAA;AAAA,QAEP,QAAQoC;AAAA,MACZ;AAOI,aAAAD,GAAQ,SAAS,IAKjB,OAAO,eAAeA,GAAQ,QAAQ,aAAa;AAAA,QACjD,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,OAAO;AAAA,MACb,CAAK,GAED,OAAO,eAAeA,IAAS,SAAS;AAAA,QACtC,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,OAAO6B;AAAA,MACb,CAAK,GAGD,OAAO,eAAe7B,IAAS,WAAW;AAAA,QACxC,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,OAAO7B;AAAA,MACb,CAAK,GAEG,OAAO,WACT,OAAO,OAAO6B,GAAQ,KAAK,GAC3B,OAAO,OAAOA,EAAO,IAIlBA;AAAA,IACT;AAQA,aAASqC,GAAOlG,GAAMsF,IAAQa,IAAUnE,IAAQ0D,IAAM;AACpD;AACE,YAAIU,IAEA1E,KAAQ,CAAA,GACRsE,KAAM,MACNC,KAAM;AAOV,QAAIE,OAAa,WAEbnB,EAAuBmB,EAAQ,GAGjCH,KAAM,KAAKG,KAGTX,GAAYF,EAAM,MAElBN,EAAuBM,GAAO,GAAG,GAGnCU,KAAM,KAAKV,GAAO,MAGhBD,GAAYC,EAAM,MACpBW,KAAMX,GAAO,KACbG,GAAqCH,IAAQI,EAAI;AAInD,aAAKU,MAAYd;AACf,UAAI5B,GAAe,KAAK4B,IAAQc,EAAQ,KAAK,CAAClB,GAAe,eAAekB,EAAQ,MAClF1E,GAAM0E,EAAQ,IAAId,GAAOc,EAAQ;AAKrC,YAAIpG,KAAQA,EAAK,cAAc;AAC7B,cAAIqG,KAAerG,EAAK;AAExB,eAAKoG,MAAYC;AACf,YAAI3E,GAAM0E,EAAQ,MAAM,WACtB1E,GAAM0E,EAAQ,IAAIC,GAAaD,EAAQ;AAAA,QAGjD;AAEI,YAAIJ,MAAOC,IAAK;AACd,cAAI5F,IAAc,OAAOL,KAAS,aAAaA,EAAK,eAAeA,EAAK,QAAQ,YAAYA;AAE5F,UAAIgG,MACFL,GAA2BjE,IAAOrB,CAAW,GAG3C4F,MACFJ,GAA2BnE,IAAOrB,CAAW;AAAA,QAErD;AAEI,eAAO0F,GAAa/F,GAAMgG,IAAKC,IAAKP,IAAM1D,IAAQiD,GAAkB,SAASvD,EAAK;AAAA,MACtF;AAAA,IACA;AAEA,QAAI4E,KAAsBzH,EAAqB,mBAC3C0H,KAA2B1H,EAAqB;AAEpD,aAAS2H,GAAgC3C,GAAS;AAE9C,UAAIA,GAAS;AACX,YAAIC,KAAQD,EAAQ,QAChBvE,KAAQmE,GAAqCI,EAAQ,MAAMA,EAAQ,SAASC,KAAQA,GAAM,OAAO,IAAI;AACzG,QAAAyC,GAAyB,mBAAmBjH,EAAK;AAAA,MACvD;AACM,QAAAiH,GAAyB,mBAAmB,IAAI;AAAA,IAGtD;AAEA,QAAIE;AAGF,IAAAA,KAAgC;AAWlC,aAASC,GAAeC,GAAQ;AAE5B,aAAO,OAAOA,KAAW,YAAYA,MAAW,QAAQA,EAAO,aAAahJ;AAAA,IAEhF;AAEA,aAASiJ,KAA8B;AACrC;AACE,YAAIN,GAAoB,SAAS;AAC/B,cAAIvE,IAAOvB,EAAyB8F,GAAoB,QAAQ,IAAI;AAEpE,cAAIvE;AACF,mBAAO;AAAA;AAAA,iCAAqCA,IAAO;AAAA,QAE3D;AAEI,eAAO;AAAA,MACX;AAAA,IACA;AAEA,aAAS8E,GAA2B7E,GAAQ;AAQxC,aAAO;AAAA,IAEX;AAQA,QAAI8E,KAAwB,CAAA;AAE5B,aAASC,GAA6BC,GAAY;AAChD;AACE,YAAIC,KAAOL,GAA2B;AAEtC,YAAI,CAACK,IAAM;AACT,cAAIC,KAAa,OAAOF,KAAe,WAAWA,IAAaA,EAAW,eAAeA,EAAW;AAEpG,UAAIE,OACFD,KAAO;AAAA;AAAA,2CAAgDC,KAAa;AAAA,QAE5E;AAEI,eAAOD;AAAA,MACX;AAAA,IACA;AAcA,aAASE,GAAoBtD,GAASmD,IAAY;AAChD;AACE,YAAI,CAACnD,EAAQ,UAAUA,EAAQ,OAAO,aAAaA,EAAQ,OAAO;AAChE;AAGF,QAAAA,EAAQ,OAAO,YAAY;AAC3B,YAAIuD,KAA4BL,GAA6BC,EAAU;AAEvE,YAAIF,GAAsBM,EAAyB;AACjD;AAGF,QAAAN,GAAsBM,EAAyB,IAAI;AAInD,YAAIC,KAAa;AAEjB,QAAIxD,KAAWA,EAAQ,UAAUA,EAAQ,WAAWyC,GAAoB,YAEtEe,KAAa,iCAAiC7G,EAAyBqD,EAAQ,OAAO,IAAI,IAAI,MAGhG2C,GAAgC3C,CAAO,GAEvC/E,EAAM,6HAAkIsI,IAA2BC,EAAU,GAE7Kb,GAAgC,IAAI;AAAA,MACxC;AAAA,IACA;AAYA,aAASc,GAAkBC,GAAMP,IAAY;AAC3C;AACE,YAAI,OAAOO,KAAS;AAClB;AAGF,YAAI7C,EAAQ6C,CAAI;AACd,mBAASC,KAAI,GAAGA,KAAID,EAAK,QAAQC,MAAK;AACpC,gBAAIC,KAAQF,EAAKC,EAAC;AAElB,YAAId,GAAee,EAAK,KACtBN,GAAoBM,IAAOT,EAAU;AAAA,UAE/C;AAAA,iBACeN,GAAea,CAAI;AAE5B,UAAIA,EAAK,WACPA,EAAK,OAAO,YAAY;AAAA,iBAEjBA,GAAM;AACf,cAAIG,KAAahJ,EAAc6I,CAAI;AAEnC,cAAI,OAAOG,MAAe,cAGpBA,OAAeH,EAAK;AAItB,qBAHII,KAAWD,GAAW,KAAKH,CAAI,GAC/BK,IAEG,EAAEA,KAAOD,GAAS,KAAI,GAAI;AAC/B,cAAIjB,GAAekB,GAAK,KAAK,KAC3BT,GAAoBS,GAAK,OAAOZ,EAAU;AAAA,QAKxD;AAAA,MACA;AAAA,IACA;AASA,aAASa,GAAkBhE,GAAS;AAClC;AACE,YAAI7D,KAAO6D,EAAQ;AAEnB,YAAI7D,MAAS,QAA8B,OAAOA,MAAS;AACzD;AAGF,YAAI8H;AAEJ,YAAI,OAAO9H,MAAS;AAClB,UAAA8H,KAAY9H,GAAK;AAAA,iBACR,OAAOA,MAAS,aAAaA,GAAK,aAAa9B;AAAA;AAAA,QAE1D8B,GAAK,aAAa3B;AAChB,UAAAyJ,KAAY9H,GAAK;AAAA;AAEjB;AAGF,YAAI8H,IAAW;AAEb,cAAI/F,KAAOvB,EAAyBR,EAAI;AACxC,UAAA+D,GAAe+D,IAAWjE,EAAQ,OAAO,QAAQ9B,IAAM8B,CAAO;AAAA,QACpE,WAAe7D,GAAK,cAAc,UAAa,CAACyG,IAA+B;AACzE,UAAAA,KAAgC;AAEhC,cAAIsB,KAAQvH,EAAyBR,EAAI;AAEzC,UAAAlB,EAAM,uGAAuGiJ,MAAS,SAAS;AAAA,QACrI;AAEI,QAAI,OAAO/H,GAAK,mBAAoB,cAAc,CAACA,GAAK,gBAAgB,wBACtElB,EAAM,4HAAiI;AAAA,MAE7I;AAAA,IACA;AAOA,aAASkJ,GAAsBC,GAAU;AACvC;AAGE,iBAFIC,KAAO,OAAO,KAAKD,EAAS,KAAK,GAE5BT,KAAI,GAAGA,KAAIU,GAAK,QAAQV,MAAK;AACpC,cAAIxB,KAAMkC,GAAKV,EAAC;AAEhB,cAAIxB,OAAQ,cAAcA,OAAQ,OAAO;AACvC,YAAAQ,GAAgCyB,CAAQ,GAExCnJ,EAAM,4GAAiHkH,EAAG,GAE1HQ,GAAgC,IAAI;AACpC;AAAA,UACR;AAAA,QACA;AAEI,QAAIyB,EAAS,QAAQ,SACnBzB,GAAgCyB,CAAQ,GAExCnJ,EAAM,uDAAuD,GAE7D0H,GAAgC,IAAI;AAAA,MAE1C;AAAA,IACA;AAEA,QAAI2B,KAAwB,CAAA;AAC5B,aAASC,GAAkBpI,GAAM0B,IAAOsE,IAAKqC,IAAkBrG,IAAQ0D,IAAM;AAC3E;AACE,YAAI4C,KAAYvI,EAAmBC,CAAI;AAGvC,YAAI,CAACsI,IAAW;AACd,cAAIrB,KAAO;AAEX,WAAIjH,MAAS,UAAa,OAAOA,KAAS,YAAYA,MAAS,QAAQ,OAAO,KAAKA,CAAI,EAAE,WAAW,OAClGiH,MAAQ;AAGV,cAAIsB,KAAa1B,GAAiC;AAElD,UAAI0B,KACFtB,MAAQsB,KAERtB,MAAQL,GAA2B;AAGrC,cAAI4B;AAEJ,UAAIxI,MAAS,OACXwI,KAAa,SACJ9D,EAAQ1E,CAAI,IACrBwI,KAAa,UACJxI,MAAS,UAAaA,EAAK,aAAarC,KACjD6K,KAAa,OAAOhI,EAAyBR,EAAK,IAAI,KAAK,aAAa,OACxEiH,KAAO,wEAEPuB,KAAa,OAAOxI,GAGtBlB,EAAM,2IAAqJ0J,IAAYvB,EAAI;AAAA,QACjL;AAEI,YAAIpD,IAAUqC,GAAOlG,GAAM0B,IAAOsE,IAAKhE,IAAQ0D,EAAI;AAGnD,YAAI7B,KAAW;AACb,iBAAOA;AAQT,YAAIyE,IAAW;AACb,cAAIG,KAAW/G,GAAM;AAErB,cAAI+G,OAAa;AACf,gBAAIJ;AACF,kBAAI3D,EAAQ+D,EAAQ,GAAG;AACrB,yBAASjB,KAAI,GAAGA,KAAIiB,GAAS,QAAQjB;AACnC,kBAAAF,GAAkBmB,GAASjB,EAAC,GAAGxH,CAAI;AAGrC,gBAAI,OAAO,UACT,OAAO,OAAOyI,EAAQ;AAAA,cAEpC;AACY,gBAAA3J,EAAM,sJAAgK;AAAA;AAGxK,cAAAwI,GAAkBmB,IAAUzI,CAAI;AAAA,QAG1C;AAGM,YAAI0D,GAAe,KAAKhC,IAAO,KAAK,GAAG;AACrC,cAAIyC,KAAgB3D,EAAyBR,CAAI,GAC7CkI,KAAO,OAAO,KAAKxG,EAAK,EAAE,OAAO,SAAU9E,IAAG;AAChD,mBAAOA,OAAM;AAAA,UACvB,CAAS,GACG8L,KAAgBR,GAAK,SAAS,IAAI,oBAAoBA,GAAK,KAAK,SAAS,IAAI,WAAW;AAE5F,cAAI,CAACC,GAAsBhE,KAAgBuE,EAAa,GAAG;AACzD,gBAAIC,KAAeT,GAAK,SAAS,IAAI,MAAMA,GAAK,KAAK,SAAS,IAAI,WAAW;AAE7E,YAAApJ,EAAM;AAAA;AAAA;AAAA;AAAA;AAAA,oCAA4P4J,IAAevE,IAAewE,IAAcxE,EAAa,GAE3TgE,GAAsBhE,KAAgBuE,EAAa,IAAI;AAAA,UACjE;AAAA,QACA;AAGI,eAAI1I,MAASnC,IACXmK,GAAsBnE,CAAO,IAE7BgE,GAAkBhE,CAAO,GAGpBA;AAAA,MACX;AAAA,IACA;AAKA,aAAS+E,GAAwB5I,GAAM0B,IAAOsE,IAAK;AAE/C,aAAOoC,GAAkBpI,GAAM0B,IAAOsE,IAAK,EAAI;AAAA,IAEnD;AACA,aAAS6C,GAAyB7I,GAAM0B,IAAOsE,IAAK;AAEhD,aAAOoC,GAAkBpI,GAAM0B,IAAOsE,IAAK,EAAK;AAAA,IAEpD;AAEA,QAAI8C,KAAOD,IAGPE,KAAQH;AAEZ,IAAAI,GAAA,WAAmBnL,GACnBmL,GAAA,MAAcF,IACdE,GAAA,OAAeD;AAAA,EACf,EAAG;;ACjzCC,QAAQ,IAAI,aAAa,eAC3BE,GAAA,UAAiBtM,GAAA,IAEjBsM,GAAA,UAAiBC,GAAA;;ACSnB,MAAMC,yBAAmB,IAAA,GAEZC,KAAqB,CAAC;AAAA,EAC/B,KAAAC;AAAA,EACA,iBAAAC,IAAkB,CAAC,KAAK,KAAK,IAAI;AAAA,EACjC,SAAAC,IAAU,CAAC,QAAQ,QAAQ,MAAM;AAAA,EACjC,SAAAC,IAAU;AAAA,EACV,QAAAC;AACJ,MAA+B;AAC3B,QAAM,CAACC,GAAMC,CAAO,IAAIC,GAAgC,IAAI,GACtD,CAACC,GAASC,CAAU,IAAIF,GAAS,EAAK,GACtC,CAAC9K,GAAOiL,CAAQ,IAAIH,GAAwB,IAAI;AAEtD,SAAAI,GAAU,MAAM;AACZ,QAAIC,IAAY;AA6GhB,YA3GiC,YAAY;AACzC,UAAI,CAACZ,KAAO,CAACG,GAAS;AAClB,QAAIS,MAIKZ,MACDM,EAAQ,IAAI,GACZG,EAAW,EAAK;AAGxB;AAAA,MACJ;AAEA,MAAIG,MACAH,EAAW,EAAI,GACfC,EAAS,IAAI;AAGjB,UAAI;AAGA,YAAI,OAAOV,KAAQ,UAAU;AAEzB,cAAIA,EAAI,WAAW,OAAO,GAAG;AACzB,YAAIY,MACAN,EAAQ;AAAA,cACJ,KAAK;AAAA,gBACD,KAAAN;AAAA,gBACA,OAAO;AAAA;AAAA,gBACP,QAAQ;AAAA,gBACR,QAAQ;AAAA,cAAA;AAAA,cAEZ,SAAS,CAAA;AAAA;AAAA,YAAC,CACb,GACDS,EAAW,EAAK;AAEpB;AAAA,UACJ;AAEA,gBAAMI,IAAW,KAAK,UAAU,EAAE,KAAAb,GAAK,OAAOC,GAAiB,SAAAC,GAAS,QAAAE,GAAQ;AAEhF,cAAI,CAACN,GAAa,IAAIe,CAAQ,GAAG;AAC7B,kBAAMC,KAAkB,YAAY;AAChC,oBAAMC,IAAW,IAAI,SAAA;AACrB,cAAAA,EAAS,OAAO,OAAOf,CAAG,GAC1Be,EAAS,OAAO,SAAS,KAAK,UAAUd,CAAe,CAAC,GACxDc,EAAS,OAAO,WAAW,KAAK,UAAUb,CAAO,CAAC;AAGlD,oBAAMc,IAAW,MAAM,MAAM,GADXZ,KAAU,UAA6C,0BAChC,0BAA0B;AAAA,gBAC/D,QAAQ;AAAA,gBACR,MAAMW;AAAA,cAAA,CACT;AAED,kBAAI,CAACC,EAAS,IAAI;AACd,sBAAMC,IAAM,MAAMD,EAAS,KAAA;AAE3BlB,sBAAAA,GAAa,OAAOe,CAAQ,GACtB,IAAI,MAAMI,KAAO,sCAAsC;AAAA,cACjE;AAEA,qBAAOD,EAAS,KAAA;AAAA,YACpB,GAAA;AAEAlB,YAAAA,GAAa,IAAIe,GAAUC,CAAc;AAAA,UAC7C;AAEA,gBAAMI,IAAS,MAAMpB,GAAa,IAAIe,CAAQ;AAC9C,UAAID,KACAN,EAAQY,CAAM;AAAA,QAEtB,OAAO;AAEH,gBAAMH,IAAW,IAAI,SAAA;AACrB,UAAAA,EAAS,OAAO,QAAQf,CAAG,GAC3Be,EAAS,OAAO,SAAS,KAAK,UAAUd,CAAe,CAAC,GACxDc,EAAS,OAAO,WAAW,KAAK,UAAUb,CAAO,CAAC;AAGlD,gBAAMc,IAAW,MAAM,MAAM,GADXZ,KAAU,UAA6C,EAChC,0BAA0B;AAAA,YAC/D,QAAQ;AAAA,YACR,MAAMW;AAAA,UAAA,CACT;AAED,cAAI,CAACC,EAAS,IAAI;AACd,kBAAMC,IAAM,MAAMD,EAAS,KAAA;AAC3B,kBAAM,IAAI,MAAMC,KAAO,sCAAsC;AAAA,UACjE;AAEA,gBAAMC,IAAS,MAAMF,EAAS,KAAA;AAC9B,UAAIJ,KACAN,EAAQY,CAAM;AAAA,QAEtB;AAAA,MACJ,SAAShG,GAAU;AACf,gBAAQ,MAAM,uCAAuCA,CAAG,GACpD0F,KACAF,EAASxF,EAAI,OAAO;AAAA,MAE5B,UAAA;AACI,QAAI0F,KACAH,EAAW,EAAK;AAAA,MAExB;AAAA,IACJ,GAEA,GAEO,MAAM;AACT,MAAAG,IAAY;AAAA,IAChB;AAAA,EACJ,GAAG,CAACZ,GAAK,KAAK,UAAUC,CAAe,GAAG,KAAK,UAAUC,CAAO,GAAGC,CAAO,CAAC,GAEpE,EAAE,MAAAE,GAAM,SAAAG,GAAS,OAAA/K,EAAA;AAC5B,GCnHM0L,KAAkD,CAAC;AAAA,EACrD,KAAAnB;AAAA,EACA,OAAAoB,IAAQ;AAAA,EACR,WAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAArB,IAAkB,CAAC,KAAK,KAAK,MAAM,MAAM,IAAI;AAAA,EAC7C,SAAAC,IAAU,CAAC,QAAQ,MAAM;AAAA,EACzB,KAAAqB;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAMC;AAAA,EACN,QAAAxB;AAAA,EACA,GAAG/H;AACP,MAAM;AAEF,QAAM,CAACwJ,GAAUC,CAAW,IAAIvB,GAASlI,EAAM,YAAY,OAAO,GAC5D,CAAC0J,GAAWC,CAAY,IAAIzB,GAAS,EAAK,GAC1C3D,IAAMvI,GAAM,OAAuB,IAAI,GACvC4N,IAAS5N,GAAM,OAAyB,IAAI;AAElD,EAAAsM,GAAU,MAAM;AACZ,QAAItI,EAAM,YAAY,WAAWuJ,GAAc;AAC3C,MAAAE,EAAY,EAAI;AAChB;AAAA,IACJ;AAEA,UAAMI,IAAW,IAAI,qBAAqB,CAAC,CAACC,CAAK,MAAM;AACnD,MAAIA,EAAM,mBACNL,EAAY,EAAI,GAChBI,EAAS,WAAA;AAAA,IAEjB,GAAG;AAAA,MACC,YAAAT;AAAA,IAAA,CACH;AAED,WAAI7E,EAAI,WACJsF,EAAS,QAAQtF,EAAI,OAAO,GAGzB,MAAM;AACT,MAAAsF,EAAS,WAAA;AAAA,IACb;AAAA,EACJ,GAAG,CAAC7J,EAAM,SAASoJ,GAAYG,CAAY,CAAC;AAE5C,QAAMQ,IAAarC,GAAmB;AAAA,IAClC,KAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,SAAS2B,KAAY,CAACD;AAAA,IACtB,QAAAxB;AAAA,EAAA,CACH,GAEKC,IAAOuB,KAAgBQ,EAAW,MAClC5B,IAAU,CAACoB,KAAgBQ,EAAW,SACtC3M,IAAQ,CAACmM,KAAgBQ,EAAW;AAwB1C,SAtBAzB,GAAU,MAAM;AACZ,IAAIN,KAAQmB,KACRA,EAAanB,CAAI;AAAA,EAEzB,GAAG,CAACA,GAAMmB,CAAY,CAAC,GAGvBb,GAAU,MAAM;AACZ,IAAAqB,EAAa,EAAK;AAAA,EACtB,GAAG,CAAChC,CAAG,CAAC,GAGRW,GAAU,MAAM;;AACZ,KAAI0B,IAAAJ,EAAO,YAAP,QAAAI,EAAgB,YAChBL,EAAa,EAAI;AAAA,EAEzB,GAAG,CAAC3B,GAAM0B,CAAS,CAAC,GAMhB,CAACF,MAFsBrB,KAAYqB,KAAY,CAACxB,KAAQ,CAAC5K,2BAKjD,OAAA,EAAI,KAAAmH,GAAU,WAAW,2CAA2CyE,KAAa,EAAE,IAAI,IAG/F5L,KAAS,CAAC4K,IAEN,OAAOL,KAAQ,WACRP,gBAAAA,EAAAA,IAAC,SAAI,KAAAO,GAAU,KAAAuB,GAAU,WAAWD,KAAgBD,GAAY,GAAGhJ,GAAO,IAE9EoH,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,wBAAuB,UAAA,wBAAoB,2BAIhE,OAAA,EAAI,WAAW,0BAA0B4B,KAAa,EAAE,IACrD,UAAA;AAAA,IAAA3B,gBAAAA,OAAC,WAAA,EACK,UAAA;AAAA,OAAAW,EAAK,WAAW,IAAI,IAAI,CAAC1H,GAAQ2J,MAC/B7C,gBAAAA,EAAAA,IAAC,UAAA,EAAmB,QAAQ9G,EAAO,QAAQ,MAAMA,EAAO,MAAM,OAAAyI,EAAA,GAAjDkB,CAA+D,CAC/E;AAAA,MACD7C,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG,KAAKwC;AAAA,UACL,KAAK5B,EAAK,IAAI;AAAA,UACd,KAAAkB;AAAA,UAGA,OAAOlB,EAAK,IAAI,QAAQ,IAAIA,EAAK,IAAI,QAAQ;AAAA,UAC7C,QAAQA,EAAK,IAAI,SAAS,IAAIA,EAAK,IAAI,SAAS;AAAA,UAChD,WAAW,GAAGiB,KAAgB,EAAE,oCAAoCS,IAAY,gBAAgB,WAAW;AAAA,UAC3G,QAAQ,CAAC7N,MAAM;AACX,YAAA8N,EAAa,EAAI,GACjBN,KAAA,QAAAA,EAASxN;AAAA,UACb;AAAA,UACA,SAAS,CAACA,MAAM;AACZ,YAAA8N,EAAa,EAAI,GACjBL,KAAA,QAAAA,EAAUzN;AAAA,UACd;AAAA,UACA,SAASmE,EAAM,WAAW;AAAA,UAC1B,UAAS;AAAA,UACR,GAAGA;AAAA,QAAA;AAAA,MAAA;AAAA,IACR,GACJ;AAAA,IACC,CAAC0J,KACEtC,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,6FACX,UAAAA,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,iFAAA,CAAiF,EAAA,CACpG;AAAA,EAAA,GAER;AAER,GC3JM8C,KAAe,4CACfC,KAA2B,oNAKpBC,KAAWC,GAAuBH,IAAcC,IAA0B;AAAA,EACrF,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,EAAA;AAEtB,CAAC,GCVK1C,yBAAmB,IAAA,GAEnB6C,KAAyB,OAAUhG,GAAaiG,MAA0C;AAC5F,MAAI,CAAC9C,GAAa,IAAInD,CAAG,GAAG;AACxB,UAAMkG,IAAUD,EAAA,EAAU,MAAM,CAAC1H,MAAQ;AACrC,YAAA4E,GAAa,OAAOnD,CAAG,GACjBzB;AAAA,IACV,CAAC,EAAE,QAAQ,MAAM;AAGb,iBAAW,MAAM4E,GAAa,OAAOnD,CAAG,GAAG,IAAI;AAAA,IACnD,CAAC;AACD,IAAAmD,GAAa,IAAInD,GAAKkG,CAAO;AAAA,EACjC;AACA,SAAO/C,GAAa,IAAInD,CAAG;AAC/B,GA8PamG,KAAwB,OAAOC,GAAmBC,MAA4B;AACvF,QAAMP,IAAWO,KAAUC;AAC3B,MAAIF,EAAQ,WAAW,EAAG,QAAO,CAAA;AAIjC,QAAMpG,IAAM,qBADM,CAAC,GAAGoG,CAAO,EAAE,KAAA,EACY,KAAK,GAAG,CAAC;AAEpD,SAAOJ,GAAuBhG,GAAK,YAAY;AAE3C,UAAMuG,IAAY,IAAIH,EAAQ,KAAK,GAAG,CAAC,KACjC,EAAE,MAAA1C,GAAM,OAAA5K,MAAU,MAAMgN,EACzB,KAAK,UAAU,EACf,OAAO,GAAG,EACV,GAAG,eAAe,EAAI,EACtB,GAAG,gBAAgBS,CAAS,UAAUA,CAAS,EAAE;AAEtD,QAAIzN,EAAO,OAAMA;AACjB,WAAO4K;AAAA,EACX,CAAC;AACL,GAsFa8C,KAA0B,OACnCxK,IAAiD,QACjDyK,GACAC,GACAC,GACAC,IAAe,GACfC,IAAmB,IACnBR,MACsB;AACtB,QAAMP,IAAWO,KAAUC,IACrBQ,IAAQF,IAAOC,GACfE,IAAMD,IAAQD,IAAW;AAG/B,MAAIG,IAAQlB,EACP,KAAK,OAAO,EACZ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAiBP,EACA,MAAM,cAAc,EAAE,WAAW,IAAO,EACxC,MAAMgB,GAAOC,CAAG;AAGrB,EAAI,CAACN,KAAYzK,MAAW,WACxBgL,IAAQA,EAAM,GAAG,kDAAkD;AAcvE,QAAM,EAAE,MAAMC,GAAW,OAAOC,EAAA,IAAe,MAAMF;AACrD,MAAIE,EAAY,OAAMA;AAItB,MAAIC,IAAmB,CAAA;AACvB,MAAInL,MAAW,UAAUA,MAAW,UAAUA,MAAW,cAAc;AACnE,QAAIoL,IAAYtB,EACX,KAAK,OAAO,EACZ,OAAO,GAAG,EACV,MAAM,cAAc,EAAE,WAAW,GAAA,CAAO,EACxC,MAAMgB,GAAOC,CAAG;AAErB,IAAI/K,MAAW,UAAUyK,KACrBW,IAAYA,EAAU,GAAG,SAASX,CAAQ,GAM1CW,IAAYA,EAAU,GAAG,aAAa,EAAI,EAAE,GAAG,WAAW,EAAI,KACvDpL,MAAW,WAClBoL,IAAYA,EAAU,GAAG,aAAa,EAAI,EAAE,GAAG,WAAW,EAAI;AAGlE,UAAM,EAAE,MAAMC,GAAO,OAAOC,EAAA,IAAe,MAAMF;AAEjD,IAAI,CAACE,KAAcD,MACfF,IAAYE,IAEhB,QAAQ,IAAI,sBAAsBrL,GAAQmL,CAAS;AAAA,EACvD;AACI,YAAQ,IAAI,uBAAuBnL,CAAM;AAI7C,QAAMuL,IAAyB,CAAA,GACzBC,wBAAsB,IAAA;AAC5B,EAAAL,EAAU,QAAQ,CAAAP,MAAQ;;AACtB,QAAIa,IAAUb,EAAK;AACnB,QAAI,OAAOa,KAAY;AACnB,UAAI;AACA,QAAAA,IAAU,KAAK,MAAMA,CAAO;AAAA,MAChC,SAASlQ,GAAG;AACR,gBAAQ,MAAM,yCAAyCqP,EAAK,EAAE,IAAIrP,CAAC;AACnE;AAAA,MACJ;AAIJ,QAAImQ,IAAaD,KAAA,gBAAAA,EAAS;AAE1B,QAAI,CAACC,MAAcD,KAAA,QAAAA,EAAS,QAAO;AAE/B,YAAME,IAAe,OAAO,KAAKF,EAAQ,KAAK,EAAE,CAAC;AACjD,MAAIE,OAAgBjC,IAAA+B,EAAQ,MAAME,CAAY,MAA1B,QAAAjC,EAA6B,gBAC7CgC,IAAaD,EAAQ,MAAME,CAAY,EAAE;AAAA,IAGjD;AAEA,QAAKD;AAML,iBAAWE,KAAaF;AACpB,YAAIE,EAAU,SAAS;AACnB,gBAAMC,IAAcD,EAAU,QAAQ,KAAK,CAACE;;AAAW,mBAAAA,EAAE,aAAa,kBAAgBpC,IAAAoC,EAAE,UAAF,gBAAApC,EAAS;AAAA,WAAS;AACxG,cAAImC,GAAa;AACb,kBAAME,IAAQF,EAAY,MAAM;AAEhC,YAAAN,EAAa,KAAKQ,CAAK,GACvBP,EAAgB,IAAIZ,EAAK,IAAImB,CAAK;AAClC;AAAA,UACJ;AAAA,QACJ;AAAA;AAAA,EAER,CAAC;AAED,QAAMC,wBAAiB,IAAA;AACvB,MAAIT,EAAa,SAAS,GAAG;AACzB,UAAM,EAAE,MAAMU,MAAS,MAAMnC,EACxB,KAAK,UAAU,EACf,OAAO,eAAe,EACtB,GAAG,MAAMyB,CAAY;AAE1B,IAAAU,KAAA,QAAAA,EAAM,QAAQ,OAAKD,EAAW,IAAIhR,EAAE,IAAIA,EAAE,SAAS;AAAA,EACvD;AAGA,QAAMoP,wBAAc,IAAA,GACd8B,wBAAqB,IAAA;AAE3B,GAACjB,KAAsB,CAAA,GAAI,QAAQ,CAACkB,MAAS;AAEzC,UAAMC,KADOD,EAAK,YAAqB,CAAA,GAChB,OAAO,CAAAnR,MAAKA,EAAE,YAAY,EAAK;AACtD,IAAAoR,EAAU,KAAK,CAACjR,GAAGE,OAAOF,EAAE,YAAY,MAAME,EAAE,YAAY,EAAE;AAE9D,UAAMgR,IAAQD,EAAU,CAAC;AACzB,IAAIC,MACAH,EAAe,IAAIC,EAAK,IAAIE,CAAK,GACjCjC,EAAQ,IAAIiC,EAAM,aAAaA,EAAM,EAAE;AAAA,EAE/C,CAAC;AAGD,MAAIC,IAA0B,CAAA;AAC9B,EAAIlC,EAAQ,OAAO,MACfkC,IAAmB,MAAMnC,GAAsB,MAAM,KAAKC,CAAO,GAAGN,CAAQ;AAIhF,QAAMyC,KAAgCtB,KAAsB,CAAA,GACvD,IAAI,CAACkB,MAAS;AACX,QAAIK,IAAWN,EAAe,IAAIC,EAAK,EAAE;AAGzC,QAAI,CAACK,GAAU;AACX,YAAMC,IAAYN,EAAK,YAAoB,CAAA;AAC3C,UAAIM,KAAYA,EAAS;AAErB,QAAAD,IAAW;AAAA,UACP,IAAIL,EAAK;AAAA,UACT,YAAYA,EAAK;AAAA,UACjB,OAAOA,EAAK;AAAA,UACZ,aAAaA,EAAK;AAAA,UAClB,WAAWM,EAAS,aAAa,gCAAgCN,EAAK,KAAK;AAAA;AAAA,UAC3E,eAAeM,EAAS,iBAAiB;AAAA,UACzC,MAAM;AAAA,UACN,MAAM,EAAE,KAAKA,EAAS,KAAA;AAAA,UACtB,YAAYN,EAAK;AAAA,UACjB,SAASA,EAAK;AAAA,UACd,aAAa;AAAA,UACb,UAAU,CAAC,EAAE,OAAO,GAAG;AAAA,UACvB,SAAS;AAAA,UACT,aAAa;AAAA,UACb,UAAU;AAAA,QAAA;AAAA;AAGd,eAAO;AAAA,IAEf;AAEA,UAAMO,IAASF,EAAS,aAAaA,EAAS,IACxCG,IAAWL,KAAA,gBAAAA,EAAkB;AAAA,MAAK,CAACM,OACpCA,EAAE,OAAOF,KAAUE,EAAE,cAAcF,MAAWE,EAAE;AAAA;AAGrD,IAAID,KAAYA,EAAS,OAAOH,EAAS,OACrCA,IAAWG;AAIf,UAAMP,KADOD,EAAK,YAAqB,CAAA,GAChB,OAAO,CAAAnR,MAAKA,EAAE,YAAY,EAAK,EACjD,KAAK,CAACG,GAAGE,OAAOF,EAAE,YAAY,MAAME,EAAE,YAAY,EAAE;AAEzD,WAAO;AAAA,MACH,IAAI8Q,EAAK;AAAA,MACT,OAAOA,EAAK;AAAA,MACZ,aAAaA,EAAK;AAAA,MAClB,YAAYA,EAAK;AAAA,MACjB,SAASA,EAAK;AAAA,MACd,UAAUC;AAAA,MACV,OAAOI;AAAA,MACP,aAAaJ,EAAU,OAAO,CAACS,GAAK7R,MAAM6R,KAAO7R,EAAE,eAAe,IAAI,CAAC;AAAA,MACvE,gBAAgB;AAAA,MAChB,MAAMwR,EAAS;AAAA,IAAA;AAAA,EAEvB,CAAC,EACA,OAAO,CAAChP,MAASA,MAAS,IAAI,GAI7BsP,IAA+B3B,EAAU,IAAI,CAAAP,MAAQ;AAEvD,QAAImC,IAAe;AACnB,UAAMC,IAAgBxB,EAAgB,IAAIZ,EAAK,EAAE;AACjD,QAAIoC,GAAe;AACf,YAAMC,IAAWjB,EAAW,IAAIgB,CAAa;AAC7C,MAAIC,MAAUF,IAAeE;AAAA,IACjC;AAIA,UAAMC,IAAkB;AAAA,MACpB,IAAItC,EAAK;AAAA;AAAA;AAAA,MAET,WAAWmC;AAAA,MACX,eAAe;AAAA,MACf,MAAM;AAAA,MACN,MAAM,EAAE,MAAMnC,EAAK,KAAA;AAAA;AAAA,MACnB,aAAa;AAAA,MACb,aAAa;AAAA,MACb,SAAS;AAAA,MACT,aAAa;AAAA,MACb,UAAU;AAAA,MACV,YAAYA,EAAK;AAAA,MACjB,OAAOA,EAAK;AAAA,IAAA;AAGhB,WAAO;AAAA,MACH,IAAIA,EAAK;AAAA,MACT,OAAOA,EAAK;AAAA,MACZ,aAAa;AAAA;AAAA,MACb,YAAYA,EAAK;AAAA,MACjB,SAASA,EAAK;AAAA,MACd,UAAU,CAACsC,CAAU;AAAA,MACrB,OAAOA;AAAA,MACP,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,MAAM;AAAA,IAAA;AAAA,EAEd,CAAC,GAGKC,IAAW,CAAC,GAAGZ,GAAkB,GAAGO,CAAgB;AAC1D,SAAAK,EAAS,KAAK,CAAChS,GAAGE,MAAM,IAAI,KAAKA,EAAE,UAAU,EAAE,QAAA,IAAY,IAAI,KAAKF,EAAE,UAAU,EAAE,SAAS,GAEpFgS;AACX,GAGaC,KAA2B,CAACC,GAAmBC,IAA2B,aAC5ED,EAAM,IAAI,CAAAlB,MAAQ;AACrB,MAAIE,IAAQF,EAAK;AAGjB,MAAIA,EAAK,YAAYA,EAAK,SAAS,SAAS,GAAG;AAC3C,UAAMC,IAAYD,EAAK,SAAS,OAAO,CAACnR,MAAWA,EAAE,YAAY,EAAK;AAEtE,IAAIoR,EAAU,SAAS,IACfkB,MAAW,WAEXjB,IAAQD,EAAU,OAAO,CAACmB,GAAQC,MAAY;AAC1C,YAAMC,IAAa,IAAI,KAAKF,EAAO,cAAcpB,EAAK,UAAU,EAAE,QAAA;AAElE,aADoB,IAAI,KAAKqB,EAAQ,cAAcrB,EAAK,UAAU,EAAE,QAAA,IAC/CsB,IAAaD,IAAUD;AAAA,IAChD,CAAC,IAIDlB,IADyB,CAAC,GAAGD,CAAS,EAAE,KAAK,CAAC,GAAG/Q,OAAO,EAAE,YAAY,MAAMA,EAAE,YAAY,EAAE,EACnE,CAAC,IAG9BgR,IAAQF,EAAK,SAAS,CAAC;AAAA,EAE/B;AAEA,SAAKE,IACE;AAAA,IACH,IAAIF,EAAK;AAAA,IACT,YAAYE,EAAM;AAAA,IAClB,OAAOF,EAAK;AAAA,IACZ,aAAaA,EAAK;AAAA,IAClB,WAAWE,EAAM;AAAA,IACjB,eAAeA,EAAM;AAAA,IACrB,MAAMA,EAAM;AAAA,IACZ,MAAMA,EAAM;AAAA,IACZ,YAAYF,EAAK;AAAA,IACjB,SAASA,EAAK;AAAA,IACd,aAAaA,EAAK;AAAA,IAClB,UAAU,CAAC,EAAE,OAAOA,EAAK,gBAAgB;AAAA,IACzC,YAAaE,EAAc;AAAA,IAC3B,KAAMA,EAAc;AAAA;AAAA,EAAA,IAfL;AAkBvB,CAAC,EAAE,OAAO,CAAA7O,MAAQA,MAAS,IAAI,GAItBkQ,KAAmB,CAACL,MACtBA,EAAM,IAAI,CAAArS,MAAK;AAElB,MAAI,CAACA,EAAE,OAAO;AACV,UAAMiR,IAAOjR,EAAE,YAAY,CAAA,GACrBoR,IAAYH,EAAK,OAAO,CAAC0B,MAAaA,EAAI,YAAY,EAAK,EAC5D,KAAK,CAACxS,GAAQE,OAAYF,EAAE,YAAY,MAAME,EAAE,YAAY,EAAE;AAEnE,WAAO;AAAA,MACH,GAAGL;AAAA,MACH,OAAOoR,EAAU,CAAC,KAAKH,EAAK,CAAC;AAAA;AAAA,MAC7B,gBAAgBjR,EAAE,SAAS;AAAA,QACvB,SAASA,EAAE,OAAO;AAAA,QAClB,UAAUA,EAAE,OAAO;AAAA,QACnB,cAAcA,EAAE,OAAO;AAAA,QACvB,YAAYA,EAAE,OAAO;AAAA,MAAA,IACrB;AAAA,IAAA;AAAA,EAEZ;AACA,SAAOA;AACX,CAAC;ACptBL,SAAS4S,GAAO3J,GAAKrB,GAAO;AAC1B,MAAI,OAAOqB,KAAQ;AACjB,WAAOA,EAAIrB,CAAK;AACX,EAAIqB,KAAQ,SACjBA,EAAI,UAAUrB;AAElB;AACA,SAASiL,MAAeC,GAAM;AAC5B,SAAO,CAACvI,MAAS;AACf,QAAIwI,IAAa;AACjB,UAAMC,IAAWF,EAAK,IAAI,CAAC7J,MAAQ;AACjC,YAAMgK,IAAUL,GAAO3J,GAAKsB,CAAI;AAChC,aAAI,CAACwI,KAAc,OAAOE,KAAW,eACnCF,IAAa,KAERE;AAAA,IACT,CAAC;AACD,QAAIF;AACF,aAAO,MAAM;AACX,iBAASvI,IAAI,GAAGA,IAAIwI,EAAS,QAAQxI,KAAK;AACxC,gBAAMyI,IAAUD,EAASxI,CAAC;AAC1B,UAAI,OAAOyI,KAAW,aACpBA,EAAO,IAEPL,GAAOE,EAAKtI,CAAC,GAAG,IAAI;AAAA,QAExB;AAAA,MACF;AAAA,EAEJ;AACF;AACA,SAAS0I,MAAmBJ,GAAM;AAChC,SAAOpS,EAAM,YAAYmS,GAAY,GAAGC,CAAI,GAAGA,CAAI;AACrD;AC/BA,IAAIxR,KAAkB,OAAO,IAAI,YAAY,GACzC6R,KAAMzS,EAAM,QAAQ,KAAI,EAAG,SAAQ,CAAE;AACzC,SAAS0S,GAAcxL,GAAO;AAC5B,SAAO,OAAOA,KAAU,YAAYA,MAAU,QAAQ,UAAUA;AAClE;AACA,SAASyL,GAAgBxM,GAAS;AAChC,SAAOA,KAAW,QAAQ,OAAOA,KAAY,YAAY,cAAcA,KAAWA,EAAQ,aAAavF,MAAmB,cAAcuF,KAAWuM,GAAcvM,EAAQ,QAAQ;AACnL;AAAA;AAEA,SAASyM,GAAWC,GAAW;AAC7B,QAAMC,IAA4BC,gBAAAA,GAAgBF,CAAS,GACrDG,IAAQhT,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACtD,QAAI,EAAE,UAAAlI,GAAU,GAAGmI,EAAS,IAAKlP;AACjC,IAAI2O,GAAgB5H,CAAQ,KAAK,OAAO0H,MAAQ,eAC9C1H,IAAW0H,GAAI1H,EAAS,QAAQ;AAElC,UAAMoI,IAAgBnT,EAAM,SAAS,QAAQ+K,CAAQ,GAC/CqI,IAAYD,EAAc,KAAKE,EAAW;AAChD,QAAID,GAAW;AACb,YAAME,IAAaF,EAAU,MAAM,UAC7BG,IAAcJ,EAAc,IAAI,CAACpJ,MACjCA,MAAUqJ,IACRpT,EAAM,SAAS,MAAMsT,CAAU,IAAI,IAAUtT,EAAM,SAAS,KAAK,IAAI,IAClEA,EAAM,eAAesT,CAAU,IAAIA,EAAW,MAAM,WAAW,OAE/DvJ,CAEV;AACD,aAAuBqB,gBAAAA,EAAAA,IAAI0H,GAAW,EAAE,GAAGI,GAAW,KAAKD,GAAc,UAAUjT,EAAM,eAAesT,CAAU,IAAItT,EAAM,aAAasT,GAAY,QAAQC,CAAW,IAAI,MAAM;AAAA,IACpL;AACA,WAAuBnI,gBAAAA,EAAAA,IAAI0H,GAAW,EAAE,GAAGI,GAAW,KAAKD,GAAc,UAAAlI,GAAU;AAAA,EACrF,CAAC;AACD,SAAAiI,EAAM,cAAc,GAAGH,CAAS,SACzBG;AACT;AACA,IAAIQ,KAAuBZ,gBAAAA,GAAW,MAAM;AAAA;AAE5C,SAASG,GAAgBF,GAAW;AAClC,QAAMC,IAAY9S,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AAC1D,QAAI,EAAE,UAAAlI,GAAU,GAAGmI,EAAS,IAAKlP;AAIjC,QAHI2O,GAAgB5H,CAAQ,KAAK,OAAO0H,MAAQ,eAC9C1H,IAAW0H,GAAI1H,EAAS,QAAQ,IAE9B/K,EAAM,eAAe+K,CAAQ,GAAG;AAClC,YAAM0I,IAAcC,GAAc3I,CAAQ,GACpC4I,IAASC,GAAWV,GAAWnI,EAAS,KAAK;AACnD,aAAIA,EAAS,SAAS/K,EAAM,aAC1B2T,EAAO,MAAMV,IAAed,GAAYc,GAAcQ,CAAW,IAAIA,IAEhEzT,EAAM,aAAa+K,GAAU4I,CAAM;AAAA,IAC5C;AACA,WAAO3T,EAAM,SAAS,MAAM+K,CAAQ,IAAI,IAAI/K,EAAM,SAAS,KAAK,IAAI,IAAI;AAAA,EAC1E,CAAC;AACD,SAAA8S,EAAU,cAAc,GAAGD,CAAS,cAC7BC;AACT;AACA,IAAIe,KAAuB,OAAO,iBAAiB;AAWnD,SAASR,GAAYtJ,GAAO;AAC1B,SAAO/J,EAAM,eAAe+J,CAAK,KAAK,OAAOA,EAAM,QAAS,cAAc,eAAeA,EAAM,QAAQA,EAAM,KAAK,cAAc8J;AAClI;AACA,SAASD,GAAWV,GAAWY,GAAY;AACzC,QAAMC,IAAgB,EAAE,GAAGD,EAAU;AACrC,aAAWpL,KAAYoL,GAAY;AACjC,UAAME,IAAgBd,EAAUxK,CAAQ,GAClCuL,IAAiBH,EAAWpL,CAAQ;AAE1C,IADkB,WAAW,KAAKA,CAAQ,IAEpCsL,KAAiBC,IACnBF,EAAcrL,CAAQ,IAAI,IAAInH,MAAS;AACrC,YAAMsL,IAASoH,EAAe,GAAG1S,CAAI;AACrC,aAAAyS,EAAc,GAAGzS,CAAI,GACdsL;AAAA,IACT,IACSmH,MACTD,EAAcrL,CAAQ,IAAIsL,KAEnBtL,MAAa,UACtBqL,EAAcrL,CAAQ,IAAI,EAAE,GAAGsL,GAAe,GAAGC,EAAc,IACtDvL,MAAa,gBACtBqL,EAAcrL,CAAQ,IAAI,CAACsL,GAAeC,CAAc,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,EAEtF;AACA,SAAO,EAAE,GAAGf,GAAW,GAAGa,EAAa;AACzC;AACA,SAASL,GAAcvN,GAAS;;AAC9B,MAAI0B,KAASmG,IAAA,OAAO,yBAAyB7H,EAAQ,OAAO,KAAK,MAApD,gBAAA6H,EAAuD,KAChEkG,IAAUrM,KAAU,oBAAoBA,KAAUA,EAAO;AAC7D,SAAIqM,IACK/N,EAAQ,OAEjB0B,KAASsM,IAAA,OAAO,yBAAyBhO,GAAS,KAAK,MAA9C,gBAAAgO,EAAiD,KAC1DD,IAAUrM,KAAU,oBAAoBA,KAAUA,EAAO,gBACrDqM,IACK/N,EAAQ,MAAM,MAEhBA,EAAQ,MAAM,OAAOA,EAAQ;AACtC;AC9GA,SAASiO,GAAEvU,GAAE;AAAC,MAAI,GAAEb,GAAEK,IAAE;AAAG,MAAa,OAAOQ,KAAjB,YAA8B,OAAOA,KAAjB,SAAmB,CAAAR,KAAGQ;AAAA,WAAoB,OAAOA,KAAjB,SAAmB,KAAG,MAAM,QAAQA,CAAC,GAAE;AAAC,QAAIwU,IAAExU,EAAE;AAAO,SAAI,IAAE,GAAE,IAAEwU,GAAE,IAAI,CAAAxU,EAAE,CAAC,MAAIb,IAAEoV,GAAEvU,EAAE,CAAC,CAAC,OAAKR,MAAIA,KAAG,MAAKA,KAAGL;AAAA,EAAE,MAAM,MAAIA,KAAKa,EAAE,CAAAA,EAAEb,CAAC,MAAIK,MAAIA,KAAG,MAAKA,KAAGL;AAAG,SAAOK;AAAC;AAAQ,SAASiV,KAAM;AAAC,WAAQzU,GAAE,GAAEb,IAAE,GAAEK,IAAE,IAAGgV,IAAE,UAAU,QAAOrV,IAAEqV,GAAErV,IAAI,EAACa,IAAE,UAAUb,CAAC,OAAK,IAAEoV,GAAEvU,CAAC,OAAKR,MAAIA,KAAG,MAAKA,KAAG;AAAG,SAAOA;AAAC;ACe/W,MAAMkV,KAAgB,CAACrN,MAAQ,OAAOA,KAAU,YAAY,GAAGA,CAAK,KAAKA,MAAU,IAAI,MAAMA,GAChFsN,KAAKF,IACLG,KAAM,CAACC,GAAM9M,MAAS,CAAC5D,MAAQ;AACpC,MAAI2Q;AACJ,OAAK/M,KAAW,OAA4B,SAASA,EAAO,aAAa,KAAM,QAAO4M,GAAGE,GAAM1Q,KAAU,OAA2B,SAASA,EAAM,OAAOA,KAAU,OAA2B,SAASA,EAAM,SAAS;AACvN,QAAM,EAAE,UAAA4Q,GAAU,iBAAAC,EAAe,IAAKjN,GAChCkN,IAAuB,OAAO,KAAKF,CAAQ,EAAE,IAAI,CAACG,MAAU;AAC9D,UAAMC,IAAchR,KAAU,OAA2B,SAASA,EAAM+Q,CAAO,GACzEE,IAAqBJ,KAAoB,OAAqC,SAASA,EAAgBE,CAAO;AACpH,QAAIC,MAAgB,KAAM,QAAO;AACjC,UAAME,IAAaX,GAAcS,CAAW,KAAKT,GAAcU,CAAkB;AACjF,WAAOL,EAASG,CAAO,EAAEG,CAAU;AAAA,EACvC,CAAC,GACKC,IAAwBnR,KAAS,OAAO,QAAQA,CAAK,EAAE,OAAO,CAACoR,GAAKC,MAAQ;AAC9E,QAAI,CAAC/M,GAAKpB,CAAK,IAAImO;AACnB,WAAInO,MAAU,WAGdkO,EAAI9M,CAAG,IAAIpB,IACJkO;AAAA,EACX,GAAG,CAAA,CAAE,GACCE,IAA+B1N,KAAW,SAAsC+M,IAA2B/M,EAAO,sBAAsB,QAAQ+M,MAA6B,SAAvG,SAAyHA,EAAyB,OAAO,CAACS,GAAKC,MAAQ;AAC/O,QAAI,EAAE,OAAOE,GAAS,WAAWC,GAAa,GAAGC,EAAsB,IAAKJ;AAC5E,WAAO,OAAO,QAAQI,CAAsB,EAAE,MAAM,CAACJ,MAAQ;AACzD,UAAI,CAAC/M,GAAKpB,CAAK,IAAImO;AACnB,aAAO,MAAM,QAAQnO,CAAK,IAAIA,EAAM,SAAS;AAAA,QACzC,GAAG2N;AAAA,QACH,GAAGM;AAAA,MACvB,EAAkB7M,CAAG,CAAC,IAAK;AAAA,QACP,GAAGuM;AAAA,QACH,GAAGM;AAAA,MACvB,EAAmB7M,CAAG,MAAMpB;AAAA,IAChB,CAAC,IAAI;AAAA,MACD,GAAGkO;AAAA,MACHG;AAAA,MACAC;AAAA,IAChB,IAAgBJ;AAAA,EACR,GAAG,CAAA,CAAE;AACL,SAAOZ,GAAGE,GAAMI,GAAsBQ,GAA8BtR,KAAU,OAA2B,SAASA,EAAM,OAAOA,KAAU,OAA2B,SAASA,EAAM,SAAS;AAChM,GCtDE0R,KAAuB,KACvBC,KAAwB,CAAA/N,MAAU;AACtC,QAAMgO,IAAWC,GAAejO,CAAM,GAChC;AAAA,IACJ,wBAAAkO;AAAA,IACA,gCAAAC;AAAA,EACJ,IAAMnO;AAgBJ,SAAO;AAAA,IACL,iBAhBsB,CAAAoF,MAAa;AACnC,YAAMgJ,IAAahJ,EAAU,MAAM0I,EAAoB;AAEvD,aAAIM,EAAW,CAAC,MAAM,MAAMA,EAAW,WAAW,KAChDA,EAAW,MAAK,GAEXC,GAAkBD,GAAYJ,CAAQ,KAAKM,GAA+BlJ,CAAS;AAAA,IAC5F;AAAA,IAUE,6BATkC,CAACmJ,GAAcC,MAAuB;AACxE,YAAMC,IAAYP,EAAuBK,CAAY,KAAK,CAAA;AAC1D,aAAIC,KAAsBL,EAA+BI,CAAY,IAC5D,CAAC,GAAGE,GAAW,GAAGN,EAA+BI,CAAY,CAAC,IAEhEE;AAAA,IACT;AAAA,EAIF;AACA,GACMJ,KAAoB,CAACD,GAAYM,MAAoB;;AACzD,MAAIN,EAAW,WAAW;AACxB,WAAOM,EAAgB;AAEzB,QAAMC,IAAmBP,EAAW,CAAC,GAC/BQ,IAAsBF,EAAgB,SAAS,IAAIC,CAAgB,GACnEE,IAA8BD,IAAsBP,GAAkBD,EAAW,MAAM,CAAC,GAAGQ,CAAmB,IAAI;AACxH,MAAIC;AACF,WAAOA;AAET,MAAIH,EAAgB,WAAW,WAAW;AACxC;AAEF,QAAMI,IAAYV,EAAW,KAAKN,EAAoB;AACtD,UAAO1H,IAAAsI,EAAgB,WAAW,KAAK,CAAC;AAAA,IACtC,WAAAK;AAAA,EACJ,MAAQA,EAAUD,CAAS,CAAC,MAFnB,gBAAA1I,EAEsB;AAC/B,GACM4I,KAAyB,cACzBV,KAAiC,CAAAlJ,MAAa;AAClD,MAAI4J,GAAuB,KAAK5J,CAAS,GAAG;AAC1C,UAAM6J,IAA6BD,GAAuB,KAAK5J,CAAS,EAAE,CAAC,GACrE8J,IAAWD,KAAA,gBAAAA,EAA4B,UAAU,GAAGA,EAA2B,QAAQ,GAAG;AAChG,QAAIC;AAEF,aAAO,gBAAgBA;AAAA,EAE3B;AACF,GAIMjB,KAAiB,CAAAjO,MAAU;AAC/B,QAAM;AAAA,IACJ,OAAAmP;AAAA,IACA,QAAA5S;AAAA,EACJ,IAAMyD,GACEgO,IAAW;AAAA,IACf,UAAU,oBAAI,IAAG;AAAA,IACjB,YAAY,CAAA;AAAA,EAChB;AAEE,SADkCoB,GAA6B,OAAO,QAAQpP,EAAO,WAAW,GAAGzD,CAAM,EAC/E,QAAQ,CAAC,CAACgS,GAAcc,CAAU,MAAM;AAChE,IAAAC,GAA0BD,GAAYrB,GAAUO,GAAcY,CAAK;AAAA,EACrE,CAAC,GACMnB;AACT,GACMsB,KAA4B,CAACD,GAAYX,GAAiBH,GAAcY,MAAU;AACtF,EAAAE,EAAW,QAAQ,CAAAE,MAAmB;AACpC,QAAI,OAAOA,KAAoB,UAAU;AACvC,YAAMC,IAAwBD,MAAoB,KAAKb,IAAkBe,GAAQf,GAAiBa,CAAe;AACjH,MAAAC,EAAsB,eAAejB;AACrC;AAAA,IACF;AACA,QAAI,OAAOgB,KAAoB,YAAY;AACzC,UAAIG,GAAcH,CAAe,GAAG;AAClC,QAAAD,GAA0BC,EAAgBJ,CAAK,GAAGT,GAAiBH,GAAcY,CAAK;AACtF;AAAA,MACF;AACA,MAAAT,EAAgB,WAAW,KAAK;AAAA,QAC9B,WAAWa;AAAA,QACX,cAAAhB;AAAA,MACR,CAAO;AACD;AAAA,IACF;AACA,WAAO,QAAQgB,CAAe,EAAE,QAAQ,CAAC,CAAC7O,GAAK2O,CAAU,MAAM;AAC7D,MAAAC,GAA0BD,GAAYI,GAAQf,GAAiBhO,CAAG,GAAG6N,GAAcY,CAAK;AAAA,IAC1F,CAAC;AAAA,EACH,CAAC;AACH,GACMM,KAAU,CAACf,GAAiBiB,MAAS;AACzC,MAAIC,IAAyBlB;AAC7B,SAAAiB,EAAK,MAAM7B,EAAoB,EAAE,QAAQ,CAAA+B,MAAY;AACnD,IAAKD,EAAuB,SAAS,IAAIC,CAAQ,KAC/CD,EAAuB,SAAS,IAAIC,GAAU;AAAA,MAC5C,UAAU,oBAAI,IAAG;AAAA,MACjB,YAAY,CAAA;AAAA,IACpB,CAAO,GAEHD,IAAyBA,EAAuB,SAAS,IAAIC,CAAQ;AAAA,EACvE,CAAC,GACMD;AACT,GACMF,KAAgB,CAAAI,MAAQA,EAAK,eAC7BV,KAA+B,CAACW,GAAmBxT,MAClDA,IAGEwT,EAAkB,IAAI,CAAC,CAACxB,GAAcc,CAAU,MAAM;AAC3D,QAAMW,IAAqBX,EAAW,IAAI,CAAAE,MACpC,OAAOA,KAAoB,WACtBhT,IAASgT,IAEd,OAAOA,KAAoB,WACtB,OAAO,YAAY,OAAO,QAAQA,CAAe,EAAE,IAAI,CAAC,CAAC7O,GAAKpB,CAAK,MAAM,CAAC/C,IAASmE,GAAKpB,CAAK,CAAC,CAAC,IAEjGiQ,CACR;AACD,SAAO,CAAChB,GAAcyB,CAAkB;AAC1C,CAAC,IAbQD,GAiBLE,KAAiB,CAAAC,MAAgB;AACrC,MAAIA,IAAe;AACjB,WAAO;AAAA,MACL,KAAK,MAAA;AAAA;AAAA,MACL,KAAK,MAAM;AAAA,MAAC;AAAA,IAClB;AAEE,MAAIC,IAAY,GACZC,IAAQ,oBAAI,IAAG,GACfC,IAAgB,oBAAI,IAAG;AAC3B,QAAMC,IAAS,CAAC5P,GAAKpB,MAAU;AAC7B,IAAA8Q,EAAM,IAAI1P,GAAKpB,CAAK,GACpB6Q,KACIA,IAAYD,MACdC,IAAY,GACZE,IAAgBD,GAChBA,IAAQ,oBAAI,IAAG;AAAA,EAEnB;AACA,SAAO;AAAA,IACL,IAAI1P,GAAK;AACP,UAAIpB,IAAQ8Q,EAAM,IAAI1P,CAAG;AACzB,UAAIpB,MAAU;AACZ,eAAOA;AAET,WAAKA,IAAQ+Q,EAAc,IAAI3P,CAAG,OAAO;AACvC,eAAA4P,EAAO5P,GAAKpB,CAAK,GACVA;AAAA,IAEX;AAAA,IACA,IAAIoB,GAAKpB,GAAO;AACd,MAAI8Q,EAAM,IAAI1P,CAAG,IACf0P,EAAM,IAAI1P,GAAKpB,CAAK,IAEpBgR,EAAO5P,GAAKpB,CAAK;AAAA,IAErB;AAAA,EACJ;AACA,GACMiR,KAAqB,KACrBC,KAAuB,CAAAxQ,MAAU;AACrC,QAAM;AAAA,IACJ,WAAAyQ;AAAA,IACA,4BAAAC;AAAA,EACJ,IAAM1Q,GACE2Q,IAA6BF,EAAU,WAAW,GAClDG,IAA0BH,EAAU,CAAC,GACrCI,IAAkBJ,EAAU,QAE5BK,IAAiB,CAAA1L,MAAa;AAClC,UAAM2L,IAAY,CAAA;AAClB,QAAIC,IAAe,GACfC,IAAgB,GAChBC;AACJ,aAAS7K,IAAQ,GAAGA,IAAQjB,EAAU,QAAQiB,KAAS;AACrD,UAAI8K,IAAmB/L,EAAUiB,CAAK;AACtC,UAAI2K,MAAiB,GAAG;AACtB,YAAIG,MAAqBP,MAA4BD,KAA8BvL,EAAU,MAAMiB,GAAOA,IAAQwK,CAAe,MAAMJ,IAAY;AACjJ,UAAAM,EAAU,KAAK3L,EAAU,MAAM6L,GAAe5K,CAAK,CAAC,GACpD4K,IAAgB5K,IAAQwK;AACxB;AAAA,QACF;AACA,YAAIM,MAAqB,KAAK;AAC5B,UAAAD,IAA0B7K;AAC1B;AAAA,QACF;AAAA,MACF;AACA,MAAI8K,MAAqB,MACvBH,MACSG,MAAqB,OAC9BH;AAAA,IAEJ;AACA,UAAMI,IAAqCL,EAAU,WAAW,IAAI3L,IAAYA,EAAU,UAAU6L,CAAa,GAC3GI,IAAuBD,EAAmC,WAAWb,EAAkB,GACvFe,IAAgBD,IAAuBD,EAAmC,UAAU,CAAC,IAAIA,GACzFG,IAA+BL,KAA2BA,IAA0BD,IAAgBC,IAA0BD,IAAgB;AACpJ,WAAO;AAAA,MACL,WAAAF;AAAA,MACA,sBAAAM;AAAA,MACA,eAAAC;AAAA,MACA,8BAAAC;AAAA,IACN;AAAA,EACE;AACA,SAAIb,IACK,CAAAtL,MAAasL,EAA2B;AAAA,IAC7C,WAAAtL;AAAA,IACA,gBAAA0L;AAAA,EACN,CAAK,IAEIA;AACT,GAMMU,KAAgB,CAAAT,MAAa;AACjC,MAAIA,EAAU,UAAU;AACtB,WAAOA;AAET,QAAMU,IAAkB,CAAA;AACxB,MAAIC,IAAoB,CAAA;AACxB,SAAAX,EAAU,QAAQ,CAAAY,MAAY;AAE5B,IAD2BA,EAAS,CAAC,MAAM,OAEzCF,EAAgB,KAAK,GAAGC,EAAkB,KAAI,GAAIC,CAAQ,GAC1DD,IAAoB,CAAA,KAEpBA,EAAkB,KAAKC,CAAQ;AAAA,EAEnC,CAAC,GACDF,EAAgB,KAAK,GAAGC,EAAkB,KAAI,CAAE,GACzCD;AACT,GACMG,KAAoB,CAAA5R,OAAW;AAAA,EACnC,OAAOiQ,GAAejQ,EAAO,SAAS;AAAA,EACtC,gBAAgBwQ,GAAqBxQ,CAAM;AAAA,EAC3C,GAAG+N,GAAsB/N,CAAM;AACjC,IACM6R,KAAsB,OACtBC,KAAiB,CAACC,GAAWC,MAAgB;AACjD,QAAM;AAAA,IACJ,gBAAAlB;AAAA,IACA,iBAAAmB;AAAA,IACA,6BAAAC;AAAA,EACJ,IAAMF,GAQEG,IAAwB,CAAA,GACxBC,IAAaL,EAAU,KAAI,EAAG,MAAMF,EAAmB;AAC7D,MAAI5M,IAAS;AACb,WAASoB,IAAQ+L,EAAW,SAAS,GAAG/L,KAAS,GAAGA,KAAS,GAAG;AAC9D,UAAMgM,IAAoBD,EAAW/L,CAAK,GACpC;AAAA,MACJ,WAAA0K;AAAA,MACA,sBAAAM;AAAA,MACA,eAAAC;AAAA,MACA,8BAAAC;AAAA,IACN,IAAQT,EAAeuB,CAAiB;AACpC,QAAI7D,IAAqB,EAAQ+C,GAC7BhD,IAAe0D,EAAgBzD,IAAqB8C,EAAc,UAAU,GAAGC,CAA4B,IAAID,CAAa;AAChI,QAAI,CAAC/C,GAAc;AACjB,UAAI,CAACC,GAAoB;AAEvB,QAAAvJ,IAASoN,KAAqBpN,EAAO,SAAS,IAAI,MAAMA,IAASA;AACjE;AAAA,MACF;AAEA,UADAsJ,IAAe0D,EAAgBX,CAAa,GACxC,CAAC/C,GAAc;AAEjB,QAAAtJ,IAASoN,KAAqBpN,EAAO,SAAS,IAAI,MAAMA,IAASA;AACjE;AAAA,MACF;AACA,MAAAuJ,IAAqB;AAAA,IACvB;AACA,UAAM8D,IAAkBd,GAAcT,CAAS,EAAE,KAAK,GAAG,GACnDwB,IAAalB,IAAuBiB,IAAkB/B,KAAqB+B,GAC3EE,IAAUD,IAAahE;AAC7B,QAAI4D,EAAsB,SAASK,CAAO;AAExC;AAEF,IAAAL,EAAsB,KAAKK,CAAO;AAClC,UAAMC,IAAiBP,EAA4B3D,GAAcC,CAAkB;AACnF,aAAStM,IAAI,GAAGA,IAAIuQ,EAAe,QAAQ,EAAEvQ,GAAG;AAC9C,YAAMwQ,IAAQD,EAAevQ,CAAC;AAC9B,MAAAiQ,EAAsB,KAAKI,IAAaG,CAAK;AAAA,IAC/C;AAEA,IAAAzN,IAASoN,KAAqBpN,EAAO,SAAS,IAAI,MAAMA,IAASA;AAAA,EACnE;AACA,SAAOA;AACT;AAWA,SAAS0N,KAAS;AAChB,MAAItM,IAAQ,GACRuM,GACAC,GACAC,IAAS;AACb,SAAOzM,IAAQ,UAAU;AACvB,KAAIuM,IAAW,UAAUvM,GAAO,OAC1BwM,IAAgBE,GAAQH,CAAQ,OAClCE,MAAWA,KAAU,MACrBA,KAAUD;AAIhB,SAAOC;AACT;AACA,MAAMC,KAAU,CAAAC,MAAO;AACrB,MAAI,OAAOA,KAAQ;AACjB,WAAOA;AAET,MAAIH,GACAC,IAAS;AACb,WAASxb,IAAI,GAAGA,IAAI0b,EAAI,QAAQ1b;AAC9B,IAAI0b,EAAI1b,CAAC,MACHub,IAAgBE,GAAQC,EAAI1b,CAAC,CAAC,OAChCwb,MAAWA,KAAU,MACrBA,KAAUD;AAIhB,SAAOC;AACT;AACA,SAASG,GAAoBC,MAAsBC,GAAkB;AACnE,MAAInB,GACAoB,GACAC,GACAC,IAAiBC;AACrB,WAASA,EAAkBxB,GAAW;AACpC,UAAM/R,IAASmT,EAAiB,OAAO,CAACK,GAAgBC,MAAwBA,EAAoBD,CAAc,GAAGN,GAAmB;AACxI,WAAAlB,IAAcJ,GAAkB5R,CAAM,GACtCoT,IAAWpB,EAAY,MAAM,KAC7BqB,IAAWrB,EAAY,MAAM,KAC7BsB,IAAiBI,GACVA,EAAc3B,CAAS;AAAA,EAChC;AACA,WAAS2B,EAAc3B,GAAW;AAChC,UAAM4B,IAAeP,EAASrB,CAAS;AACvC,QAAI4B;AACF,aAAOA;AAET,UAAM1O,IAAS6M,GAAeC,GAAWC,CAAW;AACpD,WAAAqB,EAAStB,GAAW9M,CAAM,GACnBA;AAAA,EACT;AACA,SAAO,WAA6B;AAClC,WAAOqO,EAAeX,GAAO,MAAM,MAAM,SAAS,CAAC;AAAA,EACrD;AACF;AACA,MAAMiB,KAAY,CAAAlT,MAAO;AACvB,QAAMmT,IAAc,CAAA1E,MAASA,EAAMzO,CAAG,KAAK,CAAA;AAC3C,SAAAmT,EAAY,gBAAgB,IACrBA;AACT,GACMC,KAAsB,8BACtBC,KAAgB,cAChBC,KAA6B,oBAAI,IAAI,CAAC,MAAM,QAAQ,QAAQ,CAAC,GAC7DC,KAAkB,oCAClBC,KAAkB,6HAClBC,KAAqB,4CAErBC,KAAc,mEACdC,KAAa,gGACbC,KAAW,CAAAhV,MAASiV,GAASjV,CAAK,KAAK0U,GAAc,IAAI1U,CAAK,KAAKyU,GAAc,KAAKzU,CAAK,GAC3FkV,KAAoB,CAAAlV,MAASmV,GAAoBnV,GAAO,UAAUoV,EAAY,GAC9EH,KAAW,CAAAjV,MAAS,EAAQA,KAAU,CAAC,OAAO,MAAM,OAAOA,CAAK,CAAC,GACjEqV,KAAoB,CAAArV,MAASmV,GAAoBnV,GAAO,UAAUiV,EAAQ,GAC1EK,KAAY,CAAAtV,MAAS,EAAQA,KAAU,OAAO,UAAU,OAAOA,CAAK,CAAC,GACrEuV,KAAY,CAAAvV,MAASA,EAAM,SAAS,GAAG,KAAKiV,GAASjV,EAAM,MAAM,GAAG,EAAE,CAAC,GACvEwV,KAAmB,CAAAxV,MAASwU,GAAoB,KAAKxU,CAAK,GAC1DyV,KAAe,CAAAzV,MAAS2U,GAAgB,KAAK3U,CAAK,GAClD0V,KAA0B,oBAAI,IAAI,CAAC,UAAU,QAAQ,YAAY,CAAC,GAClEC,KAAkB,CAAA3V,MAASmV,GAAoBnV,GAAO0V,IAAYE,EAAO,GACzEC,KAAsB,CAAA7V,MAASmV,GAAoBnV,GAAO,YAAY4V,EAAO,GAC7EE,KAA2B,oBAAI,IAAI,CAAC,SAAS,KAAK,CAAC,GACnDC,KAAmB,CAAA/V,MAASmV,GAAoBnV,GAAO8V,IAAaE,EAAO,GAC3EC,KAAoB,CAAAjW,MAASmV,GAAoBnV,GAAO,IAAIkW,EAAQ,GACpEC,KAAQ,MAAM,IACdhB,KAAsB,CAACnV,GAAOoW,GAAOC,MAAc;AACvD,QAAM1Q,IAAS6O,GAAoB,KAAKxU,CAAK;AAC7C,SAAI2F,IACEA,EAAO,CAAC,IACH,OAAOyQ,KAAU,WAAWzQ,EAAO,CAAC,MAAMyQ,IAAQA,EAAM,IAAIzQ,EAAO,CAAC,CAAC,IAEvE0Q,EAAU1Q,EAAO,CAAC,CAAC,IAErB;AACT,GACMyP,KAAe,CAAApV;AAAA;AAAA;AAAA;AAAA,EAIrB4U,GAAgB,KAAK5U,CAAK,KAAK,CAAC6U,GAAmB,KAAK7U,CAAK;AAAA,GACvD4V,KAAU,MAAM,IAChBM,KAAW,CAAAlW,MAAS8U,GAAY,KAAK9U,CAAK,GAC1CgW,KAAU,CAAAhW,MAAS+U,GAAW,KAAK/U,CAAK,GAmBxCsW,KAAmB,MAAM;AAC7B,QAAMC,IAASjC,GAAU,QAAQ,GAC3BkC,IAAUlC,GAAU,SAAS,GAC7BmC,IAAOnC,GAAU,MAAM,GACvBoC,IAAapC,GAAU,YAAY,GACnCqC,IAAcrC,GAAU,aAAa,GACrCsC,IAAetC,GAAU,cAAc,GACvCuC,IAAgBvC,GAAU,eAAe,GACzCwC,IAAcxC,GAAU,aAAa,GACrCyC,IAAWzC,GAAU,UAAU,GAC/B0C,IAAY1C,GAAU,WAAW,GACjC2C,IAAY3C,GAAU,WAAW,GACjC4C,IAAS5C,GAAU,QAAQ,GAC3B6C,IAAM7C,GAAU,KAAK,GACrB8C,IAAqB9C,GAAU,oBAAoB,GACnD+C,IAA6B/C,GAAU,4BAA4B,GACnEgD,IAAQhD,GAAU,OAAO,GACzBiD,IAASjD,GAAU,QAAQ,GAC3BkD,IAAUlD,GAAU,SAAS,GAC7BmD,IAAUnD,GAAU,SAAS,GAC7BoD,IAAWpD,GAAU,UAAU,GAC/BqD,IAAQrD,GAAU,OAAO,GACzBsD,IAAQtD,GAAU,OAAO,GACzBuD,IAAOvD,GAAU,MAAM,GACvBwD,IAAQxD,GAAU,OAAO,GACzByD,IAAYzD,GAAU,WAAW,GACjC0D,IAAgB,MAAM,CAAC,QAAQ,WAAW,MAAM,GAChDC,IAAc,MAAM,CAAC,QAAQ,UAAU,QAAQ,WAAW,QAAQ,GAClEC,IAAiC,MAAM,CAAC,QAAQ1C,IAAkBgB,CAAO,GACzE2B,IAA0B,MAAM,CAAC3C,IAAkBgB,CAAO,GAC1D4B,IAAiC,MAAM,CAAC,IAAIpD,IAAUE,EAAiB,GACvEmD,IAAgC,MAAM,CAAC,QAAQpD,IAAUO,EAAgB,GACzE8C,IAAe,MAAM,CAAC,UAAU,UAAU,QAAQ,eAAe,YAAY,SAAS,gBAAgB,aAAa,KAAK,GACxHC,IAAgB,MAAM,CAAC,SAAS,UAAU,UAAU,UAAU,MAAM,GACpEC,IAAgB,MAAM,CAAC,UAAU,YAAY,UAAU,WAAW,UAAU,WAAW,eAAe,cAAc,cAAc,cAAc,cAAc,aAAa,OAAO,cAAc,SAAS,YAAY,GACrNC,IAAW,MAAM,CAAC,SAAS,OAAO,UAAU,WAAW,UAAU,UAAU,SAAS,GACpFC,IAAkB,MAAM,CAAC,IAAI,KAAKlD,EAAgB,GAClDmD,IAAY,MAAM,CAAC,QAAQ,SAAS,OAAO,cAAc,QAAQ,QAAQ,SAAS,QAAQ,GAC1FC,KAAwB,MAAM,CAAC3D,IAAUO,EAAgB;AAC/D,SAAO;AAAA,IACL,WAAW;AAAA,IACX,WAAW;AAAA,IACX,OAAO;AAAA,MACL,QAAQ,CAACW,EAAK;AAAA,MACd,SAAS,CAACnB,IAAUE,EAAiB;AAAA,MACrC,MAAM,CAAC,QAAQ,IAAIO,IAAcD,EAAgB;AAAA,MACjD,YAAYoD,GAAqB;AAAA,MACjC,aAAa,CAACrC,CAAM;AAAA,MACpB,cAAc,CAAC,QAAQ,IAAI,QAAQd,IAAcD,EAAgB;AAAA,MACjE,eAAe2C,EAAuB;AAAA,MACtC,aAAaC,EAA8B;AAAA,MAC3C,UAAUQ,GAAqB;AAAA,MAC/B,WAAWF,EAAe;AAAA,MAC1B,WAAWE,GAAqB;AAAA,MAChC,QAAQF,EAAe;AAAA,MACvB,KAAKP,EAAuB;AAAA,MAC5B,oBAAoB,CAAC5B,CAAM;AAAA,MAC3B,4BAA4B,CAAChB,IAAWL,EAAiB;AAAA,MACzD,OAAOgD,EAA8B;AAAA,MACrC,QAAQA,EAA8B;AAAA,MACtC,SAASU,GAAqB;AAAA,MAC9B,SAAST,EAAuB;AAAA,MAChC,UAAUS,GAAqB;AAAA,MAC/B,OAAOA,GAAqB;AAAA,MAC5B,OAAOF,EAAe;AAAA,MACtB,MAAME,GAAqB;AAAA,MAC3B,OAAOT,EAAuB;AAAA,MAC9B,WAAWA,EAAuB;AAAA,IACxC;AAAA,IACI,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMX,QAAQ,CAAC;AAAA,QACP,QAAQ,CAAC,QAAQ,UAAU,SAAS3C,EAAgB;AAAA,MAC5D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,MAKvB,SAAS,CAAC;AAAA,QACR,SAAS,CAACC,EAAY;AAAA,MAC9B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,eAAekD,EAAS;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,gBAAgBA,EAAS;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,gBAAgB,CAAC,QAAQ,SAAS,cAAc,cAAc;AAAA,MACtE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,kBAAkB,CAAC,SAAS,OAAO;AAAA,MAC3C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,KAAK,CAAC;AAAA,QACJ,KAAK,CAAC,UAAU,SAAS;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC,SAAS,gBAAgB,UAAU,QAAQ,eAAe,SAAS,gBAAgB,iBAAiB,cAAc,gBAAgB,sBAAsB,sBAAsB,sBAAsB,mBAAmB,aAAa,aAAa,QAAQ,eAAe,YAAY,aAAa,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,MAKnT,OAAO,CAAC;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ,QAAQ,SAAS,KAAK;AAAA,MACvD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAO,CAAC,QAAQ,SAAS,QAAQ,QAAQ,SAAS,KAAK;AAAA,MAC/D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC,WAAW,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKvC,cAAc,CAAC;AAAA,QACb,QAAQ,CAAC,WAAW,SAAS,QAAQ,QAAQ,YAAY;AAAA,MACjE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC;AAAA,QAClB,QAAQ,CAAC,GAAGL,EAAY,GAAI9C,EAAgB;AAAA,MACpD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,UAAU,CAAC;AAAA,QACT,UAAUyC,EAAW;AAAA,MAC7B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAcA,EAAW;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAcA,EAAW;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,YAAYD,EAAa;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,gBAAgBA,EAAa;AAAA,MACrC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,gBAAgBA,EAAa;AAAA,MACrC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,UAAU,CAAC,UAAU,SAAS,YAAY,YAAY,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,MAK9D,OAAO,CAAC;AAAA,QACN,OAAO,CAACV,CAAK;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAW,CAACA,CAAK;AAAA,MACzB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAW,CAACA,CAAK;AAAA,MACzB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAO,CAACA,CAAK;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,KAAK,CAAC;AAAA,QACJ,KAAK,CAACA,CAAK;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,KAAK,CAAC;AAAA,QACJ,KAAK,CAACA,CAAK;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAO,CAACA,CAAK;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAACA,CAAK;AAAA,MACtB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,MAAM,CAAC;AAAA,QACL,MAAM,CAACA,CAAK;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC,WAAW,aAAa,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,MAK/C,GAAG,CAAC;AAAA,QACF,GAAG,CAAC,QAAQhC,IAAWE,EAAgB;AAAA,MAC/C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,OAAO,CAAC;AAAA,QACN,OAAO0C,EAA8B;AAAA,MAC7C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,MAAM,CAAC,OAAO,eAAe,OAAO,aAAa;AAAA,MACzD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,MAAM,CAAC,QAAQ,gBAAgB,QAAQ;AAAA,MAC/C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,MAAM,CAAC;AAAA,QACL,MAAM,CAAC,KAAK,QAAQ,WAAW,QAAQ1C,EAAgB;AAAA,MAC/D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,MAAM,CAAC;AAAA,QACL,MAAMkD,EAAe;AAAA,MAC7B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,QAAQ,CAAC;AAAA,QACP,QAAQA,EAAe;AAAA,MAC/B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ,QAAQpD,IAAWE,EAAgB;AAAA,MACpE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAACW,EAAK;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,KAAK,CAAC,QAAQ;AAAA,UACZ,MAAM,CAAC,QAAQb,IAAWE,EAAgB;AAAA,QACpD,GAAWA,EAAgB;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa6C,EAA6B;AAAA,MAClD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAWA,EAA6B;AAAA,MAChD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAAClC,EAAK;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,KAAK,CAAC,QAAQ;AAAA,UACZ,MAAM,CAACb,IAAWE,EAAgB;AAAA,QAC5C,GAAWA,EAAgB;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa6C,EAA6B;AAAA,MAClD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAWA,EAA6B;AAAA,MAChD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAAC,OAAO,OAAO,SAAS,aAAa,WAAW;AAAA,MACrE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAAC,QAAQ,OAAO,OAAO,MAAM7C,EAAgB;AAAA,MAClE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAAC,QAAQ,OAAO,OAAO,MAAMA,EAAgB;AAAA,MAClE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,KAAK,CAAC;AAAA,QACJ,KAAK,CAAC2B,CAAG;AAAA,MACjB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAACA,CAAG;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAACA,CAAG;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC;AAAA,QAClB,SAAS,CAAC,UAAU,GAAGsB,EAAQ,CAAE;AAAA,MACzC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,iBAAiB,CAAC,SAAS,OAAO,UAAU,SAAS;AAAA,MAC7D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,gBAAgB,CAAC,QAAQ,SAAS,OAAO,UAAU,SAAS;AAAA,MACpE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,SAAS,CAAC,UAAU,GAAGA,EAAQ,GAAI,UAAU;AAAA,MACrD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,OAAO,CAAC,SAAS,OAAO,UAAU,YAAY,SAAS;AAAA,MAC/D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,MAAM,CAAC,QAAQ,SAAS,OAAO,UAAU,WAAW,UAAU;AAAA,MACtE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,iBAAiB,CAAC,GAAGA,EAAQ,GAAI,UAAU;AAAA,MACnD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,eAAe,CAAC,SAAS,OAAO,UAAU,YAAY,SAAS;AAAA,MACvE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAAC,QAAQ,SAAS,OAAO,UAAU,SAAS;AAAA,MAClE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,GAAG,CAAC;AAAA,QACF,GAAG,CAAChB,CAAO;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAO;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAO;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAO;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAO;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAO;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAO;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAO;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAO;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,GAAG,CAAC;AAAA,QACF,GAAG,CAACF,CAAM;AAAA,MAClB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAW,CAACO,CAAK;AAAA,MACzB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKrC,WAAW,CAAC;AAAA,QACV,WAAW,CAACA,CAAK;AAAA,MACzB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMrC,GAAG,CAAC;AAAA,QACF,GAAG,CAAC,QAAQ,OAAO,OAAO,OAAO,OAAO,OAAO,OAAOtC,IAAkBgB,CAAO;AAAA,MACvF,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAChB,IAAkBgB,GAAS,OAAO,OAAO,KAAK;AAAA,MAChE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAChB,IAAkBgB,GAAS,QAAQ,QAAQ,OAAO,OAAO,OAAO,SAAS;AAAA,UACjF,QAAQ,CAACf,EAAY;AAAA,QAC/B,GAAWA,EAAY;AAAA,MACvB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,GAAG,CAAC;AAAA,QACF,GAAG,CAACD,IAAkBgB,GAAS,QAAQ,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,MACvF,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAChB,IAAkBgB,GAAS,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,MACrF,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAChB,IAAkBgB,GAAS,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,MACrF,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,MAAM,CAAC;AAAA,QACL,MAAM,CAAChB,IAAkBgB,GAAS,QAAQ,OAAO,OAAO,KAAK;AAAA,MACrE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,aAAa,CAAC;AAAA,QACZ,MAAM,CAAC,QAAQf,IAAcP,EAAiB;AAAA,MACtD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC,eAAe,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKxD,cAAc,CAAC,UAAU,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,MAKrC,eAAe,CAAC;AAAA,QACd,MAAM,CAAC,QAAQ,cAAc,SAAS,UAAU,UAAU,YAAY,QAAQ,aAAa,SAASG,EAAiB;AAAA,MAC7H,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,MAAM,CAACc,EAAK;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,MAK5B,eAAe,CAAC,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,MAKzB,oBAAoB,CAAC,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,MAKnC,cAAc,CAAC,eAAe,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,MAK7C,eAAe,CAAC,qBAAqB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,MAKnD,gBAAgB,CAAC,sBAAsB,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA,MAK1D,UAAU,CAAC;AAAA,QACT,UAAU,CAAC,WAAW,SAAS,UAAU,QAAQ,SAAS,UAAUX,EAAgB;AAAA,MAC5F,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAAC,QAAQP,IAAUI,EAAiB;AAAA,MAC1D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAC,QAAQ,SAAS,QAAQ,UAAU,WAAW,SAASL,IAAUQ,EAAgB;AAAA,MACnG,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAAC,QAAQA,EAAgB;AAAA,MAC/C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC;AAAA,QAClB,MAAM,CAAC,QAAQ,QAAQ,WAAWA,EAAgB;AAAA,MAC1D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,uBAAuB,CAAC;AAAA,QACtB,MAAM,CAAC,UAAU,SAAS;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,qBAAqB,CAAC;AAAA,QACpB,aAAa,CAACe,CAAM;AAAA,MAC5B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,uBAAuB,CAAC;AAAA,QACtB,uBAAuB,CAACiB,CAAO;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,MAAM,CAAC,QAAQ,UAAU,SAAS,WAAW,SAAS,KAAK;AAAA,MACnE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,MAAM,CAACjB,CAAM;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,gBAAgB,CAACiB,CAAO;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC,aAAa,YAAY,gBAAgB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,MAK3E,yBAAyB,CAAC;AAAA,QACxB,YAAY,CAAC,GAAGe,EAAa,GAAI,MAAM;AAAA,MAC/C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,6BAA6B,CAAC;AAAA,QAC5B,YAAY,CAAC,QAAQ,aAAavD,IAAUE,EAAiB;AAAA,MACrE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,oBAAoB,CAAC;AAAA,QACnB,oBAAoB,CAAC,QAAQF,IAAUQ,EAAgB;AAAA,MAC/D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,yBAAyB,CAAC;AAAA,QACxB,YAAY,CAACe,CAAM;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC,aAAa,aAAa,cAAc,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,MAKxE,iBAAiB,CAAC,YAAY,iBAAiB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,MAK1D,aAAa,CAAC;AAAA,QACZ,MAAM,CAAC,QAAQ,UAAU,WAAW,QAAQ;AAAA,MACpD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,QAAQ,CAAC;AAAA,QACP,QAAQ4B,EAAuB;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,OAAO,CAAC,YAAY,OAAO,UAAU,UAAU,YAAY,eAAe,OAAO,SAAS3C,EAAgB;AAAA,MAClH,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,YAAY,CAAC,UAAU,UAAU,OAAO,YAAY,YAAY,cAAc;AAAA,MACtF,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAO,CAAC,UAAU,SAAS,OAAO,MAAM;AAAA,MAChD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAC,QAAQ,UAAU,MAAM;AAAA,MAC1C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAC,QAAQA,EAAgB;AAAA,MAC1C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,iBAAiB,CAAC;AAAA,QAChB,IAAI,CAAC,SAAS,SAAS,QAAQ;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAW,CAAC,UAAU,WAAW,WAAW,MAAM;AAAA,MAC1D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,cAAc,CAAC;AAAA,QACb,cAAc,CAACgC,CAAO;AAAA,MAC9B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAAC,UAAU,WAAW,SAAS;AAAA,MACpD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,IAAI,CAAC,GAAGc,EAAY,GAAIzC,EAAmB;AAAA,MACnD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,IAAI,CAAC,aAAa;AAAA,UAChB,QAAQ,CAAC,IAAI,KAAK,KAAK,SAAS,OAAO;AAAA,QACjD,CAAS;AAAA,MACT,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,IAAI,CAAC,QAAQ,SAAS,WAAWF,EAAe;AAAA,MACxD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,IAAI,CAAC,QAAQ;AAAA,UACX,eAAe,CAAC,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,IAAI;AAAA,QACpE,GAAWI,EAAgB;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,IAAI,CAACQ,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,qBAAqB,CAAC;AAAA,QACpB,MAAM,CAACc,CAA0B;AAAA,MACzC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,oBAAoB,CAAC;AAAA,QACnB,KAAK,CAACA,CAA0B;AAAA,MACxC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC;AAAA,QAClB,IAAI,CAACA,CAA0B;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,MAAM,CAACD,CAAkB;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,KAAK,CAACA,CAAkB;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,IAAI,CAACA,CAAkB;AAAA,MAC/B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,SAAS,CAAC;AAAA,QACR,SAAS,CAACR,CAAY;AAAA,MAC9B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAACA,CAAY;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAACA,CAAY;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAACA,CAAY;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAACA,CAAY;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAACA,CAAY;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAACA,CAAY;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACA,CAAY;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACA,CAAY;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACA,CAAY;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACA,CAAY;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACA,CAAY;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACA,CAAY;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACA,CAAY;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACA,CAAY;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,QAAQ,CAACE,CAAW;AAAA,MAC5B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,kBAAkB,CAACU,CAAO;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,QAAQ,CAAC,GAAGe,EAAa,GAAI,QAAQ;AAAA,MAC7C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,YAAY,CAACzB,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,oBAAoB,CAAC,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKvC,YAAY,CAAC;AAAA,QACX,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,oBAAoB,CAAC,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKvC,kBAAkB,CAAC;AAAA,QACjB,kBAAkB,CAACU,CAAO;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,QAAQe,EAAa;AAAA,MAC7B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,QAAQ,CAAC5B,CAAW;AAAA,MAC5B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,QAAQ,CAACA,CAAW;AAAA,MAC5B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,SAAS,CAAC,IAAI,GAAG4B,EAAa,CAAE;AAAA,MACxC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,kBAAkB,CAACvD,IAAUQ,EAAgB;AAAA,MACrD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,SAAS,CAACR,IAAUE,EAAiB;AAAA,MAC7C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,SAAS,CAACqB,CAAM;AAAA,MACxB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,UAAU,CAAC;AAAA,QACT,MAAM6B,EAA8B;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,MAK7B,cAAc,CAAC;AAAA,QACb,MAAM,CAAC7B,CAAM;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,gBAAgB,CAACiB,CAAO;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,eAAe,CAACxC,IAAUE,EAAiB;AAAA,MACnD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,qBAAqB,CAAC;AAAA,QACpB,eAAe,CAACqB,CAAM;AAAA,MAC9B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAAC,IAAI,SAAS,QAAQd,IAAcQ,EAAiB;AAAA,MACrE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,QAAQ,CAACE,EAAK;AAAA,MACtB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAACqB,CAAO;AAAA,MACzB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAAC,GAAGgB,EAAa,GAAI,gBAAgB,aAAa;AAAA,MACvE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,YAAYA,EAAa;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAAC,IAAI,MAAM;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,MAAM,CAAC;AAAA,QACL,MAAM,CAAC/B,CAAI;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,YAAY,CAACC,CAAU;AAAA,MAC/B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,UAAU,CAAC;AAAA,QACT,UAAU,CAACK,CAAQ;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,eAAe,CAAC,IAAI,QAAQtB,IAAcD,EAAgB;AAAA,MAClE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAW,CAACwB,CAAS;AAAA,MAC7B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACC,CAAS;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAACC,CAAM;AAAA,MACvB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,UAAU,CAAC;AAAA,QACT,UAAU,CAACQ,CAAQ;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAO,CAACE,CAAK;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,mBAAmB,CAAC;AAAA,QAClB,mBAAmB,CAAC,IAAI,MAAM;AAAA,MACtC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,iBAAiB,CAACnB,CAAI;AAAA,MAC9B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,uBAAuB,CAAC;AAAA,QACtB,uBAAuB,CAACC,CAAU;AAAA,MAC1C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,qBAAqB,CAAC;AAAA,QACpB,qBAAqB,CAACK,CAAQ;AAAA,MACtC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,sBAAsB,CAAC;AAAA,QACrB,sBAAsB,CAACC,CAAS;AAAA,MACxC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,uBAAuB,CAAC;AAAA,QACtB,uBAAuB,CAACC,CAAS;AAAA,MACzC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC;AAAA,QAClB,mBAAmB,CAACC,CAAM;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,oBAAoB,CAAC;AAAA,QACnB,oBAAoB,CAACM,CAAO;AAAA,MACpC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,qBAAqB,CAAC;AAAA,QACpB,qBAAqB,CAACE,CAAQ;AAAA,MACtC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,kBAAkB,CAACE,CAAK;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,mBAAmB,CAAC;AAAA,QAClB,QAAQ,CAAC,YAAY,UAAU;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,kBAAkB,CAACf,CAAa;AAAA,MACxC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,oBAAoB,CAAC;AAAA,QACnB,oBAAoB,CAACA,CAAa;AAAA,MAC1C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,oBAAoB,CAAC;AAAA,QACnB,oBAAoB,CAACA,CAAa;AAAA,MAC1C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,OAAO,CAAC,QAAQ,OAAO;AAAA,MAC/B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAC,OAAO,QAAQ;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,YAAY,CAAC;AAAA,QACX,YAAY,CAAC,QAAQ,OAAO,IAAI,UAAU,WAAW,UAAU,aAAarB,EAAgB;AAAA,MACpG,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,UAAU,CAAC;AAAA,QACT,UAAUoD,GAAqB;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,MAAM,CAAC;AAAA,QACL,MAAM,CAAC,UAAU,MAAM,OAAO,UAAUpD,EAAgB;AAAA,MAChE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAOoD,GAAqB;AAAA,MACpC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAC,QAAQ,QAAQ,QAAQ,SAAS,UAAUpD,EAAgB;AAAA,MAC7E,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,WAAW,CAAC;AAAA,QACV,WAAW,CAAC,IAAI,OAAO,MAAM;AAAA,MACrC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAO,CAACmC,CAAK;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAW,CAACA,CAAK;AAAA,MACzB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAW,CAACA,CAAK;AAAA,MACzB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAACrC,IAAWE,EAAgB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,eAAe,CAACuC,CAAS;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,eAAe,CAACA,CAAS;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,UAAU,CAAC;AAAA,QACT,UAAU,CAACF,CAAI;AAAA,MACvB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,UAAU,CAAC;AAAA,QACT,UAAU,CAACA,CAAI;AAAA,MACvB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,oBAAoB,CAAC;AAAA,QACnB,QAAQ,CAAC,UAAU,OAAO,aAAa,SAAS,gBAAgB,UAAU,eAAe,QAAQ,YAAYrC,EAAgB;AAAA,MACrI,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAAC,QAAQe,CAAM;AAAA,MAC/B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,YAAY,CAAC,QAAQ,MAAM;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAAC,QAAQ,WAAW,WAAW,QAAQ,QAAQ,QAAQ,QAAQ,eAAe,QAAQ,gBAAgB,YAAY,QAAQ,aAAa,iBAAiB,SAAS,QAAQ,WAAW,QAAQ,YAAY,cAAc,cAAc,cAAc,YAAY,YAAY,YAAY,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,eAAe,eAAe,WAAW,YAAYf,EAAgB;AAAA,MACrc,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,OAAO,CAACe,CAAM;AAAA,MACtB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,kBAAkB,CAAC,QAAQ,MAAM;AAAA,MACzC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAAC,QAAQ,KAAK,KAAK,EAAE;AAAA,MACrC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC;AAAA,QAClB,QAAQ,CAAC,QAAQ,QAAQ;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,YAAY4B,EAAuB;AAAA,MAC3C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,YAAYA,EAAuB;AAAA,MAC3C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,MAAM,CAAC,SAAS,OAAO,UAAU,YAAY;AAAA,MACrD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,MAAM,CAAC,UAAU,QAAQ;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,MAAM,CAAC,QAAQ,KAAK,KAAK,MAAM;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC;AAAA,QAClB,MAAM,CAAC,aAAa,WAAW;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ,cAAc;AAAA,MAC9C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,aAAa,CAAC,KAAK,QAAQ,OAAO;AAAA,MAC1C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,aAAa,CAAC,KAAK,MAAM,MAAM;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,MAK/B,QAAQ,CAAC;AAAA,QACP,QAAQ,CAAC,QAAQ,QAAQ,OAAO,MAAM;AAAA,MAC9C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,eAAe,CAAC,QAAQ,UAAU,YAAY,aAAa3C,EAAgB;AAAA,MACnF,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,MAAM,CAAC;AAAA,QACL,MAAM,CAACe,GAAQ,MAAM;AAAA,MAC7B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,QAAQ,CAACvB,IAAUE,IAAmBG,EAAiB;AAAA,MAC/D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAACkB,GAAQ,MAAM;AAAA,MAC/B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,IAAI,CAAC,WAAW,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,MAK7B,uBAAuB,CAAC;AAAA,QACtB,uBAAuB,CAAC,QAAQ,MAAM;AAAA,MAC9C,CAAO;AAAA,IACP;AAAA,IACI,wBAAwB;AAAA,MACtB,UAAU,CAAC,cAAc,YAAY;AAAA,MACrC,YAAY,CAAC,gBAAgB,cAAc;AAAA,MAC3C,OAAO,CAAC,WAAW,WAAW,SAAS,OAAO,OAAO,SAAS,UAAU,MAAM;AAAA,MAC9E,WAAW,CAAC,SAAS,MAAM;AAAA,MAC3B,WAAW,CAAC,OAAO,QAAQ;AAAA,MAC3B,MAAM,CAAC,SAAS,QAAQ,QAAQ;AAAA,MAChC,KAAK,CAAC,SAAS,OAAO;AAAA,MACtB,GAAG,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAAA,MAClD,IAAI,CAAC,MAAM,IAAI;AAAA,MACf,IAAI,CAAC,MAAM,IAAI;AAAA,MACf,GAAG,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAAA,MAClD,IAAI,CAAC,MAAM,IAAI;AAAA,MACf,IAAI,CAAC,MAAM,IAAI;AAAA,MACf,MAAM,CAAC,KAAK,GAAG;AAAA,MACf,aAAa,CAAC,SAAS;AAAA,MACvB,cAAc,CAAC,eAAe,oBAAoB,cAAc,eAAe,cAAc;AAAA,MAC7F,eAAe,CAAC,YAAY;AAAA,MAC5B,oBAAoB,CAAC,YAAY;AAAA,MACjC,cAAc,CAAC,YAAY;AAAA,MAC3B,eAAe,CAAC,YAAY;AAAA,MAC5B,gBAAgB,CAAC,YAAY;AAAA,MAC7B,cAAc,CAAC,WAAW,UAAU;AAAA,MACpC,SAAS,CAAC,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,YAAY;AAAA,MACtM,aAAa,CAAC,cAAc,YAAY;AAAA,MACxC,aAAa,CAAC,cAAc,YAAY;AAAA,MACxC,aAAa,CAAC,cAAc,YAAY;AAAA,MACxC,aAAa,CAAC,cAAc,YAAY;AAAA,MACxC,aAAa,CAAC,cAAc,YAAY;AAAA,MACxC,aAAa,CAAC,cAAc,YAAY;AAAA,MACxC,kBAAkB,CAAC,oBAAoB,kBAAkB;AAAA,MACzD,YAAY,CAAC,cAAc,cAAc,cAAc,cAAc,cAAc,YAAY;AAAA,MAC/F,cAAc,CAAC,cAAc,YAAY;AAAA,MACzC,cAAc,CAAC,cAAc,YAAY;AAAA,MACzC,gBAAgB,CAAC,kBAAkB,kBAAkB,kBAAkB,kBAAkB,kBAAkB,gBAAgB;AAAA,MAC3H,kBAAkB,CAAC,kBAAkB,gBAAgB;AAAA,MACrD,kBAAkB,CAAC,kBAAkB,gBAAgB;AAAA,MACrD,YAAY,CAAC,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW;AAAA,MACnH,aAAa,CAAC,aAAa,WAAW;AAAA,MACtC,aAAa,CAAC,aAAa,WAAW;AAAA,MACtC,YAAY,CAAC,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW;AAAA,MACnH,aAAa,CAAC,aAAa,WAAW;AAAA,MACtC,aAAa,CAAC,aAAa,WAAW;AAAA,MACtC,OAAO,CAAC,WAAW,WAAW,UAAU;AAAA,MACxC,WAAW,CAAC,OAAO;AAAA,MACnB,WAAW,CAAC,OAAO;AAAA,MACnB,YAAY,CAAC,OAAO;AAAA,IAC1B;AAAA,IACI,gCAAgC;AAAA,MAC9B,aAAa,CAAC,SAAS;AAAA,IAC7B;AAAA,EACA;AACA,GAiDMsC,KAAuB,gBAAAlF,GAAoB2C,EAAgB;ACz/E1D,SAASwC,MAAMC,GAAsB;AAC1C,SAAOF,GAAQzL,GAAK2L,CAAM,CAAC;AAC7B;ACCA,MAAMC,KAAiBzL;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,aAAa;AAAA,QACb,SAAS;AAAA,QACT,WAAW;AAAA,QACX,OAAO;AAAA,QACP,MAAM;AAAA,MAAA;AAAA,MAER,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,GAQM0L,KAASngB,EAAM;AAAA,EACnB,CAAC,EAAE,WAAAgN,GAAW,SAAA+H,GAAS,MAAAqL,GAAM,SAAAC,IAAU,IAAO,GAAGrc,EAAA,GAASuE,MAAQ;AAChE,UAAM+X,IAAOD,IAAU7M,KAAO;AAC9B,WAAOpI,gBAAAA,EAAAA,IAACkV,GAAA,EAAK,WAAWN,GAAGE,GAAe,EAAE,SAAAnL,GAAS,MAAAqL,GAAM,WAAApT,EAAA,CAAW,CAAC,GAAG,KAAAzE,GAAW,GAAGvE,EAAA,CAAO;AAAA,EACjG;AACF;AACAmc,GAAO,cAAc;AC1BrB,MAAMI,KAAcC,GAA2C,MAAS,GA8K3DC,KAAU,MAAM;AAC3B,QAAM1d,IAAU2d,GAAWH,EAAW;AACtC,MAAIxd,MAAY;AACd,UAAM,IAAI,MAAM,6CAA6C;AAE/D,SAAOA;AACT;AC1LA,SAAS4d,KAAG;AAAC,SAAM,EAAC,OAAM,IAAG,QAAO,IAAG,YAAW,MAAK,KAAI,IAAG,OAAM,MAAK,UAAS,IAAG,UAAS,MAAK,QAAO,IAAG,WAAU,MAAK,YAAW,KAAI;AAAC;AAAC,IAAIC,KAAED,GAAC;AAAG,SAASE,GAAE1hB,GAAE;AAACyhB,EAAAA,KAAEzhB;AAAC;AAAC,IAAI2hB,KAAE,EAAC,MAAK,MAAI,KAAI;AAAE,SAASlhB,GAAET,GAAEU,IAAE,IAAG;AAAC,MAAIkhB,IAAE,OAAO5hB,KAAG,WAASA,IAAEA,EAAE,QAAOE,IAAE,EAAC,SAAQ,CAAC,GAAE,MAAI;AAAC,QAAImG,IAAE,OAAO,KAAG,WAAS,IAAE,EAAE;AAAO,WAAOA,IAAEA,EAAE,QAAQpG,GAAE,OAAM,IAAI,GAAE2hB,IAAEA,EAAE,QAAQ,GAAEvb,CAAC,GAAEnG;AAAA,EAAC,GAAE,UAAS,MAAI,IAAI,OAAO0hB,GAAElhB,CAAC,EAAC;AAAE,SAAOR;AAAC;AAAC,IAAI2hB,MAAI,MAAI;AAAC,MAAG;AAAC,WAAM,CAAC,CAAC,IAAI,OAAO,cAAc;AAAA,EAAC,QAAM;AAAC,WAAM;AAAA,EAAE;AAAC,GAAC,GAAI5hB,KAAE,EAAC,kBAAiB,0BAAyB,mBAAkB,eAAc,wBAAuB,iBAAgB,gBAAe,QAAO,YAAW,MAAK,mBAAkB,MAAK,iBAAgB,MAAK,cAAa,QAAO,mBAAkB,OAAM,eAAc,OAAM,qBAAoB,QAAO,WAAU,YAAW,iBAAgB,qBAAoB,iBAAgB,YAAW,yBAAwB,kCAAiC,0BAAyB,oBAAmB,iBAAgB,QAAO,oBAAmB,2BAA0B,YAAW,eAAc,iBAAgB,gBAAe,SAAQ,UAAS,cAAa,YAAW,gBAAe,QAAO,iBAAgB,cAAa,mBAAkB,aAAY,iBAAgB,aAAY,kBAAiB,cAAa,gBAAe,aAAY,WAAU,SAAQ,SAAQ,WAAU,mBAAkB,kCAAiC,iBAAgB,oCAAmC,mBAAkB,MAAK,iBAAgB,MAAK,mBAAkB,iCAAgC,qBAAoB,iBAAgB,YAAW,WAAU,eAAc,YAAW,oBAAmB,qDAAoD,uBAAsB,sDAAqD,cAAa,8CAA6C,OAAM,gBAAe,eAAc,QAAO,UAAS,OAAM,WAAU,OAAM,WAAU,SAAQ,gBAAe,YAAW,WAAU,UAAS,eAAc,QAAO,eAAc,OAAM,eAAc,CAAAD,MAAG,IAAI,OAAO,WAAWA,CAAC,8BAA8B,GAAE,iBAAgB,CAAAA,MAAG,IAAI,OAAO,QAAQ,KAAK,IAAI,GAAEA,IAAE,CAAC,CAAC,oDAAoD,GAAE,SAAQ,CAAAA,MAAG,IAAI,OAAO,QAAQ,KAAK,IAAI,GAAEA,IAAE,CAAC,CAAC,oDAAoD,GAAE,kBAAiB,CAAAA,MAAG,IAAI,OAAO,QAAQ,KAAK,IAAI,GAAEA,IAAE,CAAC,CAAC,iBAAiB,GAAE,mBAAkB,CAAAA,MAAG,IAAI,OAAO,QAAQ,KAAK,IAAI,GAAEA,IAAE,CAAC,CAAC,IAAI,GAAE,gBAAe,CAAAA,MAAG,IAAI,OAAO,QAAQ,KAAK,IAAI,GAAEA,IAAE,CAAC,CAAC,sBAAqB,GAAG,EAAC,GAAE8hB,KAAG,wBAAuBC,KAAG,yDAAwDC,KAAG,+GAA8GC,KAAE,sEAAqEC,KAAG,wCAAuCC,KAAE,yBAAwBC,KAAG,kKAAiKC,KAAG5hB,GAAE2hB,EAAE,EAAE,QAAQ,SAAQD,EAAC,EAAE,QAAQ,cAAa,mBAAmB,EAAE,QAAQ,WAAU,uBAAuB,EAAE,QAAQ,eAAc,SAAS,EAAE,QAAQ,YAAW,cAAc,EAAE,QAAQ,SAAQ,mBAAmB,EAAE,QAAQ,YAAW,EAAE,EAAE,YAAWG,KAAG7hB,GAAE2hB,EAAE,EAAE,QAAQ,SAAQD,EAAC,EAAE,QAAQ,cAAa,mBAAmB,EAAE,QAAQ,WAAU,uBAAuB,EAAE,QAAQ,eAAc,SAAS,EAAE,QAAQ,YAAW,cAAc,EAAE,QAAQ,SAAQ,mBAAmB,EAAE,QAAQ,UAAS,mCAAmC,EAAE,SAAQ,GAAGI,KAAE,wFAAuFC,KAAG,WAAUC,KAAE,oCAAmCC,KAAGjiB,GAAE,6GAA6G,EAAE,QAAQ,SAAQgiB,EAAC,EAAE,QAAQ,SAAQ,8DAA8D,EAAE,SAAQ,GAAGE,KAAGliB,GAAE,sCAAsC,EAAE,QAAQ,SAAQ0hB,EAAC,EAAE,SAAQ,GAAGpQ,KAAE,iWAAgW6Q,KAAE,iCAAgCC,KAAGpiB,GAAE,6dAA4d,GAAG,EAAE,QAAQ,WAAUmiB,EAAC,EAAE,QAAQ,OAAM7Q,EAAC,EAAE,QAAQ,aAAY,0EAA0E,EAAE,SAAQ,GAAG+Q,KAAGriB,GAAE8hB,EAAC,EAAE,QAAQ,MAAKN,EAAC,EAAE,QAAQ,WAAU,uBAAuB,EAAE,QAAQ,aAAY,EAAE,EAAE,QAAQ,UAAS,EAAE,EAAE,QAAQ,cAAa,SAAS,EAAE,QAAQ,UAAS,gDAAgD,EAAE,QAAQ,QAAO,wBAAwB,EAAE,QAAQ,QAAO,6DAA6D,EAAE,QAAQ,OAAMlQ,EAAC,EAAE,SAAQ,GAAGgR,KAAGtiB,GAAE,yCAAyC,EAAE,QAAQ,aAAYqiB,EAAE,EAAE,SAAQ,GAAGE,KAAE,EAAC,YAAWD,IAAG,MAAKhB,IAAG,KAAIW,IAAG,QAAOV,IAAG,SAAQE,IAAG,IAAGD,IAAE,MAAKY,IAAG,UAASR,IAAG,MAAKM,IAAG,SAAQb,IAAG,WAAUgB,IAAG,OAAMnB,IAAE,MAAKa,GAAE,GAAES,KAAGxiB,GAAE,6JAA6J,EAAE,QAAQ,MAAKwhB,EAAC,EAAE,QAAQ,WAAU,uBAAuB,EAAE,QAAQ,cAAa,SAAS,EAAE,QAAQ,QAAO,wBAAwB,EAAE,QAAQ,UAAS,gDAAgD,EAAE,QAAQ,QAAO,wBAAwB,EAAE,QAAQ,QAAO,6DAA6D,EAAE,QAAQ,OAAMlQ,EAAC,EAAE,SAAQ,GAAGmR,KAAG,EAAC,GAAGF,IAAE,UAASV,IAAG,OAAMW,IAAG,WAAUxiB,GAAE8hB,EAAC,EAAE,QAAQ,MAAKN,EAAC,EAAE,QAAQ,WAAU,uBAAuB,EAAE,QAAQ,aAAY,EAAE,EAAE,QAAQ,SAAQgB,EAAE,EAAE,QAAQ,cAAa,SAAS,EAAE,QAAQ,UAAS,gDAAgD,EAAE,QAAQ,QAAO,wBAAwB,EAAE,QAAQ,QAAO,6DAA6D,EAAE,QAAQ,OAAMlR,EAAC,EAAE,SAAQ,EAAE,GAAEoR,KAAG,EAAC,GAAGH,IAAE,MAAKviB,GAAE,wIAAwI,EAAE,QAAQ,WAAUmiB,EAAC,EAAE,QAAQ,QAAO,mKAAmK,EAAE,SAAQ,GAAG,KAAI,qEAAoE,SAAQ,0BAAyB,QAAOjB,IAAE,UAAS,oCAAmC,WAAUlhB,GAAE8hB,EAAC,EAAE,QAAQ,MAAKN,EAAC,EAAE,QAAQ,WAAU;AAAA,EACn1N,EAAE,QAAQ,YAAWI,EAAE,EAAE,QAAQ,UAAS,EAAE,EAAE,QAAQ,cAAa,SAAS,EAAE,QAAQ,WAAU,EAAE,EAAE,QAAQ,SAAQ,EAAE,EAAE,QAAQ,SAAQ,EAAE,EAAE,QAAQ,QAAO,EAAE,EAAE,SAAQ,EAAE,GAAEe,KAAG,+CAA8CC,KAAG,uCAAsCC,KAAG,yBAAwBC,KAAG,+EAA8EC,KAAE,iBAAgBC,KAAE,mBAAkBC,KAAG,oBAAmBC,KAAGljB,GAAE,yBAAwB,GAAG,EAAE,QAAQ,eAAcgjB,EAAC,EAAE,SAAQ,GAAGG,KAAG,sBAAqBC,KAAG,wBAAuBC,KAAG,0BAAyBC,KAAGtjB,GAAE,0BAAyB,GAAG,EAAE,QAAQ,QAAO,mGAAmG,EAAE,QAAQ,YAAWohB,KAAG,aAAW,WAAW,EAAE,QAAQ,QAAO,yBAAyB,EAAE,QAAQ,QAAO,gBAAgB,EAAE,YAAWmC,KAAG,iEAAgEC,KAAGxjB,GAAEujB,IAAG,GAAG,EAAE,QAAQ,UAASR,EAAC,EAAE,SAAQ,GAAGU,KAAGzjB,GAAEujB,IAAG,GAAG,EAAE,QAAQ,UAASJ,EAAE,EAAE,SAAQ,GAAGO,KAAG,yQAAwQC,KAAG3jB,GAAE0jB,IAAG,IAAI,EAAE,QAAQ,kBAAiBT,EAAE,EAAE,QAAQ,eAAcD,EAAC,EAAE,QAAQ,UAASD,EAAC,EAAE,SAAQ,GAAGa,KAAG5jB,GAAE0jB,IAAG,IAAI,EAAE,QAAQ,kBAAiBL,EAAE,EAAE,QAAQ,eAAcD,EAAE,EAAE,QAAQ,UAASD,EAAE,EAAE,SAAQ,GAAGU,KAAG7jB,GAAE,oNAAmN,IAAI,EAAE,QAAQ,kBAAiBijB,EAAE,EAAE,QAAQ,eAAcD,EAAC,EAAE,QAAQ,UAASD,EAAC,EAAE,SAAQ,GAAGe,KAAG9jB,GAAE,aAAY,IAAI,EAAE,QAAQ,UAAS+iB,EAAC,EAAE,SAAQ,GAAGgB,KAAG/jB,GAAE,qCAAqC,EAAE,QAAQ,UAAS,8BAA8B,EAAE,QAAQ,SAAQ,8IAA8I,EAAE,SAAQ,GAAGgkB,KAAGhkB,GAAEmiB,EAAC,EAAE,QAAQ,aAAY,KAAK,EAAE,SAAQ,GAAG8B,KAAGjkB,GAAE,0JAA0J,EAAE,QAAQ,WAAUgkB,EAAE,EAAE,QAAQ,aAAY,6EAA6E,EAAE,SAAQ,GAAGrkB,KAAE,yEAAwEukB,KAAGlkB,GAAE,mEAAmE,EAAE,QAAQ,SAAQL,EAAC,EAAE,QAAQ,QAAO,yCAAyC,EAAE,QAAQ,SAAQ,6DAA6D,EAAE,YAAWwkB,KAAGnkB,GAAE,yBAAyB,EAAE,QAAQ,SAAQL,EAAC,EAAE,QAAQ,OAAMqiB,EAAC,EAAE,SAAQ,GAAGoC,KAAGpkB,GAAE,uBAAuB,EAAE,QAAQ,OAAMgiB,EAAC,EAAE,YAAWqC,KAAGrkB,GAAE,yBAAwB,GAAG,EAAE,QAAQ,WAAUmkB,EAAE,EAAE,QAAQ,UAASC,EAAE,EAAE,SAAQ,GAAGE,KAAG,sCAAqCC,KAAE,EAAC,YAAWrD,IAAE,gBAAe4C,IAAG,UAASC,IAAG,WAAUT,IAAG,IAAGT,IAAG,MAAKD,IAAG,KAAI1B,IAAE,gBAAesC,IAAG,mBAAkBG,IAAG,mBAAkBE,IAAG,QAAOlB,IAAG,MAAKuB,IAAG,QAAOE,IAAG,aAAYlB,IAAG,SAAQiB,IAAG,eAAcE,IAAG,KAAIJ,IAAG,MAAKnB,IAAG,KAAI5B,GAAC,GAAEsD,KAAG,EAAC,GAAGD,IAAE,MAAKvkB,GAAE,yBAAyB,EAAE,QAAQ,SAAQL,EAAC,EAAE,SAAQ,GAAG,SAAQK,GAAE,+BAA+B,EAAE,QAAQ,SAAQL,EAAC,EAAE,SAAQ,EAAE,GAAE8kB,KAAE,EAAC,GAAGF,IAAE,mBAAkBX,IAAG,gBAAeH,IAAG,KAAIzjB,GAAE,gEAAgE,EAAE,QAAQ,YAAWskB,EAAE,EAAE,QAAQ,SAAQ,2EAA2E,EAAE,SAAQ,GAAG,YAAW,8EAA6E,KAAI,2EAA0E,MAAKtkB,GAAE,qNAAqN,EAAE,QAAQ,YAAWskB,EAAE,EAAE,SAAQ,EAAE,GAAEI,KAAG,EAAC,GAAGD,IAAE,IAAGzkB,GAAE6iB,EAAE,EAAE,QAAQ,QAAO,GAAG,EAAE,YAAW,MAAK7iB,GAAEykB,GAAE,IAAI,EAAE,QAAQ,QAAO,eAAe,EAAE,QAAQ,WAAU,GAAG,EAAE,SAAQ,EAAE,GAAEE,KAAE,EAAC,QAAOpC,IAAE,KAAIE,IAAG,UAASC,GAAE,GAAEkC,KAAE,EAAC,QAAOL,IAAE,KAAIE,IAAE,QAAOC,IAAG,UAASF,GAAE,GAAMK,KAAG,EAAC,KAAI,SAAQ,KAAI,QAAO,KAAI,QAAO,KAAI,UAAS,KAAI,QAAO,GAAEC,KAAG,CAAAvlB,MAAGslB,GAAGtlB,CAAC;AAAE,SAASiR,GAAEjR,GAAEU,GAAE;AAAC,MAAGA;AAAG,QAAGT,GAAE,WAAW,KAAKD,CAAC,EAAE,QAAOA,EAAE,QAAQC,GAAE,eAAcslB,EAAE;AAAA,aAAUtlB,GAAE,mBAAmB,KAAKD,CAAC,EAAE,QAAOA,EAAE,QAAQC,GAAE,uBAAsBslB,EAAE;AAAE,SAAOvlB;AAAC;AAAC,SAASwlB,GAAExlB,GAAE;AAAC,MAAG;AAAC,IAAAA,IAAE,UAAUA,CAAC,EAAE,QAAQC,GAAE,eAAc,GAAG;AAAA,EAAC,QAAM;AAAC,WAAO;AAAA,EAAI;AAAC,SAAOD;AAAC;AAAC,SAASylB,GAAEzlB,GAAEU,GAAE;;AAAC,MAAIkhB,IAAE5hB,EAAE,QAAQC,GAAE,UAAS,CAAC0K,GAAEtE,GAAE/F,MAAI;AAAC,QAAI4U,IAAE,IAAG/U,IAAEkG;AAAE,WAAK,EAAElG,KAAG,KAAGG,EAAEH,CAAC,MAAI,OAAM,CAAA+U,IAAE,CAACA;AAAE,WAAOA,IAAE,MAAI;AAAA,EAAI,CAAC,GAAEhV,IAAE0hB,EAAE,MAAM3hB,GAAE,SAAS,GAAE,IAAE;AAAE,MAAGC,EAAE,CAAC,EAAE,KAAI,KAAIA,EAAE,MAAK,GAAGA,EAAE,SAAO,KAAG,GAAC2O,IAAA3O,EAAE,GAAG,EAAE,MAAP,QAAA2O,EAAU,WAAQ3O,EAAE,IAAG,GAAGQ,EAAE,KAAGR,EAAE,SAAOQ,EAAE,CAAAR,EAAE,OAAOQ,CAAC;AAAA,MAAO,QAAKR,EAAE,SAAOQ,IAAG,CAAAR,EAAE,KAAK,EAAE;AAAE,SAAK,IAAEA,EAAE,QAAO,IAAI,CAAAA,EAAE,CAAC,IAAEA,EAAE,CAAC,EAAE,OAAO,QAAQD,GAAE,WAAU,GAAG;AAAE,SAAOC;AAAC;AAAC,SAASwlB,GAAE1lB,GAAEU,GAAEkhB,GAAE;AAAC,MAAI1hB,IAAEF,EAAE;AAAO,MAAGE,MAAI,EAAE,QAAM;AAAG,MAAI,IAAE;AAAE,SAAK,IAAEA,KAAUF,EAAE,OAAOE,IAAE,IAAE,CAAC,MAASQ;AAAM;AAAoC,SAAOV,EAAE,MAAM,GAAEE,IAAE,CAAC;AAAC;AAAC,SAASylB,GAAG3lB,GAAEU,GAAE;AAAC,MAAGV,EAAE,QAAQU,EAAE,CAAC,CAAC,MAAI,GAAG,QAAM;AAAG,MAAIkhB,IAAE;AAAE,WAAQ1hB,IAAE,GAAEA,IAAEF,EAAE,QAAOE,IAAI,KAAGF,EAAEE,CAAC,MAAI,KAAK,CAAAA;AAAA,WAAYF,EAAEE,CAAC,MAAIQ,EAAE,CAAC,EAAE,CAAAkhB;AAAA,WAAY5hB,EAAEE,CAAC,MAAIQ,EAAE,CAAC,MAAIkhB,KAAIA,IAAE,GAAG,QAAO1hB;AAAE,SAAO0hB,IAAE,IAAE,KAAG;AAAE;AAAC,SAASgE,GAAG5lB,GAAEU,GAAEkhB,GAAE1hB,GAAE,GAAE;AAAC,MAAI,IAAEQ,EAAE,MAAK2F,IAAE3F,EAAE,SAAO,MAAKJ,IAAEN,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,mBAAkB,IAAI;AAAE,EAAAE,EAAE,MAAM,SAAO;AAAG,MAAIgV,IAAE,EAAC,MAAKlV,EAAE,CAAC,EAAE,OAAO,CAAC,MAAI,MAAI,UAAQ,QAAO,KAAI4hB,GAAE,MAAK,GAAE,OAAMvb,GAAE,MAAK/F,GAAE,QAAOJ,EAAE,aAAaI,CAAC,EAAC;AAAE,SAAOJ,EAAE,MAAM,SAAO,IAAGgV;AAAC;AAAC,SAAS2Q,GAAG7lB,GAAEU,GAAEkhB,GAAE;AAAC,MAAI1hB,IAAEF,EAAE,MAAM4hB,EAAE,MAAM,sBAAsB;AAAE,MAAG1hB,MAAI,KAAK,QAAOQ;AAAE,MAAI,IAAER,EAAE,CAAC;AAAE,SAAOQ,EAAE,MAAM;AAAA,CACtiL,EAAE,IAAI,OAAG;AAAC,QAAI2F,IAAE,EAAE,MAAMub,EAAE,MAAM,cAAc;AAAE,QAAGvb,MAAI,KAAK,QAAO;AAAE,QAAG,CAAC/F,CAAC,IAAE+F;AAAE,WAAO/F,EAAE,UAAQ,EAAE,SAAO,EAAE,MAAM,EAAE,MAAM,IAAE;AAAA,EAAC,CAAC,EAAE,KAAK;AAAA,CACnI;AAAC;AAAC,IAAIwlB,KAAE,MAAK;AAAA,EAAqB,YAAYplB,GAAE;AAAlC,IAAAqlB,EAAA;AAAQ,IAAAA,EAAA;AAAM,IAAAA,EAAA;AAAqB,SAAK,UAAQrlB,KAAG+gB;AAAAA,EAAC;AAAA,EAAC,MAAM/gB,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,MAAM,QAAQ,KAAKA,CAAC;AAAE,QAAG,KAAG,EAAE,CAAC,EAAE,SAAO,EAAE,QAAM,EAAC,MAAK,SAAQ,KAAI,EAAE,CAAC,EAAC;AAAA,EAAC;AAAA,EAAC,KAAKA,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,MAAM,KAAK,KAAKA,CAAC;AAAE,QAAG,GAAE;AAAC,UAAIR,IAAE,EAAE,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,kBAAiB,EAAE;AAAE,aAAM,EAAC,MAAK,QAAO,KAAI,EAAE,CAAC,GAAE,gBAAe,YAAW,MAAK,KAAK,QAAQ,WAASA,IAAEwlB,GAAExlB,GAAE;AAAA,CACvW,EAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,OAAOQ,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,MAAM,OAAO,KAAKA,CAAC;AAAE,QAAG,GAAE;AAAC,UAAIR,IAAE,EAAE,CAAC,GAAE+U,IAAE4Q,GAAG3lB,GAAE,EAAE,CAAC,KAAG,IAAG,KAAK,KAAK;AAAE,aAAM,EAAC,MAAK,QAAO,KAAIA,GAAE,MAAK,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE,KAAI,EAAG,QAAQ,KAAK,MAAM,OAAO,gBAAe,IAAI,IAAE,EAAE,CAAC,GAAE,MAAK+U,EAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,QAAQvU,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,MAAM,QAAQ,KAAKA,CAAC;AAAE,QAAG,GAAE;AAAC,UAAIR,IAAE,EAAE,CAAC,EAAE,KAAI;AAAG,UAAG,KAAK,MAAM,MAAM,WAAW,KAAKA,CAAC,GAAE;AAAC,YAAI+U,IAAEyQ,GAAExlB,GAAE,GAAG;AAAE,SAAC,KAAK,QAAQ,YAAU,CAAC+U,KAAG,KAAK,MAAM,MAAM,gBAAgB,KAAKA,CAAC,OAAK/U,IAAE+U,EAAE;MAAO;AAAC,aAAM,EAAC,MAAK,WAAU,KAAI,EAAE,CAAC,GAAE,OAAM,EAAE,CAAC,EAAE,QAAO,MAAK/U,GAAE,QAAO,KAAK,MAAM,OAAOA,CAAC,EAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,GAAGQ,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,MAAM,GAAG,KAAKA,CAAC;AAAE,QAAG,EAAE,QAAM,EAAC,MAAK,MAAK,KAAIglB,GAAE,EAAE,CAAC,GAAE;AAAA,CACjkB,EAAC;AAAA,EAAC;AAAA,EAAC,WAAWhlB,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,MAAM,WAAW,KAAKA,CAAC;AAAE,QAAG,GAAE;AAAC,UAAIR,IAAEwlB,GAAE,EAAE,CAAC,GAAE;AAAA,CAC9E,EAAE,MAAM;AAAA,CACR,GAAEzQ,IAAE,IAAGtK,IAAE,IAAGtE,IAAE;AAAG,aAAKnG,EAAE,SAAO,KAAG;AAAC,YAAI,IAAE,IAAG,IAAE,CAAA,GAAGC;AAAE,aAAIA,IAAE,GAAEA,IAAED,EAAE,QAAOC,IAAI,KAAG,KAAK,MAAM,MAAM,gBAAgB,KAAKD,EAAEC,CAAC,CAAC,EAAE,GAAE,KAAKD,EAAEC,CAAC,CAAC,GAAE,IAAE;AAAA,iBAAW,CAAC,EAAE,GAAE,KAAKD,EAAEC,CAAC,CAAC;AAAA,YAAO;AAAM,QAAAD,IAAEA,EAAE,MAAMC,CAAC;AAAE,YAAI,IAAE,EAAE,KAAK;AAAA,CACxM,GAAEE,IAAE,EAAE,QAAQ,KAAK,MAAM,MAAM,yBAAwB;AAAA,OACjD,EAAE,QAAQ,KAAK,MAAM,MAAM,0BAAyB,EAAE;AAAE,QAAA4U,IAAEA,IAAE,GAAGA,CAAC;AAAA,EACrE,CAAC,KAAG,GAAEtK,IAAEA,IAAE,GAAGA,CAAC;AAAA,EACdtK,CAAC,KAAGA;AAAE,YAAIE,IAAE,KAAK,MAAM,MAAM;AAAI,YAAG,KAAK,MAAM,MAAM,MAAI,IAAG,KAAK,MAAM,YAAYF,GAAEgG,GAAE,EAAE,GAAE,KAAK,MAAM,MAAM,MAAI9F,GAAEL,EAAE,WAAS,EAAE;AAAM,YAAIS,IAAE0F,EAAE,GAAG,EAAE;AAAE,aAAG1F,KAAA,gBAAAA,EAAG,UAAO,OAAO;AAAM,aAAGA,KAAA,gBAAAA,EAAG,UAAO,cAAa;AAAC,cAAIqlB,IAAErlB,GAAEd,IAAEmmB,EAAE,MAAI;AAAA,IACzN9lB,EAAE,KAAK;AAAA,CACR,GAAE+lB,IAAE,KAAK,WAAWpmB,CAAC;AAAE,UAAAwG,EAAEA,EAAE,SAAO,CAAC,IAAE4f,GAAEhR,IAAEA,EAAE,UAAU,GAAEA,EAAE,SAAO+Q,EAAE,IAAI,MAAM,IAAEC,EAAE,KAAItb,IAAEA,EAAE,UAAU,GAAEA,EAAE,SAAOqb,EAAE,KAAK,MAAM,IAAEC,EAAE;AAAK;AAAA,QAAK,YAAStlB,KAAA,gBAAAA,EAAG,UAAO,QAAO;AAAC,cAAIqlB,IAAErlB,GAAEd,IAAEmmB,EAAE,MAAI;AAAA,IAClL9lB,EAAE,KAAK;AAAA,CACR,GAAE+lB,IAAE,KAAK,KAAKpmB,CAAC;AAAE,UAAAwG,EAAEA,EAAE,SAAO,CAAC,IAAE4f,GAAEhR,IAAEA,EAAE,UAAU,GAAEA,EAAE,SAAOtU,EAAE,IAAI,MAAM,IAAEslB,EAAE,KAAItb,IAAEA,EAAE,UAAU,GAAEA,EAAE,SAAOqb,EAAE,IAAI,MAAM,IAAEC,EAAE,KAAI/lB,IAAEL,EAAE,UAAUwG,EAAE,GAAG,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM;AAAA,CACpK;AAAE;AAAA,QAAQ;AAAA,MAAC;AAAC,aAAM,EAAC,MAAK,cAAa,KAAI4O,GAAE,QAAO5O,GAAE,MAAKsE,EAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,KAAKjK,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,MAAM,KAAK,KAAKA,CAAC;AAAE,QAAG,GAAE;AAAC,UAAIR,IAAE,EAAE,CAAC,EAAE,KAAI,GAAG+U,IAAE/U,EAAE,SAAO,GAAEyK,IAAE,EAAC,MAAK,QAAO,KAAI,IAAG,SAAQsK,GAAE,OAAMA,IAAE,CAAC/U,EAAE,MAAM,GAAE,EAAE,IAAE,IAAG,OAAM,IAAG,OAAM,CAAA,EAAE;AAAE,MAAAA,IAAE+U,IAAE,aAAa/U,EAAE,MAAM,EAAE,CAAC,KAAG,KAAKA,CAAC,IAAG,KAAK,QAAQ,aAAWA,IAAE+U,IAAE/U,IAAE;AAAS,UAAImG,IAAE,KAAK,MAAM,MAAM,cAAcnG,CAAC,GAAE,IAAE;AAAG,aAAKQ,KAAG;AAAC,YAAIP,IAAE,IAAG,IAAE,IAAGE,IAAE;AAAG,YAAG,EAAE,IAAEgG,EAAE,KAAK3F,CAAC,MAAI,KAAK,MAAM,MAAM,GAAG,KAAKA,CAAC,EAAE;AAAM,YAAE,EAAE,CAAC,GAAEA,IAAEA,EAAE,UAAU,EAAE,MAAM;AAAE,YAAIH,IAAE,EAAE,CAAC,EAAE,MAAM;AAAA,GACvd,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,iBAAgB,CAAA2lB,MAAG,IAAI,OAAO,IAAEA,EAAE,MAAM,CAAC,GAAEvlB,IAAED,EAAE,MAAM;AAAA,GACpF,CAAC,EAAE,CAAC,GAAEslB,IAAE,CAACzlB,EAAE,KAAI,GAAGV,IAAE;AAAE,YAAG,KAAK,QAAQ,YAAUA,IAAE,GAAEQ,IAAEE,EAAE,UAAS,KAAIylB,IAAEnmB,IAAE,EAAE,CAAC,EAAE,SAAO,KAAGA,IAAE,EAAE,CAAC,EAAE,OAAO,KAAK,MAAM,MAAM,YAAY,GAAEA,IAAEA,IAAE,IAAE,IAAEA,GAAEQ,IAAEE,EAAE,MAAMV,CAAC,GAAEA,KAAG,EAAE,CAAC,EAAE,SAAQmmB,KAAG,KAAK,MAAM,MAAM,UAAU,KAAKrlB,CAAC,MAAI,KAAGA,IAAE;AAAA,GACzND,IAAEA,EAAE,UAAUC,EAAE,SAAO,CAAC,GAAER,IAAE,KAAI,CAACA,GAAE;AAAC,cAAI+lB,IAAE,KAAK,MAAM,MAAM,gBAAgBrmB,CAAC,GAAEsmB,IAAG,KAAK,MAAM,MAAM,QAAQtmB,CAAC,GAAEumB,IAAG,KAAK,MAAM,MAAM,iBAAiBvmB,CAAC,GAAEwmB,IAAG,KAAK,MAAM,MAAM,kBAAkBxmB,CAAC,GAAEymB,IAAG,KAAK,MAAM,MAAM,eAAezmB,CAAC;AAAE,iBAAKa,KAAG;AAAC,gBAAI6lB,IAAE7lB,EAAE,MAAM;AAAA,GAC3P,CAAC,EAAE,CAAC,GAAE8lB;AAAE,gBAAG7lB,IAAE4lB,GAAE,KAAK,QAAQ,YAAU5lB,IAAEA,EAAE,QAAQ,KAAK,MAAM,MAAM,oBAAmB,IAAI,GAAE6lB,IAAE7lB,KAAG6lB,IAAE7lB,EAAE,QAAQ,KAAK,MAAM,MAAM,eAAc,MAAM,GAAEylB,EAAG,KAAKzlB,CAAC,KAAG0lB,EAAG,KAAK1lB,CAAC,KAAG2lB,EAAG,KAAK3lB,CAAC,KAAGulB,EAAE,KAAKvlB,CAAC,KAAGwlB,EAAG,KAAKxlB,CAAC,EAAE;AAAM,gBAAG6lB,EAAE,OAAO,KAAK,MAAM,MAAM,YAAY,KAAG3mB,KAAG,CAACc,EAAE,KAAI,EAAG,CAAAN,KAAG;AAAA,IAChRmmB,EAAE,MAAM3mB,CAAC;AAAA,iBAAM;AAAC,kBAAGmmB,KAAGzlB,EAAE,QAAQ,KAAK,MAAM,MAAM,eAAc,MAAM,EAAE,OAAO,KAAK,MAAM,MAAM,YAAY,KAAG,KAAG6lB,EAAG,KAAK7lB,CAAC,KAAG8lB,EAAG,KAAK9lB,CAAC,KAAG4lB,EAAG,KAAK5lB,CAAC,EAAE;AAAM,cAAAF,KAAG;AAAA,IAC7JM;AAAA,YAAC;AAAC,aAACqlB,KAAG,CAACrlB,EAAE,WAASqlB,IAAE,KAAI,KAAGO,IAAE;AAAA,GAC7B7lB,IAAEA,EAAE,UAAU6lB,EAAE,SAAO,CAAC,GAAEhmB,IAAEimB,EAAE,MAAM3mB,CAAC;AAAA,UAAC;AAAA,QAAC;AAAC,QAAA8K,EAAE,UAAQ,IAAEA,EAAE,QAAM,KAAG,KAAK,MAAM,MAAM,gBAAgB,KAAK,CAAC,MAAI,IAAE;AAAK,YAAIsb,IAAE,MAAKQ;AAAE,aAAK,QAAQ,QAAMR,IAAE,KAAK,MAAM,MAAM,WAAW,KAAK5lB,CAAC,GAAE4lB,MAAIQ,IAAER,EAAE,CAAC,MAAI,QAAO5lB,IAAEA,EAAE,QAAQ,KAAK,MAAM,MAAM,iBAAgB,EAAE,KAAIsK,EAAE,MAAM,KAAK,EAAC,MAAK,aAAY,KAAI,GAAE,MAAK,CAAC,CAACsb,GAAE,SAAQQ,GAAE,OAAM,IAAG,MAAKpmB,GAAE,QAAO,CAAA,EAAE,CAAC,GAAEsK,EAAE,OAAK;AAAA,MAAC;AAAC,UAAI,IAAEA,EAAE,MAAM,GAAG,EAAE;AAAE,UAAG,EAAE,GAAE,MAAI,EAAE,IAAI,QAAO,GAAG,EAAE,OAAK,EAAE,KAAK,QAAO;AAAA,UAAQ;AAAO,MAAAA,EAAE,MAAIA,EAAE,IAAI,QAAO;AAAG,eAAQxK,IAAE,GAAEA,IAAEwK,EAAE,MAAM,QAAOxK,IAAI,KAAG,KAAK,MAAM,MAAM,MAAI,IAAGwK,EAAE,MAAMxK,CAAC,EAAE,SAAO,KAAK,MAAM,YAAYwK,EAAE,MAAMxK,CAAC,EAAE,MAAK,EAAE,GAAE,CAACwK,EAAE,OAAM;AAAC,YAAI,IAAEA,EAAE,MAAMxK,CAAC,EAAE,OAAO,OAAO,CAAAI,MAAGA,EAAE,SAAO,OAAO,GAAEF,IAAE,EAAE,SAAO,KAAG,EAAE,KAAK,CAAAE,MAAG,KAAK,MAAM,MAAM,QAAQ,KAAKA,EAAE,GAAG,CAAC;AAAE,QAAAoK,EAAE,QAAMtK;AAAA,MAAC;AAAC,UAAGsK,EAAE,MAAM,UAAQxK,IAAE,GAAEA,IAAEwK,EAAE,MAAM,QAAOxK,IAAI,CAAAwK,EAAE,MAAMxK,CAAC,EAAE,QAAM;AAAG,aAAOwK;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,KAAKjK,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,MAAM,KAAK,KAAKA,CAAC;AAAE,QAAG,EAAE,QAAM,EAAC,MAAK,QAAO,OAAM,IAAG,KAAI,EAAE,CAAC,GAAE,KAAI,EAAE,CAAC,MAAI,SAAO,EAAE,CAAC,MAAI,YAAU,EAAE,CAAC,MAAI,SAAQ,MAAK,EAAE,CAAC,EAAC;AAAA,EAAC;AAAA,EAAC,IAAIA,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,MAAM,IAAI,KAAKA,CAAC;AAAE,QAAG,GAAE;AAAC,UAAIR,IAAE,EAAE,CAAC,EAAE,YAAW,EAAG,QAAQ,KAAK,MAAM,MAAM,qBAAoB,GAAG,GAAE+U,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,cAAa,IAAI,EAAE,QAAQ,KAAK,MAAM,OAAO,gBAAe,IAAI,IAAE,IAAGtK,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE,UAAU,GAAE,EAAE,CAAC,EAAE,SAAO,CAAC,EAAE,QAAQ,KAAK,MAAM,OAAO,gBAAe,IAAI,IAAE,EAAE,CAAC;AAAE,aAAM,EAAC,MAAK,OAAM,KAAIzK,GAAE,KAAI,EAAE,CAAC,GAAE,MAAK+U,GAAE,OAAMtK,EAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,MAAMjK,GAAE;;AAAC,QAAI,IAAE,KAAK,MAAM,MAAM,MAAM,KAAKA,CAAC;AAAE,QAAG,CAAC,KAAG,CAAC,KAAK,MAAM,MAAM,eAAe,KAAK,EAAE,CAAC,CAAC,EAAE;AAAO,QAAIR,IAAEulB,GAAE,EAAE,CAAC,CAAC,GAAExQ,IAAE,EAAE,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,iBAAgB,EAAE,EAAE,MAAM,GAAG,GAAEtK,KAAEkE,IAAA,EAAE,CAAC,MAAH,QAAAA,EAAM,SAAO,EAAE,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,mBAAkB,EAAE,EAAE,MAAM;AAAA,CAClhD,IAAE,CAAA,GAAGxI,IAAE,EAAC,MAAK,SAAQ,KAAI,EAAE,CAAC,GAAE,QAAO,CAAA,GAAG,OAAM,CAAA,GAAG,MAAK,CAAA,EAAE;AAAE,QAAGnG,EAAE,WAAS+U,EAAE,QAAO;AAAC,eAAQ3U,KAAK2U,EAAE,MAAK,MAAM,MAAM,gBAAgB,KAAK3U,CAAC,IAAE+F,EAAE,MAAM,KAAK,OAAO,IAAE,KAAK,MAAM,MAAM,iBAAiB,KAAK/F,CAAC,IAAE+F,EAAE,MAAM,KAAK,QAAQ,IAAE,KAAK,MAAM,MAAM,eAAe,KAAK/F,CAAC,IAAE+F,EAAE,MAAM,KAAK,MAAM,IAAEA,EAAE,MAAM,KAAK,IAAI;AAAE,eAAQ/F,IAAE,GAAEA,IAAEJ,EAAE,QAAOI,IAAI,CAAA+F,EAAE,OAAO,KAAK,EAAC,MAAKnG,EAAEI,CAAC,GAAE,QAAO,KAAK,MAAM,OAAOJ,EAAEI,CAAC,CAAC,GAAE,QAAO,IAAG,OAAM+F,EAAE,MAAM/F,CAAC,EAAC,CAAC;AAAE,eAAQA,KAAKqK,EAAE,CAAAtE,EAAE,KAAK,KAAKof,GAAEnlB,GAAE+F,EAAE,OAAO,MAAM,EAAE,IAAI,CAAC6O,GAAE/U,OAAK,EAAC,MAAK+U,GAAE,QAAO,KAAK,MAAM,OAAOA,CAAC,GAAE,QAAO,IAAG,OAAM7O,EAAE,MAAMlG,CAAC,EAAC,EAAE,CAAC;AAAE,aAAOkG;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,SAAS3F,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,MAAM,SAAS,KAAKA,CAAC;AAAE,QAAG,EAAE,QAAM,EAAC,MAAK,WAAU,KAAI,EAAE,CAAC,GAAE,OAAM,EAAE,CAAC,EAAE,OAAO,CAAC,MAAI,MAAI,IAAE,GAAE,MAAK,EAAE,CAAC,GAAE,QAAO,KAAK,MAAM,OAAO,EAAE,CAAC,CAAC,EAAC;AAAA,EAAC;AAAA,EAAC,UAAUA,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,MAAM,UAAU,KAAKA,CAAC;AAAE,QAAG,GAAE;AAAC,UAAIR,IAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAO,CAAC,MAAI;AAAA,IACzyB,EAAE,CAAC,EAAE,MAAM,GAAE,EAAE,IAAE,EAAE,CAAC;AAAE,aAAM,EAAC,MAAK,aAAY,KAAI,EAAE,CAAC,GAAE,MAAKA,GAAE,QAAO,KAAK,MAAM,OAAOA,CAAC,EAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,KAAKQ,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,MAAM,KAAK,KAAKA,CAAC;AAAE,QAAG,EAAE,QAAM,EAAC,MAAK,QAAO,KAAI,EAAE,CAAC,GAAE,MAAK,EAAE,CAAC,GAAE,QAAO,KAAK,MAAM,OAAO,EAAE,CAAC,CAAC,EAAC;AAAA,EAAC;AAAA,EAAC,OAAOA,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,OAAO,OAAO,KAAKA,CAAC;AAAE,QAAG,EAAE,QAAM,EAAC,MAAK,UAAS,KAAI,EAAE,CAAC,GAAE,MAAK,EAAE,CAAC,EAAC;AAAA,EAAC;AAAA,EAAC,IAAIA,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,OAAO,IAAI,KAAKA,CAAC;AAAE,QAAG,EAAE,QAAM,CAAC,KAAK,MAAM,MAAM,UAAQ,KAAK,MAAM,MAAM,UAAU,KAAK,EAAE,CAAC,CAAC,IAAE,KAAK,MAAM,MAAM,SAAO,KAAG,KAAK,MAAM,MAAM,UAAQ,KAAK,MAAM,MAAM,QAAQ,KAAK,EAAE,CAAC,CAAC,MAAI,KAAK,MAAM,MAAM,SAAO,KAAI,CAAC,KAAK,MAAM,MAAM,cAAY,KAAK,MAAM,MAAM,kBAAkB,KAAK,EAAE,CAAC,CAAC,IAAE,KAAK,MAAM,MAAM,aAAW,KAAG,KAAK,MAAM,MAAM,cAAY,KAAK,MAAM,MAAM,gBAAgB,KAAK,EAAE,CAAC,CAAC,MAAI,KAAK,MAAM,MAAM,aAAW,KAAI,EAAC,MAAK,QAAO,KAAI,EAAE,CAAC,GAAE,QAAO,KAAK,MAAM,MAAM,QAAO,YAAW,KAAK,MAAM,MAAM,YAAW,OAAM,IAAG,MAAK,EAAE,CAAC,EAAC;AAAA,EAAC;AAAA,EAAC,KAAKA,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,OAAO,KAAK,KAAKA,CAAC;AAAE,QAAG,GAAE;AAAC,UAAIR,IAAE,EAAE,CAAC,EAAE,KAAI;AAAG,UAAG,CAAC,KAAK,QAAQ,YAAU,KAAK,MAAM,MAAM,kBAAkB,KAAKA,CAAC,GAAE;AAAC,YAAG,CAAC,KAAK,MAAM,MAAM,gBAAgB,KAAKA,CAAC,EAAE;AAAO,YAAImG,IAAEqf,GAAExlB,EAAE,MAAM,GAAE,EAAE,GAAE,IAAI;AAAE,aAAIA,EAAE,SAAOmG,EAAE,UAAQ,MAAI,EAAE;AAAA,MAAM,OAAK;AAAC,YAAIA,IAAEsf,GAAG,EAAE,CAAC,GAAE,IAAI;AAAE,YAAGtf,MAAI,GAAG;AAAO,YAAGA,IAAE,IAAG;AAAC,cAAI6O,KAAG,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAI,IAAE,IAAE,KAAG,EAAE,CAAC,EAAE,SAAO7O;AAAE,YAAE,CAAC,IAAE,EAAE,CAAC,EAAE,UAAU,GAAEA,CAAC,GAAE,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE,UAAU,GAAE6O,CAAC,EAAE,KAAI,GAAG,EAAE,CAAC,IAAE;AAAA,QAAE;AAAA,MAAC;AAAC,UAAID,IAAE,EAAE,CAAC,GAAEtK,IAAE;AAAG,UAAG,KAAK,QAAQ,UAAS;AAAC,YAAItE,IAAE,KAAK,MAAM,MAAM,kBAAkB,KAAK4O,CAAC;AAAE,QAAA5O,MAAI4O,IAAE5O,EAAE,CAAC,GAAEsE,IAAEtE,EAAE,CAAC;AAAA,MAAE,MAAM,CAAAsE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE,MAAM,GAAE,EAAE,IAAE;AAAG,aAAOsK,IAAEA,EAAE,KAAI,GAAG,KAAK,MAAM,MAAM,kBAAkB,KAAKA,CAAC,MAAI,KAAK,QAAQ,YAAU,CAAC,KAAK,MAAM,MAAM,gBAAgB,KAAK/U,CAAC,IAAE+U,IAAEA,EAAE,MAAM,CAAC,IAAEA,IAAEA,EAAE,MAAM,GAAE,EAAE,IAAG2Q,GAAG,GAAE,EAAC,MAAK3Q,KAAGA,EAAE,QAAQ,KAAK,MAAM,OAAO,gBAAe,IAAI,GAAE,OAAMtK,KAAGA,EAAE,QAAQ,KAAK,MAAM,OAAO,gBAAe,IAAI,EAAC,GAAE,EAAE,CAAC,GAAE,KAAK,OAAM,KAAK,KAAK;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,QAAQjK,GAAE,GAAE;AAAC,QAAIR;AAAE,SAAIA,IAAE,KAAK,MAAM,OAAO,QAAQ,KAAKQ,CAAC,OAAKR,IAAE,KAAK,MAAM,OAAO,OAAO,KAAKQ,CAAC,IAAG;AAAC,UAAIuU,KAAG/U,EAAE,CAAC,KAAGA,EAAE,CAAC,GAAG,QAAQ,KAAK,MAAM,MAAM,qBAAoB,GAAG,GAAEyK,IAAE,EAAEsK,EAAE,YAAW,CAAE;AAAE,UAAG,CAACtK,GAAE;AAAC,YAAItE,IAAEnG,EAAE,CAAC,EAAE,OAAO,CAAC;AAAE,eAAM,EAAC,MAAK,QAAO,KAAImG,GAAE,MAAKA,EAAC;AAAA,MAAC;AAAC,aAAOuf,GAAG1lB,GAAEyK,GAAEzK,EAAE,CAAC,GAAE,KAAK,OAAM,KAAK,KAAK;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,SAASQ,GAAE,GAAER,IAAE,IAAG;AAAC,QAAI+U,IAAE,KAAK,MAAM,OAAO,eAAe,KAAKvU,CAAC;AAAE,QAAG,GAACuU,KAAGA,EAAE,CAAC,KAAG/U,EAAE,MAAM,KAAK,MAAM,MAAM,mBAAmB,OAAY,EAAE+U,EAAE,CAAC,KAAGA,EAAE,CAAC,MAAQ,CAAC/U,KAAG,KAAK,MAAM,OAAO,YAAY,KAAKA,CAAC,IAAE;AAAC,UAAImG,IAAE,CAAC,GAAG4O,EAAE,CAAC,CAAC,EAAE,SAAO,GAAE3U,GAAE4U,GAAE/U,IAAEkG,GAAEqgB,IAAE,GAAErmB,IAAE4U,EAAE,CAAC,EAAE,CAAC,MAAI,MAAI,KAAK,MAAM,OAAO,oBAAkB,KAAK,MAAM,OAAO;AAAkB,WAAI5U,EAAE,YAAU,GAAE,IAAE,EAAE,MAAM,KAAGK,EAAE,SAAO2F,CAAC,IAAG4O,IAAE5U,EAAE,KAAK,CAAC,MAAI,QAAM;AAAC,YAAGC,IAAE2U,EAAE,CAAC,KAAGA,EAAE,CAAC,KAAGA,EAAE,CAAC,KAAGA,EAAE,CAAC,KAAGA,EAAE,CAAC,KAAGA,EAAE,CAAC,GAAE,CAAC3U,EAAE;AAAS,YAAG4U,IAAE,CAAC,GAAG5U,CAAC,EAAE,QAAO2U,EAAE,CAAC,KAAGA,EAAE,CAAC,GAAE;AAAC,UAAA9U,KAAG+U;AAAE;AAAA,QAAQ,YAAUD,EAAE,CAAC,KAAGA,EAAE,CAAC,MAAI5O,IAAE,KAAG,GAAGA,IAAE6O,KAAG,IAAG;AAAC,UAAAwR,KAAGxR;AAAE;AAAA,QAAQ;AAAC,YAAG/U,KAAG+U,GAAE/U,IAAE,EAAE;AAAS,QAAA+U,IAAE,KAAK,IAAIA,GAAEA,IAAE/U,IAAEumB,CAAC;AAAE,YAAInmB,IAAE,CAAC,GAAG0U,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,QAAOtU,IAAED,EAAE,MAAM,GAAE2F,IAAE4O,EAAE,QAAM1U,IAAE2U,CAAC;AAAE,YAAG,KAAK,IAAI7O,GAAE6O,CAAC,IAAE,GAAE;AAAC,cAAIrV,IAAEc,EAAE,MAAM,GAAE,EAAE;AAAE,iBAAM,EAAC,MAAK,MAAK,KAAIA,GAAE,MAAKd,GAAE,QAAO,KAAK,MAAM,aAAaA,CAAC,EAAC;AAAA,QAAC;AAAC,YAAImmB,IAAErlB,EAAE,MAAM,GAAE,EAAE;AAAE,eAAM,EAAC,MAAK,UAAS,KAAIA,GAAE,MAAKqlB,GAAE,QAAO,KAAK,MAAM,aAAaA,CAAC,EAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,SAAStlB,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,OAAO,KAAK,KAAKA,CAAC;AAAE,QAAG,GAAE;AAAC,UAAIR,IAAE,EAAE,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,mBAAkB,GAAG,GAAE+U,IAAE,KAAK,MAAM,MAAM,aAAa,KAAK/U,CAAC,GAAEyK,IAAE,KAAK,MAAM,MAAM,kBAAkB,KAAKzK,CAAC,KAAG,KAAK,MAAM,MAAM,gBAAgB,KAAKA,CAAC;AAAE,aAAO+U,KAAGtK,MAAIzK,IAAEA,EAAE,UAAU,GAAEA,EAAE,SAAO,CAAC,IAAG,EAAC,MAAK,YAAW,KAAI,EAAE,CAAC,GAAE,MAAKA,EAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,GAAGQ,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,OAAO,GAAG,KAAKA,CAAC;AAAE,QAAG,EAAE,QAAM,EAAC,MAAK,MAAK,KAAI,EAAE,CAAC,EAAC;AAAA,EAAC;AAAA,EAAC,IAAIA,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,OAAO,IAAI,KAAKA,CAAC;AAAE,QAAG,EAAE,QAAM,EAAC,MAAK,OAAM,KAAI,EAAE,CAAC,GAAE,MAAK,EAAE,CAAC,GAAE,QAAO,KAAK,MAAM,aAAa,EAAE,CAAC,CAAC,EAAC;AAAA,EAAC;AAAA,EAAC,SAASA,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,OAAO,SAAS,KAAKA,CAAC;AAAE,QAAG,GAAE;AAAC,UAAIR,GAAE+U;AAAE,aAAO,EAAE,CAAC,MAAI,OAAK/U,IAAE,EAAE,CAAC,GAAE+U,IAAE,YAAU/U,MAAIA,IAAE,EAAE,CAAC,GAAE+U,IAAE/U,IAAG,EAAC,MAAK,QAAO,KAAI,EAAE,CAAC,GAAE,MAAKA,GAAE,MAAK+U,GAAE,QAAO,CAAC,EAAC,MAAK,QAAO,KAAI/U,GAAE,MAAKA,EAAC,CAAC,EAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,IAAIQ,GAAE;;AAAC,QAAI;AAAE,QAAG,IAAE,KAAK,MAAM,OAAO,IAAI,KAAKA,CAAC,GAAE;AAAC,UAAIR,GAAE;AAAE,UAAG,EAAE,CAAC,MAAI,IAAI,CAAAA,IAAE,EAAE,CAAC,GAAE,IAAE,YAAUA;AAAA,WAAM;AAAC,YAAI;AAAE;AAAG,cAAE,EAAE,CAAC,GAAE,EAAE,CAAC,MAAE2O,IAAA,KAAK,MAAM,OAAO,WAAW,KAAK,EAAE,CAAC,CAAC,MAAtC,gBAAAA,EAA0C,OAAI;AAAA,eAAS,MAAI,EAAE,CAAC;AAAG,QAAA3O,IAAE,EAAE,CAAC,GAAE,EAAE,CAAC,MAAI,SAAO,IAAE,YAAU,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAA,MAAC;AAAC,aAAM,EAAC,MAAK,QAAO,KAAI,EAAE,CAAC,GAAE,MAAKA,GAAE,MAAK,GAAE,QAAO,CAAC,EAAC,MAAK,QAAO,KAAIA,GAAE,MAAKA,EAAC,CAAC,EAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,WAAWQ,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,OAAO,KAAK,KAAKA,CAAC;AAAE,QAAG,GAAE;AAAC,UAAIR,IAAE,KAAK,MAAM,MAAM;AAAW,aAAM,EAAC,MAAK,QAAO,KAAI,EAAE,CAAC,GAAE,MAAK,EAAE,CAAC,GAAE,SAAQA,EAAC;AAAA,IAAC;AAAA,EAAC;AAAC,GAAMmF,KAAE,MAAMrF,GAAC;AAAA,EAA4C,YAAYU,GAAE;AAAzD,IAAAqlB,EAAA;AAAO,IAAAA,EAAA;AAAQ,IAAAA,EAAA;AAAM,IAAAA,EAAA;AAAU,IAAAA,EAAA;AAA2B,SAAK,SAAO,CAAA,GAAG,KAAK,OAAO,QAAM,uBAAO,OAAO,IAAI,GAAE,KAAK,UAAQrlB,KAAG+gB,IAAE,KAAK,QAAQ,YAAU,KAAK,QAAQ,aAAW,IAAIqE,MAAE,KAAK,YAAU,KAAK,QAAQ,WAAU,KAAK,UAAU,UAAQ,KAAK,SAAQ,KAAK,UAAU,QAAM,MAAK,KAAK,cAAY,CAAA,GAAG,KAAK,QAAM,EAAC,QAAO,IAAG,YAAW,IAAG,KAAI,GAAE;AAAE,QAAIlE,IAAE,EAAC,OAAM3hB,IAAE,OAAMmlB,GAAE,QAAO,QAAOC,GAAE,OAAM;AAAE,SAAK,QAAQ,YAAUzD,EAAE,QAAMwD,GAAE,UAASxD,EAAE,SAAOyD,GAAE,YAAU,KAAK,QAAQ,QAAMzD,EAAE,QAAMwD,GAAE,KAAI,KAAK,QAAQ,SAAOxD,EAAE,SAAOyD,GAAE,SAAOzD,EAAE,SAAOyD,GAAE,MAAK,KAAK,UAAU,QAAMzD;AAAA,EAAC;AAAA,EAAC,WAAW,QAAO;AAAC,WAAM,EAAC,OAAMwD,IAAE,QAAOC,GAAC;AAAA,EAAC;AAAA,EAAC,OAAO,IAAI3kB,GAAEkhB,GAAE;AAAC,WAAO,IAAI5hB,GAAE4hB,CAAC,EAAE,IAAIlhB,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,UAAUA,GAAEkhB,GAAE;AAAC,WAAO,IAAI5hB,GAAE4hB,CAAC,EAAE,aAAalhB,CAAC;AAAA,EAAC;AAAA,EAAC,IAAIA,GAAE;AAAC,IAAAA,IAAEA,EAAE,QAAQT,GAAE,gBAAe;AAAA,CACvqJ,GAAE,KAAK,YAAYS,GAAE,KAAK,MAAM;AAAE,aAAQkhB,IAAE,GAAEA,IAAE,KAAK,YAAY,QAAOA,KAAI;AAAC,UAAI1hB,IAAE,KAAK,YAAY0hB,CAAC;AAAE,WAAK,aAAa1hB,EAAE,KAAIA,EAAE,MAAM;AAAA,IAAC;AAAC,WAAO,KAAK,cAAY,CAAA,GAAG,KAAK;AAAA,EAAM;AAAA,EAAC,YAAYQ,GAAEkhB,IAAE,CAAA,GAAG1hB,IAAE,IAAG;;AAAC,SAAI,KAAK,QAAQ,aAAWQ,IAAEA,EAAE,QAAQT,GAAE,eAAc,MAAM,EAAE,QAAQA,GAAE,WAAU,EAAE,IAAGS,KAAG;AAAC,UAAIuU;AAAE,WAAGD,KAAAnG,IAAA,KAAK,QAAQ,eAAb,gBAAAA,EAAyB,UAAzB,QAAAmG,EAAgC,KAAK,CAAA3O,OAAI4O,IAAE5O,EAAE,KAAK,EAAC,OAAM,KAAI,GAAE3F,GAAEkhB,CAAC,MAAIlhB,IAAEA,EAAE,UAAUuU,EAAE,IAAI,MAAM,GAAE2M,EAAE,KAAK3M,CAAC,GAAE,MAAI,IAAI;AAAS,UAAGA,IAAE,KAAK,UAAU,MAAMvU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUuU,EAAE,IAAI,MAAM;AAAE,YAAI5O,IAAEub,EAAE,GAAG,EAAE;AAAE,QAAA3M,EAAE,IAAI,WAAS,KAAG5O,MAAI,SAAOA,EAAE,OAAK;AAAA,IACxhBub,EAAE,KAAK3M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,KAAKvU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUuU,EAAE,IAAI,MAAM;AAAE,YAAI5O,IAAEub,EAAE,GAAG,EAAE;AAAE,SAAAvb,KAAA,gBAAAA,EAAG,UAAO,gBAAaA,KAAA,gBAAAA,EAAG,UAAO,UAAQA,EAAE,QAAMA,EAAE,IAAI,SAAS;AAAA,CAC5J,IAAE,KAAG;AAAA,KACH4O,EAAE,KAAI5O,EAAE,QAAM;AAAA,IACf4O,EAAE,MAAK,KAAK,YAAY,GAAG,EAAE,EAAE,MAAI5O,EAAE,QAAMub,EAAE,KAAK3M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,OAAOvU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUuU,EAAE,IAAI,MAAM,GAAE2M,EAAE,KAAK3M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,QAAQvU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUuU,EAAE,IAAI,MAAM,GAAE2M,EAAE,KAAK3M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,GAAGvU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUuU,EAAE,IAAI,MAAM,GAAE2M,EAAE,KAAK3M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,WAAWvU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUuU,EAAE,IAAI,MAAM,GAAE2M,EAAE,KAAK3M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,KAAKvU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUuU,EAAE,IAAI,MAAM,GAAE2M,EAAE,KAAK3M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,KAAKvU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUuU,EAAE,IAAI,MAAM,GAAE2M,EAAE,KAAK3M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,IAAIvU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUuU,EAAE,IAAI,MAAM;AAAE,YAAI5O,IAAEub,EAAE,GAAG,EAAE;AAAE,SAAAvb,KAAA,gBAAAA,EAAG,UAAO,gBAAaA,KAAA,gBAAAA,EAAG,UAAO,UAAQA,EAAE,QAAMA,EAAE,IAAI,SAAS;AAAA,CACvpB,IAAE,KAAG;AAAA,KACH4O,EAAE,KAAI5O,EAAE,QAAM;AAAA,IACf4O,EAAE,KAAI,KAAK,YAAY,GAAG,EAAE,EAAE,MAAI5O,EAAE,QAAM,KAAK,OAAO,MAAM4O,EAAE,GAAG,MAAI,KAAK,OAAO,MAAMA,EAAE,GAAG,IAAE,EAAC,MAAKA,EAAE,MAAK,OAAMA,EAAE,MAAK,GAAE2M,EAAE,KAAK3M,CAAC;AAAG;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,MAAMvU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUuU,EAAE,IAAI,MAAM,GAAE2M,EAAE,KAAK3M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,SAASvU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUuU,EAAE,IAAI,MAAM,GAAE2M,EAAE,KAAK3M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAItK,IAAEjK;AAAE,WAAGimB,IAAA,KAAK,QAAQ,eAAb,QAAAA,EAAyB,YAAW;AAAC,YAAItgB,IAAE,OAAI/F,IAAEI,EAAE,MAAM,CAAC,GAAEwU;AAAE,aAAK,QAAQ,WAAW,WAAW,QAAQ,CAAA/U,MAAG;AAAC,UAAA+U,IAAE/U,EAAE,KAAK,EAAC,OAAM,KAAI,GAAEG,CAAC,GAAE,OAAO4U,KAAG,YAAUA,KAAG,MAAI7O,IAAE,KAAK,IAAIA,GAAE6O,CAAC;AAAA,QAAE,CAAC,GAAE7O,IAAE,SAAKA,KAAG,MAAIsE,IAAEjK,EAAE,UAAU,GAAE2F,IAAE,CAAC;AAAA,MAAE;AAAC,UAAG,KAAK,MAAM,QAAM4O,IAAE,KAAK,UAAU,UAAUtK,CAAC,IAAG;AAAC,YAAItE,IAAEub,EAAE,GAAG,EAAE;AAAE,QAAA1hB,MAAGmG,KAAA,gBAAAA,EAAG,UAAO,eAAaA,EAAE,QAAMA,EAAE,IAAI,SAAS;AAAA,CACnoB,IAAE,KAAG;AAAA,KACH4O,EAAE,KAAI5O,EAAE,QAAM;AAAA,IACf4O,EAAE,MAAK,KAAK,YAAY,IAAG,GAAG,KAAK,YAAY,GAAG,EAAE,EAAE,MAAI5O,EAAE,QAAMub,EAAE,KAAK3M,CAAC,GAAE/U,IAAEyK,EAAE,WAASjK,EAAE,QAAOA,IAAEA,EAAE,UAAUuU,EAAE,IAAI,MAAM;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,KAAKvU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUuU,EAAE,IAAI,MAAM;AAAE,YAAI5O,IAAEub,EAAE,GAAG,EAAE;AAAE,SAAAvb,KAAA,gBAAAA,EAAG,UAAO,UAAQA,EAAE,QAAMA,EAAE,IAAI,SAAS;AAAA,CACzP,IAAE,KAAG;AAAA,KACH4O,EAAE,KAAI5O,EAAE,QAAM;AAAA,IACf4O,EAAE,MAAK,KAAK,YAAY,IAAG,GAAG,KAAK,YAAY,GAAG,EAAE,EAAE,MAAI5O,EAAE,QAAMub,EAAE,KAAK3M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGvU,GAAE;AAAC,YAAI2F,IAAE,4BAA0B3F,EAAE,WAAW,CAAC;AAAE,YAAG,KAAK,QAAQ,QAAO;AAAC,kBAAQ,MAAM2F,CAAC;AAAE;AAAA,QAAK,MAAM,OAAM,IAAI,MAAMA,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,WAAO,KAAK,MAAM,MAAI,IAAGub;AAAA,EAAC;AAAA,EAAC,OAAOlhB,GAAEkhB,IAAE,CAAA,GAAG;AAAC,WAAO,KAAK,YAAY,KAAK,EAAC,KAAIlhB,GAAE,QAAOkhB,EAAC,CAAC,GAAEA;AAAA,EAAC;AAAA,EAAC,aAAalhB,GAAEkhB,IAAE,CAAA,GAAG;;AAAC,QAAI1hB,IAAEQ,GAAE,IAAE;AAAK,QAAG,KAAK,OAAO,OAAM;AAAC,UAAIwU,IAAE,OAAO,KAAK,KAAK,OAAO,KAAK;AAAE,UAAGA,EAAE,SAAO,EAAE,SAAM,IAAE,KAAK,UAAU,MAAM,OAAO,cAAc,KAAKhV,CAAC,MAAI,OAAM,CAAAgV,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,GAAG,IAAE,GAAE,EAAE,CAAC,MAAIhV,IAAEA,EAAE,MAAM,GAAE,EAAE,KAAK,IAAE,MAAI,IAAI,OAAO,EAAE,CAAC,EAAE,SAAO,CAAC,IAAE,MAAIA,EAAE,MAAM,KAAK,UAAU,MAAM,OAAO,cAAc,SAAS;AAAA,IAAE;AAAC,YAAM,IAAE,KAAK,UAAU,MAAM,OAAO,eAAe,KAAKA,CAAC,MAAI,OAAM,CAAAA,IAAEA,EAAE,MAAM,GAAE,EAAE,KAAK,IAAE,OAAKA,EAAE,MAAM,KAAK,UAAU,MAAM,OAAO,eAAe,SAAS;AAAE,QAAI;AAAE,YAAM,IAAE,KAAK,UAAU,MAAM,OAAO,UAAU,KAAKA,CAAC,MAAI,OAAM,KAAE,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE,SAAO,GAAEA,IAAEA,EAAE,MAAM,GAAE,EAAE,QAAM,CAAC,IAAE,MAAI,IAAI,OAAO,EAAE,CAAC,EAAE,SAAO,IAAE,CAAC,IAAE,MAAIA,EAAE,MAAM,KAAK,UAAU,MAAM,OAAO,UAAU,SAAS;AAAE,IAAAA,MAAE8U,KAAAnG,IAAA,KAAK,QAAQ,UAAb,gBAAAA,EAAoB,iBAApB,gBAAAmG,EAAkC,KAAK,EAAC,OAAM,KAAI,GAAE9U,OAAIA;AAAE,QAAImG,IAAE,IAAG/F,IAAE;AAAG,WAAKI,KAAG;AAAC,MAAA2F,MAAI/F,IAAE,KAAI+F,IAAE;AAAG,UAAI6O;AAAE,WAAG0R,KAAAD,IAAA,KAAK,QAAQ,eAAb,gBAAAA,EAAyB,WAAzB,QAAAC,EAAiC,KAAK,CAAAF,OAAIxR,IAAEwR,EAAE,KAAK,EAAC,OAAM,KAAI,GAAEhmB,GAAEkhB,CAAC,MAAIlhB,IAAEA,EAAE,UAAUwU,EAAE,IAAI,MAAM,GAAE0M,EAAE,KAAK1M,CAAC,GAAE,MAAI,IAAI;AAAS,UAAGA,IAAE,KAAK,UAAU,OAAOxU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUwU,EAAE,IAAI,MAAM,GAAE0M,EAAE,KAAK1M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,IAAIxU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUwU,EAAE,IAAI,MAAM,GAAE0M,EAAE,KAAK1M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,KAAKxU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUwU,EAAE,IAAI,MAAM,GAAE0M,EAAE,KAAK1M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,QAAQxU,GAAE,KAAK,OAAO,KAAK,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUwU,EAAE,IAAI,MAAM;AAAE,YAAIwR,IAAE9E,EAAE,GAAG,EAAE;AAAE,QAAA1M,EAAE,SAAO,WAAQwR,KAAA,gBAAAA,EAAG,UAAO,UAAQA,EAAE,OAAKxR,EAAE,KAAIwR,EAAE,QAAMxR,EAAE,QAAM0M,EAAE,KAAK1M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,SAASxU,GAAER,GAAEI,CAAC,GAAE;AAAC,QAAAI,IAAEA,EAAE,UAAUwU,EAAE,IAAI,MAAM,GAAE0M,EAAE,KAAK1M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,SAASxU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUwU,EAAE,IAAI,MAAM,GAAE0M,EAAE,KAAK1M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,GAAGxU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUwU,EAAE,IAAI,MAAM,GAAE0M,EAAE,KAAK1M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,IAAIxU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUwU,EAAE,IAAI,MAAM,GAAE0M,EAAE,KAAK1M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGA,IAAE,KAAK,UAAU,SAASxU,CAAC,GAAE;AAAC,QAAAA,IAAEA,EAAE,UAAUwU,EAAE,IAAI,MAAM,GAAE0M,EAAE,KAAK1M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAG,CAAC,KAAK,MAAM,WAASA,IAAE,KAAK,UAAU,IAAIxU,CAAC,IAAG;AAAC,QAAAA,IAAEA,EAAE,UAAUwU,EAAE,IAAI,MAAM,GAAE0M,EAAE,KAAK1M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAI/U,IAAEO;AAAE,WAAGmiB,IAAA,KAAK,QAAQ,eAAb,QAAAA,EAAyB,aAAY;AAAC,YAAI6D,IAAE,OAAIrmB,IAAEK,EAAE,MAAM,CAAC,GAAEH;AAAE,aAAK,QAAQ,WAAW,YAAY,QAAQ,CAAAI,MAAG;AAAC,UAAAJ,IAAEI,EAAE,KAAK,EAAC,OAAM,KAAI,GAAEN,CAAC,GAAE,OAAOE,KAAG,YAAUA,KAAG,MAAImmB,IAAE,KAAK,IAAIA,GAAEnmB,CAAC;AAAA,QAAE,CAAC,GAAEmmB,IAAE,SAAKA,KAAG,MAAIvmB,IAAEO,EAAE,UAAU,GAAEgmB,IAAE,CAAC;AAAA,MAAE;AAAC,UAAGxR,IAAE,KAAK,UAAU,WAAW/U,CAAC,GAAE;AAAC,QAAAO,IAAEA,EAAE,UAAUwU,EAAE,IAAI,MAAM,GAAEA,EAAE,IAAI,MAAM,EAAE,MAAI,QAAM5U,IAAE4U,EAAE,IAAI,MAAM,EAAE,IAAG7O,IAAE;AAAG,YAAIqgB,IAAE9E,EAAE,GAAG,EAAE;AAAE,SAAA8E,KAAA,gBAAAA,EAAG,UAAO,UAAQA,EAAE,OAAKxR,EAAE,KAAIwR,EAAE,QAAMxR,EAAE,QAAM0M,EAAE,KAAK1M,CAAC;AAAE;AAAA,MAAQ;AAAC,UAAGxU,GAAE;AAAC,YAAIgmB,IAAE,4BAA0BhmB,EAAE,WAAW,CAAC;AAAE,YAAG,KAAK,QAAQ,QAAO;AAAC,kBAAQ,MAAMgmB,CAAC;AAAE;AAAA,QAAK,MAAM,OAAM,IAAI,MAAMA,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,WAAO9E;AAAA,EAAC;AAAC,GAAMiF,KAAE,MAAK;AAAA,EAAgB,YAAYnmB,GAAE;AAA7B,IAAAqlB,EAAA;AAAQ,IAAAA,EAAA;AAAsB,SAAK,UAAQrlB,KAAG+gB;AAAAA,EAAC;AAAA,EAAC,MAAM/gB,GAAE;AAAC,WAAM;AAAA,EAAE;AAAA,EAAC,KAAK,EAAC,MAAKA,GAAE,MAAK,GAAE,SAAQR,EAAC,GAAE;;AAAC,QAAI+U,KAAGpG,KAAA,KAAG,IAAI,MAAM5O,GAAE,aAAa,MAA5B,gBAAA4O,EAAgC,IAAGlE,IAAEjK,EAAE,QAAQT,GAAE,eAAc,EAAE,IAAE;AAAA;AAC7zF,WAAOgV,IAAE,gCAA8BhE,GAAEgE,CAAC,IAAE,QAAM/U,IAAEyK,IAAEsG,GAAEtG,GAAE,EAAE,KAAG;AAAA,IAC/D,iBAAezK,IAAEyK,IAAEsG,GAAEtG,GAAE,EAAE,KAAG;AAAA;AAAA,EAC7B;AAAA,EAAC,WAAW,EAAC,QAAOjK,EAAC,GAAE;AAAC,WAAM;AAAA,EAC7B,KAAK,OAAO,MAAMA,CAAC,CAAC;AAAA;AAAA,EACrB;AAAA,EAAC,KAAK,EAAC,MAAKA,EAAC,GAAE;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,IAAIA,GAAE;AAAC,WAAM;AAAA,EAAE;AAAA,EAAC,QAAQ,EAAC,QAAOA,GAAE,OAAM,EAAC,GAAE;AAAC,WAAM,KAAK,CAAC,IAAI,KAAK,OAAO,YAAYA,CAAC,CAAC,MAAM,CAAC;AAAA;AAAA,EACtH;AAAA,EAAC,GAAGA,GAAE;AAAC,WAAM;AAAA;AAAA,EACb;AAAA,EAAC,KAAKA,GAAE;AAAC,QAAI,IAAEA,EAAE,SAAQR,IAAEQ,EAAE,OAAMuU,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAEvU,EAAE,MAAM,QAAO,KAAI;AAAC,UAAI,IAAEA,EAAE,MAAM,CAAC;AAAE,MAAAuU,KAAG,KAAK,SAAS,CAAC;AAAA,IAAC;AAAC,QAAItK,IAAE,IAAE,OAAK,MAAKtE,IAAE,KAAGnG,MAAI,IAAE,aAAWA,IAAE,MAAI;AAAG,WAAM,MAAIyK,IAAEtE,IAAE;AAAA,IAC7K4O,IAAE,OAAKtK,IAAE;AAAA;AAAA,EACV;AAAA,EAAC,SAASjK,GAAE;;AAAC,QAAI,IAAE;AAAG,QAAGA,EAAE,MAAK;AAAC,UAAIR,IAAE,KAAK,SAAS,EAAC,SAAQ,CAAC,CAACQ,EAAE,QAAO,CAAC;AAAE,MAAAA,EAAE,UAAMmO,IAAAnO,EAAE,OAAO,CAAC,MAAV,gBAAAmO,EAAa,UAAO,eAAanO,EAAE,OAAO,CAAC,EAAE,OAAKR,IAAE,MAAIQ,EAAE,OAAO,CAAC,EAAE,MAAKA,EAAE,OAAO,CAAC,EAAE,UAAQA,EAAE,OAAO,CAAC,EAAE,OAAO,SAAO,KAAGA,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,SAAO,WAASA,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,OAAKR,IAAE,MAAI+Q,GAAEvQ,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,GAAEA,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,UAAQ,OAAKA,EAAE,OAAO,QAAQ,EAAC,MAAK,QAAO,KAAIR,IAAE,KAAI,MAAKA,IAAE,KAAI,SAAQ,GAAE,CAAC,IAAE,KAAGA,IAAE;AAAA,IAAG;AAAC,WAAO,KAAG,KAAK,OAAO,MAAMQ,EAAE,QAAO,CAAC,CAACA,EAAE,KAAK,GAAE,OAAO,CAAC;AAAA;AAAA,EACvd;AAAA,EAAC,SAAS,EAAC,SAAQA,EAAC,GAAE;AAAC,WAAM,aAAWA,IAAE,gBAAc,MAAI;AAAA,EAA8B;AAAA,EAAC,UAAU,EAAC,QAAOA,EAAC,GAAE;AAAC,WAAM,MAAM,KAAK,OAAO,YAAYA,CAAC,CAAC;AAAA;AAAA,EACvJ;AAAA,EAAC,MAAMA,GAAE;AAAC,QAAI,IAAE,IAAGR,IAAE;AAAG,aAAQyK,IAAE,GAAEA,IAAEjK,EAAE,OAAO,QAAOiK,IAAI,CAAAzK,KAAG,KAAK,UAAUQ,EAAE,OAAOiK,CAAC,CAAC;AAAE,SAAG,KAAK,SAAS,EAAC,MAAKzK,EAAC,CAAC;AAAE,QAAI+U,IAAE;AAAG,aAAQtK,IAAE,GAAEA,IAAEjK,EAAE,KAAK,QAAOiK,KAAI;AAAC,UAAItE,IAAE3F,EAAE,KAAKiK,CAAC;AAAE,MAAAzK,IAAE;AAAG,eAAQ,IAAE,GAAE,IAAEmG,EAAE,QAAO,IAAI,CAAAnG,KAAG,KAAK,UAAUmG,EAAE,CAAC,CAAC;AAAE,MAAA4O,KAAG,KAAK,SAAS,EAAC,MAAK/U,EAAC,CAAC;AAAA,IAAC;AAAC,WAAO+U,MAAIA,IAAE,UAAUA,CAAC,aAAY;AAAA;AAAA,IAEpS,IAAE;AAAA,IACFA,IAAE;AAAA;AAAA,EACH;AAAA,EAAC,SAAS,EAAC,MAAKvU,EAAC,GAAE;AAAC,WAAM;AAAA,EACzBA,CAAC;AAAA;AAAA,EACF;AAAA,EAAC,UAAUA,GAAE;AAAC,QAAI,IAAE,KAAK,OAAO,YAAYA,EAAE,MAAM,GAAER,IAAEQ,EAAE,SAAO,OAAK;AAAK,YAAOA,EAAE,QAAM,IAAIR,CAAC,WAAWQ,EAAE,KAAK,OAAK,IAAIR,CAAC,OAAK,IAAE,KAAKA,CAAC;AAAA;AAAA,EACxI;AAAA,EAAC,OAAO,EAAC,QAAOQ,EAAC,GAAE;AAAC,WAAM,WAAW,KAAK,OAAO,YAAYA,CAAC,CAAC;AAAA,EAAW;AAAA,EAAC,GAAG,EAAC,QAAOA,EAAC,GAAE;AAAC,WAAM,OAAO,KAAK,OAAO,YAAYA,CAAC,CAAC;AAAA,EAAO;AAAA,EAAC,SAAS,EAAC,MAAKA,EAAC,GAAE;AAAC,WAAM,SAASuQ,GAAEvQ,GAAE,EAAE,CAAC;AAAA,EAAS;AAAA,EAAC,GAAGA,GAAE;AAAC,WAAM;AAAA,EAAM;AAAA,EAAC,IAAI,EAAC,QAAOA,EAAC,GAAE;AAAC,WAAM,QAAQ,KAAK,OAAO,YAAYA,CAAC,CAAC;AAAA,EAAQ;AAAA,EAAC,KAAK,EAAC,MAAKA,GAAE,OAAM,GAAE,QAAOR,EAAC,GAAE;AAAC,QAAI+U,IAAE,KAAK,OAAO,YAAY/U,CAAC,GAAEyK,IAAE6a,GAAE9kB,CAAC;AAAE,QAAGiK,MAAI,KAAK,QAAOsK;AAAE,IAAAvU,IAAEiK;AAAE,QAAItE,IAAE,cAAY3F,IAAE;AAAI,WAAO,MAAI2F,KAAG,aAAW4K,GAAE,CAAC,IAAE,MAAK5K,KAAG,MAAI4O,IAAE,QAAO5O;AAAA,EAAC;AAAA,EAAC,MAAM,EAAC,MAAK3F,GAAE,OAAM,GAAE,MAAKR,GAAE,QAAO+U,EAAC,GAAE;AAAC,IAAAA,MAAI/U,IAAE,KAAK,OAAO,YAAY+U,GAAE,KAAK,OAAO,YAAY;AAAG,QAAItK,IAAE6a,GAAE9kB,CAAC;AAAE,QAAGiK,MAAI,KAAK,QAAOsG,GAAE/Q,CAAC;AAAE,IAAAQ,IAAEiK;AAAE,QAAItE,IAAE,aAAa3F,CAAC,UAAUR,CAAC;AAAI,WAAO,MAAImG,KAAG,WAAW4K,GAAE,CAAC,CAAC,MAAK5K,KAAG,KAAIA;AAAA,EAAC;AAAA,EAAC,KAAK3F,GAAE;AAAC,WAAM,YAAWA,KAAGA,EAAE,SAAO,KAAK,OAAO,YAAYA,EAAE,MAAM,IAAE,aAAYA,KAAGA,EAAE,UAAQA,EAAE,OAAKuQ,GAAEvQ,EAAE,IAAI;AAAA,EAAC;AAAC,GAAMomB,KAAE,MAAK;AAAA,EAAC,OAAO,EAAC,MAAKpmB,EAAC,GAAE;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,GAAG,EAAC,MAAKA,EAAC,GAAE;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,SAAS,EAAC,MAAKA,EAAC,GAAE;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,IAAI,EAAC,MAAKA,EAAC,GAAE;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,KAAK,EAAC,MAAKA,EAAC,GAAE;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,KAAK,EAAC,MAAKA,EAAC,GAAE;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,KAAK,EAAC,MAAKA,EAAC,GAAE;AAAC,WAAM,KAAGA;AAAA,EAAC;AAAA,EAAC,MAAM,EAAC,MAAKA,EAAC,GAAE;AAAC,WAAM,KAAGA;AAAA,EAAC;AAAA,EAAC,KAAI;AAAC,WAAM;AAAA,EAAE;AAAC,GAAMF,KAAE,MAAMR,GAAC;AAAA,EAA+B,YAAYU,GAAE;AAA5C,IAAAqlB,EAAA;AAAQ,IAAAA,EAAA;AAAS,IAAAA,EAAA;AAA4B,SAAK,UAAQrlB,KAAG+gB,IAAE,KAAK,QAAQ,WAAS,KAAK,QAAQ,YAAU,IAAIoF,MAAE,KAAK,WAAS,KAAK,QAAQ,UAAS,KAAK,SAAS,UAAQ,KAAK,SAAQ,KAAK,SAAS,SAAO,MAAK,KAAK,eAAa,IAAIC;AAAA,EAAC;AAAA,EAAC,OAAO,MAAMpmB,GAAEkhB,GAAE;AAAC,WAAO,IAAI5hB,GAAE4hB,CAAC,EAAE,MAAMlhB,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,YAAYA,GAAEkhB,GAAE;AAAC,WAAO,IAAI5hB,GAAE4hB,CAAC,EAAE,YAAYlhB,CAAC;AAAA,EAAC;AAAA,EAAC,MAAMA,GAAEkhB,IAAE,IAAG;;AAAC,QAAI1hB,IAAE;AAAG,aAAQ+U,IAAE,GAAEA,IAAEvU,EAAE,QAAOuU,KAAI;AAAC,UAAItK,IAAEjK,EAAEuU,CAAC;AAAE,WAAGD,KAAAnG,IAAA,KAAK,QAAQ,eAAb,gBAAAA,EAAyB,cAAzB,QAAAmG,EAAqCrK,EAAE,OAAM;AAAC,YAAIrK,IAAEqK,GAAEuK,IAAE,KAAK,QAAQ,WAAW,UAAU5U,EAAE,IAAI,EAAE,KAAK,EAAC,QAAO,KAAI,GAAEA,CAAC;AAAE,YAAG4U,MAAI,MAAI,CAAC,CAAC,SAAQ,MAAK,WAAU,QAAO,SAAQ,cAAa,QAAO,QAAO,OAAM,aAAY,MAAM,EAAE,SAAS5U,EAAE,IAAI,GAAE;AAAC,UAAAJ,KAAGgV,KAAG;AAAG;AAAA,QAAQ;AAAA,MAAC;AAAC,UAAI7O,IAAEsE;AAAE,cAAOtE,EAAE,MAAI;AAAA,QAAE,KAAI,SAAQ;AAAC,UAAAnG,KAAG,KAAK,SAAS,MAAMmG,CAAC;AAAE;AAAA,QAAQ;AAAA,QAAC,KAAI,MAAK;AAAC,UAAAnG,KAAG,KAAK,SAAS,GAAGmG,CAAC;AAAE;AAAA,QAAQ;AAAA,QAAC,KAAI,WAAU;AAAC,UAAAnG,KAAG,KAAK,SAAS,QAAQmG,CAAC;AAAE;AAAA,QAAQ;AAAA,QAAC,KAAI,QAAO;AAAC,UAAAnG,KAAG,KAAK,SAAS,KAAKmG,CAAC;AAAE;AAAA,QAAQ;AAAA,QAAC,KAAI,SAAQ;AAAC,UAAAnG,KAAG,KAAK,SAAS,MAAMmG,CAAC;AAAE;AAAA,QAAQ;AAAA,QAAC,KAAI,cAAa;AAAC,UAAAnG,KAAG,KAAK,SAAS,WAAWmG,CAAC;AAAE;AAAA,QAAQ;AAAA,QAAC,KAAI,QAAO;AAAC,UAAAnG,KAAG,KAAK,SAAS,KAAKmG,CAAC;AAAE;AAAA,QAAQ;AAAA,QAAC,KAAI,QAAO;AAAC,UAAAnG,KAAG,KAAK,SAAS,KAAKmG,CAAC;AAAE;AAAA,QAAQ;AAAA,QAAC,KAAI,OAAM;AAAC,UAAAnG,KAAG,KAAK,SAAS,IAAImG,CAAC;AAAE;AAAA,QAAQ;AAAA,QAAC,KAAI,aAAY;AAAC,UAAAnG,KAAG,KAAK,SAAS,UAAUmG,CAAC;AAAE;AAAA,QAAQ;AAAA,QAAC,KAAI,QAAO;AAAC,cAAI/F,IAAE+F,GAAE6O,IAAE,KAAK,SAAS,KAAK5U,CAAC;AAAE,iBAAK2U,IAAE,IAAEvU,EAAE,UAAQA,EAAEuU,IAAE,CAAC,EAAE,SAAO,SAAQ,CAAA3U,IAAEI,EAAE,EAAEuU,CAAC,GAAEC,KAAG;AAAA,IAC3uE,KAAK,SAAS,KAAK5U,CAAC;AAAE,UAAAshB,IAAE1hB,KAAG,KAAK,SAAS,UAAU,EAAC,MAAK,aAAY,KAAIgV,GAAE,MAAKA,GAAE,QAAO,CAAC,EAAC,MAAK,QAAO,KAAIA,GAAE,MAAKA,GAAE,SAAQ,GAAE,CAAC,EAAC,CAAC,IAAEhV,KAAGgV;AAAE;AAAA,QAAQ;AAAA,QAAC,SAAQ;AAAC,cAAI5U,IAAE,iBAAe+F,EAAE,OAAK;AAAwB,cAAG,KAAK,QAAQ,OAAO,QAAO,QAAQ,MAAM/F,CAAC,GAAE;AAAG,gBAAM,IAAI,MAAMA,CAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAC,WAAOJ;AAAA,EAAC;AAAA,EAAC,YAAYQ,GAAEkhB,IAAE,KAAK,UAAS;;AAAC,QAAI1hB,IAAE;AAAG,aAAQ+U,IAAE,GAAEA,IAAEvU,EAAE,QAAOuU,KAAI;AAAC,UAAItK,IAAEjK,EAAEuU,CAAC;AAAE,WAAGD,KAAAnG,IAAA,KAAK,QAAQ,eAAb,gBAAAA,EAAyB,cAAzB,QAAAmG,EAAqCrK,EAAE,OAAM;AAAC,YAAIrK,IAAE,KAAK,QAAQ,WAAW,UAAUqK,EAAE,IAAI,EAAE,KAAK,EAAC,QAAO,KAAI,GAAEA,CAAC;AAAE,YAAGrK,MAAI,MAAI,CAAC,CAAC,UAAS,QAAO,QAAO,SAAQ,UAAS,MAAK,YAAW,MAAK,OAAM,MAAM,EAAE,SAASqK,EAAE,IAAI,GAAE;AAAC,UAAAzK,KAAGI,KAAG;AAAG;AAAA,QAAQ;AAAA,MAAC;AAAC,UAAI+F,IAAEsE;AAAE,cAAOtE,EAAE,MAAI;AAAA,QAAE,KAAI,UAAS;AAAC,UAAAnG,KAAG0hB,EAAE,KAAKvb,CAAC;AAAE;AAAA,QAAK;AAAA,QAAC,KAAI,QAAO;AAAC,UAAAnG,KAAG0hB,EAAE,KAAKvb,CAAC;AAAE;AAAA,QAAK;AAAA,QAAC,KAAI,QAAO;AAAC,UAAAnG,KAAG0hB,EAAE,KAAKvb,CAAC;AAAE;AAAA,QAAK;AAAA,QAAC,KAAI,SAAQ;AAAC,UAAAnG,KAAG0hB,EAAE,MAAMvb,CAAC;AAAE;AAAA,QAAK;AAAA,QAAC,KAAI,UAAS;AAAC,UAAAnG,KAAG0hB,EAAE,OAAOvb,CAAC;AAAE;AAAA,QAAK;AAAA,QAAC,KAAI,MAAK;AAAC,UAAAnG,KAAG0hB,EAAE,GAAGvb,CAAC;AAAE;AAAA,QAAK;AAAA,QAAC,KAAI,YAAW;AAAC,UAAAnG,KAAG0hB,EAAE,SAASvb,CAAC;AAAE;AAAA,QAAK;AAAA,QAAC,KAAI,MAAK;AAAC,UAAAnG,KAAG0hB,EAAE,GAAGvb,CAAC;AAAE;AAAA,QAAK;AAAA,QAAC,KAAI,OAAM;AAAC,UAAAnG,KAAG0hB,EAAE,IAAIvb,CAAC;AAAE;AAAA,QAAK;AAAA,QAAC,KAAI,QAAO;AAAC,UAAAnG,KAAG0hB,EAAE,KAAKvb,CAAC;AAAE;AAAA,QAAK;AAAA,QAAC,SAAQ;AAAC,cAAI/F,IAAE,iBAAe+F,EAAE,OAAK;AAAwB,cAAG,KAAK,QAAQ,OAAO,QAAO,QAAQ,MAAM/F,CAAC,GAAE;AAAG,gBAAM,IAAI,MAAMA,CAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAC,WAAOJ;AAAA,EAAC;AAAC,OAAM6mB,MAAElY,KAAA,MAAK;AAAA,EAAe,YAAYnO,GAAE;AAA5B,IAAAqlB,EAAA;AAAQ,IAAAA,EAAA;AAAqB,SAAK,UAAQrlB,KAAG+gB;AAAAA,EAAC;AAAA,EAA8L,WAAW/gB,GAAE;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,YAAYA,GAAE;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,iBAAiBA,GAAE;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,aAAaA,GAAE;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,eAAc;AAAC,WAAO,KAAK,QAAM2E,GAAE,MAAIA,GAAE;AAAA,EAAS;AAAA,EAAC,gBAAe;AAAC,WAAO,KAAK,QAAM7E,GAAE,QAAMA,GAAE;AAAA,EAAW;AAAC,GAA7YulB,EAArDlX,IAA4D,oBAAiB,oBAAI,IAAI,CAAC,cAAa,eAAc,oBAAmB,cAAc,CAAC,IAAEkX,EAArJlX,IAA4J,gCAA6B,oBAAI,IAAI,CAAC,cAAa,eAAc,kBAAkB,CAAC,IAAhPA,KAAwcmY,KAAE,MAAK;AAAA,EAAqK,eAAetmB,GAAE;AAArL,IAAAqlB,EAAA,kBAASvE,GAAC;AAAG,IAAAuE,EAAA,iBAAQ,KAAK;AAAW,IAAAA,EAAA,eAAM,KAAK,cAAc,EAAE;AAAE,IAAAA,EAAA,qBAAY,KAAK,cAAc,EAAE;AAAE,IAAAA,EAAA,gBAAOvlB;AAAE,IAAAulB,EAAA,kBAASc;AAAE,IAAAd,EAAA,sBAAae;AAAE,IAAAf,EAAA,eAAM1gB;AAAE,IAAA0gB,EAAA,mBAAUD;AAAE,IAAAC,EAAA,eAAMgB;AAAoB,SAAK,IAAI,GAAGrmB,CAAC;AAAA,EAAC;AAAA,EAAC,WAAWA,GAAE,GAAE;;AAAC,QAAIR,IAAE,CAAA;AAAG,aAAQ+U,KAAKvU,EAAE,SAAOR,IAAEA,EAAE,OAAO,EAAE,KAAK,MAAK+U,CAAC,CAAC,GAAEA,EAAE,MAAI;AAAA,MAAE,KAAI,SAAQ;AAAC,YAAItK,IAAEsK;AAAE,iBAAQ5O,KAAKsE,EAAE,OAAO,CAAAzK,IAAEA,EAAE,OAAO,KAAK,WAAWmG,EAAE,QAAO,CAAC,CAAC;AAAE,iBAAQA,KAAKsE,EAAE,KAAK,UAAQrK,KAAK+F,EAAE,CAAAnG,IAAEA,EAAE,OAAO,KAAK,WAAWI,EAAE,QAAO,CAAC,CAAC;AAAE;AAAA,MAAK;AAAA,MAAC,KAAI,QAAO;AAAC,YAAIqK,IAAEsK;AAAE,QAAA/U,IAAEA,EAAE,OAAO,KAAK,WAAWyK,EAAE,OAAM,CAAC,CAAC;AAAE;AAAA,MAAK;AAAA,MAAC,SAAQ;AAAC,YAAIA,IAAEsK;AAAE,SAAAD,KAAAnG,IAAA,KAAK,SAAS,eAAd,gBAAAA,EAA0B,gBAA1B,QAAAmG,EAAwCrK,EAAE,QAAM,KAAK,SAAS,WAAW,YAAYA,EAAE,IAAI,EAAE,QAAQ,CAAAtE,MAAG;AAAC,cAAI/F,IAAEqK,EAAEtE,CAAC,EAAE,KAAK,KAAG;AAAE,UAAAnG,IAAEA,EAAE,OAAO,KAAK,WAAWI,GAAE,CAAC,CAAC;AAAA,QAAC,CAAC,IAAEqK,EAAE,WAASzK,IAAEA,EAAE,OAAO,KAAK,WAAWyK,EAAE,QAAO,CAAC,CAAC;AAAA,MAAE;AAAA,IAAC;AAAC,WAAOzK;AAAA,EAAC;AAAA,EAAC,OAAOQ,GAAE;AAAC,QAAI,IAAE,KAAK,SAAS,cAAY,EAAC,WAAU,CAAA,GAAG,aAAY,CAAA,EAAE;AAAE,WAAOA,EAAE,QAAQ,CAAAR,MAAG;AAAC,UAAI+U,IAAE,EAAC,GAAG/U,EAAC;AAAE,UAAG+U,EAAE,QAAM,KAAK,SAAS,SAAOA,EAAE,SAAO,IAAG/U,EAAE,eAAaA,EAAE,WAAW,QAAQ,CAAAyK,MAAG;AAAC,YAAG,CAACA,EAAE,KAAK,OAAM,IAAI,MAAM,yBAAyB;AAAE,YAAG,cAAaA,GAAE;AAAC,cAAItE,IAAE,EAAE,UAAUsE,EAAE,IAAI;AAAE,UAAAtE,IAAE,EAAE,UAAUsE,EAAE,IAAI,IAAE,YAAY,GAAE;AAAC,gBAAI,IAAEA,EAAE,SAAS,MAAM,MAAK,CAAC;AAAE,mBAAO,MAAI,OAAK,IAAEtE,EAAE,MAAM,MAAK,CAAC,IAAG;AAAA,UAAC,IAAE,EAAE,UAAUsE,EAAE,IAAI,IAAEA,EAAE;AAAA,QAAQ;AAAC,YAAG,eAAcA,GAAE;AAAC,cAAG,CAACA,EAAE,SAAOA,EAAE,UAAQ,WAASA,EAAE,UAAQ,SAAS,OAAM,IAAI,MAAM,6CAA6C;AAAE,cAAItE,IAAE,EAAEsE,EAAE,KAAK;AAAE,UAAAtE,IAAEA,EAAE,QAAQsE,EAAE,SAAS,IAAE,EAAEA,EAAE,KAAK,IAAE,CAACA,EAAE,SAAS,GAAEA,EAAE,UAAQA,EAAE,UAAQ,UAAQ,EAAE,aAAW,EAAE,WAAW,KAAKA,EAAE,KAAK,IAAE,EAAE,aAAW,CAACA,EAAE,KAAK,IAAEA,EAAE,UAAQ,aAAW,EAAE,cAAY,EAAE,YAAY,KAAKA,EAAE,KAAK,IAAE,EAAE,cAAY,CAACA,EAAE,KAAK;AAAA,QAAG;AAAC,yBAAgBA,KAAGA,EAAE,gBAAc,EAAE,YAAYA,EAAE,IAAI,IAAEA,EAAE;AAAA,MAAY,CAAC,GAAEsK,EAAE,aAAW,IAAG/U,EAAE,UAAS;AAAC,YAAIyK,IAAE,KAAK,SAAS,YAAU,IAAIkc,GAAE,KAAK,QAAQ;AAAE,iBAAQxgB,KAAKnG,EAAE,UAAS;AAAC,cAAG,EAAEmG,KAAKsE,GAAG,OAAM,IAAI,MAAM,aAAatE,CAAC,kBAAkB;AAAE,cAAG,CAAC,WAAU,QAAQ,EAAE,SAASA,CAAC,EAAE;AAAS,cAAI,IAAEA,GAAE,IAAEnG,EAAE,SAAS,CAAC,GAAEC,IAAEwK,EAAE,CAAC;AAAE,UAAAA,EAAE,CAAC,IAAE,IAAI,MAAI;AAAC,gBAAItK,IAAE,EAAE,MAAMsK,GAAE,CAAC;AAAE,mBAAOtK,MAAI,OAAKA,IAAEF,EAAE,MAAMwK,GAAE,CAAC,IAAGtK,KAAG;AAAA,UAAE;AAAA,QAAC;AAAC,QAAA4U,EAAE,WAAStK;AAAA,MAAC;AAAC,UAAGzK,EAAE,WAAU;AAAC,YAAIyK,IAAE,KAAK,SAAS,aAAW,IAAImb,GAAE,KAAK,QAAQ;AAAE,iBAAQzf,KAAKnG,EAAE,WAAU;AAAC,cAAG,EAAEmG,KAAKsE,GAAG,OAAM,IAAI,MAAM,cAActE,CAAC,kBAAkB;AAAE,cAAG,CAAC,WAAU,SAAQ,OAAO,EAAE,SAASA,CAAC,EAAE;AAAS,cAAI,IAAEA,GAAE,IAAEnG,EAAE,UAAU,CAAC,GAAEC,IAAEwK,EAAE,CAAC;AAAE,UAAAA,EAAE,CAAC,IAAE,IAAI,MAAI;AAAC,gBAAItK,IAAE,EAAE,MAAMsK,GAAE,CAAC;AAAE,mBAAOtK,MAAI,OAAKA,IAAEF,EAAE,MAAMwK,GAAE,CAAC,IAAGtK;AAAA,UAAC;AAAA,QAAC;AAAC,QAAA4U,EAAE,YAAUtK;AAAA,MAAC;AAAC,UAAGzK,EAAE,OAAM;AAAC,YAAIyK,IAAE,KAAK,SAAS,SAAO,IAAIoc;AAAE,iBAAQ1gB,KAAKnG,EAAE,OAAM;AAAC,cAAG,EAAEmG,KAAKsE,GAAG,OAAM,IAAI,MAAM,SAAStE,CAAC,kBAAkB;AAAE,cAAG,CAAC,WAAU,OAAO,EAAE,SAASA,CAAC,EAAE;AAAS,cAAI,IAAEA,GAAE,IAAEnG,EAAE,MAAM,CAAC,GAAEC,IAAEwK,EAAE,CAAC;AAAE,UAAAoc,GAAE,iBAAiB,IAAI1gB,CAAC,IAAEsE,EAAE,CAAC,IAAE,OAAG;AAAC,gBAAG,KAAK,SAAS,SAAOoc,GAAE,6BAA6B,IAAI1gB,CAAC,EAAE,SAAO,YAAS;AAAC,kBAAI9F,IAAE,MAAM,EAAE,KAAKoK,GAAE,CAAC;AAAE,qBAAOxK,EAAE,KAAKwK,GAAEpK,CAAC;AAAA,YAAC,GAAC;AAAI,gBAAIF,IAAE,EAAE,KAAKsK,GAAE,CAAC;AAAE,mBAAOxK,EAAE,KAAKwK,GAAEtK,CAAC;AAAA,UAAC,IAAEsK,EAAE,CAAC,IAAE,IAAI,MAAI;AAAC,gBAAG,KAAK,SAAS,MAAM,SAAO,YAAS;AAAC,kBAAIpK,IAAE,MAAM,EAAE,MAAMoK,GAAE,CAAC;AAAE,qBAAOpK,MAAI,OAAKA,IAAE,MAAMJ,EAAE,MAAMwK,GAAE,CAAC,IAAGpK;AAAA,YAAC,GAAC;AAAI,gBAAIF,IAAE,EAAE,MAAMsK,GAAE,CAAC;AAAE,mBAAOtK,MAAI,OAAKA,IAAEF,EAAE,MAAMwK,GAAE,CAAC,IAAGtK;AAAA,UAAC;AAAA,QAAC;AAAC,QAAA4U,EAAE,QAAMtK;AAAA,MAAC;AAAC,UAAGzK,EAAE,YAAW;AAAC,YAAIyK,IAAE,KAAK,SAAS,YAAWtE,IAAEnG,EAAE;AAAW,QAAA+U,EAAE,aAAW,SAAS,GAAE;AAAC,cAAI,IAAE;AAAG,iBAAO,EAAE,KAAK5O,EAAE,KAAK,MAAK,CAAC,CAAC,GAAEsE,MAAI,IAAE,EAAE,OAAOA,EAAE,KAAK,MAAK,CAAC,CAAC,IAAG;AAAA,QAAC;AAAA,MAAC;AAAC,WAAK,WAAS,EAAC,GAAG,KAAK,UAAS,GAAGsK,EAAC;AAAA,IAAC,CAAC,GAAE;AAAA,EAAI;AAAA,EAAC,WAAWvU,GAAE;AAAC,WAAO,KAAK,WAAS,EAAC,GAAG,KAAK,UAAS,GAAGA,EAAC,GAAE;AAAA,EAAI;AAAA,EAAC,MAAMA,GAAE,GAAE;AAAC,WAAO2E,GAAE,IAAI3E,GAAE,KAAG,KAAK,QAAQ;AAAA,EAAC;AAAA,EAAC,OAAOA,GAAE,GAAE;AAAC,WAAOF,GAAE,MAAME,GAAE,KAAG,KAAK,QAAQ;AAAA,EAAC;AAAA,EAAC,cAAcA,GAAE;AAAC,WAAM,CAACR,GAAE+U,MAAI;AAAC,UAAItK,IAAE,EAAC,GAAGsK,EAAC,GAAE5O,IAAE,EAAC,GAAG,KAAK,UAAS,GAAGsE,EAAC,GAAErK,IAAE,KAAK,QAAQ,CAAC,CAAC+F,EAAE,QAAO,CAAC,CAACA,EAAE,KAAK;AAAE,UAAG,KAAK,SAAS,UAAQ,MAAIsE,EAAE,UAAQ,GAAG,QAAOrK,EAAE,IAAI,MAAM,oIAAoI,CAAC;AAAE,UAAG,OAAOJ,IAAE,OAAKA,MAAI,KAAK,QAAOI,EAAE,IAAI,MAAM,gDAAgD,CAAC;AAAE,UAAG,OAAOJ,KAAG,SAAS,QAAOI,EAAE,IAAI,MAAM,0CAAwC,OAAO,UAAU,SAAS,KAAKJ,CAAC,IAAE,mBAAmB,CAAC;AAAE,UAAGmG,EAAE,UAAQA,EAAE,MAAM,UAAQA,GAAEA,EAAE,MAAM,QAAM3F,IAAG2F,EAAE,MAAM,SAAO,YAAS;AAAC,YAAI6O,IAAE7O,EAAE,QAAM,MAAMA,EAAE,MAAM,WAAWnG,CAAC,IAAEA,GAAEwmB,IAAE,OAAMrgB,EAAE,QAAM,MAAMA,EAAE,MAAM,aAAY,IAAG3F,IAAE2E,GAAE,MAAIA,GAAE,WAAW6P,GAAE7O,CAAC,GAAE,IAAEA,EAAE,QAAM,MAAMA,EAAE,MAAM,iBAAiBqgB,CAAC,IAAEA;AAAE,QAAArgB,EAAE,cAAY,MAAM,QAAQ,IAAI,KAAK,WAAW,GAAEA,EAAE,UAAU,CAAC;AAAE,YAAI1F,IAAE,OAAM0F,EAAE,QAAM,MAAMA,EAAE,MAAM,cAAa,IAAG3F,IAAEF,GAAE,QAAMA,GAAE,aAAa,GAAE6F,CAAC;AAAE,eAAOA,EAAE,QAAM,MAAMA,EAAE,MAAM,YAAY1F,CAAC,IAAEA;AAAA,MAAC,GAAC,EAAI,MAAML,CAAC;AAAE,UAAG;AAAC,QAAA+F,EAAE,UAAQnG,IAAEmG,EAAE,MAAM,WAAWnG,CAAC;AAAG,YAAIC,KAAGkG,EAAE,QAAMA,EAAE,MAAM,aAAY,IAAG3F,IAAE2E,GAAE,MAAIA,GAAE,WAAWnF,GAAEmG,CAAC;AAAE,QAAAA,EAAE,UAAQlG,IAAEkG,EAAE,MAAM,iBAAiBlG,CAAC,IAAGkG,EAAE,cAAY,KAAK,WAAWlG,GAAEkG,EAAE,UAAU;AAAE,YAAIhG,KAAGgG,EAAE,QAAMA,EAAE,MAAM,cAAa,IAAG3F,IAAEF,GAAE,QAAMA,GAAE,aAAaL,GAAEkG,CAAC;AAAE,eAAOA,EAAE,UAAQhG,IAAEgG,EAAE,MAAM,YAAYhG,CAAC,IAAGA;AAAA,MAAC,SAAO6U,GAAE;AAAC,eAAO5U,EAAE4U,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,QAAQxU,GAAE,GAAE;AAAC,WAAO,CAAAR,MAAG;AAAC,UAAGA,EAAE,WAAS;AAAA,4DACt7LQ,GAAE;AAAC,YAAIuU,IAAE,mCAAiChE,GAAE/Q,EAAE,UAAQ,IAAG,EAAE,IAAE;AAAS,eAAO,IAAE,QAAQ,QAAQ+U,CAAC,IAAEA;AAAA,MAAC;AAAC,UAAG,EAAE,QAAO,QAAQ,OAAO/U,CAAC;AAAE,YAAMA;AAAA,IAAC;AAAA,EAAC;AAAC,GAAM+mB,KAAE,IAAID;AAAE,SAASjnB,GAAEC,GAAEU,GAAE;AAAC,SAAOumB,GAAE,MAAMjnB,GAAEU,CAAC;AAAC;AAACX,GAAE,UAAQA,GAAE,aAAW,SAASC,GAAE;AAAC,SAAOinB,GAAE,WAAWjnB,CAAC,GAAED,GAAE,WAASknB,GAAE,UAASvF,GAAE3hB,GAAE,QAAQ,GAAEA;AAAC;AAAEA,GAAE,cAAYyhB;AAAEzhB,GAAE,WAAS0hB;AAAE1hB,GAAE,MAAI,YAAYC,GAAE;AAAC,SAAOinB,GAAE,IAAI,GAAGjnB,CAAC,GAAED,GAAE,WAASknB,GAAE,UAASvF,GAAE3hB,GAAE,QAAQ,GAAEA;AAAC;AAAEA,GAAE,aAAW,SAASC,GAAEU,GAAE;AAAC,SAAOumB,GAAE,WAAWjnB,GAAEU,CAAC;AAAC;AAAEX,GAAE,cAAYknB,GAAE;AAAYlnB,GAAE,SAAOS;AAAET,GAAE,SAAOS,GAAE;AAAMT,GAAE,WAAS8mB;AAAE9mB,GAAE,eAAa+mB;AAAE/mB,GAAE,QAAMsF;AAAEtF,GAAE,QAAMsF,GAAE;AAAItF,GAAE,YAAU+lB;AAAE/lB,GAAE,QAAMgnB;AAAEhnB,GAAE,QAAMA;AAASA,GAAE;AAAWA,GAAE;AAAcA,GAAE;AAAOA,GAAE;AAAcA,GAAE;AAAoBS,GAAE;AAAS6E,GAAE;ACvE1uB;AAEA,MAAM;AAAA,EACJ,SAAA6hB;AAAA,EACA,gBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,0BAAAC;AACF,IAAI;AACJ,IAAI;AAAA,EACF,QAAAC;AAAA,EACA,MAAAC;AAAA,EACF,QAAEC;AACF,IAAI,QACA;AAAA,EACF,OAAAC;AAAA,EACA,WAAA9hB;AACF,IAAI,OAAO,UAAY,OAAe;AACjC2hB,OACHA,KAAS,SAAgBliB,GAAG;AAC1B,SAAOA;AACT;AAEGmiB,OACHA,KAAO,SAAcniB,GAAG;AACtB,SAAOA;AACT;AAEGqiB,OACHA,KAAQ,SAAenP,GAAMoP,GAAS;AACpC,WAASC,IAAO,UAAU,QAAQxlB,IAAO,IAAI,MAAMwlB,IAAO,IAAIA,IAAO,IAAI,CAAC,GAAGC,IAAO,GAAGA,IAAOD,GAAMC;AAClG,IAAAzlB,EAAKylB,IAAO,CAAC,IAAI,UAAUA,CAAI;AAEjC,SAAOtP,EAAK,MAAMoP,GAASvlB,CAAI;AACjC;AAEGwD,OACHA,KAAY,SAAmBkiB,GAAM;AACnC,WAAS3lB,IAAQ,UAAU,QAAQC,IAAO,IAAI,MAAMD,IAAQ,IAAIA,IAAQ,IAAI,CAAC,GAAGE,IAAQ,GAAGA,IAAQF,GAAOE;AACxG,IAAAD,EAAKC,IAAQ,CAAC,IAAI,UAAUA,CAAK;AAEnC,SAAO,IAAIylB,EAAK,GAAG1lB,CAAI;AACzB;AAEF,MAAM2lB,KAAeC,GAAQ,MAAM,UAAU,OAAO,GAC9CC,KAAmBD,GAAQ,MAAM,UAAU,WAAW,GACtDE,KAAWF,GAAQ,MAAM,UAAU,GAAG,GACtCG,KAAYH,GAAQ,MAAM,UAAU,IAAI,GACxCI,KAAcJ,GAAQ,MAAM,UAAU,MAAM,GAC5CK,KAAoBL,GAAQ,OAAO,UAAU,WAAW,GACxDM,KAAiBN,GAAQ,OAAO,UAAU,QAAQ,GAClDO,KAAcP,GAAQ,OAAO,UAAU,KAAK,GAC5CQ,KAAgBR,GAAQ,OAAO,UAAU,OAAO,GAChDS,KAAgBT,GAAQ,OAAO,UAAU,OAAO,GAChDU,KAAaV,GAAQ,OAAO,UAAU,IAAI,GAC1CW,KAAuBX,GAAQ,OAAO,UAAU,cAAc,GAC9DY,KAAaZ,GAAQ,OAAO,UAAU,IAAI,GAC1Ca,KAAkBC,GAAY,SAAS;AAO7C,SAASd,GAAQzP,GAAM;AACrB,SAAO,SAAUoP,GAAS;AACxB,IAAIA,aAAmB,WACrBA,EAAQ,YAAY;AAEtB,aAASoB,IAAQ,UAAU,QAAQ3mB,IAAO,IAAI,MAAM2mB,IAAQ,IAAIA,IAAQ,IAAI,CAAC,GAAGC,IAAQ,GAAGA,IAAQD,GAAOC;AACxG,MAAA5mB,EAAK4mB,IAAQ,CAAC,IAAI,UAAUA,CAAK;AAEnC,WAAOtB,GAAMnP,GAAMoP,GAASvlB,CAAI;AAAA,EAClC;AACF;AAOA,SAAS0mB,GAAYhB,GAAM;AACzB,SAAO,WAAY;AACjB,aAASmB,IAAQ,UAAU,QAAQ7mB,IAAO,IAAI,MAAM6mB,CAAK,GAAGC,IAAQ,GAAGA,IAAQD,GAAOC;AACpF,MAAA9mB,EAAK8mB,CAAK,IAAI,UAAUA,CAAK;AAE/B,WAAOtjB,GAAUkiB,GAAM1lB,CAAI;AAAA,EAC7B;AACF;AASA,SAAS+mB,GAASC,GAAKC,GAAO;AAC5B,MAAIC,IAAoB,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAIjB;AAC5F,EAAIlB,MAIFA,GAAeiC,GAAK,IAAI;AAE1B,MAAIppB,IAAIqpB,EAAM;AACd,SAAOrpB,OAAK;AACV,QAAIgH,IAAUqiB,EAAMrpB,CAAC;AACrB,QAAI,OAAOgH,KAAY,UAAU;AAC/B,YAAMuiB,IAAYD,EAAkBtiB,CAAO;AAC3C,MAAIuiB,MAAcviB,MAEXogB,GAASiC,CAAK,MACjBA,EAAMrpB,CAAC,IAAIupB,IAEbviB,IAAUuiB;AAAA,IAEd;AACA,IAAAH,EAAIpiB,CAAO,IAAI;AAAA,EACjB;AACA,SAAOoiB;AACT;AAOA,SAASI,GAAWH,GAAO;AACzB,WAASva,IAAQ,GAAGA,IAAQua,EAAM,QAAQva;AAExC,IADwB6Z,GAAqBU,GAAOva,CAAK,MAEvDua,EAAMva,CAAK,IAAI;AAGnB,SAAOua;AACT;AAOA,SAASI,GAAM3f,GAAQ;AACrB,QAAM4f,IAAYjC,GAAO,IAAI;AAC7B,aAAW,CAAC9P,GAAU5P,CAAK,KAAKmf,GAAQpd,CAAM;AAE5C,IADwB6e,GAAqB7e,GAAQ6N,CAAQ,MAEvD,MAAM,QAAQ5P,CAAK,IACrB2hB,EAAU/R,CAAQ,IAAI6R,GAAWzhB,CAAK,IAC7BA,KAAS,OAAOA,KAAU,YAAYA,EAAM,gBAAgB,SACrE2hB,EAAU/R,CAAQ,IAAI8R,GAAM1hB,CAAK,IAEjC2hB,EAAU/R,CAAQ,IAAI5P;AAI5B,SAAO2hB;AACT;AAQA,SAASC,GAAa7f,GAAQ8f,GAAM;AAClC,SAAO9f,MAAW,QAAM;AACtB,UAAM+f,IAAOvC,GAAyBxd,GAAQ8f,CAAI;AAClD,QAAIC,GAAM;AACR,UAAIA,EAAK;AACP,eAAO7B,GAAQ6B,EAAK,GAAG;AAEzB,UAAI,OAAOA,EAAK,SAAU;AACxB,eAAO7B,GAAQ6B,EAAK,KAAK;AAAA,IAE7B;AACA,IAAA/f,IAASud,GAAevd,CAAM;AAAA,EAChC;AACA,WAASggB,IAAgB;AACvB,WAAO;AAAA,EACT;AACA,SAAOA;AACT;AAEA,MAAMC,KAASxC,GAAO,CAAC,KAAK,QAAQ,WAAW,WAAW,QAAQ,WAAW,SAAS,SAAS,KAAK,OAAO,OAAO,OAAO,SAAS,cAAc,QAAQ,MAAM,UAAU,UAAU,WAAW,UAAU,QAAQ,QAAQ,OAAO,YAAY,WAAW,QAAQ,YAAY,MAAM,aAAa,OAAO,WAAW,OAAO,UAAU,OAAO,OAAO,MAAM,MAAM,WAAW,MAAM,YAAY,cAAc,UAAU,QAAQ,UAAU,QAAQ,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ,UAAU,UAAU,MAAM,QAAQ,KAAK,OAAO,SAAS,OAAO,OAAO,SAAS,UAAU,MAAM,QAAQ,OAAO,QAAQ,WAAW,QAAQ,YAAY,SAAS,OAAO,QAAQ,MAAM,YAAY,UAAU,UAAU,KAAK,WAAW,OAAO,YAAY,KAAK,MAAM,MAAM,QAAQ,KAAK,QAAQ,UAAU,WAAW,UAAU,UAAU,QAAQ,SAAS,UAAU,UAAU,QAAQ,UAAU,UAAU,SAAS,OAAO,WAAW,OAAO,SAAS,SAAS,MAAM,YAAY,YAAY,SAAS,MAAM,SAAS,QAAQ,MAAM,SAAS,MAAM,KAAK,MAAM,OAAO,SAAS,KAAK,CAAC,GAC3/ByC,KAAQzC,GAAO,CAAC,OAAO,KAAK,YAAY,eAAe,gBAAgB,gBAAgB,iBAAiB,oBAAoB,UAAU,YAAY,QAAQ,QAAQ,WAAW,gBAAgB,eAAe,UAAU,QAAQ,KAAK,SAAS,YAAY,SAAS,SAAS,aAAa,QAAQ,kBAAkB,UAAU,QAAQ,YAAY,SAAS,QAAQ,QAAQ,WAAW,WAAW,YAAY,kBAAkB,QAAQ,QAAQ,SAAS,UAAU,UAAU,QAAQ,YAAY,SAAS,QAAQ,SAAS,QAAQ,OAAO,CAAC,GACvgB0C,KAAa1C,GAAO,CAAC,WAAW,iBAAiB,uBAAuB,eAAe,oBAAoB,qBAAqB,qBAAqB,kBAAkB,gBAAgB,WAAW,WAAW,WAAW,WAAW,WAAW,kBAAkB,WAAW,WAAW,eAAe,gBAAgB,YAAY,gBAAgB,sBAAsB,eAAe,UAAU,cAAc,CAAC,GAK/Y2C,KAAgB3C,GAAO,CAAC,WAAW,iBAAiB,UAAU,WAAW,aAAa,oBAAoB,kBAAkB,iBAAiB,iBAAiB,iBAAiB,SAAS,aAAa,QAAQ,gBAAgB,aAAa,WAAW,iBAAiB,UAAU,OAAO,cAAc,WAAW,KAAK,CAAC,GACtT4C,KAAW5C,GAAO,CAAC,QAAQ,YAAY,UAAU,WAAW,SAAS,UAAU,MAAM,cAAc,iBAAiB,MAAM,MAAM,SAAS,WAAW,YAAY,SAAS,QAAQ,MAAM,UAAU,SAAS,UAAU,QAAQ,QAAQ,WAAW,UAAU,OAAO,SAAS,OAAO,UAAU,cAAc,aAAa,CAAC,GAGtT6C,KAAmB7C,GAAO,CAAC,WAAW,eAAe,cAAc,YAAY,aAAa,WAAW,WAAW,UAAU,UAAU,SAAS,aAAa,cAAc,kBAAkB,eAAe,MAAM,CAAC,GAClN8C,KAAO9C,GAAO,CAAC,OAAO,CAAC,GAEvB+C,KAAO/C,GAAO,CAAC,UAAU,UAAU,SAAS,OAAO,kBAAkB,gBAAgB,wBAAwB,YAAY,cAAc,WAAW,UAAU,WAAW,eAAe,eAAe,WAAW,QAAQ,SAAS,SAAS,SAAS,QAAQ,WAAW,YAAY,gBAAgB,UAAU,eAAe,YAAY,YAAY,WAAW,OAAO,YAAY,2BAA2B,yBAAyB,YAAY,aAAa,WAAW,gBAAgB,eAAe,QAAQ,OAAO,WAAW,UAAU,UAAU,QAAQ,QAAQ,YAAY,MAAM,SAAS,aAAa,aAAa,SAAS,QAAQ,SAAS,QAAQ,QAAQ,WAAW,QAAQ,OAAO,OAAO,aAAa,SAAS,UAAU,OAAO,aAAa,YAAY,SAAS,QAAQ,SAAS,WAAW,cAAc,UAAU,QAAQ,WAAW,QAAQ,WAAW,eAAe,eAAe,WAAW,iBAAiB,uBAAuB,UAAU,WAAW,WAAW,cAAc,YAAY,OAAO,YAAY,OAAO,YAAY,QAAQ,QAAQ,WAAW,cAAc,SAAS,YAAY,SAAS,QAAQ,SAAS,QAAQ,QAAQ,WAAW,SAAS,OAAO,UAAU,QAAQ,SAAS,WAAW,YAAY,SAAS,aAAa,QAAQ,UAAU,UAAU,SAAS,SAAS,QAAQ,SAAS,MAAM,CAAC,GAC3wCgD,KAAMhD,GAAO,CAAC,iBAAiB,cAAc,YAAY,sBAAsB,aAAa,UAAU,iBAAiB,iBAAiB,WAAW,iBAAiB,kBAAkB,SAAS,QAAQ,MAAM,SAAS,QAAQ,iBAAiB,aAAa,aAAa,SAAS,uBAAuB,+BAA+B,iBAAiB,mBAAmB,MAAM,MAAM,KAAK,MAAM,MAAM,mBAAmB,aAAa,WAAW,WAAW,OAAO,YAAY,aAAa,OAAO,YAAY,QAAQ,gBAAgB,aAAa,UAAU,eAAe,eAAe,iBAAiB,eAAe,aAAa,oBAAoB,gBAAgB,cAAc,gBAAgB,eAAe,MAAM,MAAM,MAAM,MAAM,cAAc,YAAY,iBAAiB,qBAAqB,UAAU,QAAQ,MAAM,mBAAmB,MAAM,OAAO,aAAa,KAAK,MAAM,MAAM,MAAM,MAAM,WAAW,aAAa,cAAc,YAAY,QAAQ,gBAAgB,kBAAkB,gBAAgB,oBAAoB,kBAAkB,SAAS,cAAc,cAAc,gBAAgB,gBAAgB,eAAe,eAAe,oBAAoB,aAAa,OAAO,QAAQ,aAAa,SAAS,UAAU,QAAQ,OAAO,QAAQ,cAAc,UAAU,YAAY,WAAW,SAAS,UAAU,eAAe,UAAU,YAAY,eAAe,QAAQ,cAAc,uBAAuB,oBAAoB,gBAAgB,UAAU,iBAAiB,uBAAuB,kBAAkB,KAAK,MAAM,MAAM,UAAU,QAAQ,QAAQ,eAAe,aAAa,WAAW,UAAU,UAAU,SAAS,QAAQ,mBAAmB,SAAS,oBAAoB,oBAAoB,gBAAgB,eAAe,gBAAgB,eAAe,cAAc,gBAAgB,oBAAoB,qBAAqB,kBAAkB,mBAAmB,qBAAqB,kBAAkB,UAAU,gBAAgB,SAAS,gBAAgB,kBAAkB,YAAY,eAAe,WAAW,WAAW,aAAa,oBAAoB,eAAe,mBAAmB,kBAAkB,cAAc,QAAQ,MAAM,MAAM,WAAW,UAAU,WAAW,cAAc,WAAW,cAAc,iBAAiB,iBAAiB,SAAS,gBAAgB,QAAQ,gBAAgB,oBAAoB,oBAAoB,KAAK,MAAM,MAAM,SAAS,KAAK,MAAM,MAAM,KAAK,YAAY,CAAC,GACt1EiD,KAASjD,GAAO,CAAC,UAAU,eAAe,SAAS,YAAY,SAAS,gBAAgB,eAAe,cAAc,cAAc,SAAS,OAAO,WAAW,gBAAgB,YAAY,SAAS,SAAS,UAAU,QAAQ,MAAM,WAAW,UAAU,iBAAiB,UAAU,UAAU,kBAAkB,aAAa,YAAY,eAAe,WAAW,WAAW,iBAAiB,YAAY,YAAY,QAAQ,YAAY,YAAY,cAAc,WAAW,UAAU,UAAU,eAAe,iBAAiB,wBAAwB,aAAa,aAAa,cAAc,YAAY,kBAAkB,kBAAkB,aAAa,WAAW,SAAS,OAAO,CAAC,GAC7pBkD,KAAMlD,GAAO,CAAC,cAAc,UAAU,eAAe,aAAa,aAAa,CAAC,GAGhFmD,KAAgBlD,GAAK,2BAA2B,GAChDmD,KAAWnD,GAAK,uBAAuB,GACvCoD,KAAcpD,GAAK,eAAe,GAClCqD,KAAYrD,GAAK,8BAA8B,GAC/CsD,KAAYtD,GAAK,gBAAgB,GACjCuD,KAAiBvD;AAAA,EAAK;AAAA;AAC5B,GACMwD,KAAoBxD,GAAK,uBAAuB,GAChDyD,KAAkBzD;AAAA,EAAK;AAAA;AAC7B,GACM0D,KAAe1D,GAAK,SAAS,GAC7B2D,KAAiB3D,GAAK,0BAA0B;AAEtD,IAAI4D,KAA2B,uBAAO,OAAO;AAAA,EAC3C,WAAW;AAAA,EACX,WAAWN;AAAA,EACX,iBAAiBG;AAAA,EACjB,gBAAgBE;AAAA,EAChB,WAAWN;AAAA,EACX,cAAcK;AAAA,EACd,UAAUP;AAAA,EACV,gBAAgBI;AAAA,EAChB,mBAAmBC;AAAA,EACnB,eAAeN;AAAA,EACf,aAAaE;AACf,CAAC;AAID,MAAMS,KAAY;AAAA,EAChB,SAAS;AAAA,EAET,MAAM;AAAA;AAAA,EAMN,wBAAwB;AAAA,EACxB,SAAS;AAAA,EACT,UAAU;AAIZ,GACMC,KAAY,WAAqB;AACrC,SAAO,OAAO,SAAW,MAAc,OAAO;AAChD,GASMC,KAA4B,SAAmCC,GAAcC,GAAmB;AACpG,MAAI,OAAOD,KAAiB,YAAY,OAAOA,EAAa,gBAAiB;AAC3E,WAAO;AAKT,MAAIE,IAAS;AACb,QAAMC,IAAY;AAClB,EAAIF,KAAqBA,EAAkB,aAAaE,CAAS,MAC/DD,IAASD,EAAkB,aAAaE,CAAS;AAEnD,QAAMC,IAAa,eAAeF,IAAS,MAAMA,IAAS;AAC1D,MAAI;AACF,WAAOF,EAAa,aAAaI,GAAY;AAAA,MAC3C,WAAWtB,GAAM;AACf,eAAOA;AAAA,MACT;AAAA,MACA,gBAAgBuB,GAAW;AACzB,eAAOA;AAAA,MACT;AAAA,IACN,CAAK;AAAA,EACH,QAAY;AAIV,mBAAQ,KAAK,yBAAyBD,IAAa,wBAAwB,GACpE;AAAA,EACT;AACF,GACME,KAAkB,WAA2B;AACjD,SAAO;AAAA,IACL,yBAAyB,CAAA;AAAA,IACzB,uBAAuB,CAAA;AAAA,IACvB,wBAAwB,CAAA;AAAA,IACxB,0BAA0B,CAAA;AAAA,IAC1B,wBAAwB,CAAA;AAAA,IACxB,yBAAyB,CAAA;AAAA,IACzB,uBAAuB,CAAA;AAAA,IACvB,qBAAqB,CAAA;AAAA,IACrB,wBAAwB,CAAA;AAAA,EAC5B;AACA;AACA,SAASC,KAAkB;AACzB,MAAIC,IAAS,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAIV,GAAS;AAC1F,QAAMW,IAAY,CAAAC,OAAQH,GAAgBG,EAAI;AAG9C,MAFAD,EAAU,UAAU,SACpBA,EAAU,UAAU,CAAA,GAChB,CAACD,KAAU,CAACA,EAAO,YAAYA,EAAO,SAAS,aAAaX,GAAU,YAAY,CAACW,EAAO;AAG5F,WAAAC,EAAU,cAAc,IACjBA;AAET,MAAI;AAAA,IACF,UAAAE;AAAA,EACJ,IAAMH;AACJ,QAAMI,IAAmBD,GACnBE,IAAgBD,EAAiB,eACjC;AAAA,IACJ,kBAAAE;AAAA,IACA,qBAAAC;AAAA,IACA,MAAAC;AAAA,IACA,SAAAC;AAAA,IACA,YAAAC;AAAA,IACA,cAAAC,IAAeX,EAAO,gBAAgBA,EAAO;AAAA,IAC7C,iBAAAY;AAAA,IACA,WAAAC;AAAA,IACA,cAAArB;AAAA,EACJ,IAAMQ,GACEc,IAAmBL,EAAQ,WAC3BM,IAAYpD,GAAamD,GAAkB,WAAW,GACtDE,IAASrD,GAAamD,GAAkB,QAAQ,GAChDG,IAAiBtD,GAAamD,GAAkB,aAAa,GAC7DI,IAAgBvD,GAAamD,GAAkB,YAAY,GAC3DK,IAAgBxD,GAAamD,GAAkB,YAAY;AAOjE,MAAI,OAAOP,KAAwB,YAAY;AAC7C,UAAMa,KAAWjB,EAAS,cAAc,UAAU;AAClD,IAAIiB,GAAS,WAAWA,GAAS,QAAQ,kBACvCjB,IAAWiB,GAAS,QAAQ;AAAA,EAEhC;AACA,MAAIC,GACAC,IAAY;AAChB,QAAM;AAAA,IACJ,gBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,wBAAAC;AAAA,IACA,sBAAAC;AAAA,EACJ,IAAMvB,GACE;AAAA,IACJ,YAAAwB;AAAA,EACJ,IAAMvB;AACJ,MAAIwB,IAAQ9B,GAAe;AAI3B,EAAAG,EAAU,cAAc,OAAO/E,MAAY,cAAc,OAAOiG,KAAkB,cAAcI,KAAkBA,EAAe,uBAAuB;AACxJ,QAAM;AAAA,IACJ,eAAA7C;AAAA,IACA,UAAAC;AAAA,IACA,aAAAC;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC;AAAA,IACA,mBAAAE;AAAA,IACA,iBAAAC;AAAA,IACA,gBAAAE;AAAA,EACJ,IAAMC;AACJ,MAAI;AAAA,IACF,gBAAgByC;AAAA,EACpB,IAAMzC,IAMA0C,KAAe;AACnB,QAAMC,KAAuB5E,GAAS,CAAA,GAAI,CAAC,GAAGY,IAAQ,GAAGC,IAAO,GAAGC,IAAY,GAAGE,IAAU,GAAGE,EAAI,CAAC;AAEpG,MAAI2D,KAAe;AACnB,QAAMC,KAAuB9E,GAAS,CAAA,GAAI,CAAC,GAAGmB,IAAM,GAAGC,IAAK,GAAGC,IAAQ,GAAGC,EAAG,CAAC;AAO9E,MAAIyD,KAA0B,OAAO,KAAKzG,GAAO,MAAM;AAAA,IACrD,cAAc;AAAA,MACZ,UAAU;AAAA,MACV,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,OAAO;AAAA,IACb;AAAA,IACI,oBAAoB;AAAA,MAClB,UAAU;AAAA,MACV,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,OAAO;AAAA,IACb;AAAA,IACI,gCAAgC;AAAA,MAC9B,UAAU;AAAA,MACV,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,OAAO;AAAA,IACb;AAAA,EACA,CAAG,CAAC,GAEE0G,KAAc,MAEdC,KAAc;AAElB,QAAMC,KAAyB,OAAO,KAAK5G,GAAO,MAAM;AAAA,IACtD,UAAU;AAAA,MACR,UAAU;AAAA,MACV,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,OAAO;AAAA,IACb;AAAA,IACI,gBAAgB;AAAA,MACd,UAAU;AAAA,MACV,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,OAAO;AAAA,IACb;AAAA,EACA,CAAG,CAAC;AAEF,MAAI6G,KAAkB,IAElBC,KAAkB,IAElBC,KAA0B,IAG1BC,KAA2B,IAI3BC,KAAqB,IAIrBC,KAAe,IAEfC,KAAiB,IAEjBC,KAAa,IAGbC,KAAa,IAKbC,KAAa,IAGbC,KAAsB,IAGtBC,KAAsB,IAItBC,IAAe,IAcfC,IAAuB;AAC3B,QAAMC,IAA8B;AAEpC,MAAIC,KAAe,IAGfC,IAAW,IAEXC,IAAe,CAAA,GAEfC,KAAkB;AACtB,QAAMC,KAA0BtG,GAAS,CAAA,GAAI,CAAC,kBAAkB,SAAS,YAAY,QAAQ,iBAAiB,QAAQ,UAAU,QAAQ,MAAM,MAAM,MAAM,MAAM,SAAS,WAAW,YAAY,YAAY,aAAa,UAAU,SAAS,OAAO,YAAY,SAAS,SAAS,SAAS,KAAK,CAAC;AAEhS,MAAIuG,KAAgB;AACpB,QAAMC,KAAwBxG,GAAS,CAAA,GAAI,CAAC,SAAS,SAAS,OAAO,UAAU,SAAS,OAAO,CAAC;AAEhG,MAAIyG,KAAsB;AAC1B,QAAMC,KAA8B1G,GAAS,IAAI,CAAC,OAAO,SAAS,OAAO,MAAM,SAAS,QAAQ,WAAW,eAAe,QAAQ,WAAW,SAAS,SAAS,SAAS,OAAO,CAAC,GAC1K2G,KAAmB,sCACnBC,KAAgB,8BAChBC,KAAiB;AAEvB,MAAIC,KAAYD,IACZE,KAAiB,IAEjBC,KAAqB;AACzB,QAAMC,KAA6BjH,GAAS,IAAI,CAAC2G,IAAkBC,IAAeC,EAAc,GAAG1H,EAAc;AACjH,MAAI+H,KAAiClH,GAAS,CAAA,GAAI,CAAC,MAAM,MAAM,MAAM,MAAM,OAAO,CAAC,GAC/EmH,KAA0BnH,GAAS,IAAI,CAAC,gBAAgB,CAAC;AAK7D,QAAMoH,KAA+BpH,GAAS,CAAA,GAAI,CAAC,SAAS,SAAS,QAAQ,KAAK,QAAQ,CAAC;AAE3F,MAAIqH,KAAoB;AACxB,QAAMC,KAA+B,CAAC,yBAAyB,WAAW,GACpEC,KAA4B;AAClC,MAAIpH,KAAoB,MAEpBqH,KAAS;AAGb,QAAMC,KAAczE,EAAS,cAAc,MAAM,GAC3C0E,KAAoB,SAA2BzS,GAAW;AAC9D,WAAOA,aAAqB,UAAUA,aAAqB;AAAA,EAC7D,GAOM0S,KAAe,WAAwB;AAC3C,QAAIC,IAAM,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAA;AAC9E,QAAI,EAAAJ,MAAUA,OAAWI,IAoIzB;AAAA,WAhII,CAACA,KAAO,OAAOA,KAAQ,cACzBA,IAAM,CAAA,IAGRA,IAAMtH,GAAMsH,CAAG,GACfP;AAAA,MAEAC,GAA6B,QAAQM,EAAI,iBAAiB,MAAM,KAAKL,KAA4BK,EAAI,mBAErGzH,KAAoBkH,OAAsB,0BAA0BlI,KAAiBD,IAErFyF,KAAenF,GAAqBoI,GAAK,cAAc,IAAI5H,GAAS,CAAA,GAAI4H,EAAI,cAAczH,EAAiB,IAAIyE,IAC/GC,KAAerF,GAAqBoI,GAAK,cAAc,IAAI5H,GAAS,CAAA,GAAI4H,EAAI,cAAczH,EAAiB,IAAI2E,IAC/GkC,KAAqBxH,GAAqBoI,GAAK,oBAAoB,IAAI5H,GAAS,CAAA,GAAI4H,EAAI,oBAAoBzI,EAAc,IAAI8H,IAC9HR,KAAsBjH,GAAqBoI,GAAK,mBAAmB,IAAI5H,GAASM,GAAMoG,EAA2B,GAAGkB,EAAI,mBAAmBzH,EAAiB,IAAIuG,IAChKH,KAAgB/G,GAAqBoI,GAAK,mBAAmB,IAAI5H,GAASM,GAAMkG,EAAqB,GAAGoB,EAAI,mBAAmBzH,EAAiB,IAAIqG,IACpJH,KAAkB7G,GAAqBoI,GAAK,iBAAiB,IAAI5H,GAAS,CAAA,GAAI4H,EAAI,iBAAiBzH,EAAiB,IAAImG,IACxHtB,KAAcxF,GAAqBoI,GAAK,aAAa,IAAI5H,GAAS,IAAI4H,EAAI,aAAazH,EAAiB,IAAIG,GAAM,CAAA,CAAE,GACpH2E,KAAczF,GAAqBoI,GAAK,aAAa,IAAI5H,GAAS,IAAI4H,EAAI,aAAazH,EAAiB,IAAIG,GAAM,CAAA,CAAE,GACpH8F,IAAe5G,GAAqBoI,GAAK,cAAc,IAAIA,EAAI,eAAe,IAC9EzC,KAAkByC,EAAI,oBAAoB,IAC1CxC,KAAkBwC,EAAI,oBAAoB,IAC1CvC,KAA0BuC,EAAI,2BAA2B,IACzDtC,KAA2BsC,EAAI,6BAA6B,IAC5DrC,KAAqBqC,EAAI,sBAAsB,IAC/CpC,KAAeoC,EAAI,iBAAiB,IACpCnC,KAAiBmC,EAAI,kBAAkB,IACvChC,KAAagC,EAAI,cAAc,IAC/B/B,KAAsB+B,EAAI,uBAAuB,IACjD9B,KAAsB8B,EAAI,uBAAuB,IACjDjC,KAAaiC,EAAI,cAAc,IAC/B7B,IAAe6B,EAAI,iBAAiB,IACpC5B,IAAuB4B,EAAI,wBAAwB,IACnD1B,KAAe0B,EAAI,iBAAiB,IACpCzB,IAAWyB,EAAI,YAAY,IAC3BlD,IAAmBkD,EAAI,sBAAsBhG,IAC7CkF,KAAYc,EAAI,aAAaf,IAC7BK,KAAiCU,EAAI,kCAAkCV,IACvEC,KAA0BS,EAAI,2BAA2BT,IACzDpC,KAA0B6C,EAAI,2BAA2B,CAAA,GACrDA,EAAI,2BAA2BF,GAAkBE,EAAI,wBAAwB,YAAY,MAC3F7C,GAAwB,eAAe6C,EAAI,wBAAwB,eAEjEA,EAAI,2BAA2BF,GAAkBE,EAAI,wBAAwB,kBAAkB,MACjG7C,GAAwB,qBAAqB6C,EAAI,wBAAwB,qBAEvEA,EAAI,2BAA2B,OAAOA,EAAI,wBAAwB,kCAAmC,cACvG7C,GAAwB,iCAAiC6C,EAAI,wBAAwB,iCAEnFrC,OACFH,KAAkB,KAEhBS,OACFD,KAAa,KAGXQ,MACFzB,KAAe3E,GAAS,CAAA,GAAIkB,EAAI,GAChC2D,KAAe,CAAA,GACXuB,EAAa,SAAS,OACxBpG,GAAS2E,IAAc/D,EAAM,GAC7BZ,GAAS6E,IAAc1D,EAAI,IAEzBiF,EAAa,QAAQ,OACvBpG,GAAS2E,IAAc9D,EAAK,GAC5Bb,GAAS6E,IAAczD,EAAG,GAC1BpB,GAAS6E,IAAcvD,EAAG,IAExB8E,EAAa,eAAe,OAC9BpG,GAAS2E,IAAc7D,EAAU,GACjCd,GAAS6E,IAAczD,EAAG,GAC1BpB,GAAS6E,IAAcvD,EAAG,IAExB8E,EAAa,WAAW,OAC1BpG,GAAS2E,IAAc3D,EAAQ,GAC/BhB,GAAS6E,IAAcxD,EAAM,GAC7BrB,GAAS6E,IAAcvD,EAAG,KAI1BsG,EAAI,aACF,OAAOA,EAAI,YAAa,aAC1B1C,GAAuB,WAAW0C,EAAI,YAElCjD,OAAiBC,OACnBD,KAAerE,GAAMqE,EAAY,IAEnC3E,GAAS2E,IAAciD,EAAI,UAAUzH,EAAiB,KAGtDyH,EAAI,aACF,OAAOA,EAAI,YAAa,aAC1B1C,GAAuB,iBAAiB0C,EAAI,YAExC/C,OAAiBC,OACnBD,KAAevE,GAAMuE,EAAY,IAEnC7E,GAAS6E,IAAc+C,EAAI,UAAUzH,EAAiB,KAGtDyH,EAAI,qBACN5H,GAASyG,IAAqBmB,EAAI,mBAAmBzH,EAAiB,GAEpEyH,EAAI,oBACFvB,OAAoBC,OACtBD,KAAkB/F,GAAM+F,EAAe,IAEzCrG,GAASqG,IAAiBuB,EAAI,iBAAiBzH,EAAiB,IAE9DyH,EAAI,wBACFvB,OAAoBC,OACtBD,KAAkB/F,GAAM+F,EAAe,IAEzCrG,GAASqG,IAAiBuB,EAAI,qBAAqBzH,EAAiB,IAGlE+F,OACFvB,GAAa,OAAO,IAAI,KAGtBc,MACFzF,GAAS2E,IAAc,CAAC,QAAQ,QAAQ,MAAM,CAAC,GAG7CA,GAAa,UACf3E,GAAS2E,IAAc,CAAC,OAAO,CAAC,GAChC,OAAOK,GAAY,QAEjB4C,EAAI,sBAAsB;AAC5B,YAAI,OAAOA,EAAI,qBAAqB,cAAe;AACjD,gBAAMlI,GAAgB,6EAA6E;AAErG,YAAI,OAAOkI,EAAI,qBAAqB,mBAAoB;AACtD,gBAAMlI,GAAgB,kFAAkF;AAG1G,QAAAwE,IAAqB0D,EAAI,sBAEzBzD,IAAYD,EAAmB,WAAW,EAAE;AAAA,MAC9C;AAEE,QAAIA,MAAuB,WACzBA,IAAqB9B,GAA0BC,GAAca,CAAa,IAGxEgB,MAAuB,QAAQ,OAAOC,KAAc,aACtDA,IAAYD,EAAmB,WAAW,EAAE;AAKhD,MAAI9F,MACFA,GAAOwJ,CAAG,GAEZJ,KAASI;AAAA;AAAA,EACX,GAIMC,KAAe7H,GAAS,IAAI,CAAC,GAAGa,IAAO,GAAGC,IAAY,GAAGC,EAAa,CAAC,GACvE+G,KAAkB9H,GAAS,CAAA,GAAI,CAAC,GAAGgB,IAAU,GAAGC,EAAgB,CAAC,GAOjE8G,KAAuB,SAA8BlqB,GAAS;AAClE,QAAImqB,KAAShE,EAAcnmB,CAAO;AAGlC,KAAI,CAACmqB,MAAU,CAACA,GAAO,aACrBA,KAAS;AAAA,MACP,cAAclB;AAAA,MACd,SAAS;AAAA,IACjB;AAEI,UAAMmB,KAAU/I,GAAkBrhB,EAAQ,OAAO,GAC3CqqB,KAAgBhJ,GAAkB8I,GAAO,OAAO;AACtD,WAAKhB,GAAmBnpB,EAAQ,YAAY,IAGxCA,EAAQ,iBAAiB+oB,KAIvBoB,GAAO,iBAAiBnB,KACnBoB,OAAY,QAKjBD,GAAO,iBAAiBrB,KACnBsB,OAAY,UAAUC,OAAkB,oBAAoBhB,GAA+BgB,EAAa,KAI1G,EAAQL,GAAaI,EAAO,IAEjCpqB,EAAQ,iBAAiB8oB,KAIvBqB,GAAO,iBAAiBnB,KACnBoB,OAAY,SAIjBD,GAAO,iBAAiBpB,KACnBqB,OAAY,UAAUd,GAAwBe,EAAa,IAI7D,EAAQJ,GAAgBG,EAAO,IAEpCpqB,EAAQ,iBAAiBgpB,KAIvBmB,GAAO,iBAAiBpB,MAAiB,CAACO,GAAwBe,EAAa,KAG/EF,GAAO,iBAAiBrB,MAAoB,CAACO,GAA+BgB,EAAa,IACpF,KAIF,CAACJ,GAAgBG,EAAO,MAAMb,GAA6Ba,EAAO,KAAK,CAACJ,GAAaI,EAAO,KAGjG,GAAAZ,OAAsB,2BAA2BL,GAAmBnpB,EAAQ,YAAY,KAlDnF;AAAA,EA0DX,GAMMsqB,KAAe,SAAsB5mB,GAAM;AAC/C,IAAAyd,GAAU8D,EAAU,SAAS;AAAA,MAC3B,SAASvhB;AAAA,IACf,CAAK;AACD,QAAI;AAEF,MAAAyiB,EAAcziB,CAAI,EAAE,YAAYA,CAAI;AAAA,IACtC,QAAY;AACV,MAAAsiB,EAAOtiB,CAAI;AAAA,IACb;AAAA,EACF,GAOM6mB,KAAmB,SAA0BrsB,GAAM8B,IAAS;AAChE,QAAI;AACF,MAAAmhB,GAAU8D,EAAU,SAAS;AAAA,QAC3B,WAAWjlB,GAAQ,iBAAiB9B,CAAI;AAAA,QACxC,MAAM8B;AAAA,MACd,CAAO;AAAA,IACH,QAAY;AACV,MAAAmhB,GAAU8D,EAAU,SAAS;AAAA,QAC3B,WAAW;AAAA,QACX,MAAMjlB;AAAA,MACd,CAAO;AAAA,IACH;AAGA,QAFAA,GAAQ,gBAAgB9B,CAAI,GAExBA,MAAS;AACX,UAAI6pB,MAAcC;AAChB,YAAI;AACF,UAAAsC,GAAatqB,EAAO;AAAA,QACtB,QAAY;AAAA,QAAC;AAAA;AAEb,YAAI;AACF,UAAAA,GAAQ,aAAa9B,GAAM,EAAE;AAAA,QAC/B,QAAY;AAAA,QAAC;AAAA,EAGnB,GAOMssB,KAAgB,SAAuBC,GAAO;AAElD,QAAIC,KAAM,MACNC,KAAoB;AACxB,QAAI7C;AACF,MAAA2C,IAAQ,sBAAsBA;AAAA,SACzB;AAEL,YAAMG,KAAUrJ,GAAYkJ,GAAO,aAAa;AAChD,MAAAE,KAAoBC,MAAWA,GAAQ,CAAC;AAAA,IAC1C;AACA,IAAIpB,OAAsB,2BAA2BP,OAAcD,OAEjEyB,IAAQ,mEAAmEA,IAAQ;AAErF,UAAMI,KAAexE,IAAqBA,EAAmB,WAAWoE,CAAK,IAAIA;AAKjF,QAAIxB,OAAcD;AAChB,UAAI;AACF,QAAA0B,KAAM,IAAI7E,EAAS,EAAG,gBAAgBgF,IAAcrB,EAAiB;AAAA,MACvE,QAAY;AAAA,MAAC;AAGf,QAAI,CAACkB,MAAO,CAACA,GAAI,iBAAiB;AAChC,MAAAA,KAAMnE,EAAe,eAAe0C,IAAW,YAAY,IAAI;AAC/D,UAAI;AACF,QAAAyB,GAAI,gBAAgB,YAAYxB,KAAiB5C,IAAYuE;AAAA,MAC/D,QAAY;AAAA,MAEZ;AAAA,IACF;AACA,UAAMC,KAAOJ,GAAI,QAAQA,GAAI;AAK7B,WAJID,KAASE,MACXG,GAAK,aAAa3F,EAAS,eAAewF,EAAiB,GAAGG,GAAK,WAAW,CAAC,KAAK,IAAI,GAGtF7B,OAAcD,KACTtC,EAAqB,KAAKgE,IAAK9C,KAAiB,SAAS,MAAM,EAAE,CAAC,IAEpEA,KAAiB8C,GAAI,kBAAkBI;AAAA,EAChD,GAOMC,IAAsB,SAA6B7F,GAAM;AAC7D,WAAOsB,EAAmB;AAAA,MAAKtB,EAAK,iBAAiBA;AAAA,MAAMA;AAAA;AAAA,MAE3DQ,EAAW,eAAeA,EAAW,eAAeA,EAAW,YAAYA,EAAW,8BAA8BA,EAAW;AAAA,MAAoB;AAAA,IAAI;AAAA,EACzJ,GAOMsF,KAAe,SAAsBhrB,GAAS;AAClD,WAAOA,aAAmB4lB,MAAoB,OAAO5lB,EAAQ,YAAa,YAAY,OAAOA,EAAQ,eAAgB,YAAY,OAAOA,EAAQ,eAAgB,cAAc,EAAEA,EAAQ,sBAAsB2lB,MAAiB,OAAO3lB,EAAQ,mBAAoB,cAAc,OAAOA,EAAQ,gBAAiB,cAAc,OAAOA,EAAQ,gBAAiB,YAAY,OAAOA,EAAQ,gBAAiB,cAAc,OAAOA,EAAQ,iBAAkB;AAAA,EAC3b,GAOMirB,KAAU,SAAiBlqB,GAAO;AACtC,WAAO,OAAOykB,KAAS,cAAczkB,aAAiBykB;AAAA,EACxD;AACA,WAAS0F,GAActE,IAAOuE,GAAatlB,IAAM;AAC/C,IAAAkb,GAAa6F,IAAO,CAAAwE,OAAQ;AAC1B,MAAAA,GAAK,KAAKnG,GAAWkG,GAAatlB,IAAM8jB,EAAM;AAAA,IAChD,CAAC;AAAA,EACH;AAUA,QAAM0B,KAAoB,SAA2BF,GAAa;AAChE,QAAIvhB,KAAU;AAId,QAFAshB,GAActE,EAAM,wBAAwBuE,GAAa,IAAI,GAEzDH,GAAaG,CAAW;AAC1B,aAAAb,GAAaa,CAAW,GACjB;AAGT,UAAMf,KAAU9H,GAAkB6I,EAAY,QAAQ;AAiBtD,QAfAD,GAActE,EAAM,qBAAqBuE,GAAa;AAAA,MACpD,SAAAf;AAAA,MACA,aAAatD;AAAA,IACnB,CAAK,GAEGa,MAAgBwD,EAAY,cAAa,KAAM,CAACF,GAAQE,EAAY,iBAAiB,KAAKvJ,GAAW,YAAYuJ,EAAY,SAAS,KAAKvJ,GAAW,YAAYuJ,EAAY,WAAW,KAKzLA,EAAY,aAAa9G,GAAU,0BAKnCsD,MAAgBwD,EAAY,aAAa9G,GAAU,WAAWzC,GAAW,WAAWuJ,EAAY,IAAI;AACtG,aAAAb,GAAaa,CAAW,GACjB;AAGT,QAAI,EAAE9D,GAAuB,oBAAoB,YAAYA,GAAuB,SAAS+C,EAAO,OAAO,CAACtD,GAAasD,EAAO,KAAKjD,GAAYiD,EAAO,IAAI;AAE1J,UAAI,CAACjD,GAAYiD,EAAO,KAAKkB,GAAsBlB,EAAO,MACpDlD,GAAwB,wBAAwB,UAAUtF,GAAWsF,GAAwB,cAAckD,EAAO,KAGlHlD,GAAwB,wBAAwB,YAAYA,GAAwB,aAAakD,EAAO;AAC1G,eAAO;AAIX,UAAI/B,MAAgB,CAACG,GAAgB4B,EAAO,GAAG;AAC7C,cAAMmB,KAAapF,EAAcgF,CAAW,KAAKA,EAAY,YACvDK,KAAatF,EAAciF,CAAW,KAAKA,EAAY;AAC7D,YAAIK,MAAcD,IAAY;AAC5B,gBAAME,KAAaD,GAAW;AAC9B,mBAAS7nB,KAAI8nB,KAAa,GAAG9nB,MAAK,GAAG,EAAEA,IAAG;AACxC,kBAAM+nB,KAAa3F,EAAUyF,GAAW7nB,EAAC,GAAG,EAAI;AAChD,YAAA+nB,GAAW,kBAAkBP,EAAY,kBAAkB,KAAK,GAChEI,GAAW,aAAaG,IAAYzF,EAAekF,CAAW,CAAC;AAAA,UACjE;AAAA,QACF;AAAA,MACF;AACA,aAAAb,GAAaa,CAAW,GACjB;AAAA,IACT;AAOA,WALIA,aAAuB1F,KAAW,CAACyE,GAAqBiB,CAAW,MAKlEf,OAAY,cAAcA,OAAY,aAAaA,OAAY,eAAexI,GAAW,+BAA+BuJ,EAAY,SAAS,KAChJb,GAAaa,CAAW,GACjB,OAGLzD,MAAsByD,EAAY,aAAa9G,GAAU,SAE3Dza,KAAUuhB,EAAY,aACtBpK,GAAa,CAAC2C,GAAeC,GAAUC,CAAW,GAAG,CAAA+H,OAAQ;AAC3D,MAAA/hB,KAAU4X,GAAc5X,IAAS+hB,IAAM,GAAG;AAAA,IAC5C,CAAC,GACGR,EAAY,gBAAgBvhB,OAC9BuX,GAAU8D,EAAU,SAAS;AAAA,MAC3B,SAASkG,EAAY,UAAS;AAAA,IACxC,CAAS,GACDA,EAAY,cAAcvhB,MAI9BshB,GAActE,EAAM,uBAAuBuE,GAAa,IAAI,GACrD;AAAA,EACT,GAUMS,KAAoB,SAA2BC,GAAOC,IAAQ/qB,IAAO;AAEzE,QAAImnB,MAAiB4D,OAAW,QAAQA,OAAW,YAAY/qB,MAASokB,KAAYpkB,MAAS6oB;AAC3F,aAAO;AAMT,QAAI,EAAArC,MAAmB,CAACH,GAAY0E,EAAM,KAAKlK,GAAWiC,GAAWiI,EAAM;AAAU,UAAI,EAAAxE,MAAmB1F,GAAWkC,GAAWgI,EAAM;AAAU,YAAI,EAAAzE,GAAuB,0BAA0B,YAAYA,GAAuB,eAAeyE,IAAQD,CAAK;AAAU,cAAI,CAAC7E,GAAa8E,EAAM,KAAK1E,GAAY0E,EAAM;AAC7T;AAAA;AAAA;AAAA;AAAA,cAIA,EAAAR,GAAsBO,CAAK,MAAM3E,GAAwB,wBAAwB,UAAUtF,GAAWsF,GAAwB,cAAc2E,CAAK,KAAK3E,GAAwB,wBAAwB,YAAYA,GAAwB,aAAa2E,CAAK,OAAO3E,GAAwB,8BAA8B,UAAUtF,GAAWsF,GAAwB,oBAAoB4E,EAAM,KAAK5E,GAAwB,8BAA8B,YAAYA,GAAwB,mBAAmB4E,IAAQD,CAAK;AAAA;AAAA,cAG/fC,OAAW,QAAQ5E,GAAwB,mCAAmCA,GAAwB,wBAAwB,UAAUtF,GAAWsF,GAAwB,cAAcnmB,EAAK,KAAKmmB,GAAwB,wBAAwB,YAAYA,GAAwB,aAAanmB,EAAK;AAAA,aACvS,QAAO;AAAA,qBAGA,CAAA6nB,GAAoBkD,EAAM;AAAU,gBAAI,CAAAlK,GAAWiF,GAAkBrF,GAAczgB,IAAOkjB,GAAiB,EAAE,CAAC;AAAU,kBAAK,GAAA6H,OAAW,SAASA,OAAW,gBAAgBA,OAAW,WAAWD,MAAU,YAAYpK,GAAc1gB,IAAO,OAAO,MAAM,KAAK2nB,GAAcmD,CAAK;AAAU,oBAAI,EAAArE,MAA2B,CAAC5F,GAAWoC,GAAmBxC,GAAczgB,IAAOkjB,GAAiB,EAAE,CAAC;AAAU,sBAAIljB;AAC1Z,2BAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAET,WAAO;AAAA,EACT,GASMuqB,KAAwB,SAA+BlB,GAAS;AACpE,WAAOA,MAAY,oBAAoB7I,GAAY6I,GAASjG,CAAc;AAAA,EAC5E,GAWM4H,KAAsB,SAA6BZ,GAAa;AAEpE,IAAAD,GAActE,EAAM,0BAA0BuE,GAAa,IAAI;AAC/D,UAAM;AAAA,MACJ,YAAAa;AAAA,IACN,IAAQb;AAEJ,QAAI,CAACa,MAAchB,GAAaG,CAAW;AACzC;AAEF,UAAMc,KAAY;AAAA,MAChB,UAAU;AAAA,MACV,WAAW;AAAA,MACX,UAAU;AAAA,MACV,mBAAmBjF;AAAA,MACnB,eAAe;AAAA,IACrB;AACI,QAAIhuB,KAAIgzB,GAAW;AAEnB,WAAOhzB,QAAK;AACV,YAAMkzB,KAAOF,GAAWhzB,EAAC,GACnB;AAAA,QACJ,MAAAkF;AAAA,QACA,cAAAiuB;AAAA,QACA,OAAOC;AAAA,MACf,IAAUF,IACEJ,KAASxJ,GAAkBpkB,EAAI,GAC/BmuB,KAAYD;AAClB,UAAIrrB,KAAQ7C,OAAS,UAAUmuB,KAAY3K,GAAW2K,EAAS;AAkB/D,UAhBAJ,GAAU,WAAWH,IACrBG,GAAU,YAAYlrB,IACtBkrB,GAAU,WAAW,IACrBA,GAAU,gBAAgB,QAC1Bf,GAActE,EAAM,uBAAuBuE,GAAac,EAAS,GACjElrB,KAAQkrB,GAAU,WAId9D,MAAyB2D,OAAW,QAAQA,OAAW,YAEzDvB,GAAiBrsB,IAAMitB,CAAW,GAElCpqB,KAAQqnB,IAA8BrnB,KAGpC4mB,MAAgB/F,GAAW,0CAA0C7gB,EAAK,GAAG;AAC/E,QAAAwpB,GAAiBrsB,IAAMitB,CAAW;AAClC;AAAA,MACF;AAEA,UAAIW,OAAW,mBAAmBvK,GAAYxgB,IAAO,MAAM,GAAG;AAC5D,QAAAwpB,GAAiBrsB,IAAMitB,CAAW;AAClC;AAAA,MACF;AAEA,UAAIc,GAAU;AACZ;AAGF,UAAI,CAACA,GAAU,UAAU;AACvB,QAAA1B,GAAiBrsB,IAAMitB,CAAW;AAClC;AAAA,MACF;AAEA,UAAI,CAAC1D,MAA4B7F,GAAW,QAAQ7gB,EAAK,GAAG;AAC1D,QAAAwpB,GAAiBrsB,IAAMitB,CAAW;AAClC;AAAA,MACF;AAEA,MAAIzD,MACF3G,GAAa,CAAC2C,GAAeC,GAAUC,CAAW,GAAG,CAAA+H,OAAQ;AAC3D,QAAA5qB,KAAQygB,GAAczgB,IAAO4qB,IAAM,GAAG;AAAA,MACxC,CAAC;AAGH,YAAME,KAAQvJ,GAAkB6I,EAAY,QAAQ;AACpD,UAAI,CAACS,GAAkBC,IAAOC,IAAQ/qB,EAAK,GAAG;AAC5C,QAAAwpB,GAAiBrsB,IAAMitB,CAAW;AAClC;AAAA,MACF;AAEA,UAAI9E,KAAsB,OAAO7B,KAAiB,YAAY,OAAOA,EAAa,oBAAqB,cACjG,CAAA2H;AACF,gBAAQ3H,EAAa,iBAAiBqH,IAAOC,EAAM,GAAC;AAAA,UAClD,KAAK,eACH;AACE,YAAA/qB,KAAQslB,EAAmB,WAAWtlB,EAAK;AAC3C;AAAA,UACF;AAAA,UACF,KAAK,oBACH;AACE,YAAAA,KAAQslB,EAAmB,gBAAgBtlB,EAAK;AAChD;AAAA,UACF;AAAA,QACd;AAIM,UAAIA,OAAUsrB;AACZ,YAAI;AACF,UAAIF,KACFhB,EAAY,eAAegB,IAAcjuB,IAAM6C,EAAK,IAGpDoqB,EAAY,aAAajtB,IAAM6C,EAAK,GAElCiqB,GAAaG,CAAW,IAC1Bb,GAAaa,CAAW,IAExBjK,GAAS+D,EAAU,OAAO;AAAA,QAE9B,QAAY;AACV,UAAAsF,GAAiBrsB,IAAMitB,CAAW;AAAA,QACpC;AAAA,IAEJ;AAEA,IAAAD,GAActE,EAAM,yBAAyBuE,GAAa,IAAI;AAAA,EAChE,GAMMmB,KAAqB,SAASA,GAAmBloB,GAAU;AAC/D,QAAImoB,KAAa;AACjB,UAAMC,KAAiBzB,EAAoB3mB,CAAQ;AAGnD,SADA8mB,GAActE,EAAM,yBAAyBxiB,GAAU,IAAI,GACpDmoB,KAAaC,GAAe;AAEjC,MAAAtB,GAActE,EAAM,wBAAwB2F,IAAY,IAAI,GAE5DlB,GAAkBkB,EAAU,GAE5BR,GAAoBQ,EAAU,GAE1BA,GAAW,mBAAmBjH,KAChCgH,GAAmBC,GAAW,OAAO;AAIzC,IAAArB,GAActE,EAAM,wBAAwBxiB,GAAU,IAAI;AAAA,EAC5D;AAEA,SAAA6gB,EAAU,WAAW,SAAUwF,IAAO;AACpC,QAAIV,IAAM,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAA,GAC1Ee,KAAO,MACP2B,KAAe,MACftB,KAAc,MACduB,KAAa;AASjB,QALAxD,KAAiB,CAACuB,IACdvB,OACFuB,KAAQ,UAGN,OAAOA,MAAU,YAAY,CAACQ,GAAQR,EAAK;AAC7C,UAAI,OAAOA,GAAM,YAAa;AAE5B,YADAA,KAAQA,GAAM,SAAQ,GAClB,OAAOA,MAAU;AACnB,gBAAM5I,GAAgB,iCAAiC;AAAA;AAGzD,cAAMA,GAAgB,4BAA4B;AAItD,QAAI,CAACoD,EAAU;AACb,aAAOwF;AAYT,QATK5C,MACHiC,GAAaC,CAAG,GAGlB9E,EAAU,UAAU,CAAA,GAEhB,OAAOwF,MAAU,aACnBnC,IAAW,KAETA;AAEF,UAAImC,GAAM,UAAU;AAClB,cAAML,KAAU9H,GAAkBmI,GAAM,QAAQ;AAChD,YAAI,CAAC3D,GAAasD,EAAO,KAAKjD,GAAYiD,EAAO;AAC/C,gBAAMvI,GAAgB,yDAAyD;AAAA,MAEnF;AAAA,eACS4I,cAAiBjF;AAG1B,MAAAsF,KAAON,GAAc,SAAS,GAC9BiC,KAAe3B,GAAK,cAAc,WAAWL,IAAO,EAAI,GACpDgC,GAAa,aAAapI,GAAU,WAAWoI,GAAa,aAAa,UAGlEA,GAAa,aAAa,SADnC3B,KAAO2B,KAKP3B,GAAK,YAAY2B,EAAY;AAAA,SAE1B;AAEL,UAAI,CAAC1E,MAAc,CAACL,MAAsB,CAACE;AAAA,MAE3C6C,GAAM,QAAQ,GAAG,MAAM;AACrB,eAAOpE,KAAsB4B,KAAsB5B,EAAmB,WAAWoE,EAAK,IAAIA;AAK5F,UAFAK,KAAON,GAAcC,EAAK,GAEtB,CAACK;AACH,eAAO/C,KAAa,OAAOE,KAAsB3B,IAAY;AAAA,IAEjE;AAEA,IAAIwE,MAAQhD,MACVwC,GAAaQ,GAAK,UAAU;AAG9B,UAAM6B,KAAe5B,EAAoBzC,IAAWmC,KAAQK,EAAI;AAEhE,WAAOK,KAAcwB,GAAa;AAEhC,MAAAtB,GAAkBF,EAAW,GAE7BY,GAAoBZ,EAAW,GAE3BA,GAAY,mBAAmB7F,KACjCgH,GAAmBnB,GAAY,OAAO;AAI1C,QAAI7C;AACF,aAAOmC;AAGT,QAAI1C,IAAY;AACd,UAAIC;AAEF,aADA0E,KAAajG,EAAuB,KAAKqE,GAAK,aAAa,GACpDA,GAAK;AAEV,UAAA4B,GAAW,YAAY5B,GAAK,UAAU;AAAA;AAGxC,QAAA4B,KAAa5B;AAEf,cAAI9D,GAAa,cAAcA,GAAa,oBAQ1C0F,KAAa/F,EAAW,KAAKvB,GAAkBsH,IAAY,EAAI,IAE1DA;AAAA,IACT;AACA,QAAIE,KAAiBhF,KAAiBkD,GAAK,YAAYA,GAAK;AAE5D,WAAIlD,MAAkBd,GAAa,UAAU,KAAKgE,GAAK,iBAAiBA,GAAK,cAAc,WAAWA,GAAK,cAAc,QAAQ,QAAQlJ,GAAWsC,IAAc4G,GAAK,cAAc,QAAQ,IAAI,MAC/L8B,KAAiB,eAAe9B,GAAK,cAAc,QAAQ,OAAO;AAAA,IAAQ8B,KAGxElF,MACF3G,GAAa,CAAC2C,GAAeC,GAAUC,CAAW,GAAG,CAAA+H,OAAQ;AAC3D,MAAAiB,KAAiBpL,GAAcoL,IAAgBjB,IAAM,GAAG;AAAA,IAC1D,CAAC,GAEItF,KAAsB4B,KAAsB5B,EAAmB,WAAWuG,EAAc,IAAIA;AAAA,EACrG,GACA3H,EAAU,YAAY,WAAY;AAChC,QAAI8E,KAAM,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAA;AAC9E,IAAAD,GAAaC,EAAG,GAChBlC,KAAa;AAAA,EACf,GACA5C,EAAU,cAAc,WAAY;AAClC,IAAA0E,KAAS,MACT9B,KAAa;AAAA,EACf,GACA5C,EAAU,mBAAmB,SAAU4H,IAAKX,GAAMnrB,IAAO;AAEvD,IAAK4oB,MACHG,GAAa,CAAA,CAAE;AAEjB,UAAM+B,KAAQvJ,GAAkBuK,EAAG,GAC7Bf,KAASxJ,GAAkB4J,CAAI;AACrC,WAAON,GAAkBC,IAAOC,IAAQ/qB,EAAK;AAAA,EAC/C,GACAkkB,EAAU,UAAU,SAAU6H,IAAYC,GAAc;AACtD,IAAI,OAAOA,KAAiB,cAG5B5L,GAAUyF,EAAMkG,EAAU,GAAGC,CAAY;AAAA,EAC3C,GACA9H,EAAU,aAAa,SAAU6H,IAAYC,GAAc;AACzD,QAAIA,MAAiB,QAAW;AAC9B,YAAMjlB,KAAQmZ,GAAiB2F,EAAMkG,EAAU,GAAGC,CAAY;AAC9D,aAAOjlB,OAAU,KAAK,SAAYsZ,GAAYwF,EAAMkG,EAAU,GAAGhlB,IAAO,CAAC,EAAE,CAAC;AAAA,IAC9E;AACA,WAAOoZ,GAAS0F,EAAMkG,EAAU,CAAC;AAAA,EACnC,GACA7H,EAAU,cAAc,SAAU6H,IAAY;AAC5C,IAAAlG,EAAMkG,EAAU,IAAI,CAAA;AAAA,EACtB,GACA7H,EAAU,iBAAiB,WAAY;AACrC,IAAA2B,IAAQ9B,GAAe;AAAA,EACzB,GACOG;AACT;AACG,IAAC+H,KAASjI,GAAe,GCt2CjBkI;AAAA,CACV,SAAUA,GAAM;AACb,EAAAA,EAAK,cAAc,CAAChN,MAAM;AAAA,EAAE;AAC5B,WAASiN,EAASC,GAAM;AAAA,EAAE;AAC1B,EAAAF,EAAK,WAAWC;AAChB,WAASE,EAAYC,GAAI;AACrB,UAAM,IAAI,MAAK;AAAA,EACnB;AACA,EAAAJ,EAAK,cAAcG,GACnBH,EAAK,cAAc,CAACK,MAAU;AAC1B,UAAMC,IAAM,CAAA;AACZ,eAAW5xB,KAAQ2xB;AACf,MAAAC,EAAI5xB,CAAI,IAAIA;AAEhB,WAAO4xB;AAAA,EACX,GACAN,EAAK,qBAAqB,CAACM,MAAQ;AAC/B,UAAMC,IAAYP,EAAK,WAAWM,CAAG,EAAE,OAAO,CAACx0B,MAAM,OAAOw0B,EAAIA,EAAIx0B,CAAC,CAAC,KAAM,QAAQ,GAC9E00B,IAAW,CAAA;AACjB,eAAW10B,KAAKy0B;AACZ,MAAAC,EAAS10B,CAAC,IAAIw0B,EAAIx0B,CAAC;AAEvB,WAAOk0B,EAAK,aAAaQ,CAAQ;AAAA,EACrC,GACAR,EAAK,eAAe,CAACM,MACVN,EAAK,WAAWM,CAAG,EAAE,IAAI,SAAU7zB,GAAG;AACzC,WAAO6zB,EAAI7zB,CAAC;AAAA,EAChB,CAAC,GAELuzB,EAAK,aAAa,OAAO,OAAO,QAAS,aACnC,CAACM,MAAQ,OAAO,KAAKA,CAAG,IACxB,CAACzqB,MAAW;AACV,UAAMuB,IAAO,CAAA;AACb,eAAWlC,KAAOW;AACd,MAAI,OAAO,UAAU,eAAe,KAAKA,GAAQX,CAAG,KAChDkC,EAAK,KAAKlC,CAAG;AAGrB,WAAOkC;AAAA,EACX,GACJ4oB,EAAK,OAAO,CAACS,GAAKC,MAAY;AAC1B,eAAWhyB,KAAQ+xB;AACf,UAAIC,EAAQhyB,CAAI;AACZ,eAAOA;AAAA,EAGnB,GACAsxB,EAAK,YAAY,OAAO,OAAO,aAAc,aACvC,CAACW,MAAQ,OAAO,UAAUA,CAAG,IAC7B,CAACA,MAAQ,OAAOA,KAAQ,YAAY,OAAO,SAASA,CAAG,KAAK,KAAK,MAAMA,CAAG,MAAMA;AACtF,WAASC,EAAWxL,GAAOnQ,IAAY,OAAO;AAC1C,WAAOmQ,EAAM,IAAI,CAACuL,MAAS,OAAOA,KAAQ,WAAW,IAAIA,CAAG,MAAMA,CAAI,EAAE,KAAK1b,CAAS;AAAA,EAC1F;AACA,EAAA+a,EAAK,aAAaY,GAClBZ,EAAK,wBAAwB,CAAChN,GAAGlf,MACzB,OAAOA,KAAU,WACVA,EAAM,SAAQ,IAElBA;AAEf,GAAGksB,OAASA,KAAO,CAAA,EAAG;AACf,IAAIa;AAAA,CACV,SAAUA,GAAY;AACnB,EAAAA,EAAW,cAAc,CAACC,GAAOC,OACtB;AAAA,IACH,GAAGD;AAAA,IACH,GAAGC;AAAA;AAAA,EACf;AAEA,GAAGF,OAAeA,KAAa,CAAA,EAAG;AAC3B,MAAMG,KAAgBhB,GAAK,YAAY;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC,GACYiB,KAAgB,CAACroB,MAAS;AAEnC,UADU,OAAOA,GACR;AAAA,IACL,KAAK;AACD,aAAOooB,GAAc;AAAA,IACzB,KAAK;AACD,aAAOA,GAAc;AAAA,IACzB,KAAK;AACD,aAAO,OAAO,MAAMpoB,CAAI,IAAIooB,GAAc,MAAMA,GAAc;AAAA,IAClE,KAAK;AACD,aAAOA,GAAc;AAAA,IACzB,KAAK;AACD,aAAOA,GAAc;AAAA,IACzB,KAAK;AACD,aAAOA,GAAc;AAAA,IACzB,KAAK;AACD,aAAOA,GAAc;AAAA,IACzB,KAAK;AACD,aAAI,MAAM,QAAQpoB,CAAI,IACXooB,GAAc,QAErBpoB,MAAS,OACFooB,GAAc,OAErBpoB,EAAK,QAAQ,OAAOA,EAAK,QAAS,cAAcA,EAAK,SAAS,OAAOA,EAAK,SAAU,aAC7EooB,GAAc,UAErB,OAAO,MAAQ,OAAepoB,aAAgB,MACvCooB,GAAc,MAErB,OAAO,MAAQ,OAAepoB,aAAgB,MACvCooB,GAAc,MAErB,OAAO,OAAS,OAAepoB,aAAgB,OACxCooB,GAAc,OAElBA,GAAc;AAAA,IACzB;AACI,aAAOA,GAAc;AAAA,EACjC;AACA,GCnIaE,KAAelB,GAAK,YAAY;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;AAKM,MAAMmB,WAAiB,MAAM;AAAA,EAChC,IAAI,SAAS;AACT,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,YAAYC,GAAQ;AAChB,UAAK,GACL,KAAK,SAAS,CAAA,GACd,KAAK,WAAW,CAACC,MAAQ;AACrB,WAAK,SAAS,CAAC,GAAG,KAAK,QAAQA,CAAG;AAAA,IACtC,GACA,KAAK,YAAY,CAACC,IAAO,OAAO;AAC5B,WAAK,SAAS,CAAC,GAAG,KAAK,QAAQ,GAAGA,CAAI;AAAA,IAC1C;AACA,UAAMC,IAAc,WAAW;AAC/B,IAAI,OAAO,iBAEP,OAAO,eAAe,MAAMA,CAAW,IAGvC,KAAK,YAAYA,GAErB,KAAK,OAAO,YACZ,KAAK,SAASH;AAAA,EAClB;AAAA,EACA,OAAOI,GAAS;AACZ,UAAMC,IAASD,KACX,SAAUE,GAAO;AACb,aAAOA,EAAM;AAAA,IACjB,GACEC,IAAc,EAAE,SAAS,GAAE,GAC3BC,IAAe,CAAC5zB,MAAU;AAC5B,iBAAW0zB,KAAS1zB,EAAM;AACtB,YAAI0zB,EAAM,SAAS;AACf,UAAAA,EAAM,YAAY,IAAIE,CAAY;AAAA,iBAE7BF,EAAM,SAAS;AACpB,UAAAE,EAAaF,EAAM,eAAe;AAAA,iBAE7BA,EAAM,SAAS;AACpB,UAAAE,EAAaF,EAAM,cAAc;AAAA,iBAE5BA,EAAM,KAAK,WAAW;AAC3B,UAAAC,EAAY,QAAQ,KAAKF,EAAOC,CAAK,CAAC;AAAA,aAErC;AACD,cAAIG,IAAOF,GACPjrB,IAAI;AACR,iBAAOA,IAAIgrB,EAAM,KAAK,UAAQ;AAC1B,kBAAMI,IAAKJ,EAAM,KAAKhrB,CAAC;AAEvB,YADiBA,MAAMgrB,EAAM,KAAK,SAAS,KAYvCG,EAAKC,CAAE,IAAID,EAAKC,CAAE,KAAK,EAAE,SAAS,GAAE,GACpCD,EAAKC,CAAE,EAAE,QAAQ,KAAKL,EAAOC,CAAK,CAAC,KAXnCG,EAAKC,CAAE,IAAID,EAAKC,CAAE,KAAK,EAAE,SAAS,GAAE,GAaxCD,IAAOA,EAAKC,CAAE,GACdprB;AAAA,UACJ;AAAA,QACJ;AAAA,IAER;AACA,WAAAkrB,EAAa,IAAI,GACVD;AAAA,EACX;AAAA,EACA,OAAO,OAAO7tB,GAAO;AACjB,QAAI,EAAEA,aAAiBqtB;AACnB,YAAM,IAAI,MAAM,mBAAmBrtB,CAAK,EAAE;AAAA,EAElD;AAAA,EACA,WAAW;AACP,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,UAAU,KAAK,QAAQksB,GAAK,uBAAuB,CAAC;AAAA,EACpE;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,OAAO,WAAW;AAAA,EAClC;AAAA,EACA,QAAQyB,IAAS,CAACC,MAAUA,EAAM,SAAS;AACvC,UAAMC,IAAc,CAAA,GACdI,IAAa,CAAA;AACnB,eAAWV,KAAO,KAAK;AACnB,UAAIA,EAAI,KAAK,SAAS,GAAG;AACrB,cAAMW,IAAUX,EAAI,KAAK,CAAC;AAC1B,QAAAM,EAAYK,CAAO,IAAIL,EAAYK,CAAO,KAAK,CAAA,GAC/CL,EAAYK,CAAO,EAAE,KAAKP,EAAOJ,CAAG,CAAC;AAAA,MACzC;AAEI,QAAAU,EAAW,KAAKN,EAAOJ,CAAG,CAAC;AAGnC,WAAO,EAAE,YAAAU,GAAY,aAAAJ,EAAW;AAAA,EACpC;AAAA,EACA,IAAI,aAAa;AACb,WAAO,KAAK,QAAO;AAAA,EACvB;AACJ;AACAR,GAAS,SAAS,CAACC,MACD,IAAID,GAASC,CAAM;AChIrC,MAAMa,KAAW,CAACP,GAAOQ,MAAS;AAC9B,MAAIC;AACJ,UAAQT,EAAM,MAAI;AAAA,IACd,KAAKR,GAAa;AACd,MAAIQ,EAAM,aAAaV,GAAc,YACjCmB,IAAU,aAGVA,IAAU,YAAYT,EAAM,QAAQ,cAAcA,EAAM,QAAQ;AAEpE;AAAA,IACJ,KAAKR,GAAa;AACd,MAAAiB,IAAU,mCAAmC,KAAK,UAAUT,EAAM,UAAU1B,GAAK,qBAAqB,CAAC;AACvG;AAAA,IACJ,KAAKkB,GAAa;AACd,MAAAiB,IAAU,kCAAkCnC,GAAK,WAAW0B,EAAM,MAAM,IAAI,CAAC;AAC7E;AAAA,IACJ,KAAKR,GAAa;AACd,MAAAiB,IAAU;AACV;AAAA,IACJ,KAAKjB,GAAa;AACd,MAAAiB,IAAU,yCAAyCnC,GAAK,WAAW0B,EAAM,OAAO,CAAC;AACjF;AAAA,IACJ,KAAKR,GAAa;AACd,MAAAiB,IAAU,gCAAgCnC,GAAK,WAAW0B,EAAM,OAAO,CAAC,eAAeA,EAAM,QAAQ;AACrG;AAAA,IACJ,KAAKR,GAAa;AACd,MAAAiB,IAAU;AACV;AAAA,IACJ,KAAKjB,GAAa;AACd,MAAAiB,IAAU;AACV;AAAA,IACJ,KAAKjB,GAAa;AACd,MAAAiB,IAAU;AACV;AAAA,IACJ,KAAKjB,GAAa;AACd,MAAI,OAAOQ,EAAM,cAAe,WACxB,cAAcA,EAAM,cACpBS,IAAU,gCAAgCT,EAAM,WAAW,QAAQ,KAC/D,OAAOA,EAAM,WAAW,YAAa,aACrCS,IAAU,GAAGA,CAAO,sDAAsDT,EAAM,WAAW,QAAQ,OAGlG,gBAAgBA,EAAM,aAC3BS,IAAU,mCAAmCT,EAAM,WAAW,UAAU,MAEnE,cAAcA,EAAM,aACzBS,IAAU,iCAAiCT,EAAM,WAAW,QAAQ,MAGpE1B,GAAK,YAAY0B,EAAM,UAAU,IAGhCA,EAAM,eAAe,UAC1BS,IAAU,WAAWT,EAAM,UAAU,KAGrCS,IAAU;AAEd;AAAA,IACJ,KAAKjB,GAAa;AACd,MAAIQ,EAAM,SAAS,UACfS,IAAU,sBAAsBT,EAAM,QAAQ,YAAYA,EAAM,YAAY,aAAa,WAAW,IAAIA,EAAM,OAAO,gBAChHA,EAAM,SAAS,WACpBS,IAAU,uBAAuBT,EAAM,QAAQ,YAAYA,EAAM,YAAY,aAAa,MAAM,IAAIA,EAAM,OAAO,kBAC5GA,EAAM,SAAS,WACpBS,IAAU,kBAAkBT,EAAM,QAAQ,sBAAsBA,EAAM,YAAY,8BAA8B,eAAe,GAAGA,EAAM,OAAO,KAC1IA,EAAM,SAAS,WACpBS,IAAU,kBAAkBT,EAAM,QAAQ,sBAAsBA,EAAM,YAAY,8BAA8B,eAAe,GAAGA,EAAM,OAAO,KAC1IA,EAAM,SAAS,SACpBS,IAAU,gBAAgBT,EAAM,QAAQ,sBAAsBA,EAAM,YAAY,8BAA8B,eAAe,GAAG,IAAI,KAAK,OAAOA,EAAM,OAAO,CAAC,CAAC,KAE/JS,IAAU;AACd;AAAA,IACJ,KAAKjB,GAAa;AACd,MAAIQ,EAAM,SAAS,UACfS,IAAU,sBAAsBT,EAAM,QAAQ,YAAYA,EAAM,YAAY,YAAY,WAAW,IAAIA,EAAM,OAAO,gBAC/GA,EAAM,SAAS,WACpBS,IAAU,uBAAuBT,EAAM,QAAQ,YAAYA,EAAM,YAAY,YAAY,OAAO,IAAIA,EAAM,OAAO,kBAC5GA,EAAM,SAAS,WACpBS,IAAU,kBAAkBT,EAAM,QAAQ,YAAYA,EAAM,YAAY,0BAA0B,WAAW,IAAIA,EAAM,OAAO,KACzHA,EAAM,SAAS,WACpBS,IAAU,kBAAkBT,EAAM,QAAQ,YAAYA,EAAM,YAAY,0BAA0B,WAAW,IAAIA,EAAM,OAAO,KACzHA,EAAM,SAAS,SACpBS,IAAU,gBAAgBT,EAAM,QAAQ,YAAYA,EAAM,YAAY,6BAA6B,cAAc,IAAI,IAAI,KAAK,OAAOA,EAAM,OAAO,CAAC,CAAC,KAEpJS,IAAU;AACd;AAAA,IACJ,KAAKjB,GAAa;AACd,MAAAiB,IAAU;AACV;AAAA,IACJ,KAAKjB,GAAa;AACd,MAAAiB,IAAU;AACV;AAAA,IACJ,KAAKjB,GAAa;AACd,MAAAiB,IAAU,gCAAgCT,EAAM,UAAU;AAC1D;AAAA,IACJ,KAAKR,GAAa;AACd,MAAAiB,IAAU;AACV;AAAA,IACJ;AACI,MAAAA,IAAUD,EAAK,cACflC,GAAK,YAAY0B,CAAK;AAAA,EAClC;AACI,SAAO,EAAE,SAAAS,EAAO;AACpB;AC1GA,IAAIC,KAAmBC;AAKhB,SAASC,KAAc;AAC1B,SAAOF;AACX;ACNO,MAAMG,KAAY,CAACC,MAAW;AACjC,QAAM,EAAE,MAAA5pB,GAAM,MAAAuL,GAAM,WAAAse,GAAW,WAAAC,EAAS,IAAKF,GACvCG,IAAW,CAAC,GAAGxe,GAAM,GAAIue,EAAU,QAAQ,CAAA,CAAG,GAC9CE,IAAY;AAAA,IACd,GAAGF;AAAA,IACH,MAAMC;AAAA,EACd;AACI,MAAID,EAAU,YAAY;AACtB,WAAO;AAAA,MACH,GAAGA;AAAA,MACH,MAAMC;AAAA,MACN,SAASD,EAAU;AAAA,IAC/B;AAEI,MAAIG,IAAe;AACnB,QAAMC,IAAOL,EACR,OAAO,CAACz2B,MAAM,CAAC,CAACA,CAAC,EACjB,MAAK,EACL,QAAO;AACZ,aAAW+2B,KAAOD;AACd,IAAAD,IAAeE,EAAIH,GAAW,EAAE,MAAAhqB,GAAM,cAAciqB,EAAY,CAAE,EAAE;AAExE,SAAO;AAAA,IACH,GAAGH;AAAA,IACH,MAAMC;AAAA,IACN,SAASE;AAAA,EACjB;AACA;AAEO,SAASG,GAAkBC,GAAKP,GAAW;AAC9C,QAAMQ,IAAcZ,GAAW,GACzBZ,IAAQa,GAAU;AAAA,IACpB,WAAWG;AAAA,IACX,MAAMO,EAAI;AAAA,IACV,MAAMA,EAAI;AAAA,IACV,WAAW;AAAA,MACPA,EAAI,OAAO;AAAA;AAAA,MACXA,EAAI;AAAA;AAAA,MACJC;AAAA;AAAA,MACAA,MAAgBb,KAAkB,SAAYA;AAAAA;AAAAA,IAC1D,EAAU,OAAO,CAACjxB,MAAM,CAAC,CAACA,CAAC;AAAA,EAC3B,CAAK;AACD,EAAA6xB,EAAI,OAAO,OAAO,KAAKvB,CAAK;AAChC;AACO,MAAMyB,GAAY;AAAA,EACrB,cAAc;AACV,SAAK,QAAQ;AAAA,EACjB;AAAA,EACA,QAAQ;AACJ,IAAI,KAAK,UAAU,YACf,KAAK,QAAQ;AAAA,EACrB;AAAA,EACA,QAAQ;AACJ,IAAI,KAAK,UAAU,cACf,KAAK,QAAQ;AAAA,EACrB;AAAA,EACA,OAAO,WAAWC,GAAQC,GAAS;AAC/B,UAAMC,IAAa,CAAA;AACnB,eAAWlxB,KAAKixB,GAAS;AACrB,UAAIjxB,EAAE,WAAW;AACb,eAAOmxB;AACX,MAAInxB,EAAE,WAAW,WACbgxB,EAAO,MAAK,GAChBE,EAAW,KAAKlxB,EAAE,KAAK;AAAA,IAC3B;AACA,WAAO,EAAE,QAAQgxB,EAAO,OAAO,OAAOE,EAAU;AAAA,EACpD;AAAA,EACA,aAAa,iBAAiBF,GAAQI,GAAO;AACzC,UAAMC,IAAY,CAAA;AAClB,eAAWC,KAAQF,GAAO;AACtB,YAAMtuB,IAAM,MAAMwuB,EAAK,KACjB5vB,IAAQ,MAAM4vB,EAAK;AACzB,MAAAD,EAAU,KAAK;AAAA,QACX,KAAAvuB;AAAA,QACA,OAAApB;AAAA,MAChB,CAAa;AAAA,IACL;AACA,WAAOqvB,GAAY,gBAAgBC,GAAQK,CAAS;AAAA,EACxD;AAAA,EACA,OAAO,gBAAgBL,GAAQI,GAAO;AAClC,UAAMG,IAAc,CAAA;AACpB,eAAWD,KAAQF,GAAO;AACtB,YAAM,EAAE,KAAAtuB,GAAK,OAAApB,EAAK,IAAK4vB;AAGvB,UAFIxuB,EAAI,WAAW,aAEfpB,EAAM,WAAW;AACjB,eAAOyvB;AACX,MAAIruB,EAAI,WAAW,WACfkuB,EAAO,MAAK,GACZtvB,EAAM,WAAW,WACjBsvB,EAAO,MAAK,GACZluB,EAAI,UAAU,gBAAgB,OAAOpB,EAAM,QAAU,OAAe4vB,EAAK,eACzEC,EAAYzuB,EAAI,KAAK,IAAIpB,EAAM;AAAA,IAEvC;AACA,WAAO,EAAE,QAAQsvB,EAAO,OAAO,OAAOO,EAAW;AAAA,EACrD;AACJ;AACO,MAAMJ,KAAU,OAAO,OAAO;AAAA,EACjC,QAAQ;AACZ,CAAC,GACYK,KAAQ,CAAC9vB,OAAW,EAAE,QAAQ,SAAS,OAAAA,EAAK,IAC5C+vB,KAAK,CAAC/vB,OAAW,EAAE,QAAQ,SAAS,OAAAA,EAAK,IACzCgwB,KAAY,CAAC1yB,MAAMA,EAAE,WAAW,WAChC2yB,KAAU,CAAC3yB,MAAMA,EAAE,WAAW,SAC9B4yB,KAAU,CAAC5yB,MAAMA,EAAE,WAAW,SAC9B6yB,KAAU,CAAC7yB,MAAM,OAAO,UAAY,OAAeA,aAAa;AC5GtE,IAAI8yB;AAAA,CACV,SAAUA,GAAW;AAClB,EAAAA,EAAU,WAAW,CAAC/B,MAAY,OAAOA,KAAY,WAAW,EAAE,SAAAA,MAAYA,KAAW,CAAA,GAEzF+B,EAAU,WAAW,CAAC/B,MAAY,OAAOA,KAAY,WAAWA,IAAUA,KAAA,gBAAAA,EAAS;AACvF,GAAG+B,OAAcA,KAAY,CAAA,EAAG;ACAhC,MAAMC,GAAmB;AAAA,EACrB,YAAYjH,GAAQppB,GAAOqQ,GAAMjP,GAAK;AAClC,SAAK,cAAc,CAAA,GACnB,KAAK,SAASgoB,GACd,KAAK,OAAOppB,GACZ,KAAK,QAAQqQ,GACb,KAAK,OAAOjP;AAAA,EAChB;AAAA,EACA,IAAI,OAAO;AACP,WAAK,KAAK,YAAY,WACd,MAAM,QAAQ,KAAK,IAAI,IACvB,KAAK,YAAY,KAAK,GAAG,KAAK,OAAO,GAAG,KAAK,IAAI,IAGjD,KAAK,YAAY,KAAK,GAAG,KAAK,OAAO,KAAK,IAAI,IAG/C,KAAK;AAAA,EAChB;AACJ;AACA,MAAMkvB,KAAe,CAACnB,GAAKxpB,MAAW;AAClC,MAAIuqB,GAAQvqB,CAAM;AACd,WAAO,EAAE,SAAS,IAAM,MAAMA,EAAO,MAAK;AAG1C,MAAI,CAACwpB,EAAI,OAAO,OAAO;AACnB,UAAM,IAAI,MAAM,2CAA2C;AAE/D,SAAO;AAAA,IACH,SAAS;AAAA,IACT,IAAI,QAAQ;AACR,UAAI,KAAK;AACL,eAAO,KAAK;AAChB,YAAMj1B,IAAQ,IAAImzB,GAAS8B,EAAI,OAAO,MAAM;AAC5C,kBAAK,SAASj1B,GACP,KAAK;AAAA,IAChB;AAAA,EACZ;AAEA;AACA,SAASq2B,GAAoB7B,GAAQ;AACjC,MAAI,CAACA;AACD,WAAO,CAAA;AACX,QAAM,EAAE,UAAAP,GAAU,oBAAAqC,GAAoB,gBAAAC,GAAgB,aAAAC,EAAW,IAAKhC;AACtE,MAAIP,MAAaqC,KAAsBC;AACnC,UAAM,IAAI,MAAM,0FAA0F;AAE9G,SAAItC,IACO,EAAE,UAAUA,GAAU,aAAAuC,EAAW,IAarC,EAAE,UAZS,CAACC,GAAKxB,MAAQ;AAC5B,UAAM,EAAE,SAAAd,EAAO,IAAKK;AACpB,WAAIiC,EAAI,SAAS,uBACN,EAAE,SAAStC,KAAWc,EAAI,aAAY,IAE7C,OAAOA,EAAI,OAAS,MACb,EAAE,SAASd,KAAWoC,KAAkBtB,EAAI,aAAY,IAE/DwB,EAAI,SAAS,iBACN,EAAE,SAASxB,EAAI,aAAY,IAC/B,EAAE,SAASd,KAAWmC,KAAsBrB,EAAI,aAAY;AAAA,EACvE,GAC8B,aAAAuB,EAAW;AAC7C;AACO,MAAME,GAAQ;AAAA,EACjB,IAAI,cAAc;AACd,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,SAASC,GAAO;AACZ,WAAO1D,GAAc0D,EAAM,IAAI;AAAA,EACnC;AAAA,EACA,gBAAgBA,GAAO1B,GAAK;AACxB,WAAQA,KAAO;AAAA,MACX,QAAQ0B,EAAM,OAAO;AAAA,MACrB,MAAMA,EAAM;AAAA,MACZ,YAAY1D,GAAc0D,EAAM,IAAI;AAAA,MACpC,gBAAgB,KAAK,KAAK;AAAA,MAC1B,MAAMA,EAAM;AAAA,MACZ,QAAQA,EAAM;AAAA,IAC1B;AAAA,EACI;AAAA,EACA,oBAAoBA,GAAO;AACvB,WAAO;AAAA,MACH,QAAQ,IAAIxB,GAAW;AAAA,MACvB,KAAK;AAAA,QACD,QAAQwB,EAAM,OAAO;AAAA,QACrB,MAAMA,EAAM;AAAA,QACZ,YAAY1D,GAAc0D,EAAM,IAAI;AAAA,QACpC,gBAAgB,KAAK,KAAK;AAAA,QAC1B,MAAMA,EAAM;AAAA,QACZ,QAAQA,EAAM;AAAA,MAC9B;AAAA,IACA;AAAA,EACI;AAAA,EACA,WAAWA,GAAO;AACd,UAAMlrB,IAAS,KAAK,OAAOkrB,CAAK;AAChC,QAAIV,GAAQxqB,CAAM;AACd,YAAM,IAAI,MAAM,wCAAwC;AAE5D,WAAOA;AAAA,EACX;AAAA,EACA,YAAYkrB,GAAO;AACf,UAAMlrB,IAAS,KAAK,OAAOkrB,CAAK;AAChC,WAAO,QAAQ,QAAQlrB,CAAM;AAAA,EACjC;AAAA,EACA,MAAMb,GAAM4pB,GAAQ;AAChB,UAAM/oB,IAAS,KAAK,UAAUb,GAAM4pB,CAAM;AAC1C,QAAI/oB,EAAO;AACP,aAAOA,EAAO;AAClB,UAAMA,EAAO;AAAA,EACjB;AAAA,EACA,UAAUb,GAAM4pB,GAAQ;AACpB,UAAMS,IAAM;AAAA,MACR,QAAQ;AAAA,QACJ,QAAQ,CAAA;AAAA,QACR,QAAOT,KAAA,gBAAAA,EAAQ,UAAS;AAAA,QACxB,oBAAoBA,KAAA,gBAAAA,EAAQ;AAAA,MAC5C;AAAA,MACY,OAAMA,KAAA,gBAAAA,EAAQ,SAAQ,CAAA;AAAA,MACtB,gBAAgB,KAAK,KAAK;AAAA,MAC1B,QAAQ;AAAA,MACR,MAAA5pB;AAAA,MACA,YAAYqoB,GAAcroB,CAAI;AAAA,IAC1C,GACca,IAAS,KAAK,WAAW,EAAE,MAAAb,GAAM,MAAMqqB,EAAI,MAAM,QAAQA,GAAK;AACpE,WAAOmB,GAAanB,GAAKxpB,CAAM;AAAA,EACnC;AAAA,EACA,YAAYb,GAAM;;AACd,UAAMqqB,IAAM;AAAA,MACR,QAAQ;AAAA,QACJ,QAAQ,CAAA;AAAA,QACR,OAAO,CAAC,CAAC,KAAK,WAAW,EAAE;AAAA,MAC3C;AAAA,MACY,MAAM,CAAA;AAAA,MACN,gBAAgB,KAAK,KAAK;AAAA,MAC1B,QAAQ;AAAA,MACR,MAAArqB;AAAA,MACA,YAAYqoB,GAAcroB,CAAI;AAAA,IAC1C;AACQ,QAAI,CAAC,KAAK,WAAW,EAAE;AACnB,UAAI;AACA,cAAMa,IAAS,KAAK,WAAW,EAAE,MAAAb,GAAM,MAAM,CAAA,GAAI,QAAQqqB,GAAK;AAC9D,eAAOe,GAAQvqB,CAAM,IACf;AAAA,UACE,OAAOA,EAAO;AAAA,QACtC,IACsB;AAAA,UACE,QAAQwpB,EAAI,OAAO;AAAA,QAC3C;AAAA,MACY,SACOxvB,GAAK;AACR,SAAIsN,KAAAnG,IAAAnH,KAAA,gBAAAA,EAAK,YAAL,gBAAAmH,EAAc,kBAAd,QAAAmG,EAA6B,SAAS,mBACtC,KAAK,WAAW,EAAE,QAAQ,KAE9BkiB,EAAI,SAAS;AAAA,UACT,QAAQ,CAAA;AAAA,UACR,OAAO;AAAA,QAC3B;AAAA,MACY;AAEJ,WAAO,KAAK,YAAY,EAAE,MAAArqB,GAAM,MAAM,CAAA,GAAI,QAAQqqB,EAAG,CAAE,EAAE,KAAK,CAACxpB,MAAWuqB,GAAQvqB,CAAM,IAClF;AAAA,MACE,OAAOA,EAAO;AAAA,IAC9B,IACc;AAAA,MACE,QAAQwpB,EAAI,OAAO;AAAA,IACnC,CAAa;AAAA,EACT;AAAA,EACA,MAAM,WAAWrqB,GAAM4pB,GAAQ;AAC3B,UAAM/oB,IAAS,MAAM,KAAK,eAAeb,GAAM4pB,CAAM;AACrD,QAAI/oB,EAAO;AACP,aAAOA,EAAO;AAClB,UAAMA,EAAO;AAAA,EACjB;AAAA,EACA,MAAM,eAAeb,GAAM4pB,GAAQ;AAC/B,UAAMS,IAAM;AAAA,MACR,QAAQ;AAAA,QACJ,QAAQ,CAAA;AAAA,QACR,oBAAoBT,KAAA,gBAAAA,EAAQ;AAAA,QAC5B,OAAO;AAAA,MACvB;AAAA,MACY,OAAMA,KAAA,gBAAAA,EAAQ,SAAQ,CAAA;AAAA,MACtB,gBAAgB,KAAK,KAAK;AAAA,MAC1B,QAAQ;AAAA,MACR,MAAA5pB;AAAA,MACA,YAAYqoB,GAAcroB,CAAI;AAAA,IAC1C,GACcgsB,IAAmB,KAAK,OAAO,EAAE,MAAAhsB,GAAM,MAAMqqB,EAAI,MAAM,QAAQA,GAAK,GACpExpB,IAAS,OAAOwqB,GAAQW,CAAgB,IAAIA,IAAmB,QAAQ,QAAQA,CAAgB;AACrG,WAAOR,GAAanB,GAAKxpB,CAAM;AAAA,EACnC;AAAA,EACA,OAAOorB,GAAO1C,GAAS;AACnB,UAAM2C,IAAqB,CAACnE,MACpB,OAAOwB,KAAY,YAAY,OAAOA,IAAY,MAC3C,EAAE,SAAAA,EAAO,IAEX,OAAOA,KAAY,aACjBA,EAAQxB,CAAG,IAGXwB;AAGf,WAAO,KAAK,YAAY,CAACxB,GAAKsC,MAAQ;AAClC,YAAMxpB,IAASorB,EAAMlE,CAAG,GAClB1nB,IAAW,MAAMgqB,EAAI,SAAS;AAAA,QAChC,MAAM/B,GAAa;AAAA,QACnB,GAAG4D,EAAmBnE,CAAG;AAAA,MACzC,CAAa;AACD,aAAI,OAAO,UAAY,OAAelnB,aAAkB,UAC7CA,EAAO,KAAK,CAACb,MACXA,IAKM,MAJPK,EAAQ,GACD,GAKd,IAEAQ,IAKM,MAJPR,EAAQ,GACD;AAAA,IAKf,CAAC;AAAA,EACL;AAAA,EACA,WAAW4rB,GAAOE,GAAgB;AAC9B,WAAO,KAAK,YAAY,CAACpE,GAAKsC,MACrB4B,EAAMlE,CAAG,IAKH,MAJPsC,EAAI,SAAS,OAAO8B,KAAmB,aAAaA,EAAepE,GAAKsC,CAAG,IAAI8B,CAAc,GACtF,GAKd;AAAA,EACL;AAAA,EACA,YAAYC,GAAY;AACpB,WAAO,IAAIC,GAAW;AAAA,MAClB,QAAQ;AAAA,MACR,UAAUC,GAAsB;AAAA,MAChC,QAAQ,EAAE,MAAM,cAAc,YAAAF,EAAU;AAAA,IACpD,CAAS;AAAA,EACL;AAAA,EACA,YAAYA,GAAY;AACpB,WAAO,KAAK,YAAYA,CAAU;AAAA,EACtC;AAAA,EACA,YAAYG,GAAK;AAEb,SAAK,MAAM,KAAK,gBAChB,KAAK,OAAOA,GACZ,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI,GACjC,KAAK,YAAY,KAAK,UAAU,KAAK,IAAI,GACzC,KAAK,aAAa,KAAK,WAAW,KAAK,IAAI,GAC3C,KAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI,GACnD,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,GAC7B,KAAK,SAAS,KAAK,OAAO,KAAK,IAAI,GACnC,KAAK,aAAa,KAAK,WAAW,KAAK,IAAI,GAC3C,KAAK,cAAc,KAAK,YAAY,KAAK,IAAI,GAC7C,KAAK,WAAW,KAAK,SAAS,KAAK,IAAI,GACvC,KAAK,WAAW,KAAK,SAAS,KAAK,IAAI,GACvC,KAAK,UAAU,KAAK,QAAQ,KAAK,IAAI,GACrC,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI,GACjC,KAAK,UAAU,KAAK,QAAQ,KAAK,IAAI,GACrC,KAAK,KAAK,KAAK,GAAG,KAAK,IAAI,GAC3B,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,GAC7B,KAAK,YAAY,KAAK,UAAU,KAAK,IAAI,GACzC,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI,GACjC,KAAK,UAAU,KAAK,QAAQ,KAAK,IAAI,GACrC,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI,GACjC,KAAK,WAAW,KAAK,SAAS,KAAK,IAAI,GACvC,KAAK,OAAO,KAAK,KAAK,KAAK,IAAI,GAC/B,KAAK,WAAW,KAAK,SAAS,KAAK,IAAI,GACvC,KAAK,aAAa,KAAK,WAAW,KAAK,IAAI,GAC3C,KAAK,aAAa,KAAK,WAAW,KAAK,IAAI,GAC3C,KAAK,WAAW,IAAI;AAAA,MAChB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU,CAACvsB,MAAS,KAAK,WAAW,EAAEA,CAAI;AAAA,IACtD;AAAA,EACI;AAAA,EACA,WAAW;AACP,WAAOwsB,GAAY,OAAO,MAAM,KAAK,IAAI;AAAA,EAC7C;AAAA,EACA,WAAW;AACP,WAAOC,GAAY,OAAO,MAAM,KAAK,IAAI;AAAA,EAC7C;AAAA,EACA,UAAU;AACN,WAAO,KAAK,SAAQ,EAAG,SAAQ;AAAA,EACnC;AAAA,EACA,QAAQ;AACJ,WAAOC,GAAS,OAAO,IAAI;AAAA,EAC/B;AAAA,EACA,UAAU;AACN,WAAOC,GAAW,OAAO,MAAM,KAAK,IAAI;AAAA,EAC5C;AAAA,EACA,GAAGC,GAAQ;AACP,WAAOC,GAAS,OAAO,CAAC,MAAMD,CAAM,GAAG,KAAK,IAAI;AAAA,EACpD;AAAA,EACA,IAAIE,GAAU;AACV,WAAOC,GAAgB,OAAO,MAAMD,GAAU,KAAK,IAAI;AAAA,EAC3D;AAAA,EACA,UAAUE,GAAW;AACjB,WAAO,IAAIX,GAAW;AAAA,MAClB,GAAGZ,GAAoB,KAAK,IAAI;AAAA,MAChC,QAAQ;AAAA,MACR,UAAUa,GAAsB;AAAA,MAChC,QAAQ,EAAE,MAAM,aAAa,WAAAU,EAAS;AAAA,IAClD,CAAS;AAAA,EACL;AAAA,EACA,QAAQT,GAAK;AACT,UAAMU,IAAmB,OAAOV,KAAQ,aAAaA,IAAM,MAAMA;AACjE,WAAO,IAAIW,GAAW;AAAA,MAClB,GAAGzB,GAAoB,KAAK,IAAI;AAAA,MAChC,WAAW;AAAA,MACX,cAAcwB;AAAA,MACd,UAAUX,GAAsB;AAAA,IAC5C,CAAS;AAAA,EACL;AAAA,EACA,QAAQ;AACJ,WAAO,IAAIa,GAAW;AAAA,MAClB,UAAUb,GAAsB;AAAA,MAChC,MAAM;AAAA,MACN,GAAGb,GAAoB,KAAK,IAAI;AAAA,IAC5C,CAAS;AAAA,EACL;AAAA,EACA,MAAMc,GAAK;AACP,UAAMa,IAAiB,OAAOb,KAAQ,aAAaA,IAAM,MAAMA;AAC/D,WAAO,IAAIc,GAAS;AAAA,MAChB,GAAG5B,GAAoB,KAAK,IAAI;AAAA,MAChC,WAAW;AAAA,MACX,YAAY2B;AAAA,MACZ,UAAUd,GAAsB;AAAA,IAC5C,CAAS;AAAA,EACL;AAAA,EACA,SAASV,GAAa;AAClB,UAAM0B,IAAO,KAAK;AAClB,WAAO,IAAIA,EAAK;AAAA,MACZ,GAAG,KAAK;AAAA,MACR,aAAA1B;AAAA,IACZ,CAAS;AAAA,EACL;AAAA,EACA,KAAK2B,GAAQ;AACT,WAAOC,GAAY,OAAO,MAAMD,CAAM;AAAA,EAC1C;AAAA,EACA,WAAW;AACP,WAAOE,GAAY,OAAO,IAAI;AAAA,EAClC;AAAA,EACA,aAAa;AACT,WAAO,KAAK,UAAU,MAAS,EAAE;AAAA,EACrC;AAAA,EACA,aAAa;AACT,WAAO,KAAK,UAAU,IAAI,EAAE;AAAA,EAChC;AACJ;AACA,MAAMC,KAAY,kBACZC,KAAa,eACbC,KAAY,6BAGZC,KAAY,0FACZC,KAAc,qBACdC,KAAW,oDACXC,KAAgB,4SAahBC,KAAa,sFAIbC,KAAc;AACpB,IAAIC;AAEJ,MAAMC,KAAY,uHACZC,KAAgB,4IAGhBC,KAAY,ypBACZC,KAAgB,2rBAEhBC,KAAc,oEAEdC,KAAiB,0EAMjBC,KAAkB,qMAClBC,KAAY,IAAI,OAAO,IAAID,EAAe,GAAG;AACnD,SAASE,GAAgBr5B,GAAM;AAC3B,MAAIs5B,IAAqB;AACzB,EAAIt5B,EAAK,YACLs5B,IAAqB,GAAGA,CAAkB,UAAUt5B,EAAK,SAAS,MAE7DA,EAAK,aAAa,SACvBs5B,IAAqB,GAAGA,CAAkB;AAE9C,QAAMC,IAAoBv5B,EAAK,YAAY,MAAM;AACjD,SAAO,8BAA8Bs5B,CAAkB,IAAIC,CAAiB;AAChF;AACA,SAASC,GAAUx5B,GAAM;AACrB,SAAO,IAAI,OAAO,IAAIq5B,GAAgBr5B,CAAI,CAAC,GAAG;AAClD;AAEO,SAASy5B,GAAcz5B,GAAM;AAChC,MAAI05B,IAAQ,GAAGP,EAAe,IAAIE,GAAgBr5B,CAAI,CAAC;AACvD,QAAM25B,IAAO,CAAA;AACb,SAAAA,EAAK,KAAK35B,EAAK,QAAQ,OAAO,GAAG,GAC7BA,EAAK,UACL25B,EAAK,KAAK,sBAAsB,GACpCD,IAAQ,GAAGA,CAAK,IAAIC,EAAK,KAAK,GAAG,CAAC,KAC3B,IAAI,OAAO,IAAID,CAAK,GAAG;AAClC;AACA,SAASE,GAAUC,GAAIC,GAAS;AAI5B,SAHK,IAAAA,MAAY,QAAQ,CAACA,MAAYjB,GAAU,KAAKgB,CAAE,MAGlDC,MAAY,QAAQ,CAACA,MAAYf,GAAU,KAAKc,CAAE;AAI3D;AACA,SAASE,GAAWC,GAAKC,GAAK;AAC1B,MAAI,CAACzB,GAAS,KAAKwB,CAAG;AAClB,WAAO;AACX,MAAI;AACA,UAAM,CAACE,CAAM,IAAIF,EAAI,MAAM,GAAG;AAC9B,QAAI,CAACE;AACD,aAAO;AAEX,UAAMC,IAASD,EACV,QAAQ,MAAM,GAAG,EACjB,QAAQ,MAAM,GAAG,EACjB,OAAOA,EAAO,UAAW,IAAKA,EAAO,SAAS,KAAM,GAAI,GAAG,GAC1DE,IAAU,KAAK,MAAM,KAAKD,CAAM,CAAC;AAOvC,WANI,SAAOC,KAAY,YAAYA,MAAY,QAE3C,SAASA,MAAWA,KAAA,gBAAAA,EAAS,SAAQ,SAErC,CAACA,EAAQ,OAETH,KAAOG,EAAQ,QAAQH;AAAA,EAG/B,QACM;AACF,WAAO;AAAA,EACX;AACJ;AACA,SAASI,GAAYR,GAAIC,GAAS;AAI9B,SAHK,IAAAA,MAAY,QAAQ,CAACA,MAAYhB,GAAc,KAAKe,CAAE,MAGtDC,MAAY,QAAQ,CAACA,MAAYd,GAAc,KAAKa,CAAE;AAI/D;AACO,MAAMS,WAAkB/D,GAAQ;AAAA,EACnC,OAAOC,GAAO;AAKV,QAJI,KAAK,KAAK,WACVA,EAAM,OAAO,OAAOA,EAAM,IAAI,IAEf,KAAK,SAASA,CAAK,MACnB3D,GAAc,QAAQ;AACrC,YAAMiC,IAAM,KAAK,gBAAgB0B,CAAK;AACtC,aAAA3B,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,UAAUF,GAAc;AAAA,QACxB,UAAUiC,EAAI;AAAA,MAC9B,CAAa,GACMM;AAAA,IACX;AACA,UAAMH,IAAS,IAAID,GAAW;AAC9B,QAAIF;AACJ,eAAW4B,KAAS,KAAK,KAAK;AAC1B,UAAIA,EAAM,SAAS;AACf,QAAIF,EAAM,KAAK,SAASE,EAAM,UAC1B5B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,UACnB,MAAM/B,GAAa;AAAA,UACnB,SAAS2D,EAAM;AAAA,UACf,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAASA,EAAM;AAAA,QACvC,CAAqB,GACDzB,EAAO,MAAK;AAAA,eAGXyB,EAAM,SAAS;AACpB,QAAIF,EAAM,KAAK,SAASE,EAAM,UAC1B5B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,UACnB,MAAM/B,GAAa;AAAA,UACnB,SAAS2D,EAAM;AAAA,UACf,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAASA,EAAM;AAAA,QACvC,CAAqB,GACDzB,EAAO,MAAK;AAAA,eAGXyB,EAAM,SAAS,UAAU;AAC9B,cAAM6D,IAAS/D,EAAM,KAAK,SAASE,EAAM,OACnC8D,IAAWhE,EAAM,KAAK,SAASE,EAAM;AAC3C,SAAI6D,KAAUC,OACV1F,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACjCyF,IACA1F,GAAkBC,GAAK;AAAA,UACnB,MAAM/B,GAAa;AAAA,UACnB,SAAS2D,EAAM;AAAA,UACf,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAASA,EAAM;AAAA,QAC3C,CAAyB,IAEI8D,KACL3F,GAAkBC,GAAK;AAAA,UACnB,MAAM/B,GAAa;AAAA,UACnB,SAAS2D,EAAM;AAAA,UACf,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAASA,EAAM;AAAA,QAC3C,CAAyB,GAELzB,EAAO,MAAK;AAAA,MAEpB,WACSyB,EAAM,SAAS;AACpB,QAAKgC,GAAW,KAAKlC,EAAM,IAAI,MAC3B1B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,UACnB,YAAY;AAAA,UACZ,MAAM/B,GAAa;AAAA,UACnB,SAAS2D,EAAM;AAAA,QACvC,CAAqB,GACDzB,EAAO,MAAK;AAAA,eAGXyB,EAAM,SAAS;AACpB,QAAKkC,OACDA,KAAa,IAAI,OAAOD,IAAa,GAAG,IAEvCC,GAAW,KAAKpC,EAAM,IAAI,MAC3B1B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,UACnB,YAAY;AAAA,UACZ,MAAM/B,GAAa;AAAA,UACnB,SAAS2D,EAAM;AAAA,QACvC,CAAqB,GACDzB,EAAO,MAAK;AAAA,eAGXyB,EAAM,SAAS;AACpB,QAAK4B,GAAU,KAAK9B,EAAM,IAAI,MAC1B1B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,UACnB,YAAY;AAAA,UACZ,MAAM/B,GAAa;AAAA,UACnB,SAAS2D,EAAM;AAAA,QACvC,CAAqB,GACDzB,EAAO,MAAK;AAAA,eAGXyB,EAAM,SAAS;AACpB,QAAK6B,GAAY,KAAK/B,EAAM,IAAI,MAC5B1B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,UACnB,YAAY;AAAA,UACZ,MAAM/B,GAAa;AAAA,UACnB,SAAS2D,EAAM;AAAA,QACvC,CAAqB,GACDzB,EAAO,MAAK;AAAA,eAGXyB,EAAM,SAAS;AACpB,QAAKyB,GAAU,KAAK3B,EAAM,IAAI,MAC1B1B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,UACnB,YAAY;AAAA,UACZ,MAAM/B,GAAa;AAAA,UACnB,SAAS2D,EAAM;AAAA,QACvC,CAAqB,GACDzB,EAAO,MAAK;AAAA,eAGXyB,EAAM,SAAS;AACpB,QAAK0B,GAAW,KAAK5B,EAAM,IAAI,MAC3B1B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,UACnB,YAAY;AAAA,UACZ,MAAM/B,GAAa;AAAA,UACnB,SAAS2D,EAAM;AAAA,QACvC,CAAqB,GACDzB,EAAO,MAAK;AAAA,eAGXyB,EAAM,SAAS;AACpB,QAAK2B,GAAU,KAAK7B,EAAM,IAAI,MAC1B1B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,UACnB,YAAY;AAAA,UACZ,MAAM/B,GAAa;AAAA,UACnB,SAAS2D,EAAM;AAAA,QACvC,CAAqB,GACDzB,EAAO,MAAK;AAAA,eAGXyB,EAAM,SAAS;AACpB,YAAI;AACA,cAAI,IAAIF,EAAM,IAAI;AAAA,QACtB,QACM;AACF,UAAA1B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM/B,GAAa;AAAA,YACnB,SAAS2D,EAAM;AAAA,UACvC,CAAqB,GACDzB,EAAO,MAAK;AAAA,QAChB;AAAA,UAEC,CAAIyB,EAAM,SAAS,WACpBA,EAAM,MAAM,YAAY,GACLA,EAAM,MAAM,KAAKF,EAAM,IAAI,MAE1C1B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,YAAY;AAAA,QACZ,MAAM/B,GAAa;AAAA,QACnB,SAAS2D,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,MAGXyB,EAAM,SAAS,SACpBF,EAAM,OAAOA,EAAM,KAAK,KAAI,IAEvBE,EAAM,SAAS,aACfF,EAAM,KAAK,SAASE,EAAM,OAAOA,EAAM,QAAQ,MAChD5B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,YAAY,EAAE,UAAU2D,EAAM,OAAO,UAAUA,EAAM,SAAQ;AAAA,QAC7D,SAASA,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,gBACpBF,EAAM,OAAOA,EAAM,KAAK,YAAW,IAE9BE,EAAM,SAAS,gBACpBF,EAAM,OAAOA,EAAM,KAAK,YAAW,IAE9BE,EAAM,SAAS,eACfF,EAAM,KAAK,WAAWE,EAAM,KAAK,MAClC5B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,YAAY,EAAE,YAAY2D,EAAM,MAAK;AAAA,QACrC,SAASA,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,aACfF,EAAM,KAAK,SAASE,EAAM,KAAK,MAChC5B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,YAAY,EAAE,UAAU2D,EAAM,MAAK;AAAA,QACnC,SAASA,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,aACN+C,GAAc/C,CAAK,EACtB,KAAKF,EAAM,IAAI,MACtB1B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,YAAY;AAAA,QACZ,SAAS2D,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,SACN0C,GACH,KAAK5C,EAAM,IAAI,MACtB1B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,YAAY;AAAA,QACZ,SAAS2D,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,SACN8C,GAAU9C,CAAK,EAClB,KAAKF,EAAM,IAAI,MACtB1B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,YAAY;AAAA,QACZ,SAAS2D,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,aACf+B,GAAc,KAAKjC,EAAM,IAAI,MAC9B1B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,YAAY;AAAA,QACZ,MAAM/B,GAAa;AAAA,QACnB,SAAS2D,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,OACfkD,GAAUpD,EAAM,MAAME,EAAM,OAAO,MACpC5B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,YAAY;AAAA,QACZ,MAAM/B,GAAa;AAAA,QACnB,SAAS2D,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,QACfqD,GAAWvD,EAAM,MAAME,EAAM,GAAG,MACjC5B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,YAAY;AAAA,QACZ,MAAM/B,GAAa;AAAA,QACnB,SAAS2D,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,SACf2D,GAAY7D,EAAM,MAAME,EAAM,OAAO,MACtC5B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,YAAY;AAAA,QACZ,MAAM/B,GAAa;AAAA,QACnB,SAAS2D,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,WACfuC,GAAY,KAAKzC,EAAM,IAAI,MAC5B1B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,YAAY;AAAA,QACZ,MAAM/B,GAAa;AAAA,QACnB,SAAS2D,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,cACfwC,GAAe,KAAK1C,EAAM,IAAI,MAC/B1B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,YAAY;AAAA,QACZ,MAAM/B,GAAa;AAAA,QACnB,SAAS2D,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAIhBpD,GAAK,YAAY6E,CAAK;AAG9B,WAAO,EAAE,QAAQzB,EAAO,OAAO,OAAOuB,EAAM,KAAI;AAAA,EACpD;AAAA,EACA,OAAOkD,GAAOe,GAAYzG,GAAS;AAC/B,WAAO,KAAK,WAAW,CAACvpB,MAASivB,EAAM,KAAKjvB,CAAI,GAAG;AAAA,MAC/C,YAAAgwB;AAAA,MACA,MAAM1H,GAAa;AAAA,MACnB,GAAGgD,GAAU,SAAS/B,CAAO;AAAA,IACzC,CAAS;AAAA,EACL;AAAA,EACA,UAAU0C,GAAO;AACb,WAAO,IAAI4D,GAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ5D,CAAK;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,MAAM1C,GAAS;AACX,WAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG+B,GAAU,SAAS/B,CAAO,GAAG;AAAA,EAC3E;AAAA,EACA,IAAIA,GAAS;AACT,WAAO,KAAK,UAAU,EAAE,MAAM,OAAO,GAAG+B,GAAU,SAAS/B,CAAO,GAAG;AAAA,EACzE;AAAA,EACA,MAAMA,GAAS;AACX,WAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG+B,GAAU,SAAS/B,CAAO,GAAG;AAAA,EAC3E;AAAA,EACA,KAAKA,GAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG+B,GAAU,SAAS/B,CAAO,GAAG;AAAA,EAC1E;AAAA,EACA,OAAOA,GAAS;AACZ,WAAO,KAAK,UAAU,EAAE,MAAM,UAAU,GAAG+B,GAAU,SAAS/B,CAAO,GAAG;AAAA,EAC5E;AAAA,EACA,KAAKA,GAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG+B,GAAU,SAAS/B,CAAO,GAAG;AAAA,EAC1E;AAAA,EACA,MAAMA,GAAS;AACX,WAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG+B,GAAU,SAAS/B,CAAO,GAAG;AAAA,EAC3E;AAAA,EACA,KAAKA,GAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG+B,GAAU,SAAS/B,CAAO,GAAG;AAAA,EAC1E;AAAA,EACA,OAAOA,GAAS;AACZ,WAAO,KAAK,UAAU,EAAE,MAAM,UAAU,GAAG+B,GAAU,SAAS/B,CAAO,GAAG;AAAA,EAC5E;AAAA,EACA,UAAUA,GAAS;AAEf,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,GAAG+B,GAAU,SAAS/B,CAAO;AAAA,IACzC,CAAS;AAAA,EACL;AAAA,EACA,IAAI0G,GAAS;AACT,WAAO,KAAK,UAAU,EAAE,MAAM,OAAO,GAAG3E,GAAU,SAAS2E,CAAO,GAAG;AAAA,EACzE;AAAA,EACA,GAAGA,GAAS;AACR,WAAO,KAAK,UAAU,EAAE,MAAM,MAAM,GAAG3E,GAAU,SAAS2E,CAAO,GAAG;AAAA,EACxE;AAAA,EACA,KAAKA,GAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG3E,GAAU,SAAS2E,CAAO,GAAG;AAAA,EAC1E;AAAA,EACA,SAASA,GAAS;AACd,WAAI,OAAOA,KAAY,WACZ,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAASA;AAAA,IACzB,CAAa,IAEE,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,WAAW,QAAOA,KAAA,gBAAAA,EAAS,aAAc,MAAc,OAAOA,KAAA,gBAAAA,EAAS;AAAA,MACvE,SAAQA,KAAA,gBAAAA,EAAS,WAAU;AAAA,MAC3B,QAAOA,KAAA,gBAAAA,EAAS,UAAS;AAAA,MACzB,GAAG3E,GAAU,SAAS2E,KAAA,gBAAAA,EAAS,OAAO;AAAA,IAClD,CAAS;AAAA,EACL;AAAA,EACA,KAAK1G,GAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,SAAAA,EAAO,CAAE;AAAA,EACnD;AAAA,EACA,KAAK0G,GAAS;AACV,WAAI,OAAOA,KAAY,WACZ,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,SAASA;AAAA,IACzB,CAAa,IAEE,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,WAAW,QAAOA,KAAA,gBAAAA,EAAS,aAAc,MAAc,OAAOA,KAAA,gBAAAA,EAAS;AAAA,MACvE,GAAG3E,GAAU,SAAS2E,KAAA,gBAAAA,EAAS,OAAO;AAAA,IAClD,CAAS;AAAA,EACL;AAAA,EACA,SAAS1G,GAAS;AACd,WAAO,KAAK,UAAU,EAAE,MAAM,YAAY,GAAG+B,GAAU,SAAS/B,CAAO,GAAG;AAAA,EAC9E;AAAA,EACA,MAAM0F,GAAO1F,GAAS;AAClB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO0F;AAAA,MACP,GAAG3D,GAAU,SAAS/B,CAAO;AAAA,IACzC,CAAS;AAAA,EACL;AAAA,EACA,SAASruB,GAAO+0B,GAAS;AACrB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO/0B;AAAA,MACP,UAAU+0B,KAAA,gBAAAA,EAAS;AAAA,MACnB,GAAG3E,GAAU,SAAS2E,KAAA,gBAAAA,EAAS,OAAO;AAAA,IAClD,CAAS;AAAA,EACL;AAAA,EACA,WAAW/0B,GAAOquB,GAAS;AACvB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAOruB;AAAA,MACP,GAAGowB,GAAU,SAAS/B,CAAO;AAAA,IACzC,CAAS;AAAA,EACL;AAAA,EACA,SAASruB,GAAOquB,GAAS;AACrB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAOruB;AAAA,MACP,GAAGowB,GAAU,SAAS/B,CAAO;AAAA,IACzC,CAAS;AAAA,EACL;AAAA,EACA,IAAI2G,GAAW3G,GAAS;AACpB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO2G;AAAA,MACP,GAAG5E,GAAU,SAAS/B,CAAO;AAAA,IACzC,CAAS;AAAA,EACL;AAAA,EACA,IAAI4G,GAAW5G,GAAS;AACpB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO4G;AAAA,MACP,GAAG7E,GAAU,SAAS/B,CAAO;AAAA,IACzC,CAAS;AAAA,EACL;AAAA,EACA,OAAO6G,GAAK7G,GAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO6G;AAAA,MACP,GAAG9E,GAAU,SAAS/B,CAAO;AAAA,IACzC,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,SAASA,GAAS;AACd,WAAO,KAAK,IAAI,GAAG+B,GAAU,SAAS/B,CAAO,CAAC;AAAA,EAClD;AAAA,EACA,OAAO;AACH,WAAO,IAAIsG,GAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,QAAQ;AAAA,IAC1D,CAAS;AAAA,EACL;AAAA,EACA,cAAc;AACV,WAAO,IAAIA,GAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,eAAe;AAAA,IACjE,CAAS;AAAA,EACL;AAAA,EACA,cAAc;AACV,WAAO,IAAIA,GAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,eAAe;AAAA,IACjE,CAAS;AAAA,EACL;AAAA,EACA,IAAI,aAAa;AACb,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAACQ,MAAOA,EAAG,SAAS,UAAU;AAAA,EACjE;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAACA,MAAOA,EAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAACA,MAAOA,EAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,aAAa;AACb,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAACA,MAAOA,EAAG,SAAS,UAAU;AAAA,EACjE;AAAA,EACA,IAAI,UAAU;AACV,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAACA,MAAOA,EAAG,SAAS,OAAO;AAAA,EAC9D;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAACA,MAAOA,EAAG,SAAS,KAAK;AAAA,EAC5D;AAAA,EACA,IAAI,UAAU;AACV,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAACA,MAAOA,EAAG,SAAS,OAAO;AAAA,EAC9D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAACA,MAAOA,EAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,WAAW;AACX,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAACA,MAAOA,EAAG,SAAS,QAAQ;AAAA,EAC/D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAACA,MAAOA,EAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,UAAU;AACV,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAACA,MAAOA,EAAG,SAAS,OAAO;AAAA,EAC9D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAACA,MAAOA,EAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,OAAO;AACP,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAACA,MAAOA,EAAG,SAAS,IAAI;AAAA,EAC3D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAACA,MAAOA,EAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,WAAW;AACX,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAACA,MAAOA,EAAG,SAAS,QAAQ;AAAA,EAC/D;AAAA,EACA,IAAI,cAAc;AAEd,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAACA,MAAOA,EAAG,SAAS,WAAW;AAAA,EAClE;AAAA,EACA,IAAI,YAAY;AACZ,QAAIC,IAAM;AACV,eAAWD,KAAM,KAAK,KAAK;AACvB,MAAIA,EAAG,SAAS,UACRC,MAAQ,QAAQD,EAAG,QAAQC,OAC3BA,IAAMD,EAAG;AAGrB,WAAOC;AAAA,EACX;AAAA,EACA,IAAI,YAAY;AACZ,QAAIC,IAAM;AACV,eAAWF,KAAM,KAAK,KAAK;AACvB,MAAIA,EAAG,SAAS,UACRE,MAAQ,QAAQF,EAAG,QAAQE,OAC3BA,IAAMF,EAAG;AAGrB,WAAOE;AAAA,EACX;AACJ;AACAV,GAAU,SAAS,CAACjG,MACT,IAAIiG,GAAU;AAAA,EACjB,QAAQ,CAAA;AAAA,EACR,UAAUvD,GAAsB;AAAA,EAChC,SAAQ1C,KAAA,gBAAAA,EAAQ,WAAU;AAAA,EAC1B,GAAG6B,GAAoB7B,CAAM;AACrC,CAAK;AAGL,SAAS4G,GAAmBzI,GAAK7pB,GAAM;AACnC,QAAMuyB,KAAe1I,EAAI,SAAQ,EAAG,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI,QACnD2I,KAAgBxyB,EAAK,SAAQ,EAAG,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI,QACrDyyB,IAAWF,IAAcC,IAAeD,IAAcC,GACtDE,IAAS,OAAO,SAAS7I,EAAI,QAAQ4I,CAAQ,EAAE,QAAQ,KAAK,EAAE,CAAC,GAC/DE,IAAU,OAAO,SAAS3yB,EAAK,QAAQyyB,CAAQ,EAAE,QAAQ,KAAK,EAAE,CAAC;AACvE,SAAQC,IAASC,IAAW,MAAMF;AACtC;AACO,MAAMG,WAAkBhF,GAAQ;AAAA,EACnC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,MAAM,KAAK,KAChB,KAAK,MAAM,KAAK,KAChB,KAAK,OAAO,KAAK;AAAA,EACrB;AAAA,EACA,OAAOC,GAAO;AAKV,QAJI,KAAK,KAAK,WACVA,EAAM,OAAO,OAAOA,EAAM,IAAI,IAEf,KAAK,SAASA,CAAK,MACnB3D,GAAc,QAAQ;AACrC,YAAMiC,IAAM,KAAK,gBAAgB0B,CAAK;AACtC,aAAA3B,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,UAAUF,GAAc;AAAA,QACxB,UAAUiC,EAAI;AAAA,MAC9B,CAAa,GACMM;AAAA,IACX;AACA,QAAIN;AACJ,UAAMG,IAAS,IAAID,GAAW;AAC9B,eAAW0B,KAAS,KAAK,KAAK;AAC1B,MAAIA,EAAM,SAAS,QACV7E,GAAK,UAAU2E,EAAM,IAAI,MAC1B1B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,UAAU;AAAA,QACV,UAAU;AAAA,QACV,SAAS2D,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,SACHA,EAAM,YAAYF,EAAM,OAAOE,EAAM,QAAQF,EAAM,QAAQE,EAAM,WAE9E5B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,SAAS2D,EAAM;AAAA,QACf,MAAM;AAAA,QACN,WAAWA,EAAM;AAAA,QACjB,OAAO;AAAA,QACP,SAASA,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,SACLA,EAAM,YAAYF,EAAM,OAAOE,EAAM,QAAQF,EAAM,QAAQE,EAAM,WAE5E5B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,SAAS2D,EAAM;AAAA,QACf,MAAM;AAAA,QACN,WAAWA,EAAM;AAAA,QACjB,OAAO;AAAA,QACP,SAASA,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,eAChBuE,GAAmBzE,EAAM,MAAME,EAAM,KAAK,MAAM,MAChD5B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,YAAY2D,EAAM;AAAA,QAClB,SAASA,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,WACf,OAAO,SAASF,EAAM,IAAI,MAC3B1B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,SAAS2D,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAIhBpD,GAAK,YAAY6E,CAAK;AAG9B,WAAO,EAAE,QAAQzB,EAAO,OAAO,OAAOuB,EAAM,KAAI;AAAA,EACpD;AAAA,EACA,IAAI7wB,GAAOquB,GAAS;AAChB,WAAO,KAAK,SAAS,OAAOruB,GAAO,IAAMowB,GAAU,SAAS/B,CAAO,CAAC;AAAA,EACxE;AAAA,EACA,GAAGruB,GAAOquB,GAAS;AACf,WAAO,KAAK,SAAS,OAAOruB,GAAO,IAAOowB,GAAU,SAAS/B,CAAO,CAAC;AAAA,EACzE;AAAA,EACA,IAAIruB,GAAOquB,GAAS;AAChB,WAAO,KAAK,SAAS,OAAOruB,GAAO,IAAMowB,GAAU,SAAS/B,CAAO,CAAC;AAAA,EACxE;AAAA,EACA,GAAGruB,GAAOquB,GAAS;AACf,WAAO,KAAK,SAAS,OAAOruB,GAAO,IAAOowB,GAAU,SAAS/B,CAAO,CAAC;AAAA,EACzE;AAAA,EACA,SAASwH,GAAM71B,GAAO81B,GAAWzH,GAAS;AACtC,WAAO,IAAIuH,GAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ;AAAA,QACJ,GAAG,KAAK,KAAK;AAAA,QACb;AAAA,UACI,MAAAC;AAAA,UACA,OAAA71B;AAAA,UACA,WAAA81B;AAAA,UACA,SAAS1F,GAAU,SAAS/B,CAAO;AAAA,QACvD;AAAA,MACA;AAAA,IACA,CAAS;AAAA,EACL;AAAA,EACA,UAAU0C,GAAO;AACb,WAAO,IAAI6E,GAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ7E,CAAK;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,IAAI1C,GAAS;AACT,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,SAAS+B,GAAU,SAAS/B,CAAO;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,SAASA,GAAS;AACd,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS+B,GAAU,SAAS/B,CAAO;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,SAASA,GAAS;AACd,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS+B,GAAU,SAAS/B,CAAO;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,YAAYA,GAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS+B,GAAU,SAAS/B,CAAO;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,YAAYA,GAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS+B,GAAU,SAAS/B,CAAO;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,WAAWruB,GAAOquB,GAAS;AACvB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAOruB;AAAA,MACP,SAASowB,GAAU,SAAS/B,CAAO;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,OAAOA,GAAS;AACZ,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,SAAS+B,GAAU,SAAS/B,CAAO;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,KAAKA,GAAS;AACV,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO,OAAO;AAAA,MACd,SAAS+B,GAAU,SAAS/B,CAAO;AAAA,IAC/C,CAAS,EAAE,UAAU;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO,OAAO;AAAA,MACd,SAAS+B,GAAU,SAAS/B,CAAO;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,IAAI,WAAW;AACX,QAAI+G,IAAM;AACV,eAAWD,KAAM,KAAK,KAAK;AACvB,MAAIA,EAAG,SAAS,UACRC,MAAQ,QAAQD,EAAG,QAAQC,OAC3BA,IAAMD,EAAG;AAGrB,WAAOC;AAAA,EACX;AAAA,EACA,IAAI,WAAW;AACX,QAAIC,IAAM;AACV,eAAWF,KAAM,KAAK,KAAK;AACvB,MAAIA,EAAG,SAAS,UACRE,MAAQ,QAAQF,EAAG,QAAQE,OAC3BA,IAAMF,EAAG;AAGrB,WAAOE;AAAA,EACX;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAACF,MAAOA,EAAG,SAAS,SAAUA,EAAG,SAAS,gBAAgBjJ,GAAK,UAAUiJ,EAAG,KAAK,CAAE;AAAA,EACtH;AAAA,EACA,IAAI,WAAW;AACX,QAAIE,IAAM,MACND,IAAM;AACV,eAAWD,KAAM,KAAK,KAAK,QAAQ;AAC/B,UAAIA,EAAG,SAAS,YAAYA,EAAG,SAAS,SAASA,EAAG,SAAS;AACzD,eAAO;AAEN,MAAIA,EAAG,SAAS,SACbC,MAAQ,QAAQD,EAAG,QAAQC,OAC3BA,IAAMD,EAAG,SAERA,EAAG,SAAS,UACbE,MAAQ,QAAQF,EAAG,QAAQE,OAC3BA,IAAMF,EAAG;AAAA,IAErB;AACA,WAAO,OAAO,SAASC,CAAG,KAAK,OAAO,SAASC,CAAG;AAAA,EACtD;AACJ;AACAO,GAAU,SAAS,CAAClH,MACT,IAAIkH,GAAU;AAAA,EACjB,QAAQ,CAAA;AAAA,EACR,UAAUxE,GAAsB;AAAA,EAChC,SAAQ1C,KAAA,gBAAAA,EAAQ,WAAU;AAAA,EAC1B,GAAG6B,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAMqH,WAAkBnF,GAAQ;AAAA,EACnC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,MAAM,KAAK,KAChB,KAAK,MAAM,KAAK;AAAA,EACpB;AAAA,EACA,OAAOC,GAAO;AACV,QAAI,KAAK,KAAK;AACV,UAAI;AACA,QAAAA,EAAM,OAAO,OAAOA,EAAM,IAAI;AAAA,MAClC,QACM;AACF,eAAO,KAAK,iBAAiBA,CAAK;AAAA,MACtC;AAGJ,QADmB,KAAK,SAASA,CAAK,MACnB3D,GAAc;AAC7B,aAAO,KAAK,iBAAiB2D,CAAK;AAEtC,QAAI1B;AACJ,UAAMG,IAAS,IAAID,GAAW;AAC9B,eAAW0B,KAAS,KAAK,KAAK;AAC1B,MAAIA,EAAM,SAAS,SACEA,EAAM,YAAYF,EAAM,OAAOE,EAAM,QAAQF,EAAM,QAAQE,EAAM,WAE9E5B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,MAAM;AAAA,QACN,SAAS2D,EAAM;AAAA,QACf,WAAWA,EAAM;AAAA,QACjB,SAASA,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,SACLA,EAAM,YAAYF,EAAM,OAAOE,EAAM,QAAQF,EAAM,QAAQE,EAAM,WAE5E5B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,MAAM;AAAA,QACN,SAAS2D,EAAM;AAAA,QACf,WAAWA,EAAM;AAAA,QACjB,SAASA,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,eAChBF,EAAM,OAAOE,EAAM,UAAU,OAAO,CAAC,MACrC5B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,YAAY2D,EAAM;AAAA,QAClB,SAASA,EAAM;AAAA,MACvC,CAAqB,GACDzB,EAAO,MAAK,KAIhBpD,GAAK,YAAY6E,CAAK;AAG9B,WAAO,EAAE,QAAQzB,EAAO,OAAO,OAAOuB,EAAM,KAAI;AAAA,EACpD;AAAA,EACA,iBAAiBA,GAAO;AACpB,UAAM1B,IAAM,KAAK,gBAAgB0B,CAAK;AACtC,WAAA3B,GAAkBC,GAAK;AAAA,MACnB,MAAM/B,GAAa;AAAA,MACnB,UAAUF,GAAc;AAAA,MACxB,UAAUiC,EAAI;AAAA,IAC1B,CAAS,GACMM;AAAA,EACX;AAAA,EACA,IAAIzvB,GAAOquB,GAAS;AAChB,WAAO,KAAK,SAAS,OAAOruB,GAAO,IAAMowB,GAAU,SAAS/B,CAAO,CAAC;AAAA,EACxE;AAAA,EACA,GAAGruB,GAAOquB,GAAS;AACf,WAAO,KAAK,SAAS,OAAOruB,GAAO,IAAOowB,GAAU,SAAS/B,CAAO,CAAC;AAAA,EACzE;AAAA,EACA,IAAIruB,GAAOquB,GAAS;AAChB,WAAO,KAAK,SAAS,OAAOruB,GAAO,IAAMowB,GAAU,SAAS/B,CAAO,CAAC;AAAA,EACxE;AAAA,EACA,GAAGruB,GAAOquB,GAAS;AACf,WAAO,KAAK,SAAS,OAAOruB,GAAO,IAAOowB,GAAU,SAAS/B,CAAO,CAAC;AAAA,EACzE;AAAA,EACA,SAASwH,GAAM71B,GAAO81B,GAAWzH,GAAS;AACtC,WAAO,IAAI0H,GAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ;AAAA,QACJ,GAAG,KAAK,KAAK;AAAA,QACb;AAAA,UACI,MAAAF;AAAA,UACA,OAAA71B;AAAA,UACA,WAAA81B;AAAA,UACA,SAAS1F,GAAU,SAAS/B,CAAO;AAAA,QACvD;AAAA,MACA;AAAA,IACA,CAAS;AAAA,EACL;AAAA,EACA,UAAU0C,GAAO;AACb,WAAO,IAAIgF,GAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQhF,CAAK;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,SAAS1C,GAAS;AACd,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,OAAO,CAAC;AAAA,MACf,WAAW;AAAA,MACX,SAAS+B,GAAU,SAAS/B,CAAO;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,SAASA,GAAS;AACd,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,OAAO,CAAC;AAAA,MACf,WAAW;AAAA,MACX,SAAS+B,GAAU,SAAS/B,CAAO;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,YAAYA,GAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,OAAO,CAAC;AAAA,MACf,WAAW;AAAA,MACX,SAAS+B,GAAU,SAAS/B,CAAO;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,YAAYA,GAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,OAAO,CAAC;AAAA,MACf,WAAW;AAAA,MACX,SAAS+B,GAAU,SAAS/B,CAAO;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,WAAWruB,GAAOquB,GAAS;AACvB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAAruB;AAAA,MACA,SAASowB,GAAU,SAAS/B,CAAO;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,IAAI,WAAW;AACX,QAAI+G,IAAM;AACV,eAAWD,KAAM,KAAK,KAAK;AACvB,MAAIA,EAAG,SAAS,UACRC,MAAQ,QAAQD,EAAG,QAAQC,OAC3BA,IAAMD,EAAG;AAGrB,WAAOC;AAAA,EACX;AAAA,EACA,IAAI,WAAW;AACX,QAAIC,IAAM;AACV,eAAWF,KAAM,KAAK,KAAK;AACvB,MAAIA,EAAG,SAAS,UACRE,MAAQ,QAAQF,EAAG,QAAQE,OAC3BA,IAAMF,EAAG;AAGrB,WAAOE;AAAA,EACX;AACJ;AACAU,GAAU,SAAS,CAACrH,MACT,IAAIqH,GAAU;AAAA,EACjB,QAAQ,CAAA;AAAA,EACR,UAAU3E,GAAsB;AAAA,EAChC,SAAQ1C,KAAA,gBAAAA,EAAQ,WAAU;AAAA,EAC1B,GAAG6B,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAMsH,WAAmBpF,GAAQ;AAAA,EACpC,OAAOC,GAAO;AAKV,QAJI,KAAK,KAAK,WACVA,EAAM,OAAO,EAAQA,EAAM,OAEZ,KAAK,SAASA,CAAK,MACnB3D,GAAc,SAAS;AACtC,YAAMiC,IAAM,KAAK,gBAAgB0B,CAAK;AACtC,aAAA3B,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,UAAUF,GAAc;AAAA,QACxB,UAAUiC,EAAI;AAAA,MAC9B,CAAa,GACMM;AAAA,IACX;AACA,WAAOM,GAAGc,EAAM,IAAI;AAAA,EACxB;AACJ;AACAmF,GAAW,SAAS,CAACtH,MACV,IAAIsH,GAAW;AAAA,EAClB,UAAU5E,GAAsB;AAAA,EAChC,SAAQ1C,KAAA,gBAAAA,EAAQ,WAAU;AAAA,EAC1B,GAAG6B,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAMuH,WAAgBrF,GAAQ;AAAA,EACjC,OAAOC,GAAO;AAKV,QAJI,KAAK,KAAK,WACVA,EAAM,OAAO,IAAI,KAAKA,EAAM,IAAI,IAEjB,KAAK,SAASA,CAAK,MACnB3D,GAAc,MAAM;AACnC,YAAMiC,IAAM,KAAK,gBAAgB0B,CAAK;AACtC,aAAA3B,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,UAAUF,GAAc;AAAA,QACxB,UAAUiC,EAAI;AAAA,MAC9B,CAAa,GACMM;AAAA,IACX;AACA,QAAI,OAAO,MAAMoB,EAAM,KAAK,QAAO,CAAE,GAAG;AACpC,YAAM1B,IAAM,KAAK,gBAAgB0B,CAAK;AACtC,aAAA3B,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,MACnC,CAAa,GACMqC;AAAA,IACX;AACA,UAAMH,IAAS,IAAID,GAAW;AAC9B,QAAIF;AACJ,eAAW4B,KAAS,KAAK,KAAK;AAC1B,MAAIA,EAAM,SAAS,QACXF,EAAM,KAAK,QAAO,IAAKE,EAAM,UAC7B5B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,SAAS2D,EAAM;AAAA,QACf,WAAW;AAAA,QACX,OAAO;AAAA,QACP,SAASA,EAAM;AAAA,QACf,MAAM;AAAA,MAC9B,CAAqB,GACDzB,EAAO,MAAK,KAGXyB,EAAM,SAAS,QAChBF,EAAM,KAAK,QAAO,IAAKE,EAAM,UAC7B5B,IAAM,KAAK,gBAAgB0B,GAAO1B,CAAG,GACrCD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,SAAS2D,EAAM;AAAA,QACf,WAAW;AAAA,QACX,OAAO;AAAA,QACP,SAASA,EAAM;AAAA,QACf,MAAM;AAAA,MAC9B,CAAqB,GACDzB,EAAO,MAAK,KAIhBpD,GAAK,YAAY6E,CAAK;AAG9B,WAAO;AAAA,MACH,QAAQzB,EAAO;AAAA,MACf,OAAO,IAAI,KAAKuB,EAAM,KAAK,QAAO,CAAE;AAAA,IAChD;AAAA,EACI;AAAA,EACA,UAAUE,GAAO;AACb,WAAO,IAAIkF,GAAQ;AAAA,MACf,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQlF,CAAK;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,IAAImF,GAAS7H,GAAS;AAClB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO6H,EAAQ,QAAO;AAAA,MACtB,SAAS9F,GAAU,SAAS/B,CAAO;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,IAAI8H,GAAS9H,GAAS;AAClB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO8H,EAAQ,QAAO;AAAA,MACtB,SAAS/F,GAAU,SAAS/B,CAAO;AAAA,IAC/C,CAAS;AAAA,EACL;AAAA,EACA,IAAI,UAAU;AACV,QAAI+G,IAAM;AACV,eAAWD,KAAM,KAAK,KAAK;AACvB,MAAIA,EAAG,SAAS,UACRC,MAAQ,QAAQD,EAAG,QAAQC,OAC3BA,IAAMD,EAAG;AAGrB,WAAOC,KAAO,OAAO,IAAI,KAAKA,CAAG,IAAI;AAAA,EACzC;AAAA,EACA,IAAI,UAAU;AACV,QAAIC,IAAM;AACV,eAAWF,KAAM,KAAK,KAAK;AACvB,MAAIA,EAAG,SAAS,UACRE,MAAQ,QAAQF,EAAG,QAAQE,OAC3BA,IAAMF,EAAG;AAGrB,WAAOE,KAAO,OAAO,IAAI,KAAKA,CAAG,IAAI;AAAA,EACzC;AACJ;AACAY,GAAQ,SAAS,CAACvH,MACP,IAAIuH,GAAQ;AAAA,EACf,QAAQ,CAAA;AAAA,EACR,SAAQvH,KAAA,gBAAAA,EAAQ,WAAU;AAAA,EAC1B,UAAU0C,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAM0H,WAAkBxF,GAAQ;AAAA,EACnC,OAAOC,GAAO;AAEV,QADmB,KAAK,SAASA,CAAK,MACnB3D,GAAc,QAAQ;AACrC,YAAMiC,IAAM,KAAK,gBAAgB0B,CAAK;AACtC,aAAA3B,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,UAAUF,GAAc;AAAA,QACxB,UAAUiC,EAAI;AAAA,MAC9B,CAAa,GACMM;AAAA,IACX;AACA,WAAOM,GAAGc,EAAM,IAAI;AAAA,EACxB;AACJ;AACAuF,GAAU,SAAS,CAAC1H,MACT,IAAI0H,GAAU;AAAA,EACjB,UAAUhF,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAM2H,WAAqBzF,GAAQ;AAAA,EACtC,OAAOC,GAAO;AAEV,QADmB,KAAK,SAASA,CAAK,MACnB3D,GAAc,WAAW;AACxC,YAAMiC,IAAM,KAAK,gBAAgB0B,CAAK;AACtC,aAAA3B,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,UAAUF,GAAc;AAAA,QACxB,UAAUiC,EAAI;AAAA,MAC9B,CAAa,GACMM;AAAA,IACX;AACA,WAAOM,GAAGc,EAAM,IAAI;AAAA,EACxB;AACJ;AACAwF,GAAa,SAAS,CAAC3H,MACZ,IAAI2H,GAAa;AAAA,EACpB,UAAUjF,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAM4H,WAAgB1F,GAAQ;AAAA,EACjC,OAAOC,GAAO;AAEV,QADmB,KAAK,SAASA,CAAK,MACnB3D,GAAc,MAAM;AACnC,YAAMiC,IAAM,KAAK,gBAAgB0B,CAAK;AACtC,aAAA3B,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,UAAUF,GAAc;AAAA,QACxB,UAAUiC,EAAI;AAAA,MAC9B,CAAa,GACMM;AAAA,IACX;AACA,WAAOM,GAAGc,EAAM,IAAI;AAAA,EACxB;AACJ;AACAyF,GAAQ,SAAS,CAAC5H,MACP,IAAI4H,GAAQ;AAAA,EACf,UAAUlF,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAM6H,WAAe3F,GAAQ;AAAA,EAChC,cAAc;AACV,UAAM,GAAG,SAAS,GAElB,KAAK,OAAO;AAAA,EAChB;AAAA,EACA,OAAOC,GAAO;AACV,WAAOd,GAAGc,EAAM,IAAI;AAAA,EACxB;AACJ;AACA0F,GAAO,SAAS,CAAC7H,MACN,IAAI6H,GAAO;AAAA,EACd,UAAUnF,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAM8H,WAAmB5F,GAAQ;AAAA,EACpC,cAAc;AACV,UAAM,GAAG,SAAS,GAElB,KAAK,WAAW;AAAA,EACpB;AAAA,EACA,OAAOC,GAAO;AACV,WAAOd,GAAGc,EAAM,IAAI;AAAA,EACxB;AACJ;AACA2F,GAAW,SAAS,CAAC9H,MACV,IAAI8H,GAAW;AAAA,EAClB,UAAUpF,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAM+H,WAAiB7F,GAAQ;AAAA,EAClC,OAAOC,GAAO;AACV,UAAM1B,IAAM,KAAK,gBAAgB0B,CAAK;AACtC,WAAA3B,GAAkBC,GAAK;AAAA,MACnB,MAAM/B,GAAa;AAAA,MACnB,UAAUF,GAAc;AAAA,MACxB,UAAUiC,EAAI;AAAA,IAC1B,CAAS,GACMM;AAAA,EACX;AACJ;AACAgH,GAAS,SAAS,CAAC/H,MACR,IAAI+H,GAAS;AAAA,EAChB,UAAUrF,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAMgI,WAAgB9F,GAAQ;AAAA,EACjC,OAAOC,GAAO;AAEV,QADmB,KAAK,SAASA,CAAK,MACnB3D,GAAc,WAAW;AACxC,YAAMiC,IAAM,KAAK,gBAAgB0B,CAAK;AACtC,aAAA3B,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,UAAUF,GAAc;AAAA,QACxB,UAAUiC,EAAI;AAAA,MAC9B,CAAa,GACMM;AAAA,IACX;AACA,WAAOM,GAAGc,EAAM,IAAI;AAAA,EACxB;AACJ;AACA6F,GAAQ,SAAS,CAAChI,MACP,IAAIgI,GAAQ;AAAA,EACf,UAAUtF,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAM8C,WAAiBZ,GAAQ;AAAA,EAClC,OAAOC,GAAO;AACV,UAAM,EAAE,KAAA1B,GAAK,QAAAG,EAAM,IAAK,KAAK,oBAAoBuB,CAAK,GAChDQ,IAAM,KAAK;AACjB,QAAIlC,EAAI,eAAejC,GAAc;AACjC,aAAAgC,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,UAAUF,GAAc;AAAA,QACxB,UAAUiC,EAAI;AAAA,MAC9B,CAAa,GACMM;AAEX,QAAI4B,EAAI,gBAAgB,MAAM;AAC1B,YAAMuD,IAASzF,EAAI,KAAK,SAASkC,EAAI,YAAY,OAC3CwD,IAAW1F,EAAI,KAAK,SAASkC,EAAI,YAAY;AACnD,OAAIuD,KAAUC,OACV3F,GAAkBC,GAAK;AAAA,QACnB,MAAMyF,IAASxH,GAAa,UAAUA,GAAa;AAAA,QACnD,SAAUyH,IAAWxD,EAAI,YAAY,QAAQ;AAAA,QAC7C,SAAUuD,IAASvD,EAAI,YAAY,QAAQ;AAAA,QAC3C,MAAM;AAAA,QACN,WAAW;AAAA,QACX,OAAO;AAAA,QACP,SAASA,EAAI,YAAY;AAAA,MAC7C,CAAiB,GACD/B,EAAO,MAAK;AAAA,IAEpB;AA2BA,QA1BI+B,EAAI,cAAc,QACdlC,EAAI,KAAK,SAASkC,EAAI,UAAU,UAChCnC,GAAkBC,GAAK;AAAA,MACnB,MAAM/B,GAAa;AAAA,MACnB,SAASiE,EAAI,UAAU;AAAA,MACvB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO;AAAA,MACP,SAASA,EAAI,UAAU;AAAA,IAC3C,CAAiB,GACD/B,EAAO,MAAK,IAGhB+B,EAAI,cAAc,QACdlC,EAAI,KAAK,SAASkC,EAAI,UAAU,UAChCnC,GAAkBC,GAAK;AAAA,MACnB,MAAM/B,GAAa;AAAA,MACnB,SAASiE,EAAI,UAAU;AAAA,MACvB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO;AAAA,MACP,SAASA,EAAI,UAAU;AAAA,IAC3C,CAAiB,GACD/B,EAAO,MAAK,IAGhBH,EAAI,OAAO;AACX,aAAO,QAAQ,IAAI,CAAC,GAAGA,EAAI,IAAI,EAAE,IAAI,CAACv0B,GAAMgI,MACjCyuB,EAAI,KAAK,YAAY,IAAIhB,GAAmBlB,GAAKv0B,GAAMu0B,EAAI,MAAMvsB,CAAC,CAAC,CAC7E,CAAC,EAAE,KAAK,CAAC+C,MACC0pB,GAAY,WAAWC,GAAQ3pB,CAAM,CAC/C;AAEL,UAAMA,IAAS,CAAC,GAAGwpB,EAAI,IAAI,EAAE,IAAI,CAACv0B,GAAMgI,MAC7ByuB,EAAI,KAAK,WAAW,IAAIhB,GAAmBlB,GAAKv0B,GAAMu0B,EAAI,MAAMvsB,CAAC,CAAC,CAC5E;AACD,WAAOysB,GAAY,WAAWC,GAAQ3pB,CAAM;AAAA,EAChD;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAIqvB,GAAW3G,GAAS;AACpB,WAAO,IAAImD,GAAS;AAAA,MAChB,GAAG,KAAK;AAAA,MACR,WAAW,EAAE,OAAOwD,GAAW,SAAS5E,GAAU,SAAS/B,CAAO,EAAC;AAAA,IAC/E,CAAS;AAAA,EACL;AAAA,EACA,IAAI4G,GAAW5G,GAAS;AACpB,WAAO,IAAImD,GAAS;AAAA,MAChB,GAAG,KAAK;AAAA,MACR,WAAW,EAAE,OAAOyD,GAAW,SAAS7E,GAAU,SAAS/B,CAAO,EAAC;AAAA,IAC/E,CAAS;AAAA,EACL;AAAA,EACA,OAAO6G,GAAK7G,GAAS;AACjB,WAAO,IAAImD,GAAS;AAAA,MAChB,GAAG,KAAK;AAAA,MACR,aAAa,EAAE,OAAO0D,GAAK,SAAS9E,GAAU,SAAS/B,CAAO,EAAC;AAAA,IAC3E,CAAS;AAAA,EACL;AAAA,EACA,SAASA,GAAS;AACd,WAAO,KAAK,IAAI,GAAGA,CAAO;AAAA,EAC9B;AACJ;AACAmD,GAAS,SAAS,CAACmF,GAAQjI,MAChB,IAAI8C,GAAS;AAAA,EAChB,MAAMmF;AAAA,EACN,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AAAA,EACb,UAAUvF,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAEL,SAASkI,GAAeD,GAAQ;AAC5B,MAAIA,aAAkBE,IAAW;AAC7B,UAAMC,IAAW,CAAA;AACjB,eAAW11B,KAAOu1B,EAAO,OAAO;AAC5B,YAAMI,IAAcJ,EAAO,MAAMv1B,CAAG;AACpC,MAAA01B,EAAS11B,CAAG,IAAIkwB,GAAY,OAAOsF,GAAeG,CAAW,CAAC;AAAA,IAClE;AACA,WAAO,IAAIF,GAAU;AAAA,MACjB,GAAGF,EAAO;AAAA,MACV,OAAO,MAAMG;AAAA,IACzB,CAAS;AAAA,EACL,MACK,QAAIH,aAAkBnF,KAChB,IAAIA,GAAS;AAAA,IAChB,GAAGmF,EAAO;AAAA,IACV,MAAMC,GAAeD,EAAO,OAAO;AAAA,EAC/C,CAAS,IAEIA,aAAkBrF,KAChBA,GAAY,OAAOsF,GAAeD,EAAO,OAAM,CAAE,CAAC,IAEpDA,aAAkBpF,KAChBA,GAAY,OAAOqF,GAAeD,EAAO,OAAM,CAAE,CAAC,IAEpDA,aAAkBK,KAChBA,GAAS,OAAOL,EAAO,MAAM,IAAI,CAAC/7B,MAASg8B,GAAeh8B,CAAI,CAAC,CAAC,IAGhE+7B;AAEf;AACO,MAAME,WAAkBjG,GAAQ;AAAA,EACnC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,UAAU,MAKf,KAAK,YAAY,KAAK,aAqCtB,KAAK,UAAU,KAAK;AAAA,EACxB;AAAA,EACA,aAAa;AACT,QAAI,KAAK,YAAY;AACjB,aAAO,KAAK;AAChB,UAAMqG,IAAQ,KAAK,KAAK,MAAK,GACvB3zB,IAAO4oB,GAAK,WAAW+K,CAAK;AAClC,gBAAK,UAAU,EAAE,OAAAA,GAAO,MAAA3zB,EAAI,GACrB,KAAK;AAAA,EAChB;AAAA,EACA,OAAOutB,GAAO;AAEV,QADmB,KAAK,SAASA,CAAK,MACnB3D,GAAc,QAAQ;AACrC,YAAMiC,IAAM,KAAK,gBAAgB0B,CAAK;AACtC,aAAA3B,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,UAAUF,GAAc;AAAA,QACxB,UAAUiC,EAAI;AAAA,MAC9B,CAAa,GACMM;AAAA,IACX;AACA,UAAM,EAAE,QAAAH,GAAQ,KAAAH,EAAG,IAAK,KAAK,oBAAoB0B,CAAK,GAChD,EAAE,OAAAoG,GAAO,MAAMC,EAAS,IAAK,KAAK,WAAU,GAC5CC,IAAY,CAAA;AAClB,QAAI,EAAE,KAAK,KAAK,oBAAoBV,MAAY,KAAK,KAAK,gBAAgB;AACtE,iBAAWr1B,KAAO+tB,EAAI;AAClB,QAAK+H,EAAU,SAAS91B,CAAG,KACvB+1B,EAAU,KAAK/1B,CAAG;AAI9B,UAAMsuB,IAAQ,CAAA;AACd,eAAWtuB,KAAO81B,GAAW;AACzB,YAAME,IAAeH,EAAM71B,CAAG,GACxBpB,IAAQmvB,EAAI,KAAK/tB,CAAG;AAC1B,MAAAsuB,EAAM,KAAK;AAAA,QACP,KAAK,EAAE,QAAQ,SAAS,OAAOtuB,EAAG;AAAA,QAClC,OAAOg2B,EAAa,OAAO,IAAI/G,GAAmBlB,GAAKnvB,GAAOmvB,EAAI,MAAM/tB,CAAG,CAAC;AAAA,QAC5E,WAAWA,KAAO+tB,EAAI;AAAA,MACtC,CAAa;AAAA,IACL;AACA,QAAI,KAAK,KAAK,oBAAoBsH,IAAU;AACxC,YAAMY,IAAc,KAAK,KAAK;AAC9B,UAAIA,MAAgB;AAChB,mBAAWj2B,KAAO+1B;AACd,UAAAzH,EAAM,KAAK;AAAA,YACP,KAAK,EAAE,QAAQ,SAAS,OAAOtuB,EAAG;AAAA,YAClC,OAAO,EAAE,QAAQ,SAAS,OAAO+tB,EAAI,KAAK/tB,CAAG,EAAC;AAAA,UACtE,CAAqB;AAAA,eAGAi2B,MAAgB;AACrB,QAAIF,EAAU,SAAS,MACnBjI,GAAkBC,GAAK;AAAA,UACnB,MAAM/B,GAAa;AAAA,UACnB,MAAM+J;AAAA,QAC9B,CAAqB,GACD7H,EAAO,MAAK;AAAA,eAGX+H,MAAgB,QAGrB,OAAM,IAAI,MAAM,sDAAsD;AAAA,IAE9E,OACK;AAED,YAAMC,IAAW,KAAK,KAAK;AAC3B,iBAAWl2B,KAAO+1B,GAAW;AACzB,cAAMn3B,IAAQmvB,EAAI,KAAK/tB,CAAG;AAC1B,QAAAsuB,EAAM,KAAK;AAAA,UACP,KAAK,EAAE,QAAQ,SAAS,OAAOtuB,EAAG;AAAA,UAClC,OAAOk2B,EAAS;AAAA,YAAO,IAAIjH,GAAmBlB,GAAKnvB,GAAOmvB,EAAI,MAAM/tB,CAAG;AAAA;AAAA,UAC3F;AAAA,UACoB,WAAWA,KAAO+tB,EAAI;AAAA,QAC1C,CAAiB;AAAA,MACL;AAAA,IACJ;AACA,WAAIA,EAAI,OAAO,QACJ,QAAQ,QAAO,EACjB,KAAK,YAAY;AAClB,YAAMQ,IAAY,CAAA;AAClB,iBAAWC,KAAQF,GAAO;AACtB,cAAMtuB,IAAM,MAAMwuB,EAAK,KACjB5vB,IAAQ,MAAM4vB,EAAK;AACzB,QAAAD,EAAU,KAAK;AAAA,UACX,KAAAvuB;AAAA,UACA,OAAApB;AAAA,UACA,WAAW4vB,EAAK;AAAA,QACxC,CAAqB;AAAA,MACL;AACA,aAAOD;AAAA,IACX,CAAC,EACI,KAAK,CAACA,MACAN,GAAY,gBAAgBC,GAAQK,CAAS,CACvD,IAGMN,GAAY,gBAAgBC,GAAQI,CAAK;AAAA,EAExD;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK,KAAK,MAAK;AAAA,EAC1B;AAAA,EACA,OAAOrB,GAAS;AACZ,WAAA+B,GAAU,UACH,IAAIyG,GAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,aAAa;AAAA,MACb,GAAIxI,MAAY,SACV;AAAA,QACE,UAAU,CAACT,GAAOuB,MAAQ;;AACtB,gBAAMoI,MAAetqB,KAAAnG,IAAA,KAAK,MAAK,aAAV,gBAAAmG,EAAA,KAAAnG,GAAqB8mB,GAAOuB,GAAK,YAAWA,EAAI;AACrE,iBAAIvB,EAAM,SAAS,sBACR;AAAA,YACH,SAASwC,GAAU,SAAS/B,CAAO,EAAE,WAAWkJ;AAAA,UAChF,IAC+B;AAAA,YACH,SAASA;AAAA,UACrC;AAAA,QACoB;AAAA,MACpB,IACkB;IAClB,CAAS;AAAA,EACL;AAAA,EACA,QAAQ;AACJ,WAAO,IAAIV,GAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,aAAa;AAAA,IACzB,CAAS;AAAA,EACL;AAAA,EACA,cAAc;AACV,WAAO,IAAIA,GAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,aAAa;AAAA,IACzB,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,OAAOW,GAAc;AACjB,WAAO,IAAIX,GAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,OAAO;AAAA,QACV,GAAG,KAAK,KAAK,MAAK;AAAA,QAClB,GAAGW;AAAA,MACnB;AAAA,IACA,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAMC,GAAS;AAUX,WATe,IAAIZ,GAAU;AAAA,MACzB,aAAaY,EAAQ,KAAK;AAAA,MAC1B,UAAUA,EAAQ,KAAK;AAAA,MACvB,OAAO,OAAO;AAAA,QACV,GAAG,KAAK,KAAK,MAAK;AAAA,QAClB,GAAGA,EAAQ,KAAK,MAAK;AAAA,MACrC;AAAA,MACY,UAAUrG,GAAsB;AAAA,IAC5C,CAAS;AAAA,EAEL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoCA,OAAOhwB,GAAKu1B,GAAQ;AAChB,WAAO,KAAK,QAAQ,EAAE,CAACv1B,CAAG,GAAGu1B,EAAM,CAAE;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,SAAS5vB,GAAO;AACZ,WAAO,IAAI8vB,GAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,UAAU9vB;AAAA,IACtB,CAAS;AAAA,EACL;AAAA,EACA,KAAK2wB,GAAM;AACP,UAAMT,IAAQ,CAAA;AACd,eAAW71B,KAAO8qB,GAAK,WAAWwL,CAAI;AAClC,MAAIA,EAAKt2B,CAAG,KAAK,KAAK,MAAMA,CAAG,MAC3B61B,EAAM71B,CAAG,IAAI,KAAK,MAAMA,CAAG;AAGnC,WAAO,IAAIy1B,GAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,MAAMI;AAAA,IACzB,CAAS;AAAA,EACL;AAAA,EACA,KAAKS,GAAM;AACP,UAAMT,IAAQ,CAAA;AACd,eAAW71B,KAAO8qB,GAAK,WAAW,KAAK,KAAK;AACxC,MAAKwL,EAAKt2B,CAAG,MACT61B,EAAM71B,CAAG,IAAI,KAAK,MAAMA,CAAG;AAGnC,WAAO,IAAIy1B,GAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,MAAMI;AAAA,IACzB,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,cAAc;AACV,WAAOL,GAAe,IAAI;AAAA,EAC9B;AAAA,EACA,QAAQc,GAAM;AACV,UAAMZ,IAAW,CAAA;AACjB,eAAW11B,KAAO8qB,GAAK,WAAW,KAAK,KAAK,GAAG;AAC3C,YAAM6K,IAAc,KAAK,MAAM31B,CAAG;AAClC,MAAIs2B,KAAQ,CAACA,EAAKt2B,CAAG,IACjB01B,EAAS11B,CAAG,IAAI21B,IAGhBD,EAAS11B,CAAG,IAAI21B,EAAY,SAAQ;AAAA,IAE5C;AACA,WAAO,IAAIF,GAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,MAAMC;AAAA,IACzB,CAAS;AAAA,EACL;AAAA,EACA,SAASY,GAAM;AACX,UAAMZ,IAAW,CAAA;AACjB,eAAW11B,KAAO8qB,GAAK,WAAW,KAAK,KAAK;AACxC,UAAIwL,KAAQ,CAACA,EAAKt2B,CAAG;AACjB,QAAA01B,EAAS11B,CAAG,IAAI,KAAK,MAAMA,CAAG;AAAA,WAE7B;AAED,YAAIu2B,IADgB,KAAK,MAAMv2B,CAAG;AAElC,eAAOu2B,aAAoBrG;AACvB,UAAAqG,IAAWA,EAAS,KAAK;AAE7B,QAAAb,EAAS11B,CAAG,IAAIu2B;AAAA,MACpB;AAEJ,WAAO,IAAId,GAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,MAAMC;AAAA,IACzB,CAAS;AAAA,EACL;AAAA,EACA,QAAQ;AACJ,WAAOc,GAAc1L,GAAK,WAAW,KAAK,KAAK,CAAC;AAAA,EACpD;AACJ;AACA2K,GAAU,SAAS,CAACI,GAAOvI,MAChB,IAAImI,GAAU;AAAA,EACjB,OAAO,MAAMI;AAAA,EACb,aAAa;AAAA,EACb,UAAUR,GAAS,OAAM;AAAA,EACzB,UAAUrF,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAELmI,GAAU,eAAe,CAACI,GAAOvI,MACtB,IAAImI,GAAU;AAAA,EACjB,OAAO,MAAMI;AAAA,EACb,aAAa;AAAA,EACb,UAAUR,GAAS,OAAM;AAAA,EACzB,UAAUrF,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAELmI,GAAU,aAAa,CAACI,GAAOvI,MACpB,IAAImI,GAAU;AAAA,EACjB,OAAAI;AAAA,EACA,aAAa;AAAA,EACb,UAAUR,GAAS,OAAM;AAAA,EACzB,UAAUrF,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAMiD,WAAiBf,GAAQ;AAAA,EAClC,OAAOC,GAAO;AACV,UAAM,EAAE,KAAA1B,EAAG,IAAK,KAAK,oBAAoB0B,CAAK,GACxCkE,IAAU,KAAK,KAAK;AAC1B,aAAS8C,EAActI,GAAS;AAE5B,iBAAW5pB,KAAU4pB;AACjB,YAAI5pB,EAAO,OAAO,WAAW;AACzB,iBAAOA,EAAO;AAGtB,iBAAWA,KAAU4pB;AACjB,YAAI5pB,EAAO,OAAO,WAAW;AAEzB,iBAAAwpB,EAAI,OAAO,OAAO,KAAK,GAAGxpB,EAAO,IAAI,OAAO,MAAM,GAC3CA,EAAO;AAItB,YAAMmyB,IAAcvI,EAAQ,IAAI,CAAC5pB,MAAW,IAAI0nB,GAAS1nB,EAAO,IAAI,OAAO,MAAM,CAAC;AAClF,aAAAupB,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,aAAA0K;AAAA,MAChB,CAAa,GACMrI;AAAA,IACX;AACA,QAAIN,EAAI,OAAO;AACX,aAAO,QAAQ,IAAI4F,EAAQ,IAAI,OAAOrD,MAAW;AAC7C,cAAMqG,IAAW;AAAA,UACb,GAAG5I;AAAA,UACH,QAAQ;AAAA,YACJ,GAAGA,EAAI;AAAA,YACP,QAAQ,CAAA;AAAA,UAChC;AAAA,UACoB,QAAQ;AAAA,QAC5B;AACgB,eAAO;AAAA,UACH,QAAQ,MAAMuC,EAAO,YAAY;AAAA,YAC7B,MAAMvC,EAAI;AAAA,YACV,MAAMA,EAAI;AAAA,YACV,QAAQ4I;AAAA,UAChC,CAAqB;AAAA,UACD,KAAKA;AAAA,QACzB;AAAA,MACY,CAAC,CAAC,EAAE,KAAKF,CAAa;AAErB;AACD,UAAInO;AACJ,YAAM4D,IAAS,CAAA;AACf,iBAAWoE,KAAUqD,GAAS;AAC1B,cAAMgD,IAAW;AAAA,UACb,GAAG5I;AAAA,UACH,QAAQ;AAAA,YACJ,GAAGA,EAAI;AAAA,YACP,QAAQ,CAAA;AAAA,UAChC;AAAA,UACoB,QAAQ;AAAA,QAC5B,GACsBxpB,IAAS+rB,EAAO,WAAW;AAAA,UAC7B,MAAMvC,EAAI;AAAA,UACV,MAAMA,EAAI;AAAA,UACV,QAAQ4I;AAAA,QAC5B,CAAiB;AACD,YAAIpyB,EAAO,WAAW;AAClB,iBAAOA;AAEN,QAAIA,EAAO,WAAW,WAAW,CAAC+jB,MACnCA,IAAQ,EAAE,QAAA/jB,GAAQ,KAAKoyB,EAAQ,IAE/BA,EAAS,OAAO,OAAO,UACvBzK,EAAO,KAAKyK,EAAS,OAAO,MAAM;AAAA,MAE1C;AACA,UAAIrO;AACA,eAAAyF,EAAI,OAAO,OAAO,KAAK,GAAGzF,EAAM,IAAI,OAAO,MAAM,GAC1CA,EAAM;AAEjB,YAAMoO,IAAcxK,EAAO,IAAI,CAACA,MAAW,IAAID,GAASC,CAAM,CAAC;AAC/D,aAAA4B,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,aAAA0K;AAAA,MAChB,CAAa,GACMrI;AAAA,IACX;AAAA,EACJ;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACAkC,GAAS,SAAS,CAACqG,GAAOtJ,MACf,IAAIiD,GAAS;AAAA,EAChB,SAASqG;AAAA,EACT,UAAU5G,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAqIL,SAASuJ,GAAY1/B,GAAGE,GAAG;AACvB,QAAMy/B,IAAQ/K,GAAc50B,CAAC,GACvB4/B,IAAQhL,GAAc10B,CAAC;AAC7B,MAAIF,MAAME;AACN,WAAO,EAAE,OAAO,IAAM,MAAMF,EAAC;AAE5B,MAAI2/B,MAAUhL,GAAc,UAAUiL,MAAUjL,GAAc,QAAQ;AACvE,UAAMkL,IAAQlM,GAAK,WAAWzzB,CAAC,GACzB4/B,IAAanM,GAAK,WAAW3zB,CAAC,EAAE,OAAO,CAAC6I,MAAQg3B,EAAM,QAAQh3B,CAAG,MAAM,EAAE,GACzEk3B,IAAS,EAAE,GAAG//B,GAAG,GAAGE,EAAC;AAC3B,eAAW2I,KAAOi3B,GAAY;AAC1B,YAAME,IAAcN,GAAY1/B,EAAE6I,CAAG,GAAG3I,EAAE2I,CAAG,CAAC;AAC9C,UAAI,CAACm3B,EAAY;AACb,eAAO,EAAE,OAAO,GAAK;AAEzB,MAAAD,EAAOl3B,CAAG,IAAIm3B,EAAY;AAAA,IAC9B;AACA,WAAO,EAAE,OAAO,IAAM,MAAMD,EAAM;AAAA,EACtC,WACSJ,MAAUhL,GAAc,SAASiL,MAAUjL,GAAc,OAAO;AACrE,QAAI30B,EAAE,WAAWE,EAAE;AACf,aAAO,EAAE,OAAO,GAAK;AAEzB,UAAM+/B,IAAW,CAAA;AACjB,aAASzxB,IAAQ,GAAGA,IAAQxO,EAAE,QAAQwO,KAAS;AAC3C,YAAM0xB,IAAQlgC,EAAEwO,CAAK,GACf2xB,IAAQjgC,EAAEsO,CAAK,GACfwxB,IAAcN,GAAYQ,GAAOC,CAAK;AAC5C,UAAI,CAACH,EAAY;AACb,eAAO,EAAE,OAAO,GAAK;AAEzB,MAAAC,EAAS,KAAKD,EAAY,IAAI;AAAA,IAClC;AACA,WAAO,EAAE,OAAO,IAAM,MAAMC,EAAQ;AAAA,EACxC,MACK,QAAIN,MAAUhL,GAAc,QAAQiL,MAAUjL,GAAc,QAAQ,CAAC30B,KAAM,CAACE,IACtE,EAAE,OAAO,IAAM,MAAMF,EAAC,IAGtB,EAAE,OAAO,GAAK;AAE7B;AACO,MAAMs5B,WAAwBjB,GAAQ;AAAA,EACzC,OAAOC,GAAO;AACV,UAAM,EAAE,QAAAvB,GAAQ,KAAAH,EAAG,IAAK,KAAK,oBAAoB0B,CAAK,GAChD8H,IAAe,CAACC,GAAYC,MAAgB;AAC9C,UAAI7I,GAAU4I,CAAU,KAAK5I,GAAU6I,CAAW;AAC9C,eAAOpJ;AAEX,YAAMqJ,IAASb,GAAYW,EAAW,OAAOC,EAAY,KAAK;AAC9D,aAAKC,EAAO,UAMR7I,GAAQ2I,CAAU,KAAK3I,GAAQ4I,CAAW,MAC1CvJ,EAAO,MAAK,GAET,EAAE,QAAQA,EAAO,OAAO,OAAOwJ,EAAO,KAAI,MAR7C5J,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,MACvC,CAAiB,GACMqC;AAAA,IAMf;AACA,WAAIN,EAAI,OAAO,QACJ,QAAQ,IAAI;AAAA,MACf,KAAK,KAAK,KAAK,YAAY;AAAA,QACvB,MAAMA,EAAI;AAAA,QACV,MAAMA,EAAI;AAAA,QACV,QAAQA;AAAA,MAC5B,CAAiB;AAAA,MACD,KAAK,KAAK,MAAM,YAAY;AAAA,QACxB,MAAMA,EAAI;AAAA,QACV,MAAMA,EAAI;AAAA,QACV,QAAQA;AAAA,MAC5B,CAAiB;AAAA,IACjB,CAAa,EAAE,KAAK,CAAC,CAAC4J,GAAMC,CAAK,MAAML,EAAaI,GAAMC,CAAK,CAAC,IAG7CL,EAAa,KAAK,KAAK,KAAK,WAAW;AAAA,MAC1C,MAAMxJ,EAAI;AAAA,MACV,MAAMA,EAAI;AAAA,MACV,QAAQA;AAAA,IACxB,CAAa,GAAG,KAAK,KAAK,MAAM,WAAW;AAAA,MAC3B,MAAMA,EAAI;AAAA,MACV,MAAMA,EAAI;AAAA,MACV,QAAQA;AAAA,IACxB,CAAa,CAAC;AAAA,EAEV;AACJ;AACA0C,GAAgB,SAAS,CAACkH,GAAMC,GAAOtK,MAC5B,IAAImD,GAAgB;AAAA,EACvB,MAAMkH;AAAA,EACN,OAAOC;AAAA,EACP,UAAU5H,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAGE,MAAMsI,WAAiBpG,GAAQ;AAAA,EAClC,OAAOC,GAAO;AACV,UAAM,EAAE,QAAAvB,GAAQ,KAAAH,EAAG,IAAK,KAAK,oBAAoB0B,CAAK;AACtD,QAAI1B,EAAI,eAAejC,GAAc;AACjC,aAAAgC,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,UAAUF,GAAc;AAAA,QACxB,UAAUiC,EAAI;AAAA,MAC9B,CAAa,GACMM;AAEX,QAAIN,EAAI,KAAK,SAAS,KAAK,KAAK,MAAM;AAClC,aAAAD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,SAAS,KAAK,KAAK,MAAM;AAAA,QACzB,WAAW;AAAA,QACX,OAAO;AAAA,QACP,MAAM;AAAA,MACtB,CAAa,GACMqC;AAGX,IAAI,CADS,KAAK,KAAK,QACVN,EAAI,KAAK,SAAS,KAAK,KAAK,MAAM,WAC3CD,GAAkBC,GAAK;AAAA,MACnB,MAAM/B,GAAa;AAAA,MACnB,SAAS,KAAK,KAAK,MAAM;AAAA,MACzB,WAAW;AAAA,MACX,OAAO;AAAA,MACP,MAAM;AAAA,IACtB,CAAa,GACDkC,EAAO,MAAK;AAEhB,UAAM/C,IAAQ,CAAC,GAAG4C,EAAI,IAAI,EACrB,IAAI,CAACv0B,GAAMq+B,MAAc;AAC1B,YAAMtC,IAAS,KAAK,KAAK,MAAMsC,CAAS,KAAK,KAAK,KAAK;AACvD,aAAKtC,IAEEA,EAAO,OAAO,IAAItG,GAAmBlB,GAAKv0B,GAAMu0B,EAAI,MAAM8J,CAAS,CAAC,IADhE;AAAA,IAEf,CAAC,EACI,OAAO,CAAC37B,MAAM,CAAC,CAACA,CAAC;AACtB,WAAI6xB,EAAI,OAAO,QACJ,QAAQ,IAAI5C,CAAK,EAAE,KAAK,CAACgD,MACrBF,GAAY,WAAWC,GAAQC,CAAO,CAChD,IAGMF,GAAY,WAAWC,GAAQ/C,CAAK;AAAA,EAEnD;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,KAAK2M,GAAM;AACP,WAAO,IAAIlC,GAAS;AAAA,MAChB,GAAG,KAAK;AAAA,MACR,MAAAkC;AAAA,IACZ,CAAS;AAAA,EACL;AACJ;AACAlC,GAAS,SAAS,CAACmC,GAASzK,MAAW;AACnC,MAAI,CAAC,MAAM,QAAQyK,CAAO;AACtB,UAAM,IAAI,MAAM,uDAAuD;AAE3E,SAAO,IAAInC,GAAS;AAAA,IAChB,OAAOmC;AAAA,IACP,UAAU/H,GAAsB;AAAA,IAChC,MAAM;AAAA,IACN,GAAGb,GAAoB7B,CAAM;AAAA,EACrC,CAAK;AACL;AAuDO,MAAM0K,WAAexI,GAAQ;AAAA,EAChC,IAAI,YAAY;AACZ,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,OAAOC,GAAO;AACV,UAAM,EAAE,QAAAvB,GAAQ,KAAAH,EAAG,IAAK,KAAK,oBAAoB0B,CAAK;AACtD,QAAI1B,EAAI,eAAejC,GAAc;AACjC,aAAAgC,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,UAAUF,GAAc;AAAA,QACxB,UAAUiC,EAAI;AAAA,MAC9B,CAAa,GACMM;AAEX,UAAM4J,IAAU,KAAK,KAAK,SACpBC,IAAY,KAAK,KAAK,WACtB5J,IAAQ,CAAC,GAAGP,EAAI,KAAK,QAAO,CAAE,EAAE,IAAI,CAAC,CAAC/tB,GAAKpB,CAAK,GAAG+G,OAC9C;AAAA,MACH,KAAKsyB,EAAQ,OAAO,IAAIhJ,GAAmBlB,GAAK/tB,GAAK+tB,EAAI,MAAM,CAACpoB,GAAO,KAAK,CAAC,CAAC;AAAA,MAC9E,OAAOuyB,EAAU,OAAO,IAAIjJ,GAAmBlB,GAAKnvB,GAAOmvB,EAAI,MAAM,CAACpoB,GAAO,OAAO,CAAC,CAAC;AAAA,IACtG,EACS;AACD,QAAIooB,EAAI,OAAO,OAAO;AAClB,YAAMoK,IAAW,oBAAI,IAAG;AACxB,aAAO,QAAQ,UAAU,KAAK,YAAY;AACtC,mBAAW3J,KAAQF,GAAO;AACtB,gBAAMtuB,IAAM,MAAMwuB,EAAK,KACjB5vB,IAAQ,MAAM4vB,EAAK;AACzB,cAAIxuB,EAAI,WAAW,aAAapB,EAAM,WAAW;AAC7C,mBAAOyvB;AAEX,WAAIruB,EAAI,WAAW,WAAWpB,EAAM,WAAW,YAC3CsvB,EAAO,MAAK,GAEhBiK,EAAS,IAAIn4B,EAAI,OAAOpB,EAAM,KAAK;AAAA,QACvC;AACA,eAAO,EAAE,QAAQsvB,EAAO,OAAO,OAAOiK,EAAQ;AAAA,MAClD,CAAC;AAAA,IACL,OACK;AACD,YAAMA,IAAW,oBAAI,IAAG;AACxB,iBAAW3J,KAAQF,GAAO;AACtB,cAAMtuB,IAAMwuB,EAAK,KACX5vB,IAAQ4vB,EAAK;AACnB,YAAIxuB,EAAI,WAAW,aAAapB,EAAM,WAAW;AAC7C,iBAAOyvB;AAEX,SAAIruB,EAAI,WAAW,WAAWpB,EAAM,WAAW,YAC3CsvB,EAAO,MAAK,GAEhBiK,EAAS,IAAIn4B,EAAI,OAAOpB,EAAM,KAAK;AAAA,MACvC;AACA,aAAO,EAAE,QAAQsvB,EAAO,OAAO,OAAOiK,EAAQ;AAAA,IAClD;AAAA,EACJ;AACJ;AACAH,GAAO,SAAS,CAACC,GAASC,GAAW5K,MAC1B,IAAI0K,GAAO;AAAA,EACd,WAAAE;AAAA,EACA,SAAAD;AAAA,EACA,UAAUjI,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAM8K,WAAe5I,GAAQ;AAAA,EAChC,OAAOC,GAAO;AACV,UAAM,EAAE,QAAAvB,GAAQ,KAAAH,EAAG,IAAK,KAAK,oBAAoB0B,CAAK;AACtD,QAAI1B,EAAI,eAAejC,GAAc;AACjC,aAAAgC,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,UAAUF,GAAc;AAAA,QACxB,UAAUiC,EAAI;AAAA,MAC9B,CAAa,GACMM;AAEX,UAAM4B,IAAM,KAAK;AACjB,IAAIA,EAAI,YAAY,QACZlC,EAAI,KAAK,OAAOkC,EAAI,QAAQ,UAC5BnC,GAAkBC,GAAK;AAAA,MACnB,MAAM/B,GAAa;AAAA,MACnB,SAASiE,EAAI,QAAQ;AAAA,MACrB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO;AAAA,MACP,SAASA,EAAI,QAAQ;AAAA,IACzC,CAAiB,GACD/B,EAAO,MAAK,IAGhB+B,EAAI,YAAY,QACZlC,EAAI,KAAK,OAAOkC,EAAI,QAAQ,UAC5BnC,GAAkBC,GAAK;AAAA,MACnB,MAAM/B,GAAa;AAAA,MACnB,SAASiE,EAAI,QAAQ;AAAA,MACrB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO;AAAA,MACP,SAASA,EAAI,QAAQ;AAAA,IACzC,CAAiB,GACD/B,EAAO,MAAK;AAGpB,UAAMgK,IAAY,KAAK,KAAK;AAC5B,aAASG,EAAYC,GAAU;AAC3B,YAAMC,IAAY,oBAAI,IAAG;AACzB,iBAAW16B,KAAWy6B,GAAU;AAC5B,YAAIz6B,EAAQ,WAAW;AACnB,iBAAOwwB;AACX,QAAIxwB,EAAQ,WAAW,WACnBqwB,EAAO,MAAK,GAChBqK,EAAU,IAAI16B,EAAQ,KAAK;AAAA,MAC/B;AACA,aAAO,EAAE,QAAQqwB,EAAO,OAAO,OAAOqK,EAAS;AAAA,IACnD;AACA,UAAMD,IAAW,CAAC,GAAGvK,EAAI,KAAK,QAAQ,EAAE,IAAI,CAACv0B,GAAMgI,MAAM02B,EAAU,OAAO,IAAIjJ,GAAmBlB,GAAKv0B,GAAMu0B,EAAI,MAAMvsB,CAAC,CAAC,CAAC;AACzH,WAAIusB,EAAI,OAAO,QACJ,QAAQ,IAAIuK,CAAQ,EAAE,KAAK,CAACA,MAAaD,EAAYC,CAAQ,CAAC,IAG9DD,EAAYC,CAAQ;AAAA,EAEnC;AAAA,EACA,IAAIE,GAASvL,GAAS;AAClB,WAAO,IAAImL,GAAO;AAAA,MACd,GAAG,KAAK;AAAA,MACR,SAAS,EAAE,OAAOI,GAAS,SAASxJ,GAAU,SAAS/B,CAAO,EAAC;AAAA,IAC3E,CAAS;AAAA,EACL;AAAA,EACA,IAAIwL,GAASxL,GAAS;AAClB,WAAO,IAAImL,GAAO;AAAA,MACd,GAAG,KAAK;AAAA,MACR,SAAS,EAAE,OAAOK,GAAS,SAASzJ,GAAU,SAAS/B,CAAO,EAAC;AAAA,IAC3E,CAAS;AAAA,EACL;AAAA,EACA,KAAKnV,GAAMmV,GAAS;AAChB,WAAO,KAAK,IAAInV,GAAMmV,CAAO,EAAE,IAAInV,GAAMmV,CAAO;AAAA,EACpD;AAAA,EACA,SAASA,GAAS;AACd,WAAO,KAAK,IAAI,GAAGA,CAAO;AAAA,EAC9B;AACJ;AACAmL,GAAO,SAAS,CAACF,GAAW5K,MACjB,IAAI8K,GAAO;AAAA,EACd,WAAAF;AAAA,EACA,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAUlI,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAoHE,MAAMoL,WAAgBlJ,GAAQ;AAAA,EACjC,IAAI,SAAS;AACT,WAAO,KAAK,KAAK,OAAM;AAAA,EAC3B;AAAA,EACA,OAAOC,GAAO;AACV,UAAM,EAAE,KAAA1B,EAAG,IAAK,KAAK,oBAAoB0B,CAAK;AAE9C,WADmB,KAAK,KAAK,OAAM,EACjB,OAAO,EAAE,MAAM1B,EAAI,MAAM,MAAMA,EAAI,MAAM,QAAQA,EAAG,CAAE;AAAA,EAC5E;AACJ;AACA2K,GAAQ,SAAS,CAACn5B,GAAQ+tB,MACf,IAAIoL,GAAQ;AAAA,EACf,QAAQn5B;AAAA,EACR,UAAUywB,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAMqL,WAAmBnJ,GAAQ;AAAA,EACpC,OAAOC,GAAO;AACV,QAAIA,EAAM,SAAS,KAAK,KAAK,OAAO;AAChC,YAAM1B,IAAM,KAAK,gBAAgB0B,CAAK;AACtC,aAAA3B,GAAkBC,GAAK;AAAA,QACnB,UAAUA,EAAI;AAAA,QACd,MAAM/B,GAAa;AAAA,QACnB,UAAU,KAAK,KAAK;AAAA,MACpC,CAAa,GACMqC;AAAA,IACX;AACA,WAAO,EAAE,QAAQ,SAAS,OAAOoB,EAAM,KAAI;AAAA,EAC/C;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACAkJ,GAAW,SAAS,CAAC/5B,GAAO0uB,MACjB,IAAIqL,GAAW;AAAA,EAClB,OAAO/5B;AAAA,EACP,UAAUoxB,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAEL,SAASkJ,GAAcv4B,GAAQqvB,GAAQ;AACnC,SAAO,IAAIsL,GAAQ;AAAA,IACf,QAAA36B;AAAA,IACA,UAAU+xB,GAAsB;AAAA,IAChC,GAAGb,GAAoB7B,CAAM;AAAA,EACrC,CAAK;AACL;AACO,MAAMsL,WAAgBpJ,GAAQ;AAAA,EACjC,OAAOC,GAAO;AACV,QAAI,OAAOA,EAAM,QAAS,UAAU;AAChC,YAAM1B,IAAM,KAAK,gBAAgB0B,CAAK,GAChCoJ,IAAiB,KAAK,KAAK;AACjC,aAAA/K,GAAkBC,GAAK;AAAA,QACnB,UAAUjD,GAAK,WAAW+N,CAAc;AAAA,QACxC,UAAU9K,EAAI;AAAA,QACd,MAAM/B,GAAa;AAAA,MACnC,CAAa,GACMqC;AAAA,IACX;AAIA,QAHK,KAAK,WACN,KAAK,SAAS,IAAI,IAAI,KAAK,KAAK,MAAM,IAEtC,CAAC,KAAK,OAAO,IAAIoB,EAAM,IAAI,GAAG;AAC9B,YAAM1B,IAAM,KAAK,gBAAgB0B,CAAK,GAChCoJ,IAAiB,KAAK,KAAK;AACjC,aAAA/K,GAAkBC,GAAK;AAAA,QACnB,UAAUA,EAAI;AAAA,QACd,MAAM/B,GAAa;AAAA,QACnB,SAAS6M;AAAA,MACzB,CAAa,GACMxK;AAAA,IACX;AACA,WAAOM,GAAGc,EAAM,IAAI;AAAA,EACxB;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,OAAO;AACP,UAAMqJ,IAAa,CAAA;AACnB,eAAWrN,KAAO,KAAK,KAAK;AACxB,MAAAqN,EAAWrN,CAAG,IAAIA;AAEtB,WAAOqN;AAAA,EACX;AAAA,EACA,IAAI,SAAS;AACT,UAAMA,IAAa,CAAA;AACnB,eAAWrN,KAAO,KAAK,KAAK;AACxB,MAAAqN,EAAWrN,CAAG,IAAIA;AAEtB,WAAOqN;AAAA,EACX;AAAA,EACA,IAAI,OAAO;AACP,UAAMA,IAAa,CAAA;AACnB,eAAWrN,KAAO,KAAK,KAAK;AACxB,MAAAqN,EAAWrN,CAAG,IAAIA;AAEtB,WAAOqN;AAAA,EACX;AAAA,EACA,QAAQ76B,GAAQ86B,IAAS,KAAK,MAAM;AAChC,WAAOH,GAAQ,OAAO36B,GAAQ;AAAA,MAC1B,GAAG,KAAK;AAAA,MACR,GAAG86B;AAAA,IACf,CAAS;AAAA,EACL;AAAA,EACA,QAAQ96B,GAAQ86B,IAAS,KAAK,MAAM;AAChC,WAAOH,GAAQ,OAAO,KAAK,QAAQ,OAAO,CAACI,MAAQ,CAAC/6B,EAAO,SAAS+6B,CAAG,CAAC,GAAG;AAAA,MACvE,GAAG,KAAK;AAAA,MACR,GAAGD;AAAA,IACf,CAAS;AAAA,EACL;AACJ;AACAH,GAAQ,SAASpC;AACV,MAAMyC,WAAsBzJ,GAAQ;AAAA,EACvC,OAAOC,GAAO;AACV,UAAMyJ,IAAmBpO,GAAK,mBAAmB,KAAK,KAAK,MAAM,GAC3DiD,IAAM,KAAK,gBAAgB0B,CAAK;AACtC,QAAI1B,EAAI,eAAejC,GAAc,UAAUiC,EAAI,eAAejC,GAAc,QAAQ;AACpF,YAAM+M,IAAiB/N,GAAK,aAAaoO,CAAgB;AACzD,aAAApL,GAAkBC,GAAK;AAAA,QACnB,UAAUjD,GAAK,WAAW+N,CAAc;AAAA,QACxC,UAAU9K,EAAI;AAAA,QACd,MAAM/B,GAAa;AAAA,MACnC,CAAa,GACMqC;AAAA,IACX;AAIA,QAHK,KAAK,WACN,KAAK,SAAS,IAAI,IAAIvD,GAAK,mBAAmB,KAAK,KAAK,MAAM,CAAC,IAE/D,CAAC,KAAK,OAAO,IAAI2E,EAAM,IAAI,GAAG;AAC9B,YAAMoJ,IAAiB/N,GAAK,aAAaoO,CAAgB;AACzD,aAAApL,GAAkBC,GAAK;AAAA,QACnB,UAAUA,EAAI;AAAA,QACd,MAAM/B,GAAa;AAAA,QACnB,SAAS6M;AAAA,MACzB,CAAa,GACMxK;AAAA,IACX;AACA,WAAOM,GAAGc,EAAM,IAAI;AAAA,EACxB;AAAA,EACA,IAAI,OAAO;AACP,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACAwJ,GAAc,SAAS,CAACh7B,GAAQqvB,MACrB,IAAI2L,GAAc;AAAA,EACrB,QAAQh7B;AAAA,EACR,UAAU+xB,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAM+C,WAAmBb,GAAQ;AAAA,EACpC,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,OAAOC,GAAO;AACV,UAAM,EAAE,KAAA1B,EAAG,IAAK,KAAK,oBAAoB0B,CAAK;AAC9C,QAAI1B,EAAI,eAAejC,GAAc,WAAWiC,EAAI,OAAO,UAAU;AACjE,aAAAD,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,UAAUF,GAAc;AAAA,QACxB,UAAUiC,EAAI;AAAA,MAC9B,CAAa,GACMM;AAEX,UAAM8K,IAAcpL,EAAI,eAAejC,GAAc,UAAUiC,EAAI,OAAO,QAAQ,QAAQA,EAAI,IAAI;AAClG,WAAOY,GAAGwK,EAAY,KAAK,CAACz1B,MACjB,KAAK,KAAK,KAAK,WAAWA,GAAM;AAAA,MACnC,MAAMqqB,EAAI;AAAA,MACV,UAAUA,EAAI,OAAO;AAAA,IACrC,CAAa,CACJ,CAAC;AAAA,EACN;AACJ;AACAsC,GAAW,SAAS,CAACkF,GAAQjI,MAClB,IAAI+C,GAAW;AAAA,EAClB,MAAMkF;AAAA,EACN,UAAUvF,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAMyC,WAAmBP,GAAQ;AAAA,EACpC,YAAY;AACR,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,aAAa;AACT,WAAO,KAAK,KAAK,OAAO,KAAK,aAAaQ,GAAsB,aAC1D,KAAK,KAAK,OAAO,WAAU,IAC3B,KAAK,KAAK;AAAA,EACpB;AAAA,EACA,OAAOP,GAAO;AACV,UAAM,EAAE,QAAAvB,GAAQ,KAAAH,EAAG,IAAK,KAAK,oBAAoB0B,CAAK,GAChD2J,IAAS,KAAK,KAAK,UAAU,MAC7BC,IAAW;AAAA,MACb,UAAU,CAACC,MAAQ;AACf,QAAAxL,GAAkBC,GAAKuL,CAAG,GACtBA,EAAI,QACJpL,EAAO,MAAK,IAGZA,EAAO,MAAK;AAAA,MAEpB;AAAA,MACA,IAAI,OAAO;AACP,eAAOH,EAAI;AAAA,MACf;AAAA,IACZ;AAEQ,QADAsL,EAAS,WAAWA,EAAS,SAAS,KAAKA,CAAQ,GAC/CD,EAAO,SAAS,cAAc;AAC9B,YAAMG,IAAYH,EAAO,UAAUrL,EAAI,MAAMsL,CAAQ;AACrD,UAAItL,EAAI,OAAO;AACX,eAAO,QAAQ,QAAQwL,CAAS,EAAE,KAAK,OAAOA,MAAc;AACxD,cAAIrL,EAAO,UAAU;AACjB,mBAAOG;AACX,gBAAM9pB,IAAS,MAAM,KAAK,KAAK,OAAO,YAAY;AAAA,YAC9C,MAAMg1B;AAAA,YACN,MAAMxL,EAAI;AAAA,YACV,QAAQA;AAAA,UAChC,CAAqB;AACD,iBAAIxpB,EAAO,WAAW,YACX8pB,KACP9pB,EAAO,WAAW,WAElB2pB,EAAO,UAAU,UACVQ,GAAMnqB,EAAO,KAAK,IACtBA;AAAA,QACX,CAAC;AAEA;AACD,YAAI2pB,EAAO,UAAU;AACjB,iBAAOG;AACX,cAAM9pB,IAAS,KAAK,KAAK,OAAO,WAAW;AAAA,UACvC,MAAMg1B;AAAA,UACN,MAAMxL,EAAI;AAAA,UACV,QAAQA;AAAA,QAC5B,CAAiB;AACD,eAAIxpB,EAAO,WAAW,YACX8pB,KACP9pB,EAAO,WAAW,WAElB2pB,EAAO,UAAU,UACVQ,GAAMnqB,EAAO,KAAK,IACtBA;AAAA,MACX;AAAA,IACJ;AACA,QAAI60B,EAAO,SAAS,cAAc;AAC9B,YAAMI,IAAoB,CAAC1sB,MAAQ;AAC/B,cAAMvI,IAAS60B,EAAO,WAAWtsB,GAAKusB,CAAQ;AAC9C,YAAItL,EAAI,OAAO;AACX,iBAAO,QAAQ,QAAQxpB,CAAM;AAEjC,YAAIA,aAAkB;AAClB,gBAAM,IAAI,MAAM,2FAA2F;AAE/G,eAAOuI;AAAA,MACX;AACA,UAAIihB,EAAI,OAAO,UAAU,IAAO;AAC5B,cAAM0L,IAAQ,KAAK,KAAK,OAAO,WAAW;AAAA,UACtC,MAAM1L,EAAI;AAAA,UACV,MAAMA,EAAI;AAAA,UACV,QAAQA;AAAA,QAC5B,CAAiB;AACD,eAAI0L,EAAM,WAAW,YACVpL,MACPoL,EAAM,WAAW,WACjBvL,EAAO,MAAK,GAEhBsL,EAAkBC,EAAM,KAAK,GACtB,EAAE,QAAQvL,EAAO,OAAO,OAAOuL,EAAM,MAAK;AAAA,MACrD;AAEI,eAAO,KAAK,KAAK,OAAO,YAAY,EAAE,MAAM1L,EAAI,MAAM,MAAMA,EAAI,MAAM,QAAQA,EAAG,CAAE,EAAE,KAAK,CAAC0L,MACnFA,EAAM,WAAW,YACVpL,MACPoL,EAAM,WAAW,WACjBvL,EAAO,MAAK,GACTsL,EAAkBC,EAAM,KAAK,EAAE,KAAK,OAChC,EAAE,QAAQvL,EAAO,OAAO,OAAOuL,EAAM,MAAK,EACpD,EACJ;AAAA,IAET;AACA,QAAIL,EAAO,SAAS;AAChB,UAAIrL,EAAI,OAAO,UAAU,IAAO;AAC5B,cAAM3hB,IAAO,KAAK,KAAK,OAAO,WAAW;AAAA,UACrC,MAAM2hB,EAAI;AAAA,UACV,MAAMA,EAAI;AAAA,UACV,QAAQA;AAAA,QAC5B,CAAiB;AACD,YAAI,CAACe,GAAQ1iB,CAAI;AACb,iBAAOiiB;AACX,cAAM9pB,IAAS60B,EAAO,UAAUhtB,EAAK,OAAOitB,CAAQ;AACpD,YAAI90B,aAAkB;AAClB,gBAAM,IAAI,MAAM,iGAAiG;AAErH,eAAO,EAAE,QAAQ2pB,EAAO,OAAO,OAAO3pB,EAAM;AAAA,MAChD;AAEI,eAAO,KAAK,KAAK,OAAO,YAAY,EAAE,MAAMwpB,EAAI,MAAM,MAAMA,EAAI,MAAM,QAAQA,EAAG,CAAE,EAAE,KAAK,CAAC3hB,MAClF0iB,GAAQ1iB,CAAI,IAEV,QAAQ,QAAQgtB,EAAO,UAAUhtB,EAAK,OAAOitB,CAAQ,CAAC,EAAE,KAAK,CAAC90B,OAAY;AAAA,UAC7E,QAAQ2pB,EAAO;AAAA,UACf,OAAO3pB;AAAA,QAC/B,EAAsB,IAJS8pB,EAKd;AAGT,IAAAvD,GAAK,YAAYsO,CAAM;AAAA,EAC3B;AACJ;AACArJ,GAAW,SAAS,CAACwF,GAAQ6D,GAAQ9L,MAC1B,IAAIyC,GAAW;AAAA,EAClB,QAAAwF;AAAA,EACA,UAAUvF,GAAsB;AAAA,EAChC,QAAAoJ;AAAA,EACA,GAAGjK,GAAoB7B,CAAM;AACrC,CAAK;AAELyC,GAAW,uBAAuB,CAAC2J,GAAYnE,GAAQjI,MAC5C,IAAIyC,GAAW;AAAA,EAClB,QAAAwF;AAAA,EACA,QAAQ,EAAE,MAAM,cAAc,WAAWmE,EAAU;AAAA,EACnD,UAAU1J,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAGE,MAAM4C,WAAoBV,GAAQ;AAAA,EACrC,OAAOC,GAAO;AAEV,WADmB,KAAK,SAASA,CAAK,MACnB3D,GAAc,YACtB6C,GAAG,MAAS,IAEhB,KAAK,KAAK,UAAU,OAAOc,CAAK;AAAA,EAC3C;AAAA,EACA,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACAS,GAAY,SAAS,CAACl2B,GAAMszB,MACjB,IAAI4C,GAAY;AAAA,EACnB,WAAWl2B;AAAA,EACX,UAAUg2B,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAM6C,WAAoBX,GAAQ;AAAA,EACrC,OAAOC,GAAO;AAEV,WADmB,KAAK,SAASA,CAAK,MACnB3D,GAAc,OACtB6C,GAAG,IAAI,IAEX,KAAK,KAAK,UAAU,OAAOc,CAAK;AAAA,EAC3C;AAAA,EACA,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACAU,GAAY,SAAS,CAACn2B,GAAMszB,MACjB,IAAI6C,GAAY;AAAA,EACnB,WAAWn2B;AAAA,EACX,UAAUg2B,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAMsD,WAAmBpB,GAAQ;AAAA,EACpC,OAAOC,GAAO;AACV,UAAM,EAAE,KAAA1B,EAAG,IAAK,KAAK,oBAAoB0B,CAAK;AAC9C,QAAI/rB,IAAOqqB,EAAI;AACf,WAAIA,EAAI,eAAejC,GAAc,cACjCpoB,IAAO,KAAK,KAAK,aAAY,IAE1B,KAAK,KAAK,UAAU,OAAO;AAAA,MAC9B,MAAAA;AAAA,MACA,MAAMqqB,EAAI;AAAA,MACV,QAAQA;AAAA,IACpB,CAAS;AAAA,EACL;AAAA,EACA,gBAAgB;AACZ,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA6C,GAAW,SAAS,CAAC52B,GAAMszB,MAChB,IAAIsD,GAAW;AAAA,EAClB,WAAW52B;AAAA,EACX,UAAUg2B,GAAsB;AAAA,EAChC,cAAc,OAAO1C,EAAO,WAAY,aAAaA,EAAO,UAAU,MAAMA,EAAO;AAAA,EACnF,GAAG6B,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAMyD,WAAiBvB,GAAQ;AAAA,EAClC,OAAOC,GAAO;AACV,UAAM,EAAE,KAAA1B,EAAG,IAAK,KAAK,oBAAoB0B,CAAK,GAExCkK,IAAS;AAAA,MACX,GAAG5L;AAAA,MACH,QAAQ;AAAA,QACJ,GAAGA,EAAI;AAAA,QACP,QAAQ,CAAA;AAAA,MACxB;AAAA,IACA,GACcxpB,IAAS,KAAK,KAAK,UAAU,OAAO;AAAA,MACtC,MAAMo1B,EAAO;AAAA,MACb,MAAMA,EAAO;AAAA,MACb,QAAQ;AAAA,QACJ,GAAGA;AAAA,MACnB;AAAA,IACA,CAAS;AACD,WAAI5K,GAAQxqB,CAAM,IACPA,EAAO,KAAK,CAACA,OACT;AAAA,MACH,QAAQ;AAAA,MACR,OAAOA,EAAO,WAAW,UACnBA,EAAO,QACP,KAAK,KAAK,WAAW;AAAA,QACnB,IAAI,QAAQ;AACR,iBAAO,IAAI0nB,GAAS0N,EAAO,OAAO,MAAM;AAAA,QAC5C;AAAA,QACA,OAAOA,EAAO;AAAA,MAC1C,CAAyB;AAAA,IACzB,EACa,IAGM;AAAA,MACH,QAAQ;AAAA,MACR,OAAOp1B,EAAO,WAAW,UACnBA,EAAO,QACP,KAAK,KAAK,WAAW;AAAA,QACnB,IAAI,QAAQ;AACR,iBAAO,IAAI0nB,GAAS0N,EAAO,OAAO,MAAM;AAAA,QAC5C;AAAA,QACA,OAAOA,EAAO;AAAA,MACtC,CAAqB;AAAA,IACrB;AAAA,EAEI;AAAA,EACA,cAAc;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA5I,GAAS,SAAS,CAAC/2B,GAAMszB,MACd,IAAIyD,GAAS;AAAA,EAChB,WAAW/2B;AAAA,EACX,UAAUg2B,GAAsB;AAAA,EAChC,YAAY,OAAO1C,EAAO,SAAU,aAAaA,EAAO,QAAQ,MAAMA,EAAO;AAAA,EAC7E,GAAG6B,GAAoB7B,CAAM;AACrC,CAAK;AAEE,MAAMsM,WAAepK,GAAQ;AAAA,EAChC,OAAOC,GAAO;AAEV,QADmB,KAAK,SAASA,CAAK,MACnB3D,GAAc,KAAK;AAClC,YAAMiC,IAAM,KAAK,gBAAgB0B,CAAK;AACtC,aAAA3B,GAAkBC,GAAK;AAAA,QACnB,MAAM/B,GAAa;AAAA,QACnB,UAAUF,GAAc;AAAA,QACxB,UAAUiC,EAAI;AAAA,MAC9B,CAAa,GACMM;AAAA,IACX;AACA,WAAO,EAAE,QAAQ,SAAS,OAAOoB,EAAM,KAAI;AAAA,EAC/C;AACJ;AACAmK,GAAO,SAAS,CAACtM,MACN,IAAIsM,GAAO;AAAA,EACd,UAAU5J,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAGE,MAAMuD,WAAmBrB,GAAQ;AAAA,EACpC,OAAOC,GAAO;AACV,UAAM,EAAE,KAAA1B,EAAG,IAAK,KAAK,oBAAoB0B,CAAK,GACxC/rB,IAAOqqB,EAAI;AACjB,WAAO,KAAK,KAAK,KAAK,OAAO;AAAA,MACzB,MAAArqB;AAAA,MACA,MAAMqqB,EAAI;AAAA,MACV,QAAQA;AAAA,IACpB,CAAS;AAAA,EACL;AAAA,EACA,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACO,MAAMmD,WAAoB1B,GAAQ;AAAA,EACrC,OAAOC,GAAO;AACV,UAAM,EAAE,QAAAvB,GAAQ,KAAAH,EAAG,IAAK,KAAK,oBAAoB0B,CAAK;AACtD,QAAI1B,EAAI,OAAO;AAqBX,cApBoB,YAAY;AAC5B,cAAM8L,IAAW,MAAM,KAAK,KAAK,GAAG,YAAY;AAAA,UAC5C,MAAM9L,EAAI;AAAA,UACV,MAAMA,EAAI;AAAA,UACV,QAAQA;AAAA,QAC5B,CAAiB;AACD,eAAI8L,EAAS,WAAW,YACbxL,KACPwL,EAAS,WAAW,WACpB3L,EAAO,MAAK,GACLQ,GAAMmL,EAAS,KAAK,KAGpB,KAAK,KAAK,IAAI,YAAY;AAAA,UAC7B,MAAMA,EAAS;AAAA,UACf,MAAM9L,EAAI;AAAA,UACV,QAAQA;AAAA,QAChC,CAAqB;AAAA,MAET,GACkB;AAEjB;AACD,YAAM8L,IAAW,KAAK,KAAK,GAAG,WAAW;AAAA,QACrC,MAAM9L,EAAI;AAAA,QACV,MAAMA,EAAI;AAAA,QACV,QAAQA;AAAA,MACxB,CAAa;AACD,aAAI8L,EAAS,WAAW,YACbxL,KACPwL,EAAS,WAAW,WACpB3L,EAAO,MAAK,GACL;AAAA,QACH,QAAQ;AAAA,QACR,OAAO2L,EAAS;AAAA,MACpC,KAGuB,KAAK,KAAK,IAAI,WAAW;AAAA,QAC5B,MAAMA,EAAS;AAAA,QACf,MAAM9L,EAAI;AAAA,QACV,QAAQA;AAAA,MAC5B,CAAiB;AAAA,IAET;AAAA,EACJ;AAAA,EACA,OAAO,OAAO52B,GAAGE,GAAG;AAChB,WAAO,IAAI65B,GAAY;AAAA,MACnB,IAAI/5B;AAAA,MACJ,KAAKE;AAAA,MACL,UAAU24B,GAAsB;AAAA,IAC5C,CAAS;AAAA,EACL;AACJ;AACO,MAAMmB,WAAoB3B,GAAQ;AAAA,EACrC,OAAOC,GAAO;AACV,UAAMlrB,IAAS,KAAK,KAAK,UAAU,OAAOkrB,CAAK,GACzCrR,IAAS,CAAC1a,OACRorB,GAAQprB,CAAI,MACZA,EAAK,QAAQ,OAAO,OAAOA,EAAK,KAAK,IAElCA;AAEX,WAAOqrB,GAAQxqB,CAAM,IAAIA,EAAO,KAAK,CAACb,MAAS0a,EAAO1a,CAAI,CAAC,IAAI0a,EAAO7Z,CAAM;AAAA,EAChF;AAAA,EACA,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA4sB,GAAY,SAAS,CAACn3B,GAAMszB,MACjB,IAAI6D,GAAY;AAAA,EACnB,WAAWn3B;AAAA,EACX,UAAUg2B,GAAsB;AAAA,EAChC,GAAGb,GAAoB7B,CAAM;AACrC,CAAK;AAmDE,IAAI0C;AAAA,CACV,SAAUA,GAAuB;AAC9B,EAAAA,EAAsB,YAAe,aACrCA,EAAsB,YAAe,aACrCA,EAAsB,SAAY,UAClCA,EAAsB,YAAe,aACrCA,EAAsB,aAAgB,cACtCA,EAAsB,UAAa,WACnCA,EAAsB,YAAe,aACrCA,EAAsB,eAAkB,gBACxCA,EAAsB,UAAa,WACnCA,EAAsB,SAAY,UAClCA,EAAsB,aAAgB,cACtCA,EAAsB,WAAc,YACpCA,EAAsB,UAAa,WACnCA,EAAsB,WAAc,YACpCA,EAAsB,YAAe,aACrCA,EAAsB,WAAc,YACpCA,EAAsB,wBAA2B,yBACjDA,EAAsB,kBAAqB,mBAC3CA,EAAsB,WAAc,YACpCA,EAAsB,YAAe,aACrCA,EAAsB,SAAY,UAClCA,EAAsB,SAAY,UAClCA,EAAsB,cAAiB,eACvCA,EAAsB,UAAa,WACnCA,EAAsB,aAAgB,cACtCA,EAAsB,UAAa,WACnCA,EAAsB,aAAgB,cACtCA,EAAsB,gBAAmB,iBACzCA,EAAsB,cAAiB,eACvCA,EAAsB,cAAiB,eACvCA,EAAsB,aAAgB,cACtCA,EAAsB,WAAc,YACpCA,EAAsB,aAAgB,cACtCA,EAAsB,aAAgB,cACtCA,EAAsB,cAAiB,eACvCA,EAAsB,cAAiB;AAC3C,GAAGA,OAA0BA,KAAwB,CAAA,EAAG;AAUxD,MAAM8J,KAAavG,GAAU,QAIvBwG,KAAcnF,GAAW;AAObS,GAAS;AAETjF,GAAS;AAC3B,MAAM4J,KAAavE,GAAU;AAEXlF,GAAS;AAEFE,GAAgB;AACvBmF,GAAS;AAOVgD,GAAQ;AAELvI,GAAW;AAEVH,GAAY;AACZC,GAAY;ACxlH1B,MAAM8J,KAAYC,GAAE,EACxB,IAAI,GAAG,qBAAqB,EAC5B,IAAI,IAAI,qCAAqC,EAC7C,MAAM,mBAAmB,wDAAwD;AAsC7E,SAASC,GAAoB1yB,GAAmC;AACrE,MAAI,CAACA,EAAS,QAAO,CAAC,EAAE,MAAM,QAAQ,SAAS,IAAI;AAEnD,QAAM2yB,IAAe;AAGrB,SAFc3yB,EAAQ,MAAM2yB,CAAY,EAE3B,IAAI,CAACC,GAAM10B,MAAU;AAEhC,QAAIA,IAAQ,MAAM;AAChB,aAAO,EAAE,MAAM,QAAQ,SAAS00B,EAAA;AAIlC,QAAI;AACF,aAAAJ,GAAU,MAAMI,CAAI,GACb,EAAE,MAAM,WAAW,SAASA,EAAA;AAAA,IACrC,QAAQ;AAEN,aAAO,EAAE,MAAM,QAAQ,SAAS,IAAIA,CAAI,GAAA;AAAA,IAC1C;AAAA,EACF,CAAC;AACH;ACvDA,MAAMC,KAA0C,CAAC;AAAA,EAC/C,UAAA73B;AAAA,EACA,WAAAiC,IAAY;AAAA,EACZ,YAAA61B;AACF,MAAM;AACJ,QAAMC,IAAWC,GAAA,GAEXC,IAAiB,CAAChQ,MAAgB;AACtC,IAAI6P,IACFA,EAAW7P,CAAG,IAEd8P,EAAS,SAAS9P,CAAG,EAAE;AAAA,EAE3B,GAEMiQ,IAAWR,GAAoB13B,CAAQ;AAE7C,+BACG,QAAA,EAAK,WAAAiC,GACH,YAAS,IAAI,CAACk2B,GAAyBj1B,MAClCi1B,EAAQ,SAAS,YAEjB73B,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MAEC,SAAS,CAACxL,MAAM;AACd,QAAAA,EAAE,eAAA,GACFA,EAAE,gBAAA,GACFmjC,EAAeE,EAAQ,OAAO;AAAA,MAChC;AAAA,MACA,WAAU;AAAA,MACX,UAAA;AAAA,QAAA;AAAA,QACGA,EAAQ;AAAA,MAAA;AAAA,IAAA;AAAA,IARL,OAAOj1B,CAAK;AAAA,EAAA,0BAYf,QAAA,EAA4B,UAAAi1B,EAAQ,QAAA,GAA1B,QAAQj1B,CAAK,EAAqB,CACrD,EAAA,CACH;AAEJ;;;AC1CA,MAAIk1B,IAAS,OAAO,SAAW,MAC5B,SAEA,OAAO,oBAAsB,OAAe,gBAAgB,oBAC1D,OACA,CAAA;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,MAAIC,IAAS,SAAUD,GAAO;AAG7B,QAAIE,IAAO,2CACPC,IAAW,GAGXC,IAAmB,CAAA,GAGnBnd,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBP,QAAQ+c,EAAM,SAASA,EAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBnC,6BAA6BA,EAAM,SAASA,EAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWxD,MAAM;AAAA,QACL,QAAQ,SAASK,EAAOC,GAAQ;AAC/B,iBAAIA,aAAkBC,IACd,IAAIA,EAAMD,EAAO,MAAMD,EAAOC,EAAO,OAAO,GAAGA,EAAO,KAAK,IACxD,MAAM,QAAQA,CAAM,IACvBA,EAAO,IAAID,CAAM,IAEjBC,EAAO,QAAQ,MAAM,OAAO,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,WAAW,GAAG;AAAA,QAEtF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAkBG,MAAM,SAAUpvB,GAAG;AAClB,iBAAO,OAAO,UAAU,SAAS,KAAKA,CAAC,EAAE,MAAM,GAAG,EAAE;AAAA,QACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQG,OAAO,SAAUqf,GAAK;AACrB,iBAAKA,EAAI,QACR,OAAO,eAAeA,GAAK,QAAQ,EAAE,OAAO,EAAE4P,GAAU,GAElD5P,EAAI;AAAA,QACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAYG,OAAO,SAASiQ,EAAUtvB,GAAGuvB,GAAS;AACrC,UAAAA,IAAUA,KAAW,CAAA;AAErB,cAAIhb,GAAWib;AACf,kBAAQzd,EAAE,KAAK,KAAK/R,CAAC,GAAC;AAAA,YACrB,KAAK;AAEJ,kBADAwvB,IAAKzd,EAAE,KAAK,MAAM/R,CAAC,GACfuvB,EAAQC,CAAE;AACb,uBAAOD,EAAQC,CAAE;AAElB,cAAAjb;AAAA,cAA4C,CAAA,GAC5Cgb,EAAQC,CAAE,IAAIjb;AAEd,uBAAStgB,KAAO+L;AACf,gBAAIA,EAAE,eAAe/L,CAAG,MACvBsgB,EAAMtgB,CAAG,IAAIq7B,EAAUtvB,EAAE/L,CAAG,GAAGs7B,CAAO;AAIxC;AAAA;AAAA,gBAA2Bhb;AAAA;AAAA,YAE5B,KAAK;AAEJ,qBADAib,IAAKzd,EAAE,KAAK,MAAM/R,CAAC,GACfuvB,EAAQC,CAAE,IACND,EAAQC,CAAE,KAElBjb,IAAQ,CAAA,GACRgb,EAAQC,CAAE,IAAIjb;AAAA;AAAA,cAE2BvU,EAAK,QAAQ,SAAUnD,GAAGpH,GAAG;AACrE,gBAAA8e,EAAM9e,CAAC,IAAI65B,EAAUzyB,GAAG0yB,CAAO;AAAA,cACtC,CAAO;AAAA,cAE0Bhb;AAAA,YAE5B;AACC,qBAAOvU;AAAA;QAEb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAUG,aAAa,SAAUlO,GAAS;AAC/B,iBAAOA,KAAS;AACf,gBAAI/G,IAAIikC,EAAK,KAAKl9B,EAAQ,SAAS;AACnC,gBAAI/G;AACH,qBAAOA,EAAE,CAAC,EAAE,YAAW;AAExB,YAAA+G,IAAUA,EAAQ;AAAA,UACvB;AACI,iBAAO;AAAA,QACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASG,aAAa,SAAUA,GAAS29B,GAAU;AAGzC,UAAA39B,EAAQ,YAAYA,EAAQ,UAAU,QAAQ,OAAOk9B,GAAM,IAAI,GAAG,EAAE,GAIpEl9B,EAAQ,UAAU,IAAI,cAAc29B,CAAQ;AAAA,QAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASG,eAAe,WAAY;AAC1B,cAAI,OAAO,WAAa;AACvB,mBAAO;AAER,cAAI,SAAS,iBAAiB,SAAS,cAAc,YAAY;AAChE;AAAA;AAAA,cAA2B,SAAS;AAAA;AAOrC,cAAI;AACH,kBAAM,IAAI,MAAK;AAAA,UACpB,SAAaj9B,GAAK;AAQb,gBAAI8E,KAAO,qCAAqC,KAAK9E,EAAI,KAAK,KAAK,CAAA,GAAI,CAAC;AACxE,gBAAI8E,GAAK;AACR,kBAAIo4B,IAAU,SAAS,qBAAqB,QAAQ;AACpD,uBAASj6B,KAAKi6B;AACb,oBAAIA,EAAQj6B,CAAC,EAAE,OAAO6B;AACrB,yBAAOo4B,EAAQj6B,CAAC;AAAA,YAGxB;AACK,mBAAO;AAAA,UACZ;AAAA,QACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAqBG,UAAU,SAAU3D,GAAS6G,GAAWg3B,GAAmB;AAG1D,mBAFIC,IAAK,QAAQj3B,GAEV7G,KAAS;AACf,gBAAIwT,IAAYxT,EAAQ;AACxB,gBAAIwT,EAAU,SAAS3M,CAAS;AAC/B,qBAAO;AAER,gBAAI2M,EAAU,SAASsqB,CAAE;AACxB,qBAAO;AAER,YAAA99B,IAAUA,EAAQ;AAAA,UACvB;AACI,iBAAO,CAAC,CAAC69B;AAAA,QACb;AAAA;;;;;;;;MAUE,WAAW;AAAA;AAAA;AAAA;AAAA,QAIV,OAAOT;AAAA,QACP,WAAWA;AAAA,QACX,MAAMA;AAAA,QACN,KAAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QA8BL,QAAQ,SAAUM,GAAIK,GAAO;AAC5B,cAAIb,IAAOjd,EAAE,KAAK,MAAMA,EAAE,UAAUyd,CAAE,CAAC;AAEvC,mBAASv7B,KAAO47B;AACf,YAAAb,EAAK/6B,CAAG,IAAI47B,EAAM57B,CAAG;AAGtB,iBAAO+6B;AAAA,QACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QA6EG,cAAc,SAAUc,GAAQC,GAAQC,GAAQhZ,GAAM;AACrD,UAAAA,IAAOA;AAAA,UAA4BjF,EAAE;AACrC,cAAIke,IAAUjZ,EAAK8Y,CAAM,GAErBI,IAAM,CAAA;AAEV,mBAASC,KAASF;AACjB,gBAAIA,EAAQ,eAAeE,CAAK,GAAG;AAElC,kBAAIA,KAASJ;AACZ,yBAASK,KAAYJ;AACpB,kBAAIA,EAAO,eAAeI,CAAQ,MACjCF,EAAIE,CAAQ,IAAIJ,EAAOI,CAAQ;AAMlC,cAAKJ,EAAO,eAAeG,CAAK,MAC/BD,EAAIC,CAAK,IAAIF,EAAQE,CAAK;AAAA,YAEjC;AAGI,cAAIE,IAAMrZ,EAAK8Y,CAAM;AACrB,iBAAA9Y,EAAK8Y,CAAM,IAAII,GAGfne,EAAE,UAAU,IAAIA,EAAE,WAAW,SAAU9d,GAAKpB,GAAO;AAClD,YAAIA,MAAUw9B,KAAOp8B,KAAO67B,MAC3B,KAAK77B,CAAG,IAAIi8B;AAAA,UAElB,CAAK,GAEMA;AAAA,QACX;AAAA;AAAA,QAGG,KAAK,SAASI,EAAItwB,GAAGuwB,GAAUtiC,GAAMshC,GAAS;AAC7C,UAAAA,IAAUA,KAAW,CAAA;AAErB,cAAIiB,IAAQze,EAAE,KAAK;AAEnB,mBAAStc,KAAKuK;AACb,gBAAIA,EAAE,eAAevK,CAAC,GAAG;AACxB,cAAA86B,EAAS,KAAKvwB,GAAGvK,GAAGuK,EAAEvK,CAAC,GAAGxH,KAAQwH,CAAC;AAEnC,kBAAIgN,IAAWzC,EAAEvK,CAAC,GACdg7B,IAAe1e,EAAE,KAAK,KAAKtP,CAAQ;AAEvC,cAAIguB,MAAiB,YAAY,CAAClB,EAAQiB,EAAM/tB,CAAQ,CAAC,KACxD8sB,EAAQiB,EAAM/tB,CAAQ,CAAC,IAAI,IAC3B6tB,EAAI7tB,GAAU8tB,GAAU,MAAMhB,CAAO,KAC3BkB,MAAiB,WAAW,CAAClB,EAAQiB,EAAM/tB,CAAQ,CAAC,MAC9D8sB,EAAQiB,EAAM/tB,CAAQ,CAAC,IAAI,IAC3B6tB,EAAI7tB,GAAU8tB,GAAU96B,GAAG85B,CAAO;AAAA,YAEzC;AAAA,QAEA;AAAA;MAGE,SAAS,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcT,cAAc,SAAUmB,GAAOH,GAAU;AACxC,QAAAxe,EAAE,kBAAkB,UAAU2e,GAAOH,CAAQ;AAAA,MAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiBE,mBAAmB,SAAU10B,GAAW60B,GAAOH,GAAU;AACxD,YAAII,IAAM;AAAA,UACT,UAAUJ;AAAA,UACV,WAAW10B;AAAA,UACX,UAAU;AAAA,QACd;AAEG,QAAAkW,EAAE,MAAM,IAAI,uBAAuB4e,CAAG,GAEtCA,EAAI,WAAW,MAAM,UAAU,MAAM,MAAMA,EAAI,UAAU,iBAAiBA,EAAI,QAAQ,CAAC,GAEvF5e,EAAE,MAAM,IAAI,iCAAiC4e,CAAG;AAEhD,iBAASl7B,IAAI,GAAG3D,GAAUA,IAAU6+B,EAAI,SAASl7B,GAAG;AACnD,UAAAsc,EAAE,iBAAiBjgB,GAAS4+B,MAAU,IAAMC,EAAI,QAAQ;AAAA,MAE5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA8BE,kBAAkB,SAAU7+B,GAAS4+B,GAAOH,GAAU;AAErD,YAAId,IAAW1d,EAAE,KAAK,YAAYjgB,CAAO,GACrCm+B,IAAUle,EAAE,UAAU0d,CAAQ;AAGlC,QAAA1d,EAAE,KAAK,YAAYjgB,GAAS29B,CAAQ;AAGpC,YAAIxT,IAASnqB,EAAQ;AACrB,QAAImqB,KAAUA,EAAO,SAAS,YAAW,MAAO,SAC/ClK,EAAE,KAAK,YAAYkK,GAAQwT,CAAQ;AAGpC,YAAImB,IAAO9+B,EAAQ,aAEf6+B,IAAM;AAAA,UACT,SAAS7+B;AAAA,UACT,UAAU29B;AAAA,UACV,SAASQ;AAAA,UACT,MAAMW;AAAA,QACV;AAEG,iBAASC,EAAsBC,GAAiB;AAC/C,UAAAH,EAAI,kBAAkBG,GAEtB/e,EAAE,MAAM,IAAI,iBAAiB4e,CAAG,GAEhCA,EAAI,QAAQ,YAAYA,EAAI,iBAE5B5e,EAAE,MAAM,IAAI,mBAAmB4e,CAAG,GAClC5e,EAAE,MAAM,IAAI,YAAY4e,CAAG,GAC3BJ,KAAYA,EAAS,KAAKI,EAAI,OAAO;AAAA,QACzC;AAUG,YARA5e,EAAE,MAAM,IAAI,uBAAuB4e,CAAG,GAGtC1U,IAAS0U,EAAI,QAAQ,eACjB1U,KAAUA,EAAO,SAAS,YAAW,MAAO,SAAS,CAACA,EAAO,aAAa,UAAU,KACvFA,EAAO,aAAa,YAAY,GAAG,GAGhC,CAAC0U,EAAI,MAAM;AACd,UAAA5e,EAAE,MAAM,IAAI,YAAY4e,CAAG,GAC3BJ,KAAYA,EAAS,KAAKI,EAAI,OAAO;AACrC;AAAA,QACJ;AAIG,YAFA5e,EAAE,MAAM,IAAI,oBAAoB4e,CAAG,GAE/B,CAACA,EAAI,SAAS;AACjB,UAAAE,EAAsB9e,EAAE,KAAK,OAAO4e,EAAI,IAAI,CAAC;AAC7C;AAAA,QACJ;AAEG,YAAID,KAAS5B,EAAM,QAAQ;AAC1B,cAAIiC,IAAS,IAAI,OAAOhf,EAAE,QAAQ;AAElC,UAAAgf,EAAO,YAAY,SAAUC,GAAK;AACjC,YAAAH,EAAsBG,EAAI,IAAI;AAAA,UACnC,GAEID,EAAO,YAAY,KAAK,UAAU;AAAA,YACjC,UAAUJ,EAAI;AAAA,YACd,MAAMA,EAAI;AAAA,YACV,gBAAgB;AAAA,WAChB,CAAC;AAAA,QACN;AACI,UAAAE,EAAsB9e,EAAE,UAAU4e,EAAI,MAAMA,EAAI,SAASA,EAAI,QAAQ,CAAC;AAAA,MAE1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBE,WAAW,SAAUxb,GAAM8a,GAASR,GAAU;AAC7C,YAAIkB,IAAM;AAAA,UACT,MAAMxb;AAAA,UACN,SAAS8a;AAAA,UACT,UAAUR;AAAA,QACd;AAEG,YADA1d,EAAE,MAAM,IAAI,mBAAmB4e,CAAG,GAC9B,CAACA,EAAI;AACR,gBAAM,IAAI,MAAM,mBAAmBA,EAAI,WAAW,mBAAmB;AAEtE,eAAAA,EAAI,SAAS5e,EAAE,SAAS4e,EAAI,MAAMA,EAAI,OAAO,GAC7C5e,EAAE,MAAM,IAAI,kBAAkB4e,CAAG,GAC1BtB,EAAM,UAAUtd,EAAE,KAAK,OAAO4e,EAAI,MAAM,GAAGA,EAAI,QAAQ;AAAA,MACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA0BE,UAAU,SAAUxb,GAAM8a,GAAS;AAClC,YAAIlE,IAAOkE,EAAQ;AACnB,YAAIlE,GAAM;AACT,mBAASoE,KAASpE;AACjB,YAAAkE,EAAQE,CAAK,IAAIpE,EAAKoE,CAAK;AAG5B,iBAAOF,EAAQ;AAAA,QACnB;AAEG,YAAIgB,IAAY,IAAIC,EAAU;AAC9B,eAAAC,EAASF,GAAWA,EAAU,MAAM9b,CAAI,GAExCic,EAAajc,GAAM8b,GAAWhB,GAASgB,EAAU,MAAM,CAAC,GAEjDI,EAAQJ,CAAS;AAAA,MAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOE,OAAO;AAAA,QACN,KAAK,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAcL,KAAK,SAAUjhC,GAAMugC,GAAU;AAC9B,cAAI7X,IAAQ3G,EAAE,MAAM;AAEpB,UAAA2G,EAAM1oB,CAAI,IAAI0oB,EAAM1oB,CAAI,KAAK,CAAA,GAE7B0oB,EAAM1oB,CAAI,EAAE,KAAKugC,CAAQ;AAAA,QAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAWG,KAAK,SAAUvgC,GAAM2gC,GAAK;AACzB,cAAIW,IAAYvf,EAAE,MAAM,IAAI/hB,CAAI;AAEhC,cAAI,GAACshC,KAAa,CAACA,EAAU;AAI7B,qBAAS77B,IAAI,GAAG86B,GAAWA,IAAWe,EAAU77B,GAAG;AAClD,cAAA86B,EAASI,CAAG;AAAA,QAEjB;AAAA;MAGE,OAAOtB;AAAA,IACT;AACC,IAAAP,EAAM,QAAQ/c;AAmBd,aAASsd,EAAMphC,GAAMyN,GAAS61B,GAAOC,GAAY;AAUhD,WAAK,OAAOvjC,GASZ,KAAK,UAAUyN,GAQf,KAAK,QAAQ61B,GAEb,KAAK,UAAUC,KAAc,IAAI,SAAS;AAAA,IAC5C;AA8BC,IAAAnC,EAAM,YAAY,SAASoC,EAAUzxB,GAAGyvB,GAAU;AACjD,UAAI,OAAOzvB,KAAK;AACf,eAAOA;AAER,UAAI,MAAM,QAAQA,CAAC,GAAG;AACrB,YAAI7O,IAAI;AACR,eAAA6O,EAAE,QAAQ,SAAUxU,GAAG;AACtB,UAAA2F,KAAKsgC,EAAUjmC,GAAGikC,CAAQ;AAAA,QAC9B,CAAI,GACMt+B;AAAA,MACV;AAEE,UAAIw/B,IAAM;AAAA,QACT,MAAM3wB,EAAE;AAAA,QACR,SAASyxB,EAAUzxB,EAAE,SAASyvB,CAAQ;AAAA,QACtC,KAAK;AAAA,QACL,SAAS,CAAC,SAASzvB,EAAE,IAAI;AAAA,QACzB,YAAY,CAAA;AAAA,QACZ,UAAUyvB;AAAA,MACb,GAEMiC,IAAU1xB,EAAE;AAChB,MAAI0xB,MACC,MAAM,QAAQA,CAAO,IACxB,MAAM,UAAU,KAAK,MAAMf,EAAI,SAASe,CAAO,IAE/Cf,EAAI,QAAQ,KAAKe,CAAO,IAI1B3f,EAAE,MAAM,IAAI,QAAQ4e,CAAG;AAEvB,UAAI7S,IAAa;AACjB,eAAS9tB,KAAQ2gC,EAAI;AACpB,QAAA7S,KAAc,MAAM9tB,IAAO,QAAQ2gC,EAAI,WAAW3gC,CAAI,KAAK,IAAI,QAAQ,MAAM,QAAQ,IAAI;AAG1F,aAAO,MAAM2gC,EAAI,MAAM,aAAaA,EAAI,QAAQ,KAAK,GAAG,IAAI,MAAM7S,IAAa,MAAM6S,EAAI,UAAU,OAAOA,EAAI,MAAM;AAAA,IACtH;AASC,aAASgB,EAAaC,GAASC,GAAK1c,GAAM2c,GAAY;AACrD,MAAAF,EAAQ,YAAYC;AACpB,UAAIzhC,IAAQwhC,EAAQ,KAAKzc,CAAI;AAC7B,UAAI/kB,KAAS0hC,KAAc1hC,EAAM,CAAC,GAAG;AAEpC,YAAI2hC,IAAmB3hC,EAAM,CAAC,EAAE;AAChC,QAAAA,EAAM,SAAS2hC,GACf3hC,EAAM,CAAC,IAAIA,EAAM,CAAC,EAAE,MAAM2hC,CAAgB;AAAA,MAC7C;AACE,aAAO3hC;AAAA,IACT;AAgBC,aAASghC,EAAajc,GAAM8b,GAAWhB,GAAS+B,GAAWC,GAAUC,GAAS;AAC7E,eAAS/B,KAASF;AACjB,YAAI,GAACA,EAAQ,eAAeE,CAAK,KAAK,CAACF,EAAQE,CAAK,IAIpD;AAAA,cAAIgC,IAAWlC,EAAQE,CAAK;AAC5B,UAAAgC,IAAW,MAAM,QAAQA,CAAQ,IAAIA,IAAW,CAACA,CAAQ;AAEzD,mBAAS9kB,IAAI,GAAGA,IAAI8kB,EAAS,QAAQ,EAAE9kB,GAAG;AACzC,gBAAI6kB,KAAWA,EAAQ,SAAS/B,IAAQ,MAAM9iB;AAC7C;AAGD,gBAAI+kB,IAAaD,EAAS9kB,CAAC,GACvByiB,IAASsC,EAAW,QACpBN,IAAa,CAAC,CAACM,EAAW,YAC1BC,IAAS,CAAC,CAACD,EAAW,QACtBb,IAAQa,EAAW;AAEvB,gBAAIC,KAAU,CAACD,EAAW,QAAQ,QAAQ;AAEzC,kBAAIE,IAAQF,EAAW,QAAQ,SAAQ,EAAG,MAAM,WAAW,EAAE,CAAC;AAC9D,cAAAA,EAAW,UAAU,OAAOA,EAAW,QAAQ,QAAQE,IAAQ,GAAG;AAAA,YACvE;AAKI,qBAFIV,IAAUQ,EAAW,WAAWA,GAG/BnV,IAAc+U,EAAU,MAAMH,IAAMI,GACxChV,MAAgBgU,EAAU,QAItB,EAAAiB,KAAWL,KAAOK,EAAQ,QAH9BL,KAAO5U,EAAY,MAAM,QAAQA,IAAcA,EAAY,MAC1D;AAMD,kBAAIsV,IAAMtV,EAAY;AAEtB,kBAAIgU,EAAU,SAAS9b,EAAK;AAE3B;AAGD,kBAAI,EAAAod,aAAelD,IAInB;AAAA,oBAAImD,KAAc,GACdpiC;AAEJ,oBAAIiiC,GAAQ;AAEX,sBADAjiC,KAAQuhC,EAAaC,GAASC,GAAK1c,GAAM2c,CAAU,GAC/C,CAAC1hC,MAASA,GAAM,SAAS+kB,EAAK;AACjC;AAGD,sBAAIsd,KAAOriC,GAAM,OACbsiC,KAAKtiC,GAAM,QAAQA,GAAM,CAAC,EAAE,QAC5BnF,KAAI4mC;AAIR,uBADA5mC,MAAKgyB,EAAY,MAAM,QAChBwV,MAAQxnC;AACd,oBAAAgyB,IAAcA,EAAY,MAC1BhyB,MAAKgyB,EAAY,MAAM;AAOxB,sBAJAhyB,MAAKgyB,EAAY,MAAM,QACvB4U,IAAM5mC,IAGFgyB,EAAY,iBAAiBoS;AAChC;AAID,2BACKxkC,KAAIoyB,GACRpyB,OAAMomC,EAAU,SAAShmC,KAAIynC,MAAM,OAAO7nC,GAAE,SAAU,WACtDA,KAAIA,GAAE;AAEN,oBAAA2nC,MACAvnC,MAAKJ,GAAE,MAAM;AAEd,kBAAA2nC,MAGAD,IAAMpd,EAAK,MAAM0c,GAAK5mC,EAAC,GACvBmF,GAAM,SAASyhC;AAAA,gBACrB,WACMzhC,KAAQuhC,EAAaC,GAAS,GAAGW,GAAKT,CAAU,GAC5C,CAAC1hC;AACJ;AAKF,oBAAIqiC,KAAOriC,GAAM,OACbuiC,KAAWviC,GAAM,CAAC,GAClB2/B,KAASwC,EAAI,MAAM,GAAGE,EAAI,GAC1BG,KAAQL,EAAI,MAAME,KAAOE,GAAS,MAAM,GAExCE,KAAQhB,IAAMU,EAAI;AACtB,gBAAIL,KAAWW,KAAQX,EAAQ,UAC9BA,EAAQ,QAAQW;AAGjB,oBAAIC,KAAa7V,EAAY;AAE7B,gBAAI8S,OACH+C,KAAa3B,EAASF,GAAW6B,IAAY/C,EAAM,GACnD8B,KAAO9B,GAAO,SAGfgD,EAAY9B,GAAW6B,IAAYN,EAAW;AAE9C,oBAAIQ,KAAU,IAAI3D,EAAMc,GAAOL,IAAS/d,EAAE,SAAS4gB,IAAU7C,CAAM,IAAI6C,IAAUpB,GAAOoB,EAAQ;AAOhG,oBANA1V,IAAckU,EAASF,GAAW6B,IAAYE,EAAO,GAEjDJ,MACHzB,EAASF,GAAWhU,GAAa2V,EAAK,GAGnCJ,KAAc,GAAG;AAKpB,sBAAIS,KAAgB;AAAA,oBACnB,OAAO9C,IAAQ,MAAM9iB;AAAA,oBACrB,OAAOwlB;AAAA,kBACd;AACM,kBAAAzB,EAAajc,GAAM8b,GAAWhB,GAAShT,EAAY,MAAM4U,GAAKoB,EAAa,GAGvEf,KAAWe,GAAc,QAAQf,EAAQ,UAC5CA,EAAQ,QAAQe,GAAc;AAAA,gBAErC;AAAA;AAAA,YACA;AAAA,UACA;AAAA;AAAA,IAEA;AAeC,aAAS/B,IAAa;AAErB,UAAIgC,IAAO,EAAE,OAAO,MAAM,MAAM,MAAM,MAAM,KAAI,GAE5CC,IAAO,EAAE,OAAO,MAAM,MAAMD,GAAM,MAAM,KAAI;AAChD,MAAAA,EAAK,OAAOC,GAGZ,KAAK,OAAOD,GAEZ,KAAK,OAAOC,GACZ,KAAK,SAAS;AAAA,IAChB;AAWC,aAAShC,EAASiC,GAAM59B,GAAM3C,GAAO;AAEpC,UAAIwgC,IAAO79B,EAAK,MAEZ89B,IAAU,EAAE,OAAOzgC,GAAO,MAAM2C,GAAM,MAAM69B,EAAI;AACpD,aAAA79B,EAAK,OAAO89B,GACZD,EAAK,OAAOC,GACZF,EAAK,UAEEE;AAAA,IACT;AASC,aAASP,EAAYK,GAAM59B,GAAM+9B,GAAO;AAEvC,eADIF,IAAO79B,EAAK,MACPC,IAAI,GAAGA,IAAI89B,KAASF,MAASD,EAAK,MAAM39B;AAChD,QAAA49B,IAAOA,EAAK;AAEb,MAAA79B,EAAK,OAAO69B,GACZA,EAAK,OAAO79B,GACZ49B,EAAK,UAAU39B;AAAA,IACjB;AAMC,aAAS47B,EAAQ+B,GAAM;AAGtB,eAFIjf,IAAQ,CAAA,GACR3e,IAAO49B,EAAK,KAAK,MACd59B,MAAS49B,EAAK;AACpB,QAAAjf,EAAM,KAAK3e,EAAK,KAAK,GACrBA,IAAOA,EAAK;AAEb,aAAO2e;AAAA,IACT;AAGC,QAAI,CAAC2a,EAAM;AACV,aAAKA,EAAM,qBAKN/c,EAAE,+BAEN+c,EAAM,iBAAiB,WAAW,SAAUkC,GAAK;AAChD,YAAI9P,IAAU,KAAK,MAAM8P,EAAI,IAAI,GAC7BhC,IAAO9N,EAAQ,UACf0P,IAAO1P,EAAQ,MACfsS,IAAiBtS,EAAQ;AAE7B,QAAA4N,EAAM,YAAY/c,EAAE,UAAU6e,GAAM7e,EAAE,UAAUid,CAAI,GAAGA,CAAI,CAAC,GACxDwE,KACH1E,EAAM,MAAK;AAAA,MAEhB,GAAM,EAAK,IAGF/c;AAIR,QAAI0hB,IAAS1hB,EAAE,KAAK,cAAa;AAEjC,IAAI0hB,MACH1hB,EAAE,WAAW0hB,EAAO,KAEhBA,EAAO,aAAa,aAAa,MACpC1hB,EAAE,SAAS;AAIb,aAAS2hB,IAAiC;AACzC,MAAK3hB,EAAE,UACNA,EAAE,aAAY;AAAA,IAEjB;AAEC,QAAI,CAACA,EAAE,QAAQ;AAOd,UAAI4hB,IAAa,SAAS;AAC1B,MAAIA,MAAe,aAAaA,MAAe,iBAAiBF,KAAUA,EAAO,QAChF,SAAS,iBAAiB,oBAAoBC,CAA8B,IAExE,OAAO,wBACV,OAAO,sBAAsBA,CAA8B,IAE3D,OAAO,WAAWA,GAAgC,EAAE;AAAA,IAGxD;AAEC,WAAO3hB;AAAA,EAER,EAAE+c,CAAK;AAEP,EAAqC8E,EAAO,YAC3CA,EAAA,UAAiB7E,IAId,OAAO8E,KAAW,QACrBA,GAAO,QAAQ9E,IAyDhBA,EAAM,UAAU,SAAS;AAAA,IACxB,SAAW;AAAA,MACV,SAAS;AAAA,MACT,QAAQ;AAAA;IAET,QAAU;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA;IAET,SAAW;AAAA;AAAA,MAEV,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,QACP,mBAAmB;AAAA,UAClB,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,QAAQ;AAAA,UACR,QAAQ;AAAA;AAAA;QAET,QAAU;AAAA,UACT,SAAS;AAAA,UACT,QAAQ;AAAA;QAET,aAAe;AAAA,QACf,eAAe;AAAA,QACf,MAAQ;AAAA;;IAGV,OAAS;AAAA,MACR,SAAS;AAAA,MACT,QAAQ;AAAA;IAET,KAAO;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,QACP,KAAO;AAAA,UACN,SAAS;AAAA,UACT,QAAQ;AAAA,YACP,aAAe;AAAA,YACf,WAAa;AAAA;;QAGf,gBAAgB,CAAA;AAAA,QAChB,cAAc;AAAA,UACb,SAAS;AAAA,UACT,QAAQ;AAAA,YACP,aAAe;AAAA,cACd;AAAA,gBACC,SAAS;AAAA,gBACT,OAAO;AAAA;cAER;AAAA,gBACC,SAAS;AAAA,gBACT,YAAY;AAAA;;;;QAKhB,aAAe;AAAA,QACf,aAAa;AAAA,UACZ,SAAS;AAAA,UACT,QAAQ;AAAA,YACP,WAAa;AAAA;;;;IAMjB,QAAU;AAAA,MACT;AAAA,QACC,SAAS;AAAA,QACT,OAAO;AAAA;MAER;AAAA;EAEF,GAEAA,EAAM,UAAU,OAAO,IAAO,OAAO,YAAY,EAAE,OAAO,SACzDA,EAAM,UAAU,OAAO,QACxBA,EAAM,UAAU,OAAO,QAAW,OAAO,iBAAiB,EAAE,SAASA,EAAM,UAAU,QAGrFA,EAAM,MAAM,IAAI,QAAQ,SAAU4B,GAAK;AAEtC,IAAIA,EAAI,SAAS,aAChBA,EAAI,WAAW,QAAWA,EAAI,QAAQ,QAAQ,SAAS,GAAG;AAAA,EAE5D,CAAC,GAED,OAAO,eAAe5B,EAAM,UAAU,OAAO,KAAK,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAY/D,OAAO,SAAoB7S,GAAS8S,GAAM;AACzC,UAAI8E,IAAsB,CAAA;AAC1B,MAAAA,EAAoB,cAAc9E,CAAI,IAAI;AAAA,QACzC,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQD,EAAM,UAAUC,CAAI;AAAA,MAC/B,GACE8E,EAAoB,QAAW;AAE/B,UAAIhE,IAAS;AAAA,QACZ,kBAAkB;AAAA,UACjB,SAAS;AAAA,UACT,QAAQgE;AAAA;MAEZ;AACE,MAAAhE,EAAO,cAAcd,CAAI,IAAI;AAAA,QAC5B,SAAS;AAAA,QACT,QAAQD,EAAM,UAAUC,CAAI;AAAA,MAC/B;AAEE,UAAI9K,IAAM,CAAA;AACV,MAAAA,EAAIhI,CAAO,IAAI;AAAA,QACd,SAAS,OAAO,wFAAwF,OAAO,QAAQ,OAAO,WAAY;AAAE,iBAAOA;AAAA,QAAQ,CAAE,GAAG,GAAG;AAAA,QACnK,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ4T;AAAA,MACX,GAEEf,EAAM,UAAU,aAAa,UAAU,SAAS7K,CAAG;AAAA,IACrD;AAAA,EACA,CAAC,GACD,OAAO,eAAe6K,EAAM,UAAU,OAAO,KAAK,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYjE,OAAO,SAAUgF,GAAU/E,GAAM;AAChC,MAAAD,EAAM,UAAU,OAAO,IAAI,OAAO,cAAc,EAAE,KAAK;AAAA,QACtD,SAAS;AAAA,UACR,aAAa,SAAS,QAAQgF,IAAW,MAAM,iDAAiD;AAAA,UAChG;AAAA;QAED,YAAY;AAAA,QACZ,QAAQ;AAAA,UACP,aAAa;AAAA,UACb,cAAc;AAAA,YACb,SAAS;AAAA,YACT,QAAQ;AAAA,cACP,OAAS;AAAA,gBACR,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,OAAO,CAAC/E,GAAM,cAAcA,CAAI;AAAA,gBAChC,QAAQD,EAAM,UAAUC,CAAI;AAAA;cAE7B,aAAe;AAAA,gBACd;AAAA,kBACC,SAAS;AAAA,kBACT,OAAO;AAAA;gBAER;AAAA;;;;MAKP,CAAG;AAAA,IACH;AAAA,EACA,CAAC,GAEDD,EAAM,UAAU,OAAOA,EAAM,UAAU,QACvCA,EAAM,UAAU,SAASA,EAAM,UAAU,QACzCA,EAAM,UAAU,MAAMA,EAAM,UAAU,QAEtCA,EAAM,UAAU,MAAMA,EAAM,UAAU,OAAO,UAAU,EAAE,GACzDA,EAAM,UAAU,OAAOA,EAAM,UAAU,KACvCA,EAAM,UAAU,OAAOA,EAAM,UAAU,KACvCA,EAAM,UAAU,MAAMA,EAAM,UAAU,KAOrC,SAAUA,GAAO;AAEjB,QAAI1oB,IAAS;AAEb,IAAA0oB,EAAM,UAAU,MAAM;AAAA,MACrB,SAAW;AAAA,MACX,QAAU;AAAA,QACT,SAAS,OAAO,eAAe,sBAAsB,SAAS,MAAM1oB,EAAO,SAAS,QAAQ,kBAAkB,MAAM;AAAA,QACpH,QAAQ;AAAA,UACP,MAAQ;AAAA,UACR,8BAA8B;AAAA,YAC7B,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,OAAO;AAAA;UAER,SAAW;AAAA,YACV,SAAS;AAAA,YACT,YAAY;AAAA;;;;MAKf,KAAO;AAAA;AAAA,QAEN,SAAS,OAAO,iBAAiBA,EAAO,SAAS,MAAM,8BAA8B,SAAS,QAAQ,GAAG;AAAA,QACzG,QAAQ;AAAA,QACR,QAAQ;AAAA,UACP,UAAY;AAAA,UACZ,aAAe;AAAA,UACf,QAAU;AAAA,YACT,SAAS,OAAO,MAAMA,EAAO,SAAS,GAAG;AAAA,YACzC,OAAO;AAAA;;;MAIV,UAAY;AAAA,QACX,SAAS,OAAO,sDAAuDA,EAAO,SAAS,eAAe;AAAA,QACtG,YAAY;AAAA;MAEb,QAAU;AAAA,QACT,SAASA;AAAA,QACT,QAAQ;AAAA;MAET,UAAY;AAAA,QACX,SAAS;AAAA,QACT,YAAY;AAAA;MAEb,WAAa;AAAA,MACb,UAAY;AAAA,QACX,SAAS;AAAA,QACT,YAAY;AAAA;MAEb,aAAe;AAAA,IACjB,GAEC0oB,EAAM,UAAU,IAAI,OAAU,OAAO,OAAOA,EAAM,UAAU;AAE5D,QAAIiF,IAASjF,EAAM,UAAU;AAC7B,IAAIiF,MACHA,EAAO,IAAI,WAAW,SAAS,KAAK,GACpCA,EAAO,IAAI,aAAa,SAAS,KAAK;AAAA,EAGxC,EAAEjF,CAAK,GAOPA,EAAM,UAAU,QAAQ;AAAA,IACvB,SAAW;AAAA,MACV;AAAA,QACC,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQ;AAAA;MAET;AAAA,QACC,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQ;AAAA;;IAGV,QAAU;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA;IAET,cAAc;AAAA,MACb,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,QAAQ;AAAA,QACP,aAAe;AAAA;;IAGjB,SAAW;AAAA,IACX,SAAW;AAAA,IACX,UAAY;AAAA,IACZ,QAAU;AAAA,IACV,UAAY;AAAA,IACZ,aAAe;AAAA,EAChB,GAOAA,EAAM,UAAU,aAAaA,EAAM,UAAU,OAAO,SAAS;AAAA,IAC5D,cAAc;AAAA,MACbA,EAAM,UAAU,MAAM,YAAY;AAAA,MAClC;AAAA,QACC,SAAS;AAAA,QACT,YAAY;AAAA;;IAGd,SAAW;AAAA,MACV;AAAA,QACC,SAAS;AAAA,QACT,YAAY;AAAA;MAEb;AAAA,QACC,SAAS;AAAA,QACT,YAAY;AAAA;;;IAId,UAAY;AAAA,IACZ,QAAU;AAAA,MACT,SAAS;AAAA,QACR,aAAa,SACb;AAAA,SAGC,eAAe,SACf;AAAA,QAEA,0BAA0B,SAC1B;AAAA,QAEA,4BAA4B,SAC5B;AAAA,QAEA,sCAAsC,SACtC;AAAA,QAEA,gBAAgB,SAChB;AAAA,QAEA,oFAAoF,UAErF,MACA,YAAY;AAAA;MAEb,YAAY;AAAA;IAEb,UAAY;AAAA,EACb,CAAC,GAEDA,EAAM,UAAU,WAAW,YAAY,EAAE,CAAC,EAAE,UAAU,wEAEtDA,EAAM,UAAU,aAAa,cAAc,WAAW;AAAA,IACrD,OAAS;AAAA,MACR,SAAS;AAAA;AAAA;AAAA,QAGR,0DAA0D;AAAA;AAAA;AAAA;AAAA,QAK1D,KAAK,SACL,QACA,iEAAiE,SACjE;AAAA,QAEA,qIAAqI,SACrI;AAAA,QAEA,kEAAkE;AAAA;MAEnE,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,QACP,gBAAgB;AAAA,UACf,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,OAAO;AAAA,UACP,QAAQA,EAAM,UAAU;AAAA;QAEzB,mBAAmB;AAAA,QACnB,eAAe;AAAA;;;IAIjB,qBAAqB;AAAA,MACpB,SAAS;AAAA,MACT,OAAO;AAAA;IAER,WAAa;AAAA,MACZ;AAAA,QACC,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQA,EAAM,UAAU;AAAA;MAEzB;AAAA,QACC,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQA,EAAM,UAAU;AAAA;MAEzB;AAAA,QACC,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQA,EAAM,UAAU;AAAA;MAEzB;AAAA,QACC,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQA,EAAM,UAAU;AAAA;;IAG1B,UAAY;AAAA,EACb,CAAC,GAEDA,EAAM,UAAU,aAAa,cAAc,UAAU;AAAA,IACpD,UAAY;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO;AAAA;IAER,mBAAmB;AAAA,MAClB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,QACP,wBAAwB;AAAA,UACvB,SAAS;AAAA,UACT,OAAO;AAAA;QAER,eAAiB;AAAA,UAChB,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,QAAQ;AAAA,YACP,6BAA6B;AAAA,cAC5B,SAAS;AAAA,cACT,OAAO;AAAA;YAER,MAAMA,EAAM,UAAU;AAAA;;QAGxB,QAAU;AAAA;;IAGZ,mBAAmB;AAAA,MAClB,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,OAAO;AAAA;EAET,CAAC,GAEDA,EAAM,UAAU,aAAa,cAAc,YAAY;AAAA,IACtD,oBAAoB;AAAA,MACnB,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,OAAO;AAAA;EAET,CAAC,GAEGA,EAAM,UAAU,WACnBA,EAAM,UAAU,OAAO,IAAI,WAAW,UAAU,YAAY,GAI5DA,EAAM,UAAU,OAAO,IAAI;AAAA,IAC1B,yNAAyN;AAAA,IACzN;AAAA,EACF,IAGAA,EAAM,UAAU,KAAKA,EAAM,UAAU,YAOpC,WAAY;AAEZ,QAAI,OAAOA,IAAU,OAAe,OAAO,WAAa;AACvD;AAID,IAAK,QAAQ,UAAU,YACtB,QAAQ,UAAU,UAAU,QAAQ,UAAU,qBAAqB,QAAQ,UAAU;AAGtF,QAAIkF,IAAkB,YAClBC,IAAkB,SAAU/R,GAAQjB,GAAS;AAChD,aAAO,aAAaiB,IAAS,2BAA2BjB;AAAA,IAC1D,GACKiT,IAAwB,4CAExBC,IAAa;AAAA,MAChB,IAAM;AAAA,MACN,IAAM;AAAA,MACN,IAAM;AAAA,MACN,KAAO;AAAA,MACP,MAAQ;AAAA,MACR,IAAM;AAAA,MACN,KAAO;AAAA,MACP,GAAK;AAAA,MACL,KAAO;AAAA,IACT,GAEKC,IAAc,mBACdC,IAAiB,WACjBC,IAAgB,UAChBC,IAAgB,UAEhBC,IAAW,wBAAwBJ,IAAc,OAAOE,IAAgB,cAC9DF,IAAc,OAAOC,IAAiB;AASpD,aAASI,EAASp9B,GAAKq9B,GAAS5nC,GAAO;AACtC,UAAI6nC,IAAM,IAAI,eAAc;AAC5B,MAAAA,EAAI,KAAK,OAAOt9B,GAAK,EAAI,GACzBs9B,EAAI,qBAAqB,WAAY;AACpC,QAAIA,EAAI,cAAc,MACjBA,EAAI,SAAS,OAAOA,EAAI,eAC3BD,EAAQC,EAAI,YAAY,IAEpBA,EAAI,UAAU,MACjB7nC,EAAMmnC,EAAgBU,EAAI,QAAQA,EAAI,UAAU,CAAC,IAEjD7nC,EAAMonC,CAAqB;AAAA,MAIjC,GACES,EAAI,KAAK,IAAI;AAAA,IACf;AAUC,aAASC,EAAWC,GAAO;AAC1B,UAAI/pC,IAAI,wCAAwC,KAAK+pC,KAAS,EAAE;AAChE,UAAI/pC,GAAG;AACN,YAAIgQ,IAAQ,OAAOhQ,EAAE,CAAC,CAAC,GACnBgqC,IAAQhqC,EAAE,CAAC,GACXiQ,IAAMjQ,EAAE,CAAC;AAEb,eAAKgqC,IAGA/5B,IAGE,CAACD,GAAO,OAAOC,CAAG,CAAC,IAFlB,CAACD,GAAO,MAAS,IAHjB,CAACA,GAAOA,CAAK;AAAA,MAMxB;AAAA,IAEA;AAEC,IAAAg0B,EAAM,MAAM,IAAI,uBAAuB,SAAU4B,GAAK;AACrD,MAAAA,EAAI,YAAY,OAAO8D;AAAA,IACzB,CAAE,GAED1F,EAAM,MAAM,IAAI,uBAAuB,SAAU4B,GAAK;AACrD,UAAIqE;AAAA;AAAA,QAAqCrE,EAAI;AAAA;AAC7C,UAAIqE,EAAI,QAAQP,CAAQ,GAAG;AAC1B,QAAA9D,EAAI,OAAO,IAEXqE,EAAI,aAAaX,GAAaC,CAAc;AAG5C,YAAI1D,IAAOoE,EAAI,YAAY,SAAS,cAAc,MAAM,CAAC;AACzD,QAAApE,EAAK,cAAcqD;AAEnB,YAAI38B,IAAM09B,EAAI,aAAa,UAAU,GAEjCvF,IAAWkB,EAAI;AACnB,YAAIlB,MAAa,QAAQ;AAGxB,cAAIwF,KAAa,WAAW,KAAK39B,CAAG,KAAK,CAAA,EAAG,MAAM,GAAG,CAAC;AACtD,UAAAm4B,IAAW2E,EAAWa,CAAS,KAAKA;AAAA,QACxC;AAGG,QAAAlG,EAAM,KAAK,YAAY6B,GAAMnB,CAAQ,GACrCV,EAAM,KAAK,YAAYiG,GAAKvF,CAAQ;AAGpC,YAAIyF,IAAanG,EAAM,QAAQ;AAC/B,QAAImG,KACHA,EAAW,cAAczF,CAAQ,GAIlCiF;AAAA,UACCp9B;AAAA,UACA,SAAU6d,GAAM;AAEf,YAAA6f,EAAI,aAAaX,GAAaE,CAAa;AAG3C,gBAAIO,IAAQD,EAAWG,EAAI,aAAa,YAAY,CAAC;AACrD,gBAAIF,GAAO;AACV,kBAAIK,IAAQhgB,EAAK,MAAM,WAAW,GAG9Bpa,IAAQ+5B,EAAM,CAAC,GACf95B,IAAM85B,EAAM,CAAC,KAAK,OAAOK,EAAM,SAASL,EAAM,CAAC;AAEnD,cAAI/5B,IAAQ,MAAKA,KAASo6B,EAAM,SAChCp6B,IAAQ,KAAK,IAAI,GAAG,KAAK,IAAIA,IAAQ,GAAGo6B,EAAM,MAAM,CAAC,GACjDn6B,IAAM,MAAKA,KAAOm6B,EAAM,SAC5Bn6B,IAAM,KAAK,IAAI,GAAG,KAAK,IAAIA,GAAKm6B,EAAM,MAAM,CAAC,GAE7ChgB,IAAOggB,EAAM,MAAMp6B,GAAOC,CAAG,EAAE,KAAK;AAAA,CAAI,GAGnCg6B,EAAI,aAAa,YAAY,KACjCA,EAAI,aAAa,cAAc,OAAOj6B,IAAQ,CAAC,CAAC;AAAA,YAEvD;AAGK,YAAA61B,EAAK,cAAczb,GACnB4Z,EAAM,iBAAiB6B,CAAI;AAAA,UAChC;AAAA,UACI,SAAU7jC,GAAO;AAEhB,YAAAioC,EAAI,aAAaX,GAAaG,CAAa,GAE3C5D,EAAK,cAAc7jC;AAAA,UACxB;AAAA,QACA;AAAA,MACA;AAAA,IACA,CAAE,GAEDgiC,EAAM,QAAQ,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQ7B,WAAW,SAAmBlzB,GAAW;AAGxC,iBAFI0wB,KAAY1wB,KAAa,UAAU,iBAAiB44B,CAAQ,GAEvDh/B,IAAI,GAAG3D,GAAUA,IAAUy6B,EAAS92B,GAAG;AAC/C,UAAAs5B,EAAM,iBAAiBj9B,CAAO;AAAA,MAElC;AAAA,IACA;AAEC,QAAIsjC,IAAS;AAEb,IAAArG,EAAM,gBAAgB,WAAY;AACjC,MAAKqG,MACJ,QAAQ,KAAK,yFAAyF,GACtGA,IAAS,KAEVrG,EAAM,QAAQ,cAAc,UAAU,MAAM,MAAM,SAAS;AAAA,IAC7D;AAAA,EAEA;;;;CCz5DC,SAAUA,GAAO;AAEjB,EAAAA,EAAM,UAAU,aAAaA,EAAM,UAAU,OAAO,cAAc;AAAA,IACjE,cAAc;AAAA,MACb,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA;AAAA,IACX;AAAA,IACE,SAAW;AAAA,EACb,CAAE,GAGDA,EAAM,UAAU,WAAW,QAAQ;AAAA,IAClC;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA,EACF,GAGC,OAAOA,EAAM,UAAU,WAAW,WAClC,OAAOA,EAAM,UAAU,WAAW,kBAAkB;AAGpD,MAAIsG,IAAatG,EAAM,UAAU,OAAO,cAAc,CAAA,CAAE;AACxD,SAAOsG,EAAW,YAAY,GAE9BtG,EAAM,UAAU,WAAW,YAAY,EAAE,SAASsG,GAElDtG,EAAM,UAAU,aAAa,cAAc,YAAY;AAAA,IACtD,WAAa;AAAA,MACZ,SAAS;AAAA,MACT,QAAQ;AAAA,QACP,IAAM;AAAA,UACL,SAAS;AAAA,UACT,OAAO;AAAA,QACZ;AAAA,QACI,UAAY;AAAA,MAChB;AAAA,IACA;AAAA,IACE,oBAAoB;AAAA;AAAA,MAEnB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,QACP,UAAY;AAAA,QACZ,SAAW;AAAA,UACV,SAAS;AAAA;AAAA,UACT,OAAO;AAAA,UACP,QAAQsG;AAAA,QACb;AAAA,MACA;AAAA,IACA;AAAA,EACA,CAAE,GAEDtG,EAAM,UAAU,KAAKA,EAAM,UAAU;AAEtC,GAAE,KAAK;AC3DP,MAAM,UAAU,aAAa,MAAM,UAAU,OAAO,SAAS;AAAA,EAC5D,cAAc;AAAA,IACb,MAAM,UAAU,MAAM,YAAY;AAAA,IAClC;AAAA,MACC,SAAS;AAAA,MACT,YAAY;AAAA,IACf;AAAA,EACA;AAAA,EACC,SAAW;AAAA,IACV;AAAA,MACC,SAAS;AAAA,MACT,YAAY;AAAA,IACf;AAAA,IACE;AAAA,MACC,SAAS;AAAA,MACT,YAAY;AAAA,IACf;AAAA,EACA;AAAA;AAAA,EAEC,UAAY;AAAA,EACZ,QAAU;AAAA,IACT,SAAS;AAAA,MACR,aAAa,SACb;AAAA,OAGC,eAAe,SACf;AAAA,MAEA,0BAA0B,SAC1B;AAAA,MAEA,4BAA4B,SAC5B;AAAA,MAEA,sCAAsC,SACtC;AAAA,MAEA,gBAAgB,SAChB;AAAA,MAEA,oFAAoF,UAErF,MACA,YAAY;AAAA,IACf;AAAA,IACE,YAAY;AAAA,EACd;AAAA,EACC,UAAY;AACb,CAAC;AAED,MAAM,UAAU,WAAW,YAAY,EAAE,CAAC,EAAE,UAAU;AAEtD,MAAM,UAAU,aAAa,cAAc,WAAW;AAAA,EACrD,OAAS;AAAA,IACR,SAAS;AAAA;AAAA;AAAA,MAGR,0DAA0D;AAAA;AAAA;AAAA;AAAA,MAK1D,KAAK,SACL,QACA,iEAAiE,SACjE;AAAA,MAEA,qIAAqI,SACrI;AAAA,MAEA,kEAAkE;AAAA,IACrE;AAAA,IACE,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,MACP,gBAAgB;AAAA,QACf,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,QAAQ,MAAM,UAAU;AAAA,MAC5B;AAAA,MACG,mBAAmB;AAAA,MACnB,eAAe;AAAA,IAClB;AAAA,EACA;AAAA;AAAA,EAEC,qBAAqB;AAAA,IACpB,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACC,WAAa;AAAA,IACZ;AAAA,MACC,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,QAAQ,MAAM,UAAU;AAAA,IAC3B;AAAA,IACE;AAAA,MACC,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,QAAQ,MAAM,UAAU;AAAA,IAC3B;AAAA,IACE;AAAA,MACC,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,QAAQ,MAAM,UAAU;AAAA,IAC3B;AAAA,IACE;AAAA,MACC,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,QAAQ,MAAM,UAAU;AAAA,IAC3B;AAAA,EACA;AAAA,EACC,UAAY;AACb,CAAC;AAED,MAAM,UAAU,aAAa,cAAc,UAAU;AAAA,EACpD,UAAY;AAAA,IACX,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACC,mBAAmB;AAAA,IAClB,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,MACP,wBAAwB;AAAA,QACvB,SAAS;AAAA,QACT,OAAO;AAAA,MACX;AAAA,MACG,eAAiB;AAAA,QAChB,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQ;AAAA,UACP,6BAA6B;AAAA,YAC5B,SAAS;AAAA,YACT,OAAO;AAAA,UACb;AAAA,UACK,MAAM,MAAM,UAAU;AAAA,QAC3B;AAAA,MACA;AAAA,MACG,QAAU;AAAA,IACb;AAAA,EACA;AAAA,EACC,mBAAmB;AAAA,IAClB,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AACA,CAAC;AAED,MAAM,UAAU,aAAa,cAAc,YAAY;AAAA,EACtD,oBAAoB;AAAA,IACnB,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AACA,CAAC;AAEG,MAAM,UAAU,WACnB,MAAM,UAAU,OAAO,IAAI,WAAW,UAAU,YAAY,GAI5D,MAAM,UAAU,OAAO,IAAI;AAAA,EAC1B,yNAAyN;AAAA,EACzN;AACF;AAGA,MAAM,UAAU,KAAK,MAAM,UAAU;AC1KrC,MAAM,UAAU,OAAO;AAAA,EACtB,UAAY;AAAA,IACX,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,EACV;AAAA,EACC,QAAU;AAAA,IACT,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,EACV;AAAA,EACC,SAAW;AAAA,IACV,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACC,QAAU;AAAA,EACV,aAAe;AAAA,EACf,UAAY;AAAA,EACZ,SAAW;AAAA,EACX,MAAQ;AAAA,IACP,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AACA;AAEA,MAAM,UAAU,cAAc,MAAM,UAAU;AAAA,CC1B7C,SAAUA,GAAO;AAKjB,MAAIuG,IAAU,2oCAEVC,IAAsB;AAAA,IACzB,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,OAAO;AAAA;AAAA,IACP,QAAQ;AAAA;AAAA,EACV,GAEKC,IAAe;AAAA,IAClB,MAAQD;AAAA,IACR,aAAe;AAAA,MACd,SAAS,OAAO,QAAQD,CAAO;AAAA,MAC/B,OAAO;AAAA,IACV;AAAA,IACE,UAAY;AAAA;AAAA,MAEX;AAAA,QACC,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,QAAQ;AAAA;AAAA,UAEP,UAAY;AAAA,YACX;AAAA,cACC,SAAS;AAAA,cACT,YAAY;AAAA,YACnB;AAAA,YACM;AAAA,UACN;AAAA,UACK,QAAU;AAAA;AAAA,UAEV,UAAY;AAAA;AAAA,UAEZ,aAAe;AAAA,QACpB;AAAA,MACA;AAAA;AAAA,MAEG;AAAA,QACC,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,QAAQ;AAAA,UACP,UAAY;AAAA,QACjB;AAAA,MACA;AAAA;AAAA,MAEG;AAAA,QACC,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,QAAQ;AAAA,UACP,UAAY;AAAA,UACZ,aAAe;AAAA,UACf,aAAe;AAAA,YACd,SAAS,OAAO,UAAUA,CAAO;AAAA,YACjC,YAAY;AAAA,YACZ,OAAO;AAAA,UACb;AAAA,QACA;AAAA,MACA;AAAA,MACG;AAAA,IACH;AAAA;AAAA,IAEE,QAAU;AAAA,EACZ;AAEC,EAAAvG,EAAM,UAAU,OAAO;AAAA,IACtB,SAAW;AAAA,MACV,SAAS;AAAA,MACT,OAAO;AAAA,IACV;AAAA,IACE,SAAW;AAAA,MACV,SAAS;AAAA,MACT,YAAY;AAAA,IACf;AAAA,IACE,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKhB;AAAA;AAAA,QAEC,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,OAAO;AAAA,MACX;AAAA,MACG;AAAA;AAAA,QAEC,SAAS;AAAA,QACT,OAAO;AAAA,MACX;AAAA,IACA;AAAA;AAAA,IAEE,iBAAiB;AAAA,MAChB,SAAS;AAAA,MACT,OAAO;AAAA,MACP,YAAY;AAAA,IACf;AAAA;AAAA;AAAA,IAGE,eAAe;AAAA,MACd,SAAS;AAAA,MACT,QAAQ;AAAA,QACP,aAAe;AAAA,UACd,SAAS,OAAO,yBAAyBuG,CAAO;AAAA,UAChD,YAAY;AAAA,UACZ,OAAO;AAAA,QACZ;AAAA,MACA;AAAA,MACG,OAAO;AAAA,MACP,YAAY;AAAA,IACf;AAAA;AAAA,IAEE,WAAa;AAAA,MACZ,SAAS;AAAA,MACT,OAAO;AAAA,MACP,YAAY;AAAA,IACf;AAAA,IACE,QAAU;AAAA;AAAA,MAET;AAAA,QACC,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQE;AAAA,MACZ;AAAA;AAAA;AAAA,MAGG;AAAA,QACC,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ;AAAA,UACP,MAAQD;AAAA,QACb;AAAA,MACA;AAAA;AAAA,MAEG;AAAA;AAAA,QAEC,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQC;AAAA,MACZ;AAAA,MACG;AAAA;AAAA,QAEC,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQ;AAAA,MACZ;AAAA,MACG;AAAA;AAAA,QAEC,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,QAAQ;AAAA,UACP,QAAUA,EAAa;AAAA,QAC5B;AAAA,MACA;AAAA,IACA;AAAA,IACE,aAAe;AAAA,MACd,SAAS,OAAO,SAASF,CAAO;AAAA,MAChC,OAAO;AAAA,IACV;AAAA,IACE,UAAYE,EAAa;AAAA,IACzB,UAAY;AAAA,MACX,SAAS;AAAA,MACT,YAAY;AAAA,IACf;AAAA,IACE,SAAW;AAAA,MACV,SAAS;AAAA,MACT,YAAY;AAAA,IACf;AAAA;AAAA,IAEE,SAAW;AAAA,MACV,SAAS;AAAA,MACT,YAAY;AAAA;AAAA,MAEZ,OAAO;AAAA,IACV;AAAA,IACE,SAAW;AAAA,MACV,SAAS;AAAA,MACT,YAAY;AAAA,IACf;AAAA,IACE,mBAAmB;AAAA,MAClB,SAAS;AAAA,MACT,OAAO;AAAA,IACV;AAAA,IACE,UAAY;AAAA;AAAA,MAEX,SAAS;AAAA,MACT,QAAQ;AAAA,QACP,mBAAmB;AAAA,UAClB,SAAS;AAAA,UACT,OAAO;AAAA,QACZ;AAAA,MACA;AAAA,IACA;AAAA,IACE,aAAe;AAAA,IACf,QAAU;AAAA,MACT,SAAS;AAAA,MACT,YAAY;AAAA,IACf;AAAA,EACA,GAECD,EAAoB,SAASxG,EAAM,UAAU;AAqB7C,WAlBI0G,IAAa;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GACK3F,IAAS0F,EAAa,SAAS,CAAC,EAAE,QAC7B//B,IAAI,GAAGA,IAAIggC,EAAW,QAAQhgC;AACtC,IAAAq6B,EAAO2F,EAAWhgC,CAAC,CAAC,IAAIs5B,EAAM,UAAU,KAAK0G,EAAWhgC,CAAC,CAAC;AAG3D,EAAAs5B,EAAM,UAAU,KAAKA,EAAM,UAAU,MACrCA,EAAM,UAAU,QAAQA,EAAM,UAAU;AACzC,GAAE,KAAK;AAAA,CC1ON,SAAUA,GAAO;AAEjB,MAAI1oB,IAAS;AAEb,EAAA0oB,EAAM,UAAU,MAAM;AAAA,IACrB,SAAW;AAAA,IACX,QAAU;AAAA,MACT,SAAS,OAAO,eAAe,sBAAsB,SAAS,MAAM1oB,EAAO,SAAS,QAAQ,kBAAkB,MAAM;AAAA,MACpH,QAAQ;AAAA,QACP,MAAQ;AAAA,QACR,8BAA8B;AAAA,UAC7B,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,OAAO;AAAA,QACZ;AAAA,QACI,SAAW;AAAA,UACV,SAAS;AAAA,UACT,YAAY;AAAA,QACjB;AAAA;AAAA,MAEA;AAAA,IACA;AAAA,IACE,KAAO;AAAA;AAAA,MAEN,SAAS,OAAO,iBAAiBA,EAAO,SAAS,MAAM,8BAA8B,SAAS,QAAQ,GAAG;AAAA,MACzG,QAAQ;AAAA,MACR,QAAQ;AAAA,QACP,UAAY;AAAA,QACZ,aAAe;AAAA,QACf,QAAU;AAAA,UACT,SAAS,OAAO,MAAMA,EAAO,SAAS,GAAG;AAAA,UACzC,OAAO;AAAA,QACZ;AAAA,MACA;AAAA,IACA;AAAA,IACE,UAAY;AAAA,MACX,SAAS,OAAO,sDAAuDA,EAAO,SAAS,eAAe;AAAA,MACtG,YAAY;AAAA,IACf;AAAA,IACE,QAAU;AAAA,MACT,SAASA;AAAA,MACT,QAAQ;AAAA,IACX;AAAA,IACE,UAAY;AAAA,MACX,SAAS;AAAA,MACT,YAAY;AAAA,IACf;AAAA,IACE,WAAa;AAAA,IACb,UAAY;AAAA,MACX,SAAS;AAAA,MACT,YAAY;AAAA,IACf;AAAA,IACE,aAAe;AAAA,EACjB,GAEC0oB,EAAM,UAAU,IAAI,OAAU,OAAO,OAAOA,EAAM,UAAU;AAE5D,MAAIiF,IAASjF,EAAM,UAAU;AAC7B,EAAIiF,MACHA,EAAO,IAAI,WAAW,SAAS,KAAK,GACpCA,EAAO,IAAI,aAAa,SAAS,KAAK;AAGxC,GAAE,KAAK;AC/DP,MAAM,UAAU,SAAS;AAAA,EACxB,SAAW;AAAA,IACV,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACC,QAAU;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACC,SAAW;AAAA;AAAA,IAEV,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,MACP,mBAAmB;AAAA,QAClB,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ;AAAA;AAAA,MACZ;AAAA,MACG,QAAU;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,MACZ;AAAA,MACG,aAAe;AAAA,MACf,eAAe;AAAA,MACf,MAAQ;AAAA,IACX;AAAA,EACA;AAAA,EACC,OAAS;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACC,KAAO;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,MACP,KAAO;AAAA,QACN,SAAS;AAAA,QACT,QAAQ;AAAA,UACP,aAAe;AAAA,UACf,WAAa;AAAA,QAClB;AAAA,MACA;AAAA,MACG,gBAAgB,CAAA;AAAA,MAChB,cAAc;AAAA,QACb,SAAS;AAAA,QACT,QAAQ;AAAA,UACP,aAAe;AAAA,YACd;AAAA,cACC,SAAS;AAAA,cACT,OAAO;AAAA,YACd;AAAA,YACM;AAAA,cACC,SAAS;AAAA,cACT,YAAY;AAAA,YACnB;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAAA,MACG,aAAe;AAAA,MACf,aAAa;AAAA,QACZ,SAAS;AAAA,QACT,QAAQ;AAAA,UACP,WAAa;AAAA,QAClB;AAAA,MACA;AAAA,IAEA;AAAA,EACA;AAAA,EACC,QAAU;AAAA,IACT;AAAA,MACC,SAAS;AAAA,MACT,OAAO;AAAA,IACV;AAAA,IACE;AAAA,EACF;AACA;AAEA,MAAM,UAAU,OAAO,IAAO,OAAO,YAAY,EAAE,OAAO,SACzD,MAAM,UAAU,OAAO;AACxB,MAAM,UAAU,OAAO,QAAW,OAAO,iBAAiB,EAAE,SAAS,MAAM,UAAU;AAGrF,MAAM,MAAM,IAAI,QAAQ,SAAUrD,GAAK;AAEtC,EAAIA,EAAI,SAAS,aAChBA,EAAI,WAAW,QAAWA,EAAI,QAAQ,QAAQ,SAAS,GAAG;AAE5D,CAAC;AAED,OAAO,eAAe,MAAM,UAAU,OAAO,KAAK,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAY/D,OAAO,SAAoBzU,GAAS8S,GAAM;AACzC,QAAI8E,IAAsB,CAAA;AAC1B,IAAAA,EAAoB,cAAc9E,CAAI,IAAI;AAAA,MACzC,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,QAAQ,MAAM,UAAUA,CAAI;AAAA,IAC/B,GACE8E,EAAoB,QAAW;AAE/B,QAAIhE,IAAS;AAAA,MACZ,kBAAkB;AAAA,QACjB,SAAS;AAAA,QACT,QAAQgE;AAAA,MACZ;AAAA,IACA;AACE,IAAAhE,EAAO,cAAcd,CAAI,IAAI;AAAA,MAC5B,SAAS;AAAA,MACT,QAAQ,MAAM,UAAUA,CAAI;AAAA,IAC/B;AAEE,QAAI9K,IAAM,CAAA;AACV,IAAAA,EAAIhI,CAAO,IAAI;AAAA,MACd,SAAS,OAAO,wFAAwF,OAAO,QAAQ,OAAO,WAAY;AAAE,eAAOA;AAAA,MAAS,CAAC,GAAG,GAAG;AAAA,MACnK,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ4T;AAAA,IACX,GAEE,MAAM,UAAU,aAAa,UAAU,SAAS5L,CAAG;AAAA,EACpD;AACD,CAAC;AACD,OAAO,eAAe,MAAM,UAAU,OAAO,KAAK,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYjE,OAAO,SAAU6P,GAAU/E,GAAM;AAChC,UAAM,UAAU,OAAO,IAAI,OAAO,cAAc,EAAE,KAAK;AAAA,MACtD,SAAS;AAAA,QACR,aAAa,SAAS,QAAQ+E,IAAW,MAAM,iDAAiD;AAAA,QAChG;AAAA,MACJ;AAAA,MACG,YAAY;AAAA,MACZ,QAAQ;AAAA,QACP,aAAa;AAAA,QACb,cAAc;AAAA,UACb,SAAS;AAAA,UACT,QAAQ;AAAA,YACP,OAAS;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,OAAO,CAAC/E,GAAM,cAAcA,CAAI;AAAA,cAChC,QAAQ,MAAM,UAAUA,CAAI;AAAA,YACnC;AAAA,YACM,aAAe;AAAA,cACd;AAAA,gBACC,SAAS;AAAA,gBACT,OAAO;AAAA,cACf;AAAA,cACO;AAAA,YACP;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAAA,IACA,CAAG;AAAA,EACF;AACD,CAAC;AAED,MAAM,UAAU,OAAO,MAAM,UAAU;AACvC,MAAM,UAAU,SAAS,MAAM,UAAU;AACzC,MAAM,UAAU,MAAM,MAAM,UAAU;AAEtC,MAAM,UAAU,MAAM,MAAM,UAAU,OAAO,UAAU,EAAE;AACzD,MAAM,UAAU,OAAO,MAAM,UAAU;AACvC,MAAM,UAAU,OAAO,MAAM,UAAU;AACvC,MAAM,UAAU,MAAM,MAAM,UAAU;ACtKtC,MAAM0G,KAAmB/pC,GAAM,KAAK,CAAC,EAAE,SAAA+P,GAAS,WAAA/C,IAAY,SAAgC;AAC1F,QAAMg9B,IAAehqC,GAAM,OAAuB,IAAI,GAGhDiqC,IAAkBC,GAAQ,MAAM;AACpC,UAAMC,IAAc,iBAAiB,KAAKp6B,CAAO,GAC3Cq6B,IAAmB,iBAAiB,KAAKr6B,CAAO,GAChDs6B,IAAoB,8DAA8D,KAAKt6B,CAAO;AAEpG,WAAO;AAAA,MACL,aAAAo6B;AAAA,MACA,kBAAAC;AAAA,MACA,mBAAAC;AAAA,IAAA;AAAA,EAEJ,GAAG,CAACt6B,CAAO,CAAC;AAIZ,MAAIk6B,EAAgB,eAAe,CAACA,EAAgB,oBAAoB,CAACA,EAAgB;AACvF,WACE7+B,gBAAAA,EAAAA,IAAC,SAAI,WAAW,+CAA+C4B,CAAS,IACtE,UAAA5B,gBAAAA,EAAAA,IAACw3B,IAAA,EAAa,UAAA7yB,EAAA,CAAQ,EAAA,CACxB;AAKJ,QAAMu6B,IAAcJ,GAAQ,MAAM;AAEhC,UAAMK,IAAiBx6B,EACpB,QAAQ,WAAW,GAAG,EACtB,QAAQ,SAAS,GAAG,EACpB,QAAQ,SAAS,GAAG,EACpB,QAAQ,UAAU,GAAG,EACrB,QAAQ,WAAW,GAAG,EACtB,QAAQ,UAAU,GAAG;AAGxBy6B,IAAAA,GAAO,WAAW;AAAA,MAChB,QAAQ;AAAA;AAAA,MACR,KAAK;AAAA;AAAA,IAAA,CACN;AAGD,UAAMC,IAAUD,GAAO,MAAMD,CAAc,GAGrCG,IAAmB,CAACC,MAAwB;AAChD,UAAI;AAEF,YAAIC,IAAaD,EAAI,QAAQ,gBAAgB,EAAE;AAM/C,YAHAC,IAAaA,EAAW,QAAQ,UAAU,EAAE,GAGxCA,EAAW,SAAS,IAAI;AAC1B,gBAAMC,IAAQD,EAAW,MAAM,GAAG,GAC5BE,IAASD,EAAM,CAAC,GAChBtzB,IAAOszB,EAAM,MAAM,CAAC,EAAE,KAAK,GAAG;AAEpC,UAAItzB,EAAK,SAAS,KAChBqzB,IAAa,GAAGE,CAAM,IAAIvzB,EAAK,UAAU,GAAG,EAAE,CAAC,QAE/CqzB,IAAa,GAAGE,CAAM,IAAIvzB,CAAI;AAAA,QAElC;AAEA,eAAOqzB;AAAA,MACT,QAAQ;AACN,eAAOD;AAAA,MACT;AAAA,IACF,GAGMI,IAAgBN,EAAQ;AAAA,MAC5B;AAAA,MACA,CAAChmC,GAAOumC,GAAMC,GAAOzhB,MAAS;AAG5B,cAAM0hB,IADa1hB,MAASwhB,KAAQxhB,EAAK,QAAQ,gBAAgB,EAAE,MAAMwhB,EAAK,QAAQ,gBAAgB,EAAE,IACvEN,EAAiBM,CAAI,IAAIxhB;AAE1D,eAAO,YAAYwhB,CAAI,IAAIC,CAAK,wIAAwIC,CAAW;AAAA,MACrL;AAAA,IAAA;AAGF,WAAO9f,GAAU,SAAS2f,GAAe;AAAA,MACvC,UAAU,CAAC,UAAU,OAAO,OAAO;AAAA;AAAA,IAAA,CACpC;AAAA,EACH,GAAG,CAACh7B,CAAO,CAAC;AAGZ/P,SAAAA,GAAM,UAAU,MAAM;AACpB,IAAIgqC,EAAa,WACf5G,GAAM,kBAAkB4G,EAAa,OAAO;AAAA,EAEhD,GAAG,CAACM,CAAW,CAAC,GAGdl/B,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK4+B;AAAA,MACL,WAAW,+CAA+Ch9B,CAAS;AAAA,MACnE,yBAAyB,EAAE,QAAQs9B,EAAA;AAAA,IAAY;AAAA,EAAA;AAGrD,CAAC;AAEDP,GAAiB,cAAc;AC5H/B,SAASoB,GAAqBC,GAAsBC,GAAiB,EAAE,0BAAAC,IAA2B,GAAI,IAAK,IAAI;AAC7G,SAAO,SAAqBC,GAAO;AAEjC,QADAH,KAAA,QAAAA,EAAuBG,IACnBD,MAA6B,MAAS,CAACC,EAAM;AAC/C,aAAOF,KAAA,gBAAAA,EAAkBE;AAAA,EAE7B;AACF;ACNA,SAASC,GAAeC,GAAmBC,GAAgB;AACzD,QAAMC,IAAU3rC,EAAM,cAAc0rC,CAAc,GAC5CE,IAAW,CAAC5nC,MAAU;AAC1B,UAAM,EAAE,UAAA+G,GAAU,GAAGhI,EAAO,IAAKiB,GAC3BkD,IAAQlH,EAAM,QAAQ,MAAM+C,GAAS,OAAO,OAAOA,CAAO,CAAC;AACjE,WAAuBqI,gBAAAA,EAAAA,IAAIugC,EAAQ,UAAU,EAAE,OAAAzkC,GAAO,UAAA6D,EAAQ,CAAE;AAAA,EAClE;AACA,EAAA6gC,EAAS,cAAcH,IAAoB;AAC3C,WAASI,EAAYC,GAAc;AACjC,UAAM/oC,IAAU/C,EAAM,WAAW2rC,CAAO;AACxC,QAAI5oC,EAAS,QAAOA;AACpB,QAAI2oC,MAAmB,OAAQ,QAAOA;AACtC,UAAM,IAAI,MAAM,KAAKI,CAAY,4BAA4BL,CAAiB,IAAI;AAAA,EACpF;AACA,SAAO,CAACG,GAAUC,CAAW;AAC/B;AACA,SAASE,GAAmBC,GAAWC,IAAyB,IAAI;AAClE,MAAIC,IAAkB,CAAA;AACtB,WAASC,EAAeV,GAAmBC,GAAgB;AACzD,UAAMU,IAAcpsC,EAAM,cAAc0rC,CAAc,GAChDz9B,IAAQi+B,EAAgB;AAC9B,IAAAA,IAAkB,CAAC,GAAGA,GAAiBR,CAAc;AACrD,UAAME,IAAW,CAAC5nC,MAAU;;AAC1B,YAAM,EAAE,OAAAqoC,GAAO,UAAAthC,GAAU,GAAGhI,EAAO,IAAKiB,GAClC2nC,MAAU39B,IAAAq+B,KAAA,gBAAAA,EAAQL,OAAR,gBAAAh+B,EAAqBC,OAAUm+B,GACzCllC,IAAQlH,EAAM,QAAQ,MAAM+C,GAAS,OAAO,OAAOA,CAAO,CAAC;AACjE,aAAuBqI,gBAAAA,EAAAA,IAAIugC,EAAQ,UAAU,EAAE,OAAAzkC,GAAO,UAAA6D,EAAQ,CAAE;AAAA,IAClE;AACA,IAAA6gC,EAAS,cAAcH,IAAoB;AAC3C,aAASI,EAAYC,GAAcO,GAAO;;AACxC,YAAMV,MAAU39B,IAAAq+B,KAAA,gBAAAA,EAAQL,OAAR,gBAAAh+B,EAAqBC,OAAUm+B,GACzCrpC,IAAU/C,EAAM,WAAW2rC,CAAO;AACxC,UAAI5oC,EAAS,QAAOA;AACpB,UAAI2oC,MAAmB,OAAQ,QAAOA;AACtC,YAAM,IAAI,MAAM,KAAKI,CAAY,4BAA4BL,CAAiB,IAAI;AAAA,IACpF;AACA,WAAO,CAACG,GAAUC,CAAW;AAAA,EAC/B;AACA,QAAMS,IAAc,MAAM;AACxB,UAAMC,IAAgBL,EAAgB,IAAI,CAACR,MAClC1rC,EAAM,cAAc0rC,CAAc,CAC1C;AACD,WAAO,SAAkBW,GAAO;AAC9B,YAAMG,KAAWH,KAAA,gBAAAA,EAAQL,OAAcO;AACvC,aAAOvsC,EAAM;AAAA,QACX,OAAO,EAAE,CAAC,UAAUgsC,CAAS,EAAE,GAAG,EAAE,GAAGK,GAAO,CAACL,CAAS,GAAGQ,EAAQ;QACnE,CAACH,GAAOG,CAAQ;AAAA,MACxB;AAAA,IACI;AAAA,EACF;AACA,SAAAF,EAAY,YAAYN,GACjB,CAACG,GAAgBM,GAAqBH,GAAa,GAAGL,CAAsB,CAAC;AACtF;AACA,SAASQ,MAAwBC,GAAQ;AACvC,QAAMC,IAAYD,EAAO,CAAC;AAC1B,MAAIA,EAAO,WAAW,EAAG,QAAOC;AAChC,QAAML,IAAc,MAAM;AACxB,UAAMM,IAAaF,EAAO,IAAI,CAACG,OAAkB;AAAA,MAC/C,UAAUA,EAAY;AAAA,MACtB,WAAWA,EAAa;AAAA,IAC9B,EAAM;AACF,WAAO,SAA2BC,GAAgB;AAChD,YAAMC,IAAaH,EAAW,OAAO,CAACI,GAAa,EAAE,UAAAC,GAAU,WAAAjB,QAAgB;AAE7E,cAAMkB,IADaD,EAASH,CAAc,EACV,UAAUd,CAAS,EAAE;AACrD,eAAO,EAAE,GAAGgB,GAAa,GAAGE,EAAY;AAAA,MAC1C,GAAG,CAAA,CAAE;AACL,aAAOltC,EAAM,QAAQ,OAAO,EAAE,CAAC,UAAU2sC,EAAU,SAAS,EAAE,GAAGI,EAAU,IAAK,CAACA,CAAU,CAAC;AAAA,IAC9F;AAAA,EACF;AACA,SAAAT,EAAY,YAAYK,EAAU,WAC3BL;AACT;ACzEA,IAAIa,KAAmB,iCAAY,WAAWntC,EAAM,kBAAkB,MAAM;AAC5E,GCAIotC,KAAaptC,EAAM,UAAU,KAAI,EAAG,SAAQ,CAAE,MAAM,MAAA;AAAA,IACpD4nC,KAAQ;AACZ,SAASyF,GAAMC,GAAiB;AAC9B,QAAM,CAACzJ,GAAI0J,CAAK,IAAIvtC,EAAM,SAASotC,IAAY;AAC/CI,SAAAA,GAAgB,MAAM;AACE,IAAAD,EAAM,CAACE,MAAYA,KAAW,OAAO7F,IAAO,CAAC;AAAA,EACrE,GAAG,CAAC0F,CAAe,CAAC,GACOzJ,IAAK,SAASA,CAAE,KAAK;AAClD;ACRA,IAAI6J,KAAqB1tC,EAAM,uBAAuB,KAAI,EAAG,SAAQ,CAAE,KAAKwtC;AAC5E,SAASG,GAAqB;AAAA,EAC5B,MAAA5kB;AAAA,EACA,aAAA6kB;AAAA,EACA,UAAAC,IAAW,MAAM;AAAA,EACjB;AAAA,EACA,QAAAC;AACF,GAAG;AACD,QAAM,CAACC,GAAkBC,GAAqBC,CAAW,IAAIC,GAAqB;AAAA,IAChF,aAAAN;AAAA,IACA,UAAAC;AAAA,EACJ,CAAG,GACKM,IAAeplB,MAAS,QACxB7hB,IAAQinC,IAAeplB,IAAOglB;AAC1B;AACR,UAAMK,IAAkBpuC,EAAM,OAAO+oB,MAAS,MAAM;AACpD,IAAA/oB,EAAM,UAAU,MAAM;AACpB,YAAMquC,IAAgBD,EAAgB;AACtC,MAAIC,MAAkBF,KAGpB,QAAQ;AAAA,QACN,GAAGL,CAAM,qBAHEO,IAAgB,eAAe,cAGR,OAFzBF,IAAe,eAAe,cAEI;AAAA,MACrD,GAEMC,EAAgB,UAAUD;AAAA,IAC5B,GAAG,CAACA,GAAcL,CAAM,CAAC;AAAA,EAC3B;AACA,QAAMQ,IAAWtuC,EAAM;AAAA,IACrB,CAACuuC,MAAc;;AACb,UAAIJ,GAAc;AAChB,cAAMK,IAASC,GAAWF,CAAS,IAAIA,EAAUxlB,CAAI,IAAIwlB;AACzD,QAAIC,MAAWzlB,OACb/a,IAAAigC,EAAY,YAAZ,QAAAjgC,EAAA,KAAAigC,GAAsBO;AAAA,MAE1B;AACE,QAAAR,EAAoBO,CAAS;AAAA,IAEjC;AAAA,IACA,CAACJ,GAAcplB,GAAMilB,GAAqBC,CAAW;AAAA,EACzD;AACE,SAAO,CAAC/mC,GAAOonC,CAAQ;AACzB;AACA,SAASJ,GAAqB;AAAA,EAC5B,aAAAN;AAAA,EACA,UAAAC;AACF,GAAG;AACD,QAAM,CAAC3mC,GAAOonC,CAAQ,IAAItuC,EAAM,SAAS4tC,CAAW,GAC9Cc,IAAe1uC,EAAM,OAAOkH,CAAK,GACjC+mC,IAAcjuC,EAAM,OAAO6tC,CAAQ;AACzC,SAAAH,GAAmB,MAAM;AACvB,IAAAO,EAAY,UAAUJ;AAAA,EACxB,GAAG,CAACA,CAAQ,CAAC,GACb7tC,EAAM,UAAU,MAAM;;AACpB,IAAI0uC,EAAa,YAAYxnC,OAC3B8G,IAAAigC,EAAY,YAAZ,QAAAjgC,EAAA,KAAAigC,GAAsB/mC,IACtBwnC,EAAa,UAAUxnC;AAAA,EAE3B,GAAG,CAACA,GAAOwnC,CAAY,CAAC,GACjB,CAACxnC,GAAOonC,GAAUL,CAAW;AACtC;AACA,SAASQ,GAAWvnC,GAAO;AACzB,SAAO,OAAOA,KAAU;AAC1B;AAAA;AC7DA,SAAS0L,GAAWC,GAAW;AAC7B,QAAMC,IAA4BC,gBAAAA,GAAgBF,CAAS,GACrDG,IAAQhT,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACtD,UAAM,EAAE,UAAAlI,GAAU,GAAGmI,EAAS,IAAKlP,GAC7BmP,IAAgBnT,EAAM,SAAS,QAAQ+K,CAAQ,GAC/CqI,IAAYD,EAAc,KAAKE,EAAW;AAChD,QAAID,GAAW;AACb,YAAME,IAAaF,EAAU,MAAM,UAC7BG,IAAcJ,EAAc,IAAI,CAACpJ,MACjCA,MAAUqJ,IACRpT,EAAM,SAAS,MAAMsT,CAAU,IAAI,IAAUtT,EAAM,SAAS,KAAK,IAAI,IAClEA,EAAM,eAAesT,CAAU,IAAIA,EAAW,MAAM,WAAW,OAE/DvJ,CAEV;AACD,aAAuBqB,gBAAAA,EAAAA,IAAI0H,GAAW,EAAE,GAAGI,GAAW,KAAKD,GAAc,UAAUjT,EAAM,eAAesT,CAAU,IAAItT,EAAM,aAAasT,GAAY,QAAQC,CAAW,IAAI,MAAM;AAAA,IACpL;AACA,WAAuBnI,gBAAAA,EAAAA,IAAI0H,GAAW,EAAE,GAAGI,GAAW,KAAKD,GAAc,UAAAlI,GAAU;AAAA,EACrF,CAAC;AACD,SAAAiI,EAAM,cAAc,GAAGH,CAAS,SACzBG;AACT;AAAA;AAGA,SAASD,GAAgBF,GAAW;AAClC,QAAMC,IAAY9S,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AAC1D,UAAM,EAAE,UAAAlI,GAAU,GAAGmI,EAAS,IAAKlP;AACnC,QAAIhE,EAAM,eAAe+K,CAAQ,GAAG;AAClC,YAAM0I,IAAcC,GAAc3I,CAAQ,GACpC4I,IAASC,GAAWV,GAAWnI,EAAS,KAAK;AACnD,aAAIA,EAAS,SAAS/K,EAAM,aAC1B2T,EAAO,MAAMV,IAAed,GAAYc,GAAcQ,CAAW,IAAIA,IAEhEzT,EAAM,aAAa+K,GAAU4I,CAAM;AAAA,IAC5C;AACA,WAAO3T,EAAM,SAAS,MAAM+K,CAAQ,IAAI,IAAI/K,EAAM,SAAS,KAAK,IAAI,IAAI;AAAA,EAC1E,CAAC;AACD,SAAA8S,EAAU,cAAc,GAAGD,CAAS,cAC7BC;AACT;AACA,IAAIe,KAAuB,OAAO,iBAAiB;AAWnD,SAASR,GAAYtJ,GAAO;AAC1B,SAAO/J,EAAM,eAAe+J,CAAK,KAAK,OAAOA,EAAM,QAAS,cAAc,eAAeA,EAAM,QAAQA,EAAM,KAAK,cAAc8J;AAClI;AACA,SAASD,GAAWV,GAAWY,GAAY;AACzC,QAAMC,IAAgB,EAAE,GAAGD,EAAU;AACrC,aAAWpL,KAAYoL,GAAY;AACjC,UAAME,IAAgBd,EAAUxK,CAAQ,GAClCuL,IAAiBH,EAAWpL,CAAQ;AAE1C,IADkB,WAAW,KAAKA,CAAQ,IAEpCsL,KAAiBC,IACnBF,EAAcrL,CAAQ,IAAI,IAAInH,MAAS;AACrC,YAAMsL,IAASoH,EAAe,GAAG1S,CAAI;AACrC,aAAAyS,EAAc,GAAGzS,CAAI,GACdsL;AAAA,IACT,IACSmH,MACTD,EAAcrL,CAAQ,IAAIsL,KAEnBtL,MAAa,UACtBqL,EAAcrL,CAAQ,IAAI,EAAE,GAAGsL,GAAe,GAAGC,EAAc,IACtDvL,MAAa,gBACtBqL,EAAcrL,CAAQ,IAAI,CAACsL,GAAeC,CAAc,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,EAEtF;AACA,SAAO,EAAE,GAAGf,GAAW,GAAGa,EAAa;AACzC;AACA,SAASL,GAAcvN,GAAS;;AAC9B,MAAI0B,KAASmG,IAAA,OAAO,yBAAyB7H,EAAQ,OAAO,KAAK,MAApD,gBAAA6H,EAAuD,KAChEkG,IAAUrM,KAAU,oBAAoBA,KAAUA,EAAO;AAC7D,SAAIqM,IACK/N,EAAQ,OAEjB0B,KAASsM,IAAA,OAAO,yBAAyBhO,GAAS,KAAK,MAA9C,gBAAAgO,EAAiD,KAC1DD,IAAUrM,KAAU,oBAAoBA,KAAUA,EAAO,gBACrDqM,IACK/N,EAAQ,MAAM,MAEhBA,EAAQ,MAAM,OAAOA,EAAQ;AACtC;AC3FA,IAAIwoC,KAAQ;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAYD,GAAM,OAAO,CAACE,GAAWhlC,MAAS;AAChD,QAAM2J,IAAOZ,gBAAAA,GAAW,aAAa/I,CAAI,EAAE,GACrC8hB,IAAO3rB,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACrD,UAAM,EAAE,SAAAoN,GAAS,GAAGyuB,EAAc,IAAK9qC,GACjCsc,IAAOD,IAAU7M,IAAO3J;AAC9B,WAAI,OAAO,SAAW,QACpB,OAAO,OAAO,IAAI,UAAU,CAAC,IAAI,KAEZuB,gBAAAA,EAAAA,IAAIkV,GAAM,EAAE,GAAGwuB,GAAgB,KAAK77B,GAAc;AAAA,EAC3E,CAAC;AACD,SAAA0Y,EAAK,cAAc,aAAa9hB,CAAI,IAC7B,EAAE,GAAGglC,GAAW,CAAChlC,CAAI,GAAG8hB,EAAI;AACrC,GAAG,EAAE;AACL,SAASojB,GAA4BxV,GAAQgS,GAAO;AAClD,EAAIhS,KAAQyV,GAAS,UAAU,MAAMzV,EAAO,cAAcgS,CAAK,CAAC;AAClE;ACrCA,SAAS0D,GAAerK,GAAU;AAChC,QAAMsK,IAAclvC,EAAM,OAAO4kC,CAAQ;AACzC,SAAA5kC,EAAM,UAAU,MAAM;AACpB,IAAAkvC,EAAY,UAAUtK;AAAA,EACxB,CAAC,GACM5kC,EAAM,QAAQ,MAAM,IAAIuB;;AAAS,YAAAyM,IAAAkhC,EAAY,YAAZ,gBAAAlhC,EAAA,KAAAkhC,GAAsB,GAAG3tC;AAAA,KAAO,EAAE;AAC5E;ACLA,SAAS4tC,GAAiBC,GAAqBC,IAAgB,yCAAY,UAAU;AACnF,QAAMC,IAAkBL,GAAeG,CAAmB;AAC1D,EAAApvC,EAAM,UAAU,MAAM;AACpB,UAAMuvC,IAAgB,CAAChE,MAAU;AAC/B,MAAIA,EAAM,QAAQ,YAChB+D,EAAgB/D,CAAK;AAAA,IAEzB;AACA,WAAA8D,EAAc,iBAAiB,WAAWE,GAAe,EAAE,SAAS,IAAM,GACnE,MAAMF,EAAc,oBAAoB,WAAWE,GAAe,EAAE,SAAS,IAAM;AAAA,EAC5F,GAAG,CAACD,GAAiBD,CAAa,CAAC;AACrC;ACJA,IAAIG,KAAyB,oBACzBC,KAAiB,2BACjBC,KAAuB,uCACvBC,KAAgB,iCAChBC,IACAC,KAA0B7vC,EAAM,cAAc;AAAA,EAChD,QAAwB,oBAAI,IAAG;AAAA,EAC/B,wCAAwD,oBAAI,IAAG;AAAA,EAC/D,UAA0B,oBAAI,IAAG;AACnC,CAAC,GACG8vC,KAAmB9vC,EAAM;AAAA,EAC3B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM;AAAA,MACJ,6BAAA88B,IAA8B;AAAA,MAC9B,iBAAAT;AAAA,MACA,sBAAAU;AAAA,MACA,gBAAAC;AAAA,MACA,mBAAAC;AAAA,MACA,WAAAC;AAAA,MACA,GAAGC;AAAA,IACT,IAAQpsC,GACEjB,IAAU/C,EAAM,WAAW6vC,EAAuB,GAClD,CAAChmC,GAAMwmC,CAAO,IAAIrwC,EAAM,SAAS,IAAI,GACrCqvC,KAAgBxlC,KAAA,gBAAAA,EAAM,mBAAiB,yCAAY,WACnD,CAAA,EAAGymC,CAAK,IAAItwC,EAAM,SAAS,CAAA,CAAE,GAC7BuwC,IAAe/9B,GAAgBS,GAAc,CAACu9B,MAAUH,EAAQG,CAAK,CAAC,GACtEC,IAAS,MAAM,KAAK1tC,EAAQ,MAAM,GAClC,CAAC2tC,CAA4C,IAAI,CAAC,GAAG3tC,EAAQ,sCAAsC,EAAE,MAAM,EAAE,GAC7G4tC,IAAoDF,EAAO,QAAQC,CAA4C,GAC/GziC,IAAQpE,IAAO4mC,EAAO,QAAQ5mC,CAAI,IAAI,IACtC+mC,IAA8B7tC,EAAQ,uCAAuC,OAAO,GACpF8tC,IAAyB5iC,KAAS0iC,GAClCG,IAAqBC,GAAsB,CAACxF,MAAU;AAC1D,YAAMhS,IAASgS,EAAM,QACfyF,IAAwB,CAAC,GAAGjuC,EAAQ,QAAQ,EAAE,KAAK,CAACkuC,MAAWA,EAAO,SAAS1X,CAAM,CAAC;AAC5F,MAAI,CAACsX,KAA0BG,MAC/BhB,KAAA,QAAAA,EAAuBzE,IACvB2E,KAAA,QAAAA,EAAoB3E,IACfA,EAAM,oBAAkB4E,KAAA,QAAAA;AAAA,IAC/B,GAAGd,CAAa,GACV6B,IAAeC,GAAgB,CAAC5F,MAAU;AAC9C,YAAMhS,IAASgS,EAAM;AAErB,MADwB,CAAC,GAAGxoC,EAAQ,QAAQ,EAAE,KAAK,CAACkuC,MAAWA,EAAO,SAAS1X,CAAM,CAAC,MAEtF0W,KAAA,QAAAA,EAAiB1E,IACjB2E,KAAA,QAAAA,EAAoB3E,IACfA,EAAM,oBAAkB4E,KAAA,QAAAA;AAAA,IAC/B,GAAGd,CAAa;AAChB,WAAAF,GAAiB,CAAC5D,MAAU;AAE1B,MADuBt9B,MAAUlL,EAAQ,OAAO,OAAO,MAEvDusC,KAAA,QAAAA,EAAkB/D,IACd,CAACA,EAAM,oBAAoB4E,MAC7B5E,EAAM,eAAc,GACpB4E,EAAS;AAAA,IAEb,GAAGd,CAAa,GAChBrvC,EAAM,UAAU,MAAM;AACpB,UAAK6J;AACL,eAAIkmC,MACEhtC,EAAQ,uCAAuC,SAAS,MAC1D6sC,KAA4BP,EAAc,KAAK,MAAM,eACrDA,EAAc,KAAK,MAAM,gBAAgB,SAE3CtsC,EAAQ,uCAAuC,IAAI8G,CAAI,IAEzD9G,EAAQ,OAAO,IAAI8G,CAAI,GACvBunC,GAAc,GACP,MAAM;AACX,UAAIrB,KAA+BhtC,EAAQ,uCAAuC,SAAS,MACzFssC,EAAc,KAAK,MAAM,gBAAgBO;AAAA,QAE7C;AAAA,IACF,GAAG,CAAC/lC,GAAMwlC,GAAeU,GAA6BhtC,CAAO,CAAC,GAC9D/C,EAAM,UAAU,MACP,MAAM;AACX,MAAK6J,MACL9G,EAAQ,OAAO,OAAO8G,CAAI,GAC1B9G,EAAQ,uCAAuC,OAAO8G,CAAI,GAC1DunC,GAAc;AAAA,IAChB,GACC,CAACvnC,GAAM9G,CAAO,CAAC,GAClB/C,EAAM,UAAU,MAAM;AACpB,YAAMqxC,IAAe,MAAMf,EAAM,EAAE;AACnC,sBAAS,iBAAiBb,IAAgB4B,CAAY,GAC/C,MAAM,SAAS,oBAAoB5B,IAAgB4B,CAAY;AAAA,IACxE,GAAG,CAAA,CAAE,GACkBjmC,gBAAAA,EAAAA;AAAAA,MACrBwjC,GAAU;AAAA,MACV;AAAA,QACE,GAAGwB;AAAA,QACH,KAAKG;AAAA,QACL,OAAO;AAAA,UACL,eAAeK,IAA8BC,IAAyB,SAAS,SAAS;AAAA,UACxF,GAAG7sC,EAAM;AAAA,QACnB;AAAA,QACQ,gBAAgBmnC,GAAqBnnC,EAAM,gBAAgBktC,EAAa,cAAc;AAAA,QACtF,eAAe/F,GAAqBnnC,EAAM,eAAektC,EAAa,aAAa;AAAA,QACnF,sBAAsB/F;AAAA,UACpBnnC,EAAM;AAAA,UACN8sC,EAAmB;AAAA,QAC7B;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF;AACAhB,GAAiB,cAAcN;AAC/B,IAAI8B,KAAc,0BACdC,KAAyBvxC,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACrE,QAAMlQ,IAAU/C,EAAM,WAAW6vC,EAAuB,GAClDtnC,IAAMvI,EAAM,OAAO,IAAI,GACvBuwC,IAAe/9B,GAAgBS,GAAc1K,CAAG;AACtD,SAAAvI,EAAM,UAAU,MAAM;AACpB,UAAM6J,IAAOtB,EAAI;AACjB,QAAIsB;AACF,aAAA9G,EAAQ,SAAS,IAAI8G,CAAI,GAClB,MAAM;AACX,QAAA9G,EAAQ,SAAS,OAAO8G,CAAI;AAAA,MAC9B;AAAA,EAEJ,GAAG,CAAC9G,EAAQ,QAAQ,CAAC,GACEqI,gBAAAA,EAAAA,IAAIwjC,GAAU,KAAK,EAAE,GAAG5qC,GAAO,KAAKusC,GAAc;AAC3E,CAAC;AACDgB,GAAuB,cAAcD;AACrC,SAASP,GAAsBf,GAAsBX,IAAgB,yCAAY,UAAU;AACzF,QAAMmC,IAA2BvC,GAAee,CAAoB,GAC9DyB,IAA8BzxC,EAAM,OAAO,EAAK,GAChD0xC,IAAiB1xC,EAAM,OAAO,MAAM;AAAA,EAC1C,CAAC;AACD,SAAAA,EAAM,UAAU,MAAM;AACpB,UAAM2xC,IAAoB,CAACpG,MAAU;AACnC,UAAIA,EAAM,UAAU,CAACkG,EAA4B,SAAS;AACxD,YAAIG,IAA4C,WAAW;AACzD,UAAAC;AAAA,YACEnC;AAAA,YACA8B;AAAA,YACAM;AAAA,YACA,EAAE,UAAU,GAAI;AAAA,UAC5B;AAAA,QACQ;AAEA,cAAMA,IAAc,EAAE,eAAevG,EAAK;AAC1C,QAAIA,EAAM,gBAAgB,WACxB8D,EAAc,oBAAoB,SAASqC,EAAe,OAAO,GACjEA,EAAe,UAAUE,GACzBvC,EAAc,iBAAiB,SAASqC,EAAe,SAAS,EAAE,MAAM,IAAM,KAE9EE,EAAyC;AAAA,MAE7C;AACE,QAAAvC,EAAc,oBAAoB,SAASqC,EAAe,OAAO;AAEnE,MAAAD,EAA4B,UAAU;AAAA,IACxC,GACMM,IAAU,OAAO,WAAW,MAAM;AACtC,MAAA1C,EAAc,iBAAiB,eAAesC,CAAiB;AAAA,IACjE,GAAG,CAAC;AACJ,WAAO,MAAM;AACX,aAAO,aAAaI,CAAO,GAC3B1C,EAAc,oBAAoB,eAAesC,CAAiB,GAClEtC,EAAc,oBAAoB,SAASqC,EAAe,OAAO;AAAA,IACnE;AAAA,EACF,GAAG,CAACrC,GAAemC,CAAwB,CAAC,GACrC;AAAA;AAAA,IAEL,sBAAsB,MAAMC,EAA4B,UAAU;AAAA,EACtE;AACA;AACA,SAASN,GAAgBlB,GAAgBZ,IAAgB,yCAAY,UAAU;AAC7E,QAAM2C,IAAqB/C,GAAegB,CAAc,GAClDgC,IAA4BjyC,EAAM,OAAO,EAAK;AACpD,SAAAA,EAAM,UAAU,MAAM;AACpB,UAAMkyC,IAAc,CAAC3G,MAAU;AAC7B,MAAIA,EAAM,UAAU,CAAC0G,EAA0B,WAE7CJ,GAA6BlC,IAAeqC,GADxB,EAAE,eAAezG,EAAK,GACmC;AAAA,QAC3E,UAAU;AAAA,MACpB,CAAS;AAAA,IAEL;AACA,WAAA8D,EAAc,iBAAiB,WAAW6C,CAAW,GAC9C,MAAM7C,EAAc,oBAAoB,WAAW6C,CAAW;AAAA,EACvE,GAAG,CAAC7C,GAAe2C,CAAkB,CAAC,GAC/B;AAAA,IACL,gBAAgB,MAAMC,EAA0B,UAAU;AAAA,IAC1D,eAAe,MAAMA,EAA0B,UAAU;AAAA,EAC7D;AACA;AACA,SAASb,KAAiB;AACxB,QAAM7F,IAAQ,IAAI,YAAYkE,EAAc;AAC5C,WAAS,cAAclE,CAAK;AAC9B;AACA,SAASsG,GAA6BxtC,GAAM8tC,GAASC,GAAQ,EAAE,UAAAC,EAAQ,GAAI;AACzE,QAAM9Y,IAAS6Y,EAAO,cAAc,QAC9B7G,IAAQ,IAAI,YAAYlnC,GAAM,EAAE,SAAS,IAAO,YAAY,IAAM,QAAA+tC,GAAQ;AAChF,EAAID,KAAS5Y,EAAO,iBAAiBl1B,GAAM8tC,GAAS,EAAE,MAAM,IAAM,GAC9DE,IACFtD,GAA4BxV,GAAQgS,CAAK,IAEzChS,EAAO,cAAcgS,CAAK;AAE9B;AC3MA,IAAI+G,KAAqB,+BACrBC,KAAuB,iCACvBC,KAAgB,EAAE,SAAS,IAAO,YAAY,GAAI,GAClDC,KAAmB,cACnBC,KAAa1yC,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACzD,QAAM;AAAA,IACJ,MAAA0/B,IAAO;AAAA,IACP,SAAAC,IAAU;AAAA,IACV,kBAAkBC;AAAA,IAClB,oBAAoBC;AAAA,IACpB,GAAGC;AAAA,EACP,IAAM/uC,GACE,CAACkM,GAAW8iC,CAAY,IAAIhzC,EAAM,SAAS,IAAI,GAC/CizC,IAAmBhE,GAAe4D,CAAoB,GACtDK,IAAqBjE,GAAe6D,CAAsB,GAC1DK,IAAwBnzC,EAAM,OAAO,IAAI,GACzCuwC,IAAe/9B,GAAgBS,GAAc,CAACpJ,MAASmpC,EAAanpC,CAAI,CAAC,GACzEupC,IAAapzC,EAAM,OAAO;AAAA,IAC9B,QAAQ;AAAA,IACR,QAAQ;AACN,WAAK,SAAS;AAAA,IAChB;AAAA,IACA,SAAS;AACP,WAAK,SAAS;AAAA,IAChB;AAAA,EACJ,CAAG,EAAE;AACH,EAAAA,EAAM,UAAU,MAAM;AACpB,QAAI4yC,GAAS;AACX,UAAIS,IAAiB,SAAS9H,GAAO;AACnC,YAAI6H,EAAW,UAAU,CAACljC,EAAW;AACrC,cAAMqpB,IAASgS,EAAM;AACrB,QAAIr7B,EAAU,SAASqpB,CAAM,IAC3B4Z,EAAsB,UAAU5Z,IAEhC+Z,GAAMH,EAAsB,SAAS,EAAE,QAAQ,GAAI,CAAE;AAAA,MAEzD,GAAGI,IAAkB,SAAShI,GAAO;AACnC,YAAI6H,EAAW,UAAU,CAACljC,EAAW;AACrC,cAAMsjC,IAAgBjI,EAAM;AAC5B,QAAIiI,MAAkB,SACjBtjC,EAAU,SAASsjC,CAAa,KACnCF,GAAMH,EAAsB,SAAS,EAAE,QAAQ,GAAI,CAAE;AAAA,MAEzD,GAAGM,IAAmB,SAASC,GAAW;AAExC,YADuB,SAAS,kBACT,SAAS;AAChC,qBAAWC,KAAYD;AACrB,YAAIC,EAAS,aAAa,SAAS,KAAGL,GAAMpjC,CAAS;AAAA,MAEzD;AAEA,eAAS,iBAAiB,WAAWmjC,CAAc,GACnD,SAAS,iBAAiB,YAAYE,CAAe;AACrD,YAAMK,IAAmB,IAAI,iBAAiBH,CAAgB;AAC9D,aAAIvjC,KAAW0jC,EAAiB,QAAQ1jC,GAAW,EAAE,WAAW,IAAM,SAAS,IAAM,GAC9E,MAAM;AACX,iBAAS,oBAAoB,WAAWmjC,CAAc,GACtD,SAAS,oBAAoB,YAAYE,CAAe,GACxDK,EAAiB,WAAU;AAAA,MAC7B;AAAA,IACF;AAAA,EACF,GAAG,CAAChB,GAAS1iC,GAAWkjC,EAAW,MAAM,CAAC,GAC1CpzC,EAAM,UAAU,MAAM;AACpB,QAAIkQ,GAAW;AACb,MAAA2jC,GAAiB,IAAIT,CAAU;AAC/B,YAAMU,IAA2B,SAAS;AAE1C,UAAI,CADwB5jC,EAAU,SAAS4jC,CAAwB,GAC7C;AACxB,cAAMC,IAAa,IAAI,YAAYzB,IAAoBE,EAAa;AACpE,QAAAtiC,EAAU,iBAAiBoiC,IAAoBW,CAAgB,GAC/D/iC,EAAU,cAAc6jC,CAAU,GAC7BA,EAAW,qBACdC,GAAWC,GAAYC,GAAsBhkC,CAAS,CAAC,GAAG,EAAE,QAAQ,IAAM,GACtE,SAAS,kBAAkB4jC,KAC7BR,GAAMpjC,CAAS;AAAA,MAGrB;AACA,aAAO,MAAM;AACX,QAAAA,EAAU,oBAAoBoiC,IAAoBW,CAAgB,GAClE,WAAW,MAAM;AACf,gBAAMkB,IAAe,IAAI,YAAY5B,IAAsBC,EAAa;AACxE,UAAAtiC,EAAU,iBAAiBqiC,IAAsBW,CAAkB,GACnEhjC,EAAU,cAAcikC,CAAY,GAC/BA,EAAa,oBAChBb,GAAMQ,KAA4B,SAAS,MAAM,EAAE,QAAQ,IAAM,GAEnE5jC,EAAU,oBAAoBqiC,IAAsBW,CAAkB,GACtEW,GAAiB,OAAOT,CAAU;AAAA,QACpC,GAAG,CAAC;AAAA,MACN;AAAA,IACF;AAAA,EACF,GAAG,CAACljC,GAAW+iC,GAAkBC,GAAoBE,CAAU,CAAC;AAChE,QAAM7D,IAAgBvvC,EAAM;AAAA,IAC1B,CAACurC,MAAU;AAET,UADI,CAACoH,KAAQ,CAACC,KACVQ,EAAW,OAAQ;AACvB,YAAMgB,IAAW7I,EAAM,QAAQ,SAAS,CAACA,EAAM,UAAU,CAACA,EAAM,WAAW,CAACA,EAAM,SAC5E8I,IAAiB,SAAS;AAChC,UAAID,KAAYC,GAAgB;AAC9B,cAAMC,IAAa/I,EAAM,eACnB,CAACrX,GAAOqgB,CAAI,IAAIC,GAAiBF,CAAU;AAEjD,QADkCpgB,KAASqgB,IAIrC,CAAChJ,EAAM,YAAY8I,MAAmBE,KACxChJ,EAAM,eAAc,GAChBoH,KAAMW,GAAMpf,GAAO,EAAE,QAAQ,GAAI,CAAE,KAC9BqX,EAAM,YAAY8I,MAAmBngB,MAC9CqX,EAAM,eAAc,GAChBoH,KAAMW,GAAMiB,GAAM,EAAE,QAAQ,GAAI,CAAE,KAPpCF,MAAmBC,KAAY/I,EAAM,eAAc;AAAA,MAU3D;AAAA,IACF;AAAA,IACA,CAACoH,GAAMC,GAASQ,EAAW,MAAM;AAAA,EACrC;AACE,SAAuBhoC,gBAAAA,MAAIwjC,GAAU,KAAK,EAAE,UAAU,IAAI,GAAGmE,GAAY,KAAKxC,GAAc,WAAWhB,EAAa,CAAE;AACxH,CAAC;AACDmD,GAAW,cAAcD;AACzB,SAASuB,GAAWS,GAAY,EAAE,QAAAC,IAAS,GAAK,IAAK,CAAA,GAAI;AACvD,QAAMZ,IAA2B,SAAS;AAC1C,aAAWa,KAAaF;AAEtB,QADAnB,GAAMqB,GAAW,EAAE,QAAAD,GAAQ,GACvB,SAAS,kBAAkBZ,EAA0B;AAE7D;AACA,SAASU,GAAiBtkC,GAAW;AACnC,QAAMukC,IAAaP,GAAsBhkC,CAAS,GAC5CgkB,IAAQ0gB,GAAYH,GAAYvkC,CAAS,GACzCqkC,IAAOK,GAAYH,EAAW,QAAO,GAAIvkC,CAAS;AACxD,SAAO,CAACgkB,GAAOqgB,CAAI;AACrB;AACA,SAASL,GAAsBhkC,GAAW;AACxC,QAAM2kC,IAAQ,CAAA,GACRC,IAAS,SAAS,iBAAiB5kC,GAAW,WAAW,cAAc;AAAA,IAC3E,YAAY,CAACrG,MAAS;AACpB,YAAMkrC,IAAgBlrC,EAAK,YAAY,WAAWA,EAAK,SAAS;AAChE,aAAIA,EAAK,YAAYA,EAAK,UAAUkrC,IAAsB,WAAW,cAC9DlrC,EAAK,YAAY,IAAI,WAAW,gBAAgB,WAAW;AAAA,IACpE;AAAA,EACJ,CAAG;AACD,SAAOirC,EAAO,SAAQ,IAAI,CAAAD,EAAM,KAAKC,EAAO,WAAW;AACvD,SAAOD;AACT;AACA,SAASD,GAAYhU,GAAU1wB,GAAW;AACxC,aAAW/J,KAAWy6B;AACpB,QAAI,CAACoU,GAAS7uC,GAAS,EAAE,MAAM+J,EAAS,CAAE,EAAG,QAAO/J;AAExD;AACA,SAAS6uC,GAASnrC,GAAM,EAAE,MAAAorC,KAAQ;AAChC,MAAI,iBAAiBprC,CAAI,EAAE,eAAe,SAAU,QAAO;AAC3D,SAAOA,KAAM;AACX,QAAIorC,MAAS,UAAUprC,MAASorC,EAAM,QAAO;AAC7C,QAAI,iBAAiBprC,CAAI,EAAE,YAAY,OAAQ,QAAO;AACtD,IAAAA,IAAOA,EAAK;AAAA,EACd;AACA,SAAO;AACT;AACA,SAASqrC,GAAkB/uC,GAAS;AAClC,SAAOA,aAAmB,oBAAoB,YAAYA;AAC5D;AACA,SAASmtC,GAAMntC,GAAS,EAAE,QAAAuuC,IAAS,GAAK,IAAK,CAAA,GAAI;AAC/C,MAAIvuC,KAAWA,EAAQ,OAAO;AAC5B,UAAM2tC,IAA2B,SAAS;AAC1C,IAAA3tC,EAAQ,MAAM,EAAE,eAAe,GAAI,CAAE,GACjCA,MAAY2tC,KAA4BoB,GAAkB/uC,CAAO,KAAKuuC,KACxEvuC,EAAQ,OAAM;AAAA,EAClB;AACF;AACA,IAAI0tC,KAAmBsB,GAAsB;AAC7C,SAASA,KAAyB;AAChC,MAAIvzC,IAAQ,CAAA;AACZ,SAAO;AAAA,IACL,IAAIwxC,GAAY;AACd,YAAMgC,IAAmBxzC,EAAM,CAAC;AAChC,MAAIwxC,MAAegC,MACjBA,KAAA,QAAAA,EAAkB,UAEpBxzC,IAAQyzC,GAAYzzC,GAAOwxC,CAAU,GACrCxxC,EAAM,QAAQwxC,CAAU;AAAA,IAC1B;AAAA,IACA,OAAOA,GAAY;;AACjB,MAAAxxC,IAAQyzC,GAAYzzC,GAAOwxC,CAAU,IACrCplC,IAAApM,EAAM,CAAC,MAAP,QAAAoM,EAAU;AAAA,IACZ;AAAA,EACJ;AACA;AACA,SAASqnC,GAAY7sB,GAAO1mB,GAAM;AAChC,QAAMwzC,IAAe,CAAC,GAAG9sB,CAAK,GACxBva,IAAQqnC,EAAa,QAAQxzC,CAAI;AACvC,SAAImM,MAAU,MACZqnC,EAAa,OAAOrnC,GAAO,CAAC,GAEvBqnC;AACT;AACA,SAASrB,GAAYxgB,GAAO;AAC1B,SAAOA,EAAM,OAAO,CAAC3xB,MAASA,EAAK,YAAY,GAAG;AACpD;ACvMA,IAAIyzC,KAAc,UACdC,KAASx1C,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;;AACrD,QAAM,EAAE,WAAWwiC,GAAe,GAAGC,EAAW,IAAK1xC,GAC/C,CAAC2xC,GAASC,CAAU,IAAI51C,EAAM,SAAS,EAAK;AAClDwtC,EAAAA,GAAgB,MAAMoI,EAAW,EAAI,GAAG,CAAA,CAAE;AAC1C,QAAM1lC,IAAYulC,KAAiBE,OAAW3nC,IAAA,yCAAY,aAAZ,gBAAAA,EAAsB;AACpE,SAAOkC,IAAY8+B,GAAS,aAA6B5jC,gBAAAA,EAAAA,IAAIwjC,GAAU,KAAK,EAAE,GAAG8G,GAAa,KAAKziC,EAAY,CAAE,GAAG/C,CAAS,IAAI;AACnI,CAAC;AACDslC,GAAO,cAAcD;ACPrB,SAASM,GAAgBC,GAAcC,GAAS;AAC9C,SAAO/1C,EAAM,WAAW,CAACg2C,GAAOzK,MACZwK,EAAQC,CAAK,EAAEzK,CAAK,KAClByK,GACnBF,CAAY;AACjB;AAGA,IAAIG,KAAW,CAACjyC,MAAU;AACxB,QAAM,EAAE,SAAAkyC,GAAS,UAAAnrC,EAAQ,IAAK/G,GACxBmyC,IAAWC,GAAYF,CAAO,GAC9BnsC,IAAQ,OAAOgB,KAAa,aAAaA,EAAS,EAAE,SAASorC,EAAS,UAAS,CAAE,IAAIE,EAAO,SAAS,KAAKtrC,CAAQ,GAClHxC,IAAMiK,GAAgB2jC,EAAS,KAAKziC,GAAc3J,CAAK,CAAC;AAE9D,SADmB,OAAOgB,KAAa,cAClBorC,EAAS,YAAYE,EAAO,aAAatsC,GAAO,EAAE,KAAAxB,EAAG,CAAE,IAAI;AAClF;AACA0tC,GAAS,cAAc;AACvB,SAASG,GAAYF,GAAS;AAC5B,QAAM,CAACrsC,GAAMwmC,CAAO,IAAIgG,EAAO,SAAQ,GACjCC,IAAYD,EAAO,OAAO,IAAI,GAC9BE,IAAiBF,EAAO,OAAOH,CAAO,GACtCM,IAAuBH,EAAO,OAAO,MAAM,GAC3CP,IAAeI,IAAU,YAAY,aACrC,CAACF,GAAOS,CAAI,IAAIZ,GAAgBC,GAAc;AAAA,IAClD,SAAS;AAAA,MACP,SAAS;AAAA,MACT,eAAe;AAAA,IACrB;AAAA,IACI,kBAAkB;AAAA,MAChB,OAAO;AAAA,MACP,eAAe;AAAA,IACrB;AAAA,IACI,WAAW;AAAA,MACT,OAAO;AAAA,IACb;AAAA,EACA,CAAG;AACDO,SAAAA,EAAO,UAAU,MAAM;AACrB,UAAMK,IAAuBC,GAAiBL,EAAU,OAAO;AAC/D,IAAAE,EAAqB,UAAUR,MAAU,YAAYU,IAAuB;AAAA,EAC9E,GAAG,CAACV,CAAK,CAAC,GACVxI,GAAgB,MAAM;AACpB,UAAMoJ,IAASN,EAAU,SACnBO,IAAaN,EAAe;AAElC,QAD0BM,MAAeX,GAClB;AACrB,YAAMY,IAAoBN,EAAqB,SACzCE,IAAuBC,GAAiBC,CAAM;AACpD,MAAIV,IACFO,EAAK,OAAO,IACHC,MAAyB,WAAUE,KAAA,gBAAAA,EAAQ,aAAY,SAChEH,EAAK,SAAS,IAIZA,EADEI,KADgBC,MAAsBJ,IAEnC,kBAEA,SAFe,GAKxBH,EAAe,UAAUL;AAAA,IAC3B;AAAA,EACF,GAAG,CAACA,GAASO,CAAI,CAAC,GAClBjJ,GAAgB,MAAM;AACpB,QAAI3jC,GAAM;AACR,UAAIktC;AACJ,YAAMC,IAAcntC,EAAK,cAAc,eAAe,QAChDotC,IAAqB,CAAC1L,MAAU;AAEpC,cAAM2L,IADuBP,GAAiBL,EAAU,OAAO,EACf,SAAS,IAAI,OAAO/K,EAAM,aAAa,CAAC;AACxF,YAAIA,EAAM,WAAW1hC,KAAQqtC,MAC3BT,EAAK,eAAe,GAChB,CAACF,EAAe,UAAS;AAC3B,gBAAMY,IAAkBttC,EAAK,MAAM;AACnC,UAAAA,EAAK,MAAM,oBAAoB,YAC/BktC,IAAYC,EAAY,WAAW,MAAM;AACvC,YAAIntC,EAAK,MAAM,sBAAsB,eACnCA,EAAK,MAAM,oBAAoBstC;AAAA,UAEnC,CAAC;AAAA,QACH;AAAA,MAEJ,GACMC,IAAuB,CAAC7L,MAAU;AACtC,QAAIA,EAAM,WAAW1hC,MACnB2sC,EAAqB,UAAUG,GAAiBL,EAAU,OAAO;AAAA,MAErE;AACA,aAAAzsC,EAAK,iBAAiB,kBAAkButC,CAAoB,GAC5DvtC,EAAK,iBAAiB,mBAAmBotC,CAAkB,GAC3DptC,EAAK,iBAAiB,gBAAgBotC,CAAkB,GACjD,MAAM;AACX,QAAAD,EAAY,aAAaD,CAAS,GAClCltC,EAAK,oBAAoB,kBAAkButC,CAAoB,GAC/DvtC,EAAK,oBAAoB,mBAAmBotC,CAAkB,GAC9DptC,EAAK,oBAAoB,gBAAgBotC,CAAkB;AAAA,MAC7D;AAAA,IACF;AACE,MAAAR,EAAK,eAAe;AAAA,EAExB,GAAG,CAAC5sC,GAAM4sC,CAAI,CAAC,GACR;AAAA,IACL,WAAW,CAAC,WAAW,kBAAkB,EAAE,SAAST,CAAK;AAAA,IACzD,KAAKK,EAAO,YAAY,CAAC7F,MAAU;AACjC,MAAA8F,EAAU,UAAU9F,IAAQ,iBAAiBA,CAAK,IAAI,MACtDH,EAAQG,CAAK;AAAA,IACf,GAAG,CAAA,CAAE;AAAA,EACT;AACA;AACA,SAASmG,GAAiBC,GAAQ;AAChC,UAAOA,KAAA,gBAAAA,EAAQ,kBAAiB;AAClC;AACA,SAASljC,GAAcvN,GAAS;;AAC9B,MAAI0B,KAASmG,IAAA,OAAO,yBAAyB7H,EAAQ,OAAO,KAAK,MAApD,gBAAA6H,EAAuD,KAChEkG,IAAUrM,KAAU,oBAAoBA,KAAUA,EAAO;AAC7D,SAAIqM,IACK/N,EAAQ,OAEjB0B,KAASsM,IAAA,OAAO,yBAAyBhO,GAAS,KAAK,MAA9C,gBAAAgO,EAAiD,KAC1DD,IAAUrM,KAAU,oBAAoBA,KAAUA,EAAO,gBACrDqM,IACK/N,EAAQ,MAAM,MAEhBA,EAAQ,MAAM,OAAOA,EAAQ;AACtC;AChIA,IAAIyhC,KAAQ;AAKZ,SAASyP,KAAiB;AACxB,EAAAr3C,EAAM,UAAU,MAAM;AACpB,UAAMs3C,IAAa,SAAS,iBAAiB,0BAA0B;AACvE,oBAAS,KAAK,sBAAsB,cAAcA,EAAW,CAAC,KAAKC,IAAkB,GACrF,SAAS,KAAK,sBAAsB,aAAaD,EAAW,CAAC,KAAKC,IAAkB,GACpF3P,MACO,MAAM;AACX,MAAIA,OAAU,KACZ,SAAS,iBAAiB,0BAA0B,EAAE,QAAQ,CAAC/9B,MAASA,EAAK,QAAQ,GAEvF+9B;AAAA,IACF;AAAA,EACF,GAAG,CAAA,CAAE;AACP;AACA,SAAS2P,KAAmB;AAC1B,QAAMpxC,IAAU,SAAS,cAAc,MAAM;AAC7C,SAAAA,EAAQ,aAAa,0BAA0B,EAAE,GACjDA,EAAQ,WAAW,GACnBA,EAAQ,MAAM,UAAU,QACxBA,EAAQ,MAAM,UAAU,KACxBA,EAAQ,MAAM,WAAW,SACzBA,EAAQ,MAAM,gBAAgB,QACvBA;AACT;ACDO,IAAIqxC,KAAW,WAAW;AAC/BA,SAAAA,KAAW,OAAO,UAAU,SAAkB,GAAG;AAC7C,aAAShyC,GAAGsE,IAAI,GAAGzK,IAAI,UAAU,QAAQyK,IAAIzK,GAAGyK,KAAK;AACjD,MAAAtE,IAAI,UAAUsE,CAAC;AACf,eAASxK,KAAKkG,EAAG,CAAI,OAAO,UAAU,eAAe,KAAKA,GAAGlG,CAAC,MAAG,EAAEA,CAAC,IAAIkG,EAAElG,CAAC;AAAA,IAC/E;AACA,WAAO;AAAA,EACX,GACOk4C,GAAS,MAAM,MAAM,SAAS;AACvC;AAEO,SAASC,GAAOjyC,GAAG3F,GAAG;AAC3B,MAAIkhB,IAAI,CAAA;AACR,WAASzhB,KAAKkG,EAAG,CAAI,OAAO,UAAU,eAAe,KAAKA,GAAGlG,CAAC,KAAKO,EAAE,QAAQP,CAAC,IAAI,MAC9EyhB,EAAEzhB,CAAC,IAAIkG,EAAElG,CAAC;AACd,MAAIkG,KAAK,QAAQ,OAAO,OAAO,yBAA0B;AACrD,aAASsE,IAAI,GAAGxK,IAAI,OAAO,sBAAsBkG,CAAC,GAAGsE,IAAIxK,EAAE,QAAQwK;AAC/D,MAAIjK,EAAE,QAAQP,EAAEwK,CAAC,CAAC,IAAI,KAAK,OAAO,UAAU,qBAAqB,KAAKtE,GAAGlG,EAAEwK,CAAC,CAAC,MACzEiX,EAAEzhB,EAAEwK,CAAC,CAAC,IAAItE,EAAElG,EAAEwK,CAAC,CAAC;AAE5B,SAAOiX;AACT;AAiKO,SAAS22B,GAAc3Q,GAAID,GAAM6Q,GAAM;AAC5C,MAAIA,KAAQ,UAAU,WAAW,EAAG,UAAS7tC,IAAI,GAAG3K,IAAI2nC,EAAK,QAAQ8Q,GAAI9tC,IAAI3K,GAAG2K;AAC5E,KAAI8tC,KAAM,EAAE9tC,KAAKg9B,QACR8Q,MAAIA,IAAK,MAAM,UAAU,MAAM,KAAK9Q,GAAM,GAAGh9B,CAAC,IACnD8tC,EAAG9tC,CAAC,IAAIg9B,EAAKh9B,CAAC;AAGtB,SAAOi9B,EAAG,OAAO6Q,KAAM,MAAM,UAAU,MAAM,KAAK9Q,CAAI,CAAC;AACzD;AC7NO,IAAI+Q,KAAqB,6BACrBC,KAAqB,2BACrBC,KAAwB,2BAKxBC,KAAyB;ACM7B,SAASC,GAAU1vC,GAAKrB,GAAO;AAClC,SAAI,OAAOqB,KAAQ,aACfA,EAAIrB,CAAK,IAEJqB,MACLA,EAAI,UAAUrB,IAEXqB;AACX;ACNO,SAAS0mC,GAAeiJ,GAActT,GAAU;AACnD,MAAIr8B,IAAM2D,GAAS,WAAY;AAAE,WAAQ;AAAA;AAAA,MAErC,OAAOgsC;AAAA;AAAA,MAEP,UAAUtT;AAAA;AAAA,MAEV,QAAQ;AAAA,QACJ,IAAI,UAAU;AACV,iBAAOr8B,EAAI;AAAA,QACf;AAAA,QACA,IAAI,QAAQrB,GAAO;AACf,cAAIqtC,IAAOhsC,EAAI;AACf,UAAIgsC,MAASrtC,MACTqB,EAAI,QAAQrB,GACZqB,EAAI,SAASrB,GAAOqtC,CAAI;AAAA,QAEhC;AAAA,MACZ;AAAA,IACA;AAAA,EAAQ,CAAC,EAAE,CAAC;AAER,SAAAhsC,EAAI,WAAWq8B,GACRr8B,EAAI;AACf;ACnCA,IAAI4vC,KAA4B,OAAO,SAAW,MAAcn4C,EAAM,kBAAkBA,EAAM,WAC1Fo4C,KAAgB,oBAAI,QAAO;AAexB,SAASC,GAAajmC,GAAMkmC,GAAc;AAC7C,MAAIpJ,IAAcD,GAA+B,MAAM,SAAUsJ,GAAU;AACvE,WAAOnmC,EAAK,QAAQ,SAAU7J,GAAK;AAAE,aAAO0vC,GAAU1vC,GAAKgwC,CAAQ;AAAA,IAAG,CAAC;AAAA,EAC3E,CAAC;AAEDJ,SAAAA,GAA0B,WAAY;AAClC,QAAIK,IAAWJ,GAAc,IAAIlJ,CAAW;AAC5C,QAAIsJ,GAAU;AACV,UAAIC,IAAa,IAAI,IAAID,CAAQ,GAC7BE,IAAa,IAAI,IAAItmC,CAAI,GACzBumC,IAAYzJ,EAAY;AAC5B,MAAAuJ,EAAW,QAAQ,SAAUlwC,GAAK;AAC9B,QAAKmwC,EAAW,IAAInwC,CAAG,KACnB0vC,GAAU1vC,GAAK,IAAI;AAAA,MAE3B,CAAC,GACDmwC,EAAW,QAAQ,SAAUnwC,GAAK;AAC9B,QAAKkwC,EAAW,IAAIlwC,CAAG,KACnB0vC,GAAU1vC,GAAKowC,CAAS;AAAA,MAEhC,CAAC;AAAA,IACL;AACA,IAAAP,GAAc,IAAIlJ,GAAa98B,CAAI;AAAA,EACvC,GAAG,CAACA,CAAI,CAAC,GACF88B;AACX;AC3CA,SAAS0J,GAAKn5C,GAAG;AACb,SAAOA;AACX;AACA,SAASo5C,GAAkBC,GAAUC,GAAY;AAC7C,EAAIA,MAAe,WAAUA,IAAaH;AAC1C,MAAII,IAAS,CAAA,GACTC,IAAW,IACXC,IAAS;AAAA,IACT,MAAM,WAAY;AACd,UAAID;AACA,cAAM,IAAI,MAAM,kGAAkG;AAEtH,aAAID,EAAO,SACAA,EAAOA,EAAO,SAAS,CAAC,IAE5BF;AAAA,IACX;AAAA,IACA,WAAW,SAAU9sC,GAAM;AACvB,UAAIlK,IAAOi3C,EAAW/sC,GAAMitC,CAAQ;AACpC,aAAAD,EAAO,KAAKl3C,CAAI,GACT,WAAY;AACf,QAAAk3C,IAASA,EAAO,OAAO,SAAUx0C,GAAG;AAAE,iBAAOA,MAAM1C;AAAA,QAAM,CAAC;AAAA,MAC9D;AAAA,IACJ;AAAA,IACA,kBAAkB,SAAUq3C,GAAI;AAE5B,WADAF,IAAW,IACJD,EAAO,UAAQ;AAClB,YAAII,IAAMJ;AACV,QAAAA,IAAS,CAAA,GACTI,EAAI,QAAQD,CAAE;AAAA,MAClB;AACA,MAAAH,IAAS;AAAA,QACL,MAAM,SAAUx0C,GAAG;AAAE,iBAAO20C,EAAG30C,CAAC;AAAA,QAAG;AAAA,QACnC,QAAQ,WAAY;AAAE,iBAAOw0C;AAAA,QAAQ;AAAA,MACrD;AAAA,IACQ;AAAA,IACA,cAAc,SAAUG,GAAI;AACxB,MAAAF,IAAW;AACX,UAAII,IAAe,CAAA;AACnB,UAAIL,EAAO,QAAQ;AACf,YAAII,IAAMJ;AACV,QAAAA,IAAS,CAAA,GACTI,EAAI,QAAQD,CAAE,GACdE,IAAeL;AAAA,MACnB;AACA,UAAIM,IAAe,WAAY;AAC3B,YAAIF,IAAMC;AACV,QAAAA,IAAe,CAAA,GACfD,EAAI,QAAQD,CAAE;AAAA,MAClB,GACII,IAAQ,WAAY;AAAE,eAAO,QAAQ,QAAO,EAAG,KAAKD,CAAY;AAAA,MAAG;AACvE,MAAAC,EAAK,GACLP,IAAS;AAAA,QACL,MAAM,SAAUx0C,GAAG;AACf,UAAA60C,EAAa,KAAK70C,CAAC,GACnB+0C,EAAK;AAAA,QACT;AAAA,QACA,QAAQ,SAAUC,GAAQ;AACtB,iBAAAH,IAAeA,EAAa,OAAOG,CAAM,GAClCR;AAAA,QACX;AAAA,MAChB;AAAA,IACQ;AAAA,EACR;AACI,SAAOE;AACX;AAMO,SAASO,GAAoBxd,GAAS;AACzC,EAAIA,MAAY,WAAUA,IAAU,CAAA;AACpC,MAAIid,IAASL,GAAkB,IAAI;AACnC,SAAAK,EAAO,UAAU1B,GAAS,EAAE,OAAO,IAAM,KAAK,GAAK,GAAIvb,CAAO,GACvDid;AACX;AC3EA,IAAIQ,KAAU,SAAU1rC,GAAI;AACxB,MAAI2rC,IAAU3rC,EAAG,SAASoyB,IAAOqX,GAAOzpC,GAAI,CAAC,SAAS,CAAC;AACvD,MAAI,CAAC2rC;AACD,UAAM,IAAI,MAAM,oEAAoE;AAExF,MAAIC,IAASD,EAAQ,KAAI;AACzB,MAAI,CAACC;AACD,UAAM,IAAI,MAAM,0BAA0B;AAE9C,SAAO55C,EAAM,cAAc45C,GAAQpC,GAAS,CAAA,GAAIpX,CAAI,CAAC;AACzD;AACAsZ,GAAQ,kBAAkB;AACnB,SAASG,GAAcX,GAAQY,GAAU;AAC5C,SAAAZ,EAAO,UAAUY,CAAQ,GAClBJ;AACX;AChBO,IAAIK,KAAYN,GAAmB,GCItCO,KAAU,WAAY;AAE1B,GAIIC,KAAej6C,EAAM,WAAW,SAAUgE,GAAOk2C,GAAW;AAC5D,MAAI3xC,IAAMvI,EAAM,OAAO,IAAI,GACvBgO,IAAKhO,EAAM,SAAS;AAAA,IACpB,iBAAiBg6C;AAAA,IACjB,gBAAgBA;AAAA,IAChB,oBAAoBA;AAAA,EAC5B,CAAK,GAAGrU,IAAY33B,EAAG,CAAC,GAAGmsC,IAAensC,EAAG,CAAC,GACtCosC,IAAep2C,EAAM,cAAc+G,IAAW/G,EAAM,UAAUgJ,IAAYhJ,EAAM,WAAWq2C,IAAkBr2C,EAAM,iBAAiB8H,IAAU9H,EAAM,SAASs2C,IAASt2C,EAAM,QAAQ21C,IAAU31C,EAAM,SAASu2C,IAAav2C,EAAM,YAAYw2C,IAAcx2C,EAAM,aAAay2C,IAAQz2C,EAAM,OAAO02C,IAAiB12C,EAAM,gBAAgBmQ,IAAKnQ,EAAM,IAAI22C,IAAYxmC,MAAO,SAAS,QAAQA,GAAIymC,IAAU52C,EAAM,SAASo8B,IAAOqX,GAAOzzC,GAAO,CAAC,gBAAgB,YAAY,aAAa,mBAAmB,WAAW,UAAU,WAAW,cAAc,eAAe,SAAS,kBAAkB,MAAM,SAAS,CAAC,GACnlB01C,IAAUC,GACV3P,IAAeqO,GAAa,CAAC9vC,GAAK2xC,CAAS,CAAC,GAC5CW,IAAiBrD,GAASA,GAAS,CAAA,GAAIpX,CAAI,GAAGuF,CAAS;AAC3D,SAAQ3lC,EAAM;AAAA,IAAcA,EAAM;AAAA,IAAU;AAAA,IACxC8L,KAAY9L,EAAM,cAAc05C,GAAS,EAAE,SAASK,IAAW,iBAAiBM,GAAiB,QAAQC,GAAQ,YAAYC,GAAY,aAAaC,GAAa,OAAOC,GAAO,cAAcN,GAAc,gBAAgB,CAAC,CAACO,GAAgB,SAASnyC,GAAK,SAASqyC,EAAO,CAAE;AAAA,IAC/QR,IAAgBp6C,EAAM,aAAaA,EAAM,SAAS,KAAK+K,CAAQ,GAAGysC,GAASA,GAAS,CAAA,GAAIqD,CAAc,GAAG,EAAE,KAAK7Q,EAAY,CAAE,CAAC,IAAMhqC,EAAM,cAAc26C,GAAWnD,GAAS,CAAA,GAAIqD,GAAgB,EAAE,WAAW7tC,GAAW,KAAKg9B,EAAY,CAAE,GAAGj/B,CAAQ;AAAA,EAAE;AACjQ,CAAC;AACDkvC,GAAa,eAAe;AAAA,EACxB,SAAS;AAAA,EACT,iBAAiB;AAAA,EACjB,OAAO;AACX;AACAA,GAAa,aAAa;AAAA,EACtB,WAAWnC;AAAA,EACX,WAAWD;AACf;AC9BO,IAAIiD,KAAW,WAAY;AAI9B,MAAI,OAAO,oBAAsB;AAC7B,WAAO;AAGf;ACXA,SAASC,KAAe;AACpB,MAAI,CAAC;AACD,WAAO;AACX,MAAI/nB,IAAM,SAAS,cAAc,OAAO;AACxC,EAAAA,EAAI,OAAO;AACX,MAAIgoB,IAAQF,GAAQ;AACpB,SAAIE,KACAhoB,EAAI,aAAa,SAASgoB,CAAK,GAE5BhoB;AACX;AACA,SAASioB,GAAajoB,GAAKkoB,GAAK;AAE5B,EAAIloB,EAAI,aAEJA,EAAI,WAAW,UAAUkoB,IAGzBloB,EAAI,YAAY,SAAS,eAAekoB,CAAG,CAAC;AAEpD;AACA,SAASC,GAAenoB,GAAK;AACzB,MAAIuU,IAAO,SAAS,QAAQ,SAAS,qBAAqB,MAAM,EAAE,CAAC;AACnE,EAAAA,EAAK,YAAYvU,CAAG;AACxB;AACO,IAAIooB,KAAsB,WAAY;AACzC,MAAIC,IAAU,GACVC,IAAa;AACjB,SAAO;AAAA,IACH,KAAK,SAAUC,GAAO;AAClB,MAAIF,KAAW,MACNC,IAAaP,UACdE,GAAaK,GAAYC,CAAK,GAC9BJ,GAAeG,CAAU,IAGjCD;AAAA,IACJ;AAAA,IACA,QAAQ,WAAY;AAChB,MAAAA,KACI,CAACA,KAAWC,MACZA,EAAW,cAAcA,EAAW,WAAW,YAAYA,CAAU,GACrEA,IAAa;AAAA,IAErB;AAAA,EACR;AACA,GCpCWE,KAAqB,WAAY;AACxC,MAAIC,IAAQL,GAAmB;AAC/B,SAAO,SAAUxE,GAAQ8E,GAAW;AAChC,IAAA17C,EAAM,UAAU,WAAY;AACxB,aAAAy7C,EAAM,IAAI7E,CAAM,GACT,WAAY;AACf,QAAA6E,EAAM,OAAM;AAAA,MAChB;AAAA,IACJ,GAAG,CAAC7E,KAAU8E,CAAS,CAAC;AAAA,EAC5B;AACJ,GCdWC,KAAiB,WAAY;AACpC,MAAIC,IAAWJ,GAAkB,GAC7BK,IAAQ,SAAU7tC,GAAI;AACtB,QAAI4oC,IAAS5oC,EAAG,QAAQ8tC,IAAU9tC,EAAG;AACrC,WAAA4tC,EAAShF,GAAQkF,CAAO,GACjB;AAAA,EACX;AACA,SAAOD;AACX,GCfWE,KAAU;AAAA,EACjB,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,KAAK;AACT,GACIC,KAAQ,SAAUx3C,GAAG;AAAE,SAAO,SAASA,KAAK,IAAI,EAAE,KAAK;AAAG,GAC1Dy3C,KAAY,SAAUrB,GAAS;AAC/B,MAAIsB,IAAK,OAAO,iBAAiB,SAAS,IAAI,GAC1Cjc,IAAOic,EAAGtB,MAAY,YAAY,gBAAgB,YAAY,GAC9DuB,IAAMD,EAAGtB,MAAY,YAAY,eAAe,WAAW,GAC3D1a,IAAQgc,EAAGtB,MAAY,YAAY,iBAAiB,aAAa;AACrE,SAAO,CAACoB,GAAM/b,CAAI,GAAG+b,GAAMG,CAAG,GAAGH,GAAM9b,CAAK,CAAC;AACjD,GACWkc,KAAc,SAAUxB,GAAS;AAExC,MADIA,MAAY,WAAUA,IAAU,WAChC,OAAO,SAAW;AAClB,WAAOmB;AAEX,MAAIM,IAAUJ,GAAUrB,CAAO,GAC3B0B,IAAgB,SAAS,gBAAgB,aACzCC,IAAc,OAAO;AACzB,SAAO;AAAA,IACH,MAAMF,EAAQ,CAAC;AAAA,IACf,KAAKA,EAAQ,CAAC;AAAA,IACd,OAAOA,EAAQ,CAAC;AAAA,IAChB,KAAK,KAAK,IAAI,GAAGE,IAAcD,IAAgBD,EAAQ,CAAC,IAAIA,EAAQ,CAAC,CAAC;AAAA,EAC9E;AACA,GCxBIG,KAAQb,GAAc,GACfc,KAAgB,sBAIvBC,KAAY,SAAU1uC,GAAI2uC,GAAe/B,GAASgC,GAAW;AAC7D,MAAI3c,IAAOjyB,EAAG,MAAMmuC,IAAMnuC,EAAG,KAAKkyB,IAAQlyB,EAAG,OAAOqQ,IAAMrQ,EAAG;AAC7D,SAAI4sC,MAAY,WAAUA,IAAU,WAC7B;AAAA,KAAQ,OAAO7C,IAAuB;AAAA,qBAA0B,EAAE,OAAO6E,GAAW;AAAA,mBAAuB,EAAE,OAAOv+B,GAAK,KAAK,EAAE,OAAOu+B,GAAW;AAAA;AAAA,QAAiB,EAAE,OAAOH,IAAe;AAAA,sBAA4B,EAAE,OAAOG,GAAW;AAAA;AAAA,KAA4C,EAAE,OAAO;AAAA,IACnSD,KAAiB,sBAAsB,OAAOC,GAAW,GAAG;AAAA,IAC5DhC,MAAY,YACR;AAAA,oBAAuB,OAAO3a,GAAM;AAAA,kBAAwB,EAAE,OAAOkc,GAAK;AAAA,oBAA0B,EAAE,OAAOjc,GAAO;AAAA;AAAA;AAAA,mBAAgE,EAAE,OAAO7hB,GAAK,KAAK,EAAE,OAAOu+B,GAAW;AAAA,KAAS;AAAA,IACxOhC,MAAY,aAAa,kBAAkB,OAAOv8B,GAAK,KAAK,EAAE,OAAOu+B,GAAW,GAAG;AAAA,EAC3F,EACS,OAAO,OAAO,EACd,KAAK,EAAE,GAAG;AAAA;AAAA;AAAA,IAAgB,EAAE,OAAO/E,IAAoB;AAAA,YAAiB,EAAE,OAAOx5B,GAAK,KAAK,EAAE,OAAOu+B,GAAW;AAAA;AAAA;AAAA,IAAiB,EAAE,OAAO9E,IAAoB;AAAA,mBAAwB,EAAE,OAAOz5B,GAAK,KAAK,EAAE,OAAOu+B,GAAW;AAAA;AAAA;AAAA,IAAiB,EAAE,OAAO/E,IAAoB,IAAI,EAAE,OAAOA,IAAoB;AAAA,cAAmB,EAAE,OAAO+E,GAAW;AAAA;AAAA;AAAA,IAAiB,EAAE,OAAO9E,IAAoB,IAAI,EAAE,OAAOA,IAAoB;AAAA,qBAA0B,EAAE,OAAO8E,GAAW;AAAA;AAAA;AAAA,QAAqB,EAAE,OAAOH,IAAe;AAAA,KAAW,EAAE,OAAOzE,IAAwB,IAAI,EAAE,OAAO35B,GAAK;AAAA;AAAA,CAAY;AAC/kB,GACIw+B,KAAuB,WAAY;AACnC,MAAIxB,IAAU,SAAS,SAAS,KAAK,aAAaoB,EAAa,KAAK,KAAK,EAAE;AAC3E,SAAO,SAASpB,CAAO,IAAIA,IAAU;AACzC,GACWyB,KAAmB,WAAY;AACtC,EAAA98C,EAAM,UAAU,WAAY;AACxB,oBAAS,KAAK,aAAay8C,KAAgBI,OAAyB,GAAG,UAAU,GAC1E,WAAY;AACf,UAAIE,IAAaF,GAAoB,IAAK;AAC1C,MAAIE,KAAc,IACd,SAAS,KAAK,gBAAgBN,EAAa,IAG3C,SAAS,KAAK,aAAaA,IAAeM,EAAW,SAAQ,CAAE;AAAA,IAEvE;AAAA,EACJ,GAAG,CAAA,CAAE;AACT,GAIWC,KAAkB,SAAUhvC,GAAI;AACvC,MAAIusC,IAAavsC,EAAG,YAAYivC,IAAcjvC,EAAG,aAAamG,IAAKnG,EAAG,SAAS4sC,IAAUzmC,MAAO,SAAS,WAAWA;AACpH,EAAA2oC,GAAgB;AAMhB,MAAIz+B,IAAMre,EAAM,QAAQ,WAAY;AAAE,WAAOo8C,GAAYxB,CAAO;AAAA,EAAG,GAAG,CAACA,CAAO,CAAC;AAC/E,SAAO56C,EAAM,cAAcw8C,IAAO,EAAE,QAAQE,GAAUr+B,GAAK,CAACk8B,GAAYK,GAAUqC,IAA6B,KAAf,YAAiB,EAAC,CAAE;AACxH,GCpDIC,KAAmB;AACvB,IAAI,OAAO,SAAW;AAClB,MAAI;AACA,QAAIjhB,KAAU,OAAO,eAAe,CAAA,GAAI,WAAW;AAAA,MAC/C,KAAK,WAAY;AACbihB,eAAAA,KAAmB,IACZ;AAAA,MACX;AAAA,IACZ,CAAS;AAED,WAAO,iBAAiB,QAAQjhB,IAASA,EAAO,GAEhD,OAAO,oBAAoB,QAAQA,IAASA,EAAO;AAAA,EACvD,QACY;AACRihB,IAAAA,KAAmB;AAAA,EACvB;AAEG,IAAIC,KAAaD,KAAmB,EAAE,SAAS,GAAK,IAAK,IClB5DE,KAAuB,SAAUvzC,GAAM;AAEvC,SAAOA,EAAK,YAAY;AAC5B,GACIwzC,KAAuB,SAAUxzC,GAAMyzC,GAAU;AACjD,MAAI,EAAEzzC,aAAgB;AAClB,WAAO;AAEX,MAAI+sC,IAAS,OAAO,iBAAiB/sC,CAAI;AACzC;AAAA;AAAA,IAEA+sC,EAAO0G,CAAQ,MAAM;AAAA,IAEjB,EAAE1G,EAAO,cAAcA,EAAO,aAAa,CAACwG,GAAqBvzC,CAAI,KAAK+sC,EAAO0G,CAAQ,MAAM;AAAA;AACvG,GACIC,KAA0B,SAAU1zC,GAAM;AAAE,SAAOwzC,GAAqBxzC,GAAM,WAAW;AAAG,GAC5F2zC,KAA0B,SAAU3zC,GAAM;AAAE,SAAOwzC,GAAqBxzC,GAAM,WAAW;AAAG,GACrF4zC,KAA0B,SAAUC,GAAM7zC,GAAM;AACvD,MAAIwlC,IAAgBxlC,EAAK,eACrBiI,IAAUjI;AACd,KAAG;AAEC,IAAI,OAAO,aAAe,OAAeiI,aAAmB,eACxDA,IAAUA,EAAQ;AAEtB,QAAI6rC,IAAeC,GAAuBF,GAAM5rC,CAAO;AACvD,QAAI6rC,GAAc;AACd,UAAI3vC,IAAK6vC,GAAmBH,GAAM5rC,CAAO,GAAGgsC,IAAe9vC,EAAG,CAAC,GAAG+vC,IAAe/vC,EAAG,CAAC;AACrF,UAAI8vC,IAAeC;AACf,eAAO;AAAA,IAEf;AACA,IAAAjsC,IAAUA,EAAQ;AAAA,EACtB,SAASA,KAAWA,MAAYu9B,EAAc;AAC9C,SAAO;AACX,GACI2O,KAAsB,SAAUhwC,GAAI;AACpC,MAAIiwC,IAAYjwC,EAAG,WAAW8vC,IAAe9vC,EAAG,cAAc+vC,IAAe/vC,EAAG;AAChF,SAAO;AAAA,IACHiwC;AAAA,IACAH;AAAA,IACAC;AAAA,EACR;AACA,GACIG,KAAsB,SAAUlwC,GAAI;AACpC,MAAImwC,IAAanwC,EAAG,YAAYowC,IAAcpwC,EAAG,aAAaqwC,IAAcrwC,EAAG;AAC/E,SAAO;AAAA,IACHmwC;AAAA,IACAC;AAAA,IACAC;AAAA,EACR;AACA,GACIT,KAAyB,SAAUF,GAAM7zC,GAAM;AAC/C,SAAO6zC,MAAS,MAAMH,GAAwB1zC,CAAI,IAAI2zC,GAAwB3zC,CAAI;AACtF,GACIg0C,KAAqB,SAAUH,GAAM7zC,GAAM;AAC3C,SAAO6zC,MAAS,MAAMM,GAAoBn0C,CAAI,IAAIq0C,GAAoBr0C,CAAI;AAC9E,GACIy0C,KAAqB,SAAUZ,GAAMa,GAAW;AAMhD,SAAOb,MAAS,OAAOa,MAAc,QAAQ,KAAK;AACtD,GACWC,KAAe,SAAUd,GAAMe,GAAWlT,GAAOmT,GAAaC,GAAc;AACnF,MAAIC,IAAkBN,GAAmBZ,GAAM,OAAO,iBAAiBe,CAAS,EAAE,SAAS,GACvFI,IAAQD,IAAkBF,GAE1BnlB,IAASgS,EAAM,QACfuT,IAAeL,EAAU,SAASllB,CAAM,GACxCwlB,IAAqB,IACrBC,IAAkBH,IAAQ,GAC1BI,IAAkB,GAClBC,IAAqB;AACzB,KAAG;AACC,QAAI,CAAC3lB;AACD;AAEJ,QAAIvrB,IAAK6vC,GAAmBH,GAAMnkB,CAAM,GAAG4lB,IAAWnxC,EAAG,CAAC,GAAGoxC,IAAWpxC,EAAG,CAAC,GAAGqxC,IAAWrxC,EAAG,CAAC,GAC1FsxC,IAAgBF,IAAWC,IAAWT,IAAkBO;AAC5D,KAAIA,KAAYG,MACR1B,GAAuBF,GAAMnkB,CAAM,MACnC0lB,KAAmBK,GACnBJ,KAAsBC;AAG9B,QAAII,IAAWhmB,EAAO;AAGtB,IAAAA,IAAUgmB,KAAYA,EAAS,aAAa,KAAK,yBAAyBA,EAAS,OAAOA;AAAA,EAC9F;AAAA;AAAA,IAEC,CAACT,KAAgBvlB,MAAW,SAAS;AAAA,IAEjCulB,MAAiBL,EAAU,SAASllB,CAAM,KAAKklB,MAAcllB;AAAA;AAElE,UAAIylB,KACkB,KAAK,IAAIC,CAAe,IAAI,KAGzC,CAACD,KACY,KAAK,IAAIE,CAAkB,IAAI,OACjDH,IAAqB,KAElBA;AACX,GCrGWS,KAAa,SAAUjU,GAAO;AACrC,SAAO,oBAAoBA,IAAQ,CAACA,EAAM,eAAe,CAAC,EAAE,SAASA,EAAM,eAAe,CAAC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC;AACjH,GACWkU,KAAa,SAAUlU,GAAO;AAAE,SAAO,CAACA,EAAM,QAAQA,EAAM,MAAM;AAAG,GAC5EmU,KAAa,SAAUn3C,GAAK;AAC5B,SAAOA,KAAO,aAAaA,IAAMA,EAAI,UAAUA;AACnD,GACIo3C,KAAe,SAAUn7C,GAAGygB,GAAG;AAAE,SAAOzgB,EAAE,CAAC,MAAMygB,EAAE,CAAC,KAAKzgB,EAAE,CAAC,MAAMygB,EAAE,CAAC;AAAG,GACxE26B,KAAgB,SAAU/b,GAAI;AAAE,SAAO;AAAA,yBAA4B,OAAOA,GAAI;AAAA,wBAAmD,EAAE,OAAOA,GAAI;AAAA,CAA2B;AAAG,GAC5Kgc,KAAY,GACZC,KAAY,CAAA;AACT,SAASC,GAAoB/7C,GAAO;AACvC,MAAIg8C,IAAqBhgD,EAAM,OAAO,EAAE,GACpCigD,IAAgBjgD,EAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GACnCkgD,IAAalgD,EAAM,OAAM,GACzB6jC,IAAK7jC,EAAM,SAAS6/C,IAAW,EAAE,CAAC,GAClCrD,IAAQx8C,EAAM,SAAS27C,EAAc,EAAE,CAAC,GACxCwE,IAAYngD,EAAM,OAAOgE,CAAK;AAClC,EAAAhE,EAAM,UAAU,WAAY;AACxB,IAAAmgD,EAAU,UAAUn8C;AAAA,EACxB,GAAG,CAACA,CAAK,CAAC,GACVhE,EAAM,UAAU,WAAY;AACxB,QAAIgE,EAAM,OAAO;AACb,eAAS,KAAK,UAAU,IAAI,uBAAuB,OAAO6/B,CAAE,CAAC;AAC7D,UAAIuc,IAAU1I,GAAc,CAAC1zC,EAAM,QAAQ,OAAO,IAAIA,EAAM,UAAU,CAAA,GAAI,IAAI07C,EAAU,GAAG,EAAI,EAAE,OAAO,OAAO;AAC/G,aAAAU,EAAQ,QAAQ,SAAUlrB,GAAI;AAAE,eAAOA,EAAG,UAAU,IAAI,uBAAuB,OAAO2O,CAAE,CAAC;AAAA,MAAG,CAAC,GACtF,WAAY;AACf,iBAAS,KAAK,UAAU,OAAO,uBAAuB,OAAOA,CAAE,CAAC,GAChEuc,EAAQ,QAAQ,SAAUlrB,GAAI;AAAE,iBAAOA,EAAG,UAAU,OAAO,uBAAuB,OAAO2O,CAAE,CAAC;AAAA,QAAG,CAAC;AAAA,MACpG;AAAA,IACJ;AAAA,EAEJ,GAAG,CAAC7/B,EAAM,OAAOA,EAAM,QAAQ,SAASA,EAAM,MAAM,CAAC;AACrD,MAAIq8C,IAAoBrgD,EAAM,YAAY,SAAUurC,GAAOjb,GAAQ;AAC/D,QAAK,aAAaib,KAASA,EAAM,QAAQ,WAAW,KAAOA,EAAM,SAAS,WAAWA,EAAM;AACvF,aAAO,CAAC4U,EAAU,QAAQ;AAE9B,QAAIG,IAAQd,GAAWjU,CAAK,GACxBgV,IAAaN,EAAc,SAC3BO,IAAS,YAAYjV,IAAQA,EAAM,SAASgV,EAAW,CAAC,IAAID,EAAM,CAAC,GACnEG,IAAS,YAAYlV,IAAQA,EAAM,SAASgV,EAAW,CAAC,IAAID,EAAM,CAAC,GACnEI,GACAnnB,IAASgS,EAAM,QACfoV,IAAgB,KAAK,IAAIH,CAAM,IAAI,KAAK,IAAIC,CAAM,IAAI,MAAM;AAEhE,QAAI,aAAalV,KAASoV,MAAkB,OAAOpnB,EAAO,SAAS;AAC/D,aAAO;AAGX,QAAIqnB,IAAY,OAAO,aAAY,GAC/BC,IAAaD,KAAaA,EAAU,YACpCE,IAAsBD,IAAaA,MAAetnB,KAAUsnB,EAAW,SAAStnB,CAAM,IAAI;AAC9F,QAAIunB;AACA,aAAO;AAEX,QAAIC,IAA+BtD,GAAwBkD,GAAepnB,CAAM;AAChF,QAAI,CAACwnB;AACD,aAAO;AAUX,QARIA,IACAL,IAAcC,KAGdD,IAAcC,MAAkB,MAAM,MAAM,KAC5CI,IAA+BtD,GAAwBkD,GAAepnB,CAAM,IAG5E,CAACwnB;AACD,aAAO;AAKX,QAHI,CAACb,EAAW,WAAW,oBAAoB3U,MAAUiV,KAAUC,OAC/DP,EAAW,UAAUQ,IAErB,CAACA;AACD,aAAO;AAEX,QAAIM,IAAgBd,EAAW,WAAWQ;AAC1C,WAAOlC,GAAawC,GAAe1wB,GAAQib,GAAOyV,MAAkB,MAAMR,IAASC,CAAY;AAAA,EACnG,GAAG,CAAA,CAAE,GACDQ,IAAgBjhD,EAAM,YAAY,SAAUkhD,GAAQ;AACpD,QAAI3V,IAAQ2V;AACZ,QAAI,GAACpB,GAAU,UAAUA,GAAUA,GAAU,SAAS,CAAC,MAAMtD,IAI7D;AAAA,UAAIqC,IAAQ,YAAYtT,IAAQkU,GAAWlU,CAAK,IAAIiU,GAAWjU,CAAK,GAChE4V,IAAcnB,EAAmB,QAAQ,OAAO,SAAUngD,GAAG;AAAE,eAAOA,EAAE,SAAS0rC,EAAM,SAAS1rC,EAAE,WAAW0rC,EAAM,UAAUA,EAAM,WAAW1rC,EAAE,iBAAiB8/C,GAAa9/C,EAAE,OAAOg/C,CAAK;AAAA,MAAG,CAAC,EAAE,CAAC;AAEvM,UAAIsC,KAAeA,EAAY,QAAQ;AACnC,QAAI5V,EAAM,cACNA,EAAM,eAAc;AAExB;AAAA,MACJ;AAEA,UAAI,CAAC4V,GAAa;AACd,YAAIC,KAAcjB,EAAU,QAAQ,UAAU,CAAA,GACzC,IAAIT,EAAU,EACd,OAAO,OAAO,EACd,OAAO,SAAU71C,GAAM;AAAE,iBAAOA,EAAK,SAAS0hC,EAAM,MAAM;AAAA,QAAG,CAAC,GAC/D8V,IAAaD,EAAW,SAAS,IAAIf,EAAkB9U,GAAO6V,EAAW,CAAC,CAAC,IAAI,CAACjB,EAAU,QAAQ;AACtG,QAAIkB,KACI9V,EAAM,cACNA,EAAM,eAAc;AAAA,MAGhC;AAAA;AAAA,EACJ,GAAG,CAAA,CAAE,GACD+V,IAAethD,EAAM,YAAY,SAAUqE,GAAMw6C,GAAOtlB,GAAQgoB,GAAQ;AACxE,QAAIhW,IAAQ,EAAE,MAAMlnC,GAAM,OAAOw6C,GAAO,QAAQtlB,GAAQ,QAAQgoB,GAAQ,cAAcC,GAAyBjoB,CAAM,EAAC;AACtH,IAAAymB,EAAmB,QAAQ,KAAKzU,CAAK,GACrC,WAAW,WAAY;AACnB,MAAAyU,EAAmB,UAAUA,EAAmB,QAAQ,OAAO,SAAUngD,GAAG;AAAE,eAAOA,MAAM0rC;AAAA,MAAO,CAAC;AAAA,IACvG,GAAG,CAAC;AAAA,EACR,GAAG,CAAA,CAAE,GACDkW,IAAmBzhD,EAAM,YAAY,SAAUurC,GAAO;AACtD,IAAA0U,EAAc,UAAUT,GAAWjU,CAAK,GACxC2U,EAAW,UAAU;AAAA,EACzB,GAAG,CAAA,CAAE,GACDwB,IAAc1hD,EAAM,YAAY,SAAUurC,GAAO;AACjD,IAAA+V,EAAa/V,EAAM,MAAMkU,GAAWlU,CAAK,GAAGA,EAAM,QAAQ8U,EAAkB9U,GAAOvnC,EAAM,QAAQ,OAAO,CAAC;AAAA,EAC7G,GAAG,CAAA,CAAE,GACD29C,IAAkB3hD,EAAM,YAAY,SAAUurC,GAAO;AACrD,IAAA+V,EAAa/V,EAAM,MAAMiU,GAAWjU,CAAK,GAAGA,EAAM,QAAQ8U,EAAkB9U,GAAOvnC,EAAM,QAAQ,OAAO,CAAC;AAAA,EAC7G,GAAG,CAAA,CAAE;AACL,EAAAhE,EAAM,UAAU,WAAY;AACxB,WAAA8/C,GAAU,KAAKtD,CAAK,GACpBx4C,EAAM,aAAa;AAAA,MACf,iBAAiB09C;AAAA,MACjB,gBAAgBA;AAAA,MAChB,oBAAoBC;AAAA,IAChC,CAAS,GACD,SAAS,iBAAiB,SAASV,GAAe9D,EAAU,GAC5D,SAAS,iBAAiB,aAAa8D,GAAe9D,EAAU,GAChE,SAAS,iBAAiB,cAAcsE,GAAkBtE,EAAU,GAC7D,WAAY;AACf,MAAA2C,KAAYA,GAAU,OAAO,SAAU8B,GAAM;AAAE,eAAOA,MAASpF;AAAA,MAAO,CAAC,GACvE,SAAS,oBAAoB,SAASyE,GAAe9D,EAAU,GAC/D,SAAS,oBAAoB,aAAa8D,GAAe9D,EAAU,GACnE,SAAS,oBAAoB,cAAcsE,GAAkBtE,EAAU;AAAA,IAC3E;AAAA,EACJ,GAAG,CAAA,CAAE;AACL,MAAI9C,IAAkBr2C,EAAM,iBAAiBy2C,IAAQz2C,EAAM;AAC3D,SAAQhE,EAAM;AAAA,IAAcA,EAAM;AAAA,IAAU;AAAA,IACxCy6C,IAAQz6C,EAAM,cAAcw8C,GAAO,EAAE,QAAQoD,GAAc/b,CAAE,EAAC,CAAE,IAAI;AAAA,IACpEwW,IAAkBr6C,EAAM,cAAcg9C,IAAiB,EAAE,YAAYh5C,EAAM,YAAY,SAASA,EAAM,QAAO,CAAE,IAAI;AAAA,EAAI;AAC/H;AACA,SAASw9C,GAAyB33C,GAAM;AAEpC,WADIg4C,IAAe,MACZh4C,MAAS;AACZ,IAAIA,aAAgB,eAChBg4C,IAAeh4C,EAAK,MACpBA,IAAOA,EAAK,OAEhBA,IAAOA,EAAK;AAEhB,SAAOg4C;AACX;AChKA,MAAAnI,KAAeG,GAAcE,IAAWgG,EAAmB;ACC3D,IAAI+B,KAAoB9hD,EAAM,WAAW,SAAUgE,GAAOuE,GAAK;AAAE,SAAQvI,EAAM,cAAci6C,IAAczC,GAAS,IAAIxzC,GAAO,EAAE,KAAKuE,GAAK,SAASmxC,GAAO,CAAE,CAAC;AAAI,CAAC;AACnKoI,GAAkB,aAAa7H,GAAa;ACL5C,IAAI8H,KAAmB,SAAUC,GAAgB;AAC7C,MAAI,OAAO,WAAa;AACpB,WAAO;AAEX,MAAIC,IAAe,MAAM,QAAQD,CAAc,IAAIA,EAAe,CAAC,IAAIA;AACvE,SAAOC,EAAa,cAAc;AACtC,GACIC,KAAa,oBAAI,QAAO,GACxBC,KAAoB,oBAAI,QAAO,GAC/BC,KAAY,CAAA,GACZC,KAAY,GACZC,KAAa,SAAUz4C,GAAM;AAC7B,SAAOA,MAASA,EAAK,QAAQy4C,GAAWz4C,EAAK,UAAU;AAC3D,GACI04C,KAAiB,SAAUjyB,GAAQkyB,GAAS;AAC5C,SAAOA,EACF,IAAI,SAAUjpB,GAAQ;AACvB,QAAIjJ,EAAO,SAASiJ,CAAM;AACtB,aAAOA;AAEX,QAAIkpB,IAAkBH,GAAW/oB,CAAM;AACvC,WAAIkpB,KAAmBnyB,EAAO,SAASmyB,CAAe,IAC3CA,KAEX,QAAQ,MAAM,eAAelpB,GAAQ,2BAA2BjJ,GAAQ,iBAAiB,GAClF;AAAA,EACX,CAAC,EACI,OAAO,SAAU9rB,GAAG;AAAE,WAAO,EAAQA;AAAA,EAAI,CAAC;AACnD,GASIk+C,KAAyB,SAAUV,GAAgBtwB,GAAYixB,GAAYC,GAAkB;AAC7F,MAAIJ,IAAUD,GAAe7wB,GAAY,MAAM,QAAQswB,CAAc,IAAIA,IAAiB,CAACA,CAAc,CAAC;AAC1G,EAAKI,GAAUO,CAAU,MACrBP,GAAUO,CAAU,IAAI,oBAAI,QAAO;AAEvC,MAAIE,IAAgBT,GAAUO,CAAU,GACpCG,IAAc,CAAA,GACdC,IAAiB,oBAAI,IAAG,GACxBC,IAAiB,IAAI,IAAIR,CAAO,GAChCS,IAAO,SAAU/tB,GAAI;AACrB,IAAI,CAACA,KAAM6tB,EAAe,IAAI7tB,CAAE,MAGhC6tB,EAAe,IAAI7tB,CAAE,GACrB+tB,EAAK/tB,EAAG,UAAU;AAAA,EACtB;AACA,EAAAstB,EAAQ,QAAQS,CAAI;AACpB,MAAIC,IAAO,SAAU5yB,GAAQ;AACzB,IAAI,CAACA,KAAU0yB,EAAe,IAAI1yB,CAAM,KAGxC,MAAM,UAAU,QAAQ,KAAKA,EAAO,UAAU,SAAUzmB,GAAM;AAC1D,UAAIk5C,EAAe,IAAIl5C,CAAI;AACvB,QAAAq5C,EAAKr5C,CAAI;AAAA;AAGT,YAAI;AACA,cAAIwoB,IAAOxoB,EAAK,aAAa+4C,CAAgB,GACzCO,IAAgB9wB,MAAS,QAAQA,MAAS,SAC1C+wB,KAAgBlB,GAAW,IAAIr4C,CAAI,KAAK,KAAK,GAC7Cw5C,KAAeR,EAAc,IAAIh5C,CAAI,KAAK,KAAK;AACnD,UAAAq4C,GAAW,IAAIr4C,GAAMu5C,CAAY,GACjCP,EAAc,IAAIh5C,GAAMw5C,CAAW,GACnCP,EAAY,KAAKj5C,CAAI,GACjBu5C,MAAiB,KAAKD,KACtBhB,GAAkB,IAAIt4C,GAAM,EAAI,GAEhCw5C,MAAgB,KAChBx5C,EAAK,aAAa84C,GAAY,MAAM,GAEnCQ,KACDt5C,EAAK,aAAa+4C,GAAkB,MAAM;AAAA,QAElD,SACO/iD,GAAG;AACN,kBAAQ,MAAM,mCAAmCgK,GAAMhK,CAAC;AAAA,QAC5D;AAAA,IAER,CAAC;AAAA,EACL;AACA,SAAAqjD,EAAKxxB,CAAU,GACfqxB,EAAe,MAAK,GACpBV,MACO,WAAY;AACf,IAAAS,EAAY,QAAQ,SAAUj5C,GAAM;AAChC,UAAIu5C,IAAelB,GAAW,IAAIr4C,CAAI,IAAI,GACtCw5C,IAAcR,EAAc,IAAIh5C,CAAI,IAAI;AAC5C,MAAAq4C,GAAW,IAAIr4C,GAAMu5C,CAAY,GACjCP,EAAc,IAAIh5C,GAAMw5C,CAAW,GAC9BD,MACIjB,GAAkB,IAAIt4C,CAAI,KAC3BA,EAAK,gBAAgB+4C,CAAgB,GAEzCT,GAAkB,OAAOt4C,CAAI,IAE5Bw5C,KACDx5C,EAAK,gBAAgB84C,CAAU;AAAA,IAEvC,CAAC,GACDN,MACKA,OAEDH,KAAa,oBAAI,QAAO,GACxBA,KAAa,oBAAI,QAAO,GACxBC,KAAoB,oBAAI,QAAO,GAC/BC,KAAY,CAAA;AAAA,EAEpB;AACJ,GAQWkB,KAAa,SAAUtB,GAAgBtwB,GAAYixB,GAAY;AACtE,EAAIA,MAAe,WAAUA,IAAa;AAC1C,MAAIH,IAAU,MAAM,KAAK,MAAM,QAAQR,CAAc,IAAIA,IAAiB,CAACA,CAAc,CAAC,GACtFuB,IAAiCxB,GAAiBC,CAAc;AACpE,SAAKuB,KAKLf,EAAQ,KAAK,MAAMA,GAAS,MAAM,KAAKe,EAAiB,iBAAiB,qBAAqB,CAAC,CAAC,GACzFb,GAAuBF,GAASe,GAAkBZ,GAAY,aAAa,KALvE,WAAY;AAAE,WAAO;AAAA,EAAM;AAM1C;AAAA;ACjIA,SAAS/vC,GAAWC,GAAW;AAC7B,QAAMC,IAA4BC,gBAAAA,GAAgBF,CAAS,GACrDG,IAAQhT,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACtD,UAAM,EAAE,UAAAlI,GAAU,GAAGmI,EAAS,IAAKlP,GAC7BmP,IAAgBnT,EAAM,SAAS,QAAQ+K,CAAQ,GAC/CqI,IAAYD,EAAc,KAAKE,EAAW;AAChD,QAAID,GAAW;AACb,YAAME,IAAaF,EAAU,MAAM,UAC7BG,IAAcJ,EAAc,IAAI,CAACpJ,MACjCA,MAAUqJ,IACRpT,EAAM,SAAS,MAAMsT,CAAU,IAAI,IAAUtT,EAAM,SAAS,KAAK,IAAI,IAClEA,EAAM,eAAesT,CAAU,IAAIA,EAAW,MAAM,WAAW,OAE/DvJ,CAEV;AACD,aAAuBqB,gBAAAA,EAAAA,IAAI0H,GAAW,EAAE,GAAGI,GAAW,KAAKD,GAAc,UAAUjT,EAAM,eAAesT,CAAU,IAAItT,EAAM,aAAasT,GAAY,QAAQC,CAAW,IAAI,MAAM;AAAA,IACpL;AACA,WAAuBnI,gBAAAA,EAAAA,IAAI0H,GAAW,EAAE,GAAGI,GAAW,KAAKD,GAAc,UAAAlI,GAAU;AAAA,EACrF,CAAC;AACD,SAAAiI,EAAM,cAAc,GAAGH,CAAS,SACzBG;AACT;AAAA;AAGA,SAASD,GAAgBF,GAAW;AAClC,QAAMC,IAAY9S,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AAC1D,UAAM,EAAE,UAAAlI,GAAU,GAAGmI,EAAS,IAAKlP;AACnC,QAAIhE,EAAM,eAAe+K,CAAQ,GAAG;AAClC,YAAM0I,IAAcC,GAAc3I,CAAQ,GACpC4I,IAASC,GAAWV,GAAWnI,EAAS,KAAK;AACnD,aAAIA,EAAS,SAAS/K,EAAM,aAC1B2T,EAAO,MAAMV,IAAed,GAAYc,GAAcQ,CAAW,IAAIA,IAEhEzT,EAAM,aAAa+K,GAAU4I,CAAM;AAAA,IAC5C;AACA,WAAO3T,EAAM,SAAS,MAAM+K,CAAQ,IAAI,IAAI/K,EAAM,SAAS,KAAK,IAAI,IAAI;AAAA,EAC1E,CAAC;AACD,SAAA8S,EAAU,cAAc,GAAGD,CAAS,cAC7BC;AACT;AACA,IAAIe,KAAuB,OAAO,iBAAiB;AAWnD,SAASR,GAAYtJ,GAAO;AAC1B,SAAO/J,EAAM,eAAe+J,CAAK,KAAK,OAAOA,EAAM,QAAS,cAAc,eAAeA,EAAM,QAAQA,EAAM,KAAK,cAAc8J;AAClI;AACA,SAASD,GAAWV,GAAWY,GAAY;AACzC,QAAMC,IAAgB,EAAE,GAAGD,EAAU;AACrC,aAAWpL,KAAYoL,GAAY;AACjC,UAAME,IAAgBd,EAAUxK,CAAQ,GAClCuL,IAAiBH,EAAWpL,CAAQ;AAE1C,IADkB,WAAW,KAAKA,CAAQ,IAEpCsL,KAAiBC,IACnBF,EAAcrL,CAAQ,IAAI,IAAInH,MAAS;AACrC,YAAMsL,IAASoH,EAAe,GAAG1S,CAAI;AACrC,aAAAyS,EAAc,GAAGzS,CAAI,GACdsL;AAAA,IACT,IACSmH,MACTD,EAAcrL,CAAQ,IAAIsL,KAEnBtL,MAAa,UACtBqL,EAAcrL,CAAQ,IAAI,EAAE,GAAGsL,GAAe,GAAGC,EAAc,IACtDvL,MAAa,gBACtBqL,EAAcrL,CAAQ,IAAI,CAACsL,GAAeC,CAAc,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,EAEtF;AACA,SAAO,EAAE,GAAGf,GAAW,GAAGa,EAAa;AACzC;AACA,SAASL,GAAcvN,GAAS;;AAC9B,MAAI0B,KAASmG,IAAA,OAAO,yBAAyB7H,EAAQ,OAAO,KAAK,MAApD,gBAAA6H,EAAuD,KAChEkG,IAAUrM,KAAU,oBAAoBA,KAAUA,EAAO;AAC7D,SAAIqM,IACK/N,EAAQ,OAEjB0B,KAASsM,IAAA,OAAO,yBAAyBhO,GAAS,KAAK,MAA9C,gBAAAgO,EAAiD,KAC1DD,IAAUrM,KAAU,oBAAoBA,KAAUA,EAAO,gBACrDqM,IACK/N,EAAQ,MAAM,MAEhBA,EAAQ,MAAM,OAAOA,EAAQ;AACtC;AC7EA,IAAIq9C,KAAc,UACd,CAACC,IAAqBC,EAAiB,IAAI3X,GAAmByX,EAAW,GACzE,CAACG,IAAgBC,EAAgB,IAAIH,GAAoBD,EAAW,GACpEK,KAAS,CAAC7/C,MAAU;AACtB,QAAM;AAAA,IACJ,eAAA8/C;AAAA,IACA,UAAA/4C;AAAA,IACA,MAAMg5C;AAAA,IACN,aAAAC;AAAA,IACA,cAAAC;AAAA,IACA,OAAAC,IAAQ;AAAA,EACZ,IAAMlgD,GACEmgD,IAAankD,EAAM,OAAO,IAAI,GAC9BokD,IAAapkD,EAAM,OAAO,IAAI,GAC9B,CAACqkD,GAAMC,CAAO,IAAI3W,GAAqB;AAAA,IAC3C,MAAMoW;AAAA,IACN,aAAaC,KAAe;AAAA,IAC5B,UAAUC;AAAA,IACV,QAAQT;AAAA,EACZ,CAAG;AACD,SAAuBp4C,gBAAAA,EAAAA;AAAAA,IACrBu4C;AAAA,IACA;AAAA,MACE,OAAOG;AAAA,MACP,YAAAK;AAAA,MACA,YAAAC;AAAA,MACA,WAAW/W,GAAK;AAAA,MAChB,SAASA,GAAK;AAAA,MACd,eAAeA,GAAK;AAAA,MACpB,MAAAgX;AAAA,MACA,cAAcC;AAAA,MACd,cAActkD,EAAM,YAAY,MAAMskD,EAAQ,CAACC,MAAa,CAACA,CAAQ,GAAG,CAACD,CAAO,CAAC;AAAA,MACjF,OAAAJ;AAAA,MACA,UAAAn5C;AAAA,IACN;AAAA,EACA;AACA;AACA84C,GAAO,cAAcL;AACrB,IAAIgB,KAAe,iBACfC,KAAgBzkD,EAAM;AAAA,EACxB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,eAAA6wC,GAAe,GAAGY,EAAY,IAAK1gD,GACrCjB,IAAU6gD,GAAiBY,IAAcV,CAAa,GACtDa,IAAqBnyC,GAAgBS,GAAclQ,EAAQ,UAAU;AAC3E,WAAuBqI,gBAAAA,EAAAA;AAAAA,MACrBwjC,GAAU;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,iBAAiB;AAAA,QACjB,iBAAiB7rC,EAAQ;AAAA,QACzB,iBAAiBA,EAAQ;AAAA,QACzB,cAAc6hD,GAAS7hD,EAAQ,IAAI;AAAA,QACnC,GAAG2hD;AAAA,QACH,KAAKC;AAAA,QACL,SAASxZ,GAAqBnnC,EAAM,SAASjB,EAAQ,YAAY;AAAA,MACzE;AAAA,IACA;AAAA,EACE;AACF;AACA0hD,GAAc,cAAcD;AAC5B,IAAIjP,KAAc,gBACd,CAACsP,IAAgBC,EAAgB,IAAIrB,GAAoBlO,IAAa;AAAA,EACxE,YAAY;AACd,CAAC,GACGwP,KAAe,CAAC/gD,MAAU;AAC5B,QAAM,EAAE,eAAA8/C,GAAe,YAAAkB,GAAY,UAAAj6C,GAAU,WAAAmF,EAAS,IAAKlM,GACrDjB,IAAU6gD,GAAiBrO,IAAauO,CAAa;AAC3D,SAAuB14C,gBAAAA,EAAAA,IAAIy5C,IAAgB,EAAE,OAAOf,GAAe,YAAAkB,GAAY,UAAUhlD,EAAM,SAAS,IAAI+K,GAAU,CAAChB,MAA0BqB,gBAAAA,EAAAA,IAAI6qC,IAAU,EAAE,SAAS+O,KAAcjiD,EAAQ,MAAM,UAA0BqI,gBAAAA,EAAAA,IAAI65C,IAAiB,EAAE,SAAS,IAAM,WAAA/0C,GAAW,UAAUnG,EAAK,CAAE,EAAC,CAAE,CAAC,EAAC,CAAE;AAC3S;AACAg7C,GAAa,cAAcxP;AAC3B,IAAI2P,KAAe,iBACfC,KAAgBnlD,EAAM;AAAA,EACxB,CAACgE,GAAOiP,MAAiB;AACvB,UAAMmyC,IAAgBN,GAAiBI,IAAclhD,EAAM,aAAa,GAClE,EAAE,YAAAghD,IAAaI,EAAc,YAAY,GAAGC,EAAY,IAAKrhD,GAC7DjB,IAAU6gD,GAAiBsB,IAAclhD,EAAM,aAAa;AAClE,WAAOjB,EAAQ,QAAwBqI,gBAAAA,MAAI6qC,IAAU,EAAE,SAAS+O,KAAcjiD,EAAQ,MAAM,UAA0BqI,gBAAAA,MAAIk6C,IAAmB,EAAE,GAAGD,GAAc,KAAKpyC,EAAY,CAAE,EAAC,CAAE,IAAI;AAAA,EAC5L;AACF;AACAkyC,GAAc,cAAcD;AAC5B,IAAI1xC,KAAOZ,gBAAAA,GAAW,4BAA4B,GAC9C0yC,KAAoBtlD,EAAM;AAAA,EAC5B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,eAAA6wC,GAAe,GAAGuB,EAAY,IAAKrhD,GACrCjB,IAAU6gD,GAAiBsB,IAAcpB,CAAa;AAC5D;AAAA;AAAA;AAAA,MAGkB14C,gBAAAA,EAAAA,IAAI6uC,IAAc,EAAE,IAAIzmC,IAAM,gBAAgB,IAAM,QAAQ,CAACzQ,EAAQ,UAAU,GAAG,UAA0BqI,gBAAAA,EAAAA;AAAAA,QAC1HwjC,GAAU;AAAA,QACV;AAAA,UACE,cAAcgW,GAAS7hD,EAAQ,IAAI;AAAA,UACnC,GAAGsiD;AAAA,UACH,KAAKpyC;AAAA,UACL,OAAO,EAAE,eAAe,QAAQ,GAAGoyC,EAAa,MAAK;AAAA,QAC/D;AAAA,MACA,EAAO,CAAE;AAAA;AAAA,EAEP;AACF,GACIE,KAAe,iBACfC,KAAgBxlD,EAAM;AAAA,EACxB,CAACgE,GAAOiP,MAAiB;AACvB,UAAMmyC,IAAgBN,GAAiBS,IAAcvhD,EAAM,aAAa,GAClE,EAAE,YAAAghD,IAAaI,EAAc,YAAY,GAAGK,EAAY,IAAKzhD,GAC7DjB,IAAU6gD,GAAiB2B,IAAcvhD,EAAM,aAAa;AAClE,WAAuBoH,gBAAAA,MAAI6qC,IAAU,EAAE,SAAS+O,KAAcjiD,EAAQ,MAAM,UAAUA,EAAQ,QAAwBqI,gBAAAA,EAAAA,IAAIs6C,IAAoB,EAAE,GAAGD,GAAc,KAAKxyC,EAAY,CAAE,IAAoB7H,gBAAAA,EAAAA,IAAIu6C,IAAuB,EAAE,GAAGF,GAAc,KAAKxyC,EAAY,CAAE,EAAC,CAAE;AAAA,EAC9Q;AACF;AACAuyC,GAAc,cAAcD;AAC5B,IAAIG,KAAqB1lD,EAAM;AAAA,EAC7B,CAACgE,GAAOiP,MAAiB;AACvB,UAAMlQ,IAAU6gD,GAAiB2B,IAAcvhD,EAAM,aAAa,GAC5DogD,IAAapkD,EAAM,OAAO,IAAI,GAC9BuwC,IAAe/9B,GAAgBS,GAAclQ,EAAQ,YAAYqhD,CAAU;AACjF,WAAApkD,EAAM,UAAU,MAAM;AACpB,YAAM+P,IAAUq0C,EAAW;AAC3B,UAAIr0C,EAAS,QAAOuzC,GAAWvzC,CAAO;AAAA,IACxC,GAAG,CAAA,CAAE,GACkB3E,gBAAAA,EAAAA;AAAAA,MACrBw6C;AAAA,MACA;AAAA,QACE,GAAG5hD;AAAA,QACH,KAAKusC;AAAA,QACL,WAAWxtC,EAAQ;AAAA,QACnB,6BAA6B;AAAA,QAC7B,kBAAkBooC,GAAqBnnC,EAAM,kBAAkB,CAACunC,MAAU;;AACxE,UAAAA,EAAM,eAAc,IACpBv9B,IAAAjL,EAAQ,WAAW,YAAnB,QAAAiL,EAA4B;AAAA,QAC9B,CAAC;AAAA,QACD,sBAAsBm9B,GAAqBnnC,EAAM,sBAAsB,CAACunC,MAAU;AAChF,gBAAMsa,IAAgBta,EAAM,OAAO,eAC7Bua,IAAgBD,EAAc,WAAW,KAAKA,EAAc,YAAY;AAE9E,WADqBA,EAAc,WAAW,KAAKC,MACjCva,EAAM,eAAc;AAAA,QACxC,CAAC;AAAA,QACD,gBAAgBJ;AAAA,UACdnnC,EAAM;AAAA,UACN,CAACunC,MAAUA,EAAM,eAAc;AAAA,QACzC;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF,GACIoa,KAAwB3lD,EAAM;AAAA,EAChC,CAACgE,GAAOiP,MAAiB;AACvB,UAAMlQ,IAAU6gD,GAAiB2B,IAAcvhD,EAAM,aAAa,GAC5D+hD,IAA0B/lD,EAAM,OAAO,EAAK,GAC5CgmD,IAA2BhmD,EAAM,OAAO,EAAK;AACnD,WAAuBoL,gBAAAA,EAAAA;AAAAA,MACrBw6C;AAAA,MACA;AAAA,QACE,GAAG5hD;AAAA,QACH,KAAKiP;AAAA,QACL,WAAW;AAAA,QACX,6BAA6B;AAAA,QAC7B,kBAAkB,CAACs4B,MAAU;;AAC3B,WAAAv9B,IAAAhK,EAAM,qBAAN,QAAAgK,EAAA,KAAAhK,GAAyBunC,IACpBA,EAAM,qBACJwa,EAAwB,YAAS5xC,IAAApR,EAAQ,WAAW,YAAnB,QAAAoR,EAA4B,SAClEo3B,EAAM,eAAc,IAEtBwa,EAAwB,UAAU,IAClCC,EAAyB,UAAU;AAAA,QACrC;AAAA,QACA,mBAAmB,CAACza,MAAU;;AAC5B,WAAAv9B,IAAAhK,EAAM,sBAAN,QAAAgK,EAAA,KAAAhK,GAA0BunC,IACrBA,EAAM,qBACTwa,EAAwB,UAAU,IAC9Bxa,EAAM,OAAO,cAAc,SAAS,kBACtCya,EAAyB,UAAU;AAGvC,gBAAMzsB,IAASgS,EAAM;AAErB,YADwBp3B,IAAApR,EAAQ,WAAW,YAAnB,gBAAAoR,EAA4B,SAASolB,OACxCgS,EAAM,eAAc,GACrCA,EAAM,OAAO,cAAc,SAAS,aAAaya,EAAyB,WAC5Eza,EAAM,eAAc;AAAA,QAExB;AAAA,MACR;AAAA,IACA;AAAA,EACE;AACF,GACIqa,KAAoB5lD,EAAM;AAAA,EAC5B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,eAAA6wC,GAAe,WAAAmC,GAAW,iBAAAC,GAAiB,kBAAAC,GAAkB,GAAGV,EAAY,IAAKzhD,GACnFjB,IAAU6gD,GAAiB2B,IAAczB,CAAa,GACtDM,IAAapkD,EAAM,OAAO,IAAI,GAC9BuwC,IAAe/9B,GAAgBS,GAAcmxC,CAAU;AAC7D,WAAA/M,GAAc,GACShsC,gBAAAA,EAAAA,KAAK+6C,YAAU,EAAE,UAAU;AAAA,MAChCh7C,gBAAAA,EAAAA;AAAAA,QACdsnC;AAAA,QACA;AAAA,UACE,SAAS;AAAA,UACT,MAAM;AAAA,UACN,SAASuT;AAAA,UACT,kBAAkBC;AAAA,UAClB,oBAAoBC;AAAA,UACpB,UAA0B/6C,gBAAAA,EAAAA;AAAAA,YACxB0kC;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,IAAI/sC,EAAQ;AAAA,cACZ,oBAAoBA,EAAQ;AAAA,cAC5B,mBAAmBA,EAAQ;AAAA,cAC3B,cAAc6hD,GAAS7hD,EAAQ,IAAI;AAAA,cACnC,GAAG0iD;AAAA,cACH,KAAKlV;AAAA,cACL,WAAW,MAAMxtC,EAAQ,aAAa,EAAK;AAAA,YACzD;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAAA,MACsBsI,gBAAAA,OAAK+6C,EAAAA,UAAU,EAAE,UAAU;AAAA,QACzBh7C,gBAAAA,EAAAA,IAAIi7C,IAAc,EAAE,SAAStjD,EAAQ,QAAO,CAAE;AAAA,QAC9CqI,gBAAAA,EAAAA,IAAIk7C,IAAoB,EAAE,YAAAlC,GAAY,eAAerhD,EAAQ,cAAa,CAAE;AAAA,MACpG,EAAO,CAAE;AAAA,IACT,GAAO;AAAA,EACL;AACF,GACIwjD,KAAa,eACbC,KAAcxmD,EAAM;AAAA,EACtB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,eAAA6wC,GAAe,GAAG2C,EAAU,IAAKziD,GACnCjB,IAAU6gD,GAAiB2C,IAAYzC,CAAa;AAC1D,WAAuB14C,gBAAAA,MAAIwjC,GAAU,IAAI,EAAE,IAAI7rC,EAAQ,SAAS,GAAG0jD,GAAY,KAAKxzC,EAAY,CAAE;AAAA,EACpG;AACF;AACAuzC,GAAY,cAAcD;AAC1B,IAAIG,KAAmB,qBACnBC,KAAoB3mD,EAAM;AAAA,EAC5B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,eAAA6wC,GAAe,GAAG8C,EAAgB,IAAK5iD,GACzCjB,IAAU6gD,GAAiB8C,IAAkB5C,CAAa;AAChE,WAAuB14C,gBAAAA,MAAIwjC,GAAU,GAAG,EAAE,IAAI7rC,EAAQ,eAAe,GAAG6jD,GAAkB,KAAK3zC,EAAY,CAAE;AAAA,EAC/G;AACF;AACA0zC,GAAkB,cAAcD;AAChC,IAAIG,KAAa,eACbC,KAAc9mD,EAAM;AAAA,EACtB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,eAAA6wC,GAAe,GAAGiD,EAAU,IAAK/iD,GACnCjB,IAAU6gD,GAAiBiD,IAAY/C,CAAa;AAC1D,WAAuB14C,gBAAAA,EAAAA;AAAAA,MACrBwjC,GAAU;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,GAAGmY;AAAA,QACH,KAAK9zC;AAAA,QACL,SAASk4B,GAAqBnnC,EAAM,SAAS,MAAMjB,EAAQ,aAAa,EAAK,CAAC;AAAA,MACtF;AAAA,IACA;AAAA,EACE;AACF;AACA+jD,GAAY,cAAcD;AAC1B,SAASjC,GAASP,GAAM;AACtB,SAAOA,IAAO,SAAS;AACzB;AACA,IAAI2C,KAAqB,sBACrB,CAACC,IAAiBC,EAAiB,IAAI1mC,GAAcwmC,IAAoB;AAAA,EAC3E,aAAazB;AAAAA,EACb,WAAWgB;AAAAA,EACX,UAAU;AACZ,CAAC,GACGF,KAAe,CAAC,EAAE,SAAAc,QAAc;AAClC,QAAMC,IAAsBF,GAAkBF,EAAkB,GAC1DK,IAAU,KAAKD,EAAoB,WAAW,mBAAmBA,EAAoB,SAAS;AAAA;AAAA,4BAE1EA,EAAoB,SAAS;AAAA;AAAA,4EAEmBA,EAAoB,QAAQ;AACtG,SAAApnD,EAAM,UAAU,MAAM;AACpB,IAAImnD,MACe,SAAS,eAAeA,CAAO,KACjC,QAAQ,MAAME,CAAO;AAAA,EAExC,GAAG,CAACA,GAASF,CAAO,CAAC,GACd;AACT,GACIG,KAA2B,4BAC3BhB,KAAqB,CAAC,EAAE,YAAAlC,GAAY,eAAAmD,QAAoB;AAE1D,QAAMF,IAAU,6EADkBH,GAAkBI,EAAwB,EAC2C,WAAW;AAClI,SAAAtnD,EAAM,UAAU,MAAM;;AACpB,UAAMwnD,KAAgBx5C,IAAAo2C,EAAW,YAAX,gBAAAp2C,EAAoB,aAAa;AACvD,IAAIu5C,KAAiBC,MACI,SAAS,eAAeD,CAAa,KACvC,QAAQ,KAAKF,CAAO;AAAA,EAE7C,GAAG,CAACA,GAASjD,GAAYmD,CAAa,CAAC,GAChC;AACT,GACIE,KAAO5D,IACP6D,KAAUjD,IACVjP,KAASuP,IACT4C,KAAUxC,IACVyC,KAAUpC,IACVqC,KAAQrB,IACRsB,KAAcnB,IACdoB,KAAQjB;AC1TZ,MAAMjD,KAASmE,IAITjD,KAAekD,IAIf9C,KAAgBnlD,EAAM,WAG1B,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA;AAAAA,EAAC88C;AAAAA,EAAA;AAAA,IACC,KAAA3/C;AAAA,IACA,WAAWyX;AAAA,MACT;AAAA,MACAhT;AAAA,IAAA;AAAA,IAED,GAAGhJ;AAAA,EAAA;AACN,CACD;AACDmhD,GAAc,cAAc+C,GAAwB;AAEpD,MAAM1C,KAAgBxlD,EAAM,WAG1B,CAAC,EAAE,WAAAgN,GAAW,UAAAjC,GAAU,GAAG/G,EAAA,GAASuE,MACpC8C,gBAAAA,EAAAA,KAAC05C,IAAA,EACC,UAAA;AAAA,EAAA35C,gBAAAA,EAAAA,IAAC+5C,IAAA,EAAc;AAAA,EACf95C,gBAAAA,EAAAA;AAAAA,IAAC88C;AAAAA,IAAA;AAAA,MACC,KAAA5/C;AAAA,MACA,WAAWyX;AAAA,QACT;AAAA,QACAhT;AAAA,MAAA;AAAA,MAED,GAAGhJ;AAAA,MAEH,UAAA;AAAA,QAAA+G;AAAA,QACDM,gBAAAA,EAAAA,KAAC+8C,IAAA,EAAsB,WAAU,iRAC/B,UAAA;AAAA,UAAAh9C,gBAAAA,EAAAA,IAAC+Y,IAAA,EAAE,WAAU,UAAA,CAAU;AAAA,UACvB/Y,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,WAAU,UAAA,QAAA,CAAK;AAAA,QAAA,EAAA,CACjC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AACF,EAAA,CACF,CACD;AACDo6C,GAAc,cAAc2C,GAAwB;AAEpD,MAAME,KAAe,CAAC,EAAE,WAAAr7C,GAAW,GAAGhJ,EAAA,MACpCoH,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAW4U,GAAG,sDAAsDhT,CAAS,GAAI,GAAGhJ,EAAA,CAAO;AAElGqkD,GAAa,cAAc;AAO3B,MAAM7B,KAAcxmD,EAAM,WAGxB,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA;AAAAA,EAACk9C;AAAAA,EAAA;AAAA,IACC,KAAA//C;AAAA,IACA,WAAWyX,GAAG,qDAAqDhT,CAAS;AAAA,IAC3E,GAAGhJ;AAAA,EAAA;AACN,CACD;AACDwiD,GAAY,cAAc8B,GAAsB;AAEhD,MAAM3B,KAAoB3mD,EAAM,WAG9B,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA,IAACm9C,IAAA,EAA4B,KAAAhgD,GAAU,WAAWyX,GAAG,iCAAiChT,CAAS,GAAI,GAAGhJ,EAAA,CAAO,CAC9G;AACD2iD,GAAkB,cAAc4B,GAA4B;AC7E5D,MAAMC,KAAQxoD,EAAM;AAAA,EAClB,CAAC,EAAE,WAAAgN,GAAW,MAAA1K,GAAM,GAAG0B,EAAA,GAASuE,MAE5B6C,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAA9I;AAAA,MACA,WAAW0d;AAAA,QACT;AAAA,QACAhT;AAAA,MAAA;AAAA,MAEF,KAAAzE;AAAA,MACC,GAAGvE;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAwkD,GAAM,cAAc;ACjBpB,IAAIC,KAAkB,CAACtiD,MAAYA,EAAQ,SAAS,YAEhDuiD,KAAe,CAACxhD,MAAUA,aAAiB,MAE3CyhD,KAAoB,CAACzhD,MAAUA,KAAS;AAE5C,MAAM0hD,KAAe,CAAC1hD,MAAU,OAAOA,KAAU;AACjD,IAAI2hD,KAAW,CAAC3hD,MAAU,CAACyhD,GAAkBzhD,CAAK,KAC9C,CAAC,MAAM,QAAQA,CAAK,KACpB0hD,GAAa1hD,CAAK,KAClB,CAACwhD,GAAaxhD,CAAK,GAEnB4hD,KAAgB,CAACvd,MAAUsd,GAAStd,CAAK,KAAKA,EAAM,SAClDkd,GAAgBld,EAAM,MAAM,IACxBA,EAAM,OAAO,UACbA,EAAM,OAAO,QACjBA,GAEFwd,KAAoB,CAAC1kD,MAASA,EAAK,UAAU,GAAGA,EAAK,OAAO,aAAa,CAAC,KAAKA,GAE/E2kD,KAAqB,CAACC,GAAO5kD,MAAS4kD,EAAM,IAAIF,GAAkB1kD,CAAI,CAAC,GAEvE6kD,KAAgB,CAACC,MAAe;AAChC,QAAMC,IAAgBD,EAAW,eAAeA,EAAW,YAAY;AACvE,SAAQN,GAASO,CAAa,KAAKA,EAAc,eAAe,eAAe;AACnF,GAEIC,KAAQ,OAAO,SAAW,OAC1B,OAAO,OAAO,cAAgB,OAC9B,OAAO,WAAa;AAExB,SAASC,GAAYt9C,GAAM;AACvB,MAAIA,aAAgB;AAChB,WAAO,IAAI,KAAKA,CAAI;AAExB,QAAMu9C,IAAqB,OAAO,WAAa,OAAev9C,aAAgB;AAC9E,MAAIq9C,OAAUr9C,aAAgB,QAAQu9C;AAClC,WAAOv9C;AAEX,QAAMhF,IAAU,MAAM,QAAQgF,CAAI;AAClC,MAAI,CAAChF,KAAW,EAAE6hD,GAAS78C,CAAI,KAAKk9C,GAAcl9C,CAAI;AAClD,WAAOA;AAEX,QAAMw9C,IAAOxiD,IAAU,KAAK,OAAO,OAAO,OAAO,eAAegF,CAAI,CAAC;AACrE,aAAW1D,KAAO0D;AACd,IAAI,OAAO,UAAU,eAAe,KAAKA,GAAM1D,CAAG,MAC9CkhD,EAAKlhD,CAAG,IAAIghD,GAAYt9C,EAAK1D,CAAG,CAAC;AAGzC,SAAOkhD;AACX;AAEA,IAAIC,KAAQ,CAACviD,MAAU,QAAQ,KAAKA,CAAK,GAErCwiD,KAAc,CAAC31B,MAAQA,MAAQ,QAE/B41B,KAAU,CAACziD,MAAU,MAAM,QAAQA,CAAK,IAAIA,EAAM,OAAO,OAAO,IAAI,CAAA,GAEpE0iD,KAAe,CAAC7xB,MAAU4xB,GAAQ5xB,EAAM,QAAQ,aAAa,EAAE,EAAE,MAAM,OAAO,CAAC,GAE/E8xB,KAAM,CAAC5gD,GAAQsO,GAAM+gC,MAAiB;AACtC,MAAI,CAAC/gC,KAAQ,CAACsxC,GAAS5/C,CAAM;AACzB,WAAOqvC;AAEX,QAAMzrC,KAAU48C,GAAMlyC,CAAI,IAAI,CAACA,CAAI,IAAIqyC,GAAaryC,CAAI,GAAG,OAAO,CAAC1K,GAAQvE,MAAQqgD,GAAkB97C,CAAM,IAAIA,IAASA,EAAOvE,CAAG,GAAGW,CAAM;AAC3I,SAAOygD,GAAY78C,CAAM,KAAKA,MAAW5D,IACnCygD,GAAYzgD,EAAOsO,CAAI,CAAC,IACpB+gC,IACArvC,EAAOsO,CAAI,IACf1K;AACV,GAEIi9C,KAAY,CAAC5iD,MAAU,OAAOA,KAAU,WAExCunC,KAAa,CAACvnC,MAAU,OAAOA,KAAU,YAEzCqhB,KAAM,CAACtf,GAAQsO,GAAMrQ,MAAU;AAC/B,MAAI+G,IAAQ;AACZ,QAAM87C,IAAWN,GAAMlyC,CAAI,IAAI,CAACA,CAAI,IAAIqyC,GAAaryC,CAAI,GACnDyyC,IAASD,EAAS,QAClBE,IAAYD,IAAS;AAC3B,SAAO,EAAE/7C,IAAQ+7C,KAAQ;AACrB,UAAM1hD,IAAMyhD,EAAS97C,CAAK;AAC1B,QAAIsqC,IAAWrxC;AACf,QAAI+G,MAAUg8C,GAAW;AACrB,YAAMC,IAAWjhD,EAAOX,CAAG;AAC3B,MAAAiwC,IACIsQ,GAASqB,CAAQ,KAAK,MAAM,QAAQA,CAAQ,IACtCA,IACC,MAAM,CAACH,EAAS97C,IAAQ,CAAC,CAAC,IAEvB,CAAA,IADA,CAAA;AAAA,IAElB;AACA,QAAI3F,MAAQ,eAAeA,MAAQ,iBAAiBA,MAAQ;AACxD;AAEJ,IAAAW,EAAOX,CAAG,IAAIiwC,GACdtvC,IAASA,EAAOX,CAAG;AAAA,EACvB;AACJ;AAEA,MAAM6hD,KAAS;AAAA,EACX,MAAM;AAAA,EACN,WAAW;AAAA,EACX,QAAQ;AACZ,GACMC,KAAkB;AAAA,EACpB,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AAAA,EACX,KAAK;AACT,GACMC,KAAyB;AAAA,EAC3B,KAAK;AAAA,EACL,KAAK;AAAA,EACL,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AACd,GAMMC,KAAyBtqD,GAAM,cAAc,IAAI;AACvDsqD,GAAuB,cAAc;AAIrC,MAAMC,KAAwB,MAAMvqD,GAAM,WAAWsqD,EAAsB;AAE3E,IAAIE,KAAoB,CAACC,GAAWxlD,GAASylD,GAAqBC,IAAS,OAAS;AAChF,QAAM99C,IAAS;AAAA,IACX,eAAe5H,EAAQ;AAAA,EAC/B;AACI,aAAWqD,KAAOmiD;AACd,WAAO,eAAe59C,GAAQvE,GAAK;AAAA,MAC/B,KAAK,MAAM;AACP,cAAM0e,IAAO1e;AACb,eAAIrD,EAAQ,gBAAgB+hB,CAAI,MAAMojC,GAAgB,QAClDnlD,EAAQ,gBAAgB+hB,CAAI,IAAI,CAAC2jC,KAAUP,GAAgB,MAE/DM,MAAwBA,EAAoB1jC,CAAI,IAAI,KAC7CyjC,EAAUzjC,CAAI;AAAA,MACzB;AAAA,IACZ,CAAS;AAEL,SAAOna;AACX;AAEA,MAAMsrC,KAA4B,OAAO,SAAW,MAAcn4C,GAAM,kBAAkBA,GAAM;AAgChG,SAAS4qD,GAAa5mD,GAAO;AACzB,QAAM6mD,IAAcN,GAAqB,GACnC,EAAE,SAAAtlD,IAAU4lD,GAAa,UAAAC,GAAU,MAAAzmD,GAAM,OAAA0mD,EAAK,IAAK/mD,KAAS,CAAA,GAC5D,CAACymD,GAAWO,CAAe,IAAIhrD,GAAM,SAASiF,EAAQ,UAAU,GAChEgmD,IAAuBjrD,GAAM,OAAO;AAAA,IACtC,SAAS;AAAA,IACT,WAAW;AAAA,IACX,aAAa;AAAA,IACb,eAAe;AAAA,IACf,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,SAAS;AAAA,IACT,QAAQ;AAAA,EAChB,CAAK;AACD,SAAAm4C,GAA0B,MAAMlzC,EAAQ,WAAW;AAAA,IAC/C,MAAAZ;AAAA,IACA,WAAW4mD,EAAqB;AAAA,IAChC,OAAAF;AAAA,IACA,UAAU,CAACN,MAAc;AACrB,OAACK,KACGE,EAAgB;AAAA,QACZ,GAAG/lD,EAAQ;AAAA,QACX,GAAGwlD;AAAA,MACvB,CAAiB;AAAA,IACT;AAAA,EACR,CAAK,GAAG,CAACpmD,GAAMymD,GAAUC,CAAK,CAAC,GAC3B/qD,GAAM,UAAU,MAAM;AAClB,IAAAirD,EAAqB,QAAQ,WAAWhmD,EAAQ,UAAU,EAAI;AAAA,EAClE,GAAG,CAACA,CAAO,CAAC,GACLjF,GAAM,QAAQ,MAAMwqD,GAAkBC,GAAWxlD,GAASgmD,EAAqB,SAAS,EAAK,GAAG,CAACR,GAAWxlD,CAAO,CAAC;AAC/H;AAEA,IAAIimD,KAAW,CAAChkD,MAAU,OAAOA,KAAU,UAEvCikD,KAAsB,CAAClC,GAAOmC,GAAQC,GAAYC,GAAUhT,MACxD4S,GAASjC,CAAK,KACdqC,KAAYF,EAAO,MAAM,IAAInC,CAAK,GAC3BY,GAAIwB,GAAYpC,GAAO3Q,CAAY,KAE1C,MAAM,QAAQ2Q,CAAK,IACZA,EAAM,IAAI,CAACsC,OAAeD,KAAYF,EAAO,MAAM,IAAIG,CAAS,GACnE1B,GAAIwB,GAAYE,CAAS,EAAE,KAEnCD,MAAaF,EAAO,WAAW,KACxBC,IAGPG,KAAc,CAACtkD,MAAUyhD,GAAkBzhD,CAAK,KAAK,CAAC0hD,GAAa1hD,CAAK;AAE5E,SAASukD,GAAUC,GAASC,GAASC,IAAoB,oBAAI,QAAO,GAAI;AACpE,MAAIJ,GAAYE,CAAO,KAAKF,GAAYG,CAAO;AAC3C,WAAO,OAAO,GAAGD,GAASC,CAAO;AAErC,MAAIjD,GAAagD,CAAO,KAAKhD,GAAaiD,CAAO;AAC7C,WAAO,OAAO,GAAGD,EAAQ,QAAO,GAAIC,EAAQ,SAAS;AAEzD,QAAME,IAAQ,OAAO,KAAKH,CAAO,GAC3BI,IAAQ,OAAO,KAAKH,CAAO;AACjC,MAAIE,EAAM,WAAWC,EAAM;AACvB,WAAO;AAEX,MAAIF,EAAkB,IAAIF,CAAO,KAAKE,EAAkB,IAAID,CAAO;AAC/D,WAAO;AAEX,EAAAC,EAAkB,IAAIF,CAAO,GAC7BE,EAAkB,IAAID,CAAO;AAC7B,aAAWrjD,KAAOujD,GAAO;AACrB,UAAME,IAAOL,EAAQpjD,CAAG;AACxB,QAAI,CAACwjD,EAAM,SAASxjD,CAAG;AACnB,aAAO;AAEX,QAAIA,MAAQ,OAAO;AACf,YAAM0jD,IAAOL,EAAQrjD,CAAG;AACxB,UAAKogD,GAAaqD,CAAI,KAAKrD,GAAasD,CAAI,KACvCnD,GAASkD,CAAI,KAAKlD,GAASmD,CAAI,KAC/B,MAAM,QAAQD,CAAI,KAAK,MAAM,QAAQC,CAAI,IACxC,CAACP,GAAUM,GAAMC,GAAMJ,CAAiB,IACxC,CAAC,OAAO,GAAGG,GAAMC,CAAI;AACvB,eAAO;AAAA,IAEf;AAAA,EACJ;AACA,SAAO;AACX;AAkBA,SAASC,GAASjoD,GAAO;AACrB,QAAM6mD,IAAcN,GAAqB,GACnC,EAAE,SAAAtlD,IAAU4lD,GAAa,MAAAxmD,GAAM,cAAAi0C,GAAc,UAAAwS,GAAU,OAAAC,GAAO,SAAAmB,MAAaloD,KAAS,CAAA,GACpFmoD,IAAgBnsD,GAAM,OAAOs4C,CAAY,GACzC8T,IAAWpsD,GAAM,OAAOksD,CAAO,GAC/BG,IAAqBrsD,GAAM,OAAO,MAAS,GAC3CssD,IAAetsD,GAAM,OAAOiF,CAAO,GACnCsnD,IAAYvsD,GAAM,OAAOqE,CAAI;AACnC,EAAA+nD,EAAS,UAAUF;AACnB,QAAM,CAAChlD,GAAOslD,CAAW,IAAIxsD,GAAM,SAAS,MAAM;AAC9C,UAAMs4C,IAAerzC,EAAQ,UAAUZ,GAAM8nD,EAAc,OAAO;AAClE,WAAOC,EAAS,UAAUA,EAAS,QAAQ9T,CAAY,IAAIA;AAAA,EAC/D,CAAC,GACKmU,IAAmBzsD,GAAM,YAAY,CAACuG,MAAW;AACnD,UAAM8kD,IAAaF,GAAoB9mD,GAAMY,EAAQ,QAAQsB,KAAUtB,EAAQ,aAAa,IAAOknD,EAAc,OAAO;AACxH,WAAOC,EAAS,UAAUA,EAAS,QAAQf,CAAU,IAAIA;AAAA,EAC7D,GAAG,CAACpmD,EAAQ,aAAaA,EAAQ,QAAQZ,CAAI,CAAC,GACxCqoD,IAAe1sD,GAAM,YAAY,CAACuG,MAAW;AAC/C,QAAI,CAACukD,GAAU;AACX,YAAMO,IAAaF,GAAoB9mD,GAAMY,EAAQ,QAAQsB,KAAUtB,EAAQ,aAAa,IAAOknD,EAAc,OAAO;AACxH,UAAIC,EAAS,SAAS;AAClB,cAAMO,IAAqBP,EAAS,QAAQf,CAAU;AACtD,QAAKI,GAAUkB,GAAoBN,EAAmB,OAAO,MACzDG,EAAYG,CAAkB,GAC9BN,EAAmB,UAAUM;AAAA,MAErC;AAEI,QAAAH,EAAYnB,CAAU;AAAA,IAE9B;AAAA,EACJ,GAAG,CAACpmD,EAAQ,aAAaA,EAAQ,QAAQ6lD,GAAUzmD,CAAI,CAAC;AACxD,EAAA8zC,GAA0B,QAClBmU,EAAa,YAAYrnD,KACzB,CAACwmD,GAAUc,EAAU,SAASloD,CAAI,OAClCioD,EAAa,UAAUrnD,GACvBsnD,EAAU,UAAUloD,GACpBqoD,EAAY,IAETznD,EAAQ,WAAW;AAAA,IACtB,MAAAZ;AAAA,IACA,WAAW;AAAA,MACP,QAAQ;AAAA,IACxB;AAAA,IACY,OAAA0mD;AAAA,IACA,UAAU,CAACN,MAAc;AACrB,MAAAiC,EAAajC,EAAU,MAAM;AAAA,IACjC;AAAA,EACZ,CAAS,IACF,CAACxlD,GAAS8lD,GAAO1mD,GAAMqoD,CAAY,CAAC,GACvC1sD,GAAM,UAAU,MAAMiF,EAAQ,iBAAgB,CAAE;AAKhD,QAAM2nD,IAAiBN,EAAa,YAAYrnD,GAC1C4nD,IAAWN,EAAU,SAGrBO,IAAiB9sD,GAAM,QAAQ,MAAM;AACvC,QAAI8qD;AACA,aAAO;AAEX,UAAMiC,IAAc,CAACH,KAAkB,CAACnB,GAAUoB,GAAUxoD,CAAI;AAEhE,WAD8BuoD,KAAkBG,IACjBN,EAAgB,IAAK;AAAA,EACxD,GAAG,CAAC3B,GAAU8B,GAAgBvoD,GAAMwoD,GAAUJ,CAAgB,CAAC;AAC/D,SAAOK,MAAmB,OAAOA,IAAiB5lD;AACtD;AA0BA,SAAS8lD,GAAchpD,GAAO;AAC1B,QAAM6mD,IAAcN,GAAqB,GACnC,EAAE,MAAAlmD,GAAM,UAAAymD,GAAU,SAAA7lD,IAAU4lD,GAAa,kBAAAoC,GAAkB,cAAA3U,GAAc,OAAAyS,IAAQ,GAAI,IAAM/mD,GAC3FkpD,IAAelE,GAAmB/jD,EAAQ,OAAO,OAAOZ,CAAI,GAC5D8oD,IAAmBntD,GAAM,QAAQ,MAAM6pD,GAAI5kD,EAAQ,aAAaZ,GAAMwlD,GAAI5kD,EAAQ,gBAAgBZ,GAAMi0C,CAAY,CAAC,GAAG,CAACrzC,GAASZ,GAAMi0C,CAAY,CAAC,GACrJpxC,IAAQ+kD,GAAS;AAAA,IACnB,SAAAhnD;AAAA,IACA,MAAAZ;AAAA,IACA,cAAc8oD;AAAA,IACd,OAAApC;AAAA,EACR,CAAK,GACKN,IAAYG,GAAa;AAAA,IAC3B,SAAA3lD;AAAA,IACA,MAAAZ;AAAA,IACA,OAAA0mD;AAAA,EACR,CAAK,GACKqC,IAASptD,GAAM,OAAOgE,CAAK,GAC3BqpD,IAAmBrtD,GAAM,OAAO,MAAS,GACzCstD,IAAiBttD,GAAM,OAAOiF,EAAQ,SAASZ,GAAM;AAAA,IACvD,GAAGL,EAAM;AAAA,IACT,OAAAkD;AAAA,IACA,GAAI4iD,GAAU9lD,EAAM,QAAQ,IAAI,EAAE,UAAUA,EAAM,SAAQ,IAAK;EACvE,CAAK,CAAC;AACF,EAAAopD,EAAO,UAAUppD;AACjB,QAAMupD,IAAavtD,GAAM,QAAQ,MAAM,OAAO,iBAAiB,IAAI;AAAA,IAC/D,SAAS;AAAA,MACL,YAAY;AAAA,MACZ,KAAK,MAAM,CAAC,CAAC6pD,GAAIY,EAAU,QAAQpmD,CAAI;AAAA,IACnD;AAAA,IACQ,SAAS;AAAA,MACL,YAAY;AAAA,MACZ,KAAK,MAAM,CAAC,CAACwlD,GAAIY,EAAU,aAAapmD,CAAI;AAAA,IACxD;AAAA,IACQ,WAAW;AAAA,MACP,YAAY;AAAA,MACZ,KAAK,MAAM,CAAC,CAACwlD,GAAIY,EAAU,eAAepmD,CAAI;AAAA,IAC1D;AAAA,IACQ,cAAc;AAAA,MACV,YAAY;AAAA,MACZ,KAAK,MAAM,CAAC,CAACwlD,GAAIY,EAAU,kBAAkBpmD,CAAI;AAAA,IAC7D;AAAA,IACQ,OAAO;AAAA,MACH,YAAY;AAAA,MACZ,KAAK,MAAMwlD,GAAIY,EAAU,QAAQpmD,CAAI;AAAA,IACjD;AAAA,EACA,CAAK,GAAG,CAAComD,GAAWpmD,CAAI,CAAC,GACfwpC,IAAW7tC,GAAM,YAAY,CAACurC,MAAU+hB,EAAe,QAAQ,SAAS;AAAA,IAC1E,QAAQ;AAAA,MACJ,OAAOxE,GAAcvd,CAAK;AAAA,MAC1B,MAAMlnC;AAAA,IAClB;AAAA,IACQ,MAAM8lD,GAAO;AAAA,EACrB,CAAK,GAAG,CAAC9lD,CAAI,CAAC,GACJmpD,IAASxtD,GAAM,YAAY,MAAMstD,EAAe,QAAQ,OAAO;AAAA,IACjE,QAAQ;AAAA,MACJ,OAAOzD,GAAI5kD,EAAQ,aAAaZ,CAAI;AAAA,MACpC,MAAMA;AAAA,IAClB;AAAA,IACQ,MAAM8lD,GAAO;AAAA,EACrB,CAAK,GAAG,CAAC9lD,GAAMY,EAAQ,WAAW,CAAC,GACzBsD,IAAMvI,GAAM,YAAY,CAACytD,MAAQ;AACnC,UAAMC,IAAQ7D,GAAI5kD,EAAQ,SAASZ,CAAI;AACvC,IAAIqpD,KAASA,EAAM,MAAMD,MACrBC,EAAM,GAAG,MAAM;AAAA,MACX,OAAO,MAAMjf,GAAWgf,EAAI,KAAK,KAAKA,EAAI,MAAK;AAAA,MAC/C,QAAQ,MAAMhf,GAAWgf,EAAI,MAAM,KAAKA,EAAI,OAAM;AAAA,MAClD,mBAAmB,CAACl4B,MAAYkZ,GAAWgf,EAAI,iBAAiB,KAAKA,EAAI,kBAAkBl4B,CAAO;AAAA,MAClG,gBAAgB,MAAMkZ,GAAWgf,EAAI,cAAc,KAAKA,EAAI,eAAc;AAAA,IAC1F;AAAA,EAEI,GAAG,CAACxoD,EAAQ,SAASZ,CAAI,CAAC,GACpBqpD,IAAQ1tD,GAAM,QAAQ,OAAO;AAAA,IAC/B,MAAAqE;AAAA,IACA,OAAA6C;AAAA,IACA,GAAI4iD,GAAUgB,CAAQ,KAAKL,EAAU,WAC/B,EAAE,UAAUA,EAAU,YAAYK,EAAQ,IAC1C;IACN,UAAAjd;AAAA,IACA,QAAA2f;AAAA,IACA,KAAAjlD;AAAA,EACR,IAAQ,CAAClE,GAAMymD,GAAUL,EAAU,UAAU5c,GAAU2f,GAAQjlD,GAAKrB,CAAK,CAAC;AACtElH,SAAAA,GAAM,UAAU,MAAM;AAClB,UAAM2tD,IAAyB1oD,EAAQ,SAAS,oBAAoBgoD,GAC9DW,IAAeP,EAAiB;AACtC,IAAIO,KAAgBA,MAAiBvpD,KAAQ,CAAC6oD,KAC1CjoD,EAAQ,WAAW2oD,CAAY,GAEnC3oD,EAAQ,SAASZ,GAAM;AAAA,MACnB,GAAG+oD,EAAO,QAAQ;AAAA,MAClB,GAAItD,GAAUsD,EAAO,QAAQ,QAAQ,IAC/B,EAAE,UAAUA,EAAO,QAAQ,SAAQ,IACnC;IAClB,CAAS;AACD,UAAMS,IAAgB,CAACxpD,GAAM6C,MAAU;AACnC,YAAMwmD,IAAQ7D,GAAI5kD,EAAQ,SAASZ,CAAI;AACvC,MAAIqpD,KAASA,EAAM,OACfA,EAAM,GAAG,QAAQxmD;AAAA,IAEzB;AAEA,QADA2mD,EAAcxpD,GAAM,EAAI,GACpBspD,GAAwB;AACxB,YAAMzmD,IAAQoiD,GAAYO,GAAI5kD,EAAQ,SAAS,eAAeZ,GAAM+oD,EAAO,QAAQ,YAAY,CAAC;AAChG,MAAA7kC,GAAItjB,EAAQ,gBAAgBZ,GAAM6C,CAAK,GACnCwiD,GAAYG,GAAI5kD,EAAQ,aAAaZ,CAAI,CAAC,KAC1CkkB,GAAItjB,EAAQ,aAAaZ,GAAM6C,CAAK;AAAA,IAE5C;AACA,YAACgmD,KAAgBjoD,EAAQ,SAASZ,CAAI,GACtCgpD,EAAiB,UAAUhpD,GACpB,MAAM;AACT,OAAC6oD,IACKS,KAA0B,CAAC1oD,EAAQ,OAAO,SAC1C0oD,KACA1oD,EAAQ,WAAWZ,CAAI,IACvBwpD,EAAcxpD,GAAM,EAAK;AAAA,IACnC;AAAA,EACJ,GAAG,CAACA,GAAMY,GAASioD,GAAcD,CAAgB,CAAC,GAClDjtD,GAAM,UAAU,MAAM;AAClB,IAAAiF,EAAQ,kBAAkB;AAAA,MACtB,UAAA6lD;AAAA,MACA,MAAAzmD;AAAA,IACZ,CAAS;AAAA,EACL,GAAG,CAACymD,GAAUzmD,GAAMY,CAAO,CAAC,GACrBjF,GAAM,QAAQ,OAAO;AAAA,IACxB,OAAA0tD;AAAA,IACA,WAAAjD;AAAA,IACA,YAAA8C;AAAA,EACR,IAAQ,CAACG,GAAOjD,GAAW8C,CAAU,CAAC;AACtC;AA4CA,MAAMO,KAAa,CAAC9pD,MAAUA,EAAM,OAAOgpD,GAAchpD,CAAK,CAAC,GAkBzD+pD,KAAkB/tD,GAAM,cAAc,IAAI;AAChD+tD,GAAgB,cAAc;AA+B9B,MAAMC,KAAiB,MAAMhuD,GAAM,WAAW+tD,EAAe,GA+BvDE,KAAe,CAACjqD,MAAU;AAC5B,QAAM,EAAE,UAAA+G,GAAU,OAAAmjD,GAAO,WAAAC,GAAW,eAAAC,GAAe,UAAA/hD,GAAU,aAAAgiD,GAAa,UAAA/f,GAAU,SAAAggB,GAAS,WAAA7D,GAAW,YAAA8D,GAAY,OAAAC,GAAO,cAAAC,GAAc,YAAAC,GAAY,SAAAzpD,GAAS,UAAA0pD,GAAU,UAAAC,GAAU,WAAAC,EAAS,IAAM7qD;AACjM,SAAQhE,GAAM;AAAA,IAAc+tD,GAAgB;AAAA,IAAU,EAAE,OAAO/tD,GAAM,QAAQ,OAAO;AAAA,MAC5E,OAAAkuD;AAAA,MACA,WAAAC;AAAA,MACA,eAAAC;AAAA,MACA,UAAA/hD;AAAA,MACA,aAAAgiD;AAAA,MACA,UAAA/f;AAAA,MACA,SAAAggB;AAAA,MACA,WAAA7D;AAAA,MACA,YAAA8D;AAAA,MACA,OAAAC;AAAA,MACA,cAAAC;AAAA,MACA,YAAAC;AAAA,MACA,SAAAzpD;AAAA,MACA,UAAA0pD;AAAA,MACA,UAAAC;AAAA,MACA,WAAAC;AAAA,IACZ,IAAY;AAAA,MACAR;AAAA,MACAppD;AAAA,MACAwlD;AAAA,MACA2D;AAAA,MACAD;AAAA,MACAM;AAAA,MACAE;AAAA,MACAH;AAAA,MACAD;AAAA,MACAliD;AAAA,MACAuiD;AAAA,MACAtgB;AAAA,MACAugB;AAAA,MACAP;AAAA,MACAI;AAAA,MACAR;AAAA,IACZ,CAAS,EAAC;AAAA,IACFluD,GAAM,cAAcsqD,GAAuB,UAAU,EAAE,OAAOrlD,EAAO,GAAI8F,CAAQ;AAAA,EAAC;AAC1F;AAyGA,IAAI+jD,KAAe,CAACzqD,GAAM0qD,GAA0BC,GAAQ1sD,GAAMizB,MAAYw5B,IACxE;AAAA,EACE,GAAGC,EAAO3qD,CAAI;AAAA,EACd,OAAO;AAAA,IACH,GAAI2qD,EAAO3qD,CAAI,KAAK2qD,EAAO3qD,CAAI,EAAE,QAAQ2qD,EAAO3qD,CAAI,EAAE,QAAQ,CAAA;AAAA,IAC9D,CAAC/B,CAAI,GAAGizB,KAAW;AAAA,EAC/B;AACA,IACM,CAAA,GAEF05B,KAAwB,CAAC/nD,MAAW,MAAM,QAAQA,CAAK,IAAIA,IAAQ,CAACA,CAAK,GAEzEgoD,KAAgB,MAAM;AACtB,MAAIC,IAAa,CAAA;AAiBjB,SAAO;AAAA,IACH,IAAI,YAAY;AACZ,aAAOA;AAAA,IACX;AAAA,IACA,MApBS,CAACjoD,MAAU;AACpB,iBAAW2G,KAAYshD;AACnB,QAAAthD,EAAS,QAAQA,EAAS,KAAK3G,CAAK;AAAA,IAE5C;AAAA,IAiBI,WAhBc,CAAC2G,OACfshD,EAAW,KAAKthD,CAAQ,GACjB;AAAA,MACH,aAAa,MAAM;AACf,QAAAshD,IAAaA,EAAW,OAAO,CAAC96C,MAAMA,MAAMxG,CAAQ;AAAA,MACxD;AAAA,IACZ;AAAA,IAWQ,aATgB,MAAM;AACtB,MAAAshD,IAAa,CAAA;AAAA,IACjB;AAAA,EAQJ;AACA;AAEA,SAASC,GAAkBC,GAAahE,GAAY;AAChD,QAAM9kD,IAAS,CAAA;AACf,aAAW+B,KAAO+mD;AACd,QAAIA,EAAY,eAAe/mD,CAAG,GAAG;AACjC,YAAMilD,IAAa8B,EAAY/mD,CAAG,GAC5BgnD,IAAajE,EAAW/iD,CAAG;AACjC,UAAIilD,KAAc1E,GAAS0E,CAAU,KAAK+B,GAAY;AAClD,cAAMC,IAAoBH,GAAkB7B,GAAY+B,CAAU;AAClE,QAAIzG,GAAS0G,CAAiB,MAC1BhpD,EAAO+B,CAAG,IAAIinD;AAAA,MAEtB,MACK,CAAIF,EAAY/mD,CAAG,MACpB/B,EAAO+B,CAAG,IAAIgnD;AAAA,IAEtB;AAEJ,SAAO/oD;AACX;AAEA,IAAIipD,KAAgB,CAACtoD,MAAU2hD,GAAS3hD,CAAK,KAAK,CAAC,OAAO,KAAKA,CAAK,EAAE,QAElEuoD,KAAc,CAACtpD,MAAYA,EAAQ,SAAS,QAE5CupD,KAAgB,CAACxoD,MAAU;AAC3B,MAAI,CAACmiD;AACD,WAAO;AAEX,QAAMjjD,IAAQc,IAAQA,EAAM,gBAAgB;AAC5C,SAAQA,cACHd,KAASA,EAAM,cAAcA,EAAM,YAAY,cAAc;AACtE,GAEIupD,KAAmB,CAACxpD,MAAYA,EAAQ,SAAS,mBAEjDypD,KAAe,CAACzpD,MAAYA,EAAQ,SAAS,SAE7C0pD,KAAoB,CAACtnD,MAAQqnD,GAAarnD,CAAG,KAAKkgD,GAAgBlgD,CAAG,GAErEunD,KAAO,CAACvnD,MAAQmnD,GAAcnnD,CAAG,KAAKA,EAAI;AAE9C,SAASwnD,GAAQ9mD,GAAQ+mD,GAAY;AACjC,QAAMhG,IAASgG,EAAW,MAAM,GAAG,EAAE,EAAE;AACvC,MAAI/hD,IAAQ;AACZ,SAAOA,IAAQ+7C;AACX,IAAA/gD,IAASygD,GAAYzgD,CAAM,IAAIgF,MAAUhF,EAAO+mD,EAAW/hD,GAAO,CAAC;AAEvE,SAAOhF;AACX;AACA,SAASgnD,GAAav8B,GAAK;AACvB,aAAWprB,KAAOorB;AACd,QAAIA,EAAI,eAAeprB,CAAG,KAAK,CAACohD,GAAYh2B,EAAIprB,CAAG,CAAC;AAChD,aAAO;AAGf,SAAO;AACX;AACA,SAAS4nD,GAAMjnD,GAAQsO,GAAM;AACzB,QAAM44C,IAAQ,MAAM,QAAQ54C,CAAI,IAC1BA,IACAkyC,GAAMlyC,CAAI,IACN,CAACA,CAAI,IACLqyC,GAAaryC,CAAI,GACrB64C,IAAcD,EAAM,WAAW,IAAIlnD,IAAS8mD,GAAQ9mD,GAAQknD,CAAK,GACjEliD,IAAQkiD,EAAM,SAAS,GACvB7nD,IAAM6nD,EAAMliD,CAAK;AACvB,SAAImiD,KACA,OAAOA,EAAY9nD,CAAG,GAEtB2F,MAAU,MACR46C,GAASuH,CAAW,KAAKZ,GAAcY,CAAW,KAC/C,MAAM,QAAQA,CAAW,KAAKH,GAAaG,CAAW,MAC3DF,GAAMjnD,GAAQknD,EAAM,MAAM,GAAG,EAAE,CAAC,GAE7BlnD;AACX;AAEA,IAAIonD,KAAoB,CAACrkD,MAAS;AAC9B,aAAW1D,KAAO0D;AACd,QAAIyiC,GAAWziC,EAAK1D,CAAG,CAAC;AACpB,aAAO;AAGf,SAAO;AACX;AAEA,SAASgoD,GAAcppD,GAAO;AAC1B,SAAO,MAAM,QAAQA,CAAK,KAAM2hD,GAAS3hD,CAAK,KAAK,CAACmpD,GAAkBnpD,CAAK;AAC/E;AACA,SAASqpD,GAAgBvkD,GAAMwkD,IAAS,IAAI;AACxC,aAAWloD,KAAO0D,GAAM;AACpB,UAAM9E,IAAQ8E,EAAK1D,CAAG;AACtB,IAAIgoD,GAAcppD,CAAK,KACnBspD,EAAOloD,CAAG,IAAI,MAAM,QAAQpB,CAAK,IAAI,CAAA,IAAK,CAAA,GAC1CqpD,GAAgBrpD,GAAOspD,EAAOloD,CAAG,CAAC,KAE5BohD,GAAYxiD,CAAK,MACvBspD,EAAOloD,CAAG,IAAI;AAAA,EAEtB;AACA,SAAOkoD;AACX;AACA,SAASC,GAAezkD,GAAMq/C,GAAYqF,GAAuB;AAC7D,EAAKA,MACDA,IAAwBH,GAAgBlF,CAAU;AAEtD,aAAW/iD,KAAO0D,GAAM;AACpB,UAAM9E,IAAQ8E,EAAK1D,CAAG;AACtB,QAAIgoD,GAAcppD,CAAK;AACnB,MAAIwiD,GAAY2B,CAAU,KAAKG,GAAYkF,EAAsBpoD,CAAG,CAAC,IACjEooD,EAAsBpoD,CAAG,IAAIioD,GAAgBrpD,GAAO,MAAM,QAAQA,CAAK,IAAI,CAAA,IAAK,EAAE,IAGlFupD,GAAevpD,GAAOyhD,GAAkB0C,CAAU,IAAI,CAAA,IAAKA,EAAW/iD,CAAG,GAAGooD,EAAsBpoD,CAAG,CAAC;AAAA,SAGzG;AACD,YAAMqoD,IAAYtF,EAAW/iD,CAAG;AAChC,MAAAooD,EAAsBpoD,CAAG,IAAI,CAACmjD,GAAUvkD,GAAOypD,CAAS;AAAA,IAC5D;AAAA,EACJ;AACA,SAAOD;AACX;AAEA,MAAME,KAAgB;AAAA,EAClB,OAAO;AAAA,EACP,SAAS;AACb,GACMC,KAAc,EAAE,OAAO,IAAM,SAAS,GAAI;AAChD,IAAIC,KAAmB,CAAC70B,MAAY;AAChC,MAAI,MAAM,QAAQA,CAAO,GAAG;AACxB,QAAIA,EAAQ,SAAS,GAAG;AACpB,YAAM11B,IAAS01B,EACV,OAAO,CAACrD,MAAWA,KAAUA,EAAO,WAAW,CAACA,EAAO,QAAQ,EAC/D,IAAI,CAACA,MAAWA,EAAO,KAAK;AACjC,aAAO,EAAE,OAAOryB,GAAQ,SAAS,CAAC,CAACA,EAAO,OAAM;AAAA,IACpD;AACA,WAAO01B,EAAQ,CAAC,EAAE,WAAW,CAACA,EAAQ,CAAC,EAAE;AAAA;AAAA,MAEjCA,EAAQ,CAAC,EAAE,cAAc,CAACytB,GAAYztB,EAAQ,CAAC,EAAE,WAAW,KAAK,IAC3DytB,GAAYztB,EAAQ,CAAC,EAAE,KAAK,KAAKA,EAAQ,CAAC,EAAE,UAAU,KAClD40B,KACA,EAAE,OAAO50B,EAAQ,CAAC,EAAE,OAAO,SAAS,GAAI,IAC5C40B;AAAA,QACRD;AAAA,EACV;AACA,SAAOA;AACX,GAEIG,KAAkB,CAAC7pD,GAAO,EAAE,eAAA8pD,GAAe,aAAAC,GAAa,YAAAC,EAAU,MAAOxH,GAAYxiD,CAAK,IACxFA,IACA8pD,IACI9pD,MAAU,KACN,MACAA,KACI,CAACA,IAET+pD,KAAe/F,GAAShkD,CAAK,IACzB,IAAI,KAAKA,CAAK,IACdgqD,IACIA,EAAWhqD,CAAK,IAChBA;AAElB,MAAMiqD,KAAgB;AAAA,EAClB,SAAS;AAAA,EACT,OAAO;AACX;AACA,IAAIC,KAAgB,CAACn1B,MAAY,MAAM,QAAQA,CAAO,IAChDA,EAAQ,OAAO,CAACo1B,GAAUz4B,MAAWA,KAAUA,EAAO,WAAW,CAACA,EAAO,WACrE;AAAA,EACE,SAAS;AAAA,EACT,OAAOA,EAAO;AAC1B,IACUy4B,GAAUF,EAAa,IAC3BA;AAEN,SAASG,GAAcC,GAAI;AACvB,QAAMhpD,IAAMgpD,EAAG;AACf,SAAI9B,GAAYlnD,CAAG,IACRA,EAAI,QAEXqnD,GAAarnD,CAAG,IACT6oD,GAAcG,EAAG,IAAI,EAAE,QAE9B5B,GAAiBpnD,CAAG,IACb,CAAC,GAAGA,EAAI,eAAe,EAAE,IAAI,CAAC,EAAE,OAAArB,EAAK,MAAOA,CAAK,IAExDuhD,GAAgBlgD,CAAG,IACZuoD,GAAiBS,EAAG,IAAI,EAAE,QAE9BR,GAAgBrH,GAAYnhD,EAAI,KAAK,IAAIgpD,EAAG,IAAI,QAAQhpD,EAAI,OAAOgpD,CAAE;AAChF;AAEA,IAAIC,KAAqB,CAACC,GAAaC,GAASC,GAAcC,MAA8B;AACxF,QAAMpB,IAAS,CAAA;AACf,aAAWnsD,KAAQotD,GAAa;AAC5B,UAAM/D,IAAQ7D,GAAI6H,GAASrtD,CAAI;AAC/B,IAAAqpD,KAASnlC,GAAIioC,GAAQnsD,GAAMqpD,EAAM,EAAE;AAAA,EACvC;AACA,SAAO;AAAA,IACH,cAAAiE;AAAA,IACA,OAAO,CAAC,GAAGF,CAAW;AAAA,IACtB,QAAAjB;AAAA,IACA,2BAAAoB;AAAA,EACR;AACA,GAEIC,KAAU,CAAC3qD,MAAUA,aAAiB,QAEtC4qD,KAAe,CAACC,MAASrI,GAAYqI,CAAI,IACvCA,IACAF,GAAQE,CAAI,IACRA,EAAK,SACLlJ,GAASkJ,CAAI,IACTF,GAAQE,EAAK,KAAK,IACdA,EAAK,MAAM,SACXA,EAAK,QACTA,GAEVC,KAAqB,CAACC,OAAU;AAAA,EAChC,YAAY,CAACA,KAAQA,MAAS7H,GAAgB;AAAA,EAC9C,UAAU6H,MAAS7H,GAAgB;AAAA,EACnC,YAAY6H,MAAS7H,GAAgB;AAAA,EACrC,SAAS6H,MAAS7H,GAAgB;AAAA,EAClC,WAAW6H,MAAS7H,GAAgB;AACxC;AAEA,MAAM8H,KAAiB;AACvB,IAAIC,KAAuB,CAACC,MAAmB,CAAC,CAACA,KAC7C,CAAC,CAACA,EAAe,YACjB,CAAC,EAAG3jB,GAAW2jB,EAAe,QAAQ,KAClCA,EAAe,SAAS,YAAY,SAASF,MAC5CrJ,GAASuJ,EAAe,QAAQ,KAC7B,OAAO,OAAOA,EAAe,QAAQ,EAAE,KAAK,CAACC,MAAqBA,EAAiB,YAAY,SAASH,EAAc,IAE9HI,KAAgB,CAACr2B,MAAYA,EAAQ,UACpCA,EAAQ,YACLA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,aACRA,EAAQ,aACRA,EAAQ,WACRA,EAAQ,WAEZs2B,KAAY,CAACluD,GAAM+mD,GAAQoH,MAAgB,CAACA,MAC3CpH,EAAO,YACJA,EAAO,MAAM,IAAI/mD,CAAI,KACrB,CAAC,GAAG+mD,EAAO,KAAK,EAAE,KAAK,CAACqH,MAAcpuD,EAAK,WAAWouD,CAAS,KAC3D,SAAS,KAAKpuD,EAAK,MAAMouD,EAAU,MAAM,CAAC,CAAC;AAEvD,MAAMC,KAAwB,CAAClC,GAAQmC,GAAQlB,GAAamB,MAAe;AACvE,aAAWtqD,KAAOmpD,KAAe,OAAO,KAAKjB,CAAM,GAAG;AAClD,UAAM9C,IAAQ7D,GAAI2G,GAAQloD,CAAG;AAC7B,QAAIolD,GAAO;AACP,YAAM,EAAE,IAAA6D,GAAI,GAAGsB,EAAY,IAAKnF;AAChC,UAAI6D,GAAI;AACJ,YAAIA,EAAG,QAAQA,EAAG,KAAK,CAAC,KAAKoB,EAAOpB,EAAG,KAAK,CAAC,GAAGjpD,CAAG,KAAK,CAACsqD;AACrD,iBAAO;AAEN,YAAIrB,EAAG,OAAOoB,EAAOpB,EAAG,KAAKA,EAAG,IAAI,KAAK,CAACqB;AAC3C,iBAAO;AAGP,YAAIF,GAAsBG,GAAcF,CAAM;AAC1C;AAAA,MAGZ,WACS9J,GAASgK,CAAY,KACtBH,GAAsBG,GAAcF,CAAM;AAC1C;AAAA,IAGZ;AAAA,EACJ;AAEJ;AAEA,SAASG,GAAkB9D,GAAQ0C,GAASrtD,GAAM;AAC9C,QAAMjD,IAAQyoD,GAAImF,GAAQ3qD,CAAI;AAC9B,MAAIjD,KAASqoD,GAAMplD,CAAI;AACnB,WAAO;AAAA,MACH,OAAAjD;AAAA,MACA,MAAAiD;AAAA,IACZ;AAEI,QAAM4kD,IAAQ5kD,EAAK,MAAM,GAAG;AAC5B,SAAO4kD,EAAM,UAAQ;AACjB,UAAMsC,IAAYtC,EAAM,KAAK,GAAG,GAC1ByE,IAAQ7D,GAAI6H,GAASnG,CAAS,GAC9BwH,IAAalJ,GAAImF,GAAQzD,CAAS;AACxC,QAAImC,KAAS,CAAC,MAAM,QAAQA,CAAK,KAAKrpD,MAASknD;AAC3C,aAAO,EAAE,MAAAlnD,EAAI;AAEjB,QAAI0uD,KAAcA,EAAW;AACzB,aAAO;AAAA,QACH,MAAMxH;AAAA,QACN,OAAOwH;AAAA,MACvB;AAEQ,QAAIA,KAAcA,EAAW,QAAQA,EAAW,KAAK;AACjD,aAAO;AAAA,QACH,MAAM,GAAGxH,CAAS;AAAA,QAClB,OAAOwH,EAAW;AAAA,MAClC;AAEQ,IAAA9J,EAAM,IAAG;AAAA,EACb;AACA,SAAO;AAAA,IACH,MAAA5kD;AAAA,EACR;AACA;AAEA,IAAI2uD,KAAwB,CAACC,GAAeC,GAAiBlI,GAAiBL,MAAW;AACrF,EAAAK,EAAgBiI,CAAa;AAC7B,QAAM,EAAE,MAAA5uD,GAAM,GAAGomD,EAAS,IAAKwI;AAC/B,SAAQzD,GAAc/E,CAAS,KAC3B,OAAO,KAAKA,CAAS,EAAE,UAAU,OAAO,KAAKyI,CAAe,EAAE,UAC9D,OAAO,KAAKzI,CAAS,EAAE,KAAK,CAACniD,MAAQ4qD,EAAgB5qD,CAAG,OACnD,CAACqiD,KAAUP,GAAgB,IAAI;AAC5C,GAEI+I,KAAwB,CAAC9uD,GAAM+uD,GAAYrI,MAAU,CAAC1mD,KACtD,CAAC+uD,KACD/uD,MAAS+uD,KACTnE,GAAsB5qD,CAAI,EAAE,KAAK,CAACgvD,MAAgBA,MAC7CtI,IACKsI,MAAgBD,IAChBC,EAAY,WAAWD,CAAU,KAC/BA,EAAW,WAAWC,CAAW,EAAE,GAE/CC,KAAiB,CAACd,GAAae,GAAWC,GAAaC,GAAgBxB,MACnEA,EAAK,UACE,KAEF,CAACuB,KAAevB,EAAK,YACnB,EAAEsB,KAAaf,MAEjBgB,IAAcC,EAAe,WAAWxB,EAAK,YAC3C,CAACO,KAEHgB,IAAcC,EAAe,aAAaxB,EAAK,cAC7CO,IAEJ,IAGPkB,KAAkB,CAACnrD,GAAKlE,MAAS,CAACslD,GAAQE,GAAIthD,GAAKlE,CAAI,CAAC,EAAE,UAAU6rD,GAAM3nD,GAAKlE,CAAI,GAEnFsvD,KAA4B,CAAC3E,GAAQ5tD,GAAOiD,MAAS;AACrD,QAAMuvD,IAAmB3E,GAAsBpF,GAAImF,GAAQ3qD,CAAI,CAAC;AAChE,SAAAkkB,GAAIqrC,GAAkB,QAAQxyD,EAAMiD,CAAI,CAAC,GACzCkkB,GAAIymC,GAAQ3qD,GAAMuvD,CAAgB,GAC3B5E;AACX;AAEA,SAAS6E,GAAiBhnD,GAAQtE,GAAKjG,IAAO,YAAY;AACtD,MAAI4oD,GAASr+C,CAAM,KACd,MAAM,QAAQA,CAAM,KAAKA,EAAO,MAAMq+C,EAAQ,KAC9CpB,GAAUj9C,CAAM,KAAK,CAACA;AACvB,WAAO;AAAA,MACH,MAAAvK;AAAA,MACA,SAAS4oD,GAASr+C,CAAM,IAAIA,IAAS;AAAA,MACrC,KAAAtE;AAAA,IACZ;AAEA;AAEA,IAAIurD,KAAqB,CAACC,MAAmBlL,GAASkL,CAAc,KAAK,CAAClC,GAAQkC,CAAc,IAC1FA,IACA;AAAA,EACE,OAAOA;AAAA,EACP,SAAS;AACjB,GAEIC,KAAgB,OAAOtG,GAAOuG,GAAoB5I,GAAY0D,GAA0B6C,GAA2BsC,MAAiB;AACpI,QAAM,EAAE,KAAA3rD,GAAK,MAAA6J,GAAM,UAAA+hD,GAAU,WAAAh4B,GAAW,WAAAD,GAAW,KAAAI,GAAK,KAAAC,GAAK,SAAA0J,GAAS,UAAAmuB,GAAU,MAAA/vD,GAAM,eAAA2sD,GAAe,OAAAqD,EAAK,IAAM3G,EAAM,IAChH4G,IAAazK,GAAIwB,GAAYhnD,CAAI;AACvC,MAAI,CAACgwD,KAASJ,EAAmB,IAAI5vD,CAAI;AACrC,WAAO,CAAA;AAEX,QAAMkwD,IAAWniD,IAAOA,EAAK,CAAC,IAAI7J,GAC5BisD,IAAoB,CAACj/B,MAAY;AACnC,IAAIq8B,KAA6B2C,EAAS,mBACtCA,EAAS,kBAAkBzK,GAAUv0B,CAAO,IAAI,KAAKA,KAAW,EAAE,GAClEg/B,EAAS,eAAc;AAAA,EAE/B,GACMnzD,IAAQ,CAAA,GACRqzD,IAAU7E,GAAarnD,CAAG,GAC1BmsD,IAAajM,GAAgBlgD,CAAG,GAChCsnD,IAAoB4E,KAAWC,GAC/BC,KAAY3D,KAAiBvB,GAAYlnD,CAAG,MAC9CmhD,GAAYnhD,EAAI,KAAK,KACrBmhD,GAAY4K,CAAU,KACrB5E,GAAcnnD,CAAG,KAAKA,EAAI,UAAU,MACrC+rD,MAAe,MACd,MAAM,QAAQA,CAAU,KAAK,CAACA,EAAW,QACxCM,IAAoB9F,GAAa,KAAK,MAAMzqD,GAAM0qD,GAA0B3tD,CAAK,GACjFyzD,IAAmB,CAACC,GAAWC,GAAkBC,GAAkBC,IAAU5K,GAAuB,WAAW6K,IAAU7K,GAAuB,cAAc;AAChK,UAAM90B,IAAUu/B,IAAYC,IAAmBC;AAC/C,IAAA5zD,EAAMiD,CAAI,IAAI;AAAA,MACV,MAAMywD,IAAYG,IAAUC;AAAA,MAC5B,SAAA3/B;AAAA,MACA,KAAAhtB;AAAA,MACA,GAAGqsD,EAAkBE,IAAYG,IAAUC,GAAS3/B,CAAO;AAAA,IACvE;AAAA,EACI;AACA,MAAI2+B,IACE,CAAC,MAAM,QAAQI,CAAU,KAAK,CAACA,EAAW,SAC1CH,MACI,CAACtE,MAAsB8E,KAAWhM,GAAkB2L,CAAU,MAC3DxK,GAAUwK,CAAU,KAAK,CAACA,KAC1BI,KAAc,CAAC5D,GAAiB1+C,CAAI,EAAE,WACtCqiD,KAAW,CAACrD,GAAch/C,CAAI,EAAE,UAAW;AACpD,UAAM,EAAE,OAAAlL,GAAO,SAAAquB,EAAO,IAAK21B,GAASiJ,CAAQ,IACtC,EAAE,OAAO,CAAC,CAACA,GAAU,SAASA,EAAQ,IACtCL,GAAmBK,CAAQ;AACjC,QAAIjtD,MACA9F,EAAMiD,CAAI,IAAI;AAAA,MACV,MAAMgmD,GAAuB;AAAA,MAC7B,SAAA90B;AAAA,MACA,KAAKg/B;AAAA,MACL,GAAGK,EAAkBvK,GAAuB,UAAU90B,CAAO;AAAA,IAC7E,GACgB,CAACw5B;AACD,aAAAyF,EAAkBj/B,CAAO,GAClBn0B;AAAA,EAGnB;AACA,MAAI,CAACuzD,MAAY,CAAChM,GAAkBrsB,CAAG,KAAK,CAACqsB,GAAkBpsB,CAAG,IAAI;AAClE,QAAIu4B,GACAK;AACJ,UAAMC,IAAYtB,GAAmBv3B,CAAG,GAClC84B,IAAYvB,GAAmBx3B,CAAG;AACxC,QAAI,CAACqsB,GAAkB2L,CAAU,KAAK,CAAC,MAAMA,CAAU,GAAG;AACtD,YAAMgB,IAAc/sD,EAAI,iBACnB+rD,KAAa,CAACA;AACnB,MAAK3L,GAAkByM,EAAU,KAAK,MAClCN,IAAYQ,IAAcF,EAAU,QAEnCzM,GAAkB0M,EAAU,KAAK,MAClCF,IAAYG,IAAcD,EAAU;AAAA,IAE5C,OACK;AACD,YAAME,IAAYhtD,EAAI,eAAe,IAAI,KAAK+rD,CAAU,GAClDkB,IAAoB,CAACC,MAAS,oBAAI,MAAK,oBAAI,KAAI,GAAG,aAAY,IAAK,MAAMA,CAAI,GAC7EC,IAASntD,EAAI,QAAQ,QACrBotD,IAASptD,EAAI,QAAQ;AAC3B,MAAI2iD,GAASkK,EAAU,KAAK,KAAKd,MAC7BQ,IAAYY,IACNF,EAAkBlB,CAAU,IAAIkB,EAAkBJ,EAAU,KAAK,IACjEO,IACIrB,IAAac,EAAU,QACvBG,IAAY,IAAI,KAAKH,EAAU,KAAK,IAE9ClK,GAASmK,EAAU,KAAK,KAAKf,MAC7Ba,IAAYO,IACNF,EAAkBlB,CAAU,IAAIkB,EAAkBH,EAAU,KAAK,IACjEM,IACIrB,IAAae,EAAU,QACvBE,IAAY,IAAI,KAAKF,EAAU,KAAK;AAAA,IAEtD;AACA,SAAIP,KAAaK,OACbN,EAAiB,CAAC,CAACC,GAAWM,EAAU,SAASC,EAAU,SAAShL,GAAuB,KAAKA,GAAuB,GAAG,GACtH,CAAC0E;AACD,aAAAyF,EAAkBpzD,EAAMiD,CAAI,EAAE,OAAO,GAC9BjD;AAAA,EAGnB;AACA,OAAK+6B,KAAaD,MACd,CAACy4B,MACAzJ,GAASoJ,CAAU,KAAMJ,KAAgB,MAAM,QAAQI,CAAU,IAAK;AACvE,UAAMsB,IAAkB9B,GAAmB33B,CAAS,GAC9C05B,IAAkB/B,GAAmB53B,CAAS,GAC9C44B,IAAY,CAACnM,GAAkBiN,EAAgB,KAAK,KACtDtB,EAAW,SAAS,CAACsB,EAAgB,OACnCT,IAAY,CAACxM,GAAkBkN,EAAgB,KAAK,KACtDvB,EAAW,SAAS,CAACuB,EAAgB;AACzC,SAAIf,KAAaK,OACbN,EAAiBC,GAAWc,EAAgB,SAASC,EAAgB,OAAO,GACxE,CAAC9G;AACD,aAAAyF,EAAkBpzD,EAAMiD,CAAI,EAAE,OAAO,GAC9BjD;AAAA,EAGnB;AACA,MAAI6kC,KAAW,CAAC0uB,KAAWzJ,GAASoJ,CAAU,GAAG;AAC7C,UAAM,EAAE,OAAOwB,GAAc,SAAAvgC,EAAO,IAAKu+B,GAAmB7tB,CAAO;AACnE,QAAI4rB,GAAQiE,CAAY,KAAK,CAACxB,EAAW,MAAMwB,CAAY,MACvD10D,EAAMiD,CAAI,IAAI;AAAA,MACV,MAAMgmD,GAAuB;AAAA,MAC7B,SAAA90B;AAAA,MACA,KAAAhtB;AAAA,MACA,GAAGqsD,EAAkBvK,GAAuB,SAAS90B,CAAO;AAAA,IAC5E,GACgB,CAACw5B;AACD,aAAAyF,EAAkBj/B,CAAO,GAClBn0B;AAAA,EAGnB;AACA,MAAIgzD;AACA,QAAI3lB,GAAW2lB,CAAQ,GAAG;AACtB,YAAMvnD,IAAS,MAAMunD,EAASE,GAAYjJ,CAAU,GAC9C0K,IAAgBlC,GAAiBhnD,GAAQ0nD,CAAQ;AACvD,UAAIwB,MACA30D,EAAMiD,CAAI,IAAI;AAAA,QACV,GAAG0xD;AAAA,QACH,GAAGnB,EAAkBvK,GAAuB,UAAU0L,EAAc,OAAO;AAAA,MAC/F,GACoB,CAAChH;AACD,eAAAyF,EAAkBuB,EAAc,OAAO,GAChC30D;AAAA,IAGnB,WACSynD,GAASuL,CAAQ,GAAG;AACzB,UAAI4B,IAAmB,CAAA;AACvB,iBAAW1tD,KAAO8rD,GAAU;AACxB,YAAI,CAAC5E,GAAcwG,CAAgB,KAAK,CAACjH;AACrC;AAEJ,cAAMgH,IAAgBlC,GAAiB,MAAMO,EAAS9rD,CAAG,EAAEgsD,GAAYjJ,CAAU,GAAGkJ,GAAUjsD,CAAG;AACjG,QAAIytD,MACAC,IAAmB;AAAA,UACf,GAAGD;AAAA,UACH,GAAGnB,EAAkBtsD,GAAKytD,EAAc,OAAO;AAAA,QACvE,GACoBvB,EAAkBuB,EAAc,OAAO,GACnChH,MACA3tD,EAAMiD,CAAI,IAAI2xD;AAAA,MAG1B;AACA,UAAI,CAACxG,GAAcwG,CAAgB,MAC/B50D,EAAMiD,CAAI,IAAI;AAAA,QACV,KAAKkwD;AAAA,QACL,GAAGyB;AAAA,MACvB,GACoB,CAACjH;AACD,eAAO3tD;AAAA,IAGnB;AAAA;AAEJ,SAAAozD,EAAkB,EAAI,GACfpzD;AACX;AAEA,MAAM60D,KAAiB;AAAA,EACnB,MAAM7L,GAAgB;AAAA,EACtB,gBAAgBA,GAAgB;AAAA,EAChC,kBAAkB;AACtB;AACA,SAAS8L,GAAkBlyD,IAAQ,IAAI;AACnC,MAAImyD,IAAW;AAAA,IACX,GAAGF;AAAA,IACH,GAAGjyD;AAAA,EACX,GACQoyD,IAAa;AAAA,IACb,aAAa;AAAA,IACb,SAAS;AAAA,IACT,SAAS;AAAA,IACT,WAAW3nB,GAAW0nB,EAAS,aAAa;AAAA,IAC5C,cAAc;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,IACd,oBAAoB;AAAA,IACpB,SAAS;AAAA,IACT,eAAe,CAAA;AAAA,IACf,aAAa,CAAA;AAAA,IACb,kBAAkB,CAAA;AAAA,IAClB,QAAQA,EAAS,UAAU,CAAA;AAAA,IAC3B,UAAUA,EAAS,YAAY;AAAA,EACvC,GACQzE,IAAU,CAAA,GACV2E,IAAiBxN,GAASsN,EAAS,aAAa,KAAKtN,GAASsN,EAAS,MAAM,IAC3E7M,GAAY6M,EAAS,iBAAiBA,EAAS,MAAM,KAAK,CAAA,IAC1D,CAAA,GACFG,IAAcH,EAAS,mBACrB,CAAA,IACA7M,GAAY+M,CAAc,GAC5BE,IAAS;AAAA,IACT,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACrB,GACQnL,IAAS;AAAA,IACT,OAAO,oBAAI,IAAG;AAAA,IACd,UAAU,oBAAI,IAAG;AAAA,IACjB,SAAS,oBAAI,IAAG;AAAA,IAChB,OAAO,oBAAI,IAAG;AAAA,IACd,OAAO,oBAAI,IAAG;AAAA,EACtB,GACQoL,GACAC,IAAQ;AACZ,QAAMC,IAAwB;AAAA,IAC1B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,cAAc;AAAA,IACd,SAAS;AAAA,IACT,QAAQ;AAAA,EAChB,GACUxD,IAAkB;AAAA,IACpB,GAAGwD;AAAA,EACX;AACI,MAAIC,IAA2B;AAAA,IAC3B,GAAGzD;AAAA,EACX;AACI,QAAM0D,IAAY;AAAA,IACd,OAAO1H,GAAa;AAAA,IACpB,OAAOA,GAAa;AAAA,EAC5B,GACU2H,IAAmCV,EAAS,iBAAiB/L,GAAgB,KAC7E0M,IAAW,CAAClyB,MAAa,CAACmyB,MAAS;AACrC,iBAAaN,CAAK,GAClBA,IAAQ,WAAW7xB,GAAUmyB,CAAI;AAAA,EACrC,GACMC,IAAY,OAAOC,MAAsB;AAC3C,QAAI,CAAAV,EAAO,eAGP,CAACJ,EAAS,aACTjD,EAAgB,WACbyD,EAAyB,WACzBM,IAAoB;AACxB,UAAI7/B;AACJ,MAAI++B,EAAS,YACT/+B,IAAUo4B,IAAe,MAAM0H,EAAU,GAAI,MAAM,GACnDC,EAAmB,KAGnB//B,IAAU,MAAMggC,EAAyB1F,GAAS,EAAI,GAEtDt6B,MAAYg/B,EAAW,WACvBQ,EAAU,MAAM,KAAK;AAAA,QACjB,SAAAx/B;AAAA,MACpB,CAAiB;AAAA,IAET;AAAA,EACJ,GACM+/B,IAAsB,CAAClO,GAAOoO,MAAiB;AACjD,IAAI,CAAClB,EAAS,aACTjD,EAAgB,gBACbA,EAAgB,oBAChByD,EAAyB,gBACzBA,EAAyB,uBAC5B1N,KAAS,MAAM,KAAKmC,EAAO,KAAK,GAAG,QAAQ,CAAC/mD,MAAS;AAClD,MAAIA,MACAgzD,IACM9uC,GAAI6tC,EAAW,kBAAkB/xD,GAAMgzD,CAAY,IACnDnH,GAAMkG,EAAW,kBAAkB/xD,CAAI;AAAA,IAErD,CAAC,GACDuyD,EAAU,MAAM,KAAK;AAAA,MACjB,kBAAkBR,EAAW;AAAA,MAC7B,cAAc,CAAC5G,GAAc4G,EAAW,gBAAgB;AAAA,IACxE,CAAa;AAAA,EAET,GACMkB,IAAiB,CAACjzD,GAAMkC,IAAS,CAAA,GAAIgxD,GAAQh2D,IAAMi2D,IAAkB,IAAMC,IAA6B,OAAS;AACnH,QAAIl2D,MAAQg2D,KAAU,CAACpB,EAAS,UAAU;AAEtC,UADAI,EAAO,SAAS,IACZkB,KAA8B,MAAM,QAAQ5N,GAAI6H,GAASrtD,CAAI,CAAC,GAAG;AACjE,cAAMqzD,KAAcH,EAAO1N,GAAI6H,GAASrtD,CAAI,GAAG9C,GAAK,MAAMA,GAAK,IAAI;AACnE,QAAAi2D,KAAmBjvC,GAAImpC,GAASrtD,GAAMqzD,EAAW;AAAA,MACrD;AACA,UAAID,KACA,MAAM,QAAQ5N,GAAIuM,EAAW,QAAQ/xD,CAAI,CAAC,GAAG;AAC7C,cAAM2qD,KAASuI,EAAO1N,GAAIuM,EAAW,QAAQ/xD,CAAI,GAAG9C,GAAK,MAAMA,GAAK,IAAI;AACxE,QAAAi2D,KAAmBjvC,GAAI6tC,EAAW,QAAQ/xD,GAAM2qD,EAAM,GACtD0E,GAAgB0C,EAAW,QAAQ/xD,CAAI;AAAA,MAC3C;AACA,WAAK6uD,EAAgB,iBACjByD,EAAyB,kBACzBc,KACA,MAAM,QAAQ5N,GAAIuM,EAAW,eAAe/xD,CAAI,CAAC,GAAG;AACpD,cAAMszD,KAAgBJ,EAAO1N,GAAIuM,EAAW,eAAe/xD,CAAI,GAAG9C,GAAK,MAAMA,GAAK,IAAI;AACtF,QAAAi2D,KAAmBjvC,GAAI6tC,EAAW,eAAe/xD,GAAMszD,EAAa;AAAA,MACxE;AACA,OAAIzE,EAAgB,eAAeyD,EAAyB,iBACxDP,EAAW,cAAc3F,GAAe4F,GAAgBC,CAAW,IAEvEM,EAAU,MAAM,KAAK;AAAA,QACjB,MAAAvyD;AAAA,QACA,SAASuzD,EAAUvzD,GAAMkC,CAAM;AAAA,QAC/B,aAAa6vD,EAAW;AAAA,QACxB,QAAQA,EAAW;AAAA,QACnB,SAASA,EAAW;AAAA,MACpC,CAAa;AAAA,IACL;AAEI,MAAA7tC,GAAI+tC,GAAajyD,GAAMkC,CAAM;AAAA,EAErC,GACMsxD,IAAe,CAACxzD,GAAMjD,MAAU;AAClC,IAAAmnB,GAAI6tC,EAAW,QAAQ/xD,GAAMjD,CAAK,GAClCw1D,EAAU,MAAM,KAAK;AAAA,MACjB,QAAQR,EAAW;AAAA,IAC/B,CAAS;AAAA,EACL,GACM0B,IAAa,CAAC9I,MAAW;AAC3B,IAAAoH,EAAW,SAASpH,GACpB4H,EAAU,MAAM,KAAK;AAAA,MACjB,QAAQR,EAAW;AAAA,MACnB,SAAS;AAAA,IACrB,CAAS;AAAA,EACL,GACM2B,IAAsB,CAAC1zD,GAAM2zD,GAAsB9wD,GAAOqB,OAAQ;AACpE,UAAMmlD,IAAQ7D,GAAI6H,GAASrtD,CAAI;AAC/B,QAAIqpD,GAAO;AACP,YAAMpV,IAAeuR,GAAIyM,GAAajyD,GAAMqlD,GAAYxiD,CAAK,IAAI2iD,GAAIwM,GAAgBhyD,CAAI,IAAI6C,CAAK;AAClGwiD,MAAAA,GAAYpR,CAAY,KACnB/vC,MAAOA,GAAI,kBACZyvD,IACEzvC,GAAI+tC,GAAajyD,GAAM2zD,IAAuB1f,IAAegZ,GAAc5D,EAAM,EAAE,CAAC,IACpFuK,EAAc5zD,GAAMi0C,CAAY,GACtCie,EAAO,SAAS,CAACA,EAAO,UAAUS,EAAS;AAAA,IAC/C;AAAA,EACJ,GACMkB,IAAsB,CAAC7zD,GAAMirD,GAAYkD,GAAa2F,IAAaC,MAAiB;AACtF,QAAIC,IAAoB,IACpBC,KAAkB;AACtB,UAAMC,KAAS;AAAA,MACX,MAAAl0D;AAAA,IACZ;AACQ,QAAI,CAAC8xD,EAAS,UAAU;AACpB,UAAI,CAAC3D,KAAe2F,IAAa;AAC7B,SAAIjF,EAAgB,WAAWyD,EAAyB,aACpD2B,KAAkBlC,EAAW,SAC7BA,EAAW,UAAUmC,GAAO,UAAUX,EAAS,GAC/CS,IAAoBC,OAAoBC,GAAO;AAEnD,cAAMC,KAAyB/M,GAAU5B,GAAIwM,GAAgBhyD,CAAI,GAAGirD,CAAU;AAC9E,QAAAgJ,KAAkB,CAAC,CAACzO,GAAIuM,EAAW,aAAa/xD,CAAI,GACpDm0D,KACMtI,GAAMkG,EAAW,aAAa/xD,CAAI,IAClCkkB,GAAI6tC,EAAW,aAAa/xD,GAAM,EAAI,GAC5Ck0D,GAAO,cAAcnC,EAAW,aAChCiC,IACIA,MACMnF,EAAgB,eACdyD,EAAyB,gBACzB2B,OAAoB,CAACE;AAAA,MACrC;AACA,UAAIhG,GAAa;AACb,cAAMiG,KAAyB5O,GAAIuM,EAAW,eAAe/xD,CAAI;AACjE,QAAKo0D,OACDlwC,GAAI6tC,EAAW,eAAe/xD,GAAMmuD,CAAW,GAC/C+F,GAAO,gBAAgBnC,EAAW,eAClCiC,IACIA,MACMnF,EAAgB,iBACdyD,EAAyB,kBACzB8B,OAA2BjG;AAAA,MAE/C;AACA,MAAA6F,KAAqBD,KAAgBxB,EAAU,MAAM,KAAK2B,EAAM;AAAA,IACpE;AACA,WAAOF,IAAoBE,KAAS,CAAA;AAAA,EACxC,GACMG,IAAsB,CAACr0D,GAAM+yB,GAASh2B,GAAOmsD,OAAe;AAC9D,UAAMoL,IAAqB9O,GAAIuM,EAAW,QAAQ/xD,CAAI,GAChD4yD,KAAqB/D,EAAgB,WAAWyD,EAAyB,YAC3E7M,GAAU1yB,CAAO,KACjBg/B,EAAW,YAAYh/B;AAY3B,QAXI++B,EAAS,cAAc/0D,KACvBo1D,IAAqBM,EAAS,MAAMe,EAAaxzD,GAAMjD,CAAK,CAAC,GAC7Do1D,EAAmBL,EAAS,UAAU,MAGtC,aAAaM,CAAK,GAClBD,IAAqB,MACrBp1D,IACMmnB,GAAI6tC,EAAW,QAAQ/xD,GAAMjD,CAAK,IAClC8uD,GAAMkG,EAAW,QAAQ/xD,CAAI,KAElCjD,IAAQ,CAACqqD,GAAUkN,GAAoBv3D,CAAK,IAAIu3D,MACjD,CAACnJ,GAAcjC,EAAU,KACzB0J,GAAmB;AACnB,YAAM2B,KAAmB;AAAA,QACrB,GAAGrL;AAAA,QACH,GAAI0J,KAAqBnN,GAAU1yB,CAAO,IAAI,EAAE,SAAAA,EAAO,IAAK;QAC5D,QAAQg/B,EAAW;AAAA,QACnB,MAAA/xD;AAAA,MAChB;AACY,MAAA+xD,IAAa;AAAA,QACT,GAAGA;AAAA,QACH,GAAGwC;AAAA,MACnB,GACYhC,EAAU,MAAM,KAAKgC,EAAgB;AAAA,IACzC;AAAA,EACJ,GACM1B,IAAa,OAAO7yD,OACtB8yD,EAAoB9yD,GAAM,EAAI,GACf,MAAM8xD,EAAS,SAASG,GAAaH,EAAS,SAAS3E,GAAmBntD,KAAQ+mD,EAAO,OAAOsG,GAASyE,EAAS,cAAcA,EAAS,yBAAyB,CAAC,IAGhL0C,IAA8B,OAAO5P,MAAU;AACjD,UAAM,EAAE,QAAA+F,EAAM,IAAK,MAAMkI,EAAWjO,CAAK;AAEzC,QADAkO,EAAoBlO,CAAK,GACrBA;AACA,iBAAW5kD,KAAQ4kD,GAAO;AACtB,cAAM7nD,KAAQyoD,GAAImF,GAAQ3qD,CAAI;AAC9B,QAAAjD,KACMmnB,GAAI6tC,EAAW,QAAQ/xD,GAAMjD,EAAK,IAClC8uD,GAAMkG,EAAW,QAAQ/xD,CAAI;AAAA,MACvC;AAAA;AAGA,MAAA+xD,EAAW,SAASpH;AAExB,WAAOA;AAAA,EACX,GACMoI,IAA2B,OAAO5G,GAAQsI,GAAsB/1D,IAAU;AAAA,IAC5E,OAAO;AAAA,EACf,MAAU;AACF,eAAWsB,MAAQmsD,GAAQ;AACvB,YAAM9C,IAAQ8C,EAAOnsD,EAAI;AACzB,UAAIqpD,GAAO;AACP,cAAM,EAAE,IAAA6D,GAAI,GAAGjC,GAAU,IAAK5B;AAC9B,YAAI6D,GAAI;AACJ,gBAAMwH,KAAmB3N,EAAO,MAAM,IAAImG,EAAG,IAAI,GAC3CyH,KAAoBtL,EAAM,MAAMyE,GAAqBzE,EAAM,EAAE;AACnE,UAAIsL,MAAqB9F,EAAgB,oBACrCiE,EAAoB,CAAC5F,EAAG,IAAI,GAAG,EAAI;AAEvC,gBAAM0H,KAAa,MAAMjF,GAActG,GAAOtC,EAAO,UAAUkL,GAAaO,GAAkCV,EAAS,6BAA6B,CAAC2C,GAAsBC,EAAgB;AAI3L,cAHIC,MAAqB9F,EAAgB,oBACrCiE,EAAoB,CAAC5F,EAAG,IAAI,CAAC,GAE7B0H,GAAW1H,EAAG,IAAI,MAClBxuD,EAAQ,QAAQ,IACZ+1D,KAAwB90D,EAAM;AAC9B;AAGR,WAAC80D,MACIjP,GAAIoP,IAAY1H,EAAG,IAAI,IAClBwH,KACIpF,GAA0ByC,EAAW,QAAQ6C,IAAY1H,EAAG,IAAI,IAChEhpC,GAAI6tC,EAAW,QAAQ7E,EAAG,MAAM0H,GAAW1H,EAAG,IAAI,CAAC,IACvDrB,GAAMkG,EAAW,QAAQ7E,EAAG,IAAI;AAAA,QAC9C;AACA,SAAC/B,GAAcF,EAAU,KACpB,MAAM8H,EAAyB9H,IAAYwJ,GAAsB/1D,CAAO;AAAA,MACjF;AAAA,IACJ;AACA,WAAOA,EAAQ;AAAA,EACnB,GACMm2D,IAAmB,MAAM;AAC3B,eAAW70D,KAAQ+mD,EAAO,SAAS;AAC/B,YAAMsC,IAAQ7D,GAAI6H,GAASrtD,CAAI;AAC/B,MAAAqpD,MACKA,EAAM,GAAG,OACJA,EAAM,GAAG,KAAK,MAAM,CAACnlD,MAAQ,CAACunD,GAAKvnD,CAAG,CAAC,IACvC,CAACunD,GAAKpC,EAAM,GAAG,GAAG,MACxBgB,GAAWrqD,CAAI;AAAA,IACvB;AACA,IAAA+mD,EAAO,UAAU,oBAAI,IAAG;AAAA,EAC5B,GACMwM,IAAY,CAACvzD,GAAM2H,MAAS,CAACmqD,EAAS,aACvC9xD,KAAQ2H,KAAQuc,GAAI+tC,GAAajyD,GAAM2H,CAAI,GACxC,CAACy/C,GAAU0C,MAAakI,CAAc,IACxC8C,IAAY,CAAClQ,GAAO3Q,GAAcgT,MAAaH,GAAoBlC,GAAOmC,GAAQ;AAAA,IACpF,GAAImL,EAAO,QACLD,IACA5M,GAAYpR,CAAY,IACpB+d,IACAnL,GAASjC,CAAK,IACV,EAAE,CAACA,CAAK,GAAG3Q,EAAY,IACvBA;AAAA,EACtB,GAAOgT,GAAUhT,CAAY,GACnB8gB,IAAiB,CAAC/0D,MAASslD,GAAQE,GAAI0M,EAAO,QAAQD,IAAcD,GAAgBhyD,GAAM8xD,EAAS,mBAAmBtM,GAAIwM,GAAgBhyD,GAAM,CAAA,CAAE,IAAI,CAAA,CAAE,CAAC,GACzJ4zD,IAAgB,CAAC5zD,GAAM6C,GAAO+0B,IAAU,CAAA,MAAO;AACjD,UAAMyxB,KAAQ7D,GAAI6H,GAASrtD,CAAI;AAC/B,QAAIirD,IAAapoD;AACjB,QAAIwmD,IAAO;AACP,YAAM0E,IAAiB1E,GAAM;AAC7B,MAAI0E,MACA,CAACA,EAAe,YACZ7pC,GAAI+tC,GAAajyD,GAAM0sD,GAAgB7pD,GAAOkrD,CAAc,CAAC,GACjE9C,IACII,GAAc0C,EAAe,GAAG,KAAKzJ,GAAkBzhD,CAAK,IACtD,KACAA,GACNyoD,GAAiByC,EAAe,GAAG,IACnC,CAAC,GAAGA,EAAe,IAAI,OAAO,EAAE,QAAQ,CAACiH,OAAeA,GAAU,WAAW/J,EAAW,SAAS+J,GAAU,KAAK,CAAE,IAE7GjH,EAAe,OAChB3J,GAAgB2J,EAAe,GAAG,IAClCA,EAAe,KAAK,QAAQ,CAACkH,OAAgB;AACzC,SAAI,CAACA,GAAY,kBAAkB,CAACA,GAAY,cACxC,MAAM,QAAQhK,CAAU,IACxBgK,GAAY,UAAU,CAAC,CAAChK,EAAW,KAAK,CAACtjD,OAASA,OAASstD,GAAY,KAAK,IAG5EA,GAAY,UACRhK,MAAegK,GAAY,SAAS,CAAC,CAAChK;AAAA,MAGtD,CAAC,IAGD8C,EAAe,KAAK,QAAQ,CAACmH,OAAcA,GAAS,UAAUA,GAAS,UAAUjK,CAAW,IAG3FG,GAAY2C,EAAe,GAAG,IACnCA,EAAe,IAAI,QAAQ,MAG3BA,EAAe,IAAI,QAAQ9C,GACtB8C,EAAe,IAAI,QACpBwE,EAAU,MAAM,KAAK;AAAA,QACjB,MAAAvyD;AAAA,QACA,QAAQilD,GAAYgN,CAAW;AAAA,MAC3D,CAAyB;AAAA,IAIjB;AACA,KAACr6B,EAAQ,eAAeA,EAAQ,gBAC5Bi8B,EAAoB7zD,GAAMirD,GAAYrzB,EAAQ,aAAaA,EAAQ,aAAa,EAAI,GACxFA,EAAQ,kBAAkBqyB,EAAQjqD,CAAI;AAAA,EAC1C,GACMm1D,IAAY,CAACn1D,GAAM6C,GAAO+0B,MAAY;AACxC,eAAWw9B,MAAYvyD,GAAO;AAC1B,UAAI,CAACA,EAAM,eAAeuyD,EAAQ;AAC9B;AAEJ,YAAMnK,IAAapoD,EAAMuyD,EAAQ,GAC3BlO,IAAYlnD,IAAO,MAAMo1D,IACzB/L,KAAQ7D,GAAI6H,GAASnG,CAAS;AACpC,OAACH,EAAO,MAAM,IAAI/mD,CAAI,KAClBwkD,GAASyG,CAAU,KAClB5B,MAAS,CAACA,GAAM,OACjB,CAAChF,GAAa4G,CAAU,IACtBkK,EAAUjO,GAAW+D,GAAYrzB,CAAO,IACxCg8B,EAAc1M,GAAW+D,GAAYrzB,CAAO;AAAA,IACtD;AAAA,EACJ,GACMqS,IAAW,CAACjqC,GAAM6C,GAAO+0B,IAAU,CAAA,MAAO;AAC5C,UAAMyxB,KAAQ7D,GAAI6H,GAASrtD,CAAI,GACzB6vD,IAAe9I,EAAO,MAAM,IAAI/mD,CAAI,GACpCq1D,IAAapQ,GAAYpiD,CAAK;AACpC,IAAAqhB,GAAI+tC,GAAajyD,GAAMq1D,CAAU,GAC7BxF,KACA0C,EAAU,MAAM,KAAK;AAAA,MACjB,MAAAvyD;AAAA,MACA,QAAQilD,GAAYgN,CAAW;AAAA,IAC/C,CAAa,IACIpD,EAAgB,WACjBA,EAAgB,eAChByD,EAAyB,WACzBA,EAAyB,gBACzB16B,EAAQ,eACR26B,EAAU,MAAM,KAAK;AAAA,MACjB,MAAAvyD;AAAA,MACA,aAAaosD,GAAe4F,GAAgBC,CAAW;AAAA,MACvD,SAASsB,EAAUvzD,GAAMq1D,CAAU;AAAA,IACvD,CAAiB,KAILhM,MAAS,CAACA,GAAM,MAAM,CAAC/E,GAAkB+Q,CAAU,IAC7CF,EAAUn1D,GAAMq1D,GAAYz9B,CAAO,IACnCg8B,EAAc5zD,GAAMq1D,GAAYz9B,CAAO,GAE7Cs2B,GAAUluD,GAAM+mD,CAAM,IACtBwL,EAAU,MAAM,KAAK;AAAA,MACjB,GAAGR;AAAA,MACH,MAAA/xD;AAAA,MACA,QAAQilD,GAAYgN,CAAW;AAAA,IAC/C,CAAa,IAGDM,EAAU,MAAM,KAAK;AAAA,MACjB,MAAML,EAAO,QAAQlyD,IAAO;AAAA,MAC5B,QAAQilD,GAAYgN,CAAW;AAAA,IAC/C,CAAa;AAAA,EAET,GACMzoB,IAAW,OAAOtC,MAAU;AAC9B,IAAAgrB,EAAO,QAAQ;AACf,UAAMh9B,IAASgS,EAAM;AACrB,QAAIlnC,IAAOk1B,EAAO,MACdogC,KAAsB;AAC1B,UAAMjM,IAAQ7D,GAAI6H,GAASrtD,CAAI,GACzBu1D,IAA6B,CAACtK,OAAe;AAC/C,MAAAqK,KACI,OAAO,MAAMrK,EAAU,KAClB5G,GAAa4G,EAAU,KAAK,MAAMA,GAAW,QAAO,CAAE,KACvD7D,GAAU6D,IAAYzF,GAAIyM,GAAajyD,GAAMirD,EAAU,CAAC;AAAA,IACpE,GACMuK,KAA6B7H,GAAmBmE,EAAS,IAAI,GAC7D2D,KAA4B9H,GAAmBmE,EAAS,cAAc;AAC5E,QAAIzI,GAAO;AACP,UAAItsD,IACAg2B;AACJ,YAAMk4B,KAAa/1B,EAAO,OACpB+3B,GAAc5D,EAAM,EAAE,IACtB5E,GAAcvd,CAAK,GACnBinB,KAAcjnB,EAAM,SAAS4e,GAAO,QAAQ5e,EAAM,SAAS4e,GAAO,WAClE4P,KAAwB,CAACzH,GAAc5E,EAAM,EAAE,KACjD,CAACyI,EAAS,YACV,CAACtM,GAAIuM,EAAW,QAAQ/xD,CAAI,KAC5B,CAACqpD,EAAM,GAAG,QACV4F,GAAed,IAAa3I,GAAIuM,EAAW,eAAe/xD,CAAI,GAAG+xD,EAAW,aAAa0D,IAA2BD,EAA0B,GAC5IG,KAAUzH,GAAUluD,GAAM+mD,GAAQoH,EAAW;AACnD,MAAAjqC,GAAI+tC,GAAajyD,GAAMirD,EAAU,GAC7BkD,MACI,CAACj5B,KAAU,CAACA,EAAO,cACnBm0B,EAAM,GAAG,UAAUA,EAAM,GAAG,OAAOniB,CAAK,GACxCirB,KAAsBA,EAAmB,CAAC,KAGzC9I,EAAM,GAAG,YACdA,EAAM,GAAG,SAASniB,CAAK;AAE3B,YAAMgiB,KAAa2K,EAAoB7zD,GAAMirD,IAAYkD,EAAW,GAC9D4F,KAAe,CAAC5I,GAAcjC,EAAU,KAAKyM;AAOnD,UANA,CAACxH,MACGoE,EAAU,MAAM,KAAK;AAAA,QACjB,MAAAvyD;AAAA,QACA,MAAMknC,EAAM;AAAA,QACZ,QAAQ+d,GAAYgN,CAAW;AAAA,MACnD,CAAiB,GACDyD;AACA,gBAAI7G,EAAgB,WAAWyD,EAAyB,aAChDR,EAAS,SAAS,WACd3D,MACAwE,EAAS,IAGPxE,MACNwE,EAAS,IAGToB,MACJxB,EAAU,MAAM,KAAK,EAAE,MAAAvyD,GAAM,GAAI21D,KAAU,CAAA,IAAKzM,IAAa;AAGrE,UADA,CAACiF,MAAewH,MAAWpD,EAAU,MAAM,KAAK,EAAE,GAAGR,GAAY,GAC7DD,EAAS,UAAU;AACnB,cAAM,EAAE,QAAAnH,GAAM,IAAK,MAAMkI,EAAW,CAAC7yD,CAAI,CAAC;AAG1C,YAFA8yD,EAAoB,CAAC9yD,CAAI,CAAC,GAC1Bu1D,EAA2BtK,EAAU,GACjCqK,IAAqB;AACrB,gBAAMM,KAA4BnH,GAAkBsD,EAAW,QAAQ1E,GAASrtD,CAAI,GAC9E61D,KAAoBpH,GAAkB9D,IAAQ0C,GAASuI,GAA0B,QAAQ51D,CAAI;AACnG,UAAAjD,KAAQ84D,GAAkB,OAC1B71D,IAAO61D,GAAkB,MACzB9iC,KAAUo4B,GAAcR,EAAM;AAAA,QAClC;AAAA,MACJ;AAEI,QAAAmI,EAAoB,CAAC9yD,CAAI,GAAG,EAAI,GAChCjD,MAAS,MAAM4yD,GAActG,GAAOtC,EAAO,UAAUkL,GAAaO,GAAkCV,EAAS,yBAAyB,GAAG9xD,CAAI,GAC7I8yD,EAAoB,CAAC9yD,CAAI,CAAC,GAC1Bu1D,EAA2BtK,EAAU,GACjCqK,OACIv4D,KACAg2B,KAAU,MAEL87B,EAAgB,WACrByD,EAAyB,aACzBv/B,KAAU,MAAMggC,EAAyB1F,GAAS,EAAI;AAIlE,MAAIiI,OACAjM,EAAM,GAAG,SACJ,CAAC,MAAM,QAAQA,EAAM,GAAG,IAAI,KAAKA,EAAM,GAAG,KAAK,SAAS,MACzDY,EAAQZ,EAAM,GAAG,IAAI,GACzBgL,EAAoBr0D,GAAM+yB,IAASh2B,IAAOmsD,EAAU;AAAA,IAE5D;AAAA,EACJ,GACM4M,IAAc,CAAC5xD,GAAKD,MAAQ;AAC9B,QAAIuhD,GAAIuM,EAAW,QAAQ9tD,CAAG,KAAKC,EAAI;AACnC,aAAAA,EAAI,MAAK,GACF;AAAA,EAGf,GACM+lD,IAAU,OAAOjqD,GAAM43B,IAAU,CAAA,MAAO;AAC1C,QAAI7E,GACA4+B;AACJ,UAAMoE,IAAanL,GAAsB5qD,CAAI;AAC7C,QAAI8xD,EAAS,UAAU;AACnB,YAAMnH,IAAS,MAAM6J,EAA4BnP,GAAYrlD,CAAI,IAAIA,IAAO+1D,CAAU;AACtF,MAAAhjC,IAAUo4B,GAAcR,CAAM,GAC9BgH,KAAmB3xD,IACb,CAAC+1D,EAAW,KAAK,CAAC/1D,OAASwlD,GAAImF,GAAQ3qD,EAAI,CAAC,IAC5C+yB;AAAA,IACV,MACK,CAAI/yB,KACL2xD,MAAoB,MAAM,QAAQ,IAAIoE,EAAW,IAAI,OAAO7O,MAAc;AACtE,YAAMmC,KAAQ7D,GAAI6H,GAASnG,CAAS;AACpC,aAAO,MAAM6L,EAAyB1J,MAASA,GAAM,KAAK,EAAE,CAACnC,CAAS,GAAGmC,GAAK,IAAKA,EAAK;AAAA,IAC5F,CAAC,CAAC,GAAG,MAAM,OAAO,GAClB,EAAE,CAACsI,MAAoB,CAACI,EAAW,YAAYY,EAAS,KAGxDhB,KAAmB5+B,IAAU,MAAMggC,EAAyB1F,CAAO;AAEvE,WAAAkF,EAAU,MAAM,KAAK;AAAA,MACjB,GAAI,CAAC1L,GAAS7mD,CAAI,MACZ6uD,EAAgB,WAAWyD,EAAyB,YAClDv/B,MAAYg/B,EAAW,UACzB,CAAA,IACA,EAAE,MAAA/xD,EAAI;AAAA,MACZ,GAAI8xD,EAAS,YAAY,CAAC9xD,IAAO,EAAE,SAAA+yB,EAAO,IAAK;MAC/C,QAAQg/B,EAAW;AAAA,IAC/B,CAAS,GACDn6B,EAAQ,eACJ,CAAC+5B,MACDtD,GAAsBhB,GAASyI,GAAa91D,IAAO+1D,IAAahP,EAAO,KAAK,GACzE4K;AAAA,EACX,GACM7H,KAAY,CAACiM,GAAYxyD,MAAW;AACtC,QAAIrB,IAAS;AAAA,MACT,GAAIgwD,EAAO,QAAQD,IAAcD;AAAA,IAC7C;AACQ,WAAIzuD,MACArB,IAAS6oD,GAAkBxnD,EAAO,cAAcwuD,EAAW,cAAcA,EAAW,eAAe7vD,CAAM,IAEtGmjD,GAAY0Q,CAAU,IACvB7zD,IACA2kD,GAASkP,CAAU,IACfvQ,GAAItjD,GAAQ6zD,CAAU,IACtBA,EAAW,IAAI,CAAC/1D,OAASwlD,GAAItjD,GAAQlC,EAAI,CAAC;AAAA,EACxD,GACM+pD,KAAgB,CAAC/pD,GAAMomD,OAAe;AAAA,IACxC,SAAS,CAAC,CAACZ,IAAKY,KAAa2L,GAAY,QAAQ/xD,CAAI;AAAA,IACrD,SAAS,CAAC,CAACwlD,IAAKY,KAAa2L,GAAY,aAAa/xD,CAAI;AAAA,IAC1D,OAAOwlD,IAAKY,KAAa2L,GAAY,QAAQ/xD,CAAI;AAAA,IACjD,cAAc,CAAC,CAACwlD,GAAIuM,EAAW,kBAAkB/xD,CAAI;AAAA,IACrD,WAAW,CAAC,CAACwlD,IAAKY,KAAa2L,GAAY,eAAe/xD,CAAI;AAAA,EACtE,IACUgqD,KAAc,CAAChqD,MAAS;AAC1B,IAAAA,KACI4qD,GAAsB5qD,CAAI,EAAE,QAAQ,CAACg2D,MAAcnK,GAAMkG,EAAW,QAAQiE,CAAS,CAAC,GAC1FzD,EAAU,MAAM,KAAK;AAAA,MACjB,QAAQvyD,IAAO+xD,EAAW,SAAS,CAAA;AAAA,IAC/C,CAAS;AAAA,EACL,GACM/pD,KAAW,CAAChI,GAAMjD,GAAO66B,MAAY;AACvC,UAAM1zB,MAAOshD,GAAI6H,GAASrtD,GAAM,EAAE,IAAI,GAAE,CAAE,EAAE,MAAM,CAAA,GAAI,KAChDi2D,IAAezQ,GAAIuM,EAAW,QAAQ/xD,CAAI,KAAK,CAAA,GAE/C,EAAE,KAAKk2D,GAAY,SAAAhlC,IAAS,MAAAjzB,IAAM,GAAGk4D,GAAe,IAAKF;AAC/D,IAAA/xC,GAAI6tC,EAAW,QAAQ/xD,GAAM;AAAA,MACzB,GAAGm2D;AAAA,MACH,GAAGp5D;AAAA,MACH,KAAAmH;AAAA,IACZ,CAAS,GACDquD,EAAU,MAAM,KAAK;AAAA,MACjB,MAAAvyD;AAAA,MACA,QAAQ+xD,EAAW;AAAA,MACnB,SAAS;AAAA,IACrB,CAAS,GACDn6B,KAAWA,EAAQ,eAAe1zB,MAAOA,GAAI,SAASA,GAAI,MAAK;AAAA,EACnE,GACM2lD,KAAQ,CAAC7pD,GAAMi0C,MAAiB7J,GAAWpqC,CAAI,IAC/CuyD,EAAU,MAAM,UAAU;AAAA,IACxB,MAAM,CAACzzD,MAAY,YAAYA,KAC3BkB,EAAK80D,EAAU,QAAW7gB,CAAY,GAAGn1C,CAAO;AAAA,EAChE,CAAS,IACCg2D,EAAU90D,GAAMi0C,GAAc,EAAI,GAClCmiB,KAAa,CAACz2D,MAAU4yD,EAAU,MAAM,UAAU;AAAA,IACpD,MAAM,CAACnM,MAAc;AACjB,MAAI0I,GAAsBnvD,EAAM,MAAMymD,EAAU,MAAMzmD,EAAM,KAAK,KAC7DgvD,GAAsBvI,GAAWzmD,EAAM,aAAakvD,GAAiBwH,IAAe12D,EAAM,YAAY,KACtGA,EAAM,SAAS;AAAA,QACX,QAAQ,EAAE,GAAGsyD,EAAW;AAAA,QACxB,GAAGF;AAAA,QACH,GAAG3L;AAAA,QACH,eAAe4L;AAAA,MACnC,CAAiB;AAAA,IAET;AAAA,EACR,CAAK,EAAE,aACGxH,KAAY,CAAC7qD,OACfuyD,EAAO,QAAQ,IACfI,IAA2B;AAAA,IACvB,GAAGA;AAAA,IACH,GAAG3yD,EAAM;AAAA,EACrB,GACey2D,GAAW;AAAA,IACd,GAAGz2D;AAAA,IACH,WAAW;AAAA,MACP,GAAG0yD;AAAA,MACH,GAAG1yD,EAAM;AAAA,IACzB;AAAA,EACA,CAAS,IAEC0qD,KAAa,CAACrqD,GAAM43B,IAAU,CAAA,MAAO;AACvC,eAAWsvB,KAAalnD,IAAO4qD,GAAsB5qD,CAAI,IAAI+mD,EAAO;AAChE,MAAAA,EAAO,MAAM,OAAOG,CAAS,GAC7BH,EAAO,MAAM,OAAOG,CAAS,GACxBtvB,EAAQ,cACTi0B,GAAMwB,GAASnG,CAAS,GACxB2E,GAAMoG,GAAa/K,CAAS,IAEhC,CAACtvB,EAAQ,aAAai0B,GAAMkG,EAAW,QAAQ7K,CAAS,GACxD,CAACtvB,EAAQ,aAAai0B,GAAMkG,EAAW,aAAa7K,CAAS,GAC7D,CAACtvB,EAAQ,eAAei0B,GAAMkG,EAAW,eAAe7K,CAAS,GACjE,CAACtvB,EAAQ,oBACLi0B,GAAMkG,EAAW,kBAAkB7K,CAAS,GAChD,CAAC4K,EAAS,oBACN,CAACl6B,EAAQ,oBACTi0B,GAAMmG,GAAgB9K,CAAS;AAEvC,IAAAqL,EAAU,MAAM,KAAK;AAAA,MACjB,QAAQtN,GAAYgN,CAAW;AAAA,IAC3C,CAAS,GACDM,EAAU,MAAM,KAAK;AAAA,MACjB,GAAGR;AAAA,MACH,GAAKn6B,EAAQ,YAAiB,EAAE,SAAS27B,EAAS,MAAzB,CAAA;AAAA,IACrC,CAAS,GACD,CAAC37B,EAAQ,eAAe+6B,EAAS;AAAA,EACrC,GACM2D,KAAoB,CAAC,EAAE,UAAA7P,GAAU,MAAAzmD,EAAI,MAAQ;AAC/C,QAAKylD,GAAUgB,CAAQ,KAAKyL,EAAO,SAC7BzL,KACFM,EAAO,SAAS,IAAI/mD,CAAI,GAAG;AAG3B,YAAMu2D,IAFcxP,EAAO,SAAS,IAAI/mD,CAAI,MACzB,CAAC,CAACymD;AAErB,MAAAA,IAAWM,EAAO,SAAS,IAAI/mD,CAAI,IAAI+mD,EAAO,SAAS,OAAO/mD,CAAI,GAClEu2D,KAAwBrE,EAAO,SAAS,CAACA,EAAO,UAAUS,EAAS;AAAA,IACvE;AAAA,EACJ,GACMrI,KAAW,CAACtqD,GAAM43B,IAAU,CAAA,MAAO;AACrC,QAAIyxB,IAAQ7D,GAAI6H,GAASrtD,CAAI;AAC7B,UAAMw2D,KAAoB/Q,GAAU7tB,EAAQ,QAAQ,KAAK6tB,GAAUqM,EAAS,QAAQ;AACpF,WAAA5tC,GAAImpC,GAASrtD,GAAM;AAAA,MACf,GAAIqpD,KAAS,CAAA;AAAA,MACb,IAAI;AAAA,QACA,GAAIA,KAASA,EAAM,KAAKA,EAAM,KAAK,EAAE,KAAK,EAAE,MAAArpD,EAAI;QAChD,MAAAA;AAAA,QACA,OAAO;AAAA,QACP,GAAG43B;AAAA,MACnB;AAAA,IACA,CAAS,GACDmvB,EAAO,MAAM,IAAI/mD,CAAI,GACjBqpD,IACAiN,GAAkB;AAAA,MACd,UAAU7Q,GAAU7tB,EAAQ,QAAQ,IAC9BA,EAAQ,WACRk6B,EAAS;AAAA,MACf,MAAA9xD;AAAA,IAChB,CAAa,IAGD0zD,EAAoB1zD,GAAM,IAAM43B,EAAQ,KAAK,GAE1C;AAAA,MACH,GAAI4+B,KACE,EAAE,UAAU5+B,EAAQ,YAAYk6B,EAAS,SAAQ,IACjD;MACN,GAAIA,EAAS,cACP;AAAA,QACE,UAAU,CAAC,CAACl6B,EAAQ;AAAA,QACpB,KAAK61B,GAAa71B,EAAQ,GAAG;AAAA,QAC7B,KAAK61B,GAAa71B,EAAQ,GAAG;AAAA,QAC7B,WAAW61B,GAAa71B,EAAQ,SAAS;AAAA,QACzC,WAAW61B,GAAa71B,EAAQ,SAAS;AAAA,QACzC,SAAS61B,GAAa71B,EAAQ,OAAO;AAAA,MACzD,IACkB;MACN,MAAA53B;AAAA,MACA,UAAAwpC;AAAA,MACA,QAAQA;AAAA,MACR,KAAK,CAACtlC,MAAQ;AACV,YAAIA,GAAK;AACL,UAAAomD,GAAStqD,GAAM43B,CAAO,GACtByxB,IAAQ7D,GAAI6H,GAASrtD,CAAI;AACzB,gBAAMy2D,IAAWpR,GAAYnhD,EAAI,KAAK,KAChCA,EAAI,oBACAA,EAAI,iBAAiB,uBAAuB,EAAE,CAAC,KAAKA,GAGxDwyD,KAAkBlL,GAAkBiL,CAAQ,GAC5C1oD,KAAOs7C,EAAM,GAAG,QAAQ,CAAA;AAC9B,cAAIqN,KACE3oD,GAAK,KAAK,CAACwmB,OAAWA,OAAWkiC,CAAQ,IACzCA,MAAapN,EAAM,GAAG;AACxB;AAEJ,UAAAnlC,GAAImpC,GAASrtD,GAAM;AAAA,YACf,IAAI;AAAA,cACA,GAAGqpD,EAAM;AAAA,cACT,GAAIqN,KACE;AAAA,gBACE,MAAM;AAAA,kBACF,GAAG3oD,GAAK,OAAO09C,EAAI;AAAA,kBACnBgL;AAAA,kBACA,GAAI,MAAM,QAAQjR,GAAIwM,GAAgBhyD,CAAI,CAAC,IAAI,CAAC,EAAE,IAAI;gBAC9F;AAAA,gBACoC,KAAK,EAAE,MAAMy2D,EAAS,MAAM,MAAAz2D,EAAI;AAAA,cACpE,IACkC,EAAE,KAAKy2D;YACzC;AAAA,UACA,CAAqB,GACD/C,EAAoB1zD,GAAM,IAAO,QAAWy2D,CAAQ;AAAA,QACxD;AAEI,UAAApN,IAAQ7D,GAAI6H,GAASrtD,GAAM,CAAA,CAAE,GACzBqpD,EAAM,OACNA,EAAM,GAAG,QAAQ,MAEpByI,EAAS,oBAAoBl6B,EAAQ,qBAClC,EAAE+sB,GAAmBoC,EAAO,OAAO/mD,CAAI,KAAKkyD,EAAO,WACnDnL,EAAO,QAAQ,IAAI/mD,CAAI;AAAA,MAEnC;AAAA,IACZ;AAAA,EACI,GACM22D,KAAc,MAAM7E,EAAS,oBAC/BzD,GAAsBhB,GAASyI,GAAa/O,EAAO,KAAK,GACtD6P,KAAe,CAACnQ,MAAa;AAC/B,IAAIhB,GAAUgB,CAAQ,MAClB8L,EAAU,MAAM,KAAK,EAAE,UAAA9L,EAAQ,CAAE,GACjC4H,GAAsBhB,GAAS,CAACnpD,GAAKlE,MAAS;AAC1C,YAAMwuD,KAAehJ,GAAI6H,GAASrtD,CAAI;AACtC,MAAIwuD,OACAtqD,EAAI,WAAWsqD,GAAa,GAAG,YAAY/H,GACvC,MAAM,QAAQ+H,GAAa,GAAG,IAAI,KAClCA,GAAa,GAAG,KAAK,QAAQ,CAAC0B,MAAa;AACvC,QAAAA,EAAS,WAAW1B,GAAa,GAAG,YAAY/H;AAAA,MACpD,CAAC;AAAA,IAGb,GAAG,GAAG,EAAK;AAAA,EAEnB,GACM2D,KAAe,CAACyM,GAASC,MAAc,OAAOt7D,MAAM;AACtD,QAAIu7D;AACJ,IAAIv7D,MACAA,EAAE,kBAAkBA,EAAE,eAAc,GACpCA,EAAE,WACEA,EAAE,QAAO;AAEjB,QAAI63D,IAAcpO,GAAYgN,CAAW;AAIzC,QAHAM,EAAU,MAAM,KAAK;AAAA,MACjB,cAAc;AAAA,IAC1B,CAAS,GACGT,EAAS,UAAU;AACnB,YAAM,EAAE,QAAAnH,GAAQ,QAAAzoD,GAAM,IAAK,MAAM2wD,EAAU;AAC3C,MAAAC,EAAmB,GACnBf,EAAW,SAASpH,GACpB0I,IAAcpO,GAAY/iD,EAAM;AAAA,IACpC;AAEI,YAAM6wD,EAAyB1F,CAAO;AAE1C,QAAItG,EAAO,SAAS;AAChB,iBAAW/mD,KAAQ+mD,EAAO;AACtB,QAAA8E,GAAMwH,GAAarzD,CAAI;AAI/B,QADA6rD,GAAMkG,EAAW,QAAQ,MAAM,GAC3B5G,GAAc4G,EAAW,MAAM,GAAG;AAClC,MAAAQ,EAAU,MAAM,KAAK;AAAA,QACjB,QAAQ,CAAA;AAAA,MACxB,CAAa;AACD,UAAI;AACA,cAAMsE,EAAQxD,GAAa73D,CAAC;AAAA,MAChC,SACOuB,GAAO;AACV,QAAAg6D,KAAeh6D;AAAA,MACnB;AAAA,IACJ;AAEI,MAAI+5D,KACA,MAAMA,EAAU,EAAE,GAAG/E,EAAW,OAAM,GAAIv2D,CAAC,GAE/Cm7D,GAAW,GACX,WAAWA,EAAW;AAS1B,QAPApE,EAAU,MAAM,KAAK;AAAA,MACjB,aAAa;AAAA,MACb,cAAc;AAAA,MACd,oBAAoBpH,GAAc4G,EAAW,MAAM,KAAK,CAACgF;AAAA,MACzD,aAAahF,EAAW,cAAc;AAAA,MACtC,QAAQA,EAAW;AAAA,IAC/B,CAAS,GACGgF;AACA,YAAMA;AAAA,EAEd,GACM7M,KAAa,CAAClqD,GAAM43B,IAAU,CAAA,MAAO;AACvC,IAAI4tB,GAAI6H,GAASrtD,CAAI,MACbqlD,GAAYztB,EAAQ,YAAY,IAChCqS,EAASjqC,GAAMilD,GAAYO,GAAIwM,GAAgBhyD,CAAI,CAAC,CAAC,KAGrDiqC,EAASjqC,GAAM43B,EAAQ,YAAY,GACnC1T,GAAI8tC,GAAgBhyD,GAAMilD,GAAYrtB,EAAQ,YAAY,CAAC,IAE1DA,EAAQ,eACTi0B,GAAMkG,EAAW,eAAe/xD,CAAI,GAEnC43B,EAAQ,cACTi0B,GAAMkG,EAAW,aAAa/xD,CAAI,GAClC+xD,EAAW,UAAUn6B,EAAQ,eACvB27B,EAAUvzD,GAAMilD,GAAYO,GAAIwM,GAAgBhyD,CAAI,CAAC,CAAC,IACtDuzD,EAAS,IAEd37B,EAAQ,cACTi0B,GAAMkG,EAAW,QAAQ/xD,CAAI,GAC7B6uD,EAAgB,WAAW8D,EAAS,IAExCJ,EAAU,MAAM,KAAK,EAAE,GAAGR,EAAU,CAAE;AAAA,EAE9C,GACMiF,KAAS,CAAChQ,GAAYiQ,IAAmB,CAAA,MAAO;AAClD,UAAMC,IAAgBlQ,IAAa/B,GAAY+B,CAAU,IAAIgL,GACvDmF,KAAqBlS,GAAYiS,CAAa,GAC9CE,IAAqBjM,GAAcnE,CAAU,GAC7C9kD,IAASk1D,IAAqBpF,IAAiBmF;AAIrD,QAHKF,EAAiB,sBAClBjF,IAAiBkF,IAEjB,CAACD,EAAiB,YAAY;AAC9B,UAAIA,EAAiB,iBAAiB;AAClC,cAAMI,KAAgB,oBAAI,IAAI;AAAA,UAC1B,GAAGtQ,EAAO;AAAA,UACV,GAAG,OAAO,KAAKqF,GAAe4F,GAAgBC,CAAW,CAAC;AAAA,QAC9E,CAAiB;AACD,mBAAW/K,MAAa,MAAM,KAAKmQ,EAAa,GAAG;AAC/C,gBAAMvkC,KAAU0yB,GAAIuM,EAAW,aAAa7K,EAAS,GAC/CoQ,KAAgB9R,GAAIyM,GAAa/K,EAAS,GAC1ChT,KAAWsR,GAAItjD,GAAQglD,EAAS;AACtC,UAAIp0B,MAAW,CAACuyB,GAAYiS,EAAa,IACrCpzC,GAAIhiB,GAAQglD,IAAWoQ,EAAa,IAE/B,CAACxkC,MAAW,CAACuyB,GAAYnR,EAAQ,KACtCjK,EAASid,IAAWhT,EAAQ;AAAA,QAEpC;AAAA,MACJ,OACK;AACD,YAAI8Q,MAASK,GAAY2B,CAAU;AAC/B,qBAAWhnD,MAAQ+mD,EAAO,OAAO;AAC7B,kBAAMsC,KAAQ7D,GAAI6H,GAASrtD,EAAI;AAC/B,gBAAIqpD,MAASA,GAAM,IAAI;AACnB,oBAAM0E,KAAiB,MAAM,QAAQ1E,GAAM,GAAG,IAAI,IAC5CA,GAAM,GAAG,KAAK,CAAC,IACfA,GAAM,GAAG;AACf,kBAAIgC,GAAc0C,EAAc,GAAG;AAC/B,sBAAMwJ,KAAOxJ,GAAe,QAAQ,MAAM;AAC1C,oBAAIwJ,IAAM;AACN,kBAAAA,GAAK,MAAK;AACV;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAEJ,YAAIN,EAAiB;AACjB,qBAAW/P,MAAaH,EAAO;AAC3B,YAAA9c,EAASid,IAAW1B,GAAItjD,GAAQglD,EAAS,CAAC;AAAA;AAI9C,UAAAmG,IAAU,CAAA;AAAA,MAElB;AACA,MAAA4E,IAAcH,EAAS,mBACjBmF,EAAiB,oBACbhS,GAAY+M,CAAc,IAC1B,CAAA,IACJ/M,GAAY/iD,CAAM,GACxBqwD,EAAU,MAAM,KAAK;AAAA,QACjB,QAAQ,EAAE,GAAGrwD,EAAM;AAAA,MACnC,CAAa,GACDqwD,EAAU,MAAM,KAAK;AAAA,QACjB,QAAQ,EAAE,GAAGrwD,EAAM;AAAA,MACnC,CAAa;AAAA,IACL;AACA,IAAA6kD,IAAS;AAAA,MACL,OAAOkQ,EAAiB,kBAAkBlQ,EAAO,QAAQ,oBAAI,IAAG;AAAA,MAChE,SAAS,oBAAI,IAAG;AAAA,MAChB,OAAO,oBAAI,IAAG;AAAA,MACd,UAAU,oBAAI,IAAG;AAAA,MACjB,OAAO,oBAAI,IAAG;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACnB,GACQmL,EAAO,QACH,CAACrD,EAAgB,WACb,CAAC,CAACoI,EAAiB,eACnB,CAAC,CAACA,EAAiB,mBAClB,CAACnF,EAAS,oBAAoB,CAAC3G,GAAcjpD,CAAM,GAC5DgwD,EAAO,QAAQ,CAAC,CAACJ,EAAS,kBAC1BI,EAAO,cAAc,CAAC,CAAC+E,EAAiB,aACxC/E,EAAO,SAAS,IAIX+E,EAAiB,eAClBlF,EAAW,SAAS,CAAA,IAExBQ,EAAU,MAAM,KAAK;AAAA,MACjB,aAAa0E,EAAiB,kBACxBlF,EAAW,cACX;AAAA,MACN,SAASqF,IACH,KACAH,EAAiB,YACblF,EAAW,UACX,CAAC,EAAEkF,EAAiB,qBAClB,CAAC7P,GAAUJ,GAAYgL,CAAc;AAAA,MACjD,aAAaiF,EAAiB,kBACxBlF,EAAW,cACX;AAAA,MACN,aAAaqF,IACP,CAAA,IACAH,EAAiB,kBACbA,EAAiB,qBAAqBhF,IAClC7F,GAAe4F,GAAgBC,CAAW,IAC1CF,EAAW,cACfkF,EAAiB,qBAAqBjQ,IAClCoF,GAAe4F,GAAgBhL,CAAU,IACzCiQ,EAAiB,YACblF,EAAW,cACX,CAAA;AAAA,MAClB,eAAekF,EAAiB,cAC1BlF,EAAW,gBACX,CAAA;AAAA,MACN,QAAQkF,EAAiB,aAAalF,EAAW,SAAS,CAAA;AAAA,MAC1D,oBAAoBkF,EAAiB,yBAC/BlF,EAAW,qBACX;AAAA,MACN,cAAc;AAAA,MACd,eAAeC;AAAA,IAC3B,CAAS;AAAA,EACL,GACM7H,KAAQ,CAACnD,GAAYiQ,MAAqBD,GAAO5sB,GAAW4c,CAAU,IACtEA,EAAWiL,CAAW,IACtBjL,GAAY,EAAE,GAAG8K,EAAS,cAAc,GAAGmF,EAAgB,CAAE,GAC7D1M,KAAW,CAACvqD,GAAM43B,IAAU,CAAA,MAAO;AACrC,UAAMyxB,IAAQ7D,GAAI6H,GAASrtD,CAAI,GACzB+tD,KAAiB1E,KAASA,EAAM;AACtC,QAAI0E,IAAgB;AAChB,YAAM0I,IAAW1I,GAAe,OAC1BA,GAAe,KAAK,CAAC,IACrBA,GAAe;AACrB,MAAI0I,EAAS,SAGT,WAAW,MAAM;AACb,QAAAA,EAAS,MAAK,GACd7+B,EAAQ,gBACJwS,GAAWqsB,EAAS,MAAM,KAC1BA,EAAS,OAAM;AAAA,MACvB,CAAC;AAAA,IAET;AAAA,EACJ,GACMJ,KAAgB,CAAC9B,MAAqB;AACxC,IAAAxC,IAAa;AAAA,MACT,GAAGA;AAAA,MACH,GAAGwC;AAAA,IACf;AAAA,EACI,GAQMiD,KAAU;AAAA,IACZ,SAAS;AAAA,MACL,UAAAlN;AAAA,MACA,YAAAD;AAAA,MACA,eAAAN;AAAA,MACA,cAAAK;AAAA,MACA,UAAApiD;AAAA,MACA,YAAAouD;AAAA,MACA,YAAAvD;AAAA,MACA,qBAAAC;AAAA,MACA,aAAA6D;AAAA,MACA,WAAA7B;AAAA,MACA,WAAAvB;AAAA,MACA,WAAAZ;AAAA,MACA,gBAAAM;AAAA,MACA,mBAAAqD;AAAA,MACA,YAAA7C;AAAA,MACA,gBAAAsB;AAAA,MACA,QAAAiC;AAAA,MACA,qBA1BoB,MAAM5sB,GAAW0nB,EAAS,aAAa,KAC/DA,EAAS,cAAa,EAAG,KAAK,CAAC5vD,MAAW;AACtC,QAAAioD,GAAMjoD,GAAQ4vD,EAAS,YAAY,GACnCS,EAAU,MAAM,KAAK;AAAA,UACjB,WAAW;AAAA,QAC3B,CAAa;AAAA,MACL,CAAC;AAAA,MAqBG,kBAAAsC;AAAA,MACA,cAAA+B;AAAA,MACA,WAAArE;AAAA,MACA,iBAAA1D;AAAA,MACA,IAAI,UAAU;AACV,eAAOxB;AAAA,MACX;AAAA,MACA,IAAI,cAAc;AACd,eAAO4E;AAAA,MACX;AAAA,MACA,IAAI,SAAS;AACT,eAAOC;AAAA,MACX;AAAA,MACA,IAAI,OAAOrvD,GAAO;AACd,QAAAqvD,IAASrvD;AAAA,MACb;AAAA,MACA,IAAI,iBAAiB;AACjB,eAAOmvD;AAAA,MACX;AAAA,MACA,IAAI,SAAS;AACT,eAAOjL;AAAA,MACX;AAAA,MACA,IAAI,OAAOlkD,GAAO;AACd,QAAAkkD,IAASlkD;AAAA,MACb;AAAA,MACA,IAAI,aAAa;AACb,eAAOkvD;AAAA,MACX;AAAA,MACA,IAAI,WAAW;AACX,eAAOD;AAAA,MACX;AAAA,MACA,IAAI,SAASjvD,GAAO;AAChB,QAAAivD,IAAW;AAAA,UACP,GAAGA;AAAA,UACH,GAAGjvD;AAAA,QACvB;AAAA,MACY;AAAA,IACZ;AAAA,IACQ,WAAA2nD;AAAA,IACA,SAAAP;AAAA,IACA,UAAAK;AAAA,IACA,cAAAF;AAAA,IACA,OAAAP;AAAA,IACA,UAAA5f;AAAA,IACA,WAAA6f;AAAA,IACA,OAAAK;AAAA,IACA,YAAAD;AAAA,IACA,aAAAF;AAAA,IACA,YAAAK;AAAA,IACA,UAAAriD;AAAA,IACA,UAAAuiD;AAAA,IACA,eAAAR;AAAA,EACR;AACI,SAAO;AAAA,IACH,GAAGyN;AAAA,IACH,aAAaA;AAAA,EACrB;AACA;AAkVA,SAASC,GAAQ93D,IAAQ,IAAI;AACzB,QAAM+3D,IAAe/7D,GAAM,OAAO,MAAS,GACrCg8D,IAAUh8D,GAAM,OAAO,MAAS,GAChC,CAACyqD,GAAWO,CAAe,IAAIhrD,GAAM,SAAS;AAAA,IAChD,SAAS;AAAA,IACT,cAAc;AAAA,IACd,WAAWyuC,GAAWzqC,EAAM,aAAa;AAAA,IACzC,aAAa;AAAA,IACb,cAAc;AAAA,IACd,oBAAoB;AAAA,IACpB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,aAAa,CAAA;AAAA,IACb,eAAe,CAAA;AAAA,IACf,kBAAkB,CAAA;AAAA,IAClB,QAAQA,EAAM,UAAU,CAAA;AAAA,IACxB,UAAUA,EAAM,YAAY;AAAA,IAC5B,SAAS;AAAA,IACT,eAAeyqC,GAAWzqC,EAAM,aAAa,IACvC,SACAA,EAAM;AAAA,EACpB,CAAK;AACD,MAAI,CAAC+3D,EAAa;AACd,QAAI/3D,EAAM;AACN,MAAA+3D,EAAa,UAAU;AAAA,QACnB,GAAG/3D,EAAM;AAAA,QACT,WAAAymD;AAAA,MAChB,GACgBzmD,EAAM,iBAAiB,CAACyqC,GAAWzqC,EAAM,aAAa,KACtDA,EAAM,YAAY,MAAMA,EAAM,eAAeA,EAAM,YAAY;AAAA,SAGlE;AACD,YAAM,EAAE,aAAA6mD,GAAa,GAAGzqB,EAAI,IAAK81B,GAAkBlyD,CAAK;AACxD,MAAA+3D,EAAa,UAAU;AAAA,QACnB,GAAG37B;AAAA,QACH,WAAAqqB;AAAA,MAChB;AAAA,IACQ;AAEJ,QAAMxlD,IAAU82D,EAAa,QAAQ;AACrC,SAAA92D,EAAQ,WAAWjB,GACnBm0C,GAA0B,MAAM;AAC5B,UAAM1jB,IAAMxvB,EAAQ,WAAW;AAAA,MAC3B,WAAWA,EAAQ;AAAA,MACnB,UAAU,MAAM+lD,EAAgB,EAAE,GAAG/lD,EAAQ,WAAU,CAAE;AAAA,MACzD,cAAc;AAAA,IAC1B,CAAS;AACD,WAAA+lD,EAAgB,CAACh/C,OAAU;AAAA,MACvB,GAAGA;AAAA,MACH,SAAS;AAAA,IACrB,EAAU,GACF/G,EAAQ,WAAW,UAAU,IACtBwvB;AAAA,EACX,GAAG,CAACxvB,CAAO,CAAC,GACZjF,GAAM,UAAU,MAAMiF,EAAQ,aAAajB,EAAM,QAAQ,GAAG,CAACiB,GAASjB,EAAM,QAAQ,CAAC,GACrFhE,GAAM,UAAU,MAAM;AAClB,IAAIgE,EAAM,SACNiB,EAAQ,SAAS,OAAOjB,EAAM,OAE9BA,EAAM,mBACNiB,EAAQ,SAAS,iBAAiBjB,EAAM;AAAA,EAEhD,GAAG,CAACiB,GAASjB,EAAM,MAAMA,EAAM,cAAc,CAAC,GAC9ChE,GAAM,UAAU,MAAM;AAClB,IAAIgE,EAAM,WACNiB,EAAQ,WAAWjB,EAAM,MAAM,GAC/BiB,EAAQ,YAAW;AAAA,EAE3B,GAAG,CAACA,GAASjB,EAAM,MAAM,CAAC,GAC1BhE,GAAM,UAAU,MAAM;AAClB,IAAAgE,EAAM,oBACFiB,EAAQ,UAAU,MAAM,KAAK;AAAA,MACzB,QAAQA,EAAQ,UAAS;AAAA,IACzC,CAAa;AAAA,EACT,GAAG,CAACA,GAASjB,EAAM,gBAAgB,CAAC,GACpChE,GAAM,UAAU,MAAM;AAClB,QAAIiF,EAAQ,gBAAgB,SAAS;AACjC,YAAMkyB,IAAUlyB,EAAQ,UAAS;AACjC,MAAIkyB,MAAYszB,EAAU,WACtBxlD,EAAQ,UAAU,MAAM,KAAK;AAAA,QACzB,SAAAkyB;AAAA,MACpB,CAAiB;AAAA,IAET;AAAA,EACJ,GAAG,CAAClyB,GAASwlD,EAAU,OAAO,CAAC,GAC/BzqD,GAAM,UAAU,MAAM;AAClB,QAAIgO;AACJ,IAAIhK,EAAM,UAAU,CAACynD,GAAUznD,EAAM,QAAQg4D,EAAQ,OAAO,KACxD/2D,EAAQ,OAAOjB,EAAM,QAAQ;AAAA,MACzB,eAAe;AAAA,MACf,GAAGiB,EAAQ,SAAS;AAAA,IACpC,CAAa,GACM,GAAA+I,IAAK/I,EAAQ,SAAS,kBAAkB,QAAQ+I,MAAO,WAAkBA,EAAG,eAC/E/I,EAAQ,UAAS,GAErB+2D,EAAQ,UAAUh4D,EAAM,QACxBgnD,EAAgB,CAAChV,OAAW,EAAE,GAAGA,EAAK,EAAG,KAGzC/wC,EAAQ,oBAAmB;AAAA,EAEnC,GAAG,CAACA,GAASjB,EAAM,MAAM,CAAC,GAC1BhE,GAAM,UAAU,MAAM;AAClB,IAAKiF,EAAQ,OAAO,UAChBA,EAAQ,UAAS,GACjBA,EAAQ,OAAO,QAAQ,KAEvBA,EAAQ,OAAO,UACfA,EAAQ,OAAO,QAAQ,IACvBA,EAAQ,UAAU,MAAM,KAAK,EAAE,GAAGA,EAAQ,YAAY,IAE1DA,EAAQ,iBAAgB;AAAA,EAC5B,CAAC,GACD82D,EAAa,QAAQ,YAAY/7D,GAAM,QAAQ,MAAMwqD,GAAkBC,GAAWxlD,CAAO,GAAG,CAACA,GAASwlD,CAAS,CAAC,GACzGsR,EAAa;AACxB;AC/2FA,IAAIptB,KAAQ;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAYD,GAAM,OAAO,CAACE,GAAWhlC,MAAS;AAChD,QAAM2J,IAAOZ,gBAAAA,GAAW,aAAa/I,CAAI,EAAE,GACrC8hB,IAAO3rB,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACrD,UAAM,EAAE,SAAAoN,GAAS,GAAGyuB,EAAc,IAAK9qC,GACjCsc,IAAOD,IAAU7M,IAAO3J;AAC9B,WAAI,OAAO,SAAW,QACpB,OAAO,OAAO,IAAI,UAAU,CAAC,IAAI,KAEZuB,gBAAAA,EAAAA,IAAIkV,GAAM,EAAE,GAAGwuB,GAAgB,KAAK77B,GAAc;AAAA,EAC3E,CAAC;AACD,SAAA0Y,EAAK,cAAc,aAAa9hB,CAAI,IAC7B,EAAE,GAAGglC,GAAW,CAAChlC,CAAI,GAAG8hB,EAAI;AACrC,GAAG,EAAE,GC9BDswC,KAAO,SACPC,KAAQl8D,EAAM,WAAW,CAACgE,GAAOiP,MACZ7H,gBAAAA,EAAAA;AAAAA,EACrBwjC,GAAU;AAAA,EACV;AAAA,IACE,GAAG5qC;AAAA,IACH,KAAKiP;AAAA,IACL,aAAa,CAACs4B,MAAU;;AAEtB,MADeA,EAAM,OACV,QAAQ,iCAAiC,OACpDv9B,IAAAhK,EAAM,gBAAN,QAAAgK,EAAA,KAAAhK,GAAoBunC,IAChB,CAACA,EAAM,oBAAoBA,EAAM,SAAS,KAAGA,EAAM,eAAc;AAAA,IACvE;AAAA,EACN;AACA,CACC;AACD2wB,GAAM,cAAcD;AACpB,IAAIxU,KAAOyU;ACjBX,MAAMC,KAAgB1nD,GAAI,4FAA4F,GAEhHynD,KAAQl8D,EAAM,WAGlB,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA,IAACgxD,IAAA,EAAoB,KAAA7zD,GAAU,WAAWyX,GAAGm8C,GAAA,GAAiBnvD,CAAS,GAAI,GAAGhJ,EAAA,CAAO,CACtF;AACDk4D,GAAM,cAAcE,GAAoB;ACNxC,MAAMC,KAAOpO,IASPqO,KAAmBt8D,EAAM,cAAqC,EAA2B,GAEzFu8D,KAAY,CAGhB;AAAA,EACA,GAAGv4D;AACL,MAEIoH,gBAAAA,EAAAA,IAACkxD,GAAiB,UAAjB,EAA0B,OAAO,EAAE,MAAMt4D,EAAM,KAAA,GAC9C,UAAAoH,gBAAAA,EAAAA,IAAC0iD,IAAA,EAAY,GAAG9pD,GAAO,GACzB,GAIEw4D,KAAe,MAAM;AACzB,QAAMC,IAAez8D,EAAM,WAAWs8D,EAAgB,GAChDI,IAAc18D,EAAM,WAAW28D,EAAe,GAC9C,EAAE,eAAAvO,GAAe,WAAA3D,EAAA,IAAcuD,GAAA,GAE/BT,IAAaa,EAAcqO,EAAa,MAAMhS,CAAS;AAE7D,MAAI,CAACgS;AACH,UAAM,IAAI,MAAM,gDAAgD;AAGlE,QAAM,EAAE,IAAA54B,MAAO64B;AAEf,SAAO;AAAA,IACL,IAAA74B;AAAA,IACA,MAAM44B,EAAa;AAAA,IACnB,YAAY,GAAG54B,CAAE;AAAA,IACjB,mBAAmB,GAAGA,CAAE;AAAA,IACxB,eAAe,GAAGA,CAAE;AAAA,IACpB,GAAG0pB;AAAA,EAAA;AAEP,GAMMoP,KAAkB38D,EAAM,cAAoC,EAA0B,GAEtF48D,KAAW58D,EAAM;AAAA,EACrB,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAAQ;AAChC,UAAMs7B,IAAK7jC,EAAM,MAAA;AAEjB,iCACG28D,GAAgB,UAAhB,EAAyB,OAAO,EAAE,IAAA94B,KACjC,UAAAz4B,gBAAAA,EAAAA,IAAC,OAAA,EAAI,KAAA7C,GAAU,WAAWyX,GAAG,aAAahT,CAAS,GAAI,GAAGhJ,GAAO,GACnE;AAAA,EAEJ;AACF;AACA44D,GAAS,cAAc;AAEvB,MAAMC,KAAY78D,EAAM,WAGtB,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAAQ;AAClC,QAAM,EAAE,OAAAnH,GAAO,YAAA07D,EAAA,IAAeN,GAAA;AAE9B,SAAOpxD,gBAAAA,EAAAA,IAAC8wD,IAAA,EAAM,KAAA3zD,GAAU,WAAWyX,GAAG5e,KAAS,oBAAoB4L,CAAS,GAAG,SAAS8vD,GAAa,GAAG94D,EAAA,CAAO;AACjH,CAAC;AACD64D,GAAU,cAAc;AAExB,MAAME,KAAc/8D,EAAM;AAAA,EACxB,CAAC,EAAE,GAAGgE,EAAA,GAASuE,MAAQ;AACrB,UAAM,EAAE,OAAAnH,GAAO,YAAA07D,GAAY,mBAAAE,GAAmB,eAAAC,EAAA,IAAkBT,GAAA;AAEhE,WACEpxD,gBAAAA,EAAAA;AAAAA,MAACoI;AAAAA,MAAA;AAAA,QACC,KAAAjL;AAAA,QACA,IAAIu0D;AAAA,QACJ,oBAAmB17D,IAAiC,GAAG47D,CAAiB,IAAIC,CAAa,KAA9D,GAAGD,CAAiB;AAAA,QAC/C,gBAAc,CAAC,CAAC57D;AAAA,QACf,GAAG4C;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AACA+4D,GAAY,cAAc;AAE1B,MAAMG,KAAkBl9D,EAAM;AAAA,EAC5B,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAAQ;AAChC,UAAM,EAAE,mBAAAy0D,EAAA,IAAsBR,GAAA;AAE9B,WAAOpxD,gBAAAA,EAAAA,IAAC,KAAA,EAAE,KAAA7C,GAAU,IAAIy0D,GAAmB,WAAWh9C,GAAG,iCAAiChT,CAAS,GAAI,GAAGhJ,EAAA,CAAO;AAAA,EACnH;AACF;AACAk5D,GAAgB,cAAc;AAE9B,MAAMC,KAAcn9D,EAAM;AAAA,EACxB,CAAC,EAAE,WAAAgN,GAAW,UAAAjC,GAAU,GAAG/G,EAAA,GAASuE,MAAQ;AAC1C,UAAM,EAAE,OAAAnH,GAAO,eAAA67D,EAAA,IAAkBT,GAAA,GAC3BvrC,IAAO7vB,IAAQ,OAAOA,KAAA,gBAAAA,EAAO,OAAO,IAAI2J;AAE9C,WAAKkmB,IAKH7lB,gBAAAA,EAAAA,IAAC,KAAA,EAAE,KAAA7C,GAAU,IAAI00D,GAAe,WAAWj9C,GAAG,wCAAwChT,CAAS,GAAI,GAAGhJ,GACnG,UAAAitB,EAAA,CACH,IANO;AAAA,EAQX;AACF;AACAksC,GAAY,cAAc;AAAA;ACzH1B,SAASvqD,GAAWC,GAAW;AAC7B,QAAMC,IAA4BC,gBAAAA,GAAgBF,CAAS,GACrDG,IAAQhT,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACtD,UAAM,EAAE,UAAAlI,GAAU,GAAGmI,EAAS,IAAKlP,GAC7BmP,IAAgBnT,EAAM,SAAS,QAAQ+K,CAAQ,GAC/CqI,IAAYD,EAAc,KAAKE,EAAW;AAChD,QAAID,GAAW;AACb,YAAME,IAAaF,EAAU,MAAM,UAC7BG,IAAcJ,EAAc,IAAI,CAACpJ,MACjCA,MAAUqJ,IACRpT,EAAM,SAAS,MAAMsT,CAAU,IAAI,IAAUtT,EAAM,SAAS,KAAK,IAAI,IAClEA,EAAM,eAAesT,CAAU,IAAIA,EAAW,MAAM,WAAW,OAE/DvJ,CAEV;AACD,aAAuBqB,gBAAAA,EAAAA,IAAI0H,GAAW,EAAE,GAAGI,GAAW,KAAKD,GAAc,UAAUjT,EAAM,eAAesT,CAAU,IAAItT,EAAM,aAAasT,GAAY,QAAQC,CAAW,IAAI,MAAM;AAAA,IACpL;AACA,WAAuBnI,gBAAAA,EAAAA,IAAI0H,GAAW,EAAE,GAAGI,GAAW,KAAKD,GAAc,UAAAlI,GAAU;AAAA,EACrF,CAAC;AACD,SAAAiI,EAAM,cAAc,GAAGH,CAAS,SACzBG;AACT;AAAA;AAGA,SAASD,GAAgBF,GAAW;AAClC,QAAMC,IAAY9S,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AAC1D,UAAM,EAAE,UAAAlI,GAAU,GAAGmI,EAAS,IAAKlP;AACnC,QAAIhE,EAAM,eAAe+K,CAAQ,GAAG;AAClC,YAAM0I,IAAcC,GAAc3I,CAAQ,GACpC4I,IAASC,GAAWV,GAAWnI,EAAS,KAAK;AACnD,aAAIA,EAAS,SAAS/K,EAAM,aAC1B2T,EAAO,MAAMV,IAAed,GAAYc,GAAcQ,CAAW,IAAIA,IAEhEzT,EAAM,aAAa+K,GAAU4I,CAAM;AAAA,IAC5C;AACA,WAAO3T,EAAM,SAAS,MAAM+K,CAAQ,IAAI,IAAI/K,EAAM,SAAS,KAAK,IAAI,IAAI;AAAA,EAC1E,CAAC;AACD,SAAA8S,EAAU,cAAc,GAAGD,CAAS,cAC7BC;AACT;AACA,IAAIe,KAAuB,OAAO,iBAAiB;AAWnD,SAASR,GAAYtJ,GAAO;AAC1B,SAAO/J,EAAM,eAAe+J,CAAK,KAAK,OAAOA,EAAM,QAAS,cAAc,eAAeA,EAAM,QAAQA,EAAM,KAAK,cAAc8J;AAClI;AACA,SAASD,GAAWV,GAAWY,GAAY;AACzC,QAAMC,IAAgB,EAAE,GAAGD,EAAU;AACrC,aAAWpL,KAAYoL,GAAY;AACjC,UAAME,IAAgBd,EAAUxK,CAAQ,GAClCuL,IAAiBH,EAAWpL,CAAQ;AAE1C,IADkB,WAAW,KAAKA,CAAQ,IAEpCsL,KAAiBC,IACnBF,EAAcrL,CAAQ,IAAI,IAAInH,MAAS;AACrC,YAAMsL,IAASoH,EAAe,GAAG1S,CAAI;AACrC,aAAAyS,EAAc,GAAGzS,CAAI,GACdsL;AAAA,IACT,IACSmH,MACTD,EAAcrL,CAAQ,IAAIsL,KAEnBtL,MAAa,UACtBqL,EAAcrL,CAAQ,IAAI,EAAE,GAAGsL,GAAe,GAAGC,EAAc,IACtDvL,MAAa,gBACtBqL,EAAcrL,CAAQ,IAAI,CAACsL,GAAeC,CAAc,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,EAEtF;AACA,SAAO,EAAE,GAAGf,GAAW,GAAGa,EAAa;AACzC;AACA,SAASL,GAAcvN,GAAS;;AAC9B,MAAI0B,KAASmG,IAAA,OAAO,yBAAyB7H,EAAQ,OAAO,KAAK,MAApD,gBAAA6H,EAAuD,KAChEkG,IAAUrM,KAAU,oBAAoBA,KAAUA,EAAO;AAC7D,SAAIqM,IACK/N,EAAQ,OAEjB0B,KAASsM,IAAA,OAAO,yBAAyBhO,GAAS,KAAK,MAA9C,gBAAAgO,EAAiD,KAC1DD,IAAUrM,KAAU,oBAAoBA,KAAUA,EAAO,gBACrDqM,IACK/N,EAAQ,MAAM,MAEhBA,EAAQ,MAAM,OAAOA,EAAQ;AACtC;ACxFA,SAASi3D,GAAiB/4D,GAAM;AAC9B,QAAMg5D,IAAgBh5D,IAAO,sBACvB,CAACi5D,GAAyBC,CAAqB,IAAIxxB,GAAmBsxB,CAAa,GACnF,CAACG,GAAwBC,CAAoB,IAAIH;AAAA,IACrDD;AAAA,IACA,EAAE,eAAe,EAAE,SAAS,KAAI,GAAI,SAAyB,oBAAI,IAAG,EAAE;AAAA,EAC1E,GACQK,IAAqB,CAAC15D,MAAU;AACpC,UAAM,EAAE,OAAAqoC,GAAO,UAAAthC,EAAQ,IAAK/G,GACtBuE,IAAMvI,GAAM,OAAO,IAAI,GACvB29D,IAAU39D,GAAM,OAAuB,oBAAI,IAAG,CAAE,EAAE;AACxD,WAAuBoL,gBAAAA,EAAAA,IAAIoyD,GAAwB,EAAE,OAAAnxB,GAAO,SAAAsxB,GAAS,eAAep1D,GAAK,UAAAwC,GAAU;AAAA,EACrG;AACA,EAAA2yD,EAAmB,cAAcL;AACjC,QAAMO,IAAuBv5D,IAAO,kBAC9Bw5D,IAAqBjrD,gBAAAA,GAAWgrD,CAAoB,GACpDE,IAAiB99D,GAAM;AAAA,IAC3B,CAACgE,GAAOiP,MAAiB;AACvB,YAAM,EAAE,OAAAo5B,GAAO,UAAAthC,EAAQ,IAAK/G,GACtBjB,IAAU06D,EAAqBG,GAAsBvxB,CAAK,GAC1DkE,IAAe/9B,GAAgBS,GAAclQ,EAAQ,aAAa;AACxE,aAAuBqI,gBAAAA,EAAAA,IAAIyyD,GAAoB,EAAE,KAAKttB,GAAc,UAAAxlC,EAAQ,CAAE;AAAA,IAChF;AAAA,EACJ;AACE,EAAA+yD,EAAe,cAAcF;AAC7B,QAAMG,IAAiB15D,IAAO,sBACxB25D,IAAiB,8BACjBC,IAAyBrrD,gBAAAA,GAAWmrD,CAAc,GAClDG,IAAqBl+D,GAAM;AAAA,IAC/B,CAACgE,GAAOiP,MAAiB;AACvB,YAAM,EAAE,OAAAo5B,GAAO,UAAAthC,GAAU,GAAGozD,EAAQ,IAAKn6D,GACnCuE,IAAMvI,GAAM,OAAO,IAAI,GACvBuwC,IAAe/9B,GAAgBS,GAAc1K,CAAG,GAChDxF,IAAU06D,EAAqBM,GAAgB1xB,CAAK;AAC1DrsC,aAAAA,GAAM,UAAU,OACd+C,EAAQ,QAAQ,IAAIwF,GAAK,EAAE,KAAAA,GAAK,GAAG41D,GAAU,GACtC,MAAM,KAAKp7D,EAAQ,QAAQ,OAAOwF,CAAG,EAC7C,GACsB6C,gBAAAA,MAAI6yD,GAAwB,EAAO,CAACD,CAAc,GAAG,IAAM,KAAKztB,GAAc,UAAAxlC,GAAU;AAAA,IACjH;AAAA,EACJ;AACE,EAAAmzD,EAAmB,cAAcH;AACjC,WAASK,EAAc/xB,GAAO;AAC5B,UAAMtpC,IAAU06D,EAAqBp5D,IAAO,sBAAsBgoC,CAAK;AAWvE,WAViBrsC,GAAM,YAAY,MAAM;AACvC,YAAMq+D,IAAiBt7D,EAAQ,cAAc;AAC7C,UAAI,CAACs7D,EAAgB,QAAO,CAAA;AAC5B,YAAMC,IAAe,MAAM,KAAKD,EAAe,iBAAiB,IAAIL,CAAc,GAAG,CAAC;AAKtF,aAJc,MAAM,KAAKj7D,EAAQ,QAAQ,QAAQ,EACtB;AAAA,QACzB,CAACtD,GAAGE,MAAM2+D,EAAa,QAAQ7+D,EAAE,IAAI,OAAO,IAAI6+D,EAAa,QAAQ3+D,EAAE,IAAI,OAAO;AAAA,MAC1F;AAAA,IAEI,GAAG,CAACoD,EAAQ,eAAeA,EAAQ,OAAO,CAAC;AAAA,EAE7C;AACA,SAAO;AAAA,IACL,EAAE,UAAU26D,GAAoB,MAAMI,GAAgB,UAAUI,EAAkB;AAAA,IAClFE;AAAA,IACAb;AAAA,EACJ;AACA;AClEA,IAAIgB,KAAmBv+D,EAAM,cAAc,MAAM;AAKjD,SAASw+D,GAAaC,GAAU;AAC9B,QAAMC,IAAY1+D,EAAM,WAAWu+D,EAAgB;AACnD,SAAOE,KAAYC,KAAa;AAClC;ACGA,IAAIC,KAAc,iCACdnsB,KAAgB,EAAE,SAAS,IAAO,YAAY,GAAI,GAClDosB,KAAa,oBACb,CAACC,IAAYT,IAAeb,EAAqB,IAAIH,GAAiBwB,EAAU,GAChF,CAACE,IAA+BC,EAA2B,IAAIhzB;AAAAA,EACjE6yB;AAAAA,EACA,CAACrB,EAAqB;AACxB,GACI,CAACyB,IAAqBC,EAAqB,IAAIH,GAA8BF,EAAU,GACvFM,KAAmBl/D,EAAM;AAAA,EAC3B,CAACgE,GAAOiP,MACiB7H,gBAAAA,MAAIyzD,GAAW,UAAU,EAAE,OAAO76D,EAAM,yBAAyB,UAA0BoH,gBAAAA,MAAIyzD,GAAW,MAAM,EAAE,OAAO76D,EAAM,yBAAyB,UAA0BoH,gBAAAA,EAAAA,IAAI+zD,IAAsB,EAAE,GAAGn7D,GAAO,KAAKiP,GAAc,EAAC,CAAE,EAAC,CAAE;AAE5Q;AACAisD,GAAiB,cAAcN;AAC/B,IAAIO,KAAuBn/D,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACnE,QAAM;AAAA,IACJ,yBAAAmsD;AAAA,IACA,aAAAC;AAAA,IACA,MAAA1sB,IAAO;AAAA,IACP,KAAA2sB;AAAA,IACA,kBAAkBC;AAAA,IAClB,yBAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,cAAAC;AAAA,IACA,2BAAAC,IAA4B;AAAA,IAC5B,GAAGC;AAAA,EACP,IAAM57D,GACEuE,IAAMvI,EAAM,OAAO,IAAI,GACvBuwC,IAAe/9B,GAAgBS,GAAc1K,CAAG,GAChDg2C,IAAYigB,GAAac,CAAG,GAC5B,CAACO,GAAkBC,CAAmB,IAAInyB,GAAqB;AAAA,IACnE,MAAM4xB;AAAA,IACN,aAAaC,KAA2B;AAAA,IACxC,UAAUC;AAAA,IACV,QAAQb;AAAAA,EACZ,CAAG,GACK,CAACmB,GAAkBC,CAAmB,IAAIhgE,EAAM,SAAS,EAAK,GAC9DigE,IAAmBhxB,GAAeywB,CAAY,GAC9CQ,IAAW9B,GAAcgB,CAAuB,GAChDe,IAAkBngE,EAAM,OAAO,EAAK,GACpC,CAACogE,GAAqBC,CAAsB,IAAIrgE,EAAM,SAAS,CAAC;AACtE,SAAAA,EAAM,UAAU,MAAM;AACpB,UAAM6J,IAAOtB,EAAI;AACjB,QAAIsB;AACF,aAAAA,EAAK,iBAAiB80D,IAAasB,CAAgB,GAC5C,MAAMp2D,EAAK,oBAAoB80D,IAAasB,CAAgB;AAAA,EAEvE,GAAG,CAACA,CAAgB,CAAC,GACE70D,gBAAAA,EAAAA;AAAAA,IACrB4zD;AAAA,IACA;AAAA,MACE,OAAOI;AAAA,MACP,aAAAC;AAAA,MACA,KAAK9gB;AAAA,MACL,MAAA5L;AAAA,MACA,kBAAAktB;AAAA,MACA,aAAa7/D,EAAM;AAAA,QACjB,CAACsgE,MAAcR,EAAoBQ,CAAS;AAAA,QAC5C,CAACR,CAAmB;AAAA,MAC5B;AAAA,MACM,gBAAgB9/D,EAAM,YAAY,MAAMggE,EAAoB,EAAI,GAAG,EAAE;AAAA,MACrE,oBAAoBhgE,EAAM;AAAA,QACxB,MAAMqgE,EAAuB,CAACE,MAAcA,IAAY,CAAC;AAAA,QACzD,CAAA;AAAA,MACR;AAAA,MACM,uBAAuBvgE,EAAM;AAAA,QAC3B,MAAMqgE,EAAuB,CAACE,MAAcA,IAAY,CAAC;AAAA,QACzD,CAAA;AAAA,MACR;AAAA,MACM,UAA0Bn1D,gBAAAA,EAAAA;AAAAA,QACxBwjC,GAAU;AAAA,QACV;AAAA,UACE,UAAUmxB,KAAoBK,MAAwB,IAAI,KAAK;AAAA,UAC/D,oBAAoBf;AAAA,UACpB,GAAGO;AAAA,UACH,KAAKrvB;AAAA,UACL,OAAO,EAAE,SAAS,QAAQ,GAAGvsC,EAAM,MAAK;AAAA,UACxC,aAAamnC,GAAqBnnC,EAAM,aAAa,MAAM;AACzD,YAAAm8D,EAAgB,UAAU;AAAA,UAC5B,CAAC;AAAA,UACD,SAASh1B,GAAqBnnC,EAAM,SAAS,CAACunC,MAAU;AACtD,kBAAMi1B,IAAkB,CAACL,EAAgB;AACzC,gBAAI50B,EAAM,WAAWA,EAAM,iBAAiBi1B,KAAmB,CAACT,GAAkB;AAChF,oBAAMU,IAAkB,IAAI,YAAY9B,IAAansB,EAAa;AAElE,kBADAjH,EAAM,cAAc,cAAck1B,CAAe,GAC7C,CAACA,EAAgB,kBAAkB;AACrC,sBAAMhtC,IAAQysC,IAAW,OAAO,CAACp+D,MAASA,EAAK,SAAS,GAClD4+D,IAAajtC,EAAM,KAAK,CAAC3xB,MAASA,EAAK,MAAM,GAC7C6+D,IAAcltC,EAAM,KAAK,CAAC3xB,MAASA,EAAK,OAAO+9D,CAAgB,GAI/De,IAHiB,CAACF,GAAYC,GAAa,GAAGltC,CAAK,EAAE;AAAA,kBACzD;AAAA,gBAClB,EACsD,IAAI,CAAC3xB,MAASA,EAAK,IAAI,OAAO;AACpEkyC,gBAAAA,GAAW4sB,GAAgBjB,CAAyB;AAAA,cACtD;AAAA,YACF;AACA,YAAAQ,EAAgB,UAAU;AAAA,UAC5B,CAAC;AAAA,UACD,QAAQh1B,GAAqBnnC,EAAM,QAAQ,MAAMg8D,EAAoB,EAAK,CAAC;AAAA,QACrF;AAAA,MACA;AAAA,IACA;AAAA,EACA;AACA,CAAC,GACGa,KAAY,wBACZC,KAAuB9gE,EAAM;AAAA,EAC/B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM;AAAA,MACJ,yBAAAmsD;AAAA,MACA,WAAA2B,IAAY;AAAA,MACZ,QAAAC,IAAS;AAAA,MACT,WAAAV;AAAA,MACA,UAAAv1D;AAAA,MACA,GAAGk2D;AAAA,IACT,IAAQj9D,GACEk9D,IAAS7zB,GAAK,GACdxJ,IAAKy8B,KAAaY,GAClBn+D,IAAUk8D,GAAsB4B,IAAWzB,CAAuB,GAClE+B,IAAmBp+D,EAAQ,qBAAqB8gC,GAChDq8B,IAAW9B,GAAcgB,CAAuB,GAChD,EAAE,oBAAAgC,GAAoB,uBAAAC,GAAuB,kBAAAxB,EAAgB,IAAK98D;AACxE,WAAA/C,EAAM,UAAU,MAAM;AACpB,UAAI+gE;AACF,eAAAK,EAAkB,GACX,MAAMC,EAAqB;AAAA,IAEtC,GAAG,CAACN,GAAWK,GAAoBC,CAAqB,CAAC,GAClCj2D,gBAAAA,EAAAA;AAAAA,MACrByzD,GAAW;AAAA,MACX;AAAA,QACE,OAAOO;AAAA,QACP,IAAAv7B;AAAA,QACA,WAAAk9B;AAAA,QACA,QAAAC;AAAA,QACA,UAA0B51D,gBAAAA,EAAAA;AAAAA,UACxBwjC,GAAU;AAAA,UACV;AAAA,YACE,UAAUuyB,IAAmB,IAAI;AAAA,YACjC,oBAAoBp+D,EAAQ;AAAA,YAC5B,GAAGk+D;AAAA,YACH,KAAKhuD;AAAA,YACL,aAAak4B,GAAqBnnC,EAAM,aAAa,CAACunC,MAAU;AAC9D,cAAKw1B,IACAh+D,EAAQ,YAAY8gC,CAAE,IADX0H,EAAM,eAAc;AAAA,YAEtC,CAAC;AAAA,YACD,SAASJ,GAAqBnnC,EAAM,SAAS,MAAMjB,EAAQ,YAAY8gC,CAAE,CAAC;AAAA,YAC1E,WAAWsH,GAAqBnnC,EAAM,WAAW,CAACunC,MAAU;AAC1D,kBAAIA,EAAM,QAAQ,SAASA,EAAM,UAAU;AACzC,gBAAAxoC,EAAQ,eAAc;AACtB;AAAA,cACF;AACA,kBAAIwoC,EAAM,WAAWA,EAAM,cAAe;AAC1C,oBAAM+1B,IAAcC,GAAeh2B,GAAOxoC,EAAQ,aAAaA,EAAQ,GAAG;AAC1E,kBAAIu+D,MAAgB,QAAQ;AAC1B,oBAAI/1B,EAAM,WAAWA,EAAM,WAAWA,EAAM,UAAUA,EAAM,SAAU;AACtE,gBAAAA,EAAM,eAAc;AAEpB,oBAAIq1B,IADUV,IAAW,OAAO,CAACp+D,MAASA,EAAK,SAAS,EAC7B,IAAI,CAACA,MAASA,EAAK,IAAI,OAAO;AACzD,oBAAIw/D,MAAgB,OAAQ,CAAAV,EAAe,QAAO;AAAA,yBACzCU,MAAgB,UAAUA,MAAgB,QAAQ;AACzD,kBAAIA,MAAgB,UAAQV,EAAe,QAAO;AAClD,wBAAMY,IAAeZ,EAAe,QAAQr1B,EAAM,aAAa;AAC/D,kBAAAq1B,IAAiB79D,EAAQ,OAAO0+D,GAAUb,GAAgBY,IAAe,CAAC,IAAIZ,EAAe,MAAMY,IAAe,CAAC;AAAA,gBACrH;AACA,2BAAW,MAAMxtB,GAAW4sB,CAAc,CAAC;AAAA,cAC7C;AAAA,YACF,CAAC;AAAA,YACD,UAAU,OAAO71D,KAAa,aAAaA,EAAS,EAAE,kBAAAo2D,GAAkB,YAAYtB,KAAoB,KAAI,CAAE,IAAI90D;AAAA,UAC9H;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF;AACA+1D,GAAqB,cAAcD;AACnC,IAAIa,KAA0B;AAAA,EAC5B,WAAW;AAAA,EACX,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,KAAK;AACP;AACA,SAASC,GAAqBr5D,GAAKg3D,GAAK;AACtC,SAAIA,MAAQ,QAAch3D,IACnBA,MAAQ,cAAc,eAAeA,MAAQ,eAAe,cAAcA;AACnF;AACA,SAASi5D,GAAeh2B,GAAO8zB,GAAaC,GAAK;AAC/C,QAAMh3D,IAAMq5D,GAAqBp2B,EAAM,KAAK+zB,CAAG;AAC/C,MAAI,EAAAD,MAAgB,cAAc,CAAC,aAAa,YAAY,EAAE,SAAS/2D,CAAG,MACtE,EAAA+2D,MAAgB,gBAAgB,CAAC,WAAW,WAAW,EAAE,SAAS/2D,CAAG;AACzE,WAAOo5D,GAAwBp5D,CAAG;AACpC;AACA,SAAS0rC,GAAWS,GAAYmtB,IAAgB,IAAO;AACrD,QAAMC,IAA6B,SAAS;AAC5C,aAAWltB,KAAaF;AAGtB,QAFIE,MAAcktB,MAClBltB,EAAU,MAAM,EAAE,eAAAitB,GAAe,GAC7B,SAAS,kBAAkBC,GAA4B;AAE/D;AACA,SAASJ,GAAUj5C,GAAOs5C,GAAY;AACpC,SAAOt5C,EAAM,IAAI,CAACpC,GAAGnY,MAAUua,GAAOs5C,IAAa7zD,KAASua,EAAM,MAAM,CAAC;AAC3E;AACA,IAAIi/B,KAAOyX,IACP6C,KAAOjB,IChNPkB,KAAY,QACZ,CAACC,EAAkC,IAAIl2B,GAAmBi2B,IAAW;AAAA,EACvEjD;AACF,CAAC,GACGmD,KAA2BnD,GAA2B,GACtD,CAACoD,IAAcC,EAAc,IAAIH,GAAkBD,EAAS,GAC5DK,KAAOriE,EAAM;AAAA,EACf,CAACgE,GAAOiP,MAAiB;AACvB,UAAM;AAAA,MACJ,aAAAqvD;AAAA,MACA,OAAOC;AAAA,MACP,eAAAC;AAAA,MACA,cAAAlqB;AAAA,MACA,aAAA+mB,IAAc;AAAA,MACd,KAAAC;AAAA,MACA,gBAAAmD,IAAiB;AAAA,MACjB,GAAGC;AAAA,IACT,IAAQ1+D,GACEu6C,IAAYigB,GAAac,CAAG,GAC5B,CAACp4D,GAAOonC,CAAQ,IAAIX,GAAqB;AAAA,MAC7C,MAAM40B;AAAA,MACN,UAAUC;AAAA,MACV,aAAalqB,KAAgB;AAAA,MAC7B,QAAQ0pB;AAAA,IACd,CAAK;AACD,WAAuB52D,gBAAAA,EAAAA;AAAAA,MACrB+2D;AAAA,MACA;AAAA,QACE,OAAOG;AAAA,QACP,QAAQj1B,GAAK;AAAA,QACb,OAAAnmC;AAAA,QACA,eAAeonC;AAAA,QACf,aAAA+wB;AAAA,QACA,KAAK9gB;AAAA,QACL,gBAAAkkB;AAAA,QACA,UAA0Br3D,gBAAAA,EAAAA;AAAAA,UACxBwjC,GAAU;AAAA,UACV;AAAA,YACE,KAAK2P;AAAA,YACL,oBAAoB8gB;AAAA,YACpB,GAAGqD;AAAA,YACH,KAAKzvD;AAAA,UACjB;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF;AACAovD,GAAK,cAAcL;AACnB,IAAIW,KAAgB,YAChBC,KAAW5iE,EAAM;AAAA,EACnB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,aAAAqvD,GAAa,MAAA3vB,IAAO,IAAM,GAAGkwB,EAAS,IAAK7+D,GAC7CjB,IAAUq/D,GAAeO,IAAeL,CAAW,GACnDQ,IAAwBZ,GAAyBI,CAAW;AAClE,WAAuBl3D,gBAAAA,EAAAA;AAAAA,MACrB23D;AAAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,GAAGD;AAAA,QACH,aAAa//D,EAAQ;AAAA,QACrB,KAAKA,EAAQ;AAAA,QACb,MAAA4vC;AAAA,QACA,UAA0BvnC,gBAAAA,EAAAA;AAAAA,UACxBwjC,GAAU;AAAA,UACV;AAAA,YACE,MAAM;AAAA,YACN,oBAAoB7rC,EAAQ;AAAA,YAC5B,GAAG8/D;AAAA,YACH,KAAK5vD;AAAA,UACjB;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF;AACA2vD,GAAS,cAAcD;AACvB,IAAIne,KAAe,eACfwe,KAAchjE,EAAM;AAAA,EACtB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,aAAAqvD,GAAa,OAAAp7D,GAAO,UAAA4jD,IAAW,IAAO,GAAGpG,EAAY,IAAK1gD,GAC5DjB,IAAUq/D,GAAe5d,IAAc8d,CAAW,GAClDQ,IAAwBZ,GAAyBI,CAAW,GAC5DW,IAAYC,GAAcngE,EAAQ,QAAQmE,CAAK,GAC/Ci8D,IAAYC,GAAcrgE,EAAQ,QAAQmE,CAAK,GAC/Cm8D,IAAan8D,MAAUnE,EAAQ;AACrC,WAAuBqI,gBAAAA,EAAAA;AAAAA,MACrBk4D;AAAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,GAAGR;AAAA,QACH,WAAW,CAAChY;AAAA,QACZ,QAAQuY;AAAA,QACR,UAA0Bj4D,gBAAAA,EAAAA;AAAAA,UACxBwjC,GAAU;AAAA,UACV;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,iBAAiBy0B;AAAA,YACjB,iBAAiBF;AAAA,YACjB,cAAcE,IAAa,WAAW;AAAA,YACtC,iBAAiBvY,IAAW,KAAK;AAAA,YACjC,UAAAA;AAAA,YACA,IAAImY;AAAA,YACJ,GAAGve;AAAA,YACH,KAAKzxC;AAAA,YACL,aAAak4B,GAAqBnnC,EAAM,aAAa,CAACunC,MAAU;AAC9D,cAAI,CAACuf,KAAYvf,EAAM,WAAW,KAAKA,EAAM,YAAY,KACvDxoC,EAAQ,cAAcmE,CAAK,IAE3BqkC,EAAM,eAAc;AAAA,YAExB,CAAC;AAAA,YACD,WAAWJ,GAAqBnnC,EAAM,WAAW,CAACunC,MAAU;AAC1D,cAAI,CAAC,KAAK,OAAO,EAAE,SAASA,EAAM,GAAG,KAAGxoC,EAAQ,cAAcmE,CAAK;AAAA,YACrE,CAAC;AAAA,YACD,SAASikC,GAAqBnnC,EAAM,SAAS,MAAM;AACjD,oBAAMu/D,IAAwBxgE,EAAQ,mBAAmB;AACzD,cAAI,CAACsgE,KAAc,CAACvY,KAAYyY,KAC9BxgE,EAAQ,cAAcmE,CAAK;AAAA,YAE/B,CAAC;AAAA,UACb;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF;AACA87D,GAAY,cAAcxe;AAC1B,IAAIe,KAAe,eACfie,KAAcxjE,EAAM;AAAA,EACtB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,aAAAqvD,GAAa,OAAAp7D,GAAO,YAAA89C,GAAY,UAAAj6C,GAAU,GAAG06C,EAAY,IAAKzhD,GAChEjB,IAAUq/D,GAAe7c,IAAc+c,CAAW,GAClDW,IAAYC,GAAcngE,EAAQ,QAAQmE,CAAK,GAC/Ci8D,IAAYC,GAAcrgE,EAAQ,QAAQmE,CAAK,GAC/Cm8D,IAAan8D,MAAUnE,EAAQ,OAC/B0gE,IAA+BzjE,EAAM,OAAOqjE,CAAU;AAC5D,WAAArjE,EAAM,UAAU,MAAM;AACpB,YAAM0jE,IAAM,sBAAsB,MAAMD,EAA6B,UAAU,EAAK;AACpF,aAAO,MAAM,qBAAqBC,CAAG;AAAA,IACvC,GAAG,CAAA,CAAE,GACkBt4D,gBAAAA,EAAAA,IAAI6qC,IAAU,EAAE,SAAS+O,KAAcqe,GAAY,UAAU,CAAC,EAAE,SAAAntB,EAAO,MAAuB9qC,gBAAAA,EAAAA;AAAAA,MACnHwjC,GAAU;AAAA,MACV;AAAA,QACE,cAAcy0B,IAAa,WAAW;AAAA,QACtC,oBAAoBtgE,EAAQ;AAAA,QAC5B,MAAM;AAAA,QACN,mBAAmBkgE;AAAA,QACnB,QAAQ,CAAC/sB;AAAA,QACT,IAAIitB;AAAA,QACJ,UAAU;AAAA,QACV,GAAG1d;AAAA,QACH,KAAKxyC;AAAA,QACL,OAAO;AAAA,UACL,GAAGjP,EAAM;AAAA,UACT,mBAAmBy/D,EAA6B,UAAU,OAAO;AAAA,QAC3E;AAAA,QACQ,UAAUvtB,KAAWnrC;AAAA,MAC7B;AAAA,IACA,GAAO;AAAA,EACL;AACF;AACAy4D,GAAY,cAAcje;AAC1B,SAAS2d,GAAcS,GAAQz8D,GAAO;AACpC,SAAO,GAAGy8D,CAAM,YAAYz8D,CAAK;AACnC;AACA,SAASk8D,GAAcO,GAAQz8D,GAAO;AACpC,SAAO,GAAGy8D,CAAM,YAAYz8D,CAAK;AACnC;AACA,IAAI08D,KAAQvB,IACRwB,KAAOjB,IACPlb,KAAUsb,IACVpb,KAAU4b;ACtLd,MAAMnB,KAAOyB,IAEPlB,KAAW5iE,EAAM,WAGrB,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA;AAAAA,EAAC24D;AAAAA,EAAA;AAAA,IACC,KAAAx7D;AAAA,IACA,WAAWyX;AAAA,MACT;AAAA,MACAhT;AAAA,IAAA;AAAA,IAED,GAAGhJ;AAAA,EAAA;AACN,CACD;AACD4+D,GAAS,cAAcmB,GAAmB;AAE1C,MAAMf,KAAchjE,EAAM,WAGxB,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA;AAAAA,EAAC44D;AAAAA,EAAA;AAAA,IACC,KAAAz7D;AAAA,IACA,WAAWyX;AAAA,MACT;AAAA,MACAhT;AAAA,IAAA;AAAA,IAED,GAAGhJ;AAAA,EAAA;AACN,CACD;AACDg/D,GAAY,cAAcgB,GAAsB;AAEhD,MAAMR,KAAcxjE,EAAM,WAGxB,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA;AAAAA,EAAC64D;AAAAA,EAAA;AAAA,IACC,KAAA17D;AAAA,IACA,WAAWyX;AAAA,MACT;AAAA,MACAhT;AAAA,IAAA;AAAA,IAED,GAAGhJ;AAAA,EAAA;AACN,CACD;AACDw/D,GAAY,cAAcS,GAAsB;AChDhD,SAASC,GAAYh9D,GAAO;AAC1B,QAAMqB,IAAMvI,EAAM,OAAO,EAAE,OAAAkH,GAAO,UAAUA,GAAO;AACnD,SAAOlH,EAAM,QAAQ,OACfuI,EAAI,QAAQ,UAAUrB,MACxBqB,EAAI,QAAQ,WAAWA,EAAI,QAAQ,OACnCA,EAAI,QAAQ,QAAQrB,IAEfqB,EAAI,QAAQ,WAClB,CAACrB,CAAK,CAAC;AACZ;ACRA,SAASi9D,GAAQh+D,GAAS;AACxB,QAAM,CAACia,GAAMgkD,CAAO,IAAIpkE,EAAM,SAAS,MAAM;AAC7CwtC,SAAAA,GAAgB,MAAM;AACpB,QAAIrnC,GAAS;AACX,MAAAi+D,EAAQ,EAAE,OAAOj+D,EAAQ,aAAa,QAAQA,EAAQ,cAAc;AACpE,YAAMk+D,IAAiB,IAAI,eAAe,CAACh+C,MAAY;AAIrD,YAHI,CAAC,MAAM,QAAQA,CAAO,KAGtB,CAACA,EAAQ;AACX;AAEF,cAAMvY,IAAQuY,EAAQ,CAAC;AACvB,YAAIi+C,GACAC;AACJ,YAAI,mBAAmBz2D,GAAO;AAC5B,gBAAM02D,IAAkB12D,EAAM,eACxB22D,IAAa,MAAM,QAAQD,CAAe,IAAIA,EAAgB,CAAC,IAAIA;AACzE,UAAAF,IAAQG,EAAW,YACnBF,IAASE,EAAW;AAAA,QACtB;AACE,UAAAH,IAAQn+D,EAAQ,aAChBo+D,IAASp+D,EAAQ;AAEnB,QAAAi+D,EAAQ,EAAE,OAAAE,GAAO,QAAAC,GAAQ;AAAA,MAC3B,CAAC;AACD,aAAAF,EAAe,QAAQl+D,GAAS,EAAE,KAAK,aAAY,CAAE,GAC9C,MAAMk+D,EAAe,UAAUl+D,CAAO;AAAA,IAC/C;AACE,MAAAi+D,EAAQ,MAAM;AAAA,EAElB,GAAG,CAACj+D,CAAO,CAAC,GACLia;AACT;ACxBA,IAAIskD,KAAc,UACd,CAACC,EAAsC,IAAI54B,GAAmB24B,EAAW,GACzE,CAACE,IAAgBC,EAAgB,IAAIF,GAAoBD,EAAW,GACpEI,KAAS9kE,EAAM;AAAA,EACjB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM;AAAA,MACJ,eAAA8xD;AAAA,MACA,MAAA1gE;AAAA,MACA,SAAS2gE;AAAA,MACT,gBAAAC;AAAA,MACA,UAAA9Q;AAAA,MACA,UAAArJ;AAAA,MACA,OAAA5jD,IAAQ;AAAA,MACR,iBAAAg+D;AAAA,MACA,MAAAtJ;AAAA,MACA,GAAGuJ;AAAA,IACT,IAAQnhE,GACE,CAACohE,GAAQC,CAAS,IAAIrlE,EAAM,SAAS,IAAI,GACzCuwC,IAAe/9B,GAAgBS,GAAc,CAACpJ,MAASw7D,EAAUx7D,CAAI,CAAC,GACtEy7D,IAAmCtlE,EAAM,OAAO,EAAK,GACrDulE,IAAgBH,IAASxJ,KAAQ,CAAC,CAACwJ,EAAO,QAAQ,MAAM,IAAI,IAC5D,CAACI,GAASC,CAAU,IAAI93B,GAAqB;AAAA,MACjD,MAAMq3B;AAAA,MACN,aAAaC,KAAkB;AAAA,MAC/B,UAAUC;AAAA,MACV,QAAQR;AAAA,IACd,CAAK;AACD,WAAuBr5D,gBAAAA,EAAAA,KAAKu5D,IAAgB,EAAE,OAAOG,GAAe,SAAAS,GAAS,UAAA1a,GAAU,UAAU;AAAA,MAC/E1/C,gBAAAA,EAAAA;AAAAA,QACdwjC,GAAU;AAAA,QACV;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,gBAAgB42B;AAAA,UAChB,iBAAiBrR;AAAA,UACjB,cAAcvP,GAAS4gB,CAAO;AAAA,UAC9B,iBAAiB1a,IAAW,KAAK;AAAA,UACjC,UAAAA;AAAA,UACA,OAAA5jD;AAAA,UACA,GAAGi+D;AAAA,UACH,KAAK50B;AAAA,UACL,SAASpF,GAAqBnnC,EAAM,SAAS,CAACunC,MAAU;AACtD,YAAAk6B,EAAW,CAACC,MAAgB,CAACA,CAAW,GACpCH,MACFD,EAAiC,UAAU/5B,EAAM,qBAAoB,GAChE+5B,EAAiC,WAAS/5B,EAAM,gBAAe;AAAA,UAExE,CAAC;AAAA,QACX;AAAA,MACA;AAAA,MACMg6B,KAAiCn6D,gBAAAA,EAAAA;AAAAA,QAC/Bu6D;AAAA,QACA;AAAA,UACE,SAASP;AAAA,UACT,SAAS,CAACE,EAAiC;AAAA,UAC3C,MAAAjhE;AAAA,UACA,OAAA6C;AAAA,UACA,SAAAs+D;AAAA,UACA,UAAArR;AAAA,UACA,UAAArJ;AAAA,UACA,MAAA8Q;AAAA,UACA,OAAO,EAAE,WAAW,oBAAmB;AAAA,QACjD;AAAA,MACA;AAAA,IACA,GAAO;AAAA,EACL;AACF;AACAkJ,GAAO,cAAcJ;AACrB,IAAIkB,KAAa,eACbC,KAAc7lE,EAAM;AAAA,EACtB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,eAAA8xD,GAAe,GAAGe,EAAU,IAAK9hE,GACnCjB,IAAU8hE,GAAiBe,IAAYb,CAAa;AAC1D,WAAuB35D,gBAAAA,EAAAA;AAAAA,MACrBwjC,GAAU;AAAA,MACV;AAAA,QACE,cAAcgW,GAAS7hD,EAAQ,OAAO;AAAA,QACtC,iBAAiBA,EAAQ,WAAW,KAAK;AAAA,QACzC,GAAG+iE;AAAA,QACH,KAAK7yD;AAAA,MACb;AAAA,IACA;AAAA,EACE;AACF;AACA4yD,GAAY,cAAcD;AAC1B,IAAIG,KAAoB,qBACpBJ,KAAoB3lE,EAAM;AAAA,EAC5B,CAAC;AAAA,IACC,eAAA+kE;AAAA,IACA,SAAA9/D;AAAA,IACA,SAAAugE;AAAA,IACA,SAAAQ,IAAU;AAAA,IACV,GAAGhiE;AAAA,EACP,GAAKiP,MAAiB;AAClB,UAAM1K,IAAMvI,EAAM,OAAO,IAAI,GACvBuwC,IAAe/9B,GAAgBjK,GAAK0K,CAAY,GAChDyyD,IAAcxB,GAAYsB,CAAO,GACjCS,IAAc9B,GAAQl/D,CAAO;AACnC,WAAAjF,EAAM,UAAU,MAAM;AACpB,YAAM+3B,IAAQxvB,EAAI;AAClB,UAAI,CAACwvB,EAAO;AACZ,YAAMmuC,IAAa,OAAO,iBAAiB,WAKrCT,IAJa,OAAO;AAAA,QACxBS;AAAA,QACA;AAAA,MACR,EACoC;AAC9B,UAAIR,MAAgBF,KAAWC,GAAY;AACzC,cAAMl6B,IAAQ,IAAI,MAAM,SAAS,EAAE,SAAAy6B,EAAO,CAAE;AAC5C,QAAAP,EAAW,KAAK1tC,GAAOytC,CAAO,GAC9BztC,EAAM,cAAcwT,CAAK;AAAA,MAC3B;AAAA,IACF,GAAG,CAACm6B,GAAaF,GAASQ,CAAO,CAAC,GACX56D,gBAAAA,EAAAA;AAAAA,MACrB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,eAAe;AAAA,QACf,gBAAgBo6D;AAAA,QAChB,GAAGxhE;AAAA,QACH,UAAU;AAAA,QACV,KAAKusC;AAAA,QACL,OAAO;AAAA,UACL,GAAGvsC,EAAM;AAAA,UACT,GAAGiiE;AAAA,UACH,UAAU;AAAA,UACV,eAAe;AAAA,UACf,SAAS;AAAA,UACT,QAAQ;AAAA,QAClB;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF;AACAN,GAAkB,cAAcI;AAChC,SAASnhB,GAAS4gB,GAAS;AACzB,SAAOA,IAAU,YAAY;AAC/B;AACA,IAAI/d,KAAOqd,IACPqB,KAAQN;AClJZ,MAAMf,KAAS9kE,EAAM,WAGnB,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA;AAAAA,EAACg7D;AAAAA,EAAA;AAAA,IACC,WAAWpmD;AAAA,MACT;AAAA,MACAhT;AAAA,IAAA;AAAA,IAED,GAAGhJ;AAAA,IACJ,KAAAuE;AAAA,IAEA,UAAA6C,gBAAAA,EAAAA;AAAAA,MAACi7D;AAAAA,MAAA;AAAA,QACC,WAAWrmD;AAAA,UACT;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EACF;AACF,CACD;AACD8kD,GAAO,cAAcsB,GAAsB;ACX3C,IAAIE,KAAgB,YAChB,CAACC,EAA0C,IAAIx6B,GAAmBu6B,EAAa,GAC/E,CAACE,IAAsBC,EAAkB,IAAIF,GAAsBD,EAAa;AACpF,SAASI,GAAiB1iE,GAAO;AAC/B,QAAM;AAAA,IACJ,iBAAA2iE;AAAA,IACA,SAAS3B;AAAA,IACT,UAAAj6D;AAAA,IACA,gBAAAk6D;AAAA,IACA,UAAAna;AAAA,IACA,MAAA8Q;AAAA,IACA,MAAAv3D;AAAA,IACA,iBAAA6gE;AAAA,IACA,UAAA/Q;AAAA,IACA,OAAAjtD,IAAQ;AAAA;AAAA,IAER,4BAAA0/D;AAAA,EACJ,IAAM5iE,GACE,CAACwhE,GAASC,CAAU,IAAI93B,GAAqB;AAAA,IACjD,MAAMq3B;AAAA,IACN,aAAaC,KAAkB;AAAA,IAC/B,UAAUC;AAAA,IACV,QAAQoB;AAAA,EACZ,CAAG,GACK,CAACrhE,GAAS4hE,CAAU,IAAI7mE,EAAM,SAAS,IAAI,GAC3C,CAAC8mE,GAAaC,CAAc,IAAI/mE,EAAM,SAAS,IAAI,GACnDslE,IAAmCtlE,EAAM,OAAO,EAAK,GACrDulE,IAAgBtgE,IAAU,CAAC,CAAC22D,KAAQ,CAAC,CAAC32D,EAAQ,QAAQ,MAAM;AAAA;AAAA,IAEhE;AAAA,KAEIlC,IAAU;AAAA,IACd,SAAAyiE;AAAA,IACA,UAAA1a;AAAA,IACA,YAAA2a;AAAA,IACA,SAAAxgE;AAAA,IACA,YAAA4hE;AAAA,IACA,MAAAxiE;AAAA,IACA,MAAAu3D;AAAA,IACA,OAAA10D;AAAA,IACA,kCAAAo+D;AAAA,IACA,UAAAnR;AAAA,IACA,gBAAgB6S,GAAgB/B,CAAc,IAAI,KAAQA;AAAA,IAC1D,eAAAM;AAAA,IACA,aAAAuB;AAAA,IACA,gBAAAC;AAAA,EACJ;AACE,SAAuB37D,gBAAAA,EAAAA;AAAAA,IACrBo7D;AAAA,IACA;AAAA,MACE,OAAOG;AAAA,MACP,GAAG5jE;AAAA,MACH,UAAU0rC,GAAWm4B,CAA0B,IAAIA,EAA2B7jE,CAAO,IAAIgI;AAAA,IAC/F;AAAA,EACA;AACA;AACA,IAAIy5C,KAAe,mBACfyiB,KAAkBjnE,EAAM;AAAA,EAC1B,CAAC,EAAE,iBAAA2mE,GAAiB,WAAAO,GAAW,SAAAC,GAAS,GAAGC,EAAa,GAAIn0D,MAAiB;AAC3E,UAAM;AAAA,MACJ,SAAAhO;AAAA,MACA,OAAAiC;AAAA,MACA,UAAA4jD;AAAA,MACA,SAAA0a;AAAA,MACA,UAAArR;AAAA,MACA,YAAA0S;AAAA,MACA,YAAApB;AAAA,MACA,kCAAAH;AAAA,MACA,eAAAC;AAAA,MACA,aAAAuB;AAAA,IACN,IAAQL,GAAmBjiB,IAAcmiB,CAAe,GAC9Cp2B,IAAe/9B,GAAgBS,GAAc4zD,CAAU,GACvDQ,IAAyBrnE,EAAM,OAAOwlE,CAAO;AACnD,WAAAxlE,EAAM,UAAU,MAAM;AACpB,YAAM47D,IAAO32D,KAAA,gBAAAA,EAAS;AACtB,UAAI22D,GAAM;AACR,cAAMpN,IAAQ,MAAMiX,EAAW4B,EAAuB,OAAO;AAC7D,eAAAzL,EAAK,iBAAiB,SAASpN,CAAK,GAC7B,MAAMoN,EAAK,oBAAoB,SAASpN,CAAK;AAAA,MACtD;AAAA,IACF,GAAG,CAACvpD,GAASwgE,CAAU,CAAC,GACDr6D,gBAAAA,EAAAA;AAAAA,MACrBwjC,GAAU;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,gBAAgBo4B,GAAgBxB,CAAO,IAAI,UAAUA;AAAA,QACrD,iBAAiBrR;AAAA,QACjB,cAAcvP,GAAS4gB,CAAO;AAAA,QAC9B,iBAAiB1a,IAAW,KAAK;AAAA,QACjC,UAAAA;AAAA,QACA,OAAA5jD;AAAA,QACA,GAAGkgE;AAAA,QACH,KAAK72B;AAAA,QACL,WAAWpF,GAAqB+7B,GAAW,CAAC37B,MAAU;AACpD,UAAIA,EAAM,QAAQ,WAASA,EAAM,eAAc;AAAA,QACjD,CAAC;AAAA,QACD,SAASJ,GAAqBg8B,GAAS,CAAC57B,MAAU;AAChD,UAAAk6B,EAAW,CAACC,MAAgBsB,GAAgBtB,CAAW,IAAI,KAAO,CAACA,CAAW,GAC1EoB,KAAevB,MACjBD,EAAiC,UAAU/5B,EAAM,qBAAoB,GAChE+5B,EAAiC,WAAS/5B,EAAM,gBAAe;AAAA,QAExE,CAAC;AAAA,MACT;AAAA,IACA;AAAA,EACE;AACF;AACA07B,GAAgB,cAAcziB;AAC9B,IAAI8iB,KAAWtnE,EAAM;AAAA,EACnB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM;AAAA,MACJ,iBAAA0zD;AAAA,MACA,MAAAtiE;AAAA,MACA,SAAAmhE;AAAA,MACA,gBAAAP;AAAA,MACA,UAAA9Q;AAAA,MACA,UAAArJ;AAAA,MACA,OAAA5jD;AAAA,MACA,iBAAAg+D;AAAA,MACA,MAAAtJ;AAAA,MACA,GAAGwL;AAAA,IACT,IAAQpjE;AACJ,WAAuBoH,gBAAAA,EAAAA;AAAAA,MACrBs7D;AAAA,MACA;AAAA,QACE,iBAAAC;AAAA,QACA,SAAAnB;AAAA,QACA,gBAAAP;AAAA,QACA,UAAAna;AAAA,QACA,UAAAqJ;AAAA,QACA,iBAAA+Q;AAAA,QACA,MAAA7gE;AAAA,QACA,MAAAu3D;AAAA,QACA,OAAA10D;AAAA,QACA,4BAA4B,CAAC,EAAE,eAAAq+D,EAAa,MAAuBl6D,gBAAAA,EAAAA,KAAK+6C,EAAAA,UAAU,EAAE,UAAU;AAAA,UAC5Eh7C,gBAAAA,EAAAA;AAAAA,YACd67D;AAAA,YACA;AAAA,cACE,GAAGG;AAAA,cACH,KAAKn0D;AAAA,cACL,iBAAA0zD;AAAA,YACd;AAAA,UACA;AAAA,UACUpB,KAAiCn6D,gBAAAA,EAAAA;AAAAA,YAC/Bm8D;AAAA,YACA;AAAA,cACE,iBAAAZ;AAAA,YACd;AAAA,UACA;AAAA,QACA,EAAS,CAAE;AAAA,MACX;AAAA,IACA;AAAA,EACE;AACF;AACAW,GAAS,cAAchB;AACvB,IAAIkB,KAAiB,qBACjBC,KAAoBznE,EAAM;AAAA,EAC5B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,iBAAA0zD,GAAiB,YAAA3hB,GAAY,GAAG0iB,EAAc,IAAK1jE,GACrDjB,IAAU0jE,GAAmBe,IAAgBb,CAAe;AAClE,WAAuBv7D,gBAAAA,EAAAA;AAAAA,MACrB6qC;AAAA,MACA;AAAA,QACE,SAAS+O,KAAcgiB,GAAgBjkE,EAAQ,OAAO,KAAKA,EAAQ,YAAY;AAAA,QAC/E,UAA0BqI,gBAAAA,EAAAA;AAAAA,UACxBwjC,GAAU;AAAA,UACV;AAAA,YACE,cAAcgW,GAAS7hD,EAAQ,OAAO;AAAA,YACtC,iBAAiBA,EAAQ,WAAW,KAAK;AAAA,YACzC,GAAG2kE;AAAA,YACH,KAAKz0D;AAAA,YACL,OAAO,EAAE,eAAe,QAAQ,GAAGjP,EAAM,MAAK;AAAA,UAC1D;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF;AACAyjE,GAAkB,cAAcD;AAChC,IAAIzB,KAAoB,uBACpBwB,KAAsBvnE,EAAM;AAAA,EAC9B,CAAC,EAAE,iBAAA2mE,GAAiB,GAAG3iE,EAAK,GAAIiP,MAAiB;AAC/C,UAAM;AAAA,MACJ,SAAAhO;AAAA,MACA,kCAAAqgE;AAAA,MACA,SAAAE;AAAA,MACA,gBAAAP;AAAA,MACA,UAAA9Q;AAAA,MACA,UAAArJ;AAAA,MACA,MAAAzmD;AAAA,MACA,OAAA6C;AAAA,MACA,MAAA00D;AAAA,MACA,aAAAkL;AAAA,MACA,gBAAAC;AAAA,IACN,IAAQN,GAAmBV,IAAmBY,CAAe,GACnDp2B,IAAe/9B,GAAgBS,GAAc8zD,CAAc,GAC3DrB,IAAcxB,GAAYsB,CAAO,GACjCS,IAAc9B,GAAQl/D,CAAO;AACnC,IAAAjF,EAAM,UAAU,MAAM;AACpB,YAAM+3B,IAAQ+uC;AACd,UAAI,CAAC/uC,EAAO;AACZ,YAAMmuC,IAAa,OAAO,iBAAiB,WAKrCT,IAJa,OAAO;AAAA,QACxBS;AAAA,QACA;AAAA,MACR,EACoC,KACxBF,IAAU,CAACV,EAAiC;AAClD,UAAII,MAAgBF,KAAWC,GAAY;AACzC,cAAMl6B,IAAQ,IAAI,MAAM,SAAS,EAAE,SAAAy6B,EAAO,CAAE;AAC5C,QAAAjuC,EAAM,gBAAgBivC,GAAgBxB,CAAO,GAC7CC,EAAW,KAAK1tC,GAAOivC,GAAgBxB,CAAO,IAAI,KAAQA,CAAO,GACjEztC,EAAM,cAAcwT,CAAK;AAAA,MAC3B;AAAA,IACF,GAAG,CAACu7B,GAAapB,GAAaF,GAASF,CAAgC,CAAC;AACxE,UAAMqC,IAAoB3nE,EAAM,OAAOgnE,GAAgBxB,CAAO,IAAI,KAAQA,CAAO;AACjF,WAAuBp6D,gBAAAA,EAAAA;AAAAA,MACrBwjC,GAAU;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,eAAe;AAAA,QACf,gBAAgBq2B,KAAkB0C,EAAkB;AAAA,QACpD,UAAAxT;AAAA,QACA,UAAArJ;AAAA,QACA,MAAAzmD;AAAA,QACA,OAAA6C;AAAA,QACA,MAAA00D;AAAA,QACA,GAAG53D;AAAA,QACH,UAAU;AAAA,QACV,KAAKusC;AAAA,QACL,OAAO;AAAA,UACL,GAAGvsC,EAAM;AAAA,UACT,GAAGiiE;AAAA,UACH,UAAU;AAAA,UACV,eAAe;AAAA,UACf,SAAS;AAAA,UACT,QAAQ;AAAA;AAAA;AAAA;AAAA,UAIR,WAAW;AAAA,QACrB;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF;AACAsB,GAAoB,cAAcxB;AAClC,SAASt3B,GAAWvnC,GAAO;AACzB,SAAO,OAAOA,KAAU;AAC1B;AACA,SAAS8/D,GAAgBxB,GAAS;AAChC,SAAOA,MAAY;AACrB;AACA,SAAS5gB,GAAS4gB,GAAS;AACzB,SAAOwB,GAAgBxB,CAAO,IAAI,kBAAkBA,IAAU,YAAY;AAC5E;ACvQA,MAAM8B,KAAWtnE,EAAM,WAGrB,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA;AAAAA,EAACw8D;AAAAA,EAAA;AAAA,IACC,KAAAr/D;AAAA,IACA,WAAWyX;AAAA,MACT;AAAA,MACAhT;AAAA,IAAA;AAAA,IAED,GAAGhJ;AAAA,IAEJ,UAAAoH,gBAAAA,EAAAA,IAACy8D,IAAA,EAA4B,WAAW7nD,GAAG,+CAA+C,GACxF,UAAA5U,gBAAAA,EAAAA,IAAC08D,IAAA,EAAM,WAAU,UAAA,CAAU,EAAA,CAC7B;AAAA,EAAA;AACF,CACD;AACDR,GAAS,cAAcM,GAAuB;ACnB9C,MAAMG,KAAO/nE,EAAM,WAAiE,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,KAASuE,4BAC3G,OAAA,EAAI,KAAAA,GAAU,WAAWyX,GAAG,qDAAqDhT,CAAS,GAAI,GAAGhJ,GAAO,CAC1G;AACD+jE,GAAK,cAAc;AAEnB,MAAMC,KAAahoE,EAAM;AAAA,EACvB,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MACxB6C,gBAAAA,EAAAA,IAAC,OAAA,EAAI,KAAA7C,GAAU,WAAWyX,GAAG,iCAAiChT,CAAS,GAAI,GAAGhJ,EAAA,CAAO;AAEzF;AACAgkE,GAAW,cAAc;AAEzB,MAAMC,KAAYjoE,EAAM;AAAA,EACtB,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MACxB6C,gBAAAA,EAAAA,IAAC,MAAA,EAAG,KAAA7C,GAAU,WAAWyX,GAAG,sDAAsDhT,CAAS,GAAI,GAAGhJ,EAAA,CAAO;AAE7G;AACAikE,GAAU,cAAc;AAExB,MAAMC,KAAkBloE,EAAM;AAAA,EAC5B,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MACxB6C,gBAAAA,EAAAA,IAAC,KAAA,EAAE,KAAA7C,GAAU,WAAWyX,GAAG,iCAAiChT,CAAS,GAAI,GAAGhJ,EAAA,CAAO;AAEvF;AACAkkE,GAAgB,cAAc;AAE9B,MAAMC,KAAcnoE,EAAM;AAAA,EACxB,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAAQ6C,gBAAAA,EAAAA,IAAC,OAAA,EAAI,KAAA7C,GAAU,WAAWyX,GAAG,YAAYhT,CAAS,GAAI,GAAGhJ,EAAA,CAAO;AACpG;AACAmkE,GAAY,cAAc;AAE1B,MAAMC,KAAapoE,EAAM;AAAA,EACvB,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MACxB6C,gBAAAA,EAAAA,IAAC,OAAA,EAAI,KAAA7C,GAAU,WAAWyX,GAAG,8BAA8BhT,CAAS,GAAI,GAAGhJ,EAAA,CAAO;AAEtF;AACAokE,GAAW,cAAc;ACxCsB,MAAM5iE,KAAE,CAAC3F,GAAE2F,GAAE6O,MAAI;AAAC,MAAGxU,KAAG,oBAAmBA,GAAE;AAAC,UAAMuU,IAAE2M,GAAE1M,GAAE7O,CAAC;AAAE,IAAA3F,EAAE,kBAAkBuU,KAAGA,EAAE,WAAS,EAAE,GAAEvU,EAAE,eAAc;AAAA,EAAE;AAAC,GAAEwU,KAAE,CAAC0M,GAAElhB,MAAI;AAAC,aAAUwU,KAAKxU,EAAE,QAAO;AAAC,UAAMuU,IAAEvU,EAAE,OAAOwU,CAAC;AAAE,IAAAD,KAAGA,EAAE,OAAK,oBAAmBA,EAAE,MAAI5O,GAAE4O,EAAE,KAAIC,GAAE0M,CAAC,IAAE3M,EAAE,QAAMA,EAAE,KAAK,QAAQ,CAAAvU,MAAG2F,GAAE3F,GAAEwU,GAAE0M,CAAC,CAAC;AAAA,EAAC;AAAC,GAAE3M,KAAE,CAAC5O,GAAE4O,MAAI;AAAC,EAAAA,EAAE,6BAA2BC,GAAE7O,GAAE4O,CAAC;AAAE,QAAMpV,IAAE,CAAA;AAAG,aAAUqV,KAAK7O,GAAE;AAAC,UAAMnG,IAAE0hB,GAAE3M,EAAE,QAAOC,CAAC,GAAE5U,IAAE,OAAO,OAAO+F,EAAE6O,CAAC,KAAG,CAAA,GAAG,EAAC,KAAIhV,KAAGA,EAAE,IAAG,CAAC;AAAE,QAAGyK,GAAEsK,EAAE,SAAO,OAAO,KAAK5O,CAAC,GAAE6O,CAAC,GAAE;AAAC,YAAM7O,IAAE,OAAO,OAAO,CAAA,GAAGub,GAAE/hB,GAAEqV,CAAC,CAAC;AAAExU,MAAAA,GAAE2F,GAAE,QAAO/F,CAAC,GAAEI,GAAEb,GAAEqV,GAAE7O,CAAC;AAAA,IAAC,MAAM3F,CAAAA,GAAEb,GAAEqV,GAAE5U,CAAC;AAAA,EAAC;AAAC,SAAOT;AAAC,GAAE8K,KAAE,CAACiX,GAAElhB,MAAIkhB,EAAE,KAAK,CAAAA,MAAGA,EAAE,WAAWlhB,IAAE,GAAG,CAAC;ACAvd,IAAIR,KAAE,SAAS+U,GAAEvU,GAAE;AAAC,WAAQR,IAAE,CAAA,GAAG+U,EAAE,UAAQ;AAAC,QAAI2M,IAAE3M,EAAE,CAAC,GAAE5O,IAAEub,EAAE,MAAK,IAAEA,EAAE,SAAQ,IAAEA,EAAE,KAAK,KAAK,GAAG;AAAE,QAAG,CAAC1hB,EAAE,CAAC,EAAE,KAAG,iBAAgB0hB,GAAE;AAAC,UAAI8E,IAAE9E,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC;AAAE,MAAA1hB,EAAE,CAAC,IAAE,EAAC,SAAQwmB,EAAE,SAAQ,MAAKA,EAAE,KAAI;AAAA,IAAC,MAAM,CAAAxmB,EAAE,CAAC,IAAE,EAAC,SAAQ,GAAE,MAAKmG,EAAC;AAAE,QAAG,iBAAgBub,KAAGA,EAAE,YAAY,QAAQ,SAASlhB,GAAE;AAAC,aAAOA,EAAE,OAAO,QAAQ,SAASA,GAAE;AAAC,eAAOuU,EAAE,KAAKvU,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAEA,GAAE;AAAC,UAAI,IAAER,EAAE,CAAC,EAAE,OAAML,IAAE,KAAG,EAAE+hB,EAAE,IAAI;AAAE,MAAA1hB,EAAE,CAAC,IAAEgV,GAAE,GAAExU,GAAER,GAAEmG,GAAExG,IAAE,CAAA,EAAG,OAAOA,GAAE+hB,EAAE,OAAO,IAAEA,EAAE,OAAO;AAAA,IAAC;AAAC,IAAA3M,EAAE,MAAK;AAAA,EAAE;AAAC,SAAO/U;AAAC,GAAE0hB,KAAE,SAAS1M,GAAE,GAAE7O,GAAE;AAAC,SAAgBA,MAAT,WAAaA,IAAE,CAAA,IAAI,SAASsE,GAAErK,GAAEomB,GAAE;AAAC,QAAG;AAAC,aAAO,QAAQ,QAAQ,SAAShmB,GAAER,GAAE;AAAC,YAAG;AAAC,cAAII,IAAE,QAAQ,QAAQ4U,EAAW7O,EAAE,SAAX,SAAgB,UAAQ,YAAY,EAAEsE,GAAE,CAAC,CAAC,EAAE,KAAK,SAASjK,GAAE;AAAC,mBAAOgmB,EAAE,6BAA2BzR,GAAE,IAAGyR,CAAC,GAAE,EAAC,QAAO,CAAA,GAAG,QAAOrgB,EAAE,MAAIsE,IAAEjK,EAAC;AAAA,UAAC,CAAC;AAAA,QAAC,SAAOuU,GAAE;AAAC,iBAAO/U,EAAE+U,CAAC;AAAA,QAAC;AAAC,eAAO3U,KAAGA,EAAE,OAAKA,EAAE,KAAK,QAAOJ,CAAC,IAAEI;AAAA,MAAC,EAAE,GAAE,SAAS2U,GAAE;AAAC,YAAG,SAASA,GAAE;AAAC,iBAAO,MAAM,QAAcA,KAAN,OAAQ,SAAOA,EAAE,MAAM;AAAA,QAAC,EAAEA,CAAC,EAAE,QAAM,EAAC,QAAO,IAAG,QAAOvU,GAAER,GAAE+U,EAAE,QAAO,CAACyR,EAAE,6BAAmCA,EAAE,iBAAV,KAAsB,GAAEA,CAAC,EAAC;AAAE,cAAMzR;AAAA,MAAC,CAAC,CAAC;AAAA,IAAC,SAAOA,GAAE;AAAC,aAAO,QAAQ,OAAOA,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC;ACKzlC,MAAMi0D,KAAgB5zD;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,WAAW;AAAA,QACX,aAAa;AAAA,QACb,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ;AAIA,SAAS6zD,GAAM,EAAE,WAAAt7D,GAAW,SAAA+H,GAAS,GAAG/Q,KAAqB;AAC3D,SAAOoH,gBAAAA,MAAC,OAAA,EAAI,WAAW4U,GAAGqoD,GAAc,EAAE,SAAAtzD,EAAA,CAAS,GAAG/H,CAAS,GAAI,GAAGhJ,EAAA,CAAO;AAC/E;;;;;;;;;;;;;GCrBMukE,KAAyB,MAYzBC,KAA+D,CAAA,GAC/DC,KAAuE,CAAA,GACvEC,KAAkD,CAAA;AAGxD,IAAIC,KAA4B,CAAA;AAChC,MAAM9Z,KAAY,CAACjqB,OACjB+jC,GAAU,KAAK/jC,CAAQ,GAChB,MAAM;AACX,EAAA+jC,KAAYA,GAAU,OAAO,CAAAxpE,MAAKA,MAAMylC,CAAQ;AAClD,IAEIgkC,KAAS,MAAM;AACnB,EAAAD,GAAU,QAAQ,CAAAxpE,MAAKA,EAAA,CAAG;AAC5B,GAEM0pE,KAAmB,CAACxlC,MACpBqlC,GAAmBrlC,CAAI,IAClB,QAAQ,QAAQmlC,GAAiBnlC,CAAI,KAAK,CAAA,CAAE,IAG9ColC,GAAgBplC,CAAI,MAAM,MAAM;AACrC,QAAM70B,IAAUs6D,sCAAA,UAAAzlC,CAAA,SAAA,CAAA,EACb,KAAK,CAAA4E,MAAU;AACd,UAAM8gC,IAAe9gC,EAAO,SAEtB+gC,IAAgBR,GAAiBnlC,CAAI,KAAK,CAAA;AAChD,WAAAmlC,GAAiBnlC,CAAI,IAAI,EAAE,GAAG2lC,GAAe,GAAGD,EAAA,GAChDL,GAAmBrlC,CAAI,IAAI,IAC3B,OAAOolC,GAAgBplC,CAAI,GAC3BulC,GAAA,GACOJ,GAAiBnlC,CAAI;AAAA,EAC9B,CAAC,EACA,MAAM,CAAAjiC,OACL,QAAQ,KAAK,6CAA6CiiC,CAAI,IAAIjiC,CAAK,GAEvE,OAAOqnE,GAAgBplC,CAAI,GAC3BulC,GAAA,GACOJ,GAAiBnlC,CAAI,KAAK,CAAA,EAClC;AAEH,SAAAolC,GAAgBplC,CAAI,IAAI70B,GACjBA;AACT,GAAA,GAIIy6D,KAAY,CAAC5kE,MAAgC;;AACjD,MAAI,OAAO,WAAa,IAAa,QAAO;AAE5C,QAAMwmC,IADQ,KAAK,SAAS,MAAM,GACd,MAAM,KAAKxmC,CAAI,GAAG;AACtC,SAAIwmC,EAAM,WAAW,OAAU78B,IAAA68B,EAAM,IAAA,MAAN,gBAAA78B,EAAa,MAAM,KAAK,YAAW;AAEpE,GAGMk7D,KAAY,CAAC7kE,GAAc6C,GAAeiiE,IAAe,QAAQ;AACrE,MAAI,OAAO,WAAa,IAAa;AACrC,QAAMC,wBAAc,KAAA;AACpB,EAAAA,EAAQ,QAAQA,EAAQ,QAAA,IAAYD,IAAO,KAAK,KAAK,KAAK,GAAI,GAC9D,SAAS,SAAS,GAAG9kE,CAAI,IAAI6C,CAAK,YAAYkiE,EAAQ,aAAa;AACrE,GAEMC,KAAyB,MAAgB;AAC7C,MAAI,OAAO,SAAW,KAAa;AAEjC,UAAMC,IAAaL,GAAU,MAAM;AACnC,QAAIK,KAAcA,EAAW,WAAW;AACtC,aAAOA;AAKT,UAAMC,IADS,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAChC,IAAI,MAAM;AACnC,QAAIA,KAAaA,EAAU,WAAW;AAEpC,aAAAL,GAAU,QAAQK,CAAS,GACpBA;AAIT,UAAMC,IAAe,UAAU,aAAa,CAAC,UAAU,QAAQ;AAC/D,eAAWnmC,KAAQmmC,GAAc;AAC/B,YAAMC,IAAYpmC,EAAK,MAAM,GAAG,EAAE,CAAC;AACnC,UAAIomC,KAAaA,EAAU,WAAW;AACpC,eAAOA;AAAA,IAEX;AAAA,EACF;AACA,SAAOlB;AACT,GACamB,KAAiBL,IAajBpqD,KAAY,CAAC0qD,GAAiBJ,MAAiC;AAC1E,QAAMK,IAAYL,KAAaF,GAAA;AAG/B,SAAIX,GAAmBkB,CAAS,KAAKpB,GAAiBoB,CAAS,KAAKpB,GAAiBoB,CAAS,EAAED,CAAO,MAAM,SACpGnB,GAAiBoB,CAAS,EAAED,CAAO,IAIxCC,MAAcrB,MAAgBG,GAAmBH,EAAY,KAAKC,GAAiBD,EAAY,KAAKC,GAAiBD,EAAY,EAAEoB,CAAO,MAAM,SAC3InB,GAAiBD,EAAY,EAAEoB,CAAO,KAI1CnB,GAAiBoB,CAAS,MAC7BpB,GAAiBoB,CAAS,IAAI,CAAA,IAE5BpB,GAAiBoB,CAAS,EAAED,CAAO,MAAM,WAC3CnB,GAAiBoB,CAAS,EAAED,CAAO,IAAIA,IAIlCA;AACT,GAMM/oD,KAAsB,CAAC,EAAE,UAAA7V,QAAe;AAC5C,QAAM,GAAG8+D,CAAW,IAAI39D,GAAS,CAAC;AAElC,EAAAI,GAAU,MACDuiD,GAAU,MAAM;AACnB,IAAAgb,EAAY,CAAArqE,MAAKA,IAAI,CAAC;AAAA,EAC1B,CAAC,GACA,CAAA,CAAE;AAEL,QAAMsqE,IAAcT,GAAA;AACpB,EAAA/8D,GAAU,MAAM;AACd,IAAAu8D,GAAiBiB,CAAW;AAAA,EAC9B,GAAG,CAACA,CAAW,CAAC;AAEhB,QAAMH,IAAUz/B,GAAQ,MAClB,OAAOn/B,KAAa,WAAiBA,IACrC/K,GAAM,eAAe+K,CAAQ,KAAK,OAAOA,EAAS,MAAM,YAAa,WAChEA,EAAS,MAAM,WAEjB,MACN,CAACA,CAAQ,CAAC;AAEb,MAAI,CAAC4+D;AACH,+CAAU,UAAA5+D,GAAS;AAGrB,QAAMg/D,IAAmB9qD,GAAU0qD,GAASG,CAAW;AAEvD,SAAI9pE,GAAM,eAAe+K,CAAQ,KAAK,OAAOA,EAAS,MAAM,YAAa,WAChE/K,GAAM,aAAa+K,GAAU,CAAA,GAAIg/D,CAAgB,wCAEhD,UAAAA,EAAA,CAAiB;AAC7B,GAEaC,KAAsB,CAAC3mC,MAC9BA,IACKmlC,GAAiBnlC,CAAI,KAAK,CAAA,IAE5BmlC,IAIIyB,KAAuB,CAAC5mC,IAAiB,SAAS;AAC7D,QAAM0lC,IAAeP,GAAiBnlC,CAAI,KAAK,CAAA,GACzC6mC,IAAWxB,GAAmBrlC,CAAI,GAElC8mC,IAAqB,OAAO,KAAKpB,CAAY,EAChD,OACA,OAAO,CAACl8D,GAAQvE,OACfuE,EAAOvE,CAAG,IAAIygE,EAAazgE,CAAG,GACvBuE,IACN,CAAA,CAA4B,GAE3Bu9D,IAAa,KAAK,UAAUD,GAAoB,MAAM,CAAC,GACvDE,IAAO,IAAI,KAAK,CAACD,CAAU,GAAG,EAAE,MAAM,oBAAoB,GAC1Dz/B,IAAM,IAAI,gBAAgB0/B,CAAI,GAE9BC,IAAO,SAAS,cAAc,GAAG;AACvC,EAAAA,EAAK,OAAO3/B,GACZ2/B,EAAK,WAAW,GAAGjnC,CAAI,SACvB,SAAS,KAAK,YAAYinC,CAAI,GAC9BA,EAAK,MAAA,GACL,SAAS,KAAK,YAAYA,CAAI,GAC9B,IAAI,gBAAgB3/B,CAAG,GAEvB,QAAQ,IAAI,cAAc,OAAO,KAAKw/B,CAAkB,EAAE,MAAM,mCAAmC9mC,CAAI,KAAK6mC,IAAW,qBAAqB,gBAAgB,GAAG;AACjK,GAGaK,KAAuB,CAAClnC,MAAoB;AACvD,MAAIA;AACF,WAAO;AAAA,MACL,QAAQqlC,GAAmBrlC,CAAI,KAAK;AAAA,MACpC,WAAW,OAAO,KAAKmlC,GAAiBnlC,CAAI,KAAK,CAAA,CAAE,EAAE;AAAA,IAAA;AAIzD,QAAM7M,IAAiE,CAAA;AACvE,aAAWg0C,KAAY,OAAO,KAAKhC,EAAgB;AACjD,IAAAhyC,EAAOg0C,CAAQ,IAAI;AAAA,MACjB,QAAQ9B,GAAmB8B,CAAQ,KAAK;AAAA,MACxC,WAAW,OAAO,KAAKhC,GAAiBgC,CAAQ,KAAK,CAAA,CAAE,EAAE;AAAA,IAAA;AAG7D,SAAOh0C;AACT;AAEI,OAAO,SAAW,QACnB,OAAe,sBAAsBwzC,IACrC,OAAe,YAAY/qD,IAC3B,OAAe,iBAAiByqD,IAChC,OAAe,uBAAuBO,IACtC,OAAe,uBAAuBM;AC3MlC,MAAME,KAAsD,CAAC;AAAA,EAClE,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,eAAA3yB,IAAgB,CAAA;AAAA,EAChB,UAAA4yB,IAAW;AACb,MAAM;AACJ,QAAM,EAAE,MAAAC,EAAA,IAASxqD,GAAA,GACX,CAACyqD,GAAUC,CAAW,IAAIj/D,GAAoB,CAAA,CAAE,GAChD,CAACk/D,GAASC,CAAU,IAAIn/D,GAAmB,CAAA,CAAE,GAC7C,CAACo/D,GAAaC,CAAc,IAAIr/D,GAAuB,CAAA,CAAE,GACzD,CAACC,GAASC,CAAU,IAAIF,GAAS,EAAK,GACtC,CAACs/D,GAAaC,CAAc,IAAIv/D,GAAS,EAAE,GAC3C,CAACw/D,GAAcC,CAAe,IAAIz/D,GAAmB,CAAA,CAAE,GACvD,CAAC0/D,GAAqBC,CAAsB,IAAI3/D,GAAmB,CAAA,CAAE,GACrE,CAAC4/D,GAAaC,CAAc,IAAI7/D,GAAmB,CAAA,CAAE,GACrD,CAAC8/D,GAAYC,CAAa,IAAI//D,GAAwB6+D,KAAgB,IAAI;AAGhF,EAAAz+D,GAAU,MAAM;AACd,IAAIo+D,MACFwB,EAAA,GACAC,EAAA,GACAC,EAAA;AAAA,EAEJ,GAAG,CAAC1B,CAAM,CAAC,GAGXp+D,GAAU,MAAM;AACd,IAAIo+D,MACEM,IAEE,KAAK,UAAUc,CAAW,MAAM,KAAK,UAAU1zB,CAAa,KAC9D2zB,EAAe3zB,KAAiB,EAAE,IAGhC4zB,MAAejB,KACjBkB,EAAclB,KAAgB,IAAI;AAAA,EAI1C,GAAG,CAACL,GAAQK,GAAc3yB,GAAe4yB,CAAQ,CAAC;AAElD,QAAMkB,IAAgB,YAAY;AAChC,IAAA9/D,EAAW,EAAI;AACf,QAAI;AACF,YAAM,EAAE,MAAAJ,GAAM,OAAA5K,EAAA,IAAU,MAAMgN,GAC3B,KAAK,UAAU,EACf,OAAO,gEAAgE,EACvE,GAAG,eAAe,EAAI,EACtB,MAAM,cAAc,EAAE,WAAW,GAAA,CAAO,EACxC,MAAM,GAAG;AAEZ,UAAIhN,EAAO,OAAMA;AACjB,MAAA+pE,EAAYn/D,KAAQ,EAAE;AAAA,IACxB,SAAS5K,GAAO;AACd,cAAQ,MAAM,4BAA4BA,CAAK;AAAA,IACjD,UAAA;AACE,MAAAgL,EAAW,EAAK;AAAA,IAClB;AAAA,EACF,GAEM+/D,IAAY,YAAY;AAC5B,QAAI;AACF,YAAM,EAAE,MAAAngE,GAAM,OAAA5K,MAAU,MAAMgN,GAC3B,KAAK,UAAU,EACf,OAAO,MAAM,EACb,GAAG,eAAe,EAAI;AAEzB,UAAIhN,EAAO,OAAMA;AAGjB,YAAMirE,yBAAc,IAAA;AACpB,MAAArgE,KAAA,QAAAA,EAAM,QAAQ,CAAAiG,OAAO;;AACnB,SAAAjE,KAAAiE,GAAI,SAAJ,QAAAjE,GAAU,QAAQ,CAAAglB,OAAOq5C,GAAQ,IAAIr5C,EAAG;AAAA,MAC1C,IAEAq4C,EAAW,MAAM,KAAKgB,EAAO,EAAE,MAAM;AAAA,IACvC,SAASjrE,GAAO;AACd,cAAQ,MAAM,wBAAwBA,CAAK;AAAA,IAC7C;AAAA,EACF,GAEMgrE,IAAmB,YAAY;AACnC,QAAKnB;AAEL,UAAI;AACF,cAAM,EAAE,MAAAj/D,GAAM,OAAA5K,EAAA,IAAU,MAAMgN,GAC3B,KAAK,aAAa,EAClB,OAAO,gBAAgB,EACvB,GAAG,WAAW68D,EAAK,EAAE,EACrB,MAAM,MAAM;AAEf,YAAI7pE,EAAO,OAAMA;AACjB,QAAAmqE,EAAev/D,KAAQ,EAAE;AAAA,MAC3B,SAAS5K,GAAO;AACd,gBAAQ,MAAM,+BAA+BA,CAAK;AAAA,MACpD;AAAA,EACF,GAEMkrE,IAAmBpiC,GAAQ,MACxBghC,EAAS,OAAO,CAAAj5D,MAAO;AAE5B,UAAMs6D,IAAgBt6D,EAAI,MAAM,YAAA,EAAc,SAASu5D,EAAY,YAAA,CAAa,KAC9Ev5D,EAAI,GAAG,YAAA,EAAc,SAASu5D,EAAY,aAAa,GAGnDgB,KAAcd,EAAa,WAAW,KACzCz5D,EAAI,QAAQy5D,EAAa,KAAK,CAAA14C,OAAA;;AAAO,cAAAhlB,KAAAiE,EAAI,SAAJ,gBAAAjE,GAAU,SAASglB;AAAA,KAAI;AAE/D,WAAOu5C,KAAiBC;AAAA,EAC1B,CAAC,GACA,CAACtB,GAAUM,GAAaE,CAAY,CAAC,GAGlC,CAACe,GAAeC,CAAgB,IAAIxgE,GAAoB,CAAA,CAAE;AAEhE,EAAAI,GAAU,MAAM;AAuBd,KAtB4B,YAAY;AACtC,UAAIs/D,EAAoB,WAAW,GAAG;AACpC,QAAAc,EAAiBJ,CAAgB;AACjC;AAAA,MACF;AAEA,UAAI;AACF,cAAM,EAAE,MAAAtgE,GAAM,OAAA5K,OAAU,MAAMgN,GAC3B,KAAK,qBAAqB,EAC1B,OAAO,YAAY,EACnB,GAAG,iBAAiBw9D,CAAmB;AAE1C,YAAIxqE,GAAO,OAAMA;AAEjB,cAAMurE,KAA0B,IAAI,KAAI3gE,KAAA,gBAAAA,EAAM,IAAI,QAAM4gE,GAAG,gBAAe,EAAE;AAC5E,QAAAF,EAAiBJ,EAAiB,OAAO,CAAAr6D,OAAO06D,GAAwB,IAAI16D,GAAI,EAAE,CAAC,CAAC;AAAA,MACtF,SAAS7Q,GAAO;AACd,gBAAQ,MAAM,mCAAmCA,CAAK,GACtDsrE,EAAiBJ,CAAgB;AAAA,MACnC;AAAA,IACF,GAEA;AAAA,EACF,GAAG,CAACA,GAAkBV,CAAmB,CAAC;AAE1C,QAAMiB,IAAe,MAAM;AACzB,QAAI7B;AAIF,UAHIH,KACFA,EAAciB,CAAW,GAEvBhB,GAAuB;AACzB,cAAMgC,IAAmB5B,EAAS,OAAO,CAAA5rE,MAAKwsE,EAAY,SAASxsE,EAAE,EAAE,CAAC;AACxE,QAAAwrE,EAAsBgC,CAAgB;AAAA,MACxC;AAAA;AAEA,MAAId,KAAcpB,KAChBA,EAASoB,CAAU;AAAA,EAGzB,GAEMe,IAAkB,CAAClpC,MAAe;AACtC,IAAImnC,IACFe;AAAA,MAAe,CAAAiB,MACbA,EAAK,SAASnpC,CAAE,IACZmpC,EAAK,OAAO,CAAAC,OAAOA,OAAQppC,CAAE,IAC7B,CAAC,GAAGmpC,GAAMnpC,CAAE;AAAA,IAAA,IAGlBooC,EAAcpoC,CAAE;AAAA,EAEpB;AAEA,SACEz4B,gBAAAA,EAAAA,IAACy4C,MAAO,MAAM6mB,GAAQ,cAAcC,GAClC,UAAAt/D,gBAAAA,EAAAA,KAACm6C,IAAA,EAAc,WAAU,wDACvB,UAAA;AAAA,IAAAn6C,gBAAAA,OAACg9C,IAAA,EACC,UAAA;AAAA,MAAAj9C,gBAAAA,MAACo7C,IAAA,EAAY,UAAAp7C,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,UAAA,iBAAA,CAAc,GAAI;AAAA,MAClCxV,gBAAAA,MAACu7C,IAAA,EACC,UAAAv7C,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,yDAA2C,EAAA,CAChD;AAAA,IAAA,GACF;AAAA,IAGAvV,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,MAAAD,gBAAAA,EAAAA,IAAC8hE,IAAA,EAAO,WAAU,mFAAA,CAAmF;AAAA,MACrG9hE,gBAAAA,EAAAA;AAAAA,QAACo9C;AAAA,QAAA;AAAA,UACC,aAAavpC,GAAU,0BAA0B;AAAA,UACjD,OAAOusD;AAAA,UACP,UAAU,CAAC3rE,MAAM4rE,EAAe5rE,EAAE,OAAO,KAAK;AAAA,UAC9C,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IACZ,GACF;AAAA,IAGAwL,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,aAEZ,UAAA;AAAA,MAAA+/D,EAAQ,SAAS,KAChB//D,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,QAAAA,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,qEACb,UAAA;AAAA,UAAAD,gBAAAA,EAAAA,IAAC+hE,IAAA,EAAI,WAAU,UAAA,CAAU;AAAA,UACzB/hE,gBAAAA,MAAC,QAAA,EAAK,UAAAA,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,kBAAI,GAAI;AAAA,UAChB8qD,EAAa,SAAS,KACrBtgE,gBAAAA,EAAAA;AAAAA,YAAC+U;AAAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS,MAAMwrD,EAAgB,EAAE;AAAA,cAEjC,UAAAvgE,gBAAAA,EAAAA,IAACwV,MAAE,UAAA,QAAA,CAAK;AAAA,YAAA;AAAA,UAAA;AAAA,QACV,GAEJ;AAAA,QACAxV,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,wBACZ,UAAAggE,EAAQ,MAAM,GAAG,EAAE,EAAE,IAAI,CAAAp4C,MACxB3nB,gBAAAA,EAAAA;AAAAA,UAACi9D;AAAA,UAAA;AAAA,YAEC,SAASoD,EAAa,SAAS14C,CAAG,IAAI,YAAY;AAAA,YAClD,WAAU;AAAA,YACV,SAAS,MAAM;AACb,cAAA24C;AAAA,gBAAgB,CAAAqB,MACdA,EAAK,SAASh6C,CAAG,IACbg6C,EAAK,OAAO,CAAAjsD,OAAKA,OAAMiS,CAAG,IAC1B,CAAC,GAAGg6C,GAAMh6C,CAAG;AAAA,cAAA;AAAA,YAErB;AAAA,YAEC,UAAA;AAAA,cAAAA;AAAA,cACA04C,EAAa,SAAS14C,CAAG,KACxB5nB,gBAAAA,EAAAA,IAAC+Y,IAAA,EAAE,WAAU,eAAA,CAAe;AAAA,YAAA;AAAA,UAAA;AAAA,UAbzB6O;AAAA,QAAA,CAgBR,EAAA,CACH;AAAA,MAAA,GACF;AAAA,MAIDs4C,EAAY,SAAS,KACpBjgE,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,QAAAA,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,qEACb,UAAA;AAAA,UAAAD,gBAAAA,EAAAA,IAACgiE,IAAA,EAAW,WAAU,UAAA,CAAU;AAAA,UAChChiE,gBAAAA,MAAC,QAAA,EAAK,UAAAA,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,yBAAW,GAAI;AAAA,UACvBgrD,EAAoB,SAAS,KAC5BxgE,gBAAAA,EAAAA;AAAAA,YAAC+U;AAAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS,MAAM0rD,EAAuB,EAAE;AAAA,cAExC,UAAAzgE,gBAAAA,EAAAA,IAACwV,MAAE,UAAA,QAAA,CAAK;AAAA,YAAA;AAAA,UAAA;AAAA,QACV,GAEJ;AAAA,8BACC,OAAA,EAAI,WAAU,wBACZ,UAAA0qD,EAAY,IAAI,CAAA+B,MACfhiE,gBAAAA,EAAAA;AAAAA,UAACi9D;AAAA,UAAA;AAAA,YAEC,SAASsD,EAAoB,SAASyB,EAAW,EAAE,IAAI,YAAY;AAAA,YACnE,WAAU;AAAA,YACV,SAAS,MAAM;AACb,cAAAxB;AAAA,gBAAuB,OACrBmB,EAAK,SAASK,EAAW,EAAE,IACvBL,EAAK,OAAO,CAAAxtE,OAAKA,OAAM6tE,EAAW,EAAE,IACpC,CAAC,GAAGL,GAAMK,EAAW,EAAE;AAAA,cAAA;AAAA,YAE/B;AAAA,YAEC,UAAA;AAAA,cAAAA,EAAW;AAAA,cACXzB,EAAoB,SAASyB,EAAW,EAAE,KACzCjiE,gBAAAA,EAAAA,IAAC+Y,IAAA,EAAE,WAAU,eAAA,CAAe;AAAA,YAAA;AAAA,UAAA;AAAA,UAbzBkpD,EAAW;AAAA,QAAA,CAgBnB,EAAA,CACH;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GAEJ;AAAA,IAGAjiE,gBAAAA,EAAAA,IAAC,SAAI,WAAU,6CACZ,cACCA,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,0CACb,UAAAA,gBAAAA,EAAAA,IAAC,SAAI,WAAU,8DAAA,CAA8D,GAC/E,IACEqhE,EAAc,WAAW,IAC3BphE,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,MAAAD,gBAAAA,EAAAA,IAACkiE,IAAA,EAAU,WAAU,0DAAA,CAA0D;AAAA,MAC/EliE,gBAAAA,MAAC,KAAA,EAAE,WAAU,yBACX,gCAACwV,IAAA,EAAG,UAAA4qD,KAAeE,EAAa,SAAS,KAAKE,EAAoB,SAAS,IAAI,sBAAsB,yBAAwB,EAAA,CAC/H;AAAA,IAAA,EAAA,CACF,0BAEC,OAAA,EAAI,WAAU,4DACZ,UAAAa,EAAc,IAAI,CAACc,MAAY;AAC9B,YAAMlK,IAAa2H,IACfc,EAAY,SAASyB,EAAQ,EAAE,IAC/BvB,MAAeuB,EAAQ;AAE3B,aACEliE,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UAEC,SAAS,MAAM0hE,EAAgBQ,EAAQ,EAAE;AAAA,UACzC,eAAe,MAAM;AACnB,YAAKvC,IAIH+B,EAAgBQ,EAAQ,EAAE,KAH1BtB,EAAcsB,EAAQ,EAAE,GACpB3C,KAAUA,EAAS2C,EAAQ,EAAE;AAAA,UAIrC;AAAA,UACA,WAAW,oFAAoFlK,IAC3F,0CACA,4CACF;AAAA,UAEF,UAAA;AAAA,YAAAj4D,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,8CACb,UAAAA,gBAAAA,EAAAA;AAAAA,cAACoiE;AAAA,cAAA;AAAA,gBACC,IAAID,EAAQ;AAAA,gBACZ,WAAWA,EAAQ;AAAA,gBACnB,KAAKA,EAAQ;AAAA,gBACb,cAAcA,EAAQ;AAAA,gBACtB,OAAOA,EAAQ;AAAA,gBACf,QAAQ;AAAA,gBACR,UAAUA,EAAQ;AAAA,gBAClB,OAAO;AAAA,gBACP,UAAU;AAAA,gBACV,MAAMA,EAAQ;AAAA,gBACd,MAAMA,EAAQ;AAAA,gBACd,aAAa;AAAA,gBACb,SAAS,MAAM;AAAA,gBAAE;AAAA,gBACjB,QAAQ;AAAA,gBACR,UAAU;AAAA,gBACV,QAAQ;AAAA,cAAA;AAAA,YAAA,GAEZ;AAAA,YAEAniE,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,0GACb,UAAAA,gBAAAA,EAAAA,IAAC,OAAE,WAAU,2CACV,UAAAmiE,EAAQ,MAAA,CACX,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,QAxCKA,EAAQ;AAAA,MAAA;AAAA,IA2CnB,CAAC,GACH,GAEJ;AAAA,IAGAliE,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,2DACb,UAAA;AAAA,MAAAD,gBAAAA,MAAC,OAAA,EAAI,WAAU,iCACZ,UAAA4/D,4BAAa,QAAA,EAAM,UAAA;AAAA,QAAAc,EAAY;AAAA,QAAO;AAAA,MAAA,EAAA,CAAS,EAAA,CAClD;AAAA,MACAzgE,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,QAAAD,gBAAAA,EAAAA,IAAC+U,IAAA,EAAO,SAAQ,WAAU,SAASwqD,GACjC,UAAAv/D,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,oBAAM,EAAA,CACX;AAAA,QACAxV,gBAAAA,EAAAA,IAAC+U,IAAA,EAAO,SAAS0sD,GAAc,UAAU7B,IAAWc,EAAY,WAAW,IAAI,CAACE,GAC9E,UAAA3gE,gBAAAA,EAAAA,KAACuV,IAAA,EAAE,UAAA;AAAA,UAAA;AAAA,UAAeoqD,IAAW,MAAM;AAAA,QAAA,EAAA,CAAG,EAAA,CACxC;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ,GChZMyC,KAAyBztE,GAAM,KAAK,MAAM,OAAO,sCAAkD,CAAC,GAUpG0tE,KAAgD,CAAC;AAAA,EACrD,OAAAxmE;AAAA,EACA,UAAA2mC;AAAA,EACA,aAAA8/B,IAAc;AAAA,EACd,WAAA3gE,IAAY;AAAA,EACZ,WAAAk6D;AACF,MAAM;AACJ,QAAM,CAAC0G,GAAWC,CAAY,IAAI3hE,GAA2B,QAAQ,GAC/D,CAAC4hE,GAAiBC,CAAkB,IAAI7hE,GAAS,EAAK,GACtD8hE,IAAyBC,GAAuC,IAAI;AAGhD,EAAAC,GAAY,CAACC,OACrC,QAAQ,IAAI,wEAAwE,GAC7E,IAAI,QAAQ,CAACC,MAAY;AAC9B,IAAAJ,EAAuB,UAAUI,GACjC,QAAQ,IAAI,oDAAoD,GAChEL,EAAmB,EAAI;AAAA,EACzB,CAAC,IACA,CAAA,CAAE;AAGL,QAAMM,IAAoBH,GAAY,OAAOI,MAAsB;AACjE,YAAQ,IAAI,4CAA4CA,CAAS;AACjE,QAAI;AAEF,YAAM,EAAE,MAAAtiE,GAAM,OAAA5K,EAAA,IAAU,MAAMgN,GAC3B,KAAK,UAAU,EACf,OAAO,WAAW,EAClB,GAAG,MAAMkgE,CAAS,EAClB,OAAA;AAEH,UAAIltE,EAAO,OAAMA;AAEjB,YAAMmtE,IAAWviE,EAAK,WAEhBwiE,IAAcR,EAAuB;AAE3C,MAAIQ,MACFR,EAAuB,UAAU,MACjCQ,EAAYD,CAAQ,IAGtBR,EAAmB,EAAK;AAAA,IAC1B,SAAS3sE,GAAO;AACd,cAAQ,MAAM,6CAA6CA,CAAK,GAC5D4sE,EAAuB,YACzBA,EAAuB,QAAQ,EAAE,GACjCA,EAAuB,UAAU,OAEnCD,EAAmB,EAAK;AAAA,IAC1B;AAAA,EACF,GAAG,CAAA,CAAE,GAECU,IAAkBP,GAAY,CAACruE,MAA8C;AACjF,IAAAguC,EAAShuC,EAAE,OAAO,KAAK;AAAA,EACzB,GAAG,CAACguC,CAAQ,CAAC;AAEb,SACExiC,gBAAAA,EAAAA,KAAA+6C,YAAA,EACE,UAAA;AAAA,IAAA/6C,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAW,mCAAmC2B,CAAS,IAC1D,UAAA;AAAA,MAAA3B,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,iBACb,UAAA;AAAA,QAAAD,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS,MAAMyiE,EAAa,QAAQ;AAAA,YACpC,WAAW,8DAA8DD,MAAc,WACnF,gCACA,oFACF;AAAA,YACH,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGDxiE,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS,MAAMyiE,EAAa,KAAK;AAAA,YACjC,WAAW,8DAA8DD,MAAc,QACnF,gCACA,oFACF;AAAA,YACH,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED,GACF;AAAA,MACCA,MAAc,YACbxiE,gBAAAA,EAAAA,IAACpL,GAAM,UAAN,EAAe,UAAUoL,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,6BAA4B,UAAA,oBAAA,CAAiB,GACpF,UAAAA,gBAAAA,EAAAA;AAAAA,QAACqiE;AAAA,QAAA;AAAA,UACC,OAAAvmE;AAAA,UACA,UAAA2mC;AAAA,UACA,WAAA7gC;AAAA,QAAA;AAAA,MAAA,GAEJ;AAAA,MAED4gE,MAAc,SACbxiE,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAOlE,KAAS;AAAA,UAChB,UAAUunE;AAAA,UACV,WAAAvH;AAAA,UACA,aAAAyG;AAAA,UACA,WAAU;AAAA,UACV,OAAO,EAAE,QAAQ,SAAS,WAAW,QAAA;AAAA,UACrC,cAAW;AAAA,UACX,WAAS;AAAA,QAAA;AAAA,MAAA;AAAA,IACX,GAEJ;AAAA,IAGAviE,gBAAAA,EAAAA;AAAAA,MAACq/D;AAAA,MAAA;AAAA,QACC,QAAQqD;AAAA,QACR,SAAS,MAAM;AACb,UAAAC,EAAmB,EAAK,GAEpBC,EAAuB,YACzBA,EAAuB,QAAQ,EAAE,GACjCA,EAAuB,UAAU;AAAA,QAErC;AAAA,QACA,UAAUK;AAAA,QACV,cAAc;AAAA,MAAA;AAAA,IAAA;AAAA,EAChB,GACF;AAEJ;AAEAX,GAAe,cAAc;AAG7B,MAAAgB,KAAe1uE,GAAM,KAAK0tE,IAAgB,CAACiB,GAAWC,MAGlDD,EAAU,UAAUC,EAAU,SAC9BD,EAAU,gBAAgBC,EAAU,eACpCD,EAAU,cAAcC,EAAU,aAClCD,EAAU,cAAcC,EAAU,SAGrC;AC1GD,IAAI/6D,KAAuB,OAAO,iBAAiB;AAAA;AAEnD,SAASg7D,GAAgBh8D,GAAW;AAClC,QAAMi8D,IAAa,CAAC,EAAE,UAAA/jE,QACGK,gBAAAA,MAAI2jE,EAAAA,UAAW,EAAE,UAAAhkE,GAAU;AAEpD,SAAA+jE,EAAW,cAAc,GAAGj8D,CAAS,cACrCi8D,EAAW,YAAYj7D,IAChBi7D;AACT;AC5CA,IAAIE,KAAY,eACZ,CAACC,EAAgD,IAAIljC,GAAmBijC,IAAW;AAAA,EACrFtrB;AACF,CAAC,GACGwrB,KAAiBxrB,GAAiB,GAClCyrB,KAAc,CAACnrE,MAAU;AAC3B,QAAM,EAAE,oBAAAorE,GAAoB,GAAGC,EAAgB,IAAKrrE,GAC9CsrE,IAAcJ,GAAeE,CAAkB;AACrD,SAAuBhkE,gBAAAA,EAAAA,IAAI48C,IAAsB,EAAE,GAAGsnB,GAAa,GAAGD,GAAkB,OAAO,IAAM;AACvG;AACAF,GAAY,cAAcH;AAC1B,IAAIxqB,KAAe,sBACf+qB,KAAqBvvE,EAAM;AAAA,EAC7B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,oBAAAm8D,GAAoB,GAAG1qB,EAAY,IAAK1gD,GAC1CsrE,IAAcJ,GAAeE,CAAkB;AACrD,WAAuBhkE,gBAAAA,EAAAA,IAAIokE,IAAyB,EAAE,GAAGF,GAAa,GAAG5qB,GAAc,KAAKzxC,GAAc;AAAA,EAC5G;AACF;AACAs8D,GAAmB,cAAc/qB;AACjC,IAAIjP,KAAc,qBACdk6B,KAAoB,CAACzrE,MAAU;AACjC,QAAM,EAAE,oBAAAorE,GAAoB,GAAG15B,EAAW,IAAK1xC,GACzCsrE,IAAcJ,GAAeE,CAAkB;AACrD,SAAuBhkE,gBAAAA,EAAAA,IAAI68C,IAAwB,EAAE,GAAGqnB,GAAa,GAAG55B,EAAW,CAAE;AACvF;AACA+5B,GAAkB,cAAcl6B;AAChC,IAAI2P,KAAe,sBACfwqB,KAAqB1vE,EAAM;AAAA,EAC7B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,oBAAAm8D,GAAoB,GAAG/pB,EAAY,IAAKrhD,GAC1CsrE,IAAcJ,GAAeE,CAAkB;AACrD,WAAuBhkE,gBAAAA,EAAAA,IAAI88C,IAAyB,EAAE,GAAGonB,GAAa,GAAGjqB,GAAc,KAAKpyC,GAAc;AAAA,EAC5G;AACF;AACAy8D,GAAmB,cAAcxqB;AACjC,IAAIK,KAAe,sBACf,CAACoqB,IAA4BC,EAA4B,IAAIX,GAAyB1pB,EAAY,GAClGsqB,KAAY,gBAAAhB,GAAgB,oBAAoB,GAChDiB,KAAqB9vE,EAAM;AAAA,EAC7B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,oBAAAm8D,GAAoB,UAAArkE,GAAU,GAAG06C,EAAY,IAAKzhD,GACpDsrE,IAAcJ,GAAeE,CAAkB,GAC/ChrB,IAAapkD,EAAM,OAAO,IAAI,GAC9BuwC,IAAe/9B,GAAgBS,GAAcmxC,CAAU,GACvD2rB,IAAY/vE,EAAM,OAAO,IAAI;AACnC,WAAuBoL,gBAAAA,EAAAA;AAAAA,MACrB4kE;AAAAA,MACA;AAAA,QACE,aAAazqB;AAAAA,QACb,WAAWgB;AAAA,QACX,UAAU;AAAA,QACV,UAA0Bn7C,gBAAAA,EAAAA,IAAIukE,IAA4B,EAAE,OAAOP,GAAoB,WAAAW,GAAW,UAA0B1kE,gBAAAA,EAAAA;AAAAA,UAC1H88C;AAAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,GAAGmnB;AAAA,YACH,GAAG7pB;AAAA,YACH,KAAKlV;AAAA,YACL,iBAAiBpF,GAAqBsa,EAAa,iBAAiB,CAACla,MAAU;;AAC7E,cAAAA,EAAM,eAAc,IACpBv9B,IAAA+hE,EAAU,YAAV,QAAA/hE,EAAmB,MAAM,EAAE,eAAe,GAAI;AAAA,YAChD,CAAC;AAAA,YACD,sBAAsB,CAACu9B,MAAUA,EAAM,eAAc;AAAA,YACrD,mBAAmB,CAACA,MAAUA,EAAM,eAAc;AAAA,YAClD,UAAU;AAAA,cACQngC,gBAAAA,MAAIykE,IAAW,EAAE,UAAA9kE,GAAU;AAAA,cAC3BK,gBAAAA,MAAIk7C,IAAoB,EAAE,YAAAlC,EAAU,CAAE;AAAA,YACpE;AAAA,UACA;AAAA,QACA,EAAS,CAAE;AAAA,MACX;AAAA,IACA;AAAA,EACE;AACF;AACA0rB,GAAmB,cAAcvqB;AACjC,IAAIgB,KAAa,oBACb0pB,KAAmBjwE,EAAM;AAAA,EAC3B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,oBAAAm8D,GAAoB,GAAG3oB,EAAU,IAAKziD,GACxCsrE,IAAcJ,GAAeE,CAAkB;AACrD,WAAuBhkE,gBAAAA,EAAAA,IAAIk9C,IAAuB,EAAE,GAAGgnB,GAAa,GAAG7oB,GAAY,KAAKxzC,GAAc;AAAA,EACxG;AACF;AACAg9D,GAAiB,cAAc1pB;AAC/B,IAAIG,KAAmB,0BACnBwpB,KAAyBlwE,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACrE,QAAM,EAAE,oBAAAm8D,GAAoB,GAAGxoB,EAAgB,IAAK5iD,GAC9CsrE,IAAcJ,GAAeE,CAAkB;AACrD,SAAuBhkE,gBAAAA,EAAAA,IAAIm9C,IAA6B,EAAE,GAAG+mB,GAAa,GAAG1oB,GAAkB,KAAK3zC,GAAc;AACpH,CAAC;AACDi9D,GAAuB,cAAcxpB;AACrC,IAAIypB,KAAc,qBACdC,KAAoBpwE,EAAM;AAAA,EAC5B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,oBAAAm8D,GAAoB,GAAGiB,EAAW,IAAKrsE,GACzCsrE,IAAcJ,GAAeE,CAAkB;AACrD,WAAuBhkE,gBAAAA,EAAAA,IAAIg9C,IAAuB,EAAE,GAAGknB,GAAa,GAAGe,GAAa,KAAKp9D,GAAc;AAAA,EACzG;AACF;AACAm9D,GAAkB,cAAcD;AAChC,IAAIG,KAAc,qBACdC,KAAoBvwE,EAAM;AAAA,EAC5B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,oBAAAm8D,GAAoB,GAAGoB,EAAW,IAAKxsE,GACzC,EAAE,WAAA+rE,EAAS,IAAKH,GAA6BU,IAAalB,CAAkB,GAC5EE,IAAcJ,GAAeE,CAAkB,GAC/C7mE,IAAMiK,GAAgBS,GAAc88D,CAAS;AACnD,WAAuB3kE,gBAAAA,EAAAA,IAAIg9C,IAAuB,EAAE,GAAGknB,GAAa,GAAGkB,GAAa,KAAAjoE,GAAK;AAAA,EAC3F;AACF;AACAgoE,GAAkB,cAAcD;AAChC,IAAIhqB,KAAqB,CAAC,EAAE,YAAAlC,QAAiB;AAC3C,QAAMiD,IAAU,KAAK9B,EAAY;AAAA;AAAA,qCAEEA,EAAY,qBAAqBmB,EAAgB;AAAA;AAAA,4JAEsEnB,EAAY;AAAA;AAAA;AAGtK,SAAAvlD,EAAM,UAAU,MAAM;;AAIpB,IAHuB,SAAS;AAAA,OAC9BgO,IAAAo2C,EAAW,YAAX,gBAAAp2C,EAAoB,aAAa;AAAA,IACvC,KACyB,QAAQ,KAAKq5C,CAAO;AAAA,EAC3C,GAAG,CAACA,GAASjD,CAAU,CAAC,GACjB;AACT,GACIwf,KAAQuL,IAERsB,KAAUhB,IACViB,KAAWhB,IACXiB,KAAWb,IACXc,KAASR,IACTS,KAASN,IACTO,KAASb,IACTc,KAAeb;AC7InB,MAAMf,KAAc6B,IAIdvB,KAAoBwB,IAEpBvB,KAAqB1vE,EAAM,WAG/B,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA;AAAAA,EAAC8lE;AAAAA,EAAA;AAAA,IACC,WAAWlxD;AAAA,MACT;AAAA,MACAhT;AAAA,IAAA;AAAA,IAED,GAAGhJ;AAAA,IACJ,KAAAuE;AAAA,EAAA;AACF,CACD;AACDmnE,GAAmB,cAAcwB,GAA6B;AAE9D,MAAMpB,KAAqB9vE,EAAM,WAG/B,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B8C,gBAAAA,EAAAA,KAACokE,IAAA,EACC,UAAA;AAAA,EAAArkE,gBAAAA,EAAAA,IAACskE,IAAA,EAAmB;AAAA,EACpBtkE,gBAAAA,EAAAA;AAAAA,IAAC+lE;AAAAA,IAAA;AAAA,MACC,KAAA5oE;AAAA,MACA,WAAWyX;AAAA,QACT;AAAA,QACAhT;AAAA,MAAA;AAAA,MAED,GAAGhJ;AAAA,IAAA;AAAA,EAAA;AACN,EAAA,CACF,CACD;AACD8rE,GAAmB,cAAcqB,GAA6B;AAE9D,MAAMC,KAAoB,CAAC,EAAE,WAAApkE,GAAW,GAAGhJ,EAAA,MACzCoH,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAW4U,GAAG,oDAAoDhT,CAAS,GAAI,GAAGhJ,EAAA,CAAO;AAEhGotE,GAAkB,cAAc;AAEhC,MAAMC,KAAoB,CAAC,EAAE,WAAArkE,GAAW,GAAGhJ,EAAA,MACzCoH,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAW4U,GAAG,iEAAiEhT,CAAS,GAAI,GAAGhJ,EAAA,CAAO;AAE7GqtE,GAAkB,cAAc;AAEhC,MAAMpB,KAAmBjwE,EAAM,WAG7B,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA,IAACkmE,IAAA,EAA2B,KAAA/oE,GAAU,WAAWyX,GAAG,yBAAyBhT,CAAS,GAAI,GAAGhJ,EAAA,CAAO,CACrG;AACDisE,GAAiB,cAAcqB,GAA2B;AAE1D,MAAMpB,KAAyBlwE,EAAM,WAGnC,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA,IAACmmE,IAAA,EAAiC,KAAAhpE,GAAU,WAAWyX,GAAG,iCAAiChT,CAAS,GAAI,GAAGhJ,EAAA,CAAO,CACnH;AACDksE,GAAuB,cAAcqB,GAAiC;AAEtE,MAAMnB,KAAoBpwE,EAAM,WAG9B,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA,IAAComE,IAAA,EAA4B,KAAAjpE,GAAU,WAAWyX,GAAGE,GAAA,GAAkBlT,CAAS,GAAI,GAAGhJ,EAAA,CAAO,CAC/F;AACDosE,GAAkB,cAAcoB,GAA4B;AAE5D,MAAMjB,KAAoBvwE,EAAM,WAG9B,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA;AAAAA,EAACqmE;AAAAA,EAAA;AAAA,IACC,KAAAlpE;AAAA,IACA,WAAWyX,GAAGE,GAAe,EAAE,SAAS,WAAW,GAAG,gBAAgBlT,CAAS;AAAA,IAC9E,GAAGhJ;AAAA,EAAA;AACN,CACD;AACDusE,GAAkB,cAAckB,GAA4B;ACrD5D,MAAMC,KAAkD,CAAC;AAAA,EACvD,kBAAAC;AAAA,EACA,iBAAAC;AACF,MAAM;AACJ,QAAM,EAAE,MAAA3G,EAAA,IAASxqD,GAAA,GACX,CAACoxD,GAAUC,CAAW,IAAI5lE,GAAoB,CAAA,CAAE,GAChD,CAACC,GAASC,CAAU,IAAIF,GAAS,EAAI,GACrC,CAAC6lE,GAAUC,CAAW,IAAI9lE,GAAwB,IAAI,GACtD,CAAC+lE,GAAUC,CAAW,IAAIhmE,GAAwB,IAAI,GACtD,CAACimE,GAAkBC,CAAmB,IAAIlmE,GAAS,EAAK,GACxD,CAACmmE,GAAiBC,CAAkB,IAAIpmE,GAAyB,IAAI,GACrE,CAACqmE,GAAYC,CAAa,IAAItmE,GAAS,EAAK;AAElD,EAAAI,GAAU,MAAM;AACd,IAAAmmE,EAAA;AAAA,EACF,GAAG,CAACd,CAAgB,CAAC;AAErB,QAAMc,IAAe,YAAY;AAC/B,QAAI,GAACxH,KAAQ,CAAC0G,IAEd;AAAA,MAAAvlE,EAAW,EAAI;AACf,UAAI;AAEF,cAAM,EAAE,MAAMsmE,GAAgB,OAAOpY,EAAA,IAAiB,MAAMlsD,GACzD,KAAK,UAAU,EACf,OAAO,mEAAmE,EAC1E,GAAG,MAAMujE,CAAgB,EACzB,OAAA;AAEH,YAAIrX,EAAc,OAAMA;AAGxB,cAAMqY,IAAeD,EAAe,aAAaA,EAAe,IAG1D,EAAE,MAAME,GAAa,OAAOC,EAAA,IAAkB,MAAMzkE,GACvD,KAAK,UAAU,EACf,OAAO,4EAA4E,EACnF,GAAG,WAAW68D,EAAK,EAAE,EACrB,GAAG,SAAS0H,CAAY,iBAAiBA,CAAY,EAAE,EACvD,MAAM,cAAc,EAAE,WAAW,IAAM;AAE1C,YAAIE,EAAe,OAAMA;AAEzB,QAAAf,EAAYc,KAAe,EAAE;AAAA,MAC/B,SAASxxE,GAAO;AACd,gBAAQ,MAAM,2BAA2BA,CAAK,GAC9C0xE,GAAM,MAAM7zD,GAAU,+BAA+B,CAAC;AAAA,MACxD,UAAA;AACE,QAAA7S,EAAW,EAAK;AAAA,MAClB;AAAA;AAAA,EACF,GAEM2mE,IAAsB,OAAOC,MAAsB;;AACvD,QAAK/H,GAEL;AAAA,MAAA+G,EAAYgB,CAAS;AACrB,UAAI;AAEF,cAAML,MAAe3kE,IAAA6jE,EAAS,KAAK,CAAA3gE,MAAKA,EAAE,cAAc,IAAI,MAAvC,gBAAAlD,EAA0C,OAAM2jE;AAErE,cAAMvjE,GACH,KAAK,UAAU,EACf,OAAO,EAAE,aAAa,IAAO,EAC7B,GAAG,WAAW68D,EAAK,EAAE,EACrB,GAAG,SAAS0H,CAAY,iBAAiBA,CAAY,EAAE;AAG1D,cAAM,EAAE,OAAOM,MAAgB,MAAM7kE,GAClC,KAAK,UAAU,EACf,OAAO,EAAE,aAAa,IAAM,EAC5B,GAAG,MAAM4kE,CAAS,EAClB,GAAG,WAAW/H,EAAK,EAAE;AAExB,YAAIgI,EAAa,OAAMA;AAGvB,QAAAnB;AAAA,UAAY,CAAAoB,MACVA,EAAa,IAAI,CAAAhiE,OAAM;AAAA,YACrB,GAAGA;AAAA,YACH,aAAaA,EAAE,OAAO8hE;AAAA,UAAA,EACtB;AAAA,QAAA,GAGJF,GAAM,QAAQ7zD,GAAU,gCAAgC,CAAC,GACzD2yD,EAAgBoB,CAAS;AAAA,MAC3B,SAAS5xE,GAAO;AACd,gBAAQ,MAAM,4BAA4BA,CAAK,GAC/C0xE,GAAM,MAAM7zD,GAAU,0BAA0B,CAAC;AAAA,MACnD,UAAA;AACE,QAAA+yD,EAAY,IAAI;AAAA,MAClB;AAAA;AAAA,EACF,GAEMmB,IAAyB,OAAOH,GAAmBI,MAA+B;AACtF,QAAKnI,GAEL;AAAA,MAAAiH,EAAYc,CAAS;AACrB,UAAI;AACF,cAAM,EAAE,OAAA5xE,MAAU,MAAMgN,GACrB,KAAK,UAAU,EACf,OAAO,EAAE,SAAS,CAACglE,GAAmB,EACtC,GAAG,MAAMJ,CAAS,EAClB,GAAG,WAAW/H,EAAK,EAAE;AAExB,YAAI7pE,EAAO,OAAMA;AAGjB,QAAA0wE;AAAA,UAAY,CAAAoB,MACVA,EAAa,IAAI,CAAAhiE,OAAM;AAAA,YACrB,GAAGA;AAAA,YACH,SAASA,EAAE,OAAO8hE,IAAY,CAACI,IAAoBliE,EAAE;AAAA,UAAA,EACrD;AAAA,QAAA,GAGJ4hE,GAAM,QAAQ7zD,GAAWm0D,IAA2D,iCAAvC,oCAAqE,CAAC;AAAA,MACrH,SAAShyE,GAAO;AACd,gBAAQ,MAAM,8BAA8BA,CAAK,GACjD0xE,GAAM,MAAM7zD,GAAU,6BAA6B,CAAC;AAAA,MACtD,UAAA;AACE,QAAAizD,EAAY,IAAI;AAAA,MAClB;AAAA;AAAA,EACF,GAEMmB,IAAoB,CAACh4C,MAAqB;AAC9C,IAAAi3C,EAAmBj3C,CAAO,GAC1B+2C,EAAoB,EAAI;AAAA,EAC1B,GAEMkB,IAAgB,YAAY;;AAChC,QAAI,GAACjB,KAAmB,CAACpH,IAEzB;AAAA,MAAAuH,EAAc,EAAI;AAClB,UAAI;AAEF,cAAM,EAAE,MAAMe,GAAiB,OAAOC,EAAA,IAAc,MAAMplE,GACvD,KAAK,UAAU,EACf,OAAO,GAAG,EACV,GAAG,WAAW68D,EAAK,EAAE;AAExB,YAAIuI,EAAW,OAAMA;AAErB,cAAMC,IAAkB,CAACC,MAA+C;AACtE,gBAAMC,IAAwC,CAAA;AAE9C,iBADiBJ,EAAgB,OAAO,CAAAj0E,MAAKA,EAAE,cAAco0E,CAAQ,EAC5D,QAAQ,CAAA3pE,MAAS;AACxB,YAAA4pE,EAAY,KAAK5pE,CAAK,GACtB4pE,EAAY,KAAK,GAAGF,EAAgB1pE,EAAM,EAAE,CAAC;AAAA,UAC/C,CAAC,GACM4pE;AAAA,QACT,GAEMC,IAAsBH,EAAgBpB,EAAgB,EAAE,GACxDwB,IAAc,CAACxB,GAAiB,GAAGuB,CAAmB;AAG5D,mBAAW9xE,KAAQ+xE;AACjB,eAAI7lE,IAAAlM,EAAK,cAAL,QAAAkM,EAAgB,SAAS,yBAAyB;AACpD,kBAAM8lE,IAAWhyE,EAAK,UAAU,MAAM,GAAG,GACnCiyE,IAAWD,EAASA,EAAS,SAAS,CAAC,GACvCE,IAAa,GAAGlyE,EAAK,OAAO,IAAIiyE,CAAQ;AAE9C,kBAAM3lE,GAAS,QACZ,KAAK,UAAU,EACf,OAAO,CAAC4lE,CAAU,CAAC;AAAA,UACxB;AAIF,cAAM,EAAE,OAAOC,EAAA,IAAY,MAAM7lE,GAC9B,KAAK,UAAU,EACf,OAAA,EACA,GAAG,MAAMylE,EAAY,IAAI,CAAA3iE,MAAKA,EAAE,EAAE,CAAC;AAEtC,YAAI+iE,EAAS,OAAMA;AAGnB,cAAMC,IAAa,IAAI,IAAIL,EAAY,IAAI,CAAA3iE,MAAKA,EAAE,EAAE,CAAC;AACrD,QAAA4gE,EAAY,CAAA9E,MAAQA,EAAK,OAAO,CAAA97D,MAAK,CAACgjE,EAAW,IAAIhjE,EAAE,EAAE,CAAC,CAAC;AAE3D,cAAMijE,IAAeN,EAAY;AACjC,QAAAf,GAAM,QAAQ7zD,GAAU,WAAWk1D,IAAe,IAAI,GAAGA,CAAY,cAAc,SAAS,eAAe,CAAC;AAAA,MAE9G,SAAS/yE,GAAO;AACd,gBAAQ,MAAM,2BAA2BA,CAAK,GAC9C0xE,GAAM,MAAM7zD,GAAU,0BAA0B,CAAC;AAAA,MACnD,UAAA;AACE,QAAAuzD,EAAc,EAAK,GACnBJ,EAAoB,EAAK,GACzBE,EAAmB,IAAI;AAAA,MACzB;AAAA;AAAA,EACF;AAEA,SAAInmE,IAEAf,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,wCACb,UAAAA,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,yBAAwB,UAAAA,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,UAAA,sBAAA,CAAmB,EAAA,CAAI,GACnE,IAIAixD,EAAS,UAAU,IAEnBzmE,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,mBACb,UAAAA,gBAAAA,EAAAA,IAAC,KAAA,EAAE,WAAU,yBAAwB,UAAAA,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,UAAA,8CAAA,CAA2C,EAAA,CAAI,GACzF,IAKFvV,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,IAAAA,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,MAAAD,gBAAAA,EAAAA,IAACkiE,IAAA,EAAU,WAAU,UAAA,CAAU;AAAA,4BAC9B,MAAA,EAAG,WAAU,iBAAgB,UAAAliE,gBAAAA,MAACwV,IAAA,EAAE,4BAAc,EAAA,CAAI;AAAA,MACnDxV,gBAAAA,EAAAA,IAACk9D,IAAA,EAAM,SAAQ,aAAa,YAAS,OAAA,CAAO;AAAA,IAAA,GAC9C;AAAA,0BAEC,OAAA,EAAI,WAAU,yCACZ,UAAAuJ,EAAS,IAAI,CAACx2C,MACbjwB,gBAAAA,EAAAA;AAAAA,MAAC28D;AAAA,MAAA;AAAA,QAEC,WAAW,iDAAiD1sC,EAAQ,cAAc,wBAAwB,EACxG;AAAA,QAEF,UAAAhwB,gBAAAA,EAAAA,KAAC88D,IAAA,EAAY,WAAU,OACrB,UAAA;AAAA,UAAA98D,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,0DACb,UAAA;AAAA,YAAAD,gBAAAA,EAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAKiwB,EAAQ;AAAA,gBACb,KAAKA,EAAQ;AAAA,gBACb,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAEXA,EAAQ,eACPjwB,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,8EACb,UAAAA,gBAAAA,EAAAA,IAAC08D,IAAA,EAAM,WAAU,UAAA,CAAU,EAAA,CAC7B;AAAA,UAAA,GAEJ;AAAA,UAEAz8D,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,YAAAD,gBAAAA,EAAAA,IAAC,KAAA,EAAE,WAAU,gCAAgC,UAAAiwB,EAAQ,OAAM;AAAA,YAC3DjwB,gBAAAA,EAAAA,IAAC,KAAA,EAAE,WAAU,iCACV,UAAA,IAAI,KAAKiwB,EAAQ,UAAU,EAAE,mBAAA,EAAmB,CACnD;AAAA,YACAhwB,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,2BACZ,UAAA;AAAA,cAAAgwB,EAAQ,cAAc,QACrBjwB,gBAAAA,EAAAA,IAACk9D,IAAA,EAAM,SAAQ,WAAU,WAAU,WAAU,UAAAl9D,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,UAAA,WAAA,CAAQ,GAAI;AAAA,cAE7D,CAACya,EAAQ,WACRjwB,gBAAAA,EAAAA,IAACk9D,IAAA,EAAM,SAAQ,aAAY,WAAU,WAAU,UAAAl9D,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,UAAA,SAAA,CAAM,EAAA,CAAI;AAAA,YAAA,EAAA,CAEhE;AAAA,UAAA,GACF;AAAA,UAEAvV,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,mBACb,UAAA;AAAA,YAAAD,gBAAAA,EAAAA;AAAAA,cAAC+U;AAAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,SAASkb,EAAQ,cAAc,YAAY;AAAA,gBAC3C,SAAS,MAAM03C,EAAoB13C,EAAQ,EAAE;AAAA,gBAC7C,UAAU02C,MAAa12C,EAAQ;AAAA,gBAE/B,UAAAjwB,gBAAAA,EAAAA,IAACwV,MAAG,UAAAmxD,MAAa12C,EAAQ,KAAK,iBAC5BA,EAAQ,cAAc,aAAa,SAAA,CAAS;AAAA,cAAA;AAAA,YAAA;AAAA,YAEhDjwB,gBAAAA,EAAAA;AAAAA,cAAC+U;AAAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,SAAS,MAAMgzD,EAAuB93C,EAAQ,IAAIA,EAAQ,OAAO;AAAA,gBACjE,UAAU42C,MAAa52C,EAAQ;AAAA,gBAC/B,WAAU;AAAA,gBAET,gBAAaA,EAAQ,2BACnB,OAAA,EAAI,WAAU,gFAA+E,IAC5FA,EAAQ,UACVjwB,gBAAAA,MAACgpE,MAAI,WAAU,UAAA,CAAU,IAEzBhpE,gBAAAA,EAAAA,IAACipE,IAAA,EAAO,WAAU,UAAA,CAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAGhCjpE,gBAAAA,EAAAA;AAAAA,cAAC+U;AAAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,WAAU;AAAA,gBACV,SAAS,MAAMkzD,EAAkBh4C,CAAO;AAAA,gBACxC,UAAUk3C,KAAcl3C,EAAQ,OAAOs2C;AAAA,gBACvC,OAAO1yD,GAAU,gBAAgB;AAAA,gBAEjC,UAAA7T,gBAAAA,EAAAA,IAACkpE,IAAA,EAAO,WAAU,UAAA,CAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UAC9B,EAAA,CACF;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,MAtEKj5C,EAAQ;AAAA,IAAA,CAwEhB,GACH;AAAA,0BAEC8zC,IAAA,EAAY,MAAMgD,GAAkB,cAAcC,GACjD,iCAACtC,IAAA,EACC,UAAA;AAAA,MAAAzkE,gBAAAA,OAAC+lE,IAAA,EACC,UAAA;AAAA,QAAAhmE,gBAAAA,MAAC6kE,IAAA,EAAiB,UAAA7kE,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,UAAA,iBAAA,CAAc,GAAI;AAAA,+BACtCsvD,IAAA,EACC,UAAA;AAAA,UAAA9kE,gBAAAA,EAAAA,IAACwV,MAAE,UAAA,gDAAA,CAA6C;AAAA,UAAI;AAAA,UAAGyxD,KAAA,gBAAAA,EAAiB;AAAA,UAAM;AAAA,gCAC7E,MAAA,EAAG;AAAA,gCAAG,MAAA,EAAG;AAAA,gCACT,QAAA,EAAK,WAAU,kCACd,UAAAjnE,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,2CAA6B,EAAA,CAClC;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,GACF;AAAA,6BACCywD,IAAA,EACC,UAAA;AAAA,QAAAjmE,gBAAAA,MAACmlE,IAAA,EAAkB,UAAAnlE,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,UAAA,SAAA,CAAM,GAAI;AAAA,QAChCxV,gBAAAA,EAAAA;AAAAA,UAACglE;AAAA,UAAA;AAAA,YACC,SAAS,CAACvwE,MAAM;AACd,cAAAA,EAAE,eAAA,GACFyzE,EAAA;AAAA,YACF;AAAA,YACA,WAAU;AAAA,YACV,UAAUf;AAAA,YAET,cAAannE,gBAAAA,MAACwV,IAAA,EAAE,yBAAW,IAAOxV,gBAAAA,EAAAA,IAACwV,MAAE,UAAA,SAAA,CAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MAC9C,EAAA,CACF;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;ACxWA,SAAS2zD,GAAuBC,GAAUx+B,GAAO9uC,GAAO61B,GAAM/9B,GAAG;AAK7D,MAAI,OAAOg3C,KAAU,aAAaw+B,MAAax+B,KAAS,KAAK,CAACA,EAAM,IAAIw+B,CAAQ;AAC5E,UAAM,IAAI,UAAU,yEAAyE;AACjG,SAAwEx+B,EAAM,IAAIw+B,GAAUttE,CAAK,GAAGA;AACxG;AACA,SAASutE,EAAuBD,GAAUx+B,GAAOjZ,GAAM/9B,GAAG;AACtD,MAAI+9B,MAAS,OAAO,CAAC/9B;AACjB,UAAM,IAAI,UAAU,+CAA+C;AACvE,MAAI,OAAOg3C,KAAU,aAAaw+B,MAAax+B,KAAS,CAACh3C,IAAI,CAACg3C,EAAM,IAAIw+B,CAAQ;AAC5E,UAAM,IAAI,UAAU,0EAA0E;AAClG,SAAOz3C,MAAS,MAAM/9B,IAAI+9B,MAAS,MAAM/9B,EAAE,KAAKw1E,CAAQ,IAAIx1E,IAAIA,EAAE,QAAQg3C,EAAM,IAAIw+B,CAAQ;AAChG;ACXO,IAAIE,KAAQ,WAAY;AAC3B,QAAM,EAAE,QAAAC,EAAM,IAAK;AACnB,MAAIA,KAAA,QAAAA,EAAQ;AACR,WAAAD,KAAQC,EAAO,WAAW,KAAKA,CAAM,GAC9BA,EAAO,WAAU;AAE5B,QAAMC,IAAK,IAAI,WAAW,CAAC,GACrBC,IAAaF,IAAS,MAAMA,EAAO,gBAAgBC,CAAE,EAAE,CAAC,IAAI,MAAO,KAAK,OAAM,IAAK,MAAQ;AACjG,SAAO,uCAAuC,QAAQ,UAAU,CAACp1E,OAAO,CAACA,IAAKq1E,EAAU,IAAM,MAAO,CAACr1E,IAAI,GAAM,SAAS,EAAE,CAAC;AAChI;ACZO,SAASs1E,GAAajuE,GAAK;AAC9B,SAAQ,OAAOA,KAAQ,YACnBA,MAAQ;AAAA,GAEN,UAAUA,KAAOA,EAAI,SAAS;AAAA,EAE3B,aAAaA,KAAO,OAAOA,EAAI,OAAO,EAAE,SAAS,+BAA+B;AAC7F;AACO,MAAMkuE,KAAc,CAACluE,MAAQ;AAChC,MAAIA,aAAe;AACf,WAAOA;AACX,MAAI,OAAOA,KAAQ,YAAYA,MAAQ,MAAM;AACzC,QAAI;AACA,UAAI,OAAO,UAAU,SAAS,KAAKA,CAAG,MAAM,kBAAkB;AAE1D,cAAMzF,IAAQ,IAAI,MAAMyF,EAAI,SAASA,EAAI,QAAQ,EAAE,OAAOA,EAAI,MAAK,IAAK,CAAA,CAAE;AAC1E,eAAIA,EAAI,UACJzF,EAAM,QAAQyF,EAAI,QAElBA,EAAI,SAAS,CAACzF,EAAM,UACpBA,EAAM,QAAQyF,EAAI,QAClBA,EAAI,SACJzF,EAAM,OAAOyF,EAAI,OACdzF;AAAA,MACX;AAAA,IACJ,QACM;AAAA,IAAE;AACR,QAAI;AACA,aAAO,IAAI,MAAM,KAAK,UAAUyF,CAAG,CAAC;AAAA,IACxC,QACM;AAAA,IAAE;AAAA,EACZ;AACA,SAAO,IAAI,MAAMA,CAAG;AACxB;AChCO,MAAMmuE,WAAoB,MAAM;AACvC;AACO,MAAMC,WAAiBD,GAAY;AAAA,EACtC,YAAYx+C,GAAQp1B,GAAOm0B,GAAS2/C,GAAS;AACzC,UAAM,GAAGD,GAAS,YAAYz+C,GAAQp1B,GAAOm0B,CAAO,CAAC,EAAE,GACvD,KAAK,SAASiB,GACd,KAAK,UAAU0+C,GACf,KAAK,YAAYA,KAAA,gBAAAA,EAAS,IAAI,iBAC9B,KAAK,QAAQ9zE;AACb,UAAM4K,IAAO5K;AACb,SAAK,OAAO4K,KAAA,gBAAAA,EAAO,MACnB,KAAK,QAAQA,KAAA,gBAAAA,EAAO,OACpB,KAAK,OAAOA,KAAA,gBAAAA,EAAO;AAAA,EACvB;AAAA,EACA,OAAO,YAAYwqB,GAAQp1B,GAAOm0B,GAAS;AACvC,UAAM4/C,IAAM/zE,KAAA,QAAAA,EAAO,UACf,OAAOA,EAAM,WAAY,WACrBA,EAAM,UACJ,KAAK,UAAUA,EAAM,OAAO,IAChCA,IAAQ,KAAK,UAAUA,CAAK,IACxBm0B;AACV,WAAIiB,KAAU2+C,IACH,GAAG3+C,CAAM,IAAI2+C,CAAG,KAEvB3+C,IACO,GAAGA,CAAM,2BAEhB2+C,KAGG;AAAA,EACX;AAAA,EACA,OAAO,SAAS3+C,GAAQ4+C,GAAe7/C,GAAS2/C,GAAS;AACrD,QAAI,CAAC1+C,KAAU,CAAC0+C;AACZ,aAAO,IAAIG,GAAmB,EAAE,SAAA9/C,GAAS,OAAOw/C,GAAYK,CAAa,GAAG;AAEhF,UAAMh0E,IAAQg0E,KAAA,gBAAAA,EAAgB;AAC9B,WAAI5+C,MAAW,MACJ,IAAI8+C,GAAgB9+C,GAAQp1B,GAAOm0B,GAAS2/C,CAAO,IAE1D1+C,MAAW,MACJ,IAAI++C,GAAoB/+C,GAAQp1B,GAAOm0B,GAAS2/C,CAAO,IAE9D1+C,MAAW,MACJ,IAAIg/C,GAAsBh/C,GAAQp1B,GAAOm0B,GAAS2/C,CAAO,IAEhE1+C,MAAW,MACJ,IAAIi/C,GAAcj/C,GAAQp1B,GAAOm0B,GAAS2/C,CAAO,IAExD1+C,MAAW,MACJ,IAAIk/C,GAAcl/C,GAAQp1B,GAAOm0B,GAAS2/C,CAAO,IAExD1+C,MAAW,MACJ,IAAIm/C,GAAyBn/C,GAAQp1B,GAAOm0B,GAAS2/C,CAAO,IAEnE1+C,MAAW,MACJ,IAAIo/C,GAAep/C,GAAQp1B,GAAOm0B,GAAS2/C,CAAO,IAEzD1+C,KAAU,MACH,IAAIq/C,GAAoBr/C,GAAQp1B,GAAOm0B,GAAS2/C,CAAO,IAE3D,IAAID,GAASz+C,GAAQp1B,GAAOm0B,GAAS2/C,CAAO;AAAA,EACvD;AACJ;AACO,MAAMY,WAA0Bb,GAAS;AAAA,EAC5C,YAAY,EAAE,SAAA1/C,EAAO,IAAK,IAAI;AAC1B,UAAM,QAAW,QAAWA,KAAW,wBAAwB,MAAS;AAAA,EAC5E;AACJ;AACO,MAAM8/C,WAA2BJ,GAAS;AAAA,EAC7C,YAAY,EAAE,SAAA1/C,GAAS,OAAAwgD,KAAS;AAC5B,UAAM,QAAW,QAAWxgD,KAAW,qBAAqB,MAAS,GAGjEwgD,MACA,KAAK,QAAQA;AAAA,EACrB;AACJ;AACO,MAAMC,WAAkCX,GAAmB;AAAA,EAC9D,YAAY,EAAE,SAAA9/C,EAAO,IAAK,IAAI;AAC1B,UAAM,EAAE,SAASA,KAAW,qBAAoB,CAAE;AAAA,EACtD;AACJ;AACO,MAAM+/C,WAAwBL,GAAS;AAC9C;AACO,MAAMM,WAA4BN,GAAS;AAClD;AACO,MAAMO,WAA8BP,GAAS;AACpD;AACO,MAAMQ,WAAsBR,GAAS;AAC5C;AACO,MAAMS,WAAsBT,GAAS;AAC5C;AACO,MAAMU,WAAiCV,GAAS;AACvD;AACO,MAAMW,WAAuBX,GAAS;AAC7C;AACO,MAAMY,WAA4BZ,GAAS;AAClD;AACO,MAAMgB,WAAgCjB,GAAY;AAAA,EACrD,cAAc;AACV,UAAM,kEAAkE;AAAA,EAC5E;AACJ;AACO,MAAMkB,WAAuClB,GAAY;AAAA,EAC5D,cAAc;AACV,UAAM,oFAAoF;AAAA,EAC9F;AACJ;AACO,MAAMmB,WAAqC,MAAM;AAAA,EACpD,YAAY5gD,GAAS;AACjB,UAAMA,CAAO;AAAA,EACjB;AACJ;AChHA,MAAM6gD,KAAyB,wBAClBC,KAAgB,CAAC1rC,MACnByrC,GAAuB,KAAKzrC,CAAG;AAEnC,IAAI3jC,KAAU,CAAC+sB,OAAU/sB,KAAU,MAAM,SAAUA,GAAQ+sB,CAAG,IAC1DuiD,KAAkBtvE;AAEtB,SAASuvE,GAAS/xE,GAAG;AACxB,SAAI,OAAOA,KAAM,WACN,CAAA,IAEJA,KAAK,CAAA;AAChB;AAEO,SAASgyE,GAAW9iD,GAAK;AAC5B,MAAI,CAACA;AACD,WAAO;AACX,aAAW+iD,KAAM/iD;AACb,WAAO;AACX,SAAO;AACX;AAEO,SAASgjD,GAAOhjD,GAAKprB,GAAK;AAC7B,SAAO,OAAO,UAAU,eAAe,KAAKorB,GAAKprB,CAAG;AACxD;AACO,SAASquE,GAAMjjD,GAAK;AACvB,SAAOA,KAAO,QAAQ,OAAOA,KAAQ,YAAY,CAAC,MAAM,QAAQA,CAAG;AACvE;AAOO,MAAMkjD,KAA0B,CAACvyE,GAAMhF,MAAM;AAChD,MAAI,OAAOA,KAAM,YAAY,CAAC,OAAO,UAAUA,CAAC;AAC5C,UAAM,IAAI21E,GAAY,GAAG3wE,CAAI,qBAAqB;AAEtD,MAAIhF,IAAI;AACJ,UAAM,IAAI21E,GAAY,GAAG3wE,CAAI,6BAA6B;AAE9D,SAAOhF;AACX,GAwCaw3E,KAAW,CAACrtD,MAAS;AAC9B,MAAI;AACA,WAAO,KAAK,MAAMA,CAAI;AAAA,EAC1B,QACY;AACR;AAAA,EACJ;AACJ,GC3FastD,KAAQ,CAACC,MAAO,IAAI,QAAQ,CAAC3I,MAAY,WAAWA,GAAS2I,CAAE,CAAC,GCDhEC,KAAU,UCEVC,KAAqB;AAAA;AAAA,EAG9B,OAAO,SAAW;AAAA,EAEd,OAAO,OAAO,WAAa;AAAA,EAE3B,OAAO,YAAc;AAAA;AAK7B,SAASC,KAAsB;AAC3B,SAAI,OAAO,OAAS,OAAe,KAAK,SAAS,OACtC,SAEP,OAAO,cAAgB,MAChB,SAEP,OAAO,UAAU,SAAS,KAAK,OAAO,WAAW,UAAY,MAAc,WAAW,UAAU,CAAC,MAAM,qBAChG,SAEJ;AACX;AACA,MAAMC,KAAwB,MAAM;;AAChC,QAAMC,IAAmBF,GAAmB;AAC5C,MAAIE,MAAqB;AACrB,WAAO;AAAA,MACH,oBAAoB;AAAA,MACpB,+BAA+BJ;AAAA,MAC/B,kBAAkBK,GAAkB,KAAK,MAAM,EAAE;AAAA,MACjD,oBAAoBC,GAAc,KAAK,MAAM,IAAI;AAAA,MACjD,uBAAuB;AAAA,MACvB,+BAA+B,OAAO,KAAK,WAAY,WAAW,KAAK,YAAUtpE,IAAA,KAAK,YAAL,gBAAAA,EAAc,SAAQ;AAAA,IACnH;AAEI,MAAI,OAAO,cAAgB;AACvB,WAAO;AAAA,MACH,oBAAoB;AAAA,MACpB,+BAA+BgpE;AAAA,MAC/B,kBAAkB;AAAA,MAClB,oBAAoB,SAAS,WAAW;AAAA,MACxC,uBAAuB;AAAA,MACvB,+BAA+B,WAAW,QAAQ;AAAA,IAC9D;AAGI,MAAII,MAAqB;AACrB,WAAO;AAAA,MACH,oBAAoB;AAAA,MACpB,+BAA+BJ;AAAA,MAC/B,kBAAkBK,GAAkB,WAAW,QAAQ,YAAY,SAAS;AAAA,MAC5E,oBAAoBC,GAAc,WAAW,QAAQ,QAAQ,SAAS;AAAA,MACtE,uBAAuB;AAAA,MACvB,+BAA+B,WAAW,QAAQ,WAAW;AAAA,IACzE;AAEI,QAAMC,IAAcC,GAAc;AAClC,SAAID,IACO;AAAA,IACH,oBAAoB;AAAA,IACpB,+BAA+BP;AAAA,IAC/B,kBAAkB;AAAA,IAClB,oBAAoB;AAAA,IACpB,uBAAuB,WAAWO,EAAY,OAAO;AAAA,IACrD,+BAA+BA,EAAY;AAAA,EACvD,IAGW;AAAA,IACH,oBAAoB;AAAA,IACpB,+BAA+BP;AAAA,IAC/B,kBAAkB;AAAA,IAClB,oBAAoB;AAAA,IACpB,uBAAuB;AAAA,IACvB,+BAA+B;AAAA,EACvC;AACA;AAEA,SAASQ,KAAiB;AACtB,MAAI,OAAO,YAAc,OAAe,CAAC;AACrC,WAAO;AAGX,QAAMC,IAAkB;AAAA,IACpB,EAAE,KAAK,QAAQ,SAAS,uCAAsC;AAAA,IAC9D,EAAE,KAAK,MAAM,SAAS,uCAAsC;AAAA,IAC5D,EAAE,KAAK,MAAM,SAAS,6CAA4C;AAAA,IAClE,EAAE,KAAK,UAAU,SAAS,yCAAwC;AAAA,IAClE,EAAE,KAAK,WAAW,SAAS,0CAAyC;AAAA,IACpE,EAAE,KAAK,UAAU,SAAS,oEAAmE;AAAA,EACrG;AAEI,aAAW,EAAE,KAAAnvE,GAAK,SAAA29B,EAAO,KAAMwxC,GAAiB;AAC5C,UAAMhzE,IAAQwhC,EAAQ,KAAK,UAAU,SAAS;AAC9C,QAAIxhC,GAAO;AACP,YAAMizE,IAAQjzE,EAAM,CAAC,KAAK,GACpBkzE,IAAQlzE,EAAM,CAAC,KAAK,GACpBmzE,IAAQnzE,EAAM,CAAC,KAAK;AAC1B,aAAO,EAAE,SAAS6D,GAAK,SAAS,GAAGovE,CAAK,IAAIC,CAAK,IAAIC,CAAK,GAAE;AAAA,IAChE;AAAA,EACJ;AACA,SAAO;AACX;AACA,MAAMN,KAAgB,CAACO,MAKfA,MAAS,QACF,QACPA,MAAS,YAAYA,MAAS,QACvB,QACPA,MAAS,QACF,QACPA,MAAS,aAAaA,MAAS,UACxB,UACPA,IACO,SAASA,CAAI,KACjB,WAELR,KAAoB,CAACS,OAMvBA,IAAWA,EAAS,YAAW,GAK3BA,EAAS,SAAS,KAAK,IAChB,QACPA,MAAa,YACN,YACPA,MAAa,WACN,UACPA,MAAa,UACN,YACPA,MAAa,YACN,YACPA,MAAa,YACN,YACPA,MAAa,UACN,UACPA,IACO,SAASA,CAAQ,KACrB;AAEX,IAAIC;AACG,MAAMC,KAAqB,MACtBD,OAAqBA,KAAmBZ;ACzJ7C,SAASc,KAAkB;AAC9B,MAAI,OAAO,QAAU;AACjB,WAAO;AAEX,QAAM,IAAI,MAAM,mJAAmJ;AACvK;AACO,SAASC,MAAsB32E,GAAM;AACxC,QAAM42E,IAAiB,WAAW;AAClC,MAAI,OAAOA,IAAmB;AAG1B,UAAM,IAAI,MAAM,yHAAyH;AAE7I,SAAO,IAAIA,EAAe,GAAG52E,CAAI;AACrC;AACO,SAAS62E,GAAmBC,GAAU;AACzC,MAAIC,IAAO,OAAO,iBAAiBD,IAAWA,EAAS,OAAO,aAAa,EAAC,IAAKA,EAAS,OAAO,QAAQ,EAAC;AAC1G,SAAOH,GAAmB;AAAA,IACtB,QAAQ;AAAA,IAAE;AAAA,IACV,MAAM,KAAKK,GAAY;AACnB,YAAM,EAAE,MAAAC,GAAM,OAAAtxE,EAAK,IAAK,MAAMoxE,EAAK,KAAI;AACvC,MAAIE,IACAD,EAAW,MAAK,IAGhBA,EAAW,QAAQrxE,CAAK;AAAA,IAEhC;AAAA,IACA,MAAM,SAAS;;AACX,cAAM8G,IAAAsqE,EAAK,WAAL,gBAAAtqE,EAAA,KAAAsqE;AAAA,IACV;AAAA,EACR,CAAK;AACL;AAOO,SAASG,GAA8BC,GAAQ;AAClD,MAAIA,EAAO,OAAO,aAAa;AAC3B,WAAOA;AACX,QAAMC,IAASD,EAAO,UAAS;AAC/B,SAAO;AAAA,IACH,MAAM,OAAO;AACT,UAAI;AACA,cAAM7rE,IAAS,MAAM8rE,EAAO,KAAI;AAChC,eAAI9rE,KAAA,QAAAA,EAAQ,QACR8rE,EAAO,YAAW,GACf9rE;AAAA,MACX,SACO,GAAG;AACN,cAAA8rE,EAAO,YAAW,GACZ;AAAA,MACV;AAAA,IACJ;AAAA,IACA,MAAM,SAAS;AACX,YAAMC,IAAgBD,EAAO,OAAM;AACnC,aAAAA,EAAO,YAAW,GAClB,MAAMC,GACC,EAAE,MAAM,IAAM,OAAO,OAAS;AAAA,IACzC;AAAA,IACA,CAAC,OAAO,aAAa,IAAI;AACrB,aAAO;AAAA,IACX;AAAA,EACR;AACA;AAKO,eAAeC,GAAqBH,GAAQ;;AAC/C,MAAIA,MAAW,QAAQ,OAAOA,KAAW;AACrC;AACJ,MAAIA,EAAO,OAAO,aAAa,GAAG;AAC9B,YAAMvkE,KAAAnG,IAAA0qE,EAAO,OAAO,aAAa,EAAC,GAAG,WAA/B,gBAAAvkE,EAAA,KAAAnG;AACN;AAAA,EACJ;AACA,QAAM2qE,IAASD,EAAO,UAAS,GACzBE,IAAgBD,EAAO,OAAM;AACnC,EAAAA,EAAO,YAAW,GAClB,MAAMC;AACV;AClFO,MAAME,KAAkB,CAAC,EAAE,SAAA5D,GAAS,MAAAjkD,SAChC;AAAA,EACH,aAAa;AAAA,IACT,gBAAgB;AAAA,EAC5B;AAAA,EACQ,MAAM,KAAK,UAAUA,CAAI;AACjC,ICPa8nD,KAAiB,WACjBC,KAAoB,CAAC9nE,MAAM,OAAOA,CAAC,GACnC+nE,KAAa;AAAA,EACtB,SAAS,CAAC/nE,MAAM,OAAOA,CAAC,EAAE,QAAQ,QAAQ,GAAG;AAAA,EAC7C,SAAS8nE;AACb,GACaE,KAAU;ACJhB,IAAIxyE,KAAM,CAACgtB,GAAKprB,OAAU5B,KAAM,OAAO,UAAU,SAAS,UAAU,KAAK,KAAK,OAAO,UAAU,cAAc,GAChHA,GAAIgtB,GAAKprB,CAAG;AAChB,MAAM6wE,KAA6B,uBAAM;AACrC,QAAM3wD,IAAQ,CAAA;AACd,WAAS1e,IAAI,GAAGA,IAAI,KAAK,EAAEA;AACvB,IAAA0e,EAAM,KAAK,QAAQ1e,IAAI,KAAK,MAAM,MAAMA,EAAE,SAAS,EAAE,GAAG,YAAW,CAAE;AAEzE,SAAO0e;AACX,GAAC,GAsGK4wD,KAAQ,MACD51C,KAAS,CAACoD,GAAKyyC,GAAiBC,GAASC,GAAOl4E,MAAW;AAGpE,MAAIulC,EAAI,WAAW;AACf,WAAOA;AAEX,MAAIlsB,IAASksB;AAOb,MANI,OAAOA,KAAQ,WACflsB,IAAS,OAAO,UAAU,SAAS,KAAKksB,CAAG,IAEtC,OAAOA,KAAQ,aACpBlsB,IAAS,OAAOksB,CAAG,IAEnB0yC,MAAY;AACZ,WAAO,OAAO5+D,CAAM,EAAE,QAAQ,mBAAmB,SAAU8+D,GAAI;AAC3D,aAAO,WAAW,SAASA,EAAG,MAAM,CAAC,GAAG,EAAE,IAAI;AAAA,IAClD,CAAC;AAEL,MAAIC,IAAM;AACV,WAAS/3D,IAAI,GAAGA,IAAIhH,EAAO,QAAQgH,KAAK03D,IAAO;AAC3C,UAAMl2C,IAAUxoB,EAAO,UAAU0+D,KAAQ1+D,EAAO,MAAMgH,GAAGA,IAAI03D,EAAK,IAAI1+D,GAChEmZ,IAAM,CAAA;AACZ,aAAS/pB,IAAI,GAAGA,IAAIo5B,EAAQ,QAAQ,EAAEp5B,GAAG;AACrC,UAAItK,IAAI0jC,EAAQ,WAAWp5B,CAAC;AAC5B,UAAItK,MAAM;AAAA,MACNA,MAAM;AAAA,MACNA,MAAM;AAAA,MACNA,MAAM;AAAA,MACLA,KAAK,MAAQA,KAAK;AAAA,MAClBA,KAAK,MAAQA,KAAK;AAAA,MAClBA,KAAK,MAAQA,KAAK;AAAA,MAClB6B,MAAW63E,OAAY15E,MAAM,MAAQA,MAAM,KAC9C;AACE,QAAAq0B,EAAIA,EAAI,MAAM,IAAIqP,EAAQ,OAAOp5B,CAAC;AAClC;AAAA,MACJ;AACA,UAAItK,IAAI,KAAM;AACV,QAAAq0B,EAAIA,EAAI,MAAM,IAAIslD,GAAU35E,CAAC;AAC7B;AAAA,MACJ;AACA,UAAIA,IAAI,MAAO;AACX,QAAAq0B,EAAIA,EAAI,MAAM,IAAIslD,GAAU,MAAQ35E,KAAK,CAAE,IAAI25E,GAAU,MAAQ35E,IAAI,EAAK;AAC1E;AAAA,MACJ;AACA,UAAIA,IAAI,SAAUA,KAAK,OAAQ;AAC3B,QAAAq0B,EAAIA,EAAI,MAAM,IACVslD,GAAU,MAAQ35E,KAAK,EAAG,IAAI25E,GAAU,MAAS35E,KAAK,IAAK,EAAK,IAAI25E,GAAU,MAAQ35E,IAAI,EAAK;AACnG;AAAA,MACJ;AACA,MAAAsK,KAAK,GACLtK,IAAI,UAAaA,IAAI,SAAU,KAAO0jC,EAAQ,WAAWp5B,CAAC,IAAI,OAC9D+pB,EAAIA,EAAI,MAAM,IACVslD,GAAU,MAAQ35E,KAAK,EAAG,IACtB25E,GAAU,MAAS35E,KAAK,KAAM,EAAK,IACnC25E,GAAU,MAAS35E,KAAK,IAAK,EAAK,IAClC25E,GAAU,MAAQ35E,IAAI,EAAK;AAAA,IACvC;AACA,IAAAi6E,KAAO5lD,EAAI,KAAK,EAAE;AAAA,EACtB;AACA,SAAO4lD;AACX;AAwBO,SAASC,GAAUhmD,GAAK;AAC3B,SAAI,CAACA,KAAO,OAAOA,KAAQ,WAChB,KAEJ,CAAC,EAAEA,EAAI,eAAeA,EAAI,YAAY,YAAYA,EAAI,YAAY,SAASA,CAAG;AACzF;AAIO,SAASimD,GAAU5lD,GAAKjvB,GAAI;AAC/B,MAAIkC,GAAQ+sB,CAAG,GAAG;AACd,UAAM6lD,IAAS,CAAA;AACf,aAAS9vE,IAAI,GAAGA,IAAIiqB,EAAI,QAAQjqB,KAAK;AACjC,MAAA8vE,EAAO,KAAK90E,EAAGivB,EAAIjqB,CAAC,CAAC,CAAC;AAE1B,WAAO8vE;AAAA,EACX;AACA,SAAO90E,EAAGivB,CAAG;AACjB;ACpNA,MAAM8lD,KAA0B;AAAA,EAC5B,SAAS11E,GAAQ;AACb,WAAO,OAAOA,CAAM,IAAI;AAAA,EAC5B;AAAA,EACA,OAAO;AAAA,EACP,QAAQA,GAAQmE,GAAK;AACjB,WAAO,OAAOnE,CAAM,IAAI,MAAMmE,IAAM;AAAA,EACxC;AAAA,EACA,OAAOnE,GAAQ;AACX,WAAO,OAAOA,CAAM;AAAA,EACxB;AACJ,GACM21E,KAAgB,SAAUjmD,GAAKkmD,GAAgB;AACjD,QAAM,UAAU,KAAK,MAAMlmD,GAAK7sB,GAAQ+yE,CAAc,IAAIA,IAAiB,CAACA,CAAc,CAAC;AAC/F;AACA,IAAIC;AACJ,MAAMlhC,KAAW;AAAA,EACb,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,SAAS;AAAA,EACT,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,SAAStV;AAAA,EACT,kBAAkB;AAAA,EAClB,QAAQu1C;AAAA,EACR,WAAWC;AAAA;AAAA,EAEX,SAAS;AAAA,EACT,cAAciB,GAAM;AAChB,YAAQD,OAAgBA,KAAc,SAAS,UAAU,KAAK,KAAK,KAAK,UAAU,WAAW,IAAIC,CAAI;AAAA,EACzG;AAAA,EACA,WAAW;AAAA,EACX,oBAAoB;AACxB;AACA,SAASC,GAAyBhpE,GAAG;AACjC,SAAQ,OAAOA,KAAM,YACjB,OAAOA,KAAM,YACb,OAAOA,KAAM,aACb,OAAOA,KAAM,YACb,OAAOA,KAAM;AACrB;AACA,MAAMipE,KAAW,CAAA;AACjB,SAASC,GAAgBnxE,GAAQ9E,GAAQk2E,GAAqBC,GAAgBC,GAAkBC,GAAoBC,GAAWC,GAAiBC,GAASnhC,GAAQohC,GAAMC,GAAWC,GAAez5E,GAAQ05E,GAAWC,GAAkB1B,GAAS2B,GAAa;AACxP,MAAIvnD,IAAMzqB,GACNiyE,IAASD,GACT/wE,IAAO,GACPixE,IAAY;AAChB,UAAQD,IAASA,EAAO,IAAIf,EAAQ,OAAO,UAAkB,CAACgB,KAAW;AAErE,UAAMj1C,IAAMg1C,EAAO,IAAIjyE,CAAM;AAE7B,QADAiB,KAAQ,GACJ,OAAOg8B,IAAQ,KAAa;AAC5B,UAAIA,MAAQh8B;AACR,cAAM,IAAI,WAAW,qBAAqB;AAG1C,MAAAixE,IAAY;AAAA,IAEpB;AACA,IAAI,OAAOD,EAAO,IAAIf,EAAQ,IAAM,QAChCjwE,IAAO;AAAA,EAEf;AAeA,MAdI,OAAOsvC,KAAW,aAClB9lB,IAAM8lB,EAAOr1C,GAAQuvB,CAAG,IAEnBA,aAAe,OACpBA,IAAMonD,KAAA,gBAAAA,EAAgBpnD,KAEjB2mD,MAAwB,WAAWrzE,GAAQ0sB,CAAG,MACnDA,IAAMimD,GAAUjmD,GAAK,SAAUxsB,GAAO;AAClC,WAAIA,aAAiB,OACV4zE,KAAA,gBAAAA,EAAgB5zE,KAEpBA;AAAA,EACX,CAAC,IAEDwsB,MAAQ,MAAM;AACd,QAAI8mD;AACA,aAAOG,KAAW,CAACK;AAAA;AAAA,QAEfL,EAAQx2E,GAAQ20C,GAAS,SAASwgC,GAAS,OAAOj4E,CAAM;AAAA,UACtD8C;AAEV,IAAAuvB,IAAM;AAAA,EACV;AACA,MAAIwmD,GAAyBxmD,CAAG,KAAKgmD,GAAUhmD,CAAG,GAAG;AACjD,QAAIinD,GAAS;AACT,YAAMS,IAAYJ,IAAmB72E,IAE/Bw2E,EAAQx2E,GAAQ20C,GAAS,SAASwgC,GAAS,OAAOj4E,CAAM;AAC9D,aAAO;AAAA,SACH05E,KAAA,gBAAAA,EAAYK,MACR;AAAA,SAEAL,KAAA,gBAAAA,EAAYJ,EAAQjnD,GAAKolB,GAAS,SAASwgC,GAAS,SAASj4E,CAAM;AAAA,MACvF;AAAA,IACQ;AACA,WAAO,EAAC05E,KAAA,gBAAAA,EAAY52E,MAAU,OAAM42E,KAAA,gBAAAA,EAAY,OAAOrnD,CAAG,GAAE;AAAA,EAChE;AACA,QAAMntB,IAAS,CAAA;AACf,MAAI,OAAOmtB,IAAQ;AACf,WAAOntB;AAEX,MAAI80E;AACJ,MAAIhB,MAAwB,WAAWrzE,GAAQ0sB,CAAG;AAE9C,IAAIsnD,KAAoBL,MAEpBjnD,IAAMimD,GAAUjmD,GAAKinD,CAAO,IAEhCU,IAAW,CAAC,EAAE,OAAO3nD,EAAI,SAAS,IAAIA,EAAI,KAAK,GAAG,KAAK,OAAO,OAAc,CAAE;AAAA,WAEzE1sB,GAAQwyC,CAAM;AACnB,IAAA6hC,IAAW7hC;AAAA,OAEV;AACD,UAAMhvC,IAAO,OAAO,KAAKkpB,CAAG;AAC5B,IAAA2nD,IAAWT,IAAOpwE,EAAK,KAAKowE,CAAI,IAAIpwE;AAAA,EACxC;AACA,QAAM8wE,IAAiBZ,IAAkB,OAAOv2E,CAAM,EAAE,QAAQ,OAAO,KAAK,IAAI,OAAOA,CAAM,GACvFo3E,IAAkBjB,KAAkBtzE,GAAQ0sB,CAAG,KAAKA,EAAI,WAAW,IAAI4nD,IAAiB,OAAOA;AACrG,MAAIf,KAAoBvzE,GAAQ0sB,CAAG,KAAKA,EAAI,WAAW;AACnD,WAAO6nD,IAAkB;AAE7B,WAAS75D,IAAI,GAAGA,IAAI25D,EAAS,QAAQ,EAAE35D,GAAG;AACtC,UAAMpZ,IAAM+yE,EAAS35D,CAAC,GAChBxa;AAAA;AAAA,MAEN,OAAOoB,KAAQ,YAAY,OAAOA,EAAI,QAAU,MAAcA,EAAI,QAAQorB,EAAIprB,CAAG;AAAA;AACjF,QAAImyE,KAAavzE,MAAU;AACvB;AAGJ,UAAMs0E,IAAcX,KAAaH,IAAkBpyE,EAAI,QAAQ,OAAO,KAAK,IAAIA,GACzEmzE,IAAaz0E,GAAQ0sB,CAAG,IAC1B,OAAO2mD,KAAwB,aAC3BA,EAAoBkB,GAAiBC,CAAW,IAC9CD,IACJA,KAAmBV,IAAY,MAAMW,IAAc,MAAMA,IAAc;AAC7E,IAAAP,EAAY,IAAIhyE,GAAQiB,CAAI;AAC5B,UAAMwxE,IAAmB,oBAAI,QAAO;AACpC,IAAAA,EAAiB,IAAIvB,IAAUc,CAAW,GAC1CnB,GAAcvzE,GAAQ6zE;AAAA,MAAgBlzE;AAAA,MAAOu0E;AAAA,MAAYpB;AAAA,MAAqBC;AAAA,MAAgBC;AAAA,MAAkBC;AAAA,MAAoBC;AAAA,MAAWC;AAAA;AAAA,MAE/IL,MAAwB,WAAWW,KAAoBh0E,GAAQ0sB,CAAG,IAAI,OAAOinD;AAAA,MAASnhC;AAAA,MAAQohC;AAAA,MAAMC;AAAA,MAAWC;AAAA,MAAez5E;AAAA,MAAQ05E;AAAA,MAAWC;AAAA,MAAkB1B;AAAA,MAASoC;AAAA,IAAgB,CAAC;AAAA,EACjM;AACA,SAAOn1E;AACX;AACA,SAASo1E,GAA4BzgD,IAAO4d,IAAU;AAClD,MAAI,OAAO5d,EAAK,mBAAqB,OAAe,OAAOA,EAAK,oBAAqB;AACjF,UAAM,IAAI,UAAU,wEAAwE;AAEhG,MAAI,OAAOA,EAAK,kBAAoB,OAAe,OAAOA,EAAK,mBAAoB;AAC/E,UAAM,IAAI,UAAU,uEAAuE;AAE/F,MAAIA,EAAK,YAAY,QAAQ,OAAOA,EAAK,UAAY,OAAe,OAAOA,EAAK,WAAY;AACxF,UAAM,IAAI,UAAU,+BAA+B;AAEvD,QAAMo+C,IAAUp+C,EAAK,WAAW4d,GAAS;AACzC,MAAI,OAAO5d,EAAK,UAAY,OAAeA,EAAK,YAAY,WAAWA,EAAK,YAAY;AACpF,UAAM,IAAI,UAAU,mEAAmE;AAE3F,MAAI75B,IAAS03E;AACb,MAAI,OAAO79C,EAAK,SAAW,KAAa;AACpC,QAAI,CAACx0B,GAAIuyE,IAAY/9C,EAAK,MAAM;AAC5B,YAAM,IAAI,UAAU,iCAAiC;AAEzD,IAAA75B,IAAS65B,EAAK;AAAA,EAClB;AACA,QAAM6/C,IAAY9B,GAAW53E,CAAM;AACnC,MAAIm4C,IAASV,GAAS;AACtB,GAAI,OAAO5d,EAAK,UAAW,cAAcl0B,GAAQk0B,EAAK,MAAM,OACxDse,IAASte,EAAK;AAElB,MAAI0gD;AAUJ,MATI1gD,EAAK,eAAeA,EAAK,eAAe2+C,KACxC+B,IAAc1gD,EAAK,cAEd,aAAaA,IAClB0gD,IAAc1gD,EAAK,UAAU,YAAY,WAGzC0gD,IAAc9iC,GAAS,aAEvB,oBAAoB5d,KAAQ,OAAOA,EAAK,kBAAmB;AAC3D,UAAM,IAAI,UAAU,+CAA+C;AAEvE,QAAM2/C,IAAY,OAAO3/C,EAAK,YAAc,MACtCA,EAAK,kBACH,KACE4d,GAAS,YACb,CAAC,CAAC5d,EAAK;AACb,SAAO;AAAA,IACH,gBAAgB,OAAOA,EAAK,kBAAmB,YAAYA,EAAK,iBAAiB4d,GAAS;AAAA;AAAA,IAE1F,WAAW+hC;AAAA,IACX,kBAAkB,OAAO3/C,EAAK,oBAAqB,YAAY,CAAC,CAACA,EAAK,mBAAmB4d,GAAS;AAAA,IAClG,aAAa8iC;AAAA,IACb,SAAStC;AAAA,IACT,iBAAiB,OAAOp+C,EAAK,mBAAoB,YAAYA,EAAK,kBAAkB4d,GAAS;AAAA,IAC7F,gBAAgB,CAAC,CAAC5d,EAAK;AAAA,IACvB,WAAW,OAAOA,EAAK,YAAc,MAAc4d,GAAS,YAAY5d,EAAK;AAAA,IAC7E,QAAQ,OAAOA,EAAK,UAAW,YAAYA,EAAK,SAAS4d,GAAS;AAAA,IAClE,iBAAiB,OAAO5d,EAAK,mBAAoB,YAAYA,EAAK,kBAAkB4d,GAAS;AAAA,IAC7F,SAAS,OAAO5d,EAAK,WAAY,aAAaA,EAAK,UAAU4d,GAAS;AAAA,IACtE,kBAAkB,OAAO5d,EAAK,oBAAqB,YAAYA,EAAK,mBAAmB4d,GAAS;AAAA,IAChG,QAAQU;AAAA,IACR,QAAQn4C;AAAA,IACR,WAAW05E;AAAA,IACX,eAAe,OAAO7/C,EAAK,iBAAkB,aAAaA,EAAK,gBAAgB4d,GAAS;AAAA,IACxF,WAAW,OAAO5d,EAAK,aAAc,YAAYA,EAAK,YAAY4d,GAAS;AAAA;AAAA,IAE3E,MAAM,OAAO5d,EAAK,QAAS,aAAaA,EAAK,OAAO;AAAA,IACpD,oBAAoB,OAAOA,EAAK,sBAAuB,YAAYA,EAAK,qBAAqB4d,GAAS;AAAA,EAC9G;AACA;AACO,SAAShT,GAAU78B,GAAQiyB,IAAO,IAAI;AACzC,MAAIxH,IAAMzqB;AACV,QAAMgzB,IAAU0/C,GAA4BzgD,CAAI;AAChD,MAAImgD,GACA7hC;AACJ,EAAI,OAAOvd,EAAQ,UAAW,cAC1Bud,IAASvd,EAAQ,QACjBvI,IAAM8lB,EAAO,IAAI9lB,CAAG,KAEf1sB,GAAQi1B,EAAQ,MAAM,MAC3Bud,IAASvd,EAAQ,QACjBo/C,IAAW7hC;AAEf,QAAMhvC,IAAO,CAAA;AACb,MAAI,OAAOkpB,KAAQ,YAAYA,MAAQ;AACnC,WAAO;AAEX,QAAM2mD,IAAsBR,GAAwB59C,EAAQ,WAAW,GACjEq+C,IAAiBD,MAAwB,WAAWp+C,EAAQ;AAClE,EAAKo/C,MACDA,IAAW,OAAO,KAAK3nD,CAAG,IAE1BuI,EAAQ,QACRo/C,EAAS,KAAKp/C,EAAQ,IAAI;AAE9B,QAAMg/C,IAAc,oBAAI,QAAO;AAC/B,WAASnxE,IAAI,GAAGA,IAAIuxE,EAAS,QAAQ,EAAEvxE,GAAG;AACtC,UAAMxB,IAAM+yE,EAASvxE,CAAC;AACtB,IAAImyB,EAAQ,aAAavI,EAAIprB,CAAG,MAAM,QAGtCwxE,GAActvE,GAAM4vE;AAAA,MAAgB1mD,EAAIprB,CAAG;AAAA,MAAGA;AAAA;AAAA,MAE9C+xE;AAAA,MAAqBC;AAAA,MAAgBr+C,EAAQ;AAAA,MAAkBA,EAAQ;AAAA,MAAoBA,EAAQ;AAAA,MAAWA,EAAQ;AAAA,MAAiBA,EAAQ,SAASA,EAAQ,UAAU;AAAA,MAAMA,EAAQ;AAAA,MAAQA,EAAQ;AAAA,MAAMA,EAAQ;AAAA,MAAWA,EAAQ;AAAA,MAAeA,EAAQ;AAAA,MAAQA,EAAQ;AAAA,MAAWA,EAAQ;AAAA,MAAkBA,EAAQ;AAAA,MAASg/C;AAAA,IAAW,CAAC;AAAA,EACtV;AACA,QAAMY,IAASrxE,EAAK,KAAKyxB,EAAQ,SAAS;AAC1C,MAAI93B,IAAS83B,EAAQ,mBAAmB,KAAO,MAAM;AACrD,SAAIA,EAAQ,oBACJA,EAAQ,YAAY,eAEpB93B,KAAU,yBAIVA,KAAU,oBAGX03E,EAAO,SAAS,IAAI13E,IAAS03E,IAAS;AACjD;AChRO,SAASC,GAAYC,GAAS;AACjC,MAAI/xB,IAAS;AACb,aAAWhR,KAAU+iC;AACjB,IAAA/xB,KAAUhR,EAAO;AAErB,QAAMuf,IAAS,IAAI,WAAWvO,CAAM;AACpC,MAAI/7C,IAAQ;AACZ,aAAW+qC,KAAU+iC;AACjB,IAAAxjB,EAAO,IAAIvf,GAAQ/qC,CAAK,GACxBA,KAAS+qC,EAAO;AAEpB,SAAOuf;AACX;AACA,IAAIyjB;AACG,SAASC,GAAWr1C,GAAK;AAC5B,MAAI+zC;AACJ,UAAQqB,OACFrB,IAAU,IAAI,WAAW,YAAW,GAAMqB,KAAcrB,EAAQ,OAAO,KAAKA,CAAO,IAAK/zC,CAAG;AACrG;AACA,IAAIs1C;AACG,SAASC,GAAWC,GAAO;AAC9B,MAAIC;AACJ,UAAQH,OACFG,IAAU,IAAI,WAAW,YAAW,GAAMH,KAAcG,EAAQ,OAAO,KAAKA,CAAO,IAAKD,CAAK;AACvG;ACxBA,IAAIE,IAAqBC;AASlB,MAAMC,GAAY;AAAA,EACrB,cAAc;AACV,IAAAF,GAAoB,IAAI,MAAM,MAAM,GACpCC,GAAiC,IAAI,MAAM,MAAM,GACjDhI,GAAuB,MAAM+H,IAAqB,IAAI,WAAU,CAAO,GACvE/H,GAAuB,MAAMgI,IAAkC,IAAS;AAAA,EAC5E;AAAA,EACA,OAAOE,GAAO;AACV,QAAIA,KAAS;AACT,aAAO,CAAA;AAEX,UAAMC,IAAcD,aAAiB,cAAc,IAAI,WAAWA,CAAK,IACjE,OAAOA,KAAU,WAAWR,GAAWQ,CAAK,IACxCA;AACV,IAAAlI,GAAuB,MAAM+H,IAAqBR,GAAY,CAACrH,EAAuB,MAAM6H,IAAqB,GAAG,GAAGI,CAAW,CAAC,CAAM;AACzI,UAAMlzC,IAAQ,CAAA;AACd,QAAImzC;AACJ,YAAQA,IAAeC,GAAiBnI,EAAuB,MAAM6H,IAAqB,GAAG,GAAG7H,EAAuB,MAAM8H,IAAkC,GAAG,CAAC,MAAM,QAAM;AAC3K,UAAII,EAAa,YAAYlI,EAAuB,MAAM8H,IAAkC,GAAG,KAAK,MAAM;AAEtG,QAAAhI,GAAuB,MAAMgI,IAAkCI,EAAa,KAAU;AACtF;AAAA,MACJ;AAEA,UAAIlI,EAAuB,MAAM8H,IAAkC,GAAG,KAAK,SACtEI,EAAa,UAAUlI,EAAuB,MAAM8H,IAAkC,GAAG,IAAI,KAAKI,EAAa,WAAW;AAC3H,QAAAnzC,EAAM,KAAK2yC,GAAW1H,EAAuB,MAAM6H,IAAqB,GAAG,EAAE,SAAS,GAAG7H,EAAuB,MAAM8H,IAAkC,GAAG,IAAI,CAAC,CAAC,CAAC,GAClKhI,GAAuB,MAAM+H,IAAqB7H,EAAuB,MAAM6H,IAAqB,GAAG,EAAE,SAAS7H,EAAuB,MAAM8H,IAAkC,GAAG,CAAC,CAAM,GAC3LhI,GAAuB,MAAMgI,IAAkC,IAAS;AACxE;AAAA,MACJ;AACA,YAAMM,IAAWpI,EAAuB,MAAM8H,IAAkC,GAAG,MAAM,OAAOI,EAAa,YAAY,IAAIA,EAAa,WACpIG,IAAOX,GAAW1H,EAAuB,MAAM6H,IAAqB,GAAG,EAAE,SAAS,GAAGO,CAAQ,CAAC;AACpG,MAAArzC,EAAM,KAAKszC,CAAI,GACfvI,GAAuB,MAAM+H,IAAqB7H,EAAuB,MAAM6H,IAAqB,GAAG,EAAE,SAASK,EAAa,KAAK,CAAM,GAC1IpI,GAAuB,MAAMgI,IAAkC,IAAS;AAAA,IAC5E;AACA,WAAO/yC;AAAA,EACX;AAAA,EACA,QAAQ;AACJ,WAAKirC,EAAuB,MAAM6H,IAAqB,GAAG,EAAE,SAGrD,KAAK,OAAO;AAAA,CAAI,IAFZ,CAAA;AAAA,EAGf;AACJ;AACAA,KAAsB,oBAAI,QAAO,GAAIC,KAAmC,oBAAI,QAAO;AAEnFC,GAAY,gBAAgB,oBAAI,IAAI,CAAC;AAAA,GAAM,IAAI,CAAC;AAChDA,GAAY,iBAAiB;AAU7B,SAASI,GAAiB5jC,GAAQ8oB,GAAY;AAG1C,WAASh4D,IAAIg4D,KAAc,GAAGh4D,IAAIkvC,EAAO,QAAQlvC,KAAK;AAClD,QAAIkvC,EAAOlvC,CAAC,MAAM;AACd,aAAO,EAAE,WAAWA,GAAG,OAAOA,IAAI,GAAG,UAAU,GAAK;AAExD,QAAIkvC,EAAOlvC,CAAC,MAAM;AACd,aAAO,EAAE,WAAWA,GAAG,OAAOA,IAAI,GAAG,UAAU,GAAI;AAAA,EAE3D;AACA,SAAO;AACX;AACO,SAASizE,GAAuB/jC,GAAQ;AAM3C,WAASlvC,IAAI,GAAGA,IAAIkvC,EAAO,SAAS,GAAGlvC,KAAK;AAKxC,QAJIkvC,EAAOlvC,CAAC,MAAM,MAAWkvC,EAAOlvC,IAAI,CAAC,MAAM,MAI3CkvC,EAAOlvC,CAAC,MAAM,MAAYkvC,EAAOlvC,IAAI,CAAC,MAAM;AAE5C,aAAOA,IAAI;AAEf,QAAIkvC,EAAOlvC,CAAC,MAAM,MACdkvC,EAAOlvC,IAAI,CAAC,MAAM,MAClBA,IAAI,IAAIkvC,EAAO,UACfA,EAAOlvC,IAAI,CAAC,MAAM,MAClBkvC,EAAOlvC,IAAI,CAAC,MAAM;AAElB,aAAOA,IAAI;AAAA,EAEnB;AACA,SAAO;AACX;ACxGA,MAAMkzE,KAAe;AAAA,EACjB,KAAK;AAAA,EACL,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AACX,GACaC,KAAgB,CAACC,GAAYC,GAAYxuE,MAAW;AAC7D,MAAKuuE,GAGL;AAAA,QAAIxG,GAAOsG,IAAcE,CAAU;AAC/B,aAAOA;AAEX,IAAAE,GAAUzuE,CAAM,EAAE,KAAK,GAAGwuE,CAAU,eAAe,KAAK,UAAUD,CAAU,CAAC,qBAAqB,KAAK,UAAU,OAAO,KAAKF,EAAY,CAAC,CAAC,EAAE;AAAA;AAEjJ;AACA,SAASK,KAAO;AAAE;AAClB,SAASC,GAAUC,GAASC,GAAQC,GAAU;AAC1C,SAAI,CAACD,KAAUR,GAAaO,CAAO,IAAIP,GAAaS,CAAQ,IACjDJ,KAIAG,EAAOD,CAAO,EAAE,KAAKC,CAAM;AAE1C;AACA,MAAME,KAAa;AAAA,EACf,OAAOL;AAAAA,EACP,MAAMA;AAAAA,EACN,MAAMA;AAAAA,EACN,OAAOA;AACX;AACA,IAAIM,KAAgC,oBAAI,QAAO;AACxC,SAASP,GAAUzuE,GAAQ;AAC9B,QAAM6uE,IAAS7uE,EAAO,QAChB8uE,IAAW9uE,EAAO,YAAY;AACpC,MAAI,CAAC6uE;AACD,WAAOE;AAEX,QAAME,IAAeD,GAAc,IAAIH,CAAM;AAC7C,MAAII,KAAgBA,EAAa,CAAC,MAAMH;AACpC,WAAOG,EAAa,CAAC;AAEzB,QAAMC,IAAc;AAAA,IAChB,OAAOP,GAAU,SAASE,GAAQC,CAAQ;AAAA,IAC1C,MAAMH,GAAU,QAAQE,GAAQC,CAAQ;AAAA,IACxC,MAAMH,GAAU,QAAQE,GAAQC,CAAQ;AAAA,IACxC,OAAOH,GAAU,SAASE,GAAQC,CAAQ;AAAA,EAClD;AACI,SAAAE,GAAc,IAAIH,GAAQ,CAACC,GAAUI,CAAW,CAAC,GAC1CA;AACX;AACO,MAAMC,KAAuB,CAACC,OAC7BA,EAAQ,YACRA,EAAQ,UAAU,EAAE,GAAGA,EAAQ,QAAO,GACtC,OAAOA,EAAQ,QAAQ,UAEvBA,EAAQ,YACRA,EAAQ,UAAU,OAAO,aAAaA,EAAQ,mBAAmB,UAAU,CAAC,GAAGA,EAAQ,OAAO,IAAI,OAAO,QAAQA,EAAQ,OAAO,GAAG,IAAI,CAAC,CAAC15E,GAAM6C,CAAK,MAAM;AAAA,EACtJ7C;AAAA,EACCA,EAAK,YAAW,MAAO,mBACpBA,EAAK,YAAW,MAAO,YACvBA,EAAK,YAAW,MAAO,eACvB,QACE6C;AAClB,CAAS,CAAC,IAEF,yBAAyB62E,MACrBA,EAAQ,wBACRA,EAAQ,UAAUA,EAAQ,sBAE9B,OAAOA,EAAQ,sBAEZA;AC5EX,IAAIC;AAUG,MAAMC,GAAO;AAAA,EAChB,YAAYh0E,GAAUsuE,GAAY5pE,GAAQ;AACtC,SAAK,WAAW1E,GAChB+zE,GAAe,IAAI,MAAM,MAAM,GAC/B,KAAK,aAAazF,GAClBhE,GAAuB,MAAMyJ,IAAgBrvE,CAAW;AAAA,EAC5D;AAAA,EACA,OAAO,gBAAgBhC,GAAU4rE,GAAY5pE,GAAQ;AACjD,QAAIuvE,IAAW;AACf,UAAMV,IAAS7uE,IAASyuE,GAAUzuE,CAAM,IAAI;AAC5C,oBAAgB1E,IAAW;AACvB,UAAIi0E;AACA,cAAM,IAAIlJ,GAAY,0EAA0E;AAEpG,MAAAkJ,IAAW;AACX,UAAI1F,IAAO;AACX,UAAI;AACA,yBAAiB2F,KAAOC,GAAiBzxE,GAAU4rE,CAAU;AACzD,cAAI,CAAAC,GAEJ;AAAA,gBAAI2F,EAAI,KAAK,WAAW,QAAQ,GAAG;AAC/B,cAAA3F,IAAO;AACP;AAAA,YACJ;AACA,gBAAI2F,EAAI,UAAU,QAAQ,CAACA,EAAI,MAAM,WAAW,SAAS,GAAG;AACxD,kBAAInyE;AACJ,kBAAI;AACA,gBAAAA,IAAO,KAAK,MAAMmyE,EAAI,IAAI;AAAA,cAC9B,SACOt+E,GAAG;AACN,sBAAA29E,EAAO,MAAM,sCAAsCW,EAAI,IAAI,GAC3DX,EAAO,MAAM,eAAeW,EAAI,GAAG,GAC7Bt+E;AAAA,cACV;AACA,kBAAImM,KAAQA,EAAK;AACb,sBAAM,IAAIipE,GAAS,QAAWjpE,EAAK,OAAO,QAAWW,EAAS,OAAO;AAEzE,oBAAMX;AAAA,YACV,OACK;AACD,kBAAIA;AACJ,kBAAI;AACA,gBAAAA,IAAO,KAAK,MAAMmyE,EAAI,IAAI;AAAA,cAC9B,SACOt+E,GAAG;AACN,8BAAQ,MAAM,sCAAsCs+E,EAAI,IAAI,GAC5D,QAAQ,MAAM,eAAeA,EAAI,GAAG,GAC9Bt+E;AAAA,cACV;AAEA,kBAAIs+E,EAAI,SAAS;AACb,sBAAM,IAAIlJ,GAAS,QAAWjpE,EAAK,OAAOA,EAAK,SAAS,MAAS;AAErE,oBAAM,EAAE,OAAOmyE,EAAI,OAAO,MAAMnyE,EAAI;AAAA,YACxC;AAAA;AAEJ,QAAAwsE,IAAO;AAAA,MACX,SACO34E,GAAG;AAEN,YAAIi1E,GAAaj1E,CAAC;AACd;AACJ,cAAMA;AAAA,MACV,UACZ;AAEgB,QAAK24E,KACDD,EAAW,MAAK;AAAA,MACxB;AAAA,IACJ;AACA,WAAO,IAAI0F,GAAOh0E,GAAUsuE,GAAY5pE,CAAM;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,mBAAmB0vE,GAAgB9F,GAAY5pE,GAAQ;AAC1D,QAAIuvE,IAAW;AACf,oBAAgBI,IAAY;AACxB,YAAMC,IAAc,IAAI/B,GAAW,GAC7BlE,IAAOG,GAA8B4F,CAAc;AACzD,uBAAiB5B,KAASnE;AACtB,mBAAWwE,KAAQyB,EAAY,OAAO9B,CAAK;AACvC,gBAAMK;AAGd,iBAAWA,KAAQyB,EAAY;AAC3B,cAAMzB;AAAA,IAEd;AACA,oBAAgB7yE,IAAW;AACvB,UAAIi0E;AACA,cAAM,IAAIlJ,GAAY,0EAA0E;AAEpG,MAAAkJ,IAAW;AACX,UAAI1F,IAAO;AACX,UAAI;AACA,yBAAiBsE,KAAQwB;AACrB,UAAI9F,KAEAsE,MACA,MAAM,KAAK,MAAMA,CAAI;AAE7B,QAAAtE,IAAO;AAAA,MACX,SACO34E,GAAG;AAEN,YAAIi1E,GAAaj1E,CAAC;AACd;AACJ,cAAMA;AAAA,MACV,UACZ;AAEgB,QAAK24E,KACDD,EAAW,MAAK;AAAA,MACxB;AAAA,IACJ;AACA,WAAO,IAAI0F,GAAOh0E,GAAUsuE,GAAY5pE,CAAM;AAAA,EAClD;AAAA,EACA,EAAEqvE,KAAiB,oBAAI,QAAO,GAAI,OAAO,cAAa,IAAK;AACvD,WAAO,KAAK,SAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM;AACF,UAAM/9C,IAAO,CAAA,GACPC,IAAQ,CAAA,GACRj2B,IAAW,KAAK,SAAQ,GACxBu0E,IAAc,CAACC,OACV;AAAA,MACH,MAAM,MAAM;AACR,YAAIA,EAAM,WAAW,GAAG;AACpB,gBAAM5xE,IAAS5C,EAAS,KAAI;AAC5B,UAAAg2B,EAAK,KAAKpzB,CAAM,GAChBqzB,EAAM,KAAKrzB,CAAM;AAAA,QACrB;AACA,eAAO4xE,EAAM,MAAK;AAAA,MACtB;AAAA,IAChB;AAEQ,WAAO;AAAA,MACH,IAAIR,GAAO,MAAMO,EAAYv+C,CAAI,GAAG,KAAK,YAAYw0C,EAAuB,MAAMuJ,IAAgB,GAAG,CAAC;AAAA,MACtG,IAAIC,GAAO,MAAMO,EAAYt+C,CAAK,GAAG,KAAK,YAAYu0C,EAAuB,MAAMuJ,IAAgB,GAAG,CAAC;AAAA,IACnH;AAAA,EACI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAmB;AACf,UAAMh2E,IAAO;AACb,QAAIswE;AACJ,WAAOJ,GAAmB;AAAA,MACtB,MAAM,QAAQ;AACV,QAAAI,IAAOtwE,EAAK,OAAO,aAAa,EAAC;AAAA,MACrC;AAAA,MACA,MAAM,KAAK02E,GAAM;AACb,YAAI;AACA,gBAAM,EAAE,OAAAx3E,GAAO,MAAAsxE,EAAI,IAAK,MAAMF,EAAK,KAAI;AACvC,cAAIE;AACA,mBAAOkG,EAAK,MAAK;AACrB,gBAAMtC,IAAQH,GAAW,KAAK,UAAU/0E,CAAK,IAAI;AAAA,CAAI;AACrD,UAAAw3E,EAAK,QAAQtC,CAAK;AAAA,QACtB,SACOv1E,GAAK;AACR,UAAA63E,EAAK,MAAM73E,CAAG;AAAA,QAClB;AAAA,MACJ;AAAA,MACA,MAAM,SAAS;;AACX,gBAAMmH,IAAAsqE,EAAK,WAAL,gBAAAtqE,EAAA,KAAAsqE;AAAA,MACV;AAAA,IACZ,CAAS;AAAA,EACL;AACJ;AACO,gBAAgB8F,GAAiBzxE,GAAU4rE,GAAY;AAC1D,MAAI,CAAC5rE,EAAS;AAEV,UADA4rE,EAAW,MAAK,GACZ,OAAO,WAAW,YAAc,OAChC,WAAW,UAAU,YAAY,gBAC3B,IAAIvD,GAAY,gKAAgK,IAEpL,IAAIA,GAAY,mDAAmD;AAE7E,QAAM2J,IAAa,IAAIC,GAAU,GAC3BL,IAAc,IAAI/B,GAAW,GAC7BlE,IAAOG,GAA8B9rE,EAAS,IAAI;AACxD,mBAAiBkyE,KAAYC,GAAcxG,CAAI;AAC3C,eAAWwE,KAAQyB,EAAY,OAAOM,CAAQ,GAAG;AAC7C,YAAMV,IAAMQ,EAAW,OAAO7B,CAAI;AAClC,MAAIqB,MACA,MAAMA;AAAA,IACd;AAEJ,aAAWrB,KAAQyB,EAAY,SAAS;AACpC,UAAMJ,IAAMQ,EAAW,OAAO7B,CAAI;AAClC,IAAIqB,MACA,MAAMA;AAAA,EACd;AACJ;AAKA,gBAAgBW,GAAc70E,GAAU;AACpC,MAAI+B,IAAO,IAAI,WAAU;AACzB,mBAAiBywE,KAASxyE,GAAU;AAChC,QAAIwyE,KAAS;AACT;AAEJ,UAAMC,IAAcD,aAAiB,cAAc,IAAI,WAAWA,CAAK,IACjE,OAAOA,KAAU,WAAWR,GAAWQ,CAAK,IACxCA;AACV,QAAIsC,IAAU,IAAI,WAAW/yE,EAAK,SAAS0wE,EAAY,MAAM;AAC7D,IAAAqC,EAAQ,IAAI/yE,CAAI,GAChB+yE,EAAQ,IAAIrC,GAAa1wE,EAAK,MAAM,GACpCA,IAAO+yE;AACP,QAAIpC;AACJ,YAAQA,IAAeI,GAAuB/wE,CAAI,OAAO;AACrD,YAAMA,EAAK,MAAM,GAAG2wE,CAAY,GAChC3wE,IAAOA,EAAK,MAAM2wE,CAAY;AAAA,EAEtC;AACA,EAAI3wE,EAAK,SAAS,MACd,MAAMA;AAEd;AACA,MAAM4yE,GAAW;AAAA,EACb,cAAc;AACV,SAAK,QAAQ,MACb,KAAK,OAAO,CAAA,GACZ,KAAK,SAAS,CAAA;AAAA,EAClB;AAAA,EACA,OAAO9B,GAAM;AAIT,QAHIA,EAAK,SAAS,IAAI,MAClBA,IAAOA,EAAK,UAAU,GAAGA,EAAK,SAAS,CAAC,IAExC,CAACA,GAAM;AAEP,UAAI,CAAC,KAAK,SAAS,CAAC,KAAK,KAAK;AAC1B,eAAO;AACX,YAAMqB,IAAM;AAAA,QACR,OAAO,KAAK;AAAA,QACZ,MAAM,KAAK,KAAK,KAAK;AAAA,CAAI;AAAA,QACzB,KAAK,KAAK;AAAA,MAC1B;AACY,kBAAK,QAAQ,MACb,KAAK,OAAO,CAAA,GACZ,KAAK,SAAS,CAAA,GACPA;AAAA,IACX;AAEA,QADA,KAAK,OAAO,KAAKrB,CAAI,GACjBA,EAAK,WAAW,GAAG;AACnB,aAAO;AAEX,QAAI,CAACkC,GAAW54D,GAAGlf,CAAK,IAAI+3E,GAAUnC,GAAM,GAAG;AAC/C,WAAI51E,EAAM,WAAW,GAAG,MACpBA,IAAQA,EAAM,UAAU,CAAC,IAEzB83E,MAAc,UACd,KAAK,QAAQ93E,IAER83E,MAAc,UACnB,KAAK,KAAK,KAAK93E,CAAK,GAEjB;AAAA,EACX;AACJ;AACA,SAAS+3E,GAAUr4C,GAAKs4C,GAAW;AAC/B,QAAMjxE,IAAQ24B,EAAI,QAAQs4C,CAAS;AACnC,SAAIjxE,MAAU,KACH,CAAC24B,EAAI,UAAU,GAAG34B,CAAK,GAAGixE,GAAWt4C,EAAI,UAAU34B,IAAQixE,EAAU,MAAM,CAAC,IAEhF,CAACt4C,GAAK,IAAI,EAAE;AACvB;AC3RO,eAAeu4C,GAAqBxwE,GAAQ3K,GAAO;AACtD,QAAM,EAAE,UAAA2I,GAAU,cAAAyyE,GAAc,qBAAAC,GAAqB,WAAAC,EAAS,IAAKt7E,GAC7DitB,IAAO,OAAO,YAAY;;AAC5B,QAAIjtB,EAAM,QAAQ;AAId,aAHAo5E,GAAUzuE,CAAM,EAAE,MAAM,YAAYhC,EAAS,QAAQA,EAAS,KAAKA,EAAS,SAASA,EAAS,IAAI,GAG9F3I,EAAM,QAAQ,gBACPA,EAAM,QAAQ,cAAc,gBAAgB2I,GAAU3I,EAAM,YAAY2K,CAAM,IAElFsvE,GAAO,gBAAgBtxE,GAAU3I,EAAM,YAAY2K,CAAM;AAGpE,QAAIhC,EAAS,WAAW;AACpB,aAAO;AAEX,QAAI3I,EAAM,QAAQ;AACd,aAAO2I;AAEX,UAAM4yE,IAAc5yE,EAAS,QAAQ,IAAI,cAAc,GACjD6yE,KAAYxxE,IAAAuxE,KAAA,gBAAAA,EAAa,MAAM,KAAK,OAAxB,gBAAAvxE,EAA4B;AAE9C,SADewxE,KAAA,gBAAAA,EAAW,SAAS,yBAAuBA,KAAA,gBAAAA,EAAW,SAAS,WAClE;AACR,YAAMC,IAAO,MAAM9yE,EAAS,KAAI;AAChC,aAAO+yE,GAAaD,GAAM9yE,CAAQ;AAAA,IACtC;AAEA,WADa,MAAMA,EAAS,KAAI;AAAA,EAEpC,GAAC;AACD,SAAAywE,GAAUzuE,CAAM,EAAE,MAAM,IAAIywE,CAAY,qBAAqBtB,GAAqB;AAAA,IAC9E,qBAAAuB;AAAA,IACA,KAAK1yE,EAAS;AAAA,IACd,QAAQA,EAAS;AAAA,IACjB,MAAAskB;AAAA,IACA,YAAY,KAAK,IAAG,IAAKquD;AAAA,EACjC,CAAK,CAAC,GACKruD;AACX;AACO,SAASyuD,GAAax4E,GAAOyF,GAAU;AAC1C,SAAI,CAACzF,KAAS,OAAOA,KAAU,YAAY,MAAM,QAAQA,CAAK,IACnDA,IAEJ,OAAO,eAAeA,GAAO,eAAe;AAAA,IAC/C,OAAOyF,EAAS,QAAQ,IAAI,cAAc;AAAA,IAC1C,YAAY;AAAA,EACpB,CAAK;AACL;AChDA,IAAIgzE;AAOG,MAAMC,WAAmB,QAAQ;AAAA,EACpC,YAAYjxE,GAAQkxE,GAAiBC,IAAgBX,IAAsB;AACvE,UAAM,CAAC/Q,MAAY;AAIf,MAAAA,EAAQ,IAAI;AAAA,IAChB,CAAC,GACD,KAAK,kBAAkByR,GACvB,KAAK,gBAAgBC,GACrBH,GAAmB,IAAI,MAAM,MAAM,GACnCpL,GAAuB,MAAMoL,IAAoBhxE,CAAW;AAAA,EAChE;AAAA,EACA,YAAYqqB,GAAW;AACnB,WAAO,IAAI4mD,GAAWnL,EAAuB,MAAMkL,IAAoB,GAAG,GAAG,KAAK,iBAAiB,OAAOhxE,GAAQ3K,MAAU07E,GAAa1mD,EAAU,MAAM,KAAK,cAAcrqB,GAAQ3K,CAAK,GAAGA,CAAK,GAAGA,EAAM,QAAQ,CAAC;AAAA,EACvN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,aAAa;AACT,WAAO,KAAK,gBAAgB,KAAK,CAAC1E,MAAMA,EAAE,QAAQ;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,eAAe;AACjB,UAAM,CAAC0M,GAAMW,CAAQ,IAAI,MAAM,QAAQ,IAAI,CAAC,KAAK,MAAK,GAAI,KAAK,WAAU,CAAE,CAAC;AAC5E,WAAO,EAAE,MAAAX,GAAM,UAAAW,GAAU,YAAYA,EAAS,QAAQ,IAAI,cAAc,EAAC;AAAA,EAC7E;AAAA,EACA,QAAQ;AACJ,WAAK,KAAK,kBACN,KAAK,gBAAgB,KAAK,gBAAgB,KAAK,CAACX,MAAS,KAAK,cAAcyoE,EAAuB,MAAMkL,IAAoB,GAAG,GAAG3zE,CAAI,CAAC,IAErI,KAAK;AAAA,EAChB;AAAA,EACA,KAAK+zE,GAAaC,GAAY;AAC1B,WAAO,KAAK,MAAK,EAAG,KAAKD,GAAaC,CAAU;AAAA,EACpD;AAAA,EACA,MAAMA,GAAY;AACd,WAAO,KAAK,QAAQ,MAAMA,CAAU;AAAA,EACxC;AAAA,EACA,QAAQC,GAAW;AACf,WAAO,KAAK,QAAQ,QAAQA,CAAS;AAAA,EACzC;AACJ;AACAN,KAAqB,oBAAI,QAAO;ACrEhC,IAAIO;AAMG,MAAMC,GAAa;AAAA,EACtB,YAAYxxE,GAAQhC,GAAUskB,GAAMgL,GAAS;AACzC,IAAAikD,GAAqB,IAAI,MAAM,MAAM,GACrC3L,GAAuB,MAAM2L,IAAsBvxE,CAAW,GAC9D,KAAK,UAAUstB,GACf,KAAK,WAAWtvB,GAChB,KAAK,OAAOskB;AAAA,EAChB;AAAA,EACA,cAAc;AAEV,WADc,KAAK,kBAAiB,EACzB,SAEJ,KAAK,uBAAsB,KAAM,OAD7B;AAAA,EAEf;AAAA,EACA,MAAM,cAAc;AAChB,UAAMmvD,IAAc,KAAK,uBAAsB;AAC/C,QAAI,CAACA;AACD,YAAM,IAAIpL,GAAY,uFAAuF;AAEjH,WAAO,MAAMP,EAAuB,MAAMyL,IAAsB,GAAG,EAAE,eAAe,KAAK,aAAaE,CAAW;AAAA,EACrH;AAAA,EACA,OAAO,YAAY;AACf,QAAIlxE,IAAO;AAEX,SADA,MAAMA,GACCA,EAAK;AACR,MAAAA,IAAO,MAAMA,EAAK,YAAW,GAC7B,MAAMA;AAAA,EAEd;AAAA,EACA,SAASgxE,KAAuB,oBAAI,QAAO,GAAI,OAAO,cAAa,IAAK;AACpE,qBAAiBhxE,KAAQ,KAAK;AAC1B,iBAAWpN,KAAQoN,EAAK;AACpB,cAAMpN;AAAA,EAGlB;AACJ;AAUO,MAAMu+E,WAAoBT,GAAW;AAAA,EACxC,YAAYjxE,GAAQ2xE,GAASC,GAAM;AAC/B,UAAM5xE,GAAQ2xE,GAAS,OAAO3xE,GAAQ3K,MAAU,IAAIu8E,EAAK5xE,GAAQ3K,EAAM,UAAU,MAAMm7E,GAAqBxwE,GAAQ3K,CAAK,GAAGA,EAAM,OAAO,CAAC;AAAA,EAC9I;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,OAAO,aAAa,IAAI;AAC5B,UAAMkL,IAAO,MAAM;AACnB,qBAAiBpN,KAAQoN;AACrB,YAAMpN;AAAA,EAEd;AACJ;AAIO,MAAMy+E,WAAaJ,GAAa;AAAA,EACnC,YAAYxxE,GAAQhC,GAAUskB,GAAMgL,GAAS;AACzC,UAAMttB,GAAQhC,GAAUskB,GAAMgL,CAAO,GACrC,KAAK,OAAOhL,EAAK,QAAQ,CAAA,GACzB,KAAK,SAASA,EAAK;AAAA,EACvB;AAAA,EACA,oBAAoB;AAChB,WAAO,KAAK,QAAQ,CAAA;AAAA,EACxB;AAAA,EACA,yBAAyB;AACrB,WAAO;AAAA,EACX;AACJ;AACO,MAAMuvD,WAAmBL,GAAa;AAAA,EACzC,YAAYxxE,GAAQhC,GAAUskB,GAAMgL,GAAS;AACzC,UAAMttB,GAAQhC,GAAUskB,GAAMgL,CAAO,GACrC,KAAK,OAAOhL,EAAK,QAAQ,CAAA,GACzB,KAAK,WAAWA,EAAK,YAAY;AAAA,EACrC;AAAA,EACA,oBAAoB;AAChB,WAAO,KAAK,QAAQ,CAAA;AAAA,EACxB;AAAA,EACA,cAAc;AACV,WAAI,KAAK,aAAa,KACX,KAEJ,MAAM,YAAW;AAAA,EAC5B;AAAA,EACA,yBAAyB;;AACrB,UAAMjlB,IAAO,KAAK,kBAAiB,GAC7B63B,KAAK71B,IAAAhC,EAAKA,EAAK,SAAS,CAAC,MAApB,gBAAAgC,EAAuB;AAClC,WAAK61B,IAGE;AAAA,MACH,GAAG,KAAK;AAAA,MACR,OAAO;AAAA,QACH,GAAG0yC,GAAS,KAAK,QAAQ,KAAK;AAAA,QAC9B,OAAO1yC;AAAA,MACvB;AAAA,IACA,IARmB;AAAA,EASf;AACJ;AACO,MAAM48C,WAA+BN,GAAa;AAAA,EACrD,YAAYxxE,GAAQhC,GAAUskB,GAAMgL,GAAS;AACzC,UAAMttB,GAAQhC,GAAUskB,GAAMgL,CAAO,GACrC,KAAK,OAAOhL,EAAK,QAAQ,CAAA,GACzB,KAAK,WAAWA,EAAK,YAAY,IACjC,KAAK,UAAUA,EAAK,WAAW;AAAA,EACnC;AAAA,EACA,oBAAoB;AAChB,WAAO,KAAK,QAAQ,CAAA;AAAA,EACxB;AAAA,EACA,cAAc;AACV,WAAI,KAAK,aAAa,KACX,KAEJ,MAAM,YAAW;AAAA,EAC5B;AAAA,EACA,yBAAyB;AACrB,UAAMyvD,IAAS,KAAK;AACpB,WAAKA,IAGE;AAAA,MACH,GAAG,KAAK;AAAA,MACR,OAAO;AAAA,QACH,GAAGnK,GAAS,KAAK,QAAQ,KAAK;AAAA,QAC9B,OAAOmK;AAAA,MACvB;AAAA,IACA,IARmB;AAAA,EASf;AACJ;ACjJO,MAAMC,KAAmB,MAAM;;AAClC,MAAI,OAAO,OAAS,KAAa;AAC7B,UAAM,EAAE,SAAAC,EAAO,IAAK,YACdC,IAAY,SAAO7yE,IAAA4yE,KAAA,gBAAAA,EAAS,aAAT,gBAAA5yE,EAAmB,SAAS,YAAY,SAAS4yE,EAAQ,SAAS,KAAK,MAAM,GAAG,CAAC,IAAI;AAC9G,UAAM,IAAI,MAAM,4EACXC,IACG,+FACE,GAAG;AAAA,EACjB;AACJ;AAKO,SAASC,GAASC,GAAUhN,GAAU93C,GAAS;AAClD,SAAA0kD,GAAgB,GACT,IAAI,KAAKI,GAAUhN,KAAY,gBAAgB93C,CAAO;AACjE;AACO,SAAS+kD,GAAQ95E,GAAO;AAC3B,UAAU,OAAOA,KAAU,YACvBA,MAAU,SACR,UAAUA,KAASA,EAAM,QAAQ,OAAOA,EAAM,IAAI,KAC/C,SAASA,KAASA,EAAM,OAAO,OAAOA,EAAM,GAAG,KAC/C,cAAcA,KAASA,EAAM,YAAY,OAAOA,EAAM,QAAQ,KAC9D,UAAUA,KAASA,EAAM,QAAQ,OAAOA,EAAM,IAAI,MACvD,IACC,MAAM,OAAO,EACb,IAAG,KAAM;AAClB;AACO,MAAM+5E,KAAkB,CAAC/5E,MAAUA,KAAS,QAAQ,OAAOA,KAAU,YAAY,OAAOA,EAAM,OAAO,aAAa,KAAM,YAKlHg6E,KAAmC,OAAOhmD,GAAMimD,MACpDC,GAAmBlmD,EAAK,IAAI,IAE1B,EAAE,GAAGA,GAAM,MAAM,MAAMmmD,GAAWnmD,EAAK,MAAMimD,CAAK,EAAC,IAD/CjmD,GAGFomD,KAA8B,OAAOpmD,GAAMimD,OAC7C,EAAE,GAAGjmD,GAAM,MAAM,MAAMmmD,GAAWnmD,EAAK,MAAMimD,CAAK,EAAC,IAExDI,KAAsC,oBAAI,QAAO;AAOvD,SAASC,GAAiBC,GAAa;AACnC,QAAMN,IAAQ,OAAOM,KAAgB,aAAaA,IAAcA,EAAY,OACtEC,IAASH,GAAoB,IAAIJ,CAAK;AAC5C,MAAIO;AACA,WAAOA;AACX,QAAMlzE,KAAW,YAAY;AACzB,QAAI;AACA,YAAMmzE,IAAiB,cAAcR,IACjCA,EAAM,YACH,MAAMA,EAAM,QAAQ,GAAG,aACxBn1E,IAAO,IAAI,SAAQ;AACzB,aAAIA,EAAK,SAAQ,MAAQ,MAAM,IAAI21E,EAAc31E,CAAI,EAAE,KAAI;AAAA,IAI/D,QACM;AAEF,aAAO;AAAA,IACX;AAAA,EACJ,GAAC;AACD,SAAAu1E,GAAoB,IAAIJ,GAAO3yE,CAAO,GAC/BA;AACX;AACO,MAAM6yE,KAAa,OAAOpwD,GAAMkwD,MAAU;AAC7C,MAAI,CAAE,MAAMK,GAAiBL,CAAK;AAC9B,UAAM,IAAI,UAAU,mGAAmG;AAE3H,QAAMvlB,IAAO,IAAI,SAAQ;AACzB,eAAM,QAAQ,IAAI,OAAO,QAAQ3qC,KAAQ,CAAA,CAAE,EAAE,IAAI,CAAC,CAAC3oB,GAAKpB,CAAK,MAAM06E,GAAahmB,GAAMtzD,GAAKpB,CAAK,CAAC,CAAC,GAC3F00D;AACX,GAGMimB,KAAc,CAAC36E,MAAUA,aAAiB,QAAQ,UAAUA,GAC5D46E,KAAe,CAAC56E,MAAU,OAAOA,KAAU,YAC7CA,MAAU,SACTA,aAAiB,YAAY+5E,GAAgB/5E,CAAK,KAAK26E,GAAY36E,CAAK,IACvEk6E,KAAqB,CAACl6E,MAAU;AAClC,MAAI46E,GAAa56E,CAAK;AAClB,WAAO;AACX,MAAI,MAAM,QAAQA,CAAK;AACnB,WAAOA,EAAM,KAAKk6E,EAAkB;AACxC,MAAIl6E,KAAS,OAAOA,KAAU;AAC1B,eAAWhI,KAAKgI;AACZ,UAAIk6E,GAAmBl6E,EAAMhI,CAAC,CAAC;AAC3B,eAAO;AAAA;AAGnB,SAAO;AACX,GACM0iF,KAAe,OAAOhmB,GAAMtzD,GAAKpB,MAAU;AAC7C,MAAIA,MAAU,QAEd;AAAA,QAAIA,KAAS;AACT,YAAM,IAAI,UAAU,sBAAsBoB,CAAG,6DAA6D;AAG9G,QAAI,OAAOpB,KAAU,YAAY,OAAOA,KAAU,YAAY,OAAOA,KAAU;AAC3E,MAAA00D,EAAK,OAAOtzD,GAAK,OAAOpB,CAAK,CAAC;AAAA,aAEzBA,aAAiB;AACtB,MAAA00D,EAAK,OAAOtzD,GAAKw4E,GAAS,CAAC,MAAM55E,EAAM,MAAM,GAAG85E,GAAQ95E,CAAK,CAAC,CAAC;AAAA,aAE1D+5E,GAAgB/5E,CAAK;AAC1B,MAAA00D,EAAK,OAAOtzD,GAAKw4E,GAAS,CAAC,MAAM,IAAI,SAAS1I,GAAmBlxE,CAAK,CAAC,EAAE,KAAI,CAAE,GAAG85E,GAAQ95E,CAAK,CAAC,CAAC;AAAA,aAE5F26E,GAAY36E,CAAK;AACtB,MAAA00D,EAAK,OAAOtzD,GAAKpB,GAAO85E,GAAQ95E,CAAK,CAAC;AAAA,aAEjC,MAAM,QAAQA,CAAK;AACxB,YAAM,QAAQ,IAAIA,EAAM,IAAI,CAAC4G,MAAU8zE,GAAahmB,GAAMtzD,IAAM,MAAMwF,CAAK,CAAC,CAAC;AAAA,aAExE,OAAO5G,KAAU;AACtB,YAAM,QAAQ,IAAI,OAAO,QAAQA,CAAK,EAAE,IAAI,CAAC,CAAC7C,GAAM0kB,CAAI,MAAM64D,GAAahmB,GAAM,GAAGtzD,CAAG,IAAIjE,CAAI,KAAK0kB,CAAI,CAAC,CAAC;AAAA;AAG1G,YAAM,IAAI,UAAU,wGAAwG7hB,CAAK,UAAU;AAAA;AAEnJ,GC5HM66E,KAAa,CAAC76E,MAAUA,KAAS,QACnC,OAAOA,KAAU,YACjB,OAAOA,EAAM,QAAS,YACtB,OAAOA,EAAM,QAAS,YACtB,OAAOA,EAAM,QAAS,cACtB,OAAOA,EAAM,SAAU,cACvB,OAAOA,EAAM,eAAgB,YAI3B86E,KAAa,CAAC96E,MAAUA,KAAS,QACnC,OAAOA,KAAU,YACjB,OAAOA,EAAM,QAAS,YACtB,OAAOA,EAAM,gBAAiB,YAC9B66E,GAAW76E,CAAK,GACd+6E,KAAiB,CAAC/6E,MAAUA,KAAS,QACvC,OAAOA,KAAU,YACjB,OAAOA,EAAM,OAAQ,YACrB,OAAOA,EAAM,QAAS;AAUnB,eAAeg7E,GAAOh7E,GAAO7C,GAAM43B,GAAS;AAK/C,MAJA0kD,GAAgB,GAEhBz5E,IAAQ,MAAMA,GAEV86E,GAAW96E,CAAK;AAChB,WAAIA,aAAiB,OACVA,IAEJ45E,GAAS,CAAC,MAAM55E,EAAM,YAAW,CAAE,GAAGA,EAAM,IAAI;AAE3D,MAAI+6E,GAAe/6E,CAAK,GAAG;AACvB,UAAMmjE,IAAO,MAAMnjE,EAAM,KAAI;AAC7B,WAAA7C,MAASA,IAAO,IAAI,IAAI6C,EAAM,GAAG,EAAE,SAAS,MAAM,OAAO,EAAE,IAAG,IACvD45E,GAAS,MAAMqB,GAAS9X,CAAI,GAAGhmE,GAAM43B,CAAO;AAAA,EACvD;AACA,QAAM4O,IAAQ,MAAMs3C,GAASj7E,CAAK;AAElC,MADA7C,MAASA,IAAO28E,GAAQ95E,CAAK,IACzB,EAAC+0B,KAAA,QAAAA,EAAS,OAAM;AAChB,UAAM35B,IAAOuoC,EAAM,KAAK,CAAClI,MAAS,OAAOA,KAAS,YAAY,UAAUA,KAAQA,EAAK,IAAI;AACzF,IAAI,OAAOrgC,KAAS,aAChB25B,IAAU,EAAE,GAAGA,GAAS,MAAA35B,EAAI;AAAA,EAEpC;AACA,SAAOw+E,GAASj2C,GAAOxmC,GAAM43B,CAAO;AACxC;AACA,eAAekmD,GAASj7E,GAAO;;AAC3B,MAAI2jC,IAAQ,CAAA;AACZ,MAAI,OAAO3jC,KAAU,YACjB,YAAY,OAAOA,CAAK;AAAA,EACxBA,aAAiB;AACjB,IAAA2jC,EAAM,KAAK3jC,CAAK;AAAA,WAEX66E,GAAW76E,CAAK;AACrB,IAAA2jC,EAAM,KAAK3jC,aAAiB,OAAOA,IAAQ,MAAMA,EAAM,aAAa;AAAA,WAE/D+5E,GAAgB/5E,CAAK;AAE1B,qBAAiBu1E,KAASv1E;AACtB,MAAA2jC,EAAM,KAAK,GAAI,MAAMs3C,GAAS1F,CAAK,CAAE;AAAA,OAGxC;AACD,UAAM2F,KAAcp0E,IAAA9G,KAAA,gBAAAA,EAAO,gBAAP,gBAAA8G,EAAoB;AACxC,UAAM,IAAI,MAAM,yBAAyB,OAAO9G,CAAK,GAAGk7E,IAAc,kBAAkBA,CAAW,KAAK,EAAE,GAAGC,GAAcn7E,CAAK,CAAC,EAAE;AAAA,EACvI;AACA,SAAO2jC;AACX;AACA,SAASw3C,GAAcn7E,GAAO;AAC1B,SAAI,OAAOA,KAAU,YAAYA,MAAU,OAChC,KAEJ,aADO,OAAO,oBAAoBA,CAAK,EACpB,IAAI,CAAC5H,MAAM,IAAIA,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC;AAC7D;ACrFO,MAAMgjF,GAAY;AAAA,EACrB,YAAY3zE,GAAQ;AAChB,SAAK,UAAUA;AAAA,EACnB;AACJ;ACIO,SAAS4zE,GAAc37C,GAAK;AAC/B,SAAOA,EAAI,QAAQ,oCAAoC,kBAAkB;AAC7E;AACA,MAAM47C,KAAwB,uBAAO,OAAuB,uBAAO,OAAO,IAAI,CAAC,GAClEC,KAAwB,CAACC,IAAcH,OAAkB,SAAcI,MAAY/sD,GAAQ;AAEpG,MAAI+sD,EAAQ,WAAW;AACnB,WAAOA,EAAQ,CAAC;AACpB,MAAIC,IAAW;AACf,QAAMC,IAAkB,CAAA,GAClBtrE,IAAOorE,EAAQ,OAAO,CAACG,GAAe/X,GAAc98D,MAAU;;AAChE,IAAI,OAAO,KAAK88D,CAAY,MACxB6X,IAAW;AAEf,UAAM17E,IAAQ0uB,EAAO3nB,CAAK;AAC1B,QAAI80E,KAAWH,IAAW,qBAAqBF,GAAa,KAAKx7E,CAAK;AACtE,WAAI+G,MAAU2nB,EAAO,WAChB1uB,KAAS,QACL,OAAOA,KAAU;AAAA,IAEdA,EAAM,eACF8G,IAAA,OAAO,eAAe,OAAO,eAAe9G,EAAM,kBAAkBs7E,EAAK,KAAKA,EAAK,MAAnF,gBAAAx0E,EACM,eAClB+0E,IAAU77E,IAAQ,IAClB27E,EAAgB,KAAK;AAAA,MACjB,OAAOC,EAAc,SAAS/X,EAAa;AAAA,MAC3C,QAAQgY,EAAQ;AAAA,MAChB,OAAO,iBAAiB,OAAO,UAAU,SACpC,KAAK77E,CAAK,EACV,MAAM,GAAG,EAAE,CAAC;AAAA,IACjC,CAAa,IAEE47E,IAAgB/X,KAAgB98D,MAAU2nB,EAAO,SAAS,KAAKmtD;AAAA,EAC1E,GAAG,EAAE,GACCC,IAAWzrE,EAAK,MAAM,QAAQ,CAAC,EAAE,CAAC,GAClC0rE,IAAwB,WAAA,uCAAA,IAAoC;AAClE,MAAIx+E;AAEJ,UAAQA,IAAQw+E,EAAsB,KAAKD,CAAQ,OAAO;AACtD,IAAAH,EAAgB,KAAK;AAAA,MACjB,OAAOp+E,EAAM;AAAA,MACb,QAAQA,EAAM,CAAC,EAAE;AAAA,MACjB,OAAO,UAAUA,EAAM,CAAC,CAAC;AAAA,IACrC,CAAS;AAGL,MADAo+E,EAAgB,KAAK,CAACpjF,GAAGE,MAAMF,EAAE,QAAQE,EAAE,KAAK,GAC5CkjF,EAAgB,SAAS,GAAG;AAC5B,QAAIK,IAAU;AACd,UAAMC,IAAYN,EAAgB,OAAO,CAACztE,GAAK8tB,MAAY;AACvD,YAAMkgD,IAAS,IAAI,OAAOlgD,EAAQ,QAAQggD,CAAO,GAC3CG,IAAS,IAAI,OAAOngD,EAAQ,MAAM;AACxC,aAAAggD,IAAUhgD,EAAQ,QAAQA,EAAQ,QAC3B9tB,IAAMguE,IAASC;AAAA,IAC1B,GAAG,EAAE;AACL,UAAM,IAAIrO,GAAY;AAAA,EAA0D6N,EAC3E,IAAI,CAAChjF,MAAMA,EAAE,KAAK,EAClB,KAAK;AAAA,CAAI,CAAC;AAAA,EAAK0X,CAAI;AAAA,EAAK4rE,CAAS,EAAE;AAAA,EAC5C;AACA,SAAO5rE;AACX,GAIaA,KAAuB,gBAAAkrE,GAAsBF,EAAa;SCpEhE,cAAuBD,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAetC,KAAKgB,GAAch0E,IAAQ,CAAA,GAAI2sB,GAAS;AACpC,WAAO,KAAK,QAAQ,WAAW1kB,uBAA0B+rE,CAAY,aAAc9C,IAAa,EAAE,OAAAlxE,GAAO,GAAG2sB,EAAO,CAAE;AAAA,EACzH;AACJ;ACrBO,SAASsnD,GAA6BC,GAAM;AAC/C,SAAOA,MAAS,UAAa,cAAcA,KAAQA,EAAK,aAAa;AACzE;AA6BO,SAASC,GAA6BC,GAAiB;AAC1D,UAAOA,KAAA,gBAAAA,EAAkB,YAAc;AAC3C;AAmBO,SAASC,GAAmBH,GAAM;AACrC,UAAOA,KAAA,gBAAAA,EAAO,YAAc;AAChC;AACO,SAASI,GAAyBC,GAAYjuD,GAAQ;AACzD,SAAI,CAACA,KAAU,CAACkuD,GAAsBluD,CAAM,IACjC;AAAA,IACH,GAAGiuD;AAAA,IACH,SAASA,EAAW,QAAQ,IAAI,CAACE,OAC7BC,GAAkDD,EAAO,QAAQ,UAAU,GACpE;AAAA,MACH,GAAGA;AAAA,MACH,SAAS;AAAA,QACL,GAAGA,EAAO;AAAA,QACV,QAAQ;AAAA,QACR,GAAIA,EAAO,QAAQ,aACf;AAAA,UACI,YAAYA,EAAO,QAAQ;AAAA,QAC3D,IAC8B;AAAA,MAC9B;AAAA,IACA,EACa;AAAA,EACb,IAEWE,GAAoBJ,GAAYjuD,CAAM;AACjD;AACO,SAASquD,GAAoBJ,GAAYjuD,GAAQ;AACpD,QAAMsuD,IAAUL,EAAW,QAAQ,IAAI,CAACE,MAAW;;AAC/C,QAAIA,EAAO,kBAAkB;AACzB,YAAM,IAAI9N,GAAuB;AAErC,QAAI8N,EAAO,kBAAkB;AACzB,YAAM,IAAI7N,GAA8B;AAE5C,WAAA8N,GAAkDD,EAAO,QAAQ,UAAU,GACpE;AAAA,MACH,GAAGA;AAAA,MACH,SAAS;AAAA,QACL,GAAGA,EAAO;AAAA,QACV,GAAIA,EAAO,QAAQ,aACf;AAAA,UACI,cAAY/1E,IAAA+1E,EAAO,QAAQ,eAAf,gBAAA/1E,EAA2B,IAAI,CAACm2E,MAAaC,GAAcxuD,GAAQuuD,CAAQ,OAAM;AAAA,QACrH,IACsB;AAAA,QACN,QAAQJ,EAAO,QAAQ,WAAW,CAACA,EAAO,QAAQ,UAC9CM,GAAoBzuD,GAAQmuD,EAAO,QAAQ,OAAO,IAChD;AAAA,MACtB;AAAA,IACA;AAAA,EACI,CAAC;AACD,SAAO,EAAE,GAAGF,GAAY,SAAAK,EAAO;AACnC;AACA,SAASG,GAAoBzuD,GAAQ7lB,GAAS;;AAC1C,WAAI/B,IAAA4nB,EAAO,oBAAP,gBAAA5nB,EAAwB,UAAS,gBAC1B,SAEPmG,IAAAyhB,EAAO,oBAAP,gBAAAzhB,EAAwB,UAAS,gBAC7B,eAAeyhB,EAAO,kBACEA,EAAO,gBACR,UAAU7lB,CAAO,IAErC,KAAK,MAAMA,CAAO,IAEtB;AACX;AACA,SAASq0E,GAAcxuD,GAAQuuD,GAAU;;AACrC,QAAMG,KAAYt2E,IAAA4nB,EAAO,UAAP,gBAAA5nB,EAAc,KAAK,CAACs2E,MAAS;;AAAK,WAAAf,GAA6Be,CAAS,OAAKt2E,IAAAs2E,EAAU,aAAV,gBAAAt2E,EAAoB,UAASm2E,EAAS,SAAS;AAAA;AAC9I,SAAO;AAAA,IACH,GAAGA;AAAA,IACH,UAAU;AAAA,MACN,GAAGA,EAAS;AAAA,MACZ,kBAAkBR,GAAmBW,CAAS,IAAIA,EAAU,UAAUH,EAAS,SAAS,SAAS,IAC3FG,KAAA,QAAAA,EAAW,SAAS,SAAS,KAAK,MAAMH,EAAS,SAAS,SAAS,IAC/D;AAAA,IACtB;AAAA,EACA;AACA;AACO,SAASI,GAAoB3uD,GAAQuuD,GAAU;;AAClD,MAAI,CAACvuD,KAAU,EAAE,WAAWA,MAAW,CAACA,EAAO;AAC3C,WAAO;AAEX,QAAM0uD,KAAYt2E,IAAA4nB,EAAO,UAAP,gBAAA5nB,EAAc,KAAK,CAACs2E,MAAS;;AAAK,WAAAf,GAA6Be,CAAS,OAAKt2E,IAAAs2E,EAAU,aAAV,gBAAAt2E,EAAoB,UAASm2E,EAAS,SAAS;AAAA;AAC9I,SAAQZ,GAA6Be,CAAS,MACzCX,GAAmBW,CAAS,MAAKA,KAAA,gBAAAA,EAAW,SAAS,WAAU;AACxE;AACO,SAASR,GAAsBluD,GAAQ;;AAC1C,SAAI6tD,GAA6B7tD,EAAO,eAAe,IAC5C,OAEH5nB,IAAA4nB,EAAO,UAAP,gBAAA5nB,EAAc,KAAK,CAAC+S,MAAM4iE,GAAmB5iE,CAAC,KAAMA,EAAE,SAAS,cAAcA,EAAE,SAAS,WAAW,QAAU;AACzH;AACO,SAASijE,GAAkDQ,GAAW;AACzE,aAAWL,KAAYK,KAAa;AAChC,QAAIL,EAAS,SAAS;AAClB,YAAM,IAAInP,GAAY,oEAAoEmP,EAAS,IAAI,IAAI;AAGvH;AACO,SAASM,GAAmBC,GAAO;AACtC,aAAWlB,KAAQkB,KAAS,IAAI;AAC5B,QAAIlB,EAAK,SAAS;AACd,YAAM,IAAIxO,GAAY,2EAA2EwO,EAAK,IAAI,IAAI;AAElH,QAAIA,EAAK,SAAS,WAAW;AACzB,YAAM,IAAIxO,GAAY,SAASwO,EAAK,SAAS,IAAI,4FAA4F;AAAA,EAErJ;AACJ;AChKO,MAAMmB,KAAqB,CAACpvD,OACxBA,KAAA,gBAAAA,EAAS,UAAS,aAEhBqvD,KAAgB,CAACrvD,OACnBA,KAAA,gBAAAA,EAAS,UAAS;ACJ7B,IAAIsvD,IAAwBC,IAA+BC,IAAsCC,IAAqCC,IAAyBC,IAAgCC,IAA+BC,IAAwBC,IAAoBC,IAAsBC,IAAsBC,IAAqCC;AAGpV,MAAMC,GAAY;AAAA,EACrB,cAAc;AACV,IAAAb,GAAuB,IAAI,IAAI,GAC/B,KAAK,aAAa,IAAI,gBAAe,GACrCC,GAA8B,IAAI,MAAM,MAAM,GAC9CC,GAAqC,IAAI,MAAM,MAAM;AAAA,IAAE,CAAC,GACxDC,GAAoC,IAAI,MAAM,MAAM;AAAA,IAAE,CAAC,GACvDC,GAAwB,IAAI,MAAM,MAAM,GACxCC,GAA+B,IAAI,MAAM,MAAM;AAAA,IAAE,CAAC,GAClDC,GAA8B,IAAI,MAAM,MAAM;AAAA,IAAE,CAAC,GACjDC,GAAuB,IAAI,MAAM,EAAE,GACnCC,GAAmB,IAAI,MAAM,EAAK,GAClCC,GAAqB,IAAI,MAAM,EAAK,GACpCC,GAAqB,IAAI,MAAM,EAAK,GACpCC,GAAoC,IAAI,MAAM,EAAK,GACnDjR,GAAuB,MAAMuQ,IAA+B,IAAI,QAAQ,CAAC1W,GAASuX,MAAW;AACzF,MAAApR,GAAuB,MAAMwQ,IAAsC3W,GAAS,GAAG,GAC/EmG,GAAuB,MAAMyQ,IAAqCW,GAAQ,GAAG;AAAA,IACjF,CAAC,CAAM,GACPpR,GAAuB,MAAM0Q,IAAyB,IAAI,QAAQ,CAAC7W,GAASuX,MAAW;AACnF,MAAApR,GAAuB,MAAM2Q,IAAgC9W,GAAS,GAAG,GACzEmG,GAAuB,MAAM4Q,IAA+BQ,GAAQ,GAAG;AAAA,IAC3E,CAAC,CAAM,GAKPlR,EAAuB,MAAMqQ,IAA+B,GAAG,EAAE,MAAM,MAAM;AAAA,IAAE,CAAC,GAChFrQ,EAAuB,MAAMwQ,IAAyB,GAAG,EAAE,MAAM,MAAM;AAAA,IAAE,CAAC;AAAA,EAC9E;AAAA,EACA,KAAKW,GAAU;AAGX,eAAW,MAAM;AACb,MAAAA,EAAQ,EAAG,KAAK,MAAM;AAClB,aAAK,WAAU,GACf,KAAK,MAAM,KAAK;AAAA,MACpB,GAAGnR,EAAuB,MAAMoQ,IAAwB,KAAKY,EAAwB,EAAE,KAAK,IAAI,CAAC;AAAA,IACrG,GAAG,CAAC;AAAA,EACR;AAAA,EACA,aAAa;AACT,IAAI,KAAK,UAEThR,EAAuB,MAAMsQ,IAAsC,GAAG,EAAE,KAAK,IAAI,GACjF,KAAK,MAAM,SAAS;AAAA,EACxB;AAAA,EACA,IAAI,QAAQ;AACR,WAAOtQ,EAAuB,MAAM4Q,IAAoB,GAAG;AAAA,EAC/D;AAAA,EACA,IAAI,UAAU;AACV,WAAO5Q,EAAuB,MAAM6Q,IAAsB,GAAG;AAAA,EACjE;AAAA,EACA,IAAI,UAAU;AACV,WAAO7Q,EAAuB,MAAM8Q,IAAsB,GAAG;AAAA,EACjE;AAAA,EACA,QAAQ;AACJ,SAAK,WAAW,MAAK;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,GAAGh6C,GAAOs6C,GAAU;AAEhB,YADkBpR,EAAuB,MAAM2Q,IAAwB,GAAG,EAAE75C,CAAK,MAAMkpC,EAAuB,MAAM2Q,IAAwB,GAAG,EAAE75C,CAAK,IAAI,CAAA,IAChJ,KAAK,EAAE,UAAAs6C,GAAU,GACpB;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAIt6C,GAAOs6C,GAAU;AACjB,UAAMld,IAAY8L,EAAuB,MAAM2Q,IAAwB,GAAG,EAAE75C,CAAK;AACjF,QAAI,CAACo9B;AACD,aAAO;AACX,UAAM16D,IAAQ06D,EAAU,UAAU,CAACxpE,MAAMA,EAAE,aAAa0mF,CAAQ;AAChE,WAAI53E,KAAS,KACT06D,EAAU,OAAO16D,GAAO,CAAC,GACtB;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAKs9B,GAAOs6C,GAAU;AAElB,YADkBpR,EAAuB,MAAM2Q,IAAwB,GAAG,EAAE75C,CAAK,MAAMkpC,EAAuB,MAAM2Q,IAAwB,GAAG,EAAE75C,CAAK,IAAI,CAAA,IAChJ,KAAK,EAAE,UAAAs6C,GAAU,MAAM,GAAI,CAAE,GAChC;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,QAAQt6C,GAAO;AACX,WAAO,IAAI,QAAQ,CAAC6iC,GAASuX,MAAW;AACpC,MAAApR,GAAuB,MAAMiR,IAAqC,EAAS,GACvEj6C,MAAU,WACV,KAAK,KAAK,SAASo6C,CAAM,GAC7B,KAAK,KAAKp6C,GAAO6iC,CAAO;AAAA,IAC5B,CAAC;AAAA,EACL;AAAA,EACA,MAAM,OAAO;AACT,IAAAmG,GAAuB,MAAMiR,IAAqC,EAAS,GAC3E,MAAM/Q,EAAuB,MAAMwQ,IAAyB,GAAG;AAAA,EACnE;AAAA,EACA,MAAM15C,MAAUhqC,GAAM;AAElB,QAAIkzE,EAAuB,MAAM4Q,IAAoB,GAAG;AACpD;AAEJ,IAAI95C,MAAU,UACVgpC,GAAuB,MAAM8Q,IAAoB,EAAS,GAC1D5Q,EAAuB,MAAMyQ,IAAgC,GAAG,EAAE,KAAK,IAAI;AAE/E,UAAMvc,IAAY8L,EAAuB,MAAM2Q,IAAwB,GAAG,EAAE75C,CAAK;AAKjF,QAJIo9B,MACA8L,EAAuB,MAAM2Q,IAAwB,GAAG,EAAE75C,CAAK,IAAIo9B,EAAU,OAAO,CAACxpE,MAAM,CAACA,EAAE,IAAI,GAClGwpE,EAAU,QAAQ,CAAC,EAAE,UAAAkd,EAAQ,MAAOA,EAAS,GAAGtkF,CAAI,CAAC,IAErDgqC,MAAU,SAAS;AACnB,YAAMnqC,IAAQG,EAAK,CAAC;AACpB,MAAI,CAACkzE,EAAuB,MAAM+Q,IAAqC,GAAG,KAAK,EAAC7c,KAAA,QAAAA,EAAW,WACvF,QAAQ,OAAOvnE,CAAK,GAExBqzE,EAAuB,MAAMuQ,IAAqC,GAAG,EAAE,KAAK,MAAM5jF,CAAK,GACvFqzE,EAAuB,MAAM0Q,IAA+B,GAAG,EAAE,KAAK,MAAM/jF,CAAK,GACjF,KAAK,MAAM,KAAK;AAChB;AAAA,IACJ;AACA,QAAImqC,MAAU,SAAS;AAEnB,YAAMnqC,IAAQG,EAAK,CAAC;AACpB,MAAI,CAACkzE,EAAuB,MAAM+Q,IAAqC,GAAG,KAAK,EAAC7c,KAAA,QAAAA,EAAW,WAOvF,QAAQ,OAAOvnE,CAAK,GAExBqzE,EAAuB,MAAMuQ,IAAqC,GAAG,EAAE,KAAK,MAAM5jF,CAAK,GACvFqzE,EAAuB,MAAM0Q,IAA+B,GAAG,EAAE,KAAK,MAAM/jF,CAAK,GACjF,KAAK,MAAM,KAAK;AAAA,IACpB;AAAA,EACJ;AAAA,EACA,aAAa;AAAA,EAAE;AACnB;AACA0jF,KAAgC,oBAAI,QAAO,GAAIC,KAAuC,oBAAI,QAAO,GAAIC,KAAsC,oBAAI,WAAWC,KAA0B,oBAAI,QAAO,GAAIC,KAAiC,oBAAI,QAAO,GAAIC,KAAgC,oBAAI,QAAO,GAAIC,KAAyB,oBAAI,QAAO,GAAIC,KAAqB,oBAAI,WAAWC,KAAuB,oBAAI,QAAO,GAAIC,KAAuB,oBAAI,QAAO,GAAIC,KAAsC,oBAAI,QAAO,GAAIX,KAAyB,oBAAI,QAAO,GAAIY,KAA2B,SAAkCrkF,GAAO;AAKvlB,MAJAmzE,GAAuB,MAAM+Q,IAAsB,EAAS,GACxDlkF,aAAiB,SAASA,EAAM,SAAS,iBACzCA,IAAQ,IAAI00E,GAAiB,IAE7B10E,aAAiB00E;AACjB,WAAAvB,GAAuB,MAAMgR,IAAsB,EAAS,GACrD,KAAK,MAAM,SAASnkF,CAAK;AAEpC,MAAIA,aAAiB4zE;AACjB,WAAO,KAAK,MAAM,SAAS5zE,CAAK;AAEpC,MAAIA,aAAiB,OAAO;AACxB,UAAM0kF,IAAc,IAAI9Q,GAAY5zE,EAAM,OAAO;AAEjD,WAAA0kF,EAAY,QAAQ1kF,GACb,KAAK,MAAM,SAAS0kF,CAAW;AAAA,EAC1C;AACA,SAAO,KAAK,MAAM,SAAS,IAAI9Q,GAAY,OAAO5zE,CAAK,CAAC,CAAC;AAC7D;ACxLO,SAAS2kF,GAA4BjhF,GAAI;AAC5C,SAAO,OAAOA,EAAG,SAAU;AAC/B;ACFA,IAAIkhF,IAAyCC,IAA+CC,IAA+CC,IAAwDC,IAA8DC,IAAmDC,IAA8CC;AAOlW,MAAMC,KAA+B;AAC9B,MAAMC,WAAqCf,GAAY;AAAA,EAC1D,cAAc;AACV,UAAM,GAAG,SAAS,GAClBM,GAAwC,IAAI,IAAI,GAChD,KAAK,mBAAmB,CAAA,GACxB,KAAK,WAAW,CAAA;AAAA,EACpB;AAAA,EACA,mBAAmBU,GAAgB;;AAC/B,SAAK,iBAAiB,KAAKA,CAAc,GACzC,KAAK,MAAM,kBAAkBA,CAAc;AAC3C,UAAMnxD,KAAUvnB,IAAA04E,EAAe,QAAQ,CAAC,MAAxB,gBAAA14E,EAA2B;AAC3C,WAAIunB,KACA,KAAK,YAAYA,CAAO,GACrBmxD;AAAA,EACX;AAAA,EACA,YAAYnxD,GAASoxD,IAAO,IAAM;AAI9B,QAHM,aAAapxD,MACfA,EAAQ,UAAU,OACtB,KAAK,SAAS,KAAKA,CAAO,GACtBoxD;AAEA,UADA,KAAK,MAAM,WAAWpxD,CAAO,GACzBqvD,GAAcrvD,CAAO,KAAKA,EAAQ;AAElC,aAAK,MAAM,0BAA0BA,EAAQ,OAAO;AAAA,eAE/CovD,GAAmBpvD,CAAO,KAAKA,EAAQ;AAC5C,mBAAWqxD,KAAarxD,EAAQ;AAC5B,UAAIqxD,EAAU,SAAS,cACnB,KAAK,MAAM,oBAAoBA,EAAU,QAAQ;AAAA;AAAA,EAKrE;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,sBAAsB;AACxB,UAAM,KAAK,KAAI;AACf,UAAM/C,IAAa,KAAK,iBAAiB,KAAK,iBAAiB,SAAS,CAAC;AACzE,QAAI,CAACA;AACD,YAAM,IAAI7O,GAAY,iDAAiD;AAC3E,WAAO6O;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAe;AACjB,iBAAM,KAAK,KAAI,GACRpP,EAAuB,MAAMuR,IAAyC,KAAKC,EAA6C,EAAE,KAAK,IAAI;AAAA,EAC9I;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAe;AACjB,iBAAM,KAAK,KAAI,GACRxR,EAAuB,MAAMuR,IAAyC,KAAKE,EAA6C,EAAE,KAAK,IAAI;AAAA,EAC9I;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,wBAAwB;AAC1B,iBAAM,KAAK,KAAI,GACRzR,EAAuB,MAAMuR,IAAyC,KAAKG,EAAsD,EAAE,KAAK,IAAI;AAAA,EACvJ;AAAA,EACA,MAAM,8BAA8B;AAChC,iBAAM,KAAK,KAAI,GACR1R,EAAuB,MAAMuR,IAAyC,KAAKI,EAA4D,EAAE,KAAK,IAAI;AAAA,EAC7J;AAAA,EACA,MAAM,aAAa;AACf,iBAAM,KAAK,KAAI,GACR3R,EAAuB,MAAMuR,IAAyC,KAAKK,EAAiD,EAAE,KAAK,IAAI;AAAA,EAClJ;AAAA,EACA,qBAAqB;AACjB,WAAO,CAAC,GAAG,KAAK,gBAAgB;AAAA,EACpC;AAAA,EACA,aAAa;AACT,UAAMxC,IAAa,KAAK,iBAAiB,KAAK,iBAAiB,SAAS,CAAC;AACzE,IAAIA,KACA,KAAK,MAAM,uBAAuBA,CAAU;AAChD,UAAMgD,IAAepS,EAAuB,MAAMuR,IAAyC,KAAKE,EAA6C,EAAE,KAAK,IAAI;AACxJ,IAAIW,KACA,KAAK,MAAM,gBAAgBA,CAAY;AAC3C,UAAMC,IAAerS,EAAuB,MAAMuR,IAAyC,KAAKC,EAA6C,EAAE,KAAK,IAAI;AACxJ,IAAIa,KACA,KAAK,MAAM,gBAAgBA,CAAY;AAC3C,UAAMC,IAAoBtS,EAAuB,MAAMuR,IAAyC,KAAKG,EAAsD,EAAE,KAAK,IAAI;AACtK,IAAIY,KACA,KAAK,MAAM,yBAAyBA,CAAiB;AACzD,UAAMC,IAA0BvS,EAAuB,MAAMuR,IAAyC,KAAKI,EAA4D,EAAE,KAAK,IAAI;AAClL,IAAIY,KAA2B,QAC3B,KAAK,MAAM,+BAA+BA,CAAuB,GACjE,KAAK,iBAAiB,KAAK,CAACxnF,MAAMA,EAAE,KAAK,KACzC,KAAK,MAAM,cAAci1E,EAAuB,MAAMuR,IAAyC,KAAKK,EAAiD,EAAE,KAAK,IAAI,CAAC;AAAA,EAEzK;AAAA,EACA,MAAM,sBAAsB13E,GAAQinB,GAAQqG,GAAS;AACjD,UAAMgrD,IAAShrD,KAAA,gBAAAA,EAAS;AACxB,IAAIgrD,MACIA,EAAO,WACP,KAAK,WAAW,MAAK,GACzBA,EAAO,iBAAiB,SAAS,MAAM,KAAK,WAAW,OAAO,IAElExS,EAAuB,MAAMuR,IAAyC,KAAKM,EAA4C,EAAE,KAAK,MAAM1wD,CAAM;AAC1I,UAAM8wD,IAAiB,MAAM/3E,EAAO,KAAK,YAAY,OAAO,EAAE,GAAGinB,GAAQ,QAAQ,GAAK,GAAI,EAAE,GAAGqG,GAAS,QAAQ,KAAK,WAAW,QAAQ;AACxI,gBAAK,WAAU,GACR,KAAK,mBAAmBgoD,GAAoByC,GAAgB9wD,CAAM,CAAC;AAAA,EAC9E;AAAA,EACA,MAAM,mBAAmBjnB,GAAQinB,GAAQqG,GAAS;AAC9C,eAAW1G,KAAWK,EAAO;AACzB,WAAK,YAAYL,GAAS,EAAK;AAEnC,WAAO,MAAM,KAAK,sBAAsB5mB,GAAQinB,GAAQqG,CAAO;AAAA,EACnE;AAAA,EACA,MAAM,UAAUttB,GAAQinB,GAAQqG,GAAS;;AACrC,UAAMirD,IAAO,QACP,EAAE,aAAAC,IAAc,QAAQ,QAAAzO,GAAQ,GAAG0O,EAAU,IAAKxxD,GAClDyxD,IAAuB,OAAOF,KAAgB,YAAYA,EAAY,SAAS,gBAAcn5E,IAAAm5E,KAAA,gBAAAA,EAAa,aAAb,gBAAAn5E,EAAuB,OACpH,EAAE,oBAAAs5E,IAAqBd,GAA4B,IAAKvqD,KAAW,CAAA,GAEnEsrD,IAAa3xD,EAAO,MAAM,IAAI,CAAC4tD,MAAS;AAC1C,UAAIG,GAAmBH,CAAI,GAAG;AAC1B,YAAI,CAACA,EAAK;AACN,gBAAM,IAAIxO,GAAY,uEAAuE;AAEjG,eAAO;AAAA,UACH,MAAM;AAAA,UACN,UAAU;AAAA,YACN,UAAUwO,EAAK;AAAA,YACf,MAAMA,EAAK,SAAS;AAAA,YACpB,aAAaA,EAAK,SAAS,eAAe;AAAA,YAC1C,YAAYA,EAAK,SAAS;AAAA,YAC1B,OAAOA,EAAK;AAAA,YACZ,QAAQ;AAAA,UAChC;AAAA,QACA;AAAA,MACY;AACA,aAAOA;AAAA,IACX,CAAC,GACKgE,IAAkB,CAAA;AACxB,eAAWxoF,KAAKuoF;AACZ,MAAIvoF,EAAE,SAAS,eACXwoF,EAAgBxoF,EAAE,SAAS,QAAQA,EAAE,SAAS,SAAS,IAAI,IAAIA,EAAE;AAGzE,UAAM0lF,IAAQ,WAAW9uD,IACrB2xD,EAAW,IAAI,CAACxmE,MAAMA,EAAE,SAAS,aAC7B;AAAA,MACI,MAAM;AAAA,MACN,UAAU;AAAA,QACN,MAAMA,EAAE,SAAS,QAAQA,EAAE,SAAS,SAAS;AAAA,QAC7C,YAAYA,EAAE,SAAS;AAAA,QACvB,aAAaA,EAAE,SAAS;AAAA,QACxB,QAAQA,EAAE,SAAS;AAAA,MAC3C;AAAA,IACA,IACkBA,CAAC,IACL;AACN,eAAWwU,KAAWK,EAAO;AACzB,WAAK,YAAYL,GAAS,EAAK;AAEnC,aAASzrB,IAAI,GAAGA,IAAIw9E,GAAoB,EAAEx9E,GAAG;AAOzC,YAAMyrB,KAAUphB,KANO,MAAM,KAAK,sBAAsBxF,GAAQ;AAAA,QAC5D,GAAGy4E;AAAA,QACH,aAAAD;AAAA,QACA,OAAAzC;AAAA,QACA,UAAU,CAAC,GAAG,KAAK,QAAQ;AAAA,MAC3C,GAAezoD,CAAO,GACqB,QAAQ,CAAC,MAAxB,gBAAA9nB,EAA2B;AAC3C,UAAI,CAACohB;AACD,cAAM,IAAIy/C,GAAY,4CAA4C;AAEtE,UAAI,GAAClvD,IAAAyP,EAAQ,eAAR,QAAAzP,EAAoB;AACrB;AAEJ,iBAAW8gE,KAAarxD,EAAQ,YAAY;AACxC,YAAIqxD,EAAU,SAAS;AACnB;AACJ,cAAMa,IAAeb,EAAU,IACzB,EAAE,MAAAviF,GAAM,WAAW9C,EAAI,IAAKqlF,EAAU,UACtC9hF,IAAK0iF,EAAgBnjF,CAAI;AAC/B,YAAKS;AAOA,cAAIuiF,KAAwBA,MAAyBhjF,GAAM;AAC5D,kBAAM0L,IAAU,sBAAsB,KAAK,UAAU1L,CAAI,CAAC,KAAK,KAAK,UAAUgjF,CAAoB,CAAC;AACnG,iBAAK,YAAY,EAAE,MAAAH,GAAM,cAAAO,GAAc,SAAA13E,EAAO,CAAE;AAChD;AAAA,UACJ;AAAA,eAXS;AACL,gBAAMA,IAAU,sBAAsB,KAAK,UAAU1L,CAAI,CAAC,4BAA4B,OAAO,KAAKmjF,CAAe,EAC5G,IAAI,CAACnjF,MAAS,KAAK,UAAUA,CAAI,CAAC,EAClC,KAAK,IAAI,CAAC;AACf,eAAK,YAAY,EAAE,MAAA6iF,GAAM,cAAAO,GAAc,SAAA13E,EAAO,CAAE;AAChD;AAAA,QACJ;AAMA,YAAI23E;AACJ,YAAI;AACA,UAAAA,IAAS3B,GAA4BjhF,CAAE,IAAI,MAAMA,EAAG,MAAMvD,CAAI,IAAIA;AAAA,QACtE,SACOH,GAAO;AACV,gBAAM2O,IAAU3O,aAAiB,QAAQA,EAAM,UAAU,OAAOA,CAAK;AACrE,eAAK,YAAY,EAAE,MAAA8lF,GAAM,cAAAO,GAAc,SAAA13E,EAAO,CAAE;AAChD;AAAA,QACJ;AAEA,cAAM43E,IAAa,MAAM7iF,EAAG,SAAS4iF,GAAQ,IAAI,GAC3C33E,IAAU0kE,EAAuB,MAAMuR,IAAyC,KAAKO,EAAyD,EAAE,KAAK,MAAMoB,CAAU;AAE3K,YADA,KAAK,YAAY,EAAE,MAAAT,GAAM,cAAAO,GAAc,SAAA13E,EAAO,CAAE,GAC5Cs3E;AACA;AAAA,MAER;AAAA,IACJ;AAAA,EAEJ;AACJ;AACArB,KAA0C,oBAAI,QAAO,GAAIC,KAAgD,WAAyD;AAC9J,SAAOxR,EAAuB,MAAMuR,IAAyC,KAAKE,EAA6C,EAAE,KAAK,IAAI,EAAE,WAAW;AAC3J,GAAGA,KAAgD,WAAyD;AACxG,MAAIp8E,IAAI,KAAK,SAAS;AACtB,SAAOA,MAAM,KAAG;AACZ,UAAMyrB,IAAU,KAAK,SAASzrB,CAAC;AAC/B,QAAI66E,GAAmBpvD,CAAO;AAO1B,aALY;AAAA,QACR,GAAGA;AAAA,QACH,SAASA,EAAQ,WAAW;AAAA,QAC5B,SAASA,EAAQ,WAAW;AAAA,MAC5C;AAAA,EAGI;AACA,QAAM,IAAIy/C,GAAY,4EAA4E;AACtG,GAAGmR,KAAyD,WAAkE;;AAC1H,WAASr8E,IAAI,KAAK,SAAS,SAAS,GAAGA,KAAK,GAAGA,KAAK;AAChD,UAAMyrB,IAAU,KAAK,SAASzrB,CAAC;AAC/B,QAAI66E,GAAmBpvD,CAAO,OAAKvnB,IAAAunB,KAAA,gBAAAA,EAAS,eAAT,QAAAvnB,EAAqB;AACpD,cAAOmG,IAAAohB,EAAQ,WAAW,OAAO,CAAC/wB,MAAMA,EAAE,SAAS,UAAU,EAAE,GAAG,EAAE,MAA7D,gBAAA2P,EAAgE;AAAA,EAE/E;AAEJ,GAAGiyE,KAA+D,WAAwE;AACtI,WAASt8E,IAAI,KAAK,SAAS,SAAS,GAAGA,KAAK,GAAGA,KAAK;AAChD,UAAMyrB,IAAU,KAAK,SAASzrB,CAAC;AAC/B,QAAI86E,GAAcrvD,CAAO,KACrBA,EAAQ,WAAW,QACnB,OAAOA,EAAQ,WAAY,YAC3B,KAAK,SAAS,KAAK,CAAC/wB,MAAC;;AAAK,aAAAA,EAAE,SAAS,iBACjCwJ,IAAAxJ,EAAE,eAAF,gBAAAwJ,EAAc,KAAK,CAACiX,MAAMA,EAAE,SAAS,cAAcA,EAAE,OAAOsQ,EAAQ;AAAA,KAAa;AACrF,aAAOA,EAAQ;AAAA,EAEvB;AAEJ,GAAG8wD,KAAoD,WAA6D;AAChH,QAAMuB,IAAQ;AAAA,IACV,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,cAAc;AAAA,EACtB;AACI,aAAW,EAAE,OAAAC,OAAW,KAAK;AACzB,IAAIA,MACAD,EAAM,qBAAqBC,EAAM,mBACjCD,EAAM,iBAAiBC,EAAM,eAC7BD,EAAM,gBAAgBC,EAAM;AAGpC,SAAOD;AACX,GAAGtB,KAA+C,SAAsD1wD,GAAQ;AAC5G,MAAIA,EAAO,KAAK,QAAQA,EAAO,IAAI;AAC/B,UAAM,IAAIo/C,GAAY,8HAA8H;AAE5J,GAAGuR,KAA4D,SAAmEoB,GAAY;AAC1I,SAAQ,OAAOA,KAAe,WAAWA,IACnCA,MAAe,SAAY,cACvB,KAAK,UAAUA,CAAU;AACvC;AC3RO,MAAMG,WAA6BrB,GAA6B;AAAA,EACnE,OAAO,SAAS93E,GAAQinB,GAAQqG,GAAS;AACrC,UAAM8rD,IAAS,IAAID,GAAoB,GACjC5sD,IAAO;AAAA,MACT,GAAGe;AAAA,MACH,SAAS,EAAE,GAAGA,KAAA,gBAAAA,EAAS,SAAS,6BAA6B,WAAU;AAAA,IACnF;AACQ,WAAA8rD,EAAO,KAAK,MAAMA,EAAO,UAAUp5E,GAAQinB,GAAQsF,CAAI,CAAC,GACjD6sD;AAAA,EACX;AAAA,EACA,YAAYxyD,GAASoxD,IAAO,IAAM;AAC9B,UAAM,YAAYpxD,GAASoxD,CAAI,GAC3BhC,GAAmBpvD,CAAO,KAAKA,EAAQ,WACvC,KAAK,MAAM,WAAWA,EAAQ,OAAO;AAAA,EAE7C;AACJ;AClBA,MAAMyyD,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAO,IACPC,KAAO,IACPC,KAAM,IACNC,KAAW,KACXC,KAAiB,KACjBC,KAAMF,KAAWC,IACjBE,KAAUN,KAAOC,KAAOI,KAAMH,IAC9BK,KAAOX,KAAMC,KAAMS,IACnBE,KAAaV,KAAMC,IACnBU,KAAMF,KAAOC,IACbE,KAAQ;AAAA,EACV,KAAAd;AAAA,EACA,KAAAC;AAAA,EACA,KAAAC;AAAA,EACA,KAAAC;AAAA,EACA,MAAAC;AAAA,EACA,MAAAC;AAAA,EACA,KAAAC;AAAA,EACA,UAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,KAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,YAAAC;AAAA,EACA,KAAAC;AACJ;AAEA,MAAME,WAAoB,MAAM;AAChC;AACA,MAAMC,WAAsB,MAAM;AAClC;AASA,SAASC,GAAU7e,GAAY8e,IAAeJ,GAAM,KAAK;AACrD,MAAI,OAAO1e,KAAe;AACtB,UAAM,IAAI,UAAU,sBAAsB,OAAOA,CAAU,EAAE;AAEjE,MAAI,CAACA,EAAW;AACZ,UAAM,IAAI,MAAM,GAAGA,CAAU,WAAW;AAE5C,SAAO+e,GAAW/e,EAAW,KAAI,GAAI8e,CAAY;AACrD;AACA,MAAMC,KAAa,CAAC/e,GAAYgf,MAAU;AACtC,QAAMp/B,IAASogB,EAAW;AAC1B,MAAIn8D,IAAQ;AACZ,QAAMo7E,IAAkB,CAAClU,MAAQ;AAC7B,UAAM,IAAI4T,GAAY,GAAG5T,CAAG,gBAAgBlnE,CAAK,EAAE;AAAA,EACvD,GACMq7E,IAAsB,CAACnU,MAAQ;AACjC,UAAM,IAAI6T,GAAc,GAAG7T,CAAG,gBAAgBlnE,CAAK,EAAE;AAAA,EACzD,GACMs7E,IAAW,OACbC,EAAS,GACLv7E,KAAS+7C,KACTq/B,EAAgB,yBAAyB,GACzCjf,EAAWn8D,CAAK,MAAM,MACfw7E,EAAQ,IACfrf,EAAWn8D,CAAK,MAAM,MACfy7E,EAAQ,IACftf,EAAWn8D,CAAK,MAAM,MACf07E,EAAQ,IACfvf,EAAW,UAAUn8D,GAAOA,IAAQ,CAAC,MAAM,UAC1C66E,GAAM,OAAOM,KAASp/B,IAAS/7C,IAAQ,KAAK,OAAO,WAAWm8D,EAAW,UAAUn8D,CAAK,CAAC,KAC1FA,KAAS,GACF,QAEPm8D,EAAW,UAAUn8D,GAAOA,IAAQ,CAAC,MAAM,UAC1C66E,GAAM,OAAOM,KAASp/B,IAAS/7C,IAAQ,KAAK,OAAO,WAAWm8D,EAAW,UAAUn8D,CAAK,CAAC,KAC1FA,KAAS,GACF,MAEPm8D,EAAW,UAAUn8D,GAAOA,IAAQ,CAAC,MAAM,WAC1C66E,GAAM,OAAOM,KAASp/B,IAAS/7C,IAAQ,KAAK,QAAQ,WAAWm8D,EAAW,UAAUn8D,CAAK,CAAC,KAC3FA,KAAS,GACF,MAEPm8D,EAAW,UAAUn8D,GAAOA,IAAQ,CAAC,MAAM,cAC1C66E,GAAM,WAAWM,KAASp/B,IAAS/7C,IAAQ,KAAK,WAAW,WAAWm8D,EAAW,UAAUn8D,CAAK,CAAC,KAClGA,KAAS,GACF,SAEPm8D,EAAW,UAAUn8D,GAAOA,IAAQ,CAAC,MAAM,eAC1C66E,GAAM,iBAAiBM,KACpB,IAAIp/B,IAAS/7C,KACb+7C,IAAS/7C,IAAQ,KACjB,YAAY,WAAWm8D,EAAW,UAAUn8D,CAAK,CAAC,KACtDA,KAAS,GACF,UAEPm8D,EAAW,UAAUn8D,GAAOA,IAAQ,CAAC,MAAM,SAC1C66E,GAAM,MAAMM,KAASp/B,IAAS/7C,IAAQ,KAAK,MAAM,WAAWm8D,EAAW,UAAUn8D,CAAK,CAAC,KACxFA,KAAS,GACF,OAEJ27E,EAAQ,IAEbH,IAAW,MAAM;AACnB,UAAMr6E,IAAQnB;AACd,QAAI47E,IAAS;AAEb,SADA57E,KACOA,IAAQ+7C,MAAWogB,EAAWn8D,CAAK,MAAM,OAAQ47E,KAAUzf,EAAWn8D,IAAQ,CAAC,MAAM;AACxF,MAAA47E,IAASzf,EAAWn8D,CAAK,MAAM,OAAO,CAAC47E,IAAS,IAChD57E;AAEJ,QAAIm8D,EAAW,OAAOn8D,CAAK,KAAK;AAC5B,UAAI;AACA,eAAO,KAAK,MAAMm8D,EAAW,UAAUh7D,GAAO,EAAEnB,IAAQ,OAAO47E,CAAM,CAAC,CAAC;AAAA,MAC3E,SACOhqF,GAAG;AACN,QAAAypF,EAAoB,OAAOzpF,CAAC,CAAC;AAAA,MACjC;AAAA,aAEKipF,GAAM,MAAMM;AACjB,UAAI;AACA,eAAO,KAAK,MAAMhf,EAAW,UAAUh7D,GAAOnB,IAAQ,OAAO47E,CAAM,CAAC,IAAI,GAAG;AAAA,MAC/E,QACU;AAEN,eAAO,KAAK,MAAMzf,EAAW,UAAUh7D,GAAOg7D,EAAW,YAAY,IAAI,CAAC,IAAI,GAAG;AAAA,MACrF;AAEJ,IAAAif,EAAgB,6BAA6B;AAAA,EACjD,GACMK,IAAW,MAAM;AACnB,IAAAz7E,KACAu7E,EAAS;AACT,UAAM91D,IAAM,CAAA;AACZ,QAAI;AACA,aAAO02C,EAAWn8D,CAAK,MAAM,OAAK;AAE9B,YADAu7E,EAAS,GACLv7E,KAAS+7C,KAAU8+B,GAAM,MAAMM;AAC/B,iBAAO11D;AACX,cAAMprB,IAAMmhF,EAAQ;AACpB,QAAAD,EAAS,GACTv7E;AACA,YAAI;AACA,gBAAM/G,IAAQqiF,EAAQ;AACtB,iBAAO,eAAe71D,GAAKprB,GAAK,EAAE,OAAApB,GAAO,UAAU,IAAM,YAAY,IAAM,cAAc,GAAI,CAAE;AAAA,QACnG,SACOrH,GAAG;AACN,cAAIipF,GAAM,MAAMM;AACZ,mBAAO11D;AAEP,gBAAM7zB;AAAA,QACd;AACA,QAAA2pF,EAAS,GACLpf,EAAWn8D,CAAK,MAAM,OACtBA;AAAA,MACR;AAAA,IACJ,QACU;AACN,UAAI66E,GAAM,MAAMM;AACZ,eAAO11D;AAEP,MAAA21D,EAAgB,+BAA+B;AAAA,IACvD;AACA,WAAAp7E,KACOylB;AAAA,EACX,GACMi2D,IAAW,MAAM;AACnB,IAAA17E;AACA,UAAM4lB,IAAM,CAAA;AACZ,QAAI;AACA,aAAOu2C,EAAWn8D,CAAK,MAAM;AACzB,QAAA4lB,EAAI,KAAK01D,GAAU,GACnBC,EAAS,GACLpf,EAAWn8D,CAAK,MAAM,OACtBA;AAAA,IAGZ,QACU;AACN,UAAI66E,GAAM,MAAMM;AACZ,eAAOv1D;AAEX,MAAAw1D,EAAgB,8BAA8B;AAAA,IAClD;AACA,WAAAp7E,KACO4lB;AAAA,EACX,GACM+1D,IAAW,MAAM;AACnB,QAAI37E,MAAU,GAAG;AACb,MAAIm8D,MAAe,OAAO0e,GAAM,MAAMM,KAClCC,EAAgB,sBAAsB;AAC1C,UAAI;AACA,eAAO,KAAK,MAAMjf,CAAU;AAAA,MAChC,SACOvqE,GAAG;AACN,YAAIipF,GAAM,MAAMM;AACZ,cAAI;AACA,mBAAYhf,EAAWA,EAAW,SAAS,CAAC,MAAxC,MACO,KAAK,MAAMA,EAAW,UAAU,GAAGA,EAAW,YAAY,GAAG,CAAC,CAAC,IACnE,KAAK,MAAMA,EAAW,UAAU,GAAGA,EAAW,YAAY,GAAG,CAAC,CAAC;AAAA,UAC1E,QACU;AAAA,UAAE;AAEhB,QAAAkf,EAAoB,OAAOzpF,CAAC,CAAC;AAAA,MACjC;AAAA,IACJ;AACA,UAAMuP,IAAQnB;AAGd,SAFIm8D,EAAWn8D,CAAK,MAAM,OACtBA,KACGm8D,EAAWn8D,CAAK,KAAK,CAAC,MAAM,SAASm8D,EAAWn8D,CAAK,CAAC;AACzD,MAAAA;AACJ,IAAIA,KAAS+7C,KAAU,EAAE8+B,GAAM,MAAMM,MACjCC,EAAgB,6BAA6B;AACjD,QAAI;AACA,aAAO,KAAK,MAAMjf,EAAW,UAAUh7D,GAAOnB,CAAK,CAAC;AAAA,IACxD,QACU;AACN,MAAIm8D,EAAW,UAAUh7D,GAAOnB,CAAK,MAAM,OAAO66E,GAAM,MAAMM,KAC1DC,EAAgB,sBAAsB;AAC1C,UAAI;AACA,eAAO,KAAK,MAAMjf,EAAW,UAAUh7D,GAAOg7D,EAAW,YAAY,GAAG,CAAC,CAAC;AAAA,MAC9E,SACOvqE,GAAG;AACN,QAAAypF,EAAoB,OAAOzpF,CAAC,CAAC;AAAA,MACjC;AAAA,IACJ;AAAA,EACJ,GACM2pF,IAAY,MAAM;AACpB,WAAOv7E,IAAQ+7C,KAAU;AAAA,KAAU,SAASogB,EAAWn8D,CAAK,CAAC;AACzD,MAAAA;AAAA,EAER;AACA,SAAOs7E,EAAQ;AACnB,GAEMO,KAAe,CAAC/xD,MAAUkxD,GAAUlxD,GAAO+wD,GAAM,MAAMA,GAAM,GAAG;AC9OtE,IAAIiB,IAAiCC,IAA8BC,IAAyCC,IAAqDC,IAAoCC,IAA2CC,IAAgCC,IAA6CC,IAA6CC,IAAkCC,IAAsDC;AAO3b,MAAMC,WAA6BlE,GAA6B;AAAA,EACnE,YAAY7wD,GAAQ;AAChB,UAAK,GACLm0D,GAAgC,IAAI,IAAI,GACxCC,GAA6B,IAAI,MAAM,MAAM,GAC7CC,GAAwC,IAAI,MAAM,MAAM,GACxDC,GAAoD,IAAI,MAAM,MAAM,GACpE3V,GAAuB,MAAMyV,IAA8Bp0D,CAAW,GACtE2+C,GAAuB,MAAM0V,IAAyC,EAAO;AAAA,EACjF;AAAA,EACA,IAAI,gCAAgC;AAChC,WAAOxV,EAAuB,MAAMyV,IAAqD,GAAG;AAAA,EAChG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,mBAAmBxR,GAAQ;AAC9B,UAAMqP,IAAS,IAAI4C,GAAqB,IAAI;AAC5C,WAAA5C,EAAO,KAAK,MAAMA,EAAO,oBAAoBrP,CAAM,CAAC,GAC7CqP;AAAA,EACX;AAAA,EACA,OAAO,qBAAqBp5E,GAAQinB,GAAQqG,GAAS;AACjD,UAAM8rD,IAAS,IAAI4C,GAAqB/0D,CAAM;AAC9C,WAAAmyD,EAAO,KAAK,MAAMA,EAAO,mBAAmBp5E,GAAQ,EAAE,GAAGinB,GAAQ,QAAQ,GAAI,GAAI,EAAE,GAAGqG,GAAS,SAAS,EAAE,GAAGA,KAAA,gBAAAA,EAAS,SAAS,6BAA6B,SAAQ,EAAE,CAAE,CAAC,GAClK8rD;AAAA,EACX;AAAA,EACA,MAAM,sBAAsBp5E,GAAQinB,GAAQqG,GAAS;;AACjD,UAAM;AACN,UAAMgrD,IAAShrD,KAAA,gBAAAA,EAAS;AACxB,IAAIgrD,MACIA,EAAO,WACP,KAAK,WAAW,MAAK,GACzBA,EAAO,iBAAiB,SAAS,MAAM,KAAK,WAAW,OAAO,IAElExS,EAAuB,MAAMsV,IAAiC,KAAKI,EAAkC,EAAE,KAAK,IAAI;AAChH,UAAMzR,IAAS,MAAM/pE,EAAO,KAAK,YAAY,OAAO,EAAE,GAAGinB,GAAQ,QAAQ,GAAI,GAAI,EAAE,GAAGqG,GAAS,QAAQ,KAAK,WAAW,QAAQ;AAC/H,SAAK,WAAU;AACf,qBAAiBwgD,KAAS/D;AACtB,MAAAjE,EAAuB,MAAMsV,IAAiC,KAAKM,EAA8B,EAAE,KAAK,MAAM5N,CAAK;AAEvH,SAAIzuE,IAAA0qE,EAAO,WAAW,WAAlB,QAAA1qE,EAA0B;AAC1B,YAAM,IAAI8nE,GAAiB;AAE/B,WAAO,KAAK,mBAAmBrB,EAAuB,MAAMsV,IAAiC,KAAKS,EAAgC,EAAE,KAAK,IAAI,CAAC;AAAA,EAClJ;AAAA,EACA,MAAM,oBAAoBnM,GAAgBpiD,GAAS;;AAC/C,UAAMgrD,IAAShrD,KAAA,gBAAAA,EAAS;AACxB,IAAIgrD,MACIA,EAAO,WACP,KAAK,WAAW,MAAK,GACzBA,EAAO,iBAAiB,SAAS,MAAM,KAAK,WAAW,OAAO,IAElExS,EAAuB,MAAMsV,IAAiC,KAAKI,EAAkC,EAAE,KAAK,IAAI,GAChH,KAAK,WAAU;AACf,UAAMzR,IAASuF,GAAO,mBAAmBI,GAAgB,KAAK,UAAU;AACxE,QAAIuM;AACJ,qBAAiBnO,KAAS/D;AACtB,MAAIkS,KAAUA,MAAWnO,EAAM,MAE3B,KAAK,mBAAmBhI,EAAuB,MAAMsV,IAAiC,KAAKS,EAAgC,EAAE,KAAK,IAAI,CAAC,GAE3I/V,EAAuB,MAAMsV,IAAiC,KAAKM,EAA8B,EAAE,KAAK,MAAM5N,CAAK,GACnHmO,IAASnO,EAAM;AAEnB,SAAIzuE,IAAA0qE,EAAO,WAAW,WAAlB,QAAA1qE,EAA0B;AAC1B,YAAM,IAAI8nE,GAAiB;AAE/B,WAAO,KAAK,mBAAmBrB,EAAuB,MAAMsV,IAAiC,KAAKS,EAAgC,EAAE,KAAK,IAAI,CAAC;AAAA,EAClJ;AAAA,EACA,EAAER,KAA+B,oBAAI,QAAO,GAAIC,KAA0C,oBAAI,QAAO,GAAIC,KAAsD,oBAAI,QAAO,GAAIH,KAAkC,oBAAI,QAAO,GAAII,KAAqC,WAA8C;AAC9S,IAAI,KAAK,SAET5V,GAAuB,MAAM2V,IAAqD,MAAc;AAAA,EACpG,GAAGE,KAA4C,SAAmDrG,GAAQ;AACtG,QAAI/tC,IAAQy+B,EAAuB,MAAMwV,IAAyC,GAAG,EAAElG,EAAO,KAAK;AACnG,WAAI/tC,MAGJA,IAAQ;AAAA,MACJ,cAAc;AAAA,MACd,cAAc;AAAA,MACd,uBAAuB;AAAA,MACvB,uBAAuB;AAAA,MACvB,iBAAiB,oBAAI,IAAG;AAAA,MACxB,yBAAyB;AAAA,IACrC,GACQy+B,EAAuB,MAAMwV,IAAyC,GAAG,EAAElG,EAAO,KAAK,IAAI/tC,GACpFA;AAAA,EACX,GAAGq0C,KAAiC,SAAwC5N,GAAO;;AAC/E,QAAI,KAAK;AACL;AACJ,UAAMoH,IAAapP,EAAuB,MAAMsV,IAAiC,KAAKW,EAA8C,EAAE,KAAK,MAAMjO,CAAK;AACtJ,SAAK,MAAM,SAASA,GAAOoH,CAAU;AACrC,eAAWE,KAAUtH,EAAM,SAAS;AAChC,YAAMoO,IAAiBhH,EAAW,QAAQE,EAAO,KAAK;AACtD,MAAIA,EAAO,MAAM,WAAW,UACxB/1E,IAAA68E,EAAe,YAAf,gBAAA78E,EAAwB,UAAS,iBACjCmG,IAAA02E,EAAe,YAAf,QAAA12E,EAAwB,aACxB,KAAK,MAAM,WAAW4vE,EAAO,MAAM,SAAS8G,EAAe,QAAQ,OAAO,GAC1E,KAAK,MAAM,iBAAiB;AAAA,QACxB,OAAO9G,EAAO,MAAM;AAAA,QACpB,UAAU8G,EAAe,QAAQ;AAAA,QACjC,QAAQA,EAAe,QAAQ;AAAA,MACnD,CAAiB,IAED9G,EAAO,MAAM,WAAW,UACxBj+D,IAAA+kE,EAAe,YAAf,gBAAA/kE,EAAwB,UAAS,iBACjCC,IAAA8kE,EAAe,YAAf,QAAA9kE,EAAwB,YACxB,KAAK,MAAM,iBAAiB;AAAA,QACxB,OAAOg+D,EAAO,MAAM;AAAA,QACpB,UAAU8G,EAAe,QAAQ;AAAA,MACrD,CAAiB,KAED7oE,IAAA+hE,EAAO,aAAP,gBAAA/hE,EAAiB,YAAW,UAAQuvC,IAAAs5B,EAAe,YAAf,gBAAAt5B,EAAwB,UAAS,eACrE,KAAK,MAAM,0BAA0B;AAAA,QACjC,UAASu5B,IAAA/G,EAAO,aAAP,gBAAA+G,EAAiB;AAAA,QAC1B,YAAUC,IAAAF,EAAe,aAAf,gBAAAE,EAAyB,YAAW,CAAA;AAAA,MAClE,CAAiB,KAEDC,IAAAjH,EAAO,aAAP,gBAAAiH,EAAiB,YAAW,UAAQC,IAAAJ,EAAe,YAAf,gBAAAI,EAAwB,UAAS,eACrE,KAAK,MAAM,0BAA0B;AAAA,QACjC,UAASxU,IAAAsN,EAAO,aAAP,gBAAAtN,EAAiB;AAAA,QAC1B,YAAUyU,IAAAL,EAAe,aAAf,gBAAAK,EAAyB,YAAW,CAAA;AAAA,MAClE,CAAiB;AAEL,YAAMl1C,IAAQy+B,EAAuB,MAAMsV,IAAiC,KAAKK,EAAyC,EAAE,KAAK,MAAMS,CAAc;AACrJ,MAAIA,EAAe,kBACfpW,EAAuB,MAAMsV,IAAiC,KAAKQ,EAA2C,EAAE,KAAK,MAAMM,CAAc,GACrI70C,EAAM,2BAA2B,QACjCy+B,EAAuB,MAAMsV,IAAiC,KAAKO,EAA2C,EAAE,KAAK,MAAMO,GAAgB70C,EAAM,uBAAuB;AAGhL,iBAAWmuC,KAAYJ,EAAO,MAAM,cAAc,CAAA;AAC9C,QAAI/tC,EAAM,4BAA4BmuC,EAAS,UAC3C1P,EAAuB,MAAMsV,IAAiC,KAAKQ,EAA2C,EAAE,KAAK,MAAMM,CAAc,GAErI70C,EAAM,2BAA2B,QACjCy+B,EAAuB,MAAMsV,IAAiC,KAAKO,EAA2C,EAAE,KAAK,MAAMO,GAAgB70C,EAAM,uBAAuB,IAGhLA,EAAM,0BAA0BmuC,EAAS;AAE7C,iBAAWgH,KAAiBpH,EAAO,MAAM,cAAc,CAAA,GAAI;AACvD,cAAMqH,KAAmBC,IAAAR,EAAe,QAAQ,eAAvB,gBAAAQ,EAAoCF,EAAc;AAC3E,QAAKC,KAAA,QAAAA,EAAkB,UAGnBA,KAAA,gBAAAA,EAAkB,UAAS,aAC3B,KAAK,MAAM,uCAAuC;AAAA,UAC9C,OAAME,IAAAF,EAAiB,aAAjB,gBAAAE,EAA2B;AAAA,UACjC,OAAOH,EAAc;AAAA,UACrB,WAAWC,EAAiB,SAAS;AAAA,UACrC,kBAAkBA,EAAiB,SAAS;AAAA,UAC5C,mBAAiBG,IAAAJ,EAAc,aAAd,gBAAAI,EAAwB,cAAa;AAAA,QAC9E,CAAqB,KAGWH,KAAA,QAAAA,EAAkB,MAA9B;AAAA,MAER;AAAA,IACJ;AAAA,EACJ,GAAGd,KAA8C,SAAqDO,GAAgBW,GAAe;;AAEjI,QADc/W,EAAuB,MAAMsV,IAAiC,KAAKK,EAAyC,EAAE,KAAK,MAAMS,CAAc,EAC3I,gBAAgB,IAAIW,CAAa;AAEvC;AAEJ,UAAMJ,KAAmBp9E,IAAA68E,EAAe,QAAQ,eAAvB,gBAAA78E,EAAoCw9E;AAC7D,QAAI,CAACJ;AACD,YAAM,IAAI,MAAM,uBAAuB;AAE3C,QAAI,CAACA,EAAiB;AAClB,YAAM,IAAI,MAAM,mCAAmC;AAEvD,QAAIA,EAAiB,SAAS,YAAY;AACtC,YAAM9G,KAAYx+D,KAAA3R,IAAAsgE,EAAuB,MAAMuV,IAA8B,GAAG,MAA9D,gBAAA71E,EAAiE,UAAjE,gBAAA2R,EAAwE,KAAK,CAAC09D,MAASD,GAA6BC,CAAI,KAAKA,EAAK,SAAS,SAAS4H,EAAiB,SAAS;AAChM,WAAK,MAAM,sCAAsC;AAAA,QAC7C,MAAMA,EAAiB,SAAS;AAAA,QAChC,OAAOI;AAAA,QACP,WAAWJ,EAAiB,SAAS;AAAA,QACrC,kBAAkBzH,GAAmBW,CAAS,IAAIA,EAAU,UAAU8G,EAAiB,SAAS,SAAS,IACnG9G,KAAA,QAAAA,EAAW,SAAS,SAAS,KAAK,MAAM8G,EAAiB,SAAS,SAAS,IACvE;AAAA,MAC1B,CAAa;AAAA,IACL;AAEI,MAAYA,EAAiB;AAAA,EAErC,GAAGb,KAA8C,SAAqDM,GAAgB;;AAClH,UAAM70C,IAAQy+B,EAAuB,MAAMsV,IAAiC,KAAKK,EAAyC,EAAE,KAAK,MAAMS,CAAc;AACrJ,QAAIA,EAAe,QAAQ,WAAW,CAAC70C,EAAM,cAAc;AACvD,MAAAA,EAAM,eAAe;AACrB,YAAMy1C,IAAiBhX,EAAuB,MAAMsV,IAAiC,KAAKU,EAAoD,EAAE,KAAK,IAAI;AACzJ,WAAK,MAAM,gBAAgB;AAAA,QACvB,SAASI,EAAe,QAAQ;AAAA,QAChC,QAAQY,IAAiBA,EAAe,UAAUZ,EAAe,QAAQ,OAAO,IAAI;AAAA,MACpG,CAAa;AAAA,IACL;AACA,IAAIA,EAAe,QAAQ,WAAW,CAAC70C,EAAM,iBACzCA,EAAM,eAAe,IACrB,KAAK,MAAM,gBAAgB,EAAE,SAAS60C,EAAe,QAAQ,SAAS,KAEtE78E,IAAA68E,EAAe,aAAf,QAAA78E,EAAyB,WAAW,CAACgoC,EAAM,0BAC3CA,EAAM,wBAAwB,IAC9B,KAAK,MAAM,yBAAyB,EAAE,SAAS60C,EAAe,SAAS,SAAS,KAEhF12E,IAAA02E,EAAe,aAAf,QAAA12E,EAAyB,WAAW,CAAC6hC,EAAM,0BAC3CA,EAAM,wBAAwB,IAC9B,KAAK,MAAM,yBAAyB,EAAE,SAAS60C,EAAe,SAAS,SAAS;AAAA,EAExF,GAAGL,KAAmC,WAA4C;AAC9E,QAAI,KAAK;AACL,YAAM,IAAIxV,GAAY,yCAAyC;AAEnE,UAAM0W,IAAWjX,EAAuB,MAAMyV,IAAqD,GAAG;AACtG,QAAI,CAACwB;AACD,YAAM,IAAI1W,GAAY,0CAA0C;AAEpE,WAAAT,GAAuB,MAAM2V,IAAqD,MAAc,GAChG3V,GAAuB,MAAM0V,IAAyC,EAAO,GACtE0B,GAAuBD,GAAUjX,EAAuB,MAAMuV,IAA8B,GAAG,CAAC;AAAA,EAC3G,GAAGS,KAAuD,WAAgE;;AACtH,UAAMgB,KAAiBz9E,IAAAymE,EAAuB,MAAMuV,IAA8B,GAAG,MAA9D,gBAAAh8E,EAAiE;AACxF,WAAIy1E,GAA6BgI,CAAc,IACpCA,IAEJ;AAAA,EACX,GAAGf,KAAiD,SAAwDjO,GAAO;AAC/G,QAAIzuE,GAAImG,GAAI2R,GAAIC;AAChB,QAAI2lE,IAAWjX,EAAuB,MAAMyV,IAAqD,GAAG;AACpG,UAAM,EAAE,SAAAhG,GAAS,GAAG9jD,EAAI,IAAKq8C;AAC7B,IAAKiP,IAOD,OAAO,OAAOA,GAAUtrD,CAAI,IAN5BsrD,IAAWnX,GAAuB,MAAM2V,IAAqD;AAAA,MACzF,GAAG9pD;AAAA,MACH,SAAS,CAAA;AAAA,IACzB,CAAkB;AAKV,eAAW,EAAE,OAAAye,GAAO,eAAA+sC,GAAe,OAAA39E,GAAO,UAAA49E,IAAW,MAAM,GAAGC,EAAK,KAAMrP,EAAM,SAAS;AACpF,UAAIsH,IAAS2H,EAAS,QAAQz9E,CAAK;AAInC,UAHK81E,MACDA,IAAS2H,EAAS,QAAQz9E,CAAK,IAAI,EAAE,eAAA29E,GAAe,OAAA39E,GAAO,SAAS,CAAA,GAAI,UAAA49E,GAAU,GAAGC,EAAK,IAE1FD;AACA,YAAI,CAAC9H,EAAO;AACR,UAAAA,EAAO,WAAW,OAAO,OAAO,CAAA,GAAI8H,CAAQ;AAAA,aAE3C;AACD,gBAAM,EAAE,SAAA97E,GAAS,SAAAg8E,GAAS,GAAG3rD,EAAI,IAAKyrD;AAEtC,iBAAO,OAAO9H,EAAO,UAAU3jD,CAAI,GAC/BrwB,OACC/B,IAAK+1E,EAAO,UAAU,YAAY/1E,EAAG,UAAU,KAChD+1E,EAAO,SAAS,QAAQ,KAAK,GAAGh0E,CAAO,IAEvCg8E,OACC53E,IAAK4vE,EAAO,UAAU,YAAY5vE,EAAG,UAAU,KAChD4vE,EAAO,SAAS,QAAQ,KAAK,GAAGgI,CAAO;AAAA,QAE/C;AAEJ,UAAIH,MACA7H,EAAO,gBAAgB6H,GACnBnX,EAAuB,MAAMuV,IAA8B,GAAG,KAAKlG,GAAsBrP,EAAuB,MAAMuV,IAA8B,GAAG,CAAC,IAAG;AAC3J,YAAI4B,MAAkB;AAClB,gBAAM,IAAI3V,GAAuB;AAErC,YAAI2V,MAAkB;AAClB,gBAAM,IAAI1V,GAA8B;AAAA,MAEhD;AAGJ,UADA,OAAO,OAAO6N,GAAQ+H,CAAK,GACvB,CAACjtC;AACD;AACJ,YAAM,EAAE,SAAA9uC,GAAS,SAAAg8E,GAAS,eAAAC,GAAe,MAAA9E,GAAM,YAAA+E,GAAY,GAAG7rD,EAAI,IAAKye;AA2BvE,UAzBA,OAAO,OAAOklC,EAAO,SAAS3jD,CAAI,GAC9B2rD,MACAhI,EAAO,QAAQ,WAAWA,EAAO,QAAQ,WAAW,MAAMgI,IAE1D7E,MACAnD,EAAO,QAAQ,OAAOmD,IACtB8E,MACKjI,EAAO,QAAQ,iBAIZiI,EAAc,SACdjI,EAAO,QAAQ,cAAc,OAAOiI,EAAc,OAClDA,EAAc,eACblmE,IAAKi+D,EAAO,QAAQ,eAAe,cAAcj+D,EAAG,YAAY,KACjEi+D,EAAO,QAAQ,cAAc,aAAaiI,EAAc,cAP5DjI,EAAO,QAAQ,gBAAgBiI,IAWnCj8E,MACAg0E,EAAO,QAAQ,WAAWA,EAAO,QAAQ,WAAW,MAAMh0E,GACtD,CAACg0E,EAAO,QAAQ,WAAWtP,EAAuB,MAAMsV,IAAiC,KAAKU,EAAoD,EAAE,KAAK,IAAI,MAC7J1G,EAAO,QAAQ,SAAS+F,GAAa/F,EAAO,QAAQ,OAAO,KAG/DkI,GAAY;AACZ,QAAKlI,EAAO,QAAQ,eAChBA,EAAO,QAAQ,aAAa,CAAA;AAChC,mBAAW,EAAE,OAAA91E,GAAO,IAAA41B,GAAI,MAAAvhC,GAAM,UAAUwC,GAAI,GAAGs7B,EAAI,KAAM6rD,GAAY;AACjE,gBAAMrF,KAAc7gE,IAAKg+D,EAAO,QAAQ,YAAY91E,CAAK,MAAM8X,EAAG9X,CAAK,IAAI,CAAA;AAC3E,iBAAO,OAAO24E,GAAWxmD,CAAI,GACzByD,MACA+iD,EAAU,KAAK/iD,IACfvhC,MACAskF,EAAU,OAAOtkF,IACjBwC,MACA8hF,EAAU,aAAaA,EAAU,WAAW,EAAE,MAAM9hF,EAAG,QAAQ,IAAI,WAAW,GAAE,KAChFA,KAAA,QAAAA,EAAI,SACJ8hF,EAAU,SAAS,OAAO9hF,EAAG,OAC7BA,KAAA,QAAAA,EAAI,cACJ8hF,EAAU,SAAS,aAAa9hF,EAAG,WAC/By/E,GAAoB9P,EAAuB,MAAMuV,IAA8B,GAAG,GAAGpD,CAAS,MAC9FA,EAAU,SAAS,mBAAmBkD,GAAalD,EAAU,SAAS,SAAS;AAAA,QAG3F;AAAA,MACJ;AAAA,IACJ;AACA,WAAO8E;AAAA,EACX,GAAG,OAAO,kBAAkB;AACxB,UAAMQ,IAAY,CAAA,GACZC,IAAY,CAAA;AAClB,QAAI3T,IAAO;AACX,gBAAK,GAAG,SAAS,CAACiE,MAAU;AACxB,YAAM9D,IAASwT,EAAU,MAAK;AAC9B,MAAIxT,IACAA,EAAO,QAAQ8D,CAAK,IAGpByP,EAAU,KAAKzP,CAAK;AAAA,IAE5B,CAAC,GACD,KAAK,GAAG,OAAO,MAAM;AACjB,MAAAjE,IAAO;AACP,iBAAWG,KAAUwT;AACjB,QAAAxT,EAAO,QAAQ,MAAS;AAE5B,MAAAwT,EAAU,SAAS;AAAA,IACvB,CAAC,GACD,KAAK,GAAG,SAAS,CAACtlF,MAAQ;AACtB,MAAA2xE,IAAO;AACP,iBAAWG,KAAUwT;AACjB,QAAAxT,EAAO,OAAO9xE,CAAG;AAErB,MAAAslF,EAAU,SAAS;AAAA,IACvB,CAAC,GACD,KAAK,GAAG,SAAS,CAACtlF,MAAQ;AACtB,MAAA2xE,IAAO;AACP,iBAAWG,KAAUwT;AACjB,QAAAxT,EAAO,OAAO9xE,CAAG;AAErB,MAAAslF,EAAU,SAAS;AAAA,IACvB,CAAC,GACM;AAAA,MACH,MAAM,YACGD,EAAU,SAOR,EAAE,OADKA,EAAU,MAAK,GACN,MAAM,GAAK,IAN1B1T,IACO,EAAE,OAAO,QAAW,MAAM,GAAI,IAElC,IAAI,QAAQ,CAACpK,GAASuX,MAAWwG,EAAU,KAAK,EAAE,SAAA/d,GAAS,QAAAuX,GAAQ,CAAC,EAAE,KAAK,CAAClJ,MAAWA,IAAQ,EAAE,OAAOA,GAAO,MAAM,GAAK,IAAK,EAAE,OAAO,QAAW,MAAM,GAAI,CAAG;AAAA,MAK/K,QAAQ,aACJ,KAAK,MAAK,GACH,EAAE,OAAO,QAAW,MAAM,GAAI;AAAA,IAErD;AAAA,EACI;AAAA,EACA,mBAAmB;AAEf,WADe,IAAIwB,GAAO,KAAK,OAAO,aAAa,EAAE,KAAK,IAAI,GAAG,KAAK,UAAU,EAClE,iBAAgB;AAAA,EAClC;AACJ;AACA,SAAS0N,GAAuBD,GAAU91D,GAAQ;AAC9C,QAAM,EAAE,IAAAiO,GAAI,SAAAqgD,GAAS,SAAAkI,GAAS,OAAAC,GAAO,oBAAAC,GAAoB,GAAGlsD,EAAI,IAAKsrD,GAC/D7H,IAAa;AAAA,IACf,GAAGzjD;AAAA,IACH,IAAAyD;AAAA,IACA,SAASqgD,EAAQ,IAAI,CAAC,EAAE,SAAA3uD,GAAS,eAAAq2D,GAAe,OAAA39E,GAAO,UAAA49E,GAAU,GAAGU,QAAiB;AACjF,UAAI,CAACX;AACD,cAAM,IAAI5W,GAAY,oCAAoC/mE,CAAK,EAAE;AAErE,YAAM,EAAE,SAAA8B,IAAU,MAAM,eAAAi8E,GAAe,YAAAC,GAAY,GAAGO,EAAW,IAAKj3D,GAChE2xD,IAAO3xD,EAAQ;AACrB,UAAI,CAAC2xD;AACD,cAAM,IAAIlS,GAAY,2BAA2B/mE,CAAK,EAAE;AAE5D,UAAI+9E,GAAe;AACf,cAAM,EAAE,WAAWzqF,GAAM,MAAA8C,EAAI,IAAK2nF;AAClC,YAAIzqF,KAAQ;AACR,gBAAM,IAAIyzE,GAAY,8CAA8C/mE,CAAK,EAAE;AAE/E,YAAI,CAAC5J;AACD,gBAAM,IAAI2wE,GAAY,yCAAyC/mE,CAAK,EAAE;AAE1E,eAAO;AAAA,UACH,GAAGs+E;AAAA,UACH,SAAS;AAAA,YACL,SAAAx8E;AAAA,YACA,eAAe,EAAE,WAAWxO,GAAM,MAAA8C,EAAI;AAAA,YACtC,MAAA6iF;AAAA,YACA,SAAS3xD,EAAQ,WAAW;AAAA,UACpD;AAAA,UACoB,eAAAq2D;AAAA,UACA,OAAA39E;AAAA,UACA,UAAA49E;AAAA,QACpB;AAAA,MACY;AACA,aAAII,IACO;AAAA,QACH,GAAGM;AAAA,QACH,OAAAt+E;AAAA,QACA,eAAA29E;AAAA,QACA,UAAAC;AAAA,QACA,SAAS;AAAA,UACL,GAAGW;AAAA,UACH,MAAAtF;AAAA,UACA,SAAAn3E;AAAA,UACA,SAASwlB,EAAQ,WAAW;AAAA,UAC5B,YAAY02D,EAAW,IAAI,CAACrF,GAAW98E,MAAM;AACzC,kBAAM,EAAE,UAAUhF,GAAI,MAAAxC,GAAM,IAAAuhC,GAAI,GAAG4oD,EAAQ,IAAK7F,GAC1C,EAAE,WAAWrlF,GAAM,MAAA8C,GAAM,GAAGqoF,EAAM,IAAK5nF,KAAM,CAAA;AACnD,gBAAI++B,KAAM;AACN,oBAAM,IAAImxC,GAAY,mBAAmB/mE,CAAK,gBAAgBnE,CAAC;AAAA,EAAS88B,GAAI8kD,CAAQ,CAAC,EAAE;AAE3F,gBAAIppF,KAAQ;AACR,oBAAM,IAAI0yE,GAAY,mBAAmB/mE,CAAK,gBAAgBnE,CAAC;AAAA,EAAW88B,GAAI8kD,CAAQ,CAAC,EAAE;AAE7F,gBAAIrnF,KAAQ;AACR,oBAAM,IAAI2wE,GAAY,mBAAmB/mE,CAAK,gBAAgBnE,CAAC;AAAA,EAAoB88B,GAAI8kD,CAAQ,CAAC,EAAE;AAEtG,gBAAInqF,KAAQ;AACR,oBAAM,IAAIyzE,GAAY,mBAAmB/mE,CAAK,gBAAgBnE,CAAC;AAAA,EAAyB88B,GAAI8kD,CAAQ,CAAC,EAAE;AAE3G,mBAAO,EAAE,GAAGe,GAAU,IAAA5oD,GAAI,MAAAvhC,GAAM,UAAU,EAAE,GAAGoqF,GAAQ,MAAAroF,GAAM,WAAW9C,EAAI,EAAE;AAAA,UAClF,CAAC;AAAA,QACzB;AAAA,MACA,IAEmB;AAAA,QACH,GAAGgrF;AAAA,QACH,SAAS,EAAE,GAAGC,GAAa,SAAAz8E,GAAS,MAAAm3E,GAAM,SAAS3xD,EAAQ,WAAW,KAAI;AAAA,QAC1E,eAAAq2D;AAAA,QACA,OAAA39E;AAAA,QACA,UAAA49E;AAAA,MAChB;AAAA,IACQ,CAAC;AAAA,IACD,SAAAO;AAAA,IACA,OAAAC;AAAA,IACA,QAAQ;AAAA,IACR,GAAIC,IAAqB,EAAE,oBAAAA,EAAkB,IAAK;EAC1D;AACI,SAAO1I,GAAyBC,GAAYjuD,CAAM;AACtD;AACA,SAASgR,GAAIpiC,GAAG;AACZ,SAAO,KAAK,UAAUA,CAAC;AAC3B;AC7dO,MAAMmoF,WAAsChC,GAAqB;AAAA,EACpE,OAAO,mBAAmBjS,GAAQ;AAC9B,UAAMqP,IAAS,IAAI4E,GAA8B,IAAI;AACrD,WAAA5E,EAAO,KAAK,MAAMA,EAAO,oBAAoBrP,CAAM,CAAC,GAC7CqP;AAAA,EACX;AAAA,EACA,OAAO,SAASp5E,GAAQinB,GAAQqG,GAAS;AACrC,UAAM8rD,IAAS,IAAI4E;AAAA;AAAA,MAEnB/2D;AAAA,IAAM,GACAsF,IAAO;AAAA,MACT,GAAGe;AAAA,MACH,SAAS,EAAE,GAAGA,KAAA,gBAAAA,EAAS,SAAS,6BAA6B,WAAU;AAAA,IACnF;AACQ,WAAA8rD,EAAO,KAAK,MAAMA,EAAO,UAAUp5E,GAAQinB,GAAQsF,CAAI,CAAC,GACjD6sD;AAAA,EACX;AACJ;SCRO,cAA0BzF,GAAY;AAAA,EACzC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,WAAW,IAAIsK,GAAqB,KAAK,OAAO;AAAA,EACzD;AAAA,EACA,OAAO37D,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,qBAAqB,EAAE,MAAAhL,GAAM,GAAGgL,GAAS,QAAQhL,EAAK,UAAU,GAAK,CAAE;AAAA,EACpG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,SAASqyD,GAAcrnD,GAAS;AAC5B,WAAO,KAAK,QAAQ,IAAI1kB,uBAA0B+rE,CAAY,IAAIrnD,CAAO;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,OAAOqnD,GAAcryD,GAAMgL,GAAS;AAChC,WAAO,KAAK,QAAQ,KAAK1kB,uBAA0B+rE,CAAY,IAAI,EAAE,MAAAryD,GAAM,GAAGgL,EAAO,CAAE;AAAA,EAC3F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,KAAK3sB,IAAQ,CAAA,GAAI2sB,GAAS;AACtB,WAAO,KAAK,QAAQ,WAAW,qBAAsBukD,IAAa,EAAE,OAAAlxE,GAAO,GAAG2sB,GAAS;AAAA,EAC3F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAOqnD,GAAcrnD,GAAS;AAC1B,WAAO,KAAK,QAAQ,OAAO1kB,uBAA0B+rE,CAAY,IAAIrnD,CAAO;AAAA,EAChF;AAAA,EACA,MAAMhL,GAAMgL,GAAS;AACjB,WAAAwoD,GAAmBxzD,EAAK,KAAK,GACtB,KAAK,QAAQ,KAAK,YACpB,OAAOA,GAAM;AAAA,MACd,GAAGgL;AAAA,MACH,SAAS;AAAA,QACL,GAAGA,KAAA,gBAAAA,EAAS;AAAA,QACZ,6BAA6B;AAAA,MAC7C;AAAA,IACA,CAAS,EACI,YAAY,CAAC4nD,MAAeI,GAAoBJ,GAAY5yD,CAAI,CAAC;AAAA,EAC1E;AAAA,EACA,SAASA,GAAMgL,GAAS;AACpB,WAAIhL,EAAK,SACE07D,GAA8B,SAAS,KAAK,SAAS17D,GAAMgL,CAAO,IAEtE6rD,GAAqB,SAAS,KAAK,SAAS72D,GAAMgL,CAAO;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOhL,GAAMgL,GAAS;AAClB,WAAO0uD,GAAqB,qBAAqB,KAAK,SAAS15D,GAAMgL,CAAO;AAAA,EAChF;AACJ;AAKA4wD,GAAY,WAAWC;ACpGhB,MAAMC,WAAazK,GAAY;AAAA,EAClC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,cAAc,IAAI0K,GAA2B,KAAK,OAAO;AAAA,EAClE;AACJ;AACAD,GAAK,cAAcF;ACRnB,MAAMI,KAA+C,uBAAO,8BAA8B;AAC1F,UAAUC,GAAehY,GAAS;AAC9B,MAAI,CAACA;AACD;AACJ,MAAI+X,MAAgC/X,GAAS;AACzC,UAAM,EAAE,QAAA3uE,GAAQ,OAAA4mF,EAAK,IAAKjY;AAC1B,WAAO3uE,EAAO,QAAO;AACrB,eAAWlC,KAAQ8oF;AACf,YAAM,CAAC9oF,GAAM,IAAI;AAErB;AAAA,EACJ;AACA,MAAI+oF,IAAc,IACd9U;AACJ,EAAIpD,aAAmB,UACnBoD,IAAOpD,EAAQ,QAAO,IAEjBoB,GAAgBpB,CAAO,IAC5BoD,IAAOpD,KAGPkY,IAAc,IACd9U,IAAO,OAAO,QAAQpD,KAAW,CAAA,CAAE;AAEvC,WAASmY,KAAO/U,GAAM;AAClB,UAAMj0E,IAAOgpF,EAAI,CAAC;AAClB,QAAI,OAAOhpF,KAAS;AAChB,YAAM,IAAI,UAAU,qCAAqC;AAC7D,UAAMkC,IAAS+vE,GAAgB+W,EAAI,CAAC,CAAC,IAAIA,EAAI,CAAC,IAAI,CAACA,EAAI,CAAC,CAAC;AACzD,QAAIC,IAAW;AACf,eAAWpmF,KAASX;AAChB,MAAIW,MAAU,WAIVkmF,KAAe,CAACE,MAChBA,IAAW,IACX,MAAM,CAACjpF,GAAM,IAAI,IAErB,MAAM,CAACA,GAAM6C,CAAK;AAAA,EAE1B;AACJ;AACO,MAAMqmF,KAAe,CAACC,MAAe;AACxC,QAAMC,IAAgB,IAAI,QAAO,GAC3BC,IAAc,oBAAI,IAAG;AAC3B,aAAWxY,KAAWsY,GAAY;AAC9B,UAAMG,IAAc,oBAAI,IAAG;AAC3B,eAAW,CAACtpF,GAAM6C,CAAK,KAAKgmF,GAAehY,CAAO,GAAG;AACjD,YAAM0Y,IAAYvpF,EAAK,YAAW;AAClC,MAAKspF,EAAY,IAAIC,CAAS,MAC1BH,EAAc,OAAOppF,CAAI,GACzBspF,EAAY,IAAIC,CAAS,IAEzB1mF,MAAU,QACVumF,EAAc,OAAOppF,CAAI,GACzBqpF,EAAY,IAAIE,CAAS,MAGzBH,EAAc,OAAOppF,GAAM6C,CAAK,GAChCwmF,EAAY,OAAOE,CAAS;AAAA,IAEpC;AAAA,EACJ;AACA,SAAO,EAAE,CAACX,EAA4B,GAAG,IAAM,QAAQQ,GAAe,OAAOC,EAAW;AAC5F;AChEO,MAAMG,WAAevL,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBpC,OAAOrxD,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,iBAAiB;AAAA,MACtC,MAAAhL;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,QAAQ,8BAA8BtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,MAChF,kBAAkB;AAAA,IAC9B,CAAS;AAAA,EACL;AACJ;ACxBO,MAAM6xD,WAAuBxL,GAAY;AAAA,EAC5C,OAAOrxD,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,yBAAyBqlD,GAA4B;AAAA,MAC1E,MAAArwD;AAAA,MACA,GAAGgL;AAAA,MACH,QAAQhL,EAAK,UAAU;AAAA,MACvB,YAAY,EAAE,OAAOA,EAAK,MAAK;AAAA,IAC3C,GAAW,KAAK,OAAO,CAAC;AAAA,EACpB;AACJ;ACTO,MAAM88D,WAAqBzL,GAAY;AAAA,EAC1C,OAAOrxD,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,uBAAuBqlD,GAA4B,EAAE,MAAArwD,GAAM,GAAGgL,GAAS,YAAY,EAAE,OAAOhL,EAAK,MAAK,EAAE,GAAI,KAAK,OAAO,CAAC;AAAA,EACtJ;AACJ;ACCO,MAAM+8D,WAAc1L,GAAY;AAAA,EACnC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,iBAAiB,IAAI2L,GAAiC,KAAK,OAAO,GACvE,KAAK,eAAe,IAAIC,GAA6B,KAAK,OAAO,GACjE,KAAK,SAAS,IAAIC,GAAiB,KAAK,OAAO;AAAA,EACnD;AACJ;AACAH,GAAM,iBAAiBF;AACvBE,GAAM,eAAeD;AACrBC,GAAM,SAASH;ACdR,MAAMO,WAAgB9L,GAAY;AAAA;AAAA;AAAA;AAAA,EAIrC,OAAOrxD,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,YAAY,EAAE,MAAAhL,GAAM,GAAGgL,GAAS;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA,EAIA,SAASoyD,GAASpyD,GAAS;AACvB,WAAO,KAAK,QAAQ,IAAI1kB,cAAiB82E,CAAO,IAAIpyD,CAAO;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA,EAIA,KAAK3sB,IAAQ,CAAA,GAAI2sB,GAAS;AACtB,WAAO,KAAK,QAAQ,WAAW,YAAaukD,IAAa,EAAE,OAAAlxE,GAAO,GAAG2sB,GAAS;AAAA,EAClF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAOoyD,GAASpyD,GAAS;AACrB,WAAO,KAAK,QAAQ,KAAK1kB,cAAiB82E,CAAO,WAAWpyD,CAAO;AAAA,EACvE;AACJ;AC1BO,MAAMqyD,WAAmBhM,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWxC,OAAOrxD,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,eAAe;AAAA,MACpC,MAAAhL;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,SAASsyD,GAAatyD,GAAS;AAC3B,WAAO,KAAK,QAAQ,IAAI1kB,iBAAoBg3E,CAAW,IAAI;AAAA,MACvD,GAAGtyD;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAOsyD,GAAat9D,GAAMgL,GAAS;AAC/B,WAAO,KAAK,QAAQ,KAAK1kB,iBAAoBg3E,CAAW,IAAI;AAAA,MACxD,MAAAt9D;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,KAAK3sB,IAAQ,CAAA,GAAI2sB,GAAS;AACtB,WAAO,KAAK,QAAQ,WAAW,eAAgBukD,IAAa;AAAA,MACxD,OAAAlxE;AAAA,MACA,GAAG2sB;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAOsyD,GAAatyD,GAAS;AACzB,WAAO,KAAK,QAAQ,OAAO1kB,iBAAoBg3E,CAAW,IAAI;AAAA,MAC1D,GAAGtyD;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AACJ;SCtFO,cAAuBqmD,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBtC,OAAOrxD,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,sBAAsB;AAAA,MAC3C,MAAAhL;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AACJ;ACvBO,MAAMuyD,WAA8BlM,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBnD,OAAOrxD,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,oCAAoC;AAAA,MACzD,MAAAhL;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AACJ;SCjBO,cAAuBqmD,GAAY;AAAA,EACtC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,WAAW,IAAImM,GAAqB,KAAK,OAAO,GACrD,KAAK,wBAAwB,IAAIC,GAA+C,KAAK,OAAO;AAAA,EAChG;AACJ;AACAC,GAAS,WAAWC;AACpBD,GAAS,wBAAwBH;ACb1B,MAAMI,WAAiBtM,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAatC,OAAOrxD,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,qBAAqB;AAAA,MAC1C,MAAAhL;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,qBAAqBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IAC1F,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO4yD,GAAW5yD,GAAS;AACvB,WAAO,KAAK,QAAQ,KAAK1kB,uBAA0Bs3E,CAAS,WAAW;AAAA,MACnE,GAAG5yD;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,qBAAqBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IAC1F,CAAS;AAAA,EACL;AACJ;SClCO,cAAsBqmD,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUrC,SAASwM,GAAU7yD,GAAS;AACxB,WAAO,KAAK,QAAQ,IAAI1kB,sBAAyBu3E,CAAQ,IAAI;AAAA,MACzD,GAAG7yD;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,qBAAqBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IAC1F,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,KAAK3sB,IAAQ,CAAA,GAAI2sB,GAAS;AACtB,WAAO,KAAK,QAAQ,WAAW,oBAAqBwkD,IAAyB;AAAA,MACzE,OAAAnxE;AAAA,MACA,GAAG2sB;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,qBAAqBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IAC1F,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO6yD,GAAU7yD,GAAS;AACtB,WAAO,KAAK,QAAQ,OAAO1kB,sBAAyBu3E,CAAQ,IAAI;AAAA,MAC5D,GAAG7yD;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,qBAAqBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IAC1F,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,UAAU6yD,GAAUx/E,IAAQ,CAAA,GAAI2sB,GAAS;AACrC,WAAO,KAAK,QAAQ,WAAW1kB,sBAAyBu3E,CAAQ,UAAWrO,IAAyB,EAAE,OAAAnxE,GAAO,GAAG2sB,GAAS,SAASsxD,GAAa,CAAC,EAAE,eAAe,kBAAiB,GAAItxD,KAAA,gBAAAA,EAAS,OAAO,CAAC,GAAG;AAAA,EAC9M;AACJ;ACjEO,MAAM8yD,WAAgBzM,GAAY;AAAA,EACrC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,WAAW,IAAImM,GAAqB,KAAK,OAAO,GACrD,KAAK,UAAU,IAAIO,GAAmB,KAAK,OAAO;AAAA,EACtD;AACJ;AACAD,GAAQ,WAAWH;AACnBG,GAAQ,UAAUE;ACNX,MAAMnC,WAAiBxK,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMtC,OAAOwM,GAAU79D,GAAMgL,GAAS;AAC5B,WAAO,KAAK,QAAQ,KAAK1kB,cAAiBu3E,CAAQ,aAAa;AAAA,MAC3D,MAAA79D;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAASizD,GAAWt5D,GAAQqG,GAAS;AACjC,UAAM,EAAE,WAAAkzD,EAAS,IAAKv5D;AACtB,WAAO,KAAK,QAAQ,IAAIre,cAAiB43E,CAAS,aAAaD,CAAS,IAAI;AAAA,MACxE,GAAGjzD;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAOizD,GAAWt5D,GAAQqG,GAAS;AAC/B,UAAM,EAAE,WAAAkzD,GAAW,GAAGl+D,EAAI,IAAK2E;AAC/B,WAAO,KAAK,QAAQ,KAAKre,cAAiB43E,CAAS,aAAaD,CAAS,IAAI;AAAA,MACzE,MAAAj+D;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAK6yD,GAAUx/E,IAAQ,CAAA,GAAI2sB,GAAS;AAChC,WAAO,KAAK,QAAQ,WAAW1kB,cAAiBu3E,CAAQ,aAActO,IAAa;AAAA,MAC/E,OAAAlxE;AAAA,MACA,GAAG2sB;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAOizD,GAAWt5D,GAAQqG,GAAS;AAC/B,UAAM,EAAE,WAAAkzD,EAAS,IAAKv5D;AACtB,WAAO,KAAK,QAAQ,OAAOre,cAAiB43E,CAAS,aAAaD,CAAS,IAAI;AAAA,MAC3E,GAAGjzD;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AACJ;SC9DO,cAAoBqmD,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnC,SAAS8M,GAAQx5D,GAAQqG,GAAS;AAC9B,UAAM,EAAE,WAAAkzD,GAAW,QAAAE,GAAQ,GAAG//E,EAAK,IAAKsmB;AACxC,WAAO,KAAK,QAAQ,IAAIre,cAAiB43E,CAAS,SAASE,CAAM,UAAUD,CAAM,IAAI;AAAA,MACjF,OAAA9/E;AAAA,MACA,GAAG2sB;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAKqzD,GAAO15D,GAAQqG,GAAS;AACzB,UAAM,EAAE,WAAAkzD,GAAW,GAAG7/E,EAAK,IAAKsmB;AAChC,WAAO,KAAK,QAAQ,WAAWre,cAAiB43E,CAAS,SAASG,CAAK,UAAW9O,IAAa;AAAA,MAC3F,OAAAlxE;AAAA,MACA,GAAG2sB;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AACJ;ACEO,MAAMszD,KAAiB,CAACC,MAAc;AACzC,MAAI,OAAO,SAAW,KAAa;AAE/B,UAAMC,IAAM,OAAO,KAAKD,GAAW,QAAQ;AAC3C,WAAO,MAAM,KAAK,IAAI,aAAaC,EAAI,QAAQA,EAAI,YAAYA,EAAI,SAAS,aAAa,iBAAiB,CAAC;AAAA,EAC/G,OACK;AAED,UAAMC,IAAY,KAAKF,CAAS,GAC1BpzD,IAAMszD,EAAU,QAChBtT,IAAQ,IAAI,WAAWhgD,CAAG;AAChC,aAAStyB,IAAI,GAAGA,IAAIsyB,GAAKtyB;AACrB,MAAAsyE,EAAMtyE,CAAC,IAAI4lF,EAAU,WAAW5lF,CAAC;AAErC,WAAO,MAAM,KAAK,IAAI,aAAasyE,EAAM,MAAM,CAAC;AAAA,EACpD;AACJ,GC7CauT,KAAU,CAAC3qD,MAAQ;;AAC5B,MAAI,OAAO,WAAW,UAAY;AAC9B,aAAO7wB,KAAAnG,IAAA,WAAW,QAAQ,QAAnB,gBAAAA,EAAyBg3B,OAAzB,gBAAA7wB,EAA+B,WAAU;AAEpD,MAAI,OAAO,WAAW,OAAS;AAC3B,YAAO6N,KAAA+D,KAAAD,IAAA,WAAW,KAAK,QAAhB,gBAAAA,EAAqB,QAArB,gBAAAC,EAAA,KAAAD,GAA2Bkf,OAA3B,gBAAAhjB,EAAiC;AAGhD;AChBA,IAAI4tE,IAA4B5hF,IAAI6hF,IAAyBC,IAAmCC,IAAmCC,IAAkCC,IAA2BC,IAAsCC,IAAiCC,IAAuCC,IAAkCC,IAA+BC,IAAqCC,IAAyCC,IAA2BC,IAA6BC,IAAgCC,IAAgCC,IAA8BC,IAAoCC,IAAoCC,IAAoCC;AAMxrB,MAAMC,WAAwBxL,GAAY;AAAA,EAC7C,cAAc;AACV,UAAM,GAAG,SAAS,GAClBkK,GAA2B,IAAI,IAAI,GAEnCC,GAAwB,IAAI,MAAM,EAAE,GAGpCC,GAAkC,IAAI,MAAM,EAAE,GAC9CC,GAAkC,IAAI,MAAM,EAAE,GAC9CC,GAAiC,IAAI,MAAM,MAAM,GACjDC,GAA0B,IAAI,MAAM,MAAM,GAC1CC,GAAqC,IAAI,MAAM,MAAM,GACrDC,GAAgC,IAAI,MAAM,MAAM,GAChDC,GAAsC,IAAI,MAAM,MAAM,GACtDC,GAAiC,IAAI,MAAM,MAAM,GAEjDC,GAA8B,IAAI,MAAM,MAAM,GAC9CC,GAAoC,IAAI,MAAM,MAAM,GACpDC,GAAwC,IAAI,MAAM,MAAM;AAAA,EAC5D;AAAA,EACA,EAAEX,KAA0B,oBAAI,WAAWC,KAAoC,oBAAI,QAAO,GAAIC,KAAoC,oBAAI,QAAO,GAAIC,KAAmC,oBAAI,QAAO,GAAIC,KAA4B,oBAAI,QAAO,GAAIC,KAAuC,oBAAI,WAAWC,KAAkC,oBAAI,QAAO,GAAIC,KAAwC,oBAAI,QAAO,GAAIC,KAAmC,oBAAI,QAAO,GAAIC,KAAgC,oBAAI,QAAO,GAAIC,KAAsC,oBAAI,WAAWC,KAA0C,oBAAI,WAAWZ,KAA6B,oBAAI,QAAO,GAAI,OAAO,kBAAkB;AAC5pB,UAAM1D,IAAY,CAAA,GACZC,IAAY,CAAA;AAClB,QAAI3T,IAAO;AAEX,gBAAK,GAAG,SAAS,CAACjtC,MAAU;AACxB,YAAMotC,IAASwT,EAAU,MAAK;AAC9B,MAAIxT,IACAA,EAAO,QAAQptC,CAAK,IAGpB2gD,EAAU,KAAK3gD,CAAK;AAAA,IAE5B,CAAC,GACD,KAAK,GAAG,OAAO,MAAM;AACjB,MAAAitC,IAAO;AACP,iBAAWG,KAAUwT;AACjB,QAAAxT,EAAO,QAAQ,MAAS;AAE5B,MAAAwT,EAAU,SAAS;AAAA,IACvB,CAAC,GACD,KAAK,GAAG,SAAS,CAACtlF,MAAQ;AACtB,MAAA2xE,IAAO;AACP,iBAAWG,KAAUwT;AACjB,QAAAxT,EAAO,OAAO9xE,CAAG;AAErB,MAAAslF,EAAU,SAAS;AAAA,IACvB,CAAC,GACD,KAAK,GAAG,SAAS,CAACtlF,MAAQ;AACtB,MAAA2xE,IAAO;AACP,iBAAWG,KAAUwT;AACjB,QAAAxT,EAAO,OAAO9xE,CAAG;AAErB,MAAAslF,EAAU,SAAS;AAAA,IACvB,CAAC,GACM;AAAA,MACH,MAAM,YACGD,EAAU,SAOR,EAAE,OADKA,EAAU,MAAK,GACN,MAAM,GAAK,IAN1B1T,IACO,EAAE,OAAO,QAAW,MAAM,GAAI,IAElC,IAAI,QAAQ,CAACpK,GAASuX,MAAWwG,EAAU,KAAK,EAAE,SAAA/d,GAAS,QAAAuX,GAAQ,CAAC,EAAE,KAAK,CAAClJ,MAAWA,IAAQ,EAAE,OAAOA,GAAO,MAAM,GAAK,IAAK,EAAE,OAAO,QAAW,MAAM,GAAI,CAAG;AAAA,MAK/K,QAAQ,aACJ,KAAK,MAAK,GACH,EAAE,OAAO,QAAW,MAAM,GAAI;AAAA,IAErD;AAAA,EACI;AAAA,EACA,OAAO,mBAAmB/D,GAAQ;AAC9B,UAAMqP,IAAS,IAAI/5E,GAAE;AACrB,WAAA+5E,EAAO,KAAK,MAAMA,EAAO,oBAAoBrP,CAAM,CAAC,GAC7CqP;AAAA,EACX;AAAA,EACA,MAAM,oBAAoB1J,GAAgBpiD,GAAS;;AAC/C,UAAMgrD,IAAShrD,KAAA,gBAAAA,EAAS;AACxB,IAAIgrD,MACIA,EAAO,WACP,KAAK,WAAW,MAAK,GACzBA,EAAO,iBAAiB,SAAS,MAAM,KAAK,WAAW,OAAO,IAElE,KAAK,WAAU;AACf,UAAMvO,IAASuF,GAAO,mBAAmBI,GAAgB,KAAK,UAAU;AACxE,qBAAiB9yC,KAASmtC;AACtB,MAAAjE,EAAuB,MAAMmb,IAA4B,KAAKa,EAAyB,EAAE,KAAK,MAAMllD,CAAK;AAE7G,SAAIv9B,IAAA0qE,EAAO,WAAW,WAAlB,QAAA1qE,EAA0B;AAC1B,YAAM,IAAI8nE,GAAiB;AAE/B,WAAO,KAAK,QAAQrB,EAAuB,MAAMmb,IAA4B,KAAKc,EAA2B,EAAE,KAAK,IAAI,CAAC;AAAA,EAC7H;AAAA,EACA,mBAAmB;AAEf,WADe,IAAIzS,GAAO,KAAK,OAAO,aAAa,EAAE,KAAK,IAAI,GAAG,KAAK,UAAU,EAClE,iBAAgB;AAAA,EAClC;AAAA,EACA,OAAO,0BAA0BkT,GAAOC,GAAMx7D,GAAQqG,GAAS;AAC3D,UAAM8rD,IAAS,IAAI/5E,GAAE;AACrB,WAAA+5E,EAAO,KAAK,MAAMA,EAAO,wBAAwBoJ,GAAOC,GAAMx7D,GAAQ;AAAA,MAClE,GAAGqG;AAAA,MACH,SAAS,EAAE,GAAGA,KAAA,gBAAAA,EAAS,SAAS,6BAA6B,SAAQ;AAAA,IACjF,CAAS,CAAC,GACK8rD;AAAA,EACX;AAAA,EACA,MAAM,2BAA2BsJ,GAAKF,GAAOv7D,GAAQqG,GAAS;;AAC1D,UAAMgrD,IAAShrD,KAAA,gBAAAA,EAAS;AACxB,IAAIgrD,MACIA,EAAO,WACP,KAAK,WAAW,MAAK,GACzBA,EAAO,iBAAiB,SAAS,MAAM,KAAK,WAAW,OAAO;AAElE,UAAMh2D,IAAO,EAAE,GAAG2E,GAAQ,QAAQ,GAAI,GAChC8iD,IAAS,MAAM2Y,EAAI,kBAAkBF,GAAOlgE,GAAM;AAAA,MACpD,GAAGgL;AAAA,MACH,QAAQ,KAAK,WAAW;AAAA,IACpC,CAAS;AACD,SAAK,WAAU;AACf,qBAAiBsP,KAASmtC;AACtB,MAAAjE,EAAuB,MAAMmb,IAA4B,KAAKa,EAAyB,EAAE,KAAK,MAAMllD,CAAK;AAE7G,SAAIv9B,IAAA0qE,EAAO,WAAW,WAAlB,QAAA1qE,EAA0B;AAC1B,YAAM,IAAI8nE,GAAiB;AAE/B,WAAO,KAAK,QAAQrB,EAAuB,MAAMmb,IAA4B,KAAKc,EAA2B,EAAE,KAAK,IAAI,CAAC;AAAA,EAC7H;AAAA,EACA,OAAO,4BAA4B96D,GAAQ07D,GAAQr1D,GAAS;AACxD,UAAM8rD,IAAS,IAAI/5E,GAAE;AACrB,WAAA+5E,EAAO,KAAK,MAAMA,EAAO,uBAAuBnyD,GAAQ07D,GAAQ;AAAA,MAC5D,GAAGr1D;AAAA,MACH,SAAS,EAAE,GAAGA,KAAA,gBAAAA,EAAS,SAAS,6BAA6B,SAAQ;AAAA,IACjF,CAAS,CAAC,GACK8rD;AAAA,EACX;AAAA,EACA,OAAO,sBAAsBwJ,GAAUH,GAAMx7D,GAAQqG,GAAS;AAC1D,UAAM8rD,IAAS,IAAI/5E,GAAE;AACrB,WAAA+5E,EAAO,KAAK,MAAMA,EAAO,oBAAoBwJ,GAAUH,GAAMx7D,GAAQ;AAAA,MACjE,GAAGqG;AAAA,MACH,SAAS,EAAE,GAAGA,KAAA,gBAAAA,EAAS,SAAS,6BAA6B,SAAQ;AAAA,IACjF,CAAS,CAAC,GACK8rD;AAAA,EACX;AAAA,EACA,eAAe;AACX,WAAOtT,EAAuB,MAAM6b,IAA+B,GAAG;AAAA,EAC1E;AAAA,EACA,aAAa;AACT,WAAO7b,EAAuB,MAAM8b,IAAqC,GAAG;AAAA,EAChF;AAAA,EACA,yBAAyB;AACrB,WAAO9b,EAAuB,MAAMub,IAAkC,GAAG;AAAA,EAC7E;AAAA,EACA,yBAAyB;AACrB,WAAOvb,EAAuB,MAAM+b,IAAyC,GAAG;AAAA,EACpF;AAAA,EACA,MAAM,gBAAgB;AAClB,iBAAM,KAAK,KAAI,GACR,OAAO,OAAO/b,EAAuB,MAAMqb,IAAmC,GAAG,CAAC;AAAA,EAC7F;AAAA,EACA,MAAM,gBAAgB;AAClB,iBAAM,KAAK,KAAI,GACR,OAAO,OAAOrb,EAAuB,MAAMsb,IAAmC,GAAG,CAAC;AAAA,EAC7F;AAAA,EACA,MAAM,WAAW;AAEb,QADA,MAAM,KAAK,KAAI,GACX,CAACtb,EAAuB,MAAMwb,IAA2B,GAAG;AAC5D,YAAM,MAAM,6BAA6B;AAC7C,WAAOxb,EAAuB,MAAMwb,IAA2B,GAAG;AAAA,EACtE;AAAA,EACA,MAAM,6BAA6BqB,GAAQ17D,GAAQqG,GAAS;;AACxD,UAAMgrD,IAAShrD,KAAA,gBAAAA,EAAS;AACxB,IAAIgrD,MACIA,EAAO,WACP,KAAK,WAAW,MAAK,GACzBA,EAAO,iBAAiB,SAAS,MAAM,KAAK,WAAW,OAAO;AAElE,UAAMh2D,IAAO,EAAE,GAAG2E,GAAQ,QAAQ,GAAI,GAChC8iD,IAAS,MAAM4Y,EAAO,aAAargE,GAAM,EAAE,GAAGgL,GAAS,QAAQ,KAAK,WAAW,OAAM,CAAE;AAC7F,SAAK,WAAU;AACf,qBAAiBsP,KAASmtC;AACtB,MAAAjE,EAAuB,MAAMmb,IAA4B,KAAKa,EAAyB,EAAE,KAAK,MAAMllD,CAAK;AAE7G,SAAIv9B,IAAA0qE,EAAO,WAAW,WAAlB,QAAA1qE,EAA0B;AAC1B,YAAM,IAAI8nE,GAAiB;AAE/B,WAAO,KAAK,QAAQrB,EAAuB,MAAMmb,IAA4B,KAAKc,EAA2B,EAAE,KAAK,IAAI,CAAC;AAAA,EAC7H;AAAA,EACA,MAAM,uBAAuBW,GAAKE,GAAU37D,GAAQqG,GAAS;;AACzD,UAAMgrD,IAAShrD,KAAA,gBAAAA,EAAS;AACxB,IAAIgrD,MACIA,EAAO,WACP,KAAK,WAAW,MAAK,GACzBA,EAAO,iBAAiB,SAAS,MAAM,KAAK,WAAW,OAAO;AAElE,UAAMh2D,IAAO,EAAE,GAAG2E,GAAQ,QAAQ,GAAI,GAChC8iD,IAAS,MAAM2Y,EAAI,OAAOE,GAAUtgE,GAAM,EAAE,GAAGgL,GAAS,QAAQ,KAAK,WAAW,OAAM,CAAE;AAC9F,SAAK,WAAU;AACf,qBAAiBsP,KAASmtC;AACtB,MAAAjE,EAAuB,MAAMmb,IAA4B,KAAKa,EAAyB,EAAE,KAAK,MAAMllD,CAAK;AAE7G,SAAIv9B,IAAA0qE,EAAO,WAAW,WAAlB,QAAA1qE,EAA0B;AAC1B,YAAM,IAAI8nE,GAAiB;AAE/B,WAAO,KAAK,QAAQrB,EAAuB,MAAMmb,IAA4B,KAAKc,EAA2B,EAAE,KAAK,IAAI,CAAC;AAAA,EAC7H;AAAA,EACA,OAAO,gBAAgBt7E,GAAKypC,GAAO;AAC/B,eAAW,CAACv2C,GAAKkpF,CAAU,KAAK,OAAO,QAAQ3yC,CAAK,GAAG;AACnD,UAAI,CAACzpC,EAAI,eAAe9M,CAAG,GAAG;AAC1B,QAAA8M,EAAI9M,CAAG,IAAIkpF;AACX;AAAA,MACJ;AACA,UAAIC,IAAWr8E,EAAI9M,CAAG;AACtB,UAAImpF,KAAa,MAAgC;AAC7C,QAAAr8E,EAAI9M,CAAG,IAAIkpF;AACX;AAAA,MACJ;AAEA,UAAIlpF,MAAQ,WAAWA,MAAQ,QAAQ;AACnC,QAAA8M,EAAI9M,CAAG,IAAIkpF;AACX;AAAA,MACJ;AAEA,UAAI,OAAOC,KAAa,YAAY,OAAOD,KAAe;AACtD,QAAAC,KAAYD;AAAA,eAEP,OAAOC,KAAa,YAAY,OAAOD,KAAe;AAC3D,QAAAC,KAAYD;AAAA,eAEP7a,GAAM8a,CAAQ,KAAK9a,GAAM6a,CAAU;AACxC,QAAAC,IAAW,KAAK,gBAAgBA,GAAUD,CAAU;AAAA,eAE/C,MAAM,QAAQC,CAAQ,KAAK,MAAM,QAAQD,CAAU,GAAG;AAC3D,YAAIC,EAAS,MAAM,CAACjtF,MAAM,OAAOA,KAAM,YAAY,OAAOA,KAAM,QAAQ,GAAG;AACvE,UAAAitF,EAAS,KAAK,GAAGD,CAAU;AAC3B;AAAA,QACJ;AACA,mBAAWE,KAAcF,GAAY;AACjC,cAAI,CAAC7a,GAAM+a,CAAU;AACjB,kBAAM,IAAI,MAAM,uDAAuDA,CAAU,EAAE;AAEvF,gBAAMzjF,IAAQyjF,EAAW;AACzB,cAAIzjF,KAAS;AACT,0BAAQ,MAAMyjF,CAAU,GAClB,IAAI,MAAM,wDAAwD;AAE5E,cAAI,OAAOzjF,KAAU;AACjB,kBAAM,IAAI,MAAM,wEAAwEA,CAAK,EAAE;AAEnG,gBAAM0jF,IAAWF,EAASxjF,CAAK;AAC/B,UAAI0jF,KAAY,OACZF,EAAS,KAAKC,CAAU,IAGxBD,EAASxjF,CAAK,IAAI,KAAK,gBAAgB0jF,GAAUD,CAAU;AAAA,QAEnE;AACA;AAAA,MACJ;AAEI,cAAM,MAAM,0BAA0BppF,CAAG,iBAAiBkpF,CAAU,eAAeC,CAAQ,EAAE;AAEjG,MAAAr8E,EAAI9M,CAAG,IAAImpF;AAAA,IACf;AACA,WAAOr8E;AAAA,EACX;AAAA,EACA,QAAQi8E,GAAK;AACT,WAAOA;AAAA,EACX;AAAA,EACA,MAAM,uBAAuBz7D,GAAQ07D,GAAQr1D,GAAS;AAClD,WAAO,MAAM,KAAK,6BAA6Bq1D,GAAQ17D,GAAQqG,CAAO;AAAA,EAC1E;AAAA,EACA,MAAM,oBAAoBs1D,GAAUH,GAAMx7D,GAAQqG,GAAS;AACvD,WAAO,MAAM,KAAK,uBAAuBm1D,GAAMG,GAAU37D,GAAQqG,CAAO;AAAA,EAC5E;AAAA,EACA,MAAM,wBAAwBk1D,GAAOC,GAAMx7D,GAAQqG,GAAS;AACxD,WAAO,MAAM,KAAK,2BAA2Bm1D,GAAMD,GAAOv7D,GAAQqG,CAAO;AAAA,EAC7E;AACJ;AACAjuB,KAAKkjF,IAAiBT,KAA4B,SAAmCllD,GAAO;AACxF,MAAI,MAAK;AAIT,YAFAgpC,GAAuB,MAAM+b,IAA+B/kD,CAAU,GACtEkpC,EAAuB,MAAMmb,IAA4B,KAAKiB,EAA4B,EAAE,KAAK,MAAMtlD,CAAK,GACpGA,EAAM,OAAK;AAAA,MACf,KAAK;AAED;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,QAAAkpC,EAAuB,MAAMmb,IAA4B,KAAKqB,EAA0B,EAAE,KAAK,MAAM1lD,CAAK;AAC1G;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,QAAAkpC,EAAuB,MAAMmb,IAA4B,KAAKgB,EAA8B,EAAE,KAAK,MAAMrlD,CAAK;AAC9G;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,QAAAkpC,EAAuB,MAAMmb,IAA4B,KAAKe,EAA8B,EAAE,KAAK,MAAMplD,CAAK;AAC9G;AAAA,MACJ,KAAK;AAED,cAAM,IAAI,MAAM,qFAAqF;AAAA,IAGjH;AACA,GAAGmlD,KAA8B,WAAuC;AACpE,MAAI,KAAK;AACL,UAAM,IAAI1b,GAAY,yCAAyC;AAEnE,MAAI,CAACP,EAAuB,MAAMwb,IAA2B,GAAG;AAC5D,UAAM,MAAM,iCAAiC;AACjD,SAAOxb,EAAuB,MAAMwb,IAA2B,GAAG;AACtE,GAAGU,KAAiC,SAAwCplD,GAAO;AAC/E,QAAM,CAACqmD,GAAoBC,CAAU,IAAIpd,EAAuB,MAAMmb,IAA4B,KAAKmB,EAAkC,EAAE,KAAK,MAAMxlD,GAAOkpC,EAAuB,MAAMub,IAAkC,GAAG,CAAC;AAChO,EAAAzb,GAAuB,MAAMyb,IAAkC4B,CAAuB,GACtFnd,EAAuB,MAAMsb,IAAmC,GAAG,EAAE6B,EAAmB,EAAE,IAAIA;AAC9F,aAAW7hF,KAAW8hF,GAAY;AAC9B,UAAMC,IAAkBF,EAAmB,QAAQ7hF,EAAQ,KAAK;AAChE,KAAI+hF,KAAA,gBAAAA,EAAiB,SAAQ,UACzB,KAAK,MAAM,eAAeA,EAAgB,IAAI;AAAA,EAEtD;AACA,UAAQvmD,EAAM,OAAK;AAAA,IACf,KAAK;AACD,WAAK,MAAM,kBAAkBA,EAAM,IAAI;AACvC;AAAA,IACJ,KAAK;AACD;AAAA,IACJ,KAAK;AAED,UADA,KAAK,MAAM,gBAAgBA,EAAM,KAAK,OAAOqmD,CAAkB,GAC3DrmD,EAAM,KAAK,MAAM;AACjB,mBAAWx7B,KAAWw7B,EAAM,KAAK,MAAM,SAAS;AAE5C,cAAIx7B,EAAQ,QAAQ,UAAUA,EAAQ,MAAM;AACxC,gBAAIgiF,IAAYhiF,EAAQ,MACpB27E,IAAWkG,EAAmB,QAAQ7hF,EAAQ,KAAK;AACvD,gBAAI27E,KAAYA,EAAS,QAAQ;AAC7B,mBAAK,MAAM,aAAaqG,GAAWrG,EAAS,IAAI;AAAA;AAGhD,oBAAM,MAAM,qEAAqE;AAAA,UAEzF;AACA,cAAI37E,EAAQ,SAAS0kE,EAAuB,MAAMyb,IAAsC,GAAG,GAAG;AAE1F,gBAAIzb,EAAuB,MAAM0b,IAAiC,GAAG;AACjE,sBAAQ1b,EAAuB,MAAM0b,IAAiC,GAAG,EAAE,MAAI;AAAA,gBAC3E,KAAK;AACD,uBAAK,MAAM,YAAY1b,EAAuB,MAAM0b,IAAiC,GAAG,EAAE,MAAM1b,EAAuB,MAAMub,IAAkC,GAAG,CAAC;AACnK;AAAA,gBACJ,KAAK;AACD,uBAAK,MAAM,iBAAiBvb,EAAuB,MAAM0b,IAAiC,GAAG,EAAE,YAAY1b,EAAuB,MAAMub,IAAkC,GAAG,CAAC;AAC9K;AAAA,cACpC;AAEwB,YAAAzb,GAAuB,MAAM2b,IAAsCngF,EAAQ,KAAU;AAAA,UACzF;AACA,UAAAwkE,GAAuB,MAAM4b,IAAiCyB,EAAmB,QAAQ7hF,EAAQ,KAAK,CAAM;AAAA,QAChH;AAEJ;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAED,UAAI0kE,EAAuB,MAAMyb,IAAsC,GAAG,MAAM,QAAW;AACvF,cAAM8B,IAAiBzmD,EAAM,KAAK,QAAQkpC,EAAuB,MAAMyb,IAAsC,GAAG,CAAC;AACjH,YAAI8B;AACA,kBAAQA,EAAe,MAAI;AAAA,YACvB,KAAK;AACD,mBAAK,MAAM,iBAAiBA,EAAe,YAAYvd,EAAuB,MAAMub,IAAkC,GAAG,CAAC;AAC1H;AAAA,YACJ,KAAK;AACD,mBAAK,MAAM,YAAYgC,EAAe,MAAMvd,EAAuB,MAAMub,IAAkC,GAAG,CAAC;AAC/G;AAAA,UAC5B;AAAA,MAEY;AACA,MAAIvb,EAAuB,MAAMub,IAAkC,GAAG,KAClE,KAAK,MAAM,eAAezkD,EAAM,IAAI,GAExCgpC,GAAuB,MAAMyb,IAAkC,MAAc;AAAA,EACzF;AACA,GAAGY,KAAiC,SAAwCrlD,GAAO;AAC/E,QAAM0mD,IAAqBxd,EAAuB,MAAMmb,IAA4B,KAAKkB,EAAkC,EAAE,KAAK,MAAMvlD,CAAK;AAE7I,UADAgpC,GAAuB,MAAMic,IAAyCyB,CAAuB,GACrF1mD,EAAM,OAAK;AAAA,IACf,KAAK;AACD,WAAK,MAAM,kBAAkBA,EAAM,IAAI;AACvC;AAAA,IACJ,KAAK;AACD,YAAMsT,IAAQtT,EAAM,KAAK;AACzB,UAAIsT,EAAM,gBACNA,EAAM,aAAa,QAAQ,gBAC3BA,EAAM,aAAa,cACnBozC,EAAmB,aAAa,QAAQ;AACxC,mBAAW9N,KAAYtlC,EAAM,aAAa;AACtC,UAAIslC,EAAS,SAAS1P,EAAuB,MAAM2b,IAAuC,GAAG,IACzF,KAAK,MAAM,iBAAiBjM,GAAU8N,EAAmB,aAAa,WAAW9N,EAAS,KAAK,CAAC,KAG5F1P,EAAuB,MAAM4b,IAAkC,GAAG,KAClE,KAAK,MAAM,gBAAgB5b,EAAuB,MAAM4b,IAAkC,GAAG,CAAC,GAElG9b,GAAuB,MAAM6b,IAAuCjM,EAAS,KAAU,GACvF5P,GAAuB,MAAM8b,IAAkC4B,EAAmB,aAAa,WAAW9N,EAAS,KAAK,CAAM,GAC1H1P,EAAuB,MAAM4b,IAAkC,GAAG,KAClE,KAAK,MAAM,mBAAmB5b,EAAuB,MAAM4b,IAAkC,GAAG,CAAC;AAIjH,WAAK,MAAM,gBAAgB9kD,EAAM,KAAK,OAAO0mD,CAAkB;AAC/D;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACD,MAAA1d,GAAuB,MAAMic,IAAyC,MAAc,GACpEjlD,EAAM,KAAK,aACf,QAAQ,gBACZkpC,EAAuB,MAAM4b,IAAkC,GAAG,MAClE,KAAK,MAAM,gBAAgB5b,EAAuB,MAAM4b,IAAkC,GAAG,CAAC,GAC9F9b,GAAuB,MAAM8b,IAAkC,MAAc,IAGrF,KAAK,MAAM,eAAe9kD,EAAM,MAAM0mD,CAAkB;AACxD;AAAA,EAGZ;AACA,GAAGpB,KAA+B,SAAsCtlD,GAAO;AAC3E,EAAAkpC,EAAuB,MAAMob,IAAyB,GAAG,EAAE,KAAKtkD,CAAK,GACrE,KAAK,MAAM,SAASA,CAAK;AAC7B,GAAGulD,KAAqC,SAA4CvlD,GAAO;AACvF,UAAQA,EAAM,OAAK;AAAA,IACf,KAAK;AACD,aAAAkpC,EAAuB,MAAMqb,IAAmC,GAAG,EAAEvkD,EAAM,KAAK,EAAE,IAAIA,EAAM,MACrFA,EAAM;AAAA,IACjB,KAAK;AACD,UAAImgD,IAAWjX,EAAuB,MAAMqb,IAAmC,GAAG,EAAEvkD,EAAM,KAAK,EAAE;AACjG,UAAI,CAACmgD;AACD,cAAM,MAAM,uDAAuD;AAEvE,UAAI1/E,IAAOu/B,EAAM;AACjB,UAAIv/B,EAAK,OAAO;AACZ,cAAMkmF,IAAclkF,GAAG,gBAAgB09E,GAAU1/E,EAAK,KAAK;AAC3D,QAAAyoE,EAAuB,MAAMqb,IAAmC,GAAG,EAAEvkD,EAAM,KAAK,EAAE,IAAI2mD;AAAA,MAC1F;AACA,aAAOzd,EAAuB,MAAMqb,IAAmC,GAAG,EAAEvkD,EAAM,KAAK,EAAE;AAAA,IAC7F,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACD,MAAAkpC,EAAuB,MAAMqb,IAAmC,GAAG,EAAEvkD,EAAM,KAAK,EAAE,IAAIA,EAAM;AAC5F;AAAA,EACZ;AACI,MAAIkpC,EAAuB,MAAMqb,IAAmC,GAAG,EAAEvkD,EAAM,KAAK,EAAE;AAClF,WAAOkpC,EAAuB,MAAMqb,IAAmC,GAAG,EAAEvkD,EAAM,KAAK,EAAE;AAC7F,QAAM,IAAI,MAAM,uBAAuB;AAC3C,GAAGwlD,KAAqC,SAA4CxlD,GAAOmgD,GAAU;AACjG,MAAImG,IAAa,CAAA;AACjB,UAAQtmD,EAAM,OAAK;AAAA,IACf,KAAK;AAED,aAAO,CAACA,EAAM,MAAMsmD,CAAU;AAAA,IAClC,KAAK;AACD,UAAI,CAACnG;AACD,cAAM,MAAM,wFAAwF;AAExG,UAAI1/E,IAAOu/B,EAAM;AAEjB,UAAIv/B,EAAK,MAAM;AACX,mBAAWmmF,KAAkBnmF,EAAK,MAAM;AACpC,cAAImmF,EAAe,SAASzG,EAAS,SAAS;AAC1C,gBAAIsG,IAAiBtG,EAAS,QAAQyG,EAAe,KAAK;AAC1D,YAAAzG,EAAS,QAAQyG,EAAe,KAAK,IAAI1d,EAAuB,MAAMmb,IAA4B,KAAKoB,EAAkC,EAAE,KAAK,MAAMmB,GAAgBH,CAAc;AAAA,UACxL;AAEI,YAAAtG,EAAS,QAAQyG,EAAe,KAAK,IAAIA,GAEzCN,EAAW,KAAKM,CAAc;AAI1C,aAAO,CAACzG,GAAUmG,CAAU;AAAA,IAChC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAED,UAAInG;AACA,eAAO,CAACA,GAAUmG,CAAU;AAG5B,YAAM,MAAM,yDAAyD;AAAA,EAErF;AACI,QAAM,MAAM,yCAAyC;AACzD,GAAGb,KAAqC,SAA4CmB,GAAgBH,GAAgB;AAChH,SAAOhkF,GAAG,gBAAgBgkF,GAAgBG,CAAc;AAC5D,GAAGlB,KAA6B,SAAoC1lD,GAAO;AAEvE,UADAgpC,GAAuB,MAAMgc,IAAqChlD,EAAM,IAAS,GACzEA,EAAM,OAAK;AAAA,IACf,KAAK;AACD;AAAA,IACJ,KAAK;AACD;AAAA,IACJ,KAAK;AACD;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACD,MAAAgpC,GAAuB,MAAM0b,IAA2B1kD,EAAM,IAAS,GACnEkpC,EAAuB,MAAM4b,IAAkC,GAAG,MAClE,KAAK,MAAM,gBAAgB5b,EAAuB,MAAM4b,IAAkC,GAAG,CAAC,GAC9F9b,GAAuB,MAAM8b,IAAkC,MAAc;AAEjF;AAAA,EAGZ;AACA;SCthBO,cAAmB/N,GAAY;AAAA,EAClC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,QAAQ,IAAI8P,GAAe,KAAK,OAAO;AAAA,EAChD;AAAA,EACA,OAAOtD,GAAUl5D,GAAQqG,GAAS;AAC9B,UAAM,EAAE,SAAAo2D,GAAS,GAAGphE,EAAI,IAAK2E;AAC7B,WAAO,KAAK,QAAQ,KAAKre,cAAiBu3E,CAAQ,SAAS;AAAA,MACvD,OAAO,EAAE,SAAAuD,EAAO;AAAA,MAChB,MAAAphE;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,MAC5E,QAAQrG,EAAO,UAAU;AAAA,IACrC,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS05D,GAAO15D,GAAQqG,GAAS;AAC7B,UAAM,EAAE,WAAAkzD,EAAS,IAAKv5D;AACtB,WAAO,KAAK,QAAQ,IAAIre,cAAiB43E,CAAS,SAASG,CAAK,IAAI;AAAA,MAChE,GAAGrzD;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAOqzD,GAAO15D,GAAQqG,GAAS;AAC3B,UAAM,EAAE,WAAAkzD,GAAW,GAAGl+D,EAAI,IAAK2E;AAC/B,WAAO,KAAK,QAAQ,KAAKre,cAAiB43E,CAAS,SAASG,CAAK,IAAI;AAAA,MACjE,MAAAr+D;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAK6yD,GAAUx/E,IAAQ,CAAA,GAAI2sB,GAAS;AAChC,WAAO,KAAK,QAAQ,WAAW1kB,cAAiBu3E,CAAQ,SAAUtO,IAAa;AAAA,MAC3E,OAAAlxE;AAAA,MACA,GAAG2sB;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAOqzD,GAAO15D,GAAQqG,GAAS;AAC3B,UAAM,EAAE,WAAAkzD,EAAS,IAAKv5D;AACtB,WAAO,KAAK,QAAQ,KAAKre,cAAiB43E,CAAS,SAASG,CAAK,WAAW;AAAA,MACxE,GAAGrzD;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAcs1D,GAAUtgE,GAAMgL,GAAS;AACzC,UAAMo1D,IAAM,MAAM,KAAK,OAAOE,GAAUtgE,GAAMgL,CAAO;AACrD,WAAO,MAAM,KAAK,KAAKo1D,EAAI,IAAI,EAAE,WAAWE,EAAQ,GAAIt1D,CAAO;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAgBs1D,GAAUtgE,GAAMgL,GAAS;AACrC,WAAOi1D,GAAgB,sBAAsBK,GAAU,KAAK,QAAQ,KAAK,QAAQ,MAAMtgE,GAAMgL,CAAO;AAAA,EACxG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAKk1D,GAAOv7D,GAAQqG,GAAS;;AAC/B,UAAMi5C,IAAUqY,GAAa;AAAA,MACzBtxD,KAAA,gBAAAA,EAAS;AAAA,MACT;AAAA,QACI,2BAA2B;AAAA,QAC3B,sCAAoCjuB,IAAAiuB,KAAA,gBAAAA,EAAS,mBAAT,gBAAAjuB,EAAyB,eAAc;AAAA,MAC3F;AAAA,IACA,CAAS;AACD,eAAa;AACT,YAAM,EAAE,MAAMqjF,GAAK,UAAA1kF,EAAQ,IAAK,MAAM,KAAK,SAASwkF,GAAOv7D,GAAQ;AAAA,QAC/D,GAAGqG;AAAA,QACH,SAAS,EAAE,GAAGA,KAAA,gBAAAA,EAAS,SAAS,GAAGi5C,EAAO;AAAA,MAC1D,CAAa,EAAE,aAAY;AACf,cAAQmc,EAAI,QAAM;AAAA,QAEd,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACD,cAAIiB,IAAgB;AACpB,cAAIr2D,KAAA,QAAAA,EAAS;AACT,YAAAq2D,IAAgBr2D,EAAQ;AAAA,eAEvB;AACD,kBAAMs2D,IAAiB5lF,EAAS,QAAQ,IAAI,sBAAsB;AAClE,gBAAI4lF,GAAgB;AAChB,oBAAMC,IAAmB,SAASD,CAAc;AAChD,cAAK,MAAMC,CAAgB,MACvBF,IAAgBE;AAAA,YAExB;AAAA,UACJ;AACA,gBAAM1b,GAAMwb,CAAa;AACzB;AAAA,QAEJ,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACD,iBAAOjB;AAAA,MAC3B;AAAA,IACQ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOE,GAAUtgE,GAAMgL,GAAS;AAC5B,WAAOi1D,GAAgB,sBAAsBK,GAAU,KAAK,QAAQ,KAAK,QAAQ,MAAMtgE,GAAMgL,CAAO;AAAA,EACxG;AAAA,EACA,kBAAkBqzD,GAAO15D,GAAQqG,GAAS;AACtC,UAAM,EAAE,WAAAkzD,GAAW,GAAGl+D,EAAI,IAAK2E;AAC/B,WAAO,KAAK,QAAQ,KAAKre,cAAiB43E,CAAS,SAASG,CAAK,wBAAwB;AAAA,MACrF,MAAAr+D;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,MAC5E,QAAQrG,EAAO,UAAU;AAAA,IACrC,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,yBAAyBu7D,GAAOv7D,GAAQqG,GAAS;AACnD,UAAMo1D,IAAM,MAAM,KAAK,kBAAkBF,GAAOv7D,GAAQqG,CAAO;AAC/D,WAAO,MAAM,KAAK,KAAKo1D,EAAI,IAAIz7D,GAAQqG,CAAO;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,wBAAwBk1D,GAAOv7D,GAAQqG,GAAS;AAC5C,WAAOi1D,GAAgB,0BAA0BC,GAAO,KAAK,QAAQ,KAAK,QAAQ,MAAMv7D,GAAQqG,CAAO;AAAA,EAC3G;AACJ;AACAw2D,GAAK,QAAQC;ACnKN,MAAMzD,WAAgB3M,GAAY;AAAA,EACrC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,OAAO,IAAIqQ,GAAa,KAAK,OAAO,GACzC,KAAK,WAAW,IAAI/F,GAAqB,KAAK,OAAO;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO37D,IAAO,CAAA,GAAIgL,GAAS;AACvB,WAAO,KAAK,QAAQ,KAAK,YAAY;AAAA,MACjC,MAAAhL;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS6yD,GAAU7yD,GAAS;AACxB,WAAO,KAAK,QAAQ,IAAI1kB,cAAiBu3E,CAAQ,IAAI;AAAA,MACjD,GAAG7yD;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO6yD,GAAU79D,GAAMgL,GAAS;AAC5B,WAAO,KAAK,QAAQ,KAAK1kB,cAAiBu3E,CAAQ,IAAI;AAAA,MAClD,MAAA79D;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO6yD,GAAU7yD,GAAS;AACtB,WAAO,KAAK,QAAQ,OAAO1kB,cAAiBu3E,CAAQ,IAAI;AAAA,MACpD,GAAG7yD;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA,EACA,aAAahL,GAAMgL,GAAS;AACxB,WAAO,KAAK,QAAQ,KAAK,iBAAiB;AAAA,MACtC,MAAAhL;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,MAC5E,QAAQhL,EAAK,UAAU;AAAA,IACnC,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,iBAAiBA,GAAMgL,GAAS;AAClC,UAAMo1D,IAAM,MAAM,KAAK,aAAapgE,GAAMgL,CAAO;AACjD,WAAO,MAAM,KAAK,KAAK,KAAKo1D,EAAI,IAAI,EAAE,WAAWA,EAAI,UAAS,GAAIp1D,CAAO;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA,EAIA,mBAAmBhL,GAAMgL,GAAS;AAC9B,WAAOi1D,GAAgB,4BAA4BjgE,GAAM,KAAK,QAAQ,KAAK,SAASgL,CAAO;AAAA,EAC/F;AACJ;AACAgzD,GAAQ,OAAOwD;AACfxD,GAAQ,WAAWnC;AC/EZ,MAAM8F,WAAatQ,GAAY;AAAA,EAClC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,WAAW,IAAIuQ,GAAqB,KAAK,OAAO,GACrD,KAAK,UAAU,IAAIC,GAAmB,KAAK,OAAO,GAClD,KAAK,aAAa,IAAIC,GAAyB,KAAK,OAAO,GAC3D,KAAK,UAAU,IAAI/D,GAAmB,KAAK,OAAO;AAAA,EACtD;AACJ;AACA4D,GAAK,WAAWjE;AAChBiE,GAAK,UAAU7D;AACf6D,GAAK,aAAatE;AAClBsE,GAAK,UAAU3D;ACpBR,MAAMpC,WAAoBvK,GAAY;AAAA,EACzC,OAAOrxD,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,gBAAgB,EAAE,MAAAhL,GAAM,GAAGgL,GAAS,QAAQhL,EAAK,UAAU,GAAK,CAAE;AAAA,EAC/F;AACJ;SCFO,cAAsBqxD,GAAY;AAAA;AAAA;AAAA;AAAA,EAIrC,SAAS0Q,GAAQp9D,GAAQqG,GAAS;AAC9B,UAAM,EAAE,cAAAg3D,EAAY,IAAKr9D;AACzB,WAAO,KAAK,QAAQ,IAAIre,iBAAoB07E,CAAY,UAAUD,CAAM,YAAY;AAAA,MAChF,GAAG/2D;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,QAAQ,wBAAwBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,MAC1E,kBAAkB;AAAA,IAC9B,CAAS;AAAA,EACL;AACJ,QCRO,cAAoBqmD,GAAY;AAAA,EACnC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,UAAU,IAAI4Q,GAAmB,KAAK,OAAO;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAOC,GAAaliE,GAAMgL,GAAS;AAC/B,WAAO,KAAK,QAAQ,KAAK1kB,iBAAoB47E,CAAW,UAAU7R,GAA4B,EAAE,MAAArwD,GAAM,GAAGgL,EAAO,GAAI,KAAK,OAAO,CAAC;AAAA,EACrI;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS+2D,GAAQp9D,GAAQqG,GAAS;AAC9B,UAAM,EAAE,cAAAg3D,EAAY,IAAKr9D;AACzB,WAAO,KAAK,QAAQ,IAAIre,iBAAoB07E,CAAY,UAAUD,CAAM,IAAI/2D,CAAO;AAAA,EACvF;AAAA;AAAA;AAAA;AAAA,EAIA,KAAKk3D,GAAa7jF,IAAQ,CAAA,GAAI2sB,GAAS;AACnC,WAAO,KAAK,QAAQ,WAAW1kB,iBAAoB47E,CAAW,UAAW3S,IAAa;AAAA,MAClF,OAAAlxE;AAAA,MACA,GAAG2sB;AAAA,IACf,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO+2D,GAAQp9D,GAAQqG,GAAS;AAC5B,UAAM,EAAE,cAAAg3D,EAAY,IAAKr9D;AACzB,WAAO,KAAK,QAAQ,OAAOre,iBAAoB07E,CAAY,UAAUD,CAAM,IAAI;AAAA,MAC3E,GAAG/2D;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,QAAQ,SAAStxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACvE,CAAS;AAAA,EACL;AACJ;AACAm3D,GAAM,UAAUxrC;AC1CT,MAAMyrC,WAAmB/Q,GAAY;AAAA,EACxC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,QAAQ,IAAIgR,GAAe,KAAK,OAAO;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOriE,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,eAAe,EAAE,MAAAhL,GAAM,GAAGgL,GAAS;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAIA,SAASk3D,GAAal3D,GAAS;AAC3B,WAAO,KAAK,QAAQ,IAAI1kB,iBAAoB47E,CAAW,IAAIl3D,CAAO;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAIA,KAAK3sB,IAAQ,CAAA,GAAI2sB,GAAS;AACtB,WAAO,KAAK,QAAQ,WAAW,eAAgBukD,IAAa,EAAE,OAAAlxE,GAAO,GAAG2sB,GAAS;AAAA,EACrF;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOk3D,GAAal3D,GAAS;AACzB,WAAO,KAAK,QAAQ,OAAO1kB,iBAAoB47E,CAAW,IAAI;AAAA,MAC1D,GAAGl3D;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,QAAQ,SAAStxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACvE,CAAS;AAAA,EACL;AACJ;AACAo3D,GAAW,QAAQD;SCpCZ,cAAoB9Q,GAAY;AAAA;AAAA;AAAA;AAAA,EAInC,OAAOiR,GAAgB39D,GAAQqG,GAAS;AACpC,UAAM,EAAE,SAAAo2D,GAAS,GAAGphE,EAAI,IAAK2E;AAC7B,WAAO,KAAK,QAAQ,KAAKre,oBAAuBg8E,CAAc,UAAU;AAAA,MACpE,OAAO,EAAE,SAAAlB,EAAO;AAAA,MAChB,MAAAphE;AAAA,MACA,GAAGgL;AAAA,IACf,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,SAASu3D,GAAQ59D,GAAQqG,GAAS;AAC9B,UAAM,EAAE,iBAAAw3D,GAAiB,GAAGnkF,EAAK,IAAKsmB;AACtC,WAAO,KAAK,QAAQ,IAAIre,oBAAuBk8E,CAAe,UAAUD,CAAM,IAAI,EAAE,OAAAlkF,GAAO,GAAG2sB,EAAO,CAAE;AAAA,EAC3G;AAAA;AAAA;AAAA;AAAA,EAIA,KAAKs3D,GAAgBjkF,IAAQ,CAAA,GAAI2sB,GAAS;AACtC,WAAO,KAAK,QAAQ,WAAW1kB,oBAAuBg8E,CAAc,UAAW9S,IAAyB,EAAE,OAAAnxE,GAAO,GAAG2sB,EAAO,CAAE;AAAA,EACjI;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOu3D,GAAQ59D,GAAQqG,GAAS;AAC5B,UAAM,EAAE,iBAAAw3D,EAAe,IAAK79D;AAC5B,WAAO,KAAK,QAAQ,OAAOre,oBAAuBk8E,CAAe,UAAUD,CAAM,IAAIv3D,CAAO;AAAA,EAChG;AACJ;AC/BO,MAAMy3D,WAAsBpR,GAAY;AAAA,EAC3C,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,QAAQ,IAAIqR,GAAe,KAAK,OAAO;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO1iE,IAAO,CAAA,GAAIgL,GAAS;AACvB,WAAO,KAAK,QAAQ,KAAK,kBAAkB,EAAE,MAAAhL,GAAM,GAAGgL,GAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAIA,SAASs3D,GAAgBt3D,GAAS;AAC9B,WAAO,KAAK,QAAQ,IAAI1kB,oBAAuBg8E,CAAc,IAAIt3D,CAAO;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOs3D,GAAgBtiE,GAAMgL,GAAS;AAClC,WAAO,KAAK,QAAQ,KAAK1kB,oBAAuBg8E,CAAc,IAAI,EAAE,MAAAtiE,GAAM,GAAGgL,EAAO,CAAE;AAAA,EAC1F;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOs3D,GAAgBt3D,GAAS;AAC5B,WAAO,KAAK,QAAQ,OAAO1kB,oBAAuBg8E,CAAc,IAAIt3D,CAAO;AAAA,EAC/E;AACJ;AACAy3D,GAAc,QAAQE;AChCf,MAAMC,WAAmBvR,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaxC,OAAOrxD,GAAMgL,GAAS;AAClB,UAAM63D,IAAgC,CAAC,CAAC7iE,EAAK;AAG7C,QAAI8iE,IAAkBD,IAAgC7iE,EAAK,kBAAkB;AAC7E,IAAI6iE,KACA1W,GAAU,KAAK,OAAO,EAAE,MAAM,4CAA4CnsD,EAAK,eAAe;AAElG,UAAMtkB,IAAW,KAAK,QAAQ,KAAK,eAAe;AAAA,MAC9C,MAAM;AAAA,QACF,GAAGskB;AAAA,QACH,iBAAiB8iE;AAAA,MACjC;AAAA,MACY,GAAG93D;AAAA,IACf,CAAS;AAED,WAAI63D,IACOnnF,KAMXywE,GAAU,KAAK,OAAO,EAAE,MAAM,mDAAmD,GAC1EzwE,EAAS,YAAY,CAACA,OACrBA,KAAYA,EAAS,QACrBA,EAAS,KAAK,QAAQ,CAACqnF,MAAuB;AAC1C,YAAMC,IAAqBD,EAAmB;AAC9C,MAAAA,EAAmB,YAAYzE,GAAe0E,CAAkB;AAAA,IACpE,CAAC,GAEEtnF,EACV;AAAA,EACL;AACJ;AC9CO,MAAMunF,WAAoB5R,GAAY;AAAA;AAAA;AAAA;AAAA,EAIzC,SAAS6R,GAAcv+D,GAAQqG,GAAS;AACpC,UAAM,EAAE,SAAAm4D,GAAS,QAAA/E,EAAM,IAAKz5D;AAC5B,WAAO,KAAK,QAAQ,IAAIre,YAAe68E,CAAO,SAAS/E,CAAM,iBAAiB8E,CAAY,IAAIl4D,CAAO;AAAA,EACzG;AAAA;AAAA;AAAA;AAAA,EAIA,KAAKqzD,GAAO15D,GAAQqG,GAAS;AACzB,UAAM,EAAE,SAAAm4D,GAAS,GAAG9kF,EAAK,IAAKsmB;AAC9B,WAAO,KAAK,QAAQ,WAAWre,YAAe68E,CAAO,SAAS9E,CAAK,iBAAkB9O,IAAa,EAAE,OAAAlxE,GAAO,GAAG2sB,GAAS;AAAA,EAC3H;AACJ;ACbO,MAAMw2D,WAAanQ,GAAY;AAAA,EAClC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,cAAc,IAAI+R,GAA2B,KAAK,OAAO;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAOC,GAAQrjE,GAAMgL,GAAS;AAC1B,WAAO,KAAK,QAAQ,KAAK1kB,YAAe+8E,CAAM,SAAS,EAAE,MAAArjE,GAAM,GAAGgL,EAAO,CAAE;AAAA,EAC/E;AAAA;AAAA;AAAA;AAAA,EAIA,SAASqzD,GAAO15D,GAAQqG,GAAS;AAC7B,UAAM,EAAE,SAAAm4D,EAAO,IAAKx+D;AACpB,WAAO,KAAK,QAAQ,IAAIre,YAAe68E,CAAO,SAAS9E,CAAK,IAAIrzD,CAAO;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA,EAIA,KAAKq4D,GAAQhlF,IAAQ,CAAA,GAAI2sB,GAAS;AAC9B,WAAO,KAAK,QAAQ,WAAW1kB,YAAe+8E,CAAM,SAAU9T,IAAa;AAAA,MACvE,OAAAlxE;AAAA,MACA,GAAG2sB;AAAA,IACf,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOqzD,GAAO15D,GAAQqG,GAAS;AAC3B,UAAM,EAAE,SAAAm4D,EAAO,IAAKx+D;AACpB,WAAO,KAAK,QAAQ,OAAOre,YAAe68E,CAAO,SAAS9E,CAAK,IAAIrzD,CAAO;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOqzD,GAAO15D,GAAQqG,GAAS;AAC3B,UAAM,EAAE,SAAAm4D,EAAO,IAAKx+D;AACpB,WAAO,KAAK,QAAQ,KAAKre,YAAe68E,CAAO,SAAS9E,CAAK,IAAIrzD,CAAO;AAAA,EAC5E;AACJ;AACAw2D,GAAK,cAAcyB;AC5CZ,MAAMK,WAAcjS,GAAY;AAAA,EACnC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,OAAO,IAAIqQ,GAAa,KAAK,OAAO;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO1hE,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,UAAU,EAAE,MAAAhL,GAAM,GAAGgL,GAAS;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAIA,SAASq4D,GAAQr4D,GAAS;AACtB,WAAO,KAAK,QAAQ,IAAI1kB,YAAe+8E,CAAM,IAAIr4D,CAAO;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOq4D,GAAQrjE,GAAMgL,GAAS;AAC1B,WAAO,KAAK,QAAQ,KAAK1kB,YAAe+8E,CAAM,IAAI,EAAE,MAAArjE,GAAM,GAAGgL,EAAO,CAAE;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA,EAIA,KAAK3sB,IAAQ,CAAA,GAAI2sB,GAAS;AACtB,WAAO,KAAK,QAAQ,WAAW,UAAWukD,IAAa,EAAE,OAAAlxE,GAAO,GAAG2sB,GAAS;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOq4D,GAAQr4D,GAAS;AACpB,WAAO,KAAK,QAAQ,OAAO1kB,YAAe+8E,CAAM,IAAIr4D,CAAO;AAAA,EAC/D;AACJ;AACAs4D,GAAM,OAAO9B;SCvCN,cAAoBnQ,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBnC,OAAOrxD,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,UAAUqlD,GAA4B,EAAE,MAAArwD,GAAM,GAAGgL,EAAO,GAAI,KAAK,OAAO,CAAC;AAAA,EACtG;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS+2D,GAAQ/2D,GAAS;AACtB,WAAO,KAAK,QAAQ,IAAI1kB,YAAey7E,CAAM,IAAI/2D,CAAO;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAIA,KAAK3sB,IAAQ,CAAA,GAAI2sB,GAAS;AACtB,WAAO,KAAK,QAAQ,WAAW,UAAWukD,IAAa,EAAE,OAAAlxE,GAAO,GAAG2sB,GAAS;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO+2D,GAAQ/2D,GAAS;AACpB,WAAO,KAAK,QAAQ,OAAO1kB,YAAey7E,CAAM,IAAI/2D,CAAO;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ+2D,GAAQ/2D,GAAS;AACrB,WAAO,KAAK,QAAQ,IAAI1kB,YAAey7E,CAAM,YAAY;AAAA,MACrD,GAAG/2D;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,QAAQ,wBAAwBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,MAC1E,kBAAkB;AAAA,IAC9B,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,kBAAkB4H,GAAI,EAAE,cAAA2wD,IAAe,KAAM,SAAAC,IAAU,KAAK,KAAK,IAAI,IAAK,IAAI;AAChF,UAAMC,IAAkB,oBAAI,IAAI,CAAC,aAAa,SAAS,SAAS,CAAC,GAC3DtlF,IAAQ,KAAK,IAAG;AACtB,QAAIulF,IAAO,MAAM,KAAK,SAAS9wD,CAAE;AACjC,WAAO,CAAC8wD,EAAK,UAAU,CAACD,EAAgB,IAAIC,EAAK,MAAM;AAGnD,UAFA,MAAM7d,GAAM0d,CAAY,GACxBG,IAAO,MAAM,KAAK,SAAS9wD,CAAE,GACzB,KAAK,QAAQz0B,IAAQqlF;AACrB,cAAM,IAAIze,GAA0B;AAAA,UAChC,SAAS,iCAAiCnyC,CAAE,+BAA+B4wD,CAAO;AAAA,QACtG,CAAiB;AAGT,WAAOE;AAAA,EACX;AACJ;AC9EO,MAAMC,WAAgBtS,GAAY;AACzC;SCDO,cAAsBA,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBrC,IAAIrxD,GAAMgL,GAAS;AACf,WAAO,KAAK,QAAQ,KAAK,kCAAkC,EAAE,MAAAhL,GAAM,GAAGgL,GAAS;AAAA,EACnF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,SAAShL,GAAMgL,GAAS;AACpB,WAAO,KAAK,QAAQ,KAAK,uCAAuC,EAAE,MAAAhL,GAAM,GAAGgL,GAAS;AAAA,EACxF;AACJ;ACvCO,MAAM44D,WAAcvS,GAAY;AAAA,EACnC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,UAAU,IAAIwS,GAAmB,KAAK,OAAO;AAAA,EACtD;AACJ;AACAD,GAAM,UAAUE;ACNT,MAAMC,WAAoB1S,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBzC,OAAO2S,GAA0BhkE,GAAMgL,GAAS;AAC5C,WAAO,KAAK,QAAQ,WAAW1kB,8BAAiC09E,CAAwB,gBAAiB1U,IAAO,EAAE,MAAAtvD,GAAM,QAAQ,QAAQ,GAAGgL,GAAS;AAAA,EACxJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,SAASg5D,GAA0B3lF,IAAQ,CAAA,GAAI2sB,GAAS;AACpD,WAAO,KAAK,QAAQ,IAAI1kB,8BAAiC09E,CAAwB,gBAAgB;AAAA,MAC7F,OAAA3lF;AAAA,MACA,GAAG2sB;AAAA,IACf,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,OAAOi5D,GAAct/D,GAAQqG,GAAS;AAClC,UAAM,EAAE,6BAAAk5D,EAA2B,IAAKv/D;AACxC,WAAO,KAAK,QAAQ,OAAOre,8BAAiC49E,CAA2B,gBAAgBD,CAAY,IAAIj5D,CAAO;AAAA,EAClI;AACJ;SC/DO,cAA0BqmD,GAAY;AAAA,EACzC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,cAAc,IAAI8S,GAA2B,KAAK,OAAO;AAAA,EAClE;AACJ;AACAC,GAAY,cAAcL;ACNnB,MAAMK,WAAoB/S,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAczC,KAAKgT,GAAiBhmF,IAAQ,CAAA,GAAI2sB,GAAS;AACvC,WAAO,KAAK,QAAQ,WAAW1kB,uBAA0B+9E,CAAe,gBAAiB9U,IAAa,EAAE,OAAAlxE,GAAO,GAAG2sB,EAAO,CAAE;AAAA,EAC/H;AACJ;ACfO,MAAMs5D,WAAajT,GAAY;AAAA,EAClC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,cAAc,IAAIkT,GAA2B,KAAK,OAAO;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,OAAOvkE,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,qBAAqB,EAAE,MAAAhL,GAAM,GAAGgL,GAAS;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,SAASq5D,GAAiBr5D,GAAS;AAC/B,WAAO,KAAK,QAAQ,IAAI1kB,uBAA0B+9E,CAAe,IAAIr5D,CAAO;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,KAAK3sB,IAAQ,CAAA,GAAI2sB,GAAS;AACtB,WAAO,KAAK,QAAQ,WAAW,qBAAsBukD,IAAa,EAAE,OAAAlxE,GAAO,GAAG2sB,GAAS;AAAA,EAC3F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAOq5D,GAAiBr5D,GAAS;AAC7B,WAAO,KAAK,QAAQ,KAAK1kB,uBAA0B+9E,CAAe,WAAWr5D,CAAO;AAAA,EACxF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,WAAWq5D,GAAiBhmF,IAAQ,CAAA,GAAI2sB,GAAS;AAC7C,WAAO,KAAK,QAAQ,WAAW1kB,uBAA0B+9E,CAAe,WAAY9U,IAAa,EAAE,OAAAlxE,GAAO,GAAG2sB,EAAO,CAAE;AAAA,EAC1H;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAMq5D,GAAiBr5D,GAAS;AAC5B,WAAO,KAAK,QAAQ,KAAK1kB,uBAA0B+9E,CAAe,UAAUr5D,CAAO;AAAA,EACvF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAOq5D,GAAiBr5D,GAAS;AAC7B,WAAO,KAAK,QAAQ,KAAK1kB,uBAA0B+9E,CAAe,WAAWr5D,CAAO;AAAA,EACxF;AACJ;AACAs5D,GAAK,cAAcF;AC1GZ,MAAMI,WAAmBnT,GAAY;AAAA,EACxC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,UAAU,IAAIoT,GAAmB,KAAK,OAAO,GAClD,KAAK,OAAO,IAAIC,GAAa,KAAK,OAAO,GACzC,KAAK,cAAc,IAAIH,GAA2B,KAAK,OAAO,GAC9D,KAAK,QAAQ,IAAII,GAAe,KAAK,OAAO;AAAA,EAChD;AACJ;AACAH,GAAW,UAAUb;AACrBa,GAAW,OAAOF;AAClBE,GAAW,cAAcJ;AACzBI,GAAW,QAAQZ;ACpBZ,MAAMgB,WAAqBvT,GAAY;AAC9C;ACCO,MAAMyS,WAAgBzS,GAAY;AAAA,EACrC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,eAAe,IAAIwT,GAA6B,KAAK,OAAO;AAAA,EACrE;AACJ;AACAf,GAAQ,eAAec;ACPhB,MAAME,WAAezT,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWpC,gBAAgBrxD,GAAMgL,GAAS;AAC3B,WAAO,KAAK,QAAQ,KAAK,sBAAsBqlD,GAA4B,EAAE,MAAArwD,GAAM,GAAGgL,EAAO,GAAI,KAAK,OAAO,CAAC;AAAA,EAClH;AAAA,EACA,KAAKhL,GAAMgL,GAAS;AAChB,WAAO,KAAK,QAAQ,KAAK,iBAAiBqlD,GAA4B,EAAE,MAAArwD,GAAM,GAAGgL,GAAS,QAAQhL,EAAK,UAAU,GAAK,GAAI,KAAK,OAAO,CAAC;AAAA,EAC3I;AAAA,EACA,SAASA,GAAMgL,GAAS;AACpB,WAAO,KAAK,QAAQ,KAAK,uBAAuB,EAAE,MAAAhL,GAAM,GAAGgL,GAAS,QAAQhL,EAAK,UAAU,GAAK,CAAE;AAAA,EACtG;AACJ;ACnBO,MAAM+kE,WAAe1T,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAKpC,SAAS+J,GAAOpwD,GAAS;AACrB,WAAO,KAAK,QAAQ,IAAI1kB,aAAgB80E,CAAK,IAAIpwD,CAAO;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,KAAKA,GAAS;AACV,WAAO,KAAK,QAAQ,WAAW,WAAYskD,IAAOtkD,CAAO;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAOowD,GAAOpwD,GAAS;AACnB,WAAO,KAAK,QAAQ,OAAO1kB,aAAgB80E,CAAK,IAAIpwD,CAAO;AAAA,EAC/D;AACJ;ACxBO,MAAMg6D,WAAoB3T,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAKzC,OAAOrxD,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,gBAAgB,EAAE,MAAAhL,GAAM,GAAGgL,GAAS;AAAA,EACjE;AACJ;ACNO,MAAMi6D,WAAc5T,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYnC,OAAO6T,GAAQllE,GAAMgL,GAAS;AAC1B,WAAO,KAAK,QAAQ,KAAK1kB,qBAAwB4+E,CAAM,WAAW;AAAA,MAC9D,MAAAllE;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,QAAQ,SAAStxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACvE,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAOk6D,GAAQl6D,GAAS;AACpB,WAAO,KAAK,QAAQ,KAAK1kB,qBAAwB4+E,CAAM,WAAW;AAAA,MAC9D,GAAGl6D;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,QAAQ,SAAStxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACvE,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAMk6D,GAAQllE,GAAMgL,GAAS;AACzB,WAAO,KAAK,QAAQ,KAAK1kB,qBAAwB4+E,CAAM,UAAU;AAAA,MAC7D,MAAAllE;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,QAAQ,SAAStxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACvE,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAOk6D,GAAQllE,IAAO,CAAA,GAAIgL,GAAS;AAC/B,WAAO,KAAK,QAAQ,KAAK1kB,qBAAwB4+E,CAAM,WAAW;AAAA,MAC9D,MAAAllE;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,QAAQ,SAAStxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACvE,CAAS;AAAA,EACL;AACJ;ACnEO,MAAMm6D,WAAsB9T,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAU3C,OAAOrxD,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,4BAA4B,EAAE,MAAAhL,GAAM,GAAGgL,GAAS;AAAA,EAC7E;AACJ;ACTO,MAAM0yD,WAAiBrM,GAAY;AAAA,EACtC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,gBAAgB,IAAI+T,GAA+B,KAAK,OAAO,GACpE,KAAK,QAAQ,IAAIC,GAAe,KAAK,OAAO;AAAA,EAChD;AACJ;AACA3H,GAAS,gBAAgByH;AACzBzH,GAAS,QAAQuH;ACZV,SAASK,GAAmB5pF,GAAUipB,GAAQ;AACjD,SAAI,CAACA,KAAU,CAACkuD,GAAsBluD,CAAM,IACjC;AAAA,IACH,GAAGjpB;AAAA,IACH,eAAe;AAAA,IACf,QAAQA,EAAS,OAAO,IAAI,CAAC7K,MACrBA,EAAK,SAAS,kBACP;AAAA,MACH,GAAGA;AAAA,MACH,kBAAkB;AAAA,IAC1C,IAEoBA,EAAK,SAAS,YACP;AAAA,MACH,GAAGA;AAAA,MACH,SAASA,EAAK,QAAQ,IAAI,CAACiO,OAAa;AAAA,QACpC,GAAGA;AAAA,QACH,QAAQ;AAAA,MACpC,EAA0B;AAAA,IAC1B,IAG2BjO,CAEd;AAAA,EACb,IAEWg+E,GAAcnzE,GAAUipB,CAAM;AACzC;AACO,SAASkqD,GAAcnzE,GAAUipB,GAAQ;AAC5C,QAAM2iC,IAAS5rD,EAAS,OAAO,IAAI,CAAC7K,MAAS;AACzC,QAAIA,EAAK,SAAS;AACd,aAAO;AAAA,QACH,GAAGA;AAAA,QACH,kBAAkBsiF,GAAcxuD,GAAQ9zB,CAAI;AAAA,MAC5D;AAEQ,QAAIA,EAAK,SAAS,WAAW;AACzB,YAAMiO,IAAUjO,EAAK,QAAQ,IAAI,CAACiO,MAC1BA,EAAQ,SAAS,gBACV;AAAA,QACH,GAAGA;AAAA,QACH,QAAQymF,GAAgB5gE,GAAQ7lB,EAAQ,IAAI;AAAA,MACpE,IAEuBA,CACV;AACD,aAAO;AAAA,QACH,GAAGjO;AAAA,QACH,SAAAiO;AAAA,MAChB;AAAA,IACQ;AACA,WAAOjO;AAAA,EACX,CAAC,GACK4lF,IAAS,OAAO,OAAO,CAAA,GAAI/6E,GAAU,EAAE,QAAA4rD,GAAQ;AACrD,SAAK,OAAO,yBAAyB5rD,GAAU,aAAa,KACxD8pF,GAAc/O,CAAM,GAExB,OAAO,eAAeA,GAAQ,iBAAiB;AAAA,IAC3C,YAAY;AAAA,IACZ,MAAM;AACF,iBAAWnvB,KAAUmvB,EAAO;AACxB,YAAInvB,EAAO,SAAS;AAGpB,qBAAWxoD,KAAWwoD,EAAO;AACzB,gBAAIxoD,EAAQ,SAAS,iBAAiBA,EAAQ,WAAW;AACrD,qBAAOA,EAAQ;AAAA;AAI3B,aAAO;AAAA,IACX;AAAA,EACR,CAAK,GACM23E;AACX;AACA,SAAS8O,GAAgB5gE,GAAQ7lB,GAAS;;AACtC,WAAIoE,KAAAnG,IAAA4nB,EAAO,SAAP,gBAAA5nB,EAAa,WAAb,gBAAAmG,EAAqB,UAAS,gBACvB,OAEP,iBAAe2R,IAAA8P,EAAO,SAAP,gBAAA9P,EAAa,YACRC,IAAA6P,EAAO,SAAP,gBAAA7P,EAAa,QACd,UAAUhW,CAAO,IAEjC,KAAK,MAAMA,CAAO;AAC7B;AACO,SAAS+zE,GAAsBluD,GAAQ;;AAC1C,SAAI,EAAA6tD,IAA6Bz1E,IAAA4nB,EAAO,SAAP,gBAAA5nB,EAAa,MAAM;AAIxD;AAmBO,SAAS21E,GAAmBH,GAAM;AACrC,UAAOA,KAAA,gBAAAA,EAAO,YAAc;AAChC;AACA,SAASkT,GAAmBC,GAAatyF,GAAM;AAC3C,SAAOsyF,EAAY,KAAK,CAACnT,MAASA,EAAK,SAAS,cAAcA,EAAK,SAASn/E,CAAI;AACpF;AACA,SAAS+/E,GAAcxuD,GAAQuuD,GAAU;AACrC,QAAMG,IAAYoS,GAAmB9gE,EAAO,SAAS,CAAA,GAAIuuD,EAAS,IAAI;AACtE,SAAO;AAAA,IACH,GAAGA;AAAA,IACH,GAAGA;AAAA,IACH,kBAAkBR,GAAmBW,CAAS,IAAIA,EAAU,UAAUH,EAAS,SAAS,IAClFG,KAAA,QAAAA,EAAW,SAAS,KAAK,MAAMH,EAAS,SAAS,IAC7C;AAAA,EAClB;AACA;AAkBO,SAASsS,GAAcG,GAAK;AAC/B,QAAMC,IAAQ,CAAA;AACd,aAAWt+B,KAAUq+B,EAAI;AACrB,QAAIr+B,EAAO,SAAS;AAGpB,iBAAWxoD,KAAWwoD,EAAO;AACzB,QAAIxoD,EAAQ,SAAS,iBACjB8mF,EAAM,KAAK9mF,EAAQ,IAAI;AAInC,EAAA6mF,EAAI,cAAcC,EAAM,KAAK,EAAE;AACnC;AC9JA,IAAIC,IAA2BC,IAAwBC,IAAyCC,IAA+BC,IAA8BC,IAA0BC,IAA4BC;AAK5M,MAAMC,WAAuB5R,GAAY;AAAA,EAC5C,YAAY9vD,GAAQ;AAChB,UAAK,GACLkhE,GAA0B,IAAI,IAAI,GAClCC,GAAuB,IAAI,MAAM,MAAM,GACvCC,GAAwC,IAAI,MAAM,MAAM,GACxDC,GAA8B,IAAI,MAAM,MAAM,GAC9C1iB,GAAuB,MAAMwiB,IAAwBnhE,CAAW;AAAA,EACpE;AAAA,EACA,OAAO,eAAejnB,GAAQinB,GAAQqG,GAAS;AAC3C,UAAM8rD,IAAS,IAAIuP,GAAe1hE,CAAM;AACxC,WAAAmyD,EAAO,KAAK,MAAMA,EAAO,0BAA0Bp5E,GAAQinB,GAAQ;AAAA,MAC/D,GAAGqG;AAAA,MACH,SAAS,EAAE,GAAGA,KAAA,gBAAAA,EAAS,SAAS,6BAA6B,SAAQ;AAAA,IACjF,CAAS,CAAC,GACK8rD;AAAA,EACX;AAAA,EACA,MAAM,0BAA0Bp5E,GAAQinB,GAAQqG,GAAS;;AACrD,UAAMgrD,IAAShrD,KAAA,gBAAAA,EAAS;AACxB,IAAIgrD,MACIA,EAAO,WACP,KAAK,WAAW,MAAK,GACzBA,EAAO,iBAAiB,SAAS,MAAM,KAAK,WAAW,OAAO,IAElExS,EAAuB,MAAMqiB,IAA2B,KAAKI,EAA4B,EAAE,KAAK,IAAI;AACpG,QAAIxe,GACA6e,IAAiB;AACrB,IAAI,iBAAiB3hE,KACjB8iD,IAAS,MAAM/pE,EAAO,UAAU,SAASinB,EAAO,aAAa,EAAE,QAAQ,GAAI,GAAI,EAAE,GAAGqG,GAAS,QAAQ,KAAK,WAAW,QAAQ,QAAQ,IAAM,GAC3Is7D,IAAiB3hE,EAAO,kBAAkB,QAG1C8iD,IAAS,MAAM/pE,EAAO,UAAU,OAAO,EAAE,GAAGinB,GAAQ,QAAQ,GAAI,GAAI,EAAE,GAAGqG,GAAS,QAAQ,KAAK,WAAW,QAAQ,GAEtH,KAAK,WAAU;AACf,qBAAiBsP,KAASmtC;AACtB,MAAAjE,EAAuB,MAAMqiB,IAA2B,KAAKK,EAAwB,EAAE,KAAK,MAAM5rD,GAAOgsD,CAAc;AAE3H,SAAIvpF,IAAA0qE,EAAO,WAAW,WAAlB,QAAA1qE,EAA0B;AAC1B,YAAM,IAAI8nE,GAAiB;AAE/B,WAAOrB,EAAuB,MAAMqiB,IAA2B,KAAKM,EAA0B,EAAE,KAAK,IAAI;AAAA,EAC7G;AAAA,EACA,EAAEL,KAAyB,oBAAI,QAAO,GAAIC,KAA0C,oBAAI,QAAO,GAAIC,KAAgC,oBAAI,QAAO,GAAIH,KAA4B,oBAAI,QAAO,GAAII,KAA+B,WAAwC;AAChQ,IAAI,KAAK,SAET3iB,GAAuB,MAAMyiB,IAAyC,MAAc;AAAA,EACxF,GAAGG,KAA2B,SAAkC5rD,GAAOgsD,GAAgB;AACnF,QAAI,KAAK;AACL;AACJ,UAAMC,IAAY,CAACnzF,GAAMknC,MAAU;AAC/B,OAAIgsD,KAAkB,QAAQhsD,EAAM,kBAAkBgsD,MAClD,KAAK,MAAMlzF,GAAMknC,CAAK;AAAA,IAE9B,GACM5+B,IAAW8nE,EAAuB,MAAMqiB,IAA2B,KAAKO,EAAkC,EAAE,KAAK,MAAM9rD,CAAK;AAElI,YADAisD,EAAU,SAASjsD,CAAK,GAChBA,EAAM,MAAI;AAAA,MACd,KAAK,8BAA8B;AAC/B,cAAMgtB,IAAS5rD,EAAS,OAAO4+B,EAAM,YAAY;AACjD,YAAI,CAACgtB;AACD,gBAAM,IAAIyc,GAAY,2BAA2BzpC,EAAM,YAAY,EAAE;AAEzE,YAAIgtB,EAAO,SAAS,WAAW;AAC3B,gBAAMxoD,IAAUwoD,EAAO,QAAQhtB,EAAM,aAAa;AAClD,cAAI,CAACx7B;AACD,kBAAM,IAAIilE,GAAY,4BAA4BzpC,EAAM,aAAa,EAAE;AAE3E,cAAIx7B,EAAQ,SAAS;AACjB,kBAAM,IAAIilE,GAAY,6CAA6CjlE,EAAQ,IAAI,EAAE;AAErF,UAAAynF,EAAU,8BAA8B;AAAA,YACpC,GAAGjsD;AAAA,YACH,UAAUx7B,EAAQ;AAAA,UAC1C,CAAqB;AAAA,QACL;AACA;AAAA,MACJ;AAAA,MACA,KAAK,0CAA0C;AAC3C,cAAMwoD,IAAS5rD,EAAS,OAAO4+B,EAAM,YAAY;AACjD,YAAI,CAACgtB;AACD,gBAAM,IAAIyc,GAAY,2BAA2BzpC,EAAM,YAAY,EAAE;AAEzE,QAAIgtB,EAAO,SAAS,mBAChBi/B,EAAU,0CAA0C;AAAA,UAChD,GAAGjsD;AAAA,UACH,UAAUgtB,EAAO;AAAA,QACzC,CAAqB;AAEL;AAAA,MACJ;AAAA,MACA;AACI,QAAAi/B,EAAUjsD,EAAM,MAAMA,CAAK;AAC3B;AAAA,IAChB;AAAA,EACI,GAAG6rD,KAA6B,WAAsC;AAClE,QAAI,KAAK;AACL,YAAM,IAAIpiB,GAAY,yCAAyC;AAEnE,UAAM0W,IAAWjX,EAAuB,MAAMuiB,IAAyC,GAAG;AAC1F,QAAI,CAACtL;AACD,YAAM,IAAI1W,GAAY,0CAA0C;AAEpE,IAAAT,GAAuB,MAAMyiB,IAAyC,MAAc;AACpF,UAAMS,IAAiBC,GAAiBhM,GAAUjX,EAAuB,MAAMsiB,IAAwB,GAAG,CAAC;AAC3G,WAAAxiB,GAAuB,MAAM0iB,IAA+BQ,CAAmB,GACxEA;AAAA,EACX,GAAGJ,KAAqC,SAA4C9rD,GAAO;;AACvF,QAAImgD,IAAWjX,EAAuB,MAAMuiB,IAAyC,GAAG;AACxF,QAAI,CAACtL,GAAU;AACX,UAAIngD,EAAM,SAAS;AACf,cAAM,IAAIypC,GAAY,6EAA6EzpC,EAAM,IAAI,EAAE;AAEnH,aAAAmgD,IAAWnX,GAAuB,MAAMyiB,IAAyCzrD,EAAM,QAAa,GAC7FmgD;AAAA,IACX;AACA,YAAQngD,EAAM,MAAI;AAAA,MACd,KAAK,8BAA8B;AAC/B,QAAAmgD,EAAS,OAAO,KAAKngD,EAAM,IAAI;AAC/B;AAAA,MACJ;AAAA,MACA,KAAK,+BAA+B;AAChC,cAAMgtB,IAASmzB,EAAS,OAAOngD,EAAM,YAAY;AACjD,YAAI,CAACgtB;AACD,gBAAM,IAAIyc,GAAY,2BAA2BzpC,EAAM,YAAY,EAAE;AAEzE,cAAMjpC,IAAOi2D,EAAO,MACd51B,IAAO4I,EAAM;AACnB,QAAIjpC,MAAS,aAAaqgC,EAAK,SAAS,mBACpC41B,EAAO,QAAQ,KAAK51B,CAAI,IAEnBrgC,MAAS,eAAeqgC,EAAK,SAAS,qBACtC41B,EAAO,YACRA,EAAO,UAAU,CAAA,IAErBA,EAAO,QAAQ,KAAK51B,CAAI;AAE5B;AAAA,MACJ;AAAA,MACA,KAAK,8BAA8B;AAC/B,cAAM41B,IAASmzB,EAAS,OAAOngD,EAAM,YAAY;AACjD,YAAI,CAACgtB;AACD,gBAAM,IAAIyc,GAAY,2BAA2BzpC,EAAM,YAAY,EAAE;AAEzE,YAAIgtB,EAAO,SAAS,WAAW;AAC3B,gBAAMxoD,IAAUwoD,EAAO,QAAQhtB,EAAM,aAAa;AAClD,cAAI,CAACx7B;AACD,kBAAM,IAAIilE,GAAY,4BAA4BzpC,EAAM,aAAa,EAAE;AAE3E,cAAIx7B,EAAQ,SAAS;AACjB,kBAAM,IAAIilE,GAAY,6CAA6CjlE,EAAQ,IAAI,EAAE;AAErF,UAAAA,EAAQ,QAAQw7B,EAAM;AAAA,QAC1B;AACA;AAAA,MACJ;AAAA,MACA,KAAK,0CAA0C;AAC3C,cAAMgtB,IAASmzB,EAAS,OAAOngD,EAAM,YAAY;AACjD,YAAI,CAACgtB;AACD,gBAAM,IAAIyc,GAAY,2BAA2BzpC,EAAM,YAAY,EAAE;AAEzE,QAAIgtB,EAAO,SAAS,oBAChBA,EAAO,aAAahtB,EAAM;AAE9B;AAAA,MACJ;AAAA,MACA,KAAK,iCAAiC;AAClC,cAAMgtB,IAASmzB,EAAS,OAAOngD,EAAM,YAAY;AACjD,YAAI,CAACgtB;AACD,gBAAM,IAAIyc,GAAY,2BAA2BzpC,EAAM,YAAY,EAAE;AAEzE,YAAIgtB,EAAO,SAAS,aAAa;AAC7B,gBAAMxoD,KAAU/B,IAAAuqD,EAAO,YAAP,gBAAAvqD,EAAiBu9B,EAAM;AACvC,cAAI,CAACx7B;AACD,kBAAM,IAAIilE,GAAY,4BAA4BzpC,EAAM,aAAa,EAAE;AAE3E,cAAIx7B,EAAQ,SAAS;AACjB,kBAAM,IAAIilE,GAAY,gDAAgDjlE,EAAQ,IAAI,EAAE;AAExF,UAAAA,EAAQ,QAAQw7B,EAAM;AAAA,QAC1B;AACA;AAAA,MACJ;AAAA,MACA,KAAK,sBAAsB;AACvB,QAAAgpC,GAAuB,MAAMyiB,IAAyCzrD,EAAM,QAAa;AACzF;AAAA,MACJ;AAAA,IACZ;AACQ,WAAOmgD;AAAA,EACX,GAAG,OAAO,kBAAkB;AACxB,UAAMQ,IAAY,CAAA,GACZC,IAAY,CAAA;AAClB,QAAI3T,IAAO;AACX,gBAAK,GAAG,SAAS,CAACjtC,MAAU;AACxB,YAAMotC,IAASwT,EAAU,MAAK;AAC9B,MAAIxT,IACAA,EAAO,QAAQptC,CAAK,IAGpB2gD,EAAU,KAAK3gD,CAAK;AAAA,IAE5B,CAAC,GACD,KAAK,GAAG,OAAO,MAAM;AACjB,MAAAitC,IAAO;AACP,iBAAWG,KAAUwT;AACjB,QAAAxT,EAAO,QAAQ,MAAS;AAE5B,MAAAwT,EAAU,SAAS;AAAA,IACvB,CAAC,GACD,KAAK,GAAG,SAAS,CAACtlF,MAAQ;AACtB,MAAA2xE,IAAO;AACP,iBAAWG,KAAUwT;AACjB,QAAAxT,EAAO,OAAO9xE,CAAG;AAErB,MAAAslF,EAAU,SAAS;AAAA,IACvB,CAAC,GACD,KAAK,GAAG,SAAS,CAACtlF,MAAQ;AACtB,MAAA2xE,IAAO;AACP,iBAAWG,KAAUwT;AACjB,QAAAxT,EAAO,OAAO9xE,CAAG;AAErB,MAAAslF,EAAU,SAAS;AAAA,IACvB,CAAC,GACM;AAAA,MACH,MAAM,YACGD,EAAU,SAOR,EAAE,OADKA,EAAU,MAAK,GACN,MAAM,GAAK,IAN1B1T,IACO,EAAE,OAAO,QAAW,MAAM,GAAI,IAElC,IAAI,QAAQ,CAACpK,GAASuX,MAAWwG,EAAU,KAAK,EAAE,SAAA/d,GAAS,QAAAuX,GAAQ,CAAC,EAAE,KAAK,CAACp6C,MAAWA,IAAQ,EAAE,OAAOA,GAAO,MAAM,GAAK,IAAK,EAAE,OAAO,QAAW,MAAM,GAAI,CAAG;AAAA,MAK/K,QAAQ,aACJ,KAAK,MAAK,GACH,EAAE,OAAO,QAAW,MAAM,GAAI;AAAA,IAErD;AAAA,EACI;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAgB;AAClB,UAAM,KAAK,KAAI;AACf,UAAM5+B,IAAW8nE,EAAuB,MAAMwiB,IAA+B,GAAG;AAChF,QAAI,CAACtqF;AACD,YAAM,IAAIqoE,GAAY,iDAAiD;AAC3E,WAAOroE;AAAA,EACX;AACJ;AACA,SAAS+qF,GAAiBhM,GAAU91D,GAAQ;AACxC,SAAO2gE,GAAmB7K,GAAU91D,CAAM;AAC9C;AC/PO,MAAM+hE,WAAmBrV,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcxC,KAAKsV,GAAYtoF,IAAQ,CAAA,GAAI2sB,GAAS;AAClC,WAAO,KAAK,QAAQ,WAAW1kB,gBAAmBqgF,CAAU,gBAAiBpX,IAAa,EAAE,OAAAlxE,GAAO,GAAG2sB,EAAO,CAAE;AAAA,EACnH;AACJ;ACnBO,MAAM47D,WAAoBvV,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASzC,MAAMrxD,IAAO,CAAA,GAAIgL,GAAS;AACtB,WAAO,KAAK,QAAQ,KAAK,2BAA2B,EAAE,MAAAhL,GAAM,GAAGgL,GAAS;AAAA,EAC5E;AACJ;ACJO,MAAM67D,WAAkBxV,GAAY;AAAA,EACvC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,aAAa,IAAIyV,GAAyB,KAAK,OAAO,GAC3D,KAAK,cAAc,IAAIC,GAA2B,KAAK,OAAO;AAAA,EAClE;AAAA,EACA,OAAO/mE,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,cAAc,EAAE,MAAAhL,GAAM,GAAGgL,GAAS,QAAQhL,EAAK,UAAU,GAAK,CAAE,EAAE,YAAY,CAAC2lE,OAChG,YAAYA,KAAOA,EAAI,WAAW,cAClCH,GAAcG,CAAG,GAEdA,EACV;AAAA,EACL;AAAA,EACA,SAASgB,GAAYtoF,IAAQ,CAAA,GAAI2sB,GAAS;AACtC,WAAO,KAAK,QAAQ,IAAI1kB,gBAAmBqgF,CAAU,IAAI;AAAA,MACrD,OAAAtoF;AAAA,MACA,GAAG2sB;AAAA,MACH,SAAQ3sB,KAAA,gBAAAA,EAAO,WAAU;AAAA,IACrC,CAAS,EAAE,YAAY,CAACsnF,OACR,YAAYA,KAAOA,EAAI,WAAW,cAClCH,GAAcG,CAAG,GAEdA,EACV;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAOgB,GAAY37D,GAAS;AACxB,WAAO,KAAK,QAAQ,OAAO1kB,gBAAmBqgF,CAAU,IAAI;AAAA,MACxD,GAAG37D;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,QAAQ,SAAStxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACvE,CAAS;AAAA,EACL;AAAA,EACA,MAAMhL,GAAMgL,GAAS;AACjB,WAAO,KAAK,QAAQ,UACf,OAAOhL,GAAMgL,CAAO,EACpB,YAAY,CAACtvB,MAAamzE,GAAcnzE,GAAUskB,CAAI,CAAC;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOA,GAAMgL,GAAS;AAClB,WAAOq7D,GAAe,eAAe,KAAK,SAASrmE,GAAMgL,CAAO;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,OAAO27D,GAAY37D,GAAS;AACxB,WAAO,KAAK,QAAQ,KAAK1kB,gBAAmBqgF,CAAU,WAAW37D,CAAO;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,QAAQhL,GAAMgL,GAAS;AACnB,WAAO,KAAK,QAAQ,KAAK,sBAAsB,EAAE,MAAAhL,GAAM,GAAGgL,GAAS;AAAA,EACvE;AACJ;AACA67D,GAAU,aAAaH;AACvBG,GAAU,cAAcD;ACzFjB,MAAMI,WAAc3V,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcnC,OAAO4V,GAAUjnE,GAAMgL,GAAS;AAC5B,WAAO,KAAK,QAAQ,KAAK1kB,cAAiB2gF,CAAQ,UAAU5W,GAA4B,EAAE,MAAArwD,GAAM,GAAGgL,EAAO,GAAI,KAAK,OAAO,CAAC;AAAA,EAC/H;AACJ;AChBO,MAAMk8D,WAAgB7V,GAAY;AAAA,EACrC,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,QAAQ,IAAI8V,GAAe,KAAK,OAAO;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,OAAOnnE,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,YAAY,EAAE,MAAAhL,GAAM,GAAGgL,GAAS;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOi8D,GAAUj8D,GAAS;AACtB,WAAO,KAAK,QAAQ,KAAK1kB,cAAiB2gF,CAAQ,WAAWj8D,CAAO;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,SAASi8D,GAAUjnE,GAAMgL,GAAS;AAC9B,WAAO,KAAK,QAAQ,KAAK1kB,cAAiB2gF,CAAQ,aAAa,EAAE,MAAAjnE,GAAM,GAAGgL,EAAO,CAAE;AAAA,EACvF;AACJ;AACAk8D,GAAQ,QAAQF;ACxDT,MAAMI,KAAsB,OAAOC,MAAa;AACnD,QAAM7hE,IAAU,MAAM,QAAQ,WAAW6hE,CAAQ,GAC3CC,IAAW9hE,EAAQ,OAAO,CAAC5pB,MAAWA,EAAO,WAAW,UAAU;AACxE,MAAI0rF,EAAS,QAAQ;AACjB,eAAW1rF,KAAU0rF;AACjB,cAAQ,MAAM1rF,EAAO,MAAM;AAE/B,UAAM,IAAI,MAAM,GAAG0rF,EAAS,MAAM,2CAA2C;AAAA,EACjF;AAEA,QAAMhyF,IAAS,CAAA;AACf,aAAWsG,KAAU4pB;AACjB,IAAI5pB,EAAO,WAAW,eAClBtG,EAAO,KAAKsG,EAAO,KAAK;AAGhC,SAAOtG;AACX;ACbO,MAAMiyF,WAAoBlW,GAAY;AAAA;AAAA;AAAA;AAAA,EAIzC,OAAOmW,GAAexnE,GAAMgL,GAAS;AACjC,WAAO,KAAK,QAAQ,KAAK1kB,oBAAuBkhF,CAAa,iBAAiB;AAAA,MAC1E,MAAAxnE;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,SAASoyD,GAASz4D,GAAQqG,GAAS;AAC/B,UAAM,EAAE,iBAAAy8D,EAAe,IAAK9iE;AAC5B,WAAO,KAAK,QAAQ,IAAIre,oBAAuBmhF,CAAe,iBAAiBrK,CAAO,IAAI;AAAA,MACtF,GAAGpyD;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAOoyD,GAASz4D,GAAQqG,GAAS;AAC7B,UAAM,EAAE,iBAAAy8D,EAAe,IAAK9iE;AAC5B,WAAO,KAAK,QAAQ,KAAKre,oBAAuBmhF,CAAe,iBAAiBrK,CAAO,WAAW;AAAA,MAC9F,GAAGpyD;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,cAAc08D,GAAe1nE,GAAMgL,GAAS;AAC9C,UAAM28D,IAAQ,MAAM,KAAK,OAAOD,GAAe1nE,CAAI;AACnD,WAAO,MAAM,KAAK,KAAK0nE,GAAeC,EAAM,IAAI38D,CAAO;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAIA,UAAUoyD,GAASz4D,GAAQqG,GAAS;AAChC,UAAM,EAAE,iBAAAy8D,GAAiB,GAAGppF,EAAK,IAAKsmB;AACtC,WAAO,KAAK,QAAQ,WAAWre,oBAAuBmhF,CAAe,iBAAiBrK,CAAO,UAAW7N,IAAa,EAAE,OAAAlxE,GAAO,GAAG2sB,GAAS,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC,EAAC,CAAE;AAAA,EAC7N;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KAAKw8D,GAAepK,GAASpyD,GAAS;;AACxC,UAAMi5C,IAAUqY,GAAa;AAAA,MACzBtxD,KAAA,gBAAAA,EAAS;AAAA,MACT;AAAA,QACI,2BAA2B;AAAA,QAC3B,sCAAoCjuB,IAAAiuB,KAAA,gBAAAA,EAAS,mBAAT,gBAAAjuB,EAAyB,eAAc;AAAA,MAC3F;AAAA,IACA,CAAS;AACD,eAAa;AACT,YAAM,EAAE,MAAM4qF,GAAO,UAAAjsF,MAAa,MAAM,KAAK,SAAS0hF,GAAS,EAAE,iBAAiBoK,EAAa,GAAI;AAAA,QAC/F,GAAGx8D;AAAA,QACH,SAAAi5C;AAAA,MAChB,CAAa,EAAE,aAAY;AACf,cAAQ0jB,EAAM,QAAM;AAAA,QAChB,KAAK;AACD,cAAItG,IAAgB;AACpB,cAAIr2D,KAAA,QAAAA,EAAS;AACT,YAAAq2D,IAAgBr2D,EAAQ;AAAA,eAEvB;AACD,kBAAMs2D,IAAiB5lF,EAAS,QAAQ,IAAI,sBAAsB;AAClE,gBAAI4lF,GAAgB;AAChB,oBAAMC,IAAmB,SAASD,CAAc;AAChD,cAAK,MAAMC,CAAgB,MACvBF,IAAgBE;AAAA,YAExB;AAAA,UACJ;AACA,gBAAM1b,GAAMwb,CAAa;AACzB;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACD,iBAAOsG;AAAA,MAC3B;AAAA,IACQ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAcD,GAAe,EAAE,OAAAE,GAAO,SAAAC,IAAU,CAAA,EAAE,GAAI78D,GAAS;AACjE,QAAI48D,KAAS,QAAQA,EAAM,UAAU;AACjC,YAAM,IAAI,MAAM,4GAAgH;AAEpI,UAAME,KAAwB98D,KAAA,gBAAAA,EAAS,mBAAkB,GAEnD+8D,IAAmB,KAAK,IAAID,GAAuBF,EAAM,MAAM,GAC/DlqF,IAAS,KAAK,SACdsqF,IAAeJ,EAAM,OAAM,GAC3BK,IAAa,CAAC,GAAGJ,CAAO;AAG9B,mBAAeK,EAAalvF,GAAU;AAClC,eAASnI,KAAQmI,GAAU;AACvB,cAAMmvF,IAAU,MAAMzqF,EAAO,MAAM,OAAO,EAAE,MAAM7M,GAAM,SAAS,aAAY,GAAIm6B,CAAO;AACxF,QAAAi9D,EAAW,KAAKE,EAAQ,EAAE;AAAA,MAC9B;AAAA,IACJ;AAEA,UAAMC,IAAU,MAAML,CAAgB,EAAE,KAAKC,CAAY,EAAE,IAAIE,CAAY;AAE3E,iBAAMd,GAAoBgB,CAAO,GAC1B,MAAM,KAAK,cAAcV,GAAe;AAAA,MAC3C,UAAUO;AAAA,IACtB,CAAS;AAAA,EACL;AACJ;ACzHO,MAAM9F,WAAc9Q,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnC,OAAOmW,GAAexnE,GAAMgL,GAAS;AACjC,WAAO,KAAK,QAAQ,KAAK1kB,oBAAuBkhF,CAAa,UAAU;AAAA,MACnE,MAAAxnE;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS+2D,GAAQp9D,GAAQqG,GAAS;AAC9B,UAAM,EAAE,iBAAAy8D,EAAe,IAAK9iE;AAC5B,WAAO,KAAK,QAAQ,IAAIre,oBAAuBmhF,CAAe,UAAU1F,CAAM,IAAI;AAAA,MAC9E,GAAG/2D;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO+2D,GAAQp9D,GAAQqG,GAAS;AAC5B,UAAM,EAAE,iBAAAy8D,GAAiB,GAAGznE,EAAI,IAAK2E;AACrC,WAAO,KAAK,QAAQ,KAAKre,oBAAuBmhF,CAAe,UAAU1F,CAAM,IAAI;AAAA,MAC/E,MAAA/hE;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,KAAKw8D,GAAenpF,IAAQ,CAAA,GAAI2sB,GAAS;AACrC,WAAO,KAAK,QAAQ,WAAW1kB,oBAAuBkhF,CAAa,UAAWjY,IAAa;AAAA,MACvF,OAAAlxE;AAAA,MACA,GAAG2sB;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO+2D,GAAQp9D,GAAQqG,GAAS;AAC5B,UAAM,EAAE,iBAAAy8D,EAAe,IAAK9iE;AAC5B,WAAO,KAAK,QAAQ,OAAOre,oBAAuBmhF,CAAe,UAAU1F,CAAM,IAAI;AAAA,MACjF,GAAG/2D;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,cAAc08D,GAAe1nE,GAAMgL,GAAS;AAC9C,UAAM04D,IAAO,MAAM,KAAK,OAAOgE,GAAe1nE,GAAMgL,CAAO;AAC3D,WAAO,MAAM,KAAK,KAAK08D,GAAehE,EAAK,IAAI14D,CAAO;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KAAKw8D,GAAezF,GAAQ/2D,GAAS;;AACvC,UAAMi5C,IAAUqY,GAAa;AAAA,MACzBtxD,KAAA,gBAAAA,EAAS;AAAA,MACT;AAAA,QACI,2BAA2B;AAAA,QAC3B,sCAAoCjuB,IAAAiuB,KAAA,gBAAAA,EAAS,mBAAT,gBAAAjuB,EAAyB,eAAc;AAAA,MAC3F;AAAA,IACA,CAAS;AACD,eAAa;AACT,YAAMsrF,IAAe,MAAM,KAAK,SAAStG,GAAQ;AAAA,QAC7C,iBAAiByF;AAAA,MACjC,GAAe,EAAE,GAAGx8D,GAAS,SAAAi5C,EAAO,CAAE,EAAE,aAAY,GAClCyf,IAAO2E,EAAa;AAC1B,cAAQ3E,EAAK,QAAM;AAAA,QACf,KAAK;AACD,cAAIrC,IAAgB;AACpB,cAAIr2D,KAAA,QAAAA,EAAS;AACT,YAAAq2D,IAAgBr2D,EAAQ;AAAA,eAEvB;AACD,kBAAMs2D,IAAiB+G,EAAa,SAAS,QAAQ,IAAI,sBAAsB;AAC/E,gBAAI/G,GAAgB;AAChB,oBAAMC,IAAmB,SAASD,CAAc;AAChD,cAAK,MAAMC,CAAgB,MACvBF,IAAgBE;AAAA,YAExB;AAAA,UACJ;AACA,gBAAM1b,GAAMwb,CAAa;AACzB;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AACD,iBAAOqC;AAAA,MAC3B;AAAA,IACQ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAOgE,GAAehE,GAAM14D,GAAS;AACvC,UAAMs9D,IAAW,MAAM,KAAK,QAAQ,MAAM,OAAO,EAAE,MAAM5E,GAAM,SAAS,aAAY,GAAI14D,CAAO;AAC/F,WAAO,KAAK,OAAO08D,GAAe,EAAE,SAASY,EAAS,GAAE,GAAIt9D,CAAO;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,cAAc08D,GAAehE,GAAM14D,GAAS;AAC9C,UAAMs9D,IAAW,MAAM,KAAK,OAAOZ,GAAehE,GAAM14D,CAAO;AAC/D,WAAO,MAAM,KAAK,KAAK08D,GAAeY,EAAS,IAAIt9D,CAAO;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ+2D,GAAQp9D,GAAQqG,GAAS;AAC7B,UAAM,EAAE,iBAAAy8D,EAAe,IAAK9iE;AAC5B,WAAO,KAAK,QAAQ,WAAWre,oBAAuBmhF,CAAe,UAAU1F,CAAM,YAAazS,IAAO,EAAE,GAAGtkD,GAAS,SAASsxD,GAAa,CAAC,EAAE,eAAe,gBAAe,GAAItxD,KAAA,gBAAAA,EAAS,OAAO,CAAC,GAAG;AAAA,EAC1M;AACJ;AC/HO,MAAMu9D,WAAqBlX,GAAY;AAAA,EAC1C,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,QAAQ,IAAIgR,GAAe,KAAK,OAAO,GAC5C,KAAK,cAAc,IAAImG,GAA2B,KAAK,OAAO;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOxoE,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,kBAAkB;AAAA,MACvC,MAAAhL;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,SAASw8D,GAAex8D,GAAS;AAC7B,WAAO,KAAK,QAAQ,IAAI1kB,oBAAuBkhF,CAAa,IAAI;AAAA,MAC5D,GAAGx8D;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOw8D,GAAexnE,GAAMgL,GAAS;AACjC,WAAO,KAAK,QAAQ,KAAK1kB,oBAAuBkhF,CAAa,IAAI;AAAA,MAC7D,MAAAxnE;AAAA,MACA,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,KAAK3sB,IAAQ,CAAA,GAAI2sB,GAAS;AACtB,WAAO,KAAK,QAAQ,WAAW,kBAAmBukD,IAAa;AAAA,MAC3D,OAAAlxE;AAAA,MACA,GAAG2sB;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOw8D,GAAex8D,GAAS;AAC3B,WAAO,KAAK,QAAQ,OAAO1kB,oBAAuBkhF,CAAa,IAAI;AAAA,MAC/D,GAAGx8D;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAOw8D,GAAexnE,GAAMgL,GAAS;AACjC,WAAO,KAAK,QAAQ,WAAW1kB,oBAAuBkhF,CAAa,WAAYlY,IAAO;AAAA,MAClF,MAAAtvD;AAAA,MACA,QAAQ;AAAA,MACR,GAAGgL;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,eAAe,mBAAmBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,IACxF,CAAS;AAAA,EACL;AACJ;AACAu9D,GAAa,QAAQpG;AACrBoG,GAAa,cAAchB;ACvEpB,MAAMkB,WAAepX,GAAY;AAAA;AAAA;AAAA;AAAA,EAIpC,OAAOrxD,GAAMgL,GAAS;AAClB,WAAO,KAAK,QAAQ,KAAK,WAAWilD,GAAiC,EAAE,MAAAjwD,GAAM,GAAGgL,EAAO,GAAI,KAAK,OAAO,CAAC;AAAA,EAC5G;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS09D,GAAS19D,GAAS;AACvB,WAAO,KAAK,QAAQ,IAAI1kB,aAAgBoiF,CAAO,IAAI19D,CAAO;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAIA,KAAK3sB,IAAQ,CAAA,GAAI2sB,GAAS;AACtB,WAAO,KAAK,QAAQ,WAAW,WAAYwkD,IAAyB,EAAE,OAAAnxE,GAAO,GAAG2sB,GAAS;AAAA,EAC7F;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO09D,GAAS19D,GAAS;AACrB,WAAO,KAAK,QAAQ,OAAO1kB,aAAgBoiF,CAAO,IAAI19D,CAAO;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA,EAIA,gBAAgB09D,GAASrqF,IAAQ,CAAA,GAAI2sB,GAAS;AAC1C,WAAO,KAAK,QAAQ,IAAI1kB,aAAgBoiF,CAAO,YAAY;AAAA,MACvD,OAAArqF;AAAA,MACA,GAAG2sB;AAAA,MACH,SAASsxD,GAAa,CAAC,EAAE,QAAQ,wBAAwBtxD,KAAA,gBAAAA,EAAS,OAAO,CAAC;AAAA,MAC1E,kBAAkB;AAAA,IAC9B,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM09D,GAAS1oE,GAAMgL,GAAS;AAC1B,WAAO,KAAK,QAAQ,KAAK1kB,aAAgBoiF,CAAO,UAAUzY,GAAiC,EAAE,MAAAjwD,GAAM,GAAGgL,EAAO,GAAI,KAAK,OAAO,CAAC;AAAA,EAClI;AACJ;AC/CA,IAAI29D,IAAqBC,IAA0BC;AAK5C,MAAMC,WAAiBzX,GAAY;AAAA,EACtC,cAAc;AACV,UAAM,GAAG,SAAS,GAClBsX,GAAoB,IAAI,IAAI;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,OAAOz2F,GAAS+xE,GAAS8kB,IAAS,KAAK,QAAQ,eAAeC,IAAY,KAAK;AACjF,iBAAM,KAAK,gBAAgB92F,GAAS+xE,GAAS8kB,GAAQC,CAAS,GACvD,KAAK,MAAM92F,CAAO;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,gBAAgBA,GAAS+xE,GAAS8kB,IAAS,KAAK,QAAQ,eAAeC,IAAY,KAAK;AAC1F,QAAI,OAAO,SAAW,OAClB,OAAO,OAAO,OAAO,aAAc,cACnC,OAAO,OAAO,OAAO,UAAW;AAChC,YAAM,IAAI,MAAM,sFAAsF;AAE1G,IAAAxlB,EAAuB,MAAMmlB,IAAqB,KAAKC,EAAwB,EAAE,KAAK,MAAMG,CAAM;AAClG,UAAME,IAAa3M,GAAa,CAACrY,CAAO,CAAC,EAAE,QACrCilB,IAAkB1lB,EAAuB,MAAMmlB,IAAqB,KAAKE,EAA2B,EAAE,KAAK,MAAMI,GAAY,mBAAmB,GAChJE,IAAY3lB,EAAuB,MAAMmlB,IAAqB,KAAKE,EAA2B,EAAE,KAAK,MAAMI,GAAY,mBAAmB,GAC1IG,IAAY5lB,EAAuB,MAAMmlB,IAAqB,KAAKE,EAA2B,EAAE,KAAK,MAAMI,GAAY,YAAY,GAEnII,IAAmB,SAASF,GAAW,EAAE;AAC/C,QAAI,MAAME,CAAgB;AACtB,YAAM,IAAInkB,GAA6B,kCAAkC;AAE7E,UAAMokB,IAAa,KAAK,MAAM,KAAK,IAAG,IAAK,GAAI;AAC/C,QAAIA,IAAaD,IAAmBL;AAChC,YAAM,IAAI9jB,GAA6B,8BAA8B;AAEzE,QAAImkB,IAAmBC,IAAaN;AAChC,YAAM,IAAI9jB,GAA6B,8BAA8B;AAKzE,UAAMqkB,IAAaL,EACd,MAAM,GAAG,EACT,IAAI,CAACx3D,MAAUA,EAAK,WAAW,KAAK,IAAIA,EAAK,UAAU,CAAC,IAAIA,CAAK,GAEhE83D,IAAgBT,EAAO,WAAW,QAAQ,IAC5C,OAAO,KAAKA,EAAO,QAAQ,UAAU,EAAE,GAAG,QAAQ,IAChD,OAAO,KAAKA,GAAQ,OAAO,GAE3BU,IAAgBL,IAAY,GAAGA,CAAS,IAAID,CAAS,IAAIj3F,CAAO,KAAK,GAAGi3F,CAAS,IAAIj3F,CAAO,IAE5FmF,IAAM,MAAM,OAAO,OAAO,UAAU,OAAOmyF,GAAe,EAAE,MAAM,QAAQ,MAAM,UAAS,GAAI,IAAO,CAAC,QAAQ,CAAC;AAEpH,eAAWE,KAAaH;AACpB,UAAI;AACA,cAAMI,IAAiB,OAAO,KAAKD,GAAW,QAAQ;AAEtD,YADgB,MAAM,OAAO,OAAO,OAAO,QAAQryF,GAAKsyF,GAAgB,IAAI,YAAW,EAAG,OAAOF,CAAa,CAAC;AAE3G;AAAA,MAER,QACM;AAEF;AAAA,MACJ;AAEJ,UAAM,IAAIvkB,GAA6B,mEAAmE;AAAA,EAC9G;AACJ;AACAyjB,KAAsB,oBAAI,QAAO,GAAIC,KAA2B,SAAkCG,GAAQ;AACtG,MAAI,OAAOA,KAAW,YAAYA,EAAO,WAAW;AAChD,UAAM,IAAI,MAAM,mKAAmK;AAE3L,GAAGF,KAA8B,SAAqC5kB,GAAS7wE,GAAM;AACjF,MAAI,CAAC6wE;AACD,UAAM,IAAI,MAAM,sBAAsB;AAE1C,QAAMhuE,IAAQguE,EAAQ,IAAI7wE,CAAI;AAC9B,MAAI6C,KAAU;AACV,UAAM,IAAI,MAAM,4BAA4B7C,CAAI,EAAE;AAEtD,SAAO6C;AACX;AC9FA,IAAI2zF,IAAmB7sF,IAAI8sF,IAAiBC;AA6CrC,MAAMC,GAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBhB,YAAY,EAAE,SAAAC,IAAUtL,GAAQ,iBAAiB,GAAG,QAAAuL,IAASvL,GAAQ,gBAAgB,GAAG,cAAAwL,IAAexL,GAAQ,eAAe,KAAK,MAAM,SAAAyL,IAAUzL,GAAQ,mBAAmB,KAAK,MAAM,eAAA0L,IAAgB1L,GAAQ,uBAAuB,KAAK,MAAM,GAAGz0D,EAAI,IAAK,CAAA,GAAI;AAwB/P,QAvBA2/D,GAAkB,IAAI,IAAI,GAC1BC,GAAgB,IAAI,MAAM,MAAM,GAChC,KAAK,cAAc,IAAIQ,GAAgB,IAAI,GAC3C,KAAK,OAAO,IAAIC,GAAS,IAAI,GAC7B,KAAK,aAAa,IAAIC,GAAe,IAAI,GACzC,KAAK,QAAQ,IAAIC,GAAU,IAAI,GAC/B,KAAK,SAAS,IAAIC,GAAW,IAAI,GACjC,KAAK,QAAQ,IAAIC,GAAU,IAAI,GAC/B,KAAK,cAAc,IAAIC,GAAgB,IAAI,GAC3C,KAAK,SAAS,IAAIC,GAAW,IAAI,GACjC,KAAK,aAAa,IAAIC,GAAe,IAAI,GACzC,KAAK,UAAU,IAAIC,GAAY,IAAI,GACnC,KAAK,eAAe,IAAIC,GAAiB,IAAI,GAC7C,KAAK,WAAW,IAAIC,GAAa,IAAI,GACrC,KAAK,OAAO,IAAIC,GAAS,IAAI,GAC7B,KAAK,UAAU,IAAIC,GAAY,IAAI,GACnC,KAAK,UAAU,IAAIC,GAAY,IAAI,GACnC,KAAK,YAAY,IAAIC,GAAc,IAAI,GACvC,KAAK,WAAW,IAAIC,GAAa,IAAI,GACrC,KAAK,gBAAgB,IAAIC,GAAkB,IAAI,GAC/C,KAAK,QAAQ,IAAIC,GAAU,IAAI,GAC/B,KAAK,aAAa,IAAIC,GAAe,IAAI,GACzC,KAAK,SAAS,IAAIC,GAAW,IAAI,GAC7BxB,MAAW;AACX,YAAM,IAAIyB,GAAmB,iGAAiG;AAElI,UAAM1gE,IAAU;AAAA,MACZ,QAAAi/D;AAAA,MACA,cAAAC;AAAA,MACA,SAAAC;AAAA,MACA,eAAAC;AAAA,MACA,GAAGngE;AAAA,MACH,SAAS+/D,KAAW;AAAA,IAChC;AACQ,QAAI,CAACh/D,EAAQ,2BAA2Bg7C;AACpC,YAAM,IAAI0lB,GAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAob;AAErd,SAAK,UAAU1gE,EAAQ,SACvB,KAAK,UAAUA,EAAQ,WAAWjuB,GAAG,iBACrC,KAAK,SAASiuB,EAAQ,UAAU;AAChC,UAAM2gE,IAAkB;AAExB,SAAK,WAAWA,GAChB,KAAK,WACD3f,GAAchhD,EAAQ,UAAU,0BAA0B,IAAI,KAC1DghD,GAAc0S,GAAQ,YAAY,GAAG,6BAA6B,IAAI,KACtEiN,GACR,KAAK,eAAe3gE,EAAQ,cAC5B,KAAK,aAAaA,EAAQ,cAAc,GACxC,KAAK,QAAQA,EAAQ,SAAS4gE,GAAqB,GACnDtoB,GAAuB,MAAMumB,IAAiBgC,EAAyB,GACvE,KAAK,WAAW7gE,GAChB,KAAK,SAAS,OAAOi/D,KAAW,WAAWA,IAAS,eACpD,KAAK,eAAeC,GACpB,KAAK,UAAUC,GACf,KAAK,gBAAgBC;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAIA,YAAYp/D,GAAS;AAgBjB,WAfe,IAAI,KAAK,YAAY;AAAA,MAChC,GAAG,KAAK;AAAA,MACR,SAAS,KAAK;AAAA,MACd,YAAY,KAAK;AAAA,MACjB,SAAS,KAAK;AAAA,MACd,QAAQ,KAAK;AAAA,MACb,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,cAAc,KAAK;AAAA,MACnB,QAAQ,KAAK;AAAA,MACb,cAAc,KAAK;AAAA,MACnB,SAAS,KAAK;AAAA,MACd,eAAe,KAAK;AAAA,MACpB,GAAGA;AAAA,IACf,CAAS;AAAA,EAEL;AAAA,EACA,eAAe;AACX,WAAO,KAAK,SAAS;AAAA,EACzB;AAAA,EACA,gBAAgB,EAAE,QAAA11B,GAAQ,OAAA4mF,KAAS;AAAA,EAEnC;AAAA,EACA,MAAM,YAAYjyD,GAAM;AACpB,WAAOqyD,GAAa,CAAC,EAAE,eAAe,UAAU,KAAK,MAAM,GAAE,CAAE,CAAC;AAAA,EACpE;AAAA,EACA,eAAej+E,GAAO;AAClB,WAAOytF,GAAaztF,GAAO,EAAE,aAAa,WAAU,CAAE;AAAA,EAC1D;AAAA,EACA,eAAe;AACX,WAAO,GAAG,KAAK,YAAY,IAAI,OAAO0nE,EAAO;AAAA,EACjD;AAAA,EACA,wBAAwB;AACpB,WAAO,wBAAwBtC,GAAK,CAAE;AAAA,EAC1C;AAAA,EACA,gBAAgBl+C,GAAQp1B,GAAOm0B,GAAS2/C,GAAS;AAC7C,WAAO8nB,GAAgB,SAASxmE,GAAQp1B,GAAOm0B,GAAS2/C,CAAO;AAAA,EACnE;AAAA,EACA,MAAM,cAAc;AAChB,UAAMgmB,IAAS,KAAK,SAAS;AAC7B,QAAI,OAAOA,KAAW;AAClB,aAAO;AACX,QAAI12D;AACJ,QAAI;AACA,MAAAA,IAAQ,MAAM02D,EAAM;AAAA,IACxB,SACOr0F,GAAK;AACR,YAAIA,aAAe81F,KACT91F,IACJ,IAAI81F;AAAAA,QAAmB,+CAA+C91F,EAAI,OAAO;AAAA;AAAA,QAEvF,EAAE,OAAOA;MAAK;AAAA,IAClB;AACA,QAAI,OAAO29B,KAAU,YAAY,CAACA;AAC9B,YAAM,IAAIm4D,GAAmB,0EAA0En4D,CAAK,EAAE;AAElH,gBAAK,SAASA,GACP;AAAA,EACX;AAAA,EACA,SAASjtB,GAAMjI,GAAO2tF,GAAgB;AAClC,UAAMhC,IAAW,CAACxmB,EAAuB,MAAMomB,IAAmB,KAAKE,EAAyB,EAAE,KAAK,IAAI,KAAKkC,KAAmB,KAAK,SAClItyD,IAAM0rC,GAAc9+D,CAAI,IAC1B,IAAI,IAAIA,CAAI,IACV,IAAI,IAAI0jF,KAAWA,EAAQ,SAAS,GAAG,KAAK1jF,EAAK,WAAW,GAAG,IAAIA,EAAK,MAAM,CAAC,IAAIA,EAAK,GACxF2lF,IAAe,KAAK,aAAY;AACtC,WAAK1mB,GAAW0mB,CAAY,MACxB5tF,IAAQ,EAAE,GAAG4tF,GAAc,GAAG5tF,EAAK,IAEnC,OAAOA,KAAU,YAAYA,KAAS,CAAC,MAAM,QAAQA,CAAK,MAC1Dq7B,EAAI,SAAS,KAAK,eAAer7B,CAAK,IAEnCq7B,EAAI,SAAQ;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,eAAe1O,GAAS;AAC1B,UAAM,KAAK,YAAW;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,eAAeqkD,GAAS,EAAE,KAAA31C,GAAK,SAAA1O,EAAO,GAAI;AAAA,EAAE;AAAA,EAClD,IAAI1kB,GAAM2jB,GAAM;AACZ,WAAO,KAAK,cAAc,OAAO3jB,GAAM2jB,CAAI;AAAA,EAC/C;AAAA,EACA,KAAK3jB,GAAM2jB,GAAM;AACb,WAAO,KAAK,cAAc,QAAQ3jB,GAAM2jB,CAAI;AAAA,EAChD;AAAA,EACA,MAAM3jB,GAAM2jB,GAAM;AACd,WAAO,KAAK,cAAc,SAAS3jB,GAAM2jB,CAAI;AAAA,EACjD;AAAA,EACA,IAAI3jB,GAAM2jB,GAAM;AACZ,WAAO,KAAK,cAAc,OAAO3jB,GAAM2jB,CAAI;AAAA,EAC/C;AAAA,EACA,OAAO3jB,GAAM2jB,GAAM;AACf,WAAO,KAAK,cAAc,UAAU3jB,GAAM2jB,CAAI;AAAA,EAClD;AAAA,EACA,cAAcq8B,GAAQhgD,GAAM2jB,GAAM;AAC9B,WAAO,KAAK,QAAQ,QAAQ,QAAQA,CAAI,EAAE,KAAK,CAACA,OACrC,EAAE,QAAAq8B,GAAQ,MAAAhgD,GAAM,GAAG2jB,EAAI,EACjC,CAAC;AAAA,EACN;AAAA,EACA,QAAQe,GAASkhE,IAAmB,MAAM;AACtC,WAAO,IAAIvd,GAAW,MAAM,KAAK,YAAY3jD,GAASkhE,GAAkB,MAAS,CAAC;AAAA,EACtF;AAAA,EACA,MAAM,YAAYC,GAAcC,GAAkBhe,GAAqB;;AACnE,UAAMpjD,IAAU,MAAMmhE,GAChBE,IAAarhE,EAAQ,cAAc,KAAK;AAC9C,IAAIohE,KAAoB,SACpBA,IAAmBC,IAEvB,MAAM,KAAK,eAAerhE,CAAO;AACjC,UAAM,EAAE,KAAAshE,GAAK,KAAA5yD,GAAK,SAAA6yD,EAAO,IAAK,MAAM,KAAK,aAAavhE,GAAS;AAAA,MAC3D,YAAYqhE,IAAaD;AAAA,IACrC,CAAS;AACD,UAAM,KAAK,eAAeE,GAAK,EAAE,KAAA5yD,GAAK,SAAA1O,EAAO,CAAE;AAE/C,UAAMmjD,IAAe,UAAW,KAAK,OAAM,KAAM,KAAK,MAAO,GAAG,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,GACtFqe,IAAcpe,MAAwB,SAAY,KAAK,cAAcA,CAAmB,IACxFC,IAAY,KAAK,IAAG;AAQ1B,QAPAlC,GAAU,IAAI,EAAE,MAAM,IAAIgC,CAAY,qBAAqBtB,GAAqB;AAAA,MAC5E,qBAAAuB;AAAA,MACA,QAAQpjD,EAAQ;AAAA,MAChB,KAAA0O;AAAA,MACA,SAAA1O;AAAA,MACA,SAASshE,EAAI;AAAA,IACzB,CAAS,CAAC,IACEvvF,IAAAiuB,EAAQ,WAAR,QAAAjuB,EAAgB;AAChB,YAAM,IAAI0vF,GAAwB;AAEtC,UAAMnlB,IAAa,IAAI,gBAAe,GAChC5rE,IAAW,MAAM,KAAK,iBAAiBg+B,GAAK4yD,GAAKC,GAASjlB,CAAU,EAAE,MAAMxD,EAAW,GACvF4oB,IAAc,KAAK,IAAG;AAC5B,QAAIhxF,aAAoB,WAAW,OAAO;AACtC,YAAMixF,IAAe,aAAaP,CAAgB;AAClD,WAAIlpF,IAAA8nB,EAAQ,WAAR,QAAA9nB,EAAgB;AAChB,cAAM,IAAIupF,GAAwB;AAMtC,YAAMG,IAAY/oB,GAAanoE,CAAQ,KACnC,eAAe,KAAK,OAAOA,CAAQ,KAAK,WAAWA,IAAW,OAAOA,EAAS,KAAK,IAAI,GAAG;AAC9F,UAAI0wF;AACA,eAAAjgB,GAAU,IAAI,EAAE,KAAK,IAAIgC,CAAY,gBAAgBye,IAAY,cAAc,QAAQ,MAAMD,CAAY,EAAE,GAC3GxgB,GAAU,IAAI,EAAE,MAAM,IAAIgC,CAAY,gBAAgBye,IAAY,cAAc,QAAQ,KAAKD,CAAY,KAAK9f,GAAqB;AAAA,UAC/H,qBAAAuB;AAAA,UACA,KAAA10C;AAAA,UACA,YAAYgzD,IAAcre;AAAA,UAC1B,SAAS3yE,EAAS;AAAA,QACtC,CAAiB,CAAC,GACK,KAAK,aAAasvB,GAASohE,GAAkBhe,KAAuBD,CAAY;AAS3F,YAPAhC,GAAU,IAAI,EAAE,KAAK,IAAIgC,CAAY,gBAAgBye,IAAY,cAAc,QAAQ,gCAAgC,GACvHzgB,GAAU,IAAI,EAAE,MAAM,IAAIgC,CAAY,gBAAgBye,IAAY,cAAc,QAAQ,kCAAkC/f,GAAqB;AAAA,QAC3I,qBAAAuB;AAAA,QACA,KAAA10C;AAAA,QACA,YAAYgzD,IAAcre;AAAA,QAC1B,SAAS3yE,EAAS;AAAA,MAClC,CAAa,CAAC,GACEkxF,IACM,IAAIC,GAAgC,IAExC,IAAIC,GAA0B,EAAE,OAAOpxF,EAAQ,CAAE;AAAA,IAC3D;AACA,UAAMqxF,IAAiB,CAAC,GAAGrxF,EAAS,QAAQ,QAAO,CAAE,EAChD,OAAO,CAAC,CAACtI,CAAI,MAAMA,MAAS,cAAc,EAC1C,IAAI,CAAC,CAACA,GAAM6C,CAAK,MAAM,OAAO7C,IAAO,OAAO,KAAK,UAAU6C,CAAK,CAAC,EACjE,KAAK,EAAE,GACN+2F,IAAe,IAAI7e,CAAY,GAAGqe,CAAW,GAAGO,CAAc,KAAKT,EAAI,MAAM,IAAI5yD,CAAG,IAAIh+B,EAAS,KAAK,cAAc,QAAQ,gBAAgBA,EAAS,MAAM,OAAOgxF,IAAcre,CAAS;AAC/L,QAAI,CAAC3yE,EAAS,IAAI;AACd,YAAMuxF,IAAc,MAAM,KAAK,YAAYvxF,CAAQ;AACnD,UAAI0wF,KAAoBa,GAAa;AACjC,cAAMN,IAAe,aAAaP,CAAgB;AAElD,qBAAMc,GAA2BxxF,EAAS,IAAI,GAC9CywE,GAAU,IAAI,EAAE,KAAK,GAAG6gB,CAAY,MAAML,CAAY,EAAE,GACxDxgB,GAAU,IAAI,EAAE,MAAM,IAAIgC,CAAY,qBAAqBwe,CAAY,KAAK9f,GAAqB;AAAA,UAC7F,qBAAAuB;AAAA,UACA,KAAK1yE,EAAS;AAAA,UACd,QAAQA,EAAS;AAAA,UACjB,SAASA,EAAS;AAAA,UAClB,YAAYgxF,IAAcre;AAAA,QAC9C,CAAiB,CAAC,GACK,KAAK,aAAarjD,GAASohE,GAAkBhe,KAAuBD,GAAczyE,EAAS,OAAO;AAAA,MAC7G;AACA,YAAMixF,IAAeM,IAAc,gCAAgC;AACnE,MAAA9gB,GAAU,IAAI,EAAE,KAAK,GAAG6gB,CAAY,MAAML,CAAY,EAAE;AACxD,YAAMQ,IAAU,MAAMzxF,EAAS,OAAO,MAAM,CAAC9F,MAAQkuE,GAAYluE,CAAG,EAAE,OAAO,GACvEw3F,IAAUxnB,GAASunB,CAAO,GAC1BE,IAAaD,IAAU,SAAYD;AACzC,YAAAhhB,GAAU,IAAI,EAAE,MAAM,IAAIgC,CAAY,qBAAqBwe,CAAY,KAAK9f,GAAqB;AAAA,QAC7F,qBAAAuB;AAAA,QACA,KAAK1yE,EAAS;AAAA,QACd,QAAQA,EAAS;AAAA,QACjB,SAASA,EAAS;AAAA,QAClB,SAAS2xF;AAAA,QACT,YAAY,KAAK,IAAG,IAAKhf;AAAA,MACzC,CAAa,CAAC,GACU,KAAK,gBAAgB3yE,EAAS,QAAQ0xF,GAASC,GAAY3xF,EAAS,OAAO;AAAA,IAE3F;AACA,WAAAywE,GAAU,IAAI,EAAE,KAAK6gB,CAAY,GACjC7gB,GAAU,IAAI,EAAE,MAAM,IAAIgC,CAAY,oBAAoBtB,GAAqB;AAAA,MAC3E,qBAAAuB;AAAA,MACA,KAAK1yE,EAAS;AAAA,MACd,QAAQA,EAAS;AAAA,MACjB,SAASA,EAAS;AAAA,MAClB,YAAYgxF,IAAcre;AAAA,IACtC,CAAS,CAAC,GACK,EAAE,UAAA3yE,GAAU,SAAAsvB,GAAS,YAAAs8C,GAAY,cAAA6G,GAAc,qBAAAC,GAAqB,WAAAC,EAAS;AAAA,EACxF;AAAA,EACA,WAAW/nE,GAAMgpE,GAAMrlD,GAAM;AACzB,WAAO,KAAK,eAAeqlD,GAAM,EAAE,QAAQ,OAAO,MAAAhpE,GAAM,GAAG2jB,GAAM;AAAA,EACrE;AAAA,EACA,eAAeqlD,GAAMtkD,GAAS;AAC1B,UAAMqkD,IAAU,KAAK,YAAYrkD,GAAS,MAAM,MAAS;AACzD,WAAO,IAAIsiE,GAAuB,MAAMje,GAASC,CAAI;AAAA,EACzD;AAAA,EACA,MAAM,iBAAiB51C,GAAKvnC,GAAM2zE,GAAIwB,GAAY;AAC9C,UAAM,EAAE,QAAA0O,GAAQ,QAAA1vB,GAAQ,GAAGt7B,EAAO,IAAK74B,KAAQ,CAAA;AAC/C,IAAI6jF,KACAA,EAAO,iBAAiB,SAAS,MAAM1O,EAAW,MAAK,CAAE;AAC7D,UAAMilB,IAAU,WAAW,MAAMjlB,EAAW,MAAK,GAAIxB,CAAE,GACjDynB,IAAkB,WAAW,kBAAkBviE,EAAQ,gBAAgB,WAAW,kBACnF,OAAOA,EAAQ,QAAS,YAAYA,EAAQ,SAAS,QAAQ,OAAO,iBAAiBA,EAAQ,MAC5FwiE,IAAe;AAAA,MACjB,QAAQlmB,EAAW;AAAA,MACnB,GAAIimB,IAAiB,EAAE,QAAQ,OAAM,IAAK,CAAA;AAAA,MAC1C,QAAQ;AAAA,MACR,GAAGviE;AAAA,IACf;AACQ,IAAIs7B,MAGAknC,EAAa,SAASlnC,EAAO,YAAW;AAE5C,QAAI;AAEA,aAAO,MAAM,KAAK,MAAM,KAAK,QAAW5sB,GAAK8zD,CAAY;AAAA,IAC7D,UACR;AACY,mBAAajB,CAAO;AAAA,IACxB;AAAA,EACJ;AAAA,EACA,MAAM,YAAY7wF,GAAU;AAExB,UAAM+xF,IAAoB/xF,EAAS,QAAQ,IAAI,gBAAgB;AAE/D,WAAI+xF,MAAsB,SACf,KACPA,MAAsB,UACf,KAEP/xF,EAAS,WAAW,OAGpBA,EAAS,WAAW,OAGpBA,EAAS,WAAW,OAGpBA,EAAS,UAAU;AAAA,EAG3B;AAAA,EACA,MAAM,aAAasvB,GAASohE,GAAkBje,GAAcuf,GAAiB;AACzE,QAAIC;AAEJ,UAAMC,IAAyBF,KAAA,gBAAAA,EAAiB,IAAI;AACpD,QAAIE,GAAwB;AACxB,YAAMC,IAAY,WAAWD,CAAsB;AACnD,MAAK,OAAO,MAAMC,CAAS,MACvBF,IAAgBE;AAAA,IAExB;AAEA,UAAMC,IAAmBJ,KAAA,gBAAAA,EAAiB,IAAI;AAC9C,QAAII,KAAoB,CAACH,GAAe;AACpC,YAAMI,IAAiB,WAAWD,CAAgB;AAClD,MAAK,OAAO,MAAMC,CAAc,IAI5BJ,IAAgB,KAAK,MAAMG,CAAgB,IAAI,KAAK,IAAG,IAHvDH,IAAgBI,IAAiB;AAAA,IAKzC;AAGA,QAAI,EAAEJ,KAAiB,KAAKA,KAAiBA,IAAgB,KAAK,MAAO;AACrE,YAAMtB,IAAarhE,EAAQ,cAAc,KAAK;AAC9C,MAAA2iE,IAAgB,KAAK,mCAAmCvB,GAAkBC,CAAU;AAAA,IACxF;AACA,iBAAMxmB,GAAM8nB,CAAa,GAClB,KAAK,YAAY3iE,GAASohE,IAAmB,GAAGje,CAAY;AAAA,EACvE;AAAA,EACA,mCAAmCie,GAAkBC,GAAY;AAG7D,UAAM2B,IAAa3B,IAAaD,GAE1B6B,IAAe,KAAK,IAAI,MAAoB,KAAK,IAAI,GAAGD,CAAU,GAAG,CAAa,GAElFE,IAAS,IAAI,KAAK,OAAM,IAAK;AACnC,WAAOD,IAAeC,IAAS;AAAA,EACnC;AAAA,EACA,MAAM,aAAaC,GAAc,EAAE,YAAAC,IAAa,EAAC,IAAK,CAAA,GAAI;AACtD,UAAMpjE,IAAU,EAAE,GAAGmjE,EAAY,GAC3B,EAAE,QAAA7nC,GAAQ,MAAAhgD,GAAM,OAAAjI,GAAO,gBAAA2tF,EAAc,IAAKhhE,GAC1C0O,IAAM,KAAK,SAASpzB,GAAMjI,GAAO2tF,CAAc;AACrD,IAAI,aAAahhE,KACb26C,GAAwB,WAAW36C,EAAQ,OAAO,GACtDA,EAAQ,UAAUA,EAAQ,WAAW,KAAK;AAC1C,UAAM,EAAE,aAAAqjE,GAAa,MAAAruE,EAAI,IAAK,KAAK,UAAU,EAAE,SAAAgL,GAAS,GAClDsjE,IAAa,MAAM,KAAK,aAAa,EAAE,SAASH,GAAc,QAAA7nC,GAAQ,aAAA+nC,GAAa,YAAAD,GAAY;AAWrG,WAAO,EAAE,KAVG;AAAA,MACR,QAAA9nC;AAAA,MACA,SAASgoC;AAAA,MACT,GAAItjE,EAAQ,UAAU,EAAE,QAAQA,EAAQ,OAAM;AAAA,MAC9C,GAAI,WAAW,kBACXhL,aAAgB,WAAW,kBAAkB,EAAE,QAAQ,OAAM;AAAA,MACjE,GAAIA,KAAQ,EAAE,MAAAA;MACd,GAAI,KAAK,gBAAgB;MACzB,GAAIgL,EAAQ,gBAAgB;IACxC,GACsB,KAAA0O,GAAK,SAAS1O,EAAQ,QAAO;AAAA,EAC/C;AAAA,EACA,MAAM,aAAa,EAAE,SAAAA,GAAS,QAAAs7B,GAAQ,aAAA+nC,GAAa,YAAAD,EAAU,GAAK;AAC9D,QAAIG,IAAqB,CAAA;AACzB,IAAI,KAAK,qBAAqBjoC,MAAW,UAChCt7B,EAAQ,mBACTA,EAAQ,iBAAiB,KAAK,sBAAqB,IACvDujE,EAAmB,KAAK,iBAAiB,IAAIvjE,EAAQ;AAEzD,UAAMi5C,IAAUqY,GAAa;AAAA,MACzBiS;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,cAAc,KAAK,aAAY;AAAA,QAC/B,2BAA2B,OAAOH,CAAU;AAAA,QAC5C,GAAIpjE,EAAQ,UAAU,EAAE,uBAAuB,OAAO,KAAK,MAAMA,EAAQ,UAAU,GAAI,CAAC,EAAC,IAAK,CAAA;AAAA,QAC9F,GAAG+7C,GAAkB;AAAA,QACrB,uBAAuB,KAAK;AAAA,QAC5B,kBAAkB,KAAK;AAAA,MACvC;AAAA,MACY,MAAM,KAAK,YAAY/7C,CAAO;AAAA,MAC9B,KAAK,SAAS;AAAA,MACdqjE;AAAA,MACArjE,EAAQ;AAAA,IACpB,CAAS;AACD,gBAAK,gBAAgBi5C,CAAO,GACrBA,EAAQ;AAAA,EACnB;AAAA,EACA,UAAU,EAAE,SAAS,EAAE,MAAAjkD,GAAM,SAASwuE,EAAU,KAAM;AAClD,QAAI,CAACxuE;AACD,aAAO,EAAE,aAAa,QAAW,MAAM,OAAS;AAEpD,UAAMikD,IAAUqY,GAAa,CAACkS,CAAU,CAAC;AACzC;AAAA;AAAA,MAEA,YAAY,OAAOxuE,CAAI,KACnBA,aAAgB,eAChBA,aAAgB,YACf,OAAOA,KAAS;AAAA,MAEbikD,EAAQ,OAAO,IAAI,cAAc;AAAA,MAEpC,WAAW,QAAQjkD,aAAgB,WAAW;AAAA,MAE/CA,aAAgB;AAAA,MAEhBA,aAAgB;AAAA,MAEf,WAAW,kBAAkBA,aAAgB,WAAW,iBAClD,EAAE,aAAa,QAAW,MAAMA,EAAI,IAEtC,OAAOA,KAAS,aACpB,OAAO,iBAAiBA,KACpB,OAAO,YAAYA,KAAQ,UAAUA,KAAQ,OAAOA,EAAK,QAAS,cAChE,EAAE,aAAa,QAAW,MAAMyuE,GAAyBzuE,CAAI,EAAC,IAG9DwjD,EAAuB,MAAMqmB,IAAiB,GAAG,EAAE,KAAK,MAAM,EAAE,MAAA7pE,GAAM,SAAAikD,GAAS;AAAA;AAAA,EAE9F;AACJ;AACAlnE,KAAKgtF,IAAQF,KAAkB,oBAAI,QAAO,GAAID,KAAoB,oBAAI,QAAO,GAAIE,KAA4B,WAAqC;AAC9I,SAAO,KAAK,YAAY;AAC5B;AACAC,GAAO,SAAShtF;AAChBgtF,GAAO,kBAAkB;AACzBA,GAAO,cAAc2B;AACrB3B,GAAO,WAAWgC;AAClBhC,GAAO,qBAAqB+C;AAC5B/C,GAAO,4BAA4B8C;AACnC9C,GAAO,oBAAoB0C;AAC3B1C,GAAO,gBAAgB2E;AACvB3E,GAAO,gBAAgB4E;AACvB5E,GAAO,iBAAiB6E;AACxB7E,GAAO,kBAAkB8E;AACzB9E,GAAO,sBAAsB+E;AAC7B/E,GAAO,sBAAsBgF;AAC7BhF,GAAO,wBAAwBiF;AAC/BjF,GAAO,2BAA2BkF;AAClClF,GAAO,+BAA+BmF;AACtCnF,GAAO,SAASoF;AAChBpF,GAAO,cAAcnO;AACrBmO,GAAO,OAAOjO;AACdiO,GAAO,aAAanH;AACpBmH,GAAO,QAAQ5H;AACf4H,GAAO,SAASjF;AAChBiF,GAAO,QAAQhN;AACfgN,GAAO,cAAc/E;AACrB+E,GAAO,SAAShF;AAChBgF,GAAO,aAAavF;AACpBuF,GAAO,UAAUjG;AACjBiG,GAAO,eAAexB;AACtBwB,GAAO,WAAWjB;AAClBiB,GAAO,OAAOpI;AACdoI,GAAO,UAAU5M;AACjB4M,GAAO,UAAUqF;AACjBrF,GAAO,YAAYlD;AACnBkD,GAAO,WAAWrM;AAClBqM,GAAO,gBAAgBtH;AACvBsH,GAAO,QAAQzG;AACfyG,GAAO,aAAa3H;AACpB2H,GAAO,SAAStB;ACxWM,IAAI,IAAI,8DAA8D;AChM5F,IAAI4G;AAAA,CACH,SAAUA,GAAY;AAEnB,EAAAA,EAAW,SAAY,UAEvBA,EAAW,SAAY,UAEvBA,EAAW,UAAa,WAExBA,EAAW,UAAa,WAExBA,EAAW,QAAW,SAEtBA,EAAW,SAAY;AAC3B,GAAGA,OAAeA,KAAa,CAAA,EAAG;AAElC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBA,IAAIC;AAAA,CACH,SAAUA,GAAwB;AAC/B,EAAAA,EAAuB,uBAA0B,wBACjDA,EAAuB,SAAY;AACvC,GAAGA,OAA2BA,KAAyB,CAAA,EAAG;AAK1D,IAAIC;AAAA,CACH,SAAUA,GAAS;AAIhB,EAAAA,EAAQ,sBAAyB,uBAIjCA,EAAQ,aAAgB,cAKxBA,EAAQ,iBAAoB,kBAK5BA,EAAQ,4BAA+B;AAC3C,GAAGA,OAAYA,KAAU,CAAA,EAAG;AAE5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBA,MAAMC,KAAiB,CAAC,QAAQ,SAAS,YAAY,QAAQ;AAK7D,IAAIC;AAAA,CACH,SAAUA,GAAc;AACrB,EAAAA,EAAa,4BAA+B,6BAC5CA,EAAa,4BAA+B,6BAC5CA,EAAa,kCAAqC,mCAClDA,EAAa,2BAA8B,4BAC3CA,EAAa,kCAAqC,mCAClDA,EAAa,gCAAmC;AACpD,GAAGA,OAAiBA,KAAe,CAAA,EAAG;AAKtC,IAAIC;AAAA,CACH,SAAUA,GAAoB;AAE3B,EAAAA,EAAmB,mCAAsC,oCAEzDA,EAAmB,sBAAyB,uBAE5CA,EAAmB,yBAA4B,0BAE/CA,EAAmB,kBAAqB,mBAExCA,EAAmB,aAAgB;AACvC,GAAGA,OAAuBA,KAAqB,CAAA,EAAG;AAKlD,IAAIC;AAAA,CACH,SAAUA,GAAiB;AAExB,EAAAA,EAAgB,+BAAkC,gCAElDA,EAAgB,aAAgB,cAEhCA,EAAgB,MAAS,OAEzBA,EAAgB,SAAY,UAE5BA,EAAgB,OAAU;AAC9B,GAAGA,OAAoBA,KAAkB,CAAA,EAAG;AAK5C,IAAIC;AAAA,CACH,SAAUA,GAAa;AAEpB,EAAAA,EAAY,6BAAgC,8BAE5CA,EAAY,SAAY,UAExBA,EAAY,QAAW;AAC3B,GAAGA,OAAgBA,KAAc,CAAA,EAAG;AAKpC,IAAIC;AAAA,CACH,SAAUA,GAAc;AAErB,EAAAA,EAAa,4BAA+B,6BAE5CA,EAAa,OAAU,QAEvBA,EAAa,aAAgB,cAE7BA,EAAa,SAAY,UAEzBA,EAAa,aAAgB,cAE7BA,EAAa,WAAc,YAE3BA,EAAa,YAAe,aAE5BA,EAAa,qBAAwB,sBAErCA,EAAa,OAAU,QAEvBA,EAAa,0BAA6B,2BAE1CA,EAAa,QAAW;AAC5B,GAAGA,OAAiBA,KAAe,CAAA,EAAG;AAKtC,IAAIC;AAAA,CACH,SAAUA,GAAU;AACjB,EAAAA,EAAS,wBAA2B,yBACpCA,EAAS,kBAAqB,mBAC9BA,EAAS,qBAAwB,sBACjCA,EAAS,sBAAyB,uBAClCA,EAAS,iBAAoB,kBAC7BA,EAAS,aAAgB;AAC7B,GAAGA,OAAaA,KAAW,CAAA,EAAG;AAI9B,IAAIC;AAAA,CACH,SAAUA,GAAqB;AAE5B,EAAAA,EAAoB,mBAAsB,oBAG1CA,EAAoB,OAAU,QAK9BA,EAAoB,MAAS,OAG7BA,EAAoB,OAAU;AAClC,GAAGA,OAAwBA,KAAsB,CAAA,EAAG;AAKpD,IAAIC;AAAA,CACH,SAAUA,GAAsB;AAE7B,EAAAA,EAAqB,mBAAsB,oBAE3CA,EAAqB,eAAkB;AAC3C,GAAGA,OAAyBA,KAAuB,CAAA,EAAG;AAEtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBA,MAAMC,WAAgC,MAAM;AAAA,EACxC,YAAY3rE,GAAS;AACjB,UAAM,+BAA+BA,CAAO,EAAE;AAAA,EAClD;AACJ;AAMA,MAAM4rE,WAAwCD,GAAwB;AAAA,EAClE,YAAY3rE,GAAS5oB,GAAU;AAC3B,UAAM4oB,CAAO,GACb,KAAK,WAAW5oB;AAAA,EACpB;AACJ;AAMA,MAAMy0F,WAAqCF,GAAwB;AAAA,EAC/D,YAAY3rE,GAASiB,GAAQ6qE,GAAYC,GAAc;AACnD,UAAM/rE,CAAO,GACb,KAAK,SAASiB,GACd,KAAK,aAAa6qE,GAClB,KAAK,eAAeC;AAAA,EACxB;AACJ;AAKA,MAAMC,WAA4CL,GAAwB;AAC1E;AAMA,MAAMM,WAAqCN,GAAwB;AACnE;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA,MAAMO,KAAmB,6CACnBC,KAAsB,UAKtBC,KAAkB,UAClBC,KAAqB;AAC3B,IAAIC;AAAA,CACH,SAAUA,GAAM;AACb,EAAAA,EAAK,mBAAsB,mBAC3BA,EAAK,0BAA6B,yBAClCA,EAAK,eAAkB,eACvBA,EAAK,gBAAmB,gBACxBA,EAAK,uBAA0B;AACnC,GAAGA,OAASA,KAAO,CAAA,EAAG;AACtB,MAAMC,GAAW;AAAA,EACb,YAAYzV,GAAO0V,GAAM7G,GAAQxiB,GAAQspB,GAAgB;AACrD,SAAK,QAAQ3V,GACb,KAAK,OAAO0V,GACZ,KAAK,SAAS7G,GACd,KAAK,SAASxiB,GACd,KAAK,iBAAiBspB;AAAA,EAC1B;AAAA,EACA,WAAW;AACP,QAAIh0F,GAAImG;AACR,UAAM8tF,MAAej0F,IAAK,KAAK,oBAAoB,QAAQA,MAAO,SAAS,SAASA,EAAG,eAAe0zF;AAEtG,QAAI/2D,IAAM,KADQx2B,IAAK,KAAK,oBAAoB,QAAQA,MAAO,SAAS,SAASA,EAAG,YAAYstF,EAC5E,IAAIQ,CAAU,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI;AAC7D,WAAI,KAAK,WACLt3D,KAAO,aAEJA;AAAA,EACX;AACJ;AAIA,SAASu3D,GAAiBF,GAAgB;AACtC,QAAMG,IAAgB,CAAA;AACtB,SAAIH,KAAmB,QAA6CA,EAAe,aAC/EG,EAAc,KAAKH,EAAe,SAAS,GAE/CG,EAAc,KAAK,GAAGP,EAAkB,IAAID,EAAe,EAAE,GACtDQ,EAAc,KAAK,GAAG;AACjC;AACA,eAAeC,GAAWz3D,GAAK;AAC3B,MAAI38B;AACJ,QAAMknE,IAAU,IAAI,QAAO;AAC3B,EAAAA,EAAQ,OAAO,gBAAgB,kBAAkB,GACjDA,EAAQ,OAAO,qBAAqBgtB,GAAiBv3D,EAAI,cAAc,CAAC,GACxEuqC,EAAQ,OAAO,kBAAkBvqC,EAAI,MAAM;AAC3C,MAAI03D,KAAiBr0F,IAAK28B,EAAI,oBAAoB,QAAQ38B,MAAO,SAAS,SAASA,EAAG;AACtF,MAAIq0F,GAAe;AACf,QAAI,EAAEA,aAAyB;AAC3B,UAAI;AACA,QAAAA,IAAgB,IAAI,QAAQA,CAAa;AAAA,MAC7C,SACOxiG,GAAG;AACN,cAAM,IAAI0hG,GAAoC,yCAAyC,KAAK,UAAUc,CAAa,CAAC,gBAAgBxiG,EAAE,OAAO,EAAE;AAAA,MACnJ;AAEJ,eAAW,CAACyiG,GAAYC,CAAW,KAAKF,EAAc,QAAO,GAAI;AAC7D,UAAIC,MAAe;AACf,cAAM,IAAIf,GAAoC,mCAAmCe,CAAU,EAAE;AAE5F,UAAIA,MAAe;AACpB,cAAM,IAAIf,GAAoC,eAAee,CAAU,4CAA4C;AAEvH,MAAAptB,EAAQ,OAAOotB,GAAYC,CAAW;AAAA,IAC1C;AAAA,EACJ;AACA,SAAOrtB;AACX;AACA,eAAestB,GAAsBnW,GAAO0V,GAAM7G,GAAQxiB,GAAQznD,GAAM+wE,GAAgB;AACpF,QAAMr3D,IAAM,IAAIm3D,GAAWzV,GAAO0V,GAAM7G,GAAQxiB,GAAQspB,CAAc;AACtE,SAAO;AAAA,IACH,KAAKr3D,EAAI,SAAQ;AAAA,IACjB,cAAc,OAAO,OAAO,OAAO,OAAO,CAAA,GAAI83D,GAAkBT,CAAc,CAAC,GAAG,EAAE,QAAQ,QAAQ,SAAS,MAAMI,GAAWz3D,CAAG,GAAG,MAAA1Z,GAAM;AAAA,EAClJ;AACA;AACA,eAAeyxE,GAAiBrW,GAAO0V,GAAM7G,GAAQxiB,GAAQznD,GAAM+wE,IAAiB,CAAA,GAEpFW,IAAU,OAAO;AACb,QAAM,EAAE,KAAAh4D,GAAK,cAAA8zD,EAAY,IAAK,MAAM+D,GAAsBnW,GAAO0V,GAAM7G,GAAQxiB,GAAQznD,GAAM+wE,CAAc;AAC3G,SAAOY,GAAYj4D,GAAK8zD,GAAckE,CAAO;AACjD;AACA,eAAeC,GAAYj4D,GAAK8zD,GAAckE,IAAU,OAAO;AAC3D,MAAIh2F;AACJ,MAAI;AACA,IAAAA,IAAW,MAAMg2F,EAAQh4D,GAAK8zD,CAAY;AAAA,EAC9C,SACO5+F,GAAG;AACN,IAAAgjG,GAAoBhjG,GAAG8qC,CAAG;AAAA,EAC9B;AACA,SAAKh+B,EAAS,MACV,MAAMm2F,GAAoBn2F,GAAUg+B,CAAG,GAEpCh+B;AACX;AACA,SAASk2F,GAAoBhjG,GAAG8qC,GAAK;AACjC,MAAI9jC,IAAMhH;AACV,QAAIgH,EAAI,SAAS,gBACbA,IAAM,IAAI26F,GAA6B,iCAAiC72D,EAAI,SAAQ,CAAE,KAAK9qC,EAAE,OAAO,EAAE,GACtGgH,EAAI,QAAQhH,EAAE,SAEPA,aAAauhG,MACpBvhG,aAAa0hG,OACb16F,IAAM,IAAIq6F,GAAwB,uBAAuBv2D,EAAI,SAAQ,CAAE,KAAK9qC,EAAE,OAAO,EAAE,GACvFgH,EAAI,QAAQhH,EAAE,QAEZgH;AACV;AACA,eAAei8F,GAAoBn2F,GAAUg+B,GAAK;AAC9C,MAAIpV,IAAU,IACV+rE;AACJ,MAAI;AACA,UAAM7hB,IAAO,MAAM9yE,EAAS,KAAI;AAChC,IAAA4oB,IAAUkqD,EAAK,MAAM,SACjBA,EAAK,MAAM,YACXlqD,KAAW,IAAI,KAAK,UAAUkqD,EAAK,MAAM,OAAO,CAAC,IACjD6hB,IAAe7hB,EAAK,MAAM;AAAA,EAElC,QACU;AAAA,EAEV;AACA,QAAM,IAAI2hB,GAA6B,uBAAuBz2D,EAAI,UAAU,MAAMh+B,EAAS,MAAM,IAAIA,EAAS,UAAU,KAAK4oB,CAAO,IAAI5oB,EAAS,QAAQA,EAAS,YAAY20F,CAAY;AAC9L;AAMA,SAASmB,GAAkBT,GAAgB;AACvC,QAAMvD,IAAe,CAAA;AACrB,OAAKuD,KAAmB,OAAoC,SAASA,EAAe,YAAY,WAAcA,KAAmB,OAAoC,SAASA,EAAe,YAAY,GAAG;AACxM,UAAMzpB,IAAa,IAAI,gBAAe;AACtC,KAAKypB,KAAmB,OAAoC,SAASA,EAAe,YAAY,KAC5F,WAAW,MAAMzpB,EAAW,MAAK,GAAIypB,EAAe,OAAO,GAE3DA,KAAmB,QAA6CA,EAAe,UAC/EA,EAAe,OAAO,iBAAiB,SAAS,MAAM;AAClD,MAAAzpB,EAAW,MAAK;AAAA,IACpB,CAAC,GAELkmB,EAAa,SAASlmB,EAAW;AAAA,EACrC;AACA,SAAOkmB;AACX;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBA,SAASsE,GAAWp2F,GAAU;AAC1B,SAAAA,EAAS,OAAO,MAAM;AAClB,QAAIA,EAAS,cAAcA,EAAS,WAAW,SAAS,GAAG;AAMvD,UALIA,EAAS,WAAW,SAAS,KAC7B,QAAQ,KAAK,qBAAqBA,EAAS,WAAW,MAAM,6HAEU,GAEtEq2F,GAAmBr2F,EAAS,WAAW,CAAC,CAAC;AACzC,cAAM,IAAIw0F,GAAgC,GAAG8B,GAAwBt2F,CAAQ,CAAC,IAAIA,CAAQ;AAE9F,aAAOu2F,GAAQv2F,CAAQ;AAAA,IAC3B,WACSA,EAAS;AACd,YAAM,IAAIw0F,GAAgC,uBAAuB8B,GAAwBt2F,CAAQ,CAAC,IAAIA,CAAQ;AAElH,WAAO;AAAA,EACX,GAIAA,EAAS,eAAe,MAAM;AAC1B,QAAIA,EAAS,cAAcA,EAAS,WAAW,SAAS,GAAG;AAMvD,UALIA,EAAS,WAAW,SAAS,KAC7B,QAAQ,KAAK,qBAAqBA,EAAS,WAAW,MAAM,uIAEU,GAEtEq2F,GAAmBr2F,EAAS,WAAW,CAAC,CAAC;AACzC,cAAM,IAAIw0F,GAAgC,GAAG8B,GAAwBt2F,CAAQ,CAAC,IAAIA,CAAQ;AAE9F,qBAAQ,KAAK,8EAC8B,GACpCw2F,GAAiBx2F,CAAQ,EAAE,CAAC;AAAA,IACvC,WACSA,EAAS;AACd,YAAM,IAAIw0F,GAAgC,gCAAgC8B,GAAwBt2F,CAAQ,CAAC,IAAIA,CAAQ;AAAA,EAG/H,GACAA,EAAS,gBAAgB,MAAM;AAC3B,QAAIA,EAAS,cAAcA,EAAS,WAAW,SAAS,GAAG;AAMvD,UALIA,EAAS,WAAW,SAAS,KAC7B,QAAQ,KAAK,qBAAqBA,EAAS,WAAW,MAAM,uIAEU,GAEtEq2F,GAAmBr2F,EAAS,WAAW,CAAC,CAAC;AACzC,cAAM,IAAIw0F,GAAgC,GAAG8B,GAAwBt2F,CAAQ,CAAC,IAAIA,CAAQ;AAE9F,aAAOw2F,GAAiBx2F,CAAQ;AAAA,IACpC,WACSA,EAAS;AACd,YAAM,IAAIw0F,GAAgC,gCAAgC8B,GAAwBt2F,CAAQ,CAAC,IAAIA,CAAQ;AAAA,EAG/H,GACOA;AACX;AAIA,SAASu2F,GAAQv2F,GAAU;AACvB,MAAIqB,GAAImG,GAAI2R,GAAIC;AAChB,QAAMq9E,IAAc,CAAA;AACpB,MAAK,GAAAjvF,KAAMnG,IAAKrB,EAAS,gBAAgB,QAAQqB,MAAO,SAAS,SAASA,EAAG,CAAC,EAAE,aAAa,QAAQmG,MAAO,WAAkBA,EAAG;AAC7H,eAAWwuB,MAAS5c,KAAMD,IAAKnZ,EAAS,gBAAgB,QAAQmZ,MAAO,SAAS,SAASA,EAAG,CAAC,EAAE,aAAa,QAAQC,MAAO,SAAS,SAASA,EAAG;AAC5I,MAAI4c,EAAK,QACLygE,EAAY,KAAKzgE,EAAK,IAAI,GAE1BA,EAAK,kBACLygE,EAAY,KAAK,UACbzgE,EAAK,eAAe,WACpB;AAAA,IACAA,EAAK,eAAe,OACpB,SAAS,GAEbA,EAAK,uBACLygE,EAAY,KAAK,YAAYzgE,EAAK,oBAAoB,SAAS,SAAS;AAIpF,SAAIygE,EAAY,SAAS,IACdA,EAAY,KAAK,EAAE,IAGnB;AAEf;AAIA,SAASD,GAAiBx2F,GAAU;AAChC,MAAIqB,GAAImG,GAAI2R,GAAIC;AAChB,QAAMs9E,IAAgB,CAAA;AACtB,MAAK,GAAAlvF,KAAMnG,IAAKrB,EAAS,gBAAgB,QAAQqB,MAAO,SAAS,SAASA,EAAG,CAAC,EAAE,aAAa,QAAQmG,MAAO,WAAkBA,EAAG;AAC7H,eAAWwuB,MAAS5c,KAAMD,IAAKnZ,EAAS,gBAAgB,QAAQmZ,MAAO,SAAS,SAASA,EAAG,CAAC,EAAE,aAAa,QAAQC,MAAO,SAAS,SAASA,EAAG;AAC5I,MAAI4c,EAAK,gBACL0gE,EAAc,KAAK1gE,EAAK,YAAY;AAIhD,MAAI0gE,EAAc,SAAS;AACvB,WAAOA;AAKf;AACA,MAAMC,KAAmB;AAAA,EACrBxC,GAAa;AAAA,EACbA,GAAa;AAAA,EACbA,GAAa;AACjB;AACA,SAASkC,GAAmBruD,GAAW;AACnC,SAAQ,CAAC,CAACA,EAAU,gBAChB2uD,GAAiB,SAAS3uD,EAAU,YAAY;AACxD;AACA,SAASsuD,GAAwBt2F,GAAU;AACvC,MAAIqB,GAAImG,GAAI2R;AACZ,MAAIyP,IAAU;AACd,OAAK,CAAC5oB,EAAS,cAAcA,EAAS,WAAW,WAAW,MACxDA,EAAS;AACT,IAAA4oB,KAAW,wBACN,GAAAvnB,IAAKrB,EAAS,oBAAoB,QAAQqB,MAAO,WAAkBA,EAAG,gBACvEunB,KAAW,WAAW5oB,EAAS,eAAe,WAAW,KAExD,GAAAwH,IAAKxH,EAAS,oBAAoB,QAAQwH,MAAO,WAAkBA,EAAG,uBACvEohB,KAAW,KAAK5oB,EAAS,eAAe,kBAAkB;AAAA,WAGxD,GAAAmZ,IAAKnZ,EAAS,gBAAgB,QAAQmZ,MAAO,WAAkBA,EAAG,CAAC,GAAG;AAC5E,UAAMy9E,IAAiB52F,EAAS,WAAW,CAAC;AAC5C,IAAIq2F,GAAmBO,CAAc,MACjChuE,KAAW,gCAAgCguE,EAAe,YAAY,IAClEA,EAAe,kBACfhuE,KAAW,KAAKguE,EAAe,aAAa;AAAA,EAGxD;AACA,SAAOhuE;AACX;AAmBA,SAASiuE,GAAQtyF,GAAG;AAChB,SAAO,gBAAgBsyF,MAAW,KAAK,IAAItyF,GAAG,QAAQ,IAAIsyF,GAAQtyF,CAAC;AACvE;AAEA,SAASuyF,GAAiB38E,GAAS48E,GAAYC,GAAW;AACtD,MAAI,CAAC,OAAO,cAAe,OAAM,IAAI,UAAU,sCAAsC;AACrF,MAAIjkG,IAAIikG,EAAU,MAAM78E,GAAS48E,KAAc,CAAA,CAAE,GAAG55F,GAAGvK,IAAI;AAC3D,SAAOuK,IAAI,CAAA,GAAI85F,EAAK,MAAM,GAAGA,EAAK,OAAO,GAAGA,EAAK,QAAQ,GAAG95F,EAAE,OAAO,aAAa,IAAI,WAAY;AAAE,WAAO;AAAA,EAAM,GAAGA;AACpH,WAAS85F,EAAKvkG,GAAG;AAAE,IAAIK,EAAEL,CAAC,MAAGyK,EAAEzK,CAAC,IAAI,SAAU6R,GAAG;AAAE,aAAO,IAAI,QAAQ,SAAUzR,GAAG,GAAG;AAAE,QAAAF,EAAE,KAAK,CAACF,GAAG6R,GAAGzR,GAAG,CAAC,CAAC,IAAI,KAAKokG,EAAOxkG,GAAG6R,CAAC;AAAA,MAAG,CAAC;AAAA,IAAG;AAAA,EAAG;AACzI,WAAS2yF,EAAOxkG,GAAG6R,GAAG;AAAE,QAAI;AAAE,MAAAhH,EAAKxK,EAAEL,CAAC,EAAE6R,CAAC,CAAC;AAAA,IAAG,SAASrR,GAAG;AAAE,MAAAikG,EAAOvkG,EAAE,CAAC,EAAE,CAAC,GAAGM,CAAC;AAAA,IAAG;AAAA,EAAE;AACjF,WAASqK,EAAKkK,GAAG;AAAE,IAAAA,EAAE,iBAAiBovF,KAAU,QAAQ,QAAQpvF,EAAE,MAAM,CAAC,EAAE,KAAK2vF,GAASpe,CAAM,IAAIme,EAAOvkG,EAAE,CAAC,EAAE,CAAC,GAAG6U,CAAC;AAAA,EAAG;AACvH,WAAS2vF,EAAQ78F,GAAO;AAAE,IAAA28F,EAAO,QAAQ38F,CAAK;AAAA,EAAG;AACjD,WAASy+E,EAAOz+E,GAAO;AAAE,IAAA28F,EAAO,SAAS38F,CAAK;AAAA,EAAG;AACjD,WAAS48F,EAAO9kG,GAAGkS,GAAG;AAAE,IAAIlS,EAAEkS,CAAC,GAAG3R,EAAE,MAAK,GAAIA,EAAE,UAAQskG,EAAOtkG,EAAE,CAAC,EAAE,CAAC,GAAGA,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,EAAG;AACrF;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA,MAAMykG,KAAiB;AASvB,SAASC,GAAct3F,GAAU;AAC7B,QAAMu3F,IAAcv3F,EAAS,KAAK,YAAY,IAAI,kBAAkB,QAAQ,EAAE,OAAO,GAAI,CAAE,CAAC,GACtFw3F,IAAiBC,GAAkBF,CAAW,GAC9C,CAACG,GAASC,CAAO,IAAIH,EAAe,IAAG;AAC7C,SAAO;AAAA,IACH,QAAQI,GAAyBF,CAAO;AAAA,IACxC,UAAUG,GAAmBF,CAAO;AAAA,EAC5C;AACA;AACA,eAAeE,GAAmB9rB,GAAQ;AACtC,QAAM+rB,IAAe,CAAA,GACf9rB,IAASD,EAAO,UAAS;AAC/B,aAAa;AACT,UAAM,EAAE,MAAAF,GAAM,OAAAtxE,EAAK,IAAK,MAAMyxE,EAAO,KAAI;AACzC,QAAIH;AACA,aAAOuqB,GAAW2B,GAAmBD,CAAY,CAAC;AAEtD,IAAAA,EAAa,KAAKv9F,CAAK;AAAA,EAC3B;AACJ;AACA,SAASq9F,GAAyB7rB,GAAQ;AACtC,SAAO+qB,GAAiB,MAAM,WAAW,aAAuC;AAC5E,UAAM9qB,IAASD,EAAO,UAAS;AAC/B,eAAa;AACT,YAAM,EAAE,OAAAxxE,GAAO,MAAAsxE,EAAI,IAAK,MAAMgrB,GAAQ7qB,EAAO,MAAM;AACnD,UAAIH;AACA;AAEJ,YAAM,MAAMgrB,GAAQT,GAAW77F,CAAK,CAAC;AAAA,IACzC;AAAA,EACJ,CAAC;AACL;AAMA,SAASk9F,GAAkBF,GAAa;AACpC,QAAMvrB,IAASurB,EAAY,UAAS;AAgDpC,SA/Ce,IAAI,eAAe;AAAA,IAC9B,MAAM3rB,GAAY;AACd,UAAIosB,IAAc;AAClB,aAAOC,EAAI;AACX,eAASA,IAAO;AACZ,eAAOjsB,EACF,KAAI,EACJ,KAAK,CAAC,EAAE,OAAAzxE,GAAO,MAAAsxE,QAAW;AAC3B,cAAIA,GAAM;AACN,gBAAImsB,EAAY,QAAQ;AACpB,cAAApsB,EAAW,MAAM,IAAI2oB,GAAwB,wBAAwB,CAAC;AACtE;AAAA,YACJ;AACA,YAAA3oB,EAAW,MAAK;AAChB;AAAA,UACJ;AACA,UAAAosB,KAAez9F;AACf,cAAIzC,IAAQkgG,EAAY,MAAMX,EAAc,GACxCvM;AACJ,iBAAOhzF,KAAO;AACV,gBAAI;AACA,cAAAgzF,IAAiB,KAAK,MAAMhzF,EAAM,CAAC,CAAC;AAAA,YACxC,QACU;AACN,cAAA8zE,EAAW,MAAM,IAAI2oB,GAAwB,iCAAiCz8F,EAAM,CAAC,CAAC,GAAG,CAAC;AAC1F;AAAA,YACJ;AACA,YAAA8zE,EAAW,QAAQkf,CAAc,GACjCkN,IAAcA,EAAY,UAAUlgG,EAAM,CAAC,EAAE,MAAM,GACnDA,IAAQkgG,EAAY,MAAMX,EAAc;AAAA,UAC5C;AACA,iBAAOY,EAAI;AAAA,QACf,CAAC,EACI,MAAM,CAAC/kG,MAAM;AACd,cAAIgH,IAAMhH;AACV,gBAAAgH,EAAI,QAAQhH,EAAE,OACVgH,EAAI,SAAS,eACbA,IAAM,IAAI26F,GAA6B,8CAA8C,IAGrF36F,IAAM,IAAIq6F,GAAwB,+BAA+B,GAE/Dr6F;AAAA,QACV,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACR,CAAK;AAEL;AAKA,SAAS69F,GAAmBG,GAAW;AACnC,QAAMC,IAAeD,EAAUA,EAAU,SAAS,CAAC,GAC7CE,IAAqB;AAAA,IACvB,gBAAgBD,KAAiB,OAAkC,SAASA,EAAa;AAAA,EACjG;AACI,aAAWn4F,KAAYk4F,GAAW;AAC9B,QAAIl4F,EAAS,YAAY;AACrB,UAAIq4F,IAAiB;AACrB,iBAAWrwD,KAAahoC,EAAS;AAwB7B,YAvBKo4F,EAAmB,eACpBA,EAAmB,aAAa,CAAA,IAE/BA,EAAmB,WAAWC,CAAc,MAC7CD,EAAmB,WAAWC,CAAc,IAAI;AAAA,UAC5C,OAAOA;AAAA,QAC/B,IAGgBD,EAAmB,WAAWC,CAAc,EAAE,mBAC1CrwD,EAAU,kBACdowD,EAAmB,WAAWC,CAAc,EAAE,oBAC1CrwD,EAAU,mBACdowD,EAAmB,WAAWC,CAAc,EAAE,eAC1CrwD,EAAU,cACdowD,EAAmB,WAAWC,CAAc,EAAE,gBAC1CrwD,EAAU,eACdowD,EAAmB,WAAWC,CAAc,EAAE,gBAC1CrwD,EAAU,eAKVA,EAAU,WAAWA,EAAU,QAAQ,OAAO;AAC9C,UAAKowD,EAAmB,WAAWC,CAAc,EAAE,YAC/CD,EAAmB,WAAWC,CAAc,EAAE,UAAU;AAAA,YACpD,MAAMrwD,EAAU,QAAQ,QAAQ;AAAA,YAChC,OAAO,CAAA;AAAA,UACnC;AAEoB,gBAAMswD,IAAU,CAAA;AAChB,qBAAWtiE,KAAQgS,EAAU,QAAQ;AACjC,YAAIhS,EAAK,SACLsiE,EAAQ,OAAOtiE,EAAK,OAEpBA,EAAK,iBACLsiE,EAAQ,eAAetiE,EAAK,eAE5BA,EAAK,mBACLsiE,EAAQ,iBAAiBtiE,EAAK,iBAE9BA,EAAK,wBACLsiE,EAAQ,sBAAsBtiE,EAAK,sBAEnC,OAAO,KAAKsiE,CAAO,EAAE,WAAW,MAChCA,EAAQ,OAAO,KAEnBF,EAAmB,WAAWC,CAAc,EAAE,QAAQ,MAAM,KAAKC,CAAO;AAAA,QAEhF;AAEJ,MAAAD;AAAA,IACJ;AACA,IAAIr4F,EAAS,kBACTo4F,EAAmB,gBAAgBp4F,EAAS;AAAA,EAEpD;AACA,SAAOo4F;AACX;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA,eAAeG,GAAsBhK,GAAQ7O,GAAOz2D,GAAQosE,GAAgB;AACxE,QAAMr1F,IAAW,MAAM+1F;AAAA,IAAiBrW;AAAA,IAAOwV,GAAK;AAAA,IAAyB3G;AAAA;AAAA,IAChE;AAAA,IAAM,KAAK,UAAUtlE,CAAM;AAAA,IAAGosE;AAAA,EAAc;AACzD,SAAOiC,GAAct3F,CAAQ;AACjC;AACA,eAAew4F,GAAgBjK,GAAQ7O,GAAOz2D,GAAQosE,GAAgB;AAGlE,QAAMoD,IAAe,OAFJ,MAAM1C;AAAA,IAAiBrW;AAAA,IAAOwV,GAAK;AAAA,IAAkB3G;AAAA;AAAA,IACzD;AAAA,IAAO,KAAK,UAAUtlE,CAAM;AAAA,IAAGosE;AAAA,EAAc,GACtB,KAAI;AAExC,SAAO;AAAA,IACH,UAFqBe,GAAWqC,CAAY;AAAA,EAGpD;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA,SAASC,GAAwBttE,GAAO;AAEpC,MAAIA,KAAS,MAGR;AAAA,QAAI,OAAOA,KAAU;AACtB,aAAO,EAAE,MAAM,UAAU,OAAO,CAAC,EAAE,MAAMA,EAAK,CAAE,EAAC;AAEhD,QAAIA,EAAM;AACX,aAAO,EAAE,MAAM,UAAU,OAAO,CAACA,CAAK,EAAC;AAEtC,QAAIA,EAAM;AACX,aAAKA,EAAM,OAIAA,IAHA,EAAE,MAAM,UAAU,OAAOA,EAAM,MAAK;AAAA;AAMvD;AACA,SAASutE,GAAiBhlB,GAAS;AAC/B,MAAIilB,IAAW,CAAA;AACf,MAAI,OAAOjlB,KAAY;AACnB,IAAAilB,IAAW,CAAC,EAAE,MAAMjlB,GAAS;AAAA;AAG7B,eAAWklB,KAAgBllB;AACvB,MAAI,OAAOklB,KAAiB,WACxBD,EAAS,KAAK,EAAE,MAAMC,EAAY,CAAE,IAGpCD,EAAS,KAAKC,CAAY;AAItC,SAAOC,GAA+CF,CAAQ;AAClE;AASA,SAASE,GAA+C56D,GAAO;AAC3D,QAAM66D,IAAc,EAAE,MAAM,QAAQ,OAAO,CAAA,EAAE,GACvCC,IAAkB,EAAE,MAAM,YAAY,OAAO,CAAA,EAAE;AACrD,MAAIC,IAAiB,IACjBC,IAAqB;AACzB,aAAWljE,KAAQkI;AACf,IAAI,sBAAsBlI,KACtBgjE,EAAgB,MAAM,KAAKhjE,CAAI,GAC/BkjE,IAAqB,OAGrBH,EAAY,MAAM,KAAK/iE,CAAI,GAC3BijE,IAAiB;AAGzB,MAAIA,KAAkBC;AAClB,UAAM,IAAI3E,GAAwB,4HAA4H;AAElK,MAAI,CAAC0E,KAAkB,CAACC;AACpB,UAAM,IAAI3E,GAAwB,kDAAkD;AAExF,SAAI0E,IACOF,IAEJC;AACX;AACA,SAASG,GAAuBlwE,GAAQmwE,GAAa;AACjD,MAAI/3F;AACJ,MAAIg4F,IAAkC;AAAA,IAClC,OAAOD,KAAgB,OAAiC,SAASA,EAAY;AAAA,IAC7E,kBAAkBA,KAAgB,OAAiC,SAASA,EAAY;AAAA,IACxF,gBAAgBA,KAAgB,OAAiC,SAASA,EAAY;AAAA,IACtF,OAAOA,KAAgB,OAAiC,SAASA,EAAY;AAAA,IAC7E,YAAYA,KAAgB,OAAiC,SAASA,EAAY;AAAA,IAClF,mBAAmBA,KAAgB,OAAiC,SAASA,EAAY;AAAA,IACzF,gBAAgB/3F,IAAK+3F,KAAgB,OAAiC,SAASA,EAAY,mBAAmB,QAAQ/3F,MAAO,SAAS,SAASA,EAAG;AAAA,IAClJ,UAAU,CAAA;AAAA,EAClB;AACI,QAAMi4F,IAAiCrwE,EAAO,0BAA0B;AACxE,MAAIA,EAAO,UAAU;AACjB,QAAIqwE;AACA,YAAM,IAAI1E,GAAoC,mFAAmF;AAErI,IAAAyE,EAAgC,WAAWpwE,EAAO;AAAA,EACtD,WACSqwE;AACL,IAAAD,IAAkC,OAAO,OAAO,OAAO,OAAO,CAAA,GAAIA,CAA+B,GAAGpwE,EAAO,sBAAsB;AAAA,OAEhI;AAED,UAAM7lB,IAAUu1F,GAAiB1vE,CAAM;AACvC,IAAAowE,EAAgC,WAAW,CAACj2F,CAAO;AAAA,EACvD;AACA,SAAO,EAAE,wBAAwBi2F,EAA+B;AACpE;AACA,SAASE,GAA2BtwE,GAAQ;AACxC,MAAIuwE;AACJ,SAAIvwE,EAAO,WACPuwE,IAAmBvwE,IAKnBuwE,IAAmB,EAAE,UAAU,CADfb,GAAiB1vE,CAAM,CACA,EAAC,GAExCA,EAAO,sBACPuwE,EAAiB,oBAAoBd,GAAwBzvE,EAAO,iBAAiB,IAElFuwE;AACX;AACA,SAASC,GAAwBxwE,GAAQ;AACrC,SAAI,OAAOA,KAAW,YAAY,MAAM,QAAQA,CAAM,IAE3C,EAAE,SADO0vE,GAAiB1vE,CAAM,EACvB,IAEbA;AACX;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA,MAAMywE,KAAoB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GACMC,KAAuB;AAAA,EACzB,MAAM,CAAC,QAAQ,YAAY;AAAA,EAC3B,UAAU,CAAC,kBAAkB;AAAA,EAC7B,OAAO,CAAC,QAAQ,gBAAgB,kBAAkB,qBAAqB;AAAA;AAAA,EAEvE,QAAQ,CAAC,MAAM;AACnB;AACA,SAASC,GAAoBC,GAAS;AAClC,MAAIC,IAAc;AAClB,aAAWC,KAAeF,GAAS;AAC/B,UAAM,EAAE,MAAAtf,GAAM,OAAAr8C,EAAK,IAAK67D;AACxB,QAAI,CAACD,KAAevf,MAAS;AACzB,YAAM,IAAIga,GAAwB,iDAAiDha,CAAI,EAAE;AAE7F,QAAI,CAACuZ,GAAe,SAASvZ,CAAI;AAC7B,YAAM,IAAIga,GAAwB,4CAA4Cha,CAAI,yBAAyB,KAAK,UAAUuZ,EAAc,CAAC,EAAE;AAE/I,QAAI,CAAC,MAAM,QAAQ51D,CAAK;AACpB,YAAM,IAAIq2D,GAAwB,6DAA6D;AAEnG,QAAIr2D,EAAM,WAAW;AACjB,YAAM,IAAIq2D,GAAwB,4CAA4C;AAElF,UAAMyF,IAAc;AAAA,MAChB,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,qBAAqB;AAAA,IACjC;AACQ,eAAWhkE,KAAQkI;AACf,iBAAWviC,KAAO+9F;AACd,QAAI/9F,KAAOq6B,MACPgkE,EAAYr+F,CAAG,KAAK;AAIhC,UAAMs+F,IAAaN,GAAqBpf,CAAI;AAC5C,eAAW5+E,KAAO+9F;AACd,UAAI,CAACO,EAAW,SAASt+F,CAAG,KAAKq+F,EAAYr+F,CAAG,IAAI;AAChD,cAAM,IAAI44F,GAAwB,sBAAsBha,CAAI,oBAAoB5+E,CAAG,QAAQ;AAGnG,IAAAm+F,IAAc;AAAA,EAClB;AACJ;AAIA,SAASI,GAAgBl6F,GAAU;AAC/B,MAAIqB;AACJ,MAAIrB,EAAS,eAAe,UAAaA,EAAS,WAAW,WAAW;AACpE,WAAO;AAEX,QAAMoD,KAAW/B,IAAKrB,EAAS,WAAW,CAAC,OAAO,QAAQqB,MAAO,SAAS,SAASA,EAAG;AAItF,MAHI+B,MAAY,UAGZA,EAAQ,UAAU,UAAaA,EAAQ,MAAM,WAAW;AACxD,WAAO;AAEX,aAAW4yB,KAAQ5yB,EAAQ;AAIvB,QAHI4yB,MAAS,UAAa,OAAO,KAAKA,CAAI,EAAE,WAAW,KAGnDA,EAAK,SAAS,UAAaA,EAAK,SAAS;AACzC,aAAO;AAGf,SAAO;AACX;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBA,MAAMmkE,KAAe;AAOrB,MAAMC,GAAY;AAAA,EACd,YAAY7L,GAAQ7O,GAAOz2D,GAAQoxE,IAAkB,CAAA,GAAI;AACrD,SAAK,QAAQ3a,GACb,KAAK,SAASz2D,GACd,KAAK,kBAAkBoxE,GACvB,KAAK,WAAW,CAAA,GAChB,KAAK,eAAe,QAAQ,QAAO,GACnC,KAAK,UAAU9L,GACXtlE,KAAW,QAAqCA,EAAO,YACvD2wE,GAAoB3wE,EAAO,OAAO,GAClC,KAAK,WAAWA,EAAO;AAAA,EAE/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,aAAa;AACf,iBAAM,KAAK,cACJ,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,YAAY0qD,GAAS0hB,IAAiB,IAAI;AAC5C,QAAIh0F,GAAImG,GAAI2R,GAAIC,GAAI/D,GAAIuvC;AACxB,UAAM,KAAK;AACX,UAAMsgC,IAAayT,GAAiBhlB,CAAO,GACrC2mB,IAAyB;AAAA,MAC3B,iBAAiBj5F,IAAK,KAAK,YAAY,QAAQA,MAAO,SAAS,SAASA,EAAG;AAAA,MAC3E,mBAAmBmG,IAAK,KAAK,YAAY,QAAQA,MAAO,SAAS,SAASA,EAAG;AAAA,MAC7E,QAAQ2R,IAAK,KAAK,YAAY,QAAQA,MAAO,SAAS,SAASA,EAAG;AAAA,MAClE,aAAaC,IAAK,KAAK,YAAY,QAAQA,MAAO,SAAS,SAASA,EAAG;AAAA,MACvE,oBAAoB/D,IAAK,KAAK,YAAY,QAAQA,MAAO,SAAS,SAASA,EAAG;AAAA,MAC9E,gBAAgBuvC,IAAK,KAAK,YAAY,QAAQA,MAAO,SAAS,SAASA,EAAG;AAAA,MAC1E,UAAU,CAAC,GAAG,KAAK,UAAUsgC,CAAU;AAAA,IACnD,GACcqV,IAA4B,OAAO,OAAO,OAAO,OAAO,CAAA,GAAI,KAAK,eAAe,GAAGlF,CAAc;AACvG,QAAImF;AAEJ,gBAAK,eAAe,KAAK,aACpB,KAAK,MAAMhC,GAAgB,KAAK,SAAS,KAAK,OAAO8B,GAAwBC,CAAyB,CAAC,EACvG,KAAK,CAACr6F,MAAW;AAClB,UAAImB;AACJ,UAAI64F,GAAgBh6F,EAAO,QAAQ,GAAG;AAClC,aAAK,SAAS,KAAKglF,CAAU;AAC7B,cAAMuV,IAAkB,OAAO,OAAO;AAAA,UAAE,OAAO,CAAA;AAAA;AAAA,UAE3C,MAAM;AAAA,QAAO,IAAKp5F,IAAKnB,EAAO,SAAS,gBAAgB,QAAQmB,MAAO,SAAS,SAASA,EAAG,CAAC,EAAE,OAAO;AACzG,aAAK,SAAS,KAAKo5F,CAAe;AAAA,MACtC,OACK;AACD,cAAMC,IAAoBpE,GAAwBp2F,EAAO,QAAQ;AACjE,QAAIw6F,KACA,QAAQ,KAAK,mCAAmCA,CAAiB,wCAAwC;AAAA,MAEjH;AACA,MAAAF,IAAct6F;AAAA,IAClB,CAAC,EACI,MAAM,CAAChN,MAAM;AAEd,iBAAK,eAAe,QAAQ,QAAO,GAC7BA;AAAA,IACV,CAAC,GACD,MAAM,KAAK,cACJsnG;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,kBAAkB7mB,GAAS0hB,IAAiB,IAAI;AAClD,QAAIh0F,GAAImG,GAAI2R,GAAIC,GAAI/D,GAAIuvC;AACxB,UAAM,KAAK;AACX,UAAMsgC,IAAayT,GAAiBhlB,CAAO,GACrC2mB,IAAyB;AAAA,MAC3B,iBAAiBj5F,IAAK,KAAK,YAAY,QAAQA,MAAO,SAAS,SAASA,EAAG;AAAA,MAC3E,mBAAmBmG,IAAK,KAAK,YAAY,QAAQA,MAAO,SAAS,SAASA,EAAG;AAAA,MAC7E,QAAQ2R,IAAK,KAAK,YAAY,QAAQA,MAAO,SAAS,SAASA,EAAG;AAAA,MAClE,aAAaC,IAAK,KAAK,YAAY,QAAQA,MAAO,SAAS,SAASA,EAAG;AAAA,MACvE,oBAAoB/D,IAAK,KAAK,YAAY,QAAQA,MAAO,SAAS,SAASA,EAAG;AAAA,MAC9E,gBAAgBuvC,IAAK,KAAK,YAAY,QAAQA,MAAO,SAAS,SAASA,EAAG;AAAA,MAC1E,UAAU,CAAC,GAAG,KAAK,UAAUsgC,CAAU;AAAA,IACnD,GACcqV,IAA4B,OAAO,OAAO,OAAO,OAAO,CAAA,GAAI,KAAK,eAAe,GAAGlF,CAAc,GACjGsF,IAAgBpC,GAAsB,KAAK,SAAS,KAAK,OAAO+B,GAAwBC,CAAyB;AAEvH,gBAAK,eAAe,KAAK,aACpB,KAAK,MAAMI,CAAa,EAGxB,MAAM,CAACC,MAAa;AACrB,YAAM,IAAI,MAAMT,EAAY;AAAA,IAChC,CAAC,EACI,KAAK,CAACU,MAAiBA,EAAa,QAAQ,EAC5C,KAAK,CAAC76F,MAAa;AACpB,UAAIk6F,GAAgBl6F,CAAQ,GAAG;AAC3B,aAAK,SAAS,KAAKklF,CAAU;AAC7B,cAAMuV,IAAkB,OAAO,OAAO,CAAA,GAAIz6F,EAAS,WAAW,CAAC,EAAE,OAAO;AAExE,QAAKy6F,EAAgB,SACjBA,EAAgB,OAAO,UAE3B,KAAK,SAAS,KAAKA,CAAe;AAAA,MACtC,OACK;AACD,cAAMC,IAAoBpE,GAAwBt2F,CAAQ;AAC1D,QAAI06F,KACA,QAAQ,KAAK,yCAAyCA,CAAiB,wCAAwC;AAAA,MAEvH;AAAA,IACJ,CAAC,EACI,MAAM,CAACxnG,MAAM;AAId,MAAIA,EAAE,YAAYinG,MAGd,QAAQ,MAAMjnG,CAAC;AAAA,IAEvB,CAAC,GACMynG;AAAA,EACX;AACJ;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA,eAAeG,GAAYvM,GAAQ7O,GAAOz2D,GAAQ8xE,GAAsB;AAEpE,UADiB,MAAMhF,GAAiBrW,GAAOwV,GAAK,cAAc3G,GAAQ,IAAO,KAAK,UAAUtlE,CAAM,GAAG8xE,CAAoB,GAC7G,KAAI;AACxB;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA,eAAeC,GAAazM,GAAQ7O,GAAOz2D,GAAQosE,GAAgB;AAE/D,UADiB,MAAMU,GAAiBrW,GAAOwV,GAAK,eAAe3G,GAAQ,IAAO,KAAK,UAAUtlE,CAAM,GAAGosE,CAAc,GACxG,KAAI;AACxB;AACA,eAAe4F,GAAmB1M,GAAQ7O,GAAOz2D,GAAQosE,GAAgB;AACrE,QAAM6F,IAAoBjyE,EAAO,SAAS,IAAI,CAAC0qD,MACpC,OAAO,OAAO,OAAO,OAAO,CAAA,GAAIA,CAAO,GAAG,EAAE,OAAA+L,GAAO,CAC7D;AAED,UADiB,MAAMqW,GAAiBrW,GAAOwV,GAAK,sBAAsB3G,GAAQ,IAAO,KAAK,UAAU,EAAE,UAAU2M,EAAiB,CAAE,GAAG7F,CAAc,GACxI,KAAI;AACxB;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBA,MAAM8F,GAAgB;AAAA,EAClB,YAAY5M,GAAQ6K,GAAaiB,IAAkB,CAAA,GAAI;AACnD,SAAK,SAAS9L,GACd,KAAK,kBAAkB8L,GACnBjB,EAAY,MAAM,SAAS,GAAG,IAE9B,KAAK,QAAQA,EAAY,QAIzB,KAAK,QAAQ,UAAUA,EAAY,KAAK,IAE5C,KAAK,mBAAmBA,EAAY,oBAAoB,CAAA,GACxD,KAAK,iBAAiBA,EAAY,kBAAkB,CAAA,GACpD,KAAK,QAAQA,EAAY,OACzB,KAAK,aAAaA,EAAY,YAC9B,KAAK,oBAAoBV,GAAwBU,EAAY,iBAAiB,GAC9E,KAAK,gBAAgBA,EAAY;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,gBAAgBzlB,GAAS0hB,IAAiB,IAAI;AAChD,QAAIh0F;AACJ,UAAM+5F,IAAkB7B,GAA2B5lB,CAAO,GACpD0nB,IAAgC,OAAO,OAAO,OAAO,OAAO,CAAA,GAAI,KAAK,eAAe,GAAGhG,CAAc;AAC3G,WAAOmD,GAAgB,KAAK,QAAQ,KAAK,OAAO,OAAO,OAAO,EAAE,kBAAkB,KAAK,kBAAkB,gBAAgB,KAAK,gBAAgB,OAAO,KAAK,OAAO,YAAY,KAAK,YAAY,mBAAmB,KAAK,mBAAmB,gBAAgBn3F,IAAK,KAAK,mBAAmB,QAAQA,MAAO,SAAS,SAASA,EAAG,QAAQ+5F,CAAe,GAAGC,CAA6B;AAAA,EACrX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,sBAAsB1nB,GAAS0hB,IAAiB,IAAI;AACtD,QAAIh0F;AACJ,UAAM+5F,IAAkB7B,GAA2B5lB,CAAO,GACpD0nB,IAAgC,OAAO,OAAO,OAAO,OAAO,CAAA,GAAI,KAAK,eAAe,GAAGhG,CAAc;AAC3G,WAAOkD,GAAsB,KAAK,QAAQ,KAAK,OAAO,OAAO,OAAO,EAAE,kBAAkB,KAAK,kBAAkB,gBAAgB,KAAK,gBAAgB,OAAO,KAAK,OAAO,YAAY,KAAK,YAAY,mBAAmB,KAAK,mBAAmB,gBAAgBl3F,IAAK,KAAK,mBAAmB,QAAQA,MAAO,SAAS,SAASA,EAAG,QAAQ+5F,CAAe,GAAGC,CAA6B;AAAA,EAC3X;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAUC,GAAiB;AACvB,QAAIj6F;AACJ,WAAO,IAAI+4F,GAAY,KAAK,QAAQ,KAAK,OAAO,OAAO,OAAO,EAAE,kBAAkB,KAAK,kBAAkB,gBAAgB,KAAK,gBAAgB,OAAO,KAAK,OAAO,YAAY,KAAK,YAAY,mBAAmB,KAAK,mBAAmB,gBAAgB/4F,IAAK,KAAK,mBAAmB,QAAQA,MAAO,SAAS,SAASA,EAAG,KAAI,GAAIi6F,CAAe,GAAG,KAAK,eAAe;AAAA,EAC5W;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,YAAY3nB,GAAS0hB,IAAiB,IAAI;AAC5C,UAAM+F,IAAkBjC,GAAuBxlB,GAAS;AAAA,MACpD,OAAO,KAAK;AAAA,MACZ,kBAAkB,KAAK;AAAA,MACvB,gBAAgB,KAAK;AAAA,MACrB,OAAO,KAAK;AAAA,MACZ,YAAY,KAAK;AAAA,MACjB,mBAAmB,KAAK;AAAA,MACxB,eAAe,KAAK;AAAA,IAChC,CAAS,GACK0nB,IAAgC,OAAO,OAAO,OAAO,OAAO,CAAA,GAAI,KAAK,eAAe,GAAGhG,CAAc;AAC3G,WAAOyF,GAAY,KAAK,QAAQ,KAAK,OAAOM,GAAiBC,CAA6B;AAAA,EAC9F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,aAAa1nB,GAAS0hB,IAAiB,IAAI;AAC7C,UAAM+F,IAAkB3B,GAAwB9lB,CAAO,GACjD0nB,IAAgC,OAAO,OAAO,OAAO,OAAO,CAAA,GAAI,KAAK,eAAe,GAAGhG,CAAc;AAC3G,WAAO2F,GAAa,KAAK,QAAQ,KAAK,OAAOI,GAAiBC,CAA6B;AAAA,EAC/F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,mBAAmBE,GAA0BlG,IAAiB,IAAI;AACpE,UAAMgG,IAAgC,OAAO,OAAO,OAAO,OAAO,CAAA,GAAI,KAAK,eAAe,GAAGhG,CAAc;AAC3G,WAAO4F,GAAmB,KAAK,QAAQ,KAAK,OAAOM,GAA0BF,CAA6B;AAAA,EAC9G;AACJ;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBA,MAAMG,GAAmB;AAAA,EACrB,YAAYjN,GAAQ;AAChB,SAAK,SAASA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAIA,mBAAmB6K,GAAa/D,GAAgB;AAC5C,QAAI,CAAC+D,EAAY;AACb,YAAM,IAAI7E,GAAwB,0FACiC;AAEvE,WAAO,IAAI4G,GAAgB,KAAK,QAAQ/B,GAAa/D,CAAc;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA,EAIA,oCAAoCoG,GAAerC,GAAa/D,GAAgB;AAC5E,QAAI,CAACoG,EAAc;AACf,YAAM,IAAI7G,GAAoC,6CAA6C;AAE/F,QAAI,CAAC6G,EAAc;AACf,YAAM,IAAI7G,GAAoC,8CAA8C;AAMhG,UAAM8G,IAAuB,CAAC,SAAS,mBAAmB;AAC1D,eAAW//F,KAAO+/F;AACd,UAAKtC,KAAgB,QAA0CA,EAAYz9F,CAAG,KAC1E8/F,EAAc9/F,CAAG,MAChBy9F,KAAgB,OAAiC,SAASA,EAAYz9F,CAAG,OAAO8/F,EAAc9/F,CAAG,GAAG;AACrG,YAAIA,MAAQ,SAAS;AACjB,gBAAMggG,IAAkBvC,EAAY,MAAM,WAAW,SAAS,IACxDA,EAAY,MAAM,QAAQ,WAAW,EAAE,IACvCA,EAAY,OACZwC,IAAoBH,EAAc,MAAM,WAAW,SAAS,IAC5DA,EAAc,MAAM,QAAQ,WAAW,EAAE,IACzCA,EAAc;AACpB,cAAIE,MAAoBC;AACpB;AAAA,QAER;AACA,cAAM,IAAIhH,GAAoC,wBAAwBj5F,CAAG,+BAChEy9F,EAAYz9F,CAAG,CAAC,wBAAwB8/F,EAAc9/F,CAAG,CAAC,GAAG;AAAA,MAC1E;AAEJ,UAAMkgG,IAAuB,OAAO,OAAO,OAAO,OAAO,CAAA,GAAIzC,CAAW,GAAG,EAAE,OAAOqC,EAAc,OAAO,OAAOA,EAAc,OAAO,YAAYA,EAAc,YAAY,mBAAmBA,EAAc,mBAAmB,eAAAA,GAAe;AAC9O,WAAO,IAAIN,GAAgB,KAAK,QAAQU,GAAsBxG,CAAc;AAAA,EAChF;AACJ;ACx+CA,MAAMxkB,KAAS;AAAA,EACb,OAAO,CAACjoD,GAAiBvpB,MAAe,QAAQ,MAAM,WAAWupB,CAAO,IAAIvpB,CAAI;AAAA,EAChF,MAAM,CAACupB,GAAiBvpB,MAAe,QAAQ,KAAK,UAAUupB,CAAO,IAAIvpB,CAAI;AAAA,EAC7E,MAAM,CAACupB,GAAiBvpB,MAAe,QAAQ,KAAK,UAAUupB,CAAO,IAAIvpB,CAAI;AAAA,EAC7E,OAAO,CAACupB,GAAiBvpB,MAAe,QAAQ,MAAM,WAAWupB,CAAO,IAAIvpB,CAAI;AAClF,GA6Bay8F,KAAkB,YAAoC;;AACjE,MAAI;AACF,UAAM,EAAE,MAAM,EAAE,MAAAx9B,EAAA,MAAW,MAAM78D,GAAS,KAAK,QAAA;AAC/C,QAAI,CAAC68D;AACH,aAAAuS,GAAO,MAAM,6BAA6B,GACnC;AAGT,UAAM,EAAE,MAAMkrB,GAAY,OAAAtnG,MAAU,MAAMgN,GACvC,KAAK,cAAc,EACnB,OAAO,UAAU,EACjB,GAAG,WAAW68D,EAAK,EAAE,EACrB,YAAA;AAEH,QAAI7pE;AACF,aAAAo8E,GAAO,MAAM,gCAAgCp8E,CAAK,GAC3C;AAGT,UAAM2P,IAAW23F,KAAA,gBAAAA,EAAY,UACvBxN,KAASltF,IAAA+C,KAAA,gBAAAA,EAAU,aAAV,gBAAA/C,EAAoB;AAEnC,WAAKktF,MACH1d,GAAO,MAAM,mGAAmG,GACzG;AAAA,EAIX,SAASp8E,GAAO;AACd,WAAAo8E,GAAO,MAAM,iCAAiCp8E,CAAK,GAC5C;AAAA,EACT;AACF,GAIMunG,KAA0B,OAAOzN,MAAoB;AACzD,QAAM5yF,IAAgB,MAAMmgG,GAAA;AAE5B,SAAKngG,IAKE,IAAI6/F,GAAmB7/F,CAAG,KAJ/Bk1E,GAAO,MAAM,+EAA+E,GACrF;AAIX,GAGMorB,KAAc,CAACC,MAA6B;;AAChD,QAAMC,KAAM96F,IAAA66F,EAAS,MAAM,GAAG,EAAE,IAAA,MAApB,gBAAA76F,EAA2B;AAQvC,SAP6C;AAAA,IAC3C,KAAO;AAAA,IACP,KAAO;AAAA,IACP,MAAQ;AAAA,IACR,MAAQ;AAAA,IACR,KAAO;AAAA,EAAA,EAEQ86F,KAAO,EAAE,KAAK;AACjC,GAGMC,KAAe,CAACpU,MACb,IAAI,QAAQ,CAACvmB,GAASuX,MAAW;AACtC,QAAMhN,IAAS,IAAI,WAAA;AACnB,EAAAA,EAAO,cAAcgc,CAAI,GACzBhc,EAAO,SAAS,MAAM;AAGpB,UAAMj9C,IAFSi9C,EAAO,OAEA,MAAM,GAAG,EAAE,CAAC;AAClC,IAAAvK,EAAQ1yC,CAAM;AAAA,EAChB,GACAi9C,EAAO,UAAU,CAAAv3E,MAASukF,EAAOvkF,CAAK;AACxC,CAAC,GAwIU4nG,KAAY,OACvBC,GACAC,GACA7c,IAAgB,8BAChB6O,GACAiO,GACAC,GACAC,MACgC;;AAChC,QAAMC,IAAK,MAAMX,GAA8B;AAC/C,MAAI,CAACW;AACH,WAAO;AAGT,QAAMC,IAAWD,EAAG,mBAAmB;AAAA,IACrC,OAAAjd;AAAA;AAAA,IAEA,OAA2D;AAAA,EAAA,CAC5D;AAED,MAAI;AACF,UAAMmd,IAAqB,MAAM,QAAQ,IAAIN,EAAW,IAAI,OAAOvU,MAAS;AAC1E,YAAM8U,IAAa,MAAMV,GAAapU,CAAI;AAE1C,aAAO;AAAA,QACL,YAAY;AAAA,UACV,UAHaiU,GAAYjU,EAAK,IAAI;AAAA,UAIlC,MAAM8U;AAAA,QAAA;AAAA,MACR;AAAA,IAEJ,CAAC,CAAC,GAEIC,IAAiB,EAAE,MAAMT,EAAA,GACzBU,IAAc,CAAC,GAAGH,GAAYE,CAAQ,GAEtCE,IAAqC,CAAA;AAc3C,QAAI/8F;AACJ,IAAI,OAAO,KAAK+8F,CAAgB,EAAE,SAAS,IAEzC/8F,IAAS,MAAM08F,EAAS,gBAAgBI,GAAaC,CAAgB,IAErE/8F,IAAS,MAAM08F,EAAS,gBAAgBI,CAAW;AAGrD,UAAMh9F,IAAWE,EAAO;AAOxB,QANA2wE,GAAO,MAAM,iDAAiD;AAAA,MAC5D,aAAa,CAAC,CAAC7wE;AAAA,MACf,eAAe,CAAC,EAACA,KAAA,QAAAA,EAAU;AAAA,MAC3B,mBAAkBqB,IAAArB,KAAA,gBAAAA,EAAU,eAAV,gBAAAqB,EAAsB;AAAA,IAAA,CACzC,GAEG,CAACrB,KAAY,CAACA,EAAS,cAAcA,EAAS,WAAW,WAAW;AACtE,YAAA6wE,GAAO,MAAM,kEAAkE,GACzE,IAAI,MAAM,2HAA2H;AAG7I,UAAM7oC,IAAYhoC,EAAS,WAAW,CAAC;AAGvC,QAAIgoC,EAAU,gBAAgBA,EAAU,iBAAiB,QAAQ;AAO/D,YAAMpf,IANkD;AAAA,QACtD,QAAU;AAAA,QACV,YAAc;AAAA,QACd,OAAS;AAAA,MAAA,EAG0Bof,EAAU,YAAY,KACzD,uCAAuCA,EAAU,YAAY;AAE/D,YAAA6oC,GAAO,MAAM,uDAAuD;AAAA,QAClE,cAAc7oC,EAAU;AAAA,QACxB,kBAAkBpf;AAAA,MAAA,CACnB,GACK,IAAI,MAAM,iCAAiCA,CAAO,EAAE;AAAA,IAC5D;AAEA,QAAI,CAACof,EAAU,WAAW,CAACA,EAAU,QAAQ;AAC3C,YAAA6oC,GAAO,MAAM,kEAAkE,GACzE,IAAI,MAAM,yEAAyE;AAG3F,UAAM3yC,IAAQ8J,EAAU,QAAQ;AAEhC,QAAIk1D,IAAgC,MAChCC,IAAwB;AAG5B,eAAWnnE,KAAQkI;AACjB,UAAI,gBAAgBlI,KAAQA,EAAK,YAAY;AAE3C,cAAMonE,IAAe,KAAKpnE,EAAK,WAAW,IAAI,GACxCy5C,IAAQ,IAAI,WAAW2tB,EAAa,MAAM;AAChD,iBAASjgG,IAAI,GAAGA,IAAIigG,EAAa,QAAQjgG;AACvC,UAAAsyE,EAAMtyE,CAAC,IAAIigG,EAAa,WAAWjgG,CAAC;AAEtC,QAAA+/F,IAAYztB,EAAM;AAAA,MACpB,MAAA,CAAW,UAAUz5C,KAAQA,EAAK,SAE3BmnE,IAGHA,KAAU,MAAMnnE,EAAK,KAAK,KAAA,IAF1BmnE,IAASnnE,EAAK,KAAK,KAAA;AAOzB,QAAIknE;AACF,aAAArsB,GAAO,KAAK,uDAAuD;AAAA,QACjE,SAAS,CAAC,CAACssB;AAAA,QACX,aAAaA,KAAA,gBAAAA,EAAQ,UAAU,GAAG;AAAA,MAAG,CACtC,GACM,EAAE,WAAAD,GAAW,MAAMC,KAAU,OAAA;AAItC,UAAIA,KACFtsB,GAAO,KAAK,kEAAkE;AAAA,MAC5E,cAAcssB;AAAA,MACd,cAAcn1D,EAAU;AAAA,IAAA,CACzB,GACK,IAAI,MAAM,6CAA6Cm1D,CAAM,EAAE,MAGvEtsB,GAAO,KAAK,uDAAuD,GAC7D,IAAI,MAAM,iFAAiF;AAAA,EAEnG,SAASp8E,GAAY;AACnB,UAAAo8E,GAAO,MAAM,qCAAqC;AAAA,MAChD,OAAOp8E,EAAM;AAAA,MACb,QAAQ6nG,EAAO,UAAU,GAAG,GAAG,IAAI;AAAA,MACnC,YAAYC,EAAW;AAAA,IAAA,CACxB,GACK9nG;AAAA,EACR;AACF,GCjXM4oG,KAAgB;AAAA,EACpB,OAAO,CAACz0E,GAAiBvpB,MAAe,QAAQ,MAAM,kBAAkBupB,CAAO,IAAIvpB,CAAI;AAAA,EACvF,MAAM,CAACupB,GAAiBvpB,MAAe,QAAQ,KAAK,iBAAiBupB,CAAO,IAAIvpB,CAAI;AAAA,EACpF,MAAM,CAACupB,GAAiBvpB,MAAe,QAAQ,KAAK,iBAAiBupB,CAAO,IAAIvpB,CAAI;AAAA,EACpF,OAAO,CAACupB,GAAiBvpB,MAAe,QAAQ,MAAM,kBAAkBupB,CAAO,IAAIvpB,CAAI;AACzF,GA6CMi+F,KAAkB,YAAoC;;AAC1D,MAAI;AACF,UAAM,EAAE,MAAM,EAAE,MAAAh/B,EAAA,MAAW,MAAM78D,GAAS,KAAK,QAAA;AAC/C,QAAI,CAAC68D;AACH,aAAA++B,GAAc,MAAM,6BAA6B,GAC1C;AAGT,UAAM,EAAE,MAAMtB,GAAY,OAAAtnG,MAAU,MAAMgN,GACvC,KAAK,cAAc,EACnB,OAAO,UAAU,EACjB,GAAG,WAAW68D,EAAK,EAAE,EACrB,YAAA;AAEH,QAAI7pE;AACF,aAAA4oG,GAAc,MAAM,gCAAgC5oG,CAAK,GAClD;AAGT,UAAM2P,IAAW23F,KAAA,gBAAAA,EAAY,UACvBxN,KAASltF,IAAA+C,KAAA,gBAAAA,EAAU,aAAV,gBAAA/C,EAAoB;AAEnC,WAAKktF,MACH8O,GAAc,MAAM,mGAAmG,GAChH;AAAA,EAIX,SAAS5oG,GAAO;AACd,WAAA4oG,GAAc,MAAM,iCAAiC5oG,CAAK,GACnD;AAAA,EACT;AACF,GAIa8oG,KAAqB,OAAOhP,MAA4C;AACnF,QAAM5yF,IAAgB,MAAM2hG,GAAA;AAE5B,MAAI,CAAC3hG;AACH,WAAA0hG,GAAc,MAAM,+EAA+E,GAC5F;AAGT,MAAI;AACF,WAAO,IAAIhP,GAAO;AAAA,MAChB,QAAQ1yF;AAAA,MACR,yBAAyB;AAAA;AAAA,IAAA,CAC1B;AAAA,EACH,SAASlH,GAAO;AACd,WAAA4oG,GAAc,MAAM,iCAAiC5oG,CAAK,GACnD;AAAA,EACT;AACF,GAca+oG,KAAa,OACxBC,GACAC,GACAnP,MACsB;AACtB,MAAI;AACF,UAAMvsF,IAAS,MAAMu7F,GAAmBhP,CAAM;AAC9C,WAAKvsF,IAKE,MAAMy7F,EAAUz7F,CAAM,KAJ3Bq7F,GAAc,KAAK,+DAA+D,GAC3EK,KAAY;AAAA,EAIvB,SAASjpG,GAAO;AACd,WAAA4oG,GAAc,MAAM,4BAA4B5oG,CAAK,GAC9CipG,KAAY;AAAA,EACrB;AACF,GAiJMtB,KAAe,CAACpU,MACb,IAAI,QAAQ,CAACvmB,GAASuX,MAAW;AACtC,QAAMhN,IAAS,IAAI,WAAA;AACnB,EAAAA,EAAO,cAAcgc,CAAI,GACzBhc,EAAO,SAAS,MAAM;AAGpB,UAAMj9C,IAFSi9C,EAAO,OAEA,MAAM,GAAG,EAAE,CAAC;AAClC,IAAAvK,EAAQ1yC,CAAM;AAAA,EAChB,GACAi9C,EAAO,UAAU,CAAAv3E,MAASukF,EAAOvkF,CAAK;AACxC,CAAC,GAIGkpG,KAAmB,CAAC3V,MACjBA,EAAK,QAAQ,cAIT4V,KAAgB,OAC3BrB,GACAD,IAAiB,uFACjB5c,IAAgB,eAChB6O,MAEOiP,GAAW,OAAOx7F,MAAW;;AAClC,MAAI;AACF,QAAIu6F,EAAW,WAAW;AACxB,aAAAc,GAAc,KAAK,iCAAiC,GAC7C;AAIT,UAAMQ,IAAgB,MAAM,QAAQ;AAAA,MAClCtB,EAAW,IAAI,OAAOvU,MAAS;AAC7B,cAAMj5D,IAAS,MAAMqtE,GAAapU,CAAI;AAEtC,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAHI2V,GAAiB3V,CAAI,CAGT,WAAWj5D,CAAM;AAAA,QAAA;AAAA,MAEhD,CAAC;AAAA,IAAA,GAIG3rB,IAAU;AAAA,MACd,EAAE,MAAM,cAAuB,MAAMk5F,EAAA;AAAA,MACrC,GAAGuB;AAAA,IAAA,GAIC79F,IAAW,QAAOqB,IAAAW,EAAe,cAAf,gBAAAX,EAA0B,OAAO;AAAA,MACvD,OAAAq+E;AAAA,MACA,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,SAAAt8E;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAGF,QAAI,EAACpD,KAAA,QAAAA,EAAU;AACb,aAAAq9F,GAAc,KAAK,oDAAoD,GAChE;AAGT,UAAMS,IAAa99F,EAAS,aAItB68B,IAAQihE,EAAW,MAAM;AAAA,CAAI,EAAE,OAAO,CAAA3tB,MAAQA,EAAK,MAAM;AAE/D,QAAIllD,IAAc6yE,GACdC,IAAQ,eAAexB,EAAW,MAAM,SAASA,EAAW,SAAS,IAAI,MAAM,EAAE,IACjFyB,IAAiB;AAGrB,aAAS7gG,IAAI,GAAGA,IAAI0/B,EAAM,QAAQ1/B,KAAK;AACrC,YAAMgzE,IAAOtzC,EAAM1/B,CAAC,GACd8gG,IAAY9tB,EAAK,YAAA;AACvB,UAAI8tB,EAAU,SAAS,QAAQ,KAAKA,EAAU,SAAS,kBAAkB,GAAG;AAC1E,QAAAF,IAAQ5tB,EAAK,QAAQ,iBAAiB,EAAE,EAAE,KAAA,GAC1C6tB,IAAiB7gG;AACjB;AAAA,MACF;AAAA,IACF;AAGA,WAAI6gG,KAAkB,MAEpB/yE,IADyB4R,EAAM,OAAO,CAACpjB,GAAGnY,MAAUA,MAAU08F,CAAc,EAC7C,KAAK;AAAA,CAAI,EAAE,KAAA,IAG5CX,GAAc,KAAK,gCAAgC;AAAA,MACjD,YAAYd,EAAW;AAAA,MACvB,mBAAmBtxE,EAAY;AAAA,MAC/B,OAAO8yE,EAAM,UAAU,GAAG,EAAE,IAAI;AAAA,MAChC,OAAAre;AAAA,IAAA,CACD,GAEM,EAAE,aAAAz0D,GAAa,OAAA8yE,EAAA;AAAA,EAExB,SAAStpG,GAAY;AACnB,IAAA4oG,GAAc,MAAM,iCAAiC;AAAA,MACnD,OAAO5oG,EAAM;AAAA,MACb,OAAAirF;AAAA,MACA,YAAY6c,EAAW;AAAA,MACvB,eAAeD,EAAO,UAAU,GAAG,GAAG,IAAI;AAAA,IAAA,CAC3C;AAGD,QAAI;AACF,MAAAe,GAAc,KAAK,qDAAqD;AAExE,YAAMQ,IAAgB,MAAM,QAAQ;AAAA,QAClCtB,EAAW,IAAI,OAAOvU,MAAS;AAC7B,gBAAMj5D,IAAS,MAAMqtE,GAAapU,CAAI;AAEtC,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW;AAAA,cACT,KAAK,QAJQ2V,GAAiB3V,CAAI,CAIb,WAAWj5D,CAAM;AAAA,YAAA;AAAA,UACxC;AAAA,QAEJ,CAAC;AAAA,MAAA,GAgBG3rB,KAAU+V,KAAA3R,KAbC,MAAMxF,EAAO,KAAK,YAAY,OAAO;AAAA,QACpD,OAAO;AAAA;AAAA,QACP,UAAU;AAAA,UACR;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,cACP,EAAE,MAAM,QAAQ,MAAMs6F,EAAA;AAAA,cACtB,GAAGuB;AAAA,YAAA;AAAA,UACL;AAAA,QACF;AAAA,MACF,CACD,GAEwB,QAAQ,CAAC,MAAlB,gBAAAr2F,EAAqB,YAArB,gBAAA2R,EAA8B;AAC9C,UAAI,CAAC/V;AACH,eAAAi6F,GAAc,KAAK,kDAAkD,GAC9D;AAIT,YAAMxgE,IAAQz5B,EAAQ,MAAM;AAAA,CAAI,EAAE,OAAO,CAAA+sE,MAAQA,EAAK,MAAM;AAC5D,UAAIllD,IAAc7nB,GACd26F,IAAQ,eAAexB,EAAW,MAAM,SAASA,EAAW,SAAS,IAAI,MAAM,EAAE,IACjFyB,IAAiB;AAErB,eAAS7gG,IAAI,GAAGA,IAAI0/B,EAAM,QAAQ1/B,KAAK;AACrC,cAAMgzE,IAAOtzC,EAAM1/B,CAAC,GACd8gG,IAAY9tB,EAAK,YAAA;AACvB,YAAI8tB,EAAU,SAAS,QAAQ,KAAKA,EAAU,SAAS,kBAAkB,GAAG;AAC1E,UAAAF,IAAQ5tB,EAAK,QAAQ,iBAAiB,EAAE,EAAE,KAAA,GAC1C6tB,IAAiB7gG;AACjB;AAAA,QACF;AAAA,MACF;AAGA,aAAI6gG,KAAkB,MAEpB/yE,IADyB4R,EAAM,OAAO,CAACpjB,GAAGnY,MAAUA,MAAU08F,CAAc,EAC7C,KAAK;AAAA,CAAI,EAAE,KAAA,IAGrC,EAAE,aAAA/yE,GAAa,OAAA8yE,EAAA;AAAA,IAExB,SAASG,GAAoB;AAC3B,YAAAb,GAAc,MAAM,wCAAwCa,EAAc,OAAO,GAC3EzpG;AAAA,IACR;AAAA,EACF;AACF,GAAG,MAAM85F,CAAM,GAsBJ4P,KAAkB,OAC7BC,GACA1e,IAAgB,aAChB6O,MAEOiP,GAAW,OAAOx7F,MAAW;AAClC,MAAI;AACF,IAAAq7F,GAAc,KAAK,gCAAgC;AAAA,MACjD,UAAUe,EAAU;AAAA,MACpB,UAAUA,EAAU;AAAA,MACpB,UAAUA,EAAU;AAAA,MACpB,OAAA1e;AAAA,IAAA,CACD;AASD,UAAM2e,KAPgB,MAAMr8F,EAAO,MAAM,eAAe,OAAO;AAAA,MAC7D,MAAMo8F;AAAA,MACN,OAAA1e;AAAA,MACA,iBAAiB;AAAA,MACjB,yBAAyB,CAAC,MAAM;AAAA,IAAA,CACjC,GAEqC;AAEtC,WAAK2e,KAKLhB,GAAc,KAAK,kCAAkC;AAAA,MACnD,YAAYgB,EAAgB;AAAA,MAC5B,aAAaA,EAAgB,UAAU,GAAG,GAAG,IAAI;AAAA,MACjD,OAAA3e;AAAA,IAAA,CACD,GAEM2e,MAVLhB,GAAc,KAAK,2CAA2C,GACvD;AAAA,EAUX,SAAS5oG,GAAY;AACnB,UAAA4oG,GAAc,MAAM,sCAAsC;AAAA,MACxD,OAAO5oG,EAAM;AAAA,MACb,UAAU2pG,EAAU;AAAA,MACpB,OAAA1e;AAAA,IAAA,CACD,GACKjrF;AAAA,EACR;AACF,GAAG,MAAM85F,CAAM,GCjeJ+P,KACX,uOAOWC,KAAiB,IA6BjBC,KAAuC;AAAA,EAClD,EAAE,IAAI,KAAK,MAAM,WAAW,QAAQ,kCAAkC,MAAM,IAAA;AAAA,EAC5E,EAAE,IAAI,KAAK,MAAM,iBAAiB,QAAQ,qDAAqD,MAAM,KAAA;AAAA,EACrG,EAAE,IAAI,KAAK,MAAM,mBAAmB,QAAQ,wDAAwD,MAAM,KAAA;AAAA,EAC1G,EAAE,IAAI,KAAK,MAAM,WAAW,QAAQ,2CAA2C,MAAM,QAAA;AAAA,EACrF,EAAE,IAAI,KAAK,MAAM,YAAY,QAAQ,+CAA+C,MAAM,KAAA;AAC5F,GC5EMC,KAAaC,GAAS;AAAA,EAC1B,OAAO7oE,GAAE,EAAS,IAAI,KAAK,wCAAwC,EAAE,SAAA;AAAA,EACrE,aAAaA,GAAE,EAAS,IAAI,KAAM,+CAA+C,EAAE,SAAA;AAAA,EACnF,SAAS8oE,GAAE;AACb,CAAC,GAeKC,KAAiB,CAAC;AAAA,EACtB,MAAAlnD;AAAA,EACA,cAAAJ;AAAA,EACA,WAAAqqB;AAAA,EACA,cAAAk9B;AAAA,EACA,oBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,UAAAn9B;AAAA,EACA,iBAAAo9B;AACF,MAA2B;AACzB,QAAM,CAAC55B,GAAUC,CAAW,IAAI9lE,GAAS,EAAK,GACxC,CAAC0/F,GAAcC,CAAe,IAAI3/F,GAAS,EAAK,GAChD,EAAE,MAAA++D,EAAA,IAASxqD,GAAA,GAGX,CAACqrF,GAAaC,CAAc,IAAI7/F,GAAS,EAAK,GAC9C,CAAC8/F,GAAgBC,CAAiB,IAAI//F,GAAS,EAAK,GACpDggG,IAAmBj+B,GAA6B,IAAI,GACpDk+B,IAAiBl+B,GAAe,EAAE,GAGlC,CAAC3C,GAAaC,CAAc,IAAIr/D,GAAuB,CAAA,CAAE,GACzD,CAAC0/D,GAAqBC,CAAsB,IAAI3/D,GAAsB,oBAAI,KAAK,GAC/E,CAACkgG,GAAoBC,CAAqB,IAAIngG,GAAS,EAAK,GAE5D0vD,IAAOE,GAAsB;AAAA,IACjC,UAAUwwC,GAAYlB,EAAU;AAAA,IAChC,eAAe;AAAA,MACb,OAAOI;AAAA,MACP,aAAaC,KAAsB;AAAA,MACnC,SAASC;AAAA,IAAA;AAAA,EACX,CACD;AAGD,EAAAp/F,GAAU,MAAM;AACd,IAAI+3C,KAAQ4mB,MACVmB,EAAA,GACAmgC,EAAA;AAAA,EAEJ,GAAG,CAACloD,GAAM4mB,GAAMqD,CAAS,CAAC;AAE1B,QAAMlC,IAAmB,YAAY;AACnC,QAAKnB,GAEL;AAAA,MAAAohC,EAAsB,EAAI;AAC1B,UAAI;AACF,cAAM,EAAE,MAAArgG,GAAM,OAAA5K,MAAU,MAAMgN,GAC3B,KAAK,aAAa,EAClB,OAAO,GAAG,EACV,GAAG,WAAW68D,EAAK,EAAE,EACrB,MAAM,cAAc,EAAE,WAAW,IAAO;AAE3C,YAAI7pE,EAAO,OAAMA;AACjB,QAAAmqE,EAAev/D,KAAQ,EAAE;AAAA,MAC3B,SAAS5K,GAAO;AACd,gBAAQ,MAAM,+BAA+BA,CAAK,GAClD0xE,GAAM,MAAM7zD,GAAU,4BAA4B,CAAC;AAAA,MACrD,UAAA;AACE,QAAAotF,EAAsB,EAAK;AAAA,MAC7B;AAAA;AAAA,EACF,GAEME,IAA0B,YAAY;AAC1C,QAAKthC;AAEL,UAAI;AACF,cAAM,EAAE,MAAAj/D,GAAM,OAAA5K,MAAU,MAAMgN,GAC3B,KAAK,qBAAqB,EAC1B,OAAO,eAAe,EACtB,GAAG,cAAckgE,CAAS;AAE7B,YAAIltE,EAAO,OAAMA;AAEjB,cAAMorG,IAAgB,IAAI,IAAIxgG,EAAK,IAAI,CAAAlK,MAAQA,EAAK,aAAa,CAAC;AAClE,QAAA+pE,EAAuB2gC,CAAa;AAAA,MACtC,SAASprG,GAAO;AACd,gBAAQ,MAAM,uCAAuCA,CAAK;AAAA,MAC5D;AAAA,EACF,GAEMqrG,IAAyB,OAAOC,MAAyB;AAC7D,QAAI,CAACzhC,EAAM;AAEX,UAAM5H,IAAauI,EAAoB,IAAI8gC,CAAY;AAEvD,QAAI;AACF,UAAIrpC,GAAY;AAEd,cAAM,EAAE,OAAAjiE,EAAA,IAAU,MAAMgN,GACrB,KAAK,qBAAqB,EAC1B,OAAA,EACA,GAAG,iBAAiBs+F,CAAY,EAChC,GAAG,cAAcp+B,CAAS;AAE7B,YAAIltE,EAAO,OAAMA;AAEjB,QAAAyqE,EAAuB,CAAAmB,MAAQ;AAC7B,gBAAM2/B,KAAS,IAAI,IAAI3/B,CAAI;AAC3B,iBAAA2/B,GAAO,OAAOD,CAAY,GACnBC;AAAA,QACT,CAAC,GAED75B,GAAM,QAAQ7zD,GAAU,yBAAyB,CAAC;AAAA,MACpD,OAAO;AAEL,cAAM,EAAE,OAAA7d,MAAU,MAAMgN,GACrB,KAAK,qBAAqB,EAC1B,OAAO;AAAA,UACN,eAAes+F;AAAA,UACf,YAAYp+B;AAAA,QAAA,CACb;AAEH,YAAIltE,EAAO,OAAMA;AAEjB,QAAAyqE,EAAuB,CAAAmB,0BAAY,IAAI,CAAC,GAAGA,GAAM0/B,CAAY,CAAC,CAAC,GAC/D55B,GAAM,QAAQ7zD,GAAU,qBAAqB,CAAC;AAAA,MAChD;AAAA,IACF,SAAS7d,GAAO;AACd,cAAQ,MAAM,8BAA8BA,CAAK,GACjD0xE,GAAM,MAAM7zD,GAAU,6BAA6B,CAAC;AAAA,IACtD;AAAA,EACF,GAEM2tF,IAAW,OAAO5gG,MAAuB;;AAC7C,QAAKi/D,GAEL;AAAA,MAAA+G,EAAY,EAAI;AAChB,UAAI;AACF,cAAM,EAAE,OAAA5wE,MAAU,MAAMgN,GACrB,KAAK,UAAU,EACf,OAAO;AAAA,UACN,SAAOJ,IAAAhC,EAAK,UAAL,gBAAAgC,EAAY,WAAU;AAAA,UAC7B,aAAahC,EAAK,eAAe;AAAA,UACjC,SAASA,EAAK;AAAA,UACd,aAAY,oBAAI,KAAA,GAAO,YAAA;AAAA,QAAY,CACpC,EACA,GAAG,MAAMsiE,CAAS,EAClB,GAAG,WAAWrD,EAAK,EAAE;AAExB,YAAI7pE,EAAO,OAAMA;AAEjB,QAAA0xE,GAAM,QAAQ7zD,GAAU,+BAA+B,CAAC,GACxD0sF,EAAA;AAAA,MACF,SAASvqG,GAAY;AACnB,gBAAQ,MAAM,2BAA2BA,CAAK,GAC9C0xE,GAAM,MAAM7zD,GAAU,0BAA0B,CAAC;AAAA,MACnD,UAAA;AACE,QAAA+yD,EAAY,EAAK;AAAA,MACnB;AAAA;AAAA,EACF,GAEM66B,IAAc,MAAM;AACxB,IAAAjxC,EAAK,MAAA,GACL3X,EAAa,EAAK;AAAA,EACpB,GAEM6oD,IAAsB,YAAY;AACtC,QAAI,CAACv+B,GAAU;AACb,MAAAuE,GAAM,MAAM7zD,GAAU,wBAAwB,CAAC;AAC/C;AAAA,IACF;AAEA,IAAA4sF,EAAgB,EAAI;AACpB,QAAI;AAGF,YAAMxhC,IAAO,OADI,MAAM,MAAMkE,CAAQ,GACT,KAAA,GACtBomB,IAAO,IAAI,KAAK,CAACtqB,CAAI,GAAG,aAAa,EAAE,MAAMA,EAAK,QAAQ,YAAA,CAAa,GAGvEx9D,IAAS,MAAM09F,GAAc,CAAC5V,CAAI,GAAGsW,EAAwB;AAEnE,UAAI,CAACp+F,GAAQ;AACX,QAAAimE,GAAM,MAAM7zD,GAAU,yFAAyF,CAAC;AAChH;AAAA,MACF;AAGA,MAAA28C,EAAK,SAAS,SAAS/uD,EAAO,KAAK,GACnC+uD,EAAK,SAAS,eAAe/uD,EAAO,WAAW,GAE/CimE,GAAM,QAAQ7zD,GAAU,kCAAkC,CAAC;AAAA,IAC7D,SAAS7d,GAAY;AACnB,cAAQ,MAAM,8BAA8BA,CAAK,GACjD0xE,GAAM,MAAM1xE,EAAM,WAAW6d,GAAU,gEAAgE,CAAC;AAAA,IAC1G,UAAA;AACE,MAAA4sF,EAAgB,EAAK;AAAA,IACvB;AAAA,EACF,GAEMkB,IAAmB,YAAY;AACnC,QAAIjB;AAEF,MAAII,EAAiB,WAAWA,EAAiB,QAAQ,UAAU,gBACjEA,EAAiB,QAAQ,KAAA,GACzBH,EAAe,EAAK;AAAA;AAItB,UAAI;AAEF,YAAI,CAAC,UAAU,gBAAgB,CAAC,UAAU,aAAa,cAAc;AACnE,UAAAj5B,GAAM,MAAM7zD,GAAU,kDAAkD,CAAC;AACzE;AAAA,QACF;AAEA,cAAMy5D,IAAS,MAAM,UAAU,aAAa,aAAa,EAAE,OAAO,IAAM,GAGlEz8C,IAAU,EAAE,UAAU,aAAA;AAC5B,YAAI+wE;AAEJ,YAAI;AACF,UAAAA,IAAgB,IAAI,cAAct0B,GAAQz8C,CAAO;AAAA,QACnD,QAAY;AAEV,UAAA+wE,IAAgB,IAAI,cAAct0B,CAAM;AAAA,QAC1C;AAEA,QAAAwzB,EAAiB,UAAUc,GAC3Bb,EAAe,UAAU,CAAA,GAEzBa,EAAc,kBAAkB,CAACzhE,MAAU;AACzC,UAAIA,EAAM,KAAK,OAAO,KACpB4gE,EAAe,QAAQ,KAAK5gE,EAAM,IAAI;AAAA,QAE1C,GAEAyhE,EAAc,SAAS,YAAY;AACjC,UAAAf,EAAkB,EAAI;AAEtB,cAAI;AACF,kBAAMgB,IAAY,IAAI,KAAKd,EAAe,SAAS,EAAE,MAAM,cAAc,GACnEpB,KAAY,IAAI,KAAK,CAACkC,CAAS,GAAG,kBAAkB,EAAE,MAAM,cAAc;AAEhF,YAAAn6B,GAAM,KAAK7zD,GAAU,uBAAuB,CAAC;AAC7C,kBAAM+rF,KAAkB,MAAMF,GAAgBC,EAAS;AAEvD,gBAAIC,IAAiB;AAGnB,oBAAMkC,MADqBtxC,EAAK,UAAU,aAAa,KAAK,IACzB,KAAA,GAC7BuxC,KAAiBD,KAAU,GAAGA,EAAO;AAAA;AAAA,EAAOlC,EAAe,KAAKA;AAEtE,cAAApvC,EAAK,SAAS,eAAeuxC,EAAc,GAC3Cr6B,GAAM,QAAQ7zD,GAAU,iCAAiC,CAAC;AAAA,YAC5D;AACE,cAAA6zD,GAAM,MAAM7zD,GAAU,+DAA+D,CAAC;AAAA,UAE1F,SAAS7d,GAAY;AACnB,oBAAQ,MAAM,6BAA6BA,CAAK,GAChD0xE,GAAM,MAAM1xE,EAAM,WAAW6d,GAAU,4BAA4B,CAAC;AAAA,UACtE,UAAA;AACE,YAAAgtF,EAAkB,EAAK,GACvBE,EAAe,UAAU,CAAA,GAGzBzzB,EAAO,YAAY,QAAQ,CAAA00B,MAASA,EAAM,MAAM;AAAA,UAClD;AAAA,QACF,GAEAJ,EAAc,MAAA,GACdjB,EAAe,EAAI,GACnBj5B,GAAM,KAAK7zD,GAAU,0CAA0C,CAAC;AAAA,MAElE,SAAS7d,GAAY;AACnB,gBAAQ,MAAM,+BAA+BA,CAAK,GAC9CA,EAAM,SAAS,oBACjB0xE,GAAM,MAAM7zD,GAAU,oFAAoF,CAAC,IAE3G6zD,GAAM,MAAM7zD,GAAU,6BAA6B,IAAI,OAAO7d,EAAM,OAAO;AAAA,MAE/E;AAAA,EAEJ;AAEA,SACEgK,gBAAAA,EAAAA,IAACy4C,MAAO,MAAAQ,GAAY,cAAcwoD,GAChC,UAAAxhG,gBAAAA,EAAAA,KAACm6C,IAAA,EAAc,WAAU,0CACvB,UAAA;AAAA,IAAAp6C,gBAAAA,MAACi9C,IAAA,EACC,UAAAh9C,gBAAAA,EAAAA,KAACm7C,IAAA,EAAY,WAAU,2BACrB,UAAA;AAAA,MAAAp7C,gBAAAA,EAAAA,IAACiiG,IAAA,EAAM,WAAU,UAAA,CAAU;AAAA,MAC3BjiG,gBAAAA,EAAAA,IAACwV,MAAE,UAAA,eAAA,CAAY;AAAA,IAAA,EAAA,CACjB,EAAA,CACF;AAAA,IAEAvV,gBAAAA,EAAAA,KAACg3D,IAAA,EAAK,cAAa,QAAO,WAAU,UAClC,UAAA;AAAA,MAAAh3D,gBAAAA,EAAAA,KAACu3D,IAAA,EAAS,WAAU,2BAClB,UAAA;AAAA,QAAAv3D,gBAAAA,EAAAA,KAAC23D,IAAA,EAAY,OAAM,QAAO,WAAU,2BAClC,UAAA;AAAA,UAAA53D,gBAAAA,EAAAA,IAACiiG,IAAA,EAAM,WAAU,UAAA,CAAU;AAAA,UAC3BjiG,gBAAAA,EAAAA,IAACwV,MAAE,UAAA,eAAA,CAAY;AAAA,QAAA,GACjB;AAAA,QACAvV,gBAAAA,EAAAA,KAAC23D,IAAA,EAAY,OAAM,eAAc,WAAU,2BACzC,UAAA;AAAA,UAAA53D,gBAAAA,EAAAA,IAACkiG,IAAA,EAAS,WAAU,UAAA,CAAU;AAAA,UAC9BliG,gBAAAA,EAAAA,IAACwV,MAAE,UAAA,cAAA,CAAW;AAAA,QAAA,GAChB;AAAA,QACAvV,gBAAAA,EAAAA,KAAC23D,IAAA,EAAY,OAAM,YAAW,WAAU,2BACtC,UAAA;AAAA,UAAA53D,gBAAAA,EAAAA,IAACmiG,IAAA,EAAU,WAAU,UAAA,CAAU;AAAA,UAC/BniG,gBAAAA,EAAAA,IAACwV,MAAE,UAAA,WAAA,CAAQ;AAAA,QAAA,EAAA,CACb;AAAA,MAAA,GACF;AAAA,4BAEC4iD,IAAA,EAAY,OAAM,QAAO,WAAU,QAClC,gCAACnH,IAAA,EAAM,GAAGT,GACR,UAAAvwD,gBAAAA,OAAC,UAAK,UAAUuwD,EAAK,aAAagxC,CAAQ,GAAG,WAAU,aAEpD,UAAA;AAAA,QAAAr+B,KACCnjE,gBAAAA,EAAAA;AAAAA,UAAC+U;AAAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,WAAU;AAAA,YACV,SAAS2sF;AAAA,YACT,UAAUlB,KAAgB75B;AAAA,YAEzB,cACC1mE,gBAAAA,EAAAA,KAAA+6C,EAAAA,UAAA,EACE,UAAA;AAAA,cAAAh7C,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,sFAAA,CAAsF;AAAA,cACrGA,gBAAAA,EAAAA,IAACwV,MAAE,UAAA,gBAAA,CAAa;AAAA,YAAA,EAAA,CAClB,IAEAvV,gBAAAA,EAAAA,KAAA+6C,EAAAA,UAAA,EACE,UAAA;AAAA,cAAAh7C,gBAAAA,EAAAA,IAACoiG,IAAA,EAAS,WAAU,eAAA,CAAe;AAAA,cACnCpiG,gBAAAA,EAAAA,IAACwV,MAAE,UAAA,uCAAA,CAAoC;AAAA,YAAA,EAAA,CACzC;AAAA,UAAA;AAAA,QAAA;AAAA,QAKNxV,gBAAAA,EAAAA;AAAAA,UAACmxD;AAAA,UAAA;AAAA,YACC,SAASX,EAAK;AAAA,YACd,MAAK;AAAA,YACL,QAAQ,CAAC,EAAE,OAAAlO,EAAA,6BACRkP,IAAA,EACC,UAAA;AAAA,cAAAxxD,gBAAAA,MAACyxD,IAAA,EAAU,UAAAzxD,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,UAAA,mBAAA,CAAgB,GAAI;AAAA,oCACjCm8C,IAAA,EACE,UAAA3xD,gBAAAA,EAAAA;AAAAA,gBAACo9C;AAAA,gBAAA;AAAA,kBACA,aAAavpC,GAAU,kBAAkB;AAAA,kBACxC,GAAGyuC;AAAA,kBACJ,WAAW,CAAC7tD,MAAM;AAChB,qBAAKA,EAAE,WAAWA,EAAE,YAAYA,EAAE,QAAQ,YACxCA,EAAE,eAAA,GACF+7D,EAAK,aAAagxC,CAAQ,EAAA;AAAA,kBAE9B;AAAA,gBAAA;AAAA,cAAA,GAEJ;AAAA,oCACCzvC,IAAA,CAAA,CAAY;AAAA,YAAA,EAAA,CACf;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJ/xD,gBAAAA,EAAAA;AAAAA,UAACmxD;AAAA,UAAA;AAAA,YACC,SAASX,EAAK;AAAA,YACd,MAAK;AAAA,YACL,QAAQ,CAAC,EAAE,OAAAlO,EAAA,6BACRkP,IAAA,EACC,UAAA;AAAA,cAAAvxD,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,gBAAAD,gBAAAA,MAACyxD,IAAA,EAAU,UAAAzxD,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,UAAA,yBAAA,CAAsB,GAAI;AAAA,gBACxCxV,gBAAAA,EAAAA;AAAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAS2hG;AAAA,oBACT,UAAUf,KAAkBj6B;AAAA,oBAC5B,WAAW,sCACT+5B,IACI,6CACA,6DACN;AAAA,oBACA,OAAO7sF,GAAU6sF,IAAc,mBAAmB,cAAc;AAAA,oBAE/D,UAAAE,IACC5gG,gBAAAA,EAAAA,IAACqiG,IAAA,EAAQ,WAAU,wBAAuB,IACxC3B,IACF1gG,gBAAAA,EAAAA,IAACsiG,IAAA,EAAO,WAAU,WAAU,IAE5BtiG,gBAAAA,EAAAA,IAACuiG,IAAA,EAAI,WAAU,UAAA,CAAU;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAE7B,GACF;AAAA,oCACC5wC,IAAA,EACE,UAAA3xD,gBAAAA,EAAAA;AAAAA,gBAACsiE;AAAAA,gBAAA;AAAA,kBACC,OAAOhgB,EAAM,SAAS;AAAA,kBACtB,UAAUA,EAAM;AAAA,kBAChB,aAAazuC,GAAU,6DAA6D;AAAA,kBACpF,WAAU;AAAA,kBACV,WAAW,CAACpf,MAAM;AAChB,qBAAKA,EAAE,WAAWA,EAAE,YAAYA,EAAE,QAAQ,YACxCA,EAAE,eAAA,GACF+7D,EAAK,aAAagxC,CAAQ,EAAA;AAAA,kBAE9B;AAAA,gBAAA;AAAA,cAAA,GAEL;AAAA,oCACCzvC,IAAA,CAAA,CAAY;AAAA,YAAA,EAAA,CACf;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJ/xD,gBAAAA,EAAAA;AAAAA,UAACmxD;AAAA,UAAA;AAAA,YACC,SAASX,EAAK;AAAA,YACd,MAAK;AAAA,YACL,QAAQ,CAAC,EAAE,OAAAlO,QACTriD,gBAAAA,EAAAA,KAACuxD,IAAA,EAAS,WAAU,oEAClB,UAAA;AAAA,cAAAvxD,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,gBAAAD,gBAAAA,EAAAA,IAACyxD,MAAU,WAAU,aACnB,UAAAzxD,gBAAAA,MAACwV,IAAA,EAAE,qBAAO,EAAA,CACZ;AAAA,sCACC,OAAA,EAAI,WAAU,iCACb,UAAAxV,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,iDAAmC,EAAA,CACxC;AAAA,cAAA,GACF;AAAA,oCACCm8C,IAAA,EACC,UAAA3xD,gBAAAA,EAAAA;AAAAA,gBAAC05D;AAAA,gBAAA;AAAA,kBACC,SAASpX,EAAM;AAAA,kBACf,iBAAiBA,EAAM;AAAA,gBAAA;AAAA,cAAA,EACzB,CACF;AAAA,YAAA,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJriD,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,UAAAD,gBAAAA,EAAAA;AAAAA,YAAC+U;AAAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,WAAU;AAAA,cACV,SAAS0sF;AAAA,cACT,UAAU96B;AAAA,cAEV,UAAA3mE,gBAAAA,EAAAA,IAACwV,MAAE,UAAA,SAAA,CAAM;AAAA,YAAA;AAAA,UAAA;AAAA,UAEXxV,gBAAAA,EAAAA;AAAAA,YAAC+U;AAAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,UAAU4xD;AAAA,cAEV,UAAA3mE,gBAAAA,EAAAA,IAACwV,IAAA,EAAG,UAAAmxD,IAAW,gBAAgB,SAAA,CAAS;AAAA,YAAA;AAAA,UAAA;AAAA,QAC1C,EAAA,CACF;AAAA,MAAA,EAAA,CACF,GACF,GACF;AAAA,MAEA3mE,gBAAAA,EAAAA,IAACo4D,MAAY,OAAM,eAAc,WAAU,QACzC,UAAAn4D,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,aACZ,UAAA;AAAA,QAAA+gG,0BACE,OAAA,EAAI,WAAU,yCACb,UAAAhhG,gBAAAA,EAAAA,IAACqiG,MAAQ,WAAU,6CAAA,CAA6C,GAClE,IACEniC,EAAY,WAAW,IACzBjgE,gBAAAA,OAAC,OAAA,EAAI,WAAU,oBACb,UAAA;AAAA,UAAAD,gBAAAA,EAAAA,IAACkiG,IAAA,EAAS,WAAU,0DAAA,CAA0D;AAAA,gCAC7E,KAAA,EAAE,WAAU,8BACX,UAAAliG,gBAAAA,MAACwV,IAAA,EAAE,gCAAkB,EAAA,CACvB;AAAA,UACAxV,gBAAAA,EAAAA;AAAAA,YAAC+U;AAAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,SAAS,MAAM;AACb,gBAAA0sF,EAAA,GAEA,OAAO,SAAS,OAAO;AAAA,cACzB;AAAA,cAEA,UAAAzhG,gBAAAA,EAAAA,IAACwV,MAAE,UAAA,oBAAA,CAAiB;AAAA,YAAA;AAAA,UAAA;AAAA,QACtB,EAAA,CACF,0BAEC,OAAA,EAAI,WAAU,sCACZ,UAAA0qD,EAAY,IAAI,CAAC+B,MAChBjiE,gBAAAA,EAAAA;AAAAA,UAAC28D;AAAA,UAAA;AAAA,YAEC,WAAW,oCACT6D,EAAoB,IAAIyB,EAAW,EAAE,IACjC,iCACA,mBACN;AAAA,YACA,SAAS,MAAMo/B,EAAuBp/B,EAAW,EAAE;AAAA,YAEnD,gCAAClF,IAAA,EAAY,WAAU,OACrB,UAAA98D,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,cAAAA,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,gBAAAA,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,kBAAAD,gBAAAA,EAAAA,IAAC,MAAA,EAAG,WAAU,eAAe,UAAAiiE,EAAW,MAAK;AAAA,kBAC5C,CAACA,EAAW,mCACV,QAAA,EAAK,WAAU,iCAAgC,UAAA,YAAA,CAAS;AAAA,gBAAA,GAE7D;AAAA,gBACCA,EAAW,eACVjiE,gBAAAA,EAAAA,IAAC,OAAE,WAAU,8CACV,YAAW,YAAA,CACd;AAAA,cAAA,GAEJ;AAAA,cACAA,gBAAAA,EAAAA;AAAAA,gBAACk8D;AAAA,gBAAA;AAAA,kBACC,SAASsE,EAAoB,IAAIyB,EAAW,EAAE;AAAA,kBAC9C,iBAAiB,MAAMo/B,EAAuBp/B,EAAW,EAAE;AAAA,kBAC3D,SAAS,CAACxtE,MAAMA,EAAE,gBAAA;AAAA,gBAAgB;AAAA,cAAA;AAAA,YACpC,EAAA,CACF,EAAA,CACF;AAAA,UAAA;AAAA,UA7BKwtE,EAAW;AAAA,QAAA,CA+BnB,GACH;AAAA,8BAGD,OAAA,EAAI,WAAU,kDACb,UAAAjiE,gBAAAA,EAAAA,IAACwV,IAAA,EACE,YAAoB,SAAS,IAC1B,2BACAgrD,EAAoB,SAAS,IAC7B,oBACA,MAAMA,EAAoB,IAAI,gBACpC,EAAA,CACF;AAAA,MAAA,EAAA,CACF,EAAA,CACF;AAAA,MAEAxgE,gBAAAA,EAAAA,IAACo4D,IAAA,EAAY,OAAM,YAAW,WAAU,QACtC,UAAAp4D,gBAAAA,EAAAA;AAAAA,QAACsmE;AAAA,QAAA;AAAA,UACC,kBAAkBpD;AAAA,UAClB,iBAAiBq9B;AAAA,QAAA;AAAA,MAAA,EACnB,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;ACvjBA,IAAIiC,KAAc,SAAUC,GAAKC,GAAS;AACtC,SAAO,OAAOD,EAAI,QAAQC,CAAO,CAAC;AACtC,GAMIC,KAAgB,SAAUF,GAAKv1D,GAAc;AAC7C,SAAO,OAAOu1D,KAAQ,WAAWA,IAAMv1D;AAC3C,GAEI01D,KAAiB,SAAUjrG,GAASwoC,GAAO3G,GAAU;AACrD,EAAIA,KAAY,OAAOA,KAAa,cAChCA,EAAS7hC,GAASwoC,CAAK;AAE/B,GAQI0iE,KAAU,SAAUltF,GAAG;AACvB,SAAO,CAAC,KAAK,IAAIA,IAAI,KAAK,EAAE,IAAI,IAAI;AACxC,GAEImtF,KAAS,SAAUntF,GAAG;AACtB,SAAOA;AACX,GAEIotF,KAAa,SAAUptF,GAAG;AAC1B,SAAOA,IAAIA;AACf,GAEIqtF,KAAc,SAAUrtF,GAAG;AAC3B,SAAOA,KAAK,IAAIA;AACpB,GAEIstF,KAAgB,SAAUttF,GAAG;AAC7B,SAAOA,IAAI,MAAM,IAAIA,IAAIA,IAAI,MAAM,IAAI,IAAIA,KAAKA;AACpD,GAEIutF,KAAc,SAAUvtF,GAAG;AAC3B,SAAOA,IAAIA,IAAIA;AACnB,GAEIwtF,KAAe,SAAUxtF,GAAG;AAC5B,SAAO,EAAEA,IAAIA,IAAIA,IAAI;AACzB,GAEIytF,KAAiB,SAAUztF,GAAG;AAC9B,SAAOA,IAAI,MAAM,IAAIA,IAAIA,IAAIA,KAAKA,IAAI,MAAM,IAAIA,IAAI,MAAM,IAAIA,IAAI,KAAK;AAC3E,GAEI0tF,KAAc,SAAU1tF,GAAG;AAC3B,SAAOA,IAAIA,IAAIA,IAAIA;AACvB,GAEI2tF,KAAe,SAAU3tF,GAAG;AAC5B,SAAO,IAAI,EAAEA,IAAIA,IAAIA,IAAIA;AAC7B,GAEI4tF,KAAiB,SAAU5tF,GAAG;AAC9B,SAAOA,IAAI,MAAM,IAAIA,IAAIA,IAAIA,IAAIA,IAAI,IAAI,IAAI,EAAEA,IAAIA,IAAIA,IAAIA;AAC/D,GAEI6tF,KAAc,SAAU7tF,GAAG;AAC3B,SAAOA,IAAIA,IAAIA,IAAIA,IAAIA;AAC3B,GAEI8tF,KAAe,SAAU9tF,GAAG;AAC5B,SAAO,IAAI,EAAEA,IAAIA,IAAIA,IAAIA,IAAIA;AACjC,GAEI+tF,KAAiB,SAAU/tF,GAAG;AAC9B,SAAOA,IAAI,MAAM,KAAKA,IAAIA,IAAIA,IAAIA,IAAIA,IAAI,IAAI,KAAK,EAAEA,IAAIA,IAAIA,IAAIA,IAAIA;AACzE,GACIguF,KAAa;AAAA,EACb,SAASd;AAAA,EACT,QAAQC;AAAA,EACR,YAAYC;AAAA,EACZ,aAAaC;AAAA,EACb,eAAeC;AAAA,EACf,aAAaC;AAAA,EACb,cAAcC;AAAA,EACd,gBAAgBC;AAAA,EAChB,aAAaC;AAAA,EACb,cAAcC;AAAA,EACd,gBAAgBC;AAAA,EAChB,aAAaC;AAAA,EACb,cAAcC;AAAA,EACd,gBAAgBC;AACpB,GAGIE,KAA6B,SAAUC,GAAW;AAClD,EAAI,OAAOA,KAAc,YACrB,qBAAqBA,CAAS;AAEtC,GACIC,KAAwB,SAAUC,GAAiB;AACnD,EAAKA,EAAgB,YAErBH,GAA2BG,EAAgB,SAAS,GAEpDA,EAAgB,UAAU,IAC1BA,EAAgB,YAAY,MAC5BA,EAAgB,WAAW;AAC/B;AACA,SAASC,GAAqBD,GAAiBE,GAAeC,GAAe1qE,GAAU;AACnF,MAAKuqE,EAAgB,SAErB;AAAA,QAAI7vB,KAAY,oBAAI,KAAI,GAAG,QAAO,GAC9BiwB,IAAW;AAEf,IAAAL,GAAsBC,CAAe,GAErCA,EAAgB,YAAY,WAAY;AACpC,UAAI,CAACA,EAAgB;AACjB,eAAOH,GAA2BG,EAAgB,SAAS;AAE/D,UAAIK,KAAY,oBAAI,QAAO,QAAO,IAAKlwB,GACnCmwB,IAAoBD,IAAYF,GAChCI,IAAgBX,GAAWM,CAAa,GACxCnlG,IAAOwlG,EAAcD,CAAiB;AAC1C,MAAID,KAAaF,KACb1qE,EAAS2qE,CAAQ,GACjBJ,EAAgB,YAAY,QAEvBA,EAAgB,cACrBvqE,EAAS16B,CAAI,GACb,sBAAsBilG,EAAgB,SAAS;AAAA,IAEvD,GACA,sBAAsBA,EAAgB,SAAS;AAAA;AACnD;AACA,SAASQ,GAAmBC,GAAa;AACrC,MAAI/wF,IAAQ+wF,EAAY,OAAOC,IAAYD,EAAY,WAAWE,IAAYF,EAAY;AAC1F,SAAI,SAAO,MAAM/wF,CAAK,KAClB,OAAO,MAAMgxF,CAAS,KACtB,OAAO,MAAMC,CAAS;AAI9B;AACA,SAASC,GAAQZ,GAAiBS,GAAaN,GAAeD,GAAe;AACzE,MAAIj4E,IAAUu4E,GAAmBC,CAAW;AAC5C,MAAI,GAACT,EAAgB,WAAW,CAAC/3E,IAEjC;AAAA,QAAI44E,IAAoBb,EAAgB,mBACpCnhG,IAAKmhG,EAAgB,gBAAgBtwF,IAAQ7Q,EAAG,OAAO6hG,IAAY7hG,EAAG,WAAW8hG,IAAY9hG,EAAG,WAChGiiG,IAAYL,EAAY,QAAQ/wF,GAChCqxF,IAAgBN,EAAY,YAAYC,GACxCM,IAAgBP,EAAY,YAAYE;AAC5C,IAAIR,MAAkB,IAClBU,EAAkBJ,EAAY,OAAOA,EAAY,WAAWA,EAAY,SAAS,IAIjFR,GAAqBD,GAAiBE,GAAeC,GAAe,SAAUplG,GAAM;AAChF,UAAIkmG,IAAWvxF,IAAQoxF,IAAY/lG,GAC/BmmG,IAAeR,IAAYK,IAAgBhmG,GAC3ComG,IAAeR,IAAYK,IAAgBjmG;AAC/C,MAAA8lG,EAAkBI,GAAUC,GAAcC,CAAY;AAAA,IAC1D,CAAC;AAAA;AAET;AAGA,SAASC,GAAmBC,GAAkBC,GAAkBL,GAAU;AACtE,MAAIM,IAAeF,EAAiB,aAChCG,IAAgBH,EAAiB,cACjCI,IAAeH,EAAiB,aAChCI,IAAgBJ,EAAiB,cACjCK,IAAkBF,IAAeR,GACjCW,IAAmBF,IAAgBT,GACnCY,IAAeN,IAAeI,GAC9BG,IAAgBN,IAAgBI;AACpC,SAAO;AAAA,IACH,cAAcL;AAAA,IACd,eAAeC;AAAA,IACf,iBAAiBG;AAAA,IACjB,cAAcE;AAAA,IACd,kBAAkBD;AAAA,IAClB,eAAeE;AAAA,EACvB;AACA;AACA,IAAIC,KAAY,SAAUR,GAAcI,GAAiBK,GAAWR,GAAeI,GAAkBK,GAAYC,GAAiB;AAC9H,MAAIC,IAAmBZ,IAAeI,IAChCK,KAAaE,IAAkB,IAAI,OACnC,GACFE,IAAoBZ,IAAgBI,IAClCK,KAAcC,IAAkB,IAAI,OACpC,GACFG,IAAed,IAAeI,IAAkBQ,GAChDG,IAAeH,GACfI,IAAef,IAAgBI,IAAmBQ,GAClDI,IAAeJ;AACnB,SAAO,EAAE,cAAcC,GAAc,cAAcC,GAAc,cAAcC,GAAc,cAAcC,EAAY;AAC3H,GACIC,KAAkB,SAAUzC,GAAiBiB,GAAU;AACvD,MAAII,IAAmBrB,EAAgB,kBAAkBsB,IAAmBtB,EAAgB,kBACxFkC,IAAkBlC,EAAgB,MAAM;AAC5C,MAAI,CAACqB,KAAoB,CAACC;AACtB,UAAM,IAAI,MAAM,4BAA4B;AAEhD,MAAIziG,IAAKuiG,GAAmBC,GAAkBC,GAAkBL,CAAQ,GAAGM,IAAe1iG,EAAG,cAAc2iG,IAAgB3iG,EAAG,eAAe8iG,IAAkB9iG,EAAG,iBAAiBgjG,IAAehjG,EAAG,cAAc+iG,IAAmB/iG,EAAG,kBAAkBijG,IAAgBjjG,EAAG,eAC1Q6jG,IAASX,GAAUR,GAAcI,GAAiBE,GAAcL,GAAeI,GAAkBE,GAAe,EAAQI,CAAgB;AAC5I,SAAOQ;AACX,GAQIC,KAAe,SAAU5qG,GAAO6qG,GAAUC,GAAUC,GAAU;AAC9D,SAAKA,IAED/qG,IAAQ6qG,IACDnE,GAAYmE,GAAU,CAAC,IAC9B7qG,IAAQ8qG,IACDpE,GAAYoE,GAAU,CAAC,IAC3BpE,GAAY1mG,GAAO,CAAC,IALhB0mG,GAAY1mG,GAAO,CAAC;AAMnC,GACIgrG,KAAwB,SAAU/C,GAAiBiB,GAAU;AAC7D,MAAIyB,IAASD,GAAgBzC,GAAiBiB,CAAQ;AAEtD,SAAAjB,EAAgB,SAAS0C,GAClBA;AACX;AACA,SAASM,GAAwBtC,GAAWC,GAAW+B,GAAQO,GAAeC,GAAeC,GAAe9B,GAAkB;AAC1H,MAAIgB,IAAeK,EAAO,cAAcH,IAAeG,EAAO,cAAcJ,IAAeI,EAAO,cAAcF,IAAeE,EAAO,cAClIU,IAAW,GACXC,IAAW;AACf,EAAIhC,MACA+B,IAAWF,GACXG,IAAWF;AAEf,MAAI9tG,IAAIstG,GAAajC,GAAW2B,IAAee,GAAUd,IAAec,GAAUH,CAAa,GAC3FntF,IAAI6sF,GAAahC,GAAW4B,IAAec,GAAUb,IAAea,GAAUJ,CAAa;AAC/F,SAAO,EAAE,GAAG5tG,GAAG,GAAGygB,EAAC;AACvB;AAEA,SAASwtF,GAA6BtD,GAAiBuD,GAAQC,GAAQvC,GAAUyB,GAAQO,GAAe;AACpG,MAAIpkG,IAAKmhG,EAAgB,gBAAgBtwF,IAAQ7Q,EAAG,OAAO6hG,IAAY7hG,EAAG,WAAW8hG,IAAY9hG,EAAG,WAChG4kG,IAAkBxC,IAAWvxF;AACjC,MAAI,OAAO6zF,KAAW,YAAY,OAAOC,KAAW;AAChD,mBAAQ,MAAM,2CAA2C,GAClD,EAAE,GAAG9C,GAAW,GAAGC,EAAS;AAEvC,MAAI+C,IAAsBhD,IAAY6C,IAASE,GAC3CE,IAAsBhD,IAAY6C,IAASC,GAG3CG,IAAeZ,GAAwBU,GAAqBC,GAAqBjB,GAAQO,GAAe,GAAG,GAAG,IAAI;AACtH,SAAOW;AACX;AACA,SAASC,GAAgBC,GAAMC,GAAUC,GAAUC,GAAaC,GAAe;AAC3E,MAAIC,IAAeD,IAAgBD,IAAc,GAC7CG,IAAsBL,IAAWI;AACrC,SAAI,CAAC,OAAO,MAAMH,CAAQ,KAAKF,KAAQE,IAC5BA,IACP,CAAC,OAAO,MAAMD,CAAQ,KAAKD,KAAQM,IAC5BA,IACJN;AACX;AAEA,IAAIO,KAAwB,SAAUrE,GAAiB5jE,GAAO;AAC1D,MAAIkoE,IAAWtE,EAAgB,MAAM,QAAQ,UACzCuE,IAAgBvE,EAAgB,eAAeqB,IAAmBrB,EAAgB,kBAClF51E,IAASgS,EAAM,QACfooE,IAAoB,gBAAgBp6E,KAAU,kBAAkBgS,GAChEqoE,IAAiBD,IACfpoE,EAAM,aAAY,EAAG,KAAK,SAAUrW,GAAI;AACtC,WAAMA,aAAc,UAGbs7E,KAAqB,OAAsC,SAASA,EAAiB,SAASt7E,CAAE,IAF5F;AAAA,EAGf,CAAC,IACCs7E,KAAqB,OAAsC,SAASA,EAAiB,SAASj3E,CAAM,GACtGs6E,IAAYH,KAAiBn6E,KAAUq6E;AAC3C,MAAI,CAACC;AACD,WAAO;AACX,MAAIC,IAAaC,GAAex6E,GAAQk6E,CAAQ;AAChD,SAAI,CAAAK;AAGR,GACIE,KAAmB,SAAU7E,GAAiB;AAC9C,MAAIuE,IAAgBvE,EAAgB,eAAe8E,IAAY9E,EAAgB,WAAW+E,IAAQ/E,EAAgB,OAC9GrkD,IAAWopD,EAAM,QAAQ,UACzBL,IAAYH,KAAiBO,KAAa,CAACnpD;AAC/C,SAAK,EAAA+oD;AAGT,GACIM,KAAqB,SAAUhF,GAAiB5jE,GAAO;AACvD,MAAIv9B,IAAKmhG,EAAgB,gBAAgBU,IAAY7hG,EAAG,WAAW8hG,IAAY9hG,EAAG;AAClF,EAAAmhG,EAAgB,YAAY;AAE5B,MAAI3qG,IAAI+mC,EAAM,SACVtmB,IAAIsmB,EAAM;AACd,EAAA4jE,EAAgB,cAAc,EAAE,GAAG3qG,IAAIqrG,GAAW,GAAG5qF,IAAI6qF,EAAS;AACtE,GACIsE,KAA0B,SAAUjF,GAAiB5jE,GAAO;AAC5D,MAAI8oE,IAAU9oE,EAAM,SAChBv9B,IAAKmhG,EAAgB,gBAAgBU,IAAY7hG,EAAG,WAAW8hG,IAAY9hG,EAAG;AAClF,EAAAmhG,EAAgB,YAAY;AAE5B,MAAImF,IAAiBD,EAAQ,WAAW;AACxC,MAAIC,GAAgB;AAChB,QAAI9vG,IAAI6vG,EAAQ,CAAC,EAAE,SACfpvF,IAAIovF,EAAQ,CAAC,EAAE;AACnB,IAAAlF,EAAgB,cAAc,EAAE,GAAG3qG,IAAIqrG,GAAW,GAAG5qF,IAAI6qF,EAAS;AAAA,EACtE;AACJ;AACA,SAASyE,GAAkBpF,GAAiB;AACxC,MAAInhG,IAAKmhG,EAAgB,gBAAgBU,IAAY7hG,EAAG,WAAW8hG,IAAY9hG,EAAG,WAAW6Q,IAAQ7Q,EAAG,OACpGmG,IAAKg7F,EAAgB,OAAOrkD,IAAW32C,EAAG,UAAUi+F,IAAgBj+F,EAAG,eAAek9F,IAAkBl9F,EAAG,iBAC3Gq8F,IAAmBrB,EAAgB;AACvC,MAAI,EAAArkD,KAAY,CAAC0lD,KAAoB,CAACrB,EAAgB,SAEtD;AAAA,QAAIrpF,IAAKqpF,EAAgB,QAAQsC,IAAe3rF,EAAG,cAAc0rF,IAAe1rF,EAAG,cAAc6rF,IAAe7rF,EAAG,cAAc4rF,IAAe5rF,EAAG,cAC/I0uF,IAAW3E,IAAY4B,KAAgB5B,IAAY2B,GACnDiD,IAAW3E,IAAY6B,KAAgB7B,IAAY4B,GACnDgD,IAAY7E,IAAY4B,IACtBjB,EAAiB,cACjBrB,EAAgB,MAAM,gBAAgB,GACxCwF,IAAY7E,IAAY6B,IACtBnB,EAAiB,eACjBrB,EAAgB,MAAM,gBAAgB,GACxCppF,IAAK0sF,GAA6BtD,GAAiBuF,GAAWC,GAAW91F,GAAOswF,EAAgB,QAAQiD,KAAiBf,CAAe,GAAG7sG,IAAIuhB,EAAG,GAAGd,IAAIc,EAAG;AAChK,WAAO;AAAA,MACH,OAAOlH;AAAA,MACP,WAAW21F,IAAWhwG,IAAIqrG;AAAA,MAC1B,WAAW4E,IAAWxvF,IAAI6qF;AAAA,IAClC;AAAA;AACA;AACA,SAAS8E,GAAkBzF,GAAiBkB,GAAcC,GAAc+B,GAAeC,GAAe;AAClG,MAAIF,IAAgBjD,EAAgB,MAAM,eACtCqB,IAAmBrB,EAAgB,kBAAkB0C,IAAS1C,EAAgB,QAC9EnhG,IAAKmhG,EAAgB,gBAAgBtwF,IAAQ7Q,EAAG,OAAO6hG,IAAY7hG,EAAG,WAAW8hG,IAAY9hG,EAAG;AACpG,MAAI,EAAAwiG,MAAqB,QACrBqB,MAAW,QACVxB,MAAiBR,KAAaS,MAAiBR,IAGpD;AAAA,QAAI37F,IAAKg+F,GAAwB9B,GAAcC,GAAcuB,GAAQO,GAAeC,GAAeC,GAAe9B,CAAgB,GAAGhsG,IAAI2P,EAAG,GAAG8Q,IAAI9Q,EAAG;AACtJ,IAAAg7F,EAAgB,kBAAkBtwF,GAAOra,GAAGygB,CAAC;AAAA;AACjD;AACA,IAAI4vF,KAA2B,SAAU1F,GAAiB2F,GAASC,GAAS;AACxE,MAAIC,IAAc7F,EAAgB,aAAa8F,IAAiB9F,EAAgB,gBAC5E+F,IAAU/F,EAAgB,MAAM,SAChCgG,IAAYD,EAAQ,WAAWE,IAAYF,EAAQ,WACnDrF,IAAYoF,EAAe,WAAWnF,IAAYmF,EAAe;AACrE,MAAI,CAACD;AACD,WAAO,EAAE,GAAGnF,GAAW,GAAGC,EAAS;AAEvC,MAAI4C,IAASoC,IAAUE,EAAY,GAC/BrC,IAASoC,IAAUC,EAAY,GAC/B3E,IAAe8E,IAAYtF,IAAY6C,GACvCpC,IAAe8E,IAAYtF,IAAY6C;AAC3C,SAAO,EAAE,GAAGtC,GAAcC,EAAe;AAC7C,GACI+E,KAAkB,SAAUlG,GAAiB/uF,GAAM;AACnD,MAAI8zF,IAAQ/E,EAAgB,OAAO8F,IAAiB9F,EAAgB,gBAChEtwF,IAAQo2F,EAAe,OACvB/B,IAAWgB,EAAM,UAAUoB,IAAiBpB,EAAM;AACtD,SAAI9zF,IAAO,KAAKvB,KAASq0F,KAAY,CAACoC,IAC3Bl1F,IAEJ;AACX,GAEIm1F,KAA+B,SAAUpG,GAAiB;AAC1D,MAAIx5D,IAAUw5D,EAAgB,SAC1BnhG,IAAKmhG,EAAgB,OAAOrkD,IAAW98C,EAAG,UAAUwnG,IAAoBxnG,EAAG,mBAC3E6Q,IAAQswF,EAAgB,eAAe,OACvCsG,IAAmBD,EAAkB,UACrC3B,IAAY,CAAC4B,KAAoB52F,IAAQ,KAAK,CAACisC,KAAYnV;AAC/D,SAAK,EAAAk+D;AAGT,GACI6B,KAAoB,SAAUvG,GAAiB;AAC/C,MAAIx5D,IAAUw5D,EAAgB,SAASwG,IAAWxG,EAAgB,UAAU0C,IAAS1C,EAAgB,QACjGnhG,IAAKmhG,EAAgB,OAAOrkD,IAAW98C,EAAG,UAAUwnG,IAAoBxnG,EAAG,mBAC3E6Q,IAAQswF,EAAgB,eAAe,OACvCsG,IAAmBD,EAAkB,UACrC3B,IAAY,CAAC4B,KAAoB52F,IAAQ,KAAK,CAACisC,KAAYnV;AAG/D,SAFI,GAACk+D,KAED,CAAC8B,KAAY,CAAC9D;AAGtB;AACA,SAAS+D,GAAoBzG,GAAiBwG,GAAU;AACpD,MAAIH,IAAoBrG,EAAgB,MAAM,mBAC1C0G,IAAcL,EAAkB,aAAalG,IAAgBkG,EAAkB,eAAeM,IAAcN,EAAkB;AAClI,SAAIK,IACOvG,IAAgBqG,IAAWG,IAE/BxG;AACX;AACA,SAASyG,GAAoBC,GAAaC,GAAeC,GAAiBC,GAAU/D,GAAegE,GAAaC,GAAaC,GAAWC,GAAWrsG,GAAM;AACrJ,MAAIkoG,GAAe;AACf,QAAI6D,IAAgBI,KAAeH,IAAkBG,GAAa;AAC9D,UAAIG,IAAqBH,KAAeL,IAAcK,KAAensG;AACrE,aAAIssG,IAAqBD,IACdA,IACPC,IAAqBH,IACdA,IACJG;AAAA,IACX;AACA,QAAIP,IAAgBG,KAAeF,IAAkBE,GAAa;AAC9D,UAAII,IAAqBJ,KAAeJ,IAAcI,KAAelsG;AACrE,aAAIssG,IAAqBF,IACdA,IACPE,IAAqBJ,IACdA,IACJI;AAAA,IACX;AAAA,EACJ;AACA,SAAIL,IACOF,IACJnE,GAAakE,GAAaI,GAAaC,GAAajE,CAAa;AAC5E;AAEA,SAASqE,GAAkBjG,GAAkBqF,GAAa;AACtD,MAAIa,IAAoB;AACxB,SAAIb,IACO,KAAK,IAAIa,GAAmBlG,EAAiB,cAAc,OAAO,UAAU,IAEhFkG;AACX;AACA,SAASC,GAAwBxH,GAAiBhwD,GAAU;AACxD,MAAI00D,IAAY0B,GAA6BpG,CAAe;AAC5D,MAAK0E,GAGL;AAAA,QAAI+C,IAAoBzH,EAAgB,mBAAmB0H,IAAe1H,EAAgB,cAAc+E,IAAQ/E,EAAgB,OAC5HqB,IAAmBrB,EAAgB,kBACnC0G,IAAc3B,EAAM,kBAAkB,aACtC4C,IAAM,KAAK,IAAG;AAClB,QAAIF,KAAqBC,KAAgBrG,GAAkB;AACvD,UAAIuG,IAAiBN,GAAkBjG,GAAkBqF,CAAW,GAChEmB,IAAY73D,EAAS,IAAIy3D,EAAkB,GAC3CK,IAAY93D,EAAS,IAAIy3D,EAAkB,GAC3CM,IAAYF,IAAYD,GACxBI,IAAYF,IAAYF,GACxBK,IAAWN,IAAMD,GACjBQ,IAAQL,IAAYA,IAAYC,IAAYA,GAC5CtB,IAAW,KAAK,KAAK0B,CAAK,IAAID;AAClC,MAAAjI,EAAgB,WAAW,EAAE,WAAW+H,GAAW,WAAWC,GAAW,OAAOxB,EAAQ;AAAA,IAC5F;AACA,IAAAxG,EAAgB,oBAAoBhwD,GACpCgwD,EAAgB,eAAe2H;AAAA;AACnC;AACA,SAASQ,GAAsBnI,GAAiB;AAC5C,MAAIwG,IAAWxG,EAAgB,UAAU0C,IAAS1C,EAAgB,QAAQ+E,IAAQ/E,EAAgB,OAAOqB,IAAmBrB,EAAgB,kBACxI0E,IAAY6B,GAAkBvG,CAAe;AACjD,MAAI,GAAC0E,KAAa,CAAC8B,KAAY,CAAC9D,KAAU,CAACrB,IAG3C;AAAA,QAAI0G,IAAYvB,EAAS,WAAWwB,IAAYxB,EAAS,WAAW/tB,IAAQ+tB,EAAS,OACjFlE,IAAeI,EAAO,cAAcL,IAAeK,EAAO,cAAcF,IAAeE,EAAO,cAAcH,IAAeG,EAAO,cAClIO,IAAgB8B,EAAM,eAAeqD,IAAqBrD,EAAM,oBAChEsD,IAAgBtD,EAAM,eAAegB,IAAUhB,EAAM,SACrDkB,IAAYF,EAAQ,WAAWC,IAAYD,EAAQ,WACnDxF,IAAgB8H,EAAc,eAC9BC,IAAQF,EAAmB,OAAOG,IAAQH,EAAmB,OAAOI,IAAwBJ,EAAmB,uBAC/GK,IAAqBD,GACrBE,IAAoBjC,GAAoBzG,GAAiBvnB,CAAK,GAC9DkwB,IAAqB,KAAK,IAAID,GAAmBD,CAAkB,GACnEvF,IAAgBgD,GAAgBlG,GAAiBsI,CAAK,GACtDnF,IAAgB+C,GAAgBlG,GAAiBuI,CAAK,GACtDnF,IAAYF,IAAgB7B,EAAiB,cAAe,KAC5DgC,IAAYF,IAAgB9B,EAAiB,eAAgB,KAC7DuH,IAAatG,IAAec,GAC5ByF,IAAaxG,IAAee,GAC5B0F,IAAatG,IAAea,GAC5B0F,IAAaxG,IAAec,GAC5B2F,IAAahJ,EAAgB,gBAC7B7vB,KAAY,oBAAI,KAAI,GAAG,QAAO;AAClC,IAAA8vB,GAAqBD,GAAiBO,GAAeoI,GAAoB,SAAU5tG,GAAM;AACrF,UAAI8D,KAAKmhG,EAAgB,gBAAgBtwF,KAAQ7Q,GAAG,OAAO6hG,KAAY7hG,GAAG,WAAW8hG,KAAY9hG,GAAG,WAChGwhG,MAAY,oBAAI,QAAO,QAAO,IAAKlwB,GACnCmwB,KAAoBD,KAAYoI,GAChCQ,KAAiBrJ,GAAWwI,EAAmB,aAAa,GAC5Dc,KAAY,IAAID,GAAe,KAAK,IAAI,GAAG3I,EAAiB,CAAC,GAC7D6I,KAAa,IAAIpuG,GACjBmmG,KAAeR,KAAYqH,IAAYoB,IACvChI,KAAeR,KAAYqH,IAAYmB,IACvCC,KAAmBxC,GAAoB1F,IAAc8H,EAAW,WAAWtI,IAAWsF,GAAW/C,GAAeZ,GAAcC,GAAcuG,GAAYD,GAAYM,EAAS,GAC7KG,KAAmBzC,GAAoBzF,IAAc6H,EAAW,WAAWrI,IAAWsF,GAAWhD,GAAeV,GAAcC,GAAcuG,GAAYD,GAAYI,EAAS;AACjL,OAAIxI,OAAcQ,MAAgBP,OAAcQ,OAC5CnB,EAAgB,kBAAkBtwF,IAAO05F,IAAkBC,EAAgB;AAAA,IAEnF,CAAC;AAAA;AACL;AAEA,SAASC,GAAmBtJ,GAAiB5jE,GAAO;AAChD,MAAI1sB,IAAQswF,EAAgB,eAAe;AAC3C,EAAAD,GAAsBC,CAAe,GACrC+C,GAAsB/C,GAAiBtwF,CAAK,GACxC,OAAO,eAAe,UAAa0sB,aAAiB,aACpD6oE,GAAwBjF,GAAiB5jE,CAAK,IAG9C4oE,GAAmBhF,GAAiB5jE,CAAK;AAEjD;AACA,SAASmtE,GAAoBvJ,GAAiBwJ,GAAqB;AAC/D,MAAI95F,IAAQswF,EAAgB,eAAe,OACvCnhG,IAAKmhG,EAAgB,OAAO+D,IAAWllG,EAAG,UAAUupG,IAAqBvpG,EAAG,oBAC5E88C,IAAWysD,EAAmB,UAAUE,IAAQF,EAAmB,OAAOG,IAAQH,EAAmB,OAAOjI,IAAgBiI,EAAmB,eAAe7H,IAAgB6H,EAAmB,eACjMqB,IAAa9tD,KAAYjsC,IAAQq0F,KAAa,CAACuE,KAAS,CAACC;AAC7D,MAAI,CAAAkB,GAEJ;AAAA,QAAIhJ,IAAc2E,GAAkBpF,CAAe;AACnD,IAAIS,KACAG,GAAQZ,GAAiBS,GAAa+I,KAAuFrJ,GAAeI,CAAa;AAAA;AAEjK;AACA,SAASmJ,GAAc1J,GAAiB2F,GAASC,GAAS;AACtD,MAAIC,IAAc7F,EAAgB,aAAa+E,IAAQ/E,EAAgB,OACnEnhG,IAAKkmG,EAAM,oBAAoBuD,IAAQzpG,EAAG,OAAO0pG,IAAQ1pG,EAAG;AAChE,MAAKgnG,GAEL;AAAA,QAAI7gG,IAAK0gG,GAAyB1F,GAAiB2F,GAASC,CAAO,GAAGvwG,IAAI2P,EAAG,GAAG8Q,IAAI9Q,EAAG,GACnFk+F,IAAgBgD,GAAgBlG,GAAiBsI,CAAK,GACtDnF,IAAgB+C,GAAgBlG,GAAiBuI,CAAK;AAC1D,IAAAf,GAAwBxH,GAAiB,EAAE,GAAG3qG,GAAG,GAAGygB,GAAG,GACvD2vF,GAAkBzF,GAAiB3qG,GAAGygB,GAAGotF,GAAeC,CAAa;AAAA;AACzE;AACA,SAASwG,GAAiB3J,GAAiB;AACvC,MAAIA,EAAgB,WAAW;AAC3B,QAAI4J,IAAmB5J,EAAgB,MAAM,QAAQ,kBACjDwG,IAAWxG,EAAgB,UAAUqB,IAAmBrB,EAAgB,kBAAkBsB,IAAmBtB,EAAgB;AACjI,IAAAA,EAAgB,YAAY,IAC5BA,EAAgB,UAAU,IAC1BA,EAAgB,YAAY;AAC5B,QAAI6J,IAAcxI,KAAqB,OAAsC,SAASA,EAAiB,sBAAqB,GACxHyI,IAAcxI,KAAqB,OAAsC,SAASA,EAAiB,sBAAqB,GACxHC,KAAgBsI,KAAgB,OAAiC,SAASA,EAAY,UAAU,GAChGrI,KAAiBqI,KAAgB,OAAiC,SAASA,EAAY,WAAW,GAClGpI,KAAgBqI,KAAgB,OAAiC,SAASA,EAAY,UAAU,GAChGpI,KAAiBoI,KAAgB,OAAiC,SAASA,EAAY,WAAW,GAClGC,IAAWxI,IAAeE,KAAgBD,IAAgBE,GAC1DsI,IAAgB,CAACJ,KAAoBpD,MAAaA,KAAa,OAA8B,SAASA,EAAS,SAAS,OAAOuD;AACnI,IAAIC,IACA7B,GAAsBnI,CAAe,IAGrCuJ,GAAoBvJ,CAAe;AAAA,EAE3C;AACJ;AAEA,SAASiK,GAAkBjK,GAAiBtwF,GAAO6zF,GAAQC,GAAQ;AAC/D,MAAI3kG,IAAKmhG,EAAgB,OAAO+D,IAAWllG,EAAG,UAAUmlG,IAAWnlG,EAAG,UAAUokG,IAAgBpkG,EAAG,eAC/FoiG,IAAW4C,GAAgBpF,GAAY/uF,GAAO,CAAC,GAAGq0F,GAAUC,GAAU,GAAG,EAAK,GAC9EtB,IAASK,GAAsB/C,GAAiBiB,CAAQ,GACxDj8F,IAAKs+F,GAA6BtD,GAAiBuD,GAAQC,GAAQvC,GAAUyB,GAAQO,CAAa,GAAG5tG,IAAI2P,EAAG,GAAG8Q,IAAI9Q,EAAG;AAC1H,SAAO,EAAE,OAAOi8F,GAAU,WAAW5rG,GAAG,WAAWygB,EAAC;AACxD;AACA,SAASo0F,GAAyBlK,GAAiBmK,GAAgBC,GAAgB;AAC/E,MAAI16F,IAAQswF,EAAgB,eAAe,OACvCqB,IAAmBrB,EAAgB,kBACnCnhG,IAAKmhG,EAAgB,OAAO+D,IAAWllG,EAAG,UAAUokG,IAAgBpkG,EAAG,eAAewpG,IAAgBxpG,EAAG,eACzG88C,IAAW0sD,EAAc,UAAUlI,IAAgBkI,EAAc,eAAe9H,IAAgB8H,EAAc,eAC9GoB,IAAa9tD,KAAYjsC,KAASq0F;AAKtC,OAJIr0F,KAAS,KAAKuzF,MAEdsG,GAAoBvJ,CAAe,GAEnC,EAAAyJ,KAAc,CAACpI,KAAoB,CAACrB,EAAgB,UAExD;AAAA,QAAIuD,IAAS4G,KAAkB9I,EAAiB,cAAc,GAC1DmC,IAAS4G,KAAkB/I,EAAiB,eAAe,GAC3DZ,IAAcwJ,GAAkBjK,GAAiB+D,GAAUR,GAAQC,CAAM;AAC7E,IAAI/C,KACAG,GAAQZ,GAAiBS,GAAaN,GAAeI,CAAa;AAAA;AAE1E;AAiBA,IAAIl4D,KAAW,WAAW;AACtB,SAAAA,KAAW,OAAO,UAAU,SAAkB,GAAG;AAC7C,aAAShyC,GAAGsE,IAAI,GAAGzK,IAAI,UAAU,QAAQyK,IAAIzK,GAAGyK,KAAK;AACjD,MAAAtE,IAAI,UAAUsE,CAAC;AACf,eAASxK,KAAKkG,EAAG,CAAI,OAAO,UAAU,eAAe,KAAKA,GAAGlG,CAAC,MAAG,EAAEA,CAAC,IAAIkG,EAAElG,CAAC;AAAA,IAC/E;AACA,WAAO;AAAA,EACX,GACOk4C,GAAS,MAAM,MAAM,SAAS;AACzC;AAcA,SAASE,GAAc3Q,GAAID,GAAM6Q,GAAM;AACC,WAAS7tC,IAAI,GAAG3K,IAAI2nC,EAAK,QAAQ8Q,GAAI9tC,IAAI3K,GAAG2K;AAC5E,KAAI8tC,KAAM,EAAE9tC,KAAKg9B,QACR8Q,MAAIA,IAAK,MAAM,UAAU,MAAM,KAAK9Q,GAAM,GAAGh9B,CAAC,IACnD8tC,EAAG9tC,CAAC,IAAIg9B,EAAKh9B,CAAC;AAGtB,SAAOi9B,EAAG,OAAO6Q,KAAM,MAAM,UAAU,MAAM,KAAK9Q,CAAI,CAAC;AAC3D;AAOA,IAAIgP,KAAe;AAAA,EAEf,OAAO;AAAA,EACP,WAAW;AAAA,EACX,WAAW;AACf,GACI0jE,KAAe;AAAA,EACf,UAAU;AAAA,EACV,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,UAAU;AAAA,EACV,UAAU;AAAA,EACV,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,QAAQ;AAAA,EACR,OAAO;AAAA,IACH,MAAM;AAAA,IACN,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,kBAAkB;AAAA,IAClB,gBAAgB,CAAA;AAAA,IAChB,UAAU,CAAA;AAAA,EAClB;AAAA,EACI,SAAS;AAAA,IACL,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,WAAW;AAAA,IACX,mBAAmB;AAAA,IACnB,qBAAqB;AAAA,IACrB,oBAAoB;AAAA,IACpB,cAAc;AAAA,IACd,gBAAgB,CAAA;AAAA,IAChB,UAAU,CAAA;AAAA,EAClB;AAAA,EACI,OAAO;AAAA,IACH,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU,CAAA;AAAA,EAClB;AAAA,EACI,aAAa;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,eAAe;AAAA,IACf,eAAe;AAAA,IACf,UAAU,CAAA;AAAA,EAClB;AAAA,EACI,eAAe;AAAA,IACX,UAAU;AAAA,IACV,MAAM;AAAA,IACN,eAAe;AAAA,IACf,eAAe;AAAA,EACvB;AAAA,EACI,oBAAoB;AAAA,IAChB,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,eAAe;AAAA,IACf,uBAAuB;AAAA,IACvB,eAAe;AAAA,EACvB;AAAA,EACI,mBAAmB;AAAA,IACf,UAAU;AAAA,IACV,aAAa;AAAA,IACb,eAAe;AAAA,IACf,eAAe;AAAA,IACf,aAAa;AAAA,EACrB;AACA,GACIC,KAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAClB,GAEIC,KAAc,SAAU11G,GAAO;AAC/B,MAAIgK,GAAImG,GAAI2R,GAAIC;AAChB,SAAO;AAAA,IACH,gBAAgB/X,IAAKhK,EAAM,kBAAkB,QAAQgK,MAAO,SAASA,IAAK8nC,GAAa;AAAA,IACvF,QAAQ3hC,IAAKnQ,EAAM,kBAAkB,QAAQmQ,MAAO,SAASA,IAAK2hC,GAAa;AAAA,IAC/E,YAAYhwB,IAAK9hB,EAAM,sBAAsB,QAAQ8hB,MAAO,SAASA,IAAKgwB,GAAa;AAAA,IACvF,YAAY/vB,IAAK/hB,EAAM,sBAAsB,QAAQ+hB,MAAO,SAASA,IAAK+vB,GAAa;AAAA,EAC/F;AACA,GACI6jE,KAAc,SAAU31G,GAAO;AAC/B,MAAI41G,IAAWpiE,GAAS,CAAA,GAAIgiE,EAAY;AACxC,gBAAO,KAAKx1G,CAAK,EAAE,QAAQ,SAAUsE,GAAK;AACtC,QAAIuxG,IAAa,OAAO71G,EAAMsE,CAAG,IAAM,KACnCwxG,IAAiB,OAAON,GAAalxG,CAAG,IAAM;AAClD,QAAIwxG,KAAkBD,GAAY;AAC9B,UAAIE,IAAW,OAAO,UAAU,SAAS,KAAKP,GAAalxG,CAAG,CAAC,GAC3DugD,IAAWkxD,MAAa,mBACxB/yG,IAAU+yG,MAAa;AAC3B,MAAIlxD,IACA+wD,EAAStxG,CAAG,IAAIkvC,GAASA,GAAS,CAAA,GAAIgiE,GAAalxG,CAAG,CAAC,GAAGtE,EAAMsE,CAAG,CAAC,IAE/DtB,IACL4yG,EAAStxG,CAAG,IAAIovC,GAAcA,GAAc,CAAA,GAAI8hE,GAAalxG,CAAG,GAAG,EAAI,GAAGtE,EAAMsE,CAAG,CAAO,IAG1FsxG,EAAStxG,CAAG,IAAItE,EAAMsE,CAAG;AAAA,IAEjC;AAAA,EACJ,CAAC,GACMsxG;AACX,GAEII,KAA4B,SAAU7K,GAAiBtwD,GAAO30C,GAAM;AACpE,MAAI2U,IAAQswF,EAAgB,eAAe,OACvCqB,IAAmBrB,EAAgB,kBAAkB+E,IAAQ/E,EAAgB,OAC7EgE,IAAWe,EAAM,UAAUhB,IAAWgB,EAAM,UAAUsD,IAAgBtD,EAAM,eAAe+F,IAAS/F,EAAM,QAC1G9zF,IAAOo3F,EAAc;AACzB,MAAI,CAAChH;AACD,UAAM,IAAI,MAAM,wBAAwB;AAE5C,MAAI0J,IAAcD,IACZp7F,IAAQ,KAAK,IAAIggC,IAAQ30C,CAAI,IAC7B2U,IAAQggC,IAAQ30C,GAClBkmG,IAAW4C,GAAgBpF,GAAYsM,GAAa,CAAC,GAAGhH,GAAUC,GAAU/yF,GAAM,EAAK;AAC3F,SAAOgwF;AACX;AACA,SAAS+J,GAAuBhL,GAAiBtwD,GAAO30C,GAAMolG,GAAeI,GAAe;AACxF,MAAIc,IAAmBrB,EAAgB,kBACnCnhG,IAAKmhG,EAAgB,gBAAgBtwF,IAAQ7Q,EAAG,OAAO6hG,IAAY7hG,EAAG,WAAW8hG,IAAY9hG,EAAG;AACpG,MAAI,CAACwiG;AACD,WAAO,QAAQ,MAAM,2BAA2B;AACpD,MAAIE,IAAeF,EAAiB,aAChCG,IAAgBH,EAAiB,cACjCkC,KAAUhC,IAAe,IAAIb,KAAahxF,GAC1C8zF,KAAUhC,IAAgB,IAAIb,KAAajxF,GAC3CuxF,IAAW4J,GAA0B7K,GAAiBtwD,GAAO30C,CAAI,GACjE0lG,IAAcwJ,GAAkBjK,GAAiBiB,GAAUsC,GAAQC,CAAM;AAC7E,MAAI,CAAC/C;AACD,WAAO,QAAQ,MAAM,uEAAuE;AAEhG,EAAAG,GAAQZ,GAAiBS,GAAaN,GAAeI,CAAa;AACtE;AACA,SAAS0K,GAAqBjL,GAAiBG,GAAeI,GAAe2K,GAAuB;AAChG,MAAInG,IAAQ/E,EAAgB,OAAOqB,IAAmBrB,EAAgB,kBAClEiD,IAAgB8B,EAAM,eACtBoG,IAAwBZ,GAAYvK,EAAgB,KAAK,GACzDnhG,IAAKmhG,EAAgB,gBAAgBtwF,IAAQ7Q,EAAG,OAAO6hG,IAAY7hG,EAAG,WAAW8hG,IAAY9hG,EAAG;AACpG,MAAKwiG,GAEL;AAAA,QAAI+J,IAAY3I,GAAgBzC,GAAiBmL,EAAsB,KAAK,GACxEE,IAAmBrI,GAAwBmI,EAAsB,WAAWA,EAAsB,WAAWC,GAAWnI,GAAe,GAAG,GAAG5B,CAAgB,GAC7JiK,IAAW;AAAA,MACX,OAAOH,EAAsB;AAAA,MAC7B,WAAWE,EAAiB;AAAA,MAC5B,WAAWA,EAAiB;AAAA,IACpC;AACI,IAAI37F,MAAUy7F,EAAsB,SAChCzK,MAAcyK,EAAsB,aACpCxK,MAAcwK,EAAsB,cAGxCD,KAA0B,QAAoDA,EAAqB,GACnGtK,GAAQZ,GAAiBsL,GAAUnL,GAAeI,CAAa;AAAA;AACnE;AACA,SAASzzD,GAAU91C,GAASu0G,GAAS3qG,GAASimC,GAAO;AACjD,MAAI2kE,IAASx0G,EAAQ,sBAAqB,GACtCy0G,IAAgBF,EAAQ,sBAAqB,GAC7CG,IAAgB9qG,EAAQ,sBAAqB,GAC7C+qG,IAAOF,EAAc,IAAI5kE,EAAM,OAC/B+kE,IAAOH,EAAc,IAAI5kE,EAAM;AACnC,SAAO;AAAA,IACH,IAAI2kE,EAAO,IAAIE,EAAc,IAAIC,KAAQ9kE,EAAM;AAAA,IAC/C,IAAI2kE,EAAO,IAAIE,EAAc,IAAIE,KAAQ/kE,EAAM;AAAA,EACvD;AACA;AACA,SAASglE,GAAoB7L,GAAiBtlG,GAAMoxG,GAAY;AAC5D,MAAIzK,IAAmBrB,EAAgB,kBAAkBsB,IAAmBtB,EAAgB,kBAAkB8F,IAAiB9F,EAAgB,gBAC3InhG,IAAKmhG,EAAgB,OAAOiD,IAAgBpkG,EAAG,eAAeklG,IAAWllG,EAAG,UAAUmlG,IAAWnlG,EAAG;AACxG,MAAI,CAACwiG,KAAoB,CAACC;AACtB,WAAOwE;AACX,MAAI+D,IAAcxI,EAAiB,sBAAqB,GACpD0K,IAAWrxG,EAAK,sBAAqB,GACrCsxG,IAAal/D,GAAUpyC,GAAM2mG,GAAkBC,GAAkBwE,CAAc,GAC/EmG,IAAWD,EAAW,GACtBE,IAAUF,EAAW,GACrBG,IAAYJ,EAAS,QAAQjG,EAAe,OAC5CsG,IAAaL,EAAS,SAASjG,EAAe,OAC9CuG,IAAShL,EAAiB,cAAc8K,GACxCG,IAASjL,EAAiB,eAAe+K,GACzCnL,IAAW4C,GAAgBiI,KAAc,KAAK,IAAIO,GAAQC,CAAM,GAAGvI,GAAUC,GAAU,GAAG,EAAK,GAC/FuI,KAAW1C,EAAY,QAAQsC,IAAYlL,KAAY,GACvDuL,KAAW3C,EAAY,SAASuC,IAAanL,KAAY,GACzDC,KAAgB2I,EAAY,OAAOoC,KAAYhL,IAAWsL,GAC1DpL,KAAgB0I,EAAY,MAAMqC,KAAWjL,IAAWuL,GACxD9J,IAASD,GAAgBzC,GAAiBiB,CAAQ,GAClDj8F,IAAKg+F,GAAwB9B,GAAcC,GAAcuB,GAAQO,GAAe,GAAG,GAAG5B,CAAgB,GAAGhsG,IAAI2P,EAAG,GAAG8Q,IAAI9Q,EAAG;AAC9H,SAAO,EAAE,WAAW3P,GAAG,WAAWygB,GAAG,OAAOmrF,EAAQ;AACxD;AAEA,IAAIwL,KAAS,SAAUzM,GAAiB;AACpC,SAAO,SAAUjlG,GAAMolG,GAAeI,GAAe;AACjD,IAAIxlG,MAAS,WAAUA,IAAO,MAC1BolG,MAAkB,WAAUA,IAAgB,MAC5CI,MAAkB,WAAUA,IAAgB,YAChDyK,GAAuBhL,GAAiB,GAAGjlG,GAAMolG,GAAeI,CAAa;AAAA,EACjF;AACJ,GACImM,KAAU,SAAU1M,GAAiB;AACrC,SAAO,SAAUjlG,GAAMolG,GAAeI,GAAe;AACjD,IAAIxlG,MAAS,WAAUA,IAAO,MAC1BolG,MAAkB,WAAUA,IAAgB,MAC5CI,MAAkB,WAAUA,IAAgB,YAChDyK,GAAuBhL,GAAiB,IAAIjlG,GAAMolG,GAAeI,CAAa;AAAA,EAClF;AACJ,GACIoM,KAAe,SAAU3M,GAAiB;AAC1C,SAAO,SAAUkB,GAAcC,GAAcF,GAAUd,GAAeI,GAAe;AACjF,IAAIJ,MAAkB,WAAUA,IAAgB,MAC5CI,MAAkB,WAAUA,IAAgB;AAChD,QAAI1hG,IAAKmhG,EAAgB,gBAAgBU,IAAY7hG,EAAG,WAAW8hG,IAAY9hG,EAAG,WAAW6Q,IAAQ7Q,EAAG,OACpGwiG,IAAmBrB,EAAgB,kBAAkBsB,IAAmBtB,EAAgB,kBACxFrkD,IAAWqkD,EAAgB,MAAM;AACrC,QAAI,EAAArkD,KAAY,CAAC0lD,KAAoB,CAACC,IAEtC;AAAA,UAAIb,IAAc;AAAA,QACd,WAAW,OAAO,MAAMS,CAAY,IAAIR,IAAYQ;AAAA,QACpD,WAAW,OAAO,MAAMC,CAAY,IAAIR,IAAYQ;AAAA,QACpD,OAAO,OAAO,MAAMF,CAAQ,IAAIvxF,IAAQuxF;AAAA,MACpD;AACQ,MAAAL,GAAQZ,GAAiBS,GAAaN,GAAeI,CAAa;AAAA;AAAA,EACtE;AACJ,GACIqM,KAAiB,SAAU5M,GAAiB;AAC5C,SAAO,SAAUG,GAAeI,GAAe;AAC3C,IAAIJ,MAAkB,WAAUA,IAAgB,MAC5CI,MAAkB,WAAUA,IAAgB,YAChD0K,GAAqBjL,GAAiBG,GAAeI,CAAa;AAAA,EACtE;AACJ,GACIsM,KAAa,SAAU7M,GAAiB;AACxC,SAAO,SAAUtwF,GAAOywF,GAAeI,GAAe;AAClD,IAAIJ,MAAkB,WAAUA,IAAgB,MAC5CI,MAAkB,WAAUA,IAAgB;AAChD,QAAIuF,IAAiB9F,EAAgB,gBAAgBqB,IAAmBrB,EAAgB,kBAAkBsB,IAAmBtB,EAAgB;AAC7I,QAAIqB,KAAoBC,GAAkB;AACtC,UAAIb,IAAcqM,GAAkBp9F,KAASo2F,EAAe,OAAOzE,GAAkBC,CAAgB;AACrG,MAAAV,GAAQZ,GAAiBS,GAAaN,GAAeI,CAAa;AAAA,IACtE;AAAA,EACJ;AACJ,GACIwM,KAAgB,SAAU/M,GAAiB;AAC3C,SAAO,SAAUtlG,GAAMgV,GAAOywF,GAAeI,GAAe;AACxD,IAAIJ,MAAkB,WAAUA,IAAgB,MAC5CI,MAAkB,WAAUA,IAAgB,YAChDR,GAAsBC,CAAe;AACrC,QAAIqB,IAAmBrB,EAAgB,kBACnC51E,IAAS,OAAO1vB,KAAS,WAAW,SAAS,eAAeA,CAAI,IAAIA;AACxE,QAAI2mG,KAAoBj3E,KAAUi3E,EAAiB,SAASj3E,CAAM,GAAG;AACjE,UAAIq2E,IAAcoL,GAAoB7L,GAAiB51E,GAAQ1a,CAAK;AACpE,MAAAkxF,GAAQZ,GAAiBS,GAAaN,GAAeI,CAAa;AAAA,IACtE;AAAA,EACJ;AACJ,GAEIyM,KAAc,SAAUhN,GAAiB;AACzC,SAAO;AAAA,IACH,UAAUA;AAAA,IACV,QAAQyM,GAAOzM,CAAe;AAAA,IAC9B,SAAS0M,GAAQ1M,CAAe;AAAA,IAChC,cAAc2M,GAAa3M,CAAe;AAAA,IAC1C,gBAAgB4M,GAAe5M,CAAe;AAAA,IAC9C,YAAY6M,GAAW7M,CAAe;AAAA,IACtC,eAAe+M,GAAc/M,CAAe;AAAA,EACpD;AACA,GACIvqD,KAAW,SAAUuqD,GAAiB;AACtC,SAAO;AAAA,IACH,UAAUA;AAAA,IACV,OAAOA,EAAgB;AAAA,EAC/B;AACA,GACIiN,KAAa,SAAUjN,GAAiB;AACxC,MAAI5mG,IAAM,CAAA;AACV,gBAAO,OAAOA,GAAKq8C,GAASuqD,CAAe,CAAC,GAC5C,OAAO,OAAO5mG,GAAK4zG,GAAYhN,CAAe,CAAC,GACxC5mG;AACX,GAKI20C,KAAmB;AACvB,SAASm/D,KAAyB;AAC9B,MAAI;AACA,QAAIpgF,IAAU;AAAA,MACV,IAAI,UAAU;AAGV,eAAAihB,KAAmB,IACZ;AAAA,MACX;AAAA,IACZ;AACQ,WAAOjhB;AAAA,EACX,QACY;AACR,WAAAihB,KAAmB,IACZA;AAAA,EACX;AACJ;AAEA,IAAIo/D,KAAc,IAAI,OAAO7C,GAAY,YAAY,GACjD1F,KAAiB,SAAUlqG,GAAM4pG,GAAU;AAC3C,SAAOA,EAAS,KAAK,SAAU8I,GAAS;AACpC,WAAO1yG,EAAK,QAAQ,GAAG,OAAOyyG,IAAa,GAAG,EAAE,OAAOC,GAAS,IAAI,EAAE,OAAOD,IAAa,IAAI,EAAE,OAAOC,GAAS,IAAI,EAAE,OAAOD,IAAa,GAAG,EAAE,OAAOC,GAAS,MAAM,EAAE,OAAOD,IAAa,IAAI,EAAE,OAAOC,GAAS,IAAI,CAAC;AAAA,EAC1N,CAAC;AACL,GACIC,KAAgB,SAAUhf,GAAS;AACnC,EAAIA,KACA,aAAaA,CAAO;AAE5B,GAEIif,KAAqB,SAAUj4G,GAAGygB,GAAGpG,GAAO;AAE5C,SAAO,aAAa,OAAOra,GAAG,MAAM,EAAE,OAAOygB,GAAG,YAAY,EAAE,OAAOpG,GAAO,GAAG;AACnF,GAYIo9F,KAAoB,SAAUp9F,GAAO2xF,GAAkBC,GAAkB;AACzE,MAAIG,IAAeH,EAAiB,cAAc5xF,GAC9CgyF,IAAgBJ,EAAiB,eAAe5xF,GAChD69F,KAAmBlM,EAAiB,cAAcI,KAAgB,GAClE+L,KAAmBnM,EAAiB,eAAeK,KAAiB;AACxE,SAAO;AAAA,IACH,OAAOhyF;AAAA,IACP,WAAW69F;AAAA,IACX,WAAWC;AAAA,EACnB;AACA;AAEA,SAASC,GAAUxqG,GAAM;AACrB,SAAO,SAAUlL,GAAO;AACpB,IAAAkL,EAAK,QAAQ,SAAU7J,GAAK;AACxB,MAAI,OAAOA,KAAQ,aACfA,EAAIrB,CAAK,IAEJqB,KAAO,SACZA,EAAI,UAAUrB;AAAA,IAEtB,CAAC;AAAA,EACL;AACJ;AAEA,IAAI21G,KAAiB,SAAU1N,GAAiB5jE,GAAO;AACnD,MAAIv9B,IAAKmhG,EAAgB,MAAM,OAAOrkD,IAAW98C,EAAG,UAAU8uG,IAAgB9uG,EAAG,eAAe+uG,IAAmB/uG,EAAG,kBAAkBylG,IAAWzlG,EAAG,UAClJ0lG,IAAgBvE,EAAgB,eAAe8E,IAAY9E,EAAgB,WAC3E51E,IAASgS,EAAM,QACfsoE,IAAYH,KAAiB,CAACO,KAAa,CAACnpD,KAAYvxB;AAM5D,MALI,CAACs6E,KAGDiJ,KAAiB,CAACvxE,EAAM,WAExBwxE,KAAoBxxE,EAAM;AAC1B,WAAO;AACX,MAAIuoE,IAAaC,GAAex6E,GAAQk6E,CAAQ;AAChD,SAAI,CAAAK;AAGR,GACIkJ,KAAY,SAAUzxE,GAAO;AAC7B,SAAIA,IACOA,EAAM,SAAS,IAAI,IAAI,KAE3B;AACX;AACA,SAAS0xE,GAAS1xE,GAAO2xE,GAAa;AAClC,MAAIz8D,IAASu8D,GAAUzxE,CAAK,GACxBsT,IAAQkvD,GAAcmP,GAAaz8D,CAAM;AAC7C,SAAO5B;AACX;AACA,SAASs+D,GAAiB5xE,GAAOklE,GAAkB5xF,GAAO;AACtD,MAAIo6F,IAAcxI,EAAiB,sBAAqB,GACpDiC,IAAS,GACTC,IAAS;AACb,MAAI,aAAapnE;AAEb,IAAAmnE,KAAUnnE,EAAM,UAAU0tE,EAAY,QAAQp6F,GAC9C8zF,KAAUpnE,EAAM,UAAU0tE,EAAY,OAAOp6F;AAAA,OAE5C;AACD,QAAIyhC,IAAQ/U,EAAM,QAAQ,CAAC;AAC3B,IAAAmnE,KAAUpyD,EAAM,UAAU24D,EAAY,QAAQp6F,GAC9C8zF,KAAUryD,EAAM,UAAU24D,EAAY,OAAOp6F;AAAA,EACjD;AACA,UAAI,OAAO,MAAM6zF,CAAM,KAAK,OAAO,MAAMC,CAAM,MAC3C,QAAQ,MAAM,gCAAgC,GAC3C;AAAA,IACH,GAAGD;AAAA,IACH,GAAGC;AAAA,EACX;AACA;AACA,IAAIyK,KAA2B,SAAUjO,GAAiBtwD,GAAO30C,GAAMmzG,GAASC,GAAW;AACvF,MAAIz+F,IAAQswF,EAAgB,eAAe,OACvCqB,IAAmBrB,EAAgB,kBAAkB+E,IAAQ/E,EAAgB,OAC7EgE,IAAWe,EAAM,UAAUhB,IAAWgB,EAAM,UAAUsD,IAAgBtD,EAAM,eAAeoB,IAAiBpB,EAAM,gBAClH9zF,IAAOo3F,EAAc,MAAM1sD,IAAW0sD,EAAc;AACxD,MAAI,CAAChH;AACD,UAAM,IAAI,MAAM,wBAAwB;AAE5C,MAAI0J,IAAcr7F,IAAQggC,IAAQ30C,GAG9BqzG,IAAiBF,IAAU,KAAQ,CAACvyD,GACpCslD,IAAW4C,GAAgBpF,GAAYsM,GAAa,CAAC,GAAGhH,GAAUC,GAAU/yF,GAAMm9F,KAAkB,CAACjI,CAAc;AACvH,SAAOlF;AACX,GACIoN,KAAsB,SAAUrO,GAAiB5jE,GAAO;AACxD,MAAIkyE,IAAqBtO,EAAgB,oBACrCtwF,IAAQswF,EAAgB,eAAe,OACvCnhG,IAAKmhG,EAAgB,OAAOgE,IAAWnlG,EAAG,UAAUklG,IAAWllG,EAAG;AACtE,SAAKyvG,IAED5+F,IAAQs0F,KAAYt0F,IAAQq0F,KAE5B,KAAK,KAAKuK,EAAmB,MAAM,MAAM,KAAK,KAAKlyE,EAAM,MAAM,KAE/DkyE,EAAmB,SAAS,KAAKA,EAAmB,SAASlyE,EAAM,UAEnEkyE,EAAmB,SAAS,KAAKA,EAAmB,SAASlyE,EAAM,UAEnE,KAAK,KAAKkyE,EAAmB,MAAM,MAAM,KAAK,KAAKlyE,EAAM,MAAM,IATxD;AAYf,GAEImyE,KAAsB,SAAUvO,GAAiB5jE,GAAO;AACxD,MAAIv9B,IAAKmhG,EAAgB,MAAM,OAAOrkD,IAAW98C,EAAG,UAAUylG,IAAWzlG,EAAG,UACxE0lG,IAAgBvE,EAAgB,eAChC51E,IAASgS,EAAM,QACfsoE,IAAYH,KAAiB,CAAC5oD,KAAYvxB;AAC9C,MAAI,CAACs6E;AACD,WAAO;AACX,MAAIC,IAAaC,GAAex6E,GAAQk6E,CAAQ;AAChD,SAAI,CAAAK;AAGR,GACI6J,KAAiB,SAAUxO,GAAiB;AAC5C,MAAIrkD,IAAWqkD,EAAgB,MAAM,MAAM,UACvCuE,IAAgBvE,EAAgB,eAAeyO,IAAqBzO,EAAgB,oBACpF0E,IAAYH,KAAiB,CAAC5oD,KAAY8yD;AAC9C,SAAK,EAAA/J;AAGT,GACIgK,KAAyB,SAAUtyE,GAAO1sB,GAAO4xF,GAAkB;AACnE,MAAIwI,IAAcxI,EAAiB,sBAAqB,GACpD4D,IAAU9oE,EAAM,SAChBuyE,IAAclQ,GAAYyG,EAAQ,CAAC,EAAE,UAAU4E,EAAY,MAAM,CAAC,GAClE8E,IAAcnQ,GAAYyG,EAAQ,CAAC,EAAE,UAAU4E,EAAY,KAAK,CAAC,GACjE+E,IAAepQ,GAAYyG,EAAQ,CAAC,EAAE,UAAU4E,EAAY,MAAM,CAAC,GACnEgF,IAAerQ,GAAYyG,EAAQ,CAAC,EAAE,UAAU4E,EAAY,KAAK,CAAC;AACtE,SAAO;AAAA,IACH,IAAI6E,IAAcE,KAAgB,IAAIn/F;AAAA,IACtC,IAAIk/F,IAAcE,KAAgB,IAAIp/F;AAAA,EAC9C;AACA,GACIq/F,KAAmB,SAAU3yE,GAAO;AACpC,SAAO,KAAK,KAAK,KAAK,IAAKA,EAAM,QAAQ,CAAC,EAAE,QAAQA,EAAM,QAAQ,CAAC,EAAE,OAAQ,CAAC,IAC1E,KAAK,IAAKA,EAAM,QAAQ,CAAC,EAAE,QAAQA,EAAM,QAAQ,CAAC,EAAE,OAAQ,CAAC,CAAC;AACtE,GACI4yE,KAAqB,SAAUhP,GAAiBiP,GAAiB;AACjE,MAAIC,IAAkBlP,EAAgB,iBAAiByO,IAAqBzO,EAAgB,oBAAoB+E,IAAQ/E,EAAgB,OACpIgE,IAAWe,EAAM,UAAUhB,IAAWgB,EAAM,UAAUsD,IAAgBtD,EAAM,eAAeoB,IAAiBpB,EAAM,gBAClH9zF,IAAOo3F,EAAc,MAAM1sD,IAAW0sD,EAAc;AACxD,MAAI,CAAC6G,KAAmBT,MAAuB,QAAQ,CAACQ;AACpD,UAAM,IAAI,MAAM,yCAAyC;AAE7D,MAAIA,IAAkB;AAClB,WAAOjP,EAAgB,eAAe;AAE1C,MAAImP,IAAkBF,IAAkBR,GACpChL,IAAkB0L,IAAkBD;AACxC,SAAOrL,GAAgBpF,GAAYgF,GAAiB,CAAC,GAAGM,GAAUC,GAAU/yF,GAAM,CAAC0qC,KAAY,CAACwqD,CAAc;AAClH,GAEIiJ,KAAqB,KACrBC,KAAqB,KACrBC,KAAmB,SAAUtP,GAAiB5jE,GAAO;AACrD,MAAIv9B,IAAKmhG,EAAgB,OAAOuP,IAAe1wG,EAAG,cAAc2wG,IAAc3wG,EAAG;AACjF,EAAKmhG,EAAgB,wBACjBD,GAAsBC,CAAe,GACrCnB,GAAeoO,GAAWjN,CAAe,GAAG5jE,GAAOmzE,CAAY,GAC/D1Q,GAAeoO,GAAWjN,CAAe,GAAG5jE,GAAOozE,CAAW;AAEtE,GACIC,KAAkB,SAAUzP,GAAiB5jE,GAAO;AACpD,MAAIv9B,IAAKmhG,EAAgB,OAAO0P,IAAU7wG,EAAG,SAAS8wG,IAAS9wG,EAAG,QAC9DyiG,IAAmBtB,EAAgB,kBAAkB+E,IAAQ/E,EAAgB,OAAO8F,IAAiB9F,EAAgB,gBACrHtwF,IAAQo2F,EAAe,OACvB7C,IAAgB8B,EAAM,eAAe7C,IAAkB6C,EAAM,iBAAiBsD,IAAgBtD,EAAM,eAAe6K,IAAQ7K,EAAM,OAAOoB,IAAiBpB,EAAM,gBAAgB+F,IAAS/F,EAAM,QAC9L9zF,IAAOo3F,EAAc,MAAM1sD,IAAW0sD,EAAc,UACpDttG,IAAO60G,EAAM,MAAMC,IAAaD,EAAM;AAC1C,MAAI,CAACtO;AACD,UAAM,IAAI,MAAM,uBAAuB;AAE3C,EAAAllE,EAAM,eAAc,GACpBA,EAAM,gBAAe;AACrB,MAAIsT,IAAQo+D,GAAS1xE,GAAO,IAAI,GAC5B0zE,IAAWhF,IAAS+E,IAAa,KAAK,IAAIzzE,EAAM,MAAM,IAAIrhC,GAC1DkmG,IAAWgN,GAAyBjO,GAAiBtwD,GAAOogE,GAAU,CAAC1zE,EAAM,OAAO;AAExF,MAAI1sB,MAAUuxF,GAEd;AAAA,QAAIyB,IAASK,GAAsB/C,GAAiBiB,CAAQ,GACxD8O,IAAgB/B,GAAiB5xE,GAAOklE,GAAkB5xF,CAAK,GAC/DsgG,IAAoBr0D,KAAY1qC,MAAS,KAAKixF,KAAmBiE,GACjE8J,IAAoBhN,KAAiB+M,GACrChrG,IAAKs+F,GAA6BtD,GAAiB+P,EAAc,GAAGA,EAAc,GAAG9O,GAAUyB,GAAQuN,CAAiB,GAAG56G,IAAI2P,EAAG,GAAG8Q,IAAI9Q,EAAG;AAChJ,IAAAg7F,EAAgB,qBAAqB5jE,GACrC4jE,EAAgB,kBAAkBiB,GAAU5rG,GAAGygB,CAAC,GAChD+oF,GAAeoO,GAAWjN,CAAe,GAAG5jE,GAAOszE,CAAO,GAC1D7Q,GAAeoO,GAAWjN,CAAe,GAAG5jE,GAAOuzE,CAAM;AAAA;AAC7D,GACIO,KAAkB,SAAUlQ,GAAiB5jE,GAAO;AACpD,MAAIv9B,IAAKmhG,EAAgB,OAAOmQ,IAActxG,EAAG,aAAauxG,IAAavxG,EAAG;AAE9E,EAAAwuG,GAAcrN,EAAgB,mBAAmB,GACjDA,EAAgB,sBAAsB,WAAW,WAAY;AACzD,IAAKA,EAAgB,YAErBkK,GAAyBlK,GAAiB5jE,EAAM,GAAGA,EAAM,CAAC,GAC1D4jE,EAAgB,sBAAsB;AAAA,EAC1C,GAAGqP,EAAkB;AAErB,MAAIgB,IAAoBhC,GAAoBrO,GAAiB5jE,CAAK;AAClE,EAAIi0E,MACAhD,GAAcrN,EAAgB,mBAAmB,GACjDA,EAAgB,sBAAsB,WAAW,WAAY;AACzD,IAAKA,EAAgB,YAErBA,EAAgB,sBAAsB,MACtCnB,GAAeoO,GAAWjN,CAAe,GAAG5jE,GAAO+zE,CAAW,GAC9DtR,GAAeoO,GAAWjN,CAAe,GAAG5jE,GAAOg0E,CAAU;AAAA,EACjE,GAAGhB,EAAkB;AAE7B,GAEIkB,KAAiB,SAAUl0E,GAAO;AAIlC,WAHIm0E,IAAS,GACTC,IAAS,GAEJ71G,IAAI,GAAGA,IAAI,GAAGA,KAAK;AACxB,IAAA41G,KAAUn0E,EAAM,QAAQzhC,CAAC,EAAE,SAC3B61G,KAAUp0E,EAAM,QAAQzhC,CAAC,EAAE;AAG/B,MAAItF,IAAIk7G,IAAS,GACbz6F,IAAI06F,IAAS;AACjB,SAAO,EAAE,GAAGn7G,GAAG,GAAGygB,EAAC;AACvB,GACI26F,KAAmB,SAAUzQ,GAAiB5jE,GAAO;AACrD,MAAIs0E,IAAW3B,GAAiB3yE,CAAK;AACrC,EAAA4jE,EAAgB,qBAAqB0Q,GACrC1Q,EAAgB,eAAe0Q,GAC/B1Q,EAAgB,kBAAkBA,EAAgB,eAAe,OACjEA,EAAgB,YAAY;AAC5B,MAAI2Q,IAASL,GAAel0E,CAAK;AACjC,EAAA4jE,EAAgB,mBAAmB2Q,EAAO,GAC1C3Q,EAAgB,mBAAmB2Q,EAAO,GAC1C5Q,GAAsBC,CAAe;AACzC,GACI4Q,KAAkB,SAAU5Q,GAAiB5jE,GAAO;AACpD,MAAIklE,IAAmBtB,EAAgB,kBAAkByO,IAAqBzO,EAAgB,oBAAoBqB,IAAmBrB,EAAgB,kBACjJtwF,IAAQswF,EAAgB,eAAe,OACvCnhG,IAAKmhG,EAAgB,OAAOiD,IAAgBpkG,EAAG,eAAeqjG,IAAkBrjG,EAAG,iBAAiBwpG,IAAgBxpG,EAAG,eAAeupG,IAAqBvpG,EAAG,oBAC9J88C,IAAW0sD,EAAc,UAAUp3F,IAAOo3F,EAAc;AAE5D,MAAI,EAAAoG,MAAuB,QAAQ,CAACnN,IAEpC;AAAA,QAAIuP,IAAWnC,GAAuBtyE,GAAO1sB,GAAO4xF,CAAgB;AAEpE,QAAI,GAAC,OAAO,SAASuP,EAAS,CAAC,KAAK,CAAC,OAAO,SAASA,EAAS,CAAC,IAE/D;AAAA,UAAI5B,IAAkBF,GAAiB3yE,CAAK,GACxC6kE,IAAW+N,GAAmBhP,GAAiBiP,CAAe,GAC9D0B,IAASL,GAAel0E,CAAK,GAE7B00E,IAAOH,EAAO,KAAK3Q,EAAgB,oBAAoB,IACvD+Q,IAAOJ,EAAO,KAAK3Q,EAAgB,oBAAoB;AAC3D,UAAI,EAAAiB,MAAavxF,KAASohG,MAAS,KAAKC,MAAS,IAEjD;AAAA,QAAA/Q,EAAgB,mBAAmB2Q,EAAO,GAC1C3Q,EAAgB,mBAAmB2Q,EAAO;AAC1C,YAAIjO,IAASK,GAAsB/C,GAAiBiB,CAAQ,GACxD+O,IAAoBr0D,KAAY1qC,MAAS,KAAKixF,GAC9C+N,IAAoBhN,KAAiB+M,GACrChrG,IAAKs+F,GAA6BtD,GAAiB6Q,EAAS,GAAGA,EAAS,GAAG5P,GAAUyB,GAAQuN,CAAiB,GAAG56G,IAAI2P,EAAG,GAAG8Q,IAAI9Q,EAAG;AACtI,QAAAg7F,EAAgB,gBAAgB6Q,GAChC7Q,EAAgB,eAAeiP;AAC/B,YAAI3G,IAAQF,EAAmB,OAAOG,IAAQH,EAAmB,OAC7DlF,IAAgBgD,GAAgBlG,GAAiBsI,CAAK,GACtDnF,IAAgB+C,GAAgBlG,GAAiBuI,CAAK,GACtDrH,IAAe7rG,IAAIy7G,GACnB3P,IAAerrF,IAAIi7F,GACnBp6F,IAAKqsF,GAAwB9B,GAAcC,GAAcuB,GAAQO,GAAeC,GAAeC,GAAe9B,CAAgB,GAAG2P,IAASr6F,EAAG,GAAGs6F,IAASt6F,EAAG;AAChK,QAAAqpF,EAAgB,kBAAkBiB,GAAU+P,GAAQC,CAAM;AAAA;AAAA;AAAA;AAC9D,GACIC,KAAkB,SAAUlR,GAAiB;AAC7C,MAAImR,IAAgBnR,EAAgB;AACpC,EAAAA,EAAgB,WAAW,MAC3BA,EAAgB,eAAe,MAC/BA,EAAgB,gBAAgB,MAChCA,EAAgB,kBAAkB,MAClCA,EAAgB,qBAAqB,MACrCkK,GAAyBlK,GAAiBmR,KAAkB,OAAmC,SAASA,EAAc,GAAGA,KAAkB,OAAmC,SAASA,EAAc,CAAC;AAC1M,GAEIC,KAAwB,SAAUpR,GAAiB5jE,GAAO;AAC1D,MAAIg0E,IAAapQ,EAAgB,MAAM,YACnCG,IAAgBH,EAAgB,MAAM,YAAY;AACtD,EAAAqN,GAAcrN,EAAgB,yBAAyB,GACvDA,EAAgB,4BAA4B,WAAW,WAAY;AAC/D,IAAAA,EAAgB,4BAA4B,MAC5CnB,GAAeoO,GAAWjN,CAAe,GAAG5jE,GAAOg0E,CAAU;AAAA,EACjE,GAAGjQ,CAAa;AACpB,GACIkR,KAA6B,SAAUrR,GAAiB5jE,GAAO;AAC/D,MAAIv9B,IAAKmhG,EAAgB,OAAOwP,IAAc3wG,EAAG,aAAa8wG,IAAS9wG,EAAG,QACtEmG,IAAKg7F,EAAgB,MAAM,aAAaG,IAAgBn7F,EAAG,eAAeu7F,IAAgBv7F,EAAG;AACjG,EAAA65F,GAAeoO,GAAWjN,CAAe,GAAG5jE,GAAOozE,CAAW,GAC9DvE,GAAqBjL,GAAiBG,GAAeI,GAAe,WAAY;AAC5E,WAAO1B,GAAeoO,GAAWjN,CAAe,GAAG5jE,GAAOuzE,CAAM;AAAA,EACpE,CAAC,GACDyB,GAAsBpR,GAAiB5jE,CAAK;AAChD;AACA,SAASk1E,GAAoBxuD,GAAMpzC,GAAO;AACtC,SAAIozC,MAAS,WACFpzC,MAAU,IAAI,IAAI,KAEtBozC,MAAS,YAAY,KAAK;AACrC;AACA,SAASyuD,GAAkBvR,GAAiB5jE,GAAO;AAC/C,MAAI2oE,IAAQ/E,EAAgB,OAAOwR,IAA4BxR,EAAgB,2BAA2B8F,IAAiB9F,EAAgB,gBAAgBsB,IAAmBtB,EAAgB,kBAC1LtwF,IAAQo2F,EAAe,OACvBjnG,IAAKmhG,EAAgB,OAAOwP,IAAc3wG,EAAG,aAAa8wG,IAAS9wG,EAAG,QACtEmG,IAAK+/F,EAAM,aAAappD,IAAW32C,EAAG,UAAU89C,IAAO99C,EAAG,MAAMjK,IAAOiK,EAAG,MAAMm7F,IAAgBn7F,EAAG,eAAeu7F,IAAgBv7F,EAAG;AACzI,MAAI,CAAA22C,KAEA,CAAA61D,GAEJ;AAAA,QAAI1uD,MAAS;AACT,aAAOuuD,GAA2BrR,GAAiB5jE,CAAK;AAE5D,QAAI,CAACklE;AACD,aAAO,QAAQ,MAAM,2BAA2B;AACpD,QAAI5xD,IAAQ4hE,GAAoBxuD,GAAMk9C,EAAgB,eAAe,KAAK,GACtEiB,IAAW4J,GAA0B7K,GAAiBtwD,GAAO30C,CAAI;AAErE,QAAI2U,MAAUuxF,GAEd;AAAA,MAAApC,GAAeoO,GAAWjN,CAAe,GAAG5jE,GAAOozE,CAAW;AAC9D,UAAIO,IAAgB/B,GAAiB5xE,GAAOklE,GAAkB5xF,CAAK,GAC/D+wF,IAAcwJ,GAAkBjK,GAAiBiB,GAAU8O,EAAc,GAAGA,EAAc,CAAC;AAC/F,UAAI,CAACtP;AACD,eAAO,QAAQ,MAAM,uEAAuE;AAEhG,MAAA5B,GAAeoO,GAAWjN,CAAe,GAAG5jE,GAAOuzE,CAAM,GACzD/O,GAAQZ,GAAiBS,GAAaN,GAAeI,CAAa,GAClE6Q,GAAsBpR,GAAiB5jE,CAAK;AAAA;AAAA;AAChD;AACA,IAAIq1E,KAAuB,SAAUzR,GAAiB5jE,GAAO;AACzD,MAAImoE,IAAgBvE,EAAgB,eAAe+E,IAAQ/E,EAAgB,OAAOqB,IAAmBrB,EAAgB,kBACjHnhG,IAAKkmG,EAAM,aAAappD,IAAW98C,EAAG,UAAUylG,IAAWzlG,EAAG,UAC9DurB,IAASgS,EAAM,QACfqoE,IAAiBpD,KAAqB,OAAsC,SAASA,EAAiB,SAASj3E,CAAM,GACrHs6E,IAAYH,KAAiBn6E,KAAUq6E,KAAkB,CAAC9oD;AAC9D,MAAI,CAAC+oD;AACD,WAAO;AACX,MAAIC,IAAaC,GAAex6E,GAAQk6E,CAAQ;AAChD,SAAI,CAAAK;AAGR,GAEI+M;AAAA;AAAA,EAA8B,2BAAY;AAC1C,aAASA,EAAa78G,GAAO;AACzB,UAAI88G,IAAQ;AACZ,WAAK,UAAU,IACf,KAAK,mBAAmB,MACxB,KAAK,mBAAmB,MACxB,KAAK,oBAAoB,oBAAI,IAAG,GAChC,KAAK,kBAAkB,oBAAI,IAAG,GAE9B,KAAK,mBAAmB,MACxB,KAAK,mBAAmB,MAExB,KAAK,gBAAgB,IACrB,KAAK,SAAS,MAEd,KAAK,qBAAqB,MAC1B,KAAK,sBAAsB,MAC3B,KAAK,sBAAsB,MAE3B,KAAK,YAAY,IACjB,KAAK,iBAAiB,IACtB,KAAK,cAAc,MACnB,KAAK,YAAY,MAEjB,KAAK,WAAW,MAChB,KAAK,eAAe,MACpB,KAAK,qBAAqB,MAC1B,KAAK,kBAAkB,MACvB,KAAK,gBAAgB,MAErB,KAAK,4BAA4B,MAEjC,KAAK,WAAW,MAChB,KAAK,eAAe,MACpB,KAAK,oBAAoB,MAEzB,KAAK,UAAU,IACf,KAAK,YAAY,MACjB,KAAK,YAAY,MAEjB,KAAK,cAAc,CAAA,GACnB,KAAK,QAAQ,WAAY;AACrB,QAAAA,EAAM,uBAAsB;AAAA,MAChC,GACA,KAAK,UAAU,WAAY;AACvB,QAAAA,EAAM,oBAAmB;AAAA,MAC7B,GACA,KAAK,SAAS,SAAUC,GAAU;AAC9B,QAAAD,EAAM,QAAQC,GACd7O,GAAsB4O,GAAOA,EAAM,eAAe,KAAK,GACvDA,EAAM,QAAQnH,GAAYoH,CAAQ;AAAA,MACtC,GACA,KAAK,yBAAyB,WAAY;AACtC,YAAI/yG,GAAImG,GACJ6sG,IAAU3E,GAAsB,GAChC4E,KAAmBjzG,IAAK8yG,EAAM,sBAAsB,QAAQ9yG,MAAO,SAAS,SAASA,EAAG,eACxFkzG,IAAgBD,KAAoB,OAAqC,SAASA,EAAgB;AACtG,SAAC9sG,IAAK2sG,EAAM,sBAAsB,QAAQ3sG,MAAO,UAAkBA,EAAG,iBAAiB,SAAS2sG,EAAM,gBAAgBE,CAAO,GAE7HE,KAAkB,QAA4CA,EAAc,iBAAiB,aAAaJ,EAAM,gBAAgBE,CAAO,GACvIE,KAAkB,QAA4CA,EAAc,iBAAiB,aAAaJ,EAAM,WAAWE,CAAO,GAClIE,KAAkB,QAA4CA,EAAc,iBAAiB,WAAWJ,EAAM,eAAeE,CAAO,GACpIC,KAAoB,QAA8CA,EAAgB,iBAAiB,cAAcH,EAAM,cAAcE,CAAO,GAC5IE,KAAkB,QAA4CA,EAAc,iBAAiB,SAASJ,EAAM,iBAAiBE,CAAO,GACpIE,KAAkB,QAA4CA,EAAc,iBAAiB,WAAWJ,EAAM,eAAeE,CAAO;AAAA,MACxI,GACA,KAAK,sBAAsB,WAAY;AACnC,YAAIhzG,GAAImG,GACJ6sG,IAAU3E,GAAsB,GAChC4E,KAAmBjzG,IAAK8yG,EAAM,sBAAsB,QAAQ9yG,MAAO,SAAS,SAASA,EAAG,eACxFkzG,IAAgBD,KAAoB,OAAqC,SAASA,EAAgB;AACtG,QAAAC,KAAkB,QAA4CA,EAAc,oBAAoB,aAAaJ,EAAM,gBAAgBE,CAAO,GAC1IE,KAAkB,QAA4CA,EAAc,oBAAoB,aAAaJ,EAAM,WAAWE,CAAO,GACrIE,KAAkB,QAA4CA,EAAc,oBAAoB,WAAWJ,EAAM,eAAeE,CAAO,GACvIC,KAAoB,QAA8CA,EAAgB,oBAAoB,cAAcH,EAAM,cAAcE,CAAO,GAC/IE,KAAkB,QAA4CA,EAAc,oBAAoB,SAASJ,EAAM,iBAAiBE,CAAO,GACvIE,KAAkB,QAA4CA,EAAc,oBAAoB,WAAWJ,EAAM,eAAeE,CAAO,GACvI,SAAS,oBAAoB,cAAcF,EAAM,cAAcE,CAAO,GACtE9R,GAAsB4R,CAAK,IAC1B3sG,IAAK2sG,EAAM,cAAc,QAAQ3sG,MAAO,UAAkBA,EAAG,WAAU;AAAA,MAC5E,GACA,KAAK,gCAAgC,SAAUumG,GAAS;AAEpD,YAAIsG,IAAU3E,GAAsB;AACpC,QAAA3B,EAAQ,iBAAiB,SAASoG,EAAM,aAAaE,CAAO,GAC5DtG,EAAQ,iBAAiB,YAAYoG,EAAM,eAAeE,CAAO,GACjEtG,EAAQ,iBAAiB,cAAcoG,EAAM,qBAAqBE,CAAO,GACzEtG,EAAQ,iBAAiB,aAAaoG,EAAM,gBAAgBE,CAAO,GACnEtG,EAAQ,iBAAiB,YAAYoG,EAAM,oBAAoBE,CAAO;AAAA,MAC1E,GACA,KAAK,mBAAmB,SAAUtG,GAASjK,GAAkB;AACzD,YAAI0Q,IAAa,IACbC,IAAeN,EAAM,MAAM,cAC3BO,IAAY,SAAUh7F,GAASkT,GAAQ;AAEvC,mBAASyxD,IAAK,GAAGs2B,IAAYj7F,GAAS2kE,IAAKs2B,EAAU,QAAQt2B,KAAM;AAC/D,gBAAIl9E,IAAQwzG,EAAUt2B,CAAE;AACxB,gBAAIl9E,EAAM,WAAWyrB;AACjB,qBAAO;AAAA,UAEf;AACA,iBAAO;AAAA,QACX;AACA,QAAAunF,EAAM,oBAAmB,GACzBA,EAAM,gBAAgB,QAAQ,SAAUl8E,GAAU;AAC9C,UAAAA,EAASw3E,GAAW0E,CAAK,CAAC;AAAA,QAC9B,CAAC,GACDA,EAAM,WAAW,IAAI,eAAe,SAAUz6F,GAAS;AACnD,cAAIg7F,EAAUh7F,GAASq0F,CAAO,KAAK2G,EAAUh7F,GAASoqF,CAAgB;AAClE,gBAAI2Q,KAAgB,CAACD,GAAY;AAC7B,kBAAII,IAAe9Q,EAAiB,aAChC+Q,IAAgB/Q,EAAiB;AACrC,eAAI8Q,IAAe,KAAKC,IAAgB,OACpCL,IAAa,IACbL,EAAM,UAAS;AAAA,YAEvB;AAEI,cAAA5R,GAAsB4R,CAAK,GAC3B5O,GAAsB4O,GAAOA,EAAM,eAAe,KAAK,GACvDpI,GAAoBoI,GAAO,CAAC;AAAA,QAGxC,CAAC,GAEDA,EAAM,SAAS,QAAQpG,CAAO,GAC9BoG,EAAM,SAAS,QAAQrQ,CAAgB;AAAA,MAC3C,GAIA,KAAK,cAAc,SAAUllE,GAAO;AAChC,YAAIuf,IAAWg2D,EAAM,MAAM;AAC3B,YAAI,CAAAh2D,GAEJ;AAAA,cAAI+oD,IAAYgJ,GAAeiE,GAAOv1E,CAAK;AAC3C,cAAKsoE,GAEL;AAAA,gBAAI4N,IAAcX,EAAM,eAAeA,EAAM,MAAM,MAAM,cAAc;AACvE,YAAKW,MAELhD,GAAiBqC,GAAOv1E,CAAK,GAC7BqzE,GAAgBkC,GAAOv1E,CAAK,GAC5B8zE,GAAgByB,GAAOv1E,CAAK;AAAA;AAAA;AAAA,MAChC,GAIA,KAAK,iBAAiB,SAAUA,GAAO;AACnC,YAAIv9B,IAAK8yG,EAAM,OAAOh2D,IAAW98C,EAAG,UAAU+wG,IAAQ/wG,EAAG,OAAOknG,IAAUlnG,EAAG;AAC7E,YAAI,GAAC8yG,EAAM,oBACP,CAACA,EAAM,oBACPh2D,KACA,CAACi0D,EAAM,iBACP7J,EAAQ,YACR,CAACA,EAAQ,gBACT3pE,EAAM,UAGV;AAAA,UAAAA,EAAM,eAAc,GACpBA,EAAM,gBAAe;AACrB,cAAIp3B,IAAK2sG,EAAM,gBAAgBjR,IAAY17F,EAAG,WAAW27F,IAAY37F,EAAG,WACpEu+F,IAAS7C,IAAYtkE,EAAM,QAC3BonE,IAAS7C,IAAYvkE,EAAM,QAC3B8kE,IAAe6E,EAAQ,YAAYrF,IAAY6C,GAC/CpC,IAAe4E,EAAQ,YAAYpF,IAAY6C,GAC/C7sF,IAAKg7F,EAAM,MAAM,oBAAoBrJ,IAAQ3xF,EAAG,OAAO4xF,IAAQ5xF,EAAG,OAClEusF,IAAgBgD,GAAgByL,GAAOrJ,CAAK,GAC5CnF,IAAgB+C,GAAgByL,GAAOpJ,CAAK;AAChD,UAAIrH,MAAiBR,KAAaS,MAAiBR,KAEnD8E,GAAkBkM,GAAOzQ,GAAcC,GAAc+B,GAAeC,CAAa;AAAA;AAAA,MACrF,GACA,KAAK,iBAAiB,SAAU/mE,GAAO;AACnC,YAAIuf,IAAWg2D,EAAM,MAAM,UACvBY,IAAiBZ,EAAM,MAAM;AACjC,YAAI,CAAAh2D,GAEJ;AAAA,cAAI+oD,IAAYL,GAAsBsN,GAAOv1E,CAAK;AAClD,cAAKsoE,GAEL;AAAA,gBAAI4N,IAAcX,EAAM,eAAeA,EAAM,MAAM,QAAQ,cAAc;AACzE,YAAKW,MAEDl2E,EAAM,WAAW,KAAK,CAACu1E,EAAM,MAAM,QAAQ,qBAE3Cv1E,EAAM,WAAW,KAAK,CAACu1E,EAAM,MAAM,QAAQ,uBAE3Cv1E,EAAM,WAAW,KAAK,CAACu1E,EAAM,MAAM,QAAQ,uBAE/Cv1E,EAAM,eAAc,GACpBA,EAAM,gBAAe,GACrB2jE,GAAsB4R,CAAK,GAC3BrI,GAAmBqI,GAAOv1E,CAAK,GAC/ByiE,GAAeoO,GAAW0E,CAAK,GAAGv1E,GAAOm2E,CAAc;AAAA;AAAA;AAAA,MAC3D,GACA,KAAK,YAAY,SAAUn2E,GAAO;AAC9B,YAAIuf,IAAWg2D,EAAM,MAAM,UACvBa,IAAYb,EAAM,MAAM;AAC5B,YAAI,CAAAh2D,GAEJ;AAAA,cAAI+oD,IAAYG,GAAiB8M,CAAK;AACtC,cAAKjN,GAEL;AAAA,gBAAI4N,IAAcX,EAAM,eAAeA,EAAM,MAAM,QAAQ,cAAc;AACzE,YAAKW,MAELl2E,EAAM,eAAc,GACpBA,EAAM,gBAAe,GACrBstE,GAAciI,GAAOv1E,EAAM,SAASA,EAAM,OAAO,GACjDyiE,GAAeoO,GAAW0E,CAAK,GAAGv1E,GAAOo2E,CAAS;AAAA;AAAA;AAAA,MACtD,GACA,KAAK,gBAAgB,SAAUp2E,GAAO;AAClC,YAAIq2E,IAAgBd,EAAM,MAAM;AAChC,QAAIA,EAAM,cACNhI,GAAiBgI,CAAK,GACtB9S,GAAeoO,GAAW0E,CAAK,GAAGv1E,GAAOq2E,CAAa;AAAA,MAE9D,GAIA,KAAK,eAAe,SAAUr2E,GAAO;AACjC,YAAIuf,IAAWg2D,EAAM,MAAM,UACvB9yG,IAAK8yG,EAAM,OAAOe,IAAkB7zG,EAAG,iBAAiB2wG,IAAc3wG,EAAG;AAC7E,YAAI,CAAA88C,GAEJ;AAAA,cAAI+oD,IAAY6J,GAAoBoD,GAAOv1E,CAAK;AAChD,UAAKsoE,MAEL+L,GAAiBkB,GAAOv1E,CAAK,GAC7B2jE,GAAsB4R,CAAK,GAC3B9S,GAAeoO,GAAW0E,CAAK,GAAGv1E,GAAOs2E,CAAe,GACxD7T,GAAeoO,GAAW0E,CAAK,GAAGv1E,GAAOozE,CAAW;AAAA;AAAA,MACxD,GACA,KAAK,UAAU,SAAUpzE,GAAO;AAC5B,YAAIuf,IAAWg2D,EAAM,MAAM,UACvB9yG,IAAK8yG,EAAM,OAAOgB,IAAa9zG,EAAG,YAAY8wG,IAAS9wG,EAAG;AAC9D,YAAI,CAAA88C,GAEJ;AAAA,cAAI+oD,IAAY8J,GAAemD,CAAK;AACpC,UAAKjN,MAELtoE,EAAM,eAAc,GACpBA,EAAM,gBAAe,GACrBw0E,GAAgBe,GAAOv1E,CAAK,GAC5ByiE,GAAeoO,GAAW0E,CAAK,GAAGv1E,GAAOu2E,CAAU,GACnD9T,GAAeoO,GAAW0E,CAAK,GAAGv1E,GAAOuzE,CAAM;AAAA;AAAA,MACnD,GACA,KAAK,cAAc,SAAUvzE,GAAO;AAChC,YAAIv9B,IAAK8yG,EAAM,OAAOiB,IAAiB/zG,EAAG,gBAAgBuxG,IAAavxG,EAAG;AAC1E,QAAI8yG,EAAM,oBACNT,GAAgBS,CAAK,GACrB9S,GAAeoO,GAAW0E,CAAK,GAAGv1E,GAAOw2E,CAAc,GACvD/T,GAAeoO,GAAW0E,CAAK,GAAGv1E,GAAOg0E,CAAU;AAAA,MAE3D,GAIA,KAAK,sBAAsB,SAAUh0E,GAAO;AACxC,YAAIuf,IAAWg2D,EAAM,MAAM,UACvBY,IAAiBZ,EAAM,MAAM;AACjC,YAAI,CAAAh2D,GAEJ;AAAA,cAAI+oD,IAAYL,GAAsBsN,GAAOv1E,CAAK;AAClD,cAAKsoE,GAEL;AAAA,gBAAImO,IAAclB,EAAM,aACpB,CAAC,oBAAI,KAAI,IAAKA,EAAM,YAAY,OAChCv1E,EAAM,QAAQ,WAAW;AAC7B,gBAAI,CAACy2E,GAAa;AACd,cAAAlB,EAAM,YAAY,CAAC,oBAAI,KAAI,GAC3B5R,GAAsB4R,CAAK;AAC3B,kBAAIzM,IAAU9oE,EAAM,SAChB02E,IAAkB5N,EAAQ,WAAW,GACrC6N,IAAgB7N,EAAQ,WAAW;AACvC,cAAI4N,MACA/S,GAAsB4R,CAAK,GAC3BrI,GAAmBqI,GAAOv1E,CAAK,GAC/ByiE,GAAeoO,GAAW0E,CAAK,GAAGv1E,GAAOm2E,CAAc,IAEvDQ,KACApB,EAAM,aAAav1E,CAAK;AAAA,YAEhC;AAAA;AAAA;AAAA,MACJ,GACA,KAAK,iBAAiB,SAAUA,GAAO;AACnC,YAAIuf,IAAWg2D,EAAM,MAAM,UACvBa,IAAYb,EAAM,MAAM;AAC5B,YAAIA,EAAM,aAAav1E,EAAM,QAAQ,WAAW,GAAG;AAC/C,cAAIuf;AACA;AACJ,cAAI+oD,IAAYG,GAAiB8M,CAAK;AACtC,cAAI,CAACjN;AACD;AACJ,UAAAtoE,EAAM,eAAc,GACpBA,EAAM,gBAAe;AACrB,cAAI+U,IAAQ/U,EAAM,QAAQ,CAAC;AAC3B,UAAAstE,GAAciI,GAAOxgE,EAAM,SAASA,EAAM,OAAO,GACjD0tD,GAAeoO,GAAW0E,CAAK,GAAGv1E,GAAOo2E,CAAS;AAAA,QACtD,MACK,CAAIp2E,EAAM,QAAQ,SAAS,KAC5Bu1E,EAAM,QAAQv1E,CAAK;AAAA,MAE3B,GACA,KAAK,qBAAqB,SAAUA,GAAO;AACvC,QAAAu1E,EAAM,cAAcv1E,CAAK,GACzBu1E,EAAM,YAAYv1E,CAAK;AAAA,MAC3B,GAIA,KAAK,gBAAgB,SAAUA,GAAO;AAClC,YAAIuf,IAAWg2D,EAAM,MAAM;AAC3B,YAAI,CAAAh2D,GAEJ;AAAA,cAAI+oD,IAAY+M,GAAqBE,GAAOv1E,CAAK;AACjD,UAAKsoE,KAEL6M,GAAkBI,GAAOv1E,CAAK;AAAA;AAAA,MAClC,GAIA,KAAK,eAAe,SAAUA,GAAO;AACjC,QAAIu1E,EAAM,aACNA,EAAM,cAAcv1E,CAAK;AAAA,MAEjC,GACA,KAAK,gBAAgB,SAAU1rC,GAAG;AAC9B,QAAAihH,EAAM,YAAYjhH,EAAE,GAAG,IAAI;AAAA,MAC/B,GACA,KAAK,kBAAkB,SAAUA,GAAG;AAChC,QAAAihH,EAAM,YAAYjhH,EAAE,GAAG,IAAI;AAAA,MAC/B,GACA,KAAK,iBAAiB,SAAU2K,GAAM;AAClC,eAAKA,EAAK,SAGH,EAAQA,EAAK,KAAK,SAAUlC,GAAK;AAAE,iBAAOw4G,EAAM,YAAYx4G,CAAG;AAAA,QAAG,CAAC,IAF/D;AAAA,MAGf,GACA,KAAK,oBAAoB,SAAUuW,GAAOgxF,GAAWC,GAAW;AAC5D,YAAIqS,IAAgBrB,EAAM,MAAM;AAChC,YAAI,CAAC,OAAO,MAAMjiG,CAAK,KACnB,CAAC,OAAO,MAAMgxF,CAAS,KACvB,CAAC,OAAO,MAAMC,CAAS,GAAG;AAC1B,UAAIjxF,MAAUiiG,EAAM,eAAe,UAC/BA,EAAM,eAAe,gBAAgBA,EAAM,eAAe,OAC1DA,EAAM,eAAe,QAAQjiG,IAEjCiiG,EAAM,eAAe,YAAYjR,GACjCiR,EAAM,eAAe,YAAYhR,GACjCgR,EAAM,oBAAmB;AACzB,cAAIsB,IAAQhG,GAAW0E,CAAK;AAC5B,UAAAA,EAAM,kBAAkB,QAAQ,SAAUl8E,GAAU;AAAE,mBAAOA,EAASw9E,CAAK;AAAA,UAAG,CAAC,GAC/EpU,GAAeoU,GAAO,EAAE,OAAOvjG,GAAO,WAAWgxF,GAAW,WAAWC,EAAS,GAAIqS,CAAa;AAAA,QACrG;AAEI,kBAAQ,MAAM,+BAA+B;AAAA,MAErD,GACA,KAAK,YAAY,WAAY;AACzB,YAAIrB,EAAM,oBAAoBA,EAAM,kBAAkB;AAClD,cAAIlR,IAAcqM,GAAkB6E,EAAM,eAAe,OAAOA,EAAM,kBAAkBA,EAAM,gBAAgB;AAC9G,UAAAA,EAAM,kBAAkBlR,EAAY,OAAOA,EAAY,WAAWA,EAAY,SAAS;AAAA,QAC3F;AAAA,MACJ,GACA,KAAK,wBAAwB,SAAUprG,GAAGygB,GAAGpG,GAAO;AAChD,eAAIiiG,EAAM,MAAM,kBACLA,EAAM,MAAM,gBAAgBt8G,GAAGygB,GAAGpG,CAAK,IAE3C49F,GAAmBj4G,GAAGygB,GAAGpG,CAAK;AAAA,MACzC,GACA,KAAK,sBAAsB,WAAY;AACnC,YAAI,GAACiiG,EAAM,WAAW,CAACA,EAAM,mBAE7B;AAAA,cAAI9yG,IAAK8yG,EAAM,gBAAgBjiG,IAAQ7Q,EAAG,OAAO6hG,IAAY7hG,EAAG,WAAW8hG,IAAY9hG,EAAG,WACtFgrB,IAAY8nF,EAAM,sBAAsBjR,GAAWC,GAAWjxF,CAAK;AACvE,UAAAiiG,EAAM,iBAAiB,MAAM,YAAY9nF;AAAA;AAAA,MAC7C,GACA,KAAK,aAAa,WAAY;AAC1B,eAAOojF,GAAW0E,CAAK;AAAA,MAC3B,GAIA,KAAK,WAAW,SAAUl8E,GAAU;AAChC,eAAKk8E,EAAM,kBAAkB,IAAIl8E,CAAQ,KACrCk8E,EAAM,kBAAkB,IAAIl8E,CAAQ,GAEjC,WAAY;AACf,UAAAk8E,EAAM,kBAAkB,OAAOl8E,CAAQ;AAAA,QAC3C;AAAA,MACJ,GACA,KAAK,SAAS,SAAUA,GAAU;AAC9B,eAAKk8E,EAAM,gBAAgB,IAAIl8E,CAAQ,KACnCk8E,EAAM,gBAAgB,IAAIl8E,CAAQ,GAE/B,WAAY;AACf,UAAAk8E,EAAM,gBAAgB,OAAOl8E,CAAQ;AAAA,QACzC;AAAA,MACJ,GAIA,KAAK,OAAO,SAAU4rE,GAAkBC,GAAkB;AACtD,QAAAqQ,EAAM,oBAAmB,GACzBA,EAAM,mBAAmBtQ,GACzBsQ,EAAM,mBAAmBrQ,GACzByB,GAAsB4O,GAAOA,EAAM,eAAe,KAAK,GACvDA,EAAM,8BAA8BtQ,CAAgB,GACpDsQ,EAAM,iBAAiBtQ,GAAkBC,CAAgB,GACzDqQ,EAAM,uBAAsB,GAC5BA,EAAM,gBAAgB;AACtB,YAAIzqF,IAAM+lF,GAAW0E,CAAK;AAC1B,QAAA9S,GAAe33E,GAAK,QAAWyqF,EAAM,MAAM,MAAM;AAAA,MACrD,GACA,KAAK,QAAQ98G,GACb,KAAK,QAAQ21G,GAAY,KAAK,KAAK,GACnC,KAAK,iBAAiBD,GAAY,KAAK,KAAK;AAAA,IAChD;AACA,WAAOmH;AAAA,EACX;GAEIl1E,KAAU3rC,GAAM,cAAc,IAAI,GAClCqiH,KAAa,SAAUt3G,GAAUsrB,GAAK;AACtC,SAAI,OAAOtrB,KAAa,aACbA,EAASsrB,CAAG,IAEhBtrB;AACX,GACIu3G,KAAmBtiH,GAAM,WAAW,SAAUgE,GAAOuE,GAAK;AAC1D,MAAIg6G,IAAWt0C,GAAO,IAAI4yC,GAAa78G,CAAK,CAAC,EAAE,SAC3C+L,IAAUsyG,GAAWr+G,EAAM,UAAUm4G,GAAYoG,CAAQ,CAAC;AAC9D,SAAAC,GAAoBj6G,GAAK,WAAY;AAAE,WAAO4zG,GAAYoG,CAAQ;AAAA,EAAG,GAAG,CAACA,CAAQ,CAAC,GAClFj2G,GAAU,WAAY;AAClB,IAAAi2G,EAAS,OAAOv+G,CAAK;AAAA,EACzB,GAAG,CAACu+G,GAAUv+G,CAAK,CAAC,GACbhE,GAAM,cAAc2rC,GAAQ,UAAU,EAAE,OAAO42E,EAAQ,GAAIxyG,CAAO;AAC7E,CAAC;AAEe/P,GAAM,WAAW,SAAUgE,GAAOuE,GAAK;AACnD,MAAIk6G,IAAWx0C,GAAO,IAAI,GACtBs0C,IAAW7hG,GAAWirB,EAAO;AACjC,SAAAr/B,GAAU,WAAY;AAClB,WAAOi2G,EAAS,SAAS,SAAUlsF,GAAK;AACpC,UAAIosF,EAAS,SAAS;AAClB,YAAI5S,IAAY,GACZC,IAAY;AAChB,QAAA2S,EAAS,QAAQ,MAAM,YAAYF,EAAS,sBAAsB1S,GAAWC,GAAW,IAAIz5E,EAAI,SAAS,eAAe,KAAK;AAAA,MACjI;AAAA,IACJ,CAAC;AAAA,EACL,GAAG,CAACksF,CAAQ,CAAC,GACNviH,GAAM,cAAc,OAAOw3C,GAAS,CAAA,GAAIxzC,GAAO,EAAE,KAAK44G,GAAU,CAAC6F,GAAUl6G,CAAG,CAAC,EAAC,CAAE,CAAC;AAC9F,CAAC;AAqLD,SAASm6G,GAAYxnE,GAAK3yC,GAAK;AAC7B,EAAKA,MAAQ,WAASA,IAAM,CAAA;AAC5B,MAAIo6G,IAAWp6G,EAAI;AAEnB,MAAY,SAAO,WAAa,MAEhC;AAAA,QAAIg/B,IAAO,SAAS,QAAQ,SAAS,qBAAqB,MAAM,EAAE,CAAC,GAC/DgU,IAAQ,SAAS,cAAc,OAAO;AAC1C,IAAAA,EAAM,OAAO,YAETonE,MAAa,SACXp7E,EAAK,aACPA,EAAK,aAAagU,GAAOhU,EAAK,UAAU,IAK1CA,EAAK,YAAYgU,CAAK,GAGpBA,EAAM,aACRA,EAAM,WAAW,UAAUL,IAE3BK,EAAM,YAAY,SAAS,eAAeL,CAAG,CAAC;AAAA;AAElD;AAEA,IAAI0nE,KAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GACXhsE,KAAS,EAAC,SAAU,6CAA4C,SAAU,4CAA2C;AACzH8rE,GAAYE,EAAQ;AAEpB,IAAIC,KAAqB,SAAU70G,GAAI;AACnC,MAAIjD,IAAWiD,EAAG,UAAUmG,IAAKnG,EAAG,cAAc80G,IAAe3uG,MAAO,SAAS,KAAKA,GAAI2R,IAAK9X,EAAG,cAAc+0G,IAAej9F,MAAO,SAAS,KAAKA,GAAIk9F,IAAeh1G,EAAG,cAAci1G,IAAej1G,EAAG,cAAc+X,IAAK/X,EAAG,cAAck1G,IAAen9F,MAAO,SAAS,KAAKA,GAAI/D,IAAKhU,EAAG,cAAcy3C,IAAezjC,MAAO,SAAS,CAAA,IAAKA,GAC5UuvC,IAAK7wC,GAAWirB,EAAO,GAAGvoC,IAAOmuD,EAAG,MAAM4xD,IAAsB5xD,EAAG,qBACnE6xD,IAAan1C,GAAO,IAAI,GACxB7pB,IAAa6pB,GAAO,IAAI;AAC5B,SAAA3hE,GAAU,WAAY;AAClB,QAAIouG,IAAU0I,EAAW,SACrBrzG,IAAUq0C,EAAW;AACzB,WAAIs2D,MAAY,QAAQ3qG,MAAY,QAAQ3M,MACxCA,KAAS,QAAmCA,EAAKs3G,GAAS3qG,CAAO,IAG9D,WAAY;AACf,MAAAozG,KAAwB,QAAkDA,EAAmB;AAAA,IACjG;AAAA,EACJ,GAAG,CAAA,CAAE,GACGnjH,GAAM;AAAA,IAAc;AAAA,IAAOw3C,GAAS,CAAA,GAAI0rE,GAAc,EAAE,KAAKE,GAAY,WAAW,GAAG,OAAO3J,GAAY,cAAc,GAAG,EAAE,OAAO7iE,GAAO,SAAS,GAAG,EAAE,OAAOksE,CAAY,GAAG,OAAOE,EAAY,CAAE;AAAA,IACxMhjH,GAAM,cAAc,OAAOw3C,GAAS,CAAA,GAAIiO,GAAc,EAAE,KAAKrB,GAAY,WAAW,GAAG,OAAOq1D,GAAY,cAAc,GAAG,EAAE,OAAO7iE,GAAO,SAAS,GAAG,EAAE,OAAOmsE,CAAY,GAAG,OAAOE,GAAc,GAAGl4G,CAAQ;AAAA,EAAC;AACxN;ACv+DA,MAAMs4G,KAAWrjH,EAAM,WAA+C,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAE5F6C,gBAAAA,EAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAW4U;AAAA,MACT;AAAA,MACAhT;AAAA,IAAA;AAAA,IAEF,KAAAzE;AAAA,IACC,GAAGvE;AAAA,EAAA;AAAA,CAGT;AACDq/G,GAAS,cAAc;ACKvB,IAAIC,KAAa,SACb,CAACC,IAAoBC,EAAgB,IAAIz3E,GAAmBu3E,EAAU,GACtE,CAACG,IAAeC,EAAe,IAAIH,GAAmBD,EAAU,GAChEK,KAAQ3jH,EAAM;AAAA,EAChB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM;AAAA,MACJ,cAAA2wG;AAAA,MACA,MAAAv/G;AAAA,MACA,SAAAmhE,IAAU;AAAA,MACV,UAAArR;AAAA,MACA,UAAArJ;AAAA,MACA,OAAA5jD,IAAQ;AAAA,MACR,SAAA28G;AAAA,MACA,MAAAjoD;AAAA,MACA,GAAGkoD;AAAA,IACT,IAAQ9/G,GACE,CAACohE,GAAQC,CAAS,IAAIrlE,EAAM,SAAS,IAAI,GACzCuwC,IAAe/9B,GAAgBS,GAAc,CAACpJ,MAASw7D,EAAUx7D,CAAI,CAAC,GACtEy7D,IAAmCtlE,EAAM,OAAO,EAAK,GACrDulE,IAAgBH,IAASxJ,KAAQ,CAAC,CAACwJ,EAAO,QAAQ,MAAM,IAAI;AAClE,WAAuB/5D,gBAAAA,EAAAA,KAAKo4G,IAAe,EAAE,OAAOG,GAAc,SAAAp+C,GAAS,UAAA1a,GAAU,UAAU;AAAA,MAC7E1/C,gBAAAA,EAAAA;AAAAA,QACdwjC,GAAU;AAAA,QACV;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,gBAAgB42B;AAAA,UAChB,cAAc5gB,GAAS4gB,CAAO;AAAA,UAC9B,iBAAiB1a,IAAW,KAAK;AAAA,UACjC,UAAAA;AAAA,UACA,OAAA5jD;AAAA,UACA,GAAG48G;AAAA,UACH,KAAKvzE;AAAA,UACL,SAASpF,GAAqBnnC,EAAM,SAAS,CAACunC,MAAU;AACtD,YAAKi6B,KAASq+C,KAAA,QAAAA,KACVt+C,MACFD,EAAiC,UAAU/5B,EAAM,qBAAoB,GAChE+5B,EAAiC,WAAS/5B,EAAM,gBAAe;AAAA,UAExE,CAAC;AAAA,QACX;AAAA,MACA;AAAA,MACMg6B,KAAiCn6D,gBAAAA,EAAAA;AAAAA,QAC/B24G;AAAA,QACA;AAAA,UACE,SAAS3+C;AAAA,UACT,SAAS,CAACE,EAAiC;AAAA,UAC3C,MAAAjhE;AAAA,UACA,OAAA6C;AAAA,UACA,SAAAs+D;AAAA,UACA,UAAArR;AAAA,UACA,UAAArJ;AAAA,UACA,MAAA8Q;AAAA,UACA,OAAO,EAAE,WAAW,oBAAmB;AAAA,QACjD;AAAA,MACA;AAAA,IACA,GAAO;AAAA,EACL;AACF;AACA+nD,GAAM,cAAcL;AACpB,IAAI97C,KAAiB,kBACjBw8C,KAAiBhkH,EAAM;AAAA,EACzB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,cAAA2wG,GAAc,YAAA5+D,GAAY,GAAG0iB,EAAc,IAAK1jE,GAClDjB,IAAU2gH,GAAgBl8C,IAAgBo8C,CAAY;AAC5D,WAAuBx4G,gBAAAA,EAAAA,IAAI6qC,IAAU,EAAE,SAAS+O,KAAcjiD,EAAQ,SAAS,UAA0BqI,gBAAAA,EAAAA;AAAAA,MACvGwjC,GAAU;AAAA,MACV;AAAA,QACE,cAAcgW,GAAS7hD,EAAQ,OAAO;AAAA,QACtC,iBAAiBA,EAAQ,WAAW,KAAK;AAAA,QACzC,GAAG2kE;AAAA,QACH,KAAKz0D;AAAA,MACb;AAAA,IACA,GAAO;AAAA,EACL;AACF;AACA+wG,GAAe,cAAcx8C;AAC7B,IAAIzB,KAAoB,oBACpBg+C,KAAmB/jH,EAAM;AAAA,EAC3B,CAAC;AAAA,IACC,cAAA4jH;AAAA,IACA,SAAA3+G;AAAA,IACA,SAAAugE;AAAA,IACA,SAAAQ,IAAU;AAAA,IACV,GAAGhiE;AAAA,EACP,GAAKiP,MAAiB;AAClB,UAAM1K,IAAMvI,EAAM,OAAO,IAAI,GACvBuwC,IAAe/9B,GAAgBjK,GAAK0K,CAAY,GAChDyyD,IAAcxB,GAAYsB,CAAO,GACjCS,IAAc9B,GAAQl/D,CAAO;AACnC,WAAAjF,EAAM,UAAU,MAAM;AACpB,YAAM+3B,IAAQxvB,EAAI;AAClB,UAAI,CAACwvB,EAAO;AACZ,YAAMmuC,IAAa,OAAO,iBAAiB,WAKrCT,IAJa,OAAO;AAAA,QACxBS;AAAA,QACA;AAAA,MACR,EACoC;AAC9B,UAAIR,MAAgBF,KAAWC,GAAY;AACzC,cAAMl6B,IAAQ,IAAI,MAAM,SAAS,EAAE,SAAAy6B,EAAO,CAAE;AAC5C,QAAAP,EAAW,KAAK1tC,GAAOytC,CAAO,GAC9BztC,EAAM,cAAcwT,CAAK;AAAA,MAC3B;AAAA,IACF,GAAG,CAACm6B,GAAaF,GAASQ,CAAO,CAAC,GACX56D,gBAAAA,EAAAA;AAAAA,MACrBwjC,GAAU;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,eAAe;AAAA,QACf,gBAAgB42B;AAAA,QAChB,GAAGxhE;AAAA,QACH,UAAU;AAAA,QACV,KAAKusC;AAAA,QACL,OAAO;AAAA,UACL,GAAGvsC,EAAM;AAAA,UACT,GAAGiiE;AAAA,UACH,UAAU;AAAA,UACV,eAAe;AAAA,UACf,SAAS;AAAA,UACT,QAAQ;AAAA,QAClB;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF;AACA89C,GAAiB,cAAch+C;AAC/B,SAASnhB,GAAS4gB,GAAS;AACzB,SAAOA,IAAU,YAAY;AAC/B;AAIA,IAAIy+C,KAAa,CAAC,WAAW,aAAa,aAAa,YAAY,GAC/DC,KAAmB,cACnB,CAACC,EAA8C,IAAIC,GAAoBF,IAAkB;AAAA,EAC3FnlD;AAAA,EACAykD;AACF,CAAC,GACGthD,KAA2BnD,GAA2B,GACtDslD,KAAgBb,GAAgB,GAChC,CAACc,IAAoBC,EAAoB,IAAIJ,GAAwBD,EAAgB,GACrFM,KAAanuE,EAAO;AAAA,EACtB,CAACryC,GAAOiP,MAAiB;AACvB,UAAM;AAAA,MACJ,mBAAAwxG;AAAA,MACA,MAAApgH;AAAA,MACA,cAAAi0C;AAAA,MACA,OAAOiqB;AAAA,MACP,UAAApO,IAAW;AAAA,MACX,UAAArJ,IAAW;AAAA,MACX,aAAAuU;AAAA,MACA,KAAAC;AAAA,MACA,MAAA3sB,IAAO;AAAA,MACP,eAAA6vB;AAAA,MACA,GAAG5C;AAAA,IACT,IAAQ57D,GACE8+D,IAAwBZ,GAAyBuiD,CAAiB,GAClElmE,IAAYigB,GAAac,CAAG,GAC5B,CAACp4D,GAAOonC,CAAQ,IAAIX,GAAqB;AAAA,MAC7C,MAAM40B;AAAA,MACN,aAAajqB,KAAgB;AAAA,MAC7B,UAAUkqB;AAAA,MACV,QAAQ0hD;AAAAA,IACd,CAAK;AACD,WAAuBQ,gBAAAA,EAAAA;AAAAA,MACrBJ;AAAAA,MACA;AAAA,QACE,OAAOG;AAAA,QACP,MAAApgH;AAAA,QACA,UAAA8vD;AAAA,QACA,UAAArJ;AAAA,QACA,OAAA5jD;AAAA,QACA,eAAeonC;AAAA,QACf,UAA0Bo2E,gBAAAA,EAAAA;AAAAA,UACxB3hD;AAAAA,UACA;AAAA,YACE,SAAS;AAAA,YACT,GAAGD;AAAA,YACH,aAAAzD;AAAA,YACA,KAAK9gB;AAAA,YACL,MAAA5L;AAAA,YACA,UAA0B+xE,gBAAAA,EAAAA;AAAAA,cACxBC,GAAW;AAAA,cACX;AAAA,gBACE,MAAM;AAAA,gBACN,iBAAiBxwD;AAAA,gBACjB,oBAAoBkL;AAAA,gBACpB,iBAAiBvU,IAAW,KAAK;AAAA,gBACjC,KAAKvM;AAAA,gBACL,GAAGqhB;AAAA,gBACH,KAAK3sD;AAAA,cACrB;AAAA,YACA;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF;AACAuxG,GAAW,cAAcN;AACzB,IAAIrjD,KAAY,kBACZ+jD,KAAiBvuE,EAAO;AAAA,EAC1B,CAACryC,GAAOiP,MAAiB;AACvB,UAAM,EAAE,mBAAAwxG,GAAmB,UAAA35D,GAAU,GAAGmW,EAAS,IAAKj9D,GAChDjB,IAAUwhH,GAAqB1jD,IAAW4jD,CAAiB,GAC3D7L,IAAa71G,EAAQ,YAAY+nD,GACjCgY,IAAwBZ,GAAyBuiD,CAAiB,GAClEI,IAAaR,GAAcI,CAAiB,GAC5Cl8G,IAAM8tC,EAAO,OAAO,IAAI,GACxB9F,IAAeu0E,GAAiB7xG,GAAc1K,CAAG,GACjDi9D,IAAUziE,EAAQ,UAAUk+D,EAAU,OACtC8jD,IAAuB1uE,EAAO,OAAO,EAAK;AAChDA,WAAAA,EAAO,UAAU,MAAM;AACrB,YAAM9G,IAAgB,CAAChE,MAAU;AAC/B,QAAI04E,GAAW,SAAS14E,EAAM,GAAG,MAC/Bw5E,EAAqB,UAAU;AAAA,MAEnC,GACMC,IAAc,MAAMD,EAAqB,UAAU;AACzD,sBAAS,iBAAiB,WAAWx1E,CAAa,GAClD,SAAS,iBAAiB,SAASy1E,CAAW,GACvC,MAAM;AACX,iBAAS,oBAAoB,WAAWz1E,CAAa,GACrD,SAAS,oBAAoB,SAASy1E,CAAW;AAAA,MACnD;AAAA,IACF,GAAG,CAAA,CAAE,GACkBN,gBAAAA,EAAAA;AAAAA,MACrBphD;AAAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,GAAGR;AAAA,QACH,WAAW,CAAC81C;AAAA,QACZ,QAAQpzC;AAAA,QACR,UAA0Bk/C,gBAAAA,EAAAA;AAAAA,UACxBf;AAAAA,UACA;AAAA,YACE,UAAU/K;AAAA,YACV,UAAU71G,EAAQ;AAAA,YAClB,SAAAyiE;AAAA,YACA,GAAGq/C;AAAA,YACH,GAAG5jD;AAAA,YACH,MAAMl+D,EAAQ;AAAA,YACd,KAAKwtC;AAAA,YACL,SAAS,MAAMxtC,EAAQ,cAAck+D,EAAU,KAAK;AAAA,YACpD,WAAWgkD,GAAsB,CAAC15E,MAAU;AAC1C,cAAIA,EAAM,QAAQ,WAASA,EAAM,eAAc;AAAA,YACjD,CAAC;AAAA,YACD,SAAS05E,GAAsBhkD,EAAU,SAAS,MAAM;;AACtD,cAAI8jD,EAAqB,aAAS/2G,IAAAzF,EAAI,YAAJ,QAAAyF,EAAa;AAAA,YACjD,CAAC;AAAA,UACb;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF;AACA42G,GAAe,cAAc/jD;AAC7B,IAAIqkD,KAAkB,uBAClBC,KAAsB9uE,EAAO;AAAA,EAC/B,CAACryC,GAAOiP,MAAiB;AACvB,UAAM,EAAE,mBAAAwxG,GAAmB,GAAG/8C,EAAc,IAAK1jE,GAC3C6gH,IAAaR,GAAcI,CAAiB;AAClD,WAAuBC,gBAAAA,EAAAA,IAAKV,IAAgB,EAAE,GAAGa,GAAY,GAAGn9C,GAAgB,KAAKz0D,GAAc;AAAA,EACrG;AACF;AACAkyG,GAAoB,cAAcD;AAClC,IAAIthD,KAAQ4gD,IACRY,KAAQR,IACRS,KAAYF;AC9RhB,MAAMX,KAAaxkH,EAAM,WAGvB,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MACnB6C,gBAAAA,MAACk6G,IAAA,EAAyB,WAAWtlG,GAAG,cAAchT,CAAS,GAAI,GAAGhJ,GAAO,KAAAuE,GAAU,CAC/F;AACDi8G,GAAW,cAAcc,GAAyB;AAElD,MAAMV,KAAiB5kH,EAAM,WAG3B,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAExB6C,gBAAAA,EAAAA;AAAAA,EAACm6G;AAAAA,EAAA;AAAA,IACC,KAAAh9G;AAAA,IACA,WAAWyX;AAAA,MACT;AAAA,MACAhT;AAAA,IAAA;AAAA,IAED,GAAGhJ;AAAA,IAEJ,UAAAoH,gBAAAA,EAAAA,IAACo6G,IAAA,EAA8B,WAAU,oCACvC,UAAAp6G,gBAAAA,EAAAA,IAACq6G,IAAA,EAAO,WAAU,wCAAA,CAAwC,EAAA,CAC5D;AAAA,EAAA;AAAA,CAGL;AACDb,GAAe,cAAcW,GAAyB;ACNtD,SAAwBG,GAAc;AAAA,EACpC,QAAAh7C;AAAA,EACA,SAAAC;AAAA,EACA,WAAAg7C;AAAA,EACA,eAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,eAAAC;AACF,GAAuB;AACrB,QAAM,EAAE,MAAA96C,EAAA,IAASxqD,GAAA,GACX,CAACulG,GAAeC,CAAgB,IAAI/5G,GAA0D,KAAK,GACnG,CAACw+F,GAAOwb,CAAQ,IAAIh6G,GAAS05G,CAAa,GAC1C,CAAChuF,GAAauuF,CAAc,IAAIj6G,GAAS,EAAE,GAC3C,CAACo/D,GAAaC,CAAc,IAAIr/D,GAAuB,CAAA,CAAE,GACzD,CAAC0/D,GAAqBC,CAAsB,IAAI3/D,GAAmB,CAAA,CAAE,GACrE,CAACkgG,GAAoBC,CAAqB,IAAIngG,GAAS,EAAK;AAGlE,EAAAI,GAAU,MAAM;AACd,IAAIo+D,KAAUO,MACZm7C,EAAA,GAGEH,EADEF,IACe,gBAEA,KAFa;AAAA,EAKpC,GAAG,CAACr7C,GAAQO,GAAM86C,CAAa,CAAC;AAEhC,QAAMK,IAAkB,YAAY;AAClC,QAAKn7C,GAEL;AAAA,MAAAohC,EAAsB,EAAI;AAC1B,UAAI;AACF,cAAM,EAAE,MAAArgG,GAAM,OAAA5K,EAAA,IAAU,MAAMgN,GAC3B,KAAK,aAAa,EAClB,OAAO,gBAAgB,EACvB,GAAG,WAAW68D,EAAK,EAAE,EACrB,MAAM,MAAM;AAEf,YAAI7pE,EAAO,OAAMA;AACjB,QAAAmqE,EAAev/D,KAAQ,EAAE;AAAA,MAC3B,SAAS5K,GAAO;AACd,gBAAQ,MAAM,8BAA8BA,CAAK;AAAA,MACnD,UAAA;AACE,QAAAirG,EAAsB,EAAK;AAAA,MAC7B;AAAA;AAAA,EACF,GAEMga,IAAmB,CAAC3Z,MAAyB;AACjD,IAAA7gC;AAAA,MAAuB,CAAAmB,MACrBA,EAAK,SAAS0/B,CAAY,IACtB1/B,EAAK,OAAO,CAAAnpC,MAAMA,MAAO6oE,CAAY,IACrC,CAAC,GAAG1/B,GAAM0/B,CAAY;AAAA,IAAA;AAAA,EAE9B,GAEMj+C,IAAe,CAAC5uD,MAAuB;AAC3C,IAAAA,EAAE,eAAA,GACF8lH;AAAA,MACEK;AAAA,MACAtb,EAAM,UAAU;AAAA,MAChB9yE,EAAY,UAAU;AAAA,MACtBiuF;AAAA,MACAj6C,EAAoB,SAAS,IAAIA,IAAsB;AAAA,IAAA;AAAA,EAE3D,GAEMihC,IAAc,MAAM;AACxB,IAAKiZ,KACHn7C,EAAA;AAAA,EAEJ;AAEA,SAAKD,IAGHt/D,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,4EACb,UAAAA,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,oFACb,UAAAC,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,OACb,UAAA;AAAA,IAAAD,gBAAAA,EAAAA,IAAC,MAAA,EAAG,WAAU,8CAA6C,UAAA,2BAE3D;AAAA,IAEAC,gBAAAA,EAAAA,KAAC,QAAA,EAAK,UAAUojD,GAAc,WAAU,aACtC,UAAA;AAAA,MAAApjD,gBAAAA,OAAC,OAAA,EACC,UAAA;AAAA,QAAAD,gBAAAA,EAAAA,IAAC8wD,IAAA,EAAM,WAAU,kDAAiD,UAAA,qBAElE;AAAA,QACA7wD,gBAAAA,EAAAA;AAAAA,UAACm5G;AAAAA,UAAA;AAAA,YACC,OAAOwB;AAAA,YACP,eAAe,CAAC9+G,MAAU++G,EAAiB/+G,CAAwD;AAAA,YACnG,WAAU;AAAA,YAEV,UAAA;AAAA,cAAAmE,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,yFACb,UAAA;AAAA,gBAAAD,gBAAAA,EAAAA,IAACw5G,IAAA,EAAe,OAAM,aAAY,IAAG,aAAY;AAAA,gBACjDv5G,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,UACb,UAAA;AAAA,kBAAAD,gBAAAA,EAAAA,IAAC8wD,IAAA,EAAM,SAAQ,aAAY,WAAU,8BACnC,UAAA7wD,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,oBAAAD,gBAAAA,EAAAA,IAACk7G,IAAA,EAAU,WAAU,UAAA,CAAU;AAAA,oBAAE;AAAA,kBAAA,EAAA,CAEnC,EAAA,CACF;AAAA,kBACAl7G,gBAAAA,EAAAA,IAAC,KAAA,EAAE,WAAU,sCAAqC,UAAA,wDAAA,CAElD;AAAA,gBAAA,EAAA,CACF;AAAA,cAAA,GACF;AAAA,cAEAC,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,yFACb,UAAA;AAAA,gBAAAD,gBAAAA,EAAAA,IAACw5G,IAAA,EAAe,OAAM,OAAM,IAAG,OAAM;AAAA,gBACrCv5G,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,UACb,UAAA;AAAA,kBAAAD,gBAAAA,EAAAA,IAAC8wD,IAAA,EAAM,SAAQ,OAAM,WAAU,8BAC7B,UAAA7wD,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,oBAAAD,gBAAAA,EAAAA,IAACm7G,IAAA,EAAO,WAAU,UAAA,CAAU;AAAA,oBAAE;AAAA,kBAAA,EAAA,CAEhC,EAAA,CACF;AAAA,kBACAn7G,gBAAAA,EAAAA,IAAC,KAAA,EAAE,WAAU,sCAAqC,UAAA,sCAAA,CAElD;AAAA,gBAAA,EAAA,CACF;AAAA,cAAA,GACF;AAAA,cAECy6G,KACCx6G,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,yFACb,UAAA;AAAA,gBAAAD,gBAAAA,EAAAA,IAACw5G,IAAA,EAAe,OAAM,WAAU,IAAG,WAAU;AAAA,gBAC7Cv5G,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,UACb,UAAA;AAAA,kBAAAD,gBAAAA,EAAAA,IAAC8wD,IAAA,EAAM,SAAQ,WAAU,WAAU,8BACjC,UAAA7wD,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,oBAAAD,gBAAAA,EAAAA,IAACmiG,IAAA,EAAU,WAAU,UAAA,CAAU;AAAA,oBAAE;AAAA,kBAAA,EAAA,CAEnC,EAAA,CACF;AAAA,kBACAniG,gBAAAA,EAAAA,IAAC,KAAA,EAAE,WAAU,sCAAqC,UAAA,oDAAA,CAElD;AAAA,gBAAA,EAAA,CACF;AAAA,cAAA,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAEJ,GACF;AAAA,OAEE46G,MAAkB,SAASA,MAAkB,aAAaA,MAAkB,kBAC5E36G,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,QAAAA,gBAAAA,OAAC,OAAA,EACC,UAAA;AAAA,UAAAA,gBAAAA,EAAAA,KAAC6wD,IAAA,EAAM,SAAQ,SAAQ,WAAU,uCAAsC,UAAA;AAAA,YAAA;AAAA,YAC/D9wD,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,yBAAwB,UAAA,aAAA,CAAU;AAAA,UAAA,GAC1D;AAAA,UACAA,gBAAAA,EAAAA;AAAAA,YAACo9C;AAAA,YAAA;AAAA,cACC,IAAG;AAAA,cACH,OAAOkiD;AAAA,cACP,UAAU,CAAC7qG,MAAMqmH,EAASrmH,EAAE,OAAO,KAAK;AAAA,cACxC,aAAY;AAAA,cACZ,WAAU;AAAA,cACV,UAAUimH;AAAA,YAAA;AAAA,UAAA;AAAA,QACZ,GACF;AAAA,+BAEC,OAAA,EACC,UAAA;AAAA,UAAAz6G,gBAAAA,EAAAA,KAAC6wD,IAAA,EAAM,SAAQ,eAAc,WAAU,uCAAsC,UAAA;AAAA,YAAA;AAAA,YAC/D9wD,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,yBAAwB,UAAA,aAAA,CAAU;AAAA,UAAA,GAChE;AAAA,UACAA,gBAAAA,EAAAA;AAAAA,YAACi4G;AAAA,YAAA;AAAA,cACC,IAAG;AAAA,cACH,OAAOzrF;AAAA,cACP,UAAU,CAAC/3B,MAAMsmH,EAAetmH,EAAE,OAAO,KAAK;AAAA,cAC9C,aAAY;AAAA,cACZ,WAAU;AAAA,cACV,MAAM;AAAA,cACN,UAAUimH;AAAA,YAAA;AAAA,UAAA;AAAA,QACZ,GACF;AAAA,QAGCx6C,EAAY,SAAS,KACpBjgE,gBAAAA,EAAAA,KAAC,OAAA,EACC,UAAA;AAAA,UAAAA,gBAAAA,EAAAA,KAAC6wD,IAAA,EAAM,WAAU,oEACf,UAAA;AAAA,YAAA9wD,gBAAAA,EAAAA,IAACkiG,IAAA,EAAS,WAAU,UAAA,CAAU;AAAA,YAAE;AAAA,YACbliG,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,yBAAwB,UAAA,aAAA,CAAU;AAAA,UAAA,GACvE;AAAA,gCACC,OAAA,EAAI,WAAU,iEACZ,UAAAghG,IACChhG,gBAAAA,MAAC,SAAI,WAAU,kDAAiD,UAAA,0BAEhE,IAEAkgE,EAAY,IAAI,CAAC+B,MACfhiE,gBAAAA,EAAAA,KAAC,OAAA,EAAwB,WAAU,+BACjC,UAAA;AAAA,YAAAD,gBAAAA,EAAAA;AAAAA,cAACk8D;AAAA,cAAA;AAAA,gBACC,IAAI,cAAc+F,EAAW,EAAE;AAAA,gBAC/B,SAASzB,EAAoB,SAASyB,EAAW,EAAE;AAAA,gBACnD,iBAAiB,MAAMg5C,EAAiBh5C,EAAW,EAAE;AAAA,gBACrD,UAAUy4C;AAAA,cAAA;AAAA,YAAA;AAAA,YAEZ16G,gBAAAA,EAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,cAAciiE,EAAW,EAAE;AAAA,gBACpC,WAAU;AAAA,gBAET,UAAAA,EAAW;AAAA,cAAA;AAAA,YAAA;AAAA,UACd,EAAA,GAZQA,EAAW,EAarB,CACD,GAEL;AAAA,UACCzB,EAAoB,SAAS,KAC5BvgE,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAU,sCAAqC,UAAA;AAAA,YAAA;AAAA,YAC9BugE,EAAoB;AAAA,YAAO;AAAA,YAAYA,EAAoB,SAAS,IAAI,MAAM;AAAA,UAAA,EAAA,CAClG;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA,GAEJ;AAAA,MAGFvgE,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,mBACb,UAAA;AAAA,QAAAD,gBAAAA,EAAAA;AAAAA,UAAC+U;AAAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,SAAS0sF;AAAA,YACT,WAAU;AAAA,YACV,UAAUiZ;AAAA,YACX,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGD16G,gBAAAA,EAAAA;AAAAA,UAAC+U;AAAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAU;AAAA,YACV,UAAU2lG;AAAA,YAET,UAAAA,IACCz6G,gBAAAA,OAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,cAAAD,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,+EAAA,CAA+E;AAAA,cAAM;AAAA,YAAA,EAAA,CAEtG,IAEAC,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,2BACZ,UAAA;AAAA,cAAA26G,MAAkB,eAAe56G,gBAAAA,EAAAA,IAACk7G,IAAA,EAAU,WAAU,WAAU;AAAA,cAChEN,MAAkB,SAAS56G,gBAAAA,EAAAA,IAACm7G,IAAA,EAAO,WAAU,WAAU;AAAA,cACvDP,MAAkB,aAAa56G,gBAAAA,EAAAA,IAACmiG,IAAA,EAAU,WAAU,WAAU;AAAA,cAC9DyY,MAAkB,iBAAiB56G,gBAAAA,EAAAA,IAACkiG,IAAA,EAAS,WAAU,WAAU;AAAA,cACjE0Y,MAAkB,cAAc,cAC/BA,MAAkB,YAAY,iBAC5BA,MAAkB,gBAAgB,gBAAgB;AAAA,YAAA,EAAA,CACxD;AAAA,UAAA;AAAA,QAAA;AAAA,MAEJ,EAAA,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,CACF,GACF,GACF,IAjLkB;AAmLtB;ACpRA,MAAMQ,KAAQ,CAAC,OAAO,SAAS,UAAU,MAAM,GAGzClqF,KAAM,KAAK,KACXC,KAAM,KAAK,KACXkqF,KAAQ,KAAK,OACbC,KAAQ,KAAK,OACbC,KAAe,CAAAz1G,OAAM;AAAA,EACzB,GAAGA;AAAA,EACH,GAAGA;AACL,IACM01G,KAAkB;AAAA,EACtB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AACP,GACMC,KAAuB;AAAA,EAC3B,OAAO;AAAA,EACP,KAAK;AACP;AACA,SAASC,GAAM13G,GAAOlI,GAAOmI,GAAK;AAChC,SAAOktB,GAAIntB,GAAOktB,GAAIp1B,GAAOmI,CAAG,CAAC;AACnC;AACA,SAAS03G,GAAS7/G,GAAOmO,GAAO;AAC9B,SAAO,OAAOnO,KAAU,aAAaA,EAAMmO,CAAK,IAAInO;AACtD;AACA,SAAS8/G,GAAQC,GAAW;AAC1B,SAAOA,EAAU,MAAM,GAAG,EAAE,CAAC;AAC/B;AACA,SAASC,GAAaD,GAAW;AAC/B,SAAOA,EAAU,MAAM,GAAG,EAAE,CAAC;AAC/B;AACA,SAASE,GAAgBzpE,GAAM;AAC7B,SAAOA,MAAS,MAAM,MAAM;AAC9B;AACA,SAAS0pE,GAAc1pE,GAAM;AAC3B,SAAOA,MAAS,MAAM,WAAW;AACnC;AACA,MAAM2pE,KAA0B,oBAAI,IAAI,CAAC,OAAO,QAAQ,CAAC;AACzD,SAASC,GAAYL,GAAW;AAC9B,SAAOI,GAAW,IAAIL,GAAQC,CAAS,CAAC,IAAI,MAAM;AACpD;AACA,SAASM,GAAiBN,GAAW;AACnC,SAAOE,GAAgBG,GAAYL,CAAS,CAAC;AAC/C;AACA,SAASO,GAAkBP,GAAWQ,GAAOC,GAAK;AAChD,EAAIA,MAAQ,WACVA,IAAM;AAER,QAAMC,IAAYT,GAAaD,CAAS,GAClCW,IAAgBL,GAAiBN,CAAS,GAC1Cj9D,IAASo9D,GAAcQ,CAAa;AAC1C,MAAIC,IAAoBD,MAAkB,MAAMD,OAAeD,IAAM,QAAQ,WAAW,UAAU,SAASC,MAAc,UAAU,WAAW;AAC9I,SAAIF,EAAM,UAAUz9D,CAAM,IAAIy9D,EAAM,SAASz9D,CAAM,MACjD69D,IAAoBC,GAAqBD,CAAiB,IAErD,CAACA,GAAmBC,GAAqBD,CAAiB,CAAC;AACpE;AACA,SAASE,GAAsBd,GAAW;AACxC,QAAMe,IAAoBF,GAAqBb,CAAS;AACxD,SAAO,CAACgB,GAA8BhB,CAAS,GAAGe,GAAmBC,GAA8BD,CAAiB,CAAC;AACvH;AACA,SAASC,GAA8BhB,GAAW;AAChD,SAAOA,EAAU,QAAQ,cAAc,CAAAU,MAAad,GAAqBc,CAAS,CAAC;AACrF;AACA,MAAMO,KAAc,CAAC,QAAQ,OAAO,GAC9BC,KAAc,CAAC,SAAS,MAAM,GAC9BC,KAAc,CAAC,OAAO,QAAQ,GAC9BC,KAAc,CAAC,UAAU,KAAK;AACpC,SAASC,GAAYC,GAAMC,GAASd,GAAK;AACvC,UAAQa,GAAI;AAAA,IACV,KAAK;AAAA,IACL,KAAK;AACH,aAAIb,IAAYc,IAAUL,KAAcD,KACjCM,IAAUN,KAAcC;AAAA,IACjC,KAAK;AAAA,IACL,KAAK;AACH,aAAOK,IAAUJ,KAAcC;AAAA,IACjC;AACE,aAAO,CAAA;AAAA,EACb;AACA;AACA,SAASI,GAA0BxB,GAAWyB,GAAenqE,GAAWmpE,GAAK;AAC3E,QAAMC,IAAYT,GAAaD,CAAS;AACxC,MAAIx/E,IAAO6gF,GAAYtB,GAAQC,CAAS,GAAG1oE,MAAc,SAASmpE,CAAG;AACrE,SAAIC,MACFlgF,IAAOA,EAAK,IAAI,CAAA8gF,MAAQA,IAAO,MAAMZ,CAAS,GAC1Ce,MACFjhF,IAAOA,EAAK,OAAOA,EAAK,IAAIwgF,EAA6B,CAAC,KAGvDxgF;AACT;AACA,SAASqgF,GAAqBb,GAAW;AACvC,SAAOA,EAAU,QAAQ,0BAA0B,CAAAsB,MAAQ3B,GAAgB2B,CAAI,CAAC;AAClF;AACA,SAASI,GAAoBhqG,GAAS;AACpC,SAAO;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,GAAGA;AAAA,EACP;AACA;AACA,SAASiqG,GAAiBjqG,GAAS;AACjC,SAAO,OAAOA,KAAY,WAAWgqG,GAAoBhqG,CAAO,IAAI;AAAA,IAClE,KAAKA;AAAA,IACL,OAAOA;AAAA,IACP,QAAQA;AAAA,IACR,MAAMA;AAAA,EACV;AACA;AACA,SAASkqG,GAAiBC,GAAM;AAC9B,QAAM;AAAA,IACJ,GAAAtkH;AAAA,IACA,GAAAygB;AAAA,IACA,OAAAq/C;AAAA,IACA,QAAAC;AAAA,EACJ,IAAMukD;AACJ,SAAO;AAAA,IACL,OAAAxkD;AAAA,IACA,QAAAC;AAAA,IACA,KAAKt/C;AAAA,IACL,MAAMzgB;AAAA,IACN,OAAOA,IAAI8/D;AAAA,IACX,QAAQr/C,IAAIs/C;AAAA,IACZ,GAAA//D;AAAA,IACA,GAAAygB;AAAA,EACJ;AACA;ACrIA,SAAS8jG,GAA2BC,GAAM/B,GAAWS,GAAK;AACxD,MAAI;AAAA,IACF,WAAAuB;AAAA,IACA,UAAAC;AAAA,EACJ,IAAMF;AACJ,QAAMG,IAAW7B,GAAYL,CAAS,GAChCW,IAAgBL,GAAiBN,CAAS,GAC1CmC,IAAchC,GAAcQ,CAAa,GACzCW,IAAOvB,GAAQC,CAAS,GACxBoC,IAAaF,MAAa,KAC1BG,IAAUL,EAAU,IAAIA,EAAU,QAAQ,IAAIC,EAAS,QAAQ,GAC/DK,IAAUN,EAAU,IAAIA,EAAU,SAAS,IAAIC,EAAS,SAAS,GACjEM,IAAcP,EAAUG,CAAW,IAAI,IAAIF,EAASE,CAAW,IAAI;AACzE,MAAIK;AACJ,UAAQlB,GAAI;AAAA,IACV,KAAK;AACH,MAAAkB,IAAS;AAAA,QACP,GAAGH;AAAA,QACH,GAAGL,EAAU,IAAIC,EAAS;AAAA,MAClC;AACM;AAAA,IACF,KAAK;AACH,MAAAO,IAAS;AAAA,QACP,GAAGH;AAAA,QACH,GAAGL,EAAU,IAAIA,EAAU;AAAA,MACnC;AACM;AAAA,IACF,KAAK;AACH,MAAAQ,IAAS;AAAA,QACP,GAAGR,EAAU,IAAIA,EAAU;AAAA,QAC3B,GAAGM;AAAA,MACX;AACM;AAAA,IACF,KAAK;AACH,MAAAE,IAAS;AAAA,QACP,GAAGR,EAAU,IAAIC,EAAS;AAAA,QAC1B,GAAGK;AAAA,MACX;AACM;AAAA,IACF;AACE,MAAAE,IAAS;AAAA,QACP,GAAGR,EAAU;AAAA,QACb,GAAGA,EAAU;AAAA,MACrB;AAAA,EACA;AACE,UAAQ/B,GAAaD,CAAS,GAAC;AAAA,IAC7B,KAAK;AACH,MAAAwC,EAAO7B,CAAa,KAAK4B,KAAe9B,KAAO2B,IAAa,KAAK;AACjE;AAAA,IACF,KAAK;AACH,MAAAI,EAAO7B,CAAa,KAAK4B,KAAe9B,KAAO2B,IAAa,KAAK;AACjE;AAAA,EACN;AACE,SAAOI;AACT;AASA,MAAMC,KAAkB,OAAOT,GAAWC,GAAUthH,MAAW;AAC7D,QAAM;AAAA,IACJ,WAAAq/G,IAAY;AAAA,IACZ,UAAA0C,IAAW;AAAA,IACX,YAAA5wE,IAAa,CAAA;AAAA,IACb,UAAA++B;AAAA,EACJ,IAAMlwE,GACEgiH,IAAkB7wE,EAAW,OAAO,OAAO,GAC3C2uE,IAAM,OAAO5vC,EAAS,SAAS,OAAO,SAASA,EAAS,MAAMoxC,CAAQ;AAC5E,MAAIzB,IAAQ,MAAM3vC,EAAS,gBAAgB;AAAA,IACzC,WAAAmxC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAS;AAAA,EACJ,CAAG,GACG;AAAA,IACF,GAAAnlH;AAAA,IACA,GAAAygB;AAAA,EACJ,IAAM8jG,GAA2BtB,GAAOR,GAAWS,CAAG,GAChDmC,IAAoB5C,GACpB6C,IAAiB,CAAA,GACjBC,IAAa;AACjB,WAASjgH,IAAI,GAAGA,IAAI8/G,EAAgB,QAAQ9/G,KAAK;AAC/C,UAAM;AAAA,MACJ,MAAAzF;AAAA,MACA,IAAAS;AAAA,IACN,IAAQ8kH,EAAgB9/G,CAAC,GACf;AAAA,MACJkgH;AAAA,MACA,GAAGC;AAAA,MACH,MAAAj+G;AAAA,MACA,OAAAwiD;AAAA,IACN,IAAQ,MAAM1pD,EAAG;AAAA,MACX,GAAAN;AAAA,MACA,GAAAygB;AAAA,MACA,kBAAkBgiG;AAAA,MAClB,WAAW4C;AAAA,MACX,UAAAF;AAAA,MACA,gBAAAG;AAAA,MACA,OAAArC;AAAA,MACA,UAAA3vC;AAAA,MACA,UAAU;AAAA,QACR,WAAAmxC;AAAA,QACA,UAAAC;AAAA,MACR;AAAA,IACA,CAAK;AACD,IAAA1kH,IAAIwlH,KAAwBxlH,GAC5BygB,IAAIglG,KAAwBhlG,GAC5B6kG,IAAiB;AAAA,MACf,GAAGA;AAAA,MACH,CAACzlH,CAAI,GAAG;AAAA,QACN,GAAGylH,EAAezlH,CAAI;AAAA,QACtB,GAAG2H;AAAA,MACX;AAAA,IACA,GACQwiD,KAASu7D,KAAc,OACzBA,KACI,OAAOv7D,KAAU,aACfA,EAAM,cACRq7D,IAAoBr7D,EAAM,YAExBA,EAAM,UACRi5D,IAAQj5D,EAAM,UAAU,KAAO,MAAMspB,EAAS,gBAAgB;AAAA,MAC5D,WAAAmxC;AAAA,MACA,UAAAC;AAAA,MACA,UAAAS;AAAA,IACZ,CAAW,IAAIn7D,EAAM,QAEZ;AAAA,MACC,GAAAhqD;AAAA,MACA,GAAAygB;AAAA,IACV,IAAY8jG,GAA2BtB,GAAOoC,GAAmBnC,CAAG,IAE9D59G,IAAI;AAAA,EAER;AACA,SAAO;AAAA,IACL,GAAAtF;AAAA,IACA,GAAAygB;AAAA,IACA,WAAW4kG;AAAA,IACX,UAAAF;AAAA,IACA,gBAAAG;AAAA,EACJ;AACA;AAUA,eAAeI,GAAel0E,GAAO/Z,GAAS;AAC5C,MAAIkuF;AACJ,EAAIluF,MAAY,WACdA,IAAU,CAAA;AAEZ,QAAM;AAAA,IACJ,GAAAz3B;AAAA,IACA,GAAAygB;AAAA,IACA,UAAA6yD;AAAA,IACA,OAAA2vC;AAAA,IACA,UAAA7mF;AAAA,IACA,UAAA+oF;AAAA,EACJ,IAAM3zE,GACE;AAAA,IACJ,UAAAo0E,IAAW;AAAA,IACX,cAAAC,IAAe;AAAA,IACf,gBAAAC,IAAiB;AAAA,IACjB,aAAAC,IAAc;AAAA,IACd,SAAA5rG,IAAU;AAAA,EACd,IAAMooG,GAAS9qF,GAAS+Z,CAAK,GACrBw0E,IAAgB5B,GAAiBjqG,CAAO,GAExCxY,IAAUy6B,EAAS2pF,IADND,MAAmB,aAAa,cAAc,aACbA,CAAc,GAC5DG,IAAqB5B,GAAiB,MAAM/wC,EAAS,gBAAgB;AAAA,IACzE,UAAWqyC,IAAwB,OAAOryC,EAAS,aAAa,OAAO,SAASA,EAAS,UAAU3xE,CAAO,OAAO,QAAOgkH,IAAgChkH,IAAUA,EAAQ,kBAAmB,OAAO2xE,EAAS,sBAAsB,OAAO,SAASA,EAAS,mBAAmBl3C,EAAS,QAAQ;AAAA,IAChS,UAAAwpF;AAAA,IACA,cAAAC;AAAA,IACA,UAAAV;AAAA,EACJ,CAAG,CAAC,GACIb,IAAOwB,MAAmB,aAAa;AAAA,IAC3C,GAAA9lH;AAAA,IACA,GAAAygB;AAAA,IACA,OAAOwiG,EAAM,SAAS;AAAA,IACtB,QAAQA,EAAM,SAAS;AAAA,EAC3B,IAAMA,EAAM,WACJiD,IAAe,OAAO5yC,EAAS,mBAAmB,OAAO,SAASA,EAAS,gBAAgBl3C,EAAS,QAAQ,IAC5G+pF,IAAe,OAAO7yC,EAAS,aAAa,OAAO,SAASA,EAAS,UAAU4yC,CAAY,KAAO,OAAO5yC,EAAS,YAAY,OAAO,SAASA,EAAS,SAAS4yC,CAAY,MAAO;AAAA,IACvL,GAAG;AAAA,IACH,GAAG;AAAA,EACP,IAAM;AAAA,IACF,GAAG;AAAA,IACH,GAAG;AAAA,EACP,GACQE,IAAoB/B,GAAiB/wC,EAAS,wDAAwD,MAAMA,EAAS,sDAAsD;AAAA,IAC/K,UAAAl3C;AAAA,IACA,MAAAkoF;AAAA,IACA,cAAA4B;AAAA,IACA,UAAAf;AAAA,EACJ,CAAG,IAAIb,CAAI;AACT,SAAO;AAAA,IACL,MAAM2B,EAAmB,MAAMG,EAAkB,MAAMJ,EAAc,OAAOG,EAAY;AAAA,IACxF,SAASC,EAAkB,SAASH,EAAmB,SAASD,EAAc,UAAUG,EAAY;AAAA,IACpG,OAAOF,EAAmB,OAAOG,EAAkB,OAAOJ,EAAc,QAAQG,EAAY;AAAA,IAC5F,QAAQC,EAAkB,QAAQH,EAAmB,QAAQD,EAAc,SAASG,EAAY;AAAA,EACpG;AACA;AAOA,MAAME,KAAQ,CAAA5uF,OAAY;AAAA,EACxB,MAAM;AAAA,EACN,SAAAA;AAAA,EACA,MAAM,GAAG+Z,GAAO;AACd,UAAM;AAAA,MACJ,GAAAxxC;AAAA,MACA,GAAAygB;AAAA,MACA,WAAAgiG;AAAA,MACA,OAAAQ;AAAA,MACA,UAAA3vC;AAAA,MACA,UAAAl3C;AAAA,MACA,gBAAAkpF;AAAA,IACN,IAAQ9zE,GAEE;AAAA,MACJ,SAAA7vC;AAAA,MACA,SAAAwY,IAAU;AAAA,IAChB,IAAQooG,GAAS9qF,GAAS+Z,CAAK,KAAK,CAAA;AAChC,QAAI7vC,KAAW;AACb,aAAO,CAAA;AAET,UAAMqkH,IAAgB5B,GAAiBjqG,CAAO,GACxC8qG,IAAS;AAAA,MACb,GAAAjlH;AAAA,MACA,GAAAygB;AAAA,IACN,GACUy4B,IAAO6pE,GAAiBN,CAAS,GACjCj9D,IAASo9D,GAAc1pE,CAAI,GAC3BotE,IAAkB,MAAMhzC,EAAS,cAAc3xE,CAAO,GACtD4kH,IAAUrtE,MAAS,KACnBstE,IAAUD,IAAU,QAAQ,QAC5BE,IAAUF,IAAU,WAAW,SAC/BG,IAAaH,IAAU,iBAAiB,eACxCI,IAAU1D,EAAM,UAAUz9D,CAAM,IAAIy9D,EAAM,UAAU/pE,CAAI,IAAI+rE,EAAO/rE,CAAI,IAAI+pE,EAAM,SAASz9D,CAAM,GAChGohE,IAAY3B,EAAO/rE,CAAI,IAAI+pE,EAAM,UAAU/pE,CAAI,GAC/C2tE,IAAoB,OAAOvzC,EAAS,mBAAmB,OAAO,SAASA,EAAS,gBAAgB3xE,CAAO;AAC7G,QAAImlH,IAAaD,IAAoBA,EAAkBH,CAAU,IAAI;AAGrE,KAAI,CAACI,KAAc,CAAE,OAAOxzC,EAAS,aAAa,OAAO,SAASA,EAAS,UAAUuzC,CAAiB,QACpGC,IAAa1qF,EAAS,SAASsqF,CAAU,KAAKzD,EAAM,SAASz9D,CAAM;AAErE,UAAMuhE,IAAoBJ,IAAU,IAAIC,IAAY,GAI9CI,IAAyBF,IAAa,IAAIR,EAAgB9gE,CAAM,IAAI,IAAI,GACxEyhE,IAAanvF,GAAIkuF,EAAcQ,CAAO,GAAGQ,CAAsB,GAC/DE,IAAapvF,GAAIkuF,EAAcS,CAAO,GAAGO,CAAsB,GAI/DG,IAAQF,GACRlvF,IAAM+uF,IAAaR,EAAgB9gE,CAAM,IAAI0hE,GAC7C5L,IAASwL,IAAa,IAAIR,EAAgB9gE,CAAM,IAAI,IAAIuhE,GACxD5Q,IAASmM,GAAM6E,GAAO7L,GAAQvjF,CAAG,GAMjCqvF,IAAkB,CAAC9B,EAAe,SAAS5C,GAAaD,CAAS,KAAK,QAAQnH,MAAWnF,KAAU8M,EAAM,UAAUz9D,CAAM,IAAI,KAAK81D,IAAS6L,IAAQF,IAAaC,KAAcZ,EAAgB9gE,CAAM,IAAI,IAAI,GAC5M6hE,IAAkBD,IAAkB9L,IAAS6L,IAAQ7L,IAAS6L,IAAQ7L,IAASvjF,IAAM;AAC3F,WAAO;AAAA,MACL,CAACmhB,CAAI,GAAG+rE,EAAO/rE,CAAI,IAAImuE;AAAA,MACvB,MAAM;AAAA,QACJ,CAACnuE,CAAI,GAAGi9D;AAAA,QACR,cAAcmF,IAASnF,IAASkR;AAAA,QAChC,GAAID,KAAmB;AAAA,UACrB,iBAAAC;AAAA,QACV;AAAA,MACA;AAAA,MACM,OAAOD;AAAA,IACb;AAAA,EACE;AACF,IA+GME,KAAO,SAAU7vF,GAAS;AAC9B,SAAIA,MAAY,WACdA,IAAU,CAAA,IAEL;AAAA,IACL,MAAM;AAAA,IACN,SAAAA;AAAA,IACA,MAAM,GAAG+Z,GAAO;AACd,UAAI+1E,GAAuBC;AAC3B,YAAM;AAAA,QACJ,WAAA/E;AAAA,QACA,gBAAA6C;AAAA,QACA,OAAArC;AAAA,QACA,kBAAAwE;AAAA,QACA,UAAAn0C;AAAA,QACA,UAAAl3C;AAAA,MACR,IAAUoV,GACE;AAAA,QACJ,UAAUk2E,IAAgB;AAAA,QAC1B,WAAWC,IAAiB;AAAA,QAC5B,oBAAoBC;AAAA,QACpB,kBAAAC,IAAmB;AAAA,QACnB,2BAAAC,IAA4B;AAAA,QAC5B,eAAA5D,IAAgB;AAAA,QAChB,GAAG6D;AAAA,MACX,IAAUxF,GAAS9qF,GAAS+Z,CAAK;AAM3B,WAAK+1E,IAAwBjC,EAAe,UAAU,QAAQiC,EAAsB;AAClF,eAAO,CAAA;AAET,YAAMxD,IAAOvB,GAAQC,CAAS,GACxBuF,IAAkBlF,GAAY2E,CAAgB,GAC9CQ,IAAkBzF,GAAQiF,CAAgB,MAAMA,GAChDvE,IAAM,OAAO5vC,EAAS,SAAS,OAAO,SAASA,EAAS,MAAMl3C,EAAS,QAAQ,IAC/E8rF,IAAqBN,MAAgCK,KAAmB,CAAC/D,IAAgB,CAACZ,GAAqBmE,CAAgB,CAAC,IAAIlE,GAAsBkE,CAAgB,IAC1KU,IAA+BL,MAA8B;AACnE,MAAI,CAACF,KAA+BO,KAClCD,EAAmB,KAAK,GAAGjE,GAA0BwD,GAAkBvD,GAAe4D,GAA2B5E,CAAG,CAAC;AAEvH,YAAMkF,IAAa,CAACX,GAAkB,GAAGS,CAAkB,GACrDpvE,IAAW,MAAM4sE,GAAel0E,GAAOu2E,CAAqB,GAC5DM,IAAY,CAAA;AAClB,UAAIC,MAAkBd,IAAuBlC,EAAe,SAAS,OAAO,SAASkC,EAAqB,cAAc,CAAA;AAIxH,UAHIE,KACFW,EAAU,KAAKvvE,EAASirE,CAAI,CAAC,GAE3B4D,GAAgB;AAClB,cAAM3F,IAAQgB,GAAkBP,GAAWQ,GAAOC,CAAG;AACrD,QAAAmF,EAAU,KAAKvvE,EAASkpE,EAAM,CAAC,CAAC,GAAGlpE,EAASkpE,EAAM,CAAC,CAAC,CAAC;AAAA,MACvD;AAOA,UANAsG,IAAgB,CAAC,GAAGA,GAAe;AAAA,QACjC,WAAA7F;AAAA,QACA,WAAA4F;AAAA,MACR,CAAO,GAGG,CAACA,EAAU,MAAM,CAAAtE,MAAQA,KAAQ,CAAC,GAAG;AACvC,YAAIwE,GAAuBC;AAC3B,cAAMC,OAAeF,IAAwBjD,EAAe,SAAS,OAAO,SAASiD,EAAsB,UAAU,KAAK,GACpHG,IAAgBN,EAAWK,CAAS;AAC1C,YAAIC,MAEE,EAD4Bf,MAAmB,cAAcK,MAAoBlF,GAAY4F,CAAa,IAAI;AAAA;AAAA,QAIlHJ,EAAc,MAAM,CAAAltH,MAAK0nH,GAAY1nH,EAAE,SAAS,MAAM4sH,IAAkB5sH,EAAE,UAAU,CAAC,IAAI,IAAI,EAAI;AAE/F,iBAAO;AAAA,YACL,MAAM;AAAA,cACJ,OAAOqtH;AAAA,cACP,WAAWH;AAAA,YAC3B;AAAA,YACc,OAAO;AAAA,cACL,WAAWI;AAAA,YAC3B;AAAA,UACA;AAMQ,YAAIC,KAAkBH,IAAwBF,EAAc,OAAO,CAAAltH,MAAKA,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,CAACH,GAAGE,MAAMF,EAAE,UAAU,CAAC,IAAIE,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,MAAM,OAAO,SAASqtH,EAAsB;AAG1L,YAAI,CAACG;AACH,kBAAQd,GAAgB;AAAA,YACtB,KAAK,WACH;AACE,kBAAIe;AACJ,oBAAMnG,KAAamG,IAAyBN,EAAc,OAAO,CAAAltH,MAAK;AACpE,oBAAI+sH,GAA8B;AAChC,wBAAMU,IAAkB/F,GAAY1nH,EAAE,SAAS;AAC/C,yBAAOytH,MAAoBb;AAAA;AAAA,kBAG3Ba,MAAoB;AAAA,gBACtB;AACA,uBAAO;AAAA,cACT,CAAC,EAAE,IAAI,CAAAztH,MAAK,CAACA,EAAE,WAAWA,EAAE,UAAU,OAAO,CAAA09C,MAAYA,IAAW,CAAC,EAAE,OAAO,CAACloC,GAAKkoC,MAAaloC,IAAMkoC,GAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC79C,GAAGE,MAAMF,EAAE,CAAC,IAAIE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,OAAO,SAASytH,EAAuB,CAAC;AACjM,cAAInG,MACFkG,IAAiBlG;AAEnB;AAAA,YACF;AAAA,YACF,KAAK;AACH,cAAAkG,IAAiBlB;AACjB;AAAA,UACd;AAEQ,YAAIhF,MAAckG;AAChB,iBAAO;AAAA,YACL,OAAO;AAAA,cACL,WAAWA;AAAA,YACzB;AAAA,UACA;AAAA,MAEM;AACA,aAAO,CAAA;AAAA,IACT;AAAA,EACJ;AACA;AAEA,SAASG,GAAehwE,GAAUwrE,GAAM;AACtC,SAAO;AAAA,IACL,KAAKxrE,EAAS,MAAMwrE,EAAK;AAAA,IACzB,OAAOxrE,EAAS,QAAQwrE,EAAK;AAAA,IAC7B,QAAQxrE,EAAS,SAASwrE,EAAK;AAAA,IAC/B,MAAMxrE,EAAS,OAAOwrE,EAAK;AAAA,EAC/B;AACA;AACA,SAASyE,GAAsBjwE,GAAU;AACvC,SAAOkpE,GAAM,KAAK,CAAA+B,MAAQjrE,EAASirE,CAAI,KAAK,CAAC;AAC/C;AAMA,MAAMiF,KAAO,SAAUvxF,GAAS;AAC9B,SAAIA,MAAY,WACdA,IAAU,CAAA,IAEL;AAAA,IACL,MAAM;AAAA,IACN,SAAAA;AAAA,IACA,MAAM,GAAG+Z,GAAO;AACd,YAAM;AAAA,QACJ,OAAAyxE;AAAA,MACR,IAAUzxE,GACE;AAAA,QACJ,UAAA2zE,IAAW;AAAA,QACX,GAAG4C;AAAA,MACX,IAAUxF,GAAS9qF,GAAS+Z,CAAK;AAC3B,cAAQ2zE,GAAQ;AAAA,QACd,KAAK,mBACH;AACE,gBAAMrsE,IAAW,MAAM4sE,GAAel0E,GAAO;AAAA,YAC3C,GAAGu2E;AAAA,YACH,gBAAgB;AAAA,UAC9B,CAAa,GACKlwE,IAAUixE,GAAehwE,GAAUmqE,EAAM,SAAS;AACxD,iBAAO;AAAA,YACL,MAAM;AAAA,cACJ,wBAAwBprE;AAAA,cACxB,iBAAiBkxE,GAAsBlxE,CAAO;AAAA,YAC9D;AAAA,UACA;AAAA,QACU;AAAA,QACF,KAAK,WACH;AACE,gBAAMiB,IAAW,MAAM4sE,GAAel0E,GAAO;AAAA,YAC3C,GAAGu2E;AAAA,YACH,aAAa;AAAA,UAC3B,CAAa,GACKlwE,IAAUixE,GAAehwE,GAAUmqE,EAAM,QAAQ;AACvD,iBAAO;AAAA,YACL,MAAM;AAAA,cACJ,gBAAgBprE;AAAA,cAChB,SAASkxE,GAAsBlxE,CAAO;AAAA,YACtD;AAAA,UACA;AAAA,QACU;AAAA,QACF;AAEI,iBAAO,CAAA;AAAA,MAEnB;AAAA,IACI;AAAA,EACJ;AACA,GAqIMoxE,KAA2B,oBAAI,IAAI,CAAC,QAAQ,KAAK,CAAC;AAKxD,eAAeC,GAAqB13E,GAAO/Z,GAAS;AAClD,QAAM;AAAA,IACJ,WAAAgrF;AAAA,IACA,UAAAnvC;AAAA,IACA,UAAAl3C;AAAA,EACJ,IAAMoV,GACE0xE,IAAM,OAAO5vC,EAAS,SAAS,OAAO,SAASA,EAAS,MAAMl3C,EAAS,QAAQ,IAC/E2nF,IAAOvB,GAAQC,CAAS,GACxBU,IAAYT,GAAaD,CAAS,GAClCoC,IAAa/B,GAAYL,CAAS,MAAM,KACxC0G,IAAgBF,GAAY,IAAIlF,CAAI,IAAI,KAAK,GAC7CqF,IAAiBlG,KAAO2B,IAAa,KAAK,GAC1CwE,IAAW9G,GAAS9qF,GAAS+Z,CAAK;AAGxC,MAAI;AAAA,IACF,UAAA83E;AAAA,IACA,WAAAC;AAAA,IACA,eAAAnG;AAAA,EACJ,IAAM,OAAOiG,KAAa,WAAW;AAAA,IACjC,UAAUA;AAAA,IACV,WAAW;AAAA,IACX,eAAe;AAAA,EACnB,IAAM;AAAA,IACF,UAAUA,EAAS,YAAY;AAAA,IAC/B,WAAWA,EAAS,aAAa;AAAA,IACjC,eAAeA,EAAS;AAAA,EAC5B;AACE,SAAIlG,KAAa,OAAOC,KAAkB,aACxCmG,IAAYpG,MAAc,QAAQC,IAAgB,KAAKA,IAElDyB,IAAa;AAAA,IAClB,GAAG0E,IAAYH;AAAA,IACf,GAAGE,IAAWH;AAAA,EAClB,IAAM;AAAA,IACF,GAAGG,IAAWH;AAAA,IACd,GAAGI,IAAYH;AAAA,EACnB;AACA;AASA,MAAMjT,KAAS,SAAU1+E,GAAS;AAChC,SAAIA,MAAY,WACdA,IAAU,IAEL;AAAA,IACL,MAAM;AAAA,IACN,SAAAA;AAAA,IACA,MAAM,GAAG+Z,GAAO;AACd,UAAIg4E,GAAuBjC;AAC3B,YAAM;AAAA,QACJ,GAAAvnH;AAAA,QACA,GAAAygB;AAAA,QACA,WAAAgiG;AAAA,QACA,gBAAA6C;AAAA,MACR,IAAU9zE,GACEi4E,IAAa,MAAMP,GAAqB13E,GAAO/Z,CAAO;AAI5D,aAAIgrF,QAAgB+G,IAAwBlE,EAAe,WAAW,OAAO,SAASkE,EAAsB,eAAejC,IAAwBjC,EAAe,UAAU,QAAQiC,EAAsB,kBACjM,CAAA,IAEF;AAAA,QACL,GAAGvnH,IAAIypH,EAAW;AAAA,QAClB,GAAGhpG,IAAIgpG,EAAW;AAAA,QAClB,MAAM;AAAA,UACJ,GAAGA;AAAA,UACH,WAAAhH;AAAA,QACV;AAAA,MACA;AAAA,IACI;AAAA,EACJ;AACA,GAOMiH,KAAQ,SAAUjyF,GAAS;AAC/B,SAAIA,MAAY,WACdA,IAAU,CAAA,IAEL;AAAA,IACL,MAAM;AAAA,IACN,SAAAA;AAAA,IACA,MAAM,GAAG+Z,GAAO;AACd,YAAM;AAAA,QACJ,GAAAxxC;AAAA,QACA,GAAAygB;AAAA,QACA,WAAAgiG;AAAA,MACR,IAAUjxE,GACE;AAAA,QACJ,UAAUk2E,IAAgB;AAAA,QAC1B,WAAWC,IAAiB;AAAA,QAC5B,SAAAgC,IAAU;AAAA,UACR,IAAI,CAAAnF,MAAQ;AACV,gBAAI;AAAA,cACF,GAAAxkH;AAAA,cACA,GAAAygB;AAAA,YACd,IAAgB+jG;AACJ,mBAAO;AAAA,cACL,GAAAxkH;AAAA,cACA,GAAAygB;AAAA,YACd;AAAA,UACU;AAAA,QACV;AAAA,QACQ,GAAGsnG;AAAA,MACX,IAAUxF,GAAS9qF,GAAS+Z,CAAK,GACrByzE,IAAS;AAAA,QACb,GAAAjlH;AAAA,QACA,GAAAygB;AAAA,MACR,GACYq4B,IAAW,MAAM4sE,GAAel0E,GAAOu2E,CAAqB,GAC5DwB,IAAYzG,GAAYN,GAAQC,CAAS,CAAC,GAC1C6G,IAAW3G,GAAgB4G,CAAS;AAC1C,UAAIK,IAAgB3E,EAAOqE,CAAQ,GAC/BO,IAAiB5E,EAAOsE,CAAS;AACrC,UAAI7B,GAAe;AACjB,cAAMoC,IAAUR,MAAa,MAAM,QAAQ,QACrCS,IAAUT,MAAa,MAAM,WAAW,SACxCxxF,IAAM8xF,IAAgB9wE,EAASgxE,CAAO,GACtC/xF,IAAM6xF,IAAgB9wE,EAASixE,CAAO;AAC5C,QAAAH,IAAgBtH,GAAMxqF,GAAK8xF,GAAe7xF,CAAG;AAAA,MAC/C;AACA,UAAI4vF,GAAgB;AAClB,cAAMmC,IAAUP,MAAc,MAAM,QAAQ,QACtCQ,IAAUR,MAAc,MAAM,WAAW,SACzCzxF,IAAM+xF,IAAiB/wE,EAASgxE,CAAO,GACvC/xF,IAAM8xF,IAAiB/wE,EAASixE,CAAO;AAC7C,QAAAF,IAAiBvH,GAAMxqF,GAAK+xF,GAAgB9xF,CAAG;AAAA,MACjD;AACA,YAAMiyF,IAAgBL,EAAQ,GAAG;AAAA,QAC/B,GAAGn4E;AAAA,QACH,CAAC83E,CAAQ,GAAGM;AAAA,QACZ,CAACL,CAAS,GAAGM;AAAA,MACrB,CAAO;AACD,aAAO;AAAA,QACL,GAAGG;AAAA,QACH,MAAM;AAAA,UACJ,GAAGA,EAAc,IAAIhqH;AAAA,UACrB,GAAGgqH,EAAc,IAAIvpG;AAAA,UACrB,SAAS;AAAA,YACP,CAAC6oG,CAAQ,GAAG5B;AAAA,YACZ,CAAC6B,CAAS,GAAG5B;AAAA,UACzB;AAAA,QACA;AAAA,MACA;AAAA,IACI;AAAA,EACJ;AACA,GAIMsC,KAAa,SAAUxyF,GAAS;AACpC,SAAIA,MAAY,WACdA,IAAU,CAAA,IAEL;AAAA,IACL,SAAAA;AAAA,IACA,GAAG+Z,GAAO;AACR,YAAM;AAAA,QACJ,GAAAxxC;AAAA,QACA,GAAAygB;AAAA,QACA,WAAAgiG;AAAA,QACA,OAAAQ;AAAA,QACA,gBAAAqC;AAAA,MACR,IAAU9zE,GACE;AAAA,QACJ,QAAA2kE,IAAS;AAAA,QACT,UAAUuR,IAAgB;AAAA,QAC1B,WAAWC,IAAiB;AAAA,MACpC,IAAUpF,GAAS9qF,GAAS+Z,CAAK,GACrByzE,IAAS;AAAA,QACb,GAAAjlH;AAAA,QACA,GAAAygB;AAAA,MACR,GACY8oG,IAAYzG,GAAYL,CAAS,GACjC6G,IAAW3G,GAAgB4G,CAAS;AAC1C,UAAIK,IAAgB3E,EAAOqE,CAAQ,GAC/BO,IAAiB5E,EAAOsE,CAAS;AACrC,YAAMW,IAAY3H,GAASpM,GAAQ3kE,CAAK,GAClC24E,IAAiB,OAAOD,KAAc,WAAW;AAAA,QACrD,UAAUA;AAAA,QACV,WAAW;AAAA,MACnB,IAAU;AAAA,QACF,UAAU;AAAA,QACV,WAAW;AAAA,QACX,GAAGA;AAAA,MACX;AACM,UAAIxC,GAAe;AACjB,cAAM9vF,IAAM0xF,MAAa,MAAM,WAAW,SACpCc,IAAWnH,EAAM,UAAUqG,CAAQ,IAAIrG,EAAM,SAASrrF,CAAG,IAAIuyF,EAAe,UAC5EE,IAAWpH,EAAM,UAAUqG,CAAQ,IAAIrG,EAAM,UAAUrrF,CAAG,IAAIuyF,EAAe;AACnF,QAAIP,IAAgBQ,IAClBR,IAAgBQ,IACPR,IAAgBS,MACzBT,IAAgBS;AAAA,MAEpB;AACA,UAAI1C,GAAgB;AAClB,YAAI6B,GAAuBc;AAC3B,cAAM1yF,IAAM0xF,MAAa,MAAM,UAAU,UACnCiB,IAAetB,GAAY,IAAIzG,GAAQC,CAAS,CAAC,GACjD2H,IAAWnH,EAAM,UAAUsG,CAAS,IAAItG,EAAM,SAASrrF,CAAG,KAAK2yF,OAAiBf,IAAwBlE,EAAe,WAAW,OAAO,SAASkE,EAAsBD,CAAS,MAAM,MAAUgB,IAAe,IAAIJ,EAAe,YACnOE,IAAWpH,EAAM,UAAUsG,CAAS,IAAItG,EAAM,UAAUrrF,CAAG,KAAK2yF,IAAe,MAAMD,IAAyBhF,EAAe,WAAW,OAAO,SAASgF,EAAuBf,CAAS,MAAM,MAAMgB,IAAeJ,EAAe,YAAY;AACpP,QAAIN,IAAiBO,IACnBP,IAAiBO,IACRP,IAAiBQ,MAC1BR,IAAiBQ;AAAA,MAErB;AACA,aAAO;AAAA,QACL,CAACf,CAAQ,GAAGM;AAAA,QACZ,CAACL,CAAS,GAAGM;AAAA,MACrB;AAAA,IACI;AAAA,EACJ;AACA,GAQMjuG,KAAO,SAAU6b,GAAS;AAC9B,SAAIA,MAAY,WACdA,IAAU,CAAA,IAEL;AAAA,IACL,MAAM;AAAA,IACN,SAAAA;AAAA,IACA,MAAM,GAAG+Z,GAAO;AACd,UAAIg5E,GAAuBC;AAC3B,YAAM;AAAA,QACJ,WAAAhI;AAAA,QACA,OAAAQ;AAAA,QACA,UAAA3vC;AAAA,QACA,UAAAl3C;AAAA,MACR,IAAUoV,GACE;AAAA,QACJ,OAAAnvB,IAAQ,MAAM;AAAA,QAAC;AAAA,QACf,GAAG0lG;AAAA,MACX,IAAUxF,GAAS9qF,GAAS+Z,CAAK,GACrBsH,IAAW,MAAM4sE,GAAel0E,GAAOu2E,CAAqB,GAC5DhE,IAAOvB,GAAQC,CAAS,GACxBU,IAAYT,GAAaD,CAAS,GAClC8D,IAAUzD,GAAYL,CAAS,MAAM,KACrC;AAAA,QACJ,OAAA3iD;AAAA,QACA,QAAAC;AAAA,MACR,IAAUkjD,EAAM;AACV,UAAIyH,GACAC;AACJ,MAAI5G,MAAS,SAASA,MAAS,YAC7B2G,IAAa3G,GACb4G,IAAYxH,OAAgB,OAAO7vC,EAAS,SAAS,OAAO,SAASA,EAAS,MAAMl3C,EAAS,QAAQ,KAAM,UAAU,SAAS,SAAS,YAEvIuuF,IAAY5G,GACZ2G,IAAavH,MAAc,QAAQ,QAAQ;AAE7C,YAAMyH,IAAwB7qD,IAASjnB,EAAS,MAAMA,EAAS,QACzD+xE,IAAuB/qD,IAAQhnB,EAAS,OAAOA,EAAS,OACxDgyE,IAA0BhzF,GAAIioC,IAASjnB,EAAS4xE,CAAU,GAAGE,CAAqB,GAClFG,IAAyBjzF,GAAIgoC,IAAQhnB,EAAS6xE,CAAS,GAAGE,CAAoB,GAC9EG,IAAU,CAACx5E,EAAM,eAAe;AACtC,UAAIy5E,IAAkBH,GAClBI,IAAiBH;AAOrB,WANKP,IAAwBh5E,EAAM,eAAe,UAAU,QAAQg5E,EAAsB,QAAQ,MAChGU,IAAiBL,KAEdJ,IAAyBj5E,EAAM,eAAe,UAAU,QAAQi5E,EAAuB,QAAQ,MAClGQ,IAAkBL,IAEhBI,KAAW,CAAC7H,GAAW;AACzB,cAAMgI,IAAOpzF,GAAI+gB,EAAS,MAAM,CAAC,GAC3BsyE,IAAOrzF,GAAI+gB,EAAS,OAAO,CAAC,GAC5BuyE,IAAOtzF,GAAI+gB,EAAS,KAAK,CAAC,GAC1BwyE,IAAOvzF,GAAI+gB,EAAS,QAAQ,CAAC;AACnC,QAAIytE,IACF2E,IAAiBprD,IAAQ,KAAKqrD,MAAS,KAAKC,MAAS,IAAID,IAAOC,IAAOrzF,GAAI+gB,EAAS,MAAMA,EAAS,KAAK,KAExGmyE,IAAkBlrD,IAAS,KAAKsrD,MAAS,KAAKC,MAAS,IAAID,IAAOC,IAAOvzF,GAAI+gB,EAAS,KAAKA,EAAS,MAAM;AAAA,MAE9G;AACA,YAAMz2B,EAAM;AAAA,QACV,GAAGmvB;AAAA,QACH,gBAAA05E;AAAA,QACA,iBAAAD;AAAA,MACR,CAAO;AACD,YAAMM,IAAiB,MAAMj4C,EAAS,cAAcl3C,EAAS,QAAQ;AACrE,aAAI0jC,MAAUyrD,EAAe,SAASxrD,MAAWwrD,EAAe,SACvD;AAAA,QACL,OAAO;AAAA,UACL,OAAO;AAAA,QACnB;AAAA,MACA,IAEa,CAAA;AAAA,IACT;AAAA,EACJ;AACA;ACthCA,SAASC,KAAY;AACnB,SAAO,OAAO,SAAW;AAC3B;AACA,SAASC,GAAYpmH,GAAM;AACzB,SAAIqmH,GAAOrmH,CAAI,KACLA,EAAK,YAAY,IAAI,YAAW,IAKnC;AACT;AACA,SAASsmH,GAAUtmH,GAAM;AACvB,MAAIumH;AACJ,UAAQvmH,KAAQ,SAASumH,IAAsBvmH,EAAK,kBAAkB,OAAO,SAASumH,EAAoB,gBAAgB;AAC5H;AACA,SAASC,GAAmBxmH,GAAM;AAChC,MAAIm/G;AACJ,UAAQA,KAAQkH,GAAOrmH,CAAI,IAAIA,EAAK,gBAAgBA,EAAK,aAAa,OAAO,aAAa,OAAO,SAASm/G,EAAK;AACjH;AACA,SAASkH,GAAOhpH,GAAO;AACrB,SAAK8oH,GAAS,IAGP9oH,aAAiB,QAAQA,aAAiBipH,GAAUjpH,CAAK,EAAE,OAFzD;AAGX;AACA,SAASopH,GAAUppH,GAAO;AACxB,SAAK8oH,GAAS,IAGP9oH,aAAiB,WAAWA,aAAiBipH,GAAUjpH,CAAK,EAAE,UAF5D;AAGX;AACA,SAASwoD,GAAcxoD,GAAO;AAC5B,SAAK8oH,GAAS,IAGP9oH,aAAiB,eAAeA,aAAiBipH,GAAUjpH,CAAK,EAAE,cAFhE;AAGX;AACA,SAASqpH,GAAarpH,GAAO;AAC3B,SAAI,CAAC8oH,GAAS,KAAM,OAAO,aAAe,MACjC,KAEF9oH,aAAiB,cAAcA,aAAiBipH,GAAUjpH,CAAK,EAAE;AAC1E;AACA,MAAMspH,KAA4C,oBAAI,IAAI,CAAC,UAAU,UAAU,CAAC;AAChF,SAASC,GAAkBtqH,GAAS;AAClC,QAAM;AAAA,IACJ,UAAAm3C;AAAA,IACA,WAAAozE;AAAA,IACA,WAAAC;AAAA,IACA,SAAAC;AAAA,EACJ,IAAMC,GAAiB1qH,CAAO;AAC5B,SAAO,kCAAkC,KAAKm3C,IAAWqzE,IAAYD,CAAS,KAAK,CAACF,GAA6B,IAAII,CAAO;AAC9H;AACA,MAAME,KAA6B,oBAAI,IAAI,CAAC,SAAS,MAAM,IAAI,CAAC;AAChE,SAASC,GAAe5qH,GAAS;AAC/B,SAAO2qH,GAAc,IAAIb,GAAY9pH,CAAO,CAAC;AAC/C;AACA,MAAM6qH,KAAoB,CAAC,iBAAiB,QAAQ;AACpD,SAASC,GAAW9qH,GAAS;AAC3B,SAAO6qH,GAAkB,KAAK,CAAAE,MAAY;AACxC,QAAI;AACF,aAAO/qH,EAAQ,QAAQ+qH,CAAQ;AAAA,IACjC,QAAa;AACX,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;AACA,MAAMC,KAAsB,CAAC,aAAa,aAAa,SAAS,UAAU,aAAa,GACjFC,KAAmB,CAAC,aAAa,aAAa,SAAS,UAAU,eAAe,QAAQ,GACxFC,KAAgB,CAAC,SAAS,UAAU,UAAU,SAAS;AAC7D,SAASC,GAAkBC,GAAc;AACvC,QAAMC,IAASC,GAAQ,GACjBv2E,IAAMo1E,GAAUiB,CAAY,IAAIV,GAAiBU,CAAY,IAAIA;AAIvE,SAAOJ,GAAoB,KAAK,CAAAjqH,MAASg0C,EAAIh0C,CAAK,IAAIg0C,EAAIh0C,CAAK,MAAM,SAAS,EAAK,MAAMg0C,EAAI,gBAAgBA,EAAI,kBAAkB,WAAW,OAAU,CAACs2E,MAAWt2E,EAAI,iBAAiBA,EAAI,mBAAmB,SAAS,OAAU,CAACs2E,MAAWt2E,EAAI,SAASA,EAAI,WAAW,SAAS,OAAUk2E,GAAiB,KAAK,CAAAlqH,OAAUg0C,EAAI,cAAc,IAAI,SAASh0C,CAAK,CAAC,KAAKmqH,GAAc,KAAK,CAAAnqH,OAAUg0C,EAAI,WAAW,IAAI,SAASh0C,CAAK,CAAC;AACza;AACA,SAASwqH,GAAmBvrH,GAAS;AACnC,MAAImrB,IAAchF,GAAcnmB,CAAO;AACvC,SAAOupD,GAAcp+B,CAAW,KAAK,CAACqgG,GAAsBrgG,CAAW,KAAG;AACxE,QAAIggG,GAAkBhgG,CAAW;AAC/B,aAAOA;AACF,QAAI2/F,GAAW3/F,CAAW;AAC/B,aAAO;AAET,IAAAA,IAAchF,GAAcgF,CAAW;AAAA,EACzC;AACA,SAAO;AACT;AACA,SAASmgG,KAAW;AAClB,SAAI,OAAO,MAAQ,OAAe,CAAC,IAAI,WAAiB,KACjD,IAAI,SAAS,2BAA2B,MAAM;AACvD;AACA,MAAMG,KAAwC,oBAAI,IAAI,CAAC,QAAQ,QAAQ,WAAW,CAAC;AACnF,SAASD,GAAsB9nH,GAAM;AACnC,SAAO+nH,GAAyB,IAAI3B,GAAYpmH,CAAI,CAAC;AACvD;AACA,SAASgnH,GAAiB1qH,GAAS;AACjC,SAAOgqH,GAAUhqH,CAAO,EAAE,iBAAiBA,CAAO;AACpD;AACA,SAAS0rH,GAAc1rH,GAAS;AAC9B,SAAImqH,GAAUnqH,CAAO,IACZ;AAAA,IACL,YAAYA,EAAQ;AAAA,IACpB,WAAWA,EAAQ;AAAA,EACzB,IAES;AAAA,IACL,YAAYA,EAAQ;AAAA,IACpB,WAAWA,EAAQ;AAAA,EACvB;AACA;AACA,SAASmmB,GAAcziB,GAAM;AAC3B,MAAIomH,GAAYpmH,CAAI,MAAM;AACxB,WAAOA;AAET,QAAMgD;AAAA;AAAA,IAENhD,EAAK;AAAA,IAELA,EAAK;AAAA,IAEL0mH,GAAa1mH,CAAI,KAAKA,EAAK;AAAA,IAE3BwmH,GAAmBxmH,CAAI;AAAA;AACvB,SAAO0mH,GAAa1jH,CAAM,IAAIA,EAAO,OAAOA;AAC9C;AACA,SAASilH,GAA2BjoH,GAAM;AACxC,QAAM6nB,IAAapF,GAAcziB,CAAI;AACrC,SAAI8nH,GAAsBjgG,CAAU,IAC3B7nB,EAAK,gBAAgBA,EAAK,cAAc,OAAOA,EAAK,OAEzD6lD,GAAch+B,CAAU,KAAK++F,GAAkB/+F,CAAU,IACpDA,IAEFogG,GAA2BpgG,CAAU;AAC9C;AACA,SAASqgG,GAAqBloH,GAAM49B,GAAMuqF,GAAiB;AACzD,MAAIC;AACJ,EAAIxqF,MAAS,WACXA,IAAO,CAAA,IAELuqF,MAAoB,WACtBA,IAAkB;AAEpB,QAAME,IAAqBJ,GAA2BjoH,CAAI,GACpDsoH,IAASD,QAAyBD,IAAuBpoH,EAAK,kBAAkB,OAAO,SAASooH,EAAqB,OACrHG,IAAMjC,GAAU+B,CAAkB;AACxC,MAAIC,GAAQ;AACV,UAAME,IAAeC,GAAgBF,CAAG;AACxC,WAAO3qF,EAAK,OAAO2qF,GAAKA,EAAI,kBAAkB,CAAA,GAAI3B,GAAkByB,CAAkB,IAAIA,IAAqB,CAAA,GAAIG,KAAgBL,IAAkBD,GAAqBM,CAAY,IAAI,EAAE;AAAA,EAC9L;AACA,SAAO5qF,EAAK,OAAOyqF,GAAoBH,GAAqBG,GAAoB,CAAA,GAAIF,CAAe,CAAC;AACtG;AACA,SAASM,GAAgBF,GAAK;AAC5B,SAAOA,EAAI,UAAU,OAAO,eAAeA,EAAI,MAAM,IAAIA,EAAI,eAAe;AAC9E;ACzJA,SAASG,GAAiBpsH,GAAS;AACjC,QAAM+0C,IAAMs3E,GAAmBrsH,CAAO;AAGtC,MAAIm+D,IAAQ,WAAWppB,EAAI,KAAK,KAAK,GACjCqpB,IAAS,WAAWrpB,EAAI,MAAM,KAAK;AACvC,QAAMu3E,IAAY/iE,GAAcvpD,CAAO,GACjCusH,IAAcD,IAAYtsH,EAAQ,cAAcm+D,GAChDquD,IAAeF,IAAYtsH,EAAQ,eAAeo+D,GAClDquD,IAAiBnM,GAAMniD,CAAK,MAAMouD,KAAejM,GAAMliD,CAAM,MAAMouD;AACzE,SAAIC,MACFtuD,IAAQouD,GACRnuD,IAASouD,IAEJ;AAAA,IACL,OAAAruD;AAAA,IACA,QAAAC;AAAA,IACA,GAAGquD;AAAA,EACP;AACA;AAEA,SAASC,GAAc1sH,GAAS;AAC9B,SAAQmqH,GAAUnqH,CAAO,IAA6BA,IAAzBA,EAAQ;AACvC;AAEA,SAAS2sH,GAAS3sH,GAAS;AACzB,QAAM4sH,IAAaF,GAAc1sH,CAAO;AACxC,MAAI,CAACupD,GAAcqjE,CAAU;AAC3B,WAAOpM,GAAa,CAAC;AAEvB,QAAMmC,IAAOiK,EAAW,sBAAqB,GACvC;AAAA,IACJ,OAAAzuD;AAAA,IACA,QAAAC;AAAA,IACA,GAAAt+C;AAAA,EACJ,IAAMssG,GAAiBQ,CAAU;AAC/B,MAAIvuH,KAAKyhB,IAAIwgG,GAAMqC,EAAK,KAAK,IAAIA,EAAK,SAASxkD,GAC3Cr/C,KAAKgB,IAAIwgG,GAAMqC,EAAK,MAAM,IAAIA,EAAK,UAAUvkD;AAIjD,UAAI,CAAC//D,KAAK,CAAC,OAAO,SAASA,CAAC,OAC1BA,IAAI,KAEF,CAACygB,KAAK,CAAC,OAAO,SAASA,CAAC,OAC1BA,IAAI,IAEC;AAAA,IACL,GAAAzgB;AAAA,IACA,GAAAygB;AAAA,EACJ;AACA;AAEA,MAAM+tG,KAAyB,gBAAArM,GAAa,CAAC;AAC7C,SAASsM,GAAiB9sH,GAAS;AACjC,QAAMisH,IAAMjC,GAAUhqH,CAAO;AAC7B,SAAI,CAACsrH,GAAQ,KAAM,CAACW,EAAI,iBACfY,KAEF;AAAA,IACL,GAAGZ,EAAI,eAAe;AAAA,IACtB,GAAGA,EAAI,eAAe;AAAA,EAC1B;AACA;AACA,SAASc,GAAuB/sH,GAASgtH,GAASC,GAAsB;AAItE,SAHID,MAAY,WACdA,IAAU,KAER,CAACC,KAAwBD,KAAWC,MAAyBjD,GAAUhqH,CAAO,IACzE,KAEFgtH;AACT;AAEA,SAASE,GAAsBltH,GAASmtH,GAAcC,GAAiB7I,GAAc;AACnF,EAAI4I,MAAiB,WACnBA,IAAe,KAEbC,MAAoB,WACtBA,IAAkB;AAEpB,QAAMC,IAAartH,EAAQ,sBAAqB,GAC1C4sH,IAAaF,GAAc1sH,CAAO;AACxC,MAAI0Y,IAAQ8nG,GAAa,CAAC;AAC1B,EAAI2M,MACE5I,IACE4F,GAAU5F,CAAY,MACxB7rG,IAAQi0G,GAASpI,CAAY,KAG/B7rG,IAAQi0G,GAAS3sH,CAAO;AAG5B,QAAMstH,IAAgBP,GAAuBH,GAAYQ,GAAiB7I,CAAY,IAAIuI,GAAiBF,CAAU,IAAIpM,GAAa,CAAC;AACvI,MAAIniH,KAAKgvH,EAAW,OAAOC,EAAc,KAAK50G,EAAM,GAChDoG,KAAKuuG,EAAW,MAAMC,EAAc,KAAK50G,EAAM,GAC/CylD,IAAQkvD,EAAW,QAAQ30G,EAAM,GACjC0lD,IAASivD,EAAW,SAAS30G,EAAM;AACvC,MAAIk0G,GAAY;AACd,UAAMX,IAAMjC,GAAU4C,CAAU,GAC1BW,IAAYhJ,KAAgB4F,GAAU5F,CAAY,IAAIyF,GAAUzF,CAAY,IAAIA;AACtF,QAAIiJ,IAAavB,GACbwB,IAAgBtB,GAAgBqB,CAAU;AAC9C,WAAOC,KAAiBlJ,KAAgBgJ,MAAcC,KAAY;AAChE,YAAME,IAAcf,GAASc,CAAa,GACpCE,IAAaF,EAAc,sBAAqB,GAChD14E,IAAMs3E,GAAmBoB,CAAa,GACtC3zF,IAAO6zF,EAAW,QAAQF,EAAc,aAAa,WAAW14E,EAAI,WAAW,KAAK24E,EAAY,GAChG13E,IAAM23E,EAAW,OAAOF,EAAc,YAAY,WAAW14E,EAAI,UAAU,KAAK24E,EAAY;AAClG,MAAArvH,KAAKqvH,EAAY,GACjB5uG,KAAK4uG,EAAY,GACjBvvD,KAASuvD,EAAY,GACrBtvD,KAAUsvD,EAAY,GACtBrvH,KAAKy7B,GACLhb,KAAKk3B,GACLw3E,IAAaxD,GAAUyD,CAAa,GACpCA,IAAgBtB,GAAgBqB,CAAU;AAAA,IAC5C;AAAA,EACF;AACA,SAAO9K,GAAiB;AAAA,IACtB,OAAAvkD;AAAA,IACA,QAAAC;AAAA,IACA,GAAA//D;AAAA,IACA,GAAAygB;AAAA,EACJ,CAAG;AACH;AAIA,SAAS8uG,GAAoB5tH,GAAS2iH,GAAM;AAC1C,QAAMkL,IAAanC,GAAc1rH,CAAO,EAAE;AAC1C,SAAK2iH,IAGEA,EAAK,OAAOkL,IAFVX,GAAsBhD,GAAmBlqH,CAAO,CAAC,EAAE,OAAO6tH;AAGrE;AAEA,SAASC,GAAcC,GAAiBC,GAAQ;AAC9C,QAAMC,IAAWF,EAAgB,sBAAqB,GAChD1vH,IAAI4vH,EAAS,OAAOD,EAAO,aAAaJ,GAAoBG,GAAiBE,CAAQ,GACrFnvG,IAAImvG,EAAS,MAAMD,EAAO;AAChC,SAAO;AAAA,IACL,GAAA3vH;AAAA,IACA,GAAAygB;AAAA,EACJ;AACA;AAEA,SAASovG,GAAsDrL,GAAM;AACnE,MAAI;AAAA,IACF,UAAApoF;AAAA,IACA,MAAAkoF;AAAA,IACA,cAAA4B;AAAA,IACA,UAAAf;AAAA,EACJ,IAAMX;AACJ,QAAMmK,IAAUxJ,MAAa,SACvBuK,IAAkB7D,GAAmB3F,CAAY,GACjD4J,IAAW1zF,IAAWqwF,GAAWrwF,EAAS,QAAQ,IAAI;AAC5D,MAAI8pF,MAAiBwJ,KAAmBI,KAAYnB;AAClD,WAAOrK;AAET,MAAIqL,IAAS;AAAA,IACX,YAAY;AAAA,IACZ,WAAW;AAAA,EACf,GACMt1G,IAAQ8nG,GAAa,CAAC;AAC1B,QAAMtqE,IAAUsqE,GAAa,CAAC,GACxB4N,IAA0B7kE,GAAcg7D,CAAY;AAC1D,OAAI6J,KAA2B,CAACA,KAA2B,CAACpB,QACtDlD,GAAYvF,CAAY,MAAM,UAAU+F,GAAkByD,CAAe,OAC3EC,IAAStC,GAAcnH,CAAY,IAEjCh7D,GAAcg7D,CAAY,IAAG;AAC/B,UAAM8J,IAAanB,GAAsB3I,CAAY;AACrD,IAAA7rG,IAAQi0G,GAASpI,CAAY,GAC7BruE,EAAQ,IAAIm4E,EAAW,IAAI9J,EAAa,YACxCruE,EAAQ,IAAIm4E,EAAW,IAAI9J,EAAa;AAAA,EAC1C;AAEF,QAAM+J,IAAaP,KAAmB,CAACK,KAA2B,CAACpB,IAAUc,GAAcC,GAAiBC,CAAM,IAAIxN,GAAa,CAAC;AACpI,SAAO;AAAA,IACL,OAAOmC,EAAK,QAAQjqG,EAAM;AAAA,IAC1B,QAAQiqG,EAAK,SAASjqG,EAAM;AAAA,IAC5B,GAAGiqG,EAAK,IAAIjqG,EAAM,IAAIs1G,EAAO,aAAat1G,EAAM,IAAIw9B,EAAQ,IAAIo4E,EAAW;AAAA,IAC3E,GAAG3L,EAAK,IAAIjqG,EAAM,IAAIs1G,EAAO,YAAYt1G,EAAM,IAAIw9B,EAAQ,IAAIo4E,EAAW;AAAA,EAC9E;AACA;AAEA,SAASC,GAAevuH,GAAS;AAC/B,SAAO,MAAM,KAAKA,EAAQ,eAAc,CAAE;AAC5C;AAIA,SAASwuH,GAAgBxuH,GAAS;AAChC,QAAMsjB,IAAO4mG,GAAmBlqH,CAAO,GACjCguH,IAAStC,GAAc1rH,CAAO,GAC9B8qB,IAAO9qB,EAAQ,cAAc,MAC7Bm+D,IAAQ/nC,GAAI9S,EAAK,aAAaA,EAAK,aAAawH,EAAK,aAAaA,EAAK,WAAW,GAClFszC,IAAShoC,GAAI9S,EAAK,cAAcA,EAAK,cAAcwH,EAAK,cAAcA,EAAK,YAAY;AAC7F,MAAIzsB,IAAI,CAAC2vH,EAAO,aAAaJ,GAAoB5tH,CAAO;AACxD,QAAM8e,IAAI,CAACkvG,EAAO;AAClB,SAAI3B,GAAmBvhG,CAAI,EAAE,cAAc,UACzCzsB,KAAK+3B,GAAI9S,EAAK,aAAawH,EAAK,WAAW,IAAIqzC,IAE1C;AAAA,IACL,OAAAA;AAAA,IACA,QAAAC;AAAA,IACA,GAAA//D;AAAA,IACA,GAAAygB;AAAA,EACJ;AACA;AAKA,MAAM2vG,KAAgB;AACtB,SAASC,GAAgB1uH,GAASwjH,GAAU;AAC1C,QAAMyI,IAAMjC,GAAUhqH,CAAO,GACvBsjB,IAAO4mG,GAAmBlqH,CAAO,GACjC2uH,IAAiB1C,EAAI;AAC3B,MAAI9tD,IAAQ76C,EAAK,aACb86C,IAAS96C,EAAK,cACdjlB,IAAI,GACJygB,IAAI;AACR,MAAI6vG,GAAgB;AAClB,IAAAxwD,IAAQwwD,EAAe,OACvBvwD,IAASuwD,EAAe;AACxB,UAAMC,IAAsBtD,GAAQ;AACpC,KAAI,CAACsD,KAAuBA,KAAuBpL,MAAa,aAC9DnlH,IAAIswH,EAAe,YACnB7vG,IAAI6vG,EAAe;AAAA,EAEvB;AACA,QAAME,IAAmBjB,GAAoBtqG,CAAI;AAIjD,MAAIurG,KAAoB,GAAG;AACzB,UAAMnkG,IAAMpH,EAAK,eACXwH,IAAOJ,EAAI,MACXokG,IAAa,iBAAiBhkG,CAAI,GAClCikG,IAAmBrkG,EAAI,eAAe,gBAAe,WAAWokG,EAAW,UAAU,IAAI,WAAWA,EAAW,WAAW,KAAK,GAC/HE,IAA+B,KAAK,IAAI1rG,EAAK,cAAcwH,EAAK,cAAcikG,CAAgB;AACpG,IAAIC,KAAgCP,OAClCtwD,KAAS6wD;AAAA,EAEb,MAAO,CAAIH,KAAoBJ,OAG7BtwD,KAAS0wD;AAEX,SAAO;AAAA,IACL,OAAA1wD;AAAA,IACA,QAAAC;AAAA,IACA,GAAA//D;AAAA,IACA,GAAAygB;AAAA,EACJ;AACA;AAEA,MAAMmwG,KAA+B,oBAAI,IAAI,CAAC,YAAY,OAAO,CAAC;AAElE,SAASC,GAA2BlvH,GAASwjH,GAAU;AACrD,QAAM6J,IAAaH,GAAsBltH,GAAS,IAAMwjH,MAAa,OAAO,GACtExtE,IAAMq3E,EAAW,MAAMrtH,EAAQ,WAC/B85B,IAAOuzF,EAAW,OAAOrtH,EAAQ,YACjC0Y,IAAQ6wC,GAAcvpD,CAAO,IAAI2sH,GAAS3sH,CAAO,IAAIwgH,GAAa,CAAC,GACnEriD,IAAQn+D,EAAQ,cAAc0Y,EAAM,GACpC0lD,IAASp+D,EAAQ,eAAe0Y,EAAM,GACtCra,IAAIy7B,IAAOphB,EAAM,GACjBoG,IAAIk3B,IAAMt9B,EAAM;AACtB,SAAO;AAAA,IACL,OAAAylD;AAAA,IACA,QAAAC;AAAA,IACA,GAAA//D;AAAA,IACA,GAAAygB;AAAA,EACJ;AACA;AACA,SAASqwG,GAAkCnvH,GAASovH,GAAkB5L,GAAU;AAC9E,MAAIb;AACJ,MAAIyM,MAAqB;AACvB,IAAAzM,IAAO+L,GAAgB1uH,GAASwjH,CAAQ;AAAA,WAC/B4L,MAAqB;AAC9B,IAAAzM,IAAO6L,GAAgBtE,GAAmBlqH,CAAO,CAAC;AAAA,WACzCmqH,GAAUiF,CAAgB;AACnC,IAAAzM,IAAOuM,GAA2BE,GAAkB5L,CAAQ;AAAA,OACvD;AACL,UAAM8J,IAAgBR,GAAiB9sH,CAAO;AAC9C,IAAA2iH,IAAO;AAAA,MACL,GAAGyM,EAAiB,IAAI9B,EAAc;AAAA,MACtC,GAAG8B,EAAiB,IAAI9B,EAAc;AAAA,MACtC,OAAO8B,EAAiB;AAAA,MACxB,QAAQA,EAAiB;AAAA,IAC/B;AAAA,EACE;AACA,SAAO1M,GAAiBC,CAAI;AAC9B;AACA,SAAS0M,GAAyBrvH,GAASsvH,GAAU;AACnD,QAAM/jG,IAAapF,GAAcnmB,CAAO;AACxC,SAAIurB,MAAe+jG,KAAY,CAACnF,GAAU5+F,CAAU,KAAKigG,GAAsBjgG,CAAU,IAChF,KAEF8gG,GAAmB9gG,CAAU,EAAE,aAAa,WAAW8jG,GAAyB9jG,GAAY+jG,CAAQ;AAC7G;AAKA,SAASC,GAA4BvvH,GAAS6R,GAAO;AACnD,QAAMuD,IAAevD,EAAM,IAAI7R,CAAO;AACtC,MAAIoV;AACF,WAAOA;AAET,MAAI1O,IAASklH,GAAqB5rH,GAAS,CAAA,GAAI,EAAK,EAAE,OAAO,CAAA+uB,MAAMo7F,GAAUp7F,CAAE,KAAK+6F,GAAY/6F,CAAE,MAAM,MAAM,GAC1GygG,IAAsC;AAC1C,QAAMC,IAAiBpD,GAAmBrsH,CAAO,EAAE,aAAa;AAChE,MAAImrB,IAAcskG,IAAiBtpG,GAAcnmB,CAAO,IAAIA;AAG5D,SAAOmqH,GAAUh/F,CAAW,KAAK,CAACqgG,GAAsBrgG,CAAW,KAAG;AACpE,UAAMukG,IAAgBrD,GAAmBlhG,CAAW,GAC9CwkG,IAA0BxE,GAAkBhgG,CAAW;AAC7D,IAAI,CAACwkG,KAA2BD,EAAc,aAAa,YACzDF,IAAsC,QAEVC,IAAiB,CAACE,KAA2B,CAACH,IAAsC,CAACG,KAA2BD,EAAc,aAAa,YAAY,CAAC,CAACF,KAAuCP,GAAgB,IAAIO,EAAoC,QAAQ,KAAKlF,GAAkBn/F,CAAW,KAAK,CAACwkG,KAA2BN,GAAyBrvH,GAASmrB,CAAW,KAG5YzkB,IAASA,EAAO,OAAO,CAAAkpH,MAAYA,MAAazkG,CAAW,IAG3DqkG,IAAsCE,GAExCvkG,IAAchF,GAAcgF,CAAW;AAAA,EACzC;AACA,SAAAtZ,EAAM,IAAI7R,GAAS0G,CAAM,GAClBA;AACT;AAIA,SAASmpH,GAAgBhN,GAAM;AAC7B,MAAI;AAAA,IACF,SAAA7iH;AAAA,IACA,UAAAikH;AAAA,IACA,cAAAC;AAAA,IACA,UAAAV;AAAA,EACJ,IAAMX;AAEJ,QAAMiN,IAAoB,CAAC,GADM7L,MAAa,sBAAsB6G,GAAW9qH,CAAO,IAAI,CAAA,IAAKuvH,GAA4BvvH,GAAS,KAAK,EAAE,IAAI,CAAA,EAAG,OAAOikH,CAAQ,GACzGC,CAAY,GAC9D6L,IAAwBD,EAAkB,CAAC,GAC3CE,IAAeF,EAAkB,OAAO,CAACG,GAASb,MAAqB;AAC3E,UAAMzM,IAAOwM,GAAkCnvH,GAASovH,GAAkB5L,CAAQ;AAClF,WAAAyM,EAAQ,MAAM75F,GAAIusF,EAAK,KAAKsN,EAAQ,GAAG,GACvCA,EAAQ,QAAQ95F,GAAIwsF,EAAK,OAAOsN,EAAQ,KAAK,GAC7CA,EAAQ,SAAS95F,GAAIwsF,EAAK,QAAQsN,EAAQ,MAAM,GAChDA,EAAQ,OAAO75F,GAAIusF,EAAK,MAAMsN,EAAQ,IAAI,GACnCA;AAAA,EACT,GAAGd,GAAkCnvH,GAAS+vH,GAAuBvM,CAAQ,CAAC;AAC9E,SAAO;AAAA,IACL,OAAOwM,EAAa,QAAQA,EAAa;AAAA,IACzC,QAAQA,EAAa,SAASA,EAAa;AAAA,IAC3C,GAAGA,EAAa;AAAA,IAChB,GAAGA,EAAa;AAAA,EACpB;AACA;AAEA,SAASE,GAAclwH,GAAS;AAC9B,QAAM;AAAA,IACJ,OAAAm+D;AAAA,IACA,QAAAC;AAAA,EACJ,IAAMguD,GAAiBpsH,CAAO;AAC5B,SAAO;AAAA,IACL,OAAAm+D;AAAA,IACA,QAAAC;AAAA,EACJ;AACA;AAEA,SAAS+xD,GAA8BnwH,GAASukH,GAAcf,GAAU;AACtE,QAAM4K,IAA0B7kE,GAAcg7D,CAAY,GACpDwJ,IAAkB7D,GAAmB3F,CAAY,GACjDyI,IAAUxJ,MAAa,SACvBb,IAAOuK,GAAsBltH,GAAS,IAAMgtH,GAASzI,CAAY;AACvE,MAAIyJ,IAAS;AAAA,IACX,YAAY;AAAA,IACZ,WAAW;AAAA,EACf;AACE,QAAM93E,IAAUsqE,GAAa,CAAC;AAI9B,WAAS4P,IAA4B;AACnC,IAAAl6E,EAAQ,IAAI03E,GAAoBG,CAAe;AAAA,EACjD;AACA,MAAIK,KAA2B,CAACA,KAA2B,CAACpB;AAI1D,SAHIlD,GAAYvF,CAAY,MAAM,UAAU+F,GAAkByD,CAAe,OAC3EC,IAAStC,GAAcnH,CAAY,IAEjC6J,GAAyB;AAC3B,YAAMC,IAAanB,GAAsB3I,GAAc,IAAMyI,GAASzI,CAAY;AAClF,MAAAruE,EAAQ,IAAIm4E,EAAW,IAAI9J,EAAa,YACxCruE,EAAQ,IAAIm4E,EAAW,IAAI9J,EAAa;AAAA,IAC1C,MAAO,CAAIwJ,KACTqC,EAAyB;AAG7B,EAAIpD,KAAW,CAACoB,KAA2BL,KACzCqC,EAAyB;AAE3B,QAAM9B,IAAaP,KAAmB,CAACK,KAA2B,CAACpB,IAAUc,GAAcC,GAAiBC,CAAM,IAAIxN,GAAa,CAAC,GAC9HniH,IAAIskH,EAAK,OAAOqL,EAAO,aAAa93E,EAAQ,IAAIo4E,EAAW,GAC3DxvG,IAAI6jG,EAAK,MAAMqL,EAAO,YAAY93E,EAAQ,IAAIo4E,EAAW;AAC/D,SAAO;AAAA,IACL,GAAAjwH;AAAA,IACA,GAAAygB;AAAA,IACA,OAAO6jG,EAAK;AAAA,IACZ,QAAQA,EAAK;AAAA,EACjB;AACA;AAEA,SAAS0N,GAAmBrwH,GAAS;AACnC,SAAOqsH,GAAmBrsH,CAAO,EAAE,aAAa;AAClD;AAEA,SAASswH,GAAoBtwH,GAASuwH,GAAU;AAC9C,MAAI,CAAChnE,GAAcvpD,CAAO,KAAKqsH,GAAmBrsH,CAAO,EAAE,aAAa;AACtE,WAAO;AAET,MAAIuwH;AACF,WAAOA,EAASvwH,CAAO;AAEzB,MAAIwwH,IAAkBxwH,EAAQ;AAM9B,SAAIkqH,GAAmBlqH,CAAO,MAAMwwH,MAClCA,IAAkBA,EAAgB,cAAc,OAE3CA;AACT;AAIA,SAASC,GAAgBzwH,GAASuwH,GAAU;AAC1C,QAAMtE,IAAMjC,GAAUhqH,CAAO;AAC7B,MAAI8qH,GAAW9qH,CAAO;AACpB,WAAOisH;AAET,MAAI,CAAC1iE,GAAcvpD,CAAO,GAAG;AAC3B,QAAI0wH,IAAkBvqG,GAAcnmB,CAAO;AAC3C,WAAO0wH,KAAmB,CAAClF,GAAsBkF,CAAe,KAAG;AACjE,UAAIvG,GAAUuG,CAAe,KAAK,CAACL,GAAmBK,CAAe;AACnE,eAAOA;AAET,MAAAA,IAAkBvqG,GAAcuqG,CAAe;AAAA,IACjD;AACA,WAAOzE;AAAA,EACT;AACA,MAAI1H,IAAe+L,GAAoBtwH,GAASuwH,CAAQ;AACxD,SAAOhM,KAAgBqG,GAAerG,CAAY,KAAK8L,GAAmB9L,CAAY;AACpF,IAAAA,IAAe+L,GAAoB/L,GAAcgM,CAAQ;AAE3D,SAAIhM,KAAgBiH,GAAsBjH,CAAY,KAAK8L,GAAmB9L,CAAY,KAAK,CAAC4G,GAAkB5G,CAAY,IACrH0H,IAEF1H,KAAgBgH,GAAmBvrH,CAAO,KAAKisH;AACxD;AAEA,MAAM0E,KAAkB,eAAgB9qH,GAAM;AAC5C,QAAM+qH,IAAoB,KAAK,mBAAmBH,IAC5CI,IAAkB,KAAK,eACvBC,IAAqB,MAAMD,EAAgBhrH,EAAK,QAAQ;AAC9D,SAAO;AAAA,IACL,WAAWsqH,GAA8BtqH,EAAK,WAAW,MAAM+qH,EAAkB/qH,EAAK,QAAQ,GAAGA,EAAK,QAAQ;AAAA,IAC9G,UAAU;AAAA,MACR,GAAG;AAAA,MACH,GAAG;AAAA,MACH,OAAOirH,EAAmB;AAAA,MAC1B,QAAQA,EAAmB;AAAA,IACjC;AAAA,EACA;AACA;AAEA,SAASC,GAAM/wH,GAAS;AACtB,SAAOqsH,GAAmBrsH,CAAO,EAAE,cAAc;AACnD;AAEA,MAAM2xE,KAAW;AAAA,EACf,uDAAAu8C;AAAA,EACA,oBAAAhE;AAAA,EACA,iBAAA2F;AAAA,EACA,iBAAAY;AAAA,EACA,iBAAAE;AAAA,EACA,gBAAApC;AAAA,EACA,eAAA2B;AAAA,EACA,UAAAvD;AAAA,EACA,WAAAxC;AAAA,EACA,OAAA4G;AACF;AAEA,SAASC,GAAc13H,GAAGE,GAAG;AAC3B,SAAOF,EAAE,MAAME,EAAE,KAAKF,EAAE,MAAME,EAAE,KAAKF,EAAE,UAAUE,EAAE,SAASF,EAAE,WAAWE,EAAE;AAC7E;AAGA,SAASy3H,GAAYjxH,GAASkxH,GAAQ;AACpC,MAAIC,IAAK,MACLvgF;AACJ,QAAM1rB,IAAOglG,GAAmBlqH,CAAO;AACvC,WAASoM,IAAU;AACjB,QAAIglH;AACJ,iBAAaxgF,CAAS,IACrBwgF,IAAMD,MAAO,QAAQC,EAAI,WAAU,GACpCD,IAAK;AAAA,EACP;AACA,WAASE,EAAQC,GAAMC,GAAW;AAChC,IAAID,MAAS,WACXA,IAAO,KAELC,MAAc,WAChBA,IAAY,IAEdnlH,EAAO;AACP,UAAMolH,IAA2BxxH,EAAQ,sBAAqB,GACxD;AAAA,MACJ,MAAA85B;AAAA,MACA,KAAAkc;AAAA,MACA,OAAAmoB;AAAA,MACA,QAAAC;AAAA,IACN,IAAQozD;AAIJ,QAHKF,KACHJ,EAAM,GAEJ,CAAC/yD,KAAS,CAACC;AACb;AAEF,UAAMqzD,IAAWlR,GAAMvqE,CAAG,GACpB07E,IAAanR,GAAMr7F,EAAK,eAAe4U,IAAOqkC,EAAM,GACpDwzD,IAAcpR,GAAMr7F,EAAK,gBAAgB8wB,IAAMooB,EAAO,GACtDwzD,IAAYrR,GAAMzmF,CAAI,GAEtBhE,IAAU;AAAA,MACd,YAFiB,CAAC27F,IAAW,QAAQ,CAACC,IAAa,QAAQ,CAACC,IAAc,QAAQ,CAACC,IAAY;AAAA,MAG/F,WAAWx7F,GAAI,GAAGD,GAAI,GAAGo7F,CAAS,CAAC,KAAK;AAAA,IAC9C;AACI,QAAIM,IAAgB;AACpB,aAASC,EAAc5xG,GAAS;AAC9B,YAAM6xG,IAAQ7xG,EAAQ,CAAC,EAAE;AACzB,UAAI6xG,MAAUR,GAAW;AACvB,YAAI,CAACM;AACH,iBAAOR,EAAO;AAEhB,QAAKU,IAOHV,EAAQ,IAAOU,CAAK,IAJpBnhF,IAAY,WAAW,MAAM;AAC3B,UAAAygF,EAAQ,IAAO,IAAI;AAAA,QACrB,GAAG,GAAI;AAAA,MAIX;AACA,MAAIU,MAAU,KAAK,CAACf,GAAcQ,GAA0BxxH,EAAQ,sBAAqB,CAAE,KAQzFqxH,EAAO,GAETQ,IAAgB;AAAA,IAClB;AAIA,QAAI;AACF,MAAAV,IAAK,IAAI,qBAAqBW,GAAe;AAAA,QAC3C,GAAGh8F;AAAA;AAAA,QAEH,MAAM5Q,EAAK;AAAA,MACnB,CAAO;AAAA,IACH,QAAa;AACX,MAAAisG,IAAK,IAAI,qBAAqBW,GAAeh8F,CAAO;AAAA,IACtD;AACA,IAAAq7F,EAAG,QAAQnxH,CAAO;AAAA,EACpB;AACA,SAAAqxH,EAAQ,EAAI,GACLjlH;AACT;AAUA,SAAS4lH,GAAWlP,GAAWC,GAAUhxG,GAAQ+jB,GAAS;AACxD,EAAIA,MAAY,WACdA,IAAU,CAAA;AAEZ,QAAM;AAAA,IACJ,gBAAAm8F,IAAiB;AAAA,IACjB,gBAAAC,IAAiB;AAAA,IACjB,eAAAC,IAAgB,OAAO,kBAAmB;AAAA,IAC1C,aAAAC,IAAc,OAAO,wBAAyB;AAAA,IAC9C,gBAAAC,IAAiB;AAAA,EACrB,IAAMv8F,GACEw8F,IAAc5F,GAAc5J,CAAS,GACrCyP,IAAYN,KAAkBC,IAAiB,CAAC,GAAII,IAAc1G,GAAqB0G,CAAW,IAAI,CAAA,GAAK,GAAG1G,GAAqB7I,CAAQ,CAAC,IAAI,CAAA;AACtJ,EAAAwP,EAAU,QAAQ,CAAA3C,MAAY;AAC5B,IAAAqC,KAAkBrC,EAAS,iBAAiB,UAAU79G,GAAQ;AAAA,MAC5D,SAAS;AAAA,IACf,CAAK,GACDmgH,KAAkBtC,EAAS,iBAAiB,UAAU79G,CAAM;AAAA,EAC9D,CAAC;AACD,QAAMygH,IAAYF,KAAeF,IAAcnB,GAAYqB,GAAavgH,CAAM,IAAI;AAClF,MAAI0gH,IAAiB,IACjBv0D,IAAiB;AACrB,EAAIi0D,MACFj0D,IAAiB,IAAI,eAAe,CAAA2kD,MAAQ;AAC1C,QAAI,CAAC6P,CAAU,IAAI7P;AACnB,IAAI6P,KAAcA,EAAW,WAAWJ,KAAep0D,MAGrDA,EAAe,UAAU6kD,CAAQ,GACjC,qBAAqB0P,CAAc,GACnCA,IAAiB,sBAAsB,MAAM;AAC3C,UAAIE;AACJ,OAACA,IAAkBz0D,MAAmB,QAAQy0D,EAAgB,QAAQ5P,CAAQ;AAAA,IAChF,CAAC,IAEHhxG,EAAM;AAAA,EACR,CAAC,GACGugH,KAAe,CAACD,KAClBn0D,EAAe,QAAQo0D,CAAW,GAEpCp0D,EAAe,QAAQ6kD,CAAQ;AAEjC,MAAI6P,GACAC,IAAcR,IAAiBnF,GAAsBpK,CAAS,IAAI;AACtE,EAAIuP,KACFS,EAAS;AAEX,WAASA,IAAY;AACnB,UAAMC,IAAc7F,GAAsBpK,CAAS;AACnD,IAAI+P,KAAe,CAAC7B,GAAc6B,GAAaE,CAAW,KACxDhhH,EAAM,GAER8gH,IAAcE,GACdH,IAAU,sBAAsBE,CAAS;AAAA,EAC3C;AACA,SAAA/gH,EAAM,GACC,MAAM;AACX,QAAIihH;AACJ,IAAAT,EAAU,QAAQ,CAAA3C,MAAY;AAC5B,MAAAqC,KAAkBrC,EAAS,oBAAoB,UAAU79G,CAAM,GAC/DmgH,KAAkBtC,EAAS,oBAAoB,UAAU79G,CAAM;AAAA,IACjE,CAAC,GACDygH,KAAa,QAAQA,EAAS,IAC7BQ,IAAmB90D,MAAmB,QAAQ80D,EAAiB,WAAU,GAC1E90D,IAAiB,MACbm0D,KACF,qBAAqBO,CAAO;AAAA,EAEhC;AACF;AAmBK,MAACpe,KAASye,IAeTlL,KAAQmL,IAQRvN,KAAOwN,IAQPl5G,KAAOm5G,IAOP/L,KAAOgM,IAOP3O,KAAQ4O,IAYRhL,KAAaiL,IAMbhQ,KAAkB,CAACT,GAAWC,GAAUjtF,MAAY;AAIxD,QAAMjkB,IAAQ,oBAAI,IAAG,GACf2hH,IAAgB;AAAA,IACpB,UAAA7hD;AAAA,IACA,GAAG77C;AAAA,EACP,GACQ29F,IAAoB;AAAA,IACxB,GAAGD,EAAc;AAAA,IACjB,IAAI3hH;AAAA,EACR;AACE,SAAO6hH,GAAkB5Q,GAAWC,GAAU;AAAA,IAC5C,GAAGyQ;AAAA,IACH,UAAUC;AAAA,EACd,CAAG;AACH;AChwBA,IAAIE,KAAW,OAAO,WAAa,KAE/Bz8C,KAAO,WAAgB;AAAC,GACxBpvE,KAAQ6rH,KAAWtsF,KAAkB6vC;AAIzC,SAAS5xB,GAAUhsD,GAAGE,GAAG;AACvB,MAAIF,MAAME;AACR,WAAO;AAET,MAAI,OAAOF,KAAM,OAAOE;AACtB,WAAO;AAET,MAAI,OAAOF,KAAM,cAAcA,EAAE,eAAeE,EAAE;AAChD,WAAO;AAET,MAAIqqD,GACAlgD,GACAU;AACJ,MAAI/K,KAAKE,KAAK,OAAOF,KAAM,UAAU;AACnC,QAAI,MAAM,QAAQA,CAAC,GAAG;AAEpB,UADAuqD,IAASvqD,EAAE,QACPuqD,MAAWrqD,EAAE,OAAQ,QAAO;AAChC,WAAKmK,IAAIkgD,GAAQlgD,QAAQ;AACvB,YAAI,CAAC2hD,GAAUhsD,EAAEqK,CAAC,GAAGnK,EAAEmK,CAAC,CAAC;AACvB,iBAAO;AAGX,aAAO;AAAA,IACT;AAGA,QAFAU,IAAO,OAAO,KAAK/K,CAAC,GACpBuqD,IAASx/C,EAAK,QACVw/C,MAAW,OAAO,KAAKrqD,CAAC,EAAE;AAC5B,aAAO;AAET,SAAKmK,IAAIkgD,GAAQlgD,QAAQ;AACvB,UAAI,CAAC,CAAA,EAAG,eAAe,KAAKnK,GAAG6K,EAAKV,CAAC,CAAC;AACpC,eAAO;AAGX,SAAKA,IAAIkgD,GAAQlgD,QAAQ,KAAI;AAC3B,YAAMxB,IAAMkC,EAAKV,CAAC;AAClB,UAAI,EAAAxB,MAAQ,YAAY7I,EAAE,aAGtB,CAACgsD,GAAUhsD,EAAE6I,CAAG,GAAG3I,EAAE2I,CAAG,CAAC;AAC3B,eAAO;AAAA,IAEX;AACA,WAAO;AAAA,EACT;AACA,SAAO7I,MAAMA,KAAKE,MAAMA;AAC1B;AAEA,SAASo6H,GAAO5zH,GAAS;AACvB,SAAI,OAAO,SAAW,MACb,KAEGA,EAAQ,cAAc,eAAe,QACtC,oBAAoB;AACjC;AAEA,SAAS6zH,GAAW7zH,GAASe,GAAO;AAClC,QAAM+yH,IAAMF,GAAO5zH,CAAO;AAC1B,SAAO,KAAK,MAAMe,IAAQ+yH,CAAG,IAAIA;AACnC;AAEA,SAASC,GAAahzH,GAAO;AAC3B,QAAMqB,IAAMvI,EAAM,OAAOkH,CAAK;AAC9B,SAAA+G,GAAM,MAAM;AACV,IAAA1F,EAAI,UAAUrB;AAAA,EAChB,CAAC,GACMqB;AACT;AAMA,SAAS4xH,GAAYl+F,GAAS;AAC5B,EAAIA,MAAY,WACdA,IAAU,CAAA;AAEZ,QAAM;AAAA,IACJ,WAAAgrF,IAAY;AAAA,IACZ,UAAA0C,IAAW;AAAA,IACX,YAAA5wE,IAAa,CAAA;AAAA,IACb,UAAA++B;AAAA,IACA,UAAU;AAAA,MACR,WAAWsiD;AAAA,MACX,UAAUC;AAAA,IAChB,IAAQ,CAAA;AAAA,IACJ,WAAArhG,IAAY;AAAA,IACZ,sBAAAshG;AAAA,IACA,MAAAj2E;AAAA,EACJ,IAAMpoB,GACE,CAACjwB,GAAMC,CAAO,IAAIjM,EAAM,SAAS;AAAA,IACrC,GAAG;AAAA,IACH,GAAG;AAAA,IACH,UAAA2pH;AAAA,IACA,WAAA1C;AAAA,IACA,gBAAgB,CAAA;AAAA,IAChB,cAAc;AAAA,EAClB,CAAG,GACK,CAACsT,GAAkBC,CAAmB,IAAIx6H,EAAM,SAAS+4C,CAAU;AACzE,EAAK0S,GAAU8uE,GAAkBxhF,CAAU,KACzCyhF,EAAoBzhF,CAAU;AAEhC,QAAM,CAAC0hF,GAAYC,CAAa,IAAI16H,EAAM,SAAS,IAAI,GACjD,CAAC26H,GAAWC,CAAY,IAAI56H,EAAM,SAAS,IAAI,GAC/C66H,IAAe76H,EAAM,YAAY,CAAA6J,MAAQ;AAC7C,IAAIA,MAASixH,EAAa,YACxBA,EAAa,UAAUjxH,GACvB6wH,EAAc7wH,CAAI;AAAA,EAEtB,GAAG,CAAA,CAAE,GACCkxH,IAAc/6H,EAAM,YAAY,CAAA6J,MAAQ;AAC5C,IAAIA,MAASmxH,EAAY,YACvBA,EAAY,UAAUnxH,GACtB+wH,EAAa/wH,CAAI;AAAA,EAErB,GAAG,CAAA,CAAE,GACC4uH,IAAc2B,KAAqBK,GACnCQ,IAAaZ,KAAoBM,GACjCG,IAAe96H,EAAM,OAAO,IAAI,GAChCg7H,IAAch7H,EAAM,OAAO,IAAI,GAC/Bk7H,IAAUl7H,EAAM,OAAOgM,CAAI,GAC3BmvH,IAA0Bb,KAAwB,MAClDc,IAA0BlB,GAAaI,CAAoB,GAC3De,IAAcnB,GAAapiD,CAAQ,GACnCwjD,IAAUpB,GAAa71E,CAAI,GAC3BnsC,IAASlY,EAAM,YAAY,MAAM;AACrC,QAAI,CAAC86H,EAAa,WAAW,CAACE,EAAY;AACxC;AAEF,UAAMpzH,IAAS;AAAA,MACb,WAAAq/G;AAAA,MACA,UAAA0C;AAAA,MACA,YAAY4Q;AAAA,IAClB;AACI,IAAIc,EAAY,YACdzzH,EAAO,WAAWyzH,EAAY,UAEhC3R,GAAgBoR,EAAa,SAASE,EAAY,SAASpzH,CAAM,EAAE,KAAK,CAAAoE,MAAQ;AAC9E,YAAMuvH,IAAW;AAAA,QACf,GAAGvvH;AAAA;AAAA;AAAA;AAAA;AAAA,QAKH,cAAcsvH,EAAQ,YAAY;AAAA,MAC1C;AACM,MAAIE,EAAa,WAAW,CAAC/vE,GAAUyvE,EAAQ,SAASK,CAAQ,MAC9DL,EAAQ,UAAUK,GAClBvsF,GAAS,UAAU,MAAM;AACvB,QAAA/iC,EAAQsvH,CAAQ;AAAA,MAClB,CAAC;AAAA,IAEL,CAAC;AAAA,EACH,GAAG,CAAChB,GAAkBtT,GAAW0C,GAAU0R,GAAaC,CAAO,CAAC;AAChE,EAAArtH,GAAM,MAAM;AACV,IAAIo2C,MAAS,MAAS62E,EAAQ,QAAQ,iBACpCA,EAAQ,QAAQ,eAAe,IAC/BjvH,EAAQ,CAAAD,OAAS;AAAA,MACf,GAAGA;AAAA,MACH,cAAc;AAAA,IACtB,EAAQ;AAAA,EAEN,GAAG,CAACq4C,CAAI,CAAC;AACT,QAAMm3E,IAAex7H,EAAM,OAAO,EAAK;AACvC,EAAAiO,GAAM,OACJutH,EAAa,UAAU,IAChB,MAAM;AACX,IAAAA,EAAa,UAAU;AAAA,EACzB,IACC,CAAA,CAAE,GACLvtH,GAAM,MAAM;AAGV,QAFIwqH,MAAaqC,EAAa,UAAUrC,IACpCwC,MAAYD,EAAY,UAAUC,IAClCxC,KAAewC,GAAY;AAC7B,UAAIG,EAAwB;AAC1B,eAAOA,EAAwB,QAAQ3C,GAAawC,GAAY/iH,CAAM;AAExE,MAAAA,EAAM;AAAA,IACR;AAAA,EACF,GAAG,CAACugH,GAAawC,GAAY/iH,GAAQkjH,GAAyBD,CAAuB,CAAC;AACtF,QAAM/oH,IAAOpS,EAAM,QAAQ,OAAO;AAAA,IAChC,WAAW86H;AAAA,IACX,UAAUE;AAAA,IACV,cAAAH;AAAA,IACA,aAAAE;AAAA,EACJ,IAAM,CAACF,GAAcE,CAAW,CAAC,GACzBn6F,IAAW5gC,EAAM,QAAQ,OAAO;AAAA,IACpC,WAAWy4H;AAAA,IACX,UAAUwC;AAAA,EACd,IAAM,CAACxC,GAAawC,CAAU,CAAC,GACvBQ,IAAiBz7H,EAAM,QAAQ,MAAM;AACzC,UAAM07H,IAAgB;AAAA,MACpB,UAAU/R;AAAA,MACV,MAAM;AAAA,MACN,KAAK;AAAA,IACX;AACI,QAAI,CAAC/oF,EAAS;AACZ,aAAO86F;AAET,UAAMl3H,IAAIw1H,GAAWp5F,EAAS,UAAU50B,EAAK,CAAC,GACxCiZ,IAAI+0G,GAAWp5F,EAAS,UAAU50B,EAAK,CAAC;AAC9C,WAAIgtB,IACK;AAAA,MACL,GAAG0iG;AAAA,MACH,WAAW,eAAel3H,IAAI,SAASygB,IAAI;AAAA,MAC3C,GAAI80G,GAAOn5F,EAAS,QAAQ,KAAK,OAAO;AAAA,QACtC,YAAY;AAAA,MACtB;AAAA,IACA,IAEW;AAAA,MACL,UAAU+oF;AAAA,MACV,MAAMnlH;AAAA,MACN,KAAKygB;AAAA,IACX;AAAA,EACE,GAAG,CAAC0kG,GAAU3wF,GAAW4H,EAAS,UAAU50B,EAAK,GAAGA,EAAK,CAAC,CAAC;AAC3D,SAAOhM,EAAM,QAAQ,OAAO;AAAA,IAC1B,GAAGgM;AAAA,IACH,QAAAkM;AAAA,IACA,MAAA9F;AAAA,IACA,UAAAwuB;AAAA,IACA,gBAAA66F;AAAA,EACJ,IAAM,CAACzvH,GAAMkM,GAAQ9F,GAAMwuB,GAAU66F,CAAc,CAAC;AACpD;AAQA,MAAMhC,KAAU,CAAAx9F,MAAW;AACzB,WAAS0/F,EAAMz0H,GAAO;AACpB,WAAO,CAAA,EAAG,eAAe,KAAKA,GAAO,SAAS;AAAA,EAChD;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAA+0B;AAAA,IACA,GAAG+Z,GAAO;AACR,YAAM;AAAA,QACJ,SAAA7vC;AAAA,QACA,SAAAwY;AAAA,MACR,IAAU,OAAOsd,KAAY,aAAaA,EAAQ+Z,CAAK,IAAI/Z;AACrD,aAAI91B,KAAWw1H,EAAMx1H,CAAO,IACtBA,EAAQ,WAAW,OACdy1H,GAAQ;AAAA,QACb,SAASz1H,EAAQ;AAAA,QACjB,SAAAwY;AAAA,MACZ,CAAW,EAAE,GAAGq3B,CAAK,IAEN,CAAA,IAEL7vC,IACKy1H,GAAQ;AAAA,QACb,SAAAz1H;AAAA,QACA,SAAAwY;AAAA,MACV,CAAS,EAAE,GAAGq3B,CAAK,IAEN,CAAA;AAAA,IACT;AAAA,EACJ;AACA,GASM2kE,KAAS,CAAC1+E,GAAS4/F,OAAU;AAAA,EACjC,GAAGzC,GAASn9F,CAAO;AAAA,EACnB,SAAS,CAACA,GAAS4/F,CAAI;AACzB,IAOM3N,KAAQ,CAACjyF,GAAS4/F,OAAU;AAAA,EAChC,GAAGxC,GAAQp9F,CAAO;AAAA,EAClB,SAAS,CAACA,GAAS4/F,CAAI;AACzB,IAKMpN,KAAa,CAACxyF,GAAS4/F,OAAU;AAAA,EACrC,GAAGnC,GAAaz9F,CAAO;AAAA,EACvB,SAAS,CAACA,GAAS4/F,CAAI;AACzB,IAQM/P,KAAO,CAAC7vF,GAAS4/F,OAAU;AAAA,EAC/B,GAAGvC,GAAOr9F,CAAO;AAAA,EACjB,SAAS,CAACA,GAAS4/F,CAAI;AACzB,IAQMz7G,KAAO,CAAC6b,GAAS4/F,OAAU;AAAA,EAC/B,GAAGtC,GAAOt9F,CAAO;AAAA,EACjB,SAAS,CAACA,GAAS4/F,CAAI;AACzB,IAkBMrO,KAAO,CAACvxF,GAAS4/F,OAAU;AAAA,EAC/B,GAAGrC,GAAOv9F,CAAO;AAAA,EACjB,SAAS,CAACA,GAAS4/F,CAAI;AACzB,IAkBMhR,KAAQ,CAAC5uF,GAAS4/F,OAAU;AAAA,EAChC,GAAGpC,GAAQx9F,CAAO;AAAA,EAClB,SAAS,CAACA,GAAS4/F,CAAI;AACzB;AC5WA,IAAI5/D,KAAO,SACP6/D,KAAQ97H,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACpD,QAAM,EAAE,UAAAlI,GAAU,OAAAu5D,IAAQ,IAAI,QAAAC,IAAS,GAAG,GAAGw3D,EAAU,IAAK/3H;AAC5D,SAAuBoH,gBAAAA,EAAAA;AAAAA,IACrBwjC,GAAU;AAAA,IACV;AAAA,MACE,GAAGmtF;AAAA,MACH,KAAK9oH;AAAA,MACL,OAAAqxD;AAAA,MACA,QAAAC;AAAA,MACA,SAAS;AAAA,MACT,qBAAqB;AAAA,MACrB,UAAUvgE,EAAM,UAAU+G,IAA2BK,gBAAAA,EAAAA,IAAI,WAAW,EAAE,QAAQ,iBAAgB,CAAE;AAAA,IACtG;AAAA,EACA;AACA,CAAC;AACD0wH,GAAM,cAAc7/D;AACpB,IAAIxU,KAAOq0E,ICIPE,KAAc,UACd,CAACC,IAAqBC,EAAiB,IAAInwF,GAAmBiwF,EAAW,GACzE,CAACG,IAAgBC,EAAgB,IAAIH,GAAoBD,EAAW,GACpEK,KAAS,CAACr4H,MAAU;AACtB,QAAM,EAAE,eAAAs4H,GAAe,UAAAvxH,EAAQ,IAAK/G,GAC9B,CAACu4H,GAAQC,CAAS,IAAIx8H,EAAM,SAAS,IAAI;AAC/C,SAAuBoL,gBAAAA,EAAAA,IAAI+wH,IAAgB,EAAE,OAAOG,GAAe,QAAAC,GAAQ,gBAAgBC,GAAW,UAAAzxH,GAAU;AAClH;AACAsxH,GAAO,cAAcL;AACrB,IAAIS,KAAc,gBACdC,KAAe18H,EAAM;AAAA,EACvB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,eAAAqpH,GAAe,YAAAK,GAAY,GAAGC,EAAW,IAAK54H,GAChDjB,IAAUq5H,GAAiBK,IAAaH,CAAa,GACrD/zH,IAAMvI,EAAM,OAAO,IAAI,GACvBuwC,IAAe/9B,GAAgBS,GAAc1K,CAAG,GAChDs0H,IAAY78H,EAAM,OAAO,IAAI;AACnC,WAAAA,EAAM,UAAU,MAAM;AACpB,YAAM88H,IAAiBD,EAAU;AACjC,MAAAA,EAAU,WAAUF,KAAA,gBAAAA,EAAY,YAAWp0H,EAAI,SAC3Cu0H,MAAmBD,EAAU,WAC/B95H,EAAQ,eAAe85H,EAAU,OAAO;AAAA,IAE5C,CAAC,GACMF,IAAa,OAAuBvxH,gBAAAA,EAAAA,IAAIwjC,GAAU,KAAK,EAAE,GAAGguF,GAAa,KAAKrsF,GAAc;AAAA,EACrG;AACF;AACAmsF,GAAa,cAAcD;AAC3B,IAAIl3E,KAAe,iBACf,CAACw3E,IAAuBC,EAAiB,IAAIf,GAAoB12E,EAAY,GAC7E03E,KAAgBj9H,EAAM;AAAA,EACxB,CAACgE,GAAOiP,MAAiB;;AACvB,UAAM;AAAA,MACJ,eAAAqpH;AAAA,MACA,MAAA/T,IAAO;AAAA,MACP,YAAA2U,IAAa;AAAA,MACb,OAAAC,IAAQ;AAAA,MACR,aAAAC,IAAc;AAAA,MACd,cAAAC,IAAe;AAAA,MACf,iBAAAC,IAAkB;AAAA,MAClB,mBAAAC,IAAoB,CAAA;AAAA,MACpB,kBAAkBC,IAAuB;AAAA,MACzC,QAAAC,IAAS;AAAA,MACT,kBAAAC,IAAmB;AAAA,MACnB,wBAAAC,IAAyB;AAAA,MACzB,UAAAC;AAAA,MACA,GAAGn4E;AAAA,IACT,IAAQzhD,GACEjB,IAAUq5H,GAAiB72E,IAAc+2E,CAAa,GACtD,CAACvsH,GAAS8tH,CAAU,IAAI79H,EAAM,SAAS,IAAI,GAC3CuwC,IAAe/9B,GAAgBS,GAAc,CAACpJ,OAASg0H,EAAWh0H,EAAI,CAAC,GACvE,CAACghH,GAAOiT,CAAQ,IAAI99H,EAAM,SAAS,IAAI,GACvC+9H,IAAY55D,GAAQ0mD,CAAK,GACzBmT,KAAaD,KAAA,gBAAAA,EAAW,UAAS,GACjCE,KAAcF,KAAA,gBAAAA,EAAW,WAAU,GACnCG,IAAmB3V,KAAQ4U,MAAU,WAAW,MAAMA,IAAQ,KAC9DgB,IAAmB,OAAOX,KAAyB,WAAWA,IAAuB,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,GAAGA,EAAoB,GACpJpT,IAAW,MAAM,QAAQmT,CAAiB,IAAIA,IAAoB,CAACA,CAAiB,GACpFa,IAAwBhU,EAAS,SAAS,GAC1CmC,IAAwB;AAAA,MAC5B,SAAS4R;AAAA,MACT,UAAU/T,EAAS,OAAOiU,EAAS;AAAA;AAAA,MAEnC,aAAaD;AAAA,IACnB,GACU,EAAE,MAAAhsH,GAAM,gBAAAqpH,GAAgB,WAAAxU,GAAW,cAAAqX,GAAc,gBAAAxU,EAAc,IAAKqQ,GAAY;AAAA;AAAA,MAEpF,UAAU;AAAA,MACV,WAAW+D;AAAA,MACX,sBAAsB,IAAI38H,OACR42H,GAAW,GAAG52H,IAAM;AAAA,QAClC,gBAAgBo8H,MAA2B;AAAA,MACrD,CAAS;AAAA,MAGH,UAAU;AAAA,QACR,WAAW56H,EAAQ;AAAA,MAC3B;AAAA,MACM,YAAY;AAAA,QACV43G,GAAO,EAAE,UAAUuiB,IAAae,GAAa,eAAeb,GAAa;AAAA,QACzEE,KAAmBpP,GAAM;AAAA,UACvB,UAAU;AAAA,UACV,WAAW;AAAA,UACX,SAASuP,MAAW,YAAYhP,GAAU,IAAK;AAAA,UAC/C,GAAGlC;AAAA,QACb,CAAS;AAAA,QACD+Q,KAAmBxR,GAAK,EAAE,GAAGS,GAAuB;AAAA,QACpDnsG,GAAK;AAAA,UACH,GAAGmsG;AAAA,UACH,OAAO,CAAC,EAAE,UAAA3rF,IAAU,OAAA6mF,IAAO,gBAAAiI,IAAgB,iBAAAD,GAAe,MAAO;AAC/D,kBAAM,EAAE,OAAO8O,IAAa,QAAQC,GAAY,IAAK/W,GAAM,WACrDxE,KAAeriF,GAAS,SAAS;AACvC,YAAAqiF,GAAa,YAAY,kCAAkC,GAAGyM,EAAc,IAAI,GAChFzM,GAAa,YAAY,mCAAmC,GAAGwM,EAAe,IAAI,GAClFxM,GAAa,YAAY,+BAA+B,GAAGsb,EAAW,IAAI,GAC1Etb,GAAa,YAAY,gCAAgC,GAAGub,EAAY,IAAI;AAAA,UAC9E;AAAA,QACV,CAAS;AAAA,QACD3T,KAAS4T,GAAgB,EAAE,SAAS5T,GAAO,SAASwS,GAAc;AAAA,QAClEqB,GAAgB,EAAE,YAAAV,GAAY,aAAAC,GAAa;AAAA,QAC3CP,KAAoBlQ,GAAK,EAAE,UAAU,mBAAmB,GAAGjB,EAAqB,CAAE;AAAA,MAC1F;AAAA,IACA,CAAK,GACK,CAACoS,GAAYC,CAAW,IAAIC,GAA6B5X,CAAS,GAClE6X,KAAe7vF,GAAe2uF,CAAQ;AAC5CpwF,IAAAA,GAAgB,MAAM;AACpB,MAAI8wF,MACFQ,MAAA,QAAAA;AAAA,IAEJ,GAAG,CAACR,GAAcQ,EAAY,CAAC;AAC/B,UAAMC,MAAS/wH,KAAA87G,EAAe,UAAf,gBAAA97G,GAAsB,GAC/BgxH,MAAS7qH,KAAA21G,EAAe,UAAf,gBAAA31G,GAAsB,GAC/B8qH,OAAoBn5G,KAAAgkG,EAAe,UAAf,gBAAAhkG,GAAsB,kBAAiB,GAC3D,CAACo5G,IAAeC,EAAgB,IAAIn/H,EAAM,SAAQ;AACxDwtC,WAAAA,GAAgB,MAAM;AACpB,MAAIz9B,KAASovH,GAAiB,OAAO,iBAAiBpvH,CAAO,EAAE,MAAM;AAAA,IACvE,GAAG,CAACA,CAAO,CAAC,GACW3E,gBAAAA,EAAAA;AAAAA,MACrB;AAAA,MACA;AAAA,QACE,KAAKgH,EAAK;AAAA,QACV,qCAAqC;AAAA,QACrC,OAAO;AAAA,UACL,GAAGqpH;AAAA,UACH,WAAW6C,IAAe7C,EAAe,YAAY;AAAA;AAAA,UAErD,UAAU;AAAA,UACV,QAAQyD;AAAA,UACP,mCAAoC;AAAA,aACnCn5G,KAAA+jG,EAAe,oBAAf,gBAAA/jG,GAAgC;AAAA,aAChC/D,KAAA8nG,EAAe,oBAAf,gBAAA9nG,GAAgC;AAAA,UAC5C,EAAY,KAAK,GAAG;AAAA;AAAA;AAAA;AAAA,UAIV,KAAGuvC,KAAAu4D,EAAe,SAAf,gBAAAv4D,GAAqB,oBAAmB;AAAA,YACzC,YAAY;AAAA,YACZ,eAAe;AAAA,UAC3B;AAAA,QACA;AAAA,QACQ,KAAKvtD,EAAM;AAAA,QACX,UAA0BoH,gBAAAA,EAAAA;AAAAA,UACxB2xH;AAAA,UACA;AAAA,YACE,OAAOT;AAAA,YACP,YAAAqC;AAAA,YACA,eAAeb;AAAA,YACf,QAAAiB;AAAA,YACA,QAAAC;AAAA,YACA,iBAAiBC;AAAA,YACjB,UAA0B7zH,gBAAAA,EAAAA;AAAAA,cACxBwjC,GAAU;AAAA,cACV;AAAA,gBACE,aAAa+vF;AAAA,gBACb,cAAcC;AAAA,gBACd,GAAGn5E;AAAA,gBACH,KAAKlV;AAAA,gBACL,OAAO;AAAA,kBACL,GAAGkV,EAAa;AAAA;AAAA;AAAA,kBAGhB,WAAY64E,IAAwB,SAAT;AAAA,gBAC7C;AAAA,cACA;AAAA,YACA;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF;AACArB,GAAc,cAAc13E;AAC5B,IAAI65E,KAAa,eACbC,KAAgB;AAAA,EAClB,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AACR,GACIC,KAAct/H,EAAM,WAAW,SAAsBgE,GAAOiP,GAAc;AAC5E,QAAM,EAAE,eAAAqpH,GAAe,GAAGP,EAAU,IAAK/3H,GACnCu7H,IAAiBvC,GAAkBoC,IAAY9C,CAAa,GAC5DkD,IAAWH,GAAcE,EAAe,UAAU;AACxD;AAAA;AAAA;AAAA;AAAA,IAIkBn0H,gBAAAA,EAAAA;AAAAA,MACd;AAAA,MACA;AAAA,QACE,KAAKm0H,EAAe;AAAA,QACpB,OAAO;AAAA,UACL,UAAU;AAAA,UACV,MAAMA,EAAe;AAAA,UACrB,KAAKA,EAAe;AAAA,UACpB,CAACC,CAAQ,GAAG;AAAA,UACZ,iBAAiB;AAAA,YACf,KAAK;AAAA,YACL,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,MAAM;AAAA,UAClB,EAAYD,EAAe,UAAU;AAAA,UAC3B,WAAW;AAAA,YACT,KAAK;AAAA,YACL,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,MAAM;AAAA,UAClB,EAAYA,EAAe,UAAU;AAAA,UAC3B,YAAYA,EAAe,kBAAkB,WAAW;AAAA,QAClE;AAAA,QACQ,UAA0Bn0H,gBAAAA,EAAAA;AAAAA,UACxBq0H;AAAAA,UACA;AAAA,YACE,GAAG1D;AAAA,YACH,KAAK9oH;AAAA,YACL,OAAO;AAAA,cACL,GAAG8oH,EAAW;AAAA;AAAA,cAEd,SAAS;AAAA,YACvB;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA;AAEA,CAAC;AACDuD,GAAY,cAAcF;AAC1B,SAASf,GAAUn3H,GAAO;AACxB,SAAOA,MAAU;AACnB;AACA,IAAIw3H,KAAkB,CAACziG,OAAa;AAAA,EAClC,MAAM;AAAA,EACN,SAAAA;AAAA,EACA,GAAGjwB,GAAM;;AACP,UAAM,EAAE,WAAAi7G,GAAW,OAAAQ,GAAO,gBAAAqC,EAAc,IAAK99G,GAEvC0zH,MADoB1xH,IAAA87G,EAAe,UAAf,gBAAA97G,EAAsB,kBAAiB,GAE3DgwH,IAAa0B,IAAgB,IAAIzjG,EAAQ,YACzCgiG,IAAcyB,IAAgB,IAAIzjG,EAAQ,aAC1C,CAAC0iG,GAAYC,CAAW,IAAIC,GAA6B5X,CAAS,GAClE0Y,IAAe,EAAE,OAAO,MAAM,QAAQ,OAAO,KAAK,OAAM,EAAGf,CAAW,GACtEgB,OAAgBzrH,IAAA21G,EAAe,UAAf,gBAAA31G,EAAsB,MAAK,KAAK6pH,IAAa,GAC7D6B,OAAgB/5G,IAAAgkG,EAAe,UAAf,gBAAAhkG,EAAsB,MAAK,KAAKm4G,IAAc;AACpE,QAAIz5H,IAAI,IACJygB,IAAI;AACR,WAAI05G,MAAe,YACjBn6H,IAAIk7H,IAAgBC,IAAe,GAAGC,CAAY,MAClD36G,IAAI,GAAG,CAACg5G,CAAW,QACVU,MAAe,SACxBn6H,IAAIk7H,IAAgBC,IAAe,GAAGC,CAAY,MAClD36G,IAAI,GAAGwiG,EAAM,SAAS,SAASwW,CAAW,QACjCU,MAAe,WACxBn6H,IAAI,GAAG,CAACy5H,CAAW,MACnBh5G,IAAIy6G,IAAgBC,IAAe,GAAGE,CAAY,QACzClB,MAAe,WACxBn6H,IAAI,GAAGijH,EAAM,SAAS,QAAQwW,CAAW,MACzCh5G,IAAIy6G,IAAgBC,IAAe,GAAGE,CAAY,OAE7C,EAAE,MAAM,EAAE,GAAAr7H,GAAG,GAAAygB,EAAC,EAAE;AAAA,EACzB;AACF;AACA,SAAS45G,GAA6B5X,GAAW;AAC/C,QAAM,CAACsB,GAAM4U,IAAQ,QAAQ,IAAIlW,EAAU,MAAM,GAAG;AACpD,SAAO,CAACsB,GAAM4U,CAAK;AACrB;AACA,IAAIv5D,KAAQy4D,IACRyD,KAASpD,IACT90E,KAAUq1E,IACVnB,KAAQwD;AAAA;AChSZ,SAAS1sH,GAAWC,GAAW;AAC7B,QAAMC,IAA4B,gBAAAC,GAAgBF,CAAS,GACrDG,IAAQhT,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACtD,UAAM,EAAE,UAAAlI,GAAU,GAAGmI,EAAS,IAAKlP,GAC7BmP,IAAgBnT,EAAM,SAAS,QAAQ+K,CAAQ,GAC/CqI,IAAYD,EAAc,KAAKE,EAAW;AAChD,QAAID,GAAW;AACb,YAAME,IAAaF,EAAU,MAAM,UAC7BG,IAAcJ,EAAc,IAAI,CAACpJ,MACjCA,MAAUqJ,IACRpT,EAAM,SAAS,MAAMsT,CAAU,IAAI,IAAUtT,EAAM,SAAS,KAAK,IAAI,IAClEA,EAAM,eAAesT,CAAU,IAAIA,EAAW,MAAM,WAAW,OAE/DvJ,CAEV;AACD,aAAuBqB,gBAAAA,EAAAA,IAAI0H,GAAW,EAAE,GAAGI,GAAW,KAAKD,GAAc,UAAUjT,EAAM,eAAesT,CAAU,IAAItT,EAAM,aAAasT,GAAY,QAAQC,CAAW,IAAI,MAAM;AAAA,IACpL;AACA,WAAuBnI,gBAAAA,EAAAA,IAAI0H,GAAW,EAAE,GAAGI,GAAW,KAAKD,GAAc,UAAAlI,GAAU;AAAA,EACrF,CAAC;AACD,SAAAiI,EAAM,cAAc,GAAGH,CAAS,SACzBG;AACT;AAAA;AAGA,SAASD,GAAgBF,GAAW;AAClC,QAAMC,IAAY9S,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AAC1D,UAAM,EAAE,UAAAlI,GAAU,GAAGmI,EAAS,IAAKlP;AACnC,QAAIhE,EAAM,eAAe+K,CAAQ,GAAG;AAClC,YAAM0I,IAAcC,GAAc3I,CAAQ,GACpC4I,IAASC,GAAWV,GAAWnI,EAAS,KAAK;AACnD,aAAIA,EAAS,SAAS/K,EAAM,aAC1B2T,EAAO,MAAMV,IAAed,GAAYc,GAAcQ,CAAW,IAAIA,IAEhEzT,EAAM,aAAa+K,GAAU4I,CAAM;AAAA,IAC5C;AACA,WAAO3T,EAAM,SAAS,MAAM+K,CAAQ,IAAI,IAAI/K,EAAM,SAAS,KAAK,IAAI,IAAI;AAAA,EAC1E,CAAC;AACD,SAAA8S,EAAU,cAAc,GAAGD,CAAS,cAC7BC;AACT;AACA,IAAIe,KAAuB,OAAO,iBAAiB;AAWnD,SAASR,GAAYtJ,GAAO;AAC1B,SAAO/J,EAAM,eAAe+J,CAAK,KAAK,OAAOA,EAAM,QAAS,cAAc,eAAeA,EAAM,QAAQA,EAAM,KAAK,cAAc8J;AAClI;AACA,SAASD,GAAWV,GAAWY,GAAY;AACzC,QAAMC,IAAgB,EAAE,GAAGD,EAAU;AACrC,aAAWpL,KAAYoL,GAAY;AACjC,UAAME,IAAgBd,EAAUxK,CAAQ,GAClCuL,IAAiBH,EAAWpL,CAAQ;AAE1C,IADkB,WAAW,KAAKA,CAAQ,IAEpCsL,KAAiBC,IACnBF,EAAcrL,CAAQ,IAAI,IAAInH,MAAS;AACrC,YAAMsL,IAASoH,EAAe,GAAG1S,CAAI;AACrC,aAAAyS,EAAc,GAAGzS,CAAI,GACdsL;AAAA,IACT,IACSmH,MACTD,EAAcrL,CAAQ,IAAIsL,KAEnBtL,MAAa,UACtBqL,EAAcrL,CAAQ,IAAI,EAAE,GAAGsL,GAAe,GAAGC,EAAc,IACtDvL,MAAa,gBACtBqL,EAAcrL,CAAQ,IAAI,CAACsL,GAAeC,CAAc,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,EAEtF;AACA,SAAO,EAAE,GAAGf,GAAW,GAAGa,EAAa;AACzC;AACA,SAASL,GAAcvN,GAAS;;AAC9B,MAAI0B,KAASmG,IAAA,OAAO,yBAAyB7H,EAAQ,OAAO,KAAK,MAApD,gBAAA6H,EAAuD,KAChEkG,IAAUrM,KAAU,oBAAoBA,KAAUA,EAAO;AAC7D,SAAIqM,IACK/N,EAAQ,OAEjB0B,KAASsM,IAAA,OAAO,yBAAyBhO,GAAS,KAAK,MAA9C,gBAAAgO,EAAiD,KAC1DD,IAAUrM,KAAU,oBAAoBA,KAAUA,EAAO,gBACrDqM,IACK/N,EAAQ,MAAM,MAEhBA,EAAQ,MAAM,OAAOA,EAAQ;AACtC;ACvEA,IAAI45H,KAAiB,CAAC,SAAS,GAAG,GAC9BC,KAAa,CAAC,aAAa,UAAU,MAAM,GAC3CC,KAAY,CAAC,WAAW,YAAY,KAAK,GACzCC,KAAkB,CAAC,GAAGF,IAAY,GAAGC,EAAS,GAC9CE,KAAgB;AAAA,EAClB,KAAK,CAAC,GAAGJ,IAAgB,YAAY;AAAA,EACrC,KAAK,CAAC,GAAGA,IAAgB,WAAW;AACtC,GACIK,KAAiB;AAAA,EACnB,KAAK,CAAC,WAAW;AAAA,EACjB,KAAK,CAAC,YAAY;AACpB,GACIC,KAAY,QACZ,CAACxhE,IAAYT,IAAeb,EAAqB,IAAIH,GAAiBijE,EAAS,GAC/E,CAACC,IAAmBC,EAAe,IAAIx0F,GAAmBs0F,IAAW;AAAA,EACvE9iE;AAAA,EACA2+D;AAAA,EACAn9D;AACF,CAAC,GACGyhE,KAAiBtE,GAAiB,GAClCh6D,KAA2BnD,GAA2B,GACtD,CAAC0hE,IAAcC,EAAc,IAAIJ,GAAkBD,EAAS,GAC5D,CAACM,IAAkBC,EAAkB,IAAIN,GAAkBD,EAAS,GACpEQ,KAAO,CAAC78H,MAAU;AACpB,QAAM,EAAE,aAAA88H,GAAa,MAAAz8E,IAAO,IAAO,UAAAt5C,GAAU,KAAAu0D,GAAK,cAAArb,GAAc,OAAAC,IAAQ,GAAI,IAAKlgD,GAC3E+8H,IAAcP,GAAeM,CAAW,GACxC,CAAC/wH,GAAS8tH,CAAU,IAAI79H,EAAM,SAAS,IAAI,GAC3CghI,IAAqBhhI,EAAM,OAAO,EAAK,GACvCihI,IAAmBhyF,GAAegV,CAAY,GAC9C1F,IAAYigB,GAAac,CAAG;AAClC,SAAAt/D,EAAM,UAAU,MAAM;AACpB,UAAMuvC,IAAgB,MAAM;AAC1B,MAAAyxF,EAAmB,UAAU,IAC7B,SAAS,iBAAiB,eAAeE,GAAe,EAAE,SAAS,IAAM,MAAM,IAAM,GACrF,SAAS,iBAAiB,eAAeA,GAAe,EAAE,SAAS,IAAM,MAAM,IAAM;AAAA,IACvF,GACMA,IAAgB,MAAMF,EAAmB,UAAU;AACzD,oBAAS,iBAAiB,WAAWzxF,GAAe,EAAE,SAAS,IAAM,GAC9D,MAAM;AACX,eAAS,oBAAoB,WAAWA,GAAe,EAAE,SAAS,IAAM,GACxE,SAAS,oBAAoB,eAAe2xF,GAAe,EAAE,SAAS,IAAM,GAC5E,SAAS,oBAAoB,eAAeA,GAAe,EAAE,SAAS,IAAM;AAAA,IAC9E;AAAA,EACF,GAAG,CAAA,CAAE,GACkB91H,gBAAAA,EAAAA,IAAI+1H,IAAsB,EAAE,GAAGJ,GAAa,UAA0B31H,gBAAAA,EAAAA;AAAAA,IAC3Fq1H;AAAA,IACA;AAAA,MACE,OAAOK;AAAA,MACP,MAAAz8E;AAAA,MACA,cAAc48E;AAAA,MACd,SAAAlxH;AAAA,MACA,iBAAiB8tH;AAAA,MACjB,UAA0BzyH,gBAAAA,EAAAA;AAAAA,QACxBu1H;AAAA,QACA;AAAA,UACE,OAAOG;AAAA,UACP,SAAS9gI,EAAM,YAAY,MAAMihI,EAAiB,EAAK,GAAG,CAACA,CAAgB,CAAC;AAAA,UAC5E,oBAAAD;AAAA,UACA,KAAKziF;AAAA,UACL,OAAA2F;AAAA,UACA,UAAAn5C;AAAA,QACV;AAAA,MACA;AAAA,IACA;AAAA,EACA,GAAK;AACL;AACA81H,GAAK,cAAcR;AACnB,IAAI5D,KAAc,cACd2E,KAAaphI,EAAM;AAAA,EACrB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,aAAA6tH,GAAa,GAAGlE,EAAW,IAAK54H,GAClC+8H,IAAcP,GAAeM,CAAW;AAC9C,WAAuB11H,gBAAAA,EAAAA,IAAIi2H,IAAwB,EAAE,GAAGN,GAAa,GAAGnE,GAAa,KAAK3pH,GAAc;AAAA,EAC1G;AACF;AACAmuH,GAAW,cAAc3E;AACzB,IAAIlnF,KAAc,cACd,CAACsP,IAAgBC,EAAgB,IAAIw7E,GAAkB/qF,IAAa;AAAA,EACtE,YAAY;AACd,CAAC,GACG+rF,KAAa,CAACt9H,MAAU;AAC1B,QAAM,EAAE,aAAA88H,GAAa,YAAA97E,GAAY,UAAAj6C,GAAU,WAAAmF,EAAS,IAAKlM,GACnDjB,IAAU29H,GAAenrF,IAAaurF,CAAW;AACvD,SAAuB11H,gBAAAA,MAAIy5C,IAAgB,EAAE,OAAOi8E,GAAa,YAAA97E,GAAY,UAA0B55C,gBAAAA,EAAAA,IAAI6qC,IAAU,EAAE,SAAS+O,KAAcjiD,EAAQ,MAAM,UAA0BqI,gBAAAA,MAAI65C,IAAiB,EAAE,SAAS,IAAM,WAAA/0C,GAAW,UAAAnF,GAAU,EAAC,CAAE,EAAC,CAAE;AACzP;AACAu2H,GAAW,cAAc/rF;AACzB,IAAIgQ,KAAe,eACf,CAACg8E,IAAqBC,EAAqB,IAAIlB,GAAkB/6E,EAAY,GAC7Ek8E,KAAczhI,EAAM;AAAA,EACtB,CAACgE,GAAOiP,MAAiB;AACvB,UAAMmyC,IAAgBN,GAAiBS,IAAcvhD,EAAM,WAAW,GAChE,EAAE,YAAAghD,IAAaI,EAAc,YAAY,GAAGK,EAAY,IAAKzhD,GAC7DjB,IAAU29H,GAAen7E,IAAcvhD,EAAM,WAAW,GACxD09H,IAAcd,GAAmBr7E,IAAcvhD,EAAM,WAAW;AACtE,WAAuBoH,gBAAAA,EAAAA,IAAIyzD,GAAW,UAAU,EAAE,OAAO76D,EAAM,aAAa,UAA0BoH,gBAAAA,MAAI6qC,IAAU,EAAE,SAAS+O,KAAcjiD,EAAQ,MAAM,UAA0BqI,gBAAAA,EAAAA,IAAIyzD,GAAW,MAAM,EAAE,OAAO76D,EAAM,aAAa,UAAU09H,EAAY,QAAwBt2H,gBAAAA,EAAAA,IAAIu2H,IAAsB,EAAE,GAAGl8E,GAAc,KAAKxyC,EAAY,CAAE,IAAoB7H,gBAAAA,MAAIw2H,IAAyB,EAAE,GAAGn8E,GAAc,KAAKxyC,GAAc,EAAC,CAAE,EAAC,CAAE,GAAG;AAAA,EACtb;AACF,GACI0uH,KAAuB3hI,EAAM;AAAA,EAC/B,CAACgE,GAAOiP,MAAiB;AACvB,UAAMlQ,IAAU29H,GAAen7E,IAAcvhD,EAAM,WAAW,GACxDuE,IAAMvI,EAAM,OAAO,IAAI,GACvBuwC,IAAe/9B,GAAgBS,GAAc1K,CAAG;AACtD,WAAAvI,EAAM,UAAU,MAAM;AACpB,YAAM+P,IAAUxH,EAAI;AACpB,UAAIwH,EAAS,QAAOuzC,GAAWvzC,CAAO;AAAA,IACxC,GAAG,CAAA,CAAE,GACkB3E,gBAAAA,EAAAA;AAAAA,MACrBy2H;AAAA,MACA;AAAA,QACE,GAAG79H;AAAA,QACH,KAAKusC;AAAA,QACL,WAAWxtC,EAAQ;AAAA,QACnB,6BAA6BA,EAAQ;AAAA,QACrC,sBAAsB;AAAA,QACtB,gBAAgBooC;AAAA,UACdnnC,EAAM;AAAA,UACN,CAACunC,MAAUA,EAAM,eAAc;AAAA,UAC/B,EAAE,0BAA0B,GAAK;AAAA,QAC3C;AAAA,QACQ,WAAW,MAAMxoC,EAAQ,aAAa,EAAK;AAAA,MACnD;AAAA,IACA;AAAA,EACE;AACF,GACI6+H,KAA0B5hI,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACtE,QAAMlQ,IAAU29H,GAAen7E,IAAcvhD,EAAM,WAAW;AAC9D,SAAuBoH,gBAAAA,EAAAA;AAAAA,IACrBy2H;AAAA,IACA;AAAA,MACE,GAAG79H;AAAA,MACH,KAAKiP;AAAA,MACL,WAAW;AAAA,MACX,6BAA6B;AAAA,MAC7B,sBAAsB;AAAA,MACtB,WAAW,MAAMlQ,EAAQ,aAAa,EAAK;AAAA,IACjD;AAAA,EACA;AACA,CAAC,GACGyQ,KAAO,gBAAAZ,GAAW,wBAAwB,GAC1CivH,KAAkB7hI,EAAM;AAAA,EAC1B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM;AAAA,MACJ,aAAA6tH;AAAA,MACA,MAAAnuF,IAAO;AAAA,MACP,WAAAsT;AAAA,MACA,iBAAAC;AAAA,MACA,kBAAAC;AAAA,MACA,6BAAApW;AAAA,MACA,cAAA2vB;AAAA,MACA,iBAAApwB;AAAA,MACA,sBAAAU;AAAA,MACA,gBAAAC;AAAA,MACA,mBAAAC;AAAA,MACA,WAAAC;AAAA,MACA,sBAAA2xF;AAAA,MACA,GAAGr8E;AAAA,IACT,IAAQzhD,GACEjB,IAAU29H,GAAen7E,IAAcu7E,CAAW,GAClDY,IAAcd,GAAmBr7E,IAAcu7E,CAAW,GAC1DC,IAAcP,GAAeM,CAAW,GACxCh+D,IAAwBZ,GAAyB4+D,CAAW,GAC5D5gE,IAAW9B,GAAc0iE,CAAW,GACpC,CAACiB,GAAeC,CAAgB,IAAIhiI,EAAM,SAAS,IAAI,GACvDokD,IAAapkD,EAAM,OAAO,IAAI,GAC9BuwC,IAAe/9B,GAAgBS,GAAcmxC,GAAYrhD,EAAQ,eAAe,GAChFk/H,IAAWjiI,EAAM,OAAO,CAAC,GACzBkiI,IAAYliI,EAAM,OAAO,EAAE,GAC3BmiI,IAAuBniI,EAAM,OAAO,CAAC,GACrCoiI,IAAwBpiI,EAAM,OAAO,IAAI,GACzCqiI,IAAgBriI,EAAM,OAAO,OAAO,GACpCsiI,IAAkBtiI,EAAM,OAAO,CAAC,GAChCuiI,IAAoBT,IAAuB7nF,KAAej6C,EAAM,UAChEwiI,IAAyBV,IAAuB,EAAE,IAAItuH,IAAM,gBAAgB,GAAI,IAAK,QACrFivH,IAAwB,CAACn6H,MAAQ;;AACrC,YAAMo6H,IAASR,EAAU,UAAU55H,GAC7BmrB,KAAQysC,IAAW,OAAO,CAACp+D,OAAS,CAACA,GAAK,QAAQ,GAClD6+D,KAAc,SAAS,eACvBgiE,MAAe30H,KAAAylB,GAAM,KAAK,CAAC3xB,OAASA,GAAK,IAAI,YAAY6+D,EAAW,MAArD,gBAAA3yD,GAAwD,WACvEzH,KAASktB,GAAM,IAAI,CAAC3xB,OAASA,GAAK,SAAS,GAC3C8gI,KAAYC,GAAat8H,IAAQm8H,GAAQC,EAAY,GACrDG,MAAU3uH,KAAAsf,GAAM,KAAK,CAAC3xB,OAASA,GAAK,cAAc8gI,EAAS,MAAjD,gBAAAzuH,GAAoD,IAAI;AACxE,OAAC,SAAS4uH,GAAa77H,IAAO;AAC5B,QAAAg7H,EAAU,UAAUh7H,IACpB,OAAO,aAAa+6H,EAAS,OAAO,GAChC/6H,OAAU,OAAI+6H,EAAS,UAAU,OAAO,WAAW,MAAMc,GAAa,EAAE,GAAG,GAAG;AAAA,MACpF,GAAGL,CAAM,GACLI,MACF,WAAW,MAAMA,GAAQ,OAAO;AAAA,IAEpC;AACA,IAAA9iI,EAAM,UAAU,MACP,MAAM,OAAO,aAAaiiI,EAAS,OAAO,GAChD,CAAA,CAAE,GACL5qF,GAAc;AACd,UAAM2rF,IAA2BhjI,EAAM,YAAY,CAACurC,MAAU;;AAE5D,aADwB82F,EAAc,cAAYr0H,KAAAo0H,EAAsB,YAAtB,gBAAAp0H,GAA+B,SACvDi1H,GAAqB13F,IAAOp3B,KAAAiuH,EAAsB,YAAtB,gBAAAjuH,GAA+B,IAAI;AAAA,IAC3F,GAAG,CAAA,CAAE;AACL,WAAuB/I,gBAAAA,EAAAA;AAAAA,MACrBm2H;AAAA,MACA;AAAA,QACE,OAAOT;AAAA,QACP,WAAAoB;AAAA,QACA,aAAaliI,EAAM;AAAA,UACjB,CAACurC,MAAU;AACT,YAAIy3F,EAAyBz3F,CAAK,KAAGA,EAAM,eAAc;AAAA,UAC3D;AAAA,UACA,CAACy3F,CAAwB;AAAA,QACnC;AAAA,QACQ,aAAahjI,EAAM;AAAA,UACjB,CAACurC,MAAU;;AACT,YAAIy3F,EAAyBz3F,CAAK,OAClCv9B,IAAAo2C,EAAW,YAAX,QAAAp2C,EAAoB,SACpBg0H,EAAiB,IAAI;AAAA,UACvB;AAAA,UACA,CAACgB,CAAwB;AAAA,QACnC;AAAA,QACQ,gBAAgBhjI,EAAM;AAAA,UACpB,CAACurC,MAAU;AACT,YAAIy3F,EAAyBz3F,CAAK,KAAGA,EAAM,eAAc;AAAA,UAC3D;AAAA,UACA,CAACy3F,CAAwB;AAAA,QACnC;AAAA,QACQ,sBAAAb;AAAA,QACA,4BAA4BniI,EAAM,YAAY,CAACkjI,MAAW;AACxD,UAAAd,EAAsB,UAAUc;AAAA,QAClC,GAAG,CAAA,CAAE;AAAA,QACL,UAA0B93H,gBAAAA,EAAAA,IAAIm3H,GAAmB,EAAE,GAAGC,GAAwB,UAA0Bp3H,gBAAAA,EAAAA;AAAAA,UACtGsnC;AAAA,UACA;AAAA,YACE,SAAS;AAAA,YACT,SAASuT;AAAA,YACT,kBAAkB9a,GAAqB+a,GAAiB,CAAC3a,MAAU;;AACjE,cAAAA,EAAM,eAAc,IACpBv9B,IAAAo2C,EAAW,YAAX,QAAAp2C,EAAoB,MAAM,EAAE,eAAe,GAAI;AAAA,YACjD,CAAC;AAAA,YACD,oBAAoBm4C;AAAA,YACpB,UAA0B/6C,gBAAAA,EAAAA;AAAAA,cACxB0kC;AAAA,cACA;AAAA,gBACE,SAAS;AAAA,gBACT,6BAAAC;AAAA,gBACA,iBAAAT;AAAA,gBACA,sBAAAU;AAAA,gBACA,gBAAAC;AAAA,gBACA,mBAAAC;AAAA,gBACA,WAAAC;AAAA,gBACA,UAA0B/kC,gBAAAA,EAAAA;AAAAA,kBACxB23D;AAAAA,kBACA;AAAA,oBACE,SAAS;AAAA,oBACT,GAAGD;AAAA,oBACH,KAAK4+D,EAAY;AAAA,oBACjB,aAAa;AAAA,oBACb,MAAA/uF;AAAA,oBACA,kBAAkBovF;AAAA,oBAClB,0BAA0BC;AAAA,oBAC1B,cAAc72F,GAAqBu0B,GAAc,CAACn0B,MAAU;AAC1D,sBAAKm2F,EAAY,mBAAmB,WAASn2F,EAAM,eAAc;AAAA,oBACnE,CAAC;AAAA,oBACD,2BAA2B;AAAA,oBAC3B,UAA0BngC,gBAAAA,EAAAA;AAAAA,sBACxB+3H;AAAAA,sBACA;AAAA,wBACE,MAAM;AAAA,wBACN,oBAAoB;AAAA,wBACpB,cAAcC,GAAargI,EAAQ,IAAI;AAAA,wBACvC,2BAA2B;AAAA,wBAC3B,KAAK2+H,EAAY;AAAA,wBACjB,GAAGX;AAAA,wBACH,GAAGt7E;AAAA,wBACH,KAAKlV;AAAA,wBACL,OAAO,EAAE,SAAS,QAAQ,GAAGkV,EAAa,MAAK;AAAA,wBAC/C,WAAWta,GAAqBsa,EAAa,WAAW,CAACla,MAAU;AAEjE,gCAAM83F,KADS93F,EAAM,OACU,QAAQ,2BAA2B,MAAMA,EAAM,eACxE+3F,KAAgB/3F,EAAM,WAAWA,EAAM,UAAUA,EAAM,SACvDg4F,KAAiBh4F,EAAM,IAAI,WAAW;AAC5C,0BAAI83F,OACE93F,EAAM,QAAQ,SAAOA,EAAM,eAAc,GACzC,CAAC+3F,MAAiBC,MAAgBd,EAAsBl3F,EAAM,GAAG;AAEvE,gCAAMx7B,KAAUq0C,EAAW;AAE3B,8BADI7Y,EAAM,WAAWx7B,MACjB,CAACmwH,GAAgB,SAAS30F,EAAM,GAAG,EAAG;AAC1C,0BAAAA,EAAM,eAAc;AAEpB,gCAAMq1B,KADQV,IAAW,OAAO,CAACp+D,OAAS,CAACA,GAAK,QAAQ,EAC3B,IAAI,CAACA,OAASA,GAAK,IAAI,OAAO;AAC3D,0BAAIm+H,GAAU,SAAS10F,EAAM,GAAG,KAAGq1B,GAAe,QAAO,GACzD5sB,GAAW4sB,EAAc;AAAA,wBAC3B,CAAC;AAAA,wBACD,QAAQz1B,GAAqBnnC,EAAM,QAAQ,CAACunC,MAAU;AACpD,0BAAKA,EAAM,cAAc,SAASA,EAAM,MAAM,MAC5C,OAAO,aAAa02F,EAAS,OAAO,GACpCC,EAAU,UAAU;AAAA,wBAExB,CAAC;AAAA,wBACD,eAAe/2F;AAAA,0BACbnnC,EAAM;AAAA,0BACNw/H,GAAU,CAACj4F,MAAU;AACnB,kCAAMhS,IAASgS,EAAM,QACfk4F,KAAqBnB,EAAgB,YAAY/2F,EAAM;AAC7D,gCAAIA,EAAM,cAAc,SAAShS,CAAM,KAAKkqG,IAAoB;AAC9D,oCAAMC,KAASn4F,EAAM,UAAU+2F,EAAgB,UAAU,UAAU;AACnE,8BAAAD,EAAc,UAAUqB,IACxBpB,EAAgB,UAAU/2F,EAAM;AAAA,4BAClC;AAAA,0BACF,CAAC;AAAA,wBAC3B;AAAA,sBACA;AAAA,oBACA;AAAA,kBACA;AAAA,gBACA;AAAA,cACA;AAAA,YACA;AAAA,UACA;AAAA,QACA,EAAS,CAAE;AAAA,MACX;AAAA,IACA;AAAA,EACE;AACF;AACAk2F,GAAY,cAAcl8E;AAC1B,IAAIqZ,KAAa,aACb+kE,KAAY3jI,EAAM;AAAA,EACpB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,aAAA6tH,GAAa,GAAGlhE,EAAU,IAAK57D;AACvC,WAAuBoH,gBAAAA,EAAAA,IAAIwjC,GAAU,KAAK,EAAE,MAAM,SAAS,GAAGgxB,GAAY,KAAK3sD,GAAc;AAAA,EAC/F;AACF;AACA0wH,GAAU,cAAc/kE;AACxB,IAAIglE,KAAa,aACbC,KAAY7jI,EAAM;AAAA,EACpB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,aAAA6tH,GAAa,GAAGgD,EAAU,IAAK9/H;AACvC,WAAuBoH,gBAAAA,EAAAA,IAAIwjC,GAAU,KAAK,EAAE,GAAGk1F,GAAY,KAAK7wH,GAAc;AAAA,EAChF;AACF;AACA4wH,GAAU,cAAcD;AACxB,IAAI/iE,KAAY,YACZkjE,KAAc,mBACdC,KAAWhkI,EAAM;AAAA,EACnB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,UAAA63C,IAAW,IAAO,UAAA8f,GAAU,GAAG3J,EAAS,IAAKj9D,GAC/CuE,IAAMvI,EAAM,OAAO,IAAI,GACvB0hI,IAAcd,GAAmB//D,IAAW78D,EAAM,WAAW,GAC7Du7H,IAAiBiC,GAAsB3gE,IAAW78D,EAAM,WAAW,GACnEusC,IAAe/9B,GAAgBS,GAAc1K,CAAG,GAChD07H,IAAmBjkI,EAAM,OAAO,EAAK,GACrC6sE,IAAe,MAAM;AACzB,YAAMq3D,IAAW37H,EAAI;AACrB,UAAI,CAACuiD,KAAYo5E,GAAU;AACzB,cAAMC,IAAkB,IAAI,YAAYJ,IAAa,EAAE,SAAS,IAAM,YAAY,IAAM;AACxF,QAAAG,EAAS,iBAAiBH,IAAa,CAACx4F,MAAUq/B,KAAA,gBAAAA,EAAWr/B,IAAQ,EAAE,MAAM,IAAM,GACnFwD,GAA4Bm1F,GAAUC,CAAe,GACjDA,EAAgB,mBAClBF,EAAiB,UAAU,KAE3BvC,EAAY,QAAO;AAAA,MAEvB;AAAA,IACF;AACA,WAAuBt2H,gBAAAA,EAAAA;AAAAA,MACrBg5H;AAAA,MACA;AAAA,QACE,GAAGnjE;AAAA,QACH,KAAK1wB;AAAA,QACL,UAAAua;AAAA,QACA,SAAS3f,GAAqBnnC,EAAM,SAAS6oE,CAAY;AAAA,QACzD,eAAe,CAACthC,MAAU;;AACxB,WAAAv9B,IAAAhK,EAAM,kBAAN,QAAAgK,EAAA,KAAAhK,GAAsBunC,IACtB04F,EAAiB,UAAU;AAAA,QAC7B;AAAA,QACA,aAAa94F,GAAqBnnC,EAAM,aAAa,CAACunC,MAAU;;AAC9D,UAAK04F,EAAiB,YAASj2H,IAAAu9B,EAAM,kBAAN,QAAAv9B,EAAqB;AAAA,QACtD,CAAC;AAAA,QACD,WAAWm9B,GAAqBnnC,EAAM,WAAW,CAACunC,MAAU;AAC1D,gBAAM84F,IAAgB9E,EAAe,UAAU,YAAY;AAC3D,UAAIz0E,KAAYu5E,KAAiB94F,EAAM,QAAQ,OAC3Cw0F,GAAe,SAASx0F,EAAM,GAAG,MACnCA,EAAM,cAAc,MAAK,GACzBA,EAAM,eAAc;AAAA,QAExB,CAAC;AAAA,MACT;AAAA,IACA;AAAA,EACE;AACF;AACAy4F,GAAS,cAAcnjE;AACvB,IAAIujE,KAAepkI,EAAM;AAAA,EACvB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,aAAA6tH,GAAa,UAAAh2E,IAAW,IAAO,WAAAw5E,GAAW,GAAGrjE,EAAS,IAAKj9D,GAC7Du7H,IAAiBiC,GAAsB3gE,IAAWigE,CAAW,GAC7Dh+D,IAAwBZ,GAAyB4+D,CAAW,GAC5Dv4H,IAAMvI,EAAM,OAAO,IAAI,GACvBuwC,IAAe/9B,GAAgBS,GAAc1K,CAAG,GAChD,CAACg8H,GAAWC,CAAY,IAAIxkI,EAAM,SAAS,EAAK,GAChD,CAACykI,GAAaC,CAAc,IAAI1kI,EAAM,SAAS,EAAE;AACvD,WAAAA,EAAM,UAAU,MAAM;AACpB,YAAMkkI,IAAW37H,EAAI;AACrB,MAAI27H,KACFQ,GAAgBR,EAAS,eAAe,IAAI,KAAI,CAAE;AAAA,IAEtD,GAAG,CAACjjE,EAAU,QAAQ,CAAC,GACA71D,gBAAAA,EAAAA;AAAAA,MACrByzD,GAAW;AAAA,MACX;AAAA,QACE,OAAOiiE;AAAA,QACP,UAAAh2E;AAAA,QACA,WAAWw5E,KAAaG;AAAA,QACxB,UAA0Br5H,gBAAAA,EAAAA,IAAIk4D,IAAuB,EAAE,SAAS,IAAM,GAAGR,GAAuB,WAAW,CAAChY,GAAU,UAA0B1/C,gBAAAA,EAAAA;AAAAA,UAC9IwjC,GAAU;AAAA,UACV;AAAA,YACE,MAAM;AAAA,YACN,oBAAoB21F,IAAY,KAAK;AAAA,YACrC,iBAAiBz5E,KAAY;AAAA,YAC7B,iBAAiBA,IAAW,KAAK;AAAA,YACjC,GAAGmW;AAAA,YACH,KAAK1wB;AAAA,YACL,eAAepF;AAAA,cACbnnC,EAAM;AAAA,cACNw/H,GAAU,CAACj4F,MAAU;AACnB,gBAAIuf,IACFy0E,EAAe,YAAYh0F,CAAK,KAEhCg0F,EAAe,YAAYh0F,CAAK,GAC3BA,EAAM,oBACIA,EAAM,cACd,MAAM,EAAE,eAAe,GAAI,CAAE;AAAA,cAGxC,CAAC;AAAA,YACf;AAAA,YACY,gBAAgBJ;AAAA,cACdnnC,EAAM;AAAA,cACNw/H,GAAU,CAACj4F,MAAUg0F,EAAe,YAAYh0F,CAAK,CAAC;AAAA,YACpE;AAAA,YACY,SAASJ,GAAqBnnC,EAAM,SAAS,MAAMwgI,EAAa,EAAI,CAAC;AAAA,YACrE,QAAQr5F,GAAqBnnC,EAAM,QAAQ,MAAMwgI,EAAa,EAAK,CAAC;AAAA,UAChF;AAAA,QACA,EAAS,CAAE;AAAA,MACX;AAAA,IACA;AAAA,EACE;AACF,GACIG,KAAqB,oBACrBC,KAAmB5kI,EAAM;AAAA,EAC3B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,SAAAuyD,IAAU,IAAO,iBAAAN,GAAiB,GAAG2/D,EAAiB,IAAK7gI;AACnE,WAAuBoH,gBAAAA,EAAAA,IAAI05H,IAAuB,EAAE,OAAO9gI,EAAM,aAAa,SAAAwhE,GAAS,UAA0Bp6D,gBAAAA,EAAAA;AAAAA,MAC/G44H;AAAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,gBAAgBh9D,GAAgBxB,CAAO,IAAI,UAAUA;AAAA,QACrD,GAAGq/D;AAAA,QACH,KAAK5xH;AAAA,QACL,cAAc8xH,GAAgBv/D,CAAO;AAAA,QACrC,UAAUr6B;AAAA,UACR05F,EAAkB;AAAA,UAClB,MAAM3/D,KAAA,gBAAAA,EAAkB8B,GAAgBxB,CAAO,IAAI,KAAO,CAACA;AAAA,UAC3D,EAAE,0BAA0B,GAAK;AAAA,QAC3C;AAAA,MACA;AAAA,IACA,GAAO;AAAA,EACL;AACF;AACAo/D,GAAiB,cAAcD;AAC/B,IAAIzgB,KAAmB,kBACnB,CAACI,IAAoBC,EAAoB,IAAI+b;AAAA,EAC/Cpc;AAAAA,EACA,EAAE,OAAO,QAAQ,eAAe,MAAM;AAAA,EACtC,EAAC;AACH,GACI8gB,KAAiBhlI,EAAM;AAAA,EACzB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,OAAA/L,GAAO,eAAAs7D,GAAe,GAAG5C,EAAU,IAAK57D,GAC1CihI,IAAoBh2F,GAAeuzB,CAAa;AACtD,WAAuBp3D,gBAAAA,EAAAA,IAAIk5G,IAAoB,EAAE,OAAOtgH,EAAM,aAAa,OAAAkD,GAAO,eAAe+9H,GAAmB,UAA0B75H,gBAAAA,EAAAA,IAAIu4H,IAAW,EAAE,GAAG/jE,GAAY,KAAK3sD,EAAY,CAAE,GAAG;AAAA,EACtM;AACF;AACA+xH,GAAe,cAAc9gB;AAC7B,IAAIghB,KAAkB,iBAClBC,KAAgBnlI,EAAM;AAAA,EACxB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,OAAA/L,GAAO,GAAGk+H,EAAc,IAAKphI,GAC/BjB,IAAUwhH,GAAqB2gB,IAAiBlhI,EAAM,WAAW,GACjEwhE,IAAUt+D,MAAUnE,EAAQ;AAClC,WAAuBqI,gBAAAA,EAAAA,IAAI05H,IAAuB,EAAE,OAAO9gI,EAAM,aAAa,SAAAwhE,GAAS,UAA0Bp6D,gBAAAA,EAAAA;AAAAA,MAC/G44H;AAAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,gBAAgBx+D;AAAA,QAChB,GAAG4/D;AAAA,QACH,KAAKnyH;AAAA,QACL,cAAc8xH,GAAgBv/D,CAAO;AAAA,QACrC,UAAUr6B;AAAA,UACRi6F,EAAe;AAAA,UACf;;AAAM,oBAAAp3H,IAAAjL,EAAQ,kBAAR,gBAAAiL,EAAA,KAAAjL,GAAwBmE;AAAA;AAAA,UAC9B,EAAE,0BAA0B,GAAK;AAAA,QAC3C;AAAA,MACA;AAAA,IACA,GAAO;AAAA,EACL;AACF;AACAi+H,GAAc,cAAcD;AAC5B,IAAIG,KAAsB,qBACtB,CAACP,IAAuBQ,EAAuB,IAAIhF;AAAA,EACrD+E;AAAA,EACA,EAAE,SAAS,GAAK;AAClB,GACIE,KAAoBvlI,EAAM;AAAA,EAC5B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,aAAA6tH,GAAa,YAAA97E,GAAY,GAAGwgF,EAAkB,IAAKxhI,GACrDyhI,IAAmBH,GAAwBD,IAAqBvE,CAAW;AACjF,WAAuB11H,gBAAAA,EAAAA;AAAAA,MACrB6qC;AAAA,MACA;AAAA,QACE,SAAS+O,KAAcgiB,GAAgBy+D,EAAiB,OAAO,KAAKA,EAAiB,YAAY;AAAA,QACjG,UAA0Br6H,gBAAAA,EAAAA;AAAAA,UACxBwjC,GAAU;AAAA,UACV;AAAA,YACE,GAAG42F;AAAA,YACH,KAAKvyH;AAAA,YACL,cAAc8xH,GAAgBU,EAAiB,OAAO;AAAA,UAClE;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF;AACAF,GAAkB,cAAcF;AAChC,IAAIK,KAAiB,iBACjBC,KAAgB3lI,EAAM;AAAA,EACxB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,aAAA6tH,GAAa,GAAG8E,EAAc,IAAK5hI;AAC3C,WAAuBoH,gBAAAA,EAAAA;AAAAA,MACrBwjC,GAAU;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,oBAAoB;AAAA,QACpB,GAAGg3F;AAAA,QACH,KAAK3yH;AAAA,MACb;AAAA,IACA;AAAA,EACE;AACF;AACA0yH,GAAc,cAAcD;AAC5B,IAAItG,KAAa,aACbyG,KAAY7lI,EAAM;AAAA,EACpB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,aAAA6tH,GAAa,GAAG/E,EAAU,IAAK/3H,GACjC+8H,IAAcP,GAAeM,CAAW;AAC9C,WAAuB11H,gBAAAA,EAAAA,IAAI06H,IAAuB,EAAE,GAAG/E,GAAa,GAAGhF,GAAY,KAAK9oH,GAAc;AAAA,EACxG;AACF;AACA4yH,GAAU,cAAczG;AACxB,IAAI2G,KAAW,WACX,CAACC,KAAiBC,EAAiB,IAAI3F,GAAkByF,EAAQ,GAmCjEG,KAAmB,kBACnBC,KAAiBnmI,EAAM;AAAA,EACzB,CAACgE,GAAOiP,MAAiB;AACvB,UAAMlQ,IAAU29H,GAAewF,IAAkBliI,EAAM,WAAW,GAC5D09H,IAAcd,GAAmBsF,IAAkBliI,EAAM,WAAW,GACpEoiI,IAAaH,GAAkBC,IAAkBliI,EAAM,WAAW,GAClEu7H,IAAiBiC,GAAsB0E,IAAkBliI,EAAM,WAAW,GAC1EqiI,IAAermI,EAAM,OAAO,IAAI,GAChC,EAAE,sBAAAmiI,GAAsB,4BAAAmE,EAA0B,IAAK/G,GACvDlzF,IAAQ,EAAE,aAAaroC,EAAM,YAAW,GACxCuiI,IAAiBvmI,EAAM,YAAY,MAAM;AAC7C,MAAIqmI,EAAa,WAAS,OAAO,aAAaA,EAAa,OAAO,GAClEA,EAAa,UAAU;AAAA,IACzB,GAAG,CAAA,CAAE;AACL,WAAArmI,EAAM,UAAU,MAAMumI,GAAgB,CAACA,CAAc,CAAC,GACtDvmI,EAAM,UAAU,MAAM;AACpB,YAAMwmI,IAAoBrE,EAAqB;AAC/C,aAAO,MAAM;AACX,eAAO,aAAaqE,CAAiB,GACrCF,EAA2B,IAAI;AAAA,MACjC;AAAA,IACF,GAAG,CAACnE,GAAsBmE,CAA0B,CAAC,GAC9Bl7H,gBAAAA,EAAAA,IAAIg2H,IAAY,EAAE,SAAS,IAAM,GAAG/0F,GAAO,UAA0BjhC,gBAAAA,EAAAA;AAAAA,MAC1Fg5H;AAAA,MACA;AAAA,QACE,IAAIgC,EAAW;AAAA,QACf,iBAAiB;AAAA,QACjB,iBAAiBrjI,EAAQ;AAAA,QACzB,iBAAiBqjI,EAAW;AAAA,QAC5B,cAAchD,GAAargI,EAAQ,IAAI;AAAA,QACvC,GAAGiB;AAAA,QACH,KAAKmO,GAAYc,GAAcmzH,EAAW,eAAe;AAAA,QACzD,SAAS,CAAC76F,MAAU;;AAElB,WADAv9B,IAAAhK,EAAM,YAAN,QAAAgK,EAAA,KAAAhK,GAAgBunC,IACZ,EAAAvnC,EAAM,YAAYunC,EAAM,sBAC5BA,EAAM,cAAc,MAAK,GACpBxoC,EAAQ,QAAMA,EAAQ,aAAa,EAAI;AAAA,QAC9C;AAAA,QACA,eAAeooC;AAAA,UACbnnC,EAAM;AAAA,UACNw/H,GAAU,CAACj4F,MAAU;AAEnB,YADAg0F,EAAe,YAAYh0F,CAAK,GAC5B,CAAAA,EAAM,oBACN,CAACvnC,EAAM,YAAY,CAACjB,EAAQ,QAAQ,CAACsjI,EAAa,YACpD9G,EAAe,2BAA2B,IAAI,GAC9C8G,EAAa,UAAU,OAAO,WAAW,MAAM;AAC7C,cAAAtjI,EAAQ,aAAa,EAAI,GACzBwjI,EAAc;AAAA,YAChB,GAAG,GAAG;AAAA,UAEV,CAAC;AAAA,QACX;AAAA,QACQ,gBAAgBp7F;AAAA,UACdnnC,EAAM;AAAA,UACNw/H,GAAU,CAACj4F,MAAU;;AACnB,YAAAg7F,EAAc;AACd,kBAAMttB,KAAcjrG,IAAAjL,EAAQ,YAAR,gBAAAiL,EAAiB;AACrC,gBAAIirG,GAAa;AACf,oBAAMsP,KAAOp0G,IAAApR,EAAQ,YAAR,gBAAAoR,EAAiB,QAAQ,MAChCsyH,IAAYle,MAAS,SACrBme,IAAQD,IAAY,KAAK,GACzBE,IAAkB1tB,EAAYwtB,IAAY,SAAS,OAAO,GAC1DG,IAAiB3tB,EAAYwtB,IAAY,UAAU,MAAM;AAC/D,cAAAlH,EAAe,2BAA2B;AAAA,gBACxC,MAAM;AAAA;AAAA;AAAA,kBAGJ,EAAE,GAAGh0F,EAAM,UAAUm7F,GAAO,GAAGn7F,EAAM,QAAO;AAAA,kBAC5C,EAAEo7F,GAAoB,GAAG1tB,EAAY,IAAG;AAAA,kBACxC,EAAE,GAAG2tB,GAAgB,GAAG3tB,EAAY,IAAG;AAAA,kBACvC,EAAE,GAAG2tB,GAAgB,GAAG3tB,EAAY,OAAM;AAAA,kBAC1C,EAAE0tB,GAAoB,GAAG1tB,EAAY,OAAM;AAAA,gBAC7D;AAAA,gBACgB,MAAAsP;AAAA,cAChB,CAAe,GACD,OAAO,aAAa4Z,EAAqB,OAAO,GAChDA,EAAqB,UAAU,OAAO;AAAA,gBACpC,MAAM5C,EAAe,2BAA2B,IAAI;AAAA,gBACpD;AAAA,cAChB;AAAA,YACY,OAAO;AAEL,kBADAA,EAAe,eAAeh0F,CAAK,GAC/BA,EAAM,iBAAkB;AAC5B,cAAAg0F,EAAe,2BAA2B,IAAI;AAAA,YAChD;AAAA,UACF,CAAC;AAAA,QACX;AAAA,QACQ,WAAWp0F,GAAqBnnC,EAAM,WAAW,CAACunC,MAAU;;AAC1D,gBAAM84F,IAAgB9E,EAAe,UAAU,YAAY;AAC3D,UAAIv7H,EAAM,YAAYqgI,KAAiB94F,EAAM,QAAQ,OACjD40F,GAAcuB,EAAY,GAAG,EAAE,SAASn2F,EAAM,GAAG,MACnDxoC,EAAQ,aAAa,EAAI,IACzBiL,IAAAjL,EAAQ,YAAR,QAAAiL,EAAiB,SACjBu9B,EAAM,eAAc;AAAA,QAExB,CAAC;AAAA,MACT;AAAA,IACA,GAAO;AAAA,EACL;AACF;AACA46F,GAAe,cAAcD;AAC7B,IAAIW,KAAmB,kBACnBC,KAAiB9mI,EAAM;AAAA,EACzB,CAACgE,GAAOiP,MAAiB;AACvB,UAAMmyC,IAAgBN,GAAiBS,IAAcvhD,EAAM,WAAW,GAChE,EAAE,YAAAghD,IAAaI,EAAc,YAAY,GAAG2hF,EAAe,IAAK/iI,GAChEjB,IAAU29H,GAAen7E,IAAcvhD,EAAM,WAAW,GACxD09H,IAAcd,GAAmBr7E,IAAcvhD,EAAM,WAAW,GAChEoiI,IAAaH,GAAkBY,IAAkB7iI,EAAM,WAAW,GAClEuE,IAAMvI,EAAM,OAAO,IAAI,GACvBuwC,IAAe/9B,GAAgBS,GAAc1K,CAAG;AACtD,WAAuB6C,gBAAAA,MAAIyzD,GAAW,UAAU,EAAE,OAAO76D,EAAM,aAAa,UAA0BoH,gBAAAA,MAAI6qC,IAAU,EAAE,SAAS+O,KAAcjiD,EAAQ,MAAM,UAA0BqI,gBAAAA,EAAAA,IAAIyzD,GAAW,MAAM,EAAE,OAAO76D,EAAM,aAAa,UAA0BoH,gBAAAA,EAAAA;AAAAA,MAC9Py2H;AAAA,MACA;AAAA,QACE,IAAIuE,EAAW;AAAA,QACf,mBAAmBA,EAAW;AAAA,QAC9B,GAAGW;AAAA,QACH,KAAKx2F;AAAA,QACL,OAAO;AAAA,QACP,MAAMmxF,EAAY,QAAQ,QAAQ,SAAS;AAAA,QAC3C,6BAA6B;AAAA,QAC7B,sBAAsB;AAAA,QACtB,WAAW;AAAA,QACX,iBAAiB,CAACn2F,MAAU;;AAC1B,UAAIm2F,EAAY,mBAAmB,aAAS1zH,IAAAzF,EAAI,YAAJ,QAAAyF,EAAa,UACzDu9B,EAAM,eAAc;AAAA,QACtB;AAAA,QACA,kBAAkB,CAACA,MAAUA,EAAM,eAAc;AAAA,QACjD,gBAAgBJ,GAAqBnnC,EAAM,gBAAgB,CAACunC,MAAU;AACpE,UAAIA,EAAM,WAAW66F,EAAW,WAASrjI,EAAQ,aAAa,EAAK;AAAA,QACrE,CAAC;AAAA,QACD,iBAAiBooC,GAAqBnnC,EAAM,iBAAiB,CAACunC,MAAU;AACtE,UAAAm2F,EAAY,QAAO,GACnBn2F,EAAM,eAAc;AAAA,QACtB,CAAC;AAAA,QACD,WAAWJ,GAAqBnnC,EAAM,WAAW,CAACunC,MAAU;;AAC1D,gBAAM83F,IAAkB93F,EAAM,cAAc,SAASA,EAAM,MAAM,GAC3Dy7F,IAAa5G,GAAesB,EAAY,GAAG,EAAE,SAASn2F,EAAM,GAAG;AACrE,UAAI83F,KAAmB2D,MACrBjkI,EAAQ,aAAa,EAAK,IAC1BiL,IAAAo4H,EAAW,YAAX,QAAAp4H,EAAoB,SACpBu9B,EAAM,eAAc;AAAA,QAExB,CAAC;AAAA,MACT;AAAA,IACA,EAAK,CAAE,EAAC,CAAE,GAAG;AAAA,EACX;AACF;AACAu7F,GAAe,cAAcD;AAC7B,SAASzD,GAAa/+E,GAAM;AAC1B,SAAOA,IAAO,SAAS;AACzB;AACA,SAAS2iB,GAAgBxB,GAAS;AAChC,SAAOA,MAAY;AACrB;AACA,SAASu/D,GAAgBv/D,GAAS;AAChC,SAAOwB,GAAgBxB,CAAO,IAAI,kBAAkBA,IAAU,YAAY;AAC5E;AACA,SAASxxB,GAAWS,GAAY;AAC9B,QAAMotB,IAA6B,SAAS;AAC5C,aAAWltB,KAAaF;AAGtB,QAFIE,MAAcktB,MAClBltB,EAAU,MAAK,GACX,SAAS,kBAAkBktB,GAA4B;AAE/D;AACA,SAASJ,GAAUj5C,GAAOs5C,GAAY;AACpC,SAAOt5C,EAAM,IAAI,CAACpC,GAAGnY,MAAUua,GAAOs5C,IAAa7zD,KAASua,EAAM,MAAM,CAAC;AAC3E;AACA,SAASq6G,GAAat8H,GAAQm8H,GAAQC,GAAc;AAElD,QAAMsE,IADavE,EAAO,SAAS,KAAK,MAAM,KAAKA,CAAM,EAAE,MAAM,CAACwE,MAASA,MAASxE,EAAO,CAAC,CAAC,IACvDA,EAAO,CAAC,IAAIA,GAC5CyE,IAAoBxE,IAAep8H,EAAO,QAAQo8H,CAAY,IAAI;AACxE,MAAIyE,IAAgB3lE,GAAUl7D,GAAQ,KAAK,IAAI4gI,GAAmB,CAAC,CAAC;AAEpE,EAD4BF,EAAiB,WAAW,MAC/BG,IAAgBA,EAAc,OAAO,CAACl2H,MAAMA,MAAMyxH,CAAY;AACvF,QAAMC,IAAYwE,EAAc;AAAA,IAC9B,CAAClgI,MAAUA,EAAM,YAAW,EAAG,WAAW+/H,EAAiB,YAAW,CAAE;AAAA,EAC5E;AACE,SAAOrE,MAAcD,IAAeC,IAAY;AAClD;AACA,SAASyE,GAAiBC,GAAOC,GAAS;AACxC,QAAM,EAAE,GAAA/iI,GAAG,GAAAygB,EAAC,IAAKqiH;AACjB,MAAInjG,IAAS;AACb,WAAS,IAAI,GAAGziB,IAAI6lH,EAAQ,SAAS,GAAG,IAAIA,EAAQ,QAAQ7lH,IAAI,KAAK;AACnE,UAAM8lH,IAAKD,EAAQ,CAAC,GACdE,IAAKF,EAAQ7lH,CAAC,GACdgmH,IAAKF,EAAG,GACRG,IAAKH,EAAG,GACRI,IAAKH,EAAG,GACRI,IAAKJ,EAAG;AAEd,IADkBE,IAAK1iH,KAAM4iH,IAAK5iH,KAAKzgB,KAAKojI,IAAKF,MAAOziH,IAAI0iH,MAAOE,IAAKF,KAAMD,MAC/DvjG,IAAS,CAACA;AAAA,EAC3B;AACA,SAAOA;AACT;AACA,SAAS8+F,GAAqB13F,GAAOu8F,GAAM;AACzC,MAAI,CAACA,EAAM,QAAO;AAClB,QAAMC,IAAY,EAAE,GAAGx8F,EAAM,SAAS,GAAGA,EAAM,QAAO;AACtD,SAAO87F,GAAiBU,GAAWD,CAAI;AACzC;AACA,SAAStE,GAAUrxF,GAAS;AAC1B,SAAO,CAAC5G,MAAUA,EAAM,gBAAgB,UAAU4G,EAAQ5G,CAAK,IAAI;AACrE;AACA,IAAIy8F,KAAQnH,IACRoH,KAAU7G,IACV5rF,KAAS8rF,IACT3wD,KAAW8wD,IACXyG,KAAQvE,IACRznE,KAAQ2nE,IACRze,KAAQ4e,IACRmE,KAAevD,IACfpgB,KAAawgB,IACboD,KAAYjD,IACZkD,KAAgB9C,IAChB+C,KAAY3C,IACZ4C,KAAS1C,IAET2C,KAAarC,IACbsC,KAAa3B,ICtzBb4B,KAAqB,gBACrB,CAACC,EAAkD,IAAI58F;AAAAA,EACzD28F;AAAA,EACA,CAACnI,EAAe;AAClB,GACIqI,KAAerI,GAAe,GAC9B,CAACsI,IAAsBC,EAAsB,IAAIH,GAA0BD,EAAkB,GAC7FK,KAAe,CAAC/kI,MAAU;AAC5B,QAAM;AAAA,IACJ,qBAAAglI;AAAA,IACA,UAAAj+H;AAAA,IACA,KAAAu0D;AAAA,IACA,MAAMvb;AAAA,IACN,aAAAC;AAAA,IACA,cAAAC;AAAA,IACA,OAAAC,IAAQ;AAAA,EACZ,IAAMlgD,GACEilI,IAAYL,GAAaI,CAAmB,GAC5C7kF,IAAankD,EAAM,OAAO,IAAI,GAC9B,CAACqkD,GAAMC,CAAO,IAAI3W,GAAqB;AAAA,IAC3C,MAAMoW;AAAA,IACN,aAAaC,KAAe;AAAA,IAC5B,UAAUC;AAAA,IACV,QAAQykF;AAAA,EACZ,CAAG;AACD,SAAuBt9H,gBAAAA,EAAAA;AAAAA,IACrBy9H;AAAA,IACA;AAAA,MACE,OAAOG;AAAA,MACP,WAAW37F,GAAK;AAAA,MAChB,YAAA8W;AAAA,MACA,WAAW9W,GAAK;AAAA,MAChB,MAAAgX;AAAA,MACA,cAAcC;AAAA,MACd,cAActkD,EAAM,YAAY,MAAMskD,EAAQ,CAACC,MAAa,CAACA,CAAQ,GAAG,CAACD,CAAO,CAAC;AAAA,MACjF,OAAAJ;AAAA,MACA,UAA0B94C,gBAAAA,EAAAA,IAAI89H,IAAoB,EAAE,GAAGD,GAAW,MAAA5kF,GAAM,cAAcC,GAAS,KAAAgb,GAAK,OAAApb,GAAO,UAAAn5C,EAAQ,CAAE;AAAA,IAC3H;AAAA,EACA;AACA;AACAg+H,GAAa,cAAcL;AAC3B,IAAIlkF,KAAe,uBACf2kF,KAAsBnpI,EAAM;AAAA,EAC9B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,qBAAA+1H,GAAqB,UAAAl+E,IAAW,IAAO,GAAGpG,EAAY,IAAK1gD,GAC7DjB,IAAU+lI,GAAuBtkF,IAAcwkF,CAAmB,GAClEC,IAAYL,GAAaI,CAAmB;AAClD,WAAuB59H,gBAAAA,EAAAA,IAAIg+H,IAAsB,EAAE,SAAS,IAAM,GAAGH,GAAW,UAA0B79H,gBAAAA,EAAAA;AAAAA,MACxGwjC,GAAU;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,IAAI7rC,EAAQ;AAAA,QACZ,iBAAiB;AAAA,QACjB,iBAAiBA,EAAQ;AAAA,QACzB,iBAAiBA,EAAQ,OAAOA,EAAQ,YAAY;AAAA,QACpD,cAAcA,EAAQ,OAAO,SAAS;AAAA,QACtC,iBAAiB+nD,IAAW,KAAK;AAAA,QACjC,UAAAA;AAAA,QACA,GAAGpG;AAAA,QACH,KAAKvyC,GAAYc,GAAclQ,EAAQ,UAAU;AAAA,QACjD,eAAeooC,GAAqBnnC,EAAM,eAAe,CAACunC,MAAU;AAClE,UAAI,CAACuf,KAAYvf,EAAM,WAAW,KAAKA,EAAM,YAAY,OACvDxoC,EAAQ,aAAY,GACfA,EAAQ,QAAMwoC,EAAM,eAAc;AAAA,QAE3C,CAAC;AAAA,QACD,WAAWJ,GAAqBnnC,EAAM,WAAW,CAACunC,MAAU;AAC1D,UAAIuf,MACA,CAAC,SAAS,GAAG,EAAE,SAASvf,EAAM,GAAG,KAAGxoC,EAAQ,aAAY,GACxDwoC,EAAM,QAAQ,eAAaxoC,EAAQ,aAAa,EAAI,GACpD,CAAC,SAAS,KAAK,WAAW,EAAE,SAASwoC,EAAM,GAAG,KAAGA,EAAM,eAAc;AAAA,QAC3E,CAAC;AAAA,MACT;AAAA,IACA,GAAO;AAAA,EACL;AACF;AACA49F,GAAoB,cAAc3kF;AAClC,IAAIjP,KAAc,sBACd8zF,KAAqB,CAACrlI,MAAU;AAClC,QAAM,EAAE,qBAAAglI,GAAqB,GAAGtzF,EAAW,IAAK1xC,GAC1CilI,IAAYL,GAAaI,CAAmB;AAClD,SAAuB59H,gBAAAA,EAAAA,IAAIk+H,IAAsB,EAAE,GAAGL,GAAW,GAAGvzF,EAAW,CAAE;AACnF;AACA2zF,GAAmB,cAAc9zF;AACjC,IAAIgQ,KAAe,uBACfgkF,KAAsBvpI,EAAM;AAAA,EAC9B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,qBAAA+1H,GAAqB,GAAGvjF,EAAY,IAAKzhD,GAC3CjB,IAAU+lI,GAAuBvjF,IAAcyjF,CAAmB,GAClEC,IAAYL,GAAaI,CAAmB,GAC5CjjF,IAA0B/lD,EAAM,OAAO,EAAK;AAClD,WAAuBoL,gBAAAA,EAAAA;AAAAA,MACrBo+H;AAAAA,MACA;AAAA,QACE,IAAIzmI,EAAQ;AAAA,QACZ,mBAAmBA,EAAQ;AAAA,QAC3B,GAAGkmI;AAAA,QACH,GAAGxjF;AAAA,QACH,KAAKxyC;AAAA,QACL,kBAAkBk4B,GAAqBnnC,EAAM,kBAAkB,CAACunC,MAAU;;AACxE,UAAKwa,EAAwB,YAAS/3C,IAAAjL,EAAQ,WAAW,YAAnB,QAAAiL,EAA4B,SAClE+3C,EAAwB,UAAU,IAClCxa,EAAM,eAAc;AAAA,QACtB,CAAC;AAAA,QACD,mBAAmBJ,GAAqBnnC,EAAM,mBAAmB,CAACunC,MAAU;AAC1E,gBAAMsa,IAAgBta,EAAM,OAAO,eAC7Bua,IAAgBD,EAAc,WAAW,KAAKA,EAAc,YAAY,IACxE4jF,IAAe5jF,EAAc,WAAW,KAAKC;AACnD,WAAI,CAAC/iD,EAAQ,SAAS0mI,OAAc1jF,EAAwB,UAAU;AAAA,QACxE,CAAC;AAAA,QACD,OAAO;AAAA,UACL,GAAG/hD,EAAM;AAAA,UAGP,kDAAkD;AAAA,UAClD,iDAAiD;AAAA,UACjD,kDAAkD;AAAA,UAClD,uCAAuC;AAAA,UACvC,wCAAwC;AAAA,QAEpD;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF;AACAulI,GAAoB,cAAchkF;AAClC,IAAIqZ,KAAa,qBACb8qE,KAAoB1pI,EAAM;AAAA,EAC5B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,qBAAA+1H,GAAqB,GAAGppE,EAAU,IAAK57D,GACzCilI,IAAYL,GAAaI,CAAmB;AAClD,WAAuB59H,gBAAAA,EAAAA,IAAIu+H,IAAqB,EAAE,GAAGV,GAAW,GAAGrpE,GAAY,KAAK3sD,GAAc;AAAA,EACpG;AACF;AACAy2H,GAAkB,cAAc9qE;AAChC,IAAIglE,KAAa,qBACbgG,KAAoB5pI,EAAM;AAAA,EAC5B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,qBAAA+1H,GAAqB,GAAGlF,EAAU,IAAK9/H,GACzCilI,IAAYL,GAAaI,CAAmB;AAClD,WAAuB59H,gBAAAA,EAAAA,IAAIy+H,IAAqB,EAAE,GAAGZ,GAAW,GAAGnF,GAAY,KAAK7wH,GAAc;AAAA,EACpG;AACF;AACA22H,GAAkB,cAAchG;AAChC,IAAI/iE,KAAY,oBACZipE,KAAmB9pI,EAAM;AAAA,EAC3B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,qBAAA+1H,GAAqB,GAAG/nE,EAAS,IAAKj9D,GACxCilI,IAAYL,GAAaI,CAAmB;AAClD,WAAuB59H,gBAAAA,EAAAA,IAAI2+H,IAAoB,EAAE,GAAGd,GAAW,GAAGhoE,GAAW,KAAKhuD,GAAc;AAAA,EAClG;AACF;AACA62H,GAAiB,cAAcjpE;AAC/B,IAAI8jE,KAAqB,4BACrBqF,KAA2BhqI,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACvE,QAAM,EAAE,qBAAA+1H,GAAqB,GAAGnE,EAAiB,IAAK7gI,GAChDilI,IAAYL,GAAaI,CAAmB;AAClD,SAAuB59H,gBAAAA,EAAAA,IAAI6+H,IAA4B,EAAE,GAAGhB,GAAW,GAAGpE,GAAmB,KAAK5xH,GAAc;AAClH,CAAC;AACD+2H,GAAyB,cAAcrF;AACvC,IAAIzgB,KAAmB,0BACnBgmB,KAAyBlqI,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACrE,QAAM,EAAE,qBAAA+1H,GAAqB,GAAGmB,EAAe,IAAKnmI,GAC9CilI,IAAYL,GAAaI,CAAmB;AAClD,SAAuB59H,gBAAAA,EAAAA,IAAIg/H,IAA0B,EAAE,GAAGnB,GAAW,GAAGkB,GAAiB,KAAKl3H,GAAc;AAC9G,CAAC;AACDi3H,GAAuB,cAAchmB;AACrC,IAAIghB,KAAkB,yBAClBmF,KAAwBrqI,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACpE,QAAM,EAAE,qBAAA+1H,GAAqB,GAAG5D,EAAc,IAAKphI,GAC7CilI,IAAYL,GAAaI,CAAmB;AAClD,SAAuB59H,gBAAAA,EAAAA,IAAIk/H,IAAyB,EAAE,GAAGrB,GAAW,GAAG7D,GAAgB,KAAKnyH,GAAc;AAC5G,CAAC;AACDo3H,GAAsB,cAAcnF;AACpC,IAAI19D,KAAiB,6BACjB+iE,KAA4BvqI,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACxE,QAAM,EAAE,qBAAA+1H,GAAqB,GAAGxD,EAAkB,IAAKxhI,GACjDilI,IAAYL,GAAaI,CAAmB;AAClD,SAAuB59H,gBAAAA,EAAAA,IAAIo/H,IAA6B,EAAE,GAAGvB,GAAW,GAAGzD,GAAoB,KAAKvyH,GAAc;AACpH,CAAC;AACDs3H,GAA0B,cAAc/iE;AACxC,IAAIk+D,KAAiB,yBACjB+E,KAAwBzqI,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACpE,QAAM,EAAE,qBAAA+1H,GAAqB,GAAGpD,EAAc,IAAK5hI,GAC7CilI,IAAYL,GAAaI,CAAmB;AAClD,SAAuB59H,gBAAAA,EAAAA,IAAIs/H,IAAyB,EAAE,GAAGzB,GAAW,GAAGrD,GAAgB,KAAK3yH,GAAc;AAC5G,CAAC;AACDw3H,GAAsB,cAAc/E;AACpC,IAAItG,KAAa,qBACbuL,KAAoB3qI,EAAM;AAAA,EAC5B,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,qBAAA+1H,GAAqB,GAAGjN,EAAU,IAAK/3H,GACzCilI,IAAYL,GAAaI,CAAmB;AAClD,WAAuB59H,gBAAAA,EAAAA,IAAIw/H,IAAqB,EAAE,GAAG3B,GAAW,GAAGlN,GAAY,KAAK9oH,GAAc;AAAA,EACpG;AACF;AACA03H,GAAkB,cAAcvL;AAYhC,IAAI8G,KAAmB,0BACnB2E,KAAyB7qI,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACrE,QAAM,EAAE,qBAAA+1H,GAAqB,GAAG8B,EAAe,IAAK9mI,GAC9CilI,IAAYL,GAAaI,CAAmB;AAClD,SAAuB59H,gBAAAA,EAAAA,IAAI2/H,IAA0B,EAAE,GAAG9B,GAAW,GAAG6B,GAAiB,KAAK73H,GAAc;AAC9G,CAAC;AACD43H,GAAuB,cAAc3E;AACrC,IAAIW,KAAmB,0BACnBmE,KAAyBhrI,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACrE,QAAM,EAAE,qBAAA+1H,GAAqB,GAAGjC,EAAe,IAAK/iI,GAC9CilI,IAAYL,GAAaI,CAAmB;AAClD,SAAuB59H,gBAAAA,EAAAA;AAAAA,IACrB6/H;AAAAA,IACA;AAAA,MACE,GAAGhC;AAAA,MACH,GAAGlC;AAAA,MACH,KAAK9zH;AAAA,MACL,OAAO;AAAA,QACL,GAAGjP,EAAM;AAAA,QAGP,kDAAkD;AAAA,QAClD,iDAAiD;AAAA,QACjD,kDAAkD;AAAA,QAClD,uCAAuC;AAAA,QACvC,wCAAwC;AAAA,MAElD;AAAA,IACA;AAAA,EACA;AACA,CAAC;AACDgnI,GAAuB,cAAcnE;AACrC,IAAIjjE,KAAQmlE,IACRrhF,KAAUyhF,IACV14D,KAAU44D,IACV14D,KAAW44D,IAEX2B,KAAStB,IACTxkB,KAAQ0kB,IACRqB,KAAgBnB,IAEhBoB,KAAaf,IACbgB,KAAiBd,IACjBe,KAAab,IAGbc,KAAcV,IACdW,KAAcR;ACtQlB,MAAMjC,KAAe0C,IAEftC,KAAsBuC,IAUtBb,KAAyB7qI,EAAM,WAKnC,CAAC,EAAE,WAAAgN,GAAW,OAAAwR,GAAO,UAAAzT,GAAU,GAAG/G,KAASuE,MAC3C8C,gBAAAA,EAAAA;AAAAA,EAACsgI;AAAAA,EAAA;AAAA,IACC,KAAApjI;AAAA,IACA,WAAWyX;AAAA,MACT;AAAA,MACAxB,KAAS;AAAA,MACTxR;AAAA,IAAA;AAAA,IAED,GAAGhJ;AAAA,IAEH,UAAA;AAAA,MAAA+G;AAAA,MACDK,gBAAAA,EAAAA,IAACwgI,IAAA,EAAa,WAAU,kBAAA,CAAkB;AAAA,IAAA;AAAA,EAAA;AAC5C,CACD;AACDf,GAAuB,cAAcc,GAAiC;AAEtE,MAAMX,KAAyBhrI,EAAM,WAGnC,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA;AAAAA,EAACygI;AAAAA,EAAA;AAAA,IACC,KAAAtjI;AAAA,IACA,WAAWyX;AAAA,MACT;AAAA,MACAhT;AAAA,IAAA;AAAA,IAED,GAAGhJ;AAAA,EAAA;AACN,CACD;AACDgnI,GAAuB,cAAca,GAAiC;AAEtE,MAAMtC,KAAsBvpI,EAAM,WAGhC,CAAC,EAAE,WAAAgN,GAAW,YAAAkwH,IAAa,GAAG,GAAGl5H,KAASuE,MAC1C6C,gBAAAA,EAAAA,IAAC0gI,IAAA,EACC,UAAA1gI,gBAAAA,EAAAA;AAAAA,EAAC2gI;AAAAA,EAAA;AAAA,IACC,KAAAxjI;AAAA,IACA,YAAA20H;AAAA,IACA,WAAWl9G;AAAA,MACT;AAAA,MACAhT;AAAA,IAAA;AAAA,IAED,GAAGhJ;AAAA,EAAA;AACN,EAAA,CACF,CACD;AACDulI,GAAoB,cAAcwC,GAA8B;AAEhE,MAAMjC,KAAmB9pI,EAAM,WAK7B,CAAC,EAAE,WAAAgN,GAAW,OAAAwR,GAAO,GAAGxa,KAASuE,MACjC6C,gBAAAA,EAAAA;AAAAA,EAAC4gI;AAAAA,EAAA;AAAA,IACC,KAAAzjI;AAAA,IACA,WAAWyX;AAAA,MACT;AAAA,MACAxB,KAAS;AAAA,MACTxR;AAAA,IAAA;AAAA,IAED,GAAGhJ;AAAA,EAAA;AACN,CACD;AACD8lI,GAAiB,cAAckC,GAA2B;AAE1D,MAAMhC,KAA2BhqI,EAAM,WAGrC,CAAC,EAAE,WAAAgN,GAAW,UAAAjC,GAAU,SAAAy6D,GAAS,GAAGxhE,KAASuE,MAC7C8C,gBAAAA,EAAAA;AAAAA,EAAC4gI;AAAAA,EAAA;AAAA,IACC,KAAA1jI;AAAA,IACA,WAAWyX;AAAA,MACT;AAAA,MACAhT;AAAA,IAAA;AAAA,IAEF,SAAAw4D;AAAA,IACC,GAAGxhE;AAAA,IAEJ,UAAA;AAAA,MAAAoH,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,gEACd,UAAAA,gBAAAA,EAAAA,IAAC8gI,IAAA,EACC,UAAA9gI,gBAAAA,EAAAA,IAAC08D,IAAA,EAAM,WAAU,UAAA,CAAU,EAAA,CAC7B,GACF;AAAA,MACC/8D;AAAA,IAAA;AAAA,EAAA;AACH,CACD;AACDi/H,GAAyB,cAAciC,GAAmC;AAE1E,MAAM5B,KAAwBrqI,EAAM,WAGlC,CAAC,EAAE,WAAAgN,GAAW,UAAAjC,GAAU,GAAG/G,KAASuE,MACpC8C,gBAAAA,EAAAA;AAAAA,EAAC8gI;AAAAA,EAAA;AAAA,IACC,KAAA5jI;AAAA,IACA,WAAWyX;AAAA,MACT;AAAA,MACAhT;AAAA,IAAA;AAAA,IAED,GAAGhJ;AAAA,IAEJ,UAAA;AAAA,MAAAoH,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,gEACd,UAAAA,gBAAAA,EAAAA,IAAC8gI,IAAA,EACC,UAAA9gI,gBAAAA,EAAAA,IAACq6G,IAAA,EAAO,WAAU,uBAAA,CAAuB,EAAA,CAC3C,GACF;AAAA,MACC16G;AAAA,IAAA;AAAA,EAAA;AACH,CACD;AACDs/H,GAAsB,cAAc8B,GAAgC;AAEpE,MAAMvC,KAAoB5pI,EAAM,WAK9B,CAAC,EAAE,WAAAgN,GAAW,OAAAwR,GAAO,GAAGxa,KAASuE,MACjC6C,gBAAAA,EAAAA;AAAAA,EAACghI;AAAAA,EAAA;AAAA,IACC,KAAA7jI;AAAA,IACA,WAAWyX,GAAG,qCAAqCxB,KAAS,QAAQxR,CAAS;AAAA,IAC5E,GAAGhJ;AAAA,EAAA;AACN,CACD;AACD4lI,GAAkB,cAAcwC,GAA4B;AAE5D,MAAM3B,KAAwBzqI,EAAM,WAGlC,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA,IAACihI,IAAA,EAAgC,KAAA9jI,GAAU,WAAWyX,GAAG,4BAA4BhT,CAAS,GAAI,GAAGhJ,EAAA,CAAO,CAC7G;AACDymI,GAAsB,cAAc4B,GAAgC;AC7I7D,MAAMC,KAA0D,CAAC;AAAA,EACpE,SAAAC;AAAA,EACA,UAAA3hE;AAAA,EACA,UAAA9f,IAAW;AAAA,EACX,UAAA0hF;AAAA,EACA,WAAAx/H,IAAY;AAAA,EACZ,SAAA+H,IAAU;AACd,MACQw3H,EAAQ,WAAW,IAAU,OAG7BnhI,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAW4U,GAAG,qCAAqChT,CAAS,GAC5D,UAAAu/H,EAAQ,IAAI,CAACE,MACVphI,gBAAAA,EAAAA;AAAAA,EAAC8U;AAAAA,EAAA;AAAA,IAEG,MAAK;AAAA,IACL,SAASpL,MAAY,YAAY,UAAU;AAAA,IAC3C,MAAK;AAAA,IACL,UAAA+1C;AAAA,IACA,SAAS,CAACjrD,MAAM;AACZ,MAAAA,EAAE,gBAAA,GACF+qE,EAAS6hE,CAAM;AAAA,IACnB;AAAA,IACA,WAAWzsH;AAAA,MACPjL,MAAY,YACN,4LACA;AAAA,MACNy3H,MAAaC,EAAO,MAAM;AAAA,MAC1B;AAAA,IAAA;AAAA,IAEJ,OAAOA,EAAO;AAAA,IAEb,UAAA;AAAA,MAAAA,EAAO,QAAQrhI,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,UAAU,YAAO,MAAK;AAAA,MACtDA,gBAAAA,EAAAA,IAAC,QAAA,EAAM,UAAAqhI,EAAO,KAAA,CAAK;AAAA,IAAA;AAAA,EAAA;AAAA,EAnBdA,EAAO;AAAA,CAqBnB,GACL;ACYR,SAAwBC,GAAc;AAAA,EACpC,QAAAhiE;AAAA,EACA,SAAAC;AAAA,EACA,UAAA4D;AAAA,EACA,YAAAo+D;AAAA,EACA,iBAAA9mB;AAAA,EACA,gBAAA+mB;AAAA,EACA,WAAAjnB;AAAA,EACA,cAAA/Z,IAAe;AAAA,EACf,cAAAka,IAAe;AAAA,EACf,YAAA+mB,IAAa;AAAA,EACb,aAAAC,IAAc;AAAA,EACd,mBAAAC;AAAA,EACA,cAAAvrE;AAAA,EACA,YAAAwrE;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC;AAAA;AAAA,EAEA,oBAAAC,IAAqB;AAAA,EACrB,iBAAAC,IAAkB,CAAA;AAAA,EAClB,iBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,oBAAAC;AAAA,EACA,aAAA5hC,IAAc;AAAA,EACd,gBAAAE,IAAiB;AAAA,EACjB,kBAAA2hC,IAAmB;AAAA,EACnB,gBAAAC;AAAA,EACA,QAAQC;AAAA,EACR,gBAAAC;AAAA;AAAA,EAEA,eAAAC,IAAgB,CAAA;AAAA,EAChB,cAAAC,IAAe;AAAA,EACf,mBAAAC;AAAA,EACA,oBAAAC;AAAA;AAAA,EAEA,gBAAAC;AAAA,EACA,cAAAC,IAAejjC;AACjB,GAAuB;AACrB,QAAM,CAACkjC,GAAgBC,EAAiB,IAAIpiI,GAAS,EAAK,GACpD,CAAC+nG,IAAWs6B,EAAY,IAAIriI,GAAS,EAAK,GAC1C,CAAC2S,IAAO2vH,EAAQ,IAAItiI,GAAS,CAAC,GAC9B,CAACuiI,IAAgBC,EAAiB,IAAIxiI,GAAS,EAAE,GACjD,CAACyiI,IAAmBC,EAAoB,IAAI1iI,GAAS,EAAK,GAC1D,CAAC2iI,IAAiBC,EAAkB,IAAI5iI,GAAS,EAAK,GACtD,CAAC6iI,IAAeC,EAAgB,IAAI9iI,GAAS,EAAK;AACpC,EAAA+hE,GAAwC,IAAI;AAChE,QAAMghE,KAAgBhhE,GAA8B,IAAI;AACrC,EAAAA,GAAe,CAAC;AACnC,QAAMihE,KAAgBjhE,GAAsD,IAAI,GAC1EkhE,KAAelhE,GAAO,EAAK,GAC3BmhE,KAAenhE,GAAO,EAAK,GAG3BohE,KAAiBxB,MAAmB,SAAYA,IAAiBY,IACjEa,KAAoB,CAACpoI,MAAkB;AAC3C,IAAI4mI,IACFA,EAAe5mI,CAAK,IAEpBwnI,GAAkBxnI,CAAK;AAAA,EAE3B;AAGA,EAAAoF,GAAU,MAAM;AACd,IAAIo+D,KAEFokE,GAAmB,EAAK;AAAA,EAE5B,GAAG,CAACpkE,CAAM,CAAC,GAGXp+D,GAAU,MAAM;AACd,QAAI,CAACo+D,EAAQ;AAEb,UAAMn7B,IAAgB,CAAChE,MAAyB;AAE9C,YAAMhS,KAASgS,EAAM,QACfgkG,KAAkBh2G,cAAkB,uBACxCA,cAAkB,qBAClBA,MAAA,gBAAAA,GAAQ,qBAAoB,WAC5BA,MAAA,gBAAAA,GAAQ,aAAY,eACpBA,MAAA,gBAAAA,GAAQ,aAAY;AAGtB,UAAIgS,EAAM,QAAQ,UAAU;AAC1B,YAAIgkG;AAEF;AAEF,QAAA5kE,EAAA;AAAA,MACF,OAAWp/B,EAAM,QAAQ,aAAaA,EAAM,WAAW0iG,KAErD1iG,EAAM,eAAA,GACN0iG,EAAkB,IAAI,KACb1iG,EAAM,QAAQ,eAAeA,EAAM,WAAW0iG,KAEvD1iG,EAAM,eAAA,GACN0iG,EAAkB,MAAM,KACf1iG,EAAM,QAAQ,eAAe,CAACgkG,MAAmBtC,KAC1D1hG,EAAM,eAAA,GACN0hG,EAAW,MAAM,KACR1hG,EAAM,QAAQ,gBAAgB,CAACgkG,MAAmBtC,KAC3D1hG,EAAM,eAAA,GACN0hG,EAAW,MAAM,KACR1hG,EAAM,QAAQ,OAAO,CAACgkG,MAAmB1C,MAElDthG,EAAM,eAAA,GACNujG,GAAmB,CAACD,EAAe;AAAA,IAEvC;AAEA,oBAAS,iBAAiB,WAAWt/F,CAAa,GAC3C,MAAM,SAAS,oBAAoB,WAAWA,CAAa;AAAA,EACpE,GAAG,CAACm7B,GAAQC,GAASsiE,GAAYzrE,GAAcwrE,GAAYH,GAAYgC,IAAiBZ,CAAiB,CAAC,GAG1G3hI,GAAU,MACD,MAAM;AACX,IAAI2iI,GAAc,WAChB,aAAaA,GAAc,OAAO;AAAA,EAEtC,GACC,CAAA,CAAE;AAGL,QAAMO,KAAmB,CAAC16B,GAAiBC,MAAoB;AAC7D,IAAAm6B,GAAc,UAAU,EAAE,GAAGp6B,GAAS,GAAGC,GAAS,MAAM,KAAK,MAAI,GACjEo6B,GAAa,UAAU;AAAA,EACzB,GAEMM,IAAiB,CAAC36B,GAAiBC,MAAoB;AAC3D,QAAI,CAACm6B,GAAc,WAAW,CAACjC;AAC7B;AAGF,UAAMzsF,KAASs0D,IAAUo6B,GAAc,QAAQ,GACzCzuF,KAASs0D,IAAUm6B,GAAc,QAAQ,GACzCQ,KAAY,KAAK,IAAA,IAAQR,GAAc,QAAQ;AAQrD,IACE,KAAK,IAAI1uF,EAAM,IANQ,MAOvB,KAAK,IAAIC,EAAM,IALW,OAM1BivF,KAPmB,OAQnB,CAACz7B,OAEGzzD,KAAS,IAEXysF,EAAW,MAAM,IACRzsF,KAAS,KAElBysF,EAAW,MAAM,IAIrBiC,GAAc,UAAU,MACxBC,GAAa,UAAU;AAAA,EACzB,GAEMQ,IAAqB,MAAM;AAC/B,IAAIN,GAAe,KAAA,KAAU,CAACzjC,KAAgBghC,KAC5CA,EAAeyC,EAAc;AAAA,EAGjC,GAEMO,IAAqB,MAAM;AAC/B,IAAAhB,GAAqB,EAAI;AAAA,EAC3B,GAEMiB,KAAgB,CAACj3G,GAAyC8xE,GAAe9yE,IAAsB87C,IAAmB84B,OAA6B;AACnJ,IAAImZ,KAEFA,EAAU/sF,GADWm0G,KAAqBx+D,GACVm8B,GAAO9yE,IAAa87C,IAAU84B,EAAa,GAE7EoiC,GAAqB,EAAK;AAAA,EAC5B;AAEA,SAAKlkE,IAIHr/D,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAS,CAACxL,MAAM;AAEd,QAAIA,EAAE,WAAWA,EAAE,kBACbgtI,IACFiC,GAAmB,CAACD,EAAe,IAEnClkE,EAAA;AAAA,MAGN;AAAA,MACA,cAAc,CAAC9qE,MAAM;AAEnB,YAAIA,EAAE,WAAWA,EAAE,eAAe;AAChC,gBAAMygD,IAAQzgD,EAAE,QAAQ,CAAC;AACzB,UAAA2vI,GAAiBlvF,EAAM,SAASA,EAAM,OAAO;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,YAAY,CAACzgD,MAAM;AAEjB,YAAIA,EAAE,WAAWA,EAAE,eAAe;AAChC,gBAAMygD,IAAQzgD,EAAE,eAAe,CAAC;AAChC,UAAA4vI,EAAenvF,EAAM,SAASA,EAAM,OAAO;AAAA,QAC7C;AAAA,MACF;AAAA,MAEA,UAAA;AAAA,QAAAj1C,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,2DACb,UAAA;AAAA,UAAAD,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,2DACb,UAAAA,gBAAAA,EAAAA;AAAAA,YAACk3G;AAAA,YAAA;AAAA,cACC,cAAc;AAAA,cACd,UAAU;AAAA,cACV,UAAU;AAAA,cACV,cAAc;AAAA,cACd,iBAAiB;AAAA,cACjB,eAAe;AAAA,cAEf,oBAAoB,EAAE,eAAe,KAAK,eAAe,UAAA;AAAA,cACzD,OAAO,EAAE,MAAM,EAAA;AAAA,cACf,aAAa,EAAE,UAAU,IAAO,MAAM,IAAA;AAAA,cACtC,OAAO,EAAE,MAAM,GAAA;AAAA,cACf,eAAe,CAACziH,MAAM2uI,GAAS3uI,EAAE,MAAM,KAAK;AAAA,cAE5C,UAAAuL,gBAAAA,EAAAA;AAAAA,gBAACy3G;AAAA,gBAAA;AAAA,kBACC,cAAa;AAAA,kBACb,cAAa;AAAA,kBAEb,UAAAz3G,gBAAAA,EAAAA;AAAAA,oBAAC0B;AAAA,oBAAA;AAAA,sBACC,KAAKigI,KAAqBx+D;AAAA,sBAC1B,KAAKo+D;AAAA,sBACL,OAAO,GAAG,KAAK,KAAK9tH,KAAQ,GAAG,CAAC;AAAA,sBAChC,iBAAiB,CAAC,KAAK,MAAM,IAAI;AAAA,sBACjC,cAAa;AAAA,sBACb,WAAU;AAAA,sBACV,SAAQ;AAAA,sBACR,WAAW;AAAA,sBACX,QAAQ,MAAMyvH,GAAkB,EAAI;AAAA,sBACpC,SAAS,CAACzuI,MAAwB;AAEhC,wBAAI,CAACuvI,GAAa,WAAWvC,MAC3BhtI,EAAE,gBAAA,GACFivI,GAAmB,CAACD,EAAe;AAAA,sBAEvC;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YACF;AAAA,UAAA,GAEJ;AAAA,UACC,CAACR,KACAjjI,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,8EACb,UAAAA,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,8EAAA,CAA8E,EAAA,CAC/F;AAAA,UAIFA,gBAAAA,EAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS,CAACvL,MAAM;AACd,gBAAAA,EAAE,gBAAA,GACF8qE,EAAA;AAAA,cACF;AAAA,cACA,WAAU;AAAA,cACV,OAAM;AAAA,cACP,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAKAsiE,KAAczrE,MAAiB,UAAawrE,MAAe,UAAaA,IAAa,KACpF3hI,gBAAAA,EAAAA,KAAA+6C,YAAA,EACG,UAAA;AAAA,YAAAob,IAAe,KACdp2D,gBAAAA,EAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,CAACvL,MAAM;AACd,kBAAAA,EAAE,gBAAA,GACFotI,EAAW,MAAM;AAAA,gBACnB;AAAA,gBACA,WAAU;AAAA,gBACV,OAAO,EAAE,QAAQ,GAAA;AAAA,gBACjB,OAAM;AAAA,gBACP,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAKFzrE,IAAewrE,IAAa,KAC3B5hI,gBAAAA,EAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,CAACvL,MAAM;AACd,kBAAAA,EAAE,gBAAA,GACFotI,EAAW,MAAM;AAAA,gBACnB;AAAA,gBACA,WAAU;AAAA,gBACV,OAAO,EAAE,QAAQ,GAAA;AAAA,gBACjB,OAAM;AAAA,gBACP,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED,GAEJ;AAAA,UAIDJ,KAAcgC,MAAmBR,KAChCjjI,gBAAAA,EAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS,CAACvL,MAAM;AAEd,gBAAIA,EAAE,WAAWA,EAAE,iBACjBivI,GAAmB,EAAK;AAAA,cAE5B;AAAA,cAEA,UAAA1jI,gBAAAA,EAAAA;AAAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,SAAS,CAACvL,MAAMA,EAAE,gBAAA;AAAA,kBAEjB,UAAAstI;AAAA;AAAA,oBAEC9hI,gBAAAA,OAAA+6C,EAAAA,UAAA,EAEG,UAAA;AAAA,sBAAA2nF,EAAc,SAAS,KACtB1iI,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,kDACb,UAAA;AAAA,wBAAAA,gBAAAA,EAAAA,KAAC,QAAA,EAAK,WAAU,iBAAgB,UAAA;AAAA,0BAAA;AAAA,0BACpB2iI,KAAgB,IAAI,GAAGA,IAAe,CAAC,IAAID,EAAc,MAAM,KAAK;AAAA,wBAAA,GAChF;AAAA,wBACA1iI,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,2BAEb,UAAA;AAAA,0BAAAA,gBAAAA,EAAAA,KAAC09H,IAAA,EAAa,OAAO,IACnB,UAAA;AAAA,4BAAA39H,gBAAAA,EAAAA,IAAC+9H,IAAA,EAAoB,SAAO,IAC1B,UAAA/9H,gBAAAA,EAAAA;AAAAA,8BAAC+U;AAAAA,8BAAA;AAAA,gCACC,MAAK;AAAA,gCACL,SAAQ;AAAA,gCACR,SAAS,CAACtgB,MAAMA,EAAE,gBAAA;AAAA,gCAClB,WAAU;AAAA,gCACV,OAAM;AAAA,gCAEN,UAAAuL,gBAAAA,EAAAA,IAAC0kI,IAAA,EAAQ,WAAU,UAAA,CAAU;AAAA,8BAAA;AAAA,4BAAA,GAEjC;AAAA,4BACA1kI,gBAAAA,EAAAA,IAACm+H,IAAA,EAAoB,OAAM,OAAM,WAAU,2CACxC,UAAAwE,EAAc,WAAW,IACxB3iI,gBAAAA,MAAC,OAAA,EAAI,WAAU,uDACb,UAAAA,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,UAAA,iBAAA,CAAc,EAAA,CACnB,IAEAxV,gBAAAA,EAAAA,IAAAg7C,YAAA,EACG,UAAA,CAAC,GAAG2nF,CAAa,EAAE,QAAA,EAAU,IAAI,CAACgC,GAAeC,MAAiB;AACjE,oCAAMC,KAAclC,EAAc,SAAS,IAAIiC;AAC/C,qCACE3kI,gBAAAA,EAAAA;AAAAA,gCAACy+H;AAAA,gCAAA;AAAA,kCAEC,UAAU,MAAM;AACd,oCAAAwF,GAAkBS,CAAa;AAAA,kCACjC;AAAA,kCACA,WAAW,wCAAwC/B,MAAiBiC,KAAc,kBAAkB,EAClG;AAAA,kCAEF,UAAA;AAAA,oCAAA5kI,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,iCAAgC,UAAA;AAAA,sCAAA;AAAA,sCAC3C0iI,EAAc,SAASiC;AAAA,sCACxBhC,MAAiBiC,MAAe;AAAA,oCAAA,GACnC;AAAA,oCACA7kI,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,+BACZ,UAAA2kI,EAAA,CACH;AAAA,kCAAA;AAAA,gCAAA;AAAA,gCAbKE;AAAA,8BAAA;AAAA,4BAgBX,CAAC,GACH,EAAA,CAEJ;AAAA,0BAAA,GACF;AAAA,0BACA7kI,gBAAAA,EAAAA;AAAAA,4BAAC+U;AAAAA,4BAAA;AAAA,8BACC,MAAK;AAAA,8BACL,SAAQ;AAAA,8BACR,SAAS,CAACtgB,MAAM;AACd,gCAAAA,EAAE,gBAAA,GACFouI,KAAA,QAAAA,EAAoB;AAAA,8BACtB;AAAA,8BACA,UAAUF,EAAc,WAAW,KAAKC,MAAiBD,EAAc,SAAS;AAAA,8BAChF,WAAU;AAAA,8BACV,OAAM;AAAA,8BAEN,UAAA3iI,gBAAAA,EAAAA,IAAC8kI,IAAA,EAAQ,WAAU,UAAA,CAAU;AAAA,4BAAA;AAAA,0BAAA;AAAA,0BAE/B9kI,gBAAAA,EAAAA;AAAAA,4BAAC+U;AAAAA,4BAAA;AAAA,8BACC,MAAK;AAAA,8BACL,SAAQ;AAAA,8BACR,SAAS,CAACtgB,MAAM;AACd,gCAAAA,EAAE,gBAAA,GACFouI,KAAA,QAAAA,EAAoB;AAAA,8BACtB;AAAA,8BACA,UAAUD,MAAiB;AAAA,8BAC3B,WAAU;AAAA,8BACV,OAAM;AAAA,8BAEN,UAAA5iI,gBAAAA,EAAAA,IAAC8kI,IAAA,EAAQ,WAAU,qBAAA,CAAqB;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBAC1C,EAAA,CACF;AAAA,sBAAA,GACF;AAAA,4CAID,OAAA,EAAI,WAAU,2BACb,UAAA7kI,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,mBACb,UAAA;AAAA,wBAAAD,gBAAAA,EAAAA;AAAAA,0BAACi4G;AAAA,0BAAA;AAAA,4BACC,OAAOgsB;AAAA,4BACP,UAAU,CAACxvI,MAAM;AACf,8BAAAyvI,GAAkBzvI,EAAE,OAAO,KAAK,GAChCquI,KAAA,QAAAA;AAAA,4BACF;AAAA,4BACA,aAAajvH,GAAU,sBAAsB;AAAA,4BAC7C,UAAU2sF;AAAA,4BACV,MAAM;AAAA,4BACN,WAAU;AAAA,4BACV,WAAW,CAAC/rG,MAAM;AAChB,8BAAKA,EAAE,QAAQ,WAAWA,EAAE,WAAaA,EAAE,QAAQ,WAAW,CAACA,EAAE,YAAYwvI,GAAe,KAAA,KAAU,CAACzjC,KACrG/rG,EAAE,gBAAA,GACFA,EAAE,eAAA,GACF8vI,EAAA,GACK9vI,EAAE,WACLyvI,GAAkB,EAAE,KAEbzvI,EAAE,QAAQ,aAAaA,EAAE,WAClCA,EAAE,gBAAA,GACFA,EAAE,eAAA,GACFouI,KAAA,QAAAA,EAAoB,SACXpuI,EAAE,QAAQ,eAAeA,EAAE,WACpCA,EAAE,gBAAA,GACFA,EAAE,eAAA,GACFouI,KAAA,QAAAA,EAAoB,WACXpuI,EAAE,QAAQ,YACnBA,EAAE,gBAAA,GACFA,EAAE,eAAA,GACFyvI,GAAkB,EAAE,MACXzvI,EAAE,IAAI,WAAW,OAAO,KAAKA,EAAE,QAAQ,YAAYA,EAAE,QAAQ,gBACtEA,EAAE,gBAAA;AAAA,4BAEN;AAAA,4BACA,SAAS,CAACA,MAAMA,EAAE,gBAAA;AAAA,0BAAgB;AAAA,wBAAA;AAAA,wBAEpCuL,gBAAAA,EAAAA;AAAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,SAAS,CAACvL,MAAM;AACd,8BAAAA,EAAE,gBAAA,GACF6tI,KAAA,QAAAA;AAAA,4BACF;AAAA,4BACA,UAAU1hC;AAAA,4BACV,WAAW,8DAA8DF,IACrE,8CACA,kDACF;AAAA,4BACF,OAAOA,IAAc,mBAAmB;AAAA,4BAEvC,UAAAE,IACC5gG,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,gFAA+E,IAC5F0gG,IACF1gG,gBAAAA,EAAAA,IAACsiG,IAAA,EAAO,MAAM,IAAI,IAElBtiG,gBAAAA,EAAAA,IAACuiG,IAAA,EAAI,MAAM,GAAA,CAAI;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAEnB,EAAA,CACF,EAAA,CACF;AAAA,sBAGAviG,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,aACb,UAAAA,gBAAAA,EAAAA;AAAAA,wBAACkhI;AAAA,wBAAA;AAAA,0BACC,SAAS8B;AAAA,0BACT,UAAU,CAAC3B,MAAW;AAEpB,kCAAMv/B,MADUmiC,MAAkB,IACV,KAAA;AAExB,4BAAAC,GAAkB,GAAGpiC,EAAO,GADVA,KAAU,OAAO,EACK,GAAGu/B,EAAO,MAAM,EAAE;AAAA,0BAC5D;AAAA,0BACA,SAAQ;AAAA,0BACR,UAAU7gC;AAAA,wBAAA;AAAA,sBAAA,GAEd;AAAA,sBAGAvgG,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,uCAEb,UAAA;AAAA,wBAAAA,gBAAAA,EAAAA,KAAC09H,IAAA,EAAa,OAAO,IACnB,UAAA;AAAA,0BAAA39H,gBAAAA,EAAAA,IAAC+9H,IAAA,EAAoB,SAAO,IAC1B,UAAA/9H,gBAAAA,EAAAA;AAAAA,4BAAC+U;AAAAA,4BAAA;AAAA,8BACC,SAAS,CAACtgB,MAAMA,EAAE,gBAAA;AAAA,8BAClB,SAAQ;AAAA,8BACR,WAAU;AAAA,8BACV,OAAOof,GAAU,kBAAkB;AAAA,8BAEnC,UAAA7T,gBAAAA,EAAAA,IAAC+kI,IAAA,EAAS,MAAM,IAAI,WAAU,gBAAA,CAAgB;AAAA,4BAAA;AAAA,0BAAA,GAElD;AAAA,0BACA9kI,gBAAAA,EAAAA,KAACk+H,IAAA,EAAoB,OAAM,OAAM,WAAU,kBACxC,UAAA;AAAA,4BAAA6D,EAAgB,WAAW,IAC1BhiI,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,uDACb,UAAAA,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,UAAA,0BAAsB,EAAA,CAC3B,IAEAvV,gBAAAA,OAAA+6C,EAAAA,UAAA,EACG,UAAA;AAAA,8BAAAgnF,EAAgB,IAAI,CAAC7gH,GAAUte,MAC9B5C,gBAAAA,EAAAA;AAAAA,gCAACy+H;AAAA,gCAAA;AAAA,kCAEC,UAAU,MAAMuD,KAAA,gBAAAA,EAAkB9gH,EAAS;AAAA,kCAC3C,WAAU;AAAA,kCAEV,UAAA;AAAA,oCAAAnhB,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,mBAAmB,UAAAmhB,EAAS,MAAK;AAAA,oCACjDnhB,gBAAAA,EAAAA;AAAAA,sCAAC;AAAA,sCAAA;AAAA,wCACC,SAAS,CAACvL,OAAM;AACd,0CAAAA,GAAE,gBAAA,GACF0tI,KAAA,QAAAA,EAAmBt/H;AAAA,wCACrB;AAAA,wCACA,WAAU;AAAA,wCACV,OAAOgR,GAAU,iBAAiB;AAAA,wCAElC,UAAA7T,gBAAAA,EAAAA,IAACkpE,IAAA,EAAO,WAAU,2BAAA,CAA2B;AAAA,sCAAA;AAAA,oCAAA;AAAA,kCAC/C;AAAA,gCAAA;AAAA,gCAdKrmE;AAAA,8BAAA,CAgBR;AAAA,oDACAw8H,IAAA,CAAA,CAAsB;AAAA,4BAAA,GACzB;AAAA,4BAEFp/H,gBAAAA,EAAAA,KAACy+H,IAAA,EAAiB,UAAU,MAAMwD,KAAA,gBAAAA,KAChC,UAAA;AAAA,8BAAAliI,gBAAAA,EAAAA,IAACglI,IAAA,EAAK,WAAU,eAAA,CAAe;AAAA,8BAC/BhlI,gBAAAA,EAAAA,IAACwV,MAAE,UAAA,2BAAA,CAAwB;AAAA,4BAAA,EAAA,CAC7B;AAAA,0BAAA,EAAA,CACF;AAAA,wBAAA,GACF;AAAA,wBACCutH,KACC/iI,gBAAAA,EAAAA;AAAAA,0BAAC+U;AAAAA,0BAAA;AAAA,4BACC,SAAS,CAACtgB,MAAM;AACd,8BAAAA,EAAE,gBAAA,GACFsuI,EAAA;AAAA,4BACF;AAAA,4BACA,SAAQ;AAAA,4BACR,WAAU;AAAA,4BACV,OAAOlvH,GAAU,wCAAwC;AAAA,4BAEzD,UAAA7T,gBAAAA,EAAAA,IAACilI,IAAA,EAAM,MAAM,IAAI,WAAU,gBAAA,CAAgB;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAG/CjlI,gBAAAA,EAAAA;AAAAA,0BAAC+U;AAAAA,0BAAA;AAAA,4BACC,SAAS,CAACtgB,MAAM;AACd,8BAAAA,EAAE,gBAAA,GACF2tI,KAAA,QAAAA;AAAA,4BACF;AAAA,4BACA,UAAUC,KAAgB,CAAC4B,GAAe,KAAA;AAAA,4BAC1C,SAAQ;AAAA,4BACR,WAAU;AAAA,4BACV,OAAOpwH,GAAU,yBAAyB;AAAA,4BAEzC,UAAAwuH,IACCriI,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,+EAAA,CAA+E,IAE9FA,gBAAAA,EAAAA,IAACoiG,IAAA,EAAS,MAAM,IAAI,WAAU,gBAAA,CAAgB;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAGlDpiG,gBAAAA,EAAAA;AAAAA,0BAAC+U;AAAAA,0BAAA;AAAA,4BACC,SAAS,CAACtgB,MAAM;AACd,8BAAAA,EAAE,gBAAA,GACEwvI,GAAe,UAAU,CAACzjC,MAC5B+jC,EAAA,GACAL,GAAkB,EAAE;AAAA,4BAExB;AAAA,4BACA,UAAU,CAACD,GAAe,KAAA,KAAUzjC;AAAA,4BACpC,SAAQ;AAAA,4BACR,WAAU;AAAA,4BACV,OAAM;AAAA,4BAEL,UAAAA,IACCxgG,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,iFAAA,CAAiF,IAEhGA,gBAAAA,EAAAA,IAAC8kI,IAAA,EAAQ,MAAM,IAAI,WAAU,gBAAA,CAAgB;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAGhDvC,KACCviI,gBAAAA,EAAAA;AAAAA,0BAAC+U;AAAAA,0BAAA;AAAA,4BACC,SAAS,CAACtgB,MAAM;AACd,8BAAAA,EAAE,gBAAA,GACF+tI,KAAA,QAAAA;AAAA,4BACF;AAAA,4BACA,UAAU9nB;AAAA,4BACV,SAAQ;AAAA,4BACR,WAAU;AAAA,4BACV,OAAM;AAAA,4BAEL,UAAAA,IACC16G,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,mFAAA,CAAmF,IAElGA,gBAAAA,EAAAA,IAACm7G,IAAA,EAAO,MAAM,IAAI,WAAU,gBAAA,CAAgB;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAIjDumB,KACC1hI,gBAAAA,EAAAA;AAAAA,0BAAC+U;AAAAA,0BAAA;AAAA,4BACC,SAAS,CAACtgB,MAAM;AACd,8BAAAA,EAAE,gBAAA,GACF+vI,EAAA;AAAA,4BACF;AAAA,4BACA,UAAU9pB;AAAA,4BACV,SAAQ;AAAA,4BACR,WAAU;AAAA,4BACV,OAAM;AAAA,4BAEL,UAAAA,IACC16G,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,mFAAA,CAAmF,IAElGA,gBAAAA,EAAAA,IAACklI,IAAA,EAAK,MAAM,IAAI,WAAU,gBAAA,CAAgB;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAIhDllI,gBAAAA,EAAAA;AAAAA,0BAAC+U;AAAAA,0BAAA;AAAA,4BACC,SAAS,CAACtgB,MAAM;AACd,8BAAAA,EAAE,gBAAA,GACFivI,GAAmB,EAAK;AAAA,4BAC1B;AAAA,4BACA,SAAQ;AAAA,4BACR,WAAU;AAAA,4BACV,OAAO7vH,GAAU,aAAa;AAAA,4BAC9B,MAAK;AAAA,4BAEL,UAAA7T,gBAAAA,EAAAA,IAACmlI,IAAA,EAAU,MAAM,IAAI,WAAU,gBAAA,CAAgB;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBACjD,EAAA,CACF;AAAA,oBAAA,EAAA,CACF;AAAA;AAAA;AAAA,oBAGAllI,gBAAAA,OAAA+6C,EAAAA,UAAA,EAEE,UAAA;AAAA,sBAAAh7C,gBAAAA,EAAAA,IAAC,SAAI,WAAU,2BACb,UAAAA,gBAAAA,MAAC,OAAA,EAAI,WAAU,mBACb,UAAAA,gBAAAA,EAAAA;AAAAA,wBAACi4G;AAAA,wBAAA;AAAA,0BACC,OAAOgsB;AAAA,0BACP,UAAU,CAACxvI,MAAM;AACf,4BAAAyvI,GAAkBzvI,EAAE,OAAO,KAAK,GAChCquI,KAAA,QAAAA;AAAA,0BACF;AAAA,0BACA,aAAajvH,GAAU,sBAAsB;AAAA,0BAC7C,UAAU2sF;AAAA,0BACV,MAAM;AAAA,0BACN,WAAU;AAAA,0BACV,WAAW,CAAC/rG,MAAM;AAChB,4BAAIA,EAAE,QAAQ,WAAW,CAACA,EAAE,YAAYwvI,GAAe,UAAU,CAACzjC,KAChE/rG,EAAE,gBAAA,GACFA,EAAE,eAAA,GACF8vI,EAAA,KACS9vI,EAAE,QAAQ,YACnBA,EAAE,gBAAA,GACFA,EAAE,eAAA,GACFyvI,GAAkB,EAAE,MACXzvI,EAAE,IAAI,WAAW,OAAO,KAAKA,EAAE,QAAQ,YAAYA,EAAE,QAAQ,gBACtEA,EAAE,gBAAA;AAAA,0BAEN;AAAA,0BACA,SAAS,CAACA,MAAMA,EAAE,gBAAA;AAAA,wBAAgB;AAAA,sBAAA,GAEtC,EAAA,CACF;AAAA,sBAGAuL,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,aACb,UAAAA,gBAAAA,EAAAA;AAAAA,wBAACkhI;AAAA,wBAAA;AAAA,0BACC,SAAS8B;AAAA,0BACT,UAAU,CAAC3B,MAAW;AAEpB,kCAAMv/B,MADUmiC,MAAkB,IACV,KAAA;AAExB,4BAAAC,GAAkB,GAAGpiC,EAAO,GADVA,KAAU,OAAO,EACK,GAAGu/B,EAAO,MAAM,EAAE;AAAA,0BAC5D;AAAA,0BACA,SAAQ;AAAA,0BACR,UAAU7gC;AAAA,wBAAA;AAAA,sBAAA,GAEd;AAAA,sBAGAvgG,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,wBAAAD,gBAAAA,EAAAA;AAAAA,0BAAC+U;AAAAA,0BAAA;AAAA,4BACC,SAAS,CAACtgB,MAAM;AACd,8BAAAA,EAAE,gBAAA,GACEwvI,GAAe,UAAU,CAACzjC,KAC5B+jC,EAAA;AAAA,4BAEJ;AAAA,4BACA,UAAU,CAACN,GAAe,KAAA,KAAUzjC;AAAA,4BACpC,SAAQ;AAAA,4BACR,WAAU;AAAA,4BACV,OAAM;AAAA,4BAEL,UAAAA,IACCxgG,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,iFAAA,CAAiF,IAEhGA,gBAAAA,EAAAA,IAAC8kI,IAAA,EAAQ,MAAM,IAAI,WAAU,gBAAA,CAAgB;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAGhDpD,KACC1hI,gBAAAA,EAAAA;AAAAA,0BAAC+U;AAAAA,0BAAA;AAAA,4BACC,SAAS,CAACtgB,MAAM;AACd,8BAAAA,EAAE,gBAAA,GACF+vI,EAAA;AAAA,4BACF;AAAA,4BACA,UAAU9pB;AAAA,4BACV,SAAQ;AAAA,4BACR,WAAU;AAAA,4BACV,OAAM;AAAA,4BAEL,UAAAA,IACC16G,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,mFAAA,CAAmF,IAElGA,gBAAAA,EAAAA,IAACklI,IAAA,EAAK,MAAM,IAAI,WAAU,gBAAA,CAAgB;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAIhDllI,gBAAAA,EAAAA;AAAAA,0BAAC+U;AAAAA,0BAAA;AAAA,4BACC,SAAS,CAACtgB,MAAM;AACd,8BAAAA,EAAE,gBAAA,GACFivI,GAAmB,EAAK;AAAA,4BAC1B;AAAA,4BACA,SAAQ;AAAA,4BACR,WAAU;AAAA,4BACV,OAAO7vH,GAAU,aAAa;AAAA,4BAC9B,MAAK;AAAA,4BAEL,UAAA7T,gBAAAA,EAAAA,IAACmlI,IAAA,EAAU,MAAM,IAAI,WAAU,gBAAA,CAAgB;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBACjD,EAAA,CACF;AAAA,oBAAA,EAAA,CACF;AAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAEJ;AAAA,UAAA;AAAA,UAOF1D,KAAc,CAACgC,MAAmBR,KAChCjjI,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,8DACb,UAAAA,gBAAAA,EAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS,CAACvL,MAAM;AACd,gBAAAA,EAAE,gBAAA,GACFivI,GAAmB,EAAI;AAAA,cACzB;AAAA,cACA,WAAU;AAAA,cACV,OAAM;AAAA,cAEN,UAAA1jI,gBAAAA,EAAAA,IAACilI,IAAA,EAAM,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA,GAErB;AAAA,UAMFtB,MAAiBV,KAAkBQ,MACjCxjI,gBAAAA,EAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS,CAACxL,MAAMA,EAAE,gBAAA;AAAA,cAEjB,UAAA;AAAA,gBAAAimH,IACCz6G,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,kBAAAD,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,+EAAA,CAA+E;AAAA,kBAC9FA,gBAAAA,EAAAA,IAAC,UAAK,UAAA,+BAAA,CAA4B;AAAA,gBAAA,EAAA,CACpC,IAEAC,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,kBAAAD,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,eAAe,UAAAuhI,GAAW;AAAA,kBACxCnrE,MAAiB,UAAawrE,MAAe,UAC5C3hI,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,yBAAyB,UAAA;AAAA,oBAAAm2D,IAAe;AAAA,oBAAE;AAAA,oBAAKwrE;AAAA,kBAAA,GAAW;AAAA,kBAE3E3hI,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,oBAAAD,gBAAAA,EAAAA,IAAC,SAAI,UAAA,oBAAA,CAAiB;AAAA,oBACtBA,gBAAAA,EAAAA,IAAC,SAAI,UAAA,6BAAA,CAA0B;AAAA,oBAC9B+hI,KAAsBY,EAAc,SAAS,KAC5C3iI,gBAAAA,EAAAA,IAAC,SAAI,UAAA,6BAAyB;AAAA,oBAE/B6hI,KAAcD,KAAcA,IAAa,KACxC5hI,gBAAAA,EAAAA,IAAC,SAAI,UAAA,iCAA6B;AAAA,oBAEpCA,gBAAAA,EAAAA,IAAC,SAAI,UAAA,wBAAA,CAAqB;AAAA,kBAAA,EAAA,CAC5B;AAAA,gBAAA,GACF;AAAA,gBAGFA,gBAAAA,EAAAA;AAAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,SAAS,MAAM4jI,GAAiB,EAAK;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACvC;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,GAGN;AAAA,QAEA5jI,gBAAAA,EAAAA;AAAAA,UAACs6G;AAAA,UAAA;AAAA,YACC,QAAQipB;AAAA,YACR,SAAS,MAAMC,GAAqB,EAAK;AAAA,YACzC,WAAWiB;AAAA,YACX,eAAelD;AAAA,YACf,iBAAA9mB;AAAA,YACA,cAAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA,IA5mBgB;AA+mBtB;ACv2BA,MAAM0qB,KAAkB,CAAC92B,MAAgB;AACvC,MAAI1jE;AACJ,QAAM2yB,IAA4B,oBAAI,IAAG,GACnC8nE,IAAW,CAACC,GAASC,MAAY;AACrC,UAAMC,IAAY,OAAOF,KAAY,aAAaA,EAAQ16F,CAAK,IAAI06F;AACnE,QAAI,CAAC,OAAO,GAAGE,GAAW56F,CAAK,GAAG;AAChC,YAAM66F,IAAgB76F;AACtB,MAAAA,IAAS26F,MAA4B,OAAOC,KAAc,YAAYA,MAAc,QAAQA,IAAY,OAAO,OAAO,CAAA,GAAI56F,GAAO46F,CAAS,GAC1IjoE,EAAU,QAAQ,CAACkd,MAAaA,EAAS7vC,GAAO66F,CAAa,CAAC;AAAA,IAChE;AAAA,EACF,GACMjsF,IAAW,MAAM5O,GAMjB86F,IAAM,EAAE,UAAAL,GAAU,UAAA7rF,GAAU,iBALV,MAAM9O,GAKqB,WAJjC,CAAC+vC,OACjBld,EAAU,IAAIkd,CAAQ,GACf,MAAMld,EAAU,OAAOkd,CAAQ,GAEoB,GACtD/vC,IAAeE,IAAQ0jE,EAAY+2B,GAAU7rF,GAAUksF,CAAG;AAChE,SAAOA;AACT,GACMC,KAAe,CAACr3B,MAAgBA,IAAc82B,GAAgB92B,CAAW,IAAI82B,IClB7EQ,KAAW,CAACpvG,MAAQA;AAC1B,SAASqvG,GAASH,GAAK5f,IAAW8f,IAAU;AAC1C,QAAME,IAAQlxI,GAAM;AAAA,IAClB8wI,EAAI;AAAA,IACJ9wI,GAAM,YAAY,MAAMkxH,EAAS4f,EAAI,SAAQ,CAAE,GAAG,CAACA,GAAK5f,CAAQ,CAAC;AAAA,IACjElxH,GAAM,YAAY,MAAMkxH,EAAS4f,EAAI,iBAAiB,GAAG,CAACA,GAAK5f,CAAQ,CAAC;AAAA,EAC5E;AACElxH,SAAAA,GAAM,cAAckxI,CAAK,GAClBA;AACT;AACA,MAAMC,KAAa,CAACz3B,MAAgB;AAClC,QAAMo3B,IAAMC,GAAYr3B,CAAW,GAC7B03B,IAAgB,CAAClgB,MAAa+f,GAASH,GAAK5f,CAAQ;AAC1D,gBAAO,OAAOkgB,GAAeN,CAAG,GACzBM;AACT,GACMxqH,KAAU,CAAC8yF,MAAgBA,IAAcy3B,GAAWz3B,CAAW,IAAIy3B;AC+PzE,SAASE,GAAkBC,GAAYr1G,GAAS;AAC9C,MAAIs1G;AACJ,MAAI;AACF,IAAAA,IAAUD,EAAA;AAAA,EACZ,QAAY;AACV;AAAA,EACF;AAmBA,SAlBuB;AAAA,IACrB,SAAS,CAACjtI,MAAS;AACjB,UAAI2J;AACJ,YAAMguC,IAAQ,CAACw1F,MACTA,MAAS,OACJ,OAEF,KAAK,MAAMA,GAAwB,MAAwB,GAE9D5qG,KAAO54B,IAAKujI,EAAQ,QAAQltI,CAAI,MAAM,OAAO2J,IAAK;AACxD,aAAI44B,aAAe,UACVA,EAAI,KAAKoV,CAAK,IAEhBA,EAAMpV,CAAG;AAAA,IAClB;AAAA,IACA,SAAS,CAACviC,GAAMk0C,MAAag5F,EAAQ,QAAQltI,GAAM,KAAK,UAAUk0C,GAA4B,MAAyB,CAAC;AAAA,IACxH,YAAY,CAACl0C,MAASktI,EAAQ,WAAWltI,CAAI;AAAA,EAAA;AAGjD;AACA,MAAMotI,KAAa,CAAC3sI,MAAO,CAACizB,MAAU;AACpC,MAAI;AACF,UAAMlrB,IAAS/H,EAAGizB,CAAK;AACvB,WAAIlrB,aAAkB,UACbA,IAEF;AAAA,MACL,KAAK6kI,GAAa;AAChB,eAAOD,GAAWC,CAAW,EAAE7kI,CAAM;AAAA,MACvC;AAAA,MACA,MAAM8kI,GAAa;AACjB,eAAO;AAAA,MACT;AAAA,IAAA;AAAA,EAEJ,SAAS,GAAG;AACV,WAAO;AAAA,MACL,KAAKC,GAAc;AACjB,eAAO;AAAA,MACT;AAAA,MACA,MAAMC,GAAY;AAChB,eAAOJ,GAAWI,CAAU,EAAE,CAAC;AAAA,MACjC;AAAA,IAAA;AAAA,EAEJ;AACF,GACMC,KAAc,CAAClqI,GAAQmqI,MAAgB,CAACxpH,GAAKshC,GAAKinF,MAAQ;AAC9D,MAAI70G,IAAU;AAAA,IACZ,SAASo1G,GAAkB,MAAM,YAAY;AAAA,IAC7C,YAAY,CAACr7F,MAAUA;AAAA,IACvB,SAAS;AAAA,IACT,OAAO,CAACg8F,GAAgBC,OAAkB;AAAA,MACxC,GAAGA;AAAA,MACH,GAAGD;AAAA,IAAA;AAAA,IAEL,GAAGD;AAAA,EAAA,GAEDG,IAAc,IACdC,IAAmB;AACvB,QAAMC,wBAAyC,IAAA,GACzCC,wBAA+C,IAAA;AACrD,MAAId,IAAUt1G,EAAQ;AACtB,MAAI,CAACs1G;AACH,WAAO3pI;AAAA,MACL,IAAIrG,MAAS;AACX,gBAAQ;AAAA,UACN,uDAAuD06B,EAAQ,IAAI;AAAA,QAAA,GAErE1T,EAAI,GAAGhnB,CAAI;AAAA,MACb;AAAA,MACAsoD;AAAA,MACAinF;AAAA,IAAA;AAGJ,QAAMwB,IAAU,MAAM;AACpB,UAAMt8F,IAAQ/Z,EAAQ,WAAW,EAAE,GAAG4tB,EAAA,GAAO;AAC7C,WAAO0nF,EAAQ,QAAQt1G,EAAQ,MAAM;AAAA,MACnC,OAAA+Z;AAAA,MACA,SAAS/Z,EAAQ;AAAA,IAAA,CAClB;AAAA,EACH,GACMs2G,IAAgBzB,EAAI;AAC1B,EAAAA,EAAI,WAAW,CAAC96F,GAAO26F,OACrB4B,EAAcv8F,GAAO26F,CAAO,GACrB2B,EAAA;AAET,QAAME,IAAe5qI;AAAA,IACnB,IAAIrG,OACFgnB,EAAI,GAAGhnB,CAAI,GACJ+wI,EAAA;AAAA,IAETzoF;AAAA,IACAinF;AAAA,EAAA;AAEF,EAAAA,EAAI,kBAAkB,MAAM0B;AAC5B,MAAIC;AACJ,QAAMC,IAAU,MAAM;AACpB,QAAI1kI,GAAImG;AACR,QAAI,CAACo9H,EAAS;AACd,UAAMoB,IAAiB,EAAER;AACzB,IAAAD,IAAc,IACdE,EAAmB,QAAQ,CAACj5F,MAAO;AACjC,UAAIy5F;AACJ,aAAOz5F,GAAIy5F,IAAM/oF,EAAA,MAAU,OAAO+oF,IAAMJ,CAAY;AAAA,IACtD,CAAC;AACD,UAAMK,MAA4B1+H,IAAK8nB,EAAQ,uBAAuB,OAAO,SAAS9nB,EAAG,KAAK8nB,IAAUjuB,IAAK67C,EAAA,MAAU,OAAO77C,IAAKwkI,CAAY,MAAM;AACrJ,WAAOf,GAAWF,EAAQ,QAAQ,KAAKA,CAAO,CAAC,EAAEt1G,EAAQ,IAAI,EAAE,KAAK,CAAC62G,MAA6B;AAChG,UAAIA;AACF,YAAI,OAAOA,EAAyB,WAAY,YAAYA,EAAyB,YAAY72G,EAAQ,SAAS;AAChH,cAAIA,EAAQ,SAAS;AACnB,kBAAM82G,IAAY92G,EAAQ;AAAA,cACxB62G,EAAyB;AAAA,cACzBA,EAAyB;AAAA,YAAA;AAE3B,mBAAIC,aAAqB,UAChBA,EAAU,KAAK,CAAClmI,MAAW,CAAC,IAAMA,CAAM,CAAC,IAE3C,CAAC,IAAMkmI,CAAS;AAAA,UACzB;AACA,kBAAQ;AAAA,YACN;AAAA,UAAA;AAAA,QAEJ;AACE,iBAAO,CAAC,IAAOD,EAAyB,KAAK;AAGjD,aAAO,CAAC,IAAO,MAAM;AAAA,IACvB,CAAC,EAAE,KAAK,CAACE,MAAoB;AAC3B,UAAIJ;AACJ,UAAID,MAAmBR;AACrB;AAEF,YAAM,CAACc,GAAUC,CAAa,IAAIF;AAMlC,UALAP,IAAmBx2G,EAAQ;AAAA,QACzBi3G;AAAA,SACCN,IAAM/oF,QAAU,OAAO+oF,IAAMJ;AAAA,MAAA,GAEhCjqH,EAAIkqH,GAAkB,EAAI,GACtBQ;AACF,eAAOX,EAAA;AAAA,IAEX,CAAC,EAAE,KAAK,MAAM;AACZ,MAAIK,MAAmBR,MAGvBU,KAA2B,QAAgBA,EAAwBJ,GAAkB,MAAM,GAC3FA,IAAmB5oF,EAAA,GACnBqoF,IAAc,IACdG,EAAyB,QAAQ,CAACl5F,MAAOA,EAAGs5F,CAAgB,CAAC;AAAA,IAC/D,CAAC,EAAE,MAAM,CAAC5yI,MAAM;AACd,MAAI8yI,MAAmBR,MAGvBU,KAA2B,QAAgBA,EAAwB,QAAQhzI,CAAC;AAAA,IAC9E,CAAC;AAAA,EACH;AACA,SAAAixI,EAAI,UAAU;AAAA,IACZ,YAAY,CAACqC,MAAe;AAC1B,MAAAl3G,IAAU;AAAA,QACR,GAAGA;AAAA,QACH,GAAGk3G;AAAA,MAAA,GAEDA,EAAW,YACb5B,IAAU4B,EAAW;AAAA,IAEzB;AAAA,IACA,cAAc,MAAM;AAClB,MAAA5B,KAAW,QAAgBA,EAAQ,WAAWt1G,EAAQ,IAAI;AAAA,IAC5D;AAAA,IACA,YAAY,MAAMA;AAAA,IAClB,WAAW,MAAMy2G,EAAA;AAAA,IACjB,aAAa,MAAMR;AAAA,IACnB,WAAW,CAAC/4F,OACVi5F,EAAmB,IAAIj5F,CAAE,GAClB,MAAM;AACX,MAAAi5F,EAAmB,OAAOj5F,CAAE;AAAA,IAC9B;AAAA,IAEF,mBAAmB,CAACA,OAClBk5F,EAAyB,IAAIl5F,CAAE,GACxB,MAAM;AACX,MAAAk5F,EAAyB,OAAOl5F,CAAE;AAAA,IACpC;AAAA,EACF,GAEGld,EAAQ,iBACXy2G,EAAA,GAEKD,KAAoBD;AAC7B,GACMY,KAAUtB,IChZVuB,KAAqB,CAAC1oG,MAAgB;AAC1C,MAAI,CAACA,EAAK;AACV,QAAM2oG,IAAM,IAAI,MAAA;AAChB,EAAAA,EAAI,MAAM3oG;AACZ,GAEa4oG,KAAqB3sH,GAAA;AAAA,EAChCwsH;AAAA,IACE,CAAC7qH,GAAKshC,OAAS;AAAA;AAAA,MAEb,gBAAgB;AAAA,MAChB,SAAS,CAAA;AAAA,MACT,oBAAoB;AAAA,MACpB,kBAAkB;AAAA,MAClB,oBAAoB;AAAA,MACpB,oBAAoB;AAAA;AAAA,MAGpB,mBAAmB,CAAC79C,MAAS;AAC3B,QAAAuc,EAAI,EAAE,gBAAgBvc,GAAM;AAAA,MAC9B;AAAA;AAAA,MAGA,oBAAoB,CAACiC,MAAU;AAC7B,cAAM6D,IAAU+3C,IAAM;AACtB,QAAI/3C,KACFyW,EAAI;AAAA,UACF,gBAAgB,EAAE,GAAGzW,GAAS,cAAc7D,EAAA;AAAA,QAAM,CACnD;AAAA,MAEL;AAAA;AAAA,MAGA,aAAa,CAACsJ,GAAMvL,MAAS;AAS3B,cAAMwnI,IAPa,CAAC,GADN3pF,EAAA,EACe,SAAS;AAAA,UACpC,MAAAtyC;AAAA,UACA,MAAAvL;AAAA,UACA,WAAW,KAAK,IAAA;AAAA,QAAI,CACrB,EAGiC,MAAM,GAAG;AAE3C,QAAAuc,EAAI;AAAA,UACF,SAASirH;AAAA,UACT,gBAAgBxnI;AAAA,QAAA,CACjB;AAAA,MACH;AAAA;AAAA,MAGA,YAAY,MAAM;AAChB,cAAMgqC,IAAQ6T,EAAA;AACd,YAAI7T,EAAM,QAAQ,WAAW,EAAG,QAAO;AAEvC,cAAMy9F,IAAa,CAAC,GAAGz9F,EAAM,OAAO,GAC9Bqb,IAAWoiF,EAAW,IAAA,GAEtBC,IAAeD,EAAW,SAAS,IACrCA,EAAWA,EAAW,SAAS,CAAC,EAAE,OAClC;AAEJ,eAAAlrH,EAAI;AAAA,UACF,SAASkrH;AAAA,UACT,gBAAgBC;AAAA,QAAA,CACjB,GAEMriF;AAAA,MACT;AAAA;AAAA,MAGA,cAAc,MAAM;AAClB,QAAA9oC,EAAI,EAAE,SAAS,CAAA,GAAI;AAAA,MACrB;AAAA;AAAA,MAGA,WAAW,MACFshC,EAAA,EAAM,QAAQ,SAAS;AAAA;AAAA,MAIhC,gBAAgB,CAAC8pF,GAAOC,MAAe;AACrC,QAAArrH,EAAI;AAAA,UACF,oBAAoBorH;AAAA,UACpB,kBAAkBC,KAAc;AAAA,QAAA,CACjC;AAAA,MACH;AAAA;AAAA,MAGA,kBAAkB,MAAM;AACtB,QAAArrH,EAAI;AAAA,UACF,oBAAoB;AAAA,UACpB,kBAAkB;AAAA,QAAA,CACnB;AAAA,MACH;AAAA;AAAA,MAGA,uBAAuB,CAAC87B,GAAM4N,IAAO,cAAc;AACjD,QAAA1pC,EAAI;AAAA,UACF,oBAAoB87B;AAAA,UACpB,oBAAoB4N;AAAA,QAAA,CACrB;AAAA,MACH;AAAA;AAAA,MAGA,cAAc,CAACtnB,MAAQ;AACrB,QAAA0oG,GAAmB1oG,CAAG;AAAA,MACxB;AAAA;AAAA,MAGA,OAAO,MAAM;AACX,QAAApiB,EAAI;AAAA,UACF,gBAAgB;AAAA,UAChB,SAAS,CAAA;AAAA,UACT,oBAAoB;AAAA,UACpB,kBAAkB;AAAA,UAClB,oBAAoB;AAAA,UACpB,oBAAoB;AAAA,QAAA,CACrB;AAAA,MACH;AAAA,IAAA;AAAA,IAEF;AAAA,MACE,MAAM;AAAA;AAAA,MACN,SAAS8oH,GAAkB,MAAM,YAAY;AAAA;AAAA;AAAA,MAG7C,YAAY,CAACr7F,OAAW;AAAA,QACtB,gBAAgBA,EAAM;AAAA,QACtB,oBAAoBA,EAAM;AAAA,QAC1B,kBAAkBA,EAAM;AAAA;AAAA,MAAA;AAAA;AAAA,MAK1B,SAAS;AAAA;AAAA,MAGT,eAAe;AAAA,IAAA;AAAA,EACjB;AAEJ,GAGa69F,KAAuB,CAAC79F,MAA2BA,EAAM,gBAIzD89F,KAAoB,CAAC99F,MAA2BA,EAAM,oBACtD+9F,KAAyB,CAAC/9F,MAA2BA,EAAM,kBCjN3Dg+F,KAAmB,MAAM;AACpC,QAAMC,IAAqBV,GAAmBO,EAAiB,GACzDI,IAAmBX,GAAmBQ,EAAsB,GAC5DI,IAAiBZ,GAAmB,CAACv9F,MAAUA,EAAM,cAAc,GACnEo+F,IAAmBb,GAAmB,CAACv9F,MAAUA,EAAM,gBAAgB,GAEvEq+F,IAAqBd,GAAmB,CAACv9F,MAAUA,EAAM,kBAAkB,GAC3Es+F,IAAqBf,GAAmB,CAACv9F,MAAUA,EAAM,kBAAkB,GAC3Eu+F,IAAwBhB,GAAmB,CAACv9F,MAAUA,EAAM,qBAAqB;AAEvF,SAAO;AAAA,IACL,oBAAAi+F;AAAA,IACA,kBAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,uBAAAC;AAAA,EAAA;AAEJ,GCPMC,KAAsD,CAAC;AAAA,EAC3D,UAAAjmE;AAAA,EACA,YAAAo+D;AAAA,EACA,WAAA3/H,IAAY;AAAA,EACZ,MAAAoT,IAAO;AAAA,EACP,SAAArL,IAAU;AAAA,EACV,SAAAoyD;AAAA,EACA,eAAestE;AAAA,EACf,WAAWC;AAAA,EACX,UAAA3pI;AACF,MAAM;AACJ,QAAM,EAAE,MAAAkgE,EAAA,IAASxqD,GAAA,GACXqiB,IAAWC,GAAA,GACX,EAAE,gBAAAoxG,EAAA,IAAmBH,GAAA,GAErBW,IAAc,OAAO90I,MAAwB;AAIjD,QAHAA,EAAE,eAAA,GACFA,EAAE,gBAAA,GAEEsnE,GAAS;AACX,MAAAA,EAAQtnE,CAAC;AACT;AAAA,IACF;AAEA,QAAI,CAACorE,GAAM;AACT,MAAA6H,GAAM,MAAM7zD,GAAU,qCAAqC,CAAC;AAC5D;AAAA,IACF;AAGA,UAAM21H,IAAU,OAAO,SAAS;AAKhC,QAAI7uB,IAA+B;AAEnC,QAAI0uB,MAAmB;AACrB,MAAA1uB,IAAgB0uB;AAAA,SACX;AACL,YAAMI,IAAYD,EAAQ,MAAM,yBAAyB;AACzD,MAAIC,MACF9uB,IAAgB8uB,EAAU,CAAC;AAAA,IAE/B;AAEA,QAAIC,IAAgBJ,KAAqB;AAGzC,QAAI,CAACI,GAAe;AAClB,YAAMC,IAAiBH,EAAQ,MAAM,yBAAyB;AAC9D,MAAAE,IAAgBC,IAAiBA,EAAe,CAAC,IAAI;AAAA,IACvD;AAEA,UAAMlrC,IAAY;AAAA,MAChB,IAAIirC,KAAiB,YAAY,KAAK,KAAK;AAAA,MAC3C,KAAKvmE;AAAA,MACL,OAAOo+D;AAAA,MACP,UAAU;AAAA,MACV,gBAAgBmI;AAAA;AAAA,IAAA;AAGlB,IAAAX,EAAetqC,GAAW,OAAO,SAAS,QAAQ,GAGlD/mE,EAAS,WAAW;AAAA,MAClB,OAAO;AAAA,QACL,MAAM;AAAA;AAAA,QACN,eAAAijF;AAAA,MAAA;AAAA,IACF,CACD;AAAA,EACH;AAGA,SAAK96C,IAKH5/D,gBAAAA,EAAAA;AAAAA,IAAC8U;AAAAA,IAAA;AAAA,MACC,MAAAC;AAAA,MACA,SAAArL;AAAA,MACA,SAAS4/H;AAAA,MACT,WAAW,GAAG3nI,KAAA,QAAAA,EAAW,SAAS,QAC9B,sDAEF,IAAIA,CAAS;AAAA,MACf,OAAOiS,GAAU,qBAAqB;AAAA,MAEtC,UAAA;AAAA,QAAA7T,gBAAAA,EAAAA,IAACilI,IAAA,EAAM,WAAW,GAAGjwH,MAAS,OAAO,YAAY,SAAS,IAAIpT,KAAA,QAAAA,EAAW,SAAS,SAAS,KAAK,MAAM,mBAAmB;AAAA,QACxHjC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAfI;AAkBX,GC/GaiqI,KAAgB,OAAOzmE,GAAkBs6B,MAAsB;AAC1E,MAAI;AAEF,QAAIt6B,EAAS,WAAW,OAAO,GAAG;AAChC,MAAA0mE,GAAoB1mE,GAAUs6B,CAAQ;AACtC;AAAA,IACF;AAGA,UAAMl8F,IAAW,MAAM,MAAM4hE,GAAU,EAAE,MAAM,QAAQ;AACvD,QAAI,CAAC5hE,EAAS,GAAI,OAAM,IAAI,MAAM,uBAAuB;AAEzD,UAAM09D,IAAO,MAAM19D,EAAS,KAAA,GACtBg+B,IAAM,OAAO,IAAI,gBAAgB0/B,CAAI,GAGrC6qE,IAAkBrsC,KAAYssC,GAAuB5mE,CAAQ,KAAK;AAExE,IAAA6mE,GAAgBzqG,GAAKuqG,CAAe,GACpC,OAAO,IAAI,gBAAgBvqG,CAAG;AAAA,EAChC,SAASvpC,GAAO;AACd,YAAQ,MAAM,4BAA4BA,CAAK,GAE/C,OAAO,KAAKmtE,GAAU,QAAQ;AAAA,EAChC;AACF,GAKM0mE,KAAsB,CAACI,GAAiBxsC,MAAsB;AAClE,QAAMv+B,IAAO,SAAS,cAAc,GAAG;AACvC,EAAAA,EAAK,OAAO+qE,GACZ/qE,EAAK,WAAWu+B,KAAY,aAC5B,SAAS,KAAK,YAAYv+B,CAAI,GAC9BA,EAAK,MAAA,GACL,SAAS,KAAK,YAAYA,CAAI;AAChC,GAKM8qE,KAAkB,CAACzqG,GAAak+D,MAAqB;AACzD,QAAMv+B,IAAO,SAAS,cAAc,GAAG;AACvC,EAAAA,EAAK,OAAO3/B,GACZ2/B,EAAK,WAAWu+B,GAChB,SAAS,KAAK,YAAYv+B,CAAI,GAC9BA,EAAK,MAAA,GACL,SAAS,KAAK,YAAYA,CAAI;AAChC,GAKM6qE,KAAyB,CAACxqG,MAA+B;AAC7D,MAAI;AAEF,UAAM2qG,IADS,IAAI,IAAI3qG,CAAG,EACF,UAClBk+D,IAAWysC,EAAS,UAAUA,EAAS,YAAY,GAAG,IAAI,CAAC;AACjE,WAAOzsC,KAAYA,EAAS,SAAS,GAAG,IAAIA,IAAW;AAAA,EACzD,QAAQ;AACN,WAAO;AAAA,EACT;AACF,GAKa0sC,KAAmB,CAAC7qC,GAAgBphE,IAAY,UAAkB;AAC7E,QAAM8wD,KAAY,oBAAI,KAAA,GAAO,YAAA,EAAc,MAAM,GAAG,EAAE,EAAE,QAAQ,MAAM,GAAG;AAKzE,SAAO,GAJYsQ,IACfA,EAAM,QAAQ,qBAAqB,EAAE,EAAE,QAAQ,QAAQ,GAAG,EAAE,YAAA,IAC5D,OAEgB,IAAItQ,CAAS,IAAI9wD,CAAS;AAChD,GCnEMksG,KAAwBh1H,GAAqD,MAAS,GAE/Ei1H,KAAoB,MAAM;AACrC,QAAM1yI,IAAU2d,GAAW80H,EAAqB;AAChD,MAAIzyI,MAAY;AACd,UAAM,IAAI,MAAM,gEAAgE;AAElF,SAAOA;AACT,GCda2yI,KAAa,CAACC,MAAqB;AAC5C,MAAI,CAACA,EAAS,QAAO;AACrB,QAAM17D,IAAO,IAAI,KAAK07D,CAAO,GAEvBC,yBADU,KAAA,GACC,QAAA,IAAY37D,EAAK,QAAA,GAC5B9Q,IAAO,KAAK,MAAMysE,KAAQ,MAAO,KAAK,KAAK,GAAG;AAEpD,MAAIzsE,IAAO,GAAG;AACV,QAAIA,MAAS,GAAG;AACZ,YAAM0sE,IAAQ,KAAK,MAAMD,IAAQ,IAAe;AAChD,aAAIC,MAAU,IAEH,GADS,KAAK,MAAMD,IAAQ,GAAU,CAC5B,UAEd,GAAGC,CAAK;AAAA,IACnB;AACA,WAAO,GAAG1sE,CAAI;AAAA,EAClB;AACA,SAAO8Q,EAAK,mBAAmB,QAAW,EAAE,OAAO,SAAS,KAAK,WAAW;AAChF,GAMa67D,KAAmB,CAACprC,MACxBA,IAID,wEAAqE,KAAKA,CAAK,KAG/E,YAAY,KAAKA,CAAK,KACtB,+BAA+B,KAAKA,CAAK,KACzC,2BAA2B,KAAKA,CAAK,KAGrC,eAAe,KAAKA,CAAK,KACzB,iBAAiB,KAAKA,CAAK,KAbZ;ACXvB,SAAS3+D,GAAmBC,GAAWC,IAAyB,IAAI;AAClE,MAAIC,IAAkB,CAAA;AACtB,WAASC,EAAeV,GAAmBC,GAAgB;AACzD,UAAMU,IAAcpsC,EAAM,cAAc0rC,CAAc;AACtD,IAAAU,EAAY,cAAcX,IAAoB;AAC9C,UAAMx9B,IAAQi+B,EAAgB;AAC9B,IAAAA,IAAkB,CAAC,GAAGA,GAAiBR,CAAc;AACrD,UAAME,IAAW,CAAC5nC,MAAU;;AAC1B,YAAM,EAAE,OAAAqoC,GAAO,UAAAthC,GAAU,GAAGhI,EAAO,IAAKiB,GAClC2nC,MAAU39B,IAAAq+B,KAAA,gBAAAA,EAAQL,OAAR,gBAAAh+B,EAAqBC,OAAUm+B,GACzCllC,IAAQlH,EAAM,QAAQ,MAAM+C,GAAS,OAAO,OAAOA,CAAO,CAAC;AACjE,aAAuBqI,gBAAAA,EAAAA,IAAIugC,EAAQ,UAAU,EAAE,OAAAzkC,GAAO,UAAA6D,EAAQ,CAAE;AAAA,IAClE;AACA,IAAA6gC,EAAS,cAAcH,IAAoB;AAC3C,aAASI,EAAYC,GAAcO,GAAO;;AACxC,YAAMV,MAAU39B,IAAAq+B,KAAA,gBAAAA,EAAQL,OAAR,gBAAAh+B,EAAqBC,OAAUm+B,GACzCrpC,IAAU/C,EAAM,WAAW2rC,CAAO;AACxC,UAAI5oC,EAAS,QAAOA;AACpB,UAAI2oC,MAAmB,OAAQ,QAAOA;AACtC,YAAM,IAAI,MAAM,KAAKI,CAAY,4BAA4BL,CAAiB,IAAI;AAAA,IACpF;AACA,WAAO,CAACG,GAAUC,CAAW;AAAA,EAC/B;AACA,QAAMS,IAAc,MAAM;AACxB,UAAMC,IAAgBL,EAAgB,IAAI,CAACR,MAClC1rC,EAAM,cAAc0rC,CAAc,CAC1C;AACD,WAAO,SAAkBW,GAAO;AAC9B,YAAMG,KAAWH,KAAA,gBAAAA,EAAQL,OAAcO;AACvC,aAAOvsC,EAAM;AAAA,QACX,OAAO,EAAE,CAAC,UAAUgsC,CAAS,EAAE,GAAG,EAAE,GAAGK,GAAO,CAACL,CAAS,GAAGQ,EAAQ;QACnE,CAACH,GAAOG,CAAQ;AAAA,MACxB;AAAA,IACI;AAAA,EACF;AACA,SAAAF,EAAY,YAAYN,GACjB,CAACG,GAAgBM,GAAqBH,GAAa,GAAGL,CAAsB,CAAC;AACtF;AACA,SAASQ,MAAwBC,GAAQ;AACvC,QAAMC,IAAYD,EAAO,CAAC;AAC1B,MAAIA,EAAO,WAAW,EAAG,QAAOC;AAChC,QAAML,IAAc,MAAM;AACxB,UAAMM,IAAaF,EAAO,IAAI,CAACG,OAAkB;AAAA,MAC/C,UAAUA,EAAY;AAAA,MACtB,WAAWA,EAAa;AAAA,IAC9B,EAAM;AACF,WAAO,SAA2BC,GAAgB;AAChD,YAAMC,IAAaH,EAAW,OAAO,CAACI,GAAa,EAAE,UAAAC,GAAU,WAAAjB,QAAgB;AAE7E,cAAMkB,IADaD,EAASH,CAAc,EACV,UAAUd,CAAS,EAAE;AACrD,eAAO,EAAE,GAAGgB,GAAa,GAAGE,EAAY;AAAA,MAC1C,GAAG,CAAA,CAAE;AACL,aAAOltC,EAAM,QAAQ,OAAO,EAAE,CAAC,UAAU2sC,EAAU,SAAS,EAAE,GAAGI,EAAU,IAAK,CAACA,CAAU,CAAC;AAAA,IAC9F;AAAA,EACF;AACA,SAAAT,EAAY,YAAYK,EAAU,WAC3BL;AACT;ACxEA,IAAIqC,KAAQ;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAYD,GAAM,OAAO,CAACE,GAAWhlC,MAAS;AAChD,QAAM2J,IAAOZ,gBAAAA,GAAW,aAAa/I,CAAI,EAAE,GACrC8hB,IAAO3rB,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACrD,UAAM,EAAE,SAAAoN,GAAS,GAAGyuB,EAAc,IAAK9qC,GACjCsc,IAAOD,IAAU7M,IAAO3J;AAC9B,WAAI,OAAO,SAAW,QACpB,OAAO,OAAO,IAAI,UAAU,CAAC,IAAI,KAEZuB,gBAAAA,EAAAA,IAAIkV,GAAM,EAAE,GAAGwuB,GAAgB,KAAK77B,GAAc;AAAA,EAC3E,CAAC;AACD,SAAA0Y,EAAK,cAAc,aAAa9hB,CAAI,IAC7B,EAAE,GAAGglC,GAAW,CAAChlC,CAAI,GAAG8hB,EAAI;AACrC,GAAG,EAAE;;;;;;;;;;;;;;ACzBL,MAAI3rB,IAAQf;AACZ,WAAS82I,EAAGvxI,GAAGygB,GAAG;AAChB,WAAQzgB,MAAMygB,MAAYzgB,MAAN,KAAW,IAAIA,MAAM,IAAIygB,MAAQzgB,MAAMA,KAAKygB,MAAMA;AAAA,EACxE;AACA,MAAI+wH,IAA0B,OAAO,OAAO,MAA7B,aAAkC,OAAO,KAAKD,GAC3D7pI,IAAWlM,EAAM,UACjBsM,IAAYtM,EAAM,WAClBwtC,IAAkBxtC,EAAM,iBACxBi2I,IAAgBj2I,EAAM;AACxB,WAASk2I,EAAuBrnF,GAAWsnF,GAAa;AACtD,QAAIjvI,IAAQivI,EAAW,GACrBC,IAAYlqI,EAAS,EAAE,MAAM,EAAE,OAAOhF,GAAO,aAAaivI,EAAW,GAAI,GACzEv0F,IAAOw0F,EAAU,CAAC,EAAE,MACpBvsE,IAAcusE,EAAU,CAAC;AAC3B,WAAA5oG;AAAA,MACE,WAAY;AACV,QAAAoU,EAAK,QAAQ16C,GACb06C,EAAK,cAAcu0F,GACnBE,EAAuBz0F,CAAI,KAAKioB,EAAY,EAAE,MAAMjoB,EAAI,CAAE;AAAA,MAChE;AAAA,MACI,CAACiN,GAAW3nD,GAAOivI,CAAW;AAAA,IAClC,GACE7pI;AAAA,MACE,WAAY;AACV,eAAA+pI,EAAuBz0F,CAAI,KAAKioB,EAAY,EAAE,MAAMjoB,EAAI,CAAE,GACnDiN,EAAU,WAAY;AAC3B,UAAAwnF,EAAuBz0F,CAAI,KAAKioB,EAAY,EAAE,MAAMjoB,EAAI,CAAE;AAAA,QAClE,CAAO;AAAA,MACP;AAAA,MACI,CAACiN,CAAS;AAAA,IACd,GACEonF,EAAc/uI,CAAK,GACZA;AAAA,EACT;AACA,WAASmvI,EAAuBz0F,GAAM;AACpC,QAAI00F,IAAoB10F,EAAK;AAC7B,IAAAA,IAAOA,EAAK;AACZ,QAAI;AACF,UAAIrT,IAAY+nG,EAAiB;AACjC,aAAO,CAACN,EAASp0F,GAAMrT,CAAS;AAAA,IACpC,QAAkB;AACd,aAAO;AAAA,IACX;AAAA,EACA;AACA,WAASgoG,EAAuB1nF,GAAWsnF,GAAa;AACtD,WAAOA,EAAW;AAAA,EACpB;AACA,MAAIK,IACc,OAAO,SAAvB,OACgB,OAAO,OAAO,WAA9B,OACgB,OAAO,OAAO,SAAS,gBAAvC,MACID,IACAL;AACN,SAAAO,GAAA,uBACaz2I,EAAM,yBAAjB,SAAwCA,EAAM,uBAAuBw2I;;;;;;;;;;;;;;wBCtDtD,QAAQ,IAAI,aAA7B,gBACG,WAAY;AACX,aAAST,EAAGvxI,GAAGygB,GAAG;AAChB,aAAQzgB,MAAMygB,MAAYzgB,MAAN,KAAW,IAAIA,MAAM,IAAIygB,MAAQzgB,MAAMA,KAAKygB,MAAMA;AAAA,IAC5E;AACI,aAASixH,EAAuBrnF,GAAWsnF,GAAa;AACtD,MAAAO,KACa12I,EAAM,oBAAjB,WACE02I,IAAoB,IACtB,QAAQ;AAAA,QACN;AAAA,MACV;AACM,UAAIxvI,IAAQivI,EAAW;AACvB,UAAI,CAACQ,GAA4B;AAC/B,YAAIC,IAAcT,EAAW;AAC7B,QAAAH,EAAS9uI,GAAO0vI,CAAW,MACxB,QAAQ;AAAA,UACP;AAAA,WAEDD,IAA6B;AAAA,MACxC;AACM,MAAAC,IAAc1qI,EAAS;AAAA,QACrB,MAAM,EAAE,OAAOhF,GAAO,aAAaivI,EAAW;AAAA,MACtD,CAAO;AACD,UAAIv0F,IAAOg1F,EAAY,CAAC,EAAE,MACxB/sE,IAAc+sE,EAAY,CAAC;AAC7B,aAAAppG;AAAA,QACE,WAAY;AACV,UAAAoU,EAAK,QAAQ16C,GACb06C,EAAK,cAAcu0F,GACnBE,EAAuBz0F,CAAI,KAAKioB,EAAY,EAAE,MAAMjoB,EAAI,CAAE;AAAA,QACpE;AAAA,QACQ,CAACiN,GAAW3nD,GAAOivI,CAAW;AAAA,MACtC,GACM7pI;AAAA,QACE,WAAY;AACV,iBAAA+pI,EAAuBz0F,CAAI,KAAKioB,EAAY,EAAE,MAAMjoB,EAAI,CAAE,GACnDiN,EAAU,WAAY;AAC3B,YAAAwnF,EAAuBz0F,CAAI,KAAKioB,EAAY,EAAE,MAAMjoB,EAAI,CAAE;AAAA,UACtE,CAAW;AAAA,QACX;AAAA,QACQ,CAACiN,CAAS;AAAA,MAClB,GACMonF,EAAc/uI,CAAK,GACZA;AAAA,IACb;AACI,aAASmvI,EAAuBz0F,GAAM;AACpC,UAAI00F,IAAoB10F,EAAK;AAC7B,MAAAA,IAAOA,EAAK;AACZ,UAAI;AACF,YAAIrT,IAAY+nG,EAAiB;AACjC,eAAO,CAACN,EAASp0F,GAAMrT,CAAS;AAAA,MACxC,QAAsB;AACd,eAAO;AAAA,MACf;AAAA,IACA;AACI,aAASgoG,EAAuB1nF,GAAWsnF,GAAa;AACtD,aAAOA,EAAW;AAAA,IACxB;AACI,IAAgB,OAAO,iCAAvB,OAEI,OAAO,+BAA+B,+BADxC,cAEA,+BAA+B,4BAA4B,OAAO;AACpE,QAAIn2I,IAAQf,IACV+2I,IAA0B,OAAO,OAAO,MAA7B,aAAkC,OAAO,KAAKD,GACzD7pI,IAAWlM,EAAM,UACjBsM,IAAYtM,EAAM,WAClBwtC,IAAkBxtC,EAAM,iBACxBi2I,IAAgBj2I,EAAM,eACtB02I,IAAoB,IACpBC,IAA6B,IAC7BH,IACkB,OAAO,SAAvB,OACgB,OAAO,OAAO,WAA9B,OACgB,OAAO,OAAO,SAAS,gBAAvC,MACID,IACAL;AACR,IAAAW,GAAA,uBACa72I,EAAM,yBAAjB,SAAwCA,EAAM,uBAAuBw2I,GACvD,OAAO,iCAAvB,OAEI,OAAO,+BAA+B,8BADxC,cAEA,+BAA+B,2BAA2B,OAAO;AAAA,EACvE,EAAG;;AC5FC,QAAQ,IAAI,aAAa,eAC3BM,GAAA,UAAiB73I,GAAA,IAEjB63I,GAAA,UAAiBtrI,GAAA;;ACHnB,SAASurI,KAAgB;AACvB,SAAOC,GAAAA;AAAAA,IACLnoF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACV;AACA;AACA,SAASA,KAAY;AACnB,SAAO,MAAM;AAAA,EACb;AACF;ACFA,IAAIooF,KAAc,UACd,CAACC,EAAsC,IAAInrG,GAAmBkrG,EAAW,GACzE,CAACE,IAAgBC,EAAgB,IAAIF,GAAoBD,EAAW,GACpEI,KAASr3I,EAAM;AAAA,EACjB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,eAAAqkI,GAAe,GAAGC,EAAW,IAAKvzI,GACpC,CAACwzI,GAAoBC,CAAqB,IAAIz3I,EAAM,SAAS,MAAM;AACzE,WAAuBoL,gBAAAA,EAAAA;AAAAA,MACrB+rI;AAAA,MACA;AAAA,QACE,OAAOG;AAAA,QACP,oBAAAE;AAAA,QACA,4BAA4BC;AAAA,QAC5B,UAA0BrsI,gBAAAA,EAAAA,IAAIwjC,GAAU,MAAM,EAAE,GAAG2oG,GAAa,KAAKtkI,EAAY,CAAE;AAAA,MAC3F;AAAA,IACA;AAAA,EACE;AACF;AACAokI,GAAO,cAAcJ;AACrB,IAAIS,KAAa,eACbC,KAAc33I,EAAM;AAAA,EACtB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,eAAAqkI,GAAe,KAAA3rI,GAAK,uBAAAisI,IAAwB,MAAM;AAAA,IAC1D,GAAG,GAAGC,EAAU,IAAK7zI,GACfjB,IAAUq0I,GAAiBM,IAAYJ,CAAa,GACpDE,IAAqBM,GAAsBnsI,GAAKksI,CAAU,GAC1DE,IAA4B9oG,GAAe,CAACzY,MAAW;AAC3D,MAAAohH,EAAsBphH,CAAM,GAC5BzzB,EAAQ,2BAA2ByzB,CAAM;AAAA,IAC3C,CAAC;AACDgX,WAAAA,GAAgB,MAAM;AACpB,MAAIgqG,MAAuB,UACzBO,EAA0BP,CAAkB;AAAA,IAEhD,GAAG,CAACA,GAAoBO,CAAyB,CAAC,GAC3CP,MAAuB,WAA2BpsI,gBAAAA,EAAAA,IAAIwjC,GAAU,KAAK,EAAE,GAAGipG,GAAY,KAAK5kI,GAAc,KAAAtH,EAAG,CAAE,IAAI;AAAA,EAC3H;AACF;AACAgsI,GAAY,cAAcD;AAC1B,IAAIM,KAAgB,kBAChBC,KAAiBj4I,EAAM;AAAA,EACzB,CAACgE,GAAOiP,MAAiB;AACvB,UAAM,EAAE,eAAAqkI,GAAe,SAAAY,GAAS,GAAGC,EAAa,IAAKn0I,GAC/CjB,IAAUq0I,GAAiBY,IAAeV,CAAa,GACvD,CAACc,GAAWC,CAAY,IAAIr4I,EAAM,SAASk4I,MAAY,MAAM;AACnE,WAAAl4I,EAAM,UAAU,MAAM;AACpB,UAAIk4I,MAAY,QAAQ;AACtB,cAAMnmG,IAAU,OAAO,WAAW,MAAMsmG,EAAa,EAAI,GAAGH,CAAO;AACnE,eAAO,MAAM,OAAO,aAAanmG,CAAO;AAAA,MAC1C;AAAA,IACF,GAAG,CAACmmG,CAAO,CAAC,GACLE,KAAar1I,EAAQ,uBAAuB,WAA2BqI,gBAAAA,EAAAA,IAAIwjC,GAAU,MAAM,EAAE,GAAGupG,GAAe,KAAKllI,EAAY,CAAE,IAAI;AAAA,EAC/I;AACF;AACAglI,GAAe,cAAcD;AAC7B,SAASM,GAAqB3E,GAAOhoI,GAAK;AACxC,SAAKgoI,IAGAhoI,KAGDgoI,EAAM,QAAQhoI,MAChBgoI,EAAM,MAAMhoI,IAEPgoI,EAAM,YAAYA,EAAM,eAAe,IAAI,WAAW,aALpD,UAHA;AASX;AACA,SAASmE,GAAsBnsI,GAAK,EAAE,gBAAA4sI,GAAgB,aAAAC,EAAW,GAAI;AACnE,QAAMC,IAAa1B,GAAa,GAC1B2B,IAAW14I,EAAM,OAAO,IAAI,GAC5B2zI,IACC8E,KACAC,EAAS,YACZA,EAAS,UAAU,IAAI,OAAO,MAAK,IAE9BA,EAAS,WAJQ,MAMpB,CAACC,GAAeC,CAAgB,IAAI54I,EAAM;AAAA,IAC9C,MAAMs4I,GAAqB3E,GAAOhoI,CAAG;AAAA,EACzC;AACE6hC,SAAAA,GAAgB,MAAM;AACpB,IAAAorG,EAAiBN,GAAqB3E,GAAOhoI,CAAG,CAAC;AAAA,EACnD,GAAG,CAACgoI,GAAOhoI,CAAG,CAAC,GACf6hC,GAAgB,MAAM;AACpB,UAAMqrG,IAAe,CAACriH,MAAW,MAAM;AACrC,MAAAoiH,EAAiBpiH,CAAM;AAAA,IACzB;AACA,QAAI,CAACm9G,EAAO;AACZ,UAAMmF,IAAaD,EAAa,QAAQ,GAClCE,IAAcF,EAAa,OAAO;AACxC,WAAAlF,EAAM,iBAAiB,QAAQmF,CAAU,GACzCnF,EAAM,iBAAiB,SAASoF,CAAW,GACvCR,MACF5E,EAAM,iBAAiB4E,IAErB,OAAOC,KAAgB,aACzB7E,EAAM,cAAc6E,IAEf,MAAM;AACX,MAAA7E,EAAM,oBAAoB,QAAQmF,CAAU,GAC5CnF,EAAM,oBAAoB,SAASoF,CAAW;AAAA,IAChD;AAAA,EACF,GAAG,CAACpF,GAAO6E,GAAaD,CAAc,CAAC,GAChCI;AACT;AACA,IAAIlxF,KAAO4vF,IACP2B,KAAQrB,IACRsB,KAAWhB;AChHf,MAAMZ,KAASr3I,EAAM,WAGnB,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA;AAAAA,EAAC8tI;AAAAA,EAAA;AAAA,IACC,KAAA3wI;AAAA,IACA,WAAWyX,GAAG,iEAAiEhT,CAAS;AAAA,IACvF,GAAGhJ;AAAA,EAAA;AACN,CACD;AACDqzI,GAAO,cAAc6B,GAAqB;AAE1C,MAAMvB,KAAc33I,EAAM,WAGxB,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA,IAAC+tI,IAAA,EAAsB,KAAA5wI,GAAU,WAAWyX,GAAG,+BAA+BhT,CAAS,GAAI,GAAGhJ,EAAA,CAAO,CACtG;AACD2zI,GAAY,cAAcwB,GAAsB;AAEhD,MAAMlB,KAAiBj4I,EAAM,WAG3B,CAAC,EAAE,WAAAgN,GAAW,GAAGhJ,EAAA,GAASuE,MAC1B6C,gBAAAA,EAAAA;AAAAA,EAACguI;AAAAA,EAAA;AAAA,IACC,KAAA7wI;AAAA,IACA,WAAWyX,GAAG,wEAAwEhT,CAAS;AAAA,IAC9F,GAAGhJ;AAAA,EAAA;AACN,CACD;AACDi0I,GAAe,cAAcmB,GAAyB;ACxBtD,MAAMC,KAAkB74H,GAA+C,MAAS,GAiEnE84H,KAAc,MAAM;AAC7B,QAAMv2I,IAAU2d,GAAW24H,EAAe;AAC1C,MAAIt2I,MAAY;AACZ,UAAM,IAAI,MAAM,oDAAoD;AAExE,SAAOA;AACX,GChEMw2I,KAAkD,CAAC;AAAA,EACrD,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAA92I;AAAA,EACA,WAAA+2I;AAAA,EACA,WAAA1sI,IAAY;AAAA,EACZ,UAAA2sI,IAAW;AAAA,EACX,SAAAxyE;AAAA,EACA,YAAAyyE,IAAa;AAAA,EACb,UAAAC,IAAW;AACf,MAAM;AACe,EAAA92G,GAAA;AACjB,QAAM,EAAE,UAAA+2G,GAAU,cAAAC,EAAA,IAAiBT,GAAA,GAG7BU,IAAUF,EAASN,CAAM,GACzBS,IAAqBR,MAAaO,KAAA,gBAAAA,EAAS,aAG3CE,IAAuBv3I,MAAeq3I,KAAA,gBAAAA,EAAS,iBAAgB,QAAQR,EAAO,MAAM,GAAG,CAAC,CAAC;AAE/F,EAAAltI,GAAU,MAAM;AAEZ,IAAK0tI,KACDD,EAAaP,CAAM;AAAA,EAE3B,GAAG,CAACA,GAAQQ,GAASD,CAAY,CAAC;AAElC,QAAMpF,IAAc,CAAC90I,MAAwB;AACzC,QAAIsnE,GAAS;AACT,MAAAA,EAAQtnE,CAAC;AACT;AAAA,IACJ;AACA,IAAAA,EAAE,gBAAA,GACF,OAAO,SAAS,OAAO,SAAS25I,CAAM;AAAA,EAC1C,GAEMW,IAAYP,IACZ,mBAAmBC,CAAQ,gDAC3B,sCAAsCA,CAAQ,IAE9CO,IAAYR,IACZ,0BACA;AAEN,SACIvuI,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,+BAA8B,SAASspI,GAClD,UAAA;AAAA,IAAAtpI,gBAAAA,EAAAA,KAACgsI,IAAA,EAAO,WAAW,GAAGrqI,CAAS,sEAC3B,UAAA;AAAA,MAAA5B,gBAAAA,EAAAA,IAACusI,IAAA,EAAY,KAAKsC,KAAsB,QAAW,KAAKC,KAAwB,UAAU,WAAU,eAAA,CAAe;AAAA,MACnH9uI,gBAAAA,EAAAA,IAAC6sI,MAAe,WAAU,8DACtB,gCAACoC,IAAA,EAAS,WAAU,eAAc,EAAA,CACtC;AAAA,IAAA,GACJ;AAAA,IACAhvI,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,yBACX,UAAA;AAAA,MAAAD,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAW+uI,GACZ,UAAAD,GACL;AAAA,MACCP,KAAYD,KACTtuI,gBAAAA,MAAC,QAAA,EAAK,WAAWgvI,GACZ,UAAA,IAAI,KAAKV,CAAS,EAAE,mBAAA,EAAmB,CAC5C;AAAA,IAAA,EAAA,CAER;AAAA,EAAA,GACJ;AAER,GCzCMY,KAAY,CAAC;AAAA,EACjB,WAAAhsE;AAAA,EACA,OAAAqlE;AAAA,EACA,OAAAjpC;AAAA,EACA,QAAA6vC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,aAAA/iH;AAAA,EACA,SAAAuvC;AAAA,EACA,QAAAyzE;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAArB;AAAA,EACA,iBAAAsB;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,YAAAC;AAAA,EACA,SAAAnmI,IAAU;AAAA,EACV,QAAAhJ;AACF,MAAsB;AACpB,QAAM,EAAE,MAAAk/D,EAAA,IAASxqD,GAAA,GACXqiB,IAAWC,GAAA,GACX,EAAE,gBAAAo4G,GAAgB,mBAAAC,GAAmB,cAAAC,EAAA,IAAiB5F,GAAA,GACtD,CAAC6F,GAAcC,CAAe,IAAIrvI,GAASyuI,CAAO,GAClD,CAACa,GAAYC,CAAa,IAAIvvI,GAASuuI,CAAK,GAC5C,CAACiB,GAAeC,CAAgB,IAAIzvI,GAAS,EAAK,GAClD,CAACqmE,GAAYC,CAAa,IAAItmE,GAAS,EAAK,GAC5C,CAAC0vI,GAAcC,CAAe,IAAI3vI,GAAS,EAAK,GAChD,CAAC0/F,GAAcC,CAAe,IAAI3/F,GAAS,EAAK,GAChD,CAAC45G,IAAcg2B,EAAe,IAAI5vI,GAAS,EAAK,GAChD,CAAC6gI,IAAmBgP,EAAoB,IAAI7vI,GAAwB,IAAI,GACxE,CAAC8vI,IAAcC,EAAe,IAAI/vI,GAAiB,CAAC,GAEpDgwI,MAAUjxE,KAAA,gBAAAA,EAAM,QAAOuvE;AAG7B,EAAAluI,GAAU,MAAM;AAkCd,KAjC0B,YAAY;AACpC,UAAI,GAAC4vI,MAAW,CAACjxE;AAEjB,YAAI;AAEF,gBAAM,EAAE,MAAMyH,GAAA,IAAmB,MAAMtkE,GACpC,KAAK,UAAU,EACf,OAAO,WAAW,EAClB,GAAG,MAAMkgE,CAAS,EAClB,OAAA;AAEH,cAAI,CAACoE,GAAgB;AAErB,cAAIpjE,KAAQlB,GACT,KAAK,UAAU,EACf,OAAO,MAAM,EAAE,OAAO,SAAS,MAAM,GAAA,CAAM;AAE9C,UAAIskE,GAAe,YAEjBpjE,KAAQA,GAAM,GAAG,gBAAgBojE,GAAe,SAAS,UAAUA,GAAe,SAAS,EAAE,IAG7FpjE,KAAQA,GAAM,GAAG,gBAAgBg/D,CAAS,UAAUA,CAAS,EAAE;AAGjE,gBAAM,EAAE,OAAA1mC,EAAA,IAAU,MAAMt4B;AAExB,UAAA2sI,GAAgBr0G,KAAS,CAAC;AAAA,QAC5B,SAASxmC,IAAO;AACd,kBAAQ,MAAM,iCAAiCA,EAAK;AAAA,QACtD;AAAA,IACF,GAEA;AAAA,EACF,GAAG,CAACktE,GAAW4tE,IAASjxE,CAAI,CAAC;AAE7B,QAAMkxE,KAAa,OAAOt8I,OAAwB;AAGhD,QAFAA,GAAE,gBAAA,GAEE,CAACorE,GAAM;AACT,MAAA6H,GAAM,MAAM7zD,GAAU,iCAAiC,CAAC;AACxD;AAAA,IACF;AAEA,QAAI;AACF,UAAIq8H,GAAc;AAEhB,cAAM,EAAE,OAAAl6I,GAAA,IAAU,MAAMgN,GACrB,KAAK,OAAO,EACZ,OAAA,EACA,GAAG,WAAW68D,EAAK,EAAE,EACrB,GAAG,cAAcqD,CAAS;AAE7B,YAAIltE,GAAO,OAAMA;AACjB,QAAAm6I,EAAgB,EAAK,GACrBE,EAAc,CAAAzuE,OAAQA,KAAO,CAAC;AAAA,MAChC,OAAO;AAEL,cAAM,EAAE,OAAA5rE,GAAA,IAAU,MAAMgN,GACrB,KAAK,OAAO,EACZ,OAAO,CAAC,EAAE,SAAS68D,EAAK,IAAI,YAAYqD,EAAA,CAAW,CAAC;AAEvD,YAAIltE,GAAO,OAAMA;AACjB,QAAAm6I,EAAgB,EAAI,GACpBE,EAAc,CAAAzuE,OAAQA,KAAO,CAAC;AAAA,MAChC;AAEA,MAAA4tE,KAAA,QAAAA;AAAA,IACF,SAASx5I,IAAO;AACd,cAAQ,MAAM,wBAAwBA,EAAK,GAC3C0xE,GAAM,MAAM7zD,GAAU,uBAAuB,CAAC;AAAA,IAChD;AAAA,EACF,GACMm9H,KAAe,OAAOv8I,OAAwB;AAGlD,QAFAA,GAAE,gBAAA,GAEE,CAACorE,KAAQ,CAACixE,IAAS;AACrB,MAAAppE,GAAM,MAAM7zD,GAAU,qCAAqC,CAAC;AAC5D;AAAA,IACF;AAEA,QAAK,QAAQA,GAAU,2EAA2E,CAAC,GAInG;AAAA,MAAAuzD,EAAc,EAAI;AAClB,UAAI;AAEF,cAAM,EAAE,MAAMjF,IAAS,OAAO8uE,GAAA,IAAe,MAAMjuI,GAChD,KAAK,UAAU,EACf,OAAO,WAAW,EAClB,GAAG,MAAMkgE,CAAS,EAClB,OAAA;AAEH,YAAI+tE,GAAY,OAAMA;AAGtB,cAAM,EAAE,OAAOC,EAAA,IAAgB,MAAMluI,GAClC,KAAK,UAAU,EACf,OAAA,EACA,GAAG,MAAMkgE,CAAS;AAErB,YAAIguE,EAAa,OAAMA;AAGvB,YAAI/uE,MAAA,QAAAA,GAAS,WAAW;AACtB,gBAAMuG,IAAWvG,GAAQ,UAAU,MAAM,GAAG,GACtCwG,IAAWD,EAASA,EAAS,SAAS,CAAC,GACvCyoE,KAAgBzoE,EAASA,EAAS,SAAS,CAAC,GAE5C,EAAE,OAAO0oE,EAAA,IAAiB,MAAMpuI,GAAS,QAC5C,KAAK,UAAU,EACf,OAAO,CAAC,GAAGmuI,EAAa,IAAIxoE,CAAQ,EAAE,CAAC;AAE1C,UAAIyoE,KACF,QAAQ,MAAM,gCAAgCA,CAAY;AAAA,QAG9D;AAEA,QAAA1pE,GAAM,QAAQ7zD,GAAU,4BAA4B,CAAC,GACrD47H,KAAA,QAAAA;AAAA,MACF,SAASz5I,IAAO;AACd,gBAAQ,MAAM,yBAAyBA,EAAK,GAC5C0xE,GAAM,MAAM7zD,GAAU,wBAAwB,CAAC;AAAA,MACjD,UAAA;AACE,QAAAuzD,EAAc,EAAK;AAAA,MACrB;AAAA;AAAA,EACF,GAEMiqE,KAAiB,YAAY;AACjC,QAAI;AACF,YAAM5zC,KAAW0sC,GAAiB7qC,CAAK;AACvC,YAAMsqC,GAAcrB,GAAO9qC,EAAQ,GACnC/1B,GAAM,QAAQ7zD,GAAU,+BAA+B,CAAC;AAAA,IAC1D,SAAS7d,IAAO;AACd,cAAQ,MAAM,4BAA4BA,EAAK,GAC/C0xE,GAAM,MAAM7zD,GAAU,0BAA0B,CAAC;AAAA,IACnD;AAAA,EACF,GAEMy9H,KAAqB,MAAM;AAE/B,QAAIvB,GAAgB;AAClB,YAAM35E,KAAe25E,EAAe,MAAM,UAAU,CAAA77I,OAAKA,GAAE,OAAOgvE,CAAS;AAC3E,MAAI9M,OAAiB,MACnB45E,EAAkB;AAAA,QAChB,GAAGD;AAAA,QACH,cAAA35E;AAAA,MAAA,CACD;AAAA,IAEL;AACA,IAAAq6E,EAAgB,EAAI;AAAA,EACtB,GAEMc,KAAiB,CAACp+F,OAA+B;AACrD,QAAI,CAAC48F,KAAkB,CAACA,EAAe,MAAM,QAAQ;AACnD,MAAAroE,GAAM,MAAM7zD,GAAU,8BAA8B,CAAC;AACrD;AAAA,IACF;AAEA,UAAM29H,KAAWr+F,OAAc,SAC3B48F,EAAe,eAAe,IAC9BA,EAAe,eAAe;AAElC,QAAIyB,MAAY,KAAKA,KAAWzB,EAAe,MAAM,QAAQ;AAC3D,YAAM0B,KAAU1B,EAAe,MAAMyB,EAAQ;AAC7C,MAAAxB,EAAkB;AAAA,QAChB,GAAGD;AAAA,QACH,cAAcyB;AAAA,MAAA,CACf,GAGD95G,EAAS,SAAS+5G,GAAQ,EAAE,EAAE;AAAA,IAChC;AACE,MAAA/pE,GAAM,KAAK7zD,GAAUs/B,OAAc,SAAS,2BAA2B,4BAA4B,CAAC;AAAA,EAExG,GAEMu+F,KAAgB,CAACv+F,OAA+B;AACpD,QAAI,CAAC48F,EAAgB;AAErB,UAAM4B,KAAcx+F,OAAc,SAC9B48F,EAAe,eAAe,IAC9BA,EAAe,eAAe;AAElC,QAAI4B,MAAe,KAAKA,KAAc5B,EAAe,MAAM,QAAQ;AACjE,YAAM6B,KAAa7B,EAAe,MAAM4B,EAAW;AACnD,MAAA1B,EAAa2B,GAAW,SAAS;AAAA,IACnC;AAAA,EACF,GAEMrN,KAAqB,OAAO1mC,OAAmB;AACnD,QAAI,CAACA,GAAO,QAAQ;AAClB,MAAAn2B,GAAM,MAAM7zD,GAAU,uBAAuB,CAAC;AAC9C;AAAA,IACF;AAEA,IAAA4sF,EAAgB,EAAI;AACpB,QAAI;AAGF,YAAMxhC,KAAO,OADI,MAAM,MAAMspE,CAAK,GACN,KAAA,GACtBh/C,IAAO,IAAI,KAAK,CAACtqB,EAAI,GAAGqgC,KAAS,aAAa;AAAA,QAClD,MAAMrgC,GAAK,QAAQ;AAAA,MAAA,CACpB,GAEKx9D,IAAS,MAAMm8F,GAAUC,IAAQ,CAACtU,CAAI,CAAC;AAE7C,UAAI9nF,GAAQ;AAEV,cAAMowI,IAAa,IAAI,WAAWpwI,EAAO,SAAS,GAC5CqwI,KAAY,IAAI,KAAK,CAACD,CAAU,GAAG,EAAE,MAAM,aAAa,GACxDtkE,IAAS,IAAI,WAAA;AAEnB,QAAAA,EAAO,SAAS,MAAM;AACpB,gBAAMwkE,IAAUxkE,EAAO;AACvB,UAAAojE,GAAqBoB,CAAO,GAC5BrqE,GAAM,QAAQ7zD,GAAU,+BAA+B,CAAC;AAAA,QAC1D,GAEA05D,EAAO,cAAcukE,EAAS;AAAA,MAChC;AAAA,IACF,SAAS97I,IAAO;AACd,cAAQ,MAAM,2BAA2BA,EAAK,GAC9C0xE,GAAM,MAAM7zD,GAAU,6DAA6D,CAAC;AAAA,IACtF,UAAA;AACE,MAAA4sF,EAAgB,EAAK;AAAA,IACvB;AAAA,EACF,GAEMgkC,KAAgB,OAAOj3G,IAA6B21C,IAAkB6uE,IAAkBxlH,MAAyB;AACrH,QAAI,CAACqzC,GAAM;AACT,MAAA6H,GAAM,MAAM7zD,GAAU,kCAAkC,CAAC;AACzD;AAAA,IACF;AAEA,IAAA68H,GAAgB,EAAI;AACpB,QAAI;AAGF,YAAMzxE,IAAO,OADI,MAAM,MAAMkE,EAAQ,GACT,KAAA;AAE5B,UAAI31C,OAAW,aAAa;AAG1B,cAAMykH,KAAkB1J;AACxB,YAAI0J,GAAgB,SAAS,sBAAsB,GAAG;AACpD,gBAAMvpE,IAAWupE,GAAgB,MAAM,GAAG,GACpCtpE,IAAWD,EAASA,EAAS,SAAS,CAAC,GACvCE,KAAa,GAAGwmE,CAAQ,IAAIzmE,CAAQ,IAGpC,EAAE,OAAOupE,GAAA,IAAgB,MAAMlvI,GAAS,QAC3C,KAAK,UAAU,EACf,OAAO4lE,IAAY3J,GAAM;AAAA,YACxB,cAAc;AAAA;AAAA,YACd,QAAQ;AAAA,UAAA,CACT;AAEH,cAAIizE,GAAa,OAAMA;AAEvB,UAAAxqE,GAAM,QAAQ7zD,GAAU,6BAA6B,CAAC;AAAA,QACxD,OAAO;AACL,UAAA6zD,GAAM,MAAM7zD,GAAU,6BAA6B,CAAC;AACpD;AAAA,QACF;AAAA,MACF,OAAO;AAEL,cAAM80D,KAAW,GAAG9I,EAAK,EAAE,IAAI,KAAK,KAAK,kBACnC,EAAE,MAAMsyE,GAAY,OAAOD,MAAgB,MAAMlvI,GAAS,QAC7D,KAAK,UAAU,EACf,OAAO2lE,IAAU1J,CAAI;AAExB,YAAIizE,EAAa,OAAMA;AAGvB,cAAM,EAAE,MAAM,EAAE,WAAAE,GAAA,MAAgBpvI,GAAS,QACtC,KAAK,UAAU,EACf,aAAa2lE,EAAQ,GAGlB,EAAE,OAAOE,OAAY,MAAM7lE,GAC9B,KAAK,UAAU,EACf,OAAO,CAAC;AAAA,UACP,OAAOgvI;AAAA,UACP,aAAaxlH,KAAe3Y,GAAU,gBAAgB,IAAI,KAAKyrF,CAAK;AAAA,UACpE,WAAW8yC;AAAA,UACX,SAASvyE,EAAK;AAAA,QAAA,CACf,CAAC;AAEJ,YAAIgJ,GAAS,OAAMA;AAEnB,QAAAnB,GAAM,QAAQ7zD,GAAU,6BAA6B,CAAC;AAAA,MACxD;AAEA,MAAA48H,EAAgB,EAAK,GACrBE,GAAqB,IAAI,GAGzBnB,KAAA,QAAAA;AAAA,IACF,SAASx5I,GAAO;AACd,cAAQ,MAAM,2BAA2BA,CAAK,GAC9C0xE,GAAM,MAAM7zD,GAAU,yBAAyB,CAAC;AAAA,IAClD,UAAA;AACE,MAAA68H,GAAgB,EAAK;AAAA,IACvB;AAAA,EACF,GAEMnH,KAAc,CAAC90I,OAAwB;AAC3C,IAAAA,GAAE,eAAA,GACFA,GAAE,gBAAA,GACFsnE,KAAA,QAAAA,EAAUmH;AAAA,EACZ,GAEMmvE,KAAkB,CAAC59I,OAAwB;AAC/C,IAAIi7I,IACF4B,GAAA,IAEA/H,GAAY90I,EAAC;AAAA,EAEjB;AAEA,SACEwL,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAU;AAAA,MACV,SAASoyI;AAAA,MAGT,UAAA;AAAA,QAAAryI,gBAAAA,EAAAA,IAAC,SAAI,WAAW,GAAG2J,MAAY,SAAS,kBAAkB,EAAE,oBAC1D,UAAA3J,gBAAAA,EAAAA;AAAAA,UAAC0B;AAAA,UAAA;AAAA,YACC,KAAK6mI;AAAA,YACL,KAAKjpC;AAAA,YACL,WAAU;AAAA,YACV,cAAa;AAAA,YACb,OAAO31F,MAAY,SACf,6DACA;AAAA,YAEJ,iBAAiBA,MAAY,SAAS,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,MAAM,MAAM,IAAI;AAAA,YACrF,MAAMmmI;AAAA,YACN,QAAAnvI;AAAA,UAAA;AAAA,QAAA,GAEJ;AAAA,QAGCkvI,KAAelmI,MAAY,UAC1B3J,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,wLACb,UAAAC,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,4DACb,UAAA;AAAA,UAAAA,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,YAAAD,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,+BACb,UAAAA,gBAAAA,EAAAA;AAAAA,cAACmuI;AAAA,cAAA;AAAA,gBACC,QAAQiB;AAAA,gBACR,WAAWQ;AAAA,gBACX,aAAaT;AAAA,gBACb,YAAY;AAAA,gBACZ,UAAU;AAAA,cAAA;AAAA,YAAA,GAEd;AAAA,YACAlvI,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,cAAAD,gBAAAA,EAAAA;AAAAA,gBAAC+U;AAAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,SAASg8H;AAAA,kBACT,WAAW,eAAeb,IAAe,iBAAiB,+BACxD;AAAA,kBAEF,gCAACoC,IAAA,EAAM,WAAU,WAAU,MAAMpC,IAAe,iBAAiB,OAAA,CAAQ;AAAA,gBAAA;AAAA,cAAA;AAAA,cAE1EE,IAAa,KAAKpwI,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,sBAAsB,UAAAowI,GAAW;AAAA,cAEpEpwI,gBAAAA,EAAAA;AAAAA,gBAAC+U;AAAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,WAAU;AAAA,kBAEV,UAAA/U,gBAAAA,EAAAA,IAACuyI,IAAA,EAAc,WAAU,UAAA,CAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,cAErCvyI,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,sBAAsB,UAAAsvI,GAAS;AAAA,cAE9CwB,MACC7wI,gBAAAA,EAAAA,KAAA+6C,YAAA,EACE,UAAA;AAAA,gBAAAh7C,gBAAAA,EAAAA;AAAAA,kBAAC+U;AAAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAQ;AAAA,oBACR,SAAS,CAACtgB,OAAM;AACd,sBAAAA,GAAE,gBAAA,GACEk7I,IACFA,EAAOzsE,CAAS,IAEhBqtE,EAAiB,EAAI;AAAA,oBAEzB;AAAA,oBACA,WAAU;AAAA,oBAEV,UAAAvwI,gBAAAA,EAAAA,IAACiiG,IAAA,EAAM,WAAU,UAAA,CAAU;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAG7BjiG,gBAAAA,EAAAA;AAAAA,kBAAC+U;AAAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAQ;AAAA,oBACR,SAASi8H;AAAA,oBACT,UAAU7pE;AAAA,oBACV,WAAU;AAAA,oBAEV,UAAAnnE,gBAAAA,EAAAA,IAACkpE,IAAA,EAAO,WAAU,UAAA,CAAU;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAG7B0nE,KAAe,KACd3wI,gBAAAA,OAAC,OAAA,EAAI,WAAU,2EACb,UAAA;AAAA,kBAAAD,gBAAAA,EAAAA,IAACwyI,IAAA,EAAO,WAAU,eAAA,CAAe;AAAA,kBAChC5B;AAAA,gBAAA,EAAA,CACH;AAAA,cAAA,EAAA,CAEJ;AAAA,YAAA,EAAA,CAEJ;AAAA,UAAA,GACF;AAAA,UAEC,CAAClG,GAAiBprC,CAAK,2BAAM,MAAA,EAAG,WAAU,+BAA+B,UAAAA,GAAM;AAAA,UAC/E9yE,KACCxsB,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,2DACb,UAAAA,gBAAAA,EAAAA,IAAC2+B,IAAA,EAAiB,SAASnS,GAAa,WAAU,2BAAA,CAA2B,EAAA,CAC/E;AAAA,UAED8hH,KACCtuI,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,8BACZ,UAAAsqI,GAAWgE,CAAS,GACvB;AAAA,UAGFruI,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,YAAAA,gBAAAA,EAAAA;AAAAA,cAAC8U;AAAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,WAAU;AAAA,gBACV,SAAS,CAACtgB,OAAM;AACd,kBAAAA,GAAE,gBAAA,GACF48I,GAAA;AAAA,gBACF;AAAA,gBAEA,UAAA;AAAA,kBAAArxI,gBAAAA,EAAAA,IAACyyI,IAAA,EAAS,WAAU,eAAA,CAAe;AAAA,kBACnCzyI,gBAAAA,EAAAA,IAACwV,MAAE,UAAA,OAAA,CAAI;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAETxV,gBAAAA,EAAAA;AAAAA,cAAC+U;AAAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,WAAU;AAAA,gBACV,SAAS,CAACtgB,OAAM;AACd,kBAAAA,GAAE,gBAAA,GACF68I,GAAA;AAAA,gBACF;AAAA,gBACA,OAAM;AAAA,gBAEN,UAAAtxI,gBAAAA,EAAAA,IAAC0yI,IAAA,EAAS,WAAU,cAAA,CAAc;AAAA,cAAA;AAAA,YAAA;AAAA,YAEpC1yI,gBAAAA,EAAAA,IAAC+U,IAAA,EAAO,MAAK,MAAK,SAAQ,aAAY,WAAU,iEAC9C,UAAA/U,gBAAAA,EAAAA,IAAC2yI,IAAA,EAAO,WAAU,cAAA,CAAc,GAClC;AAAA,YACA3yI,gBAAAA,EAAAA;AAAAA,cAACopI;AAAA,cAAA;AAAA,gBACC,UAAUb;AAAA,gBACV,YAAYjpC;AAAA,gBACZ,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ,EAAA,CACF;AAAA,QAAA,EAAA,CACF,EAAA,CACF;AAAA,QAIDuwC,MAAgBlmI,MAAY,UAAWA,MAAY,UAAU,OAC5D1J,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAW,GAAG0J,MAAY,SAAS,cAAc,EAAE,mBAEtD,UAAA;AAAA,UAAA1J,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,+CAEb,UAAA;AAAA,YAAAD,gBAAAA,EAAAA;AAAAA,cAACmuI;AAAA,cAAA;AAAA,gBACC,QAAQiB;AAAA,gBACR,WAAWQ;AAAA,gBACX,aAAaT,MAAW,SAAS,SAAYA;AAAA,gBAC7C,WAAU;AAAA,gBACV,UAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAIZlvI,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,cAAAD,gBAAAA,EAAAA;AAAAA,gBAAC+U;AAAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,SAASg8H;AAAA,kBACT,WAAWb,IAAe,oCAAoC;AAAA,kBAE9D,gCAACoC,IAAA,EAAM,WAAU,WAAU,MAAMpC,IAAe,iBAAiB,OAAA,CAAQ;AAAA,gBAAA;AAAA,cAAA;AAAA,cAE1EE,IAAa,KACZpwI,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,4CAA4C,UAAAowI,GAAW;AAAA,cAGzEpwI,gBAAAA,EAAAA;AAAAA,gBAAC+U;AAAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,WAAU;AAAA,kBAEV,UAAA/U,gBAAAA,EAAAA,IAACuyI,IAAA,EAAc,WAAU,qBAAA,CAAqB;AAAA,gBAAA;AAAA,cAAA;AAAA,cAE/CjD,IAAW,KACVtvI,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,4CAA4C,UAAAsvI,GAAS;AAAA,cAGvEtvI,gBAAAA,EAAAA;AAAAA,gBAAC+U;AAAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,WAAU;AAAA,kBACV,SAAS,CAACtgB,OAAM;AACd,oBAAAA,GAAE,gBAAA,GACF48I,GAAA;AAAA,kBACF;AAAA,kBAEA,UAAArxI,gBAAAA,EAAAA,IAACyyI,IAAA,EAAS,WAAU,UAAA,CAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGhCzyI,gBAAAA,EAAAA;AAAAA,gBAACopI;AAAA,gBAAA;AAAA,kBACC,UAAUb;AAAA,kBACV,YAAYjpC;AAAA,kBACZ,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,WAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEXwxC,MACC9wI,gBAAAA,EAAAA;AAAAA,gBAAC+U;AAAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,SAAS,CAACtgB,OAAM;AACd,oBAAAA,GAAE,gBAAA,GACEk7I,IACFA,EAAOzsE,CAAS,IAEhBqtE,EAAiB,EAAI;AAAA,kBAEzB;AAAA,kBACA,WAAU;AAAA,kBAEV,UAAAvwI,gBAAAA,EAAAA,IAACiiG,IAAA,EAAM,WAAU,UAAA,CAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,YAC7B,EAAA,CAEJ;AAAA,UAAA,GACF;AAAA,UAMAhiG,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,kBACX,UAAA;AAAA,YAAA,CAACyqI,GAAiBprC,CAAK,KAAKA,2BAC3B,OAAA,EAAI,WAAU,yBAAyB,UAAAA,EAAA,CAAM;AAAA,YAG/C9yE,KACCxsB,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,2CACb,UAAAA,gBAAAA,EAAAA,IAAC2+B,IAAA,EAAiB,SAASnS,GAAa,WAAU,6BAAA,CAA6B,EAAA,CACjF;AAAA,YAGD8hH,KACCtuI,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,sCACZ,UAAAsqI,GAAWgE,CAAS,EAAA,CACvB;AAAA,UAAA,EAAA,CAEJ;AAAA,QAAA,GACF;AAAA,QAGDgC,KACCtwI,gBAAAA,EAAAA;AAAAA,UAACmgG;AAAA,UAAA;AAAA,YACC,MAAMmwC;AAAA,YACN,cAAcC;AAAA,YACd,WAAArtE;AAAA,YACA,cAAco8B;AAAA,YACd,oBAAoB9yE;AAAA,YACpB,gBAAgB;AAAA,YAChB,iBAAiB,MAAM;AACrB,cAAA+jH,EAAiB,EAAK,GACtBf,KAAA,QAAAA;AAAA,YACF;AAAA,UAAA;AAAA,QAAA;AAAA,QAIJxvI,gBAAAA,EAAAA;AAAAA,UAACshI;AAAA,UAAA;AAAA,YACC,QAAQkP;AAAA,YACR,SAAS,MAAM;AACb,cAAAC,EAAgB,EAAK,GACrBE,GAAqB,IAAI;AAAA,YAC3B;AAAA,YACA,UAAUhP,MAAqB4G;AAAA,YAC/B,YAAYjpC;AAAA,YACZ,gBAAgBilC;AAAA,YAChB,WAAWE;AAAA,YACX,cAAAjkC;AAAA,YACA,cAAAka;AAAA,YACA,YAAY;AAAA,YACZ,aAAa,CAAC,CAACinB;AAAA,YACf,mBAAmBA,MAAqB;AAAA,YACxC,cAAcoO,KAAA,gBAAAA,EAAgB;AAAA,YAC9B,YAAYA,KAAA,gBAAAA,EAAgB,MAAM;AAAA,YAClC,YAAYwB;AAAA,YACZ,WAAWG;AAAA,UAAA;AAAA,QAAA;AAAA,MACb;AAAA,IAAA;AAAA,EAAA;AAGN,GChrBMkB,KAAY,OAAO,WAAa,KAChCC,KAAQ,OAAO,CAAC;AACtB,IAAIC,KAAmB,IAAOC,KAAiB,IAAOjxG,KAAe,MAAMkxG,KAAkB,MAAMC,KAAmB,MAAMC,KAAwB,GAAGC,KAAU,CAAA,GAAI7yG,KAAiB,CAAA;AACtL,MAAM8yG,KAAO,MAAM;AACnB,GAAGC,KAAc,GAAGC,KAAc,GAAGC,KAAc,GAAGC,KAAiB;AACvE,SAASC,KAAe;AACtB,EAAAX,KAAmB,IACnB,eAAeY,EAAU;AAC3B;AACA,SAASA,KAAa;AACpB,MAAI,CAACP,GAAQ,QAAQ;AACnB,IAAAL,KAAmB;AACnB;AAAA,EACF;AACA,EAAAC,KAAiB;AACjB,WAASr0I,IAAI,GAAGA,IAAIy0I,GAAQ,QAAQz0I;AAClC,IAAIy0I,GAAQz0I,CAAC,EAAE,QAAQ20I,MACrBM,GAAOR,GAAQz0I,CAAC,CAAC;AAErB,EAAAy0I,KAAU,CAAA,GACVL,KAAmB,IACnBC,KAAiB;AACnB;AACA,SAASY,GAAOl1I,GAAM;AACpB,MAAI6uH,IAAY,CAAC7uH,CAAI;AACrB,SAAOA,IAAOA,EAAKo0I,EAAK;AACtB,IAAIp0I,EAAK,MAAMA,EAAK,QAAQ40I,MAC1B/lB,EAAU,KAAK7uH,CAAI;AAEvB,WAASC,IAAI4uH,EAAU,SAAS,GAAG5uH,KAAK,GAAGA;AACzC,IAAAk1I,GAAYtmB,EAAU5uH,CAAC,CAAC;AAE5B;AACA,SAASuhB,GAAKjoB,GAAM;AAClB,QAAMipC,IAAQC,GAAW;AACzB,SAAO4f,GAAQ7f,GAAQjpC,EAAK,SAAgBA,EAAK,KAAK,MAAM67I,GAAQ,KAAK5yG,CAAK,CAAC,IAA1CjpC,GAA6C,IAAI;AACxF;AACA,SAAS87I,GAAKp6I,GAAI;AAChB,SAAOonD,GAAQhf,IAAcpoC,GAAI,IAAI;AACvC;AACA,SAASq6I,GAAQr6I,GAAI;AACnB,SAAOonD,GAAQ,MAAMpnD,GAAI,IAAI;AAC/B;AACA,SAASs6I,KAAO;AACd,EAAKjB,MACHW,GAAU;AACd;AACA,SAASO,KAAW;AAClB,SAAOnyG;AACT;AACA,SAASoyG,GAAOC,GAAMlzG,GAAO;AAC3B,MAAI;AACF,WAAO6f,GAAQ7f,GAAOkzG,GAAM,IAAI;AAAA,EAClC,SAASn+I,GAAO;AACd,IAAA23I,GAAY1sG,GAAOjrC,CAAK;AACxB;AAAA,EACF;AACF;AACA,SAASg7G,GAAW9zG,GAAK+jC,IAAQa,IAAc;AAC7C,SAAOb,KAAA,gBAAAA,EAAO,IAAI/jC;AACpB;AACA,SAASk3I,GAAWl3I,GAAKpB,GAAOmlC,IAAQa,IAAc;AACpD,EAAIb,MACFA,EAAM,MAAM,EAAE,GAAGA,EAAM,KAAK,CAAC/jC,CAAG,GAAGpB,EAAK;AAC5C;AACA,SAASu4I,GAAUC,GAAY;AAC7B,MAAI,CAACA,KAAc,CAACxyG;AAClB,WAAOwyG,KAAclB;AACvB,QAAM30I,IAAOqjC;AACb,SAAKrjC,EAAK,KAEC,MAAM,QAAQA,EAAK,EAAE,IAC9BA,EAAK,GAAG,KAAK61I,CAAU,IAEvB71I,EAAK,KAAK,CAACA,EAAK,IAAI61I,CAAU,IAJ9B71I,EAAK,KAAK61I,GAML,WAAyB;AAC9B,IAAI71I,EAAK,QAAQ+0I,OAEjBc,EAAW,KAAK,IAAI,GAChBC,GAAa91I,EAAK,EAAE,IACtBA,EAAK,KAAK,OACD,MAAM,QAAQA,EAAK,EAAE,KAC9BA,EAAK,GAAG,OAAOA,EAAK,GAAG,QAAQ61I,CAAU,GAAG,CAAC;AAAA,EAEjD;AACF;AACA,SAAST,GAAQj3I,IAAO,IAAM;AAC5B,MAAI,KAAK,QAAQ42I,IAEjB;AAAA,QAAI,KAAK;AACP,UAAI,MAAM,QAAQ,KAAK,EAAE;AACvB,iBAAS90I,IAAI,KAAK,GAAG,SAAS,GAAGA,KAAK,GAAGA;AACvC,UAAAm1I,GAAQ,KAAK,KAAK,GAAGn1I,CAAC,CAAC;AAAA;AAGzB,QAAAm1I,GAAQ,KAAK,KAAK,EAAE;AAGxB,QAAIj3I,GAAM;AACR,YAAMsoB,IAAS,KAAK2tH,EAAK;AACzB,MAAI3tH,MACE,MAAM,QAAQA,EAAO,EAAE,IACzBA,EAAO,GAAG,OAAOA,EAAO,GAAG,QAAQ,IAAI,GAAG,CAAC,IAE3CA,EAAO,KAAK,OAGhBsvH,GAAY,IAAI;AAAA,IAClB;AAAA;AACF;AACA,SAASA,GAAY/1I,GAAM;AACzB,EAAAA,EAAK,MAAM+0I,IACP/0I,EAAK,MACPg2I,GAAch2I,CAAI,GAChBA,EAAK,MACPi2I,GAAsBj2I,GAAM,CAAC,GAC/BA,EAAKo0I,EAAK,IAAI,MACdp0I,EAAK,KAAK,MACVA,EAAK,KAAK,MACVA,EAAK,KAAK,MACVA,EAAK,MAAM6hC,IACX7hC,EAAK,MAAM;AACb;AACA,SAASg2I,GAAcxzG,GAAO;AAC5B,MAAI;AACF,QAAI,MAAM,QAAQA,EAAM,EAAE;AACxB,eAASviC,IAAIuiC,EAAM,GAAG,SAAS,GAAGviC,KAAK,GAAGA,KAAK;AAC7C,cAAMi2I,IAAW1zG,EAAM,GAAGviC,CAAC;AAC3B,QAAAi2I,EAAS,KAAKA,CAAQ;AAAA,MACxB;AAAA;AAEA,MAAA1zG,EAAM,GAAG,KAAKA,EAAM,EAAE;AAExB,IAAAA,EAAM,KAAK;AAAA,EACb,SAASjrC,GAAO;AACd,IAAA23I,GAAY1sG,GAAOjrC,CAAK;AAAA,EAC1B;AACF;AACA,SAAS8qD,GAAQ7f,GAAO2zG,GAAUnyI,GAAU;AAC1C,QAAMoyI,IAAY/yG,IAAcgzG,IAAe9B;AAC/C,EAAAlxG,KAAeb,GACf+xG,KAAkBvwI;AAClB,MAAI;AACF,WAAOmyI,EAAS,KAAK3zG,CAAK;AAAA,EAC5B,UAAC;AACC,IAAAa,KAAe+yG,GACf7B,KAAkB8B;AAAA,EACpB;AACF;AACA,SAASnH,GAAY1sG,GAAOjrC,GAAO;AACjC,MAAI,CAACirC,KAAS,CAACA,EAAM;AACnB,UAAMjrC;AACR,MAAI0I,IAAI,GAAGsyB,IAAMiQ,EAAM,IAAI,QAAQiuB,IAAel5D;AAClD,OAAK0I,IAAI,GAAGA,IAAIsyB,GAAKtyB;AACnB,QAAI;AACF,MAAAuiC,EAAM,IAAIviC,CAAC,EAAEwwD,CAAY;AACzB;AAAA,IACF,SAAS6lF,GAAQ;AACf,MAAA7lF,IAAe6lF;AAAA,IACjB;AAEF,MAAIr2I,MAAMsyB;AACR,UAAMk+B;AACV;AACA,SAAS8lF,KAAO;AACd,SAAI,KAAK,QAAQxB,KACR,KAAK,MACVR,MAAmB,CAAC,KAAK,OACvB,CAACC,MAAoBD,GAAgB,MAAMA,GAAgB,GAAGE,EAAqB,KAAK,OAC1FA,OACUD,KAGVA,GAAiB,KAAK,IAAI,IAF1BA,KAAmB,CAAC,IAAI,IAIxB,KAAK,MACPW,GAAY,IAAI,GACX,KAAK;AACd;AACA,SAASqB,GAAM9nG,GAAU;AACvB,QAAMrxC,IAAQy4I,GAAapnG,CAAQ,IAAIA,EAAS,KAAK,EAAE,IAAIA;AAC3D,MAAI,KAAK,IAAI,KAAK,IAAIrxC,CAAK,MACzB,KAAK,KAAKA,GACN,KAAK;AACP,aAAS4C,IAAI,GAAGA,IAAI,KAAK,GAAG,QAAQA;AAClC,MAAA8+D,GAAO,KAAK,GAAG9+D,CAAC,GAAG60I,EAAW;AAIpC,SAAO,KAAK;AACd;AACA,MAAM2B,KAAY,WAAiB;AACjC,OAAKrC,EAAK,IAAI,MACd,KAAK,KAAK,MACN/wG,MACFA,GAAa,OAAO,IAAI;AAC5B,GACMqzG,KAAaD,GAAU;AAC7BC,GAAW,MAAM70G;AACjB60G,GAAW,MAAM;AACjBA,GAAW,KAAK;AAChBA,GAAW,KAAK;AAChBA,GAAW,SAAS,SAASx2I,GAAO;AAClC,EAAAA,EAAMk0I,EAAK,IAAI,MACV,KAAK,KAEC,MAAM,QAAQ,KAAK,EAAE,IAC9B,KAAK,GAAG,KAAKl0I,CAAK,IAElB,KAAK,KAAK,CAAC,KAAK,IAAIA,CAAK,IAJzB,KAAK,KAAKA,GAMZA,EAAM,MAAMA,EAAM,QAAQ2hC,KAAiB,KAAK,MAAM,EAAE,GAAG,KAAK,KAAK,GAAG3hC,EAAM,IAAG,GAC7E,KAAK,QACPA,EAAM,MAAOA,EAAM,MAAiB,CAAC,GAAGA,EAAM,KAAK,GAAG,KAAK,GAAG,IAArC,KAAK;AAElC;AACAw2I,GAAW,UAAU,WAAW;AAC9B,EAAAtB,GAAQ,KAAK,IAAI;AACnB;AACA,SAAS3yG,KAAc;AACrB,SAAO,IAAIg0G,GAAS;AACtB;AACA,MAAME,KAAc,SAAqBtoG,GAAc8nG,GAAU/jH,GAAS;AACxE,EAAAqkH,GAAU,KAAK,IAAI,GACnB,KAAK,MAAMN,IAAWrB,KAAcF,IACpC,KAAK,KAAK,IACV,KAAK,KAAK,IACV,KAAK,KAAK,MACV,KAAK,KAAK,MACV,KAAK,KAAKvmG,GACN8nG,MACF,KAAK,KAAKA,IACR/jH,KAAWA,EAAQ,UACrB,KAAK,MAAMA,EAAQ;AACvB,GACMwkH,KAAeD,GAAY;AACjC,OAAO,eAAeC,IAAcF,EAAU;AAC9CE,GAAa,MAAMC;AACnBD,GAAa,OAAOL;AACpB,SAASO,GAAkBzoG,GAAc8nG,GAAU/jH,GAAS;AAC1D,SAAO,IAAIukH,GAAYtoG,GAAc8nG,GAAU/jH,CAAO;AACxD;AACA,SAASykH,GAAWjhJ,GAAGE,GAAG;AACxB,SAAOF,MAAME;AACf;AACA,SAASggJ,GAAaz4I,GAAO;AAC3B,SAAO,OAAOA,KAAU;AAC1B;AACA,SAAS83I,GAAYn1I,GAAM;AACzB,MAAIA,EAAK,QAAQ60I;AACf,aAAS50I,IAAI,GAAGA,IAAID,EAAK,GAAG,WAC1Bm1I,GAAYn1I,EAAK,GAAGC,CAAC,CAAC,GAClBD,EAAK,QAAQ80I,KAFiB70I;AAElC;AAKJ,EAAID,EAAK,QAAQ80I,KACfzmI,GAAOrO,CAAI,IAEXA,EAAK,MAAM40I;AACf;AACA,SAASlsI,GAAQ1I,GAAM;AACrB,EAAIA,EAAK,MACPo1I,GAAQ,KAAKp1I,GAAM,EAAK,GACtBA,EAAK,MACPg2I,GAAch2I,CAAI,GACpBA,EAAK,MAAMA,EAAKo0I,EAAK,IAAIp0I,EAAKo0I,EAAK,EAAE,MAAM;AAC7C;AACA,SAAS/lI,GAAOrO,GAAM;AACpB,MAAI+2I,IAAgBvC,IAAkBwC,IAAqBvC;AAC3D,EAAAD,KAAmB,MACnBC,KAAwB;AACxB,MAAI;AACF,IAAA/rI,GAAQ1I,CAAI;AACZ,UAAMgD,IAASq/C,GAAQriD,GAAMA,EAAK,IAAIA,CAAI;AAC1C,IAAAi3I,GAAgBj3I,CAAI,GAChB,CAACA,EAAK,MAAMA,EAAK,KACnBw2I,GAAM,KAAKx2I,GAAMgD,CAAM,KAEvBhD,EAAK,KAAKgD,GACVhD,EAAK,KAAK;AAAA,EAEd,SAASzI,GAAO;AACd,IAAA0/I,GAAgBj3I,CAAI,GACpBkvI,GAAYlvI,GAAMzI,CAAK;AAAA,EACzB,UAAC;AACC,IAAAi9I,KAAmBuC,GACnBtC,KAAwBuC,GACxBh3I,EAAK,MAAM40I;AAAA,EACb;AACF;AACA,SAASqC,GAAgBj3I,GAAM;AAC7B,MAAIw0I,IAAkB;AAGpB,QAFIx0I,EAAK,MACPi2I,GAAsBj2I,GAAMy0I,EAAqB,GAC/Cz0I,EAAK,MAAMy0I,KAAwB,GAAG;AACxC,MAAAz0I,EAAK,GAAG,SAASy0I,KAAwBD,GAAiB;AAC1D,eAASv0I,IAAI,GAAGA,IAAIu0I,GAAiB,QAAQv0I;AAC3C,QAAAD,EAAK,GAAGy0I,KAAwBx0I,CAAC,IAAIu0I,GAAiBv0I,CAAC;AAAA,IAE3D;AACE,MAAAD,EAAK,KAAKw0I;AAEZ,QAAI/5I;AACJ,aAASwF,IAAIw0I,IAAuBx0I,IAAID,EAAK,GAAG,QAAQC;AACtD,MAAAxF,IAASuF,EAAK,GAAGC,CAAC,GACbxF,EAAO,KAGVA,EAAO,GAAG,KAAKuF,CAAI,IAFnBvF,EAAO,KAAK,CAACuF,CAAI;AAAA,EAIvB,MAAO,CAAIA,EAAK,MAAMy0I,KAAwBz0I,EAAK,GAAG,WACpDi2I,GAAsBj2I,GAAMy0I,EAAqB,GACjDz0I,EAAK,GAAG,SAASy0I;AAErB;AACA,SAAS11E,GAAO/+D,GAAMmsC,GAAO;AAC3B,MAAI,EAAAnsC,EAAK,OAAOmsC,OAEZnsC,EAAK,MAAMA,EAAK,QAAQ40I,OAC1BF,GAAQ,KAAK10I,CAAI,GACZq0I,MACHW,GAAY,IAEhBh1I,EAAK,MAAMmsC,GACPnsC,EAAK;AACP,aAASC,IAAI,GAAGA,IAAID,EAAK,GAAG,QAAQC;AAClC,MAAA8+D,GAAO/+D,EAAK,GAAGC,CAAC,GAAG40I,EAAW;AAGpC;AACA,SAASoB,GAAsBj2I,GAAMoE,GAAO;AAC1C,MAAI3J,GAAQy8I;AACZ,WAASj3I,IAAImE,GAAOnE,IAAID,EAAK,GAAG,QAAQC;AACtC,IAAAxF,IAASuF,EAAK,GAAGC,CAAC,GACdxF,EAAO,OACTy8I,IAAOz8I,EAAO,GAAG,QAAQuF,CAAI,GAC7BvF,EAAO,GAAGy8I,CAAI,IAAIz8I,EAAO,GAAGA,EAAO,GAAG,SAAS,CAAC,GAChDA,EAAO,GAAG,IAAG;AAGnB;AACA,SAAS2iF,GAAO/uC,GAAcjc,GAAS;AACrC,QAAMpyB,IAAO82I,GAAkBzoG,GAAc,MAAMjc,CAAO,GAAG+kH,IAAUZ,GAAK,KAAKv2I,CAAI;AACrF,SAAAm3I,EAAQ/C,EAAK,IAAI,IACjB+C,EAAQ,MAAMX,GAAM,KAAKx2I,CAAI,GACtBm3I;AACT;AACA,SAASC,GAAan8I,GAAI;AACxB,SAAO66I,GAAa76I,CAAE,KAAKm5I,MAASn5I;AACtC;AACA,SAASo8I,GAASlB,GAAU/jH,GAAS;AACnC,QAAMpyB,IAAO82I;AAAA,IACX1kH,KAAA,gBAAAA,EAAS;AAAA,IACT+jH;AAAA,IACA/jH;AAAA,EACJ,GAAK+kH,IAAUZ,GAAK,KAAKv2I,CAAI;AAC3B,SAAAm3I,EAAQ/C,EAAK,IAAI,IACV+C;AACT;AACA,SAASG,GAASC,GAASnlH,GAAS;AAClC,QAAM+kH,IAAUL;AAAA,IACd;AAAA,IACA,WAAqB;AACnB,UAAIU,IAAeD,EAAO;AAC1B,aAAAzB,GAAa0B,CAAY,KAAK5B,GAAU4B,CAAY,GAC7C;AAAA,IACT;AAAA,IACA;AAAA,EACJ;AACE,SAAAL,EAAQ,KAAK,IACb9oI,GAAO8oI,CAAO,GACP/B,GAAQ,KAAK+B,GAAS,EAAI;AACnC;AACA,SAASM,GAAcx8I,GAAI;AACzB,SAAOm8I,GAAan8I,CAAE,KAAK,SAASA;AACtC;AACA,SAASu4E,MAAQ97E,GAAM;AACvB;AACA,SAASggJ,GAAOr6I,GAAO;AACrB,SAAOA,MAAU;AACnB;AACA,SAASwiD,GAAYxiD,GAAO;AAC1B,SAAO,OAAOA,IAAU;AAC1B;AACA,SAASs6I,GAAMt6I,GAAO;AACpB,SAAOq6I,GAAOr6I,CAAK,KAAKwiD,GAAYxiD,CAAK;AAC3C;AACA,SAAS2hD,GAAS3hD,GAAO;AACvB,UAAOA,KAAA,gBAAAA,EAAO,iBAAgB;AAChC;AACA,SAASiV,GAASjV,GAAO;AACvB,SAAO,OAAOA,KAAU,YAAY,CAAC,OAAO,MAAMA,CAAK;AACzD;AACA,SAASgkD,GAAShkD,GAAO;AACvB,SAAO,OAAOA,KAAU;AAC1B;AACA,SAAS4iD,GAAU5iD,GAAO;AACxB,SAAO,OAAOA,KAAU;AAC1B;AACA,SAASunC,GAAWvnC,GAAO;AACzB,SAAO,OAAOA,KAAU;AAC1B;AACA,SAASF,GAAQE,GAAO;AACtB,SAAO,MAAM,QAAQA,CAAK;AAC5B;AACK,MAACw6B,IAASs8G,KAAYyD,KAAeN;AAC1C,SAASM,GAAaL,GAASnlH,GAAS;;AACtC,SAAI,OAAO,UAAY,SAAejuB,IAAA,QAAQ,QAAR,gBAAAA,EAAa,cAAa,SACvDmzI,GAASC,CAAO,IAElB/jE;AACT;AACA,MAAMqkE,KAAQ1D,KAAY,MAAa;AACvC,IAAI,OAAO2D,KAAY,OAAO,WAAW;;AACzC,MAAMC,YAAiBztI,KAAAutI,IACpB1zI,KAAA2zI,IADoBxtI,IAAM;AAAA,EA8B3B,YAAY7R,MAASc,GAAM;;AACzB,UAAMd,GAAMc,EAAK,CAAC,CAAC;AA9BrB,IAAA8hB,EAAA,MAAClX,IAAa;AAId;AAAA;AAAA;AAAA,IAAAkX,EAAA;AAIA;AAAA;AAAA;AAAA,IAAAA,EAAA,kBAAW,IAAI28H,GAAa;AAuB1B,SAAK,UAAS7zI,IAAA5K,EAAK,CAAC,MAAN,gBAAA4K,EAAS;AACvB,UAAMsgD,KAAUn6C,IAAA/Q,EAAK,CAAC,MAAN,gBAAA+Q,EAAS;AACzB,IAAIm6C,KAAS,KAAK,SAAS,IAAIA,CAAO;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAtBA,IAAI,UAAU;AACZ,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,cAAc;AAChB,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,kBAAkB;;AACpB,aAAOtgD,IAAA,KAAK,SAAS,WAAd,gBAAAA,EAAsB,cAAa;AAAA,EAC5C;AAOF;AACA,MAAM6zI,GAAc;AAAA,EAApB;AACE,IAAA38H,EAAA,eAAQ,CAAA;AAAA;AAAA,EACR,IAAI,SAAS;AACX,WAAO,KAAK,MAAM,CAAC;AAAA,EACrB;AAAA,EACA,IAAI,SAAS;AACX,WAAO,KAAK,MAAM,KAAK,MAAM,SAAS,CAAC;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAIA,IAAIqmB,GAAO;AACT,SAAK,MAAM,KAAKA,CAAK,GACjBu2G,GAAWv2G,CAAK,KAClB,KAAK,MAAM,KAAK,GAAGA,EAAM,QAAQ;AAAA,EAErC;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOA,GAAO;AACZ,WAAO,KAAK,MAAM,OAAO,KAAK,MAAM,QAAQA,CAAK,GAAG,CAAC,EAAE,CAAC;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA,EAIA,IAAIA,GAAO;AACT,WAAO,KAAK,MAAM,KAAK,CAAC,MAAM,MAAMA,CAAK;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQjpC,GAAM;AACZ,WAAO,CAAC,CAAC,KAAK,SAASA,CAAI;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAIA,SAASA,GAAM;AACb,WAAO,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,SAASA,CAAI;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAIA,KAAKsiC,GAAU;AACb,eAAW2G,KAAS,KAAK,OAAO;AAC9B,YAAMw2G,IAAcn9G,EAAS2G,CAAK;AAClC,UAAIw2G,EAAa,QAAO,CAACx2G,GAAOw2G,CAAW;AAAA,IAC7C;AAAA,EACF;AAAA,EACA,CAAC,OAAO,QAAQ,IAAI;AAClB,WAAO,KAAK,MAAM,OAAM;AAAA,EAC1B;AACF;AACA,SAASD,GAAWv2G,GAAO;AACzB,SAAO,CAAC,EAACA,KAAA,QAAAA,EAAQo2G;AACnB;AAcA,MAAMK,WAAqB,YAAY;AAAA,EAAvC;AAAA;AAEE;AAAA,IAAA98H,EAAA;AAAA;AAAA,EACA,iBAAiB5iB,GAAMsiC,GAAU3I,GAAS;AACxC,WAAO,MAAM,iBAAiB35B,GAAMsiC,GAAU3I,CAAO;AAAA,EACvD;AAAA,EACA,oBAAoB35B,GAAMsiC,GAAU3I,GAAS;AAC3C,WAAO,MAAM,oBAAoB35B,GAAMsiC,GAAU3I,CAAO;AAAA,EAC1D;AACF;AACA,SAASgmH,GAAY1oH,GAAQj3B,GAAM6vC,GAASlW,GAAS;AACnD,SAAI+hH,KAAkB3gE,MACtB9jD,EAAO,iBAAiBj3B,GAAM6vC,GAASlW,CAAO,GACvCwjH,GAAU,MAAMlmH,EAAO,oBAAoBj3B,GAAM6vC,GAASlW,CAAO,CAAC;AAC3E;;AACA,MAAMimH,GAAiB;AAAA,EAMrB,YAAY3oH,GAAQ;AALpB,IAAA4oH,EAAA,MAAAC;AACA,IAAAD,EAAA,MAAAE;AAKE,IAAAC,EAAA,MAAKF,IAAU7oH,IACf+oH,EAAA,MAAKD,IAAc,IAAI,gBAAe,IACtC5C,GAAU,KAAK,MAAM,KAAK,IAAI,CAAC;AAAA,EACjC;AAAA,EAPA,IAAI,SAAS;AACX,WAAO8C,EAAA,MAAKF,IAAY;AAAA,EAC1B;AAAA,EAMA,IAAI//I,GAAM6vC,GAASlW,GAAS;AAC1B,QAAI,KAAK,OAAO,QAAS,OAAM,MAAM,SAAS;AAC9C,WAAAsmH,EAAA,MAAKH,IAAQ,iBAAiB9/I,GAAM6vC,GAAS;AAAA,MAC3C,GAAGlW;AAAA,MACH,QAAQA,KAAA,QAAAA,EAAS,SAASumH,GAAU,KAAK,QAAQvmH,EAAQ,MAAM,IAAI,KAAK;AAAA,IAC9E,CAAK,GACM;AAAA,EACT;AAAA,EACA,OAAO35B,GAAM6vC,GAAS;AACpB,WAAAowG,EAAA,MAAKH,IAAQ,oBAAoB9/I,GAAM6vC,CAAO,GACvC;AAAA,EACT;AAAA,EACA,MAAMswG,GAAQ;AACZ,IAAAF,EAAA,MAAKF,IAAY,MAAMI,CAAM;AAAA,EAC/B;AACF;AAzBEL,KAAA,eACAC,KAAA;AAyBF,SAASG,MAAaE,GAAS;AAC7B,QAAMnqE,IAAa,IAAI,gBAAe,GAAIt8C,IAAU,EAAE,QAAQs8C,EAAW,OAAM;AAC/E,WAASoqE,EAAQp3G,GAAO;AACtB,IAAAgtC,EAAW,MAAMhtC,EAAM,OAAO,MAAM;AAAA,EACtC;AACA,aAAWy1G,KAAW0B,GAAS;AAC7B,QAAI1B,EAAQ,SAAS;AACnB,MAAAzoE,EAAW,MAAMyoE,EAAQ,MAAM;AAC/B;AAAA,IACF;AACA,IAAAA,EAAQ,iBAAiB,SAAS2B,GAAS1mH,CAAO;AAAA,EACpD;AACA,SAAOs8C,EAAW;AACpB;AACA,SAASqqE,GAAer3G,GAAO;AAC7B,SAAO,CAAC,EAACA,KAAA,QAAAA,EAAO,KAAK,WAAW;AAClC;AACA,SAASs3G,GAAat3G,GAAO;AAC3B,SAAO,CAAC,EAACA,KAAA,QAAAA,EAAO,KAAK,WAAW;AAClC;AACA,SAASu3G,GAAav3G,GAAO;AAC3B,SAAO,iBAAiB,MAAKA,KAAA,gBAAAA,EAAO,SAAQ,EAAE;AAChD;AACA,SAASw3G,GAAgBx3G,GAAO;AAC9B,SAAO,CAAC,EAACA,KAAA,QAAAA,EAAO,KAAK,WAAW;AAClC;AACA,SAASy3G,GAAmBz3G,GAAO;AACjC,SAAOw3G,GAAgBx3G,CAAK,KAAKA,EAAM,QAAQ;AACjD;AACA,SAAS03G,GAAgB13G,GAAO;AAC9B,SAAOw3G,GAAgBx3G,CAAK,MAAMA,EAAM,QAAQ,WAAWA,EAAM,QAAQ;AAC3E;AACA,SAAS23G,GAAUr5I,GAAM;AACvB,SAAOA,aAAgB;AACzB;AACA,SAASs5I,GAAaC,GAAM/+I,GAAM6C,GAAO;AACvC,MAAKk8I,EACA,KAAI,CAACl8I,KAASA,MAAU,MAAMA,MAAU;AAC3C,IAAAk8I,EAAK,gBAAgB/+I,CAAI;AAAA,OACpB;AACL,UAAMkuB,IAAYrrB,MAAU,KAAO,KAAKA,IAAQ;AAChD,IAAIk8I,EAAK,aAAa/+I,CAAI,MAAMkuB,KAC9B6wH,EAAK,aAAa/+I,GAAMkuB,CAAS;AAAA,EAErC;AAAA,MARW;AASb;AACA,SAAS8wH,GAASD,GAAMtsI,GAAU5P,GAAO;AACvC,MAAKk8I,EACA,CAAI,CAACl8I,KAASA,MAAU,IAC3Bk8I,EAAK,MAAM,eAAetsI,CAAQ,IAElCssI,EAAK,MAAM,YAAYtsI,GAAU5P,IAAQ,EAAE;AAAA,MAJlC;AAMb;AACA,SAASo8I,GAAYF,GAAM/+I,GAAM6C,GAAO;AACtC,EAAAk8I,EAAK,UAAUl8I,IAAQ,QAAQ,QAAQ,EAAE7C,CAAI;AAC/C;AACA,SAASk/I,GAAWz+I,GAAI;AACtB,MAAIoC,IAAQpC;AACZ,SAAO,OAAOoC,KAAU,aAAY,CAAAA,IAAQA,EAAM,KAAK,IAAI;AAC3D,SAAOA;AACT;AACA,SAASsZ,GAAcgjI,GAAS;AAC9B,SAAO,EAAE,IAAI,OAAM,GAAI,SAAAA,EAAO;AAChC;AACA,SAASC,GAAe1gJ,GAASmE,GAAOmlC,IAAQgzG,GAAQ,GAAI;;AAC1D,QAAMqE,IAAmB,CAACh6F,GAAYxiD,CAAK;AAC3C,EAAAs4I,GAAWz8I,EAAQ,IAAI2gJ,IAAmBx8I,KAAQ8G,IAAAjL,EAAQ,YAAR,gBAAAiL,EAAA,KAAAjL,IAAqBspC,CAAK;AAC9E;AACA,SAAS3rB,GAAW3d,GAAS;AAE3B,SADcq5G,GAAWr5G,EAAQ,EAAE;AAErC;AACA,SAAS4gJ,GAAmB5gJ,GAAS;AACnC,SAAO,CAAC2mD,GAAY0yD,GAAWr5G,EAAQ,EAAE,CAAC;AAC5C;AACA,MAAM6gJ,KAAwB,uBAAO,CAAC,GAChCC,KAA0B,uBAAO,CAAC,GAClCC,KAA8B,uBAAO,CAAC,GACtCC,KAAc,CAAA;;AAOjB/1I,KAAA81I;AANH,MAAME,GAAS;AAAA,EAuBb,YAAYC,GAAY53G,GAAOjpC,GAAM;AAvBvC,IAAA++I,EAAA,MAAA+B;AAEE;AAAA,IAAAh/H,EAAA;AAEA;AAAA,IAAAA,EAAA;AAEA;AAAA,IAAAA,EAAA,MAAClX,IAAe;AAChB,IAAAkX,EAAA,aAAM+hE,GAAO,IAAI;AACjB,IAAA/hE,EAAA,YAAK;AACL,IAAAA,EAAA,eAAQ;AACR,IAAAA,EAAA,qBAAc;AACd,IAAAA,EAAA,sBAAe;AACf,IAAAA,EAAA,mBAAY;AACZ,IAAAA,EAAA,mBAAY;AACZ,IAAAA,EAAA,eAAQ6+H;AACR,IAAA7+H,EAAA,eAAQ;AACR,IAAAA,EAAA,gBAAS;AACT,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAi9H,EAAA,MAAAgC,IAAkB,CAAA;AAClB,IAAAhC,EAAA,MAAAiC,IAAmB,CAAA;AACnB,IAAAjC,EAAA,MAAAkC,IAAoB,CAAA;AACpB,IAAAlC,EAAA,MAAAmC,IAAoB,CAAA;;AAElB,SAAK,QAAQj4G,GACTjpC,KAAA,QAAAA,EAAM,SAAOA,EAAK,MAAM,OAAOipC,CAAK;AACxC,QAAIk4G,IAAeN,EAAW,OAAOjgJ,IAAQigJ,EAAW;AAQxD,QAPIM,MACF,KAAK,SAASA,EAAa,OAAM,GACjC,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ;AAAA,MAClC,KAAK,CAACn+H,GAAGo+H,MAAU,KAAK,OAAOA,CAAK,EAAC;AAAA,IAC7C,CAAO,GACDf,GAAec,GAAc,KAAK,MAAM,IAEtCvgJ,MACF,KAAK,QAAQygJ,GAAoBzgJ,CAAK,GAClCZ,KAAA,QAAAA,EAAM;AACR,iBAAWohJ,KAAS,OAAO,KAAKphJ,EAAK,KAAK;AACxC,SAAA4K,IAAA,KAAK,MAAMw2I,CAAK,MAAhB,QAAAx2I,EAAmB,IAAI5K,EAAK,MAAMohJ,CAAK;AAI7C,IAAA/E,GAAU,KAAK,QAAQ,KAAK,IAAI,CAAC;AAAA,EACnC;AAAA,EACA,QAAQ;AACN,IAAAH,GAAO,MAAM;AACX,iBAAW16G,KAAY29G,EAAA,MAAK4B,IAAiB,CAAAv/G,EAAQ;AAAA,IACvD,GAAG,KAAK,KAAK;AAAA,EACf;AAAA,EACA,OAAO1P,GAAI;AACT,IAAI,KAAK,OACT,KAAK,KAAKA,GACV,KAAK,IAAI,IAAIA,CAAE,GACfoqH,GAAO,MAAM;AACX,WAAK,cAAchzG,GAAW,GAC9BgzG,GAAO,MAAM;AACX,mBAAW16G,KAAY29G,EAAA,MAAK6B,IAAkB,CAAAx/G,EAAS,KAAK,EAAE;AAC9D,QAAA8/G,EAAA,MAAKR,IAAAS,IAAL,YACAD,EAAA,MAAKR,IAAAU,IAAL;AAAA,MACF,GAAG,KAAK,WAAW;AAAA,IACrB,GAAG,KAAK,KAAK,GACb1vH,EAAG,cAAc,IAAI,MAAM,UAAU,CAAC;AAAA,EACxC;AAAA,EACA,SAAS;;AACP,KAAAlnB,IAAA,KAAK,gBAAL,QAAAA,EAAkB,WAClB,KAAK,cAAc,MACnB,KAAK,eAAe,MACpB,KAAK,KAAK,MACV,KAAK,IAAI,IAAI,IAAI;AAAA,EACnB;AAAA,EACA,UAAU;AACR,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,eAAe,CAACu0I,EAAA,MAAK8B,IAAkB,UAC7D/E,GAAO,MAAM;AACX,WAAK,eAAehzG,GAAW,GAC/BgzG,GAAO,MAAM;AACX,mBAAW16G,KAAY29G,EAAA,MAAK8B,IAAmB,CAAAz/G,EAAS,KAAK,EAAE;AAAA,MACjE,GAAG,KAAK,YAAY;AAAA,IACtB,GAAG,KAAK,WAAW;AAAA,EACrB;AAAA,EACA,aAAa;;AACX,KAAA52B,IAAA,KAAK,iBAAL,QAAAA,EAAmB,WACnB,KAAK,eAAe;AAAA,EACtB;AAAA,EACA,UAAU;AACR,QAAI,KAAK,UAAW;AACpB,SAAK,YAAY,IACjBsxI,GAAO,MAAM;AACX,iBAAW16G,KAAY29G,EAAA,MAAK+B,IAAmB,CAAA1/G,EAAS,KAAK,EAAE;AAAA,IACjE,GAAG,KAAK,KAAK;AACb,UAAM1P,IAAK,KAAK;AAChB,SAAK,OAAM,GACX,KAAK,MAAM,QAAO,GAClBqtH,EAAA,MAAK4B,IAAgB,SAAS,GAC9B5B,EAAA,MAAK6B,IAAiB,SAAS,GAC/B7B,EAAA,MAAK8B,IAAkB,SAAS,GAChC9B,EAAA,MAAK+B,IAAkB,SAAS,GAChC,KAAK,YAAY,MACjB,KAAK,QAAQ,MACb,KAAK,SAAS,MACd,KAAK,QAAQP,IACb,KAAK,QAAQ,MACb,KAAK,QAAQA,IACb,KAAK,SAAS,MACV7uH,KAAI,OAAOA,EAAG;AAAA,EACpB;AAAA,EACA,SAASqE,GAAQ;AACf,IAAIA,EAAO,WAASgpH,EAAA,MAAK4B,IAAgB,KAAK5qH,EAAO,QAAQ,KAAKA,CAAM,CAAC,GACrEA,EAAO,YAAUgpH,EAAA,MAAK6B,IAAiB,KAAK7qH,EAAO,SAAS,KAAKA,CAAM,CAAC,GACxEA,EAAO,aAAWgpH,EAAA,MAAK8B,IAAkB,KAAK9qH,EAAO,UAAU,KAAKA,CAAM,CAAC,GAC3EA,EAAO,aAAWgpH,EAAA,MAAK+B,IAAkB,KAAK/qH,EAAO,UAAU,KAAKA,CAAM,CAAC;AAAA,EACjF;AA+BF;AA1HE4qH,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eAtBFJ,KAAA,eA+GES,KAAY,WAAG;AACb,MAAK,KAAK;AACV,eAAWtgJ,KAAQ,OAAO,KAAK,KAAK,KAAK;AACvC,MAAI25I,KACFmF,GAAa,KAAK,IAAI9+I,GAAMk/I,GAAW,KAAK,KAAK,WAAW,KAAK,MAAMl/I,CAAI,CAAC,CAAC,IACpEoqC,GAAW,KAAK,MAAMpqC,CAAI,CAAC,IACpCq9B,EAAOgjH,EAAA,MAAKR,IAAAW,IAAS,KAAK,MAAMxgJ,CAAI,CAAC,IAErC8+I,GAAa,KAAK,IAAI9+I,GAAM,KAAK,MAAMA,CAAI,CAAC;AAGlD,GACAugJ,KAAa,WAAG;AACd,MAAK,KAAK;AACV,eAAWvgJ,KAAQ,OAAO,KAAK,KAAK,MAAM;AACxC,MAAI25I,KACFqF,GAAS,KAAK,IAAIh/I,GAAMk/I,GAAW,KAAK,KAAK,WAAW,KAAK,OAAOl/I,CAAI,CAAC,CAAC,IACjEoqC,GAAW,KAAK,OAAOpqC,CAAI,CAAC,IACrCq9B,EAAOgjH,EAAA,MAAKR,IAAAY,IAAU,KAAK,MAAMzgJ,CAAI,CAAC,IAEtCg/I,GAAS,KAAK,IAAIh/I,GAAM,KAAK,OAAOA,CAAI,CAAC;AAG/C,GACAwgJ,KAAQ,SAACxgJ,GAAM;AACb,EAAA8+I,GAAa,KAAK,IAAI9+I,GAAM,KAAK,MAAMA,CAAI,EAAE,KAAK,KAAK,SAAS,CAAC;AACnE,GACAygJ,KAAS,SAACzgJ,GAAM;AACd,EAAAg/I,GAAS,KAAK,IAAIh/I,GAAM,KAAK,OAAOA,CAAI,EAAE,KAAK,KAAK,SAAS,CAAC;AAChE;AAEF,SAASogJ,GAAoBzgJ,GAAO;AAClC,QAAM+gJ,IAAS,CAAA;AACf,aAAW1gJ,KAAQ,OAAO,KAAKL,CAAK,GAAG;AACrC,UAAMu0B,IAAMv0B,EAAMK,CAAI;AACtB,IAAA0gJ,EAAO1gJ,CAAI,IAAI4iF,GAAO1uD,GAAKA,CAAG;AAAA,EAChC;AACA,SAAOwsH;AACT;AACA,IAAIC,KAAkB,EAAE,IAAI,KAAI;AAChC,SAASC,GAAgBhB,GAAY7gJ,GAAM;AACzC,SAAOioB,GAAK,MAAM;AAChB,IAAA25H,GAAgB,KAAK,IAAIhB,GAASC,GAAY5E,GAAQ,GAAIj8I,CAAI;AAC9D,UAAM8hJ,IAAY,IAAIjB,EAAU;AAChC,WAAAe,GAAgB,GAAG,YAAYE,GAC/BF,GAAgB,KAAK,MACdE;AAAA,EACT,CAAC;AACH;AACA,MAAMC,WAAuB,YAAY;AAAA,EA6BvC,cAAc;AACZ,UAAK;AA5BP;AAAA,IAAAjgI,EAAA;AA6BM,IAAA8/H,GAAgB,MAAI,KAAK,OAAOA,EAAe;AAAA,EACrD;AAAA,EA7BA,IAAI,KAAK;AACP,WAAO,KAAK,GAAG;AAAA,EACjB;AAAA,EACA,IAAI,MAAM;AACR,WAAO,KAAK,GAAG,IAAG;AAAA,EACpB;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,GAAG;AAAA,EACjB;AAAA,EACA,IAAI,cAAc;AAChB,WAAO,KAAK,GAAG;AAAA,EACjB;AAAA,EACA,IAAI,eAAe;AACjB,WAAO,KAAK,GAAG;AAAA,EACjB;AAAA;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK,GAAG;AAAA,EACjB;AAAA;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK,GAAG;AAAA,EACjB;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,GAAG;AAAA,EACjB;AAAA,EAKA,OAAO,EAAE,IAAAI,KAAM;AACb,gBAAK,KAAKA,GACVA,EAAG,SAAS,IAAI,GACT;AAAA,EACT;AAAA,EACA,iBAAiB9iJ,GAAMsiC,GAAU3I,GAAS;AACxC,SAAK,OAAO35B,GAAMsiC,GAAU3I,CAAO;AAAA,EACrC;AAAA,EACA,oBAAoB35B,GAAMsiC,GAAU3I,GAAS;;AAC3C,KAAAjuB,IAAA,KAAK,OAAL,QAAAA,EAAS,oBAAoB1L,GAAMsiC,GAAU3I;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,cAAc9J,GAAY;AACxB,IAAK,KAAK,GAAG,UAAO,KAAK,GAAG,QAAQ,CAAA,IACpC,OAAO,OAAO,KAAK,GAAG,OAAOA,CAAU;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAUykB,GAAQ;AAChB,IAAK,KAAK,GAAG,WAAQ,KAAK,GAAG,SAAS,CAAA,IACtC,OAAO,OAAO,KAAK,GAAG,QAAQA,CAAM;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAWyuG,GAAM;AACf,SAAK,UAAUA,CAAI;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAIA,YAAY/iJ,MAASc,GAAM;AACzB,WAAO,IAAIw+I,GAASt/I,GAAMc,EAAK,CAAC,CAAC;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAASd,MAASc,GAAM;AACtB,QAAI46I,MAAa,CAAC,KAAK,GAAI,QAAO;AAClC,UAAMzyG,IAAQjpC,aAAgB,QAAQA,IAAO,IAAIs/I,GAASt/I,GAAMc,EAAK,CAAC,CAAC;AACvE,kBAAO,eAAemoC,GAAO,UAAU;AAAA,MACrC,KAAK,MAAM,KAAK,GAAG;AAAA,IACzB,CAAK,GACM4zG,GAAQ,MAAM;;AACnB,cAAAhrI,KAAAnG,IAAA,KAAK,IAAG81I,QAAR,QAAA3vI,EAAA,KAAAnG,GAAuBu9B,IAChB,KAAK,GAAG,cAAcA,CAAK;AAAA,IACpC,CAAC;AAAA,EACH;AAAA,EACA,cAAcA,GAAO;AACnB,WAAO,KAAK,SAASA,CAAK;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAOjpC,GAAM6vC,GAASlW,GAAS;AAC7B,WAAI+hH,MAAa,CAAC,KAAK,KAAW3gE,KAC3B4kE,GAAY,KAAK,IAAI3/I,GAAM6vC,GAASlW,CAAO;AAAA,EACpD;AACF;AACA,MAAMp2B,WAAkBs/I,GAAe;AAAA,EACrC,UAAUvgH,GAAU;AAClB,WAAO06G,GAAO,MAAM59G,EAAO,MAAMkD,EAAS,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK;AAAA,EACvE;AAAA,EACA,UAAU;AACR,SAAK,GAAG,QAAO;AAAA,EACjB;AACF;AACA,SAAS7b,GAAKwQ,GAAQ+rH,GAAaC,GAAY;AAC7C,EAAKhsH,EAAOqqH,EAAK,MAAGrqH,EAAOqqH,EAAK,IAAoB,oBAAI,IAAG,IAC3DrqH,EAAOqqH,EAAK,EAAE,IAAI0B,CAAW;AAC/B;AACA,SAAS/tF,GAAOh+B,GAAQ+rH,GAAaC,GAAY;AAC/C,EAAKhsH,EAAOsqH,EAAO,MAAGtqH,EAAOsqH,EAAO,IAAoB,oBAAI,IAAG,IAC/DtqH,EAAOsqH,EAAO,EAAE,IAAIyB,CAAW;AACjC;;AACA,MAAME,GAAM;AAAA,EAIV,YAAYC,GAAQ;AAHpB,IAAAvgI,EAAA,YAAK,OAAO,CAAC;AACb,IAAAA,EAAA;AACA,IAAAi9H,EAAA,MAAAuD;AAEE,SAAK,SAASD,GACdnD,EAAA,MAAKoD,IAAe,OAAO,0BAA0BD,CAAM;AAAA,EAC7D;AAAA,EACA,SAAS;AACP,UAAME,IAAQ,CAAA,GAAI3vG,IAAQ,IAAI,MAAM2vG,GAAO,EAAE,KAAK,CAACv/H,GAAGo+H,MAAUmB,EAAMnB,CAAK,EAAC,EAAE,CAAE;AAChF,eAAWngJ,KAAQ,OAAO,KAAK,KAAK,MAAM,GAAG;AAC3C,YAAMwD,IAAS06I,EAAA,MAAKmD,IAAarhJ,CAAI,EAAE;AACvC,MAAAshJ,EAAMthJ,CAAI,IAAIwD,IAASq5I,GAASr5I,EAAO,KAAKmuC,CAAK,CAAC,IAAIixC,GAAO,KAAK,OAAO5iF,CAAI,CAAC;AAAA,IAChF;AACA,WAAOshJ;AAAA,EACT;AAAA,EACA,MAAMF,GAAQjsG,GAAQ;AACpB,eAAWn1C,KAAQ,OAAO,KAAKohJ,CAAM;AACnC,MAAI,CAAClD,EAAA,MAAKmD,IAAarhJ,CAAI,EAAE,QAAQ,CAACm1C,KAAUA,EAAOn1C,CAAI,MACzDohJ,EAAOphJ,CAAI,EAAE,IAAI,KAAK,OAAOA,CAAI,CAAC;AAAA,EAGxC;AACF;AApBEqhJ,KAAA;AAqBF,SAASx5I,GAAS8pC,GAAO;AACvB,SAAOt1B,GAAWs1B,CAAK;AACzB;AACA,SAAS4vG,GAAiBh/G,GAAK;AAC7B,SAAOA,EAAI,QAAQ,mBAAmB,OAAO,EAAE,YAAW;AAC5D;AACA,SAASi/G,GAAiBj/G,GAAK;AAC7B,SAAOA,EAAI,QAAQ,OAAO,CAACpiC,MAAMA,EAAE,CAAC,EAAE,aAAa;AACrD;AACA,SAASshJ,GAAkBl/G,GAAK;AAC9B,SAAOm/G,GAAiBn/G,CAAG,EAAE,QAAQ,OAAO,EAAE;AAChD;AACA,SAASm/G,GAAiBn/G,GAAK;AAC7B,SAAOo/G,GAAmBp/G,EAAI,QAAQ,OAAO,CAACpiC,MAAM,MAAMA,EAAE,CAAC,EAAE,YAAW,CAAE,CAAC;AAC/E;AACA,SAASwhJ,GAAmBp/G,GAAK;AAC/B,SAAOA,EAAI,OAAO,CAAC,EAAE,YAAW,IAAKA,EAAI,MAAM,CAAC;AAClD;AACA,MAAMq/G,KAAoBjmJ,EAAM,cAAc,EAAE,SAAS,KAAI,CAAE;AAC/DimJ,GAAkB,cAAc;AAChC,SAASC,GAAU75G,MAAUthC,GAAU;AACrC,SAAO/K,EAAM,cAAcimJ,GAAkB,UAAU,EAAE,OAAO55G,KAAS,GAAGthC,CAAQ;AACtF;AACA,SAASo7I,KAAgB;AACvB,SAAOnmJ,EAAM,WAAWimJ,EAAiB,EAAE;AAC7C;AACA,SAASG,GAAgBrjJ,GAAS;AAChC,QAAMspC,IAAQ85G,GAAa;AAC3B,SAAOnmJ,EAAM,QAAQ,MAAMo8G,GAAWr5G,EAAQ,IAAIspC,CAAK,GAAG,CAACA,CAAK,CAAC;AACnE;AACA,SAASn6B,GAAO3J,GAAKrB,GAAO;AAC1B,EAAI,OAAOqB,KAAQ,aACjBA,EAAIrB,CAAK,IACAqB,MACTA,EAAI,UAAUrB;AAElB;AACA,SAASiL,MAAeC,GAAM;AAC5B,SAAO,CAACvI,MAASuI,EAAK,QAAQ,CAAC7J,MAAQ2J,GAAO3J,GAAKsB,CAAI,CAAC;AAC1D;AACA,SAASw8I,GAAsBpC,GAAYhoH,GAAS;AAClD,QAAMqqH,IAAmBtmJ,EAAM,WAAW,CAACgE,GAAOuiJ,MAAe;;AAC/D,QAAIC,IAAiBxmJ,EAAM,WAAWimJ,EAAiB,GAAGQ,IAAWzmJ,EAAM,OAAO,IAAI,GAAG0mJ,IAAW1mJ,EAAM,OAAM;AAChH,QAAI,CAAC0mJ,EAAS,SAAS;AACrB,YAAMC,IAASC,GAAmB,GAAI1B,IAAY2B,GAAc5C,GAAY0C,GAAQ3iJ,GAAOwiJ,EAAe,OAAO;AACjH,MAAAG,EAAO,YAAYzB,GACnBwB,EAAS,UAAUC,GACnBF,EAAS,UAAUvB,EAAU;AAAA,IAC/B;AACA,aAAS4B,IAAW;AAClB,UAAIH,IAASD,EAAS,SAASr6G,IAAQm6G,EAAe;AAGtD,UAFA,OAAO,qBAAqBG,EAAO,SAAS,GAC5CA,EAAO,YAAY,IACfA,EAAO,UAAU,GAAG,WAAW;AACjC,cAAMzB,IAAY2B,GAAc5C,GAAY0C,GAAQ3iJ,GAAOqoC,CAAK;AAChE,QAAAs6G,EAAO,YAAYzB,GACnByB,EAAO,WAAW,IAClBA,EAAO,aAAa,IACpBF,EAAS,UAAUvB,EAAU;AAAA,MAC/B;AACA,aAAIyB,EAAO,MACTI,GAAaJ,GAAQA,EAAO,EAAE,GAE3BA,EAAO,eACVz0I,GAAOq0I,GAAYI,EAAO,SAAS,GACnCA,EAAO,aAAa,KAEf,MAAMK,GAAeL,CAAM;AAAA,IACpC;AACA,aAASM,EAAY/xH,GAAI;AACvB,YAAMyxH,IAASD,EAAS;AACxB,UAAI,CAACC,EAAO,YAAY;AACtB,QAAAA,EAAO,KAAKzxH;AACZ;AAAA,MACF;AACA,aAAO,qBAAqByxH,EAAO,WAAW,GAC9CA,EAAO,cAAc,OAAO,sBAAsB,MAAM;AACtD,cAAMO,IAASR,EAAS;AAExB,QADAQ,EAAO,cAAc,IACjBA,EAAO,OAAOhyH,MAClB8xH,GAAeE,CAAM,GACjBhyH,KAAI6xH,GAAaG,GAAQhyH,CAAE,GAC/BgyH,EAAO,KAAKhyH;AAAA,MACd,CAAC;AAAA,IACH;AACA,IAAAl1B,EAAM,UAAU,MAAM;AACpB,YAAM2mJ,IAASD,EAAS;AACxB,oBAAO,qBAAqBC,EAAO,SAAS,GAC5CA,EAAO,YAAY,IACZ,WAAqB;AAC1B,QAAKl4G,GAAWzqC,EAAM,QAAQ,MAC9B,OAAO,qBAAqB2iJ,EAAO,WAAW,GAC9CA,EAAO,cAAc,IACrB,OAAO,qBAAqBA,EAAO,SAAS,GAC5CA,EAAO,YAAY,IACnB,OAAO,qBAAqBA,EAAO,SAAS,GAC5CA,EAAO,YAAY,OAAO,sBAAsB,MAAM;AACpD,UAAAA,EAAO,YAAY,IACnBK,GAAeL,CAAM,GACrBA,EAAO,UAAU,GAAG,QAAO,GAC3BA,EAAO,UAAU,GAAG7C,EAAW,IAAI,MACnC6C,EAAO,YAAY,CAAA,GACnBA,EAAO,eAAe,CAAA,GACtBF,EAAS,UAAU;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,IACF,GAAG,CAAA,CAAE,GACLzmJ,EAAM,UAAUo/I,EAAI;AACpB,QAAIppG,IAAQ0wG,EAAS,SAAS,EAAE,UAAA37I,GAAU,GAAGo8I,EAAW,IAAKnjJ,GAAOinC,IAAQ,CAAA,GAAIm8G,IAAgBpxG,EAAM,WAAWqxG,IAAe,OAAO,KAAKF,CAAW;AACvJ,IAAAnxG,EAAM,YAAY,CAAA;AAClB,eAAW3xC,KAAQ,CAAC,GAAG+iJ,GAAe,GAAGC,CAAY;AACnD,UAAIprH,EAAQ,MAAM,IAAI53B,CAAI;AACxB,QAAA2xC,EAAM,UAAU,OAAO3xC,CAAI,EAAE;AAAA;AAAA,UAE3BqlD,GAAYy9F,EAAY9iJ,CAAI,CAAC,KAAI2J,IAAAi2I,EAAW,UAAX,gBAAAj2I,EAAmB3J,KAAQ8iJ,EAAY9iJ,CAAI;AAAA,QACtF;AAAA,gBACiB8P,IAAA8nB,EAAQ,WAAR,QAAA9nB,EAAgB,IAAI9P,OAASyhB,IAAAmW,EAAQ,aAAR,QAAAnW,EAAkB,KAAKzhB;AAC7D,QAAA2xC,EAAM,UAAU3xC,CAAI,IAAI8iJ,EAAY9iJ,CAAI;AAAA,gBAC/B0hB,IAAAkW,EAAQ,cAAR,QAAAlW,EAAmB,IAAI1hB,OAAS2d,IAAAia,EAAQ,gBAAR,QAAAja,EAAqB,KAAK3d,IAAO;AAC1E,YAAI/B,IAAOsjJ,GAAiBvhJ,EAAK,MAAM,CAAC,CAAC;AACzC,QAAA2xC,EAAM,aAAa1zC,CAAI,IAAI6kJ,EAAY9iJ,CAAI,GACtCgjJ,EAAa,SAAShjJ,CAAI,IAGpB2xC,EAAM,MAAM,GAAC+0C,IAAA/0C,EAAM,cAAN,QAAA+0C,EAAiB,IAAIzoF,QACtC0zC,EAAM,cAAWA,EAAM,YAA4B,oBAAI,IAAG,IAC/DA,EAAM,UAAU,IAAI1zC,CAAI,GACxB0zC,EAAM,GAAG,iBAAiB1zC,GAAM0zC,EAAM,UAAU,OALhDub,IAAAvb,EAAM,OAAN,QAAAub,EAAU,oBAAoBjvD,GAAM0zC,EAAM,cAC1C80C,IAAA90C,EAAM,cAAN,QAAA80C,EAAiB,OAAOxoF;AAAA,MAM5B;AACE,QAAA2oC,EAAM5mC,CAAI,IAAI8iJ,EAAY9iJ,CAAI;AAGlC,WAAA2xC,EAAM,YAAYqxG,GACXnB;AAAA,MACLO;AAAA,MACAzmJ,EAAM,cAAcsnJ,IAAc;AAAA,QAChC,QAAQR;AAAA,MAChB,CAAO;AAAA,MACDr4G,GAAW1jC,CAAQ,IAAIA,KAAA,gBAAAA;AAAA,QACrB;AAAA,UACE,GAAGkgC;AAAA,UACH,0BAA0B;AAAA,UAC1B,KAAKg8G;AAAA,QACf;AAAA,QACQjxG,EAAM;AAAA,UACJjrC;AAAA,IACV;AAAA,EACE,CAAC;AACD,SAAAu7I,EAAiB,cAAcrC,EAAW,OAAO,UAC1CqC;AACT;AACA,SAASgB,GAAa,EAAE,QAAQlG,KAAW;AACzC,SAAAphJ,EAAM,UAAUohJ,GAAS,EAAE,GACpB;AACT;AACA,MAAMmG,KAA0C,oBAAI,IAAG;AACvD,SAASX,KAAsB;AAC7B,QAAM5wG,IAAQ;AAAA,IACZ,IAAI;AAAA,IACJ,WAAW,CAAA;AAAA,IACX,WAAW,CAAA;AAAA,IACX,cAAc,CAAA;AAAA,IACd,aAAa;AAAA,IACb,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,WAAWzK,GAAO;;AAChB,YAAMhqC,IAAQmoD,GAAYne,EAAM,MAAM,IAA4B,CAACA,CAAK,IAA9B,CAACA,EAAM,QAAQA,CAAK;AAC9D,OAAAp3B,KAAAnG,IAAAgoC,EAAM,cAAazK,EAAM,UAAzB,QAAAp3B,EAAA,KAAAnG,GAAiC,GAAGzM;AAAA,IACtC;AAAA,EACJ;AACE,SAAOy0C;AACT;AACA,SAAS+wG,GAAa/wG,GAAO9gB,GAAI;AAC/B,MAAI,EAAA8gB,EAAM,OAAO9gB,KAAM8gB,EAAM,WAE7B;AAAA,QADSA,EAAM,YAAUgxG,GAAehxG,CAAK,GACzCA,EAAM,cAAc;AACtB,MAAKA,EAAM,cAAWA,EAAM,YAA4B,oBAAI,IAAG;AAC/D,iBAAW1zC,KAAQ,OAAO,KAAK0zC,EAAM,YAAY;AAC/C,QAAIA,EAAM,UAAU,IAAI1zC,CAAI,MAC5B4yB,EAAG,iBAAiB5yB,GAAM0zC,EAAM,UAAU,GAC1CA,EAAM,UAAU,IAAI1zC,CAAI;AAAA,IAE5B;AACA,IAAA0zC,EAAM,UAAU,GAAG,OAAO9gB,CAAE,GAC5B8gB,EAAM,YAAY,OAAO,sBAAsB,MAAM;AACnD,MAAAA,EAAM,UAAU,GAAG,QAAO,GAC1BA,EAAM,YAAY;AAAA,IACpB,CAAC,GACDA,EAAM,WAAW;AAAA;AACnB;AACA,SAASgxG,GAAehxG,GAAO;AAC7B,MAAKA,EAAM,aACX,OAAO,qBAAqBA,EAAM,SAAS,GAC3CA,EAAM,YAAY,IAClBA,EAAM,UAAU,GAAG,OAAM,GACzBA,EAAM,WAAW,IACbA,EAAM,MAAMA,EAAM,YAAW;AAC/B,eAAW1zC,KAAQ0zC,EAAM;AACvB,MAAAA,EAAM,GAAG,oBAAoB1zC,GAAM0zC,EAAM,UAAU;AAErD,IAAAA,EAAM,UAAU,MAAK;AAAA,EACvB;AACF;AACA,SAASwxG,GAAWj8G,GAAO;;AACzB,MAAIk8G,IAAeF,GAAwB,IAAIh8G,EAAM,IAAI,GAAGhqC,IAAQmoD,GAAYne,EAAM,MAAM,IAA4B,CAACA,CAAK,IAA9B,CAACA,EAAM,QAAQA,CAAK;AACpH,EAAKk8G,KACHF,GAAwB,IAAIh8G,EAAM,MAAMk8G,IAAe,KAAK3B,GAAkBv6G,EAAM,IAAI,CAAC,EAAE,IAE7Fp3B,KAAAnG,IAAA,KAAK,WAAUy5I,OAAf,QAAAtzI,EAAA,KAAAnG,GAA+B,GAAGzM;AACpC;AACA,SAASslJ,GAAc5C,GAAYjuG,GAAOhyC,GAAOqoC,GAAO;AACtD,QAAM64G,IAAYD,GAAgBhB,GAAY,EAAE,OAAAjgJ,GAAO,OAAAqoC,EAAK,CAAE;AAC9D,SAAA64G,EAAU,GAAGpB,EAAW,IAAI0D,GAAW,KAAKxxG,CAAK,GACjDkvG,EAAU,GAAG,MAAK,GACXA;AACT;AACA,SAASr7D,GAAO3iF,GAAOwgJ,IAAS,IAAO;AACrC,QAAMplJ,IAAO,OAAO4E;AACpB,MAAI5E,MAAS;AACX,WAAI,CAAColJ,KAAUplJ,MAAS,aAAmBunF,GAAO3iF,GAAO,IACrDwgJ,KAAUplJ,MAAS,YAAkB4E,IAAQ,KAC1CA;AAET,QAAMygJ,IAAYD,IAAS,MAAM,KAAKE,IAAkBF,IAAS,WAAW;AAC5E,MAAIG,IAAa3gJ,EAAM,QAAQygJ,CAAS,GAAGG,IAAc5gJ,EAAM,QAAQ,GAAG;AAC1E,MAAI2gJ,IAAa,KAAKC,IAAc,EAAG,QAAO5gJ;AAC9C,MAAI+4B,IAAO,GAAGw5C,IAAM;AACpB,SAAOouE,KAAc,KAAKC,KAAe;AACvC,IAAID,IAAaC,KACX7nH,IAAO4nH,MAAYpuE,KAAOvyE,EAAM,UAAU+4B,GAAM4nH,CAAU,IAC9DpuE,KAAOmuE,GACP3nH,IAAO4nH,IAAa,GACpBA,IAAa3gJ,EAAM,QAAQygJ,GAAW1nH,CAAI,MAEtCA,IAAO6nH,MAAaruE,KAAOvyE,EAAM,UAAU+4B,GAAM6nH,CAAW,IAChEruE,KAAO,SACPx5C,IAAO6nH,IAAc,GACrBA,IAAc5gJ,EAAM,QAAQ,KAAK+4B,CAAI;AAGzC,MAAI4nH,KAAc;AAChB;AACE,MAAI5nH,IAAO4nH,MAAYpuE,KAAOvyE,EAAM,UAAU+4B,GAAM4nH,CAAU,IAC9DpuE,KAAOmuE,GACP3nH,IAAO4nH,IAAa,GACpBA,IAAa3gJ,EAAM,QAAQygJ,GAAW1nH,CAAI;AAAA,WACnC4nH,KAAc;AAAA;AAEvB,WAAOC,KAAe;AACpB,MAAI7nH,IAAO6nH,MAAaruE,KAAOvyE,EAAM,UAAU+4B,GAAM6nH,CAAW,IAChEruE,KAAO,SACPx5C,IAAO6nH,IAAc,GACrBA,IAAc5gJ,EAAM,QAAQ,KAAK+4B,CAAI;AAEzC,SAAOA,IAAO/4B,EAAM,SAASuyE,IAAMvyE,EAAM,UAAU+4B,CAAI,IAAIw5C;AAC7D;AACA,MAAMsuE,KAAwB,uBAAO,CAAC,GAChCC,KAAe;AACrB,SAASC,GAAexkH,GAAQlR,GAAW;AACzC,QAAM21H,IAAU31H,EAAU,KAAI,EAAG,MAAMy1H,EAAY;AACnD,aAAWxjH,KAAS0jH,EAAS,CAAAzkH,EAAO,IAAIe,CAAK;AAC/C;AACA,MAAM2jH,KAAe,WACfC,KAAoB;AAC1B,SAASC,GAAe5kH,GAAQlR,GAAW;AACzC,QAAMqkB,IAASrkB,EAAU,KAAI,EAAG,MAAM61H,EAAiB;AACvD,WAASt+I,IAAI,GAAGA,IAAI8sC,EAAO,QAAQ9sC,KAAK;AACtC,QAAI8sC,EAAO9sC,CAAC,MAAM,GAAI;AACtB,UAAM,CAACzF,GAAM6C,CAAK,IAAI0vC,EAAO9sC,CAAC,EAAE,MAAMq+I,EAAY;AAClD,IAAA1kH,EAAO,IAAIp/B,GAAM6C,CAAK;AAAA,EACxB;AACF;AACA,MAAMohJ,GAAsB;AAAA,EAgB1B,YAAYpD,GAAW;AAfvB,IAAAhgI,EAAA,mBAAY;AACZ,IAAAA,EAAA,0BAAmB;AACnB,IAAAA,EAAA;AACA,IAAAA,EAAA,oBAAa,IAAIqjI,GAAgB;AACjC,IAAArjI,EAAA,eAAQ,IAAIsjI,GAAW;AACvB,IAAAtjI,EAAA,mBAAY,IAAIujI,GAAe;AAW7B,SAAK,IAAIvD;AAAA,EACX;AAAA,EAXA,IAAI,SAAS;AACX,WAAO,KAAK,EAAE,GAAG;AAAA,EACnB;AAAA,EACA,IAAI,SAAS;AACX,WAAO,KAAK,EAAE,GAAG;AAAA,EACnB;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,EAAE;AAAA,EAChB;AAAA,EAIA,QAAQ;AACN,UAAM3iC,IAAW,KAAK,EAAE;AACxB,IAAA+8B,GAAO,MAAM;AACX,MAAI,KAAK,aAAa,OAAO,KAC3B2I,GAAe,KAAK,UAAU,QAAQ,KAAK,aAAa,OAAO,CAAC,GAE9D,KAAK,aAAa,OAAO,KAC3BI,GAAe,KAAK,MAAM,QAAQ,KAAK,aAAa,OAAO,CAAC,GAE9D9lC,EAAS,MAAK,GACdA,EAAS,OAAO,IAAI,GAChB,KAAK,UAAU,SAAS,KAC1B,KAAK,aAAa,SAAS,KAAK,UAAU,SAAQ,CAAE,GAElD,KAAK,MAAM,SAAS,KACtB,KAAK,aAAa,SAAS,KAAK,MAAM,SAAQ,CAAE,GAE9C,KAAK,aACP,KAAK,aAAa,cAAc,EAAE;AAAA,IAEtC,GAAGA,EAAS,KAAK;AAAA,EACnB;AAAA,EACA,aAAal+G,GAAM;AACjB,WAAO,KAAK,WAAW,aAAaA,CAAI;AAAA,EAC1C;AAAA,EACA,aAAaA,GAAM6C,GAAO;AACxB,SAAK,WAAW,aAAa7C,GAAM6C,CAAK;AAAA,EAC1C;AAAA,EACA,aAAa7C,GAAM;AACjB,WAAO,KAAK,WAAW,aAAaA,CAAI;AAAA,EAC1C;AAAA,EACA,gBAAgBA,GAAM;AACpB,WAAO,KAAK,WAAW,gBAAgBA,CAAI;AAAA,EAC7C;AAAA,EACA,CAAC0jJ,EAAK,IAAI;AAAA,EACV;AAAA,EACA,mBAAmB;AAAA,EACnB;AAAA,EACA,sBAAsB;AAAA,EACtB;AAAA,EACA,gBAAgB;AACd,WAAO;AAAA,EACT;AAAA,EACA,YAAY;AACV,WAAO1qE;AAAA,EACT;AAAA,EACA,UAAU;AACR,SAAK,EAAE,QAAO;AAAA,EAChB;AACF;;AACA,MAAMkrE,GAAiB;AAAA,EAAvB;AACE,IAAApG,EAAA,MAAAuG,IAA0B,oBAAI,IAAG;AAAA;AAAA,EACjC,IAAI,SAAS;AACX,WAAOnG,EAAA,MAAKmG,IAAQ;AAAA,EACtB;AAAA,EACA,IAAI,SAAS;AACX,WAAOnG,EAAA,MAAKmG;AAAA,EACd;AAAA,EACA,aAAarkJ,GAAM;AACjB,WAAOk+I,EAAA,MAAKmG,IAAQ,IAAIrkJ,CAAI,KAAK;AAAA,EACnC;AAAA,EACA,aAAaA,GAAM;AACjB,WAAOk+I,EAAA,MAAKmG,IAAQ,IAAIrkJ,CAAI;AAAA,EAC9B;AAAA,EACA,aAAaA,GAAM6C,GAAO;AACxB,IAAAq7I,EAAA,MAAKmG,IAAQ,IAAIrkJ,GAAM6C,IAAQ,EAAE;AAAA,EACnC;AAAA,EACA,gBAAgB7C,GAAM;AACpB,IAAAk+I,EAAA,MAAKmG,IAAQ,OAAOrkJ,CAAI;AAAA,EAC1B;AAAA,EACA,WAAW;AACT,QAAIk+I,EAAA,MAAKmG,IAAQ,SAAS,EAAG,QAAO;AACpC,QAAI77I,IAAS;AACb,eAAW,CAACxI,GAAM6C,CAAK,KAAKq7I,EAAA,MAAKmG;AAC/B,MAAA77I,KAAU,IAAIxI,CAAI,KAAKwlF,GAAO3iF,GAAO,EAAI,CAAC;AAE5C,WAAO2F;AAAA,EACT;AACF;AA3BE67I,KAAA;;AA4BF,MAAMF,GAAY;AAAA,EAAlB;AACE,IAAArG,EAAA,MAAAuG,IAA0B,oBAAI,IAAG;AAAA;AAAA,EACjC,IAAI,SAAS;AACX,WAAOnG,EAAA,MAAKmG,IAAQ;AAAA,EACtB;AAAA,EACA,IAAI,SAAS;AACX,WAAOnG,EAAA,MAAKmG;AAAA,EACd;AAAA,EACA,iBAAiBlE,GAAO;AACtB,WAAOjC,EAAA,MAAKmG,IAAQ,IAAIlE,CAAK,KAAK;AAAA,EACpC;AAAA,EACA,YAAYA,GAAOt9I,GAAO;AACxB,IAAAq7I,EAAA,MAAKmG,IAAQ,IAAIlE,GAAOt9I,KAAS,EAAE;AAAA,EACrC;AAAA,EACA,eAAes9I,GAAO;AACpB,UAAMt9I,IAAQq7I,EAAA,MAAKmG,IAAQ,IAAIlE,CAAK;AACpC,WAAAjC,EAAA,MAAKmG,IAAQ,OAAOlE,CAAK,GAClBt9I,KAAS;AAAA,EAClB;AAAA,EACA,WAAW;AACT,QAAIq7I,EAAA,MAAKmG,IAAQ,SAAS,EAAG,QAAO;AACpC,QAAI77I,IAAS;AACb,eAAW,CAACxI,GAAM6C,CAAK,KAAKq7I,EAAA,MAAKmG;AAC/B,MAAA77I,KAAU,GAAGxI,CAAI,KAAK6C,CAAK;AAE7B,WAAO2F;AAAA,EACT;AACF;AA1BE67I,KAAA;;AA2BF,MAAMD,GAAgB;AAAA,EAAtB;AACE,IAAAtG,EAAA,MAAAuG,IAA0B,oBAAI,IAAG;AAAA;AAAA,EACjC,IAAI,SAAS;AACX,WAAOnG,EAAA,MAAKmG,IAAQ;AAAA,EACtB;AAAA,EACA,IAAI,SAAS;AACX,WAAOnG,EAAA,MAAKmG;AAAA,EACd;AAAA,EACA,OAAOjlH,GAAQ;AACb,eAAWe,KAASf;AAClB,MAAA8+G,EAAA,MAAKmG,IAAQ,IAAIlkH,CAAK;AAAA,EAE1B;AAAA,EACA,SAASA,GAAO;AACd,WAAO+9G,EAAA,MAAKmG,IAAQ,IAAIlkH,CAAK;AAAA,EAC/B;AAAA,EACA,OAAOA,GAAO;AACZ,IAAA+9G,EAAA,MAAKmG,IAAQ,OAAOlkH,CAAK;AAAA,EAC3B;AAAA,EACA,QAAQA,GAAOC,GAAU;AACvB,WAAK89G,EAAA,MAAKmG,IAAQ,IAAIlkH,CAAK,KAC3B+9G,EAAA,MAAKmG,IAAQ,OAAOlkH,CAAK,GACzB+9G,EAAA,MAAKmG,IAAQ,IAAIjkH,CAAQ,GAClB,MAH8B;AAAA,EAIvC;AAAA,EACA,OAAOD,GAAO8L,GAAO;AACnB,WAAIA,MAAU,OAASiyG,EAAA,MAAKmG,IAAQ,IAAIlkH,CAAK,KAAK8L,MAAU,OAC1DiyG,EAAA,MAAKmG,IAAQ,OAAOlkH,CAAK,GAClB,OAEP+9G,EAAA,MAAKmG,IAAQ,IAAIlkH,CAAK,GACf;AAAA,EAEX;AAAA,EACA,WAAW;AACT,WAAO,MAAM,KAAK+9G,EAAA,MAAKmG,GAAO,EAAE,KAAK,GAAG;AAAA,EAC1C;AACF;AApCEA,KAAA;AAqCF,MAAMC,KAAe;AAAA,EACnB,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AAAA,EACV,UAAU;AAAA,EACV,aAAa;AAAA,EACb,aAAa;AAAA,EACb,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,WAAW;AAAA,EACX,SAAS;AAAA,EACT,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,cAAc;AAAA,EACd,aAAa;AAAA,EACb,yBAAyB;AAAA,EACzB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,yBAAyB;AAAA,EACzB,uBAAuB;AAAA,EACvB,SAAS;AAAA,EACT,cAAc;AAAA,EACd,eAAe;AAAA,EACf,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,UAAU;AAAA,EACV,SAAS;AAAA,EACT,WAAW;AAAA,EACX,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,WAAW;AAAA,EACX,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AAAA,EACT,WAAW;AAAA,EACX,UAAU;AAAA,EACV,WAAW;AAAA,EACX,SAAS;AAAA,EACT,aAAa;AAAA,EACb,cAAc;AAAA,EACd,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,QAAQ;AACV;AACA,SAASC,GAAsB3E,GAAYhoH,GAAS;AAClD,WAAS4sH,EAAgB7kJ,GAAO;AAC9B,QAAIqoC,IAAQrsC,EAAM,WAAWimJ,EAAiB,GAAGf,IAAYD,GAAgBhB,GAAY;AAAA,MACvF,OAAAjgJ;AAAA,MACA,OAAOqoC,EAAM;AAAA,IACnB,CAAK,GAAG+2G,IAAO,IAAIkF,GAAsBpD,CAAS,GAAGj6G,IAAQ,CAAA,GAAI,EAAE,OAAAsQ,IAAQ,CAAA,GAAI,UAAAxwC,GAAU,YAAAw7I,GAAY,GAAGY,EAAW,IAAKnjJ;AACpH,QAAIi4B,EAAQ,MAAM;AAChB,iBAAWuoH,KAAS,OAAO,KAAK2C,CAAW;AACzC,QAAKlrH,EAAQ,MAAM,IAAIuoH,CAAK,MAAGv5G,EAAMu5G,CAAK,IAAI2C,EAAY3C,CAAK;AAAA;AAGjE,MAAAv5G,IAAQk8G;AAGV,QADA/D,EAAK,MAAK,GACNA,EAAK,aAAa,OAAO,GAAG;AAC9B,iBAAW,CAAC/+I,GAAM6C,CAAK,KAAKk8I,EAAK,MAAM;AACrC,QAAA7nG,EAAMl3C,EAAK,WAAW,IAAI,IAAIA,IAAOwhJ,GAAiBxhJ,CAAI,CAAC,IAAI6C;AAEjE,MAAAk8I,EAAK,gBAAgB,OAAO;AAAA,IAC9B;AACA,eAAW,CAACh7G,GAAU7V,CAAS,KAAK6wH,EAAK,WAAW,QAAQ;AAC1D,YAAM16I,IAAWigJ,GAAavgH,CAAQ;AACtC,MAAI1/B,MACIA,KAAYuiC,MAChBA,EAAMviC,CAAQ,IAAI6pB,IAEpB6wH,EAAK,gBAAgBh7G,CAAQ;AAAA,IAEjC;AACA,WAAO89G;AAAA,MACL,EAAE,SAAShB,EAAU,GAAG,MAAK;AAAA,MAC7Bz2G,GAAW1jC,CAAQ,IAAIA,KAAA,gBAAAA;AAAA,QACrB;AAAA,UACE,GAAG,OAAO,YAAYq4I,EAAK,WAAW,MAAM;AAAA,UAC5C,GAAGn4G;AAAA,UACH,OAAAsQ;AAAA,QACV;AAAA,QACQ2pG;AAAA,UACEn6I;AAAA,MACJ/K,EAAM,cAAc,OAClBojJ,EAAK,QAAO,GACL,KACR;AAAA,IACP;AAAA,EACE;AACA,SAAAyF,EAAgB,cAAc5E,EAAW,OAAO,UACzC4E;AACT;AACA,SAASC,GAAgB9yG,GAAO;AAC9B,SAAOowG,GAAgBpwG,CAAK;AAC9B;AACA,SAAS+yG,GAAU/H,GAAS14I,GAAK;AAC/B,QAAM,GAAG0gJ,CAAmB,IAAIhpJ,EAAM,SAAQ;AAC9C,SAAAA,EAAM,UAAU,MACPmhJ,GAAS,MAAM;AACpB,IAAAH,EAAO,GACPgI,EAAoB,CAAA,CAAE;AAAA,EACxB,CAAC,GACA,CAAC1gJ,KAAO04I,CAAO,CAAC,GACZA,EAAO;AAChB;AACA,SAASiI,GAAS/hJ,GAAO;AACvB,SAAOA,IAAQ,SAAS;AAC1B;AAaA,SAASgiJ,GAAOx1H,GAAK;AACnB,SAAO,OAAO,KAAKA,CAAG;AACxB;AACA,SAASy1H,KAAkB;AACzB,MAAI/6E,GAASuX;AAKb,SAAO,EAAE,SAJO,IAAI,QAAQ,CAACyjE,GAAKC,MAAQ;AACxC,IAAAj7E,IAAUg7E,GACVzjE,IAAS0jE;AAAA,EACX,CAAC,GACiB,SAAAj7E,GAAS,QAAAuX,EAAM;AACnC;AACA,SAAS2jE,GAAYC,GAAO;AAC1B,SAAO,IAAI,QAAQ,CAACn7E,MAAY,WAAWA,GAASm7E,CAAK,CAAC;AAC5D;AACA,SAASC,GAAuB9xI,GAAM;AACpC,MAAIsmI,GAAW,QAAO3gE;AACtB,MAAIx5C,IAAK,IAAI4lH;AACb,WAASC,KAAYnoJ,GAAM;AAEzB,IADAkoJ,IAAWloJ,GACP,EAAAsiC,KAAM,OACVA,IAAK,OAAO,sBAAsB,MAAM;AACtC,MAAAnsB,EAAK,MAAM,MAAM+xI,CAAQ,GACzB5lH,IAAK,IACL4lH,IAAW;AAAA,IACb,CAAC;AAAA,EACH;AACA,SAAOC;AACT;AACA,MAAMC,KAAsB3L,KAAY3gE,KAAO,OAAO,SAAW,MAAc,yBAAyB,SAAS,OAAO,sBAAsB,CAAClkC,MAAO,OAAO,WAAWA,GAAI,CAAC,IAAIkkC;AACjL,SAASusE,GAAehlH,GAAU3I,GAAS;AACzC,SAAI+hH,KAAkB,QAAQ,QAAO,IAC9B,IAAI,QAAQ,CAAC5vE,MAAY;AAC9B,IAAAu7E,GAAoB,CAACE,MAAa;AAChC,MAAAjlH,KAAA,QAAAA,EAAWilH,IACXz7E,EAAO;AAAA,IACT,GAAGnyC,CAAO;AAAA,EACZ,CAAC;AACH;AA6CA,SAAS6tH,GAAqB7F,GAAYhoH,GAAS;AACjD,SAAI+hH,KACK4K,GAAsB3E,GAAY;AAAA,IACvC,OAAO,IAAI,IAAI,OAAO,KAAKA,EAAW,SAAS,EAAE,CAAC;AAAA,EACxD,CAAK,IAEMoC,GAAsBpC,GAAY;AAAA,IACvC,OAAO,IAAI,IAAI,OAAO,KAAKA,EAAW,SAAS,CAAA,CAAE,CAAC;AAAA,IAClD,QAAQ,IAAI,IAAIhoH,KAAA,gBAAAA,EAAS,MAAM;AAAA,IAC/B,UAAUA,KAAA,gBAAAA,EAAS;AAAA,IACnB,WAAWA,KAAA,gBAAAA,EAAS;AAAA,IACpB,aAAaA,KAAA,gBAAAA,EAAS;AAAA,EAC5B,CAAK;AAEL;AAEA,IAAI3zB,KAAM;AAAA,EACR,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,YAAY;AACd,GACIkpH,KAAS;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIu4B,KAAM;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIhzE,KAAK;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIizE,KAAa,OAAO,SAAW,OAAe,OAAO,OAAO,WAAa,MAAc,OAAO,WAAW,CAAA,GACzGC,KAAS,uBAAuBD,MAAc,OAAO,KAAK1hJ,EAAG,KAAKkpH,GAAO,CAAC,KAAKw4B,MAAcx4B,MAAUu4B,GAAI,CAAC,KAAKC,MAAcD,MAAOhzE,GAAG,CAAC,KAAKizE,MAAcjzE,MAAM,CAAA,GACnKmzE,KAAU;AAAA,EACZ,mBAAmB,SAAS/jJ,GAAS;AACnC,WAAOA,EAAQ8jJ,GAAO3hJ,GAAI,iBAAiB,CAAC,EAAC;AAAA,EAC/C;AAAA,EACA,2BAA2B,SAASnC,GAAS;AAC3C,WAAOA,EAAQ8jJ,GAAO3hJ,GAAI,iBAAiB,CAAC;AAAA,EAC9C;AAAA,EACA,IAAI,iBAAiB;AACnB,WAAO0hJ,GAAWC,GAAO3hJ,GAAI,cAAc,CAAC,EAAE,KAAK0hJ,EAAU;AAAA,EAC/D;AAAA,EACA,IAAI,wBAAwB;AAC1B,WAAO,MAAMC,GAAO3hJ,GAAI,UAAU;AAAA,EACpC;AAAA,EACA,kBAAkB,SAAShG,GAAM6vC,GAASlW,GAAS;AACjD,WAAO+tH,GAAW,iBAAiBC,GAAO3hJ,GAAIhG,CAAI,CAAC,GAAG6vC,GAASlW,CAAO;AAAA,EACxE;AAAA,EACA,qBAAqB,SAAS35B,GAAM6vC,GAASlW,GAAS;AACpD,WAAO+tH,GAAW,oBAAoBC,GAAO3hJ,GAAIhG,CAAI,CAAC,GAAG6vC,GAASlW,CAAO;AAAA,EAC3E;AAAA,EACA,IAAI,oBAAoB;AACtB,WAAO,EAAQ+tH,GAAWC,GAAO3hJ,GAAI,iBAAiB,CAAC;AAAA,EACzD;AAAA,EACA,IAAI,kBAAkByrB,GAAK;AAAA,EAC3B;AAAA,EACA,IAAI,oBAAoB;AACtB,WAAOi2H,GAAWC,GAAO3hJ,GAAI,iBAAiB,CAAC;AAAA,EACjD;AAAA,EACA,IAAI,kBAAkByrB,GAAK;AAAA,EAC3B;AAAA,EACA,IAAI,qBAAqB;AACvB,WAAOi2H,IAAY,OAAOC,GAAO3hJ,GAAI,gBAAgB,GAAG,aAAa;AAAA,EACvE;AAAA,EACA,IAAI,mBAAmB6pC,GAAS;AAC9B,WAAO63G,IAAY,OAAOC,GAAO3hJ,GAAI,gBAAgB,GAAG,YAAW,CAAE,IAAI6pC;AAAA,EAC3E;AAAA,EACA,IAAI,oBAAoB;AACtB,WAAO63G,IAAY,OAAOC,GAAO3hJ,GAAI,eAAe,GAAG,aAAa;AAAA,EACtE;AAAA,EACA,IAAI,kBAAkB6pC,GAAS;AAC7B,WAAO63G,IAAY,OAAOC,GAAO3hJ,GAAI,eAAe,GAAG,YAAW,CAAE,IAAI6pC;AAAA,EAC1E;AACF,GAEIg4G,KAAmBT;AAEvB,SAASA,GAAS5kJ,GAAIsyG,GAAUn7E,GAAS;AACvC,MAAI8a,IAAY,MACZqzG,IAAc,MACdC,IAAWpuH,KAAWA,EAAQ,SAC9BquH,IAAYruH,KAAWA,EAAQ;AAEnC,EAAIouH,KAAW,SACbA,IAAU,KAGRC,KAAY,SACdA,IAAW,CAACD,IAGVA,KAAW,OACbC,IAAW;AAGb,MAAIC,IAAS,WAAW;AACtB,IAAIxzG,MACF,aAAaA,CAAS,GACtBA,IAAY;AAAA,EAEhB,GAEIyzG,IAAQ,WAAW;AACrB,QAAIC,IAAOL;AACX,IAAAG,EAAM,GAEFE,KACFA,EAAI;AAAA,EAER,GAEIC,IAAkB,WAAW;AAC/B,QAAIC,IAAUN,KAAW,CAACtzG,GACtBh0C,IAAU,MACVxB,IAAO;AAgBX,QAdA6oJ,IAAc,WAAW;AACvB,aAAOtlJ,EAAG,MAAM/B,GAASxB,CAAI;AAAA,IAC/B,GAEKw1C,MACHA,IAAY,WAAW,WAAW;AAGhC,UAFAA,IAAY,MAERuzG;AACF,eAAOF,EAAW;AAAA,IAEtB,GAAGhzC,CAAQ,IAGTuzC;AACF,aAAAA,IAAU,IACHP,EAAW;AAAA,EAEtB;AAEA,SAAAM,EAAgB,SAASH,GACzBG,EAAgB,QAAQF,GAEjBE;AACT;AAEA,IAAIE,KAAmB9zF;AAEvB,SAASA,GAAShyD,GAAIiyD,GAAM8zF,GAAW;AACrC,MAAIrtD,IAAU,MACVstD,IAAc,MAEdC,IAAQ,WAAW;AACrB,IAAIvtD,MACF,aAAaA,CAAO,GAEpBstD,IAAc,MACdttD,IAAU;AAAA,EAEd,GAEIgtD,IAAQ,WAAW;AACrB,QAAIC,IAAOK;AACX,IAAAC,EAAK,GAEDN,KACFA,EAAI;AAAA,EAER,GAEIO,IAAkB,WAAW;AAC/B,QAAI,CAACj0F;AACH,aAAOjyD,EAAG,MAAM,MAAM,SAAS;AAGjC,QAAI/B,IAAU,MACVxB,IAAO,WACPopJ,IAAUE,KAAa,CAACrtD;AAkB5B,QAjBAutD,EAAK,GAELD,IAAc,WAAW;AACvB,MAAAhmJ,EAAG,MAAM/B,GAASxB,CAAI;AAAA,IACxB,GAEAi8F,IAAU,WAAW,WAAW;AAG9B,UAFAA,IAAU,MAEN,CAACmtD,GAAS;AACZ,YAAIF,IAAOK;AACX,eAAAA,IAAc,MAEPL,EAAI;AAAA,MACb;AAAA,IACF,GAAG1zF,CAAI,GAEH4zF;AACF,aAAOG,EAAW;AAAA,EAEtB;AAEA,SAAAE,EAAgB,SAASD,GACzBC,EAAgB,QAAQR,GAEjBQ;AACT;AAEA,MAAMjqI,KAAI,CAACkqI,MAAmB,OAAOA,KAAnB,YAAiCA,KAAR,QAAoBA,EAAG,aAAT,GAAmBprJ,KAAI,CAACorJ,GAAIC,OAAQ,CAACA,KAAmBD,MAAb,aAAmCA,MAAd,aAA+BA,MAAX,QAAgB5rJ,KAAI,CAAC4rJ,GAAIE,MAAO;AAC3K,MAAIF,EAAG,eAAeA,EAAG,gBAAgBA,EAAG,cAAcA,EAAG,aAAa;AACxE,UAAMG,IAAK,iBAAiBH,GAAI,IAAI;AACpC,WAAOprJ,GAAEurJ,EAAG,WAAWD,CAAE,KAAKtrJ,GAAEurJ,EAAG,WAAWD,CAAE,MAAM,CAACE,MAAO;AAC5D,YAAMH,KAAM,CAACI,MAAO;AAClB,YAAI,CAACA,EAAG,iBAAiB,CAACA,EAAG,cAAc,YAAa,QAAO;AAC/D,YAAI;AACF,iBAAOA,EAAG,cAAc,YAAY;AAAA,QACtC,QAAa;AACX,iBAAO;AAAA,QACT;AAAA,MACF,GAAGD,CAAE;AACL,aAAO,CAAC,CAACH,MAAOA,EAAG,eAAeG,EAAG,gBAAgBH,EAAG,cAAcG,EAAG;AAAA,IAC3E,GAAGJ,CAAE;AAAA,EACP;AACA,SAAO;AACT,GAAG52I,KAAI,CAAC42I,GAAIC,GAAIC,GAAIC,GAAIG,GAAIC,GAAI1hJ,GAAGtE,MAAMgmJ,IAAKP,KAAMnhJ,IAAIohJ,KAAMM,IAAKP,KAAMnhJ,IAAIohJ,IAAK,IAAIM,KAAMP,KAAMzlJ,KAAK2lJ,KAAMrhJ,KAAKohJ,KAAM1lJ,KAAK2lJ,IAAKK,IAAKP,IAAKG,IAAKthJ,IAAIohJ,KAAM1lJ,IAAI2lJ,KAAMK,IAAKP,KAAMzlJ,IAAI2lJ,IAAKrhJ,IAAIohJ,IAAKK,IAAK,GAAGpsJ,KAAI,CAAC8rJ,MAAO;AACpN,QAAMC,IAAKD,EAAG;AACd,SAAeC,MAAKD,EAAG,YAAW,EAAG,QAAQ;AAC/C,GAAG72I,KAAI,CAAC82I,GAAIM,MAAO;AACjB,MAAI1hJ,GAAG,GAAGlK,GAAGE;AACb,MAAmB,OAAO,WAAtB,IAAgC,QAAO,CAAA;AAC3C,QAAM,EAAE,YAAYN,GAAG,OAAOR,GAAG,QAAQ6mB,GAAG,UAAUpmB,GAAG,4BAA4BC,MAAM8rJ,GAAI,IAAkB,OAAO/rJ,KAArB,aAAyBA,IAAI,CAACwrJ,MAAOA,MAAOxrJ;AAC/I,MAAI,CAACshB,GAAEmqI,CAAE,EAAG,OAAM,IAAI,UAAU,gBAAgB;AAChD,QAAM9rJ,IAAI,SAAS,oBAAoB,SAAS,iBAAiBgR,IAAI,CAAA;AACrE,MAAIwS,IAAIsoI;AACR,SAAOnqI,GAAE6B,CAAC,KAAK,EAAEA,CAAC,KAAK;AACrB,QAAIA,IAAIzjB,GAAEyjB,CAAC,GAAGA,MAAMxjB,GAAG;AACrB,MAAAgR,EAAE,KAAKwS,CAAC;AACR;AAAA,IACF;AACA,IAAQA,KAAR,QAAaA,MAAM,SAAS,QAAQvjB,GAAEujB,CAAC,KAAK,CAACvjB,GAAE,SAAS,eAAe,KAAaujB,KAAR,QAAavjB,GAAEujB,GAAGljB,CAAC,KAAK0Q,EAAE,KAAKwS,CAAC;AAAA,EAC9G;AACA,QAAM,KAAa,KAAa9Y,IAAI,OAAO,mBAApB,OAAsC,SAASA,EAAE,UAA9D,OAAuE,IAAI,YAAYub,KAAavlB,KAAaF,IAAI,OAAO,mBAApB,OAAsC,SAASA,EAAE,WAA9D,OAAwEE,IAAI,aAAa,EAAE,SAASmlB,GAAG,SAAST,EAAC,IAAK,QAAQ,EAAE,QAAQtT,GAAG,OAAO4P,GAAG,KAAKtc,GAAG,OAAO+f,GAAG,QAAQnD,GAAG,MAAM+D,EAAC,IAAK+lI,EAAG,sBAAqB,GAAI,EAAE,KAAKtqI,GAAG,OAAOuF,GAAG,QAAQ7E,GAAG,MAAMsD,EAAC,KAAM,CAACqmI,MAAO;AACjX,UAAMQ,IAAK,OAAO,iBAAiBR,CAAE;AACrC,WAAO,EAAE,KAAK,WAAWQ,EAAG,eAAe,KAAK,GAAG,OAAO,WAAWA,EAAG,iBAAiB,KAAK,GAAG,QAAQ,WAAWA,EAAG,kBAAkB,KAAK,GAAG,MAAM,WAAWA,EAAG,gBAAgB,KAAK,EAAC;AAAA,EAC7L,GAAGP,CAAE;AACL,MAAIhsJ,IAAgBF,MAAZ,WAA+BA,MAAd,YAAkBwF,IAAIoc,IAAc5hB,MAAV,QAAcoiB,IAAIE,IAAI9c,IAAI0M,IAAI,IAAI0P,IAAIU,GAAGqB,IAAiBkD,MAAb,WAAiBV,IAAIrE,IAAI,IAAI8D,IAAIuB,IAAcN,MAAV,QAActB,IAAI4B,IAAIhB,IAAIP;AAC/J,QAAMjE,IAAI,CAAA;AACV,WAASsqI,IAAK,GAAGA,IAAK76I,EAAE,QAAQ66I,KAAM;AACpC,UAAMQ,IAAKr7I,EAAE66I,CAAE,GAAG,EAAE,QAAQM,GAAI,OAAOG,GAAI,KAAKC,GAAI,OAAOC,IAAI,QAAQC,IAAI,MAAMC,GAAE,IAAKL,EAAG,sBAAqB;AAChH,QAAoBjsJ,MAAhB,eAAqBgF,KAAK,KAAK2gB,KAAK,KAAK/D,KAAKiE,KAAKd,KAAK,MAAMknI,MAAOrsJ,KAAK,CAACC,GAAEosJ,CAAE,KAAKjnJ,KAAKmnJ,KAAMvqI,KAAKyqI,MAAM1mI,KAAK2mI,MAAMvnI,KAAKqnI,IAAK,QAAOjrI;AAC1I,UAAMorI,KAAK,iBAAiBN,CAAE,GAAGO,KAAK,SAASD,GAAG,iBAAiB,EAAE,GAAGE,KAAK,SAASF,GAAG,gBAAgB,EAAE,GAAGG,KAAK,SAASH,GAAG,kBAAkB,EAAE,GAAGI,KAAK,SAASJ,GAAG,mBAAmB,EAAE;AAC5L,QAAIK,KAAK,GAAGC,KAAK;AACjB,UAAMC,KAAK,iBAAiBb,IAAKA,EAAG,cAAcA,EAAG,cAAcO,KAAKE,KAAK,GAAGhmI,KAAI,kBAAkBulI,IAAKA,EAAG,eAAeA,EAAG,eAAeQ,KAAKE,KAAK,GAAGhoI,KAAI,iBAAiBsnI,IAAWA,EAAG,gBAAT,IAAuB,IAAIC,IAAKD,EAAG,cAAc,GAAG7lI,KAAI,kBAAkB6lI,IAAWA,EAAG,iBAAT,IAAwB,IAAIF,IAAKE,EAAG,eAAe;AACxT,QAAIrsJ,MAAMqsJ,EAAI,CAAAW,KAAiBptJ,MAAZ,UAAgBE,IAAcF,MAAV,QAAcE,IAAImmB,IAAkBrmB,MAAd,YAAkBqV,GAAEmQ,GAAGA,IAAIa,GAAGA,GAAG4mI,IAAIE,IAAI3nI,IAAItlB,GAAGslB,IAAItlB,IAAIgS,GAAGA,CAAC,IAAIhS,IAAImmB,IAAI,GAAGgnI,KAAiBxmI,MAAZ,UAAgBlD,IAAiBkD,MAAb,WAAiBlD,IAAI,IAAI,IAAckD,MAAV,QAAclD,IAAI,IAAItO,GAAE4Q,GAAGA,IAAI,GAAG,GAAG+mI,IAAIE,IAAIjnI,IAAItC,GAAGsC,IAAItC,IAAI7B,GAAGA,CAAC,GAAGsrI,KAAK,KAAK,IAAI,GAAGA,KAAK5nI,CAAC,GAAG6nI,KAAK,KAAK,IAAI,GAAGA,KAAKpnI,CAAC;AAAA,SAC7S;AACH,MAAAmnI,KAAiBptJ,MAAZ,UAAgBE,IAAIysJ,IAAKM,KAAejtJ,MAAV,QAAcE,IAAI2sJ,KAAKM,KAAKjmI,KAAkBlnB,MAAd,YAAkBqV,GAAEs3I,GAAIE,IAAIN,GAAIU,IAAIE,KAAKjmI,IAAGhnB,GAAGA,IAAIgS,GAAGA,CAAC,IAAIhS,KAAKysJ,IAAKJ,IAAK,KAAKrlI,KAAI,GAAGmmI,KAAiBxmI,MAAZ,UAAgBlD,IAAImpI,KAAKE,KAAkBnmI,MAAb,WAAiBlD,KAAKmpI,KAAKJ,IAAK,KAAKY,KAAK,IAAczmI,MAAV,QAAclD,IAAIipI,KAAKM,KAAKI,KAAKj4I,GAAEy3I,IAAIF,IAAIF,GAAIM,IAAIE,KAAKI,IAAI3pI,GAAGA,IAAI7B,GAAGA,CAAC;AACjT,YAAM,EAAE,YAAYuqI,IAAI,WAAWF,GAAE,IAAKM;AAC1C,MAAAW,KAAWxmI,OAAN,IAAU,IAAI,KAAK,IAAI,GAAG,KAAK,IAAIulI,KAAKiB,KAAKxmI,IAAG6lI,EAAG,eAAeF,IAAK3lI,KAAIM,EAAC,CAAC,GAAGmmI,KAAWloI,OAAN,IAAU,IAAI,KAAK,IAAI,GAAG,KAAK,IAAIknI,KAAKgB,KAAKloI,IAAGsnI,EAAG,cAAcC,IAAKvnI,KAAImoI,EAAE,CAAC,GAAGptJ,KAAKisJ,KAAKiB,IAAIzpI,KAAK0oI,KAAKgB;AAAA,IACpM;AACA,IAAA1rI,EAAE,KAAK,EAAE,IAAI8qI,GAAI,KAAKW,IAAI,MAAMC,IAAI;AAAA,EACtC;AACA,SAAO1rI;AACT;AAEA,IAAI4rI,KAAS,4hDAETC,KAAS,84BAETC,KAAS,kpBAETC,KAAU,goBAEVC,KAAU,6nBAEVC,KAAU,k3BAEVC,KAAU,g8BAEVC,KAAU,0eAEVC,KAAU,urCAEVC,KAA0B,uBAAO,OAAO;AAAA,EAC1C,WAAW;AAAA,EACX,SAASD;AACX,CAAC,GAEGE,KAAU,k8CAEVC,KAAU,4mCAEVC,KAAU,ojCAEVC,KAAU,gsCAEVC,KAAU,qeAEVC,KAAU,+dAEVC,KAAU,q+CAEVC,KAAU,m8CAEVC,KAAU,2iCAEVC,KAAU,0qCAEVC,KAAU,skDAEVC,KAAU,sgBAEVC,KAAU,gnCAEVC,KAAU,4tBAEVC,KAAU,kPAEVC,KAAU,kzDAEVC,KAAU,8sBAEVC,KAAU,wxEAEVC,KAAU,qxEAEVC,KAAU,miEAEVC,KAAW,23BAEXC,KAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACl7Df,SAASC,GAAkB5iJ,GAAK;AAC9B,SAAO,CAACu/C,GAASv/C,CAAG,KAAK,WAAWA,KAAO,YAAYA,KAAOwQ,GAASxQ,EAAI,KAAK,KAAKwQ,GAASxQ,EAAI,MAAM;AAC1G;AAEK,MAACqyI,KAAY,OAAO,WAAa,KAEhCwQ,KAAKxQ,KAAY,MAAK,uCAAW,UAAU,kBAAiB,IAC5DyQ,KAAS,CAACzQ,MAAa,oCAAoC,KAAKwQ,EAAE,GAClEE,KAAY,CAAC1Q,MAAa,kBAAkB,MAAK,uCAAW,aAAY,EAAE,GAC1E2Q,KAAY,CAAC3Q,MAAa,CAAC,CAAC,OAAO,QACnC4Q,KAAY,CAAC5Q,OAAc,CAAC,CAAC,OAAO,UAAUyQ;AACpD,SAASI,KAAkB;AACzB,SAAOC,GAAe,KAAMrgH,GAAW,OAAO,YAAY,MAAM;AAClE;AACA,SAASqgH,KAAkB;AACzB,SAAO,CAAC9Q,MAAa,CAACt0F,GAAY,OAAO,OAAO,WAAW,KAAK,CAACA,GAAY,OAAO,OAAO,YAAY,IAAI;AAC7G;AACA,SAASqlG,GAAiBC,GAAO1sJ,GAAM;AACrC,SAAI07I,KAAkB,MACjBgR,MAAOA,IAAQ,SAAS,cAAc,OAAO,IAC3CA,EAAM,YAAY1sJ,CAAI,EAAE,SAAS;AAC1C;AACA,SAAS2sJ,GAAiBC,GAAO5sJ,GAAM;AACrC,SAAI07I,KAAkB,MACjBkR,MAAOA,IAAQ,SAAS,cAAc,OAAO,IAC3CA,EAAM,YAAY5sJ,CAAI,EAAE,SAAS;AAC1C;AACA,SAAS6sJ,GAAmBD,GAAO;AACjC,SAAIlR,KAAkB,MACjBkR,MAAOA,IAAQ,SAAS,cAAc,OAAO,IAC3CA,EAAM,YAAY,+BAA+B,EAAE,SAAS;AACrE;AACA,SAASE,GAAuBF,GAAO;AACrC,SAAIlR,KAAkB,KACf,CAAC,CAAC,SAAS,2BAA2B,EAACkR,KAAA,QAAAA,EAAO;AACvD;AACA,SAASG,GAAwBH,GAAO;AACtC,SAAIlR,KAAkB,KACfvvG,GAAWygH,KAAA,gBAAAA,EAAO,8BAA8B,KAAKzgH,GAAWygH,KAAA,gBAAAA,EAAO,yBAAyB;AACzG;AACA,eAAeI,KAAkB;AAC/B,QAAMJ,IAAQ,SAAS,cAAc,OAAO;AAC5C,SAAAA,EAAM,SAAS,KACf,MAAM5F,GAAY,CAAC,GACZ4F,EAAM,WAAW;AAC1B;AACA,SAASK,KAAiB;AACxB,SAAOvR,KAAY,UAAS,iCAAQ,wBAAsB,iCAAQ,iBAAe,iCAAQ;AAC3F;AACA,SAASwR,KAAkB;AACzB,SAAOxR,KAAY,UAAS,iCAAQ,kBAAgB,iCAAQ;AAC9D;AACA,SAASyR,KAAiB;AACxB,MAAIzR,GAAW,QAAO;AACtB,QAAM0R,IAAcH,GAAc;AAClC,MAAI7lG,GAAYgmG,CAAW,EAAG,QAAO;AACrC,QAAMC,IAAkBD,KAAejhH,GAAWihH,EAAY,eAAe,KAAKA,EAAY,gBAAgB,2CAA2C,GACnJE,IAAeJ,GAAe,GAC9BK,IAAsBnmG,GAAYkmG,CAAY,KAAK,CAAClmG,GAAYkmG,EAAa,SAAS,KAAKnhH,GAAWmhH,EAAa,UAAU,YAAY,KAAKnhH,GAAWmhH,EAAa,UAAU,MAAM;AAC5L,SAAO,CAAC,CAACD,KAAmB,CAAC,CAACE;AAChC;AACA,SAASC,KAAkB;AACzB,SAAOL,GAAc;AACvB;;AAEA,MAAMM,GAAU;AAAA,EAKd,YAAY3gJ,GAAOC,GAAK;AAJxB,IAAA8yI,EAAA,MAAA6N;AAKE,IAAIhpJ,GAAQoI,CAAK,IACfkzI,EAAA,MAAK0N,IAAU5gJ,KACN,CAACs6C,GAAYt6C,CAAK,KAAK,CAACs6C,GAAYr6C,CAAG,IAChDizI,EAAA,MAAK0N,IAAU,CAAC,CAAC5gJ,GAAOC,CAAG,CAAC,KAE5BizI,EAAA,MAAK0N,IAAU,CAAA;AAAA,EAEnB;AAAA,EAXA,IAAI,SAAS;AACX,WAAOzN,EAAA,MAAKyN,IAAQ;AAAA,EACtB;AAAA,EAUA,MAAM/hJ,GAAO;AACX,WAAOs0I,EAAA,MAAKyN,IAAQ/hJ,CAAK,EAAE,CAAC,KAAK;AAAA,EACnC;AAAA,EACA,IAAIA,GAAO;AACT,WAAOs0I,EAAA,MAAKyN,IAAQ/hJ,CAAK,EAAE,CAAC,KAAK;AAAA,EACnC;AACF;AAnBE+hJ,KAAA;AAoBF,SAASC,GAAmB9mH,GAAO;AACjC,MAAI,CAACA,EAAM,OAAQ,QAAO;AAC1B,MAAI7M,IAAM6M,EAAM,MAAM,CAAC;AACvB,WAASr/B,IAAI,GAAGA,IAAIq/B,EAAM,QAAQr/B,KAAK;AACrC,UAAM5C,IAAQiiC,EAAM,MAAMr/B,CAAC;AAC3B,IAAI5C,IAAQo1B,MAAKA,IAAMp1B;AAAA,EACzB;AACA,SAAOo1B;AACT;AACA,SAAS4zH,GAAiB/mH,GAAO;AAC/B,MAAI,CAACA,EAAM,OAAQ,QAAO;AAC1B,MAAI5M,IAAM4M,EAAM,IAAI,CAAC;AACrB,WAASr/B,IAAI,GAAGA,IAAIq/B,EAAM,QAAQr/B,KAAK;AACrC,UAAM5C,IAAQiiC,EAAM,IAAIr/B,CAAC;AACzB,IAAI5C,IAAQq1B,MAAKA,IAAMr1B;AAAA,EACzB;AACA,SAAOq1B;AACT;AACA,SAAS4zH,GAAuBC,GAAW;AACzC,MAAIA,EAAU,UAAU;AACtB,WAAOA;AAET,EAAAA,EAAU,KAAK,CAAC3wJ,GAAGE,MAAMF,EAAE,CAAC,IAAIE,EAAE,CAAC,CAAC;AACpC,MAAI0wJ,IAAa,CAAA,GAAIv+I,IAAUs+I,EAAU,CAAC;AAC1C,WAAStmJ,IAAI,GAAGA,IAAIsmJ,EAAU,QAAQtmJ,KAAK;AACzC,UAAM49B,IAAO0oH,EAAUtmJ,CAAC;AACxB,IAAIgI,EAAQ,CAAC,KAAK41B,EAAK,CAAC,IAAI,IAC1B51B,IAAU,CAACA,EAAQ,CAAC,GAAG,KAAK,IAAIA,EAAQ,CAAC,GAAG41B,EAAK,CAAC,CAAC,CAAC,KAEpD2oH,EAAW,KAAKv+I,CAAO,GACvBA,IAAU41B;AAAA,EAEd;AACA,SAAA2oH,EAAW,KAAKv+I,CAAO,GAChBu+I;AACT;AACA,SAASC,GAAoBF,GAAWh5C,GAAUlwG,GAAO;AACvD,MAAIkI,IAAQgoG,EAAS,CAAC,GAAG/nG,IAAM+nG,EAAS,CAAC;AACzC,SAAIlwG,IAAQkI,IACH,CAAClI,GAAO,EAAE,IACRA,MAAUkI,IACZgoG,IACEhoG,MAAU,MACnBgoG,EAAS,CAAC,IAAIlwG,GACPkwG,MACElwG,IAAQkI,MACjBgoG,EAAS,CAAC,IAAIlwG,GACVmI,MAAQ,MAAI+gJ,EAAU,KAAKh5C,CAAQ,IAEzC+4C,GAAuBC,CAAS,GACzBh5C;AACT;AAEA,MAAMm5C,KAAmB,+EACnBC,KAA8B,oBAAI,IAAI;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,GACKC,KAAmB,mDACnBC,KAA8B,oBAAI,IAAI;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,GACKC,KAAuB,mBACvBC,KAAwB,kBACxBC,KAAkC,oBAAI,IAAI;AAAA;AAAA,EAE9C;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AACF,CAAC,GACKC,KAAmC,oBAAI,IAAI,CAAC,sBAAsB,CAAC;AACzE,SAASC,GAAW,EAAE,KAAAplJ,GAAK,MAAArJ,KAAQ;AACjC,SAAO4oD,GAASv/C,CAAG,IAAI4kJ,GAAiB,KAAK5kJ,CAAG,KAAK6kJ,GAAY,IAAIluJ,CAAI,KAAKqJ,EAAI,WAAW,OAAO,KAAKrJ,MAAS,iBAAiBA,MAAS;AAC9I;AACA,SAAS0uJ,GAAWrlJ,GAAK;AACvB,SAAOu/C,GAASv/C,EAAI,GAAG,IAAI8kJ,GAAiB,KAAK9kJ,EAAI,GAAG,KAAK+kJ,GAAY,IAAI/kJ,EAAI,IAAI,KAAKA,EAAI,IAAI,WAAW,OAAO,KAAKA,EAAI,SAAS,kBAAkBslJ,GAAStlJ,CAAG,MAAMqyI,MAAamR,GAAkB,KAAMxjJ,EAAI,SAAS;AAC9N;AACA,SAASslJ,GAAS,EAAE,KAAAtlJ,GAAK,MAAArJ,KAAQ;AAC/B,SAAO4oD,GAASv/C,CAAG,KAAKglJ,GAAqB,KAAKhlJ,CAAG,KAAKklJ,GAAgB,IAAIvuJ,CAAI;AACpF;AACA,SAAS4uJ,GAAU,EAAE,KAAAvlJ,GAAK,MAAArJ,KAAQ;AAChC,SAAO4oD,GAASv/C,CAAG,KAAKilJ,GAAsB,KAAKjlJ,CAAG,KAAKmlJ,GAAiB,IAAIxuJ,CAAI;AACtF;AACA,SAAS6uJ,GAAiBxlJ,GAAK;AAC7B,SAAOu/C,GAASv/C,EAAI,GAAG,MAAMolJ,GAAWplJ,CAAG,KAAKqlJ,GAAWrlJ,CAAG,KAAKslJ,GAAStlJ,CAAG;AACjF;AACA,SAASylJ,GAAczlJ,GAAK;AAC1B,SAAO,CAACqyI,MAAa,OAAO,OAAO,cAAgB,OAAeryI,aAAe,OAAO;AAC1F;AAEA,SAAS0lJ,IAAkBC,GAAS17H,GAAQ;AAC1C,QAAM+U,IAAM,IAAI,IAAI2mH,CAAO;AAC3B,aAAWhpJ,KAAO,OAAO,KAAKstB,CAAM;AAClC,IAAA+U,EAAI,aAAa,IAAIriC,GAAKstB,EAAOttB,CAAG,IAAI,EAAE;AAE5C,SAAOqiC,EAAI,SAAQ;AACrB;AACA,SAAS4mH,GAAW5mH,GAAK6mH,IAAM,cAAc;AAC3C,MAAIxT,GAAW,QAAO;AACtB,QAAMyT,IAAS,SAAS,cAAc,cAAc9mH,CAAG,IAAI;AAC3D,MAAI,CAAC42G,GAAOkQ,CAAM,EAAG,QAAO;AAC5B,QAAMnnF,IAAO,SAAS,cAAc,MAAM;AAC1C,SAAAA,EAAK,MAAMknF,GACXlnF,EAAK,OAAO3/B,GACZ2/B,EAAK,cAAc,QACnB,SAAS,KAAK,OAAOA,CAAI,GAClB;AACT;AACA,MAAMonF,KAAkB,CAAA;AACxB,SAASC,GAAWhmJ,GAAK;AACvB,MAAI+lJ,GAAgB/lJ,CAAG,EAAG,QAAO+lJ,GAAgB/lJ,CAAG,EAAE;AACtD,QAAM6C,IAAU26I,GAAe,GAAIsI,IAAS,SAAS,cAAc,eAAe9lJ,CAAG,IAAI;AACzF,MAAI,CAAC41I,GAAOkQ,CAAM;AAChB,WAAAjjJ,EAAQ,QAAO,GACRA,EAAQ;AAEjB,EAAAkjJ,GAAgB/lJ,CAAG,IAAI6C;AACvB,QAAMs5B,IAAS,SAAS,cAAc,QAAQ;AAC9C,SAAAA,EAAO,MAAMn8B,GACbm8B,EAAO,SAAS,MAAM;AACpB,IAAAt5B,EAAQ,QAAO,GACf,OAAOkjJ,GAAgB/lJ,CAAG;AAAA,EAC5B,GACAm8B,EAAO,UAAU,MAAM;AACrB,IAAAt5B,EAAQ,OAAM,GACd,OAAOkjJ,GAAgB/lJ,CAAG;AAAA,EAC5B,GACA,WAAW,MAAM,SAAS,KAAK,OAAOm8B,CAAM,GAAG,CAAC,GACzCt5B,EAAQ;AACjB;AACA,SAASojJ,GAAsBpZ,GAAa;AAC1C,SAAOA,MAAgB,oBAAoB,YAAYttF,GAASstF,CAAW,IAAI,gBAAgB;AACjG;AACA,SAASqZ,GAAgB;AAAA,EACvB,OAAAnnD;AAAA,EACA,KAAA/+F;AAAA,EACA,UAAAmmJ;AACF,GAAG;AACD,QAAMnnH,IAAMmf,GAAUgoG,CAAQ,KAAKA,MAAa,KAAKnmJ,EAAI,MAAMu/C,GAAS4mG,CAAQ,IAAIA,IAAWA,KAAA,gBAAAA,EAAU;AACzG,SAAKC,GAAoB,EAAE,KAAApnH,GAAK,KAAAh/B,GAAK,UAAAmmJ,EAAQ,CAAE,IACxC;AAAA,IACL,KAAAnnH;AAAA,IACA,MAAM,CAACmf,GAAUgoG,CAAQ,KAAK,CAAC5mG,GAAS4mG,CAAQ,MAAKA,KAAA,gBAAAA,EAAU,aAAYpnD,EAAM,YAAW,KAAM;AAAA,EACtG,IAJ2D;AAK3D;AACA,SAASqnD,GAAoB;AAAA,EAC3B,KAAApnH;AAAA,EACA,KAAAh/B;AAAA,EACA,UAAAmmJ;AACF,GAAG;AACD,SAAO5mG,GAASvgB,CAAG,MAAMmnH,KAAYA,MAAa,MAAQf,GAAWplJ,CAAG,KAAKqlJ,GAAWrlJ,CAAG;AAC7F;AAEA,MAAMqmJ,KAAe,OAAO,CAAC,GAAGC,KAAc,OAAO,CAAC,GAAGC,KAAqB,OAAO,CAAC,GAAGC,KAAW,OAAO,CAAC,GAAGC,KAAiB,OAAO,CAAC,GAAGC,KAAS,OAAO,CAAC,GAAGC,KAAa,OAAO,CAAC,GAC9KC,KAAkB;AAAA,EACtB,aAAaP;AAAA,EACb,YAAYC;AAAA,EACZ,kBAAkBC;AAAA,EAClB,SAASC;AAAA,EACT,cAAcC;AAAA,EACd,QAAQC;AAAA,EACR,WAAWC;AACb;AAQA,SAASE,GAAYC,GAAKh9F,GAAM;AAC9B,SAAOA,KAAQg9F,EAAI,aAAah9F,IAAOg9F,EAAI;AAC7C;AACA,SAASC,GAAqBC,GAAQ51H,GAAM8Q,GAAU;AACpD,MAAI+kH,IAAe,MAAMvmH,IAAQgzG,GAAQ;AACzC,WAASwT,IAAe;AACtB,UAAMC,IAAQ5nG,GAASnuB,CAAI,IAAI,CAACA,CAAI,IAAIA,GAAMqwE,IAAQulD,EAAO,QAAO,EAAG,KAAK,CAACI,MAAWD,EAAM,SAASC,EAAO,IAAI,KAAKA,EAAO,SAAS,SAAS;AAChJ,QAAI3lD,MAAUwlD,GACd;AAAA,UAAI,CAACxlD,GAAO;AACV,QAAAv/D,EAAS,IAAI,GACb+kH,IAAe;AACf;AAAA,MACF;AACA,MAAIxlD,EAAM,cAAc,IACtBv/D,EAASu/D,CAAK,KAEdv/D,EAAS,IAAI,GACbyxG,GAAO,MAAM;AACX,cAAM0T,IAAM/Q;AAAA,UACV70C;AAAA,UACA;AAAA,UACA,MAAM;AACJ,YAAAv/D,EAASu/D,CAAK,GACd4lD,EAAG;AAAA,UACL;AAAA,UACA,EAAE,MAAM,GAAI;AAAA,QACtB;AAAA,MACM,GAAG3mH,CAAK,IAEVumH,IAAexlD;AAAA;AAAA,EACjB;AACA,SAAAylD,EAAY,GACL5Q,GAAY0Q,GAAQ,eAAeE,CAAY;AACxD;;AAgBA,MAAMI,WAAkBjR,GAAa;AAAA,EAuDnC,YAAY5+I,GAAM;AAChB,UAAK;AAxDT,IAAA++I,EAAA,MAAA+Q;AAIE,IAAAhuI,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA,YAAK;AACL,IAAAA,EAAA,eAAQ;AACR,IAAAA,EAAA,kBAAW;AACX,IAAAA,EAAA;AACA,IAAAA,EAAA,iBAAU;AACV,IAAAi9H,EAAA,MAAAgR,IAAW;AACX,IAAAhR,EAAA,MAAAiR,IAAe;AACf,IAAAjR,EAAA,MAAAkR,IAAQ;AACR,IAAAlR,EAAA,MAAAmR,IAAY,CAAA;AACZ,IAAAnR,EAAA,MAAAoR,IAAW,CAAA;AACX,IAAApR,EAAA,MAAAqR,IAAQ,CAAA;AACR,IAAArR,EAAA,MAAAsR,IAAc,CAAA;AAEd;AAAA,IAAAvuI,EAAA,MAACa,IAA8B;AAE/B;AAAA,IAAAb,EAAA,MAACY;AAED;AAAA,IAAAZ,EAAA,MAAC/Q,IAAgC;AAEjC;AAAA,IAAA+Q,EAAA,MAAClX,IAA0B;AA8BzB,eAAW+a,KAAQ,OAAO,KAAK3lB,CAAI,EAAG,MAAK2lB,CAAI,IAAI3lB,EAAK2lB,CAAI;AAC5D,IAAK,KAAK,SAAM,KAAK,OAAO,QACxB,CAACi1H,MAAa56I,EAAK,UACrBshJ,EAAA,MAAKwO,IAAAQ,IAAL,WAAmBtwJ,KACTA,EAAK,QACf,KAAKmvJ,GAAgB,UAAU,IAAI;AAAA,EAEvC;AAAA,EA/DA,OAAO,SAASnlD,GAAO;AACrB,WAAO,OAAOA,EAAM,IAAI,IAAIA,EAAM,IAAI,IAAIA,EAAM,OAAOA,EAAM,SAAS,GAAG;AAAA,EAC3E;AAAA,EAyBA,IAAI,WAAW;AACb,WAAOm1C,EAAA,MAAK+Q;AAAA,EACd;AAAA,EACA,IAAI,UAAU;AACZ,WAAO/Q,EAAA,MAAKgR;AAAA,EACd;AAAA,EACA,IAAI,OAAO;AACT,WAAOhR,EAAA,MAAKiR;AAAA,EACd;AAAA,EACA,IAAI,aAAa;AACf,WAAOjR,EAAA,MAAKkR;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,aAAa;AACf,WAAO,KAAKlB,GAAgB,UAAU;AAAA,EACxC;AAAA,EACA,IAAI,OAAO;AACT,WAAOhQ,EAAA,MAAK8Q;AAAA,EACd;AAAA,EACA,IAAI,KAAKphG,GAAM;AACb,SAAK,QAAQA,CAAI;AAAA,EACnB;AAAA,EAWA,OAAOwgG,GAAKnkG,GAAS;;AACnB,QAAIxkD,IAAI,GAAGkgD,IAASu4F,EAAA,MAAKiR,IAAM;AAC/B,SAAK1pJ,IAAI,GAAGA,IAAIkgD,KAAiB,EAAAyoG,EAAI,WAAWlQ,EAAA,MAAKiR,IAAM1pJ,CAAC,EAAE,YAAtCA,IAAK;AAC7B,IAAIA,MAAMkgD,IAAQu4F,EAAA,MAAKiR,IAAM,KAAKf,CAAG,IAChClQ,EAAA,MAAKiR,IAAM,OAAO1pJ,GAAG,GAAG2oJ,CAAG,GAC1BA,aAAe,iBACnBzkJ,IAAA,KAAKukJ,GAAgB,MAAM,MAA3B,QAAAvkJ,EAA8B,MAAM,OAAOykJ,IAE7C,KAAK,cAAc,IAAI7Q,GAAS,WAAW,EAAE,QAAQ6Q,GAAK,SAAAnkG,EAAO,CAAE,CAAC,GAChEkkG,GAAYC,GAAKlQ,EAAA,MAAK6Q,GAAY,KACpC,KAAKb,GAAgB,gBAAgB,EAAEhQ,EAAA,MAAK6Q,KAAc9kG,CAAO;AAAA,EAErE;AAAA,EACA,UAAUmkG,GAAKnkG,GAAS;;AACtB,UAAMrgD,IAAQs0I,EAAA,MAAKiR,IAAM,QAAQf,CAAG;AACpC,QAAIxkJ,KAAS,GAAG;AACd,YAAMgkG,IAAWswC,EAAA,MAAKkR,IAAY,SAAShB,CAAG;AAC9C,MAAAlQ,EAAA,MAAKiR,IAAM,OAAOvlJ,GAAO,CAAC,IAC1BD,IAAA,KAAKukJ,GAAgB,MAAM,MAA3B,QAAAvkJ,EAA8B,MAAM,UAAUykJ,IAC9C,KAAK,cAAc,IAAI7Q,GAAS,cAAc,EAAE,QAAQ6Q,GAAK,SAAAnkG,EAAO,CAAE,CAAC,GACnE2jD,KACF,KAAKsgD,GAAgB,gBAAgB,EAAEhQ,EAAA,MAAK6Q,KAAc9kG,CAAO;AAAA,IAErE;AAAA,EACF;AAAA,EACA,QAAQ2D,GAAM3D,GAAS;;AACrB,IAAIi0F,EAAA,MAAK8Q,QAAUphG,MACnBqwF,EAAA,MAAK+Q,IAAQphG,IACTA,MAAS,cACXqwF,EAAA,MAAKmR,IAAc,CAAA,IACnB/O,EAAA,MAAKwO,IAAAS,IAAL,cACS,KAAK,eAAe,IAC7B,KAAKpB,GAAgB,gBAAgB,EAAEhQ,EAAA,MAAK6Q,KAAc9kG,CAAO,IAEjEo2F,EAAA,MAAKwO,IAAAU,IAAL,YAEF,KAAK,cAAc,IAAIhS,GAAS,eAAe,EAAE,QAAQ,MAAM,SAAAtzF,EAAO,CAAE,CAAC,IACzEtgD,IAAA,KAAKukJ,GAAgB,kBAArB,QAAAvkJ,EAAA;AAAA,EACF;AAAA;AAAA,EAEA,EApFC+X,KAAAwsI,GAAgB,YAEhBzsI,KAAAysI,GAAgB,aAEhBp+I,KAAAo+I,GAAgB,cAEhBvkJ,KAAAukJ,GAAgB,QA8EhBA,GAAgB,iBAAgB,EAAEsB,GAAavlG,GAAS;AAEvD,QADAg0F,EAAA,MAAK8Q,IAAeS,IAChB,KAAK,SAAS,cAAc,CAACtR,EAAA,MAAKiR,IAAM,OAAQ;AACpD,UAAMM,IAAa,CAAA;AACnB,aAAShqJ,IAAI,GAAGkgD,IAASu4F,EAAA,MAAKiR,IAAM,QAAQ1pJ,IAAIkgD,GAAQlgD,KAAK;AAC3D,YAAM2oJ,IAAMlQ,EAAA,MAAKiR,IAAM1pJ,CAAC;AACxB,MAAI0oJ,GAAYC,GAAKoB,CAAW,KAAGC,EAAW,KAAKrB,CAAG;AAAA,IACxD;AACA,QAAIsB,IAAUD,EAAW,WAAWvR,EAAA,MAAKkR,IAAY;AACrD,QAAI,CAACM;AACH,eAASjqJ,IAAI,GAAGA,IAAIgqJ,EAAW,QAAQhqJ;AACrC,YAAI,CAACy4I,EAAA,MAAKkR,IAAY,SAASK,EAAWhqJ,CAAC,CAAC,GAAG;AAC7C,UAAAiqJ,IAAU;AACV;AAAA,QACF;AAAA;AAGJ,IAAAzR,EAAA,MAAKmR,IAAcK,IACfC,KAASrP,EAAA,MAAKwO,IAAAS,IAAL,WAAwBrlG;AAAA,EACvC;AAAA;AAAA,EAEA,CAACikG,GAAgB,OAAO,IAAI;AAC1B,IAAAjQ,EAAA,MAAK6Q,IAAW,KACZ5Q,EAAA,MAAK8Q,QAAU,cAAY3O,EAAA,MAAKwO,IAAAU,IAAL;AAAA,EACjC;AA6EF;AAjMET,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eAnBFP,KAAA,eAkIEQ,KAAa,SAACtwJ,GAAM;AAClB,SAAO,oBAAgB,EAAA,KAAA,CAAA/D,MAAAA,EAAA,CAAA,EAAE,KAAK,CAAC,EAAE,WAAA20J,GAAW,QAAAC,GAAQ,WAAAC,QAAgB;AAClE,IAAI,CAAChpG,GAAS9nD,EAAK,OAAO,KAAKA,EAAK,SAAS,UAC3CshJ,EAAA,MAAKwO,IAAAiB,IAAL,WAAgB/wJ,EAAK,SAAS6wJ,GAAQC,IAClC,KAAK,eAAe,KAAGxP,EAAA,MAAKwO,IAAAkB,IAAL,cAE3BJ,EAAU5wJ,EAAK,SAAS,EAAE,MAAMA,EAAK,KAAI,CAAE,EAAE,KAAK,CAAC,EAAE,MAAAixJ,GAAM,SAAAC,EAAO,MAAO;AACvE,MAAAhS,EAAA,MAAKkR,IAAQa,IACb/R,EAAA,MAAKiR,IAAWe,IAChB5P,EAAA,MAAKwO,IAAAkB,IAAL;AAAA,IACF,CAAC;AAAA,EAEL,CAAC;AACH,GACMR,KAAK,iBAAG;;AACZ,MAAI,GAACrR,EAAA,MAAK4Q,OAAY,KAAKZ,GAAgB,UAAU,IAAI,IAGzD;AAAA,QAFA,KAAKA,GAAgB,UAAU,IAAI,GACnC,KAAK,cAAc,IAAI3Q,GAAS,YAAY,CAAC,GACzC,CAAC,KAAK,KAAK;AACb,MAAA8C,EAAA,MAAKwO,IAAAkB,IAAL;AACA;AAAA,IACF;AACA,QAAI;AACF,YAAM,EAAE,eAAAt0E,GAAe,QAAAm0E,GAAQ,WAAAC,EAAS,IAAK,MAAM,OAAO,oBAAgB,EAAA,KAAA,CAAA70J,MAAAA,EAAA,CAAA,GAAGm5I,KAAcxqI,IAAA,KAAKukJ,GAAgB,iBAArB,gBAAAvkJ,EAAA,YACrFrB,IAAW,MAAM,KAAK,KAAK;AAAA,QAC/B,SAAS,KAAK,SAAS,SAAS,EAAE,gBAAgB,mBAAkB,IAAK;AAAA,QACzE,aAAailJ,GAAsBpZ,CAAW;AAAA,MACtD,CAAO;AACD,UAAI,KAAK,SAAS;AAChB,QAAAkM,EAAA,MAAKwO,IAAAiB,IAAL,WAAgB,OAAO,MAAMxnJ,GAAU,KAAI,GAAIsnJ,GAAQC;AAAA,WAClD;AACL,cAAM,EAAE,QAAAllG,GAAQ,UAAAulG,GAAU,SAAAD,GAAS,MAAAD,MAAS,MAAMv0E,EAAcnzE,GAAU;AAAA,UACxE,MAAM,KAAK;AAAA,UACX,UAAU,KAAK;AAAA,QACzB,CAAS;AACD,cAAIwH,IAAA66C,EAAO,CAAC,MAAR,gBAAA76C,EAAW,UAAS;AACtB,gBAAM66C,EAAO,CAAC;AAEd,QAAAszF,EAAA,MAAKgR,IAAYiB,IACjBjS,EAAA,MAAKiR,IAAWe,IAChBhS,EAAA,MAAKkR,IAAQa;AAAA,MAEjB;AACA,MAAA3P,EAAA,MAAKwO,IAAAkB,IAAL;AAAA,IACF,SAAShzJ,GAAO;AACd,MAAAsjJ,EAAA,MAAKwO,IAAAsB,IAAL,WAAYpzJ;AAAA,IACd;AAAA;AACF,GACAgzJ,KAAM,WAAG;AAEP,MADA,KAAK7B,GAAgB,UAAU,IAAI,GAC/B,CAAC,KAAK,OAAO,KAAK,SAAS,OAAO;AACpC,UAAMkC,IAAS,KAAKlC,GAAgB,MAAM;AAC1C,QAAIkC,KAAU,CAACA,EAAO;AACpB,iBAAWhC,KAAOlQ,EAAA,MAAKiR,IAAO,CAAAiB,EAAO,MAAM,OAAOhC,CAAG;AAAA,EAEzD;AACA,QAAMiC,IAAY,IAAI9S,GAAS,MAAM;AACrC,OAAK2Q,GAAgB,gBAAgB,EAAEhQ,EAAA,MAAK6Q,KAAcsB,CAAS,GACnE,KAAK,cAAcA,CAAS;AAC9B,GACAF,KAAM,SAACpzJ,GAAO;AACZ,OAAKmxJ,GAAgB,UAAU,IAAI,GACnC,KAAK,cAAc,IAAI3Q,GAAS,SAAS,EAAE,QAAQxgJ,EAAK,CAAE,CAAC;AAC7D,GACA+yJ,KAAU,SAAC10E,GAAMw0E,GAAQC,GAAW;AAClC,MAAI;AACF,UAAM,EAAE,SAAAI,GAAS,MAAAD,EAAI,IAAKM,GAAsBl1E,GAAMw0E,GAAQC,CAAS;AACvE,IAAA5R,EAAA,MAAKiR,IAAWe,IAChBhS,EAAA,MAAKkR,IAAQa;AAAA,EACf,SAASjzJ,GAAO;AACd,IAAAsjJ,EAAA,MAAKwO,IAAAsB,IAAL,WAAYpzJ;AAAA,EACd;AACF,GACAuyJ,KAAkB,SAACrlG,GAAS;AAC1B,OAAK,cAAc,IAAIszF,GAAS,cAAc,EAAE,SAAAtzF,EAAO,CAAE,CAAC;AAC5D;AAEF,MAAMsmG,KAAY;AAClB,SAASC,GAAmBznD,GAAO;AACjC,SAAOwnD,GAAU,KAAKxnD,EAAM,IAAI;AAClC;AACA,SAASunD,GAAsBl1E,GAAMq1E,GAAKC,GAAQ;AAChD,QAAMhlJ,IAAUm7C,GAASu0B,CAAI,IAAI,KAAK,MAAMA,CAAI,IAAIA;AACpD,MAAI60E,IAAU,IAAID,IAAO,CAAA;AACzB,SAAItkJ,EAAQ,WAAWglJ,MACrBT,IAAUvkJ,EAAQ,QAAQ,IAAI,CAACilJ,MAAW,OAAO,OAAO,IAAID,EAAM,GAAIC,CAAM,CAAC,KAE3EjlJ,EAAQ,QAAQ/I,GAAQ+I,CAAO,OACjCskJ,KAAQrtJ,GAAQ+I,CAAO,IAAIA,IAAUA,EAAQ,MAAM,OAAO,CAACklJ,MAAa94I,GAAS84I,EAAS,SAAS,KAAK94I,GAAS84I,EAAS,OAAO,CAAC,EAAE,IAAI,CAACxC,MAAQ,OAAO,OAAO,IAAIqC,EAAI,GAAG,GAAG,EAAE,GAAGrC,CAAG,CAAC,IAEjL,EAAE,SAAA6B,GAAS,MAAAD,EAAI;AACxB;AAEA,MAAMa,KAAa,IAAI1P,GAAM;AAAA,EAC3B,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,aAAa,CAAA;AAAA,EACb,UAAU;AAAA,EACV,eAAe;AAAA,EACf,WAAW;AAAA,EACX,UAAU,IAAIuK,GAAS;AAAA,EACvB,SAAS;AAAA,EACT,eAAe;AAAA,EACf,eAAe;AAAA,EACf,iBAAiBlB,GAAe;AAAA,EAChC,qBAAqB;AAAA,EACrB,SAAS;AAAA,EACT,eAAe;AAAA,EACf,aAAa;AAAA,EACb,UAAU;AAAA,EACV,IAAI,cAAc;AAChB,WAAOH,MAAa,KAAK,cAAc,YAAY,CAAC,KAAK,eAAe,CAACxE,GAAQ,qBAAqB,KAAK;AAAA,EAC7G;AAAA,EACA,IAAI,iBAAiB;AACnB,WAAO,KAAK,YAAY,KAAK;AAAA,EAC/B;AAAA,EACA,iBAAiB;AAAA,EACjB,IAAI,iBAAiB;AACnB,WAAO,CAAC,KAAK;AAAA,EACf;AAAA,EACA,aAAa;AAAA,EACb,OAAO;AAAA,EACP,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,IAAI,OAAO;AACT,WAAO,KAAK,gBAAgB,KAAK;AAAA,EACnC;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ,IAAI6F,GAAS;AAAA,EACrB,SAAS;AAAA,EACT,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,SAAS;AAAA,EACT,cAAc;AAAA,EACd,WAAW,CAAA;AAAA,EACX,SAAS;AAAA,EACT,aAAa;AAAA,EACb,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,UAAU,IAAIA,GAAS;AAAA,EACvB,SAAS;AAAA,EACT,QAAQ,EAAE,KAAK,IAAI,MAAM,GAAE;AAAA,EAC3B,SAAS,CAAA;AAAA,EACT,SAAS;AAAA,EACT,YAAY,CAAA;AAAA,EACZ,WAAW;AAAA,EACX,IAAI,cAAc;AAChB,WAAO,KAAK,WAAW,OAAO8E,EAAkB,EAAE,SAAS;AAAA,EAC7D;AAAA,EACA,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,iBAAiB;AAAA,EACjB,IAAI,cAAc;AAChB,WAAO,KAAK,QAAQ,KAAK,WAAW,KAAK,gBAAgB,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,kBAAkB,KAAK,eAAe,KAAK,QAAQ,CAAC,IAAI,KAAK;AAAA,EACtJ;AAAA,EACA,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,IAAI,WAAW;AACb,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,iBAAiB,KAAK;AAAA,EACpC;AAAA,EACA,IAAI,SAAS;AACX,WAAO,KAAK,kBAAkB,KAAK;AAAA,EACrC;AAAA,EACA,IAAI,WAAW;AACb,WAAO,KAAK,qBAAqB,YAAY,KAAK,mBAAmB,KAAK;AAAA,EAC5E;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,uBAAuB,YAAY,KAAK,qBAAqB,KAAK;AAAA,EAChF;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,gBAAgB;AAClB,UAAMzlJ,IAAQ6gJ,GAAmB,KAAK,QAAQ,KAAK;AACnD,WAAO,KAAK,IAAI7gJ,GAAO,KAAK,aAAa;AAAA,EAC3C;AAAA,EACA,IAAI,cAAc;AAChB,UAAMC,IAAM6gJ,GAAiB,KAAK,QAAQ,KAAK;AAC/C,WAAO,KAAK,IAAI,KAAK,aAAa,KAAK,IAAI,GAAG7gJ,IAAM,KAAK,aAAa,CAAC;AAAA,EACzE;AAAA,EACA,IAAI,iBAAiB;AACnB,WAAO,KAAK,IAAI,GAAG,KAAK,cAAc,KAAK,aAAa;AAAA,EAC1D;AAAA,EACA,IAAI,gBAAgB;AAClB,QAAI,KAAK,aAAa,KAAK,gBAAgB;AACzC,aAAO,KAAK,IAAI,GAAG,KAAK,cAAc,KAAK,aAAa;AAE1D,UAAMD,IAAQ6gJ,GAAmB,KAAK,QAAQ,KAAK;AACnD,WAAO,KAAK,IAAI7gJ,GAAO,KAAK,aAAa;AAAA,EAC3C;AAAA,EACA,IAAI,cAAc;AAChB,QAAI,KAAK,mBAAmB,EAAG,QAAO,KAAK;AAC3C,UAAMC,IAAM,KAAK,mBAAmB,IAAI,KAAK,mBAAmB,KAAK,UAAU6gJ,GAAiB,KAAK,QAAQ,KAAK,QAAW;AAC7H,WAAO,KAAK,cAAc,IAAI,KAAK,IAAI,KAAK,aAAa7gJ,CAAG,IAAIA;AAAA,EAClE;AAAA,EACA,IAAI,iBAAiB;AACnB,UAAM8b,IAAS,KAAK,cAAc,KAAK;AACvC,WAAQ,MAAMA,CAAM,IAA0B,QAAtB,KAAK,IAAI,GAAGA,CAAM;AAAA,EAC5C;AAAA;AAAA,EAEA,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,IAAI,qBAAqB;AACvB,WAAO,KAAK,uBAAuB,aAAa,KAAK,wBAAwB;AAAA,EAC/E;AAAA,EACA,IAAI,wBAAwB;AAC1B,WAAO,KAAK,uBAAuB,iBAAiB,KAAK,wBAAwB;AAAA,EACnF;AAAA;AAAA,EAEA,SAAS;AAAA,EACT,aAAa;AAAA,EACb,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,oBAAoB;AAAA;AAAA,EAEpB,oBAAoB;AAAA;AAAA,EAEpB,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,IAAI,UAAU;AACZ,WAAO,yBAAyB,KAAK,KAAK,UAAU,KAAK,OAAO,SAAS,KAAK,QAAQ,MAAM,CAAC,KAAK,aAAa,KAAK,YAAY,KAAK;AAAA,EACvI;AAAA,EACA,IAAI,OAAO;AACT,WAAO,KAAK,WAAW,SAAS,MAAM,KAAK,CAAC,OAAO,SAAS,KAAK,QAAQ;AAAA,EAC3E;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,WAAW,IAAI,KAAK,IAAI,GAAG,KAAK,cAAc,KAAK,iBAAiB,IAAI;AAAA,EACnH;AAAA,EACA,IAAI,WAAW;AACb,WAAO,KAAK,SAAS,CAAC,KAAK,WAAW,CAAC,KAAK,sBAAsB,KAAK,eAAe,KAAK;AAAA,EAC7F;AAAA,EACA,IAAI,iBAAiB;AACnB,WAAO,KAAK,QAAQ,OAAO,SAAS,KAAK,WAAW,IAAI,KAAK,cAAc,KAAK,gBAAgB;AAAA,EAClG;AAAA,EACA,IAAI,YAAY;AACd,WAAO,OAAO,KAAK,KAAK,UAAU;AAAA,EACpC;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,IAAI,KAAK,uBAAuB,KAAK,gBAAgB;AAAA,EACnE;AAAA;AAAA,EAEA,aAAa;AAAA,EACb,eAAe;AAAA,EACf,eAAe;AAAA,EACf,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,YAAY;AACd,CAAC,GACKgqI,KAA8C,oBAAI,IAAI;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,GACKC,KAAsC,oBAAI,IAAI;AAAA,EAClD,GAAGD;AAAA,EACH;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,SAASE,GAAoBC,GAAQC,IAAwB,IAAO;AAClE,QAAM/7G,IAAS+7G,IAAwBJ,KAA8BC;AACrE,EAAAF,GAAW,MAAMI,GAAQ,CAACvsI,MAASywB,EAAO,IAAIzwB,CAAI,CAAC,GACnDq2H,GAAI;AACN;AACA,SAASoW,GAAU//F,GAAMkwF,GAAO;AAC9B,QAAM8P,IAAchgG,IAAOkwF,EAAM,cAAa,GAAIn9B,IAAU,KAAK,MAAM/yD,CAAI,MAAM,KAAK,MAAMkwF,EAAM,eAAe,GAAG+P,IAAQ,KAAK,MAAMD,CAAW,MAAM,KAAK,MAAM9P,EAAM,YAAW,CAAE;AACtL,SAAIn9B,IACKm9B,EAAM,cAAa,IAExB+P,IACK/P,EAAM,YAAW,IAEtBA,EAAM,UAAS,KAAMA,EAAM,cAAa,IAAK,KAAK8P,IAAc9P,EAAM,YAAW,IAAKA,EAAM,cAAa,IACpGA,EAAM,cAAa,IAErB,KAAK,IAAI,KAAK,IAAIA,EAAM,kBAAkB,KAAK8P,CAAW,GAAG9P,EAAM,YAAW,IAAK,GAAG;AAC/F;AAEA,MAAMgQ,KAAen1I,GAAa;AAClC,SAASo1I,KAAkB;AACzB,SAAOl1I,GAAWi1I,EAAY;AAChC;;AAEA,MAAME,GAAmB;AAAA,EAKvB,YAAYr4E,IAAS,QAAQ;AAL/B,IAAA2kE,EAAA,MAAA2T;AACE,IAAA3T,EAAA,MAAAC,IAAU;AACV,IAAAD,EAAA,MAAA4T,IAAU;AACV,IAAA5T,EAAA,MAAA6T,IAAkB;AAClB,IAAA7T,EAAA,MAAA8T;AAEE,IAAA3T,EAAA,MAAK2T,IAAUz4E;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,UAAUjkD,GAAQ;AAChB,IAAA+oH,EAAA,MAAKF,IAAU7oH;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,UAAUA,GAAQ;;AAChB,WAAIgpH,EAAA,MAAKwT,MAAgBxT,EAAA,MAAKwT,QAC7B/nJ,IAAAurB,KAAUgpH,EAAA,MAAKH,QAAf,QAAAp0I,EAAyB;AAAA,MACxB,IAAI4zI,GAAS,qBAAqB;AAAA,QAChC,QAAQ,CAACsU,MAAW,KAAM5T,EAAA,MAAKyT,IAAUG;AAAA,QACzC,SAAS;AAAA,QACT,UAAU;AAAA,MAClB,CAAO;AAAA,OAEI3T,EAAA,MAAKwT;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAUG,GAAQ;AAChB,IAAA5T,EAAA,MAAKyT,IAAUG;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa5nG,GAAS;AACpB,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,uBAAuB7nG;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,mBAAmBA,GAAS;AAC1B,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,8BAA8B7nG;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAeA,GAAS;AACtB,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,yBAAyB7nG;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkBA,GAAS;AACzB,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,6BAA6B7nG;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAIA,KAAKA,GAAS;AACZ,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,sBAAsB7nG;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAIA,MAAMA,GAAS;AACb,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,uBAAuB7nG;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAIA,KAAKA,GAAS;AACZ,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,sBAAsB7nG;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOA,GAAS;AACd,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,wBAAwB7nG;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAgB/0B,GAAQ+0B,GAAS;AAC/B,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,kCAAkC7nG,GAAS/0B;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAeA,GAAQ+0B,GAAS;AAC9B,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,iCAAiC7nG,GAAS/0B;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,sBAAsB68H,GAAU9nG,GAAS;AACvC,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,kCAAkC7nG,GAAS8nG;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,wBAAwB9nG,GAAS;AAC/B,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,oCAAoC7nG;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,sBAAsBA,GAAS;AAC7B,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,2BAA2B7nG;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,qBAAqBA,GAAS;AAC5B,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,0BAA0B7nG;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQmH,GAAMnH,GAAS;AACrB,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,yBAAyB7nG,GAASmH;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,KAAKA,GAAMnH,GAAS;AAClB,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,sBAAsB7nG,GAASmH;AAAA,EACvD;AAAA,EACA,eAAenH,GAAS;AACtB,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,2BAA2B7nG;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,eAAe+nG,GAAU/nG,GAAS;AAChC,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,iCAAiC7nG,GAAS+nG;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,gBAAgB/2E,GAAWhxB,GAAS;AAClC,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,mCAAmC7nG,GAASgxB;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,cAAcg3E,GAAShoG,GAAS;AAC9B,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,iCAAiC7nG,GAASgoG;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,aAAaC,GAAQjoG,GAAS;AAC5B,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,+BAA+B7nG,GAAS,KAAK,IAAI,GAAG,KAAK,IAAI,GAAGioG,CAAM,CAAC;AAAA,EAC/F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAiBtoJ,GAAOqgD,GAAS;AAC/B,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,oCAAoC7nG,GAASrgD;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,cAAcA,GAAOqgD,GAAS;AAC5B,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,gCAAgC7nG,GAASrgD;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA,EAIA,mBAAmBqgD,GAAS;AAC1B,SAAK,cAAc,IAAIA,CAAO;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,oBAAoBrgD,GAAOgkD,GAAM3D,GAAS;AACxC,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,mCAAmC7nG,GAAS;AAAA,MAChE,OAAArgD;AAAA,MACA,MAAAgkD;AAAA,IACN;AAAA,EACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,mBAAmBukG,GAAMloG,GAAS;AAChC,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,6BAA6B7nG,GAASkoG;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,gBAAgBC,GAAMnoG,GAAS;AAC7B,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,mCAAmC7nG,GAASmoG;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAIA,eAAenoG,GAAS;AACtB,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,iCAAiC7nG;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,cAAcA,GAAS;AACrB,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,gCAAgC7nG;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAIA,aAAaA,GAAS;AACpB,UAAM4nG,IAAS,KAAK,UAAU5nG,KAAA,gBAAAA,EAAS,MAAM;AAC7C,IAAK4nG,MAGDA,EAAO,MAAM,SAAQ,KAAK,KAAK5nG,CAAO,IACrC,KAAK,MAAMA,CAAO;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAIA,eAAeA,GAAS;AACtB,UAAM4nG,IAAS,KAAK,UAAU5nG,KAAA,gBAAAA,EAAS,MAAM;AAC7C,IAAK4nG,MAGAA,EAAO,SAAS,UAGnBA,EAAO,SAAS,KAAK,GAAG5nG,CAAO,IAF/B4nG,EAAO,SAAS,KAAK,GAAG5nG,CAAO;AAAA,EAInC;AAAA;AAAA;AAAA;AAAA,EAIA,YAAYA,GAAS;AACnB,UAAM4nG,IAAS,KAAK,UAAU5nG,KAAA,gBAAAA,EAAS,MAAM;AAC7C,IAAK4nG,MAGDA,EAAO,MAAM,QAAO,KAAK,OAAO5nG,CAAO,IACtC,KAAK,KAAKA,CAAO;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAiB/0B,GAAQ+0B,GAAS;AAChC,UAAM4nG,IAAS,KAAK,UAAU5nG,KAAA,gBAAAA,EAAS,MAAM;AAC7C,IAAK4nG,MAGDA,EAAO,MAAM,aAAY,KAAK,eAAe38H,GAAQ+0B,CAAO,IAC3D,KAAK,gBAAgB/0B,GAAQ+0B,CAAO;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,uBAAuBA,GAAS;AAC9B,UAAM4nG,IAAS,KAAK,UAAU5nG,KAAA,gBAAAA,EAAS,MAAM;AAC7C,IAAK4nG,MAGDA,EAAO,MAAM,mBAAkB,KAAK,qBAAqB5nG,CAAO,IAC/D,KAAK,sBAAsBA,CAAO;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAIA,aAAaA,GAAS;AACpB,UAAM4nG,IAAS,KAAK,UAAU5nG,KAAA,gBAAAA,EAAS,MAAM;AAC7C,QAAI,CAAC4nG;AACH;AAEF,QAAIvD,IAASuD,EAAO,MAAM,YAAYjoJ,IAAQs0I,EAAA,MAAKyT;AACnD,KAAI,CAACrD,EAAO1kJ,CAAK,KAAK,CAAC4mJ,GAAmBlC,EAAO1kJ,CAAK,CAAC,OACrDA,IAAQ,KAENA,MAAU,OACZA,IAAQ0kJ,EAAO,UAAU,CAACvlD,MAAUynD,GAAmBznD,CAAK,KAAKA,EAAM,OAAO,IAE5En/F,MAAU,OACZA,IAAQ0kJ,EAAO,UAAU,CAACvlD,MAAUynD,GAAmBznD,CAAK,CAAC,IAE3Dn/F,KAAS,KAAG,KAAK,oBAAoBA,GAAO,WAAWqgD,CAAO,GAClEg0F,EAAA,MAAK0T,IAAkB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAIA,gBAAgB1nG,GAAS;AACvB,UAAM4nG,IAAS,KAAK,UAAU5nG,KAAA,gBAAAA,EAAS,MAAM;AAC7C,QAAI,CAAC4nG;AACH;AAEF,UAAMvD,IAASuD,EAAO,MAAM,YAAY9oD,IAAQ8oD,EAAO,MAAM;AAC7D,QAAI9oD,GAAO;AACT,YAAMn/F,IAAQ0kJ,EAAO,QAAQvlD,CAAK;AAClC,WAAK,oBAAoBn/F,GAAO,YAAYqgD,CAAO,GACnDg0F,EAAA,MAAK0T,IAAkB/nJ;AAAA,IACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAIA,eAAeqgD,GAAS;AACtB,UAAM4nG,IAAS,KAAK,UAAU5nG,KAAA,gBAAAA,EAAS,MAAM;AAC7C,IAAK4nG,MAGDA,EAAO,MAAM,YACf,KAAK,gBAAe,IAEpB,KAAK,aAAY;AAAA,EAErB;AAAA,EACA,sBAAsBQ,GAAapoG,GAAS;AAC1C,IAAAo2F,EAAA,MAAKoR,IAAAK,IAAL,WAAsB,kCAAkC7nG,GAASooG;AAAA,EACnE;AAyBF;AA1cEtU,KAAA,eACA2T,KAAA,eACAC,KAAA,eACAC,KAAA,eAJFH,KAAA,eAmbEK,KAAgB,SAAC7zJ,GAAMgsD,GAASlc,GAAQ;;AACtC,QAAMkuC,IAAU,IAAIshE,GAASt/I,GAAM;AAAA,IACjC,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAA8vC;AAAA,IACA,SAAAkc;AAAA,EACN,CAAK;AACD,MAAI/0B,KAAS+0B,KAAA,gBAAAA,EAAS,WAAU;AAChC,EAAI/0B,KAAUA,aAAkB1zB,OAAW0zB,IAASA,EAAO,KAE3DA,IADwB,CAACA,KAAUA,MAAW,YAAYA,MAAW,UAAUA,MAAW,SAAS,UAAQvrB,IAAAu0I,EAAA,MAAKwT,QAAL,gBAAA/nJ,EAAc,OAAMurB,aAAkB,QAAQ,CAACgpH,EAAA,MAAKwT,IAAQ,GAAG,SAASx8H,CAAM,IAC9JgpH,EAAA,MAAKH,SAAWjuI,IAAA,KAAK,UAAS,MAAd,gBAAAA,EAAkB,MAAKolB,KAAUgpH,EAAA,MAAKH,KAC7EG,EAAA,MAAKwT,MACHzzJ,MAAS,wBAAwB,CAACigJ,EAAA,MAAKwT,IAAQ,MAAM,UACvDx8H,KAAA,QAAAA,EAAQ,cAAc+mD,KAEtBiiE,EAAA,MAAKwT,IAAQ,aAAa,QAAQzzJ,GAAM,MAAMi3B,KAAA,gBAAAA,EAAQ,cAAc+mD,EAAQ,IAG9E/mD,KAAA,QAAAA,EAAQ,cAAc+mD;AAE1B,GACAq2E,KAAgB,SAACp/F,GAAQ;AACzB;;AAGF,MAAMq/F,GAAkB;AAAA,EAAxB;AACE,IAAA1xI,EAAA,kBAAW;AACX,IAAAA,EAAA,iBAAU;AACV,IAAAi9H,EAAA,MAAA0U,IAAQ;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,WAAW;AAAA,MACX,MAAM;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACb;AAgFE,IAAA3xI,EAAA,2BAAoBilI,GAAiB,KAAK,SAAS,KAAK,IAAI,GAAG,GAAG;AAAA;AAAA,EA/ElE,MAAM,YAAY;AAChB,WAAO5H,EAAA,MAAKsU,IAAM;AAAA,EACpB;AAAA,EACA,MAAM,UAAUN,GAAQ;AACtB,IAAAhU,EAAA,MAAKsU,IAAM,SAASN,GACpB,KAAK,KAAI;AAAA,EACX;AAAA,EACA,MAAM,WAAW;AACf,WAAOhU,EAAA,MAAKsU,IAAM;AAAA,EACpB;AAAA,EACA,MAAM,SAASC,GAAO;AACpB,IAAAvU,EAAA,MAAKsU,IAAM,QAAQC,GACnB,KAAK,KAAI;AAAA,EACX;AAAA,EACA,MAAM,UAAU;AACd,WAAOvU,EAAA,MAAKsU,IAAM;AAAA,EACpB;AAAA,EACA,MAAM,QAAQphG,GAAMshG,GAAO;AACzB,UAAM3pE,IAAc33B,IAAO;AAC3B,IAAA8sF,EAAA,MAAKsU,IAAM,OAAQzpE,IAAqB,OAAP33B,GAC7B23B,KAAe2pE,IAAO,KAAK,SAAQ,IAClC,KAAK,kBAAiB;AAAA,EAC7B;AAAA,EACA,MAAM,UAAU;AACd,WAAOxU,EAAA,MAAKsU,IAAM;AAAA,EACpB;AAAA,EACA,MAAM,QAAQxzH,GAAM;AAClB,IAAAk/G,EAAA,MAAKsU,IAAM,OAAOxzH,GAClB,KAAK,KAAI;AAAA,EACX;AAAA,EACA,MAAM,cAAc;AAClB,WAAOk/G,EAAA,MAAKsU,IAAM;AAAA,EACpB;AAAA,EACA,MAAM,YAAY/qJ,GAAS;AACzB,IAAAy2I,EAAA,MAAKsU,IAAM,WAAW/qJ,GACtB,KAAK,KAAI;AAAA,EACX;AAAA,EACA,MAAM,kBAAkB;AACtB,WAAOy2I,EAAA,MAAKsU,IAAM;AAAA,EACpB;AAAA,EACA,MAAM,gBAAgBL,GAAM;AAC1B,IAAAjU,EAAA,MAAKsU,IAAM,OAAOL,GAClB,KAAK,KAAI;AAAA,EACX;AAAA,EACA,MAAM,eAAe;AACnB,WAAOjU,EAAA,MAAKsU,IAAM;AAAA,EACpB;AAAA,EACA,MAAM,aAAaJ,GAAM;AACvB,IAAAlU,EAAA,MAAKsU,IAAM,YAAYJ,GACvB,KAAK,KAAI;AAAA,EACX;AAAA,EACA,MAAM,kBAAkB;AACtB,WAAOlU,EAAA,MAAKsU,IAAM;AAAA,EACpB;AAAA,EACA,MAAM,gBAAgBG,GAAS;AAC7B,IAAAzU,EAAA,MAAKsU,IAAM,UAAUG,GACrB,KAAK,KAAI;AAAA,EACX;AAAA,EACA,SAASrrJ,GAAKsrJ,GAASC,IAAW,cAAc;AAC9C,UAAMC,IAAYD,IAAW,aAAa,QAAQA,CAAQ,IAAI,MAAME,IAAYH,IAAU,aAAa,QAAQA,CAAO,IAAI;AAC1H,SAAK,WAAWC,GAChB,KAAK,UAAUD,GACf3U,EAAA,MAAKuU,IAAQ;AAAA,MACX,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,WAAW;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,MACT,GAAGM,IAAY,KAAK,MAAMA,CAAS,IAAI,CAAA;AAAA,MACvC,MAAMC,IAAY,CAACA,IAAY;AAAA,IACrC;AAAA,EACE;AAAA,EACA,OAAO;AACL,QAAIpZ,MAAa,CAAC,KAAK,SAAU;AACjC,UAAMhyI,IAAO,KAAK,UAAU,EAAE,GAAGu2I,EAAA,MAAKsU,KAAO,MAAM,QAAQ;AAC3D,iBAAa,QAAQ,KAAK,UAAU7qJ,CAAI;AAAA,EAC1C;AAAA,EAEA,WAAW;AACT,QAAIgyI,MAAa,CAAC,KAAK,QAAS;AAChC,UAAMhyI,KAAQu2I,EAAA,MAAKsU,IAAM,QAAQ,GAAG,SAAQ;AAC5C,iBAAa,QAAQ,KAAK,SAAS7qJ,CAAI;AAAA,EACzC;AACF;AA/FE6qJ,KAAA;AAiGF,MAAMQ,KAAM,OAAO,CAAC,GAAGC,KAAS,OAAO,CAAC,GAAGC,KAAQ,OAAO,CAAC,GAAGC,KAAS,OAAO,CAAC,GAAGC,KAAW,OAAO,CAAC,GAAGC,KAAe,OAAO,CAAC,GAAGC,KAAW,OAAO,CAAC,GAAGC,KAAY,OAAO,CAAC,GAAGC,KAAiB,OAAO,CAAC,GAClMC,KAAa;AAAA,EACjB,KAAKT;AAAA,EACL,QAAQC;AAAA,EACR,OAAOC;AAAA,EACP,QAAQC;AAAA,EACR,UAAUC;AAAA,EACV,aAAaC;AAAA,EACb,SAASC;AAAA,EACT,UAAUC;AAAA,EACV,cAAcC;AAChB;;AAEA,MAAMh0F,WAAam+E,GAAa;AAAA,EAAhC;AAAA;AACE,IAAA98H,EAAA,eAAQ,CAAA;AAER;AAAA,IAAAA,EAAA,MAAClX,IAAuB;AAAA;AAAA,EACxB,IAAI,SAAS;AACX,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EACA,IAAI,WAAW;AACb,WAAO,KAAK8pJ,GAAW,QAAQ;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQh2J,GAAM;AACZ,WAAO,KAAK,MAAM,QAAQA,CAAI;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ+hC,GAAI;AACV,WAAIA,MAAO,KAAW,OACf,KAAK,MAAM,KAAK,CAAC/hC,MAASA,EAAK,OAAO+hC,CAAE,KAAK;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA,EAIA,UAAU;AACR,WAAO,CAAC,GAAG,KAAK,KAAK;AAAA,EACvB;AAAA,EACA,EA1BC71B,KAAA8pJ,GAAW,UA0BX,OAAO,SAAQ,IAAI;AAClB,WAAO,KAAK,MAAM,OAAM;AAAA,EAC1B;AAAA;AAAA,EAEA,CAACA,GAAW,GAAG,EAAEh2J,GAAMwsD,GAAS;AAC9B,UAAMrgD,IAAQ,KAAK,MAAM;AAQzB,IAPM,KAAKA,KAAS,QAClB,OAAO,eAAe,MAAMA,GAAO;AAAA,MACjC,MAAM;AACJ,eAAO,KAAK,MAAMA,CAAK;AAAA,MACzB;AAAA,IACR,CAAO,GAEC,MAAK,MAAM,SAASnM,CAAI,MAC5B,KAAK,MAAM,KAAKA,CAAI,GACpB,KAAK,cAAc,IAAI8/I,GAAS,OAAO,EAAE,QAAQ9/I,GAAM,SAAAwsD,EAAO,CAAE,CAAC;AAAA,EACnE;AAAA;AAAA,EAEA,CAACwpG,GAAW,MAAM,EAAEh2J,GAAMwsD,GAAS;;AACjC,UAAMrgD,IAAQ,KAAK,MAAM,QAAQnM,CAAI;AACrC,IAAImM,KAAS,OACXD,IAAA,KAAK8pJ,GAAW,cAAhB,QAAA9pJ,EAAA,WAA4BlM,GAAMwsD,IAClC,KAAK,MAAM,OAAOrgD,GAAO,CAAC,GAC1B,KAAK,cAAc,IAAI2zI,GAAS,UAAU,EAAE,QAAQ9/I,GAAM,SAAAwsD,EAAO,CAAE,CAAC;AAAA,EAExE;AAAA;AAAA,EAEA,CAACwpG,GAAW,KAAK,EAAExpG,GAAS;;AAC1B,eAAWxsD,KAAQ,CAAC,GAAG,KAAK,KAAK,EAAG,MAAKg2J,GAAW,MAAM,EAAEh2J,GAAMwsD,CAAO;AACzE,SAAK,QAAQ,CAAA,GACb,KAAKwpG,GAAW,WAAW,EAAE,IAAOxpG,CAAO,IAC3CtgD,IAAA,KAAK8pJ,GAAW,aAAhB,QAAA9pJ,EAAA;AAAA,EACF;AAAA;AAAA,EAEA,CAAC8pJ,GAAW,WAAW,EAAEC,GAAUzpG,GAAS;AAC1C,IAAI,KAAKwpG,GAAW,QAAQ,MAAMC,MAClC,KAAKD,GAAW,QAAQ,IAAIC,GAC5B,KAAK,cAAc,IAAInW,GAAS,mBAAmB,EAAE,QAAQmW,GAAU,SAAAzpG,EAAO,CAAE,CAAC;AAAA,EACnF;AACF;AAEA,MAAM0pG,KAAW,OAAO,CAAC;AACzB,MAAMC,WAAmBp0F,GAAK;AAAA,EAC5B,IAAI,WAAW;AACb,WAAO,KAAK,MAAM,KAAK,CAAC/hE,MAASA,EAAK,QAAQ,KAAK;AAAA,EACrD;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,MAAM,UAAU,CAACA,MAASA,EAAK,QAAQ;AAAA,EACrD;AAAA;AAAA,EAEA,CAACg2J,GAAW,QAAQ,EAAEh2J,GAAMwsD,GAAS;AACnC,SAAKwpG,GAAW,MAAM,EAAEh2J,GAAM,IAAOwsD,CAAO;AAAA,EAC9C;AAAA;AAAA,EAEA,CAACwpG,GAAW,GAAG,EAAEh2J,GAAMwsD,GAAS;AAC9B,IAAAxsD,EAAKk2J,EAAQ,IAAI,IACjB,OAAO,eAAel2J,GAAM,YAAY;AAAA,MACtC,MAAM;AACJ,eAAO,KAAKk2J,EAAQ;AAAA,MACtB;AAAA,MACA,KAAK,CAAC/mJ,MAAa;;AACjB,QAAI,KAAK,cACTjD,IAAA,KAAK8pJ,GAAW,kBAAhB,QAAA9pJ,EAAA,YACA,KAAK8pJ,GAAW,MAAM,EAAEh2J,GAAMmP,CAAQ;AAAA,MACxC;AAAA,IACN,CAAK,GACD,MAAM6mJ,GAAW,GAAG,EAAEh2J,GAAMwsD,CAAO;AAAA,EACrC;AAAA;AAAA,EAEA,CAACwpG,GAAW,MAAM,EAAEh2J,GAAMmP,GAAUq9C,GAAS;AAC3C,QAAIr9C,OAAanP,KAAA,gBAAAA,EAAOk2J,KAAW;AACnC,UAAMhrF,IAAO,KAAK;AAClB,IAAIlrE,MAAMA,EAAKk2J,EAAQ,IAAI/mJ,KACVA,IAA2B+7D,MAASlrE,IAAzBkrE,MAASlrE,OAE/BkrE,MAAMA,EAAKgrF,EAAQ,IAAI,KAC3B,KAAK;AAAA,MACH,IAAIpW,GAAS,UAAU;AAAA,QACrB,QAAQ;AAAA,UACN,MAAA50E;AAAA,UACA,SAAS,KAAK;AAAA,QAC1B;AAAA,QACU,SAAA1e;AAAA,MACV,CAAS;AAAA,IACT;AAAA,EAEE;AACF;AAEA,MAAM4pG,WAAuBD,GAAW;AACxC;AAEA,SAASxxC,GAAM5Y,GAAKsqD,IAAgB,GAAG;AACrC,SAAO,OAAOtqD,EAAI,QAAQsqD,CAAa,CAAC;AAC1C;AACA,SAASC,GAAyBvqD,GAAK;;AACrC,WAAO7/F,IAAA,OAAO6/F,CAAG,EAAE,MAAM,GAAG,EAAE,CAAC,MAAxB,gBAAA7/F,EAA2B,WAAU;AAC9C;AACA,SAASqqJ,GAAY/7H,GAAKp1B,GAAOq1B,GAAK;AACpC,SAAO,KAAK,IAAID,GAAK,KAAK,IAAIC,GAAKr1B,CAAK,CAAC;AAC3C;AAEA,SAASoxJ,GAAcpjI,GAAIqW,GAAO;AAChC,QAAMhS,IAASgS,EAAM,aAAY,EAAG,CAAC;AACrC,SAAO23G,GAAU3pH,CAAM,KAAKrE,EAAG,SAASqE,CAAM;AAChD;AACA,MAAMg/H,KAA0B,oBAAI,IAAG;AACvC,IAAI,CAACva,IAAW;AACd,MAAIwa,IAAc,WAAW;AAC3B,eAAWC,KAAOF;AAChB,UAAI;AACF,QAAAE,EAAG;AAAA,MACL,QAAY;AAAA,MACZ;AAEF,WAAO,sBAAsBD,CAAW;AAAA,EAC1C;AACA,EAAAA,EAAW;AACb;AACA,SAASE,GAAeD,GAAK;AAC3B,SAAAF,GAAQ,IAAIE,CAAG,GACR,MAAMF,GAAQ,OAAOE,CAAG;AACjC;AACA,SAASE,GAAoBp/H,GAAQl1B,GAAM6C,GAAO;AAChD,EAAKqyB,EAAO,aAAal1B,CAAI,KAAGk1B,EAAO,aAAal1B,GAAM6C,CAAK;AACjE;AACA,SAAS0xJ,GAAar/H,GAAQs/H,GAAQ;AACpC,MAAIt/H,EAAO,aAAa,YAAY,KAAKA,EAAO,aAAa,eAAe,EAAG;AAC/E,MAAI,CAACkV,GAAWoqH,CAAM,GAAG;AACvB,IAAA1V,GAAa5pH,GAAQ,cAAcs/H,CAAM;AACzC;AAAA,EACF;AACA,WAASC,IAAwB;AAC/B,IAAA3V,GAAa5pH,GAAQ,cAAcs/H,GAAQ;AAAA,EAC7C;AACA,EAAI7a,KAAW8a,EAAqB,IAC/Bp3H,EAAOo3H,CAAqB;AACnC;AACA,SAASC,GAAiB7jI,GAAI;AAC5B,QAAMqmB,IAAQ,iBAAiBrmB,CAAE;AACjC,SAAOqmB,EAAM,YAAY,UAAU,SAASA,EAAM,OAAO,IAAI;AAC/D;AACA,SAASy9G,GAAgB9jI,GAAI;AAC3B,SAAO,CAAC,CAACA,MAAO,qBAAqBA,IAAKA,EAAG,gBAAgB,EAAE,cAAc,IAAM,oBAAoB,GAAI,CAAE,IAAI6jI,GAAiB7jI,CAAE;AACtI;AACA,SAAS+jI,GAAkB/jI,GAAI0P,GAAU;AACvC,SAAO8zH,GAAe,MAAM9zH,EAASo0H,GAAgB9jI,CAAE,CAAC,CAAC;AAC3D;AACA,SAASgkI,GAAgB9yJ,GAAOyD,GAAMsvJ,GAAM;AAC1C,SAAOtvJ,KAAM;AACX,QAAIA,MAASzD;AACX,aAAO;AACF,QAAI+yJ,KAAA,QAAAA,EAAOtvJ;AAChB;AAEA,IAAAA,IAAOA,EAAK;AAAA,EAEhB;AACA,SAAO;AACT;AACA,SAASuvJ,GAAQ7/H,GAAQ4Y,GAAS;AAChC,SAAO,IAAI+vG,GAAiB3oH,CAAM,EAAE,IAAI,aAAa,CAACgS,MAAU;AAC9D,IAAIA,EAAM,WAAW,KAAK,CAACA,EAAM,oBAAkB4G,EAAQ5G,CAAK;AAAA,EAClE,CAAC,EAAE,IAAI,WAAW,CAACA,MAAU;AAC3B,IAAI03G,GAAgB13G,CAAK,KAAG4G,EAAQ5G,CAAK;AAAA,EAC3C,CAAC;AACH;AACA,SAAS8tH,GAAkB9tH,GAAO;AAChC,SAAOs3G,GAAat3G,CAAK,MAAMA,EAAM,QAAQ,SAAS,KAAKA,EAAM,eAAe,SAAS;AAC3F;AACA,SAAS+tH,GAA4B10H,GAAU;AAC7C,MAAIo5G,GAAW,QAAOp5G,EAAQ;AAC9B,MAAIyH,IAAQgzG,GAAQ,GAAIx7G,IAAK,OAAO,sBAAsB,MAAM;AAC9D,IAAAy7G,GAAO16G,GAAUyH,CAAK,GACtBxI,IAAK;AAAA,EACP,CAAC;AACD,SAAO,MAAM,KAAK,OAAO,qBAAqBA,CAAE;AAClD;AACA,SAAS01H,GAAcrkI,GAAIo5B,GAAS24D,GAAW;AAAA,EAC7C,eAAAuyC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,GAAGz9H;AACL,GAAG;AACD,MAAI,CAAC/G,EAAI;AACT,QAAMykI,IAAoB1yC,EAAU,QAAQ,KAAK,GAAG,EAAE,QAAQ,WAAW,EAAE;AAE3E,MADAo8B,GAASnuH,GAAI,cAAeo5B,IAAqB,OAAX,QAAe,GACjD,CAACA,EAAS;AACd,MAAIsrG,IAAQ3yC,EAAU,SAAS,KAAK;AACpC,QAAM4yC,IAAU,CAACr1J,MAAMyiH,EAAU,SAAS,MAAM,IAAI,aAAaziH,CAAC,MAAMA,GAAGs1J,IAAU,CAAC70I,MAAM20I,IAAQ,aAAa30I,CAAC,MAAMA;AACxH,SAAOkzG,GAAW7pE,GAASp5B,GAAI,MAAM;AACnC,IAAAw0F,GAAgBp7D,GAASp5B,GAAI;AAAA,MAC3B,WAAWykI;AAAA,MACX,YAAY;AAAA,QACV,GAAG19H,EAAQ,cAAc,CAAA;AAAA,QACzB6vF,GAAK,EAAE,2BAA2B,SAAS,WAAW,GAAK,CAAE;AAAA,QAC7DoC,GAAK;AAAA,MACb;AAAA,MACM,GAAGjyF;AAAA,IACT,CAAK,EAAE,KAAK,CAAC,EAAE,GAAAz3B,GAAG,GAAAygB,GAAG,gBAAA6kG,EAAc,MAAO;;AACpC,YAAMiwC,IAAa,CAAC,GAAC/rJ,IAAA87G,EAAe,SAAf,QAAA97G,EAAqB;AAC1C,MAAA4rJ,IAAQ3yC,EAAU,SAAS8yC,IAAa,WAAW,KAAK,GACxD7kI,EAAG;AAAA,QACD;AAAA,QACA6kI,IAAa9yC,EAAU,WAAW,KAAK,IAAIA,EAAU,QAAQ,OAAO,QAAQ,IAAIA,EAAU,QAAQ,UAAU,KAAK,IAAIA;AAAA,MAC7H,GACM,OAAO,OAAO/xF,EAAG,OAAO;AAAA,QACtB,KAAK,QAAQjQ,IAAI,IAAI,MAAM60I;AAAA,UACzBJ,IAAUA,IAAU,OAAO,SAASF,CAAa;AAAA,QAC3D,CAAS;AAAA,QACD,MAAM,QAAQh1J,IAAI,IAAI,MAAMq1J;AAAA,UAC1BJ,IAAUA,IAAU,OAAO,SAASD,CAAa;AAAA,QAC3D,CAAS;AAAA,MACT,CAAO;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;AACA,SAASQ,GAAa9kI,GAAI;AAExB,SADe,iBAAiBA,CAAE,EACpB,kBAAkB;AAClC;AACA,SAASw6B,GAAcx6B,GAAI;AACzB,SAAOA,aAAc;AACvB;;AAEA,MAAM+kI,GAAmB;AAAA,EAAzB;AAAA,IAAA9X,EAAA,MAAA+X;AACE,IAAAh1I,EAAA,kBAAW;AACX,IAAAi9H,EAAA,MAAAgY,IAAW;AACX,IAAAhY,EAAA,MAAAiY,IAAS;AACT,IAAAjY,EAAA,MAAAkY,IAAS;AACT,IAAAlY,EAAA,MAAAmY,IAA0B,oBAAI,IAAG;AAAA;AAAA,EACjC,UAAUl0I,GAAG8oI,GAAO;AAClB,WAAO,CAAC,CAACA;AAAA,EACX;AAAA,EACA,OAAOA,GAAO;AACZ,IAAA5M,EAAA,MAAK8X,IAASlL,IACVA,MAAOA,EAAM,WAAW,WAAWxK,EAAA,MAAKwV,IAAAK,IAAU,KAAK,IAAI;AAAA,EACjE;AAAA,EACA,SAASntD,GAAO;AACd,IAAAm1C,EAAA,MAAK+X,IAAQ,IAAIltD,CAAK,GACtBs3C,EAAA,MAAKwV,IAAAM,IAAL,WAAkBptD;AAAA,EACpB;AAAA,EACA,YAAYA,GAAO;;AACjB,KAAAj5F,KAAAnG,IAAAo/F,EAAMmlD,GAAgB,MAAM,MAA5B,gBAAAvkJ,EAA+B,WAA/B,QAAAmG,EAAA,KAAAnG,IACAo/F,EAAMmlD,GAAgB,MAAM,IAAI,MAChChQ,EAAA,MAAK+X,IAAQ,OAAOltD,CAAK;AAAA,EAC3B;AAAA,EACA,YAAYA,GAAO;AACjB,UAAMt7F,IAAUs7F,KAAA,gBAAAA,EAAQmlD,GAAgB;AACxC,IAAIzgJ,KAAWA,EAAQ,MAAM,SAAS,cACpCA,EAAQ,MAAM,OAAO,YAEvBwwI,EAAA,MAAK+X,IAASjtD;AAAA,EAChB;AAAA,EACA,WAAWwjB,GAAS;AAClB,IAAA0xB,EAAA,MAAK6X,IAAWvpC,IAChB8zB,EAAA,MAAKwV,IAAAK,IAAL;AAAA,EACF;AAAA,EACA,SAAS;AACP,IAAIhY,EAAA,MAAK6X,QAAQ7X,EAAA,MAAK6X,IAAO,WAAW,WAAW;AACnD,eAAWhtD,KAASm1C,EAAA,MAAK+X,IAAS,MAAK,YAAYltD,CAAK;AACxD,IAAAm1C,EAAA,MAAK+X,IAAQ,MAAK,GAClBhY,EAAA,MAAK8X,IAAS,OACd9X,EAAA,MAAK+X,IAAS;AAAA,EAChB;AAuCF;AA5EEF,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eALFJ,KAAA,eAwCEM,KAAY,SAACptD,GAAO;;AAClB,MAAI,CAACm1C,EAAA,MAAK6X,IAAQ;AAClB,QAAMllI,IAAKk4E,EAAAp/F,IAAMukJ,GAAgB,YAAtBnlD,EAAAp/F,KAAkC02I,EAAA,MAAKwV,IAAAO,IAAL,WAAyBrtD;AACtE,EAAI19C,GAAcx6B,CAAE,MAClBqtH,EAAA,MAAK6X,IAAO,OAAOllI,CAAE,GACrBA,EAAG,MAAM,OAAOA,EAAG,UAAU,YAAY;AAE7C,GACAulI,KAAmB,SAACrtD,GAAO;AACzB,QAAMl4E,IAAK,SAAS,cAAc,OAAO,GAAGwlI,IAAYttD,EAAM,WAAWA,EAAM,SAAS,WAAWutD,IAAcvtD,EAAM,OAAOA,EAAM,SAAS;AAC7I,SAAAl4E,EAAG,KAAKk4E,EAAM,IACdl4E,EAAG,MAAMylI,IAAcvtD,EAAM,MAAM,IACnCl4E,EAAG,QAAQk4E,EAAM,OACjBl4E,EAAG,OAAOk4E,EAAM,MAChBl4E,EAAG,UAAUwlI,GACbttD,EAAM,aAAal4E,EAAG,UAAUk4E,EAAM,WAClCstD,KAAa,CAACC,KAChBjW,EAAA,MAAKwV,IAAAU,IAAL,WAAextD,GAAOl4E,EAAG,QAEpBA;AACT,GACA0lI,KAAS,SAACxtD,GAAOqnD,GAAQ;;AACvB,MAAI,EAAArnD,EAAM,OAAOA,EAAM,SAAS,UAASp/F,IAAAymJ,EAAO,SAAP,QAAAzmJ,EAAa;AACtD,eAAWykJ,KAAOrlD,EAAM,KAAM,CAAAqnD,EAAO,OAAOhC,CAAG;AACjD,GACA8H,KAAS,SAAChvH,GAAO;AACf,aAAW6hE,KAASm1C,EAAA,MAAK+X,KAAS;AAChC,UAAM7F,IAASrnD,EAAMmlD,GAAgB,MAAM;AAC3C,QAAI,CAACkC,EAAQ;AACb,QAAI,CAAClS,EAAA,MAAK4X,KAAU;AAClB,MAAA1F,EAAO,MAAM,OAAOA,EAAO,UAAU,WAAW;AAChD;AAAA,IACF;AACA,UAAMoG,IAAYpG,EAAO,MAAM,SAAS;AACxC,IAAIoG,KAAWnW,EAAA,MAAKwV,IAAAU,IAAL,WAAextD,GAAOqnD,EAAO,QAC5CrnD,EAAM,QAAQytD,IAAY,YAAY,YAAYtvH,CAAK;AAAA,EACzD;AACF;;AAGF,MAAMuvH,GAAc;AAAA,EAQlB,YAAYC,GAAO;AARrB,IAAA5Y,EAAA,MAAA6Y;AACE,IAAA7Y,EAAA,MAAAiY,IAAS;AACT,IAAAjY,EAAA,MAAA8Y;AACA,IAAA9Y,EAAA,MAAA+Y,IAAa,CAAA;AACb,IAAA/Y,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAAiZ,IAAiB;AACjB,IAAAjZ,EAAA,MAAAkZ,IAAkB;AAClB,IAAAlZ,EAAA,MAAAmZ,IAAkB;AAEhB,IAAAhZ,EAAA,MAAK6Y,IAASJ;AACd,UAAMQ,IAAaR,EAAM;AACzB,IAAAzY,EAAA,MAAK2Y,IAAcM,IACnB75H,EAAOgjH,EAAA,MAAKsW,IAAAQ,IAAe,KAAK,IAAI,CAAC,GACrC/b,GAAUiF,EAAA,MAAKsW,IAAAS,IAAQ,KAAK,IAAI,CAAC,GACjC,IAAIvZ,GAAiBqZ,CAAU,EAAE,IAAI,OAAO7W,EAAA,MAAKsW,IAAAU,IAAY,KAAK,IAAI,CAAC,EAAE,IAAI,UAAUhX,EAAA,MAAKsW,IAAAW,IAAe,KAAK,IAAI,CAAC,EAAE,IAAI,eAAejX,EAAA,MAAKsW,IAAAY,IAAQ,KAAK,IAAI,CAAC;AAAA,EACnK;AAAA,EAMA,IAAIC,GAAU;AACZ,IAAAtZ,EAAA,MAAK2Y,IAAW,KAAKW,CAAQ,GAC7B1c,GAAQuF,EAAA,MAAKsW,IAAAY,IAAQ,KAAK,IAAI,CAAC;AAAA,EACjC;AAAA,EACA,OAAOC,GAAU;AACf,IAAAA,EAAS,OAAM,GACftZ,EAAA,MAAK2Y,IAAW,OAAO3Y,EAAA,MAAK2Y,IAAW,QAAQW,CAAQ,GAAG,CAAC,GAC3D1c,GAAQuF,EAAA,MAAKsW,IAAAY,IAAQ,KAAK,IAAI,CAAC;AAAA,EACjC;AAAA;AAAA,EAEA,YAAY1M,GAAO;AACjB,0BAAsB,MAAM;AAE1B,UADA5M,EAAA,MAAK8X,IAASlL,IACVA,GAAO;AACT,QAAA5M,EAAA,MAAK+Y,IAAkB,IAAIpB,GAAkB,IAC7C1X,EAAA,MAAK8Y,IAAgB,OAAOnM,CAAK;AACjC,mBAAW9hD,KAASm1C,EAAA,MAAK0Y,IAAa,CAAAvW,EAAA,MAAKsW,IAAAc,IAAL,WAAqB1uD;AAAA,MAC7D;AACA,MAAAs3C,EAAA,MAAKsW,IAAAY,IAAL;AAAA,IACF,CAAC;AAAA,EACH;AA2CF;AAnFExB,KAAA,eACAa,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eAPFN,KAAA,eAgBEQ,KAAc,WAAG;AACf,QAAM,EAAE,gBAAAO,EAAc,IAAKxZ,EAAA,MAAK4Y,IAAO;AACvC,EAAA7Y,EAAA,MAAK8Y,IAAiBW,EAAc,IACpCrX,EAAA,MAAKsW,IAAAY,IAAL;AACF,GAsBAE,KAAe,SAAC1uD,GAAO;;AACrB,EAAKynD,GAAmBznD,CAAK,OAC7Bp/F,IAAAu0I,EAAA,MAAK8Y,QAAL,QAAArtJ,EAAsB,SAASo/F;AACjC,GACA4uD,KAAkB,SAAC5uD,GAAO;;AACxB,EAAKynD,GAAmBznD,CAAK,OAC7Bp/F,IAAAu0I,EAAA,MAAK8Y,QAAL,QAAArtJ,EAAsB,YAAYo/F;AACpC,GACAsuD,KAAW,SAACnwH,GAAO;AACjB,EAAAm5G,EAAA,MAAKsW,IAAAc,IAAL,WAAqBvwH,EAAM;AAC7B,GACAowH,KAAc,SAACpwH,GAAO;AACpB,EAAAm5G,EAAA,MAAKsW,IAAAgB,IAAL,WAAwBzwH,EAAM;AAChC,GACAqwH,KAAO,WAAG;;AACR,QAAMhJ,IAAerQ,EAAA,MAAK0Y,IAAY;AACtC,MAAI1Y,EAAA,MAAK6X,QAAW7X,EAAA,MAAK6Y,OAAkBxI,KAAA,QAAAA,EAAeL,GAAgB,aAAa;AACrF,KAAAvkJ,IAAAu0I,EAAA,MAAK+Y,QAAL,QAAAttJ,EAAsB,YAAY,QAClCmG,IAAAouI,EAAA,MAAK8Y,QAAL,QAAAlnJ,EAAsB,WAAW,MACjC2R,IAAAy8H,EAAA,MAAK8Y,QAAL,QAAAv1I,EAAsB,YAAY8sI;AAClC;AAAA,EACF;AAGA,OAFA7sI,IAAAw8H,EAAA,MAAK8Y,QAAL,QAAAt1I,EAAsB,WAAW,MACjC/D,IAAAugI,EAAA,MAAK8Y,QAAL,QAAAr5I,EAAsB,YAAY,OAC9B,CAAC4wI,GAAc;AACjB,KAAArhG,IAAAgxF,EAAA,MAAK+Y,QAAL,QAAA/pG,EAAsB,YAAY;AAClC;AAAA,EACF;AACA,QAAM0qG,IAAiB1Z,EAAA,MAAK2Y,IAAW,KAAK,CAACz7J,GAAGE,MAAMF,EAAE,WAAWE,EAAE,QAAQ,EAAE,KAAK,CAACk8J,MAAaA,EAAS,UAAUjJ,GAAcrQ,EAAA,MAAK6X,GAAM,CAAC;AAC/I,EAAI7X,EAAA,MAAK+Y,QAAoBW,OAC3BnxE,IAAAy3D,EAAA,MAAK+Y,QAAL,QAAAxwE,EAAsB,UACtBmxE,KAAA,QAAAA,EAAgB,OAAO1Z,EAAA,MAAK6X,MAC5B9X,EAAA,MAAKgZ,IAAkBW,KAAkB,QAE3CA,KAAA,QAAAA,EAAgB,YAAYrJ;AAC9B,GACA6I,KAAO,WAAG;;AACR,GAAAztJ,IAAAu0I,EAAA,MAAK8Y,QAAL,QAAArtJ,EAAsB,UACtBs0I,EAAA,MAAK+Y,IAAkB,QACvBlnJ,IAAAouI,EAAA,MAAK+Y,QAAL,QAAAnnJ,EAAsB,UACtBmuI,EAAA,MAAKgZ,IAAkB;AACzB;;AAGF,MAAMY,WAAsBr4F,GAAK;AAAA,EAO/B,cAAc;AACZ,UAAK;AART,IAAAs+E,EAAA,MAAAga;AACE,IAAAha,EAAA,MAAAgR,IAAW;AACX,IAAAhR,EAAA,MAAAia,IAAY,CAAA;AACZ,IAAAja,EAAA,MAAAka,IAAW;AACX,IAAAla,EAAA,MAAAma,IAAiB;AAEjB;AAAA,IAAAp3I,EAAA,MAAClX;AA0DD,IAAAm0I,EAAA,MAAAoa,IAAgB3R,GAAiB,YAAY;;AAC3C,UAAI,CAACrI,EAAA,MAAK4Q,IAAU;AACpB,MAAI,CAAC5Q,EAAA,MAAK+Z,OAAkB/Z,EAAA,MAAK8Z,OAC/B/Z,EAAA,MAAKga,IAAiB,MAAM/Z,EAAA,MAAK8Z,IAAS,QAAO;AAEnD,YAAMG,IAAe,QAAMxuJ,IAAAu0I,EAAA,MAAK8Z,QAAL,gBAAAruJ,EAAe,gBAAe8kJ,IAAQ;AAAA,QAC/D,CAAC,YAAY,WAAW;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,MACN;AACI,iBAAW/1H,KAAQ+1H,GAAO;AACxB,cAAMH,IAAS,KAAK,UAAU51H,CAAI;AAClC,YAAI41H,EAAO,KAAK,CAAC5xI,MAAMA,EAAE,SAAS,SAAS,EAAG;AAC9C,cAAM07I,IAAiBla,EAAA,MAAK+Z,MAAiB3J,EAAO,KAAK,CAACI,MAAWA,EAAO,aAAaxQ,EAAA,MAAK+Z,GAAc,IAAI,MAC1GI,IAAe11J,GAAQ+1B,CAAI,IAAIwlH,EAAA,MAAK6Z,IAAUr/H,EAAK,KAAK,CAAC4/H,MAAUpa,EAAA,MAAK6Z,IAAUO,CAAK,CAAC,KAAK,EAAE,IAAIpa,EAAA,MAAK6Z,IAAUr/H,CAAI,GACtHqwE,IAAQqvD,KAAkBC,GAAcE,IAAiBxvD,KAASynD,GAAmBznD,CAAK;AAChG,QAAIA,MAAU,CAACwvD,KAAkBJ,MAAiB,QAChDpvD,EAAM,OAAO,WACTwvD,KAAgBlY,EAAA,MAAKyX,IAAAU,IAAL,WAAwBzvD;AAAA,MAEhD;AAAA,IACF,GAAG,GAAG;AACN,IAAA+0C,EAAA,MAAA2a,IAAkB;AAClB,IAAA3a,EAAA,MAAA4a,IAAyBrY,EAAA,MAAKyX,IAAAa,IAAmB,KAAK,IAAI;AAAA,EA/E1D;AAAA,EACA,IAAI,WAAW;AAEb,WADc,KAAK,MAAM,KAAK,CAACj8I,MAAMA,EAAE,SAAS,aAAa8zI,GAAmB9zI,CAAC,CAAC,KAClE;AAAA,EAClB;AAAA,EACA,IAAI,gBAAgB;AAClB,UAAM9P,IAAW,KAAK;AACtB,WAAOA,IAAW,KAAK,QAAQA,CAAQ,IAAI;AAAA,EAC7C;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAOsxI,EAAA,MAAK+Z;AAAA,EACd;AAAA,EACA,IAAI,cAAcj5H,GAAM;AACtB,IAAAi/G,EAAA,MAAKga,IAAiBj5H,IACtBqhH,EAAA,MAAKyX,IAAAc,IAAL,WAAe55H;AAAA,EACjB;AAAA,EACA,IAAIjgC,GAAMkrD,GAAS;AACjB,UAAM4uG,IAAU95J,aAAgB6vJ,IAAW7lD,IAAQ8vD,IAAU95J,IAAO,IAAI6vJ,GAAU7vJ,CAAI,GAAG25B,IAAO35B,EAAK,SAAS,cAAcA,EAAK,SAAS,cAAc,aAAaA,EAAK;AAC1K,WAAIm/I,EAAA,MAAK6Z,IAAUr/H,CAAI,KAAK35B,EAAK,WAAS,OAAOA,EAAK,SACtDgqG,EAAM,iBAAiB,eAAem1C,EAAA,MAAKwa,GAAsB,GACjE,KAAKjF,GAAW,GAAG,EAAE1qD,GAAO9+C,CAAO,GACnC8+C,EAAMmlD,GAAgB,WAAW,IAAI,KAAKA,GAAgB,WAAW,GACjEhQ,EAAA,MAAK4Q,OAAU/lD,EAAMmlD,GAAgB,OAAO,EAAC,GAC7CnvJ,EAAK,YAASm/I,EAAA,MAAK6Z,IAAUr/H,CAAI,IAAIqwE,IACzCm1C,EAAA,MAAKga,IAAL,YACO;AAAA,EACT;AAAA,EACA,OAAOnvD,GAAO9+C,GAAS;AAErB,QADAg0F,EAAA,MAAKwa,IAAkB1vD,IACnB,EAAC,KAAK,MAAM,SAASA,CAAK;AAC9B,aAAIA,MAAUm1C,EAAA,MAAK6Z,IAAUhvD,EAAM,IAAI,KAAG,OAAOm1C,EAAA,MAAK6Z,IAAUhvD,EAAM,IAAI,GAC1EA,EAAM,OAAO,YACbA,EAAMmlD,GAAgB,YAAY,IAAI,MACtCnlD,EAAM,oBAAoB,eAAem1C,EAAA,MAAKwa,GAAsB,GACpE,KAAKjF,GAAW,MAAM,EAAE1qD,GAAO9+C,CAAO,GACtCg0F,EAAA,MAAKwa,IAAkB,OAChB;AAAA,EACT;AAAA,EACA,MAAMxuG,GAAS;AACb,eAAW8+C,KAAS,CAAC,GAAG,KAAK,KAAK;AAChC,WAAK,OAAOA,GAAO9+C,CAAO;AAE5B,WAAO;AAAA,EACT;AAAA,EACA,UAAUvxB,GAAM;AACd,UAAM+1H,IAAQ,MAAM,QAAQ/1H,CAAI,IAAIA,IAAO,CAACA,CAAI;AAChD,WAAO,KAAK,MAAM,OAAO,CAACqwE,MAAU0lD,EAAM,SAAS1lD,EAAM,IAAI,CAAC;AAAA,EAChE;AAAA;AAAA,EAEA,EApDCp/F,KAAAukJ,GAAgB,aAoDhBA,GAAgB,QAAO,IAAI;AAC1B,QAAI,CAAAhQ,EAAA,MAAK4Q,KACT;AAAA,iBAAW/lD,KAAS,KAAK,MAAO,CAAAA,EAAMmlD,GAAgB,OAAO,EAAC;AAC9D,MAAAjQ,EAAA,MAAK6Q,IAAW,KAChB5Q,EAAA,MAAKga,IAAL;AAAA;AAAA,EACF;AAAA,EAuDA,WAAWhrB,GAAS;AAClB,IAAA+Q,EAAA,MAAK+Z,IAAW9qB;AAAA,EAClB;AACF;AAxHE4hB,KAAA,eACAiJ,KAAA,eACAC,KAAA,eACAC,KAAA,eA4DAC,KAAA,eAuBAO,KAAA,eACAC,KAAA,eAxFFZ,KAAA,eAyFEa,KAAkB,SAACzxH,GAAO;AACxB,QAAM6hE,IAAQ7hE,EAAM;AAIpB,MAHIg3G,EAAA,MAAK8Z,OAAYxH,GAAmBznD,CAAK,KAAKA,MAAUm1C,EAAA,MAAKua,OAC/DpY,EAAA,MAAKyX,IAAAU,IAAL,WAAwBzvD,IAEtBA,EAAM,SAAS,WAAW;AAC5B,UAAM0lD,IAAQ+B,GAAmBznD,CAAK,IAAI,CAAC,YAAY,WAAW,IAAI,CAACA,EAAM,IAAI;AACjF,eAAWrsF,KAAK,KAAK;AACnB,MAAIA,EAAE,SAAS,aAAaA,KAAKqsF,KAAS0lD,EAAM,SAAS/xI,EAAE,IAAI,MAC7DA,EAAE,OAAO;AAAA,EAGf;AACA,OAAK;AAAA,IACH,IAAI6gI,GAAS,eAAe;AAAA,MAC1B,QAAQr2G,EAAM;AAAA,MACd,SAASA;AAAA,IACjB,CAAO;AAAA,EACP;AACE,GACAsxH,KAAkB,SAACzvD,GAAO;;AACxB,EAAIA,EAAM,SAAS,cACjBs3C,EAAA,MAAKyX,IAAAc,IAAL,WAAe7vD,EAAM,YAEvBj5F,KAAAnG,IAAAu0I,EAAA,MAAK8Z,QAAL,gBAAAruJ,EAAe,gBAAf,QAAAmG,EAAA,KAAAnG,GAA6Bo/F,EAAM,SAAS;AAC9C,GACA6vD,KAAS,SAAC55H,GAAM;;AACd,GAAAlvB,KAAAnG,IAAAu0I,EAAA,MAAK8Z,QAAL,gBAAAruJ,EAAe,YAAf,QAAAmG,EAAA,KAAAnG,GAAyBs0I,EAAA,MAAKga,IAAiBj5H;AACjD;AAMF,MAAM85H,KAAW,OAAO,CAAC,GAAGC,KAAc,OAAO,CAAC,GAC5CC,KAAgB;AAAA,EACpB,SAASF;AAAA,EACT,YAAYC;AACd;;AAEA,MAAME,WAAyBrF,GAAW;AAAA,EAA1C;AAAA;AACE,IAAA9V,EAAA,MAAAob,IAAQ;AAgBR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAr4I,EAAA,gBAAS;AAQT;AAAA,IAAAA,EAAA,MAAClX;AAAA;AAAA;AAAA;AAAA;AAAA,EAJD,IAAI,OAAO;AACT,WAAOu0I,EAAA,MAAKgb,OAAS,KAAK;AAAA,EAC5B;AAAA;AAAA,EAIA,EAFCvvJ,KAAAqvJ,GAAc,YAEdvF,GAAW,aAAY,IAAI;AAC1B,SAAKuF,GAAc,OAAO,EAAE,EAAK;AAAA,EACnC;AAAA;AAAA,EAEA,CAACvF,GAAW,OAAO,EAAExpG,GAAS;AAC5B,SAAK+uG,GAAc,UAAU,IAAI,QACjC,KAAKA,GAAc,OAAO,EAAE,IAAO/uG,CAAO;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAWA,GAAS;;AAClB,IAAI,KAAK,YAAYi0F,EAAA,MAAKgb,OAAS,CAAC,KAAKF,GAAc,UAAU,OACjErvJ,IAAA,KAAKqvJ,GAAc,gBAAnB,QAAArvJ,EAAA,WAAiCsgD,IACjC,KAAK+uG,GAAc,OAAO,EAAE,IAAM/uG,CAAO;AAAA,EAC3C;AAAA,EACA,SAAS3iD,GAAK;AACZ,WAAO,KAAK,MAAM,KAAK,CAACqrJ,MAAYA,EAAQ,QAAQrrJ,CAAG;AAAA,EACzD;AAAA;AAAA,EAEA,CAAC0xJ,GAAc,OAAO,EAAEG,GAAMlvG,GAAS;AACrC,IAAIi0F,EAAA,MAAKgb,QAAUC,MACnBlb,EAAA,MAAKib,IAAQC,IACb,KAAK;AAAA,MACH,IAAI5b,GAAS,eAAe;AAAA,QAC1B,QAAQ4b;AAAA,QACR,SAAAlvG;AAAA,MACR,CAAO;AAAA,IACP;AAAA,EACE;AACF;AAzDEivG,KAAA;AA2DF,SAASE,GAAmBC,GAAW10I,GAAM;AAC3C,SAAO,CAAC,GAAG00I,CAAS,EAAE,KAAsCC,EAAsB;AACpF;AACA,SAASA,GAAuBl+J,GAAGE,GAAG;AACpC,SAAOF,EAAE,WAAWE,EAAE,UAAUF,EAAE,WAAW,MAAME,EAAE,WAAW,KAAKF,EAAE,SAASE,EAAE;AACpF;AA0BA,SAASi+J,GAAmBz3J,GAAS;AACnC,SAAO,CAAC63I,MAAa73I,aAAmB;AAC1C;AACA,SAAS03J,GAAmB13J,GAAS;AACnC,SAAO,CAAC63I,MAAa73I,aAAmB;AAC1C;AACA,SAAS23J,GAAmB33J,GAAS;AACnC,SAAOy3J,GAAmBz3J,CAAO,KAAK03J,GAAmB13J,CAAO;AAClE;AAKA,MAAM43J,WAA8B5Y,GAAe;AACnD;AAEA,MAAM6Y,KAAsB;AAAA,EAC1B,cAAc;AAAA,EACd,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,wBAAwB;AAAA,EACxB,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,aAAa;AAAA,EACb,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,UAAU;AACZ,GACMC,KAAgC,oBAAI,IAAI,CAAC,SAAS,OAAO,QAAQ,MAAM,CAAC,GAAGC,KAAmB,2BAA2BC,KAAmB;;AAClJ,MAAMC,WAAgCL,GAAsB;AAAA,EAE1D,YAAYhD,GAAO;AACjB,UAAK;AAHT,IAAA5Y,EAAA,MAAAkc;AACE,IAAAlc,EAAA,MAAAgZ;AAsKA,IAAAhZ,EAAA,MAAAmc;AAWA,IAAAnc,EAAA,MAAAoc,IAAc;AA9KZ,IAAAjc,EAAA,MAAK6Y,IAASJ;AAAA,EAChB;AAAA,EACA,YAAY;AACV,IAAAr5H,EAAOgjH,EAAA,MAAK2Z,IAAAG,IAAgB,KAAK,IAAI,CAAC;AAAA,EACxC;AA+LF;AAtMErD,KAAA,eADFkD,KAAA,eASEG,KAAe,WAAG;AAChB,QAAM,EAAE,aAAAC,GAAa,WAAAC,EAAS,IAAK,KAAK;AACxC,MAAID,EAAW,EAAI;AACnB,QAAMllI,IAASmlI,EAAS,MAAO,WAAW,KAAK,KAAK,UAAUC,IAAU13E,GAAO,EAAK;AACpF,EAAI1tD,MAAW,KAAK,KAClB,IAAI2oH,GAAiB,KAAK,EAAE,EAAE,IAAI,WAAW,MAAMyc,EAAQ,IAAI,EAAI,CAAC,EAAE,IAAI,YAAY,CAACpzH,MAAU;AAC/F,IAAK,KAAK,GAAG,SAASA,EAAM,MAAM,KAAGozH,EAAQ,IAAI,EAAK;AAAA,EACxD,CAAC,KAEIzf,GAAKyf,CAAO,KAAGA,EAAQ,IAAI,SAAS,cAAc,qBAAqB,MAAM,KAAK,EAAE,GACzF1c,GAAY,UAAU,WAAW,CAAC12G,MAAU;AAC1C,UAAMqzH,IAAerzH,EAAM,aAAY,EAAG,KAAK,CAACrW,MAAOA,aAAc,WAAWA,EAAG,cAAc,cAAc;AAC/G,IAAI0pI,MAAiB,UAAQD,EAAQ,IAAI,KAAK,OAAOC,CAAY;AAAA,EACnE,CAAC,IAEHl9H,EAAO,MAAM;AACX,IAAKi9H,EAAO,KACZ,IAAIzc,GAAiB3oH,CAAM,EAAE,IAAI,SAASmrH,EAAA,MAAK2Z,IAAAQ,IAAS,KAAK,IAAI,CAAC,EAAE,IAAI,WAAWna,EAAA,MAAK2Z,IAAAS,IAAW,KAAK,IAAI,CAAC,EAAE,IAAI,WAAWpa,EAAA,MAAK2Z,IAAAU,IAAoB,KAAK,IAAI,GAAG,EAAE,SAAS,GAAI,CAAE;AAAA,EACtL,CAAC;AACH,GACAF,KAAQ,SAACtzH,GAAO;;AACd,QAAMyzH,IAAY,SAAS;AAC3B,MAAI,CAACzzH,EAAM,OAAO,CAAC,KAAK,OAAO,QAAO,KAAMyzH,KAAA,QAAAA,EAAW,QAAQb;AAC7D;AAEF,MAAI,EAAE,QAAA5mG,GAAQ,OAAArwD,EAAK,IAAKw9I,EAAA,MAAK2Z,IAAAY,IAAL,WAAwB1zH;AAChD,MAAI,CAAC2f,GAAShkD,CAAK,KAAK,CAACF,GAAQE,CAAK,GAAG;AACvC,KAAA8G,IAAA9G,KAAA,gBAAAA,EAAO,YAAP,QAAA8G,EAAA,KAAA9G,GAAiB;AAAA,MACf,OAAAqkC;AAAA,MACA,QAAQg3G,EAAA,MAAK4Y,IAAO;AAAA,MACpB,QAAQ5Y,EAAA,MAAK4Y,IAAO;AAAA,IAC5B,KACMhnJ,IAAAjN,KAAA,gBAAAA,EAAO,aAAP,QAAAiN,EAAA,KAAAjN,GAAkBqkC,GAAOg3G,EAAA,MAAK4Y,IAAO;AACrC;AAAA,EACF;AAYA,MAXI5jG,KAAA,QAAAA,EAAQ,WAAW,YACrBhsB,EAAM,eAAc,GACpBA,EAAM,gBAAe,GACjBg3G,EAAA,MAAKgc,OACP7Z,EAAA,MAAK2Z,IAAAa,IAAL,WAA+B3zH,GAAOgsB,MAAW,gBACjD+qF,EAAA,MAAKic,IAAc,UAEnBhc,EAAA,MAAK4Y,IAAO,OAAO,KAAK5Y,EAAA,MAAK+b,KAAY/yH,CAAK,GAC9C+2G,EAAA,MAAKgc,IAAa,WAGlB/mG,KAAA,QAAAA,EAAQ,WAAW,WAAW;AAChC,UAAM4nG,IAAe,KAAK,GAAG,cAAc,4BAA4B;AACvE,IAAAA,KAAA,QAAAA,EAAc;AAAA,MACZ,IAAI,cAAc,SAAS;AAAA,QACzB,KAAK5nG,MAAW,aAAa,OAAO;AAAA,QACpC,UAAUhsB,EAAM;AAAA,QAChB,SAASA;AAAA,MACnB,CAAS;AAAA;AAAA,EAEL;AACF,GACAuzH,KAAU,SAACvzH,GAAO;;AAChB,MAAI,CAACA,EAAM,OAAO0yH,GAAc,IAAI1yH,EAAM,GAAG,EAAG;AAChD,QAAMyzH,IAAY,SAAS;AAC3B,MAAIA,KAAA,QAAAA,EAAW,QAAQb,OAAqBlb,GAAgB13G,CAAK,MAAKyzH,KAAA,QAAAA,EAAW,QAAQd;AACvF;AAEF,MAAI,EAAE,QAAA3mG,GAAQ,OAAArwD,EAAK,IAAKw9I,EAAA,MAAK2Z,IAAAY,IAAL,WAAwB1zH,IAAQ6zH,IAAgB,CAAC7zH,EAAM,WAAW,UAAU,KAAKA,EAAM,GAAG;AAClH,MAAI,CAAC2f,GAAShkD,CAAK,KAAK,CAACF,GAAQE,CAAK,KAAK,CAACk4J,GAAe;AACzD,KAAApxJ,IAAA9G,KAAA,gBAAAA,EAAO,cAAP,QAAA8G,EAAA,KAAA9G,GAAmB;AAAA,MACjB,OAAAqkC;AAAA,MACA,QAAQg3G,EAAA,MAAK4Y,IAAO;AAAA,MACpB,QAAQ5Y,EAAA,MAAK4Y,IAAO;AAAA,IAC5B,KACMhnJ,IAAAjN,KAAA,gBAAAA,EAAO,aAAP,QAAAiN,EAAA,KAAAjN,GAAkBqkC,GAAOg3G,EAAA,MAAK4Y,IAAO;AACrC;AAAA,EACF;AACA,MAAI,CAAC5jG,KAAU6nG,KAAiB,CAACC,GAAmB9zH,CAAK,GAAG;AAC1D,IAAAA,EAAM,eAAc,GACpBA,EAAM,gBAAe,GACrBg3G,EAAA,MAAK4Y,IAAO,OAAO,KAAK,KAAK,OAAO,SAAQ,IAAK,KAAK,OAAO5vH,EAAM,GAAG,GAAGA,CAAK;AAC9E;AAAA,EACF;AACA,MAAKgsB,GAGL;AAAA,YAFAhsB,EAAM,eAAc,GACpBA,EAAM,gBAAe,GACbgsB,GAAM;AAAA,MACZ,KAAK;AAAA,MACL,KAAK;AACH,QAAAmtF,EAAA,MAAK2Z,IAAAiB,IAAL,WAAc/zH,GAAOgsB,GAAQA,MAAW;AACxC;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,cAAM4nG,IAAe,KAAK,GAAG,cAAc,4BAA4B;AACvE,YAAIA;AACF,UAAAA,EAAa;AAAA,YACX,IAAI,cAAc,WAAW;AAAA,cAC3B,KAAK5nG,MAAW,aAAa,OAAO;AAAA,cACpC,UAAUhsB,EAAM;AAAA,cAChB,SAASA;AAAA,YACvB,CAAa;AAAA,UACb;AAAA,aACe;AACL,gBAAMiD,IAASjD,EAAM,WAAW,MAAM;AACtC,UAAAg3G,EAAA,MAAK4Y,IAAO,OAAO;AAAA,YACjB,KAAK,OAAO,YAAY5jG,MAAW,aAAa,CAAC/oB,IAAS,CAACA;AAAA,YAC3DjD;AAAA,UACZ;AAAA,QACQ;AACA;AAAA,MACF,KAAK;AACH,QAAAg3G,EAAA,MAAK4Y,IAAO,OAAO,iBAAiB,gBAAgB5vH,CAAK;AACzD;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,cAAMg0H,IAAe,KAAK,OAAO,aAAY;AAC7C,QAAAhd,EAAA,MAAK4Y,IAAO,OAAO;AAAA,UACjB,KAAK,IAAI,MAAM,KAAK,IAAI,GAAGoE,KAAgBhoG,MAAW,YAAY,OAAO,MAAM,CAAC;AAAA,UAChFhsB;AAAA,QACV;AACQ;AAAA,MACF;AACE,SAAAxlB,KAAAD,IAAAy8H,EAAA,MAAK4Y,IAAO,QAAO5jG,OAAnB,QAAAxxC,EAAA,KAAAD,GAA6BylB;AAAA,IACrC;AACI,SAAK,OAAO,mBAAmB,IAAI;AAAA,MACjC,QAAQgsB;AAAA,MACR,OAAAhsB;AAAA,IACN,CAAK;AAAA;AACH,GACAwzH,KAAmB,SAACxzH,GAAO;AACzB,EAAIuyH,GAAmBvyH,EAAM,MAAM,KAAKm5G,EAAA,MAAK2Z,IAAAY,IAAL,WAAwB1zH,GAAO,UACrEA,EAAM,eAAc;AAExB,GACA0zH,KAAkB,SAAC1zH,GAAO;AACxB,QAAMi0H,IAAe;AAAA,IACnB,GAAG,KAAK,OAAO,aAAY;AAAA,IAC3B,GAAGjd,EAAA,MAAK4Y,IAAO;AAAA,EACrB,GACU5jG,IAAS,OAAO,KAAKioG,CAAY,EAAE,KAAK,CAACC,MAAY;;AACzD,UAAMv4J,IAAQs4J,EAAaC,CAAO,GAAGj1J,IAAOxD,GAAQE,CAAK,IAAIA,EAAM,KAAK,GAAG,IAAIgkD,GAAShkD,CAAK,IAAIA,IAAQA,KAAA,gBAAAA,EAAO,MAC1Gw4J,KAAgB1xJ,IAAAhH,GAAQwD,CAAI,IAAIA,IAAOA,KAAA,gBAAAA,EAAM,MAAM,SAAnC,gBAAAwD,EAA0C;AAAA,MAC9D,CAAC1F,MAAQq3J,GAAkBr3J,CAAG,EAAE,QAAQ,YAAY,MAAM,EAAE,MAAM,GAAG;AAAA;AAEvE,WAAOo3J,KAAA,gBAAAA,EAAc,KAAK,CAACE,MAAU;AACnC,YAAMC,IAAe,IAAI,IAAID,EAAM,OAAO,CAACt3J,MAAQ21J,GAAc,IAAI31J,CAAG,CAAC,CAAC;AAC1E,iBAAWw3J,KAAU7B,IAAe;AAClC,cAAM8B,IAAaD,EAAO,YAAW,IAAK;AAC1C,YAAI,CAACD,EAAa,IAAIC,CAAM,KAAKv0H,EAAMw0H,CAAU;AAC/C,iBAAO;AAAA,MAEX;AACA,aAAOH,EAAM,MAAM,CAACt3J,MACX21J,GAAc,IAAI31J,CAAG,IAAIijC,EAAMjjC,EAAI,YAAW,IAAK,KAAK,IAAIijC,EAAM,QAAQjjC,EAAI,QAAQ,SAAS,GAAG,CAC1G;AAAA,IACH;AAAA,EACF,CAAC;AACD,SAAO;AAAA,IACL,QAAAivD;AAAA,IACA,OAAOA,IAASioG,EAAajoG,CAAM,IAAI;AAAA,EAC7C;AACE,GACA+mG,KAAA,eACA0B,KAAe,SAACz0H,GAAOjpC,GAAM;AAC3B,QAAM29J,IAAS10H,EAAM,WAAW,KAAK;AACrC,SAAO+2G,EAAA,MAAKgc,IAAa,KAAK;AAAA,IAC5B;AAAA,IACA,KAAK;AAAA,OACF/b,EAAA,MAAK+b,OAAc,KAAK,OAAO,kBAAkBh8J,MAAS,gBAAgB,CAAC29J,IAAS,CAACA;AAAA,MACtF,KAAK,OAAO,SAAQ;AAAA,IAC5B;AAAA,EACA;AACE,GACA1B,KAAA,eACAW,KAAyB,SAAC3zH,GAAO20H,GAAS;;AACxC,GAAAlyJ,IAAAu0I,EAAA,MAAKgc,QAAL,QAAAvwJ,EAAkB;AAAA,IAChB,IAAI,cAAcu9B,EAAM,MAAM;AAAA,MAC5B,KAAM20H,IAAmB,UAAT;AAAA,MAChB,UAAU30H,EAAM;AAAA,MAChB,SAASA;AAAA,IACjB,CAAO;AAAA;AAEL,GACA+zH,KAAQ,SAAC/zH,GAAOjpC,GAAM49J,GAAS;AAC7B,EAAK,KAAK,OAAO,cACZ3d,EAAA,MAAKgc,OACRjc,EAAA,MAAKic,IAAc,KAAK,GAAG,cAAc,0BAA0B,IAEjEhc,EAAA,MAAKgc,MACP7Z,EAAA,MAAK2Z,IAAAa,IAAL,WAA+B3zH,GAAO20H,KAEtC3d,EAAA,MAAK4Y,IAAO,OAAO,QAAQzW,EAAA,MAAK2Z,IAAA2B,IAAL,WAAqBz0H,GAAOjpC,IAAOipC,CAAK;AAEvE;AAEF,MAAM40H,KAAiB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AACxE,SAASR,GAAkBr3J,GAAK;AAC9B,SAAOA,EAAI,QAAQ,gBAAgB,CAAC8d,GAAGynF,MAAQsyD,GAAetyD,IAAM,CAAC,CAAC;AACxE;AACA,SAASwxD,GAAmB9zH,GAAO;AACjC,aAAWjjC,KAAO21J;AAChB,QAAI1yH,EAAMjjC,EAAI,YAAW,IAAK,KAAK;AACjC,aAAO;AAGX,SAAO;AACT;;AAEA,MAAM83J,WAAyBjb,GAAe;AAAA,EAE5C,YAAYkb,GAAU;AACpB,UAAK;AAFP,IAAAle,EAAA,MAAAme;AAGE,IAAAhe,EAAA,MAAKge,IAAYD;AAAA,EACnB;AAAA,EACA,SAASnrI,GAAI;AACX,UAAM,EAAE,QAAA6vH,GAAQ,UAAAwb,MAAa3K,GAAe,GAAIprJ,IAAO0qB,EAAG,aAAa,mBAAmB;AAC1F,QAAI1qB,GAAM;AACR,MAAA+1J,EAAShe,EAAA,MAAK+d,GAAS,IAAI91J,GACtBwzI,MACHyB,GAAU,MAAM;AACd,eAAO8gB,EAAShe,EAAA,MAAK+d,GAAS;AAAA,MAChC,CAAC;AAEH;AAAA,IACF;AACA,UAAME,IAAYzb,EAAO,aAAY,EAAGxC,EAAA,MAAK+d,GAAS;AACtD,QAAIE,GAAW;AACb,YAAM10G,IAAQ9kD,GAAQw5J,CAAS,IAAIA,EAAU,KAAK,GAAG,IAAIt1G,GAASs1G,CAAS,IAAIA,IAAYA,KAAA,gBAAAA,EAAW;AACtG,MAAAtrI,EAAG,aAAa,qBAAqBluB,GAAQ8kD,CAAK,IAAIA,EAAM,KAAK,GAAG,IAAIA,CAAK;AAAA,IAC/E;AAAA,EACF;AACF;AAtBEw0G,KAAA;;AAwBF,MAAMG,WAAsB1C,GAAsB;AAAA,EAAlD;AAAA;AAAA,IAAA5b,EAAA,MAAAue;AACE,IAAAve,EAAA,MAAAwe,IAAa;AACb,IAAAxe,EAAA,MAAAye,IAAkB;AAClB,IAAAze,EAAA,MAAA0e,IAAoB55E,GAAO,EAAK;AAChC,IAAAk7D,EAAA,MAAA2e,IAAkB75E,GAAO,EAAK;AAC9B,IAAAk7D,EAAA,MAAA4e,IAAe;AACf,IAAA5e,EAAA,MAAA6e,IAAW/5E,GAAO,EAAI;AAOtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA/hE,EAAA,sBAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKf,IAAI,UAAU;AACZ,WAAOq9H,EAAA,MAAKye,IAAL;AAAA,EACT;AAAA,EACA,IAAI,QAAQC,GAAS;AACnB,IAAA1e,EAAA,MAAKye,IAAS,IAAIC,CAAO;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,mBAAmB;AACrB,UAAM,EAAE,0BAAAC,MAA6B,KAAK;AAC1C,WAAO3e,EAAA,MAAKse,IAAL,cAA4BK,EAAwB;AAAA,EAC7D;AAAA,EACA,IAAI,iBAAiB1zC,GAAM;AACzB,IAAA+0B,EAAA,MAAKse,IAAkB,IAAIrzC,CAAI;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,UAAU;AACZ,WAAO,KAAK,OAAO,gBAAe;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAIA,KAAK+7B,IAAQ,GAAGj7F,GAAS;AACvB,IAAAo2F,EAAA,MAAKgc,IAAAS,IAAL,YACK5e,EAAA,MAAKqe,OACRlc,EAAA,MAAKgc,IAAAU,IAAL,WAAuB,IAAM7X,GAAOj7F;AAAA,EAExC;AAAA;AAAA;AAAA;AAAA,EAIA,KAAKi7F,IAAQ,KAAK,cAAcj7F,GAAS;AACvC,IAAAo2F,EAAA,MAAKgc,IAAAS,IAAL,YACK5e,EAAA,MAAKqe,OACRlc,EAAA,MAAKgc,IAAAU,IAAL,WAAuB,IAAO7X,GAAOj7F;AAAA,EAEzC;AAAA;AAAA;AAAA;AAAA,EAIA,MAAMA,GAAS;AACb,IAAAg0F,EAAA,MAAKse,IAAkB,KACvBlc,EAAA,MAAKgc,IAAAS,IAAL,YACAzc,EAAA,MAAKgc,IAAAU,IAAL,WAAuB,IAAM,GAAG9yG;AAAA,EAClC;AAAA,EACA,OAAOA,GAAS;AAEd,IADAg0F,EAAA,MAAKse,IAAkB,KACnB,MAAK,OAAO,YAChBlc,EAAA,MAAKgc,IAAAU,IAAL,WAAuB,IAAO,KAAK,cAAc9yG;AAAA,EACnD;AAAA,EACA,YAAY;AACV,IAAA5sB,EAAOgjH,EAAA,MAAKgc,IAAAW,IAAM,KAAK,IAAI,CAAC;AAAA,EAC9B;AA8GF;AAzLEV,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eANFN,KAAA,eA6EEW,KAAK,WAAG;AACN,QAAM,EAAE,UAAAC,MAAa,KAAK;AAC1B,MAAI,CAAC,KAAK,MAAM,CAAC/e,EAAA,MAAKye,IAAL,WAAiB;AAClC,MAAIM,EAAQ,MAAO,SAAS;AAC1B,SAAK,KAAI;AACT;AAAA,EACF;AACA,EAAA5/H,EAAOgjH,EAAA,MAAKgc,IAAAa,IAAY,KAAK,IAAI,CAAC,GAClC7/H,EAAOgjH,EAAA,MAAKgc,IAAAc,IAAa,KAAK,IAAI,CAAC;AACnC,QAAMC,IAAS/c,EAAA,MAAKgc,IAAAgB,IAAQ,KAAK,IAAI,GAAGC,IAAUjd,EAAA,MAAKgc,IAAAkB,IAAS,KAAK,IAAI,GAAGC,IAAQnd,EAAA,MAAKgc,IAAAoB,IAAO,KAAK,IAAI;AACzG,MAAI5f,GAAiB,KAAK,EAAE,EAAE,IAAI,YAAY,CAAC32G,MAAU,KAAK,KAAK,GAAGA,CAAK,CAAC,EAAE,IAAI,QAAQk2H,CAAM,EAAE,IAAI,SAASE,CAAO,EAAE,IAAI,OAAOE,CAAK,EAAE,IAAI,kBAAkBF,CAAO;AACzK,GACAJ,KAAW,WAAG;AACZ,MAAI,CAAC,KAAK,GAAI;AACd,QAAM,EAAE,SAAAQ,GAAS,SAAAC,GAAS,QAAAC,EAAM,IAAK,KAAK;AAC1C,MAAI,CAACF,EAAO,KAAMC,EAAO,MAAO,OAAQ;AACxC,QAAME,IAAS,IAAIhgB,GAAiB,KAAK,EAAE,GAAGigB,IAAyB,KAAK;AAC5E,GAAI,CAACA,KAA0B,CAAC5f,EAAA,MAAKue,IAAL,eAC9Bp/H,EAAO,MAAM;AACX,IAAKugI,OAAUC,EAAO,IAAI,eAAexd,EAAA,MAAKgc,IAAA0B,IAAY,KAAK,IAAI,CAAC;AAAA,EACtE,CAAC,GAECD,KACFD,EAAO,IAAI,cAAcxd,EAAA,MAAKgc,IAAA2B,IAAc,KAAK,IAAI,CAAC,EAAE,IAAI,cAAc3d,EAAA,MAAKgc,IAAA4B,IAAc,KAAK,IAAI,CAAC;AAE3G,GACAd,KAAY,WAAG;AACb,QAAM,EAAE,QAAAS,GAAQ,SAAAF,GAAS,eAAAQ,EAAa,IAAK,KAAK;AAChD,MAAIN,EAAM,KAAMM,OAAmB,CAACR,EAAO,EAAI;AAC/C,QAAMS,IAAa9d,EAAA,MAAKgc,IAAA0B,IAAY,KAAK,IAAI;AAC7C,EAAA1gI,EAAO,MAAM;AACX,QAAI,CAAC,KAAK,GAAI;AACd,UAAMsgI,IAAU,KAAK,OAAO,QAAO,GAAIS,IAAUT,MAAY,UAAUE,IAAS,IAAIhgB,GAAiB,KAAK,EAAE,GAAGwgB,IAAa,CAACD,IAAU,aAAa,aAAa,SAAS;AAC1K,eAAWE,KAAaD;AACtB,MAAAR,EAAO,IAAIS,GAAWH,GAAY,EAAE,SAAS,IAAO;AAAA,EAExD,CAAC;AACH,GACAd,KAAO,SAACn2H,GAAO;AACb,EAAIA,EAAM,SAAS,QAAQ,OAAO,MAClC,KAAK,KAAK,GAAGA,CAAK,GAClB,KAAK,KAAK,QAAQA,CAAK;AACzB,GACAq2H,KAAQ,SAACr2H,GAAO;AACd,OAAK,KAAK,GAAGA,CAAK;AACpB,GACAu2H,KAAM,SAACv2H,GAAO;AACZ,QAAM,EAAE,MAAAoH,MAAS,KAAK;AACtB,EAAIA,EAAI,KAAI,KAAK,KAAK,GAAGpH,CAAK;AAChC,GACA82H,KAAa,SAAC92H,GAAO;AACnB,EAAAg3G,EAAA,MAAKue,IAAgB,IAAI,EAAK,GAC9B,KAAK,KAAK,GAAGv1H,CAAK,GAClB,KAAK,KAAK,QAAQA,CAAK;AACzB,GACA+2H,KAAa,SAAC/2H,GAAO;AACnB,EAAAg3G,EAAA,MAAKue,IAAgB,IAAI,EAAI,GAC7B,KAAK,KAAK,GAAGv1H,CAAK;AACpB,GACA41H,KAAe,WAAG;AAChB,SAAO,aAAa5e,EAAA,MAAKoe,GAAU,GACnCre,EAAA,MAAKqe,IAAa;AACpB,GACAyB,KAAW,SAAC72H,GAAO;;AACjB;AAAA,EAEEA,EAAM,iBAAiBg3G,EAAA,MAAKqe,OAAmBvH,GAAkB9tH,CAAK,MAIpEw3G,GAAgBx3G,CAAK,MACnBA,EAAM,QAAQ,aAChBv9B,IAAA,KAAK,OAAL,QAAAA,EAAS,SACTs0I,EAAA,MAAKye,IAAe,SACXxe,EAAA,MAAKwe,QACdx1H,EAAM,eAAc,GACpB,sBAAsB,MAAM;;AAC1B,KAAAv9B,IAAAu0I,EAAA,MAAKwe,QAAL,QAAA/yJ,EAAmB,SACnBs0I,EAAA,MAAKye,IAAe;AAAA,EACtB,CAAC,KAGL,KAAK,KAAK,GAAGx1H,CAAK,GAClB,KAAK,KAAK,KAAK,cAAcA,CAAK;AACpC,GACA61H,KAAiB,SAACwB,GAASrZ,GAAOj7F,GAAS;AACzC,MAAIi7F,MAAU,GAAG;AACf,IAAA7E,EAAA,MAAKgc,IAAAnG,IAAL,WAAeqI,GAASt0G;AACxB;AAAA,EACF;AACA,EAAAg0F,EAAA,MAAKqe,IAAa,OAAO,WAAW,MAAM;AACxC,IAAK,KAAK,SACVjc,EAAA,MAAKgc,IAAAnG,IAAL,WAAeqI,KAAW,CAACrgB,EAAA,MAAKqe,KAAiBtyG;AAAA,EACnD,GAAGi7F,CAAK;AACV,GACAgR,KAAS,SAACqI,GAASt0G,GAAS;;AAC1B,EAAI,KAAK,OAAO,gBAAe,MAAOs0G,MACtC,KAAK,OAAO,gBAAgB,IAAIA,CAAO,GACnC,CAACA,KAAW,SAAS,mBAAiB50J,IAAA,KAAK,OAAL,QAAAA,EAAS,SAAS,SAAS,oBACnEs0I,EAAA,MAAKye,IAAe,SAAS,gBAC7B,sBAAsB,MAAM;;AAC1B,KAAA/yJ,IAAA,KAAK,OAAL,QAAAA,EAAS,MAAM,EAAE,eAAe,GAAI;AAAA,EACtC,CAAC,IAEH,KAAK,SAAS,mBAAmB;AAAA,IAC/B,QAAQ40J;AAAA,IACR,SAAAt0G;AAAA,EACN,CAAK;AACH;AAGF,MAAMu0G,KAAiB3Y,GAAQ;;AAC/B,MAAM4Y,WAA6B3d,GAAe;AAAA,EAAlD;AAAA;AAAA,IAAAhD,EAAA,MAAA4gB;AAME;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA5gB,EAAA,MAAA6gB,IAAa;AACb,IAAA7gB,EAAA,MAAA8gB,IAAU;AAAA;AAAA,EACV,IAAI,SAAS;AACX,WAAO1gB,EAAA,MAAK0gB;AAAA,EACd;AAAA,EACA,IAAI,YAAY;AACd,WAAOJ;AAAA,EACT;AAAA,EACA,YAAY;AACV,QAAI3gB,GAAiBgI,EAAO,EAAE,IAAI,oBAAoBxF,EAAA,MAAKqe,IAAAxI,IAAU,KAAK,IAAI,CAAC,EAAE,IAAI,mBAAmB7V,EAAA,MAAKqe,IAAAG,IAAS,KAAK,IAAI,CAAC,GAChIzjB,GAAUiF,EAAA,MAAKqe,IAAAI,IAAc,KAAK,IAAI,CAAC;AAAA,EACzC;AAAA,EAgBA,MAAM,QAAQ;AACZ,QAAI;AAEF,aADA7gB,EAAA,MAAK0gB,IAAa,KACd,CAAC,KAAK,MAAMI,GAAa,KAAK,EAAE,IAAG,UACvCC,GAAmB,GACZnZ,GAAQ,kBAAkB,KAAK,EAAE;AAAA,IAC1C,SAAS9oJ,GAAO;AACd,YAAAkhJ,EAAA,MAAK0gB,IAAa,KACZ5hK;AAAA,IACR;AAAA,EACF;AAAA,EACA,MAAM,OAAO;AACX,QAAI,GAAC,KAAK,MAAM,CAACgiK,GAAa,KAAK,EAAE;AACrC,aAAAC,GAAmB,GACZnZ,GAAQ,eAAc;AAAA,EAC/B;AACF;AA3CE8Y,KAAA,eACAC,KAAA,eAPFF,KAAA,eAkBQI,KAAa,iBAAG;AACpB,EAAIN,MAAgB,MAAM,KAAK,KAAI;AACrC,GACAtI,KAAS,SAAChvH,GAAO;AACf,QAAMy1B,IAASoiG,GAAa,KAAK,EAAE;AACnC,EAAIpiG,MAAWuhF,EAAA,MAAK0gB,QACfjiG,KAAQshF,EAAA,MAAK0gB,IAAa,KAC/B1gB,EAAA,MAAK2gB,IAAUjiG,IACf,KAAK,SAAS,qBAAqB,EAAE,QAAQA,GAAQ,SAASz1B,GAAO;AACvE,GACA23H,KAAQ,SAAC33H,GAAO;AACd,EAAKg3G,EAAA,MAAKygB,QACV,KAAK,SAAS,oBAAoB,EAAE,QAAQ,MAAM,SAASz3H,GAAO,GAClE+2G,EAAA,MAAK0gB,IAAa;AACpB;AAqBF,SAASI,GAAahgB,GAAM;AAC1B,MAAI8G,GAAQ,sBAAsB9G,EAAM,QAAO;AAC/C,MAAI;AACF,WAAOA,EAAK;AAAA;AAAA,MAEV8G,GAAQ;AAAA,IACd;AAAA,EACE,QAAgB;AACd,WAAO;AAAA,EACT;AACF;AACA,SAASmZ,KAAsB;AAC7B,MAAI,CAAAR;AACJ,UAAM;AAAA,MACJ;AAAA,IACJ;AACA;;AAEA,MAAMS,KAAN,MAAMA,WAAoCne,GAAe;AAAA,EAAzD;AAAA;AAAA,IAAAhD,EAAA,MAAAohB;AACE,IAAAphB,EAAA,MAAAqhB,IAAQv8E,GAAOy9D,EAAA,MAAK6e,IAAAE,IAAL,UAA4B;AAC3C,IAAAthB,EAAA,MAAAuhB,IAAUz8E,GAAO,EAAK;AACtB,IAAAk7D,EAAA,MAAAwhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,OAAO;AACT,WAAOphB,EAAA,MAAKihB,IAAL;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,SAAS;AACX,WAAOjhB,EAAA,MAAKmhB,IAAL;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,WAAW;AACb,WAAOnhB,EAAA,MAAKihB,IAAL,WAAa,WAAW,UAAU;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,YAAY;AACd,WAAOjhB,EAAA,MAAKihB,IAAL,WAAa,WAAW,WAAW;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,YAAY;AACd,WAAOF,GAA4B;AAAA,EACrC;AAAA,EACA,YAAY;AACV,QAAI,KAAK;AACP,MAAArhB,GAAY,OAAO,aAAa,UAAUyC,EAAA,MAAK6e,IAAAK,IAAqB,KAAK,IAAI,CAAC;AAAA,SACzE;AACL,YAAMt0J,IAAQ,OAAO,WAAW,0BAA0B;AAC1D,MAAAA,EAAM,WAAWo1I,EAAA,MAAK6e,IAAAK,IAAqB,KAAK,IAAI,GACpDnkB,GAAU,MAAMnwI,EAAM,WAAW,IAAI;AAAA,IACvC;AACA,IAAAmwI,GAAUiF,EAAA,MAAK6e,IAAAJ,IAAc,KAAK,IAAI,CAAC;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,MAAM,KAAK/M,GAAU;AACnB,IAAIlX,GAAKqD,EAAA,MAAKmhB,GAAO,KAAKnhB,EAAA,MAAKohB,QAAiBvN,MAChD1R,EAAA,MAAK6e,IAAAM,IAAL,YACA,MAAM,OAAO,YAAY,KAAKzN,CAAQ,GACtC7T,EAAA,MAAKmhB,IAAQ,IAAI,EAAI,GACrBphB,EAAA,MAAKqhB,IAAevN;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,SAAS;AACb,IAAKlX,GAAKqD,EAAA,MAAKmhB,GAAO,MACtBhf,EAAA,MAAK6e,IAAAM,IAAL,YACAvhB,EAAA,MAAKqhB,IAAe,SACpB,MAAM,OAAO,YAAY,OAAM,GAC/BphB,EAAA,MAAKmhB,IAAQ,IAAI,EAAK;AAAA,EACxB;AAYF;AAlHEF,KAAA,eACAE,KAAA,eACAC,KAAA,eAHFJ,KAAA,eA4DQJ,KAAa,iBAAG;AACpB,EAAI,KAAK,aAAa5gB,EAAA,MAAKmhB,IAAL,cAAgB,MAAM,KAAK,OAAM;AACzD,GACAE,KAAoB,SAACr4H,GAAO;AAC1B,EAAAg3G,EAAA,MAAKihB,IAAM,IAAI9e,EAAA,MAAK6e,IAAAE,IAAL,UAA4B,GAC3C,KAAK,SAAS,sBAAsB;AAAA,IAClC,QAAQ;AAAA,MACN,aAAavkB,GAAKqD,EAAA,MAAKihB,GAAK;AAAA,MAC5B,MAAMjhB,EAAA,MAAKohB;AAAA,IACnB;AAAA,IACM,SAASp4H;AAAA,EACf,CAAK;AACH,GAgCAs4H,KAA2B,WAAG;AAC5B,MAAI,MAAK;AACT,UAAM;AAAA,MACJ;AAAA,IACN;AACE,GACAJ,KAAqB,WAAG;AACtB,SAAIzlB,KAAkB,qBAClB,KAAK,YAAkB,OAAO,OAAO,YAAY,OAC9C,OAAO,cAAc,OAAO,cAAc,sBAAsB;AACzE;AAAA;AAAA;AAvEA94H,EA3CIo+I,IA2CG,aAAYzU,GAAe;AA3CpC,IAAMiV,KAANR;AAqHA,MAAMS,GAAoB;AAAA,EAA1B;AACE,IAAA7+I,EAAA,cAAO;AACP,IAAAA,EAAA;AAAA;AAAA,EACA,QAAQvZ,GAAK;AACX,WAAKolJ,GAAWplJ,CAAG,IACZqyI,MAAa,CAAC9yF,GAASv/C,EAAI,GAAG,KAAKA,EAAI,SAAS,OAAOojJ,GAAiB,KAAK,QAAQpjJ,EAAI,IAAI,IADvE;AAAA,EAE/B;AAAA,EACA,YAAY;AACV,WAAO;AAAA,EACT;AAAA,EACA,MAAM,KAAK0qB,GAAK;AACd,QAAI2nH;AACF,YAAM,MAAM,oDAAoD;AAElE,WAAO,KAAK,MAAM,OAAO,iCAAwB,GAAG,cAAc,KAAK,QAAQ3nH,CAAG;AAAA,EACpF;AACF;AAEA,MAAM2tI,GAAoB;AAAA,EAA1B;AACE,IAAA9+I,EAAA,cAAO;AACP,IAAAA,EAAA;AAAA;AAAA,EACA,QAAQvZ,GAAK;AACX,WAAKqlJ,GAAWrlJ,CAAG,IACZqyI,MAAa,CAAC9yF,GAASv/C,EAAI,GAAG,KAAKA,EAAI,SAAS,OAAOsjJ,GAAiB,KAAK,QAAQtjJ,EAAI,IAAI,IADvE;AAAA,EAE/B;AAAA,EACA,YAAY;AACV,WAAO;AAAA,EACT;AAAA,EACA,MAAM,KAAK0qB,GAAK;AACd,QAAI2nH;AACF,YAAM,MAAM,oDAAoD;AAElE,WAAO,KAAK,MAAM,QAAQ,QAAO,EAAG,KAAK,WAAY;AAAE,aAAOimB;AAAA,IAAY,CAAC,GAAG,cAAc,KAAK,QAAQ5tI,CAAG;AAAA,EAC9G;AACF;AAEA,MAAM6tI,KAAN,MAAMA,WAA0BF,GAAoB;AAAA,EAApD;AAAA;AAEE,IAAA9+I,EAAA,cAAO;AAAA;AAAA,EACP,QAAQvZ,GAAK;AACX,WAAOu4J,GAAkB,aAAajT,GAAStlJ,CAAG;AAAA,EACpD;AAAA,EACA,MAAM,KAAK5I,GAAS;AAClB,QAAIi7I;AACF,YAAM,MAAM,kDAAkD;AAEhE,WAAO,KAAK,MAAM,OAAO,iCAAwB,GAAG,YAAY,KAAK,QAAQj7I,CAAO;AAAA,EACtF;AACF;AAXEmiB,EADIg/I,IACG,aAAYzU,GAAc;AADnC,IAAM0U,KAAND,IAcIE,KAAe,MAAMC,KAAY,CAAA,GAAIC,KAAiB,CAAA;AAC1D,SAASC,KAAsB;AAC7B,SAAOH,YAAiB,IAAI,aAAY;AAC1C;AACA,SAASI,KAAiB;AACxB,QAAMC,IAAWF,GAAmB,GAAIG,IAAWD,EAAS,WAAU;AACtE,SAAAC,EAAS,QAAQD,EAAS,WAAW,GACrCJ,GAAU,KAAKK,CAAQ,GAChBA;AACT;AACA,SAASC,GAAoBzvI,GAAIwvI,GAAU;AACzC,QAAMD,IAAWF,GAAmB,GAAI54J,IAAM84J,EAAS,yBAAyBvvI,CAAE;AAClF,SAAIwvI,KACF/4J,EAAI,QAAQ+4J,CAAQ,GAEtBJ,GAAe,KAAK34J,CAAG,GAChBA;AACT;AACA,SAASi5J,GAAgB/6J,GAAM;AAC7B,QAAMg7J,IAAMR,GAAU,QAAQx6J,CAAI;AAClC,EAAIg7J,MAAQ,OACVR,GAAU,OAAOQ,GAAK,CAAC,GACvBh7J,EAAK,WAAU,GACfi7J,GAAiC;AAErC;AACA,SAASC,GAAqBp5J,GAAK;AACjC,QAAMk5J,IAAMP,GAAe,QAAQ34J,CAAG;AACtC,EAAIk5J,MAAQ,OACVP,GAAe,OAAOO,GAAK,CAAC,GAC5Bl5J,EAAI,WAAU,GACdm5J,GAAiC;AAErC;AACA,SAASA,KAAoC;AAC3C,EAAIV,MAAgBC,GAAU,WAAW,KAAKC,GAAe,WAAW,KACtEF,GAAa,QAAQ,KAAK,MAAM;AAC9B,IAAAA,KAAe;AAAA,EACjB,CAAC;AAEL;;AAEA,MAAMY,GAAU;AAAA,EAWd,YAAYjK,GAAOltH,GAAU;AAX/B,IAAAs0G,EAAA,MAAA8iB;AACE,IAAA9iB,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAA+iB;AACA,IAAA/iB,EAAA,MAAAgjB,IAAY;AACZ,IAAAhjB,EAAA,MAAAijB,IAAgB;AAQd,IAAA9iB,EAAA,MAAK6Y,IAASJ,IACdzY,EAAA,MAAK4iB,IAAYr3H;AAAA,EACnB;AAAA,EATA,IAAI,cAAc;;AAChB,aAAO15B,KAAAnG,IAAAu0I,EAAA,MAAK4iB,QAAL,gBAAAn3J,EAAgB,SAAhB,gBAAAmG,EAAsB,UAAS;AAAA,EACxC;AAAA,EACA,IAAI,YAAY;AACd,WAAO;AAAA,EACT;AAAA,EAKA,QAAQsiJ,GAAM;AACZ,UAAM4O,IAAW,KAAK;AACtB,QAAI5O,MAAS,KAAK,aAGlB;AAAA,UAAIA,MAAS,KAAK4O,MAAa,GAAG;AAChC,aAAK,WAAU;AACf;AAAA,MACF;AACA,MAAK9iB,EAAA,MAAK4iB,QACR7iB,EAAA,MAAK6iB,IAAYX,GAAc,IAC3BjiB,EAAA,MAAK6iB,OACP7iB,EAAA,MAAK6iB,IAAc,QAAQ7iB,EAAA,MAAK4iB,GAAS,IAGxC5iB,EAAA,MAAK6iB,OACR9iB,EAAA,MAAK8iB,IAAgBT,GAAoBpiB,EAAA,MAAK4Y,KAAQ5Y,EAAA,MAAK4iB,GAAS,IAEtE5iB,EAAA,MAAK4iB,IAAU,KAAK,QAAQ1O,GAC5BlU,EAAA,MAAK2iB,IAAL,WAAezO;AAAA;AAAA,EACjB;AAAA,EACA,aAAa;AACX,IAAKlU,EAAA,MAAK4iB,QACN5iB,EAAA,MAAK6iB,OACP7iB,EAAA,MAAK6iB,IAAc,QAAQb,GAAmB,EAAG,WAAW,GAE9D7f,EAAA,MAAKugB,IAAAK,IAAL,YACA/iB,EAAA,MAAK2iB,IAAL,WAAe;AAAA,EACjB;AAAA,EACA,UAAU;AACR,IAAAxgB,EAAA,MAAKugB,IAAAM,IAAL,YACA7gB,EAAA,MAAKugB,IAAAK,IAAL;AAAA,EACF;AAmBF;AAjEEnK,KAAA,eACA+J,KAAA,eACAC,KAAA,eACAC,KAAA,eAJFH,KAAA,eAgDEM,KAAe,WAAG;AAChB,MAAKhjB,EAAA,MAAK6iB;AACV,QAAI;AACF,MAAAL,GAAqBxiB,EAAA,MAAK6iB,GAAa;AAAA,IACzC,QAAY;AAAA,IACZ,UAAC;AACC,MAAA9iB,EAAA,MAAK8iB,IAAgB;AAAA,IACvB;AACF,GACAE,KAAgB,WAAG;AACjB,MAAK/iB,EAAA,MAAK4iB;AACV,QAAI;AACF,MAAAP,GAAgBriB,EAAA,MAAK4iB,GAAS;AAAA,IAChC,QAAY;AAAA,IACZ,UAAC;AACC,MAAA7iB,EAAA,MAAK6iB,IAAY;AAAA,IACnB;AACF;AAGF,MAAMK,KAAc,CAAC,SAAS,QAAQ,oBAAoB,YAAY,UAAU;;AAChF,MAAMC,GAAe;AAAA,EAArB;AAAA,IAAAtjB,EAAA,MAAAujB;AACE,IAAAvjB,EAAA,MAAA5rF,IAAS0wB,GAAO0+E,IAAoB;AACpC,IAAAxjB,EAAA,MAAAyjB,IAAc3+E,GAAO+2D,KAAY,YAAY,SAAS,eAAe;AACrE,IAAAmE,EAAA,MAAA0jB;AAAA;AAAA,EACA,UAAU;AACR,UAAM3D,IAAS,IAAIhgB,GAAiB,MAAM,GAAG4jB,IAAkBphB,EAAA,MAAKghB,IAAAK,IAAiB,KAAK,IAAI;AAC9F,eAAWpD,KAAa6C;AACtB,MAAAtD,EAAO,IAAIS,GAAWmD,CAAe;AAEvC,IAAIlX,MACFsT,EAAO,IAAI,gBAAgB,CAAC32H,MAAU;AACpC,MAAA+2G,EAAA,MAAKujB,IAA6B,WAAW,MAAM;AACjD,QAAMt6H,EAAM,oBAAoBA,EAAM,YAAY,SAAS,MACzDg3G,EAAA,MAAKhsF,IAAO,IAAI,QAAQ,GACxBgsF,EAAA,MAAKqjB,IAAY,IAAI,QAAQ;AAAA,MAEjC,GAAG,CAAC;AAAA,IACN,CAAC;AAAA,EAEL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,IAAI,YAAY;AACd,WAAOrjB,EAAA,MAAKhsF,IAAL;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,IAAI,aAAa;AACf,WAAOgsF,EAAA,MAAKqjB,IAAL;AAAA,EACT;AAQF;AArDErvG,KAAA,eACAqvG,KAAA,eACAC,KAAA,eAHFH,KAAA,eA+CEK,KAAgB,SAACx6H,GAAO;AACtB,EAAIqjH,MAAW,OAAO,aAAarM,EAAA,MAAKsjB,GAA0B,IAC9Dt6H,EAAM,SAAS,UAAUg3G,EAAA,MAAKhsF,IAAL,eAAkB,cAC7CgsF,EAAA,MAAKhsF,IAAO,IAAIovG,GAAmBp6H,CAAK,CAAC,GACzCg3G,EAAA,MAAKqjB,IAAY,IAAI,SAAS,mBAAmB,WAAW,WAAW,SAAS;AAEpF;AAEF,SAASD,GAAmBp6H,GAAO;AAEjC,SADIyyG,OACAzyG,KAAA,gBAAAA,EAAO,UAAS,UAAU,SAAS,oBAAoB,WAAiB,WACxE,SAAS,SAAQ,IAAW,WACzB;AACT;;AAEA,MAAMy6H,GAAQ;AAAA,EAGZ,YAAYphI,GAAU;AAHxB,IAAAu9G,EAAA,MAAA8jB;AACE,IAAA9jB,EAAA,MAAA+jB;AACA,IAAA/jB,EAAA,MAAAgkB;AAEE,IAAA7jB,EAAA,MAAK6jB,IAAYvhI;AAAA,EACnB;AAAA,EACA,QAAQ;AACN,IAAK8kB,GAAY64F,EAAA,MAAK2jB,GAAG,KACzBxhB,EAAA,MAAKuhB,IAAAG,IAAL;AAAA,EACF;AAAA,EACA,OAAO;AACL,IAAIjqJ,GAASomI,EAAA,MAAK2jB,GAAG,KAAG,OAAO,qBAAqB3jB,EAAA,MAAK2jB,GAAG,GAC5D5jB,EAAA,MAAK4jB,IAAM;AAAA,EACb;AAQF;AApBEA,KAAA,eACAC,KAAA,eAFFF,KAAA,eAcEG,KAAK,WAAG;AACN,EAAA9jB,EAAA,MAAK4jB,IAAM,OAAO,sBAAsB,MAAM;AAC5C,IAAIx8G,GAAY64F,EAAA,MAAK2jB,GAAG,MACxB3jB,EAAA,MAAK4jB,IAAL,YACAzhB,EAAA,MAAKuhB,IAAAG,IAAL;AAAA,EACF,CAAC;AACH;;AAGF,MAAMC,GAAgB;AAAA,EAYpB,YAAYrjK,GAAUqzB,GAAK;AAZ7B,IAAA8rH,EAAA,MAAAmkB;AACE,IAAAnkB,EAAA,MAAAokB;AACA,IAAApkB,EAAA,MAAA7sH;AACA,IAAA6sH,EAAA,MAAAqkB,IAAW;AACX,IAAArkB,EAAA,MAAAskB,IAAqB;AACrB,IAAAtkB,EAAA,MAAAukB,IAAmB;AACnB,IAAAvkB,EAAA,MAAAwkB,IAAW,IAAIX,GAAQthB,EAAA,MAAK4hB,GAAAM,IAAkB,KAAK,IAAI,CAAC;AACxD,IAAAzkB,EAAA,MAAA0kB,IAAkB,IAAIpB,GAAc;AACpC,IAAAtjB,EAAA,MAAA2kB;AAyBA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA3kB,EAAA,MAAA4kB,IAAgB;AAChB,IAAA5kB,EAAA,MAAA6kB,IAAY;AAwCZ,IAAA7kB,EAAA,MAAA8kB;AACA,IAAA9kB,EAAA,MAAA+kB;AA9DE,IAAA5kB,EAAA,MAAKikB,IAAYvjK,IACjBs/I,EAAA,MAAKhtH,IAAOe,IACZisH,EAAA,MAAKwkB,IAAU,IAAI5kB,GAAiBl/I,EAAS,KAAK,IAClD0hJ,EAAA,MAAK4hB,GAAAa,IAAL,YACA5kB,EAAA,MAAKskB,IAAgB,QAAO,GAC5BnlI,EAAOgjH,EAAA,MAAK4hB,GAAAc,IAAkB,KAAK,IAAI,CAAC,GACxC3nB,GAAUiF,EAAA,MAAK4hB,GAAAe,IAAW,KAAK,IAAI,CAAC;AAAA,EACtC;AAgNF;AAnOEd,KAAA,eACAjxI,KAAA,eACAkxI,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAE,KAAA,eACAC,KAAA,eARFR,IAAA,eASMgB,KAAM,WAAG;AACX,SAAO/kB,EAAA,MAAKgkB,IAAU;AACxB,GAUAc,KAAU,WAAG;;AACX,EAAA/kB,EAAA,MAAKmkB,IAAqB,KAC1BnkB,EAAA,MAAKokB,IAAmB,KACxBnkB,EAAA,MAAKokB,IAAS,KAAI,GAClBpkB,EAAA,MAAKukB,IAAQ,MAAK,IAClB94J,IAAAu0I,EAAA,MAAK0kB,QAAL,QAAAj5J,EAAmB;AACrB,GAMA+4J,KAAA,eACAC,KAAA,eACAJ,KAAiB,WAAG;AAClB,QAAMW,IAAUhlB,EAAA,MAAK+jB,GAAAgB,IAAO;AAE5B,EAAI,EADe1Y,MAAa2Y,IAAUhlB,EAAA,MAAKykB,MAAY,SACxCzkB,EAAA,MAAKwkB,QAAkBQ,MACxC7iB,EAAA,MAAK4hB,GAAAkB,IAAL,WAAwBD,IACxBjlB,EAAA,MAAKykB,IAAgBQ;AAEzB,GACAJ,KAAuB,WAAG;AACxB,EAAAziB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,aAAa/iB,EAAA,MAAK4hB,GAAAoB,MAC5ChjB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,SAAS/iB,EAAA,MAAK4hB,GAAAqB,MACxCjjB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,WAAW/iB,EAAA,MAAK4hB,GAAAsB,MAC1CljB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,SAAS/iB,EAAA,MAAK4hB,GAAApD,MACxCxe,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,gBAAgB/iB,EAAA,MAAK4hB,GAAAuB;AACjD,GACAC,KAAyB,WAAG;AAC1B,EAAIvlB,EAAA,MAAKkkB,QACT/hB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,cAAc/iB,EAAA,MAAK4hB,GAAAyB,MAC7CrjB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,kBAAkB/iB,EAAA,MAAK4hB,GAAA0B,MACjDtjB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,WAAW/iB,EAAA,MAAK4hB,GAAA2B,MAC1CvjB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,kBAAkB/iB,EAAA,MAAK4hB,GAAA4B,MACjDxjB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,kBAAkB/iB,EAAA,MAAK4hB,GAAA6B,MACjDzjB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,QAAQ/iB,EAAA,MAAK4hB,GAAA5E,MACvChd,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,YAAY/iB,EAAA,MAAK4hB,GAAA8B,MAC3C1jB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,WAAW/iB,EAAA,MAAK4hB,GAAA+B,MAC1C3jB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,WAAW/iB,EAAA,MAAK4hB,GAAAgC,MAC1C5jB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,cAAc/iB,EAAA,MAAK4hB,GAAAiC,MAC7CjmB,EAAA,MAAKmkB,IAAqB;AAC5B,GACA+B,KAAuB,WAAG;AACxB,EAAIjmB,EAAA,MAAKmkB,QACThiB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,SAAS/iB,EAAA,MAAK4hB,GAAA1E,MACxCld,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,WAAW/iB,EAAA,MAAK4hB,GAAAmC,MAC1C/jB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,UAAU/iB,EAAA,MAAK4hB,GAAAoC,MACzChkB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,WAAW/iB,EAAA,MAAK4hB,GAAAqC,MAC1CjkB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,SAAS/iB,EAAA,MAAK4hB,GAAAsC,MACxClkB,EAAA,MAAK4hB,GAAAmB,IAAL,WAA0B,WAAW/iB,EAAA,MAAK4hB,GAAAuC,MAC1CvmB,EAAA,MAAKokB,IAAmB;AAC1B,GACAO,KAAA,eACAC,KAAA,eACAO,KAAoB,SAAC9E,GAAWxwH,GAAS;AACvC,EAAAowG,EAAA,MAAKukB,IAAQ,IAAInE,GAAWxwH,EAAQ,KAAK,IAAI,CAAC;AAChD,GACA22H,KAAW,SAACC,GAAQ;AAEpB,GACAvB,KAAkB,SAAC/xG,GAAMnH,GAAS;AAChC,QAAMi5G,IAAU,KAAK,IAAI9xG,GAAM8sF,EAAA,MAAKjtH,IAAK,OAAO,aAAa;AAC7D,EAAAitH,EAAA,MAAKjtH,IAAK,OAAO,eAAeiyI,GAASj5G,CAAO;AAClD,GACAo5G,KAAY,SAACqB,GAAQ;AACnB,MAAIxmB,EAAA,MAAK+jB,GAAAgB,IAAO,iBAAiB,GAAG;AAClC,IAAA5iB,EAAA,MAAK4hB,GAAAqB,IAAL,WAAcoB;AACd;AAAA,EACF;AACA,EAAArkB,EAAA,MAAK4hB,GAAAwB,IAAL,YACAvlB,EAAA,MAAKjtH,IAAK,OAAO,cAAc,QAAQyzI,CAAM;AAC/C,GACApB,KAAQ,SAACoB,GAAQ;AACf,EAAAxmB,EAAA,MAAKjtH,IAAK,OAAO,SAAS,QAAQyzI,CAAM;AAC1C,GACAnB,KAAU,WAAG;AACX,EAAArlB,EAAA,MAAKjtH,IAAK,OAAO,WAAW,QAAQ,KAAK;AAC3C,GACAyyI,KAAa,SAACgB,GAAQ;AACpB,EAAAxmB,EAAA,MAAKjtH,IAAK,OAAO,eAAe,QAAQyzI,CAAM;AAChD,GACAf,KAAiB,SAACe,GAAQ;AACxB,EAAAzmB,EAAA,MAAKykB,IAAgB,IACrBzkB,EAAA,MAAK0kB,IAAY,KACjBtiB,EAAA,MAAK4hB,GAAAkC,IAAL,YACAjmB,EAAA,MAAKjtH,IAAK,OAAO,mBAAmB,QAAQyzI,CAAM,IAC9Cta,MAAUG,MAAaqC,GAAS1O,EAAA,MAAKjtH,IAAK,OAAO,OAAM,CAAE,MAC3DitH,EAAA,MAAKjtH,IAAK,SAAS,MAAMovH,EAAA,MAAK4hB,GAAA0C,IAAL,YAA0BD,CAAM;AAE7D,GACAC,KAAiB,WAAG;AAClB,SAAO;AAAA,IACL,UAAU9pB,GAAKqD,EAAA,MAAKjtH,IAAK,SAAS;AAAA,IAClC,UAAUitH,EAAA,MAAK+jB,GAAAgB,IAAO;AAAA,IACtB,UAAU/kB,EAAA,MAAK+jB,GAAAgB,IAAO;AAAA,IACtB,UAAU/kB,EAAA,MAAK+jB,GAAAgB,IAAO;AAAA,EAC5B;AACE,GACA5F,KAAO,SAACqH,GAAQ;AACd,EAAKxmB,EAAA,MAAKjtH,IAAK,OAAO,WACtBitH,EAAA,MAAKjtH,IAAK,OAAO,QAAQ,QAAQyzI,CAAM;AACzC,GACAnH,KAAQ,SAACmH,GAAQ;AACf,EAAIxmB,EAAA,MAAK+jB,GAAAgB,IAAO,eAAe,KAAK,CAAC/kB,EAAA,MAAKikB,QAC1ClkB,EAAA,MAAKkkB,IAAW,KAChBjkB,EAAA,MAAKokB,IAAS,KAAI,GAClBpkB,EAAA,MAAKjtH,IAAK,OAAO,SAAS,QAAQyzI,CAAM;AAC1C,GACAd,KAAU,SAACc,GAAQ;AACjB,EAAAxmB,EAAA,MAAKjtH,IAAK,SAAS,MAAMovH,EAAA,MAAK4hB,GAAA0C,IAAL,YAA0BD,CAAM;AAC3D,GACAb,KAAiB,SAACa,GAAQ;AACxB,EAAIxmB,EAAA,MAAKjtH,IAAK,OAAO,QAAO,KAC5BitH,EAAA,MAAKjtH,IAAK,OAAO,oBAAoBovH,EAAA,MAAK4hB,GAAA0C,IAAL,YAA0BD,CAAM;AACvE,GACAN,KAAU,SAACM,GAAQ;AACjB,EAAIxmB,EAAA,MAAK+jB,GAAAgB,IAAO,WAChBhlB,EAAA,MAAKkkB,IAAW,KAChBjkB,EAAA,MAAKjtH,IAAK,OAAO,WAAW,QAAQyzI,CAAM,GAC1CxmB,EAAA,MAAKokB,IAAS,MAAK;AACrB,GACA0B,KAAU,SAACU,GAAQ;AACjB,EAAAxmB,EAAA,MAAKjtH,IAAK,OAAO,WAAW,QAAQyzI,CAAM,GACtCxmB,EAAA,MAAK+jB,GAAAgB,IAAO,aAAa,MAC3BhlB,EAAA,MAAKkkB,IAAW,KAChBjkB,EAAA,MAAKjtH,IAAK,OAAO,WAAW,QAAQyzI,CAAM;AAE9C,GACAF,KAAU,SAACE,GAAQ;AACjB,EAAIxmB,EAAA,MAAK+jB,GAAAgB,IAAO,aAAa,MAC3BhlB,EAAA,MAAKkkB,IAAW,KAChBjkB,EAAA,MAAKjtH,IAAK,OAAO,WAAW,QAAQyzI,CAAM;AAE9C,GACAH,KAAQ,SAACG,GAAQ;AACf,EAAAxmB,EAAA,MAAKokB,IAAS,KAAI,GAClBjiB,EAAA,MAAK4hB,GAAAkB,IAAL,WAAwBjlB,EAAA,MAAK+jB,GAAAgB,IAAO,UAAUyB,IAC9CxmB,EAAA,MAAKjtH,IAAK,OAAO,OAAO,QAAQyzI,CAAM,GAClCxmB,EAAA,MAAKjtH,IAAK,OAAO,KAAI,KACGksH,GAAMe,EAAA,MAAK+jB,GAAAgB,IAAO,QAAQ,MAC7B/kB,EAAA,MAAK+jB,GAAAgB,IAAO,WAAW;AAElD,GACAF,KAAiB,WAAG;AAClB,QAAM6B,IAAW1mB,EAAA,MAAKjtH,IAAK,OAAO,OAAM,GAAI4zI,IAAe3mB,EAAA,MAAKskB,IAAgB,eAAe;AAC/F,GADqIoC,KAAYC,MAE/IjnB,GAAYM,EAAA,MAAK+jB,GAAAgB,KAAQ,cAAc5iB,EAAA,MAAK4hB,GAAA6C,IAAc,KAAK,IAAI,CAAC;AAExE,GACAA,KAAa,SAACJ,GAAQ;AACpB,EAAArkB,EAAA,MAAK4hB,GAAAkB,IAAL,WAAwBjlB,EAAA,MAAK+jB,GAAAgB,IAAO,aAAayB;AACnD,GACAZ,KAAiB,SAACY,GAAQ;AACxB,EAAIxmB,EAAA,MAAKjtH,IAAK,OAAO,MAAK,KACxBovH,EAAA,MAAK4hB,GAAAkB,IAAL,WAAwBjlB,EAAA,MAAK+jB,GAAAgB,IAAO,UAAUyB,IAEhDxmB,EAAA,MAAKjtH,IAAK,OAAO,mBAAmBitH,EAAA,MAAK+jB,GAAAgB,IAAO,UAAUyB,CAAM;AAClE,GACAlB,KAAe,SAACkB,GAAQ;AACtB,QAAM32H,IAAS;AAAA,IACb,QAAQmwG,EAAA,MAAK+jB,GAAAgB,IAAO;AAAA,IACpB,OAAO/kB,EAAA,MAAK+jB,GAAAgB,IAAO;AAAA,EACzB;AACI,EAAA/kB,EAAA,MAAKjtH,IAAK,OAAO,iBAAiB8c,GAAQ22H,CAAM;AAClD,GACAL,KAAS,SAACK,GAAQ;AAChB,EAAAzmB,EAAA,MAAK0kB,IAAYzkB,EAAA,MAAK+jB,GAAAgB,IAAO,cAC7B5iB,EAAA,MAAK4hB,GAAAkB,IAAL,WAAwBjlB,EAAA,MAAK+jB,GAAAgB,IAAO,aAAayB,IACjDxmB,EAAA,MAAKjtH,IAAK,OAAO,UAAUitH,EAAA,MAAK+jB,GAAAgB,IAAO,aAAayB,CAAM,GACtD,KAAK,MAAMxmB,EAAA,MAAK+jB,GAAAgB,IAAO,WAAW,MAAM,KAAK,MAAM/kB,EAAA,MAAK+jB,GAAAgB,IAAO,QAAQ,KAAKlP,GAAyB7V,EAAA,MAAK+jB,GAAAgB,IAAO,QAAQ,IAAIlP,GAAyB7V,EAAA,MAAK+jB,GAAAgB,IAAO,WAAW,MAC/K5iB,EAAA,MAAK4hB,GAAAkB,IAAL,WAAwBjlB,EAAA,MAAK+jB,GAAAgB,IAAO,UAAUyB,IACzCxmB,EAAA,MAAK+jB,GAAAgB,IAAO,SACf/kB,EAAA,MAAKjtH,IAAK,OAAO;AAAA,IACf,IAAIssH,GAAS,sBAAsB;AAAA,MACjC,SAASmnB;AAAA,IACrB,CAAW;AAAA,EACX;AAGE,GACAJ,KAAU,SAACI,GAAQ;AACjB,EAAAxmB,EAAA,MAAKjtH,IAAK,OAAO,WAAWitH,EAAA,MAAK+jB,GAAAgB,IAAO,aAAayB,CAAM;AAC7D,GACAX,KAAW,SAACW,GAAQ;AAClB,QAAM32H,IAAS;AAAA,IACb,UAAUmwG,EAAA,MAAK+jB,GAAAgB,IAAO;AAAA,IACtB,UAAU/kB,EAAA,MAAK+jB,GAAAgB,IAAO;AAAA,EAC5B;AACI,EAAA/kB,EAAA,MAAKjtH,IAAK,OAAO,YAAY8c,GAAQ22H,CAAM;AAC7C,GACAT,KAAU,SAACS,GAAQ;AACjB,EAAAxmB,EAAA,MAAKjtH,IAAK,OAAO,WAAW,QAAQyzI,CAAM;AAC5C,GACAR,KAAa,SAACQ,GAAQ;AACpB,EAAAxmB,EAAA,MAAKjtH,IAAK,OAAO,eAAeitH,EAAA,MAAK+jB,GAAAgB,IAAO,cAAcyB,CAAM;AAClE,GACA7F,KAAQ,SAAC6F,GAAQ;AACf,QAAM3nK,IAAQmhJ,EAAA,MAAK+jB,GAAAgB,IAAO;AAC1B,MAAI,CAAClmK,EAAO;AACZ,QAAMgxC,IAAS;AAAA,IACb,SAAShxC,EAAM;AAAA,IACf,MAAMA,EAAM;AAAA,IACZ,YAAYA;AAAA,EAClB;AACI,EAAAmhJ,EAAA,MAAKjtH,IAAK,OAAO,SAAS8c,GAAQ22H,CAAM;AAC1C;;AAGF,MAAMK,GAAkB;AAAA,EAMtB,YAAYpmK,GAAUqzB,GAAK;AAN7B,IAAA8rH,EAAA,MAAAknB;AACE,IAAAlnB,EAAA,MAAAokB;AACA,IAAApkB,EAAA,MAAA7sH;AAKE,IAAAgtH,EAAA,MAAKikB,IAAYvjK,IACjBs/I,EAAA,MAAKhtH,IAAOe,IACZksH,EAAA,MAAK8mB,IAAAC,IAAc,aAAa5kB,EAAA,MAAK2kB,IAAAE,IAAkB,KAAK,IAAI,GAChEhnB,EAAA,MAAK8mB,IAAAC,IAAc,gBAAgB5kB,EAAA,MAAK2kB,IAAAG,IAAqB,KAAK,IAAI,GACtEjnB,EAAA,MAAK8mB,IAAAC,IAAc,WAAW5kB,EAAA,MAAK2kB,IAAAI,IAAqB,KAAK,IAAI,GACjExnB,GAAYM,EAAA,MAAKjtH,IAAK,aAAa,UAAUovH,EAAA,MAAK2kB,IAAAK,IAAe,KAAK,IAAI,CAAC;AAAA,EAC7E;AAqCF;AAjDEnD,KAAA,eACAjxI,KAAA,eAFF+zI,KAAA,eAGMC,KAAa,WAAG;AAClB,SAAO/mB,EAAA,MAAKgkB,IAAU,MAAM;AAC9B,GASAgD,KAAiB,SAACh+H,GAAO;AACvB,QAAMo+H,IAAcp+H,EAAM;AAC1B,MAAIo+H,EAAY,UAAU,GAAI;AAC9B,QAAM9lI,IAAK8lI,EAAY,GAAG,SAAQ,KAAM,gBAAgBpnB,EAAA,MAAKjtH,IAAK,YAAY,MAAM,IAAIs0I,IAAa;AAAA,IACnG,IAAA/lI;AAAA,IACA,OAAO8lI,EAAY;AAAA,IACnB,UAAUA,EAAY;AAAA,IACtB,MAAMA,EAAY;AAAA,IAClB,UAAU;AAAA,EAChB;AACI,EAAApnB,EAAA,MAAKjtH,IAAK,YAAYwiI,GAAW,GAAG,EAAE8R,GAAYr+H,CAAK,GACnDo+H,EAAY,YAASC,EAAW,WAAW;AACjD,GACAJ,KAAoB,SAACj+H,GAAO;AAC1B,QAAM6hE,IAAQm1C,EAAA,MAAKjtH,IAAK,YAAY,QAAQiW,EAAM,MAAM,EAAE;AAC1D,EAAI6hE,KAAOm1C,EAAA,MAAKjtH,IAAK,YAAYwiI,GAAW,MAAM,EAAE1qD,GAAO7hE,CAAK;AAClE,GACAk+H,KAAoB,SAACl+H,GAAO;AAC1B,MAAIs+H,IAAenlB,EAAA,MAAK2kB,IAAAS,IAAL;AACnB,MAAI,CAACD,EAAc;AACnB,QAAMz8D,IAAQm1C,EAAA,MAAKjtH,IAAK,YAAY,QAAQu0I,EAAa,EAAE;AAC3D,EAAIz8D,KAAOm1C,EAAA,MAAKjtH,IAAK,YAAYwiI,GAAW,MAAM,EAAE1qD,GAAO,IAAM7hE,CAAK;AACxE,GACAu+H,KAAsB,WAAG;AACvB,SAAO,MAAM,KAAKvnB,EAAA,MAAK8mB,IAAAC,GAAa,EAAE,KAAK,CAACl8D,MAAUA,EAAM,OAAO;AACrE,GACAs8D,KAAc,SAACn+H,GAAO;AACpB,QAAM,EAAE,SAAAz5B,MAAYy5B,EAAM;AAC1B,MAAI,CAACz5B,EAAS;AACd,QAAMs7F,IAAQm1C,EAAA,MAAK8mB,IAAAC,IAAc,aAAax3J,EAAQ,EAAE;AACxD,MAAIs7F,GAAO;AACT,UAAMpgC,IAAO03E,EAAA,MAAK2kB,IAAAS,IAAL;AACb,IAAI98F,MAAMA,EAAK,UAAU,KACzBogC,EAAM,UAAU;AAAA,EAClB;AACF;;AAGF,MAAM28D,GAAkB;AAAA,EACtB,YAAYhP,GAAO1kI,GAAK;AAD1B,IAAA8rH,EAAA,MAAA6nB;AAQE,IAAA9kJ,EAAA,eAAQonB,GAAW;AACnB,IAAApnB,EAAA,oBAAa;AACb,IAAAA,EAAA;AARE,SAAK,QAAQ61I,GACb,KAAK,MAAM1kI,GACX,KAAK,YAAY,IAAI2uI,GAAUjK,GAAO,CAACtE,MAAS;AAC9C,WAAK,IAAI,OAAO,qBAAqBA,CAAI;AAAA,IAC3C,CAAC;AAAA,EACH;AAAA,EAIA,QAAQ;AACN,QAAI4P,GAAgB,MAAM,KAAK,GAAG,GAC9B,iBAAiB,KAAK,SAAO,IAAI+C,GAAkB,MAAM,KAAK,GAAG,GACrE3pB,GAAU,MAAM;AACd,WAAK,UAAU,QAAO,GACtB,KAAK,MAAM,YAAY,MACvB,KAAK,MAAM,gBAAgB,KAAK;AAChC,iBAAWn7I,KAAU,KAAK,MAAM,iBAAiB,QAAQ,EAAG,CAAAA,EAAO,OAAM;AACzE,WAAK,MAAM,KAAI;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EACA,IAAI,OAAO;AACT,WAAO;AAAA,EACT;AAAA,EACA,gBAAgBkyJ,GAAM;AACpB,SAAK,MAAM,eAAeA;AAAA,EAC5B;AAAA,EACA,MAAM,OAAO;AACX,WAAO,KAAK,MAAM,KAAI;AAAA,EACxB;AAAA,EACA,MAAM,QAAQ;AACZ,WAAO,KAAK,MAAM,MAAK;AAAA,EACzB;AAAA,EACA,SAASM,GAAO;AACd,SAAK,MAAM,QAAQA;AAAA,EACrB;AAAA,EACA,UAAUP,GAAQ;AAChB,SAAK,MAAM,SAASA;AAAA,EACtB;AAAA,EACA,eAAe9gG,GAAM;AACnB,SAAK,MAAM,cAAcA;AAAA,EAC3B;AAAA,EACA,eAAew0G,GAAQ;AACrB,IAAA9mB,GAAa,KAAK,OAAO,eAAe8mB,CAAM;AAAA,EAChD;AAAA,EACA,MAAM,WAAW,EAAE,KAAAt+J,GAAK,MAAArJ,EAAI,GAAI4nK,GAAS;AACvC,SAAK,MAAM,UAAUA,KAAW,IAC5B9Y,GAAczlJ,CAAG,KACnB,KAAK,aAAY,GACjB,KAAK,MAAM,YAAYA,MAEvB,KAAK,MAAM,YAAY,MACnBu/C,GAASv/C,CAAG,IACVrJ,MAAS,MACX,KAAK,aAAa,EAAE,KAAAqJ,GAAK,MAAArJ,EAAI,CAAE,KAE/B,KAAK,aAAY,GACjB,KAAK,MAAM,MAAMoiJ,EAAA,MAAKslB,IAAAG,IAAL,WAA0Bx+J,OAG7C,KAAK,aAAY,GACjB,KAAK,MAAM,MAAM,OAAO,IAAI,gBAAgBA,CAAG,KAGnD,KAAK,MAAM,KAAI,GACf,KAAK,aAAa,EAAE,KAAAA,GAAK,MAAArJ,EAAI;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAIA,aAAaqJ,GAAKy+J,GAAa;AAC7B,UAAMC,IAAa,KAAK,MAAM,cAAc,kBAAkB,GAAG/lK,IAAS+lK,KAAc,SAAS,cAAc,QAAQ;AACvH,IAAAlnB,GAAa7+I,GAAQ,OAAOogJ,EAAA,MAAKslB,IAAAG,IAAL,WAA0Bx+J,EAAI,IAAI,GAC9Dw3I,GAAa7+I,GAAQ,QAAQqH,EAAI,SAAS,MAAMA,EAAI,OAAOy+J,CAAW,GACtEjnB,GAAa7+I,GAAQ,YAAY,EAAE,GAC9B+lK,KAAY,KAAK,MAAM,OAAO/lK,CAAM;AAAA,EAC3C;AAAA,EACA,eAAe;;AACb,KAAA0J,IAAA,KAAK,MAAM,cAAc,kBAAkB,MAA3C,QAAAA,EAA8C;AAAA,EAChD;AAYF;AA5FAg8J,KAAA,eAiFEG,KAAoB,SAACx+J,GAAK;AACxB,QAAM,EAAE,eAAA2+J,GAAe,aAAAC,EAAW,IAAK,KAAK,IAAI,QAAQjrF,IAAYgrF,KAAiBhU,IAAUiU,EAAW;AAC1G,SAAIjrF,IAAY,KAAKg3E,IAAU,IACtB,GAAG3qJ,CAAG,MAAM2zE,CAAS,IAAIg3E,CAAO,KAC9Bh3E,IAAY,IACd,GAAG3zE,CAAG,MAAM2zE,CAAS,KACnBg3E,IAAU,IACZ,GAAG3qJ,CAAG,QAAQ2qJ,CAAO,KAEvB3qJ;AACT;;AAGF,MAAM6+J,GAA0B;AAAA,EAQ9B,YAAYzP,GAAO1kI,GAAK;AAR1B,IAAA8rH,EAAA,MAAAsoB;AACE,IAAAtoB,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAA7sH;AACA,IAAA6sH,EAAA,MAAA5rF;AACA,IAAA4rF,EAAA,MAAAuoB,IAAazjF,GAAO,EAAK;AAKvB,IAAAq7D,EAAA,MAAK6Y,IAASJ,IACdzY,EAAA,MAAKhtH,IAAOe,IACZquH,EAAA,MAAK+lB,IAAAE,IAAL;AAAA,EACF;AAAA,EAPA,IAAI,YAAY;AACd,WAAOpoB,EAAA,MAAKmoB,IAAL;AAAA,EACT;AAAA,EAyBA,MAAM,SAAS;AACb,QAAI,CAAC,KAAK,UAAW,OAAM,MAAM,iCAAiC;AAClE,WAAI,KAAK,SAAS,aAAanoB,EAAA,MAAK4Y,IAAO,iCAClC5Y,EAAA,MAAK4Y,IAAO,+BAA8B,IAE5C5Y,EAAA,MAAK4Y,IAAO,OAAO,OAAM;AAAA,EAClC;AAQF;AA7CEA,KAAA,eACA7lI,KAAA,eACAihC,KAAA,eACAm0G,KAAA,eAJFD,KAAA,eAaEE,KAAM,WAAG;;AACP,EAAI3sB,MAAa,GAAChwI,IAAAu0I,EAAA,MAAK4Y,QAAL,QAAAntJ,EAAa,WAAU,CAAC,KAAK,cAC/Cu0I,EAAA,MAAK4Y,IAAO,OAAO,kBAAkB,CAACyP,MAAc;AAClD,IAAAroB,EAAA,MAAKmoB,IAAW,IAAIE,CAAS;AAAA,EAC/B,CAAC,EAAE,MAAM,MAAM;AACb,IAAAroB,EAAA,MAAKmoB,IAAW,IAAI,EAAK;AAAA,EAC3B,CAAC,GACDhpI,EAAOgjH,EAAA,MAAK+lB,IAAAI,IAAgB,KAAK,IAAI,CAAC;AACxC,GACAA,KAAe,WAAG;AAChB,MAAI,CAACtoB,EAAA,MAAKmoB,IAAL,WAAmB;AACxB,QAAMxI,IAAS,CAAC,cAAc,WAAW,YAAY,GAAG4I,IAAgBpmB,EAAA,MAAK+lB,IAAAM,IAAe,KAAK,IAAI;AACrG,EAAAD,EAAa,GACb7oB,GAAYM,EAAA,MAAK4Y,KAAQ,WAAW2P,CAAa;AACjD,QAAME,IAAe,IAAI9oB,GAAiBK,EAAA,MAAK4Y,IAAO,MAAM;AAC5D,aAAW74J,KAAQ4/J;AACjB,IAAA8I,EAAa,IAAI1oK,GAAMwoK,CAAa;AAExC,GAQAC,KAAc,SAACx/H,GAAO;AACpB,QAAMyK,IAAQusG,EAAA,MAAK4Y,IAAO,OAAO;AACjC,MAAInlH,MAAUusG,EAAA,MAAKhsF,IAAQ;AAC3B,QAAMnkB,IAAS,EAAE,MAAM,KAAK,MAAM,OAAA4D,EAAK;AACvC,EAAAusG,EAAA,MAAKjtH,IAAK,OAAO,0BAA0B8c,GAAQ7G,CAAK,GACxD+2G,EAAA,MAAK/rF,IAASvgB;AAChB;AAEF,MAAMi1H,WAA2BT,GAA0B;AAAA,EAA3D;AAAA;AACE,IAAAtlJ,EAAA,cAAO;AAAA;AAAA,EACP,IAAI,YAAY;AACd,WAAO,2CAA2C;AAAA,EACpD;AACF;;AAEA,MAAMgmJ,GAAoB;AAAA,EAGxB,YAAYhc,GAAO74H,GAAK;AAH1B,IAAA8rH,EAAA,MAAAgpB;AACE,IAAAhpB,EAAA,MAAAiY;AACA,IAAAjY,EAAA,MAAA7sH;AAEE,IAAAgtH,EAAA,MAAK8X,IAASlL,IACd5M,EAAA,MAAKhtH,IAAOe,IACZ64H,EAAM,WAAW,aAAaxK,EAAA,MAAKymB,IAAAzP,IAAY,KAAK,IAAI,GACxDjc,GAAUiF,EAAA,MAAKymB,IAAA9D,IAAW,KAAK,IAAI,CAAC;AAAA,EACtC;AAkCF;AAzCEjN,KAAA,eACA9kI,KAAA,eAFF61I,KAAA,eASEzP,KAAW,SAACnwH,GAAO;AACjB,QAAMo+H,IAAcp+H,EAAM;AAC1B,MAAI,CAACo+H,KAAeyB,GAAqB7oB,EAAA,MAAK6X,KAAQuP,CAAW,EAAG;AACpE,QAAMv8D,IAAQ,IAAI6lD,GAAU;AAAA,IAC1B,IAAI0W,EAAY;AAAA,IAChB,MAAMA,EAAY;AAAA,IAClB,OAAOA,EAAY,SAAS;AAAA,IAC5B,UAAUA,EAAY;AAAA,IACtB,MAAM;AAAA,EACZ,CAAK;AACD,EAAAv8D,EAAMmlD,GAAgB,MAAM,IAAI,EAAE,OAAOoX,EAAW,GACpDv8D,EAAMmlD,GAAgB,UAAU,IAAI,GACpCnlD,EAAMmlD,GAAgB,SAAS,IAAI;AACnC,MAAItoG,IAAY;AAChB,QAAMohH,IAAc,CAACtC,MAAW;AAC9B,QAAKY,EAAY;AACjB,eAAS7/J,IAAImgD,GAAWngD,IAAI6/J,EAAY,KAAK,QAAQ7/J;AACnD,QAAAsjG,EAAM,OAAOu8D,EAAY,KAAK7/J,CAAC,GAAGi/J,CAAM,GACxC9+G;AAAA,EAEJ;AACA,EAAAohH,EAAY9/H,CAAK,GACjBo+H,EAAY,cAAc0B,GAC1B9oB,EAAA,MAAKjtH,IAAK,WAAW,IAAI83E,GAAO7hE,CAAK,GACrC6hE,EAAM,QAAQu8D,EAAY,MAAMp+H,CAAK;AACvC,GACA87H,KAAU,WAAG;;AACX,EAAA9kB,EAAA,MAAK6X,IAAO,WAAW,aAAa;AACpC,aAAWhtD,KAASm1C,EAAA,MAAKjtH,IAAK,YAAY;AACxC,UAAMq0I,KAAc37J,IAAAo/F,EAAMmlD,GAAgB,MAAM,MAA5B,gBAAAvkJ,EAA+B;AACnD,IAAI27J,KAAA,QAAAA,EAAa,gBAAaA,EAAY,cAAc;AAAA,EAC1D;AACF;AAEF,SAASyB,GAAqBlc,GAAO9hD,GAAO;AAC1C,SAAO,MAAM,KAAK8hD,EAAM,QAAQ,EAAE,KAAK,CAACh6H,MAAOA,EAAG,UAAUk4E,CAAK;AACnE;;AAEA,MAAMk+D,GAAsB;AAAA,EAG1B,YAAYpc,GAAO6L,GAAO;AAH5B,IAAA5Y,EAAA,MAAAopB;AACE,IAAAppB,EAAA,MAAAiY;AACA,IAAAjY,EAAA,MAAAgZ;AAwBA,IAAAhZ,EAAA,MAAA+iB,IAAY,CAAClkG,GAAQz1B,MAAU;AAC7B,MAAAg3G,EAAA,MAAK4Y,IAAO,OAAO,6BAA6Bn6F,GAAQz1B,CAAK;AAAA,IAC/D;AAxBE,IAAA+2G,EAAA,MAAK8X,IAASlL,IACd5M,EAAA,MAAK6Y,IAASJ,IACd,IAAI7Y,GAAiBgN,CAAK,EAAE,IAAI,yBAAyBxK,EAAA,MAAK6mB,IAAAC,IAAS,KAAK,IAAI,CAAC,EAAE,IAAI,yBAAyB9mB,EAAA,MAAK6mB,IAAAE,IAAQ,KAAK,IAAI,CAAC;AAAA,EACzI;AAAA,EACA,IAAI,SAAS;AACX,WAAO,SAAS,4BAA4BlpB,EAAA,MAAK6X;AAAA,EACnD;AAAA,EACA,IAAI,YAAY;AACd,WAAOhL,GAAuB7M,EAAA,MAAK6X,GAAM;AAAA,EAC3C;AAAA,EACA,MAAM,QAAQ;AACZ,WAAO7X,EAAA,MAAK6X,IAAO,wBAAuB;AAAA,EAC5C;AAAA,EACA,OAAO;AACL,WAAO,SAAS,qBAAoB;AAAA,EACtC;AAUF;AA5BEA,KAAA,eACAe,KAAA,eAFFoQ,KAAA,eAoBEC,KAAQ,SAACjgI,GAAO;AACd,EAAAg3G,EAAA,MAAK2iB,IAAL,WAAe,IAAM35H;AACvB,GACAkgI,KAAO,SAAClgI,GAAO;AACb,EAAAg3G,EAAA,MAAK2iB,IAAL,WAAe,IAAO35H;AACxB,GACA25H,KAAA;;AAKF,MAAMwG,GAAkB;AAAA,EAOtB,YAAYxc,GAAO6L,GAAO;AAP5B,IAAA5Y,EAAA,MAAAwpB;AACE,IAAAxpB,EAAA,MAAAiY;AACA,IAAAjY,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAAkR,IAAQ;AAKN,IAAA/Q,EAAA,MAAK8X,IAASlL,IACd5M,EAAA,MAAK6Y,IAASJ,IACd9Y,GAAYiN,GAAO,iCAAiCxK,EAAA,MAAKinB,IAAAC,IAAc,KAAK,IAAI,CAAC;AAAA,EACnF;AAAA,EAPA,IAAI,OAAO;AACT,WAAOrpB,EAAA,MAAK8Q;AAAA,EACd;AAAA,EAMA,IAAI,YAAY;AACd,WAAOhE,GAAwB9M,EAAA,MAAK6X,GAAM;AAAA,EAC5C;AAAA,EACA,MAAM,oBAAoBnoG,GAAM;AAC9B,IAAIswF,EAAA,MAAK8Q,QAAUphG,KACnBswF,EAAA,MAAK6X,IAAO,0BAA0BnoG,CAAI;AAAA,EAC5C;AAgBF;AAjCEmoG,KAAA,eACAe,KAAA,eACA9H,KAAA,eAHFsY,KAAA,eAmBEC,KAAa,SAACrgI,GAAO;;AACnB,QAAMsgI,IAAWtpB,EAAA,MAAK8Q;AACtB,EAAA/Q,EAAA,MAAK+Q,IAAQ9Q,EAAA,MAAK6X,IAAO,0BACzBpsJ,IAAAu0I,EAAA,MAAK4Y,IAAO,WAAZ,QAAAntJ,EAAoB;AAAA,IAClB,IAAI4zI,GAAS,6BAA6B;AAAA,MACxC,QAAQW,EAAA,MAAK8Q;AAAA,MACb,SAAS9nH;AAAA,IACjB,CAAO;AAAA,KAEH,CAAC,cAAc,oBAAoB,EAAE,QAAQ,CAACjpC,MAAS;AACrD,KAAIigJ,EAAA,MAAK8Q,QAAU/wJ,KAAQupK,MAAavpK,MACtCigJ,EAAA,MAAK4Y,IAAO,OAAO,GAAG74J,CAAI,WAAWigJ,EAAA,MAAK8Q,QAAU/wJ,GAAMipC,CAAK;AAAA,EAEnE,CAAC;AACH;;AAEF,MAAMugI,GAA8B;AAAA,EAQlC,YAAYC,GAAc;AAP1B,IAAA5pB,EAAA,MAAA6pB;AAQE,IAAA1pB,EAAA,MAAK0pB,IAAgBD;AAAA,EACvB;AAAA,EARA,IAAI,SAAS;AACX,WAAOxpB,EAAA,MAAKypB,IAAc,SAAS;AAAA,EACrC;AAAA,EACA,IAAI,YAAY;AACd,WAAOzpB,EAAA,MAAKypB,IAAc;AAAA,EAC5B;AAAA,EAIA,MAAM,QAAQ;AACZ,IAAAzpB,EAAA,MAAKypB,IAAc,oBAAoB,YAAY;AAAA,EACrD;AAAA,EACA,MAAM,OAAO;AACX,IAAAzpB,EAAA,MAAKypB,IAAc,oBAAoB,QAAQ;AAAA,EACjD;AACF;AAhBEA,KAAA;;AAiBF,MAAMC,GAAuB;AAAA,EAQ3B,YAAYF,GAAc;AAP1B,IAAA5pB,EAAA,MAAA6pB;AAQE,IAAA1pB,EAAA,MAAK0pB,IAAgBD;AAAA,EACvB;AAAA,EARA,IAAI,SAAS;AACX,WAAOxpB,EAAA,MAAKypB,IAAc,SAAS;AAAA,EACrC;AAAA,EACA,IAAI,YAAY;AACd,WAAOzpB,EAAA,MAAKypB,IAAc;AAAA,EAC5B;AAAA,EAIA,MAAM,QAAQ;AACZ,IAAAzpB,EAAA,MAAKypB,IAAc,oBAAoB,oBAAoB;AAAA,EAC7D;AAAA,EACA,MAAM,OAAO;AACX,IAAAzpB,EAAA,MAAKypB,IAAc,oBAAoB,QAAQ;AAAA,EACjD;AACF;AAhBEA,KAAA;SAkBF,cAA4BjC,GAAkB;AAAA,EAQ5C,YAAY7a,GAAO74H,GAAK;AACtB,UAAM64H,GAAO74H,CAAG;AARlB,IAAAnR,EAAA,yBAAkB;AAIlB,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAGE,IAAAo6H,GAAO,MAAM;AAEX,UADA,KAAK,UAAU,IAAI2rB,GAAmB/b,GAAO74H,CAAG,GAC5Cg5H,GAAwBH,CAAK,GAAG;AAClC,cAAM6c,IAAe,IAAIL,GAAkBxc,GAAO74H,CAAG;AACrD,aAAK,aAAa,IAAIy1I,GAA8BC,CAAY,GAChE,KAAK,mBAAmB,IAAIE,GAAuBF,CAAY;AAAA,MACjE,MAAO,CAAI3c,GAAuBF,CAAK,MACrC,KAAK,mBAAmB,IAAIoc,GAAsBpc,GAAO74H,CAAG;AAAA,IAEhE,GAAG,KAAK,KAAK;AAAA,EACf;AAAA,EAlBA,IAAI,OAAO;AACT,WAAO;AAAA,EACT;AAAA,EAiBA,QAAQ;AACN,UAAM,MAAK,GACP84H,GAAmB,KAAK,KAAK,KAC/B,IAAI+b,GAAoB,KAAK,OAAO,KAAK,GAAG,GAE9C,KAAK,IAAI,cAAc,YAAY,KAAK,KAAK,GAC7CzrB,GAAU,MAAM;AACd,WAAK,IAAI,cAAc,YAAY,IAAI;AAAA,IACzC,CAAC,GACG,KAAK,SAAS,WAAS,KAAK,IAAI,OAAO,kBAAkB,IAAI;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AACF;AAEA,IAAIwkB,KAA0B,uBAAO,OAAO;AAAA,EAC1C,WAAW;AAAA,EACX,eAAeiI;AACjB,CAAC;AAED,SAASC,GAAY3hG,GAAU;AAC7B,MAAI;AAGF,WAFqB,IAAI,KAAK,aAAa,UAAU,WAAW,EAAE,MAAM,YAAY,EAClD,GAAGA,CAAQ,KACtB;AAAA,EACzB,QAAc;AACZ,WAAO;AAAA,EACT;AACF;AAEA,MAAM4hG,KAAiB,CAAC9pK,MAAS,QAAQsjJ,GAAiBtjJ,CAAI,CAAC;;AAC/D,MAAM+pK,GAAe;AAAA,EAUnB,YAAYnd,GAAO74H,GAAK;AAV1B,IAAA8rH,EAAA,MAAAmqB;AACE,IAAAnqB,EAAA,MAAAiY;AACA,IAAAjY,EAAA,MAAA7sH;AACA,IAAA6sH,EAAA,MAAAoqB,IAAY;AACZ,IAAApqB,EAAA,MAAAqqB,IAA6B,oBAAI,IAAG;AACpC,IAAArqB,EAAA,MAAAsqB,IAAgB;AAChB,IAAAvnJ,EAAA,gBAAS,CAAA;AA+DT,IAAAi9H,EAAA,MAAAuqB,IAAgB;AAChB,IAAAvqB,EAAA,MAAAwqB,IAAc,CAAA;AA4Id,IAAAxqB,EAAA,MAAAyqB,IAAqB;AAvMnB,IAAAtqB,EAAA,MAAK8X,IAASlL,IACd5M,EAAA,MAAKhtH,IAAOe;AAAA,EACd;AAAA,EANA,IAAI,WAAW;AACb,WAAOksH,EAAA,MAAKgqB;AAAA,EACd;AAAA,EAKA,MAAMM,GAAM;AACV,IAAAvqB,EAAA,MAAKiqB,IAAYM,EAAI,EAAG,OAAM;AAC9B,UAAMC,IAAapoB,EAAA,MAAK4nB,IAAAS,IAAmB,KAAK,IAAI;AACpD,eAAWxhI,KAAS,OAAO,OAAOshI,EAAK,MAAM,EAAG,CAAAtqB,EAAA,MAAKgqB,IAAU,GAAGhhI,GAAOuhI,CAAU;AACnF,IAAAvqB,EAAA,MAAKgqB,IAAU,GAAGM,EAAK,OAAO,OAAOnoB,EAAA,MAAK4nB,IAAApJ,IAAS,KAAK,IAAI,CAAC;AAC7D,eAAWt+H,KAAY29G,EAAA,MAAKiqB,IAAY,CAAA5nI,EAAS29G,EAAA,MAAKgqB,GAAS;AAC/D,IAAAhqB,EAAA,MAAKjtH,IAAK,OAAO,SAAS,iBAAiB;AAAA,MACzC,QAAQitH,EAAA,MAAKgqB;AAAA,IACnB,CAAK,GACDhqB,EAAA,MAAKgqB,IAAU,WAAWhqB,EAAA,MAAK6X,KAAQ,QAAQ,EAAK,GACpD7X,EAAA,MAAKgqB,IAAU,eAAe;AAAA,MAC5B,WAAW;AAAA,QACT,MAAM;AAAA;AAAA,UAEJ,gBAAgB;AAAA,UAChB,4BAA4B;AAAA,QACtC;AAAA,QACQ,QAAQ;AAAA;AAAA,UAEN,mBAAmB;AAAA,QAC7B;AAAA,MACA;AAAA,MACM,GAAG,KAAK;AAAA,IACd,CAAK,GACDhqB,EAAA,MAAKgqB,IAAU,GAAGM,EAAK,OAAO,0BAA0BnoB,EAAA,MAAK4nB,IAAAU,IAAqB,KAAK,IAAI,CAAC,GAC5FzqB,EAAA,MAAKgqB,IAAU;AAAA,MACbM,EAAK,OAAO;AAAA,MACZnoB,EAAA,MAAK4nB,IAAAW,IAAwB,KAAK,IAAI;AAAA,IAC5C,GACI1qB,EAAA,MAAKgqB,IAAU,GAAGM,EAAK,OAAO,iBAAiBnoB,EAAA,MAAK4nB,IAAAY,IAAkB,KAAK,IAAI,CAAC,GAChF3qB,EAAA,MAAKgqB,IAAU,GAAGM,EAAK,OAAO,yBAAyBnoB,EAAA,MAAK4nB,IAAAa,IAAiB,KAAK,IAAI,CAAC,GACvF5qB,EAAA,MAAKgqB,IAAU,GAAGM,EAAK,OAAO,mBAAmBnoB,EAAA,MAAK4nB,IAAAc,IAAmB,KAAK,IAAI,CAAC,GACnF7qB,EAAA,MAAKgqB,IAAU,GAAGM,EAAK,OAAO,uBAAuBnoB,EAAA,MAAK4nB,IAAAe,IAAe,KAAK,IAAI,CAAC,GACnF9qB,EAAA,MAAKjtH,IAAK,UAAU+nI,GAAc,UAAU,IAAI3Y,EAAA,MAAK4nB,IAAAgB,IAAmB,KAAK,IAAI,GACjFrrB,GAAYM,EAAA,MAAKjtH,IAAK,WAAW,UAAUovH,EAAA,MAAK4nB,IAAAiB,IAAqB,KAAK,IAAI,CAAC,GAC/EtrB,GAAYM,EAAA,MAAKjtH,IAAK,aAAa,UAAUovH,EAAA,MAAK4nB,IAAAkB,IAAmB,KAAK,IAAI,CAAC,GAC/ElrB,EAAA,MAAKmqB,IAAgB/qI,EAAOgjH,EAAA,MAAK4nB,IAAAmB,IAAU,KAAK,IAAI,CAAC;AAAA,EACvD;AAAA,EAkNA,WAAW7oI,GAAU;AACnB,WAAA29G,EAAA,MAAKiqB,IAAW,IAAI5nI,CAAQ,GACrB,MAAM29G,EAAA,MAAKiqB,IAAW,OAAO5nI,CAAQ;AAAA,EAC9C;AAAA,EACA,WAAWj5B,GAAK;;AAEd,IADA+4I,EAAA,MAAK4nB,IAAAoB,IAAL,YACKxiH,GAASv/C,EAAI,GAAG,OACrBqC,IAAAu0I,EAAA,MAAKgqB,QAAL,QAAAv+J,EAAgB,aAAarC,EAAI;AAAA,EACnC;AAAA,EACA,UAAU;;AACR,IAAA+4I,EAAA,MAAK4nB,IAAAoB,IAAL,aACA1/J,IAAAu0I,EAAA,MAAKgqB,QAAL,QAAAv+J,EAAgB,WAChBs0I,EAAA,MAAKiqB,IAAY,QACjBp4J,IAAAouI,EAAA,MAAKkqB,QAAL,QAAAt4J,EAAA,YACAmuI,EAAA,MAAKmqB,IAAgB;AAAA,EACvB;AACF;AApRErS,KAAA,eACA9kI,KAAA,eACAi3I,KAAA,eACAC,KAAA,eACAC,KAAA,eALFH,KAAA,eAoDEqB,KAAe,SAACpiI,GAAO;AACrB,SAAO,IAAIq2G,GAASwqB,GAAe7gI,EAAM,IAAI,GAAG,EAAE,QAAQA,GAAO;AACnE,GACAkiI,KAAS,WAAG;AACV,MAAI,CAAClrB,EAAA,MAAKjtH,IAAK,OAAO,KAAI,EAAI;AAC9B,QAAMs4I,IAAM,IAAI5H,GAAQthB,EAAA,MAAK4nB,IAAAuB,IAAkB,KAAK,IAAI,CAAC;AACzD,SAAAD,EAAI,MAAK,GACFA,EAAI,KAAK,KAAKA,CAAG;AAC1B,GACAC,KAAiB,WAAG;AAClB,MAAI,CAACtrB,EAAA,MAAKgqB,IAAW;AACrB,QAAMptH,IAAWojG,EAAA,MAAKgqB,IAAU,SAAQ,IAAKhqB,EAAA,MAAKgqB,IAAU,KAAI;AAChE,EAAAhqB,EAAA,MAAKjtH,IAAK,OAAO,iBAAiB,IAAK,MAAM6pB,CAAQ,IAAe,QAAXA,CAAmB;AAC9E,GACA4tH,KAAkB,SAACxhI,GAAO;;AACxB,GAAAv9B,IAAAu0I,EAAA,MAAKjtH,IAAK,WAAV,QAAAtnB,EAAkB,SAAS02I,EAAA,MAAK4nB,IAAAqB,IAAL,WAAqBpiI;AAClD,GACAmhI,KAAA,eACAC,KAAA,eACAmB,KAAqB,SAACviI,GAAO;;AAC3B,QAAMkpH,KAASzmJ,IAAAu0I,EAAA,MAAKmqB,QAAL,gBAAA1+J,EAAqBukJ,GAAgB,SAAS8B,KAAQI,KAAA,gBAAAA,EAAQ,OAAO;AACpF,MAAI,CAACA,KAAU,CAACJ,EAAM;AACtB,QAAMxwH,IAAK0+G,EAAA,MAAKmqB,IAAc,IAAI5qG,IAAaygF,EAAA,MAAKoqB,IAAY9oI,CAAE,KAAK,GAAGyqB,IAAUo2F,EAAA,MAAK4nB,IAAAqB,IAAL,WAAqBpiI;AACzG,WAASzhC,IAAIg4D,GAAYh4D,IAAIuqJ,EAAK,QAAQvqJ,KAAK;AAC7C,UAAM2oJ,IAAM4B,EAAKvqJ,CAAC;AAClB,IAAK2oJ,EAAI,kBAAeA,EAAI,gBAAgB,SAC5ClQ,EAAA,MAAKmqB,IAAc,OAAOja,GAAKnkG,CAAO;AAAA,EACxC;AACA,EAAAi0F,EAAA,MAAKoqB,IAAY9oI,CAAE,IAAIwwH,EAAK;AAC9B,GACA+Y,KAAkB,SAAC7hI,GAAO;;AACxB,MAAI,CAACg3G,EAAA,MAAKgqB,IAAW;AACrB,QAAMvgK,IAAOu/B,EAAM,QAAQwiI,IAAmB,CAAC,GAAGxrB,EAAA,MAAK6X,IAAO,UAAU,EAAE,OAAO,CAAChtD,MAAU,gBAAgBA,CAAK,GAAG9+C,IAAUo2F,EAAA,MAAK4nB,IAAAqB,IAAL,WAAqBpiI;AACnJ,WAASzhC,IAAI,GAAGA,IAAIikK,EAAiB,QAAQjkK,KAAK;AAChD,UAAMkkK,IAAgBhiK,EAAKlC,CAAC,GAAGmkK,IAAkBF,EAAiBjkK,CAAC,GAC7D+5B,IAAK,QAAQmqI,EAAc,IAAI,IAAIlkK,CAAC,IAAIsjG,IAAQ,IAAI6lD,GAAU;AAAA,MAClE,IAAApvH;AAAA,MACA,QAAOmqI,KAAA,gBAAAA,EAAe,YAAShgK,IAAAggK,EAAc,OAAO,KAAK,CAACjtJ,MAAMA,EAAE,IAAI,MAAvC,gBAAA/S,EAA0C,WAASggK,KAAA,gBAAAA,EAAe,SAAQ7B,GAAY6B,EAAc,IAAI,OAAMA,KAAA,gBAAAA,EAAe,SAAQ;AAAA,MACpK,UAAUA,EAAc,QAAQ;AAAA,MAChC,MAAMA,EAAc;AAAA,MACpB,SAASA,EAAc;AAAA,IAC/B,CAAO;AACD,IAAA5gE,EAAMmlD,GAAgB,MAAM,IAAI;AAAA,MAC9B,SAAS;AAAA,MACT,OAAO0b;AAAA,IACf,GACM7gE,EAAMmlD,GAAgB,UAAU,IAAI,GACpCnlD,EAAMmlD,GAAgB,YAAY,IAAI,MAAM;AAC1C,MAAKhQ,EAAA,MAAKgqB,QACNn/D,EAAM,SAAS,aACjBm1C,EAAA,MAAKgqB,IAAU,aAAaziK,CAAC,GAC7Bw4I,EAAA,MAAKoqB,IAAgBt/D,OAErBm1C,EAAA,MAAKgqB,IAAU,aAAa,EAAE,GAC9BjqB,EAAA,MAAKoqB,IAAgB;AAAA,IAEzB,GACAnqB,EAAA,MAAKjtH,IAAK,WAAW,IAAI83E,GAAO9+C,CAAO;AAAA,EACzC;AACF,GACA++G,KAAc,SAAC9hI,GAAO;AACpB,QAAM,EAAE,WAAAi0C,GAAW,cAAA0uF,EAAY,IAAK3iI;AACpC,MAAIi0C,MAAc,SAAS;AACzB,UAAM4tB,IAAQm1C,EAAA,MAAKjtH,IAAK,YAAY,QAAQ,cAAc44I,EAAa,KAAK,EAAE;AAC9E,QAAI9gE,GAAO;AACT,YAAM9+C,IAAUo2F,EAAA,MAAK4nB,IAAAqB,IAAL,WAAqBpiI;AACrC,MAAAg3G,EAAA,MAAKjtH,IAAK,YAAYwiI,GAAW,MAAM,EAAE1qD,GAAO,IAAM9+C,CAAO;AAAA,IAC/D;AAAA,EACF;AACF,GACA6+G,KAAgB,SAAC5hI,GAAO;AACtB,MAAIA,EAAM,cAAc,QAAS;AACjC,QAAMyrH,IAAUzU,EAAA,MAAKjtH,IAAK,UAAUiW,EAAM,UAAU;AACpD,MAAIyrH,GAAS;AACX,UAAM1oG,IAAUo2F,EAAA,MAAK4nB,IAAAqB,IAAL,WAAqBpiI;AACrC,IAAAg3G,EAAA,MAAKjtH,IAAK,UAAUwiI,GAAW,MAAM,EAAEd,GAAS,IAAM1oG,CAAO;AAAA,EAC/D;AACF,GACA4+G,KAAiB,SAAC3hI,GAAO;AACvB,MAAIg3G,EAAA,MAAKjtH,IAAK,OAAO,QAAO,KAAM,CAACitH,EAAA,MAAKgqB,IAAW;AACnD,QAAM,EAAE,MAAAjqK,GAAM,2BAAA6rK,EAAyB,IAAK5iI,EAAM,MAAM+iB,IAAUo2F,EAAA,MAAK4nB,IAAAqB,IAAL,WAAqBpiI;AACvF,EAAAg3G,EAAA,MAAKjtH,IAAK,OAAO,sBAAsBhzB,MAAS,WAAW,SAAS,aAAagsD,CAAO,GACxFi0F,EAAA,MAAKjtH,IAAK,OAAO,mBAAmB64I,GAA2B7/G,CAAO,GACtEi0F,EAAA,MAAKjtH,IAAK,UAAU+nI,GAAc,OAAO,EAAE,IAAM/uG,CAAO;AACxD,QAAMysG,IAAQxY,EAAA,MAAKgqB,IAAU,gBAAe,GACtC6B,IAAiB7rB,EAAA,MAAKgqB,IAAU;AAAA,IACpC;AAAA,IACAhhI,EAAM;AAAA,EACZ,GACU8iI,IAAyB,CAAC,GAAG,IAAI,IAAID,EAAe,IAAI,CAACvuK,MAAMA,EAAE,QAAQ,CAAC,CAAC,EAAE;AAAA,IACjF,CAACyuK,MAAUA,KAASrf,GAAiB8L,GAAOuT,CAAK;AAAA,EACvD,GACUC,IAAeH,EAAe;AAAA,IAClC,CAAChhE,MAAUihE,MAA2BjhE,EAAM;AAAA,EAClD,EAAM,CAAC;AACH,MAAIohE,IAAcjsB,EAAA,MAAKgqB,IAAU;AAAA,IAC/B;AAAA,IACAhhI,EAAM;AAAA,EACZ;AACI,QAAMkjI,IAAyB,CAAC,GAAG,IAAI,IAAID,EAAY,IAAI,CAAC3uK,MAAMA,EAAE,QAAQ,CAAC,CAAC,EAAE;AAAA,IAC9E,CAACyuK,MAAUA,KAASvf,GAAiBgM,GAAOuT,CAAK;AAAA,EACvD;AAaI,MAZAE,IAAcA,EAAY,OAAO,CAACphE,MAAUqhE,MAA2BrhE,EAAM,QAAQ,GACrFmhE,EAAa,YAAY,QAAQ,CAACG,GAASzgK,MAAU;;AACnD,UAAM+oJ,IAAU;AAAA,MACd,MAAIhpJ,IAAA0gK,EAAQ,OAAR,gBAAA1gK,EAAY,eAAc,gBAAgBC,CAAK;AAAA,MACnD,OAAOygK,EAAQ,SAAS;AAAA,MACxB,QAAQA,EAAQ,UAAU;AAAA,MAC1B,SAASA,EAAQ,aAAa;AAAA,MAC9B,OAAOH,EAAa;AAAA,MACpB,OAAAtgK;AAAA,IACR;AACM,IAAAs0I,EAAA,MAAKjtH,IAAK,UAAUwiI,GAAW,GAAG,EAAEd,GAAS1oG,CAAO;AAAA,EACtD,CAAC,GACGnyC,GAASoyJ,EAAa,KAAK,GAAG;AAChC,UAAMvX,IAAUzU,EAAA,MAAKjtH,IAAK,UAAUi5I,EAAa,KAAK;AACtD,IAAIvX,KAASzU,EAAA,MAAKjtH,IAAK,UAAUwiI,GAAW,MAAM,EAAEd,GAAS,IAAM1oG,CAAO;AAAA,EAC5E;AACA,EAAAkgH,EAAY,QAAQ,CAAC5E,GAAY37J,MAAU;AAMzC,UAAMqP,IALgBssJ,EAAW,OAAO,KAAK,CAAC+E,MACrC,UAAU,UAAU,KAAK,CAAC7qI,MACxB6qI,EAAO,QAAQ7qI,EAAS,YAAW,EAAG,WAAW6qI,EAAO,KAAK,aAAa,CAClF,CACF,KAC8B/E,EAAW,OAAO,CAAC,GAC5CgF,IAAa;AAAA,MACjB,IAAI,cAAchF,KAAA,gBAAAA,EAAY,KAAK;AAAA,MACnC,QAAOtsJ,KAAA,gBAAAA,EAAO,UAASssJ,EAAW,QAAQuC,GAAYvC,EAAW,IAAI,MAAMA,EAAW,QAAQ;AAAA,MAC9F,UAAUA,EAAW,QAAQ;AAAA,MAC7B,MAAM;AAAA,MACN,UAAUA,EAAW;AAAA,MACrB,OAAOA,EAAW;AAAA,MAClB,OAAA37J;AAAA,IACR;AACM,IAAAs0I,EAAA,MAAKjtH,IAAK,YAAYwiI,GAAW,GAAG,EAAE8W,GAAYtgH,CAAO;AAAA,EAC3D,CAAC,GACDysG,EAAM,cAAc,IAAInZ,GAAS,WAAW,EAAE,SAAAtzF,EAAO,CAAE,CAAC;AAC1D,GACA40G,KAAQ,SAAC33H,GAAO;AACd,QAAM,EAAE,MAAMo3H,GAAW,OAAO32J,EAAI,IAAKu/B;AACzC,UAAQv/B,EAAK,MAAI;AAAA,IACf,KAAK;AACH,MAAA04I,EAAA,MAAK4nB,IAAAuC,IAAL,WAAqB7iK;AACrB;AAAA,IACF;AACE,MAAA04I,EAAA,MAAK4nB,IAAAwC,IAAL,WAAmB9iK;AACnB;AAAA,EACR;AACE,GACAghK,KAAoB,WAAG;AACrB,EAAIzqB,EAAA,MAAKqqB,OAAsB,KAAGloB,EAAA,MAAK4nB,IAAAyC,IAAL;AACpC,GACA9B,KAAuB,SAAC1hI,GAAO;AAE7B,EADkBA,EAAM,cACN,UAChB,sBAAsBm5G,EAAA,MAAK4nB,IAAAwB,IAAsB,KAAK,MAAMviI,CAAK,CAAC;AAEtE,GACAqhI,KAAA,eACAiC,KAAe,SAACztK,GAAO;;AACrB,EAAAsjJ,EAAA,MAAK4nB,IAAAyC,IAAL,aACA/gK,IAAAu0I,EAAA,MAAKgqB,QAAL,QAAAv+J,EAAgB,QAChBs0I,EAAA,MAAKsqB,IAAqB,OAAO,WAAW,MAAM;AAChD,IAAAtqB,EAAA,MAAKsqB,IAAqB,KAC1BloB,EAAA,MAAK4nB,IAAAwC,IAAL,WAAmB1tK;AAAA,EACrB,GAAG,GAAG;AACR,GACA2tK,KAAgB,WAAG;AACjB,eAAaxsB,EAAA,MAAKqqB,GAAkB,GACpCtqB,EAAA,MAAKsqB,IAAqB;AAC5B,GACAkC,KAAa,SAAC1tK,GAAO;AACnB,EAAAmhJ,EAAA,MAAKjtH,IAAK,OAAO,SAAS;AAAA,IACxB,SAASl0B,EAAM,WAAW;AAAA,IAC1B,MAAM;AAAA,IACN,OAAAA;AAAA,EACN,CAAK;AACH,GACAksK,KAAkB,WAAG;;AACnB,EAAA5oB,EAAA,MAAK4nB,IAAA0C,IAAL,WAAwB,SAAS;AACjC,QAAM,EAAE,WAAAtR,MAAcnb,EAAA,MAAKjtH;AAC3B,GAAAtnB,IAAAu0I,EAAA,MAAKgqB,QAAL,QAAAv+J,EAAgB,cAAc,SAAS0vJ,EAAU,eAAe;AAClE,GACAsR,KAAkB,SAAC1sK,GAAMk7J,GAAM;;AAC7B,GAAAxvJ,IAAAu0I,EAAA,MAAKgqB,QAAL,QAAAv+J,EAAgB,eAAe;AAAA,IAC7B,WAAW,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC1L,CAAI,GAAGk7J,IAAM,EAAE;AAAA,EAC/D;AACE,GACA+P,KAAoB,WAAG;AACrB,QAAM,EAAE,WAAA7P,MAAcnb,EAAA,MAAKjtH;AAC3B,EAAI,CAACitH,EAAA,MAAKgqB,OAAa7O,EAAU,QAAQ,CAACA,EAAU,aACpDhZ,EAAA,MAAK4nB,IAAA0C,IAAL,WAAwB,SAAS,KACjCzsB,EAAA,MAAKgqB,IAAU,cAAc,SAAS7O,EAAU,eAAeA,EAAU,WAAW,SAAS,GACzF/O,OACFpM,EAAA,MAAK6X,IAAO,cAAc7X,EAAA,MAAK6X,IAAO;AAE1C,GACAoT,KAAkB,WAAG;AACnB,MAAI,CAACjrB,EAAA,MAAKgqB,IAAW;AACrB,QAAM,EAAE,aAAAiC,EAAW,IAAKjsB,EAAA,MAAKjtH,KAAM25I,IAAgB1sB,EAAA,MAAKgqB,IAAU,aAAa,OAAO,EAAE;AAAA,IACtF,CAACn/D,MAAUohE,EAAY,YAAYA,EAAY,SAAS,OAAO,cAAcphE,EAAM,KAAK;AAAA,EAC9F;AACI,EAAI6hE,KAAe1sB,EAAA,MAAKgqB,IAAU,gBAAgB0C,CAAa;AACjE,GACAvB,KAAM,WAAG;AACP,EAAAhpB,EAAA,MAAK4nB,IAAAyC,IAAL,YACAzsB,EAAA,MAAKoqB,IAAgB,OACrBpqB,EAAA,MAAKqqB,IAAc,CAAA;AACrB;AAmBF,SAASuC,GAAc9tK,GAAO;AAC5B,SAAOA,aAAiB,QAAQA,IAAQ,MAAM,OAAOA,KAAU,WAAWA,IAAQ,KAAK,UAAUA,CAAK,CAAC;AACzG;AACA,SAAS+tK,GAAOC,GAAW75I,GAAS;AAClC,MAAI,CAAC65I;AACH,UAAM,MAAM,mBAAmB;AAEnC;;AAEA,MAAMC,GAAc;AAAA,EAIlB,YAAYC,GAAKj5I,GAAKuO,GAAU;AAJlC,IAAAu9G,EAAA,MAAAotB;AACE,IAAAptB,EAAA,MAAAqtB;AACA,IAAArtB,EAAA,MAAA7sH;AACA,IAAA6sH,EAAA,MAAAgkB;AAEE,IAAA7jB,EAAA,MAAKktB,IAAOF,IACZhtB,EAAA,MAAKhtH,IAAOe,IACZisH,EAAA,MAAK6jB,IAAYvhI,IACjB8/G,EAAA,MAAK6qB,IAAAE,IAAL;AAAA,EACF;AA0CF;AAlDED,KAAA,eACAl6I,KAAA,eACA6wI,KAAA,eAHFoJ,KAAA,eAUQE,KAAa,iBAAG;AACpB,QAAM9pI,IAAY;AAAA,IAChB,aAAa++G,EAAA,MAAK6qB,IAAA7H,IAAa,KAAK,IAAI;AAAA,IACxC,UAAUhjB,EAAA,MAAK6qB,IAAAG,IAAU,KAAK,IAAI;AAAA,IAClC,aAAahrB,EAAA,MAAK6qB,IAAAI,IAAa,KAAK,IAAI;AAAA,EAC9C;AACI,MAAI9C,IAAO,MAAM+C,GAAertB,EAAA,MAAKitB,KAAM7pI,CAAS;AAEpD,MADI+jB,GAAYmjH,CAAI,KAAK,CAAC3hH,GAASq3F,EAAA,MAAKitB,GAAI,MAAG3C,IAAO,MAAMgD,GAAWttB,EAAA,MAAKitB,KAAM7pI,CAAS,IACvF,CAACknI,EAAM,QAAO;AAClB,MAAI,CAAC,OAAO,OAAO,uBAAuB;AACxC,UAAMt3I,IAAU;AAChB,WAAAgtH,EAAA,MAAKjtH,IAAK,OAAO,SAAS,IAAIssH,GAAS,kBAAkB,CAAC,GAC1DW,EAAA,MAAKjtH,IAAK,OAAO,SAAS,EAAE,SAAAC,GAAS,MAAM,GAAG,GACvC;AAAA,EACT;AACA,SAAOs3I;AACT,GACAnF,KAAY,WAAG;AACb,EAAAnlB,EAAA,MAAKjtH,IAAK,OAAO,SAAS,IAAIssH,GAAS,qBAAqB,CAAC;AAC/D,GACA8tB,KAAS,SAAC7C,GAAM;AACd,EAAAtqB,EAAA,MAAKjtH,IAAK,OAAO;AAAA,IACf,IAAIssH,GAAS,mBAAmB;AAAA,MAC9B,QAAQirB;AAAA,IAChB,CAAO;AAAA,EACP,GACItqB,EAAA,MAAK4jB,IAAL,WAAe0G;AACjB,GACA8C,KAAY,SAAC9vK,GAAG;AACd,QAAMuB,IAAQ8tK,GAAcrvK,CAAC;AAC7B,EAAA0iJ,EAAA,MAAKjtH,IAAK,OAAO;AAAA,IACf,IAAIssH,GAAS,uBAAuB;AAAA,MAClC,QAAQxgJ;AAAA,IAChB,CAAO;AAAA,EACP,GACImhJ,EAAA,MAAKjtH,IAAK,OAAO,SAAS;AAAA,IACxB,SAASl0B,EAAM;AAAA,IACf,MAAM;AAAA,IACN,OAAAA;AAAA,EACN,CAAK;AACH;AAEF,eAAeyuK,GAAWC,GAAQnqI,IAAY,IAAI;;AAChD,MAAI,CAAA+jB,GAAYomH,CAAM,GAEtB;AAAA,SADA9hK,IAAA23B,EAAU,gBAAV,QAAA33B,EAAA,KAAA23B,IACIoqI,GAAkBD,CAAM;AAC1B,cAAA37J,IAAAwxB,EAAU,aAAV,QAAAxxB,EAAA,KAAAwxB,GAAqBmqI,IACdA;AAET,QAAIE,GAAgBF,CAAM,GAAG;AAC3B,YAAMjD,IAAOiD,EAAO;AACpB,cAAAhqJ,IAAA6f,EAAU,aAAV,QAAA7f,EAAA,KAAA6f,GAAqBknI,IACdA;AAAA,IACT;AACA,QAAI;AACF,YAAMA,KAAQ9mJ,IAAA,MAAM+pJ,EAAM,MAAZ,gBAAA/pJ,EAAiB;AAC/B,UAAIiqJ,GAAgBnD,CAAI;AACtB,gBAAA7qJ,IAAA2jB,EAAU,aAAV,QAAA3jB,EAAA,KAAA2jB,GAAqBknI,EAAK,cACnBA,EAAK;AAEd,UAAIA;AACF,SAAAt7G,IAAA5rB,EAAU,aAAV,QAAA4rB,EAAA,KAAA5rB,GAAqBknI;AAAA;AAErB,cAAM;AAAA,UACuF;AAAA,QACnG;AAEI,aAAOA;AAAA,IACT,SAAShmK,GAAK;AACZ,OAAAikF,IAAAnlD,EAAU,gBAAV,QAAAmlD,EAAA,KAAAnlD,GAAwB9+B;AAAA,IAC1B;AAAA;AAEF;AACA,eAAe+oK,GAAejkK,GAAKg6B,IAAY,IAAI;;AACjD,MAAKulB,GAASv/C,CAAG,GACjB;AAAA,KAAAqC,IAAA23B,EAAU,gBAAV,QAAA33B,EAAA,KAAA23B;AACA,QAAI;AAEF,UADA,MAAMgsH,GAAWhmJ,CAAG,GAChB,CAAC8iC,GAAW,OAAO,OAAO,WAAW;AACvC,cAAM;AAAA,UACiG;AAAA,QAC7G;AAEI,YAAMo+H,IAAO,OAAO,OAAO;AAC3B,cAAA14J,IAAAwxB,EAAU,aAAV,QAAAxxB,EAAA,KAAAwxB,GAAqBknI,IACdA;AAAA,IACT,SAAShmK,GAAK;AACZ,OAAAif,IAAA6f,EAAU,gBAAV,QAAA7f,EAAA,KAAA6f,GAAwB9+B;AAAA,IAC1B;AAAA;AAEF;AACA,SAASkpK,GAAkB7oK,GAAO;AAChC,SAAOA,KAASA,EAAM,aAAaA,EAAM,cAAc;AACzD;AACA,SAAS8oK,GAAgB9oK,GAAO;AAC9B,SAAOA,KAAS,iBAAiBA;AACnC;AAEA,MAAM+oK,KAAgB;;AACtB,MAAMC,WAAqBhE,GAAc;AAAA,EAAzC;AAAA;AACE,IAAAhnJ,EAAA,yBAAkB;AAClB,IAAAi9H,EAAA,MAAAguB,IAAQ;AACR,IAAAhuB,EAAA,MAAAE,IAAc,IAAIgqB,GAAe,KAAK,OAAO,KAAK,GAAG;AAuBrD,IAAAlqB,EAAA,MAAAiuB,IAAW,GAAGH,EAAa;AAAA;AAAA;AAAA;AAAA;AAAA,EAnB3B,IAAI,OAAO;AACT,WAAO1tB,EAAA,MAAK4tB;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,WAAW;AACb,WAAO5tB,EAAA,MAAKF,IAAY;AAAA,EAC1B;AAAA,EAKA,IAAI,OAAO;AACT,WAAO;AAAA,EACT;AAAA,EACA,IAAI,cAAc;AAChB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,SAAS;AACX,WAAOE,EAAA,MAAKF,IAAY;AAAA,EAC1B;AAAA,EACA,IAAI,OAAOz6I,GAAQ;AACjB,IAAA26I,EAAA,MAAKF,IAAY,SAASz6I;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,UAAU;AACZ,WAAO26I,EAAA,MAAK6tB;AAAA,EACd;AAAA,EACA,IAAI,QAAQC,GAAS;AACnB,IAAA/tB,EAAA,MAAK8tB,IAAWC;AAAA,EAClB;AAAA,EACA,aAAa;AACX,IAAKnlH,GAASq3F,EAAA,MAAK6tB,GAAQ,KAC3B7e,GAAWhP,EAAA,MAAK6tB,GAAQ;AAAA,EAC1B;AAAA,EACA,QAAQ;AACN,UAAM,MAAK,GACX,IAAIf,GAAc9sB,EAAA,MAAK6tB,KAAU,KAAK,KAAK,CAACvD,MAAS;AACnD,MAAAvqB,EAAA,MAAK6tB,IAAQtD,IACbtqB,EAAA,MAAKF,IAAY,MAAMwqB,CAAI,GAC3B,KAAK,IAAI,OAAO,kBAAkB,IAAI;AACtC,YAAMlhK,IAAMuzI,GAAK,KAAK,IAAI,OAAO,MAAM;AACvC,MAAIvzI,KAAK,KAAK,WAAWA,CAAG;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EACA,MAAM,WAAWA,GAAKu+J,GAAS;AAC7B,QAAI,CAACh/G,GAASv/C,EAAI,GAAG,GAAG;AACtB,WAAK,aAAY;AACjB;AAAA,IACF;AACA,SAAK,MAAM,UAAUu+J,KAAW,IAChC,KAAK,aAAav+J,GAAK,uBAAuB,GAC9C42I,EAAA,MAAKF,IAAY,WAAW12I,CAAG,GAC/B,KAAK,aAAaA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAWi5B,GAAU;AACnB,UAAM29E,IAAWggC,EAAA,MAAKF,IAAY;AAClC,WAAI9/B,KAAU39E,EAAS29E,CAAQ,GACxBggC,EAAA,MAAKF,IAAY,WAAWz9G,CAAQ;AAAA,EAC7C;AAAA,EACA,UAAU;AACR,IAAA29G,EAAA,MAAKF,IAAY,QAAO;AAAA,EAC1B;AACF;AAnFE8tB,KAAA,eACA9tB,KAAA,eAuBA+tB,KAAA;AAAA;AAAA;AAPAlrJ,EAnBIgrJ,IAmBG,aAAYpgB,GAAe;AAoEpC,IAAI9sJ,KAAwB,uBAAO,OAAO;AAAA,EACxC,WAAW;AAAA,EACX,cAAcktK;AAChB,CAAC;AAED,MAAMI,KAAN,MAAMA,WAA2BtM,GAAoB;AAAA,EAArD;AAAA;AAEE,IAAA9+I,EAAA,cAAO;AAAA;AAAA,EACP,QAAQvZ,GAAK;AACX,WAAO2kK,GAAmB,aAAapf,GAAUvlJ,CAAG;AAAA,EACtD;AAAA,EACA,MAAM,KAAK5I,GAAS;AAClB,QAAIi7I;AACF,YAAM,MAAM,mDAAmD;AAEjE,WAAO,KAAK,MAAM,QAAQ,QAAO,EAAG,KAAK,WAAY;AAAE,aAAOh7I;AAAA,IAAU,CAAC,GAAG,aAAa,KAAK,QAAQD,CAAO;AAAA,EAC/G;AACF;AAXEmiB,EADIorJ,IACG,aAAYxgB,GAAe;AADpC,IAAMygB,KAAND;AAcA,MAAME,GAAoB;AAAA,EAA1B;AACE,IAAAtrJ,EAAA,cAAO;AACP,IAAAA,EAAA;AAAA;AAAA,EACA,aAAa;AACX,UAAMurJ,IAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,IACN;AACI,eAAW9lI,KAAO8lI;AAChB,MAAAlf,GAAW5mH,CAAG;AAAA,EAElB;AAAA,EACA,QAAQh/B,GAAK;AACX,WAAOu/C,GAASv/C,EAAI,GAAG,KAAKA,EAAI,SAAS;AAAA,EAC3C;AAAA,EACA,YAAY;AACV,WAAO;AAAA,EACT;AAAA,EACA,MAAM,KAAK0qB,GAAK;AACd,QAAI2nH;AACF,YAAM,MAAM,oDAAoD;AAElE,WAAO,KAAK,MAAM,OAAO,iCAAwB,GAAG,cAAc,KAAK,QAAQ3nH,CAAG;AAAA,EACpF;AAAA,EACA,MAAM,WAAW1qB,GAAK0qB,GAAKq6I,GAAO;AAChC,UAAM,EAAE,qBAAAC,GAAqB,mBAAAC,MAAsB,MAAM,OAAO,iCAAwB;AACxF,QAAI,CAAC1lH,GAASv/C,EAAI,GAAG,EAAG,QAAO;AAC/B,UAAM,EAAE,SAAAklK,GAAS,MAAAC,EAAI,IAAKH,EAAoBhlK,EAAI,GAAG;AACrD,WAAIklK,IACKD,EAAkBC,GAASH,GAAOI,CAAI,EAAE,KAAK,CAACvnK,MAASA,IAAOA,EAAK,SAAS,IAAI,IAElF;AAAA,EACT;AACF;AAEA,MAAMwnK,GAAsB;AAAA,EAA5B;AACE,IAAA7rJ,EAAA,cAAO;AACP,IAAAA,EAAA;AAAA;AAAA,EACA,aAAa;AACX,UAAMurJ,IAAc;AAAA;AAAA,MAElB;AAAA;AAAA,MAEA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,IACN;AACI,eAAW9lI,KAAO8lI;AAChB,MAAAlf,GAAW5mH,CAAG;AAAA,EAElB;AAAA,EACA,QAAQh/B,GAAK;AACX,WAAOu/C,GAASv/C,EAAI,GAAG,KAAKA,EAAI,SAAS;AAAA,EAC3C;AAAA,EACA,YAAY;AACV,WAAO;AAAA,EACT;AAAA,EACA,MAAM,KAAK0qB,GAAK;AACd,QAAI2nH;AACF,YAAM,MAAM,sDAAsD;AAEpE,WAAO,KAAK,MAAM,OAAO,iCAAwB,GAAG,gBAAgB,KAAK,QAAQ3nH,CAAG;AAAA,EACtF;AAAA,EACA,MAAM,WAAW1qB,GAAK0qB,GAAKq6I,GAAO;AAChC,UAAM,EAAE,mBAAAM,GAAmB,uBAAAC,MAA0B,MAAM,OAAO,iCAAwB,GACpFJ,IAAU3lH,GAASv/C,EAAI,GAAG,KAAKslK,EAAsBtlK,EAAI,GAAG;AAClE,WAAIklK,IAAgBG,EAAkBH,GAASH,CAAK,IAC7C;AAAA,EACT;AACF;AAEA,SAASQ,GAAoBrjE,GAAKsjE,GAAgB;AAChD,QAAMvqI,IAAM,OAAOinE,CAAG,GAChBujE,IAAexqI,EAAI;AAEzB,MADkBwqI,IAAeD,GAClB;AACb,UAAME,IAAYF,IAAiBC;AAEnC,WAAO,GADS,IAAI,OAAOC,CAAS,CACnB,GAAGxjE,CAAG;AAAA,EACzB;AACA,SAAOjnE;AACT;AACA,SAAS0qI,GAAUjb,GAAU;AAC3B,QAAMxgB,IAAQ,KAAK,MAAMwgB,IAAW,IAAI,GAClCkb,IAAU,KAAK,MAAMlb,IAAW,OAAO,EAAE,GACzCmb,IAAU,KAAK,MAAMnb,IAAW,EAAE,GAClCob,IAAW,QAAQpb,IAAW,KAAK,MAAMA,CAAQ,GAAG,YAAY,CAAC,CAAC;AACxE,SAAO;AAAA,IACL,OAAAxgB;AAAA,IACA,SAAA07B;AAAA,IACA,SAAAC;AAAA,IACA,UAAAC;AAAA,EACJ;AACA;AACA,SAASC,GAAWrb,GAAU,EAAE,QAAAsb,IAAS,MAAM,SAAAC,IAAU,MAAM,SAAAC,IAAU,IAAO,QAAAC,IAAS,GAAK,IAAK,CAAA,GAAI;AACrG,QAAM,EAAE,OAAAj8B,GAAO,SAAA07B,GAAS,SAAAC,GAAS,UAAAC,EAAQ,IAAKH,GAAUjb,CAAQ,GAAG0b,IAAcJ,IAAST,GAAoBr7B,GAAO,CAAC,IAAIA,GAAOm8B,IAAgBJ,KAAWrwB,GAAOqwB,CAAO,KAAKvb,KAAY,OAAO6a,GAAoBK,GAAS,CAAC,IAAIA,GAASU,IAAgBf,GAAoBM,GAAS,CAAC,GAAGU,IAAWJ,KAAUL,IAAW,IAAI,IAAI,OAAOA,CAAQ,EAAE,QAAQ,SAAS,EAAE,CAAC,KAAK,IAAIh8G,IAAO,GAAGu8G,CAAa,IAAIC,CAAa,GAAGC,CAAQ;AACva,SAAOr8B,IAAQ,KAAKg8B,IAAU,GAAGE,CAAW,IAAIt8G,CAAI,KAAKA;AAC3D;AACA,SAAS08G,GAAiB9b,GAAU;AAClC,QAAM+b,IAAc,CAAA,GACd,EAAE,OAAAv8B,GAAO,SAAA07B,GAAS,SAAAC,EAAO,IAAKF,GAAUjb,CAAQ;AACtD,SAAIxgB,IAAQ,KACVu8B,EAAY,KAAK,GAAGv8B,CAAK,OAAO,GAE9B07B,IAAU,KACZa,EAAY,KAAK,GAAGb,CAAO,MAAM,IAE/BC,IAAU,KAAKY,EAAY,WAAW,MACxCA,EAAY,KAAK,GAAGZ,CAAO,MAAM,GAE5BY,EAAY,KAAK,GAAG;AAC7B;AAEA,MAAMC,KAAmB,OAAO,CAAC,GAC3BC,KAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEMC,KAAmB;AAAA,EACvB,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,eAAe;AAAA,EACf,aAAa;AAAA,EACb,UAAU;AAAA,EACV,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,UAAU;AAAA,EACV,uBAAuB;AAAA,EACvB,YAAY,CAAA;AAAA,EACZ,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,aAAa;AAAA,EACb,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,iBAAiB;AAAA,EACjB,KAAK;AAAA,EACL,OAAO;AAAA,EACP,eAAe;AAAA,EACf,0BAA0B;AAAA,EAC1B,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,WAAW;AAAA,EACX,cAAcvU;AAAA,EACd,SAAS;AACX;;AAEA,MAAMwU,WAA4BzU,GAAsB;AAAA,EAGtD,YAAYz7J,GAAMsiC,GAAU;AAC1B,UAAK;AAHP,IAAAu9G,EAAA,MAAAqhB;AACA,IAAArhB,EAAA,MAAAgkB;AAGE,IAAA7jB,EAAA,MAAKkhB,IAAQlhK,IACbggJ,EAAA,MAAK6jB,IAAYvhI;AAAA,EACnB;AAAA,EACA,MAAM,SAAS1P,GAAI;AACjB,QAAI8oH,GAAW;AACf,UAAMy0B,IAAO,KAAK,OAAOlwB,EAAA,MAAKihB,GAAK,EAAC;AACpC,QAAIiP,MAAS;AACX,4BAAsBlwB,EAAA,MAAK4jB,GAAS;AAAA,aAC3BsM,MAAS;AAClB,MAAA7oB,GAAerH,EAAA,MAAK4jB,GAAS;AAAA,aACpBsM,MAAS,WAAW;AAC7B,UAAIxzB,GAASpxI,IAAW,IAAI,qBAAqB,CAACwY,MAAY;AAC5D,QAAK,KAAK,SACNA,EAAQ,CAAC,EAAE,mBACb44H,KAAA,QAAAA,KACAA,IAAU,QACVsD,EAAA,MAAK4jB,IAAL;AAAA,MAEJ,CAAC;AACD,MAAAt4J,EAAS,QAAQqnB,CAAE,GACnB+pH,IAAUQ,GAAU,MAAM5xI,EAAS,WAAU,CAAE;AAAA,IACjD;AAAA,EACF;AACF;AA3BE21J,KAAA,eACA2C,KAAA;;AA4BF,MAAMuM,GAAoB;AAAA,EAGxB,YAAYC,GAAQ5X,GAAO;AAH7B,IAAA5Y,EAAA,MAAAywB;AACE,IAAAzwB,EAAA,MAAA0wB;AACA,IAAA1wB,EAAA,MAAAgZ;AAEE,IAAA7Y,EAAA,MAAKuwB,IAAUF,IACfrwB,EAAA,MAAK6Y,IAASJ;AAAA,EAChB;AAAA,EACA,OAAOz4J,MAASc,GAAM;AACpB,IAAI46I,MACJuE,EAAA,MAAKswB,IAAL,WACE,IAAIjxB,GAASt/I,GAAM;AAAA,MACjB,QAAQc,KAAA,gBAAAA,EAAO;AAAA,MACf,SAASA,KAAA,gBAAAA,EAAO;AAAA,IACxB,CAAO;AAAA,EAEL;AAAA,EACA,MAAM,MAAMmG,GAAM+kD,GAAS;AACzB,QAAI,CAAA0vF;AACJ,aAAOmB,GAAQ,YAAY;;AACzB,cAAM,EAAE,QAAA3hE,EAAM,IAAK+kE,EAAA,MAAK4Y,KAAQ;AAAA,UAC9B,UAAA2X;AAAA,UACA,SAAAC;AAAA,UACA,SAAAhR;AAAA,UACA,UAAA1L;AAAA,UACA,UAAA2c;AAAA,UACA,UAAAC;AAAA,UACA,oBAAAC;AAAA,UACA,aAAAC;AAAA,UACA,YAAAC;AAAA,UACA,QAAA9uK;AAAA,QACR,IAAUi+I,EAAA,MAAK4Y,IAAO;AAChB,YAAI4X,EAAO,EAAI;AACf,cAAM3gI,IAAS;AAAA,UACb,WAAU7oC,KAAA,gBAAAA,EAAM,aAAY8sJ,EAAQ;AAAA,UACpC,WAAU9sJ,KAAA,gBAAAA,EAAM,aAAYypK,EAAQ;AAAA,UACpC,WAAUzpK,KAAA,gBAAAA,EAAM,aAAY0pK,EAAQ;AAAA,UACpC,UAAU1wB,EAAA,MAAK4Y,IAAO,UAAS;AAAA,QACvC;AACM,aAAK,OAAO,YAAY/oH,GAAQkc,CAAO,GACvC8wF,GAAI;AACJ,YAAIp8I,IAAWu/I,EAAA,MAAK4Y,IAAO,UAAS,GAAI,EAAE,SAAA5pB,GAAS,WAAAmsB,MAAcnb,EAAA,MAAK4Y,KAAQ,EAAE,OAAArE,GAAO,QAAAP,GAAQ,eAAA+T,GAAe,cAAA/K,MAAiBhd,EAAA,MAAK4Y,IAAO;AAC3I,gBAAMntJ,IAAAujI,KAAA,gBAAAA,EAAS,WAAT,gBAAAvjI,EAAA,KAAAujI,GAAkBjtI;AACxB,cAAM+uK,KAAoBl/J,IAAAi/J,QAAA,gBAAAj/J,EAAc,aAAam/J,KAAmBxtJ,IAAAstJ,EAAU,MAAV,gBAAAttJ,EAAc,QAAQytJ,IAAc,OAAMhiC,KAAA,gBAAAA,EAAS,YAAWjyD,IAAY+zF,KAAqBE,KAAejJ,EAAa,GAAIkJ,IAAiBF,MAAqB,MAASA,MAAqB,MAAQ,CAACvR,EAAO,KAAM+Q,EAAQ;AACzS,YAAI9vK,GAAU;AACZ,UAAAA,EAAS,UAAU,OAAMuuI,KAAA,gBAAAA,EAAS,gBAAeglB,EAAM,CAAE,GACzDvzJ,EAAS,SAAS8zJ,EAAK,KAAM,CAAC,CAAC,OAAMvlB,KAAA,gBAAAA,EAAS,WAAU;AACxD,gBAAMkiC,IAAY,OAAMliC,KAAA,gBAAAA,EAAS,mBAAkB;AACnD,UAAIkiC,IAAY,OAAGzxJ,KAAA+D,IAAA/iB,EAAS,cAAT,gBAAA+iB,EAAoB,YAApB,QAAA/D,EAAA,KAAA+D,GAA8B0tJ,MACjDliH,IAAAvuD,EAAS,oBAAT,QAAAuuD,EAAA,KAAAvuD,GAA2B,OAAMuuI,KAAA,gBAAAA,EAAS,sBAAqBguB,EAAY,KAC3Ez0E,IAAA9nF,EAAS,mBAAT,QAAA8nF,EAAA,KAAA9nF,GAA0BmwK,MACtB7zF,IAAY,KAAGt8E,EAAS,eAAes8E,CAAS;AAAA,QACtD;AACA,cAAMo0F,IAAc,OAAMniC,KAAA,gBAAAA,EAAS;AACnC,YAAImiC,KAAehW,EAAU,QAAQ;AACnC,cAAIiW,IAAiB,MAAMC,IAAe;AAC1C,qBAAW5c,MAAW0G,GAAW;AAC/B,kBAAMmW,KAAQ,KAAK,IAAIH,EAAY,QAAQ1c,GAAQ,KAAK,IAAI,KAAK,IAAI0c,EAAY,SAAS1c,GAAQ,MAAM,KAAK0c,EAAY,UAAU,KAAK,IAAIA,EAAY,WAAW1c,GAAQ,WAAW,EAAE,IAAI;AAC5L,YAAI6c,KAAQD,MACVD,IAAiB3c,IACjB4c,IAAeC;AAAA,UAEnB;AACA,UAAIF,MAAgBA,EAAe,WAAW;AAAA,QAChD;AACA,QAAIZ,EAAO,KAAMS,IACf,MAAM9uB,EAAA,MAAKkuB,IAAAkB,IAAL,WAAsBxlH,KACnBilH,KAAeA,IAAc,KACtC,KAAK,OAAO,WAAW,QAAQjlH,CAAO,GAExC4kH,EAAmB,IAAI,IAAI;AAAA,MAC7B,CAAC;AAAA,EACH;AAaF;AAnFEL,KAAA,eACA1X,KAAA,eAFFyX,KAAA,eAwEQkB,KAAgB,eAACxlH,GAAS;AAC9B,QAAM;AAAA,IACJ,QAAA4nG;AAAA,IACA,QAAQ,EAAE,aAAA6d,GAAa,OAAAjd,EAAK;AAAA,EAClC,IAAQvU,EAAA,MAAK4Y;AACT,EAAA4Y,EAAY,IAAI,EAAI;AACpB,QAAMC,IAAe,IAAIpyB,GAAS,qBAAqB,EAAE,SAAAtzF,EAAO,CAAE;AAClE,MAAI;AACF,UAAM4nG,EAAO,KAAK8d,CAAY;AAAA,EAChC,QAAgB;AAAA,EAChB;AACF;;AAGF,MAAMC,GAAM;AAAA,EAAZ;AACE,IAAA9xB,EAAA,MAAA+xB,IAAyB,oBAAI,IAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKhC,QAAQ5rK,GAAKxG,GAAM;AACjB,IAAAygJ,EAAA,MAAK2xB,IAAO,IAAI5rK,GAAKxG,CAAI;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAIA,MAAMwG,GAAK;AACT,UAAMpB,IAAQ,KAAK,KAAKoB,CAAG;AAC3B,WAAAi6I,EAAA,MAAK2xB,IAAO,OAAO5rK,CAAG,GACfpB;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAIA,KAAKoB,GAAK;AACR,WAAOi6I,EAAA,MAAK2xB,IAAO,IAAI5rK,CAAG;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAIA,OAAOA,GAAK;AACV,IAAAi6I,EAAA,MAAK2xB,IAAO,OAAO5rK,CAAG;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ;AACN,IAAAi6I,EAAA,MAAK2xB,IAAO,MAAK;AAAA,EACnB;AACF;AAlCEA,KAAA;;AAoCF,MAAMC,GAAa;AAAA,EAAnB;AAAA,IAAAhyB,EAAA,MAAAiyB;AACE,IAAAjyB,EAAA,MAAAkyB,IAAW;AACX,IAAAlyB,EAAA,MAAAmyB,IAAWnrB,GAAe;AAC1B,IAAAhH,EAAA,MAAA+xB,IAAyB,oBAAI,IAAG;AAAA;AAAA;AAAA;AAAA;AAAA,EAIhC,IAAI,OAAO;AACT,WAAO3xB,EAAA,MAAK2xB,IAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,YAAY;AACd,WAAO3xB,EAAA,MAAK8xB;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,eAAe;AACnB,IAAI9xB,EAAA,MAAK8xB,OACT,MAAM9xB,EAAA,MAAK+xB,IAAS;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,QAAQhsK,GAAKs8B,GAAU;AACrB,QAAI29G,EAAA,MAAK8xB,KAAU;AACjB,MAAAzvI,EAAQ;AACR;AAAA,IACF;AACA,IAAA29G,EAAA,MAAK2xB,IAAO,OAAO5rK,CAAG,GACtBi6I,EAAA,MAAK2xB,IAAO,IAAI5rK,GAAKs8B,CAAQ;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAIA,MAAMt8B,GAAK;;AACT,KAAA0F,IAAAu0I,EAAA,MAAK2xB,IAAO,IAAI5rK,CAAG,MAAnB,QAAA0F,KACAu0I,EAAA,MAAK2xB,IAAO,OAAO5rK,CAAG;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ;AACN,IAAAo8I,EAAA,MAAK0vB,IAAAG,IAAL,YACAjyB,EAAA,MAAK+xB,IAAW,KACZ9xB,EAAA,MAAK2xB,IAAO,OAAO,KAAGxvB,EAAA,MAAK0vB,IAAAG,IAAL;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO;AACL,IAAAjyB,EAAA,MAAK+xB,IAAW;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ;AACN,SAAK,KAAI,GACT9xB,EAAA,MAAK2xB,IAAO,MAAK,GACjBxvB,EAAA,MAAK0vB,IAAAI,IAAL;AAAA,EACF;AASF;AA7EEH,KAAA,eACAC,KAAA,eACAJ,KAAA,eAHFE,KAAA,eAsEEG,KAAM,WAAG;AACP,aAAWjsK,KAAOi6I,EAAA,MAAK2xB,IAAO,KAAI,EAAI,MAAK,MAAM5rK,CAAG;AACpD,EAAAo8I,EAAA,MAAK0vB,IAAAI,IAAL;AACF,GACAA,KAAQ,WAAG;AACT,EAAAjyB,EAAA,MAAK+xB,IAAS,QAAO,GACrBhyB,EAAA,MAAKgyB,IAAWnrB,GAAe;AACjC;AAGF,SAASF,GAAS/hJ,GAAO;AACvB,SAAOA,IAAQ,SAAS;AAC1B;AACA,SAASutK,GAAUxtF,GAAQ;AACzB,SAAO,MAAMgiE,GAAShiE,GAAQ;AAChC;AACA,SAASytF,KAAuB;AAC9B,SAAI,OAAO,SAAW,MAAoB,KACnC,OAAO,WAAW,kCAAkC,EAAE;AAC/D;;AAEA,MAAMC,WAA4B5W,GAAsB;AAAA,EAStD,YAAY6W,GAAUt0F,GAASy6E,GAAO;AACpC,UAAK;AAVT,IAAA5Y,EAAA,MAAA0yB;AACE,IAAA1yB,EAAA,MAAA2yB;AACA,IAAA3yB,EAAA,MAAA4yB;AACA,IAAA5yB,EAAA,MAAAgZ;AACA,IAAAj2I,EAAA;AACA,IAAAi9H,EAAA,MAAA6yB;AACA,IAAA7yB,EAAA,MAAA8yB;AACA,IAAA9yB,EAAA,MAAA+yB;AACA,IAAA/yB,EAAA,MAAAgzB,IAAiB,IAAIhB,GAAY;AAgJjC,IAAAhyB,EAAA,MAAAizB,IAAgB;AA+GhB,IAAAjzB,EAAA,MAAAkzB;AA5PE,IAAA/yB,EAAA,MAAKwyB,IAAYF,IACjBtyB,EAAA,MAAKyyB,IAAWz0F,IAChBgiE,EAAA,MAAK6Y,IAASJ,IACdzY,EAAA,MAAK4yB,IAAana,EAAM,YACxB,KAAK,WAAW,IAAI0F,GAAa,GACjCne,EAAA,MAAK0yB,IAAc,IAAIlS,GAAoB,IAC3CxgB,EAAA,MAAK2yB,IAAe,IAAInR,GAA2B;AAAA,EACrD;AAAA,EACA,WAAW;AACT,SAAK,OAAO,qBAAqBpf,EAAA,MAAKmwB,IAAAS,IAAoB,KAAK,IAAI,CAAC;AAAA,EACtE;AAAA,EACA,UAAUpgJ,GAAI;AACZ,UAAM+zB,IAAQ,OAAO,oBAAoB,OAAO,eAAe,IAAI,CAAC,GAAGi5G,IAAS,IAAIhgB,GAAiBhtH,CAAE,GAAGqgJ,IAAgB7wB,EAAA,MAAKmwB,IAAAW,IAAe,KAAK,IAAI;AACvJ,eAAWnxK,KAAQ4kD;AACjB,MAAI5kD,EAAK,WAAW,QAAQ,KAC1B69J,EAAO,IAAI79J,GAAMkxK,CAAa;AAGlC,IAAA7wB,EAAA,MAAKmwB,IAAAY,IAAL,YACA/zI,EAAOgjH,EAAA,MAAKmwB,IAAAa,IAAe,KAAK,IAAI,CAAC,GACrCh0I,EAAOgjH,EAAA,MAAKmwB,IAAAc,IAA0B,KAAK,IAAI,CAAC,GAChDj0I,EAAOgjH,EAAA,MAAKmwB,IAAAe,IAAuB,KAAK,IAAI,CAAC,GAC7Cl0I,EAAOgjH,EAAA,MAAKmwB,IAAAgB,IAAqB,KAAK,IAAI,CAAC,GAC3Cn0I,EAAOgjH,EAAA,MAAKmwB,IAAAiB,IAAwB,KAAK,IAAI,CAAC,GAC9Cp0I,EAAOgjH,EAAA,MAAKmwB,IAAAkB,IAAwB,KAAK,IAAI,CAAC,GAC9Cr0I,EAAOgjH,EAAA,MAAKmwB,IAAAmB,IAAiB,KAAK,IAAI,CAAC;AAAA,EACzC;AAAA,EACA,YAAY;AACV,QAAI;AACF,YAAMC,IAAe,KAAK,YAAY,SAAS,GAAG,EAAE,kBAAAC,GAAkB,YAAAC,MAAe,KAAK;AAC1F,MAAIA,EAAU,KAAI,KAAK,eAAe,gBAAgBF,CAAY,GAC9DC,EAAgB,KAAI,KAAK,qBAAqBD,CAAY;AAAA,IAChE,QAAY;AAAA,IACZ;AACA,IAAA1zB,EAAA,MAAK4yB,IAAe,MAAK;AAAA,EAC3B;AAAA,EA8BA,MAAM,KAAK7mH,GAAS;AAClB,QAAI0vF,GAAW;AACf,UAAM,EAAE,SAAA+0B,GAAS,QAAA9Q,GAAQ,aAAA8R,EAAW,IAAK,KAAK;AAE9C,QADIrvB,EAAA,MAAKmwB,IAAAuB,IAAL,WAA6B9nH,MAC7B,CAAC4wF,GAAK+iB,CAAM,EAAG;AACnB,IAAI3zG,KAASi0F,EAAA,MAAKwyB,IAAS,MAAM,QAAQ,sBAAsBzmH,CAAO;AACtE,UAAM+nH,IAAgBn3B,GAAK60B,CAAW;AACtC,QAAI;AACF,YAAM/wK,IAAWk8I,GAAKqD,EAAA,MAAK2yB,GAAU;AACrC,aAAAoB,GAA2BtzK,GAAUk8I,GAAK6zB,CAAO,CAAC,GAClDwD,GAAoCF,CAAa,GAC1C,MAAMrzK,EAAS,KAAI;AAAA,IAC5B,SAAS5B,GAAO;AACd,YAAMo1K,IAAa,KAAK,YAAY,aAAa;AAAA,QAC/C,QAAQtH,GAAc9tK,CAAK;AAAA,QAC3B,SAAAktD;AAAA,MACR,CAAO;AACD,YAAAkoH,EAAW,WAAWH,GACtB9zB,EAAA,MAAKuyB,IAAU,OAAO0B,CAAU,GAC1Bp1K;AAAA,IACR;AAAA,EACF;AAAA,EAgBA,MAAM,MAAMktD,GAAS;AACnB,QAAI0vF,GAAW;AACf,UAAM,EAAE,SAAA+0B,GAAS,QAAA9Q,EAAM,IAAK,KAAK;AACjC,QAAI,CAAA/iB,GAAK+iB,CAAM,GACf;AAAA,MAAI3zG,KACFi0F,EAAA,MAAKwyB,IAAS,MAAM,QAAQ,uBAAuBzmH,CAAO;AAE5D,UAAI;AACF,cAAMtrD,IAAWk8I,GAAKqD,EAAA,MAAK2yB,GAAU;AACrC,eAAAoB,GAA2BtzK,GAAUk8I,GAAK6zB,CAAO,CAAC,GAC3C,MAAM/vK,EAAS,MAAK;AAAA,MAC7B,SAAS5B,GAAO;AACd,cAAAmhJ,EAAA,MAAKwyB,IAAS,MAAM,OAAO,qBAAqB,GAC1C3zK;AAAA,MACR;AAAA;AAAA,EACF;AAAA,EACA,aAAaq1J,GAAMnoG,GAAS;AAC1B,UAAM,EAAE,WAAAmlH,GAAW,iBAAAgD,EAAe,IAAK,KAAK;AAC5C,QAAIhD,EAAS,MAAOhd,EAAM;AAC1B,UAAMzzJ,IAAWu/I,EAAA,MAAK2yB,IAAL;AACjB,QAAI,EAAClyK,KAAA,QAAAA,EAAU,cAAa,CAACyzK,EAAe;AAC1C,YAAM,MAAM,yCAAyC;AAEvD,IAAInoH,KACFi0F,EAAA,MAAKwyB,IAAS,MAAM,QAAQ,mCAAmCzmH,CAAO,GAExEtrD,EAAS,UAAU,QAAQyzJ,CAAI;AAAA,EACjC;AAAA,EACA,eAAenoG,GAAS;AACtB,QAAI0vF,GAAW;AACf,UAAM,EAAE,SAAA+0B,GAAS,MAAAjjH,GAAM,UAAA4mH,GAAU,SAAAC,GAAS,kBAAAC,GAAkB,aAAAC,GAAa,oBAAAC,MAAuB,KAAK;AAErG,QADAA,EAAmB,IAAI,EAAK,GACxB53B,GAAK,MAAM,CAACpvF,EAAI,KAAM4mH,OAAc,CAACC,EAAO,CAAE,EAAG;AACrD,UAAM3zK,IAAWk8I,GAAKqD,EAAA,MAAK2yB,GAAU;AACrC,IAAAoB,GAA2BtzK,GAAUk8I,GAAK6zB,CAAO,CAAC,GAC9CzkH,KAASi0F,EAAA,MAAKwyB,IAAS,MAAM,QAAQ,sBAAsBzmH,CAAO;AACtE,UAAMj/C,IAAMwnK,EAAW,IAAK;AAC5B,IAAA7zK,EAAS,eAAe,KAAK,IAAIqM,GAAKunK,EAAgB,KAAMvnK,CAAG,CAAC;AAAA,EAClE;AAAA,EAEA,MAAM,gBAAgBkqB,IAAS,gBAAgB+0B,GAAS;AACtD,QAAI0vF,GAAW;AACf,UAAM+4B,IAAUryB,EAAA,MAAKmwB,IAAAmC,IAAL,WAA2Bz9I;AAE3C,QADA09I,GAA8B19I,GAAQw9I,CAAO,GACzC,CAAAA,EAAQ;AACZ,aAAI73B,GAAK,KAAK,OAAO,gBAAgB,MACnCoD,EAAA,MAAK8yB,IAAgB,KACrB,MAAM,KAAK,qBAAqB9mH,CAAO,IAErCA,KACFi0F,EAAA,MAAKwyB,IAAS,MAAM,QAAQ,kCAAkCzmH,CAAO,GAEhEyoH,EAAQ,MAAK;AAAA,EACtB;AAAA,EACA,MAAM,eAAex9I,IAAS,gBAAgB+0B,GAAS;AACrD,QAAI0vF,GAAW;AACf,UAAM+4B,IAAUryB,EAAA,MAAKmwB,IAAAmC,IAAL,WAA2Bz9I;AAE3C,QADA09I,GAA8B19I,GAAQw9I,CAAO,GACzC,EAACA,EAAQ,QACb;AAAA,MAAIzoH,KACFi0F,EAAA,MAAKwyB,IAAS,MAAM,QAAQ,iCAAiCzmH,CAAO;AAEtE,UAAI;AACF,cAAMzhD,IAAS,MAAMkqK,EAAQ,KAAI;AACjC,eAAIx0B,EAAA,MAAK6yB,OAAiBl2B,GAAK,KAAK,OAAO,mBAAmB,KAC5D,MAAM,KAAK,sBAAqB,GAE3BryI;AAAA,MACT,UAAC;AACC,QAAAy1I,EAAA,MAAK8yB,IAAgB;AAAA,MACvB;AAAA;AAAA,EACF;AAAA,EAKA,MAAM,sBAAsB9mH,GAAS;AACnC,QAAI,CAAA0vF,OACJ0G,EAAA,MAAKmwB,IAAAqC,IAAL,YACI,MAAK,OAAO;AAChB,aAAI5oH,KACFi0F,EAAA,MAAKwyB,IAAS,MAAM,QAAQ,2BAA2BzmH,CAAO,GAEzD,MAAMi0F,EAAA,MAAK2yB,IAAL,WAAkB,iBAAiB,MAAK;AAAA,EACvD;AAAA,EACA,MAAM,qBAAqB5mH,GAAS;AAClC,QAAI,CAAA0vF,OACJ0G,EAAA,MAAKmwB,IAAAqC,IAAL,YACI,EAAC,KAAK,OAAO;AACjB,aAAI5oH,KACFi0F,EAAA,MAAKwyB,IAAS,MAAM,QAAQ,0BAA0BzmH,CAAO,GAExD,MAAMi0F,EAAA,MAAK2yB,IAAL,WAAkB,iBAAiB,KAAI;AAAA,EACtD;AAAA,EA8BA,MAAO,wBAAyB3pI,GAAO;AACrC,QAAI;AACF,YAAM,KAAK,eAAeA,CAAK;AAAA,IACjC,QAAgB;AAAA,IAChB;AAAA,EACF;AAAA,EACA,MAAM,eAAe+iB,GAAS;;AAC5B,QAAI;AACF,YAAMyoH,KAAU/oK,IAAAu0I,EAAA,MAAK2yB,IAAL,+BAAAlnK,EAAmB;AACnC,UAAI,EAAC+oK,KAAA,QAAAA,EAAS;AACZ,cAAM,MAA6D,qBAAqB;AAE1F,aAAIzoH,KACFi0F,EAAA,MAAKwyB,IAAS,MAAM,QAAQ,yBAAyBzmH,CAAO,GAEvD,MAAMyoH,EAAQ,OAAM;AAAA,IAC7B,SAAS31K,GAAO;AACd,YAAAmhJ,EAAA,MAAKwyB,IAAS,MAAM,OAAO,uBAAuB,GAC5C3zK;AAAA,IACR;AAAA,EACF;AAAA,EACA,MAAO,4BAA6BmqC,GAAO;AACzC,QAAI;AACF,YAAM,KAAK,kBAAkBA,CAAK;AAAA,IACpC,QAAgB;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB+iB,GAAS;AAC/B,QAAI;AACF,YAAM,EAAE,eAAA6oH,MAAkB,KAAK;AAC/B,UAAI,CAACj4B,GAAKi4B,CAAa,GAAG;AACxB,cAAM/1K,IAAQ;AAAA,UAC4C;AAAA,QAClE;AACQ,cAAAA,EAAM,OAAO,sBACPA;AAAA,MACR;AAEA,UADAmwJ,GAAW,yBAAyB,GAChC,CAAChP,EAAA,MAAK8yB,KAAmB;AAC3B,cAAM+B,IAAU,MAAM,OAAO,iCAAwB,EAAE,KAAK,SAAU/3K,GAAG;AAAE,iBAAOA,EAAE;AAAA,QAAQ,CAAC;AAC7F,QAAAijJ,EAAA,MAAK+yB,IAAoB,IAAI+B,EAAQ,iBAAgB;AAAA,MACvD;AACA,YAAM70B,EAAA,MAAK8yB,IAAkB,OAAO9yB,EAAA,MAAK4Y,GAAM,GAC3C7sG,KACFi0F,EAAA,MAAKwyB,IAAS,MAAM,QAAQ,6BAA6BzmH,CAAO;AAElE,YAAM+oH,IAAen4B,GAAK,KAAK,OAAO,mBAAmB,MAAM;AAC/D,MAAIm4B,KACF,KAAK,OAAO,WAAW,IAAI;AAAA,QACzB,QAAQn4B,GAAK,KAAK,OAAO,MAAM;AAAA,QAC/B,aAAaA,GAAK,KAAK,OAAO,WAAW;AAAA,MACnD,CAAS,GAEH,KAAK,OAAO,qBAAqB,IAAIm4B,IAAe90B,EAAA,MAAK8yB,MAAoB,IAAI;AAAA,IACnF,SAASj0K,GAAO;AACd,YAAAmhJ,EAAA,MAAKwyB,IAAS,MAAM,OAAO,2BAA2B,GAChD3zK;AAAA,IACR;AAAA,EACF;AAAA,EACC,kCAAmCmqC,GAAO;AACzC,UAAM,EAAE,eAAA++H,MAAkB,KAAK;AAC/B,IAAAA,EAAc,IAAI/+H,EAAM,MAAM;AAAA,EAChC;AAAA,EACC,gCAAiCA,GAAO;AACvC,UAAM,EAAE,aAAAg/H,MAAgB,KAAK;AAC7B,IAAAA,EAAY,IAAIh/H,EAAM,MAAM,GAC5B,KAAK,SAAS,mBAAmB;AAAA,MAC/B,QAAQA,EAAM;AAAA,MACd,SAASA;AAAA,IACf,CAAK;AAAA,EACH;AAAA,EACC,gCAAiCA,GAAO;AACvC,UAAM,EAAE,kBAAA+rI,GAAkB,aAAA/M,EAAW,IAAK,KAAK;AAC/C,IAAA+M,EAAiB,IAAI/rI,EAAM,MAAM,GAC7Bg/H,EAAW,KAAM,KACnB,KAAK,SAAS,mBAAmB;AAAA,MAC/B,QAAQh/H,EAAM;AAAA,MACd,SAASA;AAAA,IACjB,CAAO;AAAA,EAEL;AAAA,EACC,mCAAoCA,GAAO;AAC1C,UAAM,EAAE,QAAAiyC,GAAQ,aAAAgxF,EAAW,IAAKjsB,EAAA,MAAK4Y;AACrC,QAAIqT,EAAY;AACd;AAEF,UAAMvgK,IAAQs9B,EAAM,QAAQ6hE,IAAQohE,EAAYvgK,CAAK;AACrD,QAAIm/F,GAAO;AACT,YAAM9kG,IAAMijC,EAAM;AAClB,MAAAg3G,EAAA,MAAKwyB,IAAS,MAAM,QAAQzsK,GAAKijC,CAAK,GACtC6hE,EAAM,WAAW;AAAA,IACnB;AAAA,EACF;AAAA,EACA,MAAO,iCAAkC7hE,GAAO;AAC9C,QAAI;AACF,YAAM,KAAK,gBAAgBA,EAAM,QAAQA,CAAK;AAAA,IAChD,SAASnqC,GAAO;AACd,MAAAsjJ,EAAA,MAAKmwB,IAAA0C,IAAL,WAAwBn2K,GAAOmqC;AAAA,IACjC;AAAA,EACF;AAAA,EACA,MAAO,gCAAiCA,GAAO;AAC7C,QAAI;AACF,YAAM,KAAK,eAAeA,EAAM,QAAQA,CAAK;AAAA,IAC/C,SAASnqC,GAAO;AACd,MAAAsjJ,EAAA,MAAKmwB,IAAA0C,IAAL,WAAwBn2K,GAAOmqC;AAAA,IACjC;AAAA,EACF;AAAA,EAuBA,MAAO,iCAAkCA,GAAO;AAC9C,UAAMjjC,IAAMijC,EAAM;AAClB,QAAI;AACF,MAAAg3G,EAAA,MAAKwyB,IAAS,MAAM,QAAQzsK,GAAKijC,CAAK,GACtC,MAAMg3G,EAAA,MAAK0yB,IAAa,KAAK1pI,EAAM,MAAM;AAAA,IAC3C,QAAgB;AACd,MAAAg3G,EAAA,MAAKwyB,IAAS,MAAM,OAAOzsK,CAAG;AAAA,IAChC;AAAA,EACF;AAAA,EACA,MAAO,mCAAoCijC,GAAO;AAChD,UAAMjjC,IAAMijC,EAAM;AAClB,QAAI;AACF,MAAAg3G,EAAA,MAAKwyB,IAAS,MAAM,QAAQzsK,GAAKijC,CAAK,GACtC,MAAMg3G,EAAA,MAAK0yB,IAAa,OAAM;AAAA,IAChC,QAAgB;AACd,MAAA1yB,EAAA,MAAKwyB,IAAS,MAAM,OAAOzsK,CAAG;AAAA,IAChC;AAAA,EACF;AAAA,EACA,MAAO,0BAA2BijC,GAAO;AACvC,QAAI;AACF,YAAM,KAAK,sBAAsBA,CAAK;AAAA,IACxC,SAASnqC,GAAO;AACd,MAAAsjJ,EAAA,MAAKmwB,IAAA2C,IAAL,WAA8Bp2K,GAAOmqC;AAAA,IACvC;AAAA,EACF;AAAA,EACA,MAAO,yBAA0BA,GAAO;AACtC,QAAI;AACF,YAAM,KAAK,qBAAqBA,CAAK;AAAA,IACvC,SAASnqC,GAAO;AACd,MAAAsjJ,EAAA,MAAKmwB,IAAA2C,IAAL,WAA8Bp2K,GAAOmqC;AAAA,IACvC;AAAA,EACF;AAAA,EAQC,0BAA2BA,GAAO;AACjC,UAAM,EAAE,MAAAukB,GAAM,UAAA4mH,GAAU,SAAAC,EAAO,IAAK,KAAK;AACzC,QAAI,GAAC7mH,EAAI,KAAM4mH,EAAQ,KAAM,CAACC,EAAO,IACrC;AAAA,MAAAp0B,EAAA,MAAKwyB,IAAS,MAAM,QAAQ,sBAAsBxpI,CAAK;AACvD,UAAI;AACF,aAAK,eAAc;AAAA,MACrB,QAAgB;AACd,QAAAg3G,EAAA,MAAKwyB,IAAS,MAAM,OAAO,oBAAoB;AAAA,MACjD;AAAA;AAAA,EACF;AAAA,EACA,MAAO,qBAAsBxpI,GAAO;AAClC,QAAI;AACF,MAAAg3G,EAAA,MAAKwyB,IAAS,UAAU,IACxBxyB,EAAA,MAAKwyB,IAAS,YAAY,IAC1B,MAAM,KAAK,KAAKxpI,CAAK;AAAA,IACvB,QAAgB;AACd,MAAAg3G,EAAA,MAAKwyB,IAAS,UAAU;AAAA,IAC1B;AAAA,EACF;AAAA,EACC,iCAAkCxpI,GAAO;AACxC,SAAK,OAAO,gBAAgB,IAAIA,EAAM,MAAM;AAAA,EAC9C;AAAA,EACA,MAAO,sBAAuBA,GAAO;AACnC,QAAI,MAAK,OAAO;AAChB,UAAI;AACF,cAAM,KAAK,MAAMA,CAAK;AAAA,MACxB,QAAgB;AAAA,MAChB;AAAA,EACF;AAAA,EACA,MAAO,qBAAsBA,GAAO;AAClC,QAAK,KAAK,OAAO;AACjB,UAAI;AACF,cAAM,KAAK,KAAKA,CAAK;AAAA,MACvB,QAAY;AAAA,MACZ;AAAA,EACF;AAAA,EACC,4BAA6BA,GAAO;AACnC,UAAM,EAAE,cAAAg0H,GAAc,oBAAAkY,EAAkB,IAAK,KAAK;AAClD,QAAIlY,EAAY,MAAOh0H,EAAM,UAAU,CAACksI,EAAkB,EAAI;AAC9D,UAAMz0K,IAAWu/I,EAAA,MAAK2yB,IAAL;AACjB,IAAKlyK,KAAA,QAAAA,EAAU,oBACfu/I,EAAA,MAAKwyB,IAAS,MAAM,QAAQ,6BAA6BxpI,CAAK,GAC9DvoC,EAAS,gBAAgBuoC,EAAM,MAAM;AAAA,EACvC;AAAA,EACC,kCAAmCA,GAAO;AACzC,QAAI;AACF,WAAK,aAAaA,EAAM,QAAQA,CAAK;AAAA,IACvC,QAAY;AAAA,IACZ;AAAA,EACF;AAAA,EACC,+BAAgCA,GAAO;;AACtC,UAAM,EAAE,WAAAmyH,GAAW,SAAAnsB,GAAS,QAAA/zD,EAAM,IAAK+kE,EAAA,MAAK4Y;AAC5C,QAAIuC,EAAU;AACZ;AAEF,IAAAnb,EAAA,MAAKwyB,IAAS,MAAM,QAAQ,gCAAgCxpI,CAAK;AACjE,UAAMt9B,IAAQs9B,EAAM;AACpB,QAAIt9B,IAAQ;AACV,MAAAyvJ,EAAU,WAAWnyH,CAAK,GACtBA,EAAM,qBAAiBv9B,IAAAujI,KAAA,gBAAAA,EAAS,oBAAT,QAAAvjI,EAAA,KAAAujI,GAA2B;AAAA,SACjD;AACL,YAAMylB,IAAU0G,EAAUzvJ,CAAK;AAC/B,MAAI+oJ,MACFA,EAAQ,WAAW,IACfzrH,EAAM,qBACRp3B,IAAAo9H,KAAA,gBAAAA,EAAS,oBAAT,QAAAp9H,EAAA,KAAAo9H,GAA2B;AAAA,QACzB,IAAIylB,EAAQ;AAAA,QACZ,OAAOA,EAAQ;AAAA,QACf,QAAQA,EAAQ;AAAA,QAChB,SAASA,EAAQ;AAAA,MAC7B;AAAA,IAGI;AAAA,EACF;AAAA,EACC,+BAAgCzrH,GAAO;AACtC,UAAMjjC,IAAMijC,EAAM;AAClB,IAAAg3G,EAAA,MAAKwyB,IAAS,MAAM,QAAQzsK,GAAKijC,CAAK,GACtC,KAAK,SAAS,MAAMA,CAAK;AAAA,EAC3B;AAAA,EACC,gCAAiCA,GAAO;AACvC,UAAMjjC,IAAMijC,EAAM;AAClB,IAAAg3G,EAAA,MAAKwyB,IAAS,MAAM,QAAQzsK,GAAKijC,CAAK,GACtC,KAAK,SAAS,OAAOA,CAAK;AAAA,EAC5B;AAAA,EACC,qBAAsBA,GAAO;AAC5B,UAAM,EAAE,SAAAorI,GAAS,OAAA5f,GAAO,MAAAjnG,GAAM,aAAA+mH,GAAa,oBAAAC,EAAkB,IAAK,KAAK,QAAQY,IAAWnsI,EAAM;AAChG,IAAIwrH,EAAK,MAAIxU,EAAA,MAAKwyB,IAAS,YAAY;AACvC,UAAMzsK,IAAMijC,EAAM;AAClB,IAAAg3G,EAAA,MAAKwyB,IAAS,UAAU,IACxBxyB,EAAA,MAAKwyB,IAAS,MAAM,OAAOzsK,CAAG;AAC9B,UAAMqvK,IAAcniB,GAAUkiB,GAAU,KAAK,MAAM;AACnD,IAAI,CAAC,OAAO,SAASC,CAAW,KAAK,CAAChB,EAAO,MAC7Cp0B,EAAA,MAAKwyB,IAAS,MAAM,QAAQzsK,GAAKijC,CAAK,GACtCg3G,EAAA,MAAK2yB,IAAL,WAAkB,eAAeyC,CAAW,GACxC7nH,EAAI,KAAMvkB,EAAM,mBAAmB,KAAK,IAAIsrI,EAAW,IAAKc,CAAW,KAAK,KAC9Eb,EAAmB,IAAI,EAAI;AAAA,EAE/B;AAAA,EACC,wBAAyBvrI,GAAO;AAC/B,UAAMjjC,IAAMijC,EAAM;AAClB,IAAAg3G,EAAA,MAAKwyB,IAAS,MAAM,QAAQzsK,GAAKijC,CAAK,GACtC,KAAK,OAAO,QAAQ,IAAI,EAAI,GAC5Bg3G,EAAA,MAAKwyB,IAAS,UAAU;AAAA,EAC1B;AAAA,EACC,sBAAuBxpI,GAAO;AAC7B,QAAI,KAAK,OAAO,UAAW;AAC3B,UAAMjjC,IAAMijC,EAAM;AAClB,IAAAg3G,EAAA,MAAKwyB,IAAS,MAAM,QAAQzsK,GAAKijC,CAAK,GACtCg3G,EAAA,MAAKuyB,IAAU,OAAO,KAAK,YAAY,UAAU,CAAC;AAAA,EACpD;AAAA,EACC,6BAA8BvpI,GAAO;AACpC,QAAI,KAAK,OAAO,gBAAiB;AACjC,UAAMjjC,IAAMijC,EAAM;AAClB,IAAAg3G,EAAA,MAAKwyB,IAAS,MAAM,QAAQzsK,GAAKijC,CAAK,GACtCg3G,EAAA,MAAKuyB,IAAU,OAAO,KAAK,YAAY,iBAAiB,CAAC;AAAA,EAC3D;AAAA,EACC,kCAAmCvpI,GAAO;AACzC,UAAM,EAAE,OAAAt9B,GAAO,MAAAgkD,EAAI,IAAK1mB,EAAM,QAAQ6hE,IAAQm1C,EAAA,MAAK4Y,IAAO,WAAWltJ,CAAK;AAC1E,QAAIm/F,GAAO;AACT,YAAM9kG,IAAMijC,EAAM;AAClB,MAAAg3G,EAAA,MAAKwyB,IAAS,MAAM,QAAQzsK,GAAKijC,CAAK,GACtC6hE,EAAM,QAAQn7C,GAAM1mB,CAAK;AAAA,IAC3B;AAAA,EACF;AAAA,EACC,qBAAsBA,GAAO;AAC5B,QAAI,KAAK,OAAO,QAAS;AACzB,UAAMjjC,IAAMijC,EAAM;AAClB,IAAAg3G,EAAA,MAAKwyB,IAAS,MAAM,QAAQzsK,GAAKijC,CAAK,GACtCg3G,EAAA,MAAK2yB,IAAL,WAAkB,SAAS,EAAI;AAAA,EACjC;AAAA,EACC,uBAAwB3pI,GAAO;AAC9B,UAAM,EAAE,OAAAurH,GAAO,QAAAP,EAAM,IAAK,KAAK;AAC/B,QAAI,CAACO,EAAK,EAAI;AACd,UAAMxuJ,IAAMijC,EAAM;AAClB,IAAAg3G,EAAA,MAAKwyB,IAAS,MAAM,QAAQzsK,GAAKijC,CAAK,GACtCg3G,EAAA,MAAK4Y,IAAO,YAAY,SAAS,EAAK,GAClC5E,EAAM,MAAO,MACfhU,EAAA,MAAKwyB,IAAS,MAAM,QAAQzsK,GAAKijC,CAAK,GACtCg3G,EAAA,MAAK2yB,IAAL,WAAkB,UAAU,IAAI;AAAA,EAEpC;AAAA,EACC,8BAA+B3pI,GAAO;AACrC,UAAM,EAAE,OAAAurH,GAAO,QAAAP,EAAM,IAAK,KAAK,QACzBqhB,IAAYrsI,EAAM;AACxB,QAAIgrH,EAAM,MAAOqhB,EAAW;AAC5B,UAAMtvK,IAAMijC,EAAM;AAClB,IAAAg3G,EAAA,MAAKwyB,IAAS,MAAM,QAAQzsK,GAAKijC,CAAK,GACtCg3G,EAAA,MAAK2yB,IAAL,WAAkB,UAAU0C,CAAS,GACjCA,IAAY,KAAK9gB,QACnBvU,EAAA,MAAKwyB,IAAS,MAAM,QAAQzsK,GAAKijC,CAAK,GACtCg3G,EAAA,MAAK2yB,IAAL,WAAkB,SAAS,EAAK;AAAA,EAEpC;AAIF;AAjjBEJ,KAAA,eACAC,KAAA,eACA5Z,KAAA,eAEA6Z,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eARFN,KAAA,eA+CEY,KAAuB,WAAG;AACxB,QAAM,EAAE,MAAAhD,EAAI,IAAK,KAAK,QAAQ,EAAE,SAAAoF,EAAO,IAAK,KAAK;AACjD,MAAIpF,EAAI,MAAO,UAAUoF,IAAW;AACpC,QAAM7kB,IAAM,KAAK,OAAO,sBAAsB,CAACznH,MAAU;AACvD,IAAAm5G,EAAA,MAAKmwB,IAAAuB,IAAL,WAA6B7qI,IAC7BynH,EAAG;AAAA,EACL,CAAC;AACH,GACA0iB,KAAc,WAAG;AACf,QAAM1yK,IAAWu/I,EAAA,MAAK2yB,IAAL,YAAmBnC,IAAU,KAAK,OAAO,QAAO;AACjE,SAAI/vK,KAAY+vK,KACdxwB,EAAA,MAAK4yB,IAAe,MAAK,GAEpB,MAAM;AACX,IAAA5yB,EAAA,MAAK4yB,IAAe,KAAI;AAAA,EAC1B;AACF,GACAK,KAAc,SAACjqI,GAAO;AAEpB,EADAA,EAAM,gBAAe,GACjB,CAAAA,EAAM,oBACL,KAAKA,EAAM,IAAI,MAChB2zG,GAAKqD,EAAA,MAAK2yB,GAAU,IACtB,KAAK3pI,EAAM,IAAI,EAAEA,CAAK,IAEtBg3G,EAAA,MAAK4yB,IAAe,QAAQ5pI,EAAM,MAAM,MAAM;AAC5C,IAAI2zG,GAAKqD,EAAA,MAAK2yB,GAAU,KAAG,KAAK3pI,EAAM,IAAI,EAAEA,CAAK;AAAA,EACnD,CAAC;AAEL,GAuBA6qI,KAAuB,SAAC9nH,GAAS;AAC/B,QAAM,EAAE,MAAAmkH,EAAI,IAAK,KAAK,QAAQ,EAAE,SAAAoF,EAAO,IAAK,KAAK;AACjD,MAAIpF,EAAI,MAAO,UAAU,CAACoF,EAAO,GAAI;AACnC,UAAMtsI,IAAQ,KAAK,YAAY,uBAAuB,EAAE,SAAA+iB,EAAO,CAAE;AACjE,gBAAK,cAAc/iB,CAAK,GACxBg3G,EAAA,MAAK4yB,IAAe,QAAQ,sBAAsB,YAAY;AAC5D,UAAI;AACF,cAAM,KAAK,KAAK5pI,CAAK;AAAA,MACvB,QAAgB;AAAA,MAChB;AAAA,IACF,CAAC,GACM;AAAA,EACT;AACA,SAAO;AACT,GAwCA6pI,KAAA,eAiCA4B,KAAqB,SAACz9I,GAAQ;AAC5B,QAAMv2B,IAAWk8I,GAAKqD,EAAA,MAAK2yB,GAAU;AACrC,SAAO37I,MAAW,kBAAkBgpH,EAAA,MAAKyyB,IAAY,aAAaz7I,MAAW,UAAUgpH,EAAA,MAAKyyB,MAAchyK,KAAA,gBAAAA,EAAU;AACtH,GAmBAk0K,KAAuB,WAAG;AACxB,MAAI,MAAK,OAAO;AAChB,UAAM;AAAA,MACJ;AAAA,IACN;AACE,GACAvB,KAAyB,WAAG;AAC1B,OAAK,SAAS,eAAe,KAAK,OAAO,cAAa;AACxD,GACAC,KAAsB,WAAG;;AACvB,QAAM,EAAE,iBAAAa,EAAe,IAAK,KAAK,QAAQqB,IAAY,CAAC,GAAC3jK,KAAAnG,IAAAu0I,EAAA,MAAK2yB,IAAL,+BAAAlnK,EAAmB,cAAnB,QAAAmG,EAA8B;AACrF,EAAAsiK,EAAgB,IAAIqB,CAAS;AAC/B,GACAjC,KAAoB,WAAG;;AACrB,QAAM,EAAE,YAAAkC,EAAU,IAAK,KAAK,QAAQD,IAAY,CAAC,GAAC3jK,KAAAnG,IAAAu0I,EAAA,MAAK2yB,IAAL,+BAAAlnK,EAAmB,YAAnB,QAAAmG,EAA4B;AAC9E,EAAA4jK,EAAW,IAAID,CAAS;AAC1B,GACAhC,KAAuB,WAAG;AACxB,QAAM,EAAE,eAAAqB,GAAe,QAAA7yK,EAAM,IAAK,KAAK,QAAQwzK,IAAYnpB,MAAa,CAACF,MAAU0C,GAAiB7sJ,EAAM,CAAE;AAC5G,EAAA6yK,EAAc,IAAIW,CAAS;AAC7B,GACA/B,KAAuB,WAAG;;AACxB,QAAM,EAAE,eAAAiC,EAAa,IAAK,KAAK,QAAQF,IAAYv1B,EAAA,MAAKyyB,IAAY,aAAa,CAAC,GAAC7gK,KAAAnG,IAAAu0I,EAAA,MAAK2yB,IAAL,+BAAAlnK,EAAmB,eAAnB,QAAAmG,EAA+B;AAClH,EAAA6jK,EAAc,IAAIF,CAAS;AAC7B,GACA9B,KAAgB,WAAG;;AACjB,QAAM,EAAE,qBAAAiC,EAAmB,IAAK,KAAK,QAAQH,IAAY,CAAC,GAAC3jK,KAAAnG,IAAAu0I,EAAA,MAAK2yB,IAAL,+BAAAlnK,EAAmB,qBAAnB,QAAAmG,EAAqC;AAChG,EAAA8jK,EAAoB,IAAIH,CAAS;AACnC,GA4BAzC,KAAA,eAiFMC,KAAmB,eAAC/pI,GAAO;AAC/B,QAAM6qH,IAAWlX,GAAK,KAAK,OAAO,qBAAqB,GAAGkkB,IAAe73H,EAAM;AAC/E,MAAI,EAAAme,GAAY0sG,CAAQ,KAAKA,MAAa,UAAU,CAAC7T,EAAA,MAAK0yB,IAAa;AACvE,QAAI7R,GAAc;AAChB,UAAI7gB,EAAA,MAAK0yB,IAAa,OAAQ;AAC9B,WAAK,SAAS,kCAAkC;AAAA,QAC9C,QAAQ7e;AAAA,QACR,SAAS7qH;AAAA,MACjB,CAAO;AAAA,IACH,MAAO,CAAIg3G,EAAA,MAAK0yB,IAAa,UAC3B,KAAK,SAAS,oCAAoC;AAAA,MAChD,SAAS1pI;AAAA,IACjB,CAAO;AAEL,GACAgsI,KAAkB,SAACn2K,GAAOk/E,GAAS;AACjC,EAAAiiE,EAAA,MAAKuyB,IAAU;AAAA,IACb,KAAK,YAAY,oBAAoB;AAAA,MACnC,QAAQ5F,GAAc9tK,CAAK;AAAA,IACnC,CAAO;AAAA,EACP;AACE,GAiCAo2K,KAAwB,SAACp2K,GAAOk/E,GAAS;AACvC,EAAAiiE,EAAA,MAAKuyB,IAAU;AAAA,IACb,KAAK,YAAY,4BAA4B;AAAA,MAC3C,QAAQ5F,GAAc9tK,CAAK;AAAA,IACnC,CAAO;AAAA,EACP;AACE,GA2JA82K,KAAS,SAACxtE,GAAOtpG,GAAOk/E,GAAS;AAEjC;AAEF,SAASg2F,GAA2BtzK,GAAU+vK,GAAS;AACrD,MAAI,EAAA/vK,KAAY+vK;AAChB,UAAM;AAAA,MACJ;AAAA,IACJ;AACA;AACA,SAASkE,GAA8B19I,GAAQ48I,GAAY;AACzD,MAAI,EAAAA,KAAA,QAAAA,EAAY;AAChB,UAAM;AAAA,MACJ;AAAA,IACJ;AACA;AACA,SAASI,GAAoC4B,GAAa;AACxD,MAAI,GAACzD,QAA0B,CAACyD;AAChC,UAAM;AAAA,MACJ;AAAA,IACJ;AACA;AACA,MAAMC,GAAoB;AAAA,EAA1B;AACE,IAAAlzJ,EAAA,iBAAU;AACV,IAAAA,EAAA,iBAAU;AACV,IAAAA,EAAA,mBAAY;AACZ,IAAAA,EAAA,eAAQ,IAAI+uJ,GAAK;AAAA;AACnB;AAEA,MAAMoE,KAAgC,oBAAI,IAAI;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;AAED,MAAMC,WAA0Bva,GAAsB;AAAA,EASpD,YAAYz9E,GAASy6E,GAAO;AAC1B,UAAK;AAVT,IAAA5Y,EAAA,MAAAo2B;AACE,IAAAp2B,EAAA,MAAA4yB;AACA,IAAA5yB,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAAq2B,IAAiC,oBAAI,IAAG;AACxC,IAAAr2B,EAAA,MAAAs2B,IAAa;AACb,IAAAt2B,EAAA,MAAAu2B,IAAmB,CAAA;AACnB,IAAAv2B,EAAA,MAAAw2B,IAAkB,CAAC,IAAI,EAAE;AACzB,IAAAx2B,EAAA,MAAAy2B,IAAiB;AACjB,IAAAz2B,EAAA,MAAA02B;AAkCA,IAAA12B,EAAA,MAAA22B,IAAyB;AAqGzB,IAAA32B,EAAA,MAAA42B,IAA2B;AAkc3B,IAAA7zJ,EAAA,MAAC,WAAailI;AAAA,MACZ,CAAC5+G,MAAU;AACT,cAAM,EAAE,SAAAytI,GAAS,iBAAAC,GAAiB,QAAAhX,EAAM,IAAK,KAAK;AAClD,QAAA+W,EAAQ,IAAI,EAAI,GAChBC,EAAgB,IAAI1tI,EAAM,MAAM,GAChCm5G,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB,yBAAyB3tI,IAC1C02H,EAAM,MACR3f,EAAA,MAAKu2B,IAAkBttI,IACvBg3G,EAAA,MAAK42B,IAAL,aAEF72B,EAAA,MAAKq2B,IAAkB,CAAC,IAAI,EAAE;AAAA,MAChC;AAAA,MACA;AAAA,MACA,EAAE,SAAS,GAAI;AAAA,IACnB;AAoCE,IAAAx2B,EAAA,MAAAg3B,IAAevuB,GAAiB,MAAM;AACpC,UAAI,CAACrI,EAAA,MAAKs2B,IAAiB;AAC3B,MAAAv2B,EAAA,MAAKs2B,IAAiB;AACtB,YAAM,EAAE,SAAAQ,GAAS,SAAAC,EAAO,IAAK,KAAK;AAClC,MAAAD,EAAQ,IAAI,EAAI,GAChBC,EAAQ,IAAI,EAAK;AACjB,YAAM9tI,IAAQ,KAAK,YAAY,WAAW,EAAE,SAASg3G,EAAA,MAAKs2B,KAAiB;AAC3E,MAAAt2B,EAAA,MAAKi2B,IAAe,IAAI,WAAWjtI,CAAK,GACxC,KAAK,SAASA,CAAK,GACnB+2G,EAAA,MAAKu2B,IAAkB,SACvBv2B,EAAA,MAAKs2B,IAAiB;AAAA,IACxB,GAAG,GAAG;AAnoBJ,IAAAt2B,EAAA,MAAKyyB,IAAWz0F,IAChBgiE,EAAA,MAAK6Y,IAASJ;AAAA,EAChB;AAAA,EACA,SAAS7lI,GAAI;AACX,IAAAA,EAAG,aAAa,aAAa,MAAM,GACnC,IAAIgtH,GAAiB,IAAI,EAAE,IAAI,qBAAqB,KAAK,mBAAmB,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,oBAAoB,KAAK,kBAAkB,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,sBAAsB,KAAK,oBAAoB,EAAE,KAAK,IAAI,CAAC;AAAA,EACxN;AAAA,EACA,UAAUhtH,GAAI;AACZ,IAAAwM,EAAOgjH,EAAA,MAAK6zB,IAAAe,IAAmB,KAAK,IAAI,CAAC,GACzC50B,EAAA,MAAK6zB,IAAAgB,IAAL,YACA70B,EAAA,MAAK6zB,IAAAiB,IAAL,YACA90B,EAAA,MAAK6zB,IAAAkB,IAAL,YACA/0B,EAAA,MAAK6zB,IAAAmB,IAAL,YACAj6B,GAAUiF,EAAA,MAAK6zB,IAAAoB,IAA2B,KAAK,IAAI,CAAC;AAAA,EACtD;AAAA,EACA,YAAY;AACV,UAAM,EAAE,aAAAnL,GAAa,WAAA9Q,GAAW,YAAAnC,EAAU,IAAKhZ,EAAA,MAAK4Y;AACpD,IAAAqT,EAAY1W,GAAW,KAAK,EAAC,GAC7B4F,EAAU5F,GAAW,KAAK,EAAC,GAC3ByD,EAAWzD,GAAW,KAAK,EAAC,GAC5BpT,EAAA,MAAK6zB,IAAAqB,IAAL;AAAA,EACF;AAAA,EACA,OAAOruI,GAAO;AACZ,QAAI,CAAC,KAAK,MAAO;AACjB,UAAMjpC,IAAOipC,EAAM;AACnB,IAAA4zG,GAAQ,MAAA;;AAAM,cAAAnxI,IAAA,KAAKu9B,EAAM,UAAX,gBAAAv9B,EAAA,WAAmBu9B;AAAA,KAAM,GAClCyyG,OACCq6B,GAAc,IAAI/1K,CAAI,KAAGigJ,EAAA,MAAKi2B,IAAe,IAAIl2K,GAAMipC,CAAK,GAChE,KAAK,SAASA,CAAK;AAAA,EAEvB;AAAA,EA4IC,kBAAmBA,GAAO;;AACzB,UAAMsuI,IAAet3B,EAAA,MAAK4Y,IAAO,UAAS,GAAI2e,IAAcvuI,EAAM;AAClE,KAAIsuI,KAAA,gBAAAA,EAAc,WAASC,KAAA,gBAAAA,EAAa,WACxC9rK,IAAA6rK,KAAA,gBAAAA,EAAc,YAAd,QAAA7rK,EAAA,KAAA6rK,KACA1lK,IAAA0lK,KAAA,gBAAAA,EAAc,UAAd,QAAA1lK,EAAqB,WACrBouI,EAAA,MAAK4Y,IAAO,UAAU,IAAI5vH,EAAM,MAAM,GAClCsuI,KAAgBtuI,EAAM,WAAW,QACnCm5G,EAAA,MAAK6zB,IAAAwB,IAAL,WAAsBxuI;AAAA,EAE1B;AAAA,EACC,yBAA0BA,GAAO;AAAA,EAClC;AAAA,EACC,YAAaA,GAAO;AACnB,SAAK,OAAO,cAAc,IAAI,IAAI;AAAA,EACpC;AAAA,EACC,iBAAkBA,GAAO;AACxB,SAAK,OAAO,cAAc,IAAIA,EAAM,MAAM,GAC1Cm5G,EAAA,MAAK6zB,IAAAyB,IAAL;AAAA,EACF;AAAA,EACC,WAAYzuI,GAAO;AAClB,SAAK,OAAO,QAAQ,IAAI,EAAI,GAC5Bg3G,EAAA,MAAKi2B,IAAe,IAAI,YAAYjtI,CAAK,GACzCg3G,EAAA,MAAK4Y,IAAO,WAAW5I,GAAgB,OAAO,EAAC,GAC/C7N,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB,uBAAuB3tI;AAAA,EAC9C;AAAA,EACC,kBAAmBA,GAAO;AACzB,SAAK,OAAO,cAAc,IAAI,EAAI,GAClCg3G,EAAA,MAAKi2B,IAAe,IAAI,mBAAmBjtI,CAAK,GAChDm5G,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB,8BAA8B3tI;AAAA,EACrD;AAAA,EACC,oBAAqBA,GAAO;AAC3B,UAAM0uI,IAAoB13B,EAAA,MAAKi2B,IAAe,IAAI,eAAe;AACjE,IAAIyB,KAAmB1uI,EAAM,SAAS,IAAI0uI,CAAiB;AAC3D,UAAM3Y,IAAW,KAAK,OAAO,SAAQ;AACrC,SAAK,OAAO,UAAU,IAAI/1H,EAAM,MAAM;AACtC,UAAM2uI,IAAmB,KAAK,OAAO,iBAAgB,GAAIC,IAAkBD,MAAqB,YAAY3uI,EAAM,SAAS2uI;AAC3H,IAAI5Y,MAAa6Y,MACXn8B,KACF,KAAK,OAAO,iBAAiB,IAAIm8B,CAAe,IAEhD,WAAW,MAAM;AACf,4BAAsB,MAAM;AAC1B,QAAK,KAAK,UACV,KAAK,OAAO,iBAAiB,IAAI5uI,EAAM,MAAM,GAC7C,KAAK,SAAS,oBAAoB;AAAA,UAChC,QAAQ4uI;AAAA,UACR,SAAS5uI;AAAA,QACvB,CAAa;AAAA,MACH,CAAC;AAAA,IACH,GAAG,CAAC;AAAA,EAGV;AAAA,EACC,qBAAsBA,GAAO;AAC5B,UAAM0uI,IAAoB13B,EAAA,MAAKi2B,IAAe,IAAI,eAAe;AACjE,IAAIyB,KAAmB1uI,EAAM,SAAS,IAAI0uI,CAAiB;AAC3D,UAAM,EAAE,YAAAG,GAAY,oBAAAC,EAAkB,IAAK,KAAK;AAChD,IAAAA,EAAmB,IAAI9uI,EAAM,MAAM,GACnCA,EAAM,SAAS6uI,EAAU;AAAA,EAC3B;AAAA,EACC,cAAe7uI,GAAO;;AACrB,UAAM,EAAE,SAAAgmG,EAAO,IAAKgR,EAAA,MAAK4Y,KAAQ,EAAE,SAAA4X,EAAO,IAAK,KAAK;AACpD,SAAK,OAAO,aAAa,IAAIxnI,EAAM,MAAM,GACzCm5G,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB,6BAA6B3tI,IAC9CwnI,EAAO,OACT/kK,IAAAujI,KAAA,gBAAAA,EAAS,oBAAT,QAAAvjI,EAAA,KAAAujI,GAA2BhmG,EAAM;AAAA,EAErC;AAAA,EACC,yBAA0BA,GAAO;AAChC,UAAM,EAAE,qBAAA+uI,GAAqB,oBAAAC,MAAuB,KAAK,QAAQ,EAAE,MAAAj4K,GAAM,OAAA0zC,EAAK,IAAKzK,EAAM,QAAQivI,IAAcxkI,MAAU;AACzH,IAAAukI,EAAmB,IAAIj4K,CAAI,GAC3Bg4K,EAAoB,IAAItkI,CAAK;AAC7B,UAAM1tC,IAAMhG,MAAS,YAAY,0BAA0B;AAC3D,QAAIk4K;AACF,MAAA91B,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB5wK,GAAKijC;AAAA,SACrB;AACL,YAAMkvI,IAAel4B,EAAA,MAAKwyB,IAAS,MAAM,KAAKzsK,CAAG;AACjD,MAAImyK,MACFlvI,EAAM,UAAUkvI,GAChBlvI,EAAM,SAAS,IAAIkvI,CAAY;AAAA,IAEnC;AAAA,EACF;AAAA,EACC,iBAAkBlvI,GAAO;AACxB,UAAMmvI,IAAc,KAAK,OAAO,QAAO,GAAIC,IAAapvI,EAAM;AAC9D,SAAK,OAAO,QAAQ,IAAIovI,CAAU,GAClCj2B,EAAA,MAAK6zB,IAAAqC,IAAL,WAA8BF,GAAaC,GAAYpvI;AAAA,EACzD;AAAA,EAoCC,gBAAiBA,GAAO;;AACvB,IAAAA,EAAM,oBAAkBv9B,IAAAu9B,EAAM,gBAAN,gBAAAv9B,EAAmB,UAAS;AACpD,UAAM1J,IAASinC,EAAM;AACrB,IAAAm5G,EAAA,MAAK6zB,IAAAwB,IAAL,WAAsBxuI,GAAOA,EAAM,kBACnCg3G,EAAA,MAAKi2B,IAAe,IAAIjtI,EAAM,MAAMA,CAAK,GACzC,KAAK,OAAO,OAAO,IAAIjnC,CAAM,IAC7B6P,IAAA,KAAK,OAAL,QAAAA,EAAS,aAAa,aAAa;AAAA,EACrC;AAAA,EAeC,MAASo3B,GAAO;AACf,UAAM0uI,IAAoB13B,EAAA,MAAKi2B,IAAe,IAAI,eAAe;AACjE,IAAIyB,KAAmB1uI,EAAM,SAAS,IAAI0uI,CAAiB;AAC3D,UAAMY,IAAet4B,EAAA,MAAKi2B,IAAe,IAAI,UAAU;AACvD,IAAIqC,KAAgB,CAACtvI,EAAM,SAAS,QAAQ,UAAU,KACpDA,EAAM,SAAS,IAAIsvI,CAAY;AAAA,EAEnC;AAAA,EACC,aAActvI,GAAO;AACpB,UAAM0uI,IAAoB13B,EAAA,MAAKi2B,IAAe,IAAI,eAAe;AACjE,IAAIyB,KAAmB1uI,EAAM,SAAS,IAAI0uI,CAAiB;AAAA,EAC7D;AAAA,EACC,MAAS1uI,GAAO;AACf,SAAK,OAAO,MAAM,IAAIA,EAAM,MAAM;AAClC,UAAMuvI,IAAav4B,EAAA,MAAKi2B,IAAe,IAAI,OAAO;AAClD,IAAIsC,KAAYvvI,EAAM,SAAS,IAAIuvI,CAAU;AAAA,EAC/C;AAAA,EACC,kBAAmBvvI,GAAO;AACzB,UAAMwvI,IAAiBx4B,EAAA,MAAKi2B,IAAe,IAAI,YAAY;AAC3D,IAAIuC,KAAgBxvI,EAAM,SAAS,IAAIwvI,CAAc;AAAA,EACvD;AAAA,EACC,cAAexvI,GAAO;AACrB,UAAMwvI,IAAiBx4B,EAAA,MAAKi2B,IAAe,IAAI,YAAY;AAC3D,IAAIuC,KAAgBxvI,EAAM,SAAS,IAAIwvI,CAAc;AAAA,EACvD;AAAA,EACC,WAAYxvI,GAAO;;AAClB,UAAMyvI,IAAiBz4B,EAAA,MAAKi2B,IAAe,IAAI,iBAAiB;AAChE,IAAIwC,KAAgBzvI,EAAM,SAAS,IAAIyvI,CAAc,GACrDt2B,EAAA,MAAK6zB,IAAA0C,IAAL,WAAsB1vI,EAAM,UAC5Bv9B,IAAA,KAAK,OAAL,QAAAA,EAAS,aAAa,aAAa;AAAA,EACrC;AAAA,EACC,mBAAoBu9B,GAAO;AAC1B,IAAAm5G,EAAA,MAAK6zB,IAAA0C,IAAL,WAAsB1vI,EAAM;AAC5B,UAAMwnI,IAAUxwB,EAAA,MAAKi2B,IAAe,IAAI,UAAU;AAClD,IAAIzF,KAASxnI,EAAM,SAAS,IAAIwnI,CAAO;AAAA,EACzC;AAAA,EASC,kBAAmBxnI,GAAO;AACzB,UAAM,EAAE,MAAAukB,GAAM,mBAAAorH,GAAmB,kBAAA5D,GAAkB,aAAA/M,GAAa,OAAAxT,EAAK,IAAK,KAAK,QAAQthG,IAAOlqB,EAAM;AACpG,QAAI,CAACukB,EAAI,GAAI;AACX,YAAMumG,IAAY,OAAO,MAAM5gG,CAAI,IAAW,IAAPA;AACvC,MAAAylH,EAAkB,IAAI7kB,CAAQ,GAC1BU,EAAK,KAAIrS,EAAA,MAAK6zB,IAAA4C,IAAL,WAA2B5vI;AAAA,IAC1C;AACA,KAAI+rI,EAAgB,IAAK,KAAK/M,EAAW,IAAK,MAC5Ch/H,EAAM,yBAAwB;AAAA,EAElC;AAAA,EACC,SAAYA,GAAO;AAClB,UAAM,EAAE,UAAA0nI,GAAU,UAAAD,MAAa,KAAK,QAAQ,EAAE,UAAUoI,GAAa,UAAUC,EAAW,IAAK9vI,EAAM,QAAQ+vI,IAAiBprB,GAAiBkrB,CAAW,GAAGG,IAA2BH,EAAY,WAAWnI,EAAQ,EAAG,QAAQuI,IAAwBF,MAAmBprB,GAAiB+iB,EAAQ,CAAE,GAAGwI,IAAiBvrB,GAAiBmrB,CAAW,GAAGK,IAA2BL,EAAY,WAAWrI,IAAW,QAAQ2I,IAAwBF,MAAmBvrB,GAAiB8iB,GAAU;AACte,KAAIuI,KAA4BC,MAC9BvI,EAAS,IAAImI,CAAW,IAEtBM,KAA4BC,MAC9B3I,EAAS,IAAIqI,CAAW;AAAA,EAE5B;AAAA,EACC,KAAQ9vI,GAAO;AACd,UAAM;AAAA,MACJ,QAAA02H;AAAA,MACA,eAAAM;AAAA,MACA,OAAAxL;AAAA,MACA,aAAAgd;AAAA,MACA,aAAAZ;AAAA,MACA,SAAAnR;AAAA,MACA,OAAAlL;AAAA,MACA,UAAAwK;AAAA,MACA,MAAAxxG;AAAA,MACA,oBAAAgnH;AAAA,IACN,IAAQ,KAAK;AAET,QADApyB,EAAA,MAAK6zB,IAAAqD,IAAL,YACI,CAAC3Z,EAAM,GAAI;AACb,MAAA12H,EAAM,yBAAwB;AAC9B;AAAA,IACF;AACA,IAAAA,EAAM,WAAWwoI,EAAW;AAC5B,UAAM8H,IAAet5B,EAAA,MAAKi2B,IAAe,IAAI,SAAS;AACtD,IAAIqD,KAActwI,EAAM,SAAS,IAAIswI,CAAY,GACjDn3B,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB,sBAAsB3tI,IAC3Cg3G,EAAA,MAAKi2B,IAAe,IAAI,QAAQjtI,CAAK,GACrC02H,EAAO,IAAI,EAAK,GAChBM,EAAc,IAAI,IAAI,GAClBh3H,EAAM,aACR,KAAK;AAAA,MACH,KAAK,YAAY,aAAa;AAAA,QAC5B,QAAQ,EAAE,OAAOurH,IAAO;AAAA,QACxB,SAASvrH;AAAA,MACnB,CAAS;AAAA,IACT,GACMwoI,EAAY,IAAI,EAAK,KAEnBhd,EAAK,KAAMxU,EAAA,MAAKwyB,IAAS,eAC3BxyB,EAAA,MAAKwyB,IAAS,YAAY,IAC1Bhe,EAAM,IAAI,EAAK,GACf,KAAK,OAAO,KAAK,YAAY,UAAU,EAAE,SAASxrH,EAAK,CAAE,CAAC,IAExD,CAAC4nI,EAAW,KAAM7R,EAAQ,MAAO,WAAWU,EAAO,MAAO,YAC5Dzf,EAAA,MAAK4Y,IAAO,OAAO,gBAAgB,gBAAgB5vH,CAAK,GAEtDukB,EAAI,KAAM,CAACgnH,OACbv0B,EAAA,MAAK4Y,IAAO,OAAO,eAAe5vH,CAAK;AAAA,EAE3C;AAAA,EAcC,YAAaA,GAAO;AACnB,UAAM,EAAE,OAAAurH,GAAO,aAAAid,EAAW,IAAK,KAAK,QAC9B+H,IAAYv5B,EAAA,MAAKi2B,IAAe,IAAI,MAAM;AAChD,IAAIsD,KAAWvwI,EAAM,SAAS,IAAIuwI,CAAS,GAC3Cp3B,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB,sBAAsB3tI;AAC3C,UAAM,EAAE,QAAA02H,GAAQ,SAAAoX,EAAO,IAAK,KAAK;AACjC,IAAApX,EAAO,IAAI,EAAI,GACfoX,EAAQ,IAAI,EAAK,GACjB30B,EAAA,MAAK6zB,IAAAyB,IAAL,YACAz3B,EAAA,MAAKi2B,IAAe,IAAI,aAAajtI,CAAK,GACtCA,EAAM,aACR,KAAK;AAAA,MACH,KAAK,YAAY,kBAAkB;AAAA,QACjC,QAAQ;AAAA,UACN,OAAOurH,EAAK;AAAA,UACZ,OAAOvrH,EAAM;AAAA,QACzB;AAAA,QACU,SAASA;AAAA,MACnB,CAAS;AAAA,IACT,GACMwoI,EAAY,IAAI,EAAK;AAAA,EAEzB;AAAA,EACC,QAAWxoI,GAAO;AACjB,UAAMuwI,IAAYv5B,EAAA,MAAKi2B,IAAe,IAAI,MAAM,GAAGuD,IAAcx5B,EAAA,MAAKi2B,IAAe,IAAI,QAAQ;AACjG,IAAIsD,IAAWvwI,EAAM,SAAS,IAAIuwI,CAAS,IAClCC,KAAaxwI,EAAM,SAAS,IAAIwwI,CAAW,GACpD,WAAW,MAAMr3B,EAAA,MAAK6zB,IAAAyB,IAAL,YAAuB,CAAC;AACzC,UAAM;AAAA,MACJ,QAAA/X;AAAA,MACA,SAAAoX;AAAA,MACA,MAAAvpH;AAAA,MACA,kBAAA8mH;AAAA,MACA,aAAAC;AAAA,MACA,SAAA9U;AAAA,MACA,aAAAlO;AAAA,MACA,SAAAmlB;AAAA,MACA,OAAAjiB;AAAA,IACN,IAAQ,KAAK;AAKT,QAJAkL,EAAO,IAAI,EAAK,GAChBoX,EAAQ,IAAI,EAAI,GAChBL,EAAQ,IAAI,EAAK,GACjBjiB,EAAM,IAAI,EAAK,GACXxU,EAAA,MAAKwyB,IAAS,SAAS;AACzB,MAAAxyB,EAAA,MAAKwyB,IAAS,UAAU;AACxB;AAAA,IACF;AACA,QAAIjlH,EAAI,KAAM,CAACiyG,EAAO,KAAMlO,EAAW,MAAO,GAAG;AAC/C,YAAMxkJ,IAAMunK,OAAsBC,EAAW,IAAK;AAClD,MAAI,OAAO,SAASxnK,CAAG,KAAGkzI,EAAA,MAAK4Y,IAAO,UAAS,EAAG,eAAe9rJ,CAAG;AAAA,IACtE;AACA,SAAK,QAAWk8B,CAAK;AAAA,EACvB;AAAA,EACC,QAAWA,GAAO;AACjB,UAAM,EAAE,SAAAw2H,MAAY,KAAK;AACzB,IAAKA,EAAO,MACVA,EAAQ,IAAI,EAAI,GAChB,KAAK,OAAO,KAAK,YAAY,WAAW,EAAE,SAASx2H,EAAK,CAAE,CAAC;AAAA,EAE/D;AAAA,EACC,MAASA,GAAO;;AACf,KAAKv9B,IAAA,KAAK,OAAL,QAAAA,EAAS,eACZs0I,EAAA,MAAKw2B,IAAyB,KAEhCp0B,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB,uBAAuB3tI;AAC5C,UAAMwwI,IAAcx5B,EAAA,MAAKi2B,IAAe,IAAI,QAAQ;AACpD,IAAIuD,KAAaxwI,EAAM,SAAS,IAAIwwI,CAAW;AAC/C,UAAM,EAAE,QAAA9Z,GAAQ,SAAAoX,EAAO,IAAK,KAAK;AACjC,IAAApX,EAAO,IAAI,EAAI,GACfoX,EAAQ,IAAI,EAAK,GACb92B,EAAA,MAAKk2B,OACP,WAAW,MAAM;AACf,WAAK,OAAO,KAAK,YAAY,OAAO,EAAE,SAASltI,EAAK,CAAE,CAAC,GACvD+2G,EAAA,MAAKm2B,IAAa;AAAA,IACpB,GAAG,CAAC,GAEN/zB,EAAA,MAAK6zB,IAAAyB,IAAL;AAAA,EACF;AAAA,EACC,cAAezuI,GAAO;AACrB,QAAIg3G,EAAA,MAAKwyB,IAAS,SAAS;AACzB,MAAAxpI,EAAM,yBAAwB;AAC9B;AAAA,IACF;AACA,QAAI,EAAE,SAAA6tI,GAAS,QAAA4C,GAAQ,aAAAzR,GAAa,iBAAA0O,GAAiB,aAAAplB,EAAW,IAAK,KAAK,QAAQ0T,IAAUh8H,EAAM,QAAQ+qH,IAAUiU,EAAW;AAC/H,IAAA0O,EAAgB,IAAI1R,CAAO,GAC3B7iB,EAAA,MAAK6zB,IAAA0D,IAAL,YACA7C,EAAQ,IAAI,EAAK;AACjB,eAAWhsE,KAASm1C,EAAA,MAAK4Y,IAAO;AAC9B,MAAA/tD,EAAMmlD,GAAgB,gBAAgB,EAAEgV,GAASh8H,CAAK;AAExD,IAAI+qH,IAAU,KAAKiR,KAAWjR,MAC5BhU,EAAA,MAAKm2B,IAAa,KAClB,KAAK,SAAS,uBAAuB,EAAE,SAASltI,EAAK,CAAE,IAEzDm5G,EAAA,MAAK6zB,IAAA2D,IAAL,YACA,KAAK,SAAS,eAAe;AAAA,MAC3B,QAAQ,EAAE,aAAaroB,EAAW,GAAI,QAAQmoB,EAAM,EAAE;AAAA,MACtD,SAASzwI;AAAA,IACf,CAAK;AAAA,EACH;AAAA,EA4BC,oBAAqBA,GAAO;;AAC3B,UAAM,EAAE,SAAAgmG,EAAO,IAAKgR,EAAA,MAAK4Y,KAAQ,EAAE,SAAA4X,GAAS,WAAAU,MAAc,KAAK;AAC/D,IAAAA,EAAU,IAAIloI,EAAM,MAAM,GAC1Bm5G,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB,mCAAmC3tI,IACpDwnI,EAAO,OAAI/kK,IAAAujI,KAAA,gBAAAA,EAAS,iBAAT,QAAAvjI,EAAA,KAAAujI,GAAwBkiC,EAAS;AAAA,EAClD;AAAA,EACC,gBAAiBloI,GAAO;;AACvB,UAAM,EAAE,SAAAgmG,EAAO,IAAKgR,EAAA,MAAK4Y,KAAQ,EAAE,QAAA5E,GAAQ,OAAAO,GAAO,SAAAic,EAAO,IAAK,KAAK,QAAQ3gI,IAAS7G,EAAM;AAC1F,IAAAgrH,EAAO,IAAInkH,EAAO,MAAM,GACxB0kH,EAAM,IAAI1kH,EAAO,SAASA,EAAO,WAAW,CAAC,GAC7CsyG,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB,+BAA+B3tI,IACpDm5G,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB9mI,EAAO,QAAQ,uBAAuB,wBAAwB7G,IAC/EwnI,EAAO,OACT/kK,IAAAujI,KAAA,gBAAAA,EAAS,cAAT,QAAAvjI,EAAA,KAAAujI,GAAqBglB,OACrBpiJ,IAAAo9H,KAAA,gBAAAA,EAAS,aAAT,QAAAp9H,EAAA,KAAAo9H,GAAoBulB;EAExB;AAAA,EAgBC,OAAUvrH,GAAO;AAChB,UAAM,EAAE,SAAAytI,GAAS,aAAAnlB,GAAa,iBAAAolB,GAAiB,QAAAhX,GAAQ,aAAA4U,GAAa,OAAA9f,GAAO,MAAAjnG,MAAS,KAAK;AACzF,QAAIyyF,EAAA,MAAKwyB,IAAS;AAChB,MAAAiE,EAAQ,IAAI,EAAI,GAChBztI,EAAM,yBAAwB;AAAA,aACrBytI,KAAW;AACpB,YAAM6C,IAAet5B,EAAA,MAAKi2B,IAAe,IAAI,SAAS;AACtD,MAAIqD,KAActwI,EAAM,SAAS,IAAIswI,CAAY;AACjD,YAAMM,IAAe55B,EAAA,MAAKi2B,IAAe,IAAI,SAAS;AACtD,MAAI2D,KAAgB,CAAC5wI,EAAM,SAAS,IAAI4wI,CAAY,KAClD5wI,EAAM,SAAS,IAAI4wI,CAAY,GAE7Bla,EAAM,KAAIvd,EAAA,MAAK6zB,IAAA6D,IAAL,YACdpD,EAAQ,IAAI,EAAK,GACjBC,EAAgB,IAAI1tI,EAAM,MAAM,GAChCm5G,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB,sBAAsB3tI;AAC3C,YAAM8wI,IAAS9wI,KAAA,gBAAAA,EAAO;AACtB,MAAI8wI,KAAA,QAAAA,EAAQ,aAAa,EAAEA,aAAkB,iBAAiB,CAAC,OAAO,KAAKA,EAAO,IAAI,KACpF,KAAK,QAAW9wI,CAAK;AAAA,IAEzB;AACA,IAAKukB,EAAI,MACH,KAAK,MAAM+jG,EAAW,CAAE,MAAM,KAAK,MAAMgjB,EAAW,CAAE,IACxD9f,EAAM,IAAI,EAAK,IAEf,KAAK,IAAIxrH,CAAK;AAAA,EAGpB;AAAA,EACC,QAAWA,GAAO;AACjB,IAAIg3G,EAAA,MAAKq2B,OAAkBr2B,EAAA,MAAKwyB,IAAS,YACzCxpI,EAAM,yBAAwB,GAC9B+2G,EAAA,MAAKu2B,IAAkBttI,IACvBg3G,EAAA,MAAK42B,IAAL;AAAA,EACF;AAAA,EAaC,IAAO5tI,GAAO;AACb,UAAM,EAAE,MAAAoH,GAAM,OAAAokH,EAAK,IAAK,KAAK;AAC7B,QAAI,GAACpkH,OAAUokH,MACf;AAAA,UAAIpkH,EAAI,GAAI;AACV,mBAAW,MAAM;AACf,gCAAsB,MAAM;AAC1B,YAAA+xG,EAAA,MAAK6zB,IAAAqD,IAAL,WAA4BrwI,IAC5B,KAAK,SAAS,sBAAsB,EAAE,SAASA,EAAK,CAAE;AAAA,UACxD,CAAC;AAAA,QACH,GAAG,EAAE;AACL;AAAA,MACF;AACA,iBAAW,MAAMm5G,EAAA,MAAK6zB,IAAA3P,IAAL,WAAcr9H,IAAQ,CAAC;AAAA;AAAA,EAC1C;AAAA,EAwBC,oBAAqBA,GAAO;AAC3B,UAAM63H,IAAe73H,EAAM;AAC3B,SAAK,OAAO,WAAW,IAAI63H,CAAY,GACvC1e,EAAA,MAAK6zB,IAAAW,IAAL,WACE9V,IAAe,mCAAmC,iCAClD73H;AAAA,EAEJ;AAAA,EACC,mBAAoBA,GAAO;AAC1B,IAAAm5G,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB,kCAAkC3tI,IACvDm5G,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB,iCAAiC3tI;AAAA,EACxD;AAAA,EACC,qBAAsBA,GAAO;AAC5B,UAAM4qE,IAAW5qE,EAAM,OAAO;AAC9B,IAAAm5G,EAAA,MAAK6zB,IAAAW,IAAL,WACE/iE,IAAW,mCAAmC,oCAC9C5qE;AAAA,EAEJ;AAAA,EACC,4BAA6BA,GAAO;AACnC,UAAM+wI,IAAQ/wI,EAAM;AACpB,SAAK,OAAO,iBAAiB,IAAI+wI,CAAK,GACtC53B,EAAA,MAAK6zB,IAAAW,IAAL,WAAqBoD,IAAQ,4BAA4B,0BAA0B/wI;AAAA,EACrF;AAAA,EACC,2BAA4BA,GAAO;AAClC,IAAAm5G,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB,2BAA2B3tI,IAChDm5G,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB,0BAA0B3tI;AAAA,EACjD;AAAA,EACC,eAAgBA,GAAO;AACtB,IAAKA,EAAM,YACXA,EAAM,yBAAwB,GAC9B,KAAK,OAAO,cAAc,IAAIA,EAAM,MAAM;AAAA,EAC5C;AAAA,EACC,gBAAiBA,GAAO;AACvB,IAAKA,EAAM,YACXA,EAAM,yBAAwB,GAC9B,KAAK,OAAO,eAAe,IAAIA,EAAM,MAAM;AAAA,EAC7C;AACF;AAztBEwpI,KAAA,eACA5Z,KAAA,eACAqd,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eAkCAC,KAAA,eA1CFP,KAAA,eA2CEmB,KAAwB,WAAG;AACzB,EAAKn3B,EAAA,MAAKu2B,QACV,sBAAsB,MAAM;AAC1B,IAAK,KAAK,SACVv2B,EAAA,MAAK4Y,IAAO,OAAO,KAAK,IAAIvZ,GAAS,aAAa,CAAC;AAAA,EACrD,CAAC,GACDU,EAAA,MAAKw2B,IAAyB;AAChC,GACAa,KAA0B,WAAG;;AAC3B,EAAIp3B,EAAA,MAAKu2B,QACTx2B,EAAA,MAAKw2B,IAAyB,CAAC,KAAK,OAAO,OAAM,KACjD9qK,IAAAu0I,EAAA,MAAK4Y,IAAO,UAAS,MAArB,QAAAntJ,EAAyB;AAC3B,GACAgsK,KAAc,WAAG;AACf,EAAAt1B,EAAA,MAAK6zB,IAAA6D,IAAL,YACA95B,EAAA,MAAKm2B,IAAa,KAClBl2B,EAAA,MAAKwyB,IAAS,YAAY,IAC1BxyB,EAAA,MAAKwyB,IAAS,UAAU,IACxBzyB,EAAA,MAAKs2B,IAAiB,KACtBt2B,EAAA,MAAKu2B,IAAkB,SACvBt2B,EAAA,MAAKi2B,IAAe,MAAK;AAC3B,GACAU,KAAe,SAAC54F,GAAS/0C,GAAO;AAC9B,QAAMkvI,IAAel4B,EAAA,MAAKwyB,IAAS,MAAM,MAAMz0F,CAAO;AACtD,EAAKm6F,MACLlvI,EAAM,UAAUkvI,GAChBlvI,EAAM,SAAS,IAAIkvI,CAAY;AACjC,GACAlB,KAAsB,WAAG;AACvB,EAAA70B,EAAA,MAAK6zB,IAAAgE,IAAL,YACA73B,EAAA,MAAK6zB,IAAAiE,IAAL;AACA,QAAMjhB,IAAahZ,EAAA,MAAK4Y,IAAO;AAC/B,MAAIjZ,GAAiBqZ,CAAU,EAAE,IAAI,OAAO7W,EAAA,MAAK6zB,IAAAgE,IAAoB,KAAK,IAAI,CAAC,EAAE,IAAI,UAAU73B,EAAA,MAAK6zB,IAAAgE,IAAoB,KAAK,IAAI,CAAC,EAAE,IAAI,eAAe73B,EAAA,MAAK6zB,IAAAiE,IAAuB,KAAK,IAAI,CAAC;AAC/L,GACAhD,KAAoB,WAAG;AACrB,QAAM9b,IAAYnb,EAAA,MAAK4Y,IAAO;AAC9B,MAAIjZ,GAAiBwb,CAAS,EAAE,IAAI,OAAOhZ,EAAA,MAAK6zB,IAAAkE,IAAmB,KAAK,IAAI,CAAC,EAAE,IAAI,UAAU/3B,EAAA,MAAK6zB,IAAAkE,IAAmB,KAAK,IAAI,CAAC,EAAE,IAAI,UAAU/3B,EAAA,MAAK6zB,IAAApL,IAAiB,KAAK,IAAI,CAAC,EAAE,IAAI,eAAezoB,EAAA,MAAK6zB,IAAAmE,IAAqB,KAAK,IAAI,CAAC,EAAE,IAAI,mBAAmBh4B,EAAA,MAAK6zB,IAAAoE,IAAuB,KAAK,IAAI,CAAC;AACzS,GACAlD,KAAuB,WAAG;AACxB,QAAMjL,IAAcjsB,EAAA,MAAK4Y,IAAO;AAChC,MAAIjZ,GAAiBssB,CAAW,EAAE,IAAI,OAAO9pB,EAAA,MAAK6zB,IAAAqE,IAAqB,KAAK,IAAI,CAAC,EAAE,IAAI,UAAUl4B,EAAA,MAAK6zB,IAAAqE,IAAqB,KAAK,IAAI,CAAC,EAAE,IAAI,UAAUl4B,EAAA,MAAK6zB,IAAAsE,IAAoB,KAAK,IAAI,CAAC;AAC1L,GACAN,KAAmB,SAAChxI,GAAO;AACzB,QAAM,EAAE,YAAAgwH,MAAe,KAAK;AAC5B,EAAAA,EAAW,IAAIhZ,EAAA,MAAK4Y,IAAO,WAAW,QAAO,CAAE,GAC/C,KAAK,SAAS,sBAAsB;AAAA,IAClC,QAAQI,EAAU;AAAA,IAClB,SAAShwH;AAAA,EACf,CAAK;AACH,GACAixI,KAAsB,SAACjxI,GAAO;AAC5B,EAAIA,KAAOm5G,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB,mCAAmC3tI;AACnE,QAAMz5B,IAAUywI,EAAA,MAAK4Y,IAAO,WAAW,UAAU,EAAE,WAAA2hB,MAAc,KAAK;AACtE,EAAIA,EAAS,MAAOhrK,MAClBgrK,EAAU,IAAIhrK,CAAO,GACrB,KAAK,SAAS,qBAAqB;AAAA,IACjC,QAAQA;AAAA,IACR,SAASy5B;AAAA,EACjB,CAAO;AAEL,GACAqxI,KAAoB,SAACrxI,GAAO;AAC1B,QAAM,EAAE,aAAAijI,MAAgB,KAAK;AAC7B,EAAAA,EAAY,IAAIjsB,EAAA,MAAK4Y,IAAO,YAAY,QAAO,CAAE,GACjD,KAAK,SAAS,uBAAuB;AAAA,IACnC,QAAQqT,EAAW;AAAA,IACnB,SAASjjI;AAAA,EACf,CAAK;AACH,GACAsxI,KAAmB,SAACtxI,GAAO;AACzB,QAAM,EAAE,YAAAq+H,MAAe,KAAK;AAC5B,EAAAA,EAAW,IAAIrnB,EAAA,MAAK4Y,IAAO,YAAY,QAAQ,GAC3C5vH,KAAOm5G,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB,oCAAoC3tI,IACpE,KAAK,SAAS,sBAAsB;AAAA,IAClC,QAAQq+H,EAAU;AAAA,IAClB,SAASr+H;AAAA,EACf,CAAK;AACH,GACAkxI,KAAkB,SAAClxI,GAAO;AACxB,QAAM,EAAE,WAAAmyH,MAAc,KAAK;AAC3B,EAAAA,EAAU,IAAInb,EAAA,MAAK4Y,IAAO,UAAU,QAAO,CAAE,GAC7C,KAAK,SAAS,oBAAoB;AAAA,IAChC,QAAQuC,EAAS;AAAA,IACjB,SAASnyH;AAAA,EACf,CAAK;AACH,GACA4hI,KAAgB,SAAC5hI,GAAO;AACtB,QAAM,EAAE,SAAAyrH,MAAY,KAAK;AACzB,EAAAA,EAAQ,IAAIzU,EAAA,MAAK4Y,IAAO,UAAU,QAAQ,GACtC5vH,KAAOm5G,EAAA,MAAK6zB,IAAAW,IAAL,WAAqB,gCAAgC3tI,IAChE,KAAK,SAAS,kBAAkB;AAAA,IAC9B,QAAQyrH,EAAO;AAAA,IACf,SAASzrH;AAAA,EACf,CAAK;AACH,GACAmxI,KAAoB,WAAG;AACrB,QAAM,EAAE,WAAAhf,EAAS,IAAKnb,EAAA,MAAK4Y,KAAQ4hB,IAASrf,EAAU;AACtD,OAAK,OAAO,YAAY,IAAIqf,CAAM,GAC7BA,KAAQr4B,EAAA,MAAK6zB,IAAAqB,IAAL;AACf,GACAb,KAAA,eACAiE,KAAmB,WAAG;AACpB,EAAAt4B,EAAA,MAAK6zB,IAAAqB,IAAL,YACAt3B,EAAA,MAAKy2B,IAA2Br3I,EAAO,MAAM;AAC3C,UAAM,EAAE,WAAAg8H,EAAS,IAAKnb,EAAA,MAAK4Y,KAAQ,EAAE,YAAA8hB,GAAY,aAAAC,EAAW,IAAK,KAAK,QAAQ9sK,IAAI6sK,EAAU,GAAIn9K,IAAIo9K,EAAW;AAC/G,QAAI9sK,MAAM,KAAKtQ,MAAM,EAAG;AACxB,QAAIq9K,IAAkB,MAAMC,IAAW;AACvC,eAAWpmB,KAAW0G,GAAW;AAC/B,YAAMmW,IAAQ,KAAK,IAAI7c,EAAQ,QAAQ5mJ,CAAC,IAAI,KAAK,IAAI4mJ,EAAQ,SAASl3J,CAAC;AACvE,MAAI+zK,IAAQuJ,MACVA,IAAWvJ,GACXsJ,IAAkBnmB;AAAA,IAEtB;AACA,IAAImmB,KACFzf,EAAU5F,GAAW,MAAM;AAAA,MACzBqlB;AAAA,MACA;AAAA,MACA,IAAIv7B,GAAS,UAAU,EAAE,QAAQ,EAAE,OAAOxxI,GAAG,QAAQtQ,IAAG,CAAE;AAAA,IACpE;AAAA,EAEI,CAAC;AACH,GACA85K,KAA0B,WAAG;;AAC3B,GAAA5rK,IAAAu0I,EAAA,MAAKw2B,QAAL,QAAA/qK,EAAA,YACAs0I,EAAA,MAAKy2B,IAA2B;AAClC,GACA4D,KAAsB,WAAG;AACvB,OAAK,OAAO,cAAc,IAAI,CAACp6B,EAAA,MAAK4Y,IAAO,UAAU,QAAQ;AAC/D,GACAme,KAAkB,WAAG;AACnB,QAAM,EAAE,cAAA+D,GAAc,uBAAAC,EAAqB,IAAK,KAAK;AACrD,MAAIA,EAAqB,GAAI;AAC3B,IAAAD,EAAa,IAAI,EAAK;AACtB;AAAA,EACF;AACA,EAAA/tB,KAAkB,KAAK+tB,EAAa,GAAG;AACzC,GAyFAzC,KAAwB,SAACF,GAAaC,GAAYrsH,GAAS;AACzD,MAAI,EAAE,WAAAovG,EAAS,IAAKnb,EAAA,MAAK4Y,KAAQoiB,IAAQ,IAAOC,IAAU;AAC1D,aAAWC,KAAW/C,GAAa;AACjC,QAAI,CAACnsB,GAAkBkvB,CAAO,EAAG;AAEjC,QAAI,CADW9C,EAAW,KAAK,CAACn1K,MAAMA,EAAE,QAAQi4K,EAAQ,GAAG,GAC9C;AACX,YAAMzmB,IAAU0G,EAAU,SAAS+f,EAAQ,GAAG;AAC9C,MAAIzmB,MACF0G,EAAU5F,GAAW,MAAM,EAAEd,GAAS1oG,CAAO,GAC7CkvH,IAAU;AAAA,IAEd;AAAA,EACF;AACA,EAAIA,KAAW,CAAC9f,EAAU,WACxB,KAAK,OAAO,WAAW,IAAI,IAAI,GAC/BA,EAAU5F,GAAW,KAAK,EAAExpG,CAAO;AAErC,aAAW3iD,KAAOgvK,GAAY;AAC5B,QAAI,CAACpsB,GAAkB5iJ,CAAG,KAAK+xJ,EAAU,SAAS/xJ,EAAI,GAAG,EAAG;AAC5D,UAAMqrJ,IAAU;AAAA,MACd,IAAIrrJ,EAAI,MAAMA,EAAI,SAAS;AAAA,MAC3B,SAAS;AAAA,MACT,OAAO;AAAA,MACP,GAAGA;AAAA,MACH,UAAU;AAAA,IAClB;AACM,IAAA+xJ,EAAU5F,GAAW,GAAG,EAAEd,GAAS1oG,CAAO,GAC1CivH,IAAQ;AAAA,EACV;AACA,EAAIA,KAAS,CAAC7f,EAAUL,GAAc,UAAU,MAC9C3Y,EAAA,MAAK6zB,IAAAyE,IAAL,YACAtf,EAAUL,GAAc,UAAU,IAAI3Y,EAAA,MAAK6zB,IAAAyE,IAAoB,KAAK,IAAI,GACxEtf,EAAUL,GAAc,OAAO,EAAE,IAAM/uG,CAAO;AAElD,GASAyrH,KAAgB,SAACxuI,GAAOgqH,IAAwB,IAAO;AACrD,QAAM,EAAE,aAAAiZ,GAAa,WAAA9Q,EAAS,IAAKnb,EAAA,MAAK4Y;AACxC,MAAI,CAAC5F,GAAuB;AAC1B,IAAAjT,EAAA,MAAKo2B,IAAmB,CAAA,IACxBp2B,EAAA,MAAKq2B,IAAkB,CAAC,IAAI,EAAE,IAC9BnK,EAAY1W,GAAW,KAAK,EAAEvsH,CAAK,GACnCmyH,EAAU5F,GAAW,KAAK,EAAEvsH,CAAK,GACjC8pH,GAAoB,KAAK,QAAQE,CAAqB,GACtD7Q,EAAA,MAAK6zB,IAAAyB,IAAL;AACA;AAAA,EACF;AACA,EAAA3kB,GAAoB,KAAK,QAAQE,CAAqB,GACtD7Q,EAAA,MAAK6zB,IAAAyB,IAAL;AACF,GAqCAiB,KAAgB,SAAC7oI,GAAQ;AACvB,QAAM,EAAE,UAAA4gI,GAAU,UAAAC,GAAU,mBAAAiI,GAAmB,SAAAnI,EAAO,IAAK,KAAK;AAChE,EAAAA,EAAQ,IAAI,EAAI,GAChBE,EAAS,IAAI7gI,EAAO,QAAQ,GAC5B4gI,EAAS,IAAI5gI,EAAO,QAAQ;AAC5B,QAAMykI,IAAc3mB,GAAiB99G,EAAO,QAAQ,KAAK;AACzD,EAAA8oI,EAAkB,IAAIrE,CAAW;AACnC,GAmEA+E,KAAsB,SAACttH,GAAS;AAE9B,MAAI,CADa4wF,GAAKqD,EAAA,MAAK4Y,IAAO,SAAS,EAC5B;AACf,QAAM,EAAE,OAAApE,GAAO,eAAA2mB,GAAe,aAAAnT,GAAa,aAAA1W,GAAa,iBAAAolB,GAAiB,UAAA5iB,MAAa,KAAK,QACrFsnB,IAAc5mB,OAAWkiB,EAAe,IAAKyE,EAAa,KAAMnT,EAAW,IAAK,KAAK0O,EAAe,KAAM1O,EAAW,KAAM,KAAK,IAAI1W,MAAgBwC,EAAQ,CAAE,IAAI;AACxK,SAAIsnB,KACF,KAAK,SAAS,sBAAsB;AAAA,IAClC,QAAQD,EAAa;AAAA,IACrB,SAAApvH;AAAA,EACR,CAAO,GAEIqvH;AACT,GAqGA1B,KAAa,WAAG;AACd,QAAM,EAAE,aAAApoB,GAAa,QAAAmoB,GAAQ,QAAA/Z,EAAM,IAAK,KAAK;AAC7C,EAAIA,EAAM,MACV3f,EAAA,MAAKq2B,IAAkBroB;AAAA,IACrB/N,EAAA,MAAKm2B;AAAA,IACLn2B,EAAA,MAAKo2B;AAAA,IACL9kB,EAAW;AAAA,EACjB,IACImoB,EAAO,IAAI,IAAIjsB,GAAUxN,EAAA,MAAKm2B,GAAgB,CAAC;AACjD;AAEAyC,KAAqB,SAAC7sH,GAAS;AAC7B,QAAM,EAAE,eAAAg8G,GAAe,aAAAC,GAAa,UAAAlU,EAAQ,IAAK,KAAK;AACtD,EAD0EiU,EAAa,IAAK,KAAKC,EAAW,IAAK,KAEjH,KAAK;AAAA,IACH,KAAK,YAAY,eAAe;AAAA,MAC9B,QAAQlU,EAAQ;AAAA,MAChB,SAAA/nG;AAAA,IACR,CAAO;AAAA,EACP;AACE,GACA4tH,KAAS,WAAG;;AACV,QAAM,EAAE,SAAA3qC,EAAO,IAAKgR,EAAA,MAAK4Y,KAAQ,EAAE,SAAA4X,GAAS,iBAAAkG,MAAoB,KAAK;AACrE,EAAIlG,EAAO,OACT/kK,IAAAujI,KAAA,gBAAAA,EAAS,YAAT,QAAAvjI,EAAA,KAAAujI,GAAmB0nC;AAEvB,GAoEAE,KAAA,eA0BAvQ,KAAQ,SAACr9H,GAAO;;AACd,QAAM,EAAE,SAAAgmG,EAAO,IAAKgR,EAAA,MAAK4Y,KAAQ,EAAE,QAAA8G,GAAQ,SAAA+W,GAAS,OAAAjiB,GAAO,UAAAV,EAAQ,IAAK,KAAK;AAC7E,EAAA3R,EAAA,MAAK6zB,IAAA4C,IAAL,WAA2B5vI,IACtB02H,EAAM,KACT,KAAK,SAAS,SAAS,EAAE,SAAS12H,EAAK,CAAE,GAEvCytI,EAAO,KACT,KAAK,SAAS,UAAU;AAAA,IACtB,QAAQ3iB,EAAQ;AAAA,IAChB,SAAS9qH;AAAA,EACjB,CAAO,GAEHwrH,EAAM,IAAI,EAAI,GACdrS,EAAA,MAAK6zB,IAAAyB,IAAL,aACAhsK,IAAAujI,KAAA,gBAAAA,EAAS,YAAT,QAAAvjI,EAAA,KAAAujI,GAAmB8kB,EAAQ,GAAI,KAC/B,KAAK,SAAS,SAAS;AAAA,IACrB,SAAS9qH;AAAA,EACf,CAAK;AACH,GACA6wI,KAAY,WAAG;AACb,EAAA75B,EAAA,MAAK42B,IAAa,OAAM,GACxB,KAAK,OAAO,QAAQ,IAAI,EAAK;AAC/B;;AAyCF,MAAMyE,WAAuB7f,GAAsB;AAAA,EAAnD;AAAA;AAAA,IAAA5b,EAAA,MAAA07B;AAAA;AAAA,EACE,UAAU;AAER,QADAn5B,EAAA,MAAKm5B,IAAAxc,IAAL,YACIrjB,GAAW;AACf,UAAMO,IAAU;AAAA,MACdmG,EAAA,MAAKm5B,IAAAC;AAAA,MACLp5B,EAAA,MAAKm5B,IAAAE;AAAA,MACLr5B,EAAA,MAAKm5B,IAAAG;AAAA,MACLt5B,EAAA,MAAKm5B,IAAAI;AAAA,MACLv5B,EAAA,MAAKm5B,IAAAriB;AAAA,MACL9W,EAAA,MAAKm5B,IAAAK;AAAA,MACLx5B,EAAA,MAAKm5B,IAAAM;AAAA,MACLz5B,EAAA,MAAKm5B,IAAAO;AAAA,MACL15B,EAAA,MAAKm5B,IAAAQ;AAAA,MACL35B,EAAA,MAAKm5B,IAAAS;AAAA,MACL55B,EAAA,MAAKm5B,IAAAU;AAAA,MACL75B,EAAA,MAAKm5B,IAAAW;AAAA,MACL95B,EAAA,MAAKm5B,IAAAY;AAAA,MACL/5B,EAAA,MAAKm5B,IAAAa;AAAA,MACLh6B,EAAA,MAAKm5B,IAAAc;AAAA,IACX;AACI,eAAW/5I,KAAY25G;AACrB,MAAA78G,EAAOkD,EAAS,KAAK,IAAI,CAAC;AAAA,EAE9B;AAkGF;AA1HAi5I,KAAA,eAyBExc,KAAK,WAAG;;AACN,QAAMud,IAAgB;AAAA,IACpB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,UAAU;AAAA,EAChB,GACUnnD,IAAuB,oBAAI,IAAI;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACN,CAAK;AACD,aAAW1uG,KAAQ,OAAO,KAAK,KAAK,MAAM;AACxC,IAAI0uG,EAAK,IAAI1uG,CAAI,MACjB/a,IAAA,KAAK,OAAO4wK,EAAc71J,CAAI,KAAKA,CAAI,MAAvC,QAAA/a,EAA0C,IAAI,KAAK,OAAO+a,CAAI,EAAC;AAEjE,OAAK,OAAO,MAAM,IAAI,KAAK,OAAO,MAAK,KAAM,KAAK,OAAO,OAAM,MAAO,CAAC;AACzE;AAAA;AAGA21J,KAAmB,WAAG;AACpB,QAAM,EAAE,UAAApd,GAAU,YAAA8Y,GAAY,OAAA1vE,GAAO,QAAAm0E,GAAQ,MAAAlsI,EAAI,IAAK,KAAK,QAAQmsI,IAAS,KAAK;AACjF,EAAAA,EAAO,eAAe,IAAID,GAAQ,GAClCC,EAAO,mBAAmB,IAAI1E,GAAY,GAC1C0E,EAAO,iBAAiB,IAAIxd,GAAU,GACtCwd,EAAO,cAAc,IAAIp0E,GAAO,GAChCo0E,EAAO,aAAa,IAAInsI,GAAM;AAChC,GACAosI,KAAc,WAAG;AAEjB,GACAjB,KAAc,WAAG;AACf,QAAM,EAAE,QAAAkB,GAAQ,SAAAC,EAAO,IAAK,KAAK;AACjC,OAAK,OAAO,OAAO,IAAID,EAAM,CAAE,GAC/B,KAAK,OAAO,QAAQ,IAAIC,EAAO,CAAE;AACnC,GACAN,KAAW,WAAG;AACZ,QAAM,EAAE,OAAAj0E,MAAU,KAAK;AACvB,OAAK,SAAS,gBAAgB,EAAE,QAAQA,EAAK,EAAE,CAAE;AACnD,GACAqzE,KAAc,WAAG;AACf,QAAMjL,IAAW,KAAK,OAAO,SAAQ,KAAM,KAAK,OAAO,SAAQ;AAC/D,OAAK,OAAO,SAAS,IAAIA,CAAQ,GACjC,KAAK,SAAS,oBAAoB,EAAE,QAAQA,EAAQ,CAAE;AACxD,GACAyL,KAAU,WAAG;AACX,QAAM5rI,IAAO,KAAK,OAAO,KAAI;AAC7B,OAAK,SAAS,eAAe,EAAE,QAAQA,EAAI,CAAE;AAC/C,GACA6oH,KAAc,WAAG;AACf,QAAM0jB,IAAW,KAAK,OAAO,SAAQ;AACrC,OAAK,OAAO,SAAS,IAAIA,CAAQ;AACnC,GACAT,KAAY,WAAG;AACb,QAAM,EAAE,QAAAI,MAAW,KAAK;AACxB,OAAK,SAAS,iBAAiB,EAAE,QAAQA,EAAM,EAAE,CAAE;AACrD,GACAX,KAAiB,WAAG;AAClB,QAAM1lC,IAAc,KAAK,OAAO,YAAW,KAAM,KAAK,OAAO,YAAW,GAAItxI,IAAQsxI,MAAgB,KAAO,KAAKA;AAChH,OAAK,OAAO,YAAY,IAAItxI,CAAK;AACnC,GACAi3K,KAAc,WAAG;AACf,QAAM,EAAE,UAAA9nB,MAAa,KAAK;AAC1B,OAAK,SAAS,iCAAiC;AAAA,IAC7C,QAAQA,EAAQ;AAAA,EACtB,CAAK;AACH,GACAmoB,KAAiB,WAAG;AAClB,QAAMvU,IAAS,KAAK,OAAO,YAAW,KAAM,KAAK,OAAO,YAAW;AACnE,OAAK,OAAO,YAAY,IAAIA,CAAM,GAClC,KAAK,SAAS,uBAAuB,EAAE,QAAQA,EAAM,CAAE;AACzD,GACA+T,KAAmB,WAAG;AACpB,QAAM,EAAE,eAAA1T,MAAkB,KAAK;AAC/B,OAAK,SAAS,mCAAmC;AAAA,IAC/C,QAAQA,EAAa;AAAA,EAC3B,CAAK;AACH,GACA2T,KAAiB,WAAG;AAClB,QAAM,EAAE,aAAA1T,MAAgB,KAAK;AAC7B,OAAK,SAAS,iCAAiC;AAAA,IAC7C,QAAQA,EAAW;AAAA,EACzB,CAAK;AACH,GACA6T,KAAU,WAAG;AACX,OAAK,SAAS,eAAe,EAAE,QAAQ,KAAK,OAAO,KAAI,GAAI;AAC7D,GACAE,KAAmB,WAAG;AACpB,OAAK,OAAO,kBAAkB,IAAI,KAAK,OAAO,mBAAmB,GACjE,KAAK,OAAO,iBAAiB,IAAI,KAAK,OAAO,kBAAkB;AACjE,GACAD,KAAc,WAAG;AACf,OAAK,SAAS,oBAAoB,EAAE,QAAQ,KAAK,OAAO,SAAQ,GAAI;AACtE;AAGF,MAAMc,KAAU,CAAC,QAAQ,SAAS,eAAe,gBAAgB,QAAQ;;AACzE,MAAMC,WAA8BrhB,GAAsB;AAAA,EAA1D;AAAA;AAAA,IAAA5b,EAAA,MAAAk9B;AAAA;AAAA,EACE,YAAY;AACV,IAAA39I,EAAOgjH,EAAA,MAAK26B,IAAAC,IAAkB,KAAK,IAAI,CAAC,GACxC59I,EAAOgjH,EAAA,MAAK26B,IAAAE,IAAuB,KAAK,IAAI,CAAC;AAC7C,UAAMC,IAAe96B,EAAA,MAAK26B,IAAAI,IAAc,KAAK,IAAI;AACjD,eAAW9sH,KAAUwsH;AACnB,gBAAU,aAAa,iBAAiBxsH,GAAQ6sH,CAAY;AAE9D,IAAA//B,GAAUiF,EAAA,MAAK26B,IAAAlc,IAAc,KAAK,IAAI,CAAC;AAAA,EACzC;AAqCF;AA9CAkc,KAAA,eAUElc,KAAa,WAAG;AACd,aAAWxwG,KAAUwsH;AACnB,cAAU,aAAa,iBAAiBxsH,GAAQ,IAAI;AAExD,GACA2sH,KAAiB,WAAG;AAClB,QAAM,EAAE,OAAA50E,GAAO,QAAAs0E,GAAQ,SAAAC,GAAS,QAAAJ,EAAM,IAAK,KAAK;AAChD,YAAU,aAAa,WAAW,IAAI,cAAc;AAAA,IAClD,OAAOn0E,EAAK;AAAA,IACZ,QAAQs0E,EAAM;AAAA,IACd,SAASC,EAAO,KAAM,CAAC,EAAE,KAAKJ,EAAM,EAAE,CAAE;AAAA,EAC9C,CAAK;AACH,GACAU,KAAsB,WAAG;AACvB,QAAM,EAAE,SAAAxM,GAAS,QAAA9Q,EAAM,IAAK,KAAK;AACjC,YAAU,aAAa,gBAAiB8Q,EAAO,IAAc9Q,MAAW,WAAW,YAA/B;AACtD,GACAwd,KAAa,SAAC1hG,GAAS;AACrB,QAAMzvB,IAAU,IAAIszF,GAAS,wBAAwB,EAAE,QAAQ7jE,GAAS;AACxE,UAAQA,EAAQ,QAAM;AAAA,IACpB,KAAK;AACH,WAAK,SAAS,sBAAsB,EAAE,SAAAzvB,EAAO,CAAE;AAC/C;AAAA,IACF,KAAK;AACH,WAAK,SAAS,uBAAuB,EAAE,SAAAA,EAAO,CAAE;AAChD;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,WAAK,SAAS,sBAAsB;AAAA,QAClC,QAAQnyC,GAAS4hE,EAAQ,QAAQ,IAAIA,EAAQ,WAAW,KAAK,OAAO,YAAW,KAAMA,EAAQ,eAAeA,EAAQ,WAAW,gBAAgB,KAAK;AAAA,QACpJ,SAAAzvB;AAAA,MACV,CAAS;AACD;AAAA,EACR;AACE;AAGF,IAAIoxH,KAAYz4F,GAAO,EAAK;AACvB+2D,OACHiE,GAAY,UAAU,eAAe,MAAM;AACzC,EAAAy9B,GAAU,IAAI,EAAK;AACrB,CAAC,GACDz9B,GAAY,UAAU,WAAW,CAACpiJ,MAAM;AACtC,EAAIA,EAAE,WAAWA,EAAE,UAAUA,EAAE,WAC/B6/K,GAAU,IAAI,EAAI;AACpB,CAAC;;AAEH,MAAMC,WAA+Bx6B,GAAe;AAAA,EAApD;AAAA;AAAA,IAAAhD,EAAA,MAAAy9B;AACE,IAAAz9B,EAAA,MAAA09B,IAAW54F,GAAO,EAAK;AAAA;AAAA,EACvB,UAAU/xD,GAAI;AACZ,IAAAwM,EAAO,MAAM;AACX,YAAMwgI,IAAS,IAAIhgB,GAAiBhtH,CAAE;AACtC,UAAI,CAACwqJ,GAAS,GAAI;AAChB,QAAAn9B,EAAA,MAAKs9B,IAAS,IAAI,EAAK,GACvBC,GAAgB5qJ,GAAI,EAAK,GACzBgtI,EAAO,IAAI,gBAAgBxd,EAAA,MAAKk7B,IAAAG,IAAgB,KAAK,IAAI,CAAC,EAAE,IAAI,gBAAgBr7B,EAAA,MAAKk7B,IAAAI,IAAgB,KAAK,IAAI,CAAC;AAC/G;AAAA,MACF;AACA,YAAMh/G,IAAS,SAAS,kBAAkB9rC;AAC1C,MAAAqtH,EAAA,MAAKs9B,IAAS,IAAI7+G,CAAM,GACxB8+G,GAAgB5qJ,GAAI8rC,CAAM,GAC1BkhG,EAAO,IAAI,SAASxd,EAAA,MAAKk7B,IAAAK,IAAS,KAAK,IAAI,CAAC,EAAE,IAAI,QAAQv7B,EAAA,MAAKk7B,IAAAM,IAAQ,KAAK,IAAI,CAAC;AAAA,IACnF,CAAC;AAAA,EACH;AAAA,EACA,UAAU;AACR,WAAO39B,EAAA,MAAKs9B,IAAL;AAAA,EACT;AAeF;AAjCEA,KAAA,eADFD,KAAA,eAoBEK,KAAQ,WAAG;AACT,EAAA19B,EAAA,MAAKs9B,IAAS,IAAI,EAAI,GACtBC,GAAgB,KAAK,IAAI,EAAI;AAC/B,GACAI,KAAO,WAAG;AACR,EAAA39B,EAAA,MAAKs9B,IAAS,IAAI,EAAK,GACvBC,GAAgB,KAAK,IAAI,EAAK;AAChC,GACAC,KAAe,WAAG;AAChB,EAAAI,GAAgB,KAAK,IAAI,EAAI;AAC/B,GACAH,KAAe,WAAG;AAChB,EAAAG,GAAgB,KAAK,IAAI,EAAK;AAChC;AAEF,SAASL,GAAgB5qJ,GAAIqvG,GAAW;AACtC,EAAA4e,GAAajuH,GAAI,cAAcqvG,CAAS,GACxC4e,GAAajuH,GAAI,cAAcqvG,CAAS;AAC1C;AACA,SAAS47C,GAAgBjrJ,GAAIkrJ,GAAY;AACvC,EAAAj9B,GAAajuH,GAAI,cAAckrJ,CAAU,GACzCj9B,GAAajuH,GAAI,cAAckrJ,CAAU;AAC3C;;UAEApyK,KAAA,cAA0BnI,GAAU;AAAA,EAclC,cAAc;AACZ,UAAK;AAfT,IAAAs8I,EAAA,MAAAk+B;AAGE,IAAAl+B,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAA2yB;AACA,IAAA3yB,EAAA,MAAAm+B;AACA,IAAAp7J,EAAA,sBAAe,IAAIivJ,GAAY;AAC/B,IAAAjvJ,EAAA;AAuFA,IAAAi9H,EAAA,MAAAo+B,IAAmB;AAiHnB;AAAA;AAAA;AAAA;AAAA,IAAAr7J,EAAA;AA/LE,QAAI04J,GAAc;AAClB,UAAM76K,IAAU;AAAA,MACd,QAAQ;AAAA,MACR,WAAW,IAAIu6J,GAAgB;AAAA,MAC/B,aAAa,IAAIpF,GAAc;AAAA,MAC/B,SAAS;AAAA,MACT,WAAWjxE,GAAO,IAAI;AAAA,MACtB,gBAAgBA,GAAO,EAAK;AAAA,MAC5B,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,IACnB;AACI,IAAAlkF,EAAQ,SAAS,KAAK,gBAAgB,IAAI8yJ;AAAA,MACxC;AAAA,IACN,GACI9yJ,EAAQ,OAAO,UAAU,IAAI,GAC7BA,EAAQ,aAAa,IAAIm5J,GAAa,GACtCn5J,EAAQ,WAAWwvJ,GAAgB,WAAW,IAAI,KAAK,OAAO,aAC9DxvJ,EAAQ,gBAAgB,IAAI+3J,GAAc/3J,CAAO,GACjDA,EAAQ,WAAW,CAAA,GACnBu/I,EAAA,MAAK6Y,IAASp4J,IACd0gJ,GAAekS,IAAc5yJ,CAAO,GACpC,KAAK,cAAc,IAAI+gK,GAA2B,GAClD,IAAI6b,GAAsB,GAC1B,IAAIvhB,GAAwBr7J,CAAO;AACnC,UAAMu9E,IAAU,IAAI83F,GAAmB;AACvC,IAAA91B,EAAA,MAAKwyB,IAAY,IAAIwD,GAAkBh4F,GAASv9E,CAAO,IACvDu/I,EAAA,MAAKg+B,IAAc,IAAI3L,GAAoBpyB,EAAA,MAAKuyB,KAAWx0F,GAASv9E,CAAO,IAC3EA,EAAQ,WAAW,IAAI2vK,GAAoBnwB,EAAA,MAAKuyB,IAAU,OAAO,KAAKvyB,EAAA,MAAKuyB,GAAS,GAAG/xK,CAAO,GAC9FA,EAAQ,SAASA,EAAQ,SAAS,OAAO,KAAKA,EAAQ,QAAQ,GAC1D,OAAO,YAAc,OAAe,kBAAkB,aACxD,IAAIq8K,GAAqB,GAE3B,IAAI5M,GAAoB,QAAQ,KAAK,aAAa,KAAK,IAAI,CAAC,GAC5D,IAAIA,GAAoB,cAAc,KAAK,mBAAmB,KAAK,IAAI,CAAC;AAAA,EAC1E;AAAA,EACA,UAAU;AACR,IAAA9tB,EAAA,MAAK27B,IAAAG,IAAL,YACA9+I,EAAOgjH,EAAA,MAAK27B,IAAAI,IAAc,KAAK,IAAI,CAAC,GACpC/+I,EAAOgjH,EAAA,MAAK27B,IAAAK,IAAY,KAAK,IAAI,CAAC,GAClCh/I,EAAOgjH,EAAA,MAAK27B,IAAA7e,IAAa,KAAK,IAAI,CAAC,GACnC9/H,EAAOgjH,EAAA,MAAK27B,IAAAM,IAAa,KAAK,IAAI,CAAC,GACnCj/I,EAAOgjH,EAAA,MAAK27B,IAAAO,IAAkB,KAAK,IAAI,CAAC,GACxCl/I,EAAOgjH,EAAA,MAAK27B,IAAA7B,IAAkB,KAAK,IAAI,CAAC,GACxC98I,EAAOgjH,EAAA,MAAK27B,IAAAQ,IAAmB,KAAK,IAAI,CAAC;AAAA,EAC3C;AAAA,EACA,SAAS3rJ,GAAI;AACX,IAAAA,EAAG,aAAa,qBAAqB,EAAE,GACvCyjI,GAAoBzjI,GAAI,YAAY,GAAG,GACvCyjI,GAAoBzjI,GAAI,QAAQ,QAAQ,GACxCwM,EAAOgjH,EAAA,MAAK27B,IAAAS,IAAc,KAAK,IAAI,CAAC,GAChC9iC,KAAW0G,EAAA,MAAK27B,IAAA1B,IAAL,aACVj9I,EAAOgjH,EAAA,MAAK27B,IAAA1B,IAAY,KAAK,IAAI,CAAC,GACnC3gC,KAAW0G,EAAA,MAAK27B,IAAAU,IAAL,aACVr/I,EAAOgjH,EAAA,MAAK27B,IAAAU,IAAkB,KAAK,IAAI,CAAC,GAC7C9+B,GAAY/sH,GAAI,qBAAqBwvH,EAAA,MAAK27B,IAAAW,IAAc,KAAK,IAAI,CAAC;AAAA,EACpE;AAAA,EACA,UAAU9rJ,GAAI;AACZ,IAAIw5H,MAAWvL,GAAajuH,GAAI,eAAe,EAAE;AACjD,UAAM+rJ,IAAe,OAAO,WAAW,mBAAmB;AAC1D,IAAAv8B,EAAA,MAAK27B,IAAAa,IAAL,WAAsBD,IACtBA,EAAa,WAAWv8B,EAAA,MAAK27B,IAAAa,IAAiB,KAAK,IAAI;AACvD,UAAMC,IAAS,IAAI,eAAe33B,GAAuB9E,EAAA,MAAK27B,IAAAe,IAAU,KAAK,IAAI,CAAC,CAAC;AACnF,IAAAD,EAAO,QAAQjsJ,CAAE,GACjBwM,EAAOgjH,EAAA,MAAK27B,IAAAe,IAAU,KAAK,IAAI,CAAC,GAChC,KAAK,SAAS,wBAAwB;AAAA,MACpC,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,UAAU;AAAA,IAChB,CAAK,GACD3hC,GAAU,MAAM;AACd,MAAA0hC,EAAO,WAAU,GACjBF,EAAa,WAAW;AAAA,IAC1B,CAAC;AAAA,EACH;AAAA,EACA,YAAY;AACV,IAAA1+B,EAAA,MAAK4Y,IAAO,SAAS,MACrB,KAAK,aAAa,MAAK;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAkGA,IAAI,WAAW;AACb,WAAO5Y,EAAA,MAAK89B,IAAAgB;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,WAAW;AACb,WAAO9+B,EAAA,MAAK+9B,IAAY;AAAA,EAC1B;AAAA,EACA,IAAI,SAASpB,GAAU;AACrB,IAAA38B,EAAA,MAAK89B,IAAAiB,IAAO,SAAS,IAAIpC,CAAQ;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,QAAQ;AACV,WAAOhgC,GAAK,KAAK,OAAO,KAAK;AAAA,EAC/B;AAAA,EACA,IAAI,MAAM9B,GAAU;AAClB,QAAImF,EAAA,MAAKg+B,KAAkB;AACzB,MAAAj+B,EAAA,MAAKi+B,IAAmB;AACxB;AAAA,IACF;AACA,IAAAh+B,EAAA,MAAK89B,IAAAiB,IAAO,MAAM,IAAIlkC,CAAQ;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,YAAY;AACd,WAAOmF,EAAA,MAAK4Y,IAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,cAAc;AAChB,WAAO5Y,EAAA,MAAK4Y,IAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,aAAa;AACf,WAAO5Y,EAAA,MAAK4Y,IAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,gBAAgB;AAClB,WAAO5Y,EAAA,MAAK4Y,IAAO;AAAA,EACrB;AAAA,EACA,IAAI,WAAW;AACb,WAAO,KAAK,OAAO,SAAQ;AAAA,EAC7B;AAAA,EACA,IAAI,SAAS9E,GAAU;AACrB,IAAA9T,EAAA,MAAK89B,IAAAiB,IAAO,SAAS,IAAIjrB,CAAQ;AAAA,EACnC;AAAA,EACA,IAAI,SAAS;AACX,WAAOnX,GAAK,KAAK,OAAO,MAAM;AAAA,EAChC;AAAA,EACA,IAAI,OAAO+iB,GAAQ;AACjB,IAAAvd,EAAA,MAAK27B,IAAAkB,IAAL,WAAwBtf;AAAA,EAC1B;AAAA,EASA,IAAI,QAAQ;AACV,WAAO/iB,GAAK,KAAK,OAAO,KAAK;AAAA,EAC/B;AAAA,EACA,IAAI,MAAM4X,GAAO;AACf,IAAApS,EAAA,MAAK27B,IAAAmB,IAAL,WAAuB1qB;AAAA,EACzB;AAAA,EASA,IAAI,cAAc;AAChB,WAAO5X,GAAK,KAAK,OAAO,WAAW;AAAA,EACrC;AAAA,EACA,IAAI,YAAYzpF,GAAM;AACpB,IAAAivF,EAAA,MAAK27B,IAAAoB,IAAL,WAA6BhsH;AAAA,EAC/B;AAAA,EAiBA,IAAI,SAAS;AACX,WAAOypF,GAAK,KAAK,OAAO,MAAM;AAAA,EAChC;AAAA,EACA,IAAI,OAAOqX,GAAQ;AACjB,IAAA7R,EAAA,MAAK27B,IAAAqB,IAAL,WAAwBnrB;AAAA,EAC1B;AAAA,EAUA,IAAI,eAAe;AACjB,WAAOrX,GAAK,KAAK,OAAO,YAAY;AAAA,EACtC;AAAA,EACA,IAAI,aAAasX,GAAM;AACrB,IAAA9R,EAAA,MAAK27B,IAAAsB,IAAL,WAA8BnrB;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0CA,MAAM,KAAKloG,GAAS;AAClB,WAAOi0F,EAAA,MAAK+9B,IAAY,KAAKhyH,CAAO;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,MAAMA,GAAS;AACnB,WAAOi0F,EAAA,MAAK+9B,IAAY,MAAMhyH,CAAO;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,gBAAgB/0B,GAAQ+0B,GAAS;AACrC,WAAOi0F,EAAA,MAAK+9B,IAAY,gBAAgB/mJ,GAAQ+0B,CAAO;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,eAAe/0B,GAAQ+0B,GAAS;AACpC,WAAOi0F,EAAA,MAAK+9B,IAAY,eAAe/mJ,GAAQ+0B,CAAO;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,sBAAsBA,GAAS;AAC7B,WAAOi0F,EAAA,MAAK+9B,IAAY,sBAAsBhyH,CAAO;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,qBAAqBA,GAAS;AAC5B,WAAOi0F,EAAA,MAAK+9B,IAAY,qBAAqBhyH,CAAO;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAeA,GAAS;AACtB,IAAAi0F,EAAA,MAAK+9B,IAAY,eAAehyH,CAAO;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAaA,GAAS;AACpB,IAAAi0F,EAAA,MAAK4Y,IAAO,OAAO,YAAY,QAAQ7sG,CAAO;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAmBA,GAAS;AAC1B,IAAAi0F,EAAA,MAAK4Y,IAAO,OAAO,mBAAmB,QAAQ7sG,CAAO;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAIA,eAAeA,GAAS;AACtB,WAAOi0F,EAAA,MAAK+9B,IAAY,eAAehyH,CAAO;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkBA,GAAS;AACzB,WAAOi0F,EAAA,MAAK+9B,IAAY,kBAAkBhyH,CAAO;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAamoG,GAAMnoG,GAAS;AAC1B,WAAOi0F,EAAA,MAAK+9B,IAAY,aAAa7pB,GAAMnoG,CAAO;AAAA,EACpD;AAAA,EACA,UAAU;AACR,UAAM,QAAO,GACbi0F,EAAA,MAAK4Y,IAAO,OAAO,UAAU,IAAI,GACjC,KAAK,SAAS,SAAS;AAAA,EACzB;AACF,GApdEA,KAAA,eACA2Z,KAAA,eACAwL,KAAA,eALFD,KAAA,eAQMgB,KAAS,WAAG;AACd,SAAO9+B,EAAA,MAAK4Y,IAAO,UAAS;AAC9B,GACImmB,KAAM,WAAG;AACX,SAAO,KAAK;AACd,GAiFAf,KAAA,eACA5B,KAAW,WAAG;AACZ,QAAMzpJ,IAAK,KAAK,KAAK,EAAE,OAAAw1E,GAAO,MAAA56C,GAAM,UAAAwxG,GAAU,eAAAsgB,EAAa,IAAK,KAAK,QAAQC,IAAS/xH,EAAI,GAAIxtD,IAAO0jJ,GAAmBsb,EAAQ,CAAE,GAAGwgB,IAAWx/K,MAAS,YAAY,GAAGu/K,IAAS,UAAU,EAAE,GAAGv/K,CAAI,KAAKu/K,IAAS,SAAS,SAASr2E,IAAed,EAAK;AACxP,EAAAy4C;AAAA,IACE,KAAK;AAAA,IACL;AAAA,IACA,GAAG2+B,CAAQ,aAAat2E,IAAe,MAAMA,CAAY,KAAK;AAAA,EACpE,GACQ,CAACwyC,OAAa9oH,KAAA,QAAAA,EAAI,aAAa,cACjCotH,EAAA,MAAKi+B,IAAmB,KACxBrrJ,KAAA,QAAAA,EAAI,gBAAgB;AAExB,GACA6rJ,KAAiB,WAAG;AAClB,QAAM1hH,IAAc,KAAK,YAAY,YAAY,cAAc;AAC/D,OAAK,OAAO,YAAY,IAAIA,CAAW,GACvC8jF,GAAa,KAAK,IAAI,oBAAoB9jF,CAAW,GACrDqlF,EAAA,MAAK27B,IAAAe,IAAL;AACF,GACAX,KAAa,WAAG;AACd,EAAI,KAAK,OAAO,QAAO,KAAMl+B,EAAA,MAAK89B,IAAAgB,MAAW,KAAK,aAAa,MAAK,IAC/D,KAAK,aAAa,KAAI;AAC7B,GACAb,KAAqB,WAAG;AACtB,MAAIxyK,GAAYqkK,EAAgB,GAAG;AACjC,SAAK,cAAcrkK,GAAYqkK,EAAgB,CAAC;AAChD;AAAA,EACF;AACA,QAAM0P,IAAS;AAAA,IACb,aAAa,WAAW;AACtB,aAAO,KAAK,OAAO,KAAI;AAAA,IACzB;AAAA,IACA,iBAAiB,WAAW;AAC1B,YAAM30E,IAAQ,KAAK,OAAO,UAAS;AACnC,aAAO,CAAC,CAACA,KAASynD,GAAmBznD,CAAK;AAAA,IAC5C;AAAA,IACA,qBAAqB,WAAW;AAC9B,aAAO,KAAK,OAAO,YAAW;AAAA,IAChC;AAAA,IACA,iBAAiB,WAAW;AAC1B,aAAO,KAAK,SAAS;AAAA,IACvB;AAAA,IACA,kBAAkB,WAAW;AAC3B,YAAM,EAAE,SAAAyqE,GAAS,SAAA9E,GAAS,SAAAqG,EAAO,IAAK,KAAK;AAC3C,aAAOvB,EAAO,MAAO,CAAC9E,EAAO,KAAMqG,EAAO;AAAA,IAC5C;AAAA,IACA,cAAc,WAAW;AACvB,YAAM,EAAE,OAAAh4K,MAAU,KAAK;AACvB,aAAO,CAAC,CAACA,EAAK;AAAA,IAChB;AAAA,IACA,uBAAuB,WAAW;AAChC,YAAM,EAAE,eAAAmhK,MAAkB,KAAK;AAC/B,aAAO,CAAC,CAACA,EAAa;AAAA,IACxB;AAAA,EACN,GACU38H,IAAQ;AAAA,IACZ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,qBAAqB;AAAA,IACrB,kBAAkB;AAAA,IAClB,aAAa;AAAA,IACb,qBAAqB;AAAA,IACrB,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,uBAAuB;AAAA,EAC7B;AACI,aAAW4+G,KAAS8tB,IAAiB;AACnC,UAAMlqI,IAAW,WAAWxC,EAAM4+G,CAAK,KAAKoB,GAAiBpB,CAAK;AAClE,IAAAu9B,EAAO35I,CAAQ,IAAI,WAAW;AAC5B,aAAO,KAAK,OAAOo8G,CAAK,EAAC;AAAA,IAC3B;AAAA,EACF;AACA,SAAOu9B,EAAO,OACd/zK,GAAYqkK,EAAgB,IAAI0P,GAChC,KAAK,cAAcA,CAAM;AAC3B,GACAf,KAAa,SAACz1I,GAAO;AACnB,EAAAA,EAAM,OAAO,IAAI;AACnB,GACA61I,KAAS,WAAG;AACV,MAAIpjC,MAAa,CAAC,KAAK,GAAI;AAC3B,QAAM15E,IAAQ,KAAK,GAAG,aAAaC,IAAS,KAAK,GAAG;AACpD,OAAK,OAAO,MAAM,IAAID,CAAK,GAC3B,KAAK,OAAO,OAAO,IAAIC,CAAM,GAC7B8+E,GAAS,KAAK,IAAI,kBAAkB/+E,IAAQ,IAAI,GAChD++E,GAAS,KAAK,IAAI,mBAAmB9+E,IAAS,IAAI;AACpD,GACA28G,KAAgB,SAACc,GAAW;AAC1B,MAAIhkC,GAAW;AACf,QAAMgkB,IAAUggB,EAAU,UAAU,WAAW;AAC/C,EAAA7+B,GAAa,KAAK,IAAI,gBAAgB6e,CAAO,GAC7C,KAAK,OAAO,QAAQ,IAAIA,CAAO,GAC/Btd,EAAA,MAAK27B,IAAAe,IAAL;AACF,GA6EA5f,KAAY,WAAG;AACb,EAAA9c,EAAA,MAAK27B,IAAAkB,IAAL,WAAwB,KAAK,OAAO,OAAM;AAC5C,GACAA,KAAkB,SAACtf,GAAQ;AACzB,EAAIA,IACF,KAAK,aAAa,QAAQ,UAAU,MAAM1f,EAAA,MAAK+9B,IAAY,OAAO,IAC7D,KAAK,aAAa,QAAQ,UAAU,MAAM/9B,EAAA,MAAK+9B,IAAY,MAAM;AAC1E,GAOAI,KAAW,WAAG;AACZ,EAAAh8B,EAAA,MAAK27B,IAAAmB,IAAL,WAAuB,KAAK,OAAO,MAAK;AAC1C,GACAA,KAAiB,SAAC1qB,GAAO;AACvB,OAAK,aAAa,QAAQ,SAAS,MAAM;AACvC,IAAIvU,EAAA,MAAK89B,IAAAgB,OAAW9+B,EAAA,MAAK89B,IAAAgB,IAAU,SAASvqB,CAAK;AAAA,EACnD,CAAC;AACH,GAOA8pB,KAAiB,WAAG;AAClB,EAAAl8B,EAAA,MAAK27B,IAAAoB,IAAL,WAA6B,KAAK,OAAO,YAAW;AACtD,GACAA,KAAuB,SAAChsH,GAAM;AAC5B,OAAK,aAAa,QAAQ,eAAe,MAAM;AAC7C,UAAM,EAAE,aAAAo+F,MAAgB,KAAK;AAC7B,IAAIp+F,MAASypF,GAAK2U,CAAW,KAC7B3U,GAAK,MAAM;AACT,UAAI,CAACqD,EAAA,MAAK89B,IAAAgB,IAAW;AACrB,YAAM1J,IAAcniB,GAAU//F,GAAM,KAAK,MAAM;AAC/C,MAAI,OAAO,SAASkiH,CAAW,KAC7Bp1B,EAAA,MAAK89B,IAAAgB,IAAU,eAAe1J,CAAW;AAAA,IAE7C,CAAC;AAAA,EACH,CAAC;AACH,GAOAgJ,KAAY,WAAG;AACb,EAAAj8B,EAAA,MAAK27B,IAAAqB,IAAL,WAAwB,KAAK,OAAO,OAAM;AAC5C,GACAA,KAAkB,SAACnrB,GAAQ;AACzB,QAAM0rB,IAAgB5pB,GAAY,GAAG9B,GAAQ,CAAC;AAC9C,OAAK,aAAa,QAAQ,UAAU,MAAM;AACxC,IAAIhU,EAAA,MAAK89B,IAAAgB,OAAW9+B,EAAA,MAAK89B,IAAAgB,IAAU,UAAUY,CAAa;AAAA,EAC5D,CAAC;AACH,GAOApB,KAAkB,WAAG;AACnB,EAAAn8B,EAAA,MAAK27B,IAAAsB,IAAL,WAA8B,KAAK,OAAO,aAAY;AACxD,GACAA,KAAwB,SAACnrB,GAAM;AAC7B,OAAK,aAAa,QAAQ,QAAQ,MAAM;;AACtC,IAAIjU,EAAA,MAAK89B,IAAAgB,SAAWltK,KAAAnG,IAAAu0I,EAAA,MAAK89B,IAAAgB,KAAU,oBAAf,QAAAltK,EAAA,KAAAnG,GAAiCwoJ;AAAA,EACvD,CAAC;AACH,GACAgoB,KAAiB,WAAG;AAClB,EAAA95B,EAAA,MAAK27B,IAAA6B,IAAL,WAA6B,KAAK,OAAO,YAAW;AACtD,GACAA,KAAuB,SAACjY,GAAQ;AAC9B,OAAK,aAAa,QAAQ,eAAe,MAAM;;AAC7C,IAAI1nB,EAAA,MAAK89B,IAAAgB,SAAWltK,KAAAnG,IAAAu0I,EAAA,MAAK89B,IAAAgB,KAAU,mBAAf,QAAAltK,EAAA,KAAAnG,GAAgCi8J;AAAA,EACtD,CAAC;AACH,GACA6W,KAAa,WAAG;;AACd,MAAIqB,IAAe,KAAK,OAAO,QAAO,GAAI5wC,IAAUrmF,GAASi3H,CAAY,IAAI,IAAIvrB,GAAiB,IAAKurB;AACvG,MAAI5wC,KAAA,QAAAA,EAAS,UAAU;AACrB,UAAM,EAAE,QAAAjtI,EAAM,IAAK,KAAK,QAAQ4yJ,IAAWhsG,GAASi3H,CAAY,IAAIA,KAAen0K,IAAA,KAAK,OAAL,gBAAAA,EAAS,IAAIipJ,IAAU/V,GAASwD,EAAA,MAAK27B,IAAA+B,IAAgB,KAAK,IAAI,CAAC;AAClJ,IAAA1gJ,EAAO,MAAM6vG,EAAQ,SAASjtI,EAAM,GAAI2yJ,EAAO,GAAIC,KAAY,MAAM,CAAC;AAAA,EACxE;AACA,EAAA3U,EAAA,MAAK4Y,IAAO,UAAU5pB,GACtBgR,EAAA,MAAK4Y,IAAO,WAAW,WAAW5pB,CAAO,GACzCkO,GAAU,MAAM;;AACd,KAAAzxI,IAAAujI,KAAA,gBAAAA,EAAS,cAAT,QAAAvjI,EAAA,KAAAujI,IACAgR,EAAA,MAAK4Y,IAAO,UAAU,MACtB5Y,EAAA,MAAK4Y,IAAO,WAAW,WAAW,IAAI;AAAA,EACxC,CAAC;AACH,GACAinB,KAAe,WAAG;AAChB,QAAM,EAAE,eAAA9X,GAAe,aAAAC,EAAW,IAAK,KAAK,QAAQ,EAAE,QAAAjmK,EAAM,IAAK,KAAK,QAAQqH,IAAMrH,EAAM;AAC1F,SAAOqH,EAAI,MAAM,GAAGA,EAAI,GAAG,IAAI2+J,EAAa,CAAE,IAAIC,EAAW,CAAE,KAAK;AACtE,GAzWArlJ,EADFlX,IACS,SAAQukK,KACfrtJ,EAFFlX,IAES,SAAQknJ,KAFjBlnJ;AAwdA,MAAMq0K,KAAqBC,GAAY;AACvCv5J,GAAKs5J,IAAoB,cAAc;AACvCt5J,GAAKs5J,IAAoB,eAAe;AACxCt5J,GAAKs5J,IAAoB,UAAU;AACnCt5J,GAAKs5J,IAAoB,UAAU;AACnCt5J,GAAKs5J,IAAoB,aAAa;AACtCt5J,GAAKs5J,IAAoB,OAAO;AAChCt5J,GAAKs5J,IAAoB,WAAW;AACpCt5J,GAAKs5J,IAAoB,aAAa;AACtCt5J,GAAKs5J,IAAoB,YAAY;AACrCt5J,GAAKs5J,IAAoB,eAAe;AACxCt5J,GAAKs5J,IAAoB,UAAU;AACnCt5J,GAAKs5J,IAAoB,QAAQ;AACjCt5J,GAAKs5J,IAAoB,OAAO;AAChCt5J,GAAKs5J,IAAoB,aAAa;AACtCt5J,GAAKs5J,IAAoB,QAAQ;AACjCt5J,GAAKs5J,IAAoB,cAAc;AACvC9qH,GAAO8qH,IAAoB,MAAM;AACjC9qH,GAAO8qH,IAAoB,OAAO;AAClC9qH,GAAO8qH,IAAoB,iBAAiB;AAC5C9qH,GAAO8qH,IAAoB,gBAAgB;AAC3C9qH,GAAO8qH,IAAoB,uBAAuB;AAClD9qH,GAAO8qH,IAAoB,sBAAsB;AACjD9qH,GAAO8qH,IAAoB,gBAAgB;AAC3C9qH,GAAO8qH,IAAoB,cAAc;AACzC9qH,GAAO8qH,IAAoB,oBAAoB;AAC/C9qH,GAAO8qH,IAAoB,gBAAgB;AAC3C9qH,GAAO8qH,IAAoB,mBAAmB;AAC9C9qH,GAAO8qH,IAAoB,cAAc;AAEzC,SAASE,GAAkCC,GAAaC,GAAa;AACnE,SAAO,MAAMD,GAAaC,CAAW,EAAE,KAAK,CAACr5B,MAAQA,EAAI,KAAI,CAAE,EAAE,KAAK,CAACs5B,MAC9D,gBAAgB,KAAKA,CAAQ,IAAI,cAAc,MACvD;AACH;AACA,SAASC,GAAiCH,GAAaC,GAAa;AAClE,SAAO,MAAMD,GAAaC,CAAW,EAAE,KAAK,CAACr5B,MAAQA,EAAI,KAAI,CAAE,EAAE,KAAK,CAACs5B,MAAa;AAClF,UAAME,IAAeC,GAAuBH,CAAQ;AACpD,QAAIE;AACF,aAAOD;AAAA,QACL,WAAW,KAAKC,CAAY,IAAIA,IAAe,IAAI,IAAIA,GAAcJ,CAAW,EAAE;AAAA,QAClFC;AAAA,MACR;AAEI,UAAMrI,IAAa,6BAA6B,KAAKsI,CAAQ,IAAI,cAAc;AAC/E,WAAItI,MAAe,UAAU0I,GAAsBJ,CAAQ,KAAK,OAAO,6BAA6B,KAAKA,CAAQ,KAAKA,EAAS,SAAS,sBAAsB,KACrJ,aAEFtI;AAAA,EACT,CAAC;AACH;AACA,SAASyI,GAAuBH,GAAU;AACxC,QAAM3xJ,IAAU2xJ,EAAS,MAAM,sCAAsC;AACrE,SAAO3xJ,IAAUA,EAAQ,CAAC,EAAE,MAAM;AAAA,CAAI,EAAE,CAAC,EAAE,KAAI,IAAK;AACtD;AACA,SAAS+xJ,GAAsBJ,GAAU;AACvC,QAAMl5I,IAAQk5I,EAAS,MAAM;AAAA,CAAI;AACjC,aAAW5lG,KAAQtzC;AACjB,QAAIszC,EAAK,WAAW,uBAAuB,GAAG;AAC5C,YAAMu5E,IAAW,WAAWv5E,EAAK,MAAM,GAAG,EAAE,CAAC,CAAC;AAC9C,UAAI,CAAC,MAAMu5E,CAAQ;AACjB,eAAOA;AAAA,IAEX;AAEF,SAAO;AACT;AAEA,MAAM0sB,KAA8B,oBAAI,IAAG;;AAC3C,MAAMC,GAAgB;AAAA,EAMpB,YAAYC,GAAYloB,GAAO+U,GAAQoT,IAAgB,CAAA,GAAI;AAN7D,IAAA/gC,EAAA,MAAAghC;AACE,IAAAhhC,EAAA,MAAAihC,IAAc;AACd,IAAAjhC,EAAA,MAAAkhC;AACA,IAAAlhC,EAAA,MAAAmhC;AACA,IAAAnhC,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAAohC;AAEE,IAAAjhC,EAAA,MAAKghC,IAAcL,IACnB3gC,EAAA,MAAK6Y,IAASJ,IACdzY,EAAA,MAAKihC,IAAUzT;AACf,UAAM0T,IAAc,IAAIjT,GAAkB,GAAIkT,IAAa,IAAItf,GAAiB,GAAIuf,IAAe,IAAI1f,GAAmB,GAAI2f,IAAe,IAAI5f,GAAmB,GAAI6f,IAAiB,IAAI7S,GAAqB,GAAI8S,IAAe,IAAIrT,GAAmB,GAAIsT,IAAgB,CAACF,GAAgBC,CAAY;AAC7S,IAAAvhC,EAAA,MAAK+gC,IAAWniC,GAAS,MAAM;AAC7B,YAAM6iC,IAAehpB,EAAM,OAAO,qBAAoB,GAChDipB,IAAUjpB,EAAM,OAAO,gBAAe,IAAK,CAAC2oB,GAAcC,GAAcH,GAAaC,GAAY,GAAGK,GAAe,GAAGZ,CAAa,IAAI,CAACO,GAAYC,GAAcC,GAAcH,GAAa,GAAGM,GAAe,GAAGZ,CAAa;AACrO,aAAOa,IAAe,CAACA,GAAc,GAAGC,CAAO,IAAIA;AAAA,IACrD,CAAC;AACD,UAAM,EAAE,QAAAlF,EAAM,IAAK/jB;AACnB,IAAA+jB,EAAO,QAAQ,IAAImF,GAAalpB,EAAM,OAAO,IAAG,CAAE,CAAC;AACnD,eAAWpvJ,KAAOmzK,EAAO,WAAW;AAClC,YAAMoF,IAAU3hC,EAAA,MAAK8gC,IAAL,WAAgB,KAAK,CAACc,MAAYA,EAAQ,QAAQx4K,CAAG,CAAC;AACtE,UAAI,CAACu4K,EAAS;AACd,YAAM1kG,IAAY0kG,EAAQ,UAAUv4K,CAAG;AACvC,MAAAovJ,EAAM,OAAO,OAAO,IAAIpvJ,CAAG,GAC3BovJ,EAAM,OAAO,UAAU,IAAIv7E,CAAS,GACpCu7E,EAAM,OAAO,iBAAiB,IAAIv7E,CAAS,GAC3C+iE,EAAA,MAAKghC,IAAQ,IAAIW,CAAO,GACxB5hC,EAAA,MAAK8gC,IAAc;AACnB;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU;AACR,UAAMtT,IAASvtB,EAAA,MAAKghC,IAAL;AACf,IAAIhhC,EAAA,MAAK6gC,QACP1+B,EAAA,MAAKy+B,IAAAiB,IAAL,WAAyB7hC,EAAA,MAAK4Y,IAAO,OAAO,OAAM,GAAI2U,IACtDprB,EAAA,MAAKy+B,IAAAkB,IAAL,WAAyBvU,IACzBxtB,EAAA,MAAK8gC,IAAc,MAErB1hJ,EAAOgjH,EAAA,MAAKy+B,IAAAmB,IAAiB,KAAK,IAAI,CAAC,GACvC5iJ,EAAOgjH,EAAA,MAAKy+B,IAAAoB,IAAgB,KAAK,IAAI,CAAC,GACtC7iJ,EAAOgjH,EAAA,MAAKy+B,IAAAqB,IAAS,KAAK,IAAI,CAAC,GAC/B9iJ,EAAOgjH,EAAA,MAAKy+B,IAAAsB,IAAc,KAAK,IAAI,CAAC,GACpC/iJ,EAAOgjH,EAAA,MAAKy+B,IAAAuB,IAAc,KAAK,IAAI,CAAC;AAAA,EACtC;AAmJF;AA5LEtB,KAAA,eACAC,KAAA,eACAC,KAAA,eACAnoB,KAAA,eACAooB,KAAA,eALFJ,KAAA,eA2CEmB,KAAgB,WAAG;AACjB,EAAA/hC,EAAA,MAAK4Y,IAAO,OAAO,kBAAkB;AAAA,IACnC,GAAG8oB,GAAa1hC,EAAA,MAAK4Y,IAAO,OAAO,IAAG,CAAE;AAAA,IACxC,GAAG5Y,EAAA,MAAK+gC,IAAL;AAAA,EACT,CAAK;AACH,GACAiB,KAAe,WAAG;;AAChB,QAAM,EAAE,QAAAzF,MAAWv8B,EAAA,MAAK4Y,KAClBwpB,IAAU7F,EAAO,QAAO,GAAI8F,IAAgB1lC,GAAK4/B,EAAO,MAAM,GAAG+F,IAAYngC,EAAA,MAAKy+B,IAAA2B,IAAL,WAAoBF,GAAeD;AACtH,QAD0I32K,IAAA22K,EAAQ,CAAC,MAAT,gBAAA32K,EAAY,QAAO,CAAC62K,EAAU,OAAO,CAACA,EAAU,MAC7K;AACX,UAAM,EAAE,aAAArsC,MAAgBsmC,GAAQiG,IAAcnzB,GAAsBpZ,GAAa,GAAGk4B,IAAQ,IAAI,gBAAe;AAC/G,mBAAQ;AAAA,MACNiU,EAAQ;AAAA,QACN,CAACrgL,MAAW4mD,GAAS5mD,EAAO,GAAG,KAAKA,EAAO,SAAS,MAAM,MAAMA,EAAO,KAAK;AAAA,UAC1E,QAAQ;AAAA,UACR,aAAAygL;AAAA,UACA,QAAQrU,EAAM;AAAA,QAC1B,CAAW,EAAE,KAAK,CAACtnB,OACP9kJ,EAAO,OAAO8kJ,EAAI,QAAQ,IAAI,cAAc,KAAK,MACjD25B,GAAY,IAAIz+K,EAAO,KAAKA,EAAO,IAAI,GAChCA,EACR,EAAE,MAAM,MAAMA,CAAM,IAAIA;AAAA,MACnC;AAAA,IACA,EAAQ,KAAK,CAAC0gL,MAAa;AACnB,UAAItU,EAAM,OAAO,QAAS;AAC1B,YAAMuU,IAAavgC,EAAA,MAAKy+B,IAAA2B,IAAL,WAAoB5lC,GAAK4/B,EAAO,MAAM,GAAGkG;AAC5D,MAAA5lC,GAAI,GACC6lC,EAAW,OACd1iC,EAAA,MAAK4Y,IAAO,OAAO,SAAS;AAAA,QAC1B,SAAS;AAAA,QACT,MAAM;AAAA,MAClB,CAAW;AAAA,IAEL,CAAC,GACM,MAAMuV,EAAM,MAAK;AAAA,EAC1B;AACA,EAAAtxB,GAAI;AACN,GACA0lC,KAAc,SAACF,GAAeD,GAAS;AACrC,MAAIE,IAAY,EAAE,KAAK,IAAI,MAAM,GAAE,GAAIK,IAAY,MAAMC,IAAe,IAAIvjC,GAAS,kBAAkB,EAAE,QAAQ,EAAE,SAAA+iC,EAAO,EAAE,CAAE,GAAGX,IAAUzhC,EAAA,MAAK8gC,IAAL,YAAiB,EAAE,SAAAthB,GAAS,QAAAE,GAAQ,aAAApO,GAAa,SAAAmD,GAAS,YAAAoc,EAAU,IAAK7wB,EAAA,MAAK4Y,IAAO;AAChO,aAAWxvJ,KAAOg5K,GAAS;AACzB,UAAM7U,IAASkU,EAAQ,KAAK,CAACE,MAAYA,EAAQ,QAAQv4K,CAAG,CAAC;AAC7D,QAAImkK,GAAQ;AACV,MAAA+U,IAAYl5K,GACZu5K,IAAYpV;AACZ;AAAA,IACF;AAAA,EACF;AACA,MAAIvhB,GAAkBs2B,CAAS,GAAG;AAChC,UAAMlR,IAAiB3c,KAAWouB,IAAgBT,EAAQ,KAAK,CAACn/K,MAAMA,EAAE,SAAQmuK,KAAA,gBAAAA,EAAgB,IAAG;AACnG,IAAIz0B,GAAK6iB,CAAO,IACdqR,EAAW,IAAI;AAAA,MACb,QAAQl0B,GAAK+iB,CAAM;AAAA,MACnB,aAAa/iB,GAAK2U,CAAW;AAAA,IACvC,CAAS,IAEDuf,EAAW,IAAI,IAAI,GAEjBgS,MACFP,IAAYO,GACZD,IAAe,IAAIvjC,GAAS,kBAAkB;AAAA,MAC5C,QAAQ,EAAE,SAAS+xB,EAAc;AAAA,IAC3C,CAAS;AAAA,EAEL;AACA,SAAK0R,GAAUT,GAAeC,CAAS,KACrCngC,EAAA,MAAKy+B,IAAAiB,IAAL,WAAyBS,GAAWK,GAAWC,IAE7CD,MAAchmC,GAAKqD,EAAA,MAAKghC,GAAO,KACjC7+B,EAAA,MAAKy+B,IAAAkB,IAAL,WAAyBa,GAAWC,IAE/BN;AACT,GACAT,KAAmB,SAACz4K,GAAKmkK,GAAQxhH,GAAS;AACxC,EAAAi0F,EAAA,MAAK4Y,IAAO,OAAO,iBAAiBxvJ,GAAK2iD,CAAO,GAChDi0F,EAAA,MAAK4Y,IAAO,OAAO,sBAAqB2U,KAAA,gBAAAA,EAAQ,UAAUnkK,OAAQ,WAAW2iD,CAAO;AACtF,GACA+1H,KAAmB,SAACvU,GAAQxhH,GAAS;AACnC,EAAAi0F,EAAA,MAAK4Y,IAAO,eAAe,IAAI,EAAK,GACpC5Y,EAAA,MAAK4Y,IAAO,OAAO,mBAAmB,MAAM7sG,CAAO,GACnDwhH,KAAU5wB,GAAK,MAAA;;AAAM,YAAAlxI,IAAA8hK,EAAO,eAAP,gBAAA9hK,EAAA,KAAA8hK,GAAoBvtB,EAAA,MAAK4Y;AAAA,GAAO,GACrD5Y,EAAA,MAAKghC,IAAQ,IAAIzT,CAAM,GACvBvtB,EAAA,MAAK4Y,IAAO,OAAO,0BAA0B2U,GAAQxhH,CAAO;AAC9D,GACAk2H,KAAQ,WAAG;AACT,QAAMxhL,IAAWu/I,EAAA,MAAK4Y,IAAO,UAAS;AACtC,MAAI,GAACn4J,KAAYk8I,GAAKqD,EAAA,MAAK4Y,IAAO,cAAc,IAChD;AAAA,QAAI5Y,EAAA,MAAK4Y,IAAO,OAAO,QAAO,GAAI;AAChC,MAAA7b,GAAO,MAAMt8I,EAAS,MAAK,GAAIA,EAAS,KAAK,GAC7Cu/I,EAAA,MAAK4Y,IAAO,eAAe,IAAI,EAAI;AACnC;AAAA,IACF;AACA,IAAAjc,GAAK,MAAA;;AAAM,cAAAlxI,IAAAhL,EAAS,eAAT,gBAAAgL,EAAA,KAAAhL;AAAA,KAAuB;AAAA;AACpC,GACAyhL,KAAa,WAAG;AACd,MAAI,CAACliC,EAAA,MAAK4Y,IAAO,iBAAkB;AACnC,QAAMn4J,IAAWu/I,EAAA,MAAK4Y,IAAO,UAAS,GAAI72J,IAASi+I,EAAA,MAAK4Y,IAAO,OAAO,UAAU3iB,IAAc0G,GAAKqD,EAAA,MAAK4Y,IAAO,OAAO,WAAW,GAAGmqB,IAAkBpmC,GAAKqD,EAAA,MAAK4Y,IAAO,OAAO,eAAe;AAC7L,MAAI,CAAAkqB,GAAUriL,KAAA,gBAAAA,EAAU,YAAYsB,CAAM,GAG1C;AAAA,QAAIi+I,EAAA,MAAK4Y,IAAO,OAAO,QAAO,GAAI;AAChC,YAAMuV,IAAQ,IAAI,gBAAe;AACjC,aAAIzf,GAAS3sJ,CAAM,KACbghL,KAAmB,CAAC71B,SACtBkzB,GAAiCr+K,EAAO,KAAK;AAAA,QAC3C,aAAastJ,GAAsBpZ,CAAW;AAAA,QAC9C,QAAQk4B,EAAM;AAAA,MAC1B,CAAW,EAAE,KAAK,CAAC0J,MAAe;AACtB,QAAA73B,EAAA,MAAK4Y,IAAO,OAAO,sBAAsBif,CAAU;AAAA,MACrD,CAAC,EAAE,MAAM/8F,EAAI,IAEN6zE,GAAU5sJ,CAAM,IACzBi+K,GAAkCj+K,EAAO,KAAK;AAAA,QAC5C,aAAastJ,GAAsBpZ,CAAW;AAAA,QAC9C,QAAQk4B,EAAM;AAAA,MACxB,CAAS,EAAE,KAAK,CAAC0J,MAAe;AACtB,QAAA73B,EAAA,MAAK4Y,IAAO,OAAO,sBAAsBif,CAAU;AAAA,MACrD,CAAC,EAAE,MAAM/8F,EAAI,IAEbklE,EAAA,MAAK4Y,IAAO,OAAO,sBAAsB,WAAW,GAEtDjc,GAAK,MAAM;AACT,cAAMgrB,IAAUhrB,GAAKqD,EAAA,MAAK4Y,IAAO,OAAO,OAAO;AAC/C,eAAOn4J,KAAA,gBAAAA,EAAU,WAAWsB,GAAQ4lK,GAAS,MAAM,CAAC9oK,MAAU;AAAA,QAC9D;AAAA,MACF,CAAC,GACM,MAAMsvK,EAAM,MAAK;AAAA,IAC1B;AACA,QAAI;AACF,MAAAxlH,GAAS5mD,EAAO,GAAG,KAAKitJ,GAAW,IAAI,IAAIjtJ,EAAO,GAAG,EAAE,MAAM;AAAA,IAC/D,QAAgB;AAAA,IAChB;AAAA;AACF,GACAogL,KAAa,WAAG;AACd,QAAM5U,IAASvtB,EAAA,MAAKghC,IAAL,YAAgB,EAAE,gBAAAgC,GAAgB,QAAAjhL,GAAQ,eAAAkhL,EAAa,IAAKjjC,EAAA,MAAK4Y,IAAO;AACvF,MAAI,CAAC2U,KAAU,CAACA,EAAO,cAAc,CAACxrK,EAAM,KAAM,CAACkhL,OAAmBD,IAAkB;AACxF,QAAM7U,IAAQ,IAAI,gBAAe,GAAIpiH,IAAU,IAAIszF,GAAS,iBAAiB,EAAE,QAAQt9I,GAAQ;AAC/F,SAAAwrK,EAAO,WAAWxrK,EAAM,GAAIi+I,EAAA,MAAK4Y,KAAQuV,CAAK,EAAE,KAAK,CAAC/lI,MAAQ;AAC5D,IAAA43G,EAAA,MAAK4Y,IAAO,OAAO,iBAAiBxwH,KAAO,IAAI2jB,CAAO;AAAA,EACxD,CAAC,EAAE,MAAM,MAAM;AACb,IAAAi0F,EAAA,MAAK4Y,IAAO,OAAO,iBAAiB,IAAI7sG,CAAO;AAAA,EACjD,CAAC,GACM,MAAM;AACX,IAAAoiH,EAAM,MAAK;AAAA,EACb;AACF;AAEF,SAASuT,GAAat4K,GAAK;AACzB,UAAQ3E,GAAQ2E,CAAG,IAAIA,IAAM,CAACA,CAAG,GAAG,IAAI,CAAC85K,MACnCv6H,GAASu6H,CAAI,IACR,EAAE,KAAKA,GAAM,MAAMC,GAAUD,CAAI,EAAC,IAElC,EAAE,GAAGA,GAAM,MAAMC,GAAUD,EAAK,KAAKA,EAAK,IAAI,EAAC,CAEzD;AACH;AACA,SAASC,GAAU/5K,GAAKrJ,GAAM;AAC5B,SAAI4oD,GAAS5oD,CAAI,KAAKA,EAAK,SAClBA,IACE4oD,GAASv/C,CAAG,KAAKo3K,GAAY,IAAIp3K,CAAG,IACtCo3K,GAAY,IAAIp3K,CAAG,IACjB,CAACrJ,KAAQ2uJ,GAAS,EAAE,KAAAtlJ,GAAK,MAAM,GAAE,CAAE,IACrC,0BACE,CAACrJ,KAAQ4uJ,GAAU,EAAE,KAAAvlJ,GAAK,MAAM,GAAE,CAAE,IACtC,yBACE,CAACu/C,GAASv/C,CAAG,KAAKA,EAAI,WAAW,OAAO,IAC1C,iBACEA,EAAI,SAAS,SAAS,KAAKA,EAAI,SAAS,UAAU,IACpD,kBACEA,EAAI,SAAS,OAAO,KAAK,CAACA,EAAI,SAAS,sBAAsB,KAAK,CAACA,EAAI,SAAS,OAAO,IACzF,gBAEF;AACT;AACA,SAAS05K,GAAU5lL,GAAGE,GAAG;AACvB,UAAOF,KAAA,gBAAAA,EAAG,UAAQE,KAAA,gBAAAA,EAAG,SAAOF,KAAA,gBAAAA,EAAG,WAASE,KAAA,gBAAAA,EAAG;AAC7C;;AAEA,MAAMgmL,GAAO;AAAA,EAIX,YAAYC,GAAW7qB,GAAO;AAJhC,IAAA5Y,EAAA,MAAA0jC;AACE,IAAA1jC,EAAA,MAAA2jC;AACA,IAAA3jC,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAA4jC,IAAc,CAAA;AAEZ,IAAAzjC,EAAA,MAAKwjC,IAAaF,IAClBtjC,EAAA,MAAK6Y,IAASJ,IACdr5H,EAAOgjH,EAAA,MAAKmhC,IAAAG,IAAgB,KAAK,IAAI,CAAC;AAAA,EACxC;AAkBF;AAzBEF,KAAA,eACA3qB,KAAA,eACA4qB,KAAA,eAHFF,KAAA,eASEG,KAAe,WAAG;AAChB,QAAMC,IAAY1jC,EAAA,MAAKujC,IAAL;AAClB,aAAWI,KAAY3jC,EAAA,MAAKwjC;AAC1B,QAAI,CAACE,EAAU,KAAK,CAACllK,MAAMA,EAAE,OAAOmlK,EAAS,EAAE,GAAG;AAChD,YAAM94E,IAAQ84E,EAAS,MAAM3jC,EAAA,MAAK4Y,IAAO,WAAW,QAAQ+qB,EAAS,EAAE;AACvE,MAAI94E,KAAOm1C,EAAA,MAAK4Y,IAAO,WAAW,OAAO/tD,CAAK;AAAA,IAChD;AAEF,aAAW+4E,KAAYF,GAAW;AAChC,UAAMpiJ,IAAKsiJ,EAAS,MAAMlzB,GAAU,SAASkzB,CAAQ;AACrD,IAAK5jC,EAAA,MAAK4Y,IAAO,WAAW,QAAQt3H,CAAE,MACpCsiJ,EAAS,KAAKtiJ,GACd0+G,EAAA,MAAK4Y,IAAO,WAAW,IAAIgrB,CAAQ;AAAA,EAEvC;AACA,EAAA7jC,EAAA,MAAKyjC,IAAcE;AACrB;;UAGFj4K,KAAA,cAA4BnI,GAAU;AAAA,EAAtC;AAAA;AAAA,IAAAs8I,EAAA,MAAAikC;AAOE,IAAAjkC,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAAkkC;AACA,IAAAlkC,EAAA,MAAAmhC,IAAcr8F,GAAO,EAAE;AACvB,IAAAk7D,EAAA,MAAA2jC,IAAa7+F,GAAO,EAAE;AACtB,IAAAk7D,EAAA,MAAAohC,IAAU;AA2BV,IAAAphC,EAAA,MAAAmkC,IAAa;AAAA;AAAA,EA1Bb,UAAU;AACR,IAAAhkC,EAAA,MAAK6Y,IAASvF,GAAe,IAC7BtT,EAAA,MAAK+jC,IAAW,IAAIrD;AAAA,MAClBzgC,EAAA,MAAK+gC;AAAA,MACL/gC,EAAA,MAAK4Y;AAAA,MACL,KAAK,OAAO;AAAA,MACZ,KAAK,OAAO,QAAO;AAAA,IACzB;AAAA,EACE;AAAA,EACA,SAASjmI,GAAI;AACX,IAAAA,EAAG,aAAa,uBAAuB,EAAE;AAAA,EAC3C;AAAA,EACA,UAAUA,GAAI;AACZ,IAAAqtH,EAAA,MAAK8jC,IAAS,QAAO,GACrB,IAAIV,GAAOpjC,EAAA,MAAKujC,KAAYvjC,EAAA,MAAK4Y,GAAM;AACvC,UAAMgmB,IAAS,IAAI,eAAe33B,GAAuB9E,EAAA,MAAK0hC,IAAAhF,IAAU,KAAK,IAAI,CAAC,CAAC;AACnF,IAAAD,EAAO,QAAQjsJ,CAAE;AACjB,UAAMwe,IAAY,IAAI,iBAAiBgxG,EAAA,MAAK0hC,IAAAG,IAAY,KAAK,IAAI,CAAC;AAClE,IAAA7yI,EAAU,QAAQxe,GAAI,EAAE,YAAY,IAAM,WAAW,IAAM,GAC3DwvH,EAAA,MAAK0hC,IAAAhF,IAAL,YACA18B,EAAA,MAAK0hC,IAAAG,IAAL,YACA9mC,GAAU,MAAM;AACd,MAAA0hC,EAAO,WAAU,GACjBztI,EAAU,WAAU;AAAA,IACtB,CAAC;AAAA,EACH;AAAA,EAEA,KAAKna,GAAQ;AACX,IAAAA,KAAA,QAAAA,EAAQ,aAAa,eAAe,SACpC,OAAO,qBAAqBgpH,EAAA,MAAK+jC,GAAU,GAC3ChkC,EAAA,MAAKgkC,IAAa,sBAAsB,MAAM5hC,EAAA,MAAK0hC,IAAAI,IAAL,WAAgBjtJ,EAAO,IACrEkmH,GAAU,MAAM;AACd,aAAO,qBAAqB8C,EAAA,MAAK+jC,GAAU;AAAA,IAC7C,CAAC;AAAA,EACH;AAAA,EAeA,YAAY;AACV,IAAAhkC,EAAA,MAAKihC,IAAU,OACf7+B,EAAA,MAAK0hC,IAAAK,IAAL;AAAA,EACF;AAiDF,GA1GEtrB,KAAA,eACAkrB,KAAA,eACA/C,KAAA,eACAwC,KAAA,eACAvC,KAAA,eA2BA+C,KAAA,eAtCFF,KAAA,eA+CEI,KAAU,SAACjtJ,GAAQ;AACjB,MAAI,CAAC,KAAK,MAAO;AACjB,QAAMu2I,IAAS,KAAK,OAAO,OAAM,GAAI,EAAE,WAAA4W,EAAS,IAAKnkC,EAAA,MAAK4Y;AAC1D,EAAI5Y,EAAA,MAAKghC,QAAYzT,MAAUA,KAAA,gBAAAA,EAAQ,YAAWv2I,KAAU2lH,GAAKwnC,CAAS,MAC1EhiC,EAAA,MAAK0hC,IAAAK,IAAL,YACAnkC,EAAA,MAAKihC,IAAUzT,IACXA,MAAQA,EAAO,SAASv2I,KAAU,OAClC,GAACu2I,KAAU,CAACv2I,MAChBu2I,EAAO,KAAKvtB,EAAA,MAAK4Y,GAAM,EAAE,KAAK,CAACn4J,MAAa;AAC1C,IAAK,KAAK,SACNk8I,GAAK,KAAK,OAAO,MAAM,MAAM4wB,KACjCvtB,EAAA,MAAK4Y,IAAO,OAAO,mBAAmBn4J,CAAQ;AAAA,EAChD,CAAC;AACH,GAKAyjL,KAAgB,WAAG;;AACjB,GAAAz4K,IAAAu0I,EAAA,MAAK4Y,QAAL,QAAAntJ,EAAa,OAAO,mBAAmB;AACzC,GACAozK,KAAS,WAAG;AACV,MAAI,CAAC,KAAK,GAAI;AACd,QAAM,EAAE,QAAAlrB,GAAQ,QAAA4oB,MAAWv8B,EAAA,MAAK4Y,KAAQ72F,IAAQ,KAAK,GAAG,aAAaC,IAAS,KAAK,GAAG;AACtF,EAAK2xF,MACL4oB,EAAO,WAAW,IAAIx6G,CAAK,GAC3Bw6G,EAAO,YAAY,IAAIv6G,CAAM,GACzB2xF,EAAO,OACT7S,GAAS6S,EAAO,IAAI,iBAAiB5xF,IAAQ,IAAI,GACjD++E,GAAS6S,EAAO,IAAI,kBAAkB3xF,IAAS,IAAI;AAEvD,GACAgiH,KAAW,WAAG;AACZ,QAAM5B,IAAU,CAAA,GAAIhyB,IAAS,CAAA,GAAI5nJ,IAAW,KAAK,GAAG;AACpD,aAAWmqB,KAAMnqB;AACf,QAAI,CAAAmqB,EAAG,aAAa,UAAU;AAC9B,UAAIA,aAAc,mBAAmB;AACnC,cAAMvpB,IAAM;AAAA,UACV,IAAIupB,EAAG;AAAA,UACP,KAAKA,EAAG;AAAA,UACR,MAAMA,EAAG;AAAA,QACnB;AACQ,mBAAWnM,KAAQ,CAAC,MAAM,OAAO,SAAS,UAAU,WAAW,OAAO,GAAG;AACvE,gBAAM7hB,IAAQguB,EAAG,aAAa,QAAQnM,CAAI,EAAE;AAC5C,UAAImiC,GAAShkD,CAAK,MAAGyE,EAAIod,CAAI,IAAI,eAAe,KAAKA,CAAI,IAAI7hB,IAAQ,OAAOA,CAAK;AAAA,QACnF;AACA,QAAAy9K,EAAQ,KAAKh5K,CAAG;AAAA,MAClB,WAAWupB,aAAc,kBAAkB;AACzC,cAAMk4E,IAAQ;AAAA,UACZ,KAAKl4E,EAAG;AAAA,UACR,MAAMA,EAAG,MAAM;AAAA,UACf,UAAUA,EAAG;AAAA,UACb,OAAOA,EAAG;AAAA,UACV,SAASA,EAAG;AAAA,UACZ,MAAMA,EAAG,aAAa,WAAW;AAAA,QAC3C;AACQ,QAAAy9H,EAAO,KAAK;AAAA,UACV,IAAIz9H,EAAG,MAAM+9H,GAAU,SAAS7lD,CAAK;AAAA,UACrC,GAAGA;AAAA,QACb,CAAS;AAAA,MACH;AAAA;AAEF,EAAAm1C,EAAA,MAAK+gC,IAAY,IAAIqB,CAAO,GAC5BpiC,EAAA,MAAKujC,IAAW,IAAInzB,CAAM,GAC1BvT,GAAI;AACN,GA/GAl6H,EADFlX,IACS,SAAQ;AAAA,EACb,SAAS,CAAA;AACb,IACEkX,EAJFlX,IAIS,SAAQ,IAAIw3I,GAAM;AAAA,EACvB,QAAQ;AACZ,CAAG,IANHx3I;AAkHA,MAAM24K,KAAuBC,GAAc;AAC3CrvH,GAAOovH,IAAsB,MAAM;;UAEnC34K,KAAA,cAA6BnI,GAAU;AAAA,EAAvC;AAAA;AAAA,IAAAs8I,EAAA,MAAA0kC;AAQE,IAAA1kC,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAA2kC,IAAgB;AAgDhB,IAAA3kC,EAAA,MAAA4kC,IAAoB;AACpB,IAAA5kC,EAAA,MAAA6kC,IAAa;AAAA;AAAA,EAhDb,UAAU;AACR,IAAA1kC,EAAA,MAAK6Y,IAASvF,GAAe;AAAA,EAC/B;AAAA,EACA,SAAS1gI,GAAI;AACX,IAAAA,EAAG,MAAM,UAAU;AAAA,EACrB;AAAA,EACA,UAAUA,GAAI;AACZ,IAAAA,EAAG,aAAa,wBAAwB,EAAE,GAC1CyjI,GAAoBzjI,GAAI,QAAQ,QAAQ,GACxCyjI,GAAoBzjI,GAAI,aAAa,QAAQ;AAC7C,UAAM,EAAE,MAAA+xJ,MAAS,KAAK;AACtB,SAAK,cAAc;AAAA,MACjB,aAAa,MAAMA,EAAI,IAAK,SAAS;AAAA,IAC3C,CAAK,GACD3kC,EAAA,MAAKwkC,IAAgB,KACrBplJ,EAAOgjH,EAAA,MAAKmiC,IAAArlB,IAAa,KAAK,IAAI,CAAC,GACnC9/H,EAAOgjH,EAAA,MAAKmiC,IAAAlG,IAAa,KAAK,IAAI,CAAC,GACnCj/I,EAAOgjH,EAAA,MAAKmiC,IAAAK,IAAe,KAAK,IAAI,CAAC,GACrCxlJ,EAAOgjH,EAAA,MAAKmiC,IAAAM,IAAiB,KAAK,IAAI,CAAC,GACvCzlJ,EAAOgjH,EAAA,MAAKmiC,IAAAO,IAAU,KAAK,IAAI,CAAC,GAChC1lJ,EAAOgjH,EAAA,MAAKmiC,IAAAQ,IAAc,KAAK,IAAI,CAAC,GACpC3lJ,EAAOgjH,EAAA,MAAKmiC,IAAAS,IAAY,KAAK,IAAI,CAAC,GAClCloC,GAAI,GACJkD,EAAA,MAAKwkC,IAAgB;AAAA,EACvB;AAgEF,GA1FE3rB,KAAA,eACA2rB,KAAA,eATFD,KAAA,eAmCErlB,KAAY,WAAG;AACb,QAAM,EAAE,QAAAS,EAAM,IAAK1f,EAAA,MAAK4Y,IAAO;AAC/B,EAAAzW,EAAA,MAAKmiC,IAAAU,IAAL,WAAgBtlB,EAAM,IAAc,UAAT;AAC7B,GACAklB,KAAgB,WAAG;AACjB,QAAM,EAAE,YAAAhR,EAAU,IAAK5zB,EAAA,MAAK4Y,IAAO;AACnC,EAAAzW,EAAA,MAAKmiC,IAAAU,IAAL,WAAepR,MAAe,qBAAqB;AACrD,GACAiR,KAAS,WAAG;AACV,QAAM,EAAE,kBAAAlR,EAAgB,IAAK3zB,EAAA,MAAK4Y,IAAO;AACzC,EAAAzW,EAAA,MAAKmiC,IAAAU,IAAL,WAAerR,MAAqB,cAAc;AACpD,GACAgR,KAAc,WAAG;AACf,QAAM,EAAE,WAAApK,EAAS,IAAKv6B,EAAA,MAAK4Y,IAAO;AAClC,EAAAzW,EAAA,MAAKmiC,IAAAU,IAAL,WAAezK,MAAc,uBAAuB;AACtD,GACA6D,KAAY,WAAG;AACb,QAAM,EAAE,OAAA7pB,GAAO,QAAAP,GAAQ,WAAAkd,EAAS,IAAKlxB,EAAA,MAAK4Y,IAAO;AACjD,EAAAzW,EAAA,MAAKmiC,IAAAU,IAAL,WACEzwB,EAAK,KAAMP,EAAM,MAAO,IAAI,SAAS,GAAG,KAAK,MAAMA,EAAM,KAAMkd,OAAe,KAAK,GAAG,CAAC,KAAK/uB,EAAA,MAAKmiC,IAAAW,IAAL,WAAgB,SAAS;AAEzH,GACAT,KAAA,eACAC,KAAA,eACAK,KAAa,WAAG;AACd,QAAM,EAAE,SAAArO,GAAS,aAAAnlB,MAAgBtR,EAAA,MAAK4Y,IAAO,QAAQssB,IAAYzO,EAAO;AACxE,EAAIz2B,EAAA,MAAKwkC,MAAoB,KAC3B,OAAO,aAAaxkC,EAAA,MAAKykC,GAAU,GACnC1kC,EAAA,MAAK0kC,IAAa,OAAO,WAAW,MAAM;AACxC,QAAI,CAAC,KAAK,MAAO;AACjB,UAAMzf,IAAUroB,GAAK2U,CAAW,GAAG2d,IAAU,KAAK,IAAIjK,IAAUhlB,EAAA,MAAKwkC,GAAiB;AACtF,QAAIvV,KAAW,GAAG;AAChB,YAAMkW,IAAYngB,KAAWhlB,EAAA,MAAKwkC,KAAmBY,IAAaxV,GAAiBX,CAAO;AAC1F,MAAA9sB,EAAA,MAAKmiC,IAAAU,IAAL,WACE,GAAG7iC,EAAA,MAAKmiC,IAAAW,IAAL,WAAgBE,IAAY,iBAAiB,gBAAgB,IAAIC,CAAU;AAAA,IAElF;AACA,IAAArlC,EAAA,MAAKykC,IAAoB,KACzBzkC,EAAA,MAAK0kC,IAAa;AAAA,EACpB,GAAG,GAAG,MACGS,KACTnlC,EAAA,MAAKykC,IAAoB7nC,GAAK2U,CAAW;AAE7C,GACA2zB,KAAU,SAACI,GAAM;;AACf,QAAM,EAAE,cAAA7+G,MAAiB,KAAK;AAC9B,WAAO/6D,IAAA+6D,KAAA,gBAAAA,QAAA,gBAAA/6D,EAAmB45K,KAAQ,QAAOA;AAC3C,GACAN,KAAW,WAAG;AACZ,QAAM,EAAE,OAAAhqK,GAAO,MAAA2pK,EAAI,IAAK,KAAK,QAAQpuB,IAASnU,EAAA,MAAKmiC,IAAAW,IAAL,WAAgBlqK;AAC9D,MAAIilI,EAAA,MAAKukC,IAAe;AACxB,EAAAG,EAAK,IAAI,EAAI;AACb,QAAMpjJ,IAAK,OAAO,WAAW,MAAM,KAAKojJ,EAAK,IAAI,EAAK,GAAG,GAAG;AAC5D,cAAK,MAAM9jC,GAAa,KAAK,IAAI,cAAc0V,CAAM,GACjD3tG,GAAS2tG,CAAM,KACjB,KAAK,SAAS,UAAU,EAAE,QAAQA,EAAM,CAAE,GAErC,MAAM,OAAO,aAAah1H,CAAE;AACrC,GACA0jJ,KAAS,SAACK,GAAM;AACd,QAAM,EAAE,OAAAtqK,MAAU,KAAK;AACvB,EAAAA,EAAM,IAAIsqK,CAAI;AAChB,GAhGA1iK,EADFlX,IACS,SAAQ;AAAA,EACb,cAAc;AAClB,IACEkX,EAJFlX,IAIS,SAAQ,IAAIw3I,GAAM;AAAA,EACvB,OAAO;AAAA,EACP,MAAM;AACV,CAAG,IAPHx3I;;AAoGA,MAAM65K,WAAiBhiL,GAAU;AAAA,EAAjC;AAAA;AAAA,IAAAs8I,EAAA,MAAA2lC;AAKE,IAAA3lC,EAAA,MAAAgZ;AAAA;AAAA,EACA,UAAU;AACR,IAAA7Y,EAAA,MAAK6Y,IAASvF,GAAe,IAC7Bl0H,EAAOgjH,EAAA,MAAKojC,IAAAC,IAAY,KAAK,IAAI,CAAC;AAAA,EACpC;AAAA,EACA,SAAS7yJ,GAAI;AACX,UAAM,EAAE,kBAAAghJ,GAAkB,YAAAC,EAAU,IAAK5zB,EAAA,MAAK4Y,IAAO;AACrD,IAAA9X,GAASnuH,GAAI,kBAAkB,MAAM,GACrCyjI,GAAoBzjI,GAAI,QAAQ,OAAO,GACvC,KAAK,cAAc;AAAA,MACjB,gBAAgBwvH,EAAA,MAAKojC,IAAAE,IAAW,KAAK,IAAI;AAAA,MACzC,mBAAmB7R;AAAA,MACnB,YAAYD;AAAA,IAClB,CAAK,GACDx0I,EAAO,MAAM;AACX,WAAK,SAAS,UAAU,EAAE,QAAQgjH,EAAA,MAAKojC,IAAAE,IAAL,YAAmB;AAAA,IACvD,CAAC,GACDtmJ,EAAOgjH,EAAA,MAAKojC,IAAAG,IAAc,KAAK,IAAI,CAAC,GACpCvmJ,EAAO,MAAM;AACX,YAAM0hI,IAAe+S,EAAU;AAC/B,iBAAW5tD,KAAQ,CAAC,OAAO,SAAS,UAAU,MAAM;AAClD,QAAA86B,GAASnuH,GAAI,WAAWqzF,CAAI,IAAI66C,KAAgB,uBAAuB76C,CAAI,GAAG;AAAA,IAElF,CAAC;AAAA,EACH;AAgBF;AAxCE4yC,KAAA,eALF2sB,KAAA,eA8BEG,KAAa,WAAG;AACd,MAAI,CAAC,KAAK,GAAI;AACd,QAAM,EAAE,gBAAAlsB,EAAc,IAAKxZ,EAAA,MAAK4Y,IAAO,QAAQnmH,IAAW+mH,EAAc;AACxE,EAAA5Y,GAAa,KAAK,IAAI,eAAenuG,IAAW,SAAS,IAAI,GAC7DquG,GAAS,KAAK,IAAI,WAAWruG,IAAW,SAAS,IAAI;AACvD,GACA+yI,KAAW,WAAG;AACZ,QAAM,EAAE,UAAA7I,MAAa38B,EAAA,MAAK4Y,IAAO,QAAQ,EAAE,WAAA+sB,GAAW,kBAAAC,MAAqB,KAAK;AAChF,EAAAjJ,EAAS,eAAegJ,EAAS,MAAO,MAAM3lC,EAAA,MAAK4Y,IAAO,OAAO,cAAa,IAAK+sB,EAAS,GAC5FhJ,EAAS,mBAAmBiJ,EAAgB;AAC9C,GACAH,KAAU,WAAG;AACX,QAAM,EAAE,iBAAAI,EAAe,IAAK7lC,EAAA,MAAK4Y,IAAO;AACxC,SAAOitB,EAAe;AACxB,GA3CAljK,EADI2iK,IACG,SAAQ;AAAA,EACb,WAAW;AAAA,EACX,kBAAkB;AACtB;AA2CA,MAAMQ,WAAsBxiL,GAAU;AAAA,EACpC,SAASqvB,GAAI;AACX,IAAKA,EAAG,MAAM,iBAAemuH,GAASnuH,GAAI,kBAAkB,MAAM;AAAA,EACpE;AACF;;AAEA,MAAMmnG,WAAe8oB,GAAe;AAAA,EAElC,YAAYmjC,GAAU;AACpB,UAAK;AAHT,IAAAnmC,EAAA,MAAAomC;AACE,IAAApmC,EAAA,MAAAqmC;AAmBA,IAAArmC,EAAA,MAAAsmC,IAAe;AACf,IAAAtmC,EAAA,MAAAumC,IAAa;AACb,IAAAvmC,EAAA,MAAAwmC,IAA4B;AAlB1B,IAAArmC,EAAA,MAAKkmC,IAAYF,IACjB5mJ,EAAOgjH,EAAA,MAAK6jC,IAAAK,IAAc,KAAK,IAAI,CAAC;AAAA,EACtC;AAAA,EACA,YAAY;;AACV,KAAA56K,IAAAu0I,EAAA,MAAKomC,QAAL,QAAA36K,EAAA,YACAs0I,EAAA,MAAKqmC,IAA4B;AAAA,EACnC;AAAA,EAaA,KAAKr6H,GAAS;;AACZ,IAAAo2F,EAAA,MAAK6jC,IAAAM,IAAL,YACA,OAAO,qBAAqBtmC,EAAA,MAAKmmC,GAAU,GAC3CpmC,EAAA,MAAKomC,IAAa,MAClB16K,IAAAu0I,EAAA,MAAKomC,QAAL,QAAA36K,EAAA,YACAs0I,EAAA,MAAKqmC,IAA4B,OACjCrmC,EAAA,MAAKmmC,IAAe,OAAO,WAAW,MAAM;AAC1C,MAAAnmC,EAAA,MAAKmmC,IAAe;AACpB,YAAM14K,IAAUwyI,EAAA,MAAKimC,IAAU,QAAO;AACtC,MAAIz4K,KAASA,EAAQ,MAAM,eAAe,SAAS,GACnDmvI,GAAK,MAAMqD,EAAA,MAAKimC,IAAU,SAAS,IAAMl6H,CAAO,CAAC;AAAA,IACnD,KAAGxoC,KAAA3R,IAAAouI,EAAA,MAAKimC,KAAU,cAAf,gBAAA1iK,EAAA,KAAA3R,OAAgC,CAAC;AAAA,EACtC;AAAA,EACA,KAAKm6C,GAAS;AACZ,IAAAo2F,EAAA,MAAK6jC,IAAAM,IAAL,YACA3pC,GAAK,MAAMqD,EAAA,MAAKimC,IAAU,SAAS,IAAOl6H,CAAO,CAAC,GAClDg0F,EAAA,MAAKomC,IAAa,sBAAsB,MAAM;;AAC5C,MAAAhkC,EAAA,MAAK6jC,IAAAM,IAAL,YACAvmC,EAAA,MAAKomC,IAAa;AAClB,YAAM34K,IAAUwyI,EAAA,MAAKimC,IAAU,QAAO;AACtC,UAAIz4K,GAAS;AACX,cAAM+4K,IAAS,MAAM;AACnB,UAAA/4K,EAAQ,MAAM,UAAU,QACxBuyI,EAAA,MAAKqmC,IAA4B;AAAA,QACnC;AAEA,YADmB3uB,GAAajqJ,CAAO,GACvB;AACd,WAAA/B,IAAAu0I,EAAA,MAAKomC,QAAL,QAAA36K,EAAA;AACA,gBAAM+6K,IAAO9mC,GAAYlyI,GAAS,gBAAgB+4K,GAAQ,EAAE,MAAM,IAAM;AACxE,UAAAxmC,EAAA,MAAKqmC,IAA4BI;AAAA,QACnC;AACE,UAAAD,EAAM;AAAA,MAEV;AAAA,IACF,CAAC;AAAA,EACH;AAKF;AA9DEN,KAAA,eADFD,KAAA,eAWEK,KAAa,WAAG;AACd,QAAMt6H,IAAUi0F,EAAA,MAAKimC,IAAU,QAAO;AACtC,MAAI,CAACl6H,GAAS;AACZ,SAAK,KAAI;AACT;AAAA,EACF;AACA,QAAM06H,IAAO,KAAK,KAAK,KAAK,IAAI,GAAGx7D,IAAO,KAAK,KAAK,KAAK,IAAI;AAC7D,EAAA+0B,EAAA,MAAKimC,IAAU,OAAOl6H,GAAS06H,GAAMx7D,CAAI;AAC3C,GACAi7D,KAAA,eACAC,KAAA,eACAC,KAAA,eAqCAE,KAAc,WAAG;AACf,SAAO,aAAatmC,EAAA,MAAKkmC,GAAY,GACrCnmC,EAAA,MAAKmmC,IAAe;AACtB;AAGF,MAAMQ,KAAiBzoK,GAAa;AAEpC,IAAIqjB,KAAK;;AACT,MAAMqlJ,WAAgBrjL,GAAU;AAAA,EAQ9B,cAAc;AACZ,UAAK;AATT,IAAAs8I,EAAA,MAAAgnC;AAIE,IAAAhnC,EAAA,MAAA+jB,IAAM,iBAAiB,EAAEriI,EAAE;AAC3B,IAAAs+G,EAAA,MAAAinC,IAAWniG,GAAO,IAAI;AACtB,IAAAk7D,EAAA,MAAAknC,IAAWpiG,GAAO,IAAI;AACtB,IAAAk7D,EAAA,MAAAmnC,IAAWriG,GAAO,EAAK;AAGrB,QAAI04F,GAAsB;AAC1B,UAAM,EAAE,WAAA4J,MAAc,KAAK;AAC3B,QAAIltD,GAAO;AAAA,MACT,SAASkmB,EAAA,MAAK6mC;AAAA,MACd,SAAS7mC,EAAA,MAAK8mC;AAAA,MACd,WAAAE;AAAA,MACA,OAAOj7H,GAAS06H,GAAMx7D,GAAM;AAC1B,QAAA9rF,EAAO,MAAM;AACX,UAAIg+I,GAAS,KAAIz9B,GAAY3zF,GAAS,SAAS06H,CAAI,GACnD/mC,GAAY3zF,GAAS,QAAQk/D,CAAI;AAAA,QACnC,CAAC,GACD,IAAI00B,GAAiB5zF,CAAO,EAAE,IAAI,cAAc,CAACzuD,MAAMA,EAAE,eAAc,GAAI,EAAE,SAAS,GAAK,CAAE,EAAE,IAAI,cAAcmpL,CAAI,EAAE,IAAI,cAAcx7D,CAAI;AAAA,MAC/I;AAAA,MACA,UAAUk3B,EAAA,MAAKykC,IAAAK,IAAiB,KAAK,IAAI;AAAA,IAC/C,CAAK;AAAA,EACH;AAAA,EACA,SAASt0J,GAAI;AACX,IAAAA,EAAG,MAAM,YAAY,WAAW,UAAU;AAAA,EAC5C;AAAA,EACA,UAAU;AACR,IAAAuuH,GAAewlC,IAAgB;AAAA,MAC7B,SAAS1mC,EAAA,MAAK6mC;AAAA,MACd,SAAS7mC,EAAA,MAAK8mC;AAAA,MACd,SAAS9mC,EAAA,MAAK+mC;AAAA,MACd,eAAe5kC,EAAA,MAAKykC,IAAAM,IAAe,KAAK,IAAI;AAAA,MAC5C,eAAe/kC,EAAA,MAAKykC,IAAAO,IAAe,KAAK,IAAI;AAAA,MAC5C,eAAehlC,EAAA,MAAKykC,IAAAQ,IAAe,KAAK,IAAI;AAAA,MAC5C,eAAejlC,EAAA,MAAKykC,IAAAS,IAAe,KAAK,IAAI;AAAA,IAClD,CAAK;AAAA,EACH;AAmCF;AAtEE1jB,KAAA,eACAkjB,KAAA,eACAC,KAAA,eACAC,KAAA,eAPFH,KAAA,eAwCEM,KAAc,SAACv0J,GAAI;;AACjB,EAAAqtH,EAAA,MAAK6mC,IAAS,IAAIl0J,CAAE;AACpB,MAAI20J,IAAc30J,EAAG,aAAa,oBAAoB;AACtD,EAAI20J,OACF77K,IAAA,KAAK,OAAL,QAAAA,EAAS,aAAa,cAAc67K,CAAW,YAAY,MAE7D1mC,GAAajuH,GAAI,oBAAoBqtH,EAAA,MAAK2jB,GAAG;AAC/C,GACAwjB,KAAc,SAACx0J,GAAI;AACjB,EAAAA,EAAG,gBAAgB,kBAAkB,GACrCA,EAAG,gBAAgB,kBAAkB,GACrCqtH,EAAA,MAAK6mC,IAAS,IAAI,IAAI;AACxB,GACAO,KAAc,SAACz0J,GAAI;AACjB,EAAAA,EAAG,aAAa,MAAMqtH,EAAA,MAAK2jB,GAAG,GAC9BhxI,EAAG,MAAM,UAAU,QACnByjI,GAAoBzjI,GAAI,QAAQ,SAAS,GACzCqtH,EAAA,MAAK8mC,IAAS,IAAIn0J,CAAE;AACtB,GACA00J,KAAc,SAAC10J,GAAI;AACjB,EAAAA,EAAG,gBAAgB,IAAI,GACvBA,EAAG,gBAAgB,MAAM,GACzBqtH,EAAA,MAAK8mC,IAAS,IAAI,IAAI;AACxB,GACAG,KAAgB,SAAC3uB,GAAW;AAC1B,QAAMvsG,IAAUi0F,EAAA,MAAK6mC,IAAL,YAAiBr5K,IAAUwyI,EAAA,MAAK8mC,IAAL;AAC3C,EAAI/6H,KACF60F,GAAa70F,GAAS,oBAAoBusG,IAAYtY,EAAA,MAAK2jB,MAAM,IAAI;AAEvE,aAAWhxI,KAAM,CAAC,KAAK,IAAIo5B,GAASv+C,CAAO;AACzC,IAAAmlB,KAAMiuH,GAAajuH,GAAI,gBAAgB2lI,CAAS;AAElD,EAAAtY,EAAA,MAAK+mC,IAAS,IAAIzuB,CAAS;AAC7B,GAxEA31I,EADIgkK,IACG,SAAQ;AAAA,EACb,WAAW;AACf;;AAyEA,MAAMY,WAAuBjkL,GAAU;AAAA,EACrC,cAAc;AACZ,UAAK;AAFT,IAAAs8I,EAAA,MAAA4nC;AAGI,QAAIpK,GAAsB;AAAA,EAC5B;AAAA,EACA,UAAUzqJ,GAAI;AACZ,IAAAuqH;AAAA,MACE6Z,GAA4B,MAAM;AAChC,YAAI,CAAC,KAAK,aAAc;AACxB,QAAA5U,EAAA,MAAKqlC,IAAAC,IAAL;AACA,cAAMC,IAAUvpK,GAAWuoK,EAAc;AACzC,QAAAxpC,GAAU,MAAM;AACd,gBAAMr6E,IAASs/E,EAAA,MAAKqlC,IAAAG,IAAL;AACf,UAAA9kH,KAAU6kH,EAAQ,cAAc7kH,CAAM;AAAA,QACxC,CAAC;AAAA,MACH,CAAC;AAAA,IACP;AAAA,EACE;AASF;AA1BA2kH,KAAA,eAkBEC,KAAO,WAAG;AACR,QAAM5kH,IAASs/E,EAAA,MAAKqlC,IAAAG,IAAL,YAAmBD,IAAUvpK,GAAWuoK,EAAc;AACrE,EAAA7jH,KAAU6kH,EAAQ,cAAc7kH,CAAM;AACxC,GACA8kH,KAAU,WAAG;AACX,QAAMv1I,IAAY,KAAK,GAAG;AAC1B,UAAOA,KAAA,gBAAAA,EAAW,eAAc,aAAYA,KAAA,gBAAAA,EAAW,aAAa,aAAY,WAAWA,IAAY,KAAK;AAC9G;;AAGF,MAAMw1I,WAAuBtkL,GAAU;AAAA,EAMrC,cAAc;AACZ,UAAK;AAPT,IAAAs8I,EAAA,MAAAioC;AAQI,QAAIzK,GAAsB;AAC1B,UAAM,EAAE,WAAA14D,MAAc,KAAK;AAC3B,SAAK,cAAc;AAAA,MACjB,kBAAkBA;AAAA,IACxB,CAAK;AAAA,EACH;AAAA,EACA,SAAS/xF,GAAI;AACX,IAAAwvH,EAAA,MAAK0lC,IAAAJ,IAAL,WAAa90J,IACb,OAAO,OAAOA,EAAG,OAAO;AAAA,MACtB,UAAU;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,IACb,CAAK;AAAA,EACH;AAAA,EACA,UAAUA,GAAI;AACZ,IAAAwvH,EAAA,MAAK0lC,IAAAJ,IAAL,WAAa90J;AACb,UAAM+0J,IAAUvpK,GAAWuoK,EAAc;AACzC,IAAAxpC,GAAU,MAAMwqC,EAAQ,cAAc/0J,CAAE,CAAC,GACzCuqH;AAAA,MACE6Z,GAA4B,MAAM;AAChC,QAAK,KAAK,gBACV53H,EAAOgjH,EAAA,MAAK0lC,IAAAC,IAAgB,KAAK,IAAI,CAAC;AAAA,MACxC,CAAC;AAAA,IACP;AAAA,EACE;AAkBF;AAnDAD,KAAA,eAkCEJ,KAAO,SAAC90J,GAAI;AAEV,EADgBxU,GAAWuoK,EAAc,EACjC,cAAc/zJ,CAAE;AAC1B,GACAm1J,KAAe,WAAG;AAChB,QAAM,EAAE,SAAAC,EAAO,IAAK5pK,GAAWuoK,EAAc;AAC7C,MAAI,CAACqB,EAAO,EAAI;AAChB,QAAM,EAAE,WAAArjE,GAAW,QAAQsjE,GAAY,aAAAntD,EAAW,IAAK,KAAK;AAC5D,SAAOm8B,GAAc,KAAK,IAAI7U,EAAA,MAAK0lC,IAAAI,IAAL,YAAoBvjE,KAAa;AAAA,IAC7D,eAAe;AAAA,IACf,SAASmW,EAAW;AAAA,IACpB,SAASmtD,EAAU;AAAA,EACzB,CAAK;AACH,GACAC,KAAW,WAAG;AACZ,SAAO9pK,GAAWuoK,EAAc,EAAE,QAAO;AAC3C,GAjDA/jK,EADIilK,IACG,SAAQ;AAAA,EACb,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,aAAa;AACjB;;AAgDA,MAAMM,WAA+BtlC,GAAe;AAAA,EAKlD,YAAYmjC,GAAU;AACpB,UAAK;AANT,IAAAnmC,EAAA,MAAAuoC;AAIE,IAAAvoC,EAAA,MAAAqmC;AAGE,IAAAlmC,EAAA,MAAKkmC,IAAYF,IACjB,IAAI3I,GAAsB,GACtB2I,EAAS,eACX,IAAIloB,GAAiBkoB,EAAS,WAAW;AAAA,EAE7C;AAAA,EACA,UAAU;AACR,UAAM,EAAE,UAAAx9H,MAAa,KAAK;AAC1B,SAAK,cAAc;AAAA,MACjB,gBAAgBy3F,EAAA,MAAKimC,IAAU;AAAA,MAC/B,gBAAgB9jC,EAAA,MAAKgmC,IAAAC,IAAe,KAAK,IAAI;AAAA,MAC7C,iBAAiB,MAAM7/H,EAAQ,IAAK,SAAS;AAAA,IACnD,CAAK;AAAA,EACH;AAAA,EACA,SAAS51B,GAAI;AACX,IAAAyjI,GAAoBzjI,GAAI,YAAY,GAAG,GACvCyjI,GAAoBzjI,GAAI,QAAQ,QAAQ,GACxCyjI,GAAoBzjI,GAAI,QAAQ,QAAQ;AAAA,EAC1C;AAAA,EACA,UAAUA,GAAI;AACZ,UAAMgtI,IAAS9I,GAAQlkI,GAAIwvH,EAAA,MAAKgmC,IAAAE,IAAc,KAAK,IAAI,CAAC;AACxD,eAAWtoL,KAAQ,CAAC,SAAS,YAAY;AACvC,MAAA4/J,EAAO,IAAI5/J,GAAMoiJ,EAAA,MAAKgmC,IAAAG,IAAe,KAAK,IAAI,GAAG;AAAA,QAC/C,SAAS;AAAA,MACjB,CAAO;AAAA,EAEL;AAyBF;AAtDErC,KAAA,eAJFkC,KAAA,eAkCEC,KAAc,WAAG;AACf,SAAOG,GAAWvoC,EAAA,MAAKimC,IAAU,WAAU,CAAE;AAC/C,GACAuC,KAAU,SAACx/I,GAAO;AAChB,EAAI+1G,GAAciB,EAAA,MAAKimC,IAAU,UAAU,KACzCjmC,EAAA,MAAKimC,IAAU,WAAW,IAAI,CAAClpL,MAAM,CAACA,CAAC;AAE3C,GACAsrL,KAAa,SAACr/I,GAAO;AAEnB,MADiB,KAAK,OAAO,SAAQ,KAAM,KAAK,GAAG,aAAa,eAAe,GACjE;AACZ,IAAAA,EAAM,eAAc,GACpBA,EAAM,yBAAwB;AAC9B;AAAA,EACF;AACA,EAAAA,EAAM,eAAc,IACnBg3G,EAAA,MAAKimC,IAAU,WAAW9jC,EAAA,MAAKgmC,IAAAK,KAAY,KAAK,MAAMx/I,CAAK;AAC9D,GACAs/I,KAAc,SAACt/I,GAAO;AACpB,EAAI,KAAK,OAAO,eACdA,EAAM,eAAc,GACpBA,EAAM,yBAAwB;AAElC,GAxDArmB,EADIulK,IACG,SAAQ;AAAA,EACb,UAAU;AACd;;UAyDAz8K,KAAA,cAA2BnI,GAAU;AAAA,EAYnC,cAAc;AACZ,UAAK;AARP,IAAAs8I,EAAA,MAAA6oC,IAAW/jG,GAAO,EAAK;AASrB,QAAIwjG,GAAuB;AAAA,MACzB,YAAYloC,EAAA,MAAKyoC;AAAA,IACvB,CAAK;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EARA,IAAI,UAAU;AACZ,WAAOzoC,EAAA,MAAKyoC,IAAL;AAAA,EACT;AAOF,GAbEA,KAAA,eAJA9lK,EADFlX,IACS,SAAQ;AAAA,EACb,UAAU;AAAA,EACV,gBAAgB;AACpB,IAJAA;AAmBA,MAAMi9K,KAAsBC,GAAa;AACzCniK,GAAKkiK,IAAqB,SAAS;;UAEnCj9K,KAAA,cAA4BnI,GAAU;AAAA,EAGpC,cAAc;AACZ,UAAK;AAJT,IAAAs8I,EAAA,MAAAgpC;AAEE,IAAAhpC,EAAA,MAAAgZ;AAGE,QAAIsvB,GAAuB;AAAA,MACzB,YAAY/lC,EAAA,MAAKymC,IAAAC,IAAW,KAAK,IAAI;AAAA,MACrC,SAAS1mC,EAAA,MAAKymC,IAAAE,IAAS,KAAK,IAAI;AAAA,IACtC,CAAK;AAAA,EACH;AAAA,EACA,UAAU;AACR,IAAA/oC,EAAA,MAAK6Y,IAASvF,GAAe;AAC7B,UAAM,EAAE,YAAAmiB,GAAY,oBAAAuT,EAAkB,IAAK/oC,EAAA,MAAK4Y,IAAO;AACvD,SAAK,cAAc;AAAA,MACjB,eAAemwB;AAAA,MACf,kBAAkBvT;AAAA,MAClB,cAAcrzB,EAAA,MAAKymC,IAAAI,IAAU,KAAK,IAAI;AAAA,MACtC,eAAe9W,GAAU,MAAM,CAACsD,EAAU,CAAE;AAAA,IAClD,CAAK;AAAA,EACH;AAAA,EACA,SAAS7iJ,GAAI;AACX,IAAAA,EAAG,aAAa,sBAAsB,SAAS,GAC/C0jI,GAAa1jI,GAAIwvH,EAAA,MAAKymC,IAAAK,IAAiB,KAAK,IAAI,CAAC;AAAA,EACnD;AAiBF,GAtCErwB,KAAA,eAFFgwB,KAAA,eAwBEE,KAAQ,SAAC9/I,GAAO;AAEd,EADeg3G,EAAA,MAAK4Y,IAAO,OACpB,eAAe5vH,CAAK;AAC7B,GACA6/I,KAAU,WAAG;AACX,QAAM,EAAE,oBAAA7Q,GAAoB,qBAAAD,EAAmB,IAAK/3B,EAAA,MAAK4Y,IAAO;AAChE,SAAOof,EAAkB,MAAO,aAAaD,EAAmB,MAAO;AACzE,GACAiR,KAAS,WAAG;AACV,QAAM,EAAE,oBAAAhR,GAAoB,qBAAAD,EAAmB,IAAK/3B,EAAA,MAAK4Y,IAAO;AAChE,SAAOof,EAAkB,MAAO,aAAaD,EAAmB;AAClE,GACAkR,KAAgB,WAAG;AACjB,QAAM,EAAE,qBAAAlR,EAAmB,IAAK/3B,EAAA,MAAK4Y,IAAO;AAC5C,SAAO,WAAWmf,EAAmB,CAAE;AACzC,GAtCAp1J,EADFlX,IACS,SAAQy8K,GAAuB,QADxCz8K;;UA0CAA,KAAA,cAA+BnI,GAAU;AAAA,EAGvC,cAAc;AACZ,UAAK;AAJT,IAAAs8I,EAAA,MAAAspC;AAEE,IAAAtpC,EAAA,MAAAgZ;AAGE,QAAIsvB,GAAuB;AAAA,MACzB,YAAY/lC,EAAA,MAAK+mC,IAAAL,IAAW,KAAK,IAAI;AAAA,MACrC,SAAS1mC,EAAA,MAAK+mC,IAAAJ,IAAS,KAAK,IAAI;AAAA,IACtC,CAAK;AAAA,EACH;AAAA,EACA,UAAU;AACR,IAAA/oC,EAAA,MAAK6Y,IAASvF,GAAe;AAC7B,UAAM,EAAE,eAAAuhB,GAAe,uBAAAmG,EAAqB,IAAK/6B,EAAA,MAAK4Y,IAAO;AAC7D,SAAK,cAAc;AAAA,MACjB,eAAemiB;AAAA,MACf,kBAAkBnG;AAAA,MAClB,cAAczyB,EAAA,MAAK+mC,IAAAF,IAAU,KAAK,IAAI;AAAA,MACtC,eAAe9W,GAAU,MAAM,CAAC0C,EAAa,CAAE;AAAA,IACrD,CAAK;AAAA,EACH;AAAA,EACA,SAASjiJ,GAAI;AACX,IAAAA,EAAG,aAAa,sBAAsB,aAAa,GACnD0jI,GAAa1jI,GAAIwvH,EAAA,MAAK+mC,IAAAD,IAAiB,KAAK,IAAI,CAAC;AAAA,EACnD;AAiBF,GAtCErwB,KAAA,eAFFswB,KAAA,eAwBEJ,KAAQ,SAAC9/I,GAAO;AAEd,EADeg3G,EAAA,MAAK4Y,IAAO,OACpB,kBAAkB5vH,CAAK;AAChC,GACA6/I,KAAU,WAAG;AACX,QAAM,EAAE,oBAAA7Q,GAAoB,qBAAAD,EAAmB,IAAK/3B,EAAA,MAAK4Y,IAAO;AAChE,SAAOof,EAAkB,MAAO,iBAAiBD,EAAmB,MAAO;AAC7E,GACAiR,KAAS,WAAG;AACV,QAAM,EAAE,oBAAAhR,GAAoB,qBAAAD,EAAmB,IAAK/3B,EAAA,MAAK4Y,IAAO;AAChE,SAAOof,EAAkB,MAAO,iBAAiBD,EAAmB;AACtE,GACAkR,KAAgB,WAAG;AACjB,QAAM,EAAE,qBAAAlR,EAAmB,IAAK/3B,EAAA,MAAK4Y,IAAO;AAC5C,SAAO,eAAemf,EAAmB,CAAE;AAC7C,GAtCAp1J,EADFlX,IACS,SAAQy8K,GAAuB,QADxCz8K;;UA0CAA,KAAA,cAAyBnI,GAAU;AAAA,EAGjC,cAAc;AACZ,UAAK;AAJT,IAAAs8I,EAAA,MAAAupC;AAEE,IAAAvpC,EAAA,MAAAgZ;AAGE,QAAIsvB,GAAuB;AAAA,MACzB,YAAY/lC,EAAA,MAAKgnC,IAAAN,IAAW,KAAK,IAAI;AAAA,MACrC,aAAa;AAAA,MACb,SAAS1mC,EAAA,MAAKgnC,IAAAL,IAAS,KAAK,IAAI;AAAA,IACtC,CAAK;AAAA,EACH;AAAA,EACA,UAAU;AACR,IAAA/oC,EAAA,MAAK6Y,IAASvF,GAAe;AAC7B,UAAM,EAAE,QAAAqM,GAAQ,OAAAlL,EAAK,IAAKxU,EAAA,MAAK4Y,IAAO;AACtC,SAAK,cAAc;AAAA,MACjB,eAAe8G;AAAA,MACf,cAAclL;AAAA,IACpB,CAAK;AAAA,EACH;AAAA,EACA,SAAS7hI,GAAI;AACX,IAAAA,EAAG,aAAa,sBAAsB,MAAM,GAC5C0jI,GAAa1jI,GAAI,MAAM;AAAA,EACzB;AASF,GA7BEimI,KAAA,eAFFuwB,KAAA,eAuBEL,KAAQ,SAAC9/I,GAAO;AACd,QAAMogJ,IAASppC,EAAA,MAAK4Y,IAAO;AAC3B,EAAAzW,EAAA,MAAKgnC,IAAAN,IAAL,aAAoBO,EAAO,MAAMpgJ,CAAK,IAAIogJ,EAAO,KAAKpgJ,CAAK;AAC7D,GACA6/I,KAAU,WAAG;AACX,QAAM,EAAE,QAAAnpB,EAAM,IAAK1f,EAAA,MAAK4Y,IAAO;AAC/B,SAAO,CAAC8G,EAAM;AAChB,GA7BA/8I,EADFlX,IACS,SAAQy8K,GAAuB,QADxCz8K;;UAiCAA,KAAA,cAA4BnI,GAAU;AAAA,EAGpC,cAAc;AACZ,UAAK;AAJT,IAAAs8I,EAAA,MAAAypC;AAEE,IAAAzpC,EAAA,MAAAgZ;AAGE,QAAIsvB,GAAuB;AAAA,MACzB,YAAY/lC,EAAA,MAAKknC,IAAAR,IAAW,KAAK,IAAI;AAAA,MACrC,aAAa;AAAA,MACb,SAAS1mC,EAAA,MAAKknC,IAAAP,IAAS,KAAK,IAAI;AAAA,IACtC,CAAK;AAAA,EACH;AAAA,EACA,UAAU;AACR,IAAA/oC,EAAA,MAAK6Y,IAASvF,GAAe,IAC7B,KAAK,cAAc;AAAA,MACjB,eAAelR,EAAA,MAAKknC,IAAAR,IAAW,KAAK,IAAI;AAAA,MACxC,kBAAkB,MAAM,CAAC1mC,EAAA,MAAKknC,IAAAC,IAAL;AAAA,MACzB,eAAepX,GAAU/vB,EAAA,MAAKknC,IAAAC,IAAU,KAAK,IAAI,CAAC;AAAA,IACxD,CAAK;AAAA,EACH;AAAA,EACA,SAAS32J,GAAI;AACX,IAAAA,EAAG,aAAa,sBAAsB,SAAS,GAC/C0jI,GAAa1jI,GAAI,UAAU;AAAA,EAC7B;AAYF,GAhCEimI,KAAA,eAFFywB,KAAA,eAuBEP,KAAQ,SAAC9/I,GAAO;AACd,EAAAg3G,EAAA,MAAK4Y,IAAO,OAAO,eAAe5vH,CAAK;AACzC,GACA6/I,KAAU,WAAG;AACX,QAAM,EAAE,WAAAtO,EAAS,IAAKv6B,EAAA,MAAK4Y,IAAO,QAAQ/tD,IAAQ0vE,EAAS;AAC3D,SAAO,CAAC,CAAC1vE,KAASynD,GAAmBznD,CAAK;AAC5C,GACAy+E,KAAS,WAAG;AACV,QAAM,EAAE,aAAAC,EAAW,IAAKvpC,EAAA,MAAK4Y,IAAO;AACpC,SAAO,CAAC2wB,EAAW;AACrB,GAhCA5mK,EADFlX,IACS,SAAQy8K,GAAuB,QADxCz8K;;UAoCAA,KAAA,cAA+BnI,GAAU;AAAA,EAMvC,cAAc;AACZ,UAAK;AAPT,IAAAs8I,EAAA,MAAA4pC;AAKE,IAAA5pC,EAAA,MAAAgZ;AAGE,QAAIsvB,GAAuB;AAAA,MACzB,YAAY/lC,EAAA,MAAKqnC,IAAAX,IAAW,KAAK,IAAI;AAAA,MACrC,aAAa;AAAA,MACb,SAAS1mC,EAAA,MAAKqnC,IAAAV,IAAS,KAAK,IAAI;AAAA,IACtC,CAAK;AAAA,EACH;AAAA,EACA,UAAU;AACR,IAAA/oC,EAAA,MAAK6Y,IAASvF,GAAe;AAC7B,UAAM,EAAE,YAAAugB,EAAU,IAAK5zB,EAAA,MAAK4Y,IAAO,QAAQR,IAAcjW,EAAA,MAAKqnC,IAAAC,IAAa,KAAK,IAAI;AACpF,SAAK,cAAc;AAAA,MACjB,eAAe7V;AAAA,MACf,kBAAkBxb;AAAA,MAClB,eAAe8Z,GAAU,MAAM,CAAC9Z,EAAW,CAAE;AAAA,IACnD,CAAK;AAAA,EACH;AAAA,EACA,SAASzlI,GAAI;AACX,IAAAA,EAAG,aAAa,sBAAsB,YAAY,GAClD0jI,GAAa1jI,GAAI,YAAY;AAAA,EAC/B;AAaF,GAlCEimI,KAAA,eALF4wB,KAAA,eA2BEV,KAAQ,SAAC9/I,GAAO;AACd,QAAMogJ,IAASppC,EAAA,MAAK4Y,IAAO,QAAQ5hI,IAAS,KAAK,OAAO,OAAM;AAC9D,EAAAmrH,EAAA,MAAKqnC,IAAAX,IAAL,aAAoBO,EAAO,eAAepyJ,GAAQgS,CAAK,IAAIogJ,EAAO,gBAAgBpyJ,GAAQgS,CAAK;AACjG,GACA6/I,KAAU,WAAG;AACX,QAAM,EAAE,YAAAjV,EAAU,IAAK5zB,EAAA,MAAK4Y,IAAO;AACnC,SAAOgb,EAAU;AACnB,GACA6V,KAAY,WAAG;AACb,QAAM,EAAE,eAAAhU,EAAa,IAAKz1B,EAAA,MAAK4Y,IAAO;AACtC,SAAO6c,EAAa;AACtB,GArCA9yJ,EADFlX,IACS,SAAQ;AAAA,EACb,GAAGy8K,GAAuB;AAAA,EAC1B,QAAQ;AACZ,IAJAz8K;;UAyCAA,KAAA,cAAyBnI,GAAU;AAAA,EAGjC,cAAc;AACZ,UAAK;AAJT,IAAAs8I,EAAA,MAAA8pC;AAEE,IAAA9pC,EAAA,MAAAgZ;AAGE,QAAIsvB,GAAuB;AAAA,MACzB,YAAY/lC,EAAA,MAAKunC,IAAAb,IAAW,KAAK,IAAI;AAAA,MACrC,aAAa;AAAA,MACb,SAAS1mC,EAAA,MAAKunC,IAAAZ,IAAS,KAAK,IAAI;AAAA,IACtC,CAAK;AAAA,EACH;AAAA,EACA,UAAU;AACR,IAAA/oC,EAAA,MAAK6Y,IAASvF,GAAe,IAC7B,KAAK,cAAc;AAAA,MACjB,cAAclR,EAAA,MAAKunC,IAAAb,IAAW,KAAK,IAAI;AAAA,MACvC,cAAc1mC,EAAA,MAAKunC,IAAAV,IAAU,KAAK,IAAI;AAAA,IAC5C,CAAK;AAAA,EACH;AAAA,EACA,SAASr2J,GAAI;AACX,IAAAA,EAAG,aAAa,0BAA0B,EAAE,GAC5CA,EAAG,aAAa,sBAAsB,MAAM,GAC5C0jI,GAAa1jI,GAAI,MAAM;AAAA,EACzB;AAeF,GAnCEimI,KAAA,eAFF8wB,KAAA,eAuBEZ,KAAQ,SAAC9/I,GAAO;AACd,QAAMogJ,IAASppC,EAAA,MAAK4Y,IAAO;AAC3B,EAAAzW,EAAA,MAAKunC,IAAAb,IAAL,aAAoBO,EAAO,OAAOpgJ,CAAK,IAAIogJ,EAAO,KAAKpgJ,CAAK;AAC9D,GACA6/I,KAAU,WAAG;AACX,QAAM,EAAE,OAAAt0B,GAAO,QAAAP,EAAM,IAAKhU,EAAA,MAAK4Y,IAAO;AACtC,SAAOrE,EAAK,KAAMP,EAAM,MAAO;AACjC,GACAg1B,KAAS,WAAG;AACV,QAAM,EAAE,OAAAz0B,GAAO,QAAAP,MAAWhU,EAAA,MAAK4Y,IAAO,QAAQ+wB,IAAU31B,EAAM;AAC9D,MAAIO,EAAK,KAAMo1B,MAAY,EAAG,QAAO;AAChC,MAAIA,KAAW,IAAK,QAAO;AAC3B,MAAIA,IAAU,IAAK,QAAO;AACjC,GAnCAhnK,EADFlX,IACS,SAAQy8K,GAAuB,QADxCz8K;;UAuCAA,KAAA,cAAwBnI,GAAU;AAAA,EAGhC,cAAc;AACZ,UAAK;AAJT,IAAAs8I,EAAA,MAAAgqC;AAEE,IAAAhqC,EAAA,MAAAgZ;AAGE,QAAIsvB,GAAuB;AAAA,MACzB,YAAY/lC,EAAA,MAAKynC,IAAAf,IAAW,KAAK,IAAI;AAAA,MACrC,aAAa;AAAA,MACb,SAAS1mC,EAAA,MAAKynC,IAAAd,IAAS,KAAK,IAAI;AAAA,IACtC,CAAK;AAAA,EACH;AAAA,EACA,UAAU;AACR,IAAA/oC,EAAA,MAAK6Y,IAASvF,GAAe;AAC7B,UAAM,EAAE,kBAAAsgB,EAAgB,IAAK3zB,EAAA,MAAK4Y,IAAO,QAAQR,IAAcjW,EAAA,MAAKynC,IAAAH,IAAa,KAAK,IAAI;AAC1F,SAAK,cAAc;AAAA,MACjB,eAAe9V;AAAA,MACf,kBAAkBvb;AAAA,MAClB,eAAe8Z,GAAU,MAAM,CAAC9Z,EAAW,CAAE;AAAA,IACnD,CAAK;AAAA,EACH;AAAA,EACA,SAASzlI,GAAI;AACX,IAAAA,EAAG,aAAa,sBAAsB,KAAK,GAC3C0jI,GAAa1jI,GAAI,KAAK;AAAA,EACxB;AAaF,GAlCEimI,KAAA,eAFFgxB,KAAA,eAwBEd,KAAQ,SAAC9/I,GAAO;AACd,QAAMogJ,IAASppC,EAAA,MAAK4Y,IAAO;AAC3B,EAAAzW,EAAA,MAAKynC,IAAAf,IAAL,aAAoBO,EAAO,qBAAqBpgJ,CAAK,IAAIogJ,EAAO,sBAAsBpgJ,CAAK;AAC7F,GACA6/I,KAAU,WAAG;AACX,QAAM,EAAE,kBAAAlV,EAAgB,IAAK3zB,EAAA,MAAK4Y,IAAO;AACzC,SAAO+a,EAAgB;AACzB,GACA8V,KAAY,WAAG;AACb,QAAM,EAAE,qBAAA/T,EAAmB,IAAK11B,EAAA,MAAK4Y,IAAO;AAC5C,SAAO8c,EAAmB;AAC5B,GAlCA/yJ,EADFlX,IACS,SAAQy8K,GAAuB,QADxCz8K;;UAsCAA,KAAA,cAAyBnI,GAAU;AAAA,EAMjC,cAAc;AACZ,UAAK;AAPT,IAAAs8I,EAAA,MAAAiqC;AAKE,IAAAjqC,EAAA,MAAAgZ;AAGE,QAAIwkB,GAAsB;AAAA,EAC5B;AAAA,EACA,UAAU;AACR,IAAAr9B,EAAA,MAAK6Y,IAASvF,GAAe;AAC7B,UAAM,EAAE,SAAAojB,EAAO,IAAKz2B,EAAA,MAAK4Y,IAAO,QAAQ,EAAE,SAAAqW,EAAO,IAAK,KAAK,QAAQ7W,IAAcjW,EAAA,MAAK0nC,IAAAJ,IAAa,KAAK,IAAI;AAC5G,SAAK,cAAc;AAAA,MACjB,SAAAxa;AAAA,MACA,gBAAgBwH;AAAA,MAChB,kBAAkBre;AAAA,MAClB,eAAe8Z,GAAU,MAAM,CAAC9Z,EAAW,CAAE;AAAA,IACnD,CAAK;AAAA,EACH;AAAA,EACA,SAASzlI,GAAI;AACX,IAAAyjI,GAAoBzjI,GAAI,YAAY,GAAG,GACvCyjI,GAAoBzjI,GAAI,QAAQ,QAAQ,GACxCyjI,GAAoBzjI,GAAI,QAAQ,QAAQ,GACxCA,EAAG,aAAa,sBAAsB,MAAM,GAC5C0jI,GAAa1jI,GAAIwvH,EAAA,MAAK0nC,IAAAZ,IAAiB,KAAK,IAAI,CAAC;AAAA,EACnD;AAAA,EACA,UAAUt2J,GAAI;AACZ,IAAAkkI,GAAQlkI,GAAIwvH,EAAA,MAAK0nC,IAAAf,IAAS,KAAK,IAAI,CAAC;AAAA,EACtC;AAeF,GAvCElwB,KAAA,eALFixB,KAAA,eA8BEJ,KAAY,WAAG;AACb,QAAM,EAAE,SAAArV,EAAO,IAAKp0B,EAAA,MAAK4Y,IAAO;AAChC,SAAOwb,EAAO;AAChB,GACA6U,KAAgB,WAAG;AACjB,QAAM,EAAE,SAAAha,MAAY,KAAK;AACzB,SAAO,QAAQA,EAAO,IAAK,IAAI,YAAY,UAAU,IAAIA,EAAO,CAAE;AACpE,GACA6Z,KAAQ,SAAC9/I,GAAO;AACd,QAAM,EAAE,SAAAimI,GAAS,UAAA1mH,EAAQ,IAAK,KAAK;AACnC,MAAIA,EAAQ,EAAI;AAChB,QAAM,EAAE,aAAA+oG,EAAW,IAAKtR,EAAA,MAAK4Y,IAAO,QAAQkxB,IAASx4B,EAAW,IAAK2d,EAAO;AAC5E,EAAAjvB,EAAA,MAAK4Y,IAAO,OAAO,KAAKkxB,GAAQ9gJ,CAAK;AACvC,GA1CArmB,EADFlX,IACS,SAAQ;AAAA,EACb,UAAU;AAAA,EACV,SAAS;AACb,IAJAA;;UA8CAA,KAAA,cAAyBnI,GAAU;AAAA,EAKjC,cAAc;AACZ,UAAK;AANT,IAAAs8I,EAAA,MAAAmqC;AAIE,IAAAnqC,EAAA,MAAAgZ;AAGE,QAAIwkB,GAAsB;AAAA,EAC5B;AAAA,EACA,UAAU;AACR,IAAAr9B,EAAA,MAAK6Y,IAASvF,GAAe;AAC7B,UAAM,EAAE,UAAA9qG,EAAQ,IAAK,KAAK,QAAQ,EAAE,MAAAgF,GAAM,UAAA4mH,MAAan0B,EAAA,MAAK4Y,IAAO,QAAQnmH,IAAW,MAAM,CAAC8a,EAAI;AACjG,SAAK,cAAc;AAAA,MACjB,aAAa4mH;AAAA,MACb,eAAe1hI;AAAA,MACf,iBAAiBy/H,GAAU,MAAM3pH,EAAQ,KAAM4rH,EAAQ,CAAE;AAAA,MACzD,eAAejC,GAAUz/H,CAAQ;AAAA,IACvC,CAAK;AAAA,EACH;AAAA,EACA,SAAS9f,GAAI;AACX,IAAAyjI,GAAoBzjI,GAAI,YAAY,GAAG,GACvCyjI,GAAoBzjI,GAAI,QAAQ,QAAQ,GACxCyjI,GAAoBzjI,GAAI,QAAQ,QAAQ,GACxCA,EAAG,aAAa,sBAAsB,MAAM;AAAA,EAC9C;AAAA,EACA,UAAUA,GAAI;AACZ,IAAAkkI,GAAQlkI,GAAIwvH,EAAA,MAAK4nC,IAAAjB,IAAS,KAAK,IAAI,CAAC;AAAA,EACtC;AAMF,GA7BElwB,KAAA,eAJFmxB,KAAA,eA4BEjB,KAAQ,SAAC9/I,GAAO;AACd,QAAM,EAAE,UAAAuf,EAAQ,IAAK,KAAK,QAAQ,EAAE,UAAA4rH,EAAQ,IAAKn0B,EAAA,MAAK4Y,IAAO;AAC7D,EAAIrwG,EAAQ,KAAM4rH,OAClBn0B,EAAA,MAAK4Y,IAAO,OAAO,eAAe5vH,CAAK;AACzC,GA/BArmB,EADFlX,IACS,SAAQ;AAAA,EACb,UAAU;AACd,IAHAA;AAmCA,MAAMu+K,KAAc,IAAI/mC,GAAM;AAAA,EAC5B,KAAK;AAAA,EACL,KAAK;AAAA,EACL,OAAO;AAAA,EACP,MAAM;AAAA,EACN,cAAc;AAAA,EACd,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,IAAI,SAAS;AACX,WAAO,KAAK,YAAY,KAAK,WAAW,KAAK;AAAA,EAC/C;AAAA,EACA,IAAI,WAAW;AACb,WAAOgnC,GAAS,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK;AAAA,EAChD;AAAA,EACA,IAAI,cAAc;AAChB,WAAO,KAAK,WAAW;AAAA,EACzB;AAAA,EACA,IAAI,cAAc;AAChB,WAAOA,GAAS,KAAK,KAAK,KAAK,KAAK,KAAK,YAAY;AAAA,EACvD;AAAA,EACA,IAAI,iBAAiB;AACnB,WAAO,KAAK,cAAc;AAAA,EAC5B;AACF,CAAC;AACD,SAASA,GAASlwJ,GAAKC,GAAKr1B,GAAO;AACjC,QAAMiiC,IAAQ5M,IAAMD,GAAKq+E,IAASzzG,IAAQo1B;AAC1C,SAAO6M,IAAQ,IAAIwxE,IAASxxE,IAAQ;AACtC;;AAEA,MAAMsjJ,WAAuCtnC,GAAe;AAAA,EAG1D,YAAY/hJ,GAAM;AAChB,UAAK;AAJT,IAAA++I,EAAA,MAAAuqC;AACE,IAAAvqC,EAAA,MAAAwqC;AACA,IAAAxqC,EAAA,MAAAyqC;AAGE,IAAAtqC,EAAA,MAAKqqC,IAAQvpL;AAAA,EACf;AAAA,EACA,UAAU8xB,GAAI;AACZ,IAAAotH,EAAA,MAAKsqC,IAAY,IAAI,qBAAqB,CAACvmK,MAAY;;AACrD,OAAAlS,KAAAnG,IAAAu0I,EAAA,MAAKoqC,KAAM,aAAX,QAAAx4K,EAAA,KAAAnG,GAAsBqY,GAASk8H,EAAA,MAAKqqC;AAAA,IACtC,GAAGrqC,EAAA,MAAKoqC,GAAK,IACbpqC,EAAA,MAAKqqC,IAAU,QAAQ13J,CAAE,GACzBuqH,GAAUiF,EAAA,MAAKgoC,IAAAvpB,IAAc,KAAK,IAAI,CAAC;AAAA,EACzC;AAQF;AApBEwpB,KAAA,eACAC,KAAA,eAFFF,KAAA;AAAA;AAAA;AAiBEvpB,KAAa,WAAG;;AACd,GAAAn1J,IAAAu0I,EAAA,MAAKqqC,QAAL,QAAA5+K,EAAgB,cAChBs0I,EAAA,MAAKsqC,IAAY;AACnB;AAGF,MAAMC,KAAgBrsK,GAAa,GAC7BssK,KAAwBtsK,GAAa;AAE3C,SAASusK,GAAgBzwJ,GAAKC,GAAKr1B,GAAOgD,GAAM;AAC9C,SAAOmuJ,GAAY/7H,GAAKmqF,GAAMv/G,GAAOkxJ,GAAyBluJ,CAAI,CAAC,GAAGqyB,CAAG;AAC3E;AACA,SAASywJ,GAAiB1wJ,GAAKC,GAAKi6H,GAAMtsJ,GAAM;AAC9C,QAAM+iL,IAAY50B,GAAY,GAAG7B,GAAM,CAAC,GAAGrtH,IAAQ5M,IAAMD,GAAK4wJ,IAAO/jJ,IAAQ8jJ,GAAWE,IAAYD,IAAOhjL,GAAMkjL,IAAQljL,IAAO,KAAK,MAAMijL,CAAS;AACpJ,SAAO7wJ,IAAM8wJ;AACf;AAEA,MAAMC,KAAqB;AAAA,EACzB,MAAM;AAAA,EACN,WAAW;AAAA,EACX,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,WAAW;AACb;;AACA,MAAMC,WAA+BnoC,GAAe;AAAA,EAIlD,YAAYmjC,GAAUvtB,GAAO;AAC3B,UAAK;AALT,IAAA5Y,EAAA,MAAAorC;AACE,IAAAprC,EAAA,MAAAqmC;AACA,IAAArmC,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAAyqC;AA8BA,IAAAzqC,EAAA,MAAAokB,IAAY;AACZ,IAAApkB,EAAA,MAAAqrC,IAAS;AACT,IAAArrC,EAAA,MAAAsrC,IAAmB;AAwHnB;AAAA;AAAA;AAAA,IAAAtrC,EAAA,MAAAurC;AACA,IAAAvrC,EAAA,MAAAwrC,IAAgB;AA+DhB,IAAAxrC,EAAA,MAAAyrC,IAAyBzjC;AAAA,MACvB,CAAC5+G,MAAU;AACT,QAAAm5G,EAAA,MAAK6oC,IAAAM,IAAL,WAAyBnpC,EAAA,MAAK6oC,IAAAO,IAAL,WAAsBviJ,IAAQA;AAAA,MACzD;AAAA,MACA;AAAA,MACA,EAAE,SAAS,GAAI;AAAA,IACnB;AA3NI,IAAA+2G,EAAA,MAAKkmC,IAAYF,IACjBhmC,EAAA,MAAK6Y,IAASJ;AAAA,EAChB;AAAA,EACA,UAAU;AACR,IAAIpX,GAAmBmpC,EAAqB,KAC1CxqC,EAAA,MAAKsqC,IAAYlsK,GAAWosK,EAAqB;AAAA,EAErD;AAAA,EACA,UAAU53J,GAAI;AACZ,IAAAwM,EAAOgjH,EAAA,MAAK6oC,IAAAQ,IAAsB,KAAK,MAAM74J,CAAE,CAAC,GAChDwM,EAAOgjH,EAAA,MAAK6oC,IAAAS,IAAwB,KAAK,MAAM94J,CAAE,CAAC,GAC9CqtH,EAAA,MAAKimC,IAAU,gBAAc9mJ,EAAOgjH,EAAA,MAAK6oC,IAAAU,IAAmB,KAAK,IAAI,CAAC;AAAA,EAC5E;AAgNF;AAjOEzF,KAAA,eACArtB,KAAA,eACAyxB,KAAA,eAHFW,KAAA,eAmBEU,KAAkB,WAAG;;AACnB,QAAM,EAAE,SAAAjsB,EAAO,IAAKzf,EAAA,MAAK4Y,IAAO;AAChC,MAAI6G,EAAO,MAAO,YAAY,CAACzf,EAAA,MAAKimC,IAAU,gBAAgB;AAC5D,IAAAlmC,EAAA,MAAKikB,IAAY;AACjB;AAAA,EACF;AAIA,EAHAjkB,EAAA,MAAKikB,KAAYv4J,IAAAu0I,EAAA,MAAK4Y,IAAO,OAAO,OAAnB,gBAAAntJ,EAAuB;AAAA,IACtC;AAAA,MAEGu0I,EAAA,MAAKgkB,OACV,IAAIrkB,GAAiBK,EAAA,MAAKgkB,GAAS,EAAE,IAAI,cAAc7hB,EAAA,MAAK6oC,IAAAW,IAAc,KAAK,IAAI,GAAG;AAAA,IACpF,SAAS;AAAA,EACf,CAAK,EAAE,IAAI,aAAaxpC,EAAA,MAAK6oC,IAAAY,IAAa,KAAK,IAAI,GAAG,EAAE,SAAS,IAAO;AACtE,GACA5nB,KAAA,eACAinB,KAAA,eACAC,KAAA,eACAS,KAAa,SAAC3iJ,GAAO;AACnB,EAAA+2G,EAAA,MAAKkrC,IAASjiJ,EAAM,QAAQ,CAAC;AAC/B,GACA4iJ,KAAY,SAAC5iJ,GAAO;AAClB,MAAIg2G,GAAOgB,EAAA,MAAKirC,GAAM,KAAKn0B,GAAkB9tH,CAAK,EAAG;AACrD,QAAM+U,IAAQ/U,EAAM,QAAQ,CAAC,GAAG6iJ,IAAQ9tI,EAAM,UAAUiiG,EAAA,MAAKirC,IAAO,SAASa,IAAQ/tI,EAAM,UAAUiiG,EAAA,MAAKirC,IAAO,SAASc,IAAa,KAAK,OAAO,SAAQ;AAC3J,EAAI,CAACA,KAAc,KAAK,IAAID,CAAK,IAAI,KAGjCC,MACJ/iJ,EAAM,eAAc,GAChB,KAAK,IAAI6iJ,CAAK,IAAI,OACpB9rC,EAAA,MAAKkrC,IAASltI,IACdgiG,EAAA,MAAKmrC,IAAmB,KAAK,OAAO,MAAK,IACzC/oC,EAAA,MAAK6oC,IAAAgB,IAAL,WAAsBhsC,EAAA,MAAKkrC,KAAkBliJ;AAEjD,GACAwiJ,KAAqB,SAAC74J,GAAI;AACxB,QAAM,EAAE,QAAAs5J,MAAW,KAAK;AAExB,EADAvsC,GAAY/sH,GAAI,SAASwvH,EAAA,MAAK6oC,IAAAtN,IAAS,KAAK,IAAI,CAAC,GAC7C,EAAAuO,EAAM,KAAMjsC,EAAA,MAAKimC,IAAU,WAAU,MACzC,IAAItmC,GAAiBhtH,CAAE,EAAE,IAAI,SAASwvH,EAAA,MAAK6oC,IAAA1uB,IAAS,KAAK,IAAI,CAAC,EAAE,IAAI,WAAWna,EAAA,MAAK6oC,IAAAzuB,IAAW,KAAK,IAAI,CAAC,EAAE,IAAI,gBAAgBpa,EAAA,MAAK6oC,IAAAxN,IAAgB,KAAK,IAAI,CAAC,EAAE,IAAI,eAAer7B,EAAA,MAAK6oC,IAAAkB,IAAe,KAAK,IAAI,CAAC,EAAE,IAAI,gBAAgB/pC,EAAA,MAAK6oC,IAAAvN,IAAgB,KAAK,IAAI,CAAC,EAAE,IAAI,eAAet7B,EAAA,MAAK6oC,IAAAmB,IAAe,KAAK,IAAI,CAAC;AAC3T,GACAV,KAAuB,SAAC94J,GAAI;AAC1B,EAAIqtH,EAAA,MAAKimC,IAAU,WAAU,KAAM,CAAC,KAAK,OAAO,cAChD,IAAItmC,GAAiB,QAAQ,EAAE,IAAI,aAAawC,EAAA,MAAK6oC,IAAAoB,IAAqB,KAAK,IAAI,GAAG,EAAE,SAAS,GAAI,CAAE,EAAE,IAAI,eAAepsC,EAAA,MAAKqrC,IAAuB,KAAK,IAAI,CAAC,EAAE,IAAI,aAAalpC,EAAA,MAAK6oC,IAAAqB,IAAqB,KAAK,IAAI,GAAG;AAAA,IACzN,SAAS;AAAA,EACf,CAAK;AACH,GACA3O,KAAQ,WAAG;AACT,EAAAv7B,EAAA,MAAK6oC,IAAAM,IAAL,WAAyB,KAAK,OAAO,MAAK;AAC5C,GACAgB,KAAY,SAACt2I,GAAU+V,GAAS;;AAC9B,QAAM,EAAE,OAAApnD,GAAO,KAAAo1B,GAAK,KAAAC,GAAK,UAAAuyJ,EAAQ,IAAK,KAAK,QACrCC,IAAe,KAAK,IAAIzyJ,EAAG,GAAI,KAAK,IAAIic,GAAUhc,EAAG,CAAE,CAAC;AAC9D,EAAAr1B,EAAM,IAAI6nL,CAAY;AACtB,QAAMxjJ,IAAQ,KAAK,YAAY,gBAAgB,EAAE,QAAQwjJ,GAAc,SAAAzgI,GAAS;AAGhF,MAFA,KAAK,SAAS/iB,CAAK,IACnBp3B,KAAAnG,IAAAu0I,EAAA,MAAKimC,KAAU,kBAAf,QAAAr0K,EAAA,KAAAnG,GAA+Bu9B,IAC3BujJ,EAAQ,GAAI;AACd,UAAM/lB,IAAS,KAAK,YAAY,qBAAqB,EAAE,QAAQgmB,GAAc,SAAAzgI,GAAS;AACtF,SAAK,SAASy6G,CAAM,IACpBhjJ,KAAAD,IAAAy8H,EAAA,MAAKimC,KAAU,sBAAf,QAAAziK,EAAA,KAAAD,GAAmCijJ;AAAA,EACrC;AACF,GACA8kB,KAAmB,SAAC3mL,GAAOonD,GAAS;AAClC,QAAM,EAAE,cAAA0gI,GAAc,UAAAF,EAAQ,IAAK,KAAK;AACxC,EAAAE,EAAa,IAAI9nL,CAAK,GACtB,KAAK,SAAS,wBAAwB,EAAE,QAAQA,GAAO,SAAAonD,GAAS,GAC5DwgI,EAAQ,KACVpqC,EAAA,MAAK6oC,IAAAsB,IAAL,WAAkB3nL,GAAOonD;AAE7B,GACAw/H,KAAgB,SAACviJ,GAAO;AACtB,MAAI0jJ,GAAmBnmE,IAAO,KAAK,GAAG,yBAAyB,EAAE,KAAAxsF,GAAK,KAAAC,MAAQ,KAAK;AACnF,MAAI,KAAK,OAAO,YAAW,MAAO,YAAY;AAC5C,UAAM,EAAE,QAAQ2yJ,GAAa,QAAQC,EAAW,IAAKrmE;AACrD,IAAAmmE,KAAqBC,IAAc3jJ,EAAM,WAAW4jJ;AAAA,EACtD,WACM5sC,EAAA,MAAKirC,OAAUrxK,GAASomI,EAAA,MAAKkrC,GAAgB,GAAG;AAClD,UAAM,EAAE,OAAAnpH,EAAK,IAAKi+E,EAAA,MAAKgkB,IAAU,yBAAyB/P,KAAQjrH,EAAM,UAAUg3G,EAAA,MAAKirC,IAAO,WAAWlpH,GAAOn7B,IAAQ5M,EAAG,IAAKD,EAAG,GAAIs5G,IAAOzsG,IAAQ,KAAK,IAAIqtH,CAAI;AACnK,IAAAy4B,KAAqBz4B,IAAO,IAAIjU,EAAA,MAAKkrC,MAAmB73C,IAAO2M,EAAA,MAAKkrC,MAAmB73C,KAAQzsG;AAAA,EACjG,OAAO;AACL,UAAM,EAAE,MAAMimJ,GAAW,OAAOC,EAAU,IAAKvmE;AAC/C,IAAAmmE,KAAqB1jJ,EAAM,UAAU6jJ,KAAaC;AAAA,EACpD;AAEF,SAAO,KAAK;AAAA,IACV/yJ,EAAG;AAAA,IACH,KAAK;AAAA,MACHC,EAAG;AAAA,MACHgmH,EAAA,MAAKimC,IAAU;AAAA,QACbwE,GAAiB1wJ,EAAG,GAAIC,EAAG,GAAI0yJ,GAAmB1sC,EAAA,MAAKimC,IAAU,QAAO,CAAE;AAAA,MACpF;AAAA,IACA;AAAA,EACA;AACE,GACAzI,KAAe,SAACx0I,GAAO;AACrB,OAAK,OAAO,SAAS,IAAI,EAAI;AAC/B,GACAkjJ,KAAc,SAACljJ,GAAO;AACpB,QAAM,EAAE,UAAAujJ,MAAa,KAAK;AAC1B,EAAIA,EAAQ,KACZpqC,EAAA,MAAK6oC,IAAAM,IAAL,WAAyBnpC,EAAA,MAAK6oC,IAAAO,IAAL,WAAsBviJ,IAAQA;AACzD,GACAy0I,KAAe,SAACz0I,GAAO;AACrB,OAAK,OAAO,SAAS,IAAI,EAAK;AAChC,GACAmjJ,KAAc,SAACnjJ,GAAO;AACpB,MAAIA,EAAM,WAAW,EAAG;AACxB,QAAMrkC,IAAQw9I,EAAA,MAAK6oC,IAAAO,IAAL,WAAsBviJ;AACpC,EAAAm5G,EAAA,MAAK6oC,IAAAgB,IAAL,WAAsBrnL,GAAOqkC,IAC7Bm5G,EAAA,MAAK6oC,IAAAM,IAAL,WAAyB3mL,GAAOqkC;AAClC,GACAgjJ,KAAgB,SAACrnL,GAAOonD,GAAS;;AAC/B,QAAM,EAAE,UAAAwgI,MAAa,KAAK;AAC1B,MAAIA,EAAQ,EAAI;AAChB,EAAAA,EAAS,IAAI,EAAI,GACjBvsC,EAAA,MAAK4Y,IAAO,OAAO,cAAc7sG,CAAO;AACxC,QAAM/iB,IAAQ,KAAK,YAAY,cAAc,EAAE,QAAQrkC,GAAO,SAAAonD,GAAS;AACvE,OAAK,SAAS/iB,CAAK,IACnBp3B,KAAAnG,IAAAu0I,EAAA,MAAKimC,KAAU,gBAAf,QAAAr0K,EAAA,KAAAnG,GAA6Bu9B,KAC7BxlB,KAAAD,IAAAy8H,EAAA,MAAKqqC,QAAL,gBAAA9mK,EAAgB,gBAAhB,QAAAC,EAAA,KAAAD;AACF,GACAwpK,KAAe,SAACpoL,GAAOonD,GAAS;;AAC9B,QAAM,EAAE,UAAAwgI,MAAa,KAAK;AAC1B,MAAI,CAACA,EAAQ,EAAI;AACjB,EAAAA,EAAS,IAAI,EAAK,GAClBvsC,EAAA,MAAK4Y,IAAO,OAAO,eAAe7sG,CAAO;AACzC,QAAM/iB,IAAQ,KAAK,YAAY,YAAY,EAAE,QAAQrkC,GAAO,SAAAonD,GAAS;AACrE,OAAK,SAAS/iB,CAAK,IACnBp3B,KAAAnG,IAAAu0I,EAAA,MAAKimC,KAAU,cAAf,QAAAr0K,EAAA,KAAAnG,GAA2Bu9B,IAC3B+2G,EAAA,MAAKkrC,IAAS,OACdlrC,EAAA,MAAKmrC,IAAmB,QACxB1nK,KAAAD,IAAAy8H,EAAA,MAAKqqC,QAAL,gBAAA9mK,EAAgB,cAAhB,QAAAC,EAAA,KAAAD;AACF,GAIA4nK,KAAA,eACAC,KAAA,eACA7uB,KAAU,SAACvzH,GAAO;AAEhB,MAAI,CADe,OAAO,KAAK8hJ,EAAkB,EAAE,SAAS9hJ,EAAM,GAAG,EACpD;AACjB,QAAM,EAAE,KAAAjjC,EAAG,IAAKijC,GAAOgkJ,IAAY7qC,EAAA,MAAK6oC,IAAAiC,IAAL,WAAoBjkJ;AACvD,MAAI,CAACg2G,GAAOguC,CAAS,GAAG;AACtB,IAAA7qC,EAAA,MAAK6oC,IAAAM,IAAL,WAAyB0B,GAAWhkJ,IACpCm5G,EAAA,MAAK6oC,IAAAsB,IAAL,WAAkBU,GAAWhkJ;AAC7B;AAAA,EACF;AACA,QAAMgN,IAAWmsG,EAAA,MAAK6oC,IAAAkC,IAAL,WAAsBlkJ;AACvC,EAAKg3G,EAAA,MAAKorC,QACRrrC,EAAA,MAAKqrC,IAAgBrlL,MAAQi6I,EAAA,MAAKmrC,MAC9B,CAAC,KAAK,OAAO,SAAQ,KAAMnrC,EAAA,MAAKorC,OAClCjpC,EAAA,MAAK6oC,IAAAgB,IAAL,WAAsBh2I,GAAUhN,KAGpCm5G,EAAA,MAAK6oC,IAAAM,IAAL,WAAyBt1I,GAAUhN,IACnC+2G,EAAA,MAAKorC,IAAeplL;AACtB,GACAu2J,KAAQ,SAACtzH,GAAO;AAEd,MAAI,CADe,OAAO,KAAK8hJ,EAAkB,EAAE,SAAS9hJ,EAAM,GAAG,KAClD,CAACg2G,GAAOmD,EAAA,MAAK6oC,IAAAiC,IAAL,WAAoBjkJ,EAAM,EAAG;AACxD,QAAMgN,IAAWgqG,EAAA,MAAKorC,MAAgB,KAAK,OAAO,iBAAiBjpC,EAAA,MAAK6oC,IAAAkC,IAAL,WAAsBlkJ;AACzF,EAAAm5G,EAAA,MAAK6oC,IAAAsB,IAAL,WAAkBt2I,GAAUhN,IAC5Bm5G,EAAA,MAAK6oC,IAAA+B,IAAL,WAAqB/2I,GAAUhN,IAC/B+2G,EAAA,MAAKorC,IAAe,KACpBprC,EAAA,MAAKqrC,IAAgB;AACvB,GACA6B,KAAc,SAACjkJ,GAAO;AACpB,MAAIjjC,IAAMijC,EAAM,KAAK,EAAE,KAAAjP,GAAK,KAAAC,EAAG,IAAK,KAAK;AACzC,SAAIj0B,MAAQ,UAAUA,MAAQ,WACrBg0B,EAAG,IACDh0B,MAAQ,SAASA,MAAQ,aAC3Bi0B,EAAG,IACD,CAACgP,EAAM,WAAW,UAAU,KAAKjjC,CAAG,KACrCi0B,EAAG,IAAKD,EAAG,KAAM,KAAK,OAAOh0B,CAAG,IAEnC;AACT,GACAmnL,KAAgB,SAAClkJ,GAAO;;AACtB,QAAM,EAAE,KAAAjjC,GAAK,UAAAonL,EAAQ,IAAKnkJ;AAC1B,EAAAA,EAAM,eAAc,GACpBA,EAAM,gBAAe;AACrB,QAAM,EAAE,oBAAAokJ,MAAuB,KAAK,QAC9B,EAAE,KAAArzJ,GAAK,KAAAC,GAAK,OAAAr1B,GAAO,cAAA8nL,EAAY,IAAK,KAAK,QAAQ9kL,IAAOq4I,EAAA,MAAKimC,IAAU,QAAO,GAAIoH,IAAUrtC,EAAA,MAAKimC,IAAU,WAAU,GACrHqH,IAAgBH,IAAqBE,IAAUD,EAAkB,IAAtCC,GAA0CrxI,IAAY,OAAO8uI,GAAmB/kL,CAAG,CAAC,GAAGstI,IAAOi6C,IAAetxI,GAAWwsB,IAAew3E,EAAA,MAAKorC,MAAgBqB,EAAY,MAAK76K,KAAAnG,IAAAu0I,EAAA,MAAKimC,KAAU,aAAf,gBAAAr0K,EAAA,KAAAnG,OAA+B9G,EAAK,GAAIkmL,KAASriH,IAAe6qE,KAAQ1rI;AACtR,SAAO,KAAK,IAAIoyB,EAAG,GAAI,KAAK,IAAIC,EAAG,GAAI,QAAQryB,IAAOkjL,GAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC3E;AAAA;AAAA;AAIAuB,KAAoB,SAACpjJ,GAAO;AAC1B,MAAIA,EAAM,WAAW,EAAG;AACxB,EAAAA,EAAM,eAAc,GACpBA,EAAM,yBAAwB;AAC9B,QAAMrkC,IAAQw9I,EAAA,MAAK6oC,IAAAO,IAAL,WAAsBviJ;AACpC,EAAAm5G,EAAA,MAAK6oC,IAAAM,IAAL,WAAyB3mL,GAAOqkC,IAChCm5G,EAAA,MAAK6oC,IAAA+B,IAAL,WAAqBpoL,GAAOqkC;AAC9B,GACAqjJ,KAAoB,SAACrjJ,GAAO;AAC1B,EAAAA,EAAM,eAAc;AACtB,GACAqiJ,KAAA;AASF,MAAMkC,KAA2BtvK,GAAc,OAAO,CAAA,EAAG;;AAEzD,MAAMuvK,WAAyB5qC,GAAe;AAAA,EAa5C,YAAYmjC,GAAU;AACpB,UAAK;AAdT,IAAAnmC,EAAA,MAAA6tC;AASE,IAAA7tC,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAAqmC;AACA,IAAArmC,EAAA,MAAA8tC,IAAahpG,GAAO,EAAI;AACxB,IAAAk7D,EAAA,MAAA+tC,IAAkBjpG,GAAO,EAAI;AA2F7B,IAAAk7D,EAAA,MAAAguC,IAAoB3mC,GAAuB,CAAC4mC,GAAaC,MAAmB;;AAC1E,OAAAriL,IAAA,KAAK,OAAL,QAAAA,EAAS,MAAM,YAAY,iBAAiBoiL,IAAc,OAC1Dj8K,IAAA,KAAK,OAAL,QAAAA,EAAS,MAAM,YAAY,oBAAoBk8K,IAAiB;AAAA,IAClE,CAAC;AA3FC,IAAA/tC,EAAA,MAAKkmC,IAAYF;AAAA,EACnB;AAAA,EACA,UAAU;AACR,IAAAhmC,EAAA,MAAK6Y,IAASvF,GAAe;AAC7B,UAAMtiH,IAAQ,IAAIqsI,GAAsB;AACxC,IAAArsI,EAAM,OAAO,IAAI,GACjB,KAAK,OAAO,UAAUA,EAAM,QAAQ,KAAKA,CAAK,GACzCqwG,GAAmBmsC,EAAwB,KAC9CrsC,GAAeqsC,IAA0B;AAAA,MACvC,SAAS;AAAA,IACjB,CAAO,GAEHrsC,GAAeopC,IAAe;AAAA,MAC5B,aAAa,KAAK,OAAO;AAAA,MACzB,UAAUtqC,EAAA,MAAKimC,IAAU;AAAA,MACzB,SAASvhG,GAAO,IAAI;AAAA,IAC1B,CAAK,GACDvlD,EAAOgjH,EAAA,MAAKsrC,IAAAM,IAAY,KAAK,IAAI,CAAC,GAClC5uJ,EAAOgjH,EAAA,MAAKsrC,IAAAO,IAAW,KAAK,IAAI,CAAC,GACjC7uJ,EAAOgjH,EAAA,MAAKsrC,IAAAQ,IAAe,KAAK,IAAI,CAAC,GACrC9rC,EAAA,MAAKsrC,IAAAS,IAAL,YACA,IAAInD,GAAuB/qC,EAAA,MAAKimC,KAAWjmC,EAAA,MAAK4Y,GAAM,EAAE,OAAO,IAAI,GACnE,IAAIsxB,GAA+B;AAAA,MACjC,UAAU/nC,EAAA,MAAKsrC,IAAAU,IAAsB,KAAK,IAAI;AAAA,IACpD,CAAK,EAAE,OAAO,IAAI;AAAA,EAChB;AAAA,EACA,SAASx7J,GAAI;AACX,IAAAyjI,GAAoBzjI,GAAI,QAAQ,QAAQ,GACxCyjI,GAAoBzjI,GAAI,YAAY,GAAG,GACvCyjI,GAAoBzjI,GAAI,gBAAgB,KAAK,GACzC8oH,KAAW0G,EAAA,MAAKsrC,IAAAW,IAAL,aACVjvJ,EAAOgjH,EAAA,MAAKsrC,IAAAW,IAAc,KAAK,IAAI,CAAC;AAAA,EAC3C;AAAA,EACA,UAAUz7J,GAAI;AACZ,IAAAuqH,GAAUwZ,GAAkB/jI,GAAIqtH,EAAA,MAAK0tC,IAAW,GAAG,CAAC,GACpDvuJ,EAAOgjH,EAAA,MAAKsrC,IAAAY,IAAa,KAAK,IAAI,CAAC;AAAA,EACrC;AAwDF;AAlGEz1B,KAAA,eACAqtB,KAAA,eACAyH,KAAA,eACAC,KAAA,eAZFF,KAAA,eAoDEU,KAAqB,SAACrqK,GAAS;AAC7B,EAAAk8H,EAAA,MAAK2tC,IAAgB,IAAI7pK,EAAQ,CAAC,EAAE,cAAc;AACpD;AAAA;AAAA;AAIAuqK,KAAY,WAAG;AACb,QAAM,EAAE,QAAApC,MAAW,KAAK;AACxB,OAAK,OAAO,OAAO,IAAIA,EAAM,KAAM,CAACjsC,EAAA,MAAK0tC,IAAL,cAAqB,CAAC1tC,EAAA,MAAK2tC,IAAgB,KAAK,IAAI,CAAC;AAC3F,GACAI,KAAW,WAAG;AACZ,QAAM,EAAE,UAAAxB,GAAU,OAAA5nL,GAAO,KAAAo1B,GAAK,KAAAC,EAAG,IAAK,KAAK;AAC3C,EAAI2iH,GAAK4vC,CAAQ,KACjB5nL,EAAM,IAAI6lL,GAAgBzwJ,EAAG,GAAIC,EAAG,GAAIr1B,EAAK,GAAIq7I,EAAA,MAAKimC,IAAU,QAAO,CAAE,CAAC;AAC5E,GACA+H,KAAU,WAAG;AACX,OAAK,OAAO,KAAK,IAAIhuC,EAAA,MAAKimC,IAAU,SAAS;AAC/C,GACAgI,KAAc,WAAG;AACf,MAAI,CAACjuC,EAAA,MAAKimC,IAAU,aAAc;AAClC,QAAM,EAAE,UAAAsG,GAAU,UAAA+B,EAAQ,IAAK,KAAK;AACpC,EAAA/B,EAAS,IAAI,EAAK,GAClB+B,EAAS,IAAI,EAAK;AACpB;AAAA;AAAA;AAIAC,KAAgB,WAAG;AACjB,SAAOhG,GAAWvoC,EAAA,MAAKimC,IAAU,WAAU,CAAE;AAC/C;AAAA;AAAA;AAIAiI,KAAW,WAAG;AACZ,QAAM,EAAE,aAAApxH,MAAgB,KAAK,QAAQ,EAAE,UAAAyvH,GAAU,QAAA9tH,GAAQ,UAAA6vH,MAAa,KAAK;AAC3E,OAAK,cAAc;AAAA,IACjB,iBAAiB/B;AAAA,IACjB,iBAAiB+B;AAAA,IACjB,eAAe7vH;AAAA,IACf,iBAAiB0jF,EAAA,MAAKsrC,IAAAc,IAAiB,KAAK,IAAI;AAAA,IAChD,iBAAiBvuC,EAAA,MAAKimC,IAAU,KAAK,YAAY,KAAK,OAAO;AAAA,IAC7D,iBAAiBjmC,EAAA,MAAKimC,IAAU,KAAK,YAAY,KAAK,OAAO;AAAA,IAC7D,iBAAiBjmC,EAAA,MAAKimC,IAAU,KAAK;AAAA,IACrC,kBAAkBjmC,EAAA,MAAKimC,IAAU,KAAK;AAAA,IACtC,oBAAoBnpH;AAAA,EAC1B,CAAK;AACH,GACAsxH,KAAa,WAAG;AACd,QAAM,EAAE,aAAAP,GAAa,gBAAAC,EAAc,IAAK,KAAK;AAC7C,EAAA9tC,EAAA,MAAK4tC,IAAL,WAAuB1pE,GAAM2pE,EAAW,GAAI,CAAC,GAAG3pE,GAAM4pE,KAAkB,CAAC;AAC3E,GACAF,KAAA,eAtGAjrK,EADI6qK,IACG,SAAQ;AAAA,EACb,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,MAAM;AAAA,EACN,SAAS;AAAA,EACT,aAAa;AAAA,EACb,oBAAoB;AACxB;;AAqGA,MAAMgB,WAAelrL,GAAU;AAAA,EAQ7B,cAAc;AACZ,UAAK;AATT,IAAAs8I,EAAA,MAAA6uC;AAUI,QAAIjB,GAAiB;AAAA,MACnB,SAAS,KAAK,OAAO;AAAA,MACrB,YAAY,KAAK,OAAO;AAAA,MACxB,YAAY,KAAK;AAAA,MACjB,YAAY,KAAK,OAAO;AAAA,MACxB,MAAM;AAAA,QACJ,UAAUrrC,EAAA,MAAKssC,IAAAC,IAAiB,KAAK,IAAI;AAAA,QACzC,WAAWvsC,EAAA,MAAKssC,IAAAE,IAAkB,KAAK,IAAI;AAAA,MACnD;AAAA,IACA,CAAK;AAAA,EACH;AAAA,EACA,UAAU;AACR,IAAAxvJ,EAAOgjH,EAAA,MAAKssC,IAAAV,IAAY,KAAK,IAAI,CAAC,GAClC5uJ,EAAOgjH,EAAA,MAAKssC,IAAAG,IAAa,KAAK,IAAI,CAAC;AAAA,EACrC;AAwBF;AAhDAH,KAAA;AAAA;AAAA;AA4BEC,KAAgB,WAAG;AACjB,QAAM,EAAE,OAAA/pL,MAAU,KAAK;AACvB,SAAO,KAAK,MAAMA,GAAO;AAC3B,GACAgqL,KAAiB,WAAG;AAClB,QAAM,EAAE,OAAAhqL,GAAO,KAAAq1B,EAAG,IAAK,KAAK;AAC5B,SAAOkqF,GAAMv/G,MAAUq1B,EAAG,IAAK,KAAK,CAAC,IAAI;AAC3C;AAAA;AAAA;AAIA+zJ,KAAW,WAAG;AACZ,QAAM,EAAE,OAAAppL,MAAU,KAAK;AACvB,OAAK,OAAO,MAAM,IAAIA,EAAK,CAAE;AAC/B,GACAiqL,KAAY,WAAG;AACb,QAAM,EAAE,KAAA70J,GAAK,KAAAC,EAAG,IAAK,KAAK;AAC1B,OAAK,OAAO,IAAI,IAAID,EAAG,CAAE,GACzB,KAAK,OAAO,IAAI,IAAIC,EAAG,CAAE;AAC3B,GA9CArX,EADI6rK,IACG,SAAQ;AAAA,EACb,GAAGhB,GAAiB;AAAA,EACpB,KAAK;AAAA,EACL,KAAK;AAAA,EACL,OAAO;AACX,IACE7qK,EAPI6rK,IAOG,SAAQxE;AA2CjB,MAAMv0K,KAAwB,oBAAI,IAAG,GAAIo5K,KAA0B,oBAAI,IAAG;;AAC1E,MAAMC,KAAN,MAAMA,GAAiB;AAAA,EASrB,YAAY1lL,GAAK6sI,GAAauiB,GAAO;AATvC,IAAA5Y,EAAA,MAAAmvC;AACE,IAAAnvC,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAAovC;AACA,IAAApvC,EAAA,MAAAqvC;AACA,IAAAtsK,EAAA,iBAAU+hE,GAAO,EAAE;AAMjB,IAAAq7D,EAAA,MAAKivC,IAAO5lL,IACZ22I,EAAA,MAAKkvC,IAAeh5C,IACpB8J,EAAA,MAAK6Y,IAASJ,IACdr5H,EAAOgjH,EAAA,MAAK4sC,IAAAG,IAAY,KAAK,IAAI,CAAC;AAAA,EACpC;AAAA,EATA,OAAO,OAAO9lL,GAAK6sI,GAAa;AAC9B,UAAMuiB,IAAQnF,GAAe;AAC7B,WAAO,IAAIy7B,GAAiB1lL,GAAK6sI,GAAauiB,CAAK;AAAA,EACrD;AA2KF;AAlLEI,KAAA,eACAo2B,KAAA,eACAC,KAAA,eAHFF,KAAA,eAeEG,KAAW,WAAG;;AACZ,QAAM,EAAE,SAAA5Z,EAAO,IAAKt1B,EAAA,MAAK4Y,IAAO;AAChC,MAAI,CAAC0c,EAAO,EAAI;AAChB,QAAMlsK,IAAM42I,EAAA,MAAKgvC,IAAL;AACZ,MAAK5lL,GACL;AAAA,QAAIu/C,GAASv/C,CAAG,KAAKqM,GAAM,IAAIrM,CAAG,GAAG;AACnC,YAAM0oJ,IAAOr8I,GAAM,IAAIrM,CAAG;AAG1B,UAFAqM,GAAM,OAAOrM,CAAG,GAChBqM,GAAM,IAAIrM,GAAK0oJ,CAAI,GACfr8I,GAAM,OAAO,IAAI;AACnB,cAAM05K,IAAW15K,GAAM,KAAI,EAAG,KAAI,EAAG;AACrC,QAAAA,GAAM,OAAO05K,CAAQ;AAAA,MACvB;AACA,WAAK,QAAQ,IAAI15K,GAAM,IAAIrM,CAAG,CAAC;AAAA,IACjC,WAAWu/C,GAASv/C,CAAG,GAAG;AACxB,YAAM6sI,IAAc+J,EAAA,MAAKivC,IAAL,YAAqBG,IAAahmL,IAAM,OAAO6sI;AACnE,UAAI,CAAC44C,GAAQ,IAAIO,CAAU,GAAG;AAC5B,cAAMnjL,IAAU,IAAI,QAAQ,OAAO4/D,GAASuX,MAAW;AACrD,cAAI;AACF,kBAAMh5E,IAAW,MAAM,MAAMhB,GAAK;AAAA,cAChC,aAAaimJ,GAAsBpZ,CAAW;AAAA,YAC5D,CAAa;AACD,gBADa7rI,EAAS,QAAQ,IAAI,cAAc,MAAM,oBAC1C;AACV,oBAAM8yE,IAAO,MAAM9yE,EAAS,KAAI;AAChC,kBAAI3F,GAAQy4E,CAAI;AACd,oBAAIA,EAAK,CAAC,KAAK,UAAUA,EAAK,CAAC;AAC7B,kBAAArR,EAAQs2E,EAAA,MAAK4sC,IAAAM,IAAL,WAAqBnyG,EAAK;AAAA,qBAC7B;AACL,2BAAS31E,IAAI,GAAGA,IAAI21E,EAAK,QAAQ31E,KAAK;AACpC,0BAAM6pI,IAAQl0D,EAAK31E,CAAC;AACpB,oBAAAqlK,GAAOtmH,GAAS8qF,CAAK,GAAG,EAAK,GAC7Bw7B;AAAA,sBACE,SAASx7B,KAASzoF,GAASyoF,EAAM,GAAG;AAAA,sBACpC;AAAA,oBACtB,GACoBw7B;AAAA,sBACE,eAAex7B,KAASx3H,GAASw3H,EAAM,SAAS;AAAA,sBAChD;AAAA,oBACtB;AAAA,kBACkB;AACA,kBAAAvlE,EAAQqR,CAAI;AAAA,gBACd;AAAA;AAEA,gBAAArR,EAAQs2E,EAAA,MAAK4sC,IAAAO,IAAL,WAAwBpyG,EAAK;AAEvC;AAAA,YACF;AACA,mBAAO,oBAAgB,EAAA,KAAA,CAAApgF,MAAAA,EAAA,CAAA,EAAE,KAAK,OAAO,EAAE,eAAAygF,EAAa,MAAO;AACzD,kBAAI;AACF,sBAAM,EAAE,MAAAu0E,EAAI,IAAK,MAAMv0E,EAAcnzE,CAAQ;AAC7C,gBAAAyhE,EAAQs2E,EAAA,MAAK4sC,IAAAM,IAAL,WAAqBv9B,EAAK;AAAA,cACpC,SAASx0J,GAAG;AACV,gBAAA8lF,EAAO9lF,CAAC;AAAA,cACV;AAAA,YACF,CAAC;AAAA,UACH,SAASA,GAAG;AACV,YAAA8lF,EAAO9lF,CAAC;AAAA,UACV;AAAA,QACF,CAAC,EAAE,KAAK,CAACiyL,OACP95K,GAAM,IAAI25K,GAAYG,CAAM,GACrBA,EACR,EAAE,MAAM,CAAC1wL,MAAU;AAClB,UAAAsjJ,EAAA,MAAK4sC,IAAApuB,IAAL,WAAcv3J,GAAKvK;AAAA,QACrB,CAAC,EAAE,QAAQ,MAAM;AACf,UAAI8pD,GAASymI,CAAU,KAAGP,GAAQ,OAAOO,CAAU;AAAA,QACrD,CAAC;AACD,QAAAP,GAAQ,IAAIO,GAAYnjL,CAAO;AAAA,MACjC;AACA,OAAAR,IAAAojL,GAAQ,IAAIO,CAAU,MAAtB,QAAA3jL,EAAyB,KAAK,CAAC8jL,MAAW;AACxC,aAAK,QAAQ,IAAIA,KAAU,CAAA,CAAE;AAAA,MAC/B;AAAA,IACF,WAAW9qL,GAAQ2E,CAAG;AACpB,UAAI;AACF,aAAK,QAAQ,IAAI+4I,EAAA,MAAK4sC,IAAAS,IAAL,WAAoBpmL,EAAI;AAAA,MAC3C,SAASvK,GAAO;AACd,QAAAsjJ,EAAA,MAAK4sC,IAAApuB,IAAL,WAAcv3J,GAAKvK;AAAA,MACrB;AAAA;AAEA,UAAI;AACF,aAAK,QAAQ,IAAIsjJ,EAAA,MAAK4sC,IAAAO,IAAL,WAAwBlmL,EAAI;AAAA,MAC/C,SAASvK,GAAO;AACd,QAAAsjJ,EAAA,MAAK4sC,IAAApuB,IAAL,WAAcv3J,GAAKvK;AAAA,MACrB;AAEF,WAAO,MAAM;AACX,WAAK,QAAQ,IAAI,EAAE;AAAA,IACrB;AAAA;AACF,GACA2wL,KAAc,SAACD,GAAQ;AACrB,QAAM72F,IAAUypD,EAAA,MAAK4sC,IAAAU,IAAL;AAChB,SAAOF,EAAO,IAAI,CAACx+C,GAAKxpI,OACtBqlK;AAAA,IACE77B,EAAI,OAAOpoF,GAASooF,EAAI,GAAG;AAAA,EAAC,GAC9B67B;AAAA,IACE,eAAe77B,KAAOn3H,GAASm3H,EAAI,SAAS;AAAA,EAAC,GACxC;AAAA,IACL,GAAGA;AAAA,IACH,KAAKpoF,GAASooF,EAAI,GAAG,IAAIoR,EAAA,MAAK4sC,IAAAW,IAAL,WAAiB3+C,EAAI,KAAKr4C,KAAWq4C,EAAI;AAAA,EAC1E,EACK;AACH,GACAu+C,KAAkB,SAACK,GAAO;;AACxB,EAAA/iB,GAAOjkH,GAASgnI,EAAM,GAAG,CAAC,GAC1B/iB,GAAOnoK,GAAQkrL,EAAM,KAAK,OAAKlkL,IAAAkkL,EAAM,UAAN,gBAAAlkL,EAAa,OAAM;AAClD,QAAM28B,IAAM,IAAI,IAAIunJ,EAAM,GAAG,GAAGJ,IAAS,CAAA,GACnCK,IAAY,gBAAgBD,IAAQA,EAAM,aAAaA,EAAM,WAAWE,IAAa,iBAAiBF,IAAQA,EAAM,cAAcA,EAAM;AAC9I,aAAWG,KAAQH,EAAM;AACvB,IAAAJ,EAAO,KAAK;AAAA,MACV,KAAAnnJ;AAAA,MACA,WAAW,WAAW0nJ,IAAOA,EAAK,QAAQA,EAAK;AAAA,MAC/C,OAAOF;AAAA,MACP,QAAQC;AAAA,MACR,QAAQ,EAAE,GAAGC,EAAK,GAAG,GAAGA,EAAK,EAAC;AAAA,IACtC,CAAO;AAEH,SAAOP;AACT,GACAF,KAAe,SAACv9B,GAAM;AACpB,WAASvqJ,IAAI,GAAGA,IAAIuqJ,EAAK,QAAQvqJ,KAAK;AACpC,UAAM2oJ,IAAM4B,EAAKvqJ,CAAC;AAClB,IAAAqlK;AAAA,MACE,eAAe1c,KAAOt2I,GAASs2I,EAAI,SAAS;AAAA,IAAC,GAC/C0c;AAAA,MACE,UAAU1c,KAAOvnG,GAASunG,EAAI,IAAI;AAAA,IAAC;AAAA,EACvC;AACA,QAAMq/B,IAAS,CAAA,GAAI72F,IAAUypD,EAAA,MAAK4sC,IAAAU,IAAL;AAC7B,aAAWv/B,KAAO4B,GAAM;AACtB,UAAM,CAAC1pH,GAAKmmI,CAAI,IAAIre,EAAI,KAAK,MAAM,GAAG,GAAGzmJ,IAAO04I,EAAA,MAAK4sC,IAAAgB,IAAL,WAAkBxhB;AAClE,IAAAghB,EAAO,KAAK;AAAA,MACV,KAAKptC,EAAA,MAAK4sC,IAAAW,IAAL,WAAiBtnJ,GAAKswD;AAAA,MAC3B,WAAWw3D,EAAI;AAAA,MACf,SAASA,EAAI;AAAA,MACb,OAAOzmJ,KAAA,gBAAAA,EAAM;AAAA,MACb,QAAQA,KAAA,gBAAAA,EAAM;AAAA,MACd,QAAQA,KAAQmQ,GAASnQ,EAAK,CAAC,KAAKmQ,GAASnQ,EAAK,CAAC,IAAI,EAAE,GAAGA,EAAK,GAAG,GAAGA,EAAK,MAAM;AAAA,IAC1F,CAAO;AAAA,EACH;AACA,SAAO8lL;AACT,GACAE,KAAe,WAAG;AAChB,MAAI/2F,IAAUikD,GAAKqD,EAAA,MAAKgvC,GAAI;AAC5B,SAAI,CAACrmI,GAAS+vC,CAAO,KAAK,CAAC,WAAW,KAAKA,CAAO,IACzC,SAAS,OAEXA;AACT,GACAg3F,KAAW,SAACtmL,GAAKsvF,GAAS;AACxB,SAAO,WAAW,KAAKtvF,CAAG,IAAI,IAAI,IAAIA,CAAG,IAAI,IAAI,IAAIA,GAAKsvF,CAAO;AACnE,GACAq3F,KAAY,SAACxhB,GAAM;AACjB,MAAI,CAACA,EAAM,QAAO,CAAA;AAClB,QAAM,CAACyhB,GAAWhsL,CAAM,IAAIuqK,EAAK,MAAM,GAAG,GAAG0hB,IAAajsL,KAAA,gBAAAA,EAAQ,MAAM,MAAMyF,IAAO,CAAA;AACrF,MAAI,CAACumL,KAAa,CAACC;AACjB,WAAO;AAET,WAAS1oL,IAAI,GAAGA,IAAIyoL,EAAU,QAAQzoL,KAAK;AACzC,UAAM5C,IAAQ,CAACsrL,EAAW1oL,CAAC;AAC3B,IAAK,MAAM5C,CAAK,MAAG8E,EAAKumL,EAAUzoL,CAAC,CAAC,IAAI5C;AAAA,EAC1C;AACA,SAAO8E;AACT,GACAk3J,KAAQ,SAACv3J,GAAKvK,GAAO;AAErB;AAlLF,IAAMqxL,KAANpB;;UAqLArjL,KAAA,cAAwBnI,GAAU;AAAA,EAAlC;AAAA;AAAA,IAAAs8I,EAAA,MAAAuwC;AAgBE,IAAAxtK,EAAA;AACA,IAAAi9H,EAAA,MAAAohC;AACA,IAAAphC,EAAA,MAAAwwC,IAAe,CAAA;AAAA;AAAA,EACf,UAAU;AACR,SAAK,QAAQ/8B,GAAe,GAC5BtT,EAAA,MAAKihC,IAAUkP,GAAiB,OAAO,KAAK,OAAO,KAAK,KAAK,OAAO,WAAW,IAC/E/tC,EAAA,MAAKguC,IAAAxU,IAAL,YACA,KAAK,cAAc;AAAA,MACjB,gBAAgBx5B,EAAA,MAAKguC,IAAAE,IAAW,KAAK,IAAI;AAAA,MACzC,cAAcluC,EAAA,MAAKguC,IAAAG,IAAU,KAAK,IAAI;AAAA,MACtC,eAAe,KAAK,OAAO;AAAA,MAC3B,eAAepe,GAAU,KAAK,OAAO,MAAM;AAAA,IACjD,CAAK;AAAA,EACH;AAAA,EACA,UAAUv/I,GAAI;AACZ,IAAAwM,EAAOgjH,EAAA,MAAKguC,IAAAI,IAAU,KAAK,IAAI,CAAC,GAChCpxJ,EAAOgjH,EAAA,MAAKguC,IAAA9B,IAAa,KAAK,IAAI,CAAC,GACnClvJ,EAAOgjH,EAAA,MAAKguC,IAAAxU,IAAkB,KAAK,IAAI,CAAC,GACxCx8I,EAAOgjH,EAAA,MAAKguC,IAAAhrB,IAAa,KAAK,IAAI,CAAC,GACnChmI,EAAOgjH,EAAA,MAAKguC,IAAAK,IAAuB,KAAK,IAAI,CAAC,GAC7CrxJ,EAAOgjH,EAAA,MAAKguC,IAAAM,IAAQ,KAAK,IAAI,CAAC;AAAA,EAChC;AAAA,EA6CA,UAAU;AACR,WAAO,KAAK,OAAO,KAAI;AAAA,EACzB;AAwDF,GA3HEzP,KAAA,eACAoP,KAAA,eAlBFD,KAAA,eAsCEI,KAAS,WAAG;AACV,QAAMx/C,IAAM,KAAK,OAAO,IAAG;AAC3B,EAAKA,KACL,IAAI4O,GAAiB5O,CAAG,EAAE,IAAI,QAAQoR,EAAA,MAAKguC,IAAAhjB,IAAU,KAAK,IAAI,CAAC,EAAE,IAAI,SAAShrB,EAAA,MAAKguC,IAAAxvB,IAAS,KAAK,IAAI,CAAC;AACxG,GACAgb,KAAiB,WAAG;AAClB,QAAM,EAAE,aAAa+U,EAAe,IAAK,KAAK,QAAQ,EAAE,aAAaC,EAAgB,IAAK,KAAK,QAAQ,EAAE,aAAaC,MAAqB,KAAK,MAAM,QAAQ36C,IAAcy6C,EAAe,MAAO,OAAOA,EAAe,IAAKE,EAAgB;AAC7O,EAAAD,EAAiB,IAAI16C,MAAgB,KAAO,cAAcA,CAAW;AACvE,GACAkvB,KAAY,WAAG;AACb,QAAM,EAAE,KAAA/7J,GAAK,SAAAQ,GAAS,OAAA/K,EAAK,IAAK,KAAK;AACrC,SAAIuK,EAAG,MACLQ,EAAQ,IAAI,EAAI,GAChB/K,EAAM,IAAI,IAAI,IAET,MAAM;AACX,IAAAsjJ,EAAA,MAAKguC,IAAAU,IAAL,YACAjnL,EAAQ,IAAI,EAAK,GACjB/K,EAAM,IAAI,IAAI;AAAA,EAChB;AACF,GACAsuK,KAAS,WAAG;AACV,QAAM,EAAE,SAAAvjK,GAAS,OAAA/K,EAAK,IAAK,KAAK;AAChC,EAAAsjJ,EAAA,MAAKguC,IAAAM,IAAL,YACA7mL,EAAQ,IAAI,EAAK,GACjB/K,EAAM,IAAI,IAAI;AAChB,GACA8hK,KAAQ,SAAC33H,GAAO;AACd,QAAM,EAAE,SAAAp/B,GAAS,OAAA/K,EAAK,IAAK,KAAK;AAChC,EAAA+K,EAAQ,IAAI,EAAK,GACjB/K,EAAM,IAAImqC,CAAK;AACjB,GACAqnJ,KAAU,WAAG;AACX,QAAM,EAAE,SAAAzmL,GAAS,QAAAqiL,EAAM,IAAK,KAAK;AACjC,SAAO,CAACA,EAAM,KAAMriL,EAAO;AAC7B,GACA0mL,KAAS,WAAG;AACV,QAAM,EAAE,OAAAzxL,MAAU,KAAK;AACvB,SAAO,CAACmgJ,GAAOngJ,GAAO;AACxB,GACAwvL,KAAY,WAAG;AACb,QAAM,EAAE,QAAApC,EAAM,IAAK,KAAK,QAAQ,EAAE,UAAAn4B,EAAQ,IAAK,KAAK,MAAM,QAAQy7B,IAASvvC,EAAA,MAAKghC,IAAQ,QAAO;AAC/F,EAAAiL,EAAO,IAAI9pC,EAAA,MAAKguC,IAAAG,IAAL,cAAoB,CAAC,OAAO,SAASx8B,EAAQ,CAAE,KAAKy7B,EAAO,WAAW,CAAC;AACpF,GAIAiB,KAAsB,WAAG;AACvB,MAAIjB,IAASvvC,EAAA,MAAKghC,IAAQ,QAAO;AACjC,MAAI,CAACuO,EAAO,OAAQ;AACpB,MAAIr8H,IAAO,KAAK,QAAO,GAAI,EAAE,KAAA9pD,GAAK,iBAAA0nL,MAAoB,KAAK,QAAQC,IAAc,IAAIC,IAAc;AACnG,WAASzpL,IAAIgoL,EAAO,SAAS,GAAGhoL,KAAK,GAAGA,KAAK;AAC3C,UAAM6pI,IAAQm+C,EAAOhoL,CAAC;AACtB,QAAI2rD,KAAQk+E,EAAM,cAAc,CAACA,EAAM,WAAWl+E,IAAOk+E,EAAM,UAAU;AACvE,MAAA2/C,IAAcxpL;AACd;AAAA,IACF;AAAA,EACF;AACA,EAAIgoL,EAAOwB,CAAW,MACpBC,IAAczB,EAAOwB,CAAW,IAElCD,EAAgB,IAAIE,CAAW,GAC/B5nL,EAAI,KAAI4nL,KAAA,gBAAAA,EAAa,IAAI,SAAQ,EAAE;AACrC,GACAP,KAAO,WAAG;AACR,MAAI,CAAC,KAAK,SAAS,KAAK,OAAO,OAAM,EAAI;AACzC,QAAMQ,IAAS,KAAK,IAAIC,IAAQ,KAAK,OAAO,IAAG,GAAIC,IAAY,KAAK,OAAO,gBAAe;AAC1F,MAAI,CAACD,KAAS,CAACC,KAAa,CAACF,EAAQ;AACrC,MAAIlvH,IAAQovH,EAAU,SAASD,EAAM,cAAclvH,KAASmvH,KAAA,gBAAAA,EAAW,WAAUD,EAAM,eAAe;AAAA,IACpG,UAAAE;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,OAAOC;AAAA,IACP,QAAQC;AAAA,EACd,IAAQ,iBAAiB,KAAK,EAAE;AAC5B,EAAIH,MAAa,WAAQA,IAAW,WAAWE,CAAO,IAAI,KACtDD,MAAc,WAAQA,IAAY,WAAWE,CAAQ,IAAI;AAC7D,MAAIC,IAAW,KAAK,IAAI,SAASJ,CAAQ,IAAIvvH,GAAO,SAASwvH,CAAS,IAAIvvH,CAAM,GAAG2vH,IAAW,KAAK;AAAA,IACjG,KAAK,IAAI,SAASL,CAAQ,GAAG,SAASF,CAAQ,CAAC,IAAIrvH;AAAA,IACnD,KAAK,IAAI,SAASwvH,CAAS,GAAG,SAASF,CAAS,CAAC,IAAIrvH;AAAA,EAC3D,GAAO1lD,IAAQ,CAAC,MAAMq1K,CAAQ,KAAKA,IAAW,IAAIA,IAAWD,IAAW,IAAIA,IAAW;AACnF,EAAAvvC,EAAA,MAAKguC,IAAAyB,IAAL,WAAYX,GAAQ,qBAAqB,GAAGlvH,IAAQzlD,CAAK,OACzD6lI,EAAA,MAAKguC,IAAAyB,IAAL,WAAYX,GAAQ,sBAAsB,GAAGjvH,IAAS1lD,CAAK,OAC3D6lI,EAAA,MAAKguC,IAAAyB,IAAL,WAAYX,GAAQ,4BAA4B,OAAO/sE,GAAMniD,IAAQC,GAAQ,CAAC,CAAC,IAC/EmgF,EAAA,MAAKguC,IAAAyB,IAAL,WAAYV,GAAO,SAAS,GAAGA,EAAM,eAAe50K,CAAK,OACzD6lI,EAAA,MAAKguC,IAAAyB,IAAL,WAAYV,GAAO,UAAU,GAAGA,EAAM,gBAAgB50K,CAAK,OAC3D6lI,EAAA,MAAKguC,IAAAyB,IAAL,WACEV,GACA,aACAC,EAAU,SAAS,cAAcA,EAAU,OAAO,IAAI70K,CAAK,QAAQ60K,EAAU,OAAO,IAAI70K,CAAK,QAAQ,KAEvG6lI,EAAA,MAAKguC,IAAAyB,IAAL,WAAYV,GAAO,aAAa;AAClC,GACAU,KAAM,SAACj/J,GAAI7wB,GAAM6C,GAAO;AACtB,EAAAguB,EAAG,MAAM,YAAY7wB,GAAM6C,CAAK,GAChCq7I,EAAA,MAAKowC,IAAa,KAAK,MAAMz9J,EAAG,MAAM,eAAe7wB,CAAI,CAAC;AAC5D,GACA+uL,KAAY,WAAG;AACb,aAAW5kI,KAAS+zF,EAAA,MAAKowC,IAAc,CAAAnkI,EAAK;AAC5C,EAAA8zF,EAAA,MAAKqwC,IAAe,CAAA;AACtB,GA1IAztK,EADFlX,IACS,SAAQ;AAAA,EACb,KAAK;AAAA,EACL,MAAM;AAAA,EACN,aAAa;AACjB,IACEkX,EANFlX,IAMS,SAAQ,IAAIw3I,GAAM;AAAA,EACvB,KAAK;AAAA,EACL,KAAK;AAAA,EACL,YAAY,CAAA;AAAA,EACZ,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AACZ,CAAG,IAfHx3I;;AA8IA,MAAMomL,WAAwBC,GAAU;AAAA,EAAxC;AAAA;AACE,IAAAlyC,EAAA,MAAAmyC;AAAA;AAAA,EACA,SAASp/J,GAAI;AACX,IAAAotH,EAAA,MAAKgyC,IAAUpoL,GAAS6kL,GAAO,KAAK;AAAA,EACtC;AAAA,EACA,UAAU;AACR,UAAM,EAAE,UAAA16B,GAAU,eAAAiU,EAAa,IAAK,KAAK,MAAM;AAC/C,WAAOA,EAAa,IAAK/nB,EAAA,MAAK+xC,IAAQ,YAAW,IAAKj+B,EAAQ;AAAA,EAChE;AACF;AAREi+B,KAAA;;AAUF,MAAMC,WAAoB1uL,GAAU;AAAA,EAApC;AAAA;AAAA,IAAAs8I,EAAA,MAAAqyC;AAaE,IAAAryC,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAAmyC;AAAA;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,OAAO,MAAK;AAAA,EAC1B;AAAA,EACA,UAAU;AACR,IAAAhyC,EAAA,MAAK6Y,IAASvF,GAAe,IAC7BtT,EAAA,MAAKgyC,IAAUpoL,GAAS6kL,GAAO,KAAK,IACpCrsC,EAAA,MAAK8vC,IAAAtW,IAAL,YACA,KAAK,cAAc;AAAA,MACjB,gBAAgBx5B,EAAA,MAAK8vC,IAAA5B,IAAW,KAAK,IAAI;AAAA,MACzC,eAAe,KAAK,OAAO;AAAA,MAC3B,cAAcluC,EAAA,MAAK8vC,IAAA3B,IAAU,KAAK,IAAI;AAAA,MACtC,eAAepe,GAAU,KAAK,OAAO,MAAM;AAAA,IACjD,CAAK;AAAA,EACH;AAAA,EACA,SAASv/I,GAAI;AACX,IAAAwM,EAAOgjH,EAAA,MAAK8vC,IAAAC,IAAY,KAAK,IAAI,CAAC,GAClC/yJ,EAAOgjH,EAAA,MAAK8vC,IAAAE,IAAU,KAAK,IAAI,CAAC,GAChChzJ,EAAOgjH,EAAA,MAAK8vC,IAAAtW,IAAkB,KAAK,IAAI,CAAC,GACxCx8I,EAAOgjH,EAAA,MAAK8vC,IAAA5D,IAAa,KAAK,IAAI,CAAC,GACnClvJ,EAAOgjH,EAAA,MAAK8vC,IAAAG,IAAa,KAAK,IAAI,CAAC,GACnCjzJ,EAAOgjH,EAAA,MAAK8vC,IAAAI,IAAc,KAAK,IAAI,CAAC;AAAA,EACtC;AAmDF;AA1EEz5B,KAAA,eACAm5B,KAAA,eAdFE,KAAA,eAqCEC,KAAW,WAAG;AACZ,QAAMvlC,IAAQ,KAAK,OAAO,MAAK;AAC/B,EAAKA,MACDA,EAAM,cAAc,KAAGxK,EAAA,MAAK8vC,IAAAvsB,IAAL,YAC3B,IAAI/lB,GAAiBgN,CAAK,EAAE,IAAI,WAAWxK,EAAA,MAAK8vC,IAAAvsB,IAAW,KAAK,IAAI,CAAC,EAAE,IAAI,SAASvjB,EAAA,MAAK8vC,IAAAtxB,IAAS,KAAK,IAAI,CAAC;AAC9G,GACAwxB,KAAS,WAAG;AACV,QAAM,EAAE,KAAA/oL,EAAG,IAAK,KAAK,QAAQ,EAAE,SAAAksK,EAAO,IAAKt1B,EAAA,MAAK4Y,IAAO;AACvD,EAAAxvJ,EAAI,IAAIksK,EAAO,IAAK,KAAK,OAAO,IAAG,IAAK,IAAI;AAC9C,GACAqG,KAAiB,WAAG;AAClB,QAAM,EAAE,aAAa+U,EAAe,IAAK,KAAK,QAAQ,EAAE,aAAaC,EAAgB,IAAK,KAAK,QAAQ,EAAE,aAAaC,MAAqB5wC,EAAA,MAAK4Y,IAAO,QAAQ3iB,IAAcy6C,EAAe,MAAO,OAAOA,EAAe,IAAKE,EAAgB;AAC9O,EAAAD,EAAiB,IAAI16C,MAAgB,KAAO,cAAcA,CAAW;AACvE,GACAo6C,KAAU,WAAG;AACX,QAAM,EAAE,SAAA7f,GAAS,QAAAyb,EAAM,IAAK,KAAK;AACjC,SAAO,CAACzb,OAAa,CAACyb,EAAM;AAC9B,GACAqE,KAAS,WAAG;AACV,QAAM,EAAE,OAAAzxL,MAAU,KAAK;AACvB,SAAO,CAACmgJ,GAAOngJ,CAAK;AACtB,GACAwvL,KAAY,WAAG;AACb,QAAM,EAAE,KAAAjlL,GAAK,QAAA6iL,EAAM,IAAK,KAAK,QAAQ,EAAE,SAAA3W,GAAS,UAAAxhB,EAAQ,IAAK9T,EAAA,MAAK4Y,IAAO;AACzE,EAAAqzB,EAAO,IAAI3W,QAAc,CAAClsK,EAAG,KAAM+4I,EAAA,MAAK8vC,IAAA3B,IAAL,cAAoB,CAAC,OAAO,SAASx8B,EAAQ,CAAE,EAAE;AACtF,GACAs+B,KAAY,WAAG;AACb,QAAM,EAAE,KAAAhpL,GAAK,SAAAonK,GAAS,OAAA3xK,EAAK,IAAK,KAAK;AACrC,EAAAuK,EAAG,GACHonK,EAAQ,IAAI,EAAK,GACjB3xK,EAAM,IAAI,IAAI;AAChB,GACA6mK,KAAU,SAAC18H,GAAO;AAChB,QAAM,EAAE,SAAAwnI,GAAS,OAAA3xK,EAAK,IAAK,KAAK;AAChC,EAAA2xK,EAAQ,IAAI,EAAI,GAChB3xK,EAAM,IAAI,IAAI,GACd,KAAK,SAAS,YAAY,EAAE,SAASmqC,EAAK,CAAE;AAC9C,GACA23H,KAAQ,SAAC33H,GAAO;AACd,QAAM,EAAE,SAAAwnI,GAAS,OAAA3xK,EAAK,IAAK,KAAK;AAChC,EAAA2xK,EAAQ,IAAI,EAAK,GACjB3xK,EAAM,IAAImqC,CAAK,GACf,KAAK,SAAS,SAAS,EAAE,SAASA,EAAK,CAAE;AAC3C,GACAqpJ,KAAa,WAAG;AACd,QAAM,EAAE,OAAA1lC,GAAO,SAAA6jB,MAAY,KAAK,QAAQ,EAAE,UAAA1c,EAAQ,IAAK9T,EAAA,MAAK4Y,IAAO,QAAQ,EAAE,aAAA05B,EAAW,IAAKtyC,EAAA,MAAK+xC,KAASv5B,IAAQ7L,EAAK;AACxH,EADwI6jB,EAAO,KAAMhY,KAAS,OAAO,SAAS1E,EAAQ,CAAE,KAAK,OAAO,SAASw+B,EAAW,CAAE,MAExN95B,EAAM,cAAc85B,EAAW,IAAKx+B,EAAQ;AAEhD,GArFAnxI,EADIqvK,IACG,SAAQ;AAAA,EACb,KAAK;AAAA,EACL,aAAa;AACjB,IACErvK,EALIqvK,IAKG,SAAQ,IAAI/uC,GAAM;AAAA,EACvB,OAAO;AAAA,EACP,KAAK;AAAA,EACL,aAAa;AAAA,EACb,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AACZ,CAAG;AA4EH,MAAMsvC,KAAqBP,GAAY;AACvCxrK,GAAK+rK,IAAoB,OAAO;;AAEhC,MAAMC,WAAoBlvL,GAAU;AAAA,EAApC;AAAA;AAUE,IAAAs8I,EAAA,MAAA6yC;AACA,IAAA7yC,EAAA,MAAA8yC;AACA,IAAA9yC,EAAA,MAAAmyC;AAAA;AAAA,EACA,UAAU;AACR,IAAAhyC,EAAA,MAAKgyC,IAAUpoL,GAAS6kL,GAAO,KAAK,IACpCzuC,EAAA,MAAK0yC,IAAUt0K,GAAWovK,EAAwB,IAClDxtC,EAAA,MAAK2yC,IAAQ/zC,GAAS,KAAK,aAAa,KAAK,IAAI,CAAC;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAIA,eAAe;;AACb,UAAM;AAAA,MACJ,MAAA5+I;AAAA,MACA,QAAQ4yL;AAAA,MACR,eAAA/8B;AAAA,MACA,UAAAg9B;AAAA,MACA,YAAAC;AAAA,MACA,WAAAC;AAAA,MACA,QAAAvjB;AAAA,IACN,IAAQ,KAAK,QAAQ,EAAE,OAAOwjB,GAAa,cAAAtG,GAAc,KAAA1yJ,GAAK,KAAAC,EAAG,IAAKgmH,EAAA,MAAK+xC,KAASjzL,KAAS6zL,KAAA,gBAAAA,QAAe3yC,EAAA,MAAKyyC,IAAQ,SAC/G9tL,IAAQ5E,EAAI,MAAO,YAAYgzL,EAAW,IAAKtG,EAAY;AACjE,QAAI3tL,MAAW,WAAW;AACxB,YAAM8nC,IAAQ5M,EAAG,IAAKD,EAAG,GACnBi5J,IAAUruL,IAAQiiC,IAAQ;AAChC,cAAQo5G,EAAA,MAAKyyC,IAAQ,WAAWvuE,IAAO8uE,GAASp9B,EAAa,CAAE,IAAI;AAAA,IACrE,MAAO,QAAI92J,MAAW,UACZkhJ,EAAA,MAAKyyC,IAAQ,QAAQtjB,IAAYxqK,GAAO;AAAA,MAC9C,QAAQiuL,EAAQ;AAAA,MAChB,SAASC,EAAU;AAAA,MACnB,SAASC,EAAS;AAAA,MAClB,QAAQvjB,EAAM;AAAA,IACtB,CAAO,OAEO39J,KAAAnG,IAAAu0I,EAAA,MAAKyyC,KAAQ,UAAb,gBAAA7gL,EAAA,KAAAnG,GAAqB9G,OAAUA,EAAM,QAAQ,CAAC,KAAK;AAAA,EAE/D;AACF;AArCE8tL,KAAA,eACAC,KAAA,eACAX,KAAA,eAXApvK,EADI6vK,IACG,SAAQ;AAAA,EACb,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,eAAe;AACnB;AAuCA,MAAMS,KAAqBT,GAAY;AACvCx9H,GAAOi+H,IAAoB,cAAc;;AAEzC,MAAMC,WAAsB5vL,GAAU;AAAA,EAAtC;AAAA;AAKE,IAAAs8I,EAAA,MAAAmyC;AAyBA,IAAAnyC,EAAA,MAAAuzC,IAAmBlsC,GAAuB,MAAM;AAC9C,YAAM,EAAE,UAAA1+F,GAAU,aAAAuU,EAAW,IAAKkjF,EAAA,MAAK+xC;AACvC,UAAIxpI,EAAQ,EAAI;AAChB,YAAM51B,IAAK,KAAK,IAAI,EAAE,QAAAylF,GAAQ,SAAAg7E,EAAO,IAAK,KAAK;AAC/C,MAAKzgK,KACL0gK,GAA6B1gK,GAAI;AAAA,QAC/B,OAAO,CAACygK,EAAO;AAAA,QACf,QAAQh7E,EAAM;AAAA,QACd,aAAat7C,EAAW;AAAA,MAC9B,CAAK;AAAA,IACH,CAAC;AAAA;AAAA,EAlCD,UAAU;AACR,IAAAijF,EAAA,MAAKgyC,IAAU5zK,GAAWmsK,EAAa;AACvC,UAAM,EAAE,QAAA7rH,EAAM,IAAK90D,GAAS6kL,GAAO,KAAK;AACxC,SAAK,cAAc;AAAA,MACjB,gBAAgB/vH;AAAA,IACtB,CAAK;AAAA,EACH;AAAA,EACA,SAAS9rC,GAAI;AACX,WAAO,OAAOA,EAAG,OAAO;AAAA,MACtB,UAAU;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,IACb,CAAK;AAAA,EACH;AAAA,EACA,UAAUA,GAAI;AACZ,UAAM,EAAE,SAAA2gK,MAAYtzC,EAAA,MAAK+xC;AACzB,IAAAuB,EAAQ,IAAI3gK,CAAE,GACduqH,GAAU,MAAMo2C,EAAQ,IAAI,IAAI,CAAC,GACjCn0J,EAAO6gH,EAAA,MAAKmzC,IAAiB,KAAK,IAAI,CAAC;AACvC,UAAMvU,IAAS,IAAI,eAAe5+B,EAAA,MAAKmzC,IAAiB,KAAK,IAAI,CAAC;AAClE,IAAAvU,EAAO,QAAQjsJ,CAAE,GACjBuqH,GAAU,MAAM0hC,EAAO,YAAY;AAAA,EACrC;AAYF;AApCEmT,KAAA,eAyBAoB,KAAA,eA7BAxwK,EADIuwK,IACG,SAAQ;AAAA,EACb,QAAQ;AAAA,EACR,SAAS;AACb;AAsCA,SAASG,GAA6B1gK,GAAI;AAAA,EACxC,OAAA4xF;AAAA,EACA,QAAAnM;AAAA,EACA,aAAAt7C;AACF,GAAG;AACD,QAAMw2D,IAAgB,iBAAiB3gG,CAAE,GAAGovC,IAAQ,WAAWuxD,EAAc,KAAK,GAAGtxD,IAAS,WAAWsxD,EAAc,MAAM,GAAGj/E,IAAS;AAAA,IACvI,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,EACV;AAEE,MADAA,EAAOyoB,MAAgB,eAAe,WAAW,MAAM,IAAI,kDAAkDs7C,CAAM,QAC/Gt7C,MAAgB,cAAc;AAChC,UAAMy2H,IAAYxxH,IAAQ;AAC1B,QAAI,CAACwiD;AACH,MAAAlwE,EAAO,OAAO,gCAAgCk/I,CAAS;AAAA,SAClD;AACL,YAAMC,IAAY,yCAAyCD,CAAS,QAAQE,IAAa,eAAe1xH,CAAK;AAC7G,MAAA1tB,EAAO,OAAO,OAAOm/I,CAAS,KAAKC,CAAU;AAAA,IAC/C;AAAA,EACF,OAAO;AACL,UAAMC,IAAa1xH,IAAS;AAC5B,QAAI,CAACuiD;AACH,MAAAlwE,EAAO,SAAS,gCAAgCq/I,CAAU;AAAA,SACrD;AACL,YAAMC,IAAW,OAAOD,CAAU,oCAAoCA,CAAU,QAAQE,IAAc,eAAe5xH,CAAM;AAC3H,MAAA3tB,EAAO,SAAS,OAAOs/I,CAAQ,KAAKC,CAAW;AAAA,IACjD;AAAA,EACF;AACA,SAAO,OAAOjhK,EAAG,OAAO0hB,CAAM;AAChC;;AAEA,MAAMw/I,WAAqBvwL,GAAU;AAAA,EAArC;AAAA;AAAA,IAAAs8I,EAAA,MAAAk0C;AAOE,IAAAl0C,EAAA,MAAAgZ;AA2DA,IAAAhZ,EAAA,MAAAm0C,IAAwBnsC,GAAiBzF,EAAA,MAAK2xC,IAAAxuB,IAAgB,KAAK,IAAI,GAAG,EAAE;AAAA;AAAA,EA1D5E,UAAU;AACR,IAAAvlB,EAAA,MAAK6Y,IAASvF,GAAe;AAC7B,UAAM,EAAE,WAAA6d,EAAS,IAAKlxB,EAAA,MAAK4Y,IAAO;AAClC,IAAA1X,GAAeqsC,IAA0B;AAAA,MACvC,SAAS;AAAA,MACT,MAAM5oL,GAAO;AACX,gBAAQA,KAASusK,EAAS,KAAM,IAAI,QAAQ,CAAC;AAAA,MAC/C;AAAA,MACA,QAAQvsK,GAAO;AACb,eAAO,KAAK,MAAMA,KAASusK,EAAS,KAAM,EAAE;AAAA,MAC9C;AAAA,IACN,CAAK,GACD,IAAIsc,GAAiB;AAAA,MACnB,SAAS,KAAK,OAAO;AAAA,MACrB,YAAY,KAAK,OAAO;AAAA,MACxB,YAAY,KAAK;AAAA,MACjB,YAAYrrC,EAAA,MAAK2xC,IAAAE,IAAY,KAAK,IAAI;AAAA,MACtC,MAAM;AAAA,QACJ,UAAU7xC,EAAA,MAAK2xC,IAAAG,IAAiB,KAAK,IAAI;AAAA,QACzC,UAAU9xC,EAAA,MAAK2xC,IAAApF,IAAiB,KAAK,IAAI;AAAA,QACzC,WAAWvsC,EAAA,MAAK2xC,IAAAnF,IAAkB,KAAK,IAAI;AAAA,MACnD;AAAA,MACM,mBAAmBxsC,EAAA,MAAK2xC,IAAAI,IAAmB,KAAK,IAAI;AAAA,MACpD,eAAe/xC,EAAA,MAAK2xC,IAAAK,IAAe,KAAK,IAAI;AAAA,IAClD,CAAK,EAAE,OAAO,IAAI,GACdh1J,EAAOgjH,EAAA,MAAK2xC,IAAA1V,IAAa,KAAK,IAAI,CAAC;AAAA,EACrC;AAAA,EACA,SAASzrJ,GAAI;AACX,IAAAA,EAAG,aAAa,4BAA4B,EAAE,GAC9CyjI,GAAoBzjI,GAAI,cAAc,QAAQ;AAC9C,UAAM,EAAE,cAAAmoJ,EAAY,IAAK96B,EAAA,MAAK4Y,IAAO;AACrC,SAAK,cAAc;AAAA,MACjB,kBAAkBkiB;AAAA,MAClB,eAAe5I,GAAU,MAAM,CAAC4I,EAAY,CAAE;AAAA,IACpD,CAAK;AAAA,EACH;AAmCF;AAvEEliB,KAAA,eAPFk7B,KAAA,eA4CEpF,KAAgB,WAAG;AACjB,QAAM,EAAE,OAAA/pL,EAAK,IAAK,KAAK,QAAQ,EAAE,WAAAusK,EAAS,IAAKlxB,EAAA,MAAK4Y,IAAO;AAC3D,SAAO,KAAK,MAAMj0J,EAAK,KAAMusK,EAAS,KAAM,EAAE;AAChD,GACAyd,KAAiB,WAAG;AAClB,QAAM,EAAE,OAAAhqL,GAAO,KAAAq1B,EAAG,IAAK,KAAK,QAAQ,EAAE,WAAAk3I,EAAS,IAAKlxB,EAAA,MAAK4Y,IAAO;AAChE,SAAO10C,GAAMv/G,MAAUq1B,OAASk3I,OAAe,KAAK,KAAK,CAAC,IAAI;AAChE,GACA+iB,KAAgB,WAAG;AACjB,QAAM,EAAE,WAAA/iB,EAAS,IAAKlxB,EAAA,MAAK4Y,IAAO;AAClC,SAAO,KAAK,OAAO,IAAG,KAAMsY,EAAS,KAAM;AAC7C,GACA8iB,KAAW,WAAG;AACZ,QAAM,EAAE,UAAAzrI,EAAQ,IAAK,KAAK,QAAQ,EAAE,cAAAuyH,EAAY,IAAK96B,EAAA,MAAK4Y,IAAO;AACjE,SAAOrwG,EAAQ,KAAM,CAACuyH,EAAY;AACpC,GACAsD,KAAY,WAAG;AACb,QAAM,EAAE,OAAA7pB,GAAO,QAAAP,EAAM,IAAKhU,EAAA,MAAK4Y,IAAO,QAChC5iH,IAAWu+G,EAAK,IAAK,IAAIP,EAAM,IAAK;AAC1C,OAAK,OAAO,MAAM,IAAIh+G,CAAQ,GAC9B,KAAK,SAAS,gBAAgB,EAAE,QAAQA,EAAQ,CAAE;AACpD,GACA+9I,KAAA,eACAzuB,KAAe,SAACt8H,GAAO;AACrB,MAAI,CAACA,EAAM,QAAS;AACpB,QAAMorJ,IAAclwE,GAAMl7E,EAAM,SAAS,KAAK,CAAC;AAC/C,EAAAg3G,EAAA,MAAK4Y,IAAO,OAAO,aAAaw7B,GAAaprJ,CAAK;AACpD,GACAmrJ,KAAc,SAACnrJ,GAAO;AACpB,EAAAg3G,EAAA,MAAK+zC,IAAL,WAA2B/qJ;AAC7B,GACAkrJ,KAAkB,SAAClrJ,GAAO;AACxB,EAAAg3G,EAAA,MAAK+zC,IAAL,WAA2B/qJ;AAC7B,GA5EArmB,EADIkxK,IACG,SAAQ;AAAA,EACb,GAAGrG,GAAiB;AAAA,EACpB,SAAS;AAAA,EACT,oBAAoB;AACxB,IACE7qK,EANIkxK,IAMG,SAAQ7J;;AA0EjB,MAAMqK,WAAwB/wL,GAAU;AAAA,EAAxC;AAAA;AAAA,IAAAs8I,EAAA,MAAA00C;AAUE,IAAA10C,EAAA,MAAAgZ;AAAA;AAAA,EACA,UAAU;AACR,IAAA7Y,EAAA,MAAK6Y,IAASvF,GAAe,IAC7BnS,GAAeqsC,IAA0B;AAAA,MACvC,SAAS;AAAA,MACT,SAAS,CAAC1pK,GAAG+xI,MACJ1xC,GAAM,KAAK,OAAO,MAAK,GAAI0xC,CAAa,IAAI;AAAA,IAE3D,CAAK,GACD,IAAI43B,GAAiB;AAAA,MACnB,SAAS,KAAK,OAAO;AAAA,MACrB,YAAY,KAAK,OAAO;AAAA,MACxB,YAAY,KAAK;AAAA,MACjB,YAAYrrC,EAAA,MAAKmyC,IAAAN,IAAY,KAAK,IAAI;AAAA,MACtC,MAAM;AAAA,QACJ,UAAU7xC,EAAA,MAAKmyC,IAAA5F,IAAiB,KAAK,IAAI;AAAA,QACzC,WAAWvsC,EAAA,MAAKmyC,IAAA3F,IAAkB,KAAK,IAAI;AAAA,MACnD;AAAA,MACM,mBAAmBxsC,EAAA,MAAKmyC,IAAAJ,IAAmB,KAAK,IAAI;AAAA,MACpD,eAAe/xC,EAAA,MAAKmyC,IAAAH,IAAe,KAAK,IAAI;AAAA,IAClD,CAAK,EAAE,OAAO,IAAI,GACdh1J,EAAOgjH,EAAA,MAAKmyC,IAAA1F,IAAa,KAAK,IAAI,CAAC,GACnCzvJ,EAAOgjH,EAAA,MAAKmyC,IAAAC,IAAgB,KAAK,IAAI,CAAC;AAAA,EACxC;AAAA,EACA,SAAS5hK,GAAI;AACX,IAAAA,EAAG,aAAa,gCAAgC,EAAE,GAClDyjI,GAAoBzjI,GAAI,cAAc,aAAa;AACnD,UAAM,EAAE,iBAAAuhJ,EAAe,IAAKl0B,EAAA,MAAK4Y,IAAO;AACxC,SAAK,cAAc;AAAA,MACjB,kBAAkBsb;AAAA,MAClB,eAAehC,GAAU,MAAM,CAACgC,EAAe,CAAE;AAAA,IACvD,CAAK;AAAA,EACH;AAkCF;AAlEEtb,KAAA,eAVF07B,KAAA,eA2CE5F,KAAgB,WAAG;AACjB,QAAM,EAAE,OAAA/pL,MAAU,KAAK;AACvB,SAAO,KAAK,MAAMA,GAAO;AAC3B,GACAgqL,KAAiB,WAAG;AAClB,QAAM,EAAE,OAAAhqL,MAAU,KAAK;AACvB,SAAOA,EAAK,IAAK;AACnB,GACAiqL,KAAY,WAAG;AACb,QAAM,EAAE,KAAA70J,GAAK,KAAAC,EAAG,IAAK,KAAK;AAC1B,OAAK,OAAO,IAAI,IAAID,EAAG,CAAE,GACzB,KAAK,OAAO,IAAI,IAAIC,EAAG,CAAE;AAC3B,GACAu6J,KAAe,WAAG;AAChB,QAAM,EAAE,WAAArjB,EAAS,IAAKlxB,EAAA,MAAK4Y,IAAO,QAAQj0J,MAAUusK,EAAS,KAAM,KAAK,KAAK;AAC7E,OAAK,OAAO,MAAM,IAAIvsK,CAAK,GAC3B,KAAK,SAAS,gBAAgB,EAAE,QAAQA,EAAK,CAAE;AACjD,GACAqvL,KAAW,WAAG;AACZ,QAAM,EAAE,UAAAzrI,EAAQ,IAAK,KAAK,QAAQ,EAAE,iBAAA2rH,EAAe,IAAKl0B,EAAA,MAAK4Y,IAAO;AACpE,SAAOrwG,EAAQ,KAAM,CAAC2rH,EAAe;AACvC,GACAsgB,KAAkB,SAACxrJ,GAAO;AACxB,MAAI,CAACA,EAAM,QAAS;AACpB,QAAMkrH,IAAOhwC,GAAM,IAAIl7E,EAAM,SAAS,KAAK,CAAC;AAC5C,EAAAg3G,EAAA,MAAK4Y,IAAO,OAAO,gBAAgB1E,GAAMlrH,CAAK;AAChD,GACAmrJ,KAAc,SAACnrJ,GAAO;AACpB,EAAAm5G,EAAA,MAAKmyC,IAAAE,IAAL,WAAwBxrJ;AAC1B,GACAkrJ,KAAkB,SAAClrJ,GAAO;AACxB,EAAAm5G,EAAA,MAAKmyC,IAAAE,IAAL,WAAwBxrJ;AAC1B,GA1EArmB,EADI0xK,IACG,SAAQ;AAAA,EACb,GAAG7G,GAAiB;AAAA,EACpB,MAAM;AAAA,EACN,SAAS;AAAA,EACT,oBAAoB;AAAA,EACpB,KAAK;AAAA,EACL,KAAK;AACT,IACE7qK,EATI0xK,IASG,SAAQrK;;AAqEjB,MAAMyK,WAAoBnxL,GAAU;AAAA,EAApC;AAAA;AAAA,IAAAs8I,EAAA,MAAA80C;AAUE,IAAA90C,EAAA,MAAAgZ;AAqDA,IAAAhZ,EAAA,MAAA+0C,IAAwB/sC,GAAiBzF,EAAA,MAAKuyC,IAAAE,IAAsB,KAAK,IAAI,GAAG,EAAE;AAAA;AAAA,EApDlF,UAAU;AACR,IAAA70C,EAAA,MAAK6Y,IAASvF,GAAe,IAC7B,IAAIm6B,GAAiB;AAAA,MACnB,SAAS,KAAK,OAAO;AAAA,MACrB,YAAY,KAAK,OAAO;AAAA,MACxB,YAAYrrC,EAAA,MAAKuyC,IAAAG;AAAA,MACjB,YAAY1yC,EAAA,MAAKuyC,IAAAV,IAAY,KAAK,IAAI;AAAA,MACtC,MAAM;AAAA,QACJ,UAAU7xC,EAAA,MAAKuyC,IAAAhG,IAAiB,KAAK,IAAI;AAAA,QACzC,WAAWvsC,EAAA,MAAKuyC,IAAA/F,IAAkB,KAAK,IAAI;AAAA,MACnD;AAAA,MACM,mBAAmBxsC,EAAA,MAAKuyC,IAAAR,IAAmB,KAAK,IAAI;AAAA,MACpD,eAAe/xC,EAAA,MAAKuyC,IAAAP,IAAe,KAAK,IAAI;AAAA,IAClD,CAAK,EAAE,OAAO,IAAI,GACdh1J,EAAOgjH,EAAA,MAAKuyC,IAAA9F,IAAa,KAAK,IAAI,CAAC,GACnCzvJ,EAAOgjH,EAAA,MAAKuyC,IAAApW,IAAmB,KAAK,IAAI,CAAC;AAAA,EAC3C;AAAA,EACA,SAAS3rJ,GAAI;AACX,IAAAA,EAAG,aAAa,2BAA2B,EAAE,GAC7CyjI,GAAoBzjI,GAAI,cAAc,OAAO;AAC7C,UAAM,EAAE,oBAAAuiJ,EAAkB,IAAKl1B,EAAA,MAAK4Y,IAAO;AAC3C,SAAK,cAAc;AAAA,MACjB,kBAAkBsc;AAAA,MAClB,eAAehD,GAAU,MAAM,CAACgD,EAAkB,CAAE;AAAA,IAC1D,CAAK;AAAA,EACH;AAuCF;AAjEEtc,KAAA,eAVF87B,KAAA,eAqCEhG,KAAgB,WAAG;AACjB,QAAM,EAAE,OAAA/pL,MAAU,KAAK;AACvB,SAAOA,EAAK;AACd,GACAgqL,KAAiB,WAAG;AAClB,QAAM,EAAE,OAAAhqL,MAAU,KAAK;AACvB,SAAOA,EAAK,IAAK;AACnB,GACAiqL,KAAY,WAAG;AACb,QAAM,EAAE,KAAA70J,GAAK,KAAAC,EAAG,IAAK,KAAK;AAC1B,OAAK,OAAO,IAAI,IAAID,EAAG,CAAE,GACzB,KAAK,OAAO,IAAI,IAAIC,EAAG,CAAE;AAC3B,GACAskJ,KAAkB,WAAG;AACnB,QAAM,EAAE,cAAAthB,EAAY,IAAKhd,EAAA,MAAK4Y,IAAO,QAC/B5iH,IAAWgnH,EAAY;AAC7B,OAAK,OAAO,MAAM,IAAIhnH,CAAQ,GAC9B,KAAK,SAAS,gBAAgB,EAAE,QAAQA,EAAQ,CAAE;AACpD,GACA6+I,KAAW,SAAClwL,GAAO;AACjB,SAAOu/G,GAAMv/G,GAAO,CAAC;AACvB,GACAqvL,KAAW,WAAG;AACZ,QAAM,EAAE,UAAAzrI,EAAQ,IAAK,KAAK,QAAQ,EAAE,oBAAA2sH,EAAkB,IAAKl1B,EAAA,MAAK4Y,IAAO;AACvE,SAAOrwG,EAAQ,KAAM,CAAC2sH,EAAkB;AAC1C,GACAyf,KAAA,eACAC,KAAqB,SAAC5rJ,GAAO;AAC3B,MAAI,CAACA,EAAM,QAAS;AACpB,QAAMirH,IAAOjrH,EAAM;AACnB,EAAAg3G,EAAA,MAAK4Y,IAAO,OAAO,mBAAmB3E,GAAMjrH,CAAK;AACnD,GACAmrJ,KAAc,SAACnrJ,GAAO;AACpB,EAAAg3G,EAAA,MAAK20C,IAAL,WAA2B3rJ;AAC7B,GACAkrJ,KAAkB,SAAClrJ,GAAO;AACxB,EAAAg3G,EAAA,MAAK20C,IAAL,WAA2B3rJ;AAC7B,GAzEArmB,EADI8xK,IACG,SAAQ;AAAA,EACb,GAAGjH,GAAiB;AAAA,EACpB,MAAM;AAAA,EACN,SAAS;AAAA,EACT,oBAAoB;AAAA,EACpB,KAAK;AAAA,EACL,KAAK;AACT,IACE7qK,EATI8xK,IASG,SAAQzK;;AAoEjB,MAAM8K,WAAsBxxL,GAAU;AAAA,EAAtC;AAAA;AAAA,IAAAs8I,EAAA,MAAAm1C;AAQE,IAAAn1C,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAAo1C,IAAmBr2C,GAAS,MAAM;AAChC,YAAM,EAAE,WAAAwc,EAAS,IAAKnb,EAAA,MAAK4Y,IAAO;AAClC,aAAOsC,GAAmBC,GAAW;AAAA,IACvC,CAAC;AAkDD,IAAAvb,EAAA,MAAAq1C,IAA0BrtC,GAAiBzF,EAAA,MAAK4yC,IAAAnqB,IAAiB,KAAK,IAAI,GAAG,EAAE;AAAA;AAAA,EAjD/E,UAAU;AACR,IAAA7qB,EAAA,MAAK6Y,IAASvF,GAAe,IAC7B,IAAIm6B,GAAiB;AAAA,MACnB,SAAS,KAAK,OAAO;AAAA,MACrB,YAAY,KAAK,OAAO;AAAA,MACxB,YAAY,KAAK;AAAA,MACjB,YAAYrrC,EAAA,MAAK4yC,IAAAf,IAAY,KAAK,IAAI;AAAA,MACtC,MAAM;AAAA,QACJ,UAAU7xC,EAAA,MAAK4yC,IAAArG,IAAiB,KAAK,IAAI;AAAA,QACzC,WAAWvsC,EAAA,MAAK4yC,IAAApG,IAAkB,KAAK,IAAI;AAAA,MACnD;AAAA,MACM,mBAAmBxsC,EAAA,MAAK4yC,IAAAb,IAAmB,KAAK,IAAI;AAAA,MACpD,eAAe/xC,EAAA,MAAK4yC,IAAAZ,IAAe,KAAK,IAAI;AAAA,IAClD,CAAK,EAAE,OAAO,IAAI,GACdh1J,EAAOgjH,EAAA,MAAK4yC,IAAAG,IAAU,KAAK,IAAI,CAAC,GAChC/1J,EAAOgjH,EAAA,MAAK4yC,IAAAI,IAAc,KAAK,IAAI,CAAC;AAAA,EACtC;AAAA,EACA,SAASxiK,GAAI;AACX,IAAAA,EAAG,aAAa,6BAA6B,EAAE,GAC/CyjI,GAAoBzjI,GAAI,cAAc,eAAe;AACrD,UAAM,EAAE,WAAAwoI,GAAW,eAAAi6B,EAAa,IAAKp1C,EAAA,MAAK4Y,IAAO,QAAQy8B,IAAa12C,GAAS,MAAMy2C,EAAa,KAAMj6B,EAAS,EAAG,SAAS,CAAC;AAC9H,SAAK,cAAc;AAAA,MACjB,kBAAkBk6B;AAAA,MAClB,eAAenjB,GAAU,MAAM,CAACmjB,EAAU,CAAE;AAAA,IAClD,CAAK;AAAA,EACH;AAoCF;AAlEEz8B,KAAA,eACAo8B,KAAA,eATFD,KAAA,eAuCErG,KAAgB,WAAG;AACjB,QAAM,EAAE,OAAA/pL,MAAU,KAAK;AACvB,SAAOA,EAAK;AACd,GACAgqL,KAAiB,WAAG;AAClB,QAAM,EAAE,SAAAl6B,EAAO,IAAKzU,EAAA,MAAK4Y,IAAO;AAChC,MAAI,CAACnE,EAAO,EAAI,QAAO;AACvB,QAAM,EAAE,QAAAzyF,GAAQ,SAAAmqG,EAAO,IAAK1X,EAAO,GAAI6gC,IAAcnpB,KAAWA,IAAU,IAAI,IAAIA,IAAU,KAAK,QAAQ,CAAC,CAAC,UAAU;AACrH,SAAOnqG,IAAS,GAAGA,CAAM,IAAIszH,IAAc,KAAKA,CAAW,MAAM,EAAE,KAAK;AAC1E,GACAJ,KAAS,WAAG;AACV,QAAMK,IAAav1C,EAAA,MAAKg1C,IAAL;AACnB,OAAK,OAAO,IAAI,IAAI,KAAK,IAAI,GAAGO,EAAW,SAAS,CAAC,CAAC;AACxD,GACAJ,KAAa,WAAG;AACd,MAAI,EAAE,SAAA1gC,EAAO,IAAKzU,EAAA,MAAK4Y,IAAO,QAAQ28B,IAAav1C,EAAA,MAAKg1C,IAAL,YAAyBrwL,IAAQ,KAAK,IAAI,GAAG4wL,EAAW,QAAQ9gC,EAAO,CAAE,CAAC;AAC7H,OAAK,OAAO,MAAM,IAAI9vJ,CAAK,GAC3B,KAAK,SAAS,gBAAgB,EAAE,QAAQA,EAAK,CAAE;AACjD,GACAqvL,KAAW,WAAG;AACZ,QAAM,EAAE,UAAAzrI,MAAa,KAAK,QAAQ,EAAE,eAAA6sI,GAAe,WAAAj6B,EAAS,IAAKnb,EAAA,MAAK4Y,IAAO;AAC7E,SAAOrwG,EAAQ,KAAM4yG,EAAS,EAAG,UAAU,KAAK,CAACi6B,EAAa;AAChE,GACAH,KAAA,eACArqB,KAAgB,SAAC5hI,GAAO;AACtB,MAAI,CAACA,EAAM,QAAS;AACpB,QAAM,EAAE,WAAAmyH,EAAS,IAAKnb,EAAA,MAAK4Y,KAAQnE,IAAU9X,GAAKqD,EAAA,MAAKg1C,GAAgB,EAAEhsJ,EAAM,MAAM;AACrF,EAAAg3G,EAAA,MAAK4Y,IAAO,OAAO,cAAcuC,EAAU,QAAQ1G,CAAO,GAAGzrH,CAAK;AACpE,GACAmrJ,KAAc,SAACnrJ,GAAO;AACpB,EAAAg3G,EAAA,MAAKi1C,IAAL,WAA6BjsJ;AAC/B,GACAkrJ,KAAkB,SAAClrJ,GAAO;AACxB,EAAAg3G,EAAA,MAAKi1C,IAAL,WAA6BjsJ;AAC/B,GAxEArmB,EADImyK,IACG,SAAQ;AAAA,EACb,GAAGtH,GAAiB;AAAA,EACpB,MAAM;AAAA,EACN,SAAS;AAAA,EACT,oBAAoB;AACxB,IACE7qK,EAPImyK,IAOG,SAAQ9K;;AAqEjB,MAAMwL,WAAmBlyL,GAAU;AAAA,EAcjC,cAAc;AACZ,UAAK;AAfT,IAAAs8I,EAAA,MAAA61C;AAWE,IAAA71C,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAA81C;AACA,IAAA91C,EAAA,MAAA+1C,IAAWjxG,GAAO,IAAI;AAmFtB,IAAAk7D,EAAA,MAAAg2C,IAA0B;AAhFxB,UAAM,EAAE,gBAAAC,MAAmB,KAAK;AAChC,QAAIrI,GAAiB;AAAA,MACnB,cAAc,MAAM,CAACqI,EAAc;AAAA,MACnC,UAAU1zC,EAAA,MAAKszC,IAAAK,IAAU,KAAK,IAAI;AAAA,MAClC,SAAS3zC,EAAA,MAAKszC,IAAAM,IAAS,KAAK,IAAI;AAAA,MAChC,YAAY5zC,EAAA,MAAKszC,IAAAO,IAAY,KAAK,IAAI;AAAA,MACtC,YAAY7zC,EAAA,MAAKszC,IAAAZ;AAAA,MACjB,YAAY1yC,EAAA,MAAKszC,IAAAzB,IAAY,KAAK,IAAI;AAAA,MACtC,MAAM;AAAA,QACJ,UAAU7xC,EAAA,MAAKszC,IAAA/G,IAAiB,KAAK,IAAI;AAAA,QACzC,WAAWvsC,EAAA,MAAKszC,IAAA9G,IAAkB,KAAK,IAAI;AAAA,MACnD;AAAA,MACM,aAAaxsC,EAAA,MAAKszC,IAAAQ,IAAa,KAAK,IAAI;AAAA,MACxC,mBAAmB9zC,EAAA,MAAKszC,IAAAvB,IAAmB,KAAK,IAAI;AAAA,MACpD,WAAW/xC,EAAA,MAAKszC,IAAAS,IAAW,KAAK,IAAI;AAAA,MACpC,eAAe/zC,EAAA,MAAKszC,IAAAtB,IAAe,KAAK,IAAI;AAAA,IAClD,CAAK;AAAA,EACH;AAAA,EACA,UAAU;AACR,IAAAp0C,EAAA,MAAK6Y,IAASvF,GAAe,IAC7BnS,GAAeqsC,IAA0B;AAAA,MACvC,SAAS;AAAA,MACT,OAAOprC,EAAA,MAAKszC,IAAAU,IAAa,KAAK,IAAI;AAAA,MAClC,MAAMh0C,EAAA,MAAKszC,IAAAW,IAAY,KAAK,IAAI;AAAA,IACtC,CAAK,GACD,KAAK,cAAc;AAAA,MACjB,iBAAiBj0C,EAAA,MAAKszC,IAAAY,IAAa,KAAK,IAAI;AAAA,IAClD,CAAK,GACD,KAAK,UAAU;AAAA,MACb,qBAAqBl0C,EAAA,MAAKszC,IAAAa,IAAqB,KAAK,IAAI;AAAA,IAC9D,CAAK,GACDn3J,EAAOgjH,EAAA,MAAKszC,IAAApX,IAAkB,KAAK,IAAI,CAAC,GACxCl/I,EAAOgjH,EAAA,MAAKszC,IAAAc,IAAsB,KAAK,IAAI,CAAC;AAAA,EAC9C;AAAA,EACA,SAAS5jK,GAAI;AACX,IAAAA,EAAG,aAAa,0BAA0B,EAAE,GAC5CyjI,GAAoBzjI,GAAI,cAAc,MAAM;AAAA,EAC9C;AAAA,EACA,UAAUA,GAAI;AACZ,IAAAwM,EAAOgjH,EAAA,MAAKszC,IAAAe,IAAiB,KAAK,IAAI,CAAC,GACvCrmC,GAAqBnQ,EAAA,MAAK4Y,IAAO,YAAY,YAAY5Y,EAAA,MAAK21C,IAAS,GAAG;AAAA,EAC5E;AAuHF;AArKE/8B,KAAA,eACA88B,KAAA,eACAC,KAAA,eAbFF,KAAA,eA0DEa,KAAoB,WAAG;AACrB,QAAM,EAAE,aAAAG,GAAa,UAAA3iC,EAAQ,IAAK9T,EAAA,MAAK4Y,IAAO;AAC9C,SAAO10C,GAAM,KAAK,IAAIuyE,EAAW,IAAK,KAAK,IAAI3iC,EAAQ,GAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI;AAChF,GACAuiC,KAAY,WAAG;;AACb,QAAM,EAAE,UAAAviC,EAAQ,IAAK9T,EAAA,MAAK4Y,IAAO;AACjC,WAAOntJ,IAAAu0I,EAAA,MAAK21C,IAAL,+BAAAlqL,EAAiB,KAAK,WAAU,OAAO,SAASqoJ,EAAQ,CAAE,KAAKA,EAAQ,IAAK;AACrF,GACAyiC,KAAqB,WAAG;AACtB,EAAAx2C,EAAA,MAAK21C,IAAmB9tC;AAAA,IACtBzF,EAAA,MAAKszC,IAAA14B,IAAS,KAAK,IAAI;AAAA,IACvB,KAAK,OAAO,uBAAsB;AAAA,EACxC;AACE,GACAshB,KAAiB,WAAG;AAClB,MAAI,KAAK,OAAO,SAAU;AAC1B,QAAM,EAAE,OAAA15K,GAAO,UAAA4nL,MAAa,KAAK,QAAQv2I,IAAWmsG,EAAA,MAAKszC,IAAAK,IAAL;AACpD,EAAKn5C,GAAK4vC,CAAQ,MAChB5nL,EAAM,IAAIqxC,CAAQ,GAClB,KAAK,SAAS,gBAAgB,EAAE,QAAQA,EAAQ,CAAE;AAEtD,GACAwgJ,KAAgB,WAAG;AACjB,QAAM7iC,IAAS3T,EAAA,MAAK4Y,IAAO,OAAO,IAAI,EAAE,SAAA06B,EAAO,IAAKn1K,GAAWmsK,EAAa;AAC5E,EAAA32B,KAAU2/B,EAAO,KAAM1yC,GAAa+S,GAAQ,gBAAgB,KAAK,OAAO,QAAQ;AAClF,GACAoJ,KAAQ,SAAC7pG,GAAMlqB,GAAO;AACpB,EAAAg3G,EAAA,MAAK4Y,IAAO,OAAO,QAAQ1lG,GAAMlqB,CAAK;AACxC,GACA0tJ,KAAK,SAACxjI,GAAM8/H,GAAShqJ,GAAO;AAC1B,EAAAg3G,EAAA,MAAK01C,IAAiB,OAAM;AAC5B,QAAM,EAAE,MAAAnoI,EAAI,IAAKyyF,EAAA,MAAK4Y,IAAO;AAC7B,MAAIrrG,EAAI,KAAMylI,KAAW,IAAI;AAC3B,IAAAhzC,EAAA,MAAK4Y,IAAO,OAAO,eAAe5vH,CAAK;AACvC;AAAA,EACF;AACA,EAAAg3G,EAAA,MAAK4Y,IAAO,OAAO,KAAK1lG,GAAMlqB,CAAK;AACrC,GACA4sJ,KAAA,eACAK,KAAY,SAACjtJ,GAAO;AAClB,QAAM,EAAE,oBAAA2tJ,MAAuB,KAAK;AACpC,MAAIA,EAAkB,GAAI;AACxB,UAAM,EAAE,QAAAj3B,EAAM,IAAK1f,EAAA,MAAK4Y,IAAO;AAC/B,IAAA7Y,EAAA,MAAK61C,IAA0B,CAACl2B,EAAM,IACtC1f,EAAA,MAAK4Y,IAAO,OAAO,MAAM5vH,CAAK;AAAA,EAChC;AACF,GACAkrJ,KAAkB,SAAClrJ,GAAO;AACxB,EAAAg3G,EAAA,MAAK01C,IAAL,WAAsBvzC,EAAA,MAAKszC,IAAAmB,IAAL,WAAoB5tJ,EAAM,SAASA;AAC3D,GACAktJ,KAAU,SAACltJ,GAAO;AAChB,QAAM,EAAE,SAAAytI,EAAO,IAAKz2B,EAAA,MAAK4Y,IAAO;AAChC,EAAKjc,GAAK85B,CAAO,KAAGt0B,EAAA,MAAKszC,IAAA14B,IAAL,WAAc5a,EAAA,MAAKszC,IAAAmB,IAAL,WAAoB5tJ,EAAM,SAASA;AACrE,QAAMgqJ,IAAUhqJ,EAAM;AACtB,EAAAm5G,EAAA,MAAKszC,IAAAiB,IAAL,WAAWv0C,EAAA,MAAKszC,IAAAmB,IAAL,WAAoB5D,IAAUA,GAAShqJ;AAClD,QAAM,EAAE,oBAAA2tJ,MAAuB,KAAK;AACpC,EAAIA,EAAkB,KAAM32C,EAAA,MAAK41C,QAC/B51C,EAAA,MAAK4Y,IAAO,OAAO,KAAK5vH,CAAK,GAC7B+2G,EAAA,MAAK61C,IAA0B;AAEnC,GACAzB,KAAc,SAACnrJ,GAAO;AACpB,QAAM,EAAE,UAAAujJ,MAAa,KAAK;AAC1B,EAAIA,EAAQ,KAAM,CAACvjJ,EAAM,WACzBm5G,EAAA,MAAKszC,IAAAS,IAAL,WAAgBltJ;AAClB;AAAA;AAAA;AAIA8sJ,KAAS,WAAG;AACV,QAAM,EAAE,aAAAxkC,EAAW,IAAKtR,EAAA,MAAK4Y,IAAO;AACpC,SAAOzW,EAAA,MAAKszC,IAAAoB,IAAL,WAAoBvlC;AAC7B,GACAykC,KAAQ,WAAG;AACT,QAAMpxL,IAAQ,KAAK,OAAO,KAAI,IAAKq7I,EAAA,MAAK4Y,IAAO,OAAO,SAAQ,IAAK;AACnE,SAAO,OAAO,SAASj0J,CAAK,IAAIA,IAAQ;AAC1C,GACAqxL,KAAW,WAAG;AACZ,QAAMrxL,IAAQ,KAAK,OAAO,QAAO,IAAKq7I,EAAA,MAAK4Y,IAAO,OAAO,SAAQ,IAAK;AACtE,SAAO,OAAO,SAASj0J,CAAK,IAAIA,IAAQ;AAC1C,GACAkwL,KAAW,SAAClwL,GAAO;AACjB,SAAOu/G,GAAMv/G,GAAO,CAAC;AACvB,GACAqvL,KAAW,WAAG;AACZ,QAAM,EAAE,UAAAzrI,EAAQ,IAAK,KAAK,QAAQ,EAAE,SAAA6rH,EAAO,IAAKp0B,EAAA,MAAK4Y,IAAO;AAC5D,SAAOrwG,EAAQ,KAAM,CAAC6rH,EAAO;AAC/B;AAAA;AAAA;AAIAsa,KAAgB,WAAG;AACjB,QAAM,EAAE,OAAA/pL,MAAU,KAAK;AACvB,SAAO,KAAK,MAAMA,GAAO;AAC3B,GACAgqL,KAAiB,WAAG;AAClB,QAAMz7H,IAAOivF,EAAA,MAAKszC,IAAAmB,IAAL,WAAoB,KAAK,OAAO,MAAK,IAAK,EAAE,UAAA9iC,EAAQ,IAAK9T,EAAA,MAAK4Y,IAAO;AAClF,SAAO,OAAO,SAAS1lG,CAAI,IAAI,GAAG08G,GAAiB18G,CAAI,CAAC,WAAW08G,GAAiB9b,EAAQ,CAAE,CAAC,KAAK;AACtG;AAAA;AAAA;AAIA8iC,KAAc,SAAC5D,GAAS;AACtB,QAAM,EAAE,UAAAl/B,EAAQ,IAAK9T,EAAA,MAAK4Y,IAAO;AACjC,SAAO10C,GAAM8uE,IAAU,MAAMl/B,EAAQ,GAAI,CAAC;AAC5C,GACA+iC,KAAc,SAAC3jI,GAAM;AACnB,QAAM,EAAE,UAAAihH,GAAU,UAAArgB,EAAQ,IAAK9T,EAAA,MAAK4Y,IAAO,QAAQ3E,IAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAGkgB,MAAa,IAAI,KAAK,IAAIjhH,GAAM4gG,EAAQ,CAAE,IAAIA,EAAQ,CAAE,CAAC;AAC3I,SAAO,OAAO,MAAMG,CAAI,IAAI,IAAI,OAAO,SAASA,CAAI,IAAIA,IAAO,MAAM;AACvE,GACAkiC,KAAY,SAACnD,GAAS;AACpB,QAAM9/H,IAAOivF,EAAA,MAAKszC,IAAAmB,IAAL,WAAoB5D,IAAU,EAAE,MAAAzlI,GAAM,UAAAumG,EAAQ,IAAK9T,EAAA,MAAK4Y,IAAO;AAC5E,SAAO,OAAO,SAAS1lG,CAAI,KAAK3F,EAAI,IAAK2F,IAAO4gG,EAAQ,IAAK5gG,GAAM,QAAQ,CAAC,IAAI;AAClF,GACAkjI,KAAW,SAACpD,GAASt5J,GAAS;AAC5B,QAAMw5B,IAAOivF,EAAA,MAAKszC,IAAAmB,IAAL,WAAoB5D,IAAU,EAAE,MAAAzlI,GAAM,UAAAumG,EAAQ,IAAK9T,EAAA,MAAK4Y,IAAO,QAAQj0J,IAAQ4oD,EAAI,IAAK2F,IAAO4gG,EAAQ,IAAK5gG;AACzH,SAAO,OAAO,SAASA,CAAI,IAAI,GAAGvuD,IAAQ,IAAI,MAAM,EAAE,GAAGwqK,GAAW,KAAK,IAAIxqK,CAAK,GAAG+0B,CAAO,CAAC,KAAK;AACpG,GA9KA/W,EADI6yK,IACG,SAAQ;AAAA,EACb,GAAGhI,GAAiB;AAAA,EACpB,MAAM;AAAA,EACN,SAAS;AAAA,EACT,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,wBAAwB;AAC5B,IACE7qK,EAVI6yK,IAUG,SAAQxL;;AAwKjB,MAAM8M,WAAuBxzL,GAAU;AAAA,EAAvC;AAAA;AAAA,IAAAs8I,EAAA,MAAAm3C;AAIE,IAAAn3C,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAAo3C;AACA,IAAAp3C,EAAA,MAAAq3C;AACA,IAAAr3C,EAAA,MAAAs3C,IAAY;AACZ,IAAAt3C,EAAA,MAAAu3C,IAAQ,CAAA;AACR,IAAAv3C,EAAA,MAAAw3C,IAAU1yG,GAAO,IAAI;AACrB,IAAAk7D,EAAA,MAAAy3C,IAAS3yG,GAAO,EAAE;AAClB,IAAAk7D,EAAA,MAAA03C,IAAe5yG,GAAO,EAAE;AACxB,IAAAk7D,EAAA,MAAA23C,IAAsB7yG,GAAO,EAAE;AAC/B,IAAAk7D,EAAA,MAAA43C,IAAiB;AAgIjB,IAAA53C,EAAA,MAAA63C,IAAyBxwC,GAAuB,CAACywC,MAAoB;;AACnE,UAAI1E,GAASlhC,IAAO9R,EAAA,MAAKq3C,IAAL,YAAe,EAAE,eAAAlc,EAAa,IAAKn7B,EAAA,MAAK4Y,IAAO,QAAQ77E,IAAYo+F,EAAa,GAAIpnB,IAAU5R,EAAA,MAAK40C,IAAAY,IAAL,WAAiB7lC;AACnI,eAASvqJ,IAAIy4I,EAAA,MAAKw3C,KAAgBjwL,IAAIy4I,EAAA,MAAKm3C,IAAM,QAAQ5vL;AAGvD,YAFAyrL,IAAU7wC,EAAA,MAAK40C,IAAAa,IAAL,WAAkB9lC,EAAKvqJ,CAAC,GAAGmwL,GAAiB36G,GAAWg3E,KACjEtoJ,IAAAu0I,EAAA,MAAKm3C,IAAM5vL,CAAC,MAAZ,QAAAkE,EAAe,MAAM,YAAY,sBAAsBunL,IAAU,MAC7DA,IAAU,KAAK;AACjB,UAAAjzC,EAAA,MAAKy3C,IAAiBjwL;AACtB;AAAA,QACF;AAAA,IAEJ,CAAC;AACD,IAAAq4I,EAAA,MAAAi4C,IAAmBl5C,GAASwD,EAAA,MAAK40C,IAAAe,IAA0B,KAAK,IAAI,CAAC;AAoFrE,IAAAl4C,EAAA,MAAAm4C,IAAgB1vC;AAAA,MACd,MAAM;AACJ,cAAMx9C,IAAQ8xC,GAAKqD,EAAA,MAAKo3C,GAAO;AAC/B,QAAI,CAAC,KAAK,SAAS,CAACvsF,KAAS,CAACA,EAAM,KAAK,WACzCm1C,EAAA,MAAKq3C,IAAO,IAAIl1C,EAAA,MAAK40C,IAAAiB,IAAL,WAAentF,EAAM,KAAK,GAC1Cm1C,EAAA,MAAKs3C,IAAa,IAAI,CAAC,GACvBv3C,EAAA,MAAKy3C,IAAiB;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAAA;AAAA,EAxOE,IAAI,OAAO;AACT,WAAOx3C,EAAA,MAAKq3C,IAAL;AAAA,EACT;AAAA,EACA,IAAI,YAAY;AACd,WAAOr3C,EAAA,MAAKq3C,IAAL,WAAcr3C,EAAA,MAAKs3C,IAAL,UAAmB,KAAK;AAAA,EAC/C;AAAA,EACA,IAAI,mBAAmB;AACrB,WAAOt3C,EAAA,MAAKq3C,IAAL,WAAcr3C,EAAA,MAAKu3C,IAAL,UAA0B,KAAK;AAAA,EACtD;AAAA,EACA,UAAU;AACR,IAAAx3C,EAAA,MAAK6Y,IAASvF,GAAe,IAC7BtT,EAAA,MAAKi3C,IAAertL,GAAS6rL,GAAW,KAAK;AAAA,EAC/C;AAAA,EACA,SAAS7iK,GAAI;AACX,IAAAw9H,GAAqBnQ,EAAA,MAAK4Y,IAAO,YAAY,YAAYzW,EAAA,MAAK40C,IAAAkB,IAAU,KAAK,IAAI,CAAC,GAClF94J,EAAOgjH,EAAA,MAAK40C,IAAAmB,IAAa,KAAK,IAAI,CAAC;AAAA,EACrC;AAAA,EACA,YAAY;AACV,IAAAh7C,GAAU,MAAMiF,EAAA,MAAK40C,IAAA5rB,IAAO,KAAK,IAAI,CAAC;AAAA,EACxC;AAAA,EACA,YAAY;AACV,IAAAhpB,EAAA,MAAK40C,IAAAkB,IAAL,WAAe;AAAA,EACjB;AAAA,EACA,QAAQpoL,GAAM;;AAGZ,QAFAkwI,EAAA,MAAKo3C,IAAQtnL,KACbpE,IAAAu0I,EAAA,MAAKi3C,QAAL,QAAAxrL,EAAmB,WACfu0I,EAAA,MAAKm3C,IAAM,WAAW,GAAG;AAC3B,YAAMxkK,IAAKqtH,EAAA,MAAKm3C,IAAM,CAAC;AACvB,MAAAxkK,EAAG,MAAM,QAAQ,QACjBA,EAAG,MAAM,YAAY,kBAAkB,oBAAoB,GAC3DA,EAAG,MAAM,YAAY,sBAAsB,wBAAwB;AAAA,IACrE,MAAO,CAAIqtH,EAAA,MAAKm3C,IAAM,SAAS,KAC7Bp6C,GAAO,MAAMoF,EAAA,MAAK40C,IAAAoB,IAAL,YAAep4C,EAAA,MAAKk3C,IAAeltJ,KAAa;AAAA,EAEjE;AAsNF;AAlQE6uH,KAAA,eACAo+B,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eAbFT,KAAA,eAiDEkB,KAAS,SAACptF,GAAO;AACf,EAAI8xC,GAAKqD,EAAA,MAAKo3C,GAAO,MAAMvsF,MAC3Bs3C,EAAA,MAAK40C,IAAA5rB,IAAL,YACAnrB,EAAA,MAAKo3C,IAAQ,IAAIvsF,CAAK;AACxB,GACAsgE,KAAM,WAAG;;AACP,EAAAprB,EAAA,MAAKo3C,IAAQ,CAAA,IACbn3C,EAAA,MAAKq3C,IAAO,IAAI,EAAE,GAClBr3C,EAAA,MAAKs3C,IAAa,IAAI,EAAE,GACxBt3C,EAAA,MAAKu3C,IAAoB,IAAI,EAAE,GAC/Bx3C,EAAA,MAAKy3C,IAAiB,KACtB/rL,IAAAu0I,EAAA,MAAKi3C,QAAL,QAAAxrL,EAAmB;AACrB,GACA0sL,KAAM,WAAG;AACP,EAAKn4C,EAAA,MAAKm3C,IAAM,UAChBh4J,EAAOgjH,EAAA,MAAK40C,IAAAqB,IAAc,KAAK,IAAI,CAAC;AACtC,GACAA,KAAa,WAAG;AACd,QAAM,EAAE,QAAAnM,MAAWjsC,EAAA,MAAKg3C;AACxB,EAAI/K,EAAM,MACV9sJ,EAAOgjH,EAAA,MAAK40C,IAAAsB,IAAsB,KAAK,IAAI,CAAC,GAC5Cl5J,EAAOgjH,EAAA,MAAK40C,IAAAuB,IAAkB,KAAK,IAAI,CAAC,GACxCn5J,EAAOgjH,EAAA,MAAK40C,IAAAwB,IAAqB,KAAK,IAAI,CAAC,GAC3Cp5J,EAAOgjH,EAAA,MAAK40C,IAAAyB,IAAsB,KAAK,IAAI,CAAC;AAC9C,GACAH,KAAqB,WAAG;AACtB,QAAMvmC,IAAO9R,EAAA,MAAKq3C,IAAL;AACb,MAAI,CAACvlC,EAAK,OAAQ;AAClB,MAAI5B,GAAK,EAAE,eAAAirB,GAAe,aAAA7G,MAAgBt0B,EAAA,MAAK4Y,IAAO,QAAQ77E,IAAYo+F,EAAa,GAAIpnB,IAAUugB,EAAW,KAAMxiB,EAAKA,EAAK,SAAS,CAAC,EAAE,SAASgC,IAAWC,IAAUh3E,GAAW07G,IAAiB;AACtM,WAASlxL,IAAI,GAAGA,IAAIuqJ,EAAK,QAAQvqJ;AAE/B,QADA2oJ,IAAM4B,EAAKvqJ,CAAC,GACRy4I,EAAA,MAAKm3C,IAAM5vL,CAAC,GAAG;AACjB,YAAMw6D,IAAQx6D,MAAMuqJ,EAAK,SAAS,IAAI2mC,IAAiBv0E,IAAOgsC,EAAI,UAAU,KAAK,IAAInzE,GAAWmzE,EAAI,SAAS,KAAK4D,IAAW,KAAK,CAAC;AACnI,MAAA9T,EAAA,MAAKm3C,IAAM5vL,CAAC,EAAE,MAAM,QAAQw6D,IAAQ,KACpC02H,KAAkB12H;AAAA,IACpB;AAEJ,GACAu2H,KAAiB,WAAG;AAClB,MAAI,EAAE,UAAAnkB,GAAU,eAAAgH,GAAe,aAAA7G,EAAW,IAAKt0B,EAAA,MAAK4Y,IAAO,QAAQ,EAAE,aAAAi1B,GAAa,OAAAlpL,EAAK,IAAKq7I,EAAA,MAAKg3C,KAAcllC,IAAO9R,EAAA,MAAKq3C,IAAL,YAAeqB,IAAavkB,EAAQ,GAAIwkB,IAAkBh8C,GAAKqD,EAAA,MAAKs3C,GAAY,GAAGsB,IAAiB9mC,EAAK6mC,CAAe,GAC1OE,IAAqBH,IAAa14C,EAAA,MAAKq3C,IAAO,SAAS,IAAIl1C,EAAA,MAAK40C,IAAA+B,IAAL,WAC7DF,KAAiBA,EAAe,YAAYtkB,MAAgB,OAAO33B,GAAKh4I,CAAK,IAAIg0L,IAAsB,GACvG9K,EAAW;AAEb,EAAI6K,KAAc,CAACE,IACjBz2C,EAAA,MAAK40C,IAAAgC,IAAL,WAAyB,GAAGjnC,EAAK,QAAQ,OAChC+mC,IAAqBF,IAC9Bx2C,EAAA,MAAK40C,IAAAgC,IAAL,WAAyBJ,GAAiBE,GAAoB,OACrDA,IAAqBF,KAC9Bx2C,EAAA,MAAK40C,IAAAgC,IAAL,WAAyBF,IAAqB,GAAGF,IAAkB,GAAG;AAExE,QAAM3F,IAAU0F,IAAa,MAAMv2C,EAAA,MAAK40C,IAAAa,IAAL,WACjC9lC,EAAK+mC,CAAkB,GACvBhL,EAAW,GACX1S,EAAa,GACbh5B,EAAA,MAAK40C,IAAAY,IAAL,WAAiB7lC;AAEnB,EAAA3P,EAAA,MAAK40C,IAAAiC,IAAL,WAAwBh5C,EAAA,MAAKm3C,IAAM0B,CAAkB,GAAG7F,IACxDhzC,EAAA,MAAKs3C,IAAa,IAAIuB,CAAkB;AAC1C,GACAN,KAAoB,WAAG;AACrB,MAAI,EAAE,QAAAtM,GAAQ,gBAAA6B,EAAc,IAAK9tC,EAAA,MAAKg3C;AACtC,MAAI/K,EAAM,GAAI;AACZ,IAAAjsC,EAAA,MAAKu3C,IAAoB,IAAI,EAAE;AAC/B;AAAA,EACF;AACA,QAAMxG,IAAc5uC,EAAA,MAAK40C,IAAA+B,IAAL,WAA6B,GAAGhL,EAAc;AAClE,EAAA9tC,EAAA,MAAKu3C,IAAoB,IAAIxG,CAAW;AAC1C,GACAgI,KAAmB,SAAClsL,GAAOC,GAAKkmL,GAAS;AACvC,WAAS,IAAInmL,GAAO,IAAIC,GAAK,IAAK,CAAAq1I,EAAA,MAAK40C,IAAAiC,IAAL,WAAwBh5C,EAAA,MAAKm3C,IAAM,CAAC,GAAGnE;AAC3E,GACAgG,KAAkB,SAAChzL,GAAKgtL,GAAS;AAC/B,EAAKhtL,MACLA,EAAI,MAAM,YAAY,kBAAkBgtL,IAAU,GAAG,GACrDpyC,GAAa56I,GAAK,eAAegtL,IAAU,KAAKA,IAAU,GAAG,GAC7DpyC,GAAa56I,GAAK,cAAcgtL,MAAY,GAAG;AACjD,GACA8F,KAAuB,SAACv5H,GAAYyzH,GAAS;AAC3C,MAAIiG,IAAiB,GAAGnnC,IAAO9R,EAAA,MAAKq3C,IAAL;AAC/B,MAAIrE,MAAY,EAAG,QAAO;AACrB,MAAIA,MAAY,IAAK,QAAOlhC,EAAK,SAAS;AAC/C,MAAI,EAAE,eAAAqpB,EAAa,IAAKn7B,EAAA,MAAK4Y,IAAO,QAAQ77E,IAAYo+F,EAAa,GAAIpnB,IAAU5R,EAAA,MAAK40C,IAAAY,IAAL,WAAiB7lC;AACpG,WAASvqJ,IAAIg4D,GAAYh4D,IAAIuqJ,EAAK,QAAQvqJ;AAExC,QADA0xL,IAAiB92C,EAAA,MAAK40C,IAAAa,IAAL,WAAkB9lC,EAAKvqJ,CAAC,GAAGyrL,GAASj2G,GAAWg3E,IAC5DklC,KAAkB,KAAKA,IAAiB,IAAK,QAAO1xL;AAE1D,SAAO;AACT,GACAixL,KAAqB,WAAG;AACtB,EAAAx4C,EAAA,MAAKy3C,IAAL,WAA4Bz3C,EAAA,MAAK63C,IAAL;AAC9B,GACAJ,KAAA,eAWAI,KAAA,eACAC,KAAyB,WAAG;AAC1B,QAAM,EAAE,aAAArB,GAAa,UAAA3iC,EAAQ,IAAK9T,EAAA,MAAK4Y,IAAO;AAC9C,SAAO10C,GAAM,KAAK,IAAIuyE,EAAW,IAAK,KAAK,IAAI3iC,EAAQ,GAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;AAC1E,GACA6jC,KAAW,SAAC7lC,GAAM;;AAChB,QAAM,EAAE,aAAAwiB,EAAW,IAAKt0B,EAAA,MAAK4Y,IAAO,QAAQ7E,IAAUugB,EAAW;AACjE,SAAO,OAAO,SAASvgB,CAAO,IAAIA,MAAUtoJ,IAAAqmJ,EAAKA,EAAK,SAAS,CAAC,MAApB,gBAAArmJ,EAAuB,YAAW;AAChF,GACAmsL,KAAY,SAAC1nC,GAAK8iC,GAASj2G,GAAWg3E,GAAS;AAG7C,MAFI,CAAC7D,KACQlQ,EAAA,MAAKq3C,IAAL,WACJ,WAAW,EAAG,QAAO;AAC9B,QAAMvjC,IAAWC,IAAUh3E,GAAWm8G,IAAe,KAAK,IAAI,GAAGhpC,EAAI,YAAYnzE,CAAS,GAAGo8G,IAAa,KAAK,IAAIplC,GAAS7D,EAAI,OAAO,IAAInzE,GACrIq8G,IAAaF,IAAeplC,GAAUulC,IAAeD,IAAa,KAAKE,IAAa,KAAK,IAAI,GAAGF,KAAcD,IAAaD,KAAgBplC,CAAQ,IAAI;AAC7J,SAAO,KAAK;AAAA,IACV;AAAA,IACA5vC;AAAA,MACE8uE,KAAWsG,IAAa,OAAOtG,IAAUqG,MAAiBC,IAAaD,KAAgB;AAAA,MACvF;AAAA,IACR;AAAA,EACA;AACE,GACArB,KAAS,SAAClmC,GAAM;AACd,MAAIynC,IAAW,CAAA,GAAI,EAAE,eAAApe,GAAe,aAAA7G,GAAa,UAAAxgB,EAAQ,IAAK9T,EAAA,MAAK4Y,IAAO,QAAQ77E,IAAYo+F,EAAa,GAAIpnB,IAAUugB,EAAW;AACpI,EAAAxiB,IAAOA,EAAK,OAAO,CAAC5B,MAAQA,EAAI,aAAa6D,KAAW7D,EAAI,WAAWnzE,CAAS;AAChF,QAAMy8G,IAAW1nC,EAAK,CAAC;AACvB,EAAI0nC,KAAYA,EAAS,YAAYz8G,KACnCw8G,EAAS,KAAK,IAAI,OAAO,OAAOx8G,GAAWy8G,EAAS,WAAW,EAAE,CAAC;AAEpE,WAASjyL,IAAI,GAAGA,IAAIuqJ,EAAK,SAAS,GAAGvqJ,KAAK;AACxC,UAAMkyL,IAAa3nC,EAAKvqJ,CAAC,GAAGmyL,IAAU5nC,EAAKvqJ,IAAI,CAAC;AAEhD,QADAgyL,EAAS,KAAKE,CAAU,GACpBC,GAAS;AACX,YAAMC,IAAWD,EAAQ,YAAYD,EAAW;AAChD,MAAIE,IAAW,KACbJ,EAAS,KAAK,IAAI,OAAO,OAAOE,EAAW,SAASA,EAAW,UAAUE,GAAU,EAAE,CAAC;AAAA,IAE1F;AAAA,EACF;AACA,QAAMC,IAAU9nC,EAAKA,EAAK,SAAS,CAAC;AACpC,MAAI8nC,GAAS;AACX,IAAAL,EAAS,KAAKK,CAAO;AACrB,UAAMC,IAAW/lC,EAAQ;AACzB,IAAI+lC,KAAY,KAAKA,IAAWD,EAAQ,UAAU,KAChDL,EAAS,KAAK,IAAI,OAAO,OAAOK,EAAQ,SAAS9lC,KAAY,EAAE,CAAC;AAAA,EAEpE;AACA,SAAOylC;AACT,GACArB,KAAY,WAAG;AACb,QAAM,EAAE,QAAAn2L,EAAM,IAAKi+I,EAAA,MAAK4Y,IAAO;AAC/B,EAAA72J,EAAM,GACNogJ,EAAA,MAAK40C,IAAAjsB,IAAL;AACF,GACAA,KAAc,WAAG;AACf,MAAI,CAAC,KAAK,MAAO;AACjB,QAAM,EAAE,UAAAviH,MAAa,KAAK;AAC1B,MAAIA,EAAQ,GAAI;AACd,IAAAy3F,EAAA,MAAKq3C,IAAO,IAAI,EAAE,GAClBr3C,EAAA,MAAKs3C,IAAa,IAAI,CAAC,GACvBv3C,EAAA,MAAKy3C,IAAiB;AACtB;AAAA,EACF;AACA,QAAM3sF,IAAQm1C,EAAA,MAAKo3C,IAAL;AACd,MAAIvsF,GAAO;AACT,UAAMivF,IAAe95C,EAAA,MAAK+3C,IAAc,KAAK,IAAI;AACjD,IAAA+B,EAAY,GACZ,IAAIn6C,GAAiB90C,CAAK,EAAE,IAAI,WAAWivF,CAAY,EAAE,IAAI,cAAcA,CAAY,GACvF36J,EAAOgjH,EAAA,MAAK40C,IAAAgD,IAAoB,KAAK,IAAI,CAAC;AAAA,EAC5C;AACA,SAAAh6C,EAAA,MAAKm3C,IAAY/0C,EAAA,MAAK40C,IAAAiD,IAAL,aACbh6C,EAAA,MAAKk3C,OAAW/3J,EAAOgjH,EAAA,MAAK40C,IAAAkD,IAAsB,KAAK,IAAI,CAAC,GACzD,MAAM;AACX,IAAIj6C,EAAA,MAAKk3C,QACPl3C,EAAA,MAAKk3C,IAAU,cAAc,IAC7Bn3C,EAAA,MAAKm3C,IAAY;AAAA,EAErB;AACF,GACA6C,KAAmB,WAAG;AACpB,EAAA/5C,EAAA,MAAK4Y,IAAO,OAAO,SAAQ,GAC3B5Y,EAAA,MAAK+3C,IAAL;AACF,GACAA,KAAA,eAWAkC,KAAqB,WAAG;AACtB,QAAM/pC,IAAM,KAAK,oBAAoB,KAAK;AAC1C,EAAIlQ,EAAA,MAAKk3C,QAAWl3C,EAAA,MAAKk3C,IAAU,eAAchnC,KAAA,gBAAAA,EAAK,SAAQ;AAChE,GACAgqC,KAAiB,WAAG;AAClB,MAAI5yL,IAAO,KAAK;AAChB,SAAOA,KAAQA,EAAK,aAAa,MAAM,MAAM;AAC3C,IAAAA,IAAOA,EAAK;AAEd,SAAOA;AACT,GACA0yL,KAAoB,WAAG;AACrB,QAAMG,IAASh4C,EAAA,MAAK40C,IAAAmD,IAAL;AACf,SAAOC,IAASA,EAAO,cAAc,6BAA6B,IAAI;AACxE,GApQAx3K,EADIm0K,IACG,SAAQ;AAAA,EACb,UAAU;AACd;AAoQA,MAAMsD,KAAwBtD,GAAe;AAC7CtwK,GAAK4zK,IAAuB,MAAM;AAClC5zK,GAAK4zK,IAAuB,WAAW;AACvC5zK,GAAK4zK,IAAuB,kBAAkB;AAC9CplI,GAAOolI,IAAuB,SAAS;AAEvC,MAAMC,KAAcp8K,GAAa;AAEjC,SAASq8K,GAAe3nK,GAAI+G,GAAS;AACnC,QAAM6gK,IAAU1oL,GAAE8gB,GAAI+G,CAAO;AAC7B,aAAW,EAAE,IAAI8gK,GAAK,KAAA5gJ,GAAK,MAAAlc,EAAI,KAAM68J;AACnC,IAAAC,EAAI,OAAO,EAAE,KAAA5gJ,GAAK,MAAAlc,GAAM,UAAUhE,EAAQ,UAAU;AAExD;AACA,SAAS+gK,GAAiB9nK,GAAI+G,IAAU,IAAI;AAC1C,EAAA4gK,GAAe3nK,GAAI;AAAA,IACjB,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,GAAG+G;AAAA,EACP,CAAG;AACH;AAEA,MAAMghK,KAA8C;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,IAAI,CAAC/rE,MAAa,GAAGA,CAAQ,4BAA4B,EAAE,KAAK,GAAG,GAC/DgsE,KAA6B,oBAAI,IAAI;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;AACD,MAAMC,GAAoB;AAAA,EAQxB,YAAY7U,GAAU;AARxB,IAAAnmC,EAAA,MAAAi7C;AACE,IAAAj7C,EAAA,MAAAk7C,IAAS;AACT,IAAAl7C,EAAA,MAAAm7C,IAAM;AACN,IAAAn7C,EAAA,MAAAo7C,IAAY,CAAA;AACZ,IAAAp7C,EAAA,MAAAqmC;AAKE,IAAAlmC,EAAA,MAAKkmC,IAAYF;AAAA,EACnB;AAAA,EALA,IAAI,QAAQ;AACV,WAAO/lC,EAAA,MAAKg7C;AAAA,EACd;AAAA,EAIA,WAAWroK,GAAI;AACb,IAAA+sH,GAAY/sH,GAAI,SAASwvH,EAAA,MAAK04C,IAAAnd,IAAS,KAAK,IAAI,CAAC,GACjD39B,EAAA,MAAKg7C,IAAMpoK,IACXuqH,GAAU,MAAM;AACd,MAAA6C,EAAA,MAAKg7C,IAAM;AAAA,IACb,CAAC;AAAA,EACH;AAAA,EACA,SAAS;AACP,IAAK/6C,EAAA,MAAK+6C,QACV,KAAK,OAAM,GACX,IAAIp7C,GAAiBK,EAAA,MAAK+6C,GAAG,EAAE,IAAI,SAAS54C,EAAA,MAAK04C,IAAAv+B,IAAS,KAAK,IAAI,CAAC,EAAE,IAAI,WAAWna,EAAA,MAAK04C,IAAAt+B,IAAW,KAAK,IAAI,CAAC,GAC/Grf,GAAU,MAAM;AACd,MAAA6C,EAAA,MAAK+6C,IAAS,KACd/6C,EAAA,MAAKi7C,IAAY,CAAA;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EACA,SAAS;AACP,IAAAj7C,EAAA,MAAK+6C,IAAS,IACd/6C,EAAA,MAAKi7C,IAAY74C,EAAA,MAAK04C,IAAAI,IAAL;AAAA,EACnB;AAAA,EACA,OAAOvvL,IAAQy2I,EAAA,MAAK04C,IAAAK,IAAL,YAAyB;AACtC,UAAMt3L,IAAUo8I,EAAA,MAAKg7C,IAAUtvL,CAAK;AACpC,IAAI9H,KACF,sBAAsB,MAAM;AAC1B,4BAAsB,MAAM;AAC1B,QAAA62L,GAAiB72L,GAAS;AAAA,UACxB,UAAU;AAAA,UACV,UAAU,CAAC+uB,MACF,CAACA,EAAG,aAAa,WAAW;AAAA,QAEjD,CAAW;AAAA,MACH,CAAC;AAAA,IACH,CAAC;AAAA,EAEL;AAAA,EACA,YAAYi/F,IAAS,IAAM;AACzB,UAAMlmH,IAAQy2I,EAAA,MAAK04C,IAAAK,IAAL;AACd,IAAA/4C,EAAA,MAAK04C,IAAAM,IAAL,WAAczvL,KAAS,IAAIA,IAAQ,GAAGkmH;AAAA,EACxC;AAiFF;AAjIEkpE,KAAA,eACAC,KAAA,eACAC,KAAA,eACA/U,KAAA,eAJF4U,KAAA,eAkDEM,KAAQ,SAACzvL,GAAOkmH,IAAS,IAAM;;AAC7B,EAAAmuB,EAAA,MAAK+6C,IAASpvL,IACVs0I,EAAA,MAAKg7C,IAAUtvL,CAAK,KACtBs0I,EAAA,MAAKg7C,IAAUtvL,CAAK,EAAE,MAAM,EAAE,eAAe,IAAM,GAC/CkmH,KAAQ,KAAK,OAAOlmH,CAAK,MAE7BD,IAAAu0I,EAAA,MAAK+6C,QAAL,QAAAtvL,EAAU,MAAM,EAAE,eAAe,GAAI;AAEzC,GACAyvL,KAAgB,WAAG;AACjB,SAAOl7C,EAAA,MAAKg7C,IAAU;AAAA,IACpB,CAACroK,MAAO,SAAS,kBAAkBA,KAAMA,EAAG,aAAa,MAAM,MAAM,mBAAmBA,EAAG,aAAa,cAAc,MAAM;AAAA,EAClI;AACE,GACA+qJ,KAAQ,WAAG;AACT,EAAI19B,EAAA,MAAK86C,OAAU,MACnB,KAAK,OAAM,GACX,KAAK,YAAW;AAClB,GACAM,KAAiB,SAACpyJ,GAAO;AACvB,QAAMrW,IAAKqW,EAAM;AACjB,MAAIy3G,GAAmBz3G,CAAK,KAAKrW,aAAc,SAAS;AACtD,UAAMgyD,IAAOhyD,EAAG,aAAa,MAAM;AACnC,WAAO,CAAC,wBAAwB,KAAKA,EAAG,SAAS,KAAK,CAACgyD;AAAA,EACzD;AACA,SAAOg2G,GAAW,IAAI3xJ,EAAM,GAAG;AACjC,GACAszH,KAAQ,SAACtzH,GAAO;AACd,EAAKm5G,EAAA,MAAK04C,IAAAO,IAAL,WAAuBpyJ,OAC5BA,EAAM,gBAAe,GACrBA,EAAM,eAAc;AACtB,GACAuzH,KAAU,SAACvzH,GAAO;AAChB,MAAKm5G,EAAA,MAAK04C,IAAAO,IAAL,WAAuBpyJ;AAG5B,YAFAA,EAAM,gBAAe,GACrBA,EAAM,eAAc,GACZA,EAAM,KAAG;AAAA,MACf,KAAK;AACH,QAAAg3G,EAAA,MAAKimC,IAAU,UAAUj9I,CAAK;AAC9B;AAAA,MACF,KAAK;AACH,QAAAm5G,EAAA,MAAK04C,IAAAM,IAAL,WAAch5C,EAAA,MAAK04C,IAAAQ,IAAL,WAAgBryJ,EAAM,WAAW,KAAK;AACpD;AAAA,MACF,KAAK;AACH,QAAAm5G,EAAA,MAAK04C,IAAAM,IAAL,WAAch5C,EAAA,MAAK04C,IAAAQ,IAAL,WAAgB;AAC9B;AAAA,MACF,KAAK;AACH,QAAAl5C,EAAA,MAAK04C,IAAAM,IAAL,WAAch5C,EAAA,MAAK04C,IAAAQ,IAAL,WAAgB;AAC9B;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,QAAAl5C,EAAA,MAAK04C,IAAAM,IAAL,WAAc;AACd;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,QAAAh5C,EAAA,MAAK04C,IAAAM,IAAL,WAAcn7C,EAAA,MAAKg7C,IAAU,SAAS;AACtC;AAAA,IACR;AACE,GACAK,KAAU,SAAC/+I,GAAO;;AAChB,MAAI5wC,IAAQs0I,EAAA,MAAK86C;AACjB;AACE,IAAApvL,KAASA,IAAQ4wC,IAAQ0jG,EAAA,MAAKg7C,IAAU,UAAUh7C,EAAA,MAAKg7C,IAAU;AAAA,WAC1DvvL,IAAAu0I,EAAA,MAAKg7C,IAAUtvL,CAAK,MAApB,gBAAAD,EAAuB,kBAAiB;AACjD,SAAOC;AACT,GACAuvL,KAAqB,WAAG;AACtB,MAAI,CAACj7C,EAAA,MAAK+6C,IAAK,QAAO,CAAA;AACtB,QAAMO,IAAoBt7C,EAAA,MAAK+6C,IAAI,iBAAiBL,EAA2B,GAAGr8J,IAAW,CAAA,GACvFm1G,IAAK,CAAClsI,MACHA,EAAK,aAAa,MAAM,MAAM;AAEvC,aAAWqrB,KAAM2oK;AACf,IAAInuI,GAAcx6B,CAAE,KAAKA,EAAG,iBAAiB;AAAA,IAC7CgkI,GAAgB3W,EAAA,MAAK+6C,KAAKpoK,GAAI6gH,CAAE,KAC9Bn1G,EAAS,KAAK1L,CAAE;AAGpB,SAAO0L;AACT;AAGF,IAAIk9J,KAAY,OAAO,gBACnBC,KAAmB,OAAO,0BAC1BC,KAAkB,CAACC,GAAY1kK,GAAQjxB,GAAKy0B,MAAS;AAEvD,WADIlwB,IAASkxL,GAAiBxkK,GAAQjxB,CAAG,GAChC,IAAI21L,EAAW,SAAS,GAAGC,GAAW,KAAK,GAAG;AACrD,KAAIA,IAAYD,EAAW,CAAC,OAC1BpxL,IAAUqxL,EAAU3kK,GAAQjxB,GAAKuE,CAAM,KAAOA;AAClD,SAAIA,KAAQixL,GAAUvkK,GAAQjxB,GAAKuE,CAAM,GAClCA;AACT;AACA,IAAIsxL,KAAU;;AACd,MAAMt9D,WAAah7H,GAAU;AAAA,EA4B3B,cAAc;AACZ,UAAK;AA7BT,IAAAs8I,EAAA,MAAAi8C;AAIE,IAAAj8C,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAAk8C;AACA,IAAAl8C,EAAA,MAAAm8C;AACA,IAAAn8C,EAAA,MAAAo8C,IAAYt3G,GAAO,EAAK;AACxB,IAAAk7D,EAAA,MAAAq8C,IAAYv3G,GAAO,EAAK;AACxB,IAAAk7D,EAAA,MAAAinC,IAAWniG,GAAO,IAAI;AACtB,IAAAk7D,EAAA,MAAAknC,IAAWpiG,GAAO,IAAI;AACtB,IAAAk7D,EAAA,MAAAs8C;AACA,IAAAt8C,EAAA,MAAAu8C,IAA4B,oBAAI,IAAG;AACnC,IAAAv8C,EAAA,MAAAw8C,IAAgB;AAChB,IAAAx8C,EAAA,MAAAy8C;AACA,IAAAz8C,EAAA,MAAA08C;AACA,IAAA18C,EAAA,MAAA28C,IAAkB;AAClB,IAAA38C,EAAA,MAAA48C,IAAqB93G,GAAO,EAAK;AACjC,IAAAk7D,EAAA,MAAA68C,IAAuC,oBAAI,IAAG;AA4K9C,IAAA78C,EAAA,MAAA88C,IAAqB;AAsGrB,IAAA98C,EAAA,MAAA+8C,IAAqBx6C,EAAA,MAAK05C,IAAAe,IAAe,KAAK,IAAI;AAIlD,IAAAh9C,EAAA,MAAAi9C,IAAiB;AACjB,IAAAj9C,EAAA,MAAAk9C,IAAqB36C,EAAA,MAAK05C,IAAAkB,IAAe,KAAK,IAAI;AAyBlD,IAAAn9C,EAAA,MAAAo9C,IAAsB76C,EAAA,MAAK05C,IAAAoB,IAAgB,KAAK,IAAI;AAmBpD,IAAAr9C,EAAA,MAAAs9C,IAAYj2C,GAAuB,MAAM;AACvC,YAAMz5I,IAAUmvI,GAAKqD,EAAA,MAAK8mC,GAAQ;AAClC,UAAI,CAACt5K,KAAWiuI,GAAW;AAC3B,UAAIz5E,IAAS,GAAG3tB,IAAS,iBAAiB7mC,CAAO,GAAGhF,IAAW,CAAC,GAAGgF,EAAQ,QAAQ;AACnF,iBAAWy0I,KAAS,CAAC,cAAc,iBAAiB,kBAAkB,mBAAmB;AACvF,QAAAjgF,KAAU,WAAW3tB,EAAO4tG,CAAK,CAAC,KAAK;AAEzC,iBAAWz6I,KAASgB;AAClB,YAAI2kD,GAAc3lD,CAAK,KAAKA,EAAM,MAAM,YAAY;AAClD,UAAAgB,EAAS,KAAK,GAAGhB,EAAM,QAAQ;AAAA,iBACtBA,EAAM,aAAa;AAC5B,UAAAw6D,KAAU,WAAW,iBAAiBx6D,CAAK,EAAE,QAAQ;AAAA,iBAC5C2lD,GAAc3lD,CAAK,GAAG;AAC/B,cAAI,CAACgvJ,GAAiBhvJ,CAAK,EAAG;AAC9B,gBAAMwxC,IAAQ,iBAAiBxxC,CAAK;AACpC,UAAAw6D,KAAUx6D,EAAM,gBAAgB,WAAWwxC,EAAM,SAAS,KAAK,MAAM,WAAWA,EAAM,YAAY,KAAK;AAAA,QACzG;AAEF,MAAA8nG,GAAStzI,GAAS,iBAAiBw0D,IAAS,IAAI;AAAA,IAClD,CAAC;AACD,IAAA49E,EAAA,MAAAu9C,IAAsB;AA3UpB,UAAM,EAAE,WAAAnW,MAAc,KAAK;AAC3B,IAAAjnC,EAAA,MAAKs8C,IAAU,IAAIviE,GAAO;AAAA,MACxB,SAASkmB,EAAA,MAAK6mC;AAAA,MACd,SAAS7mC,EAAA,MAAK8mC;AAAA,MACd,WAAAE;AAAA,MACA,QAAQ,CAACj7H,GAAS06H,GAAMx7D,MAAS;AAC/B,QAAA4rC,GAAQ9qG,GAAS,CAAC/iB,MAAU;AAC1B,UAAIg3G,EAAA,MAAKg8C,IAAL,aAAkB/wE,EAAKjiF,CAAK,IAC3By9I,EAAKz9I,CAAK;AAAA,QACjB,CAAC;AACD,cAAMo0J,IAAcj7C,EAAA,MAAK05C,IAAAwB,IAAL;AACpB,QAAID,KACFvmC,GAAQumC,GAAa,CAACp0J,MAAU;AAC9B,UAAAA,EAAM,gBAAe,GACrBiiF,EAAKjiF,CAAK;AAAA,QACZ,CAAC;AAAA,MAEL;AAAA,MACA,UAAUm5G,EAAA,MAAK05C,IAAAyB,IAAkB,KAAK,IAAI;AAAA,IAChD,CAAK;AAAA,EACH;AAAA,EA/BA,IAAI,iBAAiB;AACnB,WAAOt9C,EAAA,MAAK6mC,IAAL;AAAA,EACT;AAAA,EACA,IAAI,iBAAiB;AACnB,WAAO7mC,EAAA,MAAK8mC,IAAL;AAAA,EACT;AAAA,EACA,IAAI,YAAY;AACd,WAAO,CAAC,CAAC9mC,EAAA,MAAKk8C;AAAA,EAChB;AAAA,EAwBA,UAAU;AACR,IAAAn8C,EAAA,MAAK6Y,IAASvF,GAAe;AAC7B,UAAMkqC,IAAiB,EAAE3B;AACzB,IAAA77C,EAAA,MAAK+7C,IAAU,cAAcyB,CAAc,KAC3Cx9C,EAAA,MAAKg8C,IAAgB,qBAAqBwB,CAAc,KACxDx9C,EAAA,MAAKu8C,IAAS,IAAI1B,GAAoB;AAAA,MACpC,WAAW,KAAK,MAAM,KAAK,IAAI;AAAA,IACrC,CAAK,IACGx5C,GAAmBi5C,EAAW,KAChCt6C,EAAA,MAAKm8C,IAAc/9K,GAAWk8K,EAAW,IAE3Cl4C,EAAA,MAAK05C,IAAA2B,IAAL,YACA,KAAK,cAAc;AAAA,MACjB,aAAax9C,EAAA,MAAKg8C;AAAA,MAClB,aAAa,CAAC,KAAK;AAAA,MACnB,gBAAgB,KAAK;AAAA,MACrB,iBAAiB75C,EAAA,MAAK05C,IAAA7H,IAAY,KAAK,IAAI;AAAA,IACjD,CAAK,GACD9yC,GAAem5C,IAAa;AAAA,MAC1B,QAAQr6C,EAAA,MAAK6mC;AAAA,MACb,SAAS7mC,EAAA,MAAK8mC;AAAA,MACd,UAAU9mC,EAAA,MAAKg8C;AAAA,MACf,MAAMt3G,GAAO,EAAE;AAAA,MACf,SAAS,CAAC,CAACs7D,EAAA,MAAKk8C;AAAA,MAChB,SAAS/5C,EAAA,MAAK05C,IAAA4B,IAAS,KAAK,IAAI;AAAA,MAChC,kBAAkBt7C,EAAA,MAAK05C,IAAA6B,IAAkB,KAAK,IAAI;AAAA,MAClD,iBAAiBv7C,EAAA,MAAK05C,IAAA8B,IAAiB,KAAK,IAAI;AAAA,MAChD,gBAAgBx7C,EAAA,MAAK05C,IAAA+B,IAAgB,KAAK,IAAI;AAAA,MAC9C,mBAAmBz7C,EAAA,MAAK05C,IAAAgC,IAAmB,KAAK,IAAI;AAAA,MACpD,YAAY17C,EAAA,MAAK05C,IAAAiC,IAAY,KAAK,IAAI;AAAA,MACtC,mBAAmB,CAACz7J,MAAa;AAC/B,QAAA29G,EAAA,MAAKy8C,IAAqB,IAAIp6J,CAAQ,GACtC66G,GAAU,MAAM;AACd,UAAA8C,EAAA,MAAKy8C,IAAqB,OAAOp6J,CAAQ;AAAA,QAC3C,CAAC;AAAA,MACH;AAAA,IACN,CAAK;AAAA,EACH;AAAA,EACA,SAAS1P,GAAI;AACX,IAAAA,EAAG,MAAM,YAAY,WAAW,UAAU;AAAA,EAC5C;AAAA,EACA,UAAUA,GAAI;;AACZ,IAAAwM,EAAOgjH,EAAA,MAAK05C,IAAAkC,IAAe,KAAK,IAAI,CAAC,GACjC,KAAK,eACPtyL,IAAAu0I,EAAA,MAAKk8C,QAAL,QAAAzwL,EAAkB,WAAW;AAAA,EAEjC;AAAA,EACA,YAAY;AACV,IAAAu0I,EAAA,MAAK6mC,IAAS,IAAI,IAAI,GACtB7mC,EAAA,MAAK8mC,IAAS,IAAI,IAAI,GACtB/mC,EAAA,MAAKq8C,IAAgB,OACrBp8C,EAAA,MAAKy8C,IAAqB,MAAK;AAAA,EACjC;AAAA,EA4QA,KAAK1wI,GAAS;AACZ,IAAI4wF,GAAKqD,EAAA,MAAKg8C,GAAS,MACvBh8C,EAAA,MAAKq8C,IAAQ,KAAKtwI,CAAO,GACzB8wF,GAAI;AAAA,EACN;AAAA,EACA,MAAM9wF,GAAS;AACb,IAAK4wF,GAAKqD,EAAA,MAAKg8C,GAAS,MACxBh8C,EAAA,MAAKq8C,IAAQ,KAAKtwI,CAAO,GACzB8wF,GAAI;AAAA,EACN;AACF;AAzXE+b,KAAA,eACAkjC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACApV,KAAA,eACAC,KAAA,eACAoV,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eACAC,KAAA,eAlBFZ,KAAA,eAwGE2B,KAAe,WAAG;AAChB,MAAIQ,IAAoB,IAAIC,IAAuB78C,GAAmBmpC,EAAqB,IAAIpsK,GAAWosK,EAAqB,IAAI;AACnI,EAAArpC,GAAeqpC,IAAuB;AAAA,IACpC,aAAa,MAAM;;AACjB,OAAA9+K,IAAAwyL,KAAA,gBAAAA,EAAsB,gBAAtB,QAAAxyL,EAAA,KAAAwyL,IACA,OAAO,aAAaD,CAAiB,GACrCA,IAAoB,IACpBj+C,EAAA,MAAKw8C,IAAkB;AAAA,IACzB;AAAA,IACA,WAAW,MAAM;;AACf,OAAA9wL,IAAAwyL,KAAA,gBAAAA,EAAsB,cAAtB,QAAAxyL,EAAA,KAAAwyL,IACAD,IAAoB,OAAO,WAAW,MAAM;AAC1C,QAAAj+C,EAAA,MAAKw8C,IAAkB,KACvByB,IAAoB;AAAA,MACtB,GAAG,GAAG;AAAA,IACR;AAAA,EACN,CAAK;AACH,GACAD,KAAc,WAAG;AACf,QAAMG,IAAW/7C,EAAA,MAAK05C,IAAAsC,IAAL;AAGjB,EAFK,KAAK,aAAWn+C,EAAA,MAAKk9C,IAAL,YACrB/6C,EAAA,MAAK05C,IAAAuC,IAAL,WAA4BF,IACvBA,MACL/+J,EAAO,MAAM;AACX,UAAM,EAAE,QAAA6iC,EAAM,IAAKg+E,EAAA,MAAK4Y,IAAO,QAAQprJ,IAAUwyI,EAAA,MAAK8mC,IAAL;AACjD,IAAAt5K,KAAWszI,GAAStzI,GAAS,mBAAmBw0D,EAAM,IAAK,IAAI;AAAA,EACjE,CAAC,GACDg+E,EAAA,MAAKs8C,IAAO,OAAM,GAClB,KAAK,OAAO,aAAan6C,EAAA,MAAK05C,IAAAwC,IAAa,KAAK,IAAI,CAAC,GACrD3+C,GAAY,QAAQ,aAAayC,EAAA,MAAK05C,IAAAyC,IAAmB,KAAK,IAAI,CAAC;AACrE,GACAZ,KAAiB,SAAC76H,GAAQ;AACxB,QAAMlwC,IAAKkwC,EAAO,IAAI07H,IAAa,KAAK,WAAWC,IAAiBtsB,GAAU/vB,EAAA,MAAK05C,IAAA7H,IAAY,KAAK,IAAI,CAAC;AACzG,EAAA59B,GAAoBzjI,GAAI,YAAY4rK,IAAa,OAAO,GAAG,GAC3DnoC,GAAoBzjI,GAAI,QAAQ4rK,IAAa,aAAa,QAAQ,GAClE39C,GAAajuH,GAAI,MAAMqtH,EAAA,MAAK+7C,GAAa,GACzCn7C,GAAajuH,GAAI,iBAAiB,MAAM,GACxCiuH,GAAajuH,GAAI,iBAAiB,OAAO,GACzCiuH,GAAajuH,GAAI,aAAa,CAAC,KAAK,SAAS,GAC7CiuH,GAAajuH,GAAI,gBAAgB,KAAK,SAAS;AAC/C,QAAM8rK,IAAa,MAAM;AACvB,IAAA79C,GAAajuH,GAAI,aAAaqtH,EAAA,MAAKg8C,IAAL,UAAgB,GAC9Cp7C,GAAajuH,GAAI,iBAAiB6rK,GAAgB;AAAA,EACpD;AACA,EAAI/iD,KAAWgjD,EAAU,IACpBt/J,EAAOs/J,CAAU,GACtBz+C,EAAA,MAAK6mC,IAAS,IAAIl0J,CAAE,GACpBuqH,GAAU,MAAM;AACd,IAAA8C,EAAA,MAAK6mC,IAAS,IAAI,IAAI;AAAA,EACxB,CAAC;AACH,GACA8W,KAAgB,SAACzsK,GAAO;;AACtB,QAAMyB,IAAKzB,EAAM;AACjB,EAAAyB,EAAG,MAAM,YAAY,WAAW,MAAM,GACtCiuH,GAAajuH,GAAI,MAAMqtH,EAAA,MAAK87C,GAAO,GACnC1lC,GAAoBzjI,GAAI,QAAQ,MAAM,GACtCyjI,GAAoBzjI,GAAI,YAAY,IAAI,GACxCiuH,GAAajuH,GAAI,aAAa,CAAC,KAAK,SAAS,GAC7CiuH,GAAajuH,GAAI,gBAAgB,KAAK,SAAS,GAC/CqtH,EAAA,MAAK8mC,IAAS,IAAIn0J,CAAE,GACpBuqH,GAAU,MAAM8C,EAAA,MAAK8mC,IAAS,IAAI,IAAI,CAAC;AACvC,QAAM2X,IAAa,MAAM79C,GAAajuH,GAAI,aAAaqtH,EAAA,MAAKg8C,IAAL,UAAgB;AACvE,EAAIvgD,KAAWgjD,EAAU,IACpBt/J,EAAOs/J,CAAU,GACtBz+C,EAAA,MAAKs8C,IAAO,WAAW3pK,CAAE,GACzBwvH,EAAA,MAAK05C,IAAAuC,IAAL,WAA4B;AAC5B,QAAMM,IAAev8C,EAAA,MAAK05C,IAAA8C,IAAoB,KAAK,IAAI;AACvD,EAAK,KAAK,aAMRlzL,IAAAu0I,EAAA,MAAKk8C,QAAL,QAAAzwL,EAAkB,kBAAkBizL,MALpCxtK,EAAM,OAAO,mBAAmBwtK,CAAY,GAC5CxtK,EAAM,OAAO,iBAAiBwtK,CAAY,GAC1CxtK,EAAM,OAAO,gBAAgB8uH,EAAA,MAAKk9C,GAAS,GAC3ChsK,EAAM,OAAO,mBAAmB8uH,EAAA,MAAKk9C,GAAS;AAIlD,GACAU,KAAe,SAACtyL,GAAU;AACxB,EAAAy0I,EAAA,MAAKq8C,IAAgB9wL;AACvB,GACA8yL,KAAsB,SAACF,GAAU;AAC/B,QAAM1wL,IAAUmvI,GAAKqD,EAAA,MAAK8mC,GAAQ;AAClC,EAAIt5K,KAASozI,GAAapzI,GAAS,eAAe+6K,GAAW,CAAC2V,CAAQ,CAAC;AACzE,GACAL,KAAkB,SAACt1I,GAAU;AAC3B,EAAAy3F,EAAA,MAAKw8C,IAAmB,IAAIj0I,CAAQ;AACtC,GACAm0I,KAAA,eACAY,KAAiB,SAACsB,GAAY51J,GAAO;;AAGnC,MAFA+2G,EAAA,MAAK28C,IAAqBl8C,GAAgBx3G,CAAK,IAC/CA,KAAA,QAAAA,EAAO,mBACHg3G,EAAA,MAAKg8C,IAAL,eAAqB4C,EAAY;AACrC,MAAIz8C,EAAA,MAAK05C,IAAA7H,IAAL,YAAoB;AACtB,IAAI4K,KAAY5+C,EAAA,MAAKq8C,IAAQ,KAAKrzJ,CAAK;AACvC;AAAA,EACF;AACA,GAAAv9B,IAAA,KAAK,OAAL,QAAAA,EAAS;AAAA,IACP,IAAI,MAAM,mBAAmB;AAAA,MAC3B,SAAS;AAAA,MACT,UAAU;AAAA,IAClB,CAAO;AAAA;AAEH,QAAMsgD,IAAUi0F,EAAA,MAAK6mC,IAAL,YAAiBr5K,IAAUwyI,EAAA,MAAK8mC,IAAL;AAS3C,MARI/6H,MACF60F,GAAa70F,GAAS,iBAAiB6yI,KAAc5+C,EAAA,MAAK87C,GAAO,GACjEl7C,GAAa70F,GAAS,iBAAiBw8H,GAAWqW,CAAU,CAAC,IAE3DpxL,KAASozI,GAAapzI,GAAS,mBAAmBoxL,KAAc5+C,EAAA,MAAK+7C,GAAa,GACtF/7C,EAAA,MAAKg8C,IAAU,IAAI4C,CAAU,GAC7Bz8C,EAAA,MAAK05C,IAAAgD,IAAL,WAA0B71J,IAC1B6zG,GAAI,GACAmD,EAAA,MAAK08C,KAAoB;AAC3B,IAAIkC,IAAYpxL,KAAA,QAAAA,EAAS,UACpBu+C,KAAA,QAAAA,EAAS;AACd,eAAWp5B,KAAM,CAAC,KAAK,IAAInlB,CAAO;AAChC,MAAAmlB,KAAMA,EAAG,aAAa,iBAAiB,EAAE;AAAA,EAE7C;AACE,eAAWA,KAAM,CAAC,KAAK,IAAInlB,CAAO;AAChC,MAAAmlB,KAAMA,EAAG,gBAAgB,eAAe;AAI5C,MADA,KAAK,SAASisK,IAAa,SAAS,SAAS,EAAE,SAAS51J,GAAO,GAC3D41J;AACF,IAAI,CAAC,KAAK,aAAa5+C,EAAA,MAAK4Y,IAAO,eAAe,UAChDhnJ,IAAAouI,EAAA,MAAK4Y,IAAO,eAAZ,QAAAhnJ,EAAwB,MAAMo3B,IAC9Bg3G,EAAA,MAAK4Y,IAAO,aAAa,QAE3Bp1I,KAAAD,IAAAy8H,EAAA,MAAKo8C,QAAL,gBAAA74K,EAAoB,WAApB,QAAAC,EAAA,KAAAD,GAA6BylB;AAAA,OACxB;AACL,QAAI,KAAK;AACP,iBAAWrW,KAAMqtH,EAAA,MAAKm8C,IAAW,CAAAxpK,EAAG,MAAMqW,CAAK;AAAA;AAE/C,MAAAg3G,EAAA,MAAK4Y,IAAO,aAAa;AAE3B,KAAA5pG,KAAAvvC,IAAAugI,EAAA,MAAKo8C,QAAL,gBAAA38K,EAAoB,YAApB,QAAAuvC,EAAA,KAAAvvC,GAA8BupB;AAAA,EAChC;AACA,EAAI41J,KACF,sBAAsBz8C,EAAA,MAAK05C,IAAAiD,IAAa,KAAK,IAAI,CAAC;AAEtD,GACAA,KAAY,WAAG;AACb,EAAI9+C,EAAA,MAAKm9C,OAAuBn9C,EAAA,MAAK68C,QACrC78C,EAAA,MAAKs8C,IAAO,OAAM,GAClB,sBAAsB,MAAM;AAC1B,IAAIt8C,EAAA,MAAK08C,MACP18C,EAAA,MAAKs8C,IAAO,YAAW,IAEvBt8C,EAAA,MAAKs8C,IAAO,OAAM;AAAA,EAEtB,CAAC;AACH,GACA6B,KAAW,WAAG;AACZ,SAAO,CAACh8C,EAAA,MAAK05C,IAAA7H,IAAL,cAAsBh0C,EAAA,MAAKg8C,IAAL;AAChC,GACAhI,KAAW,WAAG;AACZ,SAAOh0C,EAAA,MAAKi8C,IAAL,cAAoBj8C,EAAA,MAAKw8C,IAAL;AAC7B,GACAiB,KAAQ,SAACl1I,GAAU;AACjB,EAAAy3F,EAAA,MAAKi8C,IAAU,IAAI1zI,CAAQ;AAC7B,GACA81I,KAAY,SAACr1J,GAAO;AAClB,QAAMx7B,IAAUwyI,EAAA,MAAK8mC,IAAL;AAChB,EAAI9mC,EAAA,MAAKu8C,OAAmB/uL,KAAWuoJ,GAAcvoJ,GAASw7B,CAAK,KAGnEA,EAAM,gBAAe;AACvB,GACAs1J,KAAkB,SAACt1J,GAAO;AACxB,QAAMx7B,IAAUwyI,EAAA,MAAK8mC,IAAL;AAChB,EAAI9mC,EAAA,MAAKu8C,OAAmB/uL,KAAWuoJ,GAAcvoJ,GAASw7B,CAAK,KAGnE,KAAK,MAAMA,CAAK;AAClB,GACAq0J,KAAe,WAAG;;AAChB,QAAMrmK,KAASvrB,IAAA,KAAK,OAAL,gBAAAA,EAAS,cAAc;AACtC,SAAO,KAAK,MAAMurB,KAAU2/H,GAAgB,KAAK,IAAI3/H,GAAQ,CAAC1vB,MAASA,EAAK,aAAa,MAAM,MAAM,MAAM,IAAI0vB,IAAS;AAC1H,GACA6nK,KAAoB,SAAC9yI,GAAS;AAC5B,EAAI,KAAK,cACLi0F,EAAA,MAAKg8C,IAAL,aAAkBh8C,EAAA,MAAK4Y,IAAO,OAAO,cAAc7sG,CAAO,IACzDi0F,EAAA,MAAK4Y,IAAO,OAAO,eAAe7sG,CAAO;AAChD,GACA+xI,KAAW,SAACiB,GAAM;AAChB,EAAA/+C,EAAA,MAAKm8C,IAAU,IAAI4C,CAAI,GACvB,IAAIp/C,GAAiBo/C,CAAI,EAAE,IAAI,QAAQ/+C,EAAA,MAAK88C,GAAkB,EAAE,IAAI,SAAS98C,EAAA,MAAKg9C,GAAmB,GACrG9/C,GAAU8C,EAAA,MAAK28C,GAAkB;AACnC,GACAA,KAAA,eACAC,KAAc,SAACmC,GAAM;AACnB,EAAA/+C,EAAA,MAAKm8C,IAAU,OAAO4C,CAAI;AAC5B,GACAlC,KAAA,eACAC,KAAA,eACAC,KAAc,SAAC/zJ,GAAO;;AACpB,EAAA+2G,EAAA,MAAK88C,IAAiB;AACtB,QAAMrvL,IAAUwyI,EAAA,MAAK8mC,IAAL;AAChB,EAAI,KAAK,eACPr7K,IAAA,KAAK,mBAAL,QAAAA,EAAqB,aAAa,eAAe;AAEnD,aAAWurB,KAAUgpH,EAAA,MAAKm8C;AACxB,QAAInlK,MAAWgS,EAAM;AACnB,iBAAWrW,KAAM,CAACqE,EAAO,IAAIA,EAAO,cAAc;AAChD,QAAArE,KAAA,QAAAA,EAAI,aAAa,eAAe;AAItC,MAAInlB,GAAS;AACX,UAAMmlB,IAAKqW,EAAM,OAAO;AACxB,eAAWxhC,KAASgG,EAAQ;AAC1B,MAAIhG,EAAM,SAASmrB,CAAE,IACnBnrB,EAAM,aAAa,aAAa,EAAE,IACzBA,MAAUmrB,KACnBnrB,EAAM,aAAa,eAAe,EAAE;AAAA,EAG1C;AACF,GACAw1L,KAAA,eACAC,KAAe,SAACj0J,GAAO;;AACrB,EAAA+2G,EAAA,MAAK88C,IAAiB;AACtB,QAAMrvL,IAAUwyI,EAAA,MAAK8mC,IAAL;AAChB,EAAI,KAAK,eACPr7K,IAAA,KAAK,mBAAL,QAAAA,EAAqB,aAAa,eAAe;AAEnD,aAAWurB,KAAUgpH,EAAA,MAAKm8C;AACxB,eAAWxpK,KAAM,CAACqE,EAAO,IAAIA,EAAO,cAAc;AAChD,MAAArE,KAAA,QAAAA,EAAI,aAAa,eAAe;AAGpC,MAAInlB;AACF,eAAWhG,KAASgG,EAAQ;AAC1B,MAAAhG,EAAM,gBAAgB,WAAW,GACjCA,EAAM,gBAAgB,aAAa;AAGzC,GACA01L,KAAA,eAoBAC,KAAA,eACAwB,KAAmB,SAAC31J,GAAO;AACzB,QAAMx7B,IAAUwyI,EAAA,MAAK8mC,IAAL;AAChB,EAAIt5K,KAAWw7B,EAAM,iBAAiB,aACpC+2G,EAAA,MAAKo9C,IAAsBn0J,EAAM,SAAS,oBAC1C43G,GAAapzI,GAAS,mBAAmBwyI,EAAA,MAAKm9C,MAAsB,WAAW,IAAI,GAC/En9C,EAAA,MAAKg8C,IAAL,cAAkB75C,EAAA,MAAK05C,IAAAiD,IAAL;AAExB,aAAWz8J,KAAY29G,EAAA,MAAKy8C,IAAsB,CAAAp6J,EAAS2G,CAAK;AAClE,GAjXArmB,EADI27G,IACG,SAAQ;AAAA,EACb,WAAW;AACf;AA2XAm9D,GAAgB;AAAA,EACdj1K;AACF,GAAG83G,GAAK,WAAW,gBAAgB;AACnCm9D,GAAgB;AAAA,EACdj1K;AACF,GAAG83G,GAAK,WAAW,gBAAgB;AACnCm9D,GAAgB;AAAA,EACdj1K;AACF,GAAG83G,GAAK,WAAW,WAAW;AAC9Bm9D,GAAgB;AAAA,EACdzmI;AACF,GAAGspE,GAAK,WAAW,MAAM;AACzBm9D,GAAgB;AAAA,EACdzmI;AACF,GAAGspE,GAAK,WAAW,OAAO;;AAE1B,MAAM0gE,WAAmB17L,GAAU;AAAA,EASjC,cAAc;AACZ,UAAK;AAVT,IAAAs8I,EAAA,MAAAq/C;AAIE,IAAAr/C,EAAA,MAAAs/C;AACA,IAAAt/C,EAAA,MAAAu/C,IAAUz6G,GAAO,IAAI;AAMnB,QAAI04F,GAAsB;AAAA,EAC5B;AAAA,EANA,IAAI,WAAW;;AACb,aAAO3xK,IAAAu0I,EAAA,MAAKk/C,QAAL,gBAAAzzL,EAAY,eAAc;AAAA,EACnC;AAAA,EAKA,UAAU;AACR,IAAAs0I,EAAA,MAAKm/C,IAAQ/gL,GAAWk8K,EAAW;AAAA,EACrC;AAAA,EACA,SAAS1nK,GAAI;AACX,IAAAqtH,EAAA,MAAKk/C,IAAM,iBAAiB,IAAI,GAChC//J,EAAOgjH,EAAA,MAAK88C,IAAAhR,IAAe,KAAK,IAAI,CAAC,GACrC73B,GAAoBzjI,GAAI,QAAQ,QAAQ;AAAA,EAC1C;AAAA,EACA,UAAUA,GAAI;AACZ,IAAAwM,EAAOgjH,EAAA,MAAK88C,IAAAG,IAAa,KAAK,IAAI,CAAC,GACnCj9C,EAAA,MAAK88C,IAAAjb,IAAL;AACA,UAAM7yI,IAAY,IAAI,iBAAiBgxG,EAAA,MAAK88C,IAAAjb,IAAY,KAAK,IAAI,CAAC;AAClE,IAAA7yI,EAAU,QAAQxe,GAAI,EAAE,iBAAiB,CAAC,WAAW,GAAG,WAAW,IAAM,SAAS,GAAI,CAAE,GACxFuqH,GAAU,MAAM/rG,EAAU,YAAY,GACtC0lH,GAAQlkI,GAAI,CAACo5B,MAAY;AACvB,WAAK,SAAS,UAAU,EAAE,SAAAA,EAAO,CAAE;AAAA,IACrC,CAAC;AAAA,EACH;AAgBF;AA1CEmzI,KAAA,eACAC,KAAA,eALFF,KAAA,eA+BEhR,KAAc,WAAG;AACf,EAAAjuC,EAAA,MAAKk/C,IAAM,kBAAkB,KAAK,OAAO,SAAQ,CAAE;AACrD,GACAE,KAAY,WAAG;AACb,QAAMzsK,IAAKqtH,EAAA,MAAKm/C,IAAL;AACX,EAAKxsK,KACLwM,EAAO,MAAM;AACX,UAAMlY,IAAO+4H,EAAA,MAAKk/C,IAAM,KAAI;AAC5B,IAAIj4K,MAAM0L,EAAG,cAAc1L;AAAA,EAC7B,CAAC;AACH,GACA+8J,KAAW,WAAG;;AACZ,QAAMqb,KAAS5zL,IAAA,KAAK,OAAL,gBAAAA,EAAS,cAAc;AACtC,EAAAu0I,EAAA,MAAKm/C,IAAQ,IAAIE,KAAU,IAAI;AACjC,GA5CA18K,EADIq8K,IACG,SAAQ;AAAA,EACb,UAAU;AACd;AA4CA,MAAMM,KAAoBN,GAAW;AACrCx4K,GAAK84K,IAAmB,UAAU;AAElC,MAAM79D,WAAiBu9D,GAAW;AAClC;AA4DA,MAAMO,KAAoBthL,GAAa;;AAEvC,MAAMuhL,WAAkBl8L,GAAU;AAAA,EAOhC,cAAc;AACZ,UAAK;AART,IAAAs8I,EAAA,MAAA6/C;AAME,IAAA7/C,EAAA,MAAAs/C;AAGE,QAAI9hB,GAAsB;AAC1B,UAAM,EAAE,WAAA14D,MAAc,KAAK;AAC3B,SAAK,cAAc;AAAA,MACjB,kBAAkBA;AAAA,IACxB,CAAK;AAAA,EACH;AAAA,EACA,SAAS/xF,GAAI;AAGX,QAFAotH,EAAA,MAAKm/C,IAAQ/gL,GAAWk8K,EAAW,IACnCr6C,EAAA,MAAKk/C,IAAM,gBAAgB,IAAI,GAC3B99C,GAAmBm+C,EAAiB,GAAG;AACzC,YAAMG,IAASvhL,GAAWohL,EAAiB;AAC3C,MAAIG,MACFx+C,GAAeq+C,IAAmB,IAAI,GACtCG,EAAO,OAAO/sK,CAAE,GAChBuqH,GAAU,MAAMwiD,EAAO,OAAO,IAAI,CAAC;AAAA,IAEvC;AAAA,EACF;AAAA,EACA,UAAU/sK,GAAI;AACZ,IAAAwM,EAAOgjH,EAAA,MAAKs9C,IAAA3X,IAAgB,KAAK,IAAI,CAAC;AAAA,EACxC;AA8BF;AArDEoX,KAAA,eANFO,KAAA,eA8BE3X,KAAe,WAAG;AAChB,QAAM,EAAE,UAAAoW,MAAal+C,EAAA,MAAKk/C;AAC1B,MAAI,CAAC,KAAK,MAAM,CAAChB,EAAQ,EAAI;AAC7B,QAAMx5E,IAAY,KAAK,OAAO,UAAS;AACvC,MAAI,CAACA,EAAW;AAChB,SAAO,OAAO,KAAK,GAAG,OAAO;AAAA,IAC3B,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,EACb,CAAK;AACD,QAAM,EAAE,QAAQsjE,GAAY,aAAAntD,EAAW,IAAK,KAAK;AACjD,EAAAqiB;AAAA,IACE8Z,GAAc,KAAK,IAAI7U,EAAA,MAAKs9C,IAAA9X,IAAL,YAAmBjjE,GAAW;AAAA,MACnD,eAAe;AAAA,MACf,SAASmW,EAAW;AAAA,MACpB,SAASmtD,EAAU;AAAA,IAC3B,CAAO;AAAA,EACP,GACI9qC,GAAUiF,EAAA,MAAKs9C,IAAAE,IAAM,KAAK,IAAI,CAAC;AACjC,GACAA,KAAK,WAAG;AACN,EAAK,KAAK,OACV,KAAK,GAAG,gBAAgB,OAAO,GAC/B,KAAK,GAAG,MAAM,UAAU;AAC1B,GACAhY,KAAU,WAAG;AACX,SAAO3nC,EAAA,MAAKk/C,IAAM,OAAM;AAC1B,GAzDAv8K,EADI68K,IACG,SAAQ;AAAA,EACb,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,aAAa;AACjB;AAwDA,MAAMI,KAAyB3hL,GAAa;;AAE5C,MAAM4hL,WAA6Bj9C,GAAe;AAAA,EAAlD;AAAA;AAAA,IAAAhD,EAAA,MAAAkgD;AACE,IAAAlgD,EAAA,MAAAmgD,IAAyB,oBAAI,IAAG;AAChC,IAAAngD,EAAA,MAAAogD,IAASt7G,GAAO,EAAE;AAClB,IAAAk7D,EAAA,MAAAE,IAAc;AACd,IAAAn9H,EAAA;AAkCA,IAAAi9H,EAAA,MAAAqgD,IAAgB99C,EAAA,MAAK29C,IAAA9nC,IAAU,KAAK,IAAI;AAAA;AAAA,EAjCxC,IAAI,SAAS;AACX,WAAO,MAAM,KAAKhY,EAAA,MAAK+/C,GAAM,EAAE,IAAI,CAACG,MAAUA,EAAM,OAAO;AAAA,EAC7D;AAAA,EACA,IAAI,QAAQ;AACV,WAAOlgD,EAAA,MAAKggD,IAAL;AAAA,EACT;AAAA,EACA,IAAI,MAAMr7L,GAAO;AACf,IAAAw9I,EAAA,MAAK29C,IAAA9nC,IAAL,WAAerzJ;AAAA,EACjB;AAAA,EACA,UAAU;AACR,IAAAu8I,GAAe0+C,IAAwB;AAAA,MACrC,KAAKz9C,EAAA,MAAK29C,IAAAK,IAAU,KAAK,IAAI;AAAA,MAC7B,QAAQh+C,EAAA,MAAK29C,IAAAM,IAAa,KAAK,IAAI;AAAA,IACzC,CAAK;AAAA,EACH;AAAA,EACA,SAASztK,GAAI;AAEX,IADmByuH,GAAmBi5C,EAAW,KAChCjkC,GAAoBzjI,GAAI,QAAQ,YAAY,GAC7D,KAAK,cAAc,EAAE,OAAOqtH,EAAA,MAAKggD,IAAM,CAAE;AAAA,EAC3C;AAAA,EACA,YAAY;AACV,IAAAhgD,EAAA,MAAK+/C,IAAO,MAAK;AAAA,EACnB;AA2BF;AArDEA,KAAA,eACAC,KAAA,eACAlgD,KAAA,eAHFggD,KAAA,eA4BEK,KAAS,SAACD,GAAO;AACf,EAAIlgD,EAAA,MAAK+/C,IAAO,IAAIG,CAAK,MACzBlgD,EAAA,MAAK+/C,IAAO,IAAIG,CAAK,GACrBA,EAAM,UAAUlgD,EAAA,MAAKigD,KACrBC,EAAM,MAAMA,EAAM,MAAK,MAAOlgD,EAAA,MAAKggD,IAAL,UAAa;AAC7C,GACAI,KAAY,SAACF,GAAO;AAClB,EAAAA,EAAM,UAAU,MAChBlgD,EAAA,MAAK+/C,IAAO,OAAOG,CAAK;AAC1B,GACAD,KAAA,eACAjoC,KAAS,SAAChiH,GAAU+V,GAAS;;AAC3B,QAAMyc,IAAem0E,GAAKqD,EAAA,MAAKggD,GAAM;AACrC,MAAI,CAAChqJ,KAAYA,MAAawyB,EAAc;AAC5C,QAAM63H,IAAel+C,EAAA,MAAK29C,IAAAQ,IAAL,WAAgB93H,IAAe+3H,IAAWp+C,EAAA,MAAK29C,IAAAQ,IAAL,WAAgBtqJ;AAC/E,EAAAqqJ,KAAA,QAAAA,EAAc,MAAM,IAAOt0I,IAC3Bw0I,KAAA,QAAAA,EAAU,MAAM,IAAMx0I,IACtBi0F,EAAA,MAAKggD,IAAO,IAAIhqJ,CAAQ,IACxBvqC,IAAA,KAAK,kBAAL,QAAAA,EAAA,WAAqBuqC,GAAU+V;AACjC,GACAu0I,KAAU,SAACtqJ,GAAU;AACnB,aAAWkqJ,KAASlgD,EAAA,MAAK+/C;AACvB,QAAI/pJ,MAAa2mG,GAAKujD,EAAM,KAAK,EAAG,QAAOA;AAE7C,SAAO;AACT;;AAGF,MAAMj+E,WAAmB3+G,GAAU;AAAA,EAoBjC,cAAc;AACZ,UAAK;AArBT,IAAAs8I,EAAA,MAAA4gD;AAIE,IAAA5gD,EAAA,MAAAE;AAkBE,IAAAC,EAAA,MAAKD,IAAc,IAAI+/C,GAAoB,IAC3C7/C,EAAA,MAAKF,IAAY,gBAAgBqC,EAAA,MAAKq+C,IAAArM,IAAe,KAAK,IAAI;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAhBA,IAAI,SAAS;AACX,WAAOn0C,EAAA,MAAKF,IAAY;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,QAAQ;AACV,WAAOE,EAAA,MAAKF,IAAY;AAAA,EAC1B;AAAA,EACA,IAAI,MAAM9pG,GAAU;AAClB,IAAAgqG,EAAA,MAAKF,IAAY,QAAQ9pG;AAAA,EAC3B;AAAA,EAMA,UAAU;AACR,IAAIylG,KAAW0G,EAAA,MAAKq+C,IAAAzS,IAAL,aACV5uJ,EAAOgjH,EAAA,MAAKq+C,IAAAzS,IAAY,KAAK,IAAI,CAAC;AAAA,EACzC;AAQF;AAhCEjuC,KAAA,eAJF0gD,KAAA,eA6BEzS,KAAW,WAAG;AACZ,EAAA/tC,EAAA,MAAKF,IAAY,QAAQ,KAAK,OAAO,MAAK;AAC5C,GACAq0C,KAAc,SAACxvL,GAAOonD,GAAS;AAC7B,QAAM/iB,IAAQ,KAAK,YAAY,UAAU,EAAE,QAAQrkC,GAAO,SAAAonD,GAAS;AACnE,OAAK,SAAS/iB,CAAK;AACrB,GAlCArmB,EADIs/F,IACG,SAAQ;AAAA,EACb,OAAO;AACX;AAkCA,MAAMw+E,KAAoBx+E,GAAW;AACrCz7F,GAAKi6K,IAAmB,QAAQ;AAChCj6K,GAAKi6K,IAAmB,OAAO;;AAE/B,MAAMr/E,WAAc99G,GAAU;AAAA,EAgB5B,cAAc;AACZ,UAAK;AAjBT,IAAAs8I,EAAA,MAAA8gD;AAIE,IAAA9gD,EAAA,MAAA+gD,IAAWj8G,GAAO,EAAK;AACvB,IAAAk7D,EAAA,MAAAE,IAAc;AAAA,MACZ,OAAO,KAAK,OAAO;AAAA,MACnB,OAAOqC,EAAA,MAAKu+C,IAAAE,IAAO,KAAK,IAAI;AAAA,MAC5B,SAAS;AAAA,IACb;AASI,QAAIxjB,GAAsB;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EANA,IAAI,UAAU;AACZ,WAAOp9B,EAAA,MAAK2gD,IAAL;AAAA,EACT;AAAA,EAKA,UAAU;AACR,SAAK,cAAc;AAAA,MACjB,OAAO,KAAK,OAAO;AAAA,MACnB,gBAAgB3gD,EAAA,MAAK2gD;AAAA,MACrB,gBAAgBzuB,GAAUlyB,EAAA,MAAK2gD,GAAQ;AAAA,IAC7C,CAAK;AAAA,EACH;AAAA,EACA,SAAShuK,GAAI;AACX,UAAM4rK,IAAan9C,GAAmBi5C,EAAW;AACjD,IAAAjkC,GAAoBzjI,GAAI,YAAY4rK,IAAa,OAAO,GAAG,GAC3DnoC,GAAoBzjI,GAAI,QAAQ4rK,IAAa,kBAAkB,OAAO,GACtEp/J,EAAOgjH,EAAA,MAAKu+C,IAAA3S,IAAY,KAAK,IAAI,CAAC;AAAA,EACpC;AAAA,EACA,UAAUp7J,GAAI;AACZ,IAAAwvH,EAAA,MAAKu+C,IAAAG,IAAL,YACAhqC,GAAQlkI,GAAIwvH,EAAA,MAAKu+C,IAAA5X,IAAS,KAAK,IAAI,CAAC,GACpC5rC,GAAUiF,EAAA,MAAKu+C,IAAA9/B,IAAc,KAAK,IAAI,CAAC;AAAA,EACzC;AAkCF;AAnEE+/B,KAAA,eACA7gD,KAAA,eALF4gD,KAAA,eAsCE9/B,KAAa,WAAG;AACd,EAAA7jB,GAAO,MAAM;AAEX,IADc5+H,GAAWyhL,EAAsB,EACzC,OAAO5/C,EAAA,MAAKF,GAAW;AAAA,EAC/B,GAAG,KAAK,YAAY;AACtB,GACA+gD,KAAW,WAAG;AAEZ,EADc1iL,GAAWyhL,EAAsB,EACzC,IAAI5/C,EAAA,MAAKF,GAAW;AAC5B,GACAiuC,KAAW,WAAG;;AACZ,QAAM,EAAE,OAAAppL,EAAK,IAAK,KAAK,QAAQqxC,IAAWrxC,EAAK;AAC/C,EAAIg4I,GAAKqD,EAAA,MAAK2gD,GAAQ,OACpB/uL,KAAAnG,IAAAu0I,EAAA,MAAKF,KAAY,YAAjB,QAAAluI,EAAA,KAAAnG,GAA2BuqC;AAE/B,GACA8yI,KAAQ,SAAC9/I,GAAO;;AACd,EAAI2zG,GAAKqD,EAAA,MAAK2gD,GAAQ,MACtBx+C,EAAA,MAAKu+C,IAAA1oC,IAAL,WAAe,IAAMhvH,IACrBm5G,EAAA,MAAKu+C,IAAAI,IAAL,WAAe93J,KACfp3B,KAAAnG,IAAAu0I,EAAA,MAAKF,KAAY,YAAjB,QAAAluI,EAAA,KAAAnG,GAA2BkxI,GAAK,KAAK,OAAO,KAAK,GAAG3zG;AACtD,GACA43J,KAAM,SAACj8L,GAAOonD,GAAS;AACrB,EAAI4wF,GAAKqD,EAAA,MAAK2gD,GAAQ,MAAMh8L,KAC5Bw9I,EAAA,MAAKu+C,IAAA1oC,IAAL,WAAerzJ,GAAOonD;AACxB,GACAisG,KAAS,SAACrzJ,GAAOonD,GAAS;AACxB,EAAAi0F,EAAA,MAAK2gD,IAAS,IAAIh8L,CAAK,GACvB,KAAK,SAAS,UAAU,EAAE,QAAQA,GAAO,SAAAonD,GAAS;AACpD,GACA+0I,KAAS,SAAC/0I,GAAS;AACjB,OAAK,SAAS,UAAU,EAAE,SAAAA,EAAO,CAAE;AACrC,GArEAppC,EADIy+F,IACG,SAAQ;AAAA,EACb,OAAO;AACX;AAqEA,MAAM2/E,KAAe3/E,GAAM;AAC3B56F,GAAKu6K,IAAc,SAAS;;UAE5Bt1L,KAAA,cAAsBnI,GAAU;AAAA,EAAhC;AAAA;AAAA,IAAAs8I,EAAA,MAAAohD;AAME,IAAAphD,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAAokB,IAAY;AAsCZ,IAAApkB,EAAA,MAAAqhD,IAAW;AACX,IAAArhD,EAAA,MAAAshD,IAAgB;AAAA;AAAA,EAtChB,UAAU;AACR,IAAAnhD,EAAA,MAAK6Y,IAASvF,GAAe;AAC7B,UAAM,EAAE,OAAArqH,GAAO,QAAAonB,EAAM,IAAK,KAAK;AAC/B,SAAK,cAAc;AAAA,MACjB,OAAApnB;AAAA,MACA,QAAAonB;AAAA,IACN,CAAK;AAAA,EACH;AAAA,EACA,SAASz9B,GAAI;AACX,IAAAA,EAAG,aAAa,sBAAsB,EAAE,GACxCA,EAAG,MAAM,YAAY,kBAAkB,MAAM;AAAA,EAC/C;AAAA,EACA,UAAUA,GAAI;;AACZ,IAAAotH,EAAA,MAAKikB,KAAYv4J,IAAAu0I,EAAA,MAAK4Y,IAAO,OAAO,OAAnB,gBAAAntJ,EAAuB;AAAA,MACtC;AAAA,QAEF0zB,EAAOgjH,EAAA,MAAK6+C,IAAAG,IAAgB,KAAK,IAAI,CAAC;AAAA,EACxC;AAuGF,GA1HEvoC,KAAA,eACAoL,KAAA,eAPFg9B,KAAA,eA0BEG,KAAe,WAAG;AAChB,MAAI/gC,IAAY,KAAK,OAAO,MAAK,GAAI73G,IAAW,KAAK,OAAO,SAAQ;AACpE,EAAI,CAACy3F,EAAA,MAAKgkB,OAAa,CAAC5D,KAAa73G,MACjC,OAAO,KAAK63G,CAAS,MACvBA,IAAYA,EAAU,MAAM,MAAM,EAAE,CAAC,KAEnCA,MAAc,eAAeA,MAAc,kBAC7BpgB,EAAA,MAAK4Y,IAAO,OAAO,QAAO,MAC1B,aACdwH,IAAYA,MAAc,cAAc,aAAa,eAGzD1gB;AAAA,IACEM,EAAA,MAAKgkB;AAAA,IACL5D;AAAA,IACAje,EAAA,MAAK6+C,IAAAI,IAAa,KAAK,IAAI;AAAA,IAC3B,EAAE,SAAS,GAAK;AAAA,EACtB;AACE,GACAH,KAAA,eACAC,KAAA,eACAE,KAAY,SAACp4J,GAAO;AAClB,MAAI,KAAK,OAAO,SAAQ,KAAMq3G,GAAer3G,CAAK,MAAMA,EAAM,WAAW,KAAKg3G,EAAA,MAAK4Y,IAAO,eAAetY,GAAat3G,CAAK,KAAKg3G,EAAA,MAAK4Y,IAAO,cAAc9B,GAAkB9tH,CAAK,KAAK,CAACm5G,EAAA,MAAK6+C,IAAAK,IAAL,WAAer4J;AACpM;AAEF,EAAAA,EAAM,gBAAgB,IACtBA,EAAM,eAAc;AACpB,QAAMo3H,IAAYzjB,GAAK,KAAK,OAAO,KAAK;AACxC,MAAI,EADoDyjB,KAAA,gBAAAA,EAAW,WAAW;AAE5E,IAAIpgB,EAAA,MAAKihD,QAAa,KACpB,WAAW,MAAM;AACf,MAAIjhD,EAAA,MAAKihD,QAAa,KAAG9+C,EAAA,MAAK6+C,IAAAM,IAAL,WAAkBt4J;AAAA,IAC7C,GAAG,GAAG;AAAA,WAECg3G,EAAA,MAAKihD,QAAa,GAAG;AAC9B,mBAAe,MAAM9+C,EAAA,MAAK6+C,IAAAM,IAAL,WAAkBt4J,EAAM,GAC7C,aAAag3G,EAAA,MAAKkhD,GAAa,GAC/BnhD,EAAA,MAAKkhD,IAAW;AAChB;AAAA,EACF;AACA,EAAIjhD,EAAA,MAAKihD,QAAa,KACpBlhD,EAAA,MAAKmhD,IAAgB,OAAO,WAAW,MAAM;AAC3C,IAAAnhD,EAAA,MAAKkhD,IAAW;AAAA,EAClB,GAAG,GAAG,IAERM,GAAA,MAAKN,IAAL;AACF,GACAK,KAAY,SAACt4J,GAAO;AAClB,OAAK,GAAG,aAAa,kBAAkB,EAAE,GACzC,sBAAsB,MAAM;AAC1B,IAAIm5G,EAAA,MAAK6+C,IAAAQ,IAAL,cACFr/C,EAAA,MAAK6+C,IAAAS,IAAL,WAAoB9kD,GAAK,KAAK,OAAO,MAAM,GAAG3zG,IAEhD,sBAAsB,MAAM;AAC1B,WAAK,GAAG,gBAAgB,gBAAgB;AAAA,IAC1C,CAAC;AAAA,EACH,CAAC;AACH;AAEAq4J,KAAS,SAACr4J,GAAO;AACf,MAAI,CAAC,KAAK,GAAI,QAAO;AACrB,MAAIq3G,GAAer3G,CAAK,KAAKu3G,GAAav3G,CAAK,KAAKs3G,GAAat3G,CAAK,GAAG;AACvE,UAAM+U,IAAQuiG,GAAat3G,CAAK,IAAIA,EAAM,eAAe,CAAC,KAAKA,EAAM,QAAQ,CAAC,IAAI,QAC5EupE,KAAUx0D,KAAA,gBAAAA,EAAO,YAAW/U,EAAM,SAClCwpE,KAAUz0D,KAAA,gBAAAA,EAAO,YAAW/U,EAAM,SAClCu9E,IAAO,KAAK,GAAG,sBAAqB,GACpCm7E,IAAWlvF,KAAW+T,EAAK,OAAO/T,KAAW+T,EAAK,UAAUhU,KAAWgU,EAAK,QAAQhU,KAAWgU,EAAK;AAC1G,WAAOv9E,EAAM,KAAK,SAAS,OAAO,IAAI,CAAC04J,IAAWA;AAAA,EACpD;AACA,SAAO;AACT;AAEAF,KAAW,WAAG;AACZ,QAAMG,IAAW3hD,EAAA,MAAK4Y,IAAO,OAAO,GAAG;AAAA,IACrC;AAAA,EACN;AACI,SAAO,MAAM,KAAK+oC,CAAQ,EAAE;AAAA,IAC1B,CAACzkM,GAAGE,MAAM,CAAC,iBAAiBA,CAAC,EAAE,SAAS,CAAC,iBAAiBF,CAAC,EAAE;AAAA,EACnE,EAAM,CAAC,MAAM,KAAK;AAChB,GACAukM,KAAc,SAACrxI,GAAQrE,GAAS;AAC9B,MAAI,CAACqE,EAAQ;AACb,QAAMwxI,IAAmB,IAAIviD,GAAS,gBAAgB;AAAA,IACpD,QAAQjvF;AAAA,IACR,YAAY;AAAA,IACZ,SAAArE;AAAA,EACN,CAAK;AAED,MADA,KAAK,cAAc61I,CAAgB,GAC/BA,EAAiB,iBAAkB;AACvC,QAAM,CAAC5sI,GAAQrwD,CAAK,IAAIyrD,EAAO,QAAQ,YAAY,KAAK,EAAE,MAAM,GAAG;AACnE,EAAIA,EAAO,SAAS,aAAa,IAC/B4vF,EAAA,MAAK4Y,IAAO,OAAO,iBAAiB,gBAAgB7sG,CAAO,IAClDqE,EAAO,SAAS,OAAO,IAChC4vF,EAAA,MAAK4Y,IAAO,OAAO,KAAKjc,GAAKqD,EAAA,MAAK4Y,IAAO,OAAO,WAAW,KAAK,CAACj0J,KAAS,IAAIonD,CAAO,IAErFi0F,EAAA,MAAK4Y,IAAO,OAAOtV,GAAiBtuF,CAAM,CAAC,EAAEjJ,CAAO,GAEtD,KAAK,SAAS,WAAW;AAAA,IACvB,QAAQqE;AAAA,IACR,SAAArE;AAAA,EACN,CAAK;AACH,GA9HAppC,EADFlX,IACS,SAAQ;AAAA,EACb,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AACZ,IALAA;;AAkIA,MAAMo2L,GAAqB;AAAA,EAKzB,YAAYvoC,GAAU;AALxB,IAAA1Z,EAAA,MAAAkiD;AACE,IAAAn/K,EAAA,kBAAW;AACX,IAAAi9H,EAAA,MAAAkY,IAAS;AACT,IAAAlY,EAAA,MAAAmiD;AACA,IAAAniD,EAAA,MAAA2kB;AAEE,IAAAxkB,EAAA,MAAKgiD,IAAYzoC;AAAA,EACnB;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA,YAAY;AACV,WAAO;AAAA,EACT;AAAA,EACA,SAAS;;AACP,KAAA7tJ,IAAAu0I,EAAA,MAAKukB,QAAL,QAAA94J,EAAc,SACds0I,EAAA,MAAKwkB,IAAU,SACfvkB,EAAA,MAAK+hD,IAAU,MAAK,GACpBhiD,EAAA,MAAK+X,IAAS;AAAA,EAChB;AAAA,EACA,YAAYjtD,GAAO;;AACjB,IAAI,CAACA,KAASm1C,EAAA,MAAK8X,QAAWjtD,OAC9Bp/F,IAAAu0I,EAAA,MAAKukB,QAAL,QAAA94J,EAAc,SACds0I,EAAA,MAAKwkB,IAAU,IAAI5kB,GAAiB90C,CAAK,IACrCA,EAAM,aAAa,KACrBm1C,EAAA,MAAK+hD,IAAU,MAAK,GACpB/hD,EAAA,MAAKukB,IAAQ,IAAI,QAAQ,MAAMpiB,EAAA,MAAK2/C,IAAAE,IAAL,WAAkBn3F,IAAQ,EAAE,MAAM,GAAI,CAAE,KAEvEs3C,EAAA,MAAK2/C,IAAAE,IAAL,WAAkBn3F,IAEpBm1C,EAAA,MAAKukB,IAAQ,IAAI,WAAW,CAACv7H,MAAU;AACrC,MAAAg3G,EAAA,MAAK+hD,IAAU,OAAO/4J,EAAM,MAAM;AAAA,IACpC,CAAC,EAAE,IAAI,cAAc,CAACA,MAAU;AAC9B,MAAAg3G,EAAA,MAAK+hD,IAAU,UAAU/4J,EAAM,MAAM;AAAA,IACvC,CAAC,GACD+2G,EAAA,MAAK+X,IAASjtD;AAAA,EAChB;AAOF;AAxCEitD,KAAA,eACAiqC,KAAA,eACAx9B,KAAA,eAJFu9B,KAAA,eAoCEE,KAAY,SAACn3F,GAAO;AAClB,EAAAm1C,EAAA,MAAK+hD,IAAU,YAAY;AAAA,IACzB,MAAM,CAAC,GAAGl3F,EAAM,IAAI;AAAA,IACpB,SAAS,CAAC,GAAGA,EAAM,OAAO;AAAA,EAChC,CAAK;AACH;;UAGFp/F,KAAA,cAAuBnI,GAAU;AAAA,EAAjC;AAAA;AAAA,IAAAs8I,EAAA,MAAAqiD;AAKE,IAAAriD,EAAA,MAAAgZ;AAiHA,IAAAhZ,EAAA,MAAAsiD,IAAoB;AAAA;AAAA,EA/GpB,UAAU;AACR,IAAAniD,EAAA,MAAK6Y,IAASvF,GAAe,IAC7B,KAAK,cAAc;AAAA,MACjB,eAAe6e,GAAU/vB,EAAA,MAAK8/C,IAAA3Y,IAAU,KAAK,IAAI,CAAC;AAAA,IACxD,CAAK;AAAA,EACH;AAAA,EACA,SAAS32J,GAAI;AACX,IAAAA,EAAG,MAAM,YAAY,kBAAkB,MAAM;AAAA,EAC/C;AAAA,EACA,UAAUA,GAAI;AACZ,IAAKlnB,GAAS,SACZ,OAAO,oBAAgB,EAAA,KAAA,CAAA3O,MAAAA,EAAA,CAAA,EAAE,KAAK,CAACiwK,MAAQthK,GAAS,IAAI,IAAIshK,CAAG,CAAC,GAE9D5tI,EAAOgjH,EAAA,MAAK8/C,IAAAE,IAAe,KAAK,IAAI,CAAC;AAAA,EACvC;AAqHF,GArIEvpC,KAAA,eALFqpC,KAAA,eAsBE3Y,KAAS,WAAG;AACV,QAAM,EAAE,WAAA/O,GAAW,qBAAAxC,GAAqB,aAAAqqB,EAAW,IAAKpiD,EAAA,MAAK4Y,IAAO,QAAQ/tD,IAAQ0vE,EAAS;AAC7F,SAAO6nB,EAAW,KAAMrqB,QAA0B,eAAe,CAACltE,KAAS,CAACynD,GAAmBznD,CAAK;AACtG,GACAs3F,KAAc,WAAG;AACf,MAAI,CAAC12L,GAAS,MAAO;AACrB,QAAM,EAAE,UAAAszJ,EAAQ,IAAK/e,EAAA,MAAK4Y,IAAO;AACjC,SAAImG,EAAQ,MAAO,UACV5c,EAAA,MAAK8/C,IAAAI,IAAL,aAEAlgD,EAAA,MAAK8/C,IAAAK,IAAL;AAEX,GACAD,KAAe,WAAG;AAChB,SAAAljK,EAAOgjH,EAAA,MAAK8/C,IAAAn3B,IAAe,KAAK,IAAI,CAAC,GACrC3oB,EAAA,MAAK8/C,IAAAM,IAAL,WAA+B,OACxB,MAAM;AACX,SAAK,GAAG,cAAc;AAAA,EACxB;AACF,GACAz3B,KAAc,WAAG;AACf,MAAI3oB,EAAA,MAAK8/C,IAAA3Y,IAAL,WAAkB;AACtB,EAAAnnC,EAAA,MAAK8/C,IAAAO,IAAL;AACA,QAAM,EAAE,WAAAjoB,EAAS,IAAKv6B,EAAA,MAAK4Y,IAAO;AAClC,EAAAlZ,GAAY66B,EAAS,GAAI,cAAcp4B,EAAA,MAAK8/C,IAAAO,IAAa,KAAK,IAAI,CAAC,GACnErjK,EAAOgjH,EAAA,MAAK8/C,IAAAQ,IAAoB,KAAK,IAAI,CAAC;AAC5C,GACAD,KAAY,WAAG;AACb,OAAK,GAAG,cAAc,IAClBxiD,EAAA,MAAKkiD,OAAqB,KAC5B//C,EAAA,MAAK8/C,IAAAS,IAAL;AAEF,QAAM,EAAE,iBAAAhsB,GAAiB,WAAA6D,MAAcv6B,EAAA,MAAK4Y,IAAO,QAAQ,EAAE,oBAAA+pC,MAAuBl3L,GAAS,OAAOynD,IAAOypF,GAAK+5B,CAAe,GAAGnlB,IAAa5U,GAAK49B,CAAS,EAAE;AAC/J,aAAWrqB,KAAOqB,GAAY;AAC5B,UAAMqxC,IAAYzgD,EAAA,MAAK8/C,IAAAY,IAAL,YAAiCC,IAAQ3gD,EAAA,MAAK8/C,IAAAc,IAAL;AAC3D,IAAAD,EAAM,YAAYH,EAAmBzyC,GAAKh9F,CAAI,GAC9C0vI,EAAU,OAAOE,CAAK,GACtB,KAAK,GAAG,OAAOA,CAAK;AAAA,EACtB;AACF,GACAL,KAAmB,WAAG;AACpB,QAAM,EAAE,iBAAA/rB,MAAoB12B,EAAA,MAAK4Y,IAAO,QAAQ,EAAE,wBAAAoqC,EAAsB,IAAKv3L,GAAS,IAAG;AACzF,EAAAu3L,EAAuB,KAAK,IAAItsB,GAAiB;AACnD,GACA4rB,KAAe,WAAG;AAChB,QAAM,EAAE,kBAAAW,EAAgB,IAAKx3L,GAAS,IAAG,GAAI6tJ,IAAW,IAAI2pC,EAAiB,KAAK,EAAE,GAAGC,IAAe,IAAIrB,GAAqBvoC,CAAQ;AACvI,SAAAtZ,EAAA,MAAK4Y,IAAO,cAAc,IAAIsqC,CAAY,GAC1C/jK,EAAOgjH,EAAA,MAAK8/C,IAAAkB,IAAoB,KAAK,MAAM7pC,CAAQ,CAAC,GACpDn6H,EAAOgjH,EAAA,MAAK8/C,IAAAmB,IAAgB,KAAK,MAAM9pC,CAAQ,CAAC,GAChDnX,EAAA,MAAK8/C,IAAAM,IAAL,WAA+BjpC,IACxB,MAAM;AACX,SAAK,GAAG,cAAc,IACtBtZ,EAAA,MAAK4Y,IAAO,cAAc,OAAOsqC,CAAY,GAC7C5pC,EAAS,QAAO;AAAA,EAClB;AACF,GACA6pC,KAAmB,SAAC7pC,GAAU;AAC5B,EAAAA,EAAS,MAAM,KAAK,OAAO,QAAO;AACpC,GACA8pC,KAAe,SAAC9pC,GAAU;;AACxB,MAAInX,EAAA,MAAK8/C,IAAA3Y,IAAL,WAAkB;AACtB,QAAM,EAAE,iBAAA5S,GAAiB,WAAA6D,EAAS,IAAKv6B,EAAA,MAAK4Y,IAAO;AACnD,EAAAU,EAAS,cAAcod,EAAe,GAClC12B,EAAA,MAAKkiD,OAAqB,OAAKz2L,IAAA8uK,EAAS,MAAT,QAAA9uK,EAAa,WAAW,OACzD02I,EAAA,MAAK8/C,IAAAS,IAAL;AAEJ,GACAH,KAAyB,SAACjpC,GAAU;AAClC,QAAM3F,IAAS3T,EAAA,MAAK4Y,IAAO;AAC3B,MAAI,CAACjF,EAAQ;AACb,QAAMroH,IAAW62G,EAAA,MAAK8/C,IAAAoB,IAAmB,KAAK,MAAM/pC,CAAQ;AAC5D,EAAA5Z,GAAYiU,GAAQ,mBAAmBroH,CAAQ;AACjD,GACA+3J,KAAkB,SAAC/pC,GAAU;;AAC3B,MAAItZ,EAAA,MAAKkiD,OAAqB,GAAG;AAC/B,IAAA//C,EAAA,MAAK8/C,IAAAqB,IAAL;AACA;AAAA,EACF;AACA,QAAM,EAAE,WAAA/oB,EAAS,IAAKv6B,EAAA,MAAK4Y,IAAO;AAClC,GAAKntJ,IAAA8uK,EAAS,MAAT,QAAA9uK,EAAa,WAAW,KAG3B6tJ,KAAA,QAAAA,EAAU,OAAO,MAFjBnX,EAAA,MAAK8/C,IAAAsB,IAAL;AAIJ,GACAA,KAAY,WAAG;;AACb,QAAMl1E,IAAU8zB,EAAA,MAAK8/C,IAAAY,IAAL;AAChB,EAAAjiD,GAAavyB,GAAS,gBAAgB,EAAE;AACxC,QAAM6hC,IAAM/N,EAAA,MAAK8/C,IAAAc,IAAL;AACZ,EAAAniD,GAAasP,GAAK,gBAAgB,EAAE,GACpCA,EAAI,cAAc,KAAK,OAAO,YAAW,GACzC7hC,KAAA,QAAAA,EAAS,OAAO6hC,KAChBzkJ,IAAA,KAAK,OAAL,QAAAA,EAAS,OAAO4iH,KAChBz8G,IAAA,KAAK,OAAL,QAAAA,EAAS,aAAa,gBAAgB,KACtCuwI,EAAA,MAAK8/C,IAAAqB,IAAL;AACF,GACApB,KAAA,eACAoB,KAAY,WAAG;AACb,SAAO,aAAatjD,EAAA,MAAKkiD,GAAiB,GAC1CniD,EAAA,MAAKmiD,IAAoB,OAAO,WAAW//C,EAAA,MAAK8/C,IAAAS,IAAe,KAAK,IAAI,GAAG,IAAI;AACjF,GACAA,KAAc,WAAG;;AACf,GAAAj3L,IAAA,KAAK,OAAL,QAAAA,EAAS,gBAAgB,kBACrBmG,IAAA,KAAK,OAAL,QAAAA,EAAS,cAAc,sBAAmB,KAAK,GAAG,cAAc,KACpEmuI,EAAA,MAAKmiD,IAAoB;AAC3B,GACAW,KAAwB,WAAG;AACzB,QAAMlwK,IAAK,SAAS,cAAc,KAAK;AACvC,SAAAiuH,GAAajuH,GAAI,aAAa,aAAa,GACpCA;AACT,GACAowK,KAAiB,WAAG;AAClB,QAAMpwK,IAAK,SAAS,cAAc,KAAK;AACvC,SAAAiuH,GAAajuH,GAAI,aAAa,KAAK,GAC5BA;AACT,GAxIAhQ,EADFlX,IACS,SAAQ;AAAA,EACb,SAAS;AAAA,EACT,aAAa;AACjB,IAEEkX,EANFlX,IAMS,OAAMi5E,GAAO,IAAI,IAN1Bj5E;;UA4IAA,KAAA,cAAqBnI,GAAU;AAAA,EAA/B;AAAA;AAAA,IAAAs8I,EAAA,MAAA4jD;AAeE,IAAA5jD,EAAA,MAAAgZ;AAkDA,IAAAhZ,EAAA,MAAA6jD,IAAW;AAAA;AAAA,EAjDX,UAAU;AACR,IAAA1jD,EAAA,MAAK6Y,IAASvF,GAAe,IAC7BlR,EAAA,MAAKqhD,IAAArR,IAAL,YACAhwC,EAAA,MAAKqhD,IAAAE,IAAL,YACAvhD,EAAA,MAAKqhD,IAAA7nB,IAAL,YACAx5B,EAAA,MAAKqhD,IAAAnV,IAAL;AAAA,EACF;AAAA,EACA,SAAS17J,GAAI;AACX,IAAAA,EAAG,MAAM,YAAY,kBAAkB,MAAM,GAC7CwM,EAAOgjH,EAAA,MAAKqhD,IAAAjT,IAAU,KAAK,IAAI,CAAC,GAChCpxJ,EAAOgjH,EAAA,MAAKqhD,IAAArR,IAAU,KAAK,IAAI,CAAC,GAChChzJ,EAAOgjH,EAAA,MAAKqhD,IAAAE,IAAU,KAAK,IAAI,CAAC,GAChCvkK,EAAOgjH,EAAA,MAAKqhD,IAAA7nB,IAAkB,KAAK,IAAI,CAAC,GACxCx8I,EAAOgjH,EAAA,MAAKqhD,IAAAnV,IAAa,KAAK,IAAI,CAAC;AACnC,UAAM,EAAE,SAAA7uB,EAAO,IAAKxf,EAAA,MAAK4Y,IAAO;AAChC,SAAK,cAAc;AAAA,MACjB,gBAAgB,MAAM,CAAC4G,EAAO,KAAM,CAAC,KAAK,OAAO,OAAM;AAAA,MACvD,gBAAgBrd,EAAA,MAAKqhD,IAAAnT,IAAW,KAAK,IAAI;AAAA,MACzC,cAAcluC,EAAA,MAAKqhD,IAAAlT,IAAU,KAAK,IAAI;AAAA,MACtC,eAAe,KAAK,OAAO;AAAA,IACjC,CAAK;AAAA,EACH;AAAA,EACA,UAAU39J,GAAI;AACZ,IAAAwM,EAAOgjH,EAAA,MAAKqhD,IAAAG,IAAc,KAAK,IAAI,CAAC,GACpCxkK,EAAOgjH,EAAA,MAAKqhD,IAAAr+B,IAAa,KAAK,IAAI,CAAC;AAAA,EACrC;AA2DF,GArFEvM,KAAA,eAfF4qC,KAAA,eA0CElT,KAAS,WAAG;AACV,QAAM,EAAE,OAAAzxL,MAAU,KAAK;AACvB,SAAO,CAACmgJ,GAAOngJ,GAAO;AACxB,GACA8kM,KAAa,WAAG;AACd,QAAM,EAAE,eAAA1gB,GAAe,QAAA3G,EAAM,IAAKt8B,EAAA,MAAK4Y,IAAO;AAC9C,EAAI,CAACqqB,EAAa,KAAM3G,EAAM,KAAIttB,GAAWstB,EAAM,GAAI,YAAY;AACrE,GACA+R,KAAY,WAAG;AACb,QAAM,EAAE,KAAAjlL,MAAQ,KAAK,QAAQ,EAAE,QAAAkzK,GAAQ,gBAAA9iB,EAAc,IAAKxZ,EAAA,MAAK4Y,IAAO;AACtE,OAAK,MAAMhY,GAAa,KAAK,IAAI,WAAW4Y,EAAc,IAAK,SAAS,IAAI,GAC5E,KAAK,OAAO,OAAO,IAAIrX,EAAA,MAAKqhD,IAAAlT,IAAL,cAAoB,EAAElnL,EAAG,KAAMkzK,QAAa9iB,EAAc,CAAE;AACrF,GACA62B,KAAU,WAAG;AACX,QAAM,EAAE,SAAAzmL,GAAS,QAAAqiL,EAAM,IAAK,KAAK;AACjC,SAAO,CAACA,EAAM,KAAMriL,EAAO;AAC7B,GACA2mL,KAAS,WAAG;AACV,QAAMx/C,IAAM,KAAK,OAAO,IAAG;AAC3B,EAAKA,MACL,IAAI4O,GAAiB5O,CAAG,EAAE,IAAI,QAAQoR,EAAA,MAAKqhD,IAAAI,IAAQ,KAAK,IAAI,CAAC,EAAE,IAAI,SAASzhD,EAAA,MAAKqhD,IAAA7iC,IAAS,KAAK,IAAI,CAAC,GAChG5vB,EAAI,YAAUoR,EAAA,MAAKqhD,IAAAI,IAAL;AACpB,GACAH,KAAA,eACAtR,KAAS,WAAG;AACV,QAAM,EAAE,QAAQ0R,MAAkB7jD,EAAA,MAAK4Y,IAAO,QAAQ,EAAE,eAAAqqB,GAAe,gBAAAD,GAAgB,gBAAA8gB,EAAc,IAAK9jD,EAAA,MAAK4Y,IAAO,QAChHxvJ,IAAM,KAAK,OAAO,IAAG,KAAM,IAAIkzK,IAASlzK,KAAOy6L,EAAa,KAAMC,EAAc;AACtF,EAAI9jD,EAAA,MAAKyjD,QAAazgB,OACpBA,EAAe,IAAI55K,CAAG,GAExB,KAAK,OAAO,IAAI,IAAI65K,EAAa,KAAM3G,EAAO,SAASA,IAAS,IAAI,GACpEv8B,EAAA,MAAK0jD,IAAWr6L;AAClB,GACAs6L,KAAS,WAAG;AACV,QAAM,EAAE,KAAAt6L,EAAG,IAAK,KAAK,QAAQ,EAAE,KAAAuB,EAAG,IAAK,KAAK,QAAQ,EAAE,QAAA2xK,EAAM,IAAKt8B,EAAA,MAAK4Y,IAAO;AAC7E,EAAAjuJ,EAAI,IAAIvB,EAAG,KAAMkzK,EAAM,IAAK,KAAK,OAAO,IAAG,IAAK,IAAI;AACtD,GACAX,KAAiB,WAAG;AAClB,QAAM,EAAE,aAAa+U,EAAe,IAAK,KAAK,QAAQ,EAAE,aAAaC,EAAgB,IAAK,KAAK,QAAQ,EAAE,aAAaC,GAAkB,QAAQxnL,EAAG,IAAK42I,EAAA,MAAK4Y,IAAO,QAAQ3iB,IAAcy6C,QAAsB,OAAOA,EAAe,IAAKE,EAAgB;AAC3P,EAAAD,EAAiB;AAAA,IACf,mBAAmB,KAAKvnL,OAAS,EAAE,IAAI,OAAO6sI,MAAgB,KAAO,cAAcA;AAAA,EACzF;AACE,GACAkvB,KAAY,WAAG;AACb,QAAM,EAAE,SAAAv7J,GAAS,OAAA/K,EAAK,IAAK,KAAK,QAAQ,EAAE,eAAAokL,GAAe,QAAA3G,EAAM,IAAKt8B,EAAA,MAAK4Y,IAAO;AAChF,EAAAhvJ,EAAQ,IAAIq5K,EAAa,KAAM,CAAC,CAAC3G,EAAM,CAAE,GACzCz9K,EAAM,IAAI,IAAI;AAChB,GACA+kM,KAAO,WAAG;AACR,QAAM,EAAE,SAAAh6L,GAAS,OAAA/K,EAAK,IAAK,KAAK;AAChC,EAAA+K,EAAQ,IAAI,EAAK,GACjB/K,EAAM,IAAI,IAAI;AAChB,GACA8hK,KAAQ,SAAC33H,GAAO;AACd,QAAM,EAAE,SAAAp/B,GAAS,OAAA/K,EAAK,IAAK,KAAK;AAChC,EAAA+K,EAAQ,IAAI,EAAK,GACjB/K,EAAM,IAAImqC,CAAK;AACjB,GAlGArmB,EADFlX,IACS,SAAQ;AAAA,EACb,KAAK;AAAA,EACL,KAAK;AAAA,EACL,aAAa;AACjB,IACEkX,EANFlX,IAMS,SAAQ,IAAIw3I,GAAM;AAAA,EACvB,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,aAAa;AAAA,EACb,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AACZ,CAAG,IAdHx3I;;UAsGAA,KAAA,cAAmBnI,GAAU;AAAA,EAA7B;AAAA;AAAA,IAAAs8I,EAAA,MAAAmkD;AAcE,IAAAnkD,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAAokD,IAAUt/G,GAAO,IAAI;AACrB,IAAAk7D,EAAA,MAAA8tC,IAAahpG,GAAO,EAAI;AACxB,IAAAk7D,EAAA,MAAA+tC,IAAkBjpG,GAAO,EAAI;AAAA;AAAA,EAC7B,UAAU;AACR,IAAAq7D,EAAA,MAAK6Y,IAASvF,GAAe,IAC7BlR,EAAA,MAAK4hD,IAAAE,IAAL;AACA,UAAM,EAAE,MAAAlkM,MAAS,KAAK;AACtB,SAAK,cAAc;AAAA,MACjB,aAAaA;AAAA,MACb,kBAAkBoiJ,EAAA,MAAK4hD,IAAAG,IAAc,KAAK,IAAI;AAAA,IACpD,CAAK,GACD,IAAIha,GAA+B;AAAA,MACjC,UAAU/nC,EAAA,MAAK4hD,IAAA5V,IAAsB,KAAK,IAAI;AAAA,IACpD,CAAK,EAAE,OAAO,IAAI;AAAA,EAChB;AAAA,EACA,SAASx7J,GAAI;AACX,IAAKA,EAAG,aAAa,MAAM,KAAGwM,EAAOgjH,EAAA,MAAK4hD,IAAAI,IAAW,KAAK,IAAI,CAAC,GAC/DhlK,EAAOgjH,EAAA,MAAK4hD,IAAAE,IAAW,KAAK,IAAI,CAAC;AAAA,EACnC;AAAA,EACA,UAAUtxK,GAAI;AACZ,IAAAuqH,GAAUwZ,GAAkB/jI,GAAIqtH,EAAA,MAAK0tC,IAAW,GAAG,CAAC,GACpDvuJ,EAAOgjH,EAAA,MAAK4hD,IAAA1V,IAAa,KAAK,IAAI,CAAC,GACnClvJ,EAAOgjH,EAAA,MAAK4hD,IAAAK,IAAa,KAAK,IAAI,CAAC;AAAA,EACrC;AA4DF,GApFExrC,KAAA,eACAorC,KAAA,eACAtW,KAAA,eACAC,KAAA,eAjBFoW,KAAA,eAuCE5V,KAAqB,SAACrqK,GAAS;AAC7B,EAAAk8H,EAAA,MAAK2tC,IAAgB,IAAI7pK,EAAQ,CAAC,EAAE,cAAc;AACpD,GACAuqK,KAAY,WAAG;AACb,QAAM,EAAE,QAAApC,MAAW,KAAK;AACxB,OAAK,OAAO,OAAO,IAAIA,EAAM,KAAM,CAACjsC,EAAA,MAAK0tC,IAAL,cAAqB,CAAC1tC,EAAA,MAAK2tC,IAAL,UAAsB;AAClF,GACAyW,KAAY,WAAG;AACb,MAAI,CAAC,KAAK,OAAO,UAAU;AACzB,IAAApkD,EAAA,MAAKgkD,IAAQ,IAAI,IAAI;AACrB;AAAA,EACF;AACA,EAAI,KAAK,MACPntC,GAAQ,KAAK,IAAI1U,EAAA,MAAK4hD,IAAAM,IAAU,KAAK,IAAI,CAAC;AAE9C,GACAJ,KAAU,WAAG;AACX,QAAM,EAAE,QAAAhY,GAAQ,UAAAqY,EAAQ,IAAK,KAAK,QAAQ,EAAE,UAAAxwC,EAAQ,IAAK9T,EAAA,MAAK4Y,IAAO;AACrE,MAAIqzB,EAAM,EAAI;AACd,QAAM,EAAE,MAAAlsL,GAAM,UAAA6yL,GAAU,YAAAC,GAAY,WAAAC,MAAc,KAAK,QAAQ7jB,IAAU9sB,EAAA,MAAK4hD,IAAAQ,IAAL,WAAiBxkM,EAAI,IAAKykM,IAAY1wC,EAAQ,GAAI2wC,IAAetiD,EAAA,MAAK4hD,IAAAG,IAAL;AAC1I,MAAI,CAAC,OAAO,SAASj1B,IAAUu1B,CAAS,GAAG;AACzC,IAAAF,EAAS,IAAI,MAAM;AACnB;AAAA,EACF;AACA,QAAMpxI,IAAOuxI,IAAe,KAAK,IAAI,GAAGD,IAAYv1B,CAAO,IAAIA,GAASy1B,IAAgBv1B,GAAWj8G,GAAM;AAAA,IACvG,QAAQ0/H,EAAQ;AAAA,IAChB,SAASC,EAAU;AAAA,IACnB,SAASC,EAAS;AAAA,EACxB,CAAK;AACD,EAAAwR,EAAS,KAAKG,IAAe,MAAM,MAAMC,CAAa;AACxD,GACAP,KAAU,WAAG;AACX,MAAI,CAAC,KAAK,GAAI;AACd,QAAM,EAAE,QAAAQ,MAAW,KAAK;AACxB,EAAA/jD,GAAa,KAAK,IAAI,QAAQ+jD,EAAM,IAAK,UAAU,IAAI,GACvD/jD,GAAa,KAAK,IAAI,YAAY+jD,EAAM,IAAK,IAAI,IAAI;AACvD,GACAJ,KAAW,SAACxkM,GAAM;AAChB,QAAM,EAAE,aAAA02L,GAAa,UAAA3iC,GAAU,aAAAxC,EAAW,IAAKtR,EAAA,MAAK4Y,IAAO;AAC3D,UAAQ74J,GAAI;AAAA,IACV,KAAK;AACH,aAAO02L,EAAW;AAAA,IACpB,KAAK;AACH,aAAO3iC,EAAQ;AAAA,IACjB;AACE,aAAOxC,EAAW;AAAA,EAC1B;AACE,GACA4yC,KAAa,WAAG;AACd,SAAO,KAAK,OAAO,UAAS,KAAMlkD,EAAA,MAAKgkD,IAAL,eAAmB;AACvD,GACAK,KAAS,SAACr7J,GAAO;AAEf,MADAA,EAAM,eAAc,GAChBg3G,EAAA,MAAKgkD,IAAL,eAAmB,MAAM;AAC3B,IAAAhkD,EAAA,MAAKgkD,IAAQ,IAAI,CAAC,KAAK,OAAO,WAAW;AACzC;AAAA,EACF;AACA,EAAAhkD,EAAA,MAAKgkD,IAAQ,IAAI,CAACr1L,MAAM,CAACA,CAAC;AAC5B,GAhGAgU,EADFlX,IACS,SAAQ;AAAA,EACb,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,QAAQ;AACZ,IACEkX,EAVFlX,IAUS,SAAQ,IAAIw3I,GAAM;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AACZ,CAAG,IAbHx3I;AAoGA,MAAMm5L,WAA4B7kB,GAAY;AAC9C;AACA,MAAM8kB,WAA8BxgB,GAAc;AAClD;AACA,MAAMygB,WAA+BC,GAAe;AACpD;AACA,MAAMC,WAAyB1f,GAAS;AACxC;AACA,MAAM2f,WAA8Bnf,GAAc;AAClD;AACA,MAAMof,WAA6Bvc,GAAa;AAChD;AACA,MAAMwc,WAA8BC,GAAc;AAClD;AACA,MAAMC,WAAiCC,GAAiB;AACxD;AACA,MAAMC,WAA2BC,GAAW;AAC5C;AACA,MAAMC,WAA2BC,GAAW;AAC5C;AACA,MAAMC,WAA0BC,GAAU;AAC1C;AACA,MAAMC,WAA2BC,GAAW;AAC5C;AACA,MAAMC,WAA8BC,GAAc;AAClD;AACA,MAAMC,WAAiCC,GAAiB;AACxD;AACA,MAAMC,WAA2BC,GAAW;AAC5C;AACA,MAAMC,WAAwB1f,GAAQ;AACtC;AACA,MAAM2f,WAA+B/e,GAAe;AACpD;AACA,MAAMgf,WAA+B3e,GAAe;AACpD;AACA,MAAM4e,WAAuBhY,GAAO;AACpC;AACA,MAAMiY,WAA2BjR,GAAW;AAC5C;AACA,MAAMkR,WAA6B7S,GAAa;AAChD;AACA,MAAM8S,WAAgCtS,GAAgB;AACtD;AACA,MAAMuS,WAA4BnS,GAAY;AAC9C;AACA,MAAMoS,WAA8B/R,GAAc;AAClD;AACA,MAAMgS,WAAgCjV,GAAgB;AACtD;AACA,MAAMkV,WAA4BvU,GAAY;AAC9C;AACA,MAAMwU,WAA4BhV,GAAY;AAC9C;AACA,MAAMiV,WAA8B/T,GAAc;AAClD;AACA,MAAMgU,WAA+BpQ,GAAe;AACpD;AACA,MAAMqQ,WAAqB7oE,GAAK;AAChC;AACA,MAAM8oE,WAA2BpI,GAAW;AAC5C;AACA,MAAMqI,WAA0B7H,GAAU;AAC1C;AACA,MAAM8H,WAAyB7lE,GAAS;AACxC;AAGA,MAAM8lE,WAA2BtlF,GAAW;AAC5C;AACA,MAAMulF,WAAsBpmF,GAAM;AAClC;AACA,MAAMqmF,WAAyBC,GAAS;AACxC;AACA,MAAMC,WAAwBC,GAAQ;AACtC;AACA,MAAMC,WAAuBC,GAAO;AACpC;AACA,MAAMC,WAA0BjW,GAAU;AAC1C;AACA,MAAMkW,WAAqBC,GAAK;AAChC;AAEA,MAAMh3L,KAAOxT,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACrD,QAAM,EAAE,UAAAlI,GAAU,GAAGmI,EAAS,IAAKlP,GAC7BmP,IAAgBnT,EAAM,SAAS,QAAQ+K,CAAQ,GAC/CqI,IAAYD,EAAc,KAAKE,EAAW;AAChD,MAAID,GAAW;AACb,UAAME,IAAaF,EAAU,MAAM,UAC7BG,IAAcJ,EAAc,IAAI,CAACpJ,MACjCA,MAAUqJ,IACRpT,EAAM,SAAS,MAAMsT,CAAU,IAAI,IAAUtT,EAAM,SAAS,KAAK,IAAI,IAClEA,EAAM,eAAesT,CAAU,IAAIA,EAAW,MAAM,WAAW,OAE/DvJ,CAEV;AACD,WAAuB,gBAAA/J,EAAM,cAAc8S,IAAW,EAAE,GAAGI,GAAW,KAAKD,KAAgBjT,EAAM,eAAesT,CAAU,IAAItT,EAAM,aAAasT,GAAY,QAAQC,CAAW,IAAI,IAAI;AAAA,EAC1L;AACA,SAAuB,gBAAAvT,EAAM,cAAc8S,IAAW,EAAE,GAAGI,GAAW,KAAKD,EAAY,GAAIlI,CAAQ;AACrG,CAAC;AACDyI,GAAK,cAAc;AACnB,MAAMV,KAAY9S,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AAC1D,QAAM,EAAE,UAAAlI,GAAU,GAAGmI,EAAS,IAAKlP;AACnC,SAAIhE,EAAM,eAAe+K,CAAQ,IACxB/K,EAAM,aAAa+K,GAAU;AAAA,IAClC,GAAG6I,GAAWV,GAAWnI,EAAS,KAAK;AAAA,IACvC,KAAKkI,IAAed,GAAYc,GAAclI,EAAS,GAAG,IAAIA,EAAS;AAAA,EAC7E,CAAK,IAEI/K,EAAM,SAAS,MAAM+K,CAAQ,IAAI,IAAI/K,EAAM,SAAS,KAAK,IAAI,IAAI;AAC1E,CAAC;AACD8S,GAAU,cAAc;AACxB,MAAM+8D,KAAY,CAAC,EAAE,UAAA9kE,QACI,gBAAA/K,EAAM,cAAcA,EAAM,UAAU,MAAM+K,CAAQ;AAE3E,SAASsI,GAAYtJ,GAAO;AAC1B,SAAO/J,EAAM,eAAe+J,CAAK,KAAKA,EAAM,SAAS8lE;AACvD;AACA,SAASj8D,GAAWV,GAAWY,GAAY;AACzC,QAAMC,IAAgB,EAAE,GAAGD,EAAU;AACrC,aAAWpL,KAAYoL,GAAY;AACjC,UAAME,IAAgBd,EAAUxK,CAAQ,GAClCuL,IAAiBH,EAAWpL,CAAQ;AAE1C,IADkB,WAAW,KAAKA,CAAQ,IAEpCsL,KAAiBC,IACnBF,EAAcrL,CAAQ,IAAI,IAAInH,MAAS;AACrC,MAAA0S,EAAe,GAAG1S,CAAI,GACtByS,EAAc,GAAGzS,CAAI;AAAA,IACvB,IACSyS,MACTD,EAAcrL,CAAQ,IAAIsL,KAEnBtL,MAAa,UACtBqL,EAAcrL,CAAQ,IAAI,EAAE,GAAGsL,GAAe,GAAGC,EAAc,IACtDvL,MAAa,gBACtBqL,EAAcrL,CAAQ,IAAI,CAACsL,GAAeC,CAAc,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,EAEtF;AACA,SAAO,EAAE,GAAGf,GAAW,GAAGa,EAAa;AACzC;AAEA,MAAM46B,KAAQ,CAAC,UAAU,OAAO,QAAQ,OAAO,SAAS,OAAO,GACzDC,KAAYD,GAAM,OAAO,CAAC87J,GAAY5gM,MAAS;AACnD,QAAM8hB,IAAO3rB,EAAM,WAAW,CAACgE,GAAOiP,MAAiB;AACrD,UAAM,EAAE,SAAAoN,GAAS,GAAGyuB,EAAc,IAAK9qC,GACjCsc,IAAOD,IAAU7M,KAAO3J;AAC9B,WAAuB,gBAAA7J,EAAM,cAAcsgB,GAAM,EAAE,GAAGwuB,GAAgB,KAAK77B,GAAc;AAAA,EAC3F,CAAC;AACD,SAAA0Y,EAAK,cAAc,aAAa9hB,CAAI,IAC7B,EAAE,GAAG4gM,GAAY,CAAC5gM,CAAI,GAAG8hB,EAAI;AACtC,GAAG,EAAE;AAEL,SAAS++K,GAAmB1nM,GAAU;AACpC,UAAOA,KAAA,gBAAAA,EAAU,qBAAoB;AACvC;AACA,SAAS2nM,GAAch/L,GAAK;AAC1B,UAAOA,KAAA,gBAAAA,EAAK,UAAS;AACvB;AAEA,MAAMi/L,KAAoB7B,GAAe,MAAM,QAAQ8B,KAAqB,OAAO,KAAKD,EAAiB,EAAE;AAAA,EACzG,CAACjlD,GAAO58H,OAAU;AAAA,IAChB,GAAG48H;AAAA,IACH,CAAC58H,CAAI,IAAI;AACP,aAAO6hL,GAAkB7hL,CAAI;AAAA,IAC/B;AAAA,EACJ;AAAA,EACE,CAAA;AACF;AACA,SAAS+hL,GAAe/hL,GAAMxgB,GAAK;AACjC,QAAMu2K,IAASh2B,GAAgByjC,EAAW;AAC1C,SAAOxjC,IAAmC+1B,KAAU+rB,IAAoB9hL,CAAI,CAAC;AAC/E;AAMA,MAAMgiL,KAAmB5D,GAAoB,MAAM,QAAQ6D,KAAoB,OAAO,KAAKD,EAAgB,EAAE;AAAA,EAC3G,CAACplD,GAAO58H,OAAU;AAAA,IAChB,GAAG48H;AAAA,IACH,CAAC58H,CAAI,IAAI;AACP,aAAOgiL,GAAiBhiL,CAAI;AAAA,IAC9B;AAAA,EACJ;AAAA,EACE,CAAA;AACF;AACA,SAASkiL,GAAcliL,GAAMxgB,GAAK;AAChC,QAAMu2K,IAASh2B,GAAgBoM,EAAU;AACzC,SAAOnM,IAAmC+1B,KAAUksB,IAAmBjiL,CAAI,CAAC;AAC9E;AC54VA,SAAS6sI,KAAkB;AACzB,SAAOxP,GAAgBuP,EAAY;AACrC;AAEA,MAAMu1C,KAAsBphD,GAAqBw+C,IAAuB;AAAA,EACtE,gBAAgB;AAClB,CAAC,GACKC,KAAgBvoM,EAAM;AAAA,EAC1B,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAckrM,IAAqB,EAAE,GAAGlnM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,IAC9G4uC,GAAU;AAAA,IACV;AAAA,MACE,GAAGj7B;AAAA,MACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,IAC/C;AAAA,IACMx7I;AAAA,EACN,CAAK;AAEL;AACAw9L,GAAc,cAAc;AAE5B,MAAM4C,KAAmBrhD,GAAqBs+C,IAAoB;AAAA,EAChE,gBAAgB;AAClB,CAAC,GACKC,KAAaroM,EAAM;AAAA,EACvB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAcmrM,IAAkB,EAAE,GAAGnnM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,IAC3G4uC,GAAU;AAAA,IACV;AAAA,MACE,GAAGj7B;AAAA,MACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,IAC/C;AAAA,IACMx7I;AAAA,EACN,CAAK;AAEL;AACAs9L,GAAW,cAAc;AAEzB,MAAM+C,MAAsBthD,GAAqB49C,IAAuB;AAAA,EACtE,gBAAgB;AAClB,CAAC,GACKC,KAAgB3nM,EAAM;AAAA,EAC1B,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAcorM,KAAqB,EAAE,GAAGpnM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,IAC9G4uC,GAAU;AAAA,IACV;AAAA,MACE,GAAGj7B;AAAA,MACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,IAC/C;AAAA,IACMx7I;AAAA,EACN,CAAK;AAEL;AACA48L,GAAc,cAAc;AAE5B,MAAM0D,MAAyBvhD,GAAqB89C,IAA0B;AAAA,EAC5E,gBAAgB;AAClB,CAAC,GACKC,KAAmB7nM,EAAM;AAAA,EAC7B,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAcqrM,KAAwB,EAAE,GAAGrnM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,IACjH4uC,GAAU;AAAA,IACV;AAAA,MACE,GAAGj7B;AAAA,MACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,IAC/C;AAAA,IACMx7I;AAAA,EACN,CAAK;AAEL;AACA88L,GAAiB,cAAc;AAE/B,MAAMyD,MAAmBxhD,GAAqBk+C,IAAoB;AAAA,EAChE,gBAAgB;AAClB,CAAC,GACKC,KAAajoM,EAAM;AAAA,EACvB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAcsrM,KAAkB,EAAE,GAAGtnM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,IAC3G4uC,GAAU;AAAA,IACV;AAAA,MACE,GAAGj7B;AAAA,MACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,IAC/C;AAAA,IACMx7I;AAAA,EACN,CAAK;AAEL;AACAk9L,GAAW,cAAc;AAEzB,MAAMsD,MAAkBzhD,GAAqBo+C,IAAmB;AAAA,EAC9D,gBAAgB;AAClB,CAAC,GACKC,KAAYnoM,EAAM;AAAA,EACtB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAcurM,KAAiB,EAAE,GAAGvnM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,IAC1G4uC,GAAU;AAAA,IACV;AAAA,MACE,GAAGj7B;AAAA,MACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,IAC/C;AAAA,IACMx7I;AAAA,EACN,CAAK;AAEL;AACAo9L,GAAU,cAAc;AAExB,MAAMqD,MAAmB1hD,GAAqB4+C,IAAoB;AAAA,EAChE,gBAAgB;AAClB,CAAC,GACKC,KAAa3oM,EAAM;AAAA,EACvB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAcwrM,KAAkB,EAAE,GAAGxnM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,IAC3G4uC,GAAU;AAAA,IACV;AAAA,MACE,GAAGj7B;AAAA,MACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,IAC/C;AAAA,IACMx7I;AAAA,EACN,CAAK;AAEL;AACA49L,GAAW,cAAc;AAEzB,MAAM8C,MAAmB3hD,GAAqBg+C,IAAoB;AAAA,EAChE,gBAAgB;AAClB,CAAC,GACKC,KAAa/nM,EAAM;AAAA,EACvB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAcyrM,KAAkB,EAAE,GAAGznM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,IAC3G4uC,GAAU;AAAA,IACV;AAAA,MACE,GAAGj7B;AAAA,MACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,IAC/C;AAAA,IACMx7I;AAAA,EACN,CAAK;AAEL;AACAg9L,GAAW,cAAc;AAEzB,MAAM2D,KAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEMC,MAAoB7hD,GAAqBw/C,EAAmB,GAE5DsC,MAAe9hD,GAAqBi/C,IAAgB;AAAA,EACxD,QAAQ2C;AACV,CAAC,GACKG,KAAS7rM,EAAM,WAAW,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MAChC,gBAAAvmJ,EAAM,cAAc4rM,KAAc,EAAE,GAAG5nM,GAAO,KAAKuiJ,KAAc,CAAC5yI,MAA2B,gBAAA3T,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAGj7B,EAAM,GAAI5I,CAAQ,CAAC,CAChL;AACD8gM,GAAO,cAAc;AACrB,MAAM1lI,KAAQnmE,EAAM,WAAW,CAACgE,GAAOuiJ,MAA+B,gBAAAvmJ,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAG5qC,GAAO,KAAKuiJ,EAAU,CAAE,CAAC;AACvIpgF,GAAM,cAAc;AACpB,MAAM2lI,KAAQ9rM,EAAM,WAAW,CAACgE,GAAOuiJ,MAA+B,gBAAAvmJ,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAG5qC,GAAO,KAAKuiJ,EAAU,CAAE,CAAC;AACvIulD,GAAM,cAAc;AACpB,MAAMC,KAAY/rM,EAAM,WAAW,CAACgE,GAAOuiJ,MAA+B,gBAAAvmJ,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAG5qC,GAAO,KAAKuiJ,EAAU,CAAE,CAAC;AAC3IwlD,GAAU,cAAc;AACxB,MAAMC,MAAgBliD,GAAqB0/C,EAAqB,GAC1DyC,KAAUjsM,EAAM;AAAA,EACpB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAcgsM,KAAe,EAAE,GAAGhoM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,IACxG4uC,GAAU;AAAA,IACV;AAAA,MACE,GAAGj7B;AAAA,MACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,IAC/C;AAAA,IACMx7I;AAAA,EACN,CAAK;AAEL;AACAkhM,GAAQ,cAAc;AACtB,MAAMC,KAAQlsM,EAAM,WAAW,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MAC/B,gBAAAvmJ,EAAM,cAAc2rM,KAAmB,EAAE,GAAG3nM,KAAS,CAAC2P,GAAQ4uG,MAAa;AAChG,QAAM4pF,IAAQpjD,GAAU,MAAMxmC,EAAS,aAAY,GAAIA,CAAQ;AAC/D,SAAuB,gBAAAviH,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAGj7B,GAAQ,KAAK4yI,KAAc4lD,GAAOphM,CAAQ;AAC3G,CAAC,CACF;AACDmhM,GAAM,cAAc;AACpB,MAAMx5G,KAAQ1yF,EAAM,WAAW,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MAAe;AACrE,QAAM6lD,IAAOtB,GAAe,KAAK,GAAGuB,IAAOvB,GAAe,KAAK,GAAGwB,IAAQxB,GAAe,MAAM,GAAG1d,KAASif,IAAOD,KAAQE;AAC1H,SAAuB,gBAAAtsM,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAG5qC,GAAO,KAAKuiJ,EAAU,GAAI,MAAM,KAAK,EAAE,QAAQ,KAAK,MAAM6mC,CAAK,IAAI,EAAC,CAAE,EAAE,IAAI,CAAChnK,GAAGlc,MAASa,EAASb,CAAI,CAAC,CAAC;AACzK,CAAC;AACDwoF,GAAM,cAAc;AAapB,MAAM65G,MAAqBziD,GAAqBm/C,IAAsB;AAAA,EACpE,QAAQyC;AAAA,EACR,gBAAgB;AAClB,CAAC,GACKc,KAASxsM,EAAM;AAAA,EACnB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAcusM,KAAoB,EAAE,GAAGvoM,GAAO,KAAKuiJ,KAAc,CAAC5yI,MAA2B,gBAAA3T,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAGj7B,EAAM,GAAI5I,CAAQ,CAAC;AAEzL;AACAyhM,GAAO,cAAc;AAarB,SAASC,IAAantH,IAAY,GAAGg3E,IAAU,GAAG9sI,IAAO,IAAI;AAC3D,SAAIw0H,KACK;AAAA,IACL,WAAA1+D;AAAA,IACA,SAAAg3E;AAAA,IACA,MAAA9sI;AAAA,IACA,kBAAkB6zD;AAAA,IAClB,qBAAqBA;AAAA,IACrB,eAAeA;AAAA,EACrB,IAES,IAAI,OAAO,OAAOiC,GAAWg3E,GAAS9sI,CAAI;AACnD;AACA,SAAS6nI,IAAkBC,GAAS17H,GAAQ;AAC1C,QAAM+U,IAAM,IAAI,IAAI2mH,CAAO;AAC3B,aAAWhpJ,KAAO,OAAO,KAAKstB,CAAM;AAClC,IAAA+U,EAAI,aAAa,IAAIriC,GAAKstB,EAAOttB,CAAG,IAAI,EAAE;AAE5C,SAAOqiC,EAAI,SAAQ;AACrB;AAEA,MAAM+hK,MAAkB5iD,GAAqBwgD,EAAiB,GACxDqC,KAAS3sM,EAAM,WAAW,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MAChC,gBAAAvmJ,EAAM,cAAc0sM,KAAiB,EAAE,GAAG1oM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,EAC1G4uC,GAAU;AAAA,EACV;AAAA,IACE,GAAGj7B;AAAA,IACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,EAC7C;AAAA,EACIx7I;AACJ,CAAG,CACF;AACD4hM,GAAO,cAAc;AACrB,MAAMC,KAAM5sM,EAAM,WAAW,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MAAe;AACnE,QAAM,EAAE,KAAA56I,GAAK,KAAA2nI,GAAK,aAAAkF,EAAW,IAAKsQ,GAAgBwhD,GAAkB,KAAK,GAAGuC,IAAO9jD,GAAUp9I,CAAG,GAAGmhM,IAAe/jD,GAAUvQ,CAAW;AACvI,SAAuB,gBAAAx4I,EAAM;AAAA,IAC3B4uC,GAAU;AAAA,IACV;AAAA,MACE,aAAak+J;AAAA,MACb,GAAG9oM;AAAA,MACH,KAAK6oM,KAAQ;AAAA,MACb,KAAK16L,GAAYmhI,EAAI,KAAKiT,CAAU;AAAA,IAC1C;AAAA,IACIx7I;AAAA,EACJ;AACA,CAAC;AACD6hM,GAAI,cAAc;AAQlB,MAAMG,KAAoB/sM,EAAM,cAAc;AAAA,EAC5C,WAAWinF,GAAO,IAAI;AACxB,CAAC;AACD8lH,GAAkB,cAAc;AAChC,MAAMC,MAAmBljD,GAAqBk/C,IAAoB;AAAA,EAChE,QAAQ0C;AAAA,EACR,gBAAgB;AAClB,CAAC,GACKuB,KAASjtM,EAAM;AAAA,EACnB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MAAe;AACtC,UAAM2mD,IAAYltM,EAAM,QAAQ,MAAMinF,GAAO,IAAI,GAAG,EAAE;AACtD,WAAuB,gBAAAjnF,EAAM,cAAc+sM,GAAkB,UAAU,EAAE,OAAO,EAAE,WAAAG,EAAS,EAAE,GAAoB,gBAAAltM,EAAM,cAAcgtM,KAAkB,EAAE,GAAGhpM,GAAO,KAAKuiJ,EAAU,GAAI,CAAC5yI,MAA2B,gBAAA3T,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAGj7B,KAAU5I,CAAQ,CAAC,CAAC;AAAA,EAChR;AACF;AACAkiM,GAAO,cAAc;AACrB,MAAME,MAAuBrjD,GAAqB2/C,EAAsB,GAClE2D,KAAWptM,EAAM;AAAA,EACrB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAcmtM,KAAsB,EAAE,GAAGnpM,EAAK,GAAI,CAAC2P,GAAQ4uG,MAA6B,gBAAAviH,EAAM;AAAA,IACzH4uC,GAAU;AAAA,IACV;AAAA,MACE,GAAGj7B;AAAA,MACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,IAC/C;AAAA,IACsB,gBAAAvmJ,EAAM,cAAcqtM,IAAe,EAAE,UAAA9qF,EAAQ,GAAIx3G,CAAQ;AAAA,EAC/E,CAAK;AAEL;AACAqiM,GAAS,cAAc;AACvB,SAASC,GAAc,EAAE,UAAA9qF,GAAU,UAAAx3G,KAAY;AAC7C,QAAMuiM,IAAQvkD,GAAU,MAAMxmC,EAAS,MAAMA,CAAQ,GAAGnwG,IAAOpS,EAAM,OAAO,CAAA,CAAE,GAAGutM,IAAWvtM,EAAM,OAAO,IAAI,GAAG,EAAE,WAAAktM,MAAcltM,EAAM,WAAW+sM,EAAiB;AAClK,SAAKQ,EAAS,YACZA,EAAS,UAAUd,IAAY,IAEjCzsM,EAAM,UAAU,OACdktM,EAAU,IAAI3qF,CAAQ,GACf,MAAM,KAAK2qF,EAAU,IAAI,IAAI,IACnC,CAAC3qF,CAAQ,CAAC,GACbviH,EAAM,UAAU,MAAM;AACpB,IAAAuiH,EAAS,QAAQnwG,EAAK,OAAO;AAAA,EAC/B,GAAG,CAACk7L,CAAK,CAAC,GACHviM,EAASuiM,EAAM,SAASA,IAAQ,CAACC,EAAS,OAAO,GAAG,CAACr4K,MAAO;AACjE,QAAI,CAACA,GAAI;AACP,MAAA9iB,EAAK,QAAQ,SAAS;AACtB;AAAA,IACF;AACA,IAAAA,EAAK,QAAQ,KAAK8iB,CAAE;AAAA,EACtB,CAAC;AACH;AACAm4K,GAAc,cAAc;AAC5B,MAAMG,KAAextM,EAAM;AAAA,EACzB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MAAe;AACtC,UAAM,EAAE,WAAA2mD,EAAS,IAAKltM,EAAM,WAAW+sM,EAAiB,GAAG,CAACriG,GAAOwb,CAAQ,IAAIlmH,EAAM,SAAQ;AAC7F,WAAAA,EAAM,UAAU,MACP0hC,EAAO,MAAM;AAClB,YAAMo6J,IAAWoR,KAAaz6C,KAAMqpC,KAAA,gBAAAA,EAAU,sBAAoBA,KAAA,gBAAAA,EAAU;AAC5E,MAAA51E,GAASusC,KAAA,gBAAAA,EAAK,SAAQ,EAAE;AAAA,IAC1B,CAAC,GACA,CAAA,CAAE,GACkB,gBAAAzyJ,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAG5qC,GAAO,KAAKuiJ,KAAc77C,GAAO3/F,CAAQ;AAAA,EAC1G;AACF;AACAyiM,GAAa,cAAc;AAC3B,MAAMC,KAAWztM,EAAM,WAAW,CAACgE,GAAOuiJ,MAA+B,gBAAAvmJ,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAG5qC,GAAO,KAAKuiJ,EAAU,CAAE,CAAC;AAC1IknD,GAAS,cAAc;AACvB,MAAMC,MAAwB5jD,GAAqBu/C,EAAuB,GACpEsE,KAAgB3tM,EAAM;AAAA,EAC1B,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAc0tM,KAAuB,EAAE,GAAG1pM,EAAK,GAAI,CAAC2P,MAA2B,gBAAA3T,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAGj7B,GAAQ,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU,KAAKx7I,CAAQ,CAAC;AAErN;AACA4iM,GAAc,cAAc;AAC5B,MAAMtZ,KAAY;AAAA,EAChB,MAAMsZ;AAAA,EACN,KAAKf;AACP,GACMgB,MAAc9jD,GAAqBy/C,IAAqB;AAAA,EAC5D,QAAQ,CAAC,aAAa,SAAS;AACjC,CAAC,GACKsE,MAAQ7tM,EAAM;AAAA,EAClB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAc4tM,KAAa,EAAE,GAAG5pM,EAAK,GAAI,CAAC2P,GAAQ4uG,MAA6B,gBAAAviH,EAAM;AAAA,IAChHksK;AAAA,IACA;AAAA,MACE,GAAGv4J;AAAA,MACH,UAAA4uG;AAAA,MACA,KAAKpwG,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,IAC/C;AAAA,IACMx7I;AAAA,EACN,CAAK;AAEL;AACA8iM,IAAM,cAAc;AACpB,MAAM3hC,KAAgBlsK,EAAM;AAAA,EAC1B,CAAC,EAAE,UAAAuiH,GAAU,UAAAx3G,GAAU,GAAG/G,EAAK,GAAIuiJ,MAAe;AAChD,UAAM,EAAE,SAAAsxB,MAAY/uB,GAAgBoM,EAAU,GAAG,EAAE,KAAAvpJ,GAAK,OAAAujJ,GAAO,aAAA1W,EAAW,IAAKj2B,EAAS,QAAQsqF,IAAO9jD,GAAUp9I,CAAG,GAAGmiM,IAAW/kD,GAAU8uB,CAAO,GAAGi1B,IAAe/jD,GAAUvQ,CAAW;AAC1L,WAAuB,gBAAAx4I,EAAM;AAAA,MAC3B4uC,GAAU;AAAA,MACV;AAAA,QACE,OAAO,EAAE,UAAU,QAAO;AAAA,QAC1B,GAAG5qC;AAAA,QACH,KAAK6oM,KAAQ;AAAA,QACb,OAAO;AAAA,QACP,aAAa;AAAA,QACb,SAASiB,IAAW,SAAS;AAAA,QAC7B,aAAahB,KAAgB;AAAA,QAC7B,KAAK36L,GAAY+8I,EAAM,KAAK3I,CAAU;AAAA,MAC9C;AAAA,MACMx7I;AAAA,IACN;AAAA,EACE;AACF;AACAmhK,GAAc,cAAc;AAkB5B,MAAM6hC,MAAmBjkD,GAAqBggD,IAAoB;AAAA,EAChE,QAAQ,CAAC,UAAU;AACrB,CAAC,GACKkE,KAAShuM,EAAM;AAAA,EACnB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAc+tM,KAAkB,EAAE,GAAG/pM,GAAO,KAAKuiJ,KAAc,CAAC5yI,MAA2B,gBAAA3T,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAGj7B,EAAM,GAAI5I,CAAQ,CAAC;AAEvL;AACAijM,GAAO,cAAc;AACrB,MAAMC,MAAenkD,GAAqBigD,IAAe;AAAA,EACvD,QAAQ,CAAC,YAAY,UAAU;AACjC,CAAC,GACKmE,KAASluM,EAAM,WAAW,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MAChC,gBAAAvmJ,EAAM,cAAciuM,KAAc,EAAE,GAAGjqM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,EACvG4uC,GAAU;AAAA,EACV;AAAA,IACE,GAAGj7B;AAAA,IACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,EAC7C;AAAA,EACIx7I;AACJ,CAAG,CACF;AACDmjM,GAAO,cAAc;AAQrB,MAAMC,MAAarkD,GAAqB4/C,IAAc;AAAA,EACpD,QAAQ,CAAC,UAAU,SAAS;AAAA,EAC5B,gBAAgB;AAClB,CAAC,GACKjiJ,KAAOznD,EAAM,WAAW,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MAC9B,gBAAAvmJ,EAAM,cAAcmuM,KAAY,EAAE,GAAGnqM,GAAO,KAAKuiJ,EAAU,GAAI,CAAC5yI,GAAQ4uG,MAA6B,gBAAAviH,EAAM;AAAA,EAChI4uC,GAAU;AAAA,EACV;AAAA,IACE,GAAGj7B;AAAA,IACH,OAAO,EAAE,SAAU4uG,EAAS,YAAyB,SAAb,YAAqB,GAAG5uG,EAAO,MAAK;AAAA,EAClF;AAAA,EACI5I;AACJ,CAAG,CACF;AACD08C,GAAK,cAAc;AACnB,MAAM2mJ,MAAetkD,GAAqB6/C,IAAoB;AAAA,EAC5D,QAAQ,CAAC,UAAU;AACrB,CAAC,GACKxpL,KAASngB,EAAM;AAAA,EACnB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAcouM,KAAc,EAAE,GAAGpqM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,IACvG4uC,GAAU;AAAA,IACV;AAAA,MACE,GAAGj7B;AAAA,MACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,IAC/C;AAAA,IACMx7I;AAAA,EACN,CAAK;AAEL;AACAoV,GAAO,cAAc;AACrB,MAAMq1B,KAASx1C,EAAM;AAAA,EACnB,CAAC,EAAE,WAAAkQ,IAAY,MAAM,UAAA46C,IAAW,IAAO,UAAA//C,GAAU,GAAG/G,EAAK,GAAIuiJ,MAAe;AAC1E,QAAI4vB,IAAa80B,GAAc,YAAY,GAAGoD,IAAevjJ,MAAa,eAAe,CAACqrH,IAAa,CAACrrH;AACxG,UAAMvxB,IAASv5B,EAAM,QAAQ,MACvBg+I,KAAkB,QACT9yF,GAASh7C,CAAS,IAAI,SAAS,cAAcA,CAAS,IAAIA,MACxD,SAAS,MACvB,CAACA,CAAS,CAAC;AACd,WAAO,CAACqpB,KAAU,CAAC80K,IAAetjM,IAAWujM;AAAA,MAC3B,gBAAAtuM,EAAM;AAAA,QACpB4uC,GAAU;AAAA,QACV;AAAA,UACE,GAAG5qC;AAAA,UACH,OAAO,EAAE,SAAS,YAAY,GAAGA,EAAM,MAAK;AAAA,UAC5C,KAAKuiJ;AAAA,QACf;AAAA,QACQx7I;AAAA,MACR;AAAA,MACMwuB;AAAA,IACN;AAAA,EACE;AACF;AACAic,GAAO,cAAc;AACrB,MAAM+4J,MAAczkD,GAAqB8/C,EAAiB,GACpDh2G,KAAQ5zF,EAAM,WAAW,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MAC/B,gBAAAvmJ,EAAM,cAAcuuM,KAAa,EAAE,GAAGvqM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,EACtG4uC,GAAU;AAAA,EACV;AAAA,IACE,GAAGj7B;AAAA,IACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,EAC7C;AAAA,EACIx7I;AACJ,CAAG,CACF;AACD6oF,GAAM,cAAc;AACpB,MAAM46G,MAAa1kD,GAAqB+/C,EAAgB,GAClD9nI,MAAO/hE,EAAM,WAAW,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MAC9B,gBAAAvmJ,EAAM,cAAcwuM,KAAY,EAAE,GAAGxqM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,EACrG4uC,GAAU;AAAA,EACV;AAAA,IACE,GAAGj7B;AAAA,IACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,EAC7C;AAAA,EACIx7I;AACJ,CAAG,CACF;AACDg3D,IAAK,cAAc;AAcnB,MAAM0sI,MAAgB3kD,GAAqBogD,IAAiB;AAAA,EAC1D,QAAQ,CAAC,iBAAiB,WAAW;AACvC,CAAC,GACKC,KAAUnqM,EAAM;AAAA,EACpB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAcyuM,KAAe,EAAE,GAAGzqM,GAAO,KAAKuiJ,KAAc,CAAC5yI,MAA2B,gBAAA3T,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAGj7B,EAAM,GAAI5I,CAAQ,CAAC;AAEpL;AACAo/L,GAAQ,cAAc;AAEtB,MAAMuE,MAAa5kD,GAAqBygD,EAAY,GAC9CC,KAAOxqM,EAAM,WAAW,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MAC9B,gBAAAvmJ,EAAM,cAAc0uM,KAAY,EAAE,GAAG1qM,EAAK,GAAI,CAAC2P,GAAQ4uG,MAA6B,gBAAAviH,EAAM;AAAA,EAC/G2uM;AAAA,EACA;AAAA,IACE,GAAGh7L;AAAA,IACH,UAAA4uG;AAAA,IACA,KAAKpwG,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,EAC7C;AAAA,EACIx7I;AACJ,CAAG,CACF;AACDy/L,GAAK,cAAc;AACnB,MAAMmE,KAAW3uM,EAAM;AAAA,EACrB,CAAC,EAAE,UAAAuiH,GAAU,UAAAx3G,GAAU,GAAG/G,EAAK,GAAIuiJ,MAAe;AAChD,UAAM,EAAE,UAAAsgD,EAAQ,IAAKtkF,EAAS,QAAQqsF,IAAY7lD,GAAU89C,CAAQ;AACpE,WAAuB,gBAAA7mM,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAG5qC,GAAO,KAAKuiJ,KAAcqoD,GAAW7jM,CAAQ;AAAA,EAC9G;AACF;AACA4jM,GAAS,cAAc;AAEvB,SAASE,KAAiB;AACxB,QAAM9rM,IAAU6yJ,GAAe;AAC/B,UAAO7yJ,KAAA,gBAAAA,EAAS,WAAU;AAC5B;AAEA,SAAS+rM,MAAkB;AACzB,QAAM/zC,IAAQnF,MAAmB,EAAE,aAAA4Y,GAAa,YAAA5E,MAAe7O,EAAM,QAAQg0C,IAAehmD,GAAUylB,CAAW;AACjH,SAAAzlB,GAAU6gB,CAAU,GACb5pK,EAAM,QAAQ,MAAM;AACzB,UAAMi8B,IAAU8yK,EAAa,IAAI,CAAC3hG,OAAW;AAAA,MAC3C,OAAAA;AAAA,MACA,OAAOA,EAAM;AAAA,MACb,OAAO4hG,GAAgB5hG,CAAK;AAAA,MAC5B,IAAI,WAAW;AACb,eAAOw8D,EAAU,MAAOx8D;AAAA,MAC1B;AAAA,MACA,OAAO9+C,GAAS;AACd,cAAMrgD,IAAQugK,IAAc,QAAQphE,CAAK;AACzC,QAAIn/F,KAAS,KAAG8sJ,EAAM,OAAO,iBAAiB9sJ,GAAOqgD,CAAO;AAAA,MAC9D;AAAA,IACN,EAAM;AACF,kBAAO,eAAeryB,GAAS,YAAY;AAAA,MACzC,MAAM;AACJ,eAAOA,EAAQ,UAAU;AAAA,MAC3B;AAAA,IACN,CAAK,GACD,OAAO,eAAeA,GAAS,iBAAiB;AAAA,MAC9C,MAAM;AACJ,eAAO2tI,EAAU;AAAA,MACnB;AAAA,IACN,CAAK,GACD,OAAO,eAAe3tI,GAAS,iBAAiB;AAAA,MAC9C,MAAM;AACJ,cAAMmxE,IAAQw8D,EAAU;AACxB,eAAOx8D,IAAQ4hG,GAAgB5hG,CAAK,IAAI;AAAA,MAC1C;AAAA,IACN,CAAK,GACMnxE;AAAA,EACT,GAAG,CAAC8yK,CAAY,CAAC;AACnB;AACA,SAASC,GAAgB5hG,GAAO;AAC9B,SAAOA,EAAM,MAAM,YAAW;AAChC;AAEA,SAAS6hG,IAAkB,EAAE,KAAAj8C,IAAM,GAAI,IAAK,CAAA,GAAI;AAC9C,QAAM+H,IAAQnF,MAAmB,EAAE,YAAA2F,GAAY,WAAAuhB,MAAc/hB,EAAM,QAAQm0C,IAAcnmD,GAAUwS,CAAU;AAC7G,SAAAxS,GAAU+zB,CAAS,GACZ98K,EAAM,QAAQ,MAAM;AACzB,UAAMmvM,IAAgBD,EAAY,OAAOr6C,EAAkB,GAAG54H,IAAUkzK,EAAc,IAAI,CAAC/hG,OAAW;AAAA,MACpG,OAAAA;AAAA,MACA,OAAOA,EAAM;AAAA,MACb,OAAOgiG,GAAchiG,CAAK;AAAA,MAC1B,IAAI,WAAW;AACb,eAAO0vE,EAAS,MAAO1vE;AAAA,MACzB;AAAA,MACA,OAAO9+C,GAAS;AACd,cAAMrgD,IAAQstJ,IAAa,QAAQnuD,CAAK;AACxC,QAAIn/F,KAAS,KAAG8sJ,EAAM,OAAO,oBAAoB9sJ,GAAO,WAAWqgD,CAAO;AAAA,MAC5E;AAAA,IACN,EAAM;AACF,WAAI0kG,KACF/2H,EAAQ,QAAQ;AAAA,MACd,OAAO;AAAA,MACP,OAAOivB,GAAS8nG,CAAG,IAAIA,IAAM;AAAA,MAC7B,OAAO;AAAA,MACP,IAAI,WAAW;AACb,eAAO,CAAC8pB,EAAS;AAAA,MACnB;AAAA,MACA,OAAOxuH,GAAS;AACd,QAAAysG,EAAM,OAAO,eAAezsG,CAAO;AAAA,MACrC;AAAA,IACR,CAAO,GAEH,OAAO,eAAeryB,GAAS,YAAY;AAAA,MACzC,MAAM;AACJ,eAAO,CAACkzK,EAAc;AAAA,MACxB;AAAA,IACN,CAAK,GACD,OAAO,eAAelzK,GAAS,iBAAiB;AAAA,MAC9C,MAAM;AACJ,eAAO6gJ,EAAS;AAAA,MAClB;AAAA,IACN,CAAK,GACD,OAAO,eAAe7gJ,GAAS,iBAAiB;AAAA,MAC9C,MAAM;AACJ,cAAMmxE,IAAQ0vE,EAAS;AACvB,eAAO1vE,IAAQgiG,GAAchiG,CAAK,IAAI;AAAA,MACxC;AAAA,IACN,CAAK,GACMnxE;AAAA,EACT,GAAG,CAACizK,CAAW,CAAC;AAClB;AACA,SAASE,GAAchiG,GAAO;AAC5B,SAAOA,EAAM,KAAK,MAAMA,EAAM,OAAO,MAAMA,EAAM,MAAM,YAAW;AACpE;AC7oBA,MAAMiiG,MAAuBvlD,GAAqBu9C,IAAwB;AAAA,EACxE,QAAQ,CAAC,UAAU;AACrB,CAAC,GACKC,KAAiBtnM,EAAM;AAAA,EAC3B,CAAC,EAAE,OAAAu7C,GAAO,UAAAxwC,GAAU,GAAG/G,EAAK,GAAIuiJ,MACP,gBAAAvmJ,EAAM,cAAcqvM,KAAsB,EAAE,GAAGrrM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,IAC/G4uC,GAAU;AAAA,IACV;AAAA,MACE,GAAGj7B;AAAA,MACH,OAAO,EAAE,SAAS,YAAY,GAAG4nC,EAAK;AAAA,MACtC,KAAKppC,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,IAC/C;AAAA,IACMx7I;AAAA,EACN,CAAK;AAEL;AACAu8L,GAAe,cAAc;AAE7B,MAAMgI,MAAiBxlD,GAAqBy9C,EAAgB,GACtDsE,KAAS7rM,EAAM,WAAW,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MAChC,gBAAAvmJ,EAAM,cAAcsvM,KAAgB,EAAE,GAAGtrM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,EACzG4uC,GAAU;AAAA,EACV;AAAA,IACE,GAAGj7B;AAAA,IACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,EAC7C;AAAA,EACIx7I;AACJ,CAAG,CACF;AACD8gM,GAAO,cAAc;AACrB,MAAM0D,MAAsBzlD,GAAqB09C,EAAqB,GAChEt/D,KAAQloI,EAAM,WAAW,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MAC/B,gBAAAvmJ,EAAM,cAAcuvM,KAAqB,EAAE,GAAGvrM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,EAC9G4uC,GAAU;AAAA,EACV;AAAA,IACE,GAAGj7B;AAAA,IACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,EAC7C;AAAA,EACIx7I;AACJ,CAAG,CACF;AACDm9H,GAAM,cAAc;AAQpB,MAAMsnE,MAAgB1lD,GAAqB8+C,EAAe;AAC1D,SAAS4D,GAAO,EAAE,UAAAzhM,GAAU,GAAG/G,KAAS;AACtC,SAAuB,gBAAAhE,EAAM,cAAcwvM,KAAe,EAAE,GAAGxrM,EAAK,GAAI+G,CAAQ;AAClF;AACAyhM,GAAO,cAAc;AACrB,MAAMiD,MAAgB3lD,GAAqB++C,EAAsB,GAC3DnhJ,KAAU1nD,EAAM;AAAA,EACpB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAcyvM,KAAe,EAAE,GAAGzrM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,IACxG4uC,GAAU;AAAA,IACV;AAAA,MACE,GAAGj7B;AAAA,MACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,IAC/C;AAAA,IACMx7I;AAAA,EACN,CAAK;AAEL;AACA28C,GAAQ,cAAc;AACtB,MAAMgoJ,MAAgB5lD,GAAqBg/C,EAAsB,GAC3DlhJ,KAAU5nD,EAAM;AAAA,EACpB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAc0vM,KAAe,EAAE,GAAG1rM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,IACxG4uC,GAAU;AAAA,IACV;AAAA,MACE,GAAGj7B;AAAA,MACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,IAC/C;AAAA,IACMx7I;AAAA,EACN,CAAK;AAEL;AACA68C,GAAQ,cAAc;AAStB,MAAM+nJ,MAAyB7lD,GAAqB0+C,IAA0B;AAAA,EAC5E,gBAAgB;AAClB,CAAC,GACKC,KAAmBzoM,EAAM;AAAA,EAC7B,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAc2vM,KAAwB,EAAE,GAAG3rM,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,IACjH4uC,GAAU;AAAA,IACV;AAAA,MACE,GAAGj7B;AAAA,MACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,IAC/C;AAAA,IACMx7I;AAAA,EACN,CAAK;AAEL;AACA09L,GAAiB,cAAc;AAE/B,MAAMmH,MAAsB9lD,GAAqBs/C,IAAuB;AAAA,EACtE,QAAQsC;AAAA,EACR,gBAAgB;AAClB,CAAC,GACKiB,KAAS3sM,EAAM;AAAA,EACnB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAc4vM,KAAqB,EAAE,GAAG5rM,GAAO,KAAKuiJ,KAAc,CAAC5yI,MAA2B,gBAAA3T,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAGj7B,EAAM,GAAI5I,CAAQ,CAAC;AAE1L;AACA4hM,GAAO,cAAc;AAarB,MAAMkD,MAAwB/lD,GAAqBo/C,IAAyB;AAAA,EAC1E,QAAQwC;AAAA,EACR,gBAAgB;AAClB,CAAC,GACKuB,KAASjtM,EAAM;AAAA,EACnB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAc6vM,KAAuB,EAAE,GAAG7rM,GAAO,KAAKuiJ,KAAc,CAAC5yI,MAA2B,gBAAA3T,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAGj7B,EAAM,GAAI5I,CAAQ,CAAC;AAE5L;AACAkiM,GAAO,cAAc;AAarB,MAAM6C,MAAoBhmD,GAAqBq/C,IAAqB;AAAA,EAClE,QAAQuC;AAAA,EACR,gBAAgB;AAClB,CAAC,GACKsC,KAAShuM,EAAM;AAAA,EACnB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAc8vM,KAAmB,EAAE,GAAG9rM,GAAO,KAAKuiJ,KAAc,CAAC5yI,MAA2B,gBAAA3T,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAGj7B,EAAM,GAAI5I,CAAQ,CAAC;AAExL;AACAijM,GAAO,cAAc;AAarB,MAAMnmJ,KAAQ7nD,EAAM,WAAW,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MAAe;AACrE,QAAMwpD,IAAS9E,GAAc,OAAO;AACpC,SAAuB,gBAAAjrM,EAAM,cAAc4uC,GAAU,MAAM,EAAE,GAAG5qC,GAAO,KAAKuiJ,KAAcwpD,GAAQhlM,CAAQ;AAC5G,CAAC;AACD88C,GAAM,cAAc;AAEpB,SAASmoJ,GAAkB5iG,GAAO;AAChC,QAAM,CAAC0mD,GAAYm8C,CAAa,IAAIjwM,EAAM,SAAS,CAAA,CAAE;AACrD,SAAAA,EAAM,UAAU,MAAM;AACpB,QAAI,CAACotG,GAAO;AACV,MAAA6iG,EAAc,CAAA,CAAE;AAChB;AAAA,IACF;AACA,aAAS5T,IAAe;AACtB,MAAIjvF,KAAO6iG,EAAc7iG,EAAM,UAAU;AAAA,IAC3C;AACA,WAAAivF,EAAY,GACLp6C,GAAY70C,GAAO,cAAcivF,CAAY;AAAA,EACtD,GAAG,CAACjvF,CAAK,CAAC,GACH0mD;AACT;AAEA,SAASo8C,GAAmBnzK,GAAM;AAChC,QAAMg+H,IAAQnF,GAAe,GAAI,CAACxoD,GAAO+iG,CAAQ,IAAInwM,EAAM,SAAS,IAAI;AACxE,SAAAA,EAAM,UAAU,MACP0yJ,GAAqBqI,EAAM,YAAYh+H,GAAMozK,CAAQ,GAC3D,CAACpzK,CAAI,CAAC,GACFqwE;AACT;AAEA,SAASgjG,KAAkB;;AACzB,QAAMC,IAASH,GAAmB,UAAU;AAC5C,WAAOliM,IADgDgiM,GAAkBK,CAAM,EAClE,CAAC,MAAP,gBAAAriM,EAAU,SAAQ;AAC3B;AAEA,MAAMw/L,KAAextM,EAAM;AAAA,EACzB,CAAC,EAAE,aAAAswM,IAAc,IAAI,UAAAvlM,GAAU,GAAG/G,EAAK,GAAIuiJ,MAAe;AACxD,UAAMgqD,IAAgBH,GAAe;AACrC,WAAuB,gBAAApwM,EAAM,cAAc4uC,GAAU,MAAM,EAAE,GAAG5qC,GAAO,KAAKuiJ,EAAU,GAAIgqD,KAAiBD,GAAavlM,CAAQ;AAAA,EAClI;AACF;AACAyiM,GAAa,cAAc;AAE3B,MAAMgD,MAAiB1mD,GAAqBkgD,EAAgB,GACtDC,KAAWjqM,EAAM;AAAA,EACrB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAcwwM,KAAgB,EAAE,GAAGxsM,GAAO,KAAKuiJ,KAAc,CAAC5yI,MAA2B,gBAAA3T,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAGj7B,EAAM,GAAI5I,CAAQ,CAAC;AAErL;AACAk/L,GAAS,cAAc;AAEvB,MAAMxiJ,MAAOznD,EAAM;AAAA,EACjB,CAAC,EAAE,MAAAogB,IAAO,IAAI,UAAArV,GAAU,GAAG/G,EAAK,GAAIuiJ,MACX,gBAAAvmJ,EAAM;AAAA,IAC3B;AAAA,IACA;AAAA,MACE,OAAOogB;AAAA,MACP,QAAQA;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,eAAe;AAAA,MACf,aAAa;AAAA,MACb,GAAGpc;AAAA,MACH,KAAKuiJ;AAAA,IACb;AAAA,IACMx7I;AAAA,EACN;AAEA,GACM+gM,MAAQ9rM,EAAM;AAAA,EAClB,CAAC,EAAE,OAAAskE,IAAQ,GAAG,UAAAv5D,GAAU,GAAG/G,KAASuE,MAAwB,gBAAAvI,EAAM;AAAA,IAChE;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,aAAaskE;AAAA,MACb,aAAa;AAAA,MACb,GAAGtgE;AAAA,MACH,KAAAuE;AAAA,IACN;AAAA,IACIwC;AAAA,EACJ;AACA,GACMghM,MAAY/rM,EAAM;AAAA,EACtB,CAAC,EAAE,OAAAskE,IAAQ,GAAG,aAAA8rH,IAAc,IAAI,UAAArlL,GAAU,GAAG/G,EAAK,GAAIuE,MAAwB,gBAAAvI,EAAM;AAAA,IAClF;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,aAAaskE;AAAA,MACb,iBAAiB;AAAA,MACjB,kBAAkB,MAAM8rH;AAAA,MACxB,aAAa;AAAA,MACb,GAAGpsL;AAAA,MACH,KAAAuE;AAAA,IACN;AAAA,IACIwC;AAAA,EACJ;AACA;AASA,SAAS0lM,GAAav4J,GAAc2jF,IAAO,IAAI;AAC7C,QAAMxvF,IAAQ85G,GAAa;AAC3B,SAAOnmJ,EAAM,QAAQ,MAAMs/I,GAAO,MAAMr4D,GAAO/uC,CAAY,GAAG7L,CAAK,GAAG,CAACA,GAAO,GAAGwvF,CAAI,CAAC;AACxF;AACA,SAAS60E,GAAexkJ,GAAS2vE,IAAO,IAAI;AAC1C,QAAMxvF,IAAQ85G,GAAa;AAC3B,SAAOnmJ,EAAM,QAAQ,MAAMs/I,GAAO,MAAM4B,GAASh1F,CAAO,GAAG7f,CAAK,GAAG,CAACA,GAAO,GAAGwvF,CAAI,CAAC;AACrF;AACA,SAAS80E,IAAazkJ,GAAS2vE,IAAO,IAAI;AACxC,QAAMxvF,IAAQ85G,GAAa;AAC3B,EAAAnmJ,EAAM,UAAU,MAAMs/I,GAAO,MAAM59G,EAAOwqB,CAAO,GAAG7f,CAAK,GAAG,CAACA,GAAO,GAAGwvF,CAAI,CAAC;AAC9E;AACA,SAAS+0E,IAAU1kJ,GAAS;AAC1B,QAAM7f,IAAQ85G,GAAa;AAC3B,SAAOnmJ,EAAM,QAAQ,MAAMs/I,GAAOpzF,GAAS7f,CAAK,GAAG,CAACA,CAAK,CAAC;AAC5D;AAEA,SAASwkK,IAAYzjG,GAAO;AAC1B,QAAM,CAACinD,GAAMy8C,CAAO,IAAI9wM,EAAM,SAAS,CAAA,CAAE;AACzC,SAAAA,EAAM,UAAU,MAAM;AACpB,QAAI,CAACotG,EAAO;AACZ,aAASivF,IAAe;AACtB,MAAIjvF,KAAO0jG,EAAQ,CAAC,GAAG1jG,EAAM,IAAI,CAAC;AAAA,IACpC;AACA,UAAM80D,IAAS,IAAIhgB,GAAiB90C,CAAK,EAAE,IAAI,WAAWivF,CAAY,EAAE,IAAI,cAAcA,CAAY;AACtG,WAAAA,EAAY,GACL,MAAM;AACX,MAAAyU,EAAQ,CAAA,CAAE,GACV5uC,EAAO,MAAK;AAAA,IACd;AAAA,EACF,GAAG,CAAC90D,CAAK,CAAC,GACHinD;AACT;AAEA,SAAS08C,MAAoB;AAC3B,QAAMh2C,IAAQnF,GAAe,GAAIxoD,IAAQ8iG,GAAmB,UAAU,GAAG77C,IAAOw8C,IAAYzjG,CAAK,GAAG4jG,IAAajoD,GAAUgS,EAAM,OAAO,aAAa,GAAGk2C,IAAWloD,GAAUgS,EAAM,OAAO,WAAW;AACrM,SAAAi1C,GAAkB5iG,CAAK,GAChBptG,EAAM,QAAQ,MAAM;AACzB,UAAMi8B,IAAUmxE,IAAQinD,EAAK,OAAO,CAAC5B,MAAQA,EAAI,aAAaw+C,KAAYx+C,EAAI,WAAWu+C,CAAU,EAAE,IAAI,CAACv+C,GAAK3oJ,MAAM;AACnH,UAAIywD,IAAa,MAAM22I;AACvB,aAAO;AAAA,QACL,KAAAz+C;AAAA,QACA,OAAOA,EAAI;AAAA,QACX,OAAO3oJ,EAAE,SAAQ;AAAA,QACjB,eAAe4nK,GAAW,KAAK,IAAI,GAAGjf,EAAI,YAAYu+C,CAAU,CAAC;AAAA,QACjE,cAAc7+B;AAAA,UACZ,KAAK,IAAI8+B,GAAUx+C,EAAI,OAAO,IAAI,KAAK,IAAIu+C,GAAYv+C,EAAI,SAAS;AAAA,QAC9E;AAAA,QACQ,IAAI,WAAW;AACb,iBAAOA,MAAQrlD,EAAM,WAAW,CAAC;AAAA,QACnC;AAAA,QACA,eAAe7kG,GAAK;AAClB,cAAI,CAACA,KAAOkqJ,MAAQrlD,EAAM,WAAW,CAAC,GAAG;AACvC,YAAA8jG,KAAA,QAAAA,KACAA,IAAqB,QACrB3oM,KAAA,QAAAA,EAAK,MAAM,YAAY,cAAc,OACrCgyD,IAAa;AACb;AAAA,UACF;AACA,UAAIA,MAAehyD,MACnBgyD,IAAahyD,GACb2oM,KAAA,QAAAA,KACAA,IAAqBxvK,EAAO,MAAM;AAChC,kBAAM,EAAE,iBAAAu3I,EAAe,IAAKle,EAAM,QAAQtlG,IAAOwjH,EAAe,GAAIwiB,IAAe,KAAK,IAAIuV,GAAYv+C,EAAI,SAAS,GAAG4D,IAAW,KAAK,IAAI46C,GAAUx+C,EAAI,OAAO,IAAIgpC,GAAc0V,IAAW,KAAK,IAAI,GAAG17I,IAAOgmI,CAAY,IAAIplC,IAAW;AAC5O,YAAA9tJ,EAAI,MAAM,YAAY,cAAc4oM,EAAS,QAAQ,CAAC,IAAI,GAAG;AAAA,UAC/D,CAAC;AAAA,QACH;AAAA,QACA,OAAO7iJ,GAAS;AACd,UAAAysG,EAAM,OAAO,KAAKtI,EAAI,YAAYu+C,GAAY1iJ,CAAO;AAAA,QACvD;AAAA,MACR;AAAA,IACI,CAAC,IAAI,CAAA;AACL,kBAAO,eAAeryB,GAAS,iBAAiB;AAAA,MAC9C,MAAM;AACJ,cAAMhuB,IAAQguB,EAAQ,UAAU,CAACrD,MAAWA,EAAO,QAAQ;AAC3D,gBAAQ3qB,KAAS,IAAIA,IAAQ,GAAG,SAAQ;AAAA,MAC1C;AAAA,IACN,CAAK,GACMguB;AAAA,EACT,GAAG,CAACo4H,GAAM28C,GAAYC,CAAQ,CAAC;AACjC;ACpWA,SAASG,GAAkBl8K,GAAI0P,GAAU;AACvC,EAAA5kC,EAAM,UAAU,MAAM;AACpB,QAAI,CAACk1B,EAAI;AACT,IAAA0P,EAAQ;AACR,UAAM/2B,IAAW,IAAI,eAAe27I,GAAuB5kH,CAAQ,CAAC;AACpE,WAAA/2B,EAAS,QAAQqnB,CAAE,GACZ,MAAMrnB,EAAS,WAAU;AAAA,EAClC,GAAG,CAACqnB,GAAI0P,CAAQ,CAAC;AACnB;AACA,SAASysK,IAAoBn8K,GAAI;AAC/B,QAAM,CAAC+8E,GAAUq/F,CAAW,IAAItxM,EAAM,SAAS,EAAK;AACpD,SAAAA,EAAM,UAAU,MAAM;AACpB,QAAI,CAACk1B,EAAI;AACT,UAAMgtI,IAAS,IAAIhgB,GAAiBhtH,CAAE,EAAE,IAAI,mBAAmB,MAAMo8K,EAAY,EAAI,CAAC,EAAE,IAAI,iBAAiB,MAAMA,EAAY,EAAK,CAAC;AACrI,WAAO,MAAMpvC,EAAO,MAAK;AAAA,EAC3B,GAAG,CAAChtI,CAAE,CAAC,GACA+8E;AACT;AACA,SAASs/F,IAAcr8K,GAAI;AACzB,QAAM,CAACs8K,GAAcC,CAAe,IAAIzxM,EAAM,SAAS,EAAK;AAC5D,SAAAA,EAAM,UAAU,MAAM;AACpB,QAAI,CAACk1B,EAAI;AACT,UAAMgtI,IAAS,IAAIhgB,GAAiBhtH,CAAE,EAAE,IAAI,cAAc,MAAMu8K,EAAgB,EAAI,CAAC,EAAE,IAAI,cAAc,MAAMA,EAAgB,EAAK,CAAC;AACrI,WAAO,MAAMvvC,EAAO,MAAK;AAAA,EAC3B,GAAG,CAAChtI,CAAE,CAAC,GACAs8K;AACT;AACA,SAASE,IAAWx8K,GAAI;AACtB,QAAM,CAACy8K,GAAWC,CAAY,IAAI5xM,EAAM,SAAS,EAAK;AACtD,SAAAA,EAAM,UAAU,MAAM;AACpB,QAAI,CAACk1B,EAAI;AACT,UAAMgtI,IAAS,IAAIhgB,GAAiBhtH,CAAE,EAAE,IAAI,WAAW,MAAM08K,EAAa,EAAI,CAAC,EAAE,IAAI,YAAY,MAAMA,EAAa,EAAK,CAAC;AAC1H,WAAO,MAAM1vC,EAAO,MAAK;AAAA,EAC3B,GAAG,CAAChtI,CAAE,CAAC,GACAy8K;AACT;AACA,SAASE,IAAU38K,GAAI;AACrB,QAAMs8K,IAAeD,IAAcr8K,CAAE,GAAGy8K,IAAYD,IAAWx8K,CAAE,GAAG48K,IAAiB9xM,EAAM,OAAO,EAAK;AACvG,SAAI8xM,EAAe,WAAW,CAACN,IAAqB,MACpDM,EAAe,UAAUN,GAClBA,KAAgBG;AACzB;AACA,SAASI,MAA2B;AAClC,QAAM,CAACC,GAAaC,CAAc,IAAIjyM,EAAM,SAAS,MAAM;AAC3D,SAAAA,EAAM,UAAU,MAAM;AACpB,UAAM+6J,IAAQ,OAAO,WAAW,+BAA+B;AAC/D,aAASltH,IAAW;AAClB,MAAAokK,EAAel3C,EAAM,UAAU,UAAU,MAAM;AAAA,IACjD;AACA,WAAAltH,EAAQ,GACDo0G,GAAY8Y,GAAO,UAAUltH,CAAQ;AAAA,EAC9C,GAAG,CAAA,CAAE,GACEmkK;AACT;AAEA,SAASE,GAAc7tM,GAAM;AAC3B,QAAM6xJ,IAAS24C,GAAc;AAC7B,EAAA7uM,EAAM,UAAU,MAAM;AACpB,QAAKk2J;AACL,aAAOx0H,EAAO,MAAM;AAClB,cAAMxM,IAAKghI,EAAO;AAClB,eAAAhhI,KAAA,QAAAA,EAAI,aAAa,eAAe7wB,IACzB,MAAM6wB,KAAA,gBAAAA,EAAI,gBAAgB;AAAA,MACnC,CAAC;AAAA,EACH,GAAG,CAACghI,CAAM,CAAC;AACb;AC7EA,MAAMi8C,MAAoC,gBAAAlrH,GAAO,IAAI,GAC/CmrH,MAA0C,gBAAAnrH,GAAO,IAAI,GCMrDorH,KAAuBryM,EAAM,cAAc,EAAE;AACnDqyM,GAAqB,cAAc;AACnC,SAASC,KAA0B;AACjC,SAAOtyM,EAAM,WAAWqyM,EAAoB;AAC9C;AACA,SAASE,GAAqB3qB,GAAM;AAClC,QAAM,EAAE,cAAA7+G,EAAY,IAAKupI,GAAuB;AAChD,SAAOE,GAAKzpI,GAAc6+G,CAAI;AAChC;AACA,SAAS4qB,GAAKzpI,GAAc6+G,GAAM;AAChC,UAAO7+G,KAAA,gBAAAA,EAAe6+G,OAASA;AACjC;AAEA,SAAS6qB,GAAoBT,GAAa;AACxC,QAAMU,IAAwBX,IAAwB;AACtD,SAAIC,MAAgB,YACX,OACEA,MAAgB,WAClBU,IAEAV;AAEX;AAEA,SAASW,GAAyB;AAAA,EAChC,MAAArwM;AAAA,EACA,cAAAswM;AAAA,EACA,cAAAC;AACF,GAAG;AACD,QAAMC,IAAS9yM,EAAM;AAAA,IACnB,CAAC;AAAA,MACC,UAAA+K;AAAA,MACA,WAAAiC;AAAA,MACA,mBAAA+lM,IAAoB;AAAA,MACpB,oBAAAC,IAAqB;AAAA,MACrB,OAAAC;AAAA,MACA,aAAAjB,IAAc;AAAA,MACd,UAAAlgD,IAAW;AAAA,MACX,eAAAohD,IAAgB;AAAA,MAChB,WAAAC,IAAY;AAAA,MACZ,aAAAC,IAAc;AAAA,MACd,YAAAC,IAAa,EAAE,KAAK,GAAG,KAAK,KAAK,MAAM,GAAE;AAAA,MACzC,YAAAC,IAAa;AAAA,MACb,sBAAAC,IAAuB;AAAA,MACvB,SAAAC,IAAU;AAAA,MACV,gBAAAC;AAAA,MACA,eAAAC,IAAgB,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,KAAI;AAAA,MAC5C,UAAAC,IAAW;AAAA,MACX,eAAAC;AAAA,MACA,kBAAAC,IAAmB;AAAA,MACnB,wBAAAC,IAAyB;AAAA,MACzB,OAAAC;AAAA,MACA,iBAAAC,IAAkBpB;AAAA,MAClB,YAAAqB,IAAa;AAAA,MACb,cAAAlrI;AAAA,MACA,GAAG/kE;AAAA,IACT,GAAOuiJ,MAAe;AAChB,YAAMwU,IAAQnF,GAAe,GAAIs+C,IAAQnrD,GAAUgS,EAAM,OAAO,IAAI,GAAG+yC,IAAW7C,GAAc,SAAS,GAAGkJ,IAAYlJ,GAAc,UAAU,GAAGmJ,IAAcnJ,GAAc,YAAY,GAAGoJ,IAAa3D,GAAe,MACjN5mJ,GAAUkqJ,CAAe,IAAIA,IAAkBA,EAAgBj5C,EAAM,OAAO,KAAK,GACvF,CAACi5C,CAAe,CAAC,GAAGM,IAA2B7D,GAAa,EAAI,GAAG8D,KAAgC9D,GAAa,EAAI,GAAG+D,KAAUL,MAAc7xM,GAAMmyM,KAAgBJ,EAAU,GAAIK,KAAiB5qJ,GAAUkqJ,CAAe,GAAGW,KAAeT,MAAU,UAAU,CAACpG,GAAU11D,KAAY01D,KAAY4G,MAAkBC,IAAcC,KAAmBnC,GAAoBT,CAAW,GAAG6C,KAAWpE,GAAa,IAAI;AAC1Z,aAAA1nD,GAAUsrD,CAAU,GACG,gBAAAr0M,EAAM;AAAA,QAC3B;AAAA,QACA;AAAA,UACE,GAAGgE;AAAA,UACH,WAAW,OAAO1B,CAAI,aAAasyM,KAAmB,IAAIA,EAAgB,KAAK,OAAO5nM,IAAY,IAAIA,CAAS,KAAK;AAAA,UACpH,cAAcwnM,KAAU,KAAK;AAAA,UAC7B,WAAWC,KAAgB,KAAK;AAAA,UAChC,WAAYA,KAAqB,OAAL;AAAA,UAC5B,aAAaA,KAAgB,OAAO;AAAA,UACpC,yBAAyBhB,IAAiB,KAAK;AAAA,UAC/C,KAAKthM,GAAY0iM,GAAS,KAAKtuD,CAAU;AAAA,QACnD;AAAA,QACQnO,MAAao8D,KAA0B,gBAAAx0M,EAAM;AAAA,UAC3CqyM,GAAqB;AAAA,UACrB;AAAA,YACE,OAAO;AAAA,cACL,mBAAAU;AAAA,cACA,oBAAAC;AAAA,cACA,OAAAC;AAAA,cACA,aAAAjB;AAAA,cACA,UAAAlgD;AAAA,cACA,eAAA2iD;AAAA,cACA,eAAAvB;AAAA,cACA,WAAAC;AAAA,cACA,aAAAC;AAAA,cACA,YAAAC;AAAA,cACA,UAAAwB;AAAA,cACA,YAAAvB;AAAA,cACA,sBAAAC;AAAA,cACA,SAAAC;AAAA,cACA,gBAAAC;AAAA,cACA,eAAAG;AAAA,cACA,kBAAAC;AAAA,cACA,wBAAAC;AAAA,cACA,OAAAC;AAAA,cACA,UAAAJ;AAAA,cACA,eAAAD;AAAA,cACA,YAAAO;AAAA,cACA,cAAAlrI;AAAA,cACA,0BAAAurI;AAAA,cACA,+BAAAC;AAAA,YACd;AAAA,UACA;AAAA,UACU1B,EAAa,EAAE,YAAYuB,GAAa,eAAAK,IAAe,cAAAE,GAAY,CAAE;AAAA,UACrE5pM;AAAA,QACV,IAAY;AAAA,MACZ;AAAA,IACI;AAAA,EACJ;AACE,SAAA+nM,EAAO,cAAc,sBACdA;AACT;AAEA,SAASgC,KAA6B;AACpC,SAAO90M,EAAM,WAAWqyM,EAAoB,EAAE;AAChD;AACA,SAAS0C,KAA6B;AACpC,SAAO/0M,EAAM,WAAWqyM,EAAoB,EAAE;AAChD;AACA,SAAS2C,GAAKjB,GAAO1vM,GAAMi0C,GAAc;AACvC,QAAM28J,IAAQlB,KAAA,gBAAAA,EAAQ1vM,IAAO6wM,IAAkBlvD,GAAmB3hJ,CAAI;AACtE,SAAuB,gBAAArE,EAAM,cAAcA,EAAM,UAAU,MAAM+zM,KAAA,gBAAAA,EAAQ,SAASmB,CAAe,KAAKxrJ,GAAYurJ,CAAK,IAAI38J,IAAe28J,GAAOlB,KAAA,gBAAAA,EAAQ,QAAQmB,CAAe,GAAG;AACrL;AAEA,SAASC,KAAmB;AAC1B,QAAM,EAAE,0BAAAb,GAA0B,cAAAvrI,EAAY,IAAKupI,GAAuB;AAC1E,SAD0GvpD,GAAUurD,CAAwB,IAErH,gBAAAt0M,EAAM,cAAcsnM,IAAgB,EAAE,cAAAv+H,EAAY,CAAE,IADpC;AAEzC;AACAosI,GAAiB,cAAc;AAE/B,SAASC,GAAe,EAAE,SAAArlM,GAAS,WAAAk3G,GAAW,UAAAl8G,EAAQ,GAAI;AACxD,QAAM,EAAE,kBAAA8oM,EAAgB,IAAKvB,GAAuB;AACpD,SAAuB,gBAAAtyM,EAAM,cAAcynD,IAAM,EAAE,WAAWosJ,EAAgB,GAAoB,gBAAA7zM,EAAM,cAAc0nD,IAAS,EAAE,SAAS,GAAI,GAAI38C,CAAQ,GAAmB,gBAAA/K,EAAM,cAAc4nD,IAAS,EAAE,WAAW,uBAAuB,WAAAq/D,KAAal3G,CAAO,CAAC;AACrQ;AACAqlM,GAAe,cAAc;AAE7B,SAASC,GAAkB,EAAE,SAAAprB,KAAW;AACtC,QAAM,EAAE,OAAOqrB,MAAUhD,GAAuB,GAAIiD,IAAWhD,GAAqB,MAAM,GAAGiD,IAAYjD,GAAqB,OAAO,GAAGkD,IAAUxK,GAAc,QAAQ,GAAGyK,IAASzK,GAAc,OAAO;AACzM,SAAuB,gBAAAjrM,EAAM,cAAco1M,IAAgB,EAAE,SAASK,IAAUF,IAAWC,GAAW,WAAWvrB,KAA2B,gBAAAjqL,EAAM,cAAcqoM,IAAY,EAAE,WAAW,8BAA8B,cAAckN,EAAQ,GAAIG,IAAyB,gBAAA11M,EAAM,cAAcs1M,EAAM,WAAW,QAAQ,EAAE,WAAW,WAAU,CAAE,IAAIG,IAA0B,gBAAAz1M,EAAM,cAAcs1M,EAAM,WAAW,MAAM,EAAE,WAAW,WAAU,CAAE,IAAoB,gBAAAt1M,EAAM,cAAcs1M,EAAM,WAAW,OAAO,EAAE,WAAW,WAAU,CAAE,CAAC,CAAC;AAC/gB;AACAD,GAAkB,cAAc;AAChC,MAAMM,KAAoB31M,EAAM;AAAA,EAC9B,CAAC,EAAE,SAAAiqL,EAAO,GAAI1jC,MAAe;AAC3B,UAAM,EAAE,OAAO+uD,MAAUhD,GAAuB,GAAIsD,IAAWrD,GAAqB,MAAM,GAAGsD,IAAatD,GAAqB,QAAQ,GAAGuD,IAAS7K,GAAc,OAAO,GAAG/e,IAAU+e,GAAc,QAAQ;AAC3M,WAAuB,gBAAAjrM,EAAM,cAAco1M,IAAgB,EAAE,SAASU,IAASD,IAAaD,GAAU,WAAW3rB,EAAO,GAAoB,gBAAAjqL,EAAM,cAAcioM,IAAY,EAAE,WAAW,8BAA8B,cAAc2N,GAAU,KAAKrvD,EAAU,GAAIuvD,KAAU5pB,KAAW,IAAoB,gBAAAlsL,EAAM,cAAcs1M,EAAM,WAAW,MAAM,EAAE,WAAW,WAAU,CAAE,IAAIppB,IAAU,MAAsB,gBAAAlsL,EAAM,cAAcs1M,EAAM,WAAW,WAAW,EAAE,WAAW,WAAU,CAAE,IAAoB,gBAAAt1M,EAAM,cAAcs1M,EAAM,WAAW,YAAY,EAAE,WAAW,WAAU,CAAE,CAAC,CAAC;AAAA,EAC9jB;AACF;AACAK,GAAkB,cAAc;AAChC,SAASI,GAAqB,EAAE,SAAA9rB,KAAW;AACzC,QAAM,EAAE,OAAOqrB,EAAK,IAAKhD,GAAuB,GAAI0D,IAAezD,GAAqB,UAAU,GAAG0D,IAAS1D,GAAqB,oBAAoB,GAAG2D,IAAU3D,GAAqB,qBAAqB,GAAGlC,IAASpF,GAAc,WAAW,GAAGkL,IAAO9F,KAAUx7C,GAAmBw7C,CAAM;AAChS,SAAuB,gBAAArwM,EAAM,cAAco1M,IAAgB,EAAE,SAASe,IAAOF,IAASC,GAAS,WAAWjsB,EAAO,GAAoB,gBAAAjqL,EAAM,cAAc2nM,IAAe,EAAE,WAAW,iCAAiC,cAAcqO,EAAY,GAAIG,IAAuB,gBAAAn2M,EAAM,cAAcs1M,EAAM,cAAc,IAAI,EAAE,WAAW,WAAU,CAAE,IAAoB,gBAAAt1M,EAAM,cAAcs1M,EAAM,cAAc,KAAK,EAAE,WAAW,WAAU,CAAE,CAAC,CAAC;AAC9a;AACAS,GAAqB,cAAc;AACnC,SAASK,GAAiB,EAAE,SAAAnsB,KAAW;AACrC,QAAM,EAAE,OAAOqrB,MAAUhD,GAAuB,GAAI+D,IAAU9D,GAAqB,KAAK,GAAG+D,IAAY/D,GAAqB,WAAW,GAAGgE,IAAWhE,GAAqB,UAAU,GAAGiE,IAAOvL,GAAc,kBAAkB;AAC9N,SAAuB,gBAAAjrM,EAAM,cAAco1M,IAAgB,EAAE,SAASoB,IAAOD,IAAWD,GAAW,WAAWrsB,EAAO,GAAoB,gBAAAjqL,EAAM,cAAcmoM,IAAW,EAAE,WAAW,6BAA6B,cAAckO,EAAO,GAAIG,IAAuB,gBAAAx2M,EAAM,cAAcs1M,EAAM,UAAU,MAAM,EAAE,WAAW,WAAU,CAAE,IAAoB,gBAAAt1M,EAAM,cAAcs1M,EAAM,UAAU,OAAO,EAAE,WAAW,WAAU,CAAE,CAAC,CAAC;AACja;AACAc,GAAiB,cAAc;AAC/B,SAASK,GAAwB,EAAE,SAAAxsB,KAAW;AAC5C,QAAM,EAAE,OAAOqrB,MAAUhD,GAAuB,GAAIoE,IAAiBnE,GAAqB,YAAY,GAAG+D,IAAY/D,GAAqB,kBAAkB,GAAGgE,IAAWhE,GAAqB,iBAAiB,GAAGoE,IAAc1L,GAAc,YAAY;AAC3P,SAAuB,gBAAAjrM,EAAM,cAAco1M,IAAgB,EAAE,SAASuB,IAAcJ,IAAWD,GAAW,WAAWrsB,EAAO,GAAoB,gBAAAjqL,EAAM,cAAc6nM,IAAkB,EAAE,WAAW,oCAAoC,cAAc6O,EAAc,GAAIC,IAA8B,gBAAA32M,EAAM,cAAcs1M,EAAM,iBAAiB,MAAM,EAAE,WAAW,WAAU,CAAE,IAAoB,gBAAAt1M,EAAM,cAAcs1M,EAAM,iBAAiB,OAAO,EAAE,WAAW,WAAU,CAAE,CAAC,CAAC;AACld;AACAmB,GAAwB,cAAc;AACtC,SAASG,GAAkB;AAAA,EACzB,UAAAC;AAAA,EACA,SAAA5sB;AACF,GAAG;AACD,QAAM,EAAE,OAAOqrB,GAAO,UAAA3B,MAAarB,MAA2BwE,IAAkBvE,GAAqB,cAAc,GAAGwE,IAAmBxE,GAAqB,eAAe,GAAG/gC,KAAWqlC,IAAW,KAAK,KAAKlD,GAAUr2L,IAAQk0J,KAAW,IAAIslC,IAAkBC;AACnQ,SAAuB,gBAAA/2M,EAAM,cAAco1M,IAAgB,EAAE,SAAS93L,GAAO,WAAW2sK,EAAO,GAAoB,gBAAAjqL,EAAM,cAAc2oM,IAAY,EAAE,WAAW,8BAA8B,SAAAn3B,GAAS,cAAcl0J,KAASk0J,KAAW,IAAoB,gBAAAxxK,EAAM,cAAcs1M,EAAM,WAAW,SAAS,EAAE,WAAW,WAAU,CAAE,IAAoB,gBAAAt1M,EAAM,cAAcs1M,EAAM,WAAW,UAAU,EAAE,WAAW,WAAU,CAAE,CAAC,CAAC;AACpa;AACAsB,GAAkB,cAAc;AAChC,SAASI,GAAqB,EAAE,SAAA/sB,KAAW;AACzC,QAAM,EAAE,OAAOqrB,EAAK,IAAKhD,GAAuB,GAAI2E,IAAc1E,GAAqB,SAAS,GAAGzzB,IAASmsB,GAAc,qBAAqB,GAAGiM,IAAY3E,GAAqBvsD,GAAmB84B,CAAM,CAAC,GAAGxhK,IAAQ,GAAG25L,CAAW,IAAIC,CAAS,IAAIC,KAAQr4B,MAAW,eAAew2B,EAAM,cAAc,aAAax2B,MAAW,cAAcw2B,EAAM,cAAc,YAAY,SAASA,EAAM,cAAc;AAChZ,SAAuB,gBAAAt1M,EAAM,cAAco1M,IAAgB,EAAE,SAAS6B,GAAa,WAAWhtB,EAAO,GAAoB,gBAAAjqL,EAAM,cAAcuoM,IAAe,EAAE,WAAW,iCAAiC,cAAcjrL,EAAK,GAAoB,gBAAAtd,EAAM,cAAcm3M,GAAM,EAAE,WAAW,WAAU,CAAE,CAAC,CAAC;AACxS;AACAH,GAAqB,cAAc;AACnC,SAASI,GAAwB,EAAE,SAAAntB,KAAW;AAC5C,QAAM,EAAE,OAAOqrB,EAAK,IAAKhD,GAAuB,GAAI+E,IAAiB9E,GAAqB,aAAa,GAAGzzB,IAASmsB,GAAc,qBAAqB,GAAGiM,IAAY3E,GAAqBvsD,GAAmB84B,CAAM,CAAC,GAAGxhK,IAAQ,GAAG+5L,CAAc,IAAIH,CAAS,IAAIC,KAAQr4B,MAAW,eAAew2B,EAAM,iBAAiB,aAAax2B,MAAW,cAAcw2B,EAAM,iBAAiB,YAAY,SAASA,EAAM,iBAAiB;AACna,SAAuB,gBAAAt1M,EAAM,cAAco1M,IAAgB,EAAE,SAASiC,GAAgB,WAAWptB,EAAO,GAAoB,gBAAAjqL,EAAM,cAAcyoM,IAAkB,EAAE,WAAW,qCAAqC,cAAcnrL,EAAK,GAAoB,gBAAAtd,EAAM,cAAcm3M,GAAM,EAAE,WAAW,WAAU,CAAE,CAAC,CAAC;AAClT;AACAC,GAAwB,cAAc;AACtC,SAASE,KAAoB;AAC3B,QAAMC,IAAQtM,GAAc,MAAM,GAAG3tL,IAAQi1L,GAAqB,cAAc,GAAGiF,IAAWjF,GAAqB,MAAM;AACzH,SAAOgF,IAAwB,gBAAAv3M,EAAM,cAAc+nM,IAAY,EAAE,WAAW,mBAAmB,cAAczqL,EAAK,GAAoB,gBAAAtd,EAAM,cAAc,QAAQ,EAAE,WAAW,0BAA0Bw3M,CAAQ,CAAC,IAAI;AACxN;AACAF,GAAkB,cAAc;AAChC,SAASG,KAAwB;AAC/B,QAAM,EAAE,UAAA3lD,GAAU,OAAOwjD,EAAK,IAAKhD,GAAuB,GAAIzF,IAAO5B,GAAc,QAAQ,GAAG8E,IAAS9E,GAAc,OAAO,GAAGt2G,IAAOk9D,GAAgB;AAAA,IACpJ,OAAOk+C;AAAA,IACP,KAAKlD;AAAA,IACL,UAAA/6C;AAAA,EACJ,CAAG,GAAG4lD,IAAenF,GAAqB,UAAU;AAClD,SAAOrnJ,GAASypC,KAAA,gBAAAA,EAAM,GAAG,IAAoB,gBAAA30F,EAAM,cAAco1M,IAAgB,EAAE,SAASsC,GAAc,WAAW,MAAK,GAAoB,gBAAA13M,EAAM;AAAA,IAClJ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,WAAW;AAAA,MACX,cAAc03M;AAAA,MACd,MAAMrmD,IAAkB18D,EAAK,KAAK,EAAE,UAAUA,EAAK,MAAM;AAAA,MACzD,UAAUA,EAAK;AAAA,MACf,QAAQ;AAAA,IACd;AAAA,IACI2gH,EAAM,iBAAiC,gBAAAt1M,EAAM,cAAcs1M,EAAM,eAAe,SAAS,EAAE,WAAW,WAAU,CAAE,IAAI;AAAA,EAC1H,CAAG,IAAI;AACP;AACAmC,GAAsB,cAAc;AAEpC,SAASE,KAAkB;AACzB,QAAMC,IAAcrF,GAAqB,yBAAyB;AAClE,SAAuB,gBAAAvyM,EAAM,cAAciqM,IAAU,EAAE,WAAW,gBAAgB,aAAA2N,GAAa;AACjG;AACAD,GAAgB,cAAc;AAE9B,SAASE,KAAwB;AAC/B,SAAuB,gBAAA73M,EAAM,cAAc,OAAO,EAAE,WAAW,sBAAqB,CAAE;AACxF;AACA63M,GAAsB,cAAc;AAEpC,SAASC,KAAoB;AAC3B,QAAM,EAAE,UAAAjD,EAAQ,IAAKvC,GAAuB,GAAIyF,IAAYhvD,GAAU8rD,CAAQ;AAC9E,SAAO70M,EAAM,QAAQ,MAAM+3M,KAAA,gBAAAA,EAAW,QAAQ,WAAW,CAACA,CAAS,CAAC;AACtE;AAEA,SAASC,GAAoB,EAAE,SAAA/tB,GAAS,WAAAhjE,GAAW,aAAAgxF,IAAc,GAAE,GAAI;AACrE,QAAM;AAAA,IACJ,eAAArE;AAAA,IACA,SAAAJ;AAAA,IACA,eAAAiB;AAAA,IACA,OAAOa;AAAA,IACP,WAAAnC;AAAA,IACA,eAAAD;AAAA,IACA,aAAAlB;AAAA,EACJ,IAAMM,GAAuB,GAAI4F,IAAe3F,GAAqB,UAAU,GAAGt2K,IAAU80K,IAAiB,GAAIjmJ,IAAW,CAAC7uB,EAAQ,QAAQ,EAAE,YAAAg4K,EAAU,IAAK3B,GAAuB,GAAIzF,IAAO5B,GAAc,YAAY,GAAGkJ,IAAYlJ,GAAc,UAAU,GAAGkN,IAAU,CAAC1D,KAAiBtB,MAAc,YAAYgB,MAAc,UAAU,KAAK,GAAGiE,IAAqBrvD,GAAUopD,GAAiB,GAAGyC,IAAmBnC,GAAoBT,CAAW,GAAG,CAACtnI,GAAQ2tI,CAAS,IAAIr4M,EAAM,SAAS,EAAK,GAAGs4M,IAAWR,GAAiB;AACzgB,MAAIhtJ,EAAU,QAAO;AACrB,WAASytJ,IAAS;AAChB,IAAAC,GAAU,MAAM;AACd,MAAAH,EAAU,EAAI;AAAA,IAChB,CAAC;AAAA,EACH;AACA,WAAS1tI,IAAU;AACjB,IAAA0tI,EAAU,EAAK;AAAA,EACjB;AACA,QAAMzwJ,IAA0B,gBAAA5nD,EAAM;AAAA,IACpC4zF;AAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,WAAAqzB;AAAA,MACA,QAAQkxF;AAAA,IACd;AAAA,IACIztI,IAAyB,gBAAA1qE,EAAM;AAAA,MAC7BguM;AAAAA,MACA;AAAA,QACE,WAAW;AAAA,QACX,OAAO/xK,EAAQ;AAAA,QACf,mBAAmBg4K,IAAa,KAAK;AAAA,MAC7C;AAAA,MACMh4K,EAAQ;AAAA,QACN,CAAC,EAAE,KAAAw2H,GAAK,OAAAn1I,GAAO,OAAApW,GAAO,eAAAuxM,GAAe,cAAAC,GAAc,QAAAhkK,GAAQ,gBAAAikK,QAAqC,gBAAA34M,EAAM;AAAA,UACpG+hE;AAAAA,UACA;AAAA,YACE,WAAW;AAAA,YACX,OAAA76D;AAAA,YACA,KAAKA;AAAA,YACL,UAAUwtC;AAAA,YACV,KAAKikK;AAAA,UACjB;AAAA,UACU1E,IAA6B,gBAAAj0M,EAAM,cAAcitM,IAAQ,EAAE,KAAKgH,GAAY,WAAW,iBAAiB,MAAMxhD,EAAI,UAAS,GAAoB,gBAAAzyJ,EAAM,cAAc4sM,IAAK,IAAI,CAAC,IAAIwL,KAAsBzN,GAAckC,CAAI,IAAoB,gBAAA7sM,EAAM,cAAco4M,GAAoB,EAAE,WAAW,iBAAiB,OAAO3lD,EAAI,YAAYo6C,EAAK,IAAG,CAAE,IAAI;AAAA,UACxU,gBAAA7sM,EAAM,cAAc,OAAO,EAAE,WAAW,4BAA2B,GAAoB,gBAAAA,EAAM,cAAc,QAAQ,EAAE,WAAW,0BAAyB,GAAIsd,CAAK,GAAmB,gBAAAtd,EAAM,cAAc,QAAQ,EAAE,WAAW,+BAA8B,GAAIy4M,CAAa,GAAmB,gBAAAz4M,EAAM,cAAc,QAAQ,EAAE,WAAW,6BAA4B,GAAI04M,CAAY,CAAC;AAAA,QAChZ;AAAA,MACA;AAAA,IACA,IAAQ;AAAA,EACR;AACE,SAAuB,gBAAA14M,EAAM;AAAA,IAC3B2sM;AAAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,WAAWiH;AAAA,MACX,QAAA2E;AAAA,MACA,SAAA5tI;AAAA,IACN;AAAA,IACoB,gBAAA3qE,EAAM,cAAco1M,IAAgB,EAAE,SAAS8C,GAAc,WAAWjuB,KAA2B,gBAAAjqL,EAAM;AAAA,MACvHmgB;AAAA,MACA;AAAA,QACE,WAAW;AAAA,QACX,UAAA2qC;AAAA,QACA,cAAcotJ;AAAA,MACtB;AAAA,MACsB,gBAAAl4M,EAAM,cAAcs1M,EAAM,KAAK,UAAU,EAAE,WAAW,WAAU,CAAE;AAAA,IACxF,CAAK;AAAA,IACD9B,KAAW,CAACiB,IAAgB7sJ,IAA0B,gBAAA5nD,EAAM;AAAA,MAC1Dw1C;AAAA,MACA;AAAA,QACE,WAAW09J,KAAiBoF;AAAA,QAC5B,WAAWL,KAAerD,IAAmB,IAAIA,CAAgB,KAAK;AAAA,QACtE,UAAU;AAAA,QACV,WAAWH,IAAgB,KAAK;AAAA,QAChC,WAAYA,IAAqB,OAAL;AAAA,QAC5B,aAAaA,IAAgB,OAAO;AAAA,MAC5C;AAAA,MACM7sJ;AAAA,IACN;AAAA,EACA;AACA;AACAowJ,GAAoB,cAAc;AAElC,MAAMY,KAAoB;AAAA,EACxB,MAAM;AACR,GACMC,MAAqB;AAAA,EACzB,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,IACtB,yBAAyB;AAAA,IACzB,2BAA2B;AAAA,IAC3B,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,kBAAkB;AAAA,EACtB;AACA,GACMC,MAAmB;AAAA,EACvB,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AACZ,GACMC,KAAsB;AAAA,EAC1B,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AACZ,GACMC,MAA0B;AAAA,EAC9B,MAAM;AAAA,EACN,QAAQ,CAAC,QAAQ,eAAe,UAAU,aAAa,SAAS;AAClE,GACMC,KAAgB;AAAA,EACpB,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,WAAW;AAAA,EACX,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,WAAW;AAAA,EACX,kBAAkB;AACpB,GACMC,KAAe,OAAO,KAAKD,EAAa,EAAE;AAAA,EAC9C,CAACjsI,GAAM1qE,OAAU;AAAA,IACf,GAAG0qE;AAAA,IACH,CAAC1qE,CAAI,GAAG2kF,GAAOgyH,GAAc32M,CAAI,CAAC;AAAA,EACtC;AAAA,EACE,CAAA;AACF;AACA,IAAI,CAAC07I;AACH,aAAW17I,KAAQ,OAAO,KAAK42M,EAAY,GAAG;AAC5C,UAAMhyM,IAAQ,aAAa,QAAQ,cAAc0+I,GAAiBtjJ,CAAI,CAAC,EAAE;AACzE,IAAI4oD,GAAShkD,CAAK,KAAGgyM,GAAa52M,CAAI,EAAE,IAAI4E,CAAK;AAAA,EACnD;AAEF,SAASiyM,MAAc;AACrB,aAAW72M,KAAQ,OAAO,KAAK42M,EAAY,GAAG;AAC5C,UAAM5gK,IAAe2gK,GAAc32M,CAAI;AACvC,IAAA42M,GAAa52M,CAAI,EAAE,IAAIg2C,CAAY;AAAA,EACrC;AACF;AAEA,SAAS8gK,GAASC,GAAK;AACrB,QAAM,EAAE,OAAA99J,MAAU,IAAI,OAAM;AAC5B,SAAAA,EAAM,QAAQ89J,GACP99J,EAAM,MAAM,MAAM,WAAW,EAAE,CAAC,EAAE,QAAQ,MAAM,GAAG;AAC5D;AAEA,IAAI+9J,KAAiB,IAAOC,KAA0B,oBAAI,IAAG;AAC7D,SAASC,MAAoB;AAC3B,MAAIx7D,GAAW;AACf,QAAM,EAAE,QAAAkY,EAAM,IAAKujD,GAAiB;AACpC,EAAAF,GAAQ,IAAIrjD,CAAM,GAClBzW,GAAU,MAAM85D,GAAQ,OAAOrjD,CAAM,CAAC,GACjCojD,OACHh6D,GAAO,MAAM;AACX,eAAWh9I,KAAQ4mJ,GAAOgwD,EAAY,GAAG;AACvC,YAAMQ,IAASR,GAAa52M,CAAI,GAAGg2C,IAAe2gK,GAAc32M,CAAI,GAAGq3M,IAAU,gBAAgB/zD,GAAiBtjJ,CAAI,CAAC,IAAIs3M,IAAa,cAAch0D,GAAiBtjJ,CAAI,CAAC;AAC5K,MAAAo/B,EAAO,MAAM;;AACX,cAAMx6B,IAAQwyM,EAAM,GAAIG,IAAoB3yM,MAAUoxC,GAAcwhK,IAAYD,IAA0D,OAAtCE,IAAe7jD,GAAQ5zJ,GAAM4E,CAAK;AACtI,mBAAW8yM,KAAWT;AACpB,WAAAvrM,IAAAgsM,EAAQ,OAAR,QAAAhsM,EAAY,MAAM,YAAY2rM,GAASG;AAEzC,QAAID,IACF,aAAa,WAAWD,CAAU,IAElC,aAAa,QAAQA,GAAY1yM,CAAK;AAAA,MAE1C,CAAC;AAAA,IACH;AAAA,EACF,GAAG,IAAI,GACPoyM,KAAiB;AAErB;AACA,SAASS,IAAe7jD,GAAQ5zJ,GAAM4E,GAAO;;AAC3C,UAAQ5E,GAAI;AAAA,IACV,KAAK;AACH,YAAM23M,IAAc/yM,MAAU,aAAa,eAAe;AAC1D,cAAA8G,IAAAkoJ,EAAO,OAAP,QAAAloJ,EAAW,MAAM,YAAY,6BAA6BisM,IACnDC,IAAyBhzM,CAAK;AAAA,IACvC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAOizM,IAAejzM,CAAK;AAAA,IAC7B,KAAK;AACH,aAAO,OAAOkyM,GAASlyM,CAAK,CAAC;AAAA,IAC/B,KAAK;AACH,aAAOkzM,IAAyBlzM,CAAK;AAAA,IACvC,KAAK;AACH,aAAO,OAAOkyM,GAASlyM,CAAK,CAAC;AAAA,IAC/B,KAAK;AACH,aAAO,OAAOkyM,GAASlyM,CAAK,CAAC;AAAA,EACnC;AACA;AACA,SAASizM,IAAejzM,GAAO;AAC7B,UAAQ,SAASA,CAAK,IAAI,KAAK,SAAQ;AACzC;AACA,SAASgzM,IAAyBhzM,GAAO;AACvC,UAAQA,GAAK;AAAA,IACX,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACb;AACA;AACA,SAASkzM,IAAyBlzM,GAAO;AACvC,UAAQA,GAAK;AAAA,IACX,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACb;AACA;AAEA,SAASmzM,GAAmB,EAAE,OAAA/8L,GAAO,OAAApW,GAAO,UAAA6D,EAAQ,GAAI;AACtD,QAAM84B,IAAK7jC,EAAM,MAAK;AACtB,SAAKsd,IAGkB,gBAAAtd,EAAM,cAAc,WAAW,EAAE,WAAW,oBAAoB,MAAM,SAAS,mBAAmB6jC,EAAE,GAAoB,gBAAA7jC,EAAM,cAAc,OAAO,EAAE,WAAW,4BAA4C,gBAAAA,EAAM,cAAc,UAAU,EAAE,IAAA6jC,EAAE,GAAIvmB,CAAK,GAAGpW,IAAwB,gBAAAlH,EAAM,cAAc,OAAO,EAAE,WAAW,4BAA4BkH,CAAK,IAAI,IAAI,GAAmB,gBAAAlH,EAAM,cAAc,OAAO,EAAE,WAAW,2BAA2B+K,CAAQ,CAAC,IAFhc,gBAAA/K,EAAM,cAAc,OAAO,EAAE,WAAW,mBAAkB,GAAoB,gBAAAA,EAAM,cAAc,OAAO,EAAE,WAAW,wBAAuB,GAAI+K,CAAQ,CAAC;AAGrL;AACAsvM,GAAmB,cAAc;AACjC,SAASC,GAAkB,EAAE,OAAAh9L,GAAO,MAAAi9L,IAAO,IAAI,MAAApD,GAAM,UAAArsJ,IAAW,MAAS;AACvE,QAAM,EAAE,OAAOwqJ,EAAK,IAAKt1M,EAAM,WAAWqyM,EAAoB;AAC9D,SAAuB,gBAAAryM,EAAM,cAAcmgB,IAAQ,EAAE,WAAW,iBAAiB,UAAA2qC,KAA4B,gBAAA9qD,EAAM,cAAcs1M,EAAM,KAAK,WAAW,EAAE,WAAW,+BAA8B,CAAE,GAAG6B,IAAuB,gBAAAn3M,EAAM,cAAcm3M,GAAM,EAAE,WAAW,8BAA6B,CAAE,IAAI,MAAsB,gBAAAn3M,EAAM,cAAc,QAAQ,EAAE,WAAW,yBAAyBsd,CAAK,GAAmB,gBAAAtd,EAAM,cAAc,QAAQ,EAAE,WAAW,qBAAoB,GAAIu6M,CAAI,GAAmB,gBAAAv6M,EAAM,cAAcs1M,EAAM,KAAK,YAAY,EAAE,WAAW,8BAA6B,CAAE,CAAC;AAC1kB;AACAgF,GAAkB,cAAc;AAChC,SAASE,GAAgB,EAAE,OAAAl9L,GAAO,UAAAvS,KAAY;AAC5C,SAAuB,gBAAA/K,EAAM,cAAc,OAAO,EAAE,WAAW,gBAAe,GAAoB,gBAAAA,EAAM,cAAc,OAAO,EAAE,WAAW,sBAAqB,GAAIsd,CAAK,GAAGvS,CAAQ;AACrL;AACAyvM,GAAgB,cAAc;AAC9B,SAASC,GAAsB,EAAE,OAAAvzM,GAAO,SAAA+0B,GAAS,UAAA4R,EAAQ,GAAI;AAC3D,QAAM,EAAE,OAAOynK,EAAK,IAAKhD,GAAuB;AAChD,SAAuB,gBAAAtyM,EAAM,cAAcguM,IAAQ,EAAE,WAAW,mBAAmB,OAAA9mM,GAAO,UAAA2mC,EAAQ,GAAI5R,EAAQ,IAAI,CAACrD,MAA2B,gBAAA54B,EAAM,cAAc+hE,IAAM,EAAE,WAAW,aAAa,OAAOnpC,EAAO,OAAO,KAAKA,EAAO,MAAK,GAAoB,gBAAA54B,EAAM,cAAcs1M,EAAM,KAAK,YAAY,EAAE,WAAW,WAAU,CAAE,GAAmB,gBAAAt1M,EAAM,cAAc,QAAQ,EAAE,WAAW,mBAAmB,aAAa,QAAO,GAAI44B,EAAO,KAAK,CAAC,CAAC,CAAC;AACxb;AACA6hL,GAAsB,cAAc;AACpC,SAASC,IAAmBr0L,GAAS;AACnC,SAAOrmB,EAAM;AAAA,IACX,MAAMgH,GAAQqf,CAAO,IAAIA,EAAQ,IAAI,CAACvY,OAAW,EAAE,OAAOA,GAAO,OAAOA,EAAM,YAAW,EAAE,EAAG,IAAI,OAAO,KAAKuY,CAAO,EAAE,IAAI,CAAC/I,OAAW,EAAE,OAAAA,GAAO,OAAO+I,EAAQ/I,CAAK,EAAC,EAAG;AAAA,IACxK,CAAC+I,CAAO;AAAA,EACZ;AACA;AAEA,SAASs0L,GAAsB;AAAA,EAC7B,OAAAr9L;AAAA,EACA,OAAApW;AAAA,EACA,QAAA0zM;AAAA,EACA,UAAAC;AAAA,EACA,UAAA9vM;AAAA,EACA,OAAA+vM;AAAA,EACA,OAAAC;AACF,GAAG;AACD,QAAMC,IAAW19L,KAASpW,GAAO0gD,IAA0B,gBAAA5nD,EAAM,cAAcA,EAAM,UAAU,MAAM66M,IAA2B,gBAAA76M,EAAM,cAAc66M,GAAU,EAAE,WAAW,gBAAe,CAAE,IAAI,MAAM9vM,GAAU6vM,IAAyB,gBAAA56M,EAAM,cAAc46M,GAAQ,EAAE,WAAW,cAAa,CAAE,IAAI,IAAI;AACzS,SAAuB,gBAAA56M,EAAM;AAAA,IAC3B;AAAA,IACA;AAAA,MACE,WAAW,qCAAqCg7M,IAAW,WAAW,EAAE;AAAA,MACxE,YAAYF,IAAQ,KAAK;AAAA,MACzB,YAAYC,IAAQ,KAAK;AAAA,IAC/B;AAAA,IACIC,IAA2B,gBAAAh7M,EAAM,cAAcA,EAAM,UAAU,MAAsB,gBAAAA,EAAM,cAAc,OAAO,EAAE,WAAW,2BAA2Bsd,IAAwB,gBAAAtd,EAAM,cAAc,OAAO,MAAMsd,CAAK,IAAI,MAAMpW,IAAwB,gBAAAlH,EAAM,cAAc,OAAO,MAAMkH,CAAK,IAAI,IAAI,GAAmB,gBAAAlH,EAAM,cAAc,OAAO,EAAE,WAAW,uBAAsB,GAAI4nD,CAAO,CAAC,IAAIA;AAAA,EAC3Y;AACA;AACA+yJ,GAAsB,cAAc;AACpC,SAASM,KAAqB;AAC5B,SAAuB,gBAAAj7M,EAAM,cAAcA,EAAM,UAAU,MAAsB,gBAAAA,EAAM,cAAc8rM,IAAO,EAAE,WAAW,mBAAkB,CAAE,GAAmB,gBAAA9rM,EAAM,cAAc+rM,IAAW,EAAE,WAAW,yCAAwC,CAAE,GAAmB,gBAAA/rM,EAAM,cAAcmmE,IAAO,EAAE,WAAW,mBAAkB,CAAE,CAAC;AACxU;AACA80I,GAAmB,cAAc;AACjC,SAASC,KAAqB;AAC5B,SAAuB,gBAAAl7M,EAAM,cAAc0yF,IAAO,EAAE,WAAW,mBAAkB,GAAI,CAACxoF,MAAyB,gBAAAlK,EAAM,cAAc,OAAO,EAAE,WAAW,mBAAmB,KAAK,OAAOkK,CAAI,EAAC,CAAE,CAAC;AAChM;AACAgxM,GAAmB,cAAc;AAEjC,SAASC,KAAkB;AACzB,QAAM79L,IAAQi1L,GAAqB,gBAAgB,GAAG6I,IAAenQ,GAAc,aAAa,GAAGoQ,IAAmB9I,GAAqB,MAAM,GAAG+I,IAAmB/I,GAAqB,MAAM,GAAGgJ,IAAqBhJ,GAAqB,iBAAiB,GAAGiJ,IAAwBjJ,GAAqB,oBAAoB;AACpU,SAAK6I,IACkB,gBAAAp7M,EAAM,cAAc2sM,IAAQ,EAAE,WAAW,yBAAwB,GAAoB,gBAAA3sM,EAAM,cAAcs6M,IAAmB,EAAE,OAAAh9L,GAAO,GAAmB,gBAAAtd,EAAM,cAAc4zF,IAAO,EAAE,WAAW,sCAAqC,GAAoB,gBAAA5zF,EAAM,cAAcq6M,IAAoB,EAAE,OAAOgB,EAAgB,GAAoB,gBAAAr7M,EAAM,cAAcy7M,IAAuB,IAAI,GAAmB,gBAAAz7M,EAAM,cAAc07M,IAAuB,IAAI,CAAC,GAAmB,gBAAA17M,EAAM,cAAcq6M,IAAoB,EAAE,OAAOiB,EAAgB,GAAoB,gBAAAt7M,EAAM,cAAc27M,IAAuB,IAAI,GAAmB,gBAAA37M,EAAM,cAAc47M,IAAuB,IAAI,GAAmB,gBAAA57M,EAAM,cAAc67M,IAA0B,IAAI,CAAC,GAAmB,gBAAA77M,EAAM,cAAcq6M,IAAoB,EAAE,OAAOkB,KAAsC,gBAAAv7M,EAAM,cAAc87M,IAAoB,IAAI,GAAmB,gBAAA97M,EAAM,cAAc+7M,IAA4B,IAAI,CAAC,GAAmB,gBAAA/7M,EAAM,cAAcq6M,IAAoB,EAAE,OAAOmB,EAAqB,GAAoB,gBAAAx7M,EAAM,cAAcg8M,IAAuB,IAAI,GAAmB,gBAAAh8M,EAAM,cAAci8M,IAA+B,IAAI,CAAC,GAAmB,gBAAAj8M,EAAM,cAAcq6M,IAAoB,MAAsB,gBAAAr6M,EAAM,cAAck8M,IAAsB,IAAI,CAAC,CAAC,CAAC,IADnyC;AAE5B;AACAf,GAAgB,cAAc;AAC9B,SAASM,KAAwB;AAC/B,SAAuB,gBAAAz7M,EAAM,cAAcm8M,IAAoB,EAAE,OAAO,UAAU,MAAM,cAAc,QAAQtD,KAAoB;AACpI;AACA4C,GAAsB,cAAc;AACpC,SAASC,KAAwB;AAC/B,QAAM,EAAE,OAAOpG,EAAK,IAAKhD,GAAuB,GAAI15K,IAAS;AAAA,IAC3D,GAAGkgL;AAAA,IACH,QAAQxD,EAAM,KAAK;AAAA,IACnB,UAAUA,EAAM,KAAK;AAAA,EACzB;AACE,SAAuB,gBAAAt1M,EAAM,cAAcm8M,IAAoB,EAAE,OAAO,QAAQ,MAAM,YAAY,QAAAvjL,GAAQ;AAC5G;AACA8iL,GAAsB,cAAc;AACpC,SAASC,KAAwB;AAC/B,SAAuB,gBAAA37M,EAAM,cAAcm8M,IAAoB,EAAE,OAAO,SAAS,MAAM,aAAa,QAAQvD,IAAmB;AACjI;AACA+C,GAAsB,cAAc;AACpC,SAASE,KAA2B;AAClC,QAAM,EAAE,OAAOvG,EAAK,IAAKhD,GAAuB,GAAI15K,IAAS;AAAA,IAC3D,GAAGmgL;AAAA,IACH,QAAQzD,EAAM,KAAK;AAAA,IACnB,UAAUA,EAAM,KAAK;AAAA,EACzB;AACE,SAAuB,gBAAAt1M,EAAM,cAAcm8M,IAAoB,EAAE,OAAO,WAAW,MAAM,eAAe,QAAAvjL,GAAQ;AAClH;AACAijL,GAAyB,cAAc;AACvC,SAASD,KAAwB;AAC/B,SAAuB,gBAAA57M,EAAM,cAAcm8M,IAAoB,EAAE,OAAO,UAAU,MAAM,cAAc,QAAQnD,KAAyB;AACzI;AACA4C,GAAsB,cAAc;AACpC,SAASE,KAAqB;AAC5B,SAAuB,gBAAA97M,EAAM,cAAcm8M,IAAoB,EAAE,OAAO,SAAS,MAAM,UAAU,QAAQvD,IAAmB;AAC9H;AACAkD,GAAmB,cAAc;AACjC,SAASC,KAA6B;AACpC,QAAM,EAAE,OAAOzG,EAAK,IAAKhD,GAAuB,GAAI15K,IAAS;AAAA,IAC3D,GAAGmgL;AAAA,IACH,QAAQzD,EAAM,KAAK;AAAA,IACnB,UAAUA,EAAM,KAAK;AAAA,EACzB;AACE,SAAuB,gBAAAt1M,EAAM,cAAcm8M,IAAoB,EAAE,OAAO,WAAW,MAAM,iBAAiB,QAAAvjL,GAAQ;AACpH;AACAmjL,GAA2B,cAAc;AACzC,SAASC,KAAwB;AAC/B,SAAuB,gBAAAh8M,EAAM,cAAcm8M,IAAoB,EAAE,OAAO,SAAS,MAAM,aAAa,QAAQvD,IAAmB;AACjI;AACAoD,GAAsB,cAAc;AACpC,SAASC,KAAgC;AACvC,QAAM,EAAE,OAAO3G,EAAK,IAAKhD,GAAuB,GAAI15K,IAAS;AAAA,IAC3D,GAAGmgL;AAAA,IACH,QAAQzD,EAAM,KAAK;AAAA,IACnB,UAAUA,EAAM,KAAK;AAAA,EACzB;AACE,SAAuB,gBAAAt1M,EAAM,cAAcm8M,IAAoB,EAAE,OAAO,WAAW,MAAM,oBAAoB,QAAAvjL,GAAQ;AACvH;AACAqjL,GAA8B,cAAc;AAC5C,SAASE,GAAmB,EAAE,OAAA7+L,GAAO,QAAAsb,GAAQ,MAAAt2B,EAAI,GAAI;AACnD,QAAM4zJ,IAAS24C,GAAc,GAAIuN,IAAgBlD,GAAa52M,CAAI,GAAGo3M,IAAS3wD,GAAUqzD,CAAa,GAAGC,IAAkB9J,GAAqBj1L,CAAK,GAC9IsrD,IAAS5oE,EAAM,YAAY,MAAM;AACrC,IAAAk2J,KAAA,QAAAA,EAAQ,cAAc,IAAI,MAAM,iBAAiB;AAAA,EACnD,GAAG,CAACA,CAAM,CAAC,GACLroH,IAAW7tC,EAAM;AAAA,IACrB,CAACu4C,MAAa;AACZ,MAAA6jK,EAAc,IAAI7jK,CAAQ,GAC1BqwB,EAAM;AAAA,IACR;AAAA,IACA,CAACwzI,GAAexzI,CAAM;AAAA,EAC1B;AACE,MAAIhwC,EAAO,SAAS,SAAS;AAC3B,QAAI0jL,IAAiB,SAAS/wK,GAAO;AACnC,MAAAsC,EAAStC,EAAM,OAAO,KAAK;AAAA,IAC7B;AACA,WAAuB,gBAAAvrC,EAAM,cAAcw6M,IAAiB,EAAE,OAAO6B,EAAe,GAAoB,gBAAAr8M,EAAM,cAAc,SAAS,EAAE,WAAW,oBAAoB,MAAM,SAAS,OAAO05M,GAAQ,UAAU4C,EAAc,CAAE,CAAC;AAAA,EACjO;AACA,MAAI1jL,EAAO,SAAS,UAAU;AAC5B,QAAI2jL,IAAuB,SAASr1M,GAAO;AACzC,MAAA2mC,EAAS3mC,IAAQ,GAAG;AAAA,IACtB;AACA,UAAM,EAAE,KAAAo1B,GAAK,KAAAC,GAAK,MAAAryB,GAAM,QAAAsyM,GAAQ,UAAAC,EAAQ,IAAK7jL;AAC7C,WAAuB,gBAAA54B,EAAM;AAAA,MAC3B26M;AAAA,MACA;AAAA,QACE,OAAO0B;AAAA,QACP,OAAO3C;AAAA,QACP,QAAQ8C;AAAA,QACR,UAAUC;AAAA,QACV,OAAO/C,MAAWp9K,IAAM;AAAA,QACxB,OAAOo9K,MAAWn9K,IAAM;AAAA,MAChC;AAAA,MACsB,gBAAAv8B,EAAM;AAAA,QACpBwsM;AAAAA,QACA;AAAA,UACE,WAAW;AAAA,UACX,KAAAlwK;AAAA,UACA,KAAAC;AAAA,UACA,MAAAryB;AAAA,UACA,SAASA;AAAA,UACT,OAAO,SAASwvM,CAAM;AAAA,UACtB,cAAc2C;AAAA,UACd,eAAeE;AAAA,UACf,mBAAmBA;AAAA,QAC7B;AAAA,QACwB,gBAAAv8M,EAAM,cAAci7M,IAAoB,IAAI;AAAA,QAC5C,gBAAAj7M,EAAM,cAAck7M,IAAoB,IAAI;AAAA,MACpE;AAAA,IACA;AAAA,EACE;AACA,SAAItiL,EAAO,SAAS,UACK,gBAAA54B,EAAM;AAAA,IAC3B08M;AAAA,IACA;AAAA,MACE,IAAI92D,GAAiBtjJ,CAAI;AAAA,MACzB,OAAO+5M;AAAA,MACP,OAAO3C;AAAA,MACP,QAAQ9gL,EAAO;AAAA,MACf,UAAAiV;AAAA,IACR;AAAA,EACA,IAES;AACT;AACAsuK,GAAmB,cAAc;AACjC,SAASO,GAAsB,EAAE,IAAA74K,GAAI,OAAAvmB,GAAO,OAAApW,GAAO,QAAAX,GAAQ,UAAAsnC,KAAY;AACrE,QAAM8uK,IAAejC,IAAmBn0M,CAAM,GAAG,EAAE,cAAAwiE,MAAiBupI,MAA2BiI,IAAOv6M,EAAM,QAAQ,MAAM;;AACxH,UAAM2uK,MAAS3gK,IAAA2uM,EAAa,KAAK,CAACla,MAAUA,EAAM,UAAUv7L,CAAK,MAAlD,gBAAA8G,EAAqD,UAAS;AAC7E,WAAOwkM,GAAKzpI,GAAc4lG,CAAM;AAAA,EAClC,GAAG,CAACznK,GAAOy1M,CAAY,CAAC;AACxB,SAAuB,gBAAA38M,EAAM,cAAc2sM,IAAQ,EAAE,WAAW,OAAO9oK,CAAE,iBAAgB,GAAoB,gBAAA7jC,EAAM,cAAcs6M,IAAmB,EAAE,OAAAh9L,GAAO,MAAAi9L,EAAI,CAAE,GAAmB,gBAAAv6M,EAAM,cAAc4zF,IAAO,EAAE,WAAW,iBAAgB,GAAoB,gBAAA5zF,EAAM,cAAcy6M,IAAuB,EAAE,OAAAvzM,GAAO,SAASy1M,GAAc,UAAA9uK,EAAQ,CAAE,CAAC,CAAC;AAC3V;AACA6uK,GAAsB,cAAc;AACpC,SAASR,KAAuB;AAC9B,QAAMU,IAAYrK,GAAqB,OAAO;AAC9C,SAAuB,gBAAAvyM,EAAM,cAAc,UAAU,EAAE,WAAW,iBAAiB,MAAM,YAAY,SAASm5M,OAA+B,gBAAAn5M,EAAM,cAAc,QAAQ,EAAE,WAAW,sBAAqB,GAAI48M,CAAS,CAAC;AAC3N;AACAV,GAAqB,cAAc;AAEnC,SAASW,GAAoB;AAAA,EAC3B,OAAAv/L;AAAA,EACA,SAAAkoD;AAAA,EACA,YAAAo0I;AAAA,EACA,gBAAA30I,IAAiB;AAAA,EACjB,UAAAp3B;AACF,GAAG;AACD,QAAM,CAACivK,GAAWC,CAAY,IAAI/8M,EAAM,SAASilE,CAAc,GAAG,CAACgtC,GAAUq/F,CAAW,IAAItxM,EAAM,SAAS,EAAK;AAChH,EAAAA,EAAM,UAAU,MAAM;AACpB,UAAMg9M,IAAapD,IAAa,aAAa,QAAQA,CAAU,IAAI,MAAMqD,IAAW,CAAC,EAAED,KAAc/3I;AACrG,IAAA83I,EAAaE,CAAQ,GACrBpvK,KAAA,QAAAA,EAAWovK;AAAA,EACb,GAAG,CAAA,CAAE,GACLj9M,EAAM,UAAU,MAAM;AACpB,IAAI8pD,GAAU0b,CAAO,KAAGu3I,EAAav3I,CAAO;AAAA,EAC9C,GAAG,CAACA,CAAO,CAAC;AACZ,WAAS4zF,EAAQ7tH,GAAO;AACtB,QAAIA,KAAS,YAAYA,MAASA,KAAA,gBAAAA,EAAO,YAAW,EAAG;AACvD,UAAM2xK,IAAe,CAACJ;AACtB,IAAAC,EAAaG,CAAY,GACrBtD,KAAY,aAAa,QAAQA,GAAYsD,IAAe,MAAM,EAAE,GACxErvK,KAAA,QAAAA,EAAWqvK,GAAc3xK,KAAA,gBAAAA,EAAO,cAChC+lK,EAAY,EAAK;AAAA,EACnB;AACA,WAAS6L,EAAS5xK,GAAO;AACvB,IAAIA,EAAM,WAAW,KACrB+lK,EAAY,EAAI;AAAA,EAClB;AACA,WAASpqI,EAAU37B,GAAO;AACxB,IAAI03G,GAAgB13G,EAAM,WAAW,KAAG6tH,EAAO;AAAA,EACjD;AACA,SAAuB,gBAAAp5J,EAAM;AAAA,IAC3B;AAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,MACV,cAAcsd;AAAA,MACd,gBAAgBw/L,IAAY,SAAS;AAAA,MACrC,eAAe7qG,IAAW,KAAK;AAAA,MAC/B,aAAamnD;AAAA,MACb,eAAe+jD;AAAA,MACf,WAAAj2I;AAAA,IACN;AAAA,EACA;AACA;AACA21I,GAAoB,cAAc;AAElC,SAASO,GAAyB,EAAE,OAAArJ,KAAS;AAC3C,QAAMz2L,IAAQi1L,GAAqB,eAAe,GAAG,EAAE,OAAO+C,EAAK,IAAKhD,GAAuB;AAC/F,SAAuB,gBAAAtyM,EAAM,cAAc2sM,IAAQ,EAAE,WAAW,qCAAqD,gBAAA3sM,EAAM,cAAcs6M,IAAmB,EAAE,OAAAh9L,GAAO,MAAMg4L,EAAM,KAAK,cAAa,CAAE,GAAmB,gBAAAt1M,EAAM,cAAc4zF,IAAO,EAAE,WAAW,iBAAgB,GAAIohH,GAAKjB,GAAO,+BAA+B,IAAI,GAAmB,gBAAA/zM,EAAM,cAAcq6M,IAAoB,MAAsB,gBAAAr6M,EAAM,cAAcq9M,IAAkC,IAAI,GAAmB,gBAAAr9M,EAAM,cAAcs9M,IAAuC,IAAI,CAAC,GAAmB,gBAAAt9M,EAAM,cAAcq6M,IAAoB,MAAsB,gBAAAr6M,EAAM,cAAcm7M,IAAiB,IAAI,CAAC,GAAGnG,GAAKjB,GAAO,6BAA6B,IAAI,CAAC,CAAC;AAChtB;AACAqJ,GAAyB,cAAc;AACvC,SAASC,KAAmC;AAC1C,QAAM,EAAE,0BAAA/I,EAAwB,IAAKhC,GAAuB,GAAIh1L,IAAQi1L,GAAqB,eAAe;AAC5G,WAAS1kK,EAAS23B,GAAS;AACzB,IAAA8uI,EAAyB,IAAI9uI,CAAO;AAAA,EACtC;AACA,SAAuB,gBAAAxlE,EAAM,cAAcw6M,IAAiB,EAAE,OAAAl9L,EAAK,GAAoB,gBAAAtd,EAAM;AAAA,IAC3F68M;AAAA,IACA;AAAA,MACE,OAAAv/L;AAAA,MACA,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,UAAAuwB;AAAA,IACN;AAAA,EACA,CAAG;AACH;AACAwvK,GAAiC,cAAc;AAC/C,SAASC,KAAwC;AAC/C,QAAMnJ,IAAYlJ,GAAc,UAAU,GAAG,EAAE,+BAAAsJ,GAA+B,sBAAAhB,EAAoB,IAAKjB,GAAuB,GAAIh1L,IAAQi1L,GAAqB,qBAAqB;AACpL,MAAI4B,MAAc,WAAWZ,EAAsB,QAAO;AAC1D,WAAS1lK,EAAS23B,GAAS;AACzB,IAAA+uI,EAA8B,IAAI/uI,CAAO;AAAA,EAC3C;AACA,SAAuB,gBAAAxlE,EAAM,cAAcw6M,IAAiB,EAAE,OAAAl9L,EAAK,GAAoB,gBAAAtd,EAAM;AAAA,IAC3F68M;AAAA,IACA;AAAA,MACE,OAAAv/L;AAAA,MACA,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,UAAAuwB;AAAA,IACN;AAAA,EACA,CAAG;AACH;AACAyvK,GAAsC,cAAc;AAEpD,SAASC,GAAiB,EAAE,OAAAxJ,KAAS;AACnC,QAAMz2L,IAAQi1L,GAAqB,OAAO,GAAGiL,IAAmBvS,GAAc,iBAAiB,GAAG8D,IAAe9D,GAAc,aAAa,GAAG,EAAE,aAAAmI,GAAa,OAAOkC,EAAK,IAAKhD,GAAuB,GAAImL,IAAgBD,KAAoB,CAACpK;AAC/O,SADwQ,CAACqK,KAAiB1O,EAAa,UAAU,IAC3R,OACC,gBAAA/uM,EAAM,cAAc2sM,IAAQ,EAAE,WAAW,6BAA6C,gBAAA3sM,EAAM,cAAcs6M,IAAmB,EAAE,OAAAh9L,GAAO,MAAMg4L,EAAM,KAAK,MAAK,CAAE,GAAmB,gBAAAt1M,EAAM,cAAc4zF,IAAO,EAAE,WAAW,iBAAgB,GAAIohH,GAAKjB,GAAO,uBAAuB,IAAI,GAAmB,gBAAA/zM,EAAM,cAAc09M,IAAwB,IAAI,GAAGD,IAAgC,gBAAAz9M,EAAM,cAAc29M,IAA8B,IAAI,IAAI,MAAM3I,GAAKjB,GAAO,qBAAqB,IAAI,CAAC,CAAC;AAC1f;AACAwJ,GAAiB,cAAc;AAC/B,SAASI,KAA+B;AACtC,QAAMC,IAAa3S,GAAc,WAAW,GAAG3tL,IAAQi1L,GAAqB,OAAO,GAAGrrM,IAAQ,KAAK,QAAQ02M,KAAc,KAAK,KAAK,GAAG,IAAI,KAAKJ,IAAmBvS,GAAc,iBAAiB,GAAG,EAAE,aAAAmI,GAAa,OAAOkC,EAAK,IAAKhD,GAAuB,GAAIuL,IAAY,CAACL,KAAoBpK,GAAa92K,IAAMwhL,GAAU,GAAIvhL,IAAMwhL,GAAU;AACjV,SAAIF,IAAkB,OACC,gBAAA79M,EAAM,cAAcq6M,IAAoB,EAAE,OAAA/8L,GAAO,OAAApW,EAAK,GAAoB,gBAAAlH,EAAM;AAAA,IACrG26M;AAAA,IACA;AAAA,MACE,QAAQrF,EAAM,KAAK;AAAA,MACnB,UAAUA,EAAM,KAAK;AAAA,MACrB,SAASsI,KAAc,KAAK,KAAK,OAAOthL;AAAA,MACxC,SAASshL,KAAc,KAAK,KAAK,QAAQrhL;AAAA,IAC/C;AAAA,IACoB,gBAAAv8B,EAAM,cAAcg+M,IAAwB,IAAI;AAAA,EACpE,CAAG;AACH;AACAL,GAA6B,cAAc;AAC3C,SAASG,KAAa;AACpB,QAAM,EAAE,YAAAzK,EAAU,IAAKf,GAAuB;AAC9C,UADwDtrM,GAAQqsM,CAAU,IAAIA,EAAW,CAAC,IAAIA,KAAA,gBAAAA,EAAY,QAC5F;AAChB;AACA,SAAS0K,KAAa;AACpB,QAAM,EAAE,YAAA1K,EAAU,IAAKf,GAAuB;AAC9C,UADwDtrM,GAAQqsM,CAAU,IAAIA,EAAWA,EAAW,SAAS,CAAC,IAAIA,KAAA,gBAAAA,EAAY,QAChH;AAChB;AACA,SAAS4K,MAAc;AACrB,QAAM,EAAE,YAAA5K,EAAU,IAAKf,GAAuB;AAC9C,UADyDtrM,GAAQqsM,CAAU,IAAIA,EAAW,CAAC,IAAIA,EAAW,CAAC,IAAIA,KAAA,gBAAAA,EAAY,SAC5G;AACjB;AACA,SAAS2K,KAAyB;AAChC,QAAM1gM,IAAQi1L,GAAqB,aAAa,GAAGj2K,IAAMwhL,GAAU,GAAIvhL,IAAMwhL,MAAc7zM,IAAO+zM,IAAW;AAC7G,SAAuB,gBAAAj+M,EAAM;AAAA,IAC3B6rM;AAAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,cAAcvuL;AAAA,MACd,KAAAgf;AAAA,MACA,KAAAC;AAAA,MACA,MAAAryB;AAAA,MACA,SAASA;AAAA,IACf;AAAA,IACoB,gBAAAlK,EAAM,cAAci7M,IAAoB,IAAI;AAAA,IAC5C,gBAAAj7M,EAAM,cAAck7M,IAAoB,IAAI;AAAA,EAChE;AACA;AACA8C,GAAuB,cAAc;AACrC,SAASN,KAAyB;AAChC,QAAM,EAAE,OAAOpI,EAAK,IAAKhD,GAAuB,GAAIh1L,IAAQi1L,GAAqB,OAAO,GAAGjC,IAAciC,GAAqB,SAAS,GAAGlC,IAASpF,GAAc,YAAY,GAAGhvK,IAAU6yK,IAAe;AACzM,SAAI7yK,EAAQ,WAAiB,OACN,gBAAAj8B,EAAM,cAAc2sM,IAAQ,EAAE,WAAW,gCAA+B,GAAoB,gBAAA3sM,EAAM;AAAA,IACvHs6M;AAAA,IACA;AAAA,MACE,OAAAh9L;AAAA,MACA,OAAM+yL,KAAA,gBAAAA,EAAQ,UAASC;AAAA,MACvB,UAAUr0K,EAAQ;AAAA,MAClB,MAAMq5K,EAAM,KAAK;AAAA,IACvB;AAAA,EACA,GAAqB,gBAAAt1M,EAAM,cAAc4zF,IAAO,EAAE,WAAW,iBAAgB,GAAoB,gBAAA5zF,EAAM;AAAA,IACnGguM;AAAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,OAAO/xK,EAAQ;AAAA,IACrB;AAAA,IACIA,EAAQ,IAAI,CAAC,EAAE,OAAO0yI,GAAQ,OAAAznK,GAAO,QAAAwtC,QAA6B,gBAAA10C,EAAM;AAAA,MACtE+hE;AAAAA,MACA;AAAA,QACE,WAAW;AAAA,QACX,OAAA76D;AAAA,QACA,UAAUwtC;AAAA,QACV,KAAKxtC;AAAA,MACb;AAAA,MACsB,gBAAAlH,EAAM,cAAcs1M,EAAM,KAAK,YAAY,EAAE,WAAW,YAAY;AAAA,MACpE,gBAAAt1M,EAAM,cAAc,QAAQ,EAAE,WAAW,kBAAiB,GAAI2uK,CAAM;AAAA,IAC1F,CAAK;AAAA,EACL,CAAG,CAAC;AACJ;AACA+uC,GAAuB,cAAc;AAErC,SAASQ,GAAmB,EAAE,OAAAnK,KAAS;;AACrC,QAAM,EAAE,OAAOuB,EAAK,IAAKhD,GAAuB,GAAIh1L,IAAQi1L,GAAqB,UAAU,GAAG2D,IAAU3D,GAAqB,KAAK,GAAGt2K,IAAUgzK,IAAkB,EAAE,KAAKiH,EAAO,CAAE,GAAGqE,MAAOvsM,IAAAiuB,EAAQ,kBAAR,gBAAAjuB,EAAuB,UAASkoM;AAC3N,SAAIj6K,EAAQ,WAAiB,OACN,gBAAAj8B,EAAM,cAAc2sM,IAAQ,EAAE,WAAW,6BAA4B,GAAoB,gBAAA3sM,EAAM;AAAA,IACpHs6M;AAAA,IACA;AAAA,MACE,OAAAh9L;AAAA,MACA,MAAAi9L;AAAA,MACA,UAAUt+K,EAAQ;AAAA,MAClB,MAAMq5K,EAAM,KAAK;AAAA,IACvB;AAAA,EACA,GAAqB,gBAAAt1M,EAAM,cAAc4zF,IAAO,EAAE,WAAW,iBAAgB,GAAIohH,GAAKjB,GAAO,0BAA0B,IAAI,GAAmB,gBAAA/zM,EAAM;AAAA,IAChJguM;AAAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,OAAO/xK,EAAQ;AAAA,IACrB;AAAA,IACIA,EAAQ,IAAI,CAAC,EAAE,OAAO0yI,GAAQ,OAAAznK,GAAO,QAAAwtC,QAA6B,gBAAA10C,EAAM;AAAA,MACtE+hE;AAAAA,MACA;AAAA,QACE,WAAW;AAAA,QACX,OAAA76D;AAAA,QACA,UAAUwtC;AAAA,QACV,KAAKxtC;AAAA,MACb;AAAA,MACsB,gBAAAlH,EAAM,cAAcs1M,EAAM,KAAK,YAAY,EAAE,WAAW,YAAY;AAAA,MACpE,gBAAAt1M,EAAM,cAAc,QAAQ,EAAE,WAAW,kBAAiB,GAAI2uK,CAAM;AAAA,IAC1F,CAAK;AAAA,EACL,GAAKqmC,GAAKjB,GAAO,wBAAwB,IAAI,CAAC,CAAC;AAC/C;AACAmK,GAAmB,cAAc;AAEjC,SAASC,GAAoB,EAAE,OAAApK,KAAS;AACtC,QAAMz2L,IAAQi1L,GAAqB,UAAU,GAAG,EAAE,OAAO+C,EAAK,IAAKhD,GAAuB;AAC1F,SAAuB,gBAAAtyM,EAAM,cAAc2sM,IAAQ,EAAE,WAAW,gCAAgD,gBAAA3sM,EAAM,cAAcs6M,IAAmB,EAAE,OAAAh9L,GAAO,MAAMg4L,EAAM,KAAK,SAAQ,CAAE,GAAmB,gBAAAt1M,EAAM,cAAc4zF,IAAO,EAAE,WAAW,iBAAgB,GAAIohH,GAAKjB,GAAO,0BAA0B,IAAI,GAAmB,gBAAA/zM,EAAM,cAAcq6M,IAAoB,MAAMrF,GAAKjB,GAAO,oBAAoC,gBAAA/zM,EAAM,cAAco+M,IAAyB,IAAI,CAAC,CAAC,GAAmB,gBAAAp+M,EAAM,cAAcq+M,KAAyB,IAAI,GAAmB,gBAAAr+M,EAAM,cAAcs+M,IAA2B,IAAI,GAAGtJ,GAAKjB,GAAO,wBAAwB,IAAI,CAAC,CAAC;AACjpB;AACAoK,GAAoB,cAAc;AAClC,SAASC,KAA0B;AACjC,QAAM,EAAE,QAAAzyB,EAAM,IAAK/1B,GAAe,GAAIt4I,IAAQi1L,GAAqB,MAAM;AACzE,WAAS1kK,EAAS23B,GAASlX,GAAS;AAClC,IAAAq9H,EAAO,sBAAsBnmH,GAASlX,CAAO;AAAA,EAC/C;AACA,SAAuB,gBAAAtuD,EAAM,cAAcw6M,IAAiB,EAAE,OAAAl9L,EAAK,GAAoB,gBAAAtd,EAAM,cAAc68M,IAAqB,EAAE,OAAAv/L,GAAO,YAAY,yBAAyB,UAAAuwB,EAAQ,CAAE,CAAC;AAC3L;AACAuwK,GAAwB,cAAc;AACtC,SAASG,KAAiC;AACxC,QAAM,EAAE,QAAA5yB,GAAQ,WAAAjuB,EAAS,IAAK9H,GAAe,GAAI4oD,IAAevT,GAAc,aAAa,GAAG3tL,IAAQi1L,GAAqB,MAAM;AACjI,WAAS1kK,EAAS23B,GAASlX,GAAS;AAClC,IAAIkX,IACFmmH,EAAO,mBAAmBr9H,CAAO,IAEjCq9H,EAAO,cAAcjuB,EAAU,eAAepvG,CAAO;AAAA,EAEzD;AACA,SAAuB,gBAAAtuD,EAAM,cAAcw6M,IAAiB,EAAE,OAAAl9L,EAAK,GAAoB,gBAAAtd,EAAM;AAAA,IAC3F68M;AAAA,IACA;AAAA,MACE,OAAAv/L;AAAA,MACA,SAASkhM;AAAA,MACT,UAAA3wK;AAAA,MACA,gBAAgB2wK;AAAA,IACtB;AAAA,EACA,CAAG;AACH;AACAD,GAA+B,cAAc;AAC7C,SAASD,KAA4B;AACnC,QAAM,EAAE,oBAAAtL,GAAoB,OAAOsC,EAAK,IAAKhD,GAAuB,GAAImM,IAAiBxT,GAAc,eAAe,GAAGnT,IAAamT,GAAc,WAAW,GAAGyT,IAAWzT,GAAc,SAAS,GAAG3tL,IAAQi1L,GAAqB,SAAS,GAAGoM,IAAWpM,GAAqB,MAAM,GAAGqM,IAAkB5+M,EAAM,QAAQ,MAAMy9J,GAAmBq6B,CAAU,GAAG,CAACA,CAAU,CAAC;AAC3W,MAAI,CAAC2mB,KAAkB3mB,EAAW,UAAU,EAAG,QAAO;AACtD,QAAMvzH,IAASm6I,KAAA,gBAAAA,EAAU,QAAQhwC,IAAWskC,IAAyC,OAApB0L,KAAA,gBAAAA,EAAU,SAAgB7mB,IAAcnpB,KAAWA,IAAU,IAAI,IAAIA,IAAU,KAAK,QAAQ,CAAC,CAAC,UAAU,MAAMxnK,IAAQq9D,IAAS,GAAGA,CAAM,IAAIszH,IAAc,KAAKA,CAAW,MAAM,EAAE,KAAK8mB,GAAU7D,IAAQ8D,EAAgB,CAAC,MAAMF,GAAU3D,IAAQ6D,EAAgB,GAAG,EAAE,MAAMF;AAC9U,SAAuB,gBAAA1+M,EAAM,cAAcq6M,IAAoB,EAAE,OAAA/8L,GAAO,OAAApW,EAAK,GAAoB,gBAAAlH,EAAM;AAAA,IACrG26M;AAAA,IACA;AAAA,MACE,QAAQrF,EAAM,KAAK;AAAA,MACnB,UAAUA,EAAM,KAAK;AAAA,MACrB,OAAAwF;AAAA,MACA,OAAAC;AAAA,IACN;AAAA,IACoB,gBAAA/6M,EAAM,cAAc6+M,IAAsB,IAAI;AAAA,EAClE,GAAqB,gBAAA7+M,EAAM,cAAcu+M,IAAgC,IAAI,CAAC;AAC9E;AACAD,GAA0B,cAAc;AACxC,SAASO,KAAuB;AAC9B,QAAMvhM,IAAQi1L,GAAqB,SAAS;AAC5C,SAAuB,gBAAAvyM,EAAM,cAAc8+M,IAAQ,EAAE,WAAW,iCAAiC,cAAcxhM,EAAK,GAAoB,gBAAAtd,EAAM,cAAci7M,IAAoB,IAAI,GAAmB,gBAAAj7M,EAAM,cAAck7M,IAAoB,IAAI,CAAC;AACtP;AACA2D,GAAqB,cAAc;AACnC,SAASR,MAA0B;AACjC,QAAM,EAAE,OAAO/I,EAAK,IAAKhD,GAAuB,GAAIyM,IAAgB9T,GAAc,cAAc,GAAG+T,IAAsB/T,GAAc,oBAAoB,GAAG3tL,IAAQi1L,GAAqB,OAAO,GAAG0M,IAAa1M,GAAqB,QAAQ,GAAGj2K,IAAM4iL,GAAW,GAAI3iL,IAAM4iL,GAAW,GAAIj4M,IAAQ63M,MAAkB,IAAIE,IAAaF,IAAgB;AACvV,SAAKC,IACkB,gBAAAh/M,EAAM,cAAcq6M,IAAoB,EAAE,OAAA/8L,GAAO,OAAApW,EAAK,GAAoB,gBAAAlH,EAAM;AAAA,IACrG26M;AAAA,IACA;AAAA,MACE,QAAQrF,EAAM,KAAK;AAAA,MACnB,UAAUA,EAAM,KAAK;AAAA,MACrB,OAAOyJ,MAAkBziL;AAAA,MACzB,OAAOyiL,MAAkBxiL;AAAA,IAC/B;AAAA,IACoB,gBAAAv8B,EAAM,cAAco/M,IAAoB,IAAI;AAAA,EAChE,CAAG,IAVgC;AAWnC;AACA,SAASF,KAAc;AACrB,QAAM,EAAE,eAAAxL,EAAa,IAAKpB,GAAuB,GAAI+M,IAAQ3L;AAC7D,UAAQ1sM,GAAQq4M,CAAK,IAAIA,EAAM,CAAC,IAAIA,KAAA,gBAAAA,EAAO,QAAQ;AACrD;AACA,SAASF,KAAc;AACrB,QAAM,EAAE,eAAAzL,EAAa,IAAKpB,GAAuB,GAAI+M,IAAQ3L;AAC7D,UAAQ1sM,GAAQq4M,CAAK,IAAIA,EAAMA,EAAM,SAAS,CAAC,IAAIA,KAAA,gBAAAA,EAAO,QAAQ;AACpE;AACA,SAASC,MAAe;AACtB,QAAM,EAAE,eAAA5L,EAAa,IAAKpB,GAAuB,GAAI+M,IAAQ3L;AAC7D,UAAQ1sM,GAAQq4M,CAAK,IAAIA,EAAM,CAAC,IAAIA,EAAM,CAAC,IAAIA,KAAA,gBAAAA,EAAO,SAAS;AACjE;AACA,SAASD,KAAqB;AAC5B,QAAM9hM,IAAQi1L,GAAqB,OAAO,GAAGj2K,IAAM4iL,GAAW,GAAI3iL,IAAM4iL,MAAej1M,IAAOo1M,IAAY;AAC1G,SAAuB,gBAAAt/M,EAAM;AAAA,IAC3Bu/M;AAAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,cAAcjiM;AAAA,MACd,KAAAgf;AAAA,MACA,KAAAC;AAAA,MACA,MAAAryB;AAAA,MACA,SAASA;AAAA,IACf;AAAA,IACoB,gBAAAlK,EAAM,cAAci7M,IAAoB,IAAI;AAAA,IAC5C,gBAAAj7M,EAAM,cAAck7M,IAAoB,IAAI;AAAA,EAChE;AACA;AACAkE,GAAmB,cAAc;AAEjC,SAASI,GAAoB;AAAA,EAC3B,SAAAv1B;AAAA,EACA,WAAAhjE;AAAA,EACA,aAAAgxF,IAAc;AAAA,EACd,OAAAlE;AACF,GAAG;AACD,QAAM;AAAA,IACJ,eAAAH;AAAA,IACA,OAAO0B;AAAA,IACP,eAAAb;AAAA,IACA,eAAAvB;AAAA,IACA,WAAAC;AAAA,IACA,SAAAK;AAAA,IACA,aAAAxB;AAAA,EACJ,IAAMM,GAAuB,GAAImN,IAAelN,GAAqB,UAAU,GAAG4B,IAAYlJ,GAAc,UAAU,GAAGkN,IAAU,CAAC1D,KAAiBtB,MAAc,YAAYgB,MAAc,UAAU,KAAK,GAAGS,IAAmBnC,GAAoBT,CAAW,GAAG,CAACtnI,GAAQ2tI,CAAS,IAAIr4M,EAAM,SAAS,EAAK,GAAGs4M,IAAWR,GAAiB;AAC3U,EAAAlH,IAAU4I,GAAiB;AAC3B,WAASjB,IAAS;AAChB,IAAAC,GAAU,MAAM;AACd,MAAAH,EAAU,EAAI;AAAA,IAChB,CAAC;AAAA,EACH;AACA,WAAS1tI,IAAU;AACjB,IAAA0tI,EAAU,EAAK;AAAA,EACjB;AACA,QAAMzwJ,IAA0B,gBAAA5nD,EAAM;AAAA,IACpC4zF;AAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,WAAAqzB;AAAA,MACA,QAAQkxF;AAAA,IACd;AAAA,IACIztI,IAAyB,gBAAA1qE,EAAM,cAAcA,EAAM,UAAU,MAAMg1M,GAAKjB,GAAO,0BAA0B,IAAI,GAAGiB,GAAKjB,GAAO,0BAA0B,IAAI,GAAmB,gBAAA/zM,EAAM,cAAcm+M,IAAqB,EAAE,OAAApK,EAAK,CAAE,GAAmB,gBAAA/zM,EAAM,cAAco9M,IAA0B,EAAE,OAAArJ,GAAO,GAAmB,gBAAA/zM,EAAM,cAAcu9M,IAAkB,EAAE,OAAAxJ,EAAK,CAAE,GAAmB,gBAAA/zM,EAAM,cAAck+M,IAAoB,EAAE,OAAAnK,EAAK,CAAE,GAAGiB,GAAKjB,GAAO,wBAAwB,IAAI,GAAGiB,GAAKjB,GAAO,wBAAwB,IAAI,CAAC,IAAI;AAAA,EAC9gB;AACE,SAAuB,gBAAA/zM,EAAM;AAAA,IAC3B2sM;AAAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,WAAWiH;AAAA,MACX,QAAA2E;AAAA,MACA,SAAA5tI;AAAA,IACN;AAAA,IACoB,gBAAA3qE,EAAM,cAAco1M,IAAgB,EAAE,SAASqK,GAAc,WAAWx1B,KAA2B,gBAAAjqL,EAAM,cAAcmgB,IAAQ,EAAE,WAAW,8BAA8B,cAAcs/L,KAAgC,gBAAAz/M,EAAM,cAAcs1M,EAAM,KAAK,UAAU,EAAE,WAAW,2BAA0B,CAAE,CAAC,CAAC;AAAA,IAC5T9B,KAAW,CAACiB,IAAgB7sJ,IAA0B,gBAAA5nD,EAAM;AAAA,MAC1Dw1C;AAAA,MACA;AAAA,QACE,WAAWyiK,KAAerD,IAAmB,IAAIA,CAAgB,KAAK;AAAA,QACtE,WAAW1B,KAAiBoF;AAAA,QAC5B,UAAU;AAAA,QACV,WAAW7D,IAAgB,KAAK;AAAA,QAChC,WAAYA,IAAqB,OAAL;AAAA,QAC5B,aAAaA,IAAgB,OAAO;AAAA,QACpC,kBAAkBN;AAAA,MAC1B;AAAA,MACMvsJ;AAAA,IACN;AAAA,EACA;AACA;AACA43J,GAAoB,cAAc;AAElC,SAASE,GAAmB,EAAE,SAAAz1B,GAAS,aAAA5qH,GAAa,OAAA00I,EAAK,GAAI;AAC3D,QAAM4L,IAAW1U,GAAc,SAAS,GAAG6K,IAAS7K,GAAc,OAAO,GAAG2U,IAAgB3U,GAAc,cAAc,GAAG,CAACzX,GAAQqsB,CAAS,IAAI7/M,EAAM,SAAS,IAAI,GAAG8/M,IAAejO,IAAUre,CAAM,GAAGusB,IAAa/K,GAAKjB,GAAO,cAA8B,gBAAA/zM,EAAM,cAAc21M,IAAmB,EAAE,SAAA1rB,EAAO,CAAE,CAAC;AACnT,SAAK21B,IAGED,MAAa,YAAY,CAAC7J,IAAS,OAAuB,gBAAA91M,EAAM,cAAc,OAAO,EAAE,WAAW,cAAc,eAAe8/M,IAAe,KAAK,MAAM,KAAKD,EAAS,GAAIE,GAA4B,gBAAA//M,EAAM,cAAc,OAAO,EAAE,WAAW,mBAAkB,GAAIg1M,GAAKjB,GAAO,gBAAgC,gBAAA/zM,EAAM,cAAcggN,IAAqB,EAAE,aAAA3gJ,EAAW,CAAE,CAAC,CAAC,CAAC,IAF1W0gJ;AAGX;AACAL,GAAmB,cAAc;AACjC,SAASM,GAAoBh8M,GAAO;AAClC,QAAMsZ,IAAQi1L,GAAqB,QAAQ;AAC3C,SAAuB,gBAAAvyM,EAAM,cAAcigN,IAAQ,EAAE,WAAW,gCAAgC,cAAc3iM,GAAO,GAAGtZ,KAAyB,gBAAAhE,EAAM,cAAc8rM,IAAO,EAAE,WAAW,mBAAkB,CAAE,GAAmB,gBAAA9rM,EAAM,cAAc+rM,IAAW,EAAE,WAAW,yCAAwC,CAAE,GAAmB,gBAAA/rM,EAAM,cAAcmmE,IAAO,EAAE,WAAW,mBAAkB,CAAE,GAAmB,gBAAAnmE,EAAM,cAAcisM,IAAS,EAAE,WAAW,sBAAsB,SAAS,GAAI,GAAoB,gBAAAjsM,EAAM,cAAcksM,IAAO,EAAE,WAAW,mBAAkB,CAAE,CAAC,CAAC;AACzjB;AACA8T,GAAoB,cAAc;AAClC,SAASE,KAAoB;AAC3B,QAAM,CAAC39F,GAAU49F,CAAW,IAAIngN,EAAM,SAAS,IAAI,GAAG,CAACskE,GAAO87I,CAAQ,IAAIpgN,EAAM,SAAS,CAAC,GAAG6sM,IAAO5B,GAAc,YAAY,GAAG,EAAE,YAAAgJ,GAAY,wBAAAH,GAAwB,mBAAAf,GAAmB,UAAAY,GAAU,gBAAAF,EAAc,IAAKnB,GAAuB,GAAIh1L,IAAQi1L,GAAqB,MAAM,GAAG8N,IAA2Bt3D,GAAUqpD,GAAuB,GAC9UkO,IAAWtgN,EAAM,YAAY,MAAM;AACvC,UAAMk1B,IAAKqtF,KAAA,gBAAAA,EAAU;AACrB,IAAArtF,KAAMkrL,EAASlrL,EAAG,WAAW;AAAA,EAC/B,GAAG,CAACqtF,CAAQ,CAAC;AACb,SAAA6uF,GAAkB7uF,KAAA,gBAAAA,EAAU,IAAI+9F,CAAQ,GACjB,gBAAAtgN,EAAM;AAAA,IAC3BugN;AAAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,cAAcjjM;AAAA,MACd,UAAUy1L;AAAA,MACV,gBAAgBU;AAAA,MAChB,SAASE;AAAA,MACT,KAAKwM;AAAA,IACX;AAAA,IACoB,gBAAAngN,EAAM;AAAA,MACpBotM;AAAA,MACA;AAAA,QACE,WAAW;AAAA,QACX,UAAU9oI,IAAQwvI;AAAA,MAC1B;AAAA,MACM,CAACz/C,GAAM9N,MAAe8N,EAAK,IAAI,CAAC5B,MAAwB,gBAAAzyJ,EAAM,cAAc,OAAO,EAAE,WAAW,sBAAsB,KAAKyyJ,EAAI,WAAW,KAAKlM,EAAU,GAAoB,gBAAAvmJ,EAAM,cAAc8rM,IAAO,EAAE,WAAW,mBAAkB,CAAE,GAAmB,gBAAA9rM,EAAM,cAAc+rM,IAAW,EAAE,WAAW,yCAAwC,CAAE,GAAmB,gBAAA/rM,EAAM,cAAcytM,IAAU,EAAE,WAAW,uCAAsC,CAAE,CAAC,CAAC;AAAA,IAChc;AAAA,IACoB,gBAAAztM,EAAM,cAAcmmE,IAAO,EAAE,WAAW,mBAAkB,CAAE;AAAA,IAC5D,gBAAAnmE,EAAM,cAAcisM,IAAS,EAAE,WAAW,wBAAwBgI,IAA6B,gBAAAj0M,EAAM;AAAA,MACnHq0L,GAAU;AAAA,MACV;AAAA,QACE,KAAK4f;AAAA,QACL,WAAW;AAAA,MACnB;AAAA,MACsB,gBAAAj0M,EAAM,cAAcq0L,GAAU,KAAK,IAAI;AAAA,IAC7D,IAAQgsB,KAA4B1V,GAAckC,CAAI,IAAoB,gBAAA7sM,EAAM,cAAcqgN,GAA0B,EAAE,WAAW,qCAAoC,CAAE,IAAI,MAAsB,gBAAArgN,EAAM,cAAcwtM,IAAc,EAAE,WAAW,2BAA0B,CAAE,GAAmB,gBAAAxtM,EAAM,cAAcksM,IAAO,EAAE,WAAW,mBAAkB,CAAE,CAAC;AAAA,EAChW;AACA;AACAgU,GAAkB,cAAc;AAEhC,SAASM,GAAiB,EAAE,OAAAzM,KAAS;AAEnC,SADkB9I,GAAc,UAAU,IAEnB,gBAAAjrM,EAAM,cAAc,OAAO,EAAE,WAAW,iBAAgB,GAAIg1M,GAAKjB,GAAO,eAA+B,gBAAA/zM,EAAM,cAAcwqM,IAAM,EAAE,WAAW,YAAY,MAAM,UAAS,CAAE,CAAC,GAAGwK,GAAKjB,GAAO,eAA+B,gBAAA/zM,EAAM,cAAc,OAAO,EAAE,WAAW,sBAAsB,GAAG,CAAC,GAAGg1M,GAAKjB,GAAO,WAA2B,gBAAA/zM,EAAM,cAAcwqM,IAAM,EAAE,WAAW,YAAY,MAAM,WAAU,CAAE,CAAC,CAAC,IAD7Y;AAEzB;AACAgW,GAAiB,cAAc;AAC/B,SAASC,GAAgB,EAAE,OAAA1M,KAAS;AAElC,SADc9I,GAAc,MAAM,IACnB+J,GAAKjB,GAAO,cAA8B,gBAAA/zM,EAAM,cAAcs3M,IAAmB,IAAI,CAAC,IAAoB,gBAAAt3M,EAAM,cAAcwgN,IAAkB,EAAE,OAAAzM,EAAK,CAAE;AAC1K;AACA0M,GAAgB,cAAc;AAC9B,SAASC,GAAkB,EAAE,OAAA3M,KAAS;AACpC,QAAMwD,IAAQtM,GAAc,MAAM,GAAGlE,IAAYkE,GAAc,UAAU;AACzE,SAAOsM,IAAQvC,GAAKjB,GAAO,cAA8B,gBAAA/zM,EAAM,cAAcs3M,IAAmB,IAAI,CAAC,IAAItC;AAAA,IACvGjB;AAAA,IACA;AAAA,IACAhN,IAA4B,gBAAA/mM,EAAM,cAAcwqM,IAAM,EAAE,WAAW,YAAY,MAAM,WAAW,QAAQ,IAAM,WAAW,GAAI,CAAE,IAAI;AAAA,EACvI;AACA;AACAkW,GAAkB,cAAc;AAEV/N,GAAyB;AAAA,EAC7C,MAAM;AAAA,EACN,aAAa,EAAE,OAAAruI,KAAS;AACtB,WAAOA,IAAQ;AAAA,EACjB;AAAA,EACA,cAAc,MAAsB,gBAAAtkE,EAAM,cAAc2gN,IAAa,IAAI;AAC3E,CAAC;AA0BD,SAASA,KAAc;AACrB,QAAM5M,IAAQe,GAA0B;AACxC,SAAA5C,GAAc,OAAO,GACE,gBAAAlyM,EAAM,cAAcA,EAAM,UAAU,MAAsB,gBAAAA,EAAM,cAAcm1M,IAAkB,IAAI,GAAmB,gBAAAn1M,EAAM,cAAc23M,IAAiB,IAAI,GAAmB,gBAAA33M,EAAM,cAAc4gN,IAAQ,EAAE,WAAW,eAAc,GAAoB,gBAAA5gN,EAAM,cAAckoI,IAAO,EAAE,WAAW,qBAAoB,GAAI8sE,GAAKjB,GAAO,sBAAsC,gBAAA/zM,EAAM,cAAc42M,IAAmB,EAAE,UAAU,IAAM,SAAS,YAAW,CAAE,CAAC,GAAG5B,GAAKjB,GAAO,cAA8B,gBAAA/zM,EAAM,cAAcq1M,IAAmB,EAAE,SAAS,aAAY,CAAE,CAAC,GAAGL,GAAKjB,GAAO,qBAAqC,gBAAA/zM,EAAM,cAAc42M,IAAmB,EAAE,SAAS,aAAY,CAAE,CAAC,GAAmB,gBAAA52M,EAAM,cAAc6gN,IAAmB,IAAI,GAAG7L,GAAKjB,GAAO,cAA8B,gBAAA/zM,EAAM,cAAckgN,IAAmB,IAAI,CAAC,GAAmB,gBAAAlgN,EAAM,cAAc0gN,IAAmB,EAAE,OAAA3M,EAAK,CAAE,GAAmB,gBAAA/zM,EAAM,cAAc0/M,IAAoB,EAAE,aAAa,YAAY,SAAS,OAAO,OAAA3L,EAAK,CAAE,GAAGiB,GAAKjB,GAAO,iBAAiC,gBAAA/zM,EAAM,cAAc+1M,IAAsB,EAAE,SAAS,aAAY,CAAE,CAAC,GAAGf,GAAKjB,GAAO,kBAAkC,gBAAA/zM,EAAM,cAAcy3M,IAAuB,IAAI,CAAC,GAAmB,gBAAAz3M,EAAM,cAAc8gN,IAAmB,EAAE,OAAA/M,EAAK,CAAE,CAAC,CAAC,CAAC;AAC9xC;AACA4M,GAAY,cAAc;AAC1B,SAASG,GAAkB,EAAE,OAAA/M,KAAS;AACpC,QAAM,EAAE,eAAAU,GAAe,SAAAjB,EAAO,IAAKlB,GAAuB,GAAIrrF,IAAYusF,IAAU,YAAaiB,IAA4B,OAAZ;AACjH,SAAuB,gBAAAz0M,EAAM,cAAcA,EAAM,UAAU,MAAMg1M;AAAA,IAC/DjB;AAAA,IACA;AAAA,IACgB,gBAAA/zM,EAAM,cAAcg4M,IAAqB,EAAE,SAAS,OAAO,WAAA/wF,GAAW,aAAa,mBAAkB,CAAE;AAAA,EAC3H,GAAK+tF;AAAA,IACDjB;AAAA,IACA;AAAA,IACgB,gBAAA/zM,EAAM;AAAA,MACpBw/M;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,WAAAv4F;AAAA,QACA,aAAa;AAAA,QACb,OAAA8sF;AAAA,MACR;AAAA,IACA;AAAA,EACA,CAAG;AACH;AACA+M,GAAkB,cAAc;AAChC,SAASD,KAAoB;AAC3B,QAAM,CAACrtB,GAAQqsB,CAAS,IAAI7/M,EAAM,SAAS,IAAI,GAAG+6J,IAAQnF,GAAe,GAAI,EAAE,cAAA7sF,EAAY,IAAKupI,GAAuB,GAAI,CAACyO,GAAmBC,CAAoB,IAAIhhN,EAAM,SAAS,EAAK,GACrLihN,IAAcvQ,GAAe,MAAM;AACvC,UAAM,EAAE,SAAA3uC,GAAS,aAAAlO,EAAW,IAAKkH,EAAM;AACvC,WAAOgH,EAAO,KAAMlO,EAAW,IAAK;AAAA,EACtC,CAAC,GACKk8C,IAAShnD;AAAA,IACb2nD,GAAe,MAAM;AACnB,YAAM,EAAE,OAAAhmG,GAAO,OAAAqsD,EAAK,IAAKgE,EAAM;AAC/B,UAAI,CAACrwD,EAAK,EAAI,QAAO;AACrB,YAAMk9E,IAAO7wB,EAAK,IAAK,WAAWkqD,EAAW,IAAK,aAAa;AAC/D,aAAO,GAAGzO,GAAKzpI,GAAc6+G,CAAI,CAAC,KAAKl9E,EAAK,CAAE;AAAA,IAChD,CAAC;AAAA,EACL,GACQw2G,IAAe9Q,GAAe,GAAI+Q,IAAep4D,GAAUk4D,CAAW,GAAG1Q,IAAgB4Q,IAAeD,IAAe,IAAIE,IAAqB/P,IAAoB7d,CAAM;AAChL,EAAAxzL,EAAM,UAAU,MAAM;;AACpB,IAAIohN,KAAsB,SAAS,kBAAkB,SAAS,UAC5DpzM,IAAA+sJ,EAAM,OAAO,OAAb,QAAA/sJ,EAAiB,MAAM,EAAE,eAAe;EAE5C,GAAG,CAAA,CAAE;AACL,QAAMsyM,IAAWtgN,EAAM,YAAY,MAAM;AACvC,UAAMk1B,IAAKs+J,GAAQ6tB,IAAgB,CAAC,CAACnsL,KAAM,CAACksL,KAAsBlsL,EAAG,cAAcA,EAAG,SAAS,CAAC,EAAE;AAClG,IAAIA,KAAIouH,GAAYpuH,GAAI,eAAemsL,CAAa,GACpDL,EAAqBK,CAAa;AAAA,EACpC,GAAG,CAAC7tB,GAAQ4tB,CAAkB,CAAC;AAC/B,SAAAhQ,GAAkB5d,GAAQ8sB,CAAQ,GAC3BvQ,IAAyB,gBAAA/vM,EAAM,cAAc,QAAQ,EAAE,WAAW,aAAa,OAAO+vM,GAAQ,KAAK8P,EAAS,GAAoB,gBAAA7/M,EAAM,cAAcshN,IAAY,EAAE,OAAOvR,GAAQ,cAAcQ,EAAa,CAAE,GAAGwQ,KAAqB,CAACK,IAAqC,gBAAAphN,EAAM,cAAcshN,IAAY,EAAE,OAAOvR,GAAQ,cAAcQ,EAAa,CAAE,IAAI,IAAI,IAAoB,gBAAAvwM,EAAM,cAAc63M,IAAuB,IAAI;AAC9a;AACAgJ,GAAkB,cAAc;AAChC,SAASS,GAAW,EAAE,OAAA52G,GAAO,cAAAw2G,KAAgB;AAC3C,QAAMnN,IAAQe,GAA0B;AACxC,SAAuB,gBAAA90M,EAAM,cAAc,QAAQ,EAAE,WAAW,iBAAgB,GAAIg1M,GAAKjB,GAAO,SAASrpG,CAAK,GAAGsqG,GAAKjB,GAAO,gBAAgC,gBAAA/zM,EAAM,cAAc,QAAQ,EAAE,WAAW,oBAAmB,GAAIkhN,CAAY,CAAC,CAAC;AAC7O;AACAI,GAAW,cAAc;AAEzB,MAAMC,KAAyBvhN,EAAM;AAAA,EACnC,CAAC,EAAE,OAAOs1M,GAAO,GAAGtxM,EAAK,GAAIuiJ,MAAe;AAC1C,UAAM,CAACqc,GAAS4+C,CAAU,IAAIxhN,EAAM,SAAS,EAAK,GAAG,CAACm3M,GAAMsK,CAAO,IAAIzhN,EAAM,SAAS,IAAI,GAAG,CAAC4nC,GAAO85K,CAAQ,IAAI1hN,EAAM,SAAS,CAAC,GAAG2hN,IAAsB1W,GAAc,oBAAoB;AAC5L,IAAAjrM,EAAM,UAAU,MAAM;AACpB,MAAA0hN,EAAS,CAACriN,MAAMA,IAAI,CAAC;AAAA,IACvB,GAAG,CAACsiN,CAAmB,CAAC;AACxB,UAAMC,IAAiB5hN,EAAM,QAAQ,MAAM;AACzC,YAAM2yD,IAASgvJ,KAAA,gBAAAA,EAAqB;AACpC,aAAOhvJ,KAAUiwG,IAAUhd,GAAiBjzF,CAAM,IAAI;AAAA,IACxD,GAAG,CAACiwG,GAAS++C,CAAmB,CAAC,GAC3B30M,IAAYhN,EAAM;AAAA,MACtB,MAAM,gBAAiB4iK,IAAsB,KAAZ,SAAc,GAAG5+J,EAAM,YAAY,IAAIA,EAAM,SAAS,KAAK,EAAE;AAAA,MAC9F,CAAC4+J,CAAO;AAAA,IACd,GACUi/C,IAASnR,GAAextG,GAAO,GAAGipG,IAAQpjD,GAAU84D,CAAM;AAChE,WAAAlR,IAAa,MAAM;AACjB,YAAMmR,IAAQC,IAAQzM,CAAK;AAC3B,MAAAmM,EAAQ,MAAMK,CAAK;AAAA,IACrB,GAAG,CAACxM,CAAK,CAAC,GACVt1M,EAAM,UAAU,MAAM;AACpB,MAAAwhN,EAAW,CAAC,CAACG,CAAmB;AAChC,YAAM99K,IAAK,WAAW,MAAM29K,EAAW,EAAK,GAAG,GAAG;AAClD,aAAO,MAAM;AACX,QAAAA,EAAW,EAAK,GAChB,OAAO,aAAa39K,CAAE;AAAA,MACxB;AAAA,IACF,GAAG,CAAC89K,CAAmB,CAAC,GACjBxK,IAAuB,gBAAAn3M,EAAM;AAAA,MAClC4uC,GAAU;AAAA,MACV;AAAA,QACE,GAAG5qC;AAAA,QACH,WAAAgJ;AAAA,QACA,eAAe40M;AAAA,QACf,KAAKr7D;AAAA,MACb;AAAA,MACsB,gBAAAvmJ,EAAM,cAAc,OAAO,EAAE,WAAW,sBAAqB,GAAoB,gBAAAA,EAAM,cAAc,OAAO,EAAE,WAAW,cAAa,GAAImsM,CAAK,CAAC;AAAA,MAChJ,gBAAAnsM,EAAM,cAAc,OAAO,EAAE,WAAW,gBAAgB,KAAK4nC,EAAK,GAAoB,gBAAA5nC,EAAM,cAAc,OAAO,EAAE,WAAW,cAAa,GAAoB,gBAAAA,EAAM,cAAcm3M,GAAM,IAAI,CAAC,CAAC;AAAA,IACrN,IAAQ;AAAA,EACN;AACF;AACAoK,GAAuB,cAAc;AACrC,SAASr+G,MAAU;;AACjB,QAAM,EAAE,QAAA47E,EAAM,IAAKp+J,GAAWi1I,EAAY,GAAGhjG,KAAS3kD,IAAA8wK,EAAO,mBAAkB,MAAzB,gBAAA9wK,EAA6B,QAAQylK,IAAYqL,EAAO,UAAS,KAAM;AAC7H,UAAQnsH,GAAM;AAAA,IACZ,KAAK;AACH,aAAOmsH,EAAO,MAAK,IAAK,OAAOkjC,GAAcljC,EAAO,OAAM,GAAIrL,CAAS;AAAA,IACzE,KAAK;AAAA,IACL,KAAK;AACH,aAAOuuC,GAAcljC,EAAO,OAAM,GAAIrL,CAAS;AAAA,IACjD;AACE,aAAO;AAAA,EACb;AACA;AACA,SAASuuC,GAAczrD,GAAQE,GAAM;AACnC,SAAO,GAAG,KAAK,MAAMF,IAASE,IAAO,GAAG,CAAC;AAC3C;AACA,SAASsrD,IAAQzM,GAAO;;AACtB,QAAM,EAAE,QAAAx2B,EAAM,IAAKp+J,GAAWi1I,EAAY;AAC1C,WADsD3nJ,IAAA8wK,EAAO,mBAAkB,MAAzB,gBAAA9wK,EAA6B,QACrE;AAAA,IACZ,KAAK;AACH,aAAQ8wK,EAAO,OAAM,IAAkBw2B,EAAM,QAAnBA,EAAM;AAAA,IAClC,KAAK;AACH,aAAOx2B,EAAO,MAAK,KAAMA,EAAO,OAAM,MAAO,IAAIw2B,EAAM,OAAOx2B,EAAO,OAAM,KAAM,MAAMw2B,EAAM,WAAWA,EAAM;AAAA,IAChH,KAAK;AACH,aAAOx2B,EAAO,WAAU,IAAKw2B,EAAM,kBAAkBA,EAAM;AAAA,IAC7D,KAAK;AACH,aAAOx2B,EAAO,iBAAgB,IAAKw2B,EAAM,WAAWA,EAAM;AAAA,IAC5D,KAAK;AACH,aAAOx2B,EAAO,YAAW,IAAKA,EAAO,cAAcw2B,EAAM,aAAaA,EAAM,cAAc;AAAA,IAC5F,KAAK;AACH,aAAOA,EAAM;AAAA,IACf,KAAK;AACH,aAAOA,EAAM;AAAA,IACf,KAAK;AACH,aAAOA,EAAM;AAAA,IACf,KAAK;AACH,aAAOA,EAAM;AAAA,IACf;AACE,aAAO;AAAA,EACb;AACA;AAEA,SAAS2M,KAAe;AACtB,QAAMC,IAAWjX,GAAc,SAAS,GAAG8E,IAAS9E,GAAc,OAAO;AACzE,SAD2FiF,GAAmB,UAAU,MAChGgS,KAAY,CAACnS,KAA0B,gBAAA/vM,EAAM,cAAcmiN,IAAgB,EAAE,WAAW,oBAAmB,CAAE,IAAoB,gBAAAniN,EAAM,cAAc6nD,IAAO,EAAE,WAAW,qBAAqB;AACxN;AACAo6J,GAAa,cAAc;AAE3B,MAAMG,MAAczP,GAAyB;AAAA,EAC3C,MAAM;AAAA,EACN,aAAa,EAAE,OAAAruI,GAAO,QAAAC,KAAU;AAC9B,WAAOD,IAAQ,OAAOC,IAAS;AAAA,EACjC;AAAA,EACA,aAAavgE,GAAO;AAClB,WAAuB,gBAAAhE,EAAM,cAAcqiN,IAAa,EAAE,GAAGr+M,EAAK,CAAE;AAAA,EACtE;AACF,CAAC;AACD,SAASs+M,GAAmBt+M,GAAO;AACjC,SAAuB,gBAAAhE,EAAM,cAAcoiN,KAAa,EAAE,GAAGp+M,EAAK,CAAE;AACtE;AACAs+M,GAAmB,cAAc;AACjC,SAASD,GAAY,EAAE,YAAAjoC,GAAY,cAAAu6B,GAAc,eAAAF,EAAa,GAAI;AAChE,SAAAvC,GAAc,OAAO,GACdyC,IAA+B,gBAAA30M,EAAM,cAAcuiN,IAAwB,IAAI,IAAInoC,MAAe,YAA4B,gBAAAp6K,EAAM,cAAcwiN,IAA2B,IAAI,IAAI/N,IAAgC,gBAAAz0M,EAAM,cAAcyiN,IAAyB,IAAI,IAAoB,gBAAAziN,EAAM,cAAc0iN,IAAyB,IAAI;AACpV;AACAL,GAAY,cAAc;AAC1B,SAASK,KAA0B;AACjC,QAAM,EAAE,WAAAvP,EAAS,IAAKb,GAAuB,GAAIqQ,IAAY5N,MAA8BhB,IAAQ,EAAE,GAAG4O,GAAW,GAAGA,KAAA,gBAAAA,EAAW,YAAW;AAC5I,SAAuB,gBAAA3iN,EAAM,cAAcA,EAAM,UAAU,MAAsB,gBAAAA,EAAM,cAAcm1M,IAAkB,IAAI,GAAmB,gBAAAn1M,EAAM,cAAc4iN,IAAsB,IAAI,GAAmB,gBAAA5iN,EAAM,cAAc6iN,IAA6B,IAAI,GAAG7N,GAAKjB,GAAO,sBAAsC,gBAAA/zM,EAAM,cAAcwiN,IAA2B,IAAI,CAAC,GAAGxN,GAAKjB,GAAO,YAA4B,gBAAA/zM,EAAM,cAAc23M,IAAiB,IAAI,CAAC,GAAmB,gBAAA33M,EAAM,cAAc4gN,IAAQ,EAAE,WAAW,eAAc,GAAoB,gBAAA5gN,EAAM,cAAckoI,IAAO,EAAE,WAAW,qBAAoB,GAAI8sE,GAAKjB,GAAO,yBAAyB,IAAI,GAAmB,gBAAA/zM,EAAM,cAAc63M,IAAuB,IAAI,GAAG7C,GAAKjB,GAAO,0BAA0B,IAAI,GAAmB,gBAAA/zM,EAAM,cAAc63M,IAAuB,IAAI,GAAG7C,GAAKjB,GAAO,uBAAuB,IAAI,GAAGZ,MAAc,SAAyB,gBAAAnzM,EAAM,cAAc8iN,IAAmB,EAAE,OAAA/O,EAAK,CAAE,CAAC,GAAmB,gBAAA/zM,EAAM,cAAc63M,IAAuB,IAAI,GAAmB,gBAAA73M,EAAM,cAAckoI,IAAO,EAAE,WAAW,qBAAoB,GAAI8sE,GAAKjB,GAAO,4BAA4B,IAAI,GAAmB,gBAAA/zM,EAAM,cAAc63M,IAAuB,IAAI,GAAG7C,GAAKjB,GAAO,6BAA6B,IAAI,GAAmB,gBAAA/zM,EAAM,cAAc63M,IAAuB,IAAI,GAAG7C,GAAKjB,GAAO,0BAA0B,IAAI,CAAC,GAAmB,gBAAA/zM,EAAM,cAAc63M,IAAuB,IAAI,GAAmB,gBAAA73M,EAAM,cAAckoI,IAAO,EAAE,WAAW,qBAAoB,GAAI8sE,GAAKjB,GAAO,cAA8B,gBAAA/zM,EAAM,cAAckgN,IAAmB,IAAI,CAAC,CAAC,GAAmB,gBAAAlgN,EAAM,cAAckoI,IAAO,EAAE,WAAW,qBAAoB,GAAI8sE,GAAKjB,GAAO,cAA8B,gBAAA/zM,EAAM,cAAcq1M,IAAmB,EAAE,SAAS,YAAW,CAAE,CAAC,GAAmB,gBAAAr1M,EAAM,cAAc0/M,IAAoB,EAAE,aAAa,cAAc,SAAS,OAAO,OAAA3L,GAAO,GAAmB,gBAAA/zM,EAAM,cAAcygN,IAAiB,EAAE,OAAA1M,EAAK,CAAE,GAAGiB,GAAKjB,GAAO,gBAAgC,gBAAA/zM,EAAM,cAAciiN,IAAc,IAAI,CAAC,GAAGjN,GAAKjB,GAAO,iBAAiC,gBAAA/zM,EAAM,cAAc+1M,IAAsB,EAAE,SAAS,MAAK,CAAE,CAAC,GAAG5C,MAAc,YAA4B,gBAAAnzM,EAAM,cAAc8iN,IAAmB,EAAE,OAAA/O,EAAK,CAAE,GAAGiB,GAAKjB,GAAO,iBAAiC,gBAAA/zM,EAAM,cAAcg3M,IAAsB,EAAE,SAAS,MAAK,CAAE,CAAC,GAAGhC,GAAKjB,GAAO,oBAAoC,gBAAA/zM,EAAM,cAAco3M,IAAyB,EAAE,SAAS,MAAK,CAAE,CAAC,GAAGpC,GAAKjB,GAAO,kBAAkC,gBAAA/zM,EAAM,cAAcy3M,IAAuB,IAAI,CAAC,GAAGzC,GAAKjB,GAAO,aAA6B,gBAAA/zM,EAAM,cAAco2M,IAAkB,EAAE,SAAS,MAAK,CAAE,CAAC,GAAGpB,GAAKjB,GAAO,oBAAoC,gBAAA/zM,EAAM,cAAcy2M,IAAyB,EAAE,SAAS,UAAS,CAAE,CAAC,CAAC,CAAC,CAAC;AAC7vF;AACAiM,GAAwB,cAAc;AACtC,SAASD,KAA0B;AACjC,QAAME,IAAY5N,GAA0B,GAAIhB,IAAQ,EAAE,GAAG4O,GAAW,GAAGA,KAAA,gBAAAA,EAAW,YAAW;AACjG,SAAuB,gBAAA3iN,EAAM,cAAcA,EAAM,UAAU,MAAsB,gBAAAA,EAAM,cAAcm1M,IAAkB,IAAI,GAAmB,gBAAAn1M,EAAM,cAAc4iN,IAAsB,IAAI,GAAmB,gBAAA5iN,EAAM,cAAc6iN,IAA6B,IAAI,GAAG7N,GAAKjB,GAAO,sBAAsC,gBAAA/zM,EAAM,cAAcwiN,IAA2B,IAAI,CAAC,GAAGxN,GAAKjB,GAAO,YAA4B,gBAAA/zM,EAAM,cAAc23M,IAAiB,IAAI,CAAC,GAAmB,gBAAA33M,EAAM,cAAc4gN,IAAQ,EAAE,WAAW,eAAc,GAAoB,gBAAA5gN,EAAM,cAAckoI,IAAO,EAAE,WAAW,qBAAoB,GAAI8sE,GAAKjB,GAAO,yBAAyB,IAAI,GAAGiB,GAAKjB,GAAO,iBAAiC,gBAAA/zM,EAAM,cAAcg3M,IAAsB,EAAE,SAAS,aAAa,CAAC,GAAGhC,GAAKjB,GAAO,oBAAoC,gBAAA/zM,EAAM,cAAco3M,IAAyB,EAAE,SAAS,YAAW,CAAE,CAAC,GAAmB,gBAAAp3M,EAAM,cAAc63M,IAAuB,IAAI,GAAG7C,GAAKjB,GAAO,0BAA0B,IAAI,GAAmB,gBAAA/zM,EAAM,cAAc63M,IAAuB,IAAI,GAAG7C,GAAKjB,GAAO,iBAAiC,gBAAA/zM,EAAM,cAAc+1M,IAAsB,EAAE,SAAS,SAAQ,CAAE,CAAC,GAAGf,GAAKjB,GAAO,kBAAkC,gBAAA/zM,EAAM,cAAcy3M,IAAuB,IAAI,CAAC,GAAmB,gBAAAz3M,EAAM,cAAc8iN,IAAmB,EAAE,OAAA/O,EAAK,CAAE,GAAmB,gBAAA/zM,EAAM,cAAc0/M,IAAoB,EAAE,aAAa,YAAY,SAAS,cAAc,OAAA3L,EAAK,CAAE,GAAGiB,GAAKjB,GAAO,uBAAuB,IAAI,CAAC,GAAmB,gBAAA/zM,EAAM,cAAc63M,IAAuB,IAAI,GAAmB,gBAAA73M,EAAM,cAAckoI,IAAO,EAAE,WAAW,sBAAsB,OAAO,EAAE,eAAe,OAAM,EAAE,GAAI8sE,GAAKjB,GAAO,4BAA4B,IAAI,GAAmB,gBAAA/zM,EAAM,cAAc63M,IAAuB,IAAI,GAAG7C,GAAKjB,GAAO,6BAA6B,IAAI,GAAGiB,GAAKjB,GAAO,cAA8B,gBAAA/zM,EAAM,cAAcq1M,IAAmB,EAAE,SAAS,MAAK,CAAE,CAAC,GAAmB,gBAAAr1M,EAAM,cAAc63M,IAAuB,IAAI,GAAG7C,GAAKjB,GAAO,0BAA0B,IAAI,CAAC,GAAmB,gBAAA/zM,EAAM,cAAc63M,IAAuB,IAAI,GAAmB,gBAAA73M,EAAM,cAAckoI,IAAO,EAAE,WAAW,qBAAoB,GAAoB,gBAAAloI,EAAM,cAAcygN,IAAiB,EAAE,OAAA1M,GAAO,GAAGiB,GAAKjB,GAAO,gBAAgC,gBAAA/zM,EAAM,cAAciiN,IAAc,IAAI,CAAC,GAAGjN,GAAKjB,GAAO,oBAAoC,gBAAA/zM,EAAM,cAAcy2M,IAAyB,EAAE,SAAS,UAAS,CAAE,CAAC,CAAC,GAAmB,gBAAAz2M,EAAM,cAAckoI,IAAO,EAAE,WAAW,qBAAoB,GAAI8sE,GAAKjB,GAAO,cAA8B,gBAAA/zM,EAAM,cAAckgN,IAAmB,IAAI,CAAC,CAAC,CAAC,GAAGlL,GAAKjB,GAAO,iBAAiC,gBAAA/zM,EAAM,cAAc+iN,IAA2B,IAAI,CAAC,CAAC;AACxrF;AACAN,GAAwB,cAAc;AACtC,SAASM,KAA4B;AAEnC,SADkB9X,GAAc,UAAU,MACxB,IAAU,OACL,gBAAAjrM,EAAM,cAAc,OAAO,EAAE,WAAW,qBAAoB,GAAoB,gBAAAA,EAAM,cAAcwqM,IAAM,EAAE,WAAW,YAAY,MAAM,WAAU,CAAE,CAAC;AAC/K;AACAuY,GAA0B,cAAc;AACxC,SAASH,KAAuB;AAC9B,QAAM,EAAE,YAAAtP,EAAU,IAAKhB,GAAuB;AAC9C,SAAIgB,IAAmB,OACA,gBAAAtzM,EAAM,cAAc,OAAO,EAAE,WAAW,eAAc,GAAoB,gBAAAA,EAAM,cAAcmqM,IAAS,EAAE,WAAW,eAAe,OAAO,aAAa,QAAQ,gBAAe,CAAE,GAAmB,gBAAAnqM,EAAM,cAAcmqM,IAAS,EAAE,WAAW,eAAe,OAAO,aAAa,QAAQ,kBAAiB,CAAE,GAAmB,gBAAAnqM,EAAM,cAAcmqM,IAAS,EAAE,WAAW,eAAe,OAAO,gBAAgB,QAAQ,qBAAqB,GAAmB,gBAAAnqM,EAAM,cAAcmqM,IAAS,EAAE,WAAW,eAAe,OAAO,gBAAgB,QAAQ,WAAU,CAAE,GAAmB,gBAAAnqM,EAAM,cAAcmqM,IAAS,EAAE,WAAW,eAAe,OAAO,gBAAgB,QAAQ,UAAS,CAAE,CAAC;AAClrB;AACAyY,GAAqB,cAAc;AACnC,SAASJ,KAA4B;AACnC,SAAuB,gBAAAxiN,EAAM,cAAc,OAAO,EAAE,WAAW,6BAA6C,gBAAAA,EAAM,cAAcgjN,KAAQ,EAAE,WAAW,wBAAuB,GAAoB,gBAAAhjN,EAAM,cAAcijN,KAAS,EAAE,WAAW,sBAAqB,CAAE,GAAmB,gBAAAjjN,EAAM,cAAckjN,KAAa,EAAE,WAAW,2BAA0B,CAAE,CAAC,CAAC;AAClW;AACAV,GAA0B,cAAc;AACxC,SAASM,GAAkB,EAAE,OAAA/O,KAAS;AACpC,QAAM,EAAE,eAAAU,GAAe,SAAAjB,GAAS,WAAAL,EAAS,IAAKb,GAAuB,GAAI/pF,IAAO4qF,MAAc,SAASsB,IAAgB,WAAW,OAAOxqB,IAAU,GAAG1hE,CAAI,QAAQtB,IAAYusF,IAAU,GAAGjrF,CAAI,SAAUksF,IAAgC,OAAhB,GAAGlsF,CAAI;AAChO,SAAuB,gBAAAvoH,EAAM,cAAcA,EAAM,UAAU,MAAMg1M;AAAA,IAC/DjB;AAAA,IACA;AAAA,IACgB,gBAAA/zM,EAAM;AAAA,MACpBg4M;AAAA,MACA;AAAA,QACE,SAAA/tB;AAAA,QACA,WAAAhjE;AAAA,QACA,aAAa;AAAA,MACrB;AAAA,IACA;AAAA,EACA,GAAK+tF;AAAA,IACDjB;AAAA,IACA;AAAA,IACgB,gBAAA/zM,EAAM;AAAA,MACpBw/M;AAAA,MACA;AAAA,QACE,SAAAv1B;AAAA,QACA,WAAAhjE;AAAA,QACA,aAAa;AAAA,QACb,OAAA8sF;AAAA,MACR;AAAA,IACA;AAAA,EACA,CAAG;AACH;AACA+O,GAAkB,cAAc;AAChC,SAASP,KAAyB;AAChC,QAAM,EAAE,eAAA9N,EAAa,IAAKnC,GAAuB,GAAIqQ,IAAY5N,GAA0B,GAAIhB,IAAQ,EAAE,GAAG4O,GAAW,GAAGA,KAAA,gBAAAA,EAAYlO,IAAgB,gBAAgB,eAAc;AACpL,SAAuB,gBAAAz0M,EAAM,cAAc,OAAO,EAAE,WAAW,wBAAwBg1M,GAAKjB,GAAO,sBAAsC,gBAAA/zM,EAAM,cAAcwiN,IAA2B,IAAI,CAAC,GAAGxN,GAAKjB,GAAO,cAA8B,gBAAA/zM,EAAM,cAAcq1M,IAAmB,EAAE,SAAS,MAAK,CAAE,CAAC,CAAC;AACvS;AACAkN,GAAuB,cAAc;AACrC,SAASM,KAA8B;AACrC,QAAM,EAAE,sBAAAtP,GAAsB,OAAAN,GAAO,+BAAAsB,EAA6B,IAAKjC,GAAuB,GAAI6Q,IAAiCp6D,GAAUwrD,CAA6B;AAC1K,SADwLhB,KAAwB,CAAC4P,KACjM,CAAClQ,EAAM,kBAAwB,OACxB,gBAAAjzM,EAAM,cAAcuhN,IAAwB,EAAE,OAAOtO,EAAM,iBAAiB;AACrG;AACA4P,GAA4B,cAAc;ACp1C1C,MAAM1L,KAAuB,gBAAAn3M,EAAM,WAAW,CAACgE,GAAOuE,MAAQ;AAC5D,QAAM,EAAE,OAAA+7D,GAAO,QAAAC,GAAQ,MAAAnkD,IAAO,MAAM,OAAA+vC,GAAO,GAAGizJ,EAAS,IAAKp/M;AAC5D,SAAOhE,EAAM,cAAc,OAAO;AAAA,IAChC,SAAS;AAAA,IACT,GAAGojN;AAAA,IACH,OAAO9+I,KAASlkD;AAAA,IAChB,QAAQmkD,KAAUnkD;AAAA,IAClB,MAAM;AAAA,IACN,eAAe;AAAA,IACf,WAAW;AAAA,IACX,OAAO;AAAA,IACP,KAAA7X;AAAA,IACA,yBAAyB,EAAE,QAAQ4nD,EAAK;AAAA,EAC5C,CAAG;AACH,CAAC;AACDgnJ,GAAK,cAAc;ACbnB,SAASkM,GAAWlzJ,GAAO;AACzB,WAASmzJ,EAAkBt/M,GAAO;AAChC,WAAuB,gBAAAhE,EAAM,cAAcm3M,IAAM,EAAE,OAAAhnJ,GAAO,GAAGnsD,GAAO;AAAA,EACtE;AACA,SAAAs/M,EAAkB,cAAc,qBACzBA;AACT;AACA,MAAMC,MAAqB;AAAA,EACzB,eAAe;AAAA,IACb,SAASF,GAAW72D,EAAM;AAAA,EAC9B;AAAA,EACE,kBAAkB;AAAA,IAChB,SAAS62D,GAAWt2D,EAAO;AAAA,EAC/B;AAAA,EACE,YAAY;AAAA,IACV,MAAMs2D,GAAWt1D,EAAO;AAAA,IACxB,OAAOs1D,GAAWz1D,EAAO;AAAA,IACzB,QAAQy1D,GAAWp1D,EAAO;AAAA,EAC9B;AAAA,EACE,YAAY;AAAA,IACV,MAAMo1D,GAAW31D,EAAO;AAAA,IACxB,WAAW21D,GAAW/0D,EAAQ;AAAA,IAC9B,YAAY+0D,GAAWh1D,EAAQ;AAAA,EACnC;AAAA,EACE,eAAe;AAAA,IACb,IAAIg1D,GAAWp2D,EAAO;AAAA,IACtB,KAAKo2D,GAAWn2D,EAAO;AAAA,EAC3B;AAAA,EACE,WAAW;AAAA,IACT,OAAOm2D,GAAWv1D,EAAO;AAAA,IACzB,MAAMu1D,GAAWx1D,EAAO;AAAA,EAC5B;AAAA,EACE,kBAAkB;AAAA,IAChB,OAAOw1D,GAAW71D,EAAO;AAAA,IACzB,MAAM61D,GAAW91D,EAAO;AAAA,EAC5B;AAAA,EACE,YAAY;AAAA,IACV,UAAU81D,GAAWn1D,EAAO;AAAA,IAC5B,SAASm1D,GAAWl1D,EAAO;AAAA,EAC/B;AAAA,EACE,gBAAgB;AAAA,IACd,SAASk1D,GAAWl2D,EAAO;AAAA,EAC/B;AAAA,EACE,MAAM;AAAA,IACJ,eAAek2D,GAAW92D,EAAM;AAAA,IAChC,WAAW82D,GAAW32D,EAAO;AAAA,IAC7B,YAAY22D,GAAWv2D,EAAO;AAAA,IAC9B,OAAOu2D,GAAW51D,EAAO;AAAA,IACzB,UAAU41D,GAAWz2D,EAAO;AAAA,IAC5B,UAAUy2D,GAAWn2D,EAAO;AAAA,IAC5B,UAAUm2D,GAAWr1D,EAAO;AAAA,IAC5B,UAAUq1D,GAAWj1D,EAAO;AAAA,IAC5B,cAAci1D,GAAWh1D,EAAQ;AAAA,IACjC,gBAAgBg1D,GAAW/0D,EAAQ;AAAA,IACnC,SAAS+0D,GAAW/1D,EAAO;AAAA,IAC3B,WAAW+1D,GAAWh2D,EAAO;AAAA,IAC7B,WAAWg2D,GAAW12D,EAAO;AAAA,IAC7B,aAAa02D,GAAW52D,EAAM;AAAA,IAC9B,YAAY42D,GAAW12D,EAAO;AAAA,IAC9B,cAAc02D,GAAW52D,EAAM;AAAA,IAC/B,WAAW42D,GAAWj2D,EAAO;AAAA,IAC7B,aAAai2D,GAAW11D,EAAO;AAAA,IAC/B,YAAY01D,GAAWx2D,EAAO;AAAA,EAClC;AAAA,EACE,iBAAiB;AAAA,IACf,MAAMw2D,GAAWt1D,EAAO;AAAA,IACxB,OAAOs1D,GAAWz1D,EAAO;AAAA,IACzB,MAAMy1D,GAAW31D,EAAO;AAAA,IACxB,UAAU21D,GAAWh1D,EAAQ;AAAA,IAC7B,YAAYg1D,GAAW/0D,EAAQ;AAAA,IAC/B,iBAAiB+0D,GAAW71D,EAAO;AAAA,IACnC,gBAAgB61D,GAAW91D,EAAO;AAAA,IAClC,UAAU81D,GAAWv1D,EAAO;AAAA,IAC5B,SAASu1D,GAAWx1D,EAAO;AAAA,IAC3B,YAAYw1D,GAAWp2D,EAAO;AAAA,IAC9B,aAAao2D,GAAWn2D,EAAO;AAAA,IAC/B,aAAam2D,GAAW/1D,EAAO;AAAA,IAC/B,cAAc+1D,GAAWh2D,EAAO;AAAA,EACpC;AACA,GCzDMjiD,MAAaC,GAAS;AAAA,EAC1B,OAAO7oE,GAAE,EAAS,IAAI,KAAK,wCAAwC,EAAE,SAAA;AAAA,EACrE,aAAaA,GAAE,EAAS,IAAI,KAAM,+CAA+C,EAAE,SAAA;AAAA,EACnF,SAAS8oE,GAAE;AACb,CAAC,GAcKk4G,MAAiB,CAAC;AAAA,EACtB,MAAAn/J;AAAA,EACA,cAAAJ;AAAA,EACA,SAAA4sH;AAAA,EACA,cAAArlE;AAAA,EACA,oBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,iBAAAC;AACF,MAA2B;AACzB,QAAM,CAAC55B,GAAUC,CAAW,IAAI9lE,GAAS,EAAK,GACxC,EAAE,MAAA++D,EAAA,IAASxqD,GAAA,GAGX,CAACqrF,GAAaC,CAAc,IAAI7/F,GAAS,EAAK,GAC9C,CAAC8/F,GAAgBC,CAAiB,IAAI//F,GAAS,EAAK,GACpDggG,IAAmBj+B,GAA6B,IAAI,GACpDk+B,IAAiBl+B,GAAe,EAAE,GAGlC,CAAC3C,GAAaC,CAAc,IAAIr/D,GAAuB,CAAA,CAAE,GACzD,CAAC0/D,GAAqBC,CAAsB,IAAI3/D,GAAsB,oBAAI,KAAK,GAC/E,CAACkgG,GAAoBC,CAAqB,IAAIngG,GAAS,EAAK,GAE5D0vD,IAAOE,GAAsB;AAAA,IACjC,UAAUwwC,GAAYlB,GAAU;AAAA,IAChC,eAAe;AAAA,MACb,OAAOI;AAAA,MACP,aAAaC,KAAsB;AAAA,MACnC,SAASC;AAAA,IAAA;AAAA,EACX,CACD;AAGD,EAAAp/F,GAAU,MAAM;AACd,IAAI+3C,KAAQ4mB,MACVmB,EAAA,GACAq3I,EAAA;AAAA,EAEJ,GAAG,CAACp/J,GAAM4mB,GAAM4lG,CAAO,CAAC;AAExB,QAAMzkG,IAAmB,YAAY;AACnC,QAAKnB,GAEL;AAAA,MAAAohC,EAAsB,EAAI;AAC1B,UAAI;AACF,cAAM,EAAE,MAAArgG,GAAM,OAAA5K,MAAU,MAAMgN,GAC3B,KAAK,aAAa,EAClB,OAAO,GAAG,EACV,GAAG,WAAW68D,EAAK,EAAE,EACrB,MAAM,cAAc,EAAE,WAAW,IAAO;AAE3C,YAAI7pE,EAAO,OAAMA;AACjB,QAAAmqE,EAAev/D,KAAQ,EAAE;AAAA,MAC3B,SAAS5K,GAAO;AACd,gBAAQ,MAAM,+BAA+BA,CAAK,GAClD0xE,GAAM,MAAM7zD,GAAU,4BAA4B,CAAC;AAAA,MACrD,UAAA;AACE,QAAAotF,EAAsB,EAAK;AAAA,MAC7B;AAAA;AAAA,EACF,GAEMo3G,IAAwB,YAAY;AACxC,QAAKx4I;AAEL,UAAI;AAEF,cAAM,EAAE,MAAAj/D,GAAM,OAAA5K,MAAU,MAAMgN,GAC3B,KAAK,qBAAqB,EAC1B,OAAO,eAAe,EACtB,GAAG,cAAcyiK,CAAO;AAE3B,YAAIzvK,EAAO,OAAMA;AAEjB,YAAI4K,GAAM;AACR,gBAAMwgG,IAAgBxgG,EAAK,IAAI,CAAA4gE,MAAMA,EAAG,aAAa;AACrD,UAAAf,EAAuB,IAAI,IAAI2gC,CAAa,CAAC;AAAA,QAC/C;AAAA,MACF,SAASprG,GAAO;AACd,gBAAQ,MAAM,qCAAqCA,CAAK;AAAA,MAC1D;AAAA,EACF,GAEMsiN,IAAyB,CAACh3G,MAAyB;AACvD,UAAMi3G,IAAc,IAAI,IAAI/3I,CAAmB;AAC/C,IAAI+3I,EAAY,IAAIj3G,CAAY,IAC9Bi3G,EAAY,OAAOj3G,CAAY,IAE/Bi3G,EAAY,IAAIj3G,CAAY,GAE9B7gC,EAAuB83I,CAAW;AAAA,EACpC,GAEM/2G,IAAW,OAAO5gG,MAAuB;;AAC7C,QAAKi/D,GAEL;AAAA,MAAA+G,EAAY,EAAI;AAChB,UAAI;AAEF,cAAM,EAAE,OAAO4xI,MAAgB,MAAMx1M,GAClC,KAAK,UAAU,EACf,OAAO;AAAA,UACN,SAAOJ,IAAAhC,EAAK,UAAL,gBAAAgC,EAAY,WAAU;AAAA,UAC7B,eAAamG,IAAAnI,EAAK,gBAAL,gBAAAmI,EAAkB,WAAU;AAAA,UACzC,SAASnI,EAAK;AAAA,UACd,aAAY,oBAAI,KAAA,GAAO,YAAA;AAAA,QAAY,CACpC,EACA,GAAG,MAAM6kK,CAAO,EAChB,GAAG,WAAW5lG,EAAK,EAAE,EACrB,GAAG,QAAQ,WAAW;AAEzB,YAAI24I,EAAa,OAAMA;AAGvB,YAAI;AAQF,cANA,MAAMx1M,GACH,KAAK,qBAAqB,EAC1B,SACA,GAAG,cAAcyiK,CAAO,GAGvBjlG,EAAoB,OAAO,GAAG;AAChC,kBAAMi4I,IAAoB,MAAM,KAAKj4I,CAAmB,EAAE,IAAI,CAAA8gC,OAAiB;AAAA,cAC7E,eAAeA;AAAA,cACf,YAAYmkE;AAAA,YAAA,EACZ;AAEF,kBAAMziK,GACH,KAAK,qBAAqB,EAC1B,OAAOy1M,CAAiB;AAAA,UAC7B;AAAA,QACF,SAASC,GAAiB;AACxB,kBAAQ,MAAM,6BAA6BA,CAAe,GAC1DhxI,GAAM,MAAM7zD,GAAU,8BAA8B,CAAC;AAAA,QAEvD;AAEA,QAAA6zD,GAAM,QAAQ7zD,GAAU,4BAA4B,CAAC,GACrD0sF,EAAA,GACA1nD,EAAa,EAAK;AAAA,MACpB,SAAS7iD,GAAO;AACd,gBAAQ,MAAM,yBAAyBA,CAAK,GAC5C0xE,GAAM,MAAM7zD,GAAU,wBAAwB,CAAC;AAAA,MACjD,UAAA;AACE,QAAA+yD,EAAY,EAAK;AAAA,MACnB;AAAA;AAAA,EACF,GAEM+6B,IAAmB,OAAOr/C,MAAmC;AACjE,QAAIo+C;AAEF,MAAII,EAAiB,WAAWA,EAAiB,QAAQ,UAAU,eACjEA,EAAiB,QAAQ,KAAA,GAE3BH,EAAe,EAAK;AAAA;AAGpB,UAAI;AACF,cAAMrzB,IAAS,MAAM,UAAU,aAAa,aAAa,EAAE,OAAO,IAAM,GAClEs0B,IAAgB,IAAI,cAAct0B,CAAM;AAC9C,QAAAwzB,EAAiB,UAAUc,GAC3Bb,EAAe,UAAU,CAAA,GAEzBa,EAAc,kBAAkB,CAACzhE,MAAU;AACzC,UAAIA,EAAM,KAAK,OAAO,KACpB4gE,EAAe,QAAQ,KAAK5gE,EAAM,IAAI;AAAA,QAE1C,GAEAyhE,EAAc,SAAS,YAAY;AACjC,gBAAMC,IAAY,IAAI,KAAKd,EAAe,SAAS,EAAE,MAAM,cAAc;AAGzE,UAAAzzB,EAAO,YAAY,QAAQ,CAAA00B,MAASA,EAAM,MAAM,GAGhDnB,EAAkB,EAAI;AACtB,cAAI;AACF,kBAAMlB,IAAY,IAAI,KAAK,CAACkC,CAAS,GAAG,kBAAkB,EAAE,MAAM,cAAc,GAC1E82G,IAAgB,MAAMj5G,GAAgBC,CAAS;AAErD,gBAAIg5G,GAAe;AACjB,kBAAIr2J,MAAU;AACZ,gBAAAkO,EAAK,SAAS,SAASmoJ,CAAa;AAAA,mBAC/B;AACL,sBAAMC,IAAcpoJ,EAAK,UAAU,aAAa,KAAK;AACrD,gBAAAA,EAAK,SAAS,eAAeooJ,IAAc,GAAGA,CAAW;AAAA;AAAA,EAAOD,CAAa,KAAKA,CAAa;AAAA,cACjG;AACA,cAAAjxI,GAAM,QAAQ7zD,GAAU,iCAAiC,CAAC;AAAA,YAC5D;AAAA,UACF,SAAS7d,GAAO;AACd,oBAAQ,MAAM,6BAA6BA,CAAK,GAChD0xE,GAAM,MAAM7zD,GAAU,4BAA4B,CAAC;AAAA,UACrD,UAAA;AACE,YAAAgtF,EAAkB,EAAK;AAAA,UACzB;AAAA,QACF,GAEAe,EAAc,MAAA,GACdjB,EAAe,EAAI,GACnBj5B,GAAM,KAAK7zD,GAAU,kCAAkC,CAAC;AAAA,MAC1D,SAAS7d,GAAO;AACd,gBAAQ,MAAM,6BAA6BA,CAAK,GAChD0xE,GAAM,MAAM7zD,GAAU,iEAAiE,CAAC;AAAA,MAC1F;AAAA,EAEJ;AAEA,+BACG4kC,IAAA,EAAO,MAAAQ,GAAY,cAAAJ,GAClB,UAAA54C,gBAAAA,EAAAA,KAACm6C,IAAA,EAAc,WAAU,iDACvB,UAAA;AAAA,IAAAp6C,gBAAAA,EAAAA,IAACi9C,MACC,UAAAj9C,gBAAAA,EAAAA,IAACo7C,IAAA,EAAY,gCAAC5lC,IAAA,EAAE,UAAA,aAAA,CAAU,GAAI,EAAA,CAChC;AAAA,IAEAxV,gBAAAA,EAAAA,IAACixD,IAAA,EAAM,GAAGT,GACR,UAAAvwD,gBAAAA,EAAAA,KAAC,QAAA,EAAK,UAAUuwD,EAAK,aAAagxC,CAAQ,GAAG,WAAU,aACrD,UAAA;AAAA,MAAAvhG,gBAAAA,EAAAA,KAACg3D,IAAA,EAAK,cAAa,YAAW,WAAU,UACtC,UAAA;AAAA,QAAAh3D,gBAAAA,EAAAA,KAACu3D,IAAA,EAAS,WAAU,2BAClB,UAAA;AAAA,UAAAx3D,gBAAAA,EAAAA,IAAC43D,MAAY,OAAM,YAAW,UAAA53D,gBAAAA,MAACwV,IAAA,EAAE,sBAAQ,EAAA,CAAI;AAAA,UAC7CvV,gBAAAA,EAAAA,KAAC23D,IAAA,EAAY,OAAM,eACjB,UAAA;AAAA,YAAA53D,gBAAAA,EAAAA,IAACkiG,IAAA,EAAS,WAAU,eAAA,CAAe;AAAA,YACnCliG,gBAAAA,EAAAA,IAACwV,MAAE,UAAA,cAAA,CAAW;AAAA,UAAA,EAAA,CAChB;AAAA,QAAA,GACF;AAAA,QAEAvV,gBAAAA,EAAAA,KAACm4D,IAAA,EAAY,OAAM,YAAW,WAAU,aACtC,UAAA;AAAA,UAAAp4D,gBAAAA,EAAAA;AAAAA,YAACmxD;AAAA,YAAA;AAAA,cACC,SAASX,EAAK;AAAA,cACd,MAAK;AAAA,cACL,QAAQ,CAAC,EAAE,OAAAlO,EAAA,6BACRkP,IAAA,EACC,UAAA;AAAA,gBAAAxxD,gBAAAA,MAACyxD,IAAA,EAAU,UAAAzxD,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,UAAA,QAAA,CAAK,GAAI;AAAA,gBACvBvV,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,kBAAAD,gBAAAA,EAAAA,IAAC2xD,IAAA,EACC,gCAACvU,IAAA,EAAM,aAAavpC,GAAU,aAAa,GAAI,GAAGyuC,EAAA,CAAO,EAAA,CAC3D;AAAA,kBACAtiD,gBAAAA,EAAAA;AAAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,SAAS,MAAM2hG,EAAiB,OAAO;AAAA,sBACvC,UAAUf;AAAA,sBACV,WAAU;AAAA,sBAET,UAAAA,IACC5gG,gBAAAA,EAAAA,IAACqiG,IAAA,EAAQ,WAAU,wBAAuB,IACxC3B,IACF1gG,gBAAAA,EAAAA,IAACsiG,IAAA,EAAO,WAAU,wBAAuB,IAEzCtiG,gBAAAA,EAAAA,IAACuiG,IAAA,EAAI,WAAU,UAAA,CAAU;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAE7B,GACF;AAAA,sCACCxwC,IAAA,CAAA,CAAY;AAAA,cAAA,EAAA,CACf;AAAA,YAAA;AAAA,UAAA;AAAA,UAIJ/xD,gBAAAA,EAAAA;AAAAA,YAACmxD;AAAA,YAAA;AAAA,cACC,SAASX,EAAK;AAAA,cACd,MAAK;AAAA,cACL,QAAQ,CAAC,EAAE,OAAAlO,EAAA,6BACRkP,IAAA,EACC,UAAA;AAAA,gBAAAxxD,gBAAAA,MAACyxD,IAAA,EAAU,UAAAzxD,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,UAAA,cAAA,CAAW,GAAI;AAAA,gBAC7BvV,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,kBAAAD,gBAAAA,MAAC2xD,IAAA,EACC,UAAA3xD,gBAAAA,EAAAA;AAAAA,oBAACsiE;AAAAA,oBAAA;AAAA,sBACC,OAAOhgB,EAAM,SAAS;AAAA,sBACtB,UAAUA,EAAM;AAAA,sBAChB,aAAazuC,GAAU,uCAAuC;AAAA,sBAC9D,WAAU;AAAA,oBAAA;AAAA,kBAAA,GAEd;AAAA,kBACA7T,gBAAAA,EAAAA;AAAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,SAAS,MAAM2hG,EAAiB,aAAa;AAAA,sBAC7C,UAAUf;AAAA,sBACV,WAAU;AAAA,sBAET,UAAAA,IACC5gG,gBAAAA,EAAAA,IAACqiG,IAAA,EAAQ,WAAU,wBAAuB,IACxC3B,IACF1gG,gBAAAA,EAAAA,IAACsiG,IAAA,EAAO,WAAU,wBAAuB,IAEzCtiG,gBAAAA,EAAAA,IAACuiG,IAAA,EAAI,WAAU,UAAA,CAAU;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAE7B,GACF;AAAA,sCACCxwC,IAAA,CAAA,CAAY;AAAA,cAAA,EAAA,CACf;AAAA,YAAA;AAAA,UAAA;AAAA,UAIJ/xD,gBAAAA,EAAAA;AAAAA,YAACmxD;AAAA,YAAA;AAAA,cACC,SAASX,EAAK;AAAA,cACd,MAAK;AAAA,cACL,QAAQ,CAAC,EAAE,OAAAlO,QACTriD,gBAAAA,EAAAA,KAACuxD,IAAA,EAAS,WAAU,oEAClB,UAAA;AAAA,gBAAAvxD,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,kBAAAD,gBAAAA,EAAAA,IAACyxD,MAAU,WAAU,aAAY,UAAAzxD,gBAAAA,MAACwV,IAAA,EAAE,wBAAU,EAAA,CAAI;AAAA,wCACjD,OAAA,EAAI,WAAU,iCACb,UAAAxV,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,+CAAiC,EAAA,CACtC;AAAA,gBAAA,GACF;AAAA,sCACCm8C,IAAA,EACC,UAAA3xD,gBAAAA,EAAAA;AAAAA,kBAAC05D;AAAA,kBAAA;AAAA,oBACC,SAASpX,EAAM;AAAA,oBACf,iBAAiBA,EAAM;AAAA,kBAAA;AAAA,gBAAA,EACzB,CACF;AAAA,cAAA,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,QAEJ,GACF;AAAA,QAEAtiD,gBAAAA,EAAAA,IAACo4D,MAAY,OAAM,eAAc,WAAU,aACxC,UAAA4oC,IACChhG,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,yCACb,gCAACqiG,IAAA,EAAQ,WAAU,uBAAA,CAAuB,EAAA,CAC5C,IACEniC,EAAY,WAAW,IACzBjgE,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,UAAAD,gBAAAA,EAAAA,IAACkiG,IAAA,EAAS,WAAU,oCAAA,CAAoC;AAAA,UACxDliG,gBAAAA,MAAC,KAAA,EAAE,UAAAA,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,gCAAkB,GAAI;AAAA,gCAC3B,KAAA,EAAE,WAAU,WAAU,UAAAxV,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,+DAAiD,EAAA,CAAI;AAAA,QAAA,EAAA,CACjF,0BAEC,OAAA,EAAI,WAAU,aACZ,UAAA0qD,EAAY,IAAI,CAAC+B,MAChBjiE,gBAAAA,EAAAA,IAAC28D,MAAyB,WAAU,uDAClC,gCAACI,IAAA,EAAY,WAAU,OACrB,UAAA98D,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,UAAAD,gBAAAA,EAAAA;AAAAA,YAACk8D;AAAA,YAAA;AAAA,cACC,SAASsE,EAAoB,IAAIyB,EAAW,EAAE;AAAA,cAC9C,iBAAiB,MAAMq2I,EAAuBr2I,EAAW,EAAE;AAAA,YAAA;AAAA,UAAA;AAAA,UAE7DhiE,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,UACb,UAAA;AAAA,YAAAD,gBAAAA,EAAAA,IAAC,MAAA,EAAG,WAAU,eAAe,UAAAiiE,EAAW,MAAK;AAAA,YAC5CA,EAAW,eACVjiE,gBAAAA,EAAAA,IAAC,OAAE,WAAU,8CACV,YAAW,YAAA,CACd;AAAA,UAAA,EAAA,CAEJ;AAAA,QAAA,EAAA,CACF,GACF,EAAA,GAhBSiiE,EAAW,EAiBtB,CACD,GACH,EAAA,CAEJ;AAAA,MAAA,GACF;AAAA,MAEAhiE,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,8BACb,UAAA;AAAA,QAAAD,gBAAAA,EAAAA,IAAC+U,IAAA,EAAO,MAAK,UAAS,SAAQ,WAAU,SAAS,MAAM8jC,EAAa,EAAK,GACvE,UAAA74C,gBAAAA,MAACwV,IAAA,EAAE,oBAAM,GACX;AAAA,8BACCT,IAAA,EAAO,MAAK,UAAS,UAAU4xD,GAC7B,cACC1mE,gBAAAA,EAAAA,KAAA+6C,EAAAA,UAAA,EACE,UAAA;AAAA,UAAAh7C,gBAAAA,EAAAA,IAACqiG,IAAA,EAAQ,WAAU,4BAAA,CAA4B;AAAA,UAC/CriG,gBAAAA,EAAAA,IAACwV,MAAE,UAAA,cAAA,CAAW;AAAA,QAAA,EAAA,CAChB,IAEAxV,gBAAAA,EAAAA,IAACwV,IAAA,EAAE,UAAA,eAAA,CAAY,EAAA,CAEnB;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ,GCpZaqjM,KAAc;AAAA,EACzB,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,cAAc;AAAA,EACd,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,eAAe;AACjB;AAKO,SAASC,GAAmB5hN,GAA4C;AAC7E,SAAI,CAACA,KAAQA,MAAS2hN,GAAY,iBACzBA,GAAY,iBAEd3hN;AACT;AAGO,SAAS6hN,GAAY7hN,GAA0B;AACpD,SAAOA,MAAS2hN,GAAY,aAAa3hN,MAAS2hN,GAAY,WAAW3hN,MAAS2hN,GAAY,UAAU3hN,MAAS2hN,GAAY;AAC/H;AAqEO,SAASG,IAAgBz5K,GAAa05K,GAAuB;AAElE,SAAI15K,EAAI,SAAS,cAAc,IACtBs5K,GAAY,eAIjBt5K,EAAI,SAAS,gBAAgB,KAAKA,EAAI,SAAS,OAAO,IACjDs5K,GAAY,YAIjBt5K,EAAI,SAAS,aAAa,KAAKA,EAAI,SAAS,UAAU,IACjDs5K,GAAY,UAIjBt5K,EAAI,SAAS,YAAY,IACpBs5K,GAAY,SAIjBI,MAASA,EAAK,gBAAgBA,EAAK,mBAC9BJ,GAAY,YAIdA,GAAY;AACrB;ACKA,MAAMK,MAAsB,CAAC,GAAG,MAAM,KAAK,MAAM,GAAG,KAAK,GAAG,CAAC;;AAC7D,MAAMC,WAA4B1+M,GAAU;AAAA,EAe1C,cAAc;AACZ,UAAK;AAhBT,IAAAs8I,EAAA,MAAAqiE;AAKE,IAAAriE,EAAA,MAAAgZ;AACA,IAAAhZ,EAAA,MAAAs/C;AACA,IAAAt/C,EAAA,MAAAE;AAUE,IAAAC,EAAA,MAAKD,IAAc,IAAI+/C,GAAoB,IAC3C7/C,EAAA,MAAKF,IAAY,gBAAgBqC,EAAA,MAAK8/D,IAAA9tB,IAAe,KAAK,IAAI;AAAA,EAChE;AAAA,EAXA,IAAI,QAAQ;AACV,WAAOn0C,EAAA,MAAKF,IAAY;AAAA,EAC1B;AAAA,EACA,IAAI,WAAW;AACb,UAAM,EAAE,OAAAoiE,EAAK,IAAK,KAAK,QAAQ,EAAE,iBAAAhuC,EAAe,IAAKl0B,EAAA,MAAK4Y,IAAO;AACjE,WAAO,CAACsb,EAAe,KAAMguC,EAAK,EAAG,WAAW;AAAA,EAClD;AAAA,EAMA,UAAU;AACR,IAAAniE,EAAA,MAAK6Y,IAASvF,GAAe,IACzBjS,GAAmBi5C,EAAW,KAChCt6C,EAAA,MAAKm/C,IAAQ/gL,GAAWk8K,EAAW;AAAA,EAEvC;AAAA,EACA,UAAU1nK,GAAI;AACZ,IAAAwM,EAAOgjH,EAAA,MAAK8/D,IAAAl0B,IAAY,KAAK,IAAI,CAAC,GAClC5uJ,EAAOgjH,EAAA,MAAK8/D,IAAAE,IAAe,KAAK,IAAI,CAAC,GACrChjL,EAAOgjH,EAAA,MAAK8/D,IAAAG,IAAyB,KAAK,IAAI,CAAC;AAAA,EACjD;AAAA,EACA,aAAa;AACX,UAAM,EAAE,OAAAF,GAAO,aAAAG,EAAW,IAAK,KAAK;AACpC,WAAOH,EAAK,EAAG,IAAI,CAAChuD,OAAU;AAAA,MAC5B,OAAOA,MAAS,KAAKA,MAAS,OAAOmuD,IAAc,OAAOnuD,IAAO,GAAG,IAAI;AAAA,MACxE,OAAOA,EAAK,SAAQ;AAAA,IAC1B,EAAM;AAAA,EACJ;AAqBF;AArDE0E,KAAA,eACAsmC,KAAA,eACAp/C,KAAA,eAPFmiE,KAAA,eAsCEl0B,KAAW,WAAG;AACZ,EAAA/tC,EAAA,MAAKF,IAAY,QAAQqC,EAAA,MAAK8/D,IAAAnsB,IAAL;AAC3B,GACAqsB,KAAc,WAAG;;AACf,QAAM,EAAE,aAAAE,EAAW,IAAK,KAAK,QAAQ,EAAE,WAAAnxC,MAAclxB,EAAA,MAAK4Y,IAAO,QAAQ1E,IAAOgd,EAAS;AACzF,GAAAzlK,IAAAu0I,EAAA,MAAKk/C,QAAL,QAAAzzL,EAAY,KAAK,IAAIyoJ,MAAS,KAAKA,KAAQ,OAAOmuD,EAAW,IAAK,OAAOnuD,IAAO,GAAG,IAAI;AACzF,GACAkuD,KAAwB,WAAG;;AACzB,GAAA32M,IAAAu0I,EAAA,MAAKk/C,QAAL,QAAAzzL,EAAY,QAAQ,KAAK;AAC3B,GACAqqL,KAAS,WAAG;;AACV,QAAM,EAAE,WAAA5kB,EAAS,IAAKlxB,EAAA,MAAK4Y,IAAO;AAClC,WAAOntJ,IAAAylK,EAAS,MAAT,gBAAAzlK,EAAa,eAAc;AACpC,GACA0oL,KAAc,SAACxvL,GAAOonD,GAAS;AAC7B,MAAI,KAAK,SAAU;AACnB,QAAMmoG,IAAO,CAACvvJ;AACd,EAAAq7I,EAAA,MAAK4Y,IAAO,OAAO,gBAAgB1E,GAAMnoG,CAAO,GAChD,KAAK,SAAS,UAAU,EAAE,QAAQmoG,GAAM,SAAAnoG,GAAS;AACnD,GAxDAppC,EADIq/L,IACG,SAAQ;AAAA,EACb,aAAa;AAAA,EACb,OAAOD;AACX;AAuDA,MAAMO,KAA6BN,GAAoB;AACvDx7L,GAAK87L,IAA4B,OAAO;AACxC97L,GAAK87L,IAA4B,UAAU;AAC3CttJ,GAAOstJ,IAA4B,YAAY;AAE/C,MAAMC,MAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEMC,MAAoBj7D,GAAqBq9C,IAAqB;AAAA,EAClE,QAAQ2d;AAAA,EACR,aAAa;AAAA,EACb,gBAAgB;AAClB,CAAC,GACKxiC,KAActiL,EAAM;AAAA,EACxB,CAAC,EAAE,aAAAmpG,GAAa,UAAAp+F,GAAU,GAAG/G,EAAK,GAAIuiJ,MACb,gBAAAvmJ,EAAM;AAAA,IAC3B+kN;AAAA,IACA;AAAA,MACE,GAAG/gN;AAAA,MACH,KAAKA,EAAM;AAAA,MACX,KAAKuiJ;AAAA,MACL,OAAO;AAAA,QACL,aAAAp9C;AAAA,QACA,GAAGnlG,EAAM;AAAA,MACnB;AAAA,IACA;AAAA,IACM,CAAC2P,MAA2B,gBAAA3T,EAAM,cAAc4uC,GAAU,KAAK,EAAE,GAAGj7B,EAAM,GAAI5I,CAAQ;AAAA,EAC5F;AAEA;AACAu3K,GAAY,cAAc;AAE1B,MAAM0iC,MAAsBl7D,GAAqBs9C,EAAqB,GAChExgB,KAAgB5mL,EAAM;AAAA,EAC1B,CAAC,EAAE,SAAAgkL,IAAU,CAAA,GAAI,UAAAj5K,GAAU,aAAAk6M,GAAa,YAAAC,GAAY,GAAGlhN,EAAK,GAAIuiJ,MAAe;AAC7E,UAAM4+D,IAAenlN,EAAM,QAAQ,MAAMgkL,EAAQ,IAAI,CAACohC,MAAW,IAAIA,EAAM,CAAE,GAAGphC,CAAO;AACvF,WAAuB,gBAAAhkL,EAAM,cAAcglN,KAAqB,EAAE,GAAGhhN,GAAO,SAASmhN,GAAc,KAAK5+D,EAAU,GAAI,CAAC5yI,GAAQ4uG,MAA6B,gBAAAviH,EAAM,cAAc,OAAO,EAAE,GAAG2T,EAAM,GAAoB,gBAAA3T,EAAM,cAAcqlN,IAAa,EAAE,UAAU9iG,GAAU,YAAA2iG,GAAY,aAAAD,EAAW,CAAE,GAAGl6M,CAAQ,CAAC;AAAA,EACpT;AACF;AACA67K,GAAc,cAAc;AAC5B,SAASy+B,GAAY,EAAE,UAAAriN,GAAU,YAAAkiN,GAAY,aAAAD,EAAW,GAAI;AAC1D,QAAM,EAAE,SAAAtgC,GAAS,aAAAnsC,GAAa,QAAAqmC,GAAQ,oBAAA3L,GAAoB,gBAAAnX,GAAgB,UAAAuF,EAAQ,IAAKxY,GAAgBoM,EAAU,GAAG,EAAE,QAAA4a,MAAW9sK,EAAS,QAAQ,EAAE,WAAWsiN,GAAY,gBAAgBC,EAAe,IAAK9L,GAAiB,GAAI+L,IAAWz8D,GAAU47B,CAAO,GAAG8gC,IAAkB18D,GAAUgT,CAAc,GAAG+wC,IAAe/jD,GAAUvQ,CAAW,GAAGktE,IAAU38D,GAAU81B,CAAM,GAAG8mC,IAAU58D,GAAU+mB,CAAM,GAAG4W,IAAY39B,GAAUu8D,CAAU,GAAGM,IAAiB78D,GAAUw8D,CAAe,GAAGM,IAAc98D,GAAUmqB,CAAkB,GAAG4yC,IAAaH,KAAA,gBAAAA,EAAS,aAAaxR,IAAYprD,GAAUuY,CAAQ,GAAGykD,IAAc5R,MAAc,SAAS6R,KAAiBL,KAAA,gBAAAA,EAAS,UAAS,WAAWM,KAAeN,KAAA,gBAAAA,EAAS,UAAS,SAASO,IAAUF,KAAkBC,GAAcE,KAAaR,KAAA,gBAAAA,EAAS,UAAS,YAAYS,KAAeT,KAAA,gBAAAA,EAAS,UAAS,eAAe,CAACU,GAAqBC,CAAsB,IAAItmN,EAAM,SAAS,EAAE,GAAG,CAACumN,GAAYC,CAAa,IAAIxmN,EAAM,SAAS,EAAK;AAU18B,SATAA,EAAM,UAAU,MAAM;AACpB,IAAI,CAAComN,KAAgBC,KACrB,QAAA,QAAA,EAAA,KAAA,MAAAI,EAAA,EAAwC,KAAK,SAAUpnN,GAAG;AAAE,aAAOA,EAAE;AAAA,IAAY,CAAC,EAAE,KAAK,CAACqnN,MAAQ;AAChG,MAAAJ,EAAuBI,EAAI,OAAO;AAAA,IACpC,CAAC;AAAA,EACH,GAAG,CAACN,CAAY,CAAC,GACjBpmN,EAAM,UAAU,MAAM;AACpB,IAAAwmN,EAAc,EAAI;AAAA,EACpB,GAAG,CAAA,CAAE,GACDJ,IACqB,gBAAApmN,EAAM;AAAA,IAC3B;AAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,KAAK,CAACk1B,MAAO;AACX,QAAAlyB,EAAS,KAAKkyB,CAAE;AAAA,MAClB;AAAA,IACR;AAAA,IACsB,gBAAAl1B,EAAM,cAAcm3M,IAAM,EAAE,OAAOkP,EAAmB,CAAE;AAAA,IACxER,KAAA,QAAAA,EAAa,aAA6B,gBAAA7lN,EAAM,cAAc,QAAQ,EAAE,WAAW,uBAAsB,GAAI,kBAAkB,KAAqB,gBAAAA,EAAM,cAAc,QAAQ,EAAE,WAAW,iCAAiC6lN,EAAY,UAAU,CAAC,IAAI;AAAA,EAC/P,IAEMM,IACqB,gBAAAnmN,EAAM,cAAc,OAAO,EAAE,wBAAwB,GAAI,GAAoB,gBAAAA,EAAM;AAAA,IACxG;AAAA,IACA;AAAA,MACE,2BAA2B;AAAA,MAC3B,KAAK,CAACk1B,MAAO;AACX,QAAAlyB,EAAS,KAAKkyB,CAAE;AAAA,MAClB;AAAA,IACR;AAAA,IACMw1K,GAAmBhkB,CAAS,KAAKk/B,IAAiB5lN,EAAM,cAAc0mL,EAAU,MAAM,IAAI;AAAA,EAChG,CAAK,IAEIw/B,IAAUlmN,EAAM;AAAA,IACrBA,EAAM;AAAA,IACN;AAAA,IACAA,EAAM,cAAc,UAAU;AAAA,MAC5B,GAAGilN;AAAA,MACH,YAAYA,KAAA,QAAAA,EAAa,YAAY,GAAGA,EAAY,SAAS,MAAM,MAAMe,IAAiB,gBAAgB;AAAA,MAC1G,0BAA0B;AAAA,MAC1B,UAAWP,IAAuB,SAAL;AAAA,MAC7B,eAAe;AAAA,MACf,oBAAqBA,IAAuB,SAAL;AAAA,MACvC,IAAIvwL,GAAI;AACN,QAAAlyB,EAAS,KAAKkyB,CAAE;AAAA,MAClB;AAAA,IACN,CAAK;AAAA,IACD,CAACuwL,KAAmB,CAACM,IAAc/lN,EAAM,cAAc,OAAO,EAAE,WAAW,cAAa,CAAE,IAAI;AAAA,EAClG,IAAM8lN,IAAa9lN,EAAM,cAAc8lN,MAAe,UAAU,UAAU,SAAS;AAAA,IAC/E,GAAGZ;AAAA,IACH,UAAUO,IAAkB,KAAO;AAAA,IACnC,aAAa,OAAO3Y,KAAiB,YAAY,KAAKA;AAAA,IACtD,QAAQgZ,MAAe,WAAWL,KAAmBC,IAAUA,IAAU;AAAA,IACzE,0BAA0B;AAAA,IAC1B,UAAWa,IAEP,OAFoBf,EAAS;AAAA,MAC/B,CAAC,EAAE,KAAA75M,GAAK,MAAArJ,QAAW4oD,GAASv/C,CAAG,IAAoB,gBAAA3L,EAAM,cAAc,UAAU,EAAE,KAAA2L,GAAK,MAAMrJ,MAAS,MAAMA,IAAO,QAAQ,KAAKqJ,EAAG,CAAE,IAAI;AAAA,IAChJ;AAAA,IACI,IAAIupB,GAAI;AACN,MAAAlyB,EAAS,KAAKkyB,CAAE;AAAA,IAClB;AAAA,EACJ,CAAG,IAAI;AACP;AACAmwL,GAAY,cAAc;AAiB1B,MAAMsB,MAAqB78D,GAAqB29C,EAAoB,GAC9Dvc,MAAelrL,EAAM;AAAA,EACzB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM,cAAc2mN,KAAoB,EAAE,GAAG3iN,KAAS,CAAC2P,MAA2B,gBAAA3T,EAAM;AAAA,IAC7G4uC,GAAU;AAAA,IACV;AAAA,MACE,GAAGj7B;AAAA,MACH,KAAKxB,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,IAC/C;AAAA,IACMx7I;AAAA,EACN,CAAK;AAEL;AACAmgL,IAAa,cAAc;AAE3B,MAAM07B,MAAe98D,GAAqBsgD,EAAc,GAClDC,MAASrqM,EAAM;AAAA,EACnB,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MACA,gBAAAvmJ,EAAM;AAAA,IAC3B4mN;AAAA,IACA;AAAA,MACE,KAAK5iN,EAAM,WAAWhE,EAAM,eAAe+K,CAAQ,IAAIA,EAAS,MAAM,MAAM;AAAA,MAC5E,GAAG/G;AAAA,IACX;AAAA,IACM,CAAC2P,GAAQ4uG,MAA6B,gBAAAviH,EAAM;AAAA,MAC1C6mN;AAAA,MACA;AAAA,QACE,GAAGlzM;AAAA,QACH,UAAA4uG;AAAA,QACA,KAAKpwG,GAAYwB,EAAO,KAAK4yI,CAAU;AAAA,MACjD;AAAA,MACQx7I;AAAA,IACR;AAAA,EACA;AAEA;AACAs/L,IAAO,cAAc;AACrB,MAAMwc,KAAY7mN,EAAM;AAAA,EACtB,CAAC,EAAE,UAAAuiH,GAAU,UAAAx3G,GAAU,GAAG/G,EAAK,GAAIuiJ,MAAe;AAChD,UAAM,EAAE,KAAA56I,GAAK,KAAA2nI,GAAK,KAAApmI,GAAK,aAAAsrI,GAAa,QAAAg2C,EAAM,IAAKjsE,EAAS,QAAQsqF,IAAO9jD,GAAUp9I,CAAG,GAAGm7M,IAAO/9D,GAAU77I,CAAG,GAAG4/L,IAAe/jD,GAAUvQ,CAAW,GAAGuuE,IAAUh+D,GAAUylC,CAAM;AAC/K,WAAuB,gBAAAxuL,EAAM;AAAA,MAC3B4uC,GAAU;AAAA,MACV;AAAA,QACE,GAAG5qC;AAAA,QACH,KAAK6oM,KAAQ;AAAA,QACb,KAAKia,KAAQ;AAAA,QACb,aAAaha,KAAgB;AAAA,QAC7B,KAAK36L,GAAYmhI,EAAI,KAAKiT,CAAU;AAAA,QACpC,OAAO,EAAE,SAASwgE,IAAU,SAAS,OAAM;AAAA,MACnD;AAAA,MACMh8M;AAAA,IACN;AAAA,EACE;AACF;AACA87M,GAAU,cAAc;AAExB,MAAMp/J,MAAOznD,EAAM,WAAW,CAAC,EAAE,UAAA+K,GAAU,GAAG/G,EAAK,GAAIuiJ,MAC9B,gBAAAvmJ,EAAM;AAAA,EAC3B4uC,GAAU;AAAA,EACV;AAAA,IACE,WAAW;AAAA,IACX,aAAa;AAAA,IACb,eAAe;AAAA,IACf,GAAG5qC;AAAA,IACH,KAAKuiJ;AAAA,EACX;AAAA,EACIx7I;AACJ,CACC;AACD08C,IAAK,cAAc;AACnB,MAAMu/J,MAAOhnN,EAAM,WAAW,CAACgE,GAAOuiJ,MAAe;AACnD,QAAMu2B,IAAYmuB,GAAc,WAAW,GAAG,CAACgc,GAAWC,CAAY,IAAIlnN,EAAM,SAAQ;AACxF,SAAAA,EAAM,UAAU,MAAM;AACpB,QAAI,CAAC88K,EAAW;AAChB,aAASzR,IAAc;AACrB,MAAA67C,EAAapqC,KAAA,gBAAAA,EAAW,WAAW,EAAE;AAAA,IACvC;AACA,WAAAA,EAAU,iBAAiB,cAAczR,CAAW,GAC7C,MAAM;AACX,MAAAyR,EAAU,oBAAoB,cAAczR,CAAW,GACvD67C,EAAa,MAAM;AAAA,IACrB;AAAA,EACF,GAAG,CAACpqC,CAAS,CAAC,GACS,gBAAA98K,EAAM;AAAA,IAC3B4uC,GAAU;AAAA,IACV;AAAA,MACE,GAAG5qC;AAAA,MACH,aAAa;AAAA,MACb,yBAAyB;AAAA,QACvB,SAAQijN,KAAA,gBAAAA,EAAW,SAAQ;AAAA,MACnC;AAAA,MACM,KAAK1gE;AAAA,IACX;AAAA,EACA;AACA,CAAC;AACDygE,IAAK,cAAc;ACzanB,MAAMG,MAAY,CAAC;AAAA,EACjB,SAAAt2C;AAAA,EACA,UAAAu2C;AAAA,EACA,cAAAC;AAAA,EACA,OAAA38G;AAAA,EACA,QAAA6vC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,aAAA/iH;AAAA,EACA,SAAAuvC;AAAA,EACA,QAAAyzE;AAAA,EACA,UAAAC;AAAA,EACA,eAAAysE,IAAgB;AAAA,EAChB,iBAAAtsE;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,gBAAAssE,IAAiB;AAAA,EAEjB,YAAAC;AAAA,EACA,KAAA/uD;AAAA,EACA,SAAA1jJ,IAAU;AAAA,EACV,QAAAhJ;AACF,MAAsB;AACpB,QAAM,EAAE,MAAAk/D,EAAA,IAASxqD,GAAA;AACA,EAAAsiB,GAAA;AACjB,QAAMv8B,IAAWihN,GAAA,GACX,CAACnsE,GAAcC,CAAe,IAAIrvI,GAASyuI,CAAO,GAClD,CAACa,GAAYC,CAAa,IAAIvvI,GAASuuI,CAAK,GAC5C,CAACloE,GAAYC,CAAa,IAAItmE,GAAS,EAAK,GAC5C,CAAC8vI,GAAcC,CAAe,IAAI/vI,GAAiB,CAAC,GACpD,CAACw7M,GAAWC,CAAY,IAAIz7M,GAAS,EAAK,GAC1C,CAACwvI,GAAeC,CAAgB,IAAIzvI,GAAS,EAAK,GAClDgqJ,IAASjoF,GAA4B,IAAI;AAG/C,EAAA3hE,GAAU,OACR,QAAQ,IAAI,cAAcukK,CAAO,WAAW,IACnB,MAAM;;AAC7B,IAAI62C,KACF,QAAQ,IAAI,cAAc72C,CAAO,kCAAkC,GAErE82C,EAAa,EAAK,IAClB35M,KAAAkoJ,EAAO,YAAP,QAAAloJ,GAAgB;AAAA,EAClB,GAEA,GAEO,MAAM;;AACX,YAAQ,IAAI,cAAc6iK,CAAO,+BAA+B,IAChE7iK,KAAAkoJ,EAAO,YAAP,QAAAloJ,GAAgB;AAAA,EAClB,IACC,CAACxH,EAAS,QAAQ,CAAC;AACtB,QAAM,CAACohN,GAAkBC,EAAmB,IAAI37M,GAAwD,SAAS,GAC3G,CAACilM,IAAU2W,EAAW,IAAI57M,GAAS,CAAC,GACpC,CAAC67M,IAAWC,EAAY,IAAI97M,GAAc,IAAI,GAE9CgwI,MAAUjxE,KAAA,gBAAAA,EAAM,QAAOuvE,GAEvBytE,KADY7D,IAAgBgD,CAAQ,MACJnD,GAAY,cAG5CiE,MAAa,MAAM;AACvB,QAAKb;AAEL,aAAIY,KACKZ,IAIF,GAAGA,CAAY;AAAA,EACxB,GAAA,GAkBMc,MAd4B,CAACx9K,OAAgB;AACjD,QAAIs9K,GAAiB,QAAOt9K;AAE5B,QAAI;AACF,YAAMy9K,KAAS,IAAI,IAAIz9K,EAAG;AAC1B,aAAAy9K,GAAO,aAAa,IAAI,kBAAkBd,CAAa,GAChDc,GAAO,SAAA;AAAA,IAChB,QAAQ;AAEN,YAAM/vM,KAAYsyB,GAAI,SAAS,GAAG,IAAI,MAAM;AAC5C,aAAO,GAAGA,EAAG,GAAGtyB,EAAS,kBAAkBivM,CAAa;AAAA,IAC1D;AAAA,EACF,GAE8CF,CAAQ;AAGtD,EAAA96M,GAAU,MAAM;AAMd,KAL0B,YAAY;AAAA,IAGtC,GAEA;AAAA,EAEF,GAAG,CAACukK,GAAS30B,IAASjxE,CAAI,CAAC,GAG3B3+D,GAAU,MAAM;AACd,QAAI,CAAC27M,GAAiB;AAGtB,QAAIxvD,GAAK;AACP,UAAIA,EAAI,WAAW,aAAa;AAC9B,QAAAovD,GAAoB,WAAW;AAG/B;AAAA,MACF;AACA,UAAIpvD,EAAI,WAAW,UAAU;AAC3B,QAAAovD,GAAoB,QAAQ;AAC5B;AAAA,MACF;AAEA,MAAAA,GAAoB,QAAQ,GAC5BC,GAAYrvD,EAAI,YAAY,CAAC;AAAA,IAC/B;AAIA,UAAMh0J,KAAQ2iN,EAAS,MAAM,iCAAiC,MAAM3uD,IAAM,CAAC,MAAMA,EAAI,EAAE,IAAI;AAC3F,QAAI,CAACh0J,GAAO;AAEZ,UAAM4jN,KAAQ5jN,GAAM,CAAC;AAGrB,QAAI6sJ,KAAuD;AAI3D,KAAI81D,EAAS,WAAW,GAAG,KAAKA,EAAS,SAAS,OAAO,SAAS,MAAM,OACtE91D,KAAU,OAAO,SAAS;AAG5B,QAAIg3D,IAAkC,MAClC/7M,IAAY;AA2DhB,YAzD8B,YAAY;AACxC,UAAK87M;AACL,YAAI;AACF,gBAAMj/D,KAAM,MAAM,MAAM,GAAGkI,EAAO,oBAAoB+2D,EAAK,EAAE;AAC7D,cAAI,CAACj/D,GAAI,GAAI,OAAM,IAAI,MAAM,qBAAqB;AAClD,gBAAMp9I,IAAO,MAAMo9I,GAAI,KAAA;AAEvB,cAAI,CAAC78I,EAAW;AAEhB,cAAIP,EAAK,WAAW,aAAa;AAC/B,YAAA67M,GAAoB,WAAW;AAC/B;AAAA,UACF,WAAW77M,EAAK,WAAW,UAAU;AACnC,YAAA67M,GAAoB,QAAQ;AAC5B;AAAA,UACF;AAGA,UAAAA,GAAoB,QAAQ;AAC5B,gBAAMU,IAAS,GAAGj3D,EAAO,oBAAoB+2D,EAAK;AAClD,UAAAC,IAAc,IAAI,YAAYC,CAAM,GAEpCD,EAAY,iBAAiB,YAAY,CAACzoN,OAAM;AAC9C,gBAAK0M;AACL,kBAAI;AACF,sBAAMP,KAAO,KAAK,MAAOnM,GAAmB,IAAI;AAChD,gBAAImM,GAAK,aAAa,UACpB87M,GAAY,KAAK,MAAM97M,GAAK,QAAQ,CAAC,GAEnCA,GAAK,WACHA,GAAK,WAAW,eAClB67M,GAAoB,WAAW,GAC/BS,KAAA,QAAAA,EAAa,WACJt8M,GAAK,WAAW,YACzB67M,GAAoB,QAAQ,GAC5BS,KAAA,QAAAA,EAAa,WAEbT,GAAoB,QAAQ;AAAA,cAGlC,SAAShhN,IAAK;AACZ,wBAAQ,MAAM,mBAAmBA,EAAG;AAAA,cACtC;AAAA,UACF,CAAC,GAEDyhN,EAAY,UAAU,CAACzoN,OAAM;AAC3B,YAAAyoN,KAAA,QAAAA,EAAa;AAAA,UAGf;AAAA,QAEF,SAASlnN,IAAO;AACd,kBAAQ,MAAM,gCAAgCA,EAAK,GAC/CmL,QAA+B,SAAS;AAAA,QAC9C;AAAA,IACF,GAEA,GAEO,MAAM;AACX,MAAAA,IAAY,IACR+7M,KACFA,EAAY,MAAA;AAAA,IAEhB;AAAA,EACF,GAAG,CAACL,IAAiBb,GAAU3uD,CAAG,CAAC;AAEnC,QAAM+vD,KAAyB,OAAO3oN,OAAwB;AAE5D,QADAA,GAAE,gBAAA,GACE,CAAC,QAAQ,qBAAqB,EAAG;AAErC,UAAM4E,KAAQ2iN,EAAS,MAAM,iCAAiC;AAC9D,QAAI,CAAC3iN,GAAO;AAEZ,UAAM4jN,KAAQ5jN,GAAM,CAAC;AAGrB,QAAI6sJ,IAAuD;AAE3D,KAAI81D,EAAS,WAAW,GAAG,KAAKA,EAAS,SAAS,OAAO,SAAS,MAAM,OACtE91D,IAAU,OAAO,SAAS;AAG5B,QAAI;AACF,YAAM,MAAM,GAAGA,CAAO,oBAAoB+2D,EAAK,IAAI;AAAA,QACjD,QAAQ;AAAA,MAAA,CACT,GACDv1I,GAAM,KAAK7zD,GAAU,kBAAkB,CAAC,GAExC47H,KAAA,QAAAA;AAAA,IACF,SAASh0I,GAAK;AACZ,cAAQ,MAAM,oBAAoBA,CAAG,GACrCisE,GAAM,MAAM7zD,GAAU,yBAAyB,CAAC;AAAA,IAClD;AAAA,EACF,GAGMk9H,KAAa,OAAOt8I,OAAwB;AAGhD,QAFAA,GAAE,gBAAA,GAEE,CAACorE,GAAM;AACT,MAAA6H,GAAM,MAAM7zD,GAAU,+BAA+B,CAAC;AACtD;AAAA,IACF;AAEA,QAAI;AACF,MAAIq8H,IAEFxoE,GAAM,KAAK,yBAAyB,IAGpCA,GAAM,KAAK,yBAAyB,GAGtC8nE,KAAA,QAAAA;AAAA,IACF,SAASx5I,IAAO;AACd,cAAQ,MAAM,wBAAwBA,EAAK,GAC3C0xE,GAAM,MAAM7zD,GAAU,uBAAuB,CAAC;AAAA,IAChD;AAAA,EACF,GAEMm9H,KAAe,OAAOv8I,OAAwB;AAGlD,QAFAA,GAAE,gBAAA,GAEE,CAACorE,KAAQ,CAACixE,IAAS;AACrB,MAAAppE,GAAM,MAAM7zD,GAAU,qCAAqC,CAAC;AAC5D;AAAA,IACF;AAEA,QAAK,QAAQA,GAAU,2EAA2E,CAAC,GAInG;AAAA,MAAAuzD,EAAc,EAAI;AAClB,UAAI;AAEF,cAAM,EAAE,MAAM08E,IAAO,OAAO7S,GAAA,IAAe,MAAMjuI,GAC9C,KAAK,UAAU,EACf,OAAO,WAAW,EAClB,GAAG,MAAMyiK,CAAO,EAChB,OAAA;AAEH,YAAIx0B,GAAY,OAAMA;AAGtB,cAAM,EAAE,OAAOC,EAAA,IAAgB,MAAMluI,GAClC,KAAK,UAAU,EACf,OAAA,EACA,GAAG,MAAMyiK,CAAO;AAEnB,YAAIv0B,EAAa,OAAMA;AAGvB,YAAI4S,MAAA,QAAAA,GAAO,WAAW;AACpB,gBAAMp7E,IAAWo7E,GAAM,UAAU,MAAM,GAAG,GACpCn7E,IAAWD,EAASA,EAAS,SAAS,CAAC,GACvCyoE,KAAgBzoE,EAASA,EAAS,SAAS,CAAC,GAE5C,EAAE,OAAO0oE,EAAA,IAAiB,MAAMpuI,GAAS,QAC5C,KAAK,QAAQ,EACb,OAAO,CAAC,GAAGmuI,EAAa,IAAIxoE,CAAQ,EAAE,CAAC;AAE1C,UAAIyoE,KACF,QAAQ,MAAM,gCAAgCA,CAAY;AAAA,QAG9D;AAEA,QAAA1pE,GAAM,QAAQ7zD,GAAU,4BAA4B,CAAC,GACrD47H,KAAA,QAAAA;AAAA,MACF,SAASz5I,IAAO;AACd,gBAAQ,MAAM,yBAAyBA,EAAK,GAC5C0xE,GAAM,MAAM7zD,GAAU,wBAAwB,CAAC;AAAA,MACjD,UAAA;AACE,QAAAuzD,EAAc,EAAK;AAAA,MACrB;AAAA;AAAA,EACF,GAEMiqE,KAAiB,YAAY;AACjC,QAAI;AACF,YAAMnyE,KAAO,SAAS,cAAc,GAAG;AACvC,MAAAA,GAAK,OAAO88I,GACZ98I,GAAK,WAAW,GAAGogC,CAAK,QACxB,SAAS,KAAK,YAAYpgC,EAAI,GAC9BA,GAAK,MAAA,GACL,SAAS,KAAK,YAAYA,EAAI,GAC9BwI,GAAM,QAAQ7zD,GAAU,wBAAwB,CAAC;AAAA,IACnD,SAAS7d,IAAO;AACd,cAAQ,MAAM,4BAA4BA,EAAK,GAC/C0xE,GAAM,MAAM7zD,GAAU,0BAA0B,CAAC;AAAA,IACnD;AAAA,EACF,GAEM01H,KAAc,CAAC90I,OAAwB;AAC3C,YAAQ,IAAI,eAAe,GAC3BA,GAAE,eAAA,GACFA,GAAE,gBAAA,GACFsnE,KAAA,QAAAA,EAAU0pG;AAAA,EACZ;AAGA,EAAAvkK,GAAU,MAAM;AACd,UAAMm8M,KAAkB,CAAC5oN,OAAa;;AAEpC,QAAImO,IADgBnO,GACJ,WAAZ,gBAAAmO,EAAoB,cAAa6iK,KAAW62C,MAC9C,QAAQ,IAAI,cAAc72C,CAAO,gCAAgC,GACjE82C,EAAa,EAAK,IAClBxzM,IAAA+hJ,EAAO,YAAP,QAAA/hJ,EAAgB;AAAA,IAEpB;AAEA,kBAAO,iBAAiB,cAAcs0M,EAAe,GAC9C,MAAM,OAAO,oBAAoB,cAAcA,EAAe;AAAA,EACvE,GAAG,CAACf,GAAW72C,CAAO,CAAC;AAEvB,QAAM63C,KAAkB,CAAC7oN,OAAwB;AAC/C,YAAQ,IAAI,cAAc,GAC1BA,GAAE,eAAA,GACFA,GAAE,gBAAA,GAGF,OAAO,cAAc,IAAI,YAAY,cAAc,EAAE,QAAQ,EAAE,UAAUgxK,EAAA,EAAQ,CAAG,CAAC,GAErF82C,EAAa,EAAI;AAAA,EACnB;AAEA,SACEt8M,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAU;AAAA,MACV,SAASspI;AAAA,MAGT,UAAA;AAAA,QAAAvpI,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAW,GAAG2J,MAAY,SAAS,kBAAkB,QAAQ,6BAC/D,UAAC2yM;AAAA;AAAA,UAsDAr8M,gBAAAA,EAAAA;AAAAA,YAACi3K;AAAA,YAAA;AAAA,cAEC,KAAKpsB;AAAA,cACL,OAAAxrD;AAAA,cACA,KACEy9G,GAAY,SAAS,OAAO,IACxB,EAAE,KAAKA,IAAa,MAAM,wBAAA,IACzB1vD,KAAA,QAAAA,EAAK,aAAaA,EAAI,WAAW,cAChC,EAAE,KAAKA,EAAI,WAAW,MAAM,wBAAA,IAC5B0vD,GAAY,SAAS,kBAAkB,IACrC,EAAE,KAAKA,IAAa,MAAM,gBAC1BA;AAAA,cAEV,QAAQD;AAAA,cACR,uBAAsB;AAAA,cACtB,UAAQ;AAAA,cACR,aAAW;AAAA,cACX,WAAW,UAAUnzM,MAAY,SAAS,WAAW,EAAE;AAAA,cAEvD,UAAA;AAAA,gBAAA3J,gBAAAA,EAAAA,IAACw7K,IAAA,EAAc;AAAA,gBACfx7K,gBAAAA,EAAAA,IAACk3M,IAAA,EAAmB,OAAOiB,KAAoB;AAAA,cAAA;AAAA,YAAA;AAAA,YAnB1C1yC;AAAA,UAAA;AAAA;AAAA;AAAA,UArDPxlK,gBAAAA,OAAA+6C,EAAAA,UAAA,EACE,UAAA;AAAA,YAAAh7C,gBAAAA,EAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAK88M,MAAa;AAAA,gBAClB,KAAKx9G;AAAA,gBACL,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAGXu9G,MAAmBL,MAAqB,eAAeA,MAAqB,mCAC1E,OAAA,EAAI,WAAU,+EACZ,UAAAA,MAAqB,WACpBx8M,gBAAAA,EAAAA,IAAC,SAAI,WAAU,2CACb,gCAAC,QAAA,EAAK,WAAU,uBAAsB,UAAA,oBAAA,CAAiB,EAAA,CACzD,IAEAC,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,mDACb,UAAA;AAAA,cAAAD,gBAAAA,EAAAA,IAACqiG,IAAA,EAAQ,WAAU,qCAAoC;AAAA,cAEvDpiG,gBAAAA,EAAAA,KAAC,QAAA,EAAK,WAAU,uBAAsB,UAAA;AAAA,gBAAA;AAAA,gBAAY8lM;AAAA,gBAAS;AAAA,cAAA,GAAC;AAAA,cAC5D9lM,gBAAAA,EAAAA;AAAAA,gBAAC8U;AAAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,WAAU;AAAA,kBACV,SAASqoM;AAAA,kBAET,UAAA;AAAA,oBAAAp9M,gBAAAA,EAAAA,IAAC+Y,IAAA,EAAE,WAAU,gBAAe;AAAA,oBAAE;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAChC,EAAA,CACF,EAAA,CAEJ;AAAA,YAIDojM,MAAmB,CAACU,MAAmBL,MAAqB,eAAeA,MAAqB,cAC/Fx8M,gBAAAA,EAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAASs9M;AAAA,gBACT,WAAU;AAAA,gBACV,cAAW;AAAA,gBAEX,UAAAt9M,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,iIACb,UAAAA,gBAAAA,EAAAA;AAAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,MAAK;AAAA,oBACL,SAAQ;AAAA,oBAER,UAAAA,gBAAAA,EAAAA,IAAC,QAAA,EAAK,GAAE,iBAAgB;AAAA,kBAAA;AAAA,gBAAA,GAE5B;AAAA,cAAA;AAAA,YAAA;AAAA,UACF,GAEJ;AAAA,WA0BJ;AAAA,QAGC6vI,KAAelmI,MAAY,UAAU,CAAC2yM,2BACpC,OAAA,EAAI,WAAU,wLACb,UAAAr8M,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,4DACb,UAAA;AAAA,UAAAA,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,YAAAD,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,+BACb,UAAAA,gBAAAA,EAAAA;AAAAA,cAACmuI;AAAA,cAAA;AAAA,gBACC,QAAQiB;AAAA,gBACR,WAAWQ;AAAA,gBACX,aAAaT;AAAA,gBACb,YAAY;AAAA,gBACZ,UAAU;AAAA,cAAA;AAAA,YAAA,GAEd;AAAA,YACAlvI,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,cAAAD,gBAAAA,EAAAA;AAAAA,gBAAC+U;AAAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,SAASg8H;AAAA,kBACT,WAAW,eAAeb,IAAe,iBAAiB,+BACxD;AAAA,kBAEF,gCAACoC,IAAA,EAAM,WAAU,WAAU,MAAMpC,IAAe,iBAAiB,OAAA,CAAQ;AAAA,gBAAA;AAAA,cAAA;AAAA,oCAE1E,QAAA,EAAK,WAAU,sBAAsB,UAAAE,GAAW;AAAA,cAEjDpwI,gBAAAA,EAAAA;AAAAA,gBAAC+U;AAAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,WAAU;AAAA,kBAEV,UAAA/U,gBAAAA,EAAAA,IAACuyI,IAAA,EAAc,WAAU,WAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,oCAEpC,QAAA,EAAK,WAAU,sBAAsB,UAAAjD,GAAS;AAAA,cAE9CwB,MACC7wI,gBAAAA,EAAAA,KAAA+6C,YAAA,EACE,UAAA;AAAA,gBAAAh7C,gBAAAA,EAAAA;AAAAA,kBAAC+U;AAAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAQ;AAAA,oBACR,SAAS,CAACtgB,OAAM;AACd,sBAAAA,GAAE,gBAAA,GACF87I,EAAiB,EAAI;AAAA,oBACvB;AAAA,oBACA,WAAU;AAAA,oBAEV,UAAAvwI,gBAAAA,EAAAA,IAACiiG,IAAA,EAAM,WAAU,WAAU;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAG7BjiG,gBAAAA,EAAAA;AAAAA,kBAAC+U;AAAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAQ;AAAA,oBACR,SAASi8H;AAAA,oBACT,UAAU7pE;AAAA,oBACV,WAAU;AAAA,oBAEV,UAAAnnE,gBAAAA,EAAAA,IAACkpE,IAAA,EAAO,WAAU,WAAU;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAG7B0nE,IAAe,KACd3wI,gBAAAA,OAAC,OAAA,EAAI,WAAU,2EACb,UAAA;AAAA,kBAAAD,gBAAAA,EAAAA,IAACwyI,IAAA,EAAO,WAAU,gBAAe;AAAA,kBAChC5B;AAAA,gBAAA,GACH;AAAA,cAAA,GAEJ;AAAA,YAAA,GAEJ;AAAA,UAAA,GACF;AAAA,gCAEC,MAAA,EAAG,WAAU,+BAA+B,UAAAtxC,GAAM;AAAA,UAClD9yE,KACCxsB,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,2DACb,UAAAA,gBAAAA,EAAAA,IAAC2+B,IAAA,EAAiB,SAASnS,GAAa,WAAU,2BAAA,CAA2B,GAC/E;AAAA,UAGFvsB,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,YAAAA,gBAAAA,EAAAA;AAAAA,cAAC8U;AAAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,WAAU;AAAA,gBACV,SAAS,CAACtgB,OAAM;AACd,kBAAAA,GAAE,gBAAA,GACF48I,GAAA;AAAA,gBACF;AAAA,gBAEA,UAAA;AAAA,kBAAArxI,gBAAAA,EAAAA,IAACyyI,IAAA,EAAS,WAAU,gBAAe;AAAA,kBACnCzyI,gBAAAA,EAAAA,IAACwV,MAAE,UAAA,YAAQ;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,kCAEZT,IAAA,EAAO,MAAK,MAAK,SAAQ,aAAY,WAAU,iEAC9C,gCAAC49H,IAAA,EAAO,WAAU,cAAA,CAAc,GAClC;AAAA,UAAA,GACF;AAAA,QAAA,EAAA,CACF,EAAA,CACF;AAAA,QAID9C,MAAgBlmI,MAAY,UAAWA,MAAY,UAAU,OAC5D1J,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAW,GAAG0J,MAAY,SAAS,cAAc,EAAE,mBAEtD,UAAA;AAAA,UAAA1J,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,+CACb,UAAA;AAAA,YAAAD,gBAAAA,EAAAA;AAAAA,cAACmuI;AAAA,cAAA;AAAA,gBACC,QAAQiB;AAAA,gBACR,WAAWQ;AAAA,gBACX,aAAaT,MAAW,SAAS,SAAYA;AAAA,gBAC7C,WAAU;AAAA,gBACV,UAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAGZlvI,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,cAAAD,gBAAAA,EAAAA;AAAAA,gBAAC+U;AAAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,SAASg8H;AAAA,kBACT,WAAWb,IAAe,oCAAoC;AAAA,kBAE9D,gCAACoC,IAAA,EAAM,WAAU,WAAU,MAAMpC,IAAe,iBAAiB,OAAA,CAAQ;AAAA,gBAAA;AAAA,cAAA;AAAA,cAE1EE,IAAa,KACZpwI,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,4CAA4C,UAAAowI,GAAW;AAAA,cAGzEpwI,gBAAAA,EAAAA;AAAAA,gBAAC+U;AAAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,WAAU;AAAA,kBAEV,UAAA/U,gBAAAA,EAAAA,IAACuyI,IAAA,EAAc,WAAU,sBAAqB;AAAA,gBAAA;AAAA,cAAA;AAAA,cAE/CjD,IAAW,KACVtvI,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,4CAA4C,UAAAsvI,GAAS;AAAA,cAGvEtvI,gBAAAA,EAAAA;AAAAA,gBAAC+U;AAAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,WAAU;AAAA,kBACV,SAAS,CAACtgB,OAAM;AACd,oBAAAA,GAAE,gBAAA,GACF48I,GAAA;AAAA,kBACF;AAAA,kBAEA,UAAArxI,gBAAAA,EAAAA,IAACyyI,IAAA,EAAS,WAAU,WAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,cAG/B3B,MACC9wI,gBAAAA,EAAAA,IAAAg7C,YAAA,EACE,UAAAh7C,gBAAAA,EAAAA;AAAAA,gBAAC+U;AAAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,SAAS,CAACtgB,OAAM;AACd,oBAAAA,GAAE,gBAAA,GACF87I,EAAiB,EAAI;AAAA,kBACvB;AAAA,kBACA,WAAU;AAAA,kBAEV,UAAAvwI,gBAAAA,EAAAA,IAACiiG,IAAA,EAAM,WAAU,WAAU;AAAA,gBAAA;AAAA,cAAA,GAE/B;AAAA,YAAA,GAEJ;AAAA,UAAA,GACF;AAAA,UAMAhiG,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,kBACX,UAAA;AAAA,YAAA,CAACyqI,GAAiBprC,CAAK,KAAKA,2BAC3B,OAAA,EAAI,WAAU,yBAAyB,UAAAA,EAAA,CAAM;AAAA,YAG/C9yE,KACCxsB,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,gDACb,UAAAA,gBAAAA,EAAAA,IAAC2+B,IAAA,EAAiB,SAASnS,GAAa,WAAU,6BAAA,CAA6B,GACjF;AAAA,YAGD4vL,KACCp8M,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,sCACZ,UAAAsqI,GAAW8xE,CAAU,EAAA,CACxB;AAAA,UAAA,GAEJ;AAAA,QAAA,GACF;AAAA,QAGD9rE,KACCtwI,gBAAAA,EAAAA;AAAAA,UAACo4M;AAAA,UAAA;AAAA,YACC,MAAM9nE;AAAA,YACN,cAAcC;AAAA,YACd,SAAAk1B;AAAA,YACA,cAAcnmE;AAAA,YACd,oBAAoB9yE,KAAe;AAAA,YACnC,gBAAgB;AAAA,YAChB,iBAAiB,MAAM;AACrB,cAAA+jH,EAAiB,EAAK,GACtBd,KAAA,QAAAA;AAAA,YACF;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAIR;AC1iBO,SAAS8tE,IAAkBh+K,GAA+C;AAC/E,MAAI,CAACA,EAAK,QAAO;AAGjB,QAAMi+K,IAAS,gEACTnkN,IAAQkmC,EAAI,MAAMi+K,CAAM;AAE9B,SAAQnkN,KAASA,EAAM,CAAC,EAAE,WAAW,KAAMA,EAAM,CAAC,IAAI;AACxD;AAKO,SAASokN,IAAiBl+K,GAA+C;AAC9E,MAAI,CAACA,EAAK,QAAO;AACjB,MAAI;AACF,UAAMy9K,IAAS,IAAI,IAAIz9K,CAAG;AAC1B,QAAIy9K,EAAO,SAAS,SAAS,YAAY,KAAKA,EAAO,SAAS,SAAS,SAAS,GAAG;AACjF,YAAMv9K,IAAQu9K,EAAO,SAAS,MAAM,SAAS;AAC7C,UAAIv9K,EAAM,SAAS;AACjB,eAAOA,EAAM,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;AAAA,IAEnC;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACA,SAAO;AACT;ACpKA,MAAMi+K,MAAoC,CAAC;AAAA,EACvC,IAAAjlL;AAAA,EACA,KAAA8G;AAAA,EACA,cAAA08K;AAAA,EACA,OAAA38G;AAAA,EACA,QAAA6vC;AAAA,EACA,UAAAC;AAAA,EACA,iBAAAQ;AAAA,EACA,OAAAP;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,aAAA/iH;AAAA,EACA,SAAAuvC;AAAA,EACA,QAAAyzE;AAAA,EACA,YAAA4sE;AAAA,EACA,SAAAzyM,IAAU;AAAA,EACV,YAAAmmI;AAAA,EACA,aAAAD,IAAc;AAAA,EACd,QAAAlvI;AACJ,MAAM;AAIF,QAAMsF,IAAeg2M,KAAgB18K,KAAO,6BACtC,CAAC+8K,GAAWC,CAAY,IAAI3nN,GAAM,SAAS,EAAK,GAGhD+oN,IAAWF,IAAiBl+K,CAAG,GAC/Bq+K,IAAOL,IAAkBh+K,CAAG,GAC5Bs+K,IAAkB,CAAC,EAAEF,KAAYC,IAMjC7sE,IAAa,CAACt8I,MAAwB;AACxC,IAAAA,EAAE,gBAAA,GACF+6I,KAAA,QAAAA;AAAA,EACJ,GAEM6C,IAAkB,CAAC59I,MAAwB;AAC7C,IAAAA,EAAE,gBAAA,GACFsnE,KAAA,QAAAA,EAAUtjC;AAAA,EACd;AAEA,SAAI9uB,MAAY,SAER1J,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAU;AAAA,MACV,SAASoyI;AAAA,MAET,UAAA;AAAA,QAAAryI,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,kDACX,UAAAA,gBAAAA,EAAAA;AAAAA,UAACmuI;AAAA,UAAA;AAAA,YACG,QAAQiB;AAAA,YACR,WAAWQ;AAAA,YACX,aAAaT;AAAA,YACb,WAAU;AAAA,YACV,UAAU;AAAA,YACV,WAAWitE;AAAA,UAAA;AAAA,QAAA,GAEnB;AAAA,QAEAp8M,gBAAAA,MAAC,OAAA,EAAI,WAAW,mBAAmB29M,IAAW,kBAAkB,eAAe,6BAC1E,UAAArB,KAAauB,IACV79M,gBAAAA,MAAC,OAAA,EAAI,WAAU,8CACX,UAAAA,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACG,KAAK29M,IACC,mCAAmCA,CAAQ,KAC3C,iCAAiCC,CAAI;AAAA,YAE3C,WAAU;AAAA,YACV,OAAM;AAAA,YACN,iBAAe;AAAA,YACf,OAAAt+G;AAAA,UAAA;AAAA,QAAA,EACH,CACL,IAEAr/F,gBAAAA,EAAAA,KAAA+6C,EAAAA,UAAA,EACI,UAAA;AAAA,UAAAh7C,gBAAAA,EAAAA;AAAAA,YAAC0B;AAAA,YAAA;AAAA,cACG,KAAKuE;AAAA,cACL,KAAKq5F;AAAA,cACL,WAAU;AAAA,cACV,cAAa;AAAA,cACb,OAAM;AAAA,cACN,MAAMwwC;AAAA,cACN,QAAAnvI;AAAA,YAAA;AAAA,UAAA;AAAA,UAEJX,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,yEACV,UAAA69M,IACG79M,gBAAAA,EAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAU;AAAA,cACV,SAAS,CAACvL,MAAM;AACZ,gBAAAA,EAAE,gBAAA,GACF8nN,EAAa,EAAI;AAAA,cACrB;AAAA,cAEA,UAAAv8M,gBAAAA,EAAAA,IAAC89M,IAAA,EAAK,WAAU,gCAAA,CAAgC;AAAA,YAAA;AAAA,UAAA,IAGpD99M,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,iDACX,gCAAC+kI,IAAA,EAAS,WAAU,qBAAA,CAAqB,EAAA,CAC7C,EAAA,CAER;AAAA,QAAA,EAAA,CACJ,EAAA,CAER;AAAA,QAEA9kI,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,iBACX,UAAA;AAAA,UAAAD,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,qCACX,UAAAA,gBAAAA,EAAAA,IAAC,QAAG,WAAU,yBAAyB,aAAM,EAAA,CACjD;AAAA,UAECwsB,KACGxsB,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,2CACX,UAAAA,gBAAAA,EAAAA,IAAC2+B,IAAA,EAAiB,SAASnS,GAAa,WAAU,6BAAA,CAA6B,EAAA,CACnF;AAAA,UAGJvsB,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,gCACX,UAAA;AAAA,YAAAA,gBAAAA,EAAAA,KAAC8U,IAAA,EAAO,MAAK,MAAK,SAAQ,SAAQ,WAAU,cAAa,SAASg8H,GAC9D,UAAA;AAAA,cAAA/wI,gBAAAA,MAACsyI,MAAM,WAAW,WAAW/C,IAAU,8BAA8B,EAAE,IAAI;AAAA,cAC3EvvI,gBAAAA,EAAAA,IAAC,UAAM,UAAAqvI,EAAA,CAAM;AAAA,YAAA,GACjB;AAAA,mCACCt6H,IAAA,EAAO,MAAK,MAAK,SAAQ,SAAQ,WAAU,cACxC,UAAA;AAAA,cAAA/U,gBAAAA,EAAAA,IAACuyI,IAAA,EAAc,WAAU,UAAA,CAAU;AAAA,cACnCvyI,gBAAAA,EAAAA,IAAC,UAAM,UAAAsvI,EAAA,CAAS;AAAA,YAAA,EAAA,CACpB;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAORtvI,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAW,4FAA4Fs8M,KAAaqB,IAAW,kBAAkB,eAAe;AAAA,MAChK,SAAS,CAAClpN,MAAM;AACZ,QAAIopN,KAAmB,CAACvB,KACpB7nN,EAAE,gBAAA,GACF8nN,EAAa,EAAI,KAEjBlqE,EAAgB59I,CAAC;AAAA,MAEzB;AAAA,MAEC,UAAA6nN,KAAauB,IACV79M,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,8CACX,UAAAA,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG,KAAK29M,IACC,mCAAmCA,CAAQ,KAC3C,iCAAiCC,CAAI;AAAA,UAE3C,WAAU;AAAA,UACV,OAAM;AAAA,UACN,iBAAe;AAAA,UACf,OAAAt+G;AAAA,QAAA;AAAA,MAAA,EACH,CACL,IAEAr/F,gBAAAA,EAAAA,KAAA+6C,EAAAA,UAAA,EACI,UAAA;AAAA,QAAAh7C,gBAAAA,EAAAA;AAAAA,UAAC0B;AAAA,UAAA;AAAA,YACG,KAAKuE;AAAA,YACL,KAAKq5F;AAAA,YACL,WAAU;AAAA,YACV,cAAa;AAAA,YACb,OAAM;AAAA,YACN,iBAAiB,CAAC,KAAK,KAAK,IAAI;AAAA,YAChC,MAAMwwC;AAAA,YACN,QAAAnvI;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJX,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,6EACV,cACGA,gBAAAA,EAAAA,IAAC89M,IAAA,EAAK,WAAU,gCAAA,CAAgC,IAEhD99M,gBAAAA,MAAC+kI,IAAA,EAAS,WAAU,sBAAqB,GAEjD;AAAA,QAEC84E,KACG79M,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,yEACX,UAAAA,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,2FACX,UAAAA,gBAAAA,EAAAA,IAAC89M,IAAA,EAAK,WAAU,gCAAA,CAAgC,GACpD,GACJ;AAAA,QAGHjuE,2BACI,OAAA,EAAI,WAAU,wLACX,UAAA5vI,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,4DACX,UAAA;AAAA,UAAAA,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,0CACX,UAAA;AAAA,YAAAD,gBAAAA,EAAAA;AAAAA,cAACmuI;AAAA,cAAA;AAAA,gBACG,QAAQiB;AAAA,gBACR,WAAWQ;AAAA,gBACX,aAAaT;AAAA,gBACb,YAAY;AAAA,gBACZ,UAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAGdnvI,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,+BACX,UAAAA,gBAAAA,EAAAA;AAAAA,cAAC+U;AAAAA,cAAA;AAAA,gBACG,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,SAASg8H;AAAA,gBACT,WAAW,eAAexB,IAAU,iBAAiB,+BAA+B;AAAA,gBAEpF,gCAAC+C,IAAA,EAAM,WAAU,WAAU,MAAM/C,IAAU,iBAAiB,OAAA,CAAQ;AAAA,cAAA;AAAA,YAAA,EACxE,CACJ;AAAA,UAAA,GACJ;AAAA,UAEAvvI,gBAAAA,EAAAA,IAAC,MAAA,EAAG,WAAU,4CAA4C,UAAAs/F,GAAM;AAAA,UAC/D9yE,KACGxsB,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,2CACX,UAAAA,gBAAAA,EAAAA,IAAC2+B,IAAA,EAAiB,SAASnS,GAAa,WAAU,2BAAA,CAA2B,EAAA,CACjF;AAAA,QAAA,EAAA,CAER,EAAA,CACJ;AAAA,8BAIH,OAAA,EAAI,WAAU,gGACX,UAAAvsB,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,gDACX,UAAA;AAAA,UAAAD,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,4CAA4C,UAAAs/F,GAAM;AAAA,UACjEu+G,0BACIC,IAAA,EAAK,WAAU,oCAAmC,IAEnD99M,gBAAAA,MAAC+kI,IAAA,EAAS,WAAU,wBAAA,CAAwB;AAAA,QAAA,EAAA,CAEpD,EAAA,CACJ;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA;AAAA,EAAA;AAIhB,GC1NM3iE,KAAsC,CAAC;AAAA,EAC3C,IAAA3pC;AAAA,EACA,WAAAyqC;AAAA,EACA,KAAA3jC;AAAA,EACA,cAAA08K;AAAA,EACA,OAAA38G;AAAA,EACA,QAAA6vC;AAAA,EACA,iBAAAS;AAAA,EACA,UAAAR;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,aAAA/iH;AAAA,EACA,MAAAt1B;AAAA,EACA,MAAA+hN;AAAA,EACA,SAAAl9I;AAAA,EACA,QAAAyzE;AAAA,EACA,UAAAC;AAAA,EACA,QAAAE;AAAA,EACA,YAAAysE;AAAA,EACA,aAAAvsE,IAAc;AAAA,EACd,YAAAC;AAAA,EACA,KAAAud;AAAA,EACA,SAAA1jJ,IAAU;AAAA,EACV,QAAAhJ;AACF,MAAM;AACJ,QAAMo9M,IAAiBjF,GAAmB5hN,CAAI;AAE9C,SAAI6mN,MAAmB,WAEnB/9M,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,iHACb,UAAAA,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKu/B;AAAA,MACL,WAAU;AAAA,MACV,OAAA+/D;AAAA,IAAA;AAAA,EAAA,GAEJ,IAIAy+G,MAAmBlF,GAAY,eAE/B74M,gBAAAA,EAAAA;AAAAA,IAAC+7M;AAAA,IAAA;AAAA,MACC,SAAS74I,KAAazqC;AAAA,MACtB,UAAU8G;AAAA,MACV,cAAc08K,KAAgB;AAAA,MAC9B,OAAA38G;AAAA,MACA,QAAA6vC;AAAA,MACA,UAAAC;AAAA,MACA,OAAAC;AAAA,MACA,UAAAC;AAAA,MACA,SAAAC;AAAA,MACA,aAAA/iH;AAAA,MACA,SAAS,MAAMuvC,KAAA,gBAAAA,EAAUtjC;AAAA,MACzB,QAAA+2G;AAAA,MACA,UAAAC;AAAA,MACA,aAAAI;AAAA,MACA,YAAAusE;AAAA,MACA,iBAAAxsE;AAAA,MACA,KAAAyd;AAAA,MACA,SAAA1jJ;AAAA,MACA,QAAAhJ;AAAA,IAAA;AAAA,EAAA,IAIFo9M,MAAmBlF,GAAY,QAAQkF,MAAmBlF,GAAY,gBAEtE74M,gBAAAA,EAAAA;AAAAA,IAAC09M;AAAA,IAAA;AAAA,MACC,IAAAjlL;AAAA,MACA,KAAA8G;AAAA,MACA,cAAA08K;AAAA,MACA,OAAA38G;AAAA,MACA,QAAA6vC;AAAA,MACA,UAAAC;AAAA,MACA,iBAAAQ;AAAA,MACA,OAAAP;AAAA,MACA,UAAAC;AAAA,MACA,SAAAC;AAAA,MACA,aAAA/iH;AAAA,MACA,MAAAt1B;AAAA,MACA,MAAA+hN;AAAA,MACA,SAAS,MAAMl9I,KAAA,gBAAAA,EAAUtjC;AAAA,MACzB,QAAA+2G;AAAA,MACA,UAAAC;AAAA,MACA,aAAAI;AAAA,MACA,YAAAusE;AAAA,MACA,YAAAtsE;AAAA,MACA,SAAAnmI;AAAA,MACA,QAAAhJ;AAAA,IAAA;AAAA,EAAA,IAOJX,gBAAAA,EAAAA;AAAAA,IAACkvI;AAAA,IAAA;AAAA,MACC,WAAWhsE,KAAazqC;AAAA,MACxB,OAAO8G;AAAA,MACP,OAAA+/D;AAAA,MACA,QAAA6vC;AAAA,MACA,UAAAC;AAAA,MACA,OAAAC;AAAA,MACA,UAAAC;AAAA,MACA,SAAAC;AAAA,MACA,aAAA/iH;AAAA,MACA,SAAAuvC;AAAA,MACA,QAAAyzE;AAAA,MACA,UAAAC;AAAA,MACA,QAAAE;AAAA,MACA,WAAWysE;AAAA,MACX,iBAAAxsE;AAAA,MACA,aAAAC;AAAA,MACA,YAAAC;AAAA,MACA,SAAAnmI;AAAA,MACA,QAAAhJ;AAAA,IAAA;AAAA,EAAA;AAGN,GClJa0pI,MAAoB,MAAM;AACrC,QAAM0F,IAAiB5H,GAAmBM,EAAoB,GACxDuH,IAAoB7H,GAAmB,CAACv9F,MAAUA,EAAM,iBAAiB,GACzEqlG,IAAe9H,GAAmB,CAACv9F,MAAUA,EAAM,YAAY,GAC/DozK,IAAqB71E,GAAmB,CAACv9F,MAAUA,EAAM,kBAAkB;AAEjF,SAAO;AAAA,IACL,gBAAAmlG;AAAA,IACA,mBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,oBAAA+tE;AAAA,EAAA;AAEJ,GCbMC,MAAsB7oM,GAAuC;AAAA,EACjE,SAAS;AAAA,EACT,cAAc;AAChB,CAAC,GAEY8oM,MAAkB,MACb5oM,GAAW2oM,GAAmB,GCG1CE,MAAmB/oM,GAA2C,IAAI,GA2C3DgpM,KAAe,MAAM;AAC9B,QAAMzmN,IAAU2d,GAAW6oM,GAAgB;AAC3C,MAAI,CAACxmN;AACD,UAAM,IAAI,MAAM,sDAAsD;AAE1E,SAAOA;AACX,GC/Ca0mN,MAAc,CAAC;AAAA,EACxB,QAAAnlN,IAAS;AAAA,EACT,UAAAyK;AAAA,EACA,cAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAnD,IAAU;AAAA,EACV,QAAA8F,IAAS;AAAA,EACT,gBAAA83M;AACJ,MAAwB;AACpB,QAAM,EAAE,UAAAC,GAAU,WAAAC,EAAA,IAAcJ,GAAA,GAC1Bh9M,IAAW,GAAGlI,CAAM,IAAIyK,KAAY,EAAE,IAAIC,IAAe,QAAQ,UAAU,IAAIC,KAAW,EAAE,IAAI2C,CAAM,IAGtG,CAACD,GAAOk4M,CAAQ,IAAI39M,GAAqB,MAAM;AACjD,UAAMw1E,IAASioI,EAASn9M,CAAQ;AAChC,WAAOk1E,IAASA,EAAO,QAAQ,CAAA;AAAA,EACnC,CAAC,GACK,CAACxyE,GAAM46M,CAAO,IAAI59M,GAAS,MAAM;AACnC,UAAMw1E,IAASioI,EAASn9M,CAAQ;AAChC,WAAOk1E,IAASA,EAAO,OAAO;AAAA,EAClC,CAAC,GACK,CAACqoI,GAASC,CAAU,IAAI99M,GAAS,MAAM;AACzC,UAAMw1E,IAASioI,EAASn9M,CAAQ;AAChC,WAAOk1E,MAAW,OAAOA,EAAO,UAAU;AAAA,EAC9C,CAAC,GACK,CAACv1E,GAASC,CAAU,IAAIF,GAAS,MAE5B,CADQy9M,EAASn9M,CAAQ,CAEnC,GAEK,CAACy9M,GAAgBC,CAAiB,IAAIh+M,GAAS,EAAK,GACpD,CAAC9K,GAAOiL,CAAQ,IAAIH,GAAuB,IAAI,GAC/C,EAAE,eAAAi+M,EAAA,IAAkB7wE,GAAA,GAGpB8wE,IAAmBn8I,GAAO,CAAC,CAAC07I,EAASn9M,CAAQ,CAAC;AAGpD,EAAAF,GAAU,MAAM;AACZ,UAAMo1E,IAASioI,EAASn9M,CAAQ;AAChC,IAAIk1E,KACAmoI,EAASnoI,EAAO,KAAK,GACrBooI,EAAQpoI,EAAO,IAAI,GACnBsoI,EAAWtoI,EAAO,OAAO,GACzBt1E,EAAW,EAAK,GAChBg+M,EAAiB,UAAU,OAE3BP,EAAS,CAAA,CAAE,GACXC,EAAQ,CAAC,GACTE,EAAW,EAAI,GACf59M,EAAW,EAAI,GACfg+M,EAAiB,UAAU;AAAA,EAEnC,GAAG,CAAC9lN,GAAQyK,GAAUC,GAAcC,GAASzC,GAAUm9M,CAAQ,CAAC,GAGhEr9M,GAAU,MAAM;AACZ,QAAI,CAACH,KAAWwF,EAAM,SAAS,GAAG;AAW9B,YAAM04M,IAAeV,EAASn9M,CAAQ;AACtC,MAAAo9M,EAAUp9M,GAAU;AAAA,QAChB,OAAAmF;AAAA,QACA,MAAAzC;AAAA,QACA,SAAA66M;AAAA,QACA,UAASM,KAAA,gBAAAA,EAAc,YAAW;AAAA,MAAA,CACrC;AAAA,IACL;AAAA,EACJ,GAAG,CAAC14M,GAAOzC,GAAM66M,GAAS59M,GAASK,GAAUo9M,GAAWD,CAAQ,CAAC;AAEjE,QAAMW,IAAWp8I,GAAY,OAAOq8I,GAAqBC,MAAwB;;AAC7E,QAAI,CAAC1+M,GAAS;AACV,MAAAM,EAAW,EAAK;AAChB;AAAA,IACJ;AAEA,IAAIo+M,IACAN,EAAkB,EAAI,IAEtB99M,EAAW,EAAI,GAGnBC,EAAS,IAAI;AACb,QAAIo+M,IAAsB,CAAA;AAE1B,QAAI;AAEA,MAAInmN,MAAW,UAAU,CAACyK,KAAYw7M,MAAgB,OAAKv8M,IAAA,OAAO,sBAAP,QAAAA,EAA0B,SACjFy8M,IAAe,OAAO,kBAAkB,MACxC,OAAO,kBAAkB,OAAO,QAEhC,QAAQ,IAAI,iBAAiBA,CAAY,KAiBzCA,IAAe,MAAMC;AAAAA,QACjBpmN;AAAA,QACAyK;AAAA,QACAC;AAAA,QACAC;AAAA,QACAs7M;AAAA,QACAr/G;AAAA,QACAw+G;AAAA,MAAA,GAIJe,EAAa,SAASv/G,KACtB8+G,EAAW,EAAK,IAEhBA,EAAW,EAAI;AAInB,YAAMW,IAAiBC,GAAoBH,CAAY,GAGjDI,IAAyBC,IAAiBH,GAAgB/4M,CAAM;AAGtE,MAAAi4M,EAAS,CAAA78I,MAAQ;AACb,cAAM+9I,IAAWP,IAAa,CAAC,GAAGx9I,GAAM,GAAG69I,CAAsB,IAAIA;AAErE,eAAOG,IAAcD,GAAUn5M,CAAM;AAAA,MACzC,CAAC;AAGD,YAAMq5M,IAAU,MAAM,KAAK,IAAI,IAAIN,EAAe,IAAI,CAACrrN,MAAWA,EAAE,OAAO,CAAC,CAAC;AAC7E,MAAI2rN,EAAQ,SAAS,KACjBd,EAAcc,CAAmB;AAAA,IAGzC,SAASpkN,GAAK;AACV,MAAAwF,EAASxF,aAAe,QAAQA,IAAM,IAAI,MAAM,6BAA6B,CAAC;AAAA,IAClF,UAAA;AACI,MAAAuF,EAAW,EAAK,GAChB89M,EAAkB,EAAK;AAAA,IAC3B;AAAA,EACJ,GAAG,CAAC5lN,GAAQyK,GAAUC,GAAcC,GAASnD,GAASq+M,GAAev4M,GAAQ83M,CAAc,CAAC;AAG5F,EAAAp9M,GAAU,MAAM;AAEZ,QAAI89M,EAAiB,SAAS;AAC1B,MAAAA,EAAiB,UAAU;AAC3B;AAAA,IACJ;AACA,IAAAE,EAAS,GAAG,EAAK;AAAA,EACrB,GAAG,CAACA,CAAQ,CAAC;AAEb,QAAMY,IAAWh9I,GAAY,MAAM;AAC/B,QAAI,CAAC67I,KAAWE,KAAkB99M,EAAS;AAC3C,UAAMg/M,IAAWj8M,IAAO;AACxB,IAAA46M,EAAQqB,CAAQ,GAChBb,EAASa,GAAU,EAAI;AAAA,EAC3B,GAAG,CAACpB,GAASE,GAAgB99M,GAAS+C,GAAMo7M,CAAQ,CAAC;AAErD,SAAO,EAAE,OAAA34M,GAAO,SAAAxF,GAAS,OAAA/K,GAAO,SAAA2oN,GAAS,UAAAmB,GAAU,gBAAAjB,EAAA;AACvD,GAGMa,MAAmB,CAACn5M,GAAmBC,MAClCD,EAAM,IAAI,CAAAlB,MAAQ;AACrB,MAAI,CAACA,EAAK,YAAYA,EAAK,SAAS,WAAW;AAC3C,WAAOA;AAGX,QAAMC,IAAYD,EAAK,SAAS,OAAO,CAACnR,MAAWA,EAAE,YAAY,EAAK;AACtE,MAAIoR,EAAU,WAAW;AACrB,WAAOD;AAGX,MAAI26M;AACJ,SAAIx5M,MAAW,WAEXw5M,IAAW16M,EAAU,OAAO,CAACmB,GAAQC,MAAY;AAC7C,UAAMC,IAAa,IAAI,KAAKF,EAAO,cAAcpB,EAAK,UAAU,EAAE,QAAA;AAElE,WADoB,IAAI,KAAKqB,EAAQ,cAAcrB,EAAK,UAAU,EAAE,QAAA,IAC/CsB,IAAaD,IAAUD;AAAA,EAChD,CAAC,IAIDu5M,IADyB,CAAC,GAAG16M,CAAS,EAAE,KAAK,CAAC,GAAG/Q,OAAO,EAAE,YAAY,MAAMA,EAAE,YAAY,EAAE,EAChE,CAAC,GAG1B;AAAA,IACH,GAAG8Q;AAAA,IACH,OAAO26M;AAAA,EAAA;AAEf,CAAC,GAICJ,MAAgB,CAACr5M,GAAmBC,MAAuC;AAC7E,QAAMy5M,IAAS,CAAC,GAAG15M,CAAK;AAExB,SAAIC,MAAW,QAEXy5M,EAAO,KAAK,CAAC5rN,GAAGE,MAAM;AAClB,UAAM2rN,IAAS7rN,EAAE,eAAe,GAC1B8rN,IAAS5rN,EAAE,eAAe;AAEhC,WAAI4rN,MAAWD,IACJC,IAASD,IAIb,IAAI,KAAK3rN,EAAE,UAAU,EAAE,YAAY,IAAI,KAAKF,EAAE,UAAU,EAAE,QAAA;AAAA,EACrE,CAAC,IAID4rN,EAAO,KAAK,CAAC5rN,GAAGE,MAAM;AAElB,UAAM6rN,IAAiB/rN,EAAE,YAAYA,EAAE,SAAS,SAAS,IACnD,KAAK,IAAI,GAAGA,EAAE,SAAS,IAAI,CAAAH,MAAK,IAAI,KAAKA,EAAE,cAAcG,EAAE,UAAU,EAAE,SAAS,CAAC,IACjF,IAAI,KAAKA,EAAE,UAAU,EAAE,QAAA;AAM7B,YAJuBE,EAAE,YAAYA,EAAE,SAAS,SAAS,IACnD,KAAK,IAAI,GAAGA,EAAE,SAAS,IAAI,CAAAL,MAAK,IAAI,KAAKA,EAAE,cAAcK,EAAE,UAAU,EAAE,SAAS,CAAC,IACjF,IAAI,KAAKA,EAAE,UAAU,EAAE,QAAA,KAEL6rN;AAAA,EAC5B,CAAC,GAGEH;AACX,GCrNMI,MAAY,CAAC;AAAA,EACjB,gBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,kBAAAC,IAAmB;AAAA,EACnB,oBAAAC;AAAA,EACA,SAAA3vE,IAAU;AAAA,EACV,aAAA4vE;AAAA,EAEA,YAAAC,IAAa;AAAA,EACb,QAAAn6M,IAAS;AAAA,EACT,gBAAA83M;AAAA,EACA,QAAA39M;AACF,MAAsB;AACpB,QAAM,EAAE,MAAAk/D,EAAA,IAASxqD,GAAA,GAEXrS,IAAWs7M,KAAkB96M,IAC7Bk0B,IAAWC,GAAA,GACX,EAAE,mBAAAq4G,GAAmB,gBAAAD,EAAA,IAAmB1F,IAAA,GACxC,EAAE,UAAAk0E,GAAU,WAAAC,EAAA,IAAcJ,GAAA,GAI1B,EAAE,SAAAv6M,GAAS,cAAAD,EAAA,IAAiBs6M,IAAA,GAE5B,CAAC0C,GAAYC,CAAa,IAAI//M,GAA0B,CAAA,CAAE,GAC1D,CAACggN,GAAWC,CAAY,IAAIjgN,GAAsB,oBAAI,KAAK,GAC3D,CAACC,GAASC,CAAU,IAAIF,GAAS,EAAI,GACrC,CAACoiL,GAAY89B,CAAa,IAAIlgN,GAAS,EAAK,GAC5CmgN,IAAsBp+I,GAAsB,IAAI,GAGhD;AAAA,IACJ,OAAOq+I;AAAA,IACP,SAASC;AAAA,IACT,SAAAxC;AAAA,IACA,UAAAmB;AAAA,IACA,gBAAAjB;AAAA,EAAA,IACER,IAAY;AAAA,IACd,QAAQmC;AAAA,IACR,UAAUC;AAAA,IACV,cAAA78M;AAAA,IACA,SAAAC;AAAA,IACA,QAAA2C;AAAA;AAAA,IAEA,SAAS,CAAC85M;AAAA,IACV,gBAAAhC;AAAA,EAAA,CACD,GAGK8C,IAAiBv+I,GAAO,IAAI;AAElC,EAAA3hE,GAAU,MAAM;AACd,UAAMuB,KAAW,IAAI;AAAA,MACnB,CAAAwY,OAAW;AACT,QAAIA,GAAQ,CAAC,EAAE,kBAAkB0jM,KAAW,CAACwC,KAAe,CAACtC,KAC3DiB,EAAA;AAAA,MAEJ;AAAA,MACA,EAAE,WAAW,EAAA;AAAA,IAAI;AAGnB,WAAIsB,EAAe,WACjB3+M,GAAS,QAAQ2+M,EAAe,OAAO,GAGlC,MAAM;AACX,MAAIA,EAAe,WACjB3+M,GAAS,UAAU2+M,EAAe,OAAO;AAAA,IAE7C;AAAA,EACF,GAAG,CAACzC,GAASwC,GAAatC,GAAgBiB,CAAQ,CAAC,GAGnD5+M,GAAU,MAAM;AACd,QAAImgN,KAA8B,CAAA;AAclC,QAZIf,KACFe,KAAaf,GACbt/M,EAAWu/M,KAAiB,EAAK,MAGjCc,KAAaC,GAA4BJ,GAAkB16M,CAAM,GACjExF,EAAWmgN,CAAW,IAGxBN,EAAcQ,EAAU,GAGpBA,GAAW,SAAS,GAAG;AACzB,YAAME,KAAU;AAAA,QACd,OAAOF,GAAW,IAAI,CAAA3qN,QAAS;AAAA,UAC7B,IAAIA,GAAK;AAAA,UACT,OAAOA,GAAK;AAAA,UACZ,WAAWA,GAAK;AAAA,UAChB,SAASA,GAAK;AAAA,UACd,MAAMoiN,GAAmBpiN,GAAK,IAAI;AAAA,QAAA,EAClC;AAAA,QACF,cAAc;AAAA,QACd,QAAQ8pN;AAAA,QACR,UAAUC;AAAA,MAAA;AAEZ,MAAAzwE,EAAkBuxE,EAAO;AAAA,IAC3B;AAAA,EACF,GAAG,CAACL,GAAWC,GAAab,GAAgBC,GAAeC,GAAkBC,GAAoBzwE,GAAmBxpI,CAAM,CAAC;AAG3H,QAAMpF,IAAW,GAAGo/M,CAAgB,IAAIC,KAAsB,EAAE,IAAI78M,IAAe,QAAQ,UAAU,IAAIC,KAAW,EAAE,IAChH29M,IAAoB3+I,GAAO,EAAK;AAGtC,EAAAzgC,GAAgB,MAAM;AAMpB,QAJsBw+K,EAAW,SAAS,KACxC,CAACY,EAAkB,YAClB,CAAClB,KAAmBE,MAAqB,YAAYC,IAErC;AACjB,YAAMnqI,KAASioI,EAASn9M,CAAQ;AAEhC,MAAIk1E,MAAUA,GAAO,UAAU,KAC7B,OAAO,SAAS,GAAGA,GAAO,OAAO,GAEnCkrI,EAAkB,UAAU;AAAA,IAC9B;AAAA,EACF,GAAG,CAACZ,GAAYx/M,GAAUm9M,GAAU+B,GAAgBE,GAAkBC,CAAkB,CAAC,GAGzFv/M,GAAU,MAAM;AACd,IAAAsgN,EAAkB,UAAU;AAAA,EAC9B,GAAG,CAACpgN,CAAQ,CAAC;AAGb,QAAMqgN,IAAc5+I,GAAO,OAAO,OAAO;AAEzC,EAAA3hE,GAAU,MAAM;AACd,UAAMkyC,KAAe,MAAM;AACzB,MAAAquK,EAAY,UAAU,OAAO;AAAA,IAC/B;AACA,kBAAO,iBAAiB,UAAUruK,EAAY,GACvC,MAAM,OAAO,oBAAoB,UAAUA,EAAY;AAAA,EAChE,GAAG,CAAA,CAAE,GAGLlyC,GAAU,MACD,MAAM;AAIX,QAFmB,CAACo/M,KAAmBE,MAAqB,YAAYC,GAExD;AACd,YAAMnqI,KAASioI,EAASn9M,CAAQ;AAGhC,MAAIk1E,MAAUmrI,EAAY,UAAU,KAClCjD,EAAUp9M,GAAU,EAAE,GAAGk1E,IAAQ,SAASmrI,EAAY,SAAS;AAAA,IAEnE;AAAA,EACF,GACC,CAACrgN,GAAUm9M,GAAUC,GAAW8B,GAAgBE,GAAkBC,CAAkB,CAAC;AAExF,QAAMiB,KAA8B,YAAY;AAI9C,WAAO,SAAS,OAAA;AAAA,EAClB,GAEMC,KAAiB,YAAY;AACjC,QAAI,GAAC9hJ,KAAQ+gJ,EAAW,WAAW;AAEnC,UAAI;AAEF,cAAMgB,KAAYhB,EACf,IAAI,CAAAlqN,OAAQA,GAAK,cAAcA,GAAK,EAAE,EACtC,OAAO,OAAO;AAEjB,YAAIkrN,GAAU,WAAW,EAAG;AAG5B,cAAM,EAAE,MAAMC,IAAW,OAAA7rN,GAAA,IAAU,MAAMgN,EACtC,KAAK,OAAO,EACZ,OAAO,YAAY,EACnB,GAAG,WAAW68D,EAAK,EAAE,EACrB,GAAG,cAAc+hJ,EAAS;AAE7B,YAAI5rN,GAAO,OAAMA;AAGjB,QAAA+qN,EAAa,CAAAn/I,OAAQ;AACnB,gBAAM2/B,KAAS,IAAI,IAAI3/B,EAAI;AAC3B,iBAAAigJ,MAAA,QAAAA,GAAW,QAAQ,CAAA9tN,OAAKwtG,GAAO,IAAIxtG,GAAE,UAAU,IACxCwtG;AAAA,QACT,CAAC;AAAA,MACH,SAASvrG,IAAO;AACd,gBAAQ,MAAM,8BAA8BA,EAAK;AAAA,MACnD;AAAA,EACF,GAEM8rN,KAAmB,CAACj2D,IAAiB30J,IAAiB2L,OAAkB;;AAE5E,QAAI3L,OAAS,eAAe;AAC1B,YAAMR,KAAOkqN,EAAW,KAAK,CAAAliN,OAAKA,GAAE,OAAOmtJ,EAAO;AAClD,UAAIn1J,QAAQkM,KAAAlM,GAAK,SAAL,QAAAkM,GAAW,OAAM;AAC3B,QAAA80B,EAAS,SAAShhC,GAAK,OAAO,UAAUA,GAAK,KAAK,IAAI,EAAE;AACxD;AAAA,MACF;AAAA,IACF;AAGA,IAAIq5I,KACFC,EAAkB,EAAE,GAAGD,GAAgB,cAAcltI,IAAO,GAE9D60B,EAAS,SAASm0H,EAAO,EAAE;AAAA,EAC7B,GAEMk2D,KAAkB,CAACttN,OAAuC;AAC9D,IAAAA,GAAE,eAAA,GACFA,GAAE,gBAAA,GACEwsN,EAAoB,WACtB,aAAaA,EAAoB,OAAO,GAEtCnwE,KAAW4vE,KAAaM,EAAc,EAAI;AAAA,EAChD,GAEMgB,KAAkB,CAACvtN,OAAuC;AAC9D,IAAAA,GAAE,eAAA,GACFA,GAAE,gBAAA,GACEwsN,EAAoB,WACtB,aAAaA,EAAoB,OAAO,GAE1CA,EAAoB,UAAU,OAAO,WAAW,MAAM;AACpD,MAAAD,EAAc,EAAK;AAAA,IACrB,GAAG,GAAG;AAAA,EACR,GAEMiB,KAAiB,CAACxtN,OAAuC;AAC7D,IAAAA,GAAE,eAAA,GACFA,GAAE,gBAAA;AAAA,EACJ,GAEMytN,KAAa,CAACztN,OAAuC;AAKzD,QAJAA,GAAE,eAAA,GACFA,GAAE,gBAAA,GACFusN,EAAc,EAAK,GAEf,CAAClwE,KAAW,CAAC4vE,EAAa;AAE9B,UAAMjzH,KAAQ,CAAC,GAAGh5F,GAAE,aAAa,KAAK,EAAE,OAAO,CAAAb,OAAKA,GAAE,KAAK,WAAW,QAAQ,CAAC;AAC/E,IAAI65F,GAAM,SAAS,KACjBizH,EAAYjzH,EAAK;AAAA,EAErB,GAEM00H,KAAiB,OAAOC,OAAmB;AAC/C,QAAI;AACF,YAAMC,KAAU36I,GAAM,QAAQ,6BAA6B,GAGrD,EAAE,MAAMriE,IAAM,OAAArP,GAAA,IAAU,MAAMgN,EACjC,KAAK,OAAO,EACZ,OAAO,gBAAgB,EACvB,GAAG,MAAMo/M,EAAM,EACf,OAAA;AAEH,UAAIpsN,GAAO,OAAMA;AAEjB,UAAI,CAACqP,GAAK,YAAYA,GAAK,SAAS,WAAW;AAC7C,cAAM,IAAI,MAAM,2BAA2B;AAI7C,YAAMi9M,KAAej9M,GAAK,SACvB,KAAK,CAAChR,IAAQE,OAAYF,GAAE,WAAWE,GAAE,QAAS,EAClD,IAAI,CAACL,QAAY;AAAA,QAChB,IAAIA,GAAE;AAAA,QACN,MAAMA,GAAE;AAAA,QACR,KAAKA,GAAE;AAAA,QACP,OAAOA,GAAE;AAAA,QACT,aAAaA,GAAE,eAAe;AAAA,QAC9B,UAAU;AAAA,QACV,gBAAgBA,GAAE;AAAA,MAAA,EAClB;AAEJ,MAAAwzE,GAAM,QAAQ26I,EAAO,GAErB3qL,EAAS,WAAW;AAAA,QAClB,OAAO;AAAA,UACL,MAAM;AAAA,UACN,eAAe4qL;AAAA,UACf,WAAWj9M,GAAK;AAAA,UAChB,iBAAiBA,GAAK;AAAA,UACtB,eAAeA,GAAK;AAAA,QAAA;AAAA,MACtB,CACD;AAAA,IACH,SAASrP,IAAO;AACd,cAAQ,MAAM,8BAA8BA,EAAK,GACjD0xE,GAAM,MAAM,4BAA4B;AAAA,IAC1C;AAAA,EACF;AAuBA,MAnBAxmE,GAAU,MAAM;AACd,QAAI0/M,EAAW,SAAS,KAAKN,GAAgB;AAC3C,YAAMiB,KAAU;AAAA,QACd,OAAOX,EACJ,OAAO,CAAAlqN,OAAQ,CAACqiN,GAAYD,GAAmBpiN,GAAK,IAAI,CAAC,CAAC,EAC1D,IAAI,CAAAA,QAAS;AAAA,UACZ,IAAIA,GAAK;AAAA,UACT,OAAOA,GAAK;AAAA,UACZ,WAAWA,GAAK;AAAA,UAChB,SAASA,GAAK;AAAA,QAAA,EACd;AAAA,QACJ,cAAc;AAAA,QACd,QAAQ8pN;AAAA,QACR,UAAUC;AAAA,MAAA;AAEZ,MAAAzwE,EAAkBuxE,EAAO;AAAA,IAC3B;AAAA,EACF,GAAG,CAACX,GAAYN,GAAgBE,GAAkBC,GAAoBzwE,CAAiB,CAAC,GAEpFjvI;AACF,WACEf,gBAAAA,EAAAA,IAAC,SAAI,WAAU,QACb,gCAAC,OAAA,EAAI,WAAU,qCAAoC,UAAA,mBAAA,CAEnD,EAAA,CACF;AAIJ,QAAMuiN,KAAW3B,EAAW,SAAS;AAErC,SACE3gN,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,mBACZ,UAAA;AAAA,IAAAsiN,MAAYzxE,KAAW4vE,KAAeF,MAAqB,gBAC1DvgN,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,4GAA4GijL,IAAa,+EAA+E,EACjN;AAAA,QACF,aAAa6+B;AAAA,QACb,aAAaC;AAAA,QACb,YAAYC;AAAA,QACZ,QAAQC;AAAA,QAER,UAAA;AAAA,UAAAliN,gBAAAA,EAAAA,IAACwiN,IAAA,EAAY,WAAU,wCAAA,CAAwC;AAAA,UAC/DxiN,gBAAAA,EAAAA,IAAC,KAAA,EAAE,WAAU,gBAAe,UAAA,4CAAA,CAAyC;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAIvEuiN,KAyBAviN,gBAAAA,MAAC,OAAA,EAAI,WAAU,wDACZ,UAAA4gN,EAAW,IAAI,CAAClqN,IAAMmM,OAAU;;AAC/B,YAAM4/M,KAAW3J,GAAmBpiN,GAAK,IAAI,GACvCgsN,KAAU3J,GAAY0J,EAAQ,GAG9BjjL,KAAa9oC,GAAK;AAExB,aAAIgsN,KAEAziN,gBAAAA,EAAAA,KAAC,OAAA,EAAkB,WAAU,kBAC3B,UAAA;AAAA,QAAAD,gBAAAA,EAAAA;AAAAA,UAACoiE;AAAA,UAAA;AAAA,YACC,IAAI1rE,GAAK;AAAA,YACT,WAAWA,GAAK;AAAA,YAChB,KAAK8oC;AAAA,YACL,cAAc9oC,GAAK;AAAA,YACnB,OAAOA,GAAK;AAAA,YAEZ,QAAQ;AAAA,YACR,iBAAiB;AAAA,YACjB,UAAUA,GAAK;AAAA,YACf,OAAOA,GAAK,eAAe;AAAA,YAC3B,YAAUkM,KAAAlM,GAAK,SAAS,CAAC,MAAf,gBAAAkM,GAAkB,UAAS;AAAA,YACrC,SAASk+M,EAAU,IAAIpqN,GAAK,cAAcA,GAAK,EAAE;AAAA,YACjD,aAAaA,GAAK;AAAA,YAClB,MAAM+rN;AAAA,YACN,MAAM/rN,GAAK;AAAA,YACX,SAAS,MAAMorN,GAAiBprN,GAAK,IAAI+rN,IAAU5/M,EAAK;AAAA,YACxD,QAAQ8+M;AAAA,YACR,UAAUD;AAAA,YACV,QAAQS;AAAA,YACR,YAAYzrN,GAAK;AAAA,YACjB,KAAKA,GAAK;AAAA,YACV,YAAYA,GAAK;AAAA,YACjB,QAAAiK;AAAA,UAAA;AAAA,QAAA;AAAA,QAEFX,gBAAAA,EAAAA,IAAC,SAAI,WAAU,iJACb,gCAAC0yI,IAAA,EAAS,WAAU,sBAAqB,EAAA,CAC3C;AAAA,MAAA,EAAA,GA5BQh8I,GAAK,EA6Bf,IAKFsJ,gBAAAA,EAAAA;AAAAA,QAACoiE;AAAA,QAAA;AAAA,UAEC,IAAI1rE,GAAK;AAAA,UACT,WAAWA,GAAK;AAAA,UAChB,KAAK8oC;AAAA,UACL,cAAc9oC,GAAK;AAAA,UACnB,OAAOA,GAAK;AAAA,UACZ,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,UAAUA,GAAK;AAAA,UACf,OAAOA,GAAK,eAAe;AAAA,UAC3B,YAAUqS,KAAArS,GAAK,SAAS,CAAC,MAAf,gBAAAqS,GAAkB,UAAS;AAAA,UACrC,SAAS+3M,EAAU,IAAIpqN,GAAK,cAAcA,GAAK,EAAE;AAAA,UACjD,aAAaA,GAAK;AAAA,UAClB,MAAM+rN;AAAA,UACN,MAAM/rN,GAAK;AAAA,UACX,SAAS,MAAMorN,GAAiBprN,GAAK,IAAI+rN,IAAU5/M,EAAK;AAAA,UACxD,QAAQ8+M;AAAA,UACR,UAAUD;AAAA,UACV,QAAQS;AAAA,UAER,YAAYzrN,GAAK;AAAA,UACjB,KAAKA,GAAK;AAAA,UACV,YAAYA,GAAK;AAAA,UACjB,QAAAiK;AAAA,QAAA;AAAA,QAvBKjK,GAAK;AAAA,MAAA;AAAA,IA0BhB,CAAC,EAAA,CACH,IAhGAo6I,KAAW0vE,MAAqB,gBAAgBE,IAC9C1gN,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,aAAa+hN;AAAA,QACb,aAAaC;AAAA,QACb,YAAYC;AAAA,QACZ,QAAQC;AAAA,QAER,iCAAC,OAAA,EAAI,WAAW,wGAAwGh/B,IAAa,+EAA+E,EAClN,KACA,UAAA;AAAA,UAAAljL,gBAAAA,EAAAA,IAACwiN,IAAA,EAAY,WAAU,0CAAA,CAA0C;AAAA,UACjExiN,gBAAAA,EAAAA,IAAC,MAAA,EAAG,WAAU,8BAA6B,UAAA,4BAAwB;AAAA,UACnEA,gBAAAA,EAAAA,IAAC,KAAA,EAAE,WAAU,QAAO,UAAA,4CAAA,CAAyC;AAAA,QAAA,EAAA,CAC/D;AAAA,MAAA;AAAA,IAAA,0BAGD,OAAA,EAAI,WAAU,QACb,UAAAC,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,MAAAD,gBAAAA,EAAAA,IAAC,KAAA,EAAE,WAAU,WAAU,UAAA,iBAAa;AAAA,MACpCA,gBAAAA,EAAAA,IAAC,OAAE,UAAA,oDAAA,CAAiD;AAAA,IAAA,EAAA,CACtD,EAAA,CACF;AAAA,IA+EJA,gBAAAA,EAAAA,IAAC,OAAA,EAAI,KAAKohN,GAAgB,WAAU,oDACjC,UAAAvC,KACC7+M,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,iFAAA,CAAiF,EAAA,CAEpG;AAAA,EAAA,GACF;AAEJ;","x_google_ignoreList":[0,1,2,7,8,9,10,11,15,16,17,18,19,20,21,22,23,26,27,28,29,30,31,32,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,73,74,75,78,79,80,81,82,84,85,86,88,91,92,97,98,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,205,207,210,211,212,213,214,215,216,217,218,219,223,224,225,232,233,234,235,236,237,238,243,244,245,246,247,248,249,250,251,254]} \ No newline at end of file diff --git a/packages/ui/dist-lib/lib-export.d.ts b/packages/ui/dist-lib/lib-export.d.ts new file mode 100644 index 00000000..265e5d44 --- /dev/null +++ b/packages/ui/dist-lib/lib-export.d.ts @@ -0,0 +1,4 @@ +export { default as ResponsiveImage } from './components/ResponsiveImage'; +export type { ResponsiveData } from './components/ResponsiveImage'; +export { default as PhotoGrid } from './components/PhotoGrid'; +export { MediaGrid } from './components/PhotoGrid'; diff --git a/packages/ui/dist-lib/lib/aimlapi.d.ts b/packages/ui/dist-lib/lib/aimlapi.d.ts new file mode 100644 index 00000000..1030771b --- /dev/null +++ b/packages/ui/dist-lib/lib/aimlapi.d.ts @@ -0,0 +1,21 @@ +declare const logger: { + debug: (message: string, data?: any) => void; + info: (message: string, data?: any) => void; + warn: (message: string, data?: any) => void; + error: (message: string, data?: any) => void; +}; +interface ImageResult { + imageData: ArrayBuffer; + text?: string; +} +/** + * Generate image using AIML API text-to-image + * Supports various models including ByteDance SeeDream v4, Flux, Stable Diffusion, etc. + */ +export declare const createImageWithAimlApi: (prompt: string, model?: string, apiKey?: string) => Promise<ImageResult | null>; +/** + * Edit image using AIML API image-to-image + * Supports models like SeeDream v4 Edit, SeedEdit 3.0, Flux i2i, etc. + */ +export declare const editImageWithAimlApi: (prompt: string, imageFiles: File[], model?: string, apiKey?: string) => Promise<ImageResult | null>; +export { logger }; diff --git a/packages/ui/dist-lib/lib/bria.d.ts b/packages/ui/dist-lib/lib/bria.d.ts new file mode 100644 index 00000000..72a1fdfc --- /dev/null +++ b/packages/ui/dist-lib/lib/bria.d.ts @@ -0,0 +1,21 @@ +declare const logger: { + debug: (message: string, data?: any) => void; + info: (message: string, data?: any) => void; + warn: (message: string, data?: any) => void; + error: (message: string, data?: any) => void; +}; +interface ImageResult { + imageData: ArrayBuffer; + text?: string; +} +/** + * Generate image using Bria text-to-image API + * Uses the fast endpoint with model version 3.2 for good balance of speed and quality + */ +export declare const createImageWithBria: (prompt: string, model?: string, apiKey?: string) => Promise<ImageResult | null>; +/** + * Edit image using Bria reimagine API (structure reference) + * Maintains the structure and depth of the input while incorporating new materials, colors, and textures + */ +export declare const editImageWithBria: (prompt: string, imageFiles: File[], model?: string, apiKey?: string) => Promise<ImageResult | null>; +export { logger }; diff --git a/packages/ui/dist-lib/lib/db.d.ts b/packages/ui/dist-lib/lib/db.d.ts new file mode 100644 index 00000000..68c33e23 --- /dev/null +++ b/packages/ui/dist-lib/lib/db.d.ts @@ -0,0 +1,231 @@ +import { UserProfile, PostMediaItem } from '../pages/Post/types'; +import { MediaType, MediaItem } from '../types'; +import { SupabaseClient } from '@supabase/supabase-js'; +export declare const fetchPostById: (id: string, client?: SupabaseClient) => Promise<{ + created_at: string | null; + description: string | null; + id: string; + meta: import('../integrations/supabase/types').Json | null; + settings: import('../integrations/supabase/types').Json | null; + title: string; + updated_at: string | null; + user_id: string; + pictures: { + created_at: string; + description: string | null; + flags: string[] | null; + id: string; + image_url: string; + is_selected: boolean; + likes_count: number | null; + meta: import('../integrations/supabase/types').Json | null; + organization_id: string | null; + parent_id: string | null; + position: number | null; + post_id: string | null; + tags: string[] | null; + thumbnail_url: string | null; + title: string; + type: string | null; + updated_at: string; + user_id: string; + visible: boolean; + }[]; +}>; +export declare const fetchPictureById: (id: string, client?: SupabaseClient) => Promise<{ + created_at: string; + description: string | null; + flags: string[] | null; + id: string; + image_url: string; + is_selected: boolean; + likes_count: number | null; + meta: import('../integrations/supabase/types').Json | null; + organization_id: string | null; + parent_id: string | null; + position: number | null; + post_id: string | null; + tags: string[] | null; + thumbnail_url: string | null; + title: string; + type: string | null; + updated_at: string; + user_id: string; + visible: boolean; + post: { + created_at: string | null; + description: string | null; + id: string; + meta: import('../integrations/supabase/types').Json | null; + settings: import('../integrations/supabase/types').Json | null; + title: string; + updated_at: string | null; + user_id: string; + }; +}>; +export declare const fetchPageById: (id: string, client?: SupabaseClient) => Promise<{ + content: import('../integrations/supabase/types').Json | null; + created_at: string; + id: string; + is_public: boolean; + owner: string; + parent: string | null; + slug: string; + tags: string[] | null; + title: string; + type: string | null; + updated_at: string; + visible: boolean; +}>; +export declare const fetchFullPost: (postId: string, client?: SupabaseClient) => Promise<{ + created_at: string | null; + description: string | null; + id: string; + meta: import('../integrations/supabase/types').Json | null; + settings: import('../integrations/supabase/types').Json | null; + title: string; + updated_at: string | null; + user_id: string; + pictures: { + created_at: string; + description: string | null; + flags: string[] | null; + id: string; + image_url: string; + is_selected: boolean; + likes_count: number | null; + meta: import('../integrations/supabase/types').Json | null; + organization_id: string | null; + parent_id: string | null; + position: number | null; + post_id: string | null; + tags: string[] | null; + thumbnail_url: string | null; + title: string; + type: string | null; + updated_at: string; + user_id: string; + visible: boolean; + }[]; +}>; +export declare const fetchAuthorProfile: (userId: string, client?: SupabaseClient) => Promise<UserProfile | null>; +export declare const fetchVersions: (mediaItem: PostMediaItem, userId?: string, client?: SupabaseClient) => Promise<{ + created_at: string; + description: string | null; + flags: string[] | null; + id: string; + image_url: string; + is_selected: boolean; + likes_count: number | null; + meta: import('../integrations/supabase/types').Json | null; + organization_id: string | null; + parent_id: string | null; + position: number | null; + post_id: string | null; + tags: string[] | null; + thumbnail_url: string | null; + title: string; + type: string | null; + updated_at: string; + user_id: string; + visible: boolean; +}[]>; +export declare const checkLikeStatus: (userId: string, pictureId: string, client?: SupabaseClient) => Promise<boolean>; +export declare const toggleLike: (userId: string, pictureId: string, isLiked: boolean, client?: SupabaseClient) => Promise<boolean>; +export declare const uploadFileToStorage: (userId: string, file: File | Blob, fileName?: string, client?: SupabaseClient) => Promise<string>; +export declare const createPicture: (picture: Partial<PostMediaItem>, client?: SupabaseClient) => Promise<{ + created_at: string; + description: string | null; + flags: string[] | null; + id: string; + image_url: string; + is_selected: boolean; + likes_count: number | null; + meta: import('../integrations/supabase/types').Json | null; + organization_id: string | null; + parent_id: string | null; + position: number | null; + post_id: string | null; + tags: string[] | null; + thumbnail_url: string | null; + title: string; + type: string | null; + updated_at: string; + user_id: string; + visible: boolean; +}>; +export declare const updatePostDetails: (postId: string, updates: { + title: string; + description: string; +}, client?: SupabaseClient) => Promise<void>; +export declare const unlinkPictures: (ids: string[], client?: SupabaseClient) => Promise<void>; +export declare const upsertPictures: (pictures: Partial<PostMediaItem>[], client?: SupabaseClient) => Promise<void>; +export declare const getUserSettings: (userId: string, client?: SupabaseClient) => Promise<any>; +export declare const updateUserSettings: (userId: string, settings: any, client?: SupabaseClient) => Promise<void>; +export declare const getUserOpenAIKey: (userId: string, client?: SupabaseClient) => Promise<any>; +export declare const addCollectionPictures: (inserts: { + collection_id: string; + picture_id: string; +}[], client?: SupabaseClient) => Promise<void>; +export declare const updateStorageFile: (path: string, blob: Blob, client?: SupabaseClient) => Promise<void>; +export declare const fetchSelectedVersions: (rootIds: string[], client?: SupabaseClient) => Promise<{ + created_at: string; + description: string | null; + flags: string[] | null; + id: string; + image_url: string; + is_selected: boolean; + likes_count: number | null; + meta: import('../integrations/supabase/types').Json | null; + organization_id: string | null; + parent_id: string | null; + position: number | null; + post_id: string | null; + tags: string[] | null; + thumbnail_url: string | null; + title: string; + type: string | null; + updated_at: string; + user_id: string; + visible: boolean; +}[]>; +export declare const fetchRelatedVersions: (rootIds: string[], client?: SupabaseClient) => Promise<{ + created_at: string; + description: string | null; + flags: string[] | null; + id: string; + image_url: string; + is_selected: boolean; + likes_count: number | null; + meta: import('../integrations/supabase/types').Json | null; + organization_id: string | null; + parent_id: string | null; + position: number | null; + post_id: string | null; + tags: string[] | null; + thumbnail_url: string | null; + title: string; + type: string | null; + updated_at: string; + user_id: string; + visible: boolean; +}[]>; +export declare const fetchUserRoles: (userId: string, client?: SupabaseClient) => Promise<("viewer" | "owner" | "admin" | "member")[]>; +export declare const fetchUserLikesForPictures: (userId: string, pictureIds: string[], client?: SupabaseClient) => Promise<string[]>; +export interface FeedPost { + id: string; + title: string; + description: string | null; + created_at: string; + user_id: string; + pictures: MediaItem[]; + cover: MediaItem; + likes_count: number; + comments_count: number; + type: MediaType; + author_profile?: UserProfile; +} +export declare const fetchFeedPosts: (source?: "home" | "collection" | "tag" | "user", sourceId?: string, isOrgContext?: boolean, orgSlug?: string, client?: SupabaseClient) => Promise<FeedPost[]>; +export declare const fetchFeedPostsPaginated: (source?: "home" | "collection" | "tag" | "user", sourceId?: string, isOrgContext?: boolean, orgSlug?: string, page?: number, pageSize?: number, client?: SupabaseClient) => Promise<FeedPost[]>; +export declare const mapFeedPostsToMediaItems: (posts: FeedPost[], sortBy?: "latest" | "top") => any[]; +export declare const augmentFeedPosts: (posts: any[]) => FeedPost[]; diff --git a/packages/ui/dist-lib/lib/image-router.d.ts b/packages/ui/dist-lib/lib/image-router.d.ts new file mode 100644 index 00000000..44b71c16 --- /dev/null +++ b/packages/ui/dist-lib/lib/image-router.d.ts @@ -0,0 +1,53 @@ +/** + * Image Generation Router + * Routes image generation requests to the appropriate AI provider based on the model format. + * Model format: "provider/model-name" + * + * Supported providers: + * - google: Google Generative AI (Gemini models) + * - replicate: Replicate API (various models) + * - bria: Bria.ai (coming soon) + */ +export interface ImageResult { + imageData: ArrayBuffer; + text?: string; +} +export interface ModelInfo { + provider: string; + modelName: string; + displayName: string; + supportsTextToImage: boolean; + supportsImageToImage: boolean; +} +export declare const AVAILABLE_MODELS: ModelInfo[]; +/** + * Parse model string into provider and model name + * @param modelString Format: "provider/model-name" + * @returns { provider, modelName } + */ +export declare const parseModelString: (modelString: string) => { + provider: string; + modelName: string; +}; +/** + * Get full model string from provider and model name + */ +export declare const getModelString: (provider: string, modelName: string) => string; +/** + * Create/generate a new image from text prompt + * Routes to the appropriate provider based on model string + */ +export declare const createImage: (prompt: string, modelString?: string, apiKey?: string, aspectRatio?: string, resolution?: string, enableSearchGrounding?: boolean) => Promise<ImageResult | null>; +/** + * Edit an existing image with a text prompt + * Routes to the appropriate provider based on model string + */ +export declare const editImage: (prompt: string, imageFiles: File[], modelString?: string, apiKey?: string, aspectRatio?: string, resolution?: string, enableSearchGrounding?: boolean) => Promise<ImageResult | null>; +/** + * Get model info by model string + */ +export declare const getModelInfo: (modelString: string) => ModelInfo | undefined; +/** + * Get all models for a specific provider + */ +export declare const getModelsByProvider: (provider: string) => ModelInfo[]; diff --git a/packages/ui/dist-lib/lib/markdownImageTools.d.ts b/packages/ui/dist-lib/lib/markdownImageTools.d.ts new file mode 100644 index 00000000..95bc50f0 --- /dev/null +++ b/packages/ui/dist-lib/lib/markdownImageTools.d.ts @@ -0,0 +1,54 @@ +/** + * Markdown Image Tools + * Tools for generating and embedding images in markdown content + */ +type LogFunction = (level: 'info' | 'warn' | 'error' | 'debug', message: string, data?: any) => void; +/** + * Tool: Generate Markdown Image + * Generates an image and returns markdown with embedded image + */ +export declare const generateMarkdownImageTool: (userId: string, addLog?: LogFunction) => import('openai/lib/RunnableFunction.mjs').RunnableToolFunctionWithParse<{ + model?: string; + prompt?: string; + caption?: string; + altText?: string; +}>; +/** + * Tool: Generate Text with Images + * Generates markdown content that can include both text and embedded images + */ +export declare const generateTextWithImagesTool: (userId: string, addLog?: LogFunction) => import('openai/lib/RunnableFunction.mjs').RunnableToolFunctionWithParse<{ + content?: string; + model?: string; + imagePrompts?: { + position?: "inline" | "top" | "middle" | "bottom"; + prompt?: string; + caption?: string; + altText?: string; + }[]; +}>; +/** + * Create markdown-specific tool preset + */ +export declare const createMarkdownToolPreset: (userId: string, model?: string, apiKey?: string, addLog?: LogFunction) => { + name: string; + description: string; + model: string; + tools: (import('openai/lib/RunnableFunction.mjs').RunnableToolFunctionWithParse<{ + model?: string; + prompt?: string; + caption?: string; + altText?: string; + }> | import('openai/lib/RunnableFunction.mjs').RunnableToolFunctionWithParse<{ + content?: string; + model?: string; + imagePrompts?: { + position?: "inline" | "top" | "middle" | "bottom"; + prompt?: string; + caption?: string; + altText?: string; + }[]; + }>)[]; + systemPrompt: string; +}; +export {}; diff --git a/packages/ui/dist-lib/lib/mediaRegistry.d.ts b/packages/ui/dist-lib/lib/mediaRegistry.d.ts new file mode 100644 index 00000000..0d897927 --- /dev/null +++ b/packages/ui/dist-lib/lib/mediaRegistry.d.ts @@ -0,0 +1,63 @@ +import { default as React } from 'react'; +export declare const MEDIA_TYPES: { + readonly SUPABASE_IMAGE: "supabase-image"; + readonly MUX_VIDEO: "mux-video"; + readonly VIDEO_INTERN: "video-intern"; + readonly YOUTUBE: "youtube"; + readonly TIKTOK: "tiktok"; + readonly PAGE: "page-intern"; + readonly PAGE_EXTERNAL: "page-external"; +}; +export type MediaType = typeof MEDIA_TYPES[keyof typeof MEDIA_TYPES] | null; +export declare function normalizeMediaType(type: string | null | undefined): MediaType; +export declare function isVideoType(type: MediaType): boolean; +export declare function isImageType(type: MediaType): boolean; +export declare function getMediaUrlField(type: MediaType): 'image_url' | 'image_url'; +export declare function getThumbnailField(type: MediaType): 'thumbnail_url' | null; +export interface MediaRendererProps { + id: string; + url: string; + thumbnailUrl?: string | null; + title: string; + author: string; + authorId: string; + likes: number; + comments: number; + isLiked?: boolean; + description?: string | null; + type: MediaType; + meta?: any; + onClick?: (id: string) => void; + onLike?: () => void; + onDelete?: () => void; +} +interface MediaTypeConfig { + name: string; + component: React.ComponentType<MediaRendererProps>; + uploadComponent?: React.ComponentType<any>; +} +export declare function registerMediaType(type: MediaType, config: MediaTypeConfig): void; +export declare function getMediaRenderer(type: MediaType): React.ComponentType<MediaRendererProps> | null; +export declare function getMediaTypeConfig(type: MediaType): MediaTypeConfig | null; +export declare function detectMediaType(url: string, meta?: any): MediaType; +declare const _default: { + MEDIA_TYPES: { + readonly SUPABASE_IMAGE: "supabase-image"; + readonly MUX_VIDEO: "mux-video"; + readonly VIDEO_INTERN: "video-intern"; + readonly YOUTUBE: "youtube"; + readonly TIKTOK: "tiktok"; + readonly PAGE: "page-intern"; + readonly PAGE_EXTERNAL: "page-external"; + }; + normalizeMediaType: typeof normalizeMediaType; + isVideoType: typeof isVideoType; + isImageType: typeof isImageType; + getMediaUrlField: typeof getMediaUrlField; + getThumbnailField: typeof getThumbnailField; + registerMediaType: typeof registerMediaType; + getMediaRenderer: typeof getMediaRenderer; + getMediaTypeConfig: typeof getMediaTypeConfig; + detectMediaType: typeof detectMediaType; +}; +export default _default; diff --git a/packages/ui/dist-lib/lib/openai.d.ts b/packages/ui/dist-lib/lib/openai.d.ts new file mode 100644 index 00000000..6a643771 --- /dev/null +++ b/packages/ui/dist-lib/lib/openai.d.ts @@ -0,0 +1,154 @@ +import { default as OpenAI } from 'openai'; +import { z } from 'zod'; +import { RunnableToolFunctionWithParse } from 'openai/lib/RunnableFunction'; +type LogFunction = (level: string, message: string, data?: any) => void; +/** + * SIMPLE TOOL PRESET MAPPING + * + * This mapping defines common tool combinations: + * - generate-only: [generate] + * - generate-metadata: [generate, metadata] + * - generate-publish: [generate, metadata, publish] + * - metadata-only: [metadata] + * - optimize-generate: [optimize, generate, metadata] + * + * Use these to avoid calling unwanted tools (e.g., publish when user wants manual control) + */ +export type PresetType = 'generate-only' | 'generate-metadata' | 'generate-publish' | 'metadata-only' | 'optimize-generate'; +export declare const createOpenAIClient: (apiKey?: string) => Promise<OpenAI | null>; +export declare const isOpenAIAvailable: (apiKey?: string) => Promise<boolean>; +export declare const withOpenAI: <T>(operation: (client: OpenAI) => Promise<T>, fallback?: T, apiKey?: string) => Promise<T | null>; +export declare const generateText: (input: string, model?: string, apiKey?: string, signal?: AbortSignal, onChunk?: (chunk: string) => void, webSearch?: boolean) => Promise<string | null>; +export declare const generateResponse: (input: string, model?: string, apiKey?: string) => Promise<string | null>; +export declare const analyzeImages: (imageFiles: File[], prompt?: string, model?: string, apiKey?: string) => Promise<{ + description: string; + title: string; +} | null>; +export declare const generateImageMetadata: (imageFiles: File[], apiKey?: string) => Promise<{ + description: string; + title: string; +} | null>; +export declare const transcribeAudio: (audioFile: File, model?: string, apiKey?: string) => Promise<string | null>; +export declare const optimizePrompt: (userPrompt: string, model?: string, apiKey?: string) => Promise<string | null>; +/** + * Helper function to create Zod-validated OpenAI tools + * Based on ref/tools/index.ts + */ +export declare const zodFunction: <T extends object>({ function: fn, schema, description, name, }: { + function: (args: T) => Promise<object>; + schema: z.ZodSchema<T>; + description?: string; + name?: string; +}) => RunnableToolFunctionWithParse<T>; +/** + * Tool: Generate Image + * Creates a new image from a text prompt using the specified AI model + */ +export declare const generateImageTool: (apiKey?: string) => RunnableToolFunctionWithParse<{ + model?: string; + prompt?: string; + count?: number; +}>; +/** + * Tool: Transcribe Audio + * Converts speech/audio to text using OpenAI Whisper + */ +export declare const transcribeAudioTool: (apiKey?: string) => RunnableToolFunctionWithParse<{ + model?: string; + audioFile?: any; +}>; +/** + * Tool: Optimize Prompt + * Enhances a user's prompt to produce better image generation results + */ +export declare const optimizePromptTool: (apiKey?: string) => RunnableToolFunctionWithParse<{ + model?: string; + prompt?: string; +}>; +/** + * Tool: Generate Text + * Generates text completion using GPT models + */ +export declare const generateTextTool: (apiKey?: string) => RunnableToolFunctionWithParse<{ + model?: string; + input?: string; +}>; +/** + * Tool: Generate Image Metadata + * Generates title and description for an image based on the prompt or image content + */ +export declare const generateImageMetadataTool: (apiKey?: string) => RunnableToolFunctionWithParse<{ + style?: string; + prompt?: string; +}>; +/** + * Tool: Publish Image to Gallery + * Publishes a generated image to the user's gallery with title and description + */ +export declare const publishImageTool: () => RunnableToolFunctionWithParse<{ + title?: string; + description?: string; + tags?: string[]; + prompt?: string; + imageUrl?: string; +}>; +export interface ToolPreset { + name: string; + description: string; + model: string; + tools: RunnableToolFunctionWithParse<any>[]; + systemPrompt?: string; +} +/** + * Create a simple custom preset using the preset type mapping + */ +export declare const createSimplePreset: (type: PresetType, systemPrompt: string, apiKey?: string) => ToolPreset; +/** + * Create tool presets with API key + */ +export declare const createToolPresets: (apiKey?: string, userId?: string, addLog?: LogFunction) => Record<string, ToolPreset>; +export interface RunToolsOptions { + prompt: string; + preset?: string | ToolPreset; + apiKey?: string; + onMessage?: (message: any) => void; + onToolCall?: (toolCall: any) => void; + onContent?: (content: string) => void; + model?: string; + maxIterations?: number; + userId?: string; + images?: string[]; + addLog?: LogFunction; +} +export interface RunToolsResult { + success: boolean; + content?: string; + messages: any[]; + toolCalls: any[]; + error?: string; +} +/** + * Run OpenAI with tools - main orchestration function + * Based on ref/run-tools.ts + * + * @example + * // Use preset + * const result = await runTools({ + * prompt: "Create a beautiful sunset over mountains", + * preset: "image-wizard" + * }); + * + * @example + * // Custom tools + * const result = await runTools({ + * prompt: "Generate an image of a cat", + * preset: { + * name: "custom", + * model: "gpt-4o-mini", + * tools: [generateImageTool()], + * systemPrompt: "You are a helpful assistant" + * } + * }); + */ +export declare const runTools: (options: RunToolsOptions) => Promise<RunToolsResult>; +export {}; diff --git a/packages/ui/dist-lib/lib/pageTools.d.ts b/packages/ui/dist-lib/lib/pageTools.d.ts new file mode 100644 index 00000000..011fff37 --- /dev/null +++ b/packages/ui/dist-lib/lib/pageTools.d.ts @@ -0,0 +1,72 @@ +type LogFunction = (level: string, message: string, data?: any) => void; +/** + * Creates a URL-friendly slug from a string. + * @param text The text to slugify. + * @returns A URL-friendly slug. + */ +export declare const slugify: (text: string) => string; +/** + * Formats markdown content into the required page JSON structure. + * @param pageId The unique identifier for the page. + * @param pageName The name of the page. + * @param markdownContent The markdown content for the page. + * @returns The structured page content object. + */ +export declare const formatPageContent: (pageId: string, pageName: string, markdownContent: string | undefined | null) => { + pages: { + [x: string]: { + id: string; + name: string; + createdAt: number; + updatedAt: number; + containers: { + id: string; + gap: number; + type: string; + order: number; + columns: number; + widgets: { + id: string; + order: number; + props: { + content: string; + templates: any[]; + placeholder: string; + }; + widgetId: string; + }[]; + children: any[]; + }[]; + }; + }; + version: string; + lastUpdated: number; +}; +/** + * Shared logic to create a page in the database + */ +export declare const createPageInDb: (userId: string, args: { + title: string; + content: string; + tags?: string[]; + is_public?: boolean; + visible?: boolean; +}, addLog?: LogFunction) => Promise<{ + success: boolean; + pageId: string; + slug: string; + url: string; + message: string; +}>; +/** + * Tool: Create Page + * Creates a new page with the given title, content, and metadata, and saves it to the database. + */ +export declare const createPageTool: (userId: string, addLog?: LogFunction) => import('openai/lib/RunnableFunction.mjs').RunnableToolFunctionWithParse<{ + title?: string; + content?: string; + is_public?: boolean; + tags?: string[]; + visible?: boolean; +}>; +export {}; diff --git a/packages/ui/dist-lib/lib/replicate.d.ts b/packages/ui/dist-lib/lib/replicate.d.ts new file mode 100644 index 00000000..50d46c77 --- /dev/null +++ b/packages/ui/dist-lib/lib/replicate.d.ts @@ -0,0 +1,13 @@ +declare const logger: { + debug: (message: string, data?: any) => void; + info: (message: string, data?: any) => void; + warn: (message: string, data?: any) => void; + error: (message: string, data?: any) => void; +}; +interface ImageResult { + imageData: ArrayBuffer; + text?: string; +} +export declare const createImageWithReplicate: (prompt: string, model?: string, apiKey?: string) => Promise<ImageResult | null>; +export declare const editImageWithReplicate: (prompt: string, imageFiles: File[], model?: string, apiKey?: string) => Promise<ImageResult | null>; +export { logger }; diff --git a/packages/ui/dist-lib/lib/utils.d.ts b/packages/ui/dist-lib/lib/utils.d.ts new file mode 100644 index 00000000..86f4720d --- /dev/null +++ b/packages/ui/dist-lib/lib/utils.d.ts @@ -0,0 +1,2 @@ +import { ClassValue } from 'clsx'; +export declare function cn(...inputs: ClassValue[]): string; diff --git a/packages/ui/dist-lib/pages/Post/db.d.ts b/packages/ui/dist-lib/pages/Post/db.d.ts new file mode 100644 index 00000000..41cdefeb --- /dev/null +++ b/packages/ui/dist-lib/pages/Post/db.d.ts @@ -0,0 +1 @@ +export * from '../../lib/db'; diff --git a/packages/ui/dist-lib/pm-pics-components.es.js b/packages/ui/dist-lib/pm-pics-components.es.js new file mode 100644 index 00000000..456e5254 --- /dev/null +++ b/packages/ui/dist-lib/pm-pics-components.es.js @@ -0,0 +1,7 @@ +import { U as o, U as s, S as i } from "./lib-export-CI8auKfP.js"; +export { + o as MediaGrid, + s as PhotoGrid, + i as ResponsiveImage +}; +//# sourceMappingURL=pm-pics-components.es.js.map diff --git a/packages/ui/dist-lib/pm-pics-components.es.js.map b/packages/ui/dist-lib/pm-pics-components.es.js.map new file mode 100644 index 00000000..732f4a56 --- /dev/null +++ b/packages/ui/dist-lib/pm-pics-components.es.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pm-pics-components.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"} \ No newline at end of file diff --git a/packages/ui/dist-lib/pm-pics-components.umd.js b/packages/ui/dist-lib/pm-pics-components.umd.js new file mode 100644 index 00000000..814b7349 --- /dev/null +++ b/packages/ui/dist-lib/pm-pics-components.umd.js @@ -0,0 +1,1189 @@ +(function(ln,U){typeof exports=="object"&&typeof module<"u"?U(exports,require("react"),require("@supabase/supabase-js"),require("lucide-react"),require("sonner"),require("react-router-dom"),require("react-dom")):typeof define=="function"&&define.amd?define(["exports","react","@supabase/supabase-js","lucide-react","sonner","react-router-dom","react-dom"],U):(ln=typeof globalThis<"u"?globalThis:ln||self,U(ln.PmPicsComponents={},ln.React,ln.Supabase,ln.lucideReact,ln.sonner,ln.ReactRouterDOM,ln.ReactDOM))})(this,function(ln,U,es,Se,at,gp,Qv){"use strict";var yHe=Object.defineProperty;var Toe=ln=>{throw TypeError(ln)};var vHe=(ln,U,es)=>U in ln?yHe(ln,U,{enumerable:!0,configurable:!0,writable:!0,value:es}):ln[U]=es;var G=(ln,U,es)=>vHe(ln,typeof U!="symbol"?U+"":U,es),oD=(ln,U,es)=>U.has(ln)||Toe("Cannot "+es);var h=(ln,U,es)=>(oD(ln,U,"read from private field"),es?es.call(ln):U.get(ln)),N=(ln,U,es)=>U.has(ln)?Toe("Cannot add the same private member more than once"):U instanceof WeakSet?U.add(ln):U.set(ln,es),M=(ln,U,es,Se)=>(oD(ln,U,"write to private field"),Se?Se.call(ln,es):U.set(ln,es),es),v=(ln,U,es)=>(oD(ln,U,"access private method"),es);var Aoe=(ln,U,es,Se)=>({set _(at){M(ln,U,at,es)},get _(){return h(ln,U,Se)}});var h8,coe,uoe,ey,ty,doe,ny,ry,z0,sy,Dc,Noe,Moe,Ooe,Poe,iy,El,_l,qi,rd,hoe,foe,poe,moe,O4,sd,H0,P4,q0,ci,id,us,Ioe,cD,y6,uD,dD,hD,U0,ta,oy,f8,Gn,dr,bHe,Jr,goe,I4,od,D4,sf,Oa,Doe,Roe,fD,pD,W0,ay,G0,R4,$4,na,Rc,ds,$oe,mD,Loe,Foe,joe,Zv,Boe,yoe,K0,$c,Lc,Fc,L4,ly,F4,jc,Voe,gD,yD,voe,Y0,Gs,hs,zoe,Hoe,qoe,Uoe,H8,Z0,Woe,ad,vD,Goe,X0,cy,ld,j4,uy,of,dy,Kn,Koe,Yoe,Zoe,Xoe,Joe,Qoe,eae,tae,q8,bD,v6,wD,af,hy,lf,nae,rae,sae,cf,cd,J0,ra,iae,xD,kD,CD,B4,fy,sa,Pa,Q0,oae,SD,em,py,V4,g8,aae,ud,z4,H4,ED,q4,_n,uf,my,gy,tm,U4,yy,ke,Zn,lae,vy,by,cae,uae,dae,hae,y8,HI,Qr,wHe,sg,fae,_D,pae,mae,gae,U8,yae,vae,bae,wae,xae,kae,Cae,Sae,Eae,_ae,Tae,Aae,Nae,Mae,Oae,Pae,Iae,Dae,W4,Tl,js,Xv,Rae,$ae,Lae,TD,Fae,G4,AD,Ia,K4,Y4,nm,df,jae,Bae,Vae,wy,xy,ky,zae,Hae,rm,Z4,Cy,qae,Uae,X4,sm,Sy,Bc,v8,Wae,hf,ff,pf,gr,bn,Ey,_y,Mt,ig,Gae,Kae,Yae,dd,Ty,Zae,Xae,Jae,Qae,ele,tle,nle,rle,mf,sle,W8,ND,ile,MD,ole,ale,OD,im,Vc,J4,zc,lle,cle,ule,dle,Q4,Al,gf,ew,om,tw,Nl,w8,hle,yf,vf,Ay,Ml,bf,PD,ID,hd,Zt,fd,am,pd,Ir,wf,Sn,fle,ple,mle,DD,Ny,RD,$D,gle,yle,vle,ble,wle,xle,lm,kle,LD,FD,xHe,Ui,Bn,yr,cm,My,um,dm,md,xf,Oe,Cle,Sle,hp,Kr,Ele,_le,Tle,G8,jD,BD,Ale,VD,Nle,Mle,Oy,zD,K8,Ole,Ple,Ile,HD,qD,UD,Dle,WD,Rle,Py,$le,GD,Mn,Lle,Fle,kHe,jle,Ble,Vle,zle,Hle,qle,Ule,Wle,Gle,Kle,Yle,Zle,Xle,Jle,Hc,Qle,ece,tce,nce,kf,qc,rce,sce,ice,oce,Uc,ui,hm,di,Ze,ua,Y8,Iy,KD,YD,ace,lce,cce,b6,ZD,uce,XD,dce,JD,hce,QD,fce,eR,pce,tR,mce,gce,yce,vce,Dy,Ry,nw,Vn,gd,fs,bce,wce,nR,rR,sR,xce,kce,Cce,rw,Cf,sw,x8,Sce,k8,Ol,iw,ow,aw,$y,Ly,ia,Ece,iR,oR,aR,C8,Wc,Fy,kr,_ce,Tce,Ace,Nce,Mce,Sf,jy,Oce,Z8,Pce,og,yd,vd,Ice,Dce,lR,Pl,Ef,Rce,fm,pm,Gc,X8,By,_f,Tf,lw,Da,$ce,Lce,Fce,jce,Bce,mm,Vce,cR,bd,uR,zce,Hce,wd,Kc,qce,Uce,Wce,Gce,qI,cw,UI,xd,Yc,Kce,Yce,Zce,Xce,WI,kd,Zc,Jce,Qce,eue,tue,GI,gm,ym,nue,dR,KI,vm,Xc,rue,hR,fR,YI,Af,Cd,sue,pR,iue,ZI,bm,Jc,oue,J8,aue,XI,Nf,Sd,lue,mR,cue,JI,Mf,Of,uue,due,hue,QI,wm,S8,fue,Vy,Pf,E8,pue,hi,If,zy,ht,mue,Df,Il,Ed,gue,yue,vue,bue,wue,Q8,fp,w6,xue,kue,Cue,Sue,eC,gR,Hy,_d,Eue,_ue,yR,vR,Tue,Aue,_8,uw,yo,dw,hw,Bs,Nue,Mue,Oue,Pue,Iue,Due,Rue,bR,T8,Qc,$ue,Lue,Fue,jue,fw,qy,pw,zr,Bue,Vue,wR,xR,kR,CR,zue,tC,A8,Uy,Wy,On,Hue,SR,que,Uue,Wue,Gue,ER,Kue,Yue,_R,pp,Zue,mw,Rf,gw,Dr,Xue,Jue,TR,Que,AR,ede,tde,NR,nde,rde,$f,N8,yw,Gy,vw,Ra,Ks,sde,ide,ode,ade,lde,bw,cde,ude,dde,Lf,Vs,hde,fde,pde,mde,gde,MR,yde,vde,Ff,_s,bde,wde,xde,kde,Cde,Sde,ww,Ede,_de,Tde,Dl,Ky,Ys,Ade,Nde,Mde,Ode,Pde,xw,Ide,Dde,Rde,Rr,Yy,kw,xt,$de,Lde,Fde,jde,Bde,OR,Vde,Zy,zde,Hde,PR,qde,IR,Ude,Wde,Gde,Kde,Yde,Zde,ag,Xde,Jde,Qde,vo,xm,Xy,eu,Wi,km,Gi,Td,Cm,jf,kt,DR,RR,ehe,the,nhe,rhe,she,nC,$R,LR,ihe,M8,O8,ohe,rC,sC,ahe,lhe,che,uhe,Cw,dhe,hhe,fhe,Bf,Rl,bo,Sw,Cr,lg,FR,phe,jR,mhe,ghe,iC,yhe,tD,$l,Jy,Qy,Ki,Ew,tu,Zs,Vf,zf,Sm,Em,Ad,_m,_w,Tm,Bt,vhe,bhe,whe,xhe,khe,BR,Che,ev,She,VR,Ehe,x6,_he,The,Ahe,Nhe,Mhe,Ohe,P8,Phe,tv,I8,Ihe,D8,Dhe,nv,rv,Rhe,Hf,Tw,Nd,$he,Lhe,zR,Am,qf,Fhe,jhe,Bhe,Md,Uf,nD,$a,Vhe,zhe,R8,HR,qR,Od,Nm,UR,Hhe,nu,Mm,fi,qhe,Uhe,Whe,Ghe,Khe,WR,Yhe,rD,oa,sv,Yi,Zhe,ru,Aw,Xhe,GR,Jhe,Qhe,efe,iv,Pd,Id,Nw,KR,aa,wo,sn,oC,tfe,nfe,rfe,YR,sfe,ife,ofe,afe,ZR,lfe,cfe,Dd,XR,aC,JR,QR,$8,La,cr,e$,ufe,t$,dfe,hfe,Mw,n$,r$,s$,ffe,i$,pfe,L8,ov,Wf,Ow,Pw,Ts,mfe,gfe,yfe,o$,vfe,bfe,a$,wfe,Gf,av,Om,Fa,xfe,kfe,Cfe,Sfe,Efe,Ll,Rd,lv,boe,Iw,Dw,Rw,Pm,cv,Kf,uv,dv,hv,$d,Ld,$w,ja,fv,Yf,pv,Fd,mv,Lw,Im,Ba,Dm,xo,Rm,la,jd,gv,Fw,jw,ko,Bd,$m,Bw,Lm,yv,Vw,Zf,vv,bv,zw,Fm,Fl,wv,jl,Bl,Afe,cg,jm,Bm,Hw,xv,kv,Cv,Sv,qw,Xf,Co,Vd,Vm,zm,Uw,Ev,Ww,Gw,_v,Tv,Av,F8,Nfe,Nv,Kw,Yw,Zw,Xw,Hm,Jw,Mv,Qw,e6,j8,Mfe,t6,n6,r6,Ov,Pv,Iv,su,s6,i6,Dv,Jf,Rv,o6,B8,Ofe,qm,vr,Pn,$v,Lv,Tn,ug,Ife,Dfe,Rfe,$fe,Lfe,Ffe,jfe,Bfe,Vfe,zfe,Hfe,qfe,Ufe,Wfe,Um,iu,a6,ou,Gfe,Kfe,Yfe,Zfe,l6,Vl,Qf,au,Fv,Xfe,Jfe,Ct,lu,ep,Wm,jv,c6,tp,Bv,V8,Gm,np,Vv,Ve,Qfe,epe,tpe,npe,Km,rpe,spe,ipe,u$,ope,ape,lpe,cpe,upe,d$,dpe,hpe,fpe,h$,ppe,f$,mpe,p$,gpe,ype,Ms,m$,g$,zn,Ym,Zm,zv,Xm,rp,zd,pn,CHe,SHe,vpe,mp,bpe,wpe,xpe,y$,cC,kpe,Cpe,v$,k6,Spe,sp,wi,Epe,_pe,Tpe,uC,dC,zl,z8,Ape,ip,cu,u6,Sr,b$,Jv,Npe,Mpe,Ope,w$,hC,x$,yn,In,op,ap,d6,Hv,Jm,Qm,qv,h6,Va,Uv,nt,Ppe,Ipe,k$,Dpe,C$,Rpe,$pe,Lpe,S$,E$,_$,T$,Fpe,jpe,Bpe,A$,Vpe,N$,zpe,M$,Ud,Hpe,qpe,O$,Upe;function P$(n){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const t in n)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(n,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>n[t]})}}return e.default=n,Object.freeze(e)}const g=P$(U),I$=P$(Qv);var D$=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function R$(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var fC={exports:{}},eb={};/** + * @license React + * react-jsx-runtime.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var $$;function Wpe(){if($$)return eb;$$=1;var n=U,e=Symbol.for("react.element"),t=Symbol.for("react.fragment"),r=Object.prototype.hasOwnProperty,s=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};function o(a,l,c){var u,d={},f=null,p=null;c!==void 0&&(f=""+c),l.key!==void 0&&(f=""+l.key),l.ref!==void 0&&(p=l.ref);for(u in l)r.call(l,u)&&!i.hasOwnProperty(u)&&(d[u]=l[u]);if(a&&a.defaultProps)for(u in l=a.defaultProps,l)d[u]===void 0&&(d[u]=l[u]);return{$$typeof:e,type:a,key:f,ref:p,props:d,_owner:s.current}}return eb.Fragment=t,eb.jsx=o,eb.jsxs=o,eb}var tb={};/** + * @license React + * react-jsx-runtime.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var L$;function Gpe(){return L$||(L$=1,process.env.NODE_ENV!=="production"&&function(){var n=U,e=Symbol.for("react.element"),t=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),s=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),o=Symbol.for("react.provider"),a=Symbol.for("react.context"),l=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),u=Symbol.for("react.suspense_list"),d=Symbol.for("react.memo"),f=Symbol.for("react.lazy"),p=Symbol.for("react.offscreen"),m=Symbol.iterator,y="@@iterator";function w(te){if(te===null||typeof te!="object")return null;var Ae=m&&te[m]||te[y];return typeof Ae=="function"?Ae:null}var k=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function x(te){{for(var Ae=arguments.length,Ge=new Array(Ae>1?Ae-1:0),mt=1;mt<Ae;mt++)Ge[mt-1]=arguments[mt];S("error",te,Ge)}}function S(te,Ae,Ge){{var mt=k.ReactDebugCurrentFrame,Nn=mt.getStackAddendum();Nn!==""&&(Ae+="%s",Ge=Ge.concat([Nn]));var Yn=Ge.map(function(vn){return String(vn)});Yn.unshift("Warning: "+Ae),Function.prototype.apply.call(console[te],console,Yn)}}var _=!1,A=!1,T=!1,O=!1,I=!1,R;R=Symbol.for("react.module.reference");function D(te){return!!(typeof te=="string"||typeof te=="function"||te===r||te===i||I||te===s||te===c||te===u||O||te===p||_||A||T||typeof te=="object"&&te!==null&&(te.$$typeof===f||te.$$typeof===d||te.$$typeof===o||te.$$typeof===a||te.$$typeof===l||te.$$typeof===R||te.getModuleId!==void 0))}function W(te,Ae,Ge){var mt=te.displayName;if(mt)return mt;var Nn=Ae.displayName||Ae.name||"";return Nn!==""?Ge+"("+Nn+")":Ge}function H(te){return te.displayName||"Context"}function re(te){if(te==null)return null;if(typeof te.tag=="number"&&x("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof te=="function")return te.displayName||te.name||null;if(typeof te=="string")return te;switch(te){case r:return"Fragment";case t:return"Portal";case i:return"Profiler";case s:return"StrictMode";case c:return"Suspense";case u:return"SuspenseList"}if(typeof te=="object")switch(te.$$typeof){case a:var Ae=te;return H(Ae)+".Consumer";case o:var Ge=te;return H(Ge._context)+".Provider";case l:return W(te,te.render,"ForwardRef");case d:var mt=te.displayName||null;return mt!==null?mt:re(te.type)||"Memo";case f:{var Nn=te,Yn=Nn._payload,vn=Nn._init;try{return re(vn(Yn))}catch{return null}}}return null}var ae=Object.assign,de=0,le,X,se,J,$,ve,Pe;function q(){}q.__reactDisabledLog=!0;function Xe(){{if(de===0){le=console.log,X=console.info,se=console.warn,J=console.error,$=console.group,ve=console.groupCollapsed,Pe=console.groupEnd;var te={configurable:!0,enumerable:!0,value:q,writable:!0};Object.defineProperties(console,{info:te,log:te,warn:te,error:te,group:te,groupCollapsed:te,groupEnd:te})}de++}}function qe(){{if(de--,de===0){var te={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:ae({},te,{value:le}),info:ae({},te,{value:X}),warn:ae({},te,{value:se}),error:ae({},te,{value:J}),group:ae({},te,{value:$}),groupCollapsed:ae({},te,{value:ve}),groupEnd:ae({},te,{value:Pe})})}de<0&&x("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var Ye=k.ReactCurrentDispatcher,it;function We(te,Ae,Ge){{if(it===void 0)try{throw Error()}catch(Nn){var mt=Nn.stack.trim().match(/\n( *(at )?)/);it=mt&&mt[1]||""}return` +`+it+te}}var ot=!1,ge;{var Ie=typeof WeakMap=="function"?WeakMap:Map;ge=new Ie}function pt(te,Ae){if(!te||ot)return"";{var Ge=ge.get(te);if(Ge!==void 0)return Ge}var mt;ot=!0;var Nn=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var Yn;Yn=Ye.current,Ye.current=null,Xe();try{if(Ae){var vn=function(){throw Error()};if(Object.defineProperty(vn.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(vn,[])}catch(Hn){mt=Hn}Reflect.construct(te,[],vn)}else{try{vn.call()}catch(Hn){mt=Hn}te.call(vn.prototype)}}else{try{throw Error()}catch(Hn){mt=Hn}te()}}catch(Hn){if(Hn&&mt&&typeof Hn.stack=="string"){for(var an=Hn.stack.split(` +`),As=mt.stack.split(` +`),ze=an.length-1,Q=As.length-1;ze>=1&&Q>=0&&an[ze]!==As[Q];)Q--;for(;ze>=1&&Q>=0;ze--,Q--)if(an[ze]!==As[Q]){if(ze!==1||Q!==1)do if(ze--,Q--,Q<0||an[ze]!==As[Q]){var _e=` +`+an[ze].replace(" at new "," at ");return te.displayName&&_e.includes("<anonymous>")&&(_e=_e.replace("<anonymous>",te.displayName)),typeof te=="function"&&ge.set(te,_e),_e}while(ze>=1&&Q>=0);break}}}finally{ot=!1,Ye.current=Yn,qe(),Error.prepareStackTrace=Nn}var Je=te?te.displayName||te.name:"",Dn=Je?We(Je):"";return typeof te=="function"&&ge.set(te,Dn),Dn}function j(te,Ae,Ge){return pt(te,!1)}function Y(te){var Ae=te.prototype;return!!(Ae&&Ae.isReactComponent)}function ce(te,Ae,Ge){if(te==null)return"";if(typeof te=="function")return pt(te,Y(te));if(typeof te=="string")return We(te);switch(te){case c:return We("Suspense");case u:return We("SuspenseList")}if(typeof te=="object")switch(te.$$typeof){case l:return j(te.render);case d:return ce(te.type,Ae,Ge);case f:{var mt=te,Nn=mt._payload,Yn=mt._init;try{return ce(Yn(Nn),Ae,Ge)}catch{}}}return""}var be=Object.prototype.hasOwnProperty,xe={},ne=k.ReactDebugCurrentFrame;function ue(te){if(te){var Ae=te._owner,Ge=ce(te.type,te._source,Ae?Ae.type:null);ne.setExtraStackFrame(Ge)}else ne.setExtraStackFrame(null)}function ye(te,Ae,Ge,mt,Nn){{var Yn=Function.call.bind(be);for(var vn in te)if(Yn(te,vn)){var an=void 0;try{if(typeof te[vn]!="function"){var As=Error((mt||"React class")+": "+Ge+" type `"+vn+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof te[vn]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw As.name="Invariant Violation",As}an=te[vn](Ae,vn,mt,Ge,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(ze){an=ze}an&&!(an instanceof Error)&&(ue(Nn),x("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",mt||"React class",Ge,vn,typeof an),ue(null)),an instanceof Error&&!(an.message in xe)&&(xe[an.message]=!0,ue(Nn),x("Failed %s type: %s",Ge,an.message),ue(null))}}}var L=Array.isArray;function V(te){return L(te)}function ie(te){{var Ae=typeof Symbol=="function"&&Symbol.toStringTag,Ge=Ae&&te[Symbol.toStringTag]||te.constructor.name||"Object";return Ge}}function he(te){try{return z(te),!1}catch{return!0}}function z(te){return""+te}function B(te){if(he(te))return x("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",ie(te)),z(te)}var ee=k.ReactCurrentOwner,we={key:!0,ref:!0,__self:!0,__source:!0},Ee,rt;function en(te){if(be.call(te,"ref")){var Ae=Object.getOwnPropertyDescriptor(te,"ref").get;if(Ae&&Ae.isReactWarning)return!1}return te.ref!==void 0}function An(te){if(be.call(te,"key")){var Ae=Object.getOwnPropertyDescriptor(te,"key").get;if(Ae&&Ae.isReactWarning)return!1}return te.key!==void 0}function tr(te,Ae){typeof te.ref=="string"&&ee.current}function $r(te,Ae){{var Ge=function(){Ee||(Ee=!0,x("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",Ae))};Ge.isReactWarning=!0,Object.defineProperty(te,"key",{get:Ge,configurable:!0})}}function Er(te,Ae){{var Ge=function(){rt||(rt=!0,x("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",Ae))};Ge.isReactWarning=!0,Object.defineProperty(te,"ref",{get:Ge,configurable:!0})}}var on=function(te,Ae,Ge,mt,Nn,Yn,vn){var an={$$typeof:e,type:te,key:Ae,ref:Ge,props:vn,_owner:Yn};return an._store={},Object.defineProperty(an._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(an,"_self",{configurable:!1,enumerable:!1,writable:!1,value:mt}),Object.defineProperty(an,"_source",{configurable:!1,enumerable:!1,writable:!1,value:Nn}),Object.freeze&&(Object.freeze(an.props),Object.freeze(an)),an};function pr(te,Ae,Ge,mt,Nn){{var Yn,vn={},an=null,As=null;Ge!==void 0&&(B(Ge),an=""+Ge),An(Ae)&&(B(Ae.key),an=""+Ae.key),en(Ae)&&(As=Ae.ref,tr(Ae,Nn));for(Yn in Ae)be.call(Ae,Yn)&&!we.hasOwnProperty(Yn)&&(vn[Yn]=Ae[Yn]);if(te&&te.defaultProps){var ze=te.defaultProps;for(Yn in ze)vn[Yn]===void 0&&(vn[Yn]=ze[Yn])}if(an||As){var Q=typeof te=="function"?te.displayName||te.name||"Unknown":te;an&&$r(vn,Q),As&&Er(vn,Q)}return on(te,an,As,Nn,mt,ee.current,vn)}}var Lr=k.ReactCurrentOwner,ca=k.ReactDebugCurrentFrame;function So(te){if(te){var Ae=te._owner,Ge=ce(te.type,te._source,Ae?Ae.type:null);ca.setExtraStackFrame(Ge)}else ca.setExtraStackFrame(null)}var Hl;Hl=!1;function lp(te){return typeof te=="object"&&te!==null&&te.$$typeof===e}function ql(){{if(Lr.current){var te=re(Lr.current.type);if(te)return` + +Check the render method of \``+te+"`."}return""}}function Wv(te){return""}var eg={};function Hr(te){{var Ae=ql();if(!Ae){var Ge=typeof te=="string"?te:te.displayName||te.name;Ge&&(Ae=` + +Check the top-level render call using <`+Ge+">.")}return Ae}}function za(te,Ae){{if(!te._store||te._store.validated||te.key!=null)return;te._store.validated=!0;var Ge=Hr(Ae);if(eg[Ge])return;eg[Ge]=!0;var mt="";te&&te._owner&&te._owner!==Lr.current&&(mt=" It was passed a child from "+re(te._owner.type)+"."),So(te),x('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',Ge,mt),So(null)}}function tg(te,Ae){{if(typeof te!="object")return;if(V(te))for(var Ge=0;Ge<te.length;Ge++){var mt=te[Ge];lp(mt)&&za(mt,Ae)}else if(lp(te))te._store&&(te._store.validated=!0);else if(te){var Nn=w(te);if(typeof Nn=="function"&&Nn!==te.entries)for(var Yn=Nn.call(te),vn;!(vn=Yn.next()).done;)lp(vn.value)&&za(vn.value,Ae)}}}function ng(te){{var Ae=te.type;if(Ae==null||typeof Ae=="string")return;var Ge;if(typeof Ae=="function")Ge=Ae.propTypes;else if(typeof Ae=="object"&&(Ae.$$typeof===l||Ae.$$typeof===d))Ge=Ae.propTypes;else return;if(Ge){var mt=re(Ae);ye(Ge,te.props,"prop",mt,te)}else if(Ae.PropTypes!==void 0&&!Hl){Hl=!0;var Nn=re(Ae);x("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",Nn||"Unknown")}typeof Ae.getDefaultProps=="function"&&!Ae.getDefaultProps.isReactClassApproved&&x("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}function cp(te){{for(var Ae=Object.keys(te.props),Ge=0;Ge<Ae.length;Ge++){var mt=Ae[Ge];if(mt!=="children"&&mt!=="key"){So(te),x("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",mt),So(null);break}}te.ref!==null&&(So(te),x("Invalid attribute `ref` supplied to `React.Fragment`."),So(null))}}var up={};function dp(te,Ae,Ge,mt,Nn,Yn){{var vn=D(te);if(!vn){var an="";(te===void 0||typeof te=="object"&&te!==null&&Object.keys(te).length===0)&&(an+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");var As=Wv();As?an+=As:an+=ql();var ze;te===null?ze="null":V(te)?ze="array":te!==void 0&&te.$$typeof===e?(ze="<"+(re(te.type)||"Unknown")+" />",an=" Did you accidentally export a JSX literal instead of a component?"):ze=typeof te,x("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",ze,an)}var Q=pr(te,Ae,Ge,Nn,Yn);if(Q==null)return Q;if(vn){var _e=Ae.children;if(_e!==void 0)if(mt)if(V(_e)){for(var Je=0;Je<_e.length;Je++)tg(_e[Je],te);Object.freeze&&Object.freeze(_e)}else x("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else tg(_e,te)}if(be.call(Ae,"key")){var Dn=re(te),Hn=Object.keys(Ae).filter(function(Eo){return Eo!=="key"}),_r=Hn.length>0?"{key: someKey, "+Hn.join(": ..., ")+": ...}":"{key: someKey}";if(!up[Dn+_r]){var zs=Hn.length>0?"{"+Hn.join(": ..., ")+": ...}":"{}";x(`A props object containing a "key" prop is being spread into JSX: + let props = %s; + <%s {...props} /> +React keys must be passed directly to JSX without using spread: + let props = %s; + <%s key={someKey} {...props} />`,_r,Dn,zs,Dn),up[Dn+_r]=!0}}return te===r?cp(Q):ng(Q),Q}}function Gv(te,Ae,Ge){return dp(te,Ae,Ge,!0)}function Zi(te,Ae,Ge){return dp(te,Ae,Ge,!1)}var Ha=Zi,rg=Gv;tb.Fragment=r,tb.jsx=Ha,tb.jsxs=rg}()),tb}process.env.NODE_ENV==="production"?fC.exports=Wpe():fC.exports=Gpe();var b=fC.exports;const C6=new Map,Kpe=({src:n,responsiveSizes:e=[180,640,1024],formats:t=["avif","webp","jpeg"],enabled:r=!0,apiUrl:s})=>{const[i,o]=U.useState(null),[a,l]=U.useState(!1),[c,u]=U.useState(null);return U.useEffect(()=>{let d=!0;return(async()=>{if(!n||!r){d&&(n||(o(null),l(!1)));return}d&&(l(!0),u(null));try{if(typeof n=="string"){if(n.startsWith("data:")){d&&(o({img:{src:n,width:0,height:0,format:"unknown"},sources:[]}),l(!1));return}const p=JSON.stringify({src:n,sizes:e,formats:t,apiUrl:s});if(!C6.has(p)){const y=(async()=>{const w=new FormData;w.append("url",n),w.append("sizes",JSON.stringify(e)),w.append("formats",JSON.stringify(t));const x=await fetch(`${s||void 0||"http://192.168.1.11:3333"}/api/images/responsive`,{method:"POST",body:w});if(!x.ok){const S=await x.text();throw C6.delete(p),new Error(S||"Failed to generate responsive images")}return x.json()})();C6.set(p,y)}const m=await C6.get(p);d&&o(m)}else{const p=new FormData;p.append("file",n),p.append("sizes",JSON.stringify(e)),p.append("formats",JSON.stringify(t));const y=await fetch(`${s||void 0||""}/api/images/responsive`,{method:"POST",body:p});if(!y.ok){const k=await y.text();throw new Error(k||"Failed to generate responsive images")}const w=await y.json();d&&o(w)}}catch(p){console.error("Error generating responsive images:",p),d&&u(p.message)}finally{d&&l(!1)}})(),()=>{d=!1}},[n,JSON.stringify(e),JSON.stringify(t),r]),{data:i,loading:a,error:c}},nb=({src:n,sizes:e="(max-width: 1024px) 100vw, 50vw",className:t,imgClassName:r,responsiveSizes:s=[180,640,1024,1280,1600],formats:i=["avif","webp"],alt:o,onDataLoaded:a,rootMargin:l="800px",onLoad:c,onError:u,data:d,apiUrl:f,...p})=>{const[m,y]=U.useState(p.loading==="eager"),[w,k]=U.useState(!1),x=U.useRef(null),S=U.useRef(null);U.useEffect(()=>{if(p.loading==="eager"||d){y(!0);return}const R=new IntersectionObserver(([D])=>{D.isIntersecting&&(y(!0),R.disconnect())},{rootMargin:l});return x.current&&R.observe(x.current),()=>{R.disconnect()}},[p.loading,l,d]);const _=Kpe({src:n,responsiveSizes:s,formats:i,enabled:m&&!d,apiUrl:f}),A=d||_.data,T=!d&&_.loading,O=!d&&_.error;return U.useEffect(()=>{A&&a&&a(A)},[A,a]),U.useEffect(()=>{k(!1)},[n]),U.useEffect(()=>{var R;(R=S.current)!=null&&R.complete&&k(!0)},[A,w]),!m||(T||m&&!A&&!O)?b.jsx("div",{ref:x,className:`animate-pulse bg-gray-200 w-full h-full ${t||""}`}):O||!A?typeof n=="string"?b.jsx("img",{src:n,alt:o,className:r||t,...p}):b.jsx("div",{className:"text-red-500 text-xs",children:"Failed to load image"}):b.jsxs("div",{className:`relative w-full h-full ${t||""}`,children:[b.jsxs("picture",{children:[(A.sources||[]).map((R,D)=>b.jsx("source",{srcSet:R.srcset,type:R.type,sizes:e},D)),b.jsx("img",{ref:S,src:A.img.src,alt:o,width:A.img.width>0?A.img.width:void 0,height:A.img.height>0?A.img.height:void 0,className:`${r||""} transition-opacity duration-300 ${w?"opacity-100":"opacity-0"}`,onLoad:R=>{k(!0),c==null||c(R)},onError:R=>{k(!0),u==null||u(R)},loading:p.loading||"lazy",decoding:"async",...p})]}),!w&&b.jsx("div",{className:"absolute inset-0 flex items-center justify-center bg-gray-100/50 z-10 pointer-events-none",children:b.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-2 border-primary border-t-transparent"})})]})},Yt=es.createClient("https://ytoadlpbdguriiccjnip.supabase.co","eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inl0b2FkbHBiZGd1cmlpY2NqbmlwIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTg5NjU5OTAsImV4cCI6MjA3NDU0MTk5MH0.mXt594NQ2QsJQ_F-HqsSlBsLQ5EUB4iFxXtPE7zyaX8",{auth:{storage:localStorage,persistSession:!0,autoRefreshToken:!0}}),rb=new Map,Ype=async(n,e)=>{if(!rb.has(n)){const t=e().catch(r=>{throw rb.delete(n),r}).finally(()=>{setTimeout(()=>rb.delete(n),2500)});rb.set(n,t)}return rb.get(n)},Zpe=async(n,e)=>{const t=e||Yt;if(n.length===0)return[];const s=`selected-versions-${[...n].sort().join(",")}`;return Ype(s,async()=>{const i=`(${n.join(",")})`,{data:o,error:a}=await t.from("pictures").select("*").eq("is_selected",!0).or(`parent_id.in.${i},id.in.${i}`);if(a)throw a;return o})},Xpe=async(n="home",e,t,r,s=0,i=30,o)=>{const a=o||Yt,l=s*i,c=l+i-1;let u=a.from("posts").select(` + *, + pictures( + id, + image_url, + thumbnail_url, + type, + meta, + description, + likes_count, + visible, + is_selected, + position, + parent_id, + created_at, + title + ) + `).order("created_at",{ascending:!1}).range(l,c);!e&&n==="home"&&(u=u.or("settings.is.null,settings->>visibility.eq.public"));const{data:d,error:f}=await u;if(f)throw f;let p=[];if(n==="home"||n==="user"||n==="collection"){let O=a.from("pages").select("*").order("created_at",{ascending:!1}).range(l,c);n==="user"&&e?(O=O.eq("owner",e),O=O.eq("is_public",!0).eq("visible",!0)):n==="home"&&(O=O.eq("is_public",!0).eq("visible",!0));const{data:I,error:R}=await O;!R&&I&&(p=I),console.log("pagesData : source",n,p)}else console.log("no pages for source",n);const m=[],y=new Map;p.forEach(O=>{var D;let I=O.content;if(typeof I=="string")try{I=JSON.parse(I)}catch(W){console.error(`[db] Failed to parse content for page ${O.id}`,W);return}let R=I==null?void 0:I.containers;if(!R&&(I!=null&&I.pages)){const W=Object.keys(I.pages)[0];W&&((D=I.pages[W])!=null&&D.containers)&&(R=I.pages[W].containers)}if(R){for(const W of R)if(W.widgets){const H=W.widgets.find(re=>{var ae;return re.widgetId==="photo-card"&&((ae=re.props)==null?void 0:ae.pictureId)});if(H){const re=H.props.pictureId;m.push(re),y.set(O.id,re);break}}}});const w=new Map;if(m.length>0){const{data:O}=await a.from("pictures").select("id, image_url").in("id",m);O==null||O.forEach(I=>w.set(I.id,I.image_url))}const k=new Set,x=new Map;(d||[]).forEach(O=>{const R=(O.pictures||[]).filter(W=>W.visible!==!1);R.sort((W,H)=>(W.position||0)-(H.position||0));const D=R[0];D&&(x.set(O.id,D),k.add(D.parent_id||D.id))});let S=[];k.size>0&&(S=await Zpe(Array.from(k),a));const _=(d||[]).map(O=>{let I=x.get(O.id);if(!I){const re=O.settings||{};if(re&&re.link)I={id:O.id,picture_id:O.id,title:O.title,description:O.description,image_url:re.image_url||"https://picsum.photos/seed/"+O.id+"/600/400",thumbnail_url:re.thumbnail_url||null,type:"page-external",meta:{url:re.link},created_at:O.created_at,user_id:O.user_id,likes_count:0,comments:[{count:0}],visible:!0,is_selected:!1,position:0};else return null}const R=I.parent_id||I.id,D=S==null?void 0:S.find(re=>(re.id===R||re.parent_id===R)&&re.is_selected);D&&D.id!==I.id&&(I=D);const H=(O.pictures||[]).filter(re=>re.visible!==!1).sort((re,ae)=>(re.position||0)-(ae.position||0));return{id:O.id,title:O.title,description:O.description,created_at:O.created_at,user_id:O.user_id,pictures:H,cover:I,likes_count:H.reduce((re,ae)=>re+(ae.likes_count||0),0),comments_count:0,type:I.type}}).filter(O=>O!==null),A=p.map(O=>{let I="https://picsum.photos/640";const R=y.get(O.id);if(R){const W=w.get(R);W&&(I=W)}const D={id:O.id,image_url:I,thumbnail_url:null,type:"page-intern",meta:{slug:O.slug},description:null,likes_count:0,visible:!0,is_selected:!1,position:0,created_at:O.created_at,title:O.title};return{id:O.id,title:O.title,description:null,created_at:O.created_at,user_id:O.owner,pictures:[D],cover:D,likes_count:0,comments_count:0,type:"page-intern"}}),T=[..._,...A];return T.sort((O,I)=>new Date(I.created_at).getTime()-new Date(O.created_at).getTime()),T},Jpe=(n,e="latest")=>n.map(t=>{let r=t.cover;if(t.pictures&&t.pictures.length>0){const s=t.pictures.filter(i=>i.visible!==!1);s.length>0?e==="latest"?r=s.reduce((i,o)=>{const a=new Date(i.created_at||t.created_at).getTime();return new Date(o.created_at||t.created_at).getTime()>a?o:i}):r=[...s].sort((o,a)=>(o.position||0)-(a.position||0))[0]:r=t.pictures[0]}return r?{id:t.id,picture_id:r.id,title:t.title,description:t.description,image_url:r.image_url,thumbnail_url:r.thumbnail_url,type:r.type,meta:r.meta,created_at:t.created_at,user_id:t.user_id,likes_count:t.likes_count,comments:[{count:t.comments_count}],responsive:r.responsive,job:r.job}:null}).filter(t=>t!==null),Qpe=n=>n.map(e=>{if(!e.cover){const t=e.pictures||[],r=t.filter(s=>s.visible!==!1).sort((s,i)=>(s.position||0)-(i.position||0));return{...e,cover:r[0]||t[0],author_profile:e.author?{user_id:e.author.user_id,username:e.author.username,display_name:e.author.display_name,avatar_url:e.author.avatar_url}:void 0}}return e});function F$(n,e){if(typeof n=="function")return n(e);n!=null&&(n.current=e)}function Wd(...n){return e=>{let t=!1;const r=n.map(s=>{const i=F$(s,e);return!t&&typeof i=="function"&&(t=!0),i});if(t)return()=>{for(let s=0;s<r.length;s++){const i=r[s];typeof i=="function"?i():F$(n[s],null)}}}}function Tr(...n){return g.useCallback(Wd(...n),n)}var e0e=Symbol.for("react.lazy"),S6=g[" use ".trim().toString()];function t0e(n){return typeof n=="object"&&n!==null&&"then"in n}function j$(n){return n!=null&&typeof n=="object"&&"$$typeof"in n&&n.$$typeof===e0e&&"_payload"in n&&t0e(n._payload)}function pC(n){const e=n0e(n),t=g.forwardRef((r,s)=>{let{children:i,...o}=r;j$(i)&&typeof S6=="function"&&(i=S6(i._payload));const a=g.Children.toArray(i),l=a.find(s0e);if(l){const c=l.props.children,u=a.map(d=>d===l?g.Children.count(c)>1?g.Children.only(null):g.isValidElement(c)?c.props.children:null:d);return b.jsx(e,{...o,ref:s,children:g.isValidElement(c)?g.cloneElement(c,void 0,u):null})}return b.jsx(e,{...o,ref:s,children:i})});return t.displayName=`${n}.Slot`,t}var B$=pC("Slot");function n0e(n){const e=g.forwardRef((t,r)=>{let{children:s,...i}=t;if(j$(s)&&typeof S6=="function"&&(s=S6(s._payload)),g.isValidElement(s)){const o=o0e(s),a=i0e(i,s.props);return s.type!==g.Fragment&&(a.ref=r?Wd(r,o):o),g.cloneElement(s,a)}return g.Children.count(s)>1?g.Children.only(null):null});return e.displayName=`${n}.SlotClone`,e}var r0e=Symbol("radix.slottable");function s0e(n){return g.isValidElement(n)&&typeof n.type=="function"&&"__radixId"in n.type&&n.type.__radixId===r0e}function i0e(n,e){const t={...e};for(const r in e){const s=n[r],i=e[r];/^on[A-Z]/.test(r)?s&&i?t[r]=(...a)=>{const l=i(...a);return s(...a),l}:s&&(t[r]=s):r==="style"?t[r]={...s,...i}:r==="className"&&(t[r]=[s,i].filter(Boolean).join(" "))}return{...n,...t}}function o0e(n){var r,s;let e=(r=Object.getOwnPropertyDescriptor(n.props,"ref"))==null?void 0:r.get,t=e&&"isReactWarning"in e&&e.isReactWarning;return t?n.ref:(e=(s=Object.getOwnPropertyDescriptor(n,"ref"))==null?void 0:s.get,t=e&&"isReactWarning"in e&&e.isReactWarning,t?n.props.ref:n.props.ref||n.ref)}function V$(n){var e,t,r="";if(typeof n=="string"||typeof n=="number")r+=n;else if(typeof n=="object")if(Array.isArray(n)){var s=n.length;for(e=0;e<s;e++)n[e]&&(t=V$(n[e]))&&(r&&(r+=" "),r+=t)}else for(t in n)n[t]&&(r&&(r+=" "),r+=t);return r}function yp(){for(var n,e,t=0,r="",s=arguments.length;t<s;t++)(n=arguments[t])&&(e=V$(n))&&(r&&(r+=" "),r+=e);return r}const z$=n=>typeof n=="boolean"?`${n}`:n===0?"0":n,H$=yp,mC=(n,e)=>t=>{var r;if((e==null?void 0:e.variants)==null)return H$(n,t==null?void 0:t.class,t==null?void 0:t.className);const{variants:s,defaultVariants:i}=e,o=Object.keys(s).map(c=>{const u=t==null?void 0:t[c],d=i==null?void 0:i[c];if(u===null)return null;const f=z$(u)||z$(d);return s[c][f]}),a=t&&Object.entries(t).reduce((c,u)=>{let[d,f]=u;return f===void 0||(c[d]=f),c},{}),l=e==null||(r=e.compoundVariants)===null||r===void 0?void 0:r.reduce((c,u)=>{let{class:d,className:f,...p}=u;return Object.entries(p).every(m=>{let[y,w]=m;return Array.isArray(w)?w.includes({...i,...a}[y]):{...i,...a}[y]===w})?[...c,d,f]:c},[]);return H$(n,o,l,t==null?void 0:t.class,t==null?void 0:t.className)},gC="-",a0e=n=>{const e=c0e(n),{conflictingClassGroups:t,conflictingClassGroupModifiers:r}=n;return{getClassGroupId:o=>{const a=o.split(gC);return a[0]===""&&a.length!==1&&a.shift(),q$(a,e)||l0e(o)},getConflictingClassGroupIds:(o,a)=>{const l=t[o]||[];return a&&r[o]?[...l,...r[o]]:l}}},q$=(n,e)=>{var o;if(n.length===0)return e.classGroupId;const t=n[0],r=e.nextPart.get(t),s=r?q$(n.slice(1),r):void 0;if(s)return s;if(e.validators.length===0)return;const i=n.join(gC);return(o=e.validators.find(({validator:a})=>a(i)))==null?void 0:o.classGroupId},U$=/^\[(.+)\]$/,l0e=n=>{if(U$.test(n)){const e=U$.exec(n)[1],t=e==null?void 0:e.substring(0,e.indexOf(":"));if(t)return"arbitrary.."+t}},c0e=n=>{const{theme:e,prefix:t}=n,r={nextPart:new Map,validators:[]};return d0e(Object.entries(n.classGroups),t).forEach(([i,o])=>{yC(o,r,i,e)}),r},yC=(n,e,t,r)=>{n.forEach(s=>{if(typeof s=="string"){const i=s===""?e:W$(e,s);i.classGroupId=t;return}if(typeof s=="function"){if(u0e(s)){yC(s(r),e,t,r);return}e.validators.push({validator:s,classGroupId:t});return}Object.entries(s).forEach(([i,o])=>{yC(o,W$(e,i),t,r)})})},W$=(n,e)=>{let t=n;return e.split(gC).forEach(r=>{t.nextPart.has(r)||t.nextPart.set(r,{nextPart:new Map,validators:[]}),t=t.nextPart.get(r)}),t},u0e=n=>n.isThemeGetter,d0e=(n,e)=>e?n.map(([t,r])=>{const s=r.map(i=>typeof i=="string"?e+i:typeof i=="object"?Object.fromEntries(Object.entries(i).map(([o,a])=>[e+o,a])):i);return[t,s]}):n,h0e=n=>{if(n<1)return{get:()=>{},set:()=>{}};let e=0,t=new Map,r=new Map;const s=(i,o)=>{t.set(i,o),e++,e>n&&(e=0,r=t,t=new Map)};return{get(i){let o=t.get(i);if(o!==void 0)return o;if((o=r.get(i))!==void 0)return s(i,o),o},set(i,o){t.has(i)?t.set(i,o):s(i,o)}}},G$="!",f0e=n=>{const{separator:e,experimentalParseClassName:t}=n,r=e.length===1,s=e[0],i=e.length,o=a=>{const l=[];let c=0,u=0,d;for(let w=0;w<a.length;w++){let k=a[w];if(c===0){if(k===s&&(r||a.slice(w,w+i)===e)){l.push(a.slice(u,w)),u=w+i;continue}if(k==="/"){d=w;continue}}k==="["?c++:k==="]"&&c--}const f=l.length===0?a:a.substring(u),p=f.startsWith(G$),m=p?f.substring(1):f,y=d&&d>u?d-u:void 0;return{modifiers:l,hasImportantModifier:p,baseClassName:m,maybePostfixModifierPosition:y}};return t?a=>t({className:a,parseClassName:o}):o},p0e=n=>{if(n.length<=1)return n;const e=[];let t=[];return n.forEach(r=>{r[0]==="["?(e.push(...t.sort(),r),t=[]):t.push(r)}),e.push(...t.sort()),e},m0e=n=>({cache:h0e(n.cacheSize),parseClassName:f0e(n),...a0e(n)}),g0e=/\s+/,y0e=(n,e)=>{const{parseClassName:t,getClassGroupId:r,getConflictingClassGroupIds:s}=e,i=[],o=n.trim().split(g0e);let a="";for(let l=o.length-1;l>=0;l-=1){const c=o[l],{modifiers:u,hasImportantModifier:d,baseClassName:f,maybePostfixModifierPosition:p}=t(c);let m=!!p,y=r(m?f.substring(0,p):f);if(!y){if(!m){a=c+(a.length>0?" "+a:a);continue}if(y=r(f),!y){a=c+(a.length>0?" "+a:a);continue}m=!1}const w=p0e(u).join(":"),k=d?w+G$:w,x=k+y;if(i.includes(x))continue;i.push(x);const S=s(y,m);for(let _=0;_<S.length;++_){const A=S[_];i.push(k+A)}a=c+(a.length>0?" "+a:a)}return a};function v0e(){let n=0,e,t,r="";for(;n<arguments.length;)(e=arguments[n++])&&(t=K$(e))&&(r&&(r+=" "),r+=t);return r}const K$=n=>{if(typeof n=="string")return n;let e,t="";for(let r=0;r<n.length;r++)n[r]&&(e=K$(n[r]))&&(t&&(t+=" "),t+=e);return t};function b0e(n,...e){let t,r,s,i=o;function o(l){const c=e.reduce((u,d)=>d(u),n());return t=m0e(c),r=t.cache.get,s=t.cache.set,i=a,a(l)}function a(l){const c=r(l);if(c)return c;const u=y0e(l,t);return s(l,u),u}return function(){return i(v0e.apply(null,arguments))}}const Mr=n=>{const e=t=>t[n]||[];return e.isThemeGetter=!0,e},Y$=/^\[(?:([a-z-]+):)?(.+)\]$/i,w0e=/^\d+\/\d+$/,x0e=new Set(["px","full","screen"]),k0e=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,C0e=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,S0e=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,E0e=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,_0e=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,uu=n=>dg(n)||x0e.has(n)||w0e.test(n),Gd=n=>hg(n,"length",D0e),dg=n=>!!n&&!Number.isNaN(Number(n)),vC=n=>hg(n,"number",dg),sb=n=>!!n&&Number.isInteger(Number(n)),T0e=n=>n.endsWith("%")&&dg(n.slice(0,-1)),cn=n=>Y$.test(n),Kd=n=>k0e.test(n),A0e=new Set(["length","size","percentage"]),N0e=n=>hg(n,A0e,Z$),M0e=n=>hg(n,"position",Z$),O0e=new Set(["image","url"]),P0e=n=>hg(n,O0e,$0e),I0e=n=>hg(n,"",R0e),ib=()=>!0,hg=(n,e,t)=>{const r=Y$.exec(n);return r?r[1]?typeof e=="string"?r[1]===e:e.has(r[1]):t(r[2]):!1},D0e=n=>C0e.test(n)&&!S0e.test(n),Z$=()=>!1,R0e=n=>E0e.test(n),$0e=n=>_0e.test(n),L0e=b0e(()=>{const n=Mr("colors"),e=Mr("spacing"),t=Mr("blur"),r=Mr("brightness"),s=Mr("borderColor"),i=Mr("borderRadius"),o=Mr("borderSpacing"),a=Mr("borderWidth"),l=Mr("contrast"),c=Mr("grayscale"),u=Mr("hueRotate"),d=Mr("invert"),f=Mr("gap"),p=Mr("gradientColorStops"),m=Mr("gradientColorStopPositions"),y=Mr("inset"),w=Mr("margin"),k=Mr("opacity"),x=Mr("padding"),S=Mr("saturate"),_=Mr("scale"),A=Mr("sepia"),T=Mr("skew"),O=Mr("space"),I=Mr("translate"),R=()=>["auto","contain","none"],D=()=>["auto","hidden","clip","visible","scroll"],W=()=>["auto",cn,e],H=()=>[cn,e],re=()=>["",uu,Gd],ae=()=>["auto",dg,cn],de=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],le=()=>["solid","dashed","dotted","double","none"],X=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],se=()=>["start","end","center","between","around","evenly","stretch"],J=()=>["","0",cn],$=()=>["auto","avoid","all","avoid-page","page","left","right","column"],ve=()=>[dg,cn];return{cacheSize:500,separator:":",theme:{colors:[ib],spacing:[uu,Gd],blur:["none","",Kd,cn],brightness:ve(),borderColor:[n],borderRadius:["none","","full",Kd,cn],borderSpacing:H(),borderWidth:re(),contrast:ve(),grayscale:J(),hueRotate:ve(),invert:J(),gap:H(),gradientColorStops:[n],gradientColorStopPositions:[T0e,Gd],inset:W(),margin:W(),opacity:ve(),padding:H(),saturate:ve(),scale:ve(),sepia:J(),skew:ve(),space:H(),translate:H()},classGroups:{aspect:[{aspect:["auto","square","video",cn]}],container:["container"],columns:[{columns:[Kd]}],"break-after":[{"break-after":$()}],"break-before":[{"break-before":$()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...de(),cn]}],overflow:[{overflow:D()}],"overflow-x":[{"overflow-x":D()}],"overflow-y":[{"overflow-y":D()}],overscroll:[{overscroll:R()}],"overscroll-x":[{"overscroll-x":R()}],"overscroll-y":[{"overscroll-y":R()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[y]}],"inset-x":[{"inset-x":[y]}],"inset-y":[{"inset-y":[y]}],start:[{start:[y]}],end:[{end:[y]}],top:[{top:[y]}],right:[{right:[y]}],bottom:[{bottom:[y]}],left:[{left:[y]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",sb,cn]}],basis:[{basis:W()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",cn]}],grow:[{grow:J()}],shrink:[{shrink:J()}],order:[{order:["first","last","none",sb,cn]}],"grid-cols":[{"grid-cols":[ib]}],"col-start-end":[{col:["auto",{span:["full",sb,cn]},cn]}],"col-start":[{"col-start":ae()}],"col-end":[{"col-end":ae()}],"grid-rows":[{"grid-rows":[ib]}],"row-start-end":[{row:["auto",{span:[sb,cn]},cn]}],"row-start":[{"row-start":ae()}],"row-end":[{"row-end":ae()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",cn]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",cn]}],gap:[{gap:[f]}],"gap-x":[{"gap-x":[f]}],"gap-y":[{"gap-y":[f]}],"justify-content":[{justify:["normal",...se()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...se(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...se(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[x]}],px:[{px:[x]}],py:[{py:[x]}],ps:[{ps:[x]}],pe:[{pe:[x]}],pt:[{pt:[x]}],pr:[{pr:[x]}],pb:[{pb:[x]}],pl:[{pl:[x]}],m:[{m:[w]}],mx:[{mx:[w]}],my:[{my:[w]}],ms:[{ms:[w]}],me:[{me:[w]}],mt:[{mt:[w]}],mr:[{mr:[w]}],mb:[{mb:[w]}],ml:[{ml:[w]}],"space-x":[{"space-x":[O]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[O]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",cn,e]}],"min-w":[{"min-w":[cn,e,"min","max","fit"]}],"max-w":[{"max-w":[cn,e,"none","full","min","max","fit","prose",{screen:[Kd]},Kd]}],h:[{h:[cn,e,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[cn,e,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[cn,e,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[cn,e,"auto","min","max","fit"]}],"font-size":[{text:["base",Kd,Gd]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",vC]}],"font-family":[{font:[ib]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",cn]}],"line-clamp":[{"line-clamp":["none",dg,vC]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",uu,cn]}],"list-image":[{"list-image":["none",cn]}],"list-style-type":[{list:["none","disc","decimal",cn]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[n]}],"placeholder-opacity":[{"placeholder-opacity":[k]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[n]}],"text-opacity":[{"text-opacity":[k]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...le(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",uu,Gd]}],"underline-offset":[{"underline-offset":["auto",uu,cn]}],"text-decoration-color":[{decoration:[n]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:H()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",cn]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",cn]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[k]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...de(),M0e]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",N0e]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},P0e]}],"bg-color":[{bg:[n]}],"gradient-from-pos":[{from:[m]}],"gradient-via-pos":[{via:[m]}],"gradient-to-pos":[{to:[m]}],"gradient-from":[{from:[p]}],"gradient-via":[{via:[p]}],"gradient-to":[{to:[p]}],rounded:[{rounded:[i]}],"rounded-s":[{"rounded-s":[i]}],"rounded-e":[{"rounded-e":[i]}],"rounded-t":[{"rounded-t":[i]}],"rounded-r":[{"rounded-r":[i]}],"rounded-b":[{"rounded-b":[i]}],"rounded-l":[{"rounded-l":[i]}],"rounded-ss":[{"rounded-ss":[i]}],"rounded-se":[{"rounded-se":[i]}],"rounded-ee":[{"rounded-ee":[i]}],"rounded-es":[{"rounded-es":[i]}],"rounded-tl":[{"rounded-tl":[i]}],"rounded-tr":[{"rounded-tr":[i]}],"rounded-br":[{"rounded-br":[i]}],"rounded-bl":[{"rounded-bl":[i]}],"border-w":[{border:[a]}],"border-w-x":[{"border-x":[a]}],"border-w-y":[{"border-y":[a]}],"border-w-s":[{"border-s":[a]}],"border-w-e":[{"border-e":[a]}],"border-w-t":[{"border-t":[a]}],"border-w-r":[{"border-r":[a]}],"border-w-b":[{"border-b":[a]}],"border-w-l":[{"border-l":[a]}],"border-opacity":[{"border-opacity":[k]}],"border-style":[{border:[...le(),"hidden"]}],"divide-x":[{"divide-x":[a]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[a]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[k]}],"divide-style":[{divide:le()}],"border-color":[{border:[s]}],"border-color-x":[{"border-x":[s]}],"border-color-y":[{"border-y":[s]}],"border-color-s":[{"border-s":[s]}],"border-color-e":[{"border-e":[s]}],"border-color-t":[{"border-t":[s]}],"border-color-r":[{"border-r":[s]}],"border-color-b":[{"border-b":[s]}],"border-color-l":[{"border-l":[s]}],"divide-color":[{divide:[s]}],"outline-style":[{outline:["",...le()]}],"outline-offset":[{"outline-offset":[uu,cn]}],"outline-w":[{outline:[uu,Gd]}],"outline-color":[{outline:[n]}],"ring-w":[{ring:re()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[n]}],"ring-opacity":[{"ring-opacity":[k]}],"ring-offset-w":[{"ring-offset":[uu,Gd]}],"ring-offset-color":[{"ring-offset":[n]}],shadow:[{shadow:["","inner","none",Kd,I0e]}],"shadow-color":[{shadow:[ib]}],opacity:[{opacity:[k]}],"mix-blend":[{"mix-blend":[...X(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":X()}],filter:[{filter:["","none"]}],blur:[{blur:[t]}],brightness:[{brightness:[r]}],contrast:[{contrast:[l]}],"drop-shadow":[{"drop-shadow":["","none",Kd,cn]}],grayscale:[{grayscale:[c]}],"hue-rotate":[{"hue-rotate":[u]}],invert:[{invert:[d]}],saturate:[{saturate:[S]}],sepia:[{sepia:[A]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[t]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[l]}],"backdrop-grayscale":[{"backdrop-grayscale":[c]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[u]}],"backdrop-invert":[{"backdrop-invert":[d]}],"backdrop-opacity":[{"backdrop-opacity":[k]}],"backdrop-saturate":[{"backdrop-saturate":[S]}],"backdrop-sepia":[{"backdrop-sepia":[A]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[o]}],"border-spacing-x":[{"border-spacing-x":[o]}],"border-spacing-y":[{"border-spacing-y":[o]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",cn]}],duration:[{duration:ve()}],ease:[{ease:["linear","in","out","in-out",cn]}],delay:[{delay:ve()}],animate:[{animate:["none","spin","ping","pulse","bounce",cn]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[_]}],"scale-x":[{"scale-x":[_]}],"scale-y":[{"scale-y":[_]}],rotate:[{rotate:[sb,cn]}],"translate-x":[{"translate-x":[I]}],"translate-y":[{"translate-y":[I]}],"skew-x":[{"skew-x":[T]}],"skew-y":[{"skew-y":[T]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",cn]}],accent:[{accent:["auto",n]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",cn]}],"caret-color":[{caret:[n]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":H()}],"scroll-mx":[{"scroll-mx":H()}],"scroll-my":[{"scroll-my":H()}],"scroll-ms":[{"scroll-ms":H()}],"scroll-me":[{"scroll-me":H()}],"scroll-mt":[{"scroll-mt":H()}],"scroll-mr":[{"scroll-mr":H()}],"scroll-mb":[{"scroll-mb":H()}],"scroll-ml":[{"scroll-ml":H()}],"scroll-p":[{"scroll-p":H()}],"scroll-px":[{"scroll-px":H()}],"scroll-py":[{"scroll-py":H()}],"scroll-ps":[{"scroll-ps":H()}],"scroll-pe":[{"scroll-pe":H()}],"scroll-pt":[{"scroll-pt":H()}],"scroll-pr":[{"scroll-pr":H()}],"scroll-pb":[{"scroll-pb":H()}],"scroll-pl":[{"scroll-pl":H()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",cn]}],fill:[{fill:[n,"none"]}],"stroke-w":[{stroke:[uu,Gd,vC]}],stroke:[{stroke:[n,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}});function Pt(...n){return L0e(yp(n))}const bC=mC("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),yt=g.forwardRef(({className:n,variant:e,size:t,asChild:r=!1,...s},i)=>{const o=r?B$:"button";return b.jsx(o,{className:Pt(bC({variant:e,size:t,className:n})),ref:i,...s})});yt.displayName="Button";const F0e=U.createContext(void 0),du=()=>{const n=U.useContext(F0e);if(n===void 0)throw new Error("useAuth must be used within an AuthProvider");return n};function wC(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var vp=wC();function X$(n){vp=n}var ob={exec:()=>null};function Xn(n,e=""){let t=typeof n=="string"?n:n.source,r={replace:(s,i)=>{let o=typeof i=="string"?i:i.source;return o=o.replace(xi.caret,"$1"),t=t.replace(s,o),r},getRegex:()=>new RegExp(t,e)};return r}var j0e=(()=>{try{return!!new RegExp("(?<=1)(?<!1)")}catch{return!1}})(),xi={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,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/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,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:n=>new RegExp(`^( {0,3}${n})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:n=>new RegExp(`^ {0,${Math.min(3,n-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:n=>new RegExp(`^ {0,${Math.min(3,n-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:n=>new RegExp(`^ {0,${Math.min(3,n-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:n=>new RegExp(`^ {0,${Math.min(3,n-1)}}#`),htmlBeginRegex:n=>new RegExp(`^ {0,${Math.min(3,n-1)}}<(?:[a-z].*>|!--)`,"i")},B0e=/^(?:[ \t]*(?:\n|$))+/,V0e=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,z0e=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,ab=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,H0e=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,xC=/(?:[*+-]|\d{1,9}[.)])/,J$=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Q$=Xn(J$).replace(/bull/g,xC).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(),q0e=Xn(J$).replace(/bull/g,xC).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(),kC=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,U0e=/^[^\n]+/,CC=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,W0e=Xn(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",CC).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),G0e=Xn(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,xC).getRegex(),E6="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",SC=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,K0e=Xn("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\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",SC).replace("tag",E6).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),eL=Xn(kC).replace("hr",ab).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[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",E6).getRegex(),Y0e=Xn(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",eL).getRegex(),EC={blockquote:Y0e,code:V0e,def:W0e,fences:z0e,heading:H0e,hr:ab,html:K0e,lheading:Q$,list:G0e,newline:B0e,paragraph:eL,table:ob,text:U0e},tL=Xn("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",ab).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[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",E6).getRegex(),Z0e={...EC,lheading:q0e,table:tL,paragraph:Xn(kC).replace("hr",ab).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",tL).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",E6).getRegex()},X0e={...EC,html:Xn(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",SC).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:ob,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:Xn(kC).replace("hr",ab).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",Q$).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},J0e=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Q0e=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,nL=/^( {2,}|\\)\n(?!\s*$)/,eme=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,_6=/[\p{P}\p{S}]/u,_C=/[\s\p{P}\p{S}]/u,rL=/[^\s\p{P}\p{S}]/u,tme=Xn(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,_C).getRegex(),sL=/(?!~)[\p{P}\p{S}]/u,nme=/(?!~)[\s\p{P}\p{S}]/u,rme=/(?:[^\s\p{P}\p{S}]|~)/u,sme=Xn(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",j0e?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),iL=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,ime=Xn(iL,"u").replace(/punct/g,_6).getRegex(),ome=Xn(iL,"u").replace(/punct/g,sL).getRegex(),oL="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",ame=Xn(oL,"gu").replace(/notPunctSpace/g,rL).replace(/punctSpace/g,_C).replace(/punct/g,_6).getRegex(),lme=Xn(oL,"gu").replace(/notPunctSpace/g,rme).replace(/punctSpace/g,nme).replace(/punct/g,sL).getRegex(),cme=Xn("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,rL).replace(/punctSpace/g,_C).replace(/punct/g,_6).getRegex(),ume=Xn(/\\(punct)/,"gu").replace(/punct/g,_6).getRegex(),dme=Xn(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),hme=Xn(SC).replace("(?:-->|$)","-->").getRegex(),fme=Xn("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",hme).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),T6=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/,pme=Xn(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",T6).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),aL=Xn(/^!?\[(label)\]\[(ref)\]/).replace("label",T6).replace("ref",CC).getRegex(),lL=Xn(/^!?\[(ref)\](?:\[\])?/).replace("ref",CC).getRegex(),mme=Xn("reflink|nolink(?!\\()","g").replace("reflink",aL).replace("nolink",lL).getRegex(),cL=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,TC={_backpedal:ob,anyPunctuation:ume,autolink:dme,blockSkip:sme,br:nL,code:Q0e,del:ob,emStrongLDelim:ime,emStrongRDelimAst:ame,emStrongRDelimUnd:cme,escape:J0e,link:pme,nolink:lL,punctuation:tme,reflink:aL,reflinkSearch:mme,tag:fme,text:eme,url:ob},gme={...TC,link:Xn(/^!?\[(label)\]\((.*?)\)/).replace("label",T6).getRegex(),reflink:Xn(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",T6).getRegex()},AC={...TC,emStrongRDelimAst:lme,emStrongLDelim:ome,url:Xn(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",cL).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:Xn(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",cL).getRegex()},yme={...AC,br:Xn(nL).replace("{2,}","*").getRegex(),text:Xn(AC.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},A6={normal:EC,gfm:Z0e,pedantic:X0e},lb={normal:TC,gfm:AC,breaks:yme,pedantic:gme},vme={"&":"&","<":"<",">":">",'"':""","'":"'"},uL=n=>vme[n];function Ul(n,e){if(e){if(xi.escapeTest.test(n))return n.replace(xi.escapeReplace,uL)}else if(xi.escapeTestNoEncode.test(n))return n.replace(xi.escapeReplaceNoEncode,uL);return n}function dL(n){try{n=encodeURI(n).replace(xi.percentDecode,"%")}catch{return null}return n}function hL(n,e){var i;let t=n.replace(xi.findPipe,(o,a,l)=>{let c=!1,u=a;for(;--u>=0&&l[u]==="\\";)c=!c;return c?"|":" |"}),r=t.split(xi.splitPipe),s=0;if(r[0].trim()||r.shift(),r.length>0&&!((i=r.at(-1))!=null&&i.trim())&&r.pop(),e)if(r.length>e)r.splice(e);else for(;r.length<e;)r.push("");for(;s<r.length;s++)r[s]=r[s].trim().replace(xi.slashPipe,"|");return r}function cb(n,e,t){let r=n.length;if(r===0)return"";let s=0;for(;s<r&&n.charAt(r-s-1)===e;)s++;return n.slice(0,r-s)}function bme(n,e){if(n.indexOf(e[1])===-1)return-1;let t=0;for(let r=0;r<n.length;r++)if(n[r]==="\\")r++;else if(n[r]===e[0])t++;else if(n[r]===e[1]&&(t--,t<0))return r;return t>0?-2:-1}function fL(n,e,t,r,s){let i=e.href,o=e.title||null,a=n[1].replace(s.other.outputLinkReplace,"$1");r.state.inLink=!0;let l={type:n[0].charAt(0)==="!"?"image":"link",raw:t,href:i,title:o,text:a,tokens:r.inlineTokens(a)};return r.state.inLink=!1,l}function wme(n,e,t){let r=n.match(t.other.indentCodeCompensation);if(r===null)return e;let s=r[1];return e.split(` +`).map(i=>{let o=i.match(t.other.beginningSpace);if(o===null)return i;let[a]=o;return a.length>=s.length?i.slice(s.length):i}).join(` +`)}var N6=class{constructor(n){G(this,"options");G(this,"rules");G(this,"lexer");this.options=n||vp}space(n){let e=this.rules.block.newline.exec(n);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(n){let e=this.rules.block.code.exec(n);if(e){let t=e[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:e[0],codeBlockStyle:"indented",text:this.options.pedantic?t:cb(t,` +`)}}}fences(n){let e=this.rules.block.fences.exec(n);if(e){let t=e[0],r=wme(t,e[3]||"",this.rules);return{type:"code",raw:t,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:r}}}heading(n){let e=this.rules.block.heading.exec(n);if(e){let t=e[2].trim();if(this.rules.other.endingHash.test(t)){let r=cb(t,"#");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(t=r.trim())}return{type:"heading",raw:e[0],depth:e[1].length,text:t,tokens:this.lexer.inline(t)}}}hr(n){let e=this.rules.block.hr.exec(n);if(e)return{type:"hr",raw:cb(e[0],` +`)}}blockquote(n){let e=this.rules.block.blockquote.exec(n);if(e){let t=cb(e[0],` +`).split(` +`),r="",s="",i=[];for(;t.length>0;){let o=!1,a=[],l;for(l=0;l<t.length;l++)if(this.rules.other.blockquoteStart.test(t[l]))a.push(t[l]),o=!0;else if(!o)a.push(t[l]);else break;t=t.slice(l);let c=a.join(` +`),u=c.replace(this.rules.other.blockquoteSetextReplace,` + $1`).replace(this.rules.other.blockquoteSetextReplace2,"");r=r?`${r} +${c}`:c,s=s?`${s} +${u}`:u;let d=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(u,i,!0),this.lexer.state.top=d,t.length===0)break;let f=i.at(-1);if((f==null?void 0:f.type)==="code")break;if((f==null?void 0:f.type)==="blockquote"){let p=f,m=p.raw+` +`+t.join(` +`),y=this.blockquote(m);i[i.length-1]=y,r=r.substring(0,r.length-p.raw.length)+y.raw,s=s.substring(0,s.length-p.text.length)+y.text;break}else if((f==null?void 0:f.type)==="list"){let p=f,m=p.raw+` +`+t.join(` +`),y=this.list(m);i[i.length-1]=y,r=r.substring(0,r.length-f.raw.length)+y.raw,s=s.substring(0,s.length-p.raw.length)+y.raw,t=m.substring(i.at(-1).raw.length).split(` +`);continue}}return{type:"blockquote",raw:r,tokens:i,text:s}}}list(n){let e=this.rules.block.list.exec(n);if(e){let t=e[1].trim(),r=t.length>1,s={type:"list",raw:"",ordered:r,start:r?+t.slice(0,-1):"",loose:!1,items:[]};t=r?`\\d{1,9}\\${t.slice(-1)}`:`\\${t}`,this.options.pedantic&&(t=r?t:"[*+-]");let i=this.rules.other.listItemRegex(t),o=!1;for(;n;){let l=!1,c="",u="";if(!(e=i.exec(n))||this.rules.block.hr.test(n))break;c=e[0],n=n.substring(c.length);let d=e[2].split(` +`,1)[0].replace(this.rules.other.listReplaceTabs,k=>" ".repeat(3*k.length)),f=n.split(` +`,1)[0],p=!d.trim(),m=0;if(this.options.pedantic?(m=2,u=d.trimStart()):p?m=e[1].length+1:(m=e[2].search(this.rules.other.nonSpaceChar),m=m>4?1:m,u=d.slice(m),m+=e[1].length),p&&this.rules.other.blankLine.test(f)&&(c+=f+` +`,n=n.substring(f.length+1),l=!0),!l){let k=this.rules.other.nextBulletRegex(m),x=this.rules.other.hrRegex(m),S=this.rules.other.fencesBeginRegex(m),_=this.rules.other.headingBeginRegex(m),A=this.rules.other.htmlBeginRegex(m);for(;n;){let T=n.split(` +`,1)[0],O;if(f=T,this.options.pedantic?(f=f.replace(this.rules.other.listReplaceNesting," "),O=f):O=f.replace(this.rules.other.tabCharGlobal," "),S.test(f)||_.test(f)||A.test(f)||k.test(f)||x.test(f))break;if(O.search(this.rules.other.nonSpaceChar)>=m||!f.trim())u+=` +`+O.slice(m);else{if(p||d.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||S.test(d)||_.test(d)||x.test(d))break;u+=` +`+f}!p&&!f.trim()&&(p=!0),c+=T+` +`,n=n.substring(T.length+1),d=O.slice(m)}}s.loose||(o?s.loose=!0:this.rules.other.doubleBlankLine.test(c)&&(o=!0));let y=null,w;this.options.gfm&&(y=this.rules.other.listIsTask.exec(u),y&&(w=y[0]!=="[ ] ",u=u.replace(this.rules.other.listReplaceTask,""))),s.items.push({type:"list_item",raw:c,task:!!y,checked:w,loose:!1,text:u,tokens:[]}),s.raw+=c}let a=s.items.at(-1);if(a)a.raw=a.raw.trimEnd(),a.text=a.text.trimEnd();else return;s.raw=s.raw.trimEnd();for(let l=0;l<s.items.length;l++)if(this.lexer.state.top=!1,s.items[l].tokens=this.lexer.blockTokens(s.items[l].text,[]),!s.loose){let c=s.items[l].tokens.filter(d=>d.type==="space"),u=c.length>0&&c.some(d=>this.rules.other.anyLine.test(d.raw));s.loose=u}if(s.loose)for(let l=0;l<s.items.length;l++)s.items[l].loose=!0;return s}}html(n){let e=this.rules.block.html.exec(n);if(e)return{type:"html",block:!0,raw:e[0],pre:e[1]==="pre"||e[1]==="script"||e[1]==="style",text:e[0]}}def(n){let e=this.rules.block.def.exec(n);if(e){let t=e[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),r=e[2]?e[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",s=e[3]?e[3].substring(1,e[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):e[3];return{type:"def",tag:t,raw:e[0],href:r,title:s}}}table(n){var o;let e=this.rules.block.table.exec(n);if(!e||!this.rules.other.tableDelimiter.test(e[2]))return;let t=hL(e[1]),r=e[2].replace(this.rules.other.tableAlignChars,"").split("|"),s=(o=e[3])!=null&&o.trim()?e[3].replace(this.rules.other.tableRowBlankLine,"").split(` +`):[],i={type:"table",raw:e[0],header:[],align:[],rows:[]};if(t.length===r.length){for(let a of r)this.rules.other.tableAlignRight.test(a)?i.align.push("right"):this.rules.other.tableAlignCenter.test(a)?i.align.push("center"):this.rules.other.tableAlignLeft.test(a)?i.align.push("left"):i.align.push(null);for(let a=0;a<t.length;a++)i.header.push({text:t[a],tokens:this.lexer.inline(t[a]),header:!0,align:i.align[a]});for(let a of s)i.rows.push(hL(a,i.header.length).map((l,c)=>({text:l,tokens:this.lexer.inline(l),header:!1,align:i.align[c]})));return i}}lheading(n){let e=this.rules.block.lheading.exec(n);if(e)return{type:"heading",raw:e[0],depth:e[2].charAt(0)==="="?1:2,text:e[1],tokens:this.lexer.inline(e[1])}}paragraph(n){let e=this.rules.block.paragraph.exec(n);if(e){let t=e[1].charAt(e[1].length-1)===` +`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:t,tokens:this.lexer.inline(t)}}}text(n){let e=this.rules.block.text.exec(n);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(n){let e=this.rules.inline.escape.exec(n);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(n){let e=this.rules.inline.tag.exec(n);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(n){let e=this.rules.inline.link.exec(n);if(e){let t=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(t)){if(!this.rules.other.endAngleBracket.test(t))return;let i=cb(t.slice(0,-1),"\\");if((t.length-i.length)%2===0)return}else{let i=bme(e[2],"()");if(i===-2)return;if(i>-1){let o=(e[0].indexOf("!")===0?5:4)+e[1].length+i;e[2]=e[2].substring(0,i),e[0]=e[0].substring(0,o).trim(),e[3]=""}}let r=e[2],s="";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(r);i&&(r=i[1],s=i[3])}else s=e[3]?e[3].slice(1,-1):"";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(t)?r=r.slice(1):r=r.slice(1,-1)),fL(e,{href:r&&r.replace(this.rules.inline.anyPunctuation,"$1"),title:s&&s.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(n,e){let t;if((t=this.rules.inline.reflink.exec(n))||(t=this.rules.inline.nolink.exec(n))){let r=(t[2]||t[1]).replace(this.rules.other.multipleSpaceGlobal," "),s=e[r.toLowerCase()];if(!s){let i=t[0].charAt(0);return{type:"text",raw:i,text:i}}return fL(t,s,t[0],this.lexer,this.rules)}}emStrong(n,e,t=""){let r=this.rules.inline.emStrongLDelim.exec(n);if(!(!r||r[3]&&t.match(this.rules.other.unicodeAlphaNumeric))&&(!(r[1]||r[2])||!t||this.rules.inline.punctuation.exec(t))){let s=[...r[0]].length-1,i,o,a=s,l=0,c=r[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,e=e.slice(-1*n.length+s);(r=c.exec(e))!=null;){if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!i)continue;if(o=[...i].length,r[3]||r[4]){a+=o;continue}else if((r[5]||r[6])&&s%3&&!((s+o)%3)){l+=o;continue}if(a-=o,a>0)continue;o=Math.min(o,o+a+l);let u=[...r[0]][0].length,d=n.slice(0,s+r.index+u+o);if(Math.min(s,o)%2){let p=d.slice(1,-1);return{type:"em",raw:d,text:p,tokens:this.lexer.inlineTokens(p)}}let f=d.slice(2,-2);return{type:"strong",raw:d,text:f,tokens:this.lexer.inlineTokens(f)}}}}codespan(n){let e=this.rules.inline.code.exec(n);if(e){let t=e[2].replace(this.rules.other.newLineCharGlobal," "),r=this.rules.other.nonSpaceChar.test(t),s=this.rules.other.startingSpaceChar.test(t)&&this.rules.other.endingSpaceChar.test(t);return r&&s&&(t=t.substring(1,t.length-1)),{type:"codespan",raw:e[0],text:t}}}br(n){let e=this.rules.inline.br.exec(n);if(e)return{type:"br",raw:e[0]}}del(n){let e=this.rules.inline.del.exec(n);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2])}}autolink(n){let e=this.rules.inline.autolink.exec(n);if(e){let t,r;return e[2]==="@"?(t=e[1],r="mailto:"+t):(t=e[1],r=t),{type:"link",raw:e[0],text:t,href:r,tokens:[{type:"text",raw:t,text:t}]}}}url(n){var t;let e;if(e=this.rules.inline.url.exec(n)){let r,s;if(e[2]==="@")r=e[0],s="mailto:"+r;else{let i;do i=e[0],e[0]=((t=this.rules.inline._backpedal.exec(e[0]))==null?void 0:t[0])??"";while(i!==e[0]);r=e[0],e[1]==="www."?s="http://"+e[0]:s=e[0]}return{type:"link",raw:e[0],text:r,href:s,tokens:[{type:"text",raw:r,text:r}]}}}inlineText(n){let e=this.rules.inline.text.exec(n);if(e){let t=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:t}}}},qa=class aD{constructor(e){G(this,"tokens");G(this,"options");G(this,"state");G(this,"tokenizer");G(this,"inlineQueue");this.tokens=[],this.tokens.links=Object.create(null),this.options=e||vp,this.options.tokenizer=this.options.tokenizer||new N6,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:xi,block:A6.normal,inline:lb.normal};this.options.pedantic?(t.block=A6.pedantic,t.inline=lb.pedantic):this.options.gfm&&(t.block=A6.gfm,this.options.breaks?t.inline=lb.breaks:t.inline=lb.gfm),this.tokenizer.rules=t}static get rules(){return{block:A6,inline:lb}}static lex(e,t){return new aD(t).lex(e)}static lexInline(e,t){return new aD(t).inlineTokens(e)}lex(e){e=e.replace(xi.carriageReturn,` +`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let r=this.inlineQueue[t];this.inlineTokens(r.src,r.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],r=!1){var s,i,o;for(this.options.pedantic&&(e=e.replace(xi.tabCharGlobal," ").replace(xi.spaceLine,""));e;){let a;if((i=(s=this.options.extensions)==null?void 0:s.block)!=null&&i.some(c=>(a=c.call({lexer:this},e,t))?(e=e.substring(a.raw.length),t.push(a),!0):!1))continue;if(a=this.tokenizer.space(e)){e=e.substring(a.raw.length);let c=t.at(-1);a.raw.length===1&&c!==void 0?c.raw+=` +`:t.push(a);continue}if(a=this.tokenizer.code(e)){e=e.substring(a.raw.length);let c=t.at(-1);(c==null?void 0:c.type)==="paragraph"||(c==null?void 0:c.type)==="text"?(c.raw+=(c.raw.endsWith(` +`)?"":` +`)+a.raw,c.text+=` +`+a.text,this.inlineQueue.at(-1).src=c.text):t.push(a);continue}if(a=this.tokenizer.fences(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.heading(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.hr(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.blockquote(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.list(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.html(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.def(e)){e=e.substring(a.raw.length);let c=t.at(-1);(c==null?void 0:c.type)==="paragraph"||(c==null?void 0:c.type)==="text"?(c.raw+=(c.raw.endsWith(` +`)?"":` +`)+a.raw,c.text+=` +`+a.raw,this.inlineQueue.at(-1).src=c.text):this.tokens.links[a.tag]||(this.tokens.links[a.tag]={href:a.href,title:a.title},t.push(a));continue}if(a=this.tokenizer.table(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.lheading(e)){e=e.substring(a.raw.length),t.push(a);continue}let l=e;if((o=this.options.extensions)!=null&&o.startBlock){let c=1/0,u=e.slice(1),d;this.options.extensions.startBlock.forEach(f=>{d=f.call({lexer:this},u),typeof d=="number"&&d>=0&&(c=Math.min(c,d))}),c<1/0&&c>=0&&(l=e.substring(0,c+1))}if(this.state.top&&(a=this.tokenizer.paragraph(l))){let c=t.at(-1);r&&(c==null?void 0:c.type)==="paragraph"?(c.raw+=(c.raw.endsWith(` +`)?"":` +`)+a.raw,c.text+=` +`+a.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=c.text):t.push(a),r=l.length!==e.length,e=e.substring(a.raw.length);continue}if(a=this.tokenizer.text(e)){e=e.substring(a.raw.length);let c=t.at(-1);(c==null?void 0:c.type)==="text"?(c.raw+=(c.raw.endsWith(` +`)?"":` +`)+a.raw,c.text+=` +`+a.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=c.text):t.push(a);continue}if(e){let c="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(c);break}else throw new Error(c)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){var l,c,u,d,f;let r=e,s=null;if(this.tokens.links){let p=Object.keys(this.tokens.links);if(p.length>0)for(;(s=this.tokenizer.rules.inline.reflinkSearch.exec(r))!=null;)p.includes(s[0].slice(s[0].lastIndexOf("[")+1,-1))&&(r=r.slice(0,s.index)+"["+"a".repeat(s[0].length-2)+"]"+r.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(s=this.tokenizer.rules.inline.anyPunctuation.exec(r))!=null;)r=r.slice(0,s.index)+"++"+r.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(s=this.tokenizer.rules.inline.blockSkip.exec(r))!=null;)i=s[2]?s[2].length:0,r=r.slice(0,s.index+i)+"["+"a".repeat(s[0].length-i-2)+"]"+r.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);r=((c=(l=this.options.hooks)==null?void 0:l.emStrongMask)==null?void 0:c.call({lexer:this},r))??r;let o=!1,a="";for(;e;){o||(a=""),o=!1;let p;if((d=(u=this.options.extensions)==null?void 0:u.inline)!=null&&d.some(y=>(p=y.call({lexer:this},e,t))?(e=e.substring(p.raw.length),t.push(p),!0):!1))continue;if(p=this.tokenizer.escape(e)){e=e.substring(p.raw.length),t.push(p);continue}if(p=this.tokenizer.tag(e)){e=e.substring(p.raw.length),t.push(p);continue}if(p=this.tokenizer.link(e)){e=e.substring(p.raw.length),t.push(p);continue}if(p=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(p.raw.length);let y=t.at(-1);p.type==="text"&&(y==null?void 0:y.type)==="text"?(y.raw+=p.raw,y.text+=p.text):t.push(p);continue}if(p=this.tokenizer.emStrong(e,r,a)){e=e.substring(p.raw.length),t.push(p);continue}if(p=this.tokenizer.codespan(e)){e=e.substring(p.raw.length),t.push(p);continue}if(p=this.tokenizer.br(e)){e=e.substring(p.raw.length),t.push(p);continue}if(p=this.tokenizer.del(e)){e=e.substring(p.raw.length),t.push(p);continue}if(p=this.tokenizer.autolink(e)){e=e.substring(p.raw.length),t.push(p);continue}if(!this.state.inLink&&(p=this.tokenizer.url(e))){e=e.substring(p.raw.length),t.push(p);continue}let m=e;if((f=this.options.extensions)!=null&&f.startInline){let y=1/0,w=e.slice(1),k;this.options.extensions.startInline.forEach(x=>{k=x.call({lexer:this},w),typeof k=="number"&&k>=0&&(y=Math.min(y,k))}),y<1/0&&y>=0&&(m=e.substring(0,y+1))}if(p=this.tokenizer.inlineText(m)){e=e.substring(p.raw.length),p.raw.slice(-1)!=="_"&&(a=p.raw.slice(-1)),o=!0;let y=t.at(-1);(y==null?void 0:y.type)==="text"?(y.raw+=p.raw,y.text+=p.text):t.push(p);continue}if(e){let y="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(y);break}else throw new Error(y)}}return t}},M6=class{constructor(n){G(this,"options");G(this,"parser");this.options=n||vp}space(n){return""}code({text:n,lang:e,escaped:t}){var i;let r=(i=(e||"").match(xi.notSpaceStart))==null?void 0:i[0],s=n.replace(xi.endingNewline,"")+` +`;return r?'<pre><code class="language-'+Ul(r)+'">'+(t?s:Ul(s,!0))+`</code></pre> +`:"<pre><code>"+(t?s:Ul(s,!0))+`</code></pre> +`}blockquote({tokens:n}){return`<blockquote> +${this.parser.parse(n)}</blockquote> +`}html({text:n}){return n}def(n){return""}heading({tokens:n,depth:e}){return`<h${e}>${this.parser.parseInline(n)}</h${e}> +`}hr(n){return`<hr> +`}list(n){let e=n.ordered,t=n.start,r="";for(let o=0;o<n.items.length;o++){let a=n.items[o];r+=this.listitem(a)}let s=e?"ol":"ul",i=e&&t!==1?' start="'+t+'"':"";return"<"+s+i+`> +`+r+"</"+s+`> +`}listitem(n){var t;let e="";if(n.task){let r=this.checkbox({checked:!!n.checked});n.loose?((t=n.tokens[0])==null?void 0:t.type)==="paragraph"?(n.tokens[0].text=r+" "+n.tokens[0].text,n.tokens[0].tokens&&n.tokens[0].tokens.length>0&&n.tokens[0].tokens[0].type==="text"&&(n.tokens[0].tokens[0].text=r+" "+Ul(n.tokens[0].tokens[0].text),n.tokens[0].tokens[0].escaped=!0)):n.tokens.unshift({type:"text",raw:r+" ",text:r+" ",escaped:!0}):e+=r+" "}return e+=this.parser.parse(n.tokens,!!n.loose),`<li>${e}</li> +`}checkbox({checked:n}){return"<input "+(n?'checked="" ':"")+'disabled="" type="checkbox">'}paragraph({tokens:n}){return`<p>${this.parser.parseInline(n)}</p> +`}table(n){let e="",t="";for(let s=0;s<n.header.length;s++)t+=this.tablecell(n.header[s]);e+=this.tablerow({text:t});let r="";for(let s=0;s<n.rows.length;s++){let i=n.rows[s];t="";for(let o=0;o<i.length;o++)t+=this.tablecell(i[o]);r+=this.tablerow({text:t})}return r&&(r=`<tbody>${r}</tbody>`),`<table> +<thead> +`+e+`</thead> +`+r+`</table> +`}tablerow({text:n}){return`<tr> +${n}</tr> +`}tablecell(n){let e=this.parser.parseInline(n.tokens),t=n.header?"th":"td";return(n.align?`<${t} align="${n.align}">`:`<${t}>`)+e+`</${t}> +`}strong({tokens:n}){return`<strong>${this.parser.parseInline(n)}</strong>`}em({tokens:n}){return`<em>${this.parser.parseInline(n)}</em>`}codespan({text:n}){return`<code>${Ul(n,!0)}</code>`}br(n){return"<br>"}del({tokens:n}){return`<del>${this.parser.parseInline(n)}</del>`}link({href:n,title:e,tokens:t}){let r=this.parser.parseInline(t),s=dL(n);if(s===null)return r;n=s;let i='<a href="'+n+'"';return e&&(i+=' title="'+Ul(e)+'"'),i+=">"+r+"</a>",i}image({href:n,title:e,text:t,tokens:r}){r&&(t=this.parser.parseInline(r,this.parser.textRenderer));let s=dL(n);if(s===null)return Ul(t);n=s;let i=`<img src="${n}" alt="${t}"`;return e&&(i+=` title="${Ul(e)}"`),i+=">",i}text(n){return"tokens"in n&&n.tokens?this.parser.parseInline(n.tokens):"escaped"in n&&n.escaped?n.text:Ul(n.text)}},NC=class{strong({text:n}){return n}em({text:n}){return n}codespan({text:n}){return n}del({text:n}){return n}html({text:n}){return n}text({text:n}){return n}link({text:n}){return""+n}image({text:n}){return""+n}br(){return""}},Ua=class lD{constructor(e){G(this,"options");G(this,"renderer");G(this,"textRenderer");this.options=e||vp,this.options.renderer=this.options.renderer||new M6,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new NC}static parse(e,t){return new lD(t).parse(e)}static parseInline(e,t){return new lD(t).parseInline(e)}parse(e,t=!0){var s,i;let r="";for(let o=0;o<e.length;o++){let a=e[o];if((i=(s=this.options.extensions)==null?void 0:s.renderers)!=null&&i[a.type]){let c=a,u=this.options.extensions.renderers[c.type].call({parser:this},c);if(u!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(c.type)){r+=u||"";continue}}let l=a;switch(l.type){case"space":{r+=this.renderer.space(l);continue}case"hr":{r+=this.renderer.hr(l);continue}case"heading":{r+=this.renderer.heading(l);continue}case"code":{r+=this.renderer.code(l);continue}case"table":{r+=this.renderer.table(l);continue}case"blockquote":{r+=this.renderer.blockquote(l);continue}case"list":{r+=this.renderer.list(l);continue}case"html":{r+=this.renderer.html(l);continue}case"def":{r+=this.renderer.def(l);continue}case"paragraph":{r+=this.renderer.paragraph(l);continue}case"text":{let c=l,u=this.renderer.text(c);for(;o+1<e.length&&e[o+1].type==="text";)c=e[++o],u+=` +`+this.renderer.text(c);t?r+=this.renderer.paragraph({type:"paragraph",raw:u,text:u,tokens:[{type:"text",raw:u,text:u,escaped:!0}]}):r+=u;continue}default:{let c='Token with "'+l.type+'" type was not found.';if(this.options.silent)return console.error(c),"";throw new Error(c)}}}return r}parseInline(e,t=this.renderer){var s,i;let r="";for(let o=0;o<e.length;o++){let a=e[o];if((i=(s=this.options.extensions)==null?void 0:s.renderers)!=null&&i[a.type]){let c=this.options.extensions.renderers[a.type].call({parser:this},a);if(c!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(a.type)){r+=c||"";continue}}let l=a;switch(l.type){case"escape":{r+=t.text(l);break}case"html":{r+=t.html(l);break}case"link":{r+=t.link(l);break}case"image":{r+=t.image(l);break}case"strong":{r+=t.strong(l);break}case"em":{r+=t.em(l);break}case"codespan":{r+=t.codespan(l);break}case"br":{r+=t.br(l);break}case"del":{r+=t.del(l);break}case"text":{r+=t.text(l);break}default:{let c='Token with "'+l.type+'" type was not found.';if(this.options.silent)return console.error(c),"";throw new Error(c)}}}return r}},ub=(h8=class{constructor(e){G(this,"options");G(this,"block");this.options=e||vp}preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?qa.lex:qa.lexInline}provideParser(){return this.block?Ua.parse:Ua.parseInline}},G(h8,"passThroughHooks",new Set(["preprocess","postprocess","processAllTokens","emStrongMask"])),G(h8,"passThroughHooksRespectAsync",new Set(["preprocess","postprocess","processAllTokens"])),h8),xme=class{constructor(...n){G(this,"defaults",wC());G(this,"options",this.setOptions);G(this,"parse",this.parseMarkdown(!0));G(this,"parseInline",this.parseMarkdown(!1));G(this,"Parser",Ua);G(this,"Renderer",M6);G(this,"TextRenderer",NC);G(this,"Lexer",qa);G(this,"Tokenizer",N6);G(this,"Hooks",ub);this.use(...n)}walkTokens(n,e){var r,s;let t=[];for(let i of n)switch(t=t.concat(e.call(this,i)),i.type){case"table":{let o=i;for(let a of o.header)t=t.concat(this.walkTokens(a.tokens,e));for(let a of o.rows)for(let l of a)t=t.concat(this.walkTokens(l.tokens,e));break}case"list":{let o=i;t=t.concat(this.walkTokens(o.items,e));break}default:{let o=i;(s=(r=this.defaults.extensions)==null?void 0:r.childTokens)!=null&&s[o.type]?this.defaults.extensions.childTokens[o.type].forEach(a=>{let l=o[a].flat(1/0);t=t.concat(this.walkTokens(l,e))}):o.tokens&&(t=t.concat(this.walkTokens(o.tokens,e)))}}return t}use(...n){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return n.forEach(t=>{let r={...t};if(r.async=this.defaults.async||r.async||!1,t.extensions&&(t.extensions.forEach(s=>{if(!s.name)throw new Error("extension name required");if("renderer"in s){let i=e.renderers[s.name];i?e.renderers[s.name]=function(...o){let a=s.renderer.apply(this,o);return a===!1&&(a=i.apply(this,o)),a}:e.renderers[s.name]=s.renderer}if("tokenizer"in s){if(!s.level||s.level!=="block"&&s.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let i=e[s.level];i?i.unshift(s.tokenizer):e[s.level]=[s.tokenizer],s.start&&(s.level==="block"?e.startBlock?e.startBlock.push(s.start):e.startBlock=[s.start]:s.level==="inline"&&(e.startInline?e.startInline.push(s.start):e.startInline=[s.start]))}"childTokens"in s&&s.childTokens&&(e.childTokens[s.name]=s.childTokens)}),r.extensions=e),t.renderer){let s=this.defaults.renderer||new M6(this.defaults);for(let i in t.renderer){if(!(i in s))throw new Error(`renderer '${i}' does not exist`);if(["options","parser"].includes(i))continue;let o=i,a=t.renderer[o],l=s[o];s[o]=(...c)=>{let u=a.apply(s,c);return u===!1&&(u=l.apply(s,c)),u||""}}r.renderer=s}if(t.tokenizer){let s=this.defaults.tokenizer||new N6(this.defaults);for(let i in t.tokenizer){if(!(i in s))throw new Error(`tokenizer '${i}' does not exist`);if(["options","rules","lexer"].includes(i))continue;let o=i,a=t.tokenizer[o],l=s[o];s[o]=(...c)=>{let u=a.apply(s,c);return u===!1&&(u=l.apply(s,c)),u}}r.tokenizer=s}if(t.hooks){let s=this.defaults.hooks||new ub;for(let i in t.hooks){if(!(i in s))throw new Error(`hook '${i}' does not exist`);if(["options","block"].includes(i))continue;let o=i,a=t.hooks[o],l=s[o];ub.passThroughHooks.has(i)?s[o]=c=>{if(this.defaults.async&&ub.passThroughHooksRespectAsync.has(i))return(async()=>{let d=await a.call(s,c);return l.call(s,d)})();let u=a.call(s,c);return l.call(s,u)}:s[o]=(...c)=>{if(this.defaults.async)return(async()=>{let d=await a.apply(s,c);return d===!1&&(d=await l.apply(s,c)),d})();let u=a.apply(s,c);return u===!1&&(u=l.apply(s,c)),u}}r.hooks=s}if(t.walkTokens){let s=this.defaults.walkTokens,i=t.walkTokens;r.walkTokens=function(o){let a=[];return a.push(i.call(this,o)),s&&(a=a.concat(s.call(this,o))),a}}this.defaults={...this.defaults,...r}}),this}setOptions(n){return this.defaults={...this.defaults,...n},this}lexer(n,e){return qa.lex(n,e??this.defaults)}parser(n,e){return Ua.parse(n,e??this.defaults)}parseMarkdown(n){return(e,t)=>{let r={...t},s={...this.defaults,...r},i=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&r.async===!1)return i(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return i(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return i(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));if(s.hooks&&(s.hooks.options=s,s.hooks.block=n),s.async)return(async()=>{let o=s.hooks?await s.hooks.preprocess(e):e,a=await(s.hooks?await s.hooks.provideLexer():n?qa.lex:qa.lexInline)(o,s),l=s.hooks?await s.hooks.processAllTokens(a):a;s.walkTokens&&await Promise.all(this.walkTokens(l,s.walkTokens));let c=await(s.hooks?await s.hooks.provideParser():n?Ua.parse:Ua.parseInline)(l,s);return s.hooks?await s.hooks.postprocess(c):c})().catch(i);try{s.hooks&&(e=s.hooks.preprocess(e));let o=(s.hooks?s.hooks.provideLexer():n?qa.lex:qa.lexInline)(e,s);s.hooks&&(o=s.hooks.processAllTokens(o)),s.walkTokens&&this.walkTokens(o,s.walkTokens);let a=(s.hooks?s.hooks.provideParser():n?Ua.parse:Ua.parseInline)(o,s);return s.hooks&&(a=s.hooks.postprocess(a)),a}catch(o){return i(o)}}}onError(n,e){return t=>{if(t.message+=` +Please report this to https://github.com/markedjs/marked.`,n){let r="<p>An error occurred:</p><pre>"+Ul(t.message+"",!0)+"</pre>";return e?Promise.resolve(r):r}if(e)return Promise.reject(t);throw t}}},bp=new xme;function ir(n,e){return bp.parse(n,e)}ir.options=ir.setOptions=function(n){return bp.setOptions(n),ir.defaults=bp.defaults,X$(ir.defaults),ir},ir.getDefaults=wC,ir.defaults=vp,ir.use=function(...n){return bp.use(...n),ir.defaults=bp.defaults,X$(ir.defaults),ir},ir.walkTokens=function(n,e){return bp.walkTokens(n,e)},ir.parseInline=bp.parseInline,ir.Parser=Ua,ir.parser=Ua.parse,ir.Renderer=M6,ir.TextRenderer=NC,ir.Lexer=qa,ir.lexer=qa.lex,ir.Tokenizer=N6,ir.Hooks=ub,ir.parse=ir,ir.options,ir.setOptions,ir.use,ir.walkTokens,ir.parseInline,Ua.parse,qa.lex;/*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE */const{entries:pL,setPrototypeOf:mL,isFrozen:kme,getPrototypeOf:Cme,getOwnPropertyDescriptor:Sme}=Object;let{freeze:ki,seal:da,create:MC}=Object,{apply:OC,construct:PC}=typeof Reflect<"u"&&Reflect;ki||(ki=function(e){return e}),da||(da=function(e){return e}),OC||(OC=function(e,t){for(var r=arguments.length,s=new Array(r>2?r-2:0),i=2;i<r;i++)s[i-2]=arguments[i];return e.apply(t,s)}),PC||(PC=function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),s=1;s<t;s++)r[s-1]=arguments[s];return new e(...r)});const O6=Si(Array.prototype.forEach),Eme=Si(Array.prototype.lastIndexOf),gL=Si(Array.prototype.pop),db=Si(Array.prototype.push),_me=Si(Array.prototype.splice),P6=Si(String.prototype.toLowerCase),IC=Si(String.prototype.toString),DC=Si(String.prototype.match),hb=Si(String.prototype.replace),Tme=Si(String.prototype.indexOf),Ame=Si(String.prototype.trim),Wa=Si(Object.prototype.hasOwnProperty),Ci=Si(RegExp.prototype.test),fb=Nme(TypeError);function Si(n){return function(e){e instanceof RegExp&&(e.lastIndex=0);for(var t=arguments.length,r=new Array(t>1?t-1:0),s=1;s<t;s++)r[s-1]=arguments[s];return OC(n,e,r)}}function Nme(n){return function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return PC(n,t)}}function wn(n,e){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:P6;mL&&mL(n,null);let r=e.length;for(;r--;){let s=e[r];if(typeof s=="string"){const i=t(s);i!==s&&(kme(e)||(e[r]=i),s=i)}n[s]=!0}return n}function Mme(n){for(let e=0;e<n.length;e++)Wa(n,e)||(n[e]=null);return n}function Wl(n){const e=MC(null);for(const[t,r]of pL(n))Wa(n,t)&&(Array.isArray(r)?e[t]=Mme(r):r&&typeof r=="object"&&r.constructor===Object?e[t]=Wl(r):e[t]=r);return e}function pb(n,e){for(;n!==null;){const r=Sme(n,e);if(r){if(r.get)return Si(r.get);if(typeof r.value=="function")return Si(r.value)}n=Cme(n)}function t(){return null}return t}const yL=ki(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),RC=ki(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),$C=ki(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),Ome=ki(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),LC=ki(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),Pme=ki(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),vL=ki(["#text"]),bL=ki(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),FC=ki(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),wL=ki(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),I6=ki(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Ime=da(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Dme=da(/<%[\w\W]*|[\w\W]*%>/gm),Rme=da(/\$\{[\w\W]*/gm),$me=da(/^data-[\-\w.\u00B7-\uFFFF]+$/),Lme=da(/^aria-[\-\w]+$/),xL=da(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Fme=da(/^(?:\w+script|data):/i),jme=da(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),kL=da(/^html$/i),Bme=da(/^[a-z][.\w]*(-[.\w]+)+$/i);var CL=Object.freeze({__proto__:null,ARIA_ATTR:Lme,ATTR_WHITESPACE:jme,CUSTOM_ELEMENT:Bme,DATA_ATTR:$me,DOCTYPE_NAME:kL,ERB_EXPR:Dme,IS_ALLOWED_URI:xL,IS_SCRIPT_OR_DATA:Fme,MUSTACHE_EXPR:Ime,TMPLIT_EXPR:Rme});const mb={element:1,text:3,progressingInstruction:7,comment:8,document:9},Vme=function(){return typeof window>"u"?null:window},zme=function(e,t){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let r=null;const s="data-tt-policy-suffix";t&&t.hasAttribute(s)&&(r=t.getAttribute(s));const i="dompurify"+(r?"#"+r:"");try{return e.createPolicy(i,{createHTML(o){return o},createScriptURL(o){return o}})}catch{return console.warn("TrustedTypes policy "+i+" could not be created."),null}},SL=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function EL(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Vme();const e=ze=>EL(ze);if(e.version="3.3.1",e.removed=[],!n||!n.document||n.document.nodeType!==mb.document||!n.Element)return e.isSupported=!1,e;let{document:t}=n;const r=t,s=r.currentScript,{DocumentFragment:i,HTMLTemplateElement:o,Node:a,Element:l,NodeFilter:c,NamedNodeMap:u=n.NamedNodeMap||n.MozNamedAttrMap,HTMLFormElement:d,DOMParser:f,trustedTypes:p}=n,m=l.prototype,y=pb(m,"cloneNode"),w=pb(m,"remove"),k=pb(m,"nextSibling"),x=pb(m,"childNodes"),S=pb(m,"parentNode");if(typeof o=="function"){const ze=t.createElement("template");ze.content&&ze.content.ownerDocument&&(t=ze.content.ownerDocument)}let _,A="";const{implementation:T,createNodeIterator:O,createDocumentFragment:I,getElementsByTagName:R}=t,{importNode:D}=r;let W=SL();e.isSupported=typeof pL=="function"&&typeof S=="function"&&T&&T.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:H,ERB_EXPR:re,TMPLIT_EXPR:ae,DATA_ATTR:de,ARIA_ATTR:le,IS_SCRIPT_OR_DATA:X,ATTR_WHITESPACE:se,CUSTOM_ELEMENT:J}=CL;let{IS_ALLOWED_URI:$}=CL,ve=null;const Pe=wn({},[...yL,...RC,...$C,...LC,...vL]);let q=null;const Xe=wn({},[...bL,...FC,...wL,...I6]);let qe=Object.seal(MC(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Ye=null,it=null;const We=Object.seal(MC(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let ot=!0,ge=!0,Ie=!1,pt=!0,j=!1,Y=!0,ce=!1,be=!1,xe=!1,ne=!1,ue=!1,ye=!1,L=!0,V=!1;const ie="user-content-";let he=!0,z=!1,B={},ee=null;const we=wn({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Ee=null;const rt=wn({},["audio","video","img","source","image","track"]);let en=null;const An=wn({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),tr="http://www.w3.org/1998/Math/MathML",$r="http://www.w3.org/2000/svg",Er="http://www.w3.org/1999/xhtml";let on=Er,pr=!1,Lr=null;const ca=wn({},[tr,$r,Er],IC);let So=wn({},["mi","mo","mn","ms","mtext"]),Hl=wn({},["annotation-xml"]);const lp=wn({},["title","style","font","a","script"]);let ql=null;const Wv=["application/xhtml+xml","text/html"],eg="text/html";let Hr=null,za=null;const tg=t.createElement("form"),ng=function(Q){return Q instanceof RegExp||Q instanceof Function},cp=function(){let Q=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(za&&za===Q)){if((!Q||typeof Q!="object")&&(Q={}),Q=Wl(Q),ql=Wv.indexOf(Q.PARSER_MEDIA_TYPE)===-1?eg:Q.PARSER_MEDIA_TYPE,Hr=ql==="application/xhtml+xml"?IC:P6,ve=Wa(Q,"ALLOWED_TAGS")?wn({},Q.ALLOWED_TAGS,Hr):Pe,q=Wa(Q,"ALLOWED_ATTR")?wn({},Q.ALLOWED_ATTR,Hr):Xe,Lr=Wa(Q,"ALLOWED_NAMESPACES")?wn({},Q.ALLOWED_NAMESPACES,IC):ca,en=Wa(Q,"ADD_URI_SAFE_ATTR")?wn(Wl(An),Q.ADD_URI_SAFE_ATTR,Hr):An,Ee=Wa(Q,"ADD_DATA_URI_TAGS")?wn(Wl(rt),Q.ADD_DATA_URI_TAGS,Hr):rt,ee=Wa(Q,"FORBID_CONTENTS")?wn({},Q.FORBID_CONTENTS,Hr):we,Ye=Wa(Q,"FORBID_TAGS")?wn({},Q.FORBID_TAGS,Hr):Wl({}),it=Wa(Q,"FORBID_ATTR")?wn({},Q.FORBID_ATTR,Hr):Wl({}),B=Wa(Q,"USE_PROFILES")?Q.USE_PROFILES:!1,ot=Q.ALLOW_ARIA_ATTR!==!1,ge=Q.ALLOW_DATA_ATTR!==!1,Ie=Q.ALLOW_UNKNOWN_PROTOCOLS||!1,pt=Q.ALLOW_SELF_CLOSE_IN_ATTR!==!1,j=Q.SAFE_FOR_TEMPLATES||!1,Y=Q.SAFE_FOR_XML!==!1,ce=Q.WHOLE_DOCUMENT||!1,ne=Q.RETURN_DOM||!1,ue=Q.RETURN_DOM_FRAGMENT||!1,ye=Q.RETURN_TRUSTED_TYPE||!1,xe=Q.FORCE_BODY||!1,L=Q.SANITIZE_DOM!==!1,V=Q.SANITIZE_NAMED_PROPS||!1,he=Q.KEEP_CONTENT!==!1,z=Q.IN_PLACE||!1,$=Q.ALLOWED_URI_REGEXP||xL,on=Q.NAMESPACE||Er,So=Q.MATHML_TEXT_INTEGRATION_POINTS||So,Hl=Q.HTML_INTEGRATION_POINTS||Hl,qe=Q.CUSTOM_ELEMENT_HANDLING||{},Q.CUSTOM_ELEMENT_HANDLING&&ng(Q.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(qe.tagNameCheck=Q.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Q.CUSTOM_ELEMENT_HANDLING&&ng(Q.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(qe.attributeNameCheck=Q.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Q.CUSTOM_ELEMENT_HANDLING&&typeof Q.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(qe.allowCustomizedBuiltInElements=Q.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),j&&(ge=!1),ue&&(ne=!0),B&&(ve=wn({},vL),q=[],B.html===!0&&(wn(ve,yL),wn(q,bL)),B.svg===!0&&(wn(ve,RC),wn(q,FC),wn(q,I6)),B.svgFilters===!0&&(wn(ve,$C),wn(q,FC),wn(q,I6)),B.mathMl===!0&&(wn(ve,LC),wn(q,wL),wn(q,I6))),Q.ADD_TAGS&&(typeof Q.ADD_TAGS=="function"?We.tagCheck=Q.ADD_TAGS:(ve===Pe&&(ve=Wl(ve)),wn(ve,Q.ADD_TAGS,Hr))),Q.ADD_ATTR&&(typeof Q.ADD_ATTR=="function"?We.attributeCheck=Q.ADD_ATTR:(q===Xe&&(q=Wl(q)),wn(q,Q.ADD_ATTR,Hr))),Q.ADD_URI_SAFE_ATTR&&wn(en,Q.ADD_URI_SAFE_ATTR,Hr),Q.FORBID_CONTENTS&&(ee===we&&(ee=Wl(ee)),wn(ee,Q.FORBID_CONTENTS,Hr)),Q.ADD_FORBID_CONTENTS&&(ee===we&&(ee=Wl(ee)),wn(ee,Q.ADD_FORBID_CONTENTS,Hr)),he&&(ve["#text"]=!0),ce&&wn(ve,["html","head","body"]),ve.table&&(wn(ve,["tbody"]),delete Ye.tbody),Q.TRUSTED_TYPES_POLICY){if(typeof Q.TRUSTED_TYPES_POLICY.createHTML!="function")throw fb('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Q.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw fb('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');_=Q.TRUSTED_TYPES_POLICY,A=_.createHTML("")}else _===void 0&&(_=zme(p,s)),_!==null&&typeof A=="string"&&(A=_.createHTML(""));ki&&ki(Q),za=Q}},up=wn({},[...RC,...$C,...Ome]),dp=wn({},[...LC,...Pme]),Gv=function(Q){let _e=S(Q);(!_e||!_e.tagName)&&(_e={namespaceURI:on,tagName:"template"});const Je=P6(Q.tagName),Dn=P6(_e.tagName);return Lr[Q.namespaceURI]?Q.namespaceURI===$r?_e.namespaceURI===Er?Je==="svg":_e.namespaceURI===tr?Je==="svg"&&(Dn==="annotation-xml"||So[Dn]):!!up[Je]:Q.namespaceURI===tr?_e.namespaceURI===Er?Je==="math":_e.namespaceURI===$r?Je==="math"&&Hl[Dn]:!!dp[Je]:Q.namespaceURI===Er?_e.namespaceURI===$r&&!Hl[Dn]||_e.namespaceURI===tr&&!So[Dn]?!1:!dp[Je]&&(lp[Je]||!up[Je]):!!(ql==="application/xhtml+xml"&&Lr[Q.namespaceURI]):!1},Zi=function(Q){db(e.removed,{element:Q});try{S(Q).removeChild(Q)}catch{w(Q)}},Ha=function(Q,_e){try{db(e.removed,{attribute:_e.getAttributeNode(Q),from:_e})}catch{db(e.removed,{attribute:null,from:_e})}if(_e.removeAttribute(Q),Q==="is")if(ne||ue)try{Zi(_e)}catch{}else try{_e.setAttribute(Q,"")}catch{}},rg=function(Q){let _e=null,Je=null;if(xe)Q="<remove></remove>"+Q;else{const _r=DC(Q,/^[\r\n\t ]+/);Je=_r&&_r[0]}ql==="application/xhtml+xml"&&on===Er&&(Q='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+Q+"</body></html>");const Dn=_?_.createHTML(Q):Q;if(on===Er)try{_e=new f().parseFromString(Dn,ql)}catch{}if(!_e||!_e.documentElement){_e=T.createDocument(on,"template",null);try{_e.documentElement.innerHTML=pr?A:Dn}catch{}}const Hn=_e.body||_e.documentElement;return Q&&Je&&Hn.insertBefore(t.createTextNode(Je),Hn.childNodes[0]||null),on===Er?R.call(_e,ce?"html":"body")[0]:ce?_e.documentElement:Hn},te=function(Q){return O.call(Q.ownerDocument||Q,Q,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},Ae=function(Q){return Q instanceof d&&(typeof Q.nodeName!="string"||typeof Q.textContent!="string"||typeof Q.removeChild!="function"||!(Q.attributes instanceof u)||typeof Q.removeAttribute!="function"||typeof Q.setAttribute!="function"||typeof Q.namespaceURI!="string"||typeof Q.insertBefore!="function"||typeof Q.hasChildNodes!="function")},Ge=function(Q){return typeof a=="function"&&Q instanceof a};function mt(ze,Q,_e){O6(ze,Je=>{Je.call(e,Q,_e,za)})}const Nn=function(Q){let _e=null;if(mt(W.beforeSanitizeElements,Q,null),Ae(Q))return Zi(Q),!0;const Je=Hr(Q.nodeName);if(mt(W.uponSanitizeElement,Q,{tagName:Je,allowedTags:ve}),Y&&Q.hasChildNodes()&&!Ge(Q.firstElementChild)&&Ci(/<[/\w!]/g,Q.innerHTML)&&Ci(/<[/\w!]/g,Q.textContent)||Q.nodeType===mb.progressingInstruction||Y&&Q.nodeType===mb.comment&&Ci(/<[/\w]/g,Q.data))return Zi(Q),!0;if(!(We.tagCheck instanceof Function&&We.tagCheck(Je))&&(!ve[Je]||Ye[Je])){if(!Ye[Je]&&vn(Je)&&(qe.tagNameCheck instanceof RegExp&&Ci(qe.tagNameCheck,Je)||qe.tagNameCheck instanceof Function&&qe.tagNameCheck(Je)))return!1;if(he&&!ee[Je]){const Dn=S(Q)||Q.parentNode,Hn=x(Q)||Q.childNodes;if(Hn&&Dn){const _r=Hn.length;for(let zs=_r-1;zs>=0;--zs){const Eo=y(Hn[zs],!0);Eo.__removalCount=(Q.__removalCount||0)+1,Dn.insertBefore(Eo,k(Q))}}}return Zi(Q),!0}return Q instanceof l&&!Gv(Q)||(Je==="noscript"||Je==="noembed"||Je==="noframes")&&Ci(/<\/no(script|embed|frames)/i,Q.innerHTML)?(Zi(Q),!0):(j&&Q.nodeType===mb.text&&(_e=Q.textContent,O6([H,re,ae],Dn=>{_e=hb(_e,Dn," ")}),Q.textContent!==_e&&(db(e.removed,{element:Q.cloneNode()}),Q.textContent=_e)),mt(W.afterSanitizeElements,Q,null),!1)},Yn=function(Q,_e,Je){if(L&&(_e==="id"||_e==="name")&&(Je in t||Je in tg))return!1;if(!(ge&&!it[_e]&&Ci(de,_e))){if(!(ot&&Ci(le,_e))){if(!(We.attributeCheck instanceof Function&&We.attributeCheck(_e,Q))){if(!q[_e]||it[_e]){if(!(vn(Q)&&(qe.tagNameCheck instanceof RegExp&&Ci(qe.tagNameCheck,Q)||qe.tagNameCheck instanceof Function&&qe.tagNameCheck(Q))&&(qe.attributeNameCheck instanceof RegExp&&Ci(qe.attributeNameCheck,_e)||qe.attributeNameCheck instanceof Function&&qe.attributeNameCheck(_e,Q))||_e==="is"&&qe.allowCustomizedBuiltInElements&&(qe.tagNameCheck instanceof RegExp&&Ci(qe.tagNameCheck,Je)||qe.tagNameCheck instanceof Function&&qe.tagNameCheck(Je))))return!1}else if(!en[_e]){if(!Ci($,hb(Je,se,""))){if(!((_e==="src"||_e==="xlink:href"||_e==="href")&&Q!=="script"&&Tme(Je,"data:")===0&&Ee[Q])){if(!(Ie&&!Ci(X,hb(Je,se,"")))){if(Je)return!1}}}}}}}return!0},vn=function(Q){return Q!=="annotation-xml"&&DC(Q,J)},an=function(Q){mt(W.beforeSanitizeAttributes,Q,null);const{attributes:_e}=Q;if(!_e||Ae(Q))return;const Je={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:q,forceKeepAttr:void 0};let Dn=_e.length;for(;Dn--;){const Hn=_e[Dn],{name:_r,namespaceURI:zs,value:Eo}=Hn,Hd=Hr(_r),Kv=Eo;let Ns=_r==="value"?Kv:Ame(Kv);if(Je.attrName=Hd,Je.attrValue=Ns,Je.keepAttr=!0,Je.forceKeepAttr=void 0,mt(W.uponSanitizeAttribute,Q,Je),Ns=Je.attrValue,V&&(Hd==="id"||Hd==="name")&&(Ha(_r,Q),Ns=ie+Ns),Y&&Ci(/((--!?|])>)|<\/(style|title|textarea)/i,Ns)){Ha(_r,Q);continue}if(Hd==="attributename"&&DC(Ns,"href")){Ha(_r,Q);continue}if(Je.forceKeepAttr)continue;if(!Je.keepAttr){Ha(_r,Q);continue}if(!pt&&Ci(/\/>/i,Ns)){Ha(_r,Q);continue}j&&O6([H,re,ae],p6=>{Ns=hb(Ns,p6," ")});const f6=Hr(Q.nodeName);if(!Yn(f6,Hd,Ns)){Ha(_r,Q);continue}if(_&&typeof p=="object"&&typeof p.getAttributeType=="function"&&!zs)switch(p.getAttributeType(f6,Hd)){case"TrustedHTML":{Ns=_.createHTML(Ns);break}case"TrustedScriptURL":{Ns=_.createScriptURL(Ns);break}}if(Ns!==Kv)try{zs?Q.setAttributeNS(zs,_r,Ns):Q.setAttribute(_r,Ns),Ae(Q)?Zi(Q):gL(e.removed)}catch{Ha(_r,Q)}}mt(W.afterSanitizeAttributes,Q,null)},As=function ze(Q){let _e=null;const Je=te(Q);for(mt(W.beforeSanitizeShadowDOM,Q,null);_e=Je.nextNode();)mt(W.uponSanitizeShadowNode,_e,null),Nn(_e),an(_e),_e.content instanceof i&&ze(_e.content);mt(W.afterSanitizeShadowDOM,Q,null)};return e.sanitize=function(ze){let Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},_e=null,Je=null,Dn=null,Hn=null;if(pr=!ze,pr&&(ze="<!-->"),typeof ze!="string"&&!Ge(ze))if(typeof ze.toString=="function"){if(ze=ze.toString(),typeof ze!="string")throw fb("dirty is not a string, aborting")}else throw fb("toString is not a function");if(!e.isSupported)return ze;if(be||cp(Q),e.removed=[],typeof ze=="string"&&(z=!1),z){if(ze.nodeName){const Eo=Hr(ze.nodeName);if(!ve[Eo]||Ye[Eo])throw fb("root node is forbidden and cannot be sanitized in-place")}}else if(ze instanceof a)_e=rg("<!---->"),Je=_e.ownerDocument.importNode(ze,!0),Je.nodeType===mb.element&&Je.nodeName==="BODY"||Je.nodeName==="HTML"?_e=Je:_e.appendChild(Je);else{if(!ne&&!j&&!ce&&ze.indexOf("<")===-1)return _&&ye?_.createHTML(ze):ze;if(_e=rg(ze),!_e)return ne?null:ye?A:""}_e&&xe&&Zi(_e.firstChild);const _r=te(z?ze:_e);for(;Dn=_r.nextNode();)Nn(Dn),an(Dn),Dn.content instanceof i&&As(Dn.content);if(z)return ze;if(ne){if(ue)for(Hn=I.call(_e.ownerDocument);_e.firstChild;)Hn.appendChild(_e.firstChild);else Hn=_e;return(q.shadowroot||q.shadowrootmode)&&(Hn=D.call(r,Hn,!0)),Hn}let zs=ce?_e.outerHTML:_e.innerHTML;return ce&&ve["!doctype"]&&_e.ownerDocument&&_e.ownerDocument.doctype&&_e.ownerDocument.doctype.name&&Ci(kL,_e.ownerDocument.doctype.name)&&(zs="<!DOCTYPE "+_e.ownerDocument.doctype.name+`> +`+zs),j&&O6([H,re,ae],Eo=>{zs=hb(zs,Eo," ")}),_&&ye?_.createHTML(zs):zs},e.setConfig=function(){let ze=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};cp(ze),be=!0},e.clearConfig=function(){za=null,be=!1},e.isValidAttribute=function(ze,Q,_e){za||cp({});const Je=Hr(ze),Dn=Hr(Q);return Yn(Je,Dn,_e)},e.addHook=function(ze,Q){typeof Q=="function"&&db(W[ze],Q)},e.removeHook=function(ze,Q){if(Q!==void 0){const _e=Eme(W[ze],Q);return _e===-1?void 0:_me(W[ze],_e,1)[0]}return gL(W[ze])},e.removeHooks=function(ze){W[ze]=[]},e.removeAllHooks=function(){W=SL()},e}var D6=EL(),Jn;(function(n){n.assertEqual=s=>{};function e(s){}n.assertIs=e;function t(s){throw new Error}n.assertNever=t,n.arrayToEnum=s=>{const i={};for(const o of s)i[o]=o;return i},n.getValidEnumValues=s=>{const i=n.objectKeys(s).filter(a=>typeof s[s[a]]!="number"),o={};for(const a of i)o[a]=s[a];return n.objectValues(o)},n.objectValues=s=>n.objectKeys(s).map(function(i){return s[i]}),n.objectKeys=typeof Object.keys=="function"?s=>Object.keys(s):s=>{const i=[];for(const o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.push(o);return i},n.find=(s,i)=>{for(const o of s)if(i(o))return o},n.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function r(s,i=" | "){return s.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}n.joinValues=r,n.jsonStringifyReplacer=(s,i)=>typeof i=="bigint"?i.toString():i})(Jn||(Jn={}));var _L;(function(n){n.mergeShapes=(e,t)=>({...e,...t})})(_L||(_L={}));const ct=Jn.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Yd=n=>{switch(typeof n){case"undefined":return ct.undefined;case"string":return ct.string;case"number":return Number.isNaN(n)?ct.nan:ct.number;case"boolean":return ct.boolean;case"function":return ct.function;case"bigint":return ct.bigint;case"symbol":return ct.symbol;case"object":return Array.isArray(n)?ct.array:n===null?ct.null:n.then&&typeof n.then=="function"&&n.catch&&typeof n.catch=="function"?ct.promise:typeof Map<"u"&&n instanceof Map?ct.map:typeof Set<"u"&&n instanceof Set?ct.set:typeof Date<"u"&&n instanceof Date?ct.date:ct.object;default:return ct.unknown}},Le=Jn.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);class hu extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};const t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){const t=e||function(i){return i.message},r={_errors:[]},s=i=>{for(const o of i.issues)if(o.code==="invalid_union")o.unionErrors.map(s);else if(o.code==="invalid_return_type")s(o.returnTypeError);else if(o.code==="invalid_arguments")s(o.argumentsError);else if(o.path.length===0)r._errors.push(t(o));else{let a=r,l=0;for(;l<o.path.length;){const c=o.path[l];l===o.path.length-1?(a[c]=a[c]||{_errors:[]},a[c]._errors.push(t(o))):a[c]=a[c]||{_errors:[]},a=a[c],l++}}};return s(this),r}static assert(e){if(!(e instanceof hu))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,Jn.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=t=>t.message){const t={},r=[];for(const s of this.issues)if(s.path.length>0){const i=s.path[0];t[i]=t[i]||[],t[i].push(e(s))}else r.push(e(s));return{formErrors:r,fieldErrors:t}}get formErrors(){return this.flatten()}}hu.create=n=>new hu(n);const jC=(n,e)=>{let t;switch(n.code){case Le.invalid_type:n.received===ct.undefined?t="Required":t=`Expected ${n.expected}, received ${n.received}`;break;case Le.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(n.expected,Jn.jsonStringifyReplacer)}`;break;case Le.unrecognized_keys:t=`Unrecognized key(s) in object: ${Jn.joinValues(n.keys,", ")}`;break;case Le.invalid_union:t="Invalid input";break;case Le.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${Jn.joinValues(n.options)}`;break;case Le.invalid_enum_value:t=`Invalid enum value. Expected ${Jn.joinValues(n.options)}, received '${n.received}'`;break;case Le.invalid_arguments:t="Invalid function arguments";break;case Le.invalid_return_type:t="Invalid function return type";break;case Le.invalid_date:t="Invalid date";break;case Le.invalid_string:typeof n.validation=="object"?"includes"in n.validation?(t=`Invalid input: must include "${n.validation.includes}"`,typeof n.validation.position=="number"&&(t=`${t} at one or more positions greater than or equal to ${n.validation.position}`)):"startsWith"in n.validation?t=`Invalid input: must start with "${n.validation.startsWith}"`:"endsWith"in n.validation?t=`Invalid input: must end with "${n.validation.endsWith}"`:Jn.assertNever(n.validation):n.validation!=="regex"?t=`Invalid ${n.validation}`:t="Invalid";break;case Le.too_small:n.type==="array"?t=`Array must contain ${n.exact?"exactly":n.inclusive?"at least":"more than"} ${n.minimum} element(s)`:n.type==="string"?t=`String must contain ${n.exact?"exactly":n.inclusive?"at least":"over"} ${n.minimum} character(s)`:n.type==="number"?t=`Number must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${n.minimum}`:n.type==="bigint"?t=`Number must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${n.minimum}`:n.type==="date"?t=`Date must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(n.minimum))}`:t="Invalid input";break;case Le.too_big:n.type==="array"?t=`Array must contain ${n.exact?"exactly":n.inclusive?"at most":"less than"} ${n.maximum} element(s)`:n.type==="string"?t=`String must contain ${n.exact?"exactly":n.inclusive?"at most":"under"} ${n.maximum} character(s)`:n.type==="number"?t=`Number must be ${n.exact?"exactly":n.inclusive?"less than or equal to":"less than"} ${n.maximum}`:n.type==="bigint"?t=`BigInt must be ${n.exact?"exactly":n.inclusive?"less than or equal to":"less than"} ${n.maximum}`:n.type==="date"?t=`Date must be ${n.exact?"exactly":n.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(n.maximum))}`:t="Invalid input";break;case Le.custom:t="Invalid input";break;case Le.invalid_intersection_types:t="Intersection results could not be merged";break;case Le.not_multiple_of:t=`Number must be a multiple of ${n.multipleOf}`;break;case Le.not_finite:t="Number must be finite";break;default:t=e.defaultError,Jn.assertNever(n)}return{message:t}};let Hme=jC;function qme(){return Hme}const Ume=n=>{const{data:e,path:t,errorMaps:r,issueData:s}=n,i=[...t,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return{...s,path:i,message:s.message};let a="";const l=r.filter(c=>!!c).slice().reverse();for(const c of l)a=c(o,{data:e,defaultError:a}).message;return{...s,path:i,message:a}};function Qe(n,e){const t=qme(),r=Ume({issueData:e,data:n.data,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,t,t===jC?void 0:jC].filter(s=>!!s)});n.common.issues.push(r)}class _o{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,t){const r=[];for(const s of t){if(s.status==="aborted")return Xt;s.status==="dirty"&&e.dirty(),r.push(s.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,t){const r=[];for(const s of t){const i=await s.key,o=await s.value;r.push({key:i,value:o})}return _o.mergeObjectSync(e,r)}static mergeObjectSync(e,t){const r={};for(const s of t){const{key:i,value:o}=s;if(i.status==="aborted"||o.status==="aborted")return Xt;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||s.alwaysSet)&&(r[i.value]=o.value)}return{status:e.value,value:r}}}const Xt=Object.freeze({status:"aborted"}),gb=n=>({status:"dirty",value:n}),ha=n=>({status:"valid",value:n}),TL=n=>n.status==="aborted",AL=n=>n.status==="dirty",fg=n=>n.status==="valid",R6=n=>typeof Promise<"u"&&n instanceof Promise;var dt;(function(n){n.errToObj=e=>typeof e=="string"?{message:e}:e||{},n.toString=e=>typeof e=="string"?e:e==null?void 0:e.message})(dt||(dt={}));class Zd{constructor(e,t,r,s){this._cachedPath=[],this.parent=e,this.data=t,this._path=r,this._key=s}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const NL=(n,e)=>{if(fg(e))return{success:!0,data:e.value};if(!n.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const t=new hu(n.common.issues);return this._error=t,this._error}}};function xn(n){if(!n)return{};const{errorMap:e,invalid_type_error:t,required_error:r,description:s}=n;if(e&&(t||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(o,a)=>{const{message:l}=n;return o.code==="invalid_enum_value"?{message:l??a.defaultError}:typeof a.data>"u"?{message:l??r??a.defaultError}:o.code!=="invalid_type"?{message:a.defaultError}:{message:l??t??a.defaultError}},description:s}}class qn{get description(){return this._def.description}_getType(e){return Yd(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:Yd(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new _o,ctx:{common:e.parent.common,data:e.data,parsedType:Yd(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const t=this._parse(e);if(R6(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){const t=this._parse(e);return Promise.resolve(t)}parse(e,t){const r=this.safeParse(e,t);if(r.success)return r.data;throw r.error}safeParse(e,t){const r={common:{issues:[],async:(t==null?void 0:t.async)??!1,contextualErrorMap:t==null?void 0:t.errorMap},path:(t==null?void 0:t.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Yd(e)},s=this._parseSync({data:e,path:r.path,parent:r});return NL(r,s)}"~validate"(e){var r,s;const t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Yd(e)};if(!this["~standard"].async)try{const i=this._parseSync({data:e,path:[],parent:t});return fg(i)?{value:i.value}:{issues:t.common.issues}}catch(i){(s=(r=i==null?void 0:i.message)==null?void 0:r.toLowerCase())!=null&&s.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(i=>fg(i)?{value:i.value}:{issues:t.common.issues})}async parseAsync(e,t){const r=await this.safeParseAsync(e,t);if(r.success)return r.data;throw r.error}async safeParseAsync(e,t){const r={common:{issues:[],contextualErrorMap:t==null?void 0:t.errorMap,async:!0},path:(t==null?void 0:t.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Yd(e)},s=this._parse({data:e,path:r.path,parent:r}),i=await(R6(s)?s:Promise.resolve(s));return NL(r,i)}refine(e,t){const r=s=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(s):t;return this._refinement((s,i)=>{const o=e(s),a=()=>i.addIssue({code:Le.custom,...r(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(l=>l?!0:(a(),!1)):o?!0:(a(),!1)})}refinement(e,t){return this._refinement((r,s)=>e(r)?!0:(s.addIssue(typeof t=="function"?t(r,s):t),!1))}_refinement(e){return new gg({schema:this,typeName:Jt.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return Qd.create(this,this._def)}nullable(){return yg.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Gl.create(this)}promise(){return j6.create(this,this._def)}or(e){return L6.create([this,e],this._def)}and(e){return F6.create(this,e,this._def)}transform(e){return new gg({...xn(this._def),schema:this,typeName:Jt.ZodEffects,effect:{type:"transform",transform:e}})}default(e){const t=typeof e=="function"?e:()=>e;return new HC({...xn(this._def),innerType:this,defaultValue:t,typeName:Jt.ZodDefault})}brand(){return new pge({typeName:Jt.ZodBranded,type:this,...xn(this._def)})}catch(e){const t=typeof e=="function"?e:()=>e;return new qC({...xn(this._def),innerType:this,catchValue:t,typeName:Jt.ZodCatch})}describe(e){const t=this.constructor;return new t({...this._def,description:e})}pipe(e){return UC.create(this,e)}readonly(){return WC.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const Wme=/^c[^\s-]{8,}$/i,Gme=/^[0-9a-z]+$/,Kme=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Yme=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Zme=/^[a-z0-9_-]{21}$/i,Xme=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Jme=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,Qme=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,ege="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let BC;const tge=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,nge=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,rge=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,sge=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,ige=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,oge=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,ML="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",age=new RegExp(`^${ML}$`);function OL(n){let e="[0-5]\\d";n.precision?e=`${e}\\.\\d{${n.precision}}`:n.precision==null&&(e=`${e}(\\.\\d+)?`);const t=n.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${t}`}function lge(n){return new RegExp(`^${OL(n)}$`)}function cge(n){let e=`${ML}T${OL(n)}`;const t=[];return t.push(n.local?"Z?":"Z"),n.offset&&t.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${t.join("|")})`,new RegExp(`^${e}$`)}function uge(n,e){return!!((e==="v4"||!e)&&tge.test(n)||(e==="v6"||!e)&&rge.test(n))}function dge(n,e){if(!Xme.test(n))return!1;try{const[t]=n.split(".");if(!t)return!1;const r=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),s=JSON.parse(atob(r));return!(typeof s!="object"||s===null||"typ"in s&&(s==null?void 0:s.typ)!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return!1}}function hge(n,e){return!!((e==="v4"||!e)&&nge.test(n)||(e==="v6"||!e)&&sge.test(n))}class Xd extends qn{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==ct.string){const i=this._getOrReturnCtx(e);return Qe(i,{code:Le.invalid_type,expected:ct.string,received:i.parsedType}),Xt}const r=new _o;let s;for(const i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),Qe(s,{code:Le.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="max")e.data.length>i.value&&(s=this._getOrReturnCtx(e,s),Qe(s,{code:Le.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="length"){const o=e.data.length>i.value,a=e.data.length<i.value;(o||a)&&(s=this._getOrReturnCtx(e,s),o?Qe(s,{code:Le.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):a&&Qe(s,{code:Le.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),r.dirty())}else if(i.kind==="email")Qme.test(e.data)||(s=this._getOrReturnCtx(e,s),Qe(s,{validation:"email",code:Le.invalid_string,message:i.message}),r.dirty());else if(i.kind==="emoji")BC||(BC=new RegExp(ege,"u")),BC.test(e.data)||(s=this._getOrReturnCtx(e,s),Qe(s,{validation:"emoji",code:Le.invalid_string,message:i.message}),r.dirty());else if(i.kind==="uuid")Yme.test(e.data)||(s=this._getOrReturnCtx(e,s),Qe(s,{validation:"uuid",code:Le.invalid_string,message:i.message}),r.dirty());else if(i.kind==="nanoid")Zme.test(e.data)||(s=this._getOrReturnCtx(e,s),Qe(s,{validation:"nanoid",code:Le.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid")Wme.test(e.data)||(s=this._getOrReturnCtx(e,s),Qe(s,{validation:"cuid",code:Le.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid2")Gme.test(e.data)||(s=this._getOrReturnCtx(e,s),Qe(s,{validation:"cuid2",code:Le.invalid_string,message:i.message}),r.dirty());else if(i.kind==="ulid")Kme.test(e.data)||(s=this._getOrReturnCtx(e,s),Qe(s,{validation:"ulid",code:Le.invalid_string,message:i.message}),r.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{s=this._getOrReturnCtx(e,s),Qe(s,{validation:"url",code:Le.invalid_string,message:i.message}),r.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),Qe(s,{validation:"regex",code:Le.invalid_string,message:i.message}),r.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(s=this._getOrReturnCtx(e,s),Qe(s,{code:Le.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),r.dirty()):i.kind==="toLowerCase"?e.data=e.data.toLowerCase():i.kind==="toUpperCase"?e.data=e.data.toUpperCase():i.kind==="startsWith"?e.data.startsWith(i.value)||(s=this._getOrReturnCtx(e,s),Qe(s,{code:Le.invalid_string,validation:{startsWith:i.value},message:i.message}),r.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(s=this._getOrReturnCtx(e,s),Qe(s,{code:Le.invalid_string,validation:{endsWith:i.value},message:i.message}),r.dirty()):i.kind==="datetime"?cge(i).test(e.data)||(s=this._getOrReturnCtx(e,s),Qe(s,{code:Le.invalid_string,validation:"datetime",message:i.message}),r.dirty()):i.kind==="date"?age.test(e.data)||(s=this._getOrReturnCtx(e,s),Qe(s,{code:Le.invalid_string,validation:"date",message:i.message}),r.dirty()):i.kind==="time"?lge(i).test(e.data)||(s=this._getOrReturnCtx(e,s),Qe(s,{code:Le.invalid_string,validation:"time",message:i.message}),r.dirty()):i.kind==="duration"?Jme.test(e.data)||(s=this._getOrReturnCtx(e,s),Qe(s,{validation:"duration",code:Le.invalid_string,message:i.message}),r.dirty()):i.kind==="ip"?uge(e.data,i.version)||(s=this._getOrReturnCtx(e,s),Qe(s,{validation:"ip",code:Le.invalid_string,message:i.message}),r.dirty()):i.kind==="jwt"?dge(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),Qe(s,{validation:"jwt",code:Le.invalid_string,message:i.message}),r.dirty()):i.kind==="cidr"?hge(e.data,i.version)||(s=this._getOrReturnCtx(e,s),Qe(s,{validation:"cidr",code:Le.invalid_string,message:i.message}),r.dirty()):i.kind==="base64"?ige.test(e.data)||(s=this._getOrReturnCtx(e,s),Qe(s,{validation:"base64",code:Le.invalid_string,message:i.message}),r.dirty()):i.kind==="base64url"?oge.test(e.data)||(s=this._getOrReturnCtx(e,s),Qe(s,{validation:"base64url",code:Le.invalid_string,message:i.message}),r.dirty()):Jn.assertNever(i);return{status:r.value,value:e.data}}_regex(e,t,r){return this.refinement(s=>e.test(s),{validation:t,code:Le.invalid_string,...dt.errToObj(r)})}_addCheck(e){return new Xd({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...dt.errToObj(e)})}url(e){return this._addCheck({kind:"url",...dt.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...dt.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...dt.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...dt.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...dt.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...dt.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...dt.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...dt.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...dt.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...dt.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...dt.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...dt.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof(e==null?void 0:e.precision)>"u"?null:e==null?void 0:e.precision,offset:(e==null?void 0:e.offset)??!1,local:(e==null?void 0:e.local)??!1,...dt.errToObj(e==null?void 0:e.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof(e==null?void 0:e.precision)>"u"?null:e==null?void 0:e.precision,...dt.errToObj(e==null?void 0:e.message)})}duration(e){return this._addCheck({kind:"duration",...dt.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...dt.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t==null?void 0:t.position,...dt.errToObj(t==null?void 0:t.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...dt.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...dt.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...dt.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...dt.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...dt.errToObj(t)})}nonempty(e){return this.min(1,dt.errToObj(e))}trim(){return new Xd({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new Xd({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new Xd({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}}Xd.create=n=>new Xd({checks:[],typeName:Jt.ZodString,coerce:(n==null?void 0:n.coerce)??!1,...xn(n)});function fge(n,e){const t=(n.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,s=t>r?t:r,i=Number.parseInt(n.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}class yb extends qn{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==ct.number){const i=this._getOrReturnCtx(e);return Qe(i,{code:Le.invalid_type,expected:ct.number,received:i.parsedType}),Xt}let r;const s=new _o;for(const i of this._def.checks)i.kind==="int"?Jn.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),Qe(r,{code:Le.invalid_type,expected:"integer",received:"float",message:i.message}),s.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),Qe(r,{code:Le.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(r=this._getOrReturnCtx(e,r),Qe(r,{code:Le.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?fge(e.data,i.value)!==0&&(r=this._getOrReturnCtx(e,r),Qe(r,{code:Le.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),Qe(r,{code:Le.not_finite,message:i.message}),s.dirty()):Jn.assertNever(i);return{status:s.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,dt.toString(t))}gt(e,t){return this.setLimit("min",e,!1,dt.toString(t))}lte(e,t){return this.setLimit("max",e,!0,dt.toString(t))}lt(e,t){return this.setLimit("max",e,!1,dt.toString(t))}setLimit(e,t,r,s){return new yb({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:dt.toString(s)}]})}_addCheck(e){return new yb({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:dt.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:dt.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:dt.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:dt.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:dt.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:dt.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:dt.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:dt.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:dt.toString(e)})}get minValue(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&Jn.isInteger(e.value))}get isFinite(){let e=null,t=null;for(const r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(t===null||r.value>t)&&(t=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value)}return Number.isFinite(t)&&Number.isFinite(e)}}yb.create=n=>new yb({checks:[],typeName:Jt.ZodNumber,coerce:(n==null?void 0:n.coerce)||!1,...xn(n)});class vb extends qn{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==ct.bigint)return this._getInvalidInput(e);let r;const s=new _o;for(const i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),Qe(r,{code:Le.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(r=this._getOrReturnCtx(e,r),Qe(r,{code:Le.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),Qe(r,{code:Le.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):Jn.assertNever(i);return{status:s.value,value:e.data}}_getInvalidInput(e){const t=this._getOrReturnCtx(e);return Qe(t,{code:Le.invalid_type,expected:ct.bigint,received:t.parsedType}),Xt}gte(e,t){return this.setLimit("min",e,!0,dt.toString(t))}gt(e,t){return this.setLimit("min",e,!1,dt.toString(t))}lte(e,t){return this.setLimit("max",e,!0,dt.toString(t))}lt(e,t){return this.setLimit("max",e,!1,dt.toString(t))}setLimit(e,t,r,s){return new vb({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:dt.toString(s)}]})}_addCheck(e){return new vb({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:dt.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:dt.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:dt.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:dt.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:dt.toString(t)})}get minValue(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}}vb.create=n=>new vb({checks:[],typeName:Jt.ZodBigInt,coerce:(n==null?void 0:n.coerce)??!1,...xn(n)});class VC extends qn{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==ct.boolean){const r=this._getOrReturnCtx(e);return Qe(r,{code:Le.invalid_type,expected:ct.boolean,received:r.parsedType}),Xt}return ha(e.data)}}VC.create=n=>new VC({typeName:Jt.ZodBoolean,coerce:(n==null?void 0:n.coerce)||!1,...xn(n)});class $6 extends qn{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==ct.date){const i=this._getOrReturnCtx(e);return Qe(i,{code:Le.invalid_type,expected:ct.date,received:i.parsedType}),Xt}if(Number.isNaN(e.data.getTime())){const i=this._getOrReturnCtx(e);return Qe(i,{code:Le.invalid_date}),Xt}const r=new _o;let s;for(const i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),Qe(s,{code:Le.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),r.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(s=this._getOrReturnCtx(e,s),Qe(s,{code:Le.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),r.dirty()):Jn.assertNever(i);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new $6({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:dt.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:dt.toString(t)})}get minDate(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e!=null?new Date(e):null}}$6.create=n=>new $6({checks:[],coerce:(n==null?void 0:n.coerce)||!1,typeName:Jt.ZodDate,...xn(n)});class PL extends qn{_parse(e){if(this._getType(e)!==ct.symbol){const r=this._getOrReturnCtx(e);return Qe(r,{code:Le.invalid_type,expected:ct.symbol,received:r.parsedType}),Xt}return ha(e.data)}}PL.create=n=>new PL({typeName:Jt.ZodSymbol,...xn(n)});class IL extends qn{_parse(e){if(this._getType(e)!==ct.undefined){const r=this._getOrReturnCtx(e);return Qe(r,{code:Le.invalid_type,expected:ct.undefined,received:r.parsedType}),Xt}return ha(e.data)}}IL.create=n=>new IL({typeName:Jt.ZodUndefined,...xn(n)});class DL extends qn{_parse(e){if(this._getType(e)!==ct.null){const r=this._getOrReturnCtx(e);return Qe(r,{code:Le.invalid_type,expected:ct.null,received:r.parsedType}),Xt}return ha(e.data)}}DL.create=n=>new DL({typeName:Jt.ZodNull,...xn(n)});class RL extends qn{constructor(){super(...arguments),this._any=!0}_parse(e){return ha(e.data)}}RL.create=n=>new RL({typeName:Jt.ZodAny,...xn(n)});class $L extends qn{constructor(){super(...arguments),this._unknown=!0}_parse(e){return ha(e.data)}}$L.create=n=>new $L({typeName:Jt.ZodUnknown,...xn(n)});class Jd extends qn{_parse(e){const t=this._getOrReturnCtx(e);return Qe(t,{code:Le.invalid_type,expected:ct.never,received:t.parsedType}),Xt}}Jd.create=n=>new Jd({typeName:Jt.ZodNever,...xn(n)});class LL extends qn{_parse(e){if(this._getType(e)!==ct.undefined){const r=this._getOrReturnCtx(e);return Qe(r,{code:Le.invalid_type,expected:ct.void,received:r.parsedType}),Xt}return ha(e.data)}}LL.create=n=>new LL({typeName:Jt.ZodVoid,...xn(n)});class Gl extends qn{_parse(e){const{ctx:t,status:r}=this._processInputParams(e),s=this._def;if(t.parsedType!==ct.array)return Qe(t,{code:Le.invalid_type,expected:ct.array,received:t.parsedType}),Xt;if(s.exactLength!==null){const o=t.data.length>s.exactLength.value,a=t.data.length<s.exactLength.value;(o||a)&&(Qe(t,{code:o?Le.too_big:Le.too_small,minimum:a?s.exactLength.value:void 0,maximum:o?s.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:s.exactLength.message}),r.dirty())}if(s.minLength!==null&&t.data.length<s.minLength.value&&(Qe(t,{code:Le.too_small,minimum:s.minLength.value,type:"array",inclusive:!0,exact:!1,message:s.minLength.message}),r.dirty()),s.maxLength!==null&&t.data.length>s.maxLength.value&&(Qe(t,{code:Le.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),r.dirty()),t.common.async)return Promise.all([...t.data].map((o,a)=>s.type._parseAsync(new Zd(t,o,t.path,a)))).then(o=>_o.mergeArray(r,o));const i=[...t.data].map((o,a)=>s.type._parseSync(new Zd(t,o,t.path,a)));return _o.mergeArray(r,i)}get element(){return this._def.type}min(e,t){return new Gl({...this._def,minLength:{value:e,message:dt.toString(t)}})}max(e,t){return new Gl({...this._def,maxLength:{value:e,message:dt.toString(t)}})}length(e,t){return new Gl({...this._def,exactLength:{value:e,message:dt.toString(t)}})}nonempty(e){return this.min(1,e)}}Gl.create=(n,e)=>new Gl({type:n,minLength:null,maxLength:null,exactLength:null,typeName:Jt.ZodArray,...xn(e)});function pg(n){if(n instanceof ps){const e={};for(const t in n.shape){const r=n.shape[t];e[t]=Qd.create(pg(r))}return new ps({...n._def,shape:()=>e})}else return n instanceof Gl?new Gl({...n._def,type:pg(n.element)}):n instanceof Qd?Qd.create(pg(n.unwrap())):n instanceof yg?yg.create(pg(n.unwrap())):n instanceof wp?wp.create(n.items.map(e=>pg(e))):n}class ps extends qn{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const e=this._def.shape(),t=Jn.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==ct.object){const c=this._getOrReturnCtx(e);return Qe(c,{code:Le.invalid_type,expected:ct.object,received:c.parsedType}),Xt}const{status:r,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),a=[];if(!(this._def.catchall instanceof Jd&&this._def.unknownKeys==="strip"))for(const c in s.data)o.includes(c)||a.push(c);const l=[];for(const c of o){const u=i[c],d=s.data[c];l.push({key:{status:"valid",value:c},value:u._parse(new Zd(s,d,s.path,c)),alwaysSet:c in s.data})}if(this._def.catchall instanceof Jd){const c=this._def.unknownKeys;if(c==="passthrough")for(const u of a)l.push({key:{status:"valid",value:u},value:{status:"valid",value:s.data[u]}});else if(c==="strict")a.length>0&&(Qe(s,{code:Le.unrecognized_keys,keys:a}),r.dirty());else if(c!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const c=this._def.catchall;for(const u of a){const d=s.data[u];l.push({key:{status:"valid",value:u},value:c._parse(new Zd(s,d,s.path,u)),alwaysSet:u in s.data})}}return s.common.async?Promise.resolve().then(async()=>{const c=[];for(const u of l){const d=await u.key,f=await u.value;c.push({key:d,value:f,alwaysSet:u.alwaysSet})}return c}).then(c=>_o.mergeObjectSync(r,c)):_o.mergeObjectSync(r,l)}get shape(){return this._def.shape()}strict(e){return dt.errToObj,new ps({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,r)=>{var i,o;const s=((o=(i=this._def).errorMap)==null?void 0:o.call(i,t,r).message)??r.defaultError;return t.code==="unrecognized_keys"?{message:dt.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new ps({...this._def,unknownKeys:"strip"})}passthrough(){return new ps({...this._def,unknownKeys:"passthrough"})}extend(e){return new ps({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new ps({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:Jt.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new ps({...this._def,catchall:e})}pick(e){const t={};for(const r of Jn.objectKeys(e))e[r]&&this.shape[r]&&(t[r]=this.shape[r]);return new ps({...this._def,shape:()=>t})}omit(e){const t={};for(const r of Jn.objectKeys(this.shape))e[r]||(t[r]=this.shape[r]);return new ps({...this._def,shape:()=>t})}deepPartial(){return pg(this)}partial(e){const t={};for(const r of Jn.objectKeys(this.shape)){const s=this.shape[r];e&&!e[r]?t[r]=s:t[r]=s.optional()}return new ps({...this._def,shape:()=>t})}required(e){const t={};for(const r of Jn.objectKeys(this.shape))if(e&&!e[r])t[r]=this.shape[r];else{let i=this.shape[r];for(;i instanceof Qd;)i=i._def.innerType;t[r]=i}return new ps({...this._def,shape:()=>t})}keyof(){return VL(Jn.objectKeys(this.shape))}}ps.create=(n,e)=>new ps({shape:()=>n,unknownKeys:"strip",catchall:Jd.create(),typeName:Jt.ZodObject,...xn(e)}),ps.strictCreate=(n,e)=>new ps({shape:()=>n,unknownKeys:"strict",catchall:Jd.create(),typeName:Jt.ZodObject,...xn(e)}),ps.lazycreate=(n,e)=>new ps({shape:n,unknownKeys:"strip",catchall:Jd.create(),typeName:Jt.ZodObject,...xn(e)});class L6 extends qn{_parse(e){const{ctx:t}=this._processInputParams(e),r=this._def.options;function s(i){for(const a of i)if(a.result.status==="valid")return a.result;for(const a of i)if(a.result.status==="dirty")return t.common.issues.push(...a.ctx.common.issues),a.result;const o=i.map(a=>new hu(a.ctx.common.issues));return Qe(t,{code:Le.invalid_union,unionErrors:o}),Xt}if(t.common.async)return Promise.all(r.map(async i=>{const o={...t,common:{...t.common,issues:[]},parent:null};return{result:await i._parseAsync({data:t.data,path:t.path,parent:o}),ctx:o}})).then(s);{let i;const o=[];for(const l of r){const c={...t,common:{...t.common,issues:[]},parent:null},u=l._parseSync({data:t.data,path:t.path,parent:c});if(u.status==="valid")return u;u.status==="dirty"&&!i&&(i={result:u,ctx:c}),c.common.issues.length&&o.push(c.common.issues)}if(i)return t.common.issues.push(...i.ctx.common.issues),i.result;const a=o.map(l=>new hu(l));return Qe(t,{code:Le.invalid_union,unionErrors:a}),Xt}}get options(){return this._def.options}}L6.create=(n,e)=>new L6({options:n,typeName:Jt.ZodUnion,...xn(e)});function zC(n,e){const t=Yd(n),r=Yd(e);if(n===e)return{valid:!0,data:n};if(t===ct.object&&r===ct.object){const s=Jn.objectKeys(e),i=Jn.objectKeys(n).filter(a=>s.indexOf(a)!==-1),o={...n,...e};for(const a of i){const l=zC(n[a],e[a]);if(!l.valid)return{valid:!1};o[a]=l.data}return{valid:!0,data:o}}else if(t===ct.array&&r===ct.array){if(n.length!==e.length)return{valid:!1};const s=[];for(let i=0;i<n.length;i++){const o=n[i],a=e[i],l=zC(o,a);if(!l.valid)return{valid:!1};s.push(l.data)}return{valid:!0,data:s}}else return t===ct.date&&r===ct.date&&+n==+e?{valid:!0,data:n}:{valid:!1}}class F6 extends qn{_parse(e){const{status:t,ctx:r}=this._processInputParams(e),s=(i,o)=>{if(TL(i)||TL(o))return Xt;const a=zC(i.value,o.value);return a.valid?((AL(i)||AL(o))&&t.dirty(),{status:t.value,value:a.data}):(Qe(r,{code:Le.invalid_intersection_types}),Xt)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([i,o])=>s(i,o)):s(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}}F6.create=(n,e,t)=>new F6({left:n,right:e,typeName:Jt.ZodIntersection,...xn(t)});class wp extends qn{_parse(e){const{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==ct.array)return Qe(r,{code:Le.invalid_type,expected:ct.array,received:r.parsedType}),Xt;if(r.data.length<this._def.items.length)return Qe(r,{code:Le.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),Xt;!this._def.rest&&r.data.length>this._def.items.length&&(Qe(r,{code:Le.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());const i=[...r.data].map((o,a)=>{const l=this._def.items[a]||this._def.rest;return l?l._parse(new Zd(r,o,r.path,a)):null}).filter(o=>!!o);return r.common.async?Promise.all(i).then(o=>_o.mergeArray(t,o)):_o.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new wp({...this._def,rest:e})}}wp.create=(n,e)=>{if(!Array.isArray(n))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new wp({items:n,typeName:Jt.ZodTuple,rest:null,...xn(e)})};class FL extends qn{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==ct.map)return Qe(r,{code:Le.invalid_type,expected:ct.map,received:r.parsedType}),Xt;const s=this._def.keyType,i=this._def.valueType,o=[...r.data.entries()].map(([a,l],c)=>({key:s._parse(new Zd(r,a,r.path,[c,"key"])),value:i._parse(new Zd(r,l,r.path,[c,"value"]))}));if(r.common.async){const a=new Map;return Promise.resolve().then(async()=>{for(const l of o){const c=await l.key,u=await l.value;if(c.status==="aborted"||u.status==="aborted")return Xt;(c.status==="dirty"||u.status==="dirty")&&t.dirty(),a.set(c.value,u.value)}return{status:t.value,value:a}})}else{const a=new Map;for(const l of o){const c=l.key,u=l.value;if(c.status==="aborted"||u.status==="aborted")return Xt;(c.status==="dirty"||u.status==="dirty")&&t.dirty(),a.set(c.value,u.value)}return{status:t.value,value:a}}}}FL.create=(n,e,t)=>new FL({valueType:e,keyType:n,typeName:Jt.ZodMap,...xn(t)});class bb extends qn{_parse(e){const{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==ct.set)return Qe(r,{code:Le.invalid_type,expected:ct.set,received:r.parsedType}),Xt;const s=this._def;s.minSize!==null&&r.data.size<s.minSize.value&&(Qe(r,{code:Le.too_small,minimum:s.minSize.value,type:"set",inclusive:!0,exact:!1,message:s.minSize.message}),t.dirty()),s.maxSize!==null&&r.data.size>s.maxSize.value&&(Qe(r,{code:Le.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),t.dirty());const i=this._def.valueType;function o(l){const c=new Set;for(const u of l){if(u.status==="aborted")return Xt;u.status==="dirty"&&t.dirty(),c.add(u.value)}return{status:t.value,value:c}}const a=[...r.data.values()].map((l,c)=>i._parse(new Zd(r,l,r.path,c)));return r.common.async?Promise.all(a).then(l=>o(l)):o(a)}min(e,t){return new bb({...this._def,minSize:{value:e,message:dt.toString(t)}})}max(e,t){return new bb({...this._def,maxSize:{value:e,message:dt.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}bb.create=(n,e)=>new bb({valueType:n,minSize:null,maxSize:null,typeName:Jt.ZodSet,...xn(e)});class jL extends qn{get schema(){return this._def.getter()}_parse(e){const{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}}jL.create=(n,e)=>new jL({getter:n,typeName:Jt.ZodLazy,...xn(e)});class BL extends qn{_parse(e){if(e.data!==this._def.value){const t=this._getOrReturnCtx(e);return Qe(t,{received:t.data,code:Le.invalid_literal,expected:this._def.value}),Xt}return{status:"valid",value:e.data}}get value(){return this._def.value}}BL.create=(n,e)=>new BL({value:n,typeName:Jt.ZodLiteral,...xn(e)});function VL(n,e){return new mg({values:n,typeName:Jt.ZodEnum,...xn(e)})}class mg extends qn{_parse(e){if(typeof e.data!="string"){const t=this._getOrReturnCtx(e),r=this._def.values;return Qe(t,{expected:Jn.joinValues(r),received:t.parsedType,code:Le.invalid_type}),Xt}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){const t=this._getOrReturnCtx(e),r=this._def.values;return Qe(t,{received:t.data,code:Le.invalid_enum_value,options:r}),Xt}return ha(e.data)}get options(){return this._def.values}get enum(){const e={};for(const t of this._def.values)e[t]=t;return e}get Values(){const e={};for(const t of this._def.values)e[t]=t;return e}get Enum(){const e={};for(const t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return mg.create(e,{...this._def,...t})}exclude(e,t=this._def){return mg.create(this.options.filter(r=>!e.includes(r)),{...this._def,...t})}}mg.create=VL;class zL extends qn{_parse(e){const t=Jn.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==ct.string&&r.parsedType!==ct.number){const s=Jn.objectValues(t);return Qe(r,{expected:Jn.joinValues(s),received:r.parsedType,code:Le.invalid_type}),Xt}if(this._cache||(this._cache=new Set(Jn.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){const s=Jn.objectValues(t);return Qe(r,{received:r.data,code:Le.invalid_enum_value,options:s}),Xt}return ha(e.data)}get enum(){return this._def.values}}zL.create=(n,e)=>new zL({values:n,typeName:Jt.ZodNativeEnum,...xn(e)});class j6 extends qn{unwrap(){return this._def.type}_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==ct.promise&&t.common.async===!1)return Qe(t,{code:Le.invalid_type,expected:ct.promise,received:t.parsedType}),Xt;const r=t.parsedType===ct.promise?t.data:Promise.resolve(t.data);return ha(r.then(s=>this._def.type.parseAsync(s,{path:t.path,errorMap:t.common.contextualErrorMap})))}}j6.create=(n,e)=>new j6({type:n,typeName:Jt.ZodPromise,...xn(e)});class gg extends qn{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===Jt.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){const{status:t,ctx:r}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{Qe(r,o),o.fatal?t.abort():t.dirty()},get path(){return r.path}};if(i.addIssue=i.addIssue.bind(i),s.type==="preprocess"){const o=s.transform(r.data,i);if(r.common.async)return Promise.resolve(o).then(async a=>{if(t.value==="aborted")return Xt;const l=await this._def.schema._parseAsync({data:a,path:r.path,parent:r});return l.status==="aborted"?Xt:l.status==="dirty"||t.value==="dirty"?gb(l.value):l});{if(t.value==="aborted")return Xt;const a=this._def.schema._parseSync({data:o,path:r.path,parent:r});return a.status==="aborted"?Xt:a.status==="dirty"||t.value==="dirty"?gb(a.value):a}}if(s.type==="refinement"){const o=a=>{const l=s.refinement(a,i);if(r.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(r.common.async===!1){const a=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?Xt:(a.status==="dirty"&&t.dirty(),o(a.value),{status:t.value,value:a.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(a=>a.status==="aborted"?Xt:(a.status==="dirty"&&t.dirty(),o(a.value).then(()=>({status:t.value,value:a.value}))))}if(s.type==="transform")if(r.common.async===!1){const o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!fg(o))return Xt;const a=s.transform(o.value,i);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>fg(o)?Promise.resolve(s.transform(o.value,i)).then(a=>({status:t.value,value:a})):Xt);Jn.assertNever(s)}}gg.create=(n,e,t)=>new gg({schema:n,typeName:Jt.ZodEffects,effect:e,...xn(t)}),gg.createWithPreprocess=(n,e,t)=>new gg({schema:e,effect:{type:"preprocess",transform:n},typeName:Jt.ZodEffects,...xn(t)});class Qd extends qn{_parse(e){return this._getType(e)===ct.undefined?ha(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}Qd.create=(n,e)=>new Qd({innerType:n,typeName:Jt.ZodOptional,...xn(e)});class yg extends qn{_parse(e){return this._getType(e)===ct.null?ha(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}yg.create=(n,e)=>new yg({innerType:n,typeName:Jt.ZodNullable,...xn(e)});class HC extends qn{_parse(e){const{ctx:t}=this._processInputParams(e);let r=t.data;return t.parsedType===ct.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:t.path,parent:t})}removeDefault(){return this._def.innerType}}HC.create=(n,e)=>new HC({innerType:n,typeName:Jt.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...xn(e)});class qC extends qn{_parse(e){const{ctx:t}=this._processInputParams(e),r={...t,common:{...t.common,issues:[]}},s=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return R6(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new hu(r.common.issues)},input:r.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new hu(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}qC.create=(n,e)=>new qC({innerType:n,typeName:Jt.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...xn(e)});class HL extends qn{_parse(e){if(this._getType(e)!==ct.nan){const r=this._getOrReturnCtx(e);return Qe(r,{code:Le.invalid_type,expected:ct.nan,received:r.parsedType}),Xt}return{status:"valid",value:e.data}}}HL.create=n=>new HL({typeName:Jt.ZodNaN,...xn(n)});class pge extends qn{_parse(e){const{ctx:t}=this._processInputParams(e),r=t.data;return this._def.type._parse({data:r,path:t.path,parent:t})}unwrap(){return this._def.type}}class UC extends qn{_parse(e){const{status:t,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{const i=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?Xt:i.status==="dirty"?(t.dirty(),gb(i.value)):this._def.out._parseAsync({data:i.value,path:r.path,parent:r})})();{const s=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?Xt:s.status==="dirty"?(t.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:r.path,parent:r})}}static create(e,t){return new UC({in:e,out:t,typeName:Jt.ZodPipeline})}}class WC extends qn{_parse(e){const t=this._def.innerType._parse(e),r=s=>(fg(s)&&(s.value=Object.freeze(s.value)),s);return R6(t)?t.then(s=>r(s)):r(t)}unwrap(){return this._def.innerType}}WC.create=(n,e)=>new WC({innerType:n,typeName:Jt.ZodReadonly,...xn(e)});var Jt;(function(n){n.ZodString="ZodString",n.ZodNumber="ZodNumber",n.ZodNaN="ZodNaN",n.ZodBigInt="ZodBigInt",n.ZodBoolean="ZodBoolean",n.ZodDate="ZodDate",n.ZodSymbol="ZodSymbol",n.ZodUndefined="ZodUndefined",n.ZodNull="ZodNull",n.ZodAny="ZodAny",n.ZodUnknown="ZodUnknown",n.ZodNever="ZodNever",n.ZodVoid="ZodVoid",n.ZodArray="ZodArray",n.ZodObject="ZodObject",n.ZodUnion="ZodUnion",n.ZodDiscriminatedUnion="ZodDiscriminatedUnion",n.ZodIntersection="ZodIntersection",n.ZodTuple="ZodTuple",n.ZodRecord="ZodRecord",n.ZodMap="ZodMap",n.ZodSet="ZodSet",n.ZodFunction="ZodFunction",n.ZodLazy="ZodLazy",n.ZodLiteral="ZodLiteral",n.ZodEnum="ZodEnum",n.ZodEffects="ZodEffects",n.ZodNativeEnum="ZodNativeEnum",n.ZodOptional="ZodOptional",n.ZodNullable="ZodNullable",n.ZodDefault="ZodDefault",n.ZodCatch="ZodCatch",n.ZodPromise="ZodPromise",n.ZodBranded="ZodBranded",n.ZodPipeline="ZodPipeline",n.ZodReadonly="ZodReadonly"})(Jt||(Jt={}));const wb=Xd.create,qL=VC.create;Jd.create,Gl.create;const UL=ps.create;L6.create,F6.create,wp.create,mg.create,j6.create,Qd.create,yg.create;const mge=wb().min(1,"Tag cannot be empty").max(50,"Tag must be less than 50 characters").regex(/^[a-zA-Z0-9_]+$/,"Tag can only contain letters, numbers, and underscores");function gge(n){if(!n)return[{type:"text",content:""}];const e=/#([a-zA-Z0-9_]+)/g;return n.split(e).map((r,s)=>{if(s%2===0)return{type:"text",content:r};try{return mge.parse(r),{type:"hashtag",content:r}}catch{return{type:"text",content:`#${r}`}}})}const yge=({children:n,className:e="",onTagClick:t})=>{const r=gp.useNavigate(),s=o=>{t?t(o):r(`/tags/${o}`)},i=gge(n);return b.jsx("span",{className:e,children:i.map((o,a)=>o.type==="hashtag"?b.jsxs("button",{onClick:l=>{l.preventDefault(),l.stopPropagation(),s(o.content)},className:"text-primary hover:text-primary/80 font-medium hover:underline cursor-pointer transition-colors",children:["#",o.content]},`tag-${a}`):b.jsx("span",{children:o.content},`text-${a}`))})};var WL={exports:{}};(function(n){var e=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT <https://opensource.org/licenses/MIT> + * @author Lea Verou <https://lea.verou.me> + * @namespace + * @public + */var t=function(r){var s=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,i=0,o={},a={manual:r.Prism&&r.Prism.manual,disableWorkerMessageHandler:r.Prism&&r.Prism.disableWorkerMessageHandler,util:{encode:function x(S){return S instanceof l?new l(S.type,x(S.content),S.alias):Array.isArray(S)?S.map(x):S.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(x){return Object.prototype.toString.call(x).slice(8,-1)},objId:function(x){return x.__id||Object.defineProperty(x,"__id",{value:++i}),x.__id},clone:function x(S,_){_=_||{};var A,T;switch(a.util.type(S)){case"Object":if(T=a.util.objId(S),_[T])return _[T];A={},_[T]=A;for(var O in S)S.hasOwnProperty(O)&&(A[O]=x(S[O],_));return A;case"Array":return T=a.util.objId(S),_[T]?_[T]:(A=[],_[T]=A,S.forEach(function(I,R){A[R]=x(I,_)}),A);default:return S}},getLanguage:function(x){for(;x;){var S=s.exec(x.className);if(S)return S[1].toLowerCase();x=x.parentElement}return"none"},setLanguage:function(x,S){x.className=x.className.replace(RegExp(s,"gi"),""),x.classList.add("language-"+S)},currentScript:function(){if(typeof document>"u")return null;if(document.currentScript&&document.currentScript.tagName==="SCRIPT")return document.currentScript;try{throw new Error}catch(A){var x=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(A.stack)||[])[1];if(x){var S=document.getElementsByTagName("script");for(var _ in S)if(S[_].src==x)return S[_]}return null}},isActive:function(x,S,_){for(var A="no-"+S;x;){var T=x.classList;if(T.contains(S))return!0;if(T.contains(A))return!1;x=x.parentElement}return!!_}},languages:{plain:o,plaintext:o,text:o,txt:o,extend:function(x,S){var _=a.util.clone(a.languages[x]);for(var A in S)_[A]=S[A];return _},insertBefore:function(x,S,_,A){A=A||a.languages;var T=A[x],O={};for(var I in T)if(T.hasOwnProperty(I)){if(I==S)for(var R in _)_.hasOwnProperty(R)&&(O[R]=_[R]);_.hasOwnProperty(I)||(O[I]=T[I])}var D=A[x];return A[x]=O,a.languages.DFS(a.languages,function(W,H){H===D&&W!=x&&(this[W]=O)}),O},DFS:function x(S,_,A,T){T=T||{};var O=a.util.objId;for(var I in S)if(S.hasOwnProperty(I)){_.call(S,I,S[I],A||I);var R=S[I],D=a.util.type(R);D==="Object"&&!T[O(R)]?(T[O(R)]=!0,x(R,_,null,T)):D==="Array"&&!T[O(R)]&&(T[O(R)]=!0,x(R,_,I,T))}}},plugins:{},highlightAll:function(x,S){a.highlightAllUnder(document,x,S)},highlightAllUnder:function(x,S,_){var A={callback:_,container:x,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};a.hooks.run("before-highlightall",A),A.elements=Array.prototype.slice.apply(A.container.querySelectorAll(A.selector)),a.hooks.run("before-all-elements-highlight",A);for(var T=0,O;O=A.elements[T++];)a.highlightElement(O,S===!0,A.callback)},highlightElement:function(x,S,_){var A=a.util.getLanguage(x),T=a.languages[A];a.util.setLanguage(x,A);var O=x.parentElement;O&&O.nodeName.toLowerCase()==="pre"&&a.util.setLanguage(O,A);var I=x.textContent,R={element:x,language:A,grammar:T,code:I};function D(H){R.highlightedCode=H,a.hooks.run("before-insert",R),R.element.innerHTML=R.highlightedCode,a.hooks.run("after-highlight",R),a.hooks.run("complete",R),_&&_.call(R.element)}if(a.hooks.run("before-sanity-check",R),O=R.element.parentElement,O&&O.nodeName.toLowerCase()==="pre"&&!O.hasAttribute("tabindex")&&O.setAttribute("tabindex","0"),!R.code){a.hooks.run("complete",R),_&&_.call(R.element);return}if(a.hooks.run("before-highlight",R),!R.grammar){D(a.util.encode(R.code));return}if(S&&r.Worker){var W=new Worker(a.filename);W.onmessage=function(H){D(H.data)},W.postMessage(JSON.stringify({language:R.language,code:R.code,immediateClose:!0}))}else D(a.highlight(R.code,R.grammar,R.language))},highlight:function(x,S,_){var A={code:x,grammar:S,language:_};if(a.hooks.run("before-tokenize",A),!A.grammar)throw new Error('The language "'+A.language+'" has no grammar.');return A.tokens=a.tokenize(A.code,A.grammar),a.hooks.run("after-tokenize",A),l.stringify(a.util.encode(A.tokens),A.language)},tokenize:function(x,S){var _=S.rest;if(_){for(var A in _)S[A]=_[A];delete S.rest}var T=new d;return f(T,T.head,x),u(x,T,S,T.head,0),m(T)},hooks:{all:{},add:function(x,S){var _=a.hooks.all;_[x]=_[x]||[],_[x].push(S)},run:function(x,S){var _=a.hooks.all[x];if(!(!_||!_.length))for(var A=0,T;T=_[A++];)T(S)}},Token:l};r.Prism=a;function l(x,S,_,A){this.type=x,this.content=S,this.alias=_,this.length=(A||"").length|0}l.stringify=function x(S,_){if(typeof S=="string")return S;if(Array.isArray(S)){var A="";return S.forEach(function(D){A+=x(D,_)}),A}var T={type:S.type,content:x(S.content,_),tag:"span",classes:["token",S.type],attributes:{},language:_},O=S.alias;O&&(Array.isArray(O)?Array.prototype.push.apply(T.classes,O):T.classes.push(O)),a.hooks.run("wrap",T);var I="";for(var R in T.attributes)I+=" "+R+'="'+(T.attributes[R]||"").replace(/"/g,""")+'"';return"<"+T.tag+' class="'+T.classes.join(" ")+'"'+I+">"+T.content+"</"+T.tag+">"};function c(x,S,_,A){x.lastIndex=S;var T=x.exec(_);if(T&&A&&T[1]){var O=T[1].length;T.index+=O,T[0]=T[0].slice(O)}return T}function u(x,S,_,A,T,O){for(var I in _)if(!(!_.hasOwnProperty(I)||!_[I])){var R=_[I];R=Array.isArray(R)?R:[R];for(var D=0;D<R.length;++D){if(O&&O.cause==I+","+D)return;var W=R[D],H=W.inside,re=!!W.lookbehind,ae=!!W.greedy,de=W.alias;if(ae&&!W.pattern.global){var le=W.pattern.toString().match(/[imsuy]*$/)[0];W.pattern=RegExp(W.pattern.source,le+"g")}for(var X=W.pattern||W,se=A.next,J=T;se!==S.tail&&!(O&&J>=O.reach);J+=se.value.length,se=se.next){var $=se.value;if(S.length>x.length)return;if(!($ instanceof l)){var ve=1,Pe;if(ae){if(Pe=c(X,J,x,re),!Pe||Pe.index>=x.length)break;var Ye=Pe.index,q=Pe.index+Pe[0].length,Xe=J;for(Xe+=se.value.length;Ye>=Xe;)se=se.next,Xe+=se.value.length;if(Xe-=se.value.length,J=Xe,se.value instanceof l)continue;for(var qe=se;qe!==S.tail&&(Xe<q||typeof qe.value=="string");qe=qe.next)ve++,Xe+=qe.value.length;ve--,$=x.slice(J,Xe),Pe.index-=J}else if(Pe=c(X,0,$,re),!Pe)continue;var Ye=Pe.index,it=Pe[0],We=$.slice(0,Ye),ot=$.slice(Ye+it.length),ge=J+$.length;O&&ge>O.reach&&(O.reach=ge);var Ie=se.prev;We&&(Ie=f(S,Ie,We),J+=We.length),p(S,Ie,ve);var pt=new l(I,H?a.tokenize(it,H):it,de,it);if(se=f(S,Ie,pt),ot&&f(S,se,ot),ve>1){var j={cause:I+","+D,reach:ge};u(x,S,_,se.prev,J,j),O&&j.reach>O.reach&&(O.reach=j.reach)}}}}}}function d(){var x={value:null,prev:null,next:null},S={value:null,prev:x,next:null};x.next=S,this.head=x,this.tail=S,this.length=0}function f(x,S,_){var A=S.next,T={value:_,prev:S,next:A};return S.next=T,A.prev=T,x.length++,T}function p(x,S,_){for(var A=S.next,T=0;T<_&&A!==x.tail;T++)A=A.next;S.next=A,A.prev=S,x.length-=T}function m(x){for(var S=[],_=x.head.next;_!==x.tail;)S.push(_.value),_=_.next;return S}if(!r.document)return r.addEventListener&&(a.disableWorkerMessageHandler||r.addEventListener("message",function(x){var S=JSON.parse(x.data),_=S.language,A=S.code,T=S.immediateClose;r.postMessage(a.highlight(A,a.languages[_],_)),T&&r.close()},!1)),a;var y=a.util.currentScript();y&&(a.filename=y.src,y.hasAttribute("data-manual")&&(a.manual=!0));function w(){a.manual||a.highlightAll()}if(!a.manual){var k=document.readyState;k==="loading"||k==="interactive"&&y&&y.defer?document.addEventListener("DOMContentLoaded",w):window.requestAnimationFrame?window.requestAnimationFrame(w):window.setTimeout(w,16)}return a}(e);n.exports&&(n.exports=t),typeof D$<"u"&&(D$.Prism=t),t.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},t.languages.markup.tag.inside["attr-value"].inside.entity=t.languages.markup.entity,t.languages.markup.doctype.inside["internal-subset"].inside=t.languages.markup,t.hooks.add("wrap",function(r){r.type==="entity"&&(r.attributes.title=r.content.replace(/&/,"&"))}),Object.defineProperty(t.languages.markup.tag,"addInlined",{value:function(s,i){var o={};o["language-"+i]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:t.languages[i]},o.cdata=/^<!\[CDATA\[|\]\]>$/i;var a={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:o}};a["language-"+i]={pattern:/[\s\S]+/,inside:t.languages[i]};var l={};l[s]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){return s}),"i"),lookbehind:!0,greedy:!0,inside:a},t.languages.insertBefore("markup","cdata",l)}}),Object.defineProperty(t.languages.markup.tag,"addAttribute",{value:function(r,s){t.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+r+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[s,"language-"+s],inside:t.languages[s]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),t.languages.html=t.languages.markup,t.languages.mathml=t.languages.markup,t.languages.svg=t.languages.markup,t.languages.xml=t.languages.extend("markup",{}),t.languages.ssml=t.languages.xml,t.languages.atom=t.languages.xml,t.languages.rss=t.languages.xml,function(r){var s=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;r.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+s.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+s.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+s.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+s.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:s,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},r.languages.css.atrule.inside.rest=r.languages.css;var i=r.languages.markup;i&&(i.tag.addInlined("style","css"),i.tag.addAttribute("style","css"))}(t),t.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},t.languages.javascript=t.languages.extend("clike",{"class-name":[t.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),t.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,t.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:t.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:t.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:t.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:t.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:t.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),t.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:t.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),t.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),t.languages.markup&&(t.languages.markup.tag.addInlined("script","javascript"),t.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),t.languages.js=t.languages.javascript,function(){if(typeof t>"u"||typeof document>"u")return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var r="Loading…",s=function(y,w){return"✖ Error "+y+" while fetching file: "+w},i="✖ Error: File does not exist or is empty",o={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},a="data-src-status",l="loading",c="loaded",u="failed",d="pre[data-src]:not(["+a+'="'+c+'"]):not(['+a+'="'+l+'"])';function f(y,w,k){var x=new XMLHttpRequest;x.open("GET",y,!0),x.onreadystatechange=function(){x.readyState==4&&(x.status<400&&x.responseText?w(x.responseText):x.status>=400?k(s(x.status,x.statusText)):k(i))},x.send(null)}function p(y){var w=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(y||"");if(w){var k=Number(w[1]),x=w[2],S=w[3];return x?S?[k,Number(S)]:[k,void 0]:[k,k]}}t.hooks.add("before-highlightall",function(y){y.selector+=", "+d}),t.hooks.add("before-sanity-check",function(y){var w=y.element;if(w.matches(d)){y.code="",w.setAttribute(a,l);var k=w.appendChild(document.createElement("CODE"));k.textContent=r;var x=w.getAttribute("data-src"),S=y.language;if(S==="none"){var _=(/\.(\w+)$/.exec(x)||[,"none"])[1];S=o[_]||_}t.util.setLanguage(k,S),t.util.setLanguage(w,S);var A=t.plugins.autoloader;A&&A.loadLanguages(S),f(x,function(T){w.setAttribute(a,c);var O=p(w.getAttribute("data-range"));if(O){var I=T.split(/\r\n?|\n/g),R=O[0],D=O[1]==null?I.length:O[1];R<0&&(R+=I.length),R=Math.max(0,Math.min(R-1,I.length)),D<0&&(D+=I.length),D=Math.max(0,Math.min(D,I.length)),T=I.slice(R,D).join(` +`),w.hasAttribute("data-start")||w.setAttribute("data-start",String(R+1))}k.textContent=T,t.highlightElement(k)},function(T){w.setAttribute(a,u),k.textContent=T})}}),t.plugins.fileHighlight={highlight:function(w){for(var k=(w||document).querySelectorAll(d),x=0,S;S=k[x++];)t.highlightElement(S)}};var m=!1;t.fileHighlight=function(){m||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),m=!0),t.plugins.fileHighlight.highlight.apply(this,arguments)}}()})(WL);var vge=WL.exports;const bge=R$(vge);(function(n){n.languages.typescript=n.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),n.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete n.languages.typescript.parameter,delete n.languages.typescript["literal-property"];var e=n.languages.extend("typescript",{});delete e["class-name"],n.languages.typescript["class-name"].inside=e,n.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e}}}}),n.languages.ts=n.languages.typescript})(Prism),Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),Prism.languages.js=Prism.languages.javascript,Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json,function(n){var e="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",t={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:t,environment:{pattern:RegExp("\\$"+e),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+e),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};n.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+e),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:t}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+e),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},t.inside=n.languages.bash;for(var s=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],i=r.variable[1].inside,o=0;o<s.length;o++)i[s[o]]=n.languages.bash[s[o]];n.languages.sh=n.languages.bash,n.languages.shell=n.languages.bash}(Prism),function(n){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;n.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+e.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},n.languages.css.atrule.inside.rest=n.languages.css;var t=n.languages.markup;t&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(Prism),Prism.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(n){n.type==="entity"&&(n.attributes.title=n.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(e,t){var r={};r["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:Prism.languages[t]},r.cdata=/^<!\[CDATA\[|\]\]>$/i;var s={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:r}};s["language-"+t]={pattern:/[\s\S]+/,inside:Prism.languages[t]};var i={};i[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){return e}),"i"),lookbehind:!0,greedy:!0,inside:s},Prism.languages.insertBefore("markup","cdata",i)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(n,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+n+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml;const xp=U.memo(({content:n,className:e=""})=>{const t=U.useRef(null),r=U.useMemo(()=>{const i=/#[a-zA-Z0-9_]+/.test(n),o=/\[.*?\]\(.*?\)/.test(n),a=/(\*\*|__|##?|###?|####?|#####?|######?|\*|\n\*|\n-|\n\d+\.)/.test(n);return{hasHashtags:i,hasMarkdownLinks:o,hasMarkdownSyntax:a}},[n]);if(r.hasHashtags&&!r.hasMarkdownLinks&&!r.hasMarkdownSyntax)return b.jsx("div",{className:`prose prose-sm max-w-none dark:prose-invert ${e}`,children:b.jsx(yge,{children:n})});const s=U.useMemo(()=>{const i=n.replace(/ /g," ").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&").replace(/"/g,'"').replace(/'/g,"'");ir.setOptions({breaks:!0,gfm:!0});const o=ir.parse(i),a=c=>{try{let u=c.replace(/^https?:\/\//,"");if(u=u.replace(/^www\./,""),u.length>40){const d=u.split("/"),f=d[0],p=d.slice(1).join("/");p.length>20?u=`${f}/${p.substring(0,15)}...`:u=`${f}/${p}`}return u}catch{return c}},l=o.replace(/<a href="([^"]*)"([^>]*)>([^<]*)<\/a>/g,(c,u,d,f)=>{const m=f===u||f.replace(/^https?:\/\//,"")===u.replace(/^https?:\/\//,"")?a(u):f;return`<a href="${u}"${d} target="_blank" rel="noopener noreferrer" class="text-primary hover:text-primary/80 underline hover:no-underline transition-colors">${m}</a>`});return D6.sanitize(l,{ADD_ATTR:["target","rel","class"]})},[n]);return U.useEffect(()=>{t.current&&bge.highlightAllUnder(t.current)},[s]),b.jsx("div",{ref:t,className:`prose prose-sm max-w-none dark:prose-invert ${e}`,dangerouslySetInnerHTML:{__html:s}})});xp.displayName="MarkdownRenderer";function Dt(n,e,{checkForDefaultPrevented:t=!0}={}){return function(s){if(n==null||n(s),t===!1||!s.defaultPrevented)return e==null?void 0:e(s)}}function wge(n,e){const t=g.createContext(e),r=i=>{const{children:o,...a}=i,l=g.useMemo(()=>a,Object.values(a));return b.jsx(t.Provider,{value:l,children:o})};r.displayName=n+"Provider";function s(i){const o=g.useContext(t);if(o)return o;if(e!==void 0)return e;throw new Error(`\`${i}\` must be used within \`${n}\``)}return[r,s]}function fa(n,e=[]){let t=[];function r(i,o){const a=g.createContext(o),l=t.length;t=[...t,o];const c=d=>{var k;const{scope:f,children:p,...m}=d,y=((k=f==null?void 0:f[n])==null?void 0:k[l])||a,w=g.useMemo(()=>m,Object.values(m));return b.jsx(y.Provider,{value:w,children:p})};c.displayName=i+"Provider";function u(d,f){var y;const p=((y=f==null?void 0:f[n])==null?void 0:y[l])||a,m=g.useContext(p);if(m)return m;if(o!==void 0)return o;throw new Error(`\`${d}\` must be used within \`${i}\``)}return[c,u]}const s=()=>{const i=t.map(o=>g.createContext(o));return function(a){const l=(a==null?void 0:a[n])||i;return g.useMemo(()=>({[`__scope${n}`]:{...a,[n]:l}}),[a,l])}};return s.scopeName=n,[r,xge(s,...e)]}function xge(...n){const e=n[0];if(n.length===1)return e;const t=()=>{const r=n.map(s=>({useScope:s(),scopeName:s.scopeName}));return function(i){const o=r.reduce((a,{useScope:l,scopeName:c})=>{const d=l(i)[`__scope${c}`];return{...a,...d}},{});return g.useMemo(()=>({[`__scope${e.scopeName}`]:o}),[o])}};return t.scopeName=e.scopeName,t}var Ga=globalThis!=null&&globalThis.document?g.useLayoutEffect:()=>{},kge=g[" useId ".trim().toString()]||(()=>{}),Cge=0;function kp(n){const[e,t]=g.useState(kge());return Ga(()=>{t(r=>r??String(Cge++))},[n]),e?`radix-${e}`:""}var Sge=g[" useInsertionEffect ".trim().toString()]||Ga;function Cp({prop:n,defaultProp:e,onChange:t=()=>{},caller:r}){const[s,i,o]=Ege({defaultProp:e,onChange:t}),a=n!==void 0,l=a?n:s;{const u=g.useRef(n!==void 0);g.useEffect(()=>{const d=u.current;d!==a&&console.warn(`${r} is changing from ${d?"controlled":"uncontrolled"} to ${a?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),u.current=a},[a,r])}const c=g.useCallback(u=>{var d;if(a){const f=_ge(u)?u(n):u;f!==n&&((d=o.current)==null||d.call(o,f))}else i(u)},[a,n,i,o]);return[l,c]}function Ege({defaultProp:n,onChange:e}){const[t,r]=g.useState(n),s=g.useRef(t),i=g.useRef(e);return Sge(()=>{i.current=e},[e]),g.useEffect(()=>{var o;s.current!==t&&((o=i.current)==null||o.call(i,t),s.current=t)},[t,s]),[t,r,i]}function _ge(n){return typeof n=="function"}function Tge(n){const e=Age(n),t=g.forwardRef((r,s)=>{const{children:i,...o}=r,a=g.Children.toArray(i),l=a.find(Mge);if(l){const c=l.props.children,u=a.map(d=>d===l?g.Children.count(c)>1?g.Children.only(null):g.isValidElement(c)?c.props.children:null:d);return b.jsx(e,{...o,ref:s,children:g.isValidElement(c)?g.cloneElement(c,void 0,u):null})}return b.jsx(e,{...o,ref:s,children:i})});return t.displayName=`${n}.Slot`,t}function Age(n){const e=g.forwardRef((t,r)=>{const{children:s,...i}=t;if(g.isValidElement(s)){const o=Pge(s),a=Oge(i,s.props);return s.type!==g.Fragment&&(a.ref=r?Wd(r,o):o),g.cloneElement(s,a)}return g.Children.count(s)>1?g.Children.only(null):null});return e.displayName=`${n}.SlotClone`,e}var Nge=Symbol("radix.slottable");function Mge(n){return g.isValidElement(n)&&typeof n.type=="function"&&"__radixId"in n.type&&n.type.__radixId===Nge}function Oge(n,e){const t={...e};for(const r in e){const s=n[r],i=e[r];/^on[A-Z]/.test(r)?s&&i?t[r]=(...a)=>{const l=i(...a);return s(...a),l}:s&&(t[r]=s):r==="style"?t[r]={...s,...i}:r==="className"&&(t[r]=[s,i].filter(Boolean).join(" "))}return{...n,...t}}function Pge(n){var r,s;let e=(r=Object.getOwnPropertyDescriptor(n.props,"ref"))==null?void 0:r.get,t=e&&"isReactWarning"in e&&e.isReactWarning;return t?n.ref:(e=(s=Object.getOwnPropertyDescriptor(n,"ref"))==null?void 0:s.get,t=e&&"isReactWarning"in e&&e.isReactWarning,t?n.props.ref:n.props.ref||n.ref)}var Ige=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Un=Ige.reduce((n,e)=>{const t=Tge(`Primitive.${e}`),r=g.forwardRef((s,i)=>{const{asChild:o,...a}=s,l=o?t:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),b.jsx(l,{...a,ref:i})});return r.displayName=`Primitive.${e}`,{...n,[e]:r}},{});function GL(n,e){n&&I$.flushSync(()=>n.dispatchEvent(e))}function Kl(n){const e=g.useRef(n);return g.useEffect(()=>{e.current=n}),g.useMemo(()=>(...t)=>{var r;return(r=e.current)==null?void 0:r.call(e,...t)},[])}function Dge(n,e=globalThis==null?void 0:globalThis.document){const t=Kl(n);g.useEffect(()=>{const r=s=>{s.key==="Escape"&&t(s)};return e.addEventListener("keydown",r,{capture:!0}),()=>e.removeEventListener("keydown",r,{capture:!0})},[t,e])}var Rge="DismissableLayer",GC="dismissableLayer.update",$ge="dismissableLayer.pointerDownOutside",Lge="dismissableLayer.focusOutside",KL,YL=g.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),KC=g.forwardRef((n,e)=>{const{disableOutsidePointerEvents:t=!1,onEscapeKeyDown:r,onPointerDownOutside:s,onFocusOutside:i,onInteractOutside:o,onDismiss:a,...l}=n,c=g.useContext(YL),[u,d]=g.useState(null),f=(u==null?void 0:u.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,p]=g.useState({}),m=Tr(e,O=>d(O)),y=Array.from(c.layers),[w]=[...c.layersWithOutsidePointerEventsDisabled].slice(-1),k=y.indexOf(w),x=u?y.indexOf(u):-1,S=c.layersWithOutsidePointerEventsDisabled.size>0,_=x>=k,A=Bge(O=>{const I=O.target,R=[...c.branches].some(D=>D.contains(I));!_||R||(s==null||s(O),o==null||o(O),O.defaultPrevented||a==null||a())},f),T=Vge(O=>{const I=O.target;[...c.branches].some(D=>D.contains(I))||(i==null||i(O),o==null||o(O),O.defaultPrevented||a==null||a())},f);return Dge(O=>{x===c.layers.size-1&&(r==null||r(O),!O.defaultPrevented&&a&&(O.preventDefault(),a()))},f),g.useEffect(()=>{if(u)return t&&(c.layersWithOutsidePointerEventsDisabled.size===0&&(KL=f.body.style.pointerEvents,f.body.style.pointerEvents="none"),c.layersWithOutsidePointerEventsDisabled.add(u)),c.layers.add(u),ZL(),()=>{t&&c.layersWithOutsidePointerEventsDisabled.size===1&&(f.body.style.pointerEvents=KL)}},[u,f,t,c]),g.useEffect(()=>()=>{u&&(c.layers.delete(u),c.layersWithOutsidePointerEventsDisabled.delete(u),ZL())},[u,c]),g.useEffect(()=>{const O=()=>p({});return document.addEventListener(GC,O),()=>document.removeEventListener(GC,O)},[]),b.jsx(Un.div,{...l,ref:m,style:{pointerEvents:S?_?"auto":"none":void 0,...n.style},onFocusCapture:Dt(n.onFocusCapture,T.onFocusCapture),onBlurCapture:Dt(n.onBlurCapture,T.onBlurCapture),onPointerDownCapture:Dt(n.onPointerDownCapture,A.onPointerDownCapture)})});KC.displayName=Rge;var Fge="DismissableLayerBranch",jge=g.forwardRef((n,e)=>{const t=g.useContext(YL),r=g.useRef(null),s=Tr(e,r);return g.useEffect(()=>{const i=r.current;if(i)return t.branches.add(i),()=>{t.branches.delete(i)}},[t.branches]),b.jsx(Un.div,{...n,ref:s})});jge.displayName=Fge;function Bge(n,e=globalThis==null?void 0:globalThis.document){const t=Kl(n),r=g.useRef(!1),s=g.useRef(()=>{});return g.useEffect(()=>{const i=a=>{if(a.target&&!r.current){let l=function(){XL($ge,t,c,{discrete:!0})};const c={originalEvent:a};a.pointerType==="touch"?(e.removeEventListener("click",s.current),s.current=l,e.addEventListener("click",s.current,{once:!0})):l()}else e.removeEventListener("click",s.current);r.current=!1},o=window.setTimeout(()=>{e.addEventListener("pointerdown",i)},0);return()=>{window.clearTimeout(o),e.removeEventListener("pointerdown",i),e.removeEventListener("click",s.current)}},[e,t]),{onPointerDownCapture:()=>r.current=!0}}function Vge(n,e=globalThis==null?void 0:globalThis.document){const t=Kl(n),r=g.useRef(!1);return g.useEffect(()=>{const s=i=>{i.target&&!r.current&&XL(Lge,t,{originalEvent:i},{discrete:!1})};return e.addEventListener("focusin",s),()=>e.removeEventListener("focusin",s)},[e,t]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function ZL(){const n=new CustomEvent(GC);document.dispatchEvent(n)}function XL(n,e,t,{discrete:r}){const s=t.originalEvent.target,i=new CustomEvent(n,{bubbles:!1,cancelable:!0,detail:t});e&&s.addEventListener(n,e,{once:!0}),r?GL(s,i):s.dispatchEvent(i)}var YC="focusScope.autoFocusOnMount",ZC="focusScope.autoFocusOnUnmount",JL={bubbles:!1,cancelable:!0},zge="FocusScope",XC=g.forwardRef((n,e)=>{const{loop:t=!1,trapped:r=!1,onMountAutoFocus:s,onUnmountAutoFocus:i,...o}=n,[a,l]=g.useState(null),c=Kl(s),u=Kl(i),d=g.useRef(null),f=Tr(e,y=>l(y)),p=g.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;g.useEffect(()=>{if(r){let y=function(S){if(p.paused||!a)return;const _=S.target;a.contains(_)?d.current=_:eh(d.current,{select:!0})},w=function(S){if(p.paused||!a)return;const _=S.relatedTarget;_!==null&&(a.contains(_)||eh(d.current,{select:!0}))},k=function(S){if(document.activeElement===document.body)for(const A of S)A.removedNodes.length>0&&eh(a)};document.addEventListener("focusin",y),document.addEventListener("focusout",w);const x=new MutationObserver(k);return a&&x.observe(a,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",y),document.removeEventListener("focusout",w),x.disconnect()}}},[r,a,p.paused]),g.useEffect(()=>{if(a){tF.add(p);const y=document.activeElement;if(!a.contains(y)){const k=new CustomEvent(YC,JL);a.addEventListener(YC,c),a.dispatchEvent(k),k.defaultPrevented||(Hge(Kge(QL(a)),{select:!0}),document.activeElement===y&&eh(a))}return()=>{a.removeEventListener(YC,c),setTimeout(()=>{const k=new CustomEvent(ZC,JL);a.addEventListener(ZC,u),a.dispatchEvent(k),k.defaultPrevented||eh(y??document.body,{select:!0}),a.removeEventListener(ZC,u),tF.remove(p)},0)}}},[a,c,u,p]);const m=g.useCallback(y=>{if(!t&&!r||p.paused)return;const w=y.key==="Tab"&&!y.altKey&&!y.ctrlKey&&!y.metaKey,k=document.activeElement;if(w&&k){const x=y.currentTarget,[S,_]=qge(x);S&&_?!y.shiftKey&&k===_?(y.preventDefault(),t&&eh(S,{select:!0})):y.shiftKey&&k===S&&(y.preventDefault(),t&&eh(_,{select:!0})):k===x&&y.preventDefault()}},[t,r,p.paused]);return b.jsx(Un.div,{tabIndex:-1,...o,ref:f,onKeyDown:m})});XC.displayName=zge;function Hge(n,{select:e=!1}={}){const t=document.activeElement;for(const r of n)if(eh(r,{select:e}),document.activeElement!==t)return}function qge(n){const e=QL(n),t=eF(e,n),r=eF(e.reverse(),n);return[t,r]}function QL(n){const e=[],t=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const s=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||s?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;t.nextNode();)e.push(t.currentNode);return e}function eF(n,e){for(const t of n)if(!Uge(t,{upTo:e}))return t}function Uge(n,{upTo:e}){if(getComputedStyle(n).visibility==="hidden")return!0;for(;n;){if(e!==void 0&&n===e)return!1;if(getComputedStyle(n).display==="none")return!0;n=n.parentElement}return!1}function Wge(n){return n instanceof HTMLInputElement&&"select"in n}function eh(n,{select:e=!1}={}){if(n&&n.focus){const t=document.activeElement;n.focus({preventScroll:!0}),n!==t&&Wge(n)&&e&&n.select()}}var tF=Gge();function Gge(){let n=[];return{add(e){const t=n[0];e!==t&&(t==null||t.pause()),n=nF(n,e),n.unshift(e)},remove(e){var t;n=nF(n,e),(t=n[0])==null||t.resume()}}}function nF(n,e){const t=[...n],r=t.indexOf(e);return r!==-1&&t.splice(r,1),t}function Kge(n){return n.filter(e=>e.tagName!=="A")}var Yge="Portal",JC=g.forwardRef((n,e)=>{var a;const{container:t,...r}=n,[s,i]=g.useState(!1);Ga(()=>i(!0),[]);const o=t||s&&((a=globalThis==null?void 0:globalThis.document)==null?void 0:a.body);return o?Qv.createPortal(b.jsx(Un.div,{...r,ref:e}),o):null});JC.displayName=Yge;function Zge(n,e){return g.useReducer((t,r)=>e[t][r]??t,n)}var Ka=n=>{const{present:e,children:t}=n,r=Xge(e),s=typeof t=="function"?t({present:r.isPresent}):g.Children.only(t),i=Tr(r.ref,Jge(s));return typeof t=="function"||r.isPresent?g.cloneElement(s,{ref:i}):null};Ka.displayName="Presence";function Xge(n){const[e,t]=g.useState(),r=g.useRef(null),s=g.useRef(n),i=g.useRef("none"),o=n?"mounted":"unmounted",[a,l]=Zge(o,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return g.useEffect(()=>{const c=B6(r.current);i.current=a==="mounted"?c:"none"},[a]),Ga(()=>{const c=r.current,u=s.current;if(u!==n){const f=i.current,p=B6(c);n?l("MOUNT"):p==="none"||(c==null?void 0:c.display)==="none"?l("UNMOUNT"):l(u&&f!==p?"ANIMATION_OUT":"UNMOUNT"),s.current=n}},[n,l]),Ga(()=>{if(e){let c;const u=e.ownerDocument.defaultView??window,d=p=>{const y=B6(r.current).includes(CSS.escape(p.animationName));if(p.target===e&&y&&(l("ANIMATION_END"),!s.current)){const w=e.style.animationFillMode;e.style.animationFillMode="forwards",c=u.setTimeout(()=>{e.style.animationFillMode==="forwards"&&(e.style.animationFillMode=w)})}},f=p=>{p.target===e&&(i.current=B6(r.current))};return e.addEventListener("animationstart",f),e.addEventListener("animationcancel",d),e.addEventListener("animationend",d),()=>{u.clearTimeout(c),e.removeEventListener("animationstart",f),e.removeEventListener("animationcancel",d),e.removeEventListener("animationend",d)}}else l("ANIMATION_END")},[e,l]),{isPresent:["mounted","unmountSuspended"].includes(a),ref:g.useCallback(c=>{r.current=c?getComputedStyle(c):null,t(c)},[])}}function B6(n){return(n==null?void 0:n.animationName)||"none"}function Jge(n){var r,s;let e=(r=Object.getOwnPropertyDescriptor(n.props,"ref"))==null?void 0:r.get,t=e&&"isReactWarning"in e&&e.isReactWarning;return t?n.ref:(e=(s=Object.getOwnPropertyDescriptor(n,"ref"))==null?void 0:s.get,t=e&&"isReactWarning"in e&&e.isReactWarning,t?n.props.ref:n.props.ref||n.ref)}var QC=0;function rF(){g.useEffect(()=>{const n=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",n[0]??sF()),document.body.insertAdjacentElement("beforeend",n[1]??sF()),QC++,()=>{QC===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(e=>e.remove()),QC--}},[])}function sF(){const n=document.createElement("span");return n.setAttribute("data-radix-focus-guard",""),n.tabIndex=0,n.style.outline="none",n.style.opacity="0",n.style.position="fixed",n.style.pointerEvents="none",n}var Yl=function(){return Yl=Object.assign||function(e){for(var t,r=1,s=arguments.length;r<s;r++){t=arguments[r];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},Yl.apply(this,arguments)};function iF(n,e){var t={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,r=Object.getOwnPropertySymbols(n);s<r.length;s++)e.indexOf(r[s])<0&&Object.prototype.propertyIsEnumerable.call(n,r[s])&&(t[r[s]]=n[r[s]]);return t}function Qge(n,e,t){if(t||arguments.length===2)for(var r=0,s=e.length,i;r<s;r++)(i||!(r in e))&&(i||(i=Array.prototype.slice.call(e,0,r)),i[r]=e[r]);return n.concat(i||Array.prototype.slice.call(e))}typeof SuppressedError=="function"&&SuppressedError;var V6="right-scroll-bar-position",z6="width-before-scroll-bar",e1e="with-scroll-bars-hidden",t1e="--removed-body-scroll-bar-size";function eS(n,e){return typeof n=="function"?n(e):n&&(n.current=e),n}function n1e(n,e){var t=U.useState(function(){return{value:n,callback:e,facade:{get current(){return t.value},set current(r){var s=t.value;s!==r&&(t.value=r,t.callback(r,s))}}}})[0];return t.callback=e,t.facade}var r1e=typeof window<"u"?g.useLayoutEffect:g.useEffect,oF=new WeakMap;function s1e(n,e){var t=n1e(null,function(r){return n.forEach(function(s){return eS(s,r)})});return r1e(function(){var r=oF.get(t);if(r){var s=new Set(r),i=new Set(n),o=t.current;s.forEach(function(a){i.has(a)||eS(a,null)}),i.forEach(function(a){s.has(a)||eS(a,o)})}oF.set(t,n)},[n]),t}function i1e(n){return n}function o1e(n,e){e===void 0&&(e=i1e);var t=[],r=!1,s={read:function(){if(r)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return t.length?t[t.length-1]:n},useMedium:function(i){var o=e(i,r);return t.push(o),function(){t=t.filter(function(a){return a!==o})}},assignSyncMedium:function(i){for(r=!0;t.length;){var o=t;t=[],o.forEach(i)}t={push:function(a){return i(a)},filter:function(){return t}}},assignMedium:function(i){r=!0;var o=[];if(t.length){var a=t;t=[],a.forEach(i),o=t}var l=function(){var u=o;o=[],u.forEach(i)},c=function(){return Promise.resolve().then(l)};c(),t={push:function(u){o.push(u),c()},filter:function(u){return o=o.filter(u),t}}}};return s}function a1e(n){n===void 0&&(n={});var e=o1e(null);return e.options=Yl({async:!0,ssr:!1},n),e}var aF=function(n){var e=n.sideCar,t=iF(n,["sideCar"]);if(!e)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var r=e.read();if(!r)throw new Error("Sidecar medium not found");return g.createElement(r,Yl({},t))};aF.isSideCarExport=!0;function l1e(n,e){return n.useMedium(e),aF}var lF=a1e(),tS=function(){},H6=g.forwardRef(function(n,e){var t=g.useRef(null),r=g.useState({onScrollCapture:tS,onWheelCapture:tS,onTouchMoveCapture:tS}),s=r[0],i=r[1],o=n.forwardProps,a=n.children,l=n.className,c=n.removeScrollBar,u=n.enabled,d=n.shards,f=n.sideCar,p=n.noRelative,m=n.noIsolation,y=n.inert,w=n.allowPinchZoom,k=n.as,x=k===void 0?"div":k,S=n.gapMode,_=iF(n,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),A=f,T=s1e([t,e]),O=Yl(Yl({},_),s);return g.createElement(g.Fragment,null,u&&g.createElement(A,{sideCar:lF,removeScrollBar:c,shards:d,noRelative:p,noIsolation:m,inert:y,setCallbacks:i,allowPinchZoom:!!w,lockRef:t,gapMode:S}),o?g.cloneElement(g.Children.only(a),Yl(Yl({},O),{ref:T})):g.createElement(x,Yl({},O,{className:l,ref:T}),a))});H6.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},H6.classNames={fullWidth:z6,zeroRight:V6};var c1e=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function u1e(){if(!document)return null;var n=document.createElement("style");n.type="text/css";var e=c1e();return e&&n.setAttribute("nonce",e),n}function d1e(n,e){n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}function h1e(n){var e=document.head||document.getElementsByTagName("head")[0];e.appendChild(n)}var f1e=function(){var n=0,e=null;return{add:function(t){n==0&&(e=u1e())&&(d1e(e,t),h1e(e)),n++},remove:function(){n--,!n&&e&&(e.parentNode&&e.parentNode.removeChild(e),e=null)}}},p1e=function(){var n=f1e();return function(e,t){g.useEffect(function(){return n.add(e),function(){n.remove()}},[e&&t])}},cF=function(){var n=p1e(),e=function(t){var r=t.styles,s=t.dynamic;return n(r,s),null};return e},m1e={left:0,top:0,right:0,gap:0},nS=function(n){return parseInt(n||"",10)||0},g1e=function(n){var e=window.getComputedStyle(document.body),t=e[n==="padding"?"paddingLeft":"marginLeft"],r=e[n==="padding"?"paddingTop":"marginTop"],s=e[n==="padding"?"paddingRight":"marginRight"];return[nS(t),nS(r),nS(s)]},y1e=function(n){if(n===void 0&&(n="margin"),typeof window>"u")return m1e;var e=g1e(n),t=document.documentElement.clientWidth,r=window.innerWidth;return{left:e[0],top:e[1],right:e[2],gap:Math.max(0,r-t+e[2]-e[0])}},v1e=cF(),vg="data-scroll-locked",b1e=function(n,e,t,r){var s=n.left,i=n.top,o=n.right,a=n.gap;return t===void 0&&(t="margin"),` + .`.concat(e1e,` { + overflow: hidden `).concat(r,`; + padding-right: `).concat(a,"px ").concat(r,`; + } + body[`).concat(vg,`] { + overflow: hidden `).concat(r,`; + overscroll-behavior: contain; + `).concat([e&&"position: relative ".concat(r,";"),t==="margin"&&` + padding-left: `.concat(s,`px; + padding-top: `).concat(i,`px; + padding-right: `).concat(o,`px; + margin-left:0; + margin-top:0; + margin-right: `).concat(a,"px ").concat(r,`; + `),t==="padding"&&"padding-right: ".concat(a,"px ").concat(r,";")].filter(Boolean).join(""),` + } + + .`).concat(V6,` { + right: `).concat(a,"px ").concat(r,`; + } + + .`).concat(z6,` { + margin-right: `).concat(a,"px ").concat(r,`; + } + + .`).concat(V6," .").concat(V6,` { + right: 0 `).concat(r,`; + } + + .`).concat(z6," .").concat(z6,` { + margin-right: 0 `).concat(r,`; + } + + body[`).concat(vg,`] { + `).concat(t1e,": ").concat(a,`px; + } +`)},uF=function(){var n=parseInt(document.body.getAttribute(vg)||"0",10);return isFinite(n)?n:0},w1e=function(){g.useEffect(function(){return document.body.setAttribute(vg,(uF()+1).toString()),function(){var n=uF()-1;n<=0?document.body.removeAttribute(vg):document.body.setAttribute(vg,n.toString())}},[])},x1e=function(n){var e=n.noRelative,t=n.noImportant,r=n.gapMode,s=r===void 0?"margin":r;w1e();var i=g.useMemo(function(){return y1e(s)},[s]);return g.createElement(v1e,{styles:b1e(i,!e,s,t?"":"!important")})},rS=!1;if(typeof window<"u")try{var q6=Object.defineProperty({},"passive",{get:function(){return rS=!0,!0}});window.addEventListener("test",q6,q6),window.removeEventListener("test",q6,q6)}catch{rS=!1}var bg=rS?{passive:!1}:!1,k1e=function(n){return n.tagName==="TEXTAREA"},dF=function(n,e){if(!(n instanceof Element))return!1;var t=window.getComputedStyle(n);return t[e]!=="hidden"&&!(t.overflowY===t.overflowX&&!k1e(n)&&t[e]==="visible")},C1e=function(n){return dF(n,"overflowY")},S1e=function(n){return dF(n,"overflowX")},hF=function(n,e){var t=e.ownerDocument,r=e;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var s=fF(n,r);if(s){var i=pF(n,r),o=i[1],a=i[2];if(o>a)return!0}r=r.parentNode}while(r&&r!==t.body);return!1},E1e=function(n){var e=n.scrollTop,t=n.scrollHeight,r=n.clientHeight;return[e,t,r]},_1e=function(n){var e=n.scrollLeft,t=n.scrollWidth,r=n.clientWidth;return[e,t,r]},fF=function(n,e){return n==="v"?C1e(e):S1e(e)},pF=function(n,e){return n==="v"?E1e(e):_1e(e)},T1e=function(n,e){return n==="h"&&e==="rtl"?-1:1},A1e=function(n,e,t,r,s){var i=T1e(n,window.getComputedStyle(e).direction),o=i*r,a=t.target,l=e.contains(a),c=!1,u=o>0,d=0,f=0;do{if(!a)break;var p=pF(n,a),m=p[0],y=p[1],w=p[2],k=y-w-i*m;(m||k)&&fF(n,a)&&(d+=k,f+=m);var x=a.parentNode;a=x&&x.nodeType===Node.DOCUMENT_FRAGMENT_NODE?x.host:x}while(!l&&a!==document.body||l&&(e.contains(a)||e===a));return(u&&Math.abs(d)<1||!u&&Math.abs(f)<1)&&(c=!0),c},U6=function(n){return"changedTouches"in n?[n.changedTouches[0].clientX,n.changedTouches[0].clientY]:[0,0]},mF=function(n){return[n.deltaX,n.deltaY]},gF=function(n){return n&&"current"in n?n.current:n},N1e=function(n,e){return n[0]===e[0]&&n[1]===e[1]},M1e=function(n){return` + .block-interactivity-`.concat(n,` {pointer-events: none;} + .allow-interactivity-`).concat(n,` {pointer-events: all;} +`)},O1e=0,wg=[];function P1e(n){var e=g.useRef([]),t=g.useRef([0,0]),r=g.useRef(),s=g.useState(O1e++)[0],i=g.useState(cF)[0],o=g.useRef(n);g.useEffect(function(){o.current=n},[n]),g.useEffect(function(){if(n.inert){document.body.classList.add("block-interactivity-".concat(s));var y=Qge([n.lockRef.current],(n.shards||[]).map(gF),!0).filter(Boolean);return y.forEach(function(w){return w.classList.add("allow-interactivity-".concat(s))}),function(){document.body.classList.remove("block-interactivity-".concat(s)),y.forEach(function(w){return w.classList.remove("allow-interactivity-".concat(s))})}}},[n.inert,n.lockRef.current,n.shards]);var a=g.useCallback(function(y,w){if("touches"in y&&y.touches.length===2||y.type==="wheel"&&y.ctrlKey)return!o.current.allowPinchZoom;var k=U6(y),x=t.current,S="deltaX"in y?y.deltaX:x[0]-k[0],_="deltaY"in y?y.deltaY:x[1]-k[1],A,T=y.target,O=Math.abs(S)>Math.abs(_)?"h":"v";if("touches"in y&&O==="h"&&T.type==="range")return!1;var I=window.getSelection(),R=I&&I.anchorNode,D=R?R===T||R.contains(T):!1;if(D)return!1;var W=hF(O,T);if(!W)return!0;if(W?A=O:(A=O==="v"?"h":"v",W=hF(O,T)),!W)return!1;if(!r.current&&"changedTouches"in y&&(S||_)&&(r.current=A),!A)return!0;var H=r.current||A;return A1e(H,w,y,H==="h"?S:_)},[]),l=g.useCallback(function(y){var w=y;if(!(!wg.length||wg[wg.length-1]!==i)){var k="deltaY"in w?mF(w):U6(w),x=e.current.filter(function(A){return A.name===w.type&&(A.target===w.target||w.target===A.shadowParent)&&N1e(A.delta,k)})[0];if(x&&x.should){w.cancelable&&w.preventDefault();return}if(!x){var S=(o.current.shards||[]).map(gF).filter(Boolean).filter(function(A){return A.contains(w.target)}),_=S.length>0?a(w,S[0]):!o.current.noIsolation;_&&w.cancelable&&w.preventDefault()}}},[]),c=g.useCallback(function(y,w,k,x){var S={name:y,delta:w,target:k,should:x,shadowParent:I1e(k)};e.current.push(S),setTimeout(function(){e.current=e.current.filter(function(_){return _!==S})},1)},[]),u=g.useCallback(function(y){t.current=U6(y),r.current=void 0},[]),d=g.useCallback(function(y){c(y.type,mF(y),y.target,a(y,n.lockRef.current))},[]),f=g.useCallback(function(y){c(y.type,U6(y),y.target,a(y,n.lockRef.current))},[]);g.useEffect(function(){return wg.push(i),n.setCallbacks({onScrollCapture:d,onWheelCapture:d,onTouchMoveCapture:f}),document.addEventListener("wheel",l,bg),document.addEventListener("touchmove",l,bg),document.addEventListener("touchstart",u,bg),function(){wg=wg.filter(function(y){return y!==i}),document.removeEventListener("wheel",l,bg),document.removeEventListener("touchmove",l,bg),document.removeEventListener("touchstart",u,bg)}},[]);var p=n.removeScrollBar,m=n.inert;return g.createElement(g.Fragment,null,m?g.createElement(i,{styles:M1e(s)}):null,p?g.createElement(x1e,{noRelative:n.noRelative,gapMode:n.gapMode}):null)}function I1e(n){for(var e=null;n!==null;)n instanceof ShadowRoot&&(e=n.host,n=n.host),n=n.parentNode;return e}const D1e=l1e(lF,P1e);var sS=g.forwardRef(function(n,e){return g.createElement(H6,Yl({},n,{ref:e,sideCar:D1e}))});sS.classNames=H6.classNames;var R1e=function(n){if(typeof document>"u")return null;var e=Array.isArray(n)?n[0]:n;return e.ownerDocument.body},xg=new WeakMap,W6=new WeakMap,G6={},iS=0,yF=function(n){return n&&(n.host||yF(n.parentNode))},$1e=function(n,e){return e.map(function(t){if(n.contains(t))return t;var r=yF(t);return r&&n.contains(r)?r:(console.error("aria-hidden",t,"in not contained inside",n,". Doing nothing"),null)}).filter(function(t){return!!t})},L1e=function(n,e,t,r){var s=$1e(e,Array.isArray(n)?n:[n]);G6[t]||(G6[t]=new WeakMap);var i=G6[t],o=[],a=new Set,l=new Set(s),c=function(d){!d||a.has(d)||(a.add(d),c(d.parentNode))};s.forEach(c);var u=function(d){!d||l.has(d)||Array.prototype.forEach.call(d.children,function(f){if(a.has(f))u(f);else try{var p=f.getAttribute(r),m=p!==null&&p!=="false",y=(xg.get(f)||0)+1,w=(i.get(f)||0)+1;xg.set(f,y),i.set(f,w),o.push(f),y===1&&m&&W6.set(f,!0),w===1&&f.setAttribute(t,"true"),m||f.setAttribute(r,"true")}catch(k){console.error("aria-hidden: cannot operate on ",f,k)}})};return u(e),a.clear(),iS++,function(){o.forEach(function(d){var f=xg.get(d)-1,p=i.get(d)-1;xg.set(d,f),i.set(d,p),f||(W6.has(d)||d.removeAttribute(r),W6.delete(d)),p||d.removeAttribute(t)}),iS--,iS||(xg=new WeakMap,xg=new WeakMap,W6=new WeakMap,G6={})}},vF=function(n,e,t){t===void 0&&(t="data-aria-hidden");var r=Array.from(Array.isArray(n)?n:[n]),s=R1e(n);return s?(r.push.apply(r,Array.from(s.querySelectorAll("[aria-live], script"))),L1e(r,s,t,"aria-hidden")):function(){return null}};function F1e(n){const e=j1e(n),t=g.forwardRef((r,s)=>{const{children:i,...o}=r,a=g.Children.toArray(i),l=a.find(V1e);if(l){const c=l.props.children,u=a.map(d=>d===l?g.Children.count(c)>1?g.Children.only(null):g.isValidElement(c)?c.props.children:null:d);return b.jsx(e,{...o,ref:s,children:g.isValidElement(c)?g.cloneElement(c,void 0,u):null})}return b.jsx(e,{...o,ref:s,children:i})});return t.displayName=`${n}.Slot`,t}function j1e(n){const e=g.forwardRef((t,r)=>{const{children:s,...i}=t;if(g.isValidElement(s)){const o=H1e(s),a=z1e(i,s.props);return s.type!==g.Fragment&&(a.ref=r?Wd(r,o):o),g.cloneElement(s,a)}return g.Children.count(s)>1?g.Children.only(null):null});return e.displayName=`${n}.SlotClone`,e}var B1e=Symbol("radix.slottable");function V1e(n){return g.isValidElement(n)&&typeof n.type=="function"&&"__radixId"in n.type&&n.type.__radixId===B1e}function z1e(n,e){const t={...e};for(const r in e){const s=n[r],i=e[r];/^on[A-Z]/.test(r)?s&&i?t[r]=(...a)=>{const l=i(...a);return s(...a),l}:s&&(t[r]=s):r==="style"?t[r]={...s,...i}:r==="className"&&(t[r]=[s,i].filter(Boolean).join(" "))}return{...n,...t}}function H1e(n){var r,s;let e=(r=Object.getOwnPropertyDescriptor(n.props,"ref"))==null?void 0:r.get,t=e&&"isReactWarning"in e&&e.isReactWarning;return t?n.ref:(e=(s=Object.getOwnPropertyDescriptor(n,"ref"))==null?void 0:s.get,t=e&&"isReactWarning"in e&&e.isReactWarning,t?n.props.ref:n.props.ref||n.ref)}var K6="Dialog",[bF,wF]=fa(K6),[q1e,Ya]=bF(K6),xF=n=>{const{__scopeDialog:e,children:t,open:r,defaultOpen:s,onOpenChange:i,modal:o=!0}=n,a=g.useRef(null),l=g.useRef(null),[c,u]=Cp({prop:r,defaultProp:s??!1,onChange:i,caller:K6});return b.jsx(q1e,{scope:e,triggerRef:a,contentRef:l,contentId:kp(),titleId:kp(),descriptionId:kp(),open:c,onOpenChange:u,onOpenToggle:g.useCallback(()=>u(d=>!d),[u]),modal:o,children:t})};xF.displayName=K6;var kF="DialogTrigger",CF=g.forwardRef((n,e)=>{const{__scopeDialog:t,...r}=n,s=Ya(kF,t),i=Tr(e,s.triggerRef);return b.jsx(Un.button,{type:"button","aria-haspopup":"dialog","aria-expanded":s.open,"aria-controls":s.contentId,"data-state":lS(s.open),...r,ref:i,onClick:Dt(n.onClick,s.onOpenToggle)})});CF.displayName=kF;var oS="DialogPortal",[U1e,SF]=bF(oS,{forceMount:void 0}),EF=n=>{const{__scopeDialog:e,forceMount:t,children:r,container:s}=n,i=Ya(oS,e);return b.jsx(U1e,{scope:e,forceMount:t,children:g.Children.map(r,o=>b.jsx(Ka,{present:t||i.open,children:b.jsx(JC,{asChild:!0,container:s,children:o})}))})};EF.displayName=oS;var Y6="DialogOverlay",_F=g.forwardRef((n,e)=>{const t=SF(Y6,n.__scopeDialog),{forceMount:r=t.forceMount,...s}=n,i=Ya(Y6,n.__scopeDialog);return i.modal?b.jsx(Ka,{present:r||i.open,children:b.jsx(G1e,{...s,ref:e})}):null});_F.displayName=Y6;var W1e=F1e("DialogOverlay.RemoveScroll"),G1e=g.forwardRef((n,e)=>{const{__scopeDialog:t,...r}=n,s=Ya(Y6,t);return b.jsx(sS,{as:W1e,allowPinchZoom:!0,shards:[s.contentRef],children:b.jsx(Un.div,{"data-state":lS(s.open),...r,ref:e,style:{pointerEvents:"auto",...r.style}})})}),Sp="DialogContent",TF=g.forwardRef((n,e)=>{const t=SF(Sp,n.__scopeDialog),{forceMount:r=t.forceMount,...s}=n,i=Ya(Sp,n.__scopeDialog);return b.jsx(Ka,{present:r||i.open,children:i.modal?b.jsx(K1e,{...s,ref:e}):b.jsx(Y1e,{...s,ref:e})})});TF.displayName=Sp;var K1e=g.forwardRef((n,e)=>{const t=Ya(Sp,n.__scopeDialog),r=g.useRef(null),s=Tr(e,t.contentRef,r);return g.useEffect(()=>{const i=r.current;if(i)return vF(i)},[]),b.jsx(AF,{...n,ref:s,trapFocus:t.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:Dt(n.onCloseAutoFocus,i=>{var o;i.preventDefault(),(o=t.triggerRef.current)==null||o.focus()}),onPointerDownOutside:Dt(n.onPointerDownOutside,i=>{const o=i.detail.originalEvent,a=o.button===0&&o.ctrlKey===!0;(o.button===2||a)&&i.preventDefault()}),onFocusOutside:Dt(n.onFocusOutside,i=>i.preventDefault())})}),Y1e=g.forwardRef((n,e)=>{const t=Ya(Sp,n.__scopeDialog),r=g.useRef(!1),s=g.useRef(!1);return b.jsx(AF,{...n,ref:e,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:i=>{var o,a;(o=n.onCloseAutoFocus)==null||o.call(n,i),i.defaultPrevented||(r.current||(a=t.triggerRef.current)==null||a.focus(),i.preventDefault()),r.current=!1,s.current=!1},onInteractOutside:i=>{var l,c;(l=n.onInteractOutside)==null||l.call(n,i),i.defaultPrevented||(r.current=!0,i.detail.originalEvent.type==="pointerdown"&&(s.current=!0));const o=i.target;((c=t.triggerRef.current)==null?void 0:c.contains(o))&&i.preventDefault(),i.detail.originalEvent.type==="focusin"&&s.current&&i.preventDefault()}})}),AF=g.forwardRef((n,e)=>{const{__scopeDialog:t,trapFocus:r,onOpenAutoFocus:s,onCloseAutoFocus:i,...o}=n,a=Ya(Sp,t),l=g.useRef(null),c=Tr(e,l);return rF(),b.jsxs(b.Fragment,{children:[b.jsx(XC,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:s,onUnmountAutoFocus:i,children:b.jsx(KC,{role:"dialog",id:a.contentId,"aria-describedby":a.descriptionId,"aria-labelledby":a.titleId,"data-state":lS(a.open),...o,ref:c,onDismiss:()=>a.onOpenChange(!1)})}),b.jsxs(b.Fragment,{children:[b.jsx(X1e,{titleId:a.titleId}),b.jsx(Q1e,{contentRef:l,descriptionId:a.descriptionId})]})]})}),aS="DialogTitle",NF=g.forwardRef((n,e)=>{const{__scopeDialog:t,...r}=n,s=Ya(aS,t);return b.jsx(Un.h2,{id:s.titleId,...r,ref:e})});NF.displayName=aS;var MF="DialogDescription",OF=g.forwardRef((n,e)=>{const{__scopeDialog:t,...r}=n,s=Ya(MF,t);return b.jsx(Un.p,{id:s.descriptionId,...r,ref:e})});OF.displayName=MF;var PF="DialogClose",IF=g.forwardRef((n,e)=>{const{__scopeDialog:t,...r}=n,s=Ya(PF,t);return b.jsx(Un.button,{type:"button",...r,ref:e,onClick:Dt(n.onClick,()=>s.onOpenChange(!1))})});IF.displayName=PF;function lS(n){return n?"open":"closed"}var DF="DialogTitleWarning",[Z1e,RF]=wge(DF,{contentName:Sp,titleName:aS,docsSlug:"dialog"}),X1e=({titleId:n})=>{const e=RF(DF),t=`\`${e.contentName}\` requires a \`${e.titleName}\` for the component to be accessible for screen reader users. + +If you want to hide the \`${e.titleName}\`, you can wrap it with our VisuallyHidden component. + +For more information, see https://radix-ui.com/primitives/docs/components/${e.docsSlug}`;return g.useEffect(()=>{n&&(document.getElementById(n)||console.error(t))},[t,n]),null},J1e="DialogDescriptionWarning",Q1e=({contentRef:n,descriptionId:e})=>{const r=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${RF(J1e).contentName}}.`;return g.useEffect(()=>{var i;const s=(i=n.current)==null?void 0:i.getAttribute("aria-describedby");e&&s&&(document.getElementById(e)||console.warn(r))},[r,n,e]),null},$F=xF,eye=CF,LF=EF,cS=_F,uS=TF,dS=NF,hS=OF,fS=IF;const pS=$F,tye=LF,FF=g.forwardRef(({className:n,...e},t)=>b.jsx(cS,{ref:t,className:Pt("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",n),...e}));FF.displayName=cS.displayName;const Z6=g.forwardRef(({className:n,children:e,...t},r)=>b.jsxs(tye,{children:[b.jsx(FF,{}),b.jsxs(uS,{ref:r,className:Pt("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",n),...t,children:[e,b.jsxs(fS,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity data-[state=open]:bg-accent data-[state=open]:text-muted-foreground hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",children:[b.jsx(Se.X,{className:"h-4 w-4"}),b.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));Z6.displayName=uS.displayName;const X6=({className:n,...e})=>b.jsx("div",{className:Pt("flex flex-col space-y-1.5 text-center sm:text-left",n),...e});X6.displayName="DialogHeader";const J6=g.forwardRef(({className:n,...e},t)=>b.jsx(dS,{ref:t,className:Pt("text-lg font-semibold leading-none tracking-tight",n),...e}));J6.displayName=dS.displayName;const jF=g.forwardRef(({className:n,...e},t)=>b.jsx(hS,{ref:t,className:Pt("text-sm text-muted-foreground",n),...e}));jF.displayName=hS.displayName;const xb=g.forwardRef(({className:n,type:e,...t},r)=>b.jsx("input",{type:e,className:Pt("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",n),ref:r,...t}));xb.displayName="Input";var kb=n=>n.type==="checkbox",Ep=n=>n instanceof Date,Ji=n=>n==null;const BF=n=>typeof n=="object";var ms=n=>!Ji(n)&&!Array.isArray(n)&&BF(n)&&!Ep(n),VF=n=>ms(n)&&n.target?kb(n.target)?n.target.checked:n.target.value:n,nye=n=>n.substring(0,n.search(/\.\d+(\.|$)/))||n,zF=(n,e)=>n.has(nye(e)),rye=n=>{const e=n.constructor&&n.constructor.prototype;return ms(e)&&e.hasOwnProperty("isPrototypeOf")},mS=typeof window<"u"&&typeof window.HTMLElement<"u"&&typeof document<"u";function gs(n){if(n instanceof Date)return new Date(n);const e=typeof FileList<"u"&&n instanceof FileList;if(mS&&(n instanceof Blob||e))return n;const t=Array.isArray(n);if(!t&&!(ms(n)&&rye(n)))return n;const r=t?[]:Object.create(Object.getPrototypeOf(n));for(const s in n)Object.prototype.hasOwnProperty.call(n,s)&&(r[s]=gs(n[s]));return r}var Q6=n=>/^\w*$/.test(n),Fr=n=>n===void 0,gS=n=>Array.isArray(n)?n.filter(Boolean):[],yS=n=>gS(n.replace(/["|']|\]/g,"").split(/\.|\[/)),Ue=(n,e,t)=>{if(!e||!ms(n))return t;const r=(Q6(e)?[e]:yS(e)).reduce((s,i)=>Ji(s)?s:s[i],n);return Fr(r)||r===n?Fr(n[e])?t:n[e]:r},To=n=>typeof n=="boolean",Ei=n=>typeof n=="function",hr=(n,e,t)=>{let r=-1;const s=Q6(e)?[e]:yS(e),i=s.length,o=i-1;for(;++r<i;){const a=s[r];let l=t;if(r!==o){const c=n[a];l=ms(c)||Array.isArray(c)?c:isNaN(+s[r+1])?{}:[]}if(a==="__proto__"||a==="constructor"||a==="prototype")return;n[a]=l,n=n[a]}};const ex={BLUR:"blur",FOCUS_OUT:"focusout",CHANGE:"change"},Za={onBlur:"onBlur",onChange:"onChange",onSubmit:"onSubmit",onTouched:"onTouched",all:"all"},fu={max:"max",min:"min",maxLength:"maxLength",minLength:"minLength",pattern:"pattern",required:"required",validate:"validate"},vS=U.createContext(null);vS.displayName="HookFormControlContext";const bS=()=>U.useContext(vS);var HF=(n,e,t,r=!0)=>{const s={defaultValues:e._defaultValues};for(const i in n)Object.defineProperty(s,i,{get:()=>{const o=i;return e._proxyFormState[o]!==Za.all&&(e._proxyFormState[o]=!r||Za.all),t&&(t[o]=!0),n[o]}});return s};const wS=typeof window<"u"?U.useLayoutEffect:U.useEffect;function sye(n){const e=bS(),{control:t=e,disabled:r,name:s,exact:i}=n||{},[o,a]=U.useState(t._formState),l=U.useRef({isDirty:!1,isLoading:!1,dirtyFields:!1,touchedFields:!1,validatingFields:!1,isValidating:!1,isValid:!1,errors:!1});return wS(()=>t._subscribe({name:s,formState:l.current,exact:i,callback:c=>{!r&&a({...t._formState,...c})}}),[s,r,i]),U.useEffect(()=>{l.current.isValid&&t._setValid(!0)},[t]),U.useMemo(()=>HF(o,t,l.current,!1),[o,t])}var Ao=n=>typeof n=="string",xS=(n,e,t,r,s)=>Ao(n)?(r&&e.watch.add(n),Ue(t,n,s)):Array.isArray(n)?n.map(i=>(r&&e.watch.add(i),Ue(t,i))):(r&&(e.watchAll=!0),t),kS=n=>Ji(n)||!BF(n);function Xa(n,e,t=new WeakSet){if(kS(n)||kS(e))return Object.is(n,e);if(Ep(n)&&Ep(e))return Object.is(n.getTime(),e.getTime());const r=Object.keys(n),s=Object.keys(e);if(r.length!==s.length)return!1;if(t.has(n)||t.has(e))return!0;t.add(n),t.add(e);for(const i of r){const o=n[i];if(!s.includes(i))return!1;if(i!=="ref"){const a=e[i];if(Ep(o)&&Ep(a)||ms(o)&&ms(a)||Array.isArray(o)&&Array.isArray(a)?!Xa(o,a,t):!Object.is(o,a))return!1}}return!0}function iye(n){const e=bS(),{control:t=e,name:r,defaultValue:s,disabled:i,exact:o,compute:a}=n||{},l=U.useRef(s),c=U.useRef(a),u=U.useRef(void 0),d=U.useRef(t),f=U.useRef(r);c.current=a;const[p,m]=U.useState(()=>{const _=t._getWatch(r,l.current);return c.current?c.current(_):_}),y=U.useCallback(_=>{const A=xS(r,t._names,_||t._formValues,!1,l.current);return c.current?c.current(A):A},[t._formValues,t._names,r]),w=U.useCallback(_=>{if(!i){const A=xS(r,t._names,_||t._formValues,!1,l.current);if(c.current){const T=c.current(A);Xa(T,u.current)||(m(T),u.current=T)}else m(A)}},[t._formValues,t._names,i,r]);wS(()=>((d.current!==t||!Xa(f.current,r))&&(d.current=t,f.current=r,w()),t._subscribe({name:r,formState:{values:!0},exact:o,callback:_=>{w(_.values)}})),[t,o,r,w]),U.useEffect(()=>t._removeUnmounted());const k=d.current!==t,x=f.current,S=U.useMemo(()=>{if(i)return null;const _=!k&&!Xa(x,r);return k||_?y():null},[i,k,r,x,y]);return S!==null?S:p}function oye(n){const e=bS(),{name:t,disabled:r,control:s=e,shouldUnregister:i,defaultValue:o,exact:a=!0}=n,l=zF(s._names.array,t),c=U.useMemo(()=>Ue(s._formValues,t,Ue(s._defaultValues,t,o)),[s,t,o]),u=iye({control:s,name:t,defaultValue:c,exact:a}),d=sye({control:s,name:t,exact:a}),f=U.useRef(n),p=U.useRef(void 0),m=U.useRef(s.register(t,{...n.rules,value:u,...To(n.disabled)?{disabled:n.disabled}:{}}));f.current=n;const y=U.useMemo(()=>Object.defineProperties({},{invalid:{enumerable:!0,get:()=>!!Ue(d.errors,t)},isDirty:{enumerable:!0,get:()=>!!Ue(d.dirtyFields,t)},isTouched:{enumerable:!0,get:()=>!!Ue(d.touchedFields,t)},isValidating:{enumerable:!0,get:()=>!!Ue(d.validatingFields,t)},error:{enumerable:!0,get:()=>Ue(d.errors,t)}}),[d,t]),w=U.useCallback(_=>m.current.onChange({target:{value:VF(_),name:t},type:ex.CHANGE}),[t]),k=U.useCallback(()=>m.current.onBlur({target:{value:Ue(s._formValues,t),name:t},type:ex.BLUR}),[t,s._formValues]),x=U.useCallback(_=>{const A=Ue(s._fields,t);A&&A._f&&_&&(A._f.ref={focus:()=>Ei(_.focus)&&_.focus(),select:()=>Ei(_.select)&&_.select(),setCustomValidity:T=>Ei(_.setCustomValidity)&&_.setCustomValidity(T),reportValidity:()=>Ei(_.reportValidity)&&_.reportValidity()})},[s._fields,t]),S=U.useMemo(()=>({name:t,value:u,...To(r)||d.disabled?{disabled:d.disabled||r}:{},onChange:w,onBlur:k,ref:x}),[t,r,d.disabled,w,k,x,u]);return U.useEffect(()=>{const _=s._options.shouldUnregister||i,A=p.current;A&&A!==t&&!l&&s.unregister(A),s.register(t,{...f.current.rules,...To(f.current.disabled)?{disabled:f.current.disabled}:{}});const T=(O,I)=>{const R=Ue(s._fields,O);R&&R._f&&(R._f.mount=I)};if(T(t,!0),_){const O=gs(Ue(s._options.defaultValues,t,f.current.defaultValue));hr(s._defaultValues,t,O),Fr(Ue(s._formValues,t))&&hr(s._formValues,t,O)}return!l&&s.register(t),p.current=t,()=>{(l?_&&!s._state.action:_)?s.unregister(t):T(t,!1)}},[t,s,l,i]),U.useEffect(()=>{s._setDisabledField({disabled:r,name:t})},[r,t,s]),U.useMemo(()=>({field:S,formState:d,fieldState:y}),[S,d,y])}const aye=n=>n.render(oye(n)),CS=U.createContext(null);CS.displayName="HookFormContext";const lye=()=>U.useContext(CS),cye=n=>{const{children:e,watch:t,getValues:r,getFieldState:s,setError:i,clearErrors:o,setValue:a,trigger:l,formState:c,resetField:u,reset:d,handleSubmit:f,unregister:p,control:m,register:y,setFocus:w,subscribe:k}=n;return U.createElement(CS.Provider,{value:U.useMemo(()=>({watch:t,getValues:r,getFieldState:s,setError:i,clearErrors:o,setValue:a,trigger:l,formState:c,resetField:u,reset:d,handleSubmit:f,unregister:p,control:m,register:y,setFocus:w,subscribe:k}),[o,m,c,s,r,f,y,d,u,i,w,a,k,l,p,t])},U.createElement(vS.Provider,{value:m},e))};var qF=(n,e,t,r,s)=>e?{...t[n],types:{...t[n]&&t[n].types?t[n].types:{},[r]:s||!0}}:{},Cb=n=>Array.isArray(n)?n:[n],UF=()=>{let n=[];return{get observers(){return n},next:s=>{for(const i of n)i.next&&i.next(s)},subscribe:s=>(n.push(s),{unsubscribe:()=>{n=n.filter(i=>i!==s)}}),unsubscribe:()=>{n=[]}}};function WF(n,e){const t={};for(const r in n)if(n.hasOwnProperty(r)){const s=n[r],i=e[r];if(s&&ms(s)&&i){const o=WF(s,i);ms(o)&&(t[r]=o)}else n[r]&&(t[r]=i)}return t}var _i=n=>ms(n)&&!Object.keys(n).length,SS=n=>n.type==="file",tx=n=>{if(!mS)return!1;const e=n?n.ownerDocument:0;return n instanceof(e&&e.defaultView?e.defaultView.HTMLElement:HTMLElement)},GF=n=>n.type==="select-multiple",ES=n=>n.type==="radio",uye=n=>ES(n)||kb(n),_S=n=>tx(n)&&n.isConnected;function dye(n,e){const t=e.slice(0,-1).length;let r=0;for(;r<t;)n=Fr(n)?r++:n[e[r++]];return n}function hye(n){for(const e in n)if(n.hasOwnProperty(e)&&!Fr(n[e]))return!1;return!0}function ys(n,e){const t=Array.isArray(e)?e:Q6(e)?[e]:yS(e),r=t.length===1?n:dye(n,t),s=t.length-1,i=t[s];return r&&delete r[i],s!==0&&(ms(r)&&_i(r)||Array.isArray(r)&&hye(r))&&ys(n,t.slice(0,-1)),n}var fye=n=>{for(const e in n)if(Ei(n[e]))return!0;return!1};function KF(n){return Array.isArray(n)||ms(n)&&!fye(n)}function TS(n,e={}){for(const t in n){const r=n[t];KF(r)?(e[t]=Array.isArray(r)?[]:{},TS(r,e[t])):Fr(r)||(e[t]=!0)}return e}function kg(n,e,t){t||(t=TS(e));for(const r in n){const s=n[r];if(KF(s))Fr(e)||kS(t[r])?t[r]=TS(s,Array.isArray(s)?[]:{}):kg(s,Ji(e)?{}:e[r],t[r]);else{const i=e[r];t[r]=!Xa(s,i)}}return t}const YF={value:!1,isValid:!1},ZF={value:!0,isValid:!0};var XF=n=>{if(Array.isArray(n)){if(n.length>1){const e=n.filter(t=>t&&t.checked&&!t.disabled).map(t=>t.value);return{value:e,isValid:!!e.length}}return n[0].checked&&!n[0].disabled?n[0].attributes&&!Fr(n[0].attributes.value)?Fr(n[0].value)||n[0].value===""?ZF:{value:n[0].value,isValid:!0}:ZF:YF}return YF},JF=(n,{valueAsNumber:e,valueAsDate:t,setValueAs:r})=>Fr(n)?n:e?n===""?NaN:n&&+n:t&&Ao(n)?new Date(n):r?r(n):n;const QF={isValid:!1,value:null};var ej=n=>Array.isArray(n)?n.reduce((e,t)=>t&&t.checked&&!t.disabled?{isValid:!0,value:t.value}:e,QF):QF;function tj(n){const e=n.ref;return SS(e)?e.files:ES(e)?ej(n.refs).value:GF(e)?[...e.selectedOptions].map(({value:t})=>t):kb(e)?XF(n.refs).value:JF(Fr(e.value)?n.ref.value:e.value,n)}var pye=(n,e,t,r)=>{const s={};for(const i of n){const o=Ue(e,i);o&&hr(s,i,o._f)}return{criteriaMode:t,names:[...n],fields:s,shouldUseNativeValidation:r}},nx=n=>n instanceof RegExp,Sb=n=>Fr(n)?n:nx(n)?n.source:ms(n)?nx(n.value)?n.value.source:n.value:n,nj=n=>({isOnSubmit:!n||n===Za.onSubmit,isOnBlur:n===Za.onBlur,isOnChange:n===Za.onChange,isOnAll:n===Za.all,isOnTouch:n===Za.onTouched});const rj="AsyncFunction";var mye=n=>!!n&&!!n.validate&&!!(Ei(n.validate)&&n.validate.constructor.name===rj||ms(n.validate)&&Object.values(n.validate).find(e=>e.constructor.name===rj)),gye=n=>n.mount&&(n.required||n.min||n.max||n.maxLength||n.minLength||n.pattern||n.validate),sj=(n,e,t)=>!t&&(e.watchAll||e.watch.has(n)||[...e.watch].some(r=>n.startsWith(r)&&/^\.\w+/.test(n.slice(r.length))));const Eb=(n,e,t,r)=>{for(const s of t||Object.keys(n)){const i=Ue(n,s);if(i){const{_f:o,...a}=i;if(o){if(o.refs&&o.refs[0]&&e(o.refs[0],s)&&!r)return!0;if(o.ref&&e(o.ref,o.name)&&!r)return!0;if(Eb(a,e))break}else if(ms(a)&&Eb(a,e))break}}};function ij(n,e,t){const r=Ue(n,t);if(r||Q6(t))return{error:r,name:t};const s=t.split(".");for(;s.length;){const i=s.join("."),o=Ue(e,i),a=Ue(n,i);if(o&&!Array.isArray(o)&&t!==i)return{name:t};if(a&&a.type)return{name:i,error:a};if(a&&a.root&&a.root.type)return{name:`${i}.root`,error:a.root};s.pop()}return{name:t}}var yye=(n,e,t,r)=>{t(n);const{name:s,...i}=n;return _i(i)||Object.keys(i).length>=Object.keys(e).length||Object.keys(i).find(o=>e[o]===(!r||Za.all))},vye=(n,e,t)=>!n||!e||n===e||Cb(n).some(r=>r&&(t?r===e:r.startsWith(e)||e.startsWith(r))),bye=(n,e,t,r,s)=>s.isOnAll?!1:!t&&s.isOnTouch?!(e||n):(t?r.isOnBlur:s.isOnBlur)?!n:(t?r.isOnChange:s.isOnChange)?n:!0,wye=(n,e)=>!gS(Ue(n,e)).length&&ys(n,e),xye=(n,e,t)=>{const r=Cb(Ue(n,t));return hr(r,"root",e[t]),hr(n,t,r),n};function oj(n,e,t="validate"){if(Ao(n)||Array.isArray(n)&&n.every(Ao)||To(n)&&!n)return{type:t,message:Ao(n)?n:"",ref:e}}var Cg=n=>ms(n)&&!nx(n)?n:{value:n,message:""},aj=async(n,e,t,r,s,i)=>{const{ref:o,refs:a,required:l,maxLength:c,minLength:u,min:d,max:f,pattern:p,validate:m,name:y,valueAsNumber:w,mount:k}=n._f,x=Ue(t,y);if(!k||e.has(y))return{};const S=a?a[0]:o,_=H=>{s&&S.reportValidity&&(S.setCustomValidity(To(H)?"":H||""),S.reportValidity())},A={},T=ES(o),O=kb(o),I=T||O,R=(w||SS(o))&&Fr(o.value)&&Fr(x)||tx(o)&&o.value===""||x===""||Array.isArray(x)&&!x.length,D=qF.bind(null,y,r,A),W=(H,re,ae,de=fu.maxLength,le=fu.minLength)=>{const X=H?re:ae;A[y]={type:H?de:le,message:X,ref:o,...D(H?de:le,X)}};if(i?!Array.isArray(x)||!x.length:l&&(!I&&(R||Ji(x))||To(x)&&!x||O&&!XF(a).isValid||T&&!ej(a).isValid)){const{value:H,message:re}=Ao(l)?{value:!!l,message:l}:Cg(l);if(H&&(A[y]={type:fu.required,message:re,ref:S,...D(fu.required,re)},!r))return _(re),A}if(!R&&(!Ji(d)||!Ji(f))){let H,re;const ae=Cg(f),de=Cg(d);if(!Ji(x)&&!isNaN(x)){const le=o.valueAsNumber||x&&+x;Ji(ae.value)||(H=le>ae.value),Ji(de.value)||(re=le<de.value)}else{const le=o.valueAsDate||new Date(x),X=$=>new Date(new Date().toDateString()+" "+$),se=o.type=="time",J=o.type=="week";Ao(ae.value)&&x&&(H=se?X(x)>X(ae.value):J?x>ae.value:le>new Date(ae.value)),Ao(de.value)&&x&&(re=se?X(x)<X(de.value):J?x<de.value:le<new Date(de.value))}if((H||re)&&(W(!!H,ae.message,de.message,fu.max,fu.min),!r))return _(A[y].message),A}if((c||u)&&!R&&(Ao(x)||i&&Array.isArray(x))){const H=Cg(c),re=Cg(u),ae=!Ji(H.value)&&x.length>+H.value,de=!Ji(re.value)&&x.length<+re.value;if((ae||de)&&(W(ae,H.message,re.message),!r))return _(A[y].message),A}if(p&&!R&&Ao(x)){const{value:H,message:re}=Cg(p);if(nx(H)&&!x.match(H)&&(A[y]={type:fu.pattern,message:re,ref:o,...D(fu.pattern,re)},!r))return _(re),A}if(m){if(Ei(m)){const H=await m(x,t),re=oj(H,S);if(re&&(A[y]={...re,...D(fu.validate,re.message)},!r))return _(re.message),A}else if(ms(m)){let H={};for(const re in m){if(!_i(H)&&!r)break;const ae=oj(await m[re](x,t),S,re);ae&&(H={...ae,...D(re,ae.message)},_(ae.message),r&&(A[y]=H))}if(!_i(H)&&(A[y]={ref:S,...H},!r))return A}}return _(!0),A};const kye={mode:Za.onSubmit,reValidateMode:Za.onChange,shouldFocusError:!0};function Cye(n={}){let e={...kye,...n},t={submitCount:0,isDirty:!1,isReady:!1,isLoading:Ei(e.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:e.errors||{},disabled:e.disabled||!1},r={},s=ms(e.defaultValues)||ms(e.values)?gs(e.defaultValues||e.values)||{}:{},i=e.shouldUnregister?{}:gs(s),o={action:!1,mount:!1,watch:!1,keepIsValid:!1},a={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set},l,c=0;const u={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},d={...u};let f={...d};const p={array:UF(),state:UF()},m=e.criteriaMode===Za.all,y=L=>V=>{clearTimeout(c),c=setTimeout(L,V)},w=async L=>{if(!o.keepIsValid&&!e.disabled&&(d.isValid||f.isValid||L)){let V;e.resolver?(V=_i((await I()).errors),k()):V=await D(r,!0),V!==t.isValid&&p.state.next({isValid:V})}},k=(L,V)=>{!e.disabled&&(d.isValidating||d.validatingFields||f.isValidating||f.validatingFields)&&((L||Array.from(a.mount)).forEach(ie=>{ie&&(V?hr(t.validatingFields,ie,V):ys(t.validatingFields,ie))}),p.state.next({validatingFields:t.validatingFields,isValidating:!_i(t.validatingFields)}))},x=(L,V=[],ie,he,z=!0,B=!0)=>{if(he&&ie&&!e.disabled){if(o.action=!0,B&&Array.isArray(Ue(r,L))){const ee=ie(Ue(r,L),he.argA,he.argB);z&&hr(r,L,ee)}if(B&&Array.isArray(Ue(t.errors,L))){const ee=ie(Ue(t.errors,L),he.argA,he.argB);z&&hr(t.errors,L,ee),wye(t.errors,L)}if((d.touchedFields||f.touchedFields)&&B&&Array.isArray(Ue(t.touchedFields,L))){const ee=ie(Ue(t.touchedFields,L),he.argA,he.argB);z&&hr(t.touchedFields,L,ee)}(d.dirtyFields||f.dirtyFields)&&(t.dirtyFields=kg(s,i)),p.state.next({name:L,isDirty:H(L,V),dirtyFields:t.dirtyFields,errors:t.errors,isValid:t.isValid})}else hr(i,L,V)},S=(L,V)=>{hr(t.errors,L,V),p.state.next({errors:t.errors})},_=L=>{t.errors=L,p.state.next({errors:t.errors,isValid:!1})},A=(L,V,ie,he)=>{const z=Ue(r,L);if(z){const B=Ue(i,L,Fr(ie)?Ue(s,L):ie);Fr(B)||he&&he.defaultChecked||V?hr(i,L,V?B:tj(z._f)):de(L,B),o.mount&&!o.action&&w()}},T=(L,V,ie,he,z)=>{let B=!1,ee=!1;const we={name:L};if(!e.disabled){if(!ie||he){(d.isDirty||f.isDirty)&&(ee=t.isDirty,t.isDirty=we.isDirty=H(),B=ee!==we.isDirty);const Ee=Xa(Ue(s,L),V);ee=!!Ue(t.dirtyFields,L),Ee?ys(t.dirtyFields,L):hr(t.dirtyFields,L,!0),we.dirtyFields=t.dirtyFields,B=B||(d.dirtyFields||f.dirtyFields)&&ee!==!Ee}if(ie){const Ee=Ue(t.touchedFields,L);Ee||(hr(t.touchedFields,L,ie),we.touchedFields=t.touchedFields,B=B||(d.touchedFields||f.touchedFields)&&Ee!==ie)}B&&z&&p.state.next(we)}return B?we:{}},O=(L,V,ie,he)=>{const z=Ue(t.errors,L),B=(d.isValid||f.isValid)&&To(V)&&t.isValid!==V;if(e.delayError&&ie?(l=y(()=>S(L,ie)),l(e.delayError)):(clearTimeout(c),l=null,ie?hr(t.errors,L,ie):ys(t.errors,L)),(ie?!Xa(z,ie):z)||!_i(he)||B){const ee={...he,...B&&To(V)?{isValid:V}:{},errors:t.errors,name:L};t={...t,...ee},p.state.next(ee)}},I=async L=>(k(L,!0),await e.resolver(i,e.context,pye(L||a.mount,r,e.criteriaMode,e.shouldUseNativeValidation))),R=async L=>{const{errors:V}=await I(L);if(k(L),L)for(const ie of L){const he=Ue(V,ie);he?hr(t.errors,ie,he):ys(t.errors,ie)}else t.errors=V;return V},D=async(L,V,ie={valid:!0})=>{for(const he in L){const z=L[he];if(z){const{_f:B,...ee}=z;if(B){const we=a.array.has(B.name),Ee=z._f&&mye(z._f);Ee&&d.validatingFields&&k([B.name],!0);const rt=await aj(z,a.disabled,i,m,e.shouldUseNativeValidation&&!V,we);if(Ee&&d.validatingFields&&k([B.name]),rt[B.name]&&(ie.valid=!1,V||n.shouldUseNativeValidation))break;!V&&(Ue(rt,B.name)?we?xye(t.errors,rt,B.name):hr(t.errors,B.name,rt[B.name]):ys(t.errors,B.name))}!_i(ee)&&await D(ee,V,ie)}}return ie.valid},W=()=>{for(const L of a.unMount){const V=Ue(r,L);V&&(V._f.refs?V._f.refs.every(ie=>!_S(ie)):!_S(V._f.ref))&&We(L)}a.unMount=new Set},H=(L,V)=>!e.disabled&&(L&&V&&hr(i,L,V),!Xa(ve(),s)),re=(L,V,ie)=>xS(L,a,{...o.mount?i:Fr(V)?s:Ao(L)?{[L]:V}:V},ie,V),ae=L=>gS(Ue(o.mount?i:s,L,e.shouldUnregister?Ue(s,L,[]):[])),de=(L,V,ie={})=>{const he=Ue(r,L);let z=V;if(he){const B=he._f;B&&(!B.disabled&&hr(i,L,JF(V,B)),z=tx(B.ref)&&Ji(V)?"":V,GF(B.ref)?[...B.ref.options].forEach(ee=>ee.selected=z.includes(ee.value)):B.refs?kb(B.ref)?B.refs.forEach(ee=>{(!ee.defaultChecked||!ee.disabled)&&(Array.isArray(z)?ee.checked=!!z.find(we=>we===ee.value):ee.checked=z===ee.value||!!z)}):B.refs.forEach(ee=>ee.checked=ee.value===z):SS(B.ref)?B.ref.value="":(B.ref.value=z,B.ref.type||p.state.next({name:L,values:gs(i)})))}(ie.shouldDirty||ie.shouldTouch)&&T(L,z,ie.shouldTouch,ie.shouldDirty,!0),ie.shouldValidate&&$(L)},le=(L,V,ie)=>{for(const he in V){if(!V.hasOwnProperty(he))return;const z=V[he],B=L+"."+he,ee=Ue(r,B);(a.array.has(L)||ms(z)||ee&&!ee._f)&&!Ep(z)?le(B,z,ie):de(B,z,ie)}},X=(L,V,ie={})=>{const he=Ue(r,L),z=a.array.has(L),B=gs(V);hr(i,L,B),z?(p.array.next({name:L,values:gs(i)}),(d.isDirty||d.dirtyFields||f.isDirty||f.dirtyFields)&&ie.shouldDirty&&p.state.next({name:L,dirtyFields:kg(s,i),isDirty:H(L,B)})):he&&!he._f&&!Ji(B)?le(L,B,ie):de(L,B,ie),sj(L,a)?p.state.next({...t,name:L,values:gs(i)}):p.state.next({name:o.mount?L:void 0,values:gs(i)})},se=async L=>{o.mount=!0;const V=L.target;let ie=V.name,he=!0;const z=Ue(r,ie),B=Ee=>{he=Number.isNaN(Ee)||Ep(Ee)&&isNaN(Ee.getTime())||Xa(Ee,Ue(i,ie,Ee))},ee=nj(e.mode),we=nj(e.reValidateMode);if(z){let Ee,rt;const en=V.type?tj(z._f):VF(L),An=L.type===ex.BLUR||L.type===ex.FOCUS_OUT,tr=!gye(z._f)&&!e.resolver&&!Ue(t.errors,ie)&&!z._f.deps||bye(An,Ue(t.touchedFields,ie),t.isSubmitted,we,ee),$r=sj(ie,a,An);hr(i,ie,en),An?(!V||!V.readOnly)&&(z._f.onBlur&&z._f.onBlur(L),l&&l(0)):z._f.onChange&&z._f.onChange(L);const Er=T(ie,en,An),on=!_i(Er)||$r;if(!An&&p.state.next({name:ie,type:L.type,values:gs(i)}),tr)return(d.isValid||f.isValid)&&(e.mode==="onBlur"?An&&w():An||w()),on&&p.state.next({name:ie,...$r?{}:Er});if(!An&&$r&&p.state.next({...t}),e.resolver){const{errors:pr}=await I([ie]);if(k([ie]),B(en),he){const Lr=ij(t.errors,r,ie),ca=ij(pr,r,Lr.name||ie);Ee=ca.error,ie=ca.name,rt=_i(pr)}}else k([ie],!0),Ee=(await aj(z,a.disabled,i,m,e.shouldUseNativeValidation))[ie],k([ie]),B(en),he&&(Ee?rt=!1:(d.isValid||f.isValid)&&(rt=await D(r,!0)));he&&(z._f.deps&&(!Array.isArray(z._f.deps)||z._f.deps.length>0)&&$(z._f.deps),O(ie,rt,Ee,Er))}},J=(L,V)=>{if(Ue(t.errors,V)&&L.focus)return L.focus(),1},$=async(L,V={})=>{let ie,he;const z=Cb(L);if(e.resolver){const B=await R(Fr(L)?L:z);ie=_i(B),he=L?!z.some(ee=>Ue(B,ee)):ie}else L?(he=(await Promise.all(z.map(async B=>{const ee=Ue(r,B);return await D(ee&&ee._f?{[B]:ee}:ee)}))).every(Boolean),!(!he&&!t.isValid)&&w()):he=ie=await D(r);return p.state.next({...!Ao(L)||(d.isValid||f.isValid)&&ie!==t.isValid?{}:{name:L},...e.resolver||!L?{isValid:ie}:{},errors:t.errors}),V.shouldFocus&&!he&&Eb(r,J,L?z:a.mount),he},ve=(L,V)=>{let ie={...o.mount?i:s};return V&&(ie=WF(V.dirtyFields?t.dirtyFields:t.touchedFields,ie)),Fr(L)?ie:Ao(L)?Ue(ie,L):L.map(he=>Ue(ie,he))},Pe=(L,V)=>({invalid:!!Ue((V||t).errors,L),isDirty:!!Ue((V||t).dirtyFields,L),error:Ue((V||t).errors,L),isValidating:!!Ue(t.validatingFields,L),isTouched:!!Ue((V||t).touchedFields,L)}),q=L=>{L&&Cb(L).forEach(V=>ys(t.errors,V)),p.state.next({errors:L?t.errors:{}})},Xe=(L,V,ie)=>{const he=(Ue(r,L,{_f:{}})._f||{}).ref,z=Ue(t.errors,L)||{},{ref:B,message:ee,type:we,...Ee}=z;hr(t.errors,L,{...Ee,...V,ref:he}),p.state.next({name:L,errors:t.errors,isValid:!1}),ie&&ie.shouldFocus&&he&&he.focus&&he.focus()},qe=(L,V)=>Ei(L)?p.state.subscribe({next:ie=>"values"in ie&&L(re(void 0,V),ie)}):re(L,V,!0),Ye=L=>p.state.subscribe({next:V=>{vye(L.name,V.name,L.exact)&&yye(V,L.formState||d,ne,L.reRenderRoot)&&L.callback({values:{...i},...t,...V,defaultValues:s})}}).unsubscribe,it=L=>(o.mount=!0,f={...f,...L.formState},Ye({...L,formState:{...u,...L.formState}})),We=(L,V={})=>{for(const ie of L?Cb(L):a.mount)a.mount.delete(ie),a.array.delete(ie),V.keepValue||(ys(r,ie),ys(i,ie)),!V.keepError&&ys(t.errors,ie),!V.keepDirty&&ys(t.dirtyFields,ie),!V.keepTouched&&ys(t.touchedFields,ie),!V.keepIsValidating&&ys(t.validatingFields,ie),!e.shouldUnregister&&!V.keepDefaultValue&&ys(s,ie);p.state.next({values:gs(i)}),p.state.next({...t,...V.keepDirty?{isDirty:H()}:{}}),!V.keepIsValid&&w()},ot=({disabled:L,name:V})=>{if(To(L)&&o.mount||L||a.disabled.has(V)){const z=a.disabled.has(V)!==!!L;L?a.disabled.add(V):a.disabled.delete(V),z&&o.mount&&!o.action&&w()}},ge=(L,V={})=>{let ie=Ue(r,L);const he=To(V.disabled)||To(e.disabled);return hr(r,L,{...ie||{},_f:{...ie&&ie._f?ie._f:{ref:{name:L}},name:L,mount:!0,...V}}),a.mount.add(L),ie?ot({disabled:To(V.disabled)?V.disabled:e.disabled,name:L}):A(L,!0,V.value),{...he?{disabled:V.disabled||e.disabled}:{},...e.progressive?{required:!!V.required,min:Sb(V.min),max:Sb(V.max),minLength:Sb(V.minLength),maxLength:Sb(V.maxLength),pattern:Sb(V.pattern)}:{},name:L,onChange:se,onBlur:se,ref:z=>{if(z){ge(L,V),ie=Ue(r,L);const B=Fr(z.value)&&z.querySelectorAll&&z.querySelectorAll("input,select,textarea")[0]||z,ee=uye(B),we=ie._f.refs||[];if(ee?we.find(Ee=>Ee===B):B===ie._f.ref)return;hr(r,L,{_f:{...ie._f,...ee?{refs:[...we.filter(_S),B,...Array.isArray(Ue(s,L))?[{}]:[]],ref:{type:B.type,name:L}}:{ref:B}}}),A(L,!1,void 0,B)}else ie=Ue(r,L,{}),ie._f&&(ie._f.mount=!1),(e.shouldUnregister||V.shouldUnregister)&&!(zF(a.array,L)&&o.action)&&a.unMount.add(L)}}},Ie=()=>e.shouldFocusError&&Eb(r,J,a.mount),pt=L=>{To(L)&&(p.state.next({disabled:L}),Eb(r,(V,ie)=>{const he=Ue(r,ie);he&&(V.disabled=he._f.disabled||L,Array.isArray(he._f.refs)&&he._f.refs.forEach(z=>{z.disabled=he._f.disabled||L}))},0,!1))},j=(L,V)=>async ie=>{let he;ie&&(ie.preventDefault&&ie.preventDefault(),ie.persist&&ie.persist());let z=gs(i);if(p.state.next({isSubmitting:!0}),e.resolver){const{errors:B,values:ee}=await I();k(),t.errors=B,z=gs(ee)}else await D(r);if(a.disabled.size)for(const B of a.disabled)ys(z,B);if(ys(t.errors,"root"),_i(t.errors)){p.state.next({errors:{}});try{await L(z,ie)}catch(B){he=B}}else V&&await V({...t.errors},ie),Ie(),setTimeout(Ie);if(p.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:_i(t.errors)&&!he,submitCount:t.submitCount+1,errors:t.errors}),he)throw he},Y=(L,V={})=>{Ue(r,L)&&(Fr(V.defaultValue)?X(L,gs(Ue(s,L))):(X(L,V.defaultValue),hr(s,L,gs(V.defaultValue))),V.keepTouched||ys(t.touchedFields,L),V.keepDirty||(ys(t.dirtyFields,L),t.isDirty=V.defaultValue?H(L,gs(Ue(s,L))):H()),V.keepError||(ys(t.errors,L),d.isValid&&w()),p.state.next({...t}))},ce=(L,V={})=>{const ie=L?gs(L):s,he=gs(ie),z=_i(L),B=z?s:he;if(V.keepDefaultValues||(s=ie),!V.keepValues){if(V.keepDirtyValues){const ee=new Set([...a.mount,...Object.keys(kg(s,i))]);for(const we of Array.from(ee)){const Ee=Ue(t.dirtyFields,we),rt=Ue(i,we),en=Ue(B,we);Ee&&!Fr(rt)?hr(B,we,rt):!Ee&&!Fr(en)&&X(we,en)}}else{if(mS&&Fr(L))for(const ee of a.mount){const we=Ue(r,ee);if(we&&we._f){const Ee=Array.isArray(we._f.refs)?we._f.refs[0]:we._f.ref;if(tx(Ee)){const rt=Ee.closest("form");if(rt){rt.reset();break}}}}if(V.keepFieldsRef)for(const ee of a.mount)X(ee,Ue(B,ee));else r={}}i=e.shouldUnregister?V.keepDefaultValues?gs(s):{}:gs(B),p.array.next({values:{...B}}),p.state.next({values:{...B}})}a={mount:V.keepDirtyValues?a.mount:new Set,unMount:new Set,array:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:""},o.mount=!d.isValid||!!V.keepIsValid||!!V.keepDirtyValues||!e.shouldUnregister&&!_i(B),o.watch=!!e.shouldUnregister,o.keepIsValid=!!V.keepIsValid,o.action=!1,V.keepErrors||(t.errors={}),p.state.next({submitCount:V.keepSubmitCount?t.submitCount:0,isDirty:z?!1:V.keepDirty?t.isDirty:!!(V.keepDefaultValues&&!Xa(L,s)),isSubmitted:V.keepIsSubmitted?t.isSubmitted:!1,dirtyFields:z?{}:V.keepDirtyValues?V.keepDefaultValues&&i?kg(s,i):t.dirtyFields:V.keepDefaultValues&&L?kg(s,L):V.keepDirty?t.dirtyFields:{},touchedFields:V.keepTouched?t.touchedFields:{},errors:V.keepErrors?t.errors:{},isSubmitSuccessful:V.keepIsSubmitSuccessful?t.isSubmitSuccessful:!1,isSubmitting:!1,defaultValues:s})},be=(L,V)=>ce(Ei(L)?L(i):L,{...e.resetOptions,...V}),xe=(L,V={})=>{const ie=Ue(r,L),he=ie&&ie._f;if(he){const z=he.refs?he.refs[0]:he.ref;z.focus&&setTimeout(()=>{z.focus(),V.shouldSelect&&Ei(z.select)&&z.select()})}},ne=L=>{t={...t,...L}},ye={control:{register:ge,unregister:We,getFieldState:Pe,handleSubmit:j,setError:Xe,_subscribe:Ye,_runSchema:I,_updateIsValidating:k,_focusError:Ie,_getWatch:re,_getDirty:H,_setValid:w,_setFieldArray:x,_setDisabledField:ot,_setErrors:_,_getFieldArray:ae,_reset:ce,_resetDefaultValues:()=>Ei(e.defaultValues)&&e.defaultValues().then(L=>{be(L,e.resetOptions),p.state.next({isLoading:!1})}),_removeUnmounted:W,_disableForm:pt,_subjects:p,_proxyFormState:d,get _fields(){return r},get _formValues(){return i},get _state(){return o},set _state(L){o=L},get _defaultValues(){return s},get _names(){return a},set _names(L){a=L},get _formState(){return t},get _options(){return e},set _options(L){e={...e,...L}}},subscribe:it,trigger:$,register:ge,handleSubmit:j,watch:qe,setValue:X,getValues:ve,reset:be,resetField:Y,clearErrors:q,unregister:We,setError:Xe,setFocus:xe,getFieldState:Pe};return{...ye,formControl:ye}}function lj(n={}){const e=U.useRef(void 0),t=U.useRef(void 0),[r,s]=U.useState({isDirty:!1,isValidating:!1,isLoading:Ei(n.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:n.errors||{},disabled:n.disabled||!1,isReady:!1,defaultValues:Ei(n.defaultValues)?void 0:n.defaultValues});if(!e.current)if(n.formControl)e.current={...n.formControl,formState:r},n.defaultValues&&!Ei(n.defaultValues)&&n.formControl.reset(n.defaultValues,n.resetOptions);else{const{formControl:o,...a}=Cye(n);e.current={...a,formState:r}}const i=e.current.control;return i._options=n,wS(()=>{const o=i._subscribe({formState:i._proxyFormState,callback:()=>s({...i._formState}),reRenderRoot:!0});return s(a=>({...a,isReady:!0})),i._formState.isReady=!0,o},[i]),U.useEffect(()=>i._disableForm(n.disabled),[i,n.disabled]),U.useEffect(()=>{n.mode&&(i._options.mode=n.mode),n.reValidateMode&&(i._options.reValidateMode=n.reValidateMode)},[i,n.mode,n.reValidateMode]),U.useEffect(()=>{n.errors&&(i._setErrors(n.errors),i._focusError())},[i,n.errors]),U.useEffect(()=>{n.shouldUnregister&&i._subjects.state.next({values:i._getWatch()})},[i,n.shouldUnregister]),U.useEffect(()=>{if(i._proxyFormState.isDirty){const o=i._getDirty();o!==r.isDirty&&i._subjects.state.next({isDirty:o})}},[i,r.isDirty]),U.useEffect(()=>{var o;n.values&&!Xa(n.values,t.current)?(i._reset(n.values,{keepFieldsRef:!0,...i._options.resetOptions}),!((o=i._options.resetOptions)===null||o===void 0)&&o.keepIsValid||i._setValid(),t.current=n.values,s(a=>({...a}))):i._resetDefaultValues()},[i,n.values]),U.useEffect(()=>{i._state.mount||(i._setValid(),i._state.mount=!0),i._state.watch&&(i._state.watch=!1,i._subjects.state.next({...i._formState})),i._removeUnmounted()}),e.current.formState=U.useMemo(()=>HF(r,i),[i,r]),e.current}var Sye=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Eye=Sye.reduce((n,e)=>{const t=pC(`Primitive.${e}`),r=g.forwardRef((s,i)=>{const{asChild:o,...a}=s,l=o?t:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),b.jsx(l,{...a,ref:i})});return r.displayName=`Primitive.${e}`,{...n,[e]:r}},{}),_ye="Label",cj=g.forwardRef((n,e)=>b.jsx(Eye.label,{...n,ref:e,onMouseDown:t=>{var s;t.target.closest("button, input, select, textarea")||((s=n.onMouseDown)==null||s.call(n,t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));cj.displayName=_ye;var uj=cj;const Tye=mC("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),pu=g.forwardRef(({className:n,...e},t)=>b.jsx(uj,{ref:t,className:Pt(Tye(),n),...e}));pu.displayName=uj.displayName;const dj=cye,hj=g.createContext({}),Sg=({...n})=>b.jsx(hj.Provider,{value:{name:n.name},children:b.jsx(aye,{...n})}),rx=()=>{const n=g.useContext(hj),e=g.useContext(fj),{getFieldState:t,formState:r}=lye(),s=t(n.name,r);if(!n)throw new Error("useFormField should be used within <FormField>");const{id:i}=e;return{id:i,name:n.name,formItemId:`${i}-form-item`,formDescriptionId:`${i}-form-item-description`,formMessageId:`${i}-form-item-message`,...s}},fj=g.createContext({}),_p=g.forwardRef(({className:n,...e},t)=>{const r=g.useId();return b.jsx(fj.Provider,{value:{id:r},children:b.jsx("div",{ref:t,className:Pt("space-y-2",n),...e})})});_p.displayName="FormItem";const Tp=g.forwardRef(({className:n,...e},t)=>{const{error:r,formItemId:s}=rx();return b.jsx(pu,{ref:t,className:Pt(r&&"text-destructive",n),htmlFor:s,...e})});Tp.displayName="FormLabel";const Ap=g.forwardRef(({...n},e)=>{const{error:t,formItemId:r,formDescriptionId:s,formMessageId:i}=rx();return b.jsx(B$,{ref:e,id:r,"aria-describedby":t?`${s} ${i}`:`${s}`,"aria-invalid":!!t,...n})});Ap.displayName="FormControl";const Aye=g.forwardRef(({className:n,...e},t)=>{const{formDescriptionId:r}=rx();return b.jsx("p",{ref:t,id:r,className:Pt("text-sm text-muted-foreground",n),...e})});Aye.displayName="FormDescription";const _b=g.forwardRef(({className:n,children:e,...t},r)=>{const{error:s,formMessageId:i}=rx(),o=s?String(s==null?void 0:s.message):e;return o?b.jsx("p",{ref:r,id:i,className:Pt("text-sm font-medium text-destructive",n),...t,children:o}):null});_b.displayName="FormMessage";function pj(n){const e=Nye(n),t=g.forwardRef((r,s)=>{const{children:i,...o}=r,a=g.Children.toArray(i),l=a.find(Oye);if(l){const c=l.props.children,u=a.map(d=>d===l?g.Children.count(c)>1?g.Children.only(null):g.isValidElement(c)?c.props.children:null:d);return b.jsx(e,{...o,ref:s,children:g.isValidElement(c)?g.cloneElement(c,void 0,u):null})}return b.jsx(e,{...o,ref:s,children:i})});return t.displayName=`${n}.Slot`,t}function Nye(n){const e=g.forwardRef((t,r)=>{const{children:s,...i}=t;if(g.isValidElement(s)){const o=Iye(s),a=Pye(i,s.props);return s.type!==g.Fragment&&(a.ref=r?Wd(r,o):o),g.cloneElement(s,a)}return g.Children.count(s)>1?g.Children.only(null):null});return e.displayName=`${n}.SlotClone`,e}var Mye=Symbol("radix.slottable");function Oye(n){return g.isValidElement(n)&&typeof n.type=="function"&&"__radixId"in n.type&&n.type.__radixId===Mye}function Pye(n,e){const t={...e};for(const r in e){const s=n[r],i=e[r];/^on[A-Z]/.test(r)?s&&i?t[r]=(...a)=>{const l=i(...a);return s(...a),l}:s&&(t[r]=s):r==="style"?t[r]={...s,...i}:r==="className"&&(t[r]=[s,i].filter(Boolean).join(" "))}return{...n,...t}}function Iye(n){var r,s;let e=(r=Object.getOwnPropertyDescriptor(n.props,"ref"))==null?void 0:r.get,t=e&&"isReactWarning"in e&&e.isReactWarning;return t?n.ref:(e=(s=Object.getOwnPropertyDescriptor(n,"ref"))==null?void 0:s.get,t=e&&"isReactWarning"in e&&e.isReactWarning,t?n.props.ref:n.props.ref||n.ref)}function mj(n){const e=n+"CollectionProvider",[t,r]=fa(e),[s,i]=t(e,{collectionRef:{current:null},itemMap:new Map}),o=y=>{const{scope:w,children:k}=y,x=U.useRef(null),S=U.useRef(new Map).current;return b.jsx(s,{scope:w,itemMap:S,collectionRef:x,children:k})};o.displayName=e;const a=n+"CollectionSlot",l=pj(a),c=U.forwardRef((y,w)=>{const{scope:k,children:x}=y,S=i(a,k),_=Tr(w,S.collectionRef);return b.jsx(l,{ref:_,children:x})});c.displayName=a;const u=n+"CollectionItemSlot",d="data-radix-collection-item",f=pj(u),p=U.forwardRef((y,w)=>{const{scope:k,children:x,...S}=y,_=U.useRef(null),A=Tr(w,_),T=i(u,k);return U.useEffect(()=>(T.itemMap.set(_,{ref:_,...S}),()=>void T.itemMap.delete(_))),b.jsx(f,{[d]:"",ref:A,children:x})});p.displayName=u;function m(y){const w=i(n+"CollectionConsumer",y);return U.useCallback(()=>{const x=w.collectionRef.current;if(!x)return[];const S=Array.from(x.querySelectorAll(`[${d}]`));return Array.from(w.itemMap.values()).sort((T,O)=>S.indexOf(T.ref.current)-S.indexOf(O.ref.current))},[w.collectionRef,w.itemMap])}return[{Provider:o,Slot:c,ItemSlot:p},m,r]}var Dye=g.createContext(void 0);function sx(n){const e=g.useContext(Dye);return n||e||"ltr"}var AS="rovingFocusGroup.onEntryFocus",Rye={bubbles:!1,cancelable:!0},Tb="RovingFocusGroup",[NS,gj,$ye]=mj(Tb),[Lye,Eg]=fa(Tb,[$ye]),[Fye,jye]=Lye(Tb),yj=g.forwardRef((n,e)=>b.jsx(NS.Provider,{scope:n.__scopeRovingFocusGroup,children:b.jsx(NS.Slot,{scope:n.__scopeRovingFocusGroup,children:b.jsx(Bye,{...n,ref:e})})}));yj.displayName=Tb;var Bye=g.forwardRef((n,e)=>{const{__scopeRovingFocusGroup:t,orientation:r,loop:s=!1,dir:i,currentTabStopId:o,defaultCurrentTabStopId:a,onCurrentTabStopIdChange:l,onEntryFocus:c,preventScrollOnEntryFocus:u=!1,...d}=n,f=g.useRef(null),p=Tr(e,f),m=sx(i),[y,w]=Cp({prop:o,defaultProp:a??null,onChange:l,caller:Tb}),[k,x]=g.useState(!1),S=Kl(c),_=gj(t),A=g.useRef(!1),[T,O]=g.useState(0);return g.useEffect(()=>{const I=f.current;if(I)return I.addEventListener(AS,S),()=>I.removeEventListener(AS,S)},[S]),b.jsx(Fye,{scope:t,orientation:r,dir:m,loop:s,currentTabStopId:y,onItemFocus:g.useCallback(I=>w(I),[w]),onItemShiftTab:g.useCallback(()=>x(!0),[]),onFocusableItemAdd:g.useCallback(()=>O(I=>I+1),[]),onFocusableItemRemove:g.useCallback(()=>O(I=>I-1),[]),children:b.jsx(Un.div,{tabIndex:k||T===0?-1:0,"data-orientation":r,...d,ref:p,style:{outline:"none",...n.style},onMouseDown:Dt(n.onMouseDown,()=>{A.current=!0}),onFocus:Dt(n.onFocus,I=>{const R=!A.current;if(I.target===I.currentTarget&&R&&!k){const D=new CustomEvent(AS,Rye);if(I.currentTarget.dispatchEvent(D),!D.defaultPrevented){const W=_().filter(le=>le.focusable),H=W.find(le=>le.active),re=W.find(le=>le.id===y),de=[H,re,...W].filter(Boolean).map(le=>le.ref.current);wj(de,u)}}A.current=!1}),onBlur:Dt(n.onBlur,()=>x(!1))})})}),vj="RovingFocusGroupItem",bj=g.forwardRef((n,e)=>{const{__scopeRovingFocusGroup:t,focusable:r=!0,active:s=!1,tabStopId:i,children:o,...a}=n,l=kp(),c=i||l,u=jye(vj,t),d=u.currentTabStopId===c,f=gj(t),{onFocusableItemAdd:p,onFocusableItemRemove:m,currentTabStopId:y}=u;return g.useEffect(()=>{if(r)return p(),()=>m()},[r,p,m]),b.jsx(NS.ItemSlot,{scope:t,id:c,focusable:r,active:s,children:b.jsx(Un.span,{tabIndex:d?0:-1,"data-orientation":u.orientation,...a,ref:e,onMouseDown:Dt(n.onMouseDown,w=>{r?u.onItemFocus(c):w.preventDefault()}),onFocus:Dt(n.onFocus,()=>u.onItemFocus(c)),onKeyDown:Dt(n.onKeyDown,w=>{if(w.key==="Tab"&&w.shiftKey){u.onItemShiftTab();return}if(w.target!==w.currentTarget)return;const k=Hye(w,u.orientation,u.dir);if(k!==void 0){if(w.metaKey||w.ctrlKey||w.altKey||w.shiftKey)return;w.preventDefault();let S=f().filter(_=>_.focusable).map(_=>_.ref.current);if(k==="last")S.reverse();else if(k==="prev"||k==="next"){k==="prev"&&S.reverse();const _=S.indexOf(w.currentTarget);S=u.loop?qye(S,_+1):S.slice(_+1)}setTimeout(()=>wj(S))}}),children:typeof o=="function"?o({isCurrentTabStop:d,hasTabStop:y!=null}):o})})});bj.displayName=vj;var Vye={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function zye(n,e){return e!=="rtl"?n:n==="ArrowLeft"?"ArrowRight":n==="ArrowRight"?"ArrowLeft":n}function Hye(n,e,t){const r=zye(n.key,t);if(!(e==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(e==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return Vye[r]}function wj(n,e=!1){const t=document.activeElement;for(const r of n)if(r===t||(r.focus({preventScroll:e}),document.activeElement!==t))return}function qye(n,e){return n.map((t,r)=>n[(e+r)%n.length])}var MS=yj,OS=bj,ix="Tabs",[Uye]=fa(ix,[Eg]),xj=Eg(),[Wye,PS]=Uye(ix),kj=g.forwardRef((n,e)=>{const{__scopeTabs:t,value:r,onValueChange:s,defaultValue:i,orientation:o="horizontal",dir:a,activationMode:l="automatic",...c}=n,u=sx(a),[d,f]=Cp({prop:r,onChange:s,defaultProp:i??"",caller:ix});return b.jsx(Wye,{scope:t,baseId:kp(),value:d,onValueChange:f,orientation:o,dir:u,activationMode:l,children:b.jsx(Un.div,{dir:u,"data-orientation":o,...c,ref:e})})});kj.displayName=ix;var Cj="TabsList",Sj=g.forwardRef((n,e)=>{const{__scopeTabs:t,loop:r=!0,...s}=n,i=PS(Cj,t),o=xj(t);return b.jsx(MS,{asChild:!0,...o,orientation:i.orientation,dir:i.dir,loop:r,children:b.jsx(Un.div,{role:"tablist","aria-orientation":i.orientation,...s,ref:e})})});Sj.displayName=Cj;var Ej="TabsTrigger",_j=g.forwardRef((n,e)=>{const{__scopeTabs:t,value:r,disabled:s=!1,...i}=n,o=PS(Ej,t),a=xj(t),l=Nj(o.baseId,r),c=Mj(o.baseId,r),u=r===o.value;return b.jsx(OS,{asChild:!0,...a,focusable:!s,active:u,children:b.jsx(Un.button,{type:"button",role:"tab","aria-selected":u,"aria-controls":c,"data-state":u?"active":"inactive","data-disabled":s?"":void 0,disabled:s,id:l,...i,ref:e,onMouseDown:Dt(n.onMouseDown,d=>{!s&&d.button===0&&d.ctrlKey===!1?o.onValueChange(r):d.preventDefault()}),onKeyDown:Dt(n.onKeyDown,d=>{[" ","Enter"].includes(d.key)&&o.onValueChange(r)}),onFocus:Dt(n.onFocus,()=>{const d=o.activationMode!=="manual";!u&&!s&&d&&o.onValueChange(r)})})})});_j.displayName=Ej;var Tj="TabsContent",Aj=g.forwardRef((n,e)=>{const{__scopeTabs:t,value:r,forceMount:s,children:i,...o}=n,a=PS(Tj,t),l=Nj(a.baseId,r),c=Mj(a.baseId,r),u=r===a.value,d=g.useRef(u);return g.useEffect(()=>{const f=requestAnimationFrame(()=>d.current=!1);return()=>cancelAnimationFrame(f)},[]),b.jsx(Ka,{present:s||u,children:({present:f})=>b.jsx(Un.div,{"data-state":u?"active":"inactive","data-orientation":a.orientation,role:"tabpanel","aria-labelledby":l,hidden:!f,id:c,tabIndex:0,...o,ref:e,style:{...n.style,animationDuration:d.current?"0s":void 0},children:f&&i})})});Aj.displayName=Tj;function Nj(n,e){return`${n}-trigger-${e}`}function Mj(n,e){return`${n}-content-${e}`}var Gye=kj,Oj=Sj,Pj=_j,Ij=Aj;const Dj=Gye,IS=g.forwardRef(({className:n,...e},t)=>b.jsx(Oj,{ref:t,className:Pt("inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",n),...e}));IS.displayName=Oj.displayName;const _g=g.forwardRef(({className:n,...e},t)=>b.jsx(Pj,{ref:t,className:Pt("inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",n),...e}));_g.displayName=Pj.displayName;const Tg=g.forwardRef(({className:n,...e},t)=>b.jsx(Ij,{ref:t,className:Pt("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",n),...e}));Tg.displayName=Ij.displayName;function DS(n){const e=g.useRef({value:n,previous:n});return g.useMemo(()=>(e.current.value!==n&&(e.current.previous=e.current.value,e.current.value=n),e.current.previous),[n])}function ox(n){const[e,t]=g.useState(void 0);return Ga(()=>{if(n){t({width:n.offsetWidth,height:n.offsetHeight});const r=new ResizeObserver(s=>{if(!Array.isArray(s)||!s.length)return;const i=s[0];let o,a;if("borderBoxSize"in i){const l=i.borderBoxSize,c=Array.isArray(l)?l[0]:l;o=c.inlineSize,a=c.blockSize}else o=n.offsetWidth,a=n.offsetHeight;t({width:o,height:a})});return r.observe(n,{box:"border-box"}),()=>r.unobserve(n)}else t(void 0)},[n]),e}var ax="Switch",[Kye]=fa(ax),[Yye,Zye]=Kye(ax),Rj=g.forwardRef((n,e)=>{const{__scopeSwitch:t,name:r,checked:s,defaultChecked:i,required:o,disabled:a,value:l="on",onCheckedChange:c,form:u,...d}=n,[f,p]=g.useState(null),m=Tr(e,S=>p(S)),y=g.useRef(!1),w=f?u||!!f.closest("form"):!0,[k,x]=Cp({prop:s,defaultProp:i??!1,onChange:c,caller:ax});return b.jsxs(Yye,{scope:t,checked:k,disabled:a,children:[b.jsx(Un.button,{type:"button",role:"switch","aria-checked":k,"aria-required":o,"data-state":jj(k),"data-disabled":a?"":void 0,disabled:a,value:l,...d,ref:m,onClick:Dt(n.onClick,S=>{x(_=>!_),w&&(y.current=S.isPropagationStopped(),y.current||S.stopPropagation())})}),w&&b.jsx(Fj,{control:f,bubbles:!y.current,name:r,value:l,checked:k,required:o,disabled:a,form:u,style:{transform:"translateX(-100%)"}})]})});Rj.displayName=ax;var $j="SwitchThumb",Lj=g.forwardRef((n,e)=>{const{__scopeSwitch:t,...r}=n,s=Zye($j,t);return b.jsx(Un.span,{"data-state":jj(s.checked),"data-disabled":s.disabled?"":void 0,...r,ref:e})});Lj.displayName=$j;var Xye="SwitchBubbleInput",Fj=g.forwardRef(({__scopeSwitch:n,control:e,checked:t,bubbles:r=!0,...s},i)=>{const o=g.useRef(null),a=Tr(o,i),l=DS(t),c=ox(e);return g.useEffect(()=>{const u=o.current;if(!u)return;const d=window.HTMLInputElement.prototype,p=Object.getOwnPropertyDescriptor(d,"checked").set;if(l!==t&&p){const m=new Event("click",{bubbles:r});p.call(u,t),u.dispatchEvent(m)}},[l,t,r]),b.jsx("input",{type:"checkbox","aria-hidden":!0,defaultChecked:t,...s,tabIndex:-1,ref:a,style:{...s.style,...c,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});Fj.displayName=Xye;function jj(n){return n?"checked":"unchecked"}var Bj=Rj,Jye=Lj;const RS=g.forwardRef(({className:n,...e},t)=>b.jsx(Bj,{className:Pt("peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50",n),...e,ref:t,children:b.jsx(Jye,{className:Pt("pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0")})}));RS.displayName=Bj.displayName;var lx="Checkbox",[Qye]=fa(lx),[eve,$S]=Qye(lx);function tve(n){const{__scopeCheckbox:e,checked:t,children:r,defaultChecked:s,disabled:i,form:o,name:a,onCheckedChange:l,required:c,value:u="on",internal_do_not_use_render:d}=n,[f,p]=Cp({prop:t,defaultProp:s??!1,onChange:l,caller:lx}),[m,y]=g.useState(null),[w,k]=g.useState(null),x=g.useRef(!1),S=m?!!o||!!m.closest("form"):!0,_={checked:f,disabled:i,setChecked:p,control:m,setControl:y,name:a,form:o,value:u,hasConsumerStoppedPropagationRef:x,required:c,defaultChecked:th(s)?!1:s,isFormControl:S,bubbleInput:w,setBubbleInput:k};return b.jsx(eve,{scope:e,..._,children:nve(d)?d(_):r})}var Vj="CheckboxTrigger",zj=g.forwardRef(({__scopeCheckbox:n,onKeyDown:e,onClick:t,...r},s)=>{const{control:i,value:o,disabled:a,checked:l,required:c,setControl:u,setChecked:d,hasConsumerStoppedPropagationRef:f,isFormControl:p,bubbleInput:m}=$S(Vj,n),y=Tr(s,u),w=g.useRef(l);return g.useEffect(()=>{const k=i==null?void 0:i.form;if(k){const x=()=>d(w.current);return k.addEventListener("reset",x),()=>k.removeEventListener("reset",x)}},[i,d]),b.jsx(Un.button,{type:"button",role:"checkbox","aria-checked":th(l)?"mixed":l,"aria-required":c,"data-state":Gj(l),"data-disabled":a?"":void 0,disabled:a,value:o,...r,ref:y,onKeyDown:Dt(e,k=>{k.key==="Enter"&&k.preventDefault()}),onClick:Dt(t,k=>{d(x=>th(x)?!0:!x),m&&p&&(f.current=k.isPropagationStopped(),f.current||k.stopPropagation())})})});zj.displayName=Vj;var LS=g.forwardRef((n,e)=>{const{__scopeCheckbox:t,name:r,checked:s,defaultChecked:i,required:o,disabled:a,value:l,onCheckedChange:c,form:u,...d}=n;return b.jsx(tve,{__scopeCheckbox:t,checked:s,defaultChecked:i,disabled:a,required:o,onCheckedChange:c,name:r,form:u,value:l,internal_do_not_use_render:({isFormControl:f})=>b.jsxs(b.Fragment,{children:[b.jsx(zj,{...d,ref:e,__scopeCheckbox:t}),f&&b.jsx(Wj,{__scopeCheckbox:t})]})})});LS.displayName=lx;var Hj="CheckboxIndicator",qj=g.forwardRef((n,e)=>{const{__scopeCheckbox:t,forceMount:r,...s}=n,i=$S(Hj,t);return b.jsx(Ka,{present:r||th(i.checked)||i.checked===!0,children:b.jsx(Un.span,{"data-state":Gj(i.checked),"data-disabled":i.disabled?"":void 0,...s,ref:e,style:{pointerEvents:"none",...n.style}})})});qj.displayName=Hj;var Uj="CheckboxBubbleInput",Wj=g.forwardRef(({__scopeCheckbox:n,...e},t)=>{const{control:r,hasConsumerStoppedPropagationRef:s,checked:i,defaultChecked:o,required:a,disabled:l,name:c,value:u,form:d,bubbleInput:f,setBubbleInput:p}=$S(Uj,n),m=Tr(t,p),y=DS(i),w=ox(r);g.useEffect(()=>{const x=f;if(!x)return;const S=window.HTMLInputElement.prototype,A=Object.getOwnPropertyDescriptor(S,"checked").set,T=!s.current;if(y!==i&&A){const O=new Event("click",{bubbles:T});x.indeterminate=th(i),A.call(x,th(i)?!1:i),x.dispatchEvent(O)}},[f,y,i,s]);const k=g.useRef(th(i)?!1:i);return b.jsx(Un.input,{type:"checkbox","aria-hidden":!0,defaultChecked:o??k.current,required:a,disabled:l,name:c,value:u,form:d,...e,tabIndex:-1,ref:m,style:{...e.style,...w,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});Wj.displayName=Uj;function nve(n){return typeof n=="function"}function th(n){return n==="indeterminate"}function Gj(n){return th(n)?"indeterminate":n?"checked":"unchecked"}const cx=g.forwardRef(({className:n,...e},t)=>b.jsx(LS,{ref:t,className:Pt("peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",n),...e,children:b.jsx(qj,{className:Pt("flex items-center justify-center text-current"),children:b.jsx(Se.Check,{className:"h-4 w-4"})})}));cx.displayName=LS.displayName;const ux=g.forwardRef(({className:n,...e},t)=>b.jsx("div",{ref:t,className:Pt("rounded-lg bg-card text-card-foreground shadow-sm",n),...e}));ux.displayName="Card";const rve=g.forwardRef(({className:n,...e},t)=>b.jsx("div",{ref:t,className:Pt("flex flex-col space-y-1.5 p-6",n),...e}));rve.displayName="CardHeader";const sve=g.forwardRef(({className:n,...e},t)=>b.jsx("h3",{ref:t,className:Pt("text-2xl font-semibold leading-none tracking-tight",n),...e}));sve.displayName="CardTitle";const ive=g.forwardRef(({className:n,...e},t)=>b.jsx("p",{ref:t,className:Pt("text-sm text-muted-foreground",n),...e}));ive.displayName="CardDescription";const dx=g.forwardRef(({className:n,...e},t)=>b.jsx("div",{ref:t,className:Pt("p-6 pt-0",n),...e}));dx.displayName="CardContent";const ove=g.forwardRef(({className:n,...e},t)=>b.jsx("div",{ref:t,className:Pt("flex items-center p-6 pt-0",n),...e}));ove.displayName="CardFooter";const Kj=(n,e,t)=>{if(n&&"reportValidity"in n){const r=Ue(t,e);n.setCustomValidity(r&&r.message||""),n.reportValidity()}},Yj=(n,e)=>{for(const t in e.fields){const r=e.fields[t];r&&r.ref&&"reportValidity"in r.ref?Kj(r.ref,t,n):r.refs&&r.refs.forEach(s=>Kj(s,t,n))}},ave=(n,e)=>{e.shouldUseNativeValidation&&Yj(n,e);const t={};for(const r in n){const s=Ue(e.fields,r),i=Object.assign(n[r]||{},{ref:s&&s.ref});if(lve(e.names||Object.keys(n),r)){const o=Object.assign({},Ue(t,r));hr(o,"root",i),hr(t,r,o)}else hr(t,r,i)}return t},lve=(n,e)=>n.some(t=>t.startsWith(e+"."));var cve=function(n,e){for(var t={};n.length;){var r=n[0],s=r.code,i=r.message,o=r.path.join(".");if(!t[o])if("unionErrors"in r){var a=r.unionErrors[0].errors[0];t[o]={message:a.message,type:a.code}}else t[o]={message:i,type:s};if("unionErrors"in r&&r.unionErrors.forEach(function(u){return u.errors.forEach(function(d){return n.push(d)})}),e){var l=t[o].types,c=l&&l[r.code];t[o]=qF(o,e,t,s,c?[].concat(c,r.message):r.message)}n.shift()}return t},Zj=function(n,e,t){return t===void 0&&(t={}),function(r,s,i){try{return Promise.resolve(function(o,a){try{var l=Promise.resolve(n[t.mode==="sync"?"parse":"parseAsync"](r,e)).then(function(c){return i.shouldUseNativeValidation&&Yj({},i),{errors:{},values:t.raw?r:c}})}catch(c){return a(c)}return l&&l.then?l.then(void 0,a):l}(0,function(o){if(function(a){return Array.isArray(a==null?void 0:a.errors)}(o))return{values:{},errors:ave(cve(o.errors,!i.shouldUseNativeValidation&&i.criteriaMode==="all"),i)};throw o}))}catch(o){return Promise.reject(o)}}};const uve=mC("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function Ab({className:n,variant:e,...t}){return b.jsx("div",{className:Pt(uve({variant:e}),n),...t})}const dve=(n,e,t)=>{const r=n[e];return r?typeof r=="function"?r():Promise.resolve(r):new Promise((s,i)=>{(typeof queueMicrotask=="function"?queueMicrotask:setTimeout)(i.bind(null,new Error("Unknown variable dynamic import: "+e+(e.split("/").length!==t?". Note that variables only represent file names one level deep.":""))))})},Ag="en",ts={},hx={},Np={};let fx=[];const hve=n=>(fx.push(n),()=>{fx=fx.filter(e=>e!==n)}),Xj=()=>{fx.forEach(n=>n())},fve=n=>Np[n]?Promise.resolve(ts[n]||{}):hx[n]||(()=>{const e=dve(Object.assign({}),`./i18n/${n}.json`,3).then(t=>{const r=t.default,s=ts[n]||{};return ts[n]={...s,...r},Np[n]=!0,delete hx[n],Xj(),ts[n]}).catch(t=>(console.warn(`Could not load translations for language: ${n}`,t),delete hx[n],Xj(),ts[n]||{}));return hx[n]=e,e})(),pve=n=>{var r;if(typeof document>"u")return null;const t=`; ${document.cookie}`.split(`; ${n}=`);return t.length===2&&((r=t.pop())==null?void 0:r.split(";").shift())||null},mve=(n,e,t=365)=>{if(typeof document>"u")return;const r=new Date;r.setTime(r.getTime()+t*24*60*60*1e3),document.cookie=`${n}=${e};expires=${r.toUTCString()};path=/;SameSite=Lax`},FS=()=>{if(typeof window<"u"){const n=pve("lang");if(n&&n.length===2)return n;const t=new URLSearchParams(window.location.search).get("lang");if(t&&t.length===2)return mve("lang",t),t;const r=navigator.languages||[navigator.language];for(const s of r){const i=s.split("-")[0];if(i&&i.length===2)return i}}return Ag},gve=FS,Be=(n,e)=>{const t=e||FS();return Np[t]&&ts[t]&&ts[t][n]!==void 0?ts[t][n]:t!==Ag&&Np[Ag]&&ts[Ag]&&ts[Ag][n]!==void 0?ts[Ag][n]:(ts[t]||(ts[t]={}),ts[t][n]===void 0&&(ts[t][n]=n),n)},St=({children:n})=>{const[,e]=U.useState(0);U.useEffect(()=>hve(()=>{e(i=>i+1)}),[]);const t=FS();U.useEffect(()=>{fve(t)},[t]);const r=U.useMemo(()=>typeof n=="string"?n:U.isValidElement(n)&&typeof n.props.children=="string"?n.props.children:null,[n]);if(!r)return b.jsx(b.Fragment,{children:n});const s=Be(r,t);return U.isValidElement(n)&&typeof n.props.children=="string"?U.cloneElement(n,{},s):b.jsx(b.Fragment,{children:s})},yve=n=>n?ts[n]||{}:ts,vve=(n="en")=>{const e=ts[n]||{},t=Np[n],r=Object.keys(e).sort().reduce((l,c)=>(l[c]=e[c],l),{}),s=JSON.stringify(r,null,2),i=new Blob([s],{type:"application/json"}),o=URL.createObjectURL(i),a=document.createElement("a");a.href=o,a.download=`${n}.json`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(o),console.log(`Downloaded ${Object.keys(r).length} translation keys for language: ${n} (${t?"loaded from file":"auto-collected"})`)},bve=n=>{if(n)return{loaded:Np[n]||!1,keysCount:Object.keys(ts[n]||{}).length};const e={};for(const t of Object.keys(ts))e[t]={loaded:Np[t]||!1,keysCount:Object.keys(ts[t]||{}).length};return e};typeof window<"u"&&(window.getTranslationCache=yve,window.translate=Be,window.getCurrentLang=gve,window.downloadTranslations=vve,window.getTranslationStatus=bve);const wve=({isOpen:n,onClose:e,onSelect:t,onMultiSelect:r,onMultiSelectPictures:s,currentValue:i,currentValues:o=[],multiple:a=!1})=>{const{user:l}=du(),[c,u]=U.useState([]),[d,f]=U.useState([]),[p,m]=U.useState([]),[y,w]=U.useState(!1),[k,x]=U.useState(""),[S,_]=U.useState([]),[A,T]=U.useState([]),[O,I]=U.useState([]),[R,D]=U.useState(i||null);U.useEffect(()=>{n&&(W(),H(),re())},[n]),U.useEffect(()=>{n&&(a?JSON.stringify(O)!==JSON.stringify(o)&&I(o||[]):R!==i&&D(i||null))},[n,i,o,a]);const W=async()=>{w(!0);try{const{data:J,error:$}=await Yt.from("pictures").select("id, title, image_url, thumbnail_url, type, user_id, tags, meta").eq("is_selected",!0).order("created_at",{ascending:!1}).limit(100);if($)throw $;u(J||[])}catch(J){console.error("Error fetching pictures:",J)}finally{w(!1)}},H=async()=>{try{const{data:J,error:$}=await Yt.from("pictures").select("tags").eq("is_selected",!0);if($)throw $;const ve=new Set;J==null||J.forEach(Pe=>{var q;(q=Pe.tags)==null||q.forEach(Xe=>ve.add(Xe))}),f(Array.from(ve).sort())}catch(J){console.error("Error fetching tags:",J)}},re=async()=>{if(l)try{const{data:J,error:$}=await Yt.from("collections").select("id, name, slug").eq("user_id",l.id).order("name");if($)throw $;m(J||[])}catch(J){console.error("Error fetching collections:",J)}},ae=U.useMemo(()=>c.filter(J=>{const $=J.title.toLowerCase().includes(k.toLowerCase())||J.id.toLowerCase().includes(k.toLowerCase()),ve=S.length===0||J.tags&&S.some(Pe=>{var q;return(q=J.tags)==null?void 0:q.includes(Pe)});return $&&ve}),[c,k,S]),[de,le]=U.useState([]);U.useEffect(()=>{(async()=>{if(A.length===0){le(ae);return}try{const{data:$,error:ve}=await Yt.from("collection_pictures").select("picture_id").in("collection_id",A);if(ve)throw ve;const Pe=new Set(($==null?void 0:$.map(q=>q.picture_id))||[]);le(ae.filter(q=>Pe.has(q.id)))}catch($){console.error("Error filtering by collections:",$),le(ae)}})()},[ae,A]);const X=()=>{if(a){if(r&&r(O),s){const J=c.filter($=>O.includes($.id));s(J)}}else R&&t&&t(R)},se=J=>{a?I($=>$.includes(J)?$.filter(ve=>ve!==J):[...$,J]):D(J)};return b.jsx(pS,{open:n,onOpenChange:e,children:b.jsxs(Z6,{className:"max-w-4xl max-h-[80vh] overflow-hidden flex flex-col",children:[b.jsxs(X6,{children:[b.jsx(J6,{children:b.jsx(St,{children:"Select Picture"})}),b.jsx(jF,{children:b.jsx(St,{children:"Choose a picture from your published images"})})]}),b.jsxs("div",{className:"relative",children:[b.jsx(Se.Search,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground"}),b.jsx(xb,{placeholder:Be("Search by title or ID..."),value:k,onChange:J=>x(J.target.value),className:"pl-10"})]}),b.jsxs("div",{className:"space-y-3",children:[d.length>0&&b.jsxs("div",{className:"space-y-2",children:[b.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium text-muted-foreground",children:[b.jsx(Se.Tag,{className:"h-4 w-4"}),b.jsx("span",{children:b.jsx(St,{children:"Tags"})}),S.length>0&&b.jsx(yt,{variant:"ghost",size:"sm",className:"h-6 px-2 text-xs",onClick:()=>_([]),children:b.jsx(St,{children:"Clear"})})]}),b.jsx("div",{className:"flex flex-wrap gap-2",children:d.slice(0,12).map(J=>b.jsxs(Ab,{variant:S.includes(J)?"default":"outline",className:"cursor-pointer hover:shadow-md transition-shadow",onClick:()=>{_($=>$.includes(J)?$.filter(ve=>ve!==J):[...$,J])},children:[J,S.includes(J)&&b.jsx(Se.X,{className:"ml-1 h-3 w-3"})]},J))})]}),p.length>0&&b.jsxs("div",{className:"space-y-2",children:[b.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium text-muted-foreground",children:[b.jsx(Se.FolderOpen,{className:"h-4 w-4"}),b.jsx("span",{children:b.jsx(St,{children:"Collections"})}),A.length>0&&b.jsx(yt,{variant:"ghost",size:"sm",className:"h-6 px-2 text-xs",onClick:()=>T([]),children:b.jsx(St,{children:"Clear"})})]}),b.jsx("div",{className:"flex flex-wrap gap-2",children:p.map(J=>b.jsxs(Ab,{variant:A.includes(J.id)?"default":"outline",className:"cursor-pointer hover:shadow-md transition-shadow",onClick:()=>{T($=>$.includes(J.id)?$.filter(ve=>ve!==J.id):[...$,J.id])},children:[J.name,A.includes(J.id)&&b.jsx(Se.X,{className:"ml-1 h-3 w-3"})]},J.id))})]})]}),b.jsx("div",{className:"flex-1 overflow-y-auto min-h-0 -mx-6 px-6",children:y?b.jsx("div",{className:"flex items-center justify-center py-12",children:b.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary"})}):de.length===0?b.jsxs("div",{className:"text-center py-12",children:[b.jsx(Se.Image,{className:"h-12 w-12 mx-auto mb-4 text-muted-foreground opacity-50"}),b.jsx("p",{className:"text-muted-foreground",children:b.jsx(St,{children:k||S.length>0||A.length>0?"No pictures found":"No pictures available"})})]}):b.jsx("div",{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4 p-1",children:de.map(J=>{const $=a?O.includes(J.id):R===J.id;return b.jsxs("div",{onClick:()=>se(J.id),onDoubleClick:()=>{a?se(J.id):(D(J.id),t&&t(J.id))},className:`relative cursor-pointer rounded-lg overflow-hidden border-2 transition-all group ${$?"border-primary shadow-lg scale-[1.02]":"border-transparent hover:border-primary/50"}`,children:[b.jsx("div",{className:"aspect-square relative pointer-events-none",children:b.jsx(oA,{id:J.id,pictureId:J.id,url:J.image_url,thumbnailUrl:J.thumbnail_url,title:J.title,author:"Me",authorId:J.user_id,likes:0,comments:0,type:J.type,meta:J.meta,showContent:!1,onClick:()=>{},onLike:void 0,onDelete:void 0,onEdit:void 0})}),b.jsx("div",{className:"absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/80 to-transparent p-2 pointer-events-none",children:b.jsx("p",{className:"text-white text-xs font-medium truncate",children:J.title})})]},J.id)})})}),b.jsxs("div",{className:"flex justify-between items-center pt-4 border-t mt-auto",children:[b.jsx("div",{className:"text-sm text-muted-foreground",children:a&&b.jsxs("span",{children:[O.length," selected"]})}),b.jsxs("div",{className:"flex gap-2",children:[b.jsx(yt,{variant:"outline",onClick:e,children:b.jsx(St,{children:"Cancel"})}),b.jsx(yt,{onClick:X,disabled:a?O.length===0:!R,children:b.jsxs(St,{children:["Select Picture",a?"s":""]})})]})]})]})})},xve=U.lazy(()=>Promise.resolve().then(()=>FVe)),Jj=({value:n,onChange:e,placeholder:t="Enter description...",className:r="",onKeyDown:s})=>{const[i,o]=U.useState("editor"),[a,l]=U.useState(!1),c=U.useRef(null);U.useCallback(f=>(console.log("[handleImageUpload] Called from image-block, opening ImagePickerDialog"),new Promise(p=>{c.current=p,console.log("[handleImageUpload] Resolve function stored in ref"),l(!0)})),[]);const u=U.useCallback(async f=>{console.log("[handleImageSelect] Selected picture ID:",f);try{const{data:p,error:m}=await Yt.from("pictures").select("image_url").eq("id",f).single();if(m)throw m;const y=p.image_url,w=c.current;w&&(c.current=null,w(y)),l(!1)}catch(p){console.error("[handleImageSelect] Error fetching image:",p),c.current&&(c.current(""),c.current=null),l(!1)}},[]),d=U.useCallback(f=>{e(f.target.value)},[e]);return b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:`border rounded-md bg-background ${r}`,children:[b.jsxs("div",{className:"flex border-b",children:[b.jsx("button",{type:"button",onClick:()=>o("editor"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${i==="editor"?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground hover:border-border"}`,children:"Editor"}),b.jsx("button",{type:"button",onClick:()=>o("raw"),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${i==="raw"?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground hover:border-border"}`,children:"Markdown"})]}),i==="editor"&&b.jsx(U.Suspense,{fallback:b.jsx("div",{className:"p-3 text-muted-foreground",children:"Loading editor..."}),children:b.jsx(xve,{value:n,onChange:e,className:r})}),i==="raw"&&b.jsx("textarea",{value:n||"",onChange:d,onKeyDown:s,placeholder:t,className:"w-full p-3 bg-transparent border-0 rounded-b-md focus:ring-0 focus:outline-none resize-none font-mono text-sm",style:{height:"120px",minHeight:"120px"},"aria-label":"Raw markdown input",autoFocus:!0})]}),b.jsx(wve,{isOpen:a,onClose:()=>{l(!1),c.current&&(c.current(""),c.current=null)},onSelect:u,currentValue:null})]})};Jj.displayName="MarkdownEditor";const Qj=U.memo(Jj,(n,e)=>n.value===e.value&&n.placeholder===e.placeholder&&n.className===e.className&&n.onKeyDown===e.onKeyDown);var kve=Symbol("radix.slottable");function Cve(n){const e=({children:t})=>b.jsx(b.Fragment,{children:t});return e.displayName=`${n}.Slottable`,e.__radixId=kve,e}var eB="AlertDialog",[Sve]=fa(eB,[wF]),mu=wF(),tB=n=>{const{__scopeAlertDialog:e,...t}=n,r=mu(e);return b.jsx($F,{...r,...t,modal:!0})};tB.displayName=eB;var Eve="AlertDialogTrigger",_ve=g.forwardRef((n,e)=>{const{__scopeAlertDialog:t,...r}=n,s=mu(t);return b.jsx(eye,{...s,...r,ref:e})});_ve.displayName=Eve;var Tve="AlertDialogPortal",nB=n=>{const{__scopeAlertDialog:e,...t}=n,r=mu(e);return b.jsx(LF,{...r,...t})};nB.displayName=Tve;var Ave="AlertDialogOverlay",rB=g.forwardRef((n,e)=>{const{__scopeAlertDialog:t,...r}=n,s=mu(t);return b.jsx(cS,{...s,...r,ref:e})});rB.displayName=Ave;var Ng="AlertDialogContent",[Nve,Mve]=Sve(Ng),Ove=Cve("AlertDialogContent"),sB=g.forwardRef((n,e)=>{const{__scopeAlertDialog:t,children:r,...s}=n,i=mu(t),o=g.useRef(null),a=Tr(e,o),l=g.useRef(null);return b.jsx(Z1e,{contentName:Ng,titleName:iB,docsSlug:"alert-dialog",children:b.jsx(Nve,{scope:t,cancelRef:l,children:b.jsxs(uS,{role:"alertdialog",...i,...s,ref:a,onOpenAutoFocus:Dt(s.onOpenAutoFocus,c=>{var u;c.preventDefault(),(u=l.current)==null||u.focus({preventScroll:!0})}),onPointerDownOutside:c=>c.preventDefault(),onInteractOutside:c=>c.preventDefault(),children:[b.jsx(Ove,{children:r}),b.jsx(Ive,{contentRef:o})]})})})});sB.displayName=Ng;var iB="AlertDialogTitle",oB=g.forwardRef((n,e)=>{const{__scopeAlertDialog:t,...r}=n,s=mu(t);return b.jsx(dS,{...s,...r,ref:e})});oB.displayName=iB;var aB="AlertDialogDescription",lB=g.forwardRef((n,e)=>{const{__scopeAlertDialog:t,...r}=n,s=mu(t);return b.jsx(hS,{...s,...r,ref:e})});lB.displayName=aB;var Pve="AlertDialogAction",cB=g.forwardRef((n,e)=>{const{__scopeAlertDialog:t,...r}=n,s=mu(t);return b.jsx(fS,{...s,...r,ref:e})});cB.displayName=Pve;var uB="AlertDialogCancel",dB=g.forwardRef((n,e)=>{const{__scopeAlertDialog:t,...r}=n,{cancelRef:s}=Mve(uB,t),i=mu(t),o=Tr(e,s);return b.jsx(fS,{...i,...r,ref:o})});dB.displayName=uB;var Ive=({contentRef:n})=>{const e=`\`${Ng}\` requires a description for the component to be accessible for screen reader users. + +You can add a description to the \`${Ng}\` by passing a \`${aB}\` component as a child, which also benefits sighted users by adding visible context to the dialog. + +Alternatively, you can use your own component as a description by assigning it an \`id\` and passing the same value to the \`aria-describedby\` prop in \`${Ng}\`. If the description is confusing or duplicative for sighted users, you can use the \`@radix-ui/react-visually-hidden\` primitive as a wrapper around your description component. + +For more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;return g.useEffect(()=>{var r;document.getElementById((r=n.current)==null?void 0:r.getAttribute("aria-describedby"))||console.warn(e)},[e,n]),null},Dve=tB,Rve=nB,hB=rB,fB=sB,pB=cB,mB=dB,gB=oB,yB=lB;const $ve=Dve,Lve=Rve,vB=g.forwardRef(({className:n,...e},t)=>b.jsx(hB,{className:Pt("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",n),...e,ref:t}));vB.displayName=hB.displayName;const bB=g.forwardRef(({className:n,...e},t)=>b.jsxs(Lve,{children:[b.jsx(vB,{}),b.jsx(fB,{ref:t,className:Pt("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",n),...e})]}));bB.displayName=fB.displayName;const wB=({className:n,...e})=>b.jsx("div",{className:Pt("flex flex-col space-y-2 text-center sm:text-left",n),...e});wB.displayName="AlertDialogHeader";const xB=({className:n,...e})=>b.jsx("div",{className:Pt("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",n),...e});xB.displayName="AlertDialogFooter";const kB=g.forwardRef(({className:n,...e},t)=>b.jsx(gB,{ref:t,className:Pt("text-lg font-semibold",n),...e}));kB.displayName=gB.displayName;const CB=g.forwardRef(({className:n,...e},t)=>b.jsx(yB,{ref:t,className:Pt("text-sm text-muted-foreground",n),...e}));CB.displayName=yB.displayName;const SB=g.forwardRef(({className:n,...e},t)=>b.jsx(pB,{ref:t,className:Pt(bC(),n),...e}));SB.displayName=pB.displayName;const EB=g.forwardRef(({className:n,...e},t)=>b.jsx(mB,{ref:t,className:Pt(bC({variant:"outline"}),"mt-2 sm:mt-0",n),...e}));EB.displayName=mB.displayName;const Fve=({currentPictureId:n,onVersionSelect:e})=>{const{user:t}=du(),[r,s]=U.useState([]),[i,o]=U.useState(!0),[a,l]=U.useState(null),[c,u]=U.useState(null),[d,f]=U.useState(!1),[p,m]=U.useState(null),[y,w]=U.useState(!1);U.useEffect(()=>{k()},[n]);const k=async()=>{if(!(!t||!n)){o(!0);try{const{data:T,error:O}=await Yt.from("pictures").select("id, parent_id, title, image_url, is_selected, created_at, visible").eq("id",n).single();if(O)throw O;const I=T.parent_id||T.id,{data:R,error:D}=await Yt.from("pictures").select("id, title, image_url, is_selected, created_at, parent_id, visible, user_id").eq("user_id",t.id).or(`id.eq.${I},parent_id.eq.${I}`).order("created_at",{ascending:!0});if(D)throw D;s(R||[])}catch(T){console.error("Error loading versions:",T),at.toast.error(Be("Failed to load image versions"))}finally{o(!1)}}},x=async T=>{var O;if(t){l(T);try{const I=((O=r.find(D=>D.parent_id===null))==null?void 0:O.id)||n;await Yt.from("pictures").update({is_selected:!1}).eq("user_id",t.id).or(`id.eq.${I},parent_id.eq.${I}`);const{error:R}=await Yt.from("pictures").update({is_selected:!0}).eq("id",T).eq("user_id",t.id);if(R)throw R;s(D=>D.map(W=>({...W,is_selected:W.id===T}))),at.toast.success(Be("Version selected successfully!")),e(T)}catch(I){console.error("Error selecting version:",I),at.toast.error(Be("Failed to select version"))}finally{l(null)}}},S=async(T,O)=>{if(t){u(T);try{const{error:I}=await Yt.from("pictures").update({visible:!O}).eq("id",T).eq("user_id",t.id);if(I)throw I;s(R=>R.map(D=>({...D,visible:D.id===T?!O:D.visible}))),at.toast.success(Be(O?"Version hidden successfully!":"Version made visible successfully!"))}catch(I){console.error("Error toggling visibility:",I),at.toast.error(Be("Failed to update visibility"))}finally{u(null)}}},_=T=>{m(T),f(!0)},A=async()=>{var T;if(!(!p||!t)){w(!0);try{const{data:O,error:I}=await Yt.from("pictures").select("*").eq("user_id",t.id);if(I)throw I;const R=de=>{const le=[];return O.filter(se=>se.parent_id===de).forEach(se=>{le.push(se),le.push(...R(se.id))}),le},D=R(p.id),W=[p,...D];for(const de of W)if((T=de.image_url)!=null&&T.includes("supabase.co/storage/")){const le=de.image_url.split("/"),X=le[le.length-1],se=`${de.user_id}/${X}`;await Yt.storage.from("pictures").remove([se])}const{error:H}=await Yt.from("pictures").delete().in("id",W.map(de=>de.id));if(H)throw H;const re=new Set(W.map(de=>de.id));s(de=>de.filter(le=>!re.has(le.id)));const ae=W.length;at.toast.success(Be(`Deleted ${ae>1?`${ae} versions`:"version"} successfully`))}catch(O){console.error("Error deleting version:",O),at.toast.error(Be("Failed to delete version"))}finally{w(!1),f(!1),m(null)}}};return i?b.jsx("div",{className:"flex items-center justify-center p-4",children:b.jsx("div",{className:"text-muted-foreground",children:b.jsx(St,{children:"Loading versions..."})})}):r.length<=1?b.jsx("div",{className:"text-center p-4",children:b.jsx("p",{className:"text-muted-foreground",children:b.jsx(St,{children:"No other versions available for this image."})})}):b.jsxs("div",{className:"space-y-4",children:[b.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[b.jsx(Se.Image,{className:"h-5 w-5"}),b.jsx("h3",{className:"font-semibold",children:b.jsx(St,{children:"Image Versions"})}),b.jsx(Ab,{variant:"secondary",children:r.length})]}),b.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-4",children:r.map(T=>b.jsx(ux,{className:`cursor-pointer transition-all hover:scale-105 ${T.is_selected?"ring-2 ring-primary":""}`,children:b.jsxs(dx,{className:"p-2",children:[b.jsxs("div",{className:"aspect-square relative mb-2 overflow-hidden rounded-md",children:[b.jsx("img",{src:T.image_url,alt:T.title,className:"w-full h-full object-cover"}),T.is_selected&&b.jsx("div",{className:"absolute top-2 right-2 bg-primary text-primary-foreground rounded-full p-1",children:b.jsx(Se.Check,{className:"h-3 w-3"})})]}),b.jsxs("div",{className:"space-y-1",children:[b.jsx("p",{className:"text-xs font-medium truncate",children:T.title}),b.jsx("p",{className:"text-xs text-muted-foreground",children:new Date(T.created_at).toLocaleDateString()}),b.jsxs("div",{className:"flex items-center gap-1",children:[T.parent_id===null&&b.jsx(Ab,{variant:"outline",className:"text-xs",children:b.jsx(St,{children:"Original"})}),!T.visible&&b.jsx(Ab,{variant:"secondary",className:"text-xs",children:b.jsx(St,{children:"Hidden"})})]})]}),b.jsxs("div",{className:"flex gap-1 mt-2",children:[b.jsx(yt,{size:"sm",className:"flex-1",variant:T.is_selected?"default":"outline",onClick:()=>x(T.id),disabled:a===T.id,children:b.jsx(St,{children:a===T.id?"Selecting...":T.is_selected?"Selected":"Select"})}),b.jsx(yt,{size:"sm",variant:"ghost",onClick:()=>S(T.id,T.visible),disabled:c===T.id,className:"px-2",children:c===T.id?b.jsx("div",{className:"animate-spin rounded-full h-3 w-3 border border-current border-t-transparent"}):T.visible?b.jsx(Se.Eye,{className:"h-3 w-3"}):b.jsx(Se.EyeOff,{className:"h-3 w-3"})}),b.jsx(yt,{size:"sm",variant:"ghost",className:"px-2 text-destructive hover:text-destructive hover:bg-destructive/10",onClick:()=>_(T),disabled:y||T.id===n,title:Be("Delete version"),children:b.jsx(Se.Trash2,{className:"h-3 w-3"})})]})]})},T.id))}),b.jsx($ve,{open:d,onOpenChange:f,children:b.jsxs(bB,{children:[b.jsxs(wB,{children:[b.jsx(kB,{children:b.jsx(St,{children:"Delete Version"})}),b.jsxs(CB,{children:[b.jsx(St,{children:"Are you sure you want to delete this version?"}),' "',p==null?void 0:p.title,'"',b.jsx("br",{}),b.jsx("br",{}),b.jsx("span",{className:"text-destructive font-semibold",children:b.jsx(St,{children:"This action cannot be undone."})})]})]}),b.jsxs(xB,{children:[b.jsx(EB,{children:b.jsx(St,{children:"Cancel"})}),b.jsx(SB,{onClick:T=>{T.preventDefault(),A()},className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",disabled:y,children:y?b.jsx(St,{children:"Deleting..."}):b.jsx(St,{children:"Delete"})})]})]})})]})};function Vt(n,e,t,r,s){if(typeof e=="function"?n!==e||!0:!e.has(n))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(n,t),t}function pe(n,e,t,r){if(t==="a"&&!r)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?n!==e||!r:!e.has(n))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?r:t==="a"?r.call(n):r?r.value:e.get(n)}let _B=function(){const{crypto:n}=globalThis;if(n!=null&&n.randomUUID)return _B=n.randomUUID.bind(n),n.randomUUID();const e=new Uint8Array(1),t=n?()=>n.getRandomValues(e)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,r=>(+r^t()&15>>+r/4).toString(16))};function jS(n){return typeof n=="object"&&n!==null&&("name"in n&&n.name==="AbortError"||"message"in n&&String(n.message).includes("FetchRequestCanceledException"))}const BS=n=>{if(n instanceof Error)return n;if(typeof n=="object"&&n!==null){try{if(Object.prototype.toString.call(n)==="[object Error]"){const e=new Error(n.message,n.cause?{cause:n.cause}:{});return n.stack&&(e.stack=n.stack),n.cause&&!e.cause&&(e.cause=n.cause),n.name&&(e.name=n.name),e}}catch{}try{return new Error(JSON.stringify(n))}catch{}}return new Error(n)};class vt extends Error{}class Xs extends vt{constructor(e,t,r,s){super(`${Xs.makeMessage(e,t,r)}`),this.status=e,this.headers=s,this.requestID=s==null?void 0:s.get("x-request-id"),this.error=t;const i=t;this.code=i==null?void 0:i.code,this.param=i==null?void 0:i.param,this.type=i==null?void 0:i.type}static makeMessage(e,t,r){const s=t!=null&&t.message?typeof t.message=="string"?t.message:JSON.stringify(t.message):t?JSON.stringify(t):r;return e&&s?`${e} ${s}`:e?`${e} status code (no body)`:s||"(no status code or body)"}static generate(e,t,r,s){if(!e||!s)return new px({message:r,cause:BS(t)});const i=t==null?void 0:t.error;return e===400?new TB(e,i,r,s):e===401?new AB(e,i,r,s):e===403?new NB(e,i,r,s):e===404?new MB(e,i,r,s):e===409?new OB(e,i,r,s):e===422?new PB(e,i,r,s):e===429?new IB(e,i,r,s):e>=500?new DB(e,i,r,s):new Xs(e,i,r,s)}}class pa extends Xs{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class px extends Xs{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class VS extends px{constructor({message:e}={}){super({message:e??"Request timed out."})}}class TB extends Xs{}class AB extends Xs{}class NB extends Xs{}class MB extends Xs{}class OB extends Xs{}class PB extends Xs{}class IB extends Xs{}class DB extends Xs{}class RB extends vt{constructor(){super("Could not parse response content as the length limit was reached")}}class $B extends vt{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class Nb extends Error{constructor(e){super(e)}}const jve=/^[a-z][a-z0-9+.-]*:/i,Bve=n=>jve.test(n);let Qi=n=>(Qi=Array.isArray,Qi(n)),LB=Qi;function FB(n){return typeof n!="object"?{}:n??{}}function Vve(n){if(!n)return!0;for(const e in n)return!1;return!0}function zve(n,e){return Object.prototype.hasOwnProperty.call(n,e)}function zS(n){return n!=null&&typeof n=="object"&&!Array.isArray(n)}const Hve=(n,e)=>{if(typeof e!="number"||!Number.isInteger(e))throw new vt(`${n} must be an integer`);if(e<0)throw new vt(`${n} must be a positive integer`);return e},qve=n=>{try{return JSON.parse(n)}catch{return}},Mb=n=>new Promise(e=>setTimeout(e,n)),Mg="6.16.0",Uve=()=>typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u";function Wve(){return typeof Deno<"u"&&Deno.build!=null?"deno":typeof EdgeRuntime<"u"?"edge":Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]"?"node":"unknown"}const Gve=()=>{var t;const n=Wve();if(n==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Mg,"X-Stainless-OS":BB(Deno.build.os),"X-Stainless-Arch":jB(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version=="string"?Deno.version:((t=Deno.version)==null?void 0:t.deno)??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Mg,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if(n==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Mg,"X-Stainless-OS":BB(globalThis.process.platform??"unknown"),"X-Stainless-Arch":jB(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const e=Kve();return e?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Mg,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${e.browser}`,"X-Stainless-Runtime-Version":e.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Mg,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};function Kve(){if(typeof navigator>"u"||!navigator)return null;const n=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:e,pattern:t}of n){const r=t.exec(navigator.userAgent);if(r){const s=r[1]||0,i=r[2]||0,o=r[3]||0;return{browser:e,version:`${s}.${i}.${o}`}}}return null}const jB=n=>n==="x32"?"x32":n==="x86_64"||n==="x64"?"x64":n==="arm"?"arm":n==="aarch64"||n==="arm64"?"arm64":n?`other:${n}`:"unknown",BB=n=>(n=n.toLowerCase(),n.includes("ios")?"iOS":n==="android"?"Android":n==="darwin"?"MacOS":n==="win32"?"Windows":n==="freebsd"?"FreeBSD":n==="openbsd"?"OpenBSD":n==="linux"?"Linux":n?`Other:${n}`:"Unknown");let VB;const Yve=()=>VB??(VB=Gve());function Zve(){if(typeof fetch<"u")return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function zB(...n){const e=globalThis.ReadableStream;if(typeof e>"u")throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new e(...n)}function HB(n){let e=Symbol.asyncIterator in n?n[Symbol.asyncIterator]():n[Symbol.iterator]();return zB({start(){},async pull(t){const{done:r,value:s}=await e.next();r?t.close():t.enqueue(s)},async cancel(){var t;await((t=e.return)==null?void 0:t.call(e))}})}function qB(n){if(n[Symbol.asyncIterator])return n;const e=n.getReader();return{async next(){try{const t=await e.read();return t!=null&&t.done&&e.releaseLock(),t}catch(t){throw e.releaseLock(),t}},async return(){const t=e.cancel();return e.releaseLock(),await t,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function Xve(n){var r,s;if(n===null||typeof n!="object")return;if(n[Symbol.asyncIterator]){await((s=(r=n[Symbol.asyncIterator]()).return)==null?void 0:s.call(r));return}const e=n.getReader(),t=e.cancel();e.releaseLock(),await t}const Jve=({headers:n,body:e})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(e)}),UB="RFC3986",WB=n=>String(n),GB={RFC1738:n=>String(n).replace(/%20/g,"+"),RFC3986:WB},Qve="RFC1738";let HS=(n,e)=>(HS=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),HS(n,e));const Zl=(()=>{const n=[];for(let e=0;e<256;++e)n.push("%"+((e<16?"0":"")+e.toString(16)).toUpperCase());return n})(),qS=1024,ebe=(n,e,t,r,s)=>{if(n.length===0)return n;let i=n;if(typeof n=="symbol"?i=Symbol.prototype.toString.call(n):typeof n!="string"&&(i=String(n)),t==="iso-8859-1")return escape(i).replace(/%u[0-9a-f]{4}/gi,function(a){return"%26%23"+parseInt(a.slice(2),16)+"%3B"});let o="";for(let a=0;a<i.length;a+=qS){const l=i.length>=qS?i.slice(a,a+qS):i,c=[];for(let u=0;u<l.length;++u){let d=l.charCodeAt(u);if(d===45||d===46||d===95||d===126||d>=48&&d<=57||d>=65&&d<=90||d>=97&&d<=122||s===Qve&&(d===40||d===41)){c[c.length]=l.charAt(u);continue}if(d<128){c[c.length]=Zl[d];continue}if(d<2048){c[c.length]=Zl[192|d>>6]+Zl[128|d&63];continue}if(d<55296||d>=57344){c[c.length]=Zl[224|d>>12]+Zl[128|d>>6&63]+Zl[128|d&63];continue}u+=1,d=65536+((d&1023)<<10|l.charCodeAt(u)&1023),c[c.length]=Zl[240|d>>18]+Zl[128|d>>12&63]+Zl[128|d>>6&63]+Zl[128|d&63]}o+=c.join("")}return o};function tbe(n){return!n||typeof n!="object"?!1:!!(n.constructor&&n.constructor.isBuffer&&n.constructor.isBuffer(n))}function KB(n,e){if(Qi(n)){const t=[];for(let r=0;r<n.length;r+=1)t.push(e(n[r]));return t}return e(n)}const YB={brackets(n){return String(n)+"[]"},comma:"comma",indices(n,e){return String(n)+"["+e+"]"},repeat(n){return String(n)}},ZB=function(n,e){Array.prototype.push.apply(n,Qi(e)?e:[e])};let XB;const Os={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:ebe,encodeValuesOnly:!1,format:UB,formatter:WB,indices:!1,serializeDate(n){return(XB??(XB=Function.prototype.call.bind(Date.prototype.toISOString)))(n)},skipNulls:!1,strictNullHandling:!1};function nbe(n){return typeof n=="string"||typeof n=="number"||typeof n=="boolean"||typeof n=="symbol"||typeof n=="bigint"}const US={};function JB(n,e,t,r,s,i,o,a,l,c,u,d,f,p,m,y,w,k){let x=n,S=k,_=0,A=!1;for(;(S=S.get(US))!==void 0&&!A;){const D=S.get(n);if(_+=1,typeof D<"u"){if(D===_)throw new RangeError("Cyclic object value");A=!0}typeof S.get(US)>"u"&&(_=0)}if(typeof c=="function"?x=c(e,x):x instanceof Date?x=f==null?void 0:f(x):t==="comma"&&Qi(x)&&(x=KB(x,function(D){return D instanceof Date?f==null?void 0:f(D):D})),x===null){if(i)return l&&!y?l(e,Os.encoder,w,"key",p):e;x=""}if(nbe(x)||tbe(x)){if(l){const D=y?e:l(e,Os.encoder,w,"key",p);return[(m==null?void 0:m(D))+"="+(m==null?void 0:m(l(x,Os.encoder,w,"value",p)))]}return[(m==null?void 0:m(e))+"="+(m==null?void 0:m(String(x)))]}const T=[];if(typeof x>"u")return T;let O;if(t==="comma"&&Qi(x))y&&l&&(x=KB(x,l)),O=[{value:x.length>0?x.join(",")||null:void 0}];else if(Qi(c))O=c;else{const D=Object.keys(x);O=u?D.sort(u):D}const I=a?String(e).replace(/\./g,"%2E"):String(e),R=r&&Qi(x)&&x.length===1?I+"[]":I;if(s&&Qi(x)&&x.length===0)return R+"[]";for(let D=0;D<O.length;++D){const W=O[D],H=typeof W=="object"&&typeof W.value<"u"?W.value:x[W];if(o&&H===null)continue;const re=d&&a?W.replace(/\./g,"%2E"):W,ae=Qi(x)?typeof t=="function"?t(R,re):R:R+(d?"."+re:"["+re+"]");k.set(n,_);const de=new WeakMap;de.set(US,k),ZB(T,JB(H,ae,t,r,s,i,o,a,t==="comma"&&y&&Qi(x)?null:l,c,u,d,f,p,m,y,w,de))}return T}function rbe(n=Os){if(typeof n.allowEmptyArrays<"u"&&typeof n.allowEmptyArrays!="boolean")throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(typeof n.encodeDotInKeys<"u"&&typeof n.encodeDotInKeys!="boolean")throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(n.encoder!==null&&typeof n.encoder<"u"&&typeof n.encoder!="function")throw new TypeError("Encoder has to be a function.");const e=n.charset||Os.charset;if(typeof n.charset<"u"&&n.charset!=="utf-8"&&n.charset!=="iso-8859-1")throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");let t=UB;if(typeof n.format<"u"){if(!HS(GB,n.format))throw new TypeError("Unknown format option provided.");t=n.format}const r=GB[t];let s=Os.filter;(typeof n.filter=="function"||Qi(n.filter))&&(s=n.filter);let i;if(n.arrayFormat&&n.arrayFormat in YB?i=n.arrayFormat:"indices"in n?i=n.indices?"indices":"repeat":i=Os.arrayFormat,"commaRoundTrip"in n&&typeof n.commaRoundTrip!="boolean")throw new TypeError("`commaRoundTrip` must be a boolean, or absent");const o=typeof n.allowDots>"u"?n.encodeDotInKeys?!0:Os.allowDots:!!n.allowDots;return{addQueryPrefix:typeof n.addQueryPrefix=="boolean"?n.addQueryPrefix:Os.addQueryPrefix,allowDots:o,allowEmptyArrays:typeof n.allowEmptyArrays=="boolean"?!!n.allowEmptyArrays:Os.allowEmptyArrays,arrayFormat:i,charset:e,charsetSentinel:typeof n.charsetSentinel=="boolean"?n.charsetSentinel:Os.charsetSentinel,commaRoundTrip:!!n.commaRoundTrip,delimiter:typeof n.delimiter>"u"?Os.delimiter:n.delimiter,encode:typeof n.encode=="boolean"?n.encode:Os.encode,encodeDotInKeys:typeof n.encodeDotInKeys=="boolean"?n.encodeDotInKeys:Os.encodeDotInKeys,encoder:typeof n.encoder=="function"?n.encoder:Os.encoder,encodeValuesOnly:typeof n.encodeValuesOnly=="boolean"?n.encodeValuesOnly:Os.encodeValuesOnly,filter:s,format:t,formatter:r,serializeDate:typeof n.serializeDate=="function"?n.serializeDate:Os.serializeDate,skipNulls:typeof n.skipNulls=="boolean"?n.skipNulls:Os.skipNulls,sort:typeof n.sort=="function"?n.sort:null,strictNullHandling:typeof n.strictNullHandling=="boolean"?n.strictNullHandling:Os.strictNullHandling}}function sbe(n,e={}){let t=n;const r=rbe(e);let s,i;typeof r.filter=="function"?(i=r.filter,t=i("",t)):Qi(r.filter)&&(i=r.filter,s=i);const o=[];if(typeof t!="object"||t===null)return"";const a=YB[r.arrayFormat],l=a==="comma"&&r.commaRoundTrip;s||(s=Object.keys(t)),r.sort&&s.sort(r.sort);const c=new WeakMap;for(let f=0;f<s.length;++f){const p=s[f];r.skipNulls&&t[p]===null||ZB(o,JB(t[p],p,a,l,r.allowEmptyArrays,r.strictNullHandling,r.skipNulls,r.encodeDotInKeys,r.encode?r.encoder:null,r.filter,r.sort,r.allowDots,r.serializeDate,r.format,r.formatter,r.encodeValuesOnly,r.charset,c))}const u=o.join(r.delimiter);let d=r.addQueryPrefix===!0?"?":"";return r.charsetSentinel&&(r.charset==="iso-8859-1"?d+="utf8=%26%2310003%3B&":d+="utf8=%E2%9C%93&"),u.length>0?d+u:""}function ibe(n){let e=0;for(const s of n)e+=s.length;const t=new Uint8Array(e);let r=0;for(const s of n)t.set(s,r),r+=s.length;return t}let QB;function WS(n){let e;return(QB??(e=new globalThis.TextEncoder,QB=e.encode.bind(e)))(n)}let eV;function tV(n){let e;return(eV??(e=new globalThis.TextDecoder,eV=e.decode.bind(e)))(n)}var No,Mo;class mx{constructor(){No.set(this,void 0),Mo.set(this,void 0),Vt(this,No,new Uint8Array),Vt(this,Mo,null)}decode(e){if(e==null)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):typeof e=="string"?WS(e):e;Vt(this,No,ibe([pe(this,No,"f"),t]));const r=[];let s;for(;(s=obe(pe(this,No,"f"),pe(this,Mo,"f")))!=null;){if(s.carriage&&pe(this,Mo,"f")==null){Vt(this,Mo,s.index);continue}if(pe(this,Mo,"f")!=null&&(s.index!==pe(this,Mo,"f")+1||s.carriage)){r.push(tV(pe(this,No,"f").subarray(0,pe(this,Mo,"f")-1))),Vt(this,No,pe(this,No,"f").subarray(pe(this,Mo,"f"))),Vt(this,Mo,null);continue}const i=pe(this,Mo,"f")!==null?s.preceding-1:s.preceding,o=tV(pe(this,No,"f").subarray(0,i));r.push(o),Vt(this,No,pe(this,No,"f").subarray(s.index)),Vt(this,Mo,null)}return r}flush(){return pe(this,No,"f").length?this.decode(` +`):[]}}No=new WeakMap,Mo=new WeakMap,mx.NEWLINE_CHARS=new Set([` +`,"\r"]),mx.NEWLINE_REGEXP=/\r\n|[\n\r]/g;function obe(n,e){for(let s=e??0;s<n.length;s++){if(n[s]===10)return{preceding:s,index:s+1,carriage:!1};if(n[s]===13)return{preceding:s,index:s+1,carriage:!0}}return null}function abe(n){for(let r=0;r<n.length-1;r++){if(n[r]===10&&n[r+1]===10||n[r]===13&&n[r+1]===13)return r+2;if(n[r]===13&&n[r+1]===10&&r+3<n.length&&n[r+2]===13&&n[r+3]===10)return r+4}return-1}const gx={off:0,error:200,warn:300,info:400,debug:500},nV=(n,e,t)=>{if(n){if(zve(gx,n))return n;Js(t).warn(`${e} was set to ${JSON.stringify(n)}, expected one of ${JSON.stringify(Object.keys(gx))}`)}};function Ob(){}function yx(n,e,t){return!e||gx[n]>gx[t]?Ob:e[n].bind(e)}const lbe={error:Ob,warn:Ob,info:Ob,debug:Ob};let rV=new WeakMap;function Js(n){const e=n.logger,t=n.logLevel??"off";if(!e)return lbe;const r=rV.get(e);if(r&&r[0]===t)return r[1];const s={error:yx("error",e,t),warn:yx("warn",e,t),info:yx("info",e,t),debug:yx("debug",e,t)};return rV.set(e,[t,s]),s}const Mp=n=>(n.options&&(n.options={...n.options},delete n.options.headers),n.headers&&(n.headers=Object.fromEntries((n.headers instanceof Headers?[...n.headers]:Object.entries(n.headers)).map(([e,t])=>[e,e.toLowerCase()==="authorization"||e.toLowerCase()==="cookie"||e.toLowerCase()==="set-cookie"?"***":t]))),"retryOfRequestLogID"in n&&(n.retryOfRequestLogID&&(n.retryOf=n.retryOfRequestLogID),delete n.retryOfRequestLogID),n);var Pb;class Xl{constructor(e,t,r){this.iterator=e,Pb.set(this,void 0),this.controller=t,Vt(this,Pb,r)}static fromSSEResponse(e,t,r){let s=!1;const i=r?Js(r):console;async function*o(){if(s)throw new vt("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");s=!0;let a=!1;try{for await(const l of cbe(e,t))if(!a){if(l.data.startsWith("[DONE]")){a=!0;continue}if(l.event===null||!l.event.startsWith("thread.")){let c;try{c=JSON.parse(l.data)}catch(u){throw i.error("Could not parse message into JSON:",l.data),i.error("From chunk:",l.raw),u}if(c&&c.error)throw new Xs(void 0,c.error,void 0,e.headers);yield c}else{let c;try{c=JSON.parse(l.data)}catch(u){throw console.error("Could not parse message into JSON:",l.data),console.error("From chunk:",l.raw),u}if(l.event=="error")throw new Xs(void 0,c.error,c.message,void 0);yield{event:l.event,data:c}}}a=!0}catch(l){if(jS(l))return;throw l}finally{a||t.abort()}}return new Xl(o,t,r)}static fromReadableStream(e,t,r){let s=!1;async function*i(){const a=new mx,l=qB(e);for await(const c of l)for(const u of a.decode(c))yield u;for(const c of a.flush())yield c}async function*o(){if(s)throw new vt("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");s=!0;let a=!1;try{for await(const l of i())a||l&&(yield JSON.parse(l));a=!0}catch(l){if(jS(l))return;throw l}finally{a||t.abort()}}return new Xl(o,t,r)}[(Pb=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],r=this.iterator(),s=i=>({next:()=>{if(i.length===0){const o=r.next();e.push(o),t.push(o)}return i.shift()}});return[new Xl(()=>s(e),this.controller,pe(this,Pb,"f")),new Xl(()=>s(t),this.controller,pe(this,Pb,"f"))]}toReadableStream(){const e=this;let t;return zB({async start(){t=e[Symbol.asyncIterator]()},async pull(r){try{const{value:s,done:i}=await t.next();if(i)return r.close();const o=WS(JSON.stringify(s)+` +`);r.enqueue(o)}catch(s){r.error(s)}},async cancel(){var r;await((r=t.return)==null?void 0:r.call(t))}})}}async function*cbe(n,e){if(!n.body)throw e.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative"?new vt("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api"):new vt("Attempted to iterate over a response with no body");const t=new dbe,r=new mx,s=qB(n.body);for await(const i of ube(s))for(const o of r.decode(i)){const a=t.decode(o);a&&(yield a)}for(const i of r.flush()){const o=t.decode(i);o&&(yield o)}}async function*ube(n){let e=new Uint8Array;for await(const t of n){if(t==null)continue;const r=t instanceof ArrayBuffer?new Uint8Array(t):typeof t=="string"?WS(t):t;let s=new Uint8Array(e.length+r.length);s.set(e),s.set(r,e.length),e=s;let i;for(;(i=abe(e))!==-1;)yield e.slice(0,i),e=e.slice(i)}e.length>0&&(yield e)}class dbe{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const i={event:this.event,data:this.data.join(` +`),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],i}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,r,s]=hbe(e,":");return s.startsWith(" ")&&(s=s.substring(1)),t==="event"?this.event=s:t==="data"&&this.data.push(s),null}}function hbe(n,e){const t=n.indexOf(e);return t!==-1?[n.substring(0,t),e,n.substring(t+e.length)]:[n,"",""]}async function sV(n,e){const{response:t,requestLogID:r,retryOfRequestLogID:s,startTime:i}=e,o=await(async()=>{var d;if(e.options.stream)return Js(n).debug("response",t.status,t.url,t.headers,t.body),e.options.__streamClass?e.options.__streamClass.fromSSEResponse(t,e.controller,n):Xl.fromSSEResponse(t,e.controller,n);if(t.status===204)return null;if(e.options.__binaryResponse)return t;const a=t.headers.get("content-type"),l=(d=a==null?void 0:a.split(";")[0])==null?void 0:d.trim();if((l==null?void 0:l.includes("application/json"))||(l==null?void 0:l.endsWith("+json"))){const f=await t.json();return iV(f,t)}return await t.text()})();return Js(n).debug(`[${r}] response parsed`,Mp({retryOfRequestLogID:s,url:t.url,status:t.status,body:o,durationMs:Date.now()-i})),o}function iV(n,e){return!n||typeof n!="object"||Array.isArray(n)?n:Object.defineProperty(n,"_request_id",{value:e.headers.get("x-request-id"),enumerable:!1})}var Ib;class vx extends Promise{constructor(e,t,r=sV){super(s=>{s(null)}),this.responsePromise=t,this.parseResponse=r,Ib.set(this,void 0),Vt(this,Ib,e)}_thenUnwrap(e){return new vx(pe(this,Ib,"f"),this.responsePromise,async(t,r)=>iV(e(await this.parseResponse(t,r),r),r.response))}asResponse(){return this.responsePromise.then(e=>e.response)}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then(e=>this.parseResponse(pe(this,Ib,"f"),e))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Ib=new WeakMap;var bx;class GS{constructor(e,t,r,s){bx.set(this,void 0),Vt(this,bx,e),this.options=s,this.response=t,this.body=r}hasNextPage(){return this.getPaginatedItems().length?this.nextPageRequestOptions()!=null:!1}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new vt("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await pe(this,bx,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(bx=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class fbe extends vx{constructor(e,t,r){super(e,t,async(s,i)=>new r(s,i.response,await sV(s,i),i.options))}async*[Symbol.asyncIterator](){const e=await this;for await(const t of e)yield t}}class wx extends GS{constructor(e,t,r,s){super(e,t,r,s),this.data=r.data||[],this.object=r.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class vs extends GS{constructor(e,t,r,s){super(e,t,r,s),this.data=r.data||[],this.has_more=r.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return this.has_more===!1?!1:super.hasNextPage()}nextPageRequestOptions(){var r;const e=this.getPaginatedItems(),t=(r=e[e.length-1])==null?void 0:r.id;return t?{...this.options,query:{...FB(this.options.query),after:t}}:null}}class xx extends GS{constructor(e,t,r,s){super(e,t,r,s),this.data=r.data||[],this.has_more=r.has_more||!1,this.last_id=r.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return this.has_more===!1?!1:super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...FB(this.options.query),after:e}}:null}}const oV=()=>{var n;if(typeof File>"u"){const{process:e}=globalThis,t=typeof((n=e==null?void 0:e.versions)==null?void 0:n.node)=="string"&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Db(n,e,t){return oV(),new File(n,e??"unknown_file",t)}function kx(n){return(typeof n=="object"&&n!==null&&("name"in n&&n.name&&String(n.name)||"url"in n&&n.url&&String(n.url)||"filename"in n&&n.filename&&String(n.filename)||"path"in n&&n.path&&String(n.path))||"").split(/[\\/]/).pop()||void 0}const KS=n=>n!=null&&typeof n=="object"&&typeof n[Symbol.asyncIterator]=="function",aV=async(n,e)=>YS(n.body)?{...n,body:await cV(n.body,e)}:n,Op=async(n,e)=>({...n,body:await cV(n.body,e)}),lV=new WeakMap;function pbe(n){const e=typeof n=="function"?n:n.fetch,t=lV.get(e);if(t)return t;const r=(async()=>{try{const s="Response"in e?e.Response:(await e("data:,")).constructor,i=new FormData;return i.toString()!==await new s(i).text()}catch{return!0}})();return lV.set(e,r),r}const cV=async(n,e)=>{if(!await pbe(e))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const t=new FormData;return await Promise.all(Object.entries(n||{}).map(([r,s])=>ZS(t,r,s))),t},uV=n=>n instanceof Blob&&"name"in n,mbe=n=>typeof n=="object"&&n!==null&&(n instanceof Response||KS(n)||uV(n)),YS=n=>{if(mbe(n))return!0;if(Array.isArray(n))return n.some(YS);if(n&&typeof n=="object"){for(const e in n)if(YS(n[e]))return!0}return!1},ZS=async(n,e,t)=>{if(t!==void 0){if(t==null)throw new TypeError(`Received null for "${e}"; to pass null in FormData, you must use the string 'null'`);if(typeof t=="string"||typeof t=="number"||typeof t=="boolean")n.append(e,String(t));else if(t instanceof Response)n.append(e,Db([await t.blob()],kx(t)));else if(KS(t))n.append(e,Db([await new Response(HB(t)).blob()],kx(t)));else if(uV(t))n.append(e,t,kx(t));else if(Array.isArray(t))await Promise.all(t.map(r=>ZS(n,e+"[]",r)));else if(typeof t=="object")await Promise.all(Object.entries(t).map(([r,s])=>ZS(n,`${e}[${r}]`,s)));else throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${t} instead`)}},dV=n=>n!=null&&typeof n=="object"&&typeof n.size=="number"&&typeof n.type=="string"&&typeof n.text=="function"&&typeof n.slice=="function"&&typeof n.arrayBuffer=="function",gbe=n=>n!=null&&typeof n=="object"&&typeof n.name=="string"&&typeof n.lastModified=="number"&&dV(n),ybe=n=>n!=null&&typeof n=="object"&&typeof n.url=="string"&&typeof n.blob=="function";async function vbe(n,e,t){if(oV(),n=await n,gbe(n))return n instanceof File?n:Db([await n.arrayBuffer()],n.name);if(ybe(n)){const s=await n.blob();return e||(e=new URL(n.url).pathname.split(/[\\/]/).pop()),Db(await XS(s),e,t)}const r=await XS(n);if(e||(e=kx(n)),!(t!=null&&t.type)){const s=r.find(i=>typeof i=="object"&&"type"in i&&i.type);typeof s=="string"&&(t={...t,type:s})}return Db(r,e,t)}async function XS(n){var t;let e=[];if(typeof n=="string"||ArrayBuffer.isView(n)||n instanceof ArrayBuffer)e.push(n);else if(dV(n))e.push(n instanceof Blob?n:await n.arrayBuffer());else if(KS(n))for await(const r of n)e.push(...await XS(r));else{const r=(t=n==null?void 0:n.constructor)==null?void 0:t.name;throw new Error(`Unexpected data type: ${typeof n}${r?`; constructor: ${r}`:""}${bbe(n)}`)}return e}function bbe(n){return typeof n!="object"||n===null?"":`; props: [${Object.getOwnPropertyNames(n).map(t=>`"${t}"`).join(", ")}]`}class gt{constructor(e){this._client=e}}function hV(n){return n.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const fV=Object.freeze(Object.create(null)),Ne=((n=hV)=>function(t,...r){if(t.length===1)return t[0];let s=!1;const i=[],o=t.reduce((u,d,f)=>{var y;/[?#]/.test(d)&&(s=!0);const p=r[f];let m=(s?encodeURIComponent:n)(""+p);return f!==r.length&&(p==null||typeof p=="object"&&p.toString===((y=Object.getPrototypeOf(Object.getPrototypeOf(p.hasOwnProperty??fV)??fV))==null?void 0:y.toString))&&(m=p+"",i.push({start:u.length+d.length,length:m.length,error:`Value of type ${Object.prototype.toString.call(p).slice(8,-1)} is not a valid path parameter`})),u+d+(f===r.length?"":m)},""),a=o.split(/[?#]/,1)[0],l=new RegExp("(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)","gi");let c;for(;(c=l.exec(a))!==null;)i.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(i.sort((u,d)=>u.start-d.start),i.length>0){let u=0;const d=i.reduce((f,p)=>{const m=" ".repeat(p.start-u),y="^".repeat(p.length);return u=p.start+p.length,f+m+y},"");throw new vt(`Path parameters result in path with invalid segments: +${i.map(f=>f.error).join(` +`)} +${o} +${d}`)}return o})(hV);let pV=class extends gt{list(e,t={},r){return this._client.getAPIList(Ne`/chat/completions/${e}/messages`,vs,{query:t,...r})}};function Cx(n){return n!==void 0&&"function"in n&&n.function!==void 0}function JS(n){return(n==null?void 0:n.$brand)==="auto-parseable-response-format"}function Rb(n){return(n==null?void 0:n.$brand)==="auto-parseable-tool"}function wbe(n,e){return!e||!mV(e)?{...n,choices:n.choices.map(t=>(gV(t.message.tool_calls),{...t,message:{...t.message,parsed:null,...t.message.tool_calls?{tool_calls:t.message.tool_calls}:void 0}}))}:QS(n,e)}function QS(n,e){const t=n.choices.map(r=>{var s;if(r.finish_reason==="length")throw new RB;if(r.finish_reason==="content_filter")throw new $B;return gV(r.message.tool_calls),{...r,message:{...r.message,...r.message.tool_calls?{tool_calls:((s=r.message.tool_calls)==null?void 0:s.map(i=>kbe(e,i)))??void 0}:void 0,parsed:r.message.content&&!r.message.refusal?xbe(e,r.message.content):null}}});return{...n,choices:t}}function xbe(n,e){var t,r;return((t=n.response_format)==null?void 0:t.type)!=="json_schema"?null:((r=n.response_format)==null?void 0:r.type)==="json_schema"?"$parseRaw"in n.response_format?n.response_format.$parseRaw(e):JSON.parse(e):null}function kbe(n,e){var r;const t=(r=n.tools)==null?void 0:r.find(s=>{var i;return Cx(s)&&((i=s.function)==null?void 0:i.name)===e.function.name});return{...e,function:{...e.function,parsed_arguments:Rb(t)?t.$parseRaw(e.function.arguments):t!=null&&t.function.strict?JSON.parse(e.function.arguments):null}}}function Cbe(n,e){var r;if(!n||!("tools"in n)||!n.tools)return!1;const t=(r=n.tools)==null?void 0:r.find(s=>{var i;return Cx(s)&&((i=s.function)==null?void 0:i.name)===e.function.name});return Cx(t)&&(Rb(t)||(t==null?void 0:t.function.strict)||!1)}function mV(n){var e;return JS(n.response_format)?!0:((e=n.tools)==null?void 0:e.some(t=>Rb(t)||t.type==="function"&&t.function.strict===!0))??!1}function gV(n){for(const e of n||[])if(e.type!=="function")throw new vt(`Currently only \`function\` tool calls are supported; Received \`${e.type}\``)}function Sbe(n){for(const e of n??[]){if(e.type!=="function")throw new vt(`Currently only \`function\` tool types support auto-parsing; Received \`${e.type}\``);if(e.function.strict!==!0)throw new vt(`The \`${e.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}const Sx=n=>(n==null?void 0:n.role)==="assistant",yV=n=>(n==null?void 0:n.role)==="tool";var eE,Ex,_x,$b,Lb,Tx,Fb,gu,jb,Ax,Nx,Og,vV;class tE{constructor(){eE.add(this),this.controller=new AbortController,Ex.set(this,void 0),_x.set(this,()=>{}),$b.set(this,()=>{}),Lb.set(this,void 0),Tx.set(this,()=>{}),Fb.set(this,()=>{}),gu.set(this,{}),jb.set(this,!1),Ax.set(this,!1),Nx.set(this,!1),Og.set(this,!1),Vt(this,Ex,new Promise((e,t)=>{Vt(this,_x,e,"f"),Vt(this,$b,t,"f")})),Vt(this,Lb,new Promise((e,t)=>{Vt(this,Tx,e,"f"),Vt(this,Fb,t,"f")})),pe(this,Ex,"f").catch(()=>{}),pe(this,Lb,"f").catch(()=>{})}_run(e){setTimeout(()=>{e().then(()=>{this._emitFinal(),this._emit("end")},pe(this,eE,"m",vV).bind(this))},0)}_connected(){this.ended||(pe(this,_x,"f").call(this),this._emit("connect"))}get ended(){return pe(this,jb,"f")}get errored(){return pe(this,Ax,"f")}get aborted(){return pe(this,Nx,"f")}abort(){this.controller.abort()}on(e,t){return(pe(this,gu,"f")[e]||(pe(this,gu,"f")[e]=[])).push({listener:t}),this}off(e,t){const r=pe(this,gu,"f")[e];if(!r)return this;const s=r.findIndex(i=>i.listener===t);return s>=0&&r.splice(s,1),this}once(e,t){return(pe(this,gu,"f")[e]||(pe(this,gu,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise((t,r)=>{Vt(this,Og,!0),e!=="error"&&this.once("error",r),this.once(e,t)})}async done(){Vt(this,Og,!0),await pe(this,Lb,"f")}_emit(e,...t){if(pe(this,jb,"f"))return;e==="end"&&(Vt(this,jb,!0),pe(this,Tx,"f").call(this));const r=pe(this,gu,"f")[e];if(r&&(pe(this,gu,"f")[e]=r.filter(s=>!s.once),r.forEach(({listener:s})=>s(...t))),e==="abort"){const s=t[0];!pe(this,Og,"f")&&!(r!=null&&r.length)&&Promise.reject(s),pe(this,$b,"f").call(this,s),pe(this,Fb,"f").call(this,s),this._emit("end");return}if(e==="error"){const s=t[0];!pe(this,Og,"f")&&!(r!=null&&r.length)&&Promise.reject(s),pe(this,$b,"f").call(this,s),pe(this,Fb,"f").call(this,s),this._emit("end")}}_emitFinal(){}}Ex=new WeakMap,_x=new WeakMap,$b=new WeakMap,Lb=new WeakMap,Tx=new WeakMap,Fb=new WeakMap,gu=new WeakMap,jb=new WeakMap,Ax=new WeakMap,Nx=new WeakMap,Og=new WeakMap,eE=new WeakSet,vV=function(e){if(Vt(this,Ax,!0),e instanceof Error&&e.name==="AbortError"&&(e=new pa),e instanceof pa)return Vt(this,Nx,!0),this._emit("abort",e);if(e instanceof vt)return this._emit("error",e);if(e instanceof Error){const t=new vt(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new vt(String(e)))};function Ebe(n){return typeof n.parse=="function"}var Ti,nE,Mx,rE,sE,iE,bV,wV;const _be=10;class xV extends tE{constructor(){super(...arguments),Ti.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){var r;this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=(r=e.choices[0])==null?void 0:r.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t){if(this._emit("message",e),yV(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(Sx(e)&&e.tool_calls)for(const r of e.tool_calls)r.type==="function"&&this._emit("functionToolCall",r.function)}}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new vt("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),pe(this,Ti,"m",nE).call(this)}async finalMessage(){return await this.done(),pe(this,Ti,"m",Mx).call(this)}async finalFunctionToolCall(){return await this.done(),pe(this,Ti,"m",rE).call(this)}async finalFunctionToolCallResult(){return await this.done(),pe(this,Ti,"m",sE).call(this)}async totalUsage(){return await this.done(),pe(this,Ti,"m",iE).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=pe(this,Ti,"m",Mx).call(this);t&&this._emit("finalMessage",t);const r=pe(this,Ti,"m",nE).call(this);r&&this._emit("finalContent",r);const s=pe(this,Ti,"m",rE).call(this);s&&this._emit("finalFunctionToolCall",s);const i=pe(this,Ti,"m",sE).call(this);i!=null&&this._emit("finalFunctionToolCallResult",i),this._chatCompletions.some(o=>o.usage)&&this._emit("totalUsage",pe(this,Ti,"m",iE).call(this))}async _createChatCompletion(e,t,r){const s=r==null?void 0:r.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",()=>this.controller.abort())),pe(this,Ti,"m",bV).call(this,t);const i=await e.chat.completions.create({...t,stream:!1},{...r,signal:this.controller.signal});return this._connected(),this._addChatCompletion(QS(i,t))}async _runChatCompletion(e,t,r){for(const s of t.messages)this._addMessage(s,!1);return await this._createChatCompletion(e,t,r)}async _runTools(e,t,r){var p,m,y;const s="tool",{tool_choice:i="auto",stream:o,...a}=t,l=typeof i!="string"&&i.type==="function"&&((p=i==null?void 0:i.function)==null?void 0:p.name),{maxChatCompletions:c=_be}=r||{},u=t.tools.map(w=>{if(Rb(w)){if(!w.$callback)throw new vt("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:w.$callback,name:w.function.name,description:w.function.description||"",parameters:w.function.parameters,parse:w.$parseRaw,strict:!0}}}return w}),d={};for(const w of u)w.type==="function"&&(d[w.function.name||w.function.function.name]=w.function);const f="tools"in t?u.map(w=>w.type==="function"?{type:"function",function:{name:w.function.name||w.function.function.name,parameters:w.function.parameters,description:w.function.description,strict:w.function.strict}}:w):void 0;for(const w of t.messages)this._addMessage(w,!1);for(let w=0;w<c;++w){const x=(m=(await this._createChatCompletion(e,{...a,tool_choice:i,tools:f,messages:[...this.messages]},r)).choices[0])==null?void 0:m.message;if(!x)throw new vt("missing message in ChatCompletion response");if(!((y=x.tool_calls)!=null&&y.length))return;for(const S of x.tool_calls){if(S.type!=="function")continue;const _=S.id,{name:A,arguments:T}=S.function,O=d[A];if(O){if(l&&l!==A){const W=`Invalid tool_call: ${JSON.stringify(A)}. ${JSON.stringify(l)} requested. Please try again`;this._addMessage({role:s,tool_call_id:_,content:W});continue}}else{const W=`Invalid tool_call: ${JSON.stringify(A)}. Available options are: ${Object.keys(d).map(H=>JSON.stringify(H)).join(", ")}. Please try again`;this._addMessage({role:s,tool_call_id:_,content:W});continue}let I;try{I=Ebe(O)?await O.parse(T):T}catch(W){const H=W instanceof Error?W.message:String(W);this._addMessage({role:s,tool_call_id:_,content:H});continue}const R=await O.function(I,this),D=pe(this,Ti,"m",wV).call(this,R);if(this._addMessage({role:s,tool_call_id:_,content:D}),l)return}}}}Ti=new WeakSet,nE=function(){return pe(this,Ti,"m",Mx).call(this).content??null},Mx=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(Sx(t))return{...t,content:t.content??null,refusal:t.refusal??null}}throw new vt("stream ended without producing a ChatCompletionMessage with role=assistant")},rE=function(){var e,t;for(let r=this.messages.length-1;r>=0;r--){const s=this.messages[r];if(Sx(s)&&((e=s==null?void 0:s.tool_calls)!=null&&e.length))return(t=s.tool_calls.filter(i=>i.type==="function").at(-1))==null?void 0:t.function}},sE=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(yV(t)&&t.content!=null&&typeof t.content=="string"&&this.messages.some(r=>{var s;return r.role==="assistant"&&((s=r.tool_calls)==null?void 0:s.some(i=>i.type==="function"&&i.id===t.tool_call_id))}))return t.content}},iE=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},bV=function(e){if(e.n!=null&&e.n>1)throw new vt("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},wV=function(e){return typeof e=="string"?e:e===void 0?"undefined":JSON.stringify(e)};class oE extends xV{static runTools(e,t,r){const s=new oE,i={...r,headers:{...r==null?void 0:r.headers,"X-Stainless-Helper-Method":"runTools"}};return s._run(()=>s._runTools(e,t,i)),s}_addMessage(e,t=!0){super._addMessage(e,t),Sx(e)&&e.content&&this._emit("content",e.content)}}const kV=1,CV=2,SV=4,EV=8,_V=16,TV=32,AV=64,NV=128,MV=256,OV=NV|MV,PV=_V|TV|OV|AV,IV=kV|CV|PV,DV=SV|EV,Tbe=IV|DV,Hs={STR:kV,NUM:CV,ARR:SV,OBJ:EV,NULL:_V,BOOL:TV,NAN:AV,INFINITY:NV,MINUS_INFINITY:MV,INF:OV,SPECIAL:PV,ATOM:IV,COLLECTION:DV,ALL:Tbe};class Abe extends Error{}class Nbe extends Error{}function Mbe(n,e=Hs.ALL){if(typeof n!="string")throw new TypeError(`expecting str, got ${typeof n}`);if(!n.trim())throw new Error(`${n} is empty`);return Obe(n.trim(),e)}const Obe=(n,e)=>{const t=n.length;let r=0;const s=f=>{throw new Abe(`${f} at position ${r}`)},i=f=>{throw new Nbe(`${f} at position ${r}`)},o=()=>(d(),r>=t&&s("Unexpected end of input"),n[r]==='"'?a():n[r]==="{"?l():n[r]==="["?c():n.substring(r,r+4)==="null"||Hs.NULL&e&&t-r<4&&"null".startsWith(n.substring(r))?(r+=4,null):n.substring(r,r+4)==="true"||Hs.BOOL&e&&t-r<4&&"true".startsWith(n.substring(r))?(r+=4,!0):n.substring(r,r+5)==="false"||Hs.BOOL&e&&t-r<5&&"false".startsWith(n.substring(r))?(r+=5,!1):n.substring(r,r+8)==="Infinity"||Hs.INFINITY&e&&t-r<8&&"Infinity".startsWith(n.substring(r))?(r+=8,1/0):n.substring(r,r+9)==="-Infinity"||Hs.MINUS_INFINITY&e&&1<t-r&&t-r<9&&"-Infinity".startsWith(n.substring(r))?(r+=9,-1/0):n.substring(r,r+3)==="NaN"||Hs.NAN&e&&t-r<3&&"NaN".startsWith(n.substring(r))?(r+=3,NaN):u()),a=()=>{const f=r;let p=!1;for(r++;r<t&&(n[r]!=='"'||p&&n[r-1]==="\\");)p=n[r]==="\\"?!p:!1,r++;if(n.charAt(r)=='"')try{return JSON.parse(n.substring(f,++r-Number(p)))}catch(m){i(String(m))}else if(Hs.STR&e)try{return JSON.parse(n.substring(f,r-Number(p))+'"')}catch{return JSON.parse(n.substring(f,n.lastIndexOf("\\"))+'"')}s("Unterminated string literal")},l=()=>{r++,d();const f={};try{for(;n[r]!=="}";){if(d(),r>=t&&Hs.OBJ&e)return f;const p=a();d(),r++;try{const m=o();Object.defineProperty(f,p,{value:m,writable:!0,enumerable:!0,configurable:!0})}catch(m){if(Hs.OBJ&e)return f;throw m}d(),n[r]===","&&r++}}catch{if(Hs.OBJ&e)return f;s("Expected '}' at end of object")}return r++,f},c=()=>{r++;const f=[];try{for(;n[r]!=="]";)f.push(o()),d(),n[r]===","&&r++}catch{if(Hs.ARR&e)return f;s("Expected ']' at end of array")}return r++,f},u=()=>{if(r===0){n==="-"&&Hs.NUM&e&&s("Not sure what '-' is");try{return JSON.parse(n)}catch(p){if(Hs.NUM&e)try{return n[n.length-1]==="."?JSON.parse(n.substring(0,n.lastIndexOf("."))):JSON.parse(n.substring(0,n.lastIndexOf("e")))}catch{}i(String(p))}}const f=r;for(n[r]==="-"&&r++;n[r]&&!",]}".includes(n[r]);)r++;r==t&&!(Hs.NUM&e)&&s("Unterminated number literal");try{return JSON.parse(n.substring(f,r))}catch{n.substring(f,r)==="-"&&Hs.NUM&e&&s("Not sure what '-' is");try{return JSON.parse(n.substring(f,n.lastIndexOf("e")))}catch(m){i(String(m))}}},d=()=>{for(;r<t&&` +\r `.includes(n[r]);)r++};return o()},RV=n=>Mbe(n,Hs.ALL^Hs.NUM);var Ps,yu,Pg,nh,aE,Ox,lE,cE,uE,Px,dE,$V;class Bb extends xV{constructor(e){super(),Ps.add(this),yu.set(this,void 0),Pg.set(this,void 0),nh.set(this,void 0),Vt(this,yu,e),Vt(this,Pg,[])}get currentChatCompletionSnapshot(){return pe(this,nh,"f")}static fromReadableStream(e){const t=new Bb(null);return t._run(()=>t._fromReadableStream(e)),t}static createChatCompletion(e,t,r){const s=new Bb(t);return s._run(()=>s._runChatCompletion(e,{...t,stream:!0},{...r,headers:{...r==null?void 0:r.headers,"X-Stainless-Helper-Method":"stream"}})),s}async _createChatCompletion(e,t,r){var o;super._createChatCompletion;const s=r==null?void 0:r.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",()=>this.controller.abort())),pe(this,Ps,"m",aE).call(this);const i=await e.chat.completions.create({...t,stream:!0},{...r,signal:this.controller.signal});this._connected();for await(const a of i)pe(this,Ps,"m",lE).call(this,a);if((o=i.controller.signal)!=null&&o.aborted)throw new pa;return this._addChatCompletion(pe(this,Ps,"m",Px).call(this))}async _fromReadableStream(e,t){var o;const r=t==null?void 0:t.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",()=>this.controller.abort())),pe(this,Ps,"m",aE).call(this),this._connected();const s=Xl.fromReadableStream(e,this.controller);let i;for await(const a of s)i&&i!==a.id&&this._addChatCompletion(pe(this,Ps,"m",Px).call(this)),pe(this,Ps,"m",lE).call(this,a),i=a.id;if((o=s.controller.signal)!=null&&o.aborted)throw new pa;return this._addChatCompletion(pe(this,Ps,"m",Px).call(this))}[(yu=new WeakMap,Pg=new WeakMap,nh=new WeakMap,Ps=new WeakSet,aE=function(){this.ended||Vt(this,nh,void 0)},Ox=function(t){let r=pe(this,Pg,"f")[t.index];return r||(r={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},pe(this,Pg,"f")[t.index]=r,r)},lE=function(t){var s,i,o,a,l,c,u,d,f,p,m,y,w,k,x;if(this.ended)return;const r=pe(this,Ps,"m",$V).call(this,t);this._emit("chunk",t,r);for(const S of t.choices){const _=r.choices[S.index];S.delta.content!=null&&((s=_.message)==null?void 0:s.role)==="assistant"&&((i=_.message)!=null&&i.content)&&(this._emit("content",S.delta.content,_.message.content),this._emit("content.delta",{delta:S.delta.content,snapshot:_.message.content,parsed:_.message.parsed})),S.delta.refusal!=null&&((o=_.message)==null?void 0:o.role)==="assistant"&&((a=_.message)!=null&&a.refusal)&&this._emit("refusal.delta",{delta:S.delta.refusal,snapshot:_.message.refusal}),((l=S.logprobs)==null?void 0:l.content)!=null&&((c=_.message)==null?void 0:c.role)==="assistant"&&this._emit("logprobs.content.delta",{content:(u=S.logprobs)==null?void 0:u.content,snapshot:((d=_.logprobs)==null?void 0:d.content)??[]}),((f=S.logprobs)==null?void 0:f.refusal)!=null&&((p=_.message)==null?void 0:p.role)==="assistant"&&this._emit("logprobs.refusal.delta",{refusal:(m=S.logprobs)==null?void 0:m.refusal,snapshot:((y=_.logprobs)==null?void 0:y.refusal)??[]});const A=pe(this,Ps,"m",Ox).call(this,_);_.finish_reason&&(pe(this,Ps,"m",uE).call(this,_),A.current_tool_call_index!=null&&pe(this,Ps,"m",cE).call(this,_,A.current_tool_call_index));for(const T of S.delta.tool_calls??[])A.current_tool_call_index!==T.index&&(pe(this,Ps,"m",uE).call(this,_),A.current_tool_call_index!=null&&pe(this,Ps,"m",cE).call(this,_,A.current_tool_call_index)),A.current_tool_call_index=T.index;for(const T of S.delta.tool_calls??[]){const O=(w=_.message.tool_calls)==null?void 0:w[T.index];O!=null&&O.type&&((O==null?void 0:O.type)==="function"?this._emit("tool_calls.function.arguments.delta",{name:(k=O.function)==null?void 0:k.name,index:T.index,arguments:O.function.arguments,parsed_arguments:O.function.parsed_arguments,arguments_delta:((x=T.function)==null?void 0:x.arguments)??""}):(O==null||O.type,void 0))}}},cE=function(t,r){var o,a,l;if(pe(this,Ps,"m",Ox).call(this,t).done_tool_calls.has(r))return;const i=(o=t.message.tool_calls)==null?void 0:o[r];if(!i)throw new Error("no tool call snapshot");if(!i.type)throw new Error("tool call snapshot missing `type`");if(i.type==="function"){const c=(l=(a=pe(this,yu,"f"))==null?void 0:a.tools)==null?void 0:l.find(u=>Cx(u)&&u.function.name===i.function.name);this._emit("tool_calls.function.arguments.done",{name:i.function.name,index:r,arguments:i.function.arguments,parsed_arguments:Rb(c)?c.$parseRaw(i.function.arguments):c!=null&&c.function.strict?JSON.parse(i.function.arguments):null})}else i.type},uE=function(t){var s,i;const r=pe(this,Ps,"m",Ox).call(this,t);if(t.message.content&&!r.content_done){r.content_done=!0;const o=pe(this,Ps,"m",dE).call(this);this._emit("content.done",{content:t.message.content,parsed:o?o.$parseRaw(t.message.content):null})}t.message.refusal&&!r.refusal_done&&(r.refusal_done=!0,this._emit("refusal.done",{refusal:t.message.refusal})),(s=t.logprobs)!=null&&s.content&&!r.logprobs_content_done&&(r.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:t.logprobs.content})),(i=t.logprobs)!=null&&i.refusal&&!r.logprobs_refusal_done&&(r.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:t.logprobs.refusal}))},Px=function(){if(this.ended)throw new vt("stream has ended, this shouldn't happen");const t=pe(this,nh,"f");if(!t)throw new vt("request ended without sending any chunks");return Vt(this,nh,void 0),Vt(this,Pg,[]),Pbe(t,pe(this,yu,"f"))},dE=function(){var r;const t=(r=pe(this,yu,"f"))==null?void 0:r.response_format;return JS(t)?t:null},$V=function(t){var r,s,i,o;let a=pe(this,nh,"f");const{choices:l,...c}=t;a?Object.assign(a,c):a=Vt(this,nh,{...c,choices:[]});for(const{delta:u,finish_reason:d,index:f,logprobs:p=null,...m}of t.choices){let y=a.choices[f];if(y||(y=a.choices[f]={finish_reason:d,index:f,message:{},logprobs:p,...m}),p)if(!y.logprobs)y.logprobs=Object.assign({},p);else{const{content:T,refusal:O,...I}=p;Object.assign(y.logprobs,I),T&&((r=y.logprobs).content??(r.content=[]),y.logprobs.content.push(...T)),O&&((s=y.logprobs).refusal??(s.refusal=[]),y.logprobs.refusal.push(...O))}if(d&&(y.finish_reason=d,pe(this,yu,"f")&&mV(pe(this,yu,"f")))){if(d==="length")throw new RB;if(d==="content_filter")throw new $B}if(Object.assign(y,m),!u)continue;const{content:w,refusal:k,function_call:x,role:S,tool_calls:_,...A}=u;if(Object.assign(y.message,A),k&&(y.message.refusal=(y.message.refusal||"")+k),S&&(y.message.role=S),x&&(y.message.function_call?(x.name&&(y.message.function_call.name=x.name),x.arguments&&((i=y.message.function_call).arguments??(i.arguments=""),y.message.function_call.arguments+=x.arguments)):y.message.function_call=x),w&&(y.message.content=(y.message.content||"")+w,!y.message.refusal&&pe(this,Ps,"m",dE).call(this)&&(y.message.parsed=RV(y.message.content))),_){y.message.tool_calls||(y.message.tool_calls=[]);for(const{index:T,id:O,type:I,function:R,...D}of _){const W=(o=y.message.tool_calls)[T]??(o[T]={});Object.assign(W,D),O&&(W.id=O),I&&(W.type=I),R&&(W.function??(W.function={name:R.name??"",arguments:""})),R!=null&&R.name&&(W.function.name=R.name),R!=null&&R.arguments&&(W.function.arguments+=R.arguments,Cbe(pe(this,yu,"f"),W)&&(W.function.parsed_arguments=RV(W.function.arguments)))}}}return a},Symbol.asyncIterator)](){const e=[],t=[];let r=!1;return this.on("chunk",s=>{const i=t.shift();i?i.resolve(s):e.push(s)}),this.on("end",()=>{r=!0;for(const s of t)s.resolve(void 0);t.length=0}),this.on("abort",s=>{r=!0;for(const i of t)i.reject(s);t.length=0}),this.on("error",s=>{r=!0;for(const i of t)i.reject(s);t.length=0}),{next:async()=>e.length?{value:e.shift(),done:!1}:r?{value:void 0,done:!0}:new Promise((i,o)=>t.push({resolve:i,reject:o})).then(i=>i?{value:i,done:!1}:{value:void 0,done:!0}),return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new Xl(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function Pbe(n,e){const{id:t,choices:r,created:s,model:i,system_fingerprint:o,...a}=n,l={...a,id:t,choices:r.map(({message:c,finish_reason:u,index:d,logprobs:f,...p})=>{if(!u)throw new vt(`missing finish_reason for choice ${d}`);const{content:m=null,function_call:y,tool_calls:w,...k}=c,x=c.role;if(!x)throw new vt(`missing role for choice ${d}`);if(y){const{arguments:S,name:_}=y;if(S==null)throw new vt(`missing function_call.arguments for choice ${d}`);if(!_)throw new vt(`missing function_call.name for choice ${d}`);return{...p,message:{content:m,function_call:{arguments:S,name:_},role:x,refusal:c.refusal??null},finish_reason:u,index:d,logprobs:f}}return w?{...p,index:d,finish_reason:u,logprobs:f,message:{...k,role:x,content:m,refusal:c.refusal??null,tool_calls:w.map((S,_)=>{const{function:A,type:T,id:O,...I}=S,{arguments:R,name:D,...W}=A||{};if(O==null)throw new vt(`missing choices[${d}].tool_calls[${_}].id +${Ix(n)}`);if(T==null)throw new vt(`missing choices[${d}].tool_calls[${_}].type +${Ix(n)}`);if(D==null)throw new vt(`missing choices[${d}].tool_calls[${_}].function.name +${Ix(n)}`);if(R==null)throw new vt(`missing choices[${d}].tool_calls[${_}].function.arguments +${Ix(n)}`);return{...I,id:O,type:T,function:{...W,name:D,arguments:R}}})}}:{...p,message:{...k,content:m,role:x,refusal:c.refusal??null},finish_reason:u,index:d,logprobs:f}}),created:s,model:i,object:"chat.completion",...o?{system_fingerprint:o}:{}};return wbe(l,e)}function Ix(n){return JSON.stringify(n)}function NHe(n){}class Dx extends Bb{static fromReadableStream(e){const t=new Dx(null);return t._run(()=>t._fromReadableStream(e)),t}static runTools(e,t,r){const s=new Dx(t),i={...r,headers:{...r==null?void 0:r.headers,"X-Stainless-Helper-Method":"runTools"}};return s._run(()=>s._runTools(e,t,i)),s}}let hE=class extends gt{constructor(){super(...arguments),this.messages=new pV(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(Ne`/chat/completions/${e}`,t)}update(e,t,r){return this._client.post(Ne`/chat/completions/${e}`,{body:t,...r})}list(e={},t){return this._client.getAPIList("/chat/completions",vs,{query:e,...t})}delete(e,t){return this._client.delete(Ne`/chat/completions/${e}`,t)}parse(e,t){return Sbe(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t==null?void 0:t.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap(r=>QS(r,e))}runTools(e,t){return e.stream?Dx.runTools(this._client,e,t):oE.runTools(this._client,e,t)}stream(e,t){return Bb.createChatCompletion(this._client,e,t)}};hE.Messages=pV;class fE extends gt{constructor(){super(...arguments),this.completions=new hE(this._client)}}fE.Completions=hE;const LV=Symbol("brand.privateNullableHeaders");function*Ibe(n){if(!n)return;if(LV in n){const{values:r,nulls:s}=n;yield*r.entries();for(const i of s)yield[i,null];return}let e=!1,t;n instanceof Headers?t=n.entries():LB(n)?t=n:(e=!0,t=Object.entries(n??{}));for(let r of t){const s=r[0];if(typeof s!="string")throw new TypeError("expected header name to be a string");const i=LB(r[1])?r[1]:[r[1]];let o=!1;for(const a of i)a!==void 0&&(e&&!o&&(o=!0,yield[s,null]),yield[s,a])}}const lt=n=>{const e=new Headers,t=new Set;for(const r of n){const s=new Set;for(const[i,o]of Ibe(r)){const a=i.toLowerCase();s.has(a)||(e.delete(i),s.add(a)),o===null?(e.delete(i),t.add(a)):(e.append(i,o),t.delete(a))}}return{[LV]:!0,values:e,nulls:t}};class FV extends gt{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:lt([{Accept:"application/octet-stream"},t==null?void 0:t.headers]),__binaryResponse:!0})}}class jV extends gt{create(e,t){return this._client.post("/audio/transcriptions",Op({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class BV extends gt{create(e,t){return this._client.post("/audio/translations",Op({body:e,...t,__metadata:{model:e.model}},this._client))}}class Vb extends gt{constructor(){super(...arguments),this.transcriptions=new jV(this._client),this.translations=new BV(this._client),this.speech=new FV(this._client)}}Vb.Transcriptions=jV,Vb.Translations=BV,Vb.Speech=FV;class VV extends gt{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(Ne`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",vs,{query:e,...t})}cancel(e,t){return this._client.post(Ne`/batches/${e}/cancel`,t)}}class zV extends gt{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:lt([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}retrieve(e,t){return this._client.get(Ne`/assistants/${e}`,{...t,headers:lt([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}update(e,t,r){return this._client.post(Ne`/assistants/${e}`,{body:t,...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}list(e={},t){return this._client.getAPIList("/assistants",vs,{query:e,...t,headers:lt([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}delete(e,t){return this._client.delete(Ne`/assistants/${e}`,{...t,headers:lt([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}}let HV=class extends gt{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:lt([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}};class qV extends gt{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:lt([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}}let Rx=class extends gt{constructor(){super(...arguments),this.sessions=new HV(this._client),this.transcriptionSessions=new qV(this._client)}};Rx.Sessions=HV,Rx.TranscriptionSessions=qV;class UV extends gt{create(e,t){return this._client.post("/chatkit/sessions",{body:e,...t,headers:lt([{"OpenAI-Beta":"chatkit_beta=v1"},t==null?void 0:t.headers])})}cancel(e,t){return this._client.post(Ne`/chatkit/sessions/${e}/cancel`,{...t,headers:lt([{"OpenAI-Beta":"chatkit_beta=v1"},t==null?void 0:t.headers])})}}let WV=class extends gt{retrieve(e,t){return this._client.get(Ne`/chatkit/threads/${e}`,{...t,headers:lt([{"OpenAI-Beta":"chatkit_beta=v1"},t==null?void 0:t.headers])})}list(e={},t){return this._client.getAPIList("/chatkit/threads",xx,{query:e,...t,headers:lt([{"OpenAI-Beta":"chatkit_beta=v1"},t==null?void 0:t.headers])})}delete(e,t){return this._client.delete(Ne`/chatkit/threads/${e}`,{...t,headers:lt([{"OpenAI-Beta":"chatkit_beta=v1"},t==null?void 0:t.headers])})}listItems(e,t={},r){return this._client.getAPIList(Ne`/chatkit/threads/${e}/items`,xx,{query:t,...r,headers:lt([{"OpenAI-Beta":"chatkit_beta=v1"},r==null?void 0:r.headers])})}};class $x extends gt{constructor(){super(...arguments),this.sessions=new UV(this._client),this.threads=new WV(this._client)}}$x.Sessions=UV,$x.Threads=WV;class GV extends gt{create(e,t,r){return this._client.post(Ne`/threads/${e}/messages`,{body:t,...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}retrieve(e,t,r){const{thread_id:s}=t;return this._client.get(Ne`/threads/${s}/messages/${e}`,{...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}update(e,t,r){const{thread_id:s,...i}=t;return this._client.post(Ne`/threads/${s}/messages/${e}`,{body:i,...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}list(e,t={},r){return this._client.getAPIList(Ne`/threads/${e}/messages`,vs,{query:t,...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}delete(e,t,r){const{thread_id:s}=t;return this._client.delete(Ne`/threads/${s}/messages/${e}`,{...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}}let KV=class extends gt{retrieve(e,t,r){const{thread_id:s,run_id:i,...o}=t;return this._client.get(Ne`/threads/${s}/runs/${i}/steps/${e}`,{query:o,...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}list(e,t,r){const{thread_id:s,...i}=t;return this._client.getAPIList(Ne`/threads/${s}/runs/${e}/steps`,vs,{query:i,...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}};const Dbe=n=>{if(typeof Buffer<"u"){const e=Buffer.from(n,"base64");return Array.from(new Float32Array(e.buffer,e.byteOffset,e.length/Float32Array.BYTES_PER_ELEMENT))}else{const e=atob(n),t=e.length,r=new Uint8Array(t);for(let s=0;s<t;s++)r[s]=e.charCodeAt(s);return Array.from(new Float32Array(r.buffer))}},Ig=n=>{var e,t,r,s,i;if(typeof globalThis.process<"u")return((t=(e=globalThis.process.env)==null?void 0:e[n])==null?void 0:t.trim())??void 0;if(typeof globalThis.Deno<"u")return(i=(s=(r=globalThis.Deno.env)==null?void 0:r.get)==null?void 0:s.call(r,n))==null?void 0:i.trim()};var Qs,Pp,pE,Jl,Lx,Ja,Ip,Dg,Dp,Fx,Oo,jx,Bx,zb,Hb,qb,YV,ZV,XV,JV,QV,ez,tz;class Ub extends tE{constructor(){super(...arguments),Qs.add(this),pE.set(this,[]),Jl.set(this,{}),Lx.set(this,{}),Ja.set(this,void 0),Ip.set(this,void 0),Dg.set(this,void 0),Dp.set(this,void 0),Fx.set(this,void 0),Oo.set(this,void 0),jx.set(this,void 0),Bx.set(this,void 0),zb.set(this,void 0)}[(pE=new WeakMap,Jl=new WeakMap,Lx=new WeakMap,Ja=new WeakMap,Ip=new WeakMap,Dg=new WeakMap,Dp=new WeakMap,Fx=new WeakMap,Oo=new WeakMap,jx=new WeakMap,Bx=new WeakMap,zb=new WeakMap,Qs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let r=!1;return this.on("event",s=>{const i=t.shift();i?i.resolve(s):e.push(s)}),this.on("end",()=>{r=!0;for(const s of t)s.resolve(void 0);t.length=0}),this.on("abort",s=>{r=!0;for(const i of t)i.reject(s);t.length=0}),this.on("error",s=>{r=!0;for(const i of t)i.reject(s);t.length=0}),{next:async()=>e.length?{value:e.shift(),done:!1}:r?{value:void 0,done:!0}:new Promise((i,o)=>t.push({resolve:i,reject:o})).then(i=>i?{value:i,done:!1}:{value:void 0,done:!0}),return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new Pp;return t._run(()=>t._fromReadableStream(e)),t}async _fromReadableStream(e,t){var i;const r=t==null?void 0:t.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",()=>this.controller.abort())),this._connected();const s=Xl.fromReadableStream(e,this.controller);for await(const o of s)pe(this,Qs,"m",Hb).call(this,o);if((i=s.controller.signal)!=null&&i.aborted)throw new pa;return this._addRun(pe(this,Qs,"m",qb).call(this))}toReadableStream(){return new Xl(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,r,s){const i=new Pp;return i._run(()=>i._runToolAssistantStream(e,t,r,{...s,headers:{...s==null?void 0:s.headers,"X-Stainless-Helper-Method":"stream"}})),i}async _createToolAssistantStream(e,t,r,s){var l;const i=s==null?void 0:s.signal;i&&(i.aborted&&this.controller.abort(),i.addEventListener("abort",()=>this.controller.abort()));const o={...r,stream:!0},a=await e.submitToolOutputs(t,o,{...s,signal:this.controller.signal});this._connected();for await(const c of a)pe(this,Qs,"m",Hb).call(this,c);if((l=a.controller.signal)!=null&&l.aborted)throw new pa;return this._addRun(pe(this,Qs,"m",qb).call(this))}static createThreadAssistantStream(e,t,r){const s=new Pp;return s._run(()=>s._threadAssistantStream(e,t,{...r,headers:{...r==null?void 0:r.headers,"X-Stainless-Helper-Method":"stream"}})),s}static createAssistantStream(e,t,r,s){const i=new Pp;return i._run(()=>i._runAssistantStream(e,t,r,{...s,headers:{...s==null?void 0:s.headers,"X-Stainless-Helper-Method":"stream"}})),i}currentEvent(){return pe(this,jx,"f")}currentRun(){return pe(this,Bx,"f")}currentMessageSnapshot(){return pe(this,Ja,"f")}currentRunStepSnapshot(){return pe(this,zb,"f")}async finalRunSteps(){return await this.done(),Object.values(pe(this,Jl,"f"))}async finalMessages(){return await this.done(),Object.values(pe(this,Lx,"f"))}async finalRun(){if(await this.done(),!pe(this,Ip,"f"))throw Error("Final run was not received.");return pe(this,Ip,"f")}async _createThreadAssistantStream(e,t,r){var a;const s=r==null?void 0:r.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",()=>this.controller.abort()));const i={...t,stream:!0},o=await e.createAndRun(i,{...r,signal:this.controller.signal});this._connected();for await(const l of o)pe(this,Qs,"m",Hb).call(this,l);if((a=o.controller.signal)!=null&&a.aborted)throw new pa;return this._addRun(pe(this,Qs,"m",qb).call(this))}async _createAssistantStream(e,t,r,s){var l;const i=s==null?void 0:s.signal;i&&(i.aborted&&this.controller.abort(),i.addEventListener("abort",()=>this.controller.abort()));const o={...r,stream:!0},a=await e.create(t,o,{...s,signal:this.controller.signal});this._connected();for await(const c of a)pe(this,Qs,"m",Hb).call(this,c);if((l=a.controller.signal)!=null&&l.aborted)throw new pa;return this._addRun(pe(this,Qs,"m",qb).call(this))}static accumulateDelta(e,t){for(const[r,s]of Object.entries(t)){if(!e.hasOwnProperty(r)){e[r]=s;continue}let i=e[r];if(i==null){e[r]=s;continue}if(r==="index"||r==="type"){e[r]=s;continue}if(typeof i=="string"&&typeof s=="string")i+=s;else if(typeof i=="number"&&typeof s=="number")i+=s;else if(zS(i)&&zS(s))i=this.accumulateDelta(i,s);else if(Array.isArray(i)&&Array.isArray(s)){if(i.every(o=>typeof o=="string"||typeof o=="number")){i.push(...s);continue}for(const o of s){if(!zS(o))throw new Error(`Expected array delta entry to be an object but got: ${o}`);const a=o.index;if(a==null)throw console.error(o),new Error("Expected array delta entry to have an `index` property");if(typeof a!="number")throw new Error(`Expected array delta entry \`index\` property to be a number but got ${a}`);const l=i[a];l==null?i.push(o):i[a]=this.accumulateDelta(l,o)}continue}else throw Error(`Unhandled record type: ${r}, deltaValue: ${s}, accValue: ${i}`);e[r]=i}return e}_addRun(e){return e}async _threadAssistantStream(e,t,r){return await this._createThreadAssistantStream(t,e,r)}async _runAssistantStream(e,t,r,s){return await this._createAssistantStream(t,e,r,s)}async _runToolAssistantStream(e,t,r,s){return await this._createToolAssistantStream(t,e,r,s)}}Pp=Ub,Hb=function(e){if(!this.ended)switch(Vt(this,jx,e),pe(this,Qs,"m",XV).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":pe(this,Qs,"m",tz).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":pe(this,Qs,"m",ZV).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":pe(this,Qs,"m",YV).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},qb=function(){if(this.ended)throw new vt("stream has ended, this shouldn't happen");if(!pe(this,Ip,"f"))throw Error("Final run has not been received");return pe(this,Ip,"f")},YV=function(e){const[t,r]=pe(this,Qs,"m",QV).call(this,e,pe(this,Ja,"f"));Vt(this,Ja,t),pe(this,Lx,"f")[t.id]=t;for(const s of r){const i=t.content[s.index];(i==null?void 0:i.type)=="text"&&this._emit("textCreated",i.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if(s.type=="text"&&s.text){let i=s.text,o=t.content[s.index];if(o&&o.type=="text")this._emit("textDelta",i,o.text);else throw Error("The snapshot associated with this text delta is not text or missing")}if(s.index!=pe(this,Dg,"f")){if(pe(this,Dp,"f"))switch(pe(this,Dp,"f").type){case"text":this._emit("textDone",pe(this,Dp,"f").text,pe(this,Ja,"f"));break;case"image_file":this._emit("imageFileDone",pe(this,Dp,"f").image_file,pe(this,Ja,"f"));break}Vt(this,Dg,s.index)}Vt(this,Dp,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(pe(this,Dg,"f")!==void 0){const s=e.data.content[pe(this,Dg,"f")];if(s)switch(s.type){case"image_file":this._emit("imageFileDone",s.image_file,pe(this,Ja,"f"));break;case"text":this._emit("textDone",s.text,pe(this,Ja,"f"));break}}pe(this,Ja,"f")&&this._emit("messageDone",e.data),Vt(this,Ja,void 0)}},ZV=function(e){const t=pe(this,Qs,"m",JV).call(this,e);switch(Vt(this,zb,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const r=e.data.delta;if(r.step_details&&r.step_details.type=="tool_calls"&&r.step_details.tool_calls&&t.step_details.type=="tool_calls")for(const i of r.step_details.tool_calls)i.index==pe(this,Fx,"f")?this._emit("toolCallDelta",i,t.step_details.tool_calls[i.index]):(pe(this,Oo,"f")&&this._emit("toolCallDone",pe(this,Oo,"f")),Vt(this,Fx,i.index),Vt(this,Oo,t.step_details.tool_calls[i.index]),pe(this,Oo,"f")&&this._emit("toolCallCreated",pe(this,Oo,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":Vt(this,zb,void 0),e.data.step_details.type=="tool_calls"&&pe(this,Oo,"f")&&(this._emit("toolCallDone",pe(this,Oo,"f")),Vt(this,Oo,void 0)),this._emit("runStepDone",e.data,t);break}},XV=function(e){pe(this,pE,"f").push(e),this._emit("event",e)},JV=function(e){switch(e.event){case"thread.run.step.created":return pe(this,Jl,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=pe(this,Jl,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let r=e.data;if(r.delta){const s=Pp.accumulateDelta(t,r.delta);pe(this,Jl,"f")[e.data.id]=s}return pe(this,Jl,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":pe(this,Jl,"f")[e.data.id]=e.data;break}if(pe(this,Jl,"f")[e.data.id])return pe(this,Jl,"f")[e.data.id];throw new Error("No snapshot available")},QV=function(e,t){let r=[];switch(e.event){case"thread.message.created":return[e.data,r];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let s=e.data;if(s.delta.content)for(const i of s.delta.content)if(i.index in t.content){let o=t.content[i.index];t.content[i.index]=pe(this,Qs,"m",ez).call(this,i,o)}else t.content[i.index]=i,r.push(i);return[t,r];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,r];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},ez=function(e,t){return Pp.accumulateDelta(t,e)},tz=function(e){switch(Vt(this,Bx,e.data),e.event){case"thread.run.created":break;case"thread.run.queued":break;case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":Vt(this,Ip,e.data),pe(this,Oo,"f")&&(this._emit("toolCallDone",pe(this,Oo,"f")),Vt(this,Oo,void 0));break}};let mE=class extends gt{constructor(){super(...arguments),this.steps=new KV(this._client)}create(e,t,r){const{include:s,...i}=t;return this._client.post(Ne`/threads/${e}/runs`,{query:{include:s},body:i,...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers]),stream:t.stream??!1})}retrieve(e,t,r){const{thread_id:s}=t;return this._client.get(Ne`/threads/${s}/runs/${e}`,{...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}update(e,t,r){const{thread_id:s,...i}=t;return this._client.post(Ne`/threads/${s}/runs/${e}`,{body:i,...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}list(e,t={},r){return this._client.getAPIList(Ne`/threads/${e}/runs`,vs,{query:t,...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}cancel(e,t,r){const{thread_id:s}=t;return this._client.post(Ne`/threads/${s}/runs/${e}/cancel`,{...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}async createAndPoll(e,t,r){const s=await this.create(e,t,r);return await this.poll(s.id,{thread_id:e},r)}createAndStream(e,t,r){return Ub.createAssistantStream(e,this._client.beta.threads.runs,t,r)}async poll(e,t,r){var i;const s=lt([r==null?void 0:r.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":((i=r==null?void 0:r.pollIntervalMs)==null?void 0:i.toString())??void 0}]);for(;;){const{data:o,response:a}=await this.retrieve(e,t,{...r,headers:{...r==null?void 0:r.headers,...s}}).withResponse();switch(o.status){case"queued":case"in_progress":case"cancelling":let l=5e3;if(r!=null&&r.pollIntervalMs)l=r.pollIntervalMs;else{const c=a.headers.get("openai-poll-after-ms");if(c){const u=parseInt(c);isNaN(u)||(l=u)}}await Mb(l);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return o}}}stream(e,t,r){return Ub.createAssistantStream(e,this._client.beta.threads.runs,t,r)}submitToolOutputs(e,t,r){const{thread_id:s,...i}=t;return this._client.post(Ne`/threads/${s}/runs/${e}/submit_tool_outputs`,{body:i,...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,r){const s=await this.submitToolOutputs(e,t,r);return await this.poll(s.id,t,r)}submitToolOutputsStream(e,t,r){return Ub.createToolAssistantStream(e,this._client.beta.threads.runs,t,r)}};mE.Steps=KV;class Vx extends gt{constructor(){super(...arguments),this.runs=new mE(this._client),this.messages=new GV(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:lt([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}retrieve(e,t){return this._client.get(Ne`/threads/${e}`,{...t,headers:lt([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}update(e,t,r){return this._client.post(Ne`/threads/${e}`,{body:t,...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}delete(e,t){return this._client.delete(Ne`/threads/${e}`,{...t,headers:lt([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:lt([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const r=await this.createAndRun(e,t);return await this.runs.poll(r.id,{thread_id:r.thread_id},t)}createAndRunStream(e,t){return Ub.createThreadAssistantStream(e,this._client.beta.threads,t)}}Vx.Runs=mE,Vx.Messages=GV;class Rg extends gt{constructor(){super(...arguments),this.realtime=new Rx(this._client),this.chatkit=new $x(this._client),this.assistants=new zV(this._client),this.threads=new Vx(this._client)}}Rg.Realtime=Rx,Rg.ChatKit=$x,Rg.Assistants=zV,Rg.Threads=Vx;class nz extends gt{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}let rz=class extends gt{retrieve(e,t,r){const{container_id:s}=t;return this._client.get(Ne`/containers/${s}/files/${e}/content`,{...r,headers:lt([{Accept:"application/binary"},r==null?void 0:r.headers]),__binaryResponse:!0})}},gE=class extends gt{constructor(){super(...arguments),this.content=new rz(this._client)}create(e,t,r){return this._client.post(Ne`/containers/${e}/files`,Op({body:t,...r},this._client))}retrieve(e,t,r){const{container_id:s}=t;return this._client.get(Ne`/containers/${s}/files/${e}`,r)}list(e,t={},r){return this._client.getAPIList(Ne`/containers/${e}/files`,vs,{query:t,...r})}delete(e,t,r){const{container_id:s}=t;return this._client.delete(Ne`/containers/${s}/files/${e}`,{...r,headers:lt([{Accept:"*/*"},r==null?void 0:r.headers])})}};gE.Content=rz;class yE extends gt{constructor(){super(...arguments),this.files=new gE(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(Ne`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",vs,{query:e,...t})}delete(e,t){return this._client.delete(Ne`/containers/${e}`,{...t,headers:lt([{Accept:"*/*"},t==null?void 0:t.headers])})}}yE.Files=gE;let sz=class extends gt{create(e,t,r){const{include:s,...i}=t;return this._client.post(Ne`/conversations/${e}/items`,{query:{include:s},body:i,...r})}retrieve(e,t,r){const{conversation_id:s,...i}=t;return this._client.get(Ne`/conversations/${s}/items/${e}`,{query:i,...r})}list(e,t={},r){return this._client.getAPIList(Ne`/conversations/${e}/items`,xx,{query:t,...r})}delete(e,t,r){const{conversation_id:s}=t;return this._client.delete(Ne`/conversations/${s}/items/${e}`,r)}};class vE extends gt{constructor(){super(...arguments),this.items=new sz(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(Ne`/conversations/${e}`,t)}update(e,t,r){return this._client.post(Ne`/conversations/${e}`,{body:t,...r})}delete(e,t){return this._client.delete(Ne`/conversations/${e}`,t)}}vE.Items=sz;class iz extends gt{create(e,t){const r=!!e.encoding_format;let s=r?e.encoding_format:"base64";r&&Js(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const i=this._client.post("/embeddings",{body:{...e,encoding_format:s},...t});return r?i:(Js(this._client).debug("embeddings/decoding base64 embeddings from base64"),i._thenUnwrap(o=>(o&&o.data&&o.data.forEach(a=>{const l=a.embedding;a.embedding=Dbe(l)}),o)))}}class oz extends gt{retrieve(e,t,r){const{eval_id:s,run_id:i}=t;return this._client.get(Ne`/evals/${s}/runs/${i}/output_items/${e}`,r)}list(e,t,r){const{eval_id:s,...i}=t;return this._client.getAPIList(Ne`/evals/${s}/runs/${e}/output_items`,vs,{query:i,...r})}}class bE extends gt{constructor(){super(...arguments),this.outputItems=new oz(this._client)}create(e,t,r){return this._client.post(Ne`/evals/${e}/runs`,{body:t,...r})}retrieve(e,t,r){const{eval_id:s}=t;return this._client.get(Ne`/evals/${s}/runs/${e}`,r)}list(e,t={},r){return this._client.getAPIList(Ne`/evals/${e}/runs`,vs,{query:t,...r})}delete(e,t,r){const{eval_id:s}=t;return this._client.delete(Ne`/evals/${s}/runs/${e}`,r)}cancel(e,t,r){const{eval_id:s}=t;return this._client.post(Ne`/evals/${s}/runs/${e}`,r)}}bE.OutputItems=oz;class wE extends gt{constructor(){super(...arguments),this.runs=new bE(this._client)}create(e,t){return this._client.post("/evals",{body:e,...t})}retrieve(e,t){return this._client.get(Ne`/evals/${e}`,t)}update(e,t,r){return this._client.post(Ne`/evals/${e}`,{body:t,...r})}list(e={},t){return this._client.getAPIList("/evals",vs,{query:e,...t})}delete(e,t){return this._client.delete(Ne`/evals/${e}`,t)}}wE.Runs=bE;let az=class extends gt{create(e,t){return this._client.post("/files",Op({body:e,...t},this._client))}retrieve(e,t){return this._client.get(Ne`/files/${e}`,t)}list(e={},t){return this._client.getAPIList("/files",vs,{query:e,...t})}delete(e,t){return this._client.delete(Ne`/files/${e}`,t)}content(e,t){return this._client.get(Ne`/files/${e}/content`,{...t,headers:lt([{Accept:"application/binary"},t==null?void 0:t.headers]),__binaryResponse:!0})}async waitForProcessing(e,{pollInterval:t=5e3,maxWait:r=30*60*1e3}={}){const s=new Set(["processed","error","deleted"]),i=Date.now();let o=await this.retrieve(e);for(;!o.status||!s.has(o.status);)if(await Mb(t),o=await this.retrieve(e),Date.now()-i>r)throw new VS({message:`Giving up on waiting for file ${e} to finish processing after ${r} milliseconds.`});return o}};class lz extends gt{}let cz=class extends gt{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class xE extends gt{constructor(){super(...arguments),this.graders=new cz(this._client)}}xE.Graders=cz;class uz extends gt{create(e,t,r){return this._client.getAPIList(Ne`/fine_tuning/checkpoints/${e}/permissions`,wx,{body:t,method:"post",...r})}retrieve(e,t={},r){return this._client.get(Ne`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...r})}delete(e,t,r){const{fine_tuned_model_checkpoint:s}=t;return this._client.delete(Ne`/fine_tuning/checkpoints/${s}/permissions/${e}`,r)}}let kE=class extends gt{constructor(){super(...arguments),this.permissions=new uz(this._client)}};kE.Permissions=uz;class dz extends gt{list(e,t={},r){return this._client.getAPIList(Ne`/fine_tuning/jobs/${e}/checkpoints`,vs,{query:t,...r})}}class CE extends gt{constructor(){super(...arguments),this.checkpoints=new dz(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(Ne`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",vs,{query:e,...t})}cancel(e,t){return this._client.post(Ne`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},r){return this._client.getAPIList(Ne`/fine_tuning/jobs/${e}/events`,vs,{query:t,...r})}pause(e,t){return this._client.post(Ne`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(Ne`/fine_tuning/jobs/${e}/resume`,t)}}CE.Checkpoints=dz;class $g extends gt{constructor(){super(...arguments),this.methods=new lz(this._client),this.jobs=new CE(this._client),this.checkpoints=new kE(this._client),this.alpha=new xE(this._client)}}$g.Methods=lz,$g.Jobs=CE,$g.Checkpoints=kE,$g.Alpha=xE;class hz extends gt{}class SE extends gt{constructor(){super(...arguments),this.graderModels=new hz(this._client)}}SE.GraderModels=hz;class fz extends gt{createVariation(e,t){return this._client.post("/images/variations",Op({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",Op({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class pz extends gt{retrieve(e,t){return this._client.get(Ne`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",wx,e)}delete(e,t){return this._client.delete(Ne`/models/${e}`,t)}}class mz extends gt{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class gz extends gt{accept(e,t,r){return this._client.post(Ne`/realtime/calls/${e}/accept`,{body:t,...r,headers:lt([{Accept:"*/*"},r==null?void 0:r.headers])})}hangup(e,t){return this._client.post(Ne`/realtime/calls/${e}/hangup`,{...t,headers:lt([{Accept:"*/*"},t==null?void 0:t.headers])})}refer(e,t,r){return this._client.post(Ne`/realtime/calls/${e}/refer`,{body:t,...r,headers:lt([{Accept:"*/*"},r==null?void 0:r.headers])})}reject(e,t={},r){return this._client.post(Ne`/realtime/calls/${e}/reject`,{body:t,...r,headers:lt([{Accept:"*/*"},r==null?void 0:r.headers])})}}class yz extends gt{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class zx extends gt{constructor(){super(...arguments),this.clientSecrets=new yz(this._client),this.calls=new gz(this._client)}}zx.ClientSecrets=yz,zx.Calls=gz;function Rbe(n,e){return!e||!Lbe(e)?{...n,output_parsed:null,output:n.output.map(t=>t.type==="function_call"?{...t,parsed_arguments:null}:t.type==="message"?{...t,content:t.content.map(r=>({...r,parsed:null}))}:t)}:vz(n,e)}function vz(n,e){const t=n.output.map(s=>{if(s.type==="function_call")return{...s,parsed_arguments:Bbe(e,s)};if(s.type==="message"){const i=s.content.map(o=>o.type==="output_text"?{...o,parsed:$be(e,o.text)}:o);return{...s,content:i}}return s}),r=Object.assign({},n,{output:t});return Object.getOwnPropertyDescriptor(n,"output_text")||EE(r),Object.defineProperty(r,"output_parsed",{enumerable:!0,get(){for(const s of r.output)if(s.type==="message"){for(const i of s.content)if(i.type==="output_text"&&i.parsed!==null)return i.parsed}return null}}),r}function $be(n,e){var t,r,s,i;return((r=(t=n.text)==null?void 0:t.format)==null?void 0:r.type)!=="json_schema"?null:"$parseRaw"in((s=n.text)==null?void 0:s.format)?((i=n.text)==null?void 0:i.format).$parseRaw(e):JSON.parse(e)}function Lbe(n){var e;return!!JS((e=n.text)==null?void 0:e.format)}function Fbe(n){return(n==null?void 0:n.$brand)==="auto-parseable-tool"}function jbe(n,e){return n.find(t=>t.type==="function"&&t.name===e)}function Bbe(n,e){const t=jbe(n.tools??[],e.name);return{...e,...e,parsed_arguments:Fbe(t)?t.$parseRaw(e.arguments):t!=null&&t.strict?JSON.parse(e.arguments):null}}function EE(n){const e=[];for(const t of n.output)if(t.type==="message")for(const r of t.content)r.type==="output_text"&&e.push(r.text);n.output_text=e.join("")}var Lg,Hx,rh,qx,bz,wz,xz,kz;class _E extends tE{constructor(e){super(),Lg.add(this),Hx.set(this,void 0),rh.set(this,void 0),qx.set(this,void 0),Vt(this,Hx,e)}static createResponse(e,t,r){const s=new _E(t);return s._run(()=>s._createOrRetrieveResponse(e,t,{...r,headers:{...r==null?void 0:r.headers,"X-Stainless-Helper-Method":"stream"}})),s}async _createOrRetrieveResponse(e,t,r){var a;const s=r==null?void 0:r.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",()=>this.controller.abort())),pe(this,Lg,"m",bz).call(this);let i,o=null;"response_id"in t?(i=await e.responses.retrieve(t.response_id,{stream:!0},{...r,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):i=await e.responses.create({...t,stream:!0},{...r,signal:this.controller.signal}),this._connected();for await(const l of i)pe(this,Lg,"m",wz).call(this,l,o);if((a=i.controller.signal)!=null&&a.aborted)throw new pa;return pe(this,Lg,"m",xz).call(this)}[(Hx=new WeakMap,rh=new WeakMap,qx=new WeakMap,Lg=new WeakSet,bz=function(){this.ended||Vt(this,rh,void 0)},wz=function(t,r){if(this.ended)return;const s=(o,a)=>{(r==null||a.sequence_number>r)&&this._emit(o,a)},i=pe(this,Lg,"m",kz).call(this,t);switch(s("event",t),t.type){case"response.output_text.delta":{const o=i.output[t.output_index];if(!o)throw new vt(`missing output at index ${t.output_index}`);if(o.type==="message"){const a=o.content[t.content_index];if(!a)throw new vt(`missing content at index ${t.content_index}`);if(a.type!=="output_text")throw new vt(`expected content to be 'output_text', got ${a.type}`);s("response.output_text.delta",{...t,snapshot:a.text})}break}case"response.function_call_arguments.delta":{const o=i.output[t.output_index];if(!o)throw new vt(`missing output at index ${t.output_index}`);o.type==="function_call"&&s("response.function_call_arguments.delta",{...t,snapshot:o.arguments});break}default:s(t.type,t);break}},xz=function(){if(this.ended)throw new vt("stream has ended, this shouldn't happen");const t=pe(this,rh,"f");if(!t)throw new vt("request ended without sending any events");Vt(this,rh,void 0);const r=Vbe(t,pe(this,Hx,"f"));return Vt(this,qx,r),r},kz=function(t){var s;let r=pe(this,rh,"f");if(!r){if(t.type!=="response.created")throw new vt(`When snapshot hasn't been set yet, expected 'response.created' event, got ${t.type}`);return r=Vt(this,rh,t.response),r}switch(t.type){case"response.output_item.added":{r.output.push(t.item);break}case"response.content_part.added":{const i=r.output[t.output_index];if(!i)throw new vt(`missing output at index ${t.output_index}`);const o=i.type,a=t.part;o==="message"&&a.type!=="reasoning_text"?i.content.push(a):o==="reasoning"&&a.type==="reasoning_text"&&(i.content||(i.content=[]),i.content.push(a));break}case"response.output_text.delta":{const i=r.output[t.output_index];if(!i)throw new vt(`missing output at index ${t.output_index}`);if(i.type==="message"){const o=i.content[t.content_index];if(!o)throw new vt(`missing content at index ${t.content_index}`);if(o.type!=="output_text")throw new vt(`expected content to be 'output_text', got ${o.type}`);o.text+=t.delta}break}case"response.function_call_arguments.delta":{const i=r.output[t.output_index];if(!i)throw new vt(`missing output at index ${t.output_index}`);i.type==="function_call"&&(i.arguments+=t.delta);break}case"response.reasoning_text.delta":{const i=r.output[t.output_index];if(!i)throw new vt(`missing output at index ${t.output_index}`);if(i.type==="reasoning"){const o=(s=i.content)==null?void 0:s[t.content_index];if(!o)throw new vt(`missing content at index ${t.content_index}`);if(o.type!=="reasoning_text")throw new vt(`expected content to be 'reasoning_text', got ${o.type}`);o.text+=t.delta}break}case"response.completed":{Vt(this,rh,t.response);break}}return r},Symbol.asyncIterator)](){const e=[],t=[];let r=!1;return this.on("event",s=>{const i=t.shift();i?i.resolve(s):e.push(s)}),this.on("end",()=>{r=!0;for(const s of t)s.resolve(void 0);t.length=0}),this.on("abort",s=>{r=!0;for(const i of t)i.reject(s);t.length=0}),this.on("error",s=>{r=!0;for(const i of t)i.reject(s);t.length=0}),{next:async()=>e.length?{value:e.shift(),done:!1}:r?{value:void 0,done:!0}:new Promise((i,o)=>t.push({resolve:i,reject:o})).then(i=>i?{value:i,done:!1}:{value:void 0,done:!0}),return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=pe(this,qx,"f");if(!e)throw new vt("stream ended without producing a ChatCompletion");return e}}function Vbe(n,e){return Rbe(n,e)}class Cz extends gt{list(e,t={},r){return this._client.getAPIList(Ne`/responses/${e}/input_items`,vs,{query:t,...r})}}class Sz extends gt{count(e={},t){return this._client.post("/responses/input_tokens",{body:e,...t})}}class Ux extends gt{constructor(){super(...arguments),this.inputItems=new Cz(this._client),this.inputTokens=new Sz(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap(r=>("object"in r&&r.object==="response"&&EE(r),r))}retrieve(e,t={},r){return this._client.get(Ne`/responses/${e}`,{query:t,...r,stream:(t==null?void 0:t.stream)??!1})._thenUnwrap(s=>("object"in s&&s.object==="response"&&EE(s),s))}delete(e,t){return this._client.delete(Ne`/responses/${e}`,{...t,headers:lt([{Accept:"*/*"},t==null?void 0:t.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap(r=>vz(r,e))}stream(e,t){return _E.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(Ne`/responses/${e}/cancel`,t)}compact(e,t){return this._client.post("/responses/compact",{body:e,...t})}}Ux.InputItems=Cz,Ux.InputTokens=Sz;class Ez extends gt{create(e,t,r){return this._client.post(Ne`/uploads/${e}/parts`,Op({body:t,...r},this._client))}}class TE extends gt{constructor(){super(...arguments),this.parts=new Ez(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(Ne`/uploads/${e}/cancel`,t)}complete(e,t,r){return this._client.post(Ne`/uploads/${e}/complete`,{body:t,...r})}}TE.Parts=Ez;const zbe=async n=>{const e=await Promise.allSettled(n),t=e.filter(s=>s.status==="rejected");if(t.length){for(const s of t)console.error(s.reason);throw new Error(`${t.length} promise(s) failed - see the above errors`)}const r=[];for(const s of e)s.status==="fulfilled"&&r.push(s.value);return r};class _z extends gt{create(e,t,r){return this._client.post(Ne`/vector_stores/${e}/file_batches`,{body:t,...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}retrieve(e,t,r){const{vector_store_id:s}=t;return this._client.get(Ne`/vector_stores/${s}/file_batches/${e}`,{...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}cancel(e,t,r){const{vector_store_id:s}=t;return this._client.post(Ne`/vector_stores/${s}/file_batches/${e}/cancel`,{...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}async createAndPoll(e,t,r){const s=await this.create(e,t);return await this.poll(e,s.id,r)}listFiles(e,t,r){const{vector_store_id:s,...i}=t;return this._client.getAPIList(Ne`/vector_stores/${s}/file_batches/${e}/files`,vs,{query:i,...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}async poll(e,t,r){var i;const s=lt([r==null?void 0:r.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":((i=r==null?void 0:r.pollIntervalMs)==null?void 0:i.toString())??void 0}]);for(;;){const{data:o,response:a}=await this.retrieve(t,{vector_store_id:e},{...r,headers:s}).withResponse();switch(o.status){case"in_progress":let l=5e3;if(r!=null&&r.pollIntervalMs)l=r.pollIntervalMs;else{const c=a.headers.get("openai-poll-after-ms");if(c){const u=parseInt(c);isNaN(u)||(l=u)}}await Mb(l);break;case"failed":case"cancelled":case"completed":return o}}}async uploadAndPoll(e,{files:t,fileIds:r=[]},s){if(t==null||t.length==0)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const i=(s==null?void 0:s.maxConcurrency)??5,o=Math.min(i,t.length),a=this._client,l=t.values(),c=[...r];async function u(f){for(let p of f){const m=await a.files.create({file:p,purpose:"assistants"},s);c.push(m.id)}}const d=Array(o).fill(l).map(u);return await zbe(d),await this.createAndPoll(e,{file_ids:c})}}class Tz extends gt{create(e,t,r){return this._client.post(Ne`/vector_stores/${e}/files`,{body:t,...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}retrieve(e,t,r){const{vector_store_id:s}=t;return this._client.get(Ne`/vector_stores/${s}/files/${e}`,{...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}update(e,t,r){const{vector_store_id:s,...i}=t;return this._client.post(Ne`/vector_stores/${s}/files/${e}`,{body:i,...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}list(e,t={},r){return this._client.getAPIList(Ne`/vector_stores/${e}/files`,vs,{query:t,...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}delete(e,t,r){const{vector_store_id:s}=t;return this._client.delete(Ne`/vector_stores/${s}/files/${e}`,{...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}async createAndPoll(e,t,r){const s=await this.create(e,t,r);return await this.poll(e,s.id,r)}async poll(e,t,r){var i;const s=lt([r==null?void 0:r.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":((i=r==null?void 0:r.pollIntervalMs)==null?void 0:i.toString())??void 0}]);for(;;){const o=await this.retrieve(t,{vector_store_id:e},{...r,headers:s}).withResponse(),a=o.data;switch(a.status){case"in_progress":let l=5e3;if(r!=null&&r.pollIntervalMs)l=r.pollIntervalMs;else{const c=o.response.headers.get("openai-poll-after-ms");if(c){const u=parseInt(c);isNaN(u)||(l=u)}}await Mb(l);break;case"failed":case"completed":return a}}}async upload(e,t,r){const s=await this._client.files.create({file:t,purpose:"assistants"},r);return this.create(e,{file_id:s.id},r)}async uploadAndPoll(e,t,r){const s=await this.upload(e,t,r);return await this.poll(e,s.id,r)}content(e,t,r){const{vector_store_id:s}=t;return this._client.getAPIList(Ne`/vector_stores/${s}/files/${e}/content`,wx,{...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}}class Wx extends gt{constructor(){super(...arguments),this.files=new Tz(this._client),this.fileBatches=new _z(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:lt([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}retrieve(e,t){return this._client.get(Ne`/vector_stores/${e}`,{...t,headers:lt([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}update(e,t,r){return this._client.post(Ne`/vector_stores/${e}`,{body:t,...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",vs,{query:e,...t,headers:lt([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}delete(e,t){return this._client.delete(Ne`/vector_stores/${e}`,{...t,headers:lt([{"OpenAI-Beta":"assistants=v2"},t==null?void 0:t.headers])})}search(e,t,r){return this._client.getAPIList(Ne`/vector_stores/${e}/search`,wx,{body:t,method:"post",...r,headers:lt([{"OpenAI-Beta":"assistants=v2"},r==null?void 0:r.headers])})}}Wx.Files=Tz,Wx.FileBatches=_z;class Az extends gt{create(e,t){return this._client.post("/videos",aV({body:e,...t},this._client))}retrieve(e,t){return this._client.get(Ne`/videos/${e}`,t)}list(e={},t){return this._client.getAPIList("/videos",xx,{query:e,...t})}delete(e,t){return this._client.delete(Ne`/videos/${e}`,t)}downloadContent(e,t={},r){return this._client.get(Ne`/videos/${e}/content`,{query:t,...r,headers:lt([{Accept:"application/binary"},r==null?void 0:r.headers]),__binaryResponse:!0})}remix(e,t,r){return this._client.post(Ne`/videos/${e}/remix`,aV({body:t,...r},this._client))}}var Fg,Nz,Gx;class Mz extends gt{constructor(){super(...arguments),Fg.add(this)}async unwrap(e,t,r=this._client.webhookSecret,s=300){return await this.verifySignature(e,t,r,s),JSON.parse(e)}async verifySignature(e,t,r=this._client.webhookSecret,s=300){if(typeof crypto>"u"||typeof crypto.subtle.importKey!="function"||typeof crypto.subtle.verify!="function")throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");pe(this,Fg,"m",Nz).call(this,r);const i=lt([t]).values,o=pe(this,Fg,"m",Gx).call(this,i,"webhook-signature"),a=pe(this,Fg,"m",Gx).call(this,i,"webhook-timestamp"),l=pe(this,Fg,"m",Gx).call(this,i,"webhook-id"),c=parseInt(a,10);if(isNaN(c))throw new Nb("Invalid webhook timestamp format");const u=Math.floor(Date.now()/1e3);if(u-c>s)throw new Nb("Webhook timestamp is too old");if(c>u+s)throw new Nb("Webhook timestamp is too new");const d=o.split(" ").map(y=>y.startsWith("v1,")?y.substring(3):y),f=r.startsWith("whsec_")?Buffer.from(r.replace("whsec_",""),"base64"):Buffer.from(r,"utf-8"),p=l?`${l}.${a}.${e}`:`${a}.${e}`,m=await crypto.subtle.importKey("raw",f,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const y of d)try{const w=Buffer.from(y,"base64");if(await crypto.subtle.verify("HMAC",m,w,new TextEncoder().encode(p)))return}catch{continue}throw new Nb("The given webhook signature does not match the expected signature")}}Fg=new WeakSet,Nz=function(e){if(typeof e!="string"||e.length===0)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Gx=function(e,t){if(!e)throw new Error("Headers are required");const r=e.get(t);if(r==null)throw new Error(`Missing required header: ${t}`);return r};var AE,NE,Kx,Oz;class mn{constructor({baseURL:e=Ig("OPENAI_BASE_URL"),apiKey:t=Ig("OPENAI_API_KEY"),organization:r=Ig("OPENAI_ORG_ID")??null,project:s=Ig("OPENAI_PROJECT_ID")??null,webhookSecret:i=Ig("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(AE.add(this),Kx.set(this,void 0),this.completions=new nz(this),this.chat=new fE(this),this.embeddings=new iz(this),this.files=new az(this),this.images=new fz(this),this.audio=new Vb(this),this.moderations=new mz(this),this.models=new pz(this),this.fineTuning=new $g(this),this.graders=new SE(this),this.vectorStores=new Wx(this),this.webhooks=new Mz(this),this.beta=new Rg(this),this.batches=new VV(this),this.uploads=new TE(this),this.responses=new Ux(this),this.realtime=new zx(this),this.conversations=new vE(this),this.evals=new wE(this),this.containers=new yE(this),this.videos=new Az(this),t===void 0)throw new vt("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const a={apiKey:t,organization:r,project:s,webhookSecret:i,...o,baseURL:e||"https://api.openai.com/v1"};if(!a.dangerouslyAllowBrowser&&Uve())throw new vt(`It looks like you're running in a browser-like environment. + +This is disabled by default, as it risks exposing your secret API credentials to attackers. +If you understand the risks and have appropriate mitigations in place, +you can set the \`dangerouslyAllowBrowser\` option to \`true\`, e.g., + +new OpenAI({ apiKey, dangerouslyAllowBrowser: true }); + +https://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety +`);this.baseURL=a.baseURL,this.timeout=a.timeout??NE.DEFAULT_TIMEOUT,this.logger=a.logger??console;const l="warn";this.logLevel=l,this.logLevel=nV(a.logLevel,"ClientOptions.logLevel",this)??nV(Ig("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??l,this.fetchOptions=a.fetchOptions,this.maxRetries=a.maxRetries??2,this.fetch=a.fetch??Zve(),Vt(this,Kx,Jve),this._options=a,this.apiKey=typeof t=="string"?t:"Missing Key",this.organization=r,this.project=s,this.webhookSecret=i}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return lt([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return sbe(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${Mg}`}defaultIdempotencyKey(){return`stainless-node-retry-${_B()}`}makeStatusError(e,t,r,s){return Xs.generate(e,t,r,s)}async _callApiKey(){const e=this._options.apiKey;if(typeof e!="function")return!1;let t;try{t=await e()}catch(r){throw r instanceof vt?r:new vt(`Failed to get token from 'apiKey' function: ${r.message}`,{cause:r})}if(typeof t!="string"||!t)throw new vt(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,r){const s=!pe(this,AE,"m",Oz).call(this)&&r||this.baseURL,i=Bve(e)?new URL(e):new URL(s+(s.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return Vve(o)||(t={...o,...t}),typeof t=="object"&&t&&!Array.isArray(t)&&(i.search=this.stringifyQuery(t)),i.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:r}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,r){return this.request(Promise.resolve(r).then(s=>({method:e,path:t,...s})))}request(e,t=null){return new vx(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,r){var k,x;const s=await e,i=s.maxRetries??this.maxRetries;t==null&&(t=i),await this.prepareOptions(s);const{req:o,url:a,timeout:l}=await this.buildRequest(s,{retryCount:i-t});await this.prepareRequest(o,{url:a,options:s});const c="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),u=r===void 0?"":`, retryOf: ${r}`,d=Date.now();if(Js(this).debug(`[${c}] sending request`,Mp({retryOfRequestLogID:r,method:s.method,url:a,options:s,headers:o.headers})),(k=s.signal)!=null&&k.aborted)throw new pa;const f=new AbortController,p=await this.fetchWithTimeout(a,o,l,f).catch(BS),m=Date.now();if(p instanceof globalThis.Error){const S=`retrying, ${t} attempts remaining`;if((x=s.signal)!=null&&x.aborted)throw new pa;const _=jS(p)||/timed? ?out/i.test(String(p)+("cause"in p?String(p.cause):""));if(t)return Js(this).info(`[${c}] connection ${_?"timed out":"failed"} - ${S}`),Js(this).debug(`[${c}] connection ${_?"timed out":"failed"} (${S})`,Mp({retryOfRequestLogID:r,url:a,durationMs:m-d,message:p.message})),this.retryRequest(s,t,r??c);throw Js(this).info(`[${c}] connection ${_?"timed out":"failed"} - error; no more retries left`),Js(this).debug(`[${c}] connection ${_?"timed out":"failed"} (error; no more retries left)`,Mp({retryOfRequestLogID:r,url:a,durationMs:m-d,message:p.message})),_?new VS:new px({cause:p})}const y=[...p.headers.entries()].filter(([S])=>S==="x-request-id").map(([S,_])=>", "+S+": "+JSON.stringify(_)).join(""),w=`[${c}${u}${y}] ${o.method} ${a} ${p.ok?"succeeded":"failed"} with status ${p.status} in ${m-d}ms`;if(!p.ok){const S=await this.shouldRetry(p);if(t&&S){const R=`retrying, ${t} attempts remaining`;return await Xve(p.body),Js(this).info(`${w} - ${R}`),Js(this).debug(`[${c}] response error (${R})`,Mp({retryOfRequestLogID:r,url:p.url,status:p.status,headers:p.headers,durationMs:m-d})),this.retryRequest(s,t,r??c,p.headers)}const _=S?"error; no more retries left":"error; not retryable";Js(this).info(`${w} - ${_}`);const A=await p.text().catch(R=>BS(R).message),T=qve(A),O=T?void 0:A;throw Js(this).debug(`[${c}] response error (${_})`,Mp({retryOfRequestLogID:r,url:p.url,status:p.status,headers:p.headers,message:O,durationMs:Date.now()-d})),this.makeStatusError(p.status,T,O,p.headers)}return Js(this).info(w),Js(this).debug(`[${c}] response start`,Mp({retryOfRequestLogID:r,url:p.url,status:p.status,headers:p.headers,durationMs:m-d})),{response:p,options:s,controller:f,requestLogID:c,retryOfRequestLogID:r,startTime:d}}getAPIList(e,t,r){return this.requestAPIList(t,{method:"get",path:e,...r})}requestAPIList(e,t){const r=this.makeRequest(t,null,void 0);return new fbe(this,r,e)}async fetchWithTimeout(e,t,r,s){const{signal:i,method:o,...a}=t||{};i&&i.addEventListener("abort",()=>s.abort());const l=setTimeout(()=>s.abort(),r),c=globalThis.ReadableStream&&a.body instanceof globalThis.ReadableStream||typeof a.body=="object"&&a.body!==null&&Symbol.asyncIterator in a.body,u={signal:s.signal,...c?{duplex:"half"}:{},method:"GET",...a};o&&(u.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,u)}finally{clearTimeout(l)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return t==="true"?!0:t==="false"?!1:e.status===408||e.status===409||e.status===429||e.status>=500}async retryRequest(e,t,r,s){let i;const o=s==null?void 0:s.get("retry-after-ms");if(o){const l=parseFloat(o);Number.isNaN(l)||(i=l)}const a=s==null?void 0:s.get("retry-after");if(a&&!i){const l=parseFloat(a);Number.isNaN(l)?i=Date.parse(a)-Date.now():i=l*1e3}if(!(i&&0<=i&&i<60*1e3)){const l=e.maxRetries??this.maxRetries;i=this.calculateDefaultRetryTimeoutMillis(t,l)}return await Mb(i),this.makeRequest(e,t-1,r)}calculateDefaultRetryTimeoutMillis(e,t){const i=t-e,o=Math.min(.5*Math.pow(2,i),8),a=1-Math.random()*.25;return o*a*1e3}async buildRequest(e,{retryCount:t=0}={}){const r={...e},{method:s,path:i,query:o,defaultBaseURL:a}=r,l=this.buildURL(i,o,a);"timeout"in r&&Hve("timeout",r.timeout),r.timeout=r.timeout??this.timeout;const{bodyHeaders:c,body:u}=this.buildBody({options:r}),d=await this.buildHeaders({options:e,method:s,bodyHeaders:c,retryCount:t});return{req:{method:s,headers:d,...r.signal&&{signal:r.signal},...globalThis.ReadableStream&&u instanceof globalThis.ReadableStream&&{duplex:"half"},...u&&{body:u},...this.fetchOptions??{},...r.fetchOptions??{}},url:l,timeout:r.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:r,retryCount:s}){let i={};this.idempotencyHeader&&t!=="get"&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),i[this.idempotencyHeader]=e.idempotencyKey);const o=lt([i,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(s),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...Yve(),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,r,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const r=lt([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||typeof e=="string"&&r.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:typeof e=="object"&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&typeof e.next=="function")?{bodyHeaders:void 0,body:HB(e)}:pe(this,Kx,"f").call(this,{body:e,headers:r})}}NE=mn,Kx=new WeakMap,AE=new WeakSet,Oz=function(){return this.baseURL!=="https://api.openai.com/v1"},mn.OpenAI=NE,mn.DEFAULT_TIMEOUT=6e5,mn.OpenAIError=vt,mn.APIError=Xs,mn.APIConnectionError=px,mn.APIConnectionTimeoutError=VS,mn.APIUserAbortError=pa,mn.NotFoundError=MB,mn.ConflictError=OB,mn.RateLimitError=IB,mn.BadRequestError=TB,mn.AuthenticationError=AB,mn.InternalServerError=DB,mn.PermissionDeniedError=NB,mn.UnprocessableEntityError=PB,mn.InvalidWebhookSignatureError=Nb,mn.toFile=vbe,mn.Completions=nz,mn.Chat=fE,mn.Embeddings=iz,mn.Files=az,mn.Images=fz,mn.Audio=Vb,mn.Moderations=mz,mn.Models=pz,mn.FineTuning=$g,mn.Graders=SE,mn.VectorStores=Wx,mn.Webhooks=Mz,mn.Beta=Rg,mn.Batches=VV,mn.Uploads=TE,mn.Responses=Ux,mn.Realtime=zx,mn.Conversations=vE,mn.Evals=wE,mn.Containers=yE,mn.Videos=Az,new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");var Pz;(function(n){n.STRING="string",n.NUMBER="number",n.INTEGER="integer",n.BOOLEAN="boolean",n.ARRAY="array",n.OBJECT="object"})(Pz||(Pz={}));/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */var Iz;(function(n){n.LANGUAGE_UNSPECIFIED="language_unspecified",n.PYTHON="python"})(Iz||(Iz={}));var Dz;(function(n){n.OUTCOME_UNSPECIFIED="outcome_unspecified",n.OUTCOME_OK="outcome_ok",n.OUTCOME_FAILED="outcome_failed",n.OUTCOME_DEADLINE_EXCEEDED="outcome_deadline_exceeded"})(Dz||(Dz={}));/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const Rz=["user","model","function","system"];var $z;(function(n){n.HARM_CATEGORY_UNSPECIFIED="HARM_CATEGORY_UNSPECIFIED",n.HARM_CATEGORY_HATE_SPEECH="HARM_CATEGORY_HATE_SPEECH",n.HARM_CATEGORY_SEXUALLY_EXPLICIT="HARM_CATEGORY_SEXUALLY_EXPLICIT",n.HARM_CATEGORY_HARASSMENT="HARM_CATEGORY_HARASSMENT",n.HARM_CATEGORY_DANGEROUS_CONTENT="HARM_CATEGORY_DANGEROUS_CONTENT",n.HARM_CATEGORY_CIVIC_INTEGRITY="HARM_CATEGORY_CIVIC_INTEGRITY"})($z||($z={}));var Lz;(function(n){n.HARM_BLOCK_THRESHOLD_UNSPECIFIED="HARM_BLOCK_THRESHOLD_UNSPECIFIED",n.BLOCK_LOW_AND_ABOVE="BLOCK_LOW_AND_ABOVE",n.BLOCK_MEDIUM_AND_ABOVE="BLOCK_MEDIUM_AND_ABOVE",n.BLOCK_ONLY_HIGH="BLOCK_ONLY_HIGH",n.BLOCK_NONE="BLOCK_NONE"})(Lz||(Lz={}));var Fz;(function(n){n.HARM_PROBABILITY_UNSPECIFIED="HARM_PROBABILITY_UNSPECIFIED",n.NEGLIGIBLE="NEGLIGIBLE",n.LOW="LOW",n.MEDIUM="MEDIUM",n.HIGH="HIGH"})(Fz||(Fz={}));var jz;(function(n){n.BLOCKED_REASON_UNSPECIFIED="BLOCKED_REASON_UNSPECIFIED",n.SAFETY="SAFETY",n.OTHER="OTHER"})(jz||(jz={}));var Wb;(function(n){n.FINISH_REASON_UNSPECIFIED="FINISH_REASON_UNSPECIFIED",n.STOP="STOP",n.MAX_TOKENS="MAX_TOKENS",n.SAFETY="SAFETY",n.RECITATION="RECITATION",n.LANGUAGE="LANGUAGE",n.BLOCKLIST="BLOCKLIST",n.PROHIBITED_CONTENT="PROHIBITED_CONTENT",n.SPII="SPII",n.MALFORMED_FUNCTION_CALL="MALFORMED_FUNCTION_CALL",n.OTHER="OTHER"})(Wb||(Wb={}));var Bz;(function(n){n.TASK_TYPE_UNSPECIFIED="TASK_TYPE_UNSPECIFIED",n.RETRIEVAL_QUERY="RETRIEVAL_QUERY",n.RETRIEVAL_DOCUMENT="RETRIEVAL_DOCUMENT",n.SEMANTIC_SIMILARITY="SEMANTIC_SIMILARITY",n.CLASSIFICATION="CLASSIFICATION",n.CLUSTERING="CLUSTERING"})(Bz||(Bz={}));var Vz;(function(n){n.MODE_UNSPECIFIED="MODE_UNSPECIFIED",n.AUTO="AUTO",n.ANY="ANY",n.NONE="NONE"})(Vz||(Vz={}));var zz;(function(n){n.MODE_UNSPECIFIED="MODE_UNSPECIFIED",n.MODE_DYNAMIC="MODE_DYNAMIC"})(zz||(zz={}));/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class pi extends Error{constructor(e){super(`[GoogleGenerativeAI Error]: ${e}`)}}class jg extends pi{constructor(e,t){super(e),this.response=t}}class Hz extends pi{constructor(e,t,r,s){super(e),this.status=t,this.statusText=r,this.errorDetails=s}}class sh extends pi{}class qz extends pi{}/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const Hbe="https://generativelanguage.googleapis.com",qbe="v1beta",Ube="0.24.1",Wbe="genai-js";var Rp;(function(n){n.GENERATE_CONTENT="generateContent",n.STREAM_GENERATE_CONTENT="streamGenerateContent",n.COUNT_TOKENS="countTokens",n.EMBED_CONTENT="embedContent",n.BATCH_EMBED_CONTENTS="batchEmbedContents"})(Rp||(Rp={}));class Gbe{constructor(e,t,r,s,i){this.model=e,this.task=t,this.apiKey=r,this.stream=s,this.requestOptions=i}toString(){var e,t;const r=((e=this.requestOptions)===null||e===void 0?void 0:e.apiVersion)||qbe;let i=`${((t=this.requestOptions)===null||t===void 0?void 0:t.baseUrl)||Hbe}/${r}/${this.model}:${this.task}`;return this.stream&&(i+="?alt=sse"),i}}function Kbe(n){const e=[];return n!=null&&n.apiClient&&e.push(n.apiClient),e.push(`${Wbe}/${Ube}`),e.join(" ")}async function Ybe(n){var e;const t=new Headers;t.append("Content-Type","application/json"),t.append("x-goog-api-client",Kbe(n.requestOptions)),t.append("x-goog-api-key",n.apiKey);let r=(e=n.requestOptions)===null||e===void 0?void 0:e.customHeaders;if(r){if(!(r instanceof Headers))try{r=new Headers(r)}catch(s){throw new sh(`unable to convert customHeaders value ${JSON.stringify(r)} to Headers: ${s.message}`)}for(const[s,i]of r.entries()){if(s==="x-goog-api-key")throw new sh(`Cannot set reserved header name ${s}`);if(s==="x-goog-api-client")throw new sh(`Header name ${s} can only be set using the apiClient field`);t.append(s,i)}}return t}async function Zbe(n,e,t,r,s,i){const o=new Gbe(n,e,t,r,i);return{url:o.toString(),fetchOptions:Object.assign(Object.assign({},e2e(i)),{method:"POST",headers:await Ybe(o),body:s})}}async function Gb(n,e,t,r,s,i={},o=fetch){const{url:a,fetchOptions:l}=await Zbe(n,e,t,r,s,i);return Xbe(a,l,o)}async function Xbe(n,e,t=fetch){let r;try{r=await t(n,e)}catch(s){Jbe(s,n)}return r.ok||await Qbe(r,n),r}function Jbe(n,e){let t=n;throw t.name==="AbortError"?(t=new qz(`Request aborted when fetching ${e.toString()}: ${n.message}`),t.stack=n.stack):n instanceof Hz||n instanceof sh||(t=new pi(`Error fetching from ${e.toString()}: ${n.message}`),t.stack=n.stack),t}async function Qbe(n,e){let t="",r;try{const s=await n.json();t=s.error.message,s.error.details&&(t+=` ${JSON.stringify(s.error.details)}`,r=s.error.details)}catch{}throw new Hz(`Error fetching from ${e.toString()}: [${n.status} ${n.statusText}] ${t}`,n.status,n.statusText,r)}function e2e(n){const e={};if((n==null?void 0:n.signal)!==void 0||(n==null?void 0:n.timeout)>=0){const t=new AbortController;(n==null?void 0:n.timeout)>=0&&setTimeout(()=>t.abort(),n.timeout),n!=null&&n.signal&&n.signal.addEventListener("abort",()=>{t.abort()}),e.signal=t.signal}return e}/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function ME(n){return n.text=()=>{if(n.candidates&&n.candidates.length>0){if(n.candidates.length>1&&console.warn(`This response had ${n.candidates.length} candidates. Returning text from the first candidate only. Access response.candidates directly to use the other candidates.`),Yx(n.candidates[0]))throw new jg(`${ih(n)}`,n);return t2e(n)}else if(n.promptFeedback)throw new jg(`Text not available. ${ih(n)}`,n);return""},n.functionCall=()=>{if(n.candidates&&n.candidates.length>0){if(n.candidates.length>1&&console.warn(`This response had ${n.candidates.length} candidates. Returning function calls from the first candidate only. Access response.candidates directly to use the other candidates.`),Yx(n.candidates[0]))throw new jg(`${ih(n)}`,n);return console.warn("response.functionCall() is deprecated. Use response.functionCalls() instead."),Uz(n)[0]}else if(n.promptFeedback)throw new jg(`Function call not available. ${ih(n)}`,n)},n.functionCalls=()=>{if(n.candidates&&n.candidates.length>0){if(n.candidates.length>1&&console.warn(`This response had ${n.candidates.length} candidates. Returning function calls from the first candidate only. Access response.candidates directly to use the other candidates.`),Yx(n.candidates[0]))throw new jg(`${ih(n)}`,n);return Uz(n)}else if(n.promptFeedback)throw new jg(`Function call not available. ${ih(n)}`,n)},n}function t2e(n){var e,t,r,s;const i=[];if(!((t=(e=n.candidates)===null||e===void 0?void 0:e[0].content)===null||t===void 0)&&t.parts)for(const o of(s=(r=n.candidates)===null||r===void 0?void 0:r[0].content)===null||s===void 0?void 0:s.parts)o.text&&i.push(o.text),o.executableCode&&i.push("\n```"+o.executableCode.language+` +`+o.executableCode.code+"\n```\n"),o.codeExecutionResult&&i.push("\n```\n"+o.codeExecutionResult.output+"\n```\n");return i.length>0?i.join(""):""}function Uz(n){var e,t,r,s;const i=[];if(!((t=(e=n.candidates)===null||e===void 0?void 0:e[0].content)===null||t===void 0)&&t.parts)for(const o of(s=(r=n.candidates)===null||r===void 0?void 0:r[0].content)===null||s===void 0?void 0:s.parts)o.functionCall&&i.push(o.functionCall);if(i.length>0)return i}const n2e=[Wb.RECITATION,Wb.SAFETY,Wb.LANGUAGE];function Yx(n){return!!n.finishReason&&n2e.includes(n.finishReason)}function ih(n){var e,t,r;let s="";if((!n.candidates||n.candidates.length===0)&&n.promptFeedback)s+="Response was blocked",!((e=n.promptFeedback)===null||e===void 0)&&e.blockReason&&(s+=` due to ${n.promptFeedback.blockReason}`),!((t=n.promptFeedback)===null||t===void 0)&&t.blockReasonMessage&&(s+=`: ${n.promptFeedback.blockReasonMessage}`);else if(!((r=n.candidates)===null||r===void 0)&&r[0]){const i=n.candidates[0];Yx(i)&&(s+=`Candidate was blocked due to ${i.finishReason}`,i.finishMessage&&(s+=`: ${i.finishMessage}`))}return s}function Kb(n){return this instanceof Kb?(this.v=n,this):new Kb(n)}function r2e(n,e,t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=t.apply(n,e||[]),s,i=[];return s={},o("next"),o("throw"),o("return"),s[Symbol.asyncIterator]=function(){return this},s;function o(f){r[f]&&(s[f]=function(p){return new Promise(function(m,y){i.push([f,p,m,y])>1||a(f,p)})})}function a(f,p){try{l(r[f](p))}catch(m){d(i[0][3],m)}}function l(f){f.value instanceof Kb?Promise.resolve(f.value.v).then(c,u):d(i[0][2],f)}function c(f){a("next",f)}function u(f){a("throw",f)}function d(f,p){f(p),i.shift(),i.length&&a(i[0][0],i[0][1])}}typeof SuppressedError=="function"&&SuppressedError;/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const Wz=/^data\: (.*)(?:\n\n|\r\r|\r\n\r\n)/;function s2e(n){const e=n.body.pipeThrough(new TextDecoderStream("utf8",{fatal:!0})),t=a2e(e),[r,s]=t.tee();return{stream:o2e(r),response:i2e(s)}}async function i2e(n){const e=[],t=n.getReader();for(;;){const{done:r,value:s}=await t.read();if(r)return ME(l2e(e));e.push(s)}}function o2e(n){return r2e(this,arguments,function*(){const t=n.getReader();for(;;){const{value:r,done:s}=yield Kb(t.read());if(s)break;yield yield Kb(ME(r))}})}function a2e(n){const e=n.getReader();return new ReadableStream({start(r){let s="";return i();function i(){return e.read().then(({value:o,done:a})=>{if(a){if(s.trim()){r.error(new pi("Failed to parse stream"));return}r.close();return}s+=o;let l=s.match(Wz),c;for(;l;){try{c=JSON.parse(l[1])}catch{r.error(new pi(`Error parsing JSON response: "${l[1]}"`));return}r.enqueue(c),s=s.substring(l[0].length),l=s.match(Wz)}return i()}).catch(o=>{let a=o;throw a.stack=o.stack,a.name==="AbortError"?a=new qz("Request aborted when reading from the stream"):a=new pi("Error reading from the stream"),a})}}})}function l2e(n){const e=n[n.length-1],t={promptFeedback:e==null?void 0:e.promptFeedback};for(const r of n){if(r.candidates){let s=0;for(const i of r.candidates)if(t.candidates||(t.candidates=[]),t.candidates[s]||(t.candidates[s]={index:s}),t.candidates[s].citationMetadata=i.citationMetadata,t.candidates[s].groundingMetadata=i.groundingMetadata,t.candidates[s].finishReason=i.finishReason,t.candidates[s].finishMessage=i.finishMessage,t.candidates[s].safetyRatings=i.safetyRatings,i.content&&i.content.parts){t.candidates[s].content||(t.candidates[s].content={role:i.content.role||"user",parts:[]});const o={};for(const a of i.content.parts)a.text&&(o.text=a.text),a.functionCall&&(o.functionCall=a.functionCall),a.executableCode&&(o.executableCode=a.executableCode),a.codeExecutionResult&&(o.codeExecutionResult=a.codeExecutionResult),Object.keys(o).length===0&&(o.text=""),t.candidates[s].content.parts.push(o)}s++}r.usageMetadata&&(t.usageMetadata=r.usageMetadata)}return t}/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */async function Gz(n,e,t,r){const s=await Gb(e,Rp.STREAM_GENERATE_CONTENT,n,!0,JSON.stringify(t),r);return s2e(s)}async function Kz(n,e,t,r){const i=await(await Gb(e,Rp.GENERATE_CONTENT,n,!1,JSON.stringify(t),r)).json();return{response:ME(i)}}/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function Yz(n){if(n!=null){if(typeof n=="string")return{role:"system",parts:[{text:n}]};if(n.text)return{role:"system",parts:[n]};if(n.parts)return n.role?n:{role:"system",parts:n.parts}}}function Yb(n){let e=[];if(typeof n=="string")e=[{text:n}];else for(const t of n)typeof t=="string"?e.push({text:t}):e.push(t);return c2e(e)}function c2e(n){const e={role:"user",parts:[]},t={role:"function",parts:[]};let r=!1,s=!1;for(const i of n)"functionResponse"in i?(t.parts.push(i),s=!0):(e.parts.push(i),r=!0);if(r&&s)throw new pi("Within a single message, FunctionResponse cannot be mixed with other type of part in the request for sending chat message.");if(!r&&!s)throw new pi("No content is provided for sending chat message.");return r?e:t}function u2e(n,e){var t;let r={model:e==null?void 0:e.model,generationConfig:e==null?void 0:e.generationConfig,safetySettings:e==null?void 0:e.safetySettings,tools:e==null?void 0:e.tools,toolConfig:e==null?void 0:e.toolConfig,systemInstruction:e==null?void 0:e.systemInstruction,cachedContent:(t=e==null?void 0:e.cachedContent)===null||t===void 0?void 0:t.name,contents:[]};const s=n.generateContentRequest!=null;if(n.contents){if(s)throw new sh("CountTokensRequest must have one of contents or generateContentRequest, not both.");r.contents=n.contents}else if(s)r=Object.assign(Object.assign({},r),n.generateContentRequest);else{const i=Yb(n);r.contents=[i]}return{generateContentRequest:r}}function Zz(n){let e;return n.contents?e=n:e={contents:[Yb(n)]},n.systemInstruction&&(e.systemInstruction=Yz(n.systemInstruction)),e}function d2e(n){return typeof n=="string"||Array.isArray(n)?{content:Yb(n)}:n}/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const Xz=["text","inlineData","functionCall","functionResponse","executableCode","codeExecutionResult"],h2e={user:["text","inlineData"],function:["functionResponse"],model:["text","functionCall","executableCode","codeExecutionResult"],system:["text"]};function f2e(n){let e=!1;for(const t of n){const{role:r,parts:s}=t;if(!e&&r!=="user")throw new pi(`First content should be with role 'user', got ${r}`);if(!Rz.includes(r))throw new pi(`Each item should include role field. Got ${r} but valid roles are: ${JSON.stringify(Rz)}`);if(!Array.isArray(s))throw new pi("Content should have 'parts' property with an array of Parts");if(s.length===0)throw new pi("Each Content should have at least one part");const i={text:0,inlineData:0,functionCall:0,functionResponse:0,fileData:0,executableCode:0,codeExecutionResult:0};for(const a of s)for(const l of Xz)l in a&&(i[l]+=1);const o=h2e[r];for(const a of Xz)if(!o.includes(a)&&i[a]>0)throw new pi(`Content with role '${r}' can't contain '${a}' part`);e=!0}}function Jz(n){var e;if(n.candidates===void 0||n.candidates.length===0)return!1;const t=(e=n.candidates[0])===null||e===void 0?void 0:e.content;if(t===void 0||t.parts===void 0||t.parts.length===0)return!1;for(const r of t.parts)if(r===void 0||Object.keys(r).length===0||r.text!==void 0&&r.text==="")return!1;return!0}/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const Qz="SILENT_ERROR";class p2e{constructor(e,t,r,s={}){this.model=t,this.params=r,this._requestOptions=s,this._history=[],this._sendPromise=Promise.resolve(),this._apiKey=e,r!=null&&r.history&&(f2e(r.history),this._history=r.history)}async getHistory(){return await this._sendPromise,this._history}async sendMessage(e,t={}){var r,s,i,o,a,l;await this._sendPromise;const c=Yb(e),u={safetySettings:(r=this.params)===null||r===void 0?void 0:r.safetySettings,generationConfig:(s=this.params)===null||s===void 0?void 0:s.generationConfig,tools:(i=this.params)===null||i===void 0?void 0:i.tools,toolConfig:(o=this.params)===null||o===void 0?void 0:o.toolConfig,systemInstruction:(a=this.params)===null||a===void 0?void 0:a.systemInstruction,cachedContent:(l=this.params)===null||l===void 0?void 0:l.cachedContent,contents:[...this._history,c]},d=Object.assign(Object.assign({},this._requestOptions),t);let f;return this._sendPromise=this._sendPromise.then(()=>Kz(this._apiKey,this.model,u,d)).then(p=>{var m;if(Jz(p.response)){this._history.push(c);const y=Object.assign({parts:[],role:"model"},(m=p.response.candidates)===null||m===void 0?void 0:m[0].content);this._history.push(y)}else{const y=ih(p.response);y&&console.warn(`sendMessage() was unsuccessful. ${y}. Inspect response object for details.`)}f=p}).catch(p=>{throw this._sendPromise=Promise.resolve(),p}),await this._sendPromise,f}async sendMessageStream(e,t={}){var r,s,i,o,a,l;await this._sendPromise;const c=Yb(e),u={safetySettings:(r=this.params)===null||r===void 0?void 0:r.safetySettings,generationConfig:(s=this.params)===null||s===void 0?void 0:s.generationConfig,tools:(i=this.params)===null||i===void 0?void 0:i.tools,toolConfig:(o=this.params)===null||o===void 0?void 0:o.toolConfig,systemInstruction:(a=this.params)===null||a===void 0?void 0:a.systemInstruction,cachedContent:(l=this.params)===null||l===void 0?void 0:l.cachedContent,contents:[...this._history,c]},d=Object.assign(Object.assign({},this._requestOptions),t),f=Gz(this._apiKey,this.model,u,d);return this._sendPromise=this._sendPromise.then(()=>f).catch(p=>{throw new Error(Qz)}).then(p=>p.response).then(p=>{if(Jz(p)){this._history.push(c);const m=Object.assign({},p.candidates[0].content);m.role||(m.role="model"),this._history.push(m)}else{const m=ih(p);m&&console.warn(`sendMessageStream() was unsuccessful. ${m}. Inspect response object for details.`)}}).catch(p=>{p.message!==Qz&&console.error(p)}),f}}/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */async function m2e(n,e,t,r){return(await Gb(e,Rp.COUNT_TOKENS,n,!1,JSON.stringify(t),r)).json()}/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */async function g2e(n,e,t,r){return(await Gb(e,Rp.EMBED_CONTENT,n,!1,JSON.stringify(t),r)).json()}async function y2e(n,e,t,r){const s=t.requests.map(o=>Object.assign(Object.assign({},o),{model:e}));return(await Gb(e,Rp.BATCH_EMBED_CONTENTS,n,!1,JSON.stringify({requests:s}),r)).json()}/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class eH{constructor(e,t,r={}){this.apiKey=e,this._requestOptions=r,t.model.includes("/")?this.model=t.model:this.model=`models/${t.model}`,this.generationConfig=t.generationConfig||{},this.safetySettings=t.safetySettings||[],this.tools=t.tools,this.toolConfig=t.toolConfig,this.systemInstruction=Yz(t.systemInstruction),this.cachedContent=t.cachedContent}async generateContent(e,t={}){var r;const s=Zz(e),i=Object.assign(Object.assign({},this._requestOptions),t);return Kz(this.apiKey,this.model,Object.assign({generationConfig:this.generationConfig,safetySettings:this.safetySettings,tools:this.tools,toolConfig:this.toolConfig,systemInstruction:this.systemInstruction,cachedContent:(r=this.cachedContent)===null||r===void 0?void 0:r.name},s),i)}async generateContentStream(e,t={}){var r;const s=Zz(e),i=Object.assign(Object.assign({},this._requestOptions),t);return Gz(this.apiKey,this.model,Object.assign({generationConfig:this.generationConfig,safetySettings:this.safetySettings,tools:this.tools,toolConfig:this.toolConfig,systemInstruction:this.systemInstruction,cachedContent:(r=this.cachedContent)===null||r===void 0?void 0:r.name},s),i)}startChat(e){var t;return new p2e(this.apiKey,this.model,Object.assign({generationConfig:this.generationConfig,safetySettings:this.safetySettings,tools:this.tools,toolConfig:this.toolConfig,systemInstruction:this.systemInstruction,cachedContent:(t=this.cachedContent)===null||t===void 0?void 0:t.name},e),this._requestOptions)}async countTokens(e,t={}){const r=u2e(e,{model:this.model,generationConfig:this.generationConfig,safetySettings:this.safetySettings,tools:this.tools,toolConfig:this.toolConfig,systemInstruction:this.systemInstruction,cachedContent:this.cachedContent}),s=Object.assign(Object.assign({},this._requestOptions),t);return m2e(this.apiKey,this.model,r,s)}async embedContent(e,t={}){const r=d2e(e),s=Object.assign(Object.assign({},this._requestOptions),t);return g2e(this.apiKey,this.model,r,s)}async batchEmbedContents(e,t={}){const r=Object.assign(Object.assign({},this._requestOptions),t);return y2e(this.apiKey,this.model,e,r)}}/** + * @license + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class v2e{constructor(e){this.apiKey=e}getGenerativeModel(e,t){if(!e.model)throw new pi("Must provide a model name. Example: genai.getGenerativeModel({ model: 'my-model-name' })");return new eH(this.apiKey,e,t)}getGenerativeModelFromCachedContent(e,t,r){if(!e.name)throw new sh("Cached content must contain a `name` field.");if(!e.model)throw new sh("Cached content must contain a `model` field.");const s=["model","systemInstruction"];for(const o of s)if(t!=null&&t[o]&&e[o]&&(t==null?void 0:t[o])!==e[o]){if(o==="model"){const a=t.model.startsWith("models/")?t.model.replace("models/",""):t.model,l=e.model.startsWith("models/")?e.model.replace("models/",""):e.model;if(a===l)continue}throw new sh(`Different value for "${o}" specified in modelParams (${t[o]}) and cachedContent (${e[o]})`)}const i=Object.assign(Object.assign({},t),{model:e.model,tools:e.tools,toolConfig:e.toolConfig,systemInstruction:e.systemInstruction,cachedContent:e});return new eH(this.apiKey,i,r)}}const Po={debug:(n,e)=>console.debug(`[DEBUG] ${n}`,e),info:(n,e)=>console.info(`[INFO] ${n}`,e),warn:(n,e)=>console.warn(`[WARN] ${n}`,e),error:(n,e)=>console.error(`[ERROR] ${n}`,e)},b2e=async()=>{var n;try{const{data:{user:e}}=await Yt.auth.getUser();if(!e)return Po.error("No authenticated user found"),null;const{data:t,error:r}=await Yt.from("user_secrets").select("settings").eq("user_id",e.id).maybeSingle();if(r)return Po.error("Error fetching user secrets:",r),null;const s=t==null?void 0:t.settings,i=(n=s==null?void 0:s.api_keys)==null?void 0:n.google_api_key;return i||(Po.error("No Google API key found in user secrets. Please add your Google API key in your profile settings."),null)}catch(e){return Po.error("Error getting Google API key:",e),null}},w2e=async n=>{const e=await b2e();return e?new v2e(e):(Po.error("No Google API key found. Please provide an API key or set it in your profile."),null)},x2e=n=>{var r;const e=(r=n.split(".").pop())==null?void 0:r.toLowerCase();return{png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",webp:"image/webp",gif:"image/gif"}[e||""]||"image/png"},k2e=n=>new Promise((e,t)=>{const r=new FileReader;r.readAsDataURL(n),r.onload=()=>{const i=r.result.split(",")[1];e(i)},r.onerror=s=>t(s)}),C2e=async(n,e,t="gemini-3-pro-image-preview",r,s,i,o)=>{var c;const a=await w2e();if(!a)return null;const l=a.getGenerativeModel({model:t,tools:void 0});try{const u=await Promise.all(e.map(async _=>{const A=await k2e(_);return{inlineData:{mimeType:x2e(_.name),data:A}}})),d={text:n},f=[...u,d],p={};let m;Object.keys(p).length>0?m=await l.generateContent(f,p):m=await l.generateContent(f);const y=m.response;if(Po.debug("Google AI API response structure (editImage):",{hasResponse:!!y,hasCandidates:!!(y!=null&&y.candidates),candidatesLength:(c=y==null?void 0:y.candidates)==null?void 0:c.length}),!y||!y.candidates||y.candidates.length===0)throw Po.error("Invalid API response structure - no candidates found (editImage)"),new Error("No candidates returned from Google AI API. The content may have been blocked due to safety filters or other restrictions.");const w=y.candidates[0];if(w.finishReason&&w.finishReason!=="STOP"){const A={SAFETY:"Content blocked by safety filters. The prompt contains content that violates Google AI safety policies.",RECITATION:"Content blocked due to recitation concerns. The generated content may be too similar to existing copyrighted material.",OTHER:"Content generation stopped for other safety or policy reasons."}[w.finishReason]||`Content generation stopped. Reason: ${w.finishReason}`;throw Po.error("Google AI blocked image edit due to safety filters:",{finishReason:w.finishReason,rejectionMessage:A}),new Error(`Request blocked by Google AI: ${A}`)}if(!w.content||!w.content.parts)throw Po.error("Invalid candidate structure - no content parts found (editImage)"),new Error("Invalid response structure from Google AI API - no content parts found.");const k=w.content.parts;let x=null,S=null;for(const _ of k)if("inlineData"in _&&_.inlineData){const A=atob(_.inlineData.data),T=new Uint8Array(A.length);for(let O=0;O<A.length;O++)T[O]=A.charCodeAt(O);x=T.buffer}else"text"in _&&_.text&&(S?S+=" "+_.text.trim():S=_.text.trim());if(x)return Po.info("Successfully found image data in editImage response",{hasText:!!S,textPreview:S==null?void 0:S.substring(0,100)}),{imageData:x,text:S||void 0};throw S?(Po.info("Google AI returned text response instead of image (editImage):",{textResponse:S,finishReason:w.finishReason}),new Error(`Google AI returned text instead of image: ${S}`)):(Po.warn("No image data found in API response parts (editImage)"),new Error("No image data found in API response. The model may not have generated an image."))}catch(u){throw Po.error("Google AI API error in editImage:",{error:u.message,prompt:n.substring(0,100)+"...",imageCount:e.length}),u}},Is={debug:(n,e)=>console.debug(`[OPENAI-DEBUG] ${n}`,e),info:(n,e)=>console.info(`[OPENAI-INFO] ${n}`,e),warn:(n,e)=>console.warn(`[OPENAI-WARN] ${n}`,e),error:(n,e)=>console.error(`[OPENAI-ERROR] ${n}`,e)},S2e=async()=>{var n;try{const{data:{user:e}}=await Yt.auth.getUser();if(!e)return Is.error("No authenticated user found"),null;const{data:t,error:r}=await Yt.from("user_secrets").select("settings").eq("user_id",e.id).maybeSingle();if(r)return Is.error("Error fetching user secrets:",r),null;const s=t==null?void 0:t.settings,i=(n=s==null?void 0:s.api_keys)==null?void 0:n.openai_api_key;return i||(Is.error("No OpenAI API key found in user secrets. Please add your OpenAI API key in your profile settings."),null)}catch(e){return Is.error("Error getting OpenAI API key:",e),null}},E2e=async n=>{const e=await S2e();if(!e)return Is.error("No OpenAI API key found. Please provide an API key or set it in your profile."),null;try{return new mn({apiKey:e,dangerouslyAllowBrowser:!0})}catch(t){return Is.error("Error creating OpenAI client:",t),null}},tH=async(n,e,t)=>{try{const r=await E2e(t);return r?await n(r):(Is.warn("OpenAI client not available, using fallback or returning null"),e??null)}catch(r){return Is.error("OpenAI operation failed:",r),e??null}},nH=n=>new Promise((e,t)=>{const r=new FileReader;r.readAsDataURL(n),r.onload=()=>{const i=r.result.split(",")[1];e(i)},r.onerror=s=>t(s)}),rH=n=>n.type||"image/jpeg",_2e=async(n,e="Analyze this image and provide a detailed description and suggest a creative title.",t="gpt-4o-mini",r)=>tH(async s=>{var i,o,a;try{if(n.length===0)return Is.warn("No images provided for analysis"),null;const l=await Promise.all(n.map(async w=>{const k=await nH(w);return{type:"input_image",image_url:`data:${rH(w)};base64,${k}`}})),c=[{type:"input_text",text:e},...l],u=await((i=s.responses)==null?void 0:i.create({model:t,input:[{role:"user",content:c}]}));if(!(u!=null&&u.output_text))return Is.warn("No output text returned from OpenAI image analysis"),null;const d=u.output_text,f=d.split(` +`).filter(w=>w.trim());let p=d,m=`Analysis of ${n.length} image${n.length>1?"s":""}`,y=-1;for(let w=0;w<f.length;w++){const k=f[w],x=k.toLowerCase();if(x.includes("title:")||x.includes("suggested title:")){m=k.replace(/^.*title:\s*/i,"").trim(),y=w;break}}return y>=0&&(p=f.filter((k,x)=>x!==y).join(` +`).trim()),Is.info("Successfully analyzed images",{imageCount:n.length,descriptionLength:p.length,title:m.substring(0,50)+"...",model:t}),{description:p,title:m}}catch(l){Is.error("OpenAI image analysis failed:",{error:l.message,model:t,imageCount:n.length,promptPreview:e.substring(0,100)+"..."});try{Is.info("Falling back to chat completions for image analysis");const c=await Promise.all(n.map(async w=>{const k=await nH(w);return{type:"image_url",image_url:{url:`data:${rH(w)};base64,${k}`}}})),d=(a=(o=(await s.chat.completions.create({model:"gpt-4-vision-preview",messages:[{role:"user",content:[{type:"text",text:e},...c]}]})).choices[0])==null?void 0:o.message)==null?void 0:a.content;if(!d)return Is.warn("No content returned from fallback image analysis"),null;const f=d.split(` +`).filter(w=>w.trim());let p=d,m=`Analysis of ${n.length} image${n.length>1?"s":""}`,y=-1;for(let w=0;w<f.length;w++){const k=f[w],x=k.toLowerCase();if(x.includes("title:")||x.includes("suggested title:")){m=k.replace(/^.*title:\s*/i,"").trim(),y=w;break}}return y>=0&&(p=f.filter((k,x)=>x!==y).join(` +`).trim()),{description:p,title:m}}catch(c){throw Is.error("Fallback image analysis also failed:",c.message),l}}},null,r),sH=async(n,e="whisper-1",t)=>tH(async r=>{try{Is.info("Starting audio transcription",{fileName:n.name,fileSize:n.size,fileType:n.type,model:e});const i=(await r.audio.transcriptions.create({file:n,model:e,response_format:"verbose_json",timestamp_granularities:["word"]})).text;return i?(Is.info("Successfully transcribed audio",{textLength:i.length,textPreview:i.substring(0,100)+"...",model:e}),i):(Is.warn("No text returned from audio transcription"),null)}catch(s){throw Is.error("OpenAI audio transcription failed:",{error:s.message,fileName:n.name,model:e}),s}},null,t),T2e="Analyze this image and provide: 1) A creative, engaging title (max 50 characters), and 2) A detailed description. Format your response with 'Title: [your title]' on the first line, followed by the description on the next lines.",iH=30,A2e=[{id:"1",name:"Enhance",prompt:"Enhance and improve this image",icon:"✨"},{id:"2",name:"Make Artistic",prompt:"Transform this into a beautiful artistic painting",icon:"🎨"},{id:"3",name:"Cyberpunk Style",prompt:"Transform this into cyberpunk style with neon colors",icon:"🌆"},{id:"4",name:"Fantasy",prompt:"Transform this into a fantasy art style",icon:"🧙‍♂️"},{id:"5",name:"Portrait",prompt:"Transform this into a professional portrait",icon:"👤"}],N2e=UL({title:wb().max(100,"Title must be less than 100 characters").optional(),description:wb().max(1e3,"Description must be less than 1000 characters").optional(),visible:qL()}),M2e=({open:n,onOpenChange:e,pictureId:t,currentTitle:r,currentDescription:s,currentVisible:i,imageUrl:o,onUpdateSuccess:a})=>{const[l,c]=U.useState(!1),[u,d]=U.useState(!1),{user:f}=du(),[p,m]=U.useState(!1),[y,w]=U.useState(!1),k=U.useRef(null),x=U.useRef([]),[S,_]=U.useState([]),[A,T]=U.useState(new Set),[O,I]=U.useState(!1),R=lj({resolver:Zj(N2e),defaultValues:{title:r,description:s||"",visible:i}});U.useEffect(()=>{n&&f&&(D(),W())},[n,f,t]);const D=async()=>{if(f){I(!0);try{const{data:X,error:se}=await Yt.from("collections").select("*").eq("user_id",f.id).order("created_at",{ascending:!1});if(se)throw se;_(X||[])}catch(X){console.error("Error fetching collections:",X),at.toast.error(Be("Failed to load collections"))}finally{I(!1)}}},W=async()=>{if(f)try{const{data:X,error:se}=await Yt.from("collection_pictures").select("collection_id").eq("picture_id",t);if(se)throw se;const J=new Set(X.map($=>$.collection_id));T(J)}catch(X){console.error("Error fetching picture collections:",X)}},H=async X=>{if(!f)return;const se=A.has(X);try{if(se){const{error:J}=await Yt.from("collection_pictures").delete().eq("collection_id",X).eq("picture_id",t);if(J)throw J;T($=>{const ve=new Set($);return ve.delete(X),ve}),at.toast.success(Be("Removed from collection"))}else{const{error:J}=await Yt.from("collection_pictures").insert({collection_id:X,picture_id:t});if(J)throw J;T($=>new Set([...$,X])),at.toast.success(Be("Added to collection"))}}catch(J){console.error("Error toggling collection:",J),at.toast.error(Be("Failed to update collection"))}},re=async X=>{var se;if(f){c(!0);try{const{error:J}=await Yt.from("pictures").update({title:((se=X.title)==null?void 0:se.trim())||null,description:X.description||null,visible:X.visible,updated_at:new Date().toISOString()}).eq("id",t).eq("user_id",f.id);if(J)throw J;at.toast.success(Be("Picture updated successfully!")),a()}catch(J){console.error("Error updating picture:",J),at.toast.error(Be("Failed to update picture"))}finally{c(!1)}}},ae=()=>{R.reset(),e(!1)},de=async()=>{if(!o){at.toast.error(Be("No image URL available"));return}d(!0);try{const se=await(await fetch(o)).blob(),J=new File([se],"image.png",{type:se.type||"image/png"}),$=await _2e([J],T2e);if(!$){at.toast.error(Be("OpenAI API key not configured. Please add your OpenAI API key in your profile settings."));return}R.setValue("title",$.title),R.setValue("description",$.description),at.toast.success(Be("Title and description generated!"))}catch(X){console.error("Error generating metadata:",X),at.toast.error(X.message||Be("Failed to generate metadata. Please check your OpenAI API key."))}finally{d(!1)}},le=async()=>{if(p)k.current&&k.current.state==="recording"&&(k.current.stop(),m(!1));else try{if(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia){at.toast.error(Be("Audio recording is not supported in your browser"));return}const X=await navigator.mediaDevices.getUserMedia({audio:!0}),se={mimeType:"audio/webm"};let J;try{J=new MediaRecorder(X,se)}catch{J=new MediaRecorder(X)}k.current=J,x.current=[],J.ondataavailable=$=>{$.data.size>0&&x.current.push($.data)},J.onstop=async()=>{w(!0);try{const $=new Blob(x.current,{type:"audio/webm"}),ve=new File([$],"recording.webm",{type:"audio/webm"});at.toast.info(Be("Transcribing audio..."));const Pe=await sH(ve);if(Pe){const Xe=(R.getValues("description")||"").trim(),qe=Xe?`${Xe} + +${Pe}`:Pe;R.setValue("description",qe),at.toast.success(Be("Audio transcribed successfully!"))}else at.toast.error(Be("Failed to transcribe audio. Please check your OpenAI API key."))}catch($){console.error("Error transcribing audio:",$),at.toast.error($.message||Be("Failed to transcribe audio"))}finally{w(!1),x.current=[],X.getTracks().forEach($=>$.stop())}},J.start(),m(!0),at.toast.info(Be("Recording started... Click again to stop"))}catch(X){console.error("Error accessing microphone:",X),X.name==="NotAllowedError"?at.toast.error(Be("Microphone access denied. Please allow microphone access in your browser settings.")):at.toast.error(Be("Failed to access microphone")+": "+X.message)}};return b.jsx(pS,{open:n,onOpenChange:ae,children:b.jsxs(Z6,{className:"max-w-2xl max-h-[80vh] overflow-y-auto",children:[b.jsx(X6,{children:b.jsxs(J6,{className:"flex items-center gap-2",children:[b.jsx(Se.Edit3,{className:"h-5 w-5"}),b.jsx(St,{children:"Edit Picture"})]})}),b.jsxs(Dj,{defaultValue:"edit",className:"w-full",children:[b.jsxs(IS,{className:"grid w-full grid-cols-3",children:[b.jsxs(_g,{value:"edit",className:"flex items-center gap-2",children:[b.jsx(Se.Edit3,{className:"h-4 w-4"}),b.jsx(St,{children:"Edit Details"})]}),b.jsxs(_g,{value:"collections",className:"flex items-center gap-2",children:[b.jsx(Se.Bookmark,{className:"h-4 w-4"}),b.jsx(St,{children:"Collections"})]}),b.jsxs(_g,{value:"versions",className:"flex items-center gap-2",children:[b.jsx(Se.GitBranch,{className:"h-4 w-4"}),b.jsx(St,{children:"Versions"})]})]}),b.jsx(Tg,{value:"edit",className:"mt-4",children:b.jsx(dj,{...R,children:b.jsxs("form",{onSubmit:R.handleSubmit(re),className:"space-y-4",children:[o&&b.jsx(yt,{type:"button",variant:"outline",className:"w-full",onClick:de,disabled:u||l,children:u?b.jsxs(b.Fragment,{children:[b.jsx("div",{className:"animate-spin rounded-full h-4 w-4 border-2 border-primary border-t-transparent mr-2"}),b.jsx(St,{children:"Generating..."})]}):b.jsxs(b.Fragment,{children:[b.jsx(Se.Sparkles,{className:"h-4 w-4 mr-2"}),b.jsx(St,{children:"Generate Title & Description with AI"})]})}),b.jsx(Sg,{control:R.control,name:"title",render:({field:X})=>b.jsxs(_p,{children:[b.jsx(Tp,{children:b.jsx(St,{children:"Title (Optional)"})}),b.jsx(Ap,{children:b.jsx(xb,{placeholder:Be("Enter a title..."),...X,onKeyDown:se=>{(se.ctrlKey||se.metaKey)&&se.key==="Enter"&&(se.preventDefault(),R.handleSubmit(re)())}})}),b.jsx(_b,{})]})}),b.jsx(Sg,{control:R.control,name:"description",render:({field:X})=>b.jsxs(_p,{children:[b.jsxs("div",{className:"flex items-center justify-between mb-2",children:[b.jsx(Tp,{children:b.jsx(St,{children:"Description (Optional)"})}),b.jsx("button",{type:"button",onClick:le,disabled:y||l,className:`p-1.5 rounded-md transition-colors ${p?"bg-red-100 text-red-600 hover:bg-red-200":"text-muted-foreground hover:text-foreground hover:bg-accent"}`,title:Be(p?"Stop recording":"Record audio"),children:y?b.jsx(Se.Loader2,{className:"h-4 w-4 animate-spin"}):p?b.jsx(Se.MicOff,{className:"h-4 w-4"}):b.jsx(Se.Mic,{className:"h-4 w-4"})})]}),b.jsx(Ap,{children:b.jsx(Qj,{value:X.value||"",onChange:X.onChange,placeholder:Be("Describe your photo... You can use **markdown** formatting!"),className:"min-h-[120px]",onKeyDown:se=>{(se.ctrlKey||se.metaKey)&&se.key==="Enter"&&(se.preventDefault(),R.handleSubmit(re)())}})}),b.jsx(_b,{})]})}),b.jsx(Sg,{control:R.control,name:"visible",render:({field:X})=>b.jsxs(_p,{className:"flex flex-row items-center justify-between rounded-lg border p-4",children:[b.jsxs("div",{className:"space-y-0.5",children:[b.jsx(Tp,{className:"text-base",children:b.jsx(St,{children:"Visible"})}),b.jsx("div",{className:"text-sm text-muted-foreground",children:b.jsx(St,{children:"Make this picture visible to others"})})]}),b.jsx(Ap,{children:b.jsx(RS,{checked:X.value,onCheckedChange:X.onChange})})]})}),b.jsxs("div",{className:"flex gap-2",children:[b.jsx(yt,{type:"button",variant:"outline",className:"flex-1",onClick:ae,disabled:l,children:b.jsx(St,{children:"Cancel"})}),b.jsx(yt,{type:"submit",className:"flex-1",disabled:l,children:b.jsx(St,{children:l?"Updating...":"Update"})})]})]})})}),b.jsx(Tg,{value:"collections",className:"mt-4",children:b.jsxs("div",{className:"space-y-4",children:[O?b.jsx("div",{className:"flex items-center justify-center py-8",children:b.jsx(Se.Loader2,{className:"h-6 w-6 animate-spin text-muted-foreground"})}):S.length===0?b.jsxs("div",{className:"text-center py-8",children:[b.jsx(Se.Bookmark,{className:"h-12 w-12 mx-auto mb-3 text-muted-foreground opacity-50"}),b.jsx("p",{className:"text-muted-foreground mb-4",children:b.jsx(St,{children:"No collections yet"})}),b.jsx(yt,{variant:"outline",onClick:()=>{ae(),window.location.href="/collections/new"},children:b.jsx(St,{children:"Create Collection"})})]}):b.jsx("div",{className:"space-y-2 max-h-96 overflow-y-auto",children:S.map(X=>b.jsx(ux,{className:`cursor-pointer transition-colors ${A.has(X.id)?"bg-primary/10 border-primary":"hover:bg-muted/50"}`,onClick:()=>H(X.id),children:b.jsx(dx,{className:"p-3",children:b.jsxs("div",{className:"flex items-center justify-between",children:[b.jsxs("div",{className:"flex-1 mr-3",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("h4",{className:"font-medium",children:X.name}),!X.is_public&&b.jsx("span",{className:"text-xs text-muted-foreground",children:"(Private)"})]}),X.description&&b.jsx("p",{className:"text-sm text-muted-foreground line-clamp-1",children:X.description})]}),b.jsx(cx,{checked:A.has(X.id),onCheckedChange:()=>H(X.id),onClick:se=>se.stopPropagation()})]})})},X.id))}),b.jsx("div",{className:"pt-2 text-sm text-muted-foreground text-center",children:b.jsx(St,{children:A.size===0?"Not in any collections":A.size===1?"In 1 collection":`In ${A.size} collections`})})]})}),b.jsx(Tg,{value:"versions",className:"mt-4",children:b.jsx(Fve,{currentPictureId:t,onVersionSelect:a})})]})]})})};var ma=function(n,e){return Number(n.toFixed(e))},O2e=function(n,e){return typeof n=="number"?n:e},jr=function(n,e,t){t&&typeof t=="function"&&t(n,e)},P2e=function(n){return-Math.cos(n*Math.PI)/2+.5},I2e=function(n){return n},D2e=function(n){return n*n},R2e=function(n){return n*(2-n)},$2e=function(n){return n<.5?2*n*n:-1+(4-2*n)*n},L2e=function(n){return n*n*n},F2e=function(n){return--n*n*n+1},j2e=function(n){return n<.5?4*n*n*n:(n-1)*(2*n-2)*(2*n-2)+1},B2e=function(n){return n*n*n*n},V2e=function(n){return 1- --n*n*n*n},z2e=function(n){return n<.5?8*n*n*n*n:1-8*--n*n*n*n},H2e=function(n){return n*n*n*n*n},q2e=function(n){return 1+--n*n*n*n*n},U2e=function(n){return n<.5?16*n*n*n*n*n:1+16*--n*n*n*n*n},oH={easeOut:P2e,linear:I2e,easeInQuad:D2e,easeOutQuad:R2e,easeInOutQuad:$2e,easeInCubic:L2e,easeOutCubic:F2e,easeInOutCubic:j2e,easeInQuart:B2e,easeOutQuart:V2e,easeInOutQuart:z2e,easeInQuint:H2e,easeOutQuint:q2e,easeInOutQuint:U2e},aH=function(n){typeof n=="number"&&cancelAnimationFrame(n)},Qa=function(n){n.mounted&&(aH(n.animation),n.animate=!1,n.animation=null,n.velocity=null)};function lH(n,e,t,r){if(n.mounted){var s=new Date().getTime(),i=1;Qa(n),n.animation=function(){if(!n.mounted)return aH(n.animation);var o=new Date().getTime()-s,a=o/t,l=oH[e],c=l(a);o>=t?(r(i),n.animation=null):n.animation&&(r(c),requestAnimationFrame(n.animation))},requestAnimationFrame(n.animation)}}function W2e(n){var e=n.scale,t=n.positionX,r=n.positionY;return!(Number.isNaN(e)||Number.isNaN(t)||Number.isNaN(r))}function oh(n,e,t,r){var s=W2e(e);if(!(!n.mounted||!s)){var i=n.setTransformState,o=n.transformState,a=o.scale,l=o.positionX,c=o.positionY,u=e.scale-a,d=e.positionX-l,f=e.positionY-c;t===0?i(e.scale,e.positionX,e.positionY):lH(n,r,t,function(p){var m=a+u*p,y=l+d*p,w=c+f*p;i(m,y,w)})}}function G2e(n,e,t){var r=n.offsetWidth,s=n.offsetHeight,i=e.offsetWidth,o=e.offsetHeight,a=i*t,l=o*t,c=r-a,u=s-l;return{wrapperWidth:r,wrapperHeight:s,newContentWidth:a,newDiffWidth:c,newContentHeight:l,newDiffHeight:u}}var K2e=function(n,e,t,r,s,i,o){var a=n>e?t*(o?1:.5):0,l=r>s?i*(o?1:.5):0,c=n-e-a,u=a,d=r-s-l,f=l;return{minPositionX:c,maxPositionX:u,minPositionY:d,maxPositionY:f}},OE=function(n,e){var t=n.wrapperComponent,r=n.contentComponent,s=n.setup.centerZoomedOut;if(!t||!r)throw new Error("Components are not mounted");var i=G2e(t,r,e),o=i.wrapperWidth,a=i.wrapperHeight,l=i.newContentWidth,c=i.newDiffWidth,u=i.newContentHeight,d=i.newDiffHeight,f=K2e(o,l,c,a,u,d,!!s);return f},PE=function(n,e,t,r){return r?n<e?ma(e,2):n>t?ma(t,2):ma(n,2):ma(n,2)},$p=function(n,e){var t=OE(n,e);return n.bounds=t,t};function Zb(n,e,t,r,s,i,o){var a=t.minPositionX,l=t.minPositionY,c=t.maxPositionX,u=t.maxPositionY,d=0,f=0;o&&(d=s,f=i);var p=PE(n,a-d,c+d,r),m=PE(e,l-f,u+f,r);return{x:p,y:m}}function Zx(n,e,t,r,s,i){var o=n.transformState,a=o.scale,l=o.positionX,c=o.positionY,u=r-a;if(typeof e!="number"||typeof t!="number")return console.error("Mouse X and Y position were not provided!"),{x:l,y:c};var d=l-e*u,f=c-t*u,p=Zb(d,f,s,i,0,0,null);return p}function Xb(n,e,t,r,s){var i=s?r:0,o=e-i;return!Number.isNaN(t)&&n>=t?t:!Number.isNaN(e)&&n<=o?o:n}var cH=function(n,e){var t=n.setup.panning.excluded,r=n.isInitialized,s=n.wrapperComponent,i=e.target,o="shadowRoot"in i&&"composedPath"in e,a=o?e.composedPath().some(function(u){return u instanceof Element?s==null?void 0:s.contains(u):!1}):s==null?void 0:s.contains(i),l=r&&i&&a;if(!l)return!1;var c=Qx(i,t);return!c},uH=function(n){var e=n.isInitialized,t=n.isPanning,r=n.setup,s=r.panning.disabled,i=e&&t&&!s;return!!i},Y2e=function(n,e){var t=n.transformState,r=t.positionX,s=t.positionY;n.isPanning=!0;var i=e.clientX,o=e.clientY;n.startCoords={x:i-r,y:o-s}},Z2e=function(n,e){var t=e.touches,r=n.transformState,s=r.positionX,i=r.positionY;n.isPanning=!0;var o=t.length===1;if(o){var a=t[0].clientX,l=t[0].clientY;n.startCoords={x:a-s,y:l-i}}};function X2e(n){var e=n.transformState,t=e.positionX,r=e.positionY,s=e.scale,i=n.setup,o=i.disabled,a=i.limitToBounds,l=i.centerZoomedOut,c=n.wrapperComponent;if(!(o||!c||!n.bounds)){var u=n.bounds,d=u.maxPositionX,f=u.minPositionX,p=u.maxPositionY,m=u.minPositionY,y=t>d||t<f,w=r>p||r<m,k=t>d?c.offsetWidth:n.setup.minPositionX||0,x=r>p?c.offsetHeight:n.setup.minPositionY||0,S=Zx(n,k,x,s,n.bounds,a||l),_=S.x,A=S.y;return{scale:s,positionX:y?_:t,positionY:w?A:r}}}function dH(n,e,t,r,s){var i=n.setup.limitToBounds,o=n.wrapperComponent,a=n.bounds,l=n.transformState,c=l.scale,u=l.positionX,d=l.positionY;if(!(o===null||a===null||e===u&&t===d)){var f=Zb(e,t,a,i,r,s,o),p=f.x,m=f.y;n.setTransformState(c,p,m)}}var J2e=function(n,e,t){var r=n.startCoords,s=n.transformState,i=n.setup.panning,o=i.lockAxisX,a=i.lockAxisY,l=s.positionX,c=s.positionY;if(!r)return{x:l,y:c};var u=e-r.x,d=t-r.y,f=o?l:u,p=a?c:d;return{x:f,y:p}},ah=function(n,e){var t=n.setup,r=n.transformState,s=r.scale,i=t.minScale,o=t.disablePadding;return e>0&&s>=i&&!o?e:0},Q2e=function(n){var e=n.mounted,t=n.setup,r=t.disabled,s=t.velocityAnimation,i=n.transformState.scale,o=s.disabled,a=!o||i>1||!r||e;return!!a},e3e=function(n){var e=n.mounted,t=n.velocity,r=n.bounds,s=n.setup,i=s.disabled,o=s.velocityAnimation,a=n.transformState.scale,l=o.disabled,c=!l||a>1||!i||e;return!(!c||!t||!r)};function t3e(n,e){var t=n.setup.velocityAnimation,r=t.equalToMove,s=t.animationTime,i=t.sensitivity;return r?s*e*i:s}function hH(n,e,t,r,s,i,o,a,l,c){if(s){if(e>o&&t>o){var u=o+(n-o)*c;return u>l?l:u<o?o:u}if(e<i&&t<i){var u=i+(n-i)*c;return u<a?a:u>i?i:u}}return r?e:PE(n,i,o,s)}function n3e(n,e){var t=1;return e?Math.min(t,n.offsetWidth/window.innerWidth):t}function r3e(n,e){var t=Q2e(n);if(t){var r=n.lastMousePosition,s=n.velocityTime,i=n.setup,o=n.wrapperComponent,a=i.velocityAnimation.equalToMove,l=Date.now();if(r&&s&&o){var c=n3e(o,a),u=e.x-r.x,d=e.y-r.y,f=u/c,p=d/c,m=l-s,y=u*u+d*d,w=Math.sqrt(y)/m;n.velocity={velocityX:f,velocityY:p,total:w}}n.lastMousePosition=e,n.velocityTime=l}}function s3e(n){var e=n.velocity,t=n.bounds,r=n.setup,s=n.wrapperComponent,i=e3e(n);if(!(!i||!e||!t||!s)){var o=e.velocityX,a=e.velocityY,l=e.total,c=t.maxPositionX,u=t.minPositionX,d=t.maxPositionY,f=t.minPositionY,p=r.limitToBounds,m=r.alignmentAnimation,y=r.zoomAnimation,w=r.panning,k=w.lockAxisY,x=w.lockAxisX,S=y.animationType,_=m.sizeX,A=m.sizeY,T=m.velocityAlignmentTime,O=T,I=t3e(n,l),R=Math.max(I,O),D=ah(n,_),W=ah(n,A),H=D*s.offsetWidth/100,re=W*s.offsetHeight/100,ae=c+H,de=u-H,le=d+re,X=f-re,se=n.transformState,J=new Date().getTime();lH(n,S,R,function($){var ve=n.transformState,Pe=ve.scale,q=ve.positionX,Xe=ve.positionY,qe=new Date().getTime()-J,Ye=qe/O,it=oH[m.animationType],We=1-it(Math.min(1,Ye)),ot=1-$,ge=q+o*ot,Ie=Xe+a*ot,pt=hH(ge,se.positionX,q,x,p,u,c,de,ae,We),j=hH(Ie,se.positionY,Xe,k,p,f,d,X,le,We);(q!==ge||Xe!==Ie)&&n.setTransformState(Pe,pt,j)})}}function fH(n,e){var t=n.transformState.scale;Qa(n),$p(n,t),window.TouchEvent!==void 0&&e instanceof TouchEvent?Z2e(n,e):Y2e(n,e)}function IE(n,e){var t=n.transformState.scale,r=n.setup,s=r.minScale,i=r.alignmentAnimation,o=i.disabled,a=i.sizeX,l=i.sizeY,c=i.animationTime,u=i.animationType,d=o||t<s||!a&&!l;if(!d){var f=X2e(n);f&&oh(n,f,e??c,u)}}function pH(n,e,t){var r=n.startCoords,s=n.setup,i=s.alignmentAnimation,o=i.sizeX,a=i.sizeY;if(r){var l=J2e(n,e,t),c=l.x,u=l.y,d=ah(n,o),f=ah(n,a);r3e(n,{x:c,y:u}),dH(n,c,u,d,f)}}function i3e(n){if(n.isPanning){var e=n.setup.panning.velocityDisabled,t=n.velocity,r=n.wrapperComponent,s=n.contentComponent;n.isPanning=!1,n.animate=!1,n.animation=null;var i=r==null?void 0:r.getBoundingClientRect(),o=s==null?void 0:s.getBoundingClientRect(),a=(i==null?void 0:i.width)||0,l=(i==null?void 0:i.height)||0,c=(o==null?void 0:o.width)||0,u=(o==null?void 0:o.height)||0,d=a<c||l<u,f=!e&&t&&(t==null?void 0:t.total)>.1&&d;f?s3e(n):IE(n)}}function DE(n,e,t,r){var s=n.setup,i=s.minScale,o=s.maxScale,a=s.limitToBounds,l=Xb(ma(e,2),i,o,0,!1),c=$p(n,l),u=Zx(n,t,r,l,c,a),d=u.x,f=u.y;return{scale:l,positionX:d,positionY:f}}function mH(n,e,t){var r=n.transformState.scale,s=n.wrapperComponent,i=n.setup,o=i.minScale,a=i.limitToBounds,l=i.zoomAnimation,c=l.disabled,u=l.animationTime,d=l.animationType,f=c||r>=o;if((r>=1||a)&&IE(n),!(f||!s||!n.mounted)){var p=e||s.offsetWidth/2,m=t||s.offsetHeight/2,y=DE(n,o,p,m);y&&oh(n,y,u,d)}}var lh=function(){return lh=Object.assign||function(e){for(var t,r=1,s=arguments.length;r<s;r++){t=arguments[r];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},lh.apply(this,arguments)};function gH(n,e,t){for(var r=0,s=e.length,i;r<s;r++)(i||!(r in e))&&(i||(i=Array.prototype.slice.call(e,0,r)),i[r]=e[r]);return n.concat(i||Array.prototype.slice.call(e))}typeof SuppressedError=="function"&&SuppressedError;var Xx={scale:1,positionX:0,positionY:0},Jb={disabled:!1,minPositionX:null,maxPositionX:null,minPositionY:null,maxPositionY:null,minScale:1,maxScale:8,limitToBounds:!0,centerZoomedOut:!1,centerOnInit:!1,disablePadding:!1,smooth:!0,wheel:{step:.2,disabled:!1,smoothStep:.001,wheelDisabled:!1,touchPadDisabled:!1,activationKeys:[],excluded:[]},panning:{disabled:!1,velocityDisabled:!1,lockAxisX:!1,lockAxisY:!1,allowLeftClickPan:!0,allowMiddleClickPan:!0,allowRightClickPan:!0,wheelPanning:!1,activationKeys:[],excluded:[]},pinch:{step:5,disabled:!1,excluded:[]},doubleClick:{disabled:!1,step:.7,mode:"zoomIn",animationType:"easeOut",animationTime:200,excluded:[]},zoomAnimation:{disabled:!1,size:.4,animationTime:200,animationType:"easeOut"},alignmentAnimation:{disabled:!1,sizeX:100,sizeY:100,animationTime:200,velocityAlignmentTime:400,animationType:"easeOut"},velocityAnimation:{disabled:!1,sensitivity:1,animationTime:400,animationType:"easeOut",equalToMove:!0}},RE={wrapperClass:"react-transform-wrapper",contentClass:"react-transform-component"},yH=function(n){var e,t,r,s;return{previousScale:(e=n.initialScale)!==null&&e!==void 0?e:Xx.scale,scale:(t=n.initialScale)!==null&&t!==void 0?t:Xx.scale,positionX:(r=n.initialPositionX)!==null&&r!==void 0?r:Xx.positionX,positionY:(s=n.initialPositionY)!==null&&s!==void 0?s:Xx.positionY}},vH=function(n){var e=lh({},Jb);return Object.keys(n).forEach(function(t){var r=typeof n[t]<"u",s=typeof Jb[t]<"u";if(s&&r){var i=Object.prototype.toString.call(Jb[t]),o=i==="[object Object]",a=i==="[object Array]";o?e[t]=lh(lh({},Jb[t]),n[t]):a?e[t]=gH(gH([],Jb[t],!0),n[t]):e[t]=n[t]}}),e},bH=function(n,e,t){var r=n.transformState.scale,s=n.wrapperComponent,i=n.setup,o=i.maxScale,a=i.minScale,l=i.zoomAnimation,c=i.smooth,u=l.size;if(!s)throw new Error("Wrapper is not mounted");var d=c?r*Math.exp(e*t):r+e*t,f=Xb(ma(d,3),a,o,u,!1);return f};function wH(n,e,t,r,s){var i=n.wrapperComponent,o=n.transformState,a=o.scale,l=o.positionX,c=o.positionY;if(!i)return console.error("No WrapperComponent found");var u=i.offsetWidth,d=i.offsetHeight,f=(u/2-l)/a,p=(d/2-c)/a,m=bH(n,e,t),y=DE(n,m,f,p);if(!y)return console.error("Error during zoom event. New transformation state was not calculated.");oh(n,y,r,s)}function xH(n,e,t,r){var s=n.setup,i=n.wrapperComponent,o=s.limitToBounds,a=yH(n.props),l=n.transformState,c=l.scale,u=l.positionX,d=l.positionY;if(i){var f=OE(n,a.scale),p=Zb(a.positionX,a.positionY,f,o,0,0,i),m={scale:a.scale,positionX:p.x,positionY:p.y};c===a.scale&&u===a.positionX&&d===a.positionY||(r==null||r(),oh(n,m,e,t))}}function o3e(n,e,t,r){var s=n.getBoundingClientRect(),i=e.getBoundingClientRect(),o=t.getBoundingClientRect(),a=i.x*r.scale,l=i.y*r.scale;return{x:(s.x-o.x+a)/r.scale,y:(s.y-o.y+l)/r.scale}}function a3e(n,e,t){var r=n.wrapperComponent,s=n.contentComponent,i=n.transformState,o=n.setup,a=o.limitToBounds,l=o.minScale,c=o.maxScale;if(!r||!s)return i;var u=r.getBoundingClientRect(),d=e.getBoundingClientRect(),f=o3e(e,r,s,i),p=f.x,m=f.y,y=d.width/i.scale,w=d.height/i.scale,k=r.offsetWidth/y,x=r.offsetHeight/w,S=Xb(t||Math.min(k,x),l,c,0,!1),_=(u.width-y*S)/2,A=(u.height-w*S)/2,T=(u.left-p)*S+_,O=(u.top-m)*S+A,I=OE(n,S),R=Zb(T,O,I,a,0,0,r),D=R.x,W=R.y;return{positionX:D,positionY:W,scale:S}}var l3e=function(n){return function(e,t,r){e===void 0&&(e=.5),t===void 0&&(t=300),r===void 0&&(r="easeOut"),wH(n,1,e,t,r)}},c3e=function(n){return function(e,t,r){e===void 0&&(e=.5),t===void 0&&(t=300),r===void 0&&(r="easeOut"),wH(n,-1,e,t,r)}},u3e=function(n){return function(e,t,r,s,i){s===void 0&&(s=300),i===void 0&&(i="easeOut");var o=n.transformState,a=o.positionX,l=o.positionY,c=o.scale,u=n.wrapperComponent,d=n.contentComponent,f=n.setup.disabled;if(!(f||!u||!d)){var p={positionX:Number.isNaN(e)?a:e,positionY:Number.isNaN(t)?l:t,scale:Number.isNaN(r)?c:r};oh(n,p,s,i)}}},d3e=function(n){return function(e,t){e===void 0&&(e=200),t===void 0&&(t="easeOut"),xH(n,e,t)}},h3e=function(n){return function(e,t,r){t===void 0&&(t=200),r===void 0&&(r="easeOut");var s=n.transformState,i=n.wrapperComponent,o=n.contentComponent;if(i&&o){var a=kH(e||s.scale,i,o);oh(n,a,t,r)}}},f3e=function(n){return function(e,t,r,s){r===void 0&&(r=600),s===void 0&&(s="easeOut"),Qa(n);var i=n.wrapperComponent,o=typeof e=="string"?document.getElementById(e):e;if(i&&o&&i.contains(o)){var a=a3e(n,o,t);oh(n,a,r,s)}}},$E=function(n){return{instance:n,zoomIn:l3e(n),zoomOut:c3e(n),setTransform:u3e(n),resetTransform:d3e(n),centerView:h3e(n),zoomToElement:f3e(n)}},p3e=function(n){return{instance:n,state:n.transformState}},Ar=function(n){var e={};return Object.assign(e,p3e(n)),Object.assign(e,$E(n)),e},LE=!1;function FE(){try{var n={get passive(){return LE=!0,!1}};return n}catch{return LE=!1,LE}}var Jx=".".concat(RE.wrapperClass),Qx=function(n,e){return e.some(function(t){return n.matches("".concat(Jx," ").concat(t,", ").concat(Jx," .").concat(t,", ").concat(Jx," ").concat(t," *, ").concat(Jx," .").concat(t," *"))})},jE=function(n){n&&clearTimeout(n)},m3e=function(n,e,t){return"translate(".concat(n,"px, ").concat(e,"px) scale(").concat(t,")")},kH=function(n,e,t){var r=t.offsetWidth*n,s=t.offsetHeight*n,i=(e.offsetWidth-r)/2,o=(e.offsetHeight-s)/2;return{scale:n,positionX:i,positionY:o}};function g3e(n){return function(e){n.forEach(function(t){typeof t=="function"?t(e):t!=null&&(t.current=e)})}}var y3e=function(n,e){var t=n.setup.wheel,r=t.disabled,s=t.wheelDisabled,i=t.touchPadDisabled,o=t.excluded,a=n.isInitialized,l=n.isPanning,c=e.target,u=a&&!l&&!r&&c;if(!u||s&&!e.ctrlKey||i&&e.ctrlKey)return!1;var d=Qx(c,o);return!d},v3e=function(n){return n?n.deltaY<0?1:-1:0};function b3e(n,e){var t=v3e(n),r=O2e(e,t);return r}function CH(n,e,t){var r=e.getBoundingClientRect(),s=0,i=0;if("clientX"in n)s=(n.clientX-r.left)/t,i=(n.clientY-r.top)/t;else{var o=n.touches[0];s=(o.clientX-r.left)/t,i=(o.clientY-r.top)/t}return(Number.isNaN(s)||Number.isNaN(i))&&console.error("No mouse or touch offset found"),{x:s,y:i}}var w3e=function(n,e,t,r,s){var i=n.transformState.scale,o=n.wrapperComponent,a=n.setup,l=a.maxScale,c=a.minScale,u=a.zoomAnimation,d=a.disablePadding,f=u.size,p=u.disabled;if(!o)throw new Error("Wrapper is not mounted");var m=i+e*t,y=r?!1:!p,w=Xb(ma(m,3),c,l,f,y&&!d);return w},x3e=function(n,e){var t=n.previousWheelEvent,r=n.transformState.scale,s=n.setup,i=s.maxScale,o=s.minScale;return t?r<i||r>o||Math.sign(t.deltaY)!==Math.sign(e.deltaY)||t.deltaY>0&&t.deltaY<e.deltaY||t.deltaY<0&&t.deltaY>e.deltaY||Math.sign(t.deltaY)!==Math.sign(e.deltaY):!1},k3e=function(n,e){var t=n.setup.pinch,r=t.disabled,s=t.excluded,i=n.isInitialized,o=e.target,a=i&&!r&&o;if(!a)return!1;var l=Qx(o,s);return!l},C3e=function(n){var e=n.setup.pinch.disabled,t=n.isInitialized,r=n.pinchStartDistance,s=t&&!e&&r;return!!s},S3e=function(n,e,t){var r=t.getBoundingClientRect(),s=n.touches,i=ma(s[0].clientX-r.left,5),o=ma(s[0].clientY-r.top,5),a=ma(s[1].clientX-r.left,5),l=ma(s[1].clientY-r.top,5);return{x:(i+a)/2/e,y:(o+l)/2/e}},SH=function(n){return Math.sqrt(Math.pow(n.touches[0].pageX-n.touches[1].pageX,2)+Math.pow(n.touches[0].pageY-n.touches[1].pageY,2))},E3e=function(n,e){var t=n.pinchStartScale,r=n.pinchStartDistance,s=n.setup,i=s.maxScale,o=s.minScale,a=s.zoomAnimation,l=s.disablePadding,c=a.size,u=a.disabled;if(!t||r===null||!e)throw new Error("Pinch touches distance was not provided");if(e<0)return n.transformState.scale;var d=e/r,f=d*t;return Xb(ma(f,2),o,i,c,!u&&!l)},_3e=160,T3e=100,A3e=function(n,e){var t=n.props,r=t.onWheelStart,s=t.onZoomStart;n.wheelStopEventTimer||(Qa(n),jr(Ar(n),e,r),jr(Ar(n),e,s))},N3e=function(n,e){var t=n.props,r=t.onWheel,s=t.onZoom,i=n.contentComponent,o=n.setup,a=n.transformState,l=a.scale,c=o.limitToBounds,u=o.centerZoomedOut,d=o.zoomAnimation,f=o.wheel,p=o.disablePadding,m=o.smooth,y=d.size,w=d.disabled,k=f.step,x=f.smoothStep;if(!i)throw new Error("Component not mounted");e.preventDefault(),e.stopPropagation();var S=b3e(e,null),_=m?x*Math.abs(e.deltaY):k,A=w3e(n,S,_,!e.ctrlKey);if(l!==A){var T=$p(n,A),O=CH(e,i,l),I=w||y===0||u||p,R=c&&I,D=Zx(n,O.x,O.y,A,T,R),W=D.x,H=D.y;n.previousWheelEvent=e,n.setTransformState(A,W,H),jr(Ar(n),e,r),jr(Ar(n),e,s)}},M3e=function(n,e){var t=n.props,r=t.onWheelStop,s=t.onZoomStop;jE(n.wheelAnimationTimer),n.wheelAnimationTimer=setTimeout(function(){n.mounted&&(mH(n,e.x,e.y),n.wheelAnimationTimer=null)},T3e);var i=x3e(n,e);i&&(jE(n.wheelStopEventTimer),n.wheelStopEventTimer=setTimeout(function(){n.mounted&&(n.wheelStopEventTimer=null,jr(Ar(n),e,r),jr(Ar(n),e,s))},_3e))},EH=function(n){for(var e=0,t=0,r=0;r<2;r+=1)e+=n.touches[r].clientX,t+=n.touches[r].clientY;var s=e/2,i=t/2;return{x:s,y:i}},O3e=function(n,e){var t=SH(e);n.pinchStartDistance=t,n.lastDistance=t,n.pinchStartScale=n.transformState.scale,n.isPanning=!1;var r=EH(e);n.pinchLastCenterX=r.x,n.pinchLastCenterY=r.y,Qa(n)},P3e=function(n,e){var t=n.contentComponent,r=n.pinchStartDistance,s=n.wrapperComponent,i=n.transformState.scale,o=n.setup,a=o.limitToBounds,l=o.centerZoomedOut,c=o.zoomAnimation,u=o.alignmentAnimation,d=c.disabled,f=c.size;if(!(r===null||!t)){var p=S3e(e,i,t);if(!(!Number.isFinite(p.x)||!Number.isFinite(p.y))){var m=SH(e),y=E3e(n,m),w=EH(e),k=w.x-(n.pinchLastCenterX||0),x=w.y-(n.pinchLastCenterY||0);if(!(y===i&&k===0&&x===0)){n.pinchLastCenterX=w.x,n.pinchLastCenterY=w.y;var S=$p(n,y),_=d||f===0||l,A=a&&_,T=Zx(n,p.x,p.y,y,S,A),O=T.x,I=T.y;n.pinchMidpoint=p,n.lastDistance=m;var R=u.sizeX,D=u.sizeY,W=ah(n,R),H=ah(n,D),re=O+k,ae=I+x,de=Zb(re,ae,S,a,W,H,s),le=de.x,X=de.y;n.setTransformState(y,le,X)}}}},I3e=function(n){var e=n.pinchMidpoint;n.velocity=null,n.lastDistance=null,n.pinchMidpoint=null,n.pinchStartScale=null,n.pinchStartDistance=null,mH(n,e==null?void 0:e.x,e==null?void 0:e.y)},_H=function(n,e){var t=n.props.onZoomStop,r=n.setup.doubleClick.animationTime;jE(n.doubleClickStopEventTimer),n.doubleClickStopEventTimer=setTimeout(function(){n.doubleClickStopEventTimer=null,jr(Ar(n),e,t)},r)},D3e=function(n,e){var t=n.props,r=t.onZoomStart,s=t.onZoom,i=n.setup.doubleClick,o=i.animationTime,a=i.animationType;jr(Ar(n),e,r),xH(n,o,a,function(){return jr(Ar(n),e,s)}),_H(n,e)};function R3e(n,e){return n==="toggle"?e===1?1:-1:n==="zoomOut"?-1:1}function $3e(n,e){var t=n.setup,r=n.doubleClickStopEventTimer,s=n.transformState,i=n.contentComponent,o=s.scale,a=n.props,l=a.onZoomStart,c=a.onZoom,u=t.doubleClick,d=u.disabled,f=u.mode,p=u.step,m=u.animationTime,y=u.animationType;if(!d&&!r){if(f==="reset")return D3e(n,e);if(!i)return console.error("No ContentComponent found");var w=R3e(f,n.transformState.scale),k=bH(n,w,p);if(o!==k){jr(Ar(n),e,l);var x=CH(e,i,o),S=DE(n,k,x.x,x.y);if(!S)return console.error("Error during zoom event. New transformation state was not calculated.");jr(Ar(n),e,c),oh(n,S,m,y),_H(n,e)}}}var L3e=function(n,e){var t=n.isInitialized,r=n.setup,s=n.wrapperComponent,i=r.doubleClick,o=i.disabled,a=i.excluded,l=e.target,c=s==null?void 0:s.contains(l),u=t&&l&&c&&!o;if(!u)return!1;var d=Qx(l,a);return!d},F3e=function(){function n(e){var t=this;this.mounted=!0,this.pinchLastCenterX=null,this.pinchLastCenterY=null,this.onChangeCallbacks=new Set,this.onInitCallbacks=new Set,this.wrapperComponent=null,this.contentComponent=null,this.isInitialized=!1,this.bounds=null,this.previousWheelEvent=null,this.wheelStopEventTimer=null,this.wheelAnimationTimer=null,this.isPanning=!1,this.isWheelPanning=!1,this.startCoords=null,this.lastTouch=null,this.distance=null,this.lastDistance=null,this.pinchStartDistance=null,this.pinchStartScale=null,this.pinchMidpoint=null,this.doubleClickStopEventTimer=null,this.velocity=null,this.velocityTime=null,this.lastMousePosition=null,this.animate=!1,this.animation=null,this.maxBounds=null,this.pressedKeys={},this.mount=function(){t.initializeWindowEvents()},this.unmount=function(){t.cleanupWindowEvents()},this.update=function(r){t.props=r,$p(t,t.transformState.scale),t.setup=vH(r)},this.initializeWindowEvents=function(){var r,s,i=FE(),o=(r=t.wrapperComponent)===null||r===void 0?void 0:r.ownerDocument,a=o==null?void 0:o.defaultView;(s=t.wrapperComponent)===null||s===void 0||s.addEventListener("wheel",t.onWheelPanning,i),a==null||a.addEventListener("mousedown",t.onPanningStart,i),a==null||a.addEventListener("mousemove",t.onPanning,i),a==null||a.addEventListener("mouseup",t.onPanningStop,i),o==null||o.addEventListener("mouseleave",t.clearPanning,i),a==null||a.addEventListener("keyup",t.setKeyUnPressed,i),a==null||a.addEventListener("keydown",t.setKeyPressed,i)},this.cleanupWindowEvents=function(){var r,s,i=FE(),o=(r=t.wrapperComponent)===null||r===void 0?void 0:r.ownerDocument,a=o==null?void 0:o.defaultView;a==null||a.removeEventListener("mousedown",t.onPanningStart,i),a==null||a.removeEventListener("mousemove",t.onPanning,i),a==null||a.removeEventListener("mouseup",t.onPanningStop,i),o==null||o.removeEventListener("mouseleave",t.clearPanning,i),a==null||a.removeEventListener("keyup",t.setKeyUnPressed,i),a==null||a.removeEventListener("keydown",t.setKeyPressed,i),document.removeEventListener("mouseleave",t.clearPanning,i),Qa(t),(s=t.observer)===null||s===void 0||s.disconnect()},this.handleInitializeWrapperEvents=function(r){var s=FE();r.addEventListener("wheel",t.onWheelZoom,s),r.addEventListener("dblclick",t.onDoubleClick,s),r.addEventListener("touchstart",t.onTouchPanningStart,s),r.addEventListener("touchmove",t.onTouchPanning,s),r.addEventListener("touchend",t.onTouchPanningStop,s)},this.handleInitialize=function(r,s){var i=!1,o=t.setup.centerOnInit,a=function(l,c){for(var u=0,d=l;u<d.length;u++){var f=d[u];if(f.target===c)return!0}return!1};t.applyTransformation(),t.onInitCallbacks.forEach(function(l){l(Ar(t))}),t.observer=new ResizeObserver(function(l){if(a(l,r)||a(l,s))if(o&&!i){var c=s.offsetWidth,u=s.offsetHeight;(c>0||u>0)&&(i=!0,t.setCenter())}else Qa(t),$p(t,t.transformState.scale),IE(t,0)}),t.observer.observe(r),t.observer.observe(s)},this.onWheelZoom=function(r){var s=t.setup.disabled;if(!s){var i=y3e(t,r);if(i){var o=t.isPressingKeys(t.setup.wheel.activationKeys);o&&(A3e(t,r),N3e(t,r),M3e(t,r))}}},this.onWheelPanning=function(r){var s=t.setup,i=s.disabled,o=s.wheel,a=s.panning;if(!(!t.wrapperComponent||!t.contentComponent||i||!o.wheelDisabled||a.disabled||!a.wheelPanning||r.ctrlKey)){r.preventDefault(),r.stopPropagation();var l=t.transformState,c=l.positionX,u=l.positionY,d=c-r.deltaX,f=u-r.deltaY,p=a.lockAxisX?c:d,m=a.lockAxisY?u:f,y=t.setup.alignmentAnimation,w=y.sizeX,k=y.sizeY,x=ah(t,w),S=ah(t,k);p===c&&m===u||dH(t,p,m,x,S)}},this.onPanningStart=function(r){var s=t.setup.disabled,i=t.props.onPanningStart;if(!s){var o=cH(t,r);if(o){var a=t.isPressingKeys(t.setup.panning.activationKeys);a&&(r.button===0&&!t.setup.panning.allowLeftClickPan||r.button===1&&!t.setup.panning.allowMiddleClickPan||r.button===2&&!t.setup.panning.allowRightClickPan||(r.preventDefault(),r.stopPropagation(),Qa(t),fH(t,r),jr(Ar(t),r,i)))}}},this.onPanning=function(r){var s=t.setup.disabled,i=t.props.onPanning;if(!s){var o=uH(t);if(o){var a=t.isPressingKeys(t.setup.panning.activationKeys);a&&(r.preventDefault(),r.stopPropagation(),pH(t,r.clientX,r.clientY),jr(Ar(t),r,i))}}},this.onPanningStop=function(r){var s=t.props.onPanningStop;t.isPanning&&(i3e(t),jr(Ar(t),r,s))},this.onPinchStart=function(r){var s=t.setup.disabled,i=t.props,o=i.onPinchingStart,a=i.onZoomStart;if(!s){var l=k3e(t,r);l&&(O3e(t,r),Qa(t),jr(Ar(t),r,o),jr(Ar(t),r,a))}},this.onPinch=function(r){var s=t.setup.disabled,i=t.props,o=i.onPinching,a=i.onZoom;if(!s){var l=C3e(t);l&&(r.preventDefault(),r.stopPropagation(),P3e(t,r),jr(Ar(t),r,o),jr(Ar(t),r,a))}},this.onPinchStop=function(r){var s=t.props,i=s.onPinchingStop,o=s.onZoomStop;t.pinchStartScale&&(I3e(t),jr(Ar(t),r,i),jr(Ar(t),r,o))},this.onTouchPanningStart=function(r){var s=t.setup.disabled,i=t.props.onPanningStart;if(!s){var o=cH(t,r);if(o){var a=t.lastTouch&&+new Date-t.lastTouch<200&&r.touches.length===1;if(!a){t.lastTouch=+new Date,Qa(t);var l=r.touches,c=l.length===1,u=l.length===2;c&&(Qa(t),fH(t,r),jr(Ar(t),r,i)),u&&t.onPinchStart(r)}}}},this.onTouchPanning=function(r){var s=t.setup.disabled,i=t.props.onPanning;if(t.isPanning&&r.touches.length===1){if(s)return;var o=uH(t);if(!o)return;r.preventDefault(),r.stopPropagation();var a=r.touches[0];pH(t,a.clientX,a.clientY),jr(Ar(t),r,i)}else r.touches.length>1&&t.onPinch(r)},this.onTouchPanningStop=function(r){t.onPanningStop(r),t.onPinchStop(r)},this.onDoubleClick=function(r){var s=t.setup.disabled;if(!s){var i=L3e(t,r);i&&$3e(t,r)}},this.clearPanning=function(r){t.isPanning&&t.onPanningStop(r)},this.setKeyPressed=function(r){t.pressedKeys[r.key]=!0},this.setKeyUnPressed=function(r){t.pressedKeys[r.key]=!1},this.isPressingKeys=function(r){return r.length?!!r.find(function(s){return t.pressedKeys[s]}):!0},this.setTransformState=function(r,s,i){var o=t.props.onTransformed;if(!Number.isNaN(r)&&!Number.isNaN(s)&&!Number.isNaN(i)){r!==t.transformState.scale&&(t.transformState.previousScale=t.transformState.scale,t.transformState.scale=r),t.transformState.positionX=s,t.transformState.positionY=i,t.applyTransformation();var a=Ar(t);t.onChangeCallbacks.forEach(function(l){return l(a)}),jr(a,{scale:r,positionX:s,positionY:i},o)}else console.error("Detected NaN set state values")},this.setCenter=function(){if(t.wrapperComponent&&t.contentComponent){var r=kH(t.transformState.scale,t.wrapperComponent,t.contentComponent);t.setTransformState(r.scale,r.positionX,r.positionY)}},this.handleTransformStyles=function(r,s,i){return t.props.customTransform?t.props.customTransform(r,s,i):m3e(r,s,i)},this.applyTransformation=function(){if(!(!t.mounted||!t.contentComponent)){var r=t.transformState,s=r.scale,i=r.positionX,o=r.positionY,a=t.handleTransformStyles(i,o,s);t.contentComponent.style.transform=a}},this.getContext=function(){return Ar(t)},this.onChange=function(r){return t.onChangeCallbacks.has(r)||t.onChangeCallbacks.add(r),function(){t.onChangeCallbacks.delete(r)}},this.onInit=function(r){return t.onInitCallbacks.has(r)||t.onInitCallbacks.add(r),function(){t.onInitCallbacks.delete(r)}},this.init=function(r,s){t.cleanupWindowEvents(),t.wrapperComponent=r,t.contentComponent=s,$p(t,t.transformState.scale),t.handleInitializeWrapperEvents(r),t.handleInitialize(r,s),t.initializeWindowEvents(),t.isInitialized=!0;var i=Ar(t);jr(i,void 0,t.props.onInit)},this.props=e,this.setup=vH(this.props),this.transformState=yH(this.props)}return n}(),BE=U.createContext(null),j3e=function(n,e){return typeof n=="function"?n(e):n},B3e=U.forwardRef(function(n,e){var t=U.useRef(new F3e(n)).current,r=j3e(n.children,$E(t));return U.useImperativeHandle(e,function(){return $E(t)},[t]),U.useEffect(function(){t.update(n)},[t,n]),U.createElement(BE.Provider,{value:t},r)});U.forwardRef(function(n,e){var t=U.useRef(null),r=U.useContext(BE);return U.useEffect(function(){return r.onChange(function(s){if(t.current){var i=0,o=0;t.current.style.transform=r.handleTransformStyles(i,o,1/s.instance.transformState.scale)}})},[r]),U.createElement("div",lh({},n,{ref:g3e([t,e])}))});function V3e(n,e){e===void 0&&(e={});var t=e.insertAt;if(!(typeof document>"u")){var r=document.head||document.getElementsByTagName("head")[0],s=document.createElement("style");s.type="text/css",t==="top"&&r.firstChild?r.insertBefore(s,r.firstChild):r.appendChild(s),s.styleSheet?s.styleSheet.cssText=n:s.appendChild(document.createTextNode(n))}}var z3e=`.transform-component-module_wrapper__SPB86 { + position: relative; + width: -moz-fit-content; + width: fit-content; + height: -moz-fit-content; + height: fit-content; + overflow: hidden; + -webkit-touch-callout: none; /* iOS Safari */ + -webkit-user-select: none; /* Safari */ + -khtml-user-select: none; /* Konqueror HTML */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* Internet Explorer/Edge */ + user-select: none; + margin: 0; + padding: 0; + transform: translate3d(0, 0, 0); +} +.transform-component-module_content__FBWxo { + display: flex; + flex-wrap: wrap; + width: -moz-fit-content; + width: fit-content; + height: -moz-fit-content; + height: fit-content; + margin: 0; + padding: 0; + transform-origin: 0% 0%; +} +.transform-component-module_content__FBWxo img { + pointer-events: none; +} +`,TH={wrapper:"transform-component-module_wrapper__SPB86",content:"transform-component-module_content__FBWxo"};V3e(z3e);var H3e=function(n){var e=n.children,t=n.wrapperClass,r=t===void 0?"":t,s=n.contentClass,i=s===void 0?"":s,o=n.wrapperStyle,a=n.contentStyle,l=n.wrapperProps,c=l===void 0?{}:l,u=n.contentProps,d=u===void 0?{}:u,f=U.useContext(BE),p=f.init,m=f.cleanupWindowEvents,y=U.useRef(null),w=U.useRef(null);return U.useEffect(function(){var k=y.current,x=w.current;return k!==null&&x!==null&&p&&(p==null||p(k,x)),function(){m==null||m()}},[]),U.createElement("div",lh({},c,{ref:y,className:"".concat(RE.wrapperClass," ").concat(TH.wrapper," ").concat(r),style:o}),U.createElement("div",lh({},d,{ref:w,className:"".concat(RE.contentClass," ").concat(TH.content," ").concat(i),style:a}),e))};const e5=g.forwardRef(({className:n,...e},t)=>b.jsx("textarea",{className:Pt("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",n),ref:t,...e}));e5.displayName="Textarea";var VE="Radio",[q3e,AH]=fa(VE),[U3e,W3e]=q3e(VE),NH=g.forwardRef((n,e)=>{const{__scopeRadio:t,name:r,checked:s=!1,required:i,disabled:o,value:a="on",onCheck:l,form:c,...u}=n,[d,f]=g.useState(null),p=Tr(e,w=>f(w)),m=g.useRef(!1),y=d?c||!!d.closest("form"):!0;return b.jsxs(U3e,{scope:t,checked:s,disabled:o,children:[b.jsx(Un.button,{type:"button",role:"radio","aria-checked":s,"data-state":IH(s),"data-disabled":o?"":void 0,disabled:o,value:a,...u,ref:p,onClick:Dt(n.onClick,w=>{s||l==null||l(),y&&(m.current=w.isPropagationStopped(),m.current||w.stopPropagation())})}),y&&b.jsx(PH,{control:d,bubbles:!m.current,name:r,value:a,checked:s,required:i,disabled:o,form:c,style:{transform:"translateX(-100%)"}})]})});NH.displayName=VE;var MH="RadioIndicator",OH=g.forwardRef((n,e)=>{const{__scopeRadio:t,forceMount:r,...s}=n,i=W3e(MH,t);return b.jsx(Ka,{present:r||i.checked,children:b.jsx(Un.span,{"data-state":IH(i.checked),"data-disabled":i.disabled?"":void 0,...s,ref:e})})});OH.displayName=MH;var G3e="RadioBubbleInput",PH=g.forwardRef(({__scopeRadio:n,control:e,checked:t,bubbles:r=!0,...s},i)=>{const o=g.useRef(null),a=Tr(o,i),l=DS(t),c=ox(e);return g.useEffect(()=>{const u=o.current;if(!u)return;const d=window.HTMLInputElement.prototype,p=Object.getOwnPropertyDescriptor(d,"checked").set;if(l!==t&&p){const m=new Event("click",{bubbles:r});p.call(u,t),u.dispatchEvent(m)}},[l,t,r]),b.jsx(Un.input,{type:"radio","aria-hidden":!0,defaultChecked:t,...s,tabIndex:-1,ref:a,style:{...s.style,...c,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});PH.displayName=G3e;function IH(n){return n?"checked":"unchecked"}var K3e=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],t5="RadioGroup",[Y3e]=fa(t5,[Eg,AH]),DH=Eg(),RH=AH(),[Z3e,X3e]=Y3e(t5),$H=g.forwardRef((n,e)=>{const{__scopeRadioGroup:t,name:r,defaultValue:s,value:i,required:o=!1,disabled:a=!1,orientation:l,dir:c,loop:u=!0,onValueChange:d,...f}=n,p=DH(t),m=sx(c),[y,w]=Cp({prop:i,defaultProp:s??null,onChange:d,caller:t5});return b.jsx(Z3e,{scope:t,name:r,required:o,disabled:a,value:y,onValueChange:w,children:b.jsx(MS,{asChild:!0,...p,orientation:l,dir:m,loop:u,children:b.jsx(Un.div,{role:"radiogroup","aria-required":o,"aria-orientation":l,"data-disabled":a?"":void 0,dir:m,...f,ref:e})})})});$H.displayName=t5;var LH="RadioGroupItem",FH=g.forwardRef((n,e)=>{const{__scopeRadioGroup:t,disabled:r,...s}=n,i=X3e(LH,t),o=i.disabled||r,a=DH(t),l=RH(t),c=g.useRef(null),u=Tr(e,c),d=i.value===s.value,f=g.useRef(!1);return g.useEffect(()=>{const p=y=>{K3e.includes(y.key)&&(f.current=!0)},m=()=>f.current=!1;return document.addEventListener("keydown",p),document.addEventListener("keyup",m),()=>{document.removeEventListener("keydown",p),document.removeEventListener("keyup",m)}},[]),b.jsx(OS,{asChild:!0,...a,focusable:!o,active:d,children:b.jsx(NH,{disabled:o,required:i.required,checked:d,...l,...s,name:i.name,ref:u,onCheck:()=>i.onValueChange(s.value),onKeyDown:Dt(p=>{p.key==="Enter"&&p.preventDefault()}),onFocus:Dt(s.onFocus,()=>{var p;f.current&&((p=c.current)==null||p.click())})})})});FH.displayName=LH;var J3e="RadioGroupIndicator",jH=g.forwardRef((n,e)=>{const{__scopeRadioGroup:t,...r}=n,s=RH(t);return b.jsx(OH,{...s,...r,ref:e})});jH.displayName=J3e;var BH=$H,VH=FH,Q3e=jH;const zH=g.forwardRef(({className:n,...e},t)=>b.jsx(BH,{className:Pt("grid gap-2",n),...e,ref:t}));zH.displayName=BH.displayName;const n5=g.forwardRef(({className:n,...e},t)=>b.jsx(VH,{ref:t,className:Pt("aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",n),...e,children:b.jsx(Q3e,{className:"flex items-center justify-center",children:b.jsx(Se.Circle,{className:"h-2.5 w-2.5 fill-current text-current"})})}));n5.displayName=VH.displayName;function e4e({isOpen:n,onClose:e,onPublish:t,originalTitle:r,originalImageId:s,isPublishing:i=!1,editingPostId:o}){const{user:a}=du(),[l,c]=U.useState("new"),[u,d]=U.useState(r),[f,p]=U.useState(""),[m,y]=U.useState([]),[w,k]=U.useState([]),[x,S]=U.useState(!1);U.useEffect(()=>{n&&a&&(_(),c(o?"add-to-post":"new"))},[n,a,o]);const _=async()=>{if(a){S(!0);try{const{data:I,error:R}=await Yt.from("collections").select("id, name, slug").eq("user_id",a.id).order("name");if(R)throw R;y(I||[])}catch(I){console.error("Error loading collections:",I)}finally{S(!1)}}},A=I=>{k(R=>R.includes(I)?R.filter(D=>D!==I):[...R,I])},T=I=>{I.preventDefault(),t(l,u.trim()||void 0,f.trim()||void 0,s,w.length>0?w:void 0)},O=()=>{i||e()};return n?b.jsx("div",{className:"fixed inset-0 bg-black/50 z-[10000] flex items-center justify-center p-4",children:b.jsx("div",{className:"bg-background rounded-xl shadow-2xl max-w-md w-full max-h-[90vh] overflow-y-auto",children:b.jsxs("div",{className:"p-6",children:[b.jsx("h2",{className:"text-xl font-semibold text-foreground mb-4",children:"Publish Generated Image"}),b.jsxs("form",{onSubmit:T,className:"space-y-4",children:[b.jsxs("div",{children:[b.jsx(pu,{className:"text-sm font-medium text-foreground mb-3 block",children:"Publishing Option"}),b.jsxs(zH,{value:l,onValueChange:I=>c(I),className:"space-y-3",children:[b.jsxs("div",{className:"flex items-center space-x-2 p-3 border rounded-lg hover:bg-muted/50 transition-colors",children:[b.jsx(n5,{value:"overwrite",id:"overwrite"}),b.jsxs("div",{className:"flex-1",children:[b.jsx(pu,{htmlFor:"overwrite",className:"font-medium cursor-pointer",children:b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx(Se.RefreshCw,{className:"h-4 w-4"}),"Overwrite Original"]})}),b.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Replace the original image with the generated version"})]})]}),b.jsxs("div",{className:"flex items-center space-x-2 p-3 border rounded-lg hover:bg-muted/50 transition-colors",children:[b.jsx(n5,{value:"new",id:"new"}),b.jsxs("div",{className:"flex-1",children:[b.jsx(pu,{htmlFor:"new",className:"font-medium cursor-pointer",children:b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx(Se.Upload,{className:"h-4 w-4"}),"Create New Post"]})}),b.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Save as a new image in your gallery"})]})]}),s&&b.jsxs("div",{className:"flex items-center space-x-2 p-3 border rounded-lg hover:bg-muted/50 transition-colors",children:[b.jsx(n5,{value:"version",id:"version"}),b.jsxs("div",{className:"flex-1",children:[b.jsx(pu,{htmlFor:"version",className:"font-medium cursor-pointer",children:b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx(Se.GitBranch,{className:"h-4 w-4"}),"Save as Version"]})}),b.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Create a new version linked to the original image"})]})]})]})]}),(l==="new"||l==="version"||l==="add-to-post")&&b.jsxs("div",{className:"space-y-4 pt-2",children:[b.jsxs("div",{children:[b.jsxs(pu,{htmlFor:"title",className:"text-sm font-medium text-foreground",children:["Title ",b.jsx("span",{className:"text-muted-foreground",children:"(optional)"})]}),b.jsx(xb,{id:"title",value:u,onChange:I=>d(I.target.value),placeholder:"Enter a title...",className:"mt-1",disabled:i})]}),b.jsxs("div",{children:[b.jsxs(pu,{htmlFor:"description",className:"text-sm font-medium text-foreground",children:["Description ",b.jsx("span",{className:"text-muted-foreground",children:"(optional)"})]}),b.jsx(e5,{id:"description",value:f,onChange:I=>p(I.target.value),placeholder:"Add a description for your generated image...",className:"mt-1 resize-none",rows:3,disabled:i})]}),m.length>0&&b.jsxs("div",{children:[b.jsxs(pu,{className:"text-sm font-medium text-foreground mb-2 flex items-center gap-2",children:[b.jsx(Se.Bookmark,{className:"h-4 w-4"}),"Add to Collections ",b.jsx("span",{className:"text-muted-foreground",children:"(optional)"})]}),b.jsx("div",{className:"mt-2 space-y-2 max-h-32 overflow-y-auto border rounded-lg p-3",children:x?b.jsx("div",{className:"text-sm text-muted-foreground text-center py-2",children:"Loading collections..."}):m.map(I=>b.jsxs("div",{className:"flex items-center space-x-2",children:[b.jsx(cx,{id:`collection-${I.id}`,checked:w.includes(I.id),onCheckedChange:()=>A(I.id),disabled:i}),b.jsx("label",{htmlFor:`collection-${I.id}`,className:"text-sm cursor-pointer flex-1",children:I.name})]},I.id))}),w.length>0&&b.jsxs("p",{className:"text-xs text-muted-foreground mt-2",children:["Will be added to ",w.length," collection",w.length>1?"s":""]})]})]}),b.jsxs("div",{className:"flex gap-3 pt-4",children:[b.jsx(yt,{type:"button",variant:"outline",onClick:O,className:"flex-1",disabled:i,children:"Cancel"}),b.jsx(yt,{type:"submit",className:"flex-1",disabled:i,children:i?b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("div",{className:"animate-spin rounded-full h-4 w-4 border-2 border-white border-t-transparent"}),"Publishing..."]}):b.jsxs("div",{className:"flex items-center gap-2",children:[l==="overwrite"&&b.jsx(Se.RefreshCw,{className:"h-4 w-4"}),l==="new"&&b.jsx(Se.Upload,{className:"h-4 w-4"}),l==="version"&&b.jsx(Se.GitBranch,{className:"h-4 w-4"}),l==="add-to-post"&&b.jsx(Se.Bookmark,{className:"h-4 w-4"}),l==="overwrite"?"Overwrite":l==="version"?"Save Version":l==="add-to-post"?"Add to Post":"Publish New"]})})]})]})]})})}):null}const t4e=["top","right","bottom","left"],ch=Math.min,Io=Math.max,r5=Math.round,s5=Math.floor,Ql=n=>({x:n,y:n}),n4e={left:"right",right:"left",bottom:"top",top:"bottom"},r4e={start:"end",end:"start"};function zE(n,e,t){return Io(n,ch(e,t))}function vu(n,e){return typeof n=="function"?n(e):n}function bu(n){return n.split("-")[0]}function Bg(n){return n.split("-")[1]}function HE(n){return n==="x"?"y":"x"}function qE(n){return n==="y"?"height":"width"}const s4e=new Set(["top","bottom"]);function ec(n){return s4e.has(bu(n))?"y":"x"}function UE(n){return HE(ec(n))}function i4e(n,e,t){t===void 0&&(t=!1);const r=Bg(n),s=UE(n),i=qE(s);let o=s==="x"?r===(t?"end":"start")?"right":"left":r==="start"?"bottom":"top";return e.reference[i]>e.floating[i]&&(o=i5(o)),[o,i5(o)]}function o4e(n){const e=i5(n);return[WE(n),e,WE(e)]}function WE(n){return n.replace(/start|end/g,e=>r4e[e])}const HH=["left","right"],qH=["right","left"],a4e=["top","bottom"],l4e=["bottom","top"];function c4e(n,e,t){switch(n){case"top":case"bottom":return t?e?qH:HH:e?HH:qH;case"left":case"right":return e?a4e:l4e;default:return[]}}function u4e(n,e,t,r){const s=Bg(n);let i=c4e(bu(n),t==="start",r);return s&&(i=i.map(o=>o+"-"+s),e&&(i=i.concat(i.map(WE)))),i}function i5(n){return n.replace(/left|right|bottom|top/g,e=>n4e[e])}function d4e(n){return{top:0,right:0,bottom:0,left:0,...n}}function UH(n){return typeof n!="number"?d4e(n):{top:n,right:n,bottom:n,left:n}}function o5(n){const{x:e,y:t,width:r,height:s}=n;return{width:r,height:s,top:t,left:e,right:e+r,bottom:t+s,x:e,y:t}}function WH(n,e,t){let{reference:r,floating:s}=n;const i=ec(e),o=UE(e),a=qE(o),l=bu(e),c=i==="y",u=r.x+r.width/2-s.width/2,d=r.y+r.height/2-s.height/2,f=r[a]/2-s[a]/2;let p;switch(l){case"top":p={x:u,y:r.y-s.height};break;case"bottom":p={x:u,y:r.y+r.height};break;case"right":p={x:r.x+r.width,y:d};break;case"left":p={x:r.x-s.width,y:d};break;default:p={x:r.x,y:r.y}}switch(Bg(e)){case"start":p[o]-=f*(t&&c?-1:1);break;case"end":p[o]+=f*(t&&c?-1:1);break}return p}const h4e=async(n,e,t)=>{const{placement:r="bottom",strategy:s="absolute",middleware:i=[],platform:o}=t,a=i.filter(Boolean),l=await(o.isRTL==null?void 0:o.isRTL(e));let c=await o.getElementRects({reference:n,floating:e,strategy:s}),{x:u,y:d}=WH(c,r,l),f=r,p={},m=0;for(let y=0;y<a.length;y++){const{name:w,fn:k}=a[y],{x,y:S,data:_,reset:A}=await k({x:u,y:d,initialPlacement:r,placement:f,strategy:s,middlewareData:p,rects:c,platform:o,elements:{reference:n,floating:e}});u=x??u,d=S??d,p={...p,[w]:{...p[w],..._}},A&&m<=50&&(m++,typeof A=="object"&&(A.placement&&(f=A.placement),A.rects&&(c=A.rects===!0?await o.getElementRects({reference:n,floating:e,strategy:s}):A.rects),{x:u,y:d}=WH(c,f,l)),y=-1)}return{x:u,y:d,placement:f,strategy:s,middlewareData:p}};async function Qb(n,e){var t;e===void 0&&(e={});const{x:r,y:s,platform:i,rects:o,elements:a,strategy:l}=n,{boundary:c="clippingAncestors",rootBoundary:u="viewport",elementContext:d="floating",altBoundary:f=!1,padding:p=0}=vu(e,n),m=UH(p),w=a[f?d==="floating"?"reference":"floating":d],k=o5(await i.getClippingRect({element:(t=await(i.isElement==null?void 0:i.isElement(w)))==null||t?w:w.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(a.floating)),boundary:c,rootBoundary:u,strategy:l})),x=d==="floating"?{x:r,y:s,width:o.floating.width,height:o.floating.height}:o.reference,S=await(i.getOffsetParent==null?void 0:i.getOffsetParent(a.floating)),_=await(i.isElement==null?void 0:i.isElement(S))?await(i.getScale==null?void 0:i.getScale(S))||{x:1,y:1}:{x:1,y:1},A=o5(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:a,rect:x,offsetParent:S,strategy:l}):x);return{top:(k.top-A.top+m.top)/_.y,bottom:(A.bottom-k.bottom+m.bottom)/_.y,left:(k.left-A.left+m.left)/_.x,right:(A.right-k.right+m.right)/_.x}}const f4e=n=>({name:"arrow",options:n,async fn(e){const{x:t,y:r,placement:s,rects:i,platform:o,elements:a,middlewareData:l}=e,{element:c,padding:u=0}=vu(n,e)||{};if(c==null)return{};const d=UH(u),f={x:t,y:r},p=UE(s),m=qE(p),y=await o.getDimensions(c),w=p==="y",k=w?"top":"left",x=w?"bottom":"right",S=w?"clientHeight":"clientWidth",_=i.reference[m]+i.reference[p]-f[p]-i.floating[m],A=f[p]-i.reference[p],T=await(o.getOffsetParent==null?void 0:o.getOffsetParent(c));let O=T?T[S]:0;(!O||!await(o.isElement==null?void 0:o.isElement(T)))&&(O=a.floating[S]||i.floating[m]);const I=_/2-A/2,R=O/2-y[m]/2-1,D=ch(d[k],R),W=ch(d[x],R),H=D,re=O-y[m]-W,ae=O/2-y[m]/2+I,de=zE(H,ae,re),le=!l.arrow&&Bg(s)!=null&&ae!==de&&i.reference[m]/2-(ae<H?D:W)-y[m]/2<0,X=le?ae<H?ae-H:ae-re:0;return{[p]:f[p]+X,data:{[p]:de,centerOffset:ae-de-X,...le&&{alignmentOffset:X}},reset:le}}}),p4e=function(n){return n===void 0&&(n={}),{name:"flip",options:n,async fn(e){var t,r;const{placement:s,middlewareData:i,rects:o,initialPlacement:a,platform:l,elements:c}=e,{mainAxis:u=!0,crossAxis:d=!0,fallbackPlacements:f,fallbackStrategy:p="bestFit",fallbackAxisSideDirection:m="none",flipAlignment:y=!0,...w}=vu(n,e);if((t=i.arrow)!=null&&t.alignmentOffset)return{};const k=bu(s),x=ec(a),S=bu(a)===a,_=await(l.isRTL==null?void 0:l.isRTL(c.floating)),A=f||(S||!y?[i5(a)]:o4e(a)),T=m!=="none";!f&&T&&A.push(...u4e(a,y,m,_));const O=[a,...A],I=await Qb(e,w),R=[];let D=((r=i.flip)==null?void 0:r.overflows)||[];if(u&&R.push(I[k]),d){const ae=i4e(s,o,_);R.push(I[ae[0]],I[ae[1]])}if(D=[...D,{placement:s,overflows:R}],!R.every(ae=>ae<=0)){var W,H;const ae=(((W=i.flip)==null?void 0:W.index)||0)+1,de=O[ae];if(de&&(!(d==="alignment"?x!==ec(de):!1)||D.every(se=>ec(se.placement)===x?se.overflows[0]>0:!0)))return{data:{index:ae,overflows:D},reset:{placement:de}};let le=(H=D.filter(X=>X.overflows[0]<=0).sort((X,se)=>X.overflows[1]-se.overflows[1])[0])==null?void 0:H.placement;if(!le)switch(p){case"bestFit":{var re;const X=(re=D.filter(se=>{if(T){const J=ec(se.placement);return J===x||J==="y"}return!0}).map(se=>[se.placement,se.overflows.filter(J=>J>0).reduce((J,$)=>J+$,0)]).sort((se,J)=>se[1]-J[1])[0])==null?void 0:re[0];X&&(le=X);break}case"initialPlacement":le=a;break}if(s!==le)return{reset:{placement:le}}}return{}}}};function GH(n,e){return{top:n.top-e.height,right:n.right-e.width,bottom:n.bottom-e.height,left:n.left-e.width}}function KH(n){return t4e.some(e=>n[e]>=0)}const m4e=function(n){return n===void 0&&(n={}),{name:"hide",options:n,async fn(e){const{rects:t}=e,{strategy:r="referenceHidden",...s}=vu(n,e);switch(r){case"referenceHidden":{const i=await Qb(e,{...s,elementContext:"reference"}),o=GH(i,t.reference);return{data:{referenceHiddenOffsets:o,referenceHidden:KH(o)}}}case"escaped":{const i=await Qb(e,{...s,altBoundary:!0}),o=GH(i,t.floating);return{data:{escapedOffsets:o,escaped:KH(o)}}}default:return{}}}}},YH=new Set(["left","top"]);async function g4e(n,e){const{placement:t,platform:r,elements:s}=n,i=await(r.isRTL==null?void 0:r.isRTL(s.floating)),o=bu(t),a=Bg(t),l=ec(t)==="y",c=YH.has(o)?-1:1,u=i&&l?-1:1,d=vu(e,n);let{mainAxis:f,crossAxis:p,alignmentAxis:m}=typeof d=="number"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return a&&typeof m=="number"&&(p=a==="end"?m*-1:m),l?{x:p*u,y:f*c}:{x:f*c,y:p*u}}const y4e=function(n){return n===void 0&&(n=0),{name:"offset",options:n,async fn(e){var t,r;const{x:s,y:i,placement:o,middlewareData:a}=e,l=await g4e(e,n);return o===((t=a.offset)==null?void 0:t.placement)&&(r=a.arrow)!=null&&r.alignmentOffset?{}:{x:s+l.x,y:i+l.y,data:{...l,placement:o}}}}},v4e=function(n){return n===void 0&&(n={}),{name:"shift",options:n,async fn(e){const{x:t,y:r,placement:s}=e,{mainAxis:i=!0,crossAxis:o=!1,limiter:a={fn:w=>{let{x:k,y:x}=w;return{x:k,y:x}}},...l}=vu(n,e),c={x:t,y:r},u=await Qb(e,l),d=ec(bu(s)),f=HE(d);let p=c[f],m=c[d];if(i){const w=f==="y"?"top":"left",k=f==="y"?"bottom":"right",x=p+u[w],S=p-u[k];p=zE(x,p,S)}if(o){const w=d==="y"?"top":"left",k=d==="y"?"bottom":"right",x=m+u[w],S=m-u[k];m=zE(x,m,S)}const y=a.fn({...e,[f]:p,[d]:m});return{...y,data:{x:y.x-t,y:y.y-r,enabled:{[f]:i,[d]:o}}}}}},b4e=function(n){return n===void 0&&(n={}),{options:n,fn(e){const{x:t,y:r,placement:s,rects:i,middlewareData:o}=e,{offset:a=0,mainAxis:l=!0,crossAxis:c=!0}=vu(n,e),u={x:t,y:r},d=ec(s),f=HE(d);let p=u[f],m=u[d];const y=vu(a,e),w=typeof y=="number"?{mainAxis:y,crossAxis:0}:{mainAxis:0,crossAxis:0,...y};if(l){const S=f==="y"?"height":"width",_=i.reference[f]-i.floating[S]+w.mainAxis,A=i.reference[f]+i.reference[S]-w.mainAxis;p<_?p=_:p>A&&(p=A)}if(c){var k,x;const S=f==="y"?"width":"height",_=YH.has(bu(s)),A=i.reference[d]-i.floating[S]+(_&&((k=o.offset)==null?void 0:k[d])||0)+(_?0:w.crossAxis),T=i.reference[d]+i.reference[S]+(_?0:((x=o.offset)==null?void 0:x[d])||0)-(_?w.crossAxis:0);m<A?m=A:m>T&&(m=T)}return{[f]:p,[d]:m}}}},w4e=function(n){return n===void 0&&(n={}),{name:"size",options:n,async fn(e){var t,r;const{placement:s,rects:i,platform:o,elements:a}=e,{apply:l=()=>{},...c}=vu(n,e),u=await Qb(e,c),d=bu(s),f=Bg(s),p=ec(s)==="y",{width:m,height:y}=i.floating;let w,k;d==="top"||d==="bottom"?(w=d,k=f===(await(o.isRTL==null?void 0:o.isRTL(a.floating))?"start":"end")?"left":"right"):(k=d,w=f==="end"?"top":"bottom");const x=y-u.top-u.bottom,S=m-u.left-u.right,_=ch(y-u[w],x),A=ch(m-u[k],S),T=!e.middlewareData.shift;let O=_,I=A;if((t=e.middlewareData.shift)!=null&&t.enabled.x&&(I=S),(r=e.middlewareData.shift)!=null&&r.enabled.y&&(O=x),T&&!f){const D=Io(u.left,0),W=Io(u.right,0),H=Io(u.top,0),re=Io(u.bottom,0);p?I=m-2*(D!==0||W!==0?D+W:Io(u.left,u.right)):O=y-2*(H!==0||re!==0?H+re:Io(u.top,u.bottom))}await l({...e,availableWidth:I,availableHeight:O});const R=await o.getDimensions(a.floating);return m!==R.width||y!==R.height?{reset:{rects:!0}}:{}}}};function a5(){return typeof window<"u"}function Vg(n){return ZH(n)?(n.nodeName||"").toLowerCase():"#document"}function Do(n){var e;return(n==null||(e=n.ownerDocument)==null?void 0:e.defaultView)||window}function tc(n){var e;return(e=(ZH(n)?n.ownerDocument:n.document)||window.document)==null?void 0:e.documentElement}function ZH(n){return a5()?n instanceof Node||n instanceof Do(n).Node:!1}function el(n){return a5()?n instanceof Element||n instanceof Do(n).Element:!1}function nc(n){return a5()?n instanceof HTMLElement||n instanceof Do(n).HTMLElement:!1}function XH(n){return!a5()||typeof ShadowRoot>"u"?!1:n instanceof ShadowRoot||n instanceof Do(n).ShadowRoot}const x4e=new Set(["inline","contents"]);function e2(n){const{overflow:e,overflowX:t,overflowY:r,display:s}=tl(n);return/auto|scroll|overlay|hidden|clip/.test(e+r+t)&&!x4e.has(s)}const k4e=new Set(["table","td","th"]);function C4e(n){return k4e.has(Vg(n))}const S4e=[":popover-open",":modal"];function l5(n){return S4e.some(e=>{try{return n.matches(e)}catch{return!1}})}const E4e=["transform","translate","scale","rotate","perspective"],_4e=["transform","translate","scale","rotate","perspective","filter"],T4e=["paint","layout","strict","content"];function GE(n){const e=KE(),t=el(n)?tl(n):n;return E4e.some(r=>t[r]?t[r]!=="none":!1)||(t.containerType?t.containerType!=="normal":!1)||!e&&(t.backdropFilter?t.backdropFilter!=="none":!1)||!e&&(t.filter?t.filter!=="none":!1)||_4e.some(r=>(t.willChange||"").includes(r))||T4e.some(r=>(t.contain||"").includes(r))}function A4e(n){let e=uh(n);for(;nc(e)&&!zg(e);){if(GE(e))return e;if(l5(e))return null;e=uh(e)}return null}function KE(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const N4e=new Set(["html","body","#document"]);function zg(n){return N4e.has(Vg(n))}function tl(n){return Do(n).getComputedStyle(n)}function c5(n){return el(n)?{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}:{scrollLeft:n.scrollX,scrollTop:n.scrollY}}function uh(n){if(Vg(n)==="html")return n;const e=n.assignedSlot||n.parentNode||XH(n)&&n.host||tc(n);return XH(e)?e.host:e}function JH(n){const e=uh(n);return zg(e)?n.ownerDocument?n.ownerDocument.body:n.body:nc(e)&&e2(e)?e:JH(e)}function t2(n,e,t){var r;e===void 0&&(e=[]),t===void 0&&(t=!0);const s=JH(n),i=s===((r=n.ownerDocument)==null?void 0:r.body),o=Do(s);if(i){const a=YE(o);return e.concat(o,o.visualViewport||[],e2(s)?s:[],a&&t?t2(a):[])}return e.concat(s,t2(s,[],t))}function YE(n){return n.parent&&Object.getPrototypeOf(n.parent)?n.frameElement:null}function QH(n){const e=tl(n);let t=parseFloat(e.width)||0,r=parseFloat(e.height)||0;const s=nc(n),i=s?n.offsetWidth:t,o=s?n.offsetHeight:r,a=r5(t)!==i||r5(r)!==o;return a&&(t=i,r=o),{width:t,height:r,$:a}}function ZE(n){return el(n)?n:n.contextElement}function Hg(n){const e=ZE(n);if(!nc(e))return Ql(1);const t=e.getBoundingClientRect(),{width:r,height:s,$:i}=QH(e);let o=(i?r5(t.width):t.width)/r,a=(i?r5(t.height):t.height)/s;return(!o||!Number.isFinite(o))&&(o=1),(!a||!Number.isFinite(a))&&(a=1),{x:o,y:a}}const M4e=Ql(0);function eq(n){const e=Do(n);return!KE()||!e.visualViewport?M4e:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function O4e(n,e,t){return e===void 0&&(e=!1),!t||e&&t!==Do(n)?!1:e}function Lp(n,e,t,r){e===void 0&&(e=!1),t===void 0&&(t=!1);const s=n.getBoundingClientRect(),i=ZE(n);let o=Ql(1);e&&(r?el(r)&&(o=Hg(r)):o=Hg(n));const a=O4e(i,t,r)?eq(i):Ql(0);let l=(s.left+a.x)/o.x,c=(s.top+a.y)/o.y,u=s.width/o.x,d=s.height/o.y;if(i){const f=Do(i),p=r&&el(r)?Do(r):r;let m=f,y=YE(m);for(;y&&r&&p!==m;){const w=Hg(y),k=y.getBoundingClientRect(),x=tl(y),S=k.left+(y.clientLeft+parseFloat(x.paddingLeft))*w.x,_=k.top+(y.clientTop+parseFloat(x.paddingTop))*w.y;l*=w.x,c*=w.y,u*=w.x,d*=w.y,l+=S,c+=_,m=Do(y),y=YE(m)}}return o5({width:u,height:d,x:l,y:c})}function u5(n,e){const t=c5(n).scrollLeft;return e?e.left+t:Lp(tc(n)).left+t}function tq(n,e){const t=n.getBoundingClientRect(),r=t.left+e.scrollLeft-u5(n,t),s=t.top+e.scrollTop;return{x:r,y:s}}function P4e(n){let{elements:e,rect:t,offsetParent:r,strategy:s}=n;const i=s==="fixed",o=tc(r),a=e?l5(e.floating):!1;if(r===o||a&&i)return t;let l={scrollLeft:0,scrollTop:0},c=Ql(1);const u=Ql(0),d=nc(r);if((d||!d&&!i)&&((Vg(r)!=="body"||e2(o))&&(l=c5(r)),nc(r))){const p=Lp(r);c=Hg(r),u.x=p.x+r.clientLeft,u.y=p.y+r.clientTop}const f=o&&!d&&!i?tq(o,l):Ql(0);return{width:t.width*c.x,height:t.height*c.y,x:t.x*c.x-l.scrollLeft*c.x+u.x+f.x,y:t.y*c.y-l.scrollTop*c.y+u.y+f.y}}function I4e(n){return Array.from(n.getClientRects())}function D4e(n){const e=tc(n),t=c5(n),r=n.ownerDocument.body,s=Io(e.scrollWidth,e.clientWidth,r.scrollWidth,r.clientWidth),i=Io(e.scrollHeight,e.clientHeight,r.scrollHeight,r.clientHeight);let o=-t.scrollLeft+u5(n);const a=-t.scrollTop;return tl(r).direction==="rtl"&&(o+=Io(e.clientWidth,r.clientWidth)-s),{width:s,height:i,x:o,y:a}}const nq=25;function R4e(n,e){const t=Do(n),r=tc(n),s=t.visualViewport;let i=r.clientWidth,o=r.clientHeight,a=0,l=0;if(s){i=s.width,o=s.height;const u=KE();(!u||u&&e==="fixed")&&(a=s.offsetLeft,l=s.offsetTop)}const c=u5(r);if(c<=0){const u=r.ownerDocument,d=u.body,f=getComputedStyle(d),p=u.compatMode==="CSS1Compat"&&parseFloat(f.marginLeft)+parseFloat(f.marginRight)||0,m=Math.abs(r.clientWidth-d.clientWidth-p);m<=nq&&(i-=m)}else c<=nq&&(i+=c);return{width:i,height:o,x:a,y:l}}const $4e=new Set(["absolute","fixed"]);function L4e(n,e){const t=Lp(n,!0,e==="fixed"),r=t.top+n.clientTop,s=t.left+n.clientLeft,i=nc(n)?Hg(n):Ql(1),o=n.clientWidth*i.x,a=n.clientHeight*i.y,l=s*i.x,c=r*i.y;return{width:o,height:a,x:l,y:c}}function rq(n,e,t){let r;if(e==="viewport")r=R4e(n,t);else if(e==="document")r=D4e(tc(n));else if(el(e))r=L4e(e,t);else{const s=eq(n);r={x:e.x-s.x,y:e.y-s.y,width:e.width,height:e.height}}return o5(r)}function sq(n,e){const t=uh(n);return t===e||!el(t)||zg(t)?!1:tl(t).position==="fixed"||sq(t,e)}function F4e(n,e){const t=e.get(n);if(t)return t;let r=t2(n,[],!1).filter(a=>el(a)&&Vg(a)!=="body"),s=null;const i=tl(n).position==="fixed";let o=i?uh(n):n;for(;el(o)&&!zg(o);){const a=tl(o),l=GE(o);!l&&a.position==="fixed"&&(s=null),(i?!l&&!s:!l&&a.position==="static"&&!!s&&$4e.has(s.position)||e2(o)&&!l&&sq(n,o))?r=r.filter(u=>u!==o):s=a,o=uh(o)}return e.set(n,r),r}function j4e(n){let{element:e,boundary:t,rootBoundary:r,strategy:s}=n;const o=[...t==="clippingAncestors"?l5(e)?[]:F4e(e,this._c):[].concat(t),r],a=o[0],l=o.reduce((c,u)=>{const d=rq(e,u,s);return c.top=Io(d.top,c.top),c.right=ch(d.right,c.right),c.bottom=ch(d.bottom,c.bottom),c.left=Io(d.left,c.left),c},rq(e,a,s));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}}function B4e(n){const{width:e,height:t}=QH(n);return{width:e,height:t}}function V4e(n,e,t){const r=nc(e),s=tc(e),i=t==="fixed",o=Lp(n,!0,i,e);let a={scrollLeft:0,scrollTop:0};const l=Ql(0);function c(){l.x=u5(s)}if(r||!r&&!i)if((Vg(e)!=="body"||e2(s))&&(a=c5(e)),r){const p=Lp(e,!0,i,e);l.x=p.x+e.clientLeft,l.y=p.y+e.clientTop}else s&&c();i&&!r&&s&&c();const u=s&&!r&&!i?tq(s,a):Ql(0),d=o.left+a.scrollLeft-l.x-u.x,f=o.top+a.scrollTop-l.y-u.y;return{x:d,y:f,width:o.width,height:o.height}}function XE(n){return tl(n).position==="static"}function iq(n,e){if(!nc(n)||tl(n).position==="fixed")return null;if(e)return e(n);let t=n.offsetParent;return tc(n)===t&&(t=t.ownerDocument.body),t}function oq(n,e){const t=Do(n);if(l5(n))return t;if(!nc(n)){let s=uh(n);for(;s&&!zg(s);){if(el(s)&&!XE(s))return s;s=uh(s)}return t}let r=iq(n,e);for(;r&&C4e(r)&&XE(r);)r=iq(r,e);return r&&zg(r)&&XE(r)&&!GE(r)?t:r||A4e(n)||t}const z4e=async function(n){const e=this.getOffsetParent||oq,t=this.getDimensions,r=await t(n.floating);return{reference:V4e(n.reference,await e(n.floating),n.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function H4e(n){return tl(n).direction==="rtl"}const q4e={convertOffsetParentRelativeRectToViewportRelativeRect:P4e,getDocumentElement:tc,getClippingRect:j4e,getOffsetParent:oq,getElementRects:z4e,getClientRects:I4e,getDimensions:B4e,getScale:Hg,isElement:el,isRTL:H4e};function aq(n,e){return n.x===e.x&&n.y===e.y&&n.width===e.width&&n.height===e.height}function U4e(n,e){let t=null,r;const s=tc(n);function i(){var a;clearTimeout(r),(a=t)==null||a.disconnect(),t=null}function o(a,l){a===void 0&&(a=!1),l===void 0&&(l=1),i();const c=n.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=c;if(a||e(),!f||!p)return;const m=s5(d),y=s5(s.clientWidth-(u+f)),w=s5(s.clientHeight-(d+p)),k=s5(u),S={rootMargin:-m+"px "+-y+"px "+-w+"px "+-k+"px",threshold:Io(0,ch(1,l))||1};let _=!0;function A(T){const O=T[0].intersectionRatio;if(O!==l){if(!_)return o();O?o(!1,O):r=setTimeout(()=>{o(!1,1e-7)},1e3)}O===1&&!aq(c,n.getBoundingClientRect())&&o(),_=!1}try{t=new IntersectionObserver(A,{...S,root:s.ownerDocument})}catch{t=new IntersectionObserver(A,S)}t.observe(n)}return o(!0),i}function d5(n,e,t,r){r===void 0&&(r={});const{ancestorScroll:s=!0,ancestorResize:i=!0,elementResize:o=typeof ResizeObserver=="function",layoutShift:a=typeof IntersectionObserver=="function",animationFrame:l=!1}=r,c=ZE(n),u=s||i?[...c?t2(c):[],...t2(e)]:[];u.forEach(k=>{s&&k.addEventListener("scroll",t,{passive:!0}),i&&k.addEventListener("resize",t)});const d=c&&a?U4e(c,t):null;let f=-1,p=null;o&&(p=new ResizeObserver(k=>{let[x]=k;x&&x.target===c&&p&&(p.unobserve(e),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var S;(S=p)==null||S.observe(e)})),t()}),c&&!l&&p.observe(c),p.observe(e));let m,y=l?Lp(n):null;l&&w();function w(){const k=Lp(n);y&&!aq(y,k)&&t(),y=k,m=requestAnimationFrame(w)}return t(),()=>{var k;u.forEach(x=>{s&&x.removeEventListener("scroll",t),i&&x.removeEventListener("resize",t)}),d==null||d(),(k=p)==null||k.disconnect(),p=null,l&&cancelAnimationFrame(m)}}const h5=y4e,JE=v4e,n2=p4e,W4e=w4e,G4e=m4e,lq=f4e,K4e=b4e,r2=(n,e,t)=>{const r=new Map,s={platform:q4e,...t},i={...s.platform,_c:r};return h4e(n,e,{...s,platform:i})};var Y4e=typeof document<"u",Z4e=function(){},f5=Y4e?U.useLayoutEffect:Z4e;function p5(n,e){if(n===e)return!0;if(typeof n!=typeof e)return!1;if(typeof n=="function"&&n.toString()===e.toString())return!0;let t,r,s;if(n&&e&&typeof n=="object"){if(Array.isArray(n)){if(t=n.length,t!==e.length)return!1;for(r=t;r--!==0;)if(!p5(n[r],e[r]))return!1;return!0}if(s=Object.keys(n),t=s.length,t!==Object.keys(e).length)return!1;for(r=t;r--!==0;)if(!{}.hasOwnProperty.call(e,s[r]))return!1;for(r=t;r--!==0;){const i=s[r];if(!(i==="_owner"&&n.$$typeof)&&!p5(n[i],e[i]))return!1}return!0}return n!==n&&e!==e}function cq(n){return typeof window>"u"?1:(n.ownerDocument.defaultView||window).devicePixelRatio||1}function uq(n,e){const t=cq(n);return Math.round(e*t)/t}function QE(n){const e=g.useRef(n);return f5(()=>{e.current=n}),e}function X4e(n){n===void 0&&(n={});const{placement:e="bottom",strategy:t="absolute",middleware:r=[],platform:s,elements:{reference:i,floating:o}={},transform:a=!0,whileElementsMounted:l,open:c}=n,[u,d]=g.useState({x:0,y:0,strategy:t,placement:e,middlewareData:{},isPositioned:!1}),[f,p]=g.useState(r);p5(f,r)||p(r);const[m,y]=g.useState(null),[w,k]=g.useState(null),x=g.useCallback(se=>{se!==T.current&&(T.current=se,y(se))},[]),S=g.useCallback(se=>{se!==O.current&&(O.current=se,k(se))},[]),_=i||m,A=o||w,T=g.useRef(null),O=g.useRef(null),I=g.useRef(u),R=l!=null,D=QE(l),W=QE(s),H=QE(c),re=g.useCallback(()=>{if(!T.current||!O.current)return;const se={placement:e,strategy:t,middleware:f};W.current&&(se.platform=W.current),r2(T.current,O.current,se).then(J=>{const $={...J,isPositioned:H.current!==!1};ae.current&&!p5(I.current,$)&&(I.current=$,I$.flushSync(()=>{d($)}))})},[f,e,t,W,H]);f5(()=>{c===!1&&I.current.isPositioned&&(I.current.isPositioned=!1,d(se=>({...se,isPositioned:!1})))},[c]);const ae=g.useRef(!1);f5(()=>(ae.current=!0,()=>{ae.current=!1}),[]),f5(()=>{if(_&&(T.current=_),A&&(O.current=A),_&&A){if(D.current)return D.current(_,A,re);re()}},[_,A,re,D,R]);const de=g.useMemo(()=>({reference:T,floating:O,setReference:x,setFloating:S}),[x,S]),le=g.useMemo(()=>({reference:_,floating:A}),[_,A]),X=g.useMemo(()=>{const se={position:t,left:0,top:0};if(!le.floating)return se;const J=uq(le.floating,u.x),$=uq(le.floating,u.y);return a?{...se,transform:"translate("+J+"px, "+$+"px)",...cq(le.floating)>=1.5&&{willChange:"transform"}}:{position:t,left:J,top:$}},[t,a,le.floating,u.x,u.y]);return g.useMemo(()=>({...u,update:re,refs:de,elements:le,floatingStyles:X}),[u,re,de,le,X])}const J4e=n=>{function e(t){return{}.hasOwnProperty.call(t,"current")}return{name:"arrow",options:n,fn(t){const{element:r,padding:s}=typeof n=="function"?n(t):n;return r&&e(r)?r.current!=null?lq({element:r.current,padding:s}).fn(t):{}:r?lq({element:r,padding:s}).fn(t):{}}}},Q4e=(n,e)=>({...h5(n),options:[n,e]}),ewe=(n,e)=>({...JE(n),options:[n,e]}),twe=(n,e)=>({...K4e(n),options:[n,e]}),nwe=(n,e)=>({...n2(n),options:[n,e]}),rwe=(n,e)=>({...W4e(n),options:[n,e]}),swe=(n,e)=>({...G4e(n),options:[n,e]}),iwe=(n,e)=>({...J4e(n),options:[n,e]});var owe="Arrow",dq=g.forwardRef((n,e)=>{const{children:t,width:r=10,height:s=5,...i}=n;return b.jsx(Un.svg,{...i,ref:e,width:r,height:s,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:n.asChild?t:b.jsx("polygon",{points:"0,0 30,0 15,10"})})});dq.displayName=owe;var awe=dq,e_="Popper",[hq,fq]=fa(e_),[lwe,pq]=hq(e_),mq=n=>{const{__scopePopper:e,children:t}=n,[r,s]=g.useState(null);return b.jsx(lwe,{scope:e,anchor:r,onAnchorChange:s,children:t})};mq.displayName=e_;var gq="PopperAnchor",yq=g.forwardRef((n,e)=>{const{__scopePopper:t,virtualRef:r,...s}=n,i=pq(gq,t),o=g.useRef(null),a=Tr(e,o),l=g.useRef(null);return g.useEffect(()=>{const c=l.current;l.current=(r==null?void 0:r.current)||o.current,c!==l.current&&i.onAnchorChange(l.current)}),r?null:b.jsx(Un.div,{...s,ref:a})});yq.displayName=gq;var t_="PopperContent",[cwe,uwe]=hq(t_),vq=g.forwardRef((n,e)=>{var it,We,ot,ge,Ie,pt;const{__scopePopper:t,side:r="bottom",sideOffset:s=0,align:i="center",alignOffset:o=0,arrowPadding:a=0,avoidCollisions:l=!0,collisionBoundary:c=[],collisionPadding:u=0,sticky:d="partial",hideWhenDetached:f=!1,updatePositionStrategy:p="optimized",onPlaced:m,...y}=n,w=pq(t_,t),[k,x]=g.useState(null),S=Tr(e,j=>x(j)),[_,A]=g.useState(null),T=ox(_),O=(T==null?void 0:T.width)??0,I=(T==null?void 0:T.height)??0,R=r+(i!=="center"?"-"+i:""),D=typeof u=="number"?u:{top:0,right:0,bottom:0,left:0,...u},W=Array.isArray(c)?c:[c],H=W.length>0,re={padding:D,boundary:W.filter(hwe),altBoundary:H},{refs:ae,floatingStyles:de,placement:le,isPositioned:X,middlewareData:se}=X4e({strategy:"fixed",placement:R,whileElementsMounted:(...j)=>d5(...j,{animationFrame:p==="always"}),elements:{reference:w.anchor},middleware:[Q4e({mainAxis:s+I,alignmentAxis:o}),l&&ewe({mainAxis:!0,crossAxis:!1,limiter:d==="partial"?twe():void 0,...re}),l&&nwe({...re}),rwe({...re,apply:({elements:j,rects:Y,availableWidth:ce,availableHeight:be})=>{const{width:xe,height:ne}=Y.reference,ue=j.floating.style;ue.setProperty("--radix-popper-available-width",`${ce}px`),ue.setProperty("--radix-popper-available-height",`${be}px`),ue.setProperty("--radix-popper-anchor-width",`${xe}px`),ue.setProperty("--radix-popper-anchor-height",`${ne}px`)}}),_&&iwe({element:_,padding:a}),fwe({arrowWidth:O,arrowHeight:I}),f&&swe({strategy:"referenceHidden",...re})]}),[J,$]=xq(le),ve=Kl(m);Ga(()=>{X&&(ve==null||ve())},[X,ve]);const Pe=(it=se.arrow)==null?void 0:it.x,q=(We=se.arrow)==null?void 0:We.y,Xe=((ot=se.arrow)==null?void 0:ot.centerOffset)!==0,[qe,Ye]=g.useState();return Ga(()=>{k&&Ye(window.getComputedStyle(k).zIndex)},[k]),b.jsx("div",{ref:ae.setFloating,"data-radix-popper-content-wrapper":"",style:{...de,transform:X?de.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:qe,"--radix-popper-transform-origin":[(ge=se.transformOrigin)==null?void 0:ge.x,(Ie=se.transformOrigin)==null?void 0:Ie.y].join(" "),...((pt=se.hide)==null?void 0:pt.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:n.dir,children:b.jsx(cwe,{scope:t,placedSide:J,onArrowChange:A,arrowX:Pe,arrowY:q,shouldHideArrow:Xe,children:b.jsx(Un.div,{"data-side":J,"data-align":$,...y,ref:S,style:{...y.style,animation:X?void 0:"none"}})})})});vq.displayName=t_;var bq="PopperArrow",dwe={top:"bottom",right:"left",bottom:"top",left:"right"},wq=g.forwardRef(function(e,t){const{__scopePopper:r,...s}=e,i=uwe(bq,r),o=dwe[i.placedSide];return b.jsx("span",{ref:i.onArrowChange,style:{position:"absolute",left:i.arrowX,top:i.arrowY,[o]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[i.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[i.placedSide],visibility:i.shouldHideArrow?"hidden":void 0},children:b.jsx(awe,{...s,ref:t,style:{...s.style,display:"block"}})})});wq.displayName=bq;function hwe(n){return n!==null}var fwe=n=>({name:"transformOrigin",options:n,fn(e){var w,k,x;const{placement:t,rects:r,middlewareData:s}=e,o=((w=s.arrow)==null?void 0:w.centerOffset)!==0,a=o?0:n.arrowWidth,l=o?0:n.arrowHeight,[c,u]=xq(t),d={start:"0%",center:"50%",end:"100%"}[u],f=(((k=s.arrow)==null?void 0:k.x)??0)+a/2,p=(((x=s.arrow)==null?void 0:x.y)??0)+l/2;let m="",y="";return c==="bottom"?(m=o?d:`${f}px`,y=`${-l}px`):c==="top"?(m=o?d:`${f}px`,y=`${r.floating.height+l}px`):c==="right"?(m=`${-l}px`,y=o?d:`${p}px`):c==="left"&&(m=`${r.floating.width+l}px`,y=o?d:`${p}px`),{data:{x:m,y}}}});function xq(n){const[e,t="center"]=n.split("-");return[e,t]}var pwe=mq,mwe=yq,gwe=vq,ywe=wq;function vwe(n){const e=bwe(n),t=g.forwardRef((r,s)=>{const{children:i,...o}=r,a=g.Children.toArray(i),l=a.find(xwe);if(l){const c=l.props.children,u=a.map(d=>d===l?g.Children.count(c)>1?g.Children.only(null):g.isValidElement(c)?c.props.children:null:d);return b.jsx(e,{...o,ref:s,children:g.isValidElement(c)?g.cloneElement(c,void 0,u):null})}return b.jsx(e,{...o,ref:s,children:i})});return t.displayName=`${n}.Slot`,t}function bwe(n){const e=g.forwardRef((t,r)=>{const{children:s,...i}=t;if(g.isValidElement(s)){const o=Cwe(s),a=kwe(i,s.props);return s.type!==g.Fragment&&(a.ref=r?Wd(r,o):o),g.cloneElement(s,a)}return g.Children.count(s)>1?g.Children.only(null):null});return e.displayName=`${n}.SlotClone`,e}var wwe=Symbol("radix.slottable");function xwe(n){return g.isValidElement(n)&&typeof n.type=="function"&&"__radixId"in n.type&&n.type.__radixId===wwe}function kwe(n,e){const t={...e};for(const r in e){const s=n[r],i=e[r];/^on[A-Z]/.test(r)?s&&i?t[r]=(...a)=>{const l=i(...a);return s(...a),l}:s&&(t[r]=s):r==="style"?t[r]={...s,...i}:r==="className"&&(t[r]=[s,i].filter(Boolean).join(" "))}return{...n,...t}}function Cwe(n){var r,s;let e=(r=Object.getOwnPropertyDescriptor(n.props,"ref"))==null?void 0:r.get,t=e&&"isReactWarning"in e&&e.isReactWarning;return t?n.ref:(e=(s=Object.getOwnPropertyDescriptor(n,"ref"))==null?void 0:s.get,t=e&&"isReactWarning"in e&&e.isReactWarning,t?n.props.ref:n.props.ref||n.ref)}var n_=["Enter"," "],Swe=["ArrowDown","PageUp","Home"],kq=["ArrowUp","PageDown","End"],Ewe=[...Swe,...kq],_we={ltr:[...n_,"ArrowRight"],rtl:[...n_,"ArrowLeft"]},Twe={ltr:["ArrowLeft"],rtl:["ArrowRight"]},s2="Menu",[i2,Awe,Nwe]=mj(s2),[Fp,Cq]=fa(s2,[Nwe,fq,Eg]),m5=fq(),Sq=Eg(),[Mwe,jp]=Fp(s2),[Owe,o2]=Fp(s2),Eq=n=>{const{__scopeMenu:e,open:t=!1,children:r,dir:s,onOpenChange:i,modal:o=!0}=n,a=m5(e),[l,c]=g.useState(null),u=g.useRef(!1),d=Kl(i),f=sx(s);return g.useEffect(()=>{const p=()=>{u.current=!0,document.addEventListener("pointerdown",m,{capture:!0,once:!0}),document.addEventListener("pointermove",m,{capture:!0,once:!0})},m=()=>u.current=!1;return document.addEventListener("keydown",p,{capture:!0}),()=>{document.removeEventListener("keydown",p,{capture:!0}),document.removeEventListener("pointerdown",m,{capture:!0}),document.removeEventListener("pointermove",m,{capture:!0})}},[]),b.jsx(pwe,{...a,children:b.jsx(Mwe,{scope:e,open:t,onOpenChange:d,content:l,onContentChange:c,children:b.jsx(Owe,{scope:e,onClose:g.useCallback(()=>d(!1),[d]),isUsingKeyboardRef:u,dir:f,modal:o,children:r})})})};Eq.displayName=s2;var Pwe="MenuAnchor",r_=g.forwardRef((n,e)=>{const{__scopeMenu:t,...r}=n,s=m5(t);return b.jsx(mwe,{...s,...r,ref:e})});r_.displayName=Pwe;var s_="MenuPortal",[Iwe,_q]=Fp(s_,{forceMount:void 0}),Tq=n=>{const{__scopeMenu:e,forceMount:t,children:r,container:s}=n,i=jp(s_,e);return b.jsx(Iwe,{scope:e,forceMount:t,children:b.jsx(Ka,{present:t||i.open,children:b.jsx(JC,{asChild:!0,container:s,children:r})})})};Tq.displayName=s_;var ga="MenuContent",[Dwe,i_]=Fp(ga),Aq=g.forwardRef((n,e)=>{const t=_q(ga,n.__scopeMenu),{forceMount:r=t.forceMount,...s}=n,i=jp(ga,n.__scopeMenu),o=o2(ga,n.__scopeMenu);return b.jsx(i2.Provider,{scope:n.__scopeMenu,children:b.jsx(Ka,{present:r||i.open,children:b.jsx(i2.Slot,{scope:n.__scopeMenu,children:o.modal?b.jsx(Rwe,{...s,ref:e}):b.jsx($we,{...s,ref:e})})})})}),Rwe=g.forwardRef((n,e)=>{const t=jp(ga,n.__scopeMenu),r=g.useRef(null),s=Tr(e,r);return g.useEffect(()=>{const i=r.current;if(i)return vF(i)},[]),b.jsx(o_,{...n,ref:s,trapFocus:t.open,disableOutsidePointerEvents:t.open,disableOutsideScroll:!0,onFocusOutside:Dt(n.onFocusOutside,i=>i.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>t.onOpenChange(!1)})}),$we=g.forwardRef((n,e)=>{const t=jp(ga,n.__scopeMenu);return b.jsx(o_,{...n,ref:e,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>t.onOpenChange(!1)})}),Lwe=vwe("MenuContent.ScrollLock"),o_=g.forwardRef((n,e)=>{const{__scopeMenu:t,loop:r=!1,trapFocus:s,onOpenAutoFocus:i,onCloseAutoFocus:o,disableOutsidePointerEvents:a,onEntryFocus:l,onEscapeKeyDown:c,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:f,onDismiss:p,disableOutsideScroll:m,...y}=n,w=jp(ga,t),k=o2(ga,t),x=m5(t),S=Sq(t),_=Awe(t),[A,T]=g.useState(null),O=g.useRef(null),I=Tr(e,O,w.onContentChange),R=g.useRef(0),D=g.useRef(""),W=g.useRef(0),H=g.useRef(null),re=g.useRef("right"),ae=g.useRef(0),de=m?sS:g.Fragment,le=m?{as:Lwe,allowPinchZoom:!0}:void 0,X=J=>{var it,We;const $=D.current+J,ve=_().filter(ot=>!ot.disabled),Pe=document.activeElement,q=(it=ve.find(ot=>ot.ref.current===Pe))==null?void 0:it.textValue,Xe=ve.map(ot=>ot.textValue),qe=Ywe(Xe,$,q),Ye=(We=ve.find(ot=>ot.textValue===qe))==null?void 0:We.ref.current;(function ot(ge){D.current=ge,window.clearTimeout(R.current),ge!==""&&(R.current=window.setTimeout(()=>ot(""),1e3))})($),Ye&&setTimeout(()=>Ye.focus())};g.useEffect(()=>()=>window.clearTimeout(R.current),[]),rF();const se=g.useCallback(J=>{var ve,Pe;return re.current===((ve=H.current)==null?void 0:ve.side)&&Xwe(J,(Pe=H.current)==null?void 0:Pe.area)},[]);return b.jsx(Dwe,{scope:t,searchRef:D,onItemEnter:g.useCallback(J=>{se(J)&&J.preventDefault()},[se]),onItemLeave:g.useCallback(J=>{var $;se(J)||(($=O.current)==null||$.focus(),T(null))},[se]),onTriggerLeave:g.useCallback(J=>{se(J)&&J.preventDefault()},[se]),pointerGraceTimerRef:W,onPointerGraceIntentChange:g.useCallback(J=>{H.current=J},[]),children:b.jsx(de,{...le,children:b.jsx(XC,{asChild:!0,trapped:s,onMountAutoFocus:Dt(i,J=>{var $;J.preventDefault(),($=O.current)==null||$.focus({preventScroll:!0})}),onUnmountAutoFocus:o,children:b.jsx(KC,{asChild:!0,disableOutsidePointerEvents:a,onEscapeKeyDown:c,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:f,onDismiss:p,children:b.jsx(MS,{asChild:!0,...S,dir:k.dir,orientation:"vertical",loop:r,currentTabStopId:A,onCurrentTabStopIdChange:T,onEntryFocus:Dt(l,J=>{k.isUsingKeyboardRef.current||J.preventDefault()}),preventScrollOnEntryFocus:!0,children:b.jsx(gwe,{role:"menu","aria-orientation":"vertical","data-state":Uq(w.open),"data-radix-menu-content":"",dir:k.dir,...x,...y,ref:I,style:{outline:"none",...y.style},onKeyDown:Dt(y.onKeyDown,J=>{const ve=J.target.closest("[data-radix-menu-content]")===J.currentTarget,Pe=J.ctrlKey||J.altKey||J.metaKey,q=J.key.length===1;ve&&(J.key==="Tab"&&J.preventDefault(),!Pe&&q&&X(J.key));const Xe=O.current;if(J.target!==Xe||!Ewe.includes(J.key))return;J.preventDefault();const Ye=_().filter(it=>!it.disabled).map(it=>it.ref.current);kq.includes(J.key)&&Ye.reverse(),Gwe(Ye)}),onBlur:Dt(n.onBlur,J=>{J.currentTarget.contains(J.target)||(window.clearTimeout(R.current),D.current="")}),onPointerMove:Dt(n.onPointerMove,l2(J=>{const $=J.target,ve=ae.current!==J.clientX;if(J.currentTarget.contains($)&&ve){const Pe=J.clientX>ae.current?"right":"left";re.current=Pe,ae.current=J.clientX}}))})})})})})})});Aq.displayName=ga;var Fwe="MenuGroup",a_=g.forwardRef((n,e)=>{const{__scopeMenu:t,...r}=n;return b.jsx(Un.div,{role:"group",...r,ref:e})});a_.displayName=Fwe;var jwe="MenuLabel",Nq=g.forwardRef((n,e)=>{const{__scopeMenu:t,...r}=n;return b.jsx(Un.div,{...r,ref:e})});Nq.displayName=jwe;var g5="MenuItem",Mq="menu.itemSelect",y5=g.forwardRef((n,e)=>{const{disabled:t=!1,onSelect:r,...s}=n,i=g.useRef(null),o=o2(g5,n.__scopeMenu),a=i_(g5,n.__scopeMenu),l=Tr(e,i),c=g.useRef(!1),u=()=>{const d=i.current;if(!t&&d){const f=new CustomEvent(Mq,{bubbles:!0,cancelable:!0});d.addEventListener(Mq,p=>r==null?void 0:r(p),{once:!0}),GL(d,f),f.defaultPrevented?c.current=!1:o.onClose()}};return b.jsx(Oq,{...s,ref:l,disabled:t,onClick:Dt(n.onClick,u),onPointerDown:d=>{var f;(f=n.onPointerDown)==null||f.call(n,d),c.current=!0},onPointerUp:Dt(n.onPointerUp,d=>{var f;c.current||(f=d.currentTarget)==null||f.click()}),onKeyDown:Dt(n.onKeyDown,d=>{const f=a.searchRef.current!=="";t||f&&d.key===" "||n_.includes(d.key)&&(d.currentTarget.click(),d.preventDefault())})})});y5.displayName=g5;var Oq=g.forwardRef((n,e)=>{const{__scopeMenu:t,disabled:r=!1,textValue:s,...i}=n,o=i_(g5,t),a=Sq(t),l=g.useRef(null),c=Tr(e,l),[u,d]=g.useState(!1),[f,p]=g.useState("");return g.useEffect(()=>{const m=l.current;m&&p((m.textContent??"").trim())},[i.children]),b.jsx(i2.ItemSlot,{scope:t,disabled:r,textValue:s??f,children:b.jsx(OS,{asChild:!0,...a,focusable:!r,children:b.jsx(Un.div,{role:"menuitem","data-highlighted":u?"":void 0,"aria-disabled":r||void 0,"data-disabled":r?"":void 0,...i,ref:c,onPointerMove:Dt(n.onPointerMove,l2(m=>{r?o.onItemLeave(m):(o.onItemEnter(m),m.defaultPrevented||m.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:Dt(n.onPointerLeave,l2(m=>o.onItemLeave(m))),onFocus:Dt(n.onFocus,()=>d(!0)),onBlur:Dt(n.onBlur,()=>d(!1))})})})}),Bwe="MenuCheckboxItem",Pq=g.forwardRef((n,e)=>{const{checked:t=!1,onCheckedChange:r,...s}=n;return b.jsx(Lq,{scope:n.__scopeMenu,checked:t,children:b.jsx(y5,{role:"menuitemcheckbox","aria-checked":v5(t)?"mixed":t,...s,ref:e,"data-state":c_(t),onSelect:Dt(s.onSelect,()=>r==null?void 0:r(v5(t)?!0:!t),{checkForDefaultPrevented:!1})})})});Pq.displayName=Bwe;var Iq="MenuRadioGroup",[Vwe,zwe]=Fp(Iq,{value:void 0,onValueChange:()=>{}}),Dq=g.forwardRef((n,e)=>{const{value:t,onValueChange:r,...s}=n,i=Kl(r);return b.jsx(Vwe,{scope:n.__scopeMenu,value:t,onValueChange:i,children:b.jsx(a_,{...s,ref:e})})});Dq.displayName=Iq;var Rq="MenuRadioItem",$q=g.forwardRef((n,e)=>{const{value:t,...r}=n,s=zwe(Rq,n.__scopeMenu),i=t===s.value;return b.jsx(Lq,{scope:n.__scopeMenu,checked:i,children:b.jsx(y5,{role:"menuitemradio","aria-checked":i,...r,ref:e,"data-state":c_(i),onSelect:Dt(r.onSelect,()=>{var o;return(o=s.onValueChange)==null?void 0:o.call(s,t)},{checkForDefaultPrevented:!1})})})});$q.displayName=Rq;var l_="MenuItemIndicator",[Lq,Hwe]=Fp(l_,{checked:!1}),Fq=g.forwardRef((n,e)=>{const{__scopeMenu:t,forceMount:r,...s}=n,i=Hwe(l_,t);return b.jsx(Ka,{present:r||v5(i.checked)||i.checked===!0,children:b.jsx(Un.span,{...s,ref:e,"data-state":c_(i.checked)})})});Fq.displayName=l_;var qwe="MenuSeparator",jq=g.forwardRef((n,e)=>{const{__scopeMenu:t,...r}=n;return b.jsx(Un.div,{role:"separator","aria-orientation":"horizontal",...r,ref:e})});jq.displayName=qwe;var Uwe="MenuArrow",Bq=g.forwardRef((n,e)=>{const{__scopeMenu:t,...r}=n,s=m5(t);return b.jsx(ywe,{...s,...r,ref:e})});Bq.displayName=Uwe;var Wwe="MenuSub",[MHe,Vq]=Fp(Wwe),a2="MenuSubTrigger",zq=g.forwardRef((n,e)=>{const t=jp(a2,n.__scopeMenu),r=o2(a2,n.__scopeMenu),s=Vq(a2,n.__scopeMenu),i=i_(a2,n.__scopeMenu),o=g.useRef(null),{pointerGraceTimerRef:a,onPointerGraceIntentChange:l}=i,c={__scopeMenu:n.__scopeMenu},u=g.useCallback(()=>{o.current&&window.clearTimeout(o.current),o.current=null},[]);return g.useEffect(()=>u,[u]),g.useEffect(()=>{const d=a.current;return()=>{window.clearTimeout(d),l(null)}},[a,l]),b.jsx(r_,{asChild:!0,...c,children:b.jsx(Oq,{id:s.triggerId,"aria-haspopup":"menu","aria-expanded":t.open,"aria-controls":s.contentId,"data-state":Uq(t.open),...n,ref:Wd(e,s.onTriggerChange),onClick:d=>{var f;(f=n.onClick)==null||f.call(n,d),!(n.disabled||d.defaultPrevented)&&(d.currentTarget.focus(),t.open||t.onOpenChange(!0))},onPointerMove:Dt(n.onPointerMove,l2(d=>{i.onItemEnter(d),!d.defaultPrevented&&!n.disabled&&!t.open&&!o.current&&(i.onPointerGraceIntentChange(null),o.current=window.setTimeout(()=>{t.onOpenChange(!0),u()},100))})),onPointerLeave:Dt(n.onPointerLeave,l2(d=>{var p,m;u();const f=(p=t.content)==null?void 0:p.getBoundingClientRect();if(f){const y=(m=t.content)==null?void 0:m.dataset.side,w=y==="right",k=w?-5:5,x=f[w?"left":"right"],S=f[w?"right":"left"];i.onPointerGraceIntentChange({area:[{x:d.clientX+k,y:d.clientY},{x,y:f.top},{x:S,y:f.top},{x:S,y:f.bottom},{x,y:f.bottom}],side:y}),window.clearTimeout(a.current),a.current=window.setTimeout(()=>i.onPointerGraceIntentChange(null),300)}else{if(i.onTriggerLeave(d),d.defaultPrevented)return;i.onPointerGraceIntentChange(null)}})),onKeyDown:Dt(n.onKeyDown,d=>{var p;const f=i.searchRef.current!=="";n.disabled||f&&d.key===" "||_we[r.dir].includes(d.key)&&(t.onOpenChange(!0),(p=t.content)==null||p.focus(),d.preventDefault())})})})});zq.displayName=a2;var Hq="MenuSubContent",qq=g.forwardRef((n,e)=>{const t=_q(ga,n.__scopeMenu),{forceMount:r=t.forceMount,...s}=n,i=jp(ga,n.__scopeMenu),o=o2(ga,n.__scopeMenu),a=Vq(Hq,n.__scopeMenu),l=g.useRef(null),c=Tr(e,l);return b.jsx(i2.Provider,{scope:n.__scopeMenu,children:b.jsx(Ka,{present:r||i.open,children:b.jsx(i2.Slot,{scope:n.__scopeMenu,children:b.jsx(o_,{id:a.contentId,"aria-labelledby":a.triggerId,...s,ref:c,align:"start",side:o.dir==="rtl"?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:u=>{var d;o.isUsingKeyboardRef.current&&((d=l.current)==null||d.focus()),u.preventDefault()},onCloseAutoFocus:u=>u.preventDefault(),onFocusOutside:Dt(n.onFocusOutside,u=>{u.target!==a.trigger&&i.onOpenChange(!1)}),onEscapeKeyDown:Dt(n.onEscapeKeyDown,u=>{o.onClose(),u.preventDefault()}),onKeyDown:Dt(n.onKeyDown,u=>{var p;const d=u.currentTarget.contains(u.target),f=Twe[o.dir].includes(u.key);d&&f&&(i.onOpenChange(!1),(p=a.trigger)==null||p.focus(),u.preventDefault())})})})})})});qq.displayName=Hq;function Uq(n){return n?"open":"closed"}function v5(n){return n==="indeterminate"}function c_(n){return v5(n)?"indeterminate":n?"checked":"unchecked"}function Gwe(n){const e=document.activeElement;for(const t of n)if(t===e||(t.focus(),document.activeElement!==e))return}function Kwe(n,e){return n.map((t,r)=>n[(e+r)%n.length])}function Ywe(n,e,t){const s=e.length>1&&Array.from(e).every(c=>c===e[0])?e[0]:e,i=t?n.indexOf(t):-1;let o=Kwe(n,Math.max(i,0));s.length===1&&(o=o.filter(c=>c!==t));const l=o.find(c=>c.toLowerCase().startsWith(s.toLowerCase()));return l!==t?l:void 0}function Zwe(n,e){const{x:t,y:r}=n;let s=!1;for(let i=0,o=e.length-1;i<e.length;o=i++){const a=e[i],l=e[o],c=a.x,u=a.y,d=l.x,f=l.y;u>r!=f>r&&t<(d-c)*(r-u)/(f-u)+c&&(s=!s)}return s}function Xwe(n,e){if(!e)return!1;const t={x:n.clientX,y:n.clientY};return Zwe(t,e)}function l2(n){return e=>e.pointerType==="mouse"?n(e):void 0}var Jwe=Eq,Qwe=r_,e6e=Tq,t6e=Aq,n6e=a_,r6e=Nq,s6e=y5,i6e=Pq,o6e=Dq,a6e=$q,l6e=Fq,c6e=jq,u6e=Bq,d6e=zq,h6e=qq,b5="DropdownMenu",[f6e]=fa(b5,[Cq]),Ai=Cq(),[p6e,Wq]=f6e(b5),Gq=n=>{const{__scopeDropdownMenu:e,children:t,dir:r,open:s,defaultOpen:i,onOpenChange:o,modal:a=!0}=n,l=Ai(e),c=g.useRef(null),[u,d]=Cp({prop:s,defaultProp:i??!1,onChange:o,caller:b5});return b.jsx(p6e,{scope:e,triggerId:kp(),triggerRef:c,contentId:kp(),open:u,onOpenChange:d,onOpenToggle:g.useCallback(()=>d(f=>!f),[d]),modal:a,children:b.jsx(Jwe,{...l,open:u,onOpenChange:d,dir:r,modal:a,children:t})})};Gq.displayName=b5;var Kq="DropdownMenuTrigger",Yq=g.forwardRef((n,e)=>{const{__scopeDropdownMenu:t,disabled:r=!1,...s}=n,i=Wq(Kq,t),o=Ai(t);return b.jsx(Qwe,{asChild:!0,...o,children:b.jsx(Un.button,{type:"button",id:i.triggerId,"aria-haspopup":"menu","aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":i.open?"open":"closed","data-disabled":r?"":void 0,disabled:r,...s,ref:Wd(e,i.triggerRef),onPointerDown:Dt(n.onPointerDown,a=>{!r&&a.button===0&&a.ctrlKey===!1&&(i.onOpenToggle(),i.open||a.preventDefault())}),onKeyDown:Dt(n.onKeyDown,a=>{r||(["Enter"," "].includes(a.key)&&i.onOpenToggle(),a.key==="ArrowDown"&&i.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(a.key)&&a.preventDefault())})})})});Yq.displayName=Kq;var m6e="DropdownMenuPortal",Zq=n=>{const{__scopeDropdownMenu:e,...t}=n,r=Ai(e);return b.jsx(e6e,{...r,...t})};Zq.displayName=m6e;var Xq="DropdownMenuContent",Jq=g.forwardRef((n,e)=>{const{__scopeDropdownMenu:t,...r}=n,s=Wq(Xq,t),i=Ai(t),o=g.useRef(!1);return b.jsx(t6e,{id:s.contentId,"aria-labelledby":s.triggerId,...i,...r,ref:e,onCloseAutoFocus:Dt(n.onCloseAutoFocus,a=>{var l;o.current||(l=s.triggerRef.current)==null||l.focus(),o.current=!1,a.preventDefault()}),onInteractOutside:Dt(n.onInteractOutside,a=>{const l=a.detail.originalEvent,c=l.button===0&&l.ctrlKey===!0,u=l.button===2||c;(!s.modal||u)&&(o.current=!0)}),style:{...n.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});Jq.displayName=Xq;var g6e="DropdownMenuGroup",y6e=g.forwardRef((n,e)=>{const{__scopeDropdownMenu:t,...r}=n,s=Ai(t);return b.jsx(n6e,{...s,...r,ref:e})});y6e.displayName=g6e;var v6e="DropdownMenuLabel",Qq=g.forwardRef((n,e)=>{const{__scopeDropdownMenu:t,...r}=n,s=Ai(t);return b.jsx(r6e,{...s,...r,ref:e})});Qq.displayName=v6e;var b6e="DropdownMenuItem",eU=g.forwardRef((n,e)=>{const{__scopeDropdownMenu:t,...r}=n,s=Ai(t);return b.jsx(s6e,{...s,...r,ref:e})});eU.displayName=b6e;var w6e="DropdownMenuCheckboxItem",tU=g.forwardRef((n,e)=>{const{__scopeDropdownMenu:t,...r}=n,s=Ai(t);return b.jsx(i6e,{...s,...r,ref:e})});tU.displayName=w6e;var x6e="DropdownMenuRadioGroup",k6e=g.forwardRef((n,e)=>{const{__scopeDropdownMenu:t,...r}=n,s=Ai(t);return b.jsx(o6e,{...s,...r,ref:e})});k6e.displayName=x6e;var C6e="DropdownMenuRadioItem",nU=g.forwardRef((n,e)=>{const{__scopeDropdownMenu:t,...r}=n,s=Ai(t);return b.jsx(a6e,{...s,...r,ref:e})});nU.displayName=C6e;var S6e="DropdownMenuItemIndicator",rU=g.forwardRef((n,e)=>{const{__scopeDropdownMenu:t,...r}=n,s=Ai(t);return b.jsx(l6e,{...s,...r,ref:e})});rU.displayName=S6e;var E6e="DropdownMenuSeparator",sU=g.forwardRef((n,e)=>{const{__scopeDropdownMenu:t,...r}=n,s=Ai(t);return b.jsx(c6e,{...s,...r,ref:e})});sU.displayName=E6e;var _6e="DropdownMenuArrow",T6e=g.forwardRef((n,e)=>{const{__scopeDropdownMenu:t,...r}=n,s=Ai(t);return b.jsx(u6e,{...s,...r,ref:e})});T6e.displayName=_6e;var A6e="DropdownMenuSubTrigger",iU=g.forwardRef((n,e)=>{const{__scopeDropdownMenu:t,...r}=n,s=Ai(t);return b.jsx(d6e,{...s,...r,ref:e})});iU.displayName=A6e;var N6e="DropdownMenuSubContent",oU=g.forwardRef((n,e)=>{const{__scopeDropdownMenu:t,...r}=n,s=Ai(t);return b.jsx(h6e,{...s,...r,ref:e,style:{...n.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});oU.displayName=N6e;var M6e=Gq,O6e=Yq,P6e=Zq,aU=Jq,lU=Qq,cU=eU,uU=tU,dU=nU,hU=rU,fU=sU,pU=iU,mU=oU;const gU=M6e,yU=O6e,I6e=g.forwardRef(({className:n,inset:e,children:t,...r},s)=>b.jsxs(pU,{ref:s,className:Pt("flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[state=open]:bg-accent focus:bg-accent",e&&"pl-8",n),...r,children:[t,b.jsx(Se.ChevronRight,{className:"ml-auto h-4 w-4"})]}));I6e.displayName=pU.displayName;const D6e=g.forwardRef(({className:n,...e},t)=>b.jsx(mU,{ref:t,className:Pt("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",n),...e}));D6e.displayName=mU.displayName;const u_=g.forwardRef(({className:n,sideOffset:e=4,...t},r)=>b.jsx(P6e,{children:b.jsx(aU,{ref:r,sideOffset:e,className:Pt("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",n),...t})}));u_.displayName=aU.displayName;const w5=g.forwardRef(({className:n,inset:e,...t},r)=>b.jsx(cU,{ref:r,className:Pt("relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground",e&&"pl-8",n),...t}));w5.displayName=cU.displayName;const R6e=g.forwardRef(({className:n,children:e,checked:t,...r},s)=>b.jsxs(uU,{ref:s,className:Pt("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground",n),checked:t,...r,children:[b.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:b.jsx(hU,{children:b.jsx(Se.Check,{className:"h-4 w-4"})})}),e]}));R6e.displayName=uU.displayName;const $6e=g.forwardRef(({className:n,children:e,...t},r)=>b.jsxs(dU,{ref:r,className:Pt("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground",n),...t,children:[b.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:b.jsx(hU,{children:b.jsx(Se.Circle,{className:"h-2 w-2 fill-current"})})}),e]}));$6e.displayName=dU.displayName;const L6e=g.forwardRef(({className:n,inset:e,...t},r)=>b.jsx(lU,{ref:r,className:Pt("px-2 py-1.5 text-sm font-semibold",e&&"pl-8",n),...t}));L6e.displayName=lU.displayName;const vU=g.forwardRef(({className:n,...e},t)=>b.jsx(fU,{ref:t,className:Pt("-mx-1 my-1 h-px bg-muted",n),...e}));vU.displayName=fU.displayName;const bU=({presets:n,onSelect:e,disabled:t=!1,activeId:r,className:s="",variant:i="default"})=>n.length===0?null:b.jsx("div",{className:Pt("flex flex-wrap items-center gap-2",s),children:n.map(o=>b.jsxs(yt,{type:"button",variant:i==="minimal"?"ghost":"secondary",size:"sm",disabled:t,onClick:a=>{a.stopPropagation(),e(o)},className:Pt(i==="minimal"?"h-6 px-2.5 text-xs text-white border border-white/20 hover:bg-white/20 hover:text-white rounded-full bg-black/40 backdrop-blur-md shadow-sm transition-all duration-200 hover:scale-105":"h-8 px-3 text-xs",r===o.id&&"ring-2 ring-primary bg-primary/20","transition-all duration-200"),title:o.prompt,children:[o.icon&&b.jsx("span",{className:"mr-1.5",children:o.icon}),b.jsx("span",{children:o.name})]},o.id))});function F6e({isOpen:n,onClose:e,imageUrl:t,imageTitle:r,originalImageId:s,onPromptSubmit:i,onPublish:o,isGenerating:a=!1,isPublishing:l=!1,showPrompt:c=!0,showPublish:u=!1,generatedImageUrl:d,currentIndex:f,totalCount:p,onNavigate:m,onPreload:y,showWizardFeatures:w=!1,promptTemplates:k=[],onApplyTemplate:x,onSaveTemplate:S,onDeleteTemplate:_,onOptimizePrompt:A,isOptimizing:T=!1,onMicrophoneToggle:O,isRecording:I=!1,isTranscribing:R=!1,showQuickPublish:D=!1,onQuickPublish:W,prompt:H,onPromptChange:re,promptHistory:ae=[],historyIndex:de=-1,onNavigateHistory:le,onManualPromptEdit:X,onOpenInWizard:se,quickActions:J=A2e}){const[$,ve]=U.useState(!1),[Pe,q]=U.useState(!1),[Xe,qe]=U.useState(1),[Ye,it]=U.useState(""),[We,ot]=U.useState(!1),[ge,Ie]=U.useState(!1),[pt,j]=U.useState(!1);U.useRef(null);const Y=U.useRef(null);U.useRef(0);const ce=U.useRef(null),be=U.useRef(!1),xe=U.useRef(!1),ne=H!==void 0?H:Ye,ue=z=>{re?re(z):it(z)};U.useEffect(()=>{n&&Ie(!1)},[n]),U.useEffect(()=>{if(!n)return;const z=B=>{const ee=B.target,we=ee instanceof HTMLTextAreaElement||ee instanceof HTMLInputElement||(ee==null?void 0:ee.contentEditable)==="true"||(ee==null?void 0:ee.tagName)==="TEXTAREA"||(ee==null?void 0:ee.tagName)==="INPUT";if(B.key==="Escape"){if(we)return;e()}else B.key==="ArrowUp"&&B.ctrlKey&&le?(B.preventDefault(),le("up")):B.key==="ArrowDown"&&B.ctrlKey&&le?(B.preventDefault(),le("down")):B.key==="ArrowLeft"&&!we&&m?(B.preventDefault(),m("prev")):B.key==="ArrowRight"&&!we&&m?(B.preventDefault(),m("next")):B.key===" "&&!we&&c&&(B.preventDefault(),Ie(!ge))};return document.addEventListener("keydown",z),()=>document.removeEventListener("keydown",z)},[n,e,m,f,p,c,ge,le]),U.useEffect(()=>()=>{Y.current&&clearTimeout(Y.current)},[]);const ye=(z,B)=>{ce.current={x:z,y:B,time:Date.now()},be.current=!1},L=(z,B)=>{if(!ce.current||!m)return;const ee=z-ce.current.x,we=B-ce.current.y,Ee=Date.now()-ce.current.time;Math.abs(ee)>50&&Math.abs(we)<100&&Ee<500&&!Pe&&(ee>0?m("prev"):ee<0&&m("next")),ce.current=null,be.current=!1},V=()=>{ne.trim()&&!a&&i&&i(ne)},ie=()=>{ot(!0)},he=(z,B,ee,we,Ee)=>{o&&o(z,d||t,B,ee,we,Ee),ot(!1)};return n?b.jsxs("div",{className:"fixed inset-0 bg-black/95 z-[9999] flex items-center justify-center",onClick:z=>{z.target===z.currentTarget&&(c?Ie(!ge):e())},onTouchStart:z=>{if(z.target===z.currentTarget){const B=z.touches[0];ye(B.clientX,B.clientY)}},onTouchEnd:z=>{if(z.target===z.currentTarget){const B=z.changedTouches[0];L(B.clientX,B.clientY)}},children:[b.jsxs("div",{className:"relative w-full h-full flex items-center justify-center",children:[b.jsx("div",{className:"relative w-full h-full flex items-center justify-center",children:b.jsx(B3e,{initialScale:1,minScale:1,maxScale:40,centerOnInit:!0,centerZoomedOut:!0,limitToBounds:!0,alignmentAnimation:{animationTime:200,animationType:"easeOut"},wheel:{step:1},doubleClick:{disabled:!1,step:.7},pinch:{step:20},onTransformed:z=>qe(z.state.scale),children:b.jsx(H3e,{wrapperClass:"w-full h-full",contentClass:"",children:b.jsx(nb,{src:d||t,alt:r,sizes:`${Math.ceil(Xe*100)}vw`,responsiveSizes:[640,1024,2048],imgClassName:"max-w-[90vw] max-h-[90vh] object-contain cursor-grab active:cursor-grabbing pointer-events-auto",className:"w-full h-full flex items-center justify-center",loading:"eager",draggable:!1,onLoad:()=>ve(!0),onClick:z=>{!xe.current&&c&&(z.stopPropagation(),Ie(!ge))}})})})}),!$&&b.jsx("div",{className:"absolute inset-0 flex items-center justify-center pointer-events-none z-10",children:b.jsx("div",{className:"w-12 h-12 border-4 border-white/30 border-t-white rounded-full animate-spin"})}),b.jsx("button",{onClick:z=>{z.stopPropagation(),e()},className:"absolute top-4 right-4 text-white text-2xl p-4 bg-black/75 rounded-lg hover:bg-black/90 transition-all duration-200 z-20",title:"Close (ESC)",children:"×"}),m&&f!==void 0&&p!==void 0&&p>1&&b.jsxs(b.Fragment,{children:[f>0&&b.jsx("button",{onClick:z=>{z.stopPropagation(),m("prev")},className:"absolute left-4 top-1/2 transform -translate-y-1/2 p-4 text-white text-3xl bg-black/75 rounded-lg hover:bg-black/90 transition-all duration-200",style:{zIndex:50},title:"Previous (←)",children:"‹"}),f<p-1&&b.jsx("button",{onClick:z=>{z.stopPropagation(),m("next")},className:"absolute right-4 top-1/2 transform -translate-y-1/2 p-4 text-white text-3xl bg-black/75 rounded-lg hover:bg-black/90 transition-all duration-200",style:{zIndex:50},title:"Next (→)",children:"›"})]}),c&&ge&&$&&b.jsx("div",{className:"absolute bottom-4 left-1/2 transform -translate-x-1/2 w-[90vw] md:w-[80vw] max-w-4xl z-40",onClick:z=>{z.target===z.currentTarget&&Ie(!1)},children:b.jsx("div",{className:"bg-black/80 backdrop-blur-sm rounded-xl p-3 md:p-4 shadow-2xl border border-white/20",onClick:z=>z.stopPropagation(),children:w?b.jsxs(b.Fragment,{children:[ae.length>0&&b.jsxs("div",{className:"flex items-center justify-between mb-2 text-xs",children:[b.jsxs("span",{className:"text-white/60",children:["History: ",de>=0?`${de+1}/${ae.length}`:"Current"]}),b.jsxs("div",{className:"flex items-center gap-1",children:[b.jsxs(gU,{modal:!1,children:[b.jsx(yU,{asChild:!0,children:b.jsx(yt,{type:"button",variant:"ghost",onClick:z=>z.stopPropagation(),className:"h-6 w-6 p-0 text-white hover:text-primary",title:"Browse prompt history",children:b.jsx(Se.History,{className:"h-3 w-3"})})}),b.jsx(u_,{align:"end",className:"w-80 max-h-64 overflow-y-auto z-[10000]",children:ae.length===0?b.jsx("div",{className:"px-2 py-3 text-sm text-muted-foreground text-center",children:b.jsx(St,{children:"No history yet"})}):b.jsx(b.Fragment,{children:[...ae].reverse().map((z,B)=>{const ee=ae.length-1-B;return b.jsxs(w5,{onSelect:()=>{ue(z)},className:`flex flex-col items-start gap-1 py-2 ${de===ee?"bg-primary/10":""}`,children:[b.jsxs("div",{className:"text-xs text-muted-foreground",children:["#",ae.length-B,de===ee&&" (current)"]}),b.jsx("div",{className:"text-sm line-clamp-2 w-full",children:z})]},ee)})})})]}),b.jsx(yt,{type:"button",variant:"ghost",onClick:z=>{z.stopPropagation(),le==null||le("up")},disabled:ae.length===0||de===ae.length-1,className:"h-6 w-6 p-0 text-white hover:text-primary disabled:opacity-30",title:"Previous prompt (Ctrl+↑)",children:b.jsx(Se.ArrowUp,{className:"h-3 w-3"})}),b.jsx(yt,{type:"button",variant:"ghost",onClick:z=>{z.stopPropagation(),le==null||le("down")},disabled:de===-1,className:"h-6 w-6 p-0 text-white hover:text-primary disabled:opacity-30",title:"Next prompt (Ctrl+↓)",children:b.jsx(Se.ArrowUp,{className:"h-3 w-3 rotate-180"})})]})]}),b.jsx("div",{className:"flex gap-2 mb-2 md:mb-0",children:b.jsxs("div",{className:"flex-1 relative",children:[b.jsx(e5,{value:ne,onChange:z=>{ue(z.target.value),X==null||X()},placeholder:Be("Quick edit prompt..."),disabled:a,rows:2,className:"w-full bg-white/10 border border-white/30 rounded-lg px-3 py-2 pr-10 text-white placeholder-white/60 focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent backdrop-blur-sm disabled:opacity-50 resize-none text-sm md:text-base",onKeyDown:z=>{z.key==="Enter"&&z.ctrlKey||z.key==="Enter"&&!z.shiftKey&&ne.trim()&&!a?(z.stopPropagation(),z.preventDefault(),V(),z.ctrlKey||ue("")):z.key==="ArrowUp"&&z.ctrlKey?(z.stopPropagation(),z.preventDefault(),le==null||le("up")):z.key==="ArrowDown"&&z.ctrlKey?(z.stopPropagation(),z.preventDefault(),le==null||le("down")):z.key==="Escape"?(z.stopPropagation(),z.preventDefault(),ue("")):(z.key.startsWith("Arrow")||z.key==="Delete"||z.key==="Backspace")&&z.stopPropagation()},onClick:z=>z.stopPropagation()}),b.jsx("button",{onClick:z=>{z.stopPropagation(),O==null||O()},disabled:R,className:`absolute right-2 bottom-2 p-1 rounded-md transition-colors ${I?"bg-red-600/80 text-white hover:bg-red-700":"text-white/60 hover:text-white hover:bg-white/10"}`,title:I?"Stop recording":"Record audio",children:R?b.jsx("div",{className:"animate-spin rounded-full h-4 w-4 border-2 border-white border-t-transparent"}):I?b.jsx(Se.MicOff,{size:16}):b.jsx(Se.Mic,{size:16})})]})}),b.jsx("div",{className:"mb-2 mt-2",children:b.jsx(bU,{presets:J,onSelect:z=>{const ee=(ne||"").trim();ue(`${ee}${ee?", ":""}${z.prompt}`)},variant:"minimal",disabled:a})}),b.jsxs("div",{className:"flex gap-2 flex-wrap md:flex-nowrap",children:[b.jsxs(gU,{modal:!1,children:[b.jsx(yU,{asChild:!0,children:b.jsx(yt,{onClick:z=>z.stopPropagation(),variant:"ghost",className:"text-white hover:text-primary disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0",title:Be("Prompt Templates"),children:b.jsx(Se.FileText,{size:20,className:"md:w-5 md:h-5"})})}),b.jsxs(u_,{align:"end",className:"w-64 z-[10000]",children:[k.length===0?b.jsx("div",{className:"px-2 py-3 text-sm text-muted-foreground text-center",children:b.jsx(St,{children:"No templates saved yet"})}):b.jsxs(b.Fragment,{children:[k.map((z,B)=>b.jsxs(w5,{onSelect:()=>x==null?void 0:x(z.template),className:"flex items-center justify-between group",children:[b.jsx("span",{className:"flex-1 truncate",children:z.name}),b.jsx("button",{onClick:ee=>{ee.stopPropagation(),_==null||_(B)},className:"opacity-0 group-hover:opacity-100 ml-2 p-1 hover:bg-destructive/20 rounded",title:Be("Delete template"),children:b.jsx(Se.Trash2,{className:"h-3 w-3 text-destructive"})})]},B)),b.jsx(vU,{})]}),b.jsxs(w5,{onSelect:()=>S==null?void 0:S(),children:[b.jsx(Se.Plus,{className:"h-3 w-3 mr-2"}),b.jsx(St,{children:"Save current as template"})]})]})]}),se&&b.jsx(yt,{onClick:z=>{z.stopPropagation(),se()},variant:"ghost",className:"text-white hover:text-purple-400 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0",title:Be("Open in AI Wizard for advanced editing"),children:b.jsx(Se.Wand2,{size:20,className:"md:w-5 md:h-5"})}),b.jsx(yt,{onClick:z=>{z.stopPropagation(),A==null||A()},disabled:T||!ne.trim(),variant:"ghost",className:"text-white hover:text-primary disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0",title:Be("Optimize prompt with AI"),children:T?b.jsx("div",{className:"animate-spin rounded-full h-5 w-5 border-2 border-white border-t-transparent"}):b.jsx(Se.Sparkles,{size:20,className:"md:w-5 md:h-5"})}),b.jsx(yt,{onClick:z=>{z.stopPropagation(),ne.trim()&&!a&&(V(),ue(""))},disabled:!ne.trim()||a,variant:"ghost",className:"text-primary hover:text-primary/80 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0",title:"Generate (Enter to submit)",children:a?b.jsx("div",{className:"animate-spin rounded-full h-5 w-5 border-2 border-primary border-t-transparent"}):b.jsx(Se.ArrowUp,{size:20,className:"md:w-5 md:h-5"})}),D&&b.jsx(yt,{onClick:z=>{z.stopPropagation(),W==null||W()},disabled:l,variant:"ghost",className:"text-green-500 hover:text-green-400 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0",title:"Quick Publish with prompt as description",children:l?b.jsx("div",{className:"animate-spin rounded-full h-5 w-5 border-2 border-green-500 border-t-transparent"}):b.jsx(Se.Upload,{size:20,className:"md:w-5 md:h-5"})}),u&&b.jsx(yt,{onClick:z=>{z.stopPropagation(),ie()},disabled:l,variant:"ghost",className:"text-green-500 hover:text-green-400 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0",title:"Publish to gallery with options",children:l?b.jsx("div",{className:"animate-spin rounded-full h-5 w-5 border-2 border-green-500 border-t-transparent"}):b.jsx(Se.Save,{size:20,className:"md:w-5 md:h-5"})}),b.jsx(yt,{onClick:z=>{z.stopPropagation(),Ie(!1)},variant:"ghost",className:"text-white/60 hover:text-white p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0 md:ml-auto",title:Be("Hide prompt"),type:"button",children:b.jsx(Se.ArrowDown,{size:20,className:"md:w-5 md:h-5"})})]})]}):b.jsxs(b.Fragment,{children:[b.jsx("div",{className:"flex gap-2 mb-2 md:mb-0",children:b.jsx("div",{className:"flex-1 relative",children:b.jsx(e5,{value:ne,onChange:z=>{ue(z.target.value),X==null||X()},placeholder:Be("Quick edit prompt..."),disabled:a,rows:2,className:"w-full bg-white/10 border border-white/30 rounded-lg px-3 py-2 text-white placeholder-white/60 focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent backdrop-blur-sm disabled:opacity-50 resize-none text-sm md:text-base",onKeyDown:z=>{z.key==="Enter"&&!z.shiftKey&&ne.trim()&&!a?(z.stopPropagation(),z.preventDefault(),V()):z.key==="Escape"?(z.stopPropagation(),z.preventDefault(),ue("")):(z.key.startsWith("Arrow")||z.key==="Delete"||z.key==="Backspace")&&z.stopPropagation()},onClick:z=>z.stopPropagation()})})}),b.jsx("div",{className:"mb-2 mt-2",children:b.jsx(bU,{presets:J,onSelect:z=>{const ee=(ne||"").trim();ue(`${ee}${ee?", ":""}${z.prompt}`)},variant:"minimal",disabled:a})}),b.jsxs("div",{className:"flex gap-2",children:[b.jsx(yt,{onClick:z=>{z.stopPropagation(),ne.trim()&&!a&&V()},disabled:!ne.trim()||a,variant:"ghost",className:"text-primary hover:text-primary/80 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0",title:"Generate (Enter to submit)",children:a?b.jsx("div",{className:"animate-spin rounded-full h-5 w-5 border-2 border-primary border-t-transparent"}):b.jsx(Se.ArrowUp,{size:20,className:"md:w-5 md:h-5"})}),u&&b.jsx(yt,{onClick:z=>{z.stopPropagation(),ie()},disabled:l,variant:"ghost",className:"text-green-500 hover:text-green-400 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0",title:"Publish to gallery",children:l?b.jsx("div",{className:"animate-spin rounded-full h-5 w-5 border-2 border-green-500 border-t-transparent"}):b.jsx(Se.Save,{size:20,className:"md:w-5 md:h-5"})}),b.jsx(yt,{onClick:z=>{z.stopPropagation(),Ie(!1)},variant:"ghost",className:"text-white/60 hover:text-white p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0",title:Be("Hide prompt"),type:"button",children:b.jsx(Se.ArrowDown,{size:20,className:"md:w-5 md:h-5"})})]})]})})}),c&&!ge&&$&&b.jsx("div",{className:"absolute bottom-4 left-1/2 transform -translate-x-1/2 z-50",children:b.jsx("button",{onClick:z=>{z.stopPropagation(),Ie(!0)},className:"bg-primary/80 hover:bg-primary text-primary-foreground p-2 rounded-full shadow-lg transition-all duration-200 hover:scale-110",title:"Show prompt field (Space)",children:b.jsx(Se.Wand2,{size:20})})}),pt&&$&&ge&&b.jsxs("div",{className:"absolute bottom-16 left-1/2 transform -translate-x-1/2 bg-black/80 backdrop-blur-md text-white px-4 py-3 rounded-lg text-sm max-w-md text-center border border-white/20 z-50",onClick:z=>z.stopPropagation(),children:[l?b.jsxs("div",{className:"flex items-center justify-center gap-2",children:[b.jsx("div",{className:"animate-spin rounded-full h-3 w-3 border-2 border-white border-t-transparent"}),b.jsx("span",{children:"Publishing... • ESC to close"})]}):b.jsxs("div",{className:"space-y-2",children:[b.jsx("div",{className:"font-medium",children:r}),f!==void 0&&p!==void 0&&b.jsxs("div",{className:"text-white/80 text-xs",children:[f+1," of ",p]}),b.jsxs("div",{className:"text-white/70 text-xs space-y-1",children:[b.jsx("div",{children:"• Enter: generate"}),b.jsx("div",{children:"• Space/Click: hide prompt"}),w&&ae.length>0&&b.jsx("div",{children:"• Ctrl+↑↓: prompt history"}),m&&p&&p>1&&b.jsx("div",{children:"• ← → keys or swipe: navigate"}),b.jsx("div",{children:"• ESC: close lightbox"})]})]}),b.jsx("div",{className:"fixed inset-0 z-[-1]",onClick:()=>j(!1)})]})]}),b.jsx(e4e,{isOpen:We,onClose:()=>ot(!1),onPublish:he,originalTitle:r,originalImageId:s,isPublishing:l})]}):null}const wU=n=>{let e;const t=new Set,r=(c,u)=>{const d=typeof c=="function"?c(e):c;if(!Object.is(d,e)){const f=e;e=u??(typeof d!="object"||d===null)?d:Object.assign({},e,d),t.forEach(p=>p(e,f))}},s=()=>e,a={setState:r,getState:s,getInitialState:()=>l,subscribe:c=>(t.add(c),()=>t.delete(c))},l=e=n(r,s,a);return a},j6e=n=>n?wU(n):wU,B6e=n=>n;function V6e(n,e=B6e){const t=U.useSyncExternalStore(n.subscribe,U.useCallback(()=>e(n.getState()),[n,e]),U.useCallback(()=>e(n.getInitialState()),[n,e]));return U.useDebugValue(t),t}const xU=n=>{const e=j6e(n),t=r=>V6e(e,r);return Object.assign(t,e),t},z6e=n=>n?xU(n):xU;function kU(n,e){let t;try{t=n()}catch{return}return{getItem:s=>{var i;const o=l=>l===null?null:JSON.parse(l,void 0),a=(i=t.getItem(s))!=null?i:null;return a instanceof Promise?a.then(o):o(a)},setItem:(s,i)=>t.setItem(s,JSON.stringify(i,void 0)),removeItem:s=>t.removeItem(s)}}const d_=n=>e=>{try{const t=n(e);return t instanceof Promise?t:{then(r){return d_(r)(t)},catch(r){return this}}}catch(t){return{then(r){return this},catch(r){return d_(r)(t)}}}},H6e=(n,e)=>(t,r,s)=>{let i={storage:kU(()=>localStorage),partialize:w=>w,version:0,merge:(w,k)=>({...k,...w}),...e},o=!1,a=0;const l=new Set,c=new Set;let u=i.storage;if(!u)return n((...w)=>{console.warn(`[zustand persist middleware] Unable to update item '${i.name}', the given storage is currently unavailable.`),t(...w)},r,s);const d=()=>{const w=i.partialize({...r()});return u.setItem(i.name,{state:w,version:i.version})},f=s.setState;s.setState=(w,k)=>(f(w,k),d());const p=n((...w)=>(t(...w),d()),r,s);s.getInitialState=()=>p;let m;const y=()=>{var w,k;if(!u)return;const x=++a;o=!1,l.forEach(_=>{var A;return _((A=r())!=null?A:p)});const S=((k=i.onRehydrateStorage)==null?void 0:k.call(i,(w=r())!=null?w:p))||void 0;return d_(u.getItem.bind(u))(i.name).then(_=>{if(_)if(typeof _.version=="number"&&_.version!==i.version){if(i.migrate){const A=i.migrate(_.state,_.version);return A instanceof Promise?A.then(T=>[!0,T]):[!0,A]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,_.state];return[!1,void 0]}).then(_=>{var A;if(x!==a)return;const[T,O]=_;if(m=i.merge(O,(A=r())!=null?A:p),t(m,!0),T)return d()}).then(()=>{x===a&&(S==null||S(m,void 0),m=r(),o=!0,c.forEach(_=>_(m)))}).catch(_=>{x===a&&(S==null||S(void 0,_))})};return s.persist={setOptions:w=>{i={...i,...w},w.storage&&(u=w.storage)},clearStorage:()=>{u==null||u.removeItem(i.name)},getOptions:()=>i,rehydrate:()=>y(),hasHydrated:()=>o,onHydrate:w=>(l.add(w),()=>{l.delete(w)}),onFinishHydration:w=>(c.add(w),()=>{c.delete(w)})},i.skipHydration||y(),m||p},q6e=n=>{if(!n)return;const e=new Image;e.src=n},nl=z6e()(H6e((n,e)=>({navigationData:null,history:[],wizardInitialImage:null,wizardReturnPath:null,creationWizardOpen:!1,creationWizardMode:"default",setNavigationData:t=>{n({navigationData:t})},updateCurrentIndex:t=>{const r=e().navigationData;r&&n({navigationData:{...r,currentIndex:t}})},pushHistory:(t,r)=>{const o=[...e().history,{path:t,data:r,timestamp:Date.now()}].slice(-50);n({history:o,navigationData:r})},popHistory:()=>{const t=e();if(t.history.length===0)return null;const r=[...t.history],s=r.pop(),i=r.length>0?r[r.length-1].data:null;return n({history:r,navigationData:i}),s},clearHistory:()=>{n({history:[]})},canGoBack:()=>e().history.length>1,setWizardImage:(t,r)=>{n({wizardInitialImage:t,wizardReturnPath:r||null})},clearWizardImage:()=>{n({wizardInitialImage:null,wizardReturnPath:null})},setCreationWizardOpen:(t,r="default")=>{n({creationWizardOpen:t,creationWizardMode:r})},preloadImage:t=>{q6e(t)},reset:()=>{n({navigationData:null,history:[],wizardInitialImage:null,wizardReturnPath:null,creationWizardOpen:!1,creationWizardMode:"default"})}}),{name:"pm-pics-navigation",storage:kU(()=>localStorage),partialize:n=>({navigationData:n.navigationData,wizardInitialImage:n.wizardInitialImage,wizardReturnPath:n.wizardReturnPath}),version:1,skipHydration:!1})),U6e=n=>n.navigationData,W6e=n=>n.wizardInitialImage,G6e=n=>n.wizardReturnPath,K6e=()=>{const n=nl(W6e),e=nl(G6e),t=nl(a=>a.setWizardImage),r=nl(a=>a.clearWizardImage),s=nl(a=>a.creationWizardOpen),i=nl(a=>a.creationWizardMode),o=nl(a=>a.setCreationWizardOpen);return{wizardInitialImage:n,wizardReturnPath:e,setWizardImage:t,clearWizardImage:r,creationWizardOpen:s,creationWizardMode:i,setCreationWizardOpen:o}},CU=({imageUrl:n,imageTitle:e,className:t="",size:r="sm",variant:s="ghost",onClick:i,editingPostId:o,pictureId:a,children:l})=>{const{user:c}=du(),u=gp.useNavigate(),{setWizardImage:d}=K6e(),f=async p=>{if(p.preventDefault(),p.stopPropagation(),i){i(p);return}if(!c){at.toast.error(Be("Please sign in to use the AI wizard"));return}const m=window.location.pathname;let y=null;if(o!==void 0)y=o;else{const x=m.match(/\/post\/([a-f0-9-]{36})/);x&&(y=x[1])}let w=a||null;if(!w){const x=m.match(/\/post\/([a-f0-9-]{36})/);w=x?x[1]:null}const k={id:w||`external-${Date.now()}`,src:n,title:e,selected:!0,realDatabaseId:w};d(k,window.location.pathname),u("/wizard",{state:{mode:"default",editingPostId:y}})};return c?b.jsxs(yt,{size:r,variant:s,onClick:f,className:`${t!=null&&t.includes("p-0"),"text-foreground hover:text-primary transition-colors"} ${t}`,title:Be("Edit with AI Wizard"),children:[b.jsx(Se.Wand2,{className:`${r==="sm"?"h-6 w-6":"h-5 w-5"} ${t!=null&&t.includes("p-0")?"":"mr-1"} drop-shadow-sm`}),l]}):null},Y6e=async(n,e)=>{try{if(n.startsWith("data:")){Z6e(n,e);return}const t=await fetch(n,{mode:"cors"});if(!t.ok)throw new Error("Failed to fetch image");const r=await t.blob(),s=window.URL.createObjectURL(r),i=e||J6e(n)||"image.jpg";X6e(s,i),window.URL.revokeObjectURL(s)}catch(t){console.error("Error downloading image:",t),window.open(n,"_blank")}},Z6e=(n,e)=>{const t=document.createElement("a");t.href=n,t.download=e||"image.png",document.body.appendChild(t),t.click(),document.body.removeChild(t)},X6e=(n,e)=>{const t=document.createElement("a");t.href=n,t.download=e,document.body.appendChild(t),t.click(),document.body.removeChild(t)},J6e=n=>{try{const t=new URL(n).pathname,r=t.substring(t.lastIndexOf("/")+1);return r&&r.includes(".")?r:null}catch{return null}},Q6e=(n,e="jpg")=>{const t=new Date().toISOString().slice(0,19).replace(/:/g,"-");return`${n?n.replace(/[^a-zA-Z0-9\s-_]/g,"").replace(/\s+/g,"-").toLowerCase():"image"}-${t}.${e}`},exe=U.createContext(void 0),txe=()=>{const n=U.useContext(exe);if(n===void 0)throw new Error("usePostNavigation must be used within a PostNavigationProvider");return n},h_=n=>{if(!n)return"";const e=new Date(n),r=new Date().getTime()-e.getTime(),s=Math.floor(r/(1e3*60*60*24));if(s<7){if(s===0){const i=Math.floor(r/36e5);return i===0?`${Math.floor(r/6e4)}m ago`:`${i}h ago`}return`${s}d ago`}return e.toLocaleDateString(void 0,{month:"short",day:"numeric"})},f_=n=>n?!!(/\.(jpg|jpeg|png|gif|webp|mp4|mov|avi|mkv|webm|heic|tiff|bmp|svg)$/i.test(n)||/^[\d_-]+$/.test(n)||/^(IMG|VID|DSC|P|MOV)[\d_-]+/i.test(n)||/^\d{4}[-_]\d{2}[-_]\d{2}/.test(n)||/^Screenshot_/.test(n)||/^Screen\s?Shot/.test(n)):!1;function nxe(n,e=[]){let t=[];function r(i,o){const a=g.createContext(o);a.displayName=i+"Context";const l=t.length;t=[...t,o];const c=d=>{var k;const{scope:f,children:p,...m}=d,y=((k=f==null?void 0:f[n])==null?void 0:k[l])||a,w=g.useMemo(()=>m,Object.values(m));return b.jsx(y.Provider,{value:w,children:p})};c.displayName=i+"Provider";function u(d,f){var y;const p=((y=f==null?void 0:f[n])==null?void 0:y[l])||a,m=g.useContext(p);if(m)return m;if(o!==void 0)return o;throw new Error(`\`${d}\` must be used within \`${i}\``)}return[c,u]}const s=()=>{const i=t.map(o=>g.createContext(o));return function(a){const l=(a==null?void 0:a[n])||i;return g.useMemo(()=>({[`__scope${n}`]:{...a,[n]:l}}),[a,l])}};return s.scopeName=n,[r,rxe(s,...e)]}function rxe(...n){const e=n[0];if(n.length===1)return e;const t=()=>{const r=n.map(s=>({useScope:s(),scopeName:s.scopeName}));return function(i){const o=r.reduce((a,{useScope:l,scopeName:c})=>{const d=l(i)[`__scope${c}`];return{...a,...d}},{});return g.useMemo(()=>({[`__scope${e.scopeName}`]:o}),[o])}};return t.scopeName=e.scopeName,t}var sxe=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],p_=sxe.reduce((n,e)=>{const t=pC(`Primitive.${e}`),r=g.forwardRef((s,i)=>{const{asChild:o,...a}=s,l=o?t:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),b.jsx(l,{...a,ref:i})});return r.displayName=`Primitive.${e}`,{...n,[e]:r}},{}),m_={exports:{}},g_={};/** + * @license React + * use-sync-external-store-shim.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var SU;function ixe(){if(SU)return g_;SU=1;var n=U;function e(d,f){return d===f&&(d!==0||1/d===1/f)||d!==d&&f!==f}var t=typeof Object.is=="function"?Object.is:e,r=n.useState,s=n.useEffect,i=n.useLayoutEffect,o=n.useDebugValue;function a(d,f){var p=f(),m=r({inst:{value:p,getSnapshot:f}}),y=m[0].inst,w=m[1];return i(function(){y.value=p,y.getSnapshot=f,l(y)&&w({inst:y})},[d,p,f]),s(function(){return l(y)&&w({inst:y}),d(function(){l(y)&&w({inst:y})})},[d]),o(p),p}function l(d){var f=d.getSnapshot;d=d.value;try{var p=f();return!t(d,p)}catch{return!0}}function c(d,f){return f()}var u=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?c:a;return g_.useSyncExternalStore=n.useSyncExternalStore!==void 0?n.useSyncExternalStore:u,g_}var y_={};/** + * @license React + * use-sync-external-store-shim.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var EU;function oxe(){return EU||(EU=1,process.env.NODE_ENV!=="production"&&function(){function n(p,m){return p===m&&(p!==0||1/p===1/m)||p!==p&&m!==m}function e(p,m){u||s.startTransition===void 0||(u=!0,console.error("You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release."));var y=m();if(!d){var w=m();i(y,w)||(console.error("The result of getSnapshot should be cached to avoid an infinite loop"),d=!0)}w=o({inst:{value:y,getSnapshot:m}});var k=w[0].inst,x=w[1];return l(function(){k.value=y,k.getSnapshot=m,t(k)&&x({inst:k})},[p,y,m]),a(function(){return t(k)&&x({inst:k}),p(function(){t(k)&&x({inst:k})})},[p]),c(y),y}function t(p){var m=p.getSnapshot;p=p.value;try{var y=m();return!i(p,y)}catch{return!0}}function r(p,m){return m()}typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var s=U,i=typeof Object.is=="function"?Object.is:n,o=s.useState,a=s.useEffect,l=s.useLayoutEffect,c=s.useDebugValue,u=!1,d=!1,f=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?r:e;y_.useSyncExternalStore=s.useSyncExternalStore!==void 0?s.useSyncExternalStore:f,typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())}()),y_}process.env.NODE_ENV==="production"?m_.exports=ixe():m_.exports=oxe();var axe=m_.exports;function lxe(){return axe.useSyncExternalStore(cxe,()=>!0,()=>!1)}function cxe(){return()=>{}}var v_="Avatar",[uxe]=nxe(v_),[dxe,_U]=uxe(v_),TU=g.forwardRef((n,e)=>{const{__scopeAvatar:t,...r}=n,[s,i]=g.useState("idle");return b.jsx(dxe,{scope:t,imageLoadingStatus:s,onImageLoadingStatusChange:i,children:b.jsx(p_.span,{...r,ref:e})})});TU.displayName=v_;var AU="AvatarImage",NU=g.forwardRef((n,e)=>{const{__scopeAvatar:t,src:r,onLoadingStatusChange:s=()=>{},...i}=n,o=_U(AU,t),a=hxe(r,i),l=Kl(c=>{s(c),o.onImageLoadingStatusChange(c)});return Ga(()=>{a!=="idle"&&l(a)},[a,l]),a==="loaded"?b.jsx(p_.img,{...i,ref:e,src:r}):null});NU.displayName=AU;var MU="AvatarFallback",OU=g.forwardRef((n,e)=>{const{__scopeAvatar:t,delayMs:r,...s}=n,i=_U(MU,t),[o,a]=g.useState(r===void 0);return g.useEffect(()=>{if(r!==void 0){const l=window.setTimeout(()=>a(!0),r);return()=>window.clearTimeout(l)}},[r]),o&&i.imageLoadingStatus!=="loaded"?b.jsx(p_.span,{...s,ref:e}):null});OU.displayName=MU;function PU(n,e){return n?e?(n.src!==e&&(n.src=e),n.complete&&n.naturalWidth>0?"loaded":"loading"):"error":"idle"}function hxe(n,{referrerPolicy:e,crossOrigin:t}){const r=lxe(),s=g.useRef(null),i=r?(s.current||(s.current=new window.Image),s.current):null,[o,a]=g.useState(()=>PU(i,n));return Ga(()=>{a(PU(i,n))},[i,n]),Ga(()=>{const l=d=>()=>{a(d)};if(!i)return;const c=l("loaded"),u=l("error");return i.addEventListener("load",c),i.addEventListener("error",u),e&&(i.referrerPolicy=e),typeof t=="string"&&(i.crossOrigin=t),()=>{i.removeEventListener("load",c),i.removeEventListener("error",u)}},[i,t,e]),o}var IU=TU,DU=NU,RU=OU;const $U=g.forwardRef(({className:n,...e},t)=>b.jsx(IU,{ref:t,className:Pt("relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",n),...e}));$U.displayName=IU.displayName;const LU=g.forwardRef(({className:n,...e},t)=>b.jsx(DU,{ref:t,className:Pt("aspect-square h-full w-full",n),...e}));LU.displayName=DU.displayName;const FU=g.forwardRef(({className:n,...e},t)=>b.jsx(RU,{ref:t,className:Pt("flex h-full w-full items-center justify-center rounded-full bg-muted",n),...e}));FU.displayName=RU.displayName;const fxe=U.createContext(void 0),jU=()=>{const n=U.useContext(fxe);if(n===void 0)throw new Error("useProfiles must be used within a ProfilesProvider");return n},qg=({userId:n,avatarUrl:e,displayName:t,createdAt:r,className:s="w-8 h-8",showDate:i=!0,onClick:o,hoverStyle:a=!1,textSize:l="sm"})=>{gp.useNavigate();const{profiles:c,fetchProfile:u}=jU(),d=c[n],f=e||(d==null?void 0:d.avatar_url),p=t||(d==null?void 0:d.display_name)||`User ${n.slice(0,8)}`;U.useEffect(()=>{d||u(n)},[n,d,u]);const m=k=>{if(o){o(k);return}k.stopPropagation(),window.location.href=`/user/${n}`},y=a?`text-white text-${l} font-medium hover:underline cursor-pointer`:`font-semibold hover:underline text-${l}`,w=a?"text-white/60 text-xs":"text-xs text-muted-foreground";return b.jsxs("div",{className:"flex items-center space-x-2",onClick:m,children:[b.jsxs($U,{className:`${s} bg-background hover:scale-105 transition-transform cursor-pointer`,children:[b.jsx(LU,{src:f||void 0,alt:p||"Avatar",className:"object-cover"}),b.jsx(FU,{className:"bg-gradient-to-br from-purple-500 to-indigo-600 text-white",children:b.jsx(Se.User,{className:"h-1/2 w-1/2"})})]}),b.jsxs("div",{className:"flex flex-col min-w-0",children:[b.jsx("span",{className:y,children:p}),i&&r&&b.jsx("span",{className:w,children:new Date(r).toLocaleDateString()})]})]})},pxe=({pictureId:n,image:e,title:t,author:r,authorId:s,likes:i,comments:o,isLiked:a=!1,description:l,onClick:c,onLike:u,onDelete:d,isVid:f,onEdit:p,createdAt:m,authorAvatarUrl:y,showContent:w=!0,responsive:k,variant:x="grid",apiUrl:S})=>{const{user:_}=du(),A=gp.useNavigate(),{navigationData:T,setNavigationData:O,preloadImage:I}=txe(),[R,D]=U.useState(a),[W,H]=U.useState(i),[re,ae]=U.useState(!1),[de,le]=U.useState(!1),[X,se]=U.useState(!1),[J,$]=U.useState(!1),[ve,Pe]=U.useState(!1),[q,Xe]=U.useState(null),[qe,Ye]=U.useState(0),it=(_==null?void 0:_.id)===s;U.useEffect(()=>{(async()=>{if(!(!it||!_))try{const{data:ue}=await Yt.from("pictures").select("parent_id").eq("id",n).single();if(!ue)return;let ye=Yt.from("pictures").select("id",{count:"exact",head:!0});ue.parent_id?ye=ye.or(`parent_id.eq.${ue.parent_id},id.eq.${ue.parent_id}`):ye=ye.or(`parent_id.eq.${n},id.eq.${n}`);const{count:L}=await ye;Ye(L||1)}catch(ue){console.error("Error fetching version count:",ue)}})()},[n,it,_]);const We=async ne=>{if(ne.stopPropagation(),!_){at.toast.error(Be("Please sign in to like pictures"));return}try{if(R){const{error:ue}=await Yt.from("likes").delete().eq("user_id",_.id).eq("picture_id",n);if(ue)throw ue;D(!1),H(ye=>ye-1)}else{const{error:ue}=await Yt.from("likes").insert([{user_id:_.id,picture_id:n}]);if(ue)throw ue;D(!0),H(ye=>ye+1)}u==null||u()}catch(ue){console.error("Error toggling like:",ue),at.toast.error(Be("Failed to update like"))}},ot=async ne=>{if(ne.stopPropagation(),!_||!it){at.toast.error(Be("You can only delete your own images"));return}if(confirm(Be("Are you sure you want to delete this image? This action cannot be undone."))){le(!0);try{const{data:ue,error:ye}=await Yt.from("pictures").select("image_url").eq("id",n).single();if(ye)throw ye;const{error:L}=await Yt.from("pictures").delete().eq("id",n);if(L)throw L;if(ue!=null&&ue.image_url){const V=ue.image_url.split("/"),ie=V[V.length-1],he=V[V.length-2],{error:z}=await Yt.storage.from("pictures").remove([`${he}/${ie}`]);z&&console.error("Error deleting from storage:",z)}at.toast.success(Be("Image deleted successfully")),d==null||d()}catch(ue){console.error("Error deleting image:",ue),at.toast.error(Be("Failed to delete image"))}finally{le(!1)}}},ge=async()=>{try{const ne=Q6e(t);await Y6e(e,ne),at.toast.success(Be("Image downloaded successfully"))}catch(ne){console.error("Error downloading image:",ne),at.toast.error(Be("Failed to download image"))}},Ie=()=>{if(T){const ne=T.posts.findIndex(ue=>ue.id===n);ne!==-1&&O({...T,currentIndex:ne})}se(!0)},pt=ne=>{if(!T||!T.posts.length){at.toast.error(Be("No navigation data available"));return}const ue=ne==="next"?T.currentIndex+1:T.currentIndex-1;if(ue>=0&&ue<T.posts.length){const ye=T.posts[ue];O({...T,currentIndex:ue}),A(`/post/${ye.id}`)}else at.toast.info(Be(ne==="next"?"No next post available":"No previous post available"))},j=ne=>{if(!T)return;const ue=ne==="next"?T.currentIndex+1:T.currentIndex-1;if(ue>=0&&ue<T.posts.length){const ye=T.posts[ue];I(ye.image_url)}},Y=async ne=>{if(!ne.trim()){at.toast.error(Be("Please enter a prompt"));return}$(!0);try{const ye=await(await fetch(e)).blob(),L=new File([ye],t||"image.png",{type:ye.type||"image/png"}),V=await C2e(ne,[L]);if(V){const ie=new Uint8Array(V.imageData),he=new Blob([ie],{type:"image/png"}),z=new FileReader;z.onload=()=>{const B=z.result;Xe(B),at.toast.success(Be("Image generated successfully!"))},z.readAsDataURL(he)}}catch(ue){console.error("Error generating image:",ue),at.toast.error(Be("Failed to generate image. Please check your Google API key."))}finally{$(!1)}},ce=async(ne,ue,ye,L)=>{if(!_){at.toast.error(Be("Please sign in to publish images"));return}Pe(!0);try{const ie=await(await fetch(ue)).blob();if(ne==="overwrite"){const he=e;if(he.includes("supabase.co/storage/")){const z=he.split("/"),B=z[z.length-1],ee=`${s}/${B}`,{error:we}=await Yt.storage.from("pictures").update(ee,ie,{cacheControl:"0",upsert:!0});if(we)throw we;at.toast.success(Be("Image updated successfully!"))}else{at.toast.error(Be("Cannot overwrite this image"));return}}else{const he=`${_.id}/${Date.now()}-generated.png`,{data:z,error:B}=await Yt.storage.from("pictures").upload(he,ie);if(B)throw B;const{data:{publicUrl:ee}}=Yt.storage.from("pictures").getPublicUrl(he),{error:we}=await Yt.from("pictures").insert([{title:ye,description:L||Be("Generated from")+`: ${t}`,image_url:ee,user_id:_.id}]);if(we)throw we;at.toast.success(Be("Image published to gallery!"))}se(!1),Xe(null),u==null||u()}catch(V){console.error("Error publishing image:",V),at.toast.error(Be("Failed to publish image"))}finally{Pe(!1)}},be=ne=>{ne.preventDefault(),ne.stopPropagation(),c==null||c(n)},xe=ne=>{f?Ie():be(ne)};return b.jsxs("div",{"data-testid":"photo-card",className:"group relative overflow-hidden bg-card transition-all duration-300 cursor-pointer w-full",onClick:xe,children:[b.jsx("div",{className:`${x==="grid"?"aspect-square":""} overflow-hidden`,children:b.jsx(nb,{src:e,alt:t,className:"w-full h-full",imgClassName:"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105",sizes:x==="grid"?"(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw":"100vw",responsiveSizes:x==="grid"?[320,640,1024,1280]:[640,1024,1280,1920],data:k,apiUrl:S})}),w&&x==="grid"&&b.jsx("div",{className:"hidden md:block absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none",children:b.jsxs("div",{className:"absolute bottom-0 left-0 right-0 p-4 pointer-events-auto",children:[b.jsxs("div",{className:"flex items-center justify-between mb-2",children:[b.jsx("div",{className:"flex items-center space-x-2",children:b.jsx(qg,{userId:s,avatarUrl:y,displayName:r,hoverStyle:!0,showDate:!1})}),b.jsxs("div",{className:"flex items-center space-x-1",children:[b.jsx(yt,{size:"sm",variant:"ghost",onClick:We,className:`h-8 w-8 p-0 ${R?"text-red-500":"text-white hover:text-red-500"}`,children:b.jsx(Se.Heart,{className:"h-4 w-4",fill:R?"currentColor":"none"})}),W>0&&b.jsx("span",{className:"text-white text-sm",children:W}),b.jsx(yt,{size:"sm",variant:"ghost",className:"h-8 w-8 p-0 text-white hover:text-blue-400 ml-2",children:b.jsx(Se.MessageCircle,{className:"h-4 w-4"})}),b.jsx("span",{className:"text-white text-sm",children:o}),it&&b.jsxs(b.Fragment,{children:[b.jsx(yt,{size:"sm",variant:"ghost",onClick:ne=>{ne.stopPropagation(),p?p(n):ae(!0)},className:"h-8 w-8 p-0 text-white hover:text-green-400 ml-2",children:b.jsx(Se.Edit3,{className:"h-4 w-4"})}),b.jsx(yt,{size:"sm",variant:"ghost",onClick:ot,disabled:de,className:"h-8 w-8 p-0 text-white hover:text-red-400 ml-2",children:b.jsx(Se.Trash2,{className:"h-4 w-4"})}),qe>1&&b.jsxs("div",{className:"flex items-center ml-2 px-2 py-1 bg-white/20 rounded text-white text-xs",children:[b.jsx(Se.Layers,{className:"h-3 w-3 mr-1"}),qe]})]})]})]}),!f_(t)&&b.jsx("h3",{className:"text-white font-medium mb-1",children:t}),l&&b.jsx("div",{className:"text-white/80 text-sm mb-1 line-clamp-2 overflow-hidden",children:b.jsx(xp,{content:l,className:"prose-invert prose-white"})}),m&&b.jsx("div",{className:"text-white/60 text-xs mb-2",children:h_(m)}),b.jsxs("div",{className:"flex items-center space-x-1",children:[b.jsxs(yt,{size:"sm",variant:"secondary",className:"h-6 px-2 text-xs bg-white/20 hover:bg-white/30 border-0 text-white",onClick:ne=>{ne.stopPropagation(),ge()},children:[b.jsx(Se.Download,{className:"h-3 w-3 mr-1"}),b.jsx(St,{children:"Save"})]}),b.jsx(yt,{size:"sm",variant:"secondary",className:"h-6 w-6 p-0 bg-white/20 hover:bg-white/30 border-0 text-white",onClick:ne=>{ne.stopPropagation(),Ie()},title:"View in lightbox",children:b.jsx(Se.Maximize,{className:"h-2.5 w-2.5"})}),b.jsx(yt,{size:"sm",variant:"secondary",className:"h-6 w-6 p-0 bg-white/20 hover:bg-white/30 border-0 text-white",children:b.jsx(Se.Share2,{className:"h-2.5 w-2.5"})}),b.jsx(CU,{imageUrl:e,imageTitle:t,size:"sm",variant:"ghost",className:"h-6 px-2 text-xs bg-white/20 hover:bg-white/30 border-0 text-white"})]})]})}),w&&(x==="feed"||x==="grid"&&!0)&&b.jsxs("div",{className:`${x==="grid"?"md:hidden":""} pb-2 space-y-2`,children:[b.jsxs("div",{className:"flex items-center justify-between px-2 pt-2",children:[b.jsx(qg,{userId:s,avatarUrl:y,displayName:r==="User"?void 0:r,className:"w-8 h-8",showDate:!1}),b.jsxs("div",{className:"flex items-center gap-1",children:[b.jsx(yt,{size:"icon",variant:"ghost",onClick:We,className:R?"text-red-500 hover:text-red-600":"",children:b.jsx(Se.Heart,{className:"h-6 w-6",fill:R?"currentColor":"none"})}),W>0&&b.jsx("span",{className:"text-sm font-medium text-foreground mr-1",children:W}),b.jsx(yt,{size:"icon",variant:"ghost",className:"text-foreground",children:b.jsx(Se.MessageCircle,{className:"h-6 w-6 -rotate-90"})}),o>0&&b.jsx("span",{className:"text-sm font-medium text-foreground mr-1",children:o}),b.jsx(yt,{size:"icon",variant:"ghost",className:"text-foreground",onClick:ne=>{ne.stopPropagation(),ge()},children:b.jsx(Se.Download,{className:"h-6 w-6"})}),b.jsx(CU,{imageUrl:e,imageTitle:t,size:"icon",variant:"ghost",className:"text-foreground hover:text-primary"}),it&&b.jsx(yt,{size:"icon",variant:"ghost",onClick:ne=>{ne.stopPropagation(),p?p(n):ae(!0)},className:"text-foreground hover:text-green-400",children:b.jsx(Se.Edit3,{className:"h-6 w-6"})})]})]}),b.jsxs("div",{className:"px-4 space-y-1",children:[!f_(t)&&t&&b.jsx("div",{className:"font-semibold text-sm",children:t}),l&&b.jsx("div",{className:"text-sm text-foreground/90 line-clamp-3",children:b.jsx(xp,{content:l,className:"prose-sm dark:prose-invert"})}),m&&b.jsx("div",{className:"text-xs text-muted-foreground pt-1",children:h_(m)})]})]}),re&&b.jsx(M2e,{open:re,onOpenChange:ae,pictureId:n,currentTitle:t,currentDescription:l,currentVisible:!0,onUpdateSuccess:()=>{ae(!1),u==null||u()}}),b.jsx(F6e,{isOpen:X,onClose:()=>{se(!1),Xe(null)},imageUrl:q||e,imageTitle:t,onPromptSubmit:Y,onPublish:ce,isGenerating:J,isPublishing:ve,showPrompt:!0,showPublish:!!q,generatedImageUrl:q||void 0,currentIndex:T==null?void 0:T.currentIndex,totalCount:T==null?void 0:T.posts.length,onNavigate:pt,onPreload:j})]})},rl=typeof document>"u",rc=Symbol(0);let x5=!1,b_=!1,sl=null,Ug=null,ya=null,Ro=0,Wg=[],w_={};const mxe=()=>{},Gg=0,BU=1,k5=2,C5=3;function gxe(){x5=!0,queueMicrotask(VU)}function VU(){if(!Wg.length){x5=!1;return}b_=!0;for(let n=0;n<Wg.length;n++)Wg[n].$st!==Gg&&yxe(Wg[n]);Wg=[],x5=!1,b_=!1}function yxe(n){let e=[n];for(;n=n[rc];)n.$e&&n.$st!==Gg&&e.push(n);for(let t=e.length-1;t>=0;t--)T_(e[t])}function vxe(n){const e=wu();return u2(e,n.length?n.bind(null,Kg.bind(e)):n,null)}function Re(n){return u2(sl,n,null)}function Bp(n){return u2(null,n,null)}function il(){b_||VU()}function c2(){return sl}function ns(n,e){try{return u2(e,n,null)}catch(t){k_(e,t);return}}function x_(n,e=sl){return e==null?void 0:e.$cx[n]}function bxe(n,e,t=sl){t&&(t.$cx={...t.$cx,[n]:e})}function Qt(n){if(!n||!sl)return n||mxe;const e=sl;return e.$d?Array.isArray(e.$d)?e.$d.push(n):e.$d=[e.$d,n]:e.$d=n,function(){e.$st!==C5&&(n.call(null),S5(e.$d)?e.$d=null:Array.isArray(e.$d)&&e.$d.splice(e.$d.indexOf(n),1))}}function Kg(n=!0){if(this.$st!==C5){if(this.$h)if(Array.isArray(this.$h))for(let e=this.$h.length-1;e>=0;e--)Kg.call(this.$h[e]);else Kg.call(this.$h);if(n){const e=this[rc];e&&(Array.isArray(e.$h)?e.$h.splice(e.$h.indexOf(this),1):e.$h=null),wxe(this)}}}function wxe(n){n.$st=C5,n.$d&&zU(n),n.$s&&A_(n,0),n[rc]=null,n.$s=null,n.$o=null,n.$h=null,n.$cx=w_,n.$eh=null}function zU(n){try{if(Array.isArray(n.$d))for(let e=n.$d.length-1;e>=0;e--){const t=n.$d[e];t.call(t)}else n.$d.call(n.$d);n.$d=null}catch(e){k_(n,e)}}function u2(n,e,t){const r=sl,s=Ug;sl=n,Ug=t;try{return e.call(n)}finally{sl=r,Ug=s}}function k_(n,e){if(!n||!n.$eh)throw e;let t=0,r=n.$eh.length,s=e;for(t=0;t<r;t++)try{n.$eh[t](s);break}catch(i){s=i}if(t===r)throw s}function C_(){return this.$st===C5?this.$v:(Ug&&!this.$e&&(!ya&&Ug.$s&&Ug.$s[Ro]==this?Ro++:ya?ya.push(this):ya=[this]),this.$c&&T_(this),this.$v)}function HU(n){const e=S5(n)?n(this.$v):n;if(this.$ch(this.$v,e)&&(this.$v=e,this.$o))for(let t=0;t<this.$o.length;t++)GU(this.$o[t],k5);return this.$v}const S_=function(){this[rc]=null,this.$h=null,sl&&sl.append(this)},Vp=S_.prototype;Vp.$cx=w_,Vp.$eh=null,Vp.$c=null,Vp.$d=null,Vp.append=function(n){n[rc]=this,this.$h?Array.isArray(this.$h)?this.$h.push(n):this.$h=[this.$h,n]:this.$h=n,n.$cx=n.$cx===w_?this.$cx:{...this.$cx,...n.$cx},this.$eh&&(n.$eh=n.$eh?[...n.$eh,...this.$eh]:this.$eh)},Vp.dispose=function(){Kg.call(this)};function wu(){return new S_}const qU=function(e,t,r){S_.call(this),this.$st=t?k5:Gg,this.$i=!1,this.$e=!1,this.$s=null,this.$o=null,this.$v=e,t&&(this.$c=t),r&&r.dirty&&(this.$ch=r.dirty)},E_=qU.prototype;Object.setPrototypeOf(E_,Vp),E_.$ch=xxe,E_.call=C_;function __(n,e,t){return new qU(n,e,t)}function xxe(n,e){return n!==e}function S5(n){return typeof n=="function"}function T_(n){if(n.$st===BU)for(let e=0;e<n.$s.length&&(T_(n.$s[e]),n.$st!==k5);e++);n.$st===k5?UU(n):n.$st=Gg}function kxe(n){n.$h&&Kg.call(n,!1),n.$d&&zU(n),n.$eh=n[rc]?n[rc].$eh:null}function UU(n){let e=ya,t=Ro;ya=null,Ro=0;try{kxe(n);const r=u2(n,n.$c,n);WU(n),!n.$e&&n.$i?HU.call(n,r):(n.$v=r,n.$i=!0)}catch(r){WU(n),k_(n,r)}finally{ya=e,Ro=t,n.$st=Gg}}function WU(n){if(ya){if(n.$s&&A_(n,Ro),n.$s&&Ro>0){n.$s.length=Ro+ya.length;for(let t=0;t<ya.length;t++)n.$s[Ro+t]=ya[t]}else n.$s=ya;let e;for(let t=Ro;t<n.$s.length;t++)e=n.$s[t],e.$o?e.$o.push(n):e.$o=[n]}else n.$s&&Ro<n.$s.length&&(A_(n,Ro),n.$s.length=Ro)}function GU(n,e){if(!(n.$st>=e)&&(n.$e&&n.$st===Gg&&(Wg.push(n),x5||gxe()),n.$st=e,n.$o))for(let t=0;t<n.$o.length;t++)GU(n.$o[t],BU)}function A_(n,e){let t,r;for(let s=e;s<n.$s.length;s++)t=n.$s[s],t.$o&&(r=t.$o.indexOf(n),t.$o[r]=t.$o[t.$o.length-1],t.$o.pop())}function bt(n,e){const t=__(n,null,e),r=C_.bind(t);return r[rc]=!0,r.set=HU.bind(t),r}function Cxe(n){return S5(n)&&rc in n}function xu(n,e){const t=__(e==null?void 0:e.initial,n,e),r=C_.bind(t);return r[rc]=!0,r}function N_(n,e){const t=__(null,function(){let s=n();return S5(s)&&Qt(s),null},void 0);return t.$e=!0,UU(t),Kg.bind(t,!0)}function KU(n){return Cxe(n)&&"set"in n}function $o(...n){}function ol(n){return n===null}function Yr(n){return typeof n>"u"}function YU(n){return ol(n)||Yr(n)}function M_(n){return(n==null?void 0:n.constructor)===Object}function Ds(n){return typeof n=="number"&&!Number.isNaN(n)}function ut(n){return typeof n=="string"}function zp(n){return typeof n=="boolean"}function Ni(n){return typeof n=="function"}function qr(n){return Array.isArray(n)}const me=rl?Sxe:N_;function Sxe(n,e){var t;return typeof process<"u"&&((t=process.env)==null?void 0:t.NODE_ENV)==="test"?N_(n):$o}const Exe=rl?class{}:Event,ZU=Symbol("DOM_EVENT");class tn extends(uoe=Exe,coe=ZU,uoe){constructor(t,...r){var i,o;super(t,r[0]);G(this,coe,!0);G(this,"detail");G(this,"triggers",new _xe);this.detail=(i=r[0])==null?void 0:i.detail;const s=(o=r[0])==null?void 0:o.trigger;s&&this.triggers.add(s)}get trigger(){return this.triggers.source}get originEvent(){return this.triggers.origin}get isOriginTrusted(){var t;return((t=this.triggers.origin)==null?void 0:t.isTrusted)??!1}}class _xe{constructor(){G(this,"chain",[])}get source(){return this.chain[0]}get origin(){return this.chain[this.chain.length-1]}add(e){this.chain.push(e),Txe(e)&&this.chain.push(...e.triggers)}remove(e){return this.chain.splice(this.chain.indexOf(e),1)[0]}has(e){return this.chain.some(t=>t===e)}hasType(e){return!!this.findType(e)}findType(e){return this.chain.find(t=>t.type===e)}walk(e){for(const t of this.chain){const r=e(t);if(r)return[t,r]}}[Symbol.iterator](){return this.chain.values()}}function Txe(n){return!!(n!=null&&n[ZU])}class O_ extends EventTarget{constructor(){super(...arguments);G(this,"$ts__events")}addEventListener(t,r,s){return super.addEventListener(t,r,s)}removeEventListener(t,r,s){return super.removeEventListener(t,r,s)}}function Rn(n,e,t,r){return rl?$o:(n.addEventListener(e,t,r),Qt(()=>n.removeEventListener(e,t,r)))}class $n{constructor(e){N(this,ey);N(this,ty);M(this,ey,e),M(this,ty,new AbortController),Qt(this.abort.bind(this))}get signal(){return h(this,ty).signal}add(e,t,r){if(this.signal.aborted)throw Error("aborted");return h(this,ey).addEventListener(e,t,{...r,signal:r!=null&&r.signal?Axe(this.signal,r.signal):this.signal}),this}remove(e,t){return h(this,ey).removeEventListener(e,t),this}abort(e){h(this,ty).abort(e)}}ey=new WeakMap,ty=new WeakMap;function Axe(...n){const e=new AbortController,t={signal:e.signal};function r(s){e.abort(s.target.reason)}for(const s of n){if(s.aborted){e.abort(s.reason);break}s.addEventListener("abort",r,t)}return e.signal}function P_(n){return!!(n!=null&&n.type.startsWith("pointer"))}function d2(n){return!!(n!=null&&n.type.startsWith("touch"))}function XU(n){return/^(click|mouse)/.test((n==null?void 0:n.type)??"")}function h2(n){return!!(n!=null&&n.type.startsWith("key"))}function JU(n){return h2(n)&&n.key==="Enter"}function E5(n){return h2(n)&&(n.key==="Enter"||n.key===" ")}function QU(n){return n instanceof Node}function Rt(n,e,t){if(n)if(!t&&t!==""&&t!==0)n.removeAttribute(e);else{const r=t===!0?"":t+"";n.getAttribute(e)!==r&&n.setAttribute(e,r)}else return}function Mi(n,e,t){if(n)!t&&t!==0?n.style.removeProperty(e):n.style.setProperty(e,t+"");else return}function eW(n,e,t){n.classList[t?"add":"remove"](e)}function tW(n){let e=n;for(;typeof e=="function";)e=e.call(this);return e}function ku(n){return{id:Symbol(),provide:n}}function Lo(n,e,t=c2()){var s;const r=!Yr(e);bxe(n.id,r?e:(s=n.provide)==null?void 0:s.call(n),t)}function Ur(n){return x_(n.id)}function Cu(n){return!Yr(x_(n.id))}const I_=Symbol(0),D_=Symbol(0),_5=Symbol(0),R_={};doe=_5;class Nxe{constructor(e,t,r){N(this,Dc);G(this,"$ts__events");G(this,"$ts__vars");G(this,doe,null);G(this,"$el",bt(null));G(this,"el",null);G(this,"scope",null);G(this,"attachScope",null);G(this,"connectScope",null);G(this,"component",null);G(this,"destroyed",!1);G(this,"props",R_);G(this,"attrs",null);G(this,"styles",null);G(this,"state");G(this,"$state");N(this,ny,[]);N(this,ry,[]);N(this,z0,[]);N(this,sy,[]);var o;this.scope=t,r!=null&&r.scope&&r.scope.append(t);let s=e.state,i=e.props;if(s&&(this.$state=s.create(),this.state=new Proxy(this.$state,{get:(a,l)=>this.$state[l]()}),Lo(s,this.$state)),i&&(this.props=Mxe(i),r!=null&&r.props))for(const a of Object.keys(r.props))(o=this.props[a])==null||o.set(r.props[a]);Qt(this.destroy.bind(this))}setup(){ns(()=>{for(const e of h(this,ny))e()},this.scope)}attach(e){this.el||(this.el=e,this.$el.set(e),ns(()=>{this.attachScope=wu(),ns(()=>{for(const t of h(this,ry))t(this.el);v(this,Dc,Noe).call(this),v(this,Dc,Moe).call(this)},this.attachScope)},this.scope),e.dispatchEvent(new Event("attached")))}detach(){var e;(e=this.attachScope)==null||e.dispose(),this.attachScope=null,this.connectScope=null,this.el=null,this.$el.set(null)}connect(){!this.el||!this.attachScope||!h(this,z0).length||ns(()=>{this.connectScope=wu(),ns(()=>{for(const e of h(this,z0))e(this.el)},this.connectScope)},this.attachScope)}disconnect(){var e;(e=this.connectScope)==null||e.dispose(),this.connectScope=null}destroy(){if(this.destroyed)return;this.destroyed=!0,ns(()=>{for(const t of h(this,sy))t(this.el)},this.scope);const e=this.el;this.detach(),this.scope.dispose(),h(this,ny).length=0,h(this,ry).length=0,h(this,z0).length=0,h(this,sy).length=0,this.component=null,this.attrs=null,this.styles=null,this.props=R_,this.scope=null,this.state=R_,this.$state=null,e&&delete e.$}addHooks(e){e.onSetup&&h(this,ny).push(e.onSetup.bind(e)),e.onAttach&&h(this,ry).push(e.onAttach.bind(e)),e.onConnect&&h(this,z0).push(e.onConnect.bind(e)),e.onDestroy&&h(this,sy).push(e.onDestroy.bind(e))}}ny=new WeakMap,ry=new WeakMap,z0=new WeakMap,sy=new WeakMap,Dc=new WeakSet,Noe=function(){if(this.attrs)for(const e of Object.keys(this.attrs))rl?Rt(this.el,e,tW.call(this.component,this.attrs[e])):Ni(this.attrs[e])?me(v(this,Dc,Ooe).bind(this,e)):Rt(this.el,e,this.attrs[e])},Moe=function(){if(this.styles)for(const e of Object.keys(this.styles))rl?Mi(this.el,e,tW.call(this.component,this.styles[e])):Ni(this.styles[e])?me(v(this,Dc,Poe).bind(this,e)):Mi(this.el,e,this.styles[e])},Ooe=function(e){Rt(this.el,e,this.attrs[e].call(this.component))},Poe=function(e){Mi(this.el,e,this.styles[e].call(this.component))};function Mxe(n){const e={};for(const t of Object.keys(n)){const r=n[t];e[t]=bt(r,r)}return e}let f2={$$:null};function nW(n,e){return vxe(()=>{f2.$$=new Nxe(n,c2(),e);const t=new n;return f2.$$.component=t,f2.$$=null,t})}class Fo extends EventTarget{constructor(){super();G(this,"$$");f2.$$&&this.attach(f2)}get el(){return this.$$.el}get $el(){return this.$$.$el()}get scope(){return this.$$.scope}get attachScope(){return this.$$.attachScope}get connectScope(){return this.$$.connectScope}get $props(){return this.$$.props}get $state(){return this.$$.$state}get state(){return this.$$.state}attach({$$:t}){return this.$$=t,t.addHooks(this),this}addEventListener(t,r,s){this.listen(t,r,s)}removeEventListener(t,r,s){var i;(i=this.el)==null||i.removeEventListener(t,r,s)}setAttributes(t){this.$$.attrs||(this.$$.attrs={}),Object.assign(this.$$.attrs,t)}setStyles(t){this.$$.styles||(this.$$.styles={}),Object.assign(this.$$.styles,t)}setCSSVars(t){this.setStyles(t)}createEvent(t,...r){return new tn(t,r[0])}dispatch(t,...r){if(rl||!this.el)return!1;const s=t instanceof Event?t:new tn(t,r[0]);return Object.defineProperty(s,"target",{get:()=>this.$$.component}),Bp(()=>{var i,o;return(o=(i=this.$$)[_5])==null||o.call(i,s),this.el.dispatchEvent(s)})}dispatchEvent(t){return this.dispatch(t)}listen(t,r,s){return rl||!this.el?$o:Rn(this.el,t,r,s)}}class un extends Fo{subscribe(e){return ns(()=>me(()=>e(this.state)),this.$$.scope)}destroy(){this.$$.destroy()}}function nr(n,e,t){n[I_]||(n[I_]=new Set),n[I_].add(e)}function Rs(n,e,t){n[D_]||(n[D_]=new Set),n[D_].add(e)}class Su{constructor(e){G(this,"id",Symbol(0));G(this,"record");N(this,iy);this.record=e,M(this,iy,Object.getOwnPropertyDescriptors(e))}create(){const e={},t=new Proxy(e,{get:(r,s)=>e[s]()});for(const r of Object.keys(this.record)){const s=h(this,iy)[r].get;e[r]=s?xu(s.bind(t)):bt(this.record[r])}return e}reset(e,t){for(const r of Object.keys(e))!h(this,iy)[r].get&&(!t||t(r))&&e[r].set(this.record[r])}}iy=new WeakMap;function Yg(n){return Ur(n)}function sc(n){return n.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function $_(n){return n.replace(/-./g,e=>e[1].toUpperCase())}function Oxe(n){return Pxe(n).replace(/\s/g,"")}function Pxe(n){return Zg(n.replace(/-./g,e=>" "+e[1].toUpperCase()))}function Zg(n){return n.charAt(0).toUpperCase()+n.slice(1)}const p2=g.createContext({current:null});p2.displayName="Scope";function rW(n,...e){return g.createElement(p2.Provider,{value:n},...e)}function Xg(){return g.useContext(p2).current}function L_(n){const e=Xg();return g.useMemo(()=>x_(n.id,e),[e])}function sW(n,e){typeof n=="function"?n(e):n&&(n.current=e)}function Qn(...n){return e=>n.forEach(t=>sW(t,e))}function Ixe(n,e){const t=g.forwardRef((r,s)=>{var w,k,x,S,_,A,T,O;let i=g.useContext(p2),o=g.useRef(null),a=g.useRef();if(!a.current){const I=Rxe(),R=aW(n,I,r,i.current);I.component=R,a.current=I,o.current=R.scope}function l(){let I=a.current,R=i.current;if(window.cancelAnimationFrame(I.destroyId),I.destroyId=-1,I.component.$$.destroyed){const D=aW(n,I,r,R);I.component=D,I.attached=!1,I.forwardRef=!1,o.current=D.scope}return I.el&&oW(I,I.el),I.forwardRef||(sW(s,I.component),I.forwardRef=!0),()=>T5(I)}function c(I){const R=a.current;if(!R.forwardRef){R.el=I;return}window.cancelAnimationFrame(R.refChangeId),R.refChangeId=window.requestAnimationFrame(()=>{const D=a.current;D.refChangeId=-1,D.el!==I&&(T5(D),I&&oW(D,I),D.el=I)})}g.useEffect(()=>{const I=a.current;return window.cancelAnimationFrame(I.destroyId),I.destroyId=-1,function(){Ni(r.children)&&(window.cancelAnimationFrame(I.refChangeId),I.refChangeId=-1,window.cancelAnimationFrame(I.connectId),I.connectId=-1,window.cancelAnimationFrame(I.destroyId),I.destroyId=window.requestAnimationFrame(()=>{I.destroyId=-1,T5(I),I.component.$$.destroy(),I.component.$$[_5]=null,I.callbacks={},I.domCallbacks={},o.current=null}))}},[]),g.useEffect(il);let u=a.current,{children:d,...f}=r,p={},m=u.prevProps,y=Object.keys(f);u.callbacks={};for(const I of[...m,...y])if(e.props.has(I))u.component.$props[I].set(Yr(f[I])?(w=n.props)==null?void 0:w[I]:f[I]);else if((k=e.events)!=null&&k.has(I)||(x=e.eventsRE)!=null&&x.test(I))u.callbacks[I]=f[I];else if((S=e.domEvents)!=null&&S.has(I)||(_=e.domEventsRE)!=null&&_.test(I)){let R=sc(I.slice(2));u.domCallbacks[R]=f[I],y.includes(I)?u.el&&!((O=u.listening)!=null&&O.has(R))&&(u.listening||(u.listening=new Set),u.listening.add(R),u.el.addEventListener(R,u.onDOMEvent)):((A=u.el)==null||A.removeEventListener(R,u.onDOMEvent),(T=u.listening)==null||T.delete(R))}else p[I]=f[I];return u.prevProps=y,rW(o,g.createElement(Dxe,{effect:l}),Ni(d)?d==null?void 0:d({...p,suppressHydrationWarning:!0,ref:c},u.component):d)});return t.displayName=n.name+"Bridge",t}function Dxe({effect:n}){return g.useEffect(n,[]),null}const iW=new Map;function Rxe(){const n={el:null,prevProps:[],callbacks:{},domCallbacks:{},refChangeId:-1,connectId:-1,destroyId:-1,attached:!1,forwardRef:!1,listening:null,onDOMEvent(e){var r,s;const t=Yr(e.detail)?[e]:[e.detail,e];(s=(r=n.domCallbacks)[e.type])==null||s.call(r,...t)}};return n}function oW(n,e){if(!(n.el===e&&n.attached)){if(n.attached&&T5(n),n.domCallbacks){n.listening||(n.listening=new Set);for(const t of Object.keys(n.domCallbacks))n.listening.has(t)||(e.addEventListener(t,n.onDOMEvent),n.listening.add(t))}n.component.$$.attach(e),n.connectId=window.requestAnimationFrame(()=>{n.component.$$.connect(),n.connectId=-1}),n.attached=!0}}function T5(n){if(n.attached&&(window.cancelAnimationFrame(n.connectId),n.connectId=-1,n.component.$$.detach(),n.attached=!1,n.el&&n.listening)){for(const e of n.listening)n.el.removeEventListener(e,n.onDOMEvent);n.listening.clear()}}function $xe(n){var r,s;let e=iW.get(n.type),t=Yr(n.detail)?[n]:[n.detail,n];e||iW.set(n.type,e=`on${Oxe(n.type)}`),(s=(r=this.callbacks)[e])==null||s.call(r,...t)}function aW(n,e,t,r){const s=nW(n,{props:t,scope:r});return s.$$[_5]=$xe.bind(e),s.$$.setup(),s}function lW(n,e=!1){const t=typeof n;if(t!=="string")return!e&&t==="function"?lW(n()):e&&t==="boolean"?n+"":n;const r=e?'"':"<",s=e?""":"<";let i=n.indexOf(r),o=n.indexOf("&");if(i<0&&o<0)return n;let a=0,l="";for(;i>=0&&o>=0;)i<o?(a<i&&(l+=n.substring(a,i)),l+=s,a=i+1,i=n.indexOf(r,a)):(a<o&&(l+=n.substring(a,o)),l+="&",a=o+1,o=n.indexOf("&",a));if(i>=0)do a<i&&(l+=n.substring(a,i)),l+=s,a=i+1,i=n.indexOf(r,a);while(i>=0);else for(;o>=0;)a<o&&(l+=n.substring(a,o)),l+="&",a=o+1,o=n.indexOf("&",a);return a<n.length?l+n.substring(a):l}const Lxe=Symbol(0),Fxe=/\s+/;function jxe(n,e){const t=e.trim().split(Fxe);for(const r of t)n.add(r)}const Bxe=/\s*:\s*/,Vxe=/\s*;\s*/;function zxe(n,e){const t=e.trim().split(Vxe);for(let r=0;r<t.length;r++){if(t[r]==="")continue;const[s,i]=t[r].split(Bxe);n.set(s,i)}}class Hxe{constructor(e){G(this,"keepAlive",!1);G(this,"forwardKeepAlive",!0);G(this,"$");G(this,"attributes",new qxe);G(this,"style",new Uxe);G(this,"classList",new Wxe);this.$=e}get $props(){return this.$.$$.props}get $state(){return this.$.$$.$state}get state(){return this.$.state}setup(){const e=this.$.$$;ns(()=>{this.hasAttribute("class")&&jxe(this.classList.tokens,this.getAttribute("class")),this.hasAttribute("style")&&zxe(this.style.tokens,this.getAttribute("style")),e.setup(),e.attach(this),this.classList.length>0&&this.setAttribute("class",this.classList.toString()),this.style.length>0&&this.setAttribute("style",this.style.toString()),this.keepAlive&&this.setAttribute("keep-alive","")},e.scope)}getAttribute(e){return this.attributes.getAttribute(e)}setAttribute(e,t){this.attributes.setAttribute(e,t)}hasAttribute(e){return this.attributes.hasAttribute(e)}removeAttribute(e){return this.attributes.removeAttribute(e)}[Lxe](){}addEventListener(){}removeEventListener(){}dispatchEvent(){return!1}subscribe(){return $o}destroy(){this.$.destroy()}}class qxe{constructor(){N(this,El,new Map)}get length(){return h(this,El).size}get tokens(){return h(this,El)}getAttribute(e){return h(this,El).get(e)??null}hasAttribute(e){return h(this,El).has(e)}setAttribute(e,t){h(this,El).set(e,t+"")}removeAttribute(e){h(this,El).delete(e)}toString(){if(h(this,El).size===0)return"";let e="";for(const[t,r]of h(this,El))e+=` ${t}="${lW(r,!0)}"`;return e}}El=new WeakMap;class Uxe{constructor(){N(this,_l,new Map)}get length(){return h(this,_l).size}get tokens(){return h(this,_l)}getPropertyValue(e){return h(this,_l).get(e)??""}setProperty(e,t){h(this,_l).set(e,t??"")}removeProperty(e){const t=h(this,_l).get(e);return h(this,_l).delete(e),t??""}toString(){if(h(this,_l).size===0)return"";let e="";for(const[t,r]of h(this,_l))e+=`${t}: ${r};`;return e}}_l=new WeakMap;class Wxe{constructor(){N(this,qi,new Set)}get length(){return h(this,qi).size}get tokens(){return h(this,qi)}add(...e){for(const t of e)h(this,qi).add(t)}contains(e){return h(this,qi).has(e)}remove(e){h(this,qi).delete(e)}replace(e,t){return h(this,qi).has(e)?(h(this,qi).delete(e),h(this,qi).add(t),!0):!1}toggle(e,t){return t!==!0&&(h(this,qi).has(e)||t===!1)?(h(this,qi).delete(e),!1):(h(this,qi).add(e),!0)}toString(){return Array.from(h(this,qi)).join(" ")}}qi=new WeakMap;const Gxe={acceptcharset:"acceptCharset","accept-charset":"acceptCharset",accesskey:"accessKey",allowfullscreen:"allowFullScreen",autocapitalize:"autoCapitalize",autocomplete:"autoComplete",autocorrect:"autoCorrect",autofocus:"autoFocus",autoplay:"autoPlay",autosave:"autoSave",cellpadding:"cellPadding",cellspacing:"cellSpacing",charset:"charSet",class:"className",classid:"classID",classname:"className",colspan:"colSpan",contenteditable:"contentEditable",contextmenu:"contextMenu",controlslist:"controlsList",crossorigin:"crossOrigin",dangerouslysetinnerhtml:"dangerouslySetInnerHTML",datetime:"dateTime",defaultchecked:"defaultChecked",defaultvalue:"defaultValue",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback",enctype:"encType",enterkeyhint:"enterKeyHint",fetchpriority:"fetchPriority",for:"htmlFor",formmethod:"formMethod",formaction:"formAction",formenctype:"formEncType",formnovalidate:"formNoValidate",formtarget:"formTarget",frameborder:"frameBorder",hreflang:"hrefLang",htmlfor:"htmlFor",httpequiv:"httpEquiv","http-equiv":"httpEquiv",imagesizes:"imageSizes",imagesrcset:"imageSrcSet",innerhtml:"innerHTML",inputmode:"inputMode",itemid:"itemID",itemprop:"itemProp",itemref:"itemRef",itemscope:"itemScope",itemtype:"itemType",keyparams:"keyParams",keytype:"keyType",marginwidth:"marginWidth",marginheight:"marginHeight",maxlength:"maxLength",mediagroup:"mediaGroup",minlength:"minLength",nomodule:"noModule",novalidate:"noValidate",playsinline:"playsInline",radiogroup:"radioGroup",readonly:"readOnly",referrerpolicy:"referrerPolicy",rowspan:"rowSpan",spellcheck:"spellCheck",srcdoc:"srcDoc",srclang:"srcLang",srcset:"srcSet",tabindex:"tabIndex",usemap:"useMap"};function Kxe(n,e){function t(r){let s=g.useContext(p2),i=nW(n,{props:r,scope:s.current}),o=new Hxe(i),a={},{style:l={},children:c,forwardRef:u,...d}=r;if(e.props.size)for(const f of Object.keys(d))e.props.has(f)||(a[f]=d[f]);else a=d;if(o.setup(),o.hasAttribute("style")){for(const[f,p]of o.style.tokens)l[f.startsWith("--")?f:$_(f)]=p;o.removeAttribute("style")}for(const[f,p]of o.attributes.tokens){const m=Gxe[f];m&&(m in a||(a[m]=p),o.removeAttribute(f))}return rW({current:i.$$.scope},Ni(c)?c==null?void 0:c({...Object.fromEntries(o.attributes.tokens),...a,style:l},i):c,g.createElement(()=>(o.destroy(),null)))}return t.displayName=n.name+"Bridge",t}function Jg(n){return L_(n)}function dn(n,e){const[,t]=g.useState();return g.useEffect(()=>N_(()=>{n(),t({})}),[e??n]),n()}function m2(n){return n?"true":"false"}function A5(n){return Object.keys(n)}function Hp(){let n,e;return{promise:new Promise((r,s)=>{n=r,e=s}),resolve:n,reject:e}}function cW(n){return new Promise(e=>setTimeout(e,n))}function dh(n){if(rl)return $o;let e=-1,t;function r(...s){t=s,!(e>=0)&&(e=window.requestAnimationFrame(()=>{n.apply(this,t),e=-1,t=void 0}))}return r}const Yxe=rl?$o:typeof window<"u"?"requestIdleCallback"in window?window.requestIdleCallback:n=>window.setTimeout(n,1):$o;function uW(n,e){return rl?Promise.resolve():new Promise(t=>{Yxe(r=>{n==null||n(r),t()},e)})}function hn(n,e){return rl?Kxe(n,{props:new Set(Object.keys(n.props||{}))}):Ixe(n,{props:new Set(Object.keys(n.props||{})),events:new Set(e==null?void 0:e.events),eventsRE:e==null?void 0:e.eventsRegex,domEvents:e==null?void 0:e.domEvents,domEventsRE:e==null?void 0:e.domEventsRegex})}var jo={fullscreenEnabled:0,fullscreenElement:1,requestFullscreen:2,exitFullscreen:3,fullscreenchange:4,fullscreenerror:5,fullscreen:6},dW=["webkitFullscreenEnabled","webkitFullscreenElement","webkitRequestFullscreen","webkitExitFullscreen","webkitfullscreenchange","webkitfullscreenerror","-webkit-full-screen"],hW=["mozFullScreenEnabled","mozFullScreenElement","mozRequestFullScreen","mozCancelFullScreen","mozfullscreenchange","mozfullscreenerror","-moz-full-screen"],fW=["msFullscreenEnabled","msFullscreenElement","msRequestFullscreen","msExitFullscreen","MSFullscreenChange","MSFullscreenError","-ms-fullscreen"],eo=typeof window<"u"&&typeof window.document<"u"?window.document:{},va="fullscreenEnabled"in eo&&Object.keys(jo)||dW[0]in eo&&dW||hW[0]in eo&&hW||fW[0]in eo&&fW||[],hh={requestFullscreen:function(n){return n[va[jo.requestFullscreen]]()},requestFullscreenFunction:function(n){return n[va[jo.requestFullscreen]]},get exitFullscreen(){return eo[va[jo.exitFullscreen]].bind(eo)},get fullscreenPseudoClass(){return":"+va[jo.fullscreen]},addEventListener:function(n,e,t){return eo.addEventListener(va[jo[n]],e,t)},removeEventListener:function(n,e,t){return eo.removeEventListener(va[jo[n]],e,t)},get fullscreenEnabled(){return!!eo[va[jo.fullscreenEnabled]]},set fullscreenEnabled(n){},get fullscreenElement(){return eo[va[jo.fullscreenElement]]},set fullscreenElement(n){},get onfullscreenchange(){return eo[("on"+va[jo.fullscreenchange]).toLowerCase()]},set onfullscreenchange(n){return eo[("on"+va[jo.fullscreenchange]).toLowerCase()]=n},get onfullscreenerror(){return eo[("on"+va[jo.fullscreenerror]).toLowerCase()]},set onfullscreenerror(n){return eo[("on"+va[jo.fullscreenerror]).toLowerCase()]=n}},fh=Zxe;function Zxe(n,e,t){var r=null,s=null,i=t&&t.leading,o=t&&t.trailing;i==null&&(i=!0),o==null&&(o=!i),i==!0&&(o=!1);var a=function(){r&&(clearTimeout(r),r=null)},l=function(){var u=s;a(),u&&u()},c=function(){var u=i&&!r,d=this,f=arguments;if(s=function(){return n.apply(d,f)},r||(r=setTimeout(function(){if(r=null,o)return s()},e)),u)return u=!1,s()};return c.cancel=a,c.flush=l,c}var N5=Xxe;function Xxe(n,e,t){var r=null,s=null,i=function(){r&&(clearTimeout(r),s=null,r=null)},o=function(){var l=s;i(),l&&l()},a=function(){if(!e)return n.apply(this,arguments);var l=this,c=arguments,u=t&&!r;if(i(),s=function(){n.apply(l,c)},r=setTimeout(function(){if(r=null,!u){var d=s;return s=null,d()}},e),u)return s()};return a.cancel=i,a.flush=o,a}const pW=n=>typeof n=="object"&&n!=null&&n.nodeType===1,mW=(n,e)=>(!e||n!=="hidden")&&n!=="visible"&&n!=="clip",M5=(n,e)=>{if(n.clientHeight<n.scrollHeight||n.clientWidth<n.scrollWidth){const t=getComputedStyle(n,null);return mW(t.overflowY,e)||mW(t.overflowX,e)||(r=>{const s=(i=>{if(!i.ownerDocument||!i.ownerDocument.defaultView)return null;try{return i.ownerDocument.defaultView.frameElement}catch{return null}})(r);return!!s&&(s.clientHeight<r.scrollHeight||s.clientWidth<r.scrollWidth)})(n)}return!1},O5=(n,e,t,r,s,i,o,a)=>i<n&&o>e||i>n&&o<e?0:i<=n&&a<=t||o>=e&&a>=t?i-n-r:o>e&&a<t||i<n&&a>t?o-e+s:0,Jxe=n=>{const e=n.parentElement;return e??(n.getRootNode().host||null)},gW=(n,e)=>{var t,r,s,i;if(typeof document>"u")return[];const{scrollMode:o,block:a,inline:l,boundary:c,skipOverflowHiddenElements:u}=e,d=typeof c=="function"?c:le=>le!==c;if(!pW(n))throw new TypeError("Invalid target");const f=document.scrollingElement||document.documentElement,p=[];let m=n;for(;pW(m)&&d(m);){if(m=Jxe(m),m===f){p.push(m);break}m!=null&&m===document.body&&M5(m)&&!M5(document.documentElement)||m!=null&&M5(m,u)&&p.push(m)}const y=(r=(t=window.visualViewport)==null?void 0:t.width)!=null?r:innerWidth,w=(i=(s=window.visualViewport)==null?void 0:s.height)!=null?i:innerHeight,{scrollX:k,scrollY:x}=window,{height:S,width:_,top:A,right:T,bottom:O,left:I}=n.getBoundingClientRect(),{top:R,right:D,bottom:W,left:H}=(le=>{const X=window.getComputedStyle(le);return{top:parseFloat(X.scrollMarginTop)||0,right:parseFloat(X.scrollMarginRight)||0,bottom:parseFloat(X.scrollMarginBottom)||0,left:parseFloat(X.scrollMarginLeft)||0}})(n);let re=a==="start"||a==="nearest"?A-R:a==="end"?O+W:A+S/2-R+W,ae=l==="center"?I+_/2-H+D:l==="end"?T+D:I-H;const de=[];for(let le=0;le<p.length;le++){const X=p[le],{height:se,width:J,top:$,right:ve,bottom:Pe,left:q}=X.getBoundingClientRect();if(o==="if-needed"&&A>=0&&I>=0&&O<=w&&T<=y&&(X===f&&!M5(X)||A>=$&&O<=Pe&&I>=q&&T<=ve))return de;const Xe=getComputedStyle(X),qe=parseInt(Xe.borderLeftWidth,10),Ye=parseInt(Xe.borderTopWidth,10),it=parseInt(Xe.borderRightWidth,10),We=parseInt(Xe.borderBottomWidth,10);let ot=0,ge=0;const Ie="offsetWidth"in X?X.offsetWidth-X.clientWidth-qe-it:0,pt="offsetHeight"in X?X.offsetHeight-X.clientHeight-Ye-We:0,j="offsetWidth"in X?X.offsetWidth===0?0:J/X.offsetWidth:0,Y="offsetHeight"in X?X.offsetHeight===0?0:se/X.offsetHeight:0;if(f===X)ot=a==="start"?re:a==="end"?re-w:a==="nearest"?O5(x,x+w,w,Ye,We,x+re,x+re+S,S):re-w/2,ge=l==="start"?ae:l==="center"?ae-y/2:l==="end"?ae-y:O5(k,k+y,y,qe,it,k+ae,k+ae+_,_),ot=Math.max(0,ot+x),ge=Math.max(0,ge+k);else{ot=a==="start"?re-$-Ye:a==="end"?re-Pe+We+pt:a==="nearest"?O5($,Pe,se,Ye,We+pt,re,re+S,S):re-($+se/2)+pt/2,ge=l==="start"?ae-q-qe:l==="center"?ae-(q+J/2)+Ie/2:l==="end"?ae-ve+it+Ie:O5(q,ve,J,qe,it+Ie,ae,ae+_,_);const{scrollLeft:ce,scrollTop:be}=X;ot=Y===0?0:Math.max(0,Math.min(be+ot/Y,X.scrollHeight-se/Y+pt)),ge=j===0?0:Math.max(0,Math.min(ce+ge/j,X.scrollWidth-J/j+Ie)),re+=be-ot,ae+=ce-ge}de.push({el:X,top:ot,left:ge})}return de};var yW='<path fill-rule="evenodd" clip-rule="evenodd" d="M15.0007 28.7923C15.0007 29.0152 14.9774 29.096 14.9339 29.1775C14.8903 29.259 14.8263 29.323 14.7449 29.3665C14.6634 29.4101 14.5826 29.4333 14.3597 29.4333H12.575C12.3521 29.4333 12.2713 29.4101 12.1898 29.3665C12.1083 29.323 12.0443 29.259 12.0008 29.1775C11.9572 29.096 11.934 29.0152 11.934 28.7923V12.2993L5.97496 12.3C5.75208 12.3 5.67125 12.2768 5.58977 12.2332C5.50829 12.1896 5.44434 12.1257 5.40077 12.0442C5.35719 11.9627 5.33398 11.8819 5.33398 11.659V9.87429C5.33398 9.65141 5.35719 9.57059 5.40077 9.48911C5.44434 9.40762 5.50829 9.34368 5.58977 9.3001C5.67125 9.25652 5.75208 9.23332 5.97496 9.23332H26.0263C26.2492 9.23332 26.33 9.25652 26.4115 9.3001C26.493 9.34368 26.557 9.40762 26.6005 9.48911C26.6441 9.57059 26.6673 9.65141 26.6673 9.87429V11.659C26.6673 11.8819 26.6441 11.9627 26.6005 12.0442C26.557 12.1257 26.493 12.1896 26.4115 12.2332C26.33 12.2768 26.2492 12.3 26.0263 12.3L20.067 12.2993L20.0673 28.7923C20.0673 29.0152 20.0441 29.096 20.0005 29.1775C19.957 29.259 19.893 29.323 19.8115 29.3665C19.73 29.4101 19.6492 29.4333 19.4263 29.4333H17.6416C17.4187 29.4333 17.3379 29.4101 17.2564 29.3665C17.175 29.323 17.111 29.259 17.0674 29.1775C17.0239 29.096 17.0007 29.0152 17.0007 28.7923L17 22.7663H15L15.0007 28.7923Z" fill="currentColor"/> <path d="M16.0007 7.89998C17.4734 7.89998 18.6673 6.70608 18.6673 5.23332C18.6673 3.76056 17.4734 2.56665 16.0007 2.56665C14.5279 2.56665 13.334 3.76056 13.334 5.23332C13.334 6.70608 14.5279 7.89998 16.0007 7.89998Z" fill="currentColor"/>',vW='<path d="M5.33334 6.00001C5.33334 5.63182 5.63181 5.33334 6 5.33334H26C26.3682 5.33334 26.6667 5.63182 26.6667 6.00001V20.6667C26.6667 21.0349 26.3682 21.3333 26 21.3333H23.7072C23.4956 21.3333 23.2966 21.233 23.171 21.0628L22.1859 19.7295C21.8607 19.2894 22.1749 18.6667 22.7221 18.6667H23.3333C23.7015 18.6667 24 18.3682 24 18V8.66668C24 8.29849 23.7015 8.00001 23.3333 8.00001H8.66667C8.29848 8.00001 8 8.29849 8 8.66668V18C8 18.3682 8.29848 18.6667 8.66667 18.6667H9.29357C9.84072 18.6667 10.1549 19.2894 9.82976 19.7295L8.84467 21.0628C8.71898 21.233 8.52 21.3333 8.30848 21.3333H6C5.63181 21.3333 5.33334 21.0349 5.33334 20.6667V6.00001Z" fill="currentColor"/> <path d="M8.78528 25.6038C8.46013 26.0439 8.77431 26.6667 9.32147 26.6667L22.6785 26.6667C23.2256 26.6667 23.5398 26.0439 23.2146 25.6038L16.5358 16.5653C16.2693 16.2046 15.73 16.2047 15.4635 16.5653L8.78528 25.6038Z" fill="currentColor"/>',F_='<path d="M17.4853 18.9093C17.4853 19.0281 17.6289 19.0875 17.7129 19.0035L22.4185 14.2979C22.6788 14.0376 23.1009 14.0376 23.3613 14.2979L24.7755 15.7122C25.0359 15.9725 25.0359 16.3946 24.7755 16.655L16.2902 25.1403C16.0299 25.4006 15.6078 25.4006 15.3474 25.1403L13.9332 23.726L13.9319 23.7247L6.86189 16.6547C6.60154 16.3944 6.60154 15.9723 6.86189 15.7119L8.2761 14.2977C8.53645 14.0373 8.95856 14.0373 9.21891 14.2977L13.9243 19.0031C14.0083 19.0871 14.1519 19.0276 14.1519 18.9088L14.1519 6.00004C14.1519 5.63185 14.4504 5.33337 14.8186 5.33337L16.8186 5.33337C17.1868 5.33337 17.4853 5.63185 17.4853 6.00004L17.4853 18.9093Z" fill="currentColor"/>',bW='<path d="M13.0908 14.3334C12.972 14.3334 12.9125 14.1898 12.9965 14.1058L17.7021 9.40022C17.9625 9.13987 17.9625 8.71776 17.7021 8.45741L16.2879 7.04319C16.0275 6.78284 15.6054 6.78284 15.3451 7.04319L6.8598 15.5285C6.59945 15.7888 6.59945 16.2109 6.8598 16.4713L8.27401 17.8855L8.27536 17.8868L15.3453 24.9568C15.6057 25.2172 16.0278 25.2172 16.2881 24.9568L17.7024 23.5426C17.9627 23.2822 17.9627 22.8601 17.7024 22.5998L12.9969 17.8944C12.9129 17.8104 12.9724 17.6668 13.0912 17.6668L26 17.6668C26.3682 17.6668 26.6667 17.3683 26.6667 17.0001V15.0001C26.6667 14.6319 26.3682 14.3334 26 14.3334L13.0908 14.3334Z" fill="currentColor"/>',j_='<path d="M14.1521 13.0929C14.1521 12.9741 14.0085 12.9147 13.9245 12.9987L9.21891 17.7043C8.95856 17.9646 8.53645 17.9646 8.2761 17.7043L6.86189 16.29C6.60154 16.0297 6.60154 15.6076 6.86189 15.3472L15.3472 6.86195C15.6075 6.6016 16.0296 6.6016 16.29 6.86195L17.7042 8.27616L17.7055 8.27751L24.7755 15.3475C25.0359 15.6078 25.0359 16.0299 24.7755 16.2903L23.3613 17.7045C23.1009 17.9649 22.6788 17.9649 22.4185 17.7045L17.7131 12.9991C17.6291 12.9151 17.4855 12.9746 17.4855 13.0934V26.0022C17.4855 26.3704 17.187 26.6688 16.8188 26.6688H14.8188C14.4506 26.6688 14.1521 26.3704 14.1521 26.0022L14.1521 13.0929Z" fill="currentColor"/>',wW='<path d="M16.6927 25.3346C16.3245 25.3346 16.026 25.0361 16.026 24.6679L16.026 7.3346C16.026 6.96641 16.3245 6.66794 16.6927 6.66794L18.6927 6.66794C19.0609 6.66794 19.3594 6.96642 19.3594 7.3346L19.3594 24.6679C19.3594 25.0361 19.0609 25.3346 18.6927 25.3346H16.6927Z" fill="currentColor"/> <path d="M24.026 25.3346C23.6578 25.3346 23.3594 25.0361 23.3594 24.6679L23.3594 7.3346C23.3594 6.96641 23.6578 6.66794 24.026 6.66794L26.026 6.66794C26.3942 6.66794 26.6927 6.96642 26.6927 7.3346V24.6679C26.6927 25.0361 26.3942 25.3346 26.026 25.3346H24.026Z" fill="currentColor"/> <path d="M5.48113 23.9407C5.38584 24.2963 5.59689 24.6619 5.95254 24.7572L7.88439 25.2748C8.24003 25.3701 8.60559 25.159 8.70089 24.8034L13.1871 8.06067C13.2824 7.70503 13.0713 7.33947 12.7157 7.24417L10.7838 6.72654C10.4282 6.63124 10.0626 6.8423 9.96733 7.19794L5.48113 23.9407Z" fill="currentColor"/>',xW='<path fill-rule="evenodd" clip-rule="evenodd" d="M24.9266 7.57992C25.015 7.60672 25.0886 7.64746 25.2462 7.80506L26.956 9.51488C27.1136 9.67248 27.1543 9.74604 27.1811 9.83447C27.2079 9.9229 27.2079 10.0133 27.1811 10.1018C27.1543 10.1902 27.1136 10.2638 26.956 10.4214L13.1822 24.1951C13.0246 24.3527 12.951 24.3935 12.8626 24.4203C12.797 24.4402 12.7304 24.4453 12.6642 24.4357L12.7319 24.4203C12.6435 24.4471 12.553 24.4471 12.4646 24.4203C12.3762 24.3935 12.3026 24.3527 12.145 24.1951L5.04407 17.0942C4.88647 16.9366 4.84573 16.863 4.81893 16.7746C4.79213 16.6862 4.79213 16.5957 4.81893 16.5073C4.84573 16.4189 4.88647 16.3453 5.04407 16.1877L6.7539 14.4779C6.9115 14.3203 6.98506 14.2796 7.07349 14.2528C7.16191 14.226 7.25235 14.226 7.34078 14.2528C7.42921 14.2796 7.50277 14.3203 7.66037 14.4779L12.6628 19.4808L24.3397 7.80506C24.4973 7.64746 24.5709 7.60672 24.6593 7.57992C24.7477 7.55311 24.8382 7.55311 24.9266 7.57992Z" fill="currentColor"/>',kW='<path d="M17.947 16.095C17.999 16.043 17.999 15.9585 17.947 15.9065L11.6295 9.58899C11.3691 9.32864 11.3691 8.90653 11.6295 8.64618L13.2323 7.04341C13.4926 6.78306 13.9147 6.78306 14.1751 7.04341L21.0289 13.8973C21.0392 13.9064 21.0493 13.9158 21.0591 13.9257L22.6619 15.5285C22.9223 15.7888 22.9223 16.2109 22.6619 16.4713L14.1766 24.9565C13.9163 25.2169 13.4942 25.2169 13.2338 24.9565L11.631 23.3538C11.3707 23.0934 11.3707 22.6713 11.631 22.411L17.947 16.095Z" fill="currentColor"/>',B_='<path fill-rule="evenodd" clip-rule="evenodd" d="M6 7C5.63181 7 5.33333 7.29848 5.33333 7.66667V14.8667C5.33333 14.9403 5.39361 14.9999 5.46724 15.0009C10.8844 15.0719 15.2614 19.449 15.3325 24.8661C15.3334 24.9397 15.393 25 15.4667 25H26C26.3682 25 26.6667 24.7015 26.6667 24.3333V7.66667C26.6667 7.29848 26.3682 7 26 7H6ZM17.0119 22.2294C17.0263 22.29 17.0802 22.3333 17.1425 22.3333H23.3333C23.7015 22.3333 24 22.0349 24 21.6667V10.3333C24 9.96514 23.7015 9.66667 23.3333 9.66667H8.66667C8.29848 9.66667 8 9.96514 8 10.3333V13.1909C8 13.2531 8.04332 13.3071 8.10392 13.3214C12.5063 14.3618 15.9715 17.827 17.0119 22.2294Z" fill="currentColor"/> <path d="M13.2 25C13.2736 25 13.3334 24.9398 13.3322 24.8661C13.2615 20.5544 9.77889 17.0718 5.46718 17.0011C5.39356 16.9999 5.33333 17.0597 5.33333 17.1333V18.8667C5.33333 18.9403 5.39348 18.9999 5.4671 19.0015C8.67465 19.0716 11.2617 21.6587 11.3319 24.8662C11.3335 24.9399 11.393 25 11.4667 25H13.2Z" fill="currentColor"/> <path d="M5.33333 21.1333C5.33333 21.0597 5.39332 20.9998 5.46692 21.0022C7.57033 21.0712 9.26217 22.763 9.33114 24.8664C9.33356 24.94 9.27364 25 9.2 25H6C5.63181 25 5.33333 24.7015 5.33333 24.3333V21.1333Z" fill="currentColor"/>',Qxe=Object.freeze({__proto__:null,default:B_}),V_='<path d="M8 28.0003C8 27.6321 8.29848 27.3336 8.66667 27.3336H23.3333C23.7015 27.3336 24 27.6321 24 28.0003V29.3336C24 29.7018 23.7015 30.0003 23.3333 30.0003H8.66667C8.29848 30.0003 8 29.7018 8 29.3336V28.0003Z" fill="currentColor"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M4.66602 6.66699C4.29783 6.66699 3.99935 6.96547 3.99935 7.33366V24.667C3.99935 25.0352 4.29783 25.3337 4.66602 25.3337H27.3327C27.7009 25.3337 27.9994 25.0352 27.9994 24.667V7.33366C27.9994 6.96547 27.7009 6.66699 27.3327 6.66699H4.66602ZM8.66659 21.3333C8.2984 21.3333 7.99992 21.0349 7.99992 20.6667V11.3333C7.99992 10.9651 8.2984 10.6667 8.66659 10.6667H13.9999C14.3681 10.6667 14.6666 10.9651 14.6666 11.3333V12.6667C14.6666 13.0349 14.3681 13.3333 13.9999 13.3333H10.7999C10.7263 13.3333 10.6666 13.393 10.6666 13.4667V18.5333C10.6666 18.607 10.7263 18.6667 10.7999 18.6667H13.9999C14.3681 18.6667 14.6666 18.9651 14.6666 19.3333V20.6667C14.6666 21.0349 14.3681 21.3333 13.9999 21.3333H8.66659ZM17.9999 21.3333C17.6317 21.3333 17.3333 21.0349 17.3333 20.6667V11.3333C17.3333 10.9651 17.6317 10.6667 17.9999 10.6667H23.3333C23.7014 10.6667 23.9999 10.9651 23.9999 11.3333V12.6667C23.9999 13.0349 23.7014 13.3333 23.3333 13.3333H20.1333C20.0596 13.3333 19.9999 13.393 19.9999 13.4667V18.5333C19.9999 18.607 20.0596 18.6667 20.1333 18.6667H23.3333C23.7014 18.6667 23.9999 18.9651 23.9999 19.3333V20.6667C23.9999 21.0349 23.7014 21.3333 23.3333 21.3333H17.9999Z" fill="currentColor"/>',P5='<path fill-rule="evenodd" clip-rule="evenodd" d="M4.6661 6.66699C4.29791 6.66699 3.99943 6.96547 3.99943 7.33366V24.667C3.99943 25.0352 4.29791 25.3337 4.6661 25.3337H27.3328C27.701 25.3337 27.9994 25.0352 27.9994 24.667V7.33366C27.9994 6.96547 27.701 6.66699 27.3328 6.66699H4.6661ZM8.66667 21.3333C8.29848 21.3333 8 21.0349 8 20.6667V11.3333C8 10.9651 8.29848 10.6667 8.66667 10.6667H14C14.3682 10.6667 14.6667 10.9651 14.6667 11.3333V12.6667C14.6667 13.0349 14.3682 13.3333 14 13.3333H10.8C10.7264 13.3333 10.6667 13.393 10.6667 13.4667V18.5333C10.6667 18.607 10.7264 18.6667 10.8 18.6667H14C14.3682 18.6667 14.6667 18.9651 14.6667 19.3333V20.6667C14.6667 21.0349 14.3682 21.3333 14 21.3333H8.66667ZM18 21.3333C17.6318 21.3333 17.3333 21.0349 17.3333 20.6667V11.3333C17.3333 10.9651 17.6318 10.6667 18 10.6667H23.3333C23.7015 10.6667 24 10.9651 24 11.3333V12.6667C24 13.0349 23.7015 13.3333 23.3333 13.3333H20.1333C20.0597 13.3333 20 13.393 20 13.4667V18.5333C20 18.607 20.0597 18.6667 20.1333 18.6667H23.3333C23.7015 18.6667 24 18.9651 24 19.3333V20.6667C24 21.0349 23.7015 21.3333 23.3333 21.3333H18Z" fill="currentColor"/>',CW='<path d="M14.2225 13.7867C14.3065 13.8706 14.4501 13.8112 14.4501 13.6924V5.99955C14.4501 5.63136 14.7486 5.33289 15.1167 5.33289H16.8501C17.2183 5.33289 17.5167 5.63136 17.5167 5.99955V13.6916C17.5167 13.8104 17.6604 13.8699 17.7444 13.7859L19.9433 11.5869C20.2037 11.3266 20.6258 11.3266 20.8861 11.5869L22.1118 12.8126C22.3722 13.0729 22.3722 13.4951 22.1118 13.7554L16.4549 19.4123C16.1946 19.6726 15.772 19.6731 15.5116 19.4128L9.85479 13.7559C9.59444 13.4956 9.59444 13.0734 9.85479 12.8131L11.0804 11.5874C11.3408 11.3271 11.7629 11.3271 12.0233 11.5874L14.2225 13.7867Z" fill="currentColor"/> <path d="M5.99998 20.267C5.63179 20.267 5.33331 20.5654 5.33331 20.9336V25.9997C5.33331 26.3678 5.63179 26.6663 5.99998 26.6663H26C26.3682 26.6663 26.6666 26.3678 26.6666 25.9997V20.9336C26.6666 20.5654 26.3682 20.267 26 20.267H24.2666C23.8985 20.267 23.6 20.5654 23.6 20.9336V22.9333C23.6 23.3014 23.3015 23.5999 22.9333 23.5999H9.06638C8.69819 23.5999 8.39972 23.3014 8.39972 22.9333V20.9336C8.39972 20.5654 8.10124 20.267 7.73305 20.267H5.99998Z" fill="currentColor"/>',SW='<path d="M16 20C18.2091 20 20 18.2092 20 16C20 13.7909 18.2091 12 16 12C13.7909 12 12 13.7909 12 16C12 18.2092 13.7909 20 16 20Z" fill="currentColor"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M28 16.0058C28 18.671 23.5 25.3334 16 25.3334C8.5 25.3334 4 18.6762 4 16.0058C4 13.3354 8.50447 6.66669 16 6.66669C23.4955 6.66669 28 13.3406 28 16.0058ZM25.3318 15.9934C25.3328 16.0017 25.3328 16.0099 25.3318 16.0182C25.3274 16.0571 25.3108 16.1728 25.2485 16.3708C25.1691 16.6229 25.0352 16.9462 24.8327 17.3216C24.4264 18.0749 23.7969 18.9398 22.9567 19.754C21.2791 21.3798 18.9148 22.6667 16 22.6667C13.0845 22.6667 10.7202 21.3805 9.04298 19.7557C8.20295 18.9419 7.57362 18.0773 7.16745 17.3241C6.96499 16.9486 6.83114 16.6252 6.75172 16.3729C6.67942 16.1431 6.66856 16.0243 6.66695 16.0066L6.66695 16.005C6.66859 15.9871 6.67951 15.8682 6.75188 15.6383C6.83145 15.3854 6.96554 15.0614 7.16831 14.6853C7.57507 13.9306 8.20514 13.0644 9.04577 12.249C10.7245 10.6208 13.0886 9.33335 16 9.33335C18.9108 9.33335 21.2748 10.6215 22.9539 12.2507C23.7947 13.0664 24.4249 13.933 24.8318 14.6877C25.0346 15.0639 25.1688 15.3878 25.2483 15.6404C25.3107 15.8386 25.3274 15.9545 25.3318 15.9934Z" fill="currentColor"/>',z_='<path d="M15.8747 8.11857C16.3148 7.79342 16.9375 8.10759 16.9375 8.65476V14.2575C16.9375 14.3669 17.0621 14.4297 17.1501 14.3647L25.6038 8.11857C26.0439 7.79342 26.6667 8.10759 26.6667 8.65476V23.3451C26.6667 23.8923 26.0439 24.2064 25.6038 23.8813L17.1501 17.6346C17.0621 17.5695 16.9375 17.6324 16.9375 17.7418L16.9375 23.3451C16.9375 23.8923 16.3147 24.2064 15.8747 23.8813L5.93387 16.5358C5.57322 16.2693 5.57323 15.7299 5.93389 15.4634L15.8747 8.11857Z" fill="currentColor"/>',H_='<path d="M16.1253 8.11866C15.6852 7.7935 15.0625 8.10768 15.0625 8.65484V14.2576C15.0625 14.367 14.9379 14.4298 14.8499 14.3648L6.39615 8.11866C5.95607 7.7935 5.33331 8.10768 5.33331 8.65484V23.3452C5.33331 23.8923 5.9561 24.2065 6.39617 23.8813L14.8499 17.6347C14.9379 17.5696 15.0625 17.6325 15.0625 17.7419L15.0625 23.3452C15.0625 23.8923 15.6853 24.2065 16.1253 23.8813L26.0661 16.5358C26.4268 16.2694 26.4268 15.73 26.0661 15.4635L16.1253 8.11866Z" fill="currentColor"/>',q_='<path d="M19.3334 13.3333C18.9652 13.3333 18.6667 13.0349 18.6667 12.6667L18.6667 7.33333C18.6667 6.96514 18.9652 6.66666 19.3334 6.66666H21.3334C21.7015 6.66666 22 6.96514 22 7.33333V9.86666C22 9.9403 22.0597 10 22.1334 10L24.6667 10C25.0349 10 25.3334 10.2985 25.3334 10.6667V12.6667C25.3334 13.0349 25.0349 13.3333 24.6667 13.3333L19.3334 13.3333Z" fill="currentColor"/> <path d="M13.3334 19.3333C13.3334 18.9651 13.0349 18.6667 12.6667 18.6667H7.33335C6.96516 18.6667 6.66669 18.9651 6.66669 19.3333V21.3333C6.66669 21.7015 6.96516 22 7.33335 22H9.86669C9.94032 22 10 22.0597 10 22.1333L10 24.6667C10 25.0349 10.2985 25.3333 10.6667 25.3333H12.6667C13.0349 25.3333 13.3334 25.0349 13.3334 24.6667L13.3334 19.3333Z" fill="currentColor"/> <path d="M18.6667 24.6667C18.6667 25.0349 18.9652 25.3333 19.3334 25.3333H21.3334C21.7015 25.3333 22 25.0349 22 24.6667V22.1333C22 22.0597 22.0597 22 22.1334 22H24.6667C25.0349 22 25.3334 21.7015 25.3334 21.3333V19.3333C25.3334 18.9651 25.0349 18.6667 24.6667 18.6667L19.3334 18.6667C18.9652 18.6667 18.6667 18.9651 18.6667 19.3333L18.6667 24.6667Z" fill="currentColor"/> <path d="M10.6667 13.3333H12.6667C13.0349 13.3333 13.3334 13.0349 13.3334 12.6667L13.3334 10.6667V7.33333C13.3334 6.96514 13.0349 6.66666 12.6667 6.66666H10.6667C10.2985 6.66666 10 6.96514 10 7.33333L10 9.86666C10 9.9403 9.94033 10 9.86669 10L7.33335 10C6.96516 10 6.66669 10.2985 6.66669 10.6667V12.6667C6.66669 13.0349 6.96516 13.3333 7.33335 13.3333L10.6667 13.3333Z" fill="currentColor"/>',U_='<path d="M25.3299 7.26517C25.2958 6.929 25.0119 6.66666 24.6667 6.66666H19.3334C18.9652 6.66666 18.6667 6.96514 18.6667 7.33333V9.33333C18.6667 9.70152 18.9652 10 19.3334 10L21.8667 10C21.9403 10 22 10.0597 22 10.1333V12.6667C22 13.0349 22.2985 13.3333 22.6667 13.3333H24.6667C25.0349 13.3333 25.3334 13.0349 25.3334 12.6667V7.33333C25.3334 7.31032 25.3322 7.28758 25.3299 7.26517Z" fill="currentColor"/> <path d="M22 21.8667C22 21.9403 21.9403 22 21.8667 22L19.3334 22C18.9652 22 18.6667 22.2985 18.6667 22.6667V24.6667C18.6667 25.0349 18.9652 25.3333 19.3334 25.3333L24.6667 25.3333C25.0349 25.3333 25.3334 25.0349 25.3334 24.6667V19.3333C25.3334 18.9651 25.0349 18.6667 24.6667 18.6667H22.6667C22.2985 18.6667 22 18.9651 22 19.3333V21.8667Z" fill="currentColor"/> <path d="M12.6667 22H10.1334C10.0597 22 10 21.9403 10 21.8667V19.3333C10 18.9651 9.70154 18.6667 9.33335 18.6667H7.33335C6.96516 18.6667 6.66669 18.9651 6.66669 19.3333V24.6667C6.66669 25.0349 6.96516 25.3333 7.33335 25.3333H12.6667C13.0349 25.3333 13.3334 25.0349 13.3334 24.6667V22.6667C13.3334 22.2985 13.0349 22 12.6667 22Z" fill="currentColor"/> <path d="M10 12.6667V10.1333C10 10.0597 10.0597 10 10.1334 10L12.6667 10C13.0349 10 13.3334 9.70152 13.3334 9.33333V7.33333C13.3334 6.96514 13.0349 6.66666 12.6667 6.66666H7.33335C6.96516 6.66666 6.66669 6.96514 6.66669 7.33333V12.6667C6.66669 13.0349 6.96516 13.3333 7.33335 13.3333H9.33335C9.70154 13.3333 10 13.0349 10 12.6667Z" fill="currentColor"/>',EW='<path fill-rule="evenodd" clip-rule="evenodd" d="M26.6667 5.99998C26.6667 5.63179 26.3682 5.33331 26 5.33331H11.3333C10.9651 5.33331 10.6667 5.63179 10.6667 5.99998V17.5714C10.6667 17.6694 10.5644 17.7342 10.4741 17.6962C9.91823 17.4625 9.30754 17.3333 8.66667 17.3333C6.08934 17.3333 4 19.4226 4 22C4 24.5773 6.08934 26.6666 8.66667 26.6666C11.244 26.6666 13.3333 24.5773 13.3333 22V8.66665C13.3333 8.29846 13.6318 7.99998 14 7.99998L23.3333 7.99998C23.7015 7.99998 24 8.29846 24 8.66665V14.9048C24 15.0027 23.8978 15.0675 23.8075 15.0296C23.2516 14.7958 22.6409 14.6666 22 14.6666C19.4227 14.6666 17.3333 16.756 17.3333 19.3333C17.3333 21.9106 19.4227 24 22 24C24.5773 24 26.6667 21.9106 26.6667 19.3333V5.99998ZM22 21.3333C23.1046 21.3333 24 20.4379 24 19.3333C24 18.2287 23.1046 17.3333 22 17.3333C20.8954 17.3333 20 18.2287 20 19.3333C20 20.4379 20.8954 21.3333 22 21.3333ZM8.66667 24C9.77124 24 10.6667 23.1045 10.6667 22C10.6667 20.8954 9.77124 20 8.66667 20C7.5621 20 6.66667 20.8954 6.66667 22C6.66667 23.1045 7.5621 24 8.66667 24Z" fill="currentColor"/>',W_='<path d="M17.5091 24.6594C17.5091 25.2066 16.8864 25.5208 16.4463 25.1956L9.44847 20.0252C9.42553 20.0083 9.39776 19.9991 9.36923 19.9991H4.66667C4.29848 19.9991 4 19.7006 4 19.3325V12.6658C4 12.2976 4.29848 11.9991 4.66667 11.9991H9.37115C9.39967 11.9991 9.42745 11.99 9.45039 11.973L16.4463 6.8036C16.8863 6.47842 17.5091 6.79259 17.5091 7.33977L17.5091 24.6594Z" fill="currentColor"/> <path d="M28.8621 13.6422C29.1225 13.3818 29.1225 12.9597 28.8621 12.6994L27.9193 11.7566C27.659 11.4962 27.2368 11.4962 26.9765 11.7566L24.7134 14.0197C24.6613 14.0717 24.5769 14.0717 24.5248 14.0197L22.262 11.7568C22.0016 11.4964 21.5795 11.4964 21.3191 11.7568L20.3763 12.6996C20.116 12.9599 20.116 13.382 20.3763 13.6424L22.6392 15.9053C22.6913 15.9573 22.6913 16.0418 22.6392 16.0938L20.3768 18.3562C20.1165 18.6166 20.1165 19.0387 20.3768 19.299L21.3196 20.2419C21.58 20.5022 22.0021 20.5022 22.2624 20.2418L24.5248 17.9795C24.5769 17.9274 24.6613 17.9274 24.7134 17.9795L26.976 20.2421C27.2363 20.5024 27.6585 20.5024 27.9188 20.2421L28.8616 19.2992C29.122 19.0389 29.122 18.6168 28.8616 18.3564L26.599 16.0938C26.547 16.0418 26.547 15.9573 26.599 15.9053L28.8621 13.6422Z" fill="currentColor"/>',_W='<path d="M26.6009 16.0725C26.6009 16.424 26.4302 17.1125 25.9409 18.0213C25.4676 18.8976 24.7542 19.8715 23.8182 20.7783C21.9489 22.5905 19.2662 24.0667 15.9342 24.0667C12.6009 24.0667 9.91958 22.5915 8.04891 20.78C7.11424 19.8736 6.40091 18.9 5.92758 18.0236C5.43824 17.1149 5.26758 16.4257 5.26758 16.0725C5.26758 15.7193 5.43824 15.0293 5.92891 14.1193C6.40224 13.2416 7.11558 12.2665 8.05158 11.3587C9.92224 9.54398 12.6049 8.06665 15.9342 8.06665C19.2636 8.06665 21.9449 9.54505 23.8169 11.3604C24.7529 12.2687 25.4662 13.2441 25.9396 14.1216C26.4302 15.0317 26.6009 15.7209 26.6009 16.0725Z" stroke="currentColor" stroke-width="3"/> <path d="M15.9336 20.0667C18.1427 20.0667 19.9336 18.2758 19.9336 16.0667C19.9336 13.8575 18.1427 12.0667 15.9336 12.0667C13.7245 12.0667 11.9336 13.8575 11.9336 16.0667C11.9336 18.2758 13.7245 20.0667 15.9336 20.0667Z" fill="currentColor"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M27.2323 25.0624L6.93878 4.76886C6.78118 4.61126 6.70762 4.57052 6.61919 4.54372C6.53077 4.51692 6.44033 4.51691 6.3519 4.54372C6.26347 4.57052 6.18991 4.61126 6.03231 4.76886L4.77032 6.03085C4.61272 6.18845 4.57198 6.26201 4.54518 6.35044C4.51838 6.43887 4.51838 6.5293 4.54518 6.61773C4.57198 6.70616 4.61272 6.77972 4.77032 6.93732L25.0639 27.2308C25.2215 27.3884 25.295 27.4292 25.3834 27.456C25.4719 27.4828 25.5623 27.4828 25.6507 27.456C25.7392 27.4292 25.8127 27.3885 25.9703 27.2309L27.2323 25.9689C27.3899 25.8113 27.4307 25.7377 27.4575 25.6493C27.4843 25.5608 27.4843 25.4704 27.4575 25.382C27.4307 25.2935 27.3899 25.22 27.2323 25.0624Z" fill="currentColor"/>',G_='<path d="M8.66667 6.66667C8.29848 6.66667 8 6.96514 8 7.33333V24.6667C8 25.0349 8.29848 25.3333 8.66667 25.3333H12.6667C13.0349 25.3333 13.3333 25.0349 13.3333 24.6667V7.33333C13.3333 6.96514 13.0349 6.66667 12.6667 6.66667H8.66667Z" fill="currentColor"/> <path d="M19.3333 6.66667C18.9651 6.66667 18.6667 6.96514 18.6667 7.33333V24.6667C18.6667 25.0349 18.9651 25.3333 19.3333 25.3333H23.3333C23.7015 25.3333 24 25.0349 24 24.6667V7.33333C24 6.96514 23.7015 6.66667 23.3333 6.66667H19.3333Z" fill="currentColor"/>',K_='<path d="M5.33334 26V19.4667C5.33334 19.393 5.39304 19.3333 5.46668 19.3333H7.86668C7.94031 19.3333 8.00001 19.393 8.00001 19.4667V23.3333C8.00001 23.7015 8.29849 24 8.66668 24H23.3333C23.7015 24 24 23.7015 24 23.3333V8.66666C24 8.29847 23.7015 7.99999 23.3333 7.99999H19.4667C19.393 7.99999 19.3333 7.9403 19.3333 7.86666V5.46666C19.3333 5.39302 19.393 5.33333 19.4667 5.33333H26C26.3682 5.33333 26.6667 5.63181 26.6667 5.99999V26C26.6667 26.3682 26.3682 26.6667 26 26.6667H6.00001C5.63182 26.6667 5.33334 26.3682 5.33334 26Z" fill="currentColor"/> <path d="M14.0098 8.42359H10.806C10.6872 8.42359 10.6277 8.56721 10.7117 8.6512L16.5491 14.4886C16.8094 14.7489 16.8094 15.171 16.5491 15.4314L15.3234 16.657C15.0631 16.9174 14.641 16.9174 14.3806 16.657L8.63739 10.9138C8.55339 10.8298 8.40978 10.8893 8.40978 11.0081V14.0236C8.40978 14.3918 8.1113 14.6903 7.74311 14.6903H6.00978C5.64159 14.6903 5.34311 14.3918 5.34311 14.0236L5.34311 6.02359C5.34311 5.6554 5.64159 5.35692 6.00978 5.35692L14.0098 5.35692C14.378 5.35692 14.6764 5.6554 14.6764 6.02359V7.75692C14.6764 8.12511 14.378 8.42359 14.0098 8.42359Z" fill="currentColor"/>',Y_='<path d="M16 15.3333C15.6318 15.3333 15.3333 15.6318 15.3333 16V20C15.3333 20.3682 15.6318 20.6667 16 20.6667H21.3333C21.7015 20.6667 22 20.3682 22 20V16C22 15.6318 21.7015 15.3333 21.3333 15.3333H16Z" fill="currentColor"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M5.33333 7.33334C5.33333 6.96515 5.63181 6.66667 5.99999 6.66667H26C26.3682 6.66667 26.6667 6.96515 26.6667 7.33334V24.6667C26.6667 25.0349 26.3682 25.3333 26 25.3333H5.99999C5.63181 25.3333 5.33333 25.0349 5.33333 24.6667V7.33334ZM7.99999 10C7.99999 9.63182 8.29847 9.33334 8.66666 9.33334H23.3333C23.7015 9.33334 24 9.63182 24 10V22C24 22.3682 23.7015 22.6667 23.3333 22.6667H8.66666C8.29847 22.6667 7.99999 22.3682 7.99999 22V10Z" fill="currentColor"/>',Z_='<path d="M10.6667 6.6548C10.6667 6.10764 11.2894 5.79346 11.7295 6.11862L24.377 15.4634C24.7377 15.7298 24.7377 16.2692 24.3771 16.5357L11.7295 25.8813C11.2895 26.2065 10.6667 25.8923 10.6667 25.3451L10.6667 6.6548Z" fill="currentColor"/>',TW='<path d="M13.9213 5.53573C14.3146 5.45804 14.6666 5.76987 14.6666 6.17079V7.57215C14.6666 7.89777 14.4305 8.17277 14.114 8.24925C12.5981 8.61559 11.2506 9.41368 10.2091 10.506C9.98474 10.7414 9.62903 10.8079 9.34742 10.6453L8.14112 9.94885C7.79394 9.7484 7.69985 9.28777 7.96359 8.98585C9.48505 7.24409 11.5636 6.00143 13.9213 5.53573Z" fill="currentColor"/> <path d="M5.88974 12.5908C6.01805 12.2101 6.46491 12.0603 6.81279 12.2611L8.01201 12.9535C8.29379 13.1162 8.41396 13.4577 8.32238 13.7699C8.11252 14.4854 7.99998 15.2424 7.99998 16.0257C7.99998 16.809 8.11252 17.566 8.32238 18.2814C8.41396 18.5936 8.29378 18.9352 8.01201 19.0979L6.82742 19.7818C6.48051 19.9821 6.03488 19.8337 5.90521 19.4547C5.5345 18.3712 5.33331 17.2091 5.33331 16C5.33331 14.8078 5.5289 13.6613 5.88974 12.5908Z" fill="currentColor"/> <path d="M8.17106 22.0852C7.82291 22.2862 7.72949 22.7486 7.99532 23.0502C9.51387 24.773 11.5799 26.0017 13.9213 26.4642C14.3146 26.5419 14.6666 26.2301 14.6666 25.8291V24.4792C14.6666 24.1536 14.4305 23.8786 14.114 23.8021C12.5981 23.4358 11.2506 22.6377 10.2091 21.5453C9.98474 21.31 9.62903 21.2435 9.34742 21.4061L8.17106 22.0852Z" fill="currentColor"/> <path d="M17.3333 25.8291C17.3333 26.2301 17.6857 26.5418 18.079 26.4641C22.9748 25.4969 26.6666 21.1796 26.6666 16C26.6666 10.8204 22.9748 6.50302 18.079 5.5358C17.6857 5.4581 17.3333 5.76987 17.3333 6.17079V7.57215C17.3333 7.89777 17.5697 8.17282 17.8862 8.24932C21.3942 9.09721 24 12.2572 24 16.0257C24 19.7942 21.3942 22.9542 17.8862 23.802C17.5697 23.8785 17.3333 24.1536 17.3333 24.4792V25.8291Z" fill="currentColor"/> <path d="M14.3961 10.4163C13.9561 10.0911 13.3333 10.4053 13.3333 10.9525L13.3333 21.0474C13.3333 21.5946 13.9561 21.9087 14.3962 21.5836L21.2273 16.5359C21.5879 16.2694 21.5879 15.73 21.2273 15.4635L14.3961 10.4163Z" fill="currentColor"/>',AW='<path d="M15.6038 12.2147C16.0439 12.5399 16.6667 12.2257 16.6667 11.6786V10.1789C16.6667 10.1001 16.7351 10.0384 16.8134 10.0479C20.1116 10.4494 22.6667 13.2593 22.6667 16.6659C22.6667 20.3481 19.6817 23.3332 15.9995 23.3332C12.542 23.3332 9.69927 20.7014 9.36509 17.332C9.32875 16.9655 9.03371 16.6662 8.66548 16.6662L6.66655 16.6666C6.29841 16.6666 5.99769 16.966 6.02187 17.3334C6.36494 22.5454 10.7012 26.6667 16 26.6667C21.5228 26.6667 26 22.1895 26 16.6667C26 11.4103 21.9444 7.10112 16.7916 6.69757C16.7216 6.69209 16.6667 6.63396 16.6667 6.56372V4.98824C16.6667 4.44106 16.0439 4.12689 15.6038 4.45206L11.0765 7.79738C10.7159 8.06387 10.7159 8.60326 11.0766 8.86973L15.6038 12.2147Z" fill="currentColor"/>',NW='<path d="M16.6667 10.3452C16.6667 10.8924 16.0439 11.2066 15.6038 10.8814L11.0766 7.5364C10.7159 7.26993 10.7159 6.73054 11.0766 6.46405L15.6038 3.11873C16.0439 2.79356 16.6667 3.10773 16.6667 3.6549V5.22682C16.6667 5.29746 16.7223 5.35579 16.7927 5.36066C22.6821 5.76757 27.3333 10.674 27.3333 16.6667C27.3333 22.9259 22.2592 28 16 28C9.96483 28 5.03145 23.2827 4.68601 17.3341C4.66466 16.9665 4.96518 16.6673 5.33339 16.6673H7.3334C7.70157 16.6673 7.99714 16.9668 8.02743 17.3337C8.36638 21.4399 11.8064 24.6667 16 24.6667C20.4183 24.6667 24 21.085 24 16.6667C24 12.5225 20.8483 9.11428 16.8113 8.70739C16.7337 8.69957 16.6667 8.76096 16.6667 8.83893V10.3452Z" fill="currentColor"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M17.0879 19.679C17.4553 19.9195 17.8928 20.0398 18.4004 20.0398C18.9099 20.0398 19.3474 19.9205 19.7129 19.6818C20.0803 19.4413 20.3635 19.0938 20.5623 18.6392C20.7612 18.1847 20.8606 17.6373 20.8606 16.9972C20.8625 16.3608 20.764 15.8192 20.5652 15.3722C20.3663 14.9252 20.0822 14.5853 19.7129 14.3523C19.3455 14.1175 18.908 14 18.4004 14C17.8928 14 17.4553 14.1175 17.0879 14.3523C16.7224 14.5853 16.4402 14.9252 16.2413 15.3722C16.0443 15.8173 15.9449 16.3589 15.943 16.9972C15.9411 17.6354 16.0396 18.1818 16.2385 18.6364C16.4373 19.089 16.7205 19.4366 17.0879 19.679ZM19.1362 18.4262C18.9487 18.7349 18.7034 18.8892 18.4004 18.8892C18.1996 18.8892 18.0226 18.8211 17.8691 18.6847C17.7157 18.5464 17.5964 18.3372 17.5112 18.0568C17.4279 17.7765 17.3871 17.4233 17.389 16.9972C17.3909 16.3684 17.4847 15.9025 17.6703 15.5995C17.8559 15.2945 18.0993 15.1421 18.4004 15.1421C18.603 15.1421 18.7801 15.2093 18.9316 15.3438C19.0832 15.4782 19.2015 15.6828 19.2868 15.9574C19.372 16.2301 19.4146 16.5767 19.4146 16.9972C19.4165 17.6392 19.3237 18.1156 19.1362 18.4262Z" fill="currentColor"/> <path d="M13.7746 19.8978C13.8482 19.8978 13.9079 19.8381 13.9079 19.7644V14.2129C13.9079 14.1393 13.8482 14.0796 13.7746 14.0796H12.642C12.6171 14.0796 12.5927 14.0865 12.5716 14.0997L11.2322 14.9325C11.1931 14.9568 11.1693 14.9996 11.1693 15.0457V15.9497C11.1693 16.0539 11.2833 16.1178 11.3722 16.0635L12.464 15.396C12.4682 15.3934 12.473 15.3921 12.4779 15.3921C12.4926 15.3921 12.5045 15.404 12.5045 15.4187V19.7644C12.5045 19.8381 12.5642 19.8978 12.6378 19.8978H13.7746Z" fill="currentColor"/>',MW='<path d="M15.3333 10.3452C15.3333 10.8924 15.9561 11.2066 16.3962 10.8814L20.9234 7.5364C21.2841 7.26993 21.2841 6.73054 20.9235 6.46405L16.3962 3.11873C15.9561 2.79356 15.3333 3.10773 15.3333 3.6549V5.22682C15.3333 5.29746 15.2778 5.35579 15.2073 5.36066C9.31791 5.76757 4.66667 10.674 4.66667 16.6667C4.66667 22.9259 9.74078 28 16 28C22.0352 28 26.9686 23.2827 27.314 17.3341C27.3354 16.9665 27.0348 16.6673 26.6666 16.6673H24.6666C24.2984 16.6673 24.0029 16.9668 23.9726 17.3337C23.6336 21.4399 20.1937 24.6667 16 24.6667C11.5817 24.6667 8 21.085 8 16.6667C8 12.5225 11.1517 9.11428 15.1887 8.70739C15.2663 8.69957 15.3333 8.76096 15.3333 8.83893V10.3452Z" fill="currentColor"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M17.0879 19.679C17.4553 19.9195 17.8928 20.0398 18.4004 20.0398C18.9099 20.0398 19.3474 19.9205 19.7129 19.6818C20.0803 19.4413 20.3635 19.0938 20.5623 18.6392C20.7612 18.1847 20.8606 17.6373 20.8606 16.9972C20.8625 16.3608 20.764 15.8192 20.5652 15.3722C20.3663 14.9252 20.0822 14.5853 19.7129 14.3523C19.3455 14.1175 18.908 14 18.4004 14C17.8928 14 17.4553 14.1175 17.0879 14.3523C16.7224 14.5853 16.4402 14.9252 16.2413 15.3722C16.0443 15.8173 15.9449 16.3589 15.943 16.9972C15.9411 17.6354 16.0396 18.1818 16.2385 18.6364C16.4373 19.089 16.7205 19.4366 17.0879 19.679ZM19.1362 18.4262C18.9487 18.7349 18.7034 18.8892 18.4004 18.8892C18.1996 18.8892 18.0225 18.8211 17.8691 18.6847C17.7157 18.5464 17.5964 18.3372 17.5112 18.0568C17.4278 17.7765 17.3871 17.4233 17.389 16.9972C17.3909 16.3684 17.4847 15.9025 17.6703 15.5995C17.8559 15.2945 18.0992 15.1421 18.4004 15.1421C18.603 15.1421 18.7801 15.2093 18.9316 15.3438C19.0831 15.4782 19.2015 15.6828 19.2867 15.9574C19.372 16.2301 19.4146 16.5767 19.4146 16.9972C19.4165 17.6392 19.3237 18.1156 19.1362 18.4262Z" fill="currentColor"/> <path d="M13.7746 19.8978C13.8482 19.8978 13.9079 19.8381 13.9079 19.7644V14.2129C13.9079 14.1393 13.8482 14.0796 13.7746 14.0796H12.642C12.6171 14.0796 12.5927 14.0865 12.5716 14.0997L11.2322 14.9325C11.1931 14.9568 11.1693 14.9996 11.1693 15.0457V15.9497C11.1693 16.0539 11.2833 16.1178 11.3722 16.0635L12.464 15.396C12.4682 15.3934 12.473 15.3921 12.4779 15.3921C12.4926 15.3921 12.5045 15.404 12.5045 15.4187V19.7644C12.5045 19.8381 12.5642 19.8978 12.6378 19.8978H13.7746Z" fill="currentColor"/>',OW='<path fill-rule="evenodd" clip-rule="evenodd" d="M13.5722 5.33333C13.2429 5.33333 12.9629 5.57382 12.9132 5.89938L12.4063 9.21916C12.4 9.26058 12.3746 9.29655 12.3378 9.31672C12.2387 9.37118 12.1409 9.42779 12.0444 9.48648C12.0086 9.5083 11.9646 9.51242 11.9255 9.49718L8.79572 8.27692C8.48896 8.15732 8.14083 8.27958 7.9762 8.56472L5.5491 12.7686C5.38444 13.0538 5.45271 13.4165 5.70981 13.6223L8.33308 15.7225C8.3658 15.7487 8.38422 15.7887 8.38331 15.8306C8.38209 15.8867 8.38148 15.9429 8.38148 15.9993C8.38148 16.0558 8.3821 16.1121 8.38332 16.1684C8.38423 16.2102 8.36582 16.2503 8.33313 16.2765L5.7103 18.3778C5.45334 18.5836 5.38515 18.9462 5.54978 19.2314L7.97688 23.4352C8.14155 23.7205 8.48981 23.8427 8.79661 23.723L11.926 22.5016C11.9651 22.4864 12.009 22.4905 12.0449 22.5123C12.1412 22.5709 12.2388 22.6274 12.3378 22.6818C12.3745 22.7019 12.4 22.7379 12.4063 22.7793L12.9132 26.0993C12.9629 26.4249 13.2429 26.6654 13.5722 26.6654H18.4264C18.7556 26.6654 19.0356 26.425 19.0854 26.0995L19.5933 22.7801C19.5997 22.7386 19.6252 22.7027 19.6619 22.6825C19.7614 22.6279 19.8596 22.5711 19.9564 22.5121C19.9923 22.4903 20.0362 22.4862 20.0754 22.5015L23.2035 23.7223C23.5103 23.842 23.8585 23.7198 24.0232 23.4346L26.4503 19.2307C26.6149 18.9456 26.5467 18.583 26.2898 18.3771L23.6679 16.2766C23.6352 16.2504 23.6168 16.2104 23.6177 16.1685C23.619 16.1122 23.6196 16.0558 23.6196 15.9993C23.6196 15.9429 23.619 15.8866 23.6177 15.8305C23.6168 15.7886 23.6353 15.7486 23.668 15.7224L26.2903 13.623C26.5474 13.4172 26.6156 13.0544 26.451 12.7692L24.0239 8.56537C23.8592 8.28023 23.5111 8.15797 23.2043 8.27757L20.0758 9.49734C20.0367 9.51258 19.9927 9.50846 19.9569 9.48664C19.8599 9.42762 19.7616 9.37071 19.6618 9.31596C19.6251 9.2958 19.5997 9.25984 19.5933 9.21843L19.0854 5.89915C19.0356 5.57369 18.7556 5.33333 18.4264 5.33333H13.5722ZM16.0001 20.2854C18.3672 20.2854 20.2862 18.3664 20.2862 15.9993C20.2862 13.6322 18.3672 11.7132 16.0001 11.7132C13.6329 11.7132 11.714 13.6322 11.714 15.9993C11.714 18.3664 13.6329 20.2854 16.0001 20.2854Z" fill="currentColor"/>',I5='<path d="M17.5091 24.6595C17.5091 25.2066 16.8864 25.5208 16.4463 25.1956L9.44847 20.0252C9.42553 20.0083 9.39776 19.9992 9.36923 19.9992H4.66667C4.29848 19.9992 4 19.7007 4 19.3325V12.6658C4 12.2976 4.29848 11.9992 4.66667 11.9992H9.37115C9.39967 11.9992 9.42745 11.99 9.45039 11.9731L16.4463 6.80363C16.8863 6.47845 17.5091 6.79262 17.5091 7.3398L17.5091 24.6595Z" fill="currentColor"/> <path d="M27.5091 9.33336C27.8773 9.33336 28.1758 9.63184 28.1758 10V22C28.1758 22.3682 27.8773 22.6667 27.5091 22.6667H26.1758C25.8076 22.6667 25.5091 22.3682 25.5091 22V10C25.5091 9.63184 25.8076 9.33336 26.1758 9.33336L27.5091 9.33336Z" fill="currentColor"/> <path d="M22.1758 12C22.544 12 22.8424 12.2985 22.8424 12.6667V19.3334C22.8424 19.7016 22.544 20 22.1758 20H20.8424C20.4743 20 20.1758 19.7016 20.1758 19.3334V12.6667C20.1758 12.2985 20.4743 12 20.8424 12H22.1758Z" fill="currentColor"/>',D5='<path d="M17.5091 24.6594C17.5091 25.2066 16.8864 25.5207 16.4463 25.1956L9.44847 20.0252C9.42553 20.0083 9.39776 19.9991 9.36923 19.9991H4.66667C4.29848 19.9991 4 19.7006 4 19.3324V12.6658C4 12.2976 4.29848 11.9991 4.66667 11.9991H9.37115C9.39967 11.9991 9.42745 11.99 9.45039 11.973L16.4463 6.80358C16.8863 6.4784 17.5091 6.79258 17.5091 7.33975L17.5091 24.6594Z" fill="currentColor"/> <path d="M22.8424 12.6667C22.8424 12.2985 22.544 12 22.1758 12H20.8424C20.4743 12 20.1758 12.2985 20.1758 12.6667V19.3333C20.1758 19.7015 20.4743 20 20.8424 20H22.1758C22.544 20 22.8424 19.7015 22.8424 19.3333V12.6667Z" fill="currentColor"/>';const e5e=Object.freeze(Object.defineProperty({__proto__:null,Component:un,DOMEvent:tn,EventsController:$n,EventsTarget:O_,Icon$0:yW,Icon$104:I5,Icon$105:D5,Icon$11:bW,Icon$13:j_,Icon$16:wW,Icon$19:xW,Icon$22:kW,Icon$24:B_,Icon$26:V_,Icon$27:P5,Icon$31:CW,Icon$33:SW,Icon$34:z_,Icon$35:H_,Icon$39:q_,Icon$40:U_,Icon$5:vW,Icon$53:EW,Icon$54:W_,Icon$56:_W,Icon$59:G_,Icon$60:K_,Icon$61:Y_,Icon$62:Z_,Icon$63:TW,Icon$74:AW,Icon$77:NW,Icon$8:F_,Icon$81:MW,Icon$88:OW,State:Su,ViewController:Fo,animationFrameThrottle:dh,ariaBool:m2,camelToKebabCase:sc,chromecast:Qxe,composeRefs:Qn,computed:xu,createContext:ku,createReactComponent:hn,createScope:wu,deferredPromise:Hp,effect:me,fscreen:hh,functionDebounce:N5,functionThrottle:fh,getScope:c2,hasProvidedContext:Cu,isArray:qr,isBoolean:zp,isDOMNode:QU,isFunction:Ni,isKeyboardClick:E5,isKeyboardEvent:h2,isMouseEvent:XU,isNil:YU,isNull:ol,isNumber:Ds,isObject:M_,isPointerEvent:P_,isString:ut,isTouchEvent:d2,isUndefined:Yr,isWriteSignal:KU,kebabToCamelCase:$_,keysOf:A5,listenEvent:Rn,method:Rs,noop:$o,onDispose:Qt,peek:Re,prop:nr,provideContext:Lo,r:gW,scoped:ns,setAttribute:Rt,setStyle:Mi,signal:bt,tick:il,toggleClass:eW,untrack:Bp,uppercaseFirstChar:Zg,useContext:Ur,useReactContext:L_,useReactScope:Xg,useSignal:dn,useState:Yg,useStateContext:Jg,waitIdlePeriod:uW,waitTimeout:cW,wasEnterKeyPressed:JU},Symbol.toStringTag,{value:"Module"}));function X_(n){return!ut(n)&&"width"in n&&"height"in n&&Ds(n.width)&&Ds(n.height)}const st=typeof document>"u",t5e=st?"":(navigator==null?void 0:navigator.userAgent.toLowerCase())||"",R5=!st&&/iphone|ipad|ipod|ios|crios|fxios/i.test(t5e),PW=!st&&/(iphone|ipod)/gi.test((navigator==null?void 0:navigator.platform)||""),$5=!st&&!!window.chrome,L5=!st&&(!!window.safari||R5);function IW(){return n5e()&&Ni(screen.orientation.unlock)}function n5e(){return!st&&!Yr(window.screen.orientation)&&!Yr(window.screen.orientation.lock)}function DW(n,e){return st?!1:(n||(n=document.createElement("audio")),n.canPlayType(e).length>0)}function RW(n,e){return st?!1:(n||(n=document.createElement("video")),n.canPlayType(e).length>0)}function $W(n){return st?!1:(n||(n=document.createElement("video")),n.canPlayType("application/vnd.apple.mpegurl").length>0)}function LW(n){return st?!1:!!document.pictureInPictureEnabled&&!(n!=null&&n.disablePictureInPicture)}function FW(n){return st?!1:Ni(n==null?void 0:n.webkitSupportsPresentationMode)&&Ni(n==null?void 0:n.webkitSetPresentationMode)}async function r5e(){const n=document.createElement("video");return n.volume=.5,await cW(0),n.volume===.5}function s5e(){return st?void 0:(window==null?void 0:window.ManagedMediaSource)??(window==null?void 0:window.MediaSource)??(window==null?void 0:window.WebKitMediaSource)}function i5e(){return st?void 0:(window==null?void 0:window.SourceBuffer)??(window==null?void 0:window.WebKitSourceBuffer)}function F5(){if(st)return!1;const n=s5e();if(Yr(n))return!1;const e=n&&Ni(n.isTypeSupported)&&n.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"'),t=i5e(),r=Yr(t)||!Yr(t.prototype)&&Ni(t.prototype.appendBuffer)&&Ni(t.prototype.remove);return!!e&&!!r}function jW(){return F5()}class bs{constructor(e,t){N(this,rd);qr(e)?M(this,rd,e):!Yr(e)&&!Yr(t)?M(this,rd,[[e,t]]):M(this,rd,[])}get length(){return h(this,rd).length}start(e){return h(this,rd)[e][0]??1/0}end(e){return h(this,rd)[e][1]??1/0}}rd=new WeakMap;function BW(n){if(!n.length)return null;let e=n.start(0);for(let t=1;t<n.length;t++){const r=n.start(t);r<e&&(e=r)}return e}function qp(n){if(!n.length)return null;let e=n.end(0);for(let t=1;t<n.length;t++){const r=n.end(t);r>e&&(e=r)}return e}function o5e(n){if(n.length<=1)return n;n.sort((r,s)=>r[0]-s[0]);let e=[],t=n[0];for(let r=1;r<n.length;r++){const s=n[r];t[1]>=s[0]-1?t=[t[0],Math.max(t[1],s[1])]:(e.push(t),t=s)}return e.push(t),e}function a5e(n,e,t){let r=e[0],s=e[1];return t<r?[t,-1]:t===r?e:r===-1?(e[0]=t,e):(t>r&&(e[1]=t,s===-1&&n.push(e)),o5e(n),e)}const l5e=/\.(m4a|m4b|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx|flac)($|\?)/i,c5e=new Set(["audio/mpeg","audio/ogg","audio/3gp","audio/mp3","audio/webm","audio/flac","audio/m4a","audio/m4b","audio/mp4a","audio/mp4"]),u5e=/\.(mp4|og[gv]|webm|mov|m4v)(#t=[,\d+]+)?($|\?)/i,d5e=new Set(["video/mp4","video/webm","video/3gp","video/ogg","video/avi","video/mpeg"]),h5e=/\.(m3u8)($|\?)/i,f5e=/\.(mpd)($|\?)/i,p5e=new Set(["application/vnd.apple.mpegurl","audio/mpegurl","audio/x-mpegurl","application/x-mpegurl","video/x-mpegurl","video/mpegurl","application/mpegurl"]),m5e=new Set(["application/dash+xml"]);function J_({src:n,type:e}){return ut(n)?l5e.test(n)||c5e.has(e)||n.startsWith("blob:")&&e==="audio/object":e==="audio/object"}function Q_(n){return ut(n.src)?u5e.test(n.src)||d5e.has(n.type)||n.src.startsWith("blob:")&&n.type==="video/object"||Qg(n)&&(st||$W()):n.type==="video/object"}function Qg({src:n,type:e}){return ut(n)&&h5e.test(n)||p5e.has(e)}function eT({src:n,type:e}){return ut(n)&&f5e.test(n)||m5e.has(e)}function VW(n){return ut(n.src)&&(J_(n)||Q_(n)||Qg(n))}function g5e(n){return!st&&typeof window.MediaStream<"u"&&n instanceof window.MediaStream}function y5e(n,e){const t=new URL(n);for(const r of Object.keys(e))t.searchParams.set(r,e[r]+"");return t.toString()}function Eu(n,e="preconnect"){if(st)return!1;const t=document.querySelector(`link[href="${n}"]`);if(!ol(t))return!0;const r=document.createElement("link");return r.rel=e,r.href=n,r.crossOrigin="true",document.head.append(r),!0}const g2={};function tT(n){if(g2[n])return g2[n].promise;const e=Hp(),t=document.querySelector(`script[src="${n}"]`);if(!ol(t))return e.resolve(),e.promise;g2[n]=e;const r=document.createElement("script");return r.src=n,r.onload=()=>{e.resolve(),delete g2[n]},r.onerror=()=>{e.reject(),delete g2[n]},setTimeout(()=>document.head.append(r),0),e.promise}function y2(n){return n==="use-credentials"?"include":ut(n)?"same-origin":void 0}function v5e({title:n,src:e,download:t}){const r=zp(t)||t===""?e.src:ut(t)?t:t==null?void 0:t.url;return b5e({url:r,src:e,download:t})?{url:r,name:!zp(t)&&!ut(t)&&(t==null?void 0:t.filename)||n.toLowerCase()||"media"}:null}function b5e({url:n,src:e,download:t}){return ut(n)&&(t&&t!==!0||J_(e)||Q_(e))}const w5e=Symbol(0),x5e=Symbol(0),k5e=Symbol(0),C5e=Symbol(0),S5e=Symbol(0),E5e=Symbol(0),_5e=Symbol(0),qt={crossOrigin:w5e,readyState:x5e,updateActiveCues:k5e,canLoad:C5e,onModeChange:S5e,native:E5e,nativeHLS:_5e};function zW(n,e){return e>=n.startTime&&e<n.endTime}function nT(n,e,t){let r=null,s=c2();function i(){const o=ut(e)?[e]:e,a=n.toArray().find(l=>o.includes(l.kind)&&l.mode==="showing");if(a!==r){if(!a){t(null),r=null;return}a.readyState==2?t(a):(t(null),ns(()=>{const l=Rn(a,"load",()=>{t(a),l()},{once:!0})},s)),r=a}}return i(),Rn(n,"mode-change",i)}class ph extends O_{constructor(t){super();N(this,us);G(this,"src");G(this,"content");G(this,"type");G(this,"encoding");G(this,"id","");G(this,"label","");G(this,"language","");G(this,"kind");G(this,"default",!1);N(this,O4,!1);N(this,sd,0);N(this,H0,"disabled");N(this,P4,{});N(this,q0,[]);N(this,ci,[]);N(this,id,[]);G(this,moe,0);G(this,poe);G(this,foe,null);G(this,hoe,null);for(const r of Object.keys(t))this[r]=t[r];this.type||(this.type="vtt"),!st&&t.content?v(this,us,Ioe).call(this,t):t.src||(this[qt.readyState]=2)}static createId(t){return`vds-${t.type}-${t.kind}-${t.src??t.label??"?"}`}get metadata(){return h(this,P4)}get regions(){return h(this,q0)}get cues(){return h(this,ci)}get activeCues(){return h(this,id)}get readyState(){return this[qt.readyState]}get mode(){return h(this,H0)}set mode(t){this.setMode(t)}addCue(t,r){var o;let s=0,i=h(this,ci).length;for(s=0;s<i&&!(t.endTime<=h(this,ci)[s].startTime);s++);s===i?h(this,ci).push(t):h(this,ci).splice(s,0,t),t instanceof TextTrackCue||(o=this[qt.native])==null||o.track.addCue(t),this.dispatchEvent(new tn("add-cue",{detail:t,trigger:r})),zW(t,h(this,sd))&&this[qt.updateActiveCues](h(this,sd),r)}removeCue(t,r){var i;const s=h(this,ci).indexOf(t);if(s>=0){const o=h(this,id).includes(t);h(this,ci).splice(s,1),(i=this[qt.native])==null||i.track.removeCue(t),this.dispatchEvent(new tn("remove-cue",{detail:t,trigger:r})),o&&this[qt.updateActiveCues](h(this,sd),r)}}setMode(t,r){var s;h(this,H0)!==t&&(M(this,H0,t),t==="disabled"?(M(this,id,[]),v(this,us,hD).call(this)):this.readyState===2?this[qt.updateActiveCues](h(this,sd),r):v(this,us,cD).call(this),this.dispatchEvent(new tn("mode-change",{detail:this,trigger:r})),(s=this[qt.onModeChange])==null||s.call(this))}[(moe=qt.readyState,poe=qt.crossOrigin,foe=qt.onModeChange,hoe=qt.native,qt.updateActiveCues)](t,r){if(M(this,sd,t),this.mode==="disabled"||!h(this,ci).length)return;const s=[];for(let o=0,a=h(this,ci).length;o<a;o++){const l=h(this,ci)[o];zW(l,t)&&s.push(l)}let i=s.length!==h(this,id).length;if(!i){for(let o=0;o<s.length;o++)if(!h(this,id).includes(s[o])){i=!0;break}}M(this,id,s),i&&v(this,us,hD).call(this,r)}[qt.canLoad](){M(this,O4,!0),h(this,H0)!=="disabled"&&v(this,us,cD).call(this)}}O4=new WeakMap,sd=new WeakMap,H0=new WeakMap,P4=new WeakMap,q0=new WeakMap,ci=new WeakMap,id=new WeakMap,us=new WeakSet,Ioe=function(t){Promise.resolve().then(()=>i8).then(({parseText:r,VTTCue:s,VTTRegion:i})=>{!ut(t.content)||t.type==="json"?(v(this,us,dD).call(this,t.content,s,i),this.readyState!==3&&v(this,us,y6).call(this)):r(t.content,{type:t.type}).then(({cues:o,regions:a})=>{M(this,ci,o),M(this,q0,a),v(this,us,y6).call(this)})})},cD=async function(){var t,r;if(!(!h(this,O4)||this[qt.readyState]>0)){if(this[qt.readyState]=1,this.dispatchEvent(new tn("load-start")),!this.src){v(this,us,y6).call(this);return}try{const{parseResponse:s,VTTCue:i,VTTRegion:o}=await Promise.resolve().then(()=>i8),a=(t=this[qt.crossOrigin])==null?void 0:t.call(this),l=fetch(this.src,{headers:this.type==="json"?{"Content-Type":"application/json"}:void 0,credentials:y2(a)});if(this.type==="json")v(this,us,dD).call(this,await(await l).text(),i,o);else{const{errors:c,metadata:u,regions:d,cues:f}=await s(l,{type:this.type,encoding:this.encoding});if(((r=c[0])==null?void 0:r.code)===0)throw c[0];M(this,P4,u),M(this,q0,d),M(this,ci,f)}v(this,us,y6).call(this)}catch(s){v(this,us,uD).call(this,s)}}},y6=function(){if(this[qt.readyState]=2,!this.src||this.type!=="vtt"){const r=this[qt.native];if(r&&!r.managed)for(const s of h(this,ci))r.track.addCue(s)}const t=new tn("load");this[qt.updateActiveCues](h(this,sd),t),this.dispatchEvent(t)},uD=function(t){this[qt.readyState]=3,this.dispatchEvent(new tn("error",{detail:t}))},dD=function(t,r,s){try{const{regions:i,cues:o}=A5e(t,r,s);M(this,q0,i),M(this,ci,o)}catch(i){v(this,us,uD).call(this,i)}},hD=function(t){this.dispatchEvent(new tn("cue-change",{trigger:t}))};const T5e=/captions|subtitles/;function Oi(n){return T5e.test(n.kind)}function A5e(n,e,t){const r=ut(n)?JSON.parse(n):n;let s=[],i=[];return r.regions&&t&&(s=r.regions.map(o=>Object.assign(new t,o))),(r.cues||qr(r))&&(i=(qr(r)?r:r.cues).filter(o=>Ds(o.startTime)&&Ds(o.endTime)).map(o=>Object.assign(new e(0,0,""),o))),{regions:s,cues:i}}const v2=new Su({artist:"",artwork:null,audioTrack:null,audioTracks:[],autoPlay:!1,autoPlayError:null,audioGain:null,buffered:new bs,canLoad:!1,canLoadPoster:!1,canFullscreen:!1,canOrientScreen:IW(),canPictureInPicture:!1,canPlay:!1,clipStartTime:0,clipEndTime:0,controls:!1,get iOSControls(){return PW&&this.mediaType==="video"&&(!this.playsInline||!hh.fullscreenEnabled&&this.fullscreen)},get nativeControls(){return this.controls||this.iOSControls},controlsVisible:!1,get controlsHidden(){return!this.controlsVisible},crossOrigin:null,ended:!1,error:null,fullscreen:!1,get loop(){return this.providedLoop||this.userPrefersLoop},logLevel:"silent",mediaType:"unknown",muted:!1,paused:!0,played:new bs,playing:!1,playsInline:!1,pictureInPicture:!1,preload:"metadata",playbackRate:1,qualities:[],quality:null,autoQuality:!1,canSetQuality:!0,canSetPlaybackRate:!0,canSetVolume:!1,canSetAudioGain:!1,seekable:new bs,seeking:!1,source:{src:"",type:""},sources:[],started:!1,textTracks:[],textTrack:null,get hasCaptions(){return this.textTracks.filter(Oi).length>0},volume:1,waiting:!1,realCurrentTime:0,get currentTime(){return this.ended?this.duration:this.clipStartTime>0?Math.max(0,Math.min(this.realCurrentTime-this.clipStartTime,this.duration)):this.realCurrentTime},providedDuration:-1,intrinsicDuration:0,get duration(){return this.seekableWindow},get title(){return this.providedTitle||this.inferredTitle},get poster(){return this.providedPoster||this.inferredPoster},get viewType(){return this.providedViewType!=="unknown"?this.providedViewType:this.inferredViewType},get streamType(){return this.providedStreamType!=="unknown"?this.providedStreamType:this.inferredStreamType},get currentSrc(){return this.source},get bufferedStart(){const n=BW(this.buffered)??0;return Math.max(n,this.clipStartTime)},get bufferedEnd(){const n=qp(this.buffered)??0;return Math.min(this.seekableEnd,Math.max(0,n-this.clipStartTime))},get bufferedWindow(){return Math.max(0,this.bufferedEnd-this.bufferedStart)},get seekableStart(){if(this.isLiveDVR&&this.liveDVRWindow>0)return Math.max(0,this.seekableEnd-this.liveDVRWindow);const n=BW(this.seekable)??0;return Math.max(n,this.clipStartTime)},get seekableEnd(){if(this.providedDuration>0)return this.providedDuration;const n=this.liveSyncPosition>0?this.liveSyncPosition:this.canPlay?qp(this.seekable)??1/0:0;return this.clipEndTime>0?Math.min(this.clipEndTime,n):n},get seekableWindow(){const n=this.seekableEnd-this.seekableStart;return isNaN(n)?1/0:Math.max(0,n)},canAirPlay:!1,canGoogleCast:!1,remotePlaybackState:"disconnected",remotePlaybackType:"none",remotePlaybackLoader:null,remotePlaybackInfo:null,get isAirPlayConnected(){return this.remotePlaybackType==="airplay"&&this.remotePlaybackState==="connected"},get isGoogleCastConnected(){return this.remotePlaybackType==="google-cast"&&this.remotePlaybackState==="connected"},pointer:"fine",orientation:"landscape",width:0,height:0,mediaWidth:0,mediaHeight:0,lastKeyboardAction:null,userBehindLiveEdge:!1,liveEdgeTolerance:10,minLiveDVRWindow:60,get canSeek(){return/unknown|on-demand|:dvr/.test(this.streamType)&&Number.isFinite(this.duration)&&(!this.isLiveDVR||this.duration>=this.liveDVRWindow)},get live(){return this.streamType.includes("live")||!Number.isFinite(this.duration)},get liveEdgeStart(){return this.live&&Number.isFinite(this.seekableEnd)?Math.max(0,this.seekableEnd-this.liveEdgeTolerance):0},get liveEdge(){return this.live&&(!this.canSeek||!this.userBehindLiveEdge&&this.currentTime>=this.liveEdgeStart)},get liveEdgeWindow(){return this.live&&Number.isFinite(this.seekableEnd)?this.seekableEnd-this.liveEdgeStart:0},get isLiveDVR(){return/:dvr/.test(this.streamType)},get liveDVRWindow(){return Math.max(this.inferredLiveDVRWindow,this.minLiveDVRWindow)},autoPlaying:!1,providedTitle:"",inferredTitle:"",providedLoop:!1,userPrefersLoop:!1,providedPoster:"",inferredPoster:"",inferredViewType:"unknown",providedViewType:"unknown",providedStreamType:"unknown",inferredStreamType:"unknown",liveSyncPosition:null,inferredLiveDVRWindow:0,savedState:null}),HW=new Set(["autoPlayError","autoPlaying","buffered","canPlay","error","paused","played","playing","seekable","seeking","waiting"]),N5e=new Set([...HW,"ended","inferredPoster","inferredStreamType","inferredTitle","intrinsicDuration","inferredLiveDVRWindow","liveSyncPosition","realCurrentTime","savedState","started","userBehindLiveEdge"]);function qW(n,e=!1){const t=e?HW:N5e;v2.reset(n,r=>t.has(r)),il()}function UW(n,e){const t=n+e.clipStartTime(),r=Math.floor(n)===Math.floor(e.seekableStart()),s=Math.floor(t)===Math.floor(e.seekableEnd());return r?e.seekableStart():s?e.seekableEnd():e.isLiveDVR()&&e.liveDVRWindow()>0&&t<e.seekableEnd()-e.liveDVRWindow()?e.bufferedStart():Math.min(Math.max(e.seekableStart()+.1,t),e.seekableEnd()-.1)}const b2=ku();function or(){return Ur(b2)}class M5e{constructor(e=void 0){N(this,Gn);N(this,U0,null);N(this,ta,null);N(this,oy,-1);N(this,f8);M(this,f8,e)}setTarget(e){M(this,U0,e)}getPlayer(e){var t;return h(this,ta)?h(this,ta):((t=e??h(this,U0))==null||t.dispatchEvent(new tn("find-media-player",{detail:r=>void M(this,ta,r),bubbles:!0,composed:!0})),h(this,ta))}setPlayer(e){M(this,ta,e)}startLoading(e){v(this,Gn,dr).call(this,"media-start-loading",e)}startLoadingPoster(e){v(this,Gn,dr).call(this,"media-poster-start-loading",e)}requestAirPlay(e){v(this,Gn,dr).call(this,"media-airplay-request",e)}requestGoogleCast(e){v(this,Gn,dr).call(this,"media-google-cast-request",e)}play(e){v(this,Gn,dr).call(this,"media-play-request",e)}pause(e){v(this,Gn,dr).call(this,"media-pause-request",e)}mute(e){v(this,Gn,dr).call(this,"media-mute-request",e)}unmute(e){v(this,Gn,dr).call(this,"media-unmute-request",e)}enterFullscreen(e,t){v(this,Gn,dr).call(this,"media-enter-fullscreen-request",t,e)}exitFullscreen(e,t){v(this,Gn,dr).call(this,"media-exit-fullscreen-request",t,e)}lockScreenOrientation(e,t){v(this,Gn,dr).call(this,"media-orientation-lock-request",t,e)}unlockScreenOrientation(e){v(this,Gn,dr).call(this,"media-orientation-unlock-request",e)}enterPictureInPicture(e){v(this,Gn,dr).call(this,"media-enter-pip-request",e)}exitPictureInPicture(e){v(this,Gn,dr).call(this,"media-exit-pip-request",e)}seeking(e,t){v(this,Gn,dr).call(this,"media-seeking-request",t,e)}seek(e,t){v(this,Gn,dr).call(this,"media-seek-request",t,e)}seekToLiveEdge(e){v(this,Gn,dr).call(this,"media-live-edge-request",e)}changeDuration(e,t){v(this,Gn,dr).call(this,"media-duration-change-request",t,e)}changeClipStart(e,t){v(this,Gn,dr).call(this,"media-clip-start-change-request",t,e)}changeClipEnd(e,t){v(this,Gn,dr).call(this,"media-clip-end-change-request",t,e)}changeVolume(e,t){v(this,Gn,dr).call(this,"media-volume-change-request",t,Math.max(0,Math.min(1,e)))}changeAudioTrack(e,t){v(this,Gn,dr).call(this,"media-audio-track-change-request",t,e)}changeQuality(e,t){v(this,Gn,dr).call(this,"media-quality-change-request",t,e)}requestAutoQuality(e){this.changeQuality(-1,e)}changeTextTrackMode(e,t,r){v(this,Gn,dr).call(this,"media-text-track-change-request",r,{index:e,mode:t})}changePlaybackRate(e,t){v(this,Gn,dr).call(this,"media-rate-change-request",t,e)}changeAudioGain(e,t){v(this,Gn,dr).call(this,"media-audio-gain-change-request",t,e)}resumeControls(e){v(this,Gn,dr).call(this,"media-resume-controls-request",e)}pauseControls(e){v(this,Gn,dr).call(this,"media-pause-controls-request",e)}togglePaused(e){const t=this.getPlayer(e==null?void 0:e.target);t&&(t.state.paused?this.play(e):this.pause(e))}toggleControls(e){const t=this.getPlayer(e==null?void 0:e.target);t&&(t.controls.showing?t.controls.hide(0,e):t.controls.show(0,e))}toggleMuted(e){const t=this.getPlayer(e==null?void 0:e.target);t&&(t.state.muted?this.unmute(e):this.mute(e))}toggleFullscreen(e,t){const r=this.getPlayer(t==null?void 0:t.target);r&&(r.state.fullscreen?this.exitFullscreen(e,t):this.enterFullscreen(e,t))}togglePictureInPicture(e){const t=this.getPlayer(e==null?void 0:e.target);t&&(t.state.pictureInPicture?this.exitPictureInPicture(e):this.enterPictureInPicture(e))}showCaptions(e){const t=this.getPlayer(e==null?void 0:e.target);if(!t)return;let r=t.state.textTracks,s=h(this,oy);(!r[s]||!Oi(r[s]))&&(s=-1),s===-1&&(s=r.findIndex(i=>Oi(i)&&i.default)),s===-1&&(s=r.findIndex(i=>Oi(i))),s>=0&&this.changeTextTrackMode(s,"showing",e),M(this,oy,-1)}disableCaptions(e){const t=this.getPlayer(e==null?void 0:e.target);if(!t)return;const r=t.state.textTracks,s=t.state.textTrack;if(s){const i=r.indexOf(s);this.changeTextTrackMode(i,"disabled",e),M(this,oy,i)}}toggleCaptions(e){const t=this.getPlayer(e==null?void 0:e.target);t&&(t.state.textTrack?this.disableCaptions():this.showCaptions())}userPrefersLoopChange(e,t){v(this,Gn,dr).call(this,"media-user-loop-change-request",t,e)}}U0=new WeakMap,ta=new WeakMap,oy=new WeakMap,f8=new WeakMap,Gn=new WeakSet,dr=function(e,t,r){var a,l;const s=new tn(e,{bubbles:!0,composed:!0,cancelable:!0,detail:r,trigger:t});let i=(t==null?void 0:t.target)||null;i&&i instanceof un&&(i=i.el),i=!i||i===document||i===window||i===document.body||((a=h(this,ta))==null?void 0:a.el)&&i instanceof Node&&!h(this,ta).el.contains(i)?h(this,U0)??((l=this.getPlayer())==null?void 0:l.el):i??h(this,U0),h(this,ta)?e==="media-play-request"&&!h(this,ta).state.canLoad?i==null||i.dispatchEvent(s):h(this,ta).canPlayQueue.enqueue(e,()=>i==null?void 0:i.dispatchEvent(s)):i==null||i.dispatchEvent(s)},bHe=function(e){};class O5e{constructor(){G(this,"playerId","vds-player");G(this,"mediaId",null);N(this,Jr,{volume:null,muted:null,audioGain:null,time:null,lang:null,captions:null,rate:null,quality:null});G(this,"saveTimeThrottled",fh(this.saveTime.bind(this),1e3))}async getVolume(){return h(this,Jr).volume}async setVolume(e){h(this,Jr).volume=e,this.save()}async getMuted(){return h(this,Jr).muted}async setMuted(e){h(this,Jr).muted=e,this.save()}async getTime(){return h(this,Jr).time}async setTime(e,t){const r=e<0;h(this,Jr).time=r?null:e,r||t?this.saveTime():this.saveTimeThrottled()}async getLang(){return h(this,Jr).lang}async setLang(e){h(this,Jr).lang=e,this.save()}async getCaptions(){return h(this,Jr).captions}async setCaptions(e){h(this,Jr).captions=e,this.save()}async getPlaybackRate(){return h(this,Jr).rate}async setPlaybackRate(e){h(this,Jr).rate=e,this.save()}async getAudioGain(){return h(this,Jr).audioGain}async setAudioGain(e){h(this,Jr).audioGain=e,this.save()}async getVideoQuality(){return h(this,Jr).quality}async setVideoQuality(e){h(this,Jr).quality=e,this.save()}onChange(e,t,r="vds-player"){const s=r?localStorage.getItem(r):null,i=t?localStorage.getItem(t):null;this.playerId=r,this.mediaId=t,M(this,Jr,{volume:null,muted:null,audioGain:null,lang:null,captions:null,rate:null,quality:null,...s?JSON.parse(s):{},time:i?+i:null})}save(){if(st||!this.playerId)return;const e=JSON.stringify({...h(this,Jr),time:void 0});localStorage.setItem(this.playerId,e)}saveTime(){if(st||!this.mediaId)return;const e=(h(this,Jr).time??0).toString();localStorage.setItem(this.mediaId,e)}}Jr=new WeakMap;const P5e=Symbol(0),I5e=Symbol(0),D5e=Symbol(0),R5e=Symbol(0),$5e=Symbol(0),L5e=Symbol(0),F5e=Symbol(0),j5e=Symbol(0),B5e=Symbol(0),$t={add:P5e,remove:I5e,reset:D5e,select:R5e,readonly:$5e,setReadonly:L5e,onReset:F5e,onRemove:j5e,onUserSelect:B5e};class WW extends O_{constructor(){super(...arguments);G(this,"items",[]);G(this,goe,!1)}get length(){return this.items.length}get readonly(){return this[$t.readonly]}indexOf(t){return this.items.indexOf(t)}getById(t){return t===""?null:this.items.find(r=>r.id===t)??null}toArray(){return[...this.items]}[(goe=$t.readonly,Symbol.iterator)](){return this.items.values()}[$t.add](t,r){const s=this.items.length;""+s in this||Object.defineProperty(this,s,{get(){return this.items[s]}}),!this.items.includes(t)&&(this.items.push(t),this.dispatchEvent(new tn("add",{detail:t,trigger:r})))}[$t.remove](t,r){var i;const s=this.items.indexOf(t);s>=0&&((i=this[$t.onRemove])==null||i.call(this,t,r),this.items.splice(s,1),this.dispatchEvent(new tn("remove",{detail:t,trigger:r})))}[$t.reset](t){var r;for(const s of[...this.items])this[$t.remove](s,t);this.items=[],this[$t.setReadonly](!1,t),(r=this[$t.onReset])==null||r.call(this)}[$t.setReadonly](t,r){this[$t.readonly]!==t&&(this[$t.readonly]=t,this.dispatchEvent(new tn("readonly-change",{detail:t,trigger:r})))}}const w2=Symbol(0);class GW extends WW{get selected(){return this.items.find(e=>e.selected)??null}get selectedIndex(){return this.items.findIndex(e=>e.selected)}[$t.onRemove](e,t){this[$t.select](e,!1,t)}[$t.add](e,t){e[w2]=!1,Object.defineProperty(e,"selected",{get(){return this[w2]},set:r=>{var s;this.readonly||((s=this[$t.onUserSelect])==null||s.call(this),this[$t.select](e,r))}}),super[$t.add](e,t)}[$t.select](e,t,r){if(t===(e==null?void 0:e[w2]))return;const s=this.selected;e&&(e[w2]=t),(t?s!==e:s===e)&&(s&&(s[w2]=!1),this.dispatchEvent(new tn("change",{detail:{prev:s,current:this.selected},trigger:r})))}}class V5e extends GW{}function ei(n,e=2){return Number(n.toFixed(e))}function rT(n){var e;return((e=String(n).split(".")[1])==null?void 0:e.length)??0}function sT(n,e,t){return Math.max(n,Math.min(t,e))}function KW(n,e){const t=e.composedPath()[0];return QU(t)&&n.contains(t)}const iT=new Set;if(!st){let n=function(){for(const e of iT)try{e()}catch{}window.requestAnimationFrame(n)};n()}function z5e(n){return iT.add(n),()=>iT.delete(n)}function rr(n,e,t){n.hasAttribute(e)||n.setAttribute(e,t)}function mh(n,e){if(n.hasAttribute("aria-label")||n.hasAttribute("data-no-label"))return;if(!Ni(e)){Rt(n,"aria-label",e);return}function t(){Rt(n,"aria-label",e())}st?t():me(t)}function YW(n){const e=getComputedStyle(n);return e.display!=="none"&&parseInt(e.opacity)>0}function H5e(n){return!!n&&("checkVisibility"in n?n.checkVisibility({checkOpacity:!0,checkVisibilityCSS:!0}):YW(n))}function ZW(n,e){return z5e(()=>e(H5e(n)))}function XW(n,e,t){for(;e;){if(e===n)return!0;if(t!=null&&t(e))break;e=e.parentElement}return!1}function gh(n,e){return new $n(n).add("pointerup",t=>{t.button===0&&!t.defaultPrevented&&e(t)}).add("keydown",t=>{E5(t)&&e(t)})}function oT(n){return d2(n)&&(n.touches.length>1||n.changedTouches.length>1)}function JW(n){if(st)return n();let e=c2(),t=window.requestAnimationFrame(()=>{ns(n,e),t=-1});return()=>void window.cancelAnimationFrame(t)}function QW(n,e,t,{offsetVarName:r,xOffset:s,yOffset:i,...o}){if(!n)return;const a=t.replace(" ","-").replace("-center","");if(Mi(n,"visibility",e?null:"hidden"),!e)return;let l=t.includes("top");const c=d=>t.includes("left")?`calc(-1 * ${d})`:d,u=d=>l?`calc(-1 * ${d})`:d;return d5(e,n,()=>{r2(e,n,{placement:a,middleware:[...o.middleware??[],n2({fallbackAxisSideDirection:"start",crossAxis:!1}),JE()],...o}).then(({x:d,y:f,middlewareData:p})=>{var y;const m=!!((y=p.flip)!=null&&y.index);l=t.includes(m?"bottom":"top"),n.setAttribute("data-placement",m?t.startsWith("top")?t.replace("top","bottom"):t.replace("bottom","top"):t),Object.assign(n.style,{top:`calc(${f+"px"} + ${u(i?i+"px":`var(--${r}-y-offset, 0px)`)})`,left:`calc(${d+"px"} + ${c(s?s+"px":`var(--${r}-x-offset, 0px)`)})`})})})}function q5e(n){return getComputedStyle(n).animationName!=="none"}function j5(n){return n instanceof HTMLElement}class U5e{constructor(){N(this,Oa);G(this,"priority",0);N(this,I4,!0);N(this,od,null);N(this,D4,null);N(this,sf,new Set)}canRender(e,t){return!!t}attach(e){M(this,od,e),e&&(e.textTracks.onchange=v(this,Oa,pD).bind(this))}addTrack(e){h(this,sf).add(e),v(this,Oa,Doe).call(this,e)}removeTrack(e){var t,r;(r=(t=e[qt.native])==null?void 0:t.remove)==null||r.call(t),e[qt.native]=null,h(this,sf).delete(e)}changeTrack(e){const t=e==null?void 0:e[qt.native];t&&t.track.mode!=="showing"&&(t.track.mode="showing"),M(this,D4,e)}setDisplay(e){M(this,I4,e),v(this,Oa,pD).call(this)}detach(){h(this,od)&&(h(this,od).textTracks.onchange=null);for(const e of h(this,sf))this.removeTrack(e);h(this,sf).clear(),M(this,od,null),M(this,D4,null)}}I4=new WeakMap,od=new WeakMap,D4=new WeakMap,sf=new WeakMap,Oa=new WeakSet,Doe=function(e){var r;if(!h(this,od))return;const t=e[r=qt.native]??(e[r]=v(this,Oa,Roe).call(this,e));j5(t)&&(h(this,od).append(t),t.track.mode=t.default?"showing":"disabled")},Roe=function(e){const t=document.createElement("track"),r=e.default||e.mode==="showing",s=e.src&&e.type==="vtt";return t.id=e.id,t.src=s?e.src:"",t.label=e.label,t.kind=e.kind,t.default=r,e.language&&(t.srclang=e.language),r&&!s&&v(this,Oa,fD).call(this,e,t.track),t},fD=function(e,t){var r;if(!(e.src&&e.type==="vtt"||(r=t.cues)!=null&&r.length))for(const s of e.cues)t.addCue(s)},pD=function(e){for(const t of h(this,sf)){const r=t[qt.native];if(!r)continue;if(!h(this,I4)){r.track.mode=r.managed?"hidden":"disabled";continue}const s=r.track.mode==="showing";s&&v(this,Oa,fD).call(this,t,r.track),t.setMode(s?"showing":"disabled",e)}};class W5e{constructor(e){N(this,ds);N(this,W0,null);N(this,ay);N(this,G0,[]);N(this,R4);N(this,$4,!1);N(this,na,null);N(this,Rc,null);M(this,R4,e);const t=e.textTracks;M(this,ay,t),me(v(this,ds,$oe).bind(this)),Qt(v(this,ds,Boe).bind(this)),new $n(t).add("add",v(this,ds,Foe).bind(this)).add("remove",v(this,ds,joe).bind(this)).add("mode-change",v(this,ds,Zv).bind(this))}add(e){h(this,G0).push(e),Bp(v(this,ds,Zv).bind(this))}remove(e){e.detach(),h(this,G0).splice(h(this,G0).indexOf(e),1),Bp(v(this,ds,Zv).bind(this))}attachVideo(e){requestAnimationFrame(()=>{if(M(this,W0,e),e){M(this,na,new U5e),h(this,na).attach(e);for(const t of h(this,ay))v(this,ds,mD).call(this,t)}v(this,ds,Zv).call(this)})}}W0=new WeakMap,ay=new WeakMap,G0=new WeakMap,R4=new WeakMap,$4=new WeakMap,na=new WeakMap,Rc=new WeakMap,ds=new WeakSet,$oe=function(){const{nativeControls:e}=h(this,R4).$state;M(this,$4,e()),v(this,ds,Zv).call(this)},mD=function(e){var t;Oi(e)&&((t=h(this,na))==null||t.addTrack(e))},Loe=function(e){var t;Oi(e)&&((t=h(this,na))==null||t.removeTrack(e))},Foe=function(e){v(this,ds,mD).call(this,e.detail)},joe=function(e){v(this,ds,Loe).call(this,e.detail)},Zv=function(){var r,s,i,o,a,l,c;const e=h(this,ay).selected;if(h(this,W0)&&(h(this,$4)||e!=null&&e[qt.nativeHLS])){(r=h(this,Rc))==null||r.changeTrack(null),(s=h(this,na))==null||s.setDisplay(!0),(i=h(this,na))==null||i.changeTrack(e);return}if((o=h(this,na))==null||o.setDisplay(!1),(a=h(this,na))==null||a.changeTrack(null),!e){(l=h(this,Rc))==null||l.changeTrack(null);return}const t=h(this,G0).sort((u,d)=>u.priority-d.priority).find(u=>u.canRender(e,h(this,W0)));h(this,Rc)!==t&&((c=h(this,Rc))==null||c.detach(),t==null||t.attach(h(this,W0)),M(this,Rc,t??null)),t==null||t.changeTrack(e)},Boe=function(){var e,t;(e=h(this,na))==null||e.detach(),M(this,na,null),(t=h(this,Rc))==null||t.detach(),M(this,Rc,null)};class G5e extends WW{constructor(){super();N(this,jc);N(this,K0,!1);N(this,$c,{});N(this,Lc,null);N(this,Fc,null);G(this,yoe);N(this,L4,N5(async()=>{var s;if(!h(this,K0))return;!h(this,Fc)&&h(this,Lc)&&M(this,Fc,await h(this,Lc).getLang());const t=await((s=h(this,Lc))==null?void 0:s.getCaptions()),r=[["captions","subtitles"],"chapters","descriptions","metadata"];for(const i of r){const o=this.getByKind(i);if(o.find(d=>d.mode==="showing"))continue;const a=h(this,Fc)?o.find(d=>d.language===h(this,Fc)):null,l=qr(i)?h(this,$c)[i.find(d=>h(this,$c)[d])||""]:h(this,$c)[i],c=a??l,u=c&&Oi(c);c&&(!u||t!==!1)&&(c.mode="showing",u&&v(this,jc,gD).call(this,c))}},300));N(this,ly,null);N(this,F4,v(this,jc,Voe).bind(this))}get selected(){return this.items.find(r=>r.mode==="showing"&&Oi(r))??null}get selectedIndex(){const t=this.selected;return t?this.indexOf(t):-1}get preferredLang(){return h(this,Fc)}set preferredLang(t){M(this,Fc,t),v(this,jc,yD).call(this,t)}add(t,r){const s=t instanceof ph,i=s?t:new ph(t),o=t.kind==="captions"||t.kind==="subtitles"?"captions":t.kind;return h(this,$c)[o]&&t.default&&delete t.default,i.addEventListener("mode-change",h(this,F4)),this[$t.add](i,r),i[qt.crossOrigin]=this[qt.crossOrigin],h(this,K0)&&i[qt.canLoad](),t.default&&(h(this,$c)[o]=i),h(this,L4).call(this),this}remove(t,r){if(M(this,ly,t),!!this.items.includes(t))return t===h(this,$c)[t.kind]&&delete h(this,$c)[t.kind],t.mode="disabled",t[qt.onModeChange]=null,t.removeEventListener("mode-change",h(this,F4)),this[$t.remove](t,r),M(this,ly,null),this}clear(t){for(const r of[...this.items])this.remove(r,t);return this}getByKind(t){const r=Array.isArray(t)?t:[t];return this.items.filter(s=>r.includes(s.kind))}[(yoe=qt.crossOrigin,qt.canLoad)](){if(!h(this,K0)){for(const t of this.items)t[qt.canLoad]();M(this,K0,!0),h(this,L4).call(this)}}setStorage(t){M(this,Lc,t)}}K0=new WeakMap,$c=new WeakMap,Lc=new WeakMap,Fc=new WeakMap,L4=new WeakMap,ly=new WeakMap,F4=new WeakMap,jc=new WeakSet,Voe=function(t){const r=t.detail;if(h(this,Lc)&&Oi(r)&&r!==h(this,ly)&&v(this,jc,gD).call(this,r),r.mode==="showing"){const s=Oi(r)?["captions","subtitles"]:[r.kind];for(const i of this.items)i.mode==="showing"&&i!=r&&s.includes(i.kind)&&(i.mode="disabled")}this.dispatchEvent(new tn("mode-change",{detail:t.detail,trigger:t}))},gD=function(t){var r,s;t.mode!=="disabled"&&v(this,jc,yD).call(this,t.language),(s=(r=h(this,Lc))==null?void 0:r.setCaptions)==null||s.call(r,t.mode==="showing")},yD=function(t){var r,s;(s=(r=h(this,Lc))==null?void 0:r.setLang)==null||s.call(r,M(this,Fc,t))};const K5e=Symbol(0),Y5e=Symbol(0),ti={setAuto:K5e,enableAuto:Y5e};class Z5e extends GW{constructor(){super(...arguments);N(this,Y0,!1);G(this,"switch","current");G(this,voe)}get auto(){return h(this,Y0)||this.readonly}[(voe=ti.enableAuto,$t.onUserSelect)](){this[ti.setAuto](!1)}[$t.onReset](t){this[ti.enableAuto]=void 0,this[ti.setAuto](!1,t)}autoSelect(t){var r;this.readonly||h(this,Y0)||!this[ti.enableAuto]||((r=this[ti.enableAuto])==null||r.call(this,t),this[ti.setAuto](!0,t))}getBySrc(t){return this.items.find(r=>r.src===t)}[ti.setAuto](t,r){h(this,Y0)!==t&&(M(this,Y0,t),this.dispatchEvent(new tn("auto-change",{detail:t,trigger:r})))}}Y0=new WeakMap;function eG(n,e){return[...n].sort(X5e)}function X5e(n,e){return n.height===e.height?(n.bitrate??0)-(e.bitrate??0):n.height-e.height}function J5e(n){return!st&&n instanceof HTMLAudioElement}function Q5e(n){return!st&&n instanceof HTMLVideoElement}function e7e(n){return J5e(n)||Q5e(n)}class Up extends Fo{}const t7e={togglePaused:"k Space",toggleMuted:"m",toggleFullscreen:"f",togglePictureInPicture:"i",toggleCaptions:"c",seekBackward:"j J ArrowLeft",seekForward:"l L ArrowRight",volumeUp:"ArrowUp",volumeDown:"ArrowDown",speedUp:">",slowDown:"<"},x2=new Set(["Shift","Alt","Meta","Ctrl"]),n7e='button, [role="button"]',tG='input, textarea, select, [contenteditable], [role^="menuitem"], [role="timer"]';class r7e extends Up{constructor(t){super();N(this,hs);N(this,Gs);N(this,Z0);N(this,ad,null);M(this,Gs,t)}onConnect(){me(v(this,hs,zoe).bind(this))}}Gs=new WeakMap,hs=new WeakSet,zoe=function(){const{keyDisabled:t,keyTarget:r}=this.$props;if(t())return;const s=r()==="player"?this.el:document,i=bt(!1);s===this.el?new $n(this.el).add("focusin",()=>i.set(!0)).add("focusout",o=>{this.el.contains(o.target)||i.set(!1)}):(Re(i)||i.set(document.querySelector("[data-media-player]")===this.el),Rn(document,"focusin",o=>{const a=o.composedPath().find(l=>l instanceof Element&&l.localName==="media-player");a!==void 0&&i.set(this.el===a)})),me(()=>{i()&&new $n(s).add("keyup",v(this,hs,Hoe).bind(this)).add("keydown",v(this,hs,qoe).bind(this)).add("keydown",v(this,hs,Uoe).bind(this),{capture:!0})})},Hoe=function(t){var o,a;const r=document.activeElement;if(!t.key||!this.$state.canSeek()||r!=null&&r.matches(tG))return;let{method:s,value:i}=v(this,hs,H8).call(this,t);if(!ut(i)&&!qr(i)){(o=i==null?void 0:i.onKeyUp)==null||o.call(i,{event:t,player:h(this,Gs).player,remote:h(this,Gs).remote}),(a=i==null?void 0:i.callback)==null||a.call(i,t,h(this,Gs).remote);return}if(s!=null&&s.startsWith("seek")&&(t.preventDefault(),t.stopPropagation(),h(this,ad)?(v(this,hs,vD).call(this,t,s==="seekForward"),M(this,ad,null)):(h(this,Gs).remote.seek(h(this,Z0),t),M(this,Z0,void 0))),s!=null&&s.startsWith("volume")){const l=this.el.querySelector("[data-media-volume-slider]");l==null||l.dispatchEvent(new KeyboardEvent("keyup",{key:s==="volumeUp"?"Up":"Down",shiftKey:t.shiftKey,trigger:t}))}},qoe=function(t){var a,l,c,u;if(!t.key||x2.has(t.key))return;const r=document.activeElement;if(r!=null&&r.matches(tG)||E5(t)&&(r!=null&&r.matches(n7e)))return;let{method:s,value:i}=v(this,hs,H8).call(this,t),o=!t.metaKey&&/^[0-9]$/.test(t.key);if(!ut(i)&&!qr(i)&&!o){(a=i==null?void 0:i.onKeyDown)==null||a.call(i,{event:t,player:h(this,Gs).player,remote:h(this,Gs).remote}),(l=i==null?void 0:i.callback)==null||l.call(i,t,h(this,Gs).remote);return}if(!s&&o&&!o7e(t)){t.preventDefault(),t.stopPropagation(),h(this,Gs).remote.seek(this.$state.duration()/10*Number(t.key),t);return}if(s){switch(t.preventDefault(),t.stopPropagation(),s){case"seekForward":case"seekBackward":v(this,hs,Goe).call(this,t,s,s==="seekForward");break;case"volumeUp":case"volumeDown":const d=this.el.querySelector("[data-media-volume-slider]");if(d)d.dispatchEvent(new KeyboardEvent("keydown",{key:s==="volumeUp"?"Up":"Down",shiftKey:t.shiftKey,trigger:t}));else{const p=t.shiftKey?.1:.05;h(this,Gs).remote.changeVolume(this.$state.volume()+(s==="volumeUp"?+p:-p),t)}break;case"toggleFullscreen":h(this,Gs).remote.toggleFullscreen("prefer-media",t);break;case"speedUp":case"slowDown":const f=this.$state.playbackRate();h(this,Gs).remote.changePlaybackRate(Math.max(.25,Math.min(2,f+(s==="speedUp"?.25:-.25))),t);break;default:(u=(c=h(this,Gs).remote)[s])==null||u.call(c,t)}this.$state.lastKeyboardAction.set({action:s,event:t})}},Uoe=function(t){e7e(t.target)&&v(this,hs,H8).call(this,t).method&&t.preventDefault()},H8=function(t){const r={...this.$props.keyShortcuts(),...h(this,Gs).ariaKeys},s=Object.keys(r).find(i=>{var c;const o=r[i],a=qr(o)?o.join(" "):ut(o)?o:o==null?void 0:o.keys,l=(c=qr(a)?a:a==null?void 0:a.split(" "))==null?void 0:c.map(u=>i7e(u).replace(/Control/g,"Ctrl").split("+"));return l==null?void 0:l.some(u=>{const d=new Set(u.filter(f=>x2.has(f)));for(const f of x2){const p=f.toLowerCase()+"Key";if(!d.has(f)&&t[p])return!1}return u.every(f=>x2.has(f)?t[f.toLowerCase()+"Key"]:t.key===f.replace("Space"," "))})});return{method:s,value:s?r[s]:null}},Z0=new WeakMap,Woe=function(t,r){const s=t.shiftKey?10:5;return M(this,Z0,Math.max(0,Math.min((h(this,Z0)??this.$state.currentTime())+(r==="seekForward"?+s:-s),this.$state.duration())))},ad=new WeakMap,vD=function(t,r){var s;(s=h(this,ad))==null||s.dispatchEvent(new KeyboardEvent(t.type,{key:r?"Right":"Left",shiftKey:t.shiftKey,trigger:t}))},Goe=function(t,r,s){this.$state.canSeek()&&(h(this,ad)||M(this,ad,this.el.querySelector("[data-media-time-slider]")),h(this,ad)?v(this,hs,vD).call(this,t,s):h(this,Gs).remote.seeking(v(this,hs,Woe).call(this,t,r),t))};const s7e=["!","@","#","$","%","^","&","*","(",")"];function i7e(n){return n.replace(/Shift\+(\d)/g,(e,t)=>s7e[t-1])}function o7e(n){for(const e of x2)if(n[e.toLowerCase()+"Key"])return!0;return!1}class a7e extends Fo{constructor(t){super();N(this,X0);M(this,X0,t)}onAttach(t){const{$props:r,ariaKeys:s}=or(),i=t.getAttribute("aria-keyshortcuts");if(i){s[h(this,X0)]=i,st||Qt(()=>{delete s[h(this,X0)]});return}const o=r.keyShortcuts()[h(this,X0)];if(o){const a=qr(o)?o.join(" "):ut(o)?o:o==null?void 0:o.keys;t.setAttribute("aria-keyshortcuts",qr(a)?a.join(" "):a)}}}X0=new WeakMap;class l7e extends Up{constructor(){super(...arguments);N(this,Kn);N(this,cy,-2);N(this,ld,!1);N(this,j4,bt(!1));N(this,uy,bt(!1));N(this,of,null);N(this,dy,bt(!0));G(this,"defaultDelay",2e3)}get canIdle(){return h(this,dy).call(this)}set canIdle(t){h(this,dy).set(t)}get hideOnMouseLeave(){const{hideControlsOnMouseLeave:t}=this.$props;return h(this,j4).call(this)||t()}set hideOnMouseLeave(t){h(this,j4).set(t)}get showing(){return this.$state.controlsVisible()}show(t=0,r){v(this,Kn,q8).call(this),h(this,ld)||v(this,Kn,v6).call(this,!0,t,r)}hide(t=this.defaultDelay,r){v(this,Kn,q8).call(this),h(this,ld)||v(this,Kn,v6).call(this,!1,t,r)}pause(t){M(this,ld,!0),v(this,Kn,q8).call(this),v(this,Kn,v6).call(this,!0,0,t)}resume(t){M(this,ld,!1),!this.$state.paused()&&v(this,Kn,v6).call(this,!1,this.defaultDelay,t)}onConnect(){me(v(this,Kn,Koe).bind(this))}}cy=new WeakMap,ld=new WeakMap,j4=new WeakMap,uy=new WeakMap,of=new WeakMap,dy=new WeakMap,Kn=new WeakSet,Koe=function(){const{viewType:t}=this.$state;if(!this.el||!h(this,dy).call(this))return;if(t()==="audio"){this.show();return}me(v(this,Kn,Yoe).bind(this)),me(v(this,Kn,Zoe).bind(this));const r=v(this,Kn,Xoe).bind(this),s=v(this,Kn,Joe).bind(this),i=v(this,Kn,Qoe).bind(this);new $n(this.el).add("can-play",o=>this.show(0,o)).add("play",r).add("pause",s).add("end",i).add("auto-play-fail",s)},Yoe=function(){if(!this.el)return;const{started:t,pointer:r,paused:s}=this.$state;if(!t()||r()!=="fine")return;const i=new $n(this.el),o=this.hideOnMouseLeave;(!o||!h(this,uy).call(this))&&me(()=>{s()||i.add("pointermove",v(this,Kn,bD).bind(this))}),o&&i.add("mouseenter",v(this,Kn,eae).bind(this)).add("mouseleave",v(this,Kn,tae).bind(this))},Zoe=function(){const{paused:t,started:r,autoPlayError:s}=this.$state;if(t()||s()&&!r())return;const i=v(this,Kn,bD).bind(this);me(()=>{if(!this.el)return;const o=this.$state.pointer(),a=o==="coarse",l=new $n(this.el),c=[a?"touchend":"pointerup","keydown"];for(const u of c)l.add(u,i,{passive:!1})})},Xoe=function(t){t.triggers.hasType("ended")||(this.show(0,t),this.hide(void 0,t))},Joe=function(t){this.show(0,t)},Qoe=function(t){const{loop:r}=this.$state;r()&&this.hide(0,t)},eae=function(t){h(this,uy).set(!1),this.show(0,t),this.hide(void 0,t)},tae=function(t){h(this,uy).set(!0),this.hide(0,t)},q8=function(){window.clearTimeout(h(this,cy)),M(this,cy,-1)},bD=function(t){var r;t.MEDIA_GESTURE||h(this,ld)||oT(t)||(h2(t)&&(t.key==="Escape"?((r=this.el)==null||r.focus(),M(this,of,null)):h(this,of)&&(t.preventDefault(),requestAnimationFrame(()=>{var s;(s=h(this,of))==null||s.focus(),M(this,of,null)}))),this.show(0,t),this.hide(this.defaultDelay,t))},v6=function(t,r,s){if(r===0){v(this,Kn,wD).call(this,t,s);return}M(this,cy,window.setTimeout(()=>{this.scope&&v(this,Kn,wD).call(this,t&&!h(this,ld),s)},r))},wD=function(t,r){var s;this.$state.controlsVisible()!==t&&(this.$state.controlsVisible.set(t),!t&&document.activeElement&&((s=this.el)!=null&&s.contains(document.activeElement))&&(M(this,of,document.activeElement),requestAnimationFrame(()=>{var i;(i=this.el)==null||i.focus({preventScroll:!0})})),this.dispatch("controls-change",{detail:t,trigger:r}))};const aT=hh.fullscreenEnabled;class c7e extends Fo{constructor(){super(...arguments);N(this,lf);N(this,af,!1);N(this,hy,!1)}get active(){return h(this,hy)}get supported(){return aT}onConnect(){new $n(hh).add("fullscreenchange",v(this,lf,rae).bind(this)).add("fullscreenerror",v(this,lf,sae).bind(this)),Qt(v(this,lf,nae).bind(this))}async enter(){try{return M(this,af,!0),!this.el||lT(this.el)?void 0:(nG(),hh.requestFullscreen(this.el))}catch(t){throw M(this,af,!1),t}}async exit(){if(!(!this.el||!lT(this.el)))return nG(),hh.exitFullscreen()}}af=new WeakMap,hy=new WeakMap,lf=new WeakSet,nae=async function(){aT&&await this.exit()},rae=function(t){const r=lT(this.el);r!==h(this,hy)&&(r||M(this,af,!1),M(this,hy,r),this.dispatch("fullscreen-change",{detail:r,trigger:t}))},sae=function(t){h(this,af)&&(this.dispatch("fullscreen-error",{detail:null,trigger:t}),M(this,af,!1))};function lT(n){if(hh.fullscreenElement===n)return!0;try{return n.matches(hh.fullscreenPseudoClass)}catch{return!1}}function nG(){if(!aT)throw Error("[vidstack] no fullscreen API")}const p8=class p8 extends Fo{constructor(){super(...arguments);N(this,ra);N(this,cf,bt(v(this,ra,CD).call(this)));N(this,cd,bt(!1));N(this,J0)}get type(){return h(this,cf).call(this)}get locked(){return h(this,cd).call(this)}get portrait(){return h(this,cf).call(this).startsWith("portrait")}get landscape(){return h(this,cf).call(this).startsWith("landscape")}get supported(){return p8.supported}onConnect(){if(this.supported)Rn(screen.orientation,"change",v(this,ra,xD).bind(this));else{const t=window.matchMedia("(orientation: landscape)");t.onchange=v(this,ra,xD).bind(this),Qt(()=>t.onchange=null)}Qt(v(this,ra,iae).bind(this))}async lock(t){Re(h(this,cd))||h(this,J0)===t||(v(this,ra,kD).call(this),await screen.orientation.lock(t),h(this,cd).set(!0),M(this,J0,t))}async unlock(){Re(h(this,cd))&&(v(this,ra,kD).call(this),M(this,J0,void 0),await screen.orientation.unlock(),h(this,cd).set(!1))}};cf=new WeakMap,cd=new WeakMap,J0=new WeakMap,ra=new WeakSet,iae=async function(){this.supported&&h(this,cd).call(this)&&await this.unlock()},xD=function(t){h(this,cf).set(v(this,ra,CD).call(this)),this.dispatch("orientation-change",{detail:{orientation:Re(h(this,cf)),lock:h(this,J0)},trigger:t})},kD=function(){if(!this.supported)throw Error("[vidstack] no orientation API")},CD=function(){return st?"portrait-primary":this.supported?window.screen.orientation.type:window.innerWidth>=window.innerHeight?"landscape-primary":"portrait-primary"},G(p8,"supported",IW());let B5=p8;class u7e{constructor(){G(this,"name","audio");G(this,"target")}canPlay(e){return J_(e)?st||!ut(e.src)||e.type==="?"||DW(this.target,e.type):!1}mediaType(){return"audio"}async load(e){if(st)throw Error("[vidstack] can not load audio provider server-side");return new(await Promise.resolve().then(()=>Oze)).AudioProvider(this.target,e)}}class cT{constructor(){G(this,"name","video");G(this,"target")}canPlay(e){return Q_(e)?st||!ut(e.src)||e.type==="?"||RW(this.target,e.type):!1}mediaType(){return"video"}async load(e){if(st)throw Error("[vidstack] can not load video provider server-side");return new(await Promise.resolve().then(function(){return T7e})).VideoProvider(this.target,e)}}const m8=class m8 extends cT{constructor(){super(...arguments);G(this,"name","hls")}canPlay(t){return m8.supported&&Qg(t)}async load(t){if(st)throw Error("[vidstack] can not load hls provider server-side");return new(await Promise.resolve().then(()=>Fze)).HLSProvider(this.target,t)}};G(m8,"supported",F5());let uT=m8,V5=null,z5=[],H5=[];function dT(){return V5??(V5=new AudioContext)}function d7e(){const n=dT(),e=n.createGain();return e.connect(n.destination),z5.push(e),e}function h7e(n,e){const t=dT(),r=t.createMediaElementSource(n);return e&&r.connect(e),H5.push(r),r}function f7e(n){const e=z5.indexOf(n);e!==-1&&(z5.splice(e,1),n.disconnect(),rG())}function p7e(n){const e=H5.indexOf(n);e!==-1&&(H5.splice(e,1),n.disconnect(),rG())}function rG(){V5&&z5.length===0&&H5.length===0&&V5.close().then(()=>{V5=null})}class m7e{constructor(e,t){N(this,Q0);N(this,B4);N(this,fy);N(this,sa,null);N(this,Pa,null);M(this,B4,e),M(this,fy,t)}get currentGain(){var e,t;return((t=(e=h(this,sa))==null?void 0:e.gain)==null?void 0:t.value)??null}get supported(){return!0}setGain(e){const t=this.currentGain;if(e!==this.currentGain){if(e===1&&t!==1){this.removeGain();return}h(this,sa)||(M(this,sa,d7e()),h(this,Pa)&&h(this,Pa).connect(h(this,sa))),h(this,Pa)||M(this,Pa,h7e(h(this,B4),h(this,sa))),h(this,sa).gain.value=e,h(this,fy).call(this,e)}}removeGain(){h(this,sa)&&(h(this,Pa)&&h(this,Pa).connect(dT().destination),v(this,Q0,SD).call(this),h(this,fy).call(this,null))}destroy(){v(this,Q0,oae).call(this),v(this,Q0,SD).call(this)}}B4=new WeakMap,fy=new WeakMap,sa=new WeakMap,Pa=new WeakMap,Q0=new WeakSet,oae=function(){if(h(this,Pa))try{p7e(h(this,Pa))}catch{}finally{M(this,Pa,null)}},SD=function(){if(h(this,sa))try{f7e(h(this,sa))}catch{}finally{M(this,sa,null)}};const g7e=["focus","blur","visibilitychange","pageshow","pagehide"];class y7e{constructor(){N(this,g8);N(this,em,bt(sG()));N(this,py,bt(st?"visible":document.visibilityState));N(this,V4)}connect(){const e=new $n(window),t=v(this,g8,aae).bind(this);for(const r of g7e)e.add(r,t);L5&&e.add("beforeunload",r=>{M(this,V4,setTimeout(()=>{r.defaultPrevented||r.returnValue.length>0||(h(this,em).set("hidden"),h(this,py).set("hidden"))},0))})}get pageState(){return h(this,em).call(this)}get visibility(){return h(this,py).call(this)}}em=new WeakMap,py=new WeakMap,V4=new WeakMap,g8=new WeakSet,aae=function(e){L5&&window.clearTimeout(h(this,V4)),(e.type!=="blur"||h(this,em).call(this)==="active")&&(h(this,em).set(sG(e)),h(this,py).set(document.visibilityState=="hidden"?"hidden":"visible"))};function sG(n){return st||(n==null?void 0:n.type)==="blur"||document.visibilityState==="hidden"?"hidden":document.hasFocus()?"active":"passive"}class k2{constructor(e){N(this,H4);N(this,ud);N(this,z4);M(this,z4,e)}start(){Yr(h(this,ud))&&v(this,H4,ED).call(this)}stop(){Ds(h(this,ud))&&window.cancelAnimationFrame(h(this,ud)),M(this,ud,void 0)}}ud=new WeakMap,z4=new WeakMap,H4=new WeakSet,ED=function(){M(this,ud,window.requestAnimationFrame(()=>{Yr(h(this,ud))||(h(this,z4).call(this),v(this,H4,ED).call(this))}))};class v7e{constructor(e,t){N(this,ke);N(this,q4);N(this,_n);N(this,uf,!1);N(this,my,!1);N(this,gy,!1);N(this,tm,new k2(v(this,ke,cae).bind(this)));N(this,U4,new y7e);N(this,yy);N(this,vy,0);N(this,by,-1);N(this,y8);N(this,HI);M(this,q4,e),M(this,_n,t),M(this,yy,new $n(e.media)),v(this,ke,uae).call(this),h(this,U4).connect(),me(v(this,ke,Eae).bind(this)),Qt(v(this,ke,lae).bind(this))}}q4=new WeakMap,_n=new WeakMap,uf=new WeakMap,my=new WeakMap,gy=new WeakMap,tm=new WeakMap,U4=new WeakMap,yy=new WeakMap,ke=new WeakSet,Zn=function(){return h(this,q4).media},lae=function(){var e;M(this,my,!1),M(this,gy,!1),h(this,tm).stop(),h(this,yy).abort(),(e=h(this,y8))==null||e.clear()},vy=new WeakMap,by=new WeakMap,cae=function(){const e=h(this,ke,Zn).currentTime;!(L5&&e-h(this,by)<.35)&&h(this,vy)!==e&&(v(this,ke,sg).call(this,e),M(this,vy,e))},uae=function(){v(this,ke,Qr).call(this,"loadstart",v(this,ke,fae)),v(this,ke,Qr).call(this,"abort",v(this,ke,_D)),v(this,ke,Qr).call(this,"emptied",v(this,ke,pae)),v(this,ke,Qr).call(this,"error",v(this,ke,Dae)),v(this,ke,Qr).call(this,"volumechange",v(this,ke,Aae))},dae=function(){h(this,my)||(v(this,ke,Qr).call(this,"loadeddata",v(this,ke,mae)),v(this,ke,Qr).call(this,"loadedmetadata",v(this,ke,gae)),v(this,ke,Qr).call(this,"canplay",v(this,ke,bae)),v(this,ke,Qr).call(this,"canplaythrough",v(this,ke,wae)),v(this,ke,Qr).call(this,"durationchange",v(this,ke,Tae)),v(this,ke,Qr).call(this,"play",v(this,ke,yae)),v(this,ke,Qr).call(this,"progress",v(this,ke,Oae)),v(this,ke,Qr).call(this,"stalled",v(this,ke,kae)),v(this,ke,Qr).call(this,"suspend",v(this,ke,Pae)),v(this,ke,Qr).call(this,"ratechange",v(this,ke,Iae)),M(this,my,!0))},hae=function(){h(this,gy)||(v(this,ke,Qr).call(this,"pause",v(this,ke,vae)),v(this,ke,Qr).call(this,"playing",v(this,ke,xae)),v(this,ke,Qr).call(this,"seeked",v(this,ke,Nae)),v(this,ke,Qr).call(this,"seeking",v(this,ke,Mae)),v(this,ke,Qr).call(this,"ended",v(this,ke,Sae)),v(this,ke,Qr).call(this,"waiting",v(this,ke,Cae)),M(this,gy,!0))},y8=new WeakMap,HI=new WeakMap,Qr=function(e,t){h(this,yy).add(e,t.bind(this))},wHe=function(e){},sg=function(e,t){const r=Math.min(e,h(this,_n).$state.seekableEnd());h(this,_n).notify("time-change",r,t)},fae=function(e){if(h(this,ke,Zn).networkState===3){v(this,ke,_D).call(this,e);return}v(this,ke,dae).call(this),h(this,_n).notify("load-start",void 0,e)},_D=function(e){h(this,_n).notify("abort",void 0,e)},pae=function(){h(this,_n).notify("emptied",void 0,event)},mae=function(e){h(this,_n).notify("loaded-data",void 0,e)},gae=function(e){M(this,vy,0),M(this,by,-1),v(this,ke,hae).call(this),h(this,_n).notify("loaded-metadata",void 0,e),(R5||L5&&Qg(h(this,_n).$state.source()))&&h(this,_n).delegate.ready(v(this,ke,U8).call(this),e)},U8=function(){return{provider:Re(h(this,_n).$provider),duration:h(this,ke,Zn).duration,buffered:h(this,ke,Zn).buffered,seekable:h(this,ke,Zn).seekable}},yae=function(e){h(this,_n).$state.canPlay&&h(this,_n).notify("play",void 0,e)},vae=function(e){h(this,ke,Zn).readyState===1&&!h(this,uf)||(M(this,uf,!1),h(this,tm).stop(),h(this,_n).notify("pause",void 0,e))},bae=function(e){h(this,_n).delegate.ready(v(this,ke,U8).call(this),e)},wae=function(e){h(this,_n).$state.started()||h(this,_n).notify("can-play-through",v(this,ke,U8).call(this),e)},xae=function(e){h(this,ke,Zn).paused||(M(this,uf,!1),h(this,_n).notify("playing",void 0,e),h(this,tm).start())},kae=function(e){h(this,_n).notify("stalled",void 0,e),h(this,ke,Zn).readyState<3&&(M(this,uf,!0),h(this,_n).notify("waiting",void 0,e))},Cae=function(e){h(this,ke,Zn).readyState<3&&(M(this,uf,!0),h(this,_n).notify("waiting",void 0,e))},Sae=function(e){h(this,tm).stop(),v(this,ke,sg).call(this,h(this,ke,Zn).duration,e),h(this,_n).notify("end",void 0,e),h(this,_n).$state.loop()&&YU(h(this,ke,Zn).controls)&&(h(this,ke,Zn).controls=!1)},Eae=function(){const e=h(this,_n).$state.paused(),t=h(this,U4).visibility==="hidden";(e||t)&&Rn(h(this,ke,Zn),"timeupdate",v(this,ke,_ae).bind(this))},_ae=function(e){v(this,ke,sg).call(this,h(this,ke,Zn).currentTime,e)},Tae=function(e){h(this,_n).$state.ended()&&v(this,ke,sg).call(this,h(this,ke,Zn).duration,e),h(this,_n).notify("duration-change",h(this,ke,Zn).duration,e)},Aae=function(e){const t={volume:h(this,ke,Zn).volume,muted:h(this,ke,Zn).muted};h(this,_n).notify("volume-change",t,e)},Nae=function(e){M(this,by,h(this,ke,Zn).currentTime),v(this,ke,sg).call(this,h(this,ke,Zn).currentTime,e),h(this,_n).notify("seeked",h(this,ke,Zn).currentTime,e),Math.trunc(h(this,ke,Zn).currentTime)===Math.trunc(h(this,ke,Zn).duration)&&rT(h(this,ke,Zn).duration)>rT(h(this,ke,Zn).currentTime)&&(v(this,ke,sg).call(this,h(this,ke,Zn).duration,e),h(this,ke,Zn).ended||h(this,_n).player.dispatch(new tn("media-play-request",{trigger:e})))},Mae=function(e){h(this,_n).notify("seeking",h(this,ke,Zn).currentTime,e)},Oae=function(e){const t={buffered:h(this,ke,Zn).buffered,seekable:h(this,ke,Zn).seekable};h(this,_n).notify("progress",t,e)},Pae=function(e){h(this,_n).notify("suspend",void 0,e)},Iae=function(e){h(this,_n).notify("rate-change",h(this,ke,Zn).playbackRate,e)},Dae=function(e){const t=h(this,ke,Zn).error;if(!t)return;const r={message:t.message,code:t.code,mediaError:t};h(this,_n).notify("error",r,e)};class b7e{constructor(e,t){N(this,js);N(this,W4);N(this,Tl);M(this,W4,e),M(this,Tl,t),h(this,js,Xv).onaddtrack=v(this,js,Rae).bind(this),h(this,js,Xv).onremovetrack=v(this,js,$ae).bind(this),h(this,js,Xv).onchange=v(this,js,Lae).bind(this),Rn(h(this,Tl).audioTracks,"change",v(this,js,Fae).bind(this))}}W4=new WeakMap,Tl=new WeakMap,js=new WeakSet,Xv=function(){return h(this,W4).media.audioTracks},Rae=function(e){const t=e.track;if(t.label==="")return;const r=t.id.toString()||`native-audio-${h(this,Tl).audioTracks.length}`,s={id:r,label:t.label,language:t.language,kind:t.kind,selected:!1};h(this,Tl).audioTracks[$t.add](s,e),t.enabled&&(s.selected=!0)},$ae=function(e){const t=h(this,Tl).audioTracks.getById(e.track.id);t&&h(this,Tl).audioTracks[$t.remove](t,e)},Lae=function(e){let t=v(this,js,TD).call(this);if(!t)return;const r=h(this,Tl).audioTracks.getById(t.id);r&&h(this,Tl).audioTracks[$t.select](r,!0,e)},TD=function(){return Array.from(h(this,js,Xv)).find(e=>e.enabled)},Fae=function(e){const{current:t}=e.detail;if(!t)return;const r=h(this,js,Xv).getTrackById(t.id);if(r){const s=v(this,js,TD).call(this);s&&(s.enabled=!1),r.enabled=!0}};class iG{constructor(e,t){N(this,G4);G(this,"scope",wu());G(this,"currentSrc",null);G(this,"audioGain");this.media=e,this.ctx=t,this.audioGain=new m7e(e,r=>{this.ctx.notify("audio-gain-change",r)})}setup(){new v7e(this,this.ctx),"audioTracks"in this.media&&new b7e(this,this.ctx),Qt(()=>{this.audioGain.destroy(),this.media.srcObject=null,this.media.removeAttribute("src");for(const e of this.media.querySelectorAll("source"))e.remove();this.media.load()})}get type(){return""}setPlaybackRate(e){this.media.playbackRate=e}async play(){return this.media.play()}async pause(){return this.media.pause()}setMuted(e){this.media.muted=e}setVolume(e){this.media.volume=e}setCurrentTime(e){this.media.currentTime=e}setPlaysInline(e){Rt(this.media,"playsinline",e)}async loadSource({src:e,type:t},r){this.media.preload=r||"",g5e(e)?(this.removeSource(),this.media.srcObject=e):(this.media.srcObject=null,ut(e)?t!=="?"?this.appendSource({src:e,type:t}):(this.removeSource(),this.media.src=v(this,G4,AD).call(this,e)):(this.removeSource(),this.media.src=window.URL.createObjectURL(e))),this.media.load(),this.currentSrc={src:e,type:t}}appendSource(e,t){const r=this.media.querySelector("source[data-vds]"),s=r??document.createElement("source");Rt(s,"src",v(this,G4,AD).call(this,e.src)),Rt(s,"type",e.type!=="?"?e.type:t),Rt(s,"data-vds",""),r||this.media.append(s)}removeSource(){var e;(e=this.media.querySelector("source[data-vds]"))==null||e.remove()}}G4=new WeakSet,AD=function(e){const{clipStartTime:t,clipEndTime:r}=this.ctx.$state,s=t(),i=r();return s>0&&i>0?`${e}#t=${s},${i}`:s>0?`${e}#t=${s}`:i>0?`${e}#t=0,${i}`:e};class w7e{constructor(e,t){N(this,df);N(this,Ia);N(this,K4);N(this,Y4);N(this,nm,bt(!1));M(this,Ia,e),M(this,K4,t),v(this,df,jae).call(this)}get supported(){return h(this,nm).call(this)}async prompt(){if(!this.supported)throw Error("Not supported on this platform.");return this.type==="airplay"&&h(this,Ia).webkitShowPlaybackTargetPicker?h(this,Ia).webkitShowPlaybackTargetPicker():h(this,Ia).remote.prompt()}}Ia=new WeakMap,K4=new WeakMap,Y4=new WeakMap,nm=new WeakMap,df=new WeakSet,jae=function(){var e;st||!((e=h(this,Ia))!=null&&e.remote)||!this.canPrompt||(h(this,Ia).remote.watchAvailability(t=>{h(this,nm).set(t)}).catch(()=>{h(this,nm).set(!1)}),me(v(this,df,Bae).bind(this)))},Bae=function(){if(!h(this,nm).call(this))return;const e=["connecting","connect","disconnect"],t=v(this,df,Vae).bind(this);t(),Rn(h(this,Ia),"playing",t);const r=new $n(h(this,Ia).remote);for(const s of e)r.add(s,t)},Vae=function(e){const t=h(this,Ia).remote.state;if(t===h(this,Y4))return;const r={type:this.type,state:t};h(this,K4).notify("remote-playback-change",r,e),M(this,Y4,t)};class oG extends w7e{constructor(){super(...arguments);G(this,"type","airplay")}get canPrompt(){return"WebKitPlaybackTargetAvailabilityEvent"in window}}class x7e{constructor(e,t){N(this,ky);N(this,wy);N(this,xy);M(this,wy,e),M(this,xy,t),e.textTracks.onaddtrack=v(this,ky,zae).bind(this),Qt(v(this,ky,Hae).bind(this))}}wy=new WeakMap,xy=new WeakMap,ky=new WeakSet,zae=function(e){const t=e.track;if(!t||k7e(h(this,wy),t))return;const r=new ph({id:t.id,kind:t.kind,label:t.label??"",language:t.language,type:"vtt"});r[qt.native]={track:t},r[qt.readyState]=2,r[qt.nativeHLS]=!0;let s=0;const i=o=>{if(t.cues)for(let a=s;a<t.cues.length;a++)r.addCue(t.cues[a],o),s++};i(e),t.oncuechange=i,h(this,xy).textTracks.add(r,e),r.setMode(t.mode,e)},Hae=function(){var e;h(this,wy).textTracks.onaddtrack=null;for(const t of h(this,xy).textTracks){const r=(e=t[qt.native])==null?void 0:e.track;r!=null&&r.oncuechange&&(r.oncuechange=null)}};function k7e(n,e){return Array.from(n.children).find(t=>t.track===e)}class C7e{constructor(e,t){N(this,Cy);N(this,rm);N(this,Z4);N(this,X4,(e,t)=>{h(this,Z4).notify("picture-in-picture-change",e,t)});M(this,rm,e),M(this,Z4,t),new $n(e).add("enterpictureinpicture",v(this,Cy,qae).bind(this)).add("leavepictureinpicture",v(this,Cy,Uae).bind(this))}get active(){return document.pictureInPictureElement===h(this,rm)}get supported(){return LW(h(this,rm))}async enter(){return h(this,rm).requestPictureInPicture()}exit(){return document.exitPictureInPicture()}}rm=new WeakMap,Z4=new WeakMap,Cy=new WeakSet,qae=function(e){h(this,X4).call(this,!0,e)},Uae=function(e){h(this,X4).call(this,!1,e)},X4=new WeakMap;class S7e{constructor(e,t){N(this,v8);N(this,sm);N(this,Sy);N(this,Bc,"inline");M(this,sm,e),M(this,Sy,t),Rn(e,"webkitpresentationmodechanged",v(this,v8,Wae).bind(this))}get mode(){return h(this,Bc)}get supported(){return FW(h(this,sm))}async setPresentationMode(e){h(this,Bc)!==e&&h(this,sm).webkitSetPresentationMode(e)}}sm=new WeakMap,Sy=new WeakMap,Bc=new WeakMap,v8=new WeakSet,Wae=function(e){var r;const t=h(this,Bc);M(this,Bc,h(this,sm).webkitPresentationMode),(r=h(this,Sy).player)==null||r.dispatch(new tn("video-presentation-change",{detail:h(this,Bc),trigger:e})),["fullscreen","picture-in-picture"].forEach(s=>{(h(this,Bc)===s||t===s)&&h(this,Sy).notify(`${s}-change`,h(this,Bc)===s,e)})};class E7e{constructor(e){N(this,hf);M(this,hf,e)}get active(){return h(this,hf).mode==="fullscreen"}get supported(){return h(this,hf).supported}async enter(){h(this,hf).setPresentationMode("fullscreen")}async exit(){h(this,hf).setPresentationMode("inline")}}hf=new WeakMap;class _7e{constructor(e){N(this,ff);M(this,ff,e)}get active(){return h(this,ff).mode==="picture-in-picture"}get supported(){return h(this,ff).supported}async enter(){h(this,ff).setPresentationMode("picture-in-picture")}async exit(){h(this,ff).setPresentationMode("inline")}}ff=new WeakMap;let hT=class extends iG{constructor(t,r){super(t,r);G(this,"$$PROVIDER_TYPE","VIDEO");G(this,"airPlay");G(this,"fullscreen");G(this,"pictureInPicture");ns(()=>{if(this.airPlay=new oG(t,r),FW(t)){const s=new S7e(t,r);this.fullscreen=new E7e(s),this.pictureInPicture=new _7e(s)}else LW(t)&&(this.pictureInPicture=new C7e(t,r))},this.scope)}get type(){return"video"}setup(){super.setup(),$W(this.video)&&new x7e(this.video,this.ctx),this.ctx.textRenderers.attachVideo(this.video),Qt(()=>{this.ctx.textRenderers.attachVideo(null)}),this.type==="video"&&this.ctx.notify("provider-setup",this)}get video(){return this.media}};var T7e=Object.freeze({__proto__:null,VideoProvider:hT});function aG(n){try{return new Intl.DisplayNames(navigator.languages,{type:"language"}).of(n)??null}catch{return null}}const A7e=n=>`dash-${sc(n)}`;class N7e{constructor(e,t){N(this,Mt);N(this,pf);N(this,gr);N(this,bn,null);N(this,Ey,new Set);N(this,_y,null);G(this,"config",{});N(this,dd,null);N(this,Ty,{});N(this,mf,-1);M(this,pf,e),M(this,gr,t)}get instance(){return h(this,bn)}setup(e){M(this,bn,e().create());const t=v(this,Mt,Yae).bind(this);for(const r of Object.values(e.events))h(this,bn).on(r,t);h(this,bn).on(e.events.ERROR,v(this,Mt,tle).bind(this));for(const r of h(this,Ey))r(h(this,bn));h(this,gr).player.dispatch("dash-instance",{detail:h(this,bn)}),h(this,bn).initialize(h(this,pf),void 0,!1),h(this,bn).updateSettings({streaming:{text:{defaultEnabled:!1,dispatchForManualRendering:!0},buffer:{fastSwitchEnabled:!0}},...this.config}),h(this,bn).on(e.events.FRAGMENT_LOADING_STARTED,v(this,Mt,nle).bind(this)),h(this,bn).on(e.events.FRAGMENT_LOADING_COMPLETED,v(this,Mt,rle).bind(this)),h(this,bn).on(e.events.MANIFEST_LOADED,v(this,Mt,ele).bind(this)),h(this,bn).on(e.events.QUALITY_CHANGE_RENDERED,v(this,Mt,Qae).bind(this)),h(this,bn).on(e.events.TEXT_TRACKS_ADDED,v(this,Mt,Xae).bind(this)),h(this,bn).on(e.events.TRACK_CHANGE_RENDERED,v(this,Mt,Jae).bind(this)),h(this,gr).qualities[ti.enableAuto]=v(this,Mt,ile).bind(this),Rn(h(this,gr).qualities,"change",v(this,Mt,ole).bind(this)),Rn(h(this,gr).audioTracks,"change",v(this,Mt,ale).bind(this)),M(this,_y,me(v(this,Mt,Gae).bind(this)))}onInstance(e){return h(this,Ey).add(e),()=>h(this,Ey).delete(e)}loadSource(e){var t;v(this,Mt,OD).call(this),ut(e.src)&&((t=h(this,bn))==null||t.attachSource(e.src))}destroy(){var e,t;v(this,Mt,OD).call(this),(e=h(this,bn))==null||e.destroy(),M(this,bn,null),(t=h(this,_y))==null||t.call(this),M(this,_y,null)}}pf=new WeakMap,gr=new WeakMap,bn=new WeakMap,Ey=new WeakMap,_y=new WeakMap,Mt=new WeakSet,ig=function(e){return new tn(A7e(e.type),{detail:e})},Gae=function(){if(!h(this,gr).$state.live())return;const e=new k2(v(this,Mt,Kae).bind(this));return e.start(),e.stop.bind(e)},Kae=function(){if(!h(this,bn))return;const e=h(this,bn).duration()-h(this,bn).time();h(this,gr).$state.liveSyncPosition.set(isNaN(e)?1/0:e)},Yae=function(e){var t;(t=h(this,gr).player)==null||t.dispatch(v(this,Mt,ig).call(this,e))},dd=new WeakMap,Ty=new WeakMap,Zae=function(e){var a;const t=(a=h(this,dd))==null?void 0:a[qt.native],r=(t==null?void 0:t.track).cues;if(!t||!r)return;const s=h(this,dd).id,i=h(this,Ty)[s]??0,o=v(this,Mt,ig).call(this,e);for(let l=i;l<r.length;l++){const c=r[l];c.positionAlign||(c.positionAlign="auto"),h(this,dd).addCue(c,o)}h(this,Ty)[s]=r.length},Xae=function(e){var i;if(!h(this,bn))return;const t=e.tracks,r=[...h(this,pf).textTracks].filter(o=>"manualMode"in o),s=v(this,Mt,ig).call(this,e);for(let o=0;o<r.length;o++){const a=t[o],l=r[o],c=`dash-${a.kind}-${o}`,u=new ph({id:c,label:(a==null?void 0:a.label)??((i=a.labels.find(d=>d.text))==null?void 0:i.text)??((a==null?void 0:a.lang)&&aG(a.lang))??(a==null?void 0:a.lang)??void 0,language:a.lang??void 0,kind:a.kind,default:a.defaultTrack});u[qt.native]={managed:!0,track:l},u[qt.readyState]=2,u[qt.onModeChange]=()=>{h(this,bn)&&(u.mode==="showing"?(h(this,bn).setTextTrack(o),M(this,dd,u)):(h(this,bn).setTextTrack(-1),M(this,dd,null)))},h(this,gr).textTracks.add(u,s)}},Jae=function(e){const{mediaType:t,newMediaInfo:r}=e;if(t==="audio"){const s=h(this,gr).audioTracks.getById(`dash-audio-${r.index}`);if(s){const i=v(this,Mt,ig).call(this,e);h(this,gr).audioTracks[$t.select](s,!0,i)}}},Qae=function(e){if(e.mediaType!=="video")return;const t=h(this,gr).qualities[e.newQuality];if(t){const r=v(this,Mt,ig).call(this,e);h(this,gr).qualities[$t.select](t,!0,r)}},ele=function(e){if(h(this,gr).$state.canPlay()||!h(this,bn))return;const{type:t,mediaPresentationDuration:r}=e.data,s=v(this,Mt,ig).call(this,e);h(this,gr).notify("stream-type-change",t!=="static"?"live":"on-demand",s),h(this,gr).notify("duration-change",r,s),h(this,gr).qualities[ti.setAuto](!0,s);const i=h(this,bn).getVideoElement(),o=h(this,bn).getTracksForTypeFromManifest("video",e.data),a=[...new Set(o.map(d=>d.mimeType))].find(d=>d&&RW(i,d)),l=o.filter(d=>a===d.mimeType)[0];let c=h(this,bn).getTracksForTypeFromManifest("audio",e.data);const u=[...new Set(c.map(d=>d.mimeType))].find(d=>d&&DW(i,d));if(c=c.filter(d=>u===d.mimeType),l.bitrateList.forEach((d,f)=>{var m;const p={id:((m=d.id)==null?void 0:m.toString())??`dash-bitrate-${f}`,width:d.width??0,height:d.height??0,bitrate:d.bandwidth??0,codec:l.codec,index:f};h(this,gr).qualities[$t.add](p,s)}),Ds(l.index)){const d=h(this,gr).qualities[l.index];d&&h(this,gr).qualities[$t.select](d,!0,s)}c.forEach((d,f)=>{const m=d.labels.find(w=>navigator.languages.some(k=>w.lang&&k.toLowerCase().startsWith(w.lang.toLowerCase())))||d.labels[0],y={id:`dash-audio-${d==null?void 0:d.index}`,label:(m==null?void 0:m.text)??(d.lang&&aG(d.lang))??d.lang??"",language:d.lang??"",kind:"main",mimeType:d.mimeType,codec:d.codec,index:f};h(this,gr).audioTracks[$t.add](y,s)}),i.dispatchEvent(new tn("canplay",{trigger:s}))},tle=function(e){const{type:t,error:r}=e;switch(r.code){case 27:v(this,Mt,sle).call(this,r);break;default:v(this,Mt,ND).call(this,r);break}},nle=function(){h(this,mf)>=0&&v(this,Mt,W8).call(this)},rle=function(e){e.mediaType==="text"&&requestAnimationFrame(v(this,Mt,Zae).bind(this,e))},mf=new WeakMap,sle=function(e){var t;v(this,Mt,W8).call(this),(t=h(this,bn))==null||t.play(),M(this,mf,window.setTimeout(()=>{M(this,mf,-1),v(this,Mt,ND).call(this,e)},5e3))},W8=function(){clearTimeout(h(this,mf)),M(this,mf,-1)},ND=function(e){h(this,gr).notify("error",{message:e.message??"",code:1,error:e})},ile=function(){var t;v(this,Mt,MD).call(this,"video",!0);const{qualities:e}=h(this,gr);(t=h(this,bn))==null||t.setQualityFor("video",e.selectedIndex,!0)},MD=function(e,t){var r;(r=h(this,bn))==null||r.updateSettings({streaming:{abr:{autoSwitchBitrate:{[e]:t}}}})},ole=function(){const{qualities:e}=h(this,gr);!h(this,bn)||e.auto||!e.selected||(v(this,Mt,MD).call(this,"video",!1),h(this,bn).setQualityFor("video",e.selectedIndex,e.switch==="current"),$5&&(h(this,pf).currentTime=h(this,pf).currentTime))},ale=function(){if(!h(this,bn))return;const{audioTracks:e}=h(this,gr),t=h(this,bn).getTracksFor("audio").find(r=>e.selected&&e.selected.id===`dash-audio-${r.index}`);t&&h(this,bn).setCurrentTrack(t)},OD=function(){v(this,Mt,W8).call(this),M(this,dd,null),M(this,Ty,{})};function C2(n){return n instanceof Error?n:Error(typeof n=="string"?n:JSON.stringify(n))}function _u(n,e){if(!n)throw Error("Assertion failed.")}class M7e{constructor(e,t,r){N(this,zc);N(this,im);N(this,Vc);N(this,J4);M(this,im,e),M(this,Vc,t),M(this,J4,r),v(this,zc,lle).call(this)}}im=new WeakMap,Vc=new WeakMap,J4=new WeakMap,zc=new WeakSet,lle=async function(){const e={onLoadStart:v(this,zc,cle).bind(this),onLoaded:v(this,zc,ule).bind(this),onLoadError:v(this,zc,dle).bind(this)};let t=await P7e(h(this,im),e);if(Yr(t)&&!ut(h(this,im))&&(t=await O7e(h(this,im),e)),!t)return null;if(!window.dashjs.supportsMediaSource()){const r="[vidstack] `dash.js` is not supported in this environment";return h(this,Vc).player.dispatch(new tn("dash-unsupported")),h(this,Vc).notify("error",{message:r,code:4}),null}return t},cle=function(){h(this,Vc).player.dispatch(new tn("dash-lib-load-start"))},ule=function(e){h(this,Vc).player.dispatch(new tn("dash-lib-loaded",{detail:e})),h(this,J4).call(this,e)},dle=function(e){const t=C2(e);h(this,Vc).player.dispatch(new tn("dash-lib-load-error",{detail:t})),h(this,Vc).notify("error",{message:t.message,code:4,error:t})};async function O7e(n,e={}){var t,r,s,i,o,a,l;if(!Yr(n)){if((t=e.onLoadStart)==null||t.call(e),I7e(n))return(r=e.onLoaded)==null||r.call(e,n),n;if(lG(n)){const c=n.MediaPlayer;return(s=e.onLoaded)==null||s.call(e,c),c}try{const c=(i=await n())==null?void 0:i.default;if(lG(c))return(o=e.onLoaded)==null||o.call(e,c.MediaPlayer),c.MediaPlayer;if(c)(a=e.onLoaded)==null||a.call(e,c);else throw Error("");return c}catch(c){(l=e.onLoadError)==null||l.call(e,c)}}}async function P7e(n,e={}){var t,r,s;if(ut(n)){(t=e.onLoadStart)==null||t.call(e);try{if(await tT(n),!Ni(window.dashjs.MediaPlayer))throw Error("");const i=window.dashjs.MediaPlayer;return(r=e.onLoaded)==null||r.call(e,i),i}catch(i){(s=e.onLoadError)==null||s.call(e,i)}}}function I7e(n){return n&&n.prototype&&n.prototype!==Function}function lG(n){return n&&"MediaPlayer"in n}const D7e="https://cdn.jsdelivr.net";class cG extends hT{constructor(){super(...arguments);G(this,"$$PROVIDER_TYPE","DASH");N(this,Q4,null);N(this,Al,new N7e(this.video,this.ctx));N(this,gf,`${D7e}/npm/dashjs@4.7.4/dist/dash.all.min.js`)}get ctor(){return h(this,Q4)}get instance(){return h(this,Al).instance}get type(){return"dash"}get canLiveSync(){return!0}get config(){return h(this,Al).config}set config(t){h(this,Al).config=t}get library(){return h(this,gf)}set library(t){M(this,gf,t)}preconnect(){ut(h(this,gf))&&Eu(h(this,gf))}setup(){super.setup(),new M7e(h(this,gf),this.ctx,t=>{M(this,Q4,t),h(this,Al).setup(t),this.ctx.notify("provider-setup",this);const r=Re(this.ctx.$state.source);r&&this.loadSource(r)})}async loadSource(t,r){if(!ut(t.src)){this.removeSource();return}this.media.preload=r||"",this.appendSource(t,"application/x-mpegurl"),h(this,Al).loadSource(t),this.currentSrc=t}onInstance(t){const r=h(this,Al).instance;return r&&t(r),h(this,Al).onInstance(t)}destroy(){h(this,Al).destroy()}}Q4=new WeakMap,Al=new WeakMap,gf=new WeakMap,G(cG,"supported",jW());var R7e=Object.freeze({__proto__:null,DASHProvider:cG});const b8=class b8 extends cT{constructor(){super(...arguments);G(this,"name","dash")}canPlay(t){return b8.supported&&eT(t)}async load(t){if(st)throw Error("[vidstack] can not load dash provider server-side");return new(await Promise.resolve().then(function(){return R7e})).DASHProvider(this.target,t)}};G(b8,"supported",jW());let fT=b8;class $7e{constructor(){G(this,"name","vimeo");G(this,"target")}preconnect(){const e=["https://i.vimeocdn.com","https://f.vimeocdn.com","https://fresnel.vimeocdn.com"];for(const t of e)Eu(t)}canPlay(e){return ut(e.src)&&e.type==="video/vimeo"}mediaType(){return"video"}async load(e){if(st)throw Error("[vidstack] can not load vimeo provider server-side");return new(await Promise.resolve().then(()=>Hze)).VimeoProvider(this.target,e)}async loadPoster(e,t,r){const{resolveVimeoVideoId:s,getVimeoVideoInfo:i}=await Promise.resolve().then(()=>Bze);if(!ut(e.src))return null;const{videoId:o,hash:a}=s(e.src);return o?i(o,r,a).then(l=>l?l.poster:null):null}}class L7e{constructor(){G(this,"name","youtube");G(this,"target")}preconnect(){const e=["https://www.google.com","https://i.ytimg.com","https://googleads.g.doubleclick.net","https://static.doubleclick.net"];for(const t of e)Eu(t)}canPlay(e){return ut(e.src)&&e.type==="video/youtube"}mediaType(){return"video"}async load(e){if(st)throw Error("[vidstack] can not load youtube provider server-side");return new(await Promise.resolve().then(()=>Yze)).YouTubeProvider(this.target,e)}async loadPoster(e,t,r){const{findYouTubePoster:s,resolveYouTubeVideoId:i}=await Promise.resolve().then(()=>Gze),o=ut(e.src)&&i(e.src);return o?s(o,r):null}}function pT(n,e){const t=String(n),r=t.length;if(r<e){const i=e-r;return`${"0".repeat(i)}${n}`}return t}function uG(n){const e=Math.trunc(n/3600),t=Math.trunc(n%3600/60),r=Math.trunc(n%60),s=Number((n-Math.trunc(n)).toPrecision(3));return{hours:e,minutes:t,seconds:r,fraction:s}}function q5(n,{padHrs:e=null,padMins:t=null,showHrs:r=!1,showMs:s=!1}={}){const{hours:i,minutes:o,seconds:a,fraction:l}=uG(n),c=e?pT(i,2):i,u=t||ol(t)&&n>=3600?pT(o,2):o,d=pT(a,2),f=s&&l>0?`.${String(l).replace(/^0?\./,"")}`:"",p=`${u}:${d}${f}`;return i>0||r?`${c}:${p}`:p}function U5(n){const e=[],{hours:t,minutes:r,seconds:s}=uG(n);return t>0&&e.push(`${t} hour`),r>0&&e.push(`${r} min`),(s>0||e.length===0)&&e.push(`${s} sec`),e.join(" ")}const mT=Symbol(0),F7e=["autoPlay","canAirPlay","canFullscreen","canGoogleCast","canLoad","canLoadPoster","canPictureInPicture","canPlay","canSeek","ended","fullscreen","isAirPlayConnected","isGoogleCastConnected","live","liveEdge","loop","mediaType","muted","paused","pictureInPicture","playing","playsInline","remotePlaybackState","remotePlaybackType","seeking","started","streamType","viewType","waiting"],j7e={artist:"",artwork:null,autoplay:!1,autoPlay:!1,clipStartTime:0,clipEndTime:0,controls:!1,currentTime:0,crossorigin:null,crossOrigin:null,duration:-1,fullscreenOrientation:"landscape",googleCast:{},load:"visible",posterLoad:"visible",logLevel:"silent",loop:!1,muted:!1,paused:!0,playsinline:!1,playsInline:!1,playbackRate:1,poster:"",preload:"metadata",preferNativeHLS:!1,src:"",title:"",controlsDelay:2e3,hideControlsOnMouseLeave:!1,viewType:"unknown",streamType:"unknown",volume:1,liveEdgeTolerance:10,minLiveDVRWindow:60,keyDisabled:!1,keyTarget:"player",keyShortcuts:t7e,storage:null};class dG extends Up{constructor(t,r){super();N(this,ew);N(this,om);M(this,ew,t),M(this,om,r)}async onAttach(t){if(st)return;const r=this.$props[h(this,ew)]();if(r==="eager")requestAnimationFrame(h(this,om));else if(r==="idle")uW(h(this,om));else if(r==="visible"){let s,i=new IntersectionObserver(o=>{this.scope&&o[0].isIntersecting&&(s==null||s(),s=void 0,h(this,om).call(this))});i.observe(t),s=Qt(()=>i.disconnect())}}}ew=new WeakMap,om=new WeakMap;class B7e{constructor(e,t){N(this,w8);N(this,tw);N(this,Nl);M(this,tw,e),M(this,Nl,t)}notify(e,...t){st||h(this,tw).call(this,new tn(e,{detail:t==null?void 0:t[0],trigger:t==null?void 0:t[1]}))}async ready(e,t){if(!st)return Bp(async()=>{var H,re,ae,de,le,X,se;const{logger:r}=h(this,Nl),{autoPlay:s,canPlay:i,started:o,duration:a,seekable:l,buffered:c,remotePlaybackInfo:u,playsInline:d,savedState:f,source:p}=h(this,Nl).$state;if(i())return;const m={duration:(e==null?void 0:e.duration)??a(),seekable:(e==null?void 0:e.seekable)??l(),buffered:(e==null?void 0:e.buffered)??c(),provider:h(this,Nl).$provider()};this.notify("can-play",m,t),il();let y=h(this,Nl).$provider(),{storage:w,qualities:k}=h(this,Nl),{muted:x,volume:S,clipStartTime:_,playbackRate:A}=h(this,Nl).$props;await((H=w==null?void 0:w.onLoad)==null?void 0:H.call(w,p()));const T=(re=f())==null?void 0:re.currentTime,O=(ae=f())==null?void 0:ae.paused,I=await(w==null?void 0:w.getTime()),R=T??I??_(),D=O===!1||O!==!0&&!o()&&s();if(y){y.setVolume(await(w==null?void 0:w.getVolume())??S()),y.setMuted(x()||!!await(w==null?void 0:w.getMuted()));const J=await(w==null?void 0:w.getAudioGain())??1;J>1&&((le=(de=y.audioGain)==null?void 0:de.setGain)==null||le.call(de,J)),(X=y.setPlaybackRate)==null||X.call(y,await(w==null?void 0:w.getPlaybackRate())??A()),(se=y.setPlaysInline)==null||se.call(y,d()),R>0&&y.setCurrentTime(R)}const W=await(w==null?void 0:w.getVideoQuality());if(W&&k.length){let J=null,$=1/0;for(const ve of k){const Pe=Math.abs(W.width-ve.width)+Math.abs(W.height-ve.height)+(W.bitrate?Math.abs(W.bitrate-(ve.bitrate??0)):0);Pe<$&&(J=ve,$=Pe)}J&&(J.selected=!0)}i()&&D?await v(this,w8,hle).call(this,t):I&&I>0&&this.notify("started",void 0,t),u.set(null)})}}tw=new WeakMap,Nl=new WeakMap,w8=new WeakSet,hle=async function(e){const{player:t,$state:{autoPlaying:r,muted:s}}=h(this,Nl);r.set(!0);const i=new tn("auto-play-attempt",{trigger:e});try{await t.play(i)}catch{}};class V7e{constructor(){N(this,yf,new Map)}enqueue(e,t){h(this,yf).set(e,t)}serve(e){const t=this.peek(e);return h(this,yf).delete(e),t}peek(e){return h(this,yf).get(e)}delete(e){h(this,yf).delete(e)}clear(){h(this,yf).clear()}}yf=new WeakMap;class hG{constructor(){N(this,bf);N(this,vf,!1);N(this,Ay,Hp());N(this,Ml,new Map)}get size(){return h(this,Ml).size}get isServing(){return h(this,vf)}async waitForFlush(){h(this,vf)||await h(this,Ay).promise}enqueue(e,t){if(h(this,vf)){t();return}h(this,Ml).delete(e),h(this,Ml).set(e,t)}serve(e){var t;(t=h(this,Ml).get(e))==null||t(),h(this,Ml).delete(e)}start(){v(this,bf,PD).call(this),M(this,vf,!0),h(this,Ml).size>0&&v(this,bf,PD).call(this)}stop(){M(this,vf,!1)}reset(){this.stop(),h(this,Ml).clear(),v(this,bf,ID).call(this)}}vf=new WeakMap,Ay=new WeakMap,Ml=new WeakMap,bf=new WeakSet,PD=function(){for(const e of h(this,Ml).keys())this.serve(e);v(this,bf,ID).call(this)},ID=function(){h(this,Ay).resolve(),M(this,Ay,Hp())};function z7e(n){return n?"true":"false"}function ni(n){return()=>z7e(n())}function H7e(){return typeof window>"u"?!1:window.matchMedia("(prefers-reduced-motion: reduce)").matches}class q7e extends Up{constructor(t,r,s){super();N(this,Sn);N(this,hd);N(this,Zt);N(this,fd);G(this,"controls");N(this,am);N(this,pd);N(this,Ir);N(this,wf,new hG);N(this,Ny,!1);N(this,lm);M(this,hd,t),M(this,Zt,r),M(this,fd,s),M(this,Ir,s.$provider),this.controls=new l7e,M(this,am,new c7e),M(this,pd,new B5)}onAttach(){this.listen("fullscreen-change",v(this,Sn,kle).bind(this))}onConnect(t){const r=Object.getOwnPropertyNames(Object.getPrototypeOf(this)),s=new $n(t),i=v(this,Sn,mle).bind(this);for(const o of r)o.startsWith("media-")&&s.add(o,i);v(this,Sn,fle).call(this),me(v(this,Sn,ple).bind(this)),me(v(this,Sn,gle).bind(this)),me(v(this,Sn,yle).bind(this)),me(v(this,Sn,vle).bind(this)),me(v(this,Sn,ble).bind(this)),me(v(this,Sn,wle).bind(this)),me(v(this,Sn,xle).bind(this))}onDestroy(){try{const t=this.createEvent("destroy"),{pictureInPicture:r,fullscreen:s}=this.$state;s()&&this.exitFullscreen("prefer-media",t),r()&&this.exitPictureInPicture(t)}catch{}h(this,wf).reset()}async play(t){if(st)return;const{canPlay:r,paused:s,autoPlaying:i}=this.$state;if(v(this,Sn,DD).call(this,t)||!Re(s))return;t&&h(this,Zt).queue.enqueue("media-play-request",t);const o=Re(i);try{const a=Re(h(this,Ir));return gT(a,Re(r)),U7e(o),await a.play()}catch(a){const l=this.createEvent("play-fail",{detail:C2(a),trigger:t});throw l.autoPlay=o,h(this,hd).handle(l),a}}async pause(t){if(st)return;const{canPlay:r,paused:s}=this.$state;if(!Re(s)){t&&h(this,Zt).queue.enqueue("media-pause-request",t);try{const i=Re(h(this,Ir));return gT(i,Re(r)),await i.pause()}catch(i){throw h(this,Zt).queue.delete("media-pause-request"),i}}}setAudioGain(t,r){const{audioGain:s,canSetAudioGain:i}=this.$state;if(s()===t)return;const o=h(this,Ir).call(this);if(!(o!=null&&o.audioGain)||!i())throw Error("[vidstack] audio gain api not available");r&&h(this,Zt).queue.enqueue("media-audio-gain-change-request",r),o.audioGain.setGain(t)}seekToLiveEdge(t){if(st)return;const{canPlay:r,live:s,liveEdge:i,canSeek:o,liveSyncPosition:a,seekableEnd:l,userBehindLiveEdge:c}=this.$state;if(c.set(!1),Re(()=>!s()||i()||!o()))return;const u=Re(h(this,Ir));gT(u,Re(r)),t&&h(this,Zt).queue.enqueue("media-seek-request",t);const d=l()-2;u.setCurrentTime(Math.min(d,a()??d))}async enterFullscreen(t="prefer-media",r){if(st)return;const s=v(this,Sn,RD).call(this,t);if(fG(t,s),!s.active)return Re(this.$state.pictureInPicture)&&(M(this,Ny,!0),await this.exitPictureInPicture(r)),r&&h(this,Zt).queue.enqueue("media-enter-fullscreen-request",r),s.enter()}async exitFullscreen(t="prefer-media",r){if(st)return;const s=v(this,Sn,RD).call(this,t);if(fG(t,s),!!s.active){r&&h(this,Zt).queue.enqueue("media-exit-fullscreen-request",r);try{const i=await s.exit();return h(this,Ny)&&Re(this.$state.canPictureInPicture)&&await this.enterPictureInPicture(),i}finally{M(this,Ny,!1)}}}async enterPictureInPicture(t){if(!st&&(v(this,Sn,$D).call(this),!this.$state.pictureInPicture()))return t&&h(this,Zt).queue.enqueue("media-enter-pip-request",t),await h(this,Ir).call(this).pictureInPicture.enter()}async exitPictureInPicture(t){if(!st&&(v(this,Sn,$D).call(this),!!this.$state.pictureInPicture()))return t&&h(this,Zt).queue.enqueue("media-exit-pip-request",t),await h(this,Ir).call(this).pictureInPicture.exit()}async"media-airplay-request"(t){try{await this.requestAirPlay(t)}catch{}}async requestAirPlay(t){var r;try{const s=(r=h(this,Ir).call(this))==null?void 0:r.airPlay;if(!(s!=null&&s.supported))throw Error("No AirPlay adapter.");return t&&h(this,Zt).queue.enqueue("media-airplay-request",t),await s.prompt()}catch(s){throw h(this,Zt).queue.delete("media-airplay-request"),s}}async"media-google-cast-request"(t){try{await this.requestGoogleCast(t)}catch{}}async requestGoogleCast(t){try{const{canGoogleCast:r}=this.$state;if(!Re(r)){const i=Error("Cast not available.");throw i.code="CAST_NOT_AVAILABLE",i}if(Eu("https://www.gstatic.com"),!h(this,lm)){const i=await Promise.resolve().then(()=>nHe).then(function(o){return o.loader});M(this,lm,new i.GoogleCastLoader)}await h(this,lm).prompt(h(this,fd)),t&&h(this,Zt).queue.enqueue("media-google-cast-request",t);const s=Re(this.$state.remotePlaybackState)!=="disconnected";s&&this.$state.savedState.set({paused:Re(this.$state.paused),currentTime:Re(this.$state.currentTime)}),this.$state.remotePlaybackLoader.set(s?h(this,lm):null)}catch(r){throw h(this,Zt).queue.delete("media-google-cast-request"),r}}"media-clip-start-change-request"(t){const{clipStartTime:r}=this.$state;r.set(t.detail)}"media-clip-end-change-request"(t){const{clipEndTime:r}=this.$state;r.set(t.detail),this.dispatch("duration-change",{detail:t.detail,trigger:t})}"media-duration-change-request"(t){const{providedDuration:r,clipEndTime:s}=this.$state;r.set(t.detail),s()<=0&&this.dispatch("duration-change",{detail:t.detail,trigger:t})}"media-audio-track-change-request"(t){const{logger:r,audioTracks:s}=h(this,fd);if(s.readonly)return;const i=t.detail,o=s[i];if(o){const a=t.type;h(this,Zt).queue.enqueue(a,t),o.selected=!0}}async"media-enter-fullscreen-request"(t){try{await this.enterFullscreen(t.detail,t)}catch(r){v(this,Sn,LD).call(this,r,t)}}async"media-exit-fullscreen-request"(t){try{await this.exitFullscreen(t.detail,t)}catch(r){v(this,Sn,LD).call(this,r,t)}}async"media-orientation-lock-request"(t){const r=t.type;try{h(this,Zt).queue.enqueue(r,t),await h(this,pd).lock(t.detail)}catch{h(this,Zt).queue.delete(r)}}async"media-orientation-unlock-request"(t){const r=t.type;try{h(this,Zt).queue.enqueue(r,t),await h(this,pd).unlock()}catch{h(this,Zt).queue.delete(r)}}async"media-enter-pip-request"(t){try{await this.enterPictureInPicture(t)}catch(r){v(this,Sn,FD).call(this,r,t)}}async"media-exit-pip-request"(t){try{await this.exitPictureInPicture(t)}catch(r){v(this,Sn,FD).call(this,r,t)}}"media-live-edge-request"(t){const{live:r,liveEdge:s,canSeek:i}=this.$state;if(!(!r()||s()||!i())){h(this,Zt).queue.enqueue("media-seek-request",t);try{this.seekToLiveEdge()}catch{h(this,Zt).queue.delete("media-seek-request")}}}async"media-loop-request"(t){try{h(this,Zt).looping=!0,h(this,Zt).replaying=!0,await this.play(t)}catch{h(this,Zt).looping=!1}}"media-user-loop-change-request"(t){this.$state.userPrefersLoop.set(t.detail)}async"media-pause-request"(t){if(!this.$state.paused())try{await this.pause(t)}catch{}}async"media-play-request"(t){if(this.$state.paused())try{await this.play(t)}catch{}}"media-rate-change-request"(t){const{playbackRate:r,canSetPlaybackRate:s}=this.$state;if(r()===t.detail||!s())return;const i=h(this,Ir).call(this);i!=null&&i.setPlaybackRate&&(h(this,Zt).queue.enqueue("media-rate-change-request",t),i.setPlaybackRate(t.detail))}"media-audio-gain-change-request"(t){try{this.setAudioGain(t.detail,t)}catch{}}"media-quality-change-request"(t){var a,l;const{qualities:r,storage:s,logger:i}=h(this,fd);if(r.readonly)return;h(this,Zt).queue.enqueue("media-quality-change-request",t);const o=t.detail;if(o<0)r.autoSelect(t),t.isOriginTrusted&&((a=s==null?void 0:s.setVideoQuality)==null||a.call(s,null));else{const c=r[o];c&&(c.selected=!0,t.isOriginTrusted&&((l=s==null?void 0:s.setVideoQuality)==null||l.call(s,{id:c.id,width:c.width,height:c.height,bitrate:c.bitrate})))}}"media-pause-controls-request"(t){const r=t.type;h(this,Zt).queue.enqueue(r,t),this.controls.pause(t)}"media-resume-controls-request"(t){const r=t.type;h(this,Zt).queue.enqueue(r,t),this.controls.resume(t)}"media-seek-request"(t){const{canSeek:r,ended:s,live:i,seekableEnd:o,userBehindLiveEdge:a}=this.$state,l=t.detail;s()&&(h(this,Zt).replaying=!0);const c=t.type;h(this,Zt).seeking=!1,h(this,Zt).queue.delete(c);const u=UW(l,this.$state);!Number.isFinite(u)||!r()||(h(this,Zt).queue.enqueue(c,t),h(this,Ir).call(this).setCurrentTime(u),i()&&t.isOriginTrusted&&Math.abs(o()-u)>=2&&a.set(!0))}"media-seeking-request"(t){const r=t.type;h(this,Zt).queue.enqueue(r,t),this.$state.seeking.set(!0),h(this,Zt).seeking=!0}"media-start-loading"(t){if(this.$state.canLoad())return;const r=t.type;h(this,Zt).queue.enqueue(r,t),h(this,hd).handle(this.createEvent("can-load"))}"media-poster-start-loading"(t){if(this.$state.canLoadPoster())return;const r=t.type;h(this,Zt).queue.enqueue(r,t),h(this,hd).handle(this.createEvent("can-load-poster"))}"media-text-track-change-request"(t){const{index:r,mode:s}=t.detail,i=h(this,fd).textTracks[r];if(i){const o=t.type;h(this,Zt).queue.enqueue(o,t),i.setMode(s,t)}}"media-mute-request"(t){if(this.$state.muted())return;const r=t.type;h(this,Zt).queue.enqueue(r,t),h(this,Ir).call(this).setMuted(!0)}"media-unmute-request"(t){const{muted:r,volume:s}=this.$state;if(!r())return;const i=t.type;h(this,Zt).queue.enqueue(i,t),h(this,fd).$provider().setMuted(!1),s()===0&&(h(this,Zt).queue.enqueue(i,t),h(this,Ir).call(this).setVolume(.25))}"media-volume-change-request"(t){const{muted:r,volume:s}=this.$state,i=t.detail;if(s()===i)return;const o=t.type;h(this,Zt).queue.enqueue(o,t),h(this,Ir).call(this).setVolume(i),i>0&&r()&&(h(this,Zt).queue.enqueue(o,t),h(this,Ir).call(this).setMuted(!1))}}hd=new WeakMap,Zt=new WeakMap,fd=new WeakMap,am=new WeakMap,pd=new WeakMap,Ir=new WeakMap,wf=new WeakMap,Sn=new WeakSet,fle=function(){const{load:t}=this.$props,{canLoad:r}=this.$state;if(t()!=="play"||r())return;const s=this.listen("media-play-request",i=>{v(this,Sn,DD).call(this,i),s()})},ple=function(){const t=h(this,Ir).call(this),r=this.$state.canPlay();return t&&r&&h(this,wf).start(),()=>{h(this,wf).stop()}},mle=function(t){t.stopPropagation(),!t.defaultPrevented&&this[t.type]&&(Re(h(this,Ir))?this[t.type](t):h(this,wf).enqueue(t.type,()=>{Re(h(this,Ir))&&this[t.type](t)}))},DD=function(t){const{load:r}=this.$props,{canLoad:s}=this.$state;if(r()==="play"&&!s()){const i=this.createEvent("media-start-loading",{trigger:t});return this.dispatchEvent(i),h(this,wf).enqueue("media-play-request",async()=>{try{await this.play(i)}catch{}}),!0}return!1},Ny=new WeakMap,RD=function(t){const r=Re(h(this,Ir));return t==="prefer-media"&&h(this,am).supported||t==="media"?h(this,am):r==null?void 0:r.fullscreen},$D=function(){if(!this.$state.canPictureInPicture())throw Error("[vidstack] no pip support")},gle=function(){this.controls.defaultDelay=this.$props.controlsDelay()},yle=function(){var s,i;const{canSetAudioGain:t}=this.$state,r=!!((i=(s=h(this,Ir).call(this))==null?void 0:s.audioGain)!=null&&i.supported);t.set(r)},vle=function(){var s,i;const{canAirPlay:t}=this.$state,r=!!((i=(s=h(this,Ir).call(this))==null?void 0:s.airPlay)!=null&&i.supported);t.set(r)},ble=function(){const{canGoogleCast:t,source:r}=this.$state,s=$5&&!R5&&VW(r());t.set(s)},wle=function(){var s,i;const{canFullscreen:t}=this.$state,r=h(this,am).supported||!!((i=(s=h(this,Ir).call(this))==null?void 0:s.fullscreen)!=null&&i.supported);t.set(r)},xle=function(){var s,i;const{canPictureInPicture:t}=this.$state,r=!!((i=(s=h(this,Ir).call(this))==null?void 0:s.pictureInPicture)!=null&&i.supported);t.set(r)},lm=new WeakMap,kle=async function(t){const r=Re(this.$props.fullscreenOrientation),s=t.detail;if(!(Yr(r)||r==="none"||!h(this,pd).supported))if(s){if(h(this,pd).locked)return;this.dispatch("media-orientation-lock-request",{detail:r,trigger:t})}else h(this,pd).locked&&this.dispatch("media-orientation-unlock-request",{trigger:t})},LD=function(t,r){h(this,hd).handle(this.createEvent("fullscreen-error",{detail:C2(t)}))},FD=function(t,r){h(this,hd).handle(this.createEvent("picture-in-picture-error",{detail:C2(t)}))},xHe=function(t,r,s){};function gT(n,e){if(!(n&&e))throw Error("[vidstack] media not ready")}function fG(n,e){if(!(e!=null&&e.supported))throw Error("[vidstack] no fullscreen support")}function U7e(n){if(!(!H7e()||!n))throw Error("[vidstack] autoplay blocked")}class W7e{constructor(){G(this,"seeking",!1);G(this,"looping",!1);G(this,"replaying",!1);G(this,"queue",new V7e)}}const G7e=new Set(["auto-play","auto-play-fail","can-load","sources-change","source-change","load-start","abort","error","loaded-metadata","loaded-data","can-play","play","play-fail","pause","playing","seeking","seeked","waiting"]);class K7e extends Up{constructor(t,r){super();N(this,Oe);N(this,Ui);N(this,Bn);N(this,yr,new Map);N(this,cm,!1);N(this,My,[]);N(this,um,[-1,-1]);N(this,dm,!1);N(this,md);N(this,xf,!1);N(this,Oy,null);G(this,"seeking",fh(t=>{const{seeking:r,realCurrentTime:s,paused:i}=this.$state;r.set(!0),s.set(t.detail),v(this,Oe,Kr).call(this,"media-seeking-request",t),i()&&(M(this,md,t),h(this,Py).call(this)),M(this,um,[-1,-1])},150,{leading:!0}));N(this,Py,N5(()=>{if(!h(this,md))return;M(this,dm,!0);const{waiting:t,playing:r}=this.$state;t.set(!0),r.set(!1);const s=this.createEvent("waiting",{trigger:h(this,md)});h(this,yr).set("waiting",s),this.dispatch(s),M(this,md,void 0),M(this,dm,!1)},300));M(this,Ui,t),M(this,Bn,r)}onAttach(t){t.setAttribute("aria-busy","true"),new $n(this).add("fullscreen-change",this["fullscreen-change"].bind(this)).add("fullscreen-error",this["fullscreen-error"].bind(this)).add("orientation-change",this["orientation-change"].bind(this))}onConnect(t){me(v(this,Oe,Ple).bind(this)),v(this,Oe,Ele).call(this),v(this,Oe,_le).call(this),v(this,Oe,Tle).call(this),v(this,Oe,Cle).call(this),Qt(v(this,Oe,Sle).bind(this))}onDestroy(){const{audioTracks:t,qualities:r,textTracks:s}=h(this,Bn);t[$t.reset](),r[$t.reset](),s[$t.reset](),v(this,Oe,K8).call(this)}handle(t){if(!this.scope)return;const r=t.type;Bp(()=>{var s;return(s=this[t.type])==null?void 0:s.call(this,t)}),st||(G7e.has(r)&&h(this,yr).set(r,t),this.dispatch(t))}"provider-change"(t){var i,o;const r=h(this,Bn).$provider(),s=t.detail;(r==null?void 0:r.type)!==(s==null?void 0:s.type)&&((i=r==null?void 0:r.destroy)==null||i.call(r),(o=r==null?void 0:r.scope)==null||o.dispose(),h(this,Bn).$provider.set(t.detail),r&&t.detail===null&&v(this,Oe,HD).call(this,t))}"provider-loader-change"(t){}"auto-play"(t){this.$state.autoPlayError.set(null)}"auto-play-fail"(t){this.$state.autoPlayError.set(t.detail),v(this,Oe,hp).call(this)}"can-load"(t){this.$state.canLoad.set(!0),h(this,yr).set("can-load",t),h(this,Bn).textTracks[qt.canLoad](),v(this,Oe,Kr).call(this,"media-start-loading",t)}"can-load-poster"(t){this.$state.canLoadPoster.set(!0),h(this,yr).set("can-load-poster",t),v(this,Oe,Kr).call(this,"media-poster-start-loading",t)}"media-type-change"(t){const r=h(this,yr).get("source-change");r&&t.triggers.add(r);const s=this.$state.viewType();this.$state.mediaType.set(t.detail);const i=this.$state.providedViewType(),o=i==="unknown"?t.detail:i;s!==o&&(st?this.$state.inferredViewType.set(o):setTimeout(()=>{requestAnimationFrame(()=>{this.scope&&(this.$state.inferredViewType.set(t.detail),this.dispatch("view-type-change",{detail:o,trigger:t}))})},0))}"stream-type-change"(t){const r=h(this,yr).get("source-change");r&&t.triggers.add(r);const{streamType:s,inferredStreamType:i}=this.$state;i.set(t.detail),t.detail=s()}"rate-change"(t){var i;const{storage:r}=h(this,Bn),{canPlay:s}=this.$state;this.$state.playbackRate.set(t.detail),v(this,Oe,Kr).call(this,"media-rate-change-request",t),s()&&((i=r==null?void 0:r.setPlaybackRate)==null||i.call(r,t.detail))}"remote-playback-change"(t){const{remotePlaybackState:r,remotePlaybackType:s}=this.$state,{type:i,state:o}=t.detail,a=o==="connected";s.set(i),r.set(o);const l=i==="airplay"?"media-airplay-request":"media-google-cast-request";if(a)v(this,Oe,Kr).call(this,l,t);else{const c=h(this,Ui).queue.peek(l);c&&(t.request=c,t.triggers.add(c))}}"sources-change"(t){const r=this.$state.sources(),s=t.detail;this.$state.sources.set(s),v(this,Oe,Ile).call(this,r,s,t)}"source-change"(t){var s,i;t.isQualityChange=((s=t.originEvent)==null?void 0:s.type)==="quality-change";const r=t.detail;v(this,Oe,HD).call(this,t,t.isQualityChange),h(this,yr).set(t.type,t),this.$state.source.set(r),(i=this.el)==null||i.setAttribute("aria-busy","true")}abort(t){const r=h(this,yr).get("source-change");r&&t.triggers.add(r);const s=h(this,yr).get("can-load");s&&!t.triggers.hasType("can-load")&&t.triggers.add(s)}"load-start"(t){const r=h(this,yr).get("source-change");r&&t.triggers.add(r)}error(t){this.$state.error.set(t.detail);const r=h(this,yr).get("abort");r&&t.triggers.add(r)}"loaded-metadata"(t){const r=h(this,yr).get("load-start");r&&t.triggers.add(r)}"loaded-data"(t){const r=h(this,yr).get("load-start");r&&t.triggers.add(r)}"can-play"(t){var s;const r=h(this,yr).get("loaded-metadata");r&&t.triggers.add(r),v(this,Oe,qD).call(this,t.detail),(s=this.el)==null||s.setAttribute("aria-busy","false")}"can-play-through"(t){v(this,Oe,qD).call(this,t.detail);const r=h(this,yr).get("can-play");r&&t.triggers.add(r)}"duration-change"(t){const{live:r,intrinsicDuration:s,providedDuration:i,clipEndTime:o,ended:a}=this.$state,l=t.detail;if(!r()){const c=Number.isNaN(l)?0:l;s.set(c),a()&&v(this,Oe,WD).call(this,t)}(i()>0||o()>0)&&t.stopImmediatePropagation()}progress(t){const{buffered:r,seekable:s}=this.$state,{buffered:i,seekable:o}=t.detail,a=qp(i),l=i.length!==r().length,c=a!==qp(r()),u=qp(o),d=o.length!==s().length,f=u!==qp(s());(l||c)&&r.set(i),(d||f)&&s.set(o)}play(t){const{paused:r,autoPlayError:s,ended:i,autoPlaying:o,playsInline:a,pointer:l,muted:c,viewType:u,live:d,userBehindLiveEdge:f}=this.$state;if(v(this,Oe,UD).call(this),!r()){t.stopImmediatePropagation();return}t.autoPlay=o();const p=h(this,yr).get("waiting");p&&t.triggers.add(p),v(this,Oe,Kr).call(this,"media-play-request",t),h(this,yr).set("play",t),r.set(!1),s.set(null),t.autoPlay&&(this.handle(this.createEvent("auto-play",{detail:{muted:c()},trigger:t})),o.set(!1)),(i()||h(this,Ui).replaying)&&(h(this,Ui).replaying=!1,i.set(!1),this.handle(this.createEvent("replay",{trigger:t}))),!a()&&u()==="video"&&l()==="coarse"&&h(this,Bn).remote.enterFullscreen("prefer-media",t),d()&&!f()&&h(this,Bn).remote.seekToLiveEdge(t)}"play-fail"(t){const{muted:r,autoPlaying:s}=this.$state,i=h(this,yr).get("play");i&&t.triggers.add(i),v(this,Oe,Kr).call(this,"media-play-request",t);const{paused:o,playing:a}=this.$state;o.set(!0),a.set(!1),v(this,Oe,hp).call(this),h(this,yr).set("play-fail",t),t.autoPlay&&(this.handle(this.createEvent("auto-play-fail",{detail:{muted:r(),error:t.detail},trigger:t})),s.set(!1))}playing(t){const r=h(this,yr).get("play"),s=h(this,yr).get("seeked");r?t.triggers.add(r):s&&t.triggers.add(s),setTimeout(()=>v(this,Oe,hp).call(this),0);const{paused:i,playing:o,live:a,liveSyncPosition:l,seekableEnd:c,started:u,currentTime:d,seeking:f,ended:p}=this.$state;if(i.set(!1),o.set(!0),f.set(!1),p.set(!1),h(this,Ui).looping){h(this,Ui).looping=!1;return}if(a()&&!u()&&d()===0){const m=l()??c()-2;Number.isFinite(m)&&h(this,Bn).$provider().setCurrentTime(m)}this.started(t)}started(t){const{started:r}=this.$state;r()||(r.set(!0),this.handle(this.createEvent("started",{trigger:t})))}pause(t){var o;(o=this.el)!=null&&o.isConnected||M(this,xf,!0),v(this,Oe,Kr).call(this,"media-pause-request",t);const r=h(this,yr).get("seeked");r&&t.triggers.add(r);const{paused:s,playing:i}=this.$state;s.set(!0),i.set(!1),h(this,cm)&&setTimeout(()=>{this.handle(this.createEvent("end",{trigger:t})),M(this,cm,!1)},0),v(this,Oe,hp).call(this)}"time-change"(t){if(h(this,Ui).looping){t.stopImmediatePropagation();return}let{waiting:r,played:s,clipEndTime:i,realCurrentTime:o,currentTime:a}=this.$state,l=t.detail,c=i();o.set(l),v(this,Oe,Dle).call(this),r.set(!1);for(const u of h(this,Bn).textTracks)u[qt.updateActiveCues](l,t);c>0&&l>=c&&(M(this,cm,!0),this.dispatch("media-pause-request",{trigger:t})),v(this,Oe,Rle).call(this),this.dispatch("time-update",{detail:{currentTime:a(),played:s()},trigger:t})}"audio-gain-change"(t){var o;const{storage:r}=h(this,Bn),{canPlay:s,audioGain:i}=this.$state;i.set(t.detail),v(this,Oe,Kr).call(this,"media-audio-gain-change-request",t),s()&&((o=r==null?void 0:r.setAudioGain)==null||o.call(r,i()))}"volume-change"(t){var l,c;const{storage:r}=h(this,Bn),{volume:s,muted:i,canPlay:o}=this.$state,a=t.detail;s.set(a.volume),i.set(a.muted||a.volume===0),v(this,Oe,Kr).call(this,"media-volume-change-request",t),v(this,Oe,Kr).call(this,a.muted?"media-mute-request":"media-unmute-request",t),o()&&((l=r==null?void 0:r.setVolume)==null||l.call(r,s()),(c=r==null?void 0:r.setMuted)==null||c.call(r,i()))}seeked(t){const{seeking:r,currentTime:s,realCurrentTime:i,paused:o,seekableEnd:a,ended:l,live:c}=this.$state;if(h(this,Ui).seeking)r.set(!0),t.stopImmediatePropagation();else if(r()){const u=h(this,yr).get("waiting");u&&t.triggers.add(u);const d=h(this,yr).get("seeking");d&&!t.triggers.has(d)&&t.triggers.add(d),o()&&v(this,Oe,GD).call(this),r.set(!1),i.set(t.detail),v(this,Oe,Kr).call(this,"media-seek-request",t);const f=t==null?void 0:t.originEvent;f!=null&&f.isTrusted&&!(f instanceof MessageEvent)&&!/seek/.test(f.type)&&this.started(t)}c()||(Math.floor(s())!==Math.floor(a())?l.set(!1):this.end(t))}waiting(t){h(this,dm)||h(this,Ui).seeking||(t.stopImmediatePropagation(),M(this,md,t),h(this,Py).call(this))}end(t){const{loop:r,ended:s}=this.$state;if(!(!r()&&s())){if(r()){setTimeout(()=>{requestAnimationFrame(()=>{v(this,Oe,UD).call(this,t),this.dispatch("media-loop-request",{trigger:t})})},10);return}setTimeout(()=>v(this,Oe,$le).call(this,t),0)}}"fullscreen-change"(t){const r=t.detail;this.$state.fullscreen.set(r),v(this,Oe,Kr).call(this,r?"media-enter-fullscreen-request":"media-exit-fullscreen-request",t)}"fullscreen-error"(t){v(this,Oe,Kr).call(this,"media-enter-fullscreen-request",t),v(this,Oe,Kr).call(this,"media-exit-fullscreen-request",t)}"orientation-change"(t){const r=t.detail.lock;v(this,Oe,Kr).call(this,r?"media-orientation-lock-request":"media-orientation-unlock-request",t)}"picture-in-picture-change"(t){const r=t.detail;this.$state.pictureInPicture.set(r),v(this,Oe,Kr).call(this,r?"media-enter-pip-request":"media-exit-pip-request",t)}"picture-in-picture-error"(t){v(this,Oe,Kr).call(this,"media-enter-pip-request",t),v(this,Oe,Kr).call(this,"media-exit-pip-request",t)}"title-change"(t){t.trigger&&(t.stopImmediatePropagation(),this.$state.inferredTitle.set(t.detail))}"poster-change"(t){t.trigger&&(t.stopImmediatePropagation(),this.$state.inferredPoster.set(t.detail))}}Ui=new WeakMap,Bn=new WeakMap,yr=new WeakMap,cm=new WeakMap,My=new WeakMap,um=new WeakMap,dm=new WeakMap,md=new WeakMap,xf=new WeakMap,Oe=new WeakSet,Cle=function(){h(this,xf)&&(requestAnimationFrame(()=>{this.scope&&h(this,Bn).remote.play(new tn("dom-connect"))}),M(this,xf,!1))},Sle=function(){var t;h(this,xf)||(M(this,xf,!this.$state.paused()),(t=h(this,Bn).$provider())==null||t.pause())},hp=function(){v(this,Oe,GD).call(this),M(this,cm,!1),h(this,Ui).replaying=!1,h(this,Ui).looping=!1,M(this,dm,!1),M(this,md,void 0),h(this,yr).clear()},Kr=function(t,r){const s=h(this,Ui).queue.serve(t);s&&(r.request=s,r.triggers.add(s))},Ele=function(){v(this,Oe,G8).call(this),v(this,Oe,jD).call(this);const t=h(this,Bn).textTracks;new $n(t).add("add",v(this,Oe,G8).bind(this)).add("remove",v(this,Oe,G8).bind(this)).add("mode-change",v(this,Oe,jD).bind(this))},_le=function(){const t=h(this,Bn).qualities;new $n(t).add("add",v(this,Oe,VD).bind(this)).add("remove",v(this,Oe,VD).bind(this)).add("change",v(this,Oe,Nle).bind(this)).add("auto-change",v(this,Oe,Mle).bind(this)).add("readonly-change",v(this,Oe,Ole).bind(this))},Tle=function(){const t=h(this,Bn).audioTracks;new $n(t).add("add",v(this,Oe,BD).bind(this)).add("remove",v(this,Oe,BD).bind(this)).add("change",v(this,Oe,Ale).bind(this))},G8=function(t){const{textTracks:r}=this.$state;r.set(h(this,Bn).textTracks.toArray()),this.dispatch("text-tracks-change",{detail:r(),trigger:t})},jD=function(t){t&&v(this,Oe,Kr).call(this,"media-text-track-change-request",t);const r=h(this,Bn).textTracks.selected,{textTrack:s}=this.$state;s()!==r&&(s.set(r),this.dispatch("text-track-change",{detail:r,trigger:t}))},BD=function(t){const{audioTracks:r}=this.$state;r.set(h(this,Bn).audioTracks.toArray()),this.dispatch("audio-tracks-change",{detail:r(),trigger:t})},Ale=function(t){const{audioTrack:r}=this.$state;r.set(h(this,Bn).audioTracks.selected),t&&v(this,Oe,Kr).call(this,"media-audio-track-change-request",t),this.dispatch("audio-track-change",{detail:r(),trigger:t})},VD=function(t){const{qualities:r}=this.$state;r.set(h(this,Bn).qualities.toArray()),this.dispatch("qualities-change",{detail:r(),trigger:t})},Nle=function(t){const{quality:r}=this.$state;r.set(h(this,Bn).qualities.selected),t&&v(this,Oe,Kr).call(this,"media-quality-change-request",t),this.dispatch("quality-change",{detail:r(),trigger:t})},Mle=function(){const{qualities:t}=h(this,Bn),r=t.auto;this.$state.autoQuality.set(r),r||v(this,Oe,K8).call(this)},Oy=new WeakMap,zD=function(){v(this,Oe,K8).call(this),M(this,Oy,me(()=>{const{qualities:t}=h(this,Bn),{mediaWidth:r,mediaHeight:s}=this.$state,i=r(),o=s();if(i===0||o===0)return;let a=null,l=1/0;for(const c of t){const u=Math.abs(c.width-i)+Math.abs(c.height-o);u<l&&(l=u,a=c)}a&&t[$t.select](a,!0,new tn("resize",{detail:{width:i,height:o}}))}))},K8=function(){var t;(t=h(this,Oy))==null||t.call(this),M(this,Oy,null)},Ole=function(){this.$state.canSetQuality.set(!h(this,Bn).qualities.readonly)},Ple=function(){const{canSetVolume:t,isGoogleCastConnected:r}=this.$state;if(r()){t.set(!1);return}r5e().then(t.set)},Ile=function(t,r,s){let{qualities:i}=h(this,Bn),o=!1,a=!1;for(const l of t){if(!X_(l))continue;if(!r.some(u=>u.src===l.src)){const u=i.getBySrc(l.src);u&&(i[$t.remove](u,s),a=!0)}}a&&!i.length&&(this.$state.savedState.set(null),i[$t.reset](s));for(const l of r){if(!X_(l)||i.getBySrc(l.src))continue;const c={id:l.id??l.height+"p",bitrate:null,codec:null,...l,selected:!1};i[$t.add](c,s),o=!0}o&&!i[ti.enableAuto]&&(v(this,Oe,zD).call(this),i[ti.enableAuto]=v(this,Oe,zD).bind(this),i[ti.setAuto](!0,s))},HD=function(t,r=!1){const{audioTracks:s,qualities:i}=h(this,Bn);if(!r){M(this,My,[]),M(this,um,[-1,-1]),s[$t.reset](t),i[$t.reset](t),qW(this.$state,r),v(this,Oe,hp).call(this);return}qW(this.$state,r),v(this,Oe,hp).call(this)},qD=function(t){const{seekable:r,buffered:s,intrinsicDuration:i,canPlay:o}=this.$state;o.set(!0),s.set(t.buffered),r.set(t.seekable);const a=qp(t.seekable)??1/0;i.set(a)},UD=function(t){if(!Re(h(this,Bn).$provider))return;const{ended:s,seekableStart:i,clipEndTime:o,currentTime:a,realCurrentTime:l,duration:c}=this.$state,u=s()||l()<i()||o()>0&&l()>=o()||Math.abs(a()-c())<.1;return u&&this.dispatch("media-seek-request",{detail:i(),trigger:t}),u},Dle=function(){const{currentTime:t,played:r,paused:s}=this.$state;s()||(M(this,um,a5e(h(this,My),h(this,um),t())),r.set(new bs(h(this,My))))},WD=function(t){const{clipStartTime:r,clipEndTime:s,duration:i}=this.$state;r()>0||s()>0||this.handle(this.createEvent("time-change",{detail:i(),trigger:t}))},Rle=function(){var i;const{storage:t}=h(this,Bn),{canPlay:r,realCurrentTime:s}=this.$state;r()&&((i=t==null?void 0:t.setTime)==null||i.call(t,s()))},Py=new WeakMap,$le=function(t){var l;const{storage:r}=h(this,Bn),{paused:s,seeking:i,ended:o,duration:a}=this.$state;v(this,Oe,WD).call(this,t),s()||this.dispatch("pause",{trigger:t}),i()&&this.dispatch("seeked",{detail:a(),trigger:t}),o.set(!0),v(this,Oe,hp).call(this),(l=r==null?void 0:r.setTime)==null||l.call(r,a(),!0),this.dispatch("ended",{trigger:t})},GD=function(){h(this,Py).cancel(),this.$state.waiting.set(!1)};class Y7e extends Up{constructor(){super(...arguments);N(this,Mn)}onSetup(){if(v(this,Mn,Lle).call(this),st)return;const t=[v(this,Mn,jle),v(this,Mn,Vle),v(this,Mn,Kle),v(this,Mn,Yle),v(this,Mn,Hle),v(this,Mn,Ule),v(this,Mn,Wle),v(this,Mn,Zle),v(this,Mn,Jle),v(this,Mn,Xle),v(this,Mn,zle),v(this,Mn,Gle),v(this,Mn,qle),v(this,Mn,Fle),v(this,Mn,Ble)];for(const r of t)me(r.bind(this))}}Mn=new WeakSet,Lle=function(){var s;const t={duration:"providedDuration",loop:"providedLoop",poster:"providedPoster",streamType:"providedStreamType",title:"providedTitle",viewType:"providedViewType"},r=new Set(["currentTime","paused","playbackRate","volume"]);for(const i of Object.keys(this.$props))r.has(i)||(s=this.$state[t[i]??i])==null||s.set(this.$props[i]());this.$state.muted.set(this.$props.muted()||this.$props.volume()===0)},Fle=function(){const{viewType:t,streamType:r,title:s,poster:i,loop:o}=this.$props,a=this.$state;a.providedPoster.set(i()),a.providedStreamType.set(r()),a.providedViewType.set(t()),a.providedTitle.set(s()),a.providedLoop.set(o())},kHe=function(){},jle=function(){const{artist:t,artwork:r}=this.$props;this.$state.artist.set(t()),this.$state.artwork.set(r())},Ble=function(){const{title:t}=this.$state;this.dispatch("title-change",{detail:t()})},Vle=function(){const t=this.$props.autoPlay()||this.$props.autoplay();this.$state.autoPlay.set(t),this.dispatch("auto-play-change",{detail:t})},zle=function(){const t=this.$state.loop();this.dispatch("loop-change",{detail:t})},Hle=function(){const t=this.$props.controls();this.$state.controls.set(t)},qle=function(){const{poster:t}=this.$state;this.dispatch("poster-change",{detail:t()})},Ule=function(){const t=this.$props.crossOrigin()??this.$props.crossorigin(),r=t===!0?"":t;this.$state.crossOrigin.set(r)},Wle=function(){const{duration:t}=this.$props;this.dispatch("media-duration-change-request",{detail:t()})},Gle=function(){const t=this.$props.playsInline()||this.$props.playsinline();this.$state.playsInline.set(t),this.dispatch("plays-inline-change",{detail:t})},Kle=function(){const{clipStartTime:t}=this.$props;this.dispatch("media-clip-start-change-request",{detail:t()})},Yle=function(){const{clipEndTime:t}=this.$props;this.dispatch("media-clip-end-change-request",{detail:t()})},Zle=function(){this.dispatch("live-change",{detail:this.$state.live()})},Xle=function(){this.$state.liveEdgeTolerance.set(this.$props.liveEdgeTolerance()),this.$state.minLiveDVRWindow.set(this.$props.minLiveDVRWindow())},Jle=function(){this.dispatch("live-edge-change",{detail:this.$state.liveEdge()})};const pG=["play","pause","seekforward","seekbackward","seekto"];class Z7e extends Up{constructor(){super(...arguments);N(this,Hc)}onConnect(){me(v(this,Hc,ece).bind(this)),me(v(this,Hc,tce).bind(this));const t=v(this,Hc,nce).bind(this);for(const r of pG)navigator.mediaSession.setActionHandler(r,t);Qt(v(this,Hc,Qle).bind(this))}}Hc=new WeakSet,Qle=function(){for(const t of pG)navigator.mediaSession.setActionHandler(t,null)},ece=function(){const{title:t,artist:r,artwork:s,poster:i}=this.$state;navigator.mediaSession.metadata=new MediaMetadata({title:t(),artist:r(),artwork:s()??[{src:i()}]})},tce=function(){const{canPlay:t,paused:r}=this.$state;navigator.mediaSession.playbackState=t()?r()?"paused":"playing":"none"},nce=function(t){const r=new tn("media-session-action",{detail:t});switch(t.action){case"play":this.dispatch("media-play-request",{trigger:r});break;case"pause":this.dispatch("media-pause-request",{trigger:r});break;case"seekto":case"seekforward":case"seekbackward":this.dispatch("media-seek-request",{detail:Ds(t.seekTime)?t.seekTime:this.$state.currentTime()+(t.seekOffset??(t.action==="seekforward"?10:-10)),trigger:r});break}};let W5=bt(!1);st||(Rn(document,"pointerdown",()=>{W5.set(!1)}),Rn(document,"keydown",n=>{n.metaKey||n.altKey||n.ctrlKey||W5.set(!0)}));class al extends Fo{constructor(){super(...arguments);N(this,qc);N(this,kf,bt(!1))}onConnect(t){me(()=>{const r=new $n(t);if(!W5()){h(this,kf).set(!1),G5(t,!1),r.add("pointerenter",v(this,qc,ice).bind(this)).add("pointerleave",v(this,qc,oce).bind(this));return}const s=document.activeElement===t;h(this,kf).set(s),G5(t,s),r.add("focus",v(this,qc,rce).bind(this)).add("blur",v(this,qc,sce).bind(this))})}focused(){return h(this,kf).call(this)}}kf=new WeakMap,qc=new WeakSet,rce=function(){h(this,kf).set(!0),G5(this.el,!0)},sce=function(){h(this,kf).set(!1),G5(this.el,!1)},ice=function(){mG(this.el,!0)},oce=function(){mG(this.el,!1)};function G5(n,e){Rt(n,"data-focus",e),Rt(n,"data-hocus",e)}function mG(n,e){Rt(n,"data-hocus",e),Rt(n,"data-hover",e)}let gG=(Uc=class extends un{constructor(){super();N(this,Ze);N(this,ui);N(this,hm);N(this,di);G(this,"canPlayQueue",new hG);G(this,"remoteControl");N(this,Iy,!1);G(this,"orientation");new Y7e;const t={player:this,qualities:new Z5e,audioTracks:new V5e,storage:null,$provider:bt(null),$providerSetup:bt(!1),$props:this.$props,$state:this.$state};t.remote=this.remoteControl=new M5e(void 0),t.remote.setPlayer(this),t.textTracks=new G5e,t.textTracks[qt.crossOrigin]=this.$state.crossOrigin,t.textRenderers=new W5e(t),t.ariaKeys={},M(this,ui,t),Lo(b2,t),this.orientation=new B5,new al,new r7e(t);const r=new W7e;M(this,hm,new K7e(r,t)),M(this,di,new q7e(h(this,hm),r,t)),t.delegate=new B7e(h(this,hm).handle.bind(h(this,hm)),t),t.notify=t.delegate.notify.bind(t.delegate),typeof navigator<"u"&&"mediaSession"in navigator&&new Z7e,new dG("load",this.startLoading.bind(this)),new dG("posterLoad",this.startLoadingPoster.bind(this))}onSetup(){v(this,Ze,lce).call(this),me(v(this,Ze,ace).bind(this)),me(v(this,Ze,dce).bind(this)),me(v(this,Ze,uce).bind(this)),me(v(this,Ze,fce).bind(this)),me(v(this,Ze,hce).bind(this)),me(v(this,Ze,mce).bind(this)),me(v(this,Ze,pce).bind(this))}onAttach(t){t.setAttribute("data-media-player",""),rr(t,"tabindex","0"),rr(t,"role","region"),me(v(this,Ze,yce).bind(this)),st?v(this,Ze,KD).call(this):me(v(this,Ze,KD).bind(this)),st?v(this,Ze,YD).call(this):me(v(this,Ze,YD).bind(this)),Rn(t,"find-media-player",v(this,Ze,cce).bind(this))}onConnect(t){PW&&Rt(t,"data-iphone","");const r=window.matchMedia("(pointer: coarse)");v(this,Ze,ZD).call(this,r),r.onchange=v(this,Ze,ZD).bind(this);const s=new ResizeObserver(dh(v(this,Ze,b6).bind(this)));s.observe(t),me(v(this,Ze,b6).bind(this)),this.dispatch("media-player-connect",{detail:this,bubbles:!0,composed:!0}),Qt(()=>{s.disconnect(),r.onchange=null})}onDestroy(){h(this,ui).player=null,this.canPlayQueue.reset()}get provider(){return h(this,Ze,ua)}get controls(){return h(this,di).controls}set controls(t){h(this,Ze,Y8).controls.set(t)}get title(){return Re(this.$state.title)}set title(t){if(h(this,Iy)){M(this,Iy,!1);return}h(this,Ze,Y8).title.set(t)}get qualities(){return h(this,ui).qualities}get audioTracks(){return h(this,ui).audioTracks}get textTracks(){return h(this,ui).textTracks}get textRenderers(){return h(this,ui).textRenderers}get duration(){return this.$state.duration()}set duration(t){h(this,Ze,Y8).duration.set(t)}get paused(){return Re(this.$state.paused)}set paused(t){v(this,Ze,XD).call(this,t)}get muted(){return Re(this.$state.muted)}set muted(t){v(this,Ze,JD).call(this,t)}get currentTime(){return Re(this.$state.currentTime)}set currentTime(t){v(this,Ze,QD).call(this,t)}get volume(){return Re(this.$state.volume)}set volume(t){v(this,Ze,eR).call(this,t)}get playbackRate(){return Re(this.$state.playbackRate)}set playbackRate(t){v(this,Ze,tR).call(this,t)}async play(t){return h(this,di).play(t)}async pause(t){return h(this,di).pause(t)}async enterFullscreen(t,r){return h(this,di).enterFullscreen(t,r)}async exitFullscreen(t,r){return h(this,di).exitFullscreen(t,r)}enterPictureInPicture(t){return h(this,di).enterPictureInPicture(t)}exitPictureInPicture(t){return h(this,di).exitPictureInPicture(t)}seekToLiveEdge(t){h(this,di).seekToLiveEdge(t)}startLoading(t){h(this,ui).notify("can-load",void 0,t)}startLoadingPoster(t){h(this,ui).notify("can-load-poster",void 0,t)}requestAirPlay(t){return h(this,di).requestAirPlay(t)}requestGoogleCast(t){return h(this,di).requestGoogleCast(t)}setAudioGain(t,r){return h(this,di).setAudioGain(t,r)}destroy(){super.destroy(),h(this,ui).remote.setPlayer(null),this.dispatch("destroy")}},ui=new WeakMap,hm=new WeakMap,di=new WeakMap,Ze=new WeakSet,ua=function(){return h(this,ui).$provider()},Y8=function(){return this.$props},Iy=new WeakMap,KD=function(){const t=this.$el,{title:r,live:s,viewType:i,providedTitle:o}=this.$state,a=s(),l=Zg(i()),c=l!=="Unknown"?`${a?"Live ":""}${l}`:a?"Live":"Media",u=r();Rt(this.el,"aria-label",`${c} Player`+(u?` - ${u}`:"")),!st&&(t!=null&&t.hasAttribute("title"))&&(M(this,Iy,!0),t==null||t.removeAttribute("title"))},YD=function(){const t=this.orientation.landscape?"landscape":"portrait";this.$state.orientation.set(t),Rt(this.el,"data-orientation",t),v(this,Ze,b6).call(this)},ace=function(){this.$state.canPlay()&&h(this,Ze,ua)?this.canPlayQueue.start():this.canPlayQueue.stop()},lce=function(){if(Uc[mT]){this.setAttributes(Uc[mT]);return}const t={"data-load":function(){return this.$props.load()},"data-captions":function(){const s=this.$state.textTrack();return!!s&&Oi(s)},"data-ios-controls":function(){return this.$state.iOSControls()},"data-controls":function(){return this.controls.showing},"data-buffering":function(){const{canLoad:s,canPlay:i,waiting:o}=this.$state;return s()&&(!i()||o())},"data-error":function(){const{error:s}=this.$state;return!!s()},"data-autoplay-error":function(){const{autoPlayError:s}=this.$state;return!!s()}},r={autoPlay:"autoplay",canAirPlay:"can-airplay",canPictureInPicture:"can-pip",pictureInPicture:"pip",playsInline:"playsinline",remotePlaybackState:"remote-state",remotePlaybackType:"remote-type",isAirPlayConnected:"airplay",isGoogleCastConnected:"google-cast"};for(const s of F7e){const i="data-"+(r[s]??sc(s));t[i]=function(){return this.$state[s]()}}delete t.title,Uc[mT]=t,this.setAttributes(t)},cce=function(t){t.detail(this)},b6=function(){if(st||!this.el)return;const t=this.el.clientWidth,r=this.el.clientHeight;this.$state.width.set(t),this.$state.height.set(r),Mi(this.el,"--player-width",t+"px"),Mi(this.el,"--player-height",r+"px")},ZD=function(t){if(st)return;const r=t.matches?"coarse":"fine";Rt(this.el,"data-pointer",r),this.$state.pointer.set(r),v(this,Ze,b6).call(this)},uce=function(){v(this,Ze,XD).call(this,this.$props.paused())},XD=function(t){t?this.canPlayQueue.enqueue("paused",()=>h(this,di).pause()):this.canPlayQueue.enqueue("paused",()=>h(this,di).play())},dce=function(){v(this,Ze,JD).call(this,this.$props.muted())},JD=function(t){this.canPlayQueue.enqueue("muted",()=>{h(this,Ze,ua)&&h(this,Ze,ua).setMuted(t)})},hce=function(){v(this,Ze,QD).call(this,this.$props.currentTime())},QD=function(t){this.canPlayQueue.enqueue("currentTime",()=>{const{currentTime:r}=this.$state;t!==Re(r)&&Re(()=>{if(!h(this,Ze,ua))return;const s=UW(t,this.$state);Number.isFinite(s)&&h(this,Ze,ua).setCurrentTime(s)})})},fce=function(){v(this,Ze,eR).call(this,this.$props.volume())},eR=function(t){const r=sT(0,t,1);this.canPlayQueue.enqueue("volume",()=>{h(this,Ze,ua)&&h(this,Ze,ua).setVolume(r)})},pce=function(){v(this,Ze,tR).call(this,this.$props.playbackRate())},tR=function(t){this.canPlayQueue.enqueue("rate",()=>{var r,s;h(this,Ze,ua)&&((s=(r=h(this,Ze,ua)).setPlaybackRate)==null||s.call(r,t))})},mce=function(){v(this,Ze,gce).call(this,this.$props.playsInline())},gce=function(t){this.canPlayQueue.enqueue("playsinline",()=>{var r,s;h(this,Ze,ua)&&((s=(r=h(this,Ze,ua)).setPlaysInline)==null||s.call(r,t))})},yce=function(){var s;let t=this.$props.storage(),r=ut(t)?new O5e:t;if(r!=null&&r.onChange){const{source:i}=this.$state,o=ut(t)?t:(s=this.el)==null?void 0:s.id,a=xu(v(this,Ze,vce).bind(this));me(()=>r.onChange(i(),a(),o||void 0))}h(this,ui).storage=r,h(this,ui).textTracks.setStorage(r),Qt(()=>{var i;(i=r==null?void 0:r.onDestroy)==null||i.call(r),h(this,ui).storage=null,h(this,ui).textTracks.setStorage(null)})},vce=function(){const{clipStartTime:t,clipEndTime:r}=this.$props,{source:s}=this.$state,i=s();return i.src?`${i.src}:${t()}:${r()}`:null},G(Uc,"props",j7e),G(Uc,"state",v2),Uc);const mr=gG.prototype;nr(mr,"canPlayQueue"),nr(mr,"remoteControl"),nr(mr,"provider"),nr(mr,"controls"),nr(mr,"orientation"),nr(mr,"title"),nr(mr,"qualities"),nr(mr,"audioTracks"),nr(mr,"textTracks"),nr(mr,"textRenderers"),nr(mr,"duration"),nr(mr,"paused"),nr(mr,"muted"),nr(mr,"currentTime"),nr(mr,"volume"),nr(mr,"playbackRate"),Rs(mr,"play"),Rs(mr,"pause"),Rs(mr,"enterFullscreen"),Rs(mr,"exitFullscreen"),Rs(mr,"enterPictureInPicture"),Rs(mr,"exitPictureInPicture"),Rs(mr,"seekToLiveEdge"),Rs(mr,"startLoading"),Rs(mr,"startLoadingPoster"),Rs(mr,"requestAirPlay"),Rs(mr,"requestGoogleCast"),Rs(mr,"setAudioGain");function X7e(n,e){return fetch(n,e).then(t=>t.text()).then(t=>/type="static"/.test(t)?"on-demand":"live")}function yG(n,e){return fetch(n,e).then(t=>t.text()).then(t=>{const r=J7e(t);if(r)return yG(/^https?:/.test(r)?r:new URL(r,n).href,e);const s=/EXT-X-PLAYLIST-TYPE:\s*VOD/.test(t)?"on-demand":"live";return s==="live"&&Q7e(t)>=10&&(/#EXT-X-DVR-ENABLED:\s*true/.test(t)||t.includes("#EXT-X-DISCONTINUITY"))?"live:dvr":s})}function J7e(n){const e=n.match(/#EXT-X-STREAM-INF:[^\n]+(\n[^\n]+)*/g);return e?e[0].split(` +`)[1].trim():null}function Q7e(n){const e=n.split(` +`);for(const t of e)if(t.startsWith("#EXT-X-TARGETDURATION")){const r=parseFloat(t.split(":")[1]);if(!isNaN(r))return r}return-1}const yT=new Map;class eke{constructor(e,t,r,s=[]){N(this,fs);N(this,Dy,!1);N(this,Ry);N(this,nw);N(this,Vn);N(this,gd);M(this,nw,e),M(this,Vn,t),M(this,gd,r);const i=new fT,o=new uT,a=new cT,l=new u7e,c=new L7e,u=new $7e,d=[c,u];M(this,Ry,xu(()=>{const p=t.$state.remotePlaybackLoader(),m=t.$props.preferNativeHLS()?[a,l,i,o,...d,...s]:[o,a,l,i,...d,...s];return p?[p,...m]:m}));const{$state:f}=t;f.sources.set(vG(t.$props.src()));for(const p of f.sources()){const m=h(this,Ry).call(this).find(w=>w.canPlay(p));if(!m)continue;const y=m.mediaType(p);t.$state.source.set(p),t.$state.mediaType.set(y),t.$state.inferredViewType.set(y),h(this,gd).set(m),M(this,Dy,!0);break}}connect(){const e=h(this,gd).call(this);h(this,Dy)&&(v(this,fs,rR).call(this,h(this,Vn).$state.source(),e),v(this,fs,sR).call(this,e),M(this,Dy,!1)),me(v(this,fs,bce).bind(this)),me(v(this,fs,wce).bind(this)),me(v(this,fs,xce).bind(this)),me(v(this,fs,kce).bind(this)),me(v(this,fs,Cce).bind(this))}}Dy=new WeakMap,Ry=new WeakMap,nw=new WeakMap,Vn=new WeakMap,gd=new WeakMap,fs=new WeakSet,bce=function(){h(this,Vn).notify("sources-change",[...vG(h(this,Vn).$props.src()),...h(this,nw).call(this)])},wce=function(){var o;const{$state:e}=h(this,Vn),t=e.sources(),r=Re(e.source),s=v(this,fs,nR).call(this,r,t);if(((o=t[0])==null?void 0:o.src)&&!s.src&&!s.type){const{crossOrigin:a}=e,l=y2(a()),c=new AbortController;return Promise.all(t.map(u=>ut(u.src)&&u.type==="?"?fetch(u.src,{method:"HEAD",credentials:l,signal:c.signal}).then(d=>(u.type=d.headers.get("content-type")||"??",yT.set(u.src,u.type),u)).catch(()=>u):u)).then(u=>{if(c.signal.aborted)return;const d=v(this,fs,nR).call(this,Re(e.source),u);il(),d.src||h(this,Vn).notify("error",{message:"Failed to load resource.",code:4})}),()=>c.abort()}il()},nR=function(e,t){let r={src:"",type:""},s=null,i=new tn("sources-change",{detail:{sources:t}}),o=h(this,Ry).call(this),{started:a,paused:l,currentTime:c,quality:u,savedState:d}=h(this,Vn).$state;for(const f of t){const p=o.find(m=>m.canPlay(f));if(p){r=f,s=p;break}}if(X_(r)){const f=u(),p=t.find(m=>m.src===(f==null?void 0:f.src));Re(a)?d.set({paused:Re(l),currentTime:Re(c)}):d.set(null),p&&(r=p,i=new tn("quality-change",{detail:{quality:f}}))}return wG(e,r)||v(this,fs,rR).call(this,r,s,i),s!==Re(h(this,gd))&&v(this,fs,sR).call(this,s,i),r},rR=function(e,t,r){h(this,Vn).notify("source-change",e,r),h(this,Vn).notify("media-type-change",(t==null?void 0:t.mediaType(e))||"unknown",r)},sR=function(e,t){h(this,Vn).$providerSetup.set(!1),h(this,Vn).notify("provider-change",null,t),e&&Re(()=>{var r;return(r=e.preconnect)==null?void 0:r.call(e,h(this,Vn))}),h(this,gd).set(e),h(this,Vn).notify("provider-loader-change",e,t)},xce=function(){const e=h(this,Vn).$provider();if(!(!e||Re(h(this,Vn).$providerSetup))){if(h(this,Vn).$state.canLoad()){ns(()=>e.setup(),e.scope),h(this,Vn).$providerSetup.set(!0);return}Re(()=>{var t;return(t=e.preconnect)==null?void 0:t.call(e)})}},kce=function(){if(!h(this,Vn).$providerSetup())return;const e=h(this,Vn).$provider(),t=h(this,Vn).$state.source(),r=Re(h(this,Vn).$state.crossOrigin),s=Re(h(this,Vn).$props.preferNativeHLS);if(!wG(e==null?void 0:e.currentSrc,t)){if(h(this,Vn).$state.canLoad()){const i=new AbortController;return Qg(t)?(s||!F5())&&yG(t.src,{credentials:y2(r),signal:i.signal}).then(o=>{h(this,Vn).notify("stream-type-change",o)}).catch($o):eT(t)?X7e(t.src,{credentials:y2(r),signal:i.signal}).then(o=>{h(this,Vn).notify("stream-type-change",o)}).catch($o):h(this,Vn).notify("stream-type-change","on-demand"),Re(()=>{const o=Re(h(this,Vn).$state.preload);return e==null?void 0:e.loadSource(t,o).catch(a=>{})}),()=>i.abort()}try{ut(t.src)&&Eu(new URL(t.src).origin)}catch{}}},Cce=function(){const e=h(this,gd).call(this),{providedPoster:t,source:r,canLoadPoster:s}=h(this,Vn).$state;if(!e||!e.loadPoster||!r()||!s()||t())return;const i=new AbortController,o=new tn("source-change",{detail:r});return e.loadPoster(r(),h(this,Vn),i).then(a=>{h(this,Vn).notify("poster-change",a||"",o)}).catch(()=>{h(this,Vn).notify("poster-change","",o)}),()=>{i.abort()}};function vG(n){return(qr(n)?n:[n]).map(e=>ut(e)?{src:e,type:bG(e)}:{...e,type:bG(e.src,e.type)})}function bG(n,e){return ut(e)&&e.length?e:ut(n)&&yT.has(n)?yT.get(n):!e&&Qg({src:n,type:""})?"application/x-mpegurl":!e&&eT({src:n,type:""})?"application/dash+xml":!ut(n)||n.startsWith("blob:")?"video/object":n.includes("youtube")||n.includes("youtu.be")?"video/youtube":n.includes("vimeo")&&!n.includes("progressive_redirect")&&!n.includes(".m3u8")?"video/vimeo":"?"}function wG(n,e){return(n==null?void 0:n.src)===(e==null?void 0:e.src)&&(n==null?void 0:n.type)===(e==null?void 0:e.type)}class tke{constructor(e,t){N(this,x8);N(this,rw);N(this,Cf);N(this,sw,[]);M(this,rw,e),M(this,Cf,t),me(v(this,x8,Sce).bind(this))}}rw=new WeakMap,Cf=new WeakMap,sw=new WeakMap,x8=new WeakSet,Sce=function(){const e=h(this,rw).call(this);for(const t of h(this,sw))if(!e.some(r=>r.id===t.id)){const r=t.id&&h(this,Cf).textTracks.getById(t.id);r&&h(this,Cf).textTracks.remove(r)}for(const t of e){const r=t.id||ph.createId(t);h(this,Cf).textTracks.getById(r)||(t.id=r,h(this,Cf).textTracks.add(t))}M(this,sw,e)};let xG=(k8=class extends un{constructor(){super(...arguments);N(this,ia);N(this,Ol);N(this,iw);N(this,ow,bt([]));N(this,aw,bt([]));N(this,$y,null);N(this,Ly,-1)}onSetup(){M(this,Ol,or()),M(this,iw,new eke(h(this,ow),h(this,Ol),this.$state.loader,this.$props.loaders()))}onAttach(t){t.setAttribute("data-media-provider","")}onConnect(t){h(this,iw).connect(),new tke(h(this,aw),h(this,Ol));const r=new ResizeObserver(dh(v(this,ia,oR).bind(this)));r.observe(t);const s=new MutationObserver(v(this,ia,aR).bind(this));s.observe(t,{attributes:!0,childList:!0}),v(this,ia,oR).call(this),v(this,ia,aR).call(this),Qt(()=>{r.disconnect(),s.disconnect()})}load(t){t==null||t.setAttribute("aria-hidden","true"),window.cancelAnimationFrame(h(this,Ly)),M(this,Ly,requestAnimationFrame(()=>v(this,ia,Ece).call(this,t))),Qt(()=>{window.cancelAnimationFrame(h(this,Ly))})}onDestroy(){M(this,$y,null),v(this,ia,iR).call(this)}},Ol=new WeakMap,iw=new WeakMap,ow=new WeakMap,aw=new WeakMap,$y=new WeakMap,Ly=new WeakMap,ia=new WeakSet,Ece=function(t){if(!this.scope)return;const r=this.$state.loader(),{$provider:s}=h(this,Ol);h(this,$y)===r&&(r==null?void 0:r.target)===t&&Re(s)||(v(this,ia,iR).call(this),M(this,$y,r),r&&(r.target=t||null),!(!r||!t)&&r.load(h(this,Ol)).then(i=>{this.scope&&Re(this.$state.loader)===r&&h(this,Ol).notify("provider-change",i)}))},iR=function(){var t;(t=h(this,Ol))==null||t.notify("provider-change",null)},oR=function(){if(!this.el)return;const{player:t,$state:r}=h(this,Ol),s=this.el.offsetWidth,i=this.el.offsetHeight;t&&(r.mediaWidth.set(s),r.mediaHeight.set(i),t.el&&(Mi(t.el,"--media-width",s+"px"),Mi(t.el,"--media-height",i+"px")))},aR=function(){const t=[],r=[],s=this.el.children;for(const i of s)if(!i.hasAttribute("data-vds")){if(i instanceof HTMLSourceElement){const o={id:i.id,src:i.src,type:i.type};for(const a of["id","src","width","height","bitrate","codec"]){const l=i.getAttribute(`data-${a}`);ut(l)&&(o[a]=/id|src|codec/.test(a)?l:Number(l))}t.push(o)}else if(i instanceof HTMLTrackElement){const o={src:i.src,kind:i.track.kind,language:i.srclang,label:i.label,default:i.default,type:i.getAttribute("data-type")};r.push({id:i.id||ph.createId(o),...o})}}h(this,ow).set(t),h(this,aw).set(r),il()},G(k8,"props",{loaders:[]}),G(k8,"state",new Su({loader:null})),k8);const nke=xG.prototype;Rs(nke,"load");let rke=(C8=class extends un{constructor(){super(...arguments);N(this,kr);N(this,Wc);N(this,Fy,!1);N(this,Sf,-1);N(this,jy,-1)}onSetup(){M(this,Wc,or())}onAttach(t){t.style.display="contents"}onConnect(t){t.setAttribute("data-media-announcer",""),rr(t,"role","status"),rr(t,"aria-live","polite");const{busy:r}=this.$state;this.setAttributes({"aria-busy":()=>r()?"true":null}),M(this,Fy,!0),me(v(this,kr,_ce).bind(this)),me(v(this,kr,Mce).bind(this)),me(v(this,kr,Nce).bind(this)),me(v(this,kr,Tce).bind(this)),me(v(this,kr,Ace).bind(this)),me(v(this,kr,Oce).bind(this)),me(v(this,kr,Pce).bind(this)),il(),M(this,Fy,!1)}},Wc=new WeakMap,Fy=new WeakMap,kr=new WeakSet,_ce=function(){const{paused:t}=h(this,Wc).$state;v(this,kr,og).call(this,t()?"Pause":"Play")},Tce=function(){const{fullscreen:t}=h(this,Wc).$state;v(this,kr,og).call(this,t()?"Enter Fullscreen":"Exit Fullscreen")},Ace=function(){const{pictureInPicture:t}=h(this,Wc).$state;v(this,kr,og).call(this,t()?"Enter PiP":"Exit PiP")},Nce=function(){const{textTrack:t}=h(this,Wc).$state;v(this,kr,og).call(this,t()?"Closed-Captions On":"Closed-Captions Off")},Mce=function(){const{muted:t,volume:r,audioGain:s}=h(this,Wc).$state;v(this,kr,og).call(this,t()||r()===0?"Mute":`${Math.round(r()*(s()??1)*100)}% ${v(this,kr,Z8).call(this,"Volume")}`)},Sf=new WeakMap,jy=new WeakMap,Oce=function(){const{seeking:t,currentTime:r}=h(this,Wc).$state,s=t();h(this,Sf)>0?(window.clearTimeout(h(this,jy)),M(this,jy,window.setTimeout(()=>{if(!this.scope)return;const i=Re(r),o=Math.abs(i-h(this,Sf));if(o>=1){const a=i>=h(this,Sf),l=U5(o);v(this,kr,og).call(this,`${v(this,kr,Z8).call(this,a?"Seek Forward":"Seek Backward")} ${l}`)}M(this,Sf,-1),M(this,jy,-1)},300))):s&&M(this,Sf,Re(r))},Z8=function(t){var s;const{translations:r}=this.$props;return((s=r==null?void 0:r())==null?void 0:s[t||""])??t},Pce=function(){const{label:t,busy:r}=this.$state,s=v(this,kr,Z8).call(this,t());if(h(this,Fy))return;r.set(!0);const i=window.setTimeout(()=>void r.set(!1),150);return this.el&&Rt(this.el,"aria-label",s),ut(s)&&this.dispatch("change",{detail:s}),()=>window.clearTimeout(i)},og=function(t){const{label:r}=this.$state;r.set(t)},G(C8,"props",{translations:null}),G(C8,"state",new Su({label:null,busy:!1})),C8);class kG extends un{constructor(){super(...arguments);N(this,vd);N(this,yd)}onSetup(){M(this,yd,or()),me(v(this,vd,Dce).bind(this))}onAttach(t){const{pictureInPicture:r,fullscreen:s}=h(this,yd).$state;Mi(t,"pointer-events","none"),rr(t,"role","group"),this.setAttributes({"data-visible":v(this,vd,lR).bind(this),"data-fullscreen":s,"data-pip":r}),me(()=>{this.dispatch("change",{detail:v(this,vd,lR).call(this)})}),me(v(this,vd,Ice).bind(this)),me(()=>{const i=s();for(const o of["top","right","bottom","left"])Mi(t,`padding-${o}`,i&&`env(safe-area-inset-${o})`)})}}yd=new WeakMap,vd=new WeakSet,Ice=function(){if(!this.el)return;const{nativeControls:t}=h(this,yd).$state,r=t();Rt(this.el,"aria-hidden",r?"true":null),Mi(this.el,"display",r?"none":null)},Dce=function(){const{controls:t}=h(this,yd).player,{hideDelay:r,hideOnMouseLeave:s}=this.$props;t.defaultDelay=r()===2e3?h(this,yd).$props.controlsDelay():r(),t.hideOnMouseLeave=s()},lR=function(){const{controlsVisible:t}=h(this,yd).$state;return t()},G(kG,"props",{hideDelay:2e3,hideOnMouseLeave:!1});class ske extends un{onAttach(e){e.style.pointerEvents||Mi(e,"pointer-events","auto")}}class CG extends Fo{constructor(t){super();N(this,Ef);N(this,Pl);N(this,fm,-1);N(this,pm,-1);N(this,Gc,null);M(this,Pl,t),me(v(this,Ef,Rce).bind(this))}onDestroy(){var t;(t=h(this,Gc))==null||t.call(this),M(this,Gc,null)}show(t){var r,s,i;v(this,Ef,X8).call(this),window.cancelAnimationFrame(h(this,pm)),M(this,pm,-1),(r=h(this,Gc))==null||r.call(this),M(this,Gc,null),M(this,fm,window.setTimeout(()=>{M(this,fm,-1);const o=h(this,Pl).content();o&&o.style.removeProperty("display"),Re(()=>h(this,Pl).onChange(!0,t))},((i=(s=h(this,Pl)).showDelay)==null?void 0:i.call(s))??0))}hide(t){v(this,Ef,X8).call(this),Re(()=>h(this,Pl).onChange(!1,t)),M(this,pm,requestAnimationFrame(()=>{var s;v(this,Ef,X8).call(this),M(this,pm,-1);const r=h(this,Pl).content();if(r){const i=()=>{r.style.display="none",M(this,Gc,null)};if(q5e(r)){(s=h(this,Gc))==null||s.call(this);const a=Rn(r,"animationend",i,{once:!0});M(this,Gc,a)}else i()}}))}}Pl=new WeakMap,Ef=new WeakSet,Rce=function(){const t=h(this,Pl).trigger();if(!t){this.hide();return}const r=this.show.bind(this),s=this.hide.bind(this);h(this,Pl).listen(t,r,s)},fm=new WeakMap,pm=new WeakMap,Gc=new WeakMap,X8=function(){window.clearTimeout(h(this,fm)),M(this,fm,-1)};const Wp=ku();let ike=0;class SG extends un{constructor(){super();N(this,Da);N(this,By,`media-tooltip-${++ike}`);N(this,_f,bt(null));N(this,Tf,bt(null));N(this,lw,bt(!1));new al;const{showDelay:t}=this.$props;new CG({trigger:h(this,_f),content:h(this,Tf),showDelay:t,listen(r,s,i){me(()=>{W5()&&Rn(r,"focus",s),Rn(r,"blur",i)}),new $n(r).add("touchstart",o=>o.preventDefault(),{passive:!1}).add("mouseenter",s).add("mouseleave",i)},onChange:v(this,Da,Bce).bind(this)})}onAttach(t){t.style.setProperty("display","contents")}onSetup(){Lo(Wp,{trigger:h(this,_f),content:h(this,Tf),showing:h(this,lw),attachTrigger:v(this,Da,$ce).bind(this),detachTrigger:v(this,Da,Lce).bind(this),attachContent:v(this,Da,Fce).bind(this),detachContent:v(this,Da,jce).bind(this)})}}By=new WeakMap,_f=new WeakMap,Tf=new WeakMap,lw=new WeakMap,Da=new WeakSet,$ce=function(t){var s;h(this,_f).set(t);let r=t.getAttribute("data-media-tooltip");r&&((s=this.el)==null||s.setAttribute(`data-media-${r}-tooltip`,"")),Rt(t,"data-describedby",h(this,By))},Lce=function(t){t.removeAttribute("data-describedby"),t.removeAttribute("aria-describedby"),h(this,_f).set(null)},Fce=function(t){t.setAttribute("id",h(this,By)),t.style.display="none",rr(t,"role","tooltip"),h(this,Tf).set(t)},jce=function(t){t.removeAttribute("id"),t.removeAttribute("role"),h(this,Tf).set(null)},Bce=function(t){const r=h(this,_f).call(this),s=h(this,Tf).call(this);r&&Rt(r,"aria-describedby",t?h(this,By):null);for(const i of[this.el,r,s])i&&Rt(i,"data-visible",t);h(this,lw).set(t)},G(SG,"props",{showDelay:700});class oke extends un{constructor(){super();N(this,mm);new al}onConnect(t){Qt(JW(()=>{if(!this.connectScope)return;v(this,mm,Vce).call(this);const r=Ur(Wp);Qt(()=>{const s=v(this,mm,cR).call(this);s&&r.detachTrigger(s)})}))}}mm=new WeakSet,Vce=function(){const t=v(this,mm,cR).call(this),r=Ur(Wp);t&&r.attachTrigger(t)},cR=function(){const t=this.el.firstElementChild;return(t==null?void 0:t.localName)==="button"||(t==null?void 0:t.getAttribute("role"))==="button"?t:this.el};class EG extends un{constructor(){super();N(this,bd);new al;const{placement:t}=this.$props;this.setAttributes({"data-placement":t})}onAttach(t){v(this,bd,uR).call(this,t),Object.assign(t.style,{position:"absolute",top:0,left:0,width:"max-content"})}onConnect(t){v(this,bd,uR).call(this,t);const r=Ur(Wp);Qt(()=>r.detachContent(t)),Qt(JW(()=>{this.connectScope&&me(v(this,bd,zce).bind(this))}))}}bd=new WeakSet,uR=function(t){Ur(Wp).attachContent(t)},zce=function(){const{showing:t}=Ur(Wp);if(!t())return;const{placement:r,offset:s,alignOffset:i}=this.$props;return QW(this.el,v(this,bd,Hce).call(this),r(),{offsetVarName:"media-tooltip",xOffset:i(),yOffset:s()})},Hce=function(){return Ur(Wp).trigger()},G(EG,"props",{placement:"top center",offset:0,alignOffset:0});class mi extends Fo{constructor(t){super();N(this,Kc);N(this,wd);M(this,wd,t),new al,t.keyShortcut&&new a7e(t.keyShortcut)}onSetup(){const{disabled:t}=this.$props;this.setAttributes({"data-pressed":h(this,wd).isPresssed,"aria-pressed":v(this,Kc,qce).bind(this),"aria-disabled":()=>t()?"true":null})}onAttach(t){rr(t,"tabindex","0"),rr(t,"role","button"),rr(t,"type","button")}onConnect(t){const r=gh(t,v(this,Kc,Wce).bind(this));for(const s of["click","touchstart"])r.add(s,v(this,Kc,Gce).bind(this),{passive:!0})}}wd=new WeakMap,Kc=new WeakSet,qce=function(){return m2(h(this,wd).isPresssed())},Uce=function(t){KU(h(this,wd).isPresssed)&&h(this,wd).isPresssed.set(r=>!r)},Wce=function(t){if(this.$props.disabled()||this.el.hasAttribute("data-disabled")){t.preventDefault(),t.stopImmediatePropagation();return}t.preventDefault(),(h(this,wd).onPress??v(this,Kc,Uce)).call(this,t)},Gce=function(t){this.$props.disabled()&&(t.preventDefault(),t.stopImmediatePropagation())},G(mi,"props",{disabled:!1});let _G=(qI=class extends un{constructor(){super();N(this,cw,bt(!1));new mi({isPresssed:h(this,cw)})}get pressed(){return h(this,cw).call(this)}},cw=new WeakMap,G(qI,"props",{disabled:!1,defaultPressed:!1}),qI);const ake=_G.prototype;nr(ake,"pressed");let lke=(UI=class extends un{constructor(){super();N(this,Yc);N(this,xd);new mi({isPresssed:v(this,Yc,Yce).bind(this),onPress:v(this,Yc,Kce).bind(this)})}onSetup(){M(this,xd,or());const{canAirPlay:t,isAirPlayConnected:r}=h(this,xd).$state;this.setAttributes({"data-active":r,"data-supported":t,"data-state":v(this,Yc,Zce).bind(this),"aria-hidden":ni(()=>!t())})}onAttach(t){t.setAttribute("data-media-tooltip","airplay"),mh(t,v(this,Yc,Xce).bind(this))}},xd=new WeakMap,Yc=new WeakSet,Kce=function(t){h(this,xd).remote.requestAirPlay(t)},Yce=function(){const{remotePlaybackType:t,remotePlaybackState:r}=h(this,xd).$state;return t()==="airplay"&&r()!=="disconnected"},Zce=function(){const{remotePlaybackType:t,remotePlaybackState:r}=h(this,xd).$state;return t()==="airplay"&&r()},Xce=function(){const{remotePlaybackState:t}=h(this,xd).$state;return`AirPlay ${t()}`},G(UI,"props",mi.props),UI),cke=(WI=class extends un{constructor(){super();N(this,Zc);N(this,kd);new mi({isPresssed:v(this,Zc,Qce).bind(this),onPress:v(this,Zc,Jce).bind(this)})}onSetup(){M(this,kd,or());const{canGoogleCast:t,isGoogleCastConnected:r}=h(this,kd).$state;this.setAttributes({"data-active":r,"data-supported":t,"data-state":v(this,Zc,eue).bind(this),"aria-hidden":ni(()=>!t())})}onAttach(t){t.setAttribute("data-media-tooltip","google-cast"),mh(t,v(this,Zc,tue).bind(this))}},kd=new WeakMap,Zc=new WeakSet,Jce=function(t){h(this,kd).remote.requestGoogleCast(t)},Qce=function(){const{remotePlaybackType:t,remotePlaybackState:r}=h(this,kd).$state;return t()==="google-cast"&&r()!=="disconnected"},eue=function(){const{remotePlaybackType:t,remotePlaybackState:r}=h(this,kd).$state;return t()==="google-cast"&&r()},tue=function(){const{remotePlaybackState:t}=h(this,kd).$state;return`Google Cast ${t()}`},G(WI,"props",mi.props),WI),uke=(GI=class extends un{constructor(){super();N(this,ym);N(this,gm);new mi({isPresssed:v(this,ym,dR).bind(this),keyShortcut:"togglePaused",onPress:v(this,ym,nue).bind(this)})}onSetup(){M(this,gm,or());const{paused:t,ended:r}=h(this,gm).$state;this.setAttributes({"data-paused":t,"data-ended":r})}onAttach(t){t.setAttribute("data-media-tooltip","play"),mh(t,"Play")}},gm=new WeakMap,ym=new WeakSet,nue=function(t){const r=h(this,gm).remote;v(this,ym,dR).call(this)?r.pause(t):r.play(t)},dR=function(){const{paused:t}=h(this,gm).$state;return!t()},G(GI,"props",mi.props),GI),dke=(KI=class extends un{constructor(){super();N(this,Xc);N(this,vm);new mi({isPresssed:v(this,Xc,hR).bind(this),keyShortcut:"toggleCaptions",onPress:v(this,Xc,rue).bind(this)})}onSetup(){M(this,vm,or()),this.setAttributes({"data-active":v(this,Xc,hR).bind(this),"data-supported":()=>!v(this,Xc,fR).call(this),"aria-hidden":ni(v(this,Xc,fR).bind(this))})}onAttach(t){t.setAttribute("data-media-tooltip","caption"),mh(t,"Captions")}},vm=new WeakMap,Xc=new WeakSet,rue=function(t){h(this,vm).remote.toggleCaptions(t)},hR=function(){const{textTrack:t}=h(this,vm).$state,r=t();return!!r&&Oi(r)},fR=function(){const{hasCaptions:t}=h(this,vm).$state;return!t()},G(KI,"props",mi.props),KI),hke=(YI=class extends un{constructor(){super();N(this,Cd);N(this,Af);new mi({isPresssed:v(this,Cd,pR).bind(this),keyShortcut:"toggleFullscreen",onPress:v(this,Cd,sue).bind(this)})}onSetup(){M(this,Af,or());const{fullscreen:t}=h(this,Af).$state,r=v(this,Cd,iue).bind(this);this.setAttributes({"data-active":t,"data-supported":r,"aria-hidden":ni(()=>!r())})}onAttach(t){t.setAttribute("data-media-tooltip","fullscreen"),mh(t,"Fullscreen")}},Af=new WeakMap,Cd=new WeakSet,sue=function(t){const r=h(this,Af).remote,s=this.$props.target();v(this,Cd,pR).call(this)?r.exitFullscreen(s,t):r.enterFullscreen(s,t)},pR=function(){const{fullscreen:t}=h(this,Af).$state;return t()},iue=function(){const{canFullscreen:t}=h(this,Af).$state;return t()},G(YI,"props",{...mi.props,target:"prefer-media"}),YI),fke=(ZI=class extends un{constructor(){super();N(this,Jc);N(this,bm);new mi({isPresssed:v(this,Jc,J8).bind(this),keyShortcut:"toggleMuted",onPress:v(this,Jc,oue).bind(this)})}onSetup(){M(this,bm,or()),this.setAttributes({"data-muted":v(this,Jc,J8).bind(this),"data-state":v(this,Jc,aue).bind(this)})}onAttach(t){t.setAttribute("data-media-mute-button",""),t.setAttribute("data-media-tooltip","mute"),mh(t,"Mute")}},bm=new WeakMap,Jc=new WeakSet,oue=function(t){const r=h(this,bm).remote;v(this,Jc,J8).call(this)?r.unmute(t):r.mute(t)},J8=function(){const{muted:t,volume:r}=h(this,bm).$state;return t()||r()===0},aue=function(){const{muted:t,volume:r}=h(this,bm).$state,s=r();if(t()||s===0)return"muted";if(s>=.5)return"high";if(s<.5)return"low"},G(ZI,"props",mi.props),ZI),pke=(XI=class extends un{constructor(){super();N(this,Sd);N(this,Nf);new mi({isPresssed:v(this,Sd,mR).bind(this),keyShortcut:"togglePictureInPicture",onPress:v(this,Sd,lue).bind(this)})}onSetup(){M(this,Nf,or());const{pictureInPicture:t}=h(this,Nf).$state,r=v(this,Sd,cue).bind(this);this.setAttributes({"data-active":t,"data-supported":r,"aria-hidden":ni(()=>!r())})}onAttach(t){t.setAttribute("data-media-tooltip","pip"),mh(t,"PiP")}},Nf=new WeakMap,Sd=new WeakSet,lue=function(t){const r=h(this,Nf).remote;v(this,Sd,mR).call(this)?r.exitPictureInPicture(t):r.enterPictureInPicture(t)},mR=function(){const{pictureInPicture:t}=h(this,Nf).$state;return t()},cue=function(){const{canPictureInPicture:t}=h(this,Nf).$state;return t()},G(XI,"props",mi.props),XI),mke=(JI=class extends un{constructor(){super();N(this,Of);N(this,Mf);new al}onSetup(){M(this,Mf,or());const{seeking:t}=h(this,Mf).$state,{seconds:r}=this.$props,s=v(this,Of,uue).bind(this);this.setAttributes({seconds:r,"data-seeking":t,"data-supported":s,"aria-hidden":ni(()=>!s())})}onAttach(t){rr(t,"tabindex","0"),rr(t,"role","button"),rr(t,"type","button"),t.setAttribute("data-media-tooltip","seek"),mh(t,v(this,Of,due).bind(this))}onConnect(t){gh(t,v(this,Of,hue).bind(this))}},Mf=new WeakMap,Of=new WeakSet,uue=function(){const{canSeek:t}=h(this,Mf).$state;return t()},due=function(){const{seconds:t}=this.$props;return`Seek ${t()>0?"forward":"backward"} ${t()} seconds`},hue=function(t){const{seconds:r,disabled:s}=this.$props;if(s())return;const{currentTime:i}=h(this,Mf).$state,o=i()+r();h(this,Mf).remote.seek(o,t)},G(JI,"props",{disabled:!1,seconds:30}),JI),gke=(QI=class extends un{constructor(){super();N(this,S8);N(this,wm);new al}onSetup(){M(this,wm,or());const{disabled:t}=this.$props,{live:r,liveEdge:s}=h(this,wm).$state,i=()=>!r();this.setAttributes({"data-edge":s,"data-hidden":i,"aria-disabled":ni(()=>t()||s()),"aria-hidden":ni(i)})}onAttach(t){rr(t,"tabindex","0"),rr(t,"role","button"),rr(t,"type","button"),t.setAttribute("data-media-tooltip","live")}onConnect(t){gh(t,v(this,S8,fue).bind(this))}},wm=new WeakMap,S8=new WeakSet,fue=function(t){const{disabled:r}=this.$props,{liveEdge:s}=h(this,wm).$state;r()||s()||h(this,wm).remote.seekToLiveEdge(t)},G(QI,"props",{disabled:!1}),QI);const Gp=new Su({min:0,max:100,value:0,step:1,pointerValue:0,focused:!1,dragging:!1,pointing:!1,hidden:!1,get active(){return this.dragging||this.focused||this.pointing},get fillRate(){return TG(this.min,this.max,this.value)},get fillPercent(){return this.fillRate*100},get pointerRate(){return TG(this.min,this.max,this.pointerValue)},get pointerPercent(){return this.pointerRate*100}});function TG(n,e,t){const r=e-n,s=t-n;return r>0?s/r:0}class AG extends Fo{constructor(t){super();N(this,E8);N(this,Vy);N(this,Pf);M(this,Vy,t)}onConnect(t){M(this,Pf,new IntersectionObserver(r=>{var s,i;(i=(s=h(this,Vy)).callback)==null||i.call(s,r,h(this,Pf))},h(this,Vy))),h(this,Pf).observe(t),Qt(v(this,E8,pue).bind(this))}}Vy=new WeakMap,Pf=new WeakMap,E8=new WeakSet,pue=function(){var t;(t=h(this,Pf))==null||t.disconnect(),M(this,Pf,void 0)};const vT=ku(),S2=ku();function yke(n,e,t,r){return sT(n,ei(t,rT(r)),e)}function vke(n,e,t,r){const s=sT(0,t,1),i=e-n,o=i*s,a=o/r,l=r*Math.round(a);return n+l}const bT={Left:-1,ArrowLeft:-1,Up:1,ArrowUp:1,Right:1,ArrowRight:1,Down:-1,ArrowDown:-1};class bke extends Fo{constructor(t,r){super();N(this,ht);N(this,hi);N(this,If);N(this,zy);N(this,Df,null);N(this,Il,null);N(this,Ed,null);N(this,Hy);N(this,_d,!1);N(this,_8,fh(t=>{v(this,ht,fp).call(this,v(this,ht,w6).call(this,t),t)},20,{leading:!0}));M(this,hi,t),M(this,If,r)}onSetup(){Cu(S2)&&M(this,zy,Ur(S2))}onConnect(t){me(v(this,ht,vue).bind(this,t)),me(v(this,ht,bue).bind(this,t)),h(this,hi).swipeGesture&&me(v(this,ht,mue).bind(this))}}hi=new WeakMap,If=new WeakMap,zy=new WeakMap,ht=new WeakSet,mue=function(){var r;const{pointer:t}=h(this,If).$state;if(t()!=="coarse"||!h(this,hi).swipeGesture()){M(this,Df,null);return}M(this,Df,(r=h(this,If).player.el)==null?void 0:r.querySelector("media-provider,[data-media-provider]")),h(this,Df)&&new $n(h(this,Df)).add("touchstart",v(this,ht,gue).bind(this),{passive:!0}).add("touchmove",v(this,ht,yue).bind(this),{passive:!1})},Df=new WeakMap,Il=new WeakMap,Ed=new WeakMap,gue=function(t){M(this,Il,t.touches[0])},yue=function(t){if(ol(h(this,Il))||oT(t))return;const r=t.touches[0],s=r.clientX-h(this,Il).clientX,i=r.clientY-h(this,Il).clientY,o=this.$state.dragging();!o&&Math.abs(i)>5||o||(t.preventDefault(),Math.abs(s)>20&&(M(this,Il,r),M(this,Ed,this.$state.value()),v(this,ht,eC).call(this,h(this,Ed),t)))},vue=function(t){const{hidden:r}=this.$props;Rn(t,"focus",v(this,ht,wue).bind(this)),!(r()||h(this,hi).isDisabled())&&new $n(t).add("keyup",v(this,ht,_ue).bind(this)).add("keydown",v(this,ht,Eue).bind(this)).add("pointerenter",v(this,ht,xue).bind(this)).add("pointermove",v(this,ht,kue).bind(this)).add("pointerleave",v(this,ht,Cue).bind(this)).add("pointerdown",v(this,ht,Sue).bind(this))},bue=function(t){h(this,hi).isDisabled()||!this.$state.dragging()||new $n(document).add("pointerup",v(this,ht,Tue).bind(this),{capture:!0}).add("pointermove",h(this,_8).bind(this)).add("touchmove",v(this,ht,Aue).bind(this),{passive:!1})},wue=function(){v(this,ht,fp).call(this,this.$state.value())},Q8=function(t,r){var u,d,f,p;const{value:s,min:i,max:o,dragging:a}=this.$state,l=Math.max(i(),Math.min(t,o()));s.set(l);const c=this.createEvent("value-change",{detail:l,trigger:r});if(this.dispatch(c),(d=(u=h(this,hi)).onValueChange)==null||d.call(u,c),a()){const m=this.createEvent("drag-value-change",{detail:l,trigger:r});this.dispatch(m),(p=(f=h(this,hi)).onDragValueChange)==null||p.call(f,m)}},fp=function(t,r){const{pointerValue:s,dragging:i}=this.$state;s.set(t),this.dispatch("pointer-value-change",{detail:t,trigger:r}),i()&&v(this,ht,Q8).call(this,t,r)},w6=function(t){let r,s=this.el.getBoundingClientRect(),{min:i,max:o}=this.$state;if(this.$props.orientation()==="vertical"){const{bottom:a,height:l}=s;r=(a-t.clientY)/l}else if(h(this,Il)&&Ds(h(this,Ed))){const{width:a}=h(this,Df).getBoundingClientRect(),l=(t.clientX-h(this,Il).clientX)/a,c=o()-i(),u=c*Math.abs(l);r=(l<0?h(this,Ed)-u:h(this,Ed)+u)/c}else{const{left:a,width:l}=s;r=(t.clientX-a)/l}return Math.max(i(),Math.min(o(),h(this,hi).roundValue(vke(i(),o(),r,h(this,hi).getStep()))))},xue=function(t){this.$state.pointing.set(!0)},kue=function(t){const{dragging:r}=this.$state;r()||v(this,ht,fp).call(this,v(this,ht,w6).call(this,t),t)},Cue=function(t){this.$state.pointing.set(!1)},Sue=function(t){if(t.button!==0)return;const r=v(this,ht,w6).call(this,t);v(this,ht,eC).call(this,r,t),v(this,ht,fp).call(this,r,t)},eC=function(t,r){var o,a,l,c;const{dragging:s}=this.$state;if(s())return;s.set(!0),h(this,If).remote.pauseControls(r);const i=this.createEvent("drag-start",{detail:t,trigger:r});this.dispatch(i),(a=(o=h(this,hi)).onDragStart)==null||a.call(o,i),(c=(l=h(this,zy))==null?void 0:l.onDragStart)==null||c.call(l)},gR=function(t,r){var o,a,l,c;const{dragging:s}=this.$state;if(!s())return;s.set(!1),h(this,If).remote.resumeControls(r);const i=this.createEvent("drag-end",{detail:t,trigger:r});this.dispatch(i),(a=(o=h(this,hi)).onDragEnd)==null||a.call(o,i),M(this,Il,null),M(this,Ed,null),(c=(l=h(this,zy))==null?void 0:l.onDragEnd)==null||c.call(l)},Hy=new WeakMap,_d=new WeakMap,Eue=function(t){if(!Object.keys(bT).includes(t.key))return;const{key:s}=t,i=v(this,ht,yR).call(this,t);if(!ol(i)){v(this,ht,fp).call(this,i,t),v(this,ht,Q8).call(this,i,t);return}const o=v(this,ht,vR).call(this,t);h(this,_d)||(M(this,_d,s===h(this,Hy)),!this.$state.dragging()&&h(this,_d)&&v(this,ht,eC).call(this,o,t)),v(this,ht,fp).call(this,o,t),M(this,Hy,s)},_ue=function(t){if(!Object.keys(bT).includes(t.key)||!ol(v(this,ht,yR).call(this,t)))return;const s=h(this,_d)?this.$state.pointerValue():v(this,ht,vR).call(this,t);v(this,ht,Q8).call(this,s,t),v(this,ht,gR).call(this,s,t),M(this,Hy,""),M(this,_d,!1)},yR=function(t){let r=t.key,{min:s,max:i}=this.$state;return r==="Home"||r==="PageUp"?s():r==="End"||r==="PageDown"?i():!t.metaKey&&/^[0-9]$/.test(r)?(i()-s())/10*Number(r):null},vR=function(t){var k,x;const{key:r,shiftKey:s}=t;t.preventDefault(),t.stopPropagation();const{shiftKeyMultiplier:i}=this.$props,{min:o,max:a,value:l,pointerValue:c}=this.$state,u=h(this,hi).getStep(),d=h(this,hi).getKeyStep(),f=s?d*i():d,p=Number(bT[r]),m=f*p,y=h(this,_d)?c():((x=(k=h(this,hi)).getValue)==null?void 0:x.call(k))??l(),w=(y+m)/u;return Math.max(o(),Math.min(a(),Number((u*w).toFixed(3))))},Tue=function(t){if(t.button!==0)return;t.preventDefault(),t.stopImmediatePropagation();const r=v(this,ht,w6).call(this,t);v(this,ht,fp).call(this,r,t),v(this,ht,gR).call(this,r,t)},Aue=function(t){t.preventDefault()},_8=new WeakMap;const e1=ku(()=>({}));class Bo extends Fo{constructor(t){super();N(this,Bs);N(this,uw);N(this,yo);N(this,dw,bt(!0));N(this,hw,bt(!0));N(this,T8,dh((t,r)=>{var s,i;(s=this.el)==null||s.style.setProperty("--slider-fill",t+"%"),(i=this.el)==null||i.style.setProperty("--slider-pointer",r+"%")}));M(this,yo,t)}onSetup(){M(this,uw,or());const t=new al;t.attach(this),this.$state.focused=t.focused.bind(t),Cu(e1)||Lo(e1,{default:"value"}),Lo(vT,{orientation:this.$props.orientation,disabled:h(this,yo).isDisabled,preview:bt(null)}),me(v(this,Bs,Oue).bind(this)),me(v(this,Bs,Pue).bind(this)),me(v(this,Bs,Iue).bind(this)),v(this,Bs,Rue).call(this),new bke(h(this,yo),h(this,uw)).attach(this),new AG({callback:v(this,Bs,Nue).bind(this)}).attach(this)}onAttach(t){rr(t,"role","slider"),rr(t,"tabindex","0"),rr(t,"autocomplete","off"),st?v(this,Bs,bR).call(this):me(v(this,Bs,bR).bind(this))}onConnect(t){Qt(ZW(t,h(this,dw).set)),me(v(this,Bs,Mue).bind(this))}}uw=new WeakMap,yo=new WeakMap,dw=new WeakMap,hw=new WeakMap,Bs=new WeakSet,Nue=function(t){h(this,hw).set(t[0].isIntersecting)},Mue=function(){const{hidden:t}=this.$props;this.$state.hidden.set(t()||!h(this,dw).call(this)||!h(this,hw).bind(this))},Oue=function(){const{dragging:t,value:r,min:s,max:i}=this.$state;Re(t)||r.set(yke(s(),i(),r(),h(this,yo).getStep()))},Pue=function(){this.$state.step.set(h(this,yo).getStep())},Iue=function(){if(!h(this,yo).isDisabled())return;const{dragging:t,pointing:r}=this.$state;t.set(!1),r.set(!1)},Due=function(){return m2(h(this,yo).isDisabled())},Rue=function(){const{orientation:t}=this.$props,{dragging:r,active:s,pointing:i}=this.$state;this.setAttributes({"data-dragging":r,"data-pointing":i,"data-active":s,"aria-disabled":v(this,Bs,Due).bind(this),"aria-valuemin":h(this,yo).aria.valueMin??this.$state.min,"aria-valuemax":h(this,yo).aria.valueMax??this.$state.max,"aria-valuenow":h(this,yo).aria.valueNow,"aria-valuetext":h(this,yo).aria.valueText,"aria-orientation":t})},bR=function(){const{fillPercent:t,pointerPercent:r}=this.$state;h(this,T8).call(this,ei(t(),3),ei(r(),3))},T8=new WeakMap,G(Bo,"props",{hidden:!1,disabled:!1,step:1,keyStep:1,orientation:"horizontal",shiftKeyMultiplier:5});class Kp extends un{constructor(){super();N(this,Qc);new Bo({getStep:this.$props.step,getKeyStep:this.$props.keyStep,roundValue:Math.round,isDisabled:this.$props.disabled,aria:{valueNow:v(this,Qc,$ue).bind(this),valueText:v(this,Qc,Lue).bind(this)}})}onSetup(){me(v(this,Qc,Fue).bind(this)),me(v(this,Qc,jue).bind(this))}}Qc=new WeakSet,$ue=function(){const{value:t}=this.$state;return Math.round(t())},Lue=function(){const{value:t,max:r}=this.$state;return ei(t()/r()*100,2)+"%"},Fue=function(){const{value:t}=this.$props;this.$state.value.set(t())},jue=function(){const{min:t,max:r}=this.$props;this.$state.min.set(t()),this.$state.max.set(r())},G(Kp,"props",{...Bo.props,min:0,max:100,value:0}),G(Kp,"state",Gp);const Tu=new Map,K5=new Map,eD=class eD{constructor(e,t,r){N(this,zr);N(this,fw);N(this,qy);N(this,pw);G(this,"$images",bt([]));M(this,qy,e),M(this,pw,t),M(this,fw,r),me(v(this,zr,Bue).bind(this))}static create(e,t){const r=or();return new eD(e,t,r)}};fw=new WeakMap,qy=new WeakMap,pw=new WeakMap,zr=new WeakSet,Bue=function(){var r;const{canLoad:e}=h(this,fw).$state;if(!e())return;const t=h(this,qy).call(this);if(t){if(ut(t)&&Tu.has(t)){const s=Tu.get(t);if(Tu.delete(t),Tu.set(t,s),Tu.size>99){const i=Tu.keys().next().value;Tu.delete(i)}this.$images.set(Tu.get(t))}else if(ut(t)){const s=h(this,pw).call(this),i=t+"::"+s;if(!K5.has(i)){const o=new Promise(async(a,l)=>{try{const c=await fetch(t,{credentials:y2(s)});if(c.headers.get("content-type")==="application/json"){const d=await c.json();if(qr(d))if(d[0]&&"text"in d[0])a(v(this,zr,xR).call(this,d));else{for(let f=0;f<d.length;f++){const p=d[f];_u(M_(p),!1),_u("url"in p&&ut(p.url),!1),_u("startTime"in p&&Ds(p.startTime),!1)}a(d)}else a(v(this,zr,wR).call(this,d));return}Promise.resolve().then(()=>i8).then(async({parseResponse:d})=>{try{const{cues:f}=await d(c);a(v(this,zr,xR).call(this,f))}catch(f){l(f)}})}catch(c){l(c)}}).then(a=>(Tu.set(i,a),a)).catch(a=>{v(this,zr,tC).call(this,t,a)}).finally(()=>{ut(i)&&K5.delete(i)});K5.set(i,o)}(r=K5.get(i))==null||r.then(o=>{this.$images.set(o||[])})}else if(qr(t))try{this.$images.set(v(this,zr,Vue).call(this,t))}catch(s){v(this,zr,tC).call(this,t,s)}else try{this.$images.set(v(this,zr,wR).call(this,t))}catch(s){v(this,zr,tC).call(this,t,s)}return()=>{this.$images.set([])}}},Vue=function(e){const t=v(this,zr,kR).call(this);return e.map((r,s)=>(_u(r.url&&ut(r.url)),_u("startTime"in r&&Ds(r.startTime)),{...r,url:ut(r.url)?v(this,zr,CR).call(this,r.url,t):r.url}))},wR=function(e){var o;_u(ut(e.url)),_u(qr(e.tiles)&&((o=e.tiles)==null?void 0:o.length));const t=new URL(e.url),r=[],s="tile_width"in e?e.tile_width:e.tileWidth,i="tile_height"in e?e.tile_height:e.tileHeight;for(const a of e.tiles)r.push({url:t,startTime:"start"in a?a.start:a.startTime,width:s,height:i,coords:{x:a.x,y:a.y}});return r},xR=function(e){for(let s=0;s<e.length;s++){const i=e[s];_u("startTime"in i&&Ds(i.startTime)),_u("text"in i&&ut(i.text))}const t=[],r=v(this,zr,kR).call(this);for(const s of e){const[i,o]=s.text.split("#"),a=v(this,zr,zue).call(this,o);t.push({url:v(this,zr,CR).call(this,i,r),startTime:s.startTime,endTime:s.endTime,width:a==null?void 0:a.w,height:a==null?void 0:a.h,coords:a&&Ds(a.x)&&Ds(a.y)?{x:a.x,y:a.y}:void 0})}return t},kR=function(){let e=Re(h(this,qy));return!ut(e)||!/^https?:/.test(e)?location.href:e},CR=function(e,t){return/^https?:/.test(e)?new URL(e):new URL(e,t)},zue=function(e){if(!e)return{};const[t,r]=e.split("="),s=r==null?void 0:r.split(","),i={};if(!t||!s)return null;for(let o=0;o<t.length;o++){const a=+s[o];isNaN(a)||(i[t[o]]=a)}return i},tC=function(e,t){};let wT=eD,NG=(A8=class extends un{constructor(){super(...arguments);N(this,On);G(this,"media");N(this,Uy);N(this,Wy,[])}onSetup(){this.media=or(),M(this,Uy,wT.create(this.$props.src,this.$state.crossOrigin)),v(this,On,SR).call(this),this.setAttributes({"data-loading":v(this,On,Gue).bind(this),"data-error":v(this,On,ER).bind(this),"data-hidden":this.$state.hidden,"aria-hidden":ni(this.$state.hidden)})}onConnect(t){me(v(this,On,Hue).bind(this)),me(v(this,On,Kue).bind(this)),me(v(this,On,SR).bind(this)),me(v(this,On,que).bind(this)),me(v(this,On,Yue).bind(this)),me(v(this,On,_R).bind(this))}getTime(){return this.$props.time()}},Uy=new WeakMap,Wy=new WeakMap,On=new WeakSet,Hue=function(){const t=this.$state.img();t&&new $n(t).add("load",v(this,On,Uue).bind(this)).add("error",v(this,On,Wue).bind(this))},SR=function(){const{crossOrigin:t}=this.$props,{crossOrigin:r}=this.$state,{crossOrigin:s}=this.media.$state,i=t()!==null?t():s();r.set(i===!0?"anonymous":i)},que=function(){const{src:t,loading:r,error:s}=this.$state;return t()&&(r.set(!0),s.set(null)),()=>{v(this,On,Zue).call(this),r.set(!1),s.set(null)}},Uue=function(){const{loading:t,error:r}=this.$state;v(this,On,_R).call(this),t.set(!1),r.set(null)},Wue=function(t){const{loading:r,error:s}=this.$state;r.set(!1),s.set(t)},Gue=function(){const{loading:t,hidden:r}=this.$state;return!r()&&t()},ER=function(){const{error:t}=this.$state;return!ol(t())},Kue=function(){const{hidden:t}=this.$state,{duration:r}=this.media.$state,s=h(this,Uy).$images();t.set(v(this,On,ER).call(this)||!Number.isFinite(r())||s.length===0)},Yue=function(){let t=h(this,Uy).$images();if(!t.length)return;let r=this.getTime(),{src:s,activeThumbnail:i}=this.$state,o=-1,a=null;for(let l=t.length-1;l>=0;l--){const c=t[l];if(r>=c.startTime&&(!c.endTime||r<c.endTime)){o=l;break}}t[o]&&(a=t[o]),i.set(a),s.set((a==null?void 0:a.url.href)||"")},_R=function(){if(!this.scope||this.$state.hidden())return;const t=this.el,r=this.$state.img(),s=this.$state.activeThumbnail();if(!r||!s||!t)return;let i=s.width??r.naturalWidth,o=(s==null?void 0:s.height)??r.naturalHeight,{maxWidth:a,maxHeight:l,minWidth:c,minHeight:u,width:d,height:f}=getComputedStyle(this.el);c==="100%"&&(c=parseFloat(d)+""),u==="100%"&&(u=parseFloat(f)+"");let p=Math.max(parseInt(c)/i,parseInt(u)/o),m=Math.min(Math.max(parseInt(c),parseInt(a))/i,Math.max(parseInt(u),parseInt(l))/o),y=!isNaN(m)&&m<1?m:p>1?p:1;v(this,On,pp).call(this,t,"--thumbnail-width",`${i*y}px`),v(this,On,pp).call(this,t,"--thumbnail-height",`${o*y}px`),v(this,On,pp).call(this,t,"--thumbnail-aspect-ratio",String(ei(i/o,5))),v(this,On,pp).call(this,r,"width",`${r.naturalWidth*y}px`),v(this,On,pp).call(this,r,"height",`${r.naturalHeight*y}px`),v(this,On,pp).call(this,r,"transform",s.coords?`translate(-${s.coords.x*y}px, -${s.coords.y*y}px)`:""),v(this,On,pp).call(this,r,"max-width","none")},pp=function(t,r,s){t.style.setProperty(r,s),h(this,Wy).push(()=>t.style.removeProperty(r))},Zue=function(){for(const t of h(this,Wy))t();M(this,Wy,[])},G(A8,"props",{src:null,time:0,crossOrigin:null}),G(A8,"state",new Su({src:"",img:null,thumbnails:[],activeThumbnail:null,crossOrigin:null,loading:!1,error:null,hidden:!1})),A8);class wke extends NG{constructor(){super(...arguments);N(this,mw)}onAttach(t){M(this,mw,Yg(Kp.state))}getTime(){const{duration:t,clipStartTime:r}=this.media.$state;return r()+h(this,mw).pointerRate()*t()}}mw=new WeakMap;class Y5 extends un{constructor(){super(...arguments);N(this,Dr);N(this,Rf);N(this,gw)}get video(){return this.$state.video()}onSetup(){M(this,Rf,or()),M(this,gw,Yg(Kp.state)),v(this,Dr,TR).call(this),this.setAttributes({"data-loading":v(this,Dr,Que).bind(this),"data-hidden":this.$state.hidden,"data-error":v(this,Dr,AR).bind(this),"aria-hidden":ni(this.$state.hidden)})}onAttach(t){me(v(this,Dr,Xue).bind(this)),me(v(this,Dr,Jue).bind(this)),me(v(this,Dr,TR).bind(this)),me(v(this,Dr,ede).bind(this)),me(v(this,Dr,tde).bind(this)),me(v(this,Dr,rde).bind(this))}}Rf=new WeakMap,gw=new WeakMap,Dr=new WeakSet,Xue=function(){const t=this.$state.video();t&&(t.readyState>=2&&v(this,Dr,NR).call(this),new $n(t).add("canplay",v(this,Dr,NR).bind(this)).add("error",v(this,Dr,nde).bind(this)))},Jue=function(){const{src:t}=this.$state,{canLoad:r}=h(this,Rf).$state;t.set(r()?this.$props.src():null)},TR=function(){const{crossOrigin:t}=this.$props,{crossOrigin:r}=this.$state,{crossOrigin:s}=h(this,Rf).$state,i=t()!==null?t():s();r.set(i===!0?"anonymous":i)},Que=function(){const{canPlay:t,hidden:r}=this.$state;return!t()&&!r()},AR=function(){const{error:t}=this.$state;return!ol(t)},ede=function(){const{src:t,hidden:r}=this.$state,{canLoad:s,duration:i}=h(this,Rf).$state;r.set(s()&&(!t()||v(this,Dr,AR).call(this)||!Number.isFinite(i())))},tde=function(){const{src:t,canPlay:r,error:s}=this.$state;t(),r.set(!1),s.set(null)},NR=function(t){const{canPlay:r,error:s}=this.$state;r.set(!0),s.set(null),this.dispatch("can-play",{trigger:t})},nde=function(t){const{canPlay:r,error:s}=this.$state;r.set(!1),s.set(t),this.dispatch("error",{trigger:t})},rde=function(){const{video:t,canPlay:r}=this.$state,{duration:s}=h(this,Rf).$state,{pointerRate:i}=h(this,gw),o=t();r()&&o&&Number.isFinite(s())&&Number.isFinite(i())&&(o.currentTime=i()*s())},G(Y5,"props",{src:null,crossOrigin:null}),G(Y5,"state",new Su({video:null,src:null,crossOrigin:null,canPlay:!1,error:null,hidden:!1}));const xke=Y5.prototype;nr(xke,"video");class xT extends un{constructor(){super(...arguments);N(this,$f);N(this,N8);N(this,yw)}onSetup(){M(this,yw,Yg(Kp.state)),M(this,$f,Ur(e1)),M(this,N8,xu(this.getValueText.bind(this)))}getValueText(){var y,w;const{type:t,format:r,decimalPlaces:s,padHours:i,padMinutes:o,showHours:a,showMs:l}=this.$props,{value:c,pointerValue:u,min:d,max:f}=h(this,yw),p=(r==null?void 0:r())??h(this,$f).default,m=t()==="current"?c():u();if(p==="percent"){const k=f()-d(),x=m/k*100;return(h(this,$f).percent??ei)(x,s())+"%"}else return p==="time"?(h(this,$f).time??q5)(m,{padHrs:i(),padMins:o(),showHrs:a(),showMs:l()}):(((w=(y=h(this,$f)).value)==null?void 0:w.call(y,m))??m.toFixed(2))+""}}$f=new WeakMap,N8=new WeakMap,yw=new WeakMap,G(xT,"props",{type:"pointer",format:null,showHours:!1,showMs:!1,padHours:null,padMinutes:null,decimalPlaces:2});const kke=xT.prototype;Rs(kke,"getValueText");class MG extends un{constructor(){super(...arguments);N(this,Gy);N(this,vw,dh(()=>{const{disabled:t,orientation:r}=h(this,Gy);if(t())return;const s=this.el,{offset:i,noClamp:o}=this.$props;s&&Cke(s,{clamp:!o(),offset:i(),orientation:r()})}))}onSetup(){M(this,Gy,Ur(vT));const{active:t}=Yg(Kp.state);this.setAttributes({"data-visible":t})}onAttach(t){Object.assign(t.style,{position:"absolute",top:0,left:0,width:"max-content"})}onConnect(t){const{preview:r}=h(this,Gy);r.set(t),Qt(()=>r.set(null)),me(h(this,vw).bind(this));const s=new ResizeObserver(h(this,vw).bind(this));s.observe(t),Qt(()=>s.disconnect())}}Gy=new WeakMap,vw=new WeakMap,G(MG,"props",{offset:0,noClamp:!1});function Cke(n,{clamp:e,offset:t,orientation:r}){const s=getComputedStyle(n),i=parseFloat(s.width),o=parseFloat(s.height),a={top:null,right:null,bottom:null,left:null};if(a[r==="horizontal"?"bottom":"left"]=`calc(100% + var(--media-slider-preview-offset, ${t}px))`,r==="horizontal"){const l=i/2;if(!e)a.left=`calc(var(--slider-pointer) - ${l}px)`;else{const c=`max(0px, calc(var(--slider-pointer) - ${l}px))`,u=`calc(100% - ${i}px)`;a.left=`min(${c}, ${u})`}}else{const l=o/2;if(!e)a.bottom=`calc(var(--slider-pointer) - ${l}px)`;else{const c=`max(${l}px, calc(var(--slider-pointer) - ${l}px))`,u=`calc(100% - ${o}px)`;a.bottom=`min(${c}, ${u})`}}Object.assign(n.style,a)}class kT extends un{constructor(){super(...arguments);N(this,Ks);N(this,Ra);N(this,bw,fh(v(this,Ks,cde).bind(this),25))}onSetup(){M(this,Ra,or());const{audioGain:t}=h(this,Ra).$state;Lo(e1,{default:"percent",value(r){return(r*(t()??1)).toFixed(2)},percent(r){return Math.round(r*(t()??1))}}),new Bo({getStep:this.$props.step,getKeyStep:this.$props.keyStep,roundValue:Math.round,isDisabled:v(this,Ks,ade).bind(this),aria:{valueMax:v(this,Ks,ode).bind(this),valueNow:v(this,Ks,sde).bind(this),valueText:v(this,Ks,ide).bind(this)},onDragValueChange:v(this,Ks,dde).bind(this),onValueChange:v(this,Ks,ude).bind(this)}).attach(this),me(v(this,Ks,lde).bind(this))}onAttach(t){t.setAttribute("data-media-volume-slider",""),rr(t,"aria-label","Volume");const{canSetVolume:r}=h(this,Ra).$state;this.setAttributes({"data-supported":r,"aria-hidden":ni(()=>!r())})}}Ra=new WeakMap,Ks=new WeakSet,sde=function(){const{value:t}=this.$state,{audioGain:r}=h(this,Ra).$state;return Math.round(t()*(r()??1))},ide=function(){const{value:t,max:r}=this.$state,{audioGain:s}=h(this,Ra).$state;return ei(t()/r()*(s()??1)*100,2)+"%"},ode=function(){const{audioGain:t}=h(this,Ra).$state;return this.$state.max()*(t()??1)},ade=function(){const{disabled:t}=this.$props,{canSetVolume:r}=h(this,Ra).$state;return t()||!r()},lde=function(){const{muted:t,volume:r}=h(this,Ra).$state,s=t()?0:r()*100;this.$state.value.set(s),this.dispatch("value-change",{detail:s})},bw=new WeakMap,cde=function(t){if(!t.trigger)return;const r=ei(t.detail/100,3);h(this,Ra).remote.changeVolume(r,t)},ude=function(t){h(this,bw).call(this,t)},dde=function(t){h(this,bw).call(this,t)},G(kT,"props",{...Bo.props,keyStep:5,shiftKeyMultiplier:2}),G(kT,"state",Gp);class CT extends un{constructor(){super(...arguments);N(this,Vs);N(this,Lf)}onSetup(){M(this,Lf,or()),Lo(e1,{default:"percent",percent:(t,r)=>ei(this.$state.value(),r)+"%"}),new Bo({getStep:this.$props.step,getKeyStep:this.$props.keyStep,roundValue:Math.round,isDisabled:v(this,Vs,gde).bind(this),aria:{valueNow:v(this,Vs,hde).bind(this),valueText:v(this,Vs,fde).bind(this)},onDragValueChange:v(this,Vs,vde).bind(this),onValueChange:v(this,Vs,yde).bind(this)}).attach(this),me(v(this,Vs,pde).bind(this)),me(v(this,Vs,mde).bind(this))}onAttach(t){t.setAttribute("data-media-audio-gain-slider",""),rr(t,"aria-label","Audio Boost");const{canSetAudioGain:r}=h(this,Lf).$state;this.setAttributes({"data-supported":r,"aria-hidden":ni(()=>!r())})}}Lf=new WeakMap,Vs=new WeakSet,hde=function(){const{value:t}=this.$state;return Math.round(t())},fde=function(){const{value:t}=this.$state;return t()+"%"},pde=function(){const{min:t,max:r}=this.$props;this.$state.min.set(t()),this.$state.max.set(r())},mde=function(){const{audioGain:t}=h(this,Lf).$state,r=((t()??1)-1)*100;this.$state.value.set(r),this.dispatch("value-change",{detail:r})},gde=function(){const{disabled:t}=this.$props,{canSetAudioGain:r}=h(this,Lf).$state;return t()||!r()},MR=function(t){if(!t.trigger)return;const r=ei(1+t.detail/100,2);h(this,Lf).remote.changeAudioGain(r,t)},yde=function(t){v(this,Vs,MR).call(this,t)},vde=function(t){v(this,Vs,MR).call(this,t)},G(CT,"props",{...Bo.props,step:25,keyStep:25,shiftKeyMultiplier:2,min:0,max:300}),G(CT,"state",Gp);class ST extends un{constructor(){super(...arguments);N(this,_s);N(this,Ff);N(this,ww,fh(v(this,_s,Ede).bind(this),25))}onSetup(){M(this,Ff,or()),new Bo({getStep:this.$props.step,getKeyStep:this.$props.keyStep,roundValue:v(this,_s,Cde),isDisabled:v(this,_s,Sde).bind(this),aria:{valueNow:v(this,_s,bde).bind(this),valueText:v(this,_s,wde).bind(this)},onDragValueChange:v(this,_s,Tde).bind(this),onValueChange:v(this,_s,_de).bind(this)}).attach(this),me(v(this,_s,xde).bind(this)),me(v(this,_s,kde).bind(this))}onAttach(t){t.setAttribute("data-media-speed-slider",""),rr(t,"aria-label","Speed");const{canSetPlaybackRate:r}=h(this,Ff).$state;this.setAttributes({"data-supported":r,"aria-hidden":ni(()=>!r())})}}Ff=new WeakMap,_s=new WeakSet,bde=function(){const{value:t}=this.$state;return t()},wde=function(){const{value:t}=this.$state;return t()+"x"},xde=function(){const{min:t,max:r}=this.$props;this.$state.min.set(t()),this.$state.max.set(r())},kde=function(){const{playbackRate:t}=h(this,Ff).$state,r=t();this.$state.value.set(r),this.dispatch("value-change",{detail:r})},Cde=function(t){return ei(t,2)},Sde=function(){const{disabled:t}=this.$props,{canSetPlaybackRate:r}=h(this,Ff).$state;return t()||!r()},ww=new WeakMap,Ede=function(t){if(!t.trigger)return;const r=t.detail;h(this,Ff).remote.changePlaybackRate(r,t)},_de=function(t){h(this,ww).call(this,t)},Tde=function(t){h(this,ww).call(this,t)},G(ST,"props",{...Bo.props,step:.25,keyStep:.25,shiftKeyMultiplier:2,min:0,max:2}),G(ST,"state",Gp);class ET extends un{constructor(){super(...arguments);N(this,Ys);N(this,Dl);N(this,Ky,xu(()=>{const{qualities:t}=h(this,Dl).$state;return eG(t())}));N(this,xw,fh(v(this,Ys,Ide).bind(this),25))}onSetup(){M(this,Dl,or()),new Bo({getStep:this.$props.step,getKeyStep:this.$props.keyStep,roundValue:Math.round,isDisabled:v(this,Ys,Pde).bind(this),aria:{valueNow:v(this,Ys,Ade).bind(this),valueText:v(this,Ys,Nde).bind(this)},onDragValueChange:v(this,Ys,Rde).bind(this),onValueChange:v(this,Ys,Dde).bind(this)}).attach(this),me(v(this,Ys,Mde).bind(this)),me(v(this,Ys,Ode).bind(this))}onAttach(t){t.setAttribute("data-media-quality-slider",""),rr(t,"aria-label","Video Quality");const{qualities:r,canSetQuality:s}=h(this,Dl).$state,i=xu(()=>s()&&r().length>0);this.setAttributes({"data-supported":i,"aria-hidden":ni(()=>!i())})}}Dl=new WeakMap,Ky=new WeakMap,Ys=new WeakSet,Ade=function(){const{value:t}=this.$state;return t()},Nde=function(){const{quality:t}=h(this,Dl).$state;if(!t())return"";const{height:r,bitrate:s}=t(),i=s&&s>0?`${(s/1e6).toFixed(2)} Mbps`:null;return r?`${r}p${i?` (${i})`:""}`:"Auto"},Mde=function(){const t=h(this,Ky).call(this);this.$state.max.set(Math.max(0,t.length-1))},Ode=function(){let{quality:t}=h(this,Dl).$state,r=h(this,Ky).call(this),s=Math.max(0,r.indexOf(t()));this.$state.value.set(s),this.dispatch("value-change",{detail:s})},Pde=function(){const{disabled:t}=this.$props,{canSetQuality:r,qualities:s}=h(this,Dl).$state;return t()||s().length<=1||!r()},xw=new WeakMap,Ide=function(t){if(!t.trigger)return;const{qualities:r}=h(this,Dl),s=Re(h(this,Ky))[t.detail];h(this,Dl).remote.changeQuality(r.indexOf(s),t)},Dde=function(t){h(this,xw).call(this,t)},Rde=function(t){h(this,xw).call(this,t)},G(ET,"props",{...Bo.props,step:1,keyStep:1,shiftKeyMultiplier:1}),G(ET,"state",Gp);class Z5 extends un{constructor(){super();N(this,xt);N(this,Rr);N(this,Yy);N(this,kw,bt(null));N(this,Zy,!1);const{noSwipeGesture:t}=this.$props;new Bo({swipeGesture:()=>!t(),getValue:v(this,xt,IR).bind(this),getStep:v(this,xt,Ude).bind(this),getKeyStep:v(this,xt,Wde).bind(this),roundValue:v(this,xt,Gde),isDisabled:v(this,xt,Kde).bind(this),aria:{valueNow:v(this,xt,Yde).bind(this),valueText:v(this,xt,Zde).bind(this)},onDragStart:v(this,xt,zde).bind(this),onDragValueChange:v(this,xt,Hde).bind(this),onDragEnd:v(this,xt,PR).bind(this),onValueChange:v(this,xt,qde).bind(this)})}onSetup(){M(this,Rr,or()),Lo(e1,{default:"time",value:v(this,xt,Jde).bind(this),time:v(this,xt,Qde).bind(this)}),this.setAttributes({"data-chapters":v(this,xt,Lde).bind(this)}),this.setStyles({"--slider-progress":v(this,xt,$de).bind(this)}),me(v(this,xt,jde).bind(this)),me(v(this,xt,Fde).bind(this))}onAttach(t){t.setAttribute("data-media-time-slider",""),rr(t,"aria-label","Seek")}onConnect(t){me(v(this,xt,Bde).bind(this)),nT(h(this,Rr).textTracks,"chapters",h(this,kw).set)}}Rr=new WeakMap,Yy=new WeakMap,kw=new WeakMap,xt=new WeakSet,$de=function(){const{bufferedEnd:t,duration:r}=h(this,Rr).$state;return ei(Math.min(t()/Math.max(r(),1),1)*100,3)+"%"},Lde=function(){var r;const{duration:t}=h(this,Rr).$state;return((r=h(this,kw).call(this))==null?void 0:r.cues.length)&&Number.isFinite(t())&&t()>0},Fde=function(){M(this,Yy,fh(v(this,xt,OR).bind(this),this.$props.seekingRequestThrottle()))},jde=function(){if(this.$state.hidden())return;const{value:t,dragging:r}=this.$state,s=v(this,xt,IR).call(this);Re(r)||(t.set(s),this.dispatch("value-change",{detail:s}))},Bde=function(){const t=h(this,Rr).player.el,{preview:r}=Ur(vT);t&&r()&&Rt(t,"data-preview",this.$state.active())},OR=function(t,r){h(this,Rr).remote.seeking(t,r)},Vde=function(t,r,s){h(this,Yy).cancel();const{live:i}=h(this,Rr).$state;if(i()&&r>=99){h(this,Rr).remote.seekToLiveEdge(s);return}h(this,Rr).remote.seek(t,s)},Zy=new WeakMap,zde=function(t){const{pauseWhileDragging:r}=this.$props;if(r()){const{paused:s}=h(this,Rr).$state;M(this,Zy,!s()),h(this,Rr).remote.pause(t)}},Hde=function(t){h(this,Yy).call(this,v(this,xt,ag).call(this,t.detail),t)},PR=function(t){const{seeking:r}=h(this,Rr).$state;Re(r)||v(this,xt,OR).call(this,v(this,xt,ag).call(this,t.detail),t);const s=t.detail;v(this,xt,Vde).call(this,v(this,xt,ag).call(this,s),s,t);const{pauseWhileDragging:i}=this.$props;i()&&h(this,Zy)&&(h(this,Rr).remote.play(t),M(this,Zy,!1))},qde=function(t){const{dragging:r}=this.$state;r()||!t.trigger||v(this,xt,PR).call(this,t)},IR=function(){const{currentTime:t}=h(this,Rr).$state;return v(this,xt,Xde).call(this,t())},Ude=function(){const t=this.$props.step()/h(this,Rr).$state.duration()*100;return Number.isFinite(t)?t:1},Wde=function(){const t=this.$props.keyStep()/h(this,Rr).$state.duration()*100;return Number.isFinite(t)?t:1},Gde=function(t){return ei(t,3)},Kde=function(){const{disabled:t}=this.$props,{canSeek:r}=h(this,Rr).$state;return t()||!r()},Yde=function(){const{value:t}=this.$state;return Math.round(t())},Zde=function(){const t=v(this,xt,ag).call(this,this.$state.value()),{duration:r}=h(this,Rr).$state;return Number.isFinite(t)?`${U5(t)} out of ${U5(r())}`:"live"},ag=function(t){const{duration:r}=h(this,Rr).$state;return ei(t/100*r(),5)},Xde=function(t){const{liveEdge:r,duration:s}=h(this,Rr).$state,i=Math.max(0,Math.min(1,r()?1:Math.min(t,s())/s()));return Number.isNaN(i)?0:Number.isFinite(i)?i*100:100},Jde=function(t){const r=v(this,xt,ag).call(this,t),{live:s,duration:i}=h(this,Rr).$state;return Number.isFinite(r)?(s()?r-i():r).toFixed(0):"LIVE"},Qde=function(t,r){const s=v(this,xt,ag).call(this,t),{live:i,duration:o}=h(this,Rr).$state,a=i()?s-o():s;return Number.isFinite(s)?`${a<0?"-":""}${q5(Math.abs(a),r)}`:"LIVE"},G(Z5,"props",{...Bo.props,step:.1,keyStep:5,shiftKeyMultiplier:2,pauseWhileDragging:!1,noSwipeGesture:!1,seekingRequestThrottle:100}),G(Z5,"state",Gp);class _T extends un{constructor(){super(...arguments);N(this,kt);N(this,vo);N(this,xm);N(this,Xy);N(this,eu,null);N(this,Wi,[]);N(this,km,bt(null));N(this,Gi,bt([]));N(this,Td,bt(-1));N(this,Cm,bt(-1));N(this,jf,0);N(this,M8,dh(t=>{var l;let r,s=h(this,Gi).call(this),{seekableStart:i}=h(this,vo).$state,o=i(),a=v(this,kt,rC).call(this,s);for(let c=h(this,jf);c<h(this,Wi).length;c++)if(r=v(this,kt,sC).call(this,s[c],t,o,a),(l=h(this,Wi)[c])==null||l.style.setProperty("--chapter-progress",r+"%"),r<100){M(this,jf,c);break}}));N(this,O8,xu(v(this,kt,ohe).bind(this)));N(this,Cw,N5(()=>{const t=Re(h(this,km));!this.scope||!t||!t.cues.length||(h(this,Gi).set(v(this,kt,ahe).call(this,t.cues)),h(this,Td).set(0),M(this,jf,0))},150,!0))}get cues(){return h(this,Gi).call(this)}get activeCue(){return h(this,Gi).call(this)[h(this,Td).call(this)]||null}get activePointerCue(){return h(this,Gi).call(this)[h(this,Cm).call(this)]||null}onSetup(){M(this,vo,or()),M(this,xm,Yg(Z5.state))}onAttach(t){nT(h(this,vo).textTracks,"chapters",v(this,kt,DR).bind(this)),me(v(this,kt,lhe).bind(this))}onConnect(){Qt(()=>v(this,kt,RR).bind(this))}onDestroy(){v(this,kt,DR).call(this,null)}setRefs(t){var r;if(M(this,Wi,t),(r=h(this,Xy))==null||r.dispose(),h(this,Wi).length===1){const s=h(this,Wi)[0];s.style.width="100%",s.style.setProperty("--chapter-fill","var(--slider-fill)"),s.style.setProperty("--chapter-progress","var(--slider-progress)")}else h(this,Wi).length>0&&ns(()=>v(this,kt,ehe).call(this),M(this,Xy,wu()))}}vo=new WeakMap,xm=new WeakMap,Xy=new WeakMap,eu=new WeakMap,Wi=new WeakMap,km=new WeakMap,Gi=new WeakMap,Td=new WeakMap,Cm=new WeakMap,jf=new WeakMap,kt=new WeakSet,DR=function(t){Re(h(this,km))!==t&&(v(this,kt,RR).call(this),h(this,km).set(t))},RR=function(){var t;M(this,Wi,[]),h(this,Gi).set([]),h(this,Td).set(-1),h(this,Cm).set(-1),M(this,jf,0),(t=h(this,Xy))==null||t.dispose()},ehe=function(){h(this,Wi).length&&me(v(this,kt,the).bind(this))},the=function(){const{hidden:t}=h(this,xm);t()||(me(v(this,kt,nhe).bind(this)),me(v(this,kt,rhe).bind(this)),me(v(this,kt,she).bind(this)),me(v(this,kt,ihe).bind(this)))},nhe=function(){const t=h(this,Gi).call(this);if(!t.length)return;let r,{seekableStart:s,seekableEnd:i}=h(this,vo).$state,o=s(),a=i()||t[t.length-1].endTime,l=a-o,c=100;for(let u=0;u<t.length;u++)if(r=t[u],h(this,Wi)[u]){const d=u===t.length-1?c:ei((r.endTime-Math.max(o,r.startTime))/l*100,3);h(this,Wi)[u].style.width=d+"%",c-=d}},rhe=function(){let{liveEdge:t,seekableStart:r,seekableEnd:s}=h(this,vo).$state,{fillPercent:i,value:o}=h(this,xm),a=h(this,Gi).call(this),l=t(),c=Re(h(this,Td)),u=a[c],d=l?h(this,Gi).length-1:v(this,kt,LR).call(this,u&&u.startTime/s()*100<=Re(o)?c:0,i());l||!u?v(this,kt,nC).call(this,0,a.length,100):d>c?v(this,kt,nC).call(this,c,d,100):d<c&&v(this,kt,nC).call(this,d+1,c+1,0);const f=l?100:v(this,kt,sC).call(this,a[d],i(),r(),v(this,kt,rC).call(this,a));v(this,kt,$R).call(this,h(this,Wi)[d],f),h(this,Td).set(d)},she=function(){let{hidden:t,pointerPercent:r}=h(this,xm);if(t()){h(this,Cm).set(-1);return}const s=v(this,kt,LR).call(this,0,r());h(this,Cm).set(s)},nC=function(t,r,s){for(let i=t;i<r;i++)v(this,kt,$R).call(this,h(this,Wi)[i],s)},$R=function(t,r){t&&(t.style.setProperty("--chapter-fill",r+"%"),Rt(t,"data-active",r>0&&r<100),Rt(t,"data-ended",r===100))},LR=function(t,r){let s=0,i=h(this,Gi).call(this);if(r===0)return 0;if(r===100)return i.length-1;let{seekableStart:o}=h(this,vo).$state,a=o(),l=v(this,kt,rC).call(this,i);for(let c=t;c<i.length;c++)if(s=v(this,kt,sC).call(this,i[c],r,a,l),s>=0&&s<100)return c;return 0},ihe=function(){h(this,M8).call(this,h(this,O8).call(this))},M8=new WeakMap,O8=new WeakMap,ohe=function(){const{bufferedEnd:t,duration:r}=h(this,vo).$state;return ei(Math.min(t()/Math.max(r(),1),1),3)*100},rC=function(t){var i;const{seekableEnd:r}=h(this,vo).$state,s=r();return Number.isFinite(s)?s:((i=t[t.length-1])==null?void 0:i.endTime)||0},sC=function(t,r,s,i){if(!t||h(this,Gi).call(this).length===0)return 0;const a=i-s,l=Math.max(0,t.startTime-s),c=Math.min(i,t.endTime)-s,u=l/a,d=u*100,f=Math.min(1,u+(c-l)/a)*100;return Math.max(0,ei(r>=f?100:(r-d)/(f-d)*100,3))},ahe=function(t){let r=[],{seekableStart:s,seekableEnd:i,duration:o}=h(this,vo).$state,a=s(),l=i();t=t.filter(d=>d.startTime<=l&&d.endTime>=a);const c=t[0];c&&c.startTime>a&&r.push(new window.VTTCue(a,c.startTime,""));for(let d=0;d<t.length-1;d++){const f=t[d],p=t[d+1];if(r.push(f),p){const m=p.startTime-f.endTime;m>0&&r.push(new window.VTTCue(f.endTime,f.endTime+m,""))}}const u=t[t.length-1];if(u){r.push(u);const d=o();d>=0&&d-u.endTime>1&&r.push(new window.VTTCue(u.endTime,o(),""))}return r},lhe=function(){const{source:t}=h(this,vo).$state;t(),v(this,kt,che).call(this)},che=function(){if(!this.scope)return;const{disabled:t}=this.$props;if(t()){h(this,Gi).set([]),h(this,Td).set(0),M(this,jf,0);return}const r=h(this,km).call(this);if(r){const s=h(this,Cw).bind(this);s(),new $n(r).add("add-cue",s).add("remove-cue",s),me(v(this,kt,uhe).bind(this))}return M(this,eu,v(this,kt,fhe).call(this)),h(this,eu)&&me(v(this,kt,dhe).bind(this)),()=>{h(this,eu)&&(h(this,eu).textContent="",M(this,eu,null))}},uhe=function(){h(this,vo).$state.duration(),h(this,Cw).call(this)},Cw=new WeakMap,dhe=function(){const t=this.activePointerCue||this.activeCue;h(this,eu)&&(h(this,eu).textContent=(t==null?void 0:t.text)||"")},hhe=function(){let t=this.el;for(;t&&t.getAttribute("role")!=="slider";)t=t.parentElement;return t},fhe=function(){const t=v(this,kt,hhe).call(this);return t?t.querySelector('[data-part="chapter-title"]'):null},G(_T,"props",{disabled:!1});const X5=_T.prototype;nr(X5,"cues"),nr(X5,"activeCue"),nr(X5,"activePointerCue"),Rs(X5,"setRefs");const Au=ku();function Ske(n,e){const t=gW(n,e);for(const{el:r,top:s,left:i}of t)r.scroll({top:s,left:i,behavior:e.behavior})}function Eke(n,e={}){Ske(n,{scrollMode:"if-needed",block:"center",inline:"center",...e})}const _ke=["a[href]","[tabindex]","input","select","button"].map(n=>`${n}:not([aria-hidden='true'])`).join(","),Tke=new Set(["Escape","Tab","ArrowUp","ArrowDown","Home","PageUp","End","PageDown","Enter"," "]);class Ake{constructor(e){N(this,Cr);N(this,Bf,-1);N(this,Rl,null);N(this,bo,[]);N(this,Sw);M(this,Sw,e)}get items(){return h(this,bo)}attachMenu(e){Rn(e,"focus",v(this,Cr,phe).bind(this)),M(this,Rl,e),Qt(()=>{M(this,Rl,null)})}listen(){h(this,Rl)&&(this.update(),new $n(h(this,Rl)).add("keyup",v(this,Cr,mhe).bind(this)).add("keydown",v(this,Cr,ghe).bind(this)),Qt(()=>{M(this,Bf,-1),M(this,bo,[])}))}update(){M(this,Bf,0),M(this,bo,v(this,Cr,yhe).call(this))}scroll(e=v(this,Cr,FR).call(this)){const t=h(this,bo)[e];t&&requestAnimationFrame(()=>{requestAnimationFrame(()=>{Eke(t,{behavior:"smooth",boundary:r=>!r.hasAttribute("data-root")})})})}focusActive(e=!0){const t=v(this,Cr,FR).call(this);v(this,Cr,lg).call(this,t>=0?t:0,e)}}Bf=new WeakMap,Rl=new WeakMap,bo=new WeakMap,Sw=new WeakMap,Cr=new WeakSet,lg=function(e,t=!0){var r;M(this,Bf,e),h(this,bo)[e]?(h(this,bo)[e].focus({preventScroll:!0}),t&&this.scroll(e)):(r=h(this,Rl))==null||r.focus({preventScroll:!0})},FR=function(){return h(this,bo).findIndex(e=>document.activeElement===e||e.getAttribute("role")==="menuitemradio"&&e.getAttribute("aria-checked")==="true")},phe=function(){h(this,Bf)>=0||(this.update(),this.focusActive())},jR=function(e){const t=e.target;if(JU(e)&&t instanceof Element){const r=t.getAttribute("role");return!/a|input|select|button/.test(t.localName)&&!r}return Tke.has(e.key)},mhe=function(e){v(this,Cr,jR).call(this,e)&&(e.stopPropagation(),e.preventDefault())},ghe=function(e){if(v(this,Cr,jR).call(this,e))switch(e.stopPropagation(),e.preventDefault(),e.key){case"Escape":h(this,Sw).closeMenu(e);break;case"Tab":v(this,Cr,lg).call(this,v(this,Cr,iC).call(this,e.shiftKey?-1:1));break;case"ArrowUp":v(this,Cr,lg).call(this,v(this,Cr,iC).call(this,-1));break;case"ArrowDown":v(this,Cr,lg).call(this,v(this,Cr,iC).call(this,1));break;case"Home":case"PageUp":v(this,Cr,lg).call(this,0);break;case"End":case"PageDown":v(this,Cr,lg).call(this,h(this,bo).length-1);break}},iC=function(e){var r;let t=h(this,Bf);do t=(t+e+h(this,bo).length)%h(this,bo).length;while(((r=h(this,bo)[t])==null?void 0:r.offsetParent)===null);return t},yhe=function(){if(!h(this,Rl))return[];const e=h(this,Rl).querySelectorAll(_ke),t=[],r=s=>s.getAttribute("role")==="menu";for(const s of e)j5(s)&&s.offsetParent!==null&&XW(h(this,Rl),s,r)&&t.push(s);return t};var Nke=Object.defineProperty,Mke=Object.getOwnPropertyDescriptor,E2=(n,e,t,r)=>{for(var s=Mke(e,t),i=n.length-1,o;i>=0;i--)(o=n[i])&&(s=o(e,t,s)||s);return s&&Nke(e,t,s),s};let Oke=0,t1=(tD=class extends un{constructor(){super();N(this,Bt);N(this,$l);N(this,Jy);N(this,Qy);N(this,Ki,bt(!1));N(this,Ew,bt(!1));N(this,tu,bt(null));N(this,Zs,bt(null));N(this,Vf);N(this,zf,new Set);N(this,Sm,null);N(this,Em);N(this,Ad);N(this,_m,!1);N(this,_w,bt(!1));N(this,Tm,new Set);N(this,ev,!1);N(this,P8,v(this,Bt,Phe).bind(this));N(this,tv,!1);N(this,I8,v(this,Bt,Ihe).bind(this));N(this,D8,v(this,Bt,Dhe).bind(this));N(this,nv,dh(()=>{const t=Re(h(this,Zs));if(!t||st)return;let r=0,s=getComputedStyle(t),i=[...t.children];for(const o of["paddingTop","paddingBottom","borderTopWidth","borderBottomWidth"])r+=parseFloat(s[o])||0;for(const o of i)if(j5(o)&&o.style.display==="contents")i.push(...o.children);else if(o.nodeType===3)r+=parseFloat(getComputedStyle(o).fontSize);else if(j5(o)){if(!YW(o))continue;const a=getComputedStyle(o);r+=o.offsetHeight+(parseFloat(a.marginTop)||0)+(parseFloat(a.marginBottom)||0)}Mi(t,"--menu-height",r+"px")}));N(this,rv,!1);const{showDelay:t}=this.$props;M(this,Em,new CG({trigger:h(this,tu),content:h(this,Zs),showDelay:t,listen:(r,s,i)=>{gh(r,a=>{h(this,Ki).call(this)?i(a):s(a)});const o=v(this,Bt,Nhe).call(this);o&&gh(o,a=>{a.stopPropagation(),i(a)})},onChange:v(this,Bt,She).bind(this)}))}get triggerElement(){return h(this,tu).call(this)}get contentElement(){return h(this,Zs).call(this)}get isSubmenu(){return!!h(this,Vf)}onSetup(){M(this,$l,or());const t=++Oke;M(this,Jy,`media-menu-${t}`),M(this,Qy,`media-menu-button-${t}`),M(this,Ad,new Ake({closeMenu:this.close.bind(this)})),Cu(Au)&&M(this,Vf,Ur(Au)),v(this,Bt,vhe).call(this),this.setAttributes({"data-open":h(this,Ki),"data-root":!this.isSubmenu,"data-submenu":this.isSubmenu,"data-disabled":v(this,Bt,x6).bind(this)}),Lo(Au,{button:h(this,tu),content:h(this,Zs),expanded:h(this,Ki),hint:bt(""),submenu:!!h(this,Vf),disable:v(this,Bt,_he).bind(this),attachMenuButton:v(this,Bt,whe).bind(this),attachMenuItems:v(this,Bt,xhe).bind(this),attachObserver:v(this,Bt,khe).bind(this),disableMenuButton:v(this,Bt,Che).bind(this),addSubmenu:v(this,Bt,Ohe).bind(this),onTransitionEvent:r=>{h(this,Tm).add(r),Qt(()=>{h(this,Tm).delete(r)})}})}onAttach(t){t.style.setProperty("display","contents")}onConnect(t){var r;me(v(this,Bt,bhe).bind(this)),this.isSubmenu&&((r=h(this,Vf))==null||r.addSubmenu(this))}onDestroy(){h(this,tu).set(null),h(this,Zs).set(null),M(this,Sm,null),h(this,Tm).clear()}open(t){Re(h(this,Ki))||(h(this,Em).show(t),il())}close(t){Re(h(this,Ki))&&(h(this,Em).hide(t),il())}},$l=new WeakMap,Jy=new WeakMap,Qy=new WeakMap,Ki=new WeakMap,Ew=new WeakMap,tu=new WeakMap,Zs=new WeakMap,Vf=new WeakMap,zf=new WeakMap,Sm=new WeakMap,Em=new WeakMap,Ad=new WeakMap,_m=new WeakMap,_w=new WeakMap,Tm=new WeakMap,Bt=new WeakSet,vhe=function(){let t=-1,r=Cu(S2)?Ur(S2):null;Lo(S2,{onDragStart:()=>{var s;(s=r==null?void 0:r.onDragStart)==null||s.call(r),window.clearTimeout(t),t=-1,M(this,_m,!0)},onDragEnd:()=>{var s;(s=r==null?void 0:r.onDragEnd)==null||s.call(r),t=window.setTimeout(()=>{M(this,_m,!1),t=-1},300)}})},bhe=function(){const t=v(this,Bt,Ehe).call(this);this.isSubmenu||h(this,nv).call(this),v(this,Bt,BR).call(this,t),t&&(me(()=>{const{height:r}=h(this,$l).$state,s=h(this,Zs).call(this);s&&Mi(s,"--player-height",r()+"px")}),h(this,Ad).listen(),this.listen("pointerup",v(this,Bt,The).bind(this)),Rn(window,"pointerup",v(this,Bt,Ahe).bind(this)))},whe=function(t){const r=t.el,s=this.isSubmenu,i=ni(v(this,Bt,x6).bind(this));rr(r,"tabindex",s?"-1":"0"),rr(r,"role",s?"menuitem":"button"),Rt(r,"id",h(this,Qy)),Rt(r,"aria-haspopup","menu"),Rt(r,"aria-expanded","false"),Rt(r,"data-root",!this.isSubmenu),Rt(r,"data-submenu",this.isSubmenu);const o=()=>{Rt(r,"data-open",h(this,Ki).call(this)),Rt(r,"aria-disabled",i())};st?o():me(o),h(this,tu).set(r),Qt(()=>{h(this,tu).set(null)})},xhe=function(t){var o;const r=t.el;r.style.setProperty("display","none"),Rt(r,"id",h(this,Jy)),rr(r,"role","menu"),rr(r,"tabindex","-1"),Rt(r,"data-root",!this.isSubmenu),Rt(r,"data-submenu",this.isSubmenu),h(this,Zs).set(r),Qt(()=>h(this,Zs).set(null));const s=()=>Rt(r,"data-open",h(this,Ki).call(this));st?s():me(s),h(this,Ad).attachMenu(r),v(this,Bt,BR).call(this,!1);const i=v(this,Bt,Rhe).bind(this);this.isSubmenu?(o=h(this,Vf))==null||o.onTransitionEvent(i):(t.listen("transitionstart",i),t.listen("transitionend",i),t.listen("animationend",h(this,nv)),t.listen("vds-menu-resize",h(this,nv)))},khe=function(t){M(this,Sm,t)},BR=function(t){const r=Re(h(this,Zs));r&&Rt(r,"aria-hidden",m2(!t))},Che=function(t){h(this,_w).set(t)},ev=new WeakMap,She=function(t,r){var o,a,l,c,u,d;if(M(this,ev,h2(r)),r==null||r.stopPropagation(),h(this,Ki).call(this)===t)return;if(v(this,Bt,x6).call(this)){t&&h(this,Em).hide(r);return}(o=this.el)==null||o.dispatchEvent(new Event("vds-menu-resize",{bubbles:!0,composed:!0}));const s=h(this,tu).call(this),i=h(this,Zs).call(this);if(s&&(Rt(s,"aria-controls",t&&h(this,Jy)),Rt(s,"aria-expanded",m2(t))),i&&Rt(i,"aria-labelledby",t&&h(this,Qy)),h(this,Ki).set(t),v(this,Bt,Mhe).call(this,r),il(),h(this,ev)){t?i==null||i.focus():s==null||s.focus();for(const f of[this.el,i])f&&f.setAttribute("data-keyboard","")}else for(const f of[this.el,i])f&&f.removeAttribute("data-keyboard");if(this.dispatch(t?"open":"close",{trigger:r}),t)!this.isSubmenu&&h(this,$l).activeMenu!==this&&((a=h(this,$l).activeMenu)==null||a.close(r),h(this,$l).activeMenu=this),(c=(l=h(this,Sm))==null?void 0:l.onOpen)==null||c.call(l,r);else{if(this.isSubmenu)for(const f of h(this,zf))f.close(r);else h(this,$l).activeMenu=null;(d=(u=h(this,Sm))==null?void 0:u.onClose)==null||d.call(u,r)}t&&requestAnimationFrame(v(this,Bt,VR).bind(this))},VR=function(){h(this,rv)||h(this,tv)||(h(this,Ad).update(),requestAnimationFrame(()=>{h(this,ev)?h(this,Ad).focusActive():h(this,Ad).scroll()}))},Ehe=function(){return!v(this,Bt,x6).call(this)&&h(this,Ki).call(this)},x6=function(){return h(this,Ew).call(this)||h(this,_w).call(this)},_he=function(t){h(this,Ew).set(t)},The=function(t){const r=h(this,Zs).call(this);h(this,_m)||r&&KW(r,t)||t.stopPropagation()},Ahe=function(t){const r=h(this,Zs).call(this);h(this,_m)||r&&KW(r,t)||this.close(t)},Nhe=function(){var r;const t=(r=this.el)==null?void 0:r.querySelector('[data-part="close-target"]');return this.el&&t&&XW(this.el,t,s=>s.getAttribute("role")==="menu")?t:null},Mhe=function(t){this.isSubmenu||(h(this,Ki).call(this)?h(this,$l).remote.pauseControls(t):h(this,$l).remote.resumeControls(t))},Ohe=function(t){h(this,zf).add(t),new $n(t).add("open",h(this,I8)).add("close",h(this,D8)),Qt(h(this,P8))},P8=new WeakMap,Phe=function(t){h(this,zf).delete(t)},tv=new WeakMap,I8=new WeakMap,Ihe=function(t){var s;M(this,tv,!0);const r=h(this,Zs).call(this);this.isSubmenu&&((s=this.triggerElement)==null||s.setAttribute("aria-hidden","true"));for(const i of h(this,zf))if(i!==t.target)for(const o of[i.el,i.triggerElement])o==null||o.setAttribute("aria-hidden","true");if(r){const i=t.target.el;for(const o of r.children)o.contains(i)?o.setAttribute("data-open",""):o!==i&&o.setAttribute("data-hidden","")}},D8=new WeakMap,Dhe=function(t){var s;M(this,tv,!1);const r=h(this,Zs).call(this);this.isSubmenu&&((s=this.triggerElement)==null||s.setAttribute("aria-hidden","false"));for(const i of h(this,zf))for(const o of[i.el,i.triggerElement])o==null||o.setAttribute("aria-hidden","false");if(r)for(const i of r.children)i.removeAttribute("data-open"),i.removeAttribute("data-hidden")},nv=new WeakMap,rv=new WeakMap,Rhe=function(t){const r=h(this,Zs).call(this);r&&t.propertyName==="height"&&(M(this,rv,t.type==="transitionstart"),Rt(r,"data-transition",h(this,rv)?"height":null),h(this,Ki).call(this)&&v(this,Bt,VR).call(this));for(const s of h(this,Tm))s(t)},G(tD,"props",{showDelay:0}),tD);E2([nr],t1.prototype,"triggerElement"),E2([nr],t1.prototype,"contentElement"),E2([nr],t1.prototype,"isSubmenu"),E2([Rs],t1.prototype,"open"),E2([Rs],t1.prototype,"close");class J5 extends un{constructor(){super();N(this,Nd);N(this,Hf);N(this,Tw,bt(null));new al}get expanded(){var t;return((t=h(this,Hf))==null?void 0:t.expanded())??!1}onSetup(){M(this,Hf,Ur(Au))}onAttach(t){h(this,Hf).attachMenuButton(this),me(v(this,Nd,$he).bind(this)),rr(t,"type","button")}onConnect(t){me(v(this,Nd,Lhe).bind(this)),v(this,Nd,zR).call(this);const r=new MutationObserver(v(this,Nd,zR).bind(this));r.observe(t,{attributeFilter:["data-part"],childList:!0,subtree:!0}),Qt(()=>r.disconnect()),gh(t,s=>{this.dispatch("select",{trigger:s})})}}Hf=new WeakMap,Tw=new WeakMap,Nd=new WeakSet,$he=function(){h(this,Hf).disableMenuButton(this.$props.disabled())},Lhe=function(){const t=h(this,Tw).call(this);t&&me(()=>{const r=h(this,Hf).hint();r&&(t.textContent=r)})},zR=function(){var r;const t=(r=this.el)==null?void 0:r.querySelector('[data-part="hint"]');h(this,Tw).set(t??null)},G(J5,"props",{disabled:!1});const Pke=J5.prototype;nr(Pke,"expanded");class Ike extends J5{}const TT=ku();class OG extends un{constructor(){super();N(this,qf);N(this,Am);new al;const{placement:t}=this.$props;this.setAttributes({"data-placement":t})}onAttach(t){if(M(this,Am,Ur(Au)),h(this,Am).attachMenuItems(this),Cu(TT)){const r=Ur(TT);r&&(Lo(TT,null),r.attach(t),Qt(()=>r.attach(null)))}}onConnect(t){me(v(this,qf,Fhe).bind(this))}}Am=new WeakMap,qf=new WeakSet,Fhe=function(){const{expanded:t}=h(this,Am);if(!this.el||!t())return;const r=this.$props.placement();if(!r)return;Object.assign(this.el.style,{position:"absolute",top:0,left:0,width:"max-content"});const{offset:s,alignOffset:i}=this.$props;Qt(QW(this.el,v(this,qf,Bhe).call(this),r,{offsetVarName:"media-menu",xOffset:i(),yOffset:s()})),Qt(v(this,qf,jhe).bind(this))},jhe=function(){this.el&&(this.el.removeAttribute("style"),this.el.style.display="none")},Bhe=function(){return h(this,Am).button()},G(OG,"props",{placement:null,offset:0,alignOffset:0});const AT=ku();class PG extends Fo{constructor(){super(...arguments);N(this,$a);N(this,Md,new Set);N(this,Uf,bt(""));N(this,nD,null);G(this,"onValueChange");N(this,R8,v(this,$a,HR).bind(this))}get values(){return Array.from(h(this,Md)).map(t=>t.value())}get value(){return h(this,Uf).call(this)}set value(t){v(this,$a,HR).call(this,t)}onSetup(){Lo(AT,{add:v(this,$a,Vhe).bind(this),remove:v(this,$a,zhe).bind(this)})}onAttach(t){Cu(Au)||rr(t,"role","radiogroup"),this.setAttributes({value:h(this,Uf)})}onDestroy(){h(this,Md).clear()}}Md=new WeakMap,Uf=new WeakMap,nD=new WeakMap,$a=new WeakSet,Vhe=function(t){h(this,Md).has(t)||(h(this,Md).add(t),t.onCheck=h(this,R8),t.check(t.value()===h(this,Uf).call(this)))},zhe=function(t){t.onCheck=null,h(this,Md).delete(t)},R8=new WeakMap,HR=function(t,r){var a;const s=Re(h(this,Uf));if(!t||t===s)return;const i=v(this,$a,qR).call(this,s),o=v(this,$a,qR).call(this,t);i==null||i.check(!1,r),o==null||o.check(!0,r),h(this,Uf).set(t),(a=this.onValueChange)==null||a.call(this,t,r)},qR=function(t){for(const r of h(this,Md))if(t===Re(r.value))return r;return null};class NT extends un{constructor(){super();N(this,Nm);N(this,Od);M(this,Od,new PG),h(this,Od).onValueChange=v(this,Nm,Hhe).bind(this)}get values(){return h(this,Od).values}get value(){return h(this,Od).value}set value(t){h(this,Od).value=t}onSetup(){st?v(this,Nm,UR).call(this):me(v(this,Nm,UR).bind(this))}}Od=new WeakMap,Nm=new WeakSet,UR=function(){h(this,Od).value=this.$props.value()},Hhe=function(t,r){const s=this.createEvent("change",{detail:t,trigger:r});this.dispatch(s)},G(NT,"props",{value:""});const IG=NT.prototype;nr(IG,"values"),nr(IG,"value");class MT extends un{constructor(){super();N(this,fi);N(this,nu,bt(!1));N(this,Mm,{value:this.$props.value,check:v(this,fi,Khe).bind(this),onCheck:null});new al}get checked(){return h(this,nu).call(this)}onSetup(){this.setAttributes({value:this.$props.value,"data-checked":h(this,nu),"aria-checked":ni(h(this,nu))})}onAttach(t){const r=Cu(Au);rr(t,"tabindex",r?"-1":"0"),rr(t,"role",r?"menuitemradio":"radio"),me(v(this,fi,Whe).bind(this))}onConnect(t){v(this,fi,Uhe).call(this),gh(t,v(this,fi,Ghe).bind(this)),Qt(v(this,fi,qhe).bind(this))}}nu=new WeakMap,Mm=new WeakMap,fi=new WeakSet,qhe=function(){ns(()=>{Ur(AT).remove(h(this,Mm))},this.connectScope)},Uhe=function(){Ur(AT).add(h(this,Mm))},Whe=function(){var s,i;const{value:t}=this.$props,r=t();Re(h(this,nu))&&((i=(s=h(this,Mm)).onCheck)==null||i.call(s,r))},Ghe=function(t){var r,s;Re(h(this,nu))||(v(this,fi,WR).call(this,!0,t),v(this,fi,Yhe).call(this,t),(s=(r=h(this,Mm)).onCheck)==null||s.call(r,Re(this.$props.value),t))},Khe=function(t,r){Re(h(this,nu))!==t&&v(this,fi,WR).call(this,t,r)},WR=function(t,r){h(this,nu).set(t),this.dispatch("change",{detail:t,trigger:r})},Yhe=function(t){this.dispatch("select",{trigger:t})},G(MT,"props",{value:""});const Dke=MT.prototype;nr(Dke,"checked");let Rke=(rD=class extends un{constructor(){super(...arguments);N(this,Yi);N(this,oa);N(this,sv,null);N(this,ru,0);N(this,Aw,-1)}onSetup(){M(this,oa,or());const{event:t,action:r}=this.$props;this.setAttributes({event:t,action:r})}onAttach(t){t.setAttribute("data-media-gesture",""),t.style.setProperty("pointer-events","none")}onConnect(t){var r;M(this,sv,(r=h(this,oa).player.el)==null?void 0:r.querySelector("[data-media-provider]")),me(v(this,Yi,Zhe).bind(this))}},oa=new WeakMap,sv=new WeakMap,Yi=new WeakSet,Zhe=function(){let t=this.$props.event(),r=this.$props.disabled();!h(this,sv)||!t||r||(/^dbl/.test(t)&&(t=t.split(/^dbl/)[1]),(t==="pointerup"||t==="pointerdown")&&h(this,oa).$state.pointer()==="coarse"&&(t=t==="pointerup"?"touchend":"touchstart"),Rn(h(this,sv),t,v(this,Yi,Xhe).bind(this),{passive:!1}))},ru=new WeakMap,Aw=new WeakMap,Xhe=function(t){if(this.$props.disabled()||P_(t)&&(t.button!==0||h(this,oa).activeMenu)||d2(t)&&h(this,oa).activeMenu||oT(t)||!v(this,Yi,Jhe).call(this,t))return;t.MEDIA_GESTURE=!0,t.preventDefault();const r=Re(this.$props.event);if(!(r==null?void 0:r.startsWith("dbl")))h(this,ru)===0&&setTimeout(()=>{h(this,ru)===1&&v(this,Yi,GR).call(this,t)},250);else if(h(this,ru)===1){queueMicrotask(()=>v(this,Yi,GR).call(this,t)),clearTimeout(h(this,Aw)),M(this,ru,0);return}h(this,ru)===0&&M(this,Aw,window.setTimeout(()=>{M(this,ru,0)},275)),Aoe(this,ru)._++},GR=function(t){this.el.setAttribute("data-triggered",""),requestAnimationFrame(()=>{v(this,Yi,Qhe).call(this)&&v(this,Yi,efe).call(this,Re(this.$props.action),t),requestAnimationFrame(()=>{this.el.removeAttribute("data-triggered")})})},Jhe=function(t){if(!this.el)return!1;if(P_(t)||XU(t)||d2(t)){const r=d2(t)?t.changedTouches[0]??t.touches[0]:void 0,s=(r==null?void 0:r.clientX)??t.clientX,i=(r==null?void 0:r.clientY)??t.clientY,o=this.el.getBoundingClientRect(),a=i>=o.top&&i<=o.bottom&&s>=o.left&&s<=o.right;return t.type.includes("leave")?!a:a}return!0},Qhe=function(){const t=h(this,oa).player.el.querySelectorAll("[data-media-gesture][data-triggered]");return Array.from(t).sort((r,s)=>+getComputedStyle(s).zIndex-+getComputedStyle(r).zIndex)[0]===this.el},efe=function(t,r){if(!t)return;const s=new tn("will-trigger",{detail:t,cancelable:!0,trigger:r});if(this.dispatchEvent(s),s.defaultPrevented)return;const[i,o]=t.replace(/:([a-z])/,"-$1").split(":");t.includes(":fullscreen")?h(this,oa).remote.toggleFullscreen("prefer-media",r):t.includes("seek:")?h(this,oa).remote.seek(Re(h(this,oa).$state.currentTime)+(+o||0),r):h(this,oa).remote[$_(i)](r),this.dispatch("trigger",{detail:t,trigger:r})},G(rD,"props",{disabled:!1,event:void 0,action:void 0}),rD);class $ke{constructor(e){N(this,Nw);G(this,"priority",10);N(this,iv,null);N(this,Pd);N(this,Id);M(this,Pd,e)}attach(){}canRender(){return!0}detach(){var e;(e=h(this,Id))==null||e.abort(),M(this,Id,void 0),h(this,Pd).reset(),M(this,iv,null)}changeTrack(e){var t;!e||h(this,iv)===e||((t=h(this,Id))==null||t.abort(),M(this,Id,new $n(e)),e.readyState<2?(h(this,Pd).reset(),h(this,Id).add("load",()=>v(this,Nw,KR).call(this,e),{once:!0})):v(this,Nw,KR).call(this,e),h(this,Id).add("add-cue",r=>{h(this,Pd).addCue(r.detail)}).add("remove-cue",r=>{h(this,Pd).removeCue(r.detail)}),M(this,iv,e))}}iv=new WeakMap,Pd=new WeakMap,Id=new WeakMap,Nw=new WeakSet,KR=function(e){h(this,Pd).changeTrack({cues:[...e.cues],regions:[...e.regions]})};let Lke=(aa=class extends un{constructor(){super(...arguments);N(this,sn);N(this,wo);N(this,Dd,-1)}onSetup(){M(this,wo,or()),this.setAttributes({"aria-hidden":ni(v(this,sn,oC).bind(this))})}onAttach(t){t.style.setProperty("pointer-events","none")}onConnect(t){aa.lib()||Promise.resolve().then(()=>i8).then(r=>aa.lib.set(r)),me(v(this,sn,tfe).bind(this))}},wo=new WeakMap,sn=new WeakSet,oC=function(){const{textTrack:t,remotePlaybackState:r,iOSControls:s}=h(this,wo).$state,i=t();return s()||r()==="connected"||!i||!Oi(i)},tfe=function(){if(!aa.lib())return;const{viewType:t}=h(this,wo).$state;return t()==="audio"?v(this,sn,nfe).call(this):v(this,sn,ife).call(this)},nfe=function(){return me(v(this,sn,rfe).bind(this)),v(this,sn,ZR).call(this,null),()=>{this.el.textContent=""}},rfe=function(){if(v(this,sn,oC).call(this))return;v(this,sn,YR).call(this);const{textTrack:t}=h(this,wo).$state;Rn(t(),"cue-change",v(this,sn,YR).bind(this)),me(v(this,sn,sfe).bind(this))},YR=function(){this.el.textContent="",h(this,Dd)>=0&&v(this,sn,aC).call(this);const{realCurrentTime:t,textTrack:r}=h(this,wo).$state,{renderVTTCueString:s}=aa.lib(),i=Re(t),o=Re(r).activeCues;for(const a of o){const l=v(this,sn,JR).call(this),c=v(this,sn,QR).call(this);c.innerHTML=s(a,i),l.append(c),this.el.append(c)}},sfe=function(){const{realCurrentTime:t}=h(this,wo).$state,{updateTimedVTTCueNodes:r}=aa.lib();r(this.el,t())},ife=function(){const{CaptionsRenderer:t}=aa.lib(),r=new t(this.el),s=new $ke(r);return h(this,wo).textRenderers.add(s),me(v(this,sn,ofe).bind(this,r)),me(v(this,sn,afe).bind(this,r)),v(this,sn,ZR).call(this,r),()=>{this.el.textContent="",h(this,wo).textRenderers.remove(s),r.destroy()}},ofe=function(t){t.dir=this.$props.textDir()},afe=function(t){var i;if(v(this,sn,oC).call(this))return;const{realCurrentTime:r,textTrack:s}=h(this,wo).$state;t.currentTime=r(),h(this,Dd)>=0&&((i=s())!=null&&i.activeCues[0])&&v(this,sn,aC).call(this)},ZR=function(t){const r=h(this,wo).player;if(!r)return;const s=v(this,sn,lfe).bind(this,t);Rn(r,"vds-font-change",s)},lfe=function(t){var s;if(h(this,Dd)>=0){v(this,sn,XR).call(this);return}const{textTrack:r}=h(this,wo).$state;(s=r())!=null&&s.activeCues[0]?t==null||t.update(!0):v(this,sn,cfe).call(this)},cfe=function(){var s,i;const t=v(this,sn,JR).call(this);Rt(t,"data-example","");const r=v(this,sn,QR).call(this);Rt(r,"data-example",""),r.textContent=this.$props.exampleText(),t==null||t.append(r),(s=this.el)==null||s.append(t),(i=this.el)==null||i.setAttribute("data-example",""),v(this,sn,XR).call(this)},Dd=new WeakMap,XR=function(){window.clearTimeout(h(this,Dd)),M(this,Dd,window.setTimeout(v(this,sn,aC).bind(this),2500))},aC=function(){var t,r;(t=this.el)==null||t.removeAttribute("data-example"),(r=this.el)!=null&&r.querySelector("[data-example]")&&(this.el.textContent=""),M(this,Dd,-1)},JR=function(){const t=document.createElement("div");return Rt(t,"data-part","cue-display"),t},QR=function(){const t=document.createElement("div");return Rt(t,"data-part","cue"),t},G(aa,"props",{textDir:"ltr",exampleText:"Captions look like this."}),G(aa,"lib",bt(null)),aa),Fke=($8=class extends un{constructor(){super(...arguments);N(this,cr);N(this,La);N(this,Mw,"")}onSetup(){M(this,La,or()),v(this,cr,n$).call(this),v(this,cr,r$).call(this),v(this,cr,s$).call(this),v(this,cr,t$).call(this)}onAttach(t){t.style.setProperty("pointer-events","none"),me(v(this,cr,hfe).bind(this)),me(v(this,cr,n$).bind(this)),me(v(this,cr,r$).bind(this)),me(v(this,cr,s$).bind(this)),me(v(this,cr,t$).bind(this));const{started:r}=h(this,La).$state;this.setAttributes({"data-visible":()=>!r()&&!this.$state.hidden(),"data-loading":v(this,cr,dfe).bind(this),"data-error":v(this,cr,e$).bind(this),"data-hidden":this.$state.hidden})}onConnect(t){me(v(this,cr,ufe).bind(this)),me(v(this,cr,ffe).bind(this))}},La=new WeakMap,cr=new WeakSet,e$=function(){const{error:t}=this.$state;return!ol(t())},ufe=function(){const{canLoadPoster:t,poster:r}=h(this,La).$state;!t()&&r()&&Eu(r(),"preconnect")},t$=function(){const{src:t}=this.$props,{poster:r,nativeControls:s}=h(this,La).$state;this.el&&Rt(this.el,"display",s()?"none":null),this.$state.hidden.set(v(this,cr,e$).call(this)||!(t()||r())||s())},dfe=function(){const{loading:t,hidden:r}=this.$state;return!r()&&t()},hfe=function(){const t=this.$state.img();t&&(new $n(t).add("load",v(this,cr,i$).bind(this)).add("error",v(this,cr,pfe).bind(this)),t.complete&&v(this,cr,i$).call(this))},Mw=new WeakMap,n$=function(){const{poster:t}=h(this,La).$props,{canLoadPoster:r,providedPoster:s,inferredPoster:i}=h(this,La).$state,o=this.$props.src()||"",a=o||t()||i();h(this,Mw)===s()&&s.set(o),this.$state.src.set(r()&&a.length?a:null),M(this,Mw,o)},r$=function(){const{src:t}=this.$props,{alt:r}=this.$state,{poster:s}=h(this,La).$state;r.set(t()||s()?this.$props.alt():null)},s$=function(){const{crossOrigin:t}=this.$props,{crossOrigin:r}=this.$state,{crossOrigin:s,poster:i}=h(this,La).$state,o=t()!==null?t():s();r.set(/ytimg\.com|vimeo/.test(i()||"")?null:o===!0?"anonymous":o)},ffe=function(){const{loading:t,error:r}=this.$state,{canLoadPoster:s,poster:i}=h(this,La).$state;t.set(s()&&!!i()),r.set(null)},i$=function(){const{loading:t,error:r}=this.$state;t.set(!1),r.set(null)},pfe=function(t){const{loading:r,error:s}=this.$state;r.set(!1),s.set(t)},G($8,"props",{src:null,alt:null,crossOrigin:null}),G($8,"state",new Su({img:null,src:null,alt:null,crossOrigin:null,loading:!0,error:null,hidden:!1})),$8),jke=(L8=class extends un{constructor(){super(...arguments);N(this,Ts);N(this,ov);N(this,Wf,bt(null));N(this,Ow,bt(!0));N(this,Pw,bt(!0))}onSetup(){M(this,ov,or()),v(this,Ts,o$).call(this);const{type:t}=this.$props;this.setAttributes({"data-type":t,"data-remainder":v(this,Ts,a$).bind(this)}),new AG({callback:v(this,Ts,mfe).bind(this)}).attach(this)}onAttach(t){t.hasAttribute("role")||me(v(this,Ts,vfe).bind(this)),me(v(this,Ts,o$).bind(this))}onConnect(t){Qt(ZW(t,h(this,Ow).set)),me(v(this,Ts,gfe).bind(this)),me(v(this,Ts,yfe).bind(this))}},ov=new WeakMap,Wf=new WeakMap,Ow=new WeakMap,Pw=new WeakMap,Ts=new WeakSet,mfe=function(t){h(this,Pw).set(t[0].isIntersecting)},gfe=function(){const{hidden:t}=this.$props;this.$state.hidden.set(t()||!h(this,Ow).call(this)||!h(this,Pw).call(this))},yfe=function(){if(!this.$props.toggle()){h(this,Wf).set(null);return}this.el&&gh(this.el,v(this,Ts,wfe).bind(this))},o$=function(){const{hidden:t,timeText:r}=this.$state,{duration:s}=h(this,ov).$state;if(t())return;const{type:i,padHours:o,padMinutes:a,showHours:l}=this.$props,c=v(this,Ts,bfe).call(this,i()),u=s(),d=v(this,Ts,a$).call(this);if(!Number.isFinite(c+u)){r.set("LIVE");return}const f=d?Math.max(0,u-c):c,p=q5(f,{padHrs:o(),padMins:a(),showHrs:l()});r.set((d?"-":"")+p)},vfe=function(){if(!this.el)return;const{toggle:t}=this.$props;Rt(this.el,"role",t()?"timer":null),Rt(this.el,"tabindex",t()?0:null)},bfe=function(t){const{bufferedEnd:r,duration:s,currentTime:i}=h(this,ov).$state;switch(t){case"buffered":return r();case"duration":return s();default:return i()}},a$=function(){return this.$props.remainder()&&h(this,Wf).call(this)!==!1},wfe=function(t){if(t.preventDefault(),h(this,Wf).call(this)===null){h(this,Wf).set(!this.$props.remainder());return}h(this,Wf).set(r=>!r)},G(L8,"props",{type:"current",showHours:!1,padHours:null,padMinutes:null,remainder:!1,toggle:!1,hidden:!1}),G(L8,"state",new Su({timeText:"",hidden:!1})),L8);class DG extends gG{}class Bke extends xG{}class Vke extends rke{}class zke extends kG{}class Hke extends ske{}class qke extends _G{}class Uke extends dke{}class Wke extends hke{}class Gke extends gke{}class Kke extends fke{}class Yke extends pke{}class Zke extends uke{}class Xke extends lke{}class Jke extends cke{}class Qke extends mke{}class e9e extends SG{}class t9e extends oke{}class n9e extends EG{}class RG extends Kp{}class r9e extends Z5{}class s9e extends kT{}class i9e extends CT{}class o9e extends ST{}class a9e extends ET{}class l9e extends wke{}class c9e extends xT{}class u9e extends Y5{}class d9e extends MG{}class h9e extends _T{}class f9e extends t1{}class p9e extends J5{}class m9e extends OG{}class g9e extends Ike{}class y9e extends NT{}class v9e extends MT{}class b9e extends Lke{}class w9e extends Rke{}class x9e extends Fke{}class $G extends NG{}class k9e extends jke{}const LG=g.forwardRef((n,e)=>{const{children:t,...r}=n,s=g.Children.toArray(t),i=s.find(S9e);if(i){const o=i.props.children,a=s.map(l=>l===i?g.Children.count(o)>1?g.Children.only(null):g.isValidElement(o)?o.props.children:null:l);return g.createElement(OT,{...r,ref:e},g.isValidElement(o)?g.cloneElement(o,void 0,a):null)}return g.createElement(OT,{...r,ref:e},t)});LG.displayName="Slot";const OT=g.forwardRef((n,e)=>{const{children:t,...r}=n;return g.isValidElement(t)?g.cloneElement(t,{...E9e(r,t.props),ref:e?Qn(e,t.ref):t.ref}):g.Children.count(t)>1?g.Children.only(null):null});OT.displayName="SlotClone";const C9e=({children:n})=>g.createElement(g.Fragment,null,n);function S9e(n){return g.isValidElement(n)&&n.type===C9e}function E9e(n,e){const t={...e};for(const r in e){const s=n[r],i=e[r];/^on[A-Z]/.test(r)?s&&i?t[r]=(...a)=>{i(...a),s(...a)}:s&&(t[r]=s):r==="style"?t[r]={...s,...i}:r==="className"&&(t[r]=[s,i].filter(Boolean).join(" "))}return{...n,...t}}const Ot=["button","div","span","img","video","audio"].reduce((n,e)=>{const t=g.forwardRef((r,s)=>{const{asChild:i,...o}=r,a=i?LG:e;return g.createElement(a,{...o,ref:s})});return t.displayName=`Primitive.${e}`,{...n,[e]:t}},{});function _9e(n){return(n==null?void 0:n.$$PROVIDER_TYPE)==="REMOTION"}function FG(n){return(n==null?void 0:n.type)==="video/remotion"}const jG=RG.state.record,T9e=Object.keys(jG).reduce((n,e)=>({...n,[e](){return jG[e]}}),{});function PT(n,e){const t=Jg(Gp);return dn((t||T9e)[n])}const BG=DG.state.record,A9e=Object.keys(BG).reduce((n,e)=>({...n,[e](){return BG[e]}}),{});function Gt(n,e){const t=Jg(v2);return dn((t||A9e)[n])}function ic(){return L_(b2)}const N9e=hn(Xke,{domEventsRegex:/^onMedia/}),VG=g.forwardRef(({children:n,...e},t)=>g.createElement(N9e,{...e},r=>g.createElement(Ot.button,{...r,ref:Qn(r.ref,t)},n)));VG.displayName="AirPlayButton";const M9e=hn(Zke,{domEventsRegex:/^onMedia/}),zG=g.forwardRef(({children:n,...e},t)=>g.createElement(M9e,{...e},r=>g.createElement(Ot.button,{...r,ref:Qn(r.ref,t)},n)));zG.displayName="PlayButton";const O9e=hn(Uke,{domEventsRegex:/^onMedia/}),HG=g.forwardRef(({children:n,...e},t)=>g.createElement(O9e,{...e},r=>g.createElement(Ot.button,{...r,ref:Qn(r.ref,t)},n)));HG.displayName="CaptionButton";const P9e=hn(Wke,{domEventsRegex:/^onMedia/}),qG=g.forwardRef(({children:n,...e},t)=>g.createElement(P9e,{...e},r=>g.createElement(Ot.button,{...r,ref:Qn(r.ref,t)},n)));qG.displayName="FullscreenButton";const I9e=hn(Kke,{domEventsRegex:/^onMedia/}),UG=g.forwardRef(({children:n,...e},t)=>g.createElement(I9e,{...e},r=>g.createElement(Ot.button,{...r,ref:Qn(r.ref,t)},n)));UG.displayName="MuteButton";const D9e=hn(Yke,{domEventsRegex:/^onMedia/}),WG=g.forwardRef(({children:n,...e},t)=>g.createElement(D9e,{...e},r=>g.createElement(Ot.button,{...r,ref:Qn(r.ref,t)},n)));WG.displayName="PIPButton";const R9e=hn(Qke,{domEventsRegex:/^onMedia/}),GG=g.forwardRef(({children:n,...e},t)=>g.createElement(R9e,{...e},r=>g.createElement(Ot.button,{...r,ref:Qn(r.ref,t)},n)));GG.displayName="SeekButton";const $9e=hn(Gke,{domEventsRegex:/^onMedia/}),KG=g.forwardRef(({children:n,...e},t)=>g.createElement($9e,{...e},r=>g.createElement(Ot.button,{...r,ref:Qn(r.ref,t)},n)));KG.displayName="LiveButton";const n1=["onDragStart","onDragEnd","onDragValueChange","onValueChange","onPointerValueChange"],L9e=hn(c9e),F9e=hn(RG,{events:n1}),YG=g.forwardRef(({children:n,...e},t)=>g.createElement(F9e,{...e,ref:t},r=>g.createElement(Ot.div,{...r},n)));YG.displayName="Slider";const Q5=g.forwardRef((n,e)=>g.createElement(Ot.div,{...n,ref:e}));Q5.displayName="SliderThumb";const e7=g.forwardRef((n,e)=>g.createElement(Ot.div,{...n,ref:e}));e7.displayName="SliderTrack";const t7=g.forwardRef((n,e)=>g.createElement(Ot.div,{...n,ref:e}));t7.displayName="SliderTrackFill";const j9e=hn(d9e),IT=g.forwardRef(({children:n,...e},t)=>g.createElement(j9e,{...e},r=>g.createElement(Ot.div,{...r,ref:Qn(r.ref,t)},n)));IT.displayName="SliderPreview";const DT=g.forwardRef(({children:n,...e},t)=>g.createElement(L9e,{...e},(r,s)=>{const i=dn(()=>s.getValueText(),s);return g.createElement(Ot.div,{...r,ref:t},i,n)}));DT.displayName="SliderValue";const ZG=g.forwardRef(({children:n,...e},t)=>{const r=PT("min"),s=PT("max"),i=PT("step"),o=(s-r)/i;return g.createElement(Ot.div,{...e,ref:t},Array.from({length:Math.floor(o)+1}).map((a,l)=>n(l)))});ZG.displayName="SliderSteps";const B9e=hn(s9e,{events:n1,domEventsRegex:/^onMedia/}),XG=g.forwardRef(({children:n,...e},t)=>g.createElement(B9e,{...e,ref:t},r=>g.createElement(Ot.div,{...r},n)));XG.displayName="VolumeSlider";function V9e(n=0,e=0,t=""){return st?{startTime:n,endTime:e,text:t,addEventListener:$o,removeEventListener:$o,dispatchEvent:$o}:new window.VTTCue(n,e,t)}function z9e(n,e){const t=new URL(n);for(const r of Object.keys(e))t.searchParams.set(r,e[r]+"");return t.toString()}const H9e=hn($G),JG=g.forwardRef(({children:n,...e},t)=>g.createElement(H9e,{...e},r=>g.createElement(Ot.div,{...r,ref:Qn(r.ref,t)},n)));JG.displayName="Thumbnail";const RT=g.forwardRef(({children:n,...e},t)=>{const{src:r,img:s,crossOrigin:i}=Jg($G.state),o=dn(r),a=dn(i);return g.createElement(Ot.img,{crossOrigin:a,...e,src:o||void 0,ref:Qn(s.set,t)},n)});RT.displayName="ThumbnailImg";const n7=g.createContext({$chapters:bt(null)});n7.displayName="TimeSliderContext";const q9e=hn(r9e,{events:n1,domEventsRegex:/^onMedia/}),QG=g.forwardRef(({children:n,...e},t)=>{const r=g.useMemo(()=>bt(null),[]);return g.createElement(n7.Provider,{value:{$chapters:r}},g.createElement(q9e,{...e,ref:t},s=>g.createElement(Ot.div,{...s},n)))});QG.displayName="TimeSlider";const U9e=hn(h9e),eK=g.forwardRef(({children:n,...e},t)=>g.createElement(U9e,{...e},(r,s)=>g.createElement(Ot.div,{...r,ref:Qn(r.ref,t)},g.createElement(tK,{instance:s},n))));eK.displayName="SliderChapters";function tK({instance:n,children:e}){const t=dn(()=>n.cues,n),r=g.useRef([]),s=g.useRef(null),{$chapters:i}=g.useContext(n7);return s.current||(s.current=V9e()),g.useEffect(()=>(i.set(n),()=>void i.set(null)),[n]),g.useEffect(()=>{n.setRefs(r.current)},[t]),e(t.length?t:[s.current],o=>{if(!o){r.current.length=0;return}r.current.push(o)})}tK.displayName="SliderChapterTracks";const nK=g.forwardRef(({children:n,...e},t)=>{const{$chapters:r}=g.useContext(n7),[s,i]=g.useState();return g.useEffect(()=>me(()=>{const o=r(),a=(o==null?void 0:o.activePointerCue)||(o==null?void 0:o.activeCue);i((a==null?void 0:a.text)||"")}),[]),g.createElement(Ot.div,{...e,ref:t},s,n)});nK.displayName="SliderChapterTitle";const rK=g.forwardRef((n,e)=>g.createElement(Ot.div,{...n,ref:e}));rK.displayName="SliderProgress";const W9e=hn(l9e),sK=g.forwardRef(({children:n,...e},t)=>g.createElement(W9e,{...e},r=>g.createElement(Ot.div,{...r,ref:Qn(r.ref,t)},n)));sK.displayName="SliderThumbnail";const iK={Root:sK,Img:RT},G9e=hn(u9e,{events:["onCanPlay","onError"]}),K9e=g.forwardRef(({children:n,...e},t)=>g.createElement(G9e,{...e},(r,s)=>g.createElement(oK,{...r,instance:s,ref:Qn(r.ref,t)},n)));K9e.displayName="SliderVideo";const oK=g.forwardRef(({instance:n,children:e,...t},r)=>{const{canLoad:s}=Jg(v2),{src:i,video:o,crossOrigin:a}=n.$state,l=dn(i),c=dn(s),u=dn(a);return g.createElement(Ot.video,{style:{maxWidth:"unset"},...t,src:l||void 0,muted:!0,playsInline:!0,preload:c?"auto":"none",crossOrigin:u||void 0,ref:Qn(o.set,r)},e)});oK.displayName="SliderVideoProvider";const Y9e=hn(y9e,{events:["onChange"]}),_2=g.forwardRef(({children:n,...e},t)=>g.createElement(Y9e,{...e,ref:t},r=>g.createElement(Ot.div,{...r},n)));_2.displayName="RadioGroup";const Z9e=hn(v9e,{events:["onChange","onSelect"]}),T2=g.forwardRef(({children:n,...e},t)=>g.createElement(Z9e,{...e},r=>g.createElement(Ot.div,{...r,ref:Qn(r.ref,t)},n)));T2.displayName="RadioItem";const X9e=hn(f9e,{events:["onOpen","onClose"],domEventsRegex:/^onMedia/}),oc=g.forwardRef(({children:n,...e},t)=>g.createElement(X9e,{...e,ref:t},(r,s)=>g.createElement(Ot.div,{...r,style:{display:s.isSubmenu?void 0:"contents",...r.style}},n)));oc.displayName="Menu";const J9e=hn(p9e,{events:["onSelect"]}),r7=g.forwardRef(({children:n,...e},t)=>g.createElement(J9e,{...e},r=>g.createElement(Ot.button,{...r,ref:Qn(r.ref,t)},n)));r7.displayName="MenuButton";const $T=g.forwardRef(({container:n=null,disabled:e=!1,children:t,...r},s)=>{let i=Gt("fullscreen"),o=e==="fullscreen"?!i:!e;const a=g.useMemo(()=>st?null:(ut(n)?document.querySelector(n):n)??document.body,[n]);return!a||!o?t:Qv.createPortal(g.createElement(Ot.div,{...r,style:{display:"contents",...r.style},ref:s},t),a)});$T.displayName="MenuPortal";const Q9e=hn(m9e),ac=g.forwardRef(({children:n,...e},t)=>g.createElement(Q9e,{...e},r=>g.createElement(Ot.div,{...r,ref:Qn(r.ref,t)},n)));ac.displayName="MenuItems";const e8e=hn(g9e),t8e=g.forwardRef(({children:n,...e},t)=>g.createElement(e8e,{...e},r=>g.createElement(Ot.div,{...r,ref:Qn(r.ref,t)},n)));t8e.displayName="MenuItem";const n8e=hn(w9e,{events:["onWillTrigger","onTrigger"]}),r1=g.forwardRef(({children:n,...e},t)=>g.createElement(n8e,{...e,ref:t},r=>g.createElement(Ot.div,{...r},n)));r1.displayName="Gesture";const r8e=hn(k9e),A2=g.forwardRef(({children:n,...e},t)=>g.createElement(r8e,{...e},(r,s)=>g.createElement(aK,{...r,instance:s,ref:Qn(r.ref,t)},n)));A2.displayName="Time";const aK=g.forwardRef(({instance:n,children:e,...t},r)=>{const{timeText:s}=n.$state,i=dn(s);return g.createElement(Ot.div,{...t,ref:r},i,e)});aK.displayName="TimeText";function lK(){const n=ic();return(n==null?void 0:n.player)||null}function s8e(){const n=ic(),{audioTracks:e,audioTrack:t}=n.$state,r=dn(e);return dn(t),g.useMemo(()=>{const s=r.map(i=>({track:i,label:i.label,value:cK(i),get selected(){return t()===i},select(o){const a=e().indexOf(i);a>=0&&n.remote.changeAudioTrack(a,o)}}));return Object.defineProperty(s,"disabled",{get(){return s.length<=1}}),Object.defineProperty(s,"selectedTrack",{get(){return t()}}),Object.defineProperty(s,"selectedValue",{get(){const i=t();return i?cK(i):void 0}}),s},[r])}function cK(n){return n.label.toLowerCase()}function i8e({off:n=!0}={}){const e=ic(),{textTracks:t,textTrack:r}=e.$state,s=dn(t);return dn(r),g.useMemo(()=>{const i=s.filter(Oi),o=i.map(a=>({track:a,label:a.label,value:uK(a),get selected(){return r()===a},select(l){const c=t().indexOf(a);c>=0&&e.remote.changeTextTrackMode(c,"showing",l)}}));return n&&o.unshift({track:null,label:ut(n)?n:"Off",value:"off",get selected(){return!r()},select(a){e.remote.toggleCaptions(a)}}),Object.defineProperty(o,"disabled",{get(){return!i.length}}),Object.defineProperty(o,"selectedTrack",{get(){return r()}}),Object.defineProperty(o,"selectedValue",{get(){const a=r();return a?uK(a):"off"}}),o},[s])}function uK(n){return n.id+":"+n.kind+"-"+n.label.toLowerCase()}const o8e=hn(Vke,{events:["onChange"]}),dK=g.forwardRef(({style:n,children:e,...t},r)=>g.createElement(o8e,{...t},s=>g.createElement(Ot.div,{...s,style:{display:"contents",...n},ref:Qn(s.ref,r)},e)));dK.displayName="MediaAnnouncer";const a8e=hn(zke),s7=g.forwardRef(({children:n,...e},t)=>g.createElement(a8e,{...e},r=>g.createElement(Ot.div,{...r,ref:Qn(r.ref,t)},n)));s7.displayName="Controls";const l8e=hn(Hke),lc=g.forwardRef(({children:n,...e},t)=>g.createElement(l8e,{...e},r=>g.createElement(Ot.div,{...r,ref:Qn(r.ref,t)},n)));lc.displayName="ControlsGroup";const c8e=hn(e9e);function hK({children:n,...e}){return g.createElement(c8e,{...e},n)}hK.displayName="Tooltip";const u8e=hn(t9e),fK=g.forwardRef(({children:n,...e},t)=>g.createElement(u8e,{...e},r=>g.createElement(Ot.button,{...r,ref:Qn(r.ref,t)},n)));fK.displayName="TooltipTrigger";const d8e=hn(n9e),pK=g.forwardRef(({children:n,...e},t)=>g.createElement(d8e,{...e},r=>g.createElement(Ot.div,{...r,ref:Qn(r.ref,t)},n)));pK.displayName="TooltipContent";const h8e=hn(Jke,{domEventsRegex:/^onMedia/}),mK=g.forwardRef(({children:n,...e},t)=>g.createElement(h8e,{...e},r=>g.createElement(Ot.button,{...r,ref:Qn(r.ref,t)},n)));mK.displayName="GoogleCastButton";const f8e=hn(a9e,{events:n1,domEventsRegex:/^onMedia/}),gK=g.forwardRef(({children:n,...e},t)=>g.createElement(f8e,{...e,ref:t},r=>g.createElement(Ot.div,{...r},n)));gK.displayName="QualitySlider";const p8e=hn(i9e,{events:n1,domEventsRegex:/^onMedia/}),yK=g.forwardRef(({children:n,...e},t)=>g.createElement(p8e,{...e,ref:t},r=>g.createElement(Ot.div,{...r},n)));yK.displayName="AudioGainSlider";const m8e=hn(o9e,{events:n1,domEventsRegex:/^onMedia/}),vK=g.forwardRef(({children:n,...e},t)=>g.createElement(m8e,{...e,ref:t},r=>g.createElement(Ot.div,{...r},n)));vK.displayName="SpeedSlider";const bK=g.forwardRef(({children:n,...e},t)=>{const r=Gt("title");return g.createElement(Ot.span,{...e,ref:t},r,n)});bK.displayName="Title";function wK(n){const[e,t]=g.useState([]);return g.useEffect(()=>{if(!n){t([]);return}function r(){n&&t(n.activeCues)}return r(),Rn(n,"cue-change",r)},[n]),e}function LT(n){const e=ic(),[t,r]=g.useState(null);return g.useEffect(()=>nT(e.textTracks,n,r),[n]),t}function xK(){var t;const n=LT("chapters");return((t=wK(n)[0])==null?void 0:t.text)||""}const kK=g.forwardRef(({defaultText:n="",children:e,...t},r)=>{const s=xK();return g.createElement(Ot.span,{...t,ref:r},s||n,e)});kK.displayName="ChapterTitle";const g8e=hn(b9e),CK=g.forwardRef(({children:n,...e},t)=>g.createElement(g8e,{...e,ref:t},r=>g.createElement(Ot.div,{...r},n)));CK.displayName="Captions";const y8e=g.forwardRef(({size:n=96,children:e,...t},r)=>g.createElement("svg",{width:n,height:n,fill:"none",viewBox:"0 0 120 120","aria-hidden":"true","data-part":"root",...t,ref:r},e)),v8e=g.forwardRef(({width:n=8,children:e,...t},r)=>g.createElement("circle",{cx:"60",cy:"60",r:"54",stroke:"currentColor",strokeWidth:n,"data-part":"track",...t,ref:r},e)),b8e=g.forwardRef(({width:n=8,fillPercent:e=50,children:t,...r},s)=>g.createElement("circle",{cx:"60",cy:"60",r:"54",stroke:"currentColor",pathLength:"100",strokeWidth:n,strokeDasharray:100,strokeDashoffset:100-e,"data-part":"track-fill",...r,ref:s},t));function FT(n,e=[]){const t=Xg();return g.useMemo(()=>ns(()=>bt(n),t),[t,...e])}function i7(n,e=[]){const t=Xg();return g.useMemo(()=>ns(()=>xu(n),t),[t,...e])}function w8e(n,e=[]){const t=Xg();g.useEffect(()=>ns(()=>me(n),t),[t,...e])}function x8e(n){const e=Xg();return g.useMemo(()=>ns(n,e),[e])}function k8e(n){const[e,t]=g.useState([]);return g.useEffect(()=>{if(!n)return;function r(){n&&t([...n.cues])}const s=new $n(n).add("add-cue",r).add("remove-cue",r);return r(),()=>{t([]),s.abort()}},[n]),e}function C8e(){const n=ic(),e=LT("chapters"),t=k8e(e),r=dn(n.$state.seekableStart),s=dn(n.$state.seekableEnd);return wK(e),g.useMemo(()=>{const i=e?t.filter(o=>o.startTime<=s&&o.endTime>=r).map((o,a)=>{let l=null,c;return{cue:o,label:o.text,value:a.toString(),startTimeText:q5(Math.max(0,o.startTime-r)),durationText:U5(Math.min(s,o.endTime)-Math.max(r,o.startTime)),get selected(){return o===e.activeCues[0]},setProgressVar(u){if(!u||o!==e.activeCues[0]){c==null||c(),c=void 0,u==null||u.style.setProperty("--progress","0%"),l=null;return}l!==u&&(l=u,c==null||c(),c=me(()=>{const{realCurrentTime:d}=n.$state,f=d(),p=Math.max(r,o.startTime),m=Math.min(s,o.endTime)-p,y=Math.max(0,f-p)/m*100;u.style.setProperty("--progress",y.toFixed(3)+"%")}))},select(u){n.remote.seek(o.startTime-r,u)}}}):[];return Object.defineProperty(i,"selectedValue",{get(){const o=i.findIndex(a=>a.selected);return(o>=0?o:0).toString()}}),i},[t,r,s])}function SK(n,e){g.useEffect(()=>{if(!n)return;e();const t=new ResizeObserver(dh(e));return t.observe(n),()=>t.disconnect()},[n,e])}function S8e(n){const[e,t]=g.useState(!1);return g.useEffect(()=>{if(!n)return;const r=new $n(n).add("transitionstart",()=>t(!0)).add("transitionend",()=>t(!1));return()=>r.abort()},[n]),e}function E8e(n){const[e,t]=g.useState(!1);return g.useEffect(()=>{if(!n)return;const r=new $n(n).add("mouseenter",()=>t(!0)).add("mouseleave",()=>t(!1));return()=>r.abort()},[n]),e}function _8e(n){const[e,t]=g.useState(!1);return g.useEffect(()=>{if(!n)return;const r=new $n(n).add("focusin",()=>t(!0)).add("focusout",()=>t(!1));return()=>r.abort()},[n]),e}function T8e(n){const e=E8e(n),t=_8e(n),r=g.useRef(!1);return r.current&&!e?!1:(r.current=e,e||t)}function A8e(){const[n,e]=g.useState("dark");return g.useEffect(()=>{const t=window.matchMedia("(prefers-color-scheme: light)");function r(){e(t.matches?"light":"dark")}return r(),Rn(t,"change",r)},[]),n}function EK(n){const e=lK();g.useEffect(()=>{if(e)return me(()=>{const t=e.$el;return t==null||t.setAttribute("data-layout",n),()=>t==null?void 0:t.removeAttribute("data-layout")})},[e])}const N8e=bt(null),M8e=bt(null),s1=g.createContext({});s1.displayName="DefaultLayoutContext";function Kt(){return g.useContext(s1)}function Et(n){const{translations:e}=Kt();return jT(e,n)}function jT(n,e){return(n==null?void 0:n[e])??e}function BT(n){const e=A8e();return n==="default"?null:n==="system"?e:n}function _K({type:n,smLayoutWhen:e,renderLayout:t}){const r=g.forwardRef(({children:s,className:i,disableTimeSlider:o=!1,hideQualityBitrate:a=!1,icons:l,colorScheme:c="system",download:u=null,menuContainer:d=null,menuGroup:f="bottom",noAudioGain:p=!1,audioGains:m={min:0,max:300,step:25},noGestures:y=!1,noKeyboardAnimations:w=!1,noModal:k=!1,noScrubGesture:x,playbackRates:S={min:0,max:2,step:.25},seekStep:_=10,showMenuDelay:A,showTooltipDelay:T=700,sliderChaptersMinWidth:O=325,slots:I,smallLayoutWhen:R=e,thumbnails:D=null,translations:W,...H},re)=>{const ae=ic(),de=dn(ae.$props.load),le=Gt("canLoad"),X=Gt("viewType"),se=Gt("streamType"),J=i7(()=>zp(R)?R:R(ae.player.state),[R]),$=FT(!0),ve=FT(!0),Pe=X===n,q=J(),Xe=zp(R),qe=de==="play"&&!le,Ye=le||Xe||qe,it=BT(c),We=FT(null);return dn(J),g.createElement("div",{...H,className:`vds-${n}-layout`+(it?` ${it}`:"")+(i?` ${i}`:""),"data-match":Pe?"":null,"data-sm":q?"":null,"data-lg":q?null:"","data-size":q?"sm":"lg","data-no-scrub-gesture":x?"":null,ref:Qn(We.set,re)},Ye&&Pe?g.createElement(s1.Provider,{value:{disableTimeSlider:o,hideQualityBitrate:a,icons:l,colorScheme:c,download:u,isSmallLayout:q,menuContainer:d,menuGroup:f,noAudioGain:p,audioGains:m,layoutEl:We,noGestures:y,noKeyboardAnimations:w,noModal:k,noScrubGesture:x,showMenuDelay:A,showTooltipDelay:T,sliderChaptersMinWidth:O,slots:I,seekStep:_,playbackRates:S,thumbnails:D,translations:W,userPrefersAnnouncements:$,userPrefersKeyboardAnimations:ve}},t({streamType:se,isSmallLayout:q,isLoadLayout:qe}),s):null)});return r.displayName="DefaultMediaLayout",r}function TK(){return g.useContext(s1).slots}function VT(){return g.useContext(s1).slots}function et(n,e,t){const r=n==null?void 0:n[e],s=Zg(e);return g.createElement(g.Fragment,null,n==null?void 0:n[`before${s}`],Yr(r)?t:r,n==null?void 0:n[`after${s}`])}function o7(){const{userPrefersAnnouncements:n,translations:e}=Kt();return dn(n)?g.createElement(dK,{translations:e}):null}o7.displayName="DefaultAnnouncer";function ba({content:n,placement:e,children:t}){const{showTooltipDelay:r}=Kt();return g.createElement(hK,{showDelay:r},g.createElement(fK,{asChild:!0},t),g.createElement(pK,{className:"vds-tooltip-content",placement:e},n))}ba.displayName="DefaultTooltip";function N2({tooltip:n}){const{icons:e}=Kt(),t=Et("Play"),r=Et("Pause"),s=Gt("paused"),i=Gt("ended");return g.createElement(ba,{content:s?t:r,placement:n},g.createElement(zG,{className:"vds-play-button vds-button","aria-label":t},i?g.createElement(e.PlayButton.Replay,{className:"vds-icon"}):s?g.createElement(e.PlayButton.Play,{className:"vds-icon"}):g.createElement(e.PlayButton.Pause,{className:"vds-icon"})))}N2.displayName="DefaultPlayButton";const AK=g.forwardRef(({tooltip:n},e)=>{const{icons:t}=Kt(),r=Et("Mute"),s=Et("Unmute"),i=Gt("muted"),o=Gt("volume");return g.createElement(ba,{content:i?s:r,placement:n},g.createElement(UG,{className:"vds-mute-button vds-button","aria-label":r,ref:e},i||o==0?g.createElement(t.MuteButton.Mute,{className:"vds-icon"}):o<.5?g.createElement(t.MuteButton.VolumeLow,{className:"vds-icon"}):g.createElement(t.MuteButton.VolumeHigh,{className:"vds-icon"})))});AK.displayName="DefaultMuteButton";function a7({tooltip:n}){const{icons:e}=Kt(),t=Et("Captions"),r=Et("Closed-Captions On"),s=Et("Closed-Captions Off"),i=Gt("textTrack"),o=i&&Oi(i);return g.createElement(ba,{content:o?r:s,placement:n},g.createElement(HG,{className:"vds-caption-button vds-button","aria-label":t},o?g.createElement(e.CaptionButton.On,{className:"vds-icon"}):g.createElement(e.CaptionButton.Off,{className:"vds-icon"})))}a7.displayName="DefaultCaptionButton";function NK({tooltip:n}){const{icons:e}=Kt(),t=Et("PiP"),r=Et("Enter PiP"),s=Et("Exit PiP"),i=Gt("pictureInPicture");return g.createElement(ba,{content:i?s:r,placement:n},g.createElement(WG,{className:"vds-pip-button vds-button","aria-label":t},i?g.createElement(e.PIPButton.Exit,{className:"vds-icon"}):g.createElement(e.PIPButton.Enter,{className:"vds-icon"})))}NK.displayName="DefaultPIPButton";function zT({tooltip:n}){const{icons:e}=Kt(),t=Et("Fullscreen"),r=Et("Enter Fullscreen"),s=Et("Exit Fullscreen"),i=Gt("fullscreen");return g.createElement(ba,{content:i?s:r,placement:n},g.createElement(qG,{className:"vds-fullscreen-button vds-button","aria-label":t},i?g.createElement(e.FullscreenButton.Exit,{className:"vds-icon"}):g.createElement(e.FullscreenButton.Enter,{className:"vds-icon"})))}zT.displayName="DefaultFullscreenButton";function HT({backward:n,tooltip:e}){const{icons:t,seekStep:r}=Kt(),s=Et("Seek Forward"),i=Et("Seek Backward"),o=(n?-1:1)*r,a=o>=0?s:i;return g.createElement(ba,{content:a,placement:e},g.createElement(GG,{className:"vds-seek-button vds-button",seconds:o,"aria-label":a},o>=0?g.createElement(t.SeekButton.Forward,{className:"vds-icon"}):g.createElement(t.SeekButton.Backward,{className:"vds-icon"})))}HT.displayName="DefaultSeekButton";function qT({tooltip:n}){const{icons:e}=Kt(),t=Et("AirPlay"),r=Gt("remotePlaybackState"),s=Et(Zg(r)),i=`${t} ${s}`,o=(r==="connecting"?e.AirPlayButton.Connecting:r==="connected"?e.AirPlayButton.Connected:null)??e.AirPlayButton.Default;return g.createElement(ba,{content:t,placement:n},g.createElement(VG,{className:"vds-airplay-button vds-button","aria-label":i},g.createElement(o,{className:"vds-icon"})))}qT.displayName="DefaultAirPlayButton";function UT({tooltip:n}){const{icons:e}=Kt(),t=Et("Google Cast"),r=Gt("remotePlaybackState"),s=Et(Zg(r)),i=`${t} ${s}`,o=(r==="connecting"?e.GoogleCastButton.Connecting:r==="connected"?e.GoogleCastButton.Connected:null)??e.GoogleCastButton.Default;return g.createElement(ba,{content:t,placement:n},g.createElement(mK,{className:"vds-google-cast-button vds-button","aria-label":i},g.createElement(o,{className:"vds-icon"})))}UT.displayName="DefaultGoogleCastButton";function WT(){const n=Gt("live"),e=Et("Skip To Live"),t=Et("LIVE");return n?g.createElement(KG,{className:"vds-live-button","aria-label":e},g.createElement("span",{className:"vds-live-button-text"},t)):null}WT.displayName="DefaultLiveButton";function l7(){const{download:n,icons:e}=Kt(),t=Gt("source"),r=Gt("title"),s=v5e({title:r,src:t,download:n}),i=Et("Download");return ut(s==null?void 0:s.url)?g.createElement(ba,{content:i,placement:"top"},g.createElement("a",{role:"button",className:"vds-download-button vds-button","aria-label":i,href:z9e(s.url,{download:s.name}),download:s.name,target:"_blank"},e.DownloadButton?g.createElement(e.DownloadButton.Default,{className:"vds-icon"}):null)):null}l7.displayName="DefaultDownloadButton";function c7(){const n=Et("Captions look like this");return g.createElement(CK,{className:"vds-captions",exampleText:n})}c7.displayName="DefaultCaptions";function to(){return g.createElement("div",{className:"vds-controls-spacer"})}to.displayName="DefaultControlsSpacer";function MK(){const{layoutEl:n}=Kt(),e=dn(n);return g.useMemo(()=>e==null?void 0:e.closest("dialog"),[e])}function GT({tooltip:n,placement:e,portalClass:t=""}){const{showMenuDelay:r,noModal:s,isSmallLayout:i,icons:o,menuGroup:a,menuContainer:l,colorScheme:c}=Kt(),u=Et("Chapters"),d=C8e(),f=!d.length,{thumbnails:p}=Kt(),m=Gt("currentSrc"),y=Gt("viewType"),w=!i&&a==="bottom"&&y==="video"?26:0,k=dn(N8e),x=BT(c),[S,_]=g.useState(!1),A=MK();if(f)return null;function T(){Qv.flushSync(()=>{_(!0)})}function O(){_(!1)}const I=g.createElement(ac,{className:"vds-chapters-menu-items vds-menu-items",placement:e,offset:w},S?g.createElement(_2,{className:"vds-chapters-radio-group vds-radio-group",value:d.selectedValue,"data-thumbnails":p?"":null},d.map(({cue:R,label:D,value:W,startTimeText:H,durationText:re,select:ae,setProgressVar:de})=>g.createElement(T2,{className:"vds-chapter-radio vds-radio",value:W,key:W,onSelect:ae,ref:de},p?g.createElement(JG,{src:p,className:"vds-thumbnail",time:R.startTime},g.createElement(RT,null)):k&&FG(m)?g.createElement(k,{className:"vds-thumbnail",frame:R.startTime*m.fps}):null,g.createElement("div",{className:"vds-chapter-radio-content"},g.createElement("span",{className:"vds-chapter-radio-label"},D),g.createElement("span",{className:"vds-chapter-radio-start-time"},H),g.createElement("span",{className:"vds-chapter-radio-duration"},re))))):null);return g.createElement(oc,{className:"vds-chapters-menu vds-menu",showDelay:r,onOpen:T,onClose:O},g.createElement(ba,{content:u,placement:n},g.createElement(r7,{className:"vds-menu-button vds-button",disabled:f,"aria-label":u},g.createElement(o.Menu.Chapters,{className:"vds-icon"}))),s||!i?I:g.createElement($T,{container:l??A,className:t+(x?` ${x}`:""),disabled:"fullscreen","data-sm":i?"":null,"data-lg":i?null:"","data-size":i?"sm":"lg"},I))}GT.displayName="DefaultChaptersMenu";const KT={type:"color"},O8e={type:"radio",values:{"Monospaced Serif":"mono-serif","Proportional Serif":"pro-serif","Monospaced Sans-Serif":"mono-sans","Proportional Sans-Serif":"pro-sans",Casual:"casual",Cursive:"cursive","Small Capitals":"capitals"}},P8e={type:"slider",min:0,max:400,step:25,upIcon:null,downIcon:null},YT={type:"slider",min:0,max:100,step:5,upIcon:null,downIcon:null},I8e={type:"radio",values:["None","Drop Shadow","Raised","Depressed","Outline"]},u7={fontFamily:"pro-sans",fontSize:"100%",textColor:"#ffffff",textOpacity:"100%",textShadow:"none",textBg:"#000000",textBgOpacity:"100%",displayBg:"#000000",displayBgOpacity:"0%"},Yp=Object.keys(u7).reduce((n,e)=>({...n,[e]:bt(u7[e])}),{});if(!st)for(const n of Object.keys(Yp)){const e=localStorage.getItem(`vds-player:${sc(n)}`);ut(e)&&Yp[n].set(e)}function D8e(){for(const n of Object.keys(Yp)){const e=u7[n];Yp[n].set(e)}}function ZT(n){const{style:e}=new Option;return e.color=n,e.color.match(/\((.*?)\)/)[1].replace(/,/g," ")}let OK=!1,XT=new Set;function R8e(){if(st)return;const{player:n}=or();XT.add(n),Qt(()=>XT.delete(n)),OK||(ns(()=>{for(const e of A5(Yp)){const t=Yp[e],r=u7[e],s=`--media-user-${sc(e)}`,i=`vds-player:${sc(e)}`;me(()=>{var c;const o=t(),a=o===r,l=a?null:$8e(n,e,o);for(const u of XT)(c=u.el)==null||c.style.setProperty(s,l);a?localStorage.removeItem(i):localStorage.setItem(i,o)})}},null),OK=!0)}function $8e(n,e,t){var r;switch(e){case"fontFamily":const s=t==="capitals"?"small-caps":"";return(r=n.el)==null||r.style.setProperty("--media-user-font-variant",s),F8e(t);case"fontSize":case"textOpacity":case"textBgOpacity":case"displayBgOpacity":return L8e(t);case"textColor":return`rgb(${ZT(t)} / var(--media-user-text-opacity, 1))`;case"textShadow":return j8e(t);case"textBg":return`rgb(${ZT(t)} / var(--media-user-text-bg-opacity, 1))`;case"displayBg":return`rgb(${ZT(t)} / var(--media-user-display-bg-opacity, 1))`}}function L8e(n){return(parseInt(n)/100).toString()}function F8e(n){switch(n){case"mono-serif":return'"Courier New", Courier, "Nimbus Mono L", "Cutive Mono", monospace';case"mono-sans":return'"Deja Vu Sans Mono", "Lucida Console", Monaco, Consolas, "PT Mono", monospace';case"pro-sans":return'Roboto, "Arial Unicode Ms", Arial, Helvetica, Verdana, "PT Sans Caption", sans-serif';case"casual":return'"Comic Sans MS", Impact, Handlee, fantasy';case"cursive":return'"Monotype Corsiva", "URW Chancery L", "Apple Chancery", "Dancing Script", cursive';case"capitals":return'"Arial Unicode Ms", Arial, Helvetica, Verdana, "Marcellus SC", sans-serif + font-variant=small-caps';default:return'"Times New Roman", Times, Georgia, Cambria, "PT Serif Caption", serif'}}function j8e(n){switch(n){case"drop shadow":return"rgb(34, 34, 34) 1.86389px 1.86389px 2.79583px, rgb(34, 34, 34) 1.86389px 1.86389px 3.72778px, rgb(34, 34, 34) 1.86389px 1.86389px 4.65972px";case"raised":return"rgb(34, 34, 34) 1px 1px, rgb(34, 34, 34) 2px 2px";case"depressed":return"rgb(204, 204, 204) 1px 1px, rgb(34, 34, 34) -1px -1px";case"outline":return"rgb(34, 34, 34) 0px 0px 1.86389px, rgb(34, 34, 34) 0px 0px 1.86389px, rgb(34, 34, 34) 0px 0px 1.86389px, rgb(34, 34, 34) 0px 0px 1.86389px, rgb(34, 34, 34) 0px 0px 1.86389px";default:return""}}function wa({label:n,value:e,children:t}){const r=g.useId();return n?g.createElement("section",{className:"vds-menu-section",role:"group","aria-labelledby":r},g.createElement("div",{className:"vds-menu-section-title"},g.createElement("header",{id:r},n),e?g.createElement("div",{className:"vds-menu-section-value"},e):null),g.createElement("div",{className:"vds-menu-section-body"},t)):g.createElement("div",{className:"vds-menu-section"},g.createElement("div",{className:"vds-menu-section-body"},t))}wa.displayName="DefaultMenuSection";function yh({label:n,hint:e="",Icon:t,disabled:r=!1}){const{icons:s}=g.useContext(s1);return g.createElement(r7,{className:"vds-menu-item",disabled:r},g.createElement(s.Menu.ArrowLeft,{className:"vds-menu-close-icon vds-icon"}),t?g.createElement(t,{className:"vds-menu-item-icon vds-icon"}):null,g.createElement("span",{className:"vds-menu-item-label"},n),g.createElement("span",{className:"vds-menu-item-hint"},e),g.createElement(s.Menu.ArrowRight,{className:"vds-menu-open-icon vds-icon"}))}yh.displayName="DefaultMenuButton";function i1({label:n,children:e}){return g.createElement("div",{className:"vds-menu-item"},g.createElement("div",{className:"vds-menu-item-label"},n),e)}i1.displayName="DefaultMenuItem";function PK({value:n,options:e,onChange:t}){const{icons:r}=Kt();return g.createElement(_2,{className:"vds-radio-group",value:n,onChange:t},e.map(s=>g.createElement(T2,{className:"vds-radio",value:s.value,key:s.value},g.createElement(r.Menu.RadioCheck,{className:"vds-icon"}),g.createElement("span",{className:"vds-radio-label","data-part":"label"},s.label))))}PK.displayName="DefaultMenuRadioGroup";function B8e(n){return g.useMemo(()=>qr(n)?n.map(e=>({label:e,value:e.toLowerCase()})):Object.keys(n).map(e=>({label:e,value:n[e]})),[n])}function M2({label:n,value:e,UpIcon:t,DownIcon:r,children:s,isMin:i,isMax:o}){const a=n||e,l=g.createElement(g.Fragment,null,r?g.createElement(r,{className:"vds-icon down"}):null,s,t?g.createElement(t,{className:"vds-icon up"}):null);return g.createElement("div",{className:`vds-menu-item vds-menu-slider-item${a?" group":""}`,"data-min":i?"":null,"data-max":o?"":null},a?g.createElement(g.Fragment,null,g.createElement("div",{className:"vds-menu-slider-title"},n?g.createElement("div",null,n):null,e?g.createElement("div",null,e):null),g.createElement("div",{className:"vds-menu-slider-body"},l)):l)}M2.displayName="DefaultMenuSliderItem";function O2(){return g.createElement(g.Fragment,null,g.createElement(e7,{className:"vds-slider-track"}),g.createElement(t7,{className:"vds-slider-track-fill vds-slider-track"}),g.createElement(Q5,{className:"vds-slider-thumb"}))}O2.displayName="DefaultSliderParts";function P2(){return g.createElement(ZG,{className:"vds-slider-steps"},n=>g.createElement("div",{className:"vds-slider-step",key:String(n)}))}P2.displayName="DefaultSliderSteps";function IK(){const n=Et("Caption Styles"),e=Gt("hasCaptions"),t=Et("Font"),r=Et("Text"),s=Et("Text Background"),i=Et("Display Background");return e?g.createElement(oc,{className:"vds-font-menu vds-menu"},g.createElement(yh,{label:n}),g.createElement(ac,{className:"vds-font-style-items vds-menu-items"},g.createElement(wa,{label:t},g.createElement(DK,null),g.createElement(RK,null)),g.createElement(wa,{label:r},g.createElement($K,null),g.createElement(FK,null),g.createElement(LK,null)),g.createElement(wa,{label:s},g.createElement(jK,null),g.createElement(BK,null)),g.createElement(wa,{label:i},g.createElement(VK,null),g.createElement(zK,null)),g.createElement(wa,null,g.createElement(qK,null)))):null}IK.displayName="DefaultFontMenu";function DK(){return g.createElement(cc,{label:"Family",type:"fontFamily",option:O8e})}DK.displayName="DefaultFontFamilyMenu";function RK(){const{icons:n}=Kt(),e={...P8e,upIcon:n.Menu.FontSizeUp,downIcon:n.Menu.FontSizeDown};return g.createElement(cc,{label:"Size",type:"fontSize",option:e})}RK.displayName="DefaultFontSizeSlider";function $K(){return g.createElement(cc,{label:"Color",type:"textColor",option:KT})}$K.displayName="DefaultTextColorInput";function LK(){const{icons:n}=Kt(),e={...YT,upIcon:n.Menu.OpacityUp,downIcon:n.Menu.OpacityDown};return g.createElement(cc,{label:"Opacity",type:"textOpacity",option:e})}LK.displayName="DefaultTextOpacitySlider";function FK(){return g.createElement(cc,{label:"Shadow",type:"textShadow",option:I8e})}FK.displayName="DefaultTextShadowMenu";function jK(){return g.createElement(cc,{label:"Color",type:"textBg",option:KT})}jK.displayName="DefaultTextBgInput";function BK(){const{icons:n}=Kt(),e={...YT,upIcon:n.Menu.OpacityUp,downIcon:n.Menu.OpacityDown};return g.createElement(cc,{label:"Opacity",type:"textBgOpacity",option:e})}BK.displayName="DefaultTextBgOpacitySlider";function VK(){return g.createElement(cc,{label:"Color",type:"displayBg",option:KT})}VK.displayName="DefaultDisplayBgInput";function zK(){const{icons:n}=Kt(),e={...YT,upIcon:n.Menu.OpacityUp,downIcon:n.Menu.OpacityDown};return g.createElement(cc,{label:"Opacity",type:"displayBgOpacity",option:e})}zK.displayName="DefaultDisplayBgOpacitySlider";function cc({label:n,option:e,type:t}){const r=lK(),s=Yp[t],i=dn(s),o=Et(n),a=g.useCallback(()=>{r==null||r.dispatchEvent(new Event("vds-font-change"))},[r]),l=g.useCallback(c=>{s.set(c),a()},[s,a]);if(e.type==="color"){let c=function(u){l(u.target.value)};return g.createElement(i1,{label:o},g.createElement("input",{className:"vds-color-picker",type:"color",value:i,onChange:c}))}if(e.type==="slider"){let c=function(y){l(y+"%")};const{min:u,max:d,step:f,upIcon:p,downIcon:m}=e;return g.createElement(M2,{label:o,value:i,UpIcon:p,DownIcon:m,isMin:i===u+"%",isMax:i===d+"%"},g.createElement(YG,{className:"vds-slider",min:u,max:d,step:f,keyStep:f,value:parseInt(i),"aria-label":o,onValueChange:c,onDragValueChange:c},g.createElement(O2,null),g.createElement(P2,null)))}return e.type==="radio"?g.createElement(HK,{id:sc(t),label:o,value:i,values:e.values,onChange:l}):null}cc.displayName="DefaultFontSetting";function HK({id:n,label:e,value:t,values:r,onChange:s}){const i=B8e(r),{translations:o}=Kt(),a=g.useMemo(()=>{var c;const l=((c=i.find(u=>u.value===t))==null?void 0:c.label)||"";return jT(o,l)},[t,i]);return g.createElement(oc,{className:`vds-${n}-menu vds-menu`},g.createElement(yh,{label:e,hint:a}),g.createElement(ac,{className:"vds-menu-items"},g.createElement(PK,{value:t,options:i,onChange:s})))}HK.displayName="DefaultFontRadioGroup";function qK(){const n=Et("Reset");return g.createElement("button",{className:"vds-menu-item",role:"menuitem",onClick:D8e},g.createElement("span",{className:"vds-menu-item-label"},n))}qK.displayName="DefaultResetMenuItem";function I2({label:n,checked:e,storageKey:t,defaultChecked:r=!1,onChange:s}){const[i,o]=g.useState(r),[a,l]=g.useState(!1);g.useEffect(()=>{const f=t?localStorage.getItem(t):null,p=!!(f??r);o(p),s==null||s(p)},[]),g.useEffect(()=>{zp(e)&&o(e)},[e]);function c(f){if(f&&"button"in f&&(f==null?void 0:f.button)===1)return;const p=!i;o(p),t&&localStorage.setItem(t,p?"1":""),s==null||s(p,f==null?void 0:f.nativeEvent),l(!1)}function u(f){f.button===0&&l(!0)}function d(f){E5(f.nativeEvent)&&c()}return g.createElement("div",{className:"vds-menu-checkbox",role:"menuitemcheckbox",tabIndex:0,"aria-label":n,"aria-checked":i?"true":"false","data-active":a?"":null,onPointerUp:c,onPointerDown:u,onKeyDown:d})}I2.displayName="DefaultMenuCheckbox";function UK({slots:n}){const e=Et("Accessibility"),{icons:t}=Kt();return g.createElement(oc,{className:"vds-accessibility-menu vds-menu"},g.createElement(yh,{label:e,Icon:t.Menu.Accessibility}),g.createElement(ac,{className:"vds-menu-items"},et(n,"accessibilityMenuItemsStart",null),g.createElement(wa,null,g.createElement(WK,null),g.createElement(GK,null)),g.createElement(wa,null,g.createElement(IK,null)),et(n,"accessibilityMenuItemsEnd",null)))}UK.displayName="DefaultAccessibilityMenu";function WK(){const{userPrefersAnnouncements:n}=Kt(),e=Et("Announcements");function t(r){n.set(r)}return g.createElement(i1,{label:e},g.createElement(I2,{label:e,defaultChecked:!0,storageKey:"vds-player::announcements",onChange:t}))}WK.displayName="DefaultAnnouncementsMenuCheckbox";function GK(){const n=Gt("viewType"),{userPrefersKeyboardAnimations:e,noKeyboardAnimations:t}=Kt(),r=Et("Keyboard Animations");if(n!=="video"||t)return null;function s(i){e.set(i)}return g.createElement(i1,{label:r},g.createElement(I2,{label:r,defaultChecked:!0,storageKey:"vds-player::keyboard-animations",onChange:s}))}GK.displayName="DefaultKeyboardAnimationsMenuCheckbox";function KK({slots:n}){const e=Et("Audio"),t=Gt("canSetAudioGain"),r=Gt("audioTracks"),{noAudioGain:s,icons:i}=Kt(),o=t&&!s;return!o&&r.length<=1?null:g.createElement(oc,{className:"vds-audio-menu vds-menu"},g.createElement(yh,{label:e,Icon:i.Menu.Audio}),g.createElement(ac,{className:"vds-menu-items"},et(n,"audioMenuItemsStart",null),g.createElement(QK,null),o?g.createElement(YK,null):null,et(n,"audioMenuItemsEnd",null)))}KK.displayName="DefaultAudioMenu";function YK(){const n=Gt("audioGain"),e=Et("Boost"),t=Math.round(((n??1)-1)*100)+"%",r=Gt("canSetAudioGain"),{noAudioGain:s,icons:i}=Kt(),o=!r||s,a=ZK(),l=XK();return o?null:g.createElement(wa,{label:e,value:t},g.createElement(M2,{UpIcon:i.Menu.AudioBoostUp,DownIcon:i.Menu.AudioBoostDown,isMin:((n??1)-1)*100<=a,isMax:((n??1)-1)*100===l},g.createElement(JK,null)))}YK.displayName="DefaultAudioBoostMenuSection";function ZK(){const{audioGains:n}=Kt();return(qr(n)?n[0]:n==null?void 0:n.min)??0}function XK(){const{audioGains:n}=Kt();return(qr(n)?n[n.length-1]:n==null?void 0:n.max)??300}function V8e(){const{audioGains:n}=Kt();return(qr(n)?n[1]-n[0]:n==null?void 0:n.step)||25}function JK(){const n=Et("Audio Boost"),e=ZK(),t=XK(),r=V8e();return g.createElement(yK,{className:"vds-audio-gain-slider vds-slider","aria-label":n,min:e,max:t,step:r,keyStep:r},g.createElement(O2,null),g.createElement(P2,null))}JK.displayName="DefaultAudioGainSlider";function QK(){const{icons:n}=Kt(),e=Et("Track"),t=Et("Default"),r=Gt("audioTrack"),s=s8e();return s.disabled?null:g.createElement(oc,{className:"vds-audio-track-menu vds-menu"},g.createElement(yh,{label:e,hint:(r==null?void 0:r.label)??t,disabled:s.disabled,Icon:n.Menu.Audio}),g.createElement(ac,{className:"vds-menu-items"},g.createElement(_2,{className:"vds-audio-radio-group vds-radio-group",value:s.selectedValue},s.map(({label:i,value:o,select:a})=>g.createElement(T2,{className:"vds-audio-radio vds-radio",value:o,onSelect:a,key:o},g.createElement(n.Menu.RadioCheck,{className:"vds-icon"}),g.createElement("span",{className:"vds-radio-label"},i))))))}QK.displayName="DefaultAudioTracksMenu";function eY({slots:n}){var o;const{icons:e}=Kt(),t=Et("Captions"),r=Et("Off"),s=i8e({off:r}),i=((o=s.selectedTrack)==null?void 0:o.label)??r;return s.disabled?null:g.createElement(oc,{className:"vds-captions-menu vds-menu"},g.createElement(yh,{label:t,hint:i,disabled:s.disabled,Icon:e.Menu.Captions}),g.createElement(ac,{className:"vds-menu-items"},et(n,"captionsMenuItemsStart",null),g.createElement(_2,{className:"vds-captions-radio-group vds-radio-group",value:s.selectedValue},s.map(({label:a,value:l,select:c})=>g.createElement(T2,{className:"vds-caption-radio vds-radio",value:l,onSelect:c,key:l},g.createElement(e.Menu.RadioCheck,{className:"vds-icon"}),g.createElement("span",{className:"vds-radio-label"},a)))),et(n,"captionsMenuItemsEnd",null)))}eY.displayName="DefaultCaptionMenu";function tY({slots:n}){const e=Et("Playback"),{icons:t}=Kt();return g.createElement(oc,{className:"vds-playback-menu vds-menu"},g.createElement(yh,{label:e,Icon:t.Menu.Playback}),g.createElement(ac,{className:"vds-menu-items"},et(n,"playbackMenuItemsStart",null),g.createElement(wa,null,et(n,"playbackMenuLoop",g.createElement(nY,null))),g.createElement(z8e,null),g.createElement(sY,null),et(n,"playbackMenuItemsEnd",null)))}tY.displayName="DefaultPlaybackMenu";function nY(){const{remote:n}=ic(),e=Et("Loop");function t(r,s){n.userPrefersLoopChange(r,s)}return g.createElement(i1,{label:e},g.createElement(I2,{label:e,storageKey:"vds-player::user-loop",onChange:t}))}nY.displayName="DefaultLoopMenuCheckbox";function rY(){const{remote:n,qualities:e}=ic(),t=Gt("autoQuality"),r=Et("Auto");function s(i,o){i?n.requestAutoQuality(o):n.changeQuality(e.selectedIndex,o)}return g.createElement(i1,{label:r},g.createElement(I2,{label:r,checked:t,onChange:s,defaultChecked:t}))}rY.displayName="DefaultAutoQualityMenuCheckbox";function sY(){const{hideQualityBitrate:n,icons:e}=Kt(),t=Gt("canSetQuality"),r=Gt("qualities"),s=Gt("quality"),i=Et("Quality"),o=Et("Auto"),a=g.useMemo(()=>eG(r),[r]);if(!t||r.length<=1)return null;const l=s==null?void 0:s.height,c=n?null:s==null?void 0:s.bitrate,u=c&&c>0?`${(c/1e6).toFixed(2)} Mbps`:null,d=l?`${l}p${u?` (${u})`:""}`:o,f=a[0]===s,p=a.at(-1)===s;return g.createElement(wa,{label:i,value:d},g.createElement(M2,{UpIcon:e.Menu.QualityUp,DownIcon:e.Menu.QualityDown,isMin:f,isMax:p},g.createElement(iY,null)),g.createElement(rY,null))}sY.displayName="DefaultQualityMenuSection";function iY(){const n=Et("Quality");return g.createElement(gK,{className:"vds-quality-slider vds-slider","aria-label":n},g.createElement(O2,null),g.createElement(P2,null))}iY.displayName="DefaultQualitySlider";function z8e(){const{icons:n}=Kt(),e=Gt("playbackRate"),t=Gt("canSetPlaybackRate"),r=Et("Speed"),s=Et("Normal"),i=oY(),o=aY(),a=e===1?s:e+"x";return t?g.createElement(wa,{label:r,value:a},g.createElement(M2,{UpIcon:n.Menu.SpeedUp,DownIcon:n.Menu.SpeedDown,isMin:e===i,isMax:e===o},g.createElement(lY,null))):null}function oY(){const{playbackRates:n}=Kt(),e=n;return(qr(e)?e[0]:e==null?void 0:e.min)??0}function aY(){const{playbackRates:n}=Kt(),e=n;return(qr(e)?e[e.length-1]:e==null?void 0:e.max)??2}function H8e(){const{playbackRates:n}=Kt(),e=n;return(qr(e)?e[1]-e[0]:e==null?void 0:e.step)||.25}function lY(){const n=Et("Speed"),e=oY(),t=aY(),r=H8e();return g.createElement(vK,{className:"vds-speed-slider vds-slider","aria-label":n,min:e,max:t,step:r,keyStep:r},g.createElement(O2,null),g.createElement(P2,null))}lY.displayName="DefaultSpeedSlider";function JT({tooltip:n,placement:e,portalClass:t="",slots:r}){const{showMenuDelay:s,icons:i,isSmallLayout:o,menuContainer:a,menuGroup:l,noModal:c,colorScheme:u}=Kt(),d=Et("Settings"),f=Gt("viewType"),p=!o&&l==="bottom"&&f==="video"?26:0,m=BT(u),[y,w]=g.useState(!1),k=MK();x8e(R8e);function x(){Qv.flushSync(()=>{w(!0)})}function S(){w(!1)}const _=g.createElement(ac,{className:"vds-settings-menu-items vds-menu-items",placement:e,offset:p},y?g.createElement(g.Fragment,null,et(r,"settingsMenuItemsStart",null),et(r,"settingsMenuStartItems",null),g.createElement(tY,{slots:r}),g.createElement(UK,{slots:r}),g.createElement(KK,{slots:r}),g.createElement(eY,{slots:r}),et(r,"settingsMenuEndItems",null),et(r,"settingsMenuItemsEnd",null)):null);return g.createElement(oc,{className:"vds-settings-menu vds-menu",showDelay:s,onOpen:x,onClose:S},g.createElement(ba,{content:d,placement:n},g.createElement(r7,{className:"vds-menu-button vds-button","aria-label":d},g.createElement(i.Menu.Settings,{className:"vds-icon vds-rotate-icon"}))),c||!o?_:g.createElement($T,{className:t+(m?` ${m}`:""),container:a??k,disabled:"fullscreen","data-sm":o?"":null,"data-lg":o?null:"","data-size":o?"sm":"lg","data-view-type":f},_))}JT.displayName="DefaultSettingsMenu";function d7({tooltip:n,orientation:e,slots:t}){const r=Gt("pointer"),s=Gt("muted"),i=Gt("canSetVolume"),[o,a]=g.useState(null),l=T8e(o),c=et(t,"muteButton",g.createElement(AK,{tooltip:n}));return i?r==="coarse"&&!s?null:g.createElement("div",{className:"vds-volume","data-active":l?"":null,ref:a},c,g.createElement("div",{className:"vds-volume-popup"},et(t,"volumeSlider",g.createElement(cY,{orientation:e})))):c}d7.displayName="DefaultVolumePopup";function cY(n){const e=Et("Volume");return g.createElement(XG,{className:"vds-volume-slider vds-slider","aria-label":e,...n},g.createElement(e7,{className:"vds-slider-track"}),g.createElement(t7,{className:"vds-slider-track-fill vds-slider-track"}),g.createElement(Q5,{className:"vds-slider-thumb"}),g.createElement(IT,{className:"vds-slider-preview",noClamp:!0},g.createElement(DT,{className:"vds-slider-value"})))}cY.displayName="DefaultVolumeSlider";function h7(){const[n,e]=g.useState(null),[t,r]=g.useState(0),s=Gt("currentSrc"),{thumbnails:i,sliderChaptersMinWidth:o,disableTimeSlider:a,seekStep:l,noScrubGesture:c}=Kt(),u=Et("Seek"),d=dn(M8e),f=g.useCallback(()=>{const p=n==null?void 0:n.el;p&&r(p.clientWidth)},[n]);return SK(n==null?void 0:n.el,f),g.createElement(QG,{className:"vds-time-slider vds-slider","aria-label":u,disabled:a,noSwipeGesture:c,keyStep:l,ref:e},g.createElement(eK,{className:"vds-slider-chapters",disabled:t<o},(p,m)=>p.map(y=>g.createElement("div",{className:"vds-slider-chapter",key:y.startTime,ref:m},g.createElement(e7,{className:"vds-slider-track"}),g.createElement(t7,{className:"vds-slider-track-fill vds-slider-track"}),g.createElement(rK,{className:"vds-slider-progress vds-slider-track"})))),g.createElement(Q5,{className:"vds-slider-thumb"}),g.createElement(IT,{className:"vds-slider-preview"},i?g.createElement(iK.Root,{src:i,className:"vds-slider-thumbnail vds-thumbnail"},g.createElement(iK.Img,null)):d&&FG(s)?g.createElement(d,{className:"vds-slider-thumbnail vds-thumbnail"}):null,g.createElement(nK,{className:"vds-slider-chapter-title"}),g.createElement(DT,{className:"vds-slider-value"})))}h7.displayName="DefaultTimeSlider";function uY({slots:n}){return Gt("duration")?g.createElement("div",{className:"vds-time-group"},et(n,"currentTime",g.createElement(A2,{className:"vds-time",type:"current"})),et(n,"timeDivider",g.createElement("div",{className:"vds-time-divider"},"/")),et(n,"endTime",g.createElement(A2,{className:"vds-time",type:"duration"}))):null}uY.displayName="DefaultTimeGroup";function QT({slots:n}){return Gt("live")?et(n,"liveButton",g.createElement(WT,null)):g.createElement(uY,{slots:n})}QT.displayName="DefaultTimeInfo";function dY({slots:n}){const e=Gt("live"),t=Gt("duration");return e?et(n,"liveButton",g.createElement(WT,null)):et(n,"endTime",t?g.createElement(A2,{className:"vds-time",type:"current",toggle:!0,remainder:!0}):null)}dY.displayName="DefaultTimeInvert",_K({type:"audio",smLayoutWhen({width:n}){return n<576},renderLayout:()=>g.createElement(hY,null)});function hY(){const n=TK();return EK("audio"),g.createElement(g.Fragment,null,g.createElement(o7,null),g.createElement(c7,null),g.createElement(s7,{className:"vds-controls"},g.createElement(lc,{className:"vds-controls-group"},et(n,"seekBackwardButton",g.createElement(HT,{backward:!0,tooltip:"top start"})),et(n,"playButton",g.createElement(N2,{tooltip:"top center"})),et(n,"seekForwardButton",g.createElement(HT,{tooltip:"top center"})),g.createElement(pY,null),et(n,"timeSlider",g.createElement(h7,null)),g.createElement(dY,{slots:n}),g.createElement(d7,{orientation:"vertical",tooltip:"top",slots:n}),et(n,"captionButton",g.createElement(a7,{tooltip:"top center"})),et(n,"downloadButton",g.createElement(l7,null)),g.createElement(fY,{slots:n}))))}hY.displayName="AudioLayout";function fY({slots:n}){const{isSmallLayout:e,noModal:t}=Kt(),r=t?"top end":e?null:"top end";return g.createElement(g.Fragment,null,et(n,"chaptersMenu",g.createElement(GT,{tooltip:"top",placement:r,portalClass:"vds-audio-layout"})),et(n,"settingsMenu",g.createElement(JT,{tooltip:"top end",placement:r,portalClass:"vds-audio-layout",slots:n})))}fY.displayName="DefaultAudioMenus";function pY(){const[n,e]=g.useState(null),t=ic(),{translations:r}=Kt(),[s,i]=g.useState(!1),o=i7(()=>{const{started:p,currentTime:m}=t.$state;return p()||m()>0}),a=dn(i7(()=>{const{title:p,ended:m}=t.$state;if(!p())return"";const y=m()?"Replay":o()?"Continue":"Play";return`${jT(r,y)}: ${p()}`})),l=xK(),c=dn(o),u=c?l:"",d=S8e(n);g.useEffect(()=>{var p;d&&document.activeElement===document.body&&((p=t.player.el)==null||p.focus({preventScroll:!0}))},[]);const f=g.useCallback(()=>{const p=n,m=!!p&&!d&&p.clientWidth<p.children[0].clientWidth;p&&eW(p,"vds-marquee",m),i(m)},[n,d]);return SK(n,f),a?g.createElement("span",{className:"vds-title",title:a,ref:e},g.createElement(eA,{title:a,chapterTitle:u}),s&&!d?g.createElement(eA,{title:a,chapterTitle:u}):null):g.createElement(to,null)}pY.displayName="DefaultAudioTitle";function eA({title:n,chapterTitle:e}){const t=TK();return g.createElement("span",{className:"vds-title-text"},et(t,"title",n),et(t,"chapterTitle",g.createElement("span",{className:"vds-chapter-title"},e)))}eA.displayName="AudioTitle";const mY=g.forwardRef(({icons:n,...e},t)=>{const[r,s]=g.useState(!1),[i,o]=g.useState(null),[a,l]=g.useState(0),c=Gt("lastKeyboardAction");g.useEffect(()=>{l(m=>m+1)},[c]);const u=g.useMemo(()=>{const m=c==null?void 0:c.action;return m&&r?sc(m):null},[r,c]),d=g.useMemo(()=>`vds-kb-action${r?"":" hidden"}${e.className?` ${e.className}`:""}`,[r]),f=i7(q8e),p=dn(f);return w8e(()=>{const m=U8e(n);o(()=>m)},[n]),g.useEffect(()=>{s(!!c);const m=setTimeout(()=>s(!1),500);return()=>{s(!1),window.clearTimeout(m)}},[c]),i?g.createElement(Ot.div,{...e,className:d,"data-action":u,ref:t},g.createElement("div",{className:"vds-kb-text-wrapper"},g.createElement("div",{className:"vds-kb-text"},p)),g.createElement("div",{className:"vds-kb-bezel",key:a},g.createElement("div",{className:"vds-kb-icon"},g.createElement(i,null)))):null});mY.displayName="DefaultKeyboardDisplay";function q8e(){var r;const{$state:n}=Ur(b2),e=(r=n.lastKeyboardAction())==null?void 0:r.action,t=n.audioGain()??1;switch(e){case"toggleMuted":return n.muted()?"0%":gY(n.volume(),t);case"volumeUp":case"volumeDown":return gY(n.volume(),t);default:return""}}function gY(n,e){return`${Math.round(n*e*100)}%`}function U8e(n){var r;const{$state:e}=Ur(b2);switch((r=e.lastKeyboardAction())==null?void 0:r.action){case"togglePaused":return e.paused()?n.Pause:n.Play;case"toggleMuted":return e.muted()||e.volume()===0?n.Mute:e.volume()>=.5?n.VolumeUp:n.VolumeDown;case"toggleFullscreen":return e.fullscreen()?n.EnterFullscreen:n.ExitFullscreen;case"togglePictureInPicture":return e.pictureInPicture()?n.EnterPiP:n.ExitPiP;case"toggleCaptions":return e.hasCaptions()?e.textTrack()?n.CaptionsOn:n.CaptionsOff:null;case"volumeUp":return n.VolumeUp;case"volumeDown":return n.VolumeDown;case"seekForward":return n.SeekForward;case"seekBackward":return n.SeekBackward;default:return null}}function tA(){const n=Gt("started"),e=Gt("title");return LT("chapters")&&(n||!e)?g.createElement(kK,{className:"vds-chapter-title"}):g.createElement(bK,{className:"vds-chapter-title"})}tA.displayName="DefaultTitle";const W8e=_K({type:"video",smLayoutWhen({width:n,height:e}){return n<576||e<380},renderLayout(n){return g.createElement(vY,{...n})}});function yY(n){return g.createElement(W8e,{...n})}yY.displayName="DefaultVideoLayout";function vY({streamType:n,isLoadLayout:e,isSmallLayout:t}){return EK("video"),e?g.createElement(kY,null):n==="unknown"?g.createElement(D2,null):t?g.createElement(wY,null):g.createElement(bY,null)}vY.displayName="VideoLayout";function bY(){const{menuGroup:n}=Kt(),e=VT(),t={...e,...e==null?void 0:e.largeLayout};return g.createElement(g.Fragment,null,g.createElement(o7,null),g.createElement(nA,null),g.createElement(rA,null),et(t,"bufferingIndicator",g.createElement(D2,null)),et(t,"captions",g.createElement(c7,null)),g.createElement(s7,{className:"vds-controls"},g.createElement(lc,{className:"vds-controls-group"},et(t,"topControlsGroupStart",null),g.createElement(to,null),et(t,"topControlsGroupCenter",null),g.createElement(to,null),et(t,"topControlsGroupEnd",null),n==="top"&&g.createElement(f7,{slots:t})),g.createElement(to,null),g.createElement(lc,{className:"vds-controls-group"},et(t,"centerControlsGroupStart",null),g.createElement(to,null),et(t,"centerControlsGroupCenter",null),g.createElement(to,null),et(t,"centerControlsGroupEnd",null)),g.createElement(to,null),g.createElement(lc,{className:"vds-controls-group"},et(t,"timeSlider",g.createElement(h7,null))),g.createElement(lc,{className:"vds-controls-group"},et(t,"playButton",g.createElement(N2,{tooltip:"top start"})),g.createElement(d7,{orientation:"horizontal",tooltip:"top",slots:t}),g.createElement(QT,{slots:t}),et(t,"chapterTitle",g.createElement(tA,null)),et(t,"captionButton",g.createElement(a7,{tooltip:"top"})),n==="bottom"&&g.createElement(f7,{slots:t}),et(t,"airPlayButton",g.createElement(qT,{tooltip:"top"})),et(t,"googleCastButton",g.createElement(UT,{tooltip:"top"})),et(t,"downloadButton",g.createElement(l7,null)),et(t,"pipButton",g.createElement(NK,{tooltip:"top"})),et(t,"fullscreenButton",g.createElement(zT,{tooltip:"top end"})))))}bY.displayName="DefaultVideoLargeLayout";function wY(){const n=VT(),e={...n,...n==null?void 0:n.smallLayout};return g.createElement(g.Fragment,null,g.createElement(o7,null),g.createElement(nA,null),g.createElement(rA,null),et(e,"bufferingIndicator",g.createElement(D2,null)),et(e,"captions",g.createElement(c7,null)),g.createElement(s7,{className:"vds-controls"},g.createElement(lc,{className:"vds-controls-group"},et(e,"topControlsGroupStart",null),et(e,"airPlayButton",g.createElement(qT,{tooltip:"top start"})),et(e,"googleCastButton",g.createElement(UT,{tooltip:"top start"})),g.createElement(to,null),et(e,"topControlsGroupCenter",null),g.createElement(to,null),et(e,"captionButton",g.createElement(a7,{tooltip:"bottom"})),et(e,"downloadButton",g.createElement(l7,null)),g.createElement(f7,{slots:e}),g.createElement(d7,{orientation:"vertical",tooltip:"bottom end",slots:e}),et(e,"topControlsGroupEnd",null)),g.createElement(to,null),g.createElement(lc,{className:"vds-controls-group",style:{pointerEvents:"none"}},et(e,"centerControlsGroupStart",null),g.createElement(to,null),et(e,"centerControlsGroupCenter",null),et(e,"playButton",g.createElement(N2,{tooltip:"top"})),g.createElement(to,null),et(e,"centerControlsGroupEnd",null)),g.createElement(to,null),g.createElement(lc,{className:"vds-controls-group"},g.createElement(QT,{slots:e}),et(e,"chapterTitle",g.createElement(tA,null)),et(e,"fullscreenButton",g.createElement(zT,{tooltip:"top end"}))),g.createElement(lc,{className:"vds-controls-group"},et(e,"timeSlider",g.createElement(h7,null)))),et(e,"startDuration",g.createElement(xY,null)))}wY.displayName="DefaultVideoSmallLayout";function xY(){return Gt("duration")===0?null:g.createElement("div",{className:"vds-start-duration"},g.createElement(A2,{className:"vds-time",type:"duration"}))}xY.displayName="DefaultVideoStartDuration";function nA(){const{noGestures:n}=Kt();return n?null:g.createElement("div",{className:"vds-gestures"},g.createElement(r1,{className:"vds-gesture",event:"pointerup",action:"toggle:paused"}),g.createElement(r1,{className:"vds-gesture",event:"pointerup",action:"toggle:controls"}),g.createElement(r1,{className:"vds-gesture",event:"dblpointerup",action:"toggle:fullscreen"}),g.createElement(r1,{className:"vds-gesture",event:"dblpointerup",action:"seek:-10"}),g.createElement(r1,{className:"vds-gesture",event:"dblpointerup",action:"seek:10"}))}nA.displayName="DefaultVideoGestures";function D2(){return g.createElement("div",{className:"vds-buffering-indicator"},g.createElement(y8e,{className:"vds-buffering-spinner"},g.createElement(v8e,{className:"vds-buffering-track"}),g.createElement(b8e,{className:"vds-buffering-track-fill"})))}D2.displayName="DefaultBufferingIndicator";function f7({slots:n}){const{isSmallLayout:e,noModal:t,menuGroup:r}=Kt(),s=r==="top"||e?"bottom":"top",i=`${s} end`,o=t?`${s} end`:e?null:`${s} end`;return g.createElement(g.Fragment,null,et(n,"chaptersMenu",g.createElement(GT,{tooltip:i,placement:o,portalClass:"vds-video-layout"})),et(n,"settingsMenu",g.createElement(JT,{tooltip:i,placement:o,portalClass:"vds-video-layout",slots:n})))}f7.displayName="DefaultVideoMenus";function kY(){const{isSmallLayout:n}=Kt(),e=VT(),t={...e,...e==null?void 0:e[n?"smallLayout":"largeLayout"]};return g.createElement("div",{className:"vds-load-container"},et(t,"bufferingIndicator",g.createElement(D2,null)),et(t,"loadButton",g.createElement(N2,{tooltip:"top"})))}kY.displayName="DefaultVideoLoadLayout";function rA(){const{noKeyboardAnimations:n,icons:e,userPrefersKeyboardAnimations:t}=Kt(),r=dn(t);return n||!r||!e.KeyboardDisplay?null:g.createElement(mY,{icons:e.KeyboardDisplay})}rA.displayName="DefaultVideoKeyboardDisplay";const sA=g.forwardRef((n,e)=>{const{width:t,height:r,size:s=null,paths:i,...o}=n;return g.createElement("svg",{viewBox:"0 0 32 32",...o,width:t??s,height:r??s,fill:"none","aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",ref:e,dangerouslySetInnerHTML:{__html:i}})});sA.displayName="VidstackIcon";function Lt(n){function e(t){return g.createElement(sA,{paths:n,...t})}return e.displayName="DefaultLayoutIcon",e}const G8e={AirPlayButton:{Default:Lt(vW)},GoogleCastButton:{Default:Lt(B_)},PlayButton:{Play:Lt(Z_),Pause:Lt(G_),Replay:Lt(AW)},MuteButton:{Mute:Lt(W_),VolumeLow:Lt(D5),VolumeHigh:Lt(I5)},CaptionButton:{On:Lt(V_),Off:Lt(P5)},PIPButton:{Enter:Lt(Y_),Exit:Lt(K_)},FullscreenButton:{Enter:Lt(U_),Exit:Lt(q_)},SeekButton:{Backward:Lt(NW),Forward:Lt(MW)},DownloadButton:{Default:Lt(CW)},Menu:{Accessibility:Lt(yW),ArrowLeft:Lt(bW),ArrowRight:Lt(kW),Audio:Lt(EW),Chapters:Lt(wW),Captions:Lt(P5),Playback:Lt(TW),Settings:Lt(OW),AudioBoostUp:Lt(I5),AudioBoostDown:Lt(D5),SpeedUp:Lt(H_),SpeedDown:Lt(z_),QualityUp:Lt(j_),QualityDown:Lt(F_),FontSizeUp:Lt(j_),FontSizeDown:Lt(F_),OpacityUp:Lt(SW),OpacityDown:Lt(_W),RadioCheck:Lt(xW)},KeyboardDisplay:{Play:Lt(Z_),Pause:Lt(G_),Mute:Lt(W_),VolumeUp:Lt(I5),VolumeDown:Lt(D5),EnterFullscreen:Lt(U_),ExitFullscreen:Lt(q_),EnterPiP:Lt(Y_),ExitPiP:Lt(K_),CaptionsOn:Lt(V_),CaptionsOff:Lt(P5),SeekForward:Lt(H_),SeekBackward:Lt(z_)}},K8e=UL({title:wb().max(100,"Title must be less than 100 characters").optional(),description:wb().max(1e3,"Description must be less than 1000 characters").optional(),visible:qL()}),Y8e=({open:n,onOpenChange:e,videoId:t,currentTitle:r,currentDescription:s,currentVisible:i,onUpdateSuccess:o})=>{const[a,l]=U.useState(!1),{user:c}=du(),[u,d]=U.useState(!1),[f,p]=U.useState(!1),m=U.useRef(null),y=U.useRef([]),[w,k]=U.useState([]),[x,S]=U.useState(new Set),[_,A]=U.useState(!1),T=lj({resolver:Zj(K8e),defaultValues:{title:r,description:s||"",visible:i}});U.useEffect(()=>{n&&c&&(O(),I())},[n,c,t]);const O=async()=>{if(c){A(!0);try{const{data:H,error:re}=await Yt.from("collections").select("*").eq("user_id",c.id).order("created_at",{ascending:!1});if(re)throw re;k(H||[])}catch(H){console.error("Error fetching collections:",H),at.toast.error(Be("Failed to load collections"))}finally{A(!1)}}},I=async()=>{if(c)try{const{data:H,error:re}=await Yt.from("collection_pictures").select("collection_id").eq("picture_id",t);if(re)throw re;if(H){const ae=H.map(de=>de.collection_id);S(new Set(ae))}}catch(H){console.error("Error fetching video collections:",H)}},R=H=>{const re=new Set(x);re.has(H)?re.delete(H):re.add(H),S(re)},D=async H=>{var re,ae;if(c){l(!0);try{const{error:de}=await Yt.from("pictures").update({title:((re=H.title)==null?void 0:re.trim())||null,description:((ae=H.description)==null?void 0:ae.trim())||null,visible:H.visible,updated_at:new Date().toISOString()}).eq("id",t).eq("user_id",c.id).eq("type","mux-video");if(de)throw de;try{if(await Yt.from("collection_pictures").delete().eq("picture_id",t),x.size>0){const le=Array.from(x).map(X=>({collection_id:X,picture_id:t}));await Yt.from("collection_pictures").insert(le)}}catch(le){console.error("Collection update failed:",le),at.toast.error(Be("Failed to update collections"))}at.toast.success(Be("Video updated successfully")),o(),e(!1)}catch(de){console.error("Error updating video:",de),at.toast.error(Be("Failed to update video"))}finally{l(!1)}}},W=async H=>{if(u)m.current&&m.current.state==="recording"&&m.current.stop(),d(!1);else try{const re=await navigator.mediaDevices.getUserMedia({audio:!0}),ae=new MediaRecorder(re);m.current=ae,y.current=[],ae.ondataavailable=de=>{de.data.size>0&&y.current.push(de.data)},ae.onstop=async()=>{const de=new Blob(y.current,{type:"audio/webm"});re.getTracks().forEach(le=>le.stop()),p(!0);try{const le=new File([de],"recording.webm",{type:"audio/webm"}),X=await sH(le);if(X){if(H==="title")T.setValue("title",X);else{const se=T.getValues("description")||"";T.setValue("description",se?`${se} + +${X}`:X)}at.toast.success(Be("Voice transcribed successfully!"))}}catch(le){console.error("Error transcribing audio:",le),at.toast.error(Be("Failed to transcribe audio"))}finally{p(!1)}},ae.start(),d(!0),at.toast.info(Be("Recording... Click again to stop"))}catch(re){console.error("Error starting recording:",re),at.toast.error(Be("Failed to start recording. Please check microphone permissions."))}};return b.jsx(pS,{open:n,onOpenChange:e,children:b.jsxs(Z6,{className:"sm:max-w-[600px] max-h-[90vh] overflow-y-auto",children:[b.jsx(X6,{children:b.jsx(J6,{children:b.jsx(St,{children:"Edit Video"})})}),b.jsx(dj,{...T,children:b.jsxs("form",{onSubmit:T.handleSubmit(D),className:"space-y-4",children:[b.jsxs(Dj,{defaultValue:"metadata",className:"w-full",children:[b.jsxs(IS,{className:"grid w-full grid-cols-2",children:[b.jsx(_g,{value:"metadata",children:b.jsx(St,{children:"Metadata"})}),b.jsxs(_g,{value:"collections",children:[b.jsx(Se.Bookmark,{className:"h-4 w-4 mr-1"}),b.jsx(St,{children:"Collections"})]})]}),b.jsxs(Tg,{value:"metadata",className:"space-y-4",children:[b.jsx(Sg,{control:T.control,name:"title",render:({field:H})=>b.jsxs(_p,{children:[b.jsx(Tp,{children:b.jsx(St,{children:"Title"})}),b.jsxs("div",{className:"relative",children:[b.jsx(Ap,{children:b.jsx(xb,{placeholder:Be("Video title"),...H})}),b.jsx("button",{type:"button",onClick:()=>W("title"),disabled:f,className:"absolute right-2 top-1/2 -translate-y-1/2 p-1.5 rounded-md hover:bg-accent transition-colors",children:f?b.jsx(Se.Loader2,{className:"h-4 w-4 animate-spin"}):u?b.jsx(Se.MicOff,{className:"h-4 w-4 text-red-500"}):b.jsx(Se.Mic,{className:"h-4 w-4"})})]}),b.jsx(_b,{})]})}),b.jsx(Sg,{control:T.control,name:"description",render:({field:H})=>b.jsxs(_p,{children:[b.jsx(Tp,{children:b.jsx(St,{children:"Description"})}),b.jsxs("div",{className:"relative",children:[b.jsx(Ap,{children:b.jsx(Qj,{value:H.value||"",onChange:H.onChange,placeholder:Be("Add a description (supports Markdown)"),className:"min-h-[120px]"})}),b.jsx("button",{type:"button",onClick:()=>W("description"),disabled:f,className:"absolute right-2 top-2 p-1.5 rounded-md hover:bg-accent transition-colors z-10",children:f?b.jsx(Se.Loader2,{className:"h-4 w-4 animate-spin"}):u?b.jsx(Se.MicOff,{className:"h-4 w-4 text-red-500"}):b.jsx(Se.Mic,{className:"h-4 w-4"})})]}),b.jsx(_b,{})]})}),b.jsx(Sg,{control:T.control,name:"visible",render:({field:H})=>b.jsxs(_p,{className:"flex flex-row items-center justify-between rounded-lg border p-4",children:[b.jsxs("div",{className:"space-y-0.5",children:[b.jsx(Tp,{className:"text-base",children:b.jsx(St,{children:"Visibility"})}),b.jsx("div",{className:"text-sm text-muted-foreground",children:b.jsx(St,{children:"Make this video visible to others"})})]}),b.jsx(Ap,{children:b.jsx(RS,{checked:H.value,onCheckedChange:H.onChange})})]})})]}),b.jsx(Tg,{value:"collections",className:"space-y-4",children:_?b.jsx("div",{className:"flex items-center justify-center py-8",children:b.jsx(Se.Loader2,{className:"h-6 w-6 animate-spin"})}):w.length===0?b.jsxs("div",{className:"text-center py-8 text-muted-foreground",children:[b.jsx(Se.Bookmark,{className:"h-12 w-12 mx-auto mb-3 opacity-50"}),b.jsx("p",{children:b.jsx(St,{children:"No collections yet"})}),b.jsx("p",{className:"text-sm",children:b.jsx(St,{children:"Create a collection first to organize your videos"})})]}):b.jsx("div",{className:"space-y-2",children:w.map(H=>b.jsx(ux,{className:"cursor-pointer hover:bg-accent/50 transition-colors",children:b.jsx(dx,{className:"p-4",children:b.jsxs("div",{className:"flex items-center space-x-3",children:[b.jsx(cx,{checked:x.has(H.id),onCheckedChange:()=>R(H.id)}),b.jsxs("div",{className:"flex-1",children:[b.jsx("h4",{className:"font-medium",children:H.name}),H.description&&b.jsx("p",{className:"text-sm text-muted-foreground line-clamp-1",children:H.description})]})]})})},H.id))})})]}),b.jsxs("div",{className:"flex justify-end space-x-2",children:[b.jsx(yt,{type:"button",variant:"outline",onClick:()=>e(!1),children:b.jsx(St,{children:"Cancel"})}),b.jsx(yt,{type:"submit",disabled:a,children:a?b.jsxs(b.Fragment,{children:[b.jsx(Se.Loader2,{className:"mr-2 h-4 w-4 animate-spin"}),b.jsx(St,{children:"Updating..."})]}):b.jsx(St,{children:"Save Changes"})})]})]})})]})})},gi={SUPABASE_IMAGE:"supabase-image",MUX_VIDEO:"mux-video",VIDEO_INTERN:"video-intern",YOUTUBE:"youtube",TIKTOK:"tiktok",PAGE:"page-intern",PAGE_EXTERNAL:"page-external"};function p7(n){return!n||n===gi.SUPABASE_IMAGE?gi.SUPABASE_IMAGE:n}function CY(n){return n===gi.MUX_VIDEO||n===gi.YOUTUBE||n===gi.TIKTOK||n===gi.VIDEO_INTERN}function Z8e(n,e){return n.includes("/api/videos/")?gi.VIDEO_INTERN:n.includes("stream.mux.com")||n.includes(".m3u8")?gi.MUX_VIDEO:n.includes("youtube.com")||n.includes("youtu.be")?gi.YOUTUBE:n.includes("tiktok.com")?gi.TIKTOK:e&&(e.mux_asset_id||e.mux_playback_id)?gi.MUX_VIDEO:gi.SUPABASE_IMAGE}const X8e=[1,1.25,1.5,1.75,2,2.5,3,4];class SY extends un{constructor(){super();N(this,Fa);N(this,Gf);N(this,av);N(this,Om);M(this,Om,new PG),h(this,Om).onValueChange=v(this,Fa,Efe).bind(this)}get value(){return h(this,Om).value}get disabled(){const{gains:t}=this.$props,{canSetAudioGain:r}=h(this,Gf).$state;return!r()||t().length===0}onSetup(){M(this,Gf,or()),Cu(Au)&&M(this,av,Ur(Au))}onConnect(t){me(v(this,Fa,xfe).bind(this)),me(v(this,Fa,kfe).bind(this)),me(v(this,Fa,Cfe).bind(this))}getOptions(){const{gains:t,normalLabel:r}=this.$props;return t().map(s=>({label:s===1||s===null?r:String(s*100)+"%",value:s.toString()}))}}Gf=new WeakMap,av=new WeakMap,Om=new WeakMap,Fa=new WeakSet,xfe=function(){h(this,Om).value=v(this,Fa,Sfe).call(this)},kfe=function(){var i;const{normalLabel:t}=this.$props,{audioGain:r}=h(this,Gf).$state,s=r();(i=h(this,av))==null||i.hint.set(s===1||s==null?t():String(s*100)+"%")},Cfe=function(){var t;(t=h(this,av))==null||t.disable(this.disabled)},Sfe=function(){var r;const{audioGain:t}=h(this,Gf).$state;return((r=t())==null?void 0:r.toString())??"1"},Efe=function(t,r){if(this.disabled)return;const s=+t;h(this,Gf).remote.changeAudioGain(s,r),this.dispatch("change",{detail:s,trigger:r})},G(SY,"props",{normalLabel:"Disabled",gains:X8e});const iA=SY.prototype;nr(iA,"value"),nr(iA,"disabled"),Rs(iA,"getOptions");const J8e=hn(DG,{events:["onAbort","onAudioTrackChange","onAudioTracksChange","onAutoPlay","onAutoPlayChange","onAutoPlayFail","onCanLoad","onCanPlay","onCanPlayThrough","onControlsChange","onDestroy","onDurationChange","onEmptied","onEnd","onEnded","onError","onFindMediaPlayer","onFullscreenChange","onFullscreenError","onLiveChange","onLiveEdgeChange","onLoadedData","onLoadedMetadata","onLoadStart","onLoopChange","onOrientationChange","onPause","onPictureInPictureChange","onPictureInPictureError","onPlay","onPlayFail","onPlaying","onPlaysInlineChange","onPosterChange","onProgress","onProviderChange","onProviderLoaderChange","onProviderSetup","onQualitiesChange","onQualityChange","onRateChange","onReplay","onSeeked","onSeeking","onSourceChange","onSourceChange","onStalled","onStarted","onStreamTypeChange","onSuspend","onTextTrackChange","onTextTracksChange","onTimeUpdate","onTitleChange","onVdsLog","onVideoPresentationChange","onVolumeChange","onWaiting"],eventsRegex:/^onHls/,domEventsRegex:/^onMedia/}),EY=g.forwardRef(({aspectRatio:n,children:e,...t},r)=>g.createElement(J8e,{...t,src:t.src,ref:r,style:{aspectRatio:n,...t.style}},s=>g.createElement(Ot.div,{...s},e)));EY.displayName="MediaPlayer";const Q8e=hn(Bke),_Y=g.forwardRef(({loaders:n=[],children:e,iframeProps:t,mediaProps:r,...s},i)=>{const o=g.useMemo(()=>n.map(a=>new a),n);return g.createElement(Q8e,{...s,loaders:o,ref:i},(a,l)=>g.createElement("div",{...a},g.createElement(TY,{provider:l,mediaProps:r,iframeProps:t}),e))});_Y.displayName="MediaProvider";function TY({provider:n,mediaProps:e,iframeProps:t}){const{sources:r,crossOrigin:s,poster:i,remotePlaybackInfo:o,nativeControls:a,viewType:l}=Jg(v2),{loader:c}=n.$state,{$provider:u,$providerSetup:d}=ic(),f=dn(r),p=dn(a),m=dn(s),y=dn(i),w=dn(c),k=dn(u),x=dn(d),S=dn(o),_=w==null?void 0:w.mediaType(),A=dn(l),T=A==="audio",O=(w==null?void 0:w.name)==="youtube",I=(w==null?void 0:w.name)==="vimeo",R=O||I,D=(w==null?void 0:w.name)==="remotion",W=(w==null?void 0:w.name)==="google-cast",[H,re]=g.useState(""),[ae,de]=g.useState(!1);return g.useEffect(()=>{!W||H||Promise.resolve().then(()=>e5e).then(function(le){return le.chromecast}).then(le=>{re(le.default)})},[W]),g.useEffect(()=>{de(!0)},[]),W?g.createElement("div",{className:"vds-google-cast",ref:le=>{n.load(le)}},g.createElement(sA,{paths:H}),S!=null&&S.deviceName?g.createElement("span",{className:"vds-google-cast-info"},"Google Cast on"," ",g.createElement("span",{className:"vds-google-cast-device-name"},S.deviceName)):null):D?g.createElement("div",{"data-remotion-canvas":!0},g.createElement("div",{"data-remotion-container":!0,ref:le=>{n.load(le)}},_9e(k)&&x?g.createElement(k.render):null)):R?g.createElement(g.Fragment,null,g.createElement("iframe",{...t,className:(t!=null&&t.className?`${t.className} `:"")+O?"vds-youtube":"vds-vimeo",suppressHydrationWarning:!0,tabIndex:p?void 0:-1,"aria-hidden":"true","data-no-controls":p?void 0:"",ref(le){n.load(le)}}),!p&&!T?g.createElement("div",{className:"vds-blocker"}):null):_?g.createElement(_==="audio"?"audio":"video",{...e,controls:p?!0:null,crossOrigin:typeof m=="boolean"?"":m,poster:_==="video"&&p&&y?y:null,suppressHydrationWarning:!0,children:ae?null:f.map(({src:le,type:X})=>ut(le)?g.createElement("source",{src:le,type:X!=="?"?X:void 0,key:le}):null),ref(le){n.load(le)}}):null}TY.displayName="MediaOutlet";const eCe=hn(qke),tCe=g.forwardRef(({children:n,...e},t)=>g.createElement(eCe,{...e},r=>g.createElement(Ot.button,{...r,ref:Qn(r.ref,t)},n)));tCe.displayName="ToggleButton";const nCe=hn(x9e),rCe=g.forwardRef(({children:n,...e},t)=>g.createElement(nCe,{src:e.asChild&&g.isValidElement(n)?n.props.src:void 0,...e},(r,s)=>g.createElement(AY,{...r,instance:s,ref:Qn(r.ref,t)},n)));rCe.displayName="Poster";const AY=g.forwardRef(({instance:n,children:e,...t},r)=>{const{src:s,img:i,alt:o,crossOrigin:a,hidden:l}=n.$state,c=dn(s),u=dn(o),d=dn(a),f=dn(l);return g.createElement(Ot.img,{...t,src:c||void 0,alt:u||void 0,crossOrigin:d||void 0,ref:Qn(i.set,r),style:{display:f?"none":void 0}},e)});AY.displayName="PosterImg";const sCe=g.forwardRef(({children:n,...e},t)=>g.createElement(Ot.div,{translate:"yes","aria-live":"off","aria-atomic":"true",...e,ref:t},n));sCe.displayName="Caption";const iCe=g.forwardRef((n,e)=>{const t=Gt("textTrack"),[r,s]=g.useState();return g.useEffect(()=>{if(!t)return;function i(){s(t==null?void 0:t.activeCues[0])}return t.addEventListener("cue-change",i),()=>{t.removeEventListener("cue-change",i),s(void 0)}},[t]),g.createElement(Ot.span,{...n,"data-part":"cue",dangerouslySetInnerHTML:{__html:(r==null?void 0:r.text)||""},ref:e})});iCe.displayName="CaptionText";const oCe=({videoId:n,videoUrl:e,thumbnailUrl:t,title:r,author:s,authorId:i,likes:o,comments:a,isLiked:l=!1,description:c,onClick:u,onLike:d,onDelete:f,maxResolution:p="270p",authorAvatarUrl:m,showContent:y=!0,showPlayButton:w=!1,created_at:k,job:x,variant:S="grid",apiUrl:_})=>{const{user:A}=du();gp.useNavigate();const T=gp.useLocation(),[O,I]=U.useState(l),[R,D]=U.useState(o),[W,H]=U.useState(!1),[re,ae]=U.useState(0),[de,le]=U.useState(!1),[X,se]=U.useState(!1),J=U.useRef(null);U.useEffect(()=>(console.log(`[VideoCard ${n}] Mounted`),(()=>{var ue;de&&console.log(`[VideoCard ${n}] Navigation detected - stopping`),le(!1),(ue=J.current)==null||ue.pause()})(),()=>{var ue;console.log(`[VideoCard ${n}] Unmounting - pausing player`),(ue=J.current)==null||ue.pause()}),[T.pathname]);const[$,ve]=U.useState("unknown"),[Pe,q]=U.useState(0),[Xe,qe]=U.useState(null),Ye=(A==null?void 0:A.id)===i,We=Z8e(e)===gi.VIDEO_INTERN,ot=(()=>{if(t)return We?t:`${t}?width=640&height=640&fit_mode=smartcrop&time=0`})(),Ie=(ne=>{if(We)return ne;try{const ue=new URL(ne);return ue.searchParams.set("max_resolution",p),ue.toString()}catch{const ue=ne.includes("?")?"&":"?";return`${ne}${ue}max_resolution=${p}`}})(e);U.useEffect(()=>{(async()=>{})()},[n,Ye,A]),U.useEffect(()=>{if(!We)return;if(x){if(x.status==="completed"){ve("completed");return}if(x.status==="failed"){ve("failed");return}ve("active"),q(x.progress||0)}const ne=e.match(/\/api\/videos\/jobs\/([^\/]+)\//)||(x?[null,x.id]:null);if(!ne)return;const ue=ne[1];let ye="http://localhost:3333";(e.startsWith("/")||e.includes(window.location.origin))&&(ye=window.location.origin);let L=null,V=!0;return(async()=>{if(ue)try{const he=await fetch(`${ye}/api/videos/jobs/${ue}`);if(!he.ok)throw new Error("Failed to fetch job");const z=await he.json();if(!V)return;if(z.status==="completed"){ve("completed");return}else if(z.status==="failed"){ve("failed");return}ve("active");const B=`${ye}/api/videos/jobs/${ue}/progress`;L=new EventSource(B),L.addEventListener("progress",ee=>{if(V)try{const we=JSON.parse(ee.data);we.progress!==void 0&&q(Math.round(we.progress)),we.status&&(we.status==="completed"?(ve("completed"),L==null||L.close()):we.status==="failed"?(ve("failed"),L==null||L.close()):ve("active"))}catch(we){console.error("SSE Parse Error",we)}}),L.onerror=ee=>{L==null||L.close()}}catch(he){console.error("Error checking video status:",he),V&&ve("unknown")}})(),()=>{V=!1,L&&L.close()}},[We,e,x]);const pt=async ne=>{if(ne.stopPropagation(),!confirm("Cancel this upload?"))return;const ue=e.match(/\/api\/videos\/jobs\/([^\/]+)\//);if(!ue)return;const ye=ue[1];let L="http://localhost:3333";(e.startsWith("/")||e.includes(window.location.origin))&&(L=window.location.origin);try{await fetch(`${L}/api/videos/jobs/${ye}`,{method:"DELETE"}),at.toast.info(Be("Upload cancelled")),f==null||f()}catch(V){console.error("Failed to cancel",V),at.toast.error(Be("Failed to cancel upload"))}},j=async ne=>{if(ne.stopPropagation(),!A){at.toast.error(Be("Please sign in to like videos"));return}try{at.toast.info("Video likes coming soon"),d==null||d()}catch(ue){console.error("Error toggling like:",ue),at.toast.error(Be("Failed to update like"))}},Y=async ne=>{if(ne.stopPropagation(),!A||!Ye){at.toast.error(Be("You can only delete your own videos"));return}if(confirm(Be("Are you sure you want to delete this video? This action cannot be undone."))){H(!0);try{const{data:ue,error:ye}=await Yt.from("pictures").select("image_url").eq("id",n).single();if(ye)throw ye;const{error:L}=await Yt.from("pictures").delete().eq("id",n);if(L)throw L;if(ue!=null&&ue.image_url){const V=ue.image_url.split("/"),ie=V[V.length-1],he=V[V.length-2],{error:z}=await Yt.storage.from("videos").remove([`${he}/${ie}`]);z&&console.error("Error deleting from storage:",z)}at.toast.success(Be("Video deleted successfully")),f==null||f()}catch(ue){console.error("Error deleting video:",ue),at.toast.error(Be("Failed to delete video"))}finally{H(!1)}}},ce=async()=>{try{const ne=document.createElement("a");ne.href=e,ne.download=`${r}.mp4`,document.body.appendChild(ne),ne.click(),document.body.removeChild(ne),at.toast.success(Be("Video download started"))}catch(ne){console.error("Error downloading video:",ne),at.toast.error(Be("Failed to download video"))}},be=ne=>{console.log("Video clicked"),ne.preventDefault(),ne.stopPropagation(),u==null||u(n)};U.useEffect(()=>{const ne=ue=>{var L,V;((L=ue.detail)==null?void 0:L.sourceId)!==n&&de&&(console.log(`[VideoCard ${n}] Stopping due to global event`),le(!1),(V=J.current)==null||V.pause())};return window.addEventListener("stop-video",ne),()=>window.removeEventListener("stop-video",ne)},[de,n]);const xe=ne=>{console.log("Play clicked"),ne.preventDefault(),ne.stopPropagation(),window.dispatchEvent(new CustomEvent("stop-video",{detail:{sourceId:n}})),le(!0)};return b.jsxs("div",{"data-testid":"video-card",className:"group relative overflow-hidden bg-card transition-all duration-300 cursor-pointer w-full",onClick:be,children:[b.jsx("div",{className:`${S==="grid"?"aspect-square":"w-full"} overflow-hidden relative`,children:de?b.jsxs(EY,{ref:J,title:r,src:Ie.includes(".m3u8")?{src:Ie,type:"application/x-mpegurl"}:x!=null&&x.resultUrl&&x.status==="completed"?{src:x.resultUrl,type:"application/x-mpegurl"}:Ie.includes("/api/videos/jobs")?{src:Ie,type:"video/mp4"}:Ie,poster:ot,fullscreenOrientation:"any",controls:!0,playsInline:!0,className:`w-full ${S==="grid"?"h-full":""}`,children:[b.jsx(_Y,{}),b.jsx(yY,{icons:G8e})]},n):b.jsxs(b.Fragment,{children:[b.jsx("img",{src:ot||"/placeholder.svg",alt:r,className:"w-full h-full object-cover"}),We&&$!=="completed"&&$!=="unknown"&&b.jsx("div",{className:"absolute inset-0 flex flex-col items-center justify-center bg-black/60 z-10",children:$==="failed"?b.jsx("div",{className:"text-red-500 flex flex-col items-center",children:b.jsx("span",{className:"text-sm font-medium",children:"Processing Failed"})}):b.jsxs("div",{className:"flex flex-col items-center text-white space-y-2",children:[b.jsx(Se.Loader2,{className:"w-8 h-8 animate-spin text-primary"}),b.jsxs("span",{className:"text-xs font-medium",children:["Processing ",Pe,"%"]}),b.jsxs(yt,{size:"sm",variant:"destructive",className:"h-6 text-xs mt-2",onClick:pt,children:[b.jsx(Se.X,{className:"w-3 h-3 mr-1"})," Cancel"]})]})}),w&&(!We||$==="completed"||$==="unknown")&&b.jsx("button",{onClick:xe,className:"absolute inset-0 flex items-center justify-center bg-black/30 hover:bg-black/40 transition-colors group","aria-label":"Play video",children:b.jsx("div",{className:"w-16 h-16 rounded-full bg-white/90 flex items-center justify-center group-hover:bg-white group-hover:scale-110 transition-all",children:b.jsx("svg",{className:"w-8 h-8 text-black ml-1",fill:"currentColor",viewBox:"0 0 24 24",children:b.jsx("path",{d:"M8 5v14l11-7z"})})})})]})}),y&&S==="grid"&&!de&&b.jsx("div",{className:"hidden md:block absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none",children:b.jsxs("div",{className:"absolute bottom-0 left-0 right-0 p-4 pointer-events-auto",children:[b.jsxs("div",{className:"flex items-center justify-between mb-2",children:[b.jsx("div",{className:"flex items-center space-x-2",children:b.jsx(qg,{userId:i,avatarUrl:m,displayName:s,hoverStyle:!0,showDate:!1})}),b.jsxs("div",{className:"flex items-center space-x-1",children:[b.jsx(yt,{size:"sm",variant:"ghost",onClick:j,className:`h-8 w-8 p-0 ${O?"text-red-500":"text-white hover:text-red-500"}`,children:b.jsx(Se.Heart,{className:"h-4 w-4",fill:O?"currentColor":"none"})}),b.jsx("span",{className:"text-white text-sm",children:R}),b.jsx(yt,{size:"sm",variant:"ghost",className:"h-8 w-8 p-0 text-white hover:text-blue-400 ml-2",children:b.jsx(Se.MessageCircle,{className:"h-4 w-4"})}),b.jsx("span",{className:"text-white text-sm",children:a}),Ye&&b.jsxs(b.Fragment,{children:[b.jsx(yt,{size:"sm",variant:"ghost",onClick:ne=>{ne.stopPropagation(),se(!0)},className:"h-8 w-8 p-0 text-white hover:text-green-400 ml-2",children:b.jsx(Se.Edit3,{className:"h-4 w-4"})}),b.jsx(yt,{size:"sm",variant:"ghost",onClick:Y,disabled:W,className:"h-8 w-8 p-0 text-white hover:text-red-400 ml-2",children:b.jsx(Se.Trash2,{className:"h-4 w-4"})}),re>1&&b.jsxs("div",{className:"flex items-center ml-2 px-2 py-1 bg-white/20 rounded text-white text-xs",children:[b.jsx(Se.Layers,{className:"h-3 w-3 mr-1"}),re]})]})]})]}),b.jsx("h3",{className:"text-white font-medium mb-1",children:r}),c&&b.jsx("div",{className:"text-white/80 text-sm mb-3 line-clamp-3 overflow-hidden",children:b.jsx(xp,{content:c,className:"prose-invert prose-white"})}),b.jsxs("div",{className:"flex items-center space-x-1",children:[b.jsxs(yt,{size:"sm",variant:"secondary",className:"h-6 px-2 text-xs bg-white/20 hover:bg-white/30 border-0 text-white",onClick:ne=>{ne.stopPropagation(),ce()},children:[b.jsx(Se.Download,{className:"h-3 w-3 mr-1"}),b.jsx(St,{children:"Download"})]}),b.jsx(yt,{size:"sm",variant:"secondary",className:"h-6 w-6 p-0 bg-white/20 hover:bg-white/30 border-0 text-white",children:b.jsx(Se.Share2,{className:"h-2.5 w-2.5"})})]})]})}),y&&(S==="feed"||S==="grid"&&!0)&&b.jsxs("div",{className:`${S==="grid"?"md:hidden":""} pb-2 space-y-2`,children:[b.jsxs("div",{className:"flex items-center justify-between px-2 pt-2",children:[b.jsx(qg,{userId:i,avatarUrl:m,displayName:s==="User"?void 0:s,className:"w-8 h-8",showDate:!1}),b.jsxs("div",{className:"flex items-center gap-1",children:[b.jsx(yt,{size:"icon",variant:"ghost",onClick:j,className:O?"text-red-500 hover:text-red-600":"",children:b.jsx(Se.Heart,{className:"h-6 w-6",fill:O?"currentColor":"none"})}),R>0&&b.jsx("span",{className:"text-sm font-medium text-foreground mr-1",children:R}),b.jsx(yt,{size:"icon",variant:"ghost",className:"text-foreground",children:b.jsx(Se.MessageCircle,{className:"h-6 w-6 -rotate-90"})}),a>0&&b.jsx("span",{className:"text-sm font-medium text-foreground mr-1",children:a}),b.jsx(yt,{size:"icon",variant:"ghost",className:"text-foreground",onClick:ne=>{ne.stopPropagation(),ce()},children:b.jsx(Se.Download,{className:"h-6 w-6"})}),Ye&&b.jsx(b.Fragment,{children:b.jsx(yt,{size:"icon",variant:"ghost",onClick:ne=>{ne.stopPropagation(),se(!0)},className:"text-foreground hover:text-green-400",children:b.jsx(Se.Edit3,{className:"h-6 w-6"})})})]})]}),b.jsxs("div",{className:"px-4 space-y-1",children:[!f_(r)&&r&&b.jsx("div",{className:"font-semibold text-sm",children:r}),c&&b.jsx("div",{className:"text-sm text-foreground/90 line-clamp-3 pl-8",children:b.jsx(xp,{content:c,className:"prose-sm dark:prose-invert"})}),k&&b.jsx("div",{className:"text-xs text-muted-foreground pt-1",children:h_(k)})]})]}),X&&b.jsx(Y8e,{open:X,onOpenChange:se,videoId:n,currentTitle:r,currentDescription:c||null,currentVisible:!0,onUpdateSuccess:()=>{se(!1),f==null||f()}})]})};function aCe(n){if(!n)return null;const e=/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/,t=n.match(e);return t&&t[2].length===11?t[2]:null}function lCe(n){if(!n)return null;try{const e=new URL(n);if(e.hostname.includes("tiktok.com")&&e.pathname.includes("/video/")){const t=e.pathname.split("/video/");if(t.length>1)return t[1].split(/[?#]/)[0]}}catch{return null}return null}const cCe=({id:n,url:e,thumbnailUrl:t,title:r,author:s,authorId:i,authorAvatarUrl:o,likes:a,comments:l,isLiked:c,description:u,onClick:d,onLike:f,created_at:p,variant:m="grid",responsive:y,showContent:w=!0,apiUrl:k})=>{const x=t||e||"https://picsum.photos/640",[S,_]=U.useState(!1),A=lCe(e),T=aCe(e),O=!!(A||T),I=D=>{D.stopPropagation(),f==null||f()},R=D=>{D.stopPropagation(),d==null||d(n)};return m==="feed"?b.jsxs("div",{className:"group relative overflow-hidden bg-card transition-all duration-300 cursor-pointer w-full border rounded-lg mb-4",onClick:R,children:[b.jsx("div",{className:"p-4 border-b flex items-center justify-between",children:b.jsx(qg,{userId:i,avatarUrl:o,displayName:s,className:"w-8 h-8",showDate:!0,createdAt:p})}),b.jsx("div",{className:`relative w-full ${A?"aspect-[9/16]":"aspect-[16/9]"} overflow-hidden bg-muted`,children:S&&O?b.jsx("div",{className:"w-full h-full bg-black flex justify-center",children:b.jsx("iframe",{src:A?`https://www.tiktok.com/embed/v2/${A}`:`https://www.youtube.com/embed/${T}?autoplay=1`,className:"w-full h-full border-0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0,title:r})}):b.jsxs(b.Fragment,{children:[b.jsx(nb,{src:x,alt:r,className:"w-full h-full",imgClassName:"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105",sizes:"100vw",data:y,apiUrl:k}),b.jsx("div",{className:"absolute inset-0 flex items-center justify-center pointer-events-none",children:O?b.jsx("div",{className:"bg-black/50 p-4 rounded-full backdrop-blur-sm pointer-events-auto cursor-pointer hover:bg-black/70 transition-colors",onClick:D=>{D.stopPropagation(),_(!0)},children:b.jsx(Se.Play,{className:"w-8 h-8 text-white fill-white"})}):b.jsx("div",{className:"bg-black/50 p-4 rounded-full backdrop-blur-sm",children:b.jsx(Se.FileText,{className:"w-8 h-8 text-white"})})})]})}),b.jsxs("div",{className:"p-4 space-y-2",children:[b.jsx("div",{className:"flex items-center justify-between",children:b.jsx("h3",{className:"text-xl font-semibold",children:r})}),u&&b.jsx("div",{className:"text-sm text-foreground/90 line-clamp-3",children:b.jsx(xp,{content:u,className:"prose-sm dark:prose-invert"})}),b.jsxs("div",{className:"flex items-center gap-4 pt-2",children:[b.jsxs(yt,{size:"sm",variant:"ghost",className:"px-0 gap-1",onClick:I,children:[b.jsx(Se.Heart,{className:`h-5 w-5 ${c?"fill-red-500 text-red-500":""}`}),b.jsx("span",{children:a})]}),b.jsxs(yt,{size:"sm",variant:"ghost",className:"px-0 gap-1",children:[b.jsx(Se.MessageCircle,{className:"h-5 w-5"}),b.jsx("span",{children:l})]})]})]})]}):b.jsx("div",{className:`group relative overflow-hidden bg-card transition-all duration-300 cursor-pointer w-full ${S&&A?"aspect-[9/16]":"aspect-square"}`,onClick:D=>{O&&!S?(D.stopPropagation(),_(!0)):R(D)},children:S&&O?b.jsx("div",{className:"w-full h-full bg-black flex justify-center",children:b.jsx("iframe",{src:A?`https://www.tiktok.com/embed/v2/${A}`:`https://www.youtube.com/embed/${T}?autoplay=1`,className:"w-full h-full border-0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0,title:r})}):b.jsxs(b.Fragment,{children:[b.jsx(nb,{src:x,alt:r,className:"w-full h-full",imgClassName:"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105",sizes:"(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw",responsiveSizes:[320,640,1024],data:y,apiUrl:k}),b.jsx("div",{className:"absolute top-2 right-2 p-1.5 bg-black/60 rounded-md backdrop-blur-sm z-10",children:O?b.jsx(Se.Play,{className:"w-4 h-4 text-white fill-white"}):b.jsx(Se.FileText,{className:"w-4 h-4 text-white"})}),O&&b.jsx("div",{className:"absolute inset-0 flex items-center justify-center pointer-events-none",children:b.jsx("div",{className:"bg-black/50 p-3 rounded-full backdrop-blur-sm group-hover:bg-black/70 transition-colors",children:b.jsx(Se.Play,{className:"w-8 h-8 text-white fill-white"})})}),w&&b.jsx("div",{className:"hidden md:block absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none",children:b.jsxs("div",{className:"absolute bottom-0 left-0 right-0 p-4 pointer-events-auto",children:[b.jsxs("div",{className:"flex items-center justify-between mb-2",children:[b.jsx(qg,{userId:i,avatarUrl:o,displayName:s,hoverStyle:!0,showDate:!1}),b.jsx("div",{className:"flex items-center space-x-1",children:b.jsx(yt,{size:"sm",variant:"ghost",onClick:I,className:`h-8 w-8 p-0 ${c?"text-red-500":"text-white hover:text-red-500"}`,children:b.jsx(Se.Heart,{className:"h-4 w-4",fill:c?"currentColor":"none"})})})]}),b.jsx("h3",{className:"text-white font-medium mb-1 line-clamp-1",children:r}),u&&b.jsx("div",{className:"text-white/80 text-sm mb-1 line-clamp-2",children:b.jsx(xp,{content:u,className:"prose-invert prose-white"})})]})}),b.jsx("div",{className:"md:hidden absolute bottom-0 left-0 right-0 p-2 bg-gradient-to-t from-black/80 to-transparent",children:b.jsxs("div",{className:"flex items-center justify-between text-white",children:[b.jsx("span",{className:"text-xs font-medium truncate flex-1 mr-2",children:r}),O?b.jsx(Se.Play,{className:"w-3 h-3 flex-shrink-0 fill-white"}):b.jsx(Se.FileText,{className:"w-3 h-3 flex-shrink-0"})]})})]})})},oA=({id:n,pictureId:e,url:t,thumbnailUrl:r,title:s,author:i,authorAvatarUrl:o,authorId:a,likes:l,comments:c,isLiked:u,description:d,type:f,meta:p,onClick:m,onLike:y,onDelete:w,onEdit:k,created_at:x,showContent:S=!0,responsive:_,job:A,variant:T="grid",apiUrl:O})=>{const I=p7(f);return I==="tiktok"?b.jsx("div",{className:"w-full h-full bg-black flex justify-center aspect-[9/16] rounded-md overflow-hidden shadow-sm border relative",children:b.jsx("iframe",{src:t,className:"w-full h-full border-0",title:s})}):I===gi.VIDEO_INTERN?b.jsx(oCe,{videoId:e||n,videoUrl:t,thumbnailUrl:r||void 0,title:s,author:i,authorId:a,likes:l,comments:c,isLiked:u,description:d,onClick:()=>m==null?void 0:m(n),onLike:y,onDelete:w,showContent:S,created_at:x,authorAvatarUrl:o,job:A,variant:T,apiUrl:O}):I===gi.PAGE||I===gi.PAGE_EXTERNAL?b.jsx(cCe,{id:n,url:t,thumbnailUrl:r,title:s,author:i,authorId:a,authorAvatarUrl:o,likes:l,comments:c,isLiked:u,description:d,type:f,meta:p,onClick:()=>m==null?void 0:m(n),onLike:y,onDelete:w,showContent:S,created_at:x,responsive:_,variant:T,apiUrl:O}):b.jsx(pxe,{pictureId:e||n,image:t,title:s,author:i,authorId:a,likes:l,comments:c,isLiked:u,description:d,onClick:m,onLike:y,onDelete:w,onEdit:k,createdAt:x,authorAvatarUrl:o,showContent:S,responsive:_,variant:T,apiUrl:O})},uCe=()=>{const n=nl(U6e),e=nl(s=>s.setNavigationData),t=nl(s=>s.preloadImage),r=nl(s=>s.updateCurrentIndex);return{navigationData:n,setNavigationData:e,preloadImage:t,updateCurrentIndex:r}},dCe=U.createContext({orgSlug:null,isOrgContext:!1}),hCe=()=>U.useContext(dCe),fCe=U.createContext(null),NY=()=>{const n=U.useContext(fCe);if(!n)throw new Error("useFeedCache must be used within a FeedCacheProvider");return n},pCe=({source:n="home",sourceId:e,isOrgContext:t,orgSlug:r,enabled:s=!0,sortBy:i="latest",supabaseClient:o})=>{const{getCache:a,saveCache:l}=NY(),c=`${n}-${e||""}-${t?"org":"personal"}-${r||""}-${i}`,[u,d]=U.useState(()=>{const D=a(c);return D?D.posts:[]}),[f,p]=U.useState(()=>{const D=a(c);return D?D.page:0}),[m,y]=U.useState(()=>{const D=a(c);return D!==null?D.hasMore:!0}),[w,k]=U.useState(()=>!a(c)),[x,S]=U.useState(!1),[_,A]=U.useState(null),{fetchProfiles:T}=jU(),O=U.useRef(!!a(c));U.useEffect(()=>{const D=a(c);D?(d(D.posts),p(D.page),y(D.hasMore),k(!1),O.current=!0):(d([]),p(0),y(!0),k(!0),O.current=!1)},[n,e,t,r,c,a]),U.useEffect(()=>{if(!w&&u.length>0){const D=a(c);l(c,{posts:u,page:f,hasMore:m,scrollY:(D==null?void 0:D.scrollY)||0})}},[u,f,m,w,c,l,a]);const I=U.useCallback(async(D,W)=>{var re;if(!s){k(!1);return}W?S(!0):k(!0),A(null);let H=[];try{n==="home"&&!e&&D===0&&((re=window.__INITIAL_STATE__)!=null&&re.feed)?(H=window.__INITIAL_STATE__.feed,window.__INITIAL_STATE__.feed=void 0,console.log("Hydrated feed",H)):H=await Xpe(n,e,t,r,D,iH,o),H.length<iH?y(!1):y(!0);const ae=Qpe(H),de=mCe(ae,i);d(X=>{const se=W?[...X,...de]:de;return gCe(se,i)});const le=Array.from(new Set(ae.map(X=>X.user_id)));le.length>0&&T(le)}catch(ae){A(ae instanceof Error?ae:new Error("Unknown error fetching feed"))}finally{k(!1),S(!1)}},[n,e,t,r,s,T,i,o]);U.useEffect(()=>{if(O.current){O.current=!1;return}I(0,!1)},[I]);const R=U.useCallback(()=>{if(!m||x||w)return;const D=f+1;p(D),I(D,!0)},[m,x,w,f,I]);return{posts:u,loading:w,error:_,hasMore:m,loadMore:R,isFetchingMore:x}},mCe=(n,e)=>n.map(t=>{if(!t.pictures||t.pictures.length===0)return t;const r=t.pictures.filter(i=>i.visible!==!1);if(r.length===0)return t;let s;return e==="latest"?s=r.reduce((i,o)=>{const a=new Date(i.created_at||t.created_at).getTime();return new Date(o.created_at||t.created_at).getTime()>a?o:i}):s=[...r].sort((o,a)=>(o.position||0)-(a.position||0))[0],{...t,cover:s}}),gCe=(n,e)=>{const t=[...n];return e==="top"?t.sort((r,s)=>{const i=r.likes_count||0,o=s.likes_count||0;return o!==i?o-i:new Date(s.created_at).getTime()-new Date(r.created_at).getTime()}):t.sort((r,s)=>{const i=r.pictures&&r.pictures.length>0?Math.max(...r.pictures.map(a=>new Date(a.created_at||r.created_at).getTime())):new Date(r.created_at).getTime();return(s.pictures&&s.pictures.length>0?Math.max(...s.pictures.map(a=>new Date(a.created_at||s.created_at).getTime())):new Date(s.created_at).getTime())-i}),t},MY=({customPictures:n,customLoading:e,navigationSource:t="home",navigationSourceId:r,isOwner:s=!1,onFilesDrop:i,showVideos:o=!0,sortBy:a="latest",supabaseClient:l,apiUrl:c})=>{const{user:u}=du(),d=l||Yt,f=gp.useNavigate(),{setNavigationData:p,navigationData:m}=uCe(),{getCache:y,saveCache:w}=NY(),{orgSlug:k,isOrgContext:x}=hCe(),[S,_]=U.useState([]),[A,T]=U.useState(new Set),[O,I]=U.useState(!0),[R,D]=U.useState(!1),W=U.useRef(null),{posts:H,loading:re,hasMore:ae,loadMore:de,isFetchingMore:le}=pCe({source:t,sourceId:r,isOrgContext:x,orgSlug:k,sortBy:a,enabled:!n,supabaseClient:l}),X=U.useRef(null);U.useEffect(()=>{const ge=new IntersectionObserver(Ie=>{Ie[0].isIntersecting&&ae&&!re&&!le&&de()},{threshold:1});return X.current&&ge.observe(X.current),()=>{X.current&&ge.unobserve(X.current)}},[ae,re,le,de]),U.useEffect(()=>{let ge=[];if(n?(ge=n,I(e||!1)):(ge=Jpe(H,a),I(re)),_(ge),ge.length>0){const Ie={posts:ge.map(pt=>({id:pt.id,title:pt.title,image_url:pt.image_url,user_id:pt.user_id,type:p7(pt.type)})),currentIndex:0,source:t,sourceId:r};p(Ie)}},[H,re,n,e,t,r,p,a]);const se=`${t}-${r||""}-${x?"org":"personal"}-${k||""}`,J=U.useRef(!1);U.useLayoutEffect(()=>{if(S.length>0&&!J.current&&(!n||t==="widget"&&r)){const Ie=y(se);Ie&&Ie.scrollY>0&&window.scrollTo(0,Ie.scrollY),J.current=!0}},[S,se,y,n,t,r]),U.useEffect(()=>{J.current=!1},[se]);const $=U.useRef(window.scrollY);U.useEffect(()=>{const ge=()=>{$.current=window.scrollY};return window.addEventListener("scroll",ge),()=>window.removeEventListener("scroll",ge)},[]),U.useEffect(()=>()=>{if(!n||t==="widget"&&r){const Ie=y(se);Ie&&$.current>0&&w(se,{...Ie,scrollY:$.current})}},[se,y,w,n,t,r]);const ve=async()=>{window.location.reload()},Pe=async()=>{if(!(!u||S.length===0))try{const ge=S.map(j=>j.picture_id||j.id).filter(Boolean);if(ge.length===0)return;const{data:Ie,error:pt}=await d.from("likes").select("picture_id").eq("user_id",u.id).in("picture_id",ge);if(pt)throw pt;T(j=>{const Y=new Set(j);return Ie==null||Ie.forEach(ce=>Y.add(ce.picture_id)),Y})}catch(ge){console.error("Error fetching user likes:",ge)}},q=(ge,Ie,pt)=>{var j;if(Ie==="page-intern"){const Y=S.find(ce=>ce.id===ge);if(Y&&((j=Y.meta)!=null&&j.slug)){f(`/user/${Y.user_id}/pages/${Y.meta.slug}`);return}}m&&p({...m,currentIndex:pt}),f(`/post/${ge}`)},Xe=ge=>{ge.preventDefault(),ge.stopPropagation(),W.current&&clearTimeout(W.current),s&&i&&D(!0)},qe=ge=>{ge.preventDefault(),ge.stopPropagation(),W.current&&clearTimeout(W.current),W.current=window.setTimeout(()=>{D(!1)},100)},Ye=ge=>{ge.preventDefault(),ge.stopPropagation()},it=ge=>{if(ge.preventDefault(),ge.stopPropagation(),D(!1),!s||!i)return;const Ie=[...ge.dataTransfer.files].filter(pt=>pt.type.startsWith("image/"));Ie.length>0&&i(Ie)},We=async ge=>{try{const Ie=at.toast.loading("Loading post for editing..."),{data:pt,error:j}=await d.from("posts").select("*, pictures(*)").eq("id",ge).single();if(j)throw j;if(!pt.pictures||pt.pictures.length===0)throw new Error("No pictures found in post");const Y=pt.pictures.sort((ce,be)=>ce.position-be.position).map(ce=>({id:ce.id,path:ce.id,src:ce.image_url,title:ce.title,description:ce.description||"",selected:!1,realDatabaseId:ce.id}));at.toast.dismiss(Ie),f("/wizard",{state:{mode:"post",initialImages:Y,postTitle:pt.title,postDescription:pt.description,editingPostId:pt.id}})}catch(Ie){console.error("Error opening post editor:",Ie),at.toast.error("Failed to open post editor")}};if(U.useEffect(()=>{if(S.length>0&&n){const ge={posts:S.filter(Ie=>!CY(p7(Ie.type))).map(Ie=>({id:Ie.id,title:Ie.title,image_url:Ie.image_url,user_id:Ie.user_id})),currentIndex:0,source:t,sourceId:r};p(ge)}},[S,n,t,r,p]),O)return b.jsx("div",{className:"py-8",children:b.jsx("div",{className:"text-center text-muted-foreground",children:"Loading media..."})});const ot=S.length>0;return b.jsxs("div",{className:"w-full relative",children:[ot&&s&&i&&t==="collection"&&b.jsxs("div",{className:`my-4 border-2 border-dashed border-muted rounded-lg p-6 text-center text-muted-foreground transition-all ${R?"ring-4 ring-primary ring-offset-2 border-solid border-primary bg-primary/5":""} `,onDragEnter:Xe,onDragLeave:qe,onDragOver:Ye,onDrop:it,children:[b.jsx(Se.UploadCloud,{className:"mx-auto h-8 w-8 text-muted-foreground"}),b.jsx("p",{className:"mt-2 text-sm",children:"Drag and drop more images here to upload."})]}),ot?b.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:S.map((ge,Ie)=>{var ce,be;const pt=p7(ge.type),j=CY(pt),Y=ge.image_url;return j?b.jsxs("div",{className:"relative group",children:[b.jsx(oA,{id:ge.id,pictureId:ge.picture_id,url:Y,thumbnailUrl:ge.thumbnail_url,title:ge.title,author:void 0,authorAvatarUrl:void 0,authorId:ge.user_id,likes:ge.likes_count||0,comments:((ce=ge.comments[0])==null?void 0:ce.count)||0,isLiked:A.has(ge.picture_id||ge.id),description:ge.description,type:pt,meta:ge.meta,onClick:()=>q(ge.id,pt,Ie),onLike:Pe,onDelete:ve,onEdit:We,created_at:ge.created_at,job:ge.job,responsive:ge.responsive,apiUrl:c}),b.jsx("div",{className:"absolute top-2 right-2 flex items-center justify-center w-8 h-8 bg-black/50 rounded-full opacity-0 group-hover:opacity-100 transition-opacity",children:b.jsx(Se.Maximize,{className:"w-4 h-4 text-white"})})]},ge.id):b.jsx(oA,{id:ge.id,pictureId:ge.picture_id,url:Y,thumbnailUrl:ge.thumbnail_url,title:ge.title,author:void 0,authorAvatarUrl:void 0,authorId:ge.user_id,likes:ge.likes_count||0,comments:((be=ge.comments[0])==null?void 0:be.count)||0,isLiked:A.has(ge.picture_id||ge.id),description:ge.description,type:pt,meta:ge.meta,onClick:()=>q(ge.id,pt,Ie),onLike:Pe,onDelete:ve,onEdit:We,created_at:ge.created_at,job:ge.job,responsive:ge.responsive,apiUrl:c},ge.id)})}):s&&t==="collection"&&i?b.jsx("div",{className:"py-8",onDragEnter:Xe,onDragLeave:qe,onDragOver:Ye,onDrop:it,children:b.jsxs("div",{className:`border-2 border-dashed border-muted rounded-lg p-12 text-center text-muted-foreground transition-all ${R?"ring-4 ring-primary ring-offset-2 border-solid border-primary bg-primary/5":""} `,children:[b.jsx(Se.UploadCloud,{className:"mx-auto h-12 w-12 text-muted-foreground"}),b.jsx("h3",{className:"mt-4 text-lg font-semibold",children:"This collection is empty"}),b.jsx("p",{className:"mt-2",children:"Drag and drop images here to get started."})]})}):b.jsx("div",{className:"py-8",children:b.jsxs("div",{className:"text-center text-muted-foreground",children:[b.jsx("p",{className:"text-lg",children:"No media yet!"}),b.jsx("p",{children:"Be the first to share content with the community."})]})}),b.jsx("div",{ref:X,className:"h-10 w-full flex items-center justify-center p-4",children:le&&b.jsx("div",{className:"animate-spin rounded-full h-6 w-6 border-b-2 border-gray-900 dark:border-white"})})]})};var no=(n=>(n.docTypeError="docTypeError",n.contextNotFound="contextNotFound",n.timerNotFound="timerNotFound",n.ctxCallOutOfScope="ctxCallOutOfScope",n.createNodeInParserFail="createNodeInParserFail",n.stackOverFlow="stackOverFlow",n.parserMatchError="parserMatchError",n.serializerMatchError="serializerMatchError",n.getAtomFromSchemaFail="getAtomFromSchemaFail",n.expectDomTypeError="expectDomTypeError",n.callCommandBeforeEditorView="callCommandBeforeEditorView",n.missingRootElement="missingRootElement",n.missingNodeInSchema="missingNodeInSchema",n.missingMarkInSchema="missingMarkInSchema",n.ctxNotBind="ctxNotBind",n.missingYjsDoc="missingYjsDoc",n))(no||{});class Vo extends Error{constructor(e,t){super(t),this.name="MilkdownError",this.code=e}}const yCe=(n,e)=>typeof e=="function"?"[Function]":e,m7=n=>JSON.stringify(n,yCe);function vCe(n){return new Vo(no.docTypeError,`Doc type error, unsupported type: ${m7(n)}`)}function bCe(n){return new Vo(no.contextNotFound,`Context "${n}" not found, do you forget to inject it?`)}function wCe(n){return new Vo(no.timerNotFound,`Timer "${n}" not found, do you forget to record it?`)}function g7(){return new Vo(no.ctxCallOutOfScope,"Should not call a context out of the plugin.")}function xCe(n,e,t){const s=`Cannot create node for ${"name"in n?n.name:n}`,i=u=>{if(u==null)return"null";if(Array.isArray(u))return`[${u.map(i).join(", ")}]`;if(typeof u=="object")return"toJSON"in u&&typeof u.toJSON=="function"?JSON.stringify(u.toJSON()):"spec"in u?JSON.stringify(u.spec):JSON.stringify(u);if(typeof u=="string"||typeof u=="number"||typeof u=="boolean")return JSON.stringify(u);if(typeof u=="function")return`[Function: ${u.name||"anonymous"}]`;try{return String(u)}catch{return"[Unserializable]"}},o=["[Description]",s],a=["[Attributes]",e],l=["[Content]",(t??[]).map(u=>u?typeof u=="object"&&"type"in u?`${u}`:i(u):"null")],c=[o,a,l].reduce((u,[d,f])=>{const p=`${d}: ${i(f)}.`;return u.concat(p)},[]);return new Vo(no.createNodeInParserFail,c.join(` +`))}function OY(){return new Vo(no.stackOverFlow,"Stack over flow, cannot pop on an empty stack.")}function kCe(n){return new Vo(no.parserMatchError,`Cannot match target parser for node: ${m7(n)}.`)}function CCe(n){return new Vo(no.serializerMatchError,`Cannot match target serializer for node: ${m7(n)}.`)}function SCe(n,e){return new Vo(no.getAtomFromSchemaFail,`Cannot get ${n}: ${e} from schema.`)}function ll(n){return new Vo(no.expectDomTypeError,`Expect to be a dom, but get: ${m7(n)}.`)}function aA(){return new Vo(no.callCommandBeforeEditorView,"You're trying to call a command before editor view initialized, make sure to get commandManager from ctx after editor view has been initialized")}function ECe(n){return new Vo(no.missingNodeInSchema,`Missing node in schema, milkdown cannot find "${n}" in schema.`)}function _Ce(n){return new Vo(no.missingMarkInSchema,`Missing mark in schema, milkdown cannot find "${n}" in schema.`)}class PY{constructor(){this.sliceMap=new Map,this.get=e=>{const t=typeof e=="string"?[...this.sliceMap.values()].find(r=>r.type.name===e):this.sliceMap.get(e.id);if(!t){const r=typeof e=="string"?e:e.name;throw bCe(r)}return t},this.remove=e=>{const t=typeof e=="string"?[...this.sliceMap.values()].find(r=>r.type.name===e):this.sliceMap.get(e.id);t&&this.sliceMap.delete(t.type.id)},this.has=e=>typeof e=="string"?[...this.sliceMap.values()].some(t=>t.type.name===e):this.sliceMap.has(e.id)}}let TCe=(boe=class{constructor(e,t,r){N(this,Ll);N(this,Rd);N(this,lv);M(this,Ll,[]),M(this,lv,()=>{h(this,Ll).forEach(s=>s(h(this,Rd)))}),this.set=s=>{M(this,Rd,s),h(this,lv).call(this)},this.get=()=>h(this,Rd),this.update=s=>{M(this,Rd,s(h(this,Rd))),h(this,lv).call(this)},this.type=r,M(this,Rd,t),e.set(r.id,this)}on(e){return h(this,Ll).push(e),()=>{M(this,Ll,h(this,Ll).filter(t=>t!==e))}}once(e){const t=this.on(r=>{e(r),t()});return t}off(e){M(this,Ll,h(this,Ll).filter(t=>t!==e))}offAll(){M(this,Ll,[])}},Ll=new WeakMap,Rd=new WeakMap,lv=new WeakMap,boe);class ACe{constructor(e,t){this.id=Symbol(`Context-${t}`),this.name=t,this._defaultValue=e,this._typeInfo=()=>{throw g7()}}create(e,t=this._defaultValue){return new TCe(e,t,this)}}const kn=(n,e)=>new ACe(n,e);class NCe{constructor(e,t,r){N(this,Iw);N(this,Dw);N(this,Rw);N(this,Pm);N(this,cv);N(this,Kf);N(this,uv);N(this,dv);N(this,hv);M(this,Pm,new Set),M(this,cv,new Set),M(this,Kf,new Map),M(this,uv,new Map),this.read=()=>({metadata:h(this,Iw),injectedSlices:[...h(this,Pm)].map(s=>({name:typeof s=="string"?s:s.name,value:h(this,dv).call(this,s)})),consumedSlices:[...h(this,cv)].map(s=>({name:typeof s=="string"?s:s.name,value:h(this,dv).call(this,s)})),recordedTimers:[...h(this,Kf)].map(([s,{duration:i}])=>({name:s.name,duration:i,status:h(this,hv).call(this,s)})),waitTimers:[...h(this,uv)].map(([s,{duration:i}])=>({name:s.name,duration:i,status:h(this,hv).call(this,s)}))}),this.onRecord=s=>{h(this,Kf).set(s,{start:Date.now(),duration:0})},this.onClear=s=>{h(this,Kf).delete(s)},this.onDone=s=>{const i=h(this,Kf).get(s);i&&(i.duration=Date.now()-i.start)},this.onWait=(s,i)=>{const o=Date.now();i.finally(()=>{h(this,uv).set(s,{duration:Date.now()-o})}).catch(console.error)},this.onInject=s=>{h(this,Pm).add(s)},this.onRemove=s=>{h(this,Pm).delete(s)},this.onUse=s=>{h(this,cv).add(s)},M(this,dv,s=>h(this,Dw).get(s).get()),M(this,hv,s=>h(this,Rw).get(s).status),M(this,Dw,e),M(this,Rw,t),M(this,Iw,r)}}Iw=new WeakMap,Dw=new WeakMap,Rw=new WeakMap,Pm=new WeakMap,cv=new WeakMap,Kf=new WeakMap,uv=new WeakMap,dv=new WeakMap,hv=new WeakMap;const sD=class sD{constructor(e,t,r){N(this,$d);N(this,Ld);N(this,$w);N(this,ja);this.produce=s=>s&&Object.keys(s).length?new sD(h(this,$d),h(this,Ld),{...s}):this,this.inject=(s,i)=>{var a;const o=s.create(h(this,$d).sliceMap);return i!=null&&o.set(i),(a=h(this,ja))==null||a.onInject(s),this},this.remove=s=>{var i;return h(this,$d).remove(s),(i=h(this,ja))==null||i.onRemove(s),this},this.record=s=>{var i;return s.create(h(this,Ld).store),(i=h(this,ja))==null||i.onRecord(s),this},this.clearTimer=s=>{var i;return h(this,Ld).remove(s),(i=h(this,ja))==null||i.onClear(s),this},this.isInjected=s=>h(this,$d).has(s),this.isRecorded=s=>h(this,Ld).has(s),this.use=s=>{var i;return(i=h(this,ja))==null||i.onUse(s),h(this,$d).get(s)},this.get=s=>this.use(s).get(),this.set=(s,i)=>this.use(s).set(i),this.update=(s,i)=>this.use(s).update(i),this.timer=s=>h(this,Ld).get(s),this.done=s=>{var i;this.timer(s).done(),(i=h(this,ja))==null||i.onDone(s)},this.wait=s=>{var o;const i=this.timer(s).start();return(o=h(this,ja))==null||o.onWait(s,i),i},this.waitTimers=async s=>{await Promise.all(this.get(s).map(i=>this.wait(i)))},M(this,$d,e),M(this,Ld,t),M(this,$w,r),r&&M(this,ja,new NCe(e,t,r))}get meta(){return h(this,$w)}get inspector(){return h(this,ja)}};$d=new WeakMap,Ld=new WeakMap,$w=new WeakMap,ja=new WeakMap;let lA=sD;class MCe{constructor(){this.store=new Map,this.get=e=>{const t=this.store.get(e.id);if(!t)throw wCe(e.name);return t},this.remove=e=>{this.store.delete(e.id)},this.has=e=>this.store.has(e.id)}}class OCe{constructor(e,t){N(this,fv);N(this,Yf);N(this,pv);N(this,Fd);N(this,mv);N(this,Lw);M(this,fv,null),M(this,Yf,null),M(this,Fd,"pending"),this.start=()=>(h(this,fv)??M(this,fv,new Promise((r,s)=>{M(this,Yf,i=>{i instanceof CustomEvent&&i.detail.id===h(this,pv)&&(M(this,Fd,"resolved"),h(this,mv).call(this),i.stopImmediatePropagation(),r())}),h(this,Lw).call(this,()=>{h(this,Fd)==="pending"&&M(this,Fd,"rejected"),h(this,mv).call(this),s(new Error(`Timing ${this.type.name} timeout.`))}),M(this,Fd,"pending"),addEventListener(this.type.name,h(this,Yf))})),h(this,fv)),this.done=()=>{const r=new CustomEvent(this.type.name,{detail:{id:h(this,pv)}});dispatchEvent(r)},M(this,mv,()=>{h(this,Yf)&&removeEventListener(this.type.name,h(this,Yf))}),M(this,Lw,r=>{setTimeout(()=>{r()},this.type.timeout)}),M(this,pv,Symbol(t.name)),this.type=t,e.set(t.id,this)}get status(){return h(this,Fd)}}fv=new WeakMap,Yf=new WeakMap,pv=new WeakMap,Fd=new WeakMap,mv=new WeakMap,Lw=new WeakMap;class PCe{constructor(e,t=3e3){this.create=r=>new OCe(r,this),this.id=Symbol(`Timer-${e}`),this.name=e,this.timeout=t}}const uc=(n,e=3e3)=>new PCe(n,e);function ri(n){this.content=n}ri.prototype={constructor:ri,find:function(n){for(var e=0;e<this.content.length;e+=2)if(this.content[e]===n)return e;return-1},get:function(n){var e=this.find(n);return e==-1?void 0:this.content[e+1]},update:function(n,e,t){var r=t&&t!=n?this.remove(t):this,s=r.find(n),i=r.content.slice();return s==-1?i.push(t||n,e):(i[s+1]=e,t&&(i[s]=t)),new ri(i)},remove:function(n){var e=this.find(n);if(e==-1)return this;var t=this.content.slice();return t.splice(e,2),new ri(t)},addToStart:function(n,e){return new ri([n,e].concat(this.remove(n).content))},addToEnd:function(n,e){var t=this.remove(n).content.slice();return t.push(n,e),new ri(t)},addBefore:function(n,e,t){var r=this.remove(e),s=r.content.slice(),i=r.find(n);return s.splice(i==-1?s.length:i,0,e,t),new ri(s)},forEach:function(n){for(var e=0;e<this.content.length;e+=2)n(this.content[e],this.content[e+1])},prepend:function(n){return n=ri.from(n),n.size?new ri(n.content.concat(this.subtract(n).content)):this},append:function(n){return n=ri.from(n),n.size?new ri(this.subtract(n).content.concat(n.content)):this},subtract:function(n){var e=this;n=ri.from(n);for(var t=0;t<n.content.length;t+=2)e=e.remove(n.content[t]);return e},toObject:function(){var n={};return this.forEach(function(e,t){n[e]=t}),n},get size(){return this.content.length>>1}},ri.from=function(n){if(n instanceof ri)return n;var e=[];if(n)for(var t in n)e.push(t,n[t]);return new ri(e)};function IY(n,e,t){for(let r=0;;r++){if(r==n.childCount||r==e.childCount)return n.childCount==e.childCount?null:t;let s=n.child(r),i=e.child(r);if(s==i){t+=s.nodeSize;continue}if(!s.sameMarkup(i))return t;if(s.isText&&s.text!=i.text){for(let o=0;s.text[o]==i.text[o];o++)t++;return t}if(s.content.size||i.content.size){let o=IY(s.content,i.content,t+1);if(o!=null)return o}t+=s.nodeSize}}function DY(n,e,t,r){for(let s=n.childCount,i=e.childCount;;){if(s==0||i==0)return s==i?null:{a:t,b:r};let o=n.child(--s),a=e.child(--i),l=o.nodeSize;if(o==a){t-=l,r-=l;continue}if(!o.sameMarkup(a))return{a:t,b:r};if(o.isText&&o.text!=a.text){let c=0,u=Math.min(o.text.length,a.text.length);for(;c<u&&o.text[o.text.length-c-1]==a.text[a.text.length-c-1];)c++,t--,r--;return{a:t,b:r}}if(o.content.size||a.content.size){let c=DY(o.content,a.content,t-1,r-1);if(c)return c}t-=l,r-=l}}let $e=class Xi{constructor(e,t){if(this.content=e,this.size=t||0,t==null)for(let r=0;r<e.length;r++)this.size+=e[r].nodeSize}nodesBetween(e,t,r,s=0,i){for(let o=0,a=0;a<t;o++){let l=this.content[o],c=a+l.nodeSize;if(c>e&&r(l,s+a,i||null,o)!==!1&&l.content.size){let u=a+1;l.nodesBetween(Math.max(0,e-u),Math.min(l.content.size,t-u),r,s+u)}a=c}}descendants(e){this.nodesBetween(0,this.size,e)}textBetween(e,t,r,s){let i="",o=!0;return this.nodesBetween(e,t,(a,l)=>{let c=a.isText?a.text.slice(Math.max(e,l)-l,t-l):a.isLeaf?s?typeof s=="function"?s(a):s:a.type.spec.leafText?a.type.spec.leafText(a):"":"";a.isBlock&&(a.isLeaf&&c||a.isTextblock)&&r&&(o?o=!1:i+=r),i+=c},0),i}append(e){if(!e.size)return this;if(!this.size)return e;let t=this.lastChild,r=e.firstChild,s=this.content.slice(),i=0;for(t.isText&&t.sameMarkup(r)&&(s[s.length-1]=t.withText(t.text+r.text),i=1);i<e.content.length;i++)s.push(e.content[i]);return new Xi(s,this.size+e.size)}cut(e,t=this.size){if(e==0&&t==this.size)return this;let r=[],s=0;if(t>e)for(let i=0,o=0;o<t;i++){let a=this.content[i],l=o+a.nodeSize;l>e&&((o<e||l>t)&&(a.isText?a=a.cut(Math.max(0,e-o),Math.min(a.text.length,t-o)):a=a.cut(Math.max(0,e-o-1),Math.min(a.content.size,t-o-1))),r.push(a),s+=a.nodeSize),o=l}return new Xi(r,s)}cutByIndex(e,t){return e==t?Xi.empty:e==0&&t==this.content.length?this:new Xi(this.content.slice(e,t))}replaceChild(e,t){let r=this.content[e];if(r==t)return this;let s=this.content.slice(),i=this.size+t.nodeSize-r.nodeSize;return s[e]=t,new Xi(s,i)}addToStart(e){return new Xi([e].concat(this.content),this.size+e.nodeSize)}addToEnd(e){return new Xi(this.content.concat(e),this.size+e.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 new RangeError("Index "+e+" out of range for "+this);return t}maybeChild(e){return this.content[e]||null}forEach(e){for(let t=0,r=0;t<this.content.length;t++){let s=this.content[t];e(s,r,t),r+=s.nodeSize}}findDiffStart(e,t=0){return IY(this,e,t)}findDiffEnd(e,t=this.size,r=e.size){return DY(this,e,t,r)}findIndex(e){if(e==0)return y7(0,e);if(e==this.size)return y7(this.content.length,e);if(e>this.size||e<0)throw new RangeError(`Position ${e} outside of fragment (${this})`);for(let t=0,r=0;;t++){let s=this.child(t),i=r+s.nodeSize;if(i>=e)return i==e?y7(t+1,i):y7(t,r);r=i}}toString(){return"<"+this.toStringInner()+">"}toStringInner(){return this.content.join(", ")}toJSON(){return this.content.length?this.content.map(e=>e.toJSON()):null}static fromJSON(e,t){if(!t)return Xi.empty;if(!Array.isArray(t))throw new RangeError("Invalid input for Fragment.fromJSON");return new Xi(t.map(e.nodeFromJSON))}static fromArray(e){if(!e.length)return Xi.empty;let t,r=0;for(let s=0;s<e.length;s++){let i=e[s];r+=i.nodeSize,s&&i.isText&&e[s-1].sameMarkup(i)?(t||(t=e.slice(0,s)),t[t.length-1]=i.withText(t[t.length-1].text+i.text)):t&&t.push(i)}return new Xi(t||e,r)}static from(e){if(!e)return Xi.empty;if(e instanceof Xi)return e;if(Array.isArray(e))return this.fromArray(e);if(e.attrs)return new Xi([e],e.nodeSize);throw new RangeError("Can not convert "+e+" to a Fragment"+(e.nodesBetween?" (looks like multiple versions of prosemirror-model were loaded)":""))}};$e.empty=new $e([],0);const cA={index:0,offset:0};function y7(n,e){return cA.index=n,cA.offset=e,cA}function v7(n,e){if(n===e)return!0;if(!(n&&typeof n=="object")||!(e&&typeof e=="object"))return!1;let t=Array.isArray(n);if(Array.isArray(e)!=t)return!1;if(t){if(n.length!=e.length)return!1;for(let r=0;r<n.length;r++)if(!v7(n[r],e[r]))return!1}else{for(let r in n)if(!(r in e)||!v7(n[r],e[r]))return!1;for(let r in e)if(!(r in n))return!1}return!0}class Ln{constructor(e,t){this.type=e,this.attrs=t}addToSet(e){let t,r=!1;for(let s=0;s<e.length;s++){let i=e[s];if(this.eq(i))return e;if(this.type.excludes(i.type))t||(t=e.slice(0,s));else{if(i.type.excludes(this.type))return e;!r&&i.type.rank>this.type.rank&&(t||(t=e.slice(0,s)),t.push(this),r=!0),t&&t.push(i)}}return t||(t=e.slice()),r||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&&v7(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 new RangeError("Invalid input for Mark.fromJSON");let r=e.marks[t.type];if(!r)throw new RangeError(`There is no mark type ${t.type} in this schema`);let s=r.create(t.attrs);return r.checkAttrs(s.attrs),s}static sameSet(e,t){if(e==t)return!0;if(e.length!=t.length)return!1;for(let r=0;r<e.length;r++)if(!e[r].eq(t[r]))return!1;return!0}static setFrom(e){if(!e||Array.isArray(e)&&e.length==0)return Ln.none;if(e instanceof Ln)return[e];let t=e.slice();return t.sort((r,s)=>r.type.rank-s.type.rank),t}}Ln.none=[];class b7 extends Error{}class He{constructor(e,t,r){this.content=e,this.openStart=t,this.openEnd=r}get size(){return this.content.size-this.openStart-this.openEnd}insertAt(e,t){let r=$Y(this.content,e+this.openStart,t);return r&&new He(r,this.openStart,this.openEnd)}removeBetween(e,t){return new He(RY(this.content,e+this.openStart,t+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(e,t){if(!t)return He.empty;let r=t.openStart||0,s=t.openEnd||0;if(typeof r!="number"||typeof s!="number")throw new RangeError("Invalid input for Slice.fromJSON");return new He($e.fromJSON(e,t.content),r,s)}static maxOpen(e,t=!0){let r=0,s=0;for(let i=e.firstChild;i&&!i.isLeaf&&(t||!i.type.spec.isolating);i=i.firstChild)r++;for(let i=e.lastChild;i&&!i.isLeaf&&(t||!i.type.spec.isolating);i=i.lastChild)s++;return new He(e,r,s)}}He.empty=new He($e.empty,0,0);function RY(n,e,t){let{index:r,offset:s}=n.findIndex(e),i=n.maybeChild(r),{index:o,offset:a}=n.findIndex(t);if(s==e||i.isText){if(a!=t&&!n.child(o).isText)throw new RangeError("Removing non-flat range");return n.cut(0,e).append(n.cut(t))}if(r!=o)throw new RangeError("Removing non-flat range");return n.replaceChild(r,i.copy(RY(i.content,e-s-1,t-s-1)))}function $Y(n,e,t,r){let{index:s,offset:i}=n.findIndex(e),o=n.maybeChild(s);if(i==e||o.isText)return r&&!r.canReplace(s,s,t)?null:n.cut(0,e).append(t).append(n.cut(e));let a=$Y(o.content,e-i-1,t,o);return a&&n.replaceChild(s,o.copy(a))}function ICe(n,e,t){if(t.openStart>n.depth)throw new b7("Inserted content deeper than insertion position");if(n.depth-t.openStart!=e.depth-t.openEnd)throw new b7("Inconsistent open depths");return LY(n,e,t,0)}function LY(n,e,t,r){let s=n.index(r),i=n.node(r);if(s==e.index(r)&&r<n.depth-t.openStart){let o=LY(n,e,t,r+1);return i.copy(i.content.replaceChild(s,o))}else if(t.content.size)if(!t.openStart&&!t.openEnd&&n.depth==r&&e.depth==r){let o=n.parent,a=o.content;return Xp(o,a.cut(0,n.parentOffset).append(t.content).append(a.cut(e.parentOffset)))}else{let{start:o,end:a}=DCe(t,n);return Xp(i,jY(n,o,a,e,r))}else return Xp(i,w7(n,e,r))}function FY(n,e){if(!e.type.compatibleContent(n.type))throw new b7("Cannot join "+e.type.name+" onto "+n.type.name)}function uA(n,e,t){let r=n.node(t);return FY(r,e.node(t)),r}function Zp(n,e){let t=e.length-1;t>=0&&n.isText&&n.sameMarkup(e[t])?e[t]=n.withText(e[t].text+n.text):e.push(n)}function R2(n,e,t,r){let s=(e||n).node(t),i=0,o=e?e.index(t):s.childCount;n&&(i=n.index(t),n.depth>t?i++:n.textOffset&&(Zp(n.nodeAfter,r),i++));for(let a=i;a<o;a++)Zp(s.child(a),r);e&&e.depth==t&&e.textOffset&&Zp(e.nodeBefore,r)}function Xp(n,e){return n.type.checkContent(e),n.copy(e)}function jY(n,e,t,r,s){let i=n.depth>s&&uA(n,e,s+1),o=r.depth>s&&uA(t,r,s+1),a=[];return R2(null,n,s,a),i&&o&&e.index(s)==t.index(s)?(FY(i,o),Zp(Xp(i,jY(n,e,t,r,s+1)),a)):(i&&Zp(Xp(i,w7(n,e,s+1)),a),R2(e,t,s,a),o&&Zp(Xp(o,w7(t,r,s+1)),a)),R2(r,null,s,a),new $e(a)}function w7(n,e,t){let r=[];if(R2(null,n,t,r),n.depth>t){let s=uA(n,e,t+1);Zp(Xp(s,w7(n,e,t+1)),r)}return R2(e,null,t,r),new $e(r)}function DCe(n,e){let t=e.depth-n.openStart,s=e.node(t).copy(n.content);for(let i=t-1;i>=0;i--)s=e.node(i).copy($e.from(s));return{start:s.resolveNoCache(n.openStart+t),end:s.resolveNoCache(s.content.size-n.openEnd-t)}}class $2{constructor(e,t,r){this.pos=e,this.path=t,this.parentOffset=r,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 new 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 new 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 r=this.pos-this.path[this.path.length-1],s=e.child(t);return r?e.child(t).cut(r):s}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 r=this.path[t*3],s=t==0?0:this.path[t*3-1]+1;for(let i=0;i<e;i++)s+=r.child(i).nodeSize;return s}marks(){let e=this.parent,t=this.index();if(e.content.size==0)return Ln.none;if(this.textOffset)return e.child(t).marks;let r=e.maybeChild(t-1),s=e.maybeChild(t);if(!r){let a=r;r=s,s=a}let i=r.marks;for(var o=0;o<i.length;o++)i[o].type.spec.inclusive===!1&&(!s||!i[o].isInSet(s.marks))&&(i=i[o--].removeFromSet(i));return i}marksAcross(e){let t=this.parent.maybeChild(this.index());if(!t||!t.isInline)return null;let r=t.marks,s=e.parent.maybeChild(e.index());for(var i=0;i<r.length;i++)r[i].type.spec.inclusive===!1&&(!s||!r[i].isInSet(s.marks))&&(r=r[i--].removeFromSet(r));return r}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 r=this.depth-(this.parent.inlineContent||this.pos==e.pos?1:0);r>=0;r--)if(e.pos<=this.end(r)&&(!t||t(this.node(r))))return new VY(this,e,r);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(e,t){if(!(t>=0&&t<=e.content.size))throw new RangeError("Position "+t+" out of range");let r=[],s=0,i=t;for(let o=e;;){let{index:a,offset:l}=o.content.findIndex(i),c=i-l;if(r.push(o,a,s+l),!c||(o=o.child(a),o.isText))break;i=c-1,s+=l+1}return new $2(t,r,i)}static resolveCached(e,t){let r=BY.get(e);if(r)for(let i=0;i<r.elts.length;i++){let o=r.elts[i];if(o.pos==t)return o}else BY.set(e,r=new RCe);let s=r.elts[r.i]=$2.resolve(e,t);return r.i=(r.i+1)%$Ce,s}}class RCe{constructor(){this.elts=[],this.i=0}}const $Ce=12,BY=new WeakMap;class VY{constructor(e,t,r){this.$from=e,this.$to=t,this.depth=r}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)}}const LCe=Object.create(null);let Nu=class l${constructor(e,t,r,s=Ln.none){this.type=e,this.attrs=t,this.marks=s,this.content=r||$e.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,r,s=0){this.content.nodesBetween(e,t,r,s,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,r,s){return this.content.textBetween(e,t,r,s)}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,r){return this.type==e&&v7(this.attrs,t||e.defaultAttrs||LCe)&&Ln.sameSet(this.marks,r||Ln.none)}copy(e=null){return e==this.content?this:new l$(this.type,this.attrs,e,this.marks)}mark(e){return e==this.marks?this:new l$(this.type,this.attrs,this.content,e)}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,r=!1){if(e==t)return He.empty;let s=this.resolve(e),i=this.resolve(t),o=r?0:s.sharedDepth(t),a=s.start(o),c=s.node(o).content.cut(s.pos-a,i.pos-a);return new He(c,s.depth-o,i.depth-o)}replace(e,t,r){return ICe(this.resolve(e),this.resolve(t),r)}nodeAt(e){for(let t=this;;){let{index:r,offset:s}=t.content.findIndex(e);if(t=t.maybeChild(r),!t)return null;if(s==e||t.isText)return t;e-=s+1}}childAfter(e){let{index:t,offset:r}=this.content.findIndex(e);return{node:this.content.maybeChild(t),index:t,offset:r}}childBefore(e){if(e==0)return{node:null,index:0,offset:0};let{index:t,offset:r}=this.content.findIndex(e);if(r<e)return{node:this.content.child(t),index:t,offset:r};let s=this.content.child(t-1);return{node:s,index:t-1,offset:r-s.nodeSize}}resolve(e){return $2.resolveCached(this,e)}resolveNoCache(e){return $2.resolve(this,e)}rangeHasMark(e,t,r){let s=!1;return t>e&&this.nodesBetween(e,t,i=>(r.isInSet(i.marks)&&(s=!0),!s)),s}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()+")"),zY(this.marks,e)}contentMatchAt(e){let t=this.type.contentMatch.matchFragment(this.content,0,e);if(!t)throw new Error("Called contentMatchAt on a node with invalid content");return t}canReplace(e,t,r=$e.empty,s=0,i=r.childCount){let o=this.contentMatchAt(e).matchFragment(r,s,i),a=o&&o.matchFragment(this.content,t);if(!a||!a.validEnd)return!1;for(let l=s;l<i;l++)if(!this.type.allowsMarks(r.child(l).marks))return!1;return!0}canReplaceWith(e,t,r,s){if(s&&!this.type.allowsMarks(s))return!1;let i=this.contentMatchAt(e).matchType(r),o=i&&i.matchFragment(this.content,t);return o?o.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=Ln.none;for(let t=0;t<this.marks.length;t++){let r=this.marks[t];r.type.checkAttrs(r.attrs),e=r.addToSet(e)}if(!Ln.sameSet(e,this.marks))throw new RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map(t=>t.type.name)}`);this.content.forEach(t=>t.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(t=>t.toJSON())),e}static fromJSON(e,t){if(!t)throw new RangeError("Invalid input for Node.fromJSON");let r;if(t.marks){if(!Array.isArray(t.marks))throw new RangeError("Invalid mark data for Node.fromJSON");r=t.marks.map(e.markFromJSON)}if(t.type=="text"){if(typeof t.text!="string")throw new RangeError("Invalid text node in JSON");return e.text(t.text,r)}let s=$e.fromJSON(e,t.content),i=e.nodeType(t.type).create(t.attrs,s,r);return i.type.checkAttrs(i.attrs),i}};Nu.prototype.text=void 0;let FCe=class c$ extends Nu{constructor(e,t,r,s){if(super(e,t,null,s),!r)throw new RangeError("Empty text nodes are not allowed");this.text=r}toString(){return this.type.spec.toDebugString?this.type.spec.toDebugString(this):zY(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(e){return e==this.marks?this:new c$(this.type,this.attrs,this.text,e)}withText(e){return e==this.text?this:new c$(this.type,this.attrs,e,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 zY(n,e){for(let t=n.length-1;t>=0;t--)e=n[t].type.name+"("+e+")";return e}class Jp{constructor(e){this.validEnd=e,this.next=[],this.wrapCache=[]}static parse(e,t){let r=new jCe(e,t);if(r.next==null)return Jp.empty;let s=HY(r);r.next&&r.err("Unexpected trailing text");let i=WCe(UCe(s));return GCe(i,r),i}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,r=e.childCount){let s=this;for(let i=t;s&&i<r;i++)s=s.matchType(e.child(i).type);return s}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 r=0;r<e.next.length;r++)if(this.next[t].type==e.next[r].type)return!0;return!1}fillBefore(e,t=!1,r=0){let s=[this];function i(o,a){let l=o.matchFragment(e,r);if(l&&(!t||l.validEnd))return $e.from(a.map(c=>c.createAndFill()));for(let c=0;c<o.next.length;c++){let{type:u,next:d}=o.next[c];if(!(u.isText||u.hasRequiredAttrs())&&s.indexOf(d)==-1){s.push(d);let f=i(d,a.concat(u));if(f)return f}}return null}return i(this,[])}findWrapping(e){for(let r=0;r<this.wrapCache.length;r+=2)if(this.wrapCache[r]==e)return this.wrapCache[r+1];let t=this.computeWrapping(e);return this.wrapCache.push(e,t),t}computeWrapping(e){let t=Object.create(null),r=[{match:this,type:null,via:null}];for(;r.length;){let s=r.shift(),i=s.match;if(i.matchType(e)){let o=[];for(let a=s;a.type;a=a.via)o.push(a.type);return o.reverse()}for(let o=0;o<i.next.length;o++){let{type:a,next:l}=i.next[o];!a.isLeaf&&!a.hasRequiredAttrs()&&!(a.name in t)&&(!s.type||l.validEnd)&&(r.push({match:a.contentMatch,type:a,via:s}),t[a.name]=!0)}}return null}get edgeCount(){return this.next.length}edge(e){if(e>=this.next.length)throw new RangeError(`There's no ${e}th edge in this content match`);return this.next[e]}toString(){let e=[];function t(r){e.push(r);for(let s=0;s<r.next.length;s++)e.indexOf(r.next[s].next)==-1&&t(r.next[s].next)}return t(this),e.map((r,s)=>{let i=s+(r.validEnd?"*":" ")+" ";for(let o=0;o<r.next.length;o++)i+=(o?", ":"")+r.next[o].type.name+"->"+e.indexOf(r.next[o].next);return i}).join(` +`)}}Jp.empty=new Jp(!0);class jCe{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 new SyntaxError(e+" (in content expression '"+this.string+"')")}}function HY(n){let e=[];do e.push(BCe(n));while(n.eat("|"));return e.length==1?e[0]:{type:"choice",exprs:e}}function BCe(n){let e=[];do e.push(VCe(n));while(n.next&&n.next!=")"&&n.next!="|");return e.length==1?e[0]:{type:"seq",exprs:e}}function VCe(n){let e=qCe(n);for(;;)if(n.eat("+"))e={type:"plus",expr:e};else if(n.eat("*"))e={type:"star",expr:e};else if(n.eat("?"))e={type:"opt",expr:e};else if(n.eat("{"))e=zCe(n,e);else break;return e}function qY(n){/\D/.test(n.next)&&n.err("Expected number, got '"+n.next+"'");let e=Number(n.next);return n.pos++,e}function zCe(n,e){let t=qY(n),r=t;return n.eat(",")&&(n.next!="}"?r=qY(n):r=-1),n.eat("}")||n.err("Unclosed braced range"),{type:"range",min:t,max:r,expr:e}}function HCe(n,e){let t=n.nodeTypes,r=t[e];if(r)return[r];let s=[];for(let i in t){let o=t[i];o.isInGroup(e)&&s.push(o)}return s.length==0&&n.err("No node type or group '"+e+"' found"),s}function qCe(n){if(n.eat("(")){let e=HY(n);return n.eat(")")||n.err("Missing closing paren"),e}else if(/\W/.test(n.next))n.err("Unexpected token '"+n.next+"'");else{let e=HCe(n,n.next).map(t=>(n.inline==null?n.inline=t.isInline:n.inline!=t.isInline&&n.err("Mixing inline and block content"),{type:"name",value:t}));return n.pos++,e.length==1?e[0]:{type:"choice",exprs:e}}}function UCe(n){let e=[[]];return s(i(n,0),t()),e;function t(){return e.push([])-1}function r(o,a,l){let c={term:l,to:a};return e[o].push(c),c}function s(o,a){o.forEach(l=>l.to=a)}function i(o,a){if(o.type=="choice")return o.exprs.reduce((l,c)=>l.concat(i(c,a)),[]);if(o.type=="seq")for(let l=0;;l++){let c=i(o.exprs[l],a);if(l==o.exprs.length-1)return c;s(c,a=t())}else if(o.type=="star"){let l=t();return r(a,l),s(i(o.expr,l),l),[r(l)]}else if(o.type=="plus"){let l=t();return s(i(o.expr,a),l),s(i(o.expr,l),l),[r(l)]}else{if(o.type=="opt")return[r(a)].concat(i(o.expr,a));if(o.type=="range"){let l=a;for(let c=0;c<o.min;c++){let u=t();s(i(o.expr,l),u),l=u}if(o.max==-1)s(i(o.expr,l),l);else for(let c=o.min;c<o.max;c++){let u=t();r(l,u),s(i(o.expr,l),u),l=u}return[r(l)]}else{if(o.type=="name")return[r(a,void 0,o.value)];throw new Error("Unknown expr type")}}}}function UY(n,e){return e-n}function WY(n,e){let t=[];return r(e),t.sort(UY);function r(s){let i=n[s];if(i.length==1&&!i[0].term)return r(i[0].to);t.push(s);for(let o=0;o<i.length;o++){let{term:a,to:l}=i[o];!a&&t.indexOf(l)==-1&&r(l)}}}function WCe(n){let e=Object.create(null);return t(WY(n,0));function t(r){let s=[];r.forEach(o=>{n[o].forEach(({term:a,to:l})=>{if(!a)return;let c;for(let u=0;u<s.length;u++)s[u][0]==a&&(c=s[u][1]);WY(n,l).forEach(u=>{c||s.push([a,c=[]]),c.indexOf(u)==-1&&c.push(u)})})});let i=e[r.join(",")]=new Jp(r.indexOf(n.length-1)>-1);for(let o=0;o<s.length;o++){let a=s[o][1].sort(UY);i.next.push({type:s[o][0],next:e[a.join(",")]||t(a)})}return i}}function GCe(n,e){for(let t=0,r=[n];t<r.length;t++){let s=r[t],i=!s.validEnd,o=[];for(let a=0;a<s.next.length;a++){let{type:l,next:c}=s.next[a];o.push(l.name),i&&!(l.isText||l.hasRequiredAttrs())&&(i=!1),r.indexOf(c)==-1&&r.push(c)}i&&e.err("Only non-generatable nodes ("+o.join(", ")+") in a required position (see https://prosemirror.net/docs/guide/#generatable)")}}function GY(n){let e=Object.create(null);for(let t in n){let r=n[t];if(!r.hasDefault)return null;e[t]=r.default}return e}function KY(n,e){let t=Object.create(null);for(let r in n){let s=e&&e[r];if(s===void 0){let i=n[r];if(i.hasDefault)s=i.default;else throw new RangeError("No value supplied for attribute "+r)}t[r]=s}return t}function YY(n,e,t,r){for(let s in e)if(!(s in n))throw new RangeError(`Unsupported attribute ${s} for ${t} of type ${s}`);for(let s in n){let i=n[s];i.validate&&i.validate(e[s])}}function ZY(n,e){let t=Object.create(null);if(e)for(let r in e)t[r]=new YCe(n,r,e[r]);return t}let x7=class _fe{constructor(e,t,r){this.name=e,this.schema=t,this.spec=r,this.markSet=null,this.groups=r.group?r.group.split(" "):[],this.attrs=ZY(e,r.attrs),this.defaultAttrs=GY(this.attrs),this.contentMatch=null,this.inlineContent=null,this.isBlock=!(r.inline||e=="text"),this.isText=e=="text"}get isInline(){return!this.isBlock}get isTextblock(){return this.isBlock&&this.inlineContent}get isLeaf(){return this.contentMatch==Jp.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:KY(this.attrs,e)}create(e=null,t,r){if(this.isText)throw new Error("NodeType.create can't construct text nodes");return new Nu(this,this.computeAttrs(e),$e.from(t),Ln.setFrom(r))}createChecked(e=null,t,r){return t=$e.from(t),this.checkContent(t),new Nu(this,this.computeAttrs(e),t,Ln.setFrom(r))}createAndFill(e=null,t,r){if(e=this.computeAttrs(e),t=$e.from(t),t.size){let o=this.contentMatch.fillBefore(t);if(!o)return null;t=o.append(t)}let s=this.contentMatch.matchFragment(t),i=s&&s.fillBefore($e.empty,!0);return i?new Nu(this,e,t.append(i),Ln.setFrom(r)):null}validContent(e){let t=this.contentMatch.matchFragment(e);if(!t||!t.validEnd)return!1;for(let r=0;r<e.childCount;r++)if(!this.allowsMarks(e.child(r).marks))return!1;return!0}checkContent(e){if(!this.validContent(e))throw new RangeError(`Invalid content for node ${this.name}: ${e.toString().slice(0,50)}`)}checkAttrs(e){YY(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 r=0;r<e.length;r++)this.allowsMarkType(e[r].type)?t&&t.push(e[r]):t||(t=e.slice(0,r));return t?t.length?t:Ln.none:e}static compile(e,t){let r=Object.create(null);e.forEach((i,o)=>r[i]=new _fe(i,t,o));let s=t.spec.topNode||"doc";if(!r[s])throw new RangeError("Schema is missing its top node type ('"+s+"')");if(!r.text)throw new RangeError("Every schema needs a 'text' type");for(let i in r.text.attrs)throw new RangeError("The text node type should not have attributes");return r}};function KCe(n,e,t){let r=t.split("|");return s=>{let i=s===null?"null":typeof s;if(r.indexOf(i)<0)throw new RangeError(`Expected value of type ${r} for attribute ${e} on type ${n}, got ${i}`)}}class YCe{constructor(e,t,r){this.hasDefault=Object.prototype.hasOwnProperty.call(r,"default"),this.default=r.default,this.validate=typeof r.validate=="string"?KCe(e,t,r.validate):r.validate}get isRequired(){return!this.hasDefault}}class k7{constructor(e,t,r,s){this.name=e,this.rank=t,this.schema=r,this.spec=s,this.attrs=ZY(e,s.attrs),this.excluded=null;let i=GY(this.attrs);this.instance=i?new Ln(this,i):null}create(e=null){return!e&&this.instance?this.instance:new Ln(this,KY(this.attrs,e))}static compile(e,t){let r=Object.create(null),s=0;return e.forEach((i,o)=>r[i]=new k7(i,s++,t,o)),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){YY(this.attrs,e,"mark",this.name)}excludes(e){return this.excluded.indexOf(e)>-1}}class ZCe{constructor(e){this.linebreakReplacement=null,this.cached=Object.create(null);let t=this.spec={};for(let s in e)t[s]=e[s];t.nodes=ri.from(e.nodes),t.marks=ri.from(e.marks||{}),this.nodes=x7.compile(this.spec.nodes,this),this.marks=k7.compile(this.spec.marks,this);let r=Object.create(null);for(let s in this.nodes){if(s in this.marks)throw new RangeError(s+" can not be both a node and a mark");let i=this.nodes[s],o=i.spec.content||"",a=i.spec.marks;if(i.contentMatch=r[o]||(r[o]=Jp.parse(o,this.nodes)),i.inlineContent=i.contentMatch.inlineContent,i.spec.linebreakReplacement){if(this.linebreakReplacement)throw new RangeError("Multiple linebreak nodes defined");if(!i.isInline||!i.isLeaf)throw new RangeError("Linebreak replacement nodes must be inline leaf nodes");this.linebreakReplacement=i}i.markSet=a=="_"?null:a?XY(this,a.split(" ")):a==""||!i.inlineContent?[]:null}for(let s in this.marks){let i=this.marks[s],o=i.spec.excludes;i.excluded=o==null?[i]:o==""?[]:XY(this,o.split(" "))}this.nodeFromJSON=s=>Nu.fromJSON(this,s),this.markFromJSON=s=>Ln.fromJSON(this,s),this.topNodeType=this.nodes[this.spec.topNode||"doc"],this.cached.wrappings=Object.create(null)}node(e,t=null,r,s){if(typeof e=="string")e=this.nodeType(e);else if(e instanceof x7){if(e.schema!=this)throw new RangeError("Node type from different schema used ("+e.name+")")}else throw new RangeError("Invalid node type: "+e);return e.createChecked(t,r,s)}text(e,t){let r=this.nodes.text;return new FCe(r,r.defaultAttrs,e,Ln.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 new RangeError("Unknown node type: "+e);return t}}function XY(n,e){let t=[];for(let r=0;r<e.length;r++){let s=e[r],i=n.marks[s],o=i;if(i)t.push(i);else for(let a in n.marks){let l=n.marks[a];(s=="_"||l.spec.group&&l.spec.group.split(" ").indexOf(s)>-1)&&t.push(o=l)}if(!o)throw new SyntaxError("Unknown mark type: '"+e[r]+"'")}return t}function XCe(n){return n.tag!=null}function JCe(n){return n.style!=null}class Qp{constructor(e,t){this.schema=e,this.rules=t,this.tags=[],this.styles=[];let r=this.matchedStyles=[];t.forEach(s=>{if(XCe(s))this.tags.push(s);else if(JCe(s)){let i=/[^=]*/.exec(s.style)[0];r.indexOf(i)<0&&r.push(i),this.styles.push(s)}}),this.normalizeLists=!this.tags.some(s=>{if(!/^(ul|ol)\b/.test(s.tag)||!s.node)return!1;let i=e.nodes[s.node];return i.contentMatch.matchType(i)})}parse(e,t={}){let r=new tZ(this,t,!1);return r.addAll(e,Ln.none,t.from,t.to),r.finish()}parseSlice(e,t={}){let r=new tZ(this,t,!0);return r.addAll(e,Ln.none,t.from,t.to),He.maxOpen(r.finish())}matchTag(e,t,r){for(let s=r?this.tags.indexOf(r)+1:0;s<this.tags.length;s++){let i=this.tags[s];if(tSe(e,i.tag)&&(i.namespace===void 0||e.namespaceURI==i.namespace)&&(!i.context||t.matchesContext(i.context))){if(i.getAttrs){let o=i.getAttrs(e);if(o===!1)continue;i.attrs=o||void 0}return i}}}matchStyle(e,t,r,s){for(let i=s?this.styles.indexOf(s)+1:0;i<this.styles.length;i++){let o=this.styles[i],a=o.style;if(!(a.indexOf(e)!=0||o.context&&!r.matchesContext(o.context)||a.length>e.length&&(a.charCodeAt(e.length)!=61||a.slice(e.length+1)!=t))){if(o.getAttrs){let l=o.getAttrs(t);if(l===!1)continue;o.attrs=l||void 0}return o}}}static schemaRules(e){let t=[];function r(s){let i=s.priority==null?50:s.priority,o=0;for(;o<t.length;o++){let a=t[o];if((a.priority==null?50:a.priority)<i)break}t.splice(o,0,s)}for(let s in e.marks){let i=e.marks[s].spec.parseDOM;i&&i.forEach(o=>{r(o=nZ(o)),o.mark||o.ignore||o.clearMark||(o.mark=s)})}for(let s in e.nodes){let i=e.nodes[s].spec.parseDOM;i&&i.forEach(o=>{r(o=nZ(o)),o.node||o.ignore||o.mark||(o.node=s)})}return t}static fromSchema(e){return e.cached.domParser||(e.cached.domParser=new Qp(e,Qp.schemaRules(e)))}}const JY={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},QCe={head:!0,noscript:!0,object:!0,script:!0,style:!0,title:!0},QY={ol:!0,ul:!0},L2=1,dA=2,F2=4;function eZ(n,e,t){return e!=null?(e?L2:0)|(e==="full"?dA:0):n&&n.whitespace=="pre"?L2|dA:t&~F2}class C7{constructor(e,t,r,s,i,o){this.type=e,this.attrs=t,this.marks=r,this.solid=s,this.options=o,this.content=[],this.activeMarks=Ln.none,this.match=i||(o&F2?null:e.contentMatch)}findWrapping(e){if(!this.match){if(!this.type)return[];let t=this.type.contentMatch.fillBefore($e.from(e));if(t)this.match=this.type.contentMatch.matchFragment(t);else{let r=this.type.contentMatch,s;return(s=r.findWrapping(e.type))?(this.match=r,s):null}}return this.match.findWrapping(e.type)}finish(e){if(!(this.options&L2)){let r=this.content[this.content.length-1],s;if(r&&r.isText&&(s=/[ \t\r\n\u000c]+$/.exec(r.text))){let i=r;r.text.length==s[0].length?this.content.pop():this.content[this.content.length-1]=i.withText(i.text.slice(0,i.text.length-s[0].length))}}let t=$e.from(this.content);return!e&&this.match&&(t=t.append(this.match.fillBefore($e.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&&!JY.hasOwnProperty(e.parentNode.nodeName.toLowerCase())}}class tZ{constructor(e,t,r){this.parser=e,this.options=t,this.isOpen=r,this.open=0,this.localPreserveWS=!1;let s=t.topNode,i,o=eZ(null,t.preserveWhitespace,0)|(r?F2:0);s?i=new C7(s.type,s.attrs,Ln.none,!0,t.topMatch||s.type.contentMatch,o):r?i=new C7(null,null,Ln.none,!0,null,o):i=new C7(e.schema.topNodeType,null,Ln.none,!0,null,o),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 r=e.nodeValue,s=this.top,i=s.options&dA?"full":this.localPreserveWS||(s.options&L2)>0,{schema:o}=this.parser;if(i==="full"||s.inlineContext(e)||/[^ \t\r\n\u000c]/.test(r)){if(i)if(i==="full")r=r.replace(/\r\n?/g,` +`);else if(o.linebreakReplacement&&/[\r\n]/.test(r)&&this.top.findWrapping(o.linebreakReplacement.create())){let a=r.split(/\r?\n|\r/);for(let l=0;l<a.length;l++)l&&this.insertNode(o.linebreakReplacement.create(),t,!0),a[l]&&this.insertNode(o.text(a[l]),t,!/\S/.test(a[l]));r=""}else r=r.replace(/\r?\n|\r/g," ");else if(r=r.replace(/[ \t\r\n\u000c]+/g," "),/^[ \t\r\n\u000c]/.test(r)&&this.open==this.nodes.length-1){let a=s.content[s.content.length-1],l=e.previousSibling;(!a||l&&l.nodeName=="BR"||a.isText&&/[ \t\r\n\u000c]$/.test(a.text))&&(r=r.slice(1))}r&&this.insertNode(o.text(r),t,!/\S/.test(r)),this.findInText(e)}else this.findInside(e)}addElement(e,t,r){let s=this.localPreserveWS,i=this.top;(e.tagName=="PRE"||/pre/.test(e.style&&e.style.whiteSpace))&&(this.localPreserveWS=!0);let o=e.nodeName.toLowerCase(),a;QY.hasOwnProperty(o)&&this.parser.normalizeLists&&eSe(e);let l=this.options.ruleFromNode&&this.options.ruleFromNode(e)||(a=this.parser.matchTag(e,this,r));e:if(l?l.ignore:QCe.hasOwnProperty(o))this.findInside(e),this.ignoreFallback(e,t);else if(!l||l.skip||l.closeParent){l&&l.closeParent?this.open=Math.max(0,this.open-1):l&&l.skip.nodeType&&(e=l.skip);let c,u=this.needsBlock;if(JY.hasOwnProperty(o))i.content.length&&i.content[0].isInline&&this.open&&(this.open--,i=this.top),c=!0,i.type||(this.needsBlock=!0);else if(!e.firstChild){this.leafFallback(e,t);break e}let d=l&&l.skip?t:this.readStyles(e,t);d&&this.addAll(e,d),c&&this.sync(i),this.needsBlock=u}else{let c=this.readStyles(e,t);c&&this.addElementByRule(e,l,c,l.consuming===!1?a:void 0)}this.localPreserveWS=s}leafFallback(e,t){e.nodeName=="BR"&&this.top.type&&this.top.type.inlineContent&&this.addTextNode(e.ownerDocument.createTextNode(` +`),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 r=e.style;if(r&&r.length)for(let s=0;s<this.parser.matchedStyles.length;s++){let i=this.parser.matchedStyles[s],o=r.getPropertyValue(i);if(o)for(let a=void 0;;){let l=this.parser.matchStyle(i,o,this,a);if(!l)break;if(l.ignore)return null;if(l.clearMark?t=t.filter(c=>!l.clearMark(c)):t=t.concat(this.parser.schema.marks[l.mark].create(l.attrs)),l.consuming===!1)a=l;else break}}return t}addElementByRule(e,t,r,s){let i,o;if(t.node)if(o=this.parser.schema.nodes[t.node],o.isLeaf)this.insertNode(o.create(t.attrs),r,e.nodeName=="BR")||this.leafFallback(e,r);else{let l=this.enter(o,t.attrs||null,r,t.preserveWhitespace);l&&(i=!0,r=l)}else{let l=this.parser.schema.marks[t.mark];r=r.concat(l.create(t.attrs))}let a=this.top;if(o&&o.isLeaf)this.findInside(e);else if(s)this.addElement(e,r,s);else if(t.getContent)this.findInside(e),t.getContent(e,this.parser.schema).forEach(l=>this.insertNode(l,r,!1));else{let l=e;typeof t.contentElement=="string"?l=e.querySelector(t.contentElement):typeof t.contentElement=="function"?l=t.contentElement(e):t.contentElement&&(l=t.contentElement),this.findAround(e,l,!0),this.addAll(l,r),this.findAround(e,l,!1)}i&&this.sync(a)&&this.open--}addAll(e,t,r,s){let i=r||0;for(let o=r?e.childNodes[r]:e.firstChild,a=s==null?null:e.childNodes[s];o!=a;o=o.nextSibling,++i)this.findAtPoint(e,i),this.addDOM(o,t);this.findAtPoint(e,i)}findPlace(e,t,r){let s,i;for(let o=this.open,a=0;o>=0;o--){let l=this.nodes[o],c=l.findWrapping(e);if(c&&(!s||s.length>c.length+a)&&(s=c,i=l,!c.length))break;if(l.solid){if(r)break;a+=2}}if(!s)return null;this.sync(i);for(let o=0;o<s.length;o++)t=this.enterInner(s[o],null,t,!1);return t}insertNode(e,t,r){if(e.isInline&&this.needsBlock&&!this.top.type){let i=this.textblockFromContext();i&&(t=this.enterInner(i,null,t))}let s=this.findPlace(e,t,r);if(s){this.closeExtra();let i=this.top;i.match&&(i.match=i.match.matchType(e.type));let o=Ln.none;for(let a of s.concat(e.marks))(i.type?i.type.allowsMarkType(a.type):rZ(a.type,e.type))&&(o=a.addToSet(o));return i.content.push(e.mark(o)),!0}return!1}enter(e,t,r,s){let i=this.findPlace(e.create(t),r,!1);return i&&(i=this.enterInner(e,t,r,!0,s)),i}enterInner(e,t,r,s=!1,i){this.closeExtra();let o=this.top;o.match=o.match&&o.match.matchType(e);let a=eZ(e,i,o.options);o.options&F2&&o.content.length==0&&(a|=F2);let l=Ln.none;return r=r.filter(c=>(o.type?o.type.allowsMarkType(c.type):rZ(c.type,e))?(l=c.addToSet(l),!1):!0),this.nodes.push(new C7(e,t,l,s,null,a)),this.open++,r}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;this.localPreserveWS&&(this.nodes[t].options|=L2)}return!1}get currentPos(){this.closeExtra();let e=0;for(let t=this.open;t>=0;t--){let r=this.nodes[t].content;for(let s=r.length-1;s>=0;s--)e+=r[s].nodeSize;t&&e++}return e}findAtPoint(e,t){if(this.find)for(let r=0;r<this.find.length;r++)this.find[r].node==e&&this.find[r].offset==t&&(this.find[r].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,r){if(e!=t&&this.find)for(let s=0;s<this.find.length;s++)this.find[s].pos==null&&e.nodeType==1&&e.contains(this.find[s].node)&&t.compareDocumentPosition(this.find[s].node)&(r?2:4)&&(this.find[s].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("/"),r=this.options.context,s=!this.isOpen&&(!r||r.parent.type==this.nodes[0].type),i=-(r?r.depth+1:0)+(s?0:1),o=(a,l)=>{for(;a>=0;a--){let c=t[a];if(c==""){if(a==t.length-1||a==0)continue;for(;l>=i;l--)if(o(a-1,l))return!0;return!1}else{let u=l>0||l==0&&s?this.nodes[l].type:r&&l>=i?r.node(l-i).type:null;if(!u||u.name!=c&&!u.isInGroup(c))return!1;l--}}return!0};return o(t.length-1,this.open)}textblockFromContext(){let e=this.options.context;if(e)for(let t=e.depth;t>=0;t--){let r=e.node(t).contentMatchAt(e.indexAfter(t)).defaultType;if(r&&r.isTextblock&&r.defaultAttrs)return r}for(let t in this.parser.schema.nodes){let r=this.parser.schema.nodes[t];if(r.isTextblock&&r.defaultAttrs)return r}}}function eSe(n){for(let e=n.firstChild,t=null;e;e=e.nextSibling){let r=e.nodeType==1?e.nodeName.toLowerCase():null;r&&QY.hasOwnProperty(r)&&t?(t.appendChild(e),e=t):r=="li"?t=e:r&&(t=null)}}function tSe(n,e){return(n.matches||n.msMatchesSelector||n.webkitMatchesSelector||n.mozMatchesSelector).call(n,e)}function nZ(n){let e={};for(let t in n)e[t]=n[t];return e}function rZ(n,e){let t=e.schema.nodes;for(let r in t){let s=t[r];if(!s.allowsMarkType(n))continue;let i=[],o=a=>{i.push(a);for(let l=0;l<a.edgeCount;l++){let{type:c,next:u}=a.edge(l);if(c==e||i.indexOf(u)<0&&o(u))return!0}};if(o(s.contentMatch))return!0}}class e0{constructor(e,t){this.nodes=e,this.marks=t}serializeFragment(e,t={},r){r||(r=hA(t).createDocumentFragment());let s=r,i=[];return e.forEach(o=>{if(i.length||o.marks.length){let a=0,l=0;for(;a<i.length&&l<o.marks.length;){let c=o.marks[l];if(!this.marks[c.type.name]){l++;continue}if(!c.eq(i[a][0])||c.type.spec.spanning===!1)break;a++,l++}for(;a<i.length;)s=i.pop()[1];for(;l<o.marks.length;){let c=o.marks[l++],u=this.serializeMark(c,o.isInline,t);u&&(i.push([c,s]),s.appendChild(u.dom),s=u.contentDOM||u.dom)}}s.appendChild(this.serializeNodeInner(o,t))}),r}serializeNodeInner(e,t){let{dom:r,contentDOM:s}=S7(hA(t),this.nodes[e.type.name](e),null,e.attrs);if(s){if(e.isLeaf)throw new RangeError("Content hole not allowed in a leaf node spec");this.serializeFragment(e.content,t,s)}return r}serializeNode(e,t={}){let r=this.serializeNodeInner(e,t);for(let s=e.marks.length-1;s>=0;s--){let i=this.serializeMark(e.marks[s],e.isInline,t);i&&((i.contentDOM||i.dom).appendChild(r),r=i.dom)}return r}serializeMark(e,t,r={}){let s=this.marks[e.type.name];return s&&S7(hA(r),s(e,t),null,e.attrs)}static renderSpec(e,t,r=null,s){return S7(e,t,r,s)}static fromSchema(e){return e.cached.domSerializer||(e.cached.domSerializer=new e0(this.nodesFromSchema(e),this.marksFromSchema(e)))}static nodesFromSchema(e){let t=sZ(e.nodes);return t.text||(t.text=r=>r.text),t}static marksFromSchema(e){return sZ(e.marks)}}function sZ(n){let e={};for(let t in n){let r=n[t].spec.toDOM;r&&(e[t]=r)}return e}function hA(n){return n.document||window.document}const iZ=new WeakMap;function nSe(n){let e=iZ.get(n);return e===void 0&&iZ.set(n,e=rSe(n)),e}function rSe(n){let e=null;function t(r){if(r&&typeof r=="object")if(Array.isArray(r))if(typeof r[0]=="string")e||(e=[]),e.push(r);else for(let s=0;s<r.length;s++)t(r[s]);else for(let s in r)t(r[s])}return t(n),e}function S7(n,e,t,r){if(typeof e=="string")return{dom:n.createTextNode(e)};if(e.nodeType!=null)return{dom:e};if(e.dom&&e.dom.nodeType!=null)return e;let s=e[0],i;if(typeof s!="string")throw new RangeError("Invalid array passed to renderSpec");if(r&&(i=nSe(r))&&i.indexOf(e)>-1)throw new RangeError("Using an array from an attribute object as a DOM spec. This may be an attempted cross site scripting attack.");let o=s.indexOf(" ");o>0&&(t=s.slice(0,o),s=s.slice(o+1));let a,l=t?n.createElementNS(t,s):n.createElement(s),c=e[1],u=1;if(c&&typeof c=="object"&&c.nodeType==null&&!Array.isArray(c)){u=2;for(let d in c)if(c[d]!=null){let f=d.indexOf(" ");f>0?l.setAttributeNS(d.slice(0,f),d.slice(f+1),c[d]):d=="style"&&l.style?l.style.cssText=c[d]:l.setAttribute(d,c[d])}}for(let d=u;d<e.length;d++){let f=e[d];if(f===0){if(d<e.length-1||d>u)throw new RangeError("Content hole must be the only child of its parent node");return{dom:l,contentDOM:l}}else{let{dom:p,contentDOM:m}=S7(n,f,t,r);if(l.appendChild(p),m){if(a)throw new RangeError("Multiple content holes");a=m}}}return{dom:l,contentDOM:a}}const sSe={};function fA(n,e){const t=sSe,r=typeof t.includeImageAlt=="boolean"?t.includeImageAlt:!0,s=typeof t.includeHtml=="boolean"?t.includeHtml:!0;return oZ(n,r,s)}function oZ(n,e,t){if(iSe(n)){if("value"in n)return n.type==="html"&&!t?"":n.value;if(e&&"alt"in n&&n.alt)return n.alt;if("children"in n)return aZ(n.children,e,t)}return Array.isArray(n)?aZ(n,e,t):""}function aZ(n,e,t){const r=[];let s=-1;for(;++s<n.length;)r[s]=oZ(n[s],e,t);return r.join("")}function iSe(n){return!!(n&&typeof n=="object")}const lZ=document.createElement("i");function pA(n){const e="&"+n+";";lZ.innerHTML=e;const t=lZ.textContent;return t.charCodeAt(t.length-1)===59&&n!=="semi"||t===e?!1:t}function zo(n,e,t,r){const s=n.length;let i=0,o;if(e<0?e=-e>s?0:s+e:e=e>s?s:e,t=t>0?t:0,r.length<1e4)o=Array.from(r),o.unshift(e,t),n.splice(...o);else for(t&&n.splice(e,t);i<r.length;)o=r.slice(i,i+1e4),o.unshift(e,0),n.splice(...o),i+=1e4,e+=1e4}function xa(n,e){return n.length>0?(zo(n,n.length,0,e),n):e}const cZ={}.hasOwnProperty;function uZ(n){const e={};let t=-1;for(;++t<n.length;)oSe(e,n[t]);return e}function oSe(n,e){let t;for(t in e){const s=(cZ.call(n,t)?n[t]:void 0)||(n[t]={}),i=e[t];let o;if(i)for(o in i){cZ.call(s,o)||(s[o]=[]);const a=i[o];aSe(s[o],Array.isArray(a)?a:a?[a]:[])}}}function aSe(n,e){let t=-1;const r=[];for(;++t<e.length;)(e[t].add==="after"?n:r).push(e[t]);zo(n,0,0,r)}function dZ(n,e){const t=Number.parseInt(n,e);return t<9||t===11||t>13&&t<32||t>126&&t<160||t>55295&&t<57344||t>64975&&t<65008||(t&65535)===65535||(t&65535)===65534||t>1114111?"�":String.fromCodePoint(t)}function cl(n){return n.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Pi=vh(/[A-Za-z]/),ro=vh(/[\dA-Za-z]/),lSe=vh(/[#-'*+\--9=?A-Z^-~]/);function E7(n){return n!==null&&(n<32||n===127)}const mA=vh(/\d/),cSe=vh(/[\dA-Fa-f]/),uSe=vh(/[!-/:-@[-`{-~]/);function Tt(n){return n!==null&&n<-2}function br(n){return n!==null&&(n<0||n===32)}function En(n){return n===-2||n===-1||n===32}const _7=vh(new RegExp("\\p{P}|\\p{S}","u")),t0=vh(/\s/);function vh(n){return e;function e(t){return t!==null&&t>-1&&n.test(String.fromCharCode(t))}}function Fn(n,e,t,r){const s=r?r-1:Number.POSITIVE_INFINITY;let i=0;return o;function o(l){return En(l)?(n.enter(t),a(l)):e(l)}function a(l){return En(l)&&i++<s?(n.consume(l),a):(n.exit(t),e(l))}}const dSe={tokenize:hSe};function hSe(n){const e=n.attempt(this.parser.constructs.contentInitial,r,s);let t;return e;function r(a){if(a===null){n.consume(a);return}return n.enter("lineEnding"),n.consume(a),n.exit("lineEnding"),Fn(n,e,"linePrefix")}function s(a){return n.enter("paragraph"),i(a)}function i(a){const l=n.enter("chunkText",{contentType:"text",previous:t});return t&&(t.next=l),t=l,o(a)}function o(a){if(a===null){n.exit("chunkText"),n.exit("paragraph"),n.consume(a);return}return Tt(a)?(n.consume(a),n.exit("chunkText"),i):(n.consume(a),o)}}const fSe={tokenize:pSe},hZ={tokenize:mSe};function pSe(n){const e=this,t=[];let r=0,s,i,o;return a;function a(S){if(r<t.length){const _=t[r];return e.containerState=_[1],n.attempt(_[0].continuation,l,c)(S)}return c(S)}function l(S){if(r++,e.containerState._closeFlow){e.containerState._closeFlow=void 0,s&&x();const _=e.events.length;let A=_,T;for(;A--;)if(e.events[A][0]==="exit"&&e.events[A][1].type==="chunkFlow"){T=e.events[A][1].end;break}k(r);let O=_;for(;O<e.events.length;)e.events[O][1].end={...T},O++;return zo(e.events,A+1,0,e.events.slice(_)),e.events.length=O,c(S)}return a(S)}function c(S){if(r===t.length){if(!s)return f(S);if(s.currentConstruct&&s.currentConstruct.concrete)return m(S);e.interrupt=!!(s.currentConstruct&&!s._gfmTableDynamicInterruptHack)}return e.containerState={},n.check(hZ,u,d)(S)}function u(S){return s&&x(),k(r),f(S)}function d(S){return e.parser.lazy[e.now().line]=r!==t.length,o=e.now().offset,m(S)}function f(S){return e.containerState={},n.attempt(hZ,p,m)(S)}function p(S){return r++,t.push([e.currentConstruct,e.containerState]),f(S)}function m(S){if(S===null){s&&x(),k(0),n.consume(S);return}return s=s||e.parser.flow(e.now()),n.enter("chunkFlow",{_tokenizer:s,contentType:"flow",previous:i}),y(S)}function y(S){if(S===null){w(n.exit("chunkFlow"),!0),k(0),n.consume(S);return}return Tt(S)?(n.consume(S),w(n.exit("chunkFlow")),r=0,e.interrupt=void 0,a):(n.consume(S),y)}function w(S,_){const A=e.sliceStream(S);if(_&&A.push(null),S.previous=i,i&&(i.next=S),i=S,s.defineSkip(S.start),s.write(A),e.parser.lazy[S.start.line]){let T=s.events.length;for(;T--;)if(s.events[T][1].start.offset<o&&(!s.events[T][1].end||s.events[T][1].end.offset>o))return;const O=e.events.length;let I=O,R,D;for(;I--;)if(e.events[I][0]==="exit"&&e.events[I][1].type==="chunkFlow"){if(R){D=e.events[I][1].end;break}R=!0}for(k(r),T=O;T<e.events.length;)e.events[T][1].end={...D},T++;zo(e.events,I+1,0,e.events.slice(O)),e.events.length=T}}function k(S){let _=t.length;for(;_-- >S;){const A=t[_];e.containerState=A[1],A[0].exit.call(e,n)}t.length=S}function x(){s.write([null]),i=void 0,s=void 0,e.containerState._closeFlow=void 0}}function mSe(n,e,t){return Fn(n,n.attempt(this.parser.constructs.document,e,t),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function o1(n){if(n===null||br(n)||t0(n))return 1;if(_7(n))return 2}function T7(n,e,t){const r=[];let s=-1;for(;++s<n.length;){const i=n[s].resolveAll;i&&!r.includes(i)&&(e=i(e,t),r.push(i))}return e}const gA={name:"attention",resolveAll:gSe,tokenize:ySe};function gSe(n,e){let t=-1,r,s,i,o,a,l,c,u;for(;++t<n.length;)if(n[t][0]==="enter"&&n[t][1].type==="attentionSequence"&&n[t][1]._close){for(r=t;r--;)if(n[r][0]==="exit"&&n[r][1].type==="attentionSequence"&&n[r][1]._open&&e.sliceSerialize(n[r][1]).charCodeAt(0)===e.sliceSerialize(n[t][1]).charCodeAt(0)){if((n[r][1]._close||n[t][1]._open)&&(n[t][1].end.offset-n[t][1].start.offset)%3&&!((n[r][1].end.offset-n[r][1].start.offset+n[t][1].end.offset-n[t][1].start.offset)%3))continue;l=n[r][1].end.offset-n[r][1].start.offset>1&&n[t][1].end.offset-n[t][1].start.offset>1?2:1;const d={...n[r][1].end},f={...n[t][1].start};fZ(d,-l),fZ(f,l),o={type:l>1?"strongSequence":"emphasisSequence",start:d,end:{...n[r][1].end}},a={type:l>1?"strongSequence":"emphasisSequence",start:{...n[t][1].start},end:f},i={type:l>1?"strongText":"emphasisText",start:{...n[r][1].end},end:{...n[t][1].start}},s={type:l>1?"strong":"emphasis",start:{...o.start},end:{...a.end}},n[r][1].end={...o.start},n[t][1].start={...a.end},c=[],n[r][1].end.offset-n[r][1].start.offset&&(c=xa(c,[["enter",n[r][1],e],["exit",n[r][1],e]])),c=xa(c,[["enter",s,e],["enter",o,e],["exit",o,e],["enter",i,e]]),c=xa(c,T7(e.parser.constructs.insideSpan.null,n.slice(r+1,t),e)),c=xa(c,[["exit",i,e],["enter",a,e],["exit",a,e],["exit",s,e]]),n[t][1].end.offset-n[t][1].start.offset?(u=2,c=xa(c,[["enter",n[t][1],e],["exit",n[t][1],e]])):u=0,zo(n,r-1,t-r+3,c),t=r+c.length-u-2;break}}for(t=-1;++t<n.length;)n[t][1].type==="attentionSequence"&&(n[t][1].type="data");return n}function ySe(n,e){const t=this.parser.constructs.attentionMarkers.null,r=this.previous,s=o1(r);let i;return o;function o(l){return i=l,n.enter("attentionSequence"),a(l)}function a(l){if(l===i)return n.consume(l),a;const c=n.exit("attentionSequence"),u=o1(l),d=!u||u===2&&s||t.includes(l),f=!s||s===2&&u||t.includes(r);return c._open=!!(i===42?d:d&&(s||!f)),c._close=!!(i===42?f:f&&(u||!d)),e(l)}}function fZ(n,e){n.column+=e,n.offset+=e,n._bufferIndex+=e}const vSe={name:"autolink",tokenize:bSe};function bSe(n,e,t){let r=0;return s;function s(p){return n.enter("autolink"),n.enter("autolinkMarker"),n.consume(p),n.exit("autolinkMarker"),n.enter("autolinkProtocol"),i}function i(p){return Pi(p)?(n.consume(p),o):p===64?t(p):c(p)}function o(p){return p===43||p===45||p===46||ro(p)?(r=1,a(p)):c(p)}function a(p){return p===58?(n.consume(p),r=0,l):(p===43||p===45||p===46||ro(p))&&r++<32?(n.consume(p),a):(r=0,c(p))}function l(p){return p===62?(n.exit("autolinkProtocol"),n.enter("autolinkMarker"),n.consume(p),n.exit("autolinkMarker"),n.exit("autolink"),e):p===null||p===32||p===60||E7(p)?t(p):(n.consume(p),l)}function c(p){return p===64?(n.consume(p),u):lSe(p)?(n.consume(p),c):t(p)}function u(p){return ro(p)?d(p):t(p)}function d(p){return p===46?(n.consume(p),r=0,u):p===62?(n.exit("autolinkProtocol").type="autolinkEmail",n.enter("autolinkMarker"),n.consume(p),n.exit("autolinkMarker"),n.exit("autolink"),e):f(p)}function f(p){if((p===45||ro(p))&&r++<63){const m=p===45?f:d;return n.consume(p),m}return t(p)}}const j2={partial:!0,tokenize:wSe};function wSe(n,e,t){return r;function r(i){return En(i)?Fn(n,s,"linePrefix")(i):s(i)}function s(i){return i===null||Tt(i)?e(i):t(i)}}const pZ={continuation:{tokenize:kSe},exit:CSe,name:"blockQuote",tokenize:xSe};function xSe(n,e,t){const r=this;return s;function s(o){if(o===62){const a=r.containerState;return a.open||(n.enter("blockQuote",{_container:!0}),a.open=!0),n.enter("blockQuotePrefix"),n.enter("blockQuoteMarker"),n.consume(o),n.exit("blockQuoteMarker"),i}return t(o)}function i(o){return En(o)?(n.enter("blockQuotePrefixWhitespace"),n.consume(o),n.exit("blockQuotePrefixWhitespace"),n.exit("blockQuotePrefix"),e):(n.exit("blockQuotePrefix"),e(o))}}function kSe(n,e,t){const r=this;return s;function s(o){return En(o)?Fn(n,i,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(o):i(o)}function i(o){return n.attempt(pZ,e,t)(o)}}function CSe(n){n.exit("blockQuote")}const mZ={name:"characterEscape",tokenize:SSe};function SSe(n,e,t){return r;function r(i){return n.enter("characterEscape"),n.enter("escapeMarker"),n.consume(i),n.exit("escapeMarker"),s}function s(i){return uSe(i)?(n.enter("characterEscapeValue"),n.consume(i),n.exit("characterEscapeValue"),n.exit("characterEscape"),e):t(i)}}const gZ={name:"characterReference",tokenize:ESe};function ESe(n,e,t){const r=this;let s=0,i,o;return a;function a(d){return n.enter("characterReference"),n.enter("characterReferenceMarker"),n.consume(d),n.exit("characterReferenceMarker"),l}function l(d){return d===35?(n.enter("characterReferenceMarkerNumeric"),n.consume(d),n.exit("characterReferenceMarkerNumeric"),c):(n.enter("characterReferenceValue"),i=31,o=ro,u(d))}function c(d){return d===88||d===120?(n.enter("characterReferenceMarkerHexadecimal"),n.consume(d),n.exit("characterReferenceMarkerHexadecimal"),n.enter("characterReferenceValue"),i=6,o=cSe,u):(n.enter("characterReferenceValue"),i=7,o=mA,u(d))}function u(d){if(d===59&&s){const f=n.exit("characterReferenceValue");return o===ro&&!pA(r.sliceSerialize(f))?t(d):(n.enter("characterReferenceMarker"),n.consume(d),n.exit("characterReferenceMarker"),n.exit("characterReference"),e)}return o(d)&&s++<i?(n.consume(d),u):t(d)}}const yZ={partial:!0,tokenize:TSe},vZ={concrete:!0,name:"codeFenced",tokenize:_Se};function _Se(n,e,t){const r=this,s={partial:!0,tokenize:A};let i=0,o=0,a;return l;function l(T){return c(T)}function c(T){const O=r.events[r.events.length-1];return i=O&&O[1].type==="linePrefix"?O[2].sliceSerialize(O[1],!0).length:0,a=T,n.enter("codeFenced"),n.enter("codeFencedFence"),n.enter("codeFencedFenceSequence"),u(T)}function u(T){return T===a?(o++,n.consume(T),u):o<3?t(T):(n.exit("codeFencedFenceSequence"),En(T)?Fn(n,d,"whitespace")(T):d(T))}function d(T){return T===null||Tt(T)?(n.exit("codeFencedFence"),r.interrupt?e(T):n.check(yZ,y,_)(T)):(n.enter("codeFencedFenceInfo"),n.enter("chunkString",{contentType:"string"}),f(T))}function f(T){return T===null||Tt(T)?(n.exit("chunkString"),n.exit("codeFencedFenceInfo"),d(T)):En(T)?(n.exit("chunkString"),n.exit("codeFencedFenceInfo"),Fn(n,p,"whitespace")(T)):T===96&&T===a?t(T):(n.consume(T),f)}function p(T){return T===null||Tt(T)?d(T):(n.enter("codeFencedFenceMeta"),n.enter("chunkString",{contentType:"string"}),m(T))}function m(T){return T===null||Tt(T)?(n.exit("chunkString"),n.exit("codeFencedFenceMeta"),d(T)):T===96&&T===a?t(T):(n.consume(T),m)}function y(T){return n.attempt(s,_,w)(T)}function w(T){return n.enter("lineEnding"),n.consume(T),n.exit("lineEnding"),k}function k(T){return i>0&&En(T)?Fn(n,x,"linePrefix",i+1)(T):x(T)}function x(T){return T===null||Tt(T)?n.check(yZ,y,_)(T):(n.enter("codeFlowValue"),S(T))}function S(T){return T===null||Tt(T)?(n.exit("codeFlowValue"),x(T)):(n.consume(T),S)}function _(T){return n.exit("codeFenced"),e(T)}function A(T,O,I){let R=0;return D;function D(de){return T.enter("lineEnding"),T.consume(de),T.exit("lineEnding"),W}function W(de){return T.enter("codeFencedFence"),En(de)?Fn(T,H,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(de):H(de)}function H(de){return de===a?(T.enter("codeFencedFenceSequence"),re(de)):I(de)}function re(de){return de===a?(R++,T.consume(de),re):R>=o?(T.exit("codeFencedFenceSequence"),En(de)?Fn(T,ae,"whitespace")(de):ae(de)):I(de)}function ae(de){return de===null||Tt(de)?(T.exit("codeFencedFence"),O(de)):I(de)}}}function TSe(n,e,t){const r=this;return s;function s(o){return o===null?t(o):(n.enter("lineEnding"),n.consume(o),n.exit("lineEnding"),i)}function i(o){return r.parser.lazy[r.now().line]?t(o):e(o)}}const yA={name:"codeIndented",tokenize:NSe},ASe={partial:!0,tokenize:MSe};function NSe(n,e,t){const r=this;return s;function s(c){return n.enter("codeIndented"),Fn(n,i,"linePrefix",5)(c)}function i(c){const u=r.events[r.events.length-1];return u&&u[1].type==="linePrefix"&&u[2].sliceSerialize(u[1],!0).length>=4?o(c):t(c)}function o(c){return c===null?l(c):Tt(c)?n.attempt(ASe,o,l)(c):(n.enter("codeFlowValue"),a(c))}function a(c){return c===null||Tt(c)?(n.exit("codeFlowValue"),o(c)):(n.consume(c),a)}function l(c){return n.exit("codeIndented"),e(c)}}function MSe(n,e,t){const r=this;return s;function s(o){return r.parser.lazy[r.now().line]?t(o):Tt(o)?(n.enter("lineEnding"),n.consume(o),n.exit("lineEnding"),s):Fn(n,i,"linePrefix",5)(o)}function i(o){const a=r.events[r.events.length-1];return a&&a[1].type==="linePrefix"&&a[2].sliceSerialize(a[1],!0).length>=4?e(o):Tt(o)?s(o):t(o)}}const OSe={name:"codeText",previous:ISe,resolve:PSe,tokenize:DSe};function PSe(n){let e=n.length-4,t=3,r,s;if((n[t][1].type==="lineEnding"||n[t][1].type==="space")&&(n[e][1].type==="lineEnding"||n[e][1].type==="space")){for(r=t;++r<e;)if(n[r][1].type==="codeTextData"){n[t][1].type="codeTextPadding",n[e][1].type="codeTextPadding",t+=2,e-=2;break}}for(r=t-1,e++;++r<=e;)s===void 0?r!==e&&n[r][1].type!=="lineEnding"&&(s=r):(r===e||n[r][1].type==="lineEnding")&&(n[s][1].type="codeTextData",r!==s+2&&(n[s][1].end=n[r-1][1].end,n.splice(s+2,r-s-2),e-=r-s-2,r=s+2),s=void 0);return n}function ISe(n){return n!==96||this.events[this.events.length-1][1].type==="characterEscape"}function DSe(n,e,t){let r=0,s,i;return o;function o(d){return n.enter("codeText"),n.enter("codeTextSequence"),a(d)}function a(d){return d===96?(n.consume(d),r++,a):(n.exit("codeTextSequence"),l(d))}function l(d){return d===null?t(d):d===32?(n.enter("space"),n.consume(d),n.exit("space"),l):d===96?(i=n.enter("codeTextSequence"),s=0,u(d)):Tt(d)?(n.enter("lineEnding"),n.consume(d),n.exit("lineEnding"),l):(n.enter("codeTextData"),c(d))}function c(d){return d===null||d===32||d===96||Tt(d)?(n.exit("codeTextData"),l(d)):(n.consume(d),c)}function u(d){return d===96?(n.consume(d),s++,u):s===r?(n.exit("codeTextSequence"),n.exit("codeText"),e(d)):(i.type="codeTextData",c(d))}}class RSe{constructor(e){this.left=e?[...e]:[],this.right=[]}get(e){if(e<0||e>=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+e+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return e<this.left.length?this.left[e]:this.right[this.right.length-e+this.left.length-1]}get length(){return this.left.length+this.right.length}shift(){return this.setCursor(0),this.right.pop()}slice(e,t){const r=t??Number.POSITIVE_INFINITY;return r<this.left.length?this.left.slice(e,r):e>this.left.length?this.right.slice(this.right.length-r+this.left.length,this.right.length-e+this.left.length).reverse():this.left.slice(e).concat(this.right.slice(this.right.length-r+this.left.length).reverse())}splice(e,t,r){const s=t||0;this.setCursor(Math.trunc(e));const i=this.right.splice(this.right.length-s,Number.POSITIVE_INFINITY);return r&&B2(this.left,r),i.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(e){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(e)}pushMany(e){this.setCursor(Number.POSITIVE_INFINITY),B2(this.left,e)}unshift(e){this.setCursor(0),this.right.push(e)}unshiftMany(e){this.setCursor(0),B2(this.right,e.reverse())}setCursor(e){if(!(e===this.left.length||e>this.left.length&&this.right.length===0||e<0&&this.left.length===0))if(e<this.left.length){const t=this.left.splice(e,Number.POSITIVE_INFINITY);B2(this.right,t.reverse())}else{const t=this.right.splice(this.left.length+this.right.length-e,Number.POSITIVE_INFINITY);B2(this.left,t.reverse())}}}function B2(n,e){let t=0;if(e.length<1e4)n.push(...e);else for(;t<e.length;)n.push(...e.slice(t,t+1e4)),t+=1e4}function bZ(n){const e={};let t=-1,r,s,i,o,a,l,c;const u=new RSe(n);for(;++t<u.length;){for(;t in e;)t=e[t];if(r=u.get(t),t&&r[1].type==="chunkFlow"&&u.get(t-1)[1].type==="listItemPrefix"&&(l=r[1]._tokenizer.events,i=0,i<l.length&&l[i][1].type==="lineEndingBlank"&&(i+=2),i<l.length&&l[i][1].type==="content"))for(;++i<l.length&&l[i][1].type!=="content";)l[i][1].type==="chunkText"&&(l[i][1]._isInFirstContentOfListItem=!0,i++);if(r[0]==="enter")r[1].contentType&&(Object.assign(e,$Se(u,t)),t=e[t],c=!0);else if(r[1]._container){for(i=t,s=void 0;i--;)if(o=u.get(i),o[1].type==="lineEnding"||o[1].type==="lineEndingBlank")o[0]==="enter"&&(s&&(u.get(s)[1].type="lineEndingBlank"),o[1].type="lineEnding",s=i);else if(!(o[1].type==="linePrefix"||o[1].type==="listItemIndent"))break;s&&(r[1].end={...u.get(s)[1].start},a=u.slice(s,t),a.unshift(r),u.splice(s,t-s+1,a))}}return zo(n,0,Number.POSITIVE_INFINITY,u.slice(0)),!c}function $Se(n,e){const t=n.get(e)[1],r=n.get(e)[2];let s=e-1;const i=[];let o=t._tokenizer;o||(o=r.parser[t.contentType](t.start),t._contentTypeTextTrailing&&(o._contentTypeTextTrailing=!0));const a=o.events,l=[],c={};let u,d,f=-1,p=t,m=0,y=0;const w=[y];for(;p;){for(;n.get(++s)[1]!==p;);i.push(s),p._tokenizer||(u=r.sliceStream(p),p.next||u.push(null),d&&o.defineSkip(p.start),p._isInFirstContentOfListItem&&(o._gfmTasklistFirstContentOfListItem=!0),o.write(u),p._isInFirstContentOfListItem&&(o._gfmTasklistFirstContentOfListItem=void 0)),d=p,p=p.next}for(p=t;++f<a.length;)a[f][0]==="exit"&&a[f-1][0]==="enter"&&a[f][1].type===a[f-1][1].type&&a[f][1].start.line!==a[f][1].end.line&&(y=f+1,w.push(y),p._tokenizer=void 0,p.previous=void 0,p=p.next);for(o.events=[],p?(p._tokenizer=void 0,p.previous=void 0):w.pop(),f=w.length;f--;){const k=a.slice(w[f],w[f+1]),x=i.pop();l.push([x,x+k.length-1]),n.splice(x,2,k)}for(l.reverse(),f=-1;++f<l.length;)c[m+l[f][0]]=m+l[f][1],m+=l[f][1]-l[f][0]-1;return c}const LSe={resolve:jSe,tokenize:BSe},FSe={partial:!0,tokenize:VSe};function jSe(n){return bZ(n),n}function BSe(n,e){let t;return r;function r(a){return n.enter("content"),t=n.enter("chunkContent",{contentType:"content"}),s(a)}function s(a){return a===null?i(a):Tt(a)?n.check(FSe,o,i)(a):(n.consume(a),s)}function i(a){return n.exit("chunkContent"),n.exit("content"),e(a)}function o(a){return n.consume(a),n.exit("chunkContent"),t.next=n.enter("chunkContent",{contentType:"content",previous:t}),t=t.next,s}}function VSe(n,e,t){const r=this;return s;function s(o){return n.exit("chunkContent"),n.enter("lineEnding"),n.consume(o),n.exit("lineEnding"),Fn(n,i,"linePrefix")}function i(o){if(o===null||Tt(o))return t(o);const a=r.events[r.events.length-1];return!r.parser.constructs.disable.null.includes("codeIndented")&&a&&a[1].type==="linePrefix"&&a[2].sliceSerialize(a[1],!0).length>=4?e(o):n.interrupt(r.parser.constructs.flow,t,e)(o)}}function wZ(n,e,t,r,s,i,o,a,l){const c=l||Number.POSITIVE_INFINITY;let u=0;return d;function d(k){return k===60?(n.enter(r),n.enter(s),n.enter(i),n.consume(k),n.exit(i),f):k===null||k===32||k===41||E7(k)?t(k):(n.enter(r),n.enter(o),n.enter(a),n.enter("chunkString",{contentType:"string"}),y(k))}function f(k){return k===62?(n.enter(i),n.consume(k),n.exit(i),n.exit(s),n.exit(r),e):(n.enter(a),n.enter("chunkString",{contentType:"string"}),p(k))}function p(k){return k===62?(n.exit("chunkString"),n.exit(a),f(k)):k===null||k===60||Tt(k)?t(k):(n.consume(k),k===92?m:p)}function m(k){return k===60||k===62||k===92?(n.consume(k),p):p(k)}function y(k){return!u&&(k===null||k===41||br(k))?(n.exit("chunkString"),n.exit(a),n.exit(o),n.exit(r),e(k)):u<c&&k===40?(n.consume(k),u++,y):k===41?(n.consume(k),u--,y):k===null||k===32||k===40||E7(k)?t(k):(n.consume(k),k===92?w:y)}function w(k){return k===40||k===41||k===92?(n.consume(k),y):y(k)}}function xZ(n,e,t,r,s,i){const o=this;let a=0,l;return c;function c(p){return n.enter(r),n.enter(s),n.consume(p),n.exit(s),n.enter(i),u}function u(p){return a>999||p===null||p===91||p===93&&!l||p===94&&!a&&"_hiddenFootnoteSupport"in o.parser.constructs?t(p):p===93?(n.exit(i),n.enter(s),n.consume(p),n.exit(s),n.exit(r),e):Tt(p)?(n.enter("lineEnding"),n.consume(p),n.exit("lineEnding"),u):(n.enter("chunkString",{contentType:"string"}),d(p))}function d(p){return p===null||p===91||p===93||Tt(p)||a++>999?(n.exit("chunkString"),u(p)):(n.consume(p),l||(l=!En(p)),p===92?f:d)}function f(p){return p===91||p===92||p===93?(n.consume(p),a++,d):d(p)}}function kZ(n,e,t,r,s,i){let o;return a;function a(f){return f===34||f===39||f===40?(n.enter(r),n.enter(s),n.consume(f),n.exit(s),o=f===40?41:f,l):t(f)}function l(f){return f===o?(n.enter(s),n.consume(f),n.exit(s),n.exit(r),e):(n.enter(i),c(f))}function c(f){return f===o?(n.exit(i),l(o)):f===null?t(f):Tt(f)?(n.enter("lineEnding"),n.consume(f),n.exit("lineEnding"),Fn(n,c,"linePrefix")):(n.enter("chunkString",{contentType:"string"}),u(f))}function u(f){return f===o||f===null||Tt(f)?(n.exit("chunkString"),c(f)):(n.consume(f),f===92?d:u)}function d(f){return f===o||f===92?(n.consume(f),u):u(f)}}function V2(n,e){let t;return r;function r(s){return Tt(s)?(n.enter("lineEnding"),n.consume(s),n.exit("lineEnding"),t=!0,r):En(s)?Fn(n,r,t?"linePrefix":"lineSuffix")(s):e(s)}}const zSe={name:"definition",tokenize:qSe},HSe={partial:!0,tokenize:USe};function qSe(n,e,t){const r=this;let s;return i;function i(p){return n.enter("definition"),o(p)}function o(p){return xZ.call(r,n,a,t,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function a(p){return s=cl(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),p===58?(n.enter("definitionMarker"),n.consume(p),n.exit("definitionMarker"),l):t(p)}function l(p){return br(p)?V2(n,c)(p):c(p)}function c(p){return wZ(n,u,t,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(p)}function u(p){return n.attempt(HSe,d,d)(p)}function d(p){return En(p)?Fn(n,f,"whitespace")(p):f(p)}function f(p){return p===null||Tt(p)?(n.exit("definition"),r.parser.defined.push(s),e(p)):t(p)}}function USe(n,e,t){return r;function r(a){return br(a)?V2(n,s)(a):t(a)}function s(a){return kZ(n,i,t,"definitionTitle","definitionTitleMarker","definitionTitleString")(a)}function i(a){return En(a)?Fn(n,o,"whitespace")(a):o(a)}function o(a){return a===null||Tt(a)?e(a):t(a)}}const WSe={name:"hardBreakEscape",tokenize:GSe};function GSe(n,e,t){return r;function r(i){return n.enter("hardBreakEscape"),n.consume(i),s}function s(i){return Tt(i)?(n.exit("hardBreakEscape"),e(i)):t(i)}}const KSe={name:"headingAtx",resolve:YSe,tokenize:ZSe};function YSe(n,e){let t=n.length-2,r=3,s,i;return n[r][1].type==="whitespace"&&(r+=2),t-2>r&&n[t][1].type==="whitespace"&&(t-=2),n[t][1].type==="atxHeadingSequence"&&(r===t-1||t-4>r&&n[t-2][1].type==="whitespace")&&(t-=r+1===t?2:4),t>r&&(s={type:"atxHeadingText",start:n[r][1].start,end:n[t][1].end},i={type:"chunkText",start:n[r][1].start,end:n[t][1].end,contentType:"text"},zo(n,r,t-r+1,[["enter",s,e],["enter",i,e],["exit",i,e],["exit",s,e]])),n}function ZSe(n,e,t){let r=0;return s;function s(u){return n.enter("atxHeading"),i(u)}function i(u){return n.enter("atxHeadingSequence"),o(u)}function o(u){return u===35&&r++<6?(n.consume(u),o):u===null||br(u)?(n.exit("atxHeadingSequence"),a(u)):t(u)}function a(u){return u===35?(n.enter("atxHeadingSequence"),l(u)):u===null||Tt(u)?(n.exit("atxHeading"),e(u)):En(u)?Fn(n,a,"whitespace")(u):(n.enter("atxHeadingText"),c(u))}function l(u){return u===35?(n.consume(u),l):(n.exit("atxHeadingSequence"),a(u))}function c(u){return u===null||u===35||br(u)?(n.exit("atxHeadingText"),a(u)):(n.consume(u),c)}}const XSe=["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","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],CZ=["pre","script","style","textarea"],JSe={concrete:!0,name:"htmlFlow",resolveTo:tEe,tokenize:nEe},QSe={partial:!0,tokenize:sEe},eEe={partial:!0,tokenize:rEe};function tEe(n){let e=n.length;for(;e--&&!(n[e][0]==="enter"&&n[e][1].type==="htmlFlow"););return e>1&&n[e-2][1].type==="linePrefix"&&(n[e][1].start=n[e-2][1].start,n[e+1][1].start=n[e-2][1].start,n.splice(e-2,2)),n}function nEe(n,e,t){const r=this;let s,i,o,a,l;return c;function c(q){return u(q)}function u(q){return n.enter("htmlFlow"),n.enter("htmlFlowData"),n.consume(q),d}function d(q){return q===33?(n.consume(q),f):q===47?(n.consume(q),i=!0,y):q===63?(n.consume(q),s=3,r.interrupt?e:$):Pi(q)?(n.consume(q),o=String.fromCharCode(q),w):t(q)}function f(q){return q===45?(n.consume(q),s=2,p):q===91?(n.consume(q),s=5,a=0,m):Pi(q)?(n.consume(q),s=4,r.interrupt?e:$):t(q)}function p(q){return q===45?(n.consume(q),r.interrupt?e:$):t(q)}function m(q){const Xe="CDATA[";return q===Xe.charCodeAt(a++)?(n.consume(q),a===Xe.length?r.interrupt?e:H:m):t(q)}function y(q){return Pi(q)?(n.consume(q),o=String.fromCharCode(q),w):t(q)}function w(q){if(q===null||q===47||q===62||br(q)){const Xe=q===47,qe=o.toLowerCase();return!Xe&&!i&&CZ.includes(qe)?(s=1,r.interrupt?e(q):H(q)):XSe.includes(o.toLowerCase())?(s=6,Xe?(n.consume(q),k):r.interrupt?e(q):H(q)):(s=7,r.interrupt&&!r.parser.lazy[r.now().line]?t(q):i?x(q):S(q))}return q===45||ro(q)?(n.consume(q),o+=String.fromCharCode(q),w):t(q)}function k(q){return q===62?(n.consume(q),r.interrupt?e:H):t(q)}function x(q){return En(q)?(n.consume(q),x):D(q)}function S(q){return q===47?(n.consume(q),D):q===58||q===95||Pi(q)?(n.consume(q),_):En(q)?(n.consume(q),S):D(q)}function _(q){return q===45||q===46||q===58||q===95||ro(q)?(n.consume(q),_):A(q)}function A(q){return q===61?(n.consume(q),T):En(q)?(n.consume(q),A):S(q)}function T(q){return q===null||q===60||q===61||q===62||q===96?t(q):q===34||q===39?(n.consume(q),l=q,O):En(q)?(n.consume(q),T):I(q)}function O(q){return q===l?(n.consume(q),l=null,R):q===null||Tt(q)?t(q):(n.consume(q),O)}function I(q){return q===null||q===34||q===39||q===47||q===60||q===61||q===62||q===96||br(q)?A(q):(n.consume(q),I)}function R(q){return q===47||q===62||En(q)?S(q):t(q)}function D(q){return q===62?(n.consume(q),W):t(q)}function W(q){return q===null||Tt(q)?H(q):En(q)?(n.consume(q),W):t(q)}function H(q){return q===45&&s===2?(n.consume(q),le):q===60&&s===1?(n.consume(q),X):q===62&&s===4?(n.consume(q),ve):q===63&&s===3?(n.consume(q),$):q===93&&s===5?(n.consume(q),J):Tt(q)&&(s===6||s===7)?(n.exit("htmlFlowData"),n.check(QSe,Pe,re)(q)):q===null||Tt(q)?(n.exit("htmlFlowData"),re(q)):(n.consume(q),H)}function re(q){return n.check(eEe,ae,Pe)(q)}function ae(q){return n.enter("lineEnding"),n.consume(q),n.exit("lineEnding"),de}function de(q){return q===null||Tt(q)?re(q):(n.enter("htmlFlowData"),H(q))}function le(q){return q===45?(n.consume(q),$):H(q)}function X(q){return q===47?(n.consume(q),o="",se):H(q)}function se(q){if(q===62){const Xe=o.toLowerCase();return CZ.includes(Xe)?(n.consume(q),ve):H(q)}return Pi(q)&&o.length<8?(n.consume(q),o+=String.fromCharCode(q),se):H(q)}function J(q){return q===93?(n.consume(q),$):H(q)}function $(q){return q===62?(n.consume(q),ve):q===45&&s===2?(n.consume(q),$):H(q)}function ve(q){return q===null||Tt(q)?(n.exit("htmlFlowData"),Pe(q)):(n.consume(q),ve)}function Pe(q){return n.exit("htmlFlow"),e(q)}}function rEe(n,e,t){const r=this;return s;function s(o){return Tt(o)?(n.enter("lineEnding"),n.consume(o),n.exit("lineEnding"),i):t(o)}function i(o){return r.parser.lazy[r.now().line]?t(o):e(o)}}function sEe(n,e,t){return r;function r(s){return n.enter("lineEnding"),n.consume(s),n.exit("lineEnding"),n.attempt(j2,e,t)}}const iEe={name:"htmlText",tokenize:oEe};function oEe(n,e,t){const r=this;let s,i,o;return a;function a($){return n.enter("htmlText"),n.enter("htmlTextData"),n.consume($),l}function l($){return $===33?(n.consume($),c):$===47?(n.consume($),A):$===63?(n.consume($),S):Pi($)?(n.consume($),I):t($)}function c($){return $===45?(n.consume($),u):$===91?(n.consume($),i=0,m):Pi($)?(n.consume($),x):t($)}function u($){return $===45?(n.consume($),p):t($)}function d($){return $===null?t($):$===45?(n.consume($),f):Tt($)?(o=d,X($)):(n.consume($),d)}function f($){return $===45?(n.consume($),p):d($)}function p($){return $===62?le($):$===45?f($):d($)}function m($){const ve="CDATA[";return $===ve.charCodeAt(i++)?(n.consume($),i===ve.length?y:m):t($)}function y($){return $===null?t($):$===93?(n.consume($),w):Tt($)?(o=y,X($)):(n.consume($),y)}function w($){return $===93?(n.consume($),k):y($)}function k($){return $===62?le($):$===93?(n.consume($),k):y($)}function x($){return $===null||$===62?le($):Tt($)?(o=x,X($)):(n.consume($),x)}function S($){return $===null?t($):$===63?(n.consume($),_):Tt($)?(o=S,X($)):(n.consume($),S)}function _($){return $===62?le($):S($)}function A($){return Pi($)?(n.consume($),T):t($)}function T($){return $===45||ro($)?(n.consume($),T):O($)}function O($){return Tt($)?(o=O,X($)):En($)?(n.consume($),O):le($)}function I($){return $===45||ro($)?(n.consume($),I):$===47||$===62||br($)?R($):t($)}function R($){return $===47?(n.consume($),le):$===58||$===95||Pi($)?(n.consume($),D):Tt($)?(o=R,X($)):En($)?(n.consume($),R):le($)}function D($){return $===45||$===46||$===58||$===95||ro($)?(n.consume($),D):W($)}function W($){return $===61?(n.consume($),H):Tt($)?(o=W,X($)):En($)?(n.consume($),W):R($)}function H($){return $===null||$===60||$===61||$===62||$===96?t($):$===34||$===39?(n.consume($),s=$,re):Tt($)?(o=H,X($)):En($)?(n.consume($),H):(n.consume($),ae)}function re($){return $===s?(n.consume($),s=void 0,de):$===null?t($):Tt($)?(o=re,X($)):(n.consume($),re)}function ae($){return $===null||$===34||$===39||$===60||$===61||$===96?t($):$===47||$===62||br($)?R($):(n.consume($),ae)}function de($){return $===47||$===62||br($)?R($):t($)}function le($){return $===62?(n.consume($),n.exit("htmlTextData"),n.exit("htmlText"),e):t($)}function X($){return n.exit("htmlTextData"),n.enter("lineEnding"),n.consume($),n.exit("lineEnding"),se}function se($){return En($)?Fn(n,J,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)($):J($)}function J($){return n.enter("htmlTextData"),o($)}}const vA={name:"labelEnd",resolveAll:uEe,resolveTo:dEe,tokenize:hEe},aEe={tokenize:fEe},lEe={tokenize:pEe},cEe={tokenize:mEe};function uEe(n){let e=-1;const t=[];for(;++e<n.length;){const r=n[e][1];if(t.push(n[e]),r.type==="labelImage"||r.type==="labelLink"||r.type==="labelEnd"){const s=r.type==="labelImage"?4:2;r.type="data",e+=s}}return n.length!==t.length&&zo(n,0,n.length,t),n}function dEe(n,e){let t=n.length,r=0,s,i,o,a;for(;t--;)if(s=n[t][1],i){if(s.type==="link"||s.type==="labelLink"&&s._inactive)break;n[t][0]==="enter"&&s.type==="labelLink"&&(s._inactive=!0)}else if(o){if(n[t][0]==="enter"&&(s.type==="labelImage"||s.type==="labelLink")&&!s._balanced&&(i=t,s.type!=="labelLink")){r=2;break}}else s.type==="labelEnd"&&(o=t);const l={type:n[i][1].type==="labelLink"?"link":"image",start:{...n[i][1].start},end:{...n[n.length-1][1].end}},c={type:"label",start:{...n[i][1].start},end:{...n[o][1].end}},u={type:"labelText",start:{...n[i+r+2][1].end},end:{...n[o-2][1].start}};return a=[["enter",l,e],["enter",c,e]],a=xa(a,n.slice(i+1,i+r+3)),a=xa(a,[["enter",u,e]]),a=xa(a,T7(e.parser.constructs.insideSpan.null,n.slice(i+r+4,o-3),e)),a=xa(a,[["exit",u,e],n[o-2],n[o-1],["exit",c,e]]),a=xa(a,n.slice(o+1)),a=xa(a,[["exit",l,e]]),zo(n,i,n.length,a),n}function hEe(n,e,t){const r=this;let s=r.events.length,i,o;for(;s--;)if((r.events[s][1].type==="labelImage"||r.events[s][1].type==="labelLink")&&!r.events[s][1]._balanced){i=r.events[s][1];break}return a;function a(f){return i?i._inactive?d(f):(o=r.parser.defined.includes(cl(r.sliceSerialize({start:i.end,end:r.now()}))),n.enter("labelEnd"),n.enter("labelMarker"),n.consume(f),n.exit("labelMarker"),n.exit("labelEnd"),l):t(f)}function l(f){return f===40?n.attempt(aEe,u,o?u:d)(f):f===91?n.attempt(lEe,u,o?c:d)(f):o?u(f):d(f)}function c(f){return n.attempt(cEe,u,d)(f)}function u(f){return e(f)}function d(f){return i._balanced=!0,t(f)}}function fEe(n,e,t){return r;function r(d){return n.enter("resource"),n.enter("resourceMarker"),n.consume(d),n.exit("resourceMarker"),s}function s(d){return br(d)?V2(n,i)(d):i(d)}function i(d){return d===41?u(d):wZ(n,o,a,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(d)}function o(d){return br(d)?V2(n,l)(d):u(d)}function a(d){return t(d)}function l(d){return d===34||d===39||d===40?kZ(n,c,t,"resourceTitle","resourceTitleMarker","resourceTitleString")(d):u(d)}function c(d){return br(d)?V2(n,u)(d):u(d)}function u(d){return d===41?(n.enter("resourceMarker"),n.consume(d),n.exit("resourceMarker"),n.exit("resource"),e):t(d)}}function pEe(n,e,t){const r=this;return s;function s(a){return xZ.call(r,n,i,o,"reference","referenceMarker","referenceString")(a)}function i(a){return r.parser.defined.includes(cl(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)))?e(a):t(a)}function o(a){return t(a)}}function mEe(n,e,t){return r;function r(i){return n.enter("reference"),n.enter("referenceMarker"),n.consume(i),n.exit("referenceMarker"),s}function s(i){return i===93?(n.enter("referenceMarker"),n.consume(i),n.exit("referenceMarker"),n.exit("reference"),e):t(i)}}const gEe={name:"labelStartImage",resolveAll:vA.resolveAll,tokenize:yEe};function yEe(n,e,t){const r=this;return s;function s(a){return n.enter("labelImage"),n.enter("labelImageMarker"),n.consume(a),n.exit("labelImageMarker"),i}function i(a){return a===91?(n.enter("labelMarker"),n.consume(a),n.exit("labelMarker"),n.exit("labelImage"),o):t(a)}function o(a){return a===94&&"_hiddenFootnoteSupport"in r.parser.constructs?t(a):e(a)}}const vEe={name:"labelStartLink",resolveAll:vA.resolveAll,tokenize:bEe};function bEe(n,e,t){const r=this;return s;function s(o){return n.enter("labelLink"),n.enter("labelMarker"),n.consume(o),n.exit("labelMarker"),n.exit("labelLink"),i}function i(o){return o===94&&"_hiddenFootnoteSupport"in r.parser.constructs?t(o):e(o)}}const bA={name:"lineEnding",tokenize:wEe};function wEe(n,e){return t;function t(r){return n.enter("lineEnding"),n.consume(r),n.exit("lineEnding"),Fn(n,e,"linePrefix")}}const A7={name:"thematicBreak",tokenize:xEe};function xEe(n,e,t){let r=0,s;return i;function i(c){return n.enter("thematicBreak"),o(c)}function o(c){return s=c,a(c)}function a(c){return c===s?(n.enter("thematicBreakSequence"),l(c)):r>=3&&(c===null||Tt(c))?(n.exit("thematicBreak"),e(c)):t(c)}function l(c){return c===s?(n.consume(c),r++,l):(n.exit("thematicBreakSequence"),En(c)?Fn(n,a,"whitespace")(c):a(c))}}const so={continuation:{tokenize:EEe},exit:TEe,name:"list",tokenize:SEe},kEe={partial:!0,tokenize:AEe},CEe={partial:!0,tokenize:_Ee};function SEe(n,e,t){const r=this,s=r.events[r.events.length-1];let i=s&&s[1].type==="linePrefix"?s[2].sliceSerialize(s[1],!0).length:0,o=0;return a;function a(p){const m=r.containerState.type||(p===42||p===43||p===45?"listUnordered":"listOrdered");if(m==="listUnordered"?!r.containerState.marker||p===r.containerState.marker:mA(p)){if(r.containerState.type||(r.containerState.type=m,n.enter(m,{_container:!0})),m==="listUnordered")return n.enter("listItemPrefix"),p===42||p===45?n.check(A7,t,c)(p):c(p);if(!r.interrupt||p===49)return n.enter("listItemPrefix"),n.enter("listItemValue"),l(p)}return t(p)}function l(p){return mA(p)&&++o<10?(n.consume(p),l):(!r.interrupt||o<2)&&(r.containerState.marker?p===r.containerState.marker:p===41||p===46)?(n.exit("listItemValue"),c(p)):t(p)}function c(p){return n.enter("listItemMarker"),n.consume(p),n.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||p,n.check(j2,r.interrupt?t:u,n.attempt(kEe,f,d))}function u(p){return r.containerState.initialBlankLine=!0,i++,f(p)}function d(p){return En(p)?(n.enter("listItemPrefixWhitespace"),n.consume(p),n.exit("listItemPrefixWhitespace"),f):t(p)}function f(p){return r.containerState.size=i+r.sliceSerialize(n.exit("listItemPrefix"),!0).length,e(p)}}function EEe(n,e,t){const r=this;return r.containerState._closeFlow=void 0,n.check(j2,s,i);function s(a){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,Fn(n,e,"listItemIndent",r.containerState.size+1)(a)}function i(a){return r.containerState.furtherBlankLines||!En(a)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,o(a)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,n.attempt(CEe,e,o)(a))}function o(a){return r.containerState._closeFlow=!0,r.interrupt=void 0,Fn(n,n.attempt(so,e,t),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(a)}}function _Ee(n,e,t){const r=this;return Fn(n,s,"listItemIndent",r.containerState.size+1);function s(i){const o=r.events[r.events.length-1];return o&&o[1].type==="listItemIndent"&&o[2].sliceSerialize(o[1],!0).length===r.containerState.size?e(i):t(i)}}function TEe(n){n.exit(this.containerState.type)}function AEe(n,e,t){const r=this;return Fn(n,s,"listItemPrefixWhitespace",r.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function s(i){const o=r.events[r.events.length-1];return!En(i)&&o&&o[1].type==="listItemPrefixWhitespace"?e(i):t(i)}}const SZ={name:"setextUnderline",resolveTo:NEe,tokenize:MEe};function NEe(n,e){let t=n.length,r,s,i;for(;t--;)if(n[t][0]==="enter"){if(n[t][1].type==="content"){r=t;break}n[t][1].type==="paragraph"&&(s=t)}else n[t][1].type==="content"&&n.splice(t,1),!i&&n[t][1].type==="definition"&&(i=t);const o={type:"setextHeading",start:{...n[r][1].start},end:{...n[n.length-1][1].end}};return n[s][1].type="setextHeadingText",i?(n.splice(s,0,["enter",o,e]),n.splice(i+1,0,["exit",n[r][1],e]),n[r][1].end={...n[i][1].end}):n[r][1]=o,n.push(["exit",o,e]),n}function MEe(n,e,t){const r=this;let s;return i;function i(c){let u=r.events.length,d;for(;u--;)if(r.events[u][1].type!=="lineEnding"&&r.events[u][1].type!=="linePrefix"&&r.events[u][1].type!=="content"){d=r.events[u][1].type==="paragraph";break}return!r.parser.lazy[r.now().line]&&(r.interrupt||d)?(n.enter("setextHeadingLine"),s=c,o(c)):t(c)}function o(c){return n.enter("setextHeadingLineSequence"),a(c)}function a(c){return c===s?(n.consume(c),a):(n.exit("setextHeadingLineSequence"),En(c)?Fn(n,l,"lineSuffix")(c):l(c))}function l(c){return c===null||Tt(c)?(n.exit("setextHeadingLine"),e(c)):t(c)}}const OEe={tokenize:PEe};function PEe(n){const e=this,t=n.attempt(j2,r,n.attempt(this.parser.constructs.flowInitial,s,Fn(n,n.attempt(this.parser.constructs.flow,s,n.attempt(LSe,s)),"linePrefix")));return t;function r(i){if(i===null){n.consume(i);return}return n.enter("lineEndingBlank"),n.consume(i),n.exit("lineEndingBlank"),e.currentConstruct=void 0,t}function s(i){if(i===null){n.consume(i);return}return n.enter("lineEnding"),n.consume(i),n.exit("lineEnding"),e.currentConstruct=void 0,t}}const IEe={resolveAll:_Z()},DEe=EZ("string"),REe=EZ("text");function EZ(n){return{resolveAll:_Z(n==="text"?$Ee:void 0),tokenize:e};function e(t){const r=this,s=this.parser.constructs[n],i=t.attempt(s,o,a);return o;function o(u){return c(u)?i(u):a(u)}function a(u){if(u===null){t.consume(u);return}return t.enter("data"),t.consume(u),l}function l(u){return c(u)?(t.exit("data"),i(u)):(t.consume(u),l)}function c(u){if(u===null)return!0;const d=s[u];let f=-1;if(d)for(;++f<d.length;){const p=d[f];if(!p.previous||p.previous.call(r,r.previous))return!0}return!1}}}function _Z(n){return e;function e(t,r){let s=-1,i;for(;++s<=t.length;)i===void 0?t[s]&&t[s][1].type==="data"&&(i=s,s++):(!t[s]||t[s][1].type!=="data")&&(s!==i+2&&(t[i][1].end=t[s-1][1].end,t.splice(i+2,s-i-2),s=i+2),i=void 0);return n?n(t,r):t}}function $Ee(n,e){let t=0;for(;++t<=n.length;)if((t===n.length||n[t][1].type==="lineEnding")&&n[t-1][1].type==="data"){const r=n[t-1][1],s=e.sliceStream(r);let i=s.length,o=-1,a=0,l;for(;i--;){const c=s[i];if(typeof c=="string"){for(o=c.length;c.charCodeAt(o-1)===32;)a++,o--;if(o)break;o=-1}else if(c===-2)l=!0,a++;else if(c!==-1){i++;break}}if(e._contentTypeTextTrailing&&t===n.length&&(a=0),a){const c={type:t===n.length||l||a<2?"lineSuffix":"hardBreakTrailing",start:{_bufferIndex:i?o:r.start._bufferIndex+o,_index:r.start._index+i,line:r.end.line,column:r.end.column-a,offset:r.end.offset-a},end:{...r.end}};r.end={...c.start},r.start.offset===r.end.offset?Object.assign(r,c):(n.splice(t,0,["enter",c,e],["exit",c,e]),t+=2)}t++}return n}const LEe=Object.freeze(Object.defineProperty({__proto__:null,attentionMarkers:{null:[42,95]},contentInitial:{91:zSe},disable:{null:[]},document:{42:so,43:so,45:so,48:so,49:so,50:so,51:so,52:so,53:so,54:so,55:so,56:so,57:so,62:pZ},flow:{35:KSe,42:A7,45:[SZ,A7],60:JSe,61:SZ,95:A7,96:vZ,126:vZ},flowInitial:{[-2]:yA,[-1]:yA,32:yA},insideSpan:{null:[gA,IEe]},string:{38:gZ,92:mZ},text:{[-5]:bA,[-4]:bA,[-3]:bA,33:gEe,38:gZ,42:gA,60:[vSe,iEe],91:vEe,92:[WSe,mZ],93:vA,95:gA,96:OSe}},Symbol.toStringTag,{value:"Module"}));function FEe(n,e,t){let r={_bufferIndex:-1,_index:0,line:t&&t.line||1,column:t&&t.column||1,offset:t&&t.offset||0};const s={},i=[];let o=[],a=[];const l={attempt:O(A),check:O(T),consume:x,enter:S,exit:_,interrupt:O(T,{interrupt:!0})},c={code:null,containerState:{},defineSkip:y,events:[],now:m,parser:n,previous:null,sliceSerialize:f,sliceStream:p,write:d};let u=e.tokenize.call(c,l);return e.resolveAll&&i.push(e),c;function d(W){return o=xa(o,W),w(),o[o.length-1]!==null?[]:(I(e,0),c.events=T7(i,c.events,c),c.events)}function f(W,H){return BEe(p(W),H)}function p(W){return jEe(o,W)}function m(){const{_bufferIndex:W,_index:H,line:re,column:ae,offset:de}=r;return{_bufferIndex:W,_index:H,line:re,column:ae,offset:de}}function y(W){s[W.line]=W.column,D()}function w(){let W;for(;r._index<o.length;){const H=o[r._index];if(typeof H=="string")for(W=r._index,r._bufferIndex<0&&(r._bufferIndex=0);r._index===W&&r._bufferIndex<H.length;)k(H.charCodeAt(r._bufferIndex));else k(H)}}function k(W){u=u(W)}function x(W){Tt(W)?(r.line++,r.column=1,r.offset+=W===-3?2:1,D()):W!==-1&&(r.column++,r.offset++),r._bufferIndex<0?r._index++:(r._bufferIndex++,r._bufferIndex===o[r._index].length&&(r._bufferIndex=-1,r._index++)),c.previous=W}function S(W,H){const re=H||{};return re.type=W,re.start=m(),c.events.push(["enter",re,c]),a.push(re),re}function _(W){const H=a.pop();return H.end=m(),c.events.push(["exit",H,c]),H}function A(W,H){I(W,H.from)}function T(W,H){H.restore()}function O(W,H){return re;function re(ae,de,le){let X,se,J,$;return Array.isArray(ae)?Pe(ae):"tokenize"in ae?Pe([ae]):ve(ae);function ve(Ye){return it;function it(We){const ot=We!==null&&Ye[We],ge=We!==null&&Ye.null,Ie=[...Array.isArray(ot)?ot:ot?[ot]:[],...Array.isArray(ge)?ge:ge?[ge]:[]];return Pe(Ie)(We)}}function Pe(Ye){return X=Ye,se=0,Ye.length===0?le:q(Ye[se])}function q(Ye){return it;function it(We){return $=R(),J=Ye,Ye.partial||(c.currentConstruct=Ye),Ye.name&&c.parser.constructs.disable.null.includes(Ye.name)?qe():Ye.tokenize.call(H?Object.assign(Object.create(c),H):c,l,Xe,qe)(We)}}function Xe(Ye){return W(J,$),de}function qe(Ye){return $.restore(),++se<X.length?q(X[se]):le}}}function I(W,H){W.resolveAll&&!i.includes(W)&&i.push(W),W.resolve&&zo(c.events,H,c.events.length-H,W.resolve(c.events.slice(H),c)),W.resolveTo&&(c.events=W.resolveTo(c.events,c))}function R(){const W=m(),H=c.previous,re=c.currentConstruct,ae=c.events.length,de=Array.from(a);return{from:ae,restore:le};function le(){r=W,c.previous=H,c.currentConstruct=re,c.events.length=ae,a=de,D()}}function D(){r.line in s&&r.column<2&&(r.column=s[r.line],r.offset+=s[r.line]-1)}}function jEe(n,e){const t=e.start._index,r=e.start._bufferIndex,s=e.end._index,i=e.end._bufferIndex;let o;if(t===s)o=[n[t].slice(r,i)];else{if(o=n.slice(t,s),r>-1){const a=o[0];typeof a=="string"?o[0]=a.slice(r):o.shift()}i>0&&o.push(n[s].slice(0,i))}return o}function BEe(n,e){let t=-1;const r=[];let s;for(;++t<n.length;){const i=n[t];let o;if(typeof i=="string")o=i;else switch(i){case-5:{o="\r";break}case-4:{o=` +`;break}case-3:{o=`\r +`;break}case-2:{o=e?" ":" ";break}case-1:{if(!e&&s)continue;o=" ";break}default:o=String.fromCharCode(i)}s=i===-2,r.push(o)}return r.join("")}function VEe(n){const r={constructs:uZ([LEe,...(n||{}).extensions||[]]),content:s(dSe),defined:[],document:s(fSe),flow:s(OEe),lazy:{},string:s(DEe),text:s(REe)};return r;function s(i){return o;function o(a){return FEe(r,i,a)}}}function zEe(n){for(;!bZ(n););return n}const TZ=/[\0\t\n\r]/g;function HEe(){let n=1,e="",t=!0,r;return s;function s(i,o,a){const l=[];let c,u,d,f,p;for(i=e+(typeof i=="string"?i.toString():new TextDecoder(o||void 0).decode(i)),d=0,e="",t&&(i.charCodeAt(0)===65279&&d++,t=void 0);d<i.length;){if(TZ.lastIndex=d,c=TZ.exec(i),f=c&&c.index!==void 0?c.index:i.length,p=i.charCodeAt(f),!c){e=i.slice(d);break}if(p===10&&d===f&&r)l.push(-3),r=void 0;else switch(r&&(l.push(-5),r=void 0),d<f&&(l.push(i.slice(d,f)),n+=f-d),p){case 0:{l.push(65533),n++;break}case 9:{for(u=Math.ceil(n/4)*4,l.push(-2);n++<u;)l.push(-1);break}case 10:{l.push(-4),n=1;break}default:r=!0,n=1}d=f+1}return a&&(r&&l.push(-5),e&&l.push(e),l.push(null)),l}}const qEe=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function AZ(n){return n.replace(qEe,UEe)}function UEe(n,e,t){if(e)return e;if(t.charCodeAt(0)===35){const s=t.charCodeAt(1),i=s===120||s===88;return dZ(t.slice(i?2:1),i?16:10)}return pA(t)||n}function z2(n){return!n||typeof n!="object"?"":"position"in n||"type"in n?NZ(n.position):"start"in n||"end"in n?NZ(n):"line"in n||"column"in n?wA(n):""}function wA(n){return MZ(n&&n.line)+":"+MZ(n&&n.column)}function NZ(n){return wA(n&&n.start)+"-"+wA(n&&n.end)}function MZ(n){return n&&typeof n=="number"?n:1}const OZ={}.hasOwnProperty;function WEe(n,e,t){return typeof e!="string"&&(t=e,e=void 0),GEe(t)(zEe(VEe(t).document().write(HEe()(n,e,!0))))}function GEe(n){const e={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:i(ue),autolinkProtocol:R,autolinkEmail:R,atxHeading:i(ce),blockQuote:i(ge),characterEscape:R,characterReference:R,codeFenced:i(Ie),codeFencedFenceInfo:o,codeFencedFenceMeta:o,codeIndented:i(Ie,o),codeText:i(pt,o),codeTextData:R,data:R,codeFlowValue:R,definition:i(j),definitionDestinationString:o,definitionLabelString:o,definitionTitleString:o,emphasis:i(Y),hardBreakEscape:i(be),hardBreakTrailing:i(be),htmlFlow:i(xe,o),htmlFlowData:R,htmlText:i(xe,o),htmlTextData:R,image:i(ne),label:o,link:i(ue),listItem:i(L),listItemValue:f,listOrdered:i(ye,d),listUnordered:i(ye),paragraph:i(V),reference:q,referenceString:o,resourceDestinationString:o,resourceTitleString:o,setextHeading:i(ce),strong:i(ie),thematicBreak:i(z)},exit:{atxHeading:l(),atxHeadingSequence:A,autolink:l(),autolinkEmail:ot,autolinkProtocol:We,blockQuote:l(),characterEscapeValue:D,characterReferenceMarkerHexadecimal:qe,characterReferenceMarkerNumeric:qe,characterReferenceValue:Ye,characterReference:it,codeFenced:l(w),codeFencedFence:y,codeFencedFenceInfo:p,codeFencedFenceMeta:m,codeFlowValue:D,codeIndented:l(k),codeText:l(de),codeTextData:D,data:D,definition:l(),definitionDestinationString:_,definitionLabelString:x,definitionTitleString:S,emphasis:l(),hardBreakEscape:l(H),hardBreakTrailing:l(H),htmlFlow:l(re),htmlFlowData:D,htmlText:l(ae),htmlTextData:D,image:l(X),label:J,labelText:se,lineEnding:W,link:l(le),listItem:l(),listOrdered:l(),listUnordered:l(),paragraph:l(),referenceString:Xe,resourceDestinationString:$,resourceTitleString:ve,resource:Pe,setextHeading:l(I),setextHeadingLineSequence:O,setextHeadingText:T,strong:l(),thematicBreak:l()}};PZ(e,(n||{}).mdastExtensions||[]);const t={};return r;function r(B){let ee={type:"root",children:[]};const we={stack:[ee],tokenStack:[],config:e,enter:a,exit:c,buffer:o,resume:u,data:t},Ee=[];let rt=-1;for(;++rt<B.length;)if(B[rt][1].type==="listOrdered"||B[rt][1].type==="listUnordered")if(B[rt][0]==="enter")Ee.push(rt);else{const en=Ee.pop();rt=s(B,en,rt)}for(rt=-1;++rt<B.length;){const en=e[B[rt][0]];OZ.call(en,B[rt][1].type)&&en[B[rt][1].type].call(Object.assign({sliceSerialize:B[rt][2].sliceSerialize},we),B[rt][1])}if(we.tokenStack.length>0){const en=we.tokenStack[we.tokenStack.length-1];(en[1]||IZ).call(we,void 0,en[0])}for(ee.position={start:bh(B.length>0?B[0][1].start:{line:1,column:1,offset:0}),end:bh(B.length>0?B[B.length-2][1].end:{line:1,column:1,offset:0})},rt=-1;++rt<e.transforms.length;)ee=e.transforms[rt](ee)||ee;return ee}function s(B,ee,we){let Ee=ee-1,rt=-1,en=!1,An,tr,$r,Er;for(;++Ee<=we;){const on=B[Ee];switch(on[1].type){case"listUnordered":case"listOrdered":case"blockQuote":{on[0]==="enter"?rt++:rt--,Er=void 0;break}case"lineEndingBlank":{on[0]==="enter"&&(An&&!Er&&!rt&&!$r&&($r=Ee),Er=void 0);break}case"linePrefix":case"listItemValue":case"listItemMarker":case"listItemPrefix":case"listItemPrefixWhitespace":break;default:Er=void 0}if(!rt&&on[0]==="enter"&&on[1].type==="listItemPrefix"||rt===-1&&on[0]==="exit"&&(on[1].type==="listUnordered"||on[1].type==="listOrdered")){if(An){let pr=Ee;for(tr=void 0;pr--;){const Lr=B[pr];if(Lr[1].type==="lineEnding"||Lr[1].type==="lineEndingBlank"){if(Lr[0]==="exit")continue;tr&&(B[tr][1].type="lineEndingBlank",en=!0),Lr[1].type="lineEnding",tr=pr}else if(!(Lr[1].type==="linePrefix"||Lr[1].type==="blockQuotePrefix"||Lr[1].type==="blockQuotePrefixWhitespace"||Lr[1].type==="blockQuoteMarker"||Lr[1].type==="listItemIndent"))break}$r&&(!tr||$r<tr)&&(An._spread=!0),An.end=Object.assign({},tr?B[tr][1].start:on[1].end),B.splice(tr||Ee,0,["exit",An,on[2]]),Ee++,we++}if(on[1].type==="listItemPrefix"){const pr={type:"listItem",_spread:!1,start:Object.assign({},on[1].start),end:void 0};An=pr,B.splice(Ee,0,["enter",pr,on[2]]),Ee++,we++,$r=void 0,Er=!0}}}return B[ee][1]._spread=en,we}function i(B,ee){return we;function we(Ee){a.call(this,B(Ee),Ee),ee&&ee.call(this,Ee)}}function o(){this.stack.push({type:"fragment",children:[]})}function a(B,ee,we){this.stack[this.stack.length-1].children.push(B),this.stack.push(B),this.tokenStack.push([ee,we||void 0]),B.position={start:bh(ee.start),end:void 0}}function l(B){return ee;function ee(we){B&&B.call(this,we),c.call(this,we)}}function c(B,ee){const we=this.stack.pop(),Ee=this.tokenStack.pop();if(Ee)Ee[0].type!==B.type&&(ee?ee.call(this,B,Ee[0]):(Ee[1]||IZ).call(this,B,Ee[0]));else throw new Error("Cannot close `"+B.type+"` ("+z2({start:B.start,end:B.end})+"): it’s not open");we.position.end=bh(B.end)}function u(){return fA(this.stack.pop())}function d(){this.data.expectingFirstListItemValue=!0}function f(B){if(this.data.expectingFirstListItemValue){const ee=this.stack[this.stack.length-2];ee.start=Number.parseInt(this.sliceSerialize(B),10),this.data.expectingFirstListItemValue=void 0}}function p(){const B=this.resume(),ee=this.stack[this.stack.length-1];ee.lang=B}function m(){const B=this.resume(),ee=this.stack[this.stack.length-1];ee.meta=B}function y(){this.data.flowCodeInside||(this.buffer(),this.data.flowCodeInside=!0)}function w(){const B=this.resume(),ee=this.stack[this.stack.length-1];ee.value=B.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),this.data.flowCodeInside=void 0}function k(){const B=this.resume(),ee=this.stack[this.stack.length-1];ee.value=B.replace(/(\r?\n|\r)$/g,"")}function x(B){const ee=this.resume(),we=this.stack[this.stack.length-1];we.label=ee,we.identifier=cl(this.sliceSerialize(B)).toLowerCase()}function S(){const B=this.resume(),ee=this.stack[this.stack.length-1];ee.title=B}function _(){const B=this.resume(),ee=this.stack[this.stack.length-1];ee.url=B}function A(B){const ee=this.stack[this.stack.length-1];if(!ee.depth){const we=this.sliceSerialize(B).length;ee.depth=we}}function T(){this.data.setextHeadingSlurpLineEnding=!0}function O(B){const ee=this.stack[this.stack.length-1];ee.depth=this.sliceSerialize(B).codePointAt(0)===61?1:2}function I(){this.data.setextHeadingSlurpLineEnding=void 0}function R(B){const we=this.stack[this.stack.length-1].children;let Ee=we[we.length-1];(!Ee||Ee.type!=="text")&&(Ee=he(),Ee.position={start:bh(B.start),end:void 0},we.push(Ee)),this.stack.push(Ee)}function D(B){const ee=this.stack.pop();ee.value+=this.sliceSerialize(B),ee.position.end=bh(B.end)}function W(B){const ee=this.stack[this.stack.length-1];if(this.data.atHardBreak){const we=ee.children[ee.children.length-1];we.position.end=bh(B.end),this.data.atHardBreak=void 0;return}!this.data.setextHeadingSlurpLineEnding&&e.canContainEols.includes(ee.type)&&(R.call(this,B),D.call(this,B))}function H(){this.data.atHardBreak=!0}function re(){const B=this.resume(),ee=this.stack[this.stack.length-1];ee.value=B}function ae(){const B=this.resume(),ee=this.stack[this.stack.length-1];ee.value=B}function de(){const B=this.resume(),ee=this.stack[this.stack.length-1];ee.value=B}function le(){const B=this.stack[this.stack.length-1];if(this.data.inReference){const ee=this.data.referenceType||"shortcut";B.type+="Reference",B.referenceType=ee,delete B.url,delete B.title}else delete B.identifier,delete B.label;this.data.referenceType=void 0}function X(){const B=this.stack[this.stack.length-1];if(this.data.inReference){const ee=this.data.referenceType||"shortcut";B.type+="Reference",B.referenceType=ee,delete B.url,delete B.title}else delete B.identifier,delete B.label;this.data.referenceType=void 0}function se(B){const ee=this.sliceSerialize(B),we=this.stack[this.stack.length-2];we.label=AZ(ee),we.identifier=cl(ee).toLowerCase()}function J(){const B=this.stack[this.stack.length-1],ee=this.resume(),we=this.stack[this.stack.length-1];if(this.data.inReference=!0,we.type==="link"){const Ee=B.children;we.children=Ee}else we.alt=ee}function $(){const B=this.resume(),ee=this.stack[this.stack.length-1];ee.url=B}function ve(){const B=this.resume(),ee=this.stack[this.stack.length-1];ee.title=B}function Pe(){this.data.inReference=void 0}function q(){this.data.referenceType="collapsed"}function Xe(B){const ee=this.resume(),we=this.stack[this.stack.length-1];we.label=ee,we.identifier=cl(this.sliceSerialize(B)).toLowerCase(),this.data.referenceType="full"}function qe(B){this.data.characterReferenceType=B.type}function Ye(B){const ee=this.sliceSerialize(B),we=this.data.characterReferenceType;let Ee;we?(Ee=dZ(ee,we==="characterReferenceMarkerNumeric"?10:16),this.data.characterReferenceType=void 0):Ee=pA(ee);const rt=this.stack[this.stack.length-1];rt.value+=Ee}function it(B){const ee=this.stack.pop();ee.position.end=bh(B.end)}function We(B){D.call(this,B);const ee=this.stack[this.stack.length-1];ee.url=this.sliceSerialize(B)}function ot(B){D.call(this,B);const ee=this.stack[this.stack.length-1];ee.url="mailto:"+this.sliceSerialize(B)}function ge(){return{type:"blockquote",children:[]}}function Ie(){return{type:"code",lang:null,meta:null,value:""}}function pt(){return{type:"inlineCode",value:""}}function j(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function Y(){return{type:"emphasis",children:[]}}function ce(){return{type:"heading",depth:0,children:[]}}function be(){return{type:"break"}}function xe(){return{type:"html",value:""}}function ne(){return{type:"image",title:null,url:"",alt:null}}function ue(){return{type:"link",title:null,url:"",children:[]}}function ye(B){return{type:"list",ordered:B.type==="listOrdered",start:null,spread:B._spread,children:[]}}function L(B){return{type:"listItem",spread:B._spread,checked:null,children:[]}}function V(){return{type:"paragraph",children:[]}}function ie(){return{type:"strong",children:[]}}function he(){return{type:"text",value:""}}function z(){return{type:"thematicBreak"}}}function bh(n){return{line:n.line,column:n.column,offset:n.offset}}function PZ(n,e){let t=-1;for(;++t<e.length;){const r=e[t];Array.isArray(r)?PZ(n,r):KEe(n,r)}}function KEe(n,e){let t;for(t in e)if(OZ.call(e,t))switch(t){case"canContainEols":{const r=e[t];r&&n[t].push(...r);break}case"transforms":{const r=e[t];r&&n[t].push(...r);break}case"enter":case"exit":{const r=e[t];r&&Object.assign(n[t],r);break}}}function IZ(n,e){throw n?new Error("Cannot close `"+n.type+"` ("+z2({start:n.start,end:n.end})+"): a different token (`"+e.type+"`, "+z2({start:e.start,end:e.end})+") is open"):new Error("Cannot close document, a token (`"+e.type+"`, "+z2({start:e.start,end:e.end})+") is still open")}function xA(n){const e=this;e.parser=t;function t(r){return WEe(r,{...e.data("settings"),...n,extensions:e.data("micromarkExtensions")||[],mdastExtensions:e.data("fromMarkdownExtensions")||[]})}}const DZ={}.hasOwnProperty;function YEe(n,e){const t=e||{};function r(s,...i){let o=r.invalid;const a=r.handlers;if(s&&DZ.call(s,n)){const l=String(s[n]);o=DZ.call(a,l)?a[l]:r.unknown}if(o)return o.call(this,s,...i)}return r.handlers=t.handlers||{},r.invalid=t.invalid,r.unknown=t.unknown,r}const ZEe={}.hasOwnProperty;function RZ(n,e){let t=-1,r;if(e.extensions)for(;++t<e.extensions.length;)RZ(n,e.extensions[t]);for(r in e)if(ZEe.call(e,r))switch(r){case"extensions":break;case"unsafe":{$Z(n[r],e[r]);break}case"join":{$Z(n[r],e[r]);break}case"handlers":{XEe(n[r],e[r]);break}default:n.options[r]=e[r]}return n}function $Z(n,e){e&&n.push(...e)}function XEe(n,e){e&&Object.assign(n,e)}function JEe(n,e,t,r){const s=t.enter("blockquote"),i=t.createTracker(r);i.move("> "),i.shift(2);const o=t.indentLines(t.containerFlow(n,i.current()),QEe);return s(),o}function QEe(n,e,t){return">"+(t?"":" ")+n}function LZ(n,e){return FZ(n,e.inConstruct,!0)&&!FZ(n,e.notInConstruct,!1)}function FZ(n,e,t){if(typeof e=="string"&&(e=[e]),!e||e.length===0)return t;let r=-1;for(;++r<e.length;)if(n.includes(e[r]))return!0;return!1}function jZ(n,e,t,r){let s=-1;for(;++s<t.unsafe.length;)if(t.unsafe[s].character===` +`&&LZ(t.stack,t.unsafe[s]))return/[ \t]/.test(r.before)?"":" ";return`\\ +`}function e_e(n,e){const t=String(n);let r=t.indexOf(e),s=r,i=0,o=0;if(typeof e!="string")throw new TypeError("Expected substring");for(;r!==-1;)r===s?++i>o&&(o=i):i=1,s=r+e.length,r=t.indexOf(e,s);return o}function kA(n,e){return!!(e.options.fences===!1&&n.value&&!n.lang&&/[^ \r\n]/.test(n.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(n.value))}function t_e(n){const e=n.options.fence||"`";if(e!=="`"&&e!=="~")throw new Error("Cannot serialize code with `"+e+"` for `options.fence`, expected `` ` `` or `~`");return e}function n_e(n,e,t,r){const s=t_e(t),i=n.value||"",o=s==="`"?"GraveAccent":"Tilde";if(kA(n,t)){const d=t.enter("codeIndented"),f=t.indentLines(i,r_e);return d(),f}const a=t.createTracker(r),l=s.repeat(Math.max(e_e(i,s)+1,3)),c=t.enter("codeFenced");let u=a.move(l);if(n.lang){const d=t.enter(`codeFencedLang${o}`);u+=a.move(t.safe(n.lang,{before:u,after:" ",encode:["`"],...a.current()})),d()}if(n.lang&&n.meta){const d=t.enter(`codeFencedMeta${o}`);u+=a.move(" "),u+=a.move(t.safe(n.meta,{before:u,after:` +`,encode:["`"],...a.current()})),d()}return u+=a.move(` +`),i&&(u+=a.move(i+` +`)),u+=a.move(l),c(),u}function r_e(n,e,t){return(t?"":" ")+n}function CA(n){const e=n.options.quote||'"';if(e!=='"'&&e!=="'")throw new Error("Cannot serialize title with `"+e+"` for `options.quote`, expected `\"`, or `'`");return e}function s_e(n,e,t,r){const s=CA(t),i=s==='"'?"Quote":"Apostrophe",o=t.enter("definition");let a=t.enter("label");const l=t.createTracker(r);let c=l.move("[");return c+=l.move(t.safe(t.associationId(n),{before:c,after:"]",...l.current()})),c+=l.move("]: "),a(),!n.url||/[\0- \u007F]/.test(n.url)?(a=t.enter("destinationLiteral"),c+=l.move("<"),c+=l.move(t.safe(n.url,{before:c,after:">",...l.current()})),c+=l.move(">")):(a=t.enter("destinationRaw"),c+=l.move(t.safe(n.url,{before:c,after:n.title?" ":` +`,...l.current()}))),a(),n.title&&(a=t.enter(`title${i}`),c+=l.move(" "+s),c+=l.move(t.safe(n.title,{before:c,after:s,...l.current()})),c+=l.move(s),a()),o(),c}function i_e(n){const e=n.options.emphasis||"*";if(e!=="*"&&e!=="_")throw new Error("Cannot serialize emphasis with `"+e+"` for `options.emphasis`, expected `*`, or `_`");return e}function wh(n){return"&#x"+n.toString(16).toUpperCase()+";"}function N7(n,e,t){const r=o1(n),s=o1(e);return r===void 0?s===void 0?t==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:s===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:r===1?s===void 0?{inside:!1,outside:!1}:s===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:s===void 0?{inside:!1,outside:!1}:s===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}BZ.peek=o_e;function BZ(n,e,t,r){const s=i_e(t),i=t.enter("emphasis"),o=t.createTracker(r),a=o.move(s);let l=o.move(t.containerPhrasing(n,{after:s,before:a,...o.current()}));const c=l.charCodeAt(0),u=N7(r.before.charCodeAt(r.before.length-1),c,s);u.inside&&(l=wh(c)+l.slice(1));const d=l.charCodeAt(l.length-1),f=N7(r.after.charCodeAt(0),d,s);f.inside&&(l=l.slice(0,-1)+wh(d));const p=o.move(s);return i(),t.attentionEncodeSurroundingInfo={after:f.outside,before:u.outside},a+l+p}function o_e(n,e,t){return t.options.emphasis||"*"}const M7=function(n){if(n==null)return u_e;if(typeof n=="function")return O7(n);if(typeof n=="object")return Array.isArray(n)?a_e(n):l_e(n);if(typeof n=="string")return c_e(n);throw new Error("Expected function, string, or object as test")};function a_e(n){const e=[];let t=-1;for(;++t<n.length;)e[t]=M7(n[t]);return O7(r);function r(...s){let i=-1;for(;++i<e.length;)if(e[i].apply(this,s))return!0;return!1}}function l_e(n){const e=n;return O7(t);function t(r){const s=r;let i;for(i in n)if(s[i]!==e[i])return!1;return!0}}function c_e(n){return O7(e);function e(t){return t&&t.type===n}}function O7(n){return e;function e(t,r,s){return!!(d_e(t)&&n.call(this,t,typeof r=="number"?r:void 0,s||void 0))}}function u_e(){return!0}function d_e(n){return n!==null&&typeof n=="object"&&"type"in n}function HHe(n){return n}const VZ=[],h_e=!0,SA=!1,EA="skip";function _A(n,e,t,r){let s;typeof e=="function"&&typeof t!="function"?(r=t,t=e):s=e;const i=M7(s),o=r?-1:1;a(n,void 0,[])();function a(l,c,u){const d=l&&typeof l=="object"?l:{};if(typeof d.type=="string"){const p=typeof d.tagName=="string"?d.tagName:typeof d.name=="string"?d.name:void 0;Object.defineProperty(f,"name",{value:"node ("+(l.type+(p?"<"+p+">":""))+")"})}return f;function f(){let p=VZ,m,y,w;if((!e||i(l,c,u[u.length-1]||void 0))&&(p=f_e(t(l,u)),p[0]===SA))return p;if("children"in l&&l.children){const k=l;if(k.children&&p[0]!==EA)for(y=(r?k.children.length:-1)+o,w=u.concat(k);y>-1&&y<k.children.length;){const x=k.children[y];if(m=a(x,y,w)(),m[0]===SA)return m;y=typeof m[1]=="number"?m[1]:y+o}}return p}}}function f_e(n){return Array.isArray(n)?n:typeof n=="number"?[h_e,n]:n==null?VZ:[n]}function n0(n,e,t,r){let s,i,o;typeof e=="function"&&typeof t!="function"?(i=void 0,o=e,s=t):(i=e,o=t,s=r),_A(n,i,a,s);function a(l,c){const u=c[c.length-1],d=u?u.children.indexOf(l):void 0;return o(l,d,u)}}function zZ(n,e){let t=!1;return n0(n,function(r){if("value"in r&&/\r?\n|\r/.test(r.value)||r.type==="break")return t=!0,SA}),!!((!n.depth||n.depth<3)&&fA(n)&&(e.options.setext||t))}function p_e(n,e,t,r){const s=Math.max(Math.min(6,n.depth||1),1),i=t.createTracker(r);if(zZ(n,t)){const u=t.enter("headingSetext"),d=t.enter("phrasing"),f=t.containerPhrasing(n,{...i.current(),before:` +`,after:` +`});return d(),u(),f+` +`+(s===1?"=":"-").repeat(f.length-(Math.max(f.lastIndexOf("\r"),f.lastIndexOf(` +`))+1))}const o="#".repeat(s),a=t.enter("headingAtx"),l=t.enter("phrasing");i.move(o+" ");let c=t.containerPhrasing(n,{before:"# ",after:` +`,...i.current()});return/^[\t ]/.test(c)&&(c=wh(c.charCodeAt(0))+c.slice(1)),c=c?o+" "+c:o,t.options.closeAtx&&(c+=" "+o),l(),a(),c}HZ.peek=m_e;function HZ(n){return n.value||""}function m_e(){return"<"}qZ.peek=g_e;function qZ(n,e,t,r){const s=CA(t),i=s==='"'?"Quote":"Apostrophe",o=t.enter("image");let a=t.enter("label");const l=t.createTracker(r);let c=l.move("![");return c+=l.move(t.safe(n.alt,{before:c,after:"]",...l.current()})),c+=l.move("]("),a(),!n.url&&n.title||/[\0- \u007F]/.test(n.url)?(a=t.enter("destinationLiteral"),c+=l.move("<"),c+=l.move(t.safe(n.url,{before:c,after:">",...l.current()})),c+=l.move(">")):(a=t.enter("destinationRaw"),c+=l.move(t.safe(n.url,{before:c,after:n.title?" ":")",...l.current()}))),a(),n.title&&(a=t.enter(`title${i}`),c+=l.move(" "+s),c+=l.move(t.safe(n.title,{before:c,after:s,...l.current()})),c+=l.move(s),a()),c+=l.move(")"),o(),c}function g_e(){return"!"}UZ.peek=y_e;function UZ(n,e,t,r){const s=n.referenceType,i=t.enter("imageReference");let o=t.enter("label");const a=t.createTracker(r);let l=a.move("![");const c=t.safe(n.alt,{before:l,after:"]",...a.current()});l+=a.move(c+"]["),o();const u=t.stack;t.stack=[],o=t.enter("reference");const d=t.safe(t.associationId(n),{before:l,after:"]",...a.current()});return o(),t.stack=u,i(),s==="full"||!c||c!==d?l+=a.move(d+"]"):s==="shortcut"?l=l.slice(0,-1):l+=a.move("]"),l}function y_e(){return"!"}WZ.peek=v_e;function WZ(n,e,t){let r=n.value||"",s="`",i=-1;for(;new RegExp("(^|[^`])"+s+"([^`]|$)").test(r);)s+="`";for(/[^ \r\n]/.test(r)&&(/^[ \r\n]/.test(r)&&/[ \r\n]$/.test(r)||/^`|`$/.test(r))&&(r=" "+r+" ");++i<t.unsafe.length;){const o=t.unsafe[i],a=t.compilePattern(o);let l;if(o.atBreak)for(;l=a.exec(r);){let c=l.index;r.charCodeAt(c)===10&&r.charCodeAt(c-1)===13&&c--,r=r.slice(0,c)+" "+r.slice(l.index+1)}}return s+r+s}function v_e(){return"`"}function GZ(n,e){const t=fA(n);return!!(!e.options.resourceLink&&n.url&&!n.title&&n.children&&n.children.length===1&&n.children[0].type==="text"&&(t===n.url||"mailto:"+t===n.url)&&/^[a-z][a-z+.-]+:/i.test(n.url)&&!/[\0- <>\u007F]/.test(n.url))}KZ.peek=b_e;function KZ(n,e,t,r){const s=CA(t),i=s==='"'?"Quote":"Apostrophe",o=t.createTracker(r);let a,l;if(GZ(n,t)){const u=t.stack;t.stack=[],a=t.enter("autolink");let d=o.move("<");return d+=o.move(t.containerPhrasing(n,{before:d,after:">",...o.current()})),d+=o.move(">"),a(),t.stack=u,d}a=t.enter("link"),l=t.enter("label");let c=o.move("[");return c+=o.move(t.containerPhrasing(n,{before:c,after:"](",...o.current()})),c+=o.move("]("),l(),!n.url&&n.title||/[\0- \u007F]/.test(n.url)?(l=t.enter("destinationLiteral"),c+=o.move("<"),c+=o.move(t.safe(n.url,{before:c,after:">",...o.current()})),c+=o.move(">")):(l=t.enter("destinationRaw"),c+=o.move(t.safe(n.url,{before:c,after:n.title?" ":")",...o.current()}))),l(),n.title&&(l=t.enter(`title${i}`),c+=o.move(" "+s),c+=o.move(t.safe(n.title,{before:c,after:s,...o.current()})),c+=o.move(s),l()),c+=o.move(")"),a(),c}function b_e(n,e,t){return GZ(n,t)?"<":"["}YZ.peek=w_e;function YZ(n,e,t,r){const s=n.referenceType,i=t.enter("linkReference");let o=t.enter("label");const a=t.createTracker(r);let l=a.move("[");const c=t.containerPhrasing(n,{before:l,after:"]",...a.current()});l+=a.move(c+"]["),o();const u=t.stack;t.stack=[],o=t.enter("reference");const d=t.safe(t.associationId(n),{before:l,after:"]",...a.current()});return o(),t.stack=u,i(),s==="full"||!c||c!==d?l+=a.move(d+"]"):s==="shortcut"?l=l.slice(0,-1):l+=a.move("]"),l}function w_e(){return"["}function TA(n){const e=n.options.bullet||"*";if(e!=="*"&&e!=="+"&&e!=="-")throw new Error("Cannot serialize items with `"+e+"` for `options.bullet`, expected `*`, `+`, or `-`");return e}function x_e(n){const e=TA(n),t=n.options.bulletOther;if(!t)return e==="*"?"-":"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(t===e)throw new Error("Expected `bullet` (`"+e+"`) and `bulletOther` (`"+t+"`) to be different");return t}function k_e(n){const e=n.options.bulletOrdered||".";if(e!=="."&&e!==")")throw new Error("Cannot serialize items with `"+e+"` for `options.bulletOrdered`, expected `.` or `)`");return e}function ZZ(n){const e=n.options.rule||"*";if(e!=="*"&&e!=="-"&&e!=="_")throw new Error("Cannot serialize rules with `"+e+"` for `options.rule`, expected `*`, `-`, or `_`");return e}function C_e(n,e,t,r){const s=t.enter("list"),i=t.bulletCurrent;let o=n.ordered?k_e(t):TA(t);const a=n.ordered?o==="."?")":".":x_e(t);let l=e&&t.bulletLastUsed?o===t.bulletLastUsed:!1;if(!n.ordered){const u=n.children?n.children[0]:void 0;if((o==="*"||o==="-")&&u&&(!u.children||!u.children[0])&&t.stack[t.stack.length-1]==="list"&&t.stack[t.stack.length-2]==="listItem"&&t.stack[t.stack.length-3]==="list"&&t.stack[t.stack.length-4]==="listItem"&&t.indexStack[t.indexStack.length-1]===0&&t.indexStack[t.indexStack.length-2]===0&&t.indexStack[t.indexStack.length-3]===0&&(l=!0),ZZ(t)===o&&u){let d=-1;for(;++d<n.children.length;){const f=n.children[d];if(f&&f.type==="listItem"&&f.children&&f.children[0]&&f.children[0].type==="thematicBreak"){l=!0;break}}}}l&&(o=a),t.bulletCurrent=o;const c=t.containerFlow(n,r);return t.bulletLastUsed=o,t.bulletCurrent=i,s(),c}function S_e(n){const e=n.options.listItemIndent||"one";if(e!=="tab"&&e!=="one"&&e!=="mixed")throw new Error("Cannot serialize items with `"+e+"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`");return e}function E_e(n,e,t,r){const s=S_e(t);let i=t.bulletCurrent||TA(t);e&&e.type==="list"&&e.ordered&&(i=(typeof e.start=="number"&&e.start>-1?e.start:1)+(t.options.incrementListMarker===!1?0:e.children.indexOf(n))+i);let o=i.length+1;(s==="tab"||s==="mixed"&&(e&&e.type==="list"&&e.spread||n.spread))&&(o=Math.ceil(o/4)*4);const a=t.createTracker(r);a.move(i+" ".repeat(o-i.length)),a.shift(o);const l=t.enter("listItem"),c=t.indentLines(t.containerFlow(n,a.current()),u);return l(),c;function u(d,f,p){return f?(p?"":" ".repeat(o))+d:(p?i:i+" ".repeat(o-i.length))+d}}function __e(n,e,t,r){const s=t.enter("paragraph"),i=t.enter("phrasing"),o=t.containerPhrasing(n,r);return i(),s(),o}const T_e=M7(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function A_e(n,e,t,r){return(n.children.some(function(o){return T_e(o)})?t.containerPhrasing:t.containerFlow).call(t,n,r)}function N_e(n){const e=n.options.strong||"*";if(e!=="*"&&e!=="_")throw new Error("Cannot serialize strong with `"+e+"` for `options.strong`, expected `*`, or `_`");return e}XZ.peek=M_e;function XZ(n,e,t,r){const s=N_e(t),i=t.enter("strong"),o=t.createTracker(r),a=o.move(s+s);let l=o.move(t.containerPhrasing(n,{after:s,before:a,...o.current()}));const c=l.charCodeAt(0),u=N7(r.before.charCodeAt(r.before.length-1),c,s);u.inside&&(l=wh(c)+l.slice(1));const d=l.charCodeAt(l.length-1),f=N7(r.after.charCodeAt(0),d,s);f.inside&&(l=l.slice(0,-1)+wh(d));const p=o.move(s+s);return i(),t.attentionEncodeSurroundingInfo={after:f.outside,before:u.outside},a+l+p}function M_e(n,e,t){return t.options.strong||"*"}function O_e(n,e,t,r){return t.safe(n.value,r)}function P_e(n){const e=n.options.ruleRepetition||3;if(e<3)throw new Error("Cannot serialize rules with repetition `"+e+"` for `options.ruleRepetition`, expected `3` or more");return e}function I_e(n,e,t){const r=(ZZ(t)+(t.options.ruleSpaces?" ":"")).repeat(P_e(t));return t.options.ruleSpaces?r.slice(0,-1):r}const AA={blockquote:JEe,break:jZ,code:n_e,definition:s_e,emphasis:BZ,hardBreak:jZ,heading:p_e,html:HZ,image:qZ,imageReference:UZ,inlineCode:WZ,link:KZ,linkReference:YZ,list:C_e,listItem:E_e,paragraph:__e,root:A_e,strong:XZ,text:O_e,thematicBreak:I_e},D_e=[R_e];function R_e(n,e,t,r){if(e.type==="code"&&kA(e,r)&&(n.type==="list"||n.type===e.type&&kA(n,r)))return!1;if("spread"in t&&typeof t.spread=="boolean")return n.type==="paragraph"&&(n.type===e.type||e.type==="definition"||e.type==="heading"&&zZ(e,r))?void 0:t.spread?1:0}const r0=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"],$_e=[{character:" ",after:"[\\r\\n]",inConstruct:"phrasing"},{character:" ",before:"[\\r\\n]",inConstruct:"phrasing"},{character:" ",inConstruct:["codeFencedLangGraveAccent","codeFencedLangTilde"]},{character:"\r",inConstruct:["codeFencedLangGraveAccent","codeFencedLangTilde","codeFencedMetaGraveAccent","codeFencedMetaTilde","destinationLiteral","headingAtx"]},{character:` +`,inConstruct:["codeFencedLangGraveAccent","codeFencedLangTilde","codeFencedMetaGraveAccent","codeFencedMetaTilde","destinationLiteral","headingAtx"]},{character:" ",after:"[\\r\\n]",inConstruct:"phrasing"},{character:" ",before:"[\\r\\n]",inConstruct:"phrasing"},{character:" ",inConstruct:["codeFencedLangGraveAccent","codeFencedLangTilde"]},{character:"!",after:"\\[",inConstruct:"phrasing",notInConstruct:r0},{character:'"',inConstruct:"titleQuote"},{atBreak:!0,character:"#"},{character:"#",inConstruct:"headingAtx",after:`(?:[\r +]|$)`},{character:"&",after:"[#A-Za-z]",inConstruct:"phrasing"},{character:"'",inConstruct:"titleApostrophe"},{character:"(",inConstruct:"destinationRaw"},{before:"\\]",character:"(",inConstruct:"phrasing",notInConstruct:r0},{atBreak:!0,before:"\\d+",character:")"},{character:")",inConstruct:"destinationRaw"},{atBreak:!0,character:"*",after:`(?:[ \r +*])`},{character:"*",inConstruct:"phrasing",notInConstruct:r0},{atBreak:!0,character:"+",after:`(?:[ \r +])`},{atBreak:!0,character:"-",after:`(?:[ \r +-])`},{atBreak:!0,before:"\\d+",character:".",after:`(?:[ \r +]|$)`},{atBreak:!0,character:"<",after:"[!/?A-Za-z]"},{character:"<",after:"[!/?A-Za-z]",inConstruct:"phrasing",notInConstruct:r0},{character:"<",inConstruct:"destinationLiteral"},{atBreak:!0,character:"="},{atBreak:!0,character:">"},{character:">",inConstruct:"destinationLiteral"},{atBreak:!0,character:"["},{character:"[",inConstruct:"phrasing",notInConstruct:r0},{character:"[",inConstruct:["label","reference"]},{character:"\\",after:"[\\r\\n]",inConstruct:"phrasing"},{character:"]",inConstruct:["label","reference"]},{atBreak:!0,character:"_"},{character:"_",inConstruct:"phrasing",notInConstruct:r0},{atBreak:!0,character:"`"},{character:"`",inConstruct:["codeFencedLangGraveAccent","codeFencedMetaGraveAccent"]},{character:"`",inConstruct:"phrasing",notInConstruct:r0},{atBreak:!0,character:"~"}];function L_e(n){return n.label||!n.identifier?n.label||"":AZ(n.identifier)}function F_e(n){if(!n._compiled){const e=(n.atBreak?"[\\r\\n][\\t ]*":"")+(n.before?"(?:"+n.before+")":"");n._compiled=new RegExp((e?"("+e+")":"")+(/[|\\{}()[\]^$+*?.-]/.test(n.character)?"\\":"")+n.character+(n.after?"(?:"+n.after+")":""),"g")}return n._compiled}function j_e(n,e,t){const r=e.indexStack,s=n.children||[],i=[];let o=-1,a=t.before,l;r.push(-1);let c=e.createTracker(t);for(;++o<s.length;){const u=s[o];let d;if(r[r.length-1]=o,o+1<s.length){let m=e.handle.handlers[s[o+1].type];m&&m.peek&&(m=m.peek),d=m?m(s[o+1],n,e,{before:"",after:"",...c.current()}).charAt(0):""}else d=t.after;i.length>0&&(a==="\r"||a===` +`)&&u.type==="html"&&(i[i.length-1]=i[i.length-1].replace(/(\r?\n|\r)$/," "),a=" ",c=e.createTracker(t),c.move(i.join("")));let f=e.handle(u,n,e,{...c.current(),after:d,before:a});l&&l===f.slice(0,1)&&(f=wh(l.charCodeAt(0))+f.slice(1));const p=e.attentionEncodeSurroundingInfo;e.attentionEncodeSurroundingInfo=void 0,l=void 0,p&&(i.length>0&&p.before&&a===i[i.length-1].slice(-1)&&(i[i.length-1]=i[i.length-1].slice(0,-1)+wh(a.charCodeAt(0))),p.after&&(l=d)),c.move(f),i.push(f),a=f.slice(-1)}return r.pop(),i.join("")}function B_e(n,e,t){const r=e.indexStack,s=n.children||[],i=e.createTracker(t),o=[];let a=-1;for(r.push(-1);++a<s.length;){const l=s[a];r[r.length-1]=a,o.push(i.move(e.handle(l,n,e,{before:` +`,after:` +`,...i.current()}))),l.type!=="list"&&(e.bulletLastUsed=void 0),a<s.length-1&&o.push(i.move(V_e(l,s[a+1],n,e)))}return r.pop(),o.join("")}function V_e(n,e,t,r){let s=r.join.length;for(;s--;){const i=r.join[s](n,e,t,r);if(i===!0||i===1)break;if(typeof i=="number")return` +`.repeat(1+i);if(i===!1)return` + +<!----> + +`}return` + +`}const z_e=/\r?\n|\r/g;function H_e(n,e){const t=[];let r=0,s=0,i;for(;i=z_e.exec(n);)o(n.slice(r,i.index)),t.push(i[0]),r=i.index+i[0].length,s++;return o(n.slice(r)),t.join("");function o(a){t.push(e(a,s,!a))}}function q_e(n,e,t){const r=(t.before||"")+(e||"")+(t.after||""),s=[],i=[],o={};let a=-1;for(;++a<n.unsafe.length;){const u=n.unsafe[a];if(!LZ(n.stack,u))continue;const d=n.compilePattern(u);let f;for(;f=d.exec(r);){const p="before"in u||!!u.atBreak,m="after"in u,y=f.index+(p?f[1].length:0);s.includes(y)?(o[y].before&&!p&&(o[y].before=!1),o[y].after&&!m&&(o[y].after=!1)):(s.push(y),o[y]={before:p,after:m})}}s.sort(U_e);let l=t.before?t.before.length:0;const c=r.length-(t.after?t.after.length:0);for(a=-1;++a<s.length;){const u=s[a];u<l||u>=c||u+1<c&&s[a+1]===u+1&&o[u].after&&!o[u+1].before&&!o[u+1].after||s[a-1]===u-1&&o[u].before&&!o[u-1].before&&!o[u-1].after||(l!==u&&i.push(JZ(r.slice(l,u),"\\")),l=u,/[!-/:-@[-`{-~]/.test(r.charAt(u))&&(!t.encode||!t.encode.includes(r.charAt(u)))?i.push("\\"):(i.push(wh(r.charCodeAt(u))),l++))}return i.push(JZ(r.slice(l,c),t.after)),i.join("")}function U_e(n,e){return n-e}function JZ(n,e){const t=/\\(?=[!-/:-@[-`{-~])/g,r=[],s=[],i=n+e;let o=-1,a=0,l;for(;l=t.exec(i);)r.push(l.index);for(;++o<r.length;)a!==r[o]&&s.push(n.slice(a,r[o])),s.push("\\"),a=r[o];return s.push(n.slice(a)),s.join("")}function W_e(n){const e=n||{},t=e.now||{};let r=e.lineShift||0,s=t.line||1,i=t.column||1;return{move:l,current:o,shift:a};function o(){return{now:{line:s,column:i},lineShift:r}}function a(c){r+=c}function l(c){const u=c||"",d=u.split(/\r?\n|\r/g),f=d[d.length-1];return s+=d.length-1,i=d.length===1?i+f.length:1+f.length+r,u}}function G_e(n,e){const t=e||{},r={associationId:L_e,containerPhrasing:X_e,containerFlow:J_e,createTracker:W_e,compilePattern:F_e,enter:i,handlers:{...AA},handle:void 0,indentLines:H_e,indexStack:[],join:[...D_e],options:{},safe:Q_e,stack:[],unsafe:[...$_e]};RZ(r,t),r.options.tightDefinitions&&r.join.push(Z_e),r.handle=YEe("type",{invalid:K_e,unknown:Y_e,handlers:r.handlers});let s=r.handle(n,void 0,r,{before:` +`,after:` +`,now:{line:1,column:1},lineShift:0});return s&&s.charCodeAt(s.length-1)!==10&&s.charCodeAt(s.length-1)!==13&&(s+=` +`),s;function i(o){return r.stack.push(o),a;function a(){r.stack.pop()}}}function K_e(n){throw new Error("Cannot handle value `"+n+"`, expected node")}function Y_e(n){const e=n;throw new Error("Cannot handle unknown node `"+e.type+"`")}function Z_e(n,e){if(n.type==="definition"&&n.type===e.type)return 0}function X_e(n,e){return j_e(n,this,e)}function J_e(n,e){return B_e(n,this,e)}function Q_e(n,e){return q_e(this,n,e)}function NA(n){const e=this;e.compiler=t;function t(r){return G_e(r,{...e.data("settings"),...n,extensions:e.data("toMarkdownExtensions")||[]})}}function QZ(n){if(n)throw n}var P7=Object.prototype.hasOwnProperty,eX=Object.prototype.toString,tX=Object.defineProperty,nX=Object.getOwnPropertyDescriptor,rX=function(e){return typeof Array.isArray=="function"?Array.isArray(e):eX.call(e)==="[object Array]"},sX=function(e){if(!e||eX.call(e)!=="[object Object]")return!1;var t=P7.call(e,"constructor"),r=e.constructor&&e.constructor.prototype&&P7.call(e.constructor.prototype,"isPrototypeOf");if(e.constructor&&!t&&!r)return!1;var s;for(s in e);return typeof s>"u"||P7.call(e,s)},iX=function(e,t){tX&&t.name==="__proto__"?tX(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},oX=function(e,t){if(t==="__proto__")if(P7.call(e,t)){if(nX)return nX(e,t).value}else return;return e[t]},eTe=function n(){var e,t,r,s,i,o,a=arguments[0],l=1,c=arguments.length,u=!1;for(typeof a=="boolean"&&(u=a,a=arguments[1]||{},l=2),(a==null||typeof a!="object"&&typeof a!="function")&&(a={});l<c;++l)if(e=arguments[l],e!=null)for(t in e)r=oX(a,t),s=oX(e,t),a!==s&&(u&&s&&(sX(s)||(i=rX(s)))?(i?(i=!1,o=r&&rX(r)?r:[]):o=r&&sX(r)?r:{},iX(a,{name:t,newValue:n(u,o,s)})):typeof s<"u"&&iX(a,{name:t,newValue:s}));return a};const MA=R$(eTe);function qHe(){}function OA(n){if(typeof n!="object"||n===null)return!1;const e=Object.getPrototypeOf(n);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Symbol.toStringTag in n)&&!(Symbol.iterator in n)}function tTe(){const n=[],e={run:t,use:r};return e;function t(...s){let i=-1;const o=s.pop();if(typeof o!="function")throw new TypeError("Expected function as last argument, not "+o);a(null,...s);function a(l,...c){const u=n[++i];let d=-1;if(l){o(l);return}for(;++d<s.length;)(c[d]===null||c[d]===void 0)&&(c[d]=s[d]);s=c,u?nTe(u,a)(...c):o(null,...c)}}function r(s){if(typeof s!="function")throw new TypeError("Expected `middelware` to be a function, not "+s);return n.push(s),e}}function nTe(n,e){let t;return r;function r(...o){const a=n.length>o.length;let l;a&&o.push(s);try{l=n.apply(this,o)}catch(c){const u=c;if(a&&t)throw u;return s(u)}a||(l&&l.then&&typeof l.then=="function"?l.then(i,s):l instanceof Error?s(l):i(l))}function s(o,...a){t||(t=!0,e(o,...a))}function i(o){s(null,o)}}class io extends Error{constructor(e,t,r){super(),typeof t=="string"&&(r=t,t=void 0);let s="",i={},o=!1;if(t&&("line"in t&&"column"in t?i={place:t}:"start"in t&&"end"in t?i={place:t}:"type"in t?i={ancestors:[t],place:t.position}:i={...t}),typeof e=="string"?s=e:!i.cause&&e&&(o=!0,s=e.message,i.cause=e),!i.ruleId&&!i.source&&typeof r=="string"){const l=r.indexOf(":");l===-1?i.ruleId=r:(i.source=r.slice(0,l),i.ruleId=r.slice(l+1))}if(!i.place&&i.ancestors&&i.ancestors){const l=i.ancestors[i.ancestors.length-1];l&&(i.place=l.position)}const a=i.place&&"start"in i.place?i.place.start:i.place;this.ancestors=i.ancestors||void 0,this.cause=i.cause||void 0,this.column=a?a.column:void 0,this.fatal=void 0,this.file="",this.message=s,this.line=a?a.line:void 0,this.name=z2(i.place)||"1:1",this.place=i.place||void 0,this.reason=this.message,this.ruleId=i.ruleId||void 0,this.source=i.source||void 0,this.stack=o&&i.cause&&typeof i.cause.stack=="string"?i.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}io.prototype.file="",io.prototype.name="",io.prototype.reason="",io.prototype.message="",io.prototype.stack="",io.prototype.column=void 0,io.prototype.line=void 0,io.prototype.ancestors=void 0,io.prototype.cause=void 0,io.prototype.fatal=void 0,io.prototype.place=void 0,io.prototype.ruleId=void 0,io.prototype.source=void 0;const dc={basename:rTe,dirname:sTe,extname:iTe,join:oTe,sep:"/"};function rTe(n,e){if(e!==void 0&&typeof e!="string")throw new TypeError('"ext" argument must be a string');H2(n);let t=0,r=-1,s=n.length,i;if(e===void 0||e.length===0||e.length>n.length){for(;s--;)if(n.codePointAt(s)===47){if(i){t=s+1;break}}else r<0&&(i=!0,r=s+1);return r<0?"":n.slice(t,r)}if(e===n)return"";let o=-1,a=e.length-1;for(;s--;)if(n.codePointAt(s)===47){if(i){t=s+1;break}}else o<0&&(i=!0,o=s+1),a>-1&&(n.codePointAt(s)===e.codePointAt(a--)?a<0&&(r=s):(a=-1,r=o));return t===r?r=o:r<0&&(r=n.length),n.slice(t,r)}function sTe(n){if(H2(n),n.length===0)return".";let e=-1,t=n.length,r;for(;--t;)if(n.codePointAt(t)===47){if(r){e=t;break}}else r||(r=!0);return e<0?n.codePointAt(0)===47?"/":".":e===1&&n.codePointAt(0)===47?"//":n.slice(0,e)}function iTe(n){H2(n);let e=n.length,t=-1,r=0,s=-1,i=0,o;for(;e--;){const a=n.codePointAt(e);if(a===47){if(o){r=e+1;break}continue}t<0&&(o=!0,t=e+1),a===46?s<0?s=e:i!==1&&(i=1):s>-1&&(i=-1)}return s<0||t<0||i===0||i===1&&s===t-1&&s===r+1?"":n.slice(s,t)}function oTe(...n){let e=-1,t;for(;++e<n.length;)H2(n[e]),n[e]&&(t=t===void 0?n[e]:t+"/"+n[e]);return t===void 0?".":aTe(t)}function aTe(n){H2(n);const e=n.codePointAt(0)===47;let t=lTe(n,!e);return t.length===0&&!e&&(t="."),t.length>0&&n.codePointAt(n.length-1)===47&&(t+="/"),e?"/"+t:t}function lTe(n,e){let t="",r=0,s=-1,i=0,o=-1,a,l;for(;++o<=n.length;){if(o<n.length)a=n.codePointAt(o);else{if(a===47)break;a=47}if(a===47){if(!(s===o-1||i===1))if(s!==o-1&&i===2){if(t.length<2||r!==2||t.codePointAt(t.length-1)!==46||t.codePointAt(t.length-2)!==46){if(t.length>2){if(l=t.lastIndexOf("/"),l!==t.length-1){l<0?(t="",r=0):(t=t.slice(0,l),r=t.length-1-t.lastIndexOf("/")),s=o,i=0;continue}}else if(t.length>0){t="",r=0,s=o,i=0;continue}}e&&(t=t.length>0?t+"/..":"..",r=2)}else t.length>0?t+="/"+n.slice(s+1,o):t=n.slice(s+1,o),r=o-s-1;s=o,i=0}else a===46&&i>-1?i++:i=-1}return t}function H2(n){if(typeof n!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(n))}const cTe={cwd:uTe};function uTe(){return"/"}function PA(n){return!!(n!==null&&typeof n=="object"&&"href"in n&&n.href&&"protocol"in n&&n.protocol&&n.auth===void 0)}function dTe(n){if(typeof n=="string")n=new URL(n);else if(!PA(n)){const e=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+n+"`");throw e.code="ERR_INVALID_ARG_TYPE",e}if(n.protocol!=="file:"){const e=new TypeError("The URL must be of scheme file");throw e.code="ERR_INVALID_URL_SCHEME",e}return hTe(n)}function hTe(n){if(n.hostname!==""){const r=new TypeError('File URL host must be "localhost" or empty on darwin');throw r.code="ERR_INVALID_FILE_URL_HOST",r}const e=n.pathname;let t=-1;for(;++t<e.length;)if(e.codePointAt(t)===37&&e.codePointAt(t+1)===50){const r=e.codePointAt(t+2);if(r===70||r===102){const s=new TypeError("File URL path must not include encoded / characters");throw s.code="ERR_INVALID_FILE_URL_PATH",s}}return decodeURIComponent(e)}const IA=["history","path","basename","stem","extname","dirname"];class fTe{constructor(e){let t;e?PA(e)?t={path:e}:typeof e=="string"||pTe(e)?t={value:e}:t=e:t={},this.cwd="cwd"in t?"":cTe.cwd(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let r=-1;for(;++r<IA.length;){const i=IA[r];i in t&&t[i]!==void 0&&t[i]!==null&&(this[i]=i==="history"?[...t[i]]:t[i])}let s;for(s in t)IA.includes(s)||(this[s]=t[s])}get basename(){return typeof this.path=="string"?dc.basename(this.path):void 0}set basename(e){RA(e,"basename"),DA(e,"basename"),this.path=dc.join(this.dirname||"",e)}get dirname(){return typeof this.path=="string"?dc.dirname(this.path):void 0}set dirname(e){aX(this.basename,"dirname"),this.path=dc.join(e||"",this.basename)}get extname(){return typeof this.path=="string"?dc.extname(this.path):void 0}set extname(e){if(DA(e,"extname"),aX(this.dirname,"extname"),e){if(e.codePointAt(0)!==46)throw new Error("`extname` must start with `.`");if(e.includes(".",1))throw new Error("`extname` cannot contain multiple dots")}this.path=dc.join(this.dirname,this.stem+(e||""))}get path(){return this.history[this.history.length-1]}set path(e){PA(e)&&(e=dTe(e)),RA(e,"path"),this.path!==e&&this.history.push(e)}get stem(){return typeof this.path=="string"?dc.basename(this.path,this.extname):void 0}set stem(e){RA(e,"stem"),DA(e,"stem"),this.path=dc.join(this.dirname||"",e+(this.extname||""))}fail(e,t,r){const s=this.message(e,t,r);throw s.fatal=!0,s}info(e,t,r){const s=this.message(e,t,r);return s.fatal=void 0,s}message(e,t,r){const s=new io(e,t,r);return this.path&&(s.name=this.path+":"+s.name,s.file=this.path),s.fatal=!1,this.messages.push(s),s}toString(e){return this.value===void 0?"":typeof this.value=="string"?this.value:new TextDecoder(e||void 0).decode(this.value)}}function DA(n,e){if(n&&n.includes(dc.sep))throw new Error("`"+e+"` cannot be a path: did not expect `"+dc.sep+"`")}function RA(n,e){if(!n)throw new Error("`"+e+"` cannot be empty")}function aX(n,e){if(!n)throw new Error("Setting `"+e+"` requires `path` to be set too")}function pTe(n){return!!(n&&typeof n=="object"&&"byteLength"in n&&"byteOffset"in n)}const mTe=function(n){const r=this.constructor.prototype,s=r[n],i=function(){return s.apply(i,arguments)};return Object.setPrototypeOf(i,r),i},gTe={}.hasOwnProperty;class $A extends mTe{constructor(){super("copy"),this.Compiler=void 0,this.Parser=void 0,this.attachers=[],this.compiler=void 0,this.freezeIndex=-1,this.frozen=void 0,this.namespace={},this.parser=void 0,this.transformers=tTe()}copy(){const e=new $A;let t=-1;for(;++t<this.attachers.length;){const r=this.attachers[t];e.use(...r)}return e.data(MA(!0,{},this.namespace)),e}data(e,t){return typeof e=="string"?arguments.length===2?(BA("data",this.frozen),this.namespace[e]=t,this):gTe.call(this.namespace,e)&&this.namespace[e]||void 0:e?(BA("data",this.frozen),this.namespace=e,this):this.namespace}freeze(){if(this.frozen)return this;const e=this;for(;++this.freezeIndex<this.attachers.length;){const[t,...r]=this.attachers[this.freezeIndex];if(r[0]===!1)continue;r[0]===!0&&(r[0]=void 0);const s=t.call(e,...r);typeof s=="function"&&this.transformers.use(s)}return this.frozen=!0,this.freezeIndex=Number.POSITIVE_INFINITY,this}parse(e){this.freeze();const t=I7(e),r=this.parser||this.Parser;return FA("parse",r),r(String(t),t)}process(e,t){const r=this;return this.freeze(),FA("process",this.parser||this.Parser),jA("process",this.compiler||this.Compiler),t?s(void 0,t):new Promise(s);function s(i,o){const a=I7(e),l=r.parse(a);r.run(l,a,function(u,d,f){if(u||!d||!f)return c(u);const p=d,m=r.stringify(p,f);vTe(m)?f.value=m:f.result=m,c(u,f)});function c(u,d){u||!d?o(u):i?i(d):t(void 0,d)}}}processSync(e){let t=!1,r;return this.freeze(),FA("processSync",this.parser||this.Parser),jA("processSync",this.compiler||this.Compiler),this.process(e,s),cX("processSync","process",t),r;function s(i,o){t=!0,QZ(i),r=o}}run(e,t,r){lX(e),this.freeze();const s=this.transformers;return!r&&typeof t=="function"&&(r=t,t=void 0),r?i(void 0,r):new Promise(i);function i(o,a){const l=I7(t);s.run(e,l,c);function c(u,d,f){const p=d||e;u?a(u):o?o(p):r(void 0,p,f)}}}runSync(e,t){let r=!1,s;return this.run(e,t,i),cX("runSync","run",r),s;function i(o,a){QZ(o),s=a,r=!0}}stringify(e,t){this.freeze();const r=I7(t),s=this.compiler||this.Compiler;return jA("stringify",s),lX(e),s(e,r)}use(e,...t){const r=this.attachers,s=this.namespace;if(BA("use",this.frozen),e!=null)if(typeof e=="function")l(e,t);else if(typeof e=="object")Array.isArray(e)?a(e):o(e);else throw new TypeError("Expected usable value, not `"+e+"`");return this;function i(c){if(typeof c=="function")l(c,[]);else if(typeof c=="object")if(Array.isArray(c)){const[u,...d]=c;l(u,d)}else o(c);else throw new TypeError("Expected usable value, not `"+c+"`")}function o(c){if(!("plugins"in c)&&!("settings"in c))throw new Error("Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither");a(c.plugins),c.settings&&(s.settings=MA(!0,s.settings,c.settings))}function a(c){let u=-1;if(c!=null)if(Array.isArray(c))for(;++u<c.length;){const d=c[u];i(d)}else throw new TypeError("Expected a list of plugins, not `"+c+"`")}function l(c,u){let d=-1,f=-1;for(;++d<r.length;)if(r[d][0]===c){f=d;break}if(f===-1)r.push([c,...u]);else if(u.length>0){let[p,...m]=u;const y=r[f][1];OA(y)&&OA(p)&&(p=MA(!0,y,p)),r[f]=[c,p,...m]}}}}const LA=new $A().freeze();function FA(n,e){if(typeof e!="function")throw new TypeError("Cannot `"+n+"` without `parser`")}function jA(n,e){if(typeof e!="function")throw new TypeError("Cannot `"+n+"` without `compiler`")}function BA(n,e){if(e)throw new Error("Cannot call `"+n+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function lX(n){if(!OA(n)||typeof n.type!="string")throw new TypeError("Expected node, got `"+n+"`")}function cX(n,e,t){if(!t)throw new Error("`"+n+"` finished async. Use `"+e+"` instead")}function I7(n){return yTe(n)?n:new fTe(n)}function yTe(n){return!!(n&&typeof n=="object"&&"message"in n&&"messages"in n)}function vTe(n){return typeof n=="string"||bTe(n)}function bTe(n){return!!(n&&typeof n=="object"&&"byteLength"in n&&"byteOffset"in n)}var uX=n=>{throw TypeError(n)},dX=(n,e,t)=>e.has(n)||uX("Cannot "+t),Cn=(n,e,t)=>(dX(n,e,"read from private field"),t?t.call(n):e.get(n)),ws=(n,e,t)=>e.has(n)?uX("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,t),Or=(n,e,t,r)=>(dX(n,e,"write to private field"),e.set(n,t),t),hc,q2,D7,R7,$7,U2,W2,Mu,G2,L7,F7,K2,j7,Y2,B7,V7,a1,s0,z7,Z2;class hX{}class fX{constructor(){this.elements=[],this.size=()=>this.elements.length,this.top=()=>this.elements.at(-1),this.push=e=>{var t;(t=this.top())==null||t.push(e)},this.open=e=>{this.elements.push(e)},this.close=()=>{const e=this.elements.pop();if(!e)throw OY();return e}}}class VA extends hX{constructor(e,t,r){super(),this.type=e,this.content=t,this.attrs=r}push(e,...t){this.content.push(e,...t)}pop(){return this.content.pop()}static create(e,t,r){return new VA(e,t,r)}}const zA=class extends fX{constructor(e){super(),ws(this,hc),ws(this,q2),ws(this,D7),ws(this,R7),ws(this,$7),ws(this,U2),ws(this,W2),Or(this,hc,Ln.none),Or(this,q2,t=>t.isText),Or(this,D7,(t,r)=>{if(Cn(this,q2).call(this,t)&&Cn(this,q2).call(this,r)&&Ln.sameSet(t.marks,r.marks))return this.schema.text(t.text+r.text,t.marks)}),Or(this,R7,t=>{const r=Object.values({...this.schema.nodes,...this.schema.marks}).find(s=>s.spec.parseMarkdown.match(t));if(!r)throw kCe(t);return r}),Or(this,$7,t=>{const r=Cn(this,R7).call(this,t);r.spec.parseMarkdown.runner(this,t,r)}),this.injectRoot=(t,r,s)=>(this.openNode(r,s),this.next(t.children),this),this.openNode=(t,r)=>(this.open(VA.create(t,[],r)),this),Or(this,U2,()=>{Or(this,hc,Ln.none);const t=this.close();return Cn(this,W2).call(this,t.type,t.attrs,t.content)}),this.closeNode=()=>{try{Cn(this,U2).call(this)}catch(t){console.error(t)}return this},Or(this,W2,(t,r,s)=>{const i=t.createAndFill(r,s,Cn(this,hc));if(!i)throw xCe(t,r,s);return this.push(i),i}),this.addNode=(t,r,s)=>{try{Cn(this,W2).call(this,t,r,s)}catch(i){console.error(i)}return this},this.openMark=(t,r)=>{const s=t.create(r);return Or(this,hc,s.addToSet(Cn(this,hc))),this},this.closeMark=t=>(Or(this,hc,t.removeFromSet(Cn(this,hc))),this),this.addText=t=>{try{const r=this.top();if(!r)throw OY();const s=r.pop(),i=this.schema.text(t,Cn(this,hc));if(!s)return r.push(i),this;const o=Cn(this,D7).call(this,s,i);return o?(r.push(o),this):(r.push(s,i),this)}catch(r){return console.error(r),this}},this.build=()=>{let t;do t=Cn(this,U2).call(this);while(this.size());return t},this.next=(t=[])=>([t].flat().forEach(r=>Cn(this,$7).call(this,r)),this),this.toDoc=()=>this.build(),this.run=(t,r)=>{const s=t.runSync(t.parse(r),r);return this.next(s),this},this.schema=e}};hc=new WeakMap,q2=new WeakMap,D7=new WeakMap,R7=new WeakMap,$7=new WeakMap,U2=new WeakMap,W2=new WeakMap,zA.create=(n,e)=>{const t=new zA(n);return r=>(t.run(e,r),t.toDoc())};let wTe=zA;const HA=class extends hX{constructor(e,t,r,s={}){super(),this.type=e,this.children=t,this.value=r,this.props=s,this.push=(i,...o)=>{this.children||(this.children=[]),this.children.push(i,...o)},this.pop=()=>{var i;return(i=this.children)==null?void 0:i.pop()}}};HA.create=(n,e,t,r={})=>new HA(n,e,t,r);let pX=HA;const xTe=n=>Object.prototype.hasOwnProperty.call(n,"size"),qA=class extends fX{constructor(e){super(),ws(this,Mu),ws(this,G2),ws(this,L7),ws(this,F7),ws(this,K2),ws(this,j7),ws(this,Y2),ws(this,B7),ws(this,V7),ws(this,a1),ws(this,s0),ws(this,z7),ws(this,Z2),Or(this,Mu,Ln.none),Or(this,G2,t=>{const r=Object.values({...this.schema.nodes,...this.schema.marks}).find(s=>s.spec.toMarkdown.match(t));if(!r)throw CCe(t.type);return r}),Or(this,L7,t=>Cn(this,G2).call(this,t).spec.toMarkdown.runner(this,t)),Or(this,F7,(t,r)=>Cn(this,G2).call(this,t).spec.toMarkdown.runner(this,t,r)),Or(this,K2,t=>{const{marks:r}=t,s=a=>a.type.spec.priority??50;[...r].sort((a,l)=>s(a)-s(l)).every(a=>!Cn(this,F7).call(this,a,t))&&Cn(this,L7).call(this,t),r.forEach(a=>Cn(this,Z2).call(this,a))}),Or(this,j7,(t,r)=>{var l;if(t.type===r||((l=t.children)==null?void 0:l.length)!==1)return t;const s=c=>{var d;if(c.type===r)return c;if(((d=c.children)==null?void 0:d.length)!==1)return null;const[u]=c.children;return u?s(u):null},i=s(t);if(!i)return t;const o=i.children?[...i.children]:void 0,a={...t,children:o};return a.children=o,i.children=[a],i}),Or(this,Y2,t=>{const{children:r}=t;return r&&(t.children=r.reduce((s,i,o)=>{if(o===0)return[i];const a=s.at(-1);if(a&&a.isMark&&i.isMark){i=Cn(this,j7).call(this,i,a.type);const{children:l,...c}=i,{children:u,...d}=a;if(i.type===a.type&&l&&u&&JSON.stringify(c)===JSON.stringify(d)){const f={...d,children:[...u,...l]};return s.slice(0,-1).concat(Cn(this,Y2).call(this,f))}}return s.concat(i)},[])),t}),Or(this,B7,t=>{const r={...t.props,type:t.type};return t.children&&(r.children=t.children),t.value&&(r.value=t.value),r}),this.openNode=(t,r,s)=>(this.open(pX.create(t,void 0,r,s)),this),Or(this,V7,(t,r)=>{let s="",i="";const o=t.children;let a=-1,l=-1;const c=d=>{d&&d.forEach((f,p)=>{f.type==="text"&&f.value&&(a<0&&(a=p),l=p)})};if(o){c(o);const d=o==null?void 0:o[l],f=o==null?void 0:o[a];if(d&&d.value.endsWith(" ")){const p=d.value,m=p.trimEnd();i=p.slice(m.length),d.value=m}if(f&&f.value.startsWith(" ")){const p=f.value,m=p.trimStart();s=p.slice(0,p.length-m.length),f.value=m}}s.length&&Cn(this,s0).call(this,"text",void 0,s);const u=r();return i.length&&Cn(this,s0).call(this,"text",void 0,i),u}),Or(this,a1,(t=!1)=>{const r=this.close(),s=()=>Cn(this,s0).call(this,r.type,r.children,r.value,r.props);return t?Cn(this,V7).call(this,r,s):s()}),this.closeNode=()=>(Cn(this,a1).call(this),this),Or(this,s0,(t,r,s,i)=>{const o=pX.create(t,r,s,i),a=Cn(this,Y2).call(this,Cn(this,B7).call(this,o));return this.push(a),a}),this.addNode=(t,r,s,i)=>(Cn(this,s0).call(this,t,r,s,i),this),Or(this,z7,(t,r,s,i)=>t.isInSet(Cn(this,Mu))?this:(Or(this,Mu,t.addToSet(Cn(this,Mu))),this.openNode(r,s,{...i,isMark:!0}))),Or(this,Z2,t=>{t.isInSet(Cn(this,Mu))&&(Or(this,Mu,t.type.removeFromSet(Cn(this,Mu))),Cn(this,a1).call(this,!0))}),this.withMark=(t,r,s,i)=>(Cn(this,z7).call(this,t,r,s,i),this),this.closeMark=t=>(Cn(this,Z2).call(this,t),this),this.build=()=>{let t=null;do t=Cn(this,a1).call(this);while(this.size());return t},this.next=t=>xTe(t)?(t.forEach(r=>{Cn(this,K2).call(this,r)}),this):(Cn(this,K2).call(this,t),this),this.toString=t=>t.stringify(this.build()),this.run=t=>(this.next(t),this),this.schema=e}};Mu=new WeakMap,G2=new WeakMap,L7=new WeakMap,F7=new WeakMap,K2=new WeakMap,j7=new WeakMap,Y2=new WeakMap,B7=new WeakMap,V7=new WeakMap,a1=new WeakMap,s0=new WeakMap,z7=new WeakMap,Z2=new WeakMap,qA.create=(n,e)=>{const t=new qA(n);return r=>(t.run(r),t.toString(e))};let kTe=qA;const mX=65535,gX=Math.pow(2,16);function CTe(n,e){return n+e*gX}function yX(n){return n&mX}function STe(n){return(n-(n&mX))/gX}const vX=1,bX=2,H7=4,wX=8;class UA{constructor(e,t,r){this.pos=e,this.delInfo=t,this.recover=r}get deleted(){return(this.delInfo&wX)>0}get deletedBefore(){return(this.delInfo&(vX|H7))>0}get deletedAfter(){return(this.delInfo&(bX|H7))>0}get deletedAcross(){return(this.delInfo&H7)>0}}class Ho{constructor(e,t=!1){if(this.ranges=e,this.inverted=t,!e.length&&Ho.empty)return Ho.empty}recover(e){let t=0,r=yX(e);if(!this.inverted)for(let s=0;s<r;s++)t+=this.ranges[s*3+2]-this.ranges[s*3+1];return this.ranges[r*3]+t+STe(e)}mapResult(e,t=1){return this._map(e,t,!1)}map(e,t=1){return this._map(e,t,!0)}_map(e,t,r){let s=0,i=this.inverted?2:1,o=this.inverted?1:2;for(let a=0;a<this.ranges.length;a+=3){let l=this.ranges[a]-(this.inverted?s:0);if(l>e)break;let c=this.ranges[a+i],u=this.ranges[a+o],d=l+c;if(e<=d){let f=c?e==l?-1:e==d?1:t:t,p=l+s+(f<0?0:u);if(r)return p;let m=e==(t<0?l:d)?null:CTe(a/3,e-l),y=e==l?bX:e==d?vX:H7;return(t<0?e!=l:e!=d)&&(y|=wX),new UA(p,y,m)}s+=u-c}return r?e+s:new UA(e+s,0,null)}touches(e,t){let r=0,s=yX(t),i=this.inverted?2:1,o=this.inverted?1:2;for(let a=0;a<this.ranges.length;a+=3){let l=this.ranges[a]-(this.inverted?r:0);if(l>e)break;let c=this.ranges[a+i],u=l+c;if(e<=u&&a==s*3)return!0;r+=this.ranges[a+o]-c}return!1}forEach(e){let t=this.inverted?2:1,r=this.inverted?1:2;for(let s=0,i=0;s<this.ranges.length;s+=3){let o=this.ranges[s],a=o-(this.inverted?i:0),l=o+(this.inverted?0:i),c=this.ranges[s+t],u=this.ranges[s+r];e(a,a+c,l,l+u),i+=u-c}}invert(){return new Ho(this.ranges,!this.inverted)}toString(){return(this.inverted?"-":"")+JSON.stringify(this.ranges)}static offset(e){return e==0?Ho.empty:new Ho(e<0?[0,-e,0]:[0,0,e])}}Ho.empty=new Ho([]);class X2{constructor(e,t,r=0,s=e?e.length:0){this.mirror=t,this.from=r,this.to=s,this._maps=e||[],this.ownData=!(e||t)}get maps(){return this._maps}slice(e=0,t=this.maps.length){return new X2(this._maps,this.mirror,e,t)}appendMap(e,t){this.ownData||(this._maps=this._maps.slice(),this.mirror=this.mirror&&this.mirror.slice(),this.ownData=!0),this.to=this._maps.push(e),t!=null&&this.setMirror(this._maps.length-1,t)}appendMapping(e){for(let t=0,r=this._maps.length;t<e._maps.length;t++){let s=e.getMirror(t);this.appendMap(e._maps[t],s!=null&&s<t?r+s: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=[]),this.mirror.push(e,t)}appendMappingInverted(e){for(let t=e.maps.length-1,r=this._maps.length+e._maps.length;t>=0;t--){let s=e.getMirror(t);this.appendMap(e._maps[t].invert(),s!=null&&s>t?r-s-1:void 0)}}invert(){let e=new X2;return e.appendMappingInverted(this),e}map(e,t=1){if(this.mirror)return this._map(e,t,!0);for(let r=this.from;r<this.to;r++)e=this._maps[r].map(e,t);return e}mapResult(e,t=1){return this._map(e,t,!1)}_map(e,t,r){let s=0;for(let i=this.from;i<this.to;i++){let o=this._maps[i],a=o.mapResult(e,t);if(a.recover!=null){let l=this.getMirror(i);if(l!=null&&l>i&&l<this.to){i=l,e=this._maps[l].recover(a.recover);continue}}s|=a.delInfo,e=a.pos}return r?e:new UA(e,s,null)}}const WA=Object.create(null);class yi{getMap(){return Ho.empty}merge(e){return null}static fromJSON(e,t){if(!t||!t.stepType)throw new RangeError("Invalid input for Step.fromJSON");let r=WA[t.stepType];if(!r)throw new RangeError(`No step type ${t.stepType} defined`);return r.fromJSON(e,t)}static jsonID(e,t){if(e in WA)throw new RangeError("Duplicate use of step JSON ID "+e);return WA[e]=t,t.prototype.jsonID=e,t}}class xs{constructor(e,t){this.doc=e,this.failed=t}static ok(e){return new xs(e,null)}static fail(e){return new xs(null,e)}static fromReplace(e,t,r,s){try{return xs.ok(e.replace(t,r,s))}catch(i){if(i instanceof b7)return xs.fail(i.message);throw i}}}function GA(n,e,t){let r=[];for(let s=0;s<n.childCount;s++){let i=n.child(s);i.content.size&&(i=i.copy(GA(i.content,e,i))),i.isInline&&(i=e(i,t,s)),r.push(i)}return $e.fromArray(r)}class Ou extends yi{constructor(e,t,r){super(),this.from=e,this.to=t,this.mark=r}apply(e){let t=e.slice(this.from,this.to),r=e.resolve(this.from),s=r.node(r.sharedDepth(this.to)),i=new He(GA(t.content,(o,a)=>!o.isAtom||!a.type.allowsMarkType(this.mark.type)?o:o.mark(this.mark.addToSet(o.marks)),s),t.openStart,t.openEnd);return xs.fromReplace(e,this.from,this.to,i)}invert(){return new fc(this.from,this.to,this.mark)}map(e){let t=e.mapResult(this.from,1),r=e.mapResult(this.to,-1);return t.deleted&&r.deleted||t.pos>=r.pos?null:new Ou(t.pos,r.pos,this.mark)}merge(e){return e instanceof Ou&&e.mark.eq(this.mark)&&this.from<=e.to&&this.to>=e.from?new Ou(Math.min(this.from,e.from),Math.max(this.to,e.to),this.mark):null}toJSON(){return{stepType:"addMark",mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(e,t){if(typeof t.from!="number"||typeof t.to!="number")throw new RangeError("Invalid input for AddMarkStep.fromJSON");return new Ou(t.from,t.to,e.markFromJSON(t.mark))}}yi.jsonID("addMark",Ou);class fc extends yi{constructor(e,t,r){super(),this.from=e,this.to=t,this.mark=r}apply(e){let t=e.slice(this.from,this.to),r=new He(GA(t.content,s=>s.mark(this.mark.removeFromSet(s.marks)),e),t.openStart,t.openEnd);return xs.fromReplace(e,this.from,this.to,r)}invert(){return new Ou(this.from,this.to,this.mark)}map(e){let t=e.mapResult(this.from,1),r=e.mapResult(this.to,-1);return t.deleted&&r.deleted||t.pos>=r.pos?null:new fc(t.pos,r.pos,this.mark)}merge(e){return e instanceof fc&&e.mark.eq(this.mark)&&this.from<=e.to&&this.to>=e.from?new fc(Math.min(this.from,e.from),Math.max(this.to,e.to),this.mark):null}toJSON(){return{stepType:"removeMark",mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(e,t){if(typeof t.from!="number"||typeof t.to!="number")throw new RangeError("Invalid input for RemoveMarkStep.fromJSON");return new fc(t.from,t.to,e.markFromJSON(t.mark))}}yi.jsonID("removeMark",fc);class xh extends yi{constructor(e,t){super(),this.pos=e,this.mark=t}apply(e){let t=e.nodeAt(this.pos);if(!t)return xs.fail("No node at mark step's position");let r=t.type.create(t.attrs,null,this.mark.addToSet(t.marks));return xs.fromReplace(e,this.pos,this.pos+1,new He($e.from(r),0,t.isLeaf?0:1))}invert(e){let t=e.nodeAt(this.pos);if(t){let r=this.mark.addToSet(t.marks);if(r.length==t.marks.length){for(let s=0;s<t.marks.length;s++)if(!t.marks[s].isInSet(r))return new xh(this.pos,t.marks[s]);return new xh(this.pos,this.mark)}}return new i0(this.pos,this.mark)}map(e){let t=e.mapResult(this.pos,1);return t.deletedAfter?null:new xh(t.pos,this.mark)}toJSON(){return{stepType:"addNodeMark",pos:this.pos,mark:this.mark.toJSON()}}static fromJSON(e,t){if(typeof t.pos!="number")throw new RangeError("Invalid input for AddNodeMarkStep.fromJSON");return new xh(t.pos,e.markFromJSON(t.mark))}}yi.jsonID("addNodeMark",xh);class i0 extends yi{constructor(e,t){super(),this.pos=e,this.mark=t}apply(e){let t=e.nodeAt(this.pos);if(!t)return xs.fail("No node at mark step's position");let r=t.type.create(t.attrs,null,this.mark.removeFromSet(t.marks));return xs.fromReplace(e,this.pos,this.pos+1,new He($e.from(r),0,t.isLeaf?0:1))}invert(e){let t=e.nodeAt(this.pos);return!t||!this.mark.isInSet(t.marks)?this:new xh(this.pos,this.mark)}map(e){let t=e.mapResult(this.pos,1);return t.deletedAfter?null:new i0(t.pos,this.mark)}toJSON(){return{stepType:"removeNodeMark",pos:this.pos,mark:this.mark.toJSON()}}static fromJSON(e,t){if(typeof t.pos!="number")throw new RangeError("Invalid input for RemoveNodeMarkStep.fromJSON");return new i0(t.pos,e.markFromJSON(t.mark))}}yi.jsonID("removeNodeMark",i0);class qs extends yi{constructor(e,t,r,s=!1){super(),this.from=e,this.to=t,this.slice=r,this.structure=s}apply(e){return this.structure&&KA(e,this.from,this.to)?xs.fail("Structure replace would overwrite content"):xs.fromReplace(e,this.from,this.to,this.slice)}getMap(){return new Ho([this.from,this.to-this.from,this.slice.size])}invert(e){return new qs(this.from,this.from+this.slice.size,e.slice(this.from,this.to))}map(e){let t=e.mapResult(this.from,1),r=e.mapResult(this.to,-1);return t.deletedAcross&&r.deletedAcross?null:new qs(t.pos,Math.max(t.pos,r.pos),this.slice,this.structure)}merge(e){if(!(e instanceof qs)||e.structure||this.structure)return null;if(this.from+this.slice.size==e.from&&!this.slice.openEnd&&!e.slice.openStart){let t=this.slice.size+e.slice.size==0?He.empty:new He(this.slice.content.append(e.slice.content),this.slice.openStart,e.slice.openEnd);return new qs(this.from,this.to+(e.to-e.from),t,this.structure)}else if(e.to==this.from&&!this.slice.openStart&&!e.slice.openEnd){let t=this.slice.size+e.slice.size==0?He.empty:new He(e.slice.content.append(this.slice.content),e.slice.openStart,this.slice.openEnd);return new qs(e.from,this.to,t,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(e,t){if(typeof t.from!="number"||typeof t.to!="number")throw new RangeError("Invalid input for ReplaceStep.fromJSON");return new qs(t.from,t.to,He.fromJSON(e,t.slice),!!t.structure)}}yi.jsonID("replace",qs);class vi extends yi{constructor(e,t,r,s,i,o,a=!1){super(),this.from=e,this.to=t,this.gapFrom=r,this.gapTo=s,this.slice=i,this.insert=o,this.structure=a}apply(e){if(this.structure&&(KA(e,this.from,this.gapFrom)||KA(e,this.gapTo,this.to)))return xs.fail("Structure gap-replace would overwrite content");let t=e.slice(this.gapFrom,this.gapTo);if(t.openStart||t.openEnd)return xs.fail("Gap is not a flat range");let r=this.slice.insertAt(this.insert,t.content);return r?xs.fromReplace(e,this.from,this.to,r):xs.fail("Content does not fit in gap")}getMap(){return new Ho([this.from,this.gapFrom-this.from,this.insert,this.gapTo,this.to-this.gapTo,this.slice.size-this.insert])}invert(e){let t=this.gapTo-this.gapFrom;return new vi(this.from,this.from+this.slice.size+t,this.from+this.insert,this.from+this.insert+t,e.slice(this.from,this.to).removeBetween(this.gapFrom-this.from,this.gapTo-this.from),this.gapFrom-this.from,this.structure)}map(e){let t=e.mapResult(this.from,1),r=e.mapResult(this.to,-1),s=this.from==this.gapFrom?t.pos:e.map(this.gapFrom,-1),i=this.to==this.gapTo?r.pos:e.map(this.gapTo,1);return t.deletedAcross&&r.deletedAcross||s<t.pos||i>r.pos?null:new vi(t.pos,r.pos,s,i,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(e,t){if(typeof t.from!="number"||typeof t.to!="number"||typeof t.gapFrom!="number"||typeof t.gapTo!="number"||typeof t.insert!="number")throw new RangeError("Invalid input for ReplaceAroundStep.fromJSON");return new vi(t.from,t.to,t.gapFrom,t.gapTo,He.fromJSON(e,t.slice),t.insert,!!t.structure)}}yi.jsonID("replaceAround",vi);function KA(n,e,t){let r=n.resolve(e),s=t-e,i=r.depth;for(;s>0&&i>0&&r.indexAfter(i)==r.node(i).childCount;)i--,s--;if(s>0){let o=r.node(i).maybeChild(r.indexAfter(i));for(;s>0;){if(!o||o.isLeaf)return!0;o=o.firstChild,s--}}return!1}function ETe(n,e,t,r){let s=[],i=[],o,a;n.doc.nodesBetween(e,t,(l,c,u)=>{if(!l.isInline)return;let d=l.marks;if(!r.isInSet(d)&&u.type.allowsMarkType(r.type)){let f=Math.max(c,e),p=Math.min(c+l.nodeSize,t),m=r.addToSet(d);for(let y=0;y<d.length;y++)d[y].isInSet(m)||(o&&o.to==f&&o.mark.eq(d[y])?o.to=p:s.push(o=new fc(f,p,d[y])));a&&a.to==f?a.to=p:i.push(a=new Ou(f,p,r))}}),s.forEach(l=>n.step(l)),i.forEach(l=>n.step(l))}function _Te(n,e,t,r){let s=[],i=0;n.doc.nodesBetween(e,t,(o,a)=>{if(!o.isInline)return;i++;let l=null;if(r instanceof k7){let c=o.marks,u;for(;u=r.isInSet(c);)(l||(l=[])).push(u),c=u.removeFromSet(c)}else r?r.isInSet(o.marks)&&(l=[r]):l=o.marks;if(l&&l.length){let c=Math.min(a+o.nodeSize,t);for(let u=0;u<l.length;u++){let d=l[u],f;for(let p=0;p<s.length;p++){let m=s[p];m.step==i-1&&d.eq(s[p].style)&&(f=m)}f?(f.to=c,f.step=i):s.push({style:d,from:Math.max(a,e),to:c,step:i})}}}),s.forEach(o=>n.step(new fc(o.from,o.to,o.style)))}function YA(n,e,t,r=t.contentMatch,s=!0){let i=n.doc.nodeAt(e),o=[],a=e+1;for(let l=0;l<i.childCount;l++){let c=i.child(l),u=a+c.nodeSize,d=r.matchType(c.type);if(!d)o.push(new qs(a,u,He.empty));else{r=d;for(let f=0;f<c.marks.length;f++)t.allowsMarkType(c.marks[f].type)||n.step(new fc(a,u,c.marks[f]));if(s&&c.isText&&t.whitespace!="pre"){let f,p=/\r?\n|\r/g,m;for(;f=p.exec(c.text);)m||(m=new He($e.from(t.schema.text(" ",t.allowedMarks(c.marks))),0,0)),o.push(new qs(a+f.index,a+f.index+f[0].length,m))}}a=u}if(!r.validEnd){let l=r.fillBefore($e.empty,!0);n.replace(a,a,new He(l,0,0))}for(let l=o.length-1;l>=0;l--)n.step(o[l])}function TTe(n,e,t){return(e==0||n.canReplace(e,n.childCount))&&(t==n.childCount||n.canReplace(0,t))}function q7(n){let t=n.parent.content.cutByIndex(n.startIndex,n.endIndex);for(let r=n.depth,s=0,i=0;;--r){let o=n.$from.node(r),a=n.$from.index(r)+s,l=n.$to.indexAfter(r)-i;if(r<n.depth&&o.canReplace(a,l,t))return r;if(r==0||o.type.spec.isolating||!TTe(o,a,l))break;a&&(s=1),l<o.childCount&&(i=1)}return null}function ATe(n,e,t){let{$from:r,$to:s,depth:i}=e,o=r.before(i+1),a=s.after(i+1),l=o,c=a,u=$e.empty,d=0;for(let m=i,y=!1;m>t;m--)y||r.index(m)>0?(y=!0,u=$e.from(r.node(m).copy(u)),d++):l--;let f=$e.empty,p=0;for(let m=i,y=!1;m>t;m--)y||s.after(m+1)<s.end(m)?(y=!0,f=$e.from(s.node(m).copy(f)),p++):c++;n.step(new vi(l,c,o,a,new He(u.append(f),d,p),u.size-d,!0))}function ZA(n,e,t=null,r=n){let s=NTe(n,e),i=s&&MTe(r,e);return i?s.map(xX).concat({type:e,attrs:t}).concat(i.map(xX)):null}function xX(n){return{type:n,attrs:null}}function NTe(n,e){let{parent:t,startIndex:r,endIndex:s}=n,i=t.contentMatchAt(r).findWrapping(e);if(!i)return null;let o=i.length?i[0]:e;return t.canReplaceWith(r,s,o)?i:null}function MTe(n,e){let{parent:t,startIndex:r,endIndex:s}=n,i=t.child(r),o=e.contentMatch.findWrapping(i.type);if(!o)return null;let l=(o.length?o[o.length-1]:e).contentMatch;for(let c=r;l&&c<s;c++)l=l.matchType(t.child(c).type);return!l||!l.validEnd?null:o}function OTe(n,e,t){let r=$e.empty;for(let o=t.length-1;o>=0;o--){if(r.size){let a=t[o].type.contentMatch.matchFragment(r);if(!a||!a.validEnd)throw new RangeError("Wrapper type given to Transform.wrap does not form valid content of its parent wrapper")}r=$e.from(t[o].type.create(t[o].attrs,r))}let s=e.start,i=e.end;n.step(new vi(s,i,s,i,new He(r,0,0),t.length,!0))}function PTe(n,e,t,r,s){if(!r.isTextblock)throw new RangeError("Type given to setBlockType should be a textblock");let i=n.steps.length;n.doc.nodesBetween(e,t,(o,a)=>{let l=typeof s=="function"?s(o):s;if(o.isTextblock&&!o.hasMarkup(r,l)&&ITe(n.doc,n.mapping.slice(i).map(a),r)){let c=null;if(r.schema.linebreakReplacement){let p=r.whitespace=="pre",m=!!r.contentMatch.matchType(r.schema.linebreakReplacement);p&&!m?c=!1:!p&&m&&(c=!0)}c===!1&&CX(n,o,a,i),YA(n,n.mapping.slice(i).map(a,1),r,void 0,c===null);let u=n.mapping.slice(i),d=u.map(a,1),f=u.map(a+o.nodeSize,1);return n.step(new vi(d,f,d+1,f-1,new He($e.from(r.create(l,null,o.marks)),0,0),1,!0)),c===!0&&kX(n,o,a,i),!1}})}function kX(n,e,t,r){e.forEach((s,i)=>{if(s.isText){let o,a=/\r?\n|\r/g;for(;o=a.exec(s.text);){let l=n.mapping.slice(r).map(t+1+i+o.index);n.replaceWith(l,l+1,e.type.schema.linebreakReplacement.create())}}})}function CX(n,e,t,r){e.forEach((s,i)=>{if(s.type==s.type.schema.linebreakReplacement){let o=n.mapping.slice(r).map(t+1+i);n.replaceWith(o,o+1,e.type.schema.text(` +`))}})}function ITe(n,e,t){let r=n.resolve(e),s=r.index();return r.parent.canReplaceWith(s,s+1,t)}function DTe(n,e,t,r,s){let i=n.doc.nodeAt(e);if(!i)throw new RangeError("No node at given position");t||(t=i.type);let o=t.create(r,null,s||i.marks);if(i.isLeaf)return n.replaceWith(e,e+i.nodeSize,o);if(!t.validContent(i.content))throw new RangeError("Invalid content for node type "+t.name);n.step(new vi(e,e+i.nodeSize,e+1,e+i.nodeSize-1,new He($e.from(o),0,0),1,!0))}function J2(n,e,t=1,r){let s=n.resolve(e),i=s.depth-t,o=r&&r[r.length-1]||s.parent;if(i<0||s.parent.type.spec.isolating||!s.parent.canReplace(s.index(),s.parent.childCount)||!o.type.validContent(s.parent.content.cutByIndex(s.index(),s.parent.childCount)))return!1;for(let c=s.depth-1,u=t-2;c>i;c--,u--){let d=s.node(c),f=s.index(c);if(d.type.spec.isolating)return!1;let p=d.content.cutByIndex(f,d.childCount),m=r&&r[u+1];m&&(p=p.replaceChild(0,m.type.create(m.attrs)));let y=r&&r[u]||d;if(!d.canReplace(f+1,d.childCount)||!y.type.validContent(p))return!1}let a=s.indexAfter(i),l=r&&r[0];return s.node(i).canReplaceWith(a,a,l?l.type:s.node(i+1).type)}function RTe(n,e,t=1,r){let s=n.doc.resolve(e),i=$e.empty,o=$e.empty;for(let a=s.depth,l=s.depth-t,c=t-1;a>l;a--,c--){i=$e.from(s.node(a).copy(i));let u=r&&r[c];o=$e.from(u?u.type.create(u.attrs,o):s.node(a).copy(o))}n.step(new qs(e,e,new He(i.append(o),t,t),!0))}function U7(n,e){let t=n.resolve(e),r=t.index();return LTe(t.nodeBefore,t.nodeAfter)&&t.parent.canReplace(r,r+1)}function $Te(n,e){e.content.size||n.type.compatibleContent(e.type);let t=n.contentMatchAt(n.childCount),{linebreakReplacement:r}=n.type.schema;for(let s=0;s<e.childCount;s++){let i=e.child(s),o=i.type==r?n.type.schema.nodes.text:i.type;if(t=t.matchType(o),!t||!n.type.allowsMarks(i.marks))return!1}return t.validEnd}function LTe(n,e){return!!(n&&e&&!n.isLeaf&&$Te(n,e))}function FTe(n,e,t){let r=null,{linebreakReplacement:s}=n.doc.type.schema,i=n.doc.resolve(e-t),o=i.node().type;if(s&&o.inlineContent){let u=o.whitespace=="pre",d=!!o.contentMatch.matchType(s);u&&!d?r=!1:!u&&d&&(r=!0)}let a=n.steps.length;if(r===!1){let u=n.doc.resolve(e+t);CX(n,u.node(),u.before(),a)}o.inlineContent&&YA(n,e+t-1,o,i.node().contentMatchAt(i.index()),r==null);let l=n.mapping.slice(a),c=l.map(e-t);if(n.step(new qs(c,l.map(e+t,-1),He.empty,!0)),r===!0){let u=n.doc.resolve(c);kX(n,u.node(),u.before(),n.steps.length)}return n}function jTe(n,e,t){let r=n.resolve(e);if(r.parent.canReplaceWith(r.index(),r.index(),t))return e;if(r.parentOffset==0)for(let s=r.depth-1;s>=0;s--){let i=r.index(s);if(r.node(s).canReplaceWith(i,i,t))return r.before(s+1);if(i>0)return null}if(r.parentOffset==r.parent.content.size)for(let s=r.depth-1;s>=0;s--){let i=r.indexAfter(s);if(r.node(s).canReplaceWith(i,i,t))return r.after(s+1);if(i<r.node(s).childCount)return null}return null}function BTe(n,e,t){let r=n.resolve(e);if(!t.content.size)return e;let s=t.content;for(let i=0;i<t.openStart;i++)s=s.firstChild.content;for(let i=1;i<=(t.openStart==0&&t.size?2:1);i++)for(let o=r.depth;o>=0;o--){let a=o==r.depth?0:r.pos<=(r.start(o+1)+r.end(o+1))/2?-1:1,l=r.index(o)+(a>0?1:0),c=r.node(o),u=!1;if(i==1)u=c.canReplace(l,l,s);else{let d=c.contentMatchAt(l).findWrapping(s.firstChild.type);u=d&&c.canReplaceWith(l,l,d[0])}if(u)return a==0?r.pos:a<0?r.before(o+1):r.after(o+1)}return null}function W7(n,e,t=e,r=He.empty){if(e==t&&!r.size)return null;let s=n.resolve(e),i=n.resolve(t);return SX(s,i,r)?new qs(e,t,r):new VTe(s,i,r).fit()}function SX(n,e,t){return!t.openStart&&!t.openEnd&&n.start()==e.start()&&n.parent.canReplace(n.index(),e.index(),t.content)}class VTe{constructor(e,t,r){this.$from=e,this.$to=t,this.unplaced=r,this.frontier=[],this.placed=$e.empty;for(let s=0;s<=e.depth;s++){let i=e.node(s);this.frontier.push({type:i.type,match:i.contentMatchAt(e.indexAfter(s))})}for(let s=e.depth;s>0;s--)this.placed=$e.from(e.node(s).copy(this.placed))}get depth(){return this.frontier.length-1}fit(){for(;this.unplaced.size;){let c=this.findFittable();c?this.placeNodes(c):this.openMore()||this.dropNode()}let e=this.mustMoveInline(),t=this.placed.size-this.depth-this.$from.depth,r=this.$from,s=this.close(e<0?this.$to:r.doc.resolve(e));if(!s)return null;let i=this.placed,o=r.depth,a=s.depth;for(;o&&a&&i.childCount==1;)i=i.firstChild.content,o--,a--;let l=new He(i,o,a);return e>-1?new vi(r.pos,e,this.$to.pos,this.$to.end(),l,t):l.size||r.pos!=this.$to.pos?new qs(r.pos,s.pos,l):null}findFittable(){let e=this.unplaced.openStart;for(let t=this.unplaced.content,r=0,s=this.unplaced.openEnd;r<e;r++){let i=t.firstChild;if(t.childCount>1&&(s=0),i.type.spec.isolating&&s<=r){e=r;break}t=i.content}for(let t=1;t<=2;t++)for(let r=t==1?e:this.unplaced.openStart;r>=0;r--){let s,i=null;r?(i=XA(this.unplaced.content,r-1).firstChild,s=i.content):s=this.unplaced.content;let o=s.firstChild;for(let a=this.depth;a>=0;a--){let{type:l,match:c}=this.frontier[a],u,d=null;if(t==1&&(o?c.matchType(o.type)||(d=c.fillBefore($e.from(o),!1)):i&&l.compatibleContent(i.type)))return{sliceDepth:r,frontierDepth:a,parent:i,inject:d};if(t==2&&o&&(u=c.findWrapping(o.type)))return{sliceDepth:r,frontierDepth:a,parent:i,wrap:u};if(i&&c.matchType(i.type))break}}}openMore(){let{content:e,openStart:t,openEnd:r}=this.unplaced,s=XA(e,t);return!s.childCount||s.firstChild.isLeaf?!1:(this.unplaced=new He(e,t+1,Math.max(r,s.size+t>=e.size-r?t+1:0)),!0)}dropNode(){let{content:e,openStart:t,openEnd:r}=this.unplaced,s=XA(e,t);if(s.childCount<=1&&t>0){let i=e.size-t<=t+s.size;this.unplaced=new He(Q2(e,t-1,1),t-1,i?t-1:r)}else this.unplaced=new He(Q2(e,t,1),t,r)}placeNodes({sliceDepth:e,frontierDepth:t,parent:r,inject:s,wrap:i}){for(;this.depth>t;)this.closeFrontierNode();if(i)for(let y=0;y<i.length;y++)this.openFrontierNode(i[y]);let o=this.unplaced,a=r?r.content:o.content,l=o.openStart-e,c=0,u=[],{match:d,type:f}=this.frontier[t];if(s){for(let y=0;y<s.childCount;y++)u.push(s.child(y));d=d.matchFragment(s)}let p=a.size+e-(o.content.size-o.openEnd);for(;c<a.childCount;){let y=a.child(c),w=d.matchType(y.type);if(!w)break;c++,(c>1||l==0||y.content.size)&&(d=w,u.push(EX(y.mark(f.allowedMarks(y.marks)),c==1?l:0,c==a.childCount?p:-1)))}let m=c==a.childCount;m||(p=-1),this.placed=e3(this.placed,t,$e.from(u)),this.frontier[t].match=d,m&&p<0&&r&&r.type==this.frontier[this.depth].type&&this.frontier.length>1&&this.closeFrontierNode();for(let y=0,w=a;y<p;y++){let k=w.lastChild;this.frontier.push({type:k.type,match:k.contentMatchAt(k.childCount)}),w=k.content}this.unplaced=m?e==0?He.empty:new He(Q2(o.content,e-1,1),e-1,p<0?o.openEnd:e-1):new He(Q2(o.content,e,c),o.openStart,o.openEnd)}mustMoveInline(){if(!this.$to.parent.isTextblock)return-1;let e=this.frontier[this.depth],t;if(!e.type.isTextblock||!JA(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:r}=this.$to,s=this.$to.after(r);for(;r>1&&s==this.$to.end(--r);)++s;return s}findCloseLevel(e){e:for(let t=Math.min(this.depth,e.depth);t>=0;t--){let{match:r,type:s}=this.frontier[t],i=t<e.depth&&e.end(t+1)==e.pos+(e.depth-(t+1)),o=JA(e,t,s,r,i);if(o){for(let a=t-1;a>=0;a--){let{match:l,type:c}=this.frontier[a],u=JA(e,a,c,l,!0);if(!u||u.childCount)continue e}return{depth:t,fit:o,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=e3(this.placed,t.depth,t.fit)),e=t.move;for(let r=t.depth+1;r<=e.depth;r++){let s=e.node(r),i=s.type.contentMatch.fillBefore(s.content,!0,e.index(r));this.openFrontierNode(s.type,s.attrs,i)}return e}openFrontierNode(e,t=null,r){let s=this.frontier[this.depth];s.match=s.match.matchType(e),this.placed=e3(this.placed,this.depth,$e.from(e.create(t,r))),this.frontier.push({type:e,match:e.contentMatch})}closeFrontierNode(){let t=this.frontier.pop().match.fillBefore($e.empty,!0);t.childCount&&(this.placed=e3(this.placed,this.frontier.length,t))}}function Q2(n,e,t){return e==0?n.cutByIndex(t,n.childCount):n.replaceChild(0,n.firstChild.copy(Q2(n.firstChild.content,e-1,t)))}function e3(n,e,t){return e==0?n.append(t):n.replaceChild(n.childCount-1,n.lastChild.copy(e3(n.lastChild.content,e-1,t)))}function XA(n,e){for(let t=0;t<e;t++)n=n.firstChild.content;return n}function EX(n,e,t){if(e<=0)return n;let r=n.content;return e>1&&(r=r.replaceChild(0,EX(r.firstChild,e-1,r.childCount==1?t-1:0))),e>0&&(r=n.type.contentMatch.fillBefore(r).append(r),t<=0&&(r=r.append(n.type.contentMatch.matchFragment(r).fillBefore($e.empty,!0)))),n.copy(r)}function JA(n,e,t,r,s){let i=n.node(e),o=s?n.indexAfter(e):n.index(e);if(o==i.childCount&&!t.compatibleContent(i.type))return null;let a=r.fillBefore(i.content,!0,o);return a&&!zTe(t,i.content,o)?a:null}function zTe(n,e,t){for(let r=t;r<e.childCount;r++)if(!n.allowsMarks(e.child(r).marks))return!0;return!1}function HTe(n){return n.spec.defining||n.spec.definingForContent}function qTe(n,e,t,r){if(!r.size)return n.deleteRange(e,t);let s=n.doc.resolve(e),i=n.doc.resolve(t);if(SX(s,i,r))return n.step(new qs(e,t,r));let o=TX(s,i);o[o.length-1]==0&&o.pop();let a=-(s.depth+1);o.unshift(a);for(let f=s.depth,p=s.pos-1;f>0;f--,p--){let m=s.node(f).type.spec;if(m.defining||m.definingAsContext||m.isolating)break;o.indexOf(f)>-1?a=f:s.before(f)==p&&o.splice(1,0,-f)}let l=o.indexOf(a),c=[],u=r.openStart;for(let f=r.content,p=0;;p++){let m=f.firstChild;if(c.push(m),p==r.openStart)break;f=m.content}for(let f=u-1;f>=0;f--){let p=c[f],m=HTe(p.type);if(m&&!p.sameMarkup(s.node(Math.abs(a)-1)))u=f;else if(m||!p.type.isTextblock)break}for(let f=r.openStart;f>=0;f--){let p=(f+u+1)%(r.openStart+1),m=c[p];if(m)for(let y=0;y<o.length;y++){let w=o[(y+l)%o.length],k=!0;w<0&&(k=!1,w=-w);let x=s.node(w-1),S=s.index(w-1);if(x.canReplaceWith(S,S,m.type,m.marks))return n.replace(s.before(w),k?i.after(w):t,new He(_X(r.content,0,r.openStart,p),p,r.openEnd))}}let d=n.steps.length;for(let f=o.length-1;f>=0&&(n.replace(e,t,r),!(n.steps.length>d));f--){let p=o[f];p<0||(e=s.before(p),t=i.after(p))}}function _X(n,e,t,r,s){if(e<t){let i=n.firstChild;n=n.replaceChild(0,i.copy(_X(i.content,e+1,t,r,i)))}if(e>r){let i=s.contentMatchAt(0),o=i.fillBefore(n).append(n);n=o.append(i.matchFragment(o).fillBefore($e.empty,!0))}return n}function UTe(n,e,t,r){if(!r.isInline&&e==t&&n.doc.resolve(e).parent.content.size){let s=jTe(n.doc,e,r.type);s!=null&&(e=t=s)}n.replaceRange(e,t,new He($e.from(r),0,0))}function WTe(n,e,t){let r=n.doc.resolve(e),s=n.doc.resolve(t),i=TX(r,s);for(let o=0;o<i.length;o++){let a=i[o],l=o==i.length-1;if(l&&a==0||r.node(a).type.contentMatch.validEnd)return n.delete(r.start(a),s.end(a));if(a>0&&(l||r.node(a-1).canReplace(r.index(a-1),s.indexAfter(a-1))))return n.delete(r.before(a),s.after(a))}for(let o=1;o<=r.depth&&o<=s.depth;o++)if(e-r.start(o)==r.depth-o&&t>r.end(o)&&s.end(o)-t!=s.depth-o&&r.start(o-1)==s.start(o-1)&&r.node(o-1).canReplace(r.index(o-1),s.index(o-1)))return n.delete(r.before(o),t);n.delete(e,t)}function TX(n,e){let t=[],r=Math.min(n.depth,e.depth);for(let s=r;s>=0;s--){let i=n.start(s);if(i<n.pos-(n.depth-s)||e.end(s)>e.pos+(e.depth-s)||n.node(s).type.spec.isolating||e.node(s).type.spec.isolating)break;(i==e.start(s)||s==n.depth&&s==e.depth&&n.parent.inlineContent&&e.parent.inlineContent&&s&&e.start(s-1)==i-1)&&t.push(s)}return t}class l1 extends yi{constructor(e,t,r){super(),this.pos=e,this.attr=t,this.value=r}apply(e){let t=e.nodeAt(this.pos);if(!t)return xs.fail("No node at attribute step's position");let r=Object.create(null);for(let i in t.attrs)r[i]=t.attrs[i];r[this.attr]=this.value;let s=t.type.create(r,null,t.marks);return xs.fromReplace(e,this.pos,this.pos+1,new He($e.from(s),0,t.isLeaf?0:1))}getMap(){return Ho.empty}invert(e){return new l1(this.pos,this.attr,e.nodeAt(this.pos).attrs[this.attr])}map(e){let t=e.mapResult(this.pos,1);return t.deletedAfter?null:new l1(t.pos,this.attr,this.value)}toJSON(){return{stepType:"attr",pos:this.pos,attr:this.attr,value:this.value}}static fromJSON(e,t){if(typeof t.pos!="number"||typeof t.attr!="string")throw new RangeError("Invalid input for AttrStep.fromJSON");return new l1(t.pos,t.attr,t.value)}}yi.jsonID("attr",l1);class t3 extends yi{constructor(e,t){super(),this.attr=e,this.value=t}apply(e){let t=Object.create(null);for(let s in e.attrs)t[s]=e.attrs[s];t[this.attr]=this.value;let r=e.type.create(t,e.content,e.marks);return xs.ok(r)}getMap(){return Ho.empty}invert(e){return new t3(this.attr,e.attrs[this.attr])}map(e){return this}toJSON(){return{stepType:"docAttr",attr:this.attr,value:this.value}}static fromJSON(e,t){if(typeof t.attr!="string")throw new RangeError("Invalid input for DocAttrStep.fromJSON");return new t3(t.attr,t.value)}}yi.jsonID("docAttr",t3);let c1=class extends Error{};c1=function n(e){let t=Error.call(this,e);return t.__proto__=n.prototype,t},c1.prototype=Object.create(Error.prototype),c1.prototype.constructor=c1,c1.prototype.name="TransformError";class AX{constructor(e){this.doc=e,this.steps=[],this.docs=[],this.mapping=new X2}get before(){return this.docs.length?this.docs[0]:this.doc}step(e){let t=this.maybeStep(e);if(t.failed)throw new c1(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}addStep(e,t){this.docs.push(this.doc),this.steps.push(e),this.mapping.appendMap(e.getMap()),this.doc=t}replace(e,t=e,r=He.empty){let s=W7(this.doc,e,t,r);return s&&this.step(s),this}replaceWith(e,t,r){return this.replace(e,t,new He($e.from(r),0,0))}delete(e,t){return this.replace(e,t,He.empty)}insert(e,t){return this.replaceWith(e,e,t)}replaceRange(e,t,r){return qTe(this,e,t,r),this}replaceRangeWith(e,t,r){return UTe(this,e,t,r),this}deleteRange(e,t){return WTe(this,e,t),this}lift(e,t){return ATe(this,e,t),this}join(e,t=1){return FTe(this,e,t),this}wrap(e,t){return OTe(this,e,t),this}setBlockType(e,t=e,r,s=null){return PTe(this,e,t,r,s),this}setNodeMarkup(e,t,r=null,s){return DTe(this,e,t,r,s),this}setNodeAttribute(e,t,r){return this.step(new l1(e,t,r)),this}setDocAttribute(e,t){return this.step(new t3(e,t)),this}addNodeMark(e,t){return this.step(new xh(e,t)),this}removeNodeMark(e,t){let r=this.doc.nodeAt(e);if(!r)throw new RangeError("No node at position "+e);if(t instanceof Ln)t.isInSet(r.marks)&&this.step(new i0(e,t));else{let s=r.marks,i,o=[];for(;i=t.isInSet(s);)o.push(new i0(e,i)),s=i.removeFromSet(s);for(let a=o.length-1;a>=0;a--)this.step(o[a])}return this}split(e,t=1,r){return RTe(this,e,t,r),this}addMark(e,t,r){return ETe(this,e,t,r),this}removeMark(e,t,r){return _Te(this,e,t,r),this}clearIncompatible(e,t,r){return YA(this,e,t,r),this}}const QA=Object.create(null);class nn{constructor(e,t,r){this.$anchor=e,this.$head=t,this.ranges=r||[new NX(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=He.empty){let r=t.content.lastChild,s=null;for(let a=0;a<t.openEnd;a++)s=r,r=r.lastChild;let i=e.steps.length,o=this.ranges;for(let a=0;a<o.length;a++){let{$from:l,$to:c}=o[a],u=e.mapping.slice(i);e.replaceRange(u.map(l.pos),u.map(c.pos),a?He.empty:t),a==0&&PX(e,i,(r?r.isInline:s&&s.isTextblock)?-1:1)}}replaceWith(e,t){let r=e.steps.length,s=this.ranges;for(let i=0;i<s.length;i++){let{$from:o,$to:a}=s[i],l=e.mapping.slice(r),c=l.map(o.pos),u=l.map(a.pos);i?e.deleteRange(c,u):(e.replaceRangeWith(c,u,t),PX(e,r,t.isInline?-1:1))}}static findFrom(e,t,r=!1){let s=e.parent.inlineContent?new It(e):u1(e.node(0),e.parent,e.pos,e.index(),t,r);if(s)return s;for(let i=e.depth-1;i>=0;i--){let o=t<0?u1(e.node(0),e.node(i),e.before(i+1),e.index(i),t,r):u1(e.node(0),e.node(i),e.after(i+1),e.index(i)+1,t,r);if(o)return o}return null}static near(e,t=1){return this.findFrom(e,t)||this.findFrom(e,-t)||new oo(e.node(0))}static atStart(e){return u1(e,e,0,0,1)||new oo(e)}static atEnd(e){return u1(e,e,e.content.size,e.childCount,-1)||new oo(e)}static fromJSON(e,t){if(!t||!t.type)throw new RangeError("Invalid input for Selection.fromJSON");let r=QA[t.type];if(!r)throw new RangeError(`No selection type ${t.type} defined`);return r.fromJSON(e,t)}static jsonID(e,t){if(e in QA)throw new RangeError("Duplicate use of selection JSON ID "+e);return QA[e]=t,t.prototype.jsonID=e,t}getBookmark(){return It.between(this.$anchor,this.$head).getBookmark()}}nn.prototype.visible=!0;class NX{constructor(e,t){this.$from=e,this.$to=t}}let MX=!1;function OX(n){!MX&&!n.parent.inlineContent&&(MX=!0,console.warn("TextSelection endpoint not pointing into a node with inline content ("+n.parent.type.name+")"))}class It extends nn{constructor(e,t=e){OX(e),OX(t),super(e,t)}get $cursor(){return this.$anchor.pos==this.$head.pos?this.$head:null}map(e,t){let r=e.resolve(t.map(this.head));if(!r.parent.inlineContent)return nn.near(r);let s=e.resolve(t.map(this.anchor));return new It(s.parent.inlineContent?s:r,r)}replace(e,t=He.empty){if(super.replace(e,t),t==He.empty){let r=this.$from.marksAcross(this.$to);r&&e.ensureMarks(r)}}eq(e){return e instanceof It&&e.anchor==this.anchor&&e.head==this.head}getBookmark(){return new G7(this.anchor,this.head)}toJSON(){return{type:"text",anchor:this.anchor,head:this.head}}static fromJSON(e,t){if(typeof t.anchor!="number"||typeof t.head!="number")throw new RangeError("Invalid input for TextSelection.fromJSON");return new It(e.resolve(t.anchor),e.resolve(t.head))}static create(e,t,r=t){let s=e.resolve(t);return new this(s,r==t?s:e.resolve(r))}static between(e,t,r){let s=e.pos-t.pos;if((!r||s)&&(r=s>=0?1:-1),!t.parent.inlineContent){let i=nn.findFrom(t,r,!0)||nn.findFrom(t,-r,!0);if(i)t=i.$head;else return nn.near(t,r)}return e.parent.inlineContent||(s==0?e=t:(e=(nn.findFrom(e,-r,!0)||nn.findFrom(e,r,!0)).$anchor,e.pos<t.pos!=s<0&&(e=t))),new It(e,t)}}nn.jsonID("text",It);class G7{constructor(e,t){this.anchor=e,this.head=t}map(e){return new G7(e.map(this.anchor),e.map(this.head))}resolve(e){return It.between(e.resolve(this.anchor),e.resolve(this.head))}}class Ft extends nn{constructor(e){let t=e.nodeAfter,r=e.node(0).resolve(e.pos+t.nodeSize);super(e,r),this.node=t}map(e,t){let{deleted:r,pos:s}=t.mapResult(this.anchor),i=e.resolve(s);return r?nn.near(i):new Ft(i)}content(){return new He($e.from(this.node),0,0)}eq(e){return e instanceof Ft&&e.anchor==this.anchor}toJSON(){return{type:"node",anchor:this.anchor}}getBookmark(){return new eN(this.anchor)}static fromJSON(e,t){if(typeof t.anchor!="number")throw new RangeError("Invalid input for NodeSelection.fromJSON");return new Ft(e.resolve(t.anchor))}static create(e,t){return new Ft(e.resolve(t))}static isSelectable(e){return!e.isText&&e.type.spec.selectable!==!1}}Ft.prototype.visible=!1,nn.jsonID("node",Ft);class eN{constructor(e){this.anchor=e}map(e){let{deleted:t,pos:r}=e.mapResult(this.anchor);return t?new G7(r,r):new eN(r)}resolve(e){let t=e.resolve(this.anchor),r=t.nodeAfter;return r&&Ft.isSelectable(r)?new Ft(t):nn.near(t)}}class oo extends nn{constructor(e){super(e.resolve(0),e.resolve(e.content.size))}replace(e,t=He.empty){if(t==He.empty){e.delete(0,e.doc.content.size);let r=nn.atStart(e.doc);r.eq(e.selection)||e.setSelection(r)}else super.replace(e,t)}toJSON(){return{type:"all"}}static fromJSON(e){return new oo(e)}map(e){return new oo(e)}eq(e){return e instanceof oo}getBookmark(){return GTe}}nn.jsonID("all",oo);const GTe={map(){return this},resolve(n){return new oo(n)}};function u1(n,e,t,r,s,i=!1){if(e.inlineContent)return It.create(n,t);for(let o=r-(s>0?0:1);s>0?o<e.childCount:o>=0;o+=s){let a=e.child(o);if(a.isAtom){if(!i&&Ft.isSelectable(a))return Ft.create(n,t-(s<0?a.nodeSize:0))}else{let l=u1(n,a,t+s,s<0?a.childCount:0,s,i);if(l)return l}t+=a.nodeSize*s}return null}function PX(n,e,t){let r=n.steps.length-1;if(r<e)return;let s=n.steps[r];if(!(s instanceof qs||s instanceof vi))return;let i=n.mapping.maps[r],o;i.forEach((a,l,c,u)=>{o==null&&(o=u)}),n.setSelection(nn.near(n.doc.resolve(o),t))}const IX=1,K7=2,DX=4;class KTe extends AX{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 new RangeError("Selection passed to setSelection must point at the current document");return this.curSelection=e,this.curSelectionFor=this.steps.length,this.updated=(this.updated|IX)&~K7,this.storedMarks=null,this}get selectionSet(){return(this.updated&IX)>0}setStoredMarks(e){return this.storedMarks=e,this.updated|=K7,this}ensureMarks(e){return Ln.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&K7)>0}addStep(e,t){super.addStep(e,t),this.updated=this.updated&~K7,this.storedMarks=null}setTime(e){return this.time=e,this}replaceSelection(e){return this.selection.replace(this,e),this}replaceSelectionWith(e,t=!0){let r=this.selection;return t&&(e=e.mark(this.storedMarks||(r.empty?r.$from.marks():r.$from.marksAcross(r.$to)||Ln.none))),r.replaceWith(this,e),this}deleteSelection(){return this.selection.replace(this),this}insertText(e,t,r){let s=this.doc.type.schema;if(t==null)return e?this.replaceSelectionWith(s.text(e),!0):this.deleteSelection();{if(r==null&&(r=t),!e)return this.deleteRange(t,r);let i=this.storedMarks;if(!i){let o=this.doc.resolve(t);i=r==t?o.marks():o.marksAcross(this.doc.resolve(r))}return this.replaceRangeWith(t,r,s.text(e,i)),!this.selection.empty&&this.selection.to==t+e.length&&this.setSelection(nn.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|=DX,this}get scrolledIntoView(){return(this.updated&DX)>0}}function RX(n,e){return!e||!n?n:n.bind(e)}class n3{constructor(e,t,r){this.name=e,this.init=RX(t.init,r),this.apply=RX(t.apply,r)}}const YTe=[new n3("doc",{init(n){return n.doc||n.schema.topNodeType.createAndFill()},apply(n){return n.doc}}),new n3("selection",{init(n,e){return n.selection||nn.atStart(e.doc)},apply(n){return n.selection}}),new n3("storedMarks",{init(n){return n.storedMarks||null},apply(n,e,t,r){return r.selection.$cursor?n.storedMarks:null}}),new n3("scrollToSelection",{init(){return 0},apply(n,e){return n.scrolledIntoView?e+1:e}})];class tN{constructor(e,t){this.schema=e,this.plugins=[],this.pluginsByKey=Object.create(null),this.fields=YTe.slice(),t&&t.forEach(r=>{if(this.pluginsByKey[r.key])throw new RangeError("Adding different instances of a keyed plugin ("+r.key+")");this.plugins.push(r),this.pluginsByKey[r.key]=r,r.spec.state&&this.fields.push(new n3(r.key,r.spec.state,r))})}}class d1{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 r=0;r<this.config.plugins.length;r++)if(r!=t){let s=this.config.plugins[r];if(s.spec.filterTransaction&&!s.spec.filterTransaction.call(s,e,this))return!1}return!0}applyTransaction(e){if(!this.filterTransaction(e))return{state:this,transactions:[]};let t=[e],r=this.applyInner(e),s=null;for(;;){let i=!1;for(let o=0;o<this.config.plugins.length;o++){let a=this.config.plugins[o];if(a.spec.appendTransaction){let l=s?s[o].n:0,c=s?s[o].state:this,u=l<t.length&&a.spec.appendTransaction.call(a,l?t.slice(l):t,c,r);if(u&&r.filterTransaction(u,o)){if(u.setMeta("appendedTransaction",e),!s){s=[];for(let d=0;d<this.config.plugins.length;d++)s.push(d<o?{state:r,n:t.length}:{state:this,n:0})}t.push(u),r=r.applyInner(u),i=!0}s&&(s[o]={state:r,n:t.length})}}if(!i)return{state:r,transactions:t}}}applyInner(e){if(!e.before.eq(this.doc))throw new RangeError("Applying a mismatched transaction");let t=new d1(this.config),r=this.config.fields;for(let s=0;s<r.length;s++){let i=r[s];t[i.name]=i.apply(e,this[i.name],this,t)}return t}get tr(){return new KTe(this)}static create(e){let t=new tN(e.doc?e.doc.type.schema:e.schema,e.plugins),r=new d1(t);for(let s=0;s<t.fields.length;s++)r[t.fields[s].name]=t.fields[s].init(e,r);return r}reconfigure(e){let t=new tN(this.schema,e.plugins),r=t.fields,s=new d1(t);for(let i=0;i<r.length;i++){let o=r[i].name;s[o]=this.hasOwnProperty(o)?this[o]:r[i].init(e,s)}return s}toJSON(e){let t={doc:this.doc.toJSON(),selection:this.selection.toJSON()};if(this.storedMarks&&(t.storedMarks=this.storedMarks.map(r=>r.toJSON())),e&&typeof e=="object")for(let r in e){if(r=="doc"||r=="selection")throw new RangeError("The JSON fields `doc` and `selection` are reserved");let s=e[r],i=s.spec.state;i&&i.toJSON&&(t[r]=i.toJSON.call(s,this[s.key]))}return t}static fromJSON(e,t,r){if(!t)throw new RangeError("Invalid input for EditorState.fromJSON");if(!e.schema)throw new RangeError("Required config field 'schema' missing");let s=new tN(e.schema,e.plugins),i=new d1(s);return s.fields.forEach(o=>{if(o.name=="doc")i.doc=Nu.fromJSON(e.schema,t.doc);else if(o.name=="selection")i.selection=nn.fromJSON(i.doc,t.selection);else if(o.name=="storedMarks")t.storedMarks&&(i.storedMarks=t.storedMarks.map(e.schema.markFromJSON));else{if(r)for(let a in r){let l=r[a],c=l.spec.state;if(l.key==o.name&&c&&c.fromJSON&&Object.prototype.hasOwnProperty.call(t,a)){i[o.name]=c.fromJSON.call(l,e,t[a],i);return}}i[o.name]=o.init(e,i)}}),i}}function $X(n,e,t){for(let r in n){let s=n[r];s instanceof Function?s=s.bind(e):r=="handleDOMEvents"&&(s=$X(s,e,{})),t[r]=s}return t}class ks{constructor(e){this.spec=e,this.props={},e.props&&$X(e.props,this,this.props),this.key=e.key?e.key.key:LX("plugin")}getState(e){return e[this.key]}}const nN=Object.create(null);function LX(n){return n in nN?n+"$"+ ++nN[n]:(nN[n]=0,n+"$")}class rs{constructor(e="key"){this.key=LX(e)}get(e){return e.config.pluginsByKey[this.key]}getState(e){return e[this.key]}}const rN=(n,e)=>n.selection.empty?!1:(e&&e(n.tr.deleteSelection().scrollIntoView()),!0);function FX(n,e){let{$cursor:t}=n.selection;return!t||(e?!e.endOfTextblock("backward",n):t.parentOffset>0)?null:t}const jX=(n,e,t)=>{let r=FX(n,t);if(!r)return!1;let s=sN(r);if(!s){let o=r.blockRange(),a=o&&q7(o);return a==null?!1:(e&&e(n.tr.lift(o,a).scrollIntoView()),!0)}let i=s.nodeBefore;if(zX(n,s,e,-1))return!0;if(r.parent.content.size==0&&(h1(i,"end")||Ft.isSelectable(i)))for(let o=r.depth;;o--){let a=W7(n.doc,r.before(o),r.after(o),He.empty);if(a&&a.slice.size<a.to-a.from){if(e){let l=n.tr.step(a);l.setSelection(h1(i,"end")?nn.findFrom(l.doc.resolve(l.mapping.map(s.pos,-1)),-1):Ft.create(l.doc,s.pos-i.nodeSize)),e(l.scrollIntoView())}return!0}if(o==1||r.node(o-1).childCount>1)break}return i.isAtom&&s.depth==r.depth-1?(e&&e(n.tr.delete(s.pos-i.nodeSize,s.pos).scrollIntoView()),!0):!1},ZTe=(n,e,t)=>{let r=FX(n,t);if(!r)return!1;let s=sN(r);return s?XTe(n,s,e):!1};function XTe(n,e,t){let r=e.nodeBefore,s=r,i=e.pos-1;for(;!s.isTextblock;i--){if(s.type.spec.isolating)return!1;let u=s.lastChild;if(!u)return!1;s=u}let o=e.nodeAfter,a=o,l=e.pos+1;for(;!a.isTextblock;l++){if(a.type.spec.isolating)return!1;let u=a.firstChild;if(!u)return!1;a=u}let c=W7(n.doc,i,l,He.empty);if(!c||c.from!=i||c instanceof qs&&c.slice.size>=l-i)return!1;if(t){let u=n.tr.step(c);u.setSelection(It.create(u.doc,i)),t(u.scrollIntoView())}return!0}function h1(n,e,t=!1){for(let r=n;r;r=e=="start"?r.firstChild:r.lastChild){if(r.isTextblock)return!0;if(t&&r.childCount!=1)return!1}return!1}const BX=(n,e,t)=>{let{$head:r,empty:s}=n.selection,i=r;if(!s)return!1;if(r.parent.isTextblock){if(t?!t.endOfTextblock("backward",n):r.parentOffset>0)return!1;i=sN(r)}let o=i&&i.nodeBefore;return!o||!Ft.isSelectable(o)?!1:(e&&e(n.tr.setSelection(Ft.create(n.doc,i.pos-o.nodeSize)).scrollIntoView()),!0)};function sN(n){if(!n.parent.type.spec.isolating)for(let e=n.depth-1;e>=0;e--){if(n.index(e)>0)return n.doc.resolve(n.before(e+1));if(n.node(e).type.spec.isolating)break}return null}function JTe(n,e){let{$cursor:t}=n.selection;return!t||(e?!e.endOfTextblock("forward",n):t.parentOffset<t.parent.content.size)?null:t}const QTe=(n,e,t)=>{let r=JTe(n,t);if(!r)return!1;let s=VX(r);if(!s)return!1;let i=s.nodeAfter;if(zX(n,s,e,1))return!0;if(r.parent.content.size==0&&(h1(i,"start")||Ft.isSelectable(i))){let o=W7(n.doc,r.before(),r.after(),He.empty);if(o&&o.slice.size<o.to-o.from){if(e){let a=n.tr.step(o);a.setSelection(h1(i,"start")?nn.findFrom(a.doc.resolve(a.mapping.map(s.pos)),1):Ft.create(a.doc,a.mapping.map(s.pos))),e(a.scrollIntoView())}return!0}}return i.isAtom&&s.depth==r.depth-1?(e&&e(n.tr.delete(s.pos,s.pos+i.nodeSize).scrollIntoView()),!0):!1},eAe=(n,e,t)=>{let{$head:r,empty:s}=n.selection,i=r;if(!s)return!1;if(r.parent.isTextblock){if(t?!t.endOfTextblock("forward",n):r.parentOffset<r.parent.content.size)return!1;i=VX(r)}let o=i&&i.nodeAfter;return!o||!Ft.isSelectable(o)?!1:(e&&e(n.tr.setSelection(Ft.create(n.doc,i.pos)).scrollIntoView()),!0)};function VX(n){if(!n.parent.type.spec.isolating)for(let e=n.depth-1;e>=0;e--){let t=n.node(e);if(n.index(e)+1<t.childCount)return n.doc.resolve(n.after(e+1));if(t.type.spec.isolating)break}return null}const tAe=(n,e)=>{let{$head:t,$anchor:r}=n.selection;return!t.parent.type.spec.code||!t.sameParent(r)?!1:(e&&e(n.tr.insertText(` +`).scrollIntoView()),!0)};function iN(n){for(let e=0;e<n.edgeCount;e++){let{type:t}=n.edge(e);if(t.isTextblock&&!t.hasRequiredAttrs())return t}return null}const nAe=(n,e)=>{let{$head:t,$anchor:r}=n.selection;if(!t.parent.type.spec.code||!t.sameParent(r))return!1;let s=t.node(-1),i=t.indexAfter(-1),o=iN(s.contentMatchAt(i));if(!o||!s.canReplaceWith(i,i,o))return!1;if(e){let a=t.after(),l=n.tr.replaceWith(a,a,o.createAndFill());l.setSelection(nn.near(l.doc.resolve(a),1)),e(l.scrollIntoView())}return!0},rAe=(n,e)=>{let t=n.selection,{$from:r,$to:s}=t;if(t instanceof oo||r.parent.inlineContent||s.parent.inlineContent)return!1;let i=iN(s.parent.contentMatchAt(s.indexAfter()));if(!i||!i.isTextblock)return!1;if(e){let o=(!r.parentOffset&&s.index()<s.parent.childCount?r:s).pos,a=n.tr.insert(o,i.createAndFill());a.setSelection(It.create(a.doc,o+1)),e(a.scrollIntoView())}return!0},sAe=(n,e)=>{let{$cursor:t}=n.selection;if(!t||t.parent.content.size)return!1;if(t.depth>1&&t.after()!=t.end(-1)){let i=t.before();if(J2(n.doc,i))return e&&e(n.tr.split(i).scrollIntoView()),!0}let r=t.blockRange(),s=r&&q7(r);return s==null?!1:(e&&e(n.tr.lift(r,s).scrollIntoView()),!0)};function iAe(n){return(e,t)=>{let{$from:r,$to:s}=e.selection;if(e.selection instanceof Ft&&e.selection.node.isBlock)return!r.parentOffset||!J2(e.doc,r.pos)?!1:(t&&t(e.tr.split(r.pos).scrollIntoView()),!0);if(!r.depth)return!1;let i=[],o,a,l=!1,c=!1;for(let p=r.depth;;p--)if(r.node(p).isBlock){l=r.end(p)==r.pos+(r.depth-p),c=r.start(p)==r.pos-(r.depth-p),a=iN(r.node(p-1).contentMatchAt(r.indexAfter(p-1))),i.unshift(l&&a?{type:a}:null),o=p;break}else{if(p==1)return!1;i.unshift(null)}let u=e.tr;(e.selection instanceof It||e.selection instanceof oo)&&u.deleteSelection();let d=u.mapping.map(r.pos),f=J2(u.doc,d,i.length,i);if(f||(i[0]=a?{type:a}:null,f=J2(u.doc,d,i.length,i)),!f)return!1;if(u.split(d,i.length,i),!l&&c&&r.node(o).type!=a){let p=u.mapping.map(r.before(o)),m=u.doc.resolve(p);a&&r.node(o-1).canReplaceWith(m.index(),m.index()+1,a)&&u.setNodeMarkup(u.mapping.map(r.before(o)),a)}return t&&t(u.scrollIntoView()),!0}}const oAe=iAe(),aAe=(n,e)=>(e&&e(n.tr.setSelection(new oo(n.doc))),!0);function lAe(n,e,t){let r=e.nodeBefore,s=e.nodeAfter,i=e.index();return!r||!s||!r.type.compatibleContent(s.type)?!1:!r.content.size&&e.parent.canReplace(i-1,i)?(t&&t(n.tr.delete(e.pos-r.nodeSize,e.pos).scrollIntoView()),!0):!e.parent.canReplace(i,i+1)||!(s.isTextblock||U7(n.doc,e.pos))?!1:(t&&t(n.tr.join(e.pos).scrollIntoView()),!0)}function zX(n,e,t,r){let s=e.nodeBefore,i=e.nodeAfter,o,a,l=s.type.spec.isolating||i.type.spec.isolating;if(!l&&lAe(n,e,t))return!0;let c=!l&&e.parent.canReplace(e.index(),e.index()+1);if(c&&(o=(a=s.contentMatchAt(s.childCount)).findWrapping(i.type))&&a.matchType(o[0]||i.type).validEnd){if(t){let p=e.pos+i.nodeSize,m=$e.empty;for(let k=o.length-1;k>=0;k--)m=$e.from(o[k].create(null,m));m=$e.from(s.copy(m));let y=n.tr.step(new vi(e.pos-1,p,e.pos,p,new He(m,1,0),o.length,!0)),w=y.doc.resolve(p+2*o.length);w.nodeAfter&&w.nodeAfter.type==s.type&&U7(y.doc,w.pos)&&y.join(w.pos),t(y.scrollIntoView())}return!0}let u=i.type.spec.isolating||r>0&&l?null:nn.findFrom(e,1),d=u&&u.$from.blockRange(u.$to),f=d&&q7(d);if(f!=null&&f>=e.depth)return t&&t(n.tr.lift(d,f).scrollIntoView()),!0;if(c&&h1(i,"start",!0)&&h1(s,"end")){let p=s,m=[];for(;m.push(p),!p.isTextblock;)p=p.lastChild;let y=i,w=1;for(;!y.isTextblock;y=y.firstChild)w++;if(p.canReplace(p.childCount,p.childCount,y.content)){if(t){let k=$e.empty;for(let S=m.length-1;S>=0;S--)k=$e.from(m[S].copy(k));let x=n.tr.step(new vi(e.pos-m.length,e.pos+i.nodeSize,e.pos+w,e.pos+i.nodeSize-w,new He(k,m.length,0),0,!0));t(x.scrollIntoView())}return!0}}return!1}function HX(n){return function(e,t){let r=e.selection,s=n<0?r.$from:r.$to,i=s.depth;for(;s.node(i).isInline;){if(!i)return!1;i--}return s.node(i).isTextblock?(t&&t(e.tr.setSelection(It.create(e.doc,n<0?s.start(i):s.end(i)))),!0):!1}}const cAe=HX(-1),uAe=HX(1);function oN(n,e=null){return function(t,r){let{$from:s,$to:i}=t.selection,o=s.blockRange(i),a=o&&ZA(o,n,e);return a?(r&&r(t.tr.wrap(o,a).scrollIntoView()),!0):!1}}function r3(n,e=null){return function(t,r){let s=!1;for(let i=0;i<t.selection.ranges.length&&!s;i++){let{$from:{pos:o},$to:{pos:a}}=t.selection.ranges[i];t.doc.nodesBetween(o,a,(l,c)=>{if(s)return!1;if(!(!l.isTextblock||l.hasMarkup(n,e)))if(l.type==n)s=!0;else{let u=t.doc.resolve(c),d=u.index();s=u.parent.canReplaceWith(d,d+1,n)}})}if(!s)return!1;if(r){let i=t.tr;for(let o=0;o<t.selection.ranges.length;o++){let{$from:{pos:a},$to:{pos:l}}=t.selection.ranges[o];i.setBlockType(a,l,n,e)}r(i.scrollIntoView())}return!0}}function dAe(n,e,t,r){for(let s=0;s<e.length;s++){let{$from:i,$to:o}=e[s],a=i.depth==0?n.inlineContent&&n.type.allowsMarkType(t):!1;if(n.nodesBetween(i.pos,o.pos,(l,c)=>{if(a)return!1;a=l.inlineContent&&l.type.allowsMarkType(t)}),a)return!0}return!1}function Y7(n,e=null,t){return function(r,s){let{empty:i,$cursor:o,ranges:a}=r.selection;if(i&&!o||!dAe(r.doc,a,n))return!1;if(s)if(o)n.isInSet(r.storedMarks||o.marks())?s(r.tr.removeStoredMark(n)):s(r.tr.addStoredMark(n.create(e)));else{let l,c=r.tr;l=!a.some(u=>r.doc.rangeHasMark(u.$from.pos,u.$to.pos,n));for(let u=0;u<a.length;u++){let{$from:d,$to:f}=a[u];if(!l)c.removeMark(d.pos,f.pos,n);else{let p=d.pos,m=f.pos,y=d.nodeAfter,w=f.nodeBefore,k=y&&y.isText?/^\s*/.exec(y.text)[0].length:0,x=w&&w.isText?/\s*$/.exec(w.text)[0].length:0;p+k<m&&(p+=k,m-=x),c.addMark(p,m,n.create(e))}}s(c.scrollIntoView())}return!0}}function f1(...n){return function(e,t,r){for(let s=0;s<n.length;s++)if(n[s](e,t,r))return!0;return!1}}let aN=f1(rN,jX,BX),qX=f1(rN,QTe,eAe);const Pu={Enter:f1(tAe,rAe,sAe,oAe),"Mod-Enter":nAe,Backspace:aN,"Mod-Backspace":aN,"Shift-Backspace":aN,Delete:qX,"Mod-Delete":qX,"Mod-a":aAe},UX={"Ctrl-h":Pu.Backspace,"Alt-Backspace":Pu["Mod-Backspace"],"Ctrl-d":Pu.Delete,"Ctrl-Alt-Backspace":Pu["Mod-Delete"],"Alt-Delete":Pu["Mod-Delete"],"Alt-d":Pu["Mod-Delete"],"Ctrl-a":cAe,"Ctrl-e":uAe};for(let n in Pu)UX[n]=Pu[n];const hAe=(typeof navigator<"u"?/Mac|iP(hone|[oa]d)/.test(navigator.platform):typeof os<"u"&&os.platform?os.platform()=="darwin":!1)?UX:Pu;class qo{constructor(e,t,r={}){this.match=e,this.match=e,this.handler=typeof t=="string"?fAe(t):t,this.undoable=r.undoable!==!1,this.inCode=r.inCode||!1,this.inCodeMark=r.inCodeMark!==!1}}function fAe(n){return function(e,t,r,s){let i=n;if(t[1]){let o=t[0].lastIndexOf(t[1]);i+=t[0].slice(o+t[1].length),r+=o;let a=r-s;a>0&&(i=t[0].slice(o-a,o)+i,r=s)}return e.tr.insertText(i,r,s)}}const pAe=(n,e)=>{let t=n.plugins;for(let r=0;r<t.length;r++){let s=t[r],i;if(s.spec.isInputRules&&(i=s.getState(n))){if(e){let o=n.tr,a=i.transform;for(let l=a.steps.length-1;l>=0;l--)o.step(a.steps[l].invert(a.docs[l]));if(i.text){let l=o.doc.resolve(i.from).marks();o.replaceWith(i.from,i.to,n.schema.text(i.text,l))}else o.delete(i.from,i.to);e(o)}return!0}}return!1};new qo(/--$/,"—",{inCodeMark:!1}),new qo(/\.\.\.$/,"…",{inCodeMark:!1}),new qo(/(?:^|[\s\{\[\(\<'"\u2018\u201C])(")$/,"“",{inCodeMark:!1}),new qo(/"$/,"”",{inCodeMark:!1}),new qo(/(?:^|[\s\{\[\(\<'"\u2018\u201C])(')$/,"‘",{inCodeMark:!1}),new qo(/'$/,"’",{inCodeMark:!1});function lN(n,e,t=null,r){return new qo(n,(s,i,o,a)=>{let l=t instanceof Function?t(i):t,c=s.tr.delete(o,a),u=c.doc.resolve(o),d=u.blockRange(),f=d&&ZA(d,e,l);if(!f)return null;c.wrap(d,f);let p=c.doc.resolve(o-1).nodeBefore;return p&&p.type==e&&U7(c.doc,o-1)&&(!r||r(i,p))&&c.join(o-1),c})}function WX(n,e,t=null){return new qo(n,(r,s,i,o)=>{let a=r.doc.resolve(i),l=t instanceof Function?t(s):t;return a.node(-1).canReplaceWith(a.index(-1),a.indexAfter(-1),e)?r.tr.delete(i,o).setBlockType(i,i,e,l):null})}const kh=typeof navigator<"u"?navigator:null,GX=typeof document<"u"?document:null,Ch=kh&&kh.userAgent||"",cN=/Edge\/(\d+)/.exec(Ch),KX=/MSIE \d/.exec(Ch),uN=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(Ch),Z7=!!(KX||uN||cN),mAe=KX?document.documentMode:uN?+uN[1]:cN?+cN[1]:0,YX=!Z7&&/gecko\/(\d+)/i.test(Ch),gAe=YX&&+(/Firefox\/(\d+)/.exec(Ch)||[0,0])[1],dN=!Z7&&/Chrome\/(\d+)/.exec(Ch),yAe=!!dN,vAe=dN?+dN[1]:0,ZX=!Z7&&!!kh&&/Apple Computer/.test(kh.vendor),XX=ZX&&(/Mobile\/\w+/.test(Ch)||!!kh&&kh.maxTouchPoints>2),bAe=XX||(kh?/Mac/.test(kh.platform):!1),wAe=/Android \d/.test(Ch),JX=!!GX&&"webkitFontSmoothing"in GX.documentElement.style,xAe=JX?+(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent)||[0,0])[1]:0;var X7=Object.freeze({__proto__:null,android:wAe,chrome:yAe,chrome_version:vAe,gecko:YX,gecko_version:gAe,ie:Z7,ie_version:mAe,ios:XX,mac:bAe,safari:ZX,webkit:JX,webkit_version:xAe});function hN(n,e,t,r,s,i){if(n.composing)return!1;const o=n.state,a=o.doc.resolve(e);if(a.parent.type.spec.code)return!1;const l=a.parent.textBetween(Math.max(0,a.parentOffset-500),a.parentOffset,void 0,"")+r;for(let c of s){const u=c,d=u.match.exec(l),f=d&&d[0]&&u.handler(o,d,e-(d[0].length-r.length),t);if(f)return u.undoable!==!1&&f.setMeta(i,{transform:f,from:e,to:t,text:r}),n.dispatch(f),!0}return!1}const kAe=new rs("MILKDOWN_CUSTOM_INPUTRULES");function CAe({rules:n}){const e=new ks({key:kAe,isInputRules:!0,state:{init(){return null},apply(t,r){const s=t.getMeta(this);return s||(t.selectionSet||t.docChanged?null:r)}},props:{handleTextInput(t,r,s,i){return hN(t,r,s,i,n,e)},handleDOMEvents:{compositionend:t=>(setTimeout(()=>{const{$cursor:r}=t.state.selection;r&&hN(t,r.pos,r.pos,"",n,e)}),!1)},handleKeyDown(t,r){if(r.key!=="Enter")return!1;const{$cursor:s}=t.state.selection;return s?hN(t,s.pos,s.pos,` +`,n,e):!1}}});return e}function s3(n,e,t={}){return new qo(n,(r,s,i,o)=>{var a,l,c,u;const{tr:d}=r,f=s.length;let p=s[f-1],m=s[0],y=[],w=o;const k={group:p,fullMatch:m,start:i,end:o},x=(a=t.updateCaptured)==null?void 0:a.call(t,k);if(Object.assign(k,x),{group:p,fullMatch:m,start:i,end:o}=k,m===null||(p==null?void 0:p.trim())==="")return null;if(p){const S=m.search(/\S/),_=i+m.indexOf(p),A=_+p.length;y=(l=d.storedMarks)!=null?l:[],A<o&&d.delete(A,o),_>i&&d.delete(i+S,_),w=i+S+p.length;const T=(c=t.getAttr)==null?void 0:c.call(t,s);d.addMark(i,w,e.create(T)),d.setStoredMarks(y),(u=t.beforeDispatch)==null||u.call(t,{match:s,start:i,end:o,tr:d})}return d})}var SAe=Object.defineProperty,EAe=Object.defineProperties,_Ae=Object.getOwnPropertyDescriptors,QX=Object.getOwnPropertySymbols,TAe=Object.prototype.hasOwnProperty,AAe=Object.prototype.propertyIsEnumerable,eJ=(n,e,t)=>e in n?SAe(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,NAe=(n,e)=>{for(var t in e||(e={}))TAe.call(e,t)&&eJ(n,t,e[t]);if(QX)for(var t of QX(e))AAe.call(e,t)&&eJ(n,t,e[t]);return n},MAe=(n,e)=>EAe(n,_Ae(e));function tJ(n=0,e=0,t=0){return Math.min(Math.max(n,e),t)}function nJ(n,e,t){const s=n.state.doc.content.size,i=tJ(e,0,s),o=tJ(t,0,s),a=n.coordsAtPos(i),l=n.coordsAtPos(o,-1),c=Math.min(a.top,l.top),u=Math.max(a.bottom,l.bottom),d=Math.min(a.left,l.left),f=Math.max(a.right,l.right),p=f-d,m=u-c,k={top:c,bottom:u,left:d,right:f,width:p,height:m,x:d,y:c};return MAe(NAe({},k),{toJSON:()=>k})}function rJ(n){return Object.assign(Object.create(n),n).setTime(Date.now())}function OAe(n,e){return Array.isArray(n)&&n.includes(e.type)||e.type===n}function PAe(n){if(n.content.childCount===1){const e=n.content.firstChild;if((e==null?void 0:e.type.name)==="text"&&e.marks.length===0)return e;if((e==null?void 0:e.type.name)==="paragraph"&&e.childCount===1){const t=e.firstChild;if((t==null?void 0:t.type.name)==="text"&&t.marks.length===0)return t}}return!1}function fN(n){return e=>{for(let t=e.depth;t>0;t-=1){const r=e.node(t);if(n(r)){const s=e.before(t),i=e.after(t);return{from:s,to:i,node:r}}}}}function IAe(n,e){return fN(t=>t.type===e)(n)}function DAe(n,e){const t=e.nodes[n];if(!t)throw SCe("node",n);return t}function sJ(n){return e=>{for(let t=e.depth;t>0;t--){const r=e.node(t);if(n(r))return{pos:t>0?e.before(t):0,start:e.start(t),depth:t,node:r}}}}function RAe(n){return e=>sJ(n)(e.$from)}function $Ae(n,e){if(!(n instanceof Ft))return;const{node:t,$from:r}=n;if(OAe(e,t))return{node:t,pos:r.pos,start:r.start(r.depth),depth:r.depth}}const iJ=(n,e)=>{const{selection:t,doc:r}=n;if(t instanceof Ft)return{hasNode:t.node.type===e,pos:t.from,target:t.node};const{from:s,to:i}=t;let o=!1,a=-1,l=null;return r.nodesBetween(s,i,(c,u)=>l?!1:c.type===e?(o=!0,a=u,l=c,!1):!0),{hasNode:o,pos:a,target:l}};for(var Sh={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:"'"},J7={48:")",49:"!",50:"@",51:"#",52:"$",53:"%",54:"^",55:"&",56:"*",57:"(",59:":",61:"+",173:"_",186:":",187:"+",188:"<",189:"_",190:">",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},LAe=typeof navigator<"u"&&/Mac/.test(navigator.platform),FAe=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),si=0;si<10;si++)Sh[48+si]=Sh[96+si]=String(si);for(var si=1;si<=24;si++)Sh[si+111]="F"+si;for(var si=65;si<=90;si++)Sh[si]=String.fromCharCode(si+32),J7[si]=String.fromCharCode(si);for(var pN in Sh)J7.hasOwnProperty(pN)||(J7[pN]=Sh[pN]);function jAe(n){var e=LAe&&n.metaKey&&n.shiftKey&&!n.ctrlKey&&!n.altKey||FAe&&n.shiftKey&&n.key&&n.key.length==1||n.key=="Unidentified",t=!e&&n.key||(n.shiftKey?J7:Sh)[n.keyCode]||n.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}const BAe=typeof navigator<"u"&&/Mac|iP(hone|[oa]d)/.test(navigator.platform),VAe=typeof navigator<"u"&&/Win/.test(navigator.platform);function zAe(n){let e=n.split(/-(?!$)/),t=e[e.length-1];t=="Space"&&(t=" ");let r,s,i,o;for(let a=0;a<e.length-1;a++){let l=e[a];if(/^(cmd|meta|m)$/i.test(l))o=!0;else if(/^a(lt)?$/i.test(l))r=!0;else if(/^(c|ctrl|control)$/i.test(l))s=!0;else if(/^s(hift)?$/i.test(l))i=!0;else if(/^mod$/i.test(l))BAe?o=!0:s=!0;else throw new Error("Unrecognized modifier name: "+l)}return r&&(t="Alt-"+t),s&&(t="Ctrl-"+t),o&&(t="Meta-"+t),i&&(t="Shift-"+t),t}function HAe(n){let e=Object.create(null);for(let t in n)e[zAe(t)]=n[t];return e}function mN(n,e,t=!0){return e.altKey&&(n="Alt-"+n),e.ctrlKey&&(n="Ctrl-"+n),e.metaKey&&(n="Meta-"+n),t&&e.shiftKey&&(n="Shift-"+n),n}function qAe(n){return new ks({props:{handleKeyDown:oJ(n)}})}function oJ(n){let e=HAe(n);return function(t,r){let s=jAe(r),i,o=e[mN(s,r)];if(o&&o(t.state,t.dispatch,t))return!0;if(s.length==1&&s!=" "){if(r.shiftKey){let a=e[mN(s,r,!1)];if(a&&a(t.state,t.dispatch,t))return!0}if((r.altKey||r.metaKey||r.ctrlKey)&&!(VAe&&r.ctrlKey&&r.altKey)&&(i=Sh[r.keyCode])&&i!=s){let a=e[mN(i,r)];if(a&&a(t.state,t.dispatch,t))return!0}}return!1}}const ii=function(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e},p1=function(n){let e=n.assignedSlot||n.parentNode;return e&&e.nodeType==11?e.host:e};let gN=null;const Iu=function(n,e,t){let r=gN||(gN=document.createRange());return r.setEnd(n,t??n.nodeValue.length),r.setStart(n,e||0),r},UAe=function(){gN=null},o0=function(n,e,t,r){return t&&(aJ(n,e,t,r,-1)||aJ(n,e,t,r,1))},WAe=/^(img|br|input|textarea|hr)$/i;function aJ(n,e,t,r,s){for(var i;;){if(n==t&&e==r)return!0;if(e==(s<0?0:ka(n))){let o=n.parentNode;if(!o||o.nodeType!=1||i3(n)||WAe.test(n.nodeName)||n.contentEditable=="false")return!1;e=ii(n)+(s<0?0:1),n=o}else if(n.nodeType==1){let o=n.childNodes[e+(s<0?-1:0)];if(o.nodeType==1&&o.contentEditable=="false")if(!((i=o.pmViewDesc)===null||i===void 0)&&i.ignoreForSelection)e+=s;else return!1;else n=o,e=s<0?ka(n):0}else return!1}}function ka(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function GAe(n,e){for(;;){if(n.nodeType==3&&e)return n;if(n.nodeType==1&&e>0){if(n.contentEditable=="false")return null;n=n.childNodes[e-1],e=ka(n)}else if(n.parentNode&&!i3(n))e=ii(n),n=n.parentNode;else return null}}function KAe(n,e){for(;;){if(n.nodeType==3&&e<n.nodeValue.length)return n;if(n.nodeType==1&&e<n.childNodes.length){if(n.contentEditable=="false")return null;n=n.childNodes[e],e=0}else if(n.parentNode&&!i3(n))e=ii(n)+1,n=n.parentNode;else return null}}function YAe(n,e,t){for(let r=e==0,s=e==ka(n);r||s;){if(n==t)return!0;let i=ii(n);if(n=n.parentNode,!n)return!1;r=r&&i==0,s=s&&i==ka(n)}}function i3(n){let e;for(let t=n;t&&!(e=t.pmViewDesc);t=t.parentNode);return e&&e.node&&e.node.isBlock&&(e.dom==n||e.contentDOM==n)}const Q7=function(n){return n.focusNode&&o0(n.focusNode,n.focusOffset,n.anchorNode,n.anchorOffset)};function a0(n,e){let t=document.createEvent("Event");return t.initEvent("keydown",!0,!0),t.keyCode=n,t.key=t.code=e,t}function ZAe(n){let e=n.activeElement;for(;e&&e.shadowRoot;)e=e.shadowRoot.activeElement;return e}function XAe(n,e,t){if(n.caretPositionFromPoint)try{let r=n.caretPositionFromPoint(e,t);if(r)return{node:r.offsetNode,offset:Math.min(ka(r.offsetNode),r.offset)}}catch{}if(n.caretRangeFromPoint){let r=n.caretRangeFromPoint(e,t);if(r)return{node:r.startContainer,offset:Math.min(ka(r.startContainer),r.startOffset)}}}const pc=typeof navigator<"u"?navigator:null,lJ=typeof document<"u"?document:null,Eh=pc&&pc.userAgent||"",yN=/Edge\/(\d+)/.exec(Eh),cJ=/MSIE \d/.exec(Eh),vN=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(Eh),ao=!!(cJ||vN||yN),_h=cJ?document.documentMode:vN?+vN[1]:yN?+yN[1]:0,Ca=!ao&&/gecko\/(\d+)/i.test(Eh);Ca&&+(/Firefox\/(\d+)/.exec(Eh)||[0,0])[1];const bN=!ao&&/Chrome\/(\d+)/.exec(Eh),Us=!!bN,uJ=bN?+bN[1]:0,oi=!ao&&!!pc&&/Apple Computer/.test(pc.vendor),m1=oi&&(/Mobile\/\w+/.test(Eh)||!!pc&&pc.maxTouchPoints>2),Sa=m1||(pc?/Mac/.test(pc.platform):!1),dJ=pc?/Win/.test(pc.platform):!1,Du=/Android \d/.test(Eh),o3=!!lJ&&"webkitFontSmoothing"in lJ.documentElement.style,JAe=o3?+(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent)||[0,0])[1]:0;function QAe(n){let e=n.defaultView&&n.defaultView.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.documentElement.clientWidth,top:0,bottom:n.documentElement.clientHeight}}function Ru(n,e){return typeof n=="number"?n:n[e]}function eNe(n){let e=n.getBoundingClientRect(),t=e.width/n.offsetWidth||1,r=e.height/n.offsetHeight||1;return{left:e.left,right:e.left+n.clientWidth*t,top:e.top,bottom:e.top+n.clientHeight*r}}function hJ(n,e,t){let r=n.someProp("scrollThreshold")||0,s=n.someProp("scrollMargin")||5,i=n.dom.ownerDocument;for(let o=t||n.dom;o;){if(o.nodeType!=1){o=p1(o);continue}let a=o,l=a==i.body,c=l?QAe(i):eNe(a),u=0,d=0;if(e.top<c.top+Ru(r,"top")?d=-(c.top-e.top+Ru(s,"top")):e.bottom>c.bottom-Ru(r,"bottom")&&(d=e.bottom-e.top>c.bottom-c.top?e.top+Ru(s,"top")-c.top:e.bottom-c.bottom+Ru(s,"bottom")),e.left<c.left+Ru(r,"left")?u=-(c.left-e.left+Ru(s,"left")):e.right>c.right-Ru(r,"right")&&(u=e.right-c.right+Ru(s,"right")),u||d)if(l)i.defaultView.scrollBy(u,d);else{let p=a.scrollLeft,m=a.scrollTop;d&&(a.scrollTop+=d),u&&(a.scrollLeft+=u);let y=a.scrollLeft-p,w=a.scrollTop-m;e={left:e.left-y,top:e.top-w,right:e.right-y,bottom:e.bottom-w}}let f=l?"fixed":getComputedStyle(o).position;if(/^(fixed|sticky)$/.test(f))break;o=f=="absolute"?o.offsetParent:p1(o)}}function tNe(n){let e=n.dom.getBoundingClientRect(),t=Math.max(0,e.top),r,s;for(let i=(e.left+e.right)/2,o=t+1;o<Math.min(innerHeight,e.bottom);o+=5){let a=n.root.elementFromPoint(i,o);if(!a||a==n.dom||!n.dom.contains(a))continue;let l=a.getBoundingClientRect();if(l.top>=t-20){r=a,s=l.top;break}}return{refDOM:r,refTop:s,stack:fJ(n.dom)}}function fJ(n){let e=[],t=n.ownerDocument;for(let r=n;r&&(e.push({dom:r,top:r.scrollTop,left:r.scrollLeft}),n!=t);r=p1(r));return e}function nNe({refDOM:n,refTop:e,stack:t}){let r=n?n.getBoundingClientRect().top:0;pJ(t,r==0?0:r-e)}function pJ(n,e){for(let t=0;t<n.length;t++){let{dom:r,top:s,left:i}=n[t];r.scrollTop!=s+e&&(r.scrollTop=s+e),r.scrollLeft!=i&&(r.scrollLeft=i)}}let g1=null;function rNe(n){if(n.setActive)return n.setActive();if(g1)return n.focus(g1);let e=fJ(n);n.focus(g1==null?{get preventScroll(){return g1={preventScroll:!0},!0}}:void 0),g1||(g1=!1,pJ(e,0))}function mJ(n,e){let t,r=2e8,s,i=0,o=e.top,a=e.top,l,c;for(let u=n.firstChild,d=0;u;u=u.nextSibling,d++){let f;if(u.nodeType==1)f=u.getClientRects();else if(u.nodeType==3)f=Iu(u).getClientRects();else continue;for(let p=0;p<f.length;p++){let m=f[p];if(m.top<=o&&m.bottom>=a){o=Math.max(m.bottom,o),a=Math.min(m.top,a);let y=m.left>e.left?m.left-e.left:m.right<e.left?e.left-m.right:0;if(y<r){t=u,r=y,s=y&&t.nodeType==3?{left:m.right<e.left?m.right:m.left,top:e.top}:e,u.nodeType==1&&y&&(i=d+(e.left>=(m.left+m.right)/2?1:0));continue}}else m.top>e.top&&!l&&m.left<=e.left&&m.right>=e.left&&(l=u,c={left:Math.max(m.left,Math.min(m.right,e.left)),top:m.top});!t&&(e.left>=m.right&&e.top>=m.top||e.left>=m.left&&e.top>=m.bottom)&&(i=d+1)}}return!t&&l&&(t=l,s=c,r=0),t&&t.nodeType==3?sNe(t,s):!t||r&&t.nodeType==1?{node:n,offset:i}:mJ(t,s)}function sNe(n,e){let t=n.nodeValue.length,r=document.createRange(),s;for(let i=0;i<t;i++){r.setEnd(n,i+1),r.setStart(n,i);let o=Th(r,1);if(o.top!=o.bottom&&wN(e,o)){s={node:n,offset:i+(e.left>=(o.left+o.right)/2?1:0)};break}}return r.detach(),s||{node:n,offset:0}}function wN(n,e){return n.left>=e.left-1&&n.left<=e.right+1&&n.top>=e.top-1&&n.top<=e.bottom+1}function iNe(n,e){let t=n.parentNode;return t&&/^li$/i.test(t.nodeName)&&e.left<n.getBoundingClientRect().left?t:n}function oNe(n,e,t){let{node:r,offset:s}=mJ(e,t),i=-1;if(r.nodeType==1&&!r.firstChild){let o=r.getBoundingClientRect();i=o.left!=o.right&&t.left>(o.left+o.right)/2?1:-1}return n.docView.posFromDOM(r,s,i)}function aNe(n,e,t,r){let s=-1;for(let i=e,o=!1;i!=n.dom;){let a=n.docView.nearestDesc(i,!0),l;if(!a)return null;if(a.dom.nodeType==1&&(a.node.isBlock&&a.parent||!a.contentDOM)&&((l=a.dom.getBoundingClientRect()).width||l.height)&&(a.node.isBlock&&a.parent&&!/^T(R|BODY|HEAD|FOOT)$/.test(a.dom.nodeName)&&(!o&&l.left>r.left||l.top>r.top?s=a.posBefore:(!o&&l.right<r.left||l.bottom<r.top)&&(s=a.posAfter),o=!0),!a.contentDOM&&s<0&&!a.node.isText))return(a.node.isBlock?r.top<(l.top+l.bottom)/2:r.left<(l.left+l.right)/2)?a.posBefore:a.posAfter;i=a.dom.parentNode}return s>-1?s:n.docView.posFromDOM(e,t,-1)}function gJ(n,e,t){let r=n.childNodes.length;if(r&&t.top<t.bottom)for(let s=Math.max(0,Math.min(r-1,Math.floor(r*(e.top-t.top)/(t.bottom-t.top))-2)),i=s;;){let o=n.childNodes[i];if(o.nodeType==1){let a=o.getClientRects();for(let l=0;l<a.length;l++){let c=a[l];if(wN(e,c))return gJ(o,e,c)}}if((i=(i+1)%r)==s)break}return n}function lNe(n,e){let t=n.dom.ownerDocument,r,s=0,i=XAe(t,e.left,e.top);i&&({node:r,offset:s}=i);let o=(n.root.elementFromPoint?n.root:t).elementFromPoint(e.left,e.top),a;if(!o||!n.dom.contains(o.nodeType!=1?o.parentNode:o)){let c=n.dom.getBoundingClientRect();if(!wN(e,c)||(o=gJ(n.dom,e,c),!o))return null}if(oi)for(let c=o;r&&c;c=p1(c))c.draggable&&(r=void 0);if(o=iNe(o,e),r){if(Ca&&r.nodeType==1&&(s=Math.min(s,r.childNodes.length),s<r.childNodes.length)){let u=r.childNodes[s],d;u.nodeName=="IMG"&&(d=u.getBoundingClientRect()).right<=e.left&&d.bottom>e.top&&s++}let c;o3&&s&&r.nodeType==1&&(c=r.childNodes[s-1]).nodeType==1&&c.contentEditable=="false"&&c.getBoundingClientRect().top>=e.top&&s--,r==n.dom&&s==r.childNodes.length-1&&r.lastChild.nodeType==1&&e.top>r.lastChild.getBoundingClientRect().bottom?a=n.state.doc.content.size:(s==0||r.nodeType!=1||r.childNodes[s-1].nodeName!="BR")&&(a=aNe(n,r,s,e))}a==null&&(a=oNe(n,o,e));let l=n.docView.nearestDesc(o,!0);return{pos:a,inside:l?l.posAtStart-l.border:-1}}function yJ(n){return n.top<n.bottom||n.left<n.right}function Th(n,e){let t=n.getClientRects();if(t.length){let r=t[e<0?0:t.length-1];if(yJ(r))return r}return Array.prototype.find.call(t,yJ)||n.getBoundingClientRect()}const cNe=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;function vJ(n,e,t){let{node:r,offset:s,atom:i}=n.docView.domFromPos(e,t<0?-1:1),o=o3||Ca;if(r.nodeType==3)if(o&&(cNe.test(r.nodeValue)||(t<0?!s:s==r.nodeValue.length))){let l=Th(Iu(r,s,s),t);if(Ca&&s&&/\s/.test(r.nodeValue[s-1])&&s<r.nodeValue.length){let c=Th(Iu(r,s-1,s-1),-1);if(c.top==l.top){let u=Th(Iu(r,s,s+1),-1);if(u.top!=l.top)return a3(u,u.left<c.left)}}return l}else{let l=s,c=s,u=t<0?1:-1;return t<0&&!s?(c++,u=-1):t>=0&&s==r.nodeValue.length?(l--,u=1):t<0?l--:c++,a3(Th(Iu(r,l,c),u),u<0)}if(!n.state.doc.resolve(e-(i||0)).parent.inlineContent){if(i==null&&s&&(t<0||s==ka(r))){let l=r.childNodes[s-1];if(l.nodeType==1)return xN(l.getBoundingClientRect(),!1)}if(i==null&&s<ka(r)){let l=r.childNodes[s];if(l.nodeType==1)return xN(l.getBoundingClientRect(),!0)}return xN(r.getBoundingClientRect(),t>=0)}if(i==null&&s&&(t<0||s==ka(r))){let l=r.childNodes[s-1],c=l.nodeType==3?Iu(l,ka(l)-(o?0:1)):l.nodeType==1&&(l.nodeName!="BR"||!l.nextSibling)?l:null;if(c)return a3(Th(c,1),!1)}if(i==null&&s<ka(r)){let l=r.childNodes[s];for(;l.pmViewDesc&&l.pmViewDesc.ignoreForCoords;)l=l.nextSibling;let c=l?l.nodeType==3?Iu(l,0,o?0:1):l.nodeType==1?l:null:null;if(c)return a3(Th(c,-1),!0)}return a3(Th(r.nodeType==3?Iu(r):r,-t),t>=0)}function a3(n,e){if(n.width==0)return n;let t=e?n.left:n.right;return{top:n.top,bottom:n.bottom,left:t,right:t}}function xN(n,e){if(n.height==0)return n;let t=e?n.top:n.bottom;return{top:t,bottom:t,left:n.left,right:n.right}}function bJ(n,e,t){let r=n.state,s=n.root.activeElement;r!=e&&n.updateState(e),s!=n.dom&&n.focus();try{return t()}finally{r!=e&&n.updateState(r),s!=n.dom&&s&&s.focus()}}function uNe(n,e,t){let r=e.selection,s=t=="up"?r.$from:r.$to;return bJ(n,e,()=>{let{node:i}=n.docView.domFromPos(s.pos,t=="up"?-1:1);for(;;){let a=n.docView.nearestDesc(i,!0);if(!a)break;if(a.node.isBlock){i=a.contentDOM||a.dom;break}i=a.dom.parentNode}let o=vJ(n,s.pos,1);for(let a=i.firstChild;a;a=a.nextSibling){let l;if(a.nodeType==1)l=a.getClientRects();else if(a.nodeType==3)l=Iu(a,0,a.nodeValue.length).getClientRects();else continue;for(let c=0;c<l.length;c++){let u=l[c];if(u.bottom>u.top+1&&(t=="up"?o.top-u.top>(u.bottom-o.top)*2:u.bottom-o.bottom>(o.bottom-u.top)*2))return!1}}return!0})}const dNe=/[\u0590-\u08ac]/;function hNe(n,e,t){let{$head:r}=e.selection;if(!r.parent.isTextblock)return!1;let s=r.parentOffset,i=!s,o=s==r.parent.content.size,a=n.domSelection();return a?!dNe.test(r.parent.textContent)||!a.modify?t=="left"||t=="backward"?i:o:bJ(n,e,()=>{let{focusNode:l,focusOffset:c,anchorNode:u,anchorOffset:d}=n.domSelectionRange(),f=a.caretBidiLevel;a.modify("move",t,"character");let p=r.depth?n.docView.domAfterPos(r.before()):n.dom,{focusNode:m,focusOffset:y}=n.domSelectionRange(),w=m&&!p.contains(m.nodeType==1?m:m.parentNode)||l==m&&c==y;try{a.collapse(u,d),l&&(l!=u||c!=d)&&a.extend&&a.extend(l,c)}catch{}return f!=null&&(a.caretBidiLevel=f),w}):r.pos==r.start()||r.pos==r.end()}let wJ=null,xJ=null,kJ=!1;function fNe(n,e,t){return wJ==e&&xJ==t?kJ:(wJ=e,xJ=t,kJ=t=="up"||t=="down"?uNe(n,e,t):hNe(n,e,t))}const Ea=0,CJ=1,l0=2,mc=3;class l3{constructor(e,t,r,s){this.parent=e,this.children=t,this.dom=r,this.contentDOM=s,this.dirty=Ea,r.pmViewDesc=this}matchesWidget(e){return!1}matchesMark(e){return!1}matchesNode(e,t,r){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,r=this.posAtStart;;t++){let s=this.children[t];if(s==e)return r;r+=s.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,r){if(this.contentDOM&&this.contentDOM.contains(e.nodeType==1?e:e.parentNode))if(r<0){let i,o;if(e==this.contentDOM)i=e.childNodes[t-1];else{for(;e.parentNode!=this.contentDOM;)e=e.parentNode;i=e.previousSibling}for(;i&&!((o=i.pmViewDesc)&&o.parent==this);)i=i.previousSibling;return i?this.posBeforeChild(o)+o.size:this.posAtStart}else{let i,o;if(e==this.contentDOM)i=e.childNodes[t];else{for(;e.parentNode!=this.contentDOM;)e=e.parentNode;i=e.nextSibling}for(;i&&!((o=i.pmViewDesc)&&o.parent==this);)i=i.nextSibling;return i?this.posBeforeChild(o):this.posAtEnd}let s;if(e==this.dom&&this.contentDOM)s=t>ii(this.contentDOM);else if(this.contentDOM&&this.contentDOM!=this.dom&&this.dom.contains(this.contentDOM))s=e.compareDocumentPosition(this.contentDOM)&2;else if(this.dom.firstChild){if(t==0)for(let i=e;;i=i.parentNode){if(i==this.dom){s=!1;break}if(i.previousSibling)break}if(s==null&&t==e.childNodes.length)for(let i=e;;i=i.parentNode){if(i==this.dom){s=!0;break}if(i.nextSibling)break}}return s??r>0?this.posAtEnd:this.posAtStart}nearestDesc(e,t=!1){for(let r=!0,s=e;s;s=s.parentNode){let i=this.getDesc(s),o;if(i&&(!t||i.node))if(r&&(o=i.nodeDOM)&&!(o.nodeType==1?o.contains(e.nodeType==1?e:e.parentNode):o==e))r=!1;else return i}}getDesc(e){let t=e.pmViewDesc;for(let r=t;r;r=r.parent)if(r==this)return t}posFromDOM(e,t,r){for(let s=e;s;s=s.parentNode){let i=this.getDesc(s);if(i)return i.localPosFromDOM(e,t,r)}return-1}descAt(e){for(let t=0,r=0;t<this.children.length;t++){let s=this.children[t],i=r+s.size;if(r==e&&i!=r){for(;!s.border&&s.children.length;)for(let o=0;o<s.children.length;o++){let a=s.children[o];if(a.size){s=a;break}}return s}if(e<i)return s.descAt(e-r-s.border);r=i}}domFromPos(e,t){if(!this.contentDOM)return{node:this.dom,offset:0,atom:e+1};let r=0,s=0;for(let i=0;r<this.children.length;r++){let o=this.children[r],a=i+o.size;if(a>e||o instanceof _J){s=e-i;break}i=a}if(s)return this.children[r].domFromPos(s-this.children[r].border,t);for(let i;r&&!(i=this.children[r-1]).size&&i instanceof SJ&&i.side>=0;r--);if(t<=0){let i,o=!0;for(;i=r?this.children[r-1]:null,!(!i||i.dom.parentNode==this.contentDOM);r--,o=!1);return i&&t&&o&&!i.border&&!i.domAtom?i.domFromPos(i.size,t):{node:this.contentDOM,offset:i?ii(i.dom)+1:0}}else{let i,o=!0;for(;i=r<this.children.length?this.children[r]:null,!(!i||i.dom.parentNode==this.contentDOM);r++,o=!1);return i&&o&&!i.border&&!i.domAtom?i.domFromPos(0,t):{node:this.contentDOM,offset:i?ii(i.dom):this.contentDOM.childNodes.length}}}parseRange(e,t,r=0){if(this.children.length==0)return{node:this.contentDOM,from:e,to:t,fromOffset:0,toOffset:this.contentDOM.childNodes.length};let s=-1,i=-1;for(let o=r,a=0;;a++){let l=this.children[a],c=o+l.size;if(s==-1&&e<=c){let u=o+l.border;if(e>=u&&t<=c-l.border&&l.node&&l.contentDOM&&this.contentDOM.contains(l.contentDOM))return l.parseRange(e,t,u);e=o;for(let d=a;d>0;d--){let f=this.children[d-1];if(f.size&&f.dom.parentNode==this.contentDOM&&!f.emptyChildAt(1)){s=ii(f.dom)+1;break}e-=f.size}s==-1&&(s=0)}if(s>-1&&(c>t||a==this.children.length-1)){t=c;for(let u=a+1;u<this.children.length;u++){let d=this.children[u];if(d.size&&d.dom.parentNode==this.contentDOM&&!d.emptyChildAt(-1)){i=ii(d.dom);break}t+=d.size}i==-1&&(i=this.contentDOM.childNodes.length);break}o=c}return{node:this.contentDOM,from:e,to:t,fromOffset:s,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:r}=this.domFromPos(e,0);if(t.nodeType!=1||r==t.childNodes.length)throw new RangeError("No node after pos "+e);return t.childNodes[r]}setSelection(e,t,r,s=!1){let i=Math.min(e,t),o=Math.max(e,t);for(let p=0,m=0;p<this.children.length;p++){let y=this.children[p],w=m+y.size;if(i>m&&o<w)return y.setSelection(e-m-y.border,t-m-y.border,r,s);m=w}let a=this.domFromPos(e,e?-1:1),l=t==e?a:this.domFromPos(t,t?-1:1),c=r.root.getSelection(),u=r.domSelectionRange(),d=!1;if((Ca||oi)&&e==t){let{node:p,offset:m}=a;if(p.nodeType==3){if(d=!!(m&&p.nodeValue[m-1]==` +`),d&&m==p.nodeValue.length)for(let y=p,w;y;y=y.parentNode){if(w=y.nextSibling){w.nodeName=="BR"&&(a=l={node:w.parentNode,offset:ii(w)+1});break}let k=y.pmViewDesc;if(k&&k.node&&k.node.isBlock)break}}else{let y=p.childNodes[m-1];d=y&&(y.nodeName=="BR"||y.contentEditable=="false")}}if(Ca&&u.focusNode&&u.focusNode!=l.node&&u.focusNode.nodeType==1){let p=u.focusNode.childNodes[u.focusOffset];p&&p.contentEditable=="false"&&(s=!0)}if(!(s||d&&oi)&&o0(a.node,a.offset,u.anchorNode,u.anchorOffset)&&o0(l.node,l.offset,u.focusNode,u.focusOffset))return;let f=!1;if((c.extend||e==t)&&!(d&&Ca)){c.collapse(a.node,a.offset);try{e!=t&&c.extend(l.node,l.offset),f=!0}catch{}}if(!f){if(e>t){let m=a;a=l,l=m}let p=document.createRange();p.setEnd(l.node,l.offset),p.setStart(a.node,a.offset),c.removeAllRanges(),c.addRange(p)}}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 r=0,s=0;s<this.children.length;s++){let i=this.children[s],o=r+i.size;if(r==o?e<=o&&t>=r:e<o&&t>r){let a=r+i.border,l=o-i.border;if(e>=a&&t<=l){this.dirty=e==r||t==o?l0:CJ,e==a&&t==l&&(i.contentLost||i.dom.parentNode!=this.contentDOM)?i.dirty=mc:i.markDirty(e-a,t-a);return}else i.dirty=i.dom==i.contentDOM&&i.dom.parentNode==this.contentDOM&&!i.children.length?l0:mc}r=o}this.dirty=l0}markParentsDirty(){let e=1;for(let t=this.parent;t;t=t.parent,e++){let r=e==1?l0:CJ;t.dirty<r&&(t.dirty=r)}}get domAtom(){return!1}get ignoreForCoords(){return!1}get ignoreForSelection(){return!1}isText(e){return!1}}class SJ extends l3{constructor(e,t,r,s){let i,o=t.type.toDOM;if(typeof o=="function"&&(o=o(r,()=>{if(!i)return s;if(i.parent)return i.parent.posBeforeChild(i)})),!t.type.spec.raw){if(o.nodeType!=1){let a=document.createElement("span");a.appendChild(o),o=a}o.contentEditable="false",o.classList.add("ProseMirror-widget")}super(e,[],o,null),this.widget=t,this.widget=t,i=this}matchesWidget(e){return this.dirty==Ea&&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}}class pNe extends l3{constructor(e,t,r,s){super(e,[],t,null),this.textDOM=r,this.text=s}get size(){return this.text.length}localPosFromDOM(e,t){return e!=this.textDOM?this.posAtStart+(t?this.size:0):this.posAtStart+t}domFromPos(e){return{node:this.textDOM,offset:e}}ignoreMutation(e){return e.type==="characterData"&&e.target.nodeValue==e.oldValue}}class c0 extends l3{constructor(e,t,r,s,i){super(e,[],r,s),this.mark=t,this.spec=i}static create(e,t,r,s){let i=s.nodeViews[t.type.name],o=i&&i(t,s,r);return(!o||!o.dom)&&(o=e0.renderSpec(document,t.type.spec.toDOM(t,r),null,t.attrs)),new c0(e,t,o.dom,o.contentDOM||o.dom,o)}parseRule(){return this.dirty&mc||this.mark.type.spec.reparseInView?null:{mark:this.mark.type.name,attrs:this.mark.attrs,contentElement:this.contentDOM}}matchesMark(e){return this.dirty!=mc&&this.mark.eq(e)}markDirty(e,t){if(super.markDirty(e,t),this.dirty!=Ea){let r=this.parent;for(;!r.node;)r=r.parent;r.dirty<this.dirty&&(r.dirty=this.dirty),this.dirty=Ea}}slice(e,t,r){let s=c0.create(this.parent,this.mark,!0,r),i=this.children,o=this.size;t<o&&(i=CN(i,t,o,r)),e>0&&(i=CN(i,0,e,r));for(let a=0;a<i.length;a++)i[a].parent=s;return s.children=i,s}ignoreMutation(e){return this.spec.ignoreMutation?this.spec.ignoreMutation(e):super.ignoreMutation(e)}destroy(){this.spec.destroy&&this.spec.destroy(),super.destroy()}}class Ah extends l3{constructor(e,t,r,s,i,o,a,l,c){super(e,[],i,o),this.node=t,this.outerDeco=r,this.innerDeco=s,this.nodeDOM=a}static create(e,t,r,s,i,o){let a=i.nodeViews[t.type.name],l,c=a&&a(t,i,()=>{if(!l)return o;if(l.parent)return l.parent.posBeforeChild(l)},r,s),u=c&&c.dom,d=c&&c.contentDOM;if(t.isText){if(!u)u=document.createTextNode(t.text);else if(u.nodeType!=3)throw new RangeError("Text must be rendered as a DOM text node")}else u||({dom:u,contentDOM:d}=e0.renderSpec(document,t.type.spec.toDOM(t),null,t.attrs));!d&&!t.isText&&u.nodeName!="BR"&&(u.hasAttribute("contenteditable")||(u.contentEditable="false"),t.type.spec.draggable&&(u.draggable=!0));let f=u;return u=NJ(u,r,t),c?l=new mNe(e,t,r,s,u,d||null,f,c,i,o+1):t.isText?new ek(e,t,r,s,u,f,i):new Ah(e,t,r,s,u,d||null,f,i,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 r=this.children[t];if(this.dom.contains(r.dom.parentNode)){e.contentElement=r.dom.parentNode;break}}e.contentElement||(e.getContent=()=>$e.empty)}return e}matchesNode(e,t,r){return this.dirty==Ea&&e.eq(this.node)&&tk(t,this.outerDeco)&&r.eq(this.innerDeco)}get size(){return this.node.nodeSize}get border(){return this.node.isLeaf?0:1}updateChildren(e,t){let r=this.node.inlineContent,s=t,i=e.composing?this.localCompositionInfo(e,t):null,o=i&&i.pos>-1?i:null,a=i&&i.pos<0,l=new yNe(this,o&&o.node,e);wNe(this.node,this.innerDeco,(c,u,d)=>{c.spec.marks?l.syncToMarks(c.spec.marks,r,e,u):c.type.side>=0&&!d&&l.syncToMarks(u==this.node.childCount?Ln.none:this.node.child(u).marks,r,e,u),l.placeWidget(c,e,s)},(c,u,d,f)=>{l.syncToMarks(c.marks,r,e,f);let p;l.findNodeMatch(c,u,d,f)||a&&e.state.selection.from>s&&e.state.selection.to<s+c.nodeSize&&(p=l.findIndexWithChild(i.node))>-1&&l.updateNodeAt(c,u,d,p,e)||l.updateNextNode(c,u,d,e,f,s)||l.addNode(c,u,d,e,s),s+=c.nodeSize}),l.syncToMarks([],r,e,0),this.node.isTextblock&&l.addTextblockHacks(),l.destroyRest(),(l.changed||this.dirty==l0)&&(o&&this.protectLocalComposition(e,o),TJ(this.contentDOM,this.children,e),m1&&xNe(this.dom))}localCompositionInfo(e,t){let{from:r,to:s}=e.state.selection;if(!(e.state.selection instanceof It)||r<t||s>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 o=i.nodeValue,a=kNe(this.node.content,o,r-t,s-t);return a<0?null:{node:i,pos:a,text:o}}else return{node:i,pos:-1,text:""}}protectLocalComposition(e,{node:t,pos:r,text:s}){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&&(i.pmViewDesc=void 0)}let o=new pNe(this,i,t,s);e.input.compositionNodes.push(o),this.children=CN(this.children,r,r+s.length,e,o)}update(e,t,r,s){return this.dirty==mc||!e.sameMarkup(this.node)?!1:(this.updateInner(e,t,r,s),!0)}updateInner(e,t,r,s){this.updateOuterDeco(t),this.node=e,this.innerDeco=r,this.contentDOM&&this.updateChildren(s,this.posAtStart),this.dirty=Ea}updateOuterDeco(e){if(tk(e,this.outerDeco))return;let t=this.nodeDOM.nodeType!=1,r=this.dom;this.dom=AJ(this.dom,this.nodeDOM,kN(this.outerDeco,this.node,t),kN(e,this.node,t)),this.dom!=r&&(r.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 EJ(n,e,t,r,s){NJ(r,e,n);let i=new Ah(void 0,n,e,t,r,r,r,s,0);return i.contentDOM&&i.updateChildren(s,0),i}class ek extends Ah{constructor(e,t,r,s,i,o,a){super(e,t,r,s,i,null,o,a,0)}parseRule(){let e=this.nodeDOM.parentNode;for(;e&&e!=this.dom&&!e.pmIsDeco;)e=e.parentNode;return{skip:e||!0}}update(e,t,r,s){return this.dirty==mc||this.dirty!=Ea&&!this.inParent()||!e.sameMarkup(this.node)?!1:(this.updateOuterDeco(t),(this.dirty!=Ea||e.text!=this.node.text)&&e.text!=this.nodeDOM.nodeValue&&(this.nodeDOM.nodeValue=e.text,s.trackWrites==this.nodeDOM&&(s.trackWrites=null)),this.node=e,this.dirty=Ea,!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,r){return e==this.nodeDOM?this.posAtStart+Math.min(t,this.node.text.length):super.localPosFromDOM(e,t,r)}ignoreMutation(e){return e.type!="characterData"&&e.type!="selection"}slice(e,t,r){let s=this.node.cut(e,t),i=document.createTextNode(s.text);return new ek(this.parent,s,this.outerDeco,this.innerDeco,i,i,r)}markDirty(e,t){super.markDirty(e,t),this.dom!=this.nodeDOM&&(e==0||t==this.nodeDOM.nodeValue.length)&&(this.dirty=mc)}get domAtom(){return!1}isText(e){return this.node.text==e}}class _J extends l3{parseRule(){return{ignore:!0}}matchesHack(e){return this.dirty==Ea&&this.dom.nodeName==e}get domAtom(){return!0}get ignoreForCoords(){return this.dom.nodeName=="IMG"}}class mNe extends Ah{constructor(e,t,r,s,i,o,a,l,c,u){super(e,t,r,s,i,o,a,c,u),this.spec=l}update(e,t,r,s){if(this.dirty==mc)return!1;if(this.spec.update&&(this.node.type==e.type||this.spec.multiType)){let i=this.spec.update(e,t,r);return i&&this.updateInner(e,t,r,s),i}else return!this.contentDOM&&!e.isLeaf?!1:super.update(e,t,r,s)}selectNode(){this.spec.selectNode?this.spec.selectNode():super.selectNode()}deselectNode(){this.spec.deselectNode?this.spec.deselectNode():super.deselectNode()}setSelection(e,t,r,s){this.spec.setSelection?this.spec.setSelection(e,t,r.root):super.setSelection(e,t,r,s)}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 TJ(n,e,t){let r=n.firstChild,s=!1;for(let i=0;i<e.length;i++){let o=e[i],a=o.dom;if(a.parentNode==n){for(;a!=r;)r=MJ(r),s=!0;r=r.nextSibling}else s=!0,n.insertBefore(a,r);if(o instanceof c0){let l=r?r.previousSibling:n.lastChild;TJ(o.contentDOM,o.children,t),r=l?l.nextSibling:n.firstChild}}for(;r;)r=MJ(r),s=!0;s&&t.trackWrites==n&&(t.trackWrites=null)}const c3=function(n){n&&(this.nodeName=n)};c3.prototype=Object.create(null);const u0=[new c3];function kN(n,e,t){if(n.length==0)return u0;let r=t?u0[0]:new c3,s=[r];for(let i=0;i<n.length;i++){let o=n[i].type.attrs;if(o){o.nodeName&&s.push(r=new c3(o.nodeName));for(let a in o){let l=o[a];l!=null&&(t&&s.length==1&&s.push(r=new c3(e.isInline?"span":"div")),a=="class"?r.class=(r.class?r.class+" ":"")+l:a=="style"?r.style=(r.style?r.style+";":"")+l:a!="nodeName"&&(r[a]=l))}}}return s}function AJ(n,e,t,r){if(t==u0&&r==u0)return e;let s=e;for(let i=0;i<r.length;i++){let o=r[i],a=t[i];if(i){let l;a&&a.nodeName==o.nodeName&&s!=n&&(l=s.parentNode)&&l.nodeName.toLowerCase()==o.nodeName||(l=document.createElement(o.nodeName),l.pmIsDeco=!0,l.appendChild(s),a=u0[0]),s=l}gNe(s,a||u0[0],o)}return s}function gNe(n,e,t){for(let r in e)r!="class"&&r!="style"&&r!="nodeName"&&!(r in t)&&n.removeAttribute(r);for(let r in t)r!="class"&&r!="style"&&r!="nodeName"&&t[r]!=e[r]&&n.setAttribute(r,t[r]);if(e.class!=t.class){let r=e.class?e.class.split(" ").filter(Boolean):[],s=t.class?t.class.split(" ").filter(Boolean):[];for(let i=0;i<r.length;i++)s.indexOf(r[i])==-1&&n.classList.remove(r[i]);for(let i=0;i<s.length;i++)r.indexOf(s[i])==-1&&n.classList.add(s[i]);n.classList.length==0&&n.removeAttribute("class")}if(e.style!=t.style){if(e.style){let r=/\s*([\w\-\xa1-\uffff]+)\s*:(?:"(?:\\.|[^"])*"|'(?:\\.|[^'])*'|\(.*?\)|[^;])*/g,s;for(;s=r.exec(e.style);)n.style.removeProperty(s[1])}t.style&&(n.style.cssText+=t.style)}}function NJ(n,e,t){return AJ(n,n,u0,kN(e,t,n.nodeType!=1))}function tk(n,e){if(n.length!=e.length)return!1;for(let t=0;t<n.length;t++)if(!n[t].type.eq(e[t].type))return!1;return!0}function MJ(n){let e=n.nextSibling;return n.parentNode.removeChild(n),e}class yNe{constructor(e,t,r){this.lock=t,this.view=r,this.index=0,this.stack=[],this.changed=!1,this.top=e,this.preMatch=vNe(e.node.content,e)}destroyBetween(e,t){if(e!=t){for(let r=e;r<t;r++)this.top.children[r].destroy();this.top.children.splice(e,t-e),this.changed=!0}}destroyRest(){this.destroyBetween(this.index,this.top.children.length)}syncToMarks(e,t,r,s){let i=0,o=this.stack.length>>1,a=Math.min(o,e.length);for(;i<a&&(i==o-1?this.top:this.stack[i+1<<1]).matchesMark(e[i])&&e[i].type.spec.spanning!==!1;)i++;for(;i<o;)this.destroyRest(),this.top.dirty=Ea,this.index=this.stack.pop(),this.top=this.stack.pop(),o--;for(;o<e.length;){this.stack.push(this.top,this.index+1);let l=-1,c=this.top.children.length;s<this.preMatch.index&&(c=Math.min(this.index+3,c));for(let u=this.index;u<c;u++){let d=this.top.children[u];if(d.matchesMark(e[o])&&!this.isLocked(d.dom)){l=u;break}}if(l>-1)l>this.index&&(this.changed=!0,this.destroyBetween(this.index,l)),this.top=this.top.children[this.index];else{let u=c0.create(this.top,e[o],t,r);this.top.children.splice(this.index,0,u),this.top=u,this.changed=!0}this.index=0,o++}}findNodeMatch(e,t,r,s){let i=-1,o;if(s>=this.preMatch.index&&(o=this.preMatch.matches[s-this.preMatch.index]).parent==this.top&&o.matchesNode(e,t,r))i=this.top.children.indexOf(o,this.index);else for(let a=this.index,l=Math.min(this.top.children.length,a+5);a<l;a++){let c=this.top.children[a];if(c.matchesNode(e,t,r)&&!this.preMatch.matched.has(c)){i=a;break}}return i<0?!1:(this.destroyBetween(this.index,i),this.index++,!0)}updateNodeAt(e,t,r,s,i){let o=this.top.children[s];return o.dirty==mc&&o.dom==o.contentDOM&&(o.dirty=l0),o.update(e,t,r,i)?(this.destroyBetween(this.index,s),this.index++,!0):!1}findIndexWithChild(e){for(;;){let t=e.parentNode;if(!t)return-1;if(t==this.top.contentDOM){let r=e.pmViewDesc;if(r){for(let s=this.index;s<this.top.children.length;s++)if(this.top.children[s]==r)return s}return-1}e=t}}updateNextNode(e,t,r,s,i,o){for(let a=this.index;a<this.top.children.length;a++){let l=this.top.children[a];if(l instanceof Ah){let c=this.preMatch.matched.get(l);if(c!=null&&c!=i)return!1;let u=l.dom,d,f=this.isLocked(u)&&!(e.isText&&l.node&&l.node.isText&&l.nodeDOM.nodeValue==e.text&&l.dirty!=mc&&tk(t,l.outerDeco));if(!f&&l.update(e,t,r,s))return this.destroyBetween(this.index,a),l.dom!=u&&(this.changed=!0),this.index++,!0;if(!f&&(d=this.recreateWrapper(l,e,t,r,s,o)))return this.destroyBetween(this.index,a),this.top.children[this.index]=d,d.contentDOM&&(d.dirty=l0,d.updateChildren(s,o+1),d.dirty=Ea),this.changed=!0,this.index++,!0;break}}return!1}recreateWrapper(e,t,r,s,i,o){if(e.dirty||t.isAtom||!e.children.length||!e.node.content.eq(t.content)||!tk(r,e.outerDeco)||!s.eq(e.innerDeco))return null;let a=Ah.create(this.top,t,r,s,i,o);if(a.contentDOM){a.children=e.children,e.children=[];for(let l of a.children)l.parent=a}return e.destroy(),a}addNode(e,t,r,s,i){let o=Ah.create(this.top,e,t,r,s,i);o.contentDOM&&o.updateChildren(s,i+1),this.top.children.splice(this.index++,0,o),this.changed=!0}placeWidget(e,t,r){let s=this.index<this.top.children.length?this.top.children[this.index]:null;if(s&&s.matchesWidget(e)&&(e==s.widget||!s.widget.type.toDOM.parentNode))this.index++;else{let i=new SJ(this.top,e,t,r);this.top.children.splice(this.index++,0,i),this.changed=!0}}addTextblockHacks(){let e=this.top.children[this.index-1],t=this.top;for(;e instanceof c0;)t=e,e=t.children[t.children.length-1];(!e||!(e instanceof ek)||/\n$/.test(e.node.text)||this.view.requiresGeckoHackNode&&/\s$/.test(e.node.text))&&((oi||Us)&&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 r=document.createElement(e);e=="IMG"&&(r.className="ProseMirror-separator",r.alt=""),e=="BR"&&(r.className="ProseMirror-trailingBreak");let s=new _J(this.top,[],r,null);t!=this.top?t.children.push(s):t.children.splice(this.index++,0,s),this.changed=!0}}isLocked(e){return this.lock&&(e==this.lock||e.nodeType==1&&e.contains(this.lock.parentNode))}}function vNe(n,e){let t=e,r=t.children.length,s=n.childCount,i=new Map,o=[];e:for(;s>0;){let a;for(;;)if(r){let c=t.children[r-1];if(c instanceof c0)t=c,r=c.children.length;else{a=c,r--;break}}else{if(t==e)break e;r=t.parent.children.indexOf(t),t=t.parent}let l=a.node;if(l){if(l!=n.child(s-1))break;--s,i.set(a,s),o.push(a)}}return{index:s,matched:i,matches:o.reverse()}}function bNe(n,e){return n.type.side-e.type.side}function wNe(n,e,t,r){let s=e.locals(n),i=0;if(s.length==0){for(let c=0;c<n.childCount;c++){let u=n.child(c);r(u,s,e.forChild(i,u),c),i+=u.nodeSize}return}let o=0,a=[],l=null;for(let c=0;;){let u,d;for(;o<s.length&&s[o].to==i;){let w=s[o++];w.widget&&(u?(d||(d=[u])).push(w):u=w)}if(u)if(d){d.sort(bNe);for(let w=0;w<d.length;w++)t(d[w],c,!!l)}else t(u,c,!!l);let f,p;if(l)p=-1,f=l,l=null;else if(c<n.childCount)p=c,f=n.child(c++);else break;for(let w=0;w<a.length;w++)a[w].to<=i&&a.splice(w--,1);for(;o<s.length&&s[o].from<=i&&s[o].to>i;)a.push(s[o++]);let m=i+f.nodeSize;if(f.isText){let w=m;o<s.length&&s[o].from<w&&(w=s[o].from);for(let k=0;k<a.length;k++)a[k].to<w&&(w=a[k].to);w<m&&(l=f.cut(w-i),f=f.cut(0,w-i),m=w,p=-1)}else for(;o<s.length&&s[o].to<m;)o++;let y=f.isInline&&!f.isLeaf?a.filter(w=>!w.inline):a.slice();r(f,y,e.forChild(i,f),p),i=m}}function xNe(n){if(n.nodeName=="UL"||n.nodeName=="OL"){let e=n.style.cssText;n.style.cssText=e+"; list-style: square !important",window.getComputedStyle(n).listStyle,n.style.cssText=e}}function kNe(n,e,t,r){for(let s=0,i=0;s<n.childCount&&i<=r;){let o=n.child(s++),a=i;if(i+=o.nodeSize,!o.isText)continue;let l=o.text;for(;s<n.childCount;){let c=n.child(s++);if(i+=c.nodeSize,!c.isText)break;l+=c.text}if(i>=t){if(i>=r&&l.slice(r-e.length-a,r-a)==e)return r-e.length;let c=a<r?l.lastIndexOf(e,r-a-1):-1;if(c>=0&&c+e.length+a>=t)return a+c;if(t==r&&l.length>=r+e.length-a&&l.slice(r-a,r-a+e.length)==e)return r}}return-1}function CN(n,e,t,r,s){let i=[];for(let o=0,a=0;o<n.length;o++){let l=n[o],c=a,u=a+=l.size;c>=t||u<=e?i.push(l):(c<e&&i.push(l.slice(0,e-c,r)),s&&(i.push(s),s=void 0),u>t&&i.push(l.slice(t-c,l.size,r)))}return i}function SN(n,e=null){let t=n.domSelectionRange(),r=n.state.doc;if(!t.focusNode)return null;let s=n.docView.nearestDesc(t.focusNode),i=s&&s.size==0,o=n.docView.posFromDOM(t.focusNode,t.focusOffset,1);if(o<0)return null;let a=r.resolve(o),l,c;if(Q7(t)){for(l=o;s&&!s.node;)s=s.parent;let d=s.node;if(s&&d.isAtom&&Ft.isSelectable(d)&&s.parent&&!(d.isInline&&YAe(t.focusNode,t.focusOffset,s.dom))){let f=s.posBefore;c=new Ft(o==f?a:r.resolve(f))}}else{if(t instanceof n.dom.ownerDocument.defaultView.Selection&&t.rangeCount>1){let d=o,f=o;for(let p=0;p<t.rangeCount;p++){let m=t.getRangeAt(p);d=Math.min(d,n.docView.posFromDOM(m.startContainer,m.startOffset,1)),f=Math.max(f,n.docView.posFromDOM(m.endContainer,m.endOffset,-1))}if(d<0)return null;[l,o]=f==n.state.selection.anchor?[f,d]:[d,f],a=r.resolve(o)}else l=n.docView.posFromDOM(t.anchorNode,t.anchorOffset,1);if(l<0)return null}let u=r.resolve(l);if(!c){let d=e=="pointer"||n.state.selection.head<a.pos&&!i?1:-1;c=_N(n,u,a,d)}return c}function OJ(n){return n.editable?n.hasFocus():FJ(n)&&document.activeElement&&document.activeElement.contains(n.dom)}function $u(n,e=!1){let t=n.state.selection;if(RJ(n,t),!!OJ(n)){if(!e&&n.input.mouseDown&&n.input.mouseDown.allowDefault&&Us){let r=n.domSelectionRange(),s=n.domObserver.currentSelection;if(r.anchorNode&&s.anchorNode&&o0(r.anchorNode,r.anchorOffset,s.anchorNode,s.anchorOffset)){n.input.mouseDown.delayedSelectionSync=!0,n.domObserver.setCurSelection();return}}if(n.domObserver.disconnectSelection(),n.cursorWrapper)SNe(n);else{let{anchor:r,head:s}=t,i,o;PJ&&!(t instanceof It)&&(t.$from.parent.inlineContent||(i=IJ(n,t.from)),!t.empty&&!t.$from.parent.inlineContent&&(o=IJ(n,t.to))),n.docView.setSelection(r,s,n,e),PJ&&(i&&DJ(i),o&&DJ(o)),t.visible?n.dom.classList.remove("ProseMirror-hideselection"):(n.dom.classList.add("ProseMirror-hideselection"),"onselectionchange"in document&&CNe(n))}n.domObserver.setCurSelection(),n.domObserver.connectSelection()}}const PJ=oi||Us&&uJ<63;function IJ(n,e){let{node:t,offset:r}=n.docView.domFromPos(e,0),s=r<t.childNodes.length?t.childNodes[r]:null,i=r?t.childNodes[r-1]:null;if(oi&&s&&s.contentEditable=="false")return EN(s);if((!s||s.contentEditable=="false")&&(!i||i.contentEditable=="false")){if(s)return EN(s);if(i)return EN(i)}}function EN(n){return n.contentEditable="true",oi&&n.draggable&&(n.draggable=!1,n.wasDraggable=!0),n}function DJ(n){n.contentEditable="false",n.wasDraggable&&(n.draggable=!0,n.wasDraggable=null)}function CNe(n){let e=n.dom.ownerDocument;e.removeEventListener("selectionchange",n.input.hideSelectionGuard);let t=n.domSelectionRange(),r=t.anchorNode,s=t.anchorOffset;e.addEventListener("selectionchange",n.input.hideSelectionGuard=()=>{(t.anchorNode!=r||t.anchorOffset!=s)&&(e.removeEventListener("selectionchange",n.input.hideSelectionGuard),setTimeout(()=>{(!OJ(n)||n.state.selection.visible)&&n.dom.classList.remove("ProseMirror-hideselection")},20))})}function SNe(n){let e=n.domSelection();if(!e)return;let t=n.cursorWrapper.dom,r=t.nodeName=="IMG";r?e.collapse(t.parentNode,ii(t)+1):e.collapse(t,0),!r&&!n.state.selection.visible&&ao&&_h<=11&&(t.disabled=!0,t.disabled=!1)}function RJ(n,e){if(e instanceof Ft){let t=n.docView.descAt(e.from);t!=n.lastSelectedViewDesc&&($J(n),t&&t.selectNode(),n.lastSelectedViewDesc=t)}else $J(n)}function $J(n){n.lastSelectedViewDesc&&(n.lastSelectedViewDesc.parent&&n.lastSelectedViewDesc.deselectNode(),n.lastSelectedViewDesc=void 0)}function _N(n,e,t,r){return n.someProp("createSelectionBetween",s=>s(n,e,t))||It.between(e,t,r)}function LJ(n){return n.editable&&!n.hasFocus()?!1:FJ(n)}function FJ(n){let e=n.domSelectionRange();if(!e.anchorNode)return!1;try{return n.dom.contains(e.anchorNode.nodeType==3?e.anchorNode.parentNode:e.anchorNode)&&(n.editable||n.dom.contains(e.focusNode.nodeType==3?e.focusNode.parentNode:e.focusNode))}catch{return!1}}function ENe(n){let e=n.docView.domFromPos(n.state.selection.anchor,0),t=n.domSelectionRange();return o0(e.node,e.offset,t.anchorNode,t.anchorOffset)}function TN(n,e){let{$anchor:t,$head:r}=n.selection,s=e>0?t.max(r):t.min(r),i=s.parent.inlineContent?s.depth?n.doc.resolve(e>0?s.after():s.before()):null:s;return i&&nn.findFrom(i,e)}function Nh(n,e){return n.dispatch(n.state.tr.setSelection(e).scrollIntoView()),!0}function jJ(n,e,t){let r=n.state.selection;if(r instanceof It)if(t.indexOf("s")>-1){let{$head:s}=r,i=s.textOffset?null:e<0?s.nodeBefore:s.nodeAfter;if(!i||i.isText||!i.isLeaf)return!1;let o=n.state.doc.resolve(s.pos+i.nodeSize*(e<0?-1:1));return Nh(n,new It(r.$anchor,o))}else if(r.empty){if(n.endOfTextblock(e>0?"forward":"backward")){let s=TN(n.state,e);return s&&s instanceof Ft?Nh(n,s):!1}else if(!(Sa&&t.indexOf("m")>-1)){let s=r.$head,i=s.textOffset?null:e<0?s.nodeBefore:s.nodeAfter,o;if(!i||i.isText)return!1;let a=e<0?s.pos-i.nodeSize:s.pos;return i.isAtom||(o=n.docView.descAt(a))&&!o.contentDOM?Ft.isSelectable(i)?Nh(n,new Ft(e<0?n.state.doc.resolve(s.pos-i.nodeSize):s)):o3?Nh(n,new It(n.state.doc.resolve(e<0?a:a+i.nodeSize))):!1:!1}}else return!1;else{if(r instanceof Ft&&r.node.isInline)return Nh(n,new It(e>0?r.$to:r.$from));{let s=TN(n.state,e);return s?Nh(n,s):!1}}}function nk(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function u3(n,e){let t=n.pmViewDesc;return t&&t.size==0&&(e<0||n.nextSibling||n.nodeName!="BR")}function y1(n,e){return e<0?_Ne(n):TNe(n)}function _Ne(n){let e=n.domSelectionRange(),t=e.focusNode,r=e.focusOffset;if(!t)return;let s,i,o=!1;for(Ca&&t.nodeType==1&&r<nk(t)&&u3(t.childNodes[r],-1)&&(o=!0);;)if(r>0){if(t.nodeType!=1)break;{let a=t.childNodes[r-1];if(u3(a,-1))s=t,i=--r;else if(a.nodeType==3)t=a,r=t.nodeValue.length;else break}}else{if(BJ(t))break;{let a=t.previousSibling;for(;a&&u3(a,-1);)s=t.parentNode,i=ii(a),a=a.previousSibling;if(a)t=a,r=nk(t);else{if(t=t.parentNode,t==n.dom)break;r=0}}}o?AN(n,t,r):s&&AN(n,s,i)}function TNe(n){let e=n.domSelectionRange(),t=e.focusNode,r=e.focusOffset;if(!t)return;let s=nk(t),i,o;for(;;)if(r<s){if(t.nodeType!=1)break;let a=t.childNodes[r];if(u3(a,1))i=t,o=++r;else break}else{if(BJ(t))break;{let a=t.nextSibling;for(;a&&u3(a,1);)i=a.parentNode,o=ii(a)+1,a=a.nextSibling;if(a)t=a,r=0,s=nk(t);else{if(t=t.parentNode,t==n.dom)break;r=s=0}}}i&&AN(n,i,o)}function BJ(n){let e=n.pmViewDesc;return e&&e.node&&e.node.isBlock}function ANe(n,e){for(;n&&e==n.childNodes.length&&!i3(n);)e=ii(n)+1,n=n.parentNode;for(;n&&e<n.childNodes.length;){let t=n.childNodes[e];if(t.nodeType==3)return t;if(t.nodeType==1&&t.contentEditable=="false")break;n=t,e=0}}function NNe(n,e){for(;n&&!e&&!i3(n);)e=ii(n),n=n.parentNode;for(;n&&e;){let t=n.childNodes[e-1];if(t.nodeType==3)return t;if(t.nodeType==1&&t.contentEditable=="false")break;n=t,e=n.childNodes.length}}function AN(n,e,t){if(e.nodeType!=3){let i,o;(o=ANe(e,t))?(e=o,t=0):(i=NNe(e,t))&&(e=i,t=i.nodeValue.length)}let r=n.domSelection();if(!r)return;if(Q7(r)){let i=document.createRange();i.setEnd(e,t),i.setStart(e,t),r.removeAllRanges(),r.addRange(i)}else r.extend&&r.extend(e,t);n.domObserver.setCurSelection();let{state:s}=n;setTimeout(()=>{n.state==s&&$u(n)},50)}function VJ(n,e){let t=n.state.doc.resolve(e);if(!(Us||dJ)&&t.parent.inlineContent){let s=n.coordsAtPos(e);if(e>t.start()){let i=n.coordsAtPos(e-1),o=(i.top+i.bottom)/2;if(o>s.top&&o<s.bottom&&Math.abs(i.left-s.left)>1)return i.left<s.left?"ltr":"rtl"}if(e<t.end()){let i=n.coordsAtPos(e+1),o=(i.top+i.bottom)/2;if(o>s.top&&o<s.bottom&&Math.abs(i.left-s.left)>1)return i.left>s.left?"ltr":"rtl"}}return getComputedStyle(n.dom).direction=="rtl"?"rtl":"ltr"}function zJ(n,e,t){let r=n.state.selection;if(r instanceof It&&!r.empty||t.indexOf("s")>-1||Sa&&t.indexOf("m")>-1)return!1;let{$from:s,$to:i}=r;if(!s.parent.inlineContent||n.endOfTextblock(e<0?"up":"down")){let o=TN(n.state,e);if(o&&o instanceof Ft)return Nh(n,o)}if(!s.parent.inlineContent){let o=e<0?s:i,a=r instanceof oo?nn.near(o,e):nn.findFrom(o,e);return a?Nh(n,a):!1}return!1}function HJ(n,e){if(!(n.state.selection instanceof It))return!0;let{$head:t,$anchor:r,empty:s}=n.state.selection;if(!t.sameParent(r))return!0;if(!s)return!1;if(n.endOfTextblock(e>0?"forward":"backward"))return!0;let i=!t.textOffset&&(e<0?t.nodeBefore:t.nodeAfter);if(i&&!i.isText){let o=n.state.tr;return e<0?o.delete(t.pos-i.nodeSize,t.pos):o.delete(t.pos,t.pos+i.nodeSize),n.dispatch(o),!0}return!1}function qJ(n,e,t){n.domObserver.stop(),e.contentEditable=t,n.domObserver.start()}function MNe(n){if(!oi||n.state.selection.$head.parentOffset>0)return!1;let{focusNode:e,focusOffset:t}=n.domSelectionRange();if(e&&e.nodeType==1&&t==0&&e.firstChild&&e.firstChild.contentEditable=="false"){let r=e.firstChild;qJ(n,r,"true"),setTimeout(()=>qJ(n,r,"false"),20)}return!1}function ONe(n){let e="";return n.ctrlKey&&(e+="c"),n.metaKey&&(e+="m"),n.altKey&&(e+="a"),n.shiftKey&&(e+="s"),e}function PNe(n,e){let t=e.keyCode,r=ONe(e);if(t==8||Sa&&t==72&&r=="c")return HJ(n,-1)||y1(n,-1);if(t==46&&!e.shiftKey||Sa&&t==68&&r=="c")return HJ(n,1)||y1(n,1);if(t==13||t==27)return!0;if(t==37||Sa&&t==66&&r=="c"){let s=t==37?VJ(n,n.state.selection.from)=="ltr"?-1:1:-1;return jJ(n,s,r)||y1(n,s)}else if(t==39||Sa&&t==70&&r=="c"){let s=t==39?VJ(n,n.state.selection.from)=="ltr"?1:-1:1;return jJ(n,s,r)||y1(n,s)}else{if(t==38||Sa&&t==80&&r=="c")return zJ(n,-1,r)||y1(n,-1);if(t==40||Sa&&t==78&&r=="c")return MNe(n)||zJ(n,1,r)||y1(n,1);if(r==(Sa?"m":"c")&&(t==66||t==73||t==89||t==90))return!0}return!1}function NN(n,e){n.someProp("transformCopied",p=>{e=p(e,n)});let t=[],{content:r,openStart:s,openEnd:i}=e;for(;s>1&&i>1&&r.childCount==1&&r.firstChild.childCount==1;){s--,i--;let p=r.firstChild;t.push(p.type.name,p.attrs!=p.type.defaultAttrs?p.attrs:null),r=p.content}let o=n.someProp("clipboardSerializer")||e0.fromSchema(n.state.schema),a=JJ(),l=a.createElement("div");l.appendChild(o.serializeFragment(r,{document:a}));let c=l.firstChild,u,d=0;for(;c&&c.nodeType==1&&(u=ZJ[c.nodeName.toLowerCase()]);){for(let p=u.length-1;p>=0;p--){let m=a.createElement(u[p]);for(;l.firstChild;)m.appendChild(l.firstChild);l.appendChild(m),d++}c=l.firstChild}c&&c.nodeType==1&&c.setAttribute("data-pm-slice",`${s} ${i}${d?` -${d}`:""} ${JSON.stringify(t)}`);let f=n.someProp("clipboardTextSerializer",p=>p(e,n))||e.content.textBetween(0,e.content.size,` + +`);return{dom:l,text:f,slice:e}}function UJ(n,e,t,r,s){let i=s.parent.type.spec.code,o,a;if(!t&&!e)return null;let l=!!e&&(r||i||!t);if(l){if(n.someProp("transformPastedText",f=>{e=f(e,i||r,n)}),i)return a=new He($e.from(n.state.schema.text(e.replace(/\r\n?/g,` +`))),0,0),n.someProp("transformPasted",f=>{a=f(a,n,!0)}),a;let d=n.someProp("clipboardTextParser",f=>f(e,s,r,n));if(d)a=d;else{let f=s.marks(),{schema:p}=n.state,m=e0.fromSchema(p);o=document.createElement("div"),e.split(/(?:\r\n?|\n)+/).forEach(y=>{let w=o.appendChild(document.createElement("p"));y&&w.appendChild(m.serializeNode(p.text(y,f)))})}}else n.someProp("transformPastedHTML",d=>{t=d(t,n)}),o=$Ne(t),o3&&LNe(o);let c=o&&o.querySelector("[data-pm-slice]"),u=c&&/^(\d+) (\d+)(?: -(\d+))? (.*)/.exec(c.getAttribute("data-pm-slice")||"");if(u&&u[3])for(let d=+u[3];d>0;d--){let f=o.firstChild;for(;f&&f.nodeType!=1;)f=f.nextSibling;if(!f)break;o=f}if(a||(a=(n.someProp("clipboardParser")||n.someProp("domParser")||Qp.fromSchema(n.state.schema)).parseSlice(o,{preserveWhitespace:!!(l||u),context:s,ruleFromNode(f){return f.nodeName=="BR"&&!f.nextSibling&&f.parentNode&&!INe.test(f.parentNode.nodeName)?{ignore:!0}:null}})),u)a=FNe(YJ(a,+u[1],+u[2]),u[4]);else if(a=He.maxOpen(DNe(a.content,s),!0),a.openStart||a.openEnd){let d=0,f=0;for(let p=a.content.firstChild;d<a.openStart&&!p.type.spec.isolating;d++,p=p.firstChild);for(let p=a.content.lastChild;f<a.openEnd&&!p.type.spec.isolating;f++,p=p.lastChild);a=YJ(a,d,f)}return n.someProp("transformPasted",d=>{a=d(a,n,l)}),a}const INe=/^(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 DNe(n,e){if(n.childCount<2)return n;for(let t=e.depth;t>=0;t--){let s=e.node(t).contentMatchAt(e.index(t)),i,o=[];if(n.forEach(a=>{if(!o)return;let l=s.findWrapping(a.type),c;if(!l)return o=null;if(c=o.length&&i.length&&GJ(l,i,a,o[o.length-1],0))o[o.length-1]=c;else{o.length&&(o[o.length-1]=KJ(o[o.length-1],i.length));let u=WJ(a,l);o.push(u),s=s.matchType(u.type),i=l}}),o)return $e.from(o)}return n}function WJ(n,e,t=0){for(let r=e.length-1;r>=t;r--)n=e[r].create(null,$e.from(n));return n}function GJ(n,e,t,r,s){if(s<n.length&&s<e.length&&n[s]==e[s]){let i=GJ(n,e,t,r.lastChild,s+1);if(i)return r.copy(r.content.replaceChild(r.childCount-1,i));if(r.contentMatchAt(r.childCount).matchType(s==n.length-1?t.type:n[s+1]))return r.copy(r.content.append($e.from(WJ(t,n,s+1))))}}function KJ(n,e){if(e==0)return n;let t=n.content.replaceChild(n.childCount-1,KJ(n.lastChild,e-1)),r=n.contentMatchAt(n.childCount).fillBefore($e.empty,!0);return n.copy(t.append(r))}function MN(n,e,t,r,s,i){let o=e<0?n.firstChild:n.lastChild,a=o.content;return n.childCount>1&&(i=0),s<r-1&&(a=MN(a,e,t,r,s+1,i)),s>=t&&(a=e<0?o.contentMatchAt(0).fillBefore(a,i<=s).append(a):a.append(o.contentMatchAt(o.childCount).fillBefore($e.empty,!0))),n.replaceChild(e<0?0:n.childCount-1,o.copy(a))}function YJ(n,e,t){return e<n.openStart&&(n=new He(MN(n.content,-1,e,n.openStart,0,n.openEnd),e,n.openEnd)),t<n.openEnd&&(n=new He(MN(n.content,1,t,n.openEnd,0,0),n.openStart,t)),n}const ZJ={thead:["table"],tbody:["table"],tfoot:["table"],caption:["table"],colgroup:["table"],col:["table","colgroup"],tr:["table","tbody"],td:["table","tbody","tr"],th:["table","tbody","tr"]};let XJ=null;function JJ(){return XJ||(XJ=document.implementation.createHTMLDocument("title"))}let ON=null;function RNe(n){let e=window.trustedTypes;return e?(ON||(ON=e.defaultPolicy||e.createPolicy("ProseMirrorClipboard",{createHTML:t=>t})),ON.createHTML(n)):n}function $Ne(n){let e=/^(\s*<meta [^>]*>)*/.exec(n);e&&(n=n.slice(e[0].length));let t=JJ().createElement("div"),r=/<([a-z][^>\s]+)/i.exec(n),s;if((s=r&&ZJ[r[1].toLowerCase()])&&(n=s.map(i=>"<"+i+">").join("")+n+s.map(i=>"</"+i+">").reverse().join("")),t.innerHTML=RNe(n),s)for(let i=0;i<s.length;i++)t=t.querySelector(s[i])||t;return t}function LNe(n){let e=n.querySelectorAll(Us?"span:not([class]):not([style])":"span.Apple-converted-space");for(let t=0;t<e.length;t++){let r=e[t];r.childNodes.length==1&&r.textContent==" "&&r.parentNode&&r.parentNode.replaceChild(n.ownerDocument.createTextNode(" "),r)}}function FNe(n,e){if(!n.size)return n;let t=n.content.firstChild.type.schema,r;try{r=JSON.parse(e)}catch{return n}let{content:s,openStart:i,openEnd:o}=n;for(let a=r.length-2;a>=0;a-=2){let l=t.nodes[r[a]];if(!l||l.hasRequiredAttrs())break;s=$e.from(l.create(r[a+1],s)),i++,o++}return new He(s,i,o)}const Ii={},Di={},jNe={touchstart:!0,touchmove:!0};class BNe{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 VNe(n){for(let e in Ii){let t=Ii[e];n.dom.addEventListener(e,n.input.eventHandlers[e]=r=>{HNe(n,r)&&!IN(n,r)&&(n.editable||!(r.type in Di))&&t(n,r)},jNe[e]?{passive:!0}:void 0)}oi&&n.dom.addEventListener("input",()=>null),PN(n)}function Mh(n,e){n.input.lastSelectionOrigin=e,n.input.lastSelectionTime=Date.now()}function zNe(n){n.domObserver.stop();for(let e in n.input.eventHandlers)n.dom.removeEventListener(e,n.input.eventHandlers[e]);clearTimeout(n.input.composingTimeout),clearTimeout(n.input.lastIOSEnterFallbackTimeout)}function PN(n){n.someProp("handleDOMEvents",e=>{for(let t in e)n.input.eventHandlers[t]||n.dom.addEventListener(t,n.input.eventHandlers[t]=r=>IN(n,r))})}function IN(n,e){return n.someProp("handleDOMEvents",t=>{let r=t[e.type];return r?r(n,e)||e.defaultPrevented:!1})}function HNe(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target;t!=n.dom;t=t.parentNode)if(!t||t.nodeType==11||t.pmViewDesc&&t.pmViewDesc.stopEvent(e))return!1;return!0}function qNe(n,e){!IN(n,e)&&Ii[e.type]&&(n.editable||!(e.type in Di))&&Ii[e.type](n,e)}Di.keydown=(n,e)=>{let t=e;if(n.input.shiftKey=t.keyCode==16||t.shiftKey,!eQ(n,t)&&(n.input.lastKeyCode=t.keyCode,n.input.lastKeyCodeTime=Date.now(),!(Du&&Us&&t.keyCode==13)))if(t.keyCode!=229&&n.domObserver.forceFlush(),m1&&t.keyCode==13&&!t.ctrlKey&&!t.altKey&&!t.metaKey){let r=Date.now();n.input.lastIOSEnter=r,n.input.lastIOSEnterFallbackTimeout=setTimeout(()=>{n.input.lastIOSEnter==r&&(n.someProp("handleKeyDown",s=>s(n,a0(13,"Enter"))),n.input.lastIOSEnter=0)},200)}else n.someProp("handleKeyDown",r=>r(n,t))||PNe(n,t)?t.preventDefault():Mh(n,"key")},Di.keyup=(n,e)=>{e.keyCode==16&&(n.input.shiftKey=!1)},Di.keypress=(n,e)=>{let t=e;if(eQ(n,t)||!t.charCode||t.ctrlKey&&!t.altKey||Sa&&t.metaKey)return;if(n.someProp("handleKeyPress",s=>s(n,t))){t.preventDefault();return}let r=n.state.selection;if(!(r instanceof It)||!r.$from.sameParent(r.$to)){let s=String.fromCharCode(t.charCode),i=()=>n.state.tr.insertText(s).scrollIntoView();!/[\r\n]/.test(s)&&!n.someProp("handleTextInput",o=>o(n,r.$from.pos,r.$to.pos,s,i))&&n.dispatch(i()),t.preventDefault()}};function rk(n){return{left:n.clientX,top:n.clientY}}function UNe(n,e){let t=e.x-n.clientX,r=e.y-n.clientY;return t*t+r*r<100}function DN(n,e,t,r,s){if(r==-1)return!1;let i=n.state.doc.resolve(r);for(let o=i.depth+1;o>0;o--)if(n.someProp(e,a=>o>i.depth?a(n,t,i.nodeAfter,i.before(o),s,!0):a(n,t,i.node(o),i.before(o),s,!1)))return!0;return!1}function v1(n,e,t){if(n.focused||n.focus(),n.state.selection.eq(e))return;let r=n.state.tr.setSelection(e);r.setMeta("pointer",!0),n.dispatch(r)}function WNe(n,e){if(e==-1)return!1;let t=n.state.doc.resolve(e),r=t.nodeAfter;return r&&r.isAtom&&Ft.isSelectable(r)?(v1(n,new Ft(t)),!0):!1}function GNe(n,e){if(e==-1)return!1;let t=n.state.selection,r,s;t instanceof Ft&&(r=t.node);let i=n.state.doc.resolve(e);for(let o=i.depth+1;o>0;o--){let a=o>i.depth?i.nodeAfter:i.node(o);if(Ft.isSelectable(a)){r&&t.$from.depth>0&&o>=t.$from.depth&&i.before(t.$from.depth+1)==t.$from.pos?s=i.before(t.$from.depth):s=i.before(o);break}}return s!=null?(v1(n,Ft.create(n.state.doc,s)),!0):!1}function KNe(n,e,t,r,s){return DN(n,"handleClickOn",e,t,r)||n.someProp("handleClick",i=>i(n,e,r))||(s?GNe(n,t):WNe(n,t))}function YNe(n,e,t,r){return DN(n,"handleDoubleClickOn",e,t,r)||n.someProp("handleDoubleClick",s=>s(n,e,r))}function ZNe(n,e,t,r){return DN(n,"handleTripleClickOn",e,t,r)||n.someProp("handleTripleClick",s=>s(n,e,r))||XNe(n,t,r)}function XNe(n,e,t){if(t.button!=0)return!1;let r=n.state.doc;if(e==-1)return r.inlineContent?(v1(n,It.create(r,0,r.content.size)),!0):!1;let s=r.resolve(e);for(let i=s.depth+1;i>0;i--){let o=i>s.depth?s.nodeAfter:s.node(i),a=s.before(i);if(o.inlineContent)v1(n,It.create(r,a+1,a+1+o.content.size));else if(Ft.isSelectable(o))v1(n,Ft.create(r,a));else continue;return!0}}function RN(n){return sk(n)}const QJ=Sa?"metaKey":"ctrlKey";Ii.mousedown=(n,e)=>{let t=e;n.input.shiftKey=t.shiftKey;let r=RN(n),s=Date.now(),i="singleClick";s-n.input.lastClick.time<500&&UNe(t,n.input.lastClick)&&!t[QJ]&&n.input.lastClick.button==t.button&&(n.input.lastClick.type=="singleClick"?i="doubleClick":n.input.lastClick.type=="doubleClick"&&(i="tripleClick")),n.input.lastClick={time:s,x:t.clientX,y:t.clientY,type:i,button:t.button};let o=n.posAtCoords(rk(t));o&&(i=="singleClick"?(n.input.mouseDown&&n.input.mouseDown.done(),n.input.mouseDown=new JNe(n,o,t,!!r)):(i=="doubleClick"?YNe:ZNe)(n,o.pos,o.inside,t)?t.preventDefault():Mh(n,"pointer"))};class JNe{constructor(e,t,r,s){this.view=e,this.pos=t,this.event=r,this.flushed=s,this.delayedSelectionSync=!1,this.mightDrag=null,this.startDoc=e.state.doc,this.selectNode=!!r[QJ],this.allowDefault=r.shiftKey;let i,o;if(t.inside>-1)i=e.state.doc.nodeAt(t.inside),o=t.inside;else{let u=e.state.doc.resolve(t.pos);i=u.parent,o=u.depth?u.before():0}const a=s?null:r.target,l=a?e.docView.nearestDesc(a,!0):null;this.target=l&&l.nodeDOM.nodeType==1?l.nodeDOM:null;let{selection:c}=e.state;(r.button==0&&i.type.spec.draggable&&i.type.spec.selectable!==!1||c instanceof Ft&&c.from<=o&&c.to>o)&&(this.mightDrag={node:i,pos:o,addAttr:!!(this.target&&!this.target.draggable),setUneditable:!!(this.target&&Ca&&!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()),e.root.addEventListener("mouseup",this.up=this.up.bind(this)),e.root.addEventListener("mousemove",this.move=this.move.bind(this)),Mh(e,"pointer")}done(){this.view.root.removeEventListener("mouseup",this.up),this.view.root.removeEventListener("mousemove",this.move),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(()=>$u(this.view)),this.view.input.mouseDown=null}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(rk(e))),this.updateAllowDefault(e),this.allowDefault||!t?Mh(this.view,"pointer"):KNe(this.view,t.pos,t.inside,e,this.selectNode)?e.preventDefault():e.button==0&&(this.flushed||oi&&this.mightDrag&&!this.mightDrag.node.isAtom||Us&&!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)?(v1(this.view,nn.near(this.view.state.doc.resolve(t.pos))),e.preventDefault()):Mh(this.view,"pointer")}move(e){this.updateAllowDefault(e),Mh(this.view,"pointer"),e.buttons==0&&this.done()}updateAllowDefault(e){!this.allowDefault&&(Math.abs(this.event.x-e.clientX)>4||Math.abs(this.event.y-e.clientY)>4)&&(this.allowDefault=!0)}}Ii.touchstart=n=>{n.input.lastTouch=Date.now(),RN(n),Mh(n,"pointer")},Ii.touchmove=n=>{n.input.lastTouch=Date.now(),Mh(n,"pointer")},Ii.contextmenu=n=>RN(n);function eQ(n,e){return n.composing?!0:oi&&Math.abs(e.timeStamp-n.input.compositionEndedAt)<500?(n.input.compositionEndedAt=-2e8,!0):!1}const QNe=Du?5e3:-1;Di.compositionstart=Di.compositionupdate=n=>{if(!n.composing){n.domObserver.flush();let{state:e}=n,t=e.selection.$to;if(e.selection instanceof It&&(e.storedMarks||!t.textOffset&&t.parentOffset&&t.nodeBefore.marks.some(r=>r.type.spec.inclusive===!1)||Us&&dJ&&eMe(n)))n.markCursor=n.state.storedMarks||t.marks(),sk(n,!0),n.markCursor=null;else if(sk(n,!e.selection.empty),Ca&&e.selection.empty&&t.parentOffset&&!t.textOffset&&t.nodeBefore.marks.length){let r=n.domSelectionRange();for(let s=r.focusNode,i=r.focusOffset;s&&s.nodeType==1&&i!=0;){let o=i<0?s.lastChild:s.childNodes[i-1];if(!o)break;if(o.nodeType==3){let a=n.domSelection();a&&a.collapse(o,o.nodeValue.length);break}else s=o,i=-1}}n.input.composing=!0}tQ(n,QNe)};function eMe(n){let{focusNode:e,focusOffset:t}=n.domSelectionRange();if(!e||e.nodeType!=1||t>=e.childNodes.length)return!1;let r=e.childNodes[t];return r.nodeType==1&&r.contentEditable=="false"}Di.compositionend=(n,e)=>{n.composing&&(n.input.composing=!1,n.input.compositionEndedAt=e.timeStamp,n.input.compositionPendingChanges=n.domObserver.pendingRecords().length?n.input.compositionID:0,n.input.compositionNode=null,n.input.badSafariComposition?n.domObserver.forceFlush():n.input.compositionPendingChanges&&Promise.resolve().then(()=>n.domObserver.flush()),n.input.compositionID++,tQ(n,20))};function tQ(n,e){clearTimeout(n.input.composingTimeout),e>-1&&(n.input.composingTimeout=setTimeout(()=>sk(n),e))}function nQ(n){for(n.composing&&(n.input.composing=!1,n.input.compositionEndedAt=nMe());n.input.compositionNodes.length>0;)n.input.compositionNodes.pop().markParentsDirty()}function tMe(n){let e=n.domSelectionRange();if(!e.focusNode)return null;let t=GAe(e.focusNode,e.focusOffset),r=KAe(e.focusNode,e.focusOffset);if(t&&r&&t!=r){let s=r.pmViewDesc,i=n.domObserver.lastChangedTextNode;if(t==i||r==i)return i;if(!s||!s.isText(r.nodeValue))return r;if(n.input.compositionNode==r){let o=t.pmViewDesc;if(!(!o||!o.isText(t.nodeValue)))return r}}return t||r}function nMe(){let n=document.createEvent("Event");return n.initEvent("event",!0,!0),n.timeStamp}function sk(n,e=!1){if(!(Du&&n.domObserver.flushingSoon>=0)){if(n.domObserver.forceFlush(),nQ(n),e||n.docView&&n.docView.dirty){let t=SN(n),r=n.state.selection;return t&&!t.eq(r)?n.dispatch(n.state.tr.setSelection(t)):(n.markCursor||e)&&!r.$from.node(r.$from.sharedDepth(r.to)).inlineContent?n.dispatch(n.state.tr.deleteSelection()):n.updateState(n.state),!0}return!1}}function rMe(n,e){if(!n.dom.parentNode)return;let t=n.dom.parentNode.appendChild(document.createElement("div"));t.appendChild(e),t.style.cssText="position: fixed; left: -10000px; top: 10px";let r=getSelection(),s=document.createRange();s.selectNodeContents(e),n.dom.blur(),r.removeAllRanges(),r.addRange(s),setTimeout(()=>{t.parentNode&&t.parentNode.removeChild(t),n.focus()},50)}const d3=ao&&_h<15||m1&&JAe<604;Ii.copy=Di.cut=(n,e)=>{let t=e,r=n.state.selection,s=t.type=="cut";if(r.empty)return;let i=d3?null:t.clipboardData,o=r.content(),{dom:a,text:l}=NN(n,o);i?(t.preventDefault(),i.clearData(),i.setData("text/html",a.innerHTML),i.setData("text/plain",l)):rMe(n,a),s&&n.dispatch(n.state.tr.deleteSelection().scrollIntoView().setMeta("uiEvent","cut"))};function sMe(n){return n.openStart==0&&n.openEnd==0&&n.content.childCount==1?n.content.firstChild:null}function iMe(n,e){if(!n.dom.parentNode)return;let t=n.input.shiftKey||n.state.selection.$from.parent.type.spec.code,r=n.dom.parentNode.appendChild(document.createElement(t?"textarea":"div"));t||(r.contentEditable="true"),r.style.cssText="position: fixed; left: -10000px; top: 10px",r.focus();let s=n.input.shiftKey&&n.input.lastKeyCode!=45;setTimeout(()=>{n.focus(),r.parentNode&&r.parentNode.removeChild(r),t?h3(n,r.value,null,s,e):h3(n,r.textContent,r.innerHTML,s,e)},50)}function h3(n,e,t,r,s){let i=UJ(n,e,t,r,n.state.selection.$from);if(n.someProp("handlePaste",l=>l(n,s,i||He.empty)))return!0;if(!i)return!1;let o=sMe(i),a=o?n.state.tr.replaceSelectionWith(o,r):n.state.tr.replaceSelection(i);return n.dispatch(a.scrollIntoView().setMeta("paste",!0).setMeta("uiEvent","paste")),!0}function rQ(n){let e=n.getData("text/plain")||n.getData("Text");if(e)return e;let t=n.getData("text/uri-list");return t?t.replace(/\r?\n/g," "):""}Di.paste=(n,e)=>{let t=e;if(n.composing&&!Du)return;let r=d3?null:t.clipboardData,s=n.input.shiftKey&&n.input.lastKeyCode!=45;r&&h3(n,rQ(r),r.getData("text/html"),s,t)?t.preventDefault():iMe(n,t)};class sQ{constructor(e,t,r){this.slice=e,this.move=t,this.node=r}}const oMe=Sa?"altKey":"ctrlKey";function iQ(n,e){let t=n.someProp("dragCopies",r=>!r(e));return t??!e[oMe]}Ii.dragstart=(n,e)=>{let t=e,r=n.input.mouseDown;if(r&&r.done(),!t.dataTransfer)return;let s=n.state.selection,i=s.empty?null:n.posAtCoords(rk(t)),o;if(!(i&&i.pos>=s.from&&i.pos<=(s instanceof Ft?s.to-1:s.to))){if(r&&r.mightDrag)o=Ft.create(n.state.doc,r.mightDrag.pos);else if(t.target&&t.target.nodeType==1){let d=n.docView.nearestDesc(t.target,!0);d&&d.node.type.spec.draggable&&d!=n.docView&&(o=Ft.create(n.state.doc,d.posBefore))}}let a=(o||n.state.selection).content(),{dom:l,text:c,slice:u}=NN(n,a);(!t.dataTransfer.files.length||!Us||uJ>120)&&t.dataTransfer.clearData(),t.dataTransfer.setData(d3?"Text":"text/html",l.innerHTML),t.dataTransfer.effectAllowed="copyMove",d3||t.dataTransfer.setData("text/plain",c),n.dragging=new sQ(u,iQ(n,t),o)},Ii.dragend=n=>{let e=n.dragging;window.setTimeout(()=>{n.dragging==e&&(n.dragging=null)},50)},Di.dragover=Di.dragenter=(n,e)=>e.preventDefault(),Di.drop=(n,e)=>{try{aMe(n,e,n.dragging)}finally{n.dragging=null}};function aMe(n,e,t){if(!e.dataTransfer)return;let r=n.posAtCoords(rk(e));if(!r)return;let s=n.state.doc.resolve(r.pos),i=t&&t.slice;i?n.someProp("transformPasted",p=>{i=p(i,n,!1)}):i=UJ(n,rQ(e.dataTransfer),d3?null:e.dataTransfer.getData("text/html"),!1,s);let o=!!(t&&iQ(n,e));if(n.someProp("handleDrop",p=>p(n,e,i||He.empty,o))){e.preventDefault();return}if(!i)return;e.preventDefault();let a=i?BTe(n.state.doc,s.pos,i):s.pos;a==null&&(a=s.pos);let l=n.state.tr;if(o){let{node:p}=t;p?p.replace(l):l.deleteSelection()}let c=l.mapping.map(a),u=i.openStart==0&&i.openEnd==0&&i.content.childCount==1,d=l.doc;if(u?l.replaceRangeWith(c,c,i.content.firstChild):l.replaceRange(c,c,i),l.doc.eq(d))return;let f=l.doc.resolve(c);if(u&&Ft.isSelectable(i.content.firstChild)&&f.nodeAfter&&f.nodeAfter.sameMarkup(i.content.firstChild))l.setSelection(new Ft(f));else{let p=l.mapping.map(a);l.mapping.maps[l.mapping.maps.length-1].forEach((m,y,w,k)=>p=k),l.setSelection(_N(n,f,l.doc.resolve(p)))}n.focus(),n.dispatch(l.setMeta("uiEvent","drop"))}Ii.focus=n=>{n.input.lastFocus=Date.now(),n.focused||(n.domObserver.stop(),n.dom.classList.add("ProseMirror-focused"),n.domObserver.start(),n.focused=!0,setTimeout(()=>{n.docView&&n.hasFocus()&&!n.domObserver.currentSelection.eq(n.domSelectionRange())&&$u(n)},20))},Ii.blur=(n,e)=>{let t=e;n.focused&&(n.domObserver.stop(),n.dom.classList.remove("ProseMirror-focused"),n.domObserver.start(),t.relatedTarget&&n.dom.contains(t.relatedTarget)&&n.domObserver.currentSelection.clear(),n.focused=!1)},Ii.beforeinput=(n,e)=>{if(Us&&Du&&e.inputType=="deleteContentBackward"){n.domObserver.flushSoon();let{domChangeCount:r}=n.input;setTimeout(()=>{if(n.input.domChangeCount!=r||(n.dom.blur(),n.focus(),n.someProp("handleKeyDown",i=>i(n,a0(8,"Backspace")))))return;let{$cursor:s}=n.state.selection;s&&s.pos>0&&n.dispatch(n.state.tr.delete(s.pos-1,s.pos).scrollIntoView())},50)}};for(let n in Di)Ii[n]=Di[n];function f3(n,e){if(n==e)return!0;for(let t in n)if(n[t]!==e[t])return!1;for(let t in e)if(!(t in n))return!1;return!0}class ik{constructor(e,t){this.toDOM=e,this.spec=t||d0,this.side=this.spec.side||0}map(e,t,r,s){let{pos:i,deleted:o}=e.mapResult(t.from+s,this.side<0?-1:1);return o?null:new ai(i-r,i-r,this)}valid(){return!0}eq(e){return this==e||e instanceof ik&&(this.spec.key&&this.spec.key==e.spec.key||this.toDOM==e.toDOM&&f3(this.spec,e.spec))}destroy(e){this.spec.destroy&&this.spec.destroy(e)}}class Oh{constructor(e,t){this.attrs=e,this.spec=t||d0}map(e,t,r,s){let i=e.map(t.from+s,this.spec.inclusiveStart?-1:1)-r,o=e.map(t.to+s,this.spec.inclusiveEnd?1:-1)-r;return i>=o?null:new ai(i,o,this)}valid(e,t){return t.from<t.to}eq(e){return this==e||e instanceof Oh&&f3(this.attrs,e.attrs)&&f3(this.spec,e.spec)}static is(e){return e.type instanceof Oh}destroy(){}}class $N{constructor(e,t){this.attrs=e,this.spec=t||d0}map(e,t,r,s){let i=e.mapResult(t.from+s,1);if(i.deleted)return null;let o=e.mapResult(t.to+s,-1);return o.deleted||o.pos<=i.pos?null:new ai(i.pos-r,o.pos-r,this)}valid(e,t){let{index:r,offset:s}=e.content.findIndex(t.from),i;return s==t.from&&!(i=e.child(r)).isText&&s+i.nodeSize==t.to}eq(e){return this==e||e instanceof $N&&f3(this.attrs,e.attrs)&&f3(this.spec,e.spec)}destroy(){}}class ai{constructor(e,t,r){this.from=e,this.to=t,this.type=r}copy(e,t){return new ai(e,t,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,r){return this.type.map(e,this,t,r)}static widget(e,t,r){return new ai(e,e,new ik(t,r))}static inline(e,t,r,s){return new ai(e,t,new Oh(r,s))}static node(e,t,r,s){return new ai(e,t,new $N(r,s))}get spec(){return this.type.spec}get inline(){return this.type instanceof Oh}get widget(){return this.type instanceof ik}}const b1=[],d0={};class Br{constructor(e,t){this.local=e.length?e:b1,this.children=t.length?t:b1}static create(e,t){return t.length?ok(t,e,0,d0):bi}find(e,t,r){let s=[];return this.findInner(e??0,t??1e9,s,0,r),s}findInner(e,t,r,s,i){for(let o=0;o<this.local.length;o++){let a=this.local[o];a.from<=t&&a.to>=e&&(!i||i(a.spec))&&r.push(a.copy(a.from+s,a.to+s))}for(let o=0;o<this.children.length;o+=3)if(this.children[o]<t&&this.children[o+1]>e){let a=this.children[o]+1;this.children[o+2].findInner(e-a,t-a,r,s+a,i)}}map(e,t,r){return this==bi||e.maps.length==0?this:this.mapInner(e,t,0,0,r||d0)}mapInner(e,t,r,s,i){let o;for(let a=0;a<this.local.length;a++){let l=this.local[a].map(e,r,s);l&&l.type.valid(t,l)?(o||(o=[])).push(l):i.onRemove&&i.onRemove(this.local[a].spec)}return this.children.length?lMe(this.children,o||[],e,t,r,s,i):o?new Br(o.sort(h0),b1):bi}add(e,t){return t.length?this==bi?Br.create(e,t):this.addInner(e,t,0):this}addInner(e,t,r){let s,i=0;e.forEach((a,l)=>{let c=l+r,u;if(u=aQ(t,a,c)){for(s||(s=this.children.slice());i<s.length&&s[i]<l;)i+=3;s[i]==l?s[i+2]=s[i+2].addInner(a,u,c+1):s.splice(i,0,l,l+a.nodeSize,ok(u,a,c+1,d0)),i+=3}});let o=oQ(i?lQ(t):t,-r);for(let a=0;a<o.length;a++)o[a].type.valid(e,o[a])||o.splice(a--,1);return new Br(o.length?this.local.concat(o).sort(h0):this.local,s||this.children)}remove(e){return e.length==0||this==bi?this:this.removeInner(e,0)}removeInner(e,t){let r=this.children,s=this.local;for(let i=0;i<r.length;i+=3){let o,a=r[i]+t,l=r[i+1]+t;for(let u=0,d;u<e.length;u++)(d=e[u])&&d.from>a&&d.to<l&&(e[u]=null,(o||(o=[])).push(d));if(!o)continue;r==this.children&&(r=this.children.slice());let c=r[i+2].removeInner(o,a+1);c!=bi?r[i+2]=c:(r.splice(i,3),i-=3)}if(s.length){for(let i=0,o;i<e.length;i++)if(o=e[i])for(let a=0;a<s.length;a++)s[a].eq(o,t)&&(s==this.local&&(s=this.local.slice()),s.splice(a--,1))}return r==this.children&&s==this.local?this:s.length||r.length?new Br(s,r):bi}forChild(e,t){if(this==bi)return this;if(t.isLeaf)return Br.empty;let r,s;for(let a=0;a<this.children.length;a+=3)if(this.children[a]>=e){this.children[a]==e&&(r=this.children[a+2]);break}let i=e+1,o=i+t.content.size;for(let a=0;a<this.local.length;a++){let l=this.local[a];if(l.from<o&&l.to>i&&l.type instanceof Oh){let c=Math.max(i,l.from)-i,u=Math.min(o,l.to)-i;c<u&&(s||(s=[])).push(l.copy(c,u))}}if(s){let a=new Br(s.sort(h0),b1);return r?new Ph([a,r]):a}return r||bi}eq(e){if(this==e)return!0;if(!(e instanceof Br)||this.local.length!=e.local.length||this.children.length!=e.children.length)return!1;for(let t=0;t<this.local.length;t++)if(!this.local[t].eq(e.local[t]))return!1;for(let t=0;t<this.children.length;t+=3)if(this.children[t]!=e.children[t]||this.children[t+1]!=e.children[t+1]||!this.children[t+2].eq(e.children[t+2]))return!1;return!0}locals(e){return LN(this.localsInner(e))}localsInner(e){if(this==bi)return b1;if(e.inlineContent||!this.local.some(Oh.is))return this.local;let t=[];for(let r=0;r<this.local.length;r++)this.local[r].type instanceof Oh||t.push(this.local[r]);return t}forEachSet(e){e(this)}}Br.empty=new Br([],[]),Br.removeOverlap=LN;const bi=Br.empty;class Ph{constructor(e){this.members=e}map(e,t){const r=this.members.map(s=>s.map(e,t,d0));return Ph.from(r)}forChild(e,t){if(t.isLeaf)return Br.empty;let r=[];for(let s=0;s<this.members.length;s++){let i=this.members[s].forChild(e,t);i!=bi&&(i instanceof Ph?r=r.concat(i.members):r.push(i))}return Ph.from(r)}eq(e){if(!(e instanceof Ph)||e.members.length!=this.members.length)return!1;for(let t=0;t<this.members.length;t++)if(!this.members[t].eq(e.members[t]))return!1;return!0}locals(e){let t,r=!0;for(let s=0;s<this.members.length;s++){let i=this.members[s].localsInner(e);if(i.length)if(!t)t=i;else{r&&(t=t.slice(),r=!1);for(let o=0;o<i.length;o++)t.push(i[o])}}return t?LN(r?t:t.sort(h0)):b1}static from(e){switch(e.length){case 0:return bi;case 1:return e[0];default:return new Ph(e.every(t=>t instanceof Br)?e:e.reduce((t,r)=>t.concat(r instanceof Br?r:r.members),[]))}}forEachSet(e){for(let t=0;t<this.members.length;t++)this.members[t].forEachSet(e)}}function lMe(n,e,t,r,s,i,o){let a=n.slice();for(let c=0,u=i;c<t.maps.length;c++){let d=0;t.maps[c].forEach((f,p,m,y)=>{let w=y-m-(p-f);for(let k=0;k<a.length;k+=3){let x=a[k+1];if(x<0||f>x+u-d)continue;let S=a[k]+u-d;p>=S?a[k+1]=f<=S?-2:-1:f>=u&&w&&(a[k]+=w,a[k+1]+=w)}d+=w}),u=t.maps[c].map(u,-1)}let l=!1;for(let c=0;c<a.length;c+=3)if(a[c+1]<0){if(a[c+1]==-2){l=!0,a[c+1]=-1;continue}let u=t.map(n[c]+i),d=u-s;if(d<0||d>=r.content.size){l=!0;continue}let f=t.map(n[c+1]+i,-1),p=f-s,{index:m,offset:y}=r.content.findIndex(d),w=r.maybeChild(m);if(w&&y==d&&y+w.nodeSize==p){let k=a[c+2].mapInner(t,w,u+1,n[c]+i+1,o);k!=bi?(a[c]=d,a[c+1]=p,a[c+2]=k):(a[c+1]=-2,l=!0)}else l=!0}if(l){let c=cMe(a,n,e,t,s,i,o),u=ok(c,r,0,o);e=u.local;for(let d=0;d<a.length;d+=3)a[d+1]<0&&(a.splice(d,3),d-=3);for(let d=0,f=0;d<u.children.length;d+=3){let p=u.children[d];for(;f<a.length&&a[f]<p;)f+=3;a.splice(f,0,u.children[d],u.children[d+1],u.children[d+2])}}return new Br(e.sort(h0),a)}function oQ(n,e){if(!e||!n.length)return n;let t=[];for(let r=0;r<n.length;r++){let s=n[r];t.push(new ai(s.from+e,s.to+e,s.type))}return t}function cMe(n,e,t,r,s,i,o){function a(l,c){for(let u=0;u<l.local.length;u++){let d=l.local[u].map(r,s,c);d?t.push(d):o.onRemove&&o.onRemove(l.local[u].spec)}for(let u=0;u<l.children.length;u+=3)a(l.children[u+2],l.children[u]+c+1)}for(let l=0;l<n.length;l+=3)n[l+1]==-1&&a(n[l+2],e[l]+i+1);return t}function aQ(n,e,t){if(e.isLeaf)return null;let r=t+e.nodeSize,s=null;for(let i=0,o;i<n.length;i++)(o=n[i])&&o.from>t&&o.to<r&&((s||(s=[])).push(o),n[i]=null);return s}function lQ(n){let e=[];for(let t=0;t<n.length;t++)n[t]!=null&&e.push(n[t]);return e}function ok(n,e,t,r){let s=[],i=!1;e.forEach((a,l)=>{let c=aQ(n,a,l+t);if(c){i=!0;let u=ok(c,a,t+l+1,r);u!=bi&&s.push(l,l+a.nodeSize,u)}});let o=oQ(i?lQ(n):n,-t).sort(h0);for(let a=0;a<o.length;a++)o[a].type.valid(e,o[a])||(r.onRemove&&r.onRemove(o[a].spec),o.splice(a--,1));return o.length||s.length?new Br(o,s):bi}function h0(n,e){return n.from-e.from||n.to-e.to}function LN(n){let e=n;for(let t=0;t<e.length-1;t++){let r=e[t];if(r.from!=r.to)for(let s=t+1;s<e.length;s++){let i=e[s];if(i.from==r.from){i.to!=r.to&&(e==n&&(e=n.slice()),e[s]=i.copy(i.from,r.to),cQ(e,s+1,i.copy(r.to,i.to)));continue}else{i.from<r.to&&(e==n&&(e=n.slice()),e[t]=r.copy(r.from,i.from),cQ(e,s,r.copy(i.from,r.to)));break}}}return e}function cQ(n,e,t){for(;e<n.length&&h0(t,n[e])>0;)e++;n.splice(e,0,t)}function FN(n){let e=[];return n.someProp("decorations",t=>{let r=t(n.state);r&&r!=bi&&e.push(r)}),n.cursorWrapper&&e.push(Br.create(n.state.doc,[n.cursorWrapper.deco])),Ph.from(e)}const uMe={childList:!0,characterData:!0,characterDataOldValue:!0,attributes:!0,attributeOldValue:!0,subtree:!0},dMe=ao&&_h<=11;class hMe{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}}class fMe{constructor(e,t){this.view=e,this.handleDOMChange=t,this.queue=[],this.flushingSoon=-1,this.observer=null,this.currentSelection=new hMe,this.onCharData=null,this.suppressingSelectionUpdates=!1,this.lastChangedTextNode=null,this.observer=window.MutationObserver&&new window.MutationObserver(r=>{for(let s=0;s<r.length;s++)this.queue.push(r[s]);ao&&_h<=11&&r.some(s=>s.type=="childList"&&s.removedNodes.length||s.type=="characterData"&&s.oldValue.length>s.target.nodeValue.length)?this.flushSoon():oi&&e.composing&&r.some(s=>s.type=="childList"&&s.target.nodeName=="TR")?(e.input.badSafariComposition=!0,this.flushSoon()):this.flush()}),dMe&&(this.onCharData=r=>{this.queue.push({target:r.target,type:"characterData",oldValue:r.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,uMe)),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(LJ(this.view)){if(this.suppressingSelectionUpdates)return $u(this.view);if(ao&&_h<=11&&!this.view.state.selection.empty){let e=this.view.domSelectionRange();if(e.focusNode&&o0(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=new Set,r;for(let i=e.focusNode;i;i=p1(i))t.add(i);for(let i=e.anchorNode;i;i=p1(i))if(t.has(i)){r=i;break}let s=r&&this.view.docView.nearestDesc(r);if(s&&s.ignoreMutation({type:"selection",target:r.nodeType==3?r.parentNode:r}))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 r=e.domSelectionRange(),s=!this.suppressingSelectionUpdates&&!this.currentSelection.eq(r)&&LJ(e)&&!this.ignoreSelectionChange(r),i=-1,o=-1,a=!1,l=[];if(e.editable)for(let u=0;u<t.length;u++){let d=this.registerMutation(t[u],l);d&&(i=i<0?d.from:Math.min(d.from,i),o=o<0?d.to:Math.max(d.to,o),d.typeOver&&(a=!0))}if(Ca&&l.length){let u=l.filter(d=>d.nodeName=="BR");if(u.length==2){let[d,f]=u;d.parentNode&&d.parentNode.parentNode==f.parentNode?f.remove():d.remove()}else{let{focusNode:d}=this.currentSelection;for(let f of u){let p=f.parentNode;p&&p.nodeName=="LI"&&(!d||gMe(e,d)!=p)&&f.remove()}}}else if((Us||oi)&&l.some(u=>u.nodeName=="BR")&&(e.input.lastKeyCode==8||e.input.lastKeyCode==46)){for(let u of l)if(u.nodeName=="BR"&&u.parentNode){let d=u.nextSibling;d&&d.nodeType==1&&d.contentEditable=="false"&&u.parentNode.removeChild(u)}}let c=null;i<0&&s&&e.input.lastFocus>Date.now()-200&&Math.max(e.input.lastTouch,e.input.lastClick.time)<Date.now()-300&&Q7(r)&&(c=SN(e))&&c.eq(nn.near(e.state.doc.resolve(0),1))?(e.input.lastFocus=0,$u(e),this.currentSelection.set(r),e.scrollToSelection()):(i>-1||s)&&(i>-1&&(e.docView.markDirty(i,o),pMe(e)),e.input.badSafariComposition&&(e.input.badSafariComposition=!1,yMe(e,l)),this.handleDOMChange(i,o,a,l),e.docView&&e.docView.dirty?e.updateState(e.state):this.currentSelection.eq(r)||$u(e),this.currentSelection.set(r))}registerMutation(e,t){if(t.indexOf(e.target)>-1)return null;let r=this.view.docView.nearestDesc(e.target);if(e.type=="attributes"&&(r==this.view.docView||e.attributeName=="contenteditable"||e.attributeName=="style"&&!e.oldValue&&!e.target.getAttribute("style"))||!r||r.ignoreMutation(e))return null;if(e.type=="childList"){for(let u=0;u<e.addedNodes.length;u++){let d=e.addedNodes[u];t.push(d),d.nodeType==3&&(this.lastChangedTextNode=d)}if(r.contentDOM&&r.contentDOM!=r.dom&&!r.contentDOM.contains(e.target))return{from:r.posBefore,to:r.posAfter};let s=e.previousSibling,i=e.nextSibling;if(ao&&_h<=11&&e.addedNodes.length)for(let u=0;u<e.addedNodes.length;u++){let{previousSibling:d,nextSibling:f}=e.addedNodes[u];(!d||Array.prototype.indexOf.call(e.addedNodes,d)<0)&&(s=d),(!f||Array.prototype.indexOf.call(e.addedNodes,f)<0)&&(i=f)}let o=s&&s.parentNode==e.target?ii(s)+1:0,a=r.localPosFromDOM(e.target,o,-1),l=i&&i.parentNode==e.target?ii(i):e.target.childNodes.length,c=r.localPosFromDOM(e.target,l,1);return{from:a,to:c}}else return e.type=="attributes"?{from:r.posAtStart-r.border,to:r.posAtEnd+r.border}:(this.lastChangedTextNode=e.target,{from:r.posAtStart,to:r.posAtEnd,typeOver:e.target.nodeValue==e.oldValue})}}let uQ=new WeakMap,dQ=!1;function pMe(n){if(!uQ.has(n)&&(uQ.set(n,null),["normal","nowrap","pre-line"].indexOf(getComputedStyle(n.dom).whiteSpace)!==-1)){if(n.requiresGeckoHackNode=Ca,dQ)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."),dQ=!0}}function hQ(n,e){let t=e.startContainer,r=e.startOffset,s=e.endContainer,i=e.endOffset,o=n.domAtPos(n.state.selection.anchor);return o0(o.node,o.offset,s,i)&&([t,r,s,i]=[s,i,t,r]),{anchorNode:t,anchorOffset:r,focusNode:s,focusOffset:i}}function mMe(n,e){if(e.getComposedRanges){let s=e.getComposedRanges(n.root)[0];if(s)return hQ(n,s)}let t;function r(s){s.preventDefault(),s.stopImmediatePropagation(),t=s.getTargetRanges()[0]}return n.dom.addEventListener("beforeinput",r,!0),document.execCommand("indent"),n.dom.removeEventListener("beforeinput",r,!0),t?hQ(n,t):null}function gMe(n,e){for(let t=e.parentNode;t&&t!=n.dom;t=t.parentNode){let r=n.docView.nearestDesc(t,!0);if(r&&r.node.isBlock)return t}return null}function yMe(n,e){var t;let{focusNode:r,focusOffset:s}=n.domSelectionRange();for(let i of e)if(((t=i.parentNode)===null||t===void 0?void 0:t.nodeName)=="TR"){let o=i.nextSibling;for(;o&&o.nodeName!="TD"&&o.nodeName!="TH";)o=o.nextSibling;if(o){let a=o;for(;;){let l=a.firstChild;if(!l||l.nodeType!=1||l.contentEditable=="false"||/^(BR|IMG)$/.test(l.nodeName))break;a=l}a.insertBefore(i,a.firstChild),r==i&&n.domSelection().collapse(i,s)}else i.parentNode.removeChild(i)}}function vMe(n,e,t){let{node:r,fromOffset:s,toOffset:i,from:o,to:a}=n.docView.parseRange(e,t),l=n.domSelectionRange(),c,u=l.anchorNode;if(u&&n.dom.contains(u.nodeType==1?u:u.parentNode)&&(c=[{node:u,offset:l.anchorOffset}],Q7(l)||c.push({node:l.focusNode,offset:l.focusOffset})),Us&&n.input.lastKeyCode===8)for(let w=i;w>s;w--){let k=r.childNodes[w-1],x=k.pmViewDesc;if(k.nodeName=="BR"&&!x){i=w;break}if(!x||x.size)break}let d=n.state.doc,f=n.someProp("domParser")||Qp.fromSchema(n.state.schema),p=d.resolve(o),m=null,y=f.parse(r,{topNode:p.parent,topMatch:p.parent.contentMatchAt(p.index()),topOpen:!0,from:s,to:i,preserveWhitespace:p.parent.type.whitespace=="pre"?"full":!0,findPositions:c,ruleFromNode:bMe,context:p});if(c&&c[0].pos!=null){let w=c[0].pos,k=c[1]&&c[1].pos;k==null&&(k=w),m={anchor:w+o,head:k+o}}return{doc:y,sel:m,from:o,to:a}}function bMe(n){let e=n.pmViewDesc;if(e)return e.parseRule();if(n.nodeName=="BR"&&n.parentNode){if(oi&&/^(ul|ol)$/i.test(n.parentNode.nodeName)){let t=document.createElement("div");return t.appendChild(document.createElement("li")),{skip:t}}else if(n.parentNode.lastChild==n||oi&&/^(tr|table)$/i.test(n.parentNode.nodeName))return{ignore:!0}}else if(n.nodeName=="IMG"&&n.getAttribute("mark-placeholder"))return{ignore:!0};return null}const wMe=/^(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 xMe(n,e,t,r,s){let i=n.input.compositionPendingChanges||(n.composing?n.input.compositionID:0);if(n.input.compositionPendingChanges=0,e<0){let O=n.input.lastSelectionTime>Date.now()-50?n.input.lastSelectionOrigin:null,I=SN(n,O);if(I&&!n.state.selection.eq(I)){if(Us&&Du&&n.input.lastKeyCode===13&&Date.now()-100<n.input.lastKeyCodeTime&&n.someProp("handleKeyDown",D=>D(n,a0(13,"Enter"))))return;let R=n.state.tr.setSelection(I);O=="pointer"?R.setMeta("pointer",!0):O=="key"&&R.scrollIntoView(),i&&R.setMeta("composition",i),n.dispatch(R)}return}let o=n.state.doc.resolve(e),a=o.sharedDepth(t);e=o.before(a+1),t=n.state.doc.resolve(t).after(a+1);let l=n.state.selection,c=vMe(n,e,t),u=n.state.doc,d=u.slice(c.from,c.to),f,p;n.input.lastKeyCode===8&&Date.now()-100<n.input.lastKeyCodeTime?(f=n.state.selection.to,p="end"):(f=n.state.selection.from,p="start"),n.input.lastKeyCode=null;let m=SMe(d.content,c.doc.content,c.from,f,p);if(m&&n.input.domChangeCount++,(m1&&n.input.lastIOSEnter>Date.now()-225||Du)&&s.some(O=>O.nodeType==1&&!wMe.test(O.nodeName))&&(!m||m.endA>=m.endB)&&n.someProp("handleKeyDown",O=>O(n,a0(13,"Enter")))){n.input.lastIOSEnter=0;return}if(!m)if(r&&l instanceof It&&!l.empty&&l.$head.sameParent(l.$anchor)&&!n.composing&&!(c.sel&&c.sel.anchor!=c.sel.head))m={start:l.from,endA:l.to,endB:l.to};else{if(c.sel){let O=fQ(n,n.state.doc,c.sel);if(O&&!O.eq(n.state.selection)){let I=n.state.tr.setSelection(O);i&&I.setMeta("composition",i),n.dispatch(I)}}return}n.state.selection.from<n.state.selection.to&&m.start==m.endB&&n.state.selection instanceof It&&(m.start>n.state.selection.from&&m.start<=n.state.selection.from+2&&n.state.selection.from>=c.from?m.start=n.state.selection.from:m.endA<n.state.selection.to&&m.endA>=n.state.selection.to-2&&n.state.selection.to<=c.to&&(m.endB+=n.state.selection.to-m.endA,m.endA=n.state.selection.to)),ao&&_h<=11&&m.endB==m.start+1&&m.endA==m.start&&m.start>c.from&&c.doc.textBetween(m.start-c.from-1,m.start-c.from+1)=="  "&&(m.start--,m.endA--,m.endB--);let y=c.doc.resolveNoCache(m.start-c.from),w=c.doc.resolveNoCache(m.endB-c.from),k=u.resolve(m.start),x=y.sameParent(w)&&y.parent.inlineContent&&k.end()>=m.endA;if((m1&&n.input.lastIOSEnter>Date.now()-225&&(!x||s.some(O=>O.nodeName=="DIV"||O.nodeName=="P"))||!x&&y.pos<c.doc.content.size&&(!y.sameParent(w)||!y.parent.inlineContent)&&y.pos<w.pos&&!/\S/.test(c.doc.textBetween(y.pos,w.pos,"","")))&&n.someProp("handleKeyDown",O=>O(n,a0(13,"Enter")))){n.input.lastIOSEnter=0;return}if(n.state.selection.anchor>m.start&&CMe(u,m.start,m.endA,y,w)&&n.someProp("handleKeyDown",O=>O(n,a0(8,"Backspace")))){Du&&Us&&n.domObserver.suppressSelectionUpdates();return}Us&&m.endB==m.start&&(n.input.lastChromeDelete=Date.now()),Du&&!x&&y.start()!=w.start()&&w.parentOffset==0&&y.depth==w.depth&&c.sel&&c.sel.anchor==c.sel.head&&c.sel.head==m.endA&&(m.endB-=2,w=c.doc.resolveNoCache(m.endB-c.from),setTimeout(()=>{n.someProp("handleKeyDown",function(O){return O(n,a0(13,"Enter"))})},20));let S=m.start,_=m.endA,A=O=>{let I=O||n.state.tr.replace(S,_,c.doc.slice(m.start-c.from,m.endB-c.from));if(c.sel){let R=fQ(n,I.doc,c.sel);R&&!(Us&&n.composing&&R.empty&&(m.start!=m.endB||n.input.lastChromeDelete<Date.now()-100)&&(R.head==S||R.head==I.mapping.map(_)-1)||ao&&R.empty&&R.head==S)&&I.setSelection(R)}return i&&I.setMeta("composition",i),I.scrollIntoView()},T;if(x)if(y.pos==w.pos){ao&&_h<=11&&y.parentOffset==0&&(n.domObserver.suppressSelectionUpdates(),setTimeout(()=>$u(n),20));let O=A(n.state.tr.delete(S,_)),I=u.resolve(m.start).marksAcross(u.resolve(m.endA));I&&O.ensureMarks(I),n.dispatch(O)}else if(m.endA==m.endB&&(T=kMe(y.parent.content.cut(y.parentOffset,w.parentOffset),k.parent.content.cut(k.parentOffset,m.endA-k.start())))){let O=A(n.state.tr);T.type=="add"?O.addMark(S,_,T.mark):O.removeMark(S,_,T.mark),n.dispatch(O)}else if(y.parent.child(y.index()).isText&&y.index()==w.index()-(w.textOffset?0:1)){let O=y.parent.textBetween(y.parentOffset,w.parentOffset),I=()=>A(n.state.tr.insertText(O,S,_));n.someProp("handleTextInput",R=>R(n,S,_,O,I))||n.dispatch(I())}else n.dispatch(A());else n.dispatch(A())}function fQ(n,e,t){return Math.max(t.anchor,t.head)>e.content.size?null:_N(n,e.resolve(t.anchor),e.resolve(t.head))}function kMe(n,e){let t=n.firstChild.marks,r=e.firstChild.marks,s=t,i=r,o,a,l;for(let u=0;u<r.length;u++)s=r[u].removeFromSet(s);for(let u=0;u<t.length;u++)i=t[u].removeFromSet(i);if(s.length==1&&i.length==0)a=s[0],o="add",l=u=>u.mark(a.addToSet(u.marks));else if(s.length==0&&i.length==1)a=i[0],o="remove",l=u=>u.mark(a.removeFromSet(u.marks));else return null;let c=[];for(let u=0;u<e.childCount;u++)c.push(l(e.child(u)));if($e.from(c).eq(n))return{mark:a,type:o}}function CMe(n,e,t,r,s){if(t-e<=s.pos-r.pos||jN(r,!0,!1)<s.pos)return!1;let i=n.resolve(e);if(!r.parent.isTextblock){let a=i.nodeAfter;return a!=null&&t==e+a.nodeSize}if(i.parentOffset<i.parent.content.size||!i.parent.isTextblock)return!1;let o=n.resolve(jN(i,!0,!0));return!o.parent.isTextblock||o.pos>t||jN(o,!0,!1)<t?!1:r.parent.content.cut(r.parentOffset).eq(o.parent.content)}function jN(n,e,t){let r=n.depth,s=e?n.end():n.pos;for(;r>0&&(e||n.indexAfter(r)==n.node(r).childCount);)r--,s++,e=!1;if(t){let i=n.node(r).maybeChild(n.indexAfter(r));for(;i&&!i.isLeaf;)i=i.firstChild,s++}return s}function SMe(n,e,t,r,s){let i=n.findDiffStart(e,t);if(i==null)return null;let{a:o,b:a}=n.findDiffEnd(e,t+n.size,t+e.size);if(s=="end"){let l=Math.max(0,i-Math.min(o,a));r-=o+l-i}if(o<i&&n.size<e.size){let l=r<=i&&r>=o?i-r:0;i-=l,i&&i<e.size&&pQ(e.textBetween(i-1,i+1))&&(i+=l?1:-1),a=i+(a-o),o=i}else if(a<i){let l=r<=i&&r>=a?i-r:0;i-=l,i&&i<n.size&&pQ(n.textBetween(i-1,i+1))&&(i+=l?1:-1),o=i+(o-a),a=i}return{start:i,endA:o,endB:a}}function pQ(n){if(n.length!=2)return!1;let e=n.charCodeAt(0),t=n.charCodeAt(1);return e>=56320&&e<=57343&&t>=55296&&t<=56319}class mQ{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 BNe,this.prevDirectPlugins=[],this.pluginViews=[],this.requiresGeckoHackNode=!1,this.dragging=null,this._props=t,this.state=t.state,this.directPlugins=t.plugins||[],this.directPlugins.forEach(wQ),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=vQ(this),yQ(this),this.nodeViews=bQ(this),this.docView=EJ(this.state.doc,gQ(this),FN(this),this.dom,this),this.domObserver=new fMe(this,(r,s,i,o)=>xMe(this,r,s,i,o)),this.domObserver.start(),VNe(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&&PN(this);let t=this._props;this._props=e,e.plugins&&(e.plugins.forEach(wQ),this.directPlugins=e.plugins),this.updateStateInner(e.state,t)}setProps(e){let t={};for(let r in this._props)t[r]=this._props[r];t.state=this.state;for(let r in e)t[r]=e[r];this.update(t)}updateState(e){this.updateStateInner(e,this._props)}updateStateInner(e,t){var r;let s=this.state,i=!1,o=!1;e.storedMarks&&this.composing&&(nQ(this),o=!0),this.state=e;let a=s.plugins!=e.plugins||this._props.plugins!=t.plugins;if(a||this._props.plugins!=t.plugins||this._props.nodeViews!=t.nodeViews){let p=bQ(this);_Me(p,this.nodeViews)&&(this.nodeViews=p,i=!0)}(a||t.handleDOMEvents!=this._props.handleDOMEvents)&&PN(this),this.editable=vQ(this),yQ(this);let l=FN(this),c=gQ(this),u=s.plugins!=e.plugins&&!s.doc.eq(e.doc)?"reset":e.scrollToSelection>s.scrollToSelection?"to selection":"preserve",d=i||!this.docView.matchesNode(e.doc,c,l);(d||!e.selection.eq(s.selection))&&(o=!0);let f=u=="preserve"&&o&&this.dom.style.overflowAnchor==null&&tNe(this);if(o){this.domObserver.stop();let p=d&&(ao||Us)&&!this.composing&&!s.selection.empty&&!e.selection.empty&&EMe(s.selection,e.selection);if(d){let m=Us?this.trackWrites=this.domSelectionRange().focusNode:null;this.composing&&(this.input.compositionNode=tMe(this)),(i||!this.docView.update(e.doc,c,l,this))&&(this.docView.updateOuterDeco(c),this.docView.destroy(),this.docView=EJ(e.doc,c,l,this.dom,this)),m&&(!this.trackWrites||!this.dom.contains(this.trackWrites))&&(p=!0)}p||!(this.input.mouseDown&&this.domObserver.currentSelection.eq(this.domSelectionRange())&&ENe(this))?$u(this,p):(RJ(this,e.selection),this.domObserver.setCurSelection()),this.domObserver.start()}this.updatePluginViews(s),!((r=this.dragging)===null||r===void 0)&&r.node&&!s.doc.eq(e.doc)&&this.updateDraggedNode(this.dragging,s),u=="reset"?this.dom.scrollTop=0:u=="to selection"?this.scrollToSelection():f&&nNe(f)}scrollToSelection(){let e=this.domSelectionRange().focusNode;if(!(!e||!this.dom.contains(e.nodeType==1?e:e.parentNode))){if(!this.someProp("handleScrollToSelection",t=>t(this)))if(this.state.selection instanceof Ft){let t=this.docView.domAfterPos(this.state.selection.from);t.nodeType==1&&hJ(this,t.getBoundingClientRect(),e)}else hJ(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 t=0;t<this.directPlugins.length;t++){let r=this.directPlugins[t];r.spec.view&&this.pluginViews.push(r.spec.view(this))}for(let t=0;t<this.state.plugins.length;t++){let r=this.state.plugins[t];r.spec.view&&this.pluginViews.push(r.spec.view(this))}}else for(let t=0;t<this.pluginViews.length;t++){let r=this.pluginViews[t];r.update&&r.update(this,e)}}updateDraggedNode(e,t){let r=e.node,s=-1;if(this.state.doc.nodeAt(r.from)==r.node)s=r.from;else{let i=r.from+(this.state.doc.content.size-t.doc.content.size);(i>0&&this.state.doc.nodeAt(i))==r.node&&(s=i)}this.dragging=new sQ(e.slice,e.move,s<0?void 0:Ft.create(this.state.doc,s))}someProp(e,t){let r=this._props&&this._props[e],s;if(r!=null&&(s=t?t(r):r))return s;for(let o=0;o<this.directPlugins.length;o++){let a=this.directPlugins[o].props[e];if(a!=null&&(s=t?t(a):a))return s}let i=this.state.plugins;if(i)for(let o=0;o<i.length;o++){let a=i[o].props[e];if(a!=null&&(s=t?t(a):a))return s}}hasFocus(){if(ao){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&&rNe(this.dom),$u(this),this.domObserver.start()}get root(){let e=this._root;if(e==null){for(let t=this.dom.parentNode;t;t=t.parentNode)if(t.nodeType==9||t.nodeType==11&&t.host)return t.getSelection||(Object.getPrototypeOf(t).getSelection=()=>t.ownerDocument.getSelection()),this._root=t}return e||document}updateRoot(){this._root=null}posAtCoords(e){return lNe(this,e)}coordsAtPos(e,t=1){return vJ(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,r=-1){let s=this.docView.posFromDOM(e,t,r);if(s==null)throw new RangeError("DOM position not inside the editor");return s}endOfTextblock(e,t){return fNe(this,t||this.state,e)}pasteHTML(e,t){return h3(this,"",e,!1,t||new ClipboardEvent("paste"))}pasteText(e,t){return h3(this,e,null,!0,t||new ClipboardEvent("paste"))}serializeForClipboard(e){return NN(this,e)}destroy(){this.docView&&(zNe(this),this.destroyPluginViews(),this.mounted?(this.docView.update(this.state.doc,[],FN(this),this),this.dom.textContent=""):this.dom.parentNode&&this.dom.parentNode.removeChild(this.dom),this.docView.destroy(),this.docView=null,UAe())}get isDestroyed(){return this.docView==null}dispatchEvent(e){return qNe(this,e)}domSelectionRange(){let e=this.domSelection();return e?oi&&this.root.nodeType===11&&ZAe(this.dom.ownerDocument)==this.dom&&mMe(this,e)||e:{focusNode:null,focusOffset:0,anchorNode:null,anchorOffset:0}}domSelection(){return this.root.getSelection()}}mQ.prototype.dispatch=function(n){let e=this._props.dispatchTransaction;e?e.call(this,n):this.updateState(this.state.apply(n))};function gQ(n){let e=Object.create(null);return e.class="ProseMirror",e.contenteditable=String(n.editable),n.someProp("attributes",t=>{if(typeof t=="function"&&(t=t(n.state)),t)for(let r in t)r=="class"?e.class+=" "+t[r]:r=="style"?e.style=(e.style?e.style+";":"")+t[r]:!e[r]&&r!="contenteditable"&&r!="nodeName"&&(e[r]=String(t[r]))}),e.translate||(e.translate="no"),[ai.node(0,n.state.doc.content.size,e)]}function yQ(n){if(n.markCursor){let e=document.createElement("img");e.className="ProseMirror-separator",e.setAttribute("mark-placeholder","true"),e.setAttribute("alt",""),n.cursorWrapper={dom:e,deco:ai.widget(n.state.selection.from,e,{raw:!0,marks:n.markCursor})}}else n.cursorWrapper=null}function vQ(n){return!n.someProp("editable",e=>e(n.state)===!1)}function EMe(n,e){let t=Math.min(n.$anchor.sharedDepth(n.head),e.$anchor.sharedDepth(e.head));return n.$anchor.start(t)!=e.$anchor.start(t)}function bQ(n){let e=Object.create(null);function t(r){for(let s in r)Object.prototype.hasOwnProperty.call(e,s)||(e[s]=r[s])}return n.someProp("nodeViews",t),n.someProp("markViews",t),e}function _Me(n,e){let t=0,r=0;for(let s in n){if(n[s]!=e[s])return!0;t++}for(let s in e)r++;return t!=r}function wQ(n){if(n.spec.state||n.spec.filterTransaction||n.spec.appendTransaction)throw new RangeError("Plugins passed directly to the view must not have a state component")}function Lu(n,e){return n.meta={package:"@milkdown/core",group:"System",...e},n}const xQ={text:(n,e,t,r)=>{const s=n.value;return/^[^*_\\]*\s+$/.test(s)?s:t.safe(s,{...r,encode:[]})},strong:(n,e,t,r)=>{const s=n.marker||t.options.strong||"*",i=t.enter("strong"),o=t.createTracker(r);let a=o.move(s+s);return a+=o.move(t.containerPhrasing(n,{before:a,after:s,...o.current()})),a+=o.move(s+s),i(),a},emphasis:(n,e,t,r)=>{const s=n.marker||t.options.emphasis||"*",i=t.enter("emphasis"),o=t.createTracker(r);let a=o.move(s);return a+=o.move(t.containerPhrasing(n,{before:a,after:s,...o.current()})),a+=o.move(s),i(),a}},Ri=kn({},"editorView"),p3=kn({},"editorState"),BN=kn([],"initTimer"),VN=kn({},"editor"),m3=kn([],"inputRules"),Ih=kn([],"prosePlugins"),g3=kn([],"remarkPlugins"),y3=kn([],"nodeView"),v3=kn([],"markView"),f0=kn(LA().use(xA).use(NA),"remark"),b3=kn({handlers:xQ,encode:[]},"remarkStringifyOptions"),ak=uc("ConfigReady");function TMe(n){const e=t=>(t.record(ak),async()=>(await n(t),t.done(ak),()=>{t.clearTimer(ak)}));return Lu(e,{displayName:"Config"}),e}const p0=uc("InitReady");function AMe(n){const e=t=>(t.inject(VN,n).inject(Ih,[]).inject(g3,[]).inject(m3,[]).inject(y3,[]).inject(v3,[]).inject(b3,{handlers:xQ,encode:[]}).inject(f0,LA().use(xA).use(NA)).inject(BN,[ak]).record(p0),async()=>{await t.waitTimers(BN);const r=t.get(b3);return t.set(f0,LA().use(xA).use(NA,r)),t.done(p0),()=>{t.remove(VN).remove(Ih).remove(g3).remove(m3).remove(y3).remove(v3).remove(b3).remove(f0).remove(BN).clearTimer(p0)}});return Lu(e,{displayName:"Init"}),e}const $i=uc("SchemaReady"),zN=kn([],"schemaTimer"),gc=kn({},"schema"),w3=kn([],"nodes"),x3=kn([],"marks");function kQ(n){var e;return{...n,parseDOM:(e=n.parseDOM)==null?void 0:e.map(t=>({priority:n.priority,...t}))}}const CQ=n=>(n.inject(gc,{}).inject(w3,[]).inject(x3,[]).inject(zN,[p0]).record($i),async()=>{await n.waitTimers(zN);const e=n.get(f0),r=n.get(g3).reduce((a,l)=>a.use(l.plugin,l.options),e);n.set(f0,r);const s=Object.fromEntries(n.get(w3).map(([a,l])=>[a,kQ(l)])),i=Object.fromEntries(n.get(x3).map(([a,l])=>[a,kQ(l)])),o=new ZCe({nodes:s,marks:i});return n.set(gc,o),n.done($i),()=>{n.remove(gc).remove(w3).remove(x3).remove(zN).clearTimer($i)}});Lu(CQ,{displayName:"Schema"});class SQ{constructor(){N(this,Im);N(this,Ba);M(this,Im,new PY),M(this,Ba,null),this.setCtx=e=>{M(this,Ba,e)},this.chain=()=>{if(h(this,Ba)==null)throw aA();const e=h(this,Ba),t=[],r=this.get.bind(this),s={run:()=>{const o=f1(...t),a=e.get(Ri);return o(a.state,a.dispatch,a)},inline:o=>(t.push(o),s),pipe:i.bind(this)};function i(o,a){const l=r(o);return t.push(l(a)),s}return s}}get ctx(){return h(this,Ba)}create(e,t){const r=e.create(h(this,Im).sliceMap);return r.set(t),r}get(e){return h(this,Im).get(e).get()}remove(e){return h(this,Im).remove(e)}call(e,t){if(h(this,Ba)==null)throw aA();const s=this.get(e)(t),i=h(this,Ba).get(Ri);return s(i.state,i.dispatch,i)}inline(e){if(h(this,Ba)==null)throw aA();const t=h(this,Ba).get(Ri);return e(t.state,t.dispatch,t)}}Im=new WeakMap,Ba=new WeakMap;function NMe(n="cmdKey"){return kn(()=>()=>!1,n)}const ft=kn(new SQ,"commands"),HN=kn([$i],"commandsTimer"),k3=uc("CommandsReady"),EQ=n=>{const e=new SQ;return e.setCtx(n),n.inject(ft,e).inject(HN,[$i]).record(k3),async()=>(await n.waitTimers(HN),n.done(k3),()=>{n.remove(ft).remove(HN).clearTimer(k3)})};Lu(EQ,{displayName:"Commands"});function MMe(n){const e=f1(pAe,rN,ZTe,BX);return n.Backspace=e,n}class _Q{constructor(){N(this,Dm);N(this,xo);M(this,Dm,null),M(this,xo,[]),this.setCtx=e=>{M(this,Dm,e)},this.add=e=>(h(this,xo).push(e),()=>{M(this,xo,h(this,xo).filter(t=>t!==e))}),this.addObjectKeymap=e=>{const t=[];return Object.entries(e).forEach(([r,s])=>{if(typeof s=="function"){const i={key:r,onRun:()=>s};h(this,xo).push(i),t.push(()=>{M(this,xo,h(this,xo).filter(o=>o!==i))})}else h(this,xo).push(s),t.push(()=>{M(this,xo,h(this,xo).filter(i=>i!==s))})}),()=>{t.forEach(r=>r())}},this.addBaseKeymap=()=>{const e=MMe(hAe);return this.addObjectKeymap(e)},this.build=()=>{const e={};return h(this,xo).forEach(r=>{e[r.key]=[...e[r.key]||[],r]}),Object.fromEntries(Object.entries(e).map(([r,s])=>{const i=s.sort((a,l)=>(l.priority??50)-(a.priority??50));return[r,(a,l,c)=>{const u=h(this,Dm);if(u==null)throw g7();const d=i.map(p=>p.onRun(u));return f1(...d)(a,l,c)}]}))}}get ctx(){return h(this,Dm)}}Dm=new WeakMap,xo=new WeakMap;const lk=kn(new _Q,"keymap"),qN=kn([$i],"keymapTimer"),C3=uc("KeymapReady"),OMe=n=>{const e=new _Q;return e.setCtx(n),n.inject(lk,e).inject(qN,[$i]).record(C3),async()=>(await n.waitTimers(qN),n.done(C3),()=>{n.remove(lk).remove(qN).clearTimer(C3)})},ck=uc("ParserReady"),TQ=()=>{throw g7()},S3=kn(TQ,"parser"),UN=kn([],"parserTimer"),AQ=n=>(n.inject(S3,TQ).inject(UN,[$i]).record(ck),async()=>{await n.waitTimers(UN);const e=n.get(f0),t=n.get(gc);return n.set(S3,wTe.create(t,e)),n.done(ck),()=>{n.remove(S3).remove(UN).clearTimer(ck)}});Lu(AQ,{displayName:"Parser"});const E3=uc("SerializerReady"),WN=kn([],"serializerTimer"),NQ=()=>{throw g7()},w1=kn(NQ,"serializer"),MQ=n=>(n.inject(w1,NQ).inject(WN,[$i]).record(E3),async()=>{await n.waitTimers(WN);const e=n.get(f0),t=n.get(gc);return n.set(w1,kTe.create(t,e)),n.done(E3),()=>{n.remove(w1).remove(WN).clearTimer(E3)}});Lu(MQ,{displayName:"Serializer"});const uk=kn("","defaultValue"),GN=kn(n=>n,"stateOptions"),KN=kn([],"editorStateTimer"),dk=uc("EditorStateReady");function PMe(n,e,t){if(typeof n=="string")return e(n);if(n.type==="html")return Qp.fromSchema(t).parse(n.dom);if(n.type==="json")return Nu.fromJSON(t,n.value);throw vCe(n)}const IMe=new rs("MILKDOWN_STATE_TRACKER"),OQ=n=>(n.inject(uk,"").inject(p3,{}).inject(GN,e=>e).inject(KN,[ck,E3,k3,C3]).record(dk),async()=>{await n.waitTimers(KN);const e=n.get(gc),t=n.get(S3),r=n.get(m3),s=n.get(GN),i=n.get(Ih),o=n.get(uk),a=PMe(o,t,e),l=n.get(lk),c=l.addBaseKeymap(),u=[...i,new ks({key:IMe,state:{init:()=>{},apply:(p,m,y,w)=>{n.set(p3,w)}}}),CAe({rules:r}),qAe(l.build())];n.set(Ih,u);const d=s({schema:e,doc:a,plugins:u}),f=d1.create(d);return n.set(p3,f),n.done(dk),()=>{c(),n.remove(uk).remove(p3).remove(GN).remove(KN).clearTimer(dk)}});Lu(OQ,{displayName:"EditorState"});const _3=kn([],"pasteRule"),YN=kn([$i],"pasteRuleTimer"),hk=uc("PasteRuleReady"),PQ=n=>(n.inject(_3,[]).inject(YN,[$i]).record(hk),async()=>(await n.waitTimers(YN),n.done(hk),()=>{n.remove(_3).remove(YN).clearTimer(hk)}));Lu(PQ,{displayName:"PasteRule"});const fk=uc("EditorViewReady"),ZN=kn([],"editorViewTimer"),T3=kn({},"editorViewOptions"),pk=kn(null,"root"),XN=kn(null,"rootDOM"),JN=kn({},"rootAttrs");function DMe(n,e){const t=document.createElement("div");t.className="milkdown",n.appendChild(t),e.set(XN,t);const r=e.get(JN);return Object.entries(r).forEach(([s,i])=>t.setAttribute(s,i)),t}function RMe(n){n.classList.add("editor"),n.setAttribute("role","textbox")}const $Me=new rs("MILKDOWN_VIEW_CLEAR"),IQ=n=>(n.inject(pk,document.body).inject(Ri,{}).inject(T3,{}).inject(XN,null).inject(JN,{}).inject(ZN,[dk,hk]).record(fk),async()=>{await n.wait(p0);const e=n.get(pk)||document.body,t=typeof e=="string"?document.querySelector(e):e;n.update(Ih,l=>[new ks({key:$Me,view:c=>{const u=t?DMe(t,n):void 0;return(()=>{if(u&&t){const f=c.dom;t.replaceChild(u,f),u.appendChild(f)}})(),{destroy:()=>{u!=null&&u.parentNode&&(u==null||u.parentNode.replaceChild(c.dom,u)),u==null||u.remove()}}}}),...l]),await n.waitTimers(ZN);const r=n.get(p3),s=n.get(T3),i=Object.fromEntries(n.get(y3)),o=Object.fromEntries(n.get(v3)),a=new mQ(t,{state:r,nodeViews:i,markViews:o,transformPasted:(l,c,u)=>(n.get(_3).sort((d,f)=>(f.priority??50)-(d.priority??50)).map(d=>d.run).forEach(d=>{l=d(l,c,u)}),l),...s});return RMe(a.dom),n.set(Ri,a),n.done(fk),()=>{a==null||a.destroy(),n.remove(pk).remove(Ri).remove(T3).remove(XN).remove(JN).remove(ZN).clearTimer(fk)}});Lu(IQ,{displayName:"EditorView"});var mk=(n=>(n.Idle="Idle",n.OnCreate="OnCreate",n.Created="Created",n.OnDestroy="OnDestroy",n.Destroyed="Destroyed",n))(mk||{});const iD=class iD{constructor(){N(this,Rm);N(this,la);N(this,jd);N(this,gv);N(this,Fw);N(this,jw);N(this,ko);N(this,Bd);N(this,$m);N(this,Bw);N(this,Lm);N(this,yv);N(this,Vw);N(this,Zf);N(this,vv);M(this,Rm,!1),M(this,la,"Idle"),M(this,jd,[]),M(this,gv,()=>{}),M(this,Fw,new PY),M(this,jw,new MCe),M(this,ko,new Map),M(this,Bd,new Map),M(this,$m,new lA(h(this,Fw),h(this,jw))),M(this,Bw,()=>{const e=TMe(async r=>{await Promise.all(h(this,jd).map(s=>Promise.resolve(s(r))))}),t=[CQ,AQ,MQ,EQ,OMe,PQ,OQ,IQ,AMe(this),e];h(this,Lm).call(this,t,h(this,Bd))}),M(this,Lm,(e,t)=>{e.forEach(r=>{const s=h(this,$m).produce(h(this,Rm)?r.meta:void 0),i=r(s);t.set(r,{ctx:s,handler:i,cleanup:void 0})})}),M(this,yv,(e,t=!1)=>Promise.all([e].flat().map(async r=>{const s=h(this,ko).get(r),i=s==null?void 0:s.cleanup;return t?h(this,ko).delete(r):h(this,ko).set(r,{ctx:void 0,handler:void 0,cleanup:void 0}),typeof i=="function"?i():i}))),M(this,Vw,async()=>{await Promise.all([...h(this,Bd).entries()].map(async([e,{cleanup:t}])=>typeof t=="function"?t():t)),h(this,Bd).clear()}),M(this,Zf,e=>{M(this,la,e),h(this,gv).call(this,e)}),M(this,vv,e=>[...e.entries()].map(async([t,r])=>{const{ctx:s,handler:i}=r;if(!i)return;const o=await i();e.set(t,{ctx:s,handler:i,cleanup:o})})),this.enableInspector=(e=!0)=>(M(this,Rm,e),this),this.onStatusChange=e=>(M(this,gv,e),this),this.config=e=>(h(this,jd).push(e),this),this.removeConfig=e=>(M(this,jd,h(this,jd).filter(t=>t!==e)),this),this.use=e=>{const t=[e].flat();return t.flat().forEach(r=>{h(this,ko).set(r,{ctx:void 0,handler:void 0,cleanup:void 0})}),h(this,la)==="Created"&&h(this,Lm).call(this,t,h(this,ko)),this},this.remove=async e=>h(this,la)==="OnCreate"?(console.warn("[Milkdown]: You are trying to remove plugins when the editor is creating, this is not recommended, please check your code."),new Promise(t=>{setTimeout(()=>{t(this.remove(e))},50)})):(await h(this,yv).call(this,[e].flat(),!0),this),this.create=async()=>h(this,la)==="OnCreate"?this:(h(this,la)==="Created"&&await this.destroy(),h(this,Zf).call(this,"OnCreate"),h(this,Bw).call(this),h(this,Lm).call(this,[...h(this,ko).keys()],h(this,ko)),await Promise.all([h(this,vv).call(this,h(this,Bd)),h(this,vv).call(this,h(this,ko))].flat()),h(this,Zf).call(this,"Created"),this),this.destroy=async(e=!1)=>h(this,la)==="Destroyed"||h(this,la)==="OnDestroy"?this:h(this,la)==="OnCreate"?new Promise(t=>{setTimeout(()=>{t(this.destroy(e))},50)}):(e&&M(this,jd,[]),h(this,Zf).call(this,"OnDestroy"),await h(this,yv).call(this,[...h(this,ko).keys()],e),await h(this,Vw).call(this),h(this,Zf).call(this,"Destroyed"),this),this.action=e=>e(h(this,$m)),this.inspect=()=>h(this,Rm)?[...h(this,Bd).values(),...h(this,ko).values()].map(({ctx:e})=>{var t;return(t=e==null?void 0:e.inspector)==null?void 0:t.read()}).filter(e=>!!e):(console.warn("[Milkdown]: You are trying to collect inspection when inspector is disabled, please enable inspector by `editor.enableInspector()` first."),[])}static make(){return new iD}get ctx(){return h(this,$m)}get status(){return h(this,la)}};Rm=new WeakMap,la=new WeakMap,jd=new WeakMap,gv=new WeakMap,Fw=new WeakMap,jw=new WeakMap,ko=new WeakMap,Bd=new WeakMap,$m=new WeakMap,Bw=new WeakMap,Lm=new WeakMap,yv=new WeakMap,Vw=new WeakMap,Zf=new WeakMap,vv=new WeakMap;let QN=iD,LMe=n=>crypto.getRandomValues(new Uint8Array(n)),FMe=(n,e,t)=>{let r=(2<<Math.log2(n.length-1))-1,s=-~(1.6*r*e/n.length);return(i=e)=>{let o="";for(;;){let a=t(s),l=s|0;for(;l--;)if(o+=n[a[l]&r]||"",o.length>=i)return o}}},DQ=(n,e=21)=>FMe(n,e|0,LMe);DQ("abcedfghicklmn",10);function zt(n,e){const t=NMe(n),r=s=>async()=>{r.key=t,await s.wait(k3);const i=e(s);return s.get(ft).create(t,i),r.run=o=>s.get(ft).call(n,o),()=>{s.get(ft).remove(t)}};return r}function lo(n){const e=t=>async()=>{await t.wait($i);const r=n(t);return t.update(m3,s=>[...s,r]),e.inputRule=r,()=>{t.update(m3,s=>s.filter(i=>i!==r))}};return e}function jMe(n){const e=t=>async()=>{await t.wait($i);const r=n(t);return t.update(_3,s=>[...s,r]),e.pasteRule=r,()=>{t.update(_3,s=>s.filter(i=>i!==r))}};return e}function BMe(n,e){const t=r=>async()=>{const s=e(r);return r.update(x3,i=>[...i.filter(o=>o[0]!==n),[n,s]]),t.id=n,t.schema=s,()=>{r.update(x3,i=>i.filter(([o])=>o!==n))}};return t.type=r=>{const s=r.get(gc).marks[n];if(!s)throw _Ce(n);return s},t}function eM(n,e){const t=r=>async()=>{const s=e(r);return r.update(w3,i=>[...i.filter(o=>o[0]!==n),[n,s]]),t.id=n,t.schema=s,()=>{r.update(w3,i=>i.filter(([o])=>o!==n))}};return t.type=r=>{const s=r.get(gc).nodes[n];if(!s)throw ECe(n);return s},t}function Li(n){let e;const t=r=>async()=>(await r.wait($i),e=n(r),r.update(Ih,s=>[...s,e]),()=>{r.update(Ih,s=>s.filter(i=>i!==e))});return t.plugin=()=>e,t.key=()=>e.spec.key,t}function RQ(n){const e=t=>async()=>{await t.wait(C3);const r=t.get(lk),s=n(t),i=r.addObjectKeymap(s);return e.keymap=s,()=>{i()}};return e}function VMe(n,e){const t=r=>async()=>{await r.wait($i);const s=e(r);return n.type(r)instanceof x7?r.update(y3,i=>[...i,[n.id,s]]):r.update(v3,i=>[...i,[n.id,s]]),t.view=s,t.type=n,()=>{n.type(r)instanceof x7?r.update(y3,i=>i.filter(o=>o[0]!==n.id)):r.update(v3,i=>i.filter(o=>o[0]!==n.id))}};return t}function Zr(n,e){const t=kn(n,e),r=s=>(s.inject(t),()=>()=>{s.remove(t)});return r.key=t,r}function ss(n,e){const t=Zr(e,n),r=eM(n,i=>i.get(t.key)(i)),s=[t,r];return s.id=r.id,s.node=r,s.type=i=>r.type(i),s.ctx=t,s.key=t.key,s.extendSchema=i=>{const o=i(e);return ss(n,o)},s}function x1(n,e){const t=Zr(e,n),r=BMe(n,i=>i.get(t.key)(i)),s=[t,r];return s.id=r.id,s.mark=r,s.type=i=>r.type(i),s.ctx=t,s.key=t.key,s.extendSchema=i=>{const o=i(e);return x1(n,o)},s}function co(n,e){const t=Object.fromEntries(Object.entries(e).map(([o,{shortcuts:a,priority:l}])=>[o,{shortcuts:a,priority:l}])),r=Zr(t,`${n}Keymap`),s=RQ(o=>{const a=o.get(r.key),l=Object.entries(e).flatMap(([c,{command:u}])=>{const d=a[c],f=[d.shortcuts].flat(),p=d.priority;return f.map(m=>[m,{key:m,onRun:u,priority:p}])});return Object.fromEntries(l)}),i=[r,s];return i.ctx=r,i.shortcuts=s,i.key=r.key,i.keymap=s.keymap,i}const ul=(n,e=()=>({}))=>Zr(e,`${n}Attr`),A3=(n,e=()=>({}))=>Zr(e,`${n}Attr`);function Dh(n,e,t){const r=Zr({},n),s=o=>async()=>{await o.wait(p0);const l={plugin:e(o),options:o.get(r.key)};return o.update(g3,c=>[...c,l]),()=>{o.update(g3,c=>c.filter(u=>u!==l))}},i=[r,s];return i.id=n,i.plugin=s,i.options=r,i}function zMe(n){return e=>{const t=e.get(Ri);return e.get(gc),e.get(w1)(t.state.doc)}}function tM(n){if(!n)return!1;if(Array.isArray(n))return n.length>1?!1:tM(n[0]);const e=n.content;return e?tM(e):n.type==="text"}function HMe(n,e){return Object.assign(n,{meta:{package:"@milkdown/plugin-clipboard",...e}}),n}const $Q=Li(n=>{const e=n.get(gc);n.update(T3,s=>({...s,editable:s.editable??(()=>!0)}));const t=new rs("MILKDOWN_CLIPBOARD");return new ks({key:t,props:{handlePaste:(s,i)=>{var k,x;const o=n.get(S3),a=(x=(k=s.props).editable)==null?void 0:x.call(k,s.state),{clipboardData:l}=i;if(!a||!l||s.state.selection.$from.node().type.spec.code)return!1;const u=l.getData("text/plain"),d=l.getData("vscode-editor-data");if(d){const S=JSON.parse(d),_=S==null?void 0:S.mode;if(u&&_){const{tr:A}=s.state,T=DAe("code_block",e);return A.replaceSelectionWith(T.create({language:_})).setSelection(It.near(A.doc.resolve(Math.max(0,A.selection.from-2)))).insertText(u.replace(/\r\n?/g,` +`)),s.dispatch(A),!0}}const f=l.getData("text/html");if(f.length===0&&u.length===0)return!1;const p=Qp.fromSchema(e);let m;if(f.length===0){const S=o(u);if(!S||typeof S=="string")return!1;m=e0.fromSchema(e).serializeFragment(S.content)}else{const S=document.createElement("template");S.innerHTML=f,m=S.content.cloneNode(!0),S.remove()}const y=p.parseSlice(m),w=PAe(y);if(w)return s.dispatch(s.state.tr.replaceSelectionWith(w,!0)),!0;try{return s.dispatch(s.state.tr.replaceSelection(y)),!0}catch{return!1}},clipboardTextSerializer:s=>{const i=n.get(w1);if(tM(s.content.toJSON()))return s.content.textBetween(0,s.content.size,` + +`);const a=e.topNodeType.createAndFill(void 0,s.content);return a?i(a):""}}})});HMe($Q,{displayName:"Prose<clipboard>"});var gk=200,Ws=function(){};Ws.prototype.append=function(e){return e.length?(e=Ws.from(e),!this.length&&e||e.length<gk&&this.leafAppend(e)||this.length<gk&&e.leafPrepend(this)||this.appendInner(e)):this},Ws.prototype.prepend=function(e){return e.length?Ws.from(e).append(this):this},Ws.prototype.appendInner=function(e){return new qMe(this,e)},Ws.prototype.slice=function(e,t){return e===void 0&&(e=0),t===void 0&&(t=this.length),e>=t?Ws.empty:this.sliceInner(Math.max(0,e),Math.min(this.length,t))},Ws.prototype.get=function(e){if(!(e<0||e>=this.length))return this.getInner(e)},Ws.prototype.forEach=function(e,t,r){t===void 0&&(t=0),r===void 0&&(r=this.length),t<=r?this.forEachInner(e,t,r,0):this.forEachInvertedInner(e,t,r,0)},Ws.prototype.map=function(e,t,r){t===void 0&&(t=0),r===void 0&&(r=this.length);var s=[];return this.forEach(function(i,o){return s.push(e(i,o))},t,r),s},Ws.from=function(e){return e instanceof Ws?e:e&&e.length?new LQ(e):Ws.empty};var LQ=function(n){function e(r){n.call(this),this.values=r}n&&(e.__proto__=n),e.prototype=Object.create(n&&n.prototype),e.prototype.constructor=e;var t={length:{configurable:!0},depth:{configurable:!0}};return e.prototype.flatten=function(){return this.values},e.prototype.sliceInner=function(s,i){return s==0&&i==this.length?this:new e(this.values.slice(s,i))},e.prototype.getInner=function(s){return this.values[s]},e.prototype.forEachInner=function(s,i,o,a){for(var l=i;l<o;l++)if(s(this.values[l],a+l)===!1)return!1},e.prototype.forEachInvertedInner=function(s,i,o,a){for(var l=i-1;l>=o;l--)if(s(this.values[l],a+l)===!1)return!1},e.prototype.leafAppend=function(s){if(this.length+s.length<=gk)return new e(this.values.concat(s.flatten()))},e.prototype.leafPrepend=function(s){if(this.length+s.length<=gk)return new e(s.flatten().concat(this.values))},t.length.get=function(){return this.values.length},t.depth.get=function(){return 0},Object.defineProperties(e.prototype,t),e}(Ws);Ws.empty=new LQ([]);var qMe=function(n){function e(t,r){n.call(this),this.left=t,this.right=r,this.length=t.length+r.length,this.depth=Math.max(t.depth,r.depth)+1}return n&&(e.__proto__=n),e.prototype=Object.create(n&&n.prototype),e.prototype.constructor=e,e.prototype.flatten=function(){return this.left.flatten().concat(this.right.flatten())},e.prototype.getInner=function(r){return r<this.left.length?this.left.get(r):this.right.get(r-this.left.length)},e.prototype.forEachInner=function(r,s,i,o){var a=this.left.length;if(s<a&&this.left.forEachInner(r,s,Math.min(i,a),o)===!1||i>a&&this.right.forEachInner(r,Math.max(s-a,0),Math.min(this.length,i)-a,o+a)===!1)return!1},e.prototype.forEachInvertedInner=function(r,s,i,o){var a=this.left.length;if(s>a&&this.right.forEachInvertedInner(r,s-a,Math.max(i,a)-a,o+a)===!1||i<a&&this.left.forEachInvertedInner(r,Math.min(s,a),i,o)===!1)return!1},e.prototype.sliceInner=function(r,s){if(r==0&&s==this.length)return this;var i=this.left.length;return s<=i?this.left.slice(r,s):r>=i?this.right.slice(r-i,s-i):this.left.slice(r,i).append(this.right.slice(0,s-i))},e.prototype.leafAppend=function(r){var s=this.right.leafAppend(r);if(s)return new e(this.left,s)},e.prototype.leafPrepend=function(r){var s=this.left.leafPrepend(r);if(s)return new e(s,this.right)},e.prototype.appendInner=function(r){return this.left.depth>=Math.max(this.right.depth,r.depth)+1?new e(this.left,new e(this.right,r)):new e(this,r)},e}(Ws);const UMe=500;class dl{constructor(e,t){this.items=e,this.eventCount=t}popEvent(e,t){if(this.eventCount==0)return null;let r=this.items.length;for(;;r--)if(this.items.get(r-1).selection){--r;break}let s,i;t&&(s=this.remapping(r,this.items.length),i=s.maps.length);let o=e.tr,a,l,c=[],u=[];return this.items.forEach((d,f)=>{if(!d.step){s||(s=this.remapping(r,f+1),i=s.maps.length),i--,u.push(d);return}if(s){u.push(new yc(d.map));let p=d.step.map(s.slice(i)),m;p&&o.maybeStep(p).doc&&(m=o.mapping.maps[o.mapping.maps.length-1],c.push(new yc(m,void 0,void 0,c.length+u.length))),i--,m&&s.appendMap(m,i)}else o.maybeStep(d.step);if(d.selection)return a=s?d.selection.map(s.slice(i)):d.selection,l=new dl(this.items.slice(0,r).append(u.reverse().concat(c)),this.eventCount-1),!1},this.items.length,0),{remaining:l,transform:o,selection:a}}addTransform(e,t,r,s){let i=[],o=this.eventCount,a=this.items,l=!s&&a.length?a.get(a.length-1):null;for(let u=0;u<e.steps.length;u++){let d=e.steps[u].invert(e.docs[u]),f=new yc(e.mapping.maps[u],d,t),p;(p=l&&l.merge(f))&&(f=p,u?i.pop():a=a.slice(0,a.length-1)),i.push(f),t&&(o++,t=void 0),s||(l=f)}let c=o-r.depth;return c>GMe&&(a=WMe(a,c),o-=c),new dl(a.append(i),o)}remapping(e,t){let r=new X2;return this.items.forEach((s,i)=>{let o=s.mirrorOffset!=null&&i-s.mirrorOffset>=e?r.maps.length-s.mirrorOffset:void 0;r.appendMap(s.map,o)},e,t),r}addMaps(e){return this.eventCount==0?this:new dl(this.items.append(e.map(t=>new yc(t))),this.eventCount)}rebased(e,t){if(!this.eventCount)return this;let r=[],s=Math.max(0,this.items.length-t),i=e.mapping,o=e.steps.length,a=this.eventCount;this.items.forEach(f=>{f.selection&&a--},s);let l=t;this.items.forEach(f=>{let p=i.getMirror(--l);if(p==null)return;o=Math.min(o,p);let m=i.maps[p];if(f.step){let y=e.steps[p].invert(e.docs[p]),w=f.selection&&f.selection.map(i.slice(l+1,p));w&&a++,r.push(new yc(m,y,w))}else r.push(new yc(m))},s);let c=[];for(let f=t;f<o;f++)c.push(new yc(i.maps[f]));let u=this.items.slice(0,s).append(c).append(r),d=new dl(u,a);return d.emptyItemCount()>UMe&&(d=d.compress(this.items.length-r.length)),d}emptyItemCount(){let e=0;return this.items.forEach(t=>{t.step||e++}),e}compress(e=this.items.length){let t=this.remapping(0,e),r=t.maps.length,s=[],i=0;return this.items.forEach((o,a)=>{if(a>=e)s.push(o),o.selection&&i++;else if(o.step){let l=o.step.map(t.slice(r)),c=l&&l.getMap();if(r--,c&&t.appendMap(c,r),l){let u=o.selection&&o.selection.map(t.slice(r));u&&i++;let d=new yc(c.invert(),l,u),f,p=s.length-1;(f=s.length&&s[p].merge(d))?s[p]=f:s.push(d)}}else o.map&&r--},this.items.length,0),new dl(Ws.from(s.reverse()),i)}}dl.empty=new dl(Ws.empty,0);function WMe(n,e){let t;return n.forEach((r,s)=>{if(r.selection&&e--==0)return t=s,!1}),n.slice(t)}class yc{constructor(e,t,r,s){this.map=e,this.step=t,this.selection=r,this.mirrorOffset=s}merge(e){if(this.step&&e.step&&!e.selection){let t=e.step.merge(this.step);if(t)return new yc(t.getMap().invert(),t,this.selection)}}}class Rh{constructor(e,t,r,s,i){this.done=e,this.undone=t,this.prevRanges=r,this.prevTime=s,this.prevComposition=i}}const GMe=20;function KMe(n,e,t,r){let s=t.getMeta(m0),i;if(s)return s.historyState;t.getMeta(XMe)&&(n=new Rh(n.done,n.undone,null,0,-1));let o=t.getMeta("appendedTransaction");if(t.steps.length==0)return n;if(o&&o.getMeta(m0))return o.getMeta(m0).redo?new Rh(n.done.addTransform(t,void 0,r,yk(e)),n.undone,FQ(t.mapping.maps),n.prevTime,n.prevComposition):new Rh(n.done,n.undone.addTransform(t,void 0,r,yk(e)),null,n.prevTime,n.prevComposition);if(t.getMeta("addToHistory")!==!1&&!(o&&o.getMeta("addToHistory")===!1)){let a=t.getMeta("composition"),l=n.prevTime==0||!o&&n.prevComposition!=a&&(n.prevTime<(t.time||0)-r.newGroupDelay||!YMe(t,n.prevRanges)),c=o?nM(n.prevRanges,t.mapping):FQ(t.mapping.maps);return new Rh(n.done.addTransform(t,l?e.selection.getBookmark():void 0,r,yk(e)),dl.empty,c,t.time,a??n.prevComposition)}else return(i=t.getMeta("rebased"))?new Rh(n.done.rebased(t,i),n.undone.rebased(t,i),nM(n.prevRanges,t.mapping),n.prevTime,n.prevComposition):new Rh(n.done.addMaps(t.mapping.maps),n.undone.addMaps(t.mapping.maps),nM(n.prevRanges,t.mapping),n.prevTime,n.prevComposition)}function YMe(n,e){if(!e)return!1;if(!n.docChanged)return!0;let t=!1;return n.mapping.maps[0].forEach((r,s)=>{for(let i=0;i<e.length;i+=2)r<=e[i+1]&&s>=e[i]&&(t=!0)}),t}function FQ(n){let e=[];for(let t=n.length-1;t>=0&&e.length==0;t--)n[t].forEach((r,s,i,o)=>e.push(i,o));return e}function nM(n,e){if(!n)return null;let t=[];for(let r=0;r<n.length;r+=2){let s=e.map(n[r],1),i=e.map(n[r+1],-1);s<=i&&t.push(s,i)}return t}function ZMe(n,e,t){let r=yk(e),s=m0.get(e).spec.config,i=(t?n.undone:n.done).popEvent(e,r);if(!i)return null;let o=i.selection.resolve(i.transform.doc),a=(t?n.done:n.undone).addTransform(i.transform,e.selection.getBookmark(),s,r),l=new Rh(t?a:i.remaining,t?i.remaining:a,null,0,-1);return i.transform.setSelection(o).setMeta(m0,{redo:t,historyState:l})}let rM=!1,jQ=null;function yk(n){let e=n.plugins;if(jQ!=e){rM=!1,jQ=e;for(let t=0;t<e.length;t++)if(e[t].spec.historyPreserveItems){rM=!0;break}}return rM}const m0=new rs("history"),XMe=new rs("closeHistory");function JMe(n={}){return n={depth:n.depth||100,newGroupDelay:n.newGroupDelay||500},new ks({key:m0,state:{init(){return new Rh(dl.empty,dl.empty,null,0,-1)},apply(e,t,r){return KMe(t,r,e,n)}},config:n,props:{handleDOMEvents:{beforeinput(e,t){let r=t.inputType,s=r=="historyUndo"?VQ:r=="historyRedo"?zQ:null;return!s||!e.editable?!1:(t.preventDefault(),s(e.state,e.dispatch))}}}})}function BQ(n,e){return(t,r)=>{let s=m0.getState(t);if(!s||(n?s.undone:s.done).eventCount==0)return!1;if(r){let i=ZMe(s,t,n);i&&r(e?i.scrollIntoView():i)}return!0}}const VQ=BQ(!1,!0),zQ=BQ(!0,!0);function k1(n,e){return Object.assign(n,{meta:{package:"@milkdown/plugin-history",...e}}),n}const sM=zt("Undo",()=>()=>VQ);k1(sM,{displayName:"Command<undo>"});const iM=zt("Redo",()=>()=>zQ);k1(iM,{displayName:"Command<redo>"});const oM=Zr({},"historyProviderConfig");k1(oM,{displayName:"Ctx<historyProviderConfig>"});const HQ=Li(n=>JMe(n.get(oM.key)));k1(HQ,{displayName:"Ctx<historyProviderPlugin>"});const aM=co("historyKeymap",{Undo:{shortcuts:"Mod-z",command:n=>{const e=n.get(ft);return()=>e.call(sM.key)}},Redo:{shortcuts:["Mod-y","Shift-Mod-z"],command:n=>{const e=n.get(ft);return()=>e.call(iM.key)}}});k1(aM.ctx,{displayName:"KeymapCtx<history>"}),k1(aM.shortcuts,{displayName:"Keymap<history>"});const QMe=[oM,HQ,aM,sM,iM].flat();function eOe(n,e){const{doc:t,selection:r}=n;if(!t||!r||!(r instanceof It||r instanceof oo))return n;const{to:s}=r,i=e.type==="space"?Array(e.size).fill(" ").join(""):" ";return n.insertText(i,s)}const vk=Zr({type:"space",size:2},"indentConfig");vk.meta={package:"@milkdown/plugin-indent",displayName:"Ctx<indentConfig>"};const qQ=RQ(n=>({Tab:(e,t)=>{const r=n.get(vk.key),{tr:s}=e,i=eOe(s,r);return i.docChanged?(t==null||t(i),!0):!1}}));qQ.meta={package:"@milkdown/plugin-indent",displayName:"Shortcut<indent>"};const tOe=[vk,qQ];var nOe=typeof global=="object"&&global&&global.Object===Object&&global,rOe=typeof self=="object"&&self&&self.Object===Object&&self,UQ=nOe||rOe||Function("return this")(),bk=UQ.Symbol,WQ=Object.prototype,sOe=WQ.hasOwnProperty,iOe=WQ.toString,N3=bk?bk.toStringTag:void 0;function oOe(n){var e=sOe.call(n,N3),t=n[N3];try{n[N3]=void 0;var r=!0}catch{}var s=iOe.call(n);return r&&(e?n[N3]=t:delete n[N3]),s}var aOe=Object.prototype,lOe=aOe.toString;function cOe(n){return lOe.call(n)}var uOe="[object Null]",dOe="[object Undefined]",GQ=bk?bk.toStringTag:void 0;function hOe(n){return n==null?n===void 0?dOe:uOe:GQ&&GQ in Object(n)?oOe(n):cOe(n)}function fOe(n){return n!=null&&typeof n=="object"}var pOe="[object Symbol]";function mOe(n){return typeof n=="symbol"||fOe(n)&&hOe(n)==pOe}var gOe=/\s/;function yOe(n){for(var e=n.length;e--&&gOe.test(n.charAt(e)););return e}var vOe=/^\s+/;function bOe(n){return n&&n.slice(0,yOe(n)+1).replace(vOe,"")}function wk(n){var e=typeof n;return n!=null&&(e=="object"||e=="function")}var KQ=NaN,wOe=/^[-+]0x[0-9a-f]+$/i,xOe=/^0b[01]+$/i,kOe=/^0o[0-7]+$/i,COe=parseInt;function YQ(n){if(typeof n=="number")return n;if(mOe(n))return KQ;if(wk(n)){var e=typeof n.valueOf=="function"?n.valueOf():n;n=wk(e)?e+"":e}if(typeof n!="string")return n===0?n:+n;n=bOe(n);var t=xOe.test(n);return t||kOe.test(n)?COe(n.slice(2),t?2:8):wOe.test(n)?KQ:+n}var lM=function(){return UQ.Date.now()},SOe="Expected a function",EOe=Math.max,_Oe=Math.min;function cM(n,e,t){var r,s,i,o,a,l,c=0,u=!1,d=!1,f=!0;if(typeof n!="function")throw new TypeError(SOe);e=YQ(e)||0,wk(t)&&(u=!!t.leading,d="maxWait"in t,i=d?EOe(YQ(t.maxWait)||0,e):i,f="trailing"in t?!!t.trailing:f);function p(T){var O=r,I=s;return r=s=void 0,c=T,o=n.apply(I,O),o}function m(T){return c=T,a=setTimeout(k,e),u?p(T):o}function y(T){var O=T-l,I=T-c,R=e-O;return d?_Oe(R,i-I):R}function w(T){var O=T-l,I=T-c;return l===void 0||O>=e||O<0||d&&I>=i}function k(){var T=lM();if(w(T))return x(T);a=setTimeout(k,y(T))}function x(T){return a=void 0,f&&r?p(T):(r=s=void 0,o)}function S(){a!==void 0&&clearTimeout(a),c=0,r=l=s=a=void 0}function _(){return a===void 0?o:x(lM())}function A(){var T=lM(),O=w(T);if(r=arguments,s=this,l=T,O){if(a===void 0)return m(l);if(d)return clearTimeout(a),a=setTimeout(k,e),p(l)}return a===void 0&&(a=setTimeout(k,e)),o}return A.cancel=S,A.flush=_,A}var TOe="Expected a function";function ZQ(n,e,t){var r=!0,s=!0;if(typeof n!="function")throw new TypeError(TOe);return wk(t)&&(r="leading"in t?!!t.leading:r,s="trailing"in t?!!t.trailing:s),cM(n,e,{leading:r,maxWait:e,trailing:s})}class XQ{constructor(){this.beforeMountedListeners=[],this.mountedListeners=[],this.updatedListeners=[],this.selectionUpdatedListeners=[],this.markdownUpdatedListeners=[],this.blurListeners=[],this.focusListeners=[],this.destroyListeners=[],this.beforeMount=e=>(this.beforeMountedListeners.push(e),this),this.mounted=e=>(this.mountedListeners.push(e),this),this.updated=e=>(this.updatedListeners.push(e),this)}get listeners(){return{beforeMount:this.beforeMountedListeners,mounted:this.mountedListeners,updated:this.updatedListeners,markdownUpdated:this.markdownUpdatedListeners,blur:this.blurListeners,focus:this.focusListeners,destroy:this.destroyListeners,selectionUpdated:this.selectionUpdatedListeners}}markdownUpdated(e){return this.markdownUpdatedListeners.push(e),this}blur(e){return this.blurListeners.push(e),this}focus(e){return this.focusListeners.push(e),this}destroy(e){return this.destroyListeners.push(e),this}selectionUpdated(e){return this.selectionUpdatedListeners.push(e),this}}const xk=kn(new XQ,"listener"),AOe=new rs("MILKDOWN_LISTENER"),JQ=n=>(n.inject(xk,new XQ),async()=>{await n.wait(p0);const e=n.get(xk),{listeners:t}=e;t.beforeMount.forEach(l=>l(n)),await n.wait(E3);const r=n.get(w1);let s=null,i=null,o=null;const a=new ks({key:AOe,view:()=>({destroy:()=>{t.destroy.forEach(l=>l(n))}}),props:{handleDOMEvents:{focus:()=>(t.focus.forEach(l=>l(n)),!1),blur:()=>(t.blur.forEach(l=>l(n)),!1)}},state:{init:(l,c)=>{s=c.doc,i=r(c.doc)},apply:l=>{const c=l.selection;return(!o&&c||o&&!c.eq(o))&&(t.selectionUpdated.forEach(d=>{d(n,c,o)}),o=c),!(l.docChanged||l.storedMarksSet)||l.getMeta("addToHistory")===!1?void 0:cM(()=>{const{doc:d}=l;if(t.updated.length>0&&s&&!s.eq(d)&&t.updated.forEach(f=>{f(n,d,s)}),t.markdownUpdated.length>0&&s&&!s.eq(d)){const f=r(d);t.markdownUpdated.forEach(p=>{p(n,f,i)}),i=f}s=d},200)()}}});n.update(Ih,l=>l.concat(a)),await n.wait(fk),t.mounted.forEach(l=>l(n))});JQ.meta={package:"@milkdown/plugin-listener",displayName:"Listener"};const uM=Zr({shouldAppend:n=>!(!n||["heading","paragraph"].includes(n.type.name)),getNode:n=>n.schema.nodes.paragraph.create()},"trailingConfig");uM.meta={package:"@milkdown/plugin-trailing",displayName:"Ctx<trailingConfig>"};const QQ=Li(n=>{const e=new rs("MILKDOWN_TRAILING"),{shouldAppend:t,getNode:r}=n.get(uM.key),s=new ks({key:e,state:{init:(i,o)=>{const a=o.tr.doc.lastChild;return t(a,o)},apply:(i,o,a,l)=>{if(!i.docChanged)return o;const c=i.doc.lastChild;return t(c,l)}},appendTransaction:(i,o,a)=>{const{doc:l,tr:c}=a,u=r==null?void 0:r(a),d=s.getState(a),f=l.content.size;if(!(!d||!u))return c.insert(f,u)}});return s});QQ.meta={package:"@milkdown/plugin-trailing",displayName:"Prose<trailing>"};const NOe=[uM,QQ];function MOe(n,e){return function(t,r){let{$from:s,$to:i,node:o}=t.selection;if(o&&o.isBlock||s.depth<2||!s.sameParent(i))return!1;let a=s.node(-1);if(a.type!=n)return!1;if(s.parent.content.size==0&&s.node(-1).childCount==s.indexAfter(-1)){if(s.depth==3||s.node(-3).type!=n||s.index(-2)!=s.node(-2).childCount-1)return!1;if(r){let d=$e.empty,f=s.index(-1)?1:s.index(-2)?2:3;for(let k=s.depth-f;k>=s.depth-3;k--)d=$e.from(s.node(k).copy(d));let p=s.indexAfter(-1)<s.node(-2).childCount?1:s.indexAfter(-2)<s.node(-3).childCount?2:3;d=d.append($e.from(n.createAndFill()));let m=s.before(s.depth-(f-1)),y=t.tr.replace(m,s.after(-p),new He(d,4-f,0)),w=-1;y.doc.nodesBetween(m,y.doc.content.size,(k,x)=>{if(w>-1)return!1;k.isTextblock&&k.content.size==0&&(w=x+1)}),w>-1&&y.setSelection(nn.near(y.doc.resolve(w))),r(y.scrollIntoView())}return!0}let l=i.pos==s.end()?a.contentMatchAt(0).defaultType:null,c=t.tr.delete(s.pos,i.pos),u=l?[null,{type:l}]:void 0;return J2(c.doc,s.pos,2,u)?(r&&r(c.split(s.pos,2,u).scrollIntoView()),!0):!1}}function OOe(n){return function(e,t){let{$from:r,$to:s}=e.selection,i=r.blockRange(s,o=>o.childCount>0&&o.firstChild.type==n);return i?t?r.node(i.depth-1).type==n?POe(e,t,n,i):IOe(e,t,i):!0:!1}}function POe(n,e,t,r){let s=n.tr,i=r.end,o=r.$to.end(r.depth);i<o&&(s.step(new vi(i-1,o,i,o,new He($e.from(t.create(null,r.parent.copy())),1,0),1,!0)),r=new VY(s.doc.resolve(r.$from.pos),s.doc.resolve(o),r.depth));const a=q7(r);if(a==null)return!1;s.lift(r,a);let l=s.doc.resolve(s.mapping.map(i,-1)-1);return U7(s.doc,l.pos)&&l.nodeBefore.type==l.nodeAfter.type&&s.join(l.pos),e(s.scrollIntoView()),!0}function IOe(n,e,t){let r=n.tr,s=t.parent;for(let p=t.end,m=t.endIndex-1,y=t.startIndex;m>y;m--)p-=s.child(m).nodeSize,r.delete(p-1,p+1);let i=r.doc.resolve(t.start),o=i.nodeAfter;if(r.mapping.map(t.end)!=t.start+i.nodeAfter.nodeSize)return!1;let a=t.startIndex==0,l=t.endIndex==s.childCount,c=i.node(-1),u=i.index(-1);if(!c.canReplace(u+(a?0:1),u+1,o.content.append(l?$e.empty:$e.from(s))))return!1;let d=i.pos,f=d+o.nodeSize;return r.step(new vi(d-(a?1:0),f+(l?1:0),d+1,f-1,new He((a?$e.empty:$e.from(s.copy($e.empty))).append(l?$e.empty:$e.from(s.copy($e.empty))),a?0:1,l?0:1),a?0:1)),e(r.scrollIntoView()),!0}function DOe(n){return function(e,t){let{$from:r,$to:s}=e.selection,i=r.blockRange(s,c=>c.childCount>0&&c.firstChild.type==n);if(!i)return!1;let o=i.startIndex;if(o==0)return!1;let a=i.parent,l=a.child(o-1);if(l.type!=n)return!1;if(t){let c=l.lastChild&&l.lastChild.type==a.type,u=$e.from(c?n.create():null),d=new He($e.from(n.create(null,$e.from(a.type.create(null,u)))),c?3:1,0),f=i.start,p=i.end;t(e.tr.step(new vi(f-(c?3:1),p,f,p,d,1,!0)).scrollIntoView())}return!0}}function ROe(n){const e=new Map;if(!n||!n.type)throw new Error("mdast-util-definitions expected node");return n0(n,"definition",function(r){const s=eee(r.identifier);s&&!e.get(s)&&e.set(s,r)}),t;function t(r){const s=eee(r);return e.get(s)}}function eee(n){return String(n||"").toUpperCase()}function $Oe(){return function(n){const e=ROe(n);n0(n,function(t,r,s){if(t.type==="definition"&&s!==void 0&&typeof r=="number")return s.children.splice(r,1),[EA,r];if(t.type==="imageReference"||t.type==="linkReference"){const i=e(t.identifier);if(i&&s&&typeof r=="number")return s.children[r]=t.type==="imageReference"?{type:"image",url:i.url,title:i.title,alt:t.alt}:{type:"link",url:i.url,title:i.title,children:t.children},[EA,r]}})}}function tee(n,e){var s;if(!(e.childCount>=1&&((s=e.lastChild)==null?void 0:s.type.name)==="hardbreak")){n.next(e.content);return}const r=[];e.content.forEach((i,o,a)=>{a!==e.childCount-1&&r.push(i)}),n.next($e.fromArray(r))}function Ce(n,e){return Object.assign(n,{meta:{package:"@milkdown/preset-commonmark",...e}}),n}const dM=A3("emphasis");Ce(dM,{displayName:"Attr<emphasis>",group:"Emphasis"});const g0=x1("emphasis",n=>({attrs:{marker:{default:n.get(b3).emphasis||"*",validate:"string"}},parseDOM:[{tag:"i"},{tag:"em"},{style:"font-style",getAttrs:e=>e==="italic"}],toDOM:e=>["em",n.get(dM.key)(e)],parseMarkdown:{match:e=>e.type==="emphasis",runner:(e,t,r)=>{e.openMark(r,{marker:t.marker}),e.next(t.children),e.closeMark(r)}},toMarkdown:{match:e=>e.type.name==="emphasis",runner:(e,t)=>{e.withMark(t,"emphasis",void 0,{marker:t.attrs.marker})}}}));Ce(g0.mark,{displayName:"MarkSchema<emphasis>",group:"Emphasis"}),Ce(g0.ctx,{displayName:"MarkSchemaCtx<emphasis>",group:"Emphasis"});const kk=zt("ToggleEmphasis",n=>()=>Y7(g0.type(n)));Ce(kk,{displayName:"Command<toggleEmphasisCommand>",group:"Emphasis"});const nee=lo(n=>s3(/(?:^|[^*])\*([^*]+)\*$/,g0.type(n),{getAttr:()=>({marker:"*"}),updateCaptured:({fullMatch:e,start:t})=>e.startsWith("*")?{}:{fullMatch:e.slice(1),start:t+1}}));Ce(nee,{displayName:"InputRule<emphasis>|Star",group:"Emphasis"});const ree=lo(n=>s3(/\b_(?![_\s])(.*?[^_\s])_\b/,g0.type(n),{getAttr:()=>({marker:"_"}),updateCaptured:({fullMatch:e,start:t})=>e.startsWith("_")?{}:{fullMatch:e.slice(1),start:t+1}}));Ce(ree,{displayName:"InputRule<emphasis>|Underscore",group:"Emphasis"});const hM=co("emphasisKeymap",{ToggleEmphasis:{shortcuts:"Mod-i",command:n=>{const e=n.get(ft);return()=>e.call(kk.key)}}});Ce(hM.ctx,{displayName:"KeymapCtx<emphasis>",group:"Emphasis"}),Ce(hM.shortcuts,{displayName:"Keymap<emphasis>",group:"Emphasis"});const fM=A3("strong");Ce(fM,{displayName:"Attr<strong>",group:"Strong"});const C1=x1("strong",n=>({attrs:{marker:{default:n.get(b3).strong||"*",validate:"string"}},parseDOM:[{tag:"b",getAttrs:e=>e.style.fontWeight!="normal"&&null},{tag:"strong"},{style:"font-style",getAttrs:e=>e==="bold"},{style:"font-weight=400",clearMark:e=>e.type.name=="strong"},{style:"font-weight",getAttrs:e=>/^(bold(er)?|[5-9]\d{2,})$/.test(e)&&null}],toDOM:e=>["strong",n.get(fM.key)(e)],parseMarkdown:{match:e=>e.type==="strong",runner:(e,t,r)=>{e.openMark(r,{marker:t.marker}),e.next(t.children),e.closeMark(r)}},toMarkdown:{match:e=>e.type.name==="strong",runner:(e,t)=>{e.withMark(t,"strong",void 0,{marker:t.attrs.marker})}}}));Ce(C1.mark,{displayName:"MarkSchema<strong>",group:"Strong"}),Ce(C1.ctx,{displayName:"MarkSchemaCtx<strong>",group:"Strong"});const Ck=zt("ToggleStrong",n=>()=>Y7(C1.type(n)));Ce(Ck,{displayName:"Command<toggleStrongCommand>",group:"Strong"});const see=lo(n=>s3(new RegExp("(?<![\\w:/])(?:\\*\\*|__)([^*_]+?)(?:\\*\\*|__)(?![\\w/])$"),C1.type(n),{getAttr:e=>({marker:e[0].startsWith("*")?"*":"_"})}));Ce(see,{displayName:"InputRule<strong>",group:"Strong"});const pM=co("strongKeymap",{ToggleBold:{shortcuts:["Mod-b"],command:n=>{const e=n.get(ft);return()=>e.call(Ck.key)}}});Ce(pM.ctx,{displayName:"KeymapCtx<strong>",group:"Strong"}),Ce(pM.shortcuts,{displayName:"Keymap<strong>",group:"Strong"});const mM=A3("inlineCode");Ce(mM,{displayName:"Attr<inlineCode>",group:"InlineCode"});const Fu=x1("inlineCode",n=>({priority:100,code:!0,parseDOM:[{tag:"code"}],toDOM:e=>["code",n.get(mM.key)(e)],parseMarkdown:{match:e=>e.type==="inlineCode",runner:(e,t,r)=>{e.openMark(r),e.addText(t.value),e.closeMark(r)}},toMarkdown:{match:e=>e.type.name==="inlineCode",runner:(e,t,r)=>{e.withMark(t,"inlineCode",r.text||"")}}}));Ce(Fu.mark,{displayName:"MarkSchema<inlineCode>",group:"InlineCode"}),Ce(Fu.ctx,{displayName:"MarkSchemaCtx<inlineCode>",group:"InlineCode"});const Sk=zt("ToggleInlineCode",n=>()=>(e,t)=>{const{selection:r,tr:s}=e;if(r.empty)return!1;const{from:i,to:o}=r;return e.doc.rangeHasMark(i,o,Fu.type(n))?(t==null||t(s.removeMark(i,o,Fu.type(n))),!0):(Object.keys(e.schema.marks).filter(c=>c!==Fu.type.name).map(c=>e.schema.marks[c]).forEach(c=>{s.removeMark(i,o,c)}),t==null||t(s.addMark(i,o,Fu.type(n).create())),!0)});Ce(Sk,{displayName:"Command<toggleInlineCodeCommand>",group:"InlineCode"});const iee=lo(n=>s3(/(?:`)([^`]+)(?:`)$/,Fu.type(n)));Ce(iee,{displayName:"InputRule<inlineCodeInputRule>",group:"InlineCode"});const gM=co("inlineCodeKeymap",{ToggleInlineCode:{shortcuts:"Mod-e",command:n=>{const e=n.get(ft);return()=>e.call(Sk.key)}}});Ce(gM.ctx,{displayName:"KeymapCtx<inlineCode>",group:"InlineCode"}),Ce(gM.shortcuts,{displayName:"Keymap<inlineCode>",group:"InlineCode"});const yM=A3("link");Ce(yM,{displayName:"Attr<link>",group:"Link"});const $h=x1("link",n=>({attrs:{href:{validate:"string"},title:{default:null,validate:"string|null"}},parseDOM:[{tag:"a[href]",getAttrs:e=>{if(!(e instanceof HTMLElement))throw ll(e);return{href:e.getAttribute("href"),title:e.getAttribute("title")}}}],toDOM:e=>["a",{...n.get(yM.key)(e),...e.attrs}],parseMarkdown:{match:e=>e.type==="link",runner:(e,t,r)=>{const s=t.url,i=t.title;e.openMark(r,{href:s,title:i}),e.next(t.children),e.closeMark(r)}},toMarkdown:{match:e=>e.type.name==="link",runner:(e,t)=>{e.withMark(t,"link",void 0,{title:t.attrs.title,url:t.attrs.href})}}}));Ce($h.mark,{displayName:"MarkSchema<link>",group:"Link"});const oee=zt("ToggleLink",n=>(e={})=>Y7($h.type(n),e));Ce(oee,{displayName:"Command<toggleLinkCommand>",group:"Link"});const aee=zt("UpdateLink",n=>(e={})=>(t,r)=>{if(!r)return!1;let s,i=-1;const{selection:o}=t,{from:a,to:l}=o;if(t.doc.nodesBetween(a,a===l?l+1:l,(m,y)=>{if($h.type(n).isInSet(m.marks))return s=m,i=y,!1}),!s)return!1;const c=s.marks.find(({type:m})=>m===$h.type(n));if(!c)return!1;const u=i,d=i+s.nodeSize,{tr:f}=t,p=$h.type(n).create({...c.attrs,...e});return p?(r(f.removeMark(u,d,c).addMark(u,d,p).setSelection(new It(f.selection.$anchor)).scrollIntoView()),!0):!1});Ce(aee,{displayName:"Command<updateLinkCommand>",group:"Link"});const lee=eM("doc",()=>({content:"block+",parseMarkdown:{match:({type:n})=>n==="root",runner:(n,e,t)=>{n.injectRoot(e,t)}},toMarkdown:{match:n=>n.type.name==="doc",runner:(n,e)=>{n.openNode("root"),n.next(e.content)}}}));Ce(lee,{displayName:"NodeSchema<doc>",group:"Doc"});function LOe(n){return _A(n,e=>{var t;return e.type==="html"&&["<br />","<br>","<br >","<br/>"].includes((t=e.value)==null?void 0:t.trim())},(e,t)=>{if(!t.length)return;const r=t[t.length-1];if(!r)return;const s=r.children.indexOf(e);s!==-1&&r.children.splice(s,1)},!0)}const Ek=Dh("remark-preserve-empty-line",()=>()=>LOe);Ce(Ek.plugin,{displayName:"Remark<remarkPreserveEmptyLine>",group:"Remark"}),Ce(Ek.options,{displayName:"RemarkConfig<remarkPreserveEmptyLine>",group:"Remark"});const vM=ul("paragraph");Ce(vM,{displayName:"Attr<paragraph>",group:"Paragraph"});const hl=ss("paragraph",n=>({content:"inline*",group:"block",parseDOM:[{tag:"p"}],toDOM:e=>["p",n.get(vM.key)(e),0],parseMarkdown:{match:e=>e.type==="paragraph",runner:(e,t,r)=>{e.openNode(r),t.children?e.next(t.children):e.addText(t.value||""),e.closeNode()}},toMarkdown:{match:e=>e.type.name==="paragraph",runner:(e,t)=>{var i;const s=(i=n.get(Ri).state)==null?void 0:i.doc.lastChild;e.openNode("paragraph"),(!t.content||t.content.size===0)&&t!==s&&FOe(n)?e.addNode("html",void 0,"<br />"):tee(e,t),e.closeNode()}}}));function FOe(n){let e=!1;try{n.get(Ek.id),e=!0}catch{e=!1}return e}Ce(hl.node,{displayName:"NodeSchema<paragraph>",group:"Paragraph"}),Ce(hl.ctx,{displayName:"NodeSchemaCtx<paragraph>",group:"Paragraph"});const bM=zt("TurnIntoText",n=>()=>r3(hl.type(n)));Ce(bM,{displayName:"Command<turnIntoTextCommand>",group:"Paragraph"});const wM=co("paragraphKeymap",{TurnIntoText:{shortcuts:"Mod-Alt-0",command:n=>{const e=n.get(ft);return()=>e.call(bM.key)}}});Ce(wM.ctx,{displayName:"KeymapCtx<paragraph>",group:"Paragraph"}),Ce(wM.shortcuts,{displayName:"Keymap<paragraph>",group:"Paragraph"});const jOe=Array(6).fill(0).map((n,e)=>e+1);function BOe(n){return n.textContent.toLowerCase().trim().replace(/\s+/g,"-")}const _k=Zr(BOe,"headingIdGenerator");Ce(_k,{displayName:"Ctx<HeadingIdGenerator>",group:"Heading"});const xM=ul("heading");Ce(xM,{displayName:"Attr<heading>",group:"Heading"});const Uo=ss("heading",n=>{const e=n.get(_k.key);return{content:"inline*",group:"block",defining:!0,attrs:{id:{default:"",validate:"string"},level:{default:1,validate:"number"}},parseDOM:jOe.map(t=>({tag:`h${t}`,getAttrs:r=>{if(!(r instanceof HTMLElement))throw ll(r);return{level:t,id:r.id}}})),toDOM:t=>[`h${t.attrs.level}`,{...n.get(xM.key)(t),id:t.attrs.id||e(t)},0],parseMarkdown:{match:({type:t})=>t==="heading",runner:(t,r,s)=>{const i=r.depth;t.openNode(s,{level:i}),t.next(r.children),t.closeNode()}},toMarkdown:{match:t=>t.type.name==="heading",runner:(t,r)=>{t.openNode("heading",void 0,{depth:r.attrs.level}),tee(t,r),t.closeNode()}}}});Ce(Uo.node,{displayName:"NodeSchema<heading>",group:"Heading"}),Ce(Uo.ctx,{displayName:"NodeSchemaCtx<heading>",group:"Heading"});const cee=lo(n=>WX(/^(?<hashes>#+)\s$/,Uo.type(n),e=>{var o,a;const t=((a=(o=e.groups)==null?void 0:o.hashes)==null?void 0:a.length)||0,r=n.get(Ri),{$from:s}=r.state.selection,i=s.node();if(i.type.name==="heading"){let l=Number(i.attrs.level)+Number(t);return l>6&&(l=6),{level:l}}return{level:t}}));Ce(cee,{displayName:"InputRule<wrapInHeadingInputRule>",group:"Heading"});const Lh=zt("WrapInHeading",n=>e=>(e??(e=1),e<1?r3(hl.type(n)):r3(Uo.type(n),{level:e})));Ce(Lh,{displayName:"Command<wrapInHeadingCommand>",group:"Heading"});const kM=zt("DowngradeHeading",n=>()=>(e,t,r)=>{const{$from:s}=e.selection,i=s.node();if(i.type!==Uo.type(n)||!e.selection.empty||s.parentOffset!==0)return!1;const o=i.attrs.level-1;return o?(t==null||t(e.tr.setNodeMarkup(e.selection.$from.before(),void 0,{...i.attrs,level:o})),!0):r3(hl.type(n))(e,t,r)});Ce(kM,{displayName:"Command<downgradeHeadingCommand>",group:"Heading"});const CM=co("headingKeymap",{TurnIntoH1:{shortcuts:"Mod-Alt-1",command:n=>{const e=n.get(ft);return()=>e.call(Lh.key,1)}},TurnIntoH2:{shortcuts:"Mod-Alt-2",command:n=>{const e=n.get(ft);return()=>e.call(Lh.key,2)}},TurnIntoH3:{shortcuts:"Mod-Alt-3",command:n=>{const e=n.get(ft);return()=>e.call(Lh.key,3)}},TurnIntoH4:{shortcuts:"Mod-Alt-4",command:n=>{const e=n.get(ft);return()=>e.call(Lh.key,4)}},TurnIntoH5:{shortcuts:"Mod-Alt-5",command:n=>{const e=n.get(ft);return()=>e.call(Lh.key,5)}},TurnIntoH6:{shortcuts:"Mod-Alt-6",command:n=>{const e=n.get(ft);return()=>e.call(Lh.key,6)}},DowngradeHeading:{shortcuts:["Delete","Backspace"],command:n=>{const e=n.get(ft);return()=>e.call(kM.key)}}});Ce(CM.ctx,{displayName:"KeymapCtx<heading>",group:"Heading"}),Ce(CM.shortcuts,{displayName:"Keymap<heading>",group:"Heading"});const SM=ul("blockquote");Ce(SM,{displayName:"Attr<blockquote>",group:"Blockquote"});const S1=ss("blockquote",n=>({content:"block+",group:"block",defining:!0,parseDOM:[{tag:"blockquote"}],toDOM:e=>["blockquote",n.get(SM.key)(e),0],parseMarkdown:{match:({type:e})=>e==="blockquote",runner:(e,t,r)=>{e.openNode(r).next(t.children).closeNode()}},toMarkdown:{match:e=>e.type.name==="blockquote",runner:(e,t)=>{e.openNode("blockquote").next(t.content).closeNode()}}}));Ce(S1.node,{displayName:"NodeSchema<blockquote>",group:"Blockquote"}),Ce(S1.ctx,{displayName:"NodeSchemaCtx<blockquote>",group:"Blockquote"});const uee=lo(n=>lN(/^\s*>\s$/,S1.type(n)));Ce(uee,{displayName:"InputRule<wrapInBlockquoteInputRule>",group:"Blockquote"});const EM=zt("WrapInBlockquote",n=>()=>oN(S1.type(n)));Ce(EM,{displayName:"Command<wrapInBlockquoteCommand>",group:"Blockquote"});const _M=co("blockquoteKeymap",{WrapInBlockquote:{shortcuts:"Mod-Shift-b",command:n=>{const e=n.get(ft);return()=>e.call(EM.key)}}});Ce(_M.ctx,{displayName:"KeymapCtx<blockquote>",group:"Blockquote"}),Ce(_M.shortcuts,{displayName:"Keymap<blockquote>",group:"Blockquote"});const TM=ul("codeBlock",()=>({pre:{},code:{}}));Ce(TM,{displayName:"Attr<codeBlock>",group:"CodeBlock"});const y0=ss("code_block",n=>({content:"text*",group:"block",marks:"",defining:!0,code:!0,attrs:{language:{default:"",validate:"string"}},parseDOM:[{tag:"pre",preserveWhitespace:"full",getAttrs:e=>{if(!(e instanceof HTMLElement))throw ll(e);return{language:e.dataset.language}}}],toDOM:e=>{const t=n.get(TM.key)(e),r=e.attrs.language,s=r&&r.length>0?{"data-language":r}:void 0;return["pre",{...t.pre,...s},["code",t.code,0]]},parseMarkdown:{match:({type:e})=>e==="code",runner:(e,t,r)=>{const s=t.lang??"",i=t.value;e.openNode(r,{language:s}),i&&e.addText(i),e.closeNode()}},toMarkdown:{match:e=>e.type.name==="code_block",runner:(e,t)=>{var r;e.addNode("code",void 0,((r=t.content.firstChild)==null?void 0:r.text)||"",{lang:t.attrs.language})}}}));Ce(y0.node,{displayName:"NodeSchema<codeBlock>",group:"CodeBlock"}),Ce(y0.ctx,{displayName:"NodeSchemaCtx<codeBlock>",group:"CodeBlock"});const dee=lo(n=>WX(/^```(?<language>[a-z]*)?[\s\n]$/,y0.type(n),e=>{var t;return{language:((t=e.groups)==null?void 0:t.language)??""}}));Ce(dee,{displayName:"InputRule<createCodeBlockInputRule>",group:"CodeBlock"});const AM=zt("CreateCodeBlock",n=>(e="")=>r3(y0.type(n),{language:e}));Ce(AM,{displayName:"Command<createCodeBlockCommand>",group:"CodeBlock"});const VOe=zt("UpdateCodeBlockLanguage",()=>({pos:n,language:e}={pos:-1,language:""})=>(t,r)=>n>=0?(r==null||r(t.tr.setNodeAttribute(n,"language",e)),!0):!1);Ce(VOe,{displayName:"Command<updateCodeBlockLanguageCommand>",group:"CodeBlock"});const NM=co("codeBlockKeymap",{CreateCodeBlock:{shortcuts:"Mod-Alt-c",command:n=>{const e=n.get(ft);return()=>e.call(AM.key)}}});Ce(NM.ctx,{displayName:"KeymapCtx<codeBlock>",group:"CodeBlock"}),Ce(NM.shortcuts,{displayName:"Keymap<codeBlock>",group:"CodeBlock"});const MM=ul("image");Ce(MM,{displayName:"Attr<image>",group:"Image"});const E1=ss("image",n=>({inline:!0,group:"inline",selectable:!0,draggable:!0,marks:"",atom:!0,defining:!0,isolating:!0,attrs:{src:{default:"",validate:"string"},alt:{default:"",validate:"string"},title:{default:"",validate:"string"}},parseDOM:[{tag:"img[src]",getAttrs:e=>{if(!(e instanceof HTMLElement))throw ll(e);return{src:e.getAttribute("src")||"",alt:e.getAttribute("alt")||"",title:e.getAttribute("title")||e.getAttribute("alt")||""}}}],toDOM:e=>["img",{...n.get(MM.key)(e),...e.attrs}],parseMarkdown:{match:({type:e})=>e==="image",runner:(e,t,r)=>{const s=t.url,i=t.alt,o=t.title;e.addNode(r,{src:s,alt:i,title:o})}},toMarkdown:{match:e=>e.type.name==="image",runner:(e,t)=>{e.addNode("image",void 0,void 0,{title:t.attrs.title,url:t.attrs.src,alt:t.attrs.alt})}}}));Ce(E1.node,{displayName:"NodeSchema<image>",group:"Image"}),Ce(E1.ctx,{displayName:"NodeSchemaCtx<image>",group:"Image"});const hee=zt("InsertImage",n=>(e={})=>(t,r)=>{if(!r)return!0;const{src:s="",alt:i="",title:o=""}=e,a=E1.type(n).create({src:s,alt:i,title:o});return a&&r(t.tr.replaceSelectionWith(a).scrollIntoView()),!0});Ce(hee,{displayName:"Command<insertImageCommand>",group:"Image"});const fee=zt("UpdateImage",n=>(e={})=>(t,r)=>{const s=$Ae(t.selection,E1.type(n));if(!s)return!1;const{node:i,pos:o}=s,a={...i.attrs},{src:l,alt:c,title:u}=e;return l!==void 0&&(a.src=l),c!==void 0&&(a.alt=c),u!==void 0&&(a.title=u),r==null||r(t.tr.setNodeMarkup(o,void 0,a).scrollIntoView()),!0});Ce(fee,{displayName:"Command<updateImageCommand>",group:"Image"});const zOe=lo(n=>new qo(/!\[(?<alt>.*?)]\((?<filename>.*?)\s*(?="|\))"?(?<title>[^"]+)?"?\)/,(e,t,r,s)=>{const[i,o,a="",l]=t;return i?e.tr.replaceWith(r,s,E1.type(n).create({src:a,alt:o,title:l})):null}));Ce(zOe,{displayName:"InputRule<insertImageInputRule>",group:"Image"});const Tk=ul("hardbreak",n=>({"data-type":"hardbreak","data-is-inline":n.attrs.isInline}));Ce(Tk,{displayName:"Attr<hardbreak>",group:"Hardbreak"});const v0=ss("hardbreak",n=>({inline:!0,group:"inline",attrs:{isInline:{default:!1,validate:"boolean"}},selectable:!1,parseDOM:[{tag:"br"},{tag:'span[data-type="hardbreak"]',getAttrs:()=>({isInline:!0})}],toDOM:e=>e.attrs.isInline?["span",n.get(Tk.key)(e)," "]:["br",n.get(Tk.key)(e)],parseMarkdown:{match:({type:e})=>e==="break",runner:(e,t,r)=>{var s;e.addNode(r,{isInline:!!((s=t.data)!=null&&s.isInline)})}},leafText:()=>` +`,toMarkdown:{match:e=>e.type.name==="hardbreak",runner:(e,t)=>{t.attrs.isInline?e.addNode("text",void 0,` +`):e.addNode("break")}}}));Ce(v0.node,{displayName:"NodeSchema<hardbreak>",group:"Hardbreak"}),Ce(v0.ctx,{displayName:"NodeSchemaCtx<hardbreak>",group:"Hardbreak"});const OM=zt("InsertHardbreak",n=>()=>(e,t)=>{var i;const{selection:r,tr:s}=e;if(!(r instanceof It))return!1;if(r.empty){const o=r.$from.node();if(o.childCount>0&&((i=o.lastChild)==null?void 0:i.type.name)==="hardbreak")return t==null||t(s.replaceRangeWith(r.to-1,r.to,e.schema.node("paragraph")).setSelection(nn.near(s.doc.resolve(r.to))).scrollIntoView()),!0}return t==null||t(s.setMeta("hardbreak",!0).replaceSelectionWith(v0.type(n).create()).scrollIntoView()),!0});Ce(OM,{displayName:"Command<insertHardbreakCommand>",group:"Hardbreak"});const PM=co("hardbreakKeymap",{InsertHardbreak:{shortcuts:"Shift-Enter",command:n=>{const e=n.get(ft);return()=>e.call(OM.key)}}});Ce(PM.ctx,{displayName:"KeymapCtx<hardbreak>",group:"Hardbreak"}),Ce(PM.shortcuts,{displayName:"Keymap<hardbreak>",group:"Hardbreak"});const IM=ul("hr");Ce(IM,{displayName:"Attr<hr>",group:"Hr"});const _1=ss("hr",n=>({group:"block",parseDOM:[{tag:"hr"}],toDOM:e=>["hr",n.get(IM.key)(e)],parseMarkdown:{match:({type:e})=>e==="thematicBreak",runner:(e,t,r)=>{e.addNode(r)}},toMarkdown:{match:e=>e.type.name==="hr",runner:e=>{e.addNode("thematicBreak")}}}));Ce(_1.node,{displayName:"NodeSchema<hr>",group:"Hr"}),Ce(_1.ctx,{displayName:"NodeSchemaCtx<hr>",group:"Hr"});const pee=lo(n=>new qo(/^(?:---|___\s|\*\*\*\s)$/,(e,t,r,s)=>{const{tr:i}=e;return t[0]&&i.replaceWith(r-1,s,_1.type(n).create()),i}));Ce(pee,{displayName:"InputRule<insertHrInputRule>",group:"Hr"});const mee=zt("InsertHr",n=>()=>(e,t)=>{if(!t)return!0;const r=hl.node.type(n).create(),{tr:s,selection:i}=e,{from:o}=i,a=_1.type(n).create();if(!a)return!0;const l=s.replaceSelectionWith(a).insert(o,r),c=nn.findFrom(l.doc.resolve(o),1,!0);return c&&t(l.setSelection(c).scrollIntoView()),!0});Ce(mee,{displayName:"Command<insertHrCommand>",group:"Hr"});const DM=ul("bulletList");Ce(DM,{displayName:"Attr<bulletList>",group:"BulletList"});const b0=ss("bullet_list",n=>({content:"listItem+",group:"block",attrs:{spread:{default:!1,validate:"boolean"}},parseDOM:[{tag:"ul",getAttrs:e=>{if(!(e instanceof HTMLElement))throw ll(e);return{spread:e.dataset.spread==="true"}}}],toDOM:e=>["ul",{...n.get(DM.key)(e),"data-spread":e.attrs.spread},0],parseMarkdown:{match:({type:e,ordered:t})=>e==="list"&&!t,runner:(e,t,r)=>{const s=t.spread!=null?`${t.spread}`:"false";e.openNode(r,{spread:s}).next(t.children).closeNode()}},toMarkdown:{match:e=>e.type.name==="bullet_list",runner:(e,t)=>{e.openNode("list",void 0,{ordered:!1,spread:t.attrs.spread}).next(t.content).closeNode()}}}));Ce(b0.node,{displayName:"NodeSchema<bulletList>",group:"BulletList"}),Ce(b0.ctx,{displayName:"NodeSchemaCtx<bulletList>",group:"BulletList"});const gee=lo(n=>lN(/^\s*([-+*])\s$/,b0.type(n)));Ce(gee,{displayName:"InputRule<wrapInBulletListInputRule>",group:"BulletList"});const RM=zt("WrapInBulletList",n=>()=>oN(b0.type(n)));Ce(RM,{displayName:"Command<wrapInBulletListCommand>",group:"BulletList"});const $M=co("bulletListKeymap",{WrapInBulletList:{shortcuts:"Mod-Alt-8",command:n=>{const e=n.get(ft);return()=>e.call(RM.key)}}});Ce($M.ctx,{displayName:"KeymapCtx<bulletListKeymap>",group:"BulletList"}),Ce($M.shortcuts,{displayName:"Keymap<bulletListKeymap>",group:"BulletList"});const LM=ul("orderedList");Ce(LM,{displayName:"Attr<orderedList>",group:"OrderedList"});const w0=ss("ordered_list",n=>({content:"listItem+",group:"block",attrs:{order:{default:1,validate:"number"},spread:{default:!1,validate:"boolean"}},parseDOM:[{tag:"ol",getAttrs:e=>{if(!(e instanceof HTMLElement))throw ll(e);return{spread:e.dataset.spread,order:e.hasAttribute("start")?Number(e.getAttribute("start")):1}}}],toDOM:e=>["ol",{...n.get(LM.key)(e),...e.attrs.order===1?{}:e.attrs.order,"data-spread":e.attrs.spread},0],parseMarkdown:{match:({type:e,ordered:t})=>e==="list"&&!!t,runner:(e,t,r)=>{const s=t.spread!=null?`${t.spread}`:"true";e.openNode(r,{spread:s}).next(t.children).closeNode()}},toMarkdown:{match:e=>e.type.name==="ordered_list",runner:(e,t)=>{e.openNode("list",void 0,{ordered:!0,start:1,spread:t.attrs.spread==="true"}),e.next(t.content),e.closeNode()}}}));Ce(w0.node,{displayName:"NodeSchema<orderedList>",group:"OrderedList"}),Ce(w0.ctx,{displayName:"NodeSchemaCtx<orderedList>",group:"OrderedList"});const yee=lo(n=>lN(/^\s*(\d+)\.\s$/,w0.type(n),e=>({order:Number(e[1])}),(e,t)=>t.childCount+t.attrs.order===Number(e[1])));Ce(yee,{displayName:"InputRule<wrapInOrderedListInputRule>",group:"OrderedList"});const FM=zt("WrapInOrderedList",n=>()=>oN(w0.type(n)));Ce(FM,{displayName:"Command<wrapInOrderedListCommand>",group:"OrderedList"});const jM=co("orderedListKeymap",{WrapInOrderedList:{shortcuts:"Mod-Alt-7",command:n=>{const e=n.get(ft);return()=>e.call(FM.key)}}});Ce(jM.ctx,{displayName:"KeymapCtx<orderedList>",group:"OrderedList"}),Ce(jM.shortcuts,{displayName:"Keymap<orderedList>",group:"OrderedList"});const BM=ul("listItem");Ce(BM,{displayName:"Attr<listItem>",group:"ListItem"});const vc=ss("list_item",n=>({group:"listItem",content:"paragraph block*",attrs:{label:{default:"•",validate:"string"},listType:{default:"bullet",validate:"string"},spread:{default:!0,validate:"boolean"}},defining:!0,parseDOM:[{tag:"li",getAttrs:e=>{if(!(e instanceof HTMLElement))throw ll(e);return{label:e.dataset.label,listType:e.dataset.listType,spread:e.dataset.spread==="true"}}}],toDOM:e=>["li",{...n.get(BM.key)(e),"data-label":e.attrs.label,"data-list-type":e.attrs.listType,"data-spread":e.attrs.spread},0],parseMarkdown:{match:({type:e})=>e==="listItem",runner:(e,t,r)=>{const s=t.label!=null?`${t.label}.`:"•",i=t.label!=null?"ordered":"bullet",o=t.spread!=null?`${t.spread}`:"true";e.openNode(r,{label:s,listType:i,spread:o}),e.next(t.children),e.closeNode()}},toMarkdown:{match:e=>e.type.name==="list_item",runner:(e,t)=>{e.openNode("listItem",void 0,{spread:t.attrs.spread}),e.next(t.content),e.closeNode()}}}));Ce(vc.node,{displayName:"NodeSchema<listItem>",group:"ListItem"}),Ce(vc.ctx,{displayName:"NodeSchemaCtx<listItem>",group:"ListItem"});const VM=zt("SinkListItem",n=>()=>DOe(vc.type(n)));Ce(VM,{displayName:"Command<sinkListItemCommand>",group:"ListItem"});const zM=zt("LiftListItem",n=>()=>OOe(vc.type(n)));Ce(zM,{displayName:"Command<liftListItemCommand>",group:"ListItem"});const HM=zt("SplitListItem",n=>()=>MOe(vc.type(n)));Ce(HM,{displayName:"Command<splitListItemCommand>",group:"ListItem"});function HOe(n){return(e,t,r)=>{const{selection:s}=e;if(!(s instanceof It))return!1;const{empty:i,$from:o}=s;return!i||o.parentOffset!==0||o.node(-1).type!==vc.type(n)?!1:jX(e,t,r)}}const qM=zt("LiftFirstListItem",n=>()=>HOe(n));Ce(qM,{displayName:"Command<liftFirstListItemCommand>",group:"ListItem"});const UM=co("listItemKeymap",{NextListItem:{shortcuts:"Enter",command:n=>{const e=n.get(ft);return()=>e.call(HM.key)}},SinkListItem:{shortcuts:["Tab","Mod-]"],command:n=>{const e=n.get(ft);return()=>e.call(VM.key)}},LiftListItem:{shortcuts:["Shift-Tab","Mod-["],command:n=>{const e=n.get(ft);return()=>e.call(zM.key)}},LiftFirstListItem:{shortcuts:["Backspace","Delete"],command:n=>{const e=n.get(ft);return()=>e.call(qM.key)}}});Ce(UM.ctx,{displayName:"KeymapCtx<listItem>",group:"ListItem"}),Ce(UM.shortcuts,{displayName:"Keymap<listItem>",group:"ListItem"});const vee=eM("text",()=>({group:"inline",parseMarkdown:{match:({type:n})=>n==="text",runner:(n,e)=>{n.addText(e.value)}},toMarkdown:{match:n=>n.type.name==="text",runner:(n,e)=>{n.addNode("text",void 0,e.text)}}}));Ce(vee,{displayName:"NodeSchema<text>",group:"Text"});const WM=ul("html");Ce(WM,{displayName:"Attr<html>",group:"Html"});const GM=ss("html",n=>({atom:!0,group:"inline",inline:!0,attrs:{value:{default:"",validate:"string"}},toDOM:e=>{const t=document.createElement("span"),r={...n.get(WM.key)(e),"data-value":e.attrs.value,"data-type":"html"};return t.textContent=e.attrs.value,["span",r,e.attrs.value]},parseDOM:[{tag:'span[data-type="html"]',getAttrs:e=>({value:e.dataset.value??""})}],parseMarkdown:{match:({type:e})=>e==="html",runner:(e,t,r)=>{e.addNode(r,{value:t.value})}},toMarkdown:{match:e=>e.type.name==="html",runner:(e,t)=>{e.addNode("html",void 0,t.attrs.value)}}}));Ce(GM.node,{displayName:"NodeSchema<html>",group:"Html"}),Ce(GM.ctx,{displayName:"NodeSchemaCtx<html>",group:"Html"});const qOe=[lee,vM,hl,_k,xM,Uo,Tk,v0,SM,S1,TM,y0,IM,_1,MM,E1,DM,b0,LM,w0,BM,vc,dM,g0,fM,C1,mM,Fu,yM,$h,WM,GM,vee].flat(),UOe=[uee,gee,yee,dee,pee,cee].flat(),WOe=[nee,ree,iee,see],T1=zt("IsMarkSelected",()=>n=>e=>{if(!n)return!1;const{doc:t,selection:r}=e;return t.rangeHasMark(r.from,r.to,n)}),bee=zt("IsNoteSelected",()=>n=>e=>n?iJ(e,n).hasNode:!1),li=zt("ClearTextInCurrentBlock",()=>()=>(n,e)=>{let t=n.tr;const{$from:r,$to:s}=t.selection,{pos:i}=r,{pos:o}=s,a=i-r.node().content.size;return a<0?!1:(t=t.deleteRange(a,o),e==null||e(t),!0)}),ju=zt("SetBlockType",()=>n=>(e,t)=>{const{nodeType:r,attrs:s=null}=n??{};if(!r)return!1;const i=e.tr,{from:o,to:a}=i.selection;try{i.setBlockType(o,a,r,s)}catch{return!1}return t==null||t(i),!0}),M3=zt("WrapInBlockType",()=>n=>(e,t)=>{const{nodeType:r,attrs:s=null}=n??{};if(!r)return!1;let i=e.tr;try{const{$from:o,$to:a}=i.selection,l=o.blockRange(a),c=l&&ZA(l,r,s);if(!c)return!1;i=i.wrap(l,c)}catch{return!1}return t==null||t(i),!0}),O3=zt("AddBlockType",()=>n=>(e,t)=>{const{nodeType:r,attrs:s=null}=n??{};if(!r)return!1;const i=e.tr;try{const o=r instanceof Nu?r:r.createAndFill(s);if(!o)return!1;i.replaceSelectionWith(o)}catch{return!1}return t==null||t(i),!0}),wee=zt("SelectTextNearPos",()=>n=>(e,t)=>{const{pos:r}=n??{};if(r==null)return!1;const s=(o,a,l)=>Math.min(Math.max(o,a),l),i=e.tr;try{const o=e.doc.resolve(s(r,0,e.doc.content.size));i.setSelection(It.near(o))}catch{return!1}return t==null||t(i.scrollIntoView()),!0}),GOe=[bM,EM,Lh,kM,AM,OM,mee,hee,fee,FM,RM,VM,HM,zM,qM,kk,Sk,Ck,oee,aee,T1,bee,li,ju,M3,O3,wee],KOe=[_M,NM,PM,CM,UM,jM,$M,wM,hM,gM,pM].flat(),KM=Dh("remarkAddOrderInList",()=>()=>n=>{n0(n,"list",e=>{if(e.ordered){const t=e.start??1;e.children.forEach((r,s)=>{r.label=s+t})}})});Ce(KM.plugin,{displayName:"Remark<remarkAddOrderInListPlugin>",group:"Remark"}),Ce(KM.options,{displayName:"RemarkConfig<remarkAddOrderInListPlugin>",group:"Remark"});const YM=Dh("remarkLineBreak",()=>()=>n=>{const e=/[\t ]*(?:\r?\n|\r)/g;n0(n,"text",(t,r,s)=>{if(!t.value||typeof t.value!="string")return;const i=[];let o=0;e.lastIndex=0;let a=e.exec(t.value);for(;a;){const c=a.index;o!==c&&i.push({type:"text",value:t.value.slice(o,c)}),i.push({type:"break",data:{isInline:!0}}),o=c+a[0].length,a=e.exec(t.value)}if(i.length>0&&s&&typeof r=="number")return o<t.value.length&&i.push({type:"text",value:t.value.slice(o)}),s.children.splice(r,1,...i),r+i.length})});Ce(YM.plugin,{displayName:"Remark<remarkLineBreak>",group:"Remark"}),Ce(YM.options,{displayName:"RemarkConfig<remarkLineBreak>",group:"Remark"});const ZM=Dh("remarkInlineLink",()=>$Oe);Ce(ZM.plugin,{displayName:"Remark<remarkInlineLinkPlugin>",group:"Remark"}),Ce(ZM.options,{displayName:"RemarkConfig<remarkInlineLinkPlugin>",group:"Remark"});const YOe=n=>!!n.children,ZOe=n=>n.type==="html";function XOe(n,e){return t(n,0,null)[0];function t(r,s,i){if(YOe(r)){const o=[];for(let a=0,l=r.children.length;a<l;a++){const c=r.children[a];if(c){const u=t(c,a,r);if(u)for(let d=0,f=u.length;d<f;d++){const p=u[d];p&&o.push(p)}}}r.children=o}return e(r,s,i)}}const JOe=["root","blockquote","listItem"],XM=Dh("remarkHTMLTransformer",()=>()=>n=>{XOe(n,(e,t,r)=>ZOe(e)?(r&&JOe.includes(r.type)&&(e.children=[{...e}],delete e.value,e.type="paragraph"),[e]):[e])});Ce(XM.plugin,{displayName:"Remark<remarkHtmlTransformer>",group:"Remark"}),Ce(XM.options,{displayName:"RemarkConfig<remarkHtmlTransformer>",group:"Remark"});const JM=Dh("remarkMarker",()=>()=>(n,e)=>{const t=r=>e.value.charAt(r.position.start.offset);n0(n,r=>["strong","emphasis"].includes(r.type),r=>{r.marker=t(r)})});Ce(JM.plugin,{displayName:"Remark<remarkMarker>",group:"Remark"}),Ce(JM.options,{displayName:"RemarkConfig<remarkMarker>",group:"Remark"});const xee=Li(()=>{let n=!1;const e=new rs("MILKDOWN_INLINE_NODES_CURSOR"),t=new ks({key:e,state:{init(){return!1},apply(r){if(!r.selection.empty)return!1;const s=r.selection.$from,i=s.nodeBefore,o=s.nodeAfter;return!!(i&&o&&i.isInline&&!i.isText&&o.isInline&&!o.isText)}},props:{handleDOMEvents:{compositionend:(r,s)=>n?(n=!1,requestAnimationFrame(()=>{if(t.getState(r.state)){const o=r.state.selection.from;s.preventDefault(),r.dispatch(r.state.tr.insertText(s.data||"",o))}}),!0):!1,compositionstart:r=>(t.getState(r.state)&&(n=!0),!1),beforeinput:(r,s)=>{if(t.getState(r.state)&&s instanceof InputEvent&&s.data&&!n){const o=r.state.selection.from;return s.preventDefault(),r.dispatch(r.state.tr.insertText(s.data||"",o)),!0}return!1}},decorations(r){if(t.getState(r)){const o=r.selection.$from.pos,a=document.createElement("span"),l=ai.widget(o,a,{side:-1}),c=document.createElement("span"),u=ai.widget(o,c);return setTimeout(()=>{a.contentEditable="true",c.contentEditable="true"}),Br.create(r.doc,[l,u])}return Br.empty}}});return t});Ce(xee,{displayName:"Prose<inlineNodesCursorPlugin>",group:"Prose"});const kee=Li(n=>new ks({key:new rs("MILKDOWN_HARDBREAK_MARKS"),appendTransaction:(e,t,r)=>{if(!e.length)return;const[s]=e;if(!s)return;const[i]=s.steps;if(s.getMeta("hardbreak")){if(!(i instanceof qs))return;const{from:l}=i;return r.tr.setNodeMarkup(l,v0.type(n),void 0,[])}if(i instanceof Ou){let l=r.tr;const{from:c,to:u}=i;return r.doc.nodesBetween(c,u,(d,f)=>{d.type===v0.type(n)&&(l=l.setNodeMarkup(f,v0.type(n),void 0,[]))}),l}}}));Ce(kee,{displayName:"Prose<hardbreakClearMarkPlugin>",group:"Prose"});const QM=Zr(["table","code_block"],"hardbreakFilterNodes");Ce(QM,{displayName:"Ctx<hardbreakFilterNodes>",group:"Prose"});const Cee=Li(n=>{const e=n.get(QM.key);return new ks({key:new rs("MILKDOWN_HARDBREAK_FILTER"),filterTransaction:(t,r)=>{const s=t.getMeta("hardbreak"),[i]=t.steps;if(s&&i){const{from:o}=i,a=r.doc.resolve(o);let l=a.depth,c=!0;for(;l>0;)e.includes(a.node(l).type.name)&&(c=!1),l--;return c}return!0}})});Ce(Cee,{displayName:"Prose<hardbreakFilterPlugin>",group:"Prose"});const See=Li(n=>{const e=new rs("MILKDOWN_HEADING_ID"),t=r=>{if(r.composing)return;const s=n.get(_k.key),i=r.state.tr.setMeta("addToHistory",!1);let o=!1;const a={};r.state.doc.descendants((l,c)=>{if(l.type===Uo.type(n)){if(l.textContent.trim().length===0)return;const u=l.attrs;let d=s(l);a[d]?(a[d]+=1,d+=`-#${a[d]}`):a[d]=1,u.id!==d&&(o=!0,i.setMeta(e,!0).setNodeMarkup(c,void 0,{...u,id:d}))}}),o&&r.dispatch(i)};return new ks({key:e,view:r=>(t(r),{update:(s,i)=>{s.state.doc.eq(i.doc)||t(s)}})})});Ce(See,{displayName:"Prose<syncHeadingIdPlugin>",group:"Prose"});const Eee=Li(n=>{const e=(t,r,s)=>{if(!s.selection||t.some(d=>d.getMeta("addToHistory")===!1||!d.isGeneric))return null;const i=w0.type(n),o=b0.type(n),a=vc.type(n),l=(d,f)=>{let p=!1;const m=`${f+1}.`;return d.label!==m&&(d.label=m,p=!0),p};let c=s.tr,u=!1;return s.doc.descendants((d,f,p,m)=>{if(d.type===o){const y=d.maybeChild(0);(y==null?void 0:y.type)===a&&y.attrs.listType==="ordered"&&(u=!0,c.setNodeMarkup(f,i,{spread:"true"}),d.descendants((w,k,x,S)=>{if(w.type===a){const _={...w.attrs};l(_,S)&&(c=c.setNodeMarkup(k,void 0,_))}return!1}))}else if(d.type===a&&(p==null?void 0:p.type)===i){const y={...d.attrs};let w=!1;y.listType!=="ordered"&&(y.listType="ordered",w=!0),(p==null?void 0:p.maybeChild(0))&&(w=l(y,m)),w&&(c=c.setNodeMarkup(f,void 0,y),u=!0)}}),u?c.setMeta("addToHistory",!1):null};return new ks({key:new rs("MILKDOWN_KEEP_LIST_ORDER"),appendTransaction:e})});Ce(Eee,{displayName:"Prose<syncListOrderPlugin>",group:"Prose"});const QOe=[kee,QM,Cee,xee,KM,ZM,YM,XM,JM,Ek,See,Eee].flat(),ePe=[qOe,UOe,WOe,GOe,KOe,QOe].flat();let eO,tO;if(typeof WeakMap<"u"){let n=new WeakMap;eO=e=>n.get(e),tO=(e,t)=>(n.set(e,t),t)}else{const n=[];let t=0;eO=r=>{for(let s=0;s<n.length;s+=2)if(n[s]==r)return n[s+1]},tO=(r,s)=>(t==10&&(t=0),n[t++]=r,n[t++]=s)}var ar=class{constructor(n,e,t,r){this.width=n,this.height=e,this.map=t,this.problems=r}findCell(n){for(let e=0;e<this.map.length;e++){const t=this.map[e];if(t!=n)continue;const r=e%this.width,s=e/this.width|0;let i=r+1,o=s+1;for(let a=1;i<this.width&&this.map[e+a]==t;a++)i++;for(let a=1;o<this.height&&this.map[e+this.width*a]==t;a++)o++;return{left:r,top:s,right:i,bottom:o}}throw new RangeError(`No cell with offset ${n} found`)}colCount(n){for(let e=0;e<this.map.length;e++)if(this.map[e]==n)return e%this.width;throw new RangeError(`No cell with offset ${n} found`)}nextCell(n,e,t){const{left:r,right:s,top:i,bottom:o}=this.findCell(n);return e=="horiz"?(t<0?r==0:s==this.width)?null:this.map[i*this.width+(t<0?r-1:s)]:(t<0?i==0:o==this.height)?null:this.map[r+this.width*(t<0?i-1:o)]}rectBetween(n,e){const{left:t,right:r,top:s,bottom:i}=this.findCell(n),{left:o,right:a,top:l,bottom:c}=this.findCell(e);return{left:Math.min(t,o),top:Math.min(s,l),right:Math.max(r,a),bottom:Math.max(i,c)}}cellsInRect(n){const e=[],t={};for(let r=n.top;r<n.bottom;r++)for(let s=n.left;s<n.right;s++){const i=r*this.width+s,o=this.map[i];t[o]||(t[o]=!0,!(s==n.left&&s&&this.map[i-1]==o||r==n.top&&r&&this.map[i-this.width]==o)&&e.push(o))}return e}positionAt(n,e,t){for(let r=0,s=0;;r++){const i=s+t.child(r).nodeSize;if(r==n){let o=e+n*this.width;const a=(n+1)*this.width;for(;o<a&&this.map[o]<s;)o++;return o==a?i-1:this.map[o]}s=i}}static get(n){return eO(n)||tO(n,tPe(n))}};function tPe(n){if(n.type.spec.tableRole!="table")throw new RangeError("Not a table node: "+n.type.name);const e=nPe(n),t=n.childCount,r=[];let s=0,i=null;const o=[];for(let c=0,u=e*t;c<u;c++)r[c]=0;for(let c=0,u=0;c<t;c++){const d=n.child(c);u++;for(let m=0;;m++){for(;s<r.length&&r[s]!=0;)s++;if(m==d.childCount)break;const y=d.child(m),{colspan:w,rowspan:k,colwidth:x}=y.attrs;for(let S=0;S<k;S++){if(S+c>=t){(i||(i=[])).push({type:"overlong_rowspan",pos:u,n:k-S});break}const _=s+S*e;for(let A=0;A<w;A++){r[_+A]==0?r[_+A]=u:(i||(i=[])).push({type:"collision",row:c,pos:u,n:w-A});const T=x&&x[A];if(T){const O=(_+A)%e*2,I=o[O];I==null||I!=T&&o[O+1]==1?(o[O]=T,o[O+1]=1):I==T&&o[O+1]++}}}s+=w,u+=y.nodeSize}const f=(c+1)*e;let p=0;for(;s<f;)r[s++]==0&&p++;p&&(i||(i=[])).push({type:"missing",row:c,n:p}),u++}(e===0||t===0)&&(i||(i=[])).push({type:"zero_sized"});const a=new ar(e,t,r,i);let l=!1;for(let c=0;!l&&c<o.length;c+=2)o[c]!=null&&o[c+1]<t&&(l=!0);return l&&rPe(a,o,n),a}function nPe(n){let e=-1,t=!1;for(let r=0;r<n.childCount;r++){const s=n.child(r);let i=0;if(t)for(let o=0;o<r;o++){const a=n.child(o);for(let l=0;l<a.childCount;l++){const c=a.child(l);o+c.attrs.rowspan>r&&(i+=c.attrs.colspan)}}for(let o=0;o<s.childCount;o++){const a=s.child(o);i+=a.attrs.colspan,a.attrs.rowspan>1&&(t=!0)}e==-1?e=i:e!=i&&(e=Math.max(e,i))}return e}function rPe(n,e,t){n.problems||(n.problems=[]);const r={};for(let s=0;s<n.map.length;s++){const i=n.map[s];if(r[i])continue;r[i]=!0;const o=t.nodeAt(i);if(!o)throw new RangeError(`No cell with offset ${i} found`);let a=null;const l=o.attrs;for(let c=0;c<l.colspan;c++){const u=e[(s+c)%n.width*2];u!=null&&(!l.colwidth||l.colwidth[c]!=u)&&((a||(a=sPe(l)))[c]=u)}a&&n.problems.unshift({type:"colwidth mismatch",pos:i,colwidth:a})}}function sPe(n){if(n.colwidth)return n.colwidth.slice();const e=[];for(let t=0;t<n.colspan;t++)e.push(0);return e}function _ee(n,e){if(typeof n=="string")return{};const t=n.getAttribute("data-colwidth"),r=t&&/^\d+(,\d+)*$/.test(t)?t.split(",").map(o=>Number(o)):null,s=Number(n.getAttribute("colspan")||1),i={colspan:s,rowspan:Number(n.getAttribute("rowspan")||1),colwidth:r&&r.length==s?r:null};for(const o in e){const a=e[o].getFromDOM,l=a&&a(n);l!=null&&(i[o]=l)}return i}function Tee(n,e){const t={};n.attrs.colspan!=1&&(t.colspan=n.attrs.colspan),n.attrs.rowspan!=1&&(t.rowspan=n.attrs.rowspan),n.attrs.colwidth&&(t["data-colwidth"]=n.attrs.colwidth.join(","));for(const r in e){const s=e[r].setDOMAttr;s&&s(n.attrs[r],t)}return t}function iPe(n){if(n!==null){if(!Array.isArray(n))throw new TypeError("colwidth must be null or an array");for(const e of n)if(typeof e!="number")throw new TypeError("colwidth must be null or an array of numbers")}}function oPe(n){const e=n.cellAttributes||{},t={colspan:{default:1,validate:"number"},rowspan:{default:1,validate:"number"},colwidth:{default:null,validate:iPe}};for(const r in e)t[r]={default:e[r].default,validate:e[r].validate};return{table:{content:"table_row+",tableRole:"table",isolating:!0,group:n.tableGroup,parseDOM:[{tag:"table"}],toDOM(){return["table",["tbody",0]]}},table_row:{content:"(table_cell | table_header)*",tableRole:"row",parseDOM:[{tag:"tr"}],toDOM(){return["tr",0]}},table_cell:{content:n.cellContent,attrs:t,tableRole:"cell",isolating:!0,parseDOM:[{tag:"td",getAttrs:r=>_ee(r,e)}],toDOM(r){return["td",Tee(r,e),0]}},table_header:{content:n.cellContent,attrs:t,tableRole:"header_cell",isolating:!0,parseDOM:[{tag:"th",getAttrs:r=>_ee(r,e)}],toDOM(r){return["th",Tee(r,e),0]}}}}function _a(n){let e=n.cached.tableNodeTypes;if(!e){e=n.cached.tableNodeTypes={};for(const t in n.nodes){const r=n.nodes[t],s=r.spec.tableRole;s&&(e[s]=r)}}return e}const Fh=new rs("selectingCells");function A1(n){for(let e=n.depth-1;e>0;e--)if(n.node(e).type.spec.tableRole=="row")return n.node(0).resolve(n.before(e+1));return null}function Ta(n){const e=n.selection.$head;for(let t=e.depth;t>0;t--)if(e.node(t).type.spec.tableRole=="row")return!0;return!1}function Ak(n){const e=n.selection;if("$anchorCell"in e&&e.$anchorCell)return e.$anchorCell.pos>e.$headCell.pos?e.$anchorCell:e.$headCell;if("node"in e&&e.node&&e.node.type.spec.tableRole=="cell")return e.$anchor;const t=A1(e.$head)||aPe(e.$head);if(t)return t;throw new RangeError(`No cell found around position ${e.head}`)}function aPe(n){for(let e=n.nodeAfter,t=n.pos;e;e=e.firstChild,t++){const r=e.type.spec.tableRole;if(r=="cell"||r=="header_cell")return n.doc.resolve(t)}for(let e=n.nodeBefore,t=n.pos;e;e=e.lastChild,t--){const r=e.type.spec.tableRole;if(r=="cell"||r=="header_cell")return n.doc.resolve(t-e.nodeSize)}}function nO(n){return n.parent.type.spec.tableRole=="row"&&!!n.nodeAfter}function lPe(n){return n.node(0).resolve(n.pos+n.nodeAfter.nodeSize)}function rO(n,e){return n.depth==e.depth&&n.pos>=e.start(-1)&&n.pos<=e.end(-1)}function Aee(n,e,t){const r=n.node(-1),s=ar.get(r),i=n.start(-1),o=s.nextCell(n.pos-i,e,t);return o==null?null:n.node(0).resolve(i+o)}function x0(n,e,t=1){const r={...n,colspan:n.colspan-t};return r.colwidth&&(r.colwidth=r.colwidth.slice(),r.colwidth.splice(e,t),r.colwidth.some(s=>s>0)||(r.colwidth=null)),r}function cPe(n,e,t=1){const r={...n,colspan:n.colspan+t};if(r.colwidth){r.colwidth=r.colwidth.slice();for(let s=0;s<t;s++)r.colwidth.splice(e,0,0)}return r}function uPe(n,e,t){const r=_a(e.type.schema).header_cell;for(let s=0;s<n.height;s++)if(e.nodeAt(n.map[t+s*n.width]).type!=r)return!1;return!0}var Pr=class qd extends nn{constructor(e,t=e){const r=e.node(-1),s=ar.get(r),i=e.start(-1),o=s.rectBetween(e.pos-i,t.pos-i),a=e.node(0),l=s.cellsInRect(o).filter(u=>u!=t.pos-i);l.unshift(t.pos-i);const c=l.map(u=>{const d=r.nodeAt(u);if(!d)throw new RangeError(`No cell with offset ${u} found`);const f=i+u+1;return new NX(a.resolve(f),a.resolve(f+d.content.size))});super(c[0].$from,c[0].$to,c),this.$anchorCell=e,this.$headCell=t}map(e,t){const r=e.resolve(t.map(this.$anchorCell.pos)),s=e.resolve(t.map(this.$headCell.pos));if(nO(r)&&nO(s)&&rO(r,s)){const i=this.$anchorCell.node(-1)!=r.node(-1);return i&&this.isRowSelection()?qd.rowSelection(r,s):i&&this.isColSelection()?qd.colSelection(r,s):new qd(r,s)}return It.between(r,s)}content(){const e=this.$anchorCell.node(-1),t=ar.get(e),r=this.$anchorCell.start(-1),s=t.rectBetween(this.$anchorCell.pos-r,this.$headCell.pos-r),i={},o=[];for(let l=s.top;l<s.bottom;l++){const c=[];for(let u=l*t.width+s.left,d=s.left;d<s.right;d++,u++){const f=t.map[u];if(i[f])continue;i[f]=!0;const p=t.findCell(f);let m=e.nodeAt(f);if(!m)throw new RangeError(`No cell with offset ${f} found`);const y=s.left-p.left,w=p.right-s.right;if(y>0||w>0){let k=m.attrs;if(y>0&&(k=x0(k,0,y)),w>0&&(k=x0(k,k.colspan-w,w)),p.left<s.left){if(m=m.type.createAndFill(k),!m)throw new RangeError(`Could not create cell with attrs ${JSON.stringify(k)}`)}else m=m.type.create(k,m.content)}if(p.top<s.top||p.bottom>s.bottom){const k={...m.attrs,rowspan:Math.min(p.bottom,s.bottom)-Math.max(p.top,s.top)};p.top<s.top?m=m.type.createAndFill(k):m=m.type.create(k,m.content)}c.push(m)}o.push(e.child(l).copy($e.from(c)))}const a=this.isColSelection()&&this.isRowSelection()?e:o;return new He($e.from(a),1,1)}replace(e,t=He.empty){const r=e.steps.length,s=this.ranges;for(let o=0;o<s.length;o++){const{$from:a,$to:l}=s[o],c=e.mapping.slice(r);e.replace(c.map(a.pos),c.map(l.pos),o?He.empty:t)}const i=nn.findFrom(e.doc.resolve(e.mapping.slice(r).map(this.to)),-1);i&&e.setSelection(i)}replaceWith(e,t){this.replace(e,new He($e.from(t),0,0))}forEachCell(e){const t=this.$anchorCell.node(-1),r=ar.get(t),s=this.$anchorCell.start(-1),i=r.cellsInRect(r.rectBetween(this.$anchorCell.pos-s,this.$headCell.pos-s));for(let o=0;o<i.length;o++)e(t.nodeAt(i[o]),s+i[o])}isColSelection(){const e=this.$anchorCell.index(-1),t=this.$headCell.index(-1);if(Math.min(e,t)>0)return!1;const r=e+this.$anchorCell.nodeAfter.attrs.rowspan,s=t+this.$headCell.nodeAfter.attrs.rowspan;return Math.max(r,s)==this.$headCell.node(-1).childCount}static colSelection(e,t=e){const r=e.node(-1),s=ar.get(r),i=e.start(-1),o=s.findCell(e.pos-i),a=s.findCell(t.pos-i),l=e.node(0);return o.top<=a.top?(o.top>0&&(e=l.resolve(i+s.map[o.left])),a.bottom<s.height&&(t=l.resolve(i+s.map[s.width*(s.height-1)+a.right-1]))):(a.top>0&&(t=l.resolve(i+s.map[a.left])),o.bottom<s.height&&(e=l.resolve(i+s.map[s.width*(s.height-1)+o.right-1]))),new qd(e,t)}isRowSelection(){const e=this.$anchorCell.node(-1),t=ar.get(e),r=this.$anchorCell.start(-1),s=t.colCount(this.$anchorCell.pos-r),i=t.colCount(this.$headCell.pos-r);if(Math.min(s,i)>0)return!1;const o=s+this.$anchorCell.nodeAfter.attrs.colspan,a=i+this.$headCell.nodeAfter.attrs.colspan;return Math.max(o,a)==t.width}eq(e){return e instanceof qd&&e.$anchorCell.pos==this.$anchorCell.pos&&e.$headCell.pos==this.$headCell.pos}static rowSelection(e,t=e){const r=e.node(-1),s=ar.get(r),i=e.start(-1),o=s.findCell(e.pos-i),a=s.findCell(t.pos-i),l=e.node(0);return o.left<=a.left?(o.left>0&&(e=l.resolve(i+s.map[o.top*s.width])),a.right<s.width&&(t=l.resolve(i+s.map[s.width*(a.top+1)-1]))):(a.left>0&&(t=l.resolve(i+s.map[a.top*s.width])),o.right<s.width&&(e=l.resolve(i+s.map[s.width*(o.top+1)-1]))),new qd(e,t)}toJSON(){return{type:"cell",anchor:this.$anchorCell.pos,head:this.$headCell.pos}}static fromJSON(e,t){return new qd(e.resolve(t.anchor),e.resolve(t.head))}static create(e,t,r=t){return new qd(e.resolve(t),e.resolve(r))}getBookmark(){return new dPe(this.$anchorCell.pos,this.$headCell.pos)}};Pr.prototype.visible=!1,nn.jsonID("cell",Pr);var dPe=class Tfe{constructor(e,t){this.anchor=e,this.head=t}map(e){return new Tfe(e.map(this.anchor),e.map(this.head))}resolve(e){const t=e.resolve(this.anchor),r=e.resolve(this.head);return t.parent.type.spec.tableRole=="row"&&r.parent.type.spec.tableRole=="row"&&t.index()<t.parent.childCount&&r.index()<r.parent.childCount&&rO(t,r)?new Pr(t,r):nn.near(r,1)}};function hPe(n){if(!(n.selection instanceof Pr))return null;const e=[];return n.selection.forEachCell((t,r)=>{e.push(ai.node(r,r+t.nodeSize,{class:"selectedCell"}))}),Br.create(n.doc,e)}function fPe({$from:n,$to:e}){if(n.pos==e.pos||n.pos<e.pos-6)return!1;let t=n.pos,r=e.pos,s=n.depth;for(;s>=0&&!(n.after(s+1)<n.end(s));s--,t++);for(let i=e.depth;i>=0&&!(e.before(i+1)>e.start(i));i--,r--);return t==r&&/row|table/.test(n.node(s).type.spec.tableRole)}function pPe({$from:n,$to:e}){let t,r;for(let s=n.depth;s>0;s--){const i=n.node(s);if(i.type.spec.tableRole==="cell"||i.type.spec.tableRole==="header_cell"){t=i;break}}for(let s=e.depth;s>0;s--){const i=e.node(s);if(i.type.spec.tableRole==="cell"||i.type.spec.tableRole==="header_cell"){r=i;break}}return t!==r&&e.parentOffset===0}function mPe(n,e,t){const r=(e||n).selection,s=(e||n).doc;let i,o;if(r instanceof Ft&&(o=r.node.type.spec.tableRole)){if(o=="cell"||o=="header_cell")i=Pr.create(s,r.from);else if(o=="row"){const a=s.resolve(r.from+1);i=Pr.rowSelection(a,a)}else if(!t){const a=ar.get(r.node),l=r.from+1,c=l+a.map[a.width*a.height-1];i=Pr.create(s,l+1,c)}}else r instanceof It&&fPe(r)?i=It.create(s,r.from):r instanceof It&&pPe(r)&&(i=It.create(s,r.$from.start(),r.$from.end()));return i&&(e||(e=n.tr)).setSelection(i),e}const gPe=new rs("fix-tables");function Nee(n,e,t,r){const s=n.childCount,i=e.childCount;e:for(let o=0,a=0;o<i;o++){const l=e.child(o);for(let c=a,u=Math.min(s,o+3);c<u;c++)if(n.child(c)==l){a=c+1,t+=l.nodeSize;continue e}r(l,t),a<s&&n.child(a).sameMarkup(l)?Nee(n.child(a),l,t+1,r):l.nodesBetween(0,l.content.size,r,t+1),t+=l.nodeSize}}function yPe(n,e){let t;const r=(s,i)=>{s.type.spec.tableRole=="table"&&(t=vPe(n,s,i,t))};return e?e.doc!=n.doc&&Nee(e.doc,n.doc,0,r):n.doc.descendants(r),t}function vPe(n,e,t,r){const s=ar.get(e);if(!s.problems)return r;r||(r=n.tr);const i=[];for(let l=0;l<s.height;l++)i.push(0);for(let l=0;l<s.problems.length;l++){const c=s.problems[l];if(c.type=="collision"){const u=e.nodeAt(c.pos);if(!u)continue;const d=u.attrs;for(let f=0;f<d.rowspan;f++)i[c.row+f]+=c.n;r.setNodeMarkup(r.mapping.map(t+1+c.pos),null,x0(d,d.colspan-c.n,c.n))}else if(c.type=="missing")i[c.row]+=c.n;else if(c.type=="overlong_rowspan"){const u=e.nodeAt(c.pos);if(!u)continue;r.setNodeMarkup(r.mapping.map(t+1+c.pos),null,{...u.attrs,rowspan:u.attrs.rowspan-c.n})}else if(c.type=="colwidth mismatch"){const u=e.nodeAt(c.pos);if(!u)continue;r.setNodeMarkup(r.mapping.map(t+1+c.pos),null,{...u.attrs,colwidth:c.colwidth})}else if(c.type=="zero_sized"){const u=r.mapping.map(t);r.delete(u,u+e.nodeSize)}}let o,a;for(let l=0;l<i.length;l++)i[l]&&(o==null&&(o=l),a=l);for(let l=0,c=t+1;l<s.height;l++){const u=e.child(l),d=c+u.nodeSize,f=i[l];if(f>0){let p="cell";u.firstChild&&(p=u.firstChild.type.spec.tableRole);const m=[];for(let w=0;w<f;w++){const k=_a(n.schema)[p].createAndFill();k&&m.push(k)}const y=(l==0||o==l-1)&&a==l?c+1:d-1;r.insert(r.mapping.map(y),m)}c=d}return r.setMeta(gPe,{fixTables:!0})}function Mee(n){const e=ar.get(n),t=[],r=e.height,s=e.width;for(let i=0;i<r;i++){const o=[];for(let a=0;a<s;a++){const l=i*s+a,c=e.map[l];if(i>0){const u=l-s;if(c===e.map[u]){o.push(null);continue}}if(a>0){const u=l-1;if(c===e.map[u]){o.push(null);continue}}o.push(n.nodeAt(c))}t.push(o)}return t}function Oee(n,e){const t=[],r=ar.get(n),s=r.height,i=r.width;for(let o=0;o<s;o++){const a=n.child(o),l=[];for(let u=0;u<i;u++){const d=e[o][u];if(!d)continue;const f=r.map[o*r.width+u],p=n.nodeAt(f);if(!p)continue;const m=p.type.createChecked(d.attrs,d.content,d.marks);l.push(m)}const c=a.type.createChecked(a.attrs,l,a.marks);t.push(c)}return n.type.createChecked(n.attrs,t,n.marks)}function Pee(n,e,t,r){const s=e[0]>t[0]?-1:1,i=n.splice(e[0],e.length),o=i.length%2===0?1:0;let a;return a=s===-1?t[0]:t[t.length-1]-o,n.splice(a,0,...i),n}function P3(n){return bPe(e=>e.type.spec.tableRole==="table",n)}function bPe(n,e){for(let t=e.depth;t>=0;t-=1){const r=e.node(t);if(n(r))return{node:r,pos:t===0?0:e.before(t),start:e.start(t),depth:t}}return null}function N1(n,e){const t=P3(e.$from);if(!t)return;const r=ar.get(t.node);if(!(n<0||n>r.width-1))return r.cellsInRect({left:n,right:n+1,top:0,bottom:r.height}).map(s=>{const i=t.node.nodeAt(s),o=s+t.start;return{pos:o,start:o+1,node:i,depth:t.depth+2}})}function M1(n,e){const t=P3(e.$from);if(!t)return;const r=ar.get(t.node);if(!(n<0||n>r.height-1))return r.cellsInRect({left:0,right:r.width,top:n,bottom:n+1}).map(s=>{const i=t.node.nodeAt(s),o=s+t.start;return{pos:o,start:o+1,node:i,depth:t.depth+2}})}function Iee(n,e,t=e){let r=e,s=t;for(let u=e;u>=0;u--){const d=N1(u,n.selection);d&&d.forEach(f=>{const p=f.node.attrs.colspan+u-1;p>=r&&(r=u),p>s&&(s=p)})}for(let u=e;u<=s;u++){const d=N1(u,n.selection);d&&d.forEach(f=>{const p=f.node.attrs.colspan+u-1;f.node.attrs.colspan>1&&p>s&&(s=p)})}const i=[];for(let u=r;u<=s;u++){const d=N1(u,n.selection);d&&d.length>0&&i.push(u)}r=i[0],s=i[i.length-1];const o=N1(r,n.selection),a=M1(0,n.selection);if(!o||!a)return;const l=n.doc.resolve(o[o.length-1].pos);let c;for(let u=s;u>=r;u--){const d=N1(u,n.selection);if(d&&d.length>0){for(let f=a.length-1;f>=0;f--)if(a[f].pos===d[0].pos){c=d[0];break}if(c)break}}if(c)return{$anchor:l,$head:n.doc.resolve(c.pos),indexes:i}}function Dee(n,e,t=e){let r=e,s=t;for(let u=e;u>=0;u--){const d=M1(u,n.selection);d&&d.forEach(f=>{const p=f.node.attrs.rowspan+u-1;p>=r&&(r=u),p>s&&(s=p)})}for(let u=e;u<=s;u++){const d=M1(u,n.selection);d&&d.forEach(f=>{const p=f.node.attrs.rowspan+u-1;f.node.attrs.rowspan>1&&p>s&&(s=p)})}const i=[];for(let u=r;u<=s;u++){const d=M1(u,n.selection);d&&d.length>0&&i.push(u)}r=i[0],s=i[i.length-1];const o=M1(r,n.selection),a=N1(0,n.selection);if(!o||!a)return;const l=n.doc.resolve(o[o.length-1].pos);let c;for(let u=s;u>=r;u--){const d=M1(u,n.selection);if(d&&d.length>0){for(let f=a.length-1;f>=0;f--)if(a[f].pos===d[0].pos){c=d[0];break}if(c)break}}if(c)return{$anchor:l,$head:n.doc.resolve(c.pos),indexes:i}}function Ree(n){return n[0].map((e,t)=>n.map(r=>r[t]))}function wPe(n){var e,t;const{tr:r,originIndex:s,targetIndex:i,select:o,pos:a}=n,l=P3(r.doc.resolve(a));if(!l)return!1;const c=(e=Iee(r,s))===null||e===void 0?void 0:e.indexes,u=(t=Iee(r,i))===null||t===void 0?void 0:t.indexes;if(!c||!u||c.includes(i))return!1;const d=xPe(l.node,c,u);if(r.replaceWith(l.pos,l.pos+l.node.nodeSize,d),!o)return!0;const f=ar.get(d),p=l.start,m=i,y=f.positionAt(f.height-1,m,d),w=r.doc.resolve(p+y),k=f.positionAt(0,m,d),x=r.doc.resolve(p+k);return r.setSelection(Pr.colSelection(w,x)),!0}function xPe(n,e,t,r){let s=Ree(Mee(n));return s=Pee(s,e,t),s=Ree(s),Oee(n,s)}function kPe(n){var e,t;const{tr:r,originIndex:s,targetIndex:i,select:o,pos:a}=n,l=P3(r.doc.resolve(a));if(!l)return!1;const c=(e=Dee(r,s))===null||e===void 0?void 0:e.indexes,u=(t=Dee(r,i))===null||t===void 0?void 0:t.indexes;if(!c||!u||c.includes(i))return!1;const d=CPe(l.node,c,u);if(r.replaceWith(l.pos,l.pos+l.node.nodeSize,d),!o)return!0;const f=ar.get(d),p=l.start,m=i,y=f.positionAt(m,f.width-1,d),w=r.doc.resolve(p+y),k=f.positionAt(m,0,d),x=r.doc.resolve(p+k);return r.setSelection(Pr.rowSelection(w,x)),!0}function CPe(n,e,t,r){let s=Mee(n);return s=Pee(s,e,t),Oee(n,s)}function jh(n){const e=n.selection,t=Ak(n),r=t.node(-1),s=t.start(-1),i=ar.get(r);return{...e instanceof Pr?i.rectBetween(e.$anchorCell.pos-s,e.$headCell.pos-s):i.findCell(t.pos-s),tableStart:s,map:i,table:r}}function $ee(n,{map:e,tableStart:t,table:r},s){let i=s>0?-1:0;uPe(e,r,s+i)&&(i=s==0||s==e.width?null:0);for(let o=0;o<e.height;o++){const a=o*e.width+s;if(s>0&&s<e.width&&e.map[a-1]==e.map[a]){const l=e.map[a],c=r.nodeAt(l);n.setNodeMarkup(n.mapping.map(t+l),null,cPe(c.attrs,s-e.colCount(l))),o+=c.attrs.rowspan-1}else{const l=i==null?_a(r.type.schema).cell:r.nodeAt(e.map[a+i]).type,c=e.positionAt(o,s,r);n.insert(n.mapping.map(t+c),l.createAndFill())}}return n}function SPe(n,e){if(!Ta(n))return!1;if(e){const t=jh(n);e($ee(n.tr,t,t.left))}return!0}function EPe(n,e){if(!Ta(n))return!1;if(e){const t=jh(n);e($ee(n.tr,t,t.right))}return!0}function _Pe(n,{map:e,table:t,tableStart:r},s){const i=n.mapping.maps.length;for(let o=0;o<e.height;){const a=o*e.width+s,l=e.map[a],c=t.nodeAt(l),u=c.attrs;if(s>0&&e.map[a-1]==l||s<e.width-1&&e.map[a+1]==l)n.setNodeMarkup(n.mapping.slice(i).map(r+l),null,x0(u,s-e.colCount(l)));else{const d=n.mapping.slice(i).map(r+l);n.delete(d,d+c.nodeSize)}o+=u.rowspan}}function TPe(n,e){if(!Ta(n))return!1;if(e){const t=jh(n),r=n.tr;if(t.left==0&&t.right==t.map.width)return!1;for(let s=t.right-1;_Pe(r,t,s),s!=t.left;s--){const i=t.tableStart?r.doc.nodeAt(t.tableStart-1):r.doc;if(!i)throw new RangeError("No table found");t.table=i,t.map=ar.get(i)}e(r)}return!0}function APe(n,{map:e,table:t,tableStart:r},s){let i=0;for(let c=0;c<s;c++)i+=t.child(c).nodeSize;const o=i+t.child(s).nodeSize,a=n.mapping.maps.length;n.delete(i+r,o+r);const l=new Set;for(let c=0,u=s*e.width;c<e.width;c++,u++){const d=e.map[u];if(!l.has(d)){if(l.add(d),s>0&&d==e.map[u-e.width]){const f=t.nodeAt(d).attrs;n.setNodeMarkup(n.mapping.slice(a).map(d+r),null,{...f,rowspan:f.rowspan-1}),c+=f.colspan-1}else if(s<e.height&&d==e.map[u+e.width]){const f=t.nodeAt(d),p=f.attrs,m=f.type.create({...p,rowspan:f.attrs.rowspan-1},f.content),y=e.positionAt(s+1,c,t);n.insert(n.mapping.slice(a).map(r+y),m),c+=p.colspan-1}}}}function NPe(n,e){if(!Ta(n))return!1;if(e){const t=jh(n),r=n.tr;if(t.top==0&&t.bottom==t.map.height)return!1;for(let s=t.bottom-1;APe(r,t,s),s!=t.top;s--){const i=t.tableStart?r.doc.nodeAt(t.tableStart-1):r.doc;if(!i)throw new RangeError("No table found");t.table=i,t.map=ar.get(t.table)}e(r)}return!0}function MPe(n,e){return function(t,r){if(!Ta(t))return!1;const s=Ak(t);if(s.nodeAfter.attrs[n]===e)return!1;if(r){const i=t.tr;t.selection instanceof Pr?t.selection.forEachCell((o,a)=>{o.attrs[n]!==e&&i.setNodeMarkup(a,null,{...o.attrs,[n]:e})}):i.setNodeMarkup(s.pos,null,{...s.nodeAfter.attrs,[n]:e}),r(i)}return!0}}function OPe(n){return function(e,t){if(!Ta(e))return!1;if(t){const r=_a(e.schema),s=jh(e),i=e.tr,o=s.map.cellsInRect(n=="column"?{left:s.left,top:0,right:s.right,bottom:s.map.height}:n=="row"?{left:0,top:s.top,right:s.map.width,bottom:s.bottom}:s),a=o.map(l=>s.table.nodeAt(l));for(let l=0;l<o.length;l++)a[l].type==r.header_cell&&i.setNodeMarkup(s.tableStart+o[l],r.cell,a[l].attrs);if(i.steps.length===0)for(let l=0;l<o.length;l++)i.setNodeMarkup(s.tableStart+o[l],r.header_cell,a[l].attrs);t(i)}return!0}}function Lee(n,e,t){const r=e.map.cellsInRect({left:0,top:0,right:n=="row"?e.map.width:1,bottom:n=="column"?e.map.height:1});for(let s=0;s<r.length;s++){const i=e.table.nodeAt(r[s]);if(i&&i.type!==t.header_cell)return!1}return!0}function sO(n,e){return e=e||{useDeprecatedLogic:!1},e.useDeprecatedLogic?OPe(n):function(t,r){if(!Ta(t))return!1;if(r){const s=_a(t.schema),i=jh(t),o=t.tr,a=Lee("row",i,s),l=Lee("column",i,s),c=(n==="column"?a:n==="row"&&l)?1:0,u=n=="column"?{left:0,top:c,right:1,bottom:i.map.height}:n=="row"?{left:c,top:0,right:i.map.width,bottom:1}:i,d=n=="column"?l?s.cell:s.header_cell:n=="row"?a?s.cell:s.header_cell:s.cell;i.map.cellsInRect(u).forEach(f=>{const p=f+i.tableStart,m=o.doc.nodeAt(p);m&&o.setNodeMarkup(p,d,m.attrs)}),r(o)}return!0}}sO("row",{useDeprecatedLogic:!0}),sO("column",{useDeprecatedLogic:!0}),sO("cell",{useDeprecatedLogic:!0});function PPe(n,e){if(e<0){const t=n.nodeBefore;if(t)return n.pos-t.nodeSize;for(let r=n.index(-1)-1,s=n.before();r>=0;r--){const i=n.node(-1).child(r),o=i.lastChild;if(o)return s-1-o.nodeSize;s-=i.nodeSize}}else{if(n.index()<n.parent.childCount-1)return n.pos+n.nodeAfter.nodeSize;const t=n.node(-1);for(let r=n.indexAfter(-1),s=n.after();r<t.childCount;r++){const i=t.child(r);if(i.childCount)return s+1;s+=i.nodeSize}}return null}function Fee(n){return function(e,t){if(!Ta(e))return!1;const r=PPe(Ak(e),n);if(r==null)return!1;if(t){const s=e.doc.resolve(r);t(e.tr.setSelection(It.between(s,lPe(s))).scrollIntoView())}return!0}}function IPe(n,e){const t=n.selection.$anchor;for(let r=t.depth;r>0;r--)if(t.node(r).type.spec.tableRole=="table")return e&&e(n.tr.delete(t.before(r),t.after(r)).scrollIntoView()),!0;return!1}function Nk(n,e){const t=n.selection;if(!(t instanceof Pr))return!1;if(e){const r=n.tr,s=_a(n.schema).cell.createAndFill().content;t.forEachCell((i,o)=>{i.content.eq(s)||r.replace(r.mapping.map(o+1),r.mapping.map(o+i.nodeSize-1),new He(s,0,0))}),r.docChanged&&e(r)}return!0}function DPe(n){return(e,t)=>{const{from:r,to:s,select:i=!0,pos:o=e.selection.from}=n,a=e.tr;return kPe({tr:a,originIndex:r,targetIndex:s,select:i,pos:o})?(t==null||t(a),!0):!1}}function RPe(n){return(e,t)=>{const{from:r,to:s,select:i=!0,pos:o=e.selection.from}=n,a=e.tr;return wPe({tr:a,originIndex:r,targetIndex:s,select:i,pos:o})?(t==null||t(a),!0):!1}}function $Pe(n){if(n.size===0)return null;let{content:e,openStart:t,openEnd:r}=n;for(;e.childCount==1&&(t>0&&r>0||e.child(0).type.spec.tableRole=="table");)t--,r--,e=e.child(0).content;const s=e.child(0),i=s.type.spec.tableRole,o=s.type.schema,a=[];if(i=="row")for(let l=0;l<e.childCount;l++){let c=e.child(l).content;const u=l?0:Math.max(0,t-1),d=l<e.childCount-1?0:Math.max(0,r-1);(u||d)&&(c=iO(_a(o).row,new He(c,u,d)).content),a.push(c)}else if(i=="cell"||i=="header_cell")a.push(t||r?iO(_a(o).row,new He(e,t,r)).content:e);else return null;return LPe(o,a)}function LPe(n,e){const t=[];for(let s=0;s<e.length;s++){const i=e[s];for(let o=i.childCount-1;o>=0;o--){const{rowspan:a,colspan:l}=i.child(o).attrs;for(let c=s;c<s+a;c++)t[c]=(t[c]||0)+l}}let r=0;for(let s=0;s<t.length;s++)r=Math.max(r,t[s]);for(let s=0;s<t.length;s++)if(s>=e.length&&e.push($e.empty),t[s]<r){const i=_a(n).cell.createAndFill(),o=[];for(let a=t[s];a<r;a++)o.push(i);e[s]=e[s].append($e.from(o))}return{height:e.length,width:r,rows:e}}function iO(n,e){const t=n.createAndFill();return new AX(t).replace(0,t.content.size,e).doc}function FPe({width:n,height:e,rows:t},r,s){if(n!=r){const i=[],o=[];for(let a=0;a<t.length;a++){const l=t[a],c=[];for(let u=i[a]||0,d=0;u<r;d++){let f=l.child(d%l.childCount);u+f.attrs.colspan>r&&(f=f.type.createChecked(x0(f.attrs,f.attrs.colspan,u+f.attrs.colspan-r),f.content)),c.push(f),u+=f.attrs.colspan;for(let p=1;p<f.attrs.rowspan;p++)i[a+p]=(i[a+p]||0)+f.attrs.colspan}o.push($e.from(c))}t=o,n=r}if(e!=s){const i=[];for(let o=0,a=0;o<s;o++,a++){const l=[],c=t[a%e];for(let u=0;u<c.childCount;u++){let d=c.child(u);o+d.attrs.rowspan>s&&(d=d.type.create({...d.attrs,rowspan:Math.max(1,s-d.attrs.rowspan)},d.content)),l.push(d)}i.push($e.from(l))}t=i,e=s}return{width:n,height:e,rows:t}}function jPe(n,e,t,r,s,i,o){const a=n.doc.type.schema,l=_a(a);let c,u;if(s>e.width)for(let d=0,f=0;d<e.height;d++){const p=t.child(d);f+=p.nodeSize;const m=[];let y;p.lastChild==null||p.lastChild.type==l.cell?y=c||(c=l.cell.createAndFill()):y=u||(u=l.header_cell.createAndFill());for(let w=e.width;w<s;w++)m.push(y);n.insert(n.mapping.slice(o).map(f-1+r),m)}if(i>e.height){const d=[];for(let m=0,y=(e.height-1)*e.width;m<Math.max(e.width,s);m++){const w=m>=e.width?!1:t.nodeAt(e.map[y+m]).type==l.header_cell;d.push(w?u||(u=l.header_cell.createAndFill()):c||(c=l.cell.createAndFill()))}const f=l.row.create(null,$e.from(d)),p=[];for(let m=e.height;m<i;m++)p.push(f);n.insert(n.mapping.slice(o).map(r+t.nodeSize-2),p)}return!!(c||u)}function jee(n,e,t,r,s,i,o,a){if(o==0||o==e.height)return!1;let l=!1;for(let c=s;c<i;c++){const u=o*e.width+c,d=e.map[u];if(e.map[u-e.width]==d){l=!0;const f=t.nodeAt(d),{top:p,left:m}=e.findCell(d);n.setNodeMarkup(n.mapping.slice(a).map(d+r),null,{...f.attrs,rowspan:o-p}),n.insert(n.mapping.slice(a).map(e.positionAt(o,m,t)),f.type.createAndFill({...f.attrs,rowspan:p+f.attrs.rowspan-o})),c+=f.attrs.colspan-1}}return l}function Bee(n,e,t,r,s,i,o,a){if(o==0||o==e.width)return!1;let l=!1;for(let c=s;c<i;c++){const u=c*e.width+o,d=e.map[u];if(e.map[u-1]==d){l=!0;const f=t.nodeAt(d),p=e.colCount(d),m=n.mapping.slice(a).map(d+r);n.setNodeMarkup(m,null,x0(f.attrs,o-p,f.attrs.colspan-(o-p))),n.insert(m+f.nodeSize,f.type.createAndFill(x0(f.attrs,0,o-p))),c+=f.attrs.rowspan-1}}return l}function Vee(n,e,t,r,s){let i=t?n.doc.nodeAt(t-1):n.doc;if(!i)throw new Error("No table found");let o=ar.get(i);const{top:a,left:l}=r,c=l+s.width,u=a+s.height,d=n.tr;let f=0;function p(){if(i=t?d.doc.nodeAt(t-1):d.doc,!i)throw new Error("No table found");o=ar.get(i),f=d.mapping.maps.length}jPe(d,o,i,t,c,u,f)&&p(),jee(d,o,i,t,l,c,a,f)&&p(),jee(d,o,i,t,l,c,u,f)&&p(),Bee(d,o,i,t,a,u,l,f)&&p(),Bee(d,o,i,t,a,u,c,f)&&p();for(let m=a;m<u;m++){const y=o.positionAt(m,l,i),w=o.positionAt(m,c,i);d.replace(d.mapping.slice(f).map(y+t),d.mapping.slice(f).map(w+t),new He(s.rows[m-a],0,0))}p(),d.setSelection(new Pr(d.doc.resolve(t+o.positionAt(a,l,i)),d.doc.resolve(t+o.positionAt(u-1,c-1,i)))),e(d)}const BPe=oJ({ArrowLeft:Ok("horiz",-1),ArrowRight:Ok("horiz",1),ArrowUp:Ok("vert",-1),ArrowDown:Ok("vert",1),"Shift-ArrowLeft":Pk("horiz",-1),"Shift-ArrowRight":Pk("horiz",1),"Shift-ArrowUp":Pk("vert",-1),"Shift-ArrowDown":Pk("vert",1),Backspace:Nk,"Mod-Backspace":Nk,Delete:Nk,"Mod-Delete":Nk});function Mk(n,e,t){return t.eq(n.selection)?!1:(e&&e(n.tr.setSelection(t).scrollIntoView()),!0)}function Ok(n,e){return(t,r,s)=>{if(!s)return!1;const i=t.selection;if(i instanceof Pr)return Mk(t,r,nn.near(i.$headCell,e));if(n!="horiz"&&!i.empty)return!1;const o=zee(s,n,e);if(o==null)return!1;if(n=="horiz")return Mk(t,r,nn.near(t.doc.resolve(i.head+e),e));{const a=t.doc.resolve(o),l=Aee(a,n,e);let c;return l?c=nn.near(l,1):e<0?c=nn.near(t.doc.resolve(a.before(-1)),-1):c=nn.near(t.doc.resolve(a.after(-1)),1),Mk(t,r,c)}}}function Pk(n,e){return(t,r,s)=>{if(!s)return!1;const i=t.selection;let o;if(i instanceof Pr)o=i;else{const l=zee(s,n,e);if(l==null)return!1;o=new Pr(t.doc.resolve(l))}const a=Aee(o.$headCell,n,e);return a?Mk(t,r,new Pr(o.$anchorCell,a)):!1}}function VPe(n,e){const t=n.state.doc,r=A1(t.resolve(e));return r?(n.dispatch(n.state.tr.setSelection(new Pr(r))),!0):!1}function zPe(n,e,t){if(!Ta(n.state))return!1;let r=$Pe(t);const s=n.state.selection;if(s instanceof Pr){r||(r={width:1,height:1,rows:[$e.from(iO(_a(n.state.schema).cell,t))]});const i=s.$anchorCell.node(-1),o=s.$anchorCell.start(-1),a=ar.get(i).rectBetween(s.$anchorCell.pos-o,s.$headCell.pos-o);return r=FPe(r,a.right-a.left,a.bottom-a.top),Vee(n.state,n.dispatch,o,a,r),!0}else if(r){const i=Ak(n.state),o=i.start(-1);return Vee(n.state,n.dispatch,o,ar.get(i.node(-1)).findCell(i.pos-o),r),!0}else return!1}function HPe(n,e){var t;if(e.button!=0||e.ctrlKey||e.metaKey)return;const r=Hee(n,e.target);let s;if(e.shiftKey&&n.state.selection instanceof Pr)i(n.state.selection.$anchorCell,e),e.preventDefault();else if(e.shiftKey&&r&&(s=A1(n.state.selection.$anchor))!=null&&((t=oO(n,e))===null||t===void 0?void 0:t.pos)!=s.pos)i(s,e),e.preventDefault();else if(!r)return;function i(l,c){let u=oO(n,c);const d=Fh.getState(n.state)==null;if(!u||!rO(l,u))if(d)u=l;else return;const f=new Pr(l,u);if(d||!n.state.selection.eq(f)){const p=n.state.tr.setSelection(f);d&&p.setMeta(Fh,l.pos),n.dispatch(p)}}function o(){n.root.removeEventListener("mouseup",o),n.root.removeEventListener("dragstart",o),n.root.removeEventListener("mousemove",a),Fh.getState(n.state)!=null&&n.dispatch(n.state.tr.setMeta(Fh,-1))}function a(l){const c=l,u=Fh.getState(n.state);let d;if(u!=null)d=n.state.doc.resolve(u);else if(Hee(n,c.target)!=r&&(d=oO(n,e),!d))return o();d&&i(d,c)}n.root.addEventListener("mouseup",o),n.root.addEventListener("dragstart",o),n.root.addEventListener("mousemove",a)}function zee(n,e,t){if(!(n.state.selection instanceof It))return null;const{$head:r}=n.state.selection;for(let s=r.depth-1;s>=0;s--){const i=r.node(s);if((t<0?r.index(s):r.indexAfter(s))!=(t<0?0:i.childCount))return null;if(i.type.spec.tableRole=="cell"||i.type.spec.tableRole=="header_cell"){const o=r.before(s),a=e=="vert"?t>0?"down":"up":t>0?"right":"left";return n.endOfTextblock(a)?o:null}}return null}function Hee(n,e){for(;e&&e!=n.dom;e=e.parentNode)if(e.nodeName=="TD"||e.nodeName=="TH")return e;return null}function oO(n,e){const t=n.posAtCoords({left:e.clientX,top:e.clientY});if(!t)return null;let{inside:r,pos:s}=t;return r>=0&&A1(n.state.doc.resolve(r))||A1(n.state.doc.resolve(s))}var qPe=class{constructor(n,e){this.node=n,this.defaultCellMinWidth=e,this.dom=document.createElement("div"),this.dom.className="tableWrapper",this.table=this.dom.appendChild(document.createElement("table")),this.table.style.setProperty("--default-cell-min-width",`${e}px`),this.colgroup=this.table.appendChild(document.createElement("colgroup")),aO(n,this.colgroup,this.table,e),this.contentDOM=this.table.appendChild(document.createElement("tbody"))}update(n){return n.type!=this.node.type?!1:(this.node=n,aO(n,this.colgroup,this.table,this.defaultCellMinWidth),!0)}ignoreMutation(n){return n.type=="attributes"&&(n.target==this.table||this.colgroup.contains(n.target))}};function aO(n,e,t,r,s,i){let o=0,a=!0,l=e.firstChild;const c=n.firstChild;if(c){for(let d=0,f=0;d<c.childCount;d++){const{colspan:p,colwidth:m}=c.child(d).attrs;for(let y=0;y<p;y++,f++){const w=s==f?i:m&&m[y],k=w?w+"px":"";if(o+=w||r,w||(a=!1),l)l.style.width!=k&&(l.style.width=k),l=l.nextSibling;else{const x=document.createElement("col");x.style.width=k,e.appendChild(x)}}}for(;l;){var u;const d=l.nextSibling;(u=l.parentNode)===null||u===void 0||u.removeChild(l),l=d}a?(t.style.width=o+"px",t.style.minWidth=""):(t.style.width="",t.style.minWidth=o+"px")}}const Wo=new rs("tableColumnResizing");function UPe({handleWidth:n=5,cellMinWidth:e=25,defaultCellMinWidth:t=100,View:r=qPe,lastColumnResizable:s=!0}={}){const i=new ks({key:Wo,state:{init(o,a){var l;const c=(l=i.spec)===null||l===void 0||(l=l.props)===null||l===void 0?void 0:l.nodeViews,u=_a(a.schema).table.name;return r&&c&&(c[u]=(d,f)=>new r(d,t,f)),new WPe(-1,!1)},apply(o,a){return a.apply(o)}},props:{attributes:o=>{const a=Wo.getState(o);return a&&a.activeHandle>-1?{class:"resize-cursor"}:{}},handleDOMEvents:{mousemove:(o,a)=>{GPe(o,a,n,s)},mouseleave:o=>{KPe(o)},mousedown:(o,a)=>{YPe(o,a,e,t)}},decorations:o=>{const a=Wo.getState(o);if(a&&a.activeHandle>-1)return eIe(o,a.activeHandle)},nodeViews:{}}});return i}var WPe=class lC{constructor(e,t){this.activeHandle=e,this.dragging=t}apply(e){const t=this,r=e.getMeta(Wo);if(r&&r.setHandle!=null)return new lC(r.setHandle,!1);if(r&&r.setDragging!==void 0)return new lC(t.activeHandle,r.setDragging);if(t.activeHandle>-1&&e.docChanged){let s=e.mapping.map(t.activeHandle,-1);return nO(e.doc.resolve(s))||(s=-1),new lC(s,t.dragging)}return t}};function GPe(n,e,t,r){if(!n.editable)return;const s=Wo.getState(n.state);if(s&&!s.dragging){const i=XPe(e.target);let o=-1;if(i){const{left:a,right:l}=i.getBoundingClientRect();e.clientX-a<=t?o=qee(n,e,"left",t):l-e.clientX<=t&&(o=qee(n,e,"right",t))}if(o!=s.activeHandle){if(!r&&o!==-1){const a=n.state.doc.resolve(o),l=a.node(-1),c=ar.get(l),u=a.start(-1);if(c.colCount(a.pos-u)+a.nodeAfter.attrs.colspan-1==c.width-1)return}Wee(n,o)}}}function KPe(n){if(!n.editable)return;const e=Wo.getState(n.state);e&&e.activeHandle>-1&&!e.dragging&&Wee(n,-1)}function YPe(n,e,t,r){var s;if(!n.editable)return!1;const i=(s=n.dom.ownerDocument.defaultView)!==null&&s!==void 0?s:window,o=Wo.getState(n.state);if(!o||o.activeHandle==-1||o.dragging)return!1;const a=n.state.doc.nodeAt(o.activeHandle),l=ZPe(n,o.activeHandle,a.attrs);n.dispatch(n.state.tr.setMeta(Wo,{setDragging:{startX:e.clientX,startWidth:l}}));function c(d){i.removeEventListener("mouseup",c),i.removeEventListener("mousemove",u);const f=Wo.getState(n.state);f!=null&&f.dragging&&(JPe(n,f.activeHandle,Uee(f.dragging,d,t)),n.dispatch(n.state.tr.setMeta(Wo,{setDragging:null})))}function u(d){if(!d.which)return c(d);const f=Wo.getState(n.state);if(f&&f.dragging){const p=Uee(f.dragging,d,t);Gee(n,f.activeHandle,p,r)}}return Gee(n,o.activeHandle,l,r),i.addEventListener("mouseup",c),i.addEventListener("mousemove",u),e.preventDefault(),!0}function ZPe(n,e,{colspan:t,colwidth:r}){const s=r&&r[r.length-1];if(s)return s;const i=n.domAtPos(e);let o=i.node.childNodes[i.offset].offsetWidth,a=t;if(r)for(let l=0;l<t;l++)r[l]&&(o-=r[l],a--);return o/a}function XPe(n){for(;n&&n.nodeName!="TD"&&n.nodeName!="TH";)n=n.classList&&n.classList.contains("ProseMirror")?null:n.parentNode;return n}function qee(n,e,t,r){const s=t=="right"?-r:r,i=n.posAtCoords({left:e.clientX+s,top:e.clientY});if(!i)return-1;const{pos:o}=i,a=A1(n.state.doc.resolve(o));if(!a)return-1;if(t=="right")return a.pos;const l=ar.get(a.node(-1)),c=a.start(-1),u=l.map.indexOf(a.pos-c);return u%l.width==0?-1:c+l.map[u-1]}function Uee(n,e,t){const r=e.clientX-n.startX;return Math.max(t,n.startWidth+r)}function Wee(n,e){n.dispatch(n.state.tr.setMeta(Wo,{setHandle:e}))}function JPe(n,e,t){const r=n.state.doc.resolve(e),s=r.node(-1),i=ar.get(s),o=r.start(-1),a=i.colCount(r.pos-o)+r.nodeAfter.attrs.colspan-1,l=n.state.tr;for(let c=0;c<i.height;c++){const u=c*i.width+a;if(c&&i.map[u]==i.map[u-i.width])continue;const d=i.map[u],f=s.nodeAt(d).attrs,p=f.colspan==1?0:a-i.colCount(d);if(f.colwidth&&f.colwidth[p]==t)continue;const m=f.colwidth?f.colwidth.slice():QPe(f.colspan);m[p]=t,l.setNodeMarkup(o+d,null,{...f,colwidth:m})}l.docChanged&&n.dispatch(l)}function Gee(n,e,t,r){const s=n.state.doc.resolve(e),i=s.node(-1),o=s.start(-1),a=ar.get(i).colCount(s.pos-o)+s.nodeAfter.attrs.colspan-1;let l=n.domAtPos(s.start(-1)).node;for(;l&&l.nodeName!="TABLE";)l=l.parentNode;l&&aO(i,l.firstChild,l,r,a,t)}function QPe(n){return Array(n).fill(0)}function eIe(n,e){const t=[],r=n.doc.resolve(e),s=r.node(-1);if(!s)return Br.empty;const i=ar.get(s),o=r.start(-1),a=i.colCount(r.pos-o)+r.nodeAfter.attrs.colspan-1;for(let c=0;c<i.height;c++){const u=a+c*i.width;if((a==i.width-1||i.map[u]!=i.map[u+1])&&(c==0||i.map[u]!=i.map[u-i.width])){var l;const d=i.map[u],f=o+d+s.nodeAt(d).nodeSize-1,p=document.createElement("div");p.className="column-resize-handle",!((l=Wo.getState(n))===null||l===void 0)&&l.dragging&&t.push(ai.node(o+d,o+d+s.nodeAt(d).nodeSize,{class:"column-resize-dragging"})),t.push(ai.widget(f,p))}}return Br.create(n.doc,t)}function tIe({allowTableNodeSelection:n=!1}={}){return new ks({key:Fh,state:{init(){return null},apply(e,t){const r=e.getMeta(Fh);if(r!=null)return r==-1?null:r;if(t==null||!e.docChanged)return t;const{deleted:s,pos:i}=e.mapping.mapResult(t);return s?null:i}},props:{decorations:hPe,handleDOMEvents:{mousedown:HPe},createSelectionBetween(e){return Fh.getState(e.state)!=null?e.state.selection:null},handleTripleClick:VPe,handleKeyDown:BPe,handlePaste:zPe},appendTransaction(e,t,r){return mPe(r,yPe(r,t),n)}})}var Ik=typeof navigator<"u"?navigator:null,lO=Ik&&Ik.userAgent||"",nIe=/Edge\/(\d+)/.exec(lO),rIe=/MSIE \d/.exec(lO),sIe=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(lO),iIe=!!(rIe||sIe||nIe),oIe=!iIe&&!!Ik&&/Apple Computer/.test(Ik.vendor),Kee=new rs("safari-ime-span"),cO=!1,aIe={key:Kee,props:{decorations:lIe,handleDOMEvents:{compositionstart:()=>{cO=!0},compositionend:()=>{cO=!1}}}};function lIe(n){const{$from:e,$to:t,to:r}=n.selection;if(cO&&e.sameParent(t)){const s=ai.widget(r,cIe,{ignoreSelection:!0,key:"safari-ime-span"});return Br.create(n.doc,[s])}}function cIe(n){const e=n.dom.ownerDocument.createElement("span");return e.className="ProseMirror-safari-ime-span",e}var uIe=new ks(oIe?aIe:{key:Kee});function Yee(n,e){const t=String(n);if(typeof e!="string")throw new TypeError("Expected character");let r=0,s=t.indexOf(e);for(;s!==-1;)r++,s=t.indexOf(e,s+e.length);return r}function dIe(n){if(typeof n!="string")throw new TypeError("Expected a string");return n.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function hIe(n,e,t){const s=M7((t||{}).ignore||[]),i=fIe(e);let o=-1;for(;++o<i.length;)_A(n,"text",a);function a(c,u){let d=-1,f;for(;++d<u.length;){const p=u[d],m=f?f.children:void 0;if(s(p,m?m.indexOf(p):void 0,f))return;f=p}if(f)return l(c,u)}function l(c,u){const d=u[u.length-1],f=i[o][0],p=i[o][1];let m=0;const w=d.children.indexOf(c);let k=!1,x=[];f.lastIndex=0;let S=f.exec(c.value);for(;S;){const _=S.index,A={index:S.index,input:S.input,stack:[...u,c]};let T=p(...S,A);if(typeof T=="string"&&(T=T.length>0?{type:"text",value:T}:void 0),T===!1?f.lastIndex=_+1:(m!==_&&x.push({type:"text",value:c.value.slice(m,_)}),Array.isArray(T)?x.push(...T):T&&x.push(T),m=_+S[0].length,k=!0),!f.global)break;S=f.exec(c.value)}return k?(m<c.value.length&&x.push({type:"text",value:c.value.slice(m)}),d.children.splice(w,1,...x)):x=[c],w+x.length}}function fIe(n){const e=[];if(!Array.isArray(n))throw new TypeError("Expected find and replace tuple or list of tuples");const t=!n[0]||Array.isArray(n[0])?n:[n];let r=-1;for(;++r<t.length;){const s=t[r];e.push([pIe(s[0]),mIe(s[1])])}return e}function pIe(n){return typeof n=="string"?new RegExp(dIe(n),"g"):n}function mIe(n){return typeof n=="function"?n:function(){return n}}const uO="phrasing",dO=["autolink","link","image","label"];function gIe(){return{transforms:[CIe],enter:{literalAutolink:vIe,literalAutolinkEmail:hO,literalAutolinkHttp:hO,literalAutolinkWww:hO},exit:{literalAutolink:kIe,literalAutolinkEmail:xIe,literalAutolinkHttp:bIe,literalAutolinkWww:wIe}}}function yIe(){return{unsafe:[{character:"@",before:"[+\\-.\\w]",after:"[\\-.\\w]",inConstruct:uO,notInConstruct:dO},{character:".",before:"[Ww]",after:"[\\-.\\w]",inConstruct:uO,notInConstruct:dO},{character:":",before:"[ps]",after:"\\/",inConstruct:uO,notInConstruct:dO}]}}function vIe(n){this.enter({type:"link",title:null,url:"",children:[]},n)}function hO(n){this.config.enter.autolinkProtocol.call(this,n)}function bIe(n){this.config.exit.autolinkProtocol.call(this,n)}function wIe(n){this.config.exit.data.call(this,n);const e=this.stack[this.stack.length-1];e.type,e.url="http://"+this.sliceSerialize(n)}function xIe(n){this.config.exit.autolinkEmail.call(this,n)}function kIe(n){this.exit(n)}function CIe(n){hIe(n,[[/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/gi,SIe],[new RegExp("(?<=^|\\s|\\p{P}|\\p{S})([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)","gu"),EIe]],{ignore:["link","linkReference"]})}function SIe(n,e,t,r,s){let i="";if(!Zee(s)||(/^w/i.test(e)&&(t=e+t,e="",i="http://"),!_Ie(t)))return!1;const o=TIe(t+r);if(!o[0])return!1;const a={type:"link",title:null,url:i+e+o[0],children:[{type:"text",value:e+o[0]}]};return o[1]?[a,{type:"text",value:o[1]}]:a}function EIe(n,e,t,r){return!Zee(r,!0)||/[-\d_]$/.test(t)?!1:{type:"link",title:null,url:"mailto:"+e+"@"+t,children:[{type:"text",value:e+"@"+t}]}}function _Ie(n){const e=n.split(".");return!(e.length<2||e[e.length-1]&&(/_/.test(e[e.length-1])||!/[a-zA-Z\d]/.test(e[e.length-1]))||e[e.length-2]&&(/_/.test(e[e.length-2])||!/[a-zA-Z\d]/.test(e[e.length-2])))}function TIe(n){const e=/[!"&'),.:;<>?\]}]+$/.exec(n);if(!e)return[n,void 0];n=n.slice(0,e.index);let t=e[0],r=t.indexOf(")");const s=Yee(n,"(");let i=Yee(n,")");for(;r!==-1&&s>i;)n+=t.slice(0,r+1),t=t.slice(r+1),r=t.indexOf(")"),i++;return[n,t]}function Zee(n,e){const t=n.input.charCodeAt(n.index-1);return(n.index===0||t0(t)||_7(t))&&(!e||t!==47)}Xee.peek=$Ie;function AIe(){this.buffer()}function NIe(n){this.enter({type:"footnoteReference",identifier:"",label:""},n)}function MIe(){this.buffer()}function OIe(n){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},n)}function PIe(n){const e=this.resume(),t=this.stack[this.stack.length-1];t.type,t.identifier=cl(this.sliceSerialize(n)).toLowerCase(),t.label=e}function IIe(n){this.exit(n)}function DIe(n){const e=this.resume(),t=this.stack[this.stack.length-1];t.type,t.identifier=cl(this.sliceSerialize(n)).toLowerCase(),t.label=e}function RIe(n){this.exit(n)}function $Ie(){return"["}function Xee(n,e,t,r){const s=t.createTracker(r);let i=s.move("[^");const o=t.enter("footnoteReference"),a=t.enter("reference");return i+=s.move(t.safe(t.associationId(n),{after:"]",before:i})),a(),o(),i+=s.move("]"),i}function LIe(){return{enter:{gfmFootnoteCallString:AIe,gfmFootnoteCall:NIe,gfmFootnoteDefinitionLabelString:MIe,gfmFootnoteDefinition:OIe},exit:{gfmFootnoteCallString:PIe,gfmFootnoteCall:IIe,gfmFootnoteDefinitionLabelString:DIe,gfmFootnoteDefinition:RIe}}}function FIe(n){let e=!1;return n&&n.firstLineBlank&&(e=!0),{handlers:{footnoteDefinition:t,footnoteReference:Xee},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function t(r,s,i,o){const a=i.createTracker(o);let l=a.move("[^");const c=i.enter("footnoteDefinition"),u=i.enter("label");return l+=a.move(i.safe(i.associationId(r),{before:l,after:"]"})),u(),l+=a.move("]:"),r.children&&r.children.length>0&&(a.shift(4),l+=a.move((e?` +`:" ")+i.indentLines(i.containerFlow(r,a.current()),e?Jee:jIe))),c(),l}}function jIe(n,e,t){return e===0?n:Jee(n,e,t)}function Jee(n,e,t){return(t?"":" ")+n}const BIe=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];Qee.peek=UIe;function VIe(){return{canContainEols:["delete"],enter:{strikethrough:HIe},exit:{strikethrough:qIe}}}function zIe(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:BIe}],handlers:{delete:Qee}}}function HIe(n){this.enter({type:"delete",children:[]},n)}function qIe(n){this.exit(n)}function Qee(n,e,t,r){const s=t.createTracker(r),i=t.enter("strikethrough");let o=s.move("~~");return o+=t.containerPhrasing(n,{...s.current(),before:o,after:"~"}),o+=s.move("~~"),i(),o}function UIe(){return"~"}function WIe(n){return n.length}function GIe(n,e){const t=e||{},r=(t.align||[]).concat(),s=t.stringLength||WIe,i=[],o=[],a=[],l=[];let c=0,u=-1;for(;++u<n.length;){const y=[],w=[];let k=-1;for(n[u].length>c&&(c=n[u].length);++k<n[u].length;){const x=KIe(n[u][k]);if(t.alignDelimiters!==!1){const S=s(x);w[k]=S,(l[k]===void 0||S>l[k])&&(l[k]=S)}y.push(x)}o[u]=y,a[u]=w}let d=-1;if(typeof r=="object"&&"length"in r)for(;++d<c;)i[d]=ete(r[d]);else{const y=ete(r);for(;++d<c;)i[d]=y}d=-1;const f=[],p=[];for(;++d<c;){const y=i[d];let w="",k="";y===99?(w=":",k=":"):y===108?w=":":y===114&&(k=":");let x=t.alignDelimiters===!1?1:Math.max(1,l[d]-w.length-k.length);const S=w+"-".repeat(x)+k;t.alignDelimiters!==!1&&(x=w.length+x+k.length,x>l[d]&&(l[d]=x),p[d]=x),f[d]=S}o.splice(1,0,f),a.splice(1,0,p),u=-1;const m=[];for(;++u<o.length;){const y=o[u],w=a[u];d=-1;const k=[];for(;++d<c;){const x=y[d]||"";let S="",_="";if(t.alignDelimiters!==!1){const A=l[d]-(w[d]||0),T=i[d];T===114?S=" ".repeat(A):T===99?A%2?(S=" ".repeat(A/2+.5),_=" ".repeat(A/2-.5)):(S=" ".repeat(A/2),_=S):_=" ".repeat(A)}t.delimiterStart!==!1&&!d&&k.push("|"),t.padding!==!1&&!(t.alignDelimiters===!1&&x==="")&&(t.delimiterStart!==!1||d)&&k.push(" "),t.alignDelimiters!==!1&&k.push(S),k.push(x),t.alignDelimiters!==!1&&k.push(_),t.padding!==!1&&k.push(" "),(t.delimiterEnd!==!1||d!==c-1)&&k.push("|")}m.push(t.delimiterEnd===!1?k.join("").replace(/ +$/,""):k.join(""))}return m.join(` +`)}function KIe(n){return n==null?"":String(n)}function ete(n){const e=typeof n=="string"?n.codePointAt(0):0;return e===67||e===99?99:e===76||e===108?108:e===82||e===114?114:0}function YIe(){return{enter:{table:ZIe,tableData:tte,tableHeader:tte,tableRow:JIe},exit:{codeText:QIe,table:XIe,tableData:fO,tableHeader:fO,tableRow:fO}}}function ZIe(n){const e=n._align;this.enter({type:"table",align:e.map(function(t){return t==="none"?null:t}),children:[]},n),this.data.inTable=!0}function XIe(n){this.exit(n),this.data.inTable=void 0}function JIe(n){this.enter({type:"tableRow",children:[]},n)}function fO(n){this.exit(n)}function tte(n){this.enter({type:"tableCell",children:[]},n)}function QIe(n){let e=this.resume();this.data.inTable&&(e=e.replace(/\\([\\|])/g,eDe));const t=this.stack[this.stack.length-1];t.type,t.value=e,this.exit(n)}function eDe(n,e){return e==="|"?e:n}function tDe(n){const e=n||{},t=e.tableCellPadding,r=e.tablePipeAlign,s=e.stringLength,i=t?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` +`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:f,table:o,tableCell:l,tableRow:a}};function o(p,m,y,w){return c(u(p,y,w),p.align)}function a(p,m,y,w){const k=d(p,y,w),x=c([k]);return x.slice(0,x.indexOf(` +`))}function l(p,m,y,w){const k=y.enter("tableCell"),x=y.enter("phrasing"),S=y.containerPhrasing(p,{...w,before:i,after:i});return x(),k(),S}function c(p,m){return GIe(p,{align:m,alignDelimiters:r,padding:t,stringLength:s})}function u(p,m,y){const w=p.children;let k=-1;const x=[],S=m.enter("table");for(;++k<w.length;)x[k]=d(w[k],m,y);return S(),x}function d(p,m,y){const w=p.children;let k=-1;const x=[],S=m.enter("tableRow");for(;++k<w.length;)x[k]=l(w[k],p,m,y);return S(),x}function f(p,m,y){let w=AA.inlineCode(p,m,y);return y.stack.includes("tableCell")&&(w=w.replace(/\|/g,"\\$&")),w}}function nDe(){return{exit:{taskListCheckValueChecked:nte,taskListCheckValueUnchecked:nte,paragraph:sDe}}}function rDe(){return{unsafe:[{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{listItem:iDe}}}function nte(n){const e=this.stack[this.stack.length-2];e.type,e.checked=n.type==="taskListCheckValueChecked"}function sDe(n){const e=this.stack[this.stack.length-2];if(e&&e.type==="listItem"&&typeof e.checked=="boolean"){const t=this.stack[this.stack.length-1];t.type;const r=t.children[0];if(r&&r.type==="text"){const s=e.children;let i=-1,o;for(;++i<s.length;){const a=s[i];if(a.type==="paragraph"){o=a;break}}o===t&&(r.value=r.value.slice(1),r.value.length===0?t.children.shift():t.position&&r.position&&typeof r.position.start.offset=="number"&&(r.position.start.column++,r.position.start.offset++,t.position.start=Object.assign({},r.position.start)))}}this.exit(n)}function iDe(n,e,t,r){const s=n.children[0],i=typeof n.checked=="boolean"&&s&&s.type==="paragraph",o="["+(n.checked?"x":" ")+"] ",a=t.createTracker(r);i&&a.move(o);let l=AA.listItem(n,e,t,{...r,...a.current()});return i&&(l=l.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,c)),l;function c(u){return u+o}}function oDe(){return[gIe(),LIe(),VIe(),YIe(),nDe()]}function aDe(n){return{extensions:[yIe(),FIe(n),zIe(),tDe(n),rDe()]}}const lDe={tokenize:pDe,partial:!0},rte={tokenize:mDe,partial:!0},ste={tokenize:gDe,partial:!0},ite={tokenize:yDe,partial:!0},cDe={tokenize:vDe,partial:!0},ote={name:"wwwAutolink",tokenize:hDe,previous:lte},ate={name:"protocolAutolink",tokenize:fDe,previous:cte},Bu={name:"emailAutolink",tokenize:dDe,previous:ute},bc={};function uDe(){return{text:bc}}let k0=48;for(;k0<123;)bc[k0]=Bu,k0++,k0===58?k0=65:k0===91&&(k0=97);bc[43]=Bu,bc[45]=Bu,bc[46]=Bu,bc[95]=Bu,bc[72]=[Bu,ate],bc[104]=[Bu,ate],bc[87]=[Bu,ote],bc[119]=[Bu,ote];function dDe(n,e,t){const r=this;let s,i;return o;function o(d){return!pO(d)||!ute.call(r,r.previous)||mO(r.events)?t(d):(n.enter("literalAutolink"),n.enter("literalAutolinkEmail"),a(d))}function a(d){return pO(d)?(n.consume(d),a):d===64?(n.consume(d),l):t(d)}function l(d){return d===46?n.check(cDe,u,c)(d):d===45||d===95||ro(d)?(i=!0,n.consume(d),l):u(d)}function c(d){return n.consume(d),s=!0,l}function u(d){return i&&s&&Pi(r.previous)?(n.exit("literalAutolinkEmail"),n.exit("literalAutolink"),e(d)):t(d)}}function hDe(n,e,t){const r=this;return s;function s(o){return o!==87&&o!==119||!lte.call(r,r.previous)||mO(r.events)?t(o):(n.enter("literalAutolink"),n.enter("literalAutolinkWww"),n.check(lDe,n.attempt(rte,n.attempt(ste,i),t),t)(o))}function i(o){return n.exit("literalAutolinkWww"),n.exit("literalAutolink"),e(o)}}function fDe(n,e,t){const r=this;let s="",i=!1;return o;function o(d){return(d===72||d===104)&&cte.call(r,r.previous)&&!mO(r.events)?(n.enter("literalAutolink"),n.enter("literalAutolinkHttp"),s+=String.fromCodePoint(d),n.consume(d),a):t(d)}function a(d){if(Pi(d)&&s.length<5)return s+=String.fromCodePoint(d),n.consume(d),a;if(d===58){const f=s.toLowerCase();if(f==="http"||f==="https")return n.consume(d),l}return t(d)}function l(d){return d===47?(n.consume(d),i?c:(i=!0,l)):t(d)}function c(d){return d===null||E7(d)||br(d)||t0(d)||_7(d)?t(d):n.attempt(rte,n.attempt(ste,u),t)(d)}function u(d){return n.exit("literalAutolinkHttp"),n.exit("literalAutolink"),e(d)}}function pDe(n,e,t){let r=0;return s;function s(o){return(o===87||o===119)&&r<3?(r++,n.consume(o),s):o===46&&r===3?(n.consume(o),i):t(o)}function i(o){return o===null?t(o):e(o)}}function mDe(n,e,t){let r,s,i;return o;function o(c){return c===46||c===95?n.check(ite,l,a)(c):c===null||br(c)||t0(c)||c!==45&&_7(c)?l(c):(i=!0,n.consume(c),o)}function a(c){return c===95?r=!0:(s=r,r=void 0),n.consume(c),o}function l(c){return s||r||!i?t(c):e(c)}}function gDe(n,e){let t=0,r=0;return s;function s(o){return o===40?(t++,n.consume(o),s):o===41&&r<t?i(o):o===33||o===34||o===38||o===39||o===41||o===42||o===44||o===46||o===58||o===59||o===60||o===63||o===93||o===95||o===126?n.check(ite,e,i)(o):o===null||br(o)||t0(o)?e(o):(n.consume(o),s)}function i(o){return o===41&&r++,n.consume(o),s}}function yDe(n,e,t){return r;function r(a){return a===33||a===34||a===39||a===41||a===42||a===44||a===46||a===58||a===59||a===63||a===95||a===126?(n.consume(a),r):a===38?(n.consume(a),i):a===93?(n.consume(a),s):a===60||a===null||br(a)||t0(a)?e(a):t(a)}function s(a){return a===null||a===40||a===91||br(a)||t0(a)?e(a):r(a)}function i(a){return Pi(a)?o(a):t(a)}function o(a){return a===59?(n.consume(a),r):Pi(a)?(n.consume(a),o):t(a)}}function vDe(n,e,t){return r;function r(i){return n.consume(i),s}function s(i){return ro(i)?t(i):e(i)}}function lte(n){return n===null||n===40||n===42||n===95||n===91||n===93||n===126||br(n)}function cte(n){return!Pi(n)}function ute(n){return!(n===47||pO(n))}function pO(n){return n===43||n===45||n===46||n===95||ro(n)}function mO(n){let e=n.length,t=!1;for(;e--;){const r=n[e][1];if((r.type==="labelLink"||r.type==="labelImage")&&!r._balanced){t=!0;break}if(r._gfmAutolinkLiteralWalkedInto){t=!1;break}}return n.length>0&&!t&&(n[n.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),t}const bDe={tokenize:TDe,partial:!0};function wDe(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:SDe,continuation:{tokenize:EDe},exit:_De}},text:{91:{name:"gfmFootnoteCall",tokenize:CDe},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:xDe,resolveTo:kDe}}}}function xDe(n,e,t){const r=this;let s=r.events.length;const i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let o;for(;s--;){const l=r.events[s][1];if(l.type==="labelImage"){o=l;break}if(l.type==="gfmFootnoteCall"||l.type==="labelLink"||l.type==="label"||l.type==="image"||l.type==="link")break}return a;function a(l){if(!o||!o._balanced)return t(l);const c=cl(r.sliceSerialize({start:o.end,end:r.now()}));return c.codePointAt(0)!==94||!i.includes(c.slice(1))?t(l):(n.enter("gfmFootnoteCallLabelMarker"),n.consume(l),n.exit("gfmFootnoteCallLabelMarker"),e(l))}}function kDe(n,e){let t=n.length;for(;t--;)if(n[t][1].type==="labelImage"&&n[t][0]==="enter"){n[t][1];break}n[t+1][1].type="data",n[t+3][1].type="gfmFootnoteCallLabelMarker";const r={type:"gfmFootnoteCall",start:Object.assign({},n[t+3][1].start),end:Object.assign({},n[n.length-1][1].end)},s={type:"gfmFootnoteCallMarker",start:Object.assign({},n[t+3][1].end),end:Object.assign({},n[t+3][1].end)};s.end.column++,s.end.offset++,s.end._bufferIndex++;const i={type:"gfmFootnoteCallString",start:Object.assign({},s.end),end:Object.assign({},n[n.length-1][1].start)},o={type:"chunkString",contentType:"string",start:Object.assign({},i.start),end:Object.assign({},i.end)},a=[n[t+1],n[t+2],["enter",r,e],n[t+3],n[t+4],["enter",s,e],["exit",s,e],["enter",i,e],["enter",o,e],["exit",o,e],["exit",i,e],n[n.length-2],n[n.length-1],["exit",r,e]];return n.splice(t,n.length-t+1,...a),n}function CDe(n,e,t){const r=this,s=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let i=0,o;return a;function a(d){return n.enter("gfmFootnoteCall"),n.enter("gfmFootnoteCallLabelMarker"),n.consume(d),n.exit("gfmFootnoteCallLabelMarker"),l}function l(d){return d!==94?t(d):(n.enter("gfmFootnoteCallMarker"),n.consume(d),n.exit("gfmFootnoteCallMarker"),n.enter("gfmFootnoteCallString"),n.enter("chunkString").contentType="string",c)}function c(d){if(i>999||d===93&&!o||d===null||d===91||br(d))return t(d);if(d===93){n.exit("chunkString");const f=n.exit("gfmFootnoteCallString");return s.includes(cl(r.sliceSerialize(f)))?(n.enter("gfmFootnoteCallLabelMarker"),n.consume(d),n.exit("gfmFootnoteCallLabelMarker"),n.exit("gfmFootnoteCall"),e):t(d)}return br(d)||(o=!0),i++,n.consume(d),d===92?u:c}function u(d){return d===91||d===92||d===93?(n.consume(d),i++,c):c(d)}}function SDe(n,e,t){const r=this,s=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let i,o=0,a;return l;function l(m){return n.enter("gfmFootnoteDefinition")._container=!0,n.enter("gfmFootnoteDefinitionLabel"),n.enter("gfmFootnoteDefinitionLabelMarker"),n.consume(m),n.exit("gfmFootnoteDefinitionLabelMarker"),c}function c(m){return m===94?(n.enter("gfmFootnoteDefinitionMarker"),n.consume(m),n.exit("gfmFootnoteDefinitionMarker"),n.enter("gfmFootnoteDefinitionLabelString"),n.enter("chunkString").contentType="string",u):t(m)}function u(m){if(o>999||m===93&&!a||m===null||m===91||br(m))return t(m);if(m===93){n.exit("chunkString");const y=n.exit("gfmFootnoteDefinitionLabelString");return i=cl(r.sliceSerialize(y)),n.enter("gfmFootnoteDefinitionLabelMarker"),n.consume(m),n.exit("gfmFootnoteDefinitionLabelMarker"),n.exit("gfmFootnoteDefinitionLabel"),f}return br(m)||(a=!0),o++,n.consume(m),m===92?d:u}function d(m){return m===91||m===92||m===93?(n.consume(m),o++,u):u(m)}function f(m){return m===58?(n.enter("definitionMarker"),n.consume(m),n.exit("definitionMarker"),s.includes(i)||s.push(i),Fn(n,p,"gfmFootnoteDefinitionWhitespace")):t(m)}function p(m){return e(m)}}function EDe(n,e,t){return n.check(j2,e,n.attempt(bDe,e,t))}function _De(n){n.exit("gfmFootnoteDefinition")}function TDe(n,e,t){const r=this;return Fn(n,s,"gfmFootnoteDefinitionIndent",5);function s(i){const o=r.events[r.events.length-1];return o&&o[1].type==="gfmFootnoteDefinitionIndent"&&o[2].sliceSerialize(o[1],!0).length===4?e(i):t(i)}}function ADe(n){let t=(n||{}).singleTilde;const r={name:"strikethrough",tokenize:i,resolveAll:s};return t==null&&(t=!0),{text:{126:r},insideSpan:{null:[r]},attentionMarkers:{null:[126]}};function s(o,a){let l=-1;for(;++l<o.length;)if(o[l][0]==="enter"&&o[l][1].type==="strikethroughSequenceTemporary"&&o[l][1]._close){let c=l;for(;c--;)if(o[c][0]==="exit"&&o[c][1].type==="strikethroughSequenceTemporary"&&o[c][1]._open&&o[l][1].end.offset-o[l][1].start.offset===o[c][1].end.offset-o[c][1].start.offset){o[l][1].type="strikethroughSequence",o[c][1].type="strikethroughSequence";const u={type:"strikethrough",start:Object.assign({},o[c][1].start),end:Object.assign({},o[l][1].end)},d={type:"strikethroughText",start:Object.assign({},o[c][1].end),end:Object.assign({},o[l][1].start)},f=[["enter",u,a],["enter",o[c][1],a],["exit",o[c][1],a],["enter",d,a]],p=a.parser.constructs.insideSpan.null;p&&zo(f,f.length,0,T7(p,o.slice(c+1,l),a)),zo(f,f.length,0,[["exit",d,a],["enter",o[l][1],a],["exit",o[l][1],a],["exit",u,a]]),zo(o,c-1,l-c+3,f),l=c+f.length-2;break}}for(l=-1;++l<o.length;)o[l][1].type==="strikethroughSequenceTemporary"&&(o[l][1].type="data");return o}function i(o,a,l){const c=this.previous,u=this.events;let d=0;return f;function f(m){return c===126&&u[u.length-1][1].type!=="characterEscape"?l(m):(o.enter("strikethroughSequenceTemporary"),p(m))}function p(m){const y=o1(c);if(m===126)return d>1?l(m):(o.consume(m),d++,p);if(d<2&&!t)return l(m);const w=o.exit("strikethroughSequenceTemporary"),k=o1(m);return w._open=!k||k===2&&!!y,w._close=!y||y===2&&!!k,a(m)}}}class NDe{constructor(){this.map=[]}add(e,t,r){MDe(this,e,t,r)}consume(e){if(this.map.sort(function(i,o){return i[0]-o[0]}),this.map.length===0)return;let t=this.map.length;const r=[];for(;t>0;)t-=1,r.push(e.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),e.length=this.map[t][0];r.push(e.slice()),e.length=0;let s=r.pop();for(;s;){for(const i of s)e.push(i);s=r.pop()}this.map.length=0}}function MDe(n,e,t,r){let s=0;if(!(t===0&&r.length===0)){for(;s<n.map.length;){if(n.map[s][0]===e){n.map[s][1]+=t,n.map[s][2].push(...r);return}s+=1}n.map.push([e,t,r])}}function ODe(n,e){let t=!1;const r=[];for(;e<n.length;){const s=n[e];if(t){if(s[0]==="enter")s[1].type==="tableContent"&&r.push(n[e+1][1].type==="tableDelimiterMarker"?"left":"none");else if(s[1].type==="tableContent"){if(n[e-1][1].type==="tableDelimiterMarker"){const i=r.length-1;r[i]=r[i]==="left"?"center":"right"}}else if(s[1].type==="tableDelimiterRow")break}else s[0]==="enter"&&s[1].type==="tableDelimiterRow"&&(t=!0);e+=1}return r}function PDe(){return{flow:{null:{name:"table",tokenize:IDe,resolveAll:DDe}}}}function IDe(n,e,t){const r=this;let s=0,i=0,o;return a;function a(D){let W=r.events.length-1;for(;W>-1;){const ae=r.events[W][1].type;if(ae==="lineEnding"||ae==="linePrefix")W--;else break}const H=W>-1?r.events[W][1].type:null,re=H==="tableHead"||H==="tableRow"?T:l;return re===T&&r.parser.lazy[r.now().line]?t(D):re(D)}function l(D){return n.enter("tableHead"),n.enter("tableRow"),c(D)}function c(D){return D===124||(o=!0,i+=1),u(D)}function u(D){return D===null?t(D):Tt(D)?i>1?(i=0,r.interrupt=!0,n.exit("tableRow"),n.enter("lineEnding"),n.consume(D),n.exit("lineEnding"),p):t(D):En(D)?Fn(n,u,"whitespace")(D):(i+=1,o&&(o=!1,s+=1),D===124?(n.enter("tableCellDivider"),n.consume(D),n.exit("tableCellDivider"),o=!0,u):(n.enter("data"),d(D)))}function d(D){return D===null||D===124||br(D)?(n.exit("data"),u(D)):(n.consume(D),D===92?f:d)}function f(D){return D===92||D===124?(n.consume(D),d):d(D)}function p(D){return r.interrupt=!1,r.parser.lazy[r.now().line]?t(D):(n.enter("tableDelimiterRow"),o=!1,En(D)?Fn(n,m,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(D):m(D))}function m(D){return D===45||D===58?w(D):D===124?(o=!0,n.enter("tableCellDivider"),n.consume(D),n.exit("tableCellDivider"),y):A(D)}function y(D){return En(D)?Fn(n,w,"whitespace")(D):w(D)}function w(D){return D===58?(i+=1,o=!0,n.enter("tableDelimiterMarker"),n.consume(D),n.exit("tableDelimiterMarker"),k):D===45?(i+=1,k(D)):D===null||Tt(D)?_(D):A(D)}function k(D){return D===45?(n.enter("tableDelimiterFiller"),x(D)):A(D)}function x(D){return D===45?(n.consume(D),x):D===58?(o=!0,n.exit("tableDelimiterFiller"),n.enter("tableDelimiterMarker"),n.consume(D),n.exit("tableDelimiterMarker"),S):(n.exit("tableDelimiterFiller"),S(D))}function S(D){return En(D)?Fn(n,_,"whitespace")(D):_(D)}function _(D){return D===124?m(D):D===null||Tt(D)?!o||s!==i?A(D):(n.exit("tableDelimiterRow"),n.exit("tableHead"),e(D)):A(D)}function A(D){return t(D)}function T(D){return n.enter("tableRow"),O(D)}function O(D){return D===124?(n.enter("tableCellDivider"),n.consume(D),n.exit("tableCellDivider"),O):D===null||Tt(D)?(n.exit("tableRow"),e(D)):En(D)?Fn(n,O,"whitespace")(D):(n.enter("data"),I(D))}function I(D){return D===null||D===124||br(D)?(n.exit("data"),O(D)):(n.consume(D),D===92?R:I)}function R(D){return D===92||D===124?(n.consume(D),I):I(D)}}function DDe(n,e){let t=-1,r=!0,s=0,i=[0,0,0,0],o=[0,0,0,0],a=!1,l=0,c,u,d;const f=new NDe;for(;++t<n.length;){const p=n[t],m=p[1];p[0]==="enter"?m.type==="tableHead"?(a=!1,l!==0&&(dte(f,e,l,c,u),u=void 0,l=0),c={type:"table",start:Object.assign({},m.start),end:Object.assign({},m.end)},f.add(t,0,[["enter",c,e]])):m.type==="tableRow"||m.type==="tableDelimiterRow"?(r=!0,d=void 0,i=[0,0,0,0],o=[0,t+1,0,0],a&&(a=!1,u={type:"tableBody",start:Object.assign({},m.start),end:Object.assign({},m.end)},f.add(t,0,[["enter",u,e]])),s=m.type==="tableDelimiterRow"?2:u?3:1):s&&(m.type==="data"||m.type==="tableDelimiterMarker"||m.type==="tableDelimiterFiller")?(r=!1,o[2]===0&&(i[1]!==0&&(o[0]=o[1],d=Dk(f,e,i,s,void 0,d),i=[0,0,0,0]),o[2]=t)):m.type==="tableCellDivider"&&(r?r=!1:(i[1]!==0&&(o[0]=o[1],d=Dk(f,e,i,s,void 0,d)),i=o,o=[i[1],t,0,0])):m.type==="tableHead"?(a=!0,l=t):m.type==="tableRow"||m.type==="tableDelimiterRow"?(l=t,i[1]!==0?(o[0]=o[1],d=Dk(f,e,i,s,t,d)):o[1]!==0&&(d=Dk(f,e,o,s,t,d)),s=0):s&&(m.type==="data"||m.type==="tableDelimiterMarker"||m.type==="tableDelimiterFiller")&&(o[3]=t)}for(l!==0&&dte(f,e,l,c,u),f.consume(e.events),t=-1;++t<e.events.length;){const p=e.events[t];p[0]==="enter"&&p[1].type==="table"&&(p[1]._align=ODe(e.events,t))}return n}function Dk(n,e,t,r,s,i){const o=r===1?"tableHeader":r===2?"tableDelimiter":"tableData",a="tableContent";t[0]!==0&&(i.end=Object.assign({},O1(e.events,t[0])),n.add(t[0],0,[["exit",i,e]]));const l=O1(e.events,t[1]);if(i={type:o,start:Object.assign({},l),end:Object.assign({},l)},n.add(t[1],0,[["enter",i,e]]),t[2]!==0){const c=O1(e.events,t[2]),u=O1(e.events,t[3]),d={type:a,start:Object.assign({},c),end:Object.assign({},u)};if(n.add(t[2],0,[["enter",d,e]]),r!==2){const f=e.events[t[2]],p=e.events[t[3]];if(f[1].end=Object.assign({},p[1].end),f[1].type="chunkText",f[1].contentType="text",t[3]>t[2]+1){const m=t[2]+1,y=t[3]-t[2]-1;n.add(m,y,[])}}n.add(t[3]+1,0,[["exit",d,e]])}return s!==void 0&&(i.end=Object.assign({},O1(e.events,s)),n.add(s,0,[["exit",i,e]]),i=void 0),i}function dte(n,e,t,r,s){const i=[],o=O1(e.events,t);s&&(s.end=Object.assign({},o),i.push(["exit",s,e])),r.end=Object.assign({},o),i.push(["exit",r,e]),n.add(t+1,0,i)}function O1(n,e){const t=n[e],r=t[0]==="enter"?"start":"end";return t[1][r]}const RDe={name:"tasklistCheck",tokenize:LDe};function $De(){return{text:{91:RDe}}}function LDe(n,e,t){const r=this;return s;function s(l){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?t(l):(n.enter("taskListCheck"),n.enter("taskListCheckMarker"),n.consume(l),n.exit("taskListCheckMarker"),i)}function i(l){return br(l)?(n.enter("taskListCheckValueUnchecked"),n.consume(l),n.exit("taskListCheckValueUnchecked"),o):l===88||l===120?(n.enter("taskListCheckValueChecked"),n.consume(l),n.exit("taskListCheckValueChecked"),o):t(l)}function o(l){return l===93?(n.enter("taskListCheckMarker"),n.consume(l),n.exit("taskListCheckMarker"),n.exit("taskListCheck"),a):t(l)}function a(l){return Tt(l)?e(l):En(l)?n.check({tokenize:FDe},e,t)(l):t(l)}}function FDe(n,e,t){return Fn(n,r,"whitespace");function r(s){return s===null?t(s):e(s)}}function jDe(n){return uZ([uDe(),wDe(),ADe(n),PDe(),$De()])}const BDe={};function VDe(n){const e=this,t=n||BDe,r=e.data(),s=r.micromarkExtensions||(r.micromarkExtensions=[]),i=r.fromMarkdownExtensions||(r.fromMarkdownExtensions=[]),o=r.toMarkdownExtensions||(r.toMarkdownExtensions=[]);s.push(jDe(t)),i.push(oDe()),o.push(aDe(t))}function jt(n,e){return Object.assign(n,{meta:{package:"@milkdown/preset-gfm",...e}}),n}const gO=A3("strike_through");jt(gO,{displayName:"Attr<strikethrough>",group:"Strikethrough"});const P1=x1("strike_through",n=>({parseDOM:[{tag:"del"},{style:"text-decoration",getAttrs:e=>e==="line-through"}],toDOM:e=>["del",n.get(gO.key)(e)],parseMarkdown:{match:e=>e.type==="delete",runner:(e,t,r)=>{e.openMark(r),e.next(t.children),e.closeMark(r)}},toMarkdown:{match:e=>e.type.name==="strike_through",runner:(e,t)=>{e.withMark(t,"delete")}}}));jt(P1.mark,{displayName:"MarkSchema<strikethrough>",group:"Strikethrough"}),jt(P1.ctx,{displayName:"MarkSchemaCtx<strikethrough>",group:"Strikethrough"});const Rk=zt("ToggleStrikeThrough",n=>()=>Y7(P1.type(n)));jt(Rk,{displayName:"Command<ToggleStrikethrough>",group:"Strikethrough"});const hte=lo(n=>s3(new RegExp("(?<![\\w:/])(~{1,2})(.+?)\\1(?!\\w|\\/)"),P1.type(n)));jt(hte,{displayName:"InputRule<strikethrough>",group:"Strikethrough"});const yO=co("strikeThroughKeymap",{ToggleStrikethrough:{shortcuts:"Mod-Alt-x",command:n=>{const e=n.get(ft);return()=>e.call(Rk.key)}}});jt(yO.ctx,{displayName:"KeymapCtx<strikethrough>",group:"Strikethrough"}),jt(yO.shortcuts,{displayName:"Keymap<strikethrough>",group:"Strikethrough"});const I3=oPe({tableGroup:"block",cellContent:"paragraph",cellAttributes:{alignment:{default:"left",getFromDOM:n=>n.style.textAlign||"left",setDOMAttr:(n,e)=>{e.style=`text-align: ${n||"left"}`}}}}),C0=ss("table",()=>({...I3.table,content:"table_header_row table_row+",disableDropCursor:!0,parseMarkdown:{match:n=>n.type==="table",runner:(n,e,t)=>{const r=e.align,s=e.children.map((i,o)=>({...i,align:r,isHeader:o===0}));n.openNode(t),n.next(s),n.closeNode()}},toMarkdown:{match:n=>n.type.name==="table",runner:(n,e)=>{var s;const t=(s=e.content.firstChild)==null?void 0:s.content;if(!t)return;const r=[];t.forEach(i=>{r.push(i.attrs.alignment)}),n.openNode("table",void 0,{align:r}),n.next(e.content),n.closeNode()}}}));jt(C0.node,{displayName:"NodeSchema<table>",group:"Table"}),jt(C0.ctx,{displayName:"NodeSchemaCtx<table>",group:"Table"});const $k=ss("table_header_row",()=>({...I3.table_row,disableDropCursor:!0,content:"(table_header)*",parseDOM:[{tag:"tr[data-is-header]"},{tag:"tr",getAttrs:n=>n instanceof HTMLElement&&n.querySelector("th")?{}:!1}],toDOM(){return["tr",{"data-is-header":!0},0]},parseMarkdown:{match:n=>!!(n.type==="tableRow"&&n.isHeader),runner:(n,e,t)=>{const r=e.align,s=e.children.map((i,o)=>({...i,align:r[o],isHeader:e.isHeader}));n.openNode(t),n.next(s),n.closeNode()}},toMarkdown:{match:n=>n.type.name==="table_header_row",runner:(n,e)=>{n.openNode("tableRow",void 0,{isHeader:!0}),n.next(e.content),n.closeNode()}}}));jt($k.node,{displayName:"NodeSchema<tableHeaderRow>",group:"Table"}),jt($k.ctx,{displayName:"NodeSchemaCtx<tableHeaderRow>",group:"Table"});const D3=ss("table_row",()=>({...I3.table_row,disableDropCursor:!0,content:"(table_cell)*",parseMarkdown:{match:n=>n.type==="tableRow",runner:(n,e,t)=>{const r=e.align,s=e.children.map((i,o)=>({...i,align:r[o]}));n.openNode(t),n.next(s),n.closeNode()}},toMarkdown:{match:n=>n.type.name==="table_row",runner:(n,e)=>{e.content.size!==0&&(n.openNode("tableRow"),n.next(e.content),n.closeNode())}}}));jt(D3.node,{displayName:"NodeSchema<tableRow>",group:"Table"}),jt(D3.ctx,{displayName:"NodeSchemaCtx<tableRow>",group:"Table"});const R3=ss("table_cell",()=>({...I3.table_cell,disableDropCursor:!0,parseMarkdown:{match:n=>n.type==="tableCell"&&!n.isHeader,runner:(n,e,t)=>{const r=e.align;n.openNode(t,{alignment:r}).openNode(n.schema.nodes.paragraph).next(e.children).closeNode().closeNode()}},toMarkdown:{match:n=>n.type.name==="table_cell",runner:(n,e)=>{n.openNode("tableCell").next(e.content).closeNode()}}}));jt(R3.node,{displayName:"NodeSchema<tableCell>",group:"Table"}),jt(R3.ctx,{displayName:"NodeSchemaCtx<tableCell>",group:"Table"});const $3=ss("table_header",()=>({...I3.table_header,disableDropCursor:!0,parseMarkdown:{match:n=>n.type==="tableCell"&&!!n.isHeader,runner:(n,e,t)=>{const r=e.align;n.openNode(t,{alignment:r}),n.openNode(n.schema.nodes.paragraph),n.next(e.children),n.closeNode(),n.closeNode()}},toMarkdown:{match:n=>n.type.name==="table_header",runner:(n,e)=>{n.openNode("tableCell"),n.next(e.content),n.closeNode()}}}));jt($3.node,{displayName:"NodeSchema<tableHeader>",group:"Table"}),jt($3.ctx,{displayName:"NodeSchemaCtx<tableHeader>",group:"Table"});function vO(n,e=3,t=3){const r=Array(t).fill(0).map(()=>R3.type(n).createAndFill()),s=Array(t).fill(0).map(()=>$3.type(n).createAndFill()),i=Array(e).fill(0).map((o,a)=>a===0?$k.type(n).create(null,s):D3.type(n).create(null,r));return C0.type(n).create(null,i)}function fte(n){return(e,t)=>r=>{t=t??r.selection.from;const s=r.doc.resolve(t),i=sJ(l=>l.type.name==="table")(s),o=i?{node:i.node,from:i.start}:void 0,a=n==="row";if(o){const l=ar.get(o.node);if(e>=0&&e<(a?l.height:l.width)){const c=l.positionAt(a?e:l.height-1,a?l.width-1:e,o.node),u=r.doc.resolve(o.from+c),d=a?Pr.rowSelection:Pr.colSelection,f=l.positionAt(a?e:0,a?0:e,o.node),p=r.doc.resolve(o.from+f);return rJ(r.setSelection(d(u,p)))}}return r}}const zDe=fte("row"),HDe=fte("col");function pte(n,e,{map:t,tableStart:r,table:s},i){const o=Array(i).fill(0).reduce((l,c,u)=>l+s.child(u).nodeSize,r),a=Array(t.width).fill(0).map((l,c)=>{const u=s.nodeAt(t.map[c]);return R3.type(n).createAndFill({alignment:u==null?void 0:u.attrs.alignment})});return e.insert(o,D3.type(n).create(null,a)),e}function qDe(n){const e=P3(n.$from);if(!e)return;const t=ar.get(e.node);return t.cellsInRect({left:0,right:t.width,top:0,bottom:t.height}).map(s=>{const i=e.node.nodeAt(s),o=s+e.start;return{pos:o,start:o+1,node:i}})}function UDe(n){const e=qDe(n.selection);if(e&&e[0]){const t=n.doc.resolve(e[0].pos),r=e[e.length-1];if(r){const s=n.doc.resolve(r.pos);return rJ(n.setSelection(new Pr(s,t)))}}return n}const bO=zt("GoToPrevTableCell",()=>()=>Fee(-1));jt(bO,{displayName:"Command<goToPrevTableCellCommand>",group:"Table"});const wO=zt("GoToNextTableCell",()=>()=>Fee(1));jt(wO,{displayName:"Command<goToNextTableCellCommand>",group:"Table"});const xO=zt("ExitTable",n=>()=>(e,t)=>{if(!Ta(e))return!1;const{$head:r}=e.selection,s=IAe(r,C0.type(n));if(!s)return!1;const{to:i}=s,o=e.tr.replaceWith(i,i,hl.type(n).createAndFill());return o.setSelection(nn.near(o.doc.resolve(i),1)).scrollIntoView(),t==null||t(o),!0});jt(xO,{displayName:"Command<breakTableCommand>",group:"Table"});const mte=zt("InsertTable",n=>({row:e,col:t}={})=>(r,s)=>{const{selection:i,tr:o}=r,{from:a}=i,l=vO(n,e,t),c=o.replaceSelectionWith(l),u=nn.findFrom(c.doc.resolve(a),1,!0);return u&&c.setSelection(u),s==null||s(c),!0});jt(mte,{displayName:"Command<insertTableCommand>",group:"Table"});const gte=zt("MoveRow",()=>({from:n,to:e,pos:t}={})=>DPe({from:n??0,to:e??0,pos:t}));jt(gte,{displayName:"Command<moveRowCommand>",group:"Table"});const yte=zt("MoveCol",()=>({from:n,to:e,pos:t}={})=>RPe({from:n??0,to:e??0,pos:t}));jt(yte,{displayName:"Command<moveColCommand>",group:"Table"});const vte=zt("SelectRow",()=>(n={index:0})=>(e,t)=>{const{tr:r}=e;return!!(t==null?void 0:t(zDe(n.index,n.pos)(r)))});jt(vte,{displayName:"Command<selectRowCommand>",group:"Table"});const bte=zt("SelectCol",()=>(n={index:0})=>(e,t)=>{const{tr:r}=e;return!!(t==null?void 0:t(HDe(n.index,n.pos)(r)))});jt(bte,{displayName:"Command<selectColCommand>",group:"Table"});const wte=zt("SelectTable",()=>()=>(n,e)=>{const{tr:t}=n;return!!(e==null?void 0:e(UDe(t)))});jt(wte,{displayName:"Command<selectTableCommand>",group:"Table"});const xte=zt("DeleteSelectedCells",()=>()=>(n,e)=>{const{selection:t}=n;if(!(t instanceof Pr))return!1;const r=t.isRowSelection(),s=t.isColSelection();return r&&s?IPe(n,e):s?TPe(n,e):NPe(n,e)});jt(xte,{displayName:"Command<deleteSelectedCellsCommand>",group:"Table"});const kte=zt("AddColBefore",()=>()=>SPe);jt(kte,{displayName:"Command<addColBeforeCommand>",group:"Table"});const Cte=zt("AddColAfter",()=>()=>EPe);jt(Cte,{displayName:"Command<addColAfterCommand>",group:"Table"});const Ste=zt("AddRowBefore",n=>()=>(e,t)=>{if(!Ta(e))return!1;if(t){const r=jh(e);t(pte(n,e.tr,r,r.top))}return!0});jt(Ste,{displayName:"Command<addRowBeforeCommand>",group:"Table"});const Ete=zt("AddRowAfter",n=>()=>(e,t)=>{if(!Ta(e))return!1;if(t){const r=jh(e);t(pte(n,e.tr,r,r.bottom))}return!0});jt(Ete,{displayName:"Command<addRowAfterCommand>",group:"Table"});const _te=zt("SetAlign",()=>(n="left")=>MPe("alignment",n));jt(_te,{displayName:"Command<setAlignCommand>",group:"Table"});const Tte=lo(n=>new qo(/^\|(?<col>\d+)[xX](?<row>\d+)\|\s$/,(e,t,r,s)=>{var c,u;const i=e.doc.resolve(r);if(!i.node(-1).canReplaceWith(i.index(-1),i.indexAfter(-1),C0.type(n)))return null;const o=Math.max(Number(((c=t.groups)==null?void 0:c.row)??0),2),a=vO(n,o,Number((u=t.groups)==null?void 0:u.col)),l=e.tr.replaceRangeWith(r,s,a);return l.setSelection(It.create(l.doc,r+3)).scrollIntoView()}));jt(Tte,{displayName:"InputRule<insertTableInputRule>",group:"Table"});const Ate=jMe(n=>({run:(e,t,r)=>{if(r)return e;let s=e.content;return e.content.forEach((i,o,a)=>{var w;if((i==null?void 0:i.type)!==C0.type(n))return;const l=i.childCount,c=((w=i.lastChild)==null?void 0:w.childCount)??0;if(l===0||c===0){s=s.replaceChild(a,hl.type(n).create());return}const u=i.firstChild;if(!(c>0&&u&&u.childCount===0))return;const f=Array(c).fill(0).map(()=>$3.type(n).createAndFill()),p=new He($e.from(f),0,0),m=u.replace(0,0,p),y=i.replace(0,u.nodeSize,new He($e.from(m),0,0));s=s.replaceChild(a,y)}),new He($e.from(s),e.openStart,e.openEnd)}}));jt(Ate,{displayName:"PasteRule<table>",group:"Table"});const kO=co("tableKeymap",{NextCell:{priority:100,shortcuts:["Mod-]","Tab"],command:n=>{const e=n.get(ft);return()=>e.call(wO.key)}},PrevCell:{shortcuts:["Mod-[","Shift-Tab"],command:n=>{const e=n.get(ft);return()=>e.call(bO.key)}},ExitTable:{shortcuts:["Mod-Enter","Enter"],command:n=>{const e=n.get(ft);return()=>e.call(xO.key)}}});jt(kO.ctx,{displayName:"KeymapCtx<table>",group:"Table"}),jt(kO.shortcuts,{displayName:"Keymap<table>",group:"Table"});const CO="footnote_definition",Nte="footnoteDefinition",SO=ss("footnote_definition",()=>({group:"block",content:"block+",defining:!0,attrs:{label:{default:"",validate:"string"}},parseDOM:[{tag:`dl[data-type="${CO}"]`,getAttrs:n=>{if(!(n instanceof HTMLElement))throw ll(n);return{label:n.dataset.label}},contentElement:"dd"}],toDOM:n=>{const e=n.attrs.label;return["dl",{"data-label":e,"data-type":CO},["dt",e],["dd",0]]},parseMarkdown:{match:({type:n})=>n===Nte,runner:(n,e,t)=>{n.openNode(t,{label:e.label}).next(e.children).closeNode()}},toMarkdown:{match:n=>n.type.name===CO,runner:(n,e)=>{n.openNode(Nte,void 0,{label:e.attrs.label,identifier:e.attrs.label}).next(e.content).closeNode()}}}));jt(SO.ctx,{displayName:"NodeSchemaCtx<footnodeDef>",group:"footnote"}),jt(SO.node,{displayName:"NodeSchema<footnodeDef>",group:"footnote"});const EO="footnote_reference",_O=ss("footnote_reference",()=>({group:"inline",inline:!0,atom:!0,attrs:{label:{default:"",validate:"string"}},parseDOM:[{tag:`sup[data-type="${EO}"]`,getAttrs:n=>{if(!(n instanceof HTMLElement))throw ll(n);return{label:n.dataset.label}}}],toDOM:n=>{const e=n.attrs.label;return["sup",{"data-label":e,"data-type":EO},e]},parseMarkdown:{match:({type:n})=>n==="footnoteReference",runner:(n,e,t)=>{n.addNode(t,{label:e.label})}},toMarkdown:{match:n=>n.type.name===EO,runner:(n,e)=>{n.addNode("footnoteReference",void 0,void 0,{label:e.attrs.label,identifier:e.attrs.label})}}}));jt(_O.ctx,{displayName:"NodeSchemaCtx<footnodeRef>",group:"footnote"}),jt(_O.node,{displayName:"NodeSchema<footnodeRef>",group:"footnote"});const TO=vc.extendSchema(n=>e=>{const t=n(e);return{...t,attrs:{...t.attrs,checked:{default:null,validate:"boolean|null"}},parseDOM:[{tag:'li[data-item-type="task"]',getAttrs:r=>{if(!(r instanceof HTMLElement))throw ll(r);return{label:r.dataset.label,listType:r.dataset.listType,spread:r.dataset.spread,checked:r.dataset.checked?r.dataset.checked==="true":null}}},...(t==null?void 0:t.parseDOM)||[]],toDOM:r=>t.toDOM&&r.attrs.checked==null?t.toDOM(r):["li",{"data-item-type":"task","data-label":r.attrs.label,"data-list-type":r.attrs.listType,"data-spread":r.attrs.spread,"data-checked":r.attrs.checked},0],parseMarkdown:{match:({type:r})=>r==="listItem",runner:(r,s,i)=>{if(s.checked==null){t.parseMarkdown.runner(r,s,i);return}const o=s.label!=null?`${s.label}.`:"•",a=s.checked!=null?!!s.checked:null,l=s.label!=null?"ordered":"bullet",c=s.spread!=null?`${s.spread}`:"true";r.openNode(i,{label:o,listType:l,spread:c,checked:a}),r.next(s.children),r.closeNode()}},toMarkdown:{match:r=>r.type.name==="list_item",runner:(r,s)=>{if(s.attrs.checked==null){t.toMarkdown.runner(r,s);return}const i=s.attrs.label,o=s.attrs.listType,a=s.attrs.spread==="true",l=s.attrs.checked;r.openNode("listItem",void 0,{label:i,listType:o,spread:a,checked:l}),r.next(s.content),r.closeNode()}}}});jt(TO.node,{displayName:"NodeSchema<taskListItem>",group:"ListItem"}),jt(TO.ctx,{displayName:"NodeSchemaCtx<taskListItem>",group:"ListItem"});const Mte=lo(()=>new qo(/^\[(?<checked>\s|x)\]\s$/,(n,e,t,r)=>{var u;const s=n.doc.resolve(t);let i=0,o=s.node(i);for(;o&&o.type.name!=="list_item";)i--,o=s.node(i);if(!o||o.attrs.checked!=null)return null;const a=((u=e.groups)==null?void 0:u.checked)==="x",l=s.before(i),c=n.tr;return c.deleteRange(t,r).setNodeMarkup(l,void 0,{...o.attrs,checked:a}),c}));jt(Mte,{displayName:"InputRule<wrapInTaskListInputRule>",group:"ListItem"});const WDe=[yO,kO].flat(),GDe=[Tte,Mte],KDe=[hte],YDe=[Ate],Ote=Li(()=>uIe);jt(Ote,{displayName:"Prose<autoInsertSpanPlugin>",group:"Prose"});const ZDe=Li(()=>UPe({}));jt(ZDe,{displayName:"Prose<columnResizingPlugin>",group:"Prose"});const Pte=Li(()=>tIe({allowTableNodeSelection:!0}));jt(Pte,{displayName:"Prose<tableEditingPlugin>",group:"Prose"});const AO=Dh("remarkGFM",()=>VDe);jt(AO.plugin,{displayName:"Remark<remarkGFMPlugin>",group:"Remark"}),jt(AO.options,{displayName:"RemarkConfig<remarkGFMPlugin>",group:"Remark"});const XDe=new rs("MILKDOWN_KEEP_TABLE_ALIGN_PLUGIN");function JDe(n,e){let t=0;return e.forEach((r,s,i)=>{r===n&&(t=i)}),t}const Ite=Li(()=>new ks({key:XDe,appendTransaction:(n,e,t)=>{let r;const s=(i,o)=>{if(r||(r=t.tr),i.type.name!=="table_cell")return;const a=t.doc.resolve(o),l=a.node(a.depth),u=a.node(a.depth-1).firstChild;if(!u)return;const d=JDe(i,l),f=u.maybeChild(d);if(!f)return;const p=f.attrs.alignment,m=i.attrs.alignment;p!==m&&r.setNodeMarkup(o,void 0,{...i.attrs,alignment:p})};return e.doc!==t.doc&&t.doc.descendants(s),r}}));jt(Ite,{displayName:"Prose<keepTableAlignPlugin>",group:"Prose"});const QDe=[Ite,Ote,AO,Pte].flat(),eRe=[[TO,C0,$k,D3,$3,R3,SO,_O,gO,P1].flat(),GDe,YDe,KDe,WDe,[wO,bO,xO,mte,gte,yte,vte,bte,wte,xte,Ste,Ete,kte,Cte,_te,Rk],QDe].flat(),tRe=kn([],"FeaturesCtx"),nRe=kn({},"CrepeCtx");var Dte=n=>{throw TypeError(n)},Rte=(n,e,t)=>e.has(n)||Dte("Cannot "+t),Go=(n,e,t)=>(Rte(n,e,"read from private field"),t?t.call(n):e.get(n)),NO=(n,e,t)=>e.has(n)?Dte("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,t),MO=(n,e,t,r)=>(Rte(n,e,"write to private field"),e.set(n,t),t),Ko,Lk,L3;class rRe{constructor({root:e,defaultValue:t=""}={}){NO(this,Ko),NO(this,Lk),NO(this,L3,!0),this.addFeature=(s,i)=>(s(Go(this,Ko),i),this),this.create=()=>Go(this,Ko).create(),this.destroy=()=>Go(this,Ko).destroy(),this.setReadonly=s=>(MO(this,L3,!s),Go(this,Ko).action(i=>{Go(this,Ko).status===mk.Created&&i.get(Ri).setProps({editable:()=>!s})}),this),this.getMarkdown=()=>Go(this,Ko).action(zMe()),this.on=s=>Go(this,Ko).status!==mk.Created?(Go(this,Ko).config(i=>{const o=i.get(xk);s(o)}),this):(Go(this,Ko).action(i=>{const o=i.get(xk);s(o)}),this);var r;MO(this,Lk,(r=typeof e=="string"?document.querySelector(e):e)!=null?r:document.body),MO(this,Ko,QN.make().config(s=>{s.inject(nRe,this),s.inject(tRe,[])}).config(s=>{s.set(pk,Go(this,Lk)),s.set(uk,t),s.set(T3,{editable:()=>Go(this,L3)}),s.update(vk.key,i=>({...i,size:4}))}).use(ePe).use(JQ).use(QMe).use(tOe).use(NOe).use($Q).use(eRe))}get editor(){return Go(this,Ko)}get readonly(){return!Go(this,L3)}}Ko=new WeakMap,Lk=new WeakMap,L3=new WeakMap;function F3(n,e){return Object.assign(n,{meta:{package:"@milkdown/plugin-block",...e}}),n}const Fk=Zr({filterNodes:n=>!fN(t=>t.type.name==="table")(n)},"blockConfig");F3(Fk,{displayName:"Ctx<blockConfig>"});function sRe(n,e,t){var s;if(!n.dom.parentElement)return null;try{const i=(s=n.posAtCoords({left:e.x,top:e.y}))==null?void 0:s.inside;if(i==null||i<0)return null;let o=n.state.doc.resolve(i),a=n.state.doc.nodeAt(i),l=n.nodeDOM(i);const c=d=>{const f=o.depth>=1&&o.index(o.depth)===0;if(!(d||f))return;const m=o.before(o.depth);a=n.state.doc.nodeAt(m),l=n.nodeDOM(m),o=n.state.doc.resolve(m),t(o,a)||c(!0)},u=t(o,a);return c(!u),!l||!a?null:{node:a,$pos:o,el:l}}catch{return null}}const $te=X7.ie&&X7.ie_version<15||X7.ios&&X7.webkit_version<604,Lte=20;class iRe{constructor(){N(this,Bl);N(this,bv);N(this,zw);N(this,Fm);N(this,Fl);N(this,wv);N(this,jl);N(this,jm);N(this,Bm);N(this,Hw);N(this,xv);N(this,kv);N(this,Cv);N(this,Sv);N(this,qw);N(this,Xf);M(this,zw,()=>{if(!h(this,Fl))return null;const e=h(this,Fl),t=h(this,Bl,cg);if(t&&Ft.isSelectable(e.node)){const r=Ft.create(t.state.doc,e.$pos.pos);return t.dispatch(t.state.tr.setSelection(r)),t.focus(),M(this,Fm,r),r}return null}),M(this,Fm,null),M(this,Fl,null),M(this,wv,void 0),M(this,jl,!1),M(this,Bm,()=>{var e;(e=h(this,jm))==null||e.call(this,{type:"hide"}),M(this,Fl,null)}),M(this,Hw,e=>{var t;M(this,Fl,e),(t=h(this,jm))==null||t.call(this,{type:"show",active:e})}),this.bind=(e,t)=>{M(this,bv,e),M(this,jm,t)},this.addEvent=e=>{e.addEventListener("mousedown",h(this,xv)),e.addEventListener("mouseup",h(this,kv)),e.addEventListener("dragstart",h(this,Cv)),e.addEventListener("dragend",h(this,Sv))},this.removeEvent=e=>{e.removeEventListener("mousedown",h(this,xv)),e.removeEventListener("mouseup",h(this,kv)),e.removeEventListener("dragstart",h(this,Cv)),e.removeEventListener("dragend",h(this,Sv))},this.unBind=()=>{M(this,jm,void 0)},M(this,xv,()=>{var e;M(this,wv,(e=h(this,Fl))==null?void 0:e.el.getBoundingClientRect()),h(this,zw).call(this)}),M(this,kv,()=>{if(!h(this,jl)){requestAnimationFrame(()=>{var e;h(this,wv)&&((e=h(this,Bl,cg))==null||e.focus())});return}M(this,jl,!1),M(this,Fm,null)}),M(this,Cv,e=>{var s;M(this,jl,!0);const t=h(this,Bl,cg);if(!t)return;t.dom.dataset.dragging="true";const r=h(this,Fm);if(e.dataTransfer&&r){const i=r.content();e.dataTransfer.effectAllowed="copyMove";const{dom:o,text:a}=t.serializeForClipboard(i);e.dataTransfer.clearData(),e.dataTransfer.setData($te?"Text":"text/html",o.innerHTML),$te||e.dataTransfer.setData("text/plain",a);const l=(s=h(this,Fl))==null?void 0:s.el;l&&e.dataTransfer.setDragImage(l,0,0),t.dragging={slice:i,move:!0}}}),M(this,Sv,()=>{h(this,Bl,cg)&&h(this,Xf).call(this,h(this,Bl,cg))}),this.keydownCallback=e=>(h(this,Bm).call(this),M(this,jl,!1),e.dom.dataset.dragging="false",!1),M(this,qw,ZQ((e,t)=>{if(!e.editable)return;const r=e.dom.getBoundingClientRect(),s=r.left+r.width/2;if(!(e.root.elementFromPoint(s,t.clientY)instanceof Element)){h(this,Bm).call(this);return}const o=h(this,Bl,Afe);if(!o)return;const a=sRe(e,{x:s,y:t.clientY},o);if(!a){h(this,Bm).call(this);return}h(this,Hw).call(this,a)},200)),this.mousemoveCallback=(e,t)=>(e.composing||!e.editable||h(this,qw).call(this,e,t),!1),this.dragoverCallback=(e,t)=>{var r;if(h(this,jl)){const s=(r=h(this,Bl,cg))==null?void 0:r.dom.parentElement;if(!s)return!1;const i=s.scrollHeight>s.clientHeight,o=s.getBoundingClientRect();if(i){if(s.scrollTop>0&&Math.abs(t.y-o.y)<Lte){const c=s.scrollTop>10?s.scrollTop-10:0;return s.scrollTop=c,!1}const a=Math.round(e.dom.getBoundingClientRect().height);if(Math.round(s.scrollTop+o.height)<a&&Math.abs(t.y-(o.height+o.y))<Lte){const c=s.scrollTop+10;return s.scrollTop=c,!1}}}return!1},this.dragenterCallback=e=>{e.dragging&&(M(this,jl,!0),e.dom.dataset.dragging="true")},this.dragleaveCallback=(e,t)=>{const r=t.clientX,s=t.clientY;(r<0||s<0||r>window.innerWidth||s>window.innerHeight)&&(M(this,Fl,null),h(this,Xf).call(this,e))},this.dropCallback=e=>(h(this,Xf).call(this,e),!1),this.dragendCallback=e=>{h(this,Xf).call(this,e)},M(this,Xf,e=>{M(this,jl,!1),e.dom.dataset.dragging="false"})}}bv=new WeakMap,zw=new WeakMap,Fm=new WeakMap,Fl=new WeakMap,wv=new WeakMap,jl=new WeakMap,Bl=new WeakSet,Afe=function(){var e;try{return(e=h(this,bv))==null?void 0:e.get(Fk.key).filterNodes}catch{return}},cg=function(){var e;return(e=h(this,bv))==null?void 0:e.get(Ri)},jm=new WeakMap,Bm=new WeakMap,Hw=new WeakMap,xv=new WeakMap,kv=new WeakMap,Cv=new WeakMap,Sv=new WeakMap,qw=new WeakMap,Xf=new WeakMap;const OO=Zr(()=>new iRe,"blockService"),jk=Zr({},"blockServiceInstance");F3(OO,{displayName:"Ctx<blockService>"}),F3(jk,{displayName:"Ctx<blockServiceInstance>"});const Bk=Zr({},"blockSpec");F3(Bk,{displayName:"Ctx<blockSpec>"});const PO=Li(n=>{const e=new rs("MILKDOWN_BLOCK"),r=n.get(OO.key)();n.set(jk.key,r);const s=n.get(Bk.key);return new ks({key:e,...s,props:{...s.props,handleDOMEvents:{drop:i=>r.dropCallback(i),pointermove:(i,o)=>r.mousemoveCallback(i,o),keydown:i=>r.keydownCallback(i),dragover:(i,o)=>r.dragoverCallback(i,o),dragleave:(i,o)=>r.dragleaveCallback(i,o),dragenter:i=>r.dragenterCallback(i),dragend:i=>r.dragendCallback(i)}}})});F3(PO,{displayName:"Prose<block>"});class oRe{constructor(e){N(this,F8);N(this,Co);N(this,Vd);N(this,Vm);N(this,zm);N(this,Uw);N(this,Ev);N(this,Ww);N(this,Gw);N(this,_v);N(this,Tv);N(this,Av);M(this,zm,null),M(this,Ev,!1),this.update=()=>{requestAnimationFrame(()=>{if(!h(this,Ev))try{v(this,F8,Nfe).call(this),M(this,Ev,!0)}catch{}})},this.destroy=()=>{var t,r;(t=h(this,Vm))==null||t.unBind(),(r=h(this,Vm))==null||r.removeEvent(h(this,Co)),h(this,Co).remove()},this.show=t=>{const r=t.el,s=h(this,Vd).get(Ri).dom,i={ctx:h(this,Vd),active:t,editorDom:s,blockDom:h(this,Co)},o={contextElement:r,getBoundingClientRect:()=>h(this,Tv)?h(this,Tv).call(this,i):r.getBoundingClientRect()},a=[n2()];if(h(this,_v)){const l=h(this,_v).call(this,i),c=h5(l);a.push(c)}r2(o,h(this,Co),{placement:h(this,Av)?h(this,Av).call(this,i):"left",middleware:[...a,...h(this,Ww)],...h(this,Gw)}).then(({x:l,y:c})=>{Object.assign(h(this,Co).style,{left:`${l}px`,top:`${c}px`}),h(this,Co).dataset.show="true"}).catch(console.error)},this.hide=()=>{h(this,Co).dataset.show="false"},M(this,Vd,e.ctx),M(this,Co,e.content),M(this,_v,e.getOffset),M(this,Tv,e.getPosition),M(this,Av,e.getPlacement),M(this,Ww,e.middleware??[]),M(this,Gw,e.floatingUIOptions??{}),M(this,Uw,e.root),this.hide()}get active(){return h(this,zm)}}Co=new WeakMap,Vd=new WeakMap,Vm=new WeakMap,zm=new WeakMap,Uw=new WeakMap,Ev=new WeakMap,Ww=new WeakMap,Gw=new WeakMap,_v=new WeakMap,Tv=new WeakMap,Av=new WeakMap,F8=new WeakSet,Nfe=function(){const e=h(this,Vd).get(Ri);(h(this,Uw)??e.dom.parentElement??document.body).appendChild(h(this,Co));const r=h(this,Vd).get(jk.key);r.bind(h(this,Vd),s=>{s.type==="hide"?(this.hide(),M(this,zm,null)):s.type==="show"&&(this.show(s.active),M(this,zm,s.active))}),M(this,Vm,r),h(this,Vm).addEvent(h(this,Co)),h(this,Co).draggable=!0};const Vk=[Bk,Fk,OO,jk,PO];Vk.key=Bk.key,Vk.pluginKey=PO.key;/** +* @vue/shared v3.5.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Vu(n){const e=Object.create(null);for(const t of n.split(","))e[t]=1;return t=>t in e}const fr=process.env.NODE_ENV!=="production"?Object.freeze({}):{},j3=process.env.NODE_ENV!=="production"?Object.freeze([]):[],Cs=()=>{},Fte=()=>!1,B3=n=>n.charCodeAt(0)===111&&n.charCodeAt(1)===110&&(n.charCodeAt(2)>122||n.charCodeAt(2)<97),zk=n=>n.startsWith("onUpdate:"),is=Object.assign,IO=(n,e)=>{const t=n.indexOf(e);t>-1&&n.splice(t,1)},aRe=Object.prototype.hasOwnProperty,jn=(n,e)=>aRe.call(n,e),Ut=Array.isArray,I1=n=>Hk(n)==="[object Map]",lRe=n=>Hk(n)==="[object Set]",Wt=n=>typeof n=="function",as=n=>typeof n=="string",D1=n=>typeof n=="symbol",wr=n=>n!==null&&typeof n=="object",DO=n=>(wr(n)||Wt(n))&&Wt(n.then)&&Wt(n.catch),cRe=Object.prototype.toString,Hk=n=>cRe.call(n),RO=n=>Hk(n).slice(8,-1),uRe=n=>Hk(n)==="[object Object]",$O=n=>as(n)&&n!=="NaN"&&n[0]!=="-"&&""+parseInt(n,10)===n,V3=Vu(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),dRe=Vu("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),qk=n=>{const e=Object.create(null);return t=>e[t]||(e[t]=n(t))},hRe=/-\w/g,fl=qk(n=>n.replace(hRe,e=>e.slice(1).toUpperCase())),fRe=/\B([A-Z])/g,Bh=qk(n=>n.replace(fRe,"-$1").toLowerCase()),Uk=qk(n=>n.charAt(0).toUpperCase()+n.slice(1)),S0=qk(n=>n?`on${Uk(n)}`:""),Vh=(n,e)=>!Object.is(n,e),z3=(n,...e)=>{for(let t=0;t<n.length;t++)n[t](...e)},Wk=(n,e,t,r=!1)=>{Object.defineProperty(n,e,{configurable:!0,enumerable:!1,writable:r,value:t})},pRe=n=>{const e=parseFloat(n);return isNaN(e)?n:e};let jte;const zh=()=>jte||(jte=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function LO(n){if(Ut(n)){const e={};for(let t=0;t<n.length;t++){const r=n[t],s=as(r)?vRe(r):LO(r);if(s)for(const i in s)e[i]=s[i]}return e}else if(as(n)||wr(n))return n}const mRe=/;(?![^(]*\))/g,gRe=/:([^]+)/,yRe=/\/\*[^]*?\*\//g;function vRe(n){const e={};return n.replace(yRe,"").split(mRe).forEach(t=>{if(t){const r=t.split(gRe);r.length>1&&(e[r[0].trim()]=r[1].trim())}}),e}function FO(n){let e="";if(as(n))e=n;else if(Ut(n))for(let t=0;t<n.length;t++){const r=FO(n[t]);r&&(e+=r+" ")}else if(wr(n))for(const t in n)n[t]&&(e+=t+" ");return e.trim()}const bRe="html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot",wRe="svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view",xRe="annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics",kRe=Vu(bRe),CRe=Vu(wRe),SRe=Vu(xRe),ERe=Vu("itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly");function Bte(n){return!!n||n===""}/** +* @vue/reactivity v3.5.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function pl(n,...e){console.warn(`[Vue warn] ${n}`,...e)}let uo;class _Re{constructor(e=!1){this.detached=e,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=uo,!e&&uo&&(this.index=(uo.scopes||(uo.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let e,t;if(this.scopes)for(e=0,t=this.scopes.length;e<t;e++)this.scopes[e].pause();for(e=0,t=this.effects.length;e<t;e++)this.effects[e].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let e,t;if(this.scopes)for(e=0,t=this.scopes.length;e<t;e++)this.scopes[e].resume();for(e=0,t=this.effects.length;e<t;e++)this.effects[e].resume()}}run(e){if(this._active){const t=uo;try{return uo=this,e()}finally{uo=t}}else process.env.NODE_ENV!=="production"&&pl("cannot run an inactive effect scope.")}on(){++this._on===1&&(this.prevScope=uo,uo=this)}off(){this._on>0&&--this._on===0&&(uo=this.prevScope,this.prevScope=void 0)}stop(e){if(this._active){this._active=!1;let t,r;for(t=0,r=this.effects.length;t<r;t++)this.effects[t].stop();for(this.effects.length=0,t=0,r=this.cleanups.length;t<r;t++)this.cleanups[t]();if(this.cleanups.length=0,this.scopes){for(t=0,r=this.scopes.length;t<r;t++)this.scopes[t].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!e){const s=this.parent.scopes.pop();s&&s!==this&&(this.parent.scopes[this.index]=s,s.index=this.index)}this.parent=void 0}}}function TRe(){return uo}let lr;const jO=new WeakSet;class Vte{constructor(e){this.fn=e,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,uo&&uo.active&&uo.effects.push(this)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,jO.has(this)&&(jO.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||Hte(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,Kte(this),qte(this);const e=lr,t=ml;lr=this,ml=!0;try{return this.fn()}finally{process.env.NODE_ENV!=="production"&&lr!==this&&pl("Active effect was not restored correctly - this is likely a Vue internal bug."),Ute(this),lr=e,ml=t,this.flags&=-3}}stop(){if(this.flags&1){for(let e=this.deps;e;e=e.nextDep)HO(e);this.deps=this.depsTail=void 0,Kte(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?jO.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){zO(this)&&this.run()}get dirty(){return zO(this)}}let zte=0,H3,q3;function Hte(n,e=!1){if(n.flags|=8,e){n.next=q3,q3=n;return}n.next=H3,H3=n}function BO(){zte++}function VO(){if(--zte>0)return;if(q3){let e=q3;for(q3=void 0;e;){const t=e.next;e.next=void 0,e.flags&=-9,e=t}}let n;for(;H3;){let e=H3;for(H3=void 0;e;){const t=e.next;if(e.next=void 0,e.flags&=-9,e.flags&1)try{e.trigger()}catch(r){n||(n=r)}e=t}}if(n)throw n}function qte(n){for(let e=n.deps;e;e=e.nextDep)e.version=-1,e.prevActiveLink=e.dep.activeLink,e.dep.activeLink=e}function Ute(n){let e,t=n.depsTail,r=t;for(;r;){const s=r.prevDep;r.version===-1?(r===t&&(t=s),HO(r),ARe(r)):e=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=s}n.deps=e,n.depsTail=t}function zO(n){for(let e=n.deps;e;e=e.nextDep)if(e.dep.version!==e.version||e.dep.computed&&(Wte(e.dep.computed)||e.dep.version!==e.version))return!0;return!!n._dirty}function Wte(n){if(n.flags&4&&!(n.flags&16)||(n.flags&=-17,n.globalVersion===U3)||(n.globalVersion=U3,!n.isSSR&&n.flags&128&&(!n.deps&&!n._dirty||!zO(n))))return;n.flags|=2;const e=n.dep,t=lr,r=ml;lr=n,ml=!0;try{qte(n);const s=n.fn(n._value);(e.version===0||Vh(s,n._value))&&(n.flags|=128,n._value=s,e.version++)}catch(s){throw e.version++,s}finally{lr=t,ml=r,Ute(n),n.flags&=-3}}function HO(n,e=!1){const{dep:t,prevSub:r,nextSub:s}=n;if(r&&(r.nextSub=s,n.prevSub=void 0),s&&(s.prevSub=r,n.nextSub=void 0),process.env.NODE_ENV!=="production"&&t.subsHead===n&&(t.subsHead=s),t.subs===n&&(t.subs=r,!r&&t.computed)){t.computed.flags&=-5;for(let i=t.computed.deps;i;i=i.nextDep)HO(i,!0)}!e&&!--t.sc&&t.map&&t.map.delete(t.key)}function ARe(n){const{prevDep:e,nextDep:t}=n;e&&(e.nextDep=t,n.prevDep=void 0),t&&(t.prevDep=e,n.nextDep=void 0)}let ml=!0;const Gte=[];function gl(){Gte.push(ml),ml=!1}function yl(){const n=Gte.pop();ml=n===void 0?!0:n}function Kte(n){const{cleanup:e}=n;if(n.cleanup=void 0,e){const t=lr;lr=void 0;try{e()}finally{lr=t}}}let U3=0;class NRe{constructor(e,t){this.sub=e,this.dep=t,this.version=t.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class qO{constructor(e){this.computed=e,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0,process.env.NODE_ENV!=="production"&&(this.subsHead=void 0)}track(e){if(!lr||!ml||lr===this.computed)return;let t=this.activeLink;if(t===void 0||t.sub!==lr)t=this.activeLink=new NRe(lr,this),lr.deps?(t.prevDep=lr.depsTail,lr.depsTail.nextDep=t,lr.depsTail=t):lr.deps=lr.depsTail=t,Yte(t);else if(t.version===-1&&(t.version=this.version,t.nextDep)){const r=t.nextDep;r.prevDep=t.prevDep,t.prevDep&&(t.prevDep.nextDep=r),t.prevDep=lr.depsTail,t.nextDep=void 0,lr.depsTail.nextDep=t,lr.depsTail=t,lr.deps===t&&(lr.deps=r)}return process.env.NODE_ENV!=="production"&&lr.onTrack&&lr.onTrack(is({effect:lr},e)),t}trigger(e){this.version++,U3++,this.notify(e)}notify(e){BO();try{if(process.env.NODE_ENV!=="production")for(let t=this.subsHead;t;t=t.nextSub)t.sub.onTrigger&&!(t.sub.flags&8)&&t.sub.onTrigger(is({effect:t.sub},e));for(let t=this.subs;t;t=t.prevSub)t.sub.notify()&&t.sub.dep.notify()}finally{VO()}}}function Yte(n){if(n.dep.sc++,n.sub.flags&4){const e=n.dep.computed;if(e&&!n.dep.subs){e.flags|=20;for(let r=e.deps;r;r=r.nextDep)Yte(r)}const t=n.dep.subs;t!==n&&(n.prevSub=t,t&&(t.nextSub=n)),process.env.NODE_ENV!=="production"&&n.dep.subsHead===void 0&&(n.dep.subsHead=n),n.dep.subs=n}}const UO=new WeakMap,E0=Symbol(process.env.NODE_ENV!=="production"?"Object iterate":""),WO=Symbol(process.env.NODE_ENV!=="production"?"Map keys iterate":""),W3=Symbol(process.env.NODE_ENV!=="production"?"Array iterate":"");function $s(n,e,t){if(ml&&lr){let r=UO.get(n);r||UO.set(n,r=new Map);let s=r.get(t);s||(r.set(t,s=new qO),s.map=r,s.key=t),process.env.NODE_ENV!=="production"?s.track({target:n,type:e,key:t}):s.track()}}function wc(n,e,t,r,s,i){const o=UO.get(n);if(!o){U3++;return}const a=l=>{l&&(process.env.NODE_ENV!=="production"?l.trigger({target:n,type:e,key:t,newValue:r,oldValue:s,oldTarget:i}):l.trigger())};if(BO(),e==="clear")o.forEach(a);else{const l=Ut(n),c=l&&$O(t);if(l&&t==="length"){const u=Number(r);o.forEach((d,f)=>{(f==="length"||f===W3||!D1(f)&&f>=u)&&a(d)})}else switch((t!==void 0||o.has(void 0))&&a(o.get(t)),c&&a(o.get(W3)),e){case"add":l?c&&a(o.get("length")):(a(o.get(E0)),I1(n)&&a(o.get(WO)));break;case"delete":l||(a(o.get(E0)),I1(n)&&a(o.get(WO)));break;case"set":I1(n)&&a(o.get(E0));break}}VO()}function R1(n){const e=gn(n);return e===n?e:($s(e,"iterate",W3),ho(n)?e:e.map(Hu))}function GO(n){return $s(n=gn(n),"iterate",W3),n}function Hh(n,e){return kc(n)?K3(_0(n)?Hu(e):e):Hu(e)}const MRe={__proto__:null,[Symbol.iterator](){return KO(this,Symbol.iterator,n=>Hh(this,n))},concat(...n){return R1(this).concat(...n.map(e=>Ut(e)?R1(e):e))},entries(){return KO(this,"entries",n=>(n[1]=Hh(this,n[1]),n))},every(n,e){return zu(this,"every",n,e,void 0,arguments)},filter(n,e){return zu(this,"filter",n,e,t=>t.map(r=>Hh(this,r)),arguments)},find(n,e){return zu(this,"find",n,e,t=>Hh(this,t),arguments)},findIndex(n,e){return zu(this,"findIndex",n,e,void 0,arguments)},findLast(n,e){return zu(this,"findLast",n,e,t=>Hh(this,t),arguments)},findLastIndex(n,e){return zu(this,"findLastIndex",n,e,void 0,arguments)},forEach(n,e){return zu(this,"forEach",n,e,void 0,arguments)},includes(...n){return YO(this,"includes",n)},indexOf(...n){return YO(this,"indexOf",n)},join(n){return R1(this).join(n)},lastIndexOf(...n){return YO(this,"lastIndexOf",n)},map(n,e){return zu(this,"map",n,e,void 0,arguments)},pop(){return G3(this,"pop")},push(...n){return G3(this,"push",n)},reduce(n,...e){return Zte(this,"reduce",n,e)},reduceRight(n,...e){return Zte(this,"reduceRight",n,e)},shift(){return G3(this,"shift")},some(n,e){return zu(this,"some",n,e,void 0,arguments)},splice(...n){return G3(this,"splice",n)},toReversed(){return R1(this).toReversed()},toSorted(n){return R1(this).toSorted(n)},toSpliced(...n){return R1(this).toSpliced(...n)},unshift(...n){return G3(this,"unshift",n)},values(){return KO(this,"values",n=>Hh(this,n))}};function KO(n,e,t){const r=GO(n),s=r[e]();return r!==n&&!ho(n)&&(s._next=s.next,s.next=()=>{const i=s._next();return i.done||(i.value=t(i.value)),i}),s}const ORe=Array.prototype;function zu(n,e,t,r,s,i){const o=GO(n),a=o!==n&&!ho(n),l=o[e];if(l!==ORe[e]){const d=l.apply(n,i);return a?Hu(d):d}let c=t;o!==n&&(a?c=function(d,f){return t.call(this,Hh(n,d),f,n)}:t.length>2&&(c=function(d,f){return t.call(this,d,f,n)}));const u=l.call(o,c,r);return a&&s?s(u):u}function Zte(n,e,t,r){const s=GO(n);let i=t;return s!==n&&(ho(n)?t.length>3&&(i=function(o,a,l){return t.call(this,o,a,l,n)}):i=function(o,a,l){return t.call(this,o,Hh(n,a),l,n)}),s[e](i,...r)}function YO(n,e,t){const r=gn(n);$s(r,"iterate",W3);const s=r[e](...t);return(s===-1||s===!1)&&Xk(t[0])?(t[0]=gn(t[0]),r[e](...t)):s}function G3(n,e,t=[]){gl(),BO();const r=gn(n)[e].apply(n,t);return VO(),yl(),r}const PRe=Vu("__proto__,__v_isRef,__isVue"),Xte=new Set(Object.getOwnPropertyNames(Symbol).filter(n=>n!=="arguments"&&n!=="caller").map(n=>Symbol[n]).filter(D1));function IRe(n){D1(n)||(n=String(n));const e=gn(this);return $s(e,"has",n),e.hasOwnProperty(n)}class Jte{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get(e,t,r){if(t==="__v_skip")return e.__v_skip;const s=this._isReadonly,i=this._isShallow;if(t==="__v_isReactive")return!s;if(t==="__v_isReadonly")return s;if(t==="__v_isShallow")return i;if(t==="__v_raw")return r===(s?i?ine:sne:i?rne:nne).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(r)?e:void 0;const o=Ut(e);if(!s){let l;if(o&&(l=MRe[t]))return l;if(t==="hasOwnProperty")return IRe}const a=Reflect.get(e,t,Ss(e)?e:r);if((D1(t)?Xte.has(t):PRe(t))||(s||$s(e,"get",t),i))return a;if(Ss(a)){const l=o&&$O(t)?a:a.value;return s&&wr(l)?JO(l):l}return wr(a)?s?JO(a):XO(a):a}}class Qte extends Jte{constructor(e=!1){super(!1,e)}set(e,t,r,s){let i=e[t];const o=Ut(e)&&$O(t);if(!this._isShallow){const c=kc(i);if(!ho(r)&&!kc(r)&&(i=gn(i),r=gn(r)),!o&&Ss(i)&&!Ss(r))return c?(process.env.NODE_ENV!=="production"&&pl(`Set operation on key "${String(t)}" failed: target is readonly.`,e[t]),!0):(i.value=r,!0)}const a=o?Number(t)<e.length:jn(e,t),l=Reflect.set(e,t,r,Ss(e)?e:s);return e===gn(s)&&(a?Vh(r,i)&&wc(e,"set",t,r,i):wc(e,"add",t,r)),l}deleteProperty(e,t){const r=jn(e,t),s=e[t],i=Reflect.deleteProperty(e,t);return i&&r&&wc(e,"delete",t,void 0,s),i}has(e,t){const r=Reflect.has(e,t);return(!D1(t)||!Xte.has(t))&&$s(e,"has",t),r}ownKeys(e){return $s(e,"iterate",Ut(e)?"length":E0),Reflect.ownKeys(e)}}class ene extends Jte{constructor(e=!1){super(!0,e)}set(e,t){return process.env.NODE_ENV!=="production"&&pl(`Set operation on key "${String(t)}" failed: target is readonly.`,e),!0}deleteProperty(e,t){return process.env.NODE_ENV!=="production"&&pl(`Delete operation on key "${String(t)}" failed: target is readonly.`,e),!0}}const DRe=new Qte,RRe=new ene,$Re=new Qte(!0),LRe=new ene(!0),ZO=n=>n,Gk=n=>Reflect.getPrototypeOf(n);function FRe(n,e,t){return function(...r){const s=this.__v_raw,i=gn(s),o=I1(i),a=n==="entries"||n===Symbol.iterator&&o,l=n==="keys"&&o,c=s[n](...r),u=t?ZO:e?K3:Hu;return!e&&$s(i,"iterate",l?WO:E0),is(Object.create(c),{next(){const{value:d,done:f}=c.next();return f?{value:d,done:f}:{value:a?[u(d[0]),u(d[1])]:u(d),done:f}}})}}function Kk(n){return function(...e){if(process.env.NODE_ENV!=="production"){const t=e[0]?`on key "${e[0]}" `:"";pl(`${Uk(n)} operation ${t}failed: target is readonly.`,gn(this))}return n==="delete"?!1:n==="clear"?void 0:this}}function jRe(n,e){const t={get(s){const i=this.__v_raw,o=gn(i),a=gn(s);n||(Vh(s,a)&&$s(o,"get",s),$s(o,"get",a));const{has:l}=Gk(o),c=e?ZO:n?K3:Hu;if(l.call(o,s))return c(i.get(s));if(l.call(o,a))return c(i.get(a));i!==o&&i.get(s)},get size(){const s=this.__v_raw;return!n&&$s(gn(s),"iterate",E0),s.size},has(s){const i=this.__v_raw,o=gn(i),a=gn(s);return n||(Vh(s,a)&&$s(o,"has",s),$s(o,"has",a)),s===a?i.has(s):i.has(s)||i.has(a)},forEach(s,i){const o=this,a=o.__v_raw,l=gn(a),c=e?ZO:n?K3:Hu;return!n&&$s(l,"iterate",E0),a.forEach((u,d)=>s.call(i,c(u),c(d),o))}};return is(t,n?{add:Kk("add"),set:Kk("set"),delete:Kk("delete"),clear:Kk("clear")}:{add(s){!e&&!ho(s)&&!kc(s)&&(s=gn(s));const i=gn(this);return Gk(i).has.call(i,s)||(i.add(s),wc(i,"add",s,s)),this},set(s,i){!e&&!ho(i)&&!kc(i)&&(i=gn(i));const o=gn(this),{has:a,get:l}=Gk(o);let c=a.call(o,s);c?process.env.NODE_ENV!=="production"&&tne(o,a,s):(s=gn(s),c=a.call(o,s));const u=l.call(o,s);return o.set(s,i),c?Vh(i,u)&&wc(o,"set",s,i,u):wc(o,"add",s,i),this},delete(s){const i=gn(this),{has:o,get:a}=Gk(i);let l=o.call(i,s);l?process.env.NODE_ENV!=="production"&&tne(i,o,s):(s=gn(s),l=o.call(i,s));const c=a?a.call(i,s):void 0,u=i.delete(s);return l&&wc(i,"delete",s,void 0,c),u},clear(){const s=gn(this),i=s.size!==0,o=process.env.NODE_ENV!=="production"?I1(s)?new Map(s):new Set(s):void 0,a=s.clear();return i&&wc(s,"clear",void 0,void 0,o),a}}),["keys","values","entries",Symbol.iterator].forEach(s=>{t[s]=FRe(s,n,e)}),t}function Yk(n,e){const t=jRe(n,e);return(r,s,i)=>s==="__v_isReactive"?!n:s==="__v_isReadonly"?n:s==="__v_raw"?r:Reflect.get(jn(t,s)&&s in r?t:r,s,i)}const BRe={get:Yk(!1,!1)},VRe={get:Yk(!1,!0)},zRe={get:Yk(!0,!1)},HRe={get:Yk(!0,!0)};function tne(n,e,t){const r=gn(t);if(r!==t&&e.call(n,r)){const s=RO(n);pl(`Reactive ${s} contains both the raw and reactive versions of the same object${s==="Map"?" as keys":""}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`)}}const nne=new WeakMap,rne=new WeakMap,sne=new WeakMap,ine=new WeakMap;function qRe(n){switch(n){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function URe(n){return n.__v_skip||!Object.isExtensible(n)?0:qRe(RO(n))}function XO(n){return kc(n)?n:Zk(n,!1,DRe,BRe,nne)}function WRe(n){return Zk(n,!1,$Re,VRe,rne)}function JO(n){return Zk(n,!0,RRe,zRe,sne)}function xc(n){return Zk(n,!0,LRe,HRe,ine)}function Zk(n,e,t,r,s){if(!wr(n))return process.env.NODE_ENV!=="production"&&pl(`value cannot be made ${e?"readonly":"reactive"}: ${String(n)}`),n;if(n.__v_raw&&!(e&&n.__v_isReactive))return n;const i=URe(n);if(i===0)return n;const o=s.get(n);if(o)return o;const a=new Proxy(n,i===2?r:t);return s.set(n,a),a}function _0(n){return kc(n)?_0(n.__v_raw):!!(n&&n.__v_isReactive)}function kc(n){return!!(n&&n.__v_isReadonly)}function ho(n){return!!(n&&n.__v_isShallow)}function Xk(n){return n?!!n.__v_raw:!1}function gn(n){const e=n&&n.__v_raw;return e?gn(e):n}function GRe(n){return!jn(n,"__v_skip")&&Object.isExtensible(n)&&Wk(n,"__v_skip",!0),n}const Hu=n=>wr(n)?XO(n):n,K3=n=>wr(n)?JO(n):n;function Ss(n){return n?n.__v_isRef===!0:!1}function ls(n){return one(n,!1)}function KRe(n){return one(n,!0)}function one(n,e){return Ss(n)?n:new YRe(n,e)}class YRe{constructor(e,t){this.dep=new qO,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=t?e:gn(e),this._value=t?e:Hu(e),this.__v_isShallow=t}get value(){return process.env.NODE_ENV!=="production"?this.dep.track({target:this,type:"get",key:"value"}):this.dep.track(),this._value}set value(e){const t=this._rawValue,r=this.__v_isShallow||ho(e)||kc(e);e=r?e:gn(e),Vh(e,t)&&(this._rawValue=e,this._value=r?e:Hu(e),process.env.NODE_ENV!=="production"?this.dep.trigger({target:this,type:"set",key:"value",newValue:e,oldValue:t}):this.dep.trigger())}}function ZRe(n){return Ss(n)?n.value:n}const XRe={get:(n,e,t)=>e==="__v_raw"?n:ZRe(Reflect.get(n,e,t)),set:(n,e,t,r)=>{const s=n[e];return Ss(s)&&!Ss(t)?(s.value=t,!0):Reflect.set(n,e,t,r)}};function ane(n){return _0(n)?n:new Proxy(n,XRe)}class JRe{constructor(e,t,r){this.fn=e,this.setter=t,this._value=void 0,this.dep=new qO(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=U3-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!t,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&lr!==this)return Hte(this,!0),!0;process.env.NODE_ENV}get value(){const e=process.env.NODE_ENV!=="production"?this.dep.track({target:this,type:"get",key:"value"}):this.dep.track();return Wte(this),e&&(e.version=this.dep.version),this._value}set value(e){this.setter?this.setter(e):process.env.NODE_ENV!=="production"&&pl("Write operation failed: computed value is readonly")}}function QRe(n,e,t=!1){let r,s;Wt(n)?r=n:(r=n.get,s=n.set);const i=new JRe(r,s,t);return process.env.NODE_ENV,i}const Jk={},Qk=new WeakMap;let T0;function e$e(n,e=!1,t=T0){if(t){let r=Qk.get(t);r||Qk.set(t,r=[]),r.push(n)}else process.env.NODE_ENV!=="production"&&!e&&pl("onWatcherCleanup() was called when there was no active watcher to associate with.")}function t$e(n,e,t=fr){const{immediate:r,deep:s,once:i,scheduler:o,augmentJob:a,call:l}=t,c=A=>{(t.onWarn||pl)("Invalid watch source: ",A,"A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.")},u=A=>s?A:ho(A)||s===!1||s===0?qh(A,1):qh(A);let d,f,p,m,y=!1,w=!1;if(Ss(n)?(f=()=>n.value,y=ho(n)):_0(n)?(f=()=>u(n),y=!0):Ut(n)?(w=!0,y=n.some(A=>_0(A)||ho(A)),f=()=>n.map(A=>{if(Ss(A))return A.value;if(_0(A))return u(A);if(Wt(A))return l?l(A,2):A();process.env.NODE_ENV!=="production"&&c(A)})):Wt(n)?e?f=l?()=>l(n,2):n:f=()=>{if(p){gl();try{p()}finally{yl()}}const A=T0;T0=d;try{return l?l(n,3,[m]):n(m)}finally{T0=A}}:(f=Cs,process.env.NODE_ENV!=="production"&&c(n)),e&&s){const A=f,T=s===!0?1/0:s;f=()=>qh(A(),T)}const k=TRe(),x=()=>{d.stop(),k&&k.active&&IO(k.effects,d)};if(i&&e){const A=e;e=(...T)=>{A(...T),x()}}let S=w?new Array(n.length).fill(Jk):Jk;const _=A=>{if(!(!(d.flags&1)||!d.dirty&&!A))if(e){const T=d.run();if(s||y||(w?T.some((O,I)=>Vh(O,S[I])):Vh(T,S))){p&&p();const O=T0;T0=d;try{const I=[T,S===Jk?void 0:w&&S[0]===Jk?[]:S,m];S=T,l?l(e,3,I):e(...I)}finally{T0=O}}}else d.run()};return a&&a(_),d=new Vte(f),d.scheduler=o?()=>o(_,!1):_,m=A=>e$e(A,!1,d),p=d.onStop=()=>{const A=Qk.get(d);if(A){if(l)l(A,4);else for(const T of A)T();Qk.delete(d)}},process.env.NODE_ENV!=="production"&&(d.onTrack=t.onTrack,d.onTrigger=t.onTrigger),e?r?_(!0):S=d.run():o?o(_.bind(null,!0),!0):d.run(),x.pause=d.pause.bind(d),x.resume=d.resume.bind(d),x.stop=x,x}function qh(n,e=1/0,t){if(e<=0||!wr(n)||n.__v_skip||(t=t||new Map,(t.get(n)||0)>=e))return n;if(t.set(n,e),e--,Ss(n))qh(n.value,e,t);else if(Ut(n))for(let r=0;r<n.length;r++)qh(n[r],e,t);else if(lRe(n)||I1(n))n.forEach(r=>{qh(r,e,t)});else if(uRe(n)){for(const r in n)qh(n[r],e,t);for(const r of Object.getOwnPropertySymbols(n))Object.prototype.propertyIsEnumerable.call(n,r)&&qh(n[r],e,t)}return n}/** +* @vue/runtime-core v3.5.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const A0=[];function e9(n){A0.push(n)}function t9(){A0.pop()}let QO=!1;function Fe(n,...e){if(QO)return;QO=!0,gl();const t=A0.length?A0[A0.length-1].component:null,r=t&&t.appContext.config.warnHandler,s=n$e();if(r)$1(r,t,11,[n+e.map(i=>{var o,a;return(a=(o=i.toString)==null?void 0:o.call(i))!=null?a:JSON.stringify(i)}).join(""),t&&t.proxy,s.map(({vnode:i})=>`at <${a4(t,i.type)}>`).join(` +`),s]);else{const i=[`[Vue warn]: ${n}`,...e];s.length&&i.push(` +`,...r$e(s)),console.warn(...i)}yl(),QO=!1}function n$e(){let n=A0[A0.length-1];if(!n)return[];const e=[];for(;n;){const t=e[0];t&&t.vnode===n?t.recurseCount++:e.push({vnode:n,recurseCount:0});const r=n.component&&n.component.parent;n=r&&r.vnode}return e}function r$e(n){const e=[];return n.forEach((t,r)=>{e.push(...r===0?[]:[` +`],...s$e(t))}),e}function s$e({vnode:n,recurseCount:e}){const t=e>0?`... (${e} recursive calls)`:"",r=n.component?n.component.parent==null:!1,s=` at <${a4(n.component,n.type,r)}`,i=">"+t;return n.props?[s,...i$e(n.props),i]:[s+i]}function i$e(n){const e=[],t=Object.keys(n);return t.slice(0,3).forEach(r=>{e.push(...lne(r,n[r]))}),t.length>3&&e.push(" ..."),e}function lne(n,e,t){return as(e)?(e=JSON.stringify(e),t?e:[`${n}=${e}`]):typeof e=="number"||typeof e=="boolean"||e==null?t?e:[`${n}=${e}`]:Ss(e)?(e=lne(n,gn(e.value),!0),t?e:[`${n}=Ref<`,e,">"]):Wt(e)?[`${n}=fn${e.name?`<${e.name}>`:""}`]:(e=gn(e),t?e:[`${n}=`,e])}const eP={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook",0:"setup function",1:"render function",2:"watcher getter",3:"watcher callback",4:"watcher cleanup function",5:"native event handler",6:"component event handler",7:"vnode hook",8:"directive hook",9:"transition hook",10:"app errorHandler",11:"app warnHandler",12:"ref function",13:"async component loader",14:"scheduler flush",15:"component update",16:"app unmount cleanup function"};function $1(n,e,t,r){try{return r?n(...r):n()}catch(s){Y3(s,e,t)}}function Cc(n,e,t,r){if(Wt(n)){const s=$1(n,e,t,r);return s&&DO(s)&&s.catch(i=>{Y3(i,e,t)}),s}if(Ut(n)){const s=[];for(let i=0;i<n.length;i++)s.push(Cc(n[i],e,t,r));return s}else process.env.NODE_ENV!=="production"&&Fe(`Invalid value type passed to callWithAsyncErrorHandling(): ${typeof n}`)}function Y3(n,e,t,r=!0){const s=e?e.vnode:null,{errorHandler:i,throwUnhandledErrorInProduction:o}=e&&e.appContext.config||fr;if(e){let a=e.parent;const l=e.proxy,c=process.env.NODE_ENV!=="production"?eP[t]:`https://vuejs.org/error-reference/#runtime-${t}`;for(;a;){const u=a.ec;if(u){for(let d=0;d<u.length;d++)if(u[d](n,l,c)===!1)return}a=a.parent}if(i){gl(),$1(i,null,10,[n,l,c]),yl();return}}o$e(n,t,s,r,o)}function o$e(n,e,t,r=!0,s=!1){if(process.env.NODE_ENV!=="production"){const i=eP[e];if(t&&e9(t),Fe(`Unhandled error${i?` during execution of ${i}`:""}`),t&&t9(),r)throw n;console.error(n)}else{if(s)throw n;console.error(n)}}const Fi=[];let Sc=-1;const L1=[];let Uh=null,F1=0;const cne=Promise.resolve();let n9=null;const a$e=100;function l$e(n){const e=n9||cne;return n?e.then(this?n.bind(this):n):e}function c$e(n){let e=Sc+1,t=Fi.length;for(;e<t;){const r=e+t>>>1,s=Fi[r],i=Z3(s);i<n||i===n&&s.flags&2?e=r+1:t=r}return e}function r9(n){if(!(n.flags&1)){const e=Z3(n),t=Fi[Fi.length-1];!t||!(n.flags&2)&&e>=Z3(t)?Fi.push(n):Fi.splice(c$e(e),0,n),n.flags|=1,une()}}function une(){n9||(n9=cne.then(pne))}function dne(n){Ut(n)?L1.push(...n):Uh&&n.id===-1?Uh.splice(F1+1,0,n):n.flags&1||(L1.push(n),n.flags|=1),une()}function hne(n,e,t=Sc+1){for(process.env.NODE_ENV!=="production"&&(e=e||new Map);t<Fi.length;t++){const r=Fi[t];if(r&&r.flags&2){if(n&&r.id!==n.uid||process.env.NODE_ENV!=="production"&&tP(e,r))continue;Fi.splice(t,1),t--,r.flags&4&&(r.flags&=-2),r(),r.flags&4||(r.flags&=-2)}}}function fne(n){if(L1.length){const e=[...new Set(L1)].sort((t,r)=>Z3(t)-Z3(r));if(L1.length=0,Uh){Uh.push(...e);return}for(Uh=e,process.env.NODE_ENV!=="production"&&(n=n||new Map),F1=0;F1<Uh.length;F1++){const t=Uh[F1];process.env.NODE_ENV!=="production"&&tP(n,t)||(t.flags&4&&(t.flags&=-2),t.flags&8||t(),t.flags&=-2)}Uh=null,F1=0}}const Z3=n=>n.id==null?n.flags&2?-1:1/0:n.id;function pne(n){process.env.NODE_ENV!=="production"&&(n=n||new Map);const e=process.env.NODE_ENV!=="production"?t=>tP(n,t):Cs;try{for(Sc=0;Sc<Fi.length;Sc++){const t=Fi[Sc];if(t&&!(t.flags&8)){if(process.env.NODE_ENV!=="production"&&e(t))continue;t.flags&4&&(t.flags&=-2),$1(t,t.i,t.i?15:14),t.flags&4||(t.flags&=-2)}}}finally{for(;Sc<Fi.length;Sc++){const t=Fi[Sc];t&&(t.flags&=-2)}Sc=-1,Fi.length=0,fne(n),n9=null,(Fi.length||L1.length)&&pne(n)}}function tP(n,e){const t=n.get(e)||0;if(t>a$e){const r=e.i,s=r&&ure(r.type);return Y3(`Maximum recursive updates exceeded${s?` in component <${s}>`:""}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,null,10),!0}return n.set(e,t+1),!1}let vl=!1;const s9=new Map;process.env.NODE_ENV!=="production"&&(zh().__VUE_HMR_RUNTIME__={createRecord:nP(mne),rerender:nP(h$e),reload:nP(f$e)});const N0=new Map;function u$e(n){const e=n.type.__hmrId;let t=N0.get(e);t||(mne(e,n.type),t=N0.get(e)),t.instances.add(n)}function d$e(n){N0.get(n.type.__hmrId).instances.delete(n)}function mne(n,e){return N0.has(n)?!1:(N0.set(n,{initialDef:i9(e),instances:new Set}),!0)}function i9(n){return dre(n)?n.__vccOpts:n}function h$e(n,e){const t=N0.get(n);t&&(t.initialDef.render=e,[...t.instances].forEach(r=>{e&&(r.render=e,i9(r.type).render=e),r.renderCache=[],vl=!0,r.job.flags&8||r.update(),vl=!1}))}function f$e(n,e){const t=N0.get(n);if(!t)return;e=i9(e),gne(t.initialDef,e);const r=[...t.instances];for(let s=0;s<r.length;s++){const i=r[s],o=i9(i.type);let a=s9.get(o);a||(o!==t.initialDef&&gne(o,e),s9.set(o,a=new Set)),a.add(i),i.appContext.propsCache.delete(i.type),i.appContext.emitsCache.delete(i.type),i.appContext.optionsCache.delete(i.type),i.ceReload?(a.add(i),i.ceReload(e.styles),a.delete(i)):i.parent?r9(()=>{i.job.flags&8||(vl=!0,i.parent.update(),vl=!1,a.delete(i))}):i.appContext.reload?i.appContext.reload():typeof window<"u"?window.location.reload():console.warn("[HMR] Root or manually mounted instance modified. Full reload required."),i.root.ce&&i!==i.root&&i.root.ce._removeChildStyle(o)}dne(()=>{s9.clear()})}function gne(n,e){is(n,e);for(const t in n)t!=="__file"&&!(t in e)&&delete n[t]}function nP(n){return(e,t)=>{try{return n(e,t)}catch(r){console.error(r),console.warn("[HMR] Something went wrong during Vue component hot-reload. Full reload required.")}}}let bl,X3=[],rP=!1;function J3(n,...e){bl?bl.emit(n,...e):rP||X3.push({event:n,args:e})}function sP(n,e){var t,r;bl=n,bl?(bl.enabled=!0,X3.forEach(({event:s,args:i})=>bl.emit(s,...i)),X3=[]):typeof window<"u"&&window.HTMLElement&&!((r=(t=window.navigator)==null?void 0:t.userAgent)!=null&&r.includes("jsdom"))?((e.__VUE_DEVTOOLS_HOOK_REPLAY__=e.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(i=>{sP(i,e)}),setTimeout(()=>{bl||(e.__VUE_DEVTOOLS_HOOK_REPLAY__=null,rP=!0,X3=[])},3e3)):(rP=!0,X3=[])}function p$e(n,e){J3("app:init",n,e,{Fragment:fo,Text:r4,Comment:wl,Static:g9})}function m$e(n){J3("app:unmount",n)}const g$e=iP("component:added"),yne=iP("component:updated"),y$e=iP("component:removed"),v$e=n=>{bl&&typeof bl.cleanupBuffer=="function"&&!bl.cleanupBuffer(n)&&y$e(n)};function iP(n){return e=>{J3(n,e.appContext.app,e.uid,e.parent?e.parent.uid:void 0,e)}}const b$e=vne("perf:start"),w$e=vne("perf:end");function vne(n){return(e,t,r)=>{J3(n,e.appContext.app,e.uid,e,t,r)}}function x$e(n,e,t){J3("component:emit",n.appContext.app,n,e,t)}let Yo=null,bne=null;function o9(n){const e=Yo;return Yo=n,bne=n&&n.type.__scopeId||null,e}function k$e(n,e=Yo,t){if(!e||n._n)return n;const r=(...s)=>{r._d;const i=o9(e);let o;try{o=n(...s)}finally{o9(i),r._d}return(process.env.NODE_ENV!=="production"||__VUE_PROD_DEVTOOLS__)&&yne(e),o};return r._n=!0,r._c=!0,r._d=!0,r}function wne(n){dRe(n)&&Fe("Do not use built-in directive ids as custom directive id: "+n)}function M0(n,e,t,r){const s=n.dirs,i=e&&e.dirs;for(let o=0;o<s.length;o++){const a=s[o];i&&(a.oldValue=i[o].value);let l=a.dir[r];l&&(gl(),Cc(l,t,8,[n.el,a,n,e]),yl())}}function C$e(n,e){if(process.env.NODE_ENV!=="production"&&(!Ls||Ls.isMounted)&&Fe("provide() can only be used inside setup()."),Ls){let t=Ls.provides;const r=Ls.parent&&Ls.parent.provides;r===t&&(t=Ls.provides=Object.create(r)),t[n]=e}}function a9(n,e,t=!1){const r=sre();if(r||B1){let s=B1?B1._context.provides:r?r.parent==null||r.ce?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides:void 0;if(s&&n in s)return s[n];if(arguments.length>1)return t&&Wt(e)?e.call(r&&r.proxy):e;process.env.NODE_ENV!=="production"&&Fe(`injection "${String(n)}" not found.`)}else process.env.NODE_ENV!=="production"&&Fe("inject() can only be used inside setup() or functional components.")}const S$e=Symbol.for("v-scx"),E$e=()=>{{const n=a9(S$e);return n||process.env.NODE_ENV!=="production"&&Fe("Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build."),n}};function xne(n,e){return oP(n,null,e)}function l9(n,e,t){return process.env.NODE_ENV!=="production"&&!Wt(e)&&Fe("`watch(fn, options?)` signature has been moved to a separate API. Use `watchEffect(fn, options?)` instead. `watch` now only supports `watch(source, cb, options?) signature."),oP(n,e,t)}function oP(n,e,t=fr){const{immediate:r,deep:s,flush:i,once:o}=t;process.env.NODE_ENV!=="production"&&!e&&(r!==void 0&&Fe('watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.'),s!==void 0&&Fe('watch() "deep" option is only respected when using the watch(source, callback, options?) signature.'),o!==void 0&&Fe('watch() "once" option is only respected when using the watch(source, callback, options?) signature.'));const a=is({},t);process.env.NODE_ENV!=="production"&&(a.onWarn=Fe);const l=e&&r||!e&&i!=="post";let c;if(o4){if(i==="sync"){const p=E$e();c=p.__watcherHandles||(p.__watcherHandles=[])}else if(!l){const p=()=>{};return p.stop=Cs,p.resume=Cs,p.pause=Cs,p}}const u=Ls;a.call=(p,m,y)=>Cc(p,u,m,y);let d=!1;i==="post"?a.scheduler=p=>{Zo(p,u&&u.suspense)}:i!=="sync"&&(d=!0,a.scheduler=(p,m)=>{m?p():r9(p)}),a.augmentJob=p=>{e&&(p.flags|=4),d&&(p.flags|=2,u&&(p.id=u.uid,p.i=u))};const f=t$e(n,e,a);return o4&&(c?c.push(f):l&&f()),f}function _$e(n,e,t){const r=this.proxy,s=as(n)?n.includes(".")?kne(r,n):()=>r[n]:n.bind(r,r);let i;Wt(e)?i=e:(i=e.handler,t=e);const o=i4(this),a=oP(s,i.bind(r),t);return o(),a}function kne(n,e){const t=e.split(".");return()=>{let r=n;for(let s=0;s<t.length&&r;s++)r=r[t[s]];return r}}const T$e=Symbol("_vte"),A$e=n=>n.__isTeleport,N$e=Symbol("_leaveCb");function aP(n,e){n.shapeFlag&6&&n.component?(n.transition=e,aP(n.component.subTree,e)):n.shapeFlag&128?(n.ssContent.transition=e.clone(n.ssContent),n.ssFallback.transition=e.clone(n.ssFallback)):n.transition=e}function j1(n,e){return Wt(n)?is({name:n.name},e,{setup:n}):n}function Cne(n){n.ids=[n.ids[0]+n.ids[2]+++"-",0,0]}const Sne=new WeakSet,c9=new WeakMap;function Q3(n,e,t,r,s=!1){if(Ut(n)){n.forEach((y,w)=>Q3(y,e&&(Ut(e)?e[w]:e),t,r,s));return}if(e4(r)&&!s){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&Q3(n,e,t,r.component.subTree);return}const i=r.shapeFlag&4?EP(r.component):r.el,o=s?null:i,{i:a,r:l}=n;if(process.env.NODE_ENV!=="production"&&!a){Fe("Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.");return}const c=e&&e.r,u=a.refs===fr?a.refs={}:a.refs,d=a.setupState,f=gn(d),p=d===fr?Fte:y=>process.env.NODE_ENV!=="production"&&(jn(f,y)&&!Ss(f[y])&&Fe(`Template ref "${y}" used on a non-ref value. It will not work in the production build.`),Sne.has(f[y]))?!1:jn(f,y),m=y=>process.env.NODE_ENV==="production"||!Sne.has(y);if(c!=null&&c!==l){if(Ene(e),as(c))u[c]=null,p(c)&&(d[c]=null);else if(Ss(c)){m(c)&&(c.value=null);const y=e;y.k&&(u[y.k]=null)}}if(Wt(l))$1(l,a,12,[o,u]);else{const y=as(l),w=Ss(l);if(y||w){const k=()=>{if(n.f){const x=y?p(l)?d[l]:u[l]:m(l)||!n.k?l.value:u[n.k];if(s)Ut(x)&&IO(x,i);else if(Ut(x))x.includes(i)||x.push(i);else if(y)u[l]=[i],p(l)&&(d[l]=u[l]);else{const S=[i];m(l)&&(l.value=S),n.k&&(u[n.k]=S)}}else y?(u[l]=o,p(l)&&(d[l]=o)):w?(m(l)&&(l.value=o),n.k&&(u[n.k]=o)):process.env.NODE_ENV!=="production"&&Fe("Invalid template ref type:",l,`(${typeof l})`)};if(o){const x=()=>{k(),c9.delete(n)};x.id=-1,c9.set(n,x),Zo(x,t)}else Ene(n),k()}else process.env.NODE_ENV!=="production"&&Fe("Invalid template ref type:",l,`(${typeof l})`)}}function Ene(n){const e=c9.get(n);e&&(e.flags|=8,c9.delete(n))}zh().requestIdleCallback,zh().cancelIdleCallback;const e4=n=>!!n.type.__asyncLoader,lP=n=>n.type.__isKeepAlive;function M$e(n,e){_ne(n,"a",e)}function O$e(n,e){_ne(n,"da",e)}function _ne(n,e,t=Ls){const r=n.__wdc||(n.__wdc=()=>{let s=t;for(;s;){if(s.isDeactivated)return;s=s.parent}return n()});if(u9(e,r,t),t){let s=t.parent;for(;s&&s.parent;)lP(s.parent.vnode)&&P$e(r,e,t,s),s=s.parent}}function P$e(n,e,t,r){const s=u9(e,n,r,!0);cP(()=>{IO(r[e],s)},t)}function u9(n,e,t=Ls,r=!1){if(t){const s=t[n]||(t[n]=[]),i=e.__weh||(e.__weh=(...o)=>{gl();const a=i4(t),l=Cc(e,t,n,o);return a(),yl(),l});return r?s.unshift(i):s.push(i),i}else if(process.env.NODE_ENV!=="production"){const s=S0(eP[n].replace(/ hook$/,""));Fe(`${s} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.`)}}const qu=n=>(e,t=Ls)=>{(!o4||n==="sp")&&u9(n,(...r)=>e(...r),t)},I$e=qu("bm"),D$e=qu("m"),R$e=qu("bu"),$$e=qu("u"),L$e=qu("bum"),cP=qu("um"),F$e=qu("sp"),j$e=qu("rtg"),B$e=qu("rtc");function V$e(n,e=Ls){u9("ec",n,e)}const z$e=Symbol.for("v-ndc"),uP=n=>n?ore(n)?EP(n):uP(n.parent):null,O0=is(Object.create(null),{$:n=>n,$el:n=>n.vnode.el,$data:n=>n.data,$props:n=>process.env.NODE_ENV!=="production"?xc(n.props):n.props,$attrs:n=>process.env.NODE_ENV!=="production"?xc(n.attrs):n.attrs,$slots:n=>process.env.NODE_ENV!=="production"?xc(n.slots):n.slots,$refs:n=>process.env.NODE_ENV!=="production"?xc(n.refs):n.refs,$parent:n=>uP(n.parent),$root:n=>uP(n.root),$host:n=>n.ce,$emit:n=>n.emit,$options:n=>__VUE_OPTIONS_API__?One(n):n.type,$forceUpdate:n=>n.f||(n.f=()=>{r9(n.update)}),$nextTick:n=>n.n||(n.n=l$e.bind(n.proxy)),$watch:n=>__VUE_OPTIONS_API__?_$e.bind(n):Cs}),dP=n=>n==="_"||n==="$",hP=(n,e)=>n!==fr&&!n.__isScriptSetup&&jn(n,e),Tne={get({_:n},e){if(e==="__v_skip")return!0;const{ctx:t,setupState:r,data:s,props:i,accessCache:o,type:a,appContext:l}=n;if(process.env.NODE_ENV!=="production"&&e==="__isVue")return!0;if(e[0]!=="$"){const f=o[e];if(f!==void 0)switch(f){case 1:return r[e];case 2:return s[e];case 4:return t[e];case 3:return i[e]}else{if(hP(r,e))return o[e]=1,r[e];if(__VUE_OPTIONS_API__&&s!==fr&&jn(s,e))return o[e]=2,s[e];if(jn(i,e))return o[e]=3,i[e];if(t!==fr&&jn(t,e))return o[e]=4,t[e];(!__VUE_OPTIONS_API__||fP)&&(o[e]=0)}}const c=O0[e];let u,d;if(c)return e==="$attrs"?($s(n.attrs,"get",""),process.env.NODE_ENV!=="production"&&f9()):process.env.NODE_ENV!=="production"&&e==="$slots"&&$s(n,"get",e),c(n);if((u=a.__cssModules)&&(u=u[e]))return u;if(t!==fr&&jn(t,e))return o[e]=4,t[e];if(d=l.config.globalProperties,jn(d,e))return d[e];process.env.NODE_ENV!=="production"&&Yo&&(!as(e)||e.indexOf("__v")!==0)&&(s!==fr&&dP(e[0])&&jn(s,e)?Fe(`Property ${JSON.stringify(e)} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.`):n===Yo&&Fe(`Property ${JSON.stringify(e)} was accessed during render but is not defined on instance.`))},set({_:n},e,t){const{data:r,setupState:s,ctx:i}=n;return hP(s,e)?(s[e]=t,!0):process.env.NODE_ENV!=="production"&&s.__isScriptSetup&&jn(s,e)?(Fe(`Cannot mutate <script setup> binding "${e}" from Options API.`),!1):__VUE_OPTIONS_API__&&r!==fr&&jn(r,e)?(r[e]=t,!0):jn(n.props,e)?(process.env.NODE_ENV!=="production"&&Fe(`Attempting to mutate prop "${e}". Props are readonly.`),!1):e[0]==="$"&&e.slice(1)in n?(process.env.NODE_ENV!=="production"&&Fe(`Attempting to mutate public property "${e}". Properties starting with $ are reserved and readonly.`),!1):(process.env.NODE_ENV!=="production"&&e in n.appContext.config.globalProperties?Object.defineProperty(i,e,{enumerable:!0,configurable:!0,value:t}):i[e]=t,!0)},has({_:{data:n,setupState:e,accessCache:t,ctx:r,appContext:s,props:i,type:o}},a){let l;return!!(t[a]||__VUE_OPTIONS_API__&&n!==fr&&a[0]!=="$"&&jn(n,a)||hP(e,a)||jn(i,a)||jn(r,a)||jn(O0,a)||jn(s.config.globalProperties,a)||(l=o.__cssModules)&&l[a])},defineProperty(n,e,t){return t.get!=null?n._.accessCache[e]=0:jn(t,"value")&&this.set(n,e,t.value,null),Reflect.defineProperty(n,e,t)}};process.env.NODE_ENV!=="production"&&(Tne.ownKeys=n=>(Fe("Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead."),Reflect.ownKeys(n)));function H$e(n){const e={};return Object.defineProperty(e,"_",{configurable:!0,enumerable:!1,get:()=>n}),Object.keys(O0).forEach(t=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,get:()=>O0[t](n),set:Cs})}),e}function q$e(n){const{ctx:e,propsOptions:[t]}=n;t&&Object.keys(t).forEach(r=>{Object.defineProperty(e,r,{enumerable:!0,configurable:!0,get:()=>n.props[r],set:Cs})})}function U$e(n){const{ctx:e,setupState:t}=n;Object.keys(gn(t)).forEach(r=>{if(!t.__isScriptSetup){if(dP(r[0])){Fe(`setup() return property ${JSON.stringify(r)} should not start with "$" or "_" which are reserved prefixes for Vue internals.`);return}Object.defineProperty(e,r,{enumerable:!0,configurable:!0,get:()=>t[r],set:Cs})}})}function Ane(n){return Ut(n)?n.reduce((e,t)=>(e[t]=null,e),{}):n}function W$e(){const n=Object.create(null);return(e,t)=>{n[t]?Fe(`${e} property "${t}" is already defined in ${n[t]}.`):n[t]=e}}let fP=!0;function G$e(n){const e=One(n),t=n.proxy,r=n.ctx;fP=!1,e.beforeCreate&&Nne(e.beforeCreate,n,"bc");const{data:s,computed:i,methods:o,watch:a,provide:l,inject:c,created:u,beforeMount:d,mounted:f,beforeUpdate:p,updated:m,activated:y,deactivated:w,beforeDestroy:k,beforeUnmount:x,destroyed:S,unmounted:_,render:A,renderTracked:T,renderTriggered:O,errorCaptured:I,serverPrefetch:R,expose:D,inheritAttrs:W,components:H,directives:re,filters:ae}=e,de=process.env.NODE_ENV!=="production"?W$e():null;if(process.env.NODE_ENV!=="production"){const[X]=n.propsOptions;if(X)for(const se in X)de("Props",se)}if(c&&K$e(c,r,de),o)for(const X in o){const se=o[X];Wt(se)?(process.env.NODE_ENV!=="production"?Object.defineProperty(r,X,{value:se.bind(t),configurable:!0,enumerable:!0,writable:!0}):r[X]=se.bind(t),process.env.NODE_ENV!=="production"&&de("Methods",X)):process.env.NODE_ENV!=="production"&&Fe(`Method "${X}" has type "${typeof se}" in the component definition. Did you reference the function correctly?`)}if(s){process.env.NODE_ENV!=="production"&&!Wt(s)&&Fe("The data option must be a function. Plain object usage is no longer supported.");const X=s.call(t,t);if(process.env.NODE_ENV!=="production"&&DO(X)&&Fe("data() returned a Promise - note data() cannot be async; If you intend to perform data fetching before component renders, use async setup() + <Suspense>."),!wr(X))process.env.NODE_ENV!=="production"&&Fe("data() should return an object.");else if(n.data=XO(X),process.env.NODE_ENV!=="production")for(const se in X)de("Data",se),dP(se[0])||Object.defineProperty(r,se,{configurable:!0,enumerable:!0,get:()=>X[se],set:Cs})}if(fP=!0,i)for(const X in i){const se=i[X],J=Wt(se)?se.bind(t,t):Wt(se.get)?se.get.bind(t,t):Cs;process.env.NODE_ENV!=="production"&&J===Cs&&Fe(`Computed property "${X}" has no getter.`);const $=!Wt(se)&&Wt(se.set)?se.set.bind(t):process.env.NODE_ENV!=="production"?()=>{Fe(`Write operation failed: computed property "${X}" is readonly.`)}:Cs,ve=_P({get:J,set:$});Object.defineProperty(r,X,{enumerable:!0,configurable:!0,get:()=>ve.value,set:Pe=>ve.value=Pe}),process.env.NODE_ENV!=="production"&&de("Computed",X)}if(a)for(const X in a)Mne(a[X],r,t,X);if(l){const X=Wt(l)?l.call(t):l;Reflect.ownKeys(X).forEach(se=>{C$e(se,X[se])})}u&&Nne(u,n,"c");function le(X,se){Ut(se)?se.forEach(J=>X(J.bind(t))):se&&X(se.bind(t))}if(le(I$e,d),le(D$e,f),le(R$e,p),le($$e,m),le(M$e,y),le(O$e,w),le(V$e,I),le(B$e,T),le(j$e,O),le(L$e,x),le(cP,_),le(F$e,R),Ut(D))if(D.length){const X=n.exposed||(n.exposed={});D.forEach(se=>{Object.defineProperty(X,se,{get:()=>t[se],set:J=>t[se]=J,enumerable:!0})})}else n.exposed||(n.exposed={});A&&n.render===Cs&&(n.render=A),W!=null&&(n.inheritAttrs=W),H&&(n.components=H),re&&(n.directives=re),R&&Cne(n)}function K$e(n,e,t=Cs){Ut(n)&&(n=pP(n));for(const r in n){const s=n[r];let i;wr(s)?"default"in s?i=a9(s.from||r,s.default,!0):i=a9(s.from||r):i=a9(s),Ss(i)?Object.defineProperty(e,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):e[r]=i,process.env.NODE_ENV!=="production"&&t("Inject",r)}}function Nne(n,e,t){Cc(Ut(n)?n.map(r=>r.bind(e.proxy)):n.bind(e.proxy),e,t)}function Mne(n,e,t,r){let s=r.includes(".")?kne(t,r):()=>t[r];if(as(n)){const i=e[n];Wt(i)?l9(s,i):process.env.NODE_ENV!=="production"&&Fe(`Invalid watch handler specified by key "${n}"`,i)}else if(Wt(n))l9(s,n.bind(t));else if(wr(n))if(Ut(n))n.forEach(i=>Mne(i,e,t,r));else{const i=Wt(n.handler)?n.handler.bind(t):e[n.handler];Wt(i)?l9(s,i,n):process.env.NODE_ENV!=="production"&&Fe(`Invalid watch handler specified by key "${n.handler}"`,i)}else process.env.NODE_ENV!=="production"&&Fe(`Invalid watch option: "${r}"`,n)}function One(n){const e=n.type,{mixins:t,extends:r}=e,{mixins:s,optionsCache:i,config:{optionMergeStrategies:o}}=n.appContext,a=i.get(e);let l;return a?l=a:!s.length&&!t&&!r?l=e:(l={},s.length&&s.forEach(c=>d9(l,c,o,!0)),d9(l,e,o)),wr(e)&&i.set(e,l),l}function d9(n,e,t,r=!1){const{mixins:s,extends:i}=e;i&&d9(n,i,t,!0),s&&s.forEach(o=>d9(n,o,t,!0));for(const o in e)if(r&&o==="expose")process.env.NODE_ENV!=="production"&&Fe('"expose" option is ignored when declared in mixins or extends. It should only be declared in the base component itself.');else{const a=Y$e[o]||t&&t[o];n[o]=a?a(n[o],e[o]):e[o]}return n}const Y$e={data:Pne,props:Ine,emits:Ine,methods:t4,computed:t4,beforeCreate:ji,created:ji,beforeMount:ji,mounted:ji,beforeUpdate:ji,updated:ji,beforeDestroy:ji,beforeUnmount:ji,destroyed:ji,unmounted:ji,activated:ji,deactivated:ji,errorCaptured:ji,serverPrefetch:ji,components:t4,directives:t4,watch:X$e,provide:Pne,inject:Z$e};function Pne(n,e){return e?n?function(){return is(Wt(n)?n.call(this,this):n,Wt(e)?e.call(this,this):e)}:e:n}function Z$e(n,e){return t4(pP(n),pP(e))}function pP(n){if(Ut(n)){const e={};for(let t=0;t<n.length;t++)e[n[t]]=n[t];return e}return n}function ji(n,e){return n?[...new Set([].concat(n,e))]:e}function t4(n,e){return n?is(Object.create(null),n,e):e}function Ine(n,e){return n?Ut(n)&&Ut(e)?[...new Set([...n,...e])]:is(Object.create(null),Ane(n),Ane(e??{})):e}function X$e(n,e){if(!n)return e;if(!e)return n;const t=is(Object.create(null),n);for(const r in e)t[r]=ji(n[r],e[r]);return t}function Dne(){return{app:null,config:{isNativeTag:Fte,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let J$e=0;function Q$e(n,e){return function(r,s=null){Wt(r)||(r=is({},r)),s!=null&&!wr(s)&&(process.env.NODE_ENV!=="production"&&Fe("root props passed to app.mount() must be an object."),s=null);const i=Dne(),o=new WeakSet,a=[];let l=!1;const c=i.app={_uid:J$e++,_component:r,_props:s,_container:null,_context:i,_instance:null,version:hre,get config(){return i.config},set config(u){process.env.NODE_ENV!=="production"&&Fe("app.config cannot be replaced. Modify individual options instead.")},use(u,...d){return o.has(u)?process.env.NODE_ENV!=="production"&&Fe("Plugin has already been applied to target app."):u&&Wt(u.install)?(o.add(u),u.install(c,...d)):Wt(u)?(o.add(u),u(c,...d)):process.env.NODE_ENV!=="production"&&Fe('A plugin must either be a function or an object with an "install" function.'),c},mixin(u){return __VUE_OPTIONS_API__?i.mixins.includes(u)?process.env.NODE_ENV!=="production"&&Fe("Mixin has already been applied to target app"+(u.name?`: ${u.name}`:"")):i.mixins.push(u):process.env.NODE_ENV!=="production"&&Fe("Mixins are only available in builds supporting Options API"),c},component(u,d){return process.env.NODE_ENV!=="production"&&SP(u,i.config),d?(process.env.NODE_ENV!=="production"&&i.components[u]&&Fe(`Component "${u}" has already been registered in target app.`),i.components[u]=d,c):i.components[u]},directive(u,d){return process.env.NODE_ENV!=="production"&&wne(u),d?(process.env.NODE_ENV!=="production"&&i.directives[u]&&Fe(`Directive "${u}" has already been registered in target app.`),i.directives[u]=d,c):i.directives[u]},mount(u,d,f){if(l)process.env.NODE_ENV!=="production"&&Fe("App has already been mounted.\nIf you want to remount the same app, move your app creation logic into a factory function and create fresh app instances for each mount - e.g. `const createMyApp = () => createApp(App)`");else{process.env.NODE_ENV!=="production"&&u.__vue_app__&&Fe("There is already an app instance mounted on the host container.\n If you want to mount another app on the same host container, you need to unmount the previous app by calling `app.unmount()` first.");const p=c._ceVNode||xl(r,s);return p.appContext=i,f===!0?f="svg":f===!1&&(f=void 0),process.env.NODE_ENV!=="production"&&(i.reload=()=>{const m=Wh(p);m.el=null,n(m,u,f)}),n(p,u,f),l=!0,c._container=u,u.__vue_app__=c,(process.env.NODE_ENV!=="production"||__VUE_PROD_DEVTOOLS__)&&(c._instance=p.component,p$e(c,hre)),EP(p.component)}},onUnmount(u){process.env.NODE_ENV!=="production"&&typeof u!="function"&&Fe(`Expected function as first argument to app.onUnmount(), but got ${typeof u}`),a.push(u)},unmount(){l?(Cc(a,c._instance,16),n(null,c._container),(process.env.NODE_ENV!=="production"||__VUE_PROD_DEVTOOLS__)&&(c._instance=null,m$e(c)),delete c._container.__vue_app__):process.env.NODE_ENV!=="production"&&Fe("Cannot unmount an app that is not mounted.")},provide(u,d){return process.env.NODE_ENV!=="production"&&u in i.provides&&(jn(i.provides,u)?Fe(`App already provides property with key "${String(u)}". It will be overwritten with the new value.`):Fe(`App already provides property with key "${String(u)}" inherited from its parent element. It will be overwritten with the new value.`)),i.provides[u]=d,c},runWithContext(u){const d=B1;B1=c;try{return u()}finally{B1=d}}};return c}}let B1=null;const eLe=(n,e)=>e==="modelValue"||e==="model-value"?n.modelModifiers:n[`${e}Modifiers`]||n[`${fl(e)}Modifiers`]||n[`${Bh(e)}Modifiers`];function tLe(n,e,...t){if(n.isUnmounted)return;const r=n.vnode.props||fr;if(process.env.NODE_ENV!=="production"){const{emitsOptions:u,propsOptions:[d]}=n;if(u)if(!(e in u))(!d||!(S0(fl(e))in d))&&Fe(`Component emitted event "${e}" but it is neither declared in the emits option nor as an "${S0(fl(e))}" prop.`);else{const f=u[e];Wt(f)&&(f(...t)||Fe(`Invalid event arguments: event validation failed for event "${e}".`))}}let s=t;const i=e.startsWith("update:"),o=i&&eLe(r,e.slice(7));if(o&&(o.trim&&(s=t.map(u=>as(u)?u.trim():u)),o.number&&(s=t.map(pRe))),(process.env.NODE_ENV!=="production"||__VUE_PROD_DEVTOOLS__)&&x$e(n,e,s),process.env.NODE_ENV!=="production"){const u=e.toLowerCase();u!==e&&r[S0(u)]&&Fe(`Event "${u}" is emitted in component ${a4(n,n.type)} but the handler is registered for "${e}". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "${Bh(e)}" instead of "${e}".`)}let a,l=r[a=S0(e)]||r[a=S0(fl(e))];!l&&i&&(l=r[a=S0(Bh(e))]),l&&Cc(l,n,6,s);const c=r[a+"Once"];if(c){if(!n.emitted)n.emitted={};else if(n.emitted[a])return;n.emitted[a]=!0,Cc(c,n,6,s)}}const nLe=new WeakMap;function Rne(n,e,t=!1){const r=__VUE_OPTIONS_API__&&t?nLe:e.emitsCache,s=r.get(n);if(s!==void 0)return s;const i=n.emits;let o={},a=!1;if(__VUE_OPTIONS_API__&&!Wt(n)){const l=c=>{const u=Rne(c,e,!0);u&&(a=!0,is(o,u))};!t&&e.mixins.length&&e.mixins.forEach(l),n.extends&&l(n.extends),n.mixins&&n.mixins.forEach(l)}return!i&&!a?(wr(n)&&r.set(n,null),null):(Ut(i)?i.forEach(l=>o[l]=null):is(o,i),wr(n)&&r.set(n,o),o)}function h9(n,e){return!n||!B3(e)?!1:(e=e.slice(2).replace(/Once$/,""),jn(n,e[0].toLowerCase()+e.slice(1))||jn(n,Bh(e))||jn(n,e))}let mP=!1;function f9(){mP=!0}function $ne(n){const{type:e,vnode:t,proxy:r,withProxy:s,propsOptions:[i],slots:o,attrs:a,emit:l,render:c,renderCache:u,props:d,data:f,setupState:p,ctx:m,inheritAttrs:y}=n,w=o9(n);let k,x;process.env.NODE_ENV!=="production"&&(mP=!1);try{if(t.shapeFlag&4){const A=s||r,T=process.env.NODE_ENV!=="production"&&p.__isScriptSetup?new Proxy(A,{get(O,I,R){return Fe(`Property '${String(I)}' was accessed via 'this'. Avoid using 'this' in templates.`),Reflect.get(O,I,R)}}):A;k=kl(c.call(T,A,u,process.env.NODE_ENV!=="production"?xc(d):d,p,f,m)),x=a}else{const A=e;process.env.NODE_ENV!=="production"&&a===d&&f9(),k=kl(A.length>1?A(process.env.NODE_ENV!=="production"?xc(d):d,process.env.NODE_ENV!=="production"?{get attrs(){return f9(),xc(a)},slots:o,emit:l}:{attrs:a,slots:o,emit:l}):A(process.env.NODE_ENV!=="production"?xc(d):d,null)),x=e.props?a:rLe(a)}}catch(A){Y3(A,n,1),k=xl(wl)}let S=k,_;if(process.env.NODE_ENV!=="production"&&k.patchFlag>0&&k.patchFlag&2048&&([S,_]=Lne(k)),x&&y!==!1){const A=Object.keys(x),{shapeFlag:T}=S;if(A.length){if(T&7)i&&A.some(zk)&&(x=sLe(x,i)),S=Wh(S,x,!1,!0);else if(process.env.NODE_ENV!=="production"&&!mP&&S.type!==wl){const O=Object.keys(a),I=[],R=[];for(let D=0,W=O.length;D<W;D++){const H=O[D];B3(H)?zk(H)||I.push(H[2].toLowerCase()+H.slice(3)):R.push(H)}R.length&&Fe(`Extraneous non-props attributes (${R.join(", ")}) were passed to component but could not be automatically inherited because component renders fragment or text or teleport root nodes.`),I.length&&Fe(`Extraneous non-emits event listeners (${I.join(", ")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the "emits" option.`)}}}return t.dirs&&(process.env.NODE_ENV!=="production"&&!Fne(S)&&Fe("Runtime directive used on component with non-element root node. The directives will not function as intended."),S=Wh(S,null,!1,!0),S.dirs=S.dirs?S.dirs.concat(t.dirs):t.dirs),t.transition&&(process.env.NODE_ENV!=="production"&&!Fne(S)&&Fe("Component inside <Transition> renders non-element root node that cannot be animated."),aP(S,t.transition)),process.env.NODE_ENV!=="production"&&_?_(S):k=S,o9(w),k}const Lne=n=>{const e=n.children,t=n.dynamicChildren,r=gP(e,!1);if(r){if(process.env.NODE_ENV!=="production"&&r.patchFlag>0&&r.patchFlag&2048)return Lne(r)}else return[n,void 0];const s=e.indexOf(r),i=t?t.indexOf(r):-1,o=a=>{e[s]=a,t&&(i>-1?t[i]=a:a.patchFlag>0&&(n.dynamicChildren=[...t,a]))};return[kl(r),o]};function gP(n,e=!0){let t;for(let r=0;r<n.length;r++){const s=n[r];if(H1(s)){if(s.type!==wl||s.children==="v-if"){if(t)return;if(t=s,process.env.NODE_ENV!=="production"&&e&&t.patchFlag>0&&t.patchFlag&2048)return gP(t.children)}}else return}return t}const rLe=n=>{let e;for(const t in n)(t==="class"||t==="style"||B3(t))&&((e||(e={}))[t]=n[t]);return e},sLe=(n,e)=>{const t={};for(const r in n)(!zk(r)||!(r.slice(9)in e))&&(t[r]=n[r]);return t},Fne=n=>n.shapeFlag&7||n.type===wl;function iLe(n,e,t){const{props:r,children:s,component:i}=n,{props:o,children:a,patchFlag:l}=e,c=i.emitsOptions;if(process.env.NODE_ENV!=="production"&&(s||a)&&vl||e.dirs||e.transition)return!0;if(t&&l>=0){if(l&1024)return!0;if(l&16)return r?jne(r,o,c):!!o;if(l&8){const u=e.dynamicProps;for(let d=0;d<u.length;d++){const f=u[d];if(o[f]!==r[f]&&!h9(c,f))return!0}}}else return(s||a)&&(!a||!a.$stable)?!0:r===o?!1:r?o?jne(r,o,c):!0:!!o;return!1}function jne(n,e,t){const r=Object.keys(e);if(r.length!==Object.keys(n).length)return!0;for(let s=0;s<r.length;s++){const i=r[s];if(e[i]!==n[i]&&!h9(t,i))return!0}return!1}function oLe({vnode:n,parent:e},t){for(;e;){const r=e.subTree;if(r.suspense&&r.suspense.activeBranch===n&&(r.el=n.el),r===n)(n=e.vnode).el=t,e=e.parent;else break}}const Bne={},Vne=()=>Object.create(Bne),zne=n=>Object.getPrototypeOf(n)===Bne;function aLe(n,e,t,r=!1){const s={},i=Vne();n.propsDefaults=Object.create(null),Hne(n,e,s,i);for(const o in n.propsOptions[0])o in s||(s[o]=void 0);process.env.NODE_ENV!=="production"&&Wne(e||{},s,n),t?n.props=r?s:WRe(s):n.type.props?n.props=s:n.props=i,n.attrs=i}function lLe(n){for(;n;){if(n.type.__hmrId)return!0;n=n.parent}}function cLe(n,e,t,r){const{props:s,attrs:i,vnode:{patchFlag:o}}=n,a=gn(s),[l]=n.propsOptions;let c=!1;if(!(process.env.NODE_ENV!=="production"&&lLe(n))&&(r||o>0)&&!(o&16)){if(o&8){const u=n.vnode.dynamicProps;for(let d=0;d<u.length;d++){let f=u[d];if(h9(n.emitsOptions,f))continue;const p=e[f];if(l)if(jn(i,f))p!==i[f]&&(i[f]=p,c=!0);else{const m=fl(f);s[m]=yP(l,a,m,p,n,!1)}else p!==i[f]&&(i[f]=p,c=!0)}}}else{Hne(n,e,s,i)&&(c=!0);let u;for(const d in a)(!e||!jn(e,d)&&((u=Bh(d))===d||!jn(e,u)))&&(l?t&&(t[d]!==void 0||t[u]!==void 0)&&(s[d]=yP(l,a,d,void 0,n,!0)):delete s[d]);if(i!==a)for(const d in i)(!e||!jn(e,d))&&(delete i[d],c=!0)}c&&wc(n.attrs,"set",""),process.env.NODE_ENV!=="production"&&Wne(e||{},s,n)}function Hne(n,e,t,r){const[s,i]=n.propsOptions;let o=!1,a;if(e)for(let l in e){if(V3(l))continue;const c=e[l];let u;s&&jn(s,u=fl(l))?!i||!i.includes(u)?t[u]=c:(a||(a={}))[u]=c:h9(n.emitsOptions,l)||(!(l in r)||c!==r[l])&&(r[l]=c,o=!0)}if(i){const l=gn(t),c=a||fr;for(let u=0;u<i.length;u++){const d=i[u];t[d]=yP(s,l,d,c[d],n,!jn(c,d))}}return o}function yP(n,e,t,r,s,i){const o=n[t];if(o!=null){const a=jn(o,"default");if(a&&r===void 0){const l=o.default;if(o.type!==Function&&!o.skipFactory&&Wt(l)){const{propsDefaults:c}=s;if(t in c)r=c[t];else{const u=i4(s);r=c[t]=l.call(null,e),u()}}else r=l;s.ce&&s.ce._setProp(t,r)}o[0]&&(i&&!a?r=!1:o[1]&&(r===""||r===Bh(t))&&(r=!0))}return r}const uLe=new WeakMap;function qne(n,e,t=!1){const r=__VUE_OPTIONS_API__&&t?uLe:e.propsCache,s=r.get(n);if(s)return s;const i=n.props,o={},a=[];let l=!1;if(__VUE_OPTIONS_API__&&!Wt(n)){const u=d=>{l=!0;const[f,p]=qne(d,e,!0);is(o,f),p&&a.push(...p)};!t&&e.mixins.length&&e.mixins.forEach(u),n.extends&&u(n.extends),n.mixins&&n.mixins.forEach(u)}if(!i&&!l)return wr(n)&&r.set(n,j3),j3;if(Ut(i))for(let u=0;u<i.length;u++){process.env.NODE_ENV!=="production"&&!as(i[u])&&Fe("props must be strings when using array syntax.",i[u]);const d=fl(i[u]);Une(d)&&(o[d]=fr)}else if(i){process.env.NODE_ENV!=="production"&&!wr(i)&&Fe("invalid props options",i);for(const u in i){const d=fl(u);if(Une(d)){const f=i[u],p=o[d]=Ut(f)||Wt(f)?{type:f}:is({},f),m=p.type;let y=!1,w=!0;if(Ut(m))for(let k=0;k<m.length;++k){const x=m[k],S=Wt(x)&&x.name;if(S==="Boolean"){y=!0;break}else S==="String"&&(w=!1)}else y=Wt(m)&&m.name==="Boolean";p[0]=y,p[1]=w,(y||jn(p,"default"))&&a.push(d)}}}const c=[o,a];return wr(n)&&r.set(n,c),c}function Une(n){return n[0]!=="$"&&!V3(n)?!0:(process.env.NODE_ENV!=="production"&&Fe(`Invalid prop name: "${n}" is a reserved property.`),!1)}function dLe(n){return n===null?"null":typeof n=="function"?n.name||"":typeof n=="object"&&n.constructor&&n.constructor.name||""}function Wne(n,e,t){const r=gn(e),s=t.propsOptions[0],i=Object.keys(n).map(o=>fl(o));for(const o in s){let a=s[o];a!=null&&hLe(o,r[o],a,process.env.NODE_ENV!=="production"?xc(r):r,!i.includes(o))}}function hLe(n,e,t,r,s){const{type:i,required:o,validator:a,skipCheck:l}=t;if(o&&s){Fe('Missing required prop: "'+n+'"');return}if(!(e==null&&!o)){if(i!=null&&i!==!0&&!l){let c=!1;const u=Ut(i)?i:[i],d=[];for(let f=0;f<u.length&&!c;f++){const{valid:p,expectedType:m}=pLe(e,u[f]);d.push(m||""),c=p}if(!c){Fe(mLe(n,e,d));return}}a&&!a(e,r)&&Fe('Invalid prop: custom validator check failed for prop "'+n+'".')}}const fLe=Vu("String,Number,Boolean,Function,Symbol,BigInt");function pLe(n,e){let t;const r=dLe(e);if(r==="null")t=n===null;else if(fLe(r)){const s=typeof n;t=s===r.toLowerCase(),!t&&s==="object"&&(t=n instanceof e)}else r==="Object"?t=wr(n):r==="Array"?t=Ut(n):t=n instanceof e;return{valid:t,expectedType:r}}function mLe(n,e,t){if(t.length===0)return`Prop type [] for prop "${n}" won't match anything. Did you mean to use type Array instead?`;let r=`Invalid prop: type check failed for prop "${n}". Expected ${t.map(Uk).join(" | ")}`;const s=t[0],i=RO(e),o=Gne(e,s),a=Gne(e,i);return t.length===1&&Kne(s)&&!gLe(s,i)&&(r+=` with value ${o}`),r+=`, got ${i} `,Kne(i)&&(r+=`with value ${a}.`),r}function Gne(n,e){return e==="String"?`"${n}"`:e==="Number"?`${Number(n)}`:`${n}`}function Kne(n){return["string","number","boolean"].some(t=>n.toLowerCase()===t)}function gLe(...n){return n.some(e=>e.toLowerCase()==="boolean")}const vP=n=>n==="_"||n==="_ctx"||n==="$stable",bP=n=>Ut(n)?n.map(kl):[kl(n)],yLe=(n,e,t)=>{if(e._n)return e;const r=k$e((...s)=>(process.env.NODE_ENV!=="production"&&Ls&&!(t===null&&Yo)&&!(t&&t.root!==Ls.root)&&Fe(`Slot "${n}" invoked outside of the render function: this will not track dependencies used in the slot. Invoke the slot function inside the render function instead.`),bP(e(...s))),t);return r._c=!1,r},Yne=(n,e,t)=>{const r=n._ctx;for(const s in n){if(vP(s))continue;const i=n[s];if(Wt(i))e[s]=yLe(s,i,r);else if(i!=null){process.env.NODE_ENV!=="production"&&Fe(`Non-function value encountered for slot "${s}". Prefer function slots for better performance.`);const o=bP(i);e[s]=()=>o}}},Zne=(n,e)=>{process.env.NODE_ENV!=="production"&&!lP(n.vnode)&&Fe("Non-function value encountered for default slot. Prefer function slots for better performance.");const t=bP(e);n.slots.default=()=>t},wP=(n,e,t)=>{for(const r in e)(t||!vP(r))&&(n[r]=e[r])},vLe=(n,e,t)=>{const r=n.slots=Vne();if(n.vnode.shapeFlag&32){const s=e._;s?(wP(r,e,t),t&&Wk(r,"_",s,!0)):Yne(e,r)}else e&&Zne(n,e)},bLe=(n,e,t)=>{const{vnode:r,slots:s}=n;let i=!0,o=fr;if(r.shapeFlag&32){const a=e._;a?process.env.NODE_ENV!=="production"&&vl?(wP(s,e,t),wc(n,"set","$slots")):t&&a===1?i=!1:wP(s,e,t):(i=!e.$stable,Yne(e,s)),o=e}else e&&(Zne(n,e),o={default:1});if(i)for(const a in s)!vP(a)&&o[a]==null&&delete s[a]};let n4,Uu;function V1(n,e){n.appContext.config.performance&&p9()&&Uu.mark(`vue-${e}-${n.uid}`),(process.env.NODE_ENV!=="production"||__VUE_PROD_DEVTOOLS__)&&b$e(n,e,p9()?Uu.now():Date.now())}function z1(n,e){if(n.appContext.config.performance&&p9()){const t=`vue-${e}-${n.uid}`,r=t+":end",s=`<${a4(n,n.type)}> ${e}`;Uu.mark(r),Uu.measure(s,t,r),Uu.clearMeasures(s),Uu.clearMarks(t),Uu.clearMarks(r)}(process.env.NODE_ENV!=="production"||__VUE_PROD_DEVTOOLS__)&&w$e(n,e,p9()?Uu.now():Date.now())}function p9(){return n4!==void 0||(typeof window<"u"&&window.performance?(n4=!0,Uu=window.performance):n4=!1),n4}function wLe(){const n=[];if(typeof __VUE_OPTIONS_API__!="boolean"&&(process.env.NODE_ENV!=="production"&&n.push("__VUE_OPTIONS_API__"),zh().__VUE_OPTIONS_API__=!0),typeof __VUE_PROD_DEVTOOLS__!="boolean"&&(process.env.NODE_ENV!=="production"&&n.push("__VUE_PROD_DEVTOOLS__"),zh().__VUE_PROD_DEVTOOLS__=!1),typeof __VUE_PROD_HYDRATION_MISMATCH_DETAILS__!="boolean"&&(process.env.NODE_ENV!=="production"&&n.push("__VUE_PROD_HYDRATION_MISMATCH_DETAILS__"),zh().__VUE_PROD_HYDRATION_MISMATCH_DETAILS__=!1),process.env.NODE_ENV!=="production"&&n.length){const e=n.length>1;console.warn(`Feature flag${e?"s":""} ${n.join(", ")} ${e?"are":"is"} not explicitly defined. You are running the esm-bundler build of Vue, which expects these compile-time feature flags to be globally injected via the bundler config in order to get better tree-shaking in the production bundle. + +For more details, see https://link.vuejs.org/feature-flags.`)}}const Zo=ELe;function xLe(n){return kLe(n)}function kLe(n,e){wLe();const t=zh();t.__VUE__=!0,(process.env.NODE_ENV!=="production"||__VUE_PROD_DEVTOOLS__)&&sP(t.__VUE_DEVTOOLS_GLOBAL_HOOK__,t);const{insert:r,remove:s,patchProp:i,createElement:o,createText:a,createComment:l,setText:c,setElementText:u,parentNode:d,nextSibling:f,setScopeId:p=Cs,insertStaticContent:m}=n,y=(j,Y,ce,be=null,xe=null,ne=null,ue=void 0,ye=null,L=process.env.NODE_ENV!=="production"&&vl?!1:!!Y.dynamicChildren)=>{if(j===Y)return;j&&!s4(j,Y)&&(be=We(j),q(j,xe,ne,!0),j=null),Y.patchFlag===-2&&(L=!1,Y.dynamicChildren=null);const{type:V,ref:ie,shapeFlag:he}=Y;switch(V){case r4:w(j,Y,ce,be);break;case wl:k(j,Y,ce,be);break;case g9:j==null?x(Y,ce,be,ue):process.env.NODE_ENV!=="production"&&S(j,Y,ce,ue);break;case fo:re(j,Y,ce,be,xe,ne,ue,ye,L);break;default:he&1?T(j,Y,ce,be,xe,ne,ue,ye,L):he&6?ae(j,Y,ce,be,xe,ne,ue,ye,L):he&64||he&128?V.process(j,Y,ce,be,xe,ne,ue,ye,L,Ie):process.env.NODE_ENV!=="production"&&Fe("Invalid VNode type:",V,`(${typeof V})`)}ie!=null&&xe?Q3(ie,j&&j.ref,ne,Y||j,!Y):ie==null&&j&&j.ref!=null&&Q3(j.ref,null,ne,j,!0)},w=(j,Y,ce,be)=>{if(j==null)r(Y.el=a(Y.children),ce,be);else{const xe=Y.el=j.el;if(Y.children!==j.children)if(process.env.NODE_ENV!=="production"&&vl&&Y.patchFlag===-1&&"__elIndex"in j){const ne=ce.childNodes,ue=a(Y.children),ye=ne[Y.__elIndex=j.__elIndex];r(ue,ce,ye),s(ye)}else c(xe,Y.children)}},k=(j,Y,ce,be)=>{j==null?r(Y.el=l(Y.children||""),ce,be):Y.el=j.el},x=(j,Y,ce,be)=>{[j.el,j.anchor]=m(j.children,Y,ce,be,j.el,j.anchor)},S=(j,Y,ce,be)=>{if(Y.children!==j.children){const xe=f(j.anchor);A(j),[Y.el,Y.anchor]=m(Y.children,ce,xe,be)}else Y.el=j.el,Y.anchor=j.anchor},_=({el:j,anchor:Y},ce,be)=>{let xe;for(;j&&j!==Y;)xe=f(j),r(j,ce,be),j=xe;r(Y,ce,be)},A=({el:j,anchor:Y})=>{let ce;for(;j&&j!==Y;)ce=f(j),s(j),j=ce;s(Y)},T=(j,Y,ce,be,xe,ne,ue,ye,L)=>{if(Y.type==="svg"?ue="svg":Y.type==="math"&&(ue="mathml"),j==null)O(Y,ce,be,xe,ne,ue,ye,L);else{const V=j.el&&j.el._isVueCE?j.el:null;try{V&&V._beginPatch(),D(j,Y,xe,ne,ue,ye,L)}finally{V&&V._endPatch()}}},O=(j,Y,ce,be,xe,ne,ue,ye)=>{let L,V;const{props:ie,shapeFlag:he,transition:z,dirs:B}=j;if(L=j.el=o(j.type,ne,ie&&ie.is,ie),he&8?u(L,j.children):he&16&&R(j.children,L,null,be,xe,xP(j,ne),ue,ye),B&&M0(j,null,be,"created"),I(L,j,j.scopeId,ue,be),ie){for(const we in ie)we!=="value"&&!V3(we)&&i(L,we,null,ie[we],ne,be);"value"in ie&&i(L,"value",null,ie.value,ne),(V=ie.onVnodeBeforeMount)&&Ec(V,be,j)}(process.env.NODE_ENV!=="production"||__VUE_PROD_DEVTOOLS__)&&(Wk(L,"__vnode",j,!0),Wk(L,"__vueParentComponent",be,!0)),B&&M0(j,null,be,"beforeMount");const ee=CLe(xe,z);ee&&z.beforeEnter(L),r(L,Y,ce),((V=ie&&ie.onVnodeMounted)||ee||B)&&Zo(()=>{V&&Ec(V,be,j),ee&&z.enter(L),B&&M0(j,null,be,"mounted")},xe)},I=(j,Y,ce,be,xe)=>{if(ce&&p(j,ce),be)for(let ne=0;ne<be.length;ne++)p(j,be[ne]);if(xe){let ne=xe.subTree;if(process.env.NODE_ENV!=="production"&&ne.patchFlag>0&&ne.patchFlag&2048&&(ne=gP(ne.children)||ne),Y===ne||ere(ne.type)&&(ne.ssContent===Y||ne.ssFallback===Y)){const ue=xe.vnode;I(j,ue,ue.scopeId,ue.slotScopeIds,xe.parent)}}},R=(j,Y,ce,be,xe,ne,ue,ye,L=0)=>{for(let V=L;V<j.length;V++){const ie=j[V]=ye?Gh(j[V]):kl(j[V]);y(null,ie,Y,ce,be,xe,ne,ue,ye)}},D=(j,Y,ce,be,xe,ne,ue)=>{const ye=Y.el=j.el;(process.env.NODE_ENV!=="production"||__VUE_PROD_DEVTOOLS__)&&(ye.__vnode=Y);let{patchFlag:L,dynamicChildren:V,dirs:ie}=Y;L|=j.patchFlag&16;const he=j.props||fr,z=Y.props||fr;let B;if(ce&&P0(ce,!1),(B=z.onVnodeBeforeUpdate)&&Ec(B,ce,Y,j),ie&&M0(Y,j,ce,"beforeUpdate"),ce&&P0(ce,!0),process.env.NODE_ENV!=="production"&&vl&&(L=0,ue=!1,V=null),(he.innerHTML&&z.innerHTML==null||he.textContent&&z.textContent==null)&&u(ye,""),V?(W(j.dynamicChildren,V,ye,ce,be,xP(Y,xe),ne),process.env.NODE_ENV!=="production"&&m9(j,Y)):ue||J(j,Y,ye,null,ce,be,xP(Y,xe),ne,!1),L>0){if(L&16)H(ye,he,z,ce,xe);else if(L&2&&he.class!==z.class&&i(ye,"class",null,z.class,xe),L&4&&i(ye,"style",he.style,z.style,xe),L&8){const ee=Y.dynamicProps;for(let we=0;we<ee.length;we++){const Ee=ee[we],rt=he[Ee],en=z[Ee];(en!==rt||Ee==="value")&&i(ye,Ee,rt,en,xe,ce)}}L&1&&j.children!==Y.children&&u(ye,Y.children)}else!ue&&V==null&&H(ye,he,z,ce,xe);((B=z.onVnodeUpdated)||ie)&&Zo(()=>{B&&Ec(B,ce,Y,j),ie&&M0(Y,j,ce,"updated")},be)},W=(j,Y,ce,be,xe,ne,ue)=>{for(let ye=0;ye<Y.length;ye++){const L=j[ye],V=Y[ye],ie=L.el&&(L.type===fo||!s4(L,V)||L.shapeFlag&198)?d(L.el):ce;y(L,V,ie,null,be,xe,ne,ue,!0)}},H=(j,Y,ce,be,xe)=>{if(Y!==ce){if(Y!==fr)for(const ne in Y)!V3(ne)&&!(ne in ce)&&i(j,ne,Y[ne],null,xe,be);for(const ne in ce){if(V3(ne))continue;const ue=ce[ne],ye=Y[ne];ue!==ye&&ne!=="value"&&i(j,ne,ye,ue,xe,be)}"value"in ce&&i(j,"value",Y.value,ce.value,xe)}},re=(j,Y,ce,be,xe,ne,ue,ye,L)=>{const V=Y.el=j?j.el:a(""),ie=Y.anchor=j?j.anchor:a("");let{patchFlag:he,dynamicChildren:z,slotScopeIds:B}=Y;process.env.NODE_ENV!=="production"&&(vl||he&2048)&&(he=0,L=!1,z=null),B&&(ye=ye?ye.concat(B):B),j==null?(r(V,ce,be),r(ie,ce,be),R(Y.children||[],ce,ie,xe,ne,ue,ye,L)):he>0&&he&64&&z&&j.dynamicChildren&&j.dynamicChildren.length===z.length?(W(j.dynamicChildren,z,ce,xe,ne,ue,ye),process.env.NODE_ENV!=="production"?m9(j,Y):(Y.key!=null||xe&&Y===xe.subTree)&&m9(j,Y,!0)):J(j,Y,ce,ie,xe,ne,ue,ye,L)},ae=(j,Y,ce,be,xe,ne,ue,ye,L)=>{Y.slotScopeIds=ye,j==null?Y.shapeFlag&512?xe.ctx.activate(Y,ce,be,ue,L):de(Y,ce,be,xe,ne,ue,L):le(j,Y,L)},de=(j,Y,ce,be,xe,ne,ue)=>{const ye=j.component=ILe(j,be,xe);if(process.env.NODE_ENV!=="production"&&ye.type.__hmrId&&u$e(ye),process.env.NODE_ENV!=="production"&&(e9(j),V1(ye,"mount")),lP(j)&&(ye.ctx.renderer=Ie),process.env.NODE_ENV!=="production"&&V1(ye,"init"),RLe(ye,!1,ue),process.env.NODE_ENV!=="production"&&z1(ye,"init"),process.env.NODE_ENV!=="production"&&vl&&(j.el=null),ye.asyncDep){if(xe&&xe.registerDep(ye,X,ue),!j.el){const L=ye.subTree=xl(wl);k(null,L,Y,ce),j.placeholder=L.el}}else X(ye,j,Y,ce,xe,ne,ue);process.env.NODE_ENV!=="production"&&(t9(),z1(ye,"mount"))},le=(j,Y,ce)=>{const be=Y.component=j.component;if(iLe(j,Y,ce))if(be.asyncDep&&!be.asyncResolved){process.env.NODE_ENV!=="production"&&e9(Y),se(be,Y,ce),process.env.NODE_ENV!=="production"&&t9();return}else be.next=Y,be.update();else Y.el=j.el,be.vnode=Y},X=(j,Y,ce,be,xe,ne,ue)=>{const ye=()=>{if(j.isMounted){let{next:he,bu:z,u:B,parent:ee,vnode:we}=j;{const tr=Xne(j);if(tr){he&&(he.el=we.el,se(j,he,ue)),tr.asyncDep.then(()=>{j.isUnmounted||ye()});return}}let Ee=he,rt;process.env.NODE_ENV!=="production"&&e9(he||j.vnode),P0(j,!1),he?(he.el=we.el,se(j,he,ue)):he=we,z&&z3(z),(rt=he.props&&he.props.onVnodeBeforeUpdate)&&Ec(rt,ee,he,we),P0(j,!0),process.env.NODE_ENV!=="production"&&V1(j,"render");const en=$ne(j);process.env.NODE_ENV!=="production"&&z1(j,"render");const An=j.subTree;j.subTree=en,process.env.NODE_ENV!=="production"&&V1(j,"patch"),y(An,en,d(An.el),We(An),j,xe,ne),process.env.NODE_ENV!=="production"&&z1(j,"patch"),he.el=en.el,Ee===null&&oLe(j,en.el),B&&Zo(B,xe),(rt=he.props&&he.props.onVnodeUpdated)&&Zo(()=>Ec(rt,ee,he,we),xe),(process.env.NODE_ENV!=="production"||__VUE_PROD_DEVTOOLS__)&&yne(j),process.env.NODE_ENV!=="production"&&t9()}else{let he;const{el:z,props:B}=Y,{bm:ee,m:we,parent:Ee,root:rt,type:en}=j,An=e4(Y);P0(j,!1),ee&&z3(ee),!An&&(he=B&&B.onVnodeBeforeMount)&&Ec(he,Ee,Y),P0(j,!0);{rt.ce&&rt.ce._def.shadowRoot!==!1&&rt.ce._injectChildStyle(en),process.env.NODE_ENV!=="production"&&V1(j,"render");const tr=j.subTree=$ne(j);process.env.NODE_ENV!=="production"&&z1(j,"render"),process.env.NODE_ENV!=="production"&&V1(j,"patch"),y(null,tr,ce,be,j,xe,ne),process.env.NODE_ENV!=="production"&&z1(j,"patch"),Y.el=tr.el}if(we&&Zo(we,xe),!An&&(he=B&&B.onVnodeMounted)){const tr=Y;Zo(()=>Ec(he,Ee,tr),xe)}(Y.shapeFlag&256||Ee&&e4(Ee.vnode)&&Ee.vnode.shapeFlag&256)&&j.a&&Zo(j.a,xe),j.isMounted=!0,(process.env.NODE_ENV!=="production"||__VUE_PROD_DEVTOOLS__)&&g$e(j),Y=ce=be=null}};j.scope.on();const L=j.effect=new Vte(ye);j.scope.off();const V=j.update=L.run.bind(L),ie=j.job=L.runIfDirty.bind(L);ie.i=j,ie.id=j.uid,L.scheduler=()=>r9(ie),P0(j,!0),process.env.NODE_ENV!=="production"&&(L.onTrack=j.rtc?he=>z3(j.rtc,he):void 0,L.onTrigger=j.rtg?he=>z3(j.rtg,he):void 0),V()},se=(j,Y,ce)=>{Y.component=j;const be=j.vnode.props;j.vnode=Y,j.next=null,cLe(j,Y.props,be,ce),bLe(j,Y.children,ce),gl(),hne(j),yl()},J=(j,Y,ce,be,xe,ne,ue,ye,L=!1)=>{const V=j&&j.children,ie=j?j.shapeFlag:0,he=Y.children,{patchFlag:z,shapeFlag:B}=Y;if(z>0){if(z&128){ve(V,he,ce,be,xe,ne,ue,ye,L);return}else if(z&256){$(V,he,ce,be,xe,ne,ue,ye,L);return}}B&8?(ie&16&&it(V,xe,ne),he!==V&&u(ce,he)):ie&16?B&16?ve(V,he,ce,be,xe,ne,ue,ye,L):it(V,xe,ne,!0):(ie&8&&u(ce,""),B&16&&R(he,ce,be,xe,ne,ue,ye,L))},$=(j,Y,ce,be,xe,ne,ue,ye,L)=>{j=j||j3,Y=Y||j3;const V=j.length,ie=Y.length,he=Math.min(V,ie);let z;for(z=0;z<he;z++){const B=Y[z]=L?Gh(Y[z]):kl(Y[z]);y(j[z],B,ce,null,xe,ne,ue,ye,L)}V>ie?it(j,xe,ne,!0,!1,he):R(Y,ce,be,xe,ne,ue,ye,L,he)},ve=(j,Y,ce,be,xe,ne,ue,ye,L)=>{let V=0;const ie=Y.length;let he=j.length-1,z=ie-1;for(;V<=he&&V<=z;){const B=j[V],ee=Y[V]=L?Gh(Y[V]):kl(Y[V]);if(s4(B,ee))y(B,ee,ce,null,xe,ne,ue,ye,L);else break;V++}for(;V<=he&&V<=z;){const B=j[he],ee=Y[z]=L?Gh(Y[z]):kl(Y[z]);if(s4(B,ee))y(B,ee,ce,null,xe,ne,ue,ye,L);else break;he--,z--}if(V>he){if(V<=z){const B=z+1,ee=B<ie?Y[B].el:be;for(;V<=z;)y(null,Y[V]=L?Gh(Y[V]):kl(Y[V]),ce,ee,xe,ne,ue,ye,L),V++}}else if(V>z)for(;V<=he;)q(j[V],xe,ne,!0),V++;else{const B=V,ee=V,we=new Map;for(V=ee;V<=z;V++){const on=Y[V]=L?Gh(Y[V]):kl(Y[V]);on.key!=null&&(process.env.NODE_ENV!=="production"&&we.has(on.key)&&Fe("Duplicate keys found during update:",JSON.stringify(on.key),"Make sure keys are unique."),we.set(on.key,V))}let Ee,rt=0;const en=z-ee+1;let An=!1,tr=0;const $r=new Array(en);for(V=0;V<en;V++)$r[V]=0;for(V=B;V<=he;V++){const on=j[V];if(rt>=en){q(on,xe,ne,!0);continue}let pr;if(on.key!=null)pr=we.get(on.key);else for(Ee=ee;Ee<=z;Ee++)if($r[Ee-ee]===0&&s4(on,Y[Ee])){pr=Ee;break}pr===void 0?q(on,xe,ne,!0):($r[pr-ee]=V+1,pr>=tr?tr=pr:An=!0,y(on,Y[pr],ce,null,xe,ne,ue,ye,L),rt++)}const Er=An?SLe($r):j3;for(Ee=Er.length-1,V=en-1;V>=0;V--){const on=ee+V,pr=Y[on],Lr=Y[on+1],ca=on+1<ie?Lr.el||Qne(Lr):be;$r[V]===0?y(null,pr,ce,ca,xe,ne,ue,ye,L):An&&(Ee<0||V!==Er[Ee]?Pe(pr,ce,ca,2):Ee--)}}},Pe=(j,Y,ce,be,xe=null)=>{const{el:ne,type:ue,transition:ye,children:L,shapeFlag:V}=j;if(V&6){Pe(j.component.subTree,Y,ce,be);return}if(V&128){j.suspense.move(Y,ce,be);return}if(V&64){ue.move(j,Y,ce,Ie);return}if(ue===fo){r(ne,Y,ce);for(let he=0;he<L.length;he++)Pe(L[he],Y,ce,be);r(j.anchor,Y,ce);return}if(ue===g9){_(j,Y,ce);return}if(be!==2&&V&1&&ye)if(be===0)ye.beforeEnter(ne),r(ne,Y,ce),Zo(()=>ye.enter(ne),xe);else{const{leave:he,delayLeave:z,afterLeave:B}=ye,ee=()=>{j.ctx.isUnmounted?s(ne):r(ne,Y,ce)},we=()=>{ne._isLeaving&&ne[N$e](!0),he(ne,()=>{ee(),B&&B()})};z?z(ne,ee,we):we()}else r(ne,Y,ce)},q=(j,Y,ce,be=!1,xe=!1)=>{const{type:ne,props:ue,ref:ye,children:L,dynamicChildren:V,shapeFlag:ie,patchFlag:he,dirs:z,cacheIndex:B}=j;if(he===-2&&(xe=!1),ye!=null&&(gl(),Q3(ye,null,ce,j,!0),yl()),B!=null&&(Y.renderCache[B]=void 0),ie&256){Y.ctx.deactivate(j);return}const ee=ie&1&&z,we=!e4(j);let Ee;if(we&&(Ee=ue&&ue.onVnodeBeforeUnmount)&&Ec(Ee,Y,j),ie&6)Ye(j.component,ce,be);else{if(ie&128){j.suspense.unmount(ce,be);return}ee&&M0(j,null,Y,"beforeUnmount"),ie&64?j.type.remove(j,Y,ce,Ie,be):V&&!V.hasOnce&&(ne!==fo||he>0&&he&64)?it(V,Y,ce,!1,!0):(ne===fo&&he&384||!xe&&ie&16)&&it(L,Y,ce),be&&Xe(j)}(we&&(Ee=ue&&ue.onVnodeUnmounted)||ee)&&Zo(()=>{Ee&&Ec(Ee,Y,j),ee&&M0(j,null,Y,"unmounted")},ce)},Xe=j=>{const{type:Y,el:ce,anchor:be,transition:xe}=j;if(Y===fo){process.env.NODE_ENV!=="production"&&j.patchFlag>0&&j.patchFlag&2048&&xe&&!xe.persisted?j.children.forEach(ue=>{ue.type===wl?s(ue.el):Xe(ue)}):qe(ce,be);return}if(Y===g9){A(j);return}const ne=()=>{s(ce),xe&&!xe.persisted&&xe.afterLeave&&xe.afterLeave()};if(j.shapeFlag&1&&xe&&!xe.persisted){const{leave:ue,delayLeave:ye}=xe,L=()=>ue(ce,ne);ye?ye(j.el,ne,L):L()}else ne()},qe=(j,Y)=>{let ce;for(;j!==Y;)ce=f(j),s(j),j=ce;s(Y)},Ye=(j,Y,ce)=>{process.env.NODE_ENV!=="production"&&j.type.__hmrId&&d$e(j);const{bum:be,scope:xe,job:ne,subTree:ue,um:ye,m:L,a:V}=j;Jne(L),Jne(V),be&&z3(be),xe.stop(),ne&&(ne.flags|=8,q(ue,j,Y,ce)),ye&&Zo(ye,Y),Zo(()=>{j.isUnmounted=!0},Y),(process.env.NODE_ENV!=="production"||__VUE_PROD_DEVTOOLS__)&&v$e(j)},it=(j,Y,ce,be=!1,xe=!1,ne=0)=>{for(let ue=ne;ue<j.length;ue++)q(j[ue],Y,ce,be,xe)},We=j=>{if(j.shapeFlag&6)return We(j.component.subTree);if(j.shapeFlag&128)return j.suspense.next();const Y=f(j.anchor||j.el),ce=Y&&Y[T$e];return ce?f(ce):Y};let ot=!1;const ge=(j,Y,ce)=>{let be;j==null?Y._vnode&&(q(Y._vnode,null,null,!0),be=Y._vnode.component):y(Y._vnode||null,j,Y,null,null,null,ce),Y._vnode=j,ot||(ot=!0,hne(be),fne(),ot=!1)},Ie={p:y,um:q,m:Pe,r:Xe,mt:de,mc:R,pc:J,pbc:W,n:We,o:n};return{render:ge,hydrate:void 0,createApp:Q$e(ge)}}function xP({type:n,props:e},t){return t==="svg"&&n==="foreignObject"||t==="mathml"&&n==="annotation-xml"&&e&&e.encoding&&e.encoding.includes("html")?void 0:t}function P0({effect:n,job:e},t){t?(n.flags|=32,e.flags|=4):(n.flags&=-33,e.flags&=-5)}function CLe(n,e){return(!n||n&&!n.pendingBranch)&&e&&!e.persisted}function m9(n,e,t=!1){const r=n.children,s=e.children;if(Ut(r)&&Ut(s))for(let i=0;i<r.length;i++){const o=r[i];let a=s[i];a.shapeFlag&1&&!a.dynamicChildren&&((a.patchFlag<=0||a.patchFlag===32)&&(a=s[i]=Gh(s[i]),a.el=o.el),!t&&a.patchFlag!==-2&&m9(o,a)),a.type===r4&&(a.patchFlag!==-1?a.el=o.el:a.__elIndex=i+(n.type===fo?1:0)),a.type===wl&&!a.el&&(a.el=o.el),process.env.NODE_ENV!=="production"&&a.el&&(a.el.__vnode=a)}}function SLe(n){const e=n.slice(),t=[0];let r,s,i,o,a;const l=n.length;for(r=0;r<l;r++){const c=n[r];if(c!==0){if(s=t[t.length-1],n[s]<c){e[r]=s,t.push(r);continue}for(i=0,o=t.length-1;i<o;)a=i+o>>1,n[t[a]]<c?i=a+1:o=a;c<n[t[i]]&&(i>0&&(e[r]=t[i-1]),t[i]=r)}}for(i=t.length,o=t[i-1];i-- >0;)t[i]=o,o=e[o];return t}function Xne(n){const e=n.subTree.component;if(e)return e.asyncDep&&!e.asyncResolved?e:Xne(e)}function Jne(n){if(n)for(let e=0;e<n.length;e++)n[e].flags|=8}function Qne(n){if(n.placeholder)return n.placeholder;const e=n.component;return e?Qne(e.subTree):null}const ere=n=>n.__isSuspense;function ELe(n,e){e&&e.pendingBranch?Ut(n)?e.effects.push(...n):e.effects.push(n):dne(n)}const fo=Symbol.for("v-fgt"),r4=Symbol.for("v-txt"),wl=Symbol.for("v-cmt"),g9=Symbol.for("v-stc");function ZHe(n,e=!1){}function H1(n){return n?n.__v_isVNode===!0:!1}function s4(n,e){if(process.env.NODE_ENV!=="production"&&e.shapeFlag&6&&n.component){const t=s9.get(e.type);if(t&&t.has(n.component))return n.shapeFlag&=-257,e.shapeFlag&=-513,!1}return n.type===e.type&&n.key===e.key}const _Le=(...n)=>nre(...n),tre=({key:n})=>n??null,y9=({ref:n,ref_key:e,ref_for:t})=>(typeof n=="number"&&(n=""+n),n!=null?as(n)||Ss(n)||Wt(n)?{i:Yo,r:n,k:e,f:!!t}:n:null);function TLe(n,e=null,t=null,r=0,s=null,i=n===fo?0:1,o=!1,a=!1){const l={__v_isVNode:!0,__v_skip:!0,type:n,props:e,key:e&&tre(e),ref:e&&y9(e),scopeId:bne,slotScopeIds:null,children:t,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:Yo};return a?(kP(l,t),i&128&&n.normalize(l)):t&&(l.shapeFlag|=as(t)?8:16),process.env.NODE_ENV!=="production"&&l.key!==l.key&&Fe("VNode created with invalid key (NaN). VNode type:",l.type),l}const xl=process.env.NODE_ENV!=="production"?_Le:nre;function nre(n,e=null,t=null,r=0,s=null,i=!1){if((!n||n===z$e)&&(process.env.NODE_ENV!=="production"&&!n&&Fe(`Invalid vnode type when creating vnode: ${n}.`),n=wl),H1(n)){const a=Wh(n,e,!0);return t&&kP(a,t),a.patchFlag=-2,a}if(dre(n)&&(n=n.__vccOpts),e){e=ALe(e);let{class:a,style:l}=e;a&&!as(a)&&(e.class=FO(a)),wr(l)&&(Xk(l)&&!Ut(l)&&(l=is({},l)),e.style=LO(l))}const o=as(n)?1:ere(n)?128:A$e(n)?64:wr(n)?4:Wt(n)?2:0;return process.env.NODE_ENV!=="production"&&o&4&&Xk(n)&&(n=gn(n),Fe("Vue received a Component that was made a reactive object. This can lead to unnecessary performance overhead and should be avoided by marking the component with `markRaw` or using `shallowRef` instead of `ref`.",` +Component that was made reactive: `,n)),TLe(n,e,t,r,s,o,i,!0)}function ALe(n){return n?Xk(n)||zne(n)?is({},n):n:null}function Wh(n,e,t=!1,r=!1){const{props:s,ref:i,patchFlag:o,children:a,transition:l}=n,c=e?MLe(s||{},e):s,u={__v_isVNode:!0,__v_skip:!0,type:n.type,props:c,key:c&&tre(c),ref:e&&e.ref?t&&i?Ut(i)?i.concat(y9(e)):[i,y9(e)]:y9(e):i,scopeId:n.scopeId,slotScopeIds:n.slotScopeIds,children:process.env.NODE_ENV!=="production"&&o===-1&&Ut(a)?a.map(rre):a,target:n.target,targetStart:n.targetStart,targetAnchor:n.targetAnchor,staticCount:n.staticCount,shapeFlag:n.shapeFlag,patchFlag:e&&n.type!==fo?o===-1?16:o|16:o,dynamicProps:n.dynamicProps,dynamicChildren:n.dynamicChildren,appContext:n.appContext,dirs:n.dirs,transition:l,component:n.component,suspense:n.suspense,ssContent:n.ssContent&&Wh(n.ssContent),ssFallback:n.ssFallback&&Wh(n.ssFallback),placeholder:n.placeholder,el:n.el,anchor:n.anchor,ctx:n.ctx,ce:n.ce};return l&&r&&aP(u,l.clone(u)),u}function rre(n){const e=Wh(n);return Ut(n.children)&&(e.children=n.children.map(rre)),e}function NLe(n=" ",e=0){return xl(r4,null,n,e)}function kl(n){return n==null||typeof n=="boolean"?xl(wl):Ut(n)?xl(fo,null,n.slice()):H1(n)?Gh(n):xl(r4,null,String(n))}function Gh(n){return n.el===null&&n.patchFlag!==-1||n.memo?n:Wh(n)}function kP(n,e){let t=0;const{shapeFlag:r}=n;if(e==null)e=null;else if(Ut(e))t=16;else if(typeof e=="object")if(r&65){const s=e.default;s&&(s._c&&(s._d=!1),kP(n,s()),s._c&&(s._d=!0));return}else{t=32;const s=e._;!s&&!zne(e)?e._ctx=Yo:s===3&&Yo&&(Yo.slots._===1?e._=1:(e._=2,n.patchFlag|=1024))}else Wt(e)?(e={default:e,_ctx:Yo},t=32):(e=String(e),r&64?(t=16,e=[NLe(e)]):t=8);n.children=e,n.shapeFlag|=t}function MLe(...n){const e={};for(let t=0;t<n.length;t++){const r=n[t];for(const s in r)if(s==="class")e.class!==r.class&&(e.class=FO([e.class,r.class]));else if(s==="style")e.style=LO([e.style,r.style]);else if(B3(s)){const i=e[s],o=r[s];o&&i!==o&&!(Ut(i)&&i.includes(o))&&(e[s]=i?[].concat(i,o):o)}else s!==""&&(e[s]=r[s])}return e}function Ec(n,e,t,r=null){Cc(n,e,7,[t,r])}const OLe=Dne();let PLe=0;function ILe(n,e,t){const r=n.type,s=(e?e.appContext:n.appContext)||OLe,i={uid:PLe++,vnode:n,type:r,parent:e,appContext:s,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new _Re(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:e?e.provides:Object.create(s.provides),ids:e?e.ids:["",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:qne(r,s),emitsOptions:Rne(r,s),emit:null,emitted:null,propsDefaults:fr,inheritAttrs:r.inheritAttrs,ctx:fr,data:fr,props:fr,attrs:fr,slots:fr,refs:fr,setupState:fr,setupContext:null,suspense:t,suspenseId:t?t.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return process.env.NODE_ENV!=="production"?i.ctx=H$e(i):i.ctx={_:i},i.root=e?e.root:i,i.emit=tLe.bind(null,i),n.ce&&n.ce(i),i}let Ls=null;const sre=()=>Ls||Yo;let v9,CP;{const n=zh(),e=(t,r)=>{let s;return(s=n[t])||(s=n[t]=[]),s.push(r),i=>{s.length>1?s.forEach(o=>o(i)):s[0](i)}};v9=e("__VUE_INSTANCE_SETTERS__",t=>Ls=t),CP=e("__VUE_SSR_SETTERS__",t=>o4=t)}const i4=n=>{const e=Ls;return v9(n),n.scope.on(),()=>{n.scope.off(),v9(e)}},ire=()=>{Ls&&Ls.scope.off(),v9(null)},DLe=Vu("slot,component");function SP(n,{isNativeTag:e}){(DLe(n)||e(n))&&Fe("Do not use built-in or reserved HTML elements as component id: "+n)}function ore(n){return n.vnode.shapeFlag&4}let o4=!1;function RLe(n,e=!1,t=!1){e&&CP(e);const{props:r,children:s}=n.vnode,i=ore(n);aLe(n,r,i,e),vLe(n,s,t||e);const o=i?$Le(n,e):void 0;return e&&CP(!1),o}function $Le(n,e){const t=n.type;if(process.env.NODE_ENV!=="production"){if(t.name&&SP(t.name,n.appContext.config),t.components){const s=Object.keys(t.components);for(let i=0;i<s.length;i++)SP(s[i],n.appContext.config)}if(t.directives){const s=Object.keys(t.directives);for(let i=0;i<s.length;i++)wne(s[i])}t.compilerOptions&&LLe()&&Fe('"compilerOptions" is only supported when using a build of Vue that includes the runtime compiler. Since you are using a runtime-only build, the options should be passed via your build tool config instead.')}n.accessCache=Object.create(null),n.proxy=new Proxy(n.ctx,Tne),process.env.NODE_ENV!=="production"&&q$e(n);const{setup:r}=t;if(r){gl();const s=n.setupContext=r.length>1?jLe(n):null,i=i4(n),o=$1(r,n,0,[process.env.NODE_ENV!=="production"?xc(n.props):n.props,s]),a=DO(o);if(yl(),i(),(a||n.sp)&&!e4(n)&&Cne(n),a){if(o.then(ire,ire),e)return o.then(l=>{are(n,l,e)}).catch(l=>{Y3(l,n,0)});if(n.asyncDep=o,process.env.NODE_ENV!=="production"&&!n.suspense){const l=a4(n,t);Fe(`Component <${l}>: setup function returned a promise, but no <Suspense> boundary was found in the parent component tree. A component with async setup() must be nested in a <Suspense> in order to be rendered.`)}}else are(n,o,e)}else lre(n,e)}function are(n,e,t){Wt(e)?n.type.__ssrInlineRender?n.ssrRender=e:n.render=e:wr(e)?(process.env.NODE_ENV!=="production"&&H1(e)&&Fe("setup() should not return VNodes directly - return a render function instead."),(process.env.NODE_ENV!=="production"||__VUE_PROD_DEVTOOLS__)&&(n.devtoolsRawSetupState=e),n.setupState=ane(e),process.env.NODE_ENV!=="production"&&U$e(n)):process.env.NODE_ENV!=="production"&&e!==void 0&&Fe(`setup() should return an object. Received: ${e===null?"null":typeof e}`),lre(n,t)}const LLe=()=>!0;function lre(n,e,t){const r=n.type;if(n.render||(n.render=r.render||Cs),__VUE_OPTIONS_API__){const s=i4(n);gl();try{G$e(n)}finally{yl(),s()}}process.env.NODE_ENV!=="production"&&!r.render&&n.render===Cs&&!e&&(r.template?Fe('Component provided template option but runtime compilation is not supported in this build of Vue. Configure your bundler to alias "vue" to "vue/dist/vue.esm-bundler.js".'):Fe("Component is missing template or render function: ",r))}const cre=process.env.NODE_ENV!=="production"?{get(n,e){return f9(),$s(n,"get",""),n[e]},set(){return Fe("setupContext.attrs is readonly."),!1},deleteProperty(){return Fe("setupContext.attrs is readonly."),!1}}:{get(n,e){return $s(n,"get",""),n[e]}};function FLe(n){return new Proxy(n.slots,{get(e,t){return $s(n,"get","$slots"),e[t]}})}function jLe(n){const e=t=>{if(process.env.NODE_ENV!=="production"&&(n.exposed&&Fe("expose() should be called only once per setup()."),t!=null)){let r=typeof t;r==="object"&&(Ut(t)?r="array":Ss(t)&&(r="ref")),r!=="object"&&Fe(`expose() should be passed a plain object, received ${r}.`)}n.exposed=t||{}};if(process.env.NODE_ENV!=="production"){let t,r;return Object.freeze({get attrs(){return t||(t=new Proxy(n.attrs,cre))},get slots(){return r||(r=FLe(n))},get emit(){return(s,...i)=>n.emit(s,...i)},expose:e})}else return{attrs:new Proxy(n.attrs,cre),slots:n.slots,emit:n.emit,expose:e}}function EP(n){return n.exposed?n.exposeProxy||(n.exposeProxy=new Proxy(ane(GRe(n.exposed)),{get(e,t){if(t in e)return e[t];if(t in O0)return O0[t](n)},has(e,t){return t in e||t in O0}})):n.proxy}const BLe=/(?:^|[-_])\w/g,VLe=n=>n.replace(BLe,e=>e.toUpperCase()).replace(/[-_]/g,"");function ure(n,e=!0){return Wt(n)?n.displayName||n.name:n.name||e&&n.__name}function a4(n,e,t=!1){let r=ure(e);if(!r&&e.__file){const s=e.__file.match(/([^/\\]+)\.\w+$/);s&&(r=s[1])}if(!r&&n){const s=i=>{for(const o in i)if(i[o]===e)return o};r=s(n.components)||n.parent&&s(n.parent.type.components)||s(n.appContext.components)}return r?VLe(r):t?"App":"Anonymous"}function dre(n){return Wt(n)&&"__vccOpts"in n}const _P=(n,e)=>{const t=QRe(n,e,o4);if(process.env.NODE_ENV!=="production"){const r=sre();r&&r.appContext.config.warnRecursiveComputed&&(t._warnRecursive=!0)}return t};function rn(n,e,t){try{const r=arguments.length;return r===2?wr(e)&&!Ut(e)?H1(e)?xl(n,null,[e]):xl(n,e):xl(n,null,e):(r>3?t=Array.prototype.slice.call(arguments,2):r===3&&H1(t)&&(t=[t]),xl(n,e,t))}finally{}}function zLe(){if(process.env.NODE_ENV==="production"||typeof window>"u")return;const n={style:"color:#3ba776"},e={style:"color:#1677ff"},t={style:"color:#f5222d"},r={style:"color:#eb2f96"},s={__vue_custom_formatter:!0,header(d){if(!wr(d))return null;if(d.__isVue)return["div",n,"VueInstance"];if(Ss(d)){gl();const f=d.value;return yl(),["div",{},["span",n,u(d)],"<",a(f),">"]}else{if(_0(d))return["div",{},["span",n,ho(d)?"ShallowReactive":"Reactive"],"<",a(d),`>${kc(d)?" (readonly)":""}`];if(kc(d))return["div",{},["span",n,ho(d)?"ShallowReadonly":"Readonly"],"<",a(d),">"]}return null},hasBody(d){return d&&d.__isVue},body(d){if(d&&d.__isVue)return["div",{},...i(d.$)]}};function i(d){const f=[];d.type.props&&d.props&&f.push(o("props",gn(d.props))),d.setupState!==fr&&f.push(o("setup",d.setupState)),d.data!==fr&&f.push(o("data",gn(d.data)));const p=l(d,"computed");p&&f.push(o("computed",p));const m=l(d,"inject");return m&&f.push(o("injected",m)),f.push(["div",{},["span",{style:r.style+";opacity:0.66"},"$ (internal): "],["object",{object:d}]]),f}function o(d,f){return f=is({},f),Object.keys(f).length?["div",{style:"line-height:1.25em;margin-bottom:0.6em"},["div",{style:"color:#476582"},d],["div",{style:"padding-left:1.25em"},...Object.keys(f).map(p=>["div",{},["span",r,p+": "],a(f[p],!1)])]]:["span",{}]}function a(d,f=!0){return typeof d=="number"?["span",e,d]:typeof d=="string"?["span",t,JSON.stringify(d)]:typeof d=="boolean"?["span",r,d]:wr(d)?["object",{object:f?gn(d):d}]:["span",t,String(d)]}function l(d,f){const p=d.type;if(Wt(p))return;const m={};for(const y in d.ctx)c(p,y,f)&&(m[y]=d.ctx[y]);return m}function c(d,f,p){const m=d[p];if(Ut(m)&&m.includes(f)||wr(m)&&f in m||d.extends&&c(d.extends,f,p)||d.mixins&&d.mixins.some(y=>c(y,f,p)))return!0}function u(d){return ho(d)?"ShallowRef":d.effect?"ComputedRef":"Ref"}window.devtoolsFormatters?window.devtoolsFormatters.push(s):window.devtoolsFormatters=[s]}const hre="3.5.27",Wu=process.env.NODE_ENV!=="production"?Fe:Cs;process.env.NODE_ENV,process.env.NODE_ENV;/** +* @vue/runtime-dom v3.5.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let TP;const fre=typeof window<"u"&&window.trustedTypes;if(fre)try{TP=fre.createPolicy("vue",{createHTML:n=>n})}catch(n){process.env.NODE_ENV!=="production"&&Wu(`Error creating trusted types policy: ${n}`)}const pre=TP?n=>TP.createHTML(n):n=>n,HLe="http://www.w3.org/2000/svg",qLe="http://www.w3.org/1998/Math/MathML",Gu=typeof document<"u"?document:null,mre=Gu&&Gu.createElement("template"),ULe={insert:(n,e,t)=>{e.insertBefore(n,t||null)},remove:n=>{const e=n.parentNode;e&&e.removeChild(n)},createElement:(n,e,t,r)=>{const s=e==="svg"?Gu.createElementNS(HLe,n):e==="mathml"?Gu.createElementNS(qLe,n):t?Gu.createElement(n,{is:t}):Gu.createElement(n);return n==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:n=>Gu.createTextNode(n),createComment:n=>Gu.createComment(n),setText:(n,e)=>{n.nodeValue=e},setElementText:(n,e)=>{n.textContent=e},parentNode:n=>n.parentNode,nextSibling:n=>n.nextSibling,querySelector:n=>Gu.querySelector(n),setScopeId(n,e){n.setAttribute(e,"")},insertStaticContent(n,e,t,r,s,i){const o=t?t.previousSibling:e.lastChild;if(s&&(s===i||s.nextSibling))for(;e.insertBefore(s.cloneNode(!0),t),!(s===i||!(s=s.nextSibling)););else{mre.innerHTML=pre(r==="svg"?`<svg>${n}</svg>`:r==="mathml"?`<math>${n}</math>`:n);const a=mre.content;if(r==="svg"||r==="mathml"){const l=a.firstChild;for(;l.firstChild;)a.appendChild(l.firstChild);a.removeChild(l)}e.insertBefore(a,t)}return[o?o.nextSibling:e.firstChild,t?t.previousSibling:e.lastChild]}},WLe=Symbol("_vtc");function GLe(n,e,t){const r=n[WLe];r&&(e=(e?[e,...r]:[...r]).join(" ")),e==null?n.removeAttribute("class"):t?n.setAttribute("class",e):n.className=e}const gre=Symbol("_vod"),KLe=Symbol("_vsh"),YLe=Symbol(process.env.NODE_ENV!=="production"?"CSS_VAR_TEXT":""),ZLe=/(?:^|;)\s*display\s*:/;function XLe(n,e,t){const r=n.style,s=as(t);let i=!1;if(t&&!s){if(e)if(as(e))for(const o of e.split(";")){const a=o.slice(0,o.indexOf(":")).trim();t[a]==null&&b9(r,a,"")}else for(const o in e)t[o]==null&&b9(r,o,"");for(const o in t)o==="display"&&(i=!0),b9(r,o,t[o])}else if(s){if(e!==t){const o=r[YLe];o&&(t+=";"+o),r.cssText=t,i=ZLe.test(t)}}else e&&n.removeAttribute("style");gre in n&&(n[gre]=i?r.display:"",n[KLe]&&(r.display="none"))}const JLe=/[^\\];\s*$/,yre=/\s*!important$/;function b9(n,e,t){if(Ut(t))t.forEach(r=>b9(n,e,r));else if(t==null&&(t=""),process.env.NODE_ENV!=="production"&&JLe.test(t)&&Wu(`Unexpected semicolon at the end of '${e}' style value: '${t}'`),e.startsWith("--"))n.setProperty(e,t);else{const r=QLe(n,e);yre.test(t)?n.setProperty(Bh(r),t.replace(yre,""),"important"):n[r]=t}}const vre=["Webkit","Moz","ms"],AP={};function QLe(n,e){const t=AP[e];if(t)return t;let r=fl(e);if(r!=="filter"&&r in n)return AP[e]=r;r=Uk(r);for(let s=0;s<vre.length;s++){const i=vre[s]+r;if(i in n)return AP[e]=i}return e}const bre="http://www.w3.org/1999/xlink";function wre(n,e,t,r,s,i=ERe(e)){r&&e.startsWith("xlink:")?t==null?n.removeAttributeNS(bre,e.slice(6,e.length)):n.setAttributeNS(bre,e,t):t==null||i&&!Bte(t)?n.removeAttribute(e):n.setAttribute(e,i?"":D1(t)?String(t):t)}function xre(n,e,t,r,s){if(e==="innerHTML"||e==="textContent"){t!=null&&(n[e]=e==="innerHTML"?pre(t):t);return}const i=n.tagName;if(e==="value"&&i!=="PROGRESS"&&!i.includes("-")){const a=i==="OPTION"?n.getAttribute("value")||"":n.value,l=t==null?n.type==="checkbox"?"on":"":String(t);(a!==l||!("_value"in n))&&(n.value=l),t==null&&n.removeAttribute(e),n._value=t;return}let o=!1;if(t===""||t==null){const a=typeof n[e];a==="boolean"?t=Bte(t):t==null&&a==="string"?(t="",o=!0):a==="number"&&(t=0,o=!0)}try{n[e]=t}catch(a){process.env.NODE_ENV!=="production"&&!o&&Wu(`Failed setting prop "${e}" on <${i.toLowerCase()}>: value ${t} is invalid.`,a)}o&&n.removeAttribute(s||e)}function eFe(n,e,t,r){n.addEventListener(e,t,r)}function tFe(n,e,t,r){n.removeEventListener(e,t,r)}const kre=Symbol("_vei");function nFe(n,e,t,r,s=null){const i=n[kre]||(n[kre]={}),o=i[e];if(r&&o)o.value=process.env.NODE_ENV!=="production"?Sre(r,e):r;else{const[a,l]=rFe(e);if(r){const c=i[e]=oFe(process.env.NODE_ENV!=="production"?Sre(r,e):r,s);eFe(n,a,c,l)}else o&&(tFe(n,a,o,l),i[e]=void 0)}}const Cre=/(?:Once|Passive|Capture)$/;function rFe(n){let e;if(Cre.test(n)){e={};let r;for(;r=n.match(Cre);)n=n.slice(0,n.length-r[0].length),e[r[0].toLowerCase()]=!0}return[n[2]===":"?n.slice(3):Bh(n.slice(2)),e]}let NP=0;const sFe=Promise.resolve(),iFe=()=>NP||(sFe.then(()=>NP=0),NP=Date.now());function oFe(n,e){const t=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=t.attached)return;Cc(aFe(r,t.value),e,5,[r])};return t.value=n,t.attached=iFe(),t}function Sre(n,e){return Wt(n)||Ut(n)?n:(Wu(`Wrong type passed as event handler to ${e} - did you forget @ or : in front of your prop? +Expected function or array of functions, received type ${typeof n}.`),Cs)}function aFe(n,e){if(Ut(e)){const t=n.stopImmediatePropagation;return n.stopImmediatePropagation=()=>{t.call(n),n._stopped=!0},e.map(r=>s=>!s._stopped&&r&&r(s))}else return e}const Ere=n=>n.charCodeAt(0)===111&&n.charCodeAt(1)===110&&n.charCodeAt(2)>96&&n.charCodeAt(2)<123,lFe=(n,e,t,r,s,i)=>{const o=s==="svg";e==="class"?GLe(n,r,o):e==="style"?XLe(n,t,r):B3(e)?zk(e)||nFe(n,e,t,r,i):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):cFe(n,e,r,o))?(xre(n,e,r),!n.tagName.includes("-")&&(e==="value"||e==="checked"||e==="selected")&&wre(n,e,r,o,i,e!=="value")):n._isVueCE&&(/[A-Z]/.test(e)||!as(r))?xre(n,fl(e),r,i,e):(e==="true-value"?n._trueValue=r:e==="false-value"&&(n._falseValue=r),wre(n,e,r,o))};function cFe(n,e,t,r){if(r)return!!(e==="innerHTML"||e==="textContent"||e in n&&Ere(e)&&Wt(t));if(e==="spellcheck"||e==="draggable"||e==="translate"||e==="autocorrect"||e==="sandbox"&&n.tagName==="IFRAME"||e==="form"||e==="list"&&n.tagName==="INPUT"||e==="type"&&n.tagName==="TEXTAREA")return!1;if(e==="width"||e==="height"){const s=n.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return Ere(e)&&as(t)?!1:e in n}const uFe=is({patchProp:lFe},ULe);let _re;function dFe(){return _re||(_re=xLe(uFe))}const w9=(...n)=>{const e=dFe().createApp(...n);process.env.NODE_ENV!=="production"&&(fFe(e),pFe(e));const{mount:t}=e;return e.mount=r=>{const s=mFe(r);if(!s)return;const i=e._component;!Wt(i)&&!i.render&&!i.template&&(i.template=s.innerHTML),s.nodeType===1&&(s.textContent="");const o=t(s,!1,hFe(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),o},e};function hFe(n){if(n instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&n instanceof MathMLElement)return"mathml"}function fFe(n){Object.defineProperty(n.config,"isNativeTag",{value:e=>kRe(e)||CRe(e)||SRe(e),writable:!1})}function pFe(n){{const e=n.config.isCustomElement;Object.defineProperty(n.config,"isCustomElement",{get(){return e},set(){Wu("The `isCustomElement` config option is deprecated. Use `compilerOptions.isCustomElement` instead.")}});const t=n.config.compilerOptions,r='The `compilerOptions` config option is only respected when using a build of Vue.js that includes the runtime compiler (aka "full build"). Since you are using the runtime-only build, `compilerOptions` must be passed to `@vue/compiler-dom` in the build setup instead.\n- For vue-loader: pass it via vue-loader\'s `compilerOptions` loader option.\n- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader\n- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-sfc';Object.defineProperty(n.config,"compilerOptions",{get(){return Wu(r),t},set(){Wu(r)}})}}function mFe(n){if(as(n)){const e=document.querySelector(n);return process.env.NODE_ENV!=="production"&&!e&&Wu(`Failed to mount app: mount target selector "${n}" returned null.`),e}return process.env.NODE_ENV!=="production"&&window.ShadowRoot&&n instanceof window.ShadowRoot&&n.mode==="closed"&&Wu('mounting on a ShadowRoot with `{mode: "closed"}` may lead to unpredictable bugs'),n}/** +* vue v3.5.27 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function gFe(){zLe()}process.env.NODE_ENV!=="production"&&gFe();function yFe(n){const e=Zr({},`${n}_SLASH_SPEC`),t=Li(s=>{const i=s.get(e.key);return new ks({key:new rs(`${n}_SLASH`),...i})}),r=[e,t];return r.key=e.key,r.pluginKey=t.key,e.meta={package:"@milkdown/plugin-slash",displayName:`Ctx<slashSpec>|${n}`},t.meta={package:"@milkdown/plugin-slash",displayName:`Prose<slash>|${n}`},r}class vFe{constructor(e){N(this,j8);N(this,Nv);N(this,Kw);N(this,Yw);N(this,Zw);N(this,Xw);N(this,Hm);N(this,Jw);N(this,Mv);N(this,Qw);N(this,e6);M(this,Nv,!1),this.onShow=()=>{},this.onHide=()=>{},M(this,e6,(t,r)=>{const{state:s,composing:i}=t,{selection:o,doc:a}=s,{ranges:l}=o,c=Math.min(...l.map(p=>p.$from.pos)),u=Math.max(...l.map(p=>p.$to.pos)),d=r&&r.doc.eq(a)&&r.selection.eq(o);if(h(this,Nv)||((h(this,Zw)??t.dom.parentElement??document.body).appendChild(this.element),M(this,Nv,!0)),i||d)return;if(!h(this,Jw).call(this,t,r)){this.hide();return}r2({getBoundingClientRect:()=>nJ(t,c,u)},this.element,{placement:"bottom-start",middleware:[n2(),h5(h(this,Qw)),...h(this,Kw)],...h(this,Yw)}).then(({x:p,y:m})=>{Object.assign(this.element.style,{left:`${p}px`,top:`${m}px`})}).catch(console.error),this.show()}),this.update=(t,r)=>{h(this,Mv).call(this,t,r)},this.getContent=(t,r=s=>s.type.name==="paragraph")=>{const{selection:s}=t.state,{empty:i,$from:o}=s,a=t.state.selection instanceof It;if(typeof document>"u")return;const l=this.element.contains(document.activeElement),c=!t.hasFocus()&&!l,u=!t.editable,f=!RAe(r)(t.state.selection);if(!(c||u||!i||!a||f))return o.parent.textBetween(Math.max(0,o.parentOffset-500),o.parentOffset,void 0,"")},this.destroy=()=>{h(this,Mv).cancel()},this.show=()=>{this.element.dataset.show="true",this.onShow()},this.hide=()=>{this.element.dataset.show="false",this.onHide()},this.element=e.content,M(this,Xw,e.debounce??200),M(this,Jw,e.shouldShow??v(this,j8,Mfe)),M(this,Hm,e.trigger??"/"),M(this,Qw,e.offset),M(this,Kw,e.middleware??[]),M(this,Yw,e.floatingUIOptions??{}),M(this,Zw,e.root),M(this,Mv,cM(h(this,e6),h(this,Xw)))}}Nv=new WeakMap,Kw=new WeakMap,Yw=new WeakMap,Zw=new WeakMap,Xw=new WeakMap,Hm=new WeakMap,Jw=new WeakMap,Mv=new WeakMap,Qw=new WeakMap,e6=new WeakMap,j8=new WeakSet,Mfe=function(e){const t=this.getContent(e);if(!t)return!1;const r=t.at(-1);return r?Array.isArray(h(this,Hm))?h(this,Hm).includes(r):h(this,Hm)===r:!1};function l4({icon:n,class:e,onClick:t}){return rn("span",{class:yp("milkdown-icon",e),onPointerdown:t,innerHTML:n?D6.sanitize(n.trim()):void 0})}l4.props={icon:{type:String,required:!1},class:{type:String,required:!1},onClick:{type:Function,required:!1}};var bFe=Object.defineProperty,Tre=Object.getOwnPropertySymbols,wFe=Object.prototype.hasOwnProperty,xFe=Object.prototype.propertyIsEnumerable,Are=(n,e,t)=>e in n?bFe(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,kFe=(n,e)=>{for(var t in e||(e={}))wFe.call(e,t)&&Are(n,t,e[t]);if(Tre)for(var t of Tre(e))xFe.call(e,t)&&Are(n,t,e[t]);return n};function c4(n,e){return Object.assign(n,{meta:kFe({package:"@milkdown/components"},e)}),n}const Nre=Zr({imageIcon:"🌌",captionIcon:"💬",uploadButton:"Upload file",confirmButton:"Confirm ⏎",uploadPlaceholderText:"or paste the image link ...",captionPlaceholderText:"Image caption",onUpload:n=>Promise.resolve(URL.createObjectURL(n))},"imageBlockConfigCtx");c4(Nre,{displayName:"Config<image-block>",group:"ImageBlock"});function CFe(n){return n0(n,"paragraph",(e,t,r)=>{var s,i;if(((s=e.children)==null?void 0:s.length)!==1)return;const o=(i=e.children)==null?void 0:i[0];if(!o||o.type!=="image")return;const{url:a,alt:l,title:c}=o,u={type:"image-block",url:a,alt:l,title:c};r.children.splice(t,1,u)})}const Mre=Dh("remark-image-block",()=>()=>CFe);c4(Mre.plugin,{displayName:"Remark<remarkImageBlock>",group:"ImageBlock"}),c4(Mre.options,{displayName:"RemarkConfig<remarkImageBlock>",group:"ImageBlock"});var SFe=Object.defineProperty,Ore=Object.getOwnPropertySymbols,EFe=Object.prototype.hasOwnProperty,_Fe=Object.prototype.propertyIsEnumerable,Pre=(n,e,t)=>e in n?SFe(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,TFe=(n,e)=>{for(var t in e||(e={}))EFe.call(e,t)&&Pre(n,t,e[t]);if(Ore)for(var t of Ore(e))_Fe.call(e,t)&&Pre(n,t,e[t]);return n};const MP="image-block",OP=ss("image-block",()=>({inline:!1,group:"block",selectable:!0,draggable:!0,isolating:!0,marks:"",atom:!0,priority:100,attrs:{src:{default:"",validate:"string"},caption:{default:"",validate:"string"},ratio:{default:1,validate:"number"}},parseDOM:[{tag:`img[data-type="${MP}"]`,getAttrs:n=>{var e;if(!(n instanceof HTMLElement))throw ll(n);return{src:n.getAttribute("src")||"",caption:n.getAttribute("caption")||"",ratio:Number((e=n.getAttribute("ratio"))!=null?e:1)}}}],toDOM:n=>["img",TFe({"data-type":MP},n.attrs)],parseMarkdown:{match:({type:n})=>n==="image-block",runner:(n,e,t)=>{const r=e.url,s=e.title;let i=Number(e.alt||1);(Number.isNaN(i)||i===0)&&(i=1),n.addNode(t,{src:r,caption:s,ratio:i})}},toMarkdown:{match:n=>n.type.name==="image-block",runner:(n,e)=>{n.openNode("paragraph"),n.addNode("image",void 0,void 0,{title:e.attrs.caption,url:e.attrs.src,alt:`${Number.parseFloat(e.attrs.ratio).toFixed(2)}`}),n.closeNode()}}}));c4(OP.node,{displayName:"NodeSchema<image-block>",group:"ImageBlock"});function u4({icon:n,class:e,onClick:t}){return rn("span",{class:yp("milkdown-icon",e),onPointerdown:t,innerHTML:n?D6.sanitize(n.trim()):void 0})}u4.props={icon:{type:String,required:!1},class:{type:String,required:!1},onClick:{type:Function,required:!1}};const AFe=DQ("abcdefg",8),NFe=j1({props:{src:{type:Object,required:!0},selected:{type:Object,required:!0},readonly:{type:Object,required:!0},setLink:{type:Function,required:!0},imageIcon:{type:String,required:!1},uploadButton:{type:String,required:!1},confirmButton:{type:String,required:!1},uploadPlaceholderText:{type:String,required:!1},onUpload:{type:Function,required:!0}},setup({readonly:n,src:e,setLink:t,onUpload:r,imageIcon:s,uploadButton:i,confirmButton:o,uploadPlaceholderText:a,className:l}){var c,u;const d=ls(!1),f=ls(),p=ls((c=e.value)!=null?c:""),m=ls(AFe()),y=ls(((u=e.value)==null?void 0:u.length)!==0),w=_=>{const T=_.target.value;y.value=T.length!==0,p.value=T},k=_=>{var A,T;_.key==="Enter"&&t((T=(A=f.value)==null?void 0:A.value)!=null?T:"")},x=()=>{var _,A;t((A=(_=f.value)==null?void 0:_.value)!=null?A:"")},S=_=>{var A;const T=(A=_.target.files)==null?void 0:A[0];T&&r(T).then(O=>{O&&(t(O),y.value=!0)}).catch(O=>{console.error("An error occurred while uploading image"),console.error(O)})};return()=>rn("div",{class:yp("image-edit",l)},rn(u4,{icon:s,class:"image-icon"}),rn("div",{class:yp("link-importer",d.value&&"focus")},rn("input",{ref:f,draggable:"true",onDragstart:_=>{_.preventDefault(),_.stopPropagation()},disabled:n.value,class:"link-input-area",value:p.value,onInput:w,onKeydown:k,onFocus:()=>d.value=!0,onBlur:()=>d.value=!1}),!y.value&&rn("div",{class:"placeholder"},rn("input",{disabled:n.value,class:"hidden",id:m.value,type:"file",accept:"image/*",onChange:S}),rn("label",{class:"uploader",for:m.value},rn(u4,{icon:i})),rn("span",{class:"text",onClick:()=>{var _;return(_=f.value)==null?void 0:_.focus()}},a))),p.value&&rn("div",{class:"confirm",onClick:()=>x()},rn(u4,{icon:o})))}}),MFe=j1({props:{src:{type:Object,required:!0},caption:{type:Object,required:!0},ratio:{type:Object,required:!0},selected:{type:Object,required:!0},readonly:{type:Object,required:!0},setAttr:{type:Function,required:!0},config:{type:Object,required:!0}},setup({src:n,caption:e,ratio:t,readonly:r,setAttr:s,config:i}){var o;const a=ls(),l=ls(),c=ls(!!((o=e.value)!=null&&o.length)),u=ls(0),d=()=>{var x;const S=a.value;if(!S)return;const _=S.closest(".milkdown-image-block");if(!_)return;const A=_.getBoundingClientRect().width;if(!A)return;const T=S.height,O=S.width,I=O<A?T:A*(T/O),R=(I*((x=t.value)!=null?x:1)).toFixed(2);S.dataset.origin=I.toFixed(2),S.dataset.height=R,S.style.height=`${R}px`},f=x=>{x.preventDefault(),x.stopPropagation(),!r.value&&(c.value=!c.value)},p=x=>{const _=x.target.value;u.value&&window.clearTimeout(u.value),u.value=window.setTimeout(()=>{s("caption",_)},1e3)},m=x=>{const _=x.target.value;u.value&&(window.clearTimeout(u.value),u.value=0),s("caption",_)},y=x=>{x.preventDefault();const S=a.value;if(!S)return;const _=S.getBoundingClientRect().top,A=x.clientY-_,T=Number(A<100?100:A).toFixed(2);S.dataset.height=T,S.style.height=`${T}px`},w=()=>{window.removeEventListener("pointermove",y),window.removeEventListener("pointerup",w);const x=a.value;if(!x)return;const S=Number(x.dataset.origin),_=Number(x.dataset.height),A=Number.parseFloat(Number(_/S).toFixed(2));Number.isNaN(A)||s("ratio",A)},k=x=>{r.value||(x.preventDefault(),x.stopPropagation(),window.addEventListener("pointermove",y),window.addEventListener("pointerup",w))};return()=>rn(fo,null,rn("div",{class:"image-wrapper"},rn("div",{class:"operation"},rn("div",{class:"operation-item",onPointerdown:f},rn(u4,{icon:i.captionIcon}))),rn("img",{ref:a,"data-type":MP,onLoad:d,src:n.value,alt:e.value}),rn("div",{ref:l,class:"image-resize-handle",onPointerdown:k})),c.value&&rn("input",{draggable:"true",onDragstart:x=>{x.preventDefault(),x.stopPropagation()},class:"caption-input",placeholder:i==null?void 0:i.captionPlaceholderText,onInput:p,onBlur:m,value:e.value}))}});var OFe=Object.defineProperty,Ire=Object.getOwnPropertySymbols,PFe=Object.prototype.hasOwnProperty,IFe=Object.prototype.propertyIsEnumerable,Dre=(n,e,t)=>e in n?OFe(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,DFe=(n,e)=>{for(var t in e||(e={}))PFe.call(e,t)&&Dre(n,t,e[t]);if(Ire)for(var t of Ire(e))IFe.call(e,t)&&Dre(n,t,e[t]);return n};const RFe=j1({props:{src:{type:Object,required:!0},caption:{type:Object,required:!0},ratio:{type:Object,required:!0},selected:{type:Object,required:!0},readonly:{type:Object,required:!0},setAttr:{type:Function,required:!0},config:{type:Object,required:!0}},setup(n){const{src:e}=n;return()=>{var t;return(t=e.value)!=null&&t.length?rn(MFe,DFe({},n)):rn(NFe,{src:n.src,selected:n.selected,readonly:n.readonly,setLink:r=>n.setAttr("src",r),imageIcon:n.config.imageIcon,uploadButton:n.config.uploadButton,confirmButton:n.config.confirmButton,uploadPlaceholderText:n.config.uploadPlaceholderText,onUpload:n.config.onUpload})}}}),$Fe=VMe(OP.node,n=>(e,t,r)=>{const s=ls(e.attrs.src),i=ls(e.attrs.caption),o=ls(e.attrs.ratio),a=ls(!1),l=ls(!t.editable),c=(w,k)=>{if(!t.editable)return;const x=r();x!=null&&t.dispatch(t.state.tr.setNodeAttribute(x,w,w==="src"?D6.sanitize(k):k))},u=n.get(Nre.key),d=w9(RFe,{src:s,caption:i,ratio:o,selected:a,readonly:l,setAttr:c,config:u}),f=document.createElement("div");f.className="milkdown-image-block";const p=xne(()=>{a.value?f.classList.add("selected"):f.classList.remove("selected")}),m=u.proxyDomURL,y=w=>{if(!m)s.value=w.attrs.src;else{const k=m(w.attrs.src);typeof k=="string"?s.value=k:k.then(x=>{s.value=x}).catch(console.error)}o.value=w.attrs.ratio,i.value=w.attrs.caption,l.value=!t.editable};return y(e),d.mount(f),{dom:f,update:w=>w.type!==e.type?!1:(y(w),!0),stopEvent:w=>w.target instanceof HTMLInputElement,selectNode:()=>{a.value=!0},deselectNode:()=>{a.value=!1},destroy:()=>{p(),d.unmount(),f.remove()}}});c4($Fe,{displayName:"NodeView<image-block>",group:"ImageBlock"});function Rre(n){return n.use("FeaturesCtx")}function LFe(n){return e=>{Rre(e).update(t=>t.includes(n)?t:[...t,n])}}var d4=(n=>(n.CodeMirror="code-mirror",n.ListItem="list-item",n.LinkTooltip="link-tooltip",n.Cursor="cursor",n.ImageBlock="image-block",n.BlockEdit="block-edit",n.Toolbar="toolbar",n.Placeholder="placeholder",n.Table="table",n.Latex="latex",n))(d4||{});const FFe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_8070)"> + <path + d="M4 10.5C3.17 10.5 2.5 11.17 2.5 12C2.5 12.83 3.17 13.5 4 13.5C4.83 13.5 5.5 12.83 5.5 12C5.5 11.17 4.83 10.5 4 10.5ZM4 4.5C3.17 4.5 2.5 5.17 2.5 6C2.5 6.83 3.17 7.5 4 7.5C4.83 7.5 5.5 6.83 5.5 6C5.5 5.17 4.83 4.5 4 4.5ZM4 16.5C3.17 16.5 2.5 17.18 2.5 18C2.5 18.82 3.18 19.5 4 19.5C4.82 19.5 5.5 18.82 5.5 18C5.5 17.18 4.83 16.5 4 16.5ZM8 19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17H8C7.45 17 7 17.45 7 18C7 18.55 7.45 19 8 19ZM8 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11H8C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13ZM7 6C7 6.55 7.45 7 8 7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H8C7.45 5 7 5.45 7 6Z" + /> + </g> + <defs> + <clipPath id="clip0_977_8070"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`,jFe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_8081)"> + <path + d="M9.4 16.6L4.8 12L9.4 7.4L8 6L2 12L8 18L9.4 16.6ZM14.6 16.6L19.2 12L14.6 7.4L16 6L22 12L16 18L14.6 16.6Z" + /> + </g> + <defs> + <clipPath id="clip0_977_8081"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`,BFe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_7900)"> + <path + fill-rule="evenodd" + clip-rule="evenodd" + d="M19 13H5C4.45 13 4 12.55 4 12C4 11.45 4.45 11 5 11H19C19.55 11 20 11.45 20 12C20 12.55 19.55 13 19 13Z" + /> + </g> + <defs> + <clipPath id="clip0_977_7900"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`,VFe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_992_5553)"> + <path + d="M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM12 17H14V7H10V9H12V17Z" + /> + </g> + <defs> + <clipPath id="clip0_992_5553"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`,zFe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_992_5559)"> + <path + d="M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15H11V13H13C14.1 13 15 12.11 15 11V9C15 7.89 14.1 7 13 7H9V9H13V11H11C9.9 11 9 11.89 9 13V17H15V15Z" + /> + </g> + <defs> + <clipPath id="clip0_992_5559"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`,HFe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_992_5565)"> + <path + d="M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15V13.5C15 12.67 14.33 12 13.5 12C14.33 12 15 11.33 15 10.5V9C15 7.89 14.1 7 13 7H9V9H13V11H11V13H13V15H9V17H13C14.1 17 15 16.11 15 15Z" + /> + </g> + <defs> + <clipPath id="clip0_992_5565"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`,qFe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_7757)"> + <path + d="M19.04 3H5.04004C3.94004 3 3.04004 3.9 3.04004 5V19C3.04004 20.1 3.94004 21 5.04004 21H19.04C20.14 21 21.04 20.1 21.04 19V5C21.04 3.9 20.14 3 19.04 3ZM19.04 19H5.04004V5H19.04V19ZM13.04 17H15.04V7H13.04V11H11.04V7H9.04004V13H13.04V17Z" + /> + </g> + <defs> + <clipPath id="clip0_977_7757"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`,UFe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_7760)"> + <path + d="M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15V13C15 11.89 14.1 11 13 11H11V9H15V7H9V13H13V15H9V17H13C14.1 17 15 16.11 15 15Z" + /> + </g> + <defs> + <clipPath id="clip0_977_7760"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`,WFe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_7763)"> + <path + d="M11 17H13C14.1 17 15 16.11 15 15V13C15 11.89 14.1 11 13 11H11V9H15V7H11C9.9 7 9 7.89 9 9V15C9 16.11 9.9 17 11 17ZM11 13H13V15H11V13ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19Z" + /> + </g> + <defs> + <clipPath id="clip0_977_7763"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`,GFe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_8075)"> + <path + d="M19 5V19H5V5H19ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM14.14 11.86L11.14 15.73L9 13.14L6 17H18L14.14 11.86Z" + /> + </g> + <defs> + <clipPath id="clip0_977_8075"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`,KFe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_971_7680)"> + <path + d="M11 18C11 19.1 10.1 20 9 20C7.9 20 7 19.1 7 18C7 16.9 7.9 16 9 16C10.1 16 11 16.9 11 18ZM9 10C7.9 10 7 10.9 7 12C7 13.1 7.9 14 9 14C10.1 14 11 13.1 11 12C11 10.9 10.1 10 9 10ZM9 4C7.9 4 7 4.9 7 6C7 7.1 7.9 8 9 8C10.1 8 11 7.1 11 6C11 4.9 10.1 4 9 4ZM15 8C16.1 8 17 7.1 17 6C17 4.9 16.1 4 15 4C13.9 4 13 4.9 13 6C13 7.1 13.9 8 15 8ZM15 10C13.9 10 13 10.9 13 12C13 13.1 13.9 14 15 14C16.1 14 17 13.1 17 12C17 10.9 16.1 10 15 10ZM15 16C13.9 16 13 16.9 13 18C13 19.1 13.9 20 15 20C16.1 20 17 19.1 17 18C17 16.9 16.1 16 15 16Z" + /> + </g> + <defs> + <clipPath id="clip0_971_7680"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`,YFe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_8067)"> + <path + d="M8 7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H8C7.45 5 7 5.45 7 6C7 6.55 7.45 7 8 7ZM20 17H8C7.45 17 7 17.45 7 18C7 18.55 7.45 19 8 19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17ZM20 11H8C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11ZM4.5 16H2.5C2.22 16 2 16.22 2 16.5C2 16.78 2.22 17 2.5 17H4V17.5H3.5C3.22 17.5 3 17.72 3 18C3 18.28 3.22 18.5 3.5 18.5H4V19H2.5C2.22 19 2 19.22 2 19.5C2 19.78 2.22 20 2.5 20H4.5C4.78 20 5 19.78 5 19.5V16.5C5 16.22 4.78 16 4.5 16ZM2.5 5H3V7.5C3 7.78 3.22 8 3.5 8C3.78 8 4 7.78 4 7.5V4.5C4 4.22 3.78 4 3.5 4H2.5C2.22 4 2 4.22 2 4.5C2 4.78 2.22 5 2.5 5ZM4.5 10H2.5C2.22 10 2 10.22 2 10.5C2 10.78 2.22 11 2.5 11H3.8L2.12 12.96C2.04 13.05 2 13.17 2 13.28V13.5C2 13.78 2.22 14 2.5 14H4.5C4.78 14 5 13.78 5 13.5C5 13.22 4.78 13 4.5 13H3.2L4.88 11.04C4.96 10.95 5 10.83 5 10.72V10.5C5 10.22 4.78 10 4.5 10Z" + /> + </g> + <defs> + <clipPath id="clip0_977_8067"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`,ZFe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_971_7676)"> + <path + d="M18 13H13V18C13 18.55 12.55 19 12 19C11.45 19 11 18.55 11 18V13H6C5.45 13 5 12.55 5 12C5 11.45 5.45 11 6 11H11V6C11 5.45 11.45 5 12 5C12.55 5 13 5.45 13 6V11H18C18.55 11 19 11.45 19 12C19 12.55 18.55 13 18 13Z" + /> + </g> + <defs> + <clipPath id="clip0_971_7676"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`,XFe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_7897)"> + <path + d="M7.17 17C7.68 17 8.15 16.71 8.37 16.26L9.79 13.42C9.93 13.14 10 12.84 10 12.53V8C10 7.45 9.55 7 9 7H5C4.45 7 4 7.45 4 8V12C4 12.55 4.45 13 5 13H7L5.97 15.06C5.52 15.95 6.17 17 7.17 17ZM17.17 17C17.68 17 18.15 16.71 18.37 16.26L19.79 13.42C19.93 13.14 20 12.84 20 12.53V8C20 7.45 19.55 7 19 7H15C14.45 7 14 7.45 14 8V12C14 12.55 14.45 13 15 13H17L15.97 15.06C15.52 15.95 16.17 17 17.17 17Z" + /> + </g> + <defs> + <clipPath id="clip0_977_7897"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`,JFe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_8078)"> + <path + d="M20 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H20C21.1 21 22 20.1 22 19V5C22 3.9 21.1 3 20 3ZM20 5V8H5V5H20ZM15 19H10V10H15V19ZM5 10H8V19H5V10ZM17 19V10H20V19H17Z" + /> + </g> + <defs> + <clipPath id="clip0_977_8078"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`,QFe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_992_5547)"> + <path + d="M5 5.5C5 6.33 5.67 7 6.5 7H10.5V17.5C10.5 18.33 11.17 19 12 19C12.83 19 13.5 18.33 13.5 17.5V7H17.5C18.33 7 19 6.33 19 5.5C19 4.67 18.33 4 17.5 4H6.5C5.67 4 5 4.67 5 5.5Z" + /> + </g> + <defs> + <clipPath id="clip0_992_5547"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`,eje=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <path + d="M5.66936 16.3389L9.39244 12.6158C9.54115 12.4671 9.71679 12.3937 9.91936 12.3957C10.1219 12.3976 10.2975 12.4761 10.4463 12.6312C10.5847 12.7823 10.654 12.9585 10.654 13.1599C10.654 13.3613 10.5847 13.5363 10.4463 13.6851L6.32704 17.8197C6.14627 18.0004 5.93538 18.0908 5.69436 18.0908C5.45333 18.0908 5.24243 18.0004 5.06166 17.8197L3.01744 15.7754C2.87899 15.637 2.81136 15.4629 2.81456 15.2533C2.81776 15.0437 2.88859 14.8697 3.02706 14.7312C3.16551 14.5928 3.34008 14.5235 3.55076 14.5235C3.76144 14.5235 3.93494 14.5928 4.07126 14.7312L5.66936 16.3389ZM5.66936 8.72359L9.39244 5.00049C9.54115 4.85177 9.71679 4.77838 9.91936 4.78031C10.1219 4.78223 10.2975 4.86075 10.4463 5.01586C10.5847 5.16691 10.654 5.34314 10.654 5.54454C10.654 5.74592 10.5847 5.92097 10.4463 6.06969L6.32704 10.2043C6.14627 10.3851 5.93538 10.4755 5.69436 10.4755C5.45333 10.4755 5.24243 10.3851 5.06166 10.2043L3.01744 8.16009C2.87899 8.02162 2.81136 7.84759 2.81456 7.63799C2.81776 7.42837 2.88859 7.25433 3.02706 7.11586C3.16551 6.97741 3.34008 6.90819 3.55076 6.90819C3.76144 6.90819 3.93494 6.97741 4.07126 7.11586L5.66936 8.72359ZM13.7597 16.5581C13.5472 16.5581 13.3691 16.4862 13.2253 16.3424C13.0816 16.1986 13.0097 16.0204 13.0097 15.8078C13.0097 15.5952 13.0816 15.4171 13.2253 15.2735C13.3691 15.13 13.5472 15.0582 13.7597 15.0582H20.7597C20.9722 15.0582 21.1503 15.1301 21.2941 15.2739C21.4378 15.4177 21.5097 15.5959 21.5097 15.8085C21.5097 16.0211 21.4378 16.1992 21.2941 16.3427C21.1503 16.4863 20.9722 16.5581 20.7597 16.5581H13.7597ZM13.7597 8.94276C13.5472 8.94276 13.3691 8.87085 13.2253 8.72704C13.0816 8.58324 13.0097 8.40504 13.0097 8.19244C13.0097 7.97985 13.0816 7.80177 13.2253 7.65819C13.3691 7.5146 13.5472 7.44281 13.7597 7.44281H20.7597C20.9722 7.44281 21.1503 7.51471 21.2941 7.65851C21.4378 7.80233 21.5097 7.98053 21.5097 8.19311C21.5097 8.40571 21.4378 8.5838 21.2941 8.72739C21.1503 8.87097 20.9722 8.94276 20.7597 8.94276H13.7597Z" + /> + </svg> +`,tje=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="32" + height="32" + viewBox="0 0 24 24" + > + <path + fill="currentColor" + d="M7 19v-.808L13.096 12L7 5.808V5h10v1.25H9.102L14.727 12l-5.625 5.77H17V19z" + /> + </svg> +`;function nje(n){return n.$from.parent.type.name==="code_block"}function rje(n){var e;const t=(e=n.$from.node(n.$from.depth-1))==null?void 0:e.type;return(t==null?void 0:t.name)==="list_item"}var $re=n=>{throw TypeError(n)},Lre=(n,e,t)=>e.has(n)||$re("Cannot "+t),h4=(n,e,t)=>(Lre(n,e,"read from private field"),t?t.call(n):e.get(n)),Fre=(n,e,t)=>e.has(n)?$re("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,t),sje=(n,e,t,r)=>(Lre(n,e,"write to private field"),e.set(n,t),t),q1,x9;let ije=class{constructor(){Fre(this,q1,[]),this.clear=()=>(sje(this,q1,[]),this),Fre(this,x9,e=>{const t={group:e,addItem:(r,s)=>{const i={...s,key:r};return e.items.push(i),t},clear:()=>(e.items=[],t)};return t}),this.addGroup=(e,t)=>{const s={key:e,label:t,items:[]};return h4(this,q1).push(s),h4(this,x9).call(this,s)},this.getGroup=e=>{const t=h4(this,q1).find(r=>r.key===e);if(!t)throw new Error(`Group with key ${e} not found`);return h4(this,x9).call(this,t)},this.build=()=>h4(this,q1)}};q1=new WeakMap,x9=new WeakMap;function oje(n,e,t){var r,s,i,o,a,l,c,u,d,f,p,m,y,w,k,x,S,_,A,T,O,I,R,D,W,H,re,ae,de,le,X,se,J,$,ve,Pe,q,Xe,qe,Ye,it,We,ot,ge,Ie,pt,j,Y,ce,be,xe,ne,ue,ye,L,V,ie,he,z,B,ee,we,Ee,rt,en,An,tr,$r,Er,on,pr,Lr,ca,So,Hl,lp,ql,Wv,eg,Hr,za,tg,ng,cp,up,dp,Gv,Zi,Ha,rg,te,Ae,Ge,mt,Nn,Yn,vn,an,As,ze,Q,_e,Je,Dn,Hn,_r,zs,Eo,Hd,Kv,Ns,f6,p6,woe,xoe,koe,Coe,Soe,Eoe;const Yv=t&&Rre(t).get(),fHe=Yv==null?void 0:Yv.includes(d4.Latex),pHe=Yv==null?void 0:Yv.includes(d4.ImageBlock),mHe=Yv==null?void 0:Yv.includes(d4.Table),m6=new ije;if((e==null?void 0:e.textGroup)!==null){const ur=m6.addGroup("text",(s=(r=e==null?void 0:e.textGroup)==null?void 0:r.label)!=null?s:"Text");((i=e==null?void 0:e.textGroup)==null?void 0:i.text)!==null&&ur.addItem("text",{label:(l=(a=(o=e==null?void 0:e.textGroup)==null?void 0:o.text)==null?void 0:a.label)!=null?l:"Text",icon:(d=(u=(c=e==null?void 0:e.textGroup)==null?void 0:c.text)==null?void 0:u.icon)!=null?d:QFe,onRun:wt=>{const _t=wt.get(ft),sr=hl.type(wt);_t.call(li.key),_t.call(ju.key,{nodeType:sr})}}),((f=e==null?void 0:e.textGroup)==null?void 0:f.h1)!==null&&ur.addItem("h1",{label:(y=(m=(p=e==null?void 0:e.textGroup)==null?void 0:p.h1)==null?void 0:m.label)!=null?y:"Heading 1",icon:(x=(k=(w=e==null?void 0:e.textGroup)==null?void 0:w.h1)==null?void 0:k.icon)!=null?x:VFe,onRun:wt=>{const _t=wt.get(ft),sr=Uo.type(wt);_t.call(li.key),_t.call(ju.key,{nodeType:sr,attrs:{level:1}})}}),((S=e==null?void 0:e.textGroup)==null?void 0:S.h2)!==null&&ur.addItem("h2",{label:(T=(A=(_=e==null?void 0:e.textGroup)==null?void 0:_.h2)==null?void 0:A.label)!=null?T:"Heading 2",icon:(R=(I=(O=e==null?void 0:e.textGroup)==null?void 0:O.h2)==null?void 0:I.icon)!=null?R:zFe,onRun:wt=>{const _t=wt.get(ft),sr=Uo.type(wt);_t.call(li.key),_t.call(ju.key,{nodeType:sr,attrs:{level:2}})}}),((D=e==null?void 0:e.textGroup)==null?void 0:D.h3)!==null&&ur.addItem("h3",{label:(re=(H=(W=e==null?void 0:e.textGroup)==null?void 0:W.h3)==null?void 0:H.label)!=null?re:"Heading 3",icon:(le=(de=(ae=e==null?void 0:e.textGroup)==null?void 0:ae.h3)==null?void 0:de.icon)!=null?le:HFe,onRun:wt=>{const _t=wt.get(ft),sr=Uo.type(wt);_t.call(li.key),_t.call(ju.key,{nodeType:sr,attrs:{level:3}})}}),((X=e==null?void 0:e.textGroup)==null?void 0:X.h4)!==null&&ur.addItem("h4",{label:($=(J=(se=e==null?void 0:e.textGroup)==null?void 0:se.h4)==null?void 0:J.label)!=null?$:"Heading 4",icon:(q=(Pe=(ve=e==null?void 0:e.textGroup)==null?void 0:ve.h4)==null?void 0:Pe.icon)!=null?q:qFe,onRun:wt=>{const _t=wt.get(ft),sr=Uo.type(wt);_t.call(li.key),_t.call(ju.key,{nodeType:sr,attrs:{level:4}})}}),((Xe=e==null?void 0:e.textGroup)==null?void 0:Xe.h5)!==null&&ur.addItem("h5",{label:(it=(Ye=(qe=e==null?void 0:e.textGroup)==null?void 0:qe.h5)==null?void 0:Ye.label)!=null?it:"Heading 5",icon:(ge=(ot=(We=e==null?void 0:e.textGroup)==null?void 0:We.h5)==null?void 0:ot.icon)!=null?ge:UFe,onRun:wt=>{const _t=wt.get(ft),sr=Uo.type(wt);_t.call(li.key),_t.call(ju.key,{nodeType:sr,attrs:{level:5}})}}),((Ie=e==null?void 0:e.textGroup)==null?void 0:Ie.h6)!==null&&ur.addItem("h6",{label:(Y=(j=(pt=e==null?void 0:e.textGroup)==null?void 0:pt.h6)==null?void 0:j.label)!=null?Y:"Heading 6",icon:(xe=(be=(ce=e==null?void 0:e.textGroup)==null?void 0:ce.h6)==null?void 0:be.icon)!=null?xe:WFe,onRun:wt=>{const _t=wt.get(ft),sr=Uo.type(wt);_t.call(li.key),_t.call(ju.key,{nodeType:sr,attrs:{level:6}})}}),((ne=e==null?void 0:e.textGroup)==null?void 0:ne.quote)!==null&&ur.addItem("quote",{label:(L=(ye=(ue=e==null?void 0:e.textGroup)==null?void 0:ue.quote)==null?void 0:ye.label)!=null?L:"Quote",icon:(he=(ie=(V=e==null?void 0:e.textGroup)==null?void 0:V.quote)==null?void 0:ie.icon)!=null?he:XFe,onRun:wt=>{const _t=wt.get(ft),sr=S1.type(wt);_t.call(li.key),_t.call(M3.key,{nodeType:sr})}}),((z=e==null?void 0:e.textGroup)==null?void 0:z.divider)!==null&&ur.addItem("divider",{label:(we=(ee=(B=e==null?void 0:e.textGroup)==null?void 0:B.divider)==null?void 0:ee.label)!=null?we:"Divider",icon:(en=(rt=(Ee=e==null?void 0:e.textGroup)==null?void 0:Ee.divider)==null?void 0:rt.icon)!=null?en:BFe,onRun:wt=>{const _t=wt.get(ft),sr=_1.type(wt);_t.call(li.key),_t.call(O3.key,{nodeType:sr})}})}if((e==null?void 0:e.listGroup)!==null){const ur=m6.addGroup("list",(tr=(An=e==null?void 0:e.listGroup)==null?void 0:An.label)!=null?tr:"List");(($r=e==null?void 0:e.listGroup)==null?void 0:$r.bulletList)!==null&&ur.addItem("bullet-list",{label:(pr=(on=(Er=e==null?void 0:e.listGroup)==null?void 0:Er.bulletList)==null?void 0:on.label)!=null?pr:"Bullet List",icon:(So=(ca=(Lr=e==null?void 0:e.listGroup)==null?void 0:Lr.bulletList)==null?void 0:ca.icon)!=null?So:FFe,onRun:wt=>{const _t=wt.get(ft),sr=b0.type(wt);_t.call(li.key),_t.call(M3.key,{nodeType:sr})}}),((Hl=e==null?void 0:e.listGroup)==null?void 0:Hl.orderedList)!==null&&ur.addItem("ordered-list",{label:(Wv=(ql=(lp=e==null?void 0:e.listGroup)==null?void 0:lp.orderedList)==null?void 0:ql.label)!=null?Wv:"Ordered List",icon:(za=(Hr=(eg=e==null?void 0:e.listGroup)==null?void 0:eg.orderedList)==null?void 0:Hr.icon)!=null?za:YFe,onRun:wt=>{const _t=wt.get(ft),sr=w0.type(wt);_t.call(li.key),_t.call(M3.key,{nodeType:sr})}}),((tg=e==null?void 0:e.listGroup)==null?void 0:tg.taskList)!==null&&ur.addItem("task-list",{label:(up=(cp=(ng=e==null?void 0:e.listGroup)==null?void 0:ng.taskList)==null?void 0:cp.label)!=null?up:"Task List",icon:(Zi=(Gv=(dp=e==null?void 0:e.listGroup)==null?void 0:dp.taskList)==null?void 0:Gv.icon)!=null?Zi:eje,onRun:wt=>{const _t=wt.get(ft),sr=vc.type(wt);_t.call(li.key),_t.call(M3.key,{nodeType:sr,attrs:{checked:!1}})}})}if((e==null?void 0:e.advancedGroup)!==null){const ur=m6.addGroup("advanced",(rg=(Ha=e==null?void 0:e.advancedGroup)==null?void 0:Ha.label)!=null?rg:"Advanced");((te=e==null?void 0:e.advancedGroup)==null?void 0:te.image)!==null&&pHe&&ur.addItem("image",{label:(mt=(Ge=(Ae=e==null?void 0:e.advancedGroup)==null?void 0:Ae.image)==null?void 0:Ge.label)!=null?mt:"Image",icon:(vn=(Yn=(Nn=e==null?void 0:e.advancedGroup)==null?void 0:Nn.image)==null?void 0:Yn.icon)!=null?vn:GFe,onRun:wt=>{const _t=wt.get(ft),sr=OP.type(wt);_t.call(li.key),_t.call(O3.key,{nodeType:sr})}}),((an=e==null?void 0:e.advancedGroup)==null?void 0:an.codeBlock)!==null&&ur.addItem("code",{label:(Q=(ze=(As=e==null?void 0:e.advancedGroup)==null?void 0:As.codeBlock)==null?void 0:ze.label)!=null?Q:"Code",icon:(Dn=(Je=(_e=e==null?void 0:e.advancedGroup)==null?void 0:_e.codeBlock)==null?void 0:Je.icon)!=null?Dn:jFe,onRun:wt=>{const _t=wt.get(ft),sr=y0.type(wt);_t.call(li.key),_t.call(ju.key,{nodeType:sr})}}),((Hn=e==null?void 0:e.advancedGroup)==null?void 0:Hn.table)!==null&&mHe&&ur.addItem("table",{label:(Eo=(zs=(_r=e==null?void 0:e.advancedGroup)==null?void 0:_r.table)==null?void 0:zs.label)!=null?Eo:"Table",icon:(Ns=(Kv=(Hd=e==null?void 0:e.advancedGroup)==null?void 0:Hd.table)==null?void 0:Kv.icon)!=null?Ns:JFe,onRun:wt=>{const _t=wt.get(ft),sr=wt.get(Ri);_t.call(li.key);const{from:gHe}=sr.state.selection;_t.call(O3.key,{nodeType:vO(wt,3,3)}),_t.call(wee.key,{pos:gHe})}}),((f6=e==null?void 0:e.advancedGroup)==null?void 0:f6.math)!==null&&fHe&&ur.addItem("math",{label:(xoe=(woe=(p6=e==null?void 0:e.advancedGroup)==null?void 0:p6.math)==null?void 0:woe.label)!=null?xoe:"Math",icon:(Soe=(Coe=(koe=e==null?void 0:e.advancedGroup)==null?void 0:koe.math)==null?void 0:Coe.icon)!=null?Soe:tje,onRun:wt=>{const _t=wt.get(ft),sr=y0.type(wt);_t.call(li.key),_t.call(O3.key,{nodeType:sr,attrs:{language:"LaTex"}})}})}(Eoe=e==null?void 0:e.buildMenu)==null||Eoe.call(e,m6);let g6=m6.build();n&&(g6=g6.map(ur=>{const wt=ur.items.filter(_t=>_t.label.toLowerCase().includes(n.toLowerCase()));return{...ur,items:wt}}).filter(ur=>ur.items.length>0));const _oe=g6.flatMap(ur=>ur.items);return _oe.forEach((ur,wt)=>{Object.assign(ur,{index:wt})}),g6.reduce((ur,wt)=>{const _t=ur+wt.items.length;return Object.assign(wt,{range:[ur,_t]}),_t},0),{groups:g6,size:_oe.length}}const aje=j1({props:{ctx:{type:Object,required:!0},show:{type:Object,required:!0},filter:{type:Object,required:!0},hide:{type:Function,required:!0},config:{type:Object,required:!1}},setup({ctx:n,show:e,filter:t,hide:r,config:s}){const i=ls(),o=_P(()=>oje(t.value,s,n)),a=ls(0),l=ls({x:-999,y:-999}),c=y=>{const{x:w,y:k}=y;l.value={x:w,y:k}};l9([o,e],()=>{const{size:y}=o.value;y===0&&e.value?r():a.value>=y&&(a.value=0)});const u=(y,w)=>{const k=a.value,x=typeof y=="function"?y(k):y;w==null||w(x),a.value=x},d=y=>{var w,k;const x=(w=i.value)==null?void 0:w.querySelector(`[data-index="${y}"]`),S=(k=i.value)==null?void 0:k.querySelector(".menu-groups");!x||!S||(S.scrollTop=x.offsetTop-S.offsetTop)},f=y=>{const w=o.value.groups.flatMap(k=>k.items).at(y);w&&n&&w.onRun(n),r()},p=y=>{const{size:w,groups:k}=o.value;if(y.key==="Escape"){y.preventDefault(),r==null||r();return}if(y.key==="ArrowDown")return y.preventDefault(),u(x=>x<w-1?x+1:x,d);if(y.key==="ArrowUp")return y.preventDefault(),u(x=>x<=0?x:x-1,d);if(y.key==="ArrowLeft")return y.preventDefault(),u(x=>{const S=k.find(A=>A.range[0]<=x&&A.range[1]>x);if(!S)return x;const _=k[k.indexOf(S)-1];return _?_.range[1]-1:x},d);if(y.key==="ArrowRight")return y.preventDefault(),u(x=>{const S=k.find(A=>A.range[0]<=x&&A.range[1]>x);if(!S)return x;const _=k[k.indexOf(S)+1];return _?_.range[0]:x},d);y.key==="Enter"&&(y.preventDefault(),f(a.value))},m=y=>w=>{const k=l.value;if(!k)return;const{x,y:S}=w;x===k.x&&S===k.y||u(y)};return xne(()=>{e.value?window.addEventListener("keydown",p,{capture:!0}):window.removeEventListener("keydown",p,{capture:!0})}),cP(()=>{window.removeEventListener("keydown",p,{capture:!0})}),()=>rn("div",{ref:i,onPointerdown:y=>y.preventDefault()},rn("nav",{class:"tab-group"},rn("ul",null,o.value.groups.map(y=>rn("li",{key:y.key,onPointerdown:()=>u(y.range[0],d),class:a.value>=y.range[0]&&a.value<y.range[1]?"selected":""},y.label)))),rn("div",{class:"menu-groups",onPointermove:c},o.value.groups.map(y=>rn("div",{key:y.key,class:"menu-group"},rn("h6",null,y.label),rn("ul",null,y.items.map(w=>rn("li",{key:w.key,"data-index":w.index,class:a.value===w.index?"hover":"",onPointerenter:m(w.index),onPointerdown:()=>{var k,x;(x=(k=i.value)==null?void 0:k.querySelector(`[data-index="${w.index}"]`))==null||x.classList.add("active")},onPointerup:()=>{var k,x;(x=(k=i.value)==null?void 0:k.querySelector(`[data-index="${w.index}"]`))==null||x.classList.remove("active"),f(w.index)}},rn(l4,{icon:w.icon}),rn("span",null,w.label))))))))}});var jre=n=>{throw TypeError(n)},Bre=(n,e,t)=>e.has(n)||jre("Cannot "+t),Cl=(n,e,t)=>(Bre(n,e,"read from private field"),t?t.call(n):e.get(n)),f4=(n,e,t)=>e.has(n)?jre("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,t),I0=(n,e,t,r)=>(Bre(n,e,"write to private field"),e.set(n,t),t),p4,k9,C9,Ku,U1;const Vre=yFe("CREPE_MENU"),PP=Zr({show:()=>{},hide:()=>{}},"menuAPICtx");function lje(n,e){n.set(Vre.key,{view:t=>new cje(n,t,e)})}class cje{constructor(e,t,r){f4(this,p4),f4(this,k9),f4(this,C9),f4(this,Ku),f4(this,U1,null),this.update=u=>{Cl(this,Ku).update(u)},this.show=u=>{I0(this,U1,u),Cl(this,C9).value="",Cl(this,Ku).show()},this.hide=()=>{I0(this,U1,null),Cl(this,Ku).hide()},this.destroy=()=>{Cl(this,Ku).destroy(),Cl(this,k9).unmount(),Cl(this,p4).remove()};const s=document.createElement("div");s.classList.add("milkdown-slash-menu");const i=ls(!1),o=ls("");I0(this,C9,o);const a=this.hide,l=w9(aje,{ctx:e,config:r,show:i,filter:o,hide:a});I0(this,k9,l),l.mount(s),I0(this,p4,s);const c=this;I0(this,Ku,new vFe({content:Cl(this,p4),debounce:20,shouldShow(u){if(nje(u.state.selection)||rje(u.state.selection))return!1;const d=this.getContent(u,p=>["paragraph","heading"].includes(p.type.name));if(d==null||!uje(u.state.selection))return!1;const f=Cl(c,U1);if(o.value=d.startsWith("/")?d.slice(1):d,typeof f=="number"){const p=u.state.doc.nodeSize-2,m=Math.min(f,p);return u.state.doc.resolve(m).node()!==u.state.doc.resolve(u.state.selection.from).node()?(I0(c,U1,null),!1):!0}return!!d.startsWith("/")},offset:10})),Cl(this,Ku).onShow=()=>{i.value=!0},Cl(this,Ku).onHide=()=>{i.value=!1},this.update(t),e.set(PP.key,{show:u=>this.show(u),hide:()=>this.hide()})}}p4=new WeakMap,k9=new WeakMap,C9=new WeakMap,Ku=new WeakMap,U1=new WeakMap;function uje(n){if(!(n instanceof It))return!1;const{$head:e}=n,t=e.parent;return e.parentOffset===t.content.size}const dje=j1({props:{onAdd:{type:Function,required:!0},addIcon:{type:String,required:!0},handleIcon:{type:String,required:!0}},setup(n){const e=ls();return()=>rn(fo,null,rn("div",{ref:e,class:"operation-item",onPointerdown:t=>{var r;t.preventDefault(),t.stopPropagation(),(r=e.value)==null||r.classList.add("active")},onPointerup:t=>{var r;t.preventDefault(),t.stopPropagation(),(r=e.value)==null||r.classList.remove("active"),n.onAdd()}},rn(l4,{icon:n.addIcon})),rn("div",{class:"operation-item"},rn(l4,{icon:n.handleIcon})))}});var zre=n=>{throw TypeError(n)},Hre=(n,e,t)=>e.has(n)||zre("Cannot "+t),D0=(n,e,t)=>(Hre(n,e,"read from private field"),t?t.call(n):e.get(n)),S9=(n,e,t)=>e.has(n)?zre("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,t),E9=(n,e,t,r)=>(Hre(n,e,"write to private field"),e.set(n,t),t),_9,R0,T9,A9;class hje{constructor(e,t){S9(this,_9),S9(this,R0),S9(this,T9),S9(this,A9),this.update=()=>{D0(this,R0).update()},this.destroy=()=>{D0(this,R0).destroy(),D0(this,_9).remove(),D0(this,T9).unmount()},this.onAdd=()=>{const c=D0(this,A9),u=c.get(Ri);u.hasFocus()||u.focus();const{state:d,dispatch:f}=u,p=D0(this,R0).active;if(!p)return;const y=p.$pos.pos+p.node.nodeSize;let w=d.tr.insert(y,hl.type(c).create());w=w.setSelection(It.near(w.doc.resolve(y))),f(w.scrollIntoView()),D0(this,R0).hide(),c.get(PP.key).show(w.selection.from)};var r,s,i;E9(this,A9,e);const o=document.createElement("div");o.classList.add("milkdown-block-handle");const a=w9(dje,{onAdd:this.onAdd,addIcon:(r=t==null?void 0:t.handleAddIcon)!=null?r:ZFe,handleIcon:(s=t==null?void 0:t.handleDragIcon)!=null?s:KFe});a.mount(o),E9(this,T9,a),E9(this,_9,o);const l=(i=t==null?void 0:t.blockHandle)!=null?i:{};E9(this,R0,new oRe({ctx:e,content:o,getOffset:()=>16,getPlacement:({active:c,blockDom:u})=>{if(c.node.type.name==="heading")return"left";let d=0;c.node.descendants(_=>{d+=_.childCount});const f=c.el,p=f.getBoundingClientRect(),m=u.getBoundingClientRect(),y=window.getComputedStyle(f),w=Number.parseInt(y.paddingTop,10)||0,k=Number.parseInt(y.paddingBottom,10)||0,x=p.height-w-k,S=m.height;return d>2||S<x?"left-start":"left"},...l})),this.update()}}_9=new WeakMap,R0=new WeakMap,T9=new WeakMap,A9=new WeakMap;function fje(n,e){n.set(Fk.key,{filterNodes:t=>!fN(s=>["table","blockquote","math_inline"].includes(s.type.name))(t)}),n.set(Vk.key,{view:()=>new hje(n,e)})}const pje=(n,e)=>{n.config(LFe(d4.BlockEdit)).config(t=>fje(t,e)).config(t=>lje(t,e)).use(PP).use(Vk).use(Vre)};class mje{constructor(e){N(this,B8);N(this,t6);N(this,n6);N(this,r6);N(this,Ov);N(this,Pv);N(this,Iv);N(this,su);N(this,s6);N(this,i6);N(this,Dv);N(this,Jf);N(this,Rv);N(this,o6);M(this,Iv,!1),this.onShow=()=>{},this.onHide=()=>{},M(this,Jf,t=>{r2(t,this.element,{placement:h(this,Ov).placement??"top",middleware:[n2(),h5(h(this,s6)),JE(h(this,i6)),...h(this,r6)],...h(this,Ov)}).then(({x:r,y:s})=>{Object.assign(this.element.style,{left:`${r}px`,top:`${s}px`})}).catch(console.error)}),M(this,Rv,t=>h(this,Pv)!==t.dom.parentElement),M(this,o6,(t,r)=>{var p;const{state:s,composing:i}=t,{selection:o,doc:a}=s,{ranges:l}=o,c=Math.min(...l.map(m=>m.$from.pos)),u=Math.max(...l.map(m=>m.$to.pos)),d=r&&r.doc.eq(a)&&r.selection.eq(o);if(h(this,Iv)||((h(this,Pv)??t.dom.parentElement??document.body).appendChild(this.element),M(this,Iv,!0)),i||d)return;if((p=h(this,su))==null||p.call(this),M(this,su,void 0),!h(this,n6).call(this,t,r)){this.hide();return}const f={getBoundingClientRect:()=>nJ(t,c,u),contextElement:t.dom};h(this,Rv).call(this,t)?M(this,su,d5(f,this.element,()=>h(this,Jf).call(this,f))):h(this,Jf).call(this,f),this.show()}),this.update=(t,r)=>{h(this,Dv).call(this,t,r)},this.destroy=()=>{var t;(t=h(this,su))==null||t.call(this),h(this,Dv).cancel()},this.show=(t,r)=>{var s;if(this.element.dataset.show="true",t){(s=h(this,su))==null||s.call(this),M(this,su,void 0);const i={...t,contextElement:r==null?void 0:r.dom};r&&h(this,Rv).call(this,r)?M(this,su,d5(i,this.element,()=>h(this,Jf).call(this,i))):h(this,Jf).call(this,i)}this.onShow()},this.hide=()=>{this.element.dataset.show!=="false"&&(this.element.dataset.show="false",this.onHide())},this.element=e.content,M(this,t6,e.debounce??200),M(this,n6,e.shouldShow??v(this,B8,Ofe)),M(this,s6,e.offset),M(this,i6,e.shift),M(this,r6,e.middleware??[]),M(this,Ov,e.floatingUIOptions??{}),M(this,Pv,e.root),this.element.dataset.show="false",M(this,Dv,ZQ(h(this,o6),h(this,t6)))}}t6=new WeakMap,n6=new WeakMap,r6=new WeakMap,Ov=new WeakMap,Pv=new WeakMap,Iv=new WeakMap,su=new WeakMap,s6=new WeakMap,i6=new WeakMap,Dv=new WeakMap,Jf=new WeakMap,Rv=new WeakMap,o6=new WeakMap,B8=new WeakSet,Ofe=function(e){const{doc:t,selection:r}=e.state,{empty:s,from:i,to:o}=r,a=!t.textBetween(i,o).length&&e.state.selection instanceof It,l=this.element.contains(document.activeElement),c=!e.hasFocus()&&!l,u=!e.editable;return!(c||s||a||u)};function IP(n){const e=Zr({},`${n}_TOOLTIP_SPEC`),t=Li(s=>{const i=s.get(e.key);return new ks({key:new rs(`${n}_TOOLTIP`),...i})}),r=[e,t];return r.key=e.key,r.pluginKey=t.key,e.meta={package:"@milkdown/plugin-tooltip",displayName:`Ctx<tooltipSpec>|${n}`},t.meta={package:"@milkdown/plugin-tooltip",displayName:`Prose<tooltip>|${n}`},r}var gje=Object.defineProperty,qre=Object.getOwnPropertySymbols,yje=Object.prototype.hasOwnProperty,vje=Object.prototype.propertyIsEnumerable,Ure=(n,e,t)=>e in n?gje(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,bje=(n,e)=>{for(var t in e||(e={}))yje.call(e,t)&&Ure(n,t,e[t]);if(qre)for(var t of qre(e))vje.call(e,t)&&Ure(n,t,e[t]);return n};function $0(n,e){return Object.assign(n,{meta:bje({package:"@milkdown/components"},e)}),n}var wje=Object.defineProperty,Wre=Object.getOwnPropertySymbols,xje=Object.prototype.hasOwnProperty,kje=Object.prototype.propertyIsEnumerable,Gre=(n,e,t)=>e in n?wje(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,DP=(n,e)=>{for(var t in e||(e={}))xje.call(e,t)&&Gre(n,t,e[t]);if(Wre)for(var t of Wre(e))kje.call(e,t)&&Gre(n,t,e[t]);return n};const RP=Zr(DP({},{mode:"preview"}),"linkTooltipStateCtx");$0(RP,{displayName:"State<link-tooltip>",group:"LinkTooltip"});const Kre=Zr(DP({},{addLink:()=>{},editLink:()=>{},removeLink:()=>{}}),"linkTooltipAPICtx");$0(RP,{displayName:"API<link-tooltip>",group:"LinkTooltip"}),Zr(DP({},{linkIcon:"🔗",editButton:"✎",removeButton:"⌫",confirmButton:"Confirm ⏎",onCopyLink:()=>{},inputPlaceholder:"Paste link..."}),"linkTooltipConfigCtx"),$0(RP,{displayName:"Config<link-tooltip>",group:"LinkTooltip"});const Cje=zt("ToggleLink",n=>()=>e=>{const{doc:t,selection:r}=e,s=$h.type(n);return t.rangeHasMark(r.from,r.to,s)?(n.get(Kre.key).removeLink(r.from,r.to),!0):(n.get(Kre.key).addLink(r.from,r.to),!0)}),Yre=IP("LINK_PREVIEW");$0(Yre[0],{displayName:"PreviewTooltipSpec<link-tooltip>",group:"LinkTooltip"}),$0(Yre[1],{displayName:"PreviewTooltipPlugin<link-tooltip>",group:"LinkTooltip"});const Zre=IP("LINK_EDIT");$0(Zre[0],{displayName:"EditTooltipSpec<link-tooltip>",group:"LinkTooltip"}),$0(Zre[1],{displayName:"EditTooltipPlugin<link-tooltip>",group:"LinkTooltip"});class po{constructor(e,t,r){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=t,this.end=r}static range(e,t){return t?!e||!e.loc||!t.loc||e.loc.lexer!==t.loc.lexer?null:new po(e.loc.lexer,e.loc.start,t.loc.end):e&&e.loc}}class Xo{constructor(e,t){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=t}range(e,t){return new Xo(t,po.range(this,e))}}let De=class Pfe{constructor(e,t){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var r="KaTeX parse error: "+e,s,i,o=t&&t.loc;if(o&&o.start<=o.end){var a=o.lexer.input;s=o.start,i=o.end,s===a.length?r+=" at end of input: ":r+=" at position "+(s+1)+": ";var l=a.slice(s,i).replace(/[^]/g,"$&̲"),c;s>15?c="…"+a.slice(s-15,s):c=a.slice(0,s);var u;i+15<a.length?u=a.slice(i,i+15)+"…":u=a.slice(i),r+=c+l+u}var d=new Error(r);return d.name="ParseError",d.__proto__=Pfe.prototype,d.position=s,s!=null&&i!=null&&(d.length=i-s),d.rawMessage=e,d}};De.prototype.__proto__=Error.prototype;var Sje=function(e,t){return e===void 0?t:e},Eje=/([A-Z])/g,_je=function(e){return e.replace(Eje,"-$1").toLowerCase()},Tje={"&":"&",">":">","<":"<",'"':""","'":"'"},Aje=/[&><"']/g;function Nje(n){return String(n).replace(Aje,e=>Tje[e])}var Xre=function n(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?n(e.body[0]):e:e.type==="font"?n(e.body):e},Mje=function(e){var t=Xre(e);return t.type==="mathord"||t.type==="textord"||t.type==="atom"},Oje=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},Pje=function(e){var t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?t[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?null:t[1].toLowerCase():"_relative"},er={deflt:Sje,escape:Nje,hyphenate:_je,getBaseElem:Xre,isCharacterBox:Mje,protocolFromUrl:Pje},N9={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format <type>"},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color <color>",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:n=>"#"+n},macros:{type:"object",cli:"-m, --macro <def>",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(n,e)=>(e.push(n),e)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:n=>Math.max(0,n),cli:"--min-rule-thickness <size>",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:n=>Math.max(0,n),cli:"-s, --max-size <n>",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:n=>Math.max(0,n),cli:"-e, --max-expand <n>",cliProcessor:n=>n==="Infinity"?1/0:parseInt(n)},globalGroup:{type:"boolean",cli:!1}};function Ije(n){if(n.default)return n.default;var e=n.type,t=Array.isArray(e)?e[0]:e;if(typeof t!="string")return t.enum[0];switch(t){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}class $P{constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(var t in N9)if(N9.hasOwnProperty(t)){var r=N9[t];this[t]=e[t]!==void 0?r.processor?r.processor(e[t]):e[t]:Ije(r)}}reportNonstrict(e,t,r){var s=this.strict;if(typeof s=="function"&&(s=s(e,t,r)),!(!s||s==="ignore")){if(s===!0||s==="error")throw new De("LaTeX-incompatible input and strict mode is set to 'error': "+(t+" ["+e+"]"),r);s==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(t+" ["+e+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+s+"': "+t+" ["+e+"]"))}}useStrictBehavior(e,t,r){var s=this.strict;if(typeof s=="function")try{s=s(e,t,r)}catch{s="error"}return!s||s==="ignore"?!1:s===!0||s==="error"?!0:s==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(t+" ["+e+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+s+"': "+t+" ["+e+"]")),!1)}isTrusted(e){if(e.url&&!e.protocol){var t=er.protocolFromUrl(e.url);if(t==null)return!1;e.protocol=t}var r=typeof this.trust=="function"?this.trust(e):this.trust;return!!r}}class Kh{constructor(e,t,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=r}sup(){return _c[Dje[this.id]]}sub(){return _c[Rje[this.id]]}fracNum(){return _c[$je[this.id]]}fracDen(){return _c[Lje[this.id]]}cramp(){return _c[Fje[this.id]]}text(){return _c[jje[this.id]]}isTight(){return this.size>=2}}var LP=0,M9=1,W1=2,Yu=3,m4=4,Aa=5,G1=6,Bi=7,_c=[new Kh(LP,0,!1),new Kh(M9,0,!0),new Kh(W1,1,!1),new Kh(Yu,1,!0),new Kh(m4,2,!1),new Kh(Aa,2,!0),new Kh(G1,3,!1),new Kh(Bi,3,!0)],Dje=[m4,Aa,m4,Aa,G1,Bi,G1,Bi],Rje=[Aa,Aa,Aa,Aa,Bi,Bi,Bi,Bi],$je=[W1,Yu,m4,Aa,G1,Bi,G1,Bi],Lje=[Yu,Yu,Aa,Aa,Bi,Bi,Bi,Bi],Fje=[M9,M9,Yu,Yu,Aa,Aa,Bi,Bi],jje=[LP,M9,W1,Yu,W1,Yu,W1,Yu],At={DISPLAY:_c[LP],TEXT:_c[W1],SCRIPT:_c[m4],SCRIPTSCRIPT:_c[G1]},FP=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];function Bje(n){for(var e=0;e<FP.length;e++)for(var t=FP[e],r=0;r<t.blocks.length;r++){var s=t.blocks[r];if(n>=s[0]&&n<=s[1])return t.name}return null}var O9=[];FP.forEach(n=>n.blocks.forEach(e=>O9.push(...e)));function Jre(n){for(var e=0;e<O9.length;e+=2)if(n>=O9[e]&&n<=O9[e+1])return!0;return!1}var K1=80,Vje=function(e,t){return"M95,"+(622+e+t)+` +c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 +c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 +c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 +s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 +c69,-144,104.5,-217.7,106.5,-221 +l`+e/2.075+" -"+e+` +c5.3,-9.3,12,-14,20,-14 +H400000v`+(40+e)+`H845.2724 +s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 +c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z +M`+(834+e)+" "+t+"h400000v"+(40+e)+"h-400000z"},zje=function(e,t){return"M263,"+(601+e+t)+`c0.7,0,18,39.7,52,119 +c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 +c340,-704.7,510.7,-1060.3,512,-1067 +l`+e/2.084+" -"+e+` +c4.7,-7.3,11,-11,19,-11 +H40000v`+(40+e)+`H1012.3 +s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 +c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 +s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 +c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z +M`+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"},Hje=function(e,t){return"M983 "+(10+e+t)+` +l`+e/3.13+" -"+e+` +c4,-6.7,10,-10,18,-10 H400000v`+(40+e)+` +H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 +s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 +c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 +c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 +c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 +c53.7,-170.3,84.5,-266.8,92.5,-289.5z +M`+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"},qje=function(e,t){return"M424,"+(2398+e+t)+` +c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 +c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 +s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 +s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 +l`+e/4.223+" -"+e+`c4,-6.7,10,-10,18,-10 H400000 +v`+(40+e)+`H1014.6 +s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 +c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2z M`+(1001+e)+" "+t+` +h400000v`+(40+e)+"h-400000z"},Uje=function(e,t){return"M473,"+(2713+e+t)+` +c339.3,-1799.3,509.3,-2700,510,-2702 l`+e/5.298+" -"+e+` +c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+e)+`H1017.7 +s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 +c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 +s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, +606zM`+(1001+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"},Wje=function(e){var t=e/2;return"M400000 "+e+" H0 L"+t+" 0 l65 45 L145 "+(e-80)+" H400000z"},Gje=function(e,t,r){var s=r-54-t-e;return"M702 "+(e+t)+"H400000"+(40+e)+` +H742v`+s+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 +h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 +c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 +219 661 l218 661zM702 `+t+"H400000v"+(40+e)+"H742z"},Kje=function(e,t,r){t=1e3*t;var s="";switch(e){case"sqrtMain":s=Vje(t,K1);break;case"sqrtSize1":s=zje(t,K1);break;case"sqrtSize2":s=Hje(t,K1);break;case"sqrtSize3":s=qje(t,K1);break;case"sqrtSize4":s=Uje(t,K1);break;case"sqrtTall":s=Gje(t,K1,r)}return s},Yje=function(e,t){switch(e){case"⎜":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"∣":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"∥":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z"+("M367 0 H410 V"+t+" H367z M367 0 H410 V"+t+" H367z");case"⎟":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"⎢":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"⎥":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"⎪":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"⏐":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"‖":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257z"+("M478 0 H521 V"+t+" H478z M478 0 H521 V"+t+" H478z");default:return""}},Qre={doubleleftarrow:`M262 157 +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z +m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 + l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80 +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 + 435 0h399565z`,leftgroupunder:`M400000 262 +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 + 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z +m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 + 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:`M40 281 V428 H0 V94 H40 V241 H400000 v40z +M40 281 V428 H0 V94 H40 V241 H400000 v40z`,leftmapsto:`M40 281 V448H0V74H40V241H400000v40z +M40 281 V448H0V74H40V241H400000v40z`,leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:`M0 50 h400000 v40H0z m0 194h40000v40H0z +M0 50 h400000 v40H0z m0 194h40000v40H0z`,midbrace:`M200428 334 +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 +c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 + 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 + 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 + 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z +m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:`M399960 241 V94 h40 V428 h-40 V281 H0 v-40z +M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`,rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 +-68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 + -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 + -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 +c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Zje=function(e,t){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+` v1759 h347 v-84 +H403z M403 1759 V0 H319 V1759 v`+t+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+` v1759 H0 v84 H347z +M347 1759 V0 H263 V1759 v`+t+" v1759 h84z";case"vert":return"M145 15 v585 v"+t+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-t+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+t+" v585 h43z";case"doublevert":return"M145 15 v585 v"+t+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-t+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+t+` v585 h43z +M367 15 v585 v`+t+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-t+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+t+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+t+` v1715 h263 v84 H319z +MM319 602 V0 H403 V602 v`+t+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+t+` v1799 H0 v-84 H319z +MM319 602 V0 H403 V602 v`+t+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+` v602 h84z +M403 1759 V0 H319 V1759 v`+t+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+` v602 h84z +M347 1759 V0 h-84 V1759 v`+t+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 +c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, +-36,557 l0,`+(t+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, +949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 +c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, +-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 +l0,-`+(t+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, +-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, +63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 +c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(t+9)+` +c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 +c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 +c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 +c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 +l0,-`+(t+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}};class g4{constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return this.classes.includes(e)}toNode(){for(var e=document.createDocumentFragment(),t=0;t<this.children.length;t++)e.appendChild(this.children[t].toNode());return e}toMarkup(){for(var e="",t=0;t<this.children.length;t++)e+=this.children[t].toMarkup();return e}toText(){var e=t=>t.toText();return this.children.map(e).join("")}}var Tc={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},P9={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},ese={Å:"A",Ð:"D",Þ:"o",å:"a",ð:"d",þ:"o",А:"A",Б:"B",В:"B",Г:"F",Д:"A",Е:"E",Ж:"K",З:"3",И:"N",Й:"N",К:"K",Л:"N",М:"M",Н:"H",О:"O",П:"N",Р:"P",С:"C",Т:"T",У:"y",Ф:"O",Х:"X",Ц:"U",Ч:"h",Ш:"W",Щ:"W",Ъ:"B",Ы:"X",Ь:"B",Э:"3",Ю:"X",Я:"R",а:"a",б:"b",в:"a",г:"r",д:"y",е:"e",ж:"m",з:"e",и:"n",й:"n",к:"n",л:"n",м:"m",н:"n",о:"o",п:"n",р:"p",с:"c",т:"o",у:"y",ф:"b",х:"x",ц:"n",ч:"n",ш:"w",щ:"w",ъ:"a",ы:"m",ь:"a",э:"e",ю:"m",я:"r"};function Xje(n,e){Tc[n]=e}function jP(n,e,t){if(!Tc[e])throw new Error("Font metrics not found for font: "+e+".");var r=n.charCodeAt(0),s=Tc[e][r];if(!s&&n[0]in ese&&(r=ese[n[0]].charCodeAt(0),s=Tc[e][r]),!s&&t==="text"&&Jre(r)&&(s=Tc[e][77]),s)return{depth:s[0],height:s[1],italic:s[2],skew:s[3],width:s[4]}}var BP={};function Jje(n){var e;if(n>=5?e=0:n>=3?e=1:e=2,!BP[e]){var t=BP[e]={cssEmPerMu:P9.quad[e]/18};for(var r in P9)P9.hasOwnProperty(r)&&(t[r]=P9[r][e])}return BP[e]}var Qje=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],tse=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],nse=function(e,t){return t.size<2?e:Qje[e-1][t.size-1]};class Zu{constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||Zu.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=tse[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var t={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);return new Zu(t)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:nse(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:tse[e-1]})}havingBaseStyle(e){e=e||this.style.text();var t=nse(Zu.BASESIZE,e);return this.size===t&&this.textSize===Zu.BASESIZE&&this.style===e?this:this.extend({style:e,size:t})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==Zu.BASESIZE?["sizing","reset-size"+this.size,"size"+Zu.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=Jje(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}Zu.BASESIZE=6;var VP={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},eBe={ex:!0,em:!0,mu:!0},rse=function(e){return typeof e!="string"&&(e=e.unit),e in VP||e in eBe||e==="ex"},Wr=function(e,t){var r;if(e.unit in VP)r=VP[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if(e.unit==="mu")r=t.fontMetrics().cssEmPerMu;else{var s;if(t.style.isTight()?s=t.havingStyle(t.style.text()):s=t,e.unit==="ex")r=s.fontMetrics().xHeight;else if(e.unit==="em")r=s.fontMetrics().quad;else throw new De("Invalid unit: '"+e.unit+"'");s!==t&&(r*=s.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},je=function(e){return+e.toFixed(4)+"em"},Yh=function(e){return e.filter(t=>t).join(" ")},sse=function(e,t,r){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},t){t.style.isTight()&&this.classes.push("mtight");var s=t.getColor();s&&(this.style.color=s)}},ise=function(e){var t=document.createElement(e);t.className=Yh(this.classes);for(var r in this.style)this.style.hasOwnProperty(r)&&(t.style[r]=this.style[r]);for(var s in this.attributes)this.attributes.hasOwnProperty(s)&&t.setAttribute(s,this.attributes[s]);for(var i=0;i<this.children.length;i++)t.appendChild(this.children[i].toNode());return t},tBe=/[\s"'>/=\x00-\x1f]/,ose=function(e){var t="<"+e;this.classes.length&&(t+=' class="'+er.escape(Yh(this.classes))+'"');var r="";for(var s in this.style)this.style.hasOwnProperty(s)&&(r+=er.hyphenate(s)+":"+this.style[s]+";");r&&(t+=' style="'+er.escape(r)+'"');for(var i in this.attributes)if(this.attributes.hasOwnProperty(i)){if(tBe.test(i))throw new De("Invalid attribute name '"+i+"'");t+=" "+i+'="'+er.escape(this.attributes[i])+'"'}t+=">";for(var o=0;o<this.children.length;o++)t+=this.children[o].toMarkup();return t+="</"+e+">",t};class y4{constructor(e,t,r,s){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,sse.call(this,e,r,s),this.children=t||[]}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return this.classes.includes(e)}toNode(){return ise.call(this,"span")}toMarkup(){return ose.call(this,"span")}}class zP{constructor(e,t,r,s){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,sse.call(this,t,s),this.children=r||[],this.setAttribute("href",e)}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return this.classes.includes(e)}toNode(){return ise.call(this,"a")}toMarkup(){return ose.call(this,"a")}}class nBe{constructor(e,t,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=r}hasClass(e){return this.classes.includes(e)}toNode(){var e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(var t in this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e}toMarkup(){var e='<img src="'+er.escape(this.src)+'"'+(' alt="'+er.escape(this.alt)+'"'),t="";for(var r in this.style)this.style.hasOwnProperty(r)&&(t+=er.hyphenate(r)+":"+this.style[r]+";");return t&&(e+=' style="'+er.escape(t)+'"'),e+="'/>",e}}var rBe={î:"ı̂",ï:"ı̈",í:"ı́",ì:"ı̀"};class Na{constructor(e,t,r,s,i,o,a,l){this.text=void 0,this.height=void 0,this.depth=void 0,this.italic=void 0,this.skew=void 0,this.width=void 0,this.maxFontSize=void 0,this.classes=void 0,this.style=void 0,this.text=e,this.height=t||0,this.depth=r||0,this.italic=s||0,this.skew=i||0,this.width=o||0,this.classes=a||[],this.style=l||{},this.maxFontSize=0;var c=Bje(this.text.charCodeAt(0));c&&this.classes.push(c+"_fallback"),/[îïíì]/.test(this.text)&&(this.text=rBe[this.text])}hasClass(e){return this.classes.includes(e)}toNode(){var e=document.createTextNode(this.text),t=null;this.italic>0&&(t=document.createElement("span"),t.style.marginRight=je(this.italic)),this.classes.length>0&&(t=t||document.createElement("span"),t.className=Yh(this.classes));for(var r in this.style)this.style.hasOwnProperty(r)&&(t=t||document.createElement("span"),t.style[r]=this.style[r]);return t?(t.appendChild(e),t):e}toMarkup(){var e=!1,t="<span";this.classes.length&&(e=!0,t+=' class="',t+=er.escape(Yh(this.classes)),t+='"');var r="";this.italic>0&&(r+="margin-right:"+this.italic+"em;");for(var s in this.style)this.style.hasOwnProperty(s)&&(r+=er.hyphenate(s)+":"+this.style[s]+";");r&&(e=!0,t+=' style="'+er.escape(r)+'"');var i=er.escape(this.text);return e?(t+=">",t+=i,t+="</span>",t):i}}class Xu{constructor(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}toNode(){var e="http://www.w3.org/2000/svg",t=document.createElementNS(e,"svg");for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&t.setAttribute(r,this.attributes[r]);for(var s=0;s<this.children.length;s++)t.appendChild(this.children[s].toNode());return t}toMarkup(){var e='<svg xmlns="http://www.w3.org/2000/svg"';for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&(e+=" "+t+'="'+er.escape(this.attributes[t])+'"');e+=">";for(var r=0;r<this.children.length;r++)e+=this.children[r].toMarkup();return e+="</svg>",e}}class Zh{constructor(e,t){this.pathName=void 0,this.alternate=void 0,this.pathName=e,this.alternate=t}toNode(){var e="http://www.w3.org/2000/svg",t=document.createElementNS(e,"path");return this.alternate?t.setAttribute("d",this.alternate):t.setAttribute("d",Qre[this.pathName]),t}toMarkup(){return this.alternate?'<path d="'+er.escape(this.alternate)+'"/>':'<path d="'+er.escape(Qre[this.pathName])+'"/>'}}class HP{constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e="http://www.w3.org/2000/svg",t=document.createElementNS(e,"line");for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&t.setAttribute(r,this.attributes[r]);return t}toMarkup(){var e="<line";for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&(e+=" "+t+'="'+er.escape(this.attributes[t])+'"');return e+="/>",e}}function ase(n){if(n instanceof Na)return n;throw new Error("Expected symbolNode but got "+String(n)+".")}function sBe(n){if(n instanceof y4)return n;throw new Error("Expected span<HtmlDomNode> but got "+String(n)+".")}var iBe={bin:1,close:1,inner:1,open:1,punct:1,rel:1},oBe={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1},Nr={math:{},text:{}};function C(n,e,t,r,s,i){Nr[n][s]={font:e,group:t,replace:r},i&&r&&(Nr[n][r]=Nr[n][s])}var E="math",Te="text",P="main",K="ams",Vr="accent-token",tt="bin",Vi="close",Y1="inner",Nt="mathord",Es="op-token",Jo="open",I9="punct",Z="rel",Ju="spacing",oe="textord";C(E,P,Z,"≡","\\equiv",!0),C(E,P,Z,"≺","\\prec",!0),C(E,P,Z,"≻","\\succ",!0),C(E,P,Z,"∼","\\sim",!0),C(E,P,Z,"⊥","\\perp"),C(E,P,Z,"⪯","\\preceq",!0),C(E,P,Z,"⪰","\\succeq",!0),C(E,P,Z,"≃","\\simeq",!0),C(E,P,Z,"∣","\\mid",!0),C(E,P,Z,"≪","\\ll",!0),C(E,P,Z,"≫","\\gg",!0),C(E,P,Z,"≍","\\asymp",!0),C(E,P,Z,"∥","\\parallel"),C(E,P,Z,"⋈","\\bowtie",!0),C(E,P,Z,"⌣","\\smile",!0),C(E,P,Z,"⊑","\\sqsubseteq",!0),C(E,P,Z,"⊒","\\sqsupseteq",!0),C(E,P,Z,"≐","\\doteq",!0),C(E,P,Z,"⌢","\\frown",!0),C(E,P,Z,"∋","\\ni",!0),C(E,P,Z,"∝","\\propto",!0),C(E,P,Z,"⊢","\\vdash",!0),C(E,P,Z,"⊣","\\dashv",!0),C(E,P,Z,"∋","\\owns"),C(E,P,I9,".","\\ldotp"),C(E,P,I9,"⋅","\\cdotp"),C(E,P,oe,"#","\\#"),C(Te,P,oe,"#","\\#"),C(E,P,oe,"&","\\&"),C(Te,P,oe,"&","\\&"),C(E,P,oe,"ℵ","\\aleph",!0),C(E,P,oe,"∀","\\forall",!0),C(E,P,oe,"ℏ","\\hbar",!0),C(E,P,oe,"∃","\\exists",!0),C(E,P,oe,"∇","\\nabla",!0),C(E,P,oe,"♭","\\flat",!0),C(E,P,oe,"ℓ","\\ell",!0),C(E,P,oe,"♮","\\natural",!0),C(E,P,oe,"♣","\\clubsuit",!0),C(E,P,oe,"℘","\\wp",!0),C(E,P,oe,"♯","\\sharp",!0),C(E,P,oe,"♢","\\diamondsuit",!0),C(E,P,oe,"ℜ","\\Re",!0),C(E,P,oe,"♡","\\heartsuit",!0),C(E,P,oe,"ℑ","\\Im",!0),C(E,P,oe,"♠","\\spadesuit",!0),C(E,P,oe,"§","\\S",!0),C(Te,P,oe,"§","\\S"),C(E,P,oe,"¶","\\P",!0),C(Te,P,oe,"¶","\\P"),C(E,P,oe,"†","\\dag"),C(Te,P,oe,"†","\\dag"),C(Te,P,oe,"†","\\textdagger"),C(E,P,oe,"‡","\\ddag"),C(Te,P,oe,"‡","\\ddag"),C(Te,P,oe,"‡","\\textdaggerdbl"),C(E,P,Vi,"⎱","\\rmoustache",!0),C(E,P,Jo,"⎰","\\lmoustache",!0),C(E,P,Vi,"⟯","\\rgroup",!0),C(E,P,Jo,"⟮","\\lgroup",!0),C(E,P,tt,"∓","\\mp",!0),C(E,P,tt,"⊖","\\ominus",!0),C(E,P,tt,"⊎","\\uplus",!0),C(E,P,tt,"⊓","\\sqcap",!0),C(E,P,tt,"∗","\\ast"),C(E,P,tt,"⊔","\\sqcup",!0),C(E,P,tt,"◯","\\bigcirc",!0),C(E,P,tt,"∙","\\bullet",!0),C(E,P,tt,"‡","\\ddagger"),C(E,P,tt,"≀","\\wr",!0),C(E,P,tt,"⨿","\\amalg"),C(E,P,tt,"&","\\And"),C(E,P,Z,"⟵","\\longleftarrow",!0),C(E,P,Z,"⇐","\\Leftarrow",!0),C(E,P,Z,"⟸","\\Longleftarrow",!0),C(E,P,Z,"⟶","\\longrightarrow",!0),C(E,P,Z,"⇒","\\Rightarrow",!0),C(E,P,Z,"⟹","\\Longrightarrow",!0),C(E,P,Z,"↔","\\leftrightarrow",!0),C(E,P,Z,"⟷","\\longleftrightarrow",!0),C(E,P,Z,"⇔","\\Leftrightarrow",!0),C(E,P,Z,"⟺","\\Longleftrightarrow",!0),C(E,P,Z,"↦","\\mapsto",!0),C(E,P,Z,"⟼","\\longmapsto",!0),C(E,P,Z,"↗","\\nearrow",!0),C(E,P,Z,"↩","\\hookleftarrow",!0),C(E,P,Z,"↪","\\hookrightarrow",!0),C(E,P,Z,"↘","\\searrow",!0),C(E,P,Z,"↼","\\leftharpoonup",!0),C(E,P,Z,"⇀","\\rightharpoonup",!0),C(E,P,Z,"↙","\\swarrow",!0),C(E,P,Z,"↽","\\leftharpoondown",!0),C(E,P,Z,"⇁","\\rightharpoondown",!0),C(E,P,Z,"↖","\\nwarrow",!0),C(E,P,Z,"⇌","\\rightleftharpoons",!0),C(E,K,Z,"≮","\\nless",!0),C(E,K,Z,"","\\@nleqslant"),C(E,K,Z,"","\\@nleqq"),C(E,K,Z,"⪇","\\lneq",!0),C(E,K,Z,"≨","\\lneqq",!0),C(E,K,Z,"","\\@lvertneqq"),C(E,K,Z,"⋦","\\lnsim",!0),C(E,K,Z,"⪉","\\lnapprox",!0),C(E,K,Z,"⊀","\\nprec",!0),C(E,K,Z,"⋠","\\npreceq",!0),C(E,K,Z,"⋨","\\precnsim",!0),C(E,K,Z,"⪹","\\precnapprox",!0),C(E,K,Z,"≁","\\nsim",!0),C(E,K,Z,"","\\@nshortmid"),C(E,K,Z,"∤","\\nmid",!0),C(E,K,Z,"⊬","\\nvdash",!0),C(E,K,Z,"⊭","\\nvDash",!0),C(E,K,Z,"⋪","\\ntriangleleft"),C(E,K,Z,"⋬","\\ntrianglelefteq",!0),C(E,K,Z,"⊊","\\subsetneq",!0),C(E,K,Z,"","\\@varsubsetneq"),C(E,K,Z,"⫋","\\subsetneqq",!0),C(E,K,Z,"","\\@varsubsetneqq"),C(E,K,Z,"≯","\\ngtr",!0),C(E,K,Z,"","\\@ngeqslant"),C(E,K,Z,"","\\@ngeqq"),C(E,K,Z,"⪈","\\gneq",!0),C(E,K,Z,"≩","\\gneqq",!0),C(E,K,Z,"","\\@gvertneqq"),C(E,K,Z,"⋧","\\gnsim",!0),C(E,K,Z,"⪊","\\gnapprox",!0),C(E,K,Z,"⊁","\\nsucc",!0),C(E,K,Z,"⋡","\\nsucceq",!0),C(E,K,Z,"⋩","\\succnsim",!0),C(E,K,Z,"⪺","\\succnapprox",!0),C(E,K,Z,"≆","\\ncong",!0),C(E,K,Z,"","\\@nshortparallel"),C(E,K,Z,"∦","\\nparallel",!0),C(E,K,Z,"⊯","\\nVDash",!0),C(E,K,Z,"⋫","\\ntriangleright"),C(E,K,Z,"⋭","\\ntrianglerighteq",!0),C(E,K,Z,"","\\@nsupseteqq"),C(E,K,Z,"⊋","\\supsetneq",!0),C(E,K,Z,"","\\@varsupsetneq"),C(E,K,Z,"⫌","\\supsetneqq",!0),C(E,K,Z,"","\\@varsupsetneqq"),C(E,K,Z,"⊮","\\nVdash",!0),C(E,K,Z,"⪵","\\precneqq",!0),C(E,K,Z,"⪶","\\succneqq",!0),C(E,K,Z,"","\\@nsubseteqq"),C(E,K,tt,"⊴","\\unlhd"),C(E,K,tt,"⊵","\\unrhd"),C(E,K,Z,"↚","\\nleftarrow",!0),C(E,K,Z,"↛","\\nrightarrow",!0),C(E,K,Z,"⇍","\\nLeftarrow",!0),C(E,K,Z,"⇏","\\nRightarrow",!0),C(E,K,Z,"↮","\\nleftrightarrow",!0),C(E,K,Z,"⇎","\\nLeftrightarrow",!0),C(E,K,Z,"△","\\vartriangle"),C(E,K,oe,"ℏ","\\hslash"),C(E,K,oe,"▽","\\triangledown"),C(E,K,oe,"◊","\\lozenge"),C(E,K,oe,"Ⓢ","\\circledS"),C(E,K,oe,"®","\\circledR"),C(Te,K,oe,"®","\\circledR"),C(E,K,oe,"∡","\\measuredangle",!0),C(E,K,oe,"∄","\\nexists"),C(E,K,oe,"℧","\\mho"),C(E,K,oe,"Ⅎ","\\Finv",!0),C(E,K,oe,"⅁","\\Game",!0),C(E,K,oe,"‵","\\backprime"),C(E,K,oe,"▲","\\blacktriangle"),C(E,K,oe,"▼","\\blacktriangledown"),C(E,K,oe,"■","\\blacksquare"),C(E,K,oe,"⧫","\\blacklozenge"),C(E,K,oe,"★","\\bigstar"),C(E,K,oe,"∢","\\sphericalangle",!0),C(E,K,oe,"∁","\\complement",!0),C(E,K,oe,"ð","\\eth",!0),C(Te,P,oe,"ð","ð"),C(E,K,oe,"╱","\\diagup"),C(E,K,oe,"╲","\\diagdown"),C(E,K,oe,"□","\\square"),C(E,K,oe,"□","\\Box"),C(E,K,oe,"◊","\\Diamond"),C(E,K,oe,"¥","\\yen",!0),C(Te,K,oe,"¥","\\yen",!0),C(E,K,oe,"✓","\\checkmark",!0),C(Te,K,oe,"✓","\\checkmark"),C(E,K,oe,"ℶ","\\beth",!0),C(E,K,oe,"ℸ","\\daleth",!0),C(E,K,oe,"ℷ","\\gimel",!0),C(E,K,oe,"ϝ","\\digamma",!0),C(E,K,oe,"ϰ","\\varkappa"),C(E,K,Jo,"┌","\\@ulcorner",!0),C(E,K,Vi,"┐","\\@urcorner",!0),C(E,K,Jo,"└","\\@llcorner",!0),C(E,K,Vi,"┘","\\@lrcorner",!0),C(E,K,Z,"≦","\\leqq",!0),C(E,K,Z,"⩽","\\leqslant",!0),C(E,K,Z,"⪕","\\eqslantless",!0),C(E,K,Z,"≲","\\lesssim",!0),C(E,K,Z,"⪅","\\lessapprox",!0),C(E,K,Z,"≊","\\approxeq",!0),C(E,K,tt,"⋖","\\lessdot"),C(E,K,Z,"⋘","\\lll",!0),C(E,K,Z,"≶","\\lessgtr",!0),C(E,K,Z,"⋚","\\lesseqgtr",!0),C(E,K,Z,"⪋","\\lesseqqgtr",!0),C(E,K,Z,"≑","\\doteqdot"),C(E,K,Z,"≓","\\risingdotseq",!0),C(E,K,Z,"≒","\\fallingdotseq",!0),C(E,K,Z,"∽","\\backsim",!0),C(E,K,Z,"⋍","\\backsimeq",!0),C(E,K,Z,"⫅","\\subseteqq",!0),C(E,K,Z,"⋐","\\Subset",!0),C(E,K,Z,"⊏","\\sqsubset",!0),C(E,K,Z,"≼","\\preccurlyeq",!0),C(E,K,Z,"⋞","\\curlyeqprec",!0),C(E,K,Z,"≾","\\precsim",!0),C(E,K,Z,"⪷","\\precapprox",!0),C(E,K,Z,"⊲","\\vartriangleleft"),C(E,K,Z,"⊴","\\trianglelefteq"),C(E,K,Z,"⊨","\\vDash",!0),C(E,K,Z,"⊪","\\Vvdash",!0),C(E,K,Z,"⌣","\\smallsmile"),C(E,K,Z,"⌢","\\smallfrown"),C(E,K,Z,"≏","\\bumpeq",!0),C(E,K,Z,"≎","\\Bumpeq",!0),C(E,K,Z,"≧","\\geqq",!0),C(E,K,Z,"⩾","\\geqslant",!0),C(E,K,Z,"⪖","\\eqslantgtr",!0),C(E,K,Z,"≳","\\gtrsim",!0),C(E,K,Z,"⪆","\\gtrapprox",!0),C(E,K,tt,"⋗","\\gtrdot"),C(E,K,Z,"⋙","\\ggg",!0),C(E,K,Z,"≷","\\gtrless",!0),C(E,K,Z,"⋛","\\gtreqless",!0),C(E,K,Z,"⪌","\\gtreqqless",!0),C(E,K,Z,"≖","\\eqcirc",!0),C(E,K,Z,"≗","\\circeq",!0),C(E,K,Z,"≜","\\triangleq",!0),C(E,K,Z,"∼","\\thicksim"),C(E,K,Z,"≈","\\thickapprox"),C(E,K,Z,"⫆","\\supseteqq",!0),C(E,K,Z,"⋑","\\Supset",!0),C(E,K,Z,"⊐","\\sqsupset",!0),C(E,K,Z,"≽","\\succcurlyeq",!0),C(E,K,Z,"⋟","\\curlyeqsucc",!0),C(E,K,Z,"≿","\\succsim",!0),C(E,K,Z,"⪸","\\succapprox",!0),C(E,K,Z,"⊳","\\vartriangleright"),C(E,K,Z,"⊵","\\trianglerighteq"),C(E,K,Z,"⊩","\\Vdash",!0),C(E,K,Z,"∣","\\shortmid"),C(E,K,Z,"∥","\\shortparallel"),C(E,K,Z,"≬","\\between",!0),C(E,K,Z,"⋔","\\pitchfork",!0),C(E,K,Z,"∝","\\varpropto"),C(E,K,Z,"◀","\\blacktriangleleft"),C(E,K,Z,"∴","\\therefore",!0),C(E,K,Z,"∍","\\backepsilon"),C(E,K,Z,"▶","\\blacktriangleright"),C(E,K,Z,"∵","\\because",!0),C(E,K,Z,"⋘","\\llless"),C(E,K,Z,"⋙","\\gggtr"),C(E,K,tt,"⊲","\\lhd"),C(E,K,tt,"⊳","\\rhd"),C(E,K,Z,"≂","\\eqsim",!0),C(E,P,Z,"⋈","\\Join"),C(E,K,Z,"≑","\\Doteq",!0),C(E,K,tt,"∔","\\dotplus",!0),C(E,K,tt,"∖","\\smallsetminus"),C(E,K,tt,"⋒","\\Cap",!0),C(E,K,tt,"⋓","\\Cup",!0),C(E,K,tt,"⩞","\\doublebarwedge",!0),C(E,K,tt,"⊟","\\boxminus",!0),C(E,K,tt,"⊞","\\boxplus",!0),C(E,K,tt,"⋇","\\divideontimes",!0),C(E,K,tt,"⋉","\\ltimes",!0),C(E,K,tt,"⋊","\\rtimes",!0),C(E,K,tt,"⋋","\\leftthreetimes",!0),C(E,K,tt,"⋌","\\rightthreetimes",!0),C(E,K,tt,"⋏","\\curlywedge",!0),C(E,K,tt,"⋎","\\curlyvee",!0),C(E,K,tt,"⊝","\\circleddash",!0),C(E,K,tt,"⊛","\\circledast",!0),C(E,K,tt,"⋅","\\centerdot"),C(E,K,tt,"⊺","\\intercal",!0),C(E,K,tt,"⋒","\\doublecap"),C(E,K,tt,"⋓","\\doublecup"),C(E,K,tt,"⊠","\\boxtimes",!0),C(E,K,Z,"⇢","\\dashrightarrow",!0),C(E,K,Z,"⇠","\\dashleftarrow",!0),C(E,K,Z,"⇇","\\leftleftarrows",!0),C(E,K,Z,"⇆","\\leftrightarrows",!0),C(E,K,Z,"⇚","\\Lleftarrow",!0),C(E,K,Z,"↞","\\twoheadleftarrow",!0),C(E,K,Z,"↢","\\leftarrowtail",!0),C(E,K,Z,"↫","\\looparrowleft",!0),C(E,K,Z,"⇋","\\leftrightharpoons",!0),C(E,K,Z,"↶","\\curvearrowleft",!0),C(E,K,Z,"↺","\\circlearrowleft",!0),C(E,K,Z,"↰","\\Lsh",!0),C(E,K,Z,"⇈","\\upuparrows",!0),C(E,K,Z,"↿","\\upharpoonleft",!0),C(E,K,Z,"⇃","\\downharpoonleft",!0),C(E,P,Z,"⊶","\\origof",!0),C(E,P,Z,"⊷","\\imageof",!0),C(E,K,Z,"⊸","\\multimap",!0),C(E,K,Z,"↭","\\leftrightsquigarrow",!0),C(E,K,Z,"⇉","\\rightrightarrows",!0),C(E,K,Z,"⇄","\\rightleftarrows",!0),C(E,K,Z,"↠","\\twoheadrightarrow",!0),C(E,K,Z,"↣","\\rightarrowtail",!0),C(E,K,Z,"↬","\\looparrowright",!0),C(E,K,Z,"↷","\\curvearrowright",!0),C(E,K,Z,"↻","\\circlearrowright",!0),C(E,K,Z,"↱","\\Rsh",!0),C(E,K,Z,"⇊","\\downdownarrows",!0),C(E,K,Z,"↾","\\upharpoonright",!0),C(E,K,Z,"⇂","\\downharpoonright",!0),C(E,K,Z,"⇝","\\rightsquigarrow",!0),C(E,K,Z,"⇝","\\leadsto"),C(E,K,Z,"⇛","\\Rrightarrow",!0),C(E,K,Z,"↾","\\restriction"),C(E,P,oe,"‘","`"),C(E,P,oe,"$","\\$"),C(Te,P,oe,"$","\\$"),C(Te,P,oe,"$","\\textdollar"),C(E,P,oe,"%","\\%"),C(Te,P,oe,"%","\\%"),C(E,P,oe,"_","\\_"),C(Te,P,oe,"_","\\_"),C(Te,P,oe,"_","\\textunderscore"),C(E,P,oe,"∠","\\angle",!0),C(E,P,oe,"∞","\\infty",!0),C(E,P,oe,"′","\\prime"),C(E,P,oe,"△","\\triangle"),C(E,P,oe,"Γ","\\Gamma",!0),C(E,P,oe,"Δ","\\Delta",!0),C(E,P,oe,"Θ","\\Theta",!0),C(E,P,oe,"Λ","\\Lambda",!0),C(E,P,oe,"Ξ","\\Xi",!0),C(E,P,oe,"Π","\\Pi",!0),C(E,P,oe,"Σ","\\Sigma",!0),C(E,P,oe,"Υ","\\Upsilon",!0),C(E,P,oe,"Φ","\\Phi",!0),C(E,P,oe,"Ψ","\\Psi",!0),C(E,P,oe,"Ω","\\Omega",!0),C(E,P,oe,"A","Α"),C(E,P,oe,"B","Β"),C(E,P,oe,"E","Ε"),C(E,P,oe,"Z","Ζ"),C(E,P,oe,"H","Η"),C(E,P,oe,"I","Ι"),C(E,P,oe,"K","Κ"),C(E,P,oe,"M","Μ"),C(E,P,oe,"N","Ν"),C(E,P,oe,"O","Ο"),C(E,P,oe,"P","Ρ"),C(E,P,oe,"T","Τ"),C(E,P,oe,"X","Χ"),C(E,P,oe,"¬","\\neg",!0),C(E,P,oe,"¬","\\lnot"),C(E,P,oe,"⊤","\\top"),C(E,P,oe,"⊥","\\bot"),C(E,P,oe,"∅","\\emptyset"),C(E,K,oe,"∅","\\varnothing"),C(E,P,Nt,"α","\\alpha",!0),C(E,P,Nt,"β","\\beta",!0),C(E,P,Nt,"γ","\\gamma",!0),C(E,P,Nt,"δ","\\delta",!0),C(E,P,Nt,"ϵ","\\epsilon",!0),C(E,P,Nt,"ζ","\\zeta",!0),C(E,P,Nt,"η","\\eta",!0),C(E,P,Nt,"θ","\\theta",!0),C(E,P,Nt,"ι","\\iota",!0),C(E,P,Nt,"κ","\\kappa",!0),C(E,P,Nt,"λ","\\lambda",!0),C(E,P,Nt,"μ","\\mu",!0),C(E,P,Nt,"ν","\\nu",!0),C(E,P,Nt,"ξ","\\xi",!0),C(E,P,Nt,"ο","\\omicron",!0),C(E,P,Nt,"π","\\pi",!0),C(E,P,Nt,"ρ","\\rho",!0),C(E,P,Nt,"σ","\\sigma",!0),C(E,P,Nt,"τ","\\tau",!0),C(E,P,Nt,"υ","\\upsilon",!0),C(E,P,Nt,"ϕ","\\phi",!0),C(E,P,Nt,"χ","\\chi",!0),C(E,P,Nt,"ψ","\\psi",!0),C(E,P,Nt,"ω","\\omega",!0),C(E,P,Nt,"ε","\\varepsilon",!0),C(E,P,Nt,"ϑ","\\vartheta",!0),C(E,P,Nt,"ϖ","\\varpi",!0),C(E,P,Nt,"ϱ","\\varrho",!0),C(E,P,Nt,"ς","\\varsigma",!0),C(E,P,Nt,"φ","\\varphi",!0),C(E,P,tt,"∗","*",!0),C(E,P,tt,"+","+"),C(E,P,tt,"−","-",!0),C(E,P,tt,"⋅","\\cdot",!0),C(E,P,tt,"∘","\\circ",!0),C(E,P,tt,"÷","\\div",!0),C(E,P,tt,"±","\\pm",!0),C(E,P,tt,"×","\\times",!0),C(E,P,tt,"∩","\\cap",!0),C(E,P,tt,"∪","\\cup",!0),C(E,P,tt,"∖","\\setminus",!0),C(E,P,tt,"∧","\\land"),C(E,P,tt,"∨","\\lor"),C(E,P,tt,"∧","\\wedge",!0),C(E,P,tt,"∨","\\vee",!0),C(E,P,oe,"√","\\surd"),C(E,P,Jo,"⟨","\\langle",!0),C(E,P,Jo,"∣","\\lvert"),C(E,P,Jo,"∥","\\lVert"),C(E,P,Vi,"?","?"),C(E,P,Vi,"!","!"),C(E,P,Vi,"⟩","\\rangle",!0),C(E,P,Vi,"∣","\\rvert"),C(E,P,Vi,"∥","\\rVert"),C(E,P,Z,"=","="),C(E,P,Z,":",":"),C(E,P,Z,"≈","\\approx",!0),C(E,P,Z,"≅","\\cong",!0),C(E,P,Z,"≥","\\ge"),C(E,P,Z,"≥","\\geq",!0),C(E,P,Z,"←","\\gets"),C(E,P,Z,">","\\gt",!0),C(E,P,Z,"∈","\\in",!0),C(E,P,Z,"","\\@not"),C(E,P,Z,"⊂","\\subset",!0),C(E,P,Z,"⊃","\\supset",!0),C(E,P,Z,"⊆","\\subseteq",!0),C(E,P,Z,"⊇","\\supseteq",!0),C(E,K,Z,"⊈","\\nsubseteq",!0),C(E,K,Z,"⊉","\\nsupseteq",!0),C(E,P,Z,"⊨","\\models"),C(E,P,Z,"←","\\leftarrow",!0),C(E,P,Z,"≤","\\le"),C(E,P,Z,"≤","\\leq",!0),C(E,P,Z,"<","\\lt",!0),C(E,P,Z,"→","\\rightarrow",!0),C(E,P,Z,"→","\\to"),C(E,K,Z,"≱","\\ngeq",!0),C(E,K,Z,"≰","\\nleq",!0),C(E,P,Ju," ","\\ "),C(E,P,Ju," ","\\space"),C(E,P,Ju," ","\\nobreakspace"),C(Te,P,Ju," ","\\ "),C(Te,P,Ju," "," "),C(Te,P,Ju," ","\\space"),C(Te,P,Ju," ","\\nobreakspace"),C(E,P,Ju,null,"\\nobreak"),C(E,P,Ju,null,"\\allowbreak"),C(E,P,I9,",",","),C(E,P,I9,";",";"),C(E,K,tt,"⊼","\\barwedge",!0),C(E,K,tt,"⊻","\\veebar",!0),C(E,P,tt,"⊙","\\odot",!0),C(E,P,tt,"⊕","\\oplus",!0),C(E,P,tt,"⊗","\\otimes",!0),C(E,P,oe,"∂","\\partial",!0),C(E,P,tt,"⊘","\\oslash",!0),C(E,K,tt,"⊚","\\circledcirc",!0),C(E,K,tt,"⊡","\\boxdot",!0),C(E,P,tt,"△","\\bigtriangleup"),C(E,P,tt,"▽","\\bigtriangledown"),C(E,P,tt,"†","\\dagger"),C(E,P,tt,"⋄","\\diamond"),C(E,P,tt,"⋆","\\star"),C(E,P,tt,"◃","\\triangleleft"),C(E,P,tt,"▹","\\triangleright"),C(E,P,Jo,"{","\\{"),C(Te,P,oe,"{","\\{"),C(Te,P,oe,"{","\\textbraceleft"),C(E,P,Vi,"}","\\}"),C(Te,P,oe,"}","\\}"),C(Te,P,oe,"}","\\textbraceright"),C(E,P,Jo,"{","\\lbrace"),C(E,P,Vi,"}","\\rbrace"),C(E,P,Jo,"[","\\lbrack",!0),C(Te,P,oe,"[","\\lbrack",!0),C(E,P,Vi,"]","\\rbrack",!0),C(Te,P,oe,"]","\\rbrack",!0),C(E,P,Jo,"(","\\lparen",!0),C(E,P,Vi,")","\\rparen",!0),C(Te,P,oe,"<","\\textless",!0),C(Te,P,oe,">","\\textgreater",!0),C(E,P,Jo,"⌊","\\lfloor",!0),C(E,P,Vi,"⌋","\\rfloor",!0),C(E,P,Jo,"⌈","\\lceil",!0),C(E,P,Vi,"⌉","\\rceil",!0),C(E,P,oe,"\\","\\backslash"),C(E,P,oe,"∣","|"),C(E,P,oe,"∣","\\vert"),C(Te,P,oe,"|","\\textbar",!0),C(E,P,oe,"∥","\\|"),C(E,P,oe,"∥","\\Vert"),C(Te,P,oe,"∥","\\textbardbl"),C(Te,P,oe,"~","\\textasciitilde"),C(Te,P,oe,"\\","\\textbackslash"),C(Te,P,oe,"^","\\textasciicircum"),C(E,P,Z,"↑","\\uparrow",!0),C(E,P,Z,"⇑","\\Uparrow",!0),C(E,P,Z,"↓","\\downarrow",!0),C(E,P,Z,"⇓","\\Downarrow",!0),C(E,P,Z,"↕","\\updownarrow",!0),C(E,P,Z,"⇕","\\Updownarrow",!0),C(E,P,Es,"∐","\\coprod"),C(E,P,Es,"⋁","\\bigvee"),C(E,P,Es,"⋀","\\bigwedge"),C(E,P,Es,"⨄","\\biguplus"),C(E,P,Es,"⋂","\\bigcap"),C(E,P,Es,"⋃","\\bigcup"),C(E,P,Es,"∫","\\int"),C(E,P,Es,"∫","\\intop"),C(E,P,Es,"∬","\\iint"),C(E,P,Es,"∭","\\iiint"),C(E,P,Es,"∏","\\prod"),C(E,P,Es,"∑","\\sum"),C(E,P,Es,"⨂","\\bigotimes"),C(E,P,Es,"⨁","\\bigoplus"),C(E,P,Es,"⨀","\\bigodot"),C(E,P,Es,"∮","\\oint"),C(E,P,Es,"∯","\\oiint"),C(E,P,Es,"∰","\\oiiint"),C(E,P,Es,"⨆","\\bigsqcup"),C(E,P,Es,"∫","\\smallint"),C(Te,P,Y1,"…","\\textellipsis"),C(E,P,Y1,"…","\\mathellipsis"),C(Te,P,Y1,"…","\\ldots",!0),C(E,P,Y1,"…","\\ldots",!0),C(E,P,Y1,"⋯","\\@cdots",!0),C(E,P,Y1,"⋱","\\ddots",!0),C(E,P,oe,"⋮","\\varvdots"),C(Te,P,oe,"⋮","\\varvdots"),C(E,P,Vr,"ˊ","\\acute"),C(E,P,Vr,"ˋ","\\grave"),C(E,P,Vr,"¨","\\ddot"),C(E,P,Vr,"~","\\tilde"),C(E,P,Vr,"ˉ","\\bar"),C(E,P,Vr,"˘","\\breve"),C(E,P,Vr,"ˇ","\\check"),C(E,P,Vr,"^","\\hat"),C(E,P,Vr,"⃗","\\vec"),C(E,P,Vr,"˙","\\dot"),C(E,P,Vr,"˚","\\mathring"),C(E,P,Nt,"","\\@imath"),C(E,P,Nt,"","\\@jmath"),C(E,P,oe,"ı","ı"),C(E,P,oe,"ȷ","ȷ"),C(Te,P,oe,"ı","\\i",!0),C(Te,P,oe,"ȷ","\\j",!0),C(Te,P,oe,"ß","\\ss",!0),C(Te,P,oe,"æ","\\ae",!0),C(Te,P,oe,"œ","\\oe",!0),C(Te,P,oe,"ø","\\o",!0),C(Te,P,oe,"Æ","\\AE",!0),C(Te,P,oe,"Œ","\\OE",!0),C(Te,P,oe,"Ø","\\O",!0),C(Te,P,Vr,"ˊ","\\'"),C(Te,P,Vr,"ˋ","\\`"),C(Te,P,Vr,"ˆ","\\^"),C(Te,P,Vr,"˜","\\~"),C(Te,P,Vr,"ˉ","\\="),C(Te,P,Vr,"˘","\\u"),C(Te,P,Vr,"˙","\\."),C(Te,P,Vr,"¸","\\c"),C(Te,P,Vr,"˚","\\r"),C(Te,P,Vr,"ˇ","\\v"),C(Te,P,Vr,"¨",'\\"'),C(Te,P,Vr,"˝","\\H"),C(Te,P,Vr,"◯","\\textcircled");var lse={"--":!0,"---":!0,"``":!0,"''":!0};C(Te,P,oe,"–","--",!0),C(Te,P,oe,"–","\\textendash"),C(Te,P,oe,"—","---",!0),C(Te,P,oe,"—","\\textemdash"),C(Te,P,oe,"‘","`",!0),C(Te,P,oe,"‘","\\textquoteleft"),C(Te,P,oe,"’","'",!0),C(Te,P,oe,"’","\\textquoteright"),C(Te,P,oe,"“","``",!0),C(Te,P,oe,"“","\\textquotedblleft"),C(Te,P,oe,"”","''",!0),C(Te,P,oe,"”","\\textquotedblright"),C(E,P,oe,"°","\\degree",!0),C(Te,P,oe,"°","\\degree"),C(Te,P,oe,"°","\\textdegree",!0),C(E,P,oe,"£","\\pounds"),C(E,P,oe,"£","\\mathsterling",!0),C(Te,P,oe,"£","\\pounds"),C(Te,P,oe,"£","\\textsterling",!0),C(E,K,oe,"✠","\\maltese"),C(Te,K,oe,"✠","\\maltese");for(var cse='0123456789/@."',qP=0;qP<cse.length;qP++){var use=cse.charAt(qP);C(E,P,oe,use,use)}for(var dse='0123456789!@*()-=+";:?/.,',UP=0;UP<dse.length;UP++){var hse=dse.charAt(UP);C(Te,P,oe,hse,hse)}for(var D9="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",WP=0;WP<D9.length;WP++){var R9=D9.charAt(WP);C(E,P,Nt,R9,R9),C(Te,P,oe,R9,R9)}C(E,K,oe,"C","ℂ"),C(Te,K,oe,"C","ℂ"),C(E,K,oe,"H","ℍ"),C(Te,K,oe,"H","ℍ"),C(E,K,oe,"N","ℕ"),C(Te,K,oe,"N","ℕ"),C(E,K,oe,"P","ℙ"),C(Te,K,oe,"P","ℙ"),C(E,K,oe,"Q","ℚ"),C(Te,K,oe,"Q","ℚ"),C(E,K,oe,"R","ℝ"),C(Te,K,oe,"R","ℝ"),C(E,K,oe,"Z","ℤ"),C(Te,K,oe,"Z","ℤ"),C(E,P,Nt,"h","ℎ"),C(Te,P,Nt,"h","ℎ");for(var Ht="",zi=0;zi<D9.length;zi++){var Xr=D9.charAt(zi);Ht=String.fromCharCode(55349,56320+zi),C(E,P,Nt,Xr,Ht),C(Te,P,oe,Xr,Ht),Ht=String.fromCharCode(55349,56372+zi),C(E,P,Nt,Xr,Ht),C(Te,P,oe,Xr,Ht),Ht=String.fromCharCode(55349,56424+zi),C(E,P,Nt,Xr,Ht),C(Te,P,oe,Xr,Ht),Ht=String.fromCharCode(55349,56580+zi),C(E,P,Nt,Xr,Ht),C(Te,P,oe,Xr,Ht),Ht=String.fromCharCode(55349,56684+zi),C(E,P,Nt,Xr,Ht),C(Te,P,oe,Xr,Ht),Ht=String.fromCharCode(55349,56736+zi),C(E,P,Nt,Xr,Ht),C(Te,P,oe,Xr,Ht),Ht=String.fromCharCode(55349,56788+zi),C(E,P,Nt,Xr,Ht),C(Te,P,oe,Xr,Ht),Ht=String.fromCharCode(55349,56840+zi),C(E,P,Nt,Xr,Ht),C(Te,P,oe,Xr,Ht),Ht=String.fromCharCode(55349,56944+zi),C(E,P,Nt,Xr,Ht),C(Te,P,oe,Xr,Ht),zi<26&&(Ht=String.fromCharCode(55349,56632+zi),C(E,P,Nt,Xr,Ht),C(Te,P,oe,Xr,Ht),Ht=String.fromCharCode(55349,56476+zi),C(E,P,Nt,Xr,Ht),C(Te,P,oe,Xr,Ht))}Ht="𝕜",C(E,P,Nt,"k",Ht),C(Te,P,oe,"k",Ht);for(var L0=0;L0<10;L0++){var Xh=L0.toString();Ht=String.fromCharCode(55349,57294+L0),C(E,P,Nt,Xh,Ht),C(Te,P,oe,Xh,Ht),Ht=String.fromCharCode(55349,57314+L0),C(E,P,Nt,Xh,Ht),C(Te,P,oe,Xh,Ht),Ht=String.fromCharCode(55349,57324+L0),C(E,P,Nt,Xh,Ht),C(Te,P,oe,Xh,Ht),Ht=String.fromCharCode(55349,57334+L0),C(E,P,Nt,Xh,Ht),C(Te,P,oe,Xh,Ht)}for(var GP="ÐÞþ",KP=0;KP<GP.length;KP++){var $9=GP.charAt(KP);C(E,P,Nt,$9,$9),C(Te,P,oe,$9,$9)}var L9=[["mathbf","textbf","Main-Bold"],["mathbf","textbf","Main-Bold"],["mathnormal","textit","Math-Italic"],["mathnormal","textit","Math-Italic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["mathscr","textscr","Script-Regular"],["","",""],["","",""],["","",""],["mathfrak","textfrak","Fraktur-Regular"],["mathfrak","textfrak","Fraktur-Regular"],["mathbb","textbb","AMS-Regular"],["mathbb","textbb","AMS-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathitsf","textitsf","SansSerif-Italic"],["mathitsf","textitsf","SansSerif-Italic"],["","",""],["","",""],["mathtt","texttt","Typewriter-Regular"],["mathtt","texttt","Typewriter-Regular"]],fse=[["mathbf","textbf","Main-Bold"],["","",""],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathtt","texttt","Typewriter-Regular"]],aBe=function(e,t){var r=e.charCodeAt(0),s=e.charCodeAt(1),i=(r-55296)*1024+(s-56320)+65536,o=t==="math"?0:1;if(119808<=i&&i<120484){var a=Math.floor((i-119808)/26);return[L9[a][2],L9[a][o]]}else if(120782<=i&&i<=120831){var l=Math.floor((i-120782)/10);return[fse[l][2],fse[l][o]]}else{if(i===120485||i===120486)return[L9[0][2],L9[0][o]];if(120486<i&&i<120782)return["",""];throw new De("Unsupported character: "+e)}},F9=function(e,t,r){return Nr[r][e]&&Nr[r][e].replace&&(e=Nr[r][e].replace),{value:e,metrics:jP(e,t,r)}},Sl=function(e,t,r,s,i){var o=F9(e,t,r),a=o.metrics;e=o.value;var l;if(a){var c=a.italic;(r==="text"||s&&s.font==="mathit")&&(c=0),l=new Na(e,a.height,a.depth,c,a.skew,a.width,i)}else typeof console<"u"&&console.warn("No character metrics "+("for '"+e+"' in style '"+t+"' and mode '"+r+"'")),l=new Na(e,0,0,0,0,0,i);if(s){l.maxFontSize=s.sizeMultiplier,s.style.isTight()&&l.classes.push("mtight");var u=s.getColor();u&&(l.style.color=u)}return l},lBe=function(e,t,r,s){return s===void 0&&(s=[]),r.font==="boldsymbol"&&F9(e,"Main-Bold",t).metrics?Sl(e,"Main-Bold",t,r,s.concat(["mathbf"])):e==="\\"||Nr[t][e].font==="main"?Sl(e,"Main-Regular",t,r,s):Sl(e,"AMS-Regular",t,r,s.concat(["amsrm"]))},cBe=function(e,t,r,s,i){return i!=="textord"&&F9(e,"Math-BoldItalic",t).metrics?{fontName:"Math-BoldItalic",fontClass:"boldsymbol"}:{fontName:"Main-Bold",fontClass:"mathbf"}},uBe=function(e,t,r){var s=e.mode,i=e.text,o=["mord"],a=s==="math"||s==="text"&&t.font,l=a?t.font:t.fontFamily,c="",u="";if(i.charCodeAt(0)===55349&&([c,u]=aBe(i,s)),c.length>0)return Sl(i,c,s,t,o.concat(u));if(l){var d,f;if(l==="boldsymbol"){var p=cBe(i,s,t,o,r);d=p.fontName,f=[p.fontClass]}else a?(d=gse[l].fontName,f=[l]):(d=j9(l,t.fontWeight,t.fontShape),f=[l,t.fontWeight,t.fontShape]);if(F9(i,d,s).metrics)return Sl(i,d,s,t,o.concat(f));if(lse.hasOwnProperty(i)&&d.slice(0,10)==="Typewriter"){for(var m=[],y=0;y<i.length;y++)m.push(Sl(i[y],d,s,t,o.concat(f)));return mse(m)}}if(r==="mathord")return Sl(i,"Math-Italic",s,t,o.concat(["mathnormal"]));if(r==="textord"){var w=Nr[s][i]&&Nr[s][i].font;if(w==="ams"){var k=j9("amsrm",t.fontWeight,t.fontShape);return Sl(i,k,s,t,o.concat("amsrm",t.fontWeight,t.fontShape))}else if(w==="main"||!w){var x=j9("textrm",t.fontWeight,t.fontShape);return Sl(i,x,s,t,o.concat(t.fontWeight,t.fontShape))}else{var S=j9(w,t.fontWeight,t.fontShape);return Sl(i,S,s,t,o.concat(S,t.fontWeight,t.fontShape))}}else throw new Error("unexpected type: "+r+" in makeOrd")},dBe=(n,e)=>{if(Yh(n.classes)!==Yh(e.classes)||n.skew!==e.skew||n.maxFontSize!==e.maxFontSize)return!1;if(n.classes.length===1){var t=n.classes[0];if(t==="mbin"||t==="mord")return!1}for(var r in n.style)if(n.style.hasOwnProperty(r)&&n.style[r]!==e.style[r])return!1;for(var s in e.style)if(e.style.hasOwnProperty(s)&&n.style[s]!==e.style[s])return!1;return!0},hBe=n=>{for(var e=0;e<n.length-1;e++){var t=n[e],r=n[e+1];t instanceof Na&&r instanceof Na&&dBe(t,r)&&(t.text+=r.text,t.height=Math.max(t.height,r.height),t.depth=Math.max(t.depth,r.depth),t.italic=r.italic,n.splice(e+1,1),e--)}return n},YP=function(e){for(var t=0,r=0,s=0,i=0;i<e.children.length;i++){var o=e.children[i];o.height>t&&(t=o.height),o.depth>r&&(r=o.depth),o.maxFontSize>s&&(s=o.maxFontSize)}e.height=t,e.depth=r,e.maxFontSize=s},mo=function(e,t,r,s){var i=new y4(e,t,r,s);return YP(i),i},pse=(n,e,t,r)=>new y4(n,e,t,r),fBe=function(e,t,r){var s=mo([e],[],t);return s.height=Math.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),s.style.borderBottomWidth=je(s.height),s.maxFontSize=1,s},pBe=function(e,t,r,s){var i=new zP(e,t,r,s);return YP(i),i},mse=function(e){var t=new g4(e);return YP(t),t},mBe=function(e,t){return e instanceof g4?mo([],[e],t):e},gBe=function(e){if(e.positionType==="individualShift"){for(var t=e.children,r=[t[0]],s=-t[0].shift-t[0].elem.depth,i=s,o=1;o<t.length;o++){var a=-t[o].shift-i-t[o].elem.depth,l=a-(t[o-1].elem.height+t[o-1].elem.depth);i=i+a,r.push({type:"kern",size:l}),r.push(t[o])}return{children:r,depth:s}}var c;if(e.positionType==="top"){for(var u=e.positionData,d=0;d<e.children.length;d++){var f=e.children[d];u-=f.type==="kern"?f.size:f.elem.height+f.elem.depth}c=u}else if(e.positionType==="bottom")c=-e.positionData;else{var p=e.children[0];if(p.type!=="elem")throw new Error('First child must have type "elem".');if(e.positionType==="shift")c=-p.elem.depth-e.positionData;else if(e.positionType==="firstBaseline")c=-p.elem.depth;else throw new Error("Invalid positionType "+e.positionType+".")}return{children:e.children,depth:c}},yBe=function(e,t){for(var{children:r,depth:s}=gBe(e),i=0,o=0;o<r.length;o++){var a=r[o];if(a.type==="elem"){var l=a.elem;i=Math.max(i,l.maxFontSize,l.height)}}i+=2;var c=mo(["pstrut"],[]);c.style.height=je(i);for(var u=[],d=s,f=s,p=s,m=0;m<r.length;m++){var y=r[m];if(y.type==="kern")p+=y.size;else{var w=y.elem,k=y.wrapperClasses||[],x=y.wrapperStyle||{},S=mo(k,[c,w],void 0,x);S.style.top=je(-i-p-w.depth),y.marginLeft&&(S.style.marginLeft=y.marginLeft),y.marginRight&&(S.style.marginRight=y.marginRight),u.push(S),p+=w.height+w.depth}d=Math.min(d,p),f=Math.max(f,p)}var _=mo(["vlist"],u);_.style.height=je(f);var A;if(d<0){var T=mo([],[]),O=mo(["vlist"],[T]);O.style.height=je(-d);var I=mo(["vlist-s"],[new Na("​")]);A=[mo(["vlist-r"],[_,I]),mo(["vlist-r"],[O])]}else A=[mo(["vlist-r"],[_])];var R=mo(["vlist-t"],A);return A.length===2&&R.classes.push("vlist-t2"),R.height=f,R.depth=-d,R},vBe=(n,e)=>{var t=mo(["mspace"],[],e),r=Wr(n,e);return t.style.marginRight=je(r),t},j9=function(e,t,r){var s="";switch(e){case"amsrm":s="AMS";break;case"textrm":s="Main";break;case"textsf":s="SansSerif";break;case"texttt":s="Typewriter";break;default:s=e}var i;return t==="textbf"&&r==="textit"?i="BoldItalic":t==="textbf"?i="Bold":t==="textit"?i="Italic":i="Regular",s+"-"+i},gse={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathsfit:{variant:"sans-serif-italic",fontName:"SansSerif-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},yse={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},bBe=function(e,t){var[r,s,i]=yse[e],o=new Zh(r),a=new Xu([o],{width:je(s),height:je(i),style:"width:"+je(s),viewBox:"0 0 "+1e3*s+" "+1e3*i,preserveAspectRatio:"xMinYMin"}),l=pse(["overlay"],[a],t);return l.height=i,l.style.height=je(i),l.style.width=je(s),l},fe={fontMap:gse,makeSymbol:Sl,mathsym:lBe,makeSpan:mo,makeSvgSpan:pse,makeLineSpan:fBe,makeAnchor:pBe,makeFragment:mse,wrapFragment:mBe,makeVList:yBe,makeOrd:uBe,makeGlue:vBe,staticSvg:bBe,svgData:yse,tryCombineChars:hBe},Gr={number:3,unit:"mu"},F0={number:4,unit:"mu"},Qu={number:5,unit:"mu"},wBe={mord:{mop:Gr,mbin:F0,mrel:Qu,minner:Gr},mop:{mord:Gr,mop:Gr,mrel:Qu,minner:Gr},mbin:{mord:F0,mop:F0,mopen:F0,minner:F0},mrel:{mord:Qu,mop:Qu,mopen:Qu,minner:Qu},mopen:{},mclose:{mop:Gr,mbin:F0,mrel:Qu,minner:Gr},mpunct:{mord:Gr,mop:Gr,mrel:Qu,mopen:Gr,mclose:Gr,mpunct:Gr,minner:Gr},minner:{mord:Gr,mop:Gr,mbin:F0,mrel:Qu,mopen:Gr,mpunct:Gr,minner:Gr}},xBe={mord:{mop:Gr},mop:{mord:Gr,mop:Gr},mbin:{},mrel:{},mopen:{},mclose:{mop:Gr},mpunct:{},minner:{mop:Gr}},vse={},B9={},V9={};function Ke(n){for(var{type:e,names:t,props:r,handler:s,htmlBuilder:i,mathmlBuilder:o}=n,a={type:e,numArgs:r.numArgs,argTypes:r.argTypes,allowedInArgument:!!r.allowedInArgument,allowedInText:!!r.allowedInText,allowedInMath:r.allowedInMath===void 0?!0:r.allowedInMath,numOptionalArgs:r.numOptionalArgs||0,infix:!!r.infix,primitive:!!r.primitive,handler:s},l=0;l<t.length;++l)vse[t[l]]=a;e&&(i&&(B9[e]=i),o&&(V9[e]=o))}function j0(n){var{type:e,htmlBuilder:t,mathmlBuilder:r}=n;Ke({type:e,names:[],props:{numArgs:0},handler(){throw new Error("Should never be called.")},htmlBuilder:t,mathmlBuilder:r})}var z9=function(e){return e.type==="ordgroup"&&e.body.length===1?e.body[0]:e},cs=function(e){return e.type==="ordgroup"?e.body:[e]},ed=fe.makeSpan,kBe=["leftmost","mbin","mopen","mrel","mop","mpunct"],CBe=["rightmost","mrel","mclose","mpunct"],SBe={display:At.DISPLAY,text:At.TEXT,script:At.SCRIPT,scriptscript:At.SCRIPTSCRIPT},EBe={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},Fs=function(e,t,r,s){s===void 0&&(s=[null,null]);for(var i=[],o=0;o<e.length;o++){var a=Wn(e[o],t);if(a instanceof g4){var l=a.children;i.push(...l)}else i.push(a)}if(fe.tryCombineChars(i),!r)return i;var c=t;if(e.length===1){var u=e[0];u.type==="sizing"?c=t.havingSize(u.size):u.type==="styling"&&(c=t.havingStyle(SBe[u.style]))}var d=ed([s[0]||"leftmost"],[],t),f=ed([s[1]||"rightmost"],[],t),p=r==="root";return bse(i,(m,y)=>{var w=y.classes[0],k=m.classes[0];w==="mbin"&&CBe.includes(k)?y.classes[0]="mord":k==="mbin"&&kBe.includes(w)&&(m.classes[0]="mord")},{node:d},f,p),bse(i,(m,y)=>{var w=ZP(y),k=ZP(m),x=w&&k?m.hasClass("mtight")?xBe[w][k]:wBe[w][k]:null;if(x)return fe.makeGlue(x,c)},{node:d},f,p),i},bse=function n(e,t,r,s,i){s&&e.push(s);for(var o=0;o<e.length;o++){var a=e[o],l=wse(a);if(l){n(l.children,t,r,null,i);continue}var c=!a.hasClass("mspace");if(c){var u=t(a,r.node);u&&(r.insertAfter?r.insertAfter(u):(e.unshift(u),o++))}c?r.node=a:i&&a.hasClass("newline")&&(r.node=ed(["leftmost"])),r.insertAfter=(d=>f=>{e.splice(d+1,0,f),o++})(o)}s&&e.pop()},wse=function(e){return e instanceof g4||e instanceof zP||e instanceof y4&&e.hasClass("enclosing")?e:null},_Be=function n(e,t){var r=wse(e);if(r){var s=r.children;if(s.length){if(t==="right")return n(s[s.length-1],"right");if(t==="left")return n(s[0],"left")}}return e},ZP=function(e,t){return e?(t&&(e=_Be(e,t)),EBe[e.classes[0]]||null):null},v4=function(e,t){var r=["nulldelimiter"].concat(e.baseSizingClasses());return ed(t.concat(r))},Wn=function(e,t,r){if(!e)return ed();if(B9[e.type]){var s=B9[e.type](e,t);if(r&&t.size!==r.size){s=ed(t.sizingClasses(r),[s],t);var i=t.sizeMultiplier/r.sizeMultiplier;s.height*=i,s.depth*=i}return s}else throw new De("Got group of unknown type: '"+e.type+"'")};function H9(n,e){var t=ed(["base"],n,e),r=ed(["strut"]);return r.style.height=je(t.height+t.depth),t.depth&&(r.style.verticalAlign=je(-t.depth)),t.children.unshift(r),t}function XP(n,e){var t=null;n.length===1&&n[0].type==="tag"&&(t=n[0].tag,n=n[0].body);var r=Fs(n,e,"root"),s;r.length===2&&r[1].hasClass("tag")&&(s=r.pop());for(var i=[],o=[],a=0;a<r.length;a++)if(o.push(r[a]),r[a].hasClass("mbin")||r[a].hasClass("mrel")||r[a].hasClass("allowbreak")){for(var l=!1;a<r.length-1&&r[a+1].hasClass("mspace")&&!r[a+1].hasClass("newline");)a++,o.push(r[a]),r[a].hasClass("nobreak")&&(l=!0);l||(i.push(H9(o,e)),o=[])}else r[a].hasClass("newline")&&(o.pop(),o.length>0&&(i.push(H9(o,e)),o=[]),i.push(r[a]));o.length>0&&i.push(H9(o,e));var c;t?(c=H9(Fs(t,e,!0)),c.classes=["tag"],i.push(c)):s&&i.push(s);var u=ed(["katex-html"],i);if(u.setAttribute("aria-hidden","true"),c){var d=c.children[0];d.style.height=je(u.height+u.depth),u.depth&&(d.style.verticalAlign=je(-u.depth))}return u}function xse(n){return new g4(n)}class Qo{constructor(e,t,r){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=r||[]}setAttribute(e,t){this.attributes[e]=t}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=Yh(this.classes));for(var r=0;r<this.children.length;r++)if(this.children[r]instanceof Ac&&this.children[r+1]instanceof Ac){for(var s=this.children[r].toText()+this.children[++r].toText();this.children[r+1]instanceof Ac;)s+=this.children[++r].toText();e.appendChild(new Ac(s).toNode())}else e.appendChild(this.children[r].toNode());return e}toMarkup(){var e="<"+this.type;for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&(e+=" "+t+'="',e+=er.escape(this.attributes[t]),e+='"');this.classes.length>0&&(e+=' class ="'+er.escape(Yh(this.classes))+'"'),e+=">";for(var r=0;r<this.children.length;r++)e+=this.children[r].toMarkup();return e+="</"+this.type+">",e}toText(){return this.children.map(e=>e.toText()).join("")}}class Ac{constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return er.escape(this.toText())}toText(){return this.text}}class TBe{constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character=" ":e>=.1666&&e<=.1667?this.character=" ":e>=.2222&&e<=.2223?this.character=" ":e>=.2777&&e<=.2778?this.character="  ":e>=-.05556&&e<=-.05555?this.character=" ⁣":e>=-.1667&&e<=-.1666?this.character=" ⁣":e>=-.2223&&e<=-.2222?this.character=" ⁣":e>=-.2778&&e<=-.2777?this.character=" ⁣":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",je(this.width)),e}toMarkup(){return this.character?"<mtext>"+this.character+"</mtext>":'<mspace width="'+je(this.width)+'"/>'}toText(){return this.character?this.character:" "}}var Me={MathNode:Qo,TextNode:Ac,SpaceNode:TBe,newDocumentFragment:xse},Ma=function(e,t,r){return Nr[t][e]&&Nr[t][e].replace&&e.charCodeAt(0)!==55349&&!(lse.hasOwnProperty(e)&&r&&(r.fontFamily&&r.fontFamily.slice(4,6)==="tt"||r.font&&r.font.slice(4,6)==="tt"))&&(e=Nr[t][e].replace),new Me.TextNode(e)},JP=function(e){return e.length===1?e[0]:new Me.MathNode("mrow",e)},QP=function(e,t){if(t.fontFamily==="texttt")return"monospace";if(t.fontFamily==="textsf")return t.fontShape==="textit"&&t.fontWeight==="textbf"?"sans-serif-bold-italic":t.fontShape==="textit"?"sans-serif-italic":t.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(t.fontShape==="textit"&&t.fontWeight==="textbf")return"bold-italic";if(t.fontShape==="textit")return"italic";if(t.fontWeight==="textbf")return"bold";var r=t.font;if(!r||r==="mathnormal")return null;var s=e.mode;if(r==="mathit")return"italic";if(r==="boldsymbol")return e.type==="textord"?"bold":"bold-italic";if(r==="mathbf")return"bold";if(r==="mathbb")return"double-struck";if(r==="mathsfit")return"sans-serif-italic";if(r==="mathfrak")return"fraktur";if(r==="mathscr"||r==="mathcal")return"script";if(r==="mathsf")return"sans-serif";if(r==="mathtt")return"monospace";var i=e.text;if(["\\imath","\\jmath"].includes(i))return null;Nr[s][i]&&Nr[s][i].replace&&(i=Nr[s][i].replace);var o=fe.fontMap[r].fontName;return jP(i,o,s)?fe.fontMap[r].variant:null};function eI(n){if(!n)return!1;if(n.type==="mi"&&n.children.length===1){var e=n.children[0];return e instanceof Ac&&e.text==="."}else if(n.type==="mo"&&n.children.length===1&&n.getAttribute("separator")==="true"&&n.getAttribute("lspace")==="0em"&&n.getAttribute("rspace")==="0em"){var t=n.children[0];return t instanceof Ac&&t.text===","}else return!1}var go=function(e,t,r){if(e.length===1){var s=xr(e[0],t);return r&&s instanceof Qo&&s.type==="mo"&&(s.setAttribute("lspace","0em"),s.setAttribute("rspace","0em")),[s]}for(var i=[],o,a=0;a<e.length;a++){var l=xr(e[a],t);if(l instanceof Qo&&o instanceof Qo){if(l.type==="mtext"&&o.type==="mtext"&&l.getAttribute("mathvariant")===o.getAttribute("mathvariant")){o.children.push(...l.children);continue}else if(l.type==="mn"&&o.type==="mn"){o.children.push(...l.children);continue}else if(eI(l)&&o.type==="mn"){o.children.push(...l.children);continue}else if(l.type==="mn"&&eI(o))l.children=[...o.children,...l.children],i.pop();else if((l.type==="msup"||l.type==="msub")&&l.children.length>=1&&(o.type==="mn"||eI(o))){var c=l.children[0];c instanceof Qo&&c.type==="mn"&&(c.children=[...o.children,...c.children],i.pop())}else if(o.type==="mi"&&o.children.length===1){var u=o.children[0];if(u instanceof Ac&&u.text==="̸"&&(l.type==="mo"||l.type==="mi"||l.type==="mn")){var d=l.children[0];d instanceof Ac&&d.text.length>0&&(d.text=d.text.slice(0,1)+"̸"+d.text.slice(1),i.pop())}}}i.push(l),o=l}return i},Jh=function(e,t,r){return JP(go(e,t,r))},xr=function(e,t){if(!e)return new Me.MathNode("mrow");if(V9[e.type]){var r=V9[e.type](e,t);return r}else throw new De("Got group of unknown type: '"+e.type+"'")};function kse(n,e,t,r,s){var i=go(n,t),o;i.length===1&&i[0]instanceof Qo&&["mrow","mtable"].includes(i[0].type)?o=i[0]:o=new Me.MathNode("mrow",i);var a=new Me.MathNode("annotation",[new Me.TextNode(e)]);a.setAttribute("encoding","application/x-tex");var l=new Me.MathNode("semantics",[o,a]),c=new Me.MathNode("math",[l]);c.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),r&&c.setAttribute("display","block");var u=s?"katex":"katex-mathml";return fe.makeSpan([u],[c])}var Cse=function(e){return new Zu({style:e.displayMode?At.DISPLAY:At.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},Sse=function(e,t){if(t.displayMode){var r=["katex-display"];t.leqno&&r.push("leqno"),t.fleqn&&r.push("fleqn"),e=fe.makeSpan(r,[e])}return e},ABe=function(e,t,r){var s=Cse(r),i;if(r.output==="mathml")return kse(e,t,s,r.displayMode,!0);if(r.output==="html"){var o=XP(e,s);i=fe.makeSpan(["katex"],[o])}else{var a=kse(e,t,s,r.displayMode,!1),l=XP(e,s);i=fe.makeSpan(["katex"],[a,l])}return Sse(i,r)},NBe=function(e,t,r){var s=Cse(r),i=XP(e,s),o=fe.makeSpan(["katex"],[i]);return Sse(o,r)},MBe={widehat:"^",widecheck:"ˇ",widetilde:"~",utilde:"~",overleftarrow:"←",underleftarrow:"←",xleftarrow:"←",overrightarrow:"→",underrightarrow:"→",xrightarrow:"→",underbrace:"⏟",overbrace:"⏞",overgroup:"⏠",undergroup:"⏡",overleftrightarrow:"↔",underleftrightarrow:"↔",xleftrightarrow:"↔",Overrightarrow:"⇒",xRightarrow:"⇒",overleftharpoon:"↼",xleftharpoonup:"↼",overrightharpoon:"⇀",xrightharpoonup:"⇀",xLeftarrow:"⇐",xLeftrightarrow:"⇔",xhookleftarrow:"↩",xhookrightarrow:"↪",xmapsto:"↦",xrightharpoondown:"⇁",xleftharpoondown:"↽",xrightleftharpoons:"⇌",xleftrightharpoons:"⇋",xtwoheadleftarrow:"↞",xtwoheadrightarrow:"↠",xlongequal:"=",xtofrom:"⇄",xrightleftarrows:"⇄",xrightequilibrium:"⇌",xleftequilibrium:"⇋","\\cdrightarrow":"→","\\cdleftarrow":"←","\\cdlongequal":"="},OBe=function(e){var t=new Me.MathNode("mo",[new Me.TextNode(MBe[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},PBe={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},IBe=function(e){return e.type==="ordgroup"?e.body.length:1},DBe=function(e,t){function r(){var a=4e5,l=e.label.slice(1);if(["widehat","widecheck","widetilde","utilde"].includes(l)){var c=e,u=IBe(c.base),d,f,p;if(u>5)l==="widehat"||l==="widecheck"?(d=420,a=2364,p=.42,f=l+"4"):(d=312,a=2340,p=.34,f="tilde4");else{var m=[1,1,2,2,3,3][u];l==="widehat"||l==="widecheck"?(a=[0,1062,2364,2364,2364][m],d=[0,239,300,360,420][m],p=[0,.24,.3,.3,.36,.42][m],f=l+m):(a=[0,600,1033,2339,2340][m],d=[0,260,286,306,312][m],p=[0,.26,.286,.3,.306,.34][m],f="tilde"+m)}var y=new Zh(f),w=new Xu([y],{width:"100%",height:je(p),viewBox:"0 0 "+a+" "+d,preserveAspectRatio:"none"});return{span:fe.makeSvgSpan([],[w],t),minWidth:0,height:p}}else{var k=[],x=PBe[l],[S,_,A]=x,T=A/1e3,O=S.length,I,R;if(O===1){var D=x[3];I=["hide-tail"],R=[D]}else if(O===2)I=["halfarrow-left","halfarrow-right"],R=["xMinYMin","xMaxYMin"];else if(O===3)I=["brace-left","brace-center","brace-right"],R=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support + `+O+" children.");for(var W=0;W<O;W++){var H=new Zh(S[W]),re=new Xu([H],{width:"400em",height:je(T),viewBox:"0 0 "+a+" "+A,preserveAspectRatio:R[W]+" slice"}),ae=fe.makeSvgSpan([I[W]],[re],t);if(O===1)return{span:ae,minWidth:_,height:T};ae.style.height=je(T),k.push(ae)}return{span:fe.makeSpan(["stretchy"],k,t),minWidth:_,height:T}}}var{span:s,minWidth:i,height:o}=r();return s.height=o,s.style.height=je(o),i>0&&(s.style.minWidth=je(i)),s},RBe=function(e,t,r,s,i){var o,a=e.height+e.depth+r+s;if(/fbox|color|angl/.test(t)){if(o=fe.makeSpan(["stretchy",t],[],i),t==="fbox"){var l=i.color&&i.getColor();l&&(o.style.borderColor=l)}}else{var c=[];/^[bx]cancel$/.test(t)&&c.push(new HP({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&c.push(new HP({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var u=new Xu(c,{width:"100%",height:je(a)});o=fe.makeSvgSpan([],[u],i)}return o.height=a,o.style.height=je(a),o},td={encloseSpan:RBe,mathMLnode:OBe,svgSpan:DBe};function fn(n,e){if(!n||n.type!==e)throw new Error("Expected node of type "+e+", but got "+(n?"node of type "+n.type:String(n)));return n}function tI(n){var e=q9(n);if(!e)throw new Error("Expected node of symbol group type, but got "+(n?"node of type "+n.type:String(n)));return e}function q9(n){return n&&(n.type==="atom"||oBe.hasOwnProperty(n.type))?n:null}var nI=(n,e)=>{var t,r,s;n&&n.type==="supsub"?(r=fn(n.base,"accent"),t=r.base,n.base=t,s=sBe(Wn(n,e)),n.base=r):(r=fn(n,"accent"),t=r.base);var i=Wn(t,e.havingCrampedStyle()),o=r.isShifty&&er.isCharacterBox(t),a=0;if(o){var l=er.getBaseElem(t),c=Wn(l,e.havingCrampedStyle());a=ase(c).skew}var u=r.label==="\\c",d=u?i.height+i.depth:Math.min(i.height,e.fontMetrics().xHeight),f;if(r.isStretchy)f=td.svgSpan(r,e),f=fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:f,wrapperClasses:["svg-align"],wrapperStyle:a>0?{width:"calc(100% - "+je(2*a)+")",marginLeft:je(2*a)}:void 0}]},e);else{var p,m;r.label==="\\vec"?(p=fe.staticSvg("vec",e),m=fe.svgData.vec[1]):(p=fe.makeOrd({mode:r.mode,text:r.label},e,"textord"),p=ase(p),p.italic=0,m=p.width,u&&(d+=p.depth)),f=fe.makeSpan(["accent-body"],[p]);var y=r.label==="\\textcircled";y&&(f.classes.push("accent-full"),d=i.height);var w=a;y||(w-=m/2),f.style.left=je(w),r.label==="\\textcircled"&&(f.style.top=".2em"),f=fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-d},{type:"elem",elem:f}]},e)}var k=fe.makeSpan(["mord","accent"],[f],e);return s?(s.children[0]=k,s.height=Math.max(k.height,s.height),s.classes[0]="mord",s):k},Ese=(n,e)=>{var t=n.isStretchy?td.mathMLnode(n.label):new Me.MathNode("mo",[Ma(n.label,n.mode)]),r=new Me.MathNode("mover",[xr(n.base,e),t]);return r.setAttribute("accent","true"),r},$Be=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(n=>"\\"+n).join("|"));Ke({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(n,e)=>{var t=z9(e[0]),r=!$Be.test(n.funcName),s=!r||n.funcName==="\\widehat"||n.funcName==="\\widetilde"||n.funcName==="\\widecheck";return{type:"accent",mode:n.parser.mode,label:n.funcName,isStretchy:r,isShifty:s,base:t}},htmlBuilder:nI,mathmlBuilder:Ese}),Ke({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(n,e)=>{var t=e[0],r=n.parser.mode;return r==="math"&&(n.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+n.funcName+" works only in text mode"),r="text"),{type:"accent",mode:r,label:n.funcName,isStretchy:!1,isShifty:!0,base:t}},htmlBuilder:nI,mathmlBuilder:Ese}),Ke({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(n,e)=>{var{parser:t,funcName:r}=n,s=e[0];return{type:"accentUnder",mode:t.mode,label:r,base:s}},htmlBuilder:(n,e)=>{var t=Wn(n.base,e),r=td.svgSpan(n,e),s=n.label==="\\utilde"?.12:0,i=fe.makeVList({positionType:"top",positionData:t.height,children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:s},{type:"elem",elem:t}]},e);return fe.makeSpan(["mord","accentunder"],[i],e)},mathmlBuilder:(n,e)=>{var t=td.mathMLnode(n.label),r=new Me.MathNode("munder",[xr(n.base,e),t]);return r.setAttribute("accentunder","true"),r}});var U9=n=>{var e=new Me.MathNode("mpadded",n?[n]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e};Ke({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(n,e,t){var{parser:r,funcName:s}=n;return{type:"xArrow",mode:r.mode,label:s,body:e[0],below:t[0]}},htmlBuilder(n,e){var t=e.style,r=e.havingStyle(t.sup()),s=fe.wrapFragment(Wn(n.body,r,e),e),i=n.label.slice(0,2)==="\\x"?"x":"cd";s.classes.push(i+"-arrow-pad");var o;n.below&&(r=e.havingStyle(t.sub()),o=fe.wrapFragment(Wn(n.below,r,e),e),o.classes.push(i+"-arrow-pad"));var a=td.svgSpan(n,e),l=-e.fontMetrics().axisHeight+.5*a.height,c=-e.fontMetrics().axisHeight-.5*a.height-.111;(s.depth>.25||n.label==="\\xleftequilibrium")&&(c-=s.depth);var u;if(o){var d=-e.fontMetrics().axisHeight+o.height+.5*a.height+.111;u=fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:s,shift:c},{type:"elem",elem:a,shift:l},{type:"elem",elem:o,shift:d}]},e)}else u=fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:s,shift:c},{type:"elem",elem:a,shift:l}]},e);return u.children[0].children[0].children[1].classes.push("svg-align"),fe.makeSpan(["mrel","x-arrow"],[u],e)},mathmlBuilder(n,e){var t=td.mathMLnode(n.label);t.setAttribute("minsize",n.label.charAt(0)==="x"?"1.75em":"3.0em");var r;if(n.body){var s=U9(xr(n.body,e));if(n.below){var i=U9(xr(n.below,e));r=new Me.MathNode("munderover",[t,i,s])}else r=new Me.MathNode("mover",[t,s])}else if(n.below){var o=U9(xr(n.below,e));r=new Me.MathNode("munder",[t,o])}else r=U9(),r=new Me.MathNode("mover",[t,r]);return r}});var LBe=fe.makeSpan;function _se(n,e){var t=Fs(n.body,e,!0);return LBe([n.mclass],t,e)}function Tse(n,e){var t,r=go(n.body,e);return n.mclass==="minner"?t=new Me.MathNode("mpadded",r):n.mclass==="mord"?n.isCharacterBox?(t=r[0],t.type="mi"):t=new Me.MathNode("mi",r):(n.isCharacterBox?(t=r[0],t.type="mo"):t=new Me.MathNode("mo",r),n.mclass==="mbin"?(t.attributes.lspace="0.22em",t.attributes.rspace="0.22em"):n.mclass==="mpunct"?(t.attributes.lspace="0em",t.attributes.rspace="0.17em"):n.mclass==="mopen"||n.mclass==="mclose"?(t.attributes.lspace="0em",t.attributes.rspace="0em"):n.mclass==="minner"&&(t.attributes.lspace="0.0556em",t.attributes.width="+0.1111em")),t}Ke({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(n,e){var{parser:t,funcName:r}=n,s=e[0];return{type:"mclass",mode:t.mode,mclass:"m"+r.slice(5),body:cs(s),isCharacterBox:er.isCharacterBox(s)}},htmlBuilder:_se,mathmlBuilder:Tse});var W9=n=>{var e=n.type==="ordgroup"&&n.body.length?n.body[0]:n;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"};Ke({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(n,e){var{parser:t}=n;return{type:"mclass",mode:t.mode,mclass:W9(e[0]),body:cs(e[1]),isCharacterBox:er.isCharacterBox(e[1])}}}),Ke({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(n,e){var{parser:t,funcName:r}=n,s=e[1],i=e[0],o;r!=="\\stackrel"?o=W9(s):o="mrel";var a={type:"op",mode:s.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:r!=="\\stackrel",body:cs(s)},l={type:"supsub",mode:i.mode,base:a,sup:r==="\\underset"?null:i,sub:r==="\\underset"?i:null};return{type:"mclass",mode:t.mode,mclass:o,body:[l],isCharacterBox:er.isCharacterBox(l)}},htmlBuilder:_se,mathmlBuilder:Tse}),Ke({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(n,e){var{parser:t}=n;return{type:"pmb",mode:t.mode,mclass:W9(e[0]),body:cs(e[0])}},htmlBuilder(n,e){var t=Fs(n.body,e,!0),r=fe.makeSpan([n.mclass],t,e);return r.style.textShadow="0.02em 0.01em 0.04px",r},mathmlBuilder(n,e){var t=go(n.body,e),r=new Me.MathNode("mstyle",t);return r.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),r}});var FBe={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Ase=()=>({type:"styling",body:[],mode:"math",style:"display"}),Nse=n=>n.type==="textord"&&n.text==="@",jBe=(n,e)=>(n.type==="mathord"||n.type==="atom")&&n.text===e;function BBe(n,e,t){var r=FBe[n];switch(r){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return t.callFunction(r,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var s=t.callFunction("\\\\cdleft",[e[0]],[]),i={type:"atom",text:r,mode:"math",family:"rel"},o=t.callFunction("\\Big",[i],[]),a=t.callFunction("\\\\cdright",[e[1]],[]),l={type:"ordgroup",mode:"math",body:[s,o,a]};return t.callFunction("\\\\cdparent",[l],[])}case"\\\\cdlongequal":return t.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var c={type:"textord",text:"\\Vert",mode:"math"};return t.callFunction("\\Big",[c],[])}default:return{type:"textord",text:" ",mode:"math"}}}function VBe(n){var e=[];for(n.gullet.beginGroup(),n.gullet.macros.set("\\cr","\\\\\\relax"),n.gullet.beginGroup();;){e.push(n.parseExpression(!1,"\\\\")),n.gullet.endGroup(),n.gullet.beginGroup();var t=n.fetch().text;if(t==="&"||t==="\\\\")n.consume();else if(t==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new De("Expected \\\\ or \\cr or \\end",n.nextToken)}for(var r=[],s=[r],i=0;i<e.length;i++){for(var o=e[i],a=Ase(),l=0;l<o.length;l++)if(!Nse(o[l]))a.body.push(o[l]);else{r.push(a),l+=1;var c=tI(o[l]).text,u=new Array(2);if(u[0]={type:"ordgroup",mode:"math",body:[]},u[1]={type:"ordgroup",mode:"math",body:[]},!("=|.".indexOf(c)>-1))if("<>AV".indexOf(c)>-1)for(var d=0;d<2;d++){for(var f=!0,p=l+1;p<o.length;p++){if(jBe(o[p],c)){f=!1,l=p;break}if(Nse(o[p]))throw new De("Missing a "+c+" character to complete a CD arrow.",o[p]);u[d].body.push(o[p])}if(f)throw new De("Missing a "+c+" character to complete a CD arrow.",o[l])}else throw new De('Expected one of "<>AV=|." after @',o[l]);var m=BBe(c,u,n),y={type:"styling",body:[m],mode:"math",style:"display"};r.push(y),a=Ase()}i%2===0?r.push(a):r.shift(),r=[],s.push(r)}n.gullet.endGroup(),n.gullet.endGroup();var w=new Array(s[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:s,arraystretch:1,addJot:!0,rowGaps:[null],cols:w,colSeparationType:"CD",hLinesBeforeRow:new Array(s.length+1).fill([])}}Ke({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(n,e){var{parser:t,funcName:r}=n;return{type:"cdlabel",mode:t.mode,side:r.slice(4),label:e[0]}},htmlBuilder(n,e){var t=e.havingStyle(e.style.sup()),r=fe.wrapFragment(Wn(n.label,t,e),e);return r.classes.push("cd-label-"+n.side),r.style.bottom=je(.8-r.depth),r.height=0,r.depth=0,r},mathmlBuilder(n,e){var t=new Me.MathNode("mrow",[xr(n.label,e)]);return t=new Me.MathNode("mpadded",[t]),t.setAttribute("width","0"),n.side==="left"&&t.setAttribute("lspace","-1width"),t.setAttribute("voffset","0.7em"),t=new Me.MathNode("mstyle",[t]),t.setAttribute("displaystyle","false"),t.setAttribute("scriptlevel","1"),t}}),Ke({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(n,e){var{parser:t}=n;return{type:"cdlabelparent",mode:t.mode,fragment:e[0]}},htmlBuilder(n,e){var t=fe.wrapFragment(Wn(n.fragment,e),e);return t.classes.push("cd-vert-arrow"),t},mathmlBuilder(n,e){return new Me.MathNode("mrow",[xr(n.fragment,e)])}}),Ke({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(n,e){for(var{parser:t}=n,r=fn(e[0],"ordgroup"),s=r.body,i="",o=0;o<s.length;o++){var a=fn(s[o],"textord");i+=a.text}var l=parseInt(i),c;if(isNaN(l))throw new De("\\@char has non-numeric argument "+i);if(l<0||l>=1114111)throw new De("\\@char with invalid code point "+i);return l<=65535?c=String.fromCharCode(l):(l-=65536,c=String.fromCharCode((l>>10)+55296,(l&1023)+56320)),{type:"textord",mode:t.mode,text:c}}});var Mse=(n,e)=>{var t=Fs(n.body,e.withColor(n.color),!1);return fe.makeFragment(t)},Ose=(n,e)=>{var t=go(n.body,e.withColor(n.color)),r=new Me.MathNode("mstyle",t);return r.setAttribute("mathcolor",n.color),r};Ke({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(n,e){var{parser:t}=n,r=fn(e[0],"color-token").color,s=e[1];return{type:"color",mode:t.mode,color:r,body:cs(s)}},htmlBuilder:Mse,mathmlBuilder:Ose}),Ke({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(n,e){var{parser:t,breakOnTokenText:r}=n,s=fn(e[0],"color-token").color;t.gullet.macros.set("\\current@color",s);var i=t.parseExpression(!0,r);return{type:"color",mode:t.mode,color:s,body:i}},htmlBuilder:Mse,mathmlBuilder:Ose}),Ke({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(n,e,t){var{parser:r}=n,s=r.gullet.future().text==="["?r.parseSizeGroup(!0):null,i=!r.settings.displayMode||!r.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:r.mode,newLine:i,size:s&&fn(s,"size").value}},htmlBuilder(n,e){var t=fe.makeSpan(["mspace"],[],e);return n.newLine&&(t.classes.push("newline"),n.size&&(t.style.marginTop=je(Wr(n.size,e)))),t},mathmlBuilder(n,e){var t=new Me.MathNode("mspace");return n.newLine&&(t.setAttribute("linebreak","newline"),n.size&&t.setAttribute("height",je(Wr(n.size,e)))),t}});var rI={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Pse=n=>{var e=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new De("Expected a control sequence",n);return e},zBe=n=>{var e=n.gullet.popToken();return e.text==="="&&(e=n.gullet.popToken(),e.text===" "&&(e=n.gullet.popToken())),e},Ise=(n,e,t,r)=>{var s=n.gullet.macros.get(t.text);s==null&&(t.noexpand=!0,s={tokens:[t],numArgs:0,unexpandable:!n.gullet.isExpandable(t.text)}),n.gullet.macros.set(e,s,r)};Ke({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(n){var{parser:e,funcName:t}=n;e.consumeSpaces();var r=e.fetch();if(rI[r.text])return(t==="\\global"||t==="\\\\globallong")&&(r.text=rI[r.text]),fn(e.parseFunction(),"internal");throw new De("Invalid token after macro prefix",r)}}),Ke({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(n){var{parser:e,funcName:t}=n,r=e.gullet.popToken(),s=r.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(s))throw new De("Expected a control sequence",r);for(var i=0,o,a=[[]];e.gullet.future().text!=="{";)if(r=e.gullet.popToken(),r.text==="#"){if(e.gullet.future().text==="{"){o=e.gullet.future(),a[i].push("{");break}if(r=e.gullet.popToken(),!/^[1-9]$/.test(r.text))throw new De('Invalid argument number "'+r.text+'"');if(parseInt(r.text)!==i+1)throw new De('Argument number "'+r.text+'" out of order');i++,a.push([])}else{if(r.text==="EOF")throw new De("Expected a macro definition");a[i].push(r.text)}var{tokens:l}=e.gullet.consumeArg();return o&&l.unshift(o),(t==="\\edef"||t==="\\xdef")&&(l=e.gullet.expandTokens(l),l.reverse()),e.gullet.macros.set(s,{tokens:l,numArgs:i,delimiters:a},t===rI[t]),{type:"internal",mode:e.mode}}}),Ke({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(n){var{parser:e,funcName:t}=n,r=Pse(e.gullet.popToken());e.gullet.consumeSpaces();var s=zBe(e);return Ise(e,r,s,t==="\\\\globallet"),{type:"internal",mode:e.mode}}}),Ke({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(n){var{parser:e,funcName:t}=n,r=Pse(e.gullet.popToken()),s=e.gullet.popToken(),i=e.gullet.popToken();return Ise(e,r,i,t==="\\\\globalfuture"),e.gullet.pushToken(i),e.gullet.pushToken(s),{type:"internal",mode:e.mode}}});var b4=function(e,t,r){var s=Nr.math[e]&&Nr.math[e].replace,i=jP(s||e,t,r);if(!i)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return i},sI=function(e,t,r,s){var i=r.havingBaseStyle(t),o=fe.makeSpan(s.concat(i.sizingClasses(r)),[e],r),a=i.sizeMultiplier/r.sizeMultiplier;return o.height*=a,o.depth*=a,o.maxFontSize=i.sizeMultiplier,o},Dse=function(e,t,r){var s=t.havingBaseStyle(r),i=(1-t.sizeMultiplier/s.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=je(i),e.height-=i,e.depth+=i},HBe=function(e,t,r,s,i,o){var a=fe.makeSymbol(e,"Main-Regular",i,s),l=sI(a,t,s,o);return r&&Dse(l,s,t),l},qBe=function(e,t,r,s){return fe.makeSymbol(e,"Size"+t+"-Regular",r,s)},Rse=function(e,t,r,s,i,o){var a=qBe(e,t,i,s),l=sI(fe.makeSpan(["delimsizing","size"+t],[a],s),At.TEXT,s,o);return r&&Dse(l,s,At.TEXT),l},iI=function(e,t,r){var s;t==="Size1-Regular"?s="delim-size1":s="delim-size4";var i=fe.makeSpan(["delimsizinginner",s],[fe.makeSpan([],[fe.makeSymbol(e,t,r)])]);return{type:"elem",elem:i}},oI=function(e,t,r){var s=Tc["Size4-Regular"][e.charCodeAt(0)]?Tc["Size4-Regular"][e.charCodeAt(0)][4]:Tc["Size1-Regular"][e.charCodeAt(0)][4],i=new Zh("inner",Yje(e,Math.round(1e3*t))),o=new Xu([i],{width:je(s),height:je(t),style:"width:"+je(s),viewBox:"0 0 "+1e3*s+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),a=fe.makeSvgSpan([],[o],r);return a.height=t,a.style.height=je(t),a.style.width=je(s),{type:"elem",elem:a}},aI=.008,G9={type:"kern",size:-1*aI},UBe=["|","\\lvert","\\rvert","\\vert"],WBe=["\\|","\\lVert","\\rVert","\\Vert"],$se=function(e,t,r,s,i,o){var a,l,c,u,d="",f=0;a=c=u=e,l=null;var p="Size1-Regular";e==="\\uparrow"?c=u="⏐":e==="\\Uparrow"?c=u="‖":e==="\\downarrow"?a=c="⏐":e==="\\Downarrow"?a=c="‖":e==="\\updownarrow"?(a="\\uparrow",c="⏐",u="\\downarrow"):e==="\\Updownarrow"?(a="\\Uparrow",c="‖",u="\\Downarrow"):UBe.includes(e)?(c="∣",d="vert",f=333):WBe.includes(e)?(c="∥",d="doublevert",f=556):e==="["||e==="\\lbrack"?(a="⎡",c="⎢",u="⎣",p="Size4-Regular",d="lbrack",f=667):e==="]"||e==="\\rbrack"?(a="⎤",c="⎥",u="⎦",p="Size4-Regular",d="rbrack",f=667):e==="\\lfloor"||e==="⌊"?(c=a="⎢",u="⎣",p="Size4-Regular",d="lfloor",f=667):e==="\\lceil"||e==="⌈"?(a="⎡",c=u="⎢",p="Size4-Regular",d="lceil",f=667):e==="\\rfloor"||e==="⌋"?(c=a="⎥",u="⎦",p="Size4-Regular",d="rfloor",f=667):e==="\\rceil"||e==="⌉"?(a="⎤",c=u="⎥",p="Size4-Regular",d="rceil",f=667):e==="("||e==="\\lparen"?(a="⎛",c="⎜",u="⎝",p="Size4-Regular",d="lparen",f=875):e===")"||e==="\\rparen"?(a="⎞",c="⎟",u="⎠",p="Size4-Regular",d="rparen",f=875):e==="\\{"||e==="\\lbrace"?(a="⎧",l="⎨",u="⎩",c="⎪",p="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(a="⎫",l="⎬",u="⎭",c="⎪",p="Size4-Regular"):e==="\\lgroup"||e==="⟮"?(a="⎧",u="⎩",c="⎪",p="Size4-Regular"):e==="\\rgroup"||e==="⟯"?(a="⎫",u="⎭",c="⎪",p="Size4-Regular"):e==="\\lmoustache"||e==="⎰"?(a="⎧",u="⎭",c="⎪",p="Size4-Regular"):(e==="\\rmoustache"||e==="⎱")&&(a="⎫",u="⎩",c="⎪",p="Size4-Regular");var m=b4(a,p,i),y=m.height+m.depth,w=b4(c,p,i),k=w.height+w.depth,x=b4(u,p,i),S=x.height+x.depth,_=0,A=1;if(l!==null){var T=b4(l,p,i);_=T.height+T.depth,A=2}var O=y+S+_,I=Math.max(0,Math.ceil((t-O)/(A*k))),R=O+I*A*k,D=s.fontMetrics().axisHeight;r&&(D*=s.sizeMultiplier);var W=R/2-D,H=[];if(d.length>0){var re=R-y-S,ae=Math.round(R*1e3),de=Zje(d,Math.round(re*1e3)),le=new Zh(d,de),X=(f/1e3).toFixed(3)+"em",se=(ae/1e3).toFixed(3)+"em",J=new Xu([le],{width:X,height:se,viewBox:"0 0 "+f+" "+ae}),$=fe.makeSvgSpan([],[J],s);$.height=ae/1e3,$.style.width=X,$.style.height=se,H.push({type:"elem",elem:$})}else{if(H.push(iI(u,p,i)),H.push(G9),l===null){var ve=R-y-S+2*aI;H.push(oI(c,ve,s))}else{var Pe=(R-y-S-_)/2+2*aI;H.push(oI(c,Pe,s)),H.push(G9),H.push(iI(l,p,i)),H.push(G9),H.push(oI(c,Pe,s))}H.push(G9),H.push(iI(a,p,i))}var q=s.havingBaseStyle(At.TEXT),Xe=fe.makeVList({positionType:"bottom",positionData:W,children:H},q);return sI(fe.makeSpan(["delimsizing","mult"],[Xe],q),At.TEXT,s,o)},lI=80,cI=.08,uI=function(e,t,r,s,i){var o=Kje(e,s,r),a=new Zh(e,o),l=new Xu([a],{width:"400em",height:je(t),viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return fe.makeSvgSpan(["hide-tail"],[l],i)},GBe=function(e,t){var r=t.havingBaseSizing(),s=Bse("\\surd",e*r.sizeMultiplier,jse,r),i=r.sizeMultiplier,o=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),a,l=0,c=0,u=0,d;return s.type==="small"?(u=1e3+1e3*o+lI,e<1?i=1:e<1.4&&(i=.7),l=(1+o+cI)/i,c=(1+o)/i,a=uI("sqrtMain",l,u,o,t),a.style.minWidth="0.853em",d=.833/i):s.type==="large"?(u=(1e3+lI)*w4[s.size],c=(w4[s.size]+o)/i,l=(w4[s.size]+o+cI)/i,a=uI("sqrtSize"+s.size,l,u,o,t),a.style.minWidth="1.02em",d=1/i):(l=e+o+cI,c=e+o,u=Math.floor(1e3*e+o)+lI,a=uI("sqrtTall",l,u,o,t),a.style.minWidth="0.742em",d=1.056),a.height=c,a.style.height=je(l),{span:a,advanceWidth:d,ruleWidth:(t.fontMetrics().sqrtRuleThickness+o)*i}},Lse=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","\\surd"],KBe=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱"],Fse=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],w4=[0,1.2,1.8,2.4,3],YBe=function(e,t,r,s,i){if(e==="<"||e==="\\lt"||e==="⟨"?e="\\langle":(e===">"||e==="\\gt"||e==="⟩")&&(e="\\rangle"),Lse.includes(e)||Fse.includes(e))return Rse(e,t,!1,r,s,i);if(KBe.includes(e))return $se(e,w4[t],!1,r,s,i);throw new De("Illegal delimiter: '"+e+"'")},ZBe=[{type:"small",style:At.SCRIPTSCRIPT},{type:"small",style:At.SCRIPT},{type:"small",style:At.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],XBe=[{type:"small",style:At.SCRIPTSCRIPT},{type:"small",style:At.SCRIPT},{type:"small",style:At.TEXT},{type:"stack"}],jse=[{type:"small",style:At.SCRIPTSCRIPT},{type:"small",style:At.SCRIPT},{type:"small",style:At.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],JBe=function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},Bse=function(e,t,r,s){for(var i=Math.min(2,3-s.style.size),o=i;o<r.length&&r[o].type!=="stack";o++){var a=b4(e,JBe(r[o]),"math"),l=a.height+a.depth;if(r[o].type==="small"){var c=s.havingBaseStyle(r[o].style);l*=c.sizeMultiplier}if(l>t)return r[o]}return r[r.length-1]},Vse=function(e,t,r,s,i,o){e==="<"||e==="\\lt"||e==="⟨"?e="\\langle":(e===">"||e==="\\gt"||e==="⟩")&&(e="\\rangle");var a;Fse.includes(e)?a=ZBe:Lse.includes(e)?a=jse:a=XBe;var l=Bse(e,t,a,s);return l.type==="small"?HBe(e,l.style,r,s,i,o):l.type==="large"?Rse(e,l.size,r,s,i,o):$se(e,t,r,s,i,o)},QBe=function(e,t,r,s,i,o){var a=s.fontMetrics().axisHeight*s.sizeMultiplier,l=901,c=5/s.fontMetrics().ptPerEm,u=Math.max(t-a,r+a),d=Math.max(u/500*l,2*u-c);return Vse(e,d,!0,s,i,o)},nd={sqrtImage:GBe,sizedDelim:YBe,sizeToMaxHeight:w4,customSizedDelim:Vse,leftRightDelim:QBe},zse={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},eVe=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","<",">","\\langle","⟨","\\rangle","⟩","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function K9(n,e){var t=q9(n);if(t&&eVe.includes(t.text))return t;throw t?new De("Invalid delimiter '"+t.text+"' after '"+e.funcName+"'",n):new De("Invalid delimiter type '"+n.type+"'",n)}Ke({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(n,e)=>{var t=K9(e[0],n);return{type:"delimsizing",mode:n.parser.mode,size:zse[n.funcName].size,mclass:zse[n.funcName].mclass,delim:t.text}},htmlBuilder:(n,e)=>n.delim==="."?fe.makeSpan([n.mclass]):nd.sizedDelim(n.delim,n.size,e,n.mode,[n.mclass]),mathmlBuilder:n=>{var e=[];n.delim!=="."&&e.push(Ma(n.delim,n.mode));var t=new Me.MathNode("mo",e);n.mclass==="mopen"||n.mclass==="mclose"?t.setAttribute("fence","true"):t.setAttribute("fence","false"),t.setAttribute("stretchy","true");var r=je(nd.sizeToMaxHeight[n.size]);return t.setAttribute("minsize",r),t.setAttribute("maxsize",r),t}});function Hse(n){if(!n.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}Ke({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(n,e)=>{var t=n.parser.gullet.macros.get("\\current@color");if(t&&typeof t!="string")throw new De("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:n.parser.mode,delim:K9(e[0],n).text,color:t}}}),Ke({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(n,e)=>{var t=K9(e[0],n),r=n.parser;++r.leftrightDepth;var s=r.parseExpression(!1);--r.leftrightDepth,r.expect("\\right",!1);var i=fn(r.parseFunction(),"leftright-right");return{type:"leftright",mode:r.mode,body:s,left:t.text,right:i.delim,rightColor:i.color}},htmlBuilder:(n,e)=>{Hse(n);for(var t=Fs(n.body,e,!0,["mopen","mclose"]),r=0,s=0,i=!1,o=0;o<t.length;o++)t[o].isMiddle?i=!0:(r=Math.max(t[o].height,r),s=Math.max(t[o].depth,s));r*=e.sizeMultiplier,s*=e.sizeMultiplier;var a;if(n.left==="."?a=v4(e,["mopen"]):a=nd.leftRightDelim(n.left,r,s,e,n.mode,["mopen"]),t.unshift(a),i)for(var l=1;l<t.length;l++){var c=t[l],u=c.isMiddle;u&&(t[l]=nd.leftRightDelim(u.delim,r,s,u.options,n.mode,[]))}var d;if(n.right===".")d=v4(e,["mclose"]);else{var f=n.rightColor?e.withColor(n.rightColor):e;d=nd.leftRightDelim(n.right,r,s,f,n.mode,["mclose"])}return t.push(d),fe.makeSpan(["minner"],t,e)},mathmlBuilder:(n,e)=>{Hse(n);var t=go(n.body,e);if(n.left!=="."){var r=new Me.MathNode("mo",[Ma(n.left,n.mode)]);r.setAttribute("fence","true"),t.unshift(r)}if(n.right!=="."){var s=new Me.MathNode("mo",[Ma(n.right,n.mode)]);s.setAttribute("fence","true"),n.rightColor&&s.setAttribute("mathcolor",n.rightColor),t.push(s)}return JP(t)}}),Ke({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(n,e)=>{var t=K9(e[0],n);if(!n.parser.leftrightDepth)throw new De("\\middle without preceding \\left",t);return{type:"middle",mode:n.parser.mode,delim:t.text}},htmlBuilder:(n,e)=>{var t;if(n.delim===".")t=v4(e,[]);else{t=nd.sizedDelim(n.delim,1,e,n.mode,[]);var r={delim:n.delim,options:e};t.isMiddle=r}return t},mathmlBuilder:(n,e)=>{var t=n.delim==="\\vert"||n.delim==="|"?Ma("|","text"):Ma(n.delim,n.mode),r=new Me.MathNode("mo",[t]);return r.setAttribute("fence","true"),r.setAttribute("lspace","0.05em"),r.setAttribute("rspace","0.05em"),r}});var dI=(n,e)=>{var t=fe.wrapFragment(Wn(n.body,e),e),r=n.label.slice(1),s=e.sizeMultiplier,i,o=0,a=er.isCharacterBox(n.body);if(r==="sout")i=fe.makeSpan(["stretchy","sout"]),i.height=e.fontMetrics().defaultRuleThickness/s,o=-.5*e.fontMetrics().xHeight;else if(r==="phase"){var l=Wr({number:.6,unit:"pt"},e),c=Wr({number:.35,unit:"ex"},e),u=e.havingBaseSizing();s=s/u.sizeMultiplier;var d=t.height+t.depth+l+c;t.style.paddingLeft=je(d/2+l);var f=Math.floor(1e3*d*s),p=Wje(f),m=new Xu([new Zh("phase",p)],{width:"400em",height:je(f/1e3),viewBox:"0 0 400000 "+f,preserveAspectRatio:"xMinYMin slice"});i=fe.makeSvgSpan(["hide-tail"],[m],e),i.style.height=je(d),o=t.depth+l+c}else{/cancel/.test(r)?a||t.classes.push("cancel-pad"):r==="angl"?t.classes.push("anglpad"):t.classes.push("boxpad");var y=0,w=0,k=0;/box/.test(r)?(k=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),y=e.fontMetrics().fboxsep+(r==="colorbox"?0:k),w=y):r==="angl"?(k=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),y=4*k,w=Math.max(0,.25-t.depth)):(y=a?.2:0,w=y),i=td.encloseSpan(t,r,y,w,e),/fbox|boxed|fcolorbox/.test(r)?(i.style.borderStyle="solid",i.style.borderWidth=je(k)):r==="angl"&&k!==.049&&(i.style.borderTopWidth=je(k),i.style.borderRightWidth=je(k)),o=t.depth+w,n.backgroundColor&&(i.style.backgroundColor=n.backgroundColor,n.borderColor&&(i.style.borderColor=n.borderColor))}var x;if(n.backgroundColor)x=fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:o},{type:"elem",elem:t,shift:0}]},e);else{var S=/cancel|phase/.test(r)?["svg-align"]:[];x=fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:t,shift:0},{type:"elem",elem:i,shift:o,wrapperClasses:S}]},e)}return/cancel/.test(r)&&(x.height=t.height,x.depth=t.depth),/cancel/.test(r)&&!a?fe.makeSpan(["mord","cancel-lap"],[x],e):fe.makeSpan(["mord"],[x],e)},hI=(n,e)=>{var t=0,r=new Me.MathNode(n.label.indexOf("colorbox")>-1?"mpadded":"menclose",[xr(n.body,e)]);switch(n.label){case"\\cancel":r.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":r.setAttribute("notation","downdiagonalstrike");break;case"\\phase":r.setAttribute("notation","phasorangle");break;case"\\sout":r.setAttribute("notation","horizontalstrike");break;case"\\fbox":r.setAttribute("notation","box");break;case"\\angl":r.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(t=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,r.setAttribute("width","+"+2*t+"pt"),r.setAttribute("height","+"+2*t+"pt"),r.setAttribute("lspace",t+"pt"),r.setAttribute("voffset",t+"pt"),n.label==="\\fcolorbox"){var s=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);r.setAttribute("style","border: "+s+"em solid "+String(n.borderColor))}break;case"\\xcancel":r.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return n.backgroundColor&&r.setAttribute("mathbackground",n.backgroundColor),r};Ke({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(n,e,t){var{parser:r,funcName:s}=n,i=fn(e[0],"color-token").color,o=e[1];return{type:"enclose",mode:r.mode,label:s,backgroundColor:i,body:o}},htmlBuilder:dI,mathmlBuilder:hI}),Ke({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(n,e,t){var{parser:r,funcName:s}=n,i=fn(e[0],"color-token").color,o=fn(e[1],"color-token").color,a=e[2];return{type:"enclose",mode:r.mode,label:s,backgroundColor:o,borderColor:i,body:a}},htmlBuilder:dI,mathmlBuilder:hI}),Ke({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(n,e){var{parser:t}=n;return{type:"enclose",mode:t.mode,label:"\\fbox",body:e[0]}}}),Ke({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(n,e){var{parser:t,funcName:r}=n,s=e[0];return{type:"enclose",mode:t.mode,label:r,body:s}},htmlBuilder:dI,mathmlBuilder:hI}),Ke({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(n,e){var{parser:t}=n;return{type:"enclose",mode:t.mode,label:"\\angl",body:e[0]}}});var qse={};function Nc(n){for(var{type:e,names:t,props:r,handler:s,htmlBuilder:i,mathmlBuilder:o}=n,a={type:e,numArgs:r.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:s},l=0;l<t.length;++l)qse[t[l]]=a;i&&(B9[e]=i),o&&(V9[e]=o)}var Use={};function F(n,e){Use[n]=e}function Wse(n){var e=[];n.consumeSpaces();var t=n.fetch().text;for(t==="\\relax"&&(n.consume(),n.consumeSpaces(),t=n.fetch().text);t==="\\hline"||t==="\\hdashline";)n.consume(),e.push(t==="\\hdashline"),n.consumeSpaces(),t=n.fetch().text;return e}var Y9=n=>{var e=n.parser.settings;if(!e.displayMode)throw new De("{"+n.envName+"} can be used only in display mode.")};function fI(n){if(n.indexOf("ed")===-1)return n.indexOf("*")===-1}function Qh(n,e,t){var{hskipBeforeAndAfter:r,addJot:s,cols:i,arraystretch:o,colSeparationType:a,autoTag:l,singleRow:c,emptySingleRow:u,maxNumCols:d,leqno:f}=e;if(n.gullet.beginGroup(),c||n.gullet.macros.set("\\cr","\\\\\\relax"),!o){var p=n.gullet.expandMacroAsText("\\arraystretch");if(p==null)o=1;else if(o=parseFloat(p),!o||o<0)throw new De("Invalid \\arraystretch: "+p)}n.gullet.beginGroup();var m=[],y=[m],w=[],k=[],x=l!=null?[]:void 0;function S(){l&&n.gullet.macros.set("\\@eqnsw","1",!0)}function _(){x&&(n.gullet.macros.get("\\df@tag")?(x.push(n.subparse([new Xo("\\df@tag")])),n.gullet.macros.set("\\df@tag",void 0,!0)):x.push(!!l&&n.gullet.macros.get("\\@eqnsw")==="1"))}for(S(),k.push(Wse(n));;){var A=n.parseExpression(!1,c?"\\end":"\\\\");n.gullet.endGroup(),n.gullet.beginGroup(),A={type:"ordgroup",mode:n.mode,body:A},t&&(A={type:"styling",mode:n.mode,style:t,body:[A]}),m.push(A);var T=n.fetch().text;if(T==="&"){if(d&&m.length===d){if(c||a)throw new De("Too many tab characters: &",n.nextToken);n.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}n.consume()}else if(T==="\\end"){_(),m.length===1&&A.type==="styling"&&A.body[0].body.length===0&&(y.length>1||!u)&&y.pop(),k.length<y.length+1&&k.push([]);break}else if(T==="\\\\"){n.consume();var O=void 0;n.gullet.future().text!==" "&&(O=n.parseSizeGroup(!0)),w.push(O?O.value:null),_(),k.push(Wse(n)),m=[],y.push(m),S()}else throw new De("Expected & or \\\\ or \\cr or \\end",n.nextToken)}return n.gullet.endGroup(),n.gullet.endGroup(),{type:"array",mode:n.mode,addJot:s,arraystretch:o,body:y,cols:i,rowGaps:w,hskipBeforeAndAfter:r,hLinesBeforeRow:k,colSeparationType:a,tags:x,leqno:f}}function pI(n){return n.slice(0,1)==="d"?"display":"text"}var Mc=function(e,t){var r,s,i=e.body.length,o=e.hLinesBeforeRow,a=0,l=new Array(i),c=[],u=Math.max(t.fontMetrics().arrayRuleWidth,t.minRuleThickness),d=1/t.fontMetrics().ptPerEm,f=5*d;if(e.colSeparationType&&e.colSeparationType==="small"){var p=t.havingStyle(At.SCRIPT).sizeMultiplier;f=.2778*(p/t.sizeMultiplier)}var m=e.colSeparationType==="CD"?Wr({number:3,unit:"ex"},t):12*d,y=3*d,w=e.arraystretch*m,k=.7*w,x=.3*w,S=0;function _(ne){for(var ue=0;ue<ne.length;++ue)ue>0&&(S+=.25),c.push({pos:S,isDashed:ne[ue]})}for(_(o[0]),r=0;r<e.body.length;++r){var A=e.body[r],T=k,O=x;a<A.length&&(a=A.length);var I=new Array(A.length);for(s=0;s<A.length;++s){var R=Wn(A[s],t);O<R.depth&&(O=R.depth),T<R.height&&(T=R.height),I[s]=R}var D=e.rowGaps[r],W=0;D&&(W=Wr(D,t),W>0&&(W+=x,O<W&&(O=W),W=0)),e.addJot&&(O+=y),I.height=T,I.depth=O,S+=T,I.pos=S,S+=O+W,l[r]=I,_(o[r+1])}var H=S/2+t.fontMetrics().axisHeight,re=e.cols||[],ae=[],de,le,X=[];if(e.tags&&e.tags.some(ne=>ne))for(r=0;r<i;++r){var se=l[r],J=se.pos-H,$=e.tags[r],ve=void 0;$===!0?ve=fe.makeSpan(["eqn-num"],[],t):$===!1?ve=fe.makeSpan([],[],t):ve=fe.makeSpan([],Fs($,t,!0),t),ve.depth=se.depth,ve.height=se.height,X.push({type:"elem",elem:ve,shift:J})}for(s=0,le=0;s<a||le<re.length;++s,++le){for(var Pe=re[le]||{},q=!0;Pe.type==="separator";){if(q||(de=fe.makeSpan(["arraycolsep"],[]),de.style.width=je(t.fontMetrics().doubleRuleSep),ae.push(de)),Pe.separator==="|"||Pe.separator===":"){var Xe=Pe.separator==="|"?"solid":"dashed",qe=fe.makeSpan(["vertical-separator"],[],t);qe.style.height=je(S),qe.style.borderRightWidth=je(u),qe.style.borderRightStyle=Xe,qe.style.margin="0 "+je(-u/2);var Ye=S-H;Ye&&(qe.style.verticalAlign=je(-Ye)),ae.push(qe)}else throw new De("Invalid separator type: "+Pe.separator);le++,Pe=re[le]||{},q=!1}if(!(s>=a)){var it=void 0;(s>0||e.hskipBeforeAndAfter)&&(it=er.deflt(Pe.pregap,f),it!==0&&(de=fe.makeSpan(["arraycolsep"],[]),de.style.width=je(it),ae.push(de)));var We=[];for(r=0;r<i;++r){var ot=l[r],ge=ot[s];if(ge){var Ie=ot.pos-H;ge.depth=ot.depth,ge.height=ot.height,We.push({type:"elem",elem:ge,shift:Ie})}}We=fe.makeVList({positionType:"individualShift",children:We},t),We=fe.makeSpan(["col-align-"+(Pe.align||"c")],[We]),ae.push(We),(s<a-1||e.hskipBeforeAndAfter)&&(it=er.deflt(Pe.postgap,f),it!==0&&(de=fe.makeSpan(["arraycolsep"],[]),de.style.width=je(it),ae.push(de)))}}if(l=fe.makeSpan(["mtable"],ae),c.length>0){for(var pt=fe.makeLineSpan("hline",t,u),j=fe.makeLineSpan("hdashline",t,u),Y=[{type:"elem",elem:l,shift:0}];c.length>0;){var ce=c.pop(),be=ce.pos-H;ce.isDashed?Y.push({type:"elem",elem:j,shift:be}):Y.push({type:"elem",elem:pt,shift:be})}l=fe.makeVList({positionType:"individualShift",children:Y},t)}if(X.length===0)return fe.makeSpan(["mord"],[l],t);var xe=fe.makeVList({positionType:"individualShift",children:X},t);return xe=fe.makeSpan(["tag"],[xe],t),fe.makeFragment([l,xe])},tVe={c:"center ",l:"left ",r:"right "},Oc=function(e,t){for(var r=[],s=new Me.MathNode("mtd",[],["mtr-glue"]),i=new Me.MathNode("mtd",[],["mml-eqn-num"]),o=0;o<e.body.length;o++){for(var a=e.body[o],l=[],c=0;c<a.length;c++)l.push(new Me.MathNode("mtd",[xr(a[c],t)]));e.tags&&e.tags[o]&&(l.unshift(s),l.push(s),e.leqno?l.unshift(i):l.push(i)),r.push(new Me.MathNode("mtr",l))}var u=new Me.MathNode("mtable",r),d=e.arraystretch===.5?.1:.16+e.arraystretch-1+(e.addJot?.09:0);u.setAttribute("rowspacing",je(d));var f="",p="";if(e.cols&&e.cols.length>0){var m=e.cols,y="",w=!1,k=0,x=m.length;m[0].type==="separator"&&(f+="top ",k=1),m[m.length-1].type==="separator"&&(f+="bottom ",x-=1);for(var S=k;S<x;S++)m[S].type==="align"?(p+=tVe[m[S].align],w&&(y+="none "),w=!0):m[S].type==="separator"&&w&&(y+=m[S].separator==="|"?"solid ":"dashed ",w=!1);u.setAttribute("columnalign",p.trim()),/[sd]/.test(y)&&u.setAttribute("columnlines",y.trim())}if(e.colSeparationType==="align"){for(var _=e.cols||[],A="",T=1;T<_.length;T++)A+=T%2?"0em ":"1em ";u.setAttribute("columnspacing",A.trim())}else e.colSeparationType==="alignat"||e.colSeparationType==="gather"?u.setAttribute("columnspacing","0em"):e.colSeparationType==="small"?u.setAttribute("columnspacing","0.2778em"):e.colSeparationType==="CD"?u.setAttribute("columnspacing","0.5em"):u.setAttribute("columnspacing","1em");var O="",I=e.hLinesBeforeRow;f+=I[0].length>0?"left ":"",f+=I[I.length-1].length>0?"right ":"";for(var R=1;R<I.length-1;R++)O+=I[R].length===0?"none ":I[R][0]?"dashed ":"solid ";return/[sd]/.test(O)&&u.setAttribute("rowlines",O.trim()),f!==""&&(u=new Me.MathNode("menclose",[u]),u.setAttribute("notation",f.trim())),e.arraystretch&&e.arraystretch<1&&(u=new Me.MathNode("mstyle",[u]),u.setAttribute("scriptlevel","1")),u},Gse=function(e,t){e.envName.indexOf("ed")===-1&&Y9(e);var r=[],s=e.envName.indexOf("at")>-1?"alignat":"align",i=e.envName==="split",o=Qh(e.parser,{cols:r,addJot:!0,autoTag:i?void 0:fI(e.envName),emptySingleRow:!0,colSeparationType:s,maxNumCols:i?2:void 0,leqno:e.parser.settings.leqno},"display"),a,l=0,c={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&t[0].type==="ordgroup"){for(var u="",d=0;d<t[0].body.length;d++){var f=fn(t[0].body[d],"textord");u+=f.text}a=Number(u),l=a*2}var p=!l;o.body.forEach(function(k){for(var x=1;x<k.length;x+=2){var S=fn(k[x],"styling"),_=fn(S.body[0],"ordgroup");_.body.unshift(c)}if(p)l<k.length&&(l=k.length);else{var A=k.length/2;if(a<A)throw new De("Too many math in a row: "+("expected "+a+", but got "+A),k[0])}});for(var m=0;m<l;++m){var y="r",w=0;m%2===1?y="l":m>0&&p&&(w=1),r[m]={type:"align",align:y,pregap:w,postgap:0}}return o.colSeparationType=p?"align":"alignat",o};Nc({type:"array",names:["array","darray"],props:{numArgs:1},handler(n,e){var t=q9(e[0]),r=t?[e[0]]:fn(e[0],"ordgroup").body,s=r.map(function(o){var a=tI(o),l=a.text;if("lcr".indexOf(l)!==-1)return{type:"align",align:l};if(l==="|")return{type:"separator",separator:"|"};if(l===":")return{type:"separator",separator:":"};throw new De("Unknown column alignment: "+l,o)}),i={cols:s,hskipBeforeAndAfter:!0,maxNumCols:s.length};return Qh(n.parser,i,pI(n.envName))},htmlBuilder:Mc,mathmlBuilder:Oc}),Nc({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(n){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[n.envName.replace("*","")],t="c",r={hskipBeforeAndAfter:!1,cols:[{type:"align",align:t}]};if(n.envName.charAt(n.envName.length-1)==="*"){var s=n.parser;if(s.consumeSpaces(),s.fetch().text==="["){if(s.consume(),s.consumeSpaces(),t=s.fetch().text,"lcr".indexOf(t)===-1)throw new De("Expected l or c or r",s.nextToken);s.consume(),s.consumeSpaces(),s.expect("]"),s.consume(),r.cols=[{type:"align",align:t}]}}var i=Qh(n.parser,r,pI(n.envName)),o=Math.max(0,...i.body.map(a=>a.length));return i.cols=new Array(o).fill({type:"align",align:t}),e?{type:"leftright",mode:n.mode,body:[i],left:e[0],right:e[1],rightColor:void 0}:i},htmlBuilder:Mc,mathmlBuilder:Oc}),Nc({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(n){var e={arraystretch:.5},t=Qh(n.parser,e,"script");return t.colSeparationType="small",t},htmlBuilder:Mc,mathmlBuilder:Oc}),Nc({type:"array",names:["subarray"],props:{numArgs:1},handler(n,e){var t=q9(e[0]),r=t?[e[0]]:fn(e[0],"ordgroup").body,s=r.map(function(o){var a=tI(o),l=a.text;if("lc".indexOf(l)!==-1)return{type:"align",align:l};throw new De("Unknown column alignment: "+l,o)});if(s.length>1)throw new De("{subarray} can contain only one column");var i={cols:s,hskipBeforeAndAfter:!1,arraystretch:.5};if(i=Qh(n.parser,i,"script"),i.body.length>0&&i.body[0].length>1)throw new De("{subarray} can contain only one column");return i},htmlBuilder:Mc,mathmlBuilder:Oc}),Nc({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(n){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},t=Qh(n.parser,e,pI(n.envName));return{type:"leftright",mode:n.mode,body:[t],left:n.envName.indexOf("r")>-1?".":"\\{",right:n.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Mc,mathmlBuilder:Oc}),Nc({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:Gse,htmlBuilder:Mc,mathmlBuilder:Oc}),Nc({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(n){["gather","gather*"].includes(n.envName)&&Y9(n);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:fI(n.envName),emptySingleRow:!0,leqno:n.parser.settings.leqno};return Qh(n.parser,e,"display")},htmlBuilder:Mc,mathmlBuilder:Oc}),Nc({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:Gse,htmlBuilder:Mc,mathmlBuilder:Oc}),Nc({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(n){Y9(n);var e={autoTag:fI(n.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:n.parser.settings.leqno};return Qh(n.parser,e,"display")},htmlBuilder:Mc,mathmlBuilder:Oc}),Nc({type:"array",names:["CD"],props:{numArgs:0},handler(n){return Y9(n),VBe(n.parser)},htmlBuilder:Mc,mathmlBuilder:Oc}),F("\\nonumber","\\gdef\\@eqnsw{0}"),F("\\notag","\\nonumber"),Ke({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(n,e){throw new De(n.funcName+" valid only within array environment")}});var Kse=qse;Ke({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(n,e){var{parser:t,funcName:r}=n,s=e[0];if(s.type!=="ordgroup")throw new De("Invalid environment name",s);for(var i="",o=0;o<s.body.length;++o)i+=fn(s.body[o],"textord").text;if(r==="\\begin"){if(!Kse.hasOwnProperty(i))throw new De("No such environment: "+i,s);var a=Kse[i],{args:l,optArgs:c}=t.parseArguments("\\begin{"+i+"}",a),u={mode:t.mode,envName:i,parser:t},d=a.handler(u,l,c);t.expect("\\end",!1);var f=t.nextToken,p=fn(t.parseFunction(),"environment");if(p.name!==i)throw new De("Mismatch: \\begin{"+i+"} matched by \\end{"+p.name+"}",f);return d}return{type:"environment",mode:t.mode,name:i,nameGroup:s}}});var Yse=(n,e)=>{var t=n.font,r=e.withFont(t);return Wn(n.body,r)},Zse=(n,e)=>{var t=n.font,r=e.withFont(t);return xr(n.body,r)},Xse={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};Ke({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(n,e)=>{var{parser:t,funcName:r}=n,s=z9(e[0]),i=r;return i in Xse&&(i=Xse[i]),{type:"font",mode:t.mode,font:i.slice(1),body:s}},htmlBuilder:Yse,mathmlBuilder:Zse}),Ke({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(n,e)=>{var{parser:t}=n,r=e[0],s=er.isCharacterBox(r);return{type:"mclass",mode:t.mode,mclass:W9(r),body:[{type:"font",mode:t.mode,font:"boldsymbol",body:r}],isCharacterBox:s}}}),Ke({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(n,e)=>{var{parser:t,funcName:r,breakOnTokenText:s}=n,{mode:i}=t,o=t.parseExpression(!0,s),a="math"+r.slice(1);return{type:"font",mode:i,font:a,body:{type:"ordgroup",mode:t.mode,body:o}}},htmlBuilder:Yse,mathmlBuilder:Zse});var Jse=(n,e)=>{var t=e;return n==="display"?t=t.id>=At.SCRIPT.id?t.text():At.DISPLAY:n==="text"&&t.size===At.DISPLAY.size?t=At.TEXT:n==="script"?t=At.SCRIPT:n==="scriptscript"&&(t=At.SCRIPTSCRIPT),t},mI=(n,e)=>{var t=Jse(n.size,e.style),r=t.fracNum(),s=t.fracDen(),i;i=e.havingStyle(r);var o=Wn(n.numer,i,e);if(n.continued){var a=8.5/e.fontMetrics().ptPerEm,l=3.5/e.fontMetrics().ptPerEm;o.height=o.height<a?a:o.height,o.depth=o.depth<l?l:o.depth}i=e.havingStyle(s);var c=Wn(n.denom,i,e),u,d,f;n.hasBarLine?(n.barSize?(d=Wr(n.barSize,e),u=fe.makeLineSpan("frac-line",e,d)):u=fe.makeLineSpan("frac-line",e),d=u.height,f=u.height):(u=null,d=0,f=e.fontMetrics().defaultRuleThickness);var p,m,y;t.size===At.DISPLAY.size||n.size==="display"?(p=e.fontMetrics().num1,d>0?m=3*f:m=7*f,y=e.fontMetrics().denom1):(d>0?(p=e.fontMetrics().num2,m=f):(p=e.fontMetrics().num3,m=3*f),y=e.fontMetrics().denom2);var w;if(u){var x=e.fontMetrics().axisHeight;p-o.depth-(x+.5*d)<m&&(p+=m-(p-o.depth-(x+.5*d))),x-.5*d-(c.height-y)<m&&(y+=m-(x-.5*d-(c.height-y)));var S=-(x-.5*d);w=fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:c,shift:y},{type:"elem",elem:u,shift:S},{type:"elem",elem:o,shift:-p}]},e)}else{var k=p-o.depth-(c.height-y);k<m&&(p+=.5*(m-k),y+=.5*(m-k)),w=fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:c,shift:y},{type:"elem",elem:o,shift:-p}]},e)}i=e.havingStyle(t),w.height*=i.sizeMultiplier/e.sizeMultiplier,w.depth*=i.sizeMultiplier/e.sizeMultiplier;var _;t.size===At.DISPLAY.size?_=e.fontMetrics().delim1:t.size===At.SCRIPTSCRIPT.size?_=e.havingStyle(At.SCRIPT).fontMetrics().delim2:_=e.fontMetrics().delim2;var A,T;return n.leftDelim==null?A=v4(e,["mopen"]):A=nd.customSizedDelim(n.leftDelim,_,!0,e.havingStyle(t),n.mode,["mopen"]),n.continued?T=fe.makeSpan([]):n.rightDelim==null?T=v4(e,["mclose"]):T=nd.customSizedDelim(n.rightDelim,_,!0,e.havingStyle(t),n.mode,["mclose"]),fe.makeSpan(["mord"].concat(i.sizingClasses(e)),[A,fe.makeSpan(["mfrac"],[w]),T],e)},gI=(n,e)=>{var t=new Me.MathNode("mfrac",[xr(n.numer,e),xr(n.denom,e)]);if(!n.hasBarLine)t.setAttribute("linethickness","0px");else if(n.barSize){var r=Wr(n.barSize,e);t.setAttribute("linethickness",je(r))}var s=Jse(n.size,e.style);if(s.size!==e.style.size){t=new Me.MathNode("mstyle",[t]);var i=s.size===At.DISPLAY.size?"true":"false";t.setAttribute("displaystyle",i),t.setAttribute("scriptlevel","0")}if(n.leftDelim!=null||n.rightDelim!=null){var o=[];if(n.leftDelim!=null){var a=new Me.MathNode("mo",[new Me.TextNode(n.leftDelim.replace("\\",""))]);a.setAttribute("fence","true"),o.push(a)}if(o.push(t),n.rightDelim!=null){var l=new Me.MathNode("mo",[new Me.TextNode(n.rightDelim.replace("\\",""))]);l.setAttribute("fence","true"),o.push(l)}return JP(o)}return t};Ke({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(n,e)=>{var{parser:t,funcName:r}=n,s=e[0],i=e[1],o,a=null,l=null,c="auto";switch(r){case"\\dfrac":case"\\frac":case"\\tfrac":o=!0;break;case"\\\\atopfrac":o=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":o=!1,a="(",l=")";break;case"\\\\bracefrac":o=!1,a="\\{",l="\\}";break;case"\\\\brackfrac":o=!1,a="[",l="]";break;default:throw new Error("Unrecognized genfrac command")}switch(r){case"\\dfrac":case"\\dbinom":c="display";break;case"\\tfrac":case"\\tbinom":c="text";break}return{type:"genfrac",mode:t.mode,continued:!1,numer:s,denom:i,hasBarLine:o,leftDelim:a,rightDelim:l,size:c,barSize:null}},htmlBuilder:mI,mathmlBuilder:gI}),Ke({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:(n,e)=>{var{parser:t,funcName:r}=n,s=e[0],i=e[1];return{type:"genfrac",mode:t.mode,continued:!0,numer:s,denom:i,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}}}),Ke({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(n){var{parser:e,funcName:t,token:r}=n,s;switch(t){case"\\over":s="\\frac";break;case"\\choose":s="\\binom";break;case"\\atop":s="\\\\atopfrac";break;case"\\brace":s="\\\\bracefrac";break;case"\\brack":s="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:s,token:r}}});var Qse=["display","text","script","scriptscript"],eie=function(e){var t=null;return e.length>0&&(t=e,t=t==="."?null:t),t};Ke({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(n,e){var{parser:t}=n,r=e[4],s=e[5],i=z9(e[0]),o=i.type==="atom"&&i.family==="open"?eie(i.text):null,a=z9(e[1]),l=a.type==="atom"&&a.family==="close"?eie(a.text):null,c=fn(e[2],"size"),u,d=null;c.isBlank?u=!0:(d=c.value,u=d.number>0);var f="auto",p=e[3];if(p.type==="ordgroup"){if(p.body.length>0){var m=fn(p.body[0],"textord");f=Qse[Number(m.text)]}}else p=fn(p,"textord"),f=Qse[Number(p.text)];return{type:"genfrac",mode:t.mode,numer:r,denom:s,continued:!1,hasBarLine:u,barSize:d,leftDelim:o,rightDelim:l,size:f}},htmlBuilder:mI,mathmlBuilder:gI}),Ke({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(n,e){var{parser:t,funcName:r,token:s}=n;return{type:"infix",mode:t.mode,replaceWith:"\\\\abovefrac",size:fn(e[0],"size").value,token:s}}}),Ke({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(n,e)=>{var{parser:t,funcName:r}=n,s=e[0],i=Oje(fn(e[1],"infix").size),o=e[2],a=i.number>0;return{type:"genfrac",mode:t.mode,numer:s,denom:o,continued:!1,hasBarLine:a,barSize:i,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:mI,mathmlBuilder:gI});var tie=(n,e)=>{var t=e.style,r,s;n.type==="supsub"?(r=n.sup?Wn(n.sup,e.havingStyle(t.sup()),e):Wn(n.sub,e.havingStyle(t.sub()),e),s=fn(n.base,"horizBrace")):s=fn(n,"horizBrace");var i=Wn(s.base,e.havingBaseStyle(At.DISPLAY)),o=td.svgSpan(s,e),a;if(s.isOver?(a=fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:.1},{type:"elem",elem:o}]},e),a.children[0].children[0].children[1].classes.push("svg-align")):(a=fe.makeVList({positionType:"bottom",positionData:i.depth+.1+o.height,children:[{type:"elem",elem:o},{type:"kern",size:.1},{type:"elem",elem:i}]},e),a.children[0].children[0].children[0].classes.push("svg-align")),r){var l=fe.makeSpan(["mord",s.isOver?"mover":"munder"],[a],e);s.isOver?a=fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:r}]},e):a=fe.makeVList({positionType:"bottom",positionData:l.depth+.2+r.height+r.depth,children:[{type:"elem",elem:r},{type:"kern",size:.2},{type:"elem",elem:l}]},e)}return fe.makeSpan(["mord",s.isOver?"mover":"munder"],[a],e)},nVe=(n,e)=>{var t=td.mathMLnode(n.label);return new Me.MathNode(n.isOver?"mover":"munder",[xr(n.base,e),t])};Ke({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(n,e){var{parser:t,funcName:r}=n;return{type:"horizBrace",mode:t.mode,label:r,isOver:/^\\over/.test(r),base:e[0]}},htmlBuilder:tie,mathmlBuilder:nVe}),Ke({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(n,e)=>{var{parser:t}=n,r=e[1],s=fn(e[0],"url").url;return t.settings.isTrusted({command:"\\href",url:s})?{type:"href",mode:t.mode,href:s,body:cs(r)}:t.formatUnsupportedCmd("\\href")},htmlBuilder:(n,e)=>{var t=Fs(n.body,e,!1);return fe.makeAnchor(n.href,[],t,e)},mathmlBuilder:(n,e)=>{var t=Jh(n.body,e);return t instanceof Qo||(t=new Qo("mrow",[t])),t.setAttribute("href",n.href),t}}),Ke({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(n,e)=>{var{parser:t}=n,r=fn(e[0],"url").url;if(!t.settings.isTrusted({command:"\\url",url:r}))return t.formatUnsupportedCmd("\\url");for(var s=[],i=0;i<r.length;i++){var o=r[i];o==="~"&&(o="\\textasciitilde"),s.push({type:"textord",mode:"text",text:o})}var a={type:"text",mode:t.mode,font:"\\texttt",body:s};return{type:"href",mode:t.mode,href:r,body:cs(a)}}}),Ke({type:"hbox",names:["\\hbox"],props:{numArgs:1,argTypes:["text"],allowedInText:!0,primitive:!0},handler(n,e){var{parser:t}=n;return{type:"hbox",mode:t.mode,body:cs(e[0])}},htmlBuilder(n,e){var t=Fs(n.body,e,!1);return fe.makeFragment(t)},mathmlBuilder(n,e){return new Me.MathNode("mrow",go(n.body,e))}}),Ke({type:"html",names:["\\htmlClass","\\htmlId","\\htmlStyle","\\htmlData"],props:{numArgs:2,argTypes:["raw","original"],allowedInText:!0},handler:(n,e)=>{var{parser:t,funcName:r,token:s}=n,i=fn(e[0],"raw").string,o=e[1];t.settings.strict&&t.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var a,l={};switch(r){case"\\htmlClass":l.class=i,a={command:"\\htmlClass",class:i};break;case"\\htmlId":l.id=i,a={command:"\\htmlId",id:i};break;case"\\htmlStyle":l.style=i,a={command:"\\htmlStyle",style:i};break;case"\\htmlData":{for(var c=i.split(","),u=0;u<c.length;u++){var d=c[u],f=d.indexOf("=");if(f<0)throw new De("\\htmlData key/value '"+d+"' missing equals sign");var p=d.slice(0,f),m=d.slice(f+1);l["data-"+p.trim()]=m}a={command:"\\htmlData",attributes:l};break}default:throw new Error("Unrecognized html command")}return t.settings.isTrusted(a)?{type:"html",mode:t.mode,attributes:l,body:cs(o)}:t.formatUnsupportedCmd(r)},htmlBuilder:(n,e)=>{var t=Fs(n.body,e,!1),r=["enclosing"];n.attributes.class&&r.push(...n.attributes.class.trim().split(/\s+/));var s=fe.makeSpan(r,t,e);for(var i in n.attributes)i!=="class"&&n.attributes.hasOwnProperty(i)&&s.setAttribute(i,n.attributes[i]);return s},mathmlBuilder:(n,e)=>Jh(n.body,e)}),Ke({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:(n,e)=>{var{parser:t}=n;return{type:"htmlmathml",mode:t.mode,html:cs(e[0]),mathml:cs(e[1])}},htmlBuilder:(n,e)=>{var t=Fs(n.html,e,!1);return fe.makeFragment(t)},mathmlBuilder:(n,e)=>Jh(n.mathml,e)});var yI=function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var t=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!t)throw new De("Invalid size: '"+e+"' in \\includegraphics");var r={number:+(t[1]+t[2]),unit:t[3]};if(!rse(r))throw new De("Invalid unit: '"+r.unit+"' in \\includegraphics.");return r};Ke({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(n,e,t)=>{var{parser:r}=n,s={number:0,unit:"em"},i={number:.9,unit:"em"},o={number:0,unit:"em"},a="";if(t[0])for(var l=fn(t[0],"raw").string,c=l.split(","),u=0;u<c.length;u++){var d=c[u].split("=");if(d.length===2){var f=d[1].trim();switch(d[0].trim()){case"alt":a=f;break;case"width":s=yI(f);break;case"height":i=yI(f);break;case"totalheight":o=yI(f);break;default:throw new De("Invalid key: '"+d[0]+"' in \\includegraphics.")}}}var p=fn(e[0],"url").url;return a===""&&(a=p,a=a.replace(/^.*[\\/]/,""),a=a.substring(0,a.lastIndexOf("."))),r.settings.isTrusted({command:"\\includegraphics",url:p})?{type:"includegraphics",mode:r.mode,alt:a,width:s,height:i,totalheight:o,src:p}:r.formatUnsupportedCmd("\\includegraphics")},htmlBuilder:(n,e)=>{var t=Wr(n.height,e),r=0;n.totalheight.number>0&&(r=Wr(n.totalheight,e)-t);var s=0;n.width.number>0&&(s=Wr(n.width,e));var i={height:je(t+r)};s>0&&(i.width=je(s)),r>0&&(i.verticalAlign=je(-r));var o=new nBe(n.src,n.alt,i);return o.height=t,o.depth=r,o},mathmlBuilder:(n,e)=>{var t=new Me.MathNode("mglyph",[]);t.setAttribute("alt",n.alt);var r=Wr(n.height,e),s=0;if(n.totalheight.number>0&&(s=Wr(n.totalheight,e)-r,t.setAttribute("valign",je(-s))),t.setAttribute("height",je(r+s)),n.width.number>0){var i=Wr(n.width,e);t.setAttribute("width",je(i))}return t.setAttribute("src",n.src),t}}),Ke({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(n,e){var{parser:t,funcName:r}=n,s=fn(e[0],"size");if(t.settings.strict){var i=r[1]==="m",o=s.value.unit==="mu";i?(o||t.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+r+" supports only mu units, "+("not "+s.value.unit+" units")),t.mode!=="math"&&t.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+r+" works only in math mode")):o&&t.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+r+" doesn't support mu units")}return{type:"kern",mode:t.mode,dimension:s.value}},htmlBuilder(n,e){return fe.makeGlue(n.dimension,e)},mathmlBuilder(n,e){var t=Wr(n.dimension,e);return new Me.SpaceNode(t)}}),Ke({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(n,e)=>{var{parser:t,funcName:r}=n,s=e[0];return{type:"lap",mode:t.mode,alignment:r.slice(5),body:s}},htmlBuilder:(n,e)=>{var t;n.alignment==="clap"?(t=fe.makeSpan([],[Wn(n.body,e)]),t=fe.makeSpan(["inner"],[t],e)):t=fe.makeSpan(["inner"],[Wn(n.body,e)]);var r=fe.makeSpan(["fix"],[]),s=fe.makeSpan([n.alignment],[t,r],e),i=fe.makeSpan(["strut"]);return i.style.height=je(s.height+s.depth),s.depth&&(i.style.verticalAlign=je(-s.depth)),s.children.unshift(i),s=fe.makeSpan(["thinbox"],[s],e),fe.makeSpan(["mord","vbox"],[s],e)},mathmlBuilder:(n,e)=>{var t=new Me.MathNode("mpadded",[xr(n.body,e)]);if(n.alignment!=="rlap"){var r=n.alignment==="llap"?"-1":"-0.5";t.setAttribute("lspace",r+"width")}return t.setAttribute("width","0px"),t}}),Ke({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(n,e){var{funcName:t,parser:r}=n,s=r.mode;r.switchMode("math");var i=t==="\\("?"\\)":"$",o=r.parseExpression(!1,i);return r.expect(i),r.switchMode(s),{type:"styling",mode:r.mode,style:"text",body:o}}}),Ke({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(n,e){throw new De("Mismatched "+n.funcName)}});var nie=(n,e)=>{switch(e.style.size){case At.DISPLAY.size:return n.display;case At.TEXT.size:return n.text;case At.SCRIPT.size:return n.script;case At.SCRIPTSCRIPT.size:return n.scriptscript;default:return n.text}};Ke({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(n,e)=>{var{parser:t}=n;return{type:"mathchoice",mode:t.mode,display:cs(e[0]),text:cs(e[1]),script:cs(e[2]),scriptscript:cs(e[3])}},htmlBuilder:(n,e)=>{var t=nie(n,e),r=Fs(t,e,!1);return fe.makeFragment(r)},mathmlBuilder:(n,e)=>{var t=nie(n,e);return Jh(t,e)}});var rie=(n,e,t,r,s,i,o)=>{n=fe.makeSpan([],[n]);var a=t&&er.isCharacterBox(t),l,c;if(e){var u=Wn(e,r.havingStyle(s.sup()),r);c={elem:u,kern:Math.max(r.fontMetrics().bigOpSpacing1,r.fontMetrics().bigOpSpacing3-u.depth)}}if(t){var d=Wn(t,r.havingStyle(s.sub()),r);l={elem:d,kern:Math.max(r.fontMetrics().bigOpSpacing2,r.fontMetrics().bigOpSpacing4-d.height)}}var f;if(c&&l){var p=r.fontMetrics().bigOpSpacing5+l.elem.height+l.elem.depth+l.kern+n.depth+o;f=fe.makeVList({positionType:"bottom",positionData:p,children:[{type:"kern",size:r.fontMetrics().bigOpSpacing5},{type:"elem",elem:l.elem,marginLeft:je(-i)},{type:"kern",size:l.kern},{type:"elem",elem:n},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:je(i)},{type:"kern",size:r.fontMetrics().bigOpSpacing5}]},r)}else if(l){var m=n.height-o;f=fe.makeVList({positionType:"top",positionData:m,children:[{type:"kern",size:r.fontMetrics().bigOpSpacing5},{type:"elem",elem:l.elem,marginLeft:je(-i)},{type:"kern",size:l.kern},{type:"elem",elem:n}]},r)}else if(c){var y=n.depth+o;f=fe.makeVList({positionType:"bottom",positionData:y,children:[{type:"elem",elem:n},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:je(i)},{type:"kern",size:r.fontMetrics().bigOpSpacing5}]},r)}else return n;var w=[f];if(l&&i!==0&&!a){var k=fe.makeSpan(["mspace"],[],r);k.style.marginRight=je(i),w.unshift(k)}return fe.makeSpan(["mop","op-limits"],w,r)},sie=["\\smallint"],Z1=(n,e)=>{var t,r,s=!1,i;n.type==="supsub"?(t=n.sup,r=n.sub,i=fn(n.base,"op"),s=!0):i=fn(n,"op");var o=e.style,a=!1;o.size===At.DISPLAY.size&&i.symbol&&!sie.includes(i.name)&&(a=!0);var l;if(i.symbol){var c=a?"Size2-Regular":"Size1-Regular",u="";if((i.name==="\\oiint"||i.name==="\\oiiint")&&(u=i.name.slice(1),i.name=u==="oiint"?"\\iint":"\\iiint"),l=fe.makeSymbol(i.name,c,"math",e,["mop","op-symbol",a?"large-op":"small-op"]),u.length>0){var d=l.italic,f=fe.staticSvg(u+"Size"+(a?"2":"1"),e);l=fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:l,shift:0},{type:"elem",elem:f,shift:a?.08:0}]},e),i.name="\\"+u,l.classes.unshift("mop"),l.italic=d}}else if(i.body){var p=Fs(i.body,e,!0);p.length===1&&p[0]instanceof Na?(l=p[0],l.classes[0]="mop"):l=fe.makeSpan(["mop"],p,e)}else{for(var m=[],y=1;y<i.name.length;y++)m.push(fe.mathsym(i.name[y],i.mode,e));l=fe.makeSpan(["mop"],m,e)}var w=0,k=0;return(l instanceof Na||i.name==="\\oiint"||i.name==="\\oiiint")&&!i.suppressBaseShift&&(w=(l.height-l.depth)/2-e.fontMetrics().axisHeight,k=l.italic),s?rie(l,t,r,e,o,k,w):(w&&(l.style.position="relative",l.style.top=je(w)),l)},x4=(n,e)=>{var t;if(n.symbol)t=new Qo("mo",[Ma(n.name,n.mode)]),sie.includes(n.name)&&t.setAttribute("largeop","false");else if(n.body)t=new Qo("mo",go(n.body,e));else{t=new Qo("mi",[new Ac(n.name.slice(1))]);var r=new Qo("mo",[Ma("⁡","text")]);n.parentIsSupSub?t=new Qo("mrow",[t,r]):t=xse([t,r])}return t},rVe={"∏":"\\prod","∐":"\\coprod","∑":"\\sum","⋀":"\\bigwedge","⋁":"\\bigvee","⋂":"\\bigcap","⋃":"\\bigcup","⨀":"\\bigodot","⨁":"\\bigoplus","⨂":"\\bigotimes","⨄":"\\biguplus","⨆":"\\bigsqcup"};Ke({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","∏","∐","∑","⋀","⋁","⋂","⋃","⨀","⨁","⨂","⨄","⨆"],props:{numArgs:0},handler:(n,e)=>{var{parser:t,funcName:r}=n,s=r;return s.length===1&&(s=rVe[s]),{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:s}},htmlBuilder:Z1,mathmlBuilder:x4}),Ke({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(n,e)=>{var{parser:t}=n,r=e[0];return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:cs(r)}},htmlBuilder:Z1,mathmlBuilder:x4});var sVe={"∫":"\\int","∬":"\\iint","∭":"\\iiint","∮":"\\oint","∯":"\\oiint","∰":"\\oiiint"};Ke({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(n){var{parser:e,funcName:t}=n;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:t}},htmlBuilder:Z1,mathmlBuilder:x4}),Ke({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(n){var{parser:e,funcName:t}=n;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:t}},htmlBuilder:Z1,mathmlBuilder:x4}),Ke({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","∫","∬","∭","∮","∯","∰"],props:{numArgs:0,allowedInArgument:!0},handler(n){var{parser:e,funcName:t}=n,r=t;return r.length===1&&(r=sVe[r]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:r}},htmlBuilder:Z1,mathmlBuilder:x4});var iie=(n,e)=>{var t,r,s=!1,i;n.type==="supsub"?(t=n.sup,r=n.sub,i=fn(n.base,"operatorname"),s=!0):i=fn(n,"operatorname");var o;if(i.body.length>0){for(var a=i.body.map(d=>{var f=d.text;return typeof f=="string"?{type:"textord",mode:d.mode,text:f}:d}),l=Fs(a,e.withFont("mathrm"),!0),c=0;c<l.length;c++){var u=l[c];u instanceof Na&&(u.text=u.text.replace(/\u2212/,"-").replace(/\u2217/,"*"))}o=fe.makeSpan(["mop"],l,e)}else o=fe.makeSpan(["mop"],[],e);return s?rie(o,t,r,e,e.style,0,0):o},iVe=(n,e)=>{for(var t=go(n.body,e.withFont("mathrm")),r=!0,s=0;s<t.length;s++){var i=t[s];if(!(i instanceof Me.SpaceNode))if(i instanceof Me.MathNode)switch(i.type){case"mi":case"mn":case"ms":case"mspace":case"mtext":break;case"mo":{var o=i.children[0];i.children.length===1&&o instanceof Me.TextNode?o.text=o.text.replace(/\u2212/,"-").replace(/\u2217/,"*"):r=!1;break}default:r=!1}else r=!1}if(r){var a=t.map(u=>u.toText()).join("");t=[new Me.TextNode(a)]}var l=new Me.MathNode("mi",t);l.setAttribute("mathvariant","normal");var c=new Me.MathNode("mo",[Ma("⁡","text")]);return n.parentIsSupSub?new Me.MathNode("mrow",[l,c]):Me.newDocumentFragment([l,c])};Ke({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:(n,e)=>{var{parser:t,funcName:r}=n,s=e[0];return{type:"operatorname",mode:t.mode,body:cs(s),alwaysHandleSupSub:r==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},htmlBuilder:iie,mathmlBuilder:iVe}),F("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@"),j0({type:"ordgroup",htmlBuilder(n,e){return n.semisimple?fe.makeFragment(Fs(n.body,e,!1)):fe.makeSpan(["mord"],Fs(n.body,e,!0),e)},mathmlBuilder(n,e){return Jh(n.body,e,!0)}}),Ke({type:"overline",names:["\\overline"],props:{numArgs:1},handler(n,e){var{parser:t}=n,r=e[0];return{type:"overline",mode:t.mode,body:r}},htmlBuilder(n,e){var t=Wn(n.body,e.havingCrampedStyle()),r=fe.makeLineSpan("overline-line",e),s=e.fontMetrics().defaultRuleThickness,i=fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:t},{type:"kern",size:3*s},{type:"elem",elem:r},{type:"kern",size:s}]},e);return fe.makeSpan(["mord","overline"],[i],e)},mathmlBuilder(n,e){var t=new Me.MathNode("mo",[new Me.TextNode("‾")]);t.setAttribute("stretchy","true");var r=new Me.MathNode("mover",[xr(n.body,e),t]);return r.setAttribute("accent","true"),r}}),Ke({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(n,e)=>{var{parser:t}=n,r=e[0];return{type:"phantom",mode:t.mode,body:cs(r)}},htmlBuilder:(n,e)=>{var t=Fs(n.body,e.withPhantom(),!1);return fe.makeFragment(t)},mathmlBuilder:(n,e)=>{var t=go(n.body,e);return new Me.MathNode("mphantom",t)}}),Ke({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:(n,e)=>{var{parser:t}=n,r=e[0];return{type:"hphantom",mode:t.mode,body:r}},htmlBuilder:(n,e)=>{var t=fe.makeSpan([],[Wn(n.body,e.withPhantom())]);if(t.height=0,t.depth=0,t.children)for(var r=0;r<t.children.length;r++)t.children[r].height=0,t.children[r].depth=0;return t=fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:t}]},e),fe.makeSpan(["mord"],[t],e)},mathmlBuilder:(n,e)=>{var t=go(cs(n.body),e),r=new Me.MathNode("mphantom",t),s=new Me.MathNode("mpadded",[r]);return s.setAttribute("height","0px"),s.setAttribute("depth","0px"),s}}),Ke({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(n,e)=>{var{parser:t}=n,r=e[0];return{type:"vphantom",mode:t.mode,body:r}},htmlBuilder:(n,e)=>{var t=fe.makeSpan(["inner"],[Wn(n.body,e.withPhantom())]),r=fe.makeSpan(["fix"],[]);return fe.makeSpan(["mord","rlap"],[t,r],e)},mathmlBuilder:(n,e)=>{var t=go(cs(n.body),e),r=new Me.MathNode("mphantom",t),s=new Me.MathNode("mpadded",[r]);return s.setAttribute("width","0px"),s}}),Ke({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(n,e){var{parser:t}=n,r=fn(e[0],"size").value,s=e[1];return{type:"raisebox",mode:t.mode,dy:r,body:s}},htmlBuilder(n,e){var t=Wn(n.body,e),r=Wr(n.dy,e);return fe.makeVList({positionType:"shift",positionData:-r,children:[{type:"elem",elem:t}]},e)},mathmlBuilder(n,e){var t=new Me.MathNode("mpadded",[xr(n.body,e)]),r=n.dy.number+n.dy.unit;return t.setAttribute("voffset",r),t}}),Ke({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0,allowedInArgument:!0},handler(n){var{parser:e}=n;return{type:"internal",mode:e.mode}}}),Ke({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler(n,e,t){var{parser:r}=n,s=t[0],i=fn(e[0],"size"),o=fn(e[1],"size");return{type:"rule",mode:r.mode,shift:s&&fn(s,"size").value,width:i.value,height:o.value}},htmlBuilder(n,e){var t=fe.makeSpan(["mord","rule"],[],e),r=Wr(n.width,e),s=Wr(n.height,e),i=n.shift?Wr(n.shift,e):0;return t.style.borderRightWidth=je(r),t.style.borderTopWidth=je(s),t.style.bottom=je(i),t.width=r,t.height=s+i,t.depth=-i,t.maxFontSize=s*1.125*e.sizeMultiplier,t},mathmlBuilder(n,e){var t=Wr(n.width,e),r=Wr(n.height,e),s=n.shift?Wr(n.shift,e):0,i=e.color&&e.getColor()||"black",o=new Me.MathNode("mspace");o.setAttribute("mathbackground",i),o.setAttribute("width",je(t)),o.setAttribute("height",je(r));var a=new Me.MathNode("mpadded",[o]);return s>=0?a.setAttribute("height",je(s)):(a.setAttribute("height",je(s)),a.setAttribute("depth",je(-s))),a.setAttribute("voffset",je(s)),a}});function oie(n,e,t){for(var r=Fs(n,e,!1),s=e.sizeMultiplier/t.sizeMultiplier,i=0;i<r.length;i++){var o=r[i].classes.indexOf("sizing");o<0?Array.prototype.push.apply(r[i].classes,e.sizingClasses(t)):r[i].classes[o+1]==="reset-size"+e.size&&(r[i].classes[o+1]="reset-size"+t.size),r[i].height*=s,r[i].depth*=s}return fe.makeFragment(r)}var aie=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],oVe=(n,e)=>{var t=e.havingSize(n.size);return oie(n.body,t,e)};Ke({type:"sizing",names:aie,props:{numArgs:0,allowedInText:!0},handler:(n,e)=>{var{breakOnTokenText:t,funcName:r,parser:s}=n,i=s.parseExpression(!1,t);return{type:"sizing",mode:s.mode,size:aie.indexOf(r)+1,body:i}},htmlBuilder:oVe,mathmlBuilder:(n,e)=>{var t=e.havingSize(n.size),r=go(n.body,t),s=new Me.MathNode("mstyle",r);return s.setAttribute("mathsize",je(t.sizeMultiplier)),s}}),Ke({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(n,e,t)=>{var{parser:r}=n,s=!1,i=!1,o=t[0]&&fn(t[0],"ordgroup");if(o)for(var a="",l=0;l<o.body.length;++l){var c=o.body[l];if(a=c.text,a==="t")s=!0;else if(a==="b")i=!0;else{s=!1,i=!1;break}}else s=!0,i=!0;var u=e[0];return{type:"smash",mode:r.mode,body:u,smashHeight:s,smashDepth:i}},htmlBuilder:(n,e)=>{var t=fe.makeSpan([],[Wn(n.body,e)]);if(!n.smashHeight&&!n.smashDepth)return t;if(n.smashHeight&&(t.height=0,t.children))for(var r=0;r<t.children.length;r++)t.children[r].height=0;if(n.smashDepth&&(t.depth=0,t.children))for(var s=0;s<t.children.length;s++)t.children[s].depth=0;var i=fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:t}]},e);return fe.makeSpan(["mord"],[i],e)},mathmlBuilder:(n,e)=>{var t=new Me.MathNode("mpadded",[xr(n.body,e)]);return n.smashHeight&&t.setAttribute("height","0px"),n.smashDepth&&t.setAttribute("depth","0px"),t}}),Ke({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(n,e,t){var{parser:r}=n,s=t[0],i=e[0];return{type:"sqrt",mode:r.mode,body:i,index:s}},htmlBuilder(n,e){var t=Wn(n.body,e.havingCrampedStyle());t.height===0&&(t.height=e.fontMetrics().xHeight),t=fe.wrapFragment(t,e);var r=e.fontMetrics(),s=r.defaultRuleThickness,i=s;e.style.id<At.TEXT.id&&(i=e.fontMetrics().xHeight);var o=s+i/4,a=t.height+t.depth+o+s,{span:l,ruleWidth:c,advanceWidth:u}=nd.sqrtImage(a,e),d=l.height-c;d>t.height+t.depth+o&&(o=(o+d-t.height-t.depth)/2);var f=l.height-t.height-o-c;t.style.paddingLeft=je(u);var p=fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:t,wrapperClasses:["svg-align"]},{type:"kern",size:-(t.height+f)},{type:"elem",elem:l},{type:"kern",size:c}]},e);if(n.index){var m=e.havingStyle(At.SCRIPTSCRIPT),y=Wn(n.index,m,e),w=.6*(p.height-p.depth),k=fe.makeVList({positionType:"shift",positionData:-w,children:[{type:"elem",elem:y}]},e),x=fe.makeSpan(["root"],[k]);return fe.makeSpan(["mord","sqrt"],[x,p],e)}else return fe.makeSpan(["mord","sqrt"],[p],e)},mathmlBuilder(n,e){var{body:t,index:r}=n;return r?new Me.MathNode("mroot",[xr(t,e),xr(r,e)]):new Me.MathNode("msqrt",[xr(t,e)])}});var lie={display:At.DISPLAY,text:At.TEXT,script:At.SCRIPT,scriptscript:At.SCRIPTSCRIPT};Ke({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(n,e){var{breakOnTokenText:t,funcName:r,parser:s}=n,i=s.parseExpression(!0,t),o=r.slice(1,r.length-5);return{type:"styling",mode:s.mode,style:o,body:i}},htmlBuilder(n,e){var t=lie[n.style],r=e.havingStyle(t).withFont("");return oie(n.body,r,e)},mathmlBuilder(n,e){var t=lie[n.style],r=e.havingStyle(t),s=go(n.body,r),i=new Me.MathNode("mstyle",s),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},a=o[n.style];return i.setAttribute("scriptlevel",a[0]),i.setAttribute("displaystyle",a[1]),i}});var aVe=function(e,t){var r=e.base;if(r)if(r.type==="op"){var s=r.limits&&(t.style.size===At.DISPLAY.size||r.alwaysHandleSupSub);return s?Z1:null}else if(r.type==="operatorname"){var i=r.alwaysHandleSupSub&&(t.style.size===At.DISPLAY.size||r.limits);return i?iie:null}else{if(r.type==="accent")return er.isCharacterBox(r.base)?nI:null;if(r.type==="horizBrace"){var o=!e.sub;return o===r.isOver?tie:null}else return null}else return null};j0({type:"supsub",htmlBuilder(n,e){var t=aVe(n,e);if(t)return t(n,e);var{base:r,sup:s,sub:i}=n,o=Wn(r,e),a,l,c=e.fontMetrics(),u=0,d=0,f=r&&er.isCharacterBox(r);if(s){var p=e.havingStyle(e.style.sup());a=Wn(s,p,e),f||(u=o.height-p.fontMetrics().supDrop*p.sizeMultiplier/e.sizeMultiplier)}if(i){var m=e.havingStyle(e.style.sub());l=Wn(i,m,e),f||(d=o.depth+m.fontMetrics().subDrop*m.sizeMultiplier/e.sizeMultiplier)}var y;e.style===At.DISPLAY?y=c.sup1:e.style.cramped?y=c.sup3:y=c.sup2;var w=e.sizeMultiplier,k=je(.5/c.ptPerEm/w),x=null;if(l){var S=n.base&&n.base.type==="op"&&n.base.name&&(n.base.name==="\\oiint"||n.base.name==="\\oiiint");(o instanceof Na||S)&&(x=je(-o.italic))}var _;if(a&&l){u=Math.max(u,y,a.depth+.25*c.xHeight),d=Math.max(d,c.sub2);var A=c.defaultRuleThickness,T=4*A;if(u-a.depth-(l.height-d)<T){d=T-(u-a.depth)+l.height;var O=.8*c.xHeight-(u-a.depth);O>0&&(u+=O,d-=O)}var I=[{type:"elem",elem:l,shift:d,marginRight:k,marginLeft:x},{type:"elem",elem:a,shift:-u,marginRight:k}];_=fe.makeVList({positionType:"individualShift",children:I},e)}else if(l){d=Math.max(d,c.sub1,l.height-.8*c.xHeight);var R=[{type:"elem",elem:l,marginLeft:x,marginRight:k}];_=fe.makeVList({positionType:"shift",positionData:d,children:R},e)}else if(a)u=Math.max(u,y,a.depth+.25*c.xHeight),_=fe.makeVList({positionType:"shift",positionData:-u,children:[{type:"elem",elem:a,marginRight:k}]},e);else throw new Error("supsub must have either sup or sub.");var D=ZP(o,"right")||"mord";return fe.makeSpan([D],[o,fe.makeSpan(["msupsub"],[_])],e)},mathmlBuilder(n,e){var t=!1,r,s;n.base&&n.base.type==="horizBrace"&&(s=!!n.sup,s===n.base.isOver&&(t=!0,r=n.base.isOver)),n.base&&(n.base.type==="op"||n.base.type==="operatorname")&&(n.base.parentIsSupSub=!0);var i=[xr(n.base,e)];n.sub&&i.push(xr(n.sub,e)),n.sup&&i.push(xr(n.sup,e));var o;if(t)o=r?"mover":"munder";else if(n.sub)if(n.sup){var c=n.base;c&&c.type==="op"&&c.limits&&e.style===At.DISPLAY||c&&c.type==="operatorname"&&c.alwaysHandleSupSub&&(e.style===At.DISPLAY||c.limits)?o="munderover":o="msubsup"}else{var l=n.base;l&&l.type==="op"&&l.limits&&(e.style===At.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||e.style===At.DISPLAY)?o="munder":o="msub"}else{var a=n.base;a&&a.type==="op"&&a.limits&&(e.style===At.DISPLAY||a.alwaysHandleSupSub)||a&&a.type==="operatorname"&&a.alwaysHandleSupSub&&(a.limits||e.style===At.DISPLAY)?o="mover":o="msup"}return new Me.MathNode(o,i)}}),j0({type:"atom",htmlBuilder(n,e){return fe.mathsym(n.text,n.mode,e,["m"+n.family])},mathmlBuilder(n,e){var t=new Me.MathNode("mo",[Ma(n.text,n.mode)]);if(n.family==="bin"){var r=QP(n,e);r==="bold-italic"&&t.setAttribute("mathvariant",r)}else n.family==="punct"?t.setAttribute("separator","true"):(n.family==="open"||n.family==="close")&&t.setAttribute("stretchy","false");return t}});var cie={mi:"italic",mn:"normal",mtext:"normal"};j0({type:"mathord",htmlBuilder(n,e){return fe.makeOrd(n,e,"mathord")},mathmlBuilder(n,e){var t=new Me.MathNode("mi",[Ma(n.text,n.mode,e)]),r=QP(n,e)||"italic";return r!==cie[t.type]&&t.setAttribute("mathvariant",r),t}}),j0({type:"textord",htmlBuilder(n,e){return fe.makeOrd(n,e,"textord")},mathmlBuilder(n,e){var t=Ma(n.text,n.mode,e),r=QP(n,e)||"normal",s;return n.mode==="text"?s=new Me.MathNode("mtext",[t]):/[0-9]/.test(n.text)?s=new Me.MathNode("mn",[t]):n.text==="\\prime"?s=new Me.MathNode("mo",[t]):s=new Me.MathNode("mi",[t]),r!==cie[s.type]&&s.setAttribute("mathvariant",r),s}});var vI={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},bI={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};j0({type:"spacing",htmlBuilder(n,e){if(bI.hasOwnProperty(n.text)){var t=bI[n.text].className||"";if(n.mode==="text"){var r=fe.makeOrd(n,e,"textord");return r.classes.push(t),r}else return fe.makeSpan(["mspace",t],[fe.mathsym(n.text,n.mode,e)],e)}else{if(vI.hasOwnProperty(n.text))return fe.makeSpan(["mspace",vI[n.text]],[],e);throw new De('Unknown type of space "'+n.text+'"')}},mathmlBuilder(n,e){var t;if(bI.hasOwnProperty(n.text))t=new Me.MathNode("mtext",[new Me.TextNode(" ")]);else{if(vI.hasOwnProperty(n.text))return new Me.MathNode("mspace");throw new De('Unknown type of space "'+n.text+'"')}return t}});var uie=()=>{var n=new Me.MathNode("mtd",[]);return n.setAttribute("width","50%"),n};j0({type:"tag",mathmlBuilder(n,e){var t=new Me.MathNode("mtable",[new Me.MathNode("mtr",[uie(),new Me.MathNode("mtd",[Jh(n.body,e)]),uie(),new Me.MathNode("mtd",[Jh(n.tag,e)])])]);return t.setAttribute("width","100%"),t}});var die={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},hie={"\\textbf":"textbf","\\textmd":"textmd"},lVe={"\\textit":"textit","\\textup":"textup"},fie=(n,e)=>{var t=n.font;if(t){if(die[t])return e.withTextFontFamily(die[t]);if(hie[t])return e.withTextFontWeight(hie[t]);if(t==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(lVe[t])};Ke({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(n,e){var{parser:t,funcName:r}=n,s=e[0];return{type:"text",mode:t.mode,body:cs(s),font:r}},htmlBuilder(n,e){var t=fie(n,e),r=Fs(n.body,t,!0);return fe.makeSpan(["mord","text"],r,t)},mathmlBuilder(n,e){var t=fie(n,e);return Jh(n.body,t)}}),Ke({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(n,e){var{parser:t}=n;return{type:"underline",mode:t.mode,body:e[0]}},htmlBuilder(n,e){var t=Wn(n.body,e),r=fe.makeLineSpan("underline-line",e),s=e.fontMetrics().defaultRuleThickness,i=fe.makeVList({positionType:"top",positionData:t.height,children:[{type:"kern",size:s},{type:"elem",elem:r},{type:"kern",size:3*s},{type:"elem",elem:t}]},e);return fe.makeSpan(["mord","underline"],[i],e)},mathmlBuilder(n,e){var t=new Me.MathNode("mo",[new Me.TextNode("‾")]);t.setAttribute("stretchy","true");var r=new Me.MathNode("munder",[xr(n.body,e),t]);return r.setAttribute("accentunder","true"),r}}),Ke({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(n,e){var{parser:t}=n;return{type:"vcenter",mode:t.mode,body:e[0]}},htmlBuilder(n,e){var t=Wn(n.body,e),r=e.fontMetrics().axisHeight,s=.5*(t.height-r-(t.depth+r));return fe.makeVList({positionType:"shift",positionData:s,children:[{type:"elem",elem:t}]},e)},mathmlBuilder(n,e){return new Me.MathNode("mpadded",[xr(n.body,e)],["vcenter"])}}),Ke({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(n,e,t){throw new De("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(n,e){for(var t=pie(n),r=[],s=e.havingStyle(e.style.text()),i=0;i<t.length;i++){var o=t[i];o==="~"&&(o="\\textasciitilde"),r.push(fe.makeSymbol(o,"Typewriter-Regular",n.mode,s,["mord","texttt"]))}return fe.makeSpan(["mord","text"].concat(s.sizingClasses(e)),fe.tryCombineChars(r),s)},mathmlBuilder(n,e){var t=new Me.TextNode(pie(n)),r=new Me.MathNode("mtext",[t]);return r.setAttribute("mathvariant","monospace"),r}});var pie=n=>n.body.replace(/ /g,n.star?"␣":" "),ef=vse,mie=`[ \r + ]`,cVe="\\\\[a-zA-Z@]+",uVe="\\\\[^\uD800-\uDFFF]",dVe="("+cVe+")"+mie+"*",hVe=`\\\\( +|[ \r ]+ +?)[ \r ]*`,wI="[̀-ͯ]",fVe=new RegExp(wI+"+$"),pVe="("+mie+"+)|"+(hVe+"|")+"([!-\\[\\]-‧‪-퟿豈-￿]"+(wI+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(wI+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+dVe)+("|"+uVe+")");class gie{constructor(e,t){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=t,this.tokenRegex=new RegExp(pVe,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,t){this.catcodes[e]=t}lex(){var e=this.input,t=this.tokenRegex.lastIndex;if(t===e.length)return new Xo("EOF",new po(this,t,t));var r=this.tokenRegex.exec(e);if(r===null||r.index!==t)throw new De("Unexpected character: '"+e[t]+"'",new Xo(e[t],new po(this,t,t+1)));var s=r[6]||r[3]||(r[2]?"\\ ":" ");if(this.catcodes[s]===14){var i=e.indexOf(` +`,this.tokenRegex.lastIndex);return i===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=i+1,this.lex()}return new Xo(s,new po(this,t,this.tokenRegex.lastIndex))}}class mVe{constructor(e,t){e===void 0&&(e={}),t===void 0&&(t={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=t,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new De("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var t in e)e.hasOwnProperty(t)&&(e[t]==null?delete this.current[t]:this.current[t]=e[t])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,t,r){if(r===void 0&&(r=!1),r){for(var s=0;s<this.undefStack.length;s++)delete this.undefStack[s][e];this.undefStack.length>0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var i=this.undefStack[this.undefStack.length-1];i&&!i.hasOwnProperty(e)&&(i[e]=this.current[e])}t==null?delete this.current[e]:this.current[e]=t}}var gVe=Use;F("\\noexpand",function(n){var e=n.popToken();return n.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}}),F("\\expandafter",function(n){var e=n.popToken();return n.expandOnce(!0),{tokens:[e],numArgs:0}}),F("\\@firstoftwo",function(n){var e=n.consumeArgs(2);return{tokens:e[0],numArgs:0}}),F("\\@secondoftwo",function(n){var e=n.consumeArgs(2);return{tokens:e[1],numArgs:0}}),F("\\@ifnextchar",function(n){var e=n.consumeArgs(3);n.consumeSpaces();var t=n.future();return e[0].length===1&&e[0][0].text===t.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}}),F("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),F("\\TextOrMath",function(n){var e=n.consumeArgs(2);return n.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});var yie={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};F("\\char",function(n){var e=n.popToken(),t,r="";if(e.text==="'")t=8,e=n.popToken();else if(e.text==='"')t=16,e=n.popToken();else if(e.text==="`")if(e=n.popToken(),e.text[0]==="\\")r=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new De("\\char` missing argument");r=e.text.charCodeAt(0)}else t=10;if(t){if(r=yie[e.text],r==null||r>=t)throw new De("Invalid base-"+t+" digit "+e.text);for(var s;(s=yie[n.future().text])!=null&&s<t;)r*=t,r+=s,n.popToken()}return"\\@char{"+r+"}"});var xI=(n,e,t,r)=>{var s=n.consumeArg().tokens;if(s.length!==1)throw new De("\\newcommand's first argument must be a macro name");var i=s[0].text,o=n.isDefined(i);if(o&&!e)throw new De("\\newcommand{"+i+"} attempting to redefine "+(i+"; use \\renewcommand"));if(!o&&!t)throw new De("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");var a=0;if(s=n.consumeArg().tokens,s.length===1&&s[0].text==="["){for(var l="",c=n.expandNextToken();c.text!=="]"&&c.text!=="EOF";)l+=c.text,c=n.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new De("Invalid number of arguments: "+l);a=parseInt(l),s=n.consumeArg().tokens}return o&&r||n.macros.set(i,{tokens:s,numArgs:a}),""};F("\\newcommand",n=>xI(n,!1,!0,!1)),F("\\renewcommand",n=>xI(n,!0,!1,!1)),F("\\providecommand",n=>xI(n,!0,!0,!0)),F("\\message",n=>{var e=n.consumeArgs(1)[0];return console.log(e.reverse().map(t=>t.text).join("")),""}),F("\\errmessage",n=>{var e=n.consumeArgs(1)[0];return console.error(e.reverse().map(t=>t.text).join("")),""}),F("\\show",n=>{var e=n.popToken(),t=e.text;return console.log(e,n.macros.get(t),ef[t],Nr.math[t],Nr.text[t]),""}),F("\\bgroup","{"),F("\\egroup","}"),F("~","\\nobreakspace"),F("\\lq","`"),F("\\rq","'"),F("\\aa","\\r a"),F("\\AA","\\r A"),F("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`©}"),F("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"),F("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"),F("ℬ","\\mathscr{B}"),F("ℰ","\\mathscr{E}"),F("ℱ","\\mathscr{F}"),F("ℋ","\\mathscr{H}"),F("ℐ","\\mathscr{I}"),F("ℒ","\\mathscr{L}"),F("ℳ","\\mathscr{M}"),F("ℛ","\\mathscr{R}"),F("ℭ","\\mathfrak{C}"),F("ℌ","\\mathfrak{H}"),F("ℨ","\\mathfrak{Z}"),F("\\Bbbk","\\Bbb{k}"),F("·","\\cdotp"),F("\\llap","\\mathllap{\\textrm{#1}}"),F("\\rlap","\\mathrlap{\\textrm{#1}}"),F("\\clap","\\mathclap{\\textrm{#1}}"),F("\\mathstrut","\\vphantom{(}"),F("\\underbar","\\underline{\\text{#1}}"),F("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'),F("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}"),F("\\ne","\\neq"),F("≠","\\neq"),F("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`∉}}"),F("∉","\\notin"),F("≘","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`≘}}"),F("≙","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`≘}}"),F("≚","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`≚}}"),F("≛","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`≛}}"),F("≝","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`≝}}"),F("≞","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`≞}}"),F("≟","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`≟}}"),F("⟂","\\perp"),F("‼","\\mathclose{!\\mkern-0.8mu!}"),F("∌","\\notni"),F("⌜","\\ulcorner"),F("⌝","\\urcorner"),F("⌞","\\llcorner"),F("⌟","\\lrcorner"),F("©","\\copyright"),F("®","\\textregistered"),F("️","\\textregistered"),F("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}'),F("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}'),F("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}'),F("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}'),F("\\vdots","{\\varvdots\\rule{0pt}{15pt}}"),F("⋮","\\vdots"),F("\\varGamma","\\mathit{\\Gamma}"),F("\\varDelta","\\mathit{\\Delta}"),F("\\varTheta","\\mathit{\\Theta}"),F("\\varLambda","\\mathit{\\Lambda}"),F("\\varXi","\\mathit{\\Xi}"),F("\\varPi","\\mathit{\\Pi}"),F("\\varSigma","\\mathit{\\Sigma}"),F("\\varUpsilon","\\mathit{\\Upsilon}"),F("\\varPhi","\\mathit{\\Phi}"),F("\\varPsi","\\mathit{\\Psi}"),F("\\varOmega","\\mathit{\\Omega}"),F("\\substack","\\begin{subarray}{c}#1\\end{subarray}"),F("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"),F("\\boxed","\\fbox{$\\displaystyle{#1}$}"),F("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;"),F("\\implies","\\DOTSB\\;\\Longrightarrow\\;"),F("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;"),F("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}"),F("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");var vie={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};F("\\dots",function(n){var e="\\dotso",t=n.expandAfterFuture().text;return t in vie?e=vie[t]:(t.slice(0,4)==="\\not"||t in Nr.math&&["bin","rel"].includes(Nr.math[t].group))&&(e="\\dotsb"),e});var kI={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};F("\\dotso",function(n){var e=n.future().text;return e in kI?"\\ldots\\,":"\\ldots"}),F("\\dotsc",function(n){var e=n.future().text;return e in kI&&e!==","?"\\ldots\\,":"\\ldots"}),F("\\cdots",function(n){var e=n.future().text;return e in kI?"\\@cdots\\,":"\\@cdots"}),F("\\dotsb","\\cdots"),F("\\dotsm","\\cdots"),F("\\dotsi","\\!\\cdots"),F("\\dotsx","\\ldots\\,"),F("\\DOTSI","\\relax"),F("\\DOTSB","\\relax"),F("\\DOTSX","\\relax"),F("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),F("\\,","\\tmspace+{3mu}{.1667em}"),F("\\thinspace","\\,"),F("\\>","\\mskip{4mu}"),F("\\:","\\tmspace+{4mu}{.2222em}"),F("\\medspace","\\:"),F("\\;","\\tmspace+{5mu}{.2777em}"),F("\\thickspace","\\;"),F("\\!","\\tmspace-{3mu}{.1667em}"),F("\\negthinspace","\\!"),F("\\negmedspace","\\tmspace-{4mu}{.2222em}"),F("\\negthickspace","\\tmspace-{5mu}{.277em}"),F("\\enspace","\\kern.5em "),F("\\enskip","\\hskip.5em\\relax"),F("\\quad","\\hskip1em\\relax"),F("\\qquad","\\hskip2em\\relax"),F("\\tag","\\@ifstar\\tag@literal\\tag@paren"),F("\\tag@paren","\\tag@literal{({#1})}"),F("\\tag@literal",n=>{if(n.macros.get("\\df@tag"))throw new De("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"}),F("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),F("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),F("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),F("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),F("\\newline","\\\\\\relax"),F("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var bie=je(Tc["Main-Regular"][84][1]-.7*Tc["Main-Regular"][65][1]);F("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+bie+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}"),F("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+bie+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}"),F("\\hspace","\\@ifstar\\@hspacer\\@hspace"),F("\\@hspace","\\hskip #1\\relax"),F("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),F("\\ordinarycolon",":"),F("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),F("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),F("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),F("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),F("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),F("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),F("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),F("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),F("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),F("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),F("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),F("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),F("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),F("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),F("∷","\\dblcolon"),F("∹","\\eqcolon"),F("≔","\\coloneqq"),F("≕","\\eqqcolon"),F("⩴","\\Coloneqq"),F("\\ratio","\\vcentcolon"),F("\\coloncolon","\\dblcolon"),F("\\colonequals","\\coloneqq"),F("\\coloncolonequals","\\Coloneqq"),F("\\equalscolon","\\eqqcolon"),F("\\equalscoloncolon","\\Eqqcolon"),F("\\colonminus","\\coloneq"),F("\\coloncolonminus","\\Coloneq"),F("\\minuscolon","\\eqcolon"),F("\\minuscoloncolon","\\Eqcolon"),F("\\coloncolonapprox","\\Colonapprox"),F("\\coloncolonsim","\\Colonsim"),F("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),F("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),F("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),F("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),F("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`∌}}"),F("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),F("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),F("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),F("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),F("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),F("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),F("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),F("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),F("\\gvertneqq","\\html@mathml{\\@gvertneqq}{≩}"),F("\\lvertneqq","\\html@mathml{\\@lvertneqq}{≨}"),F("\\ngeqq","\\html@mathml{\\@ngeqq}{≱}"),F("\\ngeqslant","\\html@mathml{\\@ngeqslant}{≱}"),F("\\nleqq","\\html@mathml{\\@nleqq}{≰}"),F("\\nleqslant","\\html@mathml{\\@nleqslant}{≰}"),F("\\nshortmid","\\html@mathml{\\@nshortmid}{∤}"),F("\\nshortparallel","\\html@mathml{\\@nshortparallel}{∦}"),F("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{⊈}"),F("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{⊉}"),F("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{⊊}"),F("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{⫋}"),F("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{⊋}"),F("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{⫌}"),F("\\imath","\\html@mathml{\\@imath}{ı}"),F("\\jmath","\\html@mathml{\\@jmath}{ȷ}"),F("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`⟦}}"),F("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`⟧}}"),F("⟦","\\llbracket"),F("⟧","\\rrbracket"),F("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`⦃}}"),F("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`⦄}}"),F("⦃","\\lBrace"),F("⦄","\\rBrace"),F("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`⦵}}"),F("⦵","\\minuso"),F("\\darr","\\downarrow"),F("\\dArr","\\Downarrow"),F("\\Darr","\\Downarrow"),F("\\lang","\\langle"),F("\\rang","\\rangle"),F("\\uarr","\\uparrow"),F("\\uArr","\\Uparrow"),F("\\Uarr","\\Uparrow"),F("\\N","\\mathbb{N}"),F("\\R","\\mathbb{R}"),F("\\Z","\\mathbb{Z}"),F("\\alef","\\aleph"),F("\\alefsym","\\aleph"),F("\\Alpha","\\mathrm{A}"),F("\\Beta","\\mathrm{B}"),F("\\bull","\\bullet"),F("\\Chi","\\mathrm{X}"),F("\\clubs","\\clubsuit"),F("\\cnums","\\mathbb{C}"),F("\\Complex","\\mathbb{C}"),F("\\Dagger","\\ddagger"),F("\\diamonds","\\diamondsuit"),F("\\empty","\\emptyset"),F("\\Epsilon","\\mathrm{E}"),F("\\Eta","\\mathrm{H}"),F("\\exist","\\exists"),F("\\harr","\\leftrightarrow"),F("\\hArr","\\Leftrightarrow"),F("\\Harr","\\Leftrightarrow"),F("\\hearts","\\heartsuit"),F("\\image","\\Im"),F("\\infin","\\infty"),F("\\Iota","\\mathrm{I}"),F("\\isin","\\in"),F("\\Kappa","\\mathrm{K}"),F("\\larr","\\leftarrow"),F("\\lArr","\\Leftarrow"),F("\\Larr","\\Leftarrow"),F("\\lrarr","\\leftrightarrow"),F("\\lrArr","\\Leftrightarrow"),F("\\Lrarr","\\Leftrightarrow"),F("\\Mu","\\mathrm{M}"),F("\\natnums","\\mathbb{N}"),F("\\Nu","\\mathrm{N}"),F("\\Omicron","\\mathrm{O}"),F("\\plusmn","\\pm"),F("\\rarr","\\rightarrow"),F("\\rArr","\\Rightarrow"),F("\\Rarr","\\Rightarrow"),F("\\real","\\Re"),F("\\reals","\\mathbb{R}"),F("\\Reals","\\mathbb{R}"),F("\\Rho","\\mathrm{P}"),F("\\sdot","\\cdot"),F("\\sect","\\S"),F("\\spades","\\spadesuit"),F("\\sub","\\subset"),F("\\sube","\\subseteq"),F("\\supe","\\supseteq"),F("\\Tau","\\mathrm{T}"),F("\\thetasym","\\vartheta"),F("\\weierp","\\wp"),F("\\Zeta","\\mathrm{Z}"),F("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),F("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),F("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),F("\\bra","\\mathinner{\\langle{#1}|}"),F("\\ket","\\mathinner{|{#1}\\rangle}"),F("\\braket","\\mathinner{\\langle{#1}\\rangle}"),F("\\Bra","\\left\\langle#1\\right|"),F("\\Ket","\\left|#1\\right\\rangle");var wie=n=>e=>{var t=e.consumeArg().tokens,r=e.consumeArg().tokens,s=e.consumeArg().tokens,i=e.consumeArg().tokens,o=e.macros.get("|"),a=e.macros.get("\\|");e.macros.beginGroup();var l=d=>f=>{n&&(f.macros.set("|",o),s.length&&f.macros.set("\\|",a));var p=d;if(!d&&s.length){var m=f.future();m.text==="|"&&(f.popToken(),p=!0)}return{tokens:p?s:r,numArgs:0}};e.macros.set("|",l(!1)),s.length&&e.macros.set("\\|",l(!0));var c=e.consumeArg().tokens,u=e.expandTokens([...i,...c,...t]);return e.macros.endGroup(),{tokens:u.reverse(),numArgs:0}};F("\\bra@ket",wie(!1)),F("\\bra@set",wie(!0)),F("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"),F("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"),F("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"),F("\\angln","{\\angl n}"),F("\\blue","\\textcolor{##6495ed}{#1}"),F("\\orange","\\textcolor{##ffa500}{#1}"),F("\\pink","\\textcolor{##ff00af}{#1}"),F("\\red","\\textcolor{##df0030}{#1}"),F("\\green","\\textcolor{##28ae7b}{#1}"),F("\\gray","\\textcolor{gray}{#1}"),F("\\purple","\\textcolor{##9d38bd}{#1}"),F("\\blueA","\\textcolor{##ccfaff}{#1}"),F("\\blueB","\\textcolor{##80f6ff}{#1}"),F("\\blueC","\\textcolor{##63d9ea}{#1}"),F("\\blueD","\\textcolor{##11accd}{#1}"),F("\\blueE","\\textcolor{##0c7f99}{#1}"),F("\\tealA","\\textcolor{##94fff5}{#1}"),F("\\tealB","\\textcolor{##26edd5}{#1}"),F("\\tealC","\\textcolor{##01d1c1}{#1}"),F("\\tealD","\\textcolor{##01a995}{#1}"),F("\\tealE","\\textcolor{##208170}{#1}"),F("\\greenA","\\textcolor{##b6ffb0}{#1}"),F("\\greenB","\\textcolor{##8af281}{#1}"),F("\\greenC","\\textcolor{##74cf70}{#1}"),F("\\greenD","\\textcolor{##1fab54}{#1}"),F("\\greenE","\\textcolor{##0d923f}{#1}"),F("\\goldA","\\textcolor{##ffd0a9}{#1}"),F("\\goldB","\\textcolor{##ffbb71}{#1}"),F("\\goldC","\\textcolor{##ff9c39}{#1}"),F("\\goldD","\\textcolor{##e07d10}{#1}"),F("\\goldE","\\textcolor{##a75a05}{#1}"),F("\\redA","\\textcolor{##fca9a9}{#1}"),F("\\redB","\\textcolor{##ff8482}{#1}"),F("\\redC","\\textcolor{##f9685d}{#1}"),F("\\redD","\\textcolor{##e84d39}{#1}"),F("\\redE","\\textcolor{##bc2612}{#1}"),F("\\maroonA","\\textcolor{##ffbde0}{#1}"),F("\\maroonB","\\textcolor{##ff92c6}{#1}"),F("\\maroonC","\\textcolor{##ed5fa6}{#1}"),F("\\maroonD","\\textcolor{##ca337c}{#1}"),F("\\maroonE","\\textcolor{##9e034e}{#1}"),F("\\purpleA","\\textcolor{##ddd7ff}{#1}"),F("\\purpleB","\\textcolor{##c6b9fc}{#1}"),F("\\purpleC","\\textcolor{##aa87ff}{#1}"),F("\\purpleD","\\textcolor{##7854ab}{#1}"),F("\\purpleE","\\textcolor{##543b78}{#1}"),F("\\mintA","\\textcolor{##f5f9e8}{#1}"),F("\\mintB","\\textcolor{##edf2df}{#1}"),F("\\mintC","\\textcolor{##e0e5cc}{#1}"),F("\\grayA","\\textcolor{##f6f7f7}{#1}"),F("\\grayB","\\textcolor{##f0f1f2}{#1}"),F("\\grayC","\\textcolor{##e3e5e6}{#1}"),F("\\grayD","\\textcolor{##d6d8da}{#1}"),F("\\grayE","\\textcolor{##babec2}{#1}"),F("\\grayF","\\textcolor{##888d93}{#1}"),F("\\grayG","\\textcolor{##626569}{#1}"),F("\\grayH","\\textcolor{##3b3e40}{#1}"),F("\\grayI","\\textcolor{##21242c}{#1}"),F("\\kaBlue","\\textcolor{##314453}{#1}"),F("\\kaGreen","\\textcolor{##71B307}{#1}");var xie={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class yVe{constructor(e,t,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new mVe(gVe,t.macros),this.mode=r,this.stack=[]}feed(e){this.lexer=new gie(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var t,r,s;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;t=this.popToken(),{tokens:s,end:r}=this.consumeArg(["]"])}else({tokens:s,start:t,end:r}=this.consumeArg());return this.pushToken(new Xo("EOF",r.loc)),this.pushTokens(s),new Xo("",po.range(t,r))}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var t=[],r=e&&e.length>0;r||this.consumeSpaces();var s=this.future(),i,o=0,a=0;do{if(i=this.popToken(),t.push(i),i.text==="{")++o;else if(i.text==="}"){if(--o,o===-1)throw new De("Extra }",i)}else if(i.text==="EOF")throw new De("Unexpected end of input in a macro argument, expected '"+(e&&r?e[a]:"}")+"'",i);if(e&&r)if((o===0||o===1&&e[a]==="{")&&i.text===e[a]){if(++a,a===e.length){t.splice(-a,a);break}}else a=0}while(o!==0||r);return s.text==="{"&&t[t.length-1].text==="}"&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:s,end:i}}consumeArgs(e,t){if(t){if(t.length!==e+1)throw new De("The length of delimiters doesn't match the number of args!");for(var r=t[0],s=0;s<r.length;s++){var i=this.popToken();if(r[s]!==i.text)throw new De("Use of the macro doesn't match its definition",i)}}for(var o=[],a=0;a<e;a++)o.push(this.consumeArg(t&&t[a+1]).tokens);return o}countExpansion(e){if(this.expansionCount+=e,this.expansionCount>this.settings.maxExpand)throw new De("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var t=this.popToken(),r=t.text,s=t.noexpand?null:this._getExpansion(r);if(s==null||e&&s.unexpandable){if(e&&s==null&&r[0]==="\\"&&!this.isDefined(r))throw new De("Undefined control sequence: "+r);return this.pushToken(t),!1}this.countExpansion(1);var i=s.tokens,o=this.consumeArgs(s.numArgs,s.delimiters);if(s.numArgs){i=i.slice();for(var a=i.length-1;a>=0;--a){var l=i[a];if(l.text==="#"){if(a===0)throw new De("Incomplete placeholder at end of macro body",l);if(l=i[--a],l.text==="#")i.splice(a+1,1);else if(/^[1-9]$/.test(l.text))i.splice(a,2,...o[+l.text-1]);else throw new De("Not a valid argument number",l)}}}return this.pushTokens(i),i.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new Xo(e)]):void 0}expandTokens(e){var t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;)if(this.expandOnce(!0)===!1){var s=this.stack.pop();s.treatAsRelax&&(s.noexpand=!1,s.treatAsRelax=!1),t.push(s)}return this.countExpansion(t.length),t}expandMacroAsText(e){var t=this.expandMacro(e);return t&&t.map(r=>r.text).join("")}_getExpansion(e){var t=this.macros.get(e);if(t==null)return t;if(e.length===1){var r=this.lexer.catcodes[e];if(r!=null&&r!==13)return}var s=typeof t=="function"?t(this):t;if(typeof s=="string"){var i=0;if(s.indexOf("#")!==-1)for(var o=s.replace(/##/g,"");o.indexOf("#"+(i+1))!==-1;)++i;for(var a=new gie(s,this.settings),l=[],c=a.lex();c.text!=="EOF";)l.push(c),c=a.lex();l.reverse();var u={tokens:l,numArgs:i};return u}return s}isDefined(e){return this.macros.has(e)||ef.hasOwnProperty(e)||Nr.math.hasOwnProperty(e)||Nr.text.hasOwnProperty(e)||xie.hasOwnProperty(e)}isExpandable(e){var t=this.macros.get(e);return t!=null?typeof t=="string"||typeof t=="function"||!t.unexpandable:ef.hasOwnProperty(e)&&!ef[e].primitive}}var kie=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,Z9=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9","ₐ":"a","ₑ":"e","ₕ":"h","ᵢ":"i","ⱼ":"j","ₖ":"k","ₗ":"l","ₘ":"m","ₙ":"n","ₒ":"o","ₚ":"p","ᵣ":"r","ₛ":"s","ₜ":"t","ᵤ":"u","ᵥ":"v","ₓ":"x","ᵦ":"β","ᵧ":"γ","ᵨ":"ρ","ᵩ":"ϕ","ᵪ":"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","¹":"1","²":"2","³":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9","ᴬ":"A","ᴮ":"B","ᴰ":"D","ᴱ":"E","ᴳ":"G","ᴴ":"H","ᴵ":"I","ᴶ":"J","ᴷ":"K","ᴸ":"L","ᴹ":"M","ᴺ":"N","ᴼ":"O","ᴾ":"P","ᴿ":"R","ᵀ":"T","ᵁ":"U","ⱽ":"V","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᶜ":"c","ᵈ":"d","ᵉ":"e","ᶠ":"f","ᵍ":"g",ʰ:"h","ⁱ":"i",ʲ:"j","ᵏ":"k",ˡ:"l","ᵐ":"m",ⁿ:"n","ᵒ":"o","ᵖ":"p",ʳ:"r",ˢ:"s","ᵗ":"t","ᵘ":"u","ᵛ":"v",ʷ:"w",ˣ:"x",ʸ:"y","ᶻ":"z","ᵝ":"β","ᵞ":"γ","ᵟ":"δ","ᵠ":"ϕ","ᵡ":"χ","ᶿ":"θ"}),CI={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},Cie={á:"á",à:"à",ä:"ä",ǟ:"ǟ",ã:"ã",ā:"ā",ă:"ă",ắ:"ắ",ằ:"ằ",ẵ:"ẵ",ǎ:"ǎ",â:"â",ấ:"ấ",ầ:"ầ",ẫ:"ẫ",ȧ:"ȧ",ǡ:"ǡ",å:"å",ǻ:"ǻ",ḃ:"ḃ",ć:"ć",ḉ:"ḉ",č:"č",ĉ:"ĉ",ċ:"ċ",ç:"ç",ď:"ď",ḋ:"ḋ",ḑ:"ḑ",é:"é",è:"è",ë:"ë",ẽ:"ẽ",ē:"ē",ḗ:"ḗ",ḕ:"ḕ",ĕ:"ĕ",ḝ:"ḝ",ě:"ě",ê:"ê",ế:"ế",ề:"ề",ễ:"ễ",ė:"ė",ȩ:"ȩ",ḟ:"ḟ",ǵ:"ǵ",ḡ:"ḡ",ğ:"ğ",ǧ:"ǧ",ĝ:"ĝ",ġ:"ġ",ģ:"ģ",ḧ:"ḧ",ȟ:"ȟ",ĥ:"ĥ",ḣ:"ḣ",ḩ:"ḩ",í:"í",ì:"ì",ï:"ï",ḯ:"ḯ",ĩ:"ĩ",ī:"ī",ĭ:"ĭ",ǐ:"ǐ",î:"î",ǰ:"ǰ",ĵ:"ĵ",ḱ:"ḱ",ǩ:"ǩ",ķ:"ķ",ĺ:"ĺ",ľ:"ľ",ļ:"ļ",ḿ:"ḿ",ṁ:"ṁ",ń:"ń",ǹ:"ǹ",ñ:"ñ",ň:"ň",ṅ:"ṅ",ņ:"ņ",ó:"ó",ò:"ò",ö:"ö",ȫ:"ȫ",õ:"õ",ṍ:"ṍ",ṏ:"ṏ",ȭ:"ȭ",ō:"ō",ṓ:"ṓ",ṑ:"ṑ",ŏ:"ŏ",ǒ:"ǒ",ô:"ô",ố:"ố",ồ:"ồ",ỗ:"ỗ",ȯ:"ȯ",ȱ:"ȱ",ő:"ő",ṕ:"ṕ",ṗ:"ṗ",ŕ:"ŕ",ř:"ř",ṙ:"ṙ",ŗ:"ŗ",ś:"ś",ṥ:"ṥ",š:"š",ṧ:"ṧ",ŝ:"ŝ",ṡ:"ṡ",ş:"ş",ẗ:"ẗ",ť:"ť",ṫ:"ṫ",ţ:"ţ",ú:"ú",ù:"ù",ü:"ü",ǘ:"ǘ",ǜ:"ǜ",ǖ:"ǖ",ǚ:"ǚ",ũ:"ũ",ṹ:"ṹ",ū:"ū",ṻ:"ṻ",ŭ:"ŭ",ǔ:"ǔ",û:"û",ů:"ů",ű:"ű",ṽ:"ṽ",ẃ:"ẃ",ẁ:"ẁ",ẅ:"ẅ",ŵ:"ŵ",ẇ:"ẇ",ẘ:"ẘ",ẍ:"ẍ",ẋ:"ẋ",ý:"ý",ỳ:"ỳ",ÿ:"ÿ",ỹ:"ỹ",ȳ:"ȳ",ŷ:"ŷ",ẏ:"ẏ",ẙ:"ẙ",ź:"ź",ž:"ž",ẑ:"ẑ",ż:"ż",Á:"Á",À:"À",Ä:"Ä",Ǟ:"Ǟ",Ã:"Ã",Ā:"Ā",Ă:"Ă",Ắ:"Ắ",Ằ:"Ằ",Ẵ:"Ẵ",Ǎ:"Ǎ",Â:"Â",Ấ:"Ấ",Ầ:"Ầ",Ẫ:"Ẫ",Ȧ:"Ȧ",Ǡ:"Ǡ",Å:"Å",Ǻ:"Ǻ",Ḃ:"Ḃ",Ć:"Ć",Ḉ:"Ḉ",Č:"Č",Ĉ:"Ĉ",Ċ:"Ċ",Ç:"Ç",Ď:"Ď",Ḋ:"Ḋ",Ḑ:"Ḑ",É:"É",È:"È",Ë:"Ë",Ẽ:"Ẽ",Ē:"Ē",Ḗ:"Ḗ",Ḕ:"Ḕ",Ĕ:"Ĕ",Ḝ:"Ḝ",Ě:"Ě",Ê:"Ê",Ế:"Ế",Ề:"Ề",Ễ:"Ễ",Ė:"Ė",Ȩ:"Ȩ",Ḟ:"Ḟ",Ǵ:"Ǵ",Ḡ:"Ḡ",Ğ:"Ğ",Ǧ:"Ǧ",Ĝ:"Ĝ",Ġ:"Ġ",Ģ:"Ģ",Ḧ:"Ḧ",Ȟ:"Ȟ",Ĥ:"Ĥ",Ḣ:"Ḣ",Ḩ:"Ḩ",Í:"Í",Ì:"Ì",Ï:"Ï",Ḯ:"Ḯ",Ĩ:"Ĩ",Ī:"Ī",Ĭ:"Ĭ",Ǐ:"Ǐ",Î:"Î",İ:"İ",Ĵ:"Ĵ",Ḱ:"Ḱ",Ǩ:"Ǩ",Ķ:"Ķ",Ĺ:"Ĺ",Ľ:"Ľ",Ļ:"Ļ",Ḿ:"Ḿ",Ṁ:"Ṁ",Ń:"Ń",Ǹ:"Ǹ",Ñ:"Ñ",Ň:"Ň",Ṅ:"Ṅ",Ņ:"Ņ",Ó:"Ó",Ò:"Ò",Ö:"Ö",Ȫ:"Ȫ",Õ:"Õ",Ṍ:"Ṍ",Ṏ:"Ṏ",Ȭ:"Ȭ",Ō:"Ō",Ṓ:"Ṓ",Ṑ:"Ṑ",Ŏ:"Ŏ",Ǒ:"Ǒ",Ô:"Ô",Ố:"Ố",Ồ:"Ồ",Ỗ:"Ỗ",Ȯ:"Ȯ",Ȱ:"Ȱ",Ő:"Ő",Ṕ:"Ṕ",Ṗ:"Ṗ",Ŕ:"Ŕ",Ř:"Ř",Ṙ:"Ṙ",Ŗ:"Ŗ",Ś:"Ś",Ṥ:"Ṥ",Š:"Š",Ṧ:"Ṧ",Ŝ:"Ŝ",Ṡ:"Ṡ",Ş:"Ş",Ť:"Ť",Ṫ:"Ṫ",Ţ:"Ţ",Ú:"Ú",Ù:"Ù",Ü:"Ü",Ǘ:"Ǘ",Ǜ:"Ǜ",Ǖ:"Ǖ",Ǚ:"Ǚ",Ũ:"Ũ",Ṹ:"Ṹ",Ū:"Ū",Ṻ:"Ṻ",Ŭ:"Ŭ",Ǔ:"Ǔ",Û:"Û",Ů:"Ů",Ű:"Ű",Ṽ:"Ṽ",Ẃ:"Ẃ",Ẁ:"Ẁ",Ẅ:"Ẅ",Ŵ:"Ŵ",Ẇ:"Ẇ",Ẍ:"Ẍ",Ẋ:"Ẋ",Ý:"Ý",Ỳ:"Ỳ",Ÿ:"Ÿ",Ỹ:"Ỹ",Ȳ:"Ȳ",Ŷ:"Ŷ",Ẏ:"Ẏ",Ź:"Ź",Ž:"Ž",Ẑ:"Ẑ",Ż:"Ż",ά:"ά",ὰ:"ὰ",ᾱ:"ᾱ",ᾰ:"ᾰ",έ:"έ",ὲ:"ὲ",ή:"ή",ὴ:"ὴ",ί:"ί",ὶ:"ὶ",ϊ:"ϊ",ΐ:"ΐ",ῒ:"ῒ",ῑ:"ῑ",ῐ:"ῐ",ό:"ό",ὸ:"ὸ",ύ:"ύ",ὺ:"ὺ",ϋ:"ϋ",ΰ:"ΰ",ῢ:"ῢ",ῡ:"ῡ",ῠ:"ῠ",ώ:"ώ",ὼ:"ὼ",Ύ:"Ύ",Ὺ:"Ὺ",Ϋ:"Ϋ",Ῡ:"Ῡ",Ῠ:"Ῠ",Ώ:"Ώ",Ὼ:"Ὼ"};class X9{constructor(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new yVe(e,t,this.mode),this.settings=t,this.leftrightDepth=0}expect(e,t){if(t===void 0&&(t=!0),this.fetch().text!==e)throw new De("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var t=this.nextToken;this.consume(),this.gullet.pushToken(new Xo("}")),this.gullet.pushTokens(e);var r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r}parseExpression(e,t){for(var r=[];;){this.mode==="math"&&this.consumeSpaces();var s=this.fetch();if(X9.endOfExpression.indexOf(s.text)!==-1||t&&s.text===t||e&&ef[s.text]&&ef[s.text].infix)break;var i=this.parseAtom(t);if(i){if(i.type==="internal")continue}else break;r.push(i)}return this.mode==="text"&&this.formLigatures(r),this.handleInfixNodes(r)}handleInfixNodes(e){for(var t=-1,r,s=0;s<e.length;s++)if(e[s].type==="infix"){if(t!==-1)throw new De("only one infix operator per group",e[s].token);t=s,r=e[s].replaceWith}if(t!==-1&&r){var i,o,a=e.slice(0,t),l=e.slice(t+1);a.length===1&&a[0].type==="ordgroup"?i=a[0]:i={type:"ordgroup",mode:this.mode,body:a},l.length===1&&l[0].type==="ordgroup"?o=l[0]:o={type:"ordgroup",mode:this.mode,body:l};var c;return r==="\\\\abovefrac"?c=this.callFunction(r,[i,e[t],o],[]):c=this.callFunction(r,[i,o],[]),[c]}else return e}handleSupSubscript(e){var t=this.fetch(),r=t.text;this.consume(),this.consumeSpaces();var s;do{var i;s=this.parseGroup(e)}while(((i=s)==null?void 0:i.type)==="internal");if(!s)throw new De("Expected group after '"+r+"'",t);return s}formatUnsupportedCmd(e){for(var t=[],r=0;r<e.length;r++)t.push({type:"textord",mode:"text",text:e[r]});var s={type:"text",mode:this.mode,body:t},i={type:"color",mode:this.mode,color:this.settings.errorColor,body:[s]};return i}parseAtom(e){var t=this.parseGroup("atom",e);if((t==null?void 0:t.type)==="internal"||this.mode==="text")return t;for(var r,s;;){this.consumeSpaces();var i=this.fetch();if(i.text==="\\limits"||i.text==="\\nolimits"){if(t&&t.type==="op"){var o=i.text==="\\limits";t.limits=o,t.alwaysHandleSupSub=!0}else if(t&&t.type==="operatorname")t.alwaysHandleSupSub&&(t.limits=i.text==="\\limits");else throw new De("Limit controls must follow a math operator",i);this.consume()}else if(i.text==="^"){if(r)throw new De("Double superscript",i);r=this.handleSupSubscript("superscript")}else if(i.text==="_"){if(s)throw new De("Double subscript",i);s=this.handleSupSubscript("subscript")}else if(i.text==="'"){if(r)throw new De("Double superscript",i);var a={type:"textord",mode:this.mode,text:"\\prime"},l=[a];for(this.consume();this.fetch().text==="'";)l.push(a),this.consume();this.fetch().text==="^"&&l.push(this.handleSupSubscript("superscript")),r={type:"ordgroup",mode:this.mode,body:l}}else if(Z9[i.text]){var c=kie.test(i.text),u=[];for(u.push(new Xo(Z9[i.text])),this.consume();;){var d=this.fetch().text;if(!Z9[d]||kie.test(d)!==c)break;u.unshift(new Xo(Z9[d])),this.consume()}var f=this.subparse(u);c?s={type:"ordgroup",mode:"math",body:f}:r={type:"ordgroup",mode:"math",body:f}}else break}return r||s?{type:"supsub",mode:this.mode,base:t,sup:r,sub:s}:t}parseFunction(e,t){var r=this.fetch(),s=r.text,i=ef[s];if(!i)return null;if(this.consume(),t&&t!=="atom"&&!i.allowedInArgument)throw new De("Got function '"+s+"' with no arguments"+(t?" as "+t:""),r);if(this.mode==="text"&&!i.allowedInText)throw new De("Can't use function '"+s+"' in text mode",r);if(this.mode==="math"&&i.allowedInMath===!1)throw new De("Can't use function '"+s+"' in math mode",r);var{args:o,optArgs:a}=this.parseArguments(s,i);return this.callFunction(s,o,a,r,e)}callFunction(e,t,r,s,i){var o={funcName:e,parser:this,token:s,breakOnTokenText:i},a=ef[e];if(a&&a.handler)return a.handler(o,t,r);throw new De("No function handler for "+e)}parseArguments(e,t){var r=t.numArgs+t.numOptionalArgs;if(r===0)return{args:[],optArgs:[]};for(var s=[],i=[],o=0;o<r;o++){var a=t.argTypes&&t.argTypes[o],l=o<t.numOptionalArgs;(t.primitive&&a==null||t.type==="sqrt"&&o===1&&i[0]==null)&&(a="primitive");var c=this.parseGroupOfType("argument to '"+e+"'",a,l);if(l)i.push(c);else if(c!=null)s.push(c);else throw new De("Null argument, please report this as a bug")}return{args:s,optArgs:i}}parseGroupOfType(e,t,r){switch(t){case"color":return this.parseColorGroup(r);case"size":return this.parseSizeGroup(r);case"url":return this.parseUrlGroup(r);case"math":case"text":return this.parseArgumentGroup(r,t);case"hbox":{var s=this.parseArgumentGroup(r,"text");return s!=null?{type:"styling",mode:s.mode,body:[s],style:"text"}:null}case"raw":{var i=this.parseStringGroup("raw",r);return i!=null?{type:"raw",mode:"text",string:i.text}:null}case"primitive":{if(r)throw new De("A primitive argument cannot be optional");var o=this.parseGroup(e);if(o==null)throw new De("Expected group as "+e,this.fetch());return o}case"original":case null:case void 0:return this.parseArgumentGroup(r);default:throw new De("Unknown group type as "+e,this.fetch())}}consumeSpaces(){for(;this.fetch().text===" ";)this.consume()}parseStringGroup(e,t){var r=this.gullet.scanArgument(t);if(r==null)return null;for(var s="",i;(i=this.fetch()).text!=="EOF";)s+=i.text,this.consume();return this.consume(),r.text=s,r}parseRegexGroup(e,t){for(var r=this.fetch(),s=r,i="",o;(o=this.fetch()).text!=="EOF"&&e.test(i+o.text);)s=o,i+=s.text,this.consume();if(i==="")throw new De("Invalid "+t+": '"+r.text+"'",r);return r.range(s,i)}parseColorGroup(e){var t=this.parseStringGroup("color",e);if(t==null)return null;var r=/^(#[a-f0-9]{3,4}|#[a-f0-9]{6}|#[a-f0-9]{8}|[a-f0-9]{6}|[a-z]+)$/i.exec(t.text);if(!r)throw new De("Invalid color: '"+t.text+"'",t);var s=r[0];return/^[0-9a-f]{6}$/i.test(s)&&(s="#"+s),{type:"color-token",mode:this.mode,color:s}}parseSizeGroup(e){var t,r=!1;if(this.gullet.consumeSpaces(),!e&&this.gullet.future().text!=="{"?t=this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/,"size"):t=this.parseStringGroup("size",e),!t)return null;!e&&t.text.length===0&&(t.text="0pt",r=!0);var s=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t.text);if(!s)throw new De("Invalid size: '"+t.text+"'",t);var i={number:+(s[1]+s[2]),unit:s[3]};if(!rse(i))throw new De("Invalid unit: '"+i.unit+"'",t);return{type:"size",mode:this.mode,value:i,isBlank:r}}parseUrlGroup(e){this.gullet.lexer.setCatcode("%",13),this.gullet.lexer.setCatcode("~",12);var t=this.parseStringGroup("url",e);if(this.gullet.lexer.setCatcode("%",14),this.gullet.lexer.setCatcode("~",13),t==null)return null;var r=t.text.replace(/\\([#$%&~_^{}])/g,"$1");return{type:"url",mode:this.mode,url:r}}parseArgumentGroup(e,t){var r=this.gullet.scanArgument(e);if(r==null)return null;var s=this.mode;t&&this.switchMode(t),this.gullet.beginGroup();var i=this.parseExpression(!1,"EOF");this.expect("EOF"),this.gullet.endGroup();var o={type:"ordgroup",mode:this.mode,loc:r.loc,body:i};return t&&this.switchMode(s),o}parseGroup(e,t){var r=this.fetch(),s=r.text,i;if(s==="{"||s==="\\begingroup"){this.consume();var o=s==="{"?"}":"\\endgroup";this.gullet.beginGroup();var a=this.parseExpression(!1,o),l=this.fetch();this.expect(o),this.gullet.endGroup(),i={type:"ordgroup",mode:this.mode,loc:po.range(r,l),body:a,semisimple:s==="\\begingroup"||void 0}}else if(i=this.parseFunction(t,e)||this.parseSymbol(),i==null&&s[0]==="\\"&&!xie.hasOwnProperty(s)){if(this.settings.throwOnError)throw new De("Undefined control sequence: "+s,r);i=this.formatUnsupportedCmd(s),this.consume()}return i}formLigatures(e){for(var t=e.length-1,r=0;r<t;++r){var s=e[r],i=s.text;i==="-"&&e[r+1].text==="-"&&(r+1<t&&e[r+2].text==="-"?(e.splice(r,3,{type:"textord",mode:"text",loc:po.range(s,e[r+2]),text:"---"}),t-=2):(e.splice(r,2,{type:"textord",mode:"text",loc:po.range(s,e[r+1]),text:"--"}),t-=1)),(i==="'"||i==="`")&&e[r+1].text===i&&(e.splice(r,2,{type:"textord",mode:"text",loc:po.range(s,e[r+1]),text:i+i}),t-=1)}}parseSymbol(){var e=this.fetch(),t=e.text;if(/^\\verb[^a-zA-Z]/.test(t)){this.consume();var r=t.slice(5),s=r.charAt(0)==="*";if(s&&(r=r.slice(1)),r.length<2||r.charAt(0)!==r.slice(-1))throw new De(`\\verb assertion failed -- + please report what input caused this bug`);return r=r.slice(1,-1),{type:"verb",mode:"text",body:r,star:s}}Cie.hasOwnProperty(t[0])&&!Nr[this.mode][t[0]]&&(this.settings.strict&&this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Accented Unicode text character "'+t[0]+'" used in math mode',e),t=Cie[t[0]]+t.slice(1));var i=fVe.exec(t);i&&(t=t.substring(0,i.index),t==="i"?t="ı":t==="j"&&(t="ȷ"));var o;if(Nr[this.mode][t]){this.settings.strict&&this.mode==="math"&&GP.indexOf(t)>=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var a=Nr[this.mode][t].group,l=po.range(e),c;if(iBe.hasOwnProperty(a)){var u=a;c={type:"atom",mode:this.mode,family:u,loc:l,text:t}}else c={type:a,mode:this.mode,loc:l,text:t};o=c}else if(t.charCodeAt(0)>=128)this.settings.strict&&(Jre(t.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'"'+(" ("+t.charCodeAt(0)+")"),e)),o={type:"textord",mode:"text",loc:po.range(e),text:t};else return null;if(this.consume(),i)for(var d=0;d<i[0].length;d++){var f=i[0][d];if(!CI[f])throw new De("Unknown accent ' "+f+"'",e);var p=CI[f][this.mode]||CI[f].text;if(!p)throw new De("Accent "+f+" unsupported in "+this.mode+" mode",e);o={type:"accent",mode:this.mode,loc:po.range(e),label:p,isStretchy:!1,isShifty:!0,base:o}}return o}}X9.endOfExpression=["}","\\endgroup","\\end","\\right","&"];var SI=function(e,t){if(!(typeof e=="string"||e instanceof String))throw new TypeError("KaTeX can only parse string typed expression");var r=new X9(e,t);delete r.gullet.macros.current["\\df@tag"];var s=r.parse();if(delete r.gullet.macros.current["\\current@color"],delete r.gullet.macros.current["\\color"],r.gullet.macros.get("\\df@tag")){if(!t.displayMode)throw new De("\\tag works only in display equations");s=[{type:"tag",mode:"text",body:s,tag:r.subparse([new Xo("\\df@tag")])}]}return s},Sie=function(e,t,r){t.textContent="";var s=EI(e,r).toNode();t.appendChild(s)};typeof document<"u"&&document.compatMode!=="CSS1Compat"&&(typeof console<"u"&&console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype."),Sie=function(){throw new De("KaTeX doesn't work in quirks mode.")});var vVe=function(e,t){var r=EI(e,t).toMarkup();return r},bVe=function(e,t){var r=new $P(t);return SI(e,r)},Eie=function(e,t,r){if(r.throwOnError||!(e instanceof De))throw e;var s=fe.makeSpan(["katex-error"],[new Na(t)]);return s.setAttribute("title",e.toString()),s.setAttribute("style","color:"+r.errorColor),s},EI=function(e,t){var r=new $P(t);try{var s=SI(e,r);return ABe(s,e,r)}catch(i){return Eie(i,e,r)}},wVe=function(e,t){var r=new $P(t);try{var s=SI(e,r);return NBe(s,e,r)}catch(i){return Eie(i,e,r)}},xVe="0.16.27",kVe={Span:y4,Anchor:zP,SymbolNode:Na,SvgNode:Xu,PathNode:Zh,LineNode:HP},CVe={version:xVe,render:Sie,renderToString:vVe,ParseError:De,SETTINGS_SCHEMA:N9,__parse:bVe,__renderToDomTree:EI,__renderToHTMLTree:wVe,__setFontMetrics:Xje,__defineSymbol:C,__defineFunction:Ke,__defineMacro:F,__domTree:kVe};function _ie(n){return n.use("FeaturesCtx")}function SVe(n){return e=>{_ie(e).update(t=>t.includes(n)?t:[...t,n])}}var _I=(n=>(n.CodeMirror="code-mirror",n.ListItem="list-item",n.LinkTooltip="link-tooltip",n.Cursor="cursor",n.ImageBlock="image-block",n.BlockEdit="block-edit",n.Toolbar="toolbar",n.Placeholder="placeholder",n.Table="table",n.Latex="latex",n))(_I||{});const EVe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <path + d="M8.85758 18.625C8.4358 18.625 8.07715 18.4772 7.78163 18.1817C7.48613 17.8862 7.33838 17.5275 7.33838 17.1058V6.8942C7.33838 6.47242 7.48613 6.11377 7.78163 5.81825C8.07715 5.52275 8.4358 5.375 8.85758 5.375H12.1999C13.2191 5.375 14.1406 5.69231 14.9643 6.32693C15.788 6.96154 16.1999 7.81603 16.1999 8.89038C16.1999 9.63779 16.0194 10.2471 15.6585 10.7183C15.2976 11.1894 14.9088 11.5314 14.4922 11.7442C15.005 11.9211 15.4947 12.2708 15.9614 12.7933C16.428 13.3157 16.6614 14.0192 16.6614 14.9038C16.6614 16.182 16.1902 17.1217 15.2479 17.723C14.3056 18.3243 13.3563 18.625 12.3999 18.625H8.85758ZM9.4883 16.6327H12.3191C13.1063 16.6327 13.6627 16.4141 13.9884 15.9769C14.314 15.5397 14.4768 15.1205 14.4768 14.7192C14.4768 14.3179 14.314 13.8987 13.9884 13.4615C13.6627 13.0243 13.0909 12.8057 12.273 12.8057H9.4883V16.6327ZM9.4883 10.875H12.0826C12.6903 10.875 13.172 10.7013 13.5278 10.3539C13.8836 10.0064 14.0615 9.59037 14.0615 9.10575C14.0615 8.59035 13.8733 8.16918 13.497 7.84225C13.1207 7.51533 12.6595 7.35188 12.1133 7.35188H9.4883V10.875Z" + /> + </svg> +`,_Ve=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <g clip-path="url(#clip0_977_8081)"> + <path + d="M9.4 16.6L4.8 12L9.4 7.4L8 6L2 12L8 18L9.4 16.6ZM14.6 16.6L19.2 12L14.6 7.4L16 6L22 12L16 18L14.6 16.6Z" + /> + </g> + <defs> + <clipPath id="clip0_977_8081"> + <rect width="24" height="24" /> + </clipPath> + </defs> + </svg> +`,TVe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <path + d="M6.29811 18.625C6.04505 18.625 5.83115 18.5375 5.65641 18.3626C5.48166 18.1877 5.39429 17.9736 5.39429 17.7203C5.39429 17.467 5.48166 17.2532 5.65641 17.0788C5.83115 16.9045 6.04505 16.8173 6.29811 16.8173H9.21159L12.452 7.18265H9.53851C9.28545 7.18265 9.07155 7.0952 8.89681 6.9203C8.72206 6.7454 8.63469 6.5313 8.63469 6.278C8.63469 6.02472 8.72206 5.81089 8.89681 5.63652C9.07155 5.46217 9.28545 5.375 9.53851 5.375H16.8847C17.1377 5.375 17.3516 5.46245 17.5264 5.63735C17.7011 5.81225 17.7885 6.02634 17.7885 6.27962C17.7885 6.53293 17.7011 6.74676 17.5264 6.92113C17.3516 7.09548 17.1377 7.18265 16.8847 7.18265H14.2789L11.0385 16.8173H13.6443C13.8973 16.8173 14.1112 16.9048 14.286 17.0797C14.4607 17.2546 14.5481 17.4687 14.5481 17.722C14.5481 17.9752 14.4607 18.1891 14.286 18.3634C14.1112 18.5378 13.8973 18.625 13.6443 18.625H6.29811Z" + /> + </svg> +`,AVe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <path + d="M17.0385 19.5003V16.5388H14.0769V15.0388H17.0385V12.0773H18.5384V15.0388H21.5V16.5388H18.5384V19.5003H17.0385ZM10.8077 16.5388H7.03845C5.78282 16.5388 4.7125 16.0963 3.8275 15.2114C2.9425 14.3266 2.5 13.2564 2.5 12.0009C2.5 10.7454 2.9425 9.67504 3.8275 8.78979C4.7125 7.90454 5.78282 7.46191 7.03845 7.46191H10.8077V8.96186H7.03845C6.1987 8.96186 5.48235 9.25834 4.8894 9.85129C4.29645 10.4442 3.99998 11.1606 3.99998 12.0003C3.99998 12.8401 4.29645 13.5564 4.8894 14.1494C5.48235 14.7423 6.1987 15.0388 7.03845 15.0388H10.8077V16.5388ZM8.25 12.7503V11.2504H15.75V12.7503H8.25ZM21.5 12.0003H20C20 11.1606 19.7035 10.4442 19.1106 9.85129C18.5176 9.25834 17.8013 8.96186 16.9615 8.96186H13.1923V7.46191H16.9615C18.2171 7.46191 19.2875 7.90441 20.1725 8.78939C21.0575 9.67439 21.5 10.7447 21.5 12.0003Z" + /> + </svg> +`,NVe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + > + <path + d="M3.25 13.7404C3.0375 13.7404 2.85938 13.6684 2.71563 13.5246C2.57188 13.3808 2.5 13.2026 2.5 12.99C2.5 12.7774 2.57188 12.5993 2.71563 12.4558C2.85938 12.3122 3.0375 12.2404 3.25 12.2404H20.75C20.9625 12.2404 21.1406 12.3123 21.2843 12.4561C21.4281 12.5999 21.5 12.7781 21.5 12.9907C21.5 13.2033 21.4281 13.3814 21.2843 13.525C21.1406 13.6686 20.9625 13.7404 20.75 13.7404H3.25ZM10.9423 10.2596V6.62495H6.5673C6.2735 6.62495 6.02377 6.52201 5.8181 6.31613C5.61245 6.11026 5.50963 5.86027 5.50963 5.56615C5.50963 5.27205 5.61245 5.02083 5.8181 4.8125C6.02377 4.60417 6.2735 4.5 6.5673 4.5H17.4423C17.7361 4.5 17.9858 4.60294 18.1915 4.80883C18.3971 5.01471 18.5 5.2647 18.5 5.5588C18.5 5.85292 18.3971 6.10413 18.1915 6.31245C17.9858 6.52078 17.7361 6.62495 17.4423 6.62495H13.0673V10.2596H10.9423ZM10.9423 15.7211H13.0673V18.4423C13.0673 18.7361 12.9643 18.9858 12.7584 19.1915C12.5526 19.3971 12.3026 19.5 12.0085 19.5C11.7144 19.5 11.4631 19.3962 11.2548 19.1887C11.0465 18.9811 10.9423 18.7291 10.9423 18.4327V15.7211Z" + /> + </svg> +`,MVe=` + <svg + xmlns="http://www.w3.org/2000/svg" + width="32" + height="32" + viewBox="0 0 24 24" + > + <path + fill="currentColor" + d="M7 19v-.808L13.096 12L7 5.808V5h10v1.25H9.102L14.727 12l-5.625 5.77H17V19z" + /> + </svg> +`;var Tie=n=>{throw TypeError(n)},Aie=(n,e,t)=>e.has(n)||Tie("Cannot "+t),k4=(n,e,t)=>(Aie(n,e,"read from private field"),t?t.call(n):e.get(n)),Nie=(n,e,t)=>e.has(n)?Tie("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,t),OVe=(n,e,t,r)=>(Aie(n,e,"write to private field"),e.set(n,t),t),X1,J9;class PVe{constructor(){Nie(this,X1,[]),this.clear=()=>(OVe(this,X1,[]),this),Nie(this,J9,e=>{const t={group:e,addItem:(r,s)=>{const i={...s,key:r};return e.items.push(i),t},clear:()=>(e.items=[],t)};return t}),this.addGroup=(e,t)=>{const s={key:e,label:t,items:[]};return k4(this,X1).push(s),k4(this,J9).call(this,s)},this.getGroup=e=>{const t=k4(this,X1).find(r=>r.key===e);if(!t)throw new Error(`Group with key ${e} not found`);return k4(this,J9).call(this,t)},this.build=()=>k4(this,X1)}}X1=new WeakMap,J9=new WeakMap;const Q9="math_inline",TI=ss(Q9,()=>({group:"inline",inline:!0,draggable:!0,atom:!0,attrs:{value:{default:""}},parseDOM:[{tag:`span[data-type="${Q9}"]`,getAttrs:n=>{var e;return{value:(e=n.dataset.value)!=null?e:""}}}],toDOM:n=>{const e=n.attrs.value,t=document.createElement("span");return t.dataset.type=Q9,t.dataset.value=e,CVe.render(e,t,{throwOnError:!1}),t},parseMarkdown:{match:n=>n.type==="inlineMath",runner:(n,e,t)=>{n.addNode(t,{value:e.value})}},toMarkdown:{match:n=>n.type.name===Q9,runner:(n,e)=>{n.addNode("inlineMath",void 0,e.attrs.value)}}})),IVe=zt("ToggleLatex",n=>()=>(e,t)=>{const{hasNode:r,pos:s,target:i}=iJ(e,TI.type(n)),{selection:o,doc:a,tr:l}=e;if(!r){const p=a.textBetween(o.from,o.to);let m=l.replaceSelectionWith(TI.type(n).create({value:p}));return t&&t(m.setSelection(Ft.create(m.doc,o.from))),!0}const{from:c,to:u}=o;if(!i||s<0)return!1;let d=l.delete(s,s+1);const f=i.attrs.value;return d=d.insertText(f,s),t&&t(d.setSelection(It.create(d.doc,c,u+f.length-1))),!0});function DVe(n,e){var t,r,s,i,o,a,l;const c=new PVe;c.addGroup("formatting","Formatting").addItem("bold",{icon:(t=n==null?void 0:n.boldIcon)!=null?t:EVe,active:p=>p.get(ft).call(T1.key,C1.type(p)),onRun:p=>{p.get(ft).call(Ck.key)}}).addItem("italic",{icon:(r=n==null?void 0:n.italicIcon)!=null?r:TVe,active:p=>p.get(ft).call(T1.key,g0.type(p)),onRun:p=>{p.get(ft).call(kk.key)}}).addItem("strikethrough",{icon:(s=n==null?void 0:n.strikethroughIcon)!=null?s:NVe,active:p=>p.get(ft).call(T1.key,P1.type(p)),onRun:p=>{p.get(ft).call(Rk.key)}});const u=c.addGroup("function","Function");u.addItem("code",{icon:(i=n==null?void 0:n.codeIcon)!=null?i:_Ve,active:p=>p.get(ft).call(T1.key,Fu.type(p)),onRun:p=>{p.get(ft).call(Sk.key)}});const d=e&&_ie(e).get();return(d==null?void 0:d.includes(_I.Latex))&&u.addItem("latex",{icon:(o=n==null?void 0:n.latexIcon)!=null?o:MVe,active:p=>p.get(ft).call(bee.key,TI.type(p)),onRun:p=>{p.get(ft).call(IVe.key)}}),u.addItem("link",{icon:(a=n==null?void 0:n.linkIcon)!=null?a:AVe,active:p=>p.get(ft).call(T1.key,$h.type(p)),onRun:p=>{p.get(ft).call(Cje.key)}}),(l=n==null?void 0:n.buildToolbar)==null||l.call(n,c),c.build()}const RVe=j1({props:{ctx:{type:Object,required:!0},hide:{type:Function,required:!0},show:{type:Object,required:!0},selection:{type:Object,required:!0},config:{type:Object,required:!1}},setup(n){const{ctx:e,config:t}=n,r=o=>a=>{a.preventDefault(),e&&o(e)};function s(o){return n.selection.value,e.get(VN).status!==mk.Created?!1:o(e)}const i=_P(()=>DVe(t,e));return()=>rn(fo,null,i.value.map(o=>o.items.map(a=>rn("button",{type:"button",class:yp("toolbar-item",e&&s(a.active)&&"active"),onPointerdown:r(a.onRun)},rn(l4,{icon:a.icon})))).reduce((o,a,l)=>(l===0?o.push(...a):o.push(rn("div",{class:"divider"}),...a),o),[]))}});var Mie=n=>{throw TypeError(n)},Oie=(n,e,t)=>e.has(n)||Mie("Cannot "+t),ea=(n,e,t)=>(Oie(n,e,"read from private field"),t?t.call(n):e.get(n)),C4=(n,e,t)=>e.has(n)?Mie("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,t),e8=(n,e,t,r)=>(Oie(n,e,"write to private field"),e.set(n,t),t),tf,S4,t8,E4,_4;const Pie=IP("CREPE_TOOLBAR");class $Ve{constructor(e,t,r){C4(this,tf),C4(this,S4),C4(this,t8),C4(this,E4),C4(this,_4,ls(!1)),this.update=(o,a)=>{ea(this,tf).update(o,a),ea(this,E4).value=o.state.selection},this.destroy=()=>{ea(this,tf).destroy(),ea(this,t8).unmount(),ea(this,S4).remove()},this.hide=()=>{ea(this,tf).hide()};const s=document.createElement("div");s.className="milkdown-toolbar",e8(this,E4,KRe(t.state.selection));const i=w9(RVe,{ctx:e,hide:this.hide,config:r,selection:ea(this,E4),show:ea(this,_4)});i.mount(s),e8(this,S4,s),e8(this,t8,i),e8(this,tf,new mje({content:ea(this,S4),debounce:20,offset:10,shouldShow(o){const{doc:a,selection:l}=o.state,{empty:c,from:u,to:d}=l,f=!a.textBetween(u,d).length&&l instanceof It,p=!(l instanceof It),m=o.dom.getRootNode().activeElement,y=s.contains(m),w=!o.hasFocus()&&!y,k=!o.editable;return!(w||p||c||f||k)}})),ea(this,tf).onShow=()=>{ea(this,_4).value=!0},ea(this,tf).onHide=()=>{ea(this,_4).value=!1},this.update(t)}}tf=new WeakMap,S4=new WeakMap,t8=new WeakMap,E4=new WeakMap,_4=new WeakMap;const LVe=(n,e)=>{n.config(SVe(_I.Toolbar)).config(t=>{t.set(Pie.key,{view:r=>new $Ve(t,r,e)})}).use(Pie)},FVe=Object.freeze(Object.defineProperty({__proto__:null,default:({value:n,onChange:e,className:t})=>{const r=U.useRef(null),s=U.useRef(null),i=U.useRef(!1),o=U.useRef(),a=U.useRef(!1),l=U.useRef(n),c=U.useRef(e);return U.useEffect(()=>{c.current=e},[e]),U.useEffect(()=>{if(!r.current)return;i.current=!1;const u=new rRe({root:r.current,defaultValue:n||""});u.addFeature(pje).addFeature(LVe),u.create().then(()=>{i.current=!0,s.current=u,l.current=n});const d=()=>{a.current||!i.current||(clearTimeout(o.current),o.current=setTimeout(()=>{if(!(!s.current||!i.current))try{const p=s.current.getMarkdown();p!==l.current&&(l.current=p,c.current(p))}catch(p){console.error("Error getting markdown:",p)}},300))},f=new MutationObserver(d);return f.observe(r.current,{childList:!0,subtree:!0,characterData:!0}),()=>{var p;f.disconnect(),o.current&&clearTimeout(o.current),i.current=!1,(p=s.current)==null||p.destroy(),s.current=null}},[]),U.useEffect(()=>{if(!(!s.current||!i.current))try{const u=s.current.getMarkdown();n!==u&&n!==l.current&&(a.current=!0,l.current=n,setTimeout(()=>{a.current=!1},150))}catch(u){console.error("Error syncing external value:",u)}},[n]),b.jsx("div",{ref:r,className:`milkdown-editor p-3 min-h-[120px] prose prose-sm max-w-none dark:prose-invert ${t||""}`})}},Symbol.toStringTag,{value:"Module"})),Pc={LoadFail:0,BadSignature:1,BadTimestamp:2,BadSettingValue:3,BadFormat:4,UnknownSetting:5};class Ic extends Error{constructor(t){super(t.reason);G(this,"code");G(this,"line");this.code=t.code,this.line=t.line}}const Iie=/\r?\n|\r/gm;class jVe{constructor(e){G(this,"writable");G(this,"readable");const t=new BVe(e);this.writable=new WritableStream({write(r){t.transform(r)},close(){t.close()}}),this.readable=new ReadableStream({start(r){t.onLine=s=>r.enqueue(s),t.onClose=()=>r.close()}})}}class BVe{constructor(e){G(this,"a","");G(this,"b");G(this,"onLine");G(this,"onClose");this.b=new TextDecoder(e)}transform(e){this.a+=this.b.decode(e,{stream:!0});const t=this.a.split(Iie);this.a=t.pop()||"";for(let r=0;r<t.length;r++)this.onLine(t[r].trim())}close(){this.a&&this.onLine(this.a.trim()),this.a="",this.onClose()}}async function VVe(n,e){const t=new ReadableStream({start(r){const s=n.split(Iie);for(const i of s)r.enqueue(i);r.close()}});return AI(t,e)}async function AI(n,e){const t=(e==null?void 0:e.type)??"vtt";let r;if(typeof t=="string")switch(t){case"srt":r=(await Promise.resolve().then(()=>oHe)).default;break;case"ssa":case"ass":r=(await Promise.resolve().then(()=>lHe)).default;break;default:r=(await Promise.resolve().then(function(){return oze})).default}else r=t;let s;const i=n.getReader(),o=r(),a=!!(e!=null&&e.strict)||!!(e!=null&&e.errors);await o.init({strict:!1,...e,errors:a,type:t,cancel(){i.cancel(),s=o.done(!0)}});let l=1;for(;;){const{value:c,done:u}=await i.read();if(u){o.parse("",l),s=o.done(!1);break}o.parse(c,l),l++}return s}async function zVe(n,e){var o,a;const t=await n;if(!t.ok||!t.body)return{metadata:{},cues:[],regions:[],errors:[void 0]};const r=t.headers.get("content-type")||"",s=(o=r.match(/text\/(.*?)(?:;|$)/))==null?void 0:o[1],i=(a=r.match(/charset=(.*?)(?:;|$)/))==null?void 0:a[1];return Die(t.body,{type:s,encoding:i,...e})}async function Die(n,{encoding:e="utf-8",...t}={}){const r=n.pipeThrough(new jVe(e));return AI(r,t)}class Rie extends EventTarget{constructor(t,r,s){super();G(this,"id","");G(this,"startTime");G(this,"endTime");G(this,"text");G(this,"pauseOnExit",!1);this.startTime=t,this.endTime=r,this.text=s}addEventListener(t,r,s){super.addEventListener(t,r,s)}removeEventListener(t,r,s){super.removeEventListener(t,r,s)}}const NI=typeof document>"u",HVe=NI?Rie:window.VTTCue;class n8 extends HVe{constructor(){super(...arguments);G(this,"region",null);G(this,"vertical","");G(this,"snapToLines",!0);G(this,"line","auto");G(this,"lineAlign","start");G(this,"position","auto");G(this,"positionAlign","auto");G(this,"size",100);G(this,"align","center");G(this,"style")}}class $ie{constructor(){G(this,"id","");G(this,"width",100);G(this,"lines",3);G(this,"regionAnchorX",0);G(this,"regionAnchorY",100);G(this,"viewportAnchorX",0);G(this,"viewportAnchorY",100);G(this,"scroll","")}}const Lie=",",qVe="%";function UVe(n){const e=parseInt(n,10);return Number.isNaN(e)?null:e}function T4(n){const e=parseInt(n.replace(qVe,""),10);return!Number.isNaN(e)&&e>=0&&e<=100?e:null}function Fie(n){if(!n.includes(Lie))return null;const[e,t]=n.split(Lie).map(T4);return e!==null&&t!==null?[e,t]:null}function WVe(n){const e=parseFloat(n);return Number.isNaN(e)?null:e}const GVe="WEBVTT",jie=",",KVe="%",J1=/[:=]/,YVe=/^[\s\t]*(region|vertical|line|position|size|align)[:=]/,ZVe="NOTE",XVe="REGION",JVe=/^REGION:?[\s\t]+/,A4=/[\s\t]+/,QVe="-->",eze=/[\s\t]*-->[\s\t]+/,tze=/start|center|end|left|right/,nze=/start|center|end/,rze=/line-(?:left|right)|center|auto/,sze=/^(?:(\d{1,2}):)?(\d{2}):(\d{2})(?:\.(\d{1,3}))?$/;var N4=(n=>(n[n.None=0]="None",n[n.Header=1]="Header",n[n.Cue=2]="Cue",n[n.Region=3]="Region",n[n.Note=4]="Note",n))(N4||{});class MI{constructor(){G(this,"h");G(this,"e",0);G(this,"i",{});G(this,"j",{});G(this,"l",[]);G(this,"c",null);G(this,"d",null);G(this,"m",[]);G(this,"f");G(this,"n","")}async init(e){this.h=e,e.strict&&(this.e=1),e.errors&&(this.f=(await Promise.resolve().then(()=>loe)).ParseErrorBuilder)}parse(e,t){var r,s,i,o,a,l;if(e==="")this.c?(this.l.push(this.c),(s=(r=this.h).onCue)==null||s.call(r,this.c),this.c=null):this.d?(this.j[this.d.id]=this.d,(o=(i=this.h).onRegion)==null||o.call(i,this.d),this.d=null):this.e===1&&(this.k(e,t),(l=(a=this.h).onHeaderMetadata)==null||l.call(a,this.i)),this.e=0;else if(this.e)switch(this.e){case 1:this.k(e,t);break;case 2:if(this.c){const c=this.c.text.length>0;!c&&YVe.test(e)?this.o(e.split(A4),t):this.c.text+=(c?` +`:"")+e}break;case 3:this.p(e.split(A4),t);break}else if(e.startsWith(ZVe))this.e=4;else if(e.startsWith(XVe))this.e=3,this.d=new $ie,this.p(e.replace(JVe,"").split(A4),t);else if(e.includes(QVe)){const c=this.q(e,t);c&&(this.c=new n8(c[0],c[1],""),this.c.id=this.n,this.o(c[2],t)),this.e=2}else t===1&&this.k(e,t);this.n=e}done(){return{metadata:this.i,cues:this.l,regions:Object.values(this.j),errors:this.m}}k(e,t){var r;if(t>1){if(J1.test(e)){const[s,i]=e.split(J1);s&&(this.i[s]=(i||"").replace(A4,""))}}else e.startsWith(GVe)?this.e=1:this.g((r=this.f)==null?void 0:r.r())}q(e,t){var c,u,d;const[r,s=""]=e.split(eze),[i,...o]=s.split(A4),a=B0(r),l=B0(i);if(a!==null&&l!==null&&l>a)return[a,l,o];a===null&&this.g((c=this.f)==null?void 0:c.s(r,t)),l===null&&this.g((u=this.f)==null?void 0:u.t(i,t)),a!=null&&l!==null&&l>a&&this.g((d=this.f)==null?void 0:d.u(a,l,t))}p(e,t){var s,i;let r;for(let o=0;o<e.length;o++)if(J1.test(e[o])){r=!1;const[a,l]=e[o].split(J1);switch(a){case"id":this.d.id=l;break;case"width":const c=T4(l);c!==null?this.d.width=c:r=!0;break;case"lines":const u=UVe(l);u!==null?this.d.lines=u:r=!0;break;case"regionanchor":const d=Fie(l);d!==null?(this.d.regionAnchorX=d[0],this.d.regionAnchorY=d[1]):r=!0;break;case"viewportanchor":const f=Fie(l);f!==null?(this.d.viewportAnchorX=f[0],this.d.viewportAnchorY=f[1]):r=!0;break;case"scroll":l==="up"?this.d.scroll="up":r=!0;break;default:this.g((s=this.f)==null?void 0:s.v(a,l,t))}r&&this.g((i=this.f)==null?void 0:i.w(a,l,t))}}o(e,t){var s,i;let r;for(let o=0;o<e.length;o++)if(r=!1,J1.test(e[o])){const[a,l]=e[o].split(J1);switch(a){case"region":const c=this.j[l];c&&(this.c.region=c);break;case"vertical":l==="lr"||l==="rl"?(this.c.vertical=l,this.c.region=null):r=!0;break;case"line":const[u,d]=l.split(jie);if(u.includes(KVe)){const w=T4(u);w!==null?(this.c.line=w,this.c.snapToLines=!1):r=!0}else{const w=WVe(u);w!==null?this.c.line=w:r=!0}nze.test(d)?this.c.lineAlign=d:d&&(r=!0),this.c.line!=="auto"&&(this.c.region=null);break;case"position":const[f,p]=l.split(jie),m=T4(f);m!==null?this.c.position=m:r=!0,p&&rze.test(p)?this.c.positionAlign=p:p&&(r=!0);break;case"size":const y=T4(l);y!==null?(this.c.size=y,y<100&&(this.c.region=null)):r=!0;break;case"align":tze.test(l)?this.c.align=l:r=!0;break;default:this.g((s=this.f)==null?void 0:s.x(a,l,t))}r&&this.g((i=this.f)==null?void 0:i.y(a,l,t))}}g(e){var t,r;if(e){if(this.m.push(e),this.h.strict)throw this.h.cancel(),e;(r=(t=this.h).onError)==null||r.call(t,e)}}}function B0(n){const e=n.match(sze);if(!e)return null;const t=e[1]?parseInt(e[1],10):0,r=parseInt(e[2],10),s=parseInt(e[3],10),i=e[4]?parseInt(e[4].padEnd(3,"0"),10):0,o=t*3600+r*60+s+i/1e3;return t<0||r<0||s<0||i<0||r>59||s>59?null:o}function ize(){return new MI}var oze=Object.freeze({__proto__:null,VTTBlock:N4,VTTParser:MI,default:ize,parseVTTTimestamp:B0});const aze=/[0-9]/,lze=/[\s\t]+/,Bie={c:"span",i:"i",b:"b",u:"u",ruby:"ruby",rt:"rt",v:"span",lang:"span",timestamp:"span"},cze={"&":"&","<":"<",">":">",""":'"',"'":"'"," ":" ","‎":"‎","‏":"‏"},uze=/&(?:amp|lt|gt|quot|#(0+)?39|nbsp|lrm|rlm);/g,dze=new Set(["white","lime","cyan","red","yellow","magenta","blue","black"]),hze=new Set(Object.keys(Bie));function Vie(n){var c,u;let e="",t=1,r=[],s=[],i;for(let d=0;d<n.text.length;d++){const f=n.text[d];switch(t){case 1:f==="<"?(l(),t=2):e+=f;break;case 2:switch(f){case` +`:case" ":case" ":o(),t=4;break;case".":o(),t=3;break;case"/":t=5;break;case">":o(),t=1;break;default:!e&&aze.test(f)&&(t=6),e+=f;break}break;case 3:switch(f){case" ":case" ":case` +`:a(),i&&((c=i.class)==null||c.trim()),t=4;break;case".":a();break;case">":a(),i&&((u=i.class)==null||u.trim()),t=1;break;default:e+=f}break;case 4:f===">"?(e=e.replace(lze," "),(i==null?void 0:i.type)==="v"?i.voice=OI(e):(i==null?void 0:i.type)==="lang"&&(i.lang=OI(e)),e="",t=1):e+=f;break;case 5:f===">"&&(e="",i=s.pop(),t=1);break;case 6:if(f===">"){const p=B0(e);p!==null&&p>=n.startTime&&p<=n.endTime&&(e="timestamp",o(),i.time=p),e="",t=1}else e+=f;break}}function o(){if(hze.has(e)){const d=i;i=fze(e),d?(s[s.length-1]!==d&&s.push(d),d.children.push(i)):r.push(i)}e="",t=1}function a(){if(i&&e){const d=e.replace("bg_","");dze.has(d)?i[e.startsWith("bg_")?"bgColor":"color"]=d:i.class=i.class?i.class+" "+e:e}e=""}function l(){if(!e)return;const d={type:"text",data:OI(e)};i?i.children.push(d):r.push(d),e=""}return t===1&&l(),r}function fze(n){return{tagName:Bie[n],type:n,children:[]}}function OI(n){return n.replace(uze,e=>cze[e]||"'")}function Hi(n,e,t){n.style.setProperty(`--${e}`,t+"")}function nf(n,e,t=!0){n.setAttribute(`data-${e}`,t===!0?"":t+"")}function r8(n,e){n.setAttribute("data-part",e)}function pze(n){return parseFloat(getComputedStyle(n).lineHeight)||0}function mze(n){if(NI)throw Error("[media-captions] called `createVTTCueTemplate` on the server - use `renderVTTCueString`");const e=document.createElement("template");return e.innerHTML=PI(n),{cue:n,content:e.content}}function PI(n,e=0){return II(Vie(n),e)}function II(n,e=0){let t,r="";for(const s of n)if(s.type==="text")r+=s.data;else{const i=s.type==="timestamp";t={},t.class=s.class,t.title=s.type==="v"&&s.voice,t.lang=s.type==="lang"&&s.lang,t["data-part"]=s.type==="v"&&"voice",i&&(t["data-part"]="timed",t["data-time"]=s.time,t["data-future"]=s.time>e,t["data-past"]=s.time<e),t.style=`${s.color?`color: ${s.color};`:""}${s.bgColor?`background-color: ${s.bgColor};`:""}`;const o=Object.entries(t).filter(a=>a[1]).map(a=>`${a[0]}="${a[1]===!0?"":a[1]}"`).join(" ");r+=`<${s.tagName}${o?" "+o:""}>${II(s.children)}</${s.tagName}>`}return r}function zie(n,e){if(!NI)for(const t of n.querySelectorAll('[data-part="timed"]')){const r=Number(t.getAttribute("data-time"));Number.isNaN(r)||(r>e?nf(t,"future"):t.removeAttribute("data-future"),r<e?nf(t,"past"):t.removeAttribute("data-past"))}}function gze(n,e){let t=null,r;function s(){i(),n(...r),r=void 0}function i(){clearTimeout(t),t=null}function o(){r=[].slice.call(arguments),i(),t=setTimeout(s,e)}return o}const rf=Symbol(0);function DI(n){return n instanceof HTMLElement?{top:n.offsetTop,width:n.clientWidth,height:n.clientHeight,left:n.offsetLeft,right:n.offsetLeft+n.clientWidth,bottom:n.offsetTop+n.clientHeight}:{...n}}function s8(n,e,t){switch(e){case"+x":n.left+=t,n.right+=t;break;case"-x":n.left-=t,n.right-=t;break;case"+y":n.top+=t,n.bottom+=t;break;case"-y":n.top-=t,n.bottom-=t;break}}function yze(n,e){return n.left<=e.right&&n.right>=e.left&&n.top<=e.bottom&&n.bottom>=e.top}function vze(n,e){for(let t=0;t<e.length;t++)if(yze(n,e[t]))return e[t];return null}function Hie(n,e){return e.top>=0&&e.bottom<=n.height&&e.left>=0&&e.right<=n.width}function bze(n,e,t){switch(t){case"+x":return e.left<0;case"-x":return e.right>n.width;case"+y":return e.top<0;case"-y":return e.bottom>n.height}}function wze(n,e){const t=Math.max(0,Math.min(n.width,e.right)-Math.max(0,e.left)),r=Math.max(0,Math.min(n.height,e.bottom)-Math.max(0,e.top));return t*r/(n.height*n.width)}function RI(n,e){return{top:e.top/n.height,left:e.left/n.width,right:(n.width-e.right)/n.width,bottom:(n.height-e.bottom)/n.height}}function qie(n,e){return e.top=e.top*n.height,e.left=e.left*n.width,e.right=n.width-e.right*n.width,e.bottom=n.height-e.bottom*n.height,e}const Uie=["top","left","right","bottom"];function Wie(n,e,t,r){const s=RI(e,t);for(const i of Uie)Hi(n,`${r}-${i}`,s[i]*100+"%")}function Gie(n,e,t,r){let s=1,i,o={...e};for(let a=0;a<r.length;a++){for(;bze(n,e,r[a])||Hie(n,e)&&vze(e,t);)s8(e,r[a],1);if(Hie(n,e))return e;const l=wze(n,e);s>l&&(i={...e},s=l),e={...o}}return i||o}const M4=Symbol(0);function xze(n,e,t,r){let s=t.firstElementChild,i=Sze(e),o,a=[];if(t[rf]||(t[rf]=kze(n,t)),o=qie(n,{...t[rf]}),t[M4])a=[t[M4]==="top"?"+y":"-y","+x","-x"];else if(e.snapToLines){let l;switch(e.vertical){case"":a=["+y","-y"],l="height";break;case"rl":a=["+x","-x"],l="width";break;case"lr":a=["-x","+x"],l="width";break}let c=pze(s),u=c*Math.round(i),d=n[l]+c,f=a[0];Math.abs(u)>d&&(u=u<0?-1:1,u*=Math.ceil(d/c)*c),i<0&&(u+=e.vertical===""?n.height:n.width,a=a.reverse()),s8(o,f,u)}else{const l=e.vertical==="",c=l?"+y":"+x",u=l?o.height:o.width;s8(o,c,(l?n.height:n.width)*i/100),s8(o,c,e.lineAlign==="center"?u/2:e.lineAlign==="end"?u:0),a=l?["-y","+y","-x","+x"]:["-x","+x","-y","+y"]}return o=Gie(n,o,r,a),Wie(t,n,o,"cue"),o}function kze(n,e){const t=DI(e),r=Cze(e);if(e[M4]=!1,r.top&&(t.top=r.top,t.bottom=r.top+t.height,e[M4]="top"),r.bottom){const s=n.height-r.bottom;t.top=s-t.height,t.bottom=s,e[M4]="bottom"}return r.left&&(t.left=r.left),r.right&&(t.right=n.width-r.right),RI(n,t)}function Cze(n){const e={};for(const t of Uie)e[t]=parseFloat(n.style.getPropertyValue(`--cue-${t}`));return e}function Sze(n){return n.line==="auto"?n.snapToLines?-1:100:n.line}function Eze(n){if(n.position==="auto")switch(n.align){case"start":case"left":return 0;case"right":case"end":return 100;default:return 50}return n.position}function _ze(n,e){if(n.positionAlign==="auto")switch(n.align){case"start":return e==="ltr"?"line-left":"line-right";case"end":return e==="ltr"?"line-right":"line-left";case"center":return"center";default:return`line-${n.align}`}return n.positionAlign}const Tze=["-y","+y","-x","+x"];function Aze(n,e,t,r){let s=Array.from(t.querySelectorAll('[data-part="cue-display"]')),i=0,o=Math.max(0,s.length-e.lines);for(let l=s.length-1;l>=o;l--)i+=s[l].offsetHeight;Hi(t,"region-height",i+"px"),t[rf]||(t[rf]=RI(n,DI(t)));let a={...t[rf]};return a=qie(n,a),a.width=t.clientWidth,a.height=i,a.right=a.left+a.width,a.bottom=a.top+i,a=Gie(n,a,r,Tze),Wie(t,n,a,"region"),a}class Nze{constructor(e,t){G(this,"overlay");G(this,"z");G(this,"A",0);G(this,"C","ltr");G(this,"B",[]);G(this,"D",!1);G(this,"E");G(this,"j",new Map);G(this,"l",new Map);G(this,"K",gze(()=>{this.D=!1,this.G();for(const e of this.j.values())e[rf]=null;for(const e of this.l.values())e&&(e[rf]=null);this.H(!0)},50));this.overlay=e,this.dir=(t==null?void 0:t.dir)??"ltr",e.setAttribute("translate","yes"),e.setAttribute("aria-live","off"),e.setAttribute("aria-atomic","true"),r8(e,"captions"),this.G(),this.E=new ResizeObserver(this.I.bind(this)),this.E.observe(e)}get dir(){return this.C}set dir(e){this.C=e,nf(this.overlay,"dir",e)}get currentTime(){return this.A}set currentTime(e){this.A=e,this.update()}changeTrack({regions:e,cues:t}){this.reset(),this.J(e);for(const r of t)this.l.set(r,null);this.update()}addCue(e){this.l.set(e,null),this.update()}removeCue(e){this.l.delete(e),this.update()}update(e=!1){this.H(e)}reset(){this.l.clear(),this.j.clear(),this.B=[],this.overlay.textContent=""}destroy(){this.reset(),this.E.disconnect()}I(){this.D=!0,this.K()}G(){this.z=DI(this.overlay),Hi(this.overlay,"overlay-width",this.z.width+"px"),Hi(this.overlay,"overlay-height",this.z.height+"px")}H(e=!1){if(!this.l.size||this.D)return;let t,r=[...this.l.keys()].filter(i=>this.A>=i.startTime&&this.A<=i.endTime).sort((i,o)=>i.startTime!==o.startTime?i.startTime-o.startTime:i.endTime-o.endTime),s=r.map(i=>i.region);for(let i=0;i<this.B.length;i++){if(t=this.B[i],r[i]===t)continue;if(t.region&&!s.includes(t.region)){const a=this.j.get(t.region.id);a&&(a.removeAttribute("data-active"),e=!0)}const o=this.l.get(t);o&&(o.remove(),e=!0)}for(let i=0;i<r.length;i++){t=r[i];let o=this.l.get(t);o||this.l.set(t,o=this.L(t));const a=this.F(t)&&this.j.get(t.region.id);a&&!a.hasAttribute("data-active")&&(requestAnimationFrame(()=>nf(a,"active")),e=!0),o.isConnected||((a||this.overlay).append(o),e=!0)}if(e){const i=[],o=new Set;for(let a=r.length-1;a>=0;a--){if(t=r[a],o.has(t.region||t))continue;const l=this.F(t),c=l?this.j.get(t.region.id):this.l.get(t);l?i.push(Aze(this.z,t.region,c,i)):i.push(xze(this.z,t,c,i)),o.add(l?t.region:t)}}zie(this.overlay,this.A),this.B=r}J(e){if(e)for(const t of e){const r=this.M(t);this.j.set(t.id,r),this.overlay.append(r)}}M(e){const t=document.createElement("div");return r8(t,"region"),nf(t,"id",e.id),nf(t,"scroll",e.scroll),Hi(t,"region-width",e.width+"%"),Hi(t,"region-anchor-x",e.regionAnchorX),Hi(t,"region-anchor-y",e.regionAnchorY),Hi(t,"region-viewport-anchor-x",e.viewportAnchorX),Hi(t,"region-viewport-anchor-y",e.viewportAnchorY),Hi(t,"region-lines",e.lines),t}L(e){var o;const t=document.createElement("div"),r=Eze(e),s=_ze(e,this.C);if(r8(t,"cue-display"),e.vertical!==""&&nf(t,"vertical"),Hi(t,"cue-text-align",e.align),e.style)for(const a of Object.keys(e.style))t.style.setProperty(a,e.style[a]);if(this.F(e))Hi(t,"cue-offset",`${r-(s==="line-right"?100:s==="center"?50:0)}%`);else if(Hi(t,"cue-writing-mode",e.vertical===""?"horizontal-tb":e.vertical==="lr"?"vertical-lr":"vertical-rl"),!((o=e.style)!=null&&o["--cue-width"])){let a=r;s==="line-left"?a=100-r:s==="center"&&r<=50?a=r*2:s==="center"&&r>50&&(a=(100-r)*2);const l=e.size<a?e.size:a;e.vertical===""?Hi(t,"cue-width",l+"%"):Hi(t,"cue-height",l+"%")}const i=document.createElement("div");return r8(i,"cue"),e.id&&nf(i,"id",e.id),i.innerHTML=PI(e),t.append(i),t}F(e){return e.region&&e.size===100&&e.vertical===""&&e.line==="auto"}}const i8=Object.freeze(Object.defineProperty({__proto__:null,CaptionsRenderer:Nze,ParseError:Ic,ParseErrorCode:Pc,TextCue:Rie,VTTCue:n8,VTTRegion:$ie,createVTTCueTemplate:mze,parseByteStream:Die,parseResponse:zVe,parseText:VVe,parseTextStream:AI,parseVTTTimestamp:B0,renderVTTCueString:PI,renderVTTTokensString:II,tokenizeVTTCue:Vie,updateTimedVTTCueNodes:zie},Symbol.toStringTag,{value:"Module"}));class Mze extends iG{constructor(t,r){super(t,r);G(this,"$$PROVIDER_TYPE","AUDIO");G(this,"airPlay");ns(()=>{this.airPlay=new oG(this.media,r)},this.scope)}get type(){return"audio"}setup(){super.setup(),this.type==="audio"&&this.ctx.notify("provider-setup",this)}get audio(){return this.media}}const Oze=Object.freeze(Object.defineProperty({__proto__:null,AudioProvider:Mze},Symbol.toStringTag,{value:"Module"})),Pze=n=>sc(n);class Ize{constructor(e,t){N(this,Tn);N(this,qm);N(this,vr);N(this,Pn,null);N(this,$v,null);G(this,"config",{});N(this,Lv,new Set);M(this,qm,e),M(this,vr,t)}get instance(){return h(this,Pn)}setup(e){const{streamType:t}=h(this,vr).$state,r=Re(t).includes("live"),s=Re(t).includes("ll-");M(this,Pn,new e({lowLatencyMode:s,backBufferLength:s?4:r?8:void 0,renderTextTracksNatively:!1,...this.config}));const i=v(this,Tn,Rfe).bind(this);for(const o of Object.values(e.Events))h(this,Pn).on(o,i);h(this,Pn).on(e.Events.ERROR,v(this,Tn,zfe).bind(this));for(const o of h(this,Lv))o(h(this,Pn));h(this,vr).player.dispatch("hls-instance",{detail:h(this,Pn)}),h(this,Pn).attachMedia(h(this,qm)),h(this,Pn).on(e.Events.AUDIO_TRACK_SWITCHED,v(this,Tn,Ffe).bind(this)),h(this,Pn).on(e.Events.LEVEL_SWITCHED,v(this,Tn,jfe).bind(this)),h(this,Pn).on(e.Events.LEVEL_LOADED,v(this,Tn,Vfe).bind(this)),h(this,Pn).on(e.Events.LEVEL_UPDATED,v(this,Tn,Bfe).bind(this)),h(this,Pn).on(e.Events.NON_NATIVE_TEXT_TRACKS_FOUND,v(this,Tn,$fe).bind(this)),h(this,Pn).on(e.Events.CUES_PARSED,v(this,Tn,Lfe).bind(this)),h(this,vr).qualities[ti.enableAuto]=v(this,Tn,qfe).bind(this),Rn(h(this,vr).qualities,"change",v(this,Tn,Ufe).bind(this)),Rn(h(this,vr).audioTracks,"change",v(this,Tn,Wfe).bind(this)),M(this,$v,me(v(this,Tn,Ife).bind(this)))}onInstance(e){return h(this,Lv).add(e),()=>h(this,Lv).delete(e)}loadSource(e){var t;ut(e.src)&&((t=h(this,Pn))==null||t.loadSource(e.src))}destroy(){var e,t;(e=h(this,Pn))==null||e.destroy(),M(this,Pn,null),(t=h(this,$v))==null||t.call(this),M(this,$v,null)}}qm=new WeakMap,vr=new WeakMap,Pn=new WeakMap,$v=new WeakMap,Lv=new WeakMap,Tn=new WeakSet,ug=function(e,t){return new tn(Pze(e),{detail:t})},Ife=function(){if(!h(this,vr).$state.live())return;const e=new k2(v(this,Tn,Dfe).bind(this));return e.start(),e.stop.bind(e)},Dfe=function(){var e;h(this,vr).$state.liveSyncPosition.set(((e=h(this,Pn))==null?void 0:e.liveSyncPosition)??1/0)},Rfe=function(e,t){var r;(r=h(this,vr).player)==null||r.dispatch(v(this,Tn,ug).call(this,e,t))},$fe=function(e,t){const r=v(this,Tn,ug).call(this,e,t);let s=-1;for(let i=0;i<t.tracks.length;i++){const o=t.tracks[i],a=o.subtitleTrack??o.closedCaptions,l=new ph({id:`hls-${o.kind}-${i}`,src:a==null?void 0:a.url,label:o.label,language:a==null?void 0:a.lang,kind:o.kind,default:o.default});l[qt.readyState]=2,l[qt.onModeChange]=()=>{l.mode==="showing"?(h(this,Pn).subtitleTrack=i,s=i):s===i&&(h(this,Pn).subtitleTrack=-1,s=-1)},h(this,vr).textTracks.add(l,r)}},Lfe=function(e,t){var o;const r=(o=h(this,Pn))==null?void 0:o.subtitleTrack,s=h(this,vr).textTracks.getById(`hls-${t.type}-${r}`);if(!s)return;const i=v(this,Tn,ug).call(this,e,t);for(const a of t.cues)a.positionAlign="auto",s.addCue(a,i)},Ffe=function(e,t){const r=h(this,vr).audioTracks[t.id];if(r){const s=v(this,Tn,ug).call(this,e,t);h(this,vr).audioTracks[$t.select](r,!0,s)}},jfe=function(e,t){const r=h(this,vr).qualities[t.level];if(r){const s=v(this,Tn,ug).call(this,e,t);h(this,vr).qualities[$t.select](r,!0,s)}},Bfe=function(e,t){t.details.totalduration>0&&h(this,vr).$state.inferredLiveDVRWindow.set(t.details.totalduration)},Vfe=function(e,t){var c;if(h(this,vr).$state.canPlay())return;const{type:r,live:s,totalduration:i,targetduration:o}=t.details,a=v(this,Tn,ug).call(this,e,t);h(this,vr).notify("stream-type-change",s?r==="EVENT"&&Number.isFinite(i)&&o>=10?"live:dvr":"live":"on-demand",a),h(this,vr).notify("duration-change",i,a);const l=h(this,Pn).media;h(this,Pn).currentLevel===-1&&h(this,vr).qualities[ti.setAuto](!0,a);for(const u of h(this,Pn).audioTracks){const d={id:u.id.toString(),label:u.name,language:u.lang||"",kind:"main"};h(this,vr).audioTracks[$t.add](d,a)}for(const u of h(this,Pn).levels){const d={id:((c=u.id)==null?void 0:c.toString())??u.height+"p",width:u.width,height:u.height,codec:u.codecSet,bitrate:u.bitrate};h(this,vr).qualities[$t.add](d,a)}l.dispatchEvent(new tn("canplay",{trigger:a}))},zfe=function(e,t){var r;if(t.fatal)switch(t.type){case"mediaError":(r=h(this,Pn))==null||r.recoverMediaError();break;default:v(this,Tn,Hfe).call(this,t.error);break}},Hfe=function(e){h(this,vr).notify("error",{message:e.message,code:1,error:e})},qfe=function(){h(this,Pn)&&(h(this,Pn).currentLevel=-1)},Ufe=function(){const{qualities:e}=h(this,vr);!h(this,Pn)||e.auto||(h(this,Pn)[e.switch+"Level"]=e.selectedIndex,$5&&(h(this,qm).currentTime=h(this,qm).currentTime))},Wfe=function(){const{audioTracks:e}=h(this,vr);h(this,Pn)&&h(this,Pn).audioTrack!==e.selectedIndex&&(h(this,Pn).audioTrack=e.selectedIndex)};class Dze{constructor(e,t,r){N(this,ou);N(this,Um);N(this,iu);N(this,a6);M(this,Um,e),M(this,iu,t),M(this,a6,r),v(this,ou,Gfe).call(this)}}Um=new WeakMap,iu=new WeakMap,a6=new WeakMap,ou=new WeakSet,Gfe=async function(){const e={onLoadStart:v(this,ou,Kfe).bind(this),onLoaded:v(this,ou,Yfe).bind(this),onLoadError:v(this,ou,Zfe).bind(this)};let t=await $ze(h(this,Um),e);if(Yr(t)&&!ut(h(this,Um))&&(t=await Rze(h(this,Um),e)),!t)return null;if(!t.isSupported()){const r="[vidstack] `hls.js` is not supported in this environment";return h(this,iu).player.dispatch(new tn("hls-unsupported")),h(this,iu).notify("error",{message:r,code:4}),null}return t},Kfe=function(){h(this,iu).player.dispatch(new tn("hls-lib-load-start"))},Yfe=function(e){h(this,iu).player.dispatch(new tn("hls-lib-loaded",{detail:e})),h(this,a6).call(this,e)},Zfe=function(e){const t=C2(e);h(this,iu).player.dispatch(new tn("hls-lib-load-error",{detail:t})),h(this,iu).notify("error",{message:t.message,code:4,error:t})};async function Rze(n,e={}){var t,r,s,i,o;if(!Yr(n)){if((t=e.onLoadStart)==null||t.call(e),n.prototype&&n.prototype!==Function)return(r=e.onLoaded)==null||r.call(e,n),n;try{const a=(s=await n())==null?void 0:s.default;if(a&&a.isSupported)(i=e.onLoaded)==null||i.call(e,a);else throw Error("");return a}catch(a){(o=e.onLoadError)==null||o.call(e,a)}}}async function $ze(n,e={}){var t,r,s;if(ut(n)){(t=e.onLoadStart)==null||t.call(e);try{if(await tT(n),!Ni(window.Hls))throw Error("");const i=window.Hls;return(r=e.onLoaded)==null||r.call(e,i),i}catch(i){(s=e.onLoadError)==null||s.call(e,i)}}}const Lze="https://cdn.jsdelivr.net";class Kie extends hT{constructor(){super(...arguments);G(this,"$$PROVIDER_TYPE","HLS");N(this,l6,null);N(this,Vl,new Ize(this.video,this.ctx));N(this,Qf,`${Lze}/npm/hls.js@^1.5.0/dist/hls.min.js`)}get ctor(){return h(this,l6)}get instance(){return h(this,Vl).instance}get type(){return"hls"}get canLiveSync(){return!0}get config(){return h(this,Vl).config}set config(t){h(this,Vl).config=t}get library(){return h(this,Qf)}set library(t){M(this,Qf,t)}preconnect(){ut(h(this,Qf))&&Eu(h(this,Qf))}setup(){super.setup(),new Dze(h(this,Qf),this.ctx,t=>{M(this,l6,t),h(this,Vl).setup(t),this.ctx.notify("provider-setup",this);const r=Re(this.ctx.$state.source);r&&this.loadSource(r)})}async loadSource(t,r){if(!ut(t.src)){this.removeSource();return}this.media.preload=r||"",this.appendSource(t,"application/x-mpegurl"),h(this,Vl).loadSource(t),this.currentSrc=t}onInstance(t){const r=h(this,Vl).instance;return r&&t(r),h(this,Vl).onInstance(t)}destroy(){h(this,Vl).destroy()}}l6=new WeakMap,Vl=new WeakMap,Qf=new WeakMap,G(Kie,"supported",F5());const Fze=Object.freeze(Object.defineProperty({__proto__:null,HLSProvider:Kie},Symbol.toStringTag,{value:"Module"}));class Yie{constructor(e){N(this,Fv);N(this,au);G(this,"src",bt(""));G(this,"referrerPolicy",null);M(this,au,e),e.setAttribute("frameBorder","0"),e.setAttribute("aria-hidden","true"),e.setAttribute("allow","autoplay; fullscreen; encrypted-media; picture-in-picture; accelerometer; gyroscope"),this.referrerPolicy!==null&&e.setAttribute("referrerpolicy",this.referrerPolicy)}get iframe(){return h(this,au)}setup(){Rn(window,"message",v(this,Fv,Jfe).bind(this)),Rn(h(this,au),"load",this.onLoad.bind(this)),me(v(this,Fv,Xfe).bind(this))}postMessage(e,t){var r;st||(r=h(this,au).contentWindow)==null||r.postMessage(JSON.stringify(e),t??"*")}}au=new WeakMap,Fv=new WeakSet,Xfe=function(){const e=this.src();if(!e.length){h(this,au).setAttribute("src","");return}const t=Re(()=>this.buildParams());h(this,au).setAttribute("src",y5e(e,t))},Jfe=function(e){var s;const t=this.getOrigin();if((e.source===null||e.source===((s=h(this,au))==null?void 0:s.contentWindow))&&(!ut(t)||t===e.origin)){try{const i=JSON.parse(e.data);i&&this.onMessage(i,e);return}catch{}e.data&&this.onMessage(e.data,e)}};const jze=/(?:https:\/\/)?(?:player\.)?vimeo(?:\.com)?\/(?:video\/)?(\d+)(?:(?:\?hash=|\?h=|\/)(.*))?/,$I=new Map,o8=new Map;function Zie(n){const e=n.match(jze);return{videoId:e==null?void 0:e[1],hash:e==null?void 0:e[2]}}async function Xie(n,e,t){if($I.has(n))return $I.get(n);if(o8.has(n))return o8.get(n);let r=`https://vimeo.com/api/oembed.json?url=https://player.vimeo.com/video/${n}`;t&&(r=r.concat(`?h=${t}`));const s=window.fetch(r,{mode:"cors",signal:e.signal}).then(i=>i.json()).then(i=>{var u,d;const o=/vimeocdn.com\/video\/(.*)?_/,a=(d=(u=i==null?void 0:i.thumbnail_url)==null?void 0:u.match(o))==null?void 0:d[1],l=a?`https://i.vimeocdn.com/video/${a}_1920x1080.webp`:"",c={title:(i==null?void 0:i.title)??"",duration:(i==null?void 0:i.duration)??0,poster:l,pro:i.account_type!=="basic"};return $I.set(n,c),c}).finally(()=>o8.delete(n));return o8.set(n,s),s}const Bze=Object.freeze(Object.defineProperty({__proto__:null,getVimeoVideoInfo:Xie,resolveVimeoVideoId:Zie},Symbol.toStringTag,{value:"Module"})),Vze=["bufferend","bufferstart","durationchange","ended","enterpictureinpicture","error","fullscreenchange","leavepictureinpicture","loaded","playProgress","loadProgress","pause","play","playbackratechange","qualitychange","seeked","seeking","timeupdate","volumechange","waiting"];class zze extends Yie{constructor(t,r){super(t);N(this,Ve);G(this,"$$PROVIDER_TYPE","VIMEO");G(this,"scope",wu());G(this,"fullscreen");N(this,Ct);N(this,lu,bt(""));N(this,ep,bt(!1));N(this,Wm,null);N(this,jv,null);N(this,c6,!1);N(this,tp,new bs(0,0));N(this,Bv,new k2(v(this,Ve,npe).bind(this)));N(this,V8,null);N(this,Gm,null);N(this,np,new Map);N(this,Vv,null);G(this,"cookies",!1);G(this,"title",!0);G(this,"byline",!0);G(this,"portrait",!0);G(this,"color","00ADEF");N(this,Km,!1);M(this,Ct,r);const s=this;this.fullscreen={get active(){return h(s,c6)},supported:!0,enter:()=>v(this,Ve,Ms).call(this,"requestFullscreen"),exit:()=>v(this,Ve,Ms).call(this,"exitFullscreen")}}get type(){return"vimeo"}get currentSrc(){return h(this,jv)}get videoId(){return h(this,lu).call(this)}get hash(){return h(this,Wm)}get isPro(){return h(this,ep).call(this)}preconnect(){Eu(this.getOrigin())}setup(){super.setup(),me(v(this,Ve,Qfe).bind(this)),me(v(this,Ve,epe).bind(this)),me(v(this,Ve,tpe).bind(this)),h(this,Ct).notify("provider-setup",this)}destroy(){v(this,Ve,m$).call(this),this.fullscreen=void 0;const t="provider destroyed";for(const r of h(this,np).values())for(const{reject:s}of r)s(t);h(this,np).clear(),v(this,Ve,Ms).call(this,"destroy")}async play(){return v(this,Ve,Ms).call(this,"play")}async pause(){return v(this,Ve,Ms).call(this,"pause")}setMuted(t){v(this,Ve,Ms).call(this,"setMuted",t)}setCurrentTime(t){v(this,Ve,Ms).call(this,"seekTo",t),h(this,Ct).notify("seeking",t)}setVolume(t){v(this,Ve,Ms).call(this,"setVolume",t),v(this,Ve,Ms).call(this,"setMuted",Re(h(this,Ct).$state.muted))}setPlaybackRate(t){v(this,Ve,Ms).call(this,"setPlaybackRate",t)}async loadSource(t){if(!ut(t.src)){M(this,jv,null),M(this,Wm,null),h(this,lu).set("");return}const{videoId:r,hash:s}=Zie(t.src);h(this,lu).set(r??""),M(this,Wm,s??null),M(this,jv,t)}getOrigin(){return"https://player.vimeo.com"}buildParams(){const{keyDisabled:t}=h(this,Ct).$props,{playsInline:r,nativeControls:s}=h(this,Ct).$state,i=s();return{title:this.title,byline:this.byline,color:this.color,portrait:this.portrait,controls:i,h:this.hash,keyboard:i&&!t(),transparent:!0,playsinline:r(),dnt:!this.cookies}}onMessage(t,r){t.event?v(this,Ve,gpe).call(this,t.event,t.data,r):t.method&&v(this,Ve,ope).call(this,t.method,t.value,r)}onLoad(){}}Ct=new WeakMap,lu=new WeakMap,ep=new WeakMap,Wm=new WeakMap,jv=new WeakMap,c6=new WeakMap,tp=new WeakMap,Bv=new WeakMap,V8=new WeakMap,Gm=new WeakMap,np=new WeakMap,Vv=new WeakMap,Ve=new WeakSet,Qfe=function(){v(this,Ve,m$).call(this);const t=h(this,lu).call(this);if(!t){this.src.set("");return}this.src.set(`${this.getOrigin()}/video/${t}`),h(this,Ct).notify("load-start")},epe=function(){const t=h(this,lu).call(this);if(!t)return;const r=Hp(),s=new AbortController;return M(this,Vv,r),Xie(t,s,h(this,Wm)).then(i=>{r.resolve(i)}).catch(i=>{r.reject()}),()=>{r.reject(),s.abort()}},tpe=function(){const t=h(this,ep).call(this),{$state:r,qualities:s}=h(this,Ct);if(r.canSetPlaybackRate.set(t),s[$t.setReadonly](!t),t)return Rn(s,"change",()=>{var o;if(s.auto)return;const i=(o=s.selected)==null?void 0:o.id;i&&v(this,Ve,Ms).call(this,"setQuality",i)})},npe=function(){v(this,Ve,Ms).call(this,"getCurrentTime")},Km=new WeakMap,rpe=function(t,r){if(h(this,Km)&&t===0)return;const{realCurrentTime:s,paused:i,bufferedEnd:o,seekableEnd:a,live:l}=h(this,Ct).$state;if(s()===t)return;const c=s();h(this,Ct).notify("time-change",t,r),Math.abs(c-t)>1.5&&(h(this,Ct).notify("seeking",t,r),!i()&&o()<t&&h(this,Ct).notify("waiting",void 0,r)),!l()&&a()-t<.01&&(h(this,Ct).notify("end",void 0,r),M(this,Km,!0),setTimeout(()=>{M(this,Km,!1)},500))},spe=function(t,r){h(this,Ct).notify("seeked",t,r)},ipe=function(t){var s;const r=h(this,lu).call(this);(s=h(this,Vv))==null||s.promise.then(i=>{if(!i)return;const{title:o,poster:a,duration:l,pro:c}=i;h(this,ep).set(c),h(this,Ct).notify("title-change",o,t),h(this,Ct).notify("poster-change",a,t),h(this,Ct).notify("duration-change",l,t),v(this,Ve,u$).call(this,l,t)}).catch(()=>{r===h(this,lu).call(this)&&(v(this,Ve,Ms).call(this,"getVideoTitle"),v(this,Ve,Ms).call(this,"getDuration"))})},u$=function(t,r){const{nativeControls:s}=h(this,Ct).$state,i=s();M(this,tp,new bs(0,t));const o={buffered:new bs(0,0),seekable:h(this,tp),duration:t};h(this,Ct).delegate.ready(o,r),i||v(this,Ve,Ms).call(this,"_hideOverlay"),v(this,Ve,Ms).call(this,"getQualities"),v(this,Ve,Ms).call(this,"getChapters")},ope=function(t,r,s){var i;switch(t){case"getVideoTitle":const o=r;h(this,Ct).notify("title-change",o,s);break;case"getDuration":const a=r;h(this,Ct).$state.canPlay()?h(this,Ct).notify("duration-change",a,s):v(this,Ve,u$).call(this,a,s);break;case"getCurrentTime":v(this,Ve,rpe).call(this,r,s);break;case"getBuffered":qr(r)&&r.length&&v(this,Ve,d$).call(this,r[r.length-1][1],s);break;case"setMuted":v(this,Ve,h$).call(this,Re(h(this,Ct).$state.volume),r,s);break;case"getChapters":v(this,Ve,ppe).call(this,r);break;case"getQualities":v(this,Ve,mpe).call(this,r,s);break}(i=v(this,Ve,g$).call(this,t))==null||i.resolve()},ape=function(){for(const t of Vze)v(this,Ve,Ms).call(this,"addEventListener",t)},lpe=function(t){h(this,Bv).stop(),h(this,Ct).notify("pause",void 0,t)},cpe=function(t){h(this,Bv).start(),h(this,Ct).notify("play",void 0,t)},upe=function(t){const{paused:r}=h(this,Ct).$state;!r()&&!h(this,Km)&&h(this,Ct).notify("playing",void 0,t)},d$=function(t,r){const s={buffered:new bs(0,t),seekable:h(this,tp)};h(this,Ct).notify("progress",s,r)},dpe=function(t){h(this,Ct).notify("waiting",void 0,t)},hpe=function(t){const{paused:r}=h(this,Ct).$state;r()||h(this,Ct).notify("playing",void 0,t)},fpe=function(t){const{paused:r}=h(this,Ct).$state;r()&&h(this,Ct).notify("play",void 0,t),h(this,Ct).notify("waiting",void 0,t)},h$=function(t,r,s){const i={volume:t,muted:r};h(this,Ct).notify("volume-change",i,s)},ppe=function(t){if(v(this,Ve,f$).call(this),!t.length)return;const r=new ph({kind:"chapters",default:!0}),{seekableEnd:s}=h(this,Ct).$state;for(let i=0;i<t.length;i++){const o=t[i],a=t[i+1];r.addCue(new window.VTTCue(o.startTime,(a==null?void 0:a.startTime)??s(),o.title))}M(this,Gm,r),h(this,Ct).textTracks.add(r)},f$=function(){h(this,Gm)&&(h(this,Ct).textTracks.remove(h(this,Gm)),M(this,Gm,null))},mpe=function(t,r){h(this,Ct).qualities[ti.enableAuto]=t.some(s=>s.id==="auto")?()=>v(this,Ve,Ms).call(this,"setQuality","auto"):void 0;for(const s of t){if(s.id==="auto")continue;const i=+s.id.slice(0,-1);isNaN(i)||h(this,Ct).qualities[$t.add]({id:s.id,width:i*(16/9),height:i,codec:"avc1,h.264",bitrate:-1},r)}v(this,Ve,p$).call(this,t.find(s=>s.active),r)},p$=function({id:t}={},r){if(!t)return;const s=t==="auto",i=h(this,Ct).qualities.getById(t);s?(h(this,Ct).qualities[ti.setAuto](s,r),h(this,Ct).qualities[$t.select](void 0,!0,r)):h(this,Ct).qualities[$t.select](i??void 0,!0,r)},gpe=function(t,r,s){switch(t){case"ready":v(this,Ve,ape).call(this);break;case"loaded":v(this,Ve,ipe).call(this,s);break;case"play":v(this,Ve,cpe).call(this,s);break;case"playProgress":v(this,Ve,upe).call(this,s);break;case"pause":v(this,Ve,lpe).call(this,s);break;case"loadProgress":v(this,Ve,d$).call(this,r.seconds,s);break;case"waiting":v(this,Ve,fpe).call(this,s);break;case"bufferstart":v(this,Ve,dpe).call(this,s);break;case"bufferend":v(this,Ve,hpe).call(this,s);break;case"volumechange":v(this,Ve,h$).call(this,r.volume,Re(h(this,Ct).$state.muted),s);break;case"durationchange":M(this,tp,new bs(0,r.duration)),h(this,Ct).notify("duration-change",r.duration,s);break;case"playbackratechange":h(this,Ct).notify("rate-change",r.playbackRate,s);break;case"qualitychange":v(this,Ve,p$).call(this,r,s);break;case"fullscreenchange":M(this,c6,r.fullscreen),h(this,Ct).notify("fullscreen-change",r.fullscreen,s);break;case"enterpictureinpicture":h(this,Ct).notify("picture-in-picture-change",!0,s);break;case"leavepictureinpicture":h(this,Ct).notify("picture-in-picture-change",!1,s);break;case"ended":h(this,Ct).notify("end",void 0,s);break;case"error":v(this,Ve,ype).call(this,r,s);break;case"seek":case"seeked":v(this,Ve,spe).call(this,r.seconds,s);break}},ype=function(t,r){var o;const{message:s,method:i}=t;i==="setPlaybackRate"&&h(this,ep).set(!1),i&&((o=v(this,Ve,g$).call(this,i))==null||o.reject(s))},Ms=async function(t,r){let s=Hp(),i=h(this,np).get(t);return i||h(this,np).set(t,i=[]),i.push(s),this.postMessage({method:t,value:r}),s.promise},m$=function(){h(this,Bv).stop(),M(this,tp,new bs(0,0)),M(this,Vv,null),M(this,V8,null),h(this,ep).set(!1),v(this,Ve,f$).call(this)},g$=function(t){var r;return(r=h(this,np).get(t))==null?void 0:r.shift()};const Hze=Object.freeze(Object.defineProperty({__proto__:null,VimeoProvider:zze},Symbol.toStringTag,{value:"Module"})),qze=/(?:youtu\.be|youtube|youtube\.com|youtube-nocookie\.com)(?:\/shorts)?\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=|)((?:\w|-){11})/,LI=new Map,a8=new Map;function Jie(n){var e;return(e=n.match(qze))==null?void 0:e[1]}async function Uze(n,e){if(LI.has(n))return LI.get(n);if(a8.has(n))return a8.get(n);const t=new Promise(async r=>{const s=["maxresdefault","sddefault","hqdefault"];for(const i of s)for(const o of[!0,!1]){const a=Wze(n,i,o);if((await fetch(a,{mode:"no-cors",signal:e.signal})).status<400){LI.set(n,a),r(a);return}}}).catch(()=>"").finally(()=>a8.delete(n));return a8.set(n,t),t}function Wze(n,e,t){return`https://i.ytimg.com/${t?"vi_webp":"vi"}/${n}/${e}.${t?"webp":"jpg"}`}const Gze=Object.freeze(Object.defineProperty({__proto__:null,findYouTubePoster:Uze,resolveYouTubeVideoId:Jie},Symbol.toStringTag,{value:"Module"})),V0={Ended:0,Playing:1,Paused:2,Buffering:3,Cued:5};class Kze extends Yie{constructor(t,r){super(t);N(this,pn);G(this,"$$PROVIDER_TYPE","YOUTUBE");G(this,"scope",wu());N(this,zn);N(this,Ym,bt(""));N(this,Zm,-1);N(this,zv,null);N(this,Xm,-1);N(this,rp,!1);N(this,zd,new Map);G(this,"language","en");G(this,"color","red");G(this,"cookies",!1);M(this,zn,r)}get currentSrc(){return h(this,zv)}get type(){return"youtube"}get videoId(){return h(this,Ym).call(this)}preconnect(){Eu(this.getOrigin())}setup(){super.setup(),me(v(this,pn,vpe).bind(this)),h(this,zn).notify("provider-setup",this)}destroy(){v(this,pn,v$).call(this);const t="provider destroyed";for(const r of h(this,zd).values())for(const{reject:s}of r)s(t);h(this,zd).clear()}async play(){return v(this,pn,mp).call(this,"playVideo")}async pause(){return v(this,pn,mp).call(this,"pauseVideo")}setMuted(t){t?v(this,pn,mp).call(this,"mute"):v(this,pn,mp).call(this,"unMute")}setCurrentTime(t){v(this,pn,mp).call(this,"seekTo",t),h(this,zn).notify("seeking",t)}setVolume(t){v(this,pn,mp).call(this,"setVolume",t*100)}setPlaybackRate(t){v(this,pn,mp).call(this,"setPlaybackRate",t)}async loadSource(t){if(!ut(t.src)){M(this,zv,null),h(this,Ym).set("");return}const r=Jie(t.src);h(this,Ym).set(r??""),M(this,zv,t)}getOrigin(){return this.cookies?"https://www.youtube.com":"https://www.youtube-nocookie.com"}buildParams(){const{keyDisabled:t}=h(this,zn).$props,{muted:r,playsInline:s,nativeControls:i}=h(this,zn).$state,o=i();return{rel:0,autoplay:0,cc_lang_pref:this.language,cc_load_policy:o?1:void 0,color:this.color,controls:o?1:0,disablekb:!o||t()?1:0,enablejsapi:1,fs:1,hl:this.language,iv_load_policy:o?1:3,mute:r()?1:0,playsinline:s()?1:0}}onLoad(){window.setTimeout(()=>this.postMessage({event:"listening"}),100)}onMessage({info:t},r){var a;if(!t)return;const{title:s,intrinsicDuration:i,playbackRate:o}=h(this,zn).$state;if(M_(t.videoData)&&t.videoData.title!==s()&&h(this,zn).notify("title-change",t.videoData.title,r),Ds(t.duration)&&t.duration!==i()){if(Ds(t.videoLoadedFraction)){const l=((a=t.progressState)==null?void 0:a.loaded)??t.videoLoadedFraction*t.duration,c=new bs(0,t.duration);v(this,pn,y$).call(this,l,c,r)}h(this,zn).notify("duration-change",t.duration,r)}if(Ds(t.playbackRate)&&t.playbackRate!==o()&&h(this,zn).notify("rate-change",t.playbackRate,r),t.progressState){const{current:l,seekableStart:c,seekableEnd:u,loaded:d,duration:f}=t.progressState;v(this,pn,xpe).call(this,l,r),v(this,pn,y$).call(this,d,new bs(c,u),r),f!==i()&&h(this,zn).notify("duration-change",f,r)}if(Ds(t.volume)&&zp(t.muted)&&!h(this,rp)){const l={muted:t.muted,volume:t.volume/100};h(this,zn).notify("volume-change",l,r)}Ds(t.playerState)&&t.playerState!==h(this,Zm)&&v(this,pn,Cpe).call(this,t.playerState,r)}}zn=new WeakMap,Ym=new WeakMap,Zm=new WeakMap,zv=new WeakMap,Xm=new WeakMap,rp=new WeakMap,zd=new WeakMap,pn=new WeakSet,CHe=function(t){var r;(r=v(this,pn,k6).call(this,"playVideo"))==null||r.reject(t)},SHe=function(t){var r;(r=v(this,pn,k6).call(this,"pauseVideo"))==null||r.reject(t)},vpe=function(){v(this,pn,v$).call(this);const t=h(this,Ym).call(this);if(!t){this.src.set("");return}this.src.set(`${this.getOrigin()}/embed/${t}`),h(this,zn).notify("load-start")},mp=function(t,r){let s=Hp(),i=h(this,zd).get(t);return i||h(this,zd).set(t,i=[]),i.push(s),this.postMessage({event:"command",func:t,args:r?[r]:void 0}),s.promise},bpe=function(t){h(this,zn).notify("loaded-metadata"),h(this,zn).notify("loaded-data"),h(this,zn).delegate.ready(void 0,t)},wpe=function(t){var r;(r=v(this,pn,k6).call(this,"pauseVideo"))==null||r.resolve(),h(this,zn).notify("pause",void 0,t)},xpe=function(t,r){const{duration:s,realCurrentTime:i}=h(this,zn).$state,o=h(this,Zm)===V0.Ended,a=o?s():t;h(this,zn).notify("time-change",a,r),!o&&Math.abs(a-i())>1&&h(this,zn).notify("seeking",a,r)},y$=function(t,r,s){const i={buffered:new bs(0,t),seekable:r};h(this,zn).notify("progress",i,s);const{seeking:o,realCurrentTime:a}=h(this,zn).$state;o()&&t>a()&&v(this,pn,cC).call(this,s)},cC=function(t){const{paused:r,realCurrentTime:s}=h(this,zn).$state;window.clearTimeout(h(this,Xm)),M(this,Xm,window.setTimeout(()=>{h(this,zn).notify("seeked",s(),t),M(this,Xm,-1)},r()?100:0))},kpe=function(t){const{seeking:r}=h(this,zn).$state;r()&&v(this,pn,cC).call(this,t),h(this,zn).notify("pause",void 0,t),h(this,zn).notify("end",void 0,t)},Cpe=function(t,r){var u;const{paused:s,seeking:i}=h(this,zn).$state,o=t===V0.Playing,a=t===V0.Buffering,l=v(this,pn,Spe).call(this,"playVideo"),c=s()&&(a||o);if(a&&h(this,zn).notify("waiting",void 0,r),i()&&o&&v(this,pn,cC).call(this,r),h(this,rp)&&o){this.pause(),M(this,rp,!1),this.setMuted(h(this,zn).$state.muted());return}if(!l&&c){M(this,rp,!0),this.setMuted(!0);return}switch(c&&((u=v(this,pn,k6).call(this,"playVideo"))==null||u.resolve(),h(this,zn).notify("play",void 0,r)),t){case V0.Cued:v(this,pn,bpe).call(this,r);break;case V0.Playing:h(this,zn).notify("playing",void 0,r);break;case V0.Paused:v(this,pn,wpe).call(this,r);break;case V0.Ended:v(this,pn,kpe).call(this,r);break}M(this,Zm,t)},v$=function(){M(this,Zm,-1),M(this,Xm,-1),M(this,rp,!1)},k6=function(t){var r;return(r=h(this,zd).get(t))==null?void 0:r.shift()},Spe=function(t){var r;return!!((r=h(this,zd).get(t))!=null&&r.length)};const Yze=Object.freeze(Object.defineProperty({__proto__:null,YouTubeProvider:Kze},Symbol.toStringTag,{value:"Module"}));function Zze(){return"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1"}function Xze(){var n;return!!((n=window.cast)!=null&&n.framework)}function Jze(){var n,e;return!!((e=(n=window.chrome)==null?void 0:n.cast)!=null&&e.isAvailable)}function Qie(){return Q1().getCastState()===cast.framework.CastState.CONNECTED}function Q1(){return window.cast.framework.CastContext.getInstance()}function l8(){return Q1().getCurrentSession()}function c8(){var n;return(n=l8())==null?void 0:n.getSessionObj().media[0]}function FI(n){var t;return((t=c8())==null?void 0:t.media.contentId)===(n==null?void 0:n.src)}function Qze(){return{language:"en-US",autoJoinPolicy:chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED,receiverApplicationId:chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,resumeSavedSession:!0,androidReceiverCompatible:!0}}function jI(n){return`Google Cast Error Code: ${n}`}function eoe(n,e){return Rn(Q1(),n,e)}class eHe{constructor(){N(this,wi);G(this,"name","google-cast");G(this,"target");N(this,sp)}get cast(){return Q1()}mediaType(){return"video"}canPlay(e){return $5&&!R5&&VW(e)}async prompt(e){var i;let t,r,s;try{t=await v(this,wi,Epe).call(this,e),h(this,sp)||(M(this,sp,new cast.framework.RemotePlayer),new cast.framework.RemotePlayerController(h(this,sp))),r=e.player.createEvent("google-cast-prompt-open",{trigger:t}),e.player.dispatchEvent(r),v(this,wi,uC).call(this,e,"connecting",r),await v(this,wi,_pe).call(this,Re(e.$props.googleCast)),e.$state.remotePlaybackInfo.set({deviceName:(i=l8())==null?void 0:i.getCastDevice().friendlyName}),Qie()&&v(this,wi,uC).call(this,e,"connected",r)}catch(o){const a=o instanceof Error?o:v(this,wi,dC).call(this,(o+"").toUpperCase(),"Prompt failed.");throw s=e.player.createEvent("google-cast-prompt-error",{detail:a,trigger:r??t,cancelable:!0}),e.player.dispatch(s),v(this,wi,uC).call(this,e,Qie()?"connected":"disconnected",s),a}finally{e.player.dispatch("google-cast-prompt-close",{trigger:s??r??t})}}async load(e){if(st)throw Error("[vidstack] can not load google cast provider server-side");if(!h(this,sp))throw Error("[vidstack] google cast player was not initialized");return new(await Promise.resolve().then(()=>hHe)).GoogleCastProvider(h(this,sp),e)}}sp=new WeakMap,wi=new WeakSet,Epe=async function(e){if(Xze())return;const t=e.player.createEvent("google-cast-load-start");e.player.dispatch(t),await tT(Zze()),await customElements.whenDefined("google-cast-launcher");const r=e.player.createEvent("google-cast-loaded",{trigger:t});if(e.player.dispatch(r),!Jze())throw v(this,wi,dC).call(this,"CAST_NOT_AVAILABLE","Google Cast not available on this platform.");return r},_pe=async function(e){v(this,wi,Tpe).call(this,e);const t=await this.cast.requestSession();if(t)throw v(this,wi,dC).call(this,t.toUpperCase(),jI(t))},Tpe=function(e){var t;(t=this.cast)==null||t.setOptions({...Qze(),...e})},uC=function(e,t,r){const s={type:"google-cast",state:t};e.notify("remote-playback-change",s,r)},dC=function(e,t){const r=Error(t);return r.code=e,r};var tHe=Object.freeze({__proto__:null,GoogleCastLoader:eHe});const nHe=Object.freeze(Object.defineProperty({__proto__:null,getCastContext:Q1,getCastErrorMessage:jI,getCastSession:l8,getCastSessionMedia:c8,hasActiveCastSession:FI,listenCastContextEvent:eoe,loader:tHe},Symbol.toStringTag,{value:"Module"})),rHe=/,/g,sHe="-->";class toe extends MI{parse(e,t){var r,s;if(e==="")this.c&&(this.l.push(this.c),(s=(r=this.h).onCue)==null||s.call(r,this.c),this.c=null),this.e=N4.None;else if(this.e===N4.Cue)this.c.text+=(this.c.text?` +`:"")+e;else if(e.includes(sHe)){const i=this.q(e,t);i&&(this.c=new n8(i[0],i[1],i[2].join(" ")),this.c.id=this.n,this.e=N4.Cue)}this.n=e}q(e,t){return super.q(e.replace(rHe,"."),t)}}function iHe(){return new toe}const oHe=Object.freeze(Object.defineProperty({__proto__:null,SRTParser:toe,default:iHe},Symbol.toStringTag,{value:"Module"})),u8=/^Format:[\s\t]*/,noe=/^Style:[\s\t]*/,roe=/^Dialogue:[\s\t]*/,d8=/[\s\t]*,[\s\t]*/,soe=/\{[^}]+\}/g,ioe=/\\N/g,ooe=/^\[(.*)[\s\t]?Styles\]$/,BI=/^\[(.*)[\s\t]?Events\]$/;class aoe{constructor(){G(this,"h");G(this,"O",0);G(this,"c",null);G(this,"l",[]);G(this,"m",[]);G(this,"N",null);G(this,"f");G(this,"P",{})}async init(e){this.h=e,e.errors&&(this.f=(await Promise.resolve().then(()=>loe)).ParseErrorBuilder)}parse(e,t){var r,s;if(this.O)switch(this.O){case 1:if(e==="")this.O=0;else if(noe.test(e))if(this.N){const i=e.replace(noe,"").split(d8);this.S(i)}else this.g((r=this.f)==null?void 0:r.T("Style",t));else u8.test(e)?this.N=e.replace(u8,"").split(d8):BI.test(e)&&(this.N=null,this.O=2);break;case 2:if(e==="")this.Q();else if(roe.test(e))if(this.Q(),this.N){const i=e.replace(roe,"").split(d8),o=this.U(i,t);o&&(this.c=o)}else this.g((s=this.f)==null?void 0:s.T("Dialogue",t));else this.c?this.c.text+=` +`+e.replace(soe,"").replace(ioe,` +`):u8.test(e)?this.N=e.replace(u8,"").split(d8):ooe.test(e)?(this.N=null,this.O=1):BI.test(e)&&(this.N=null)}else e===""||(ooe.test(e)?(this.N=null,this.O=1):BI.test(e)&&(this.N=null,this.O=2))}done(){return{metadata:{},cues:this.l,regions:[],errors:this.m}}Q(){var e,t;this.c&&(this.l.push(this.c),(t=(e=this.h).onCue)==null||t.call(e,this.c),this.c=null)}S(e){let t="Default",r={},s,i="center",o="bottom",a,l=1.2,c,u,d=3,f=[];for(let p=0;p<this.N.length;p++){const m=this.N[p],y=e[p];switch(m){case"Name":t=y;break;case"Fontname":r["font-family"]=y;break;case"Fontsize":r["font-size"]=`calc(${y} / var(--overlay-height))`;break;case"PrimaryColour":const w=VI(y);w&&(r["--cue-color"]=w);break;case"BorderStyle":d=parseInt(y,10);break;case"BackColour":u=VI(y);break;case"OutlineColour":const k=VI(y);k&&(c=k);break;case"Bold":parseInt(y)&&(r["font-weight"]="bold");break;case"Italic":parseInt(y)&&(r["font-style"]="italic");break;case"Underline":parseInt(y)&&(r["text-decoration"]="underline");break;case"StrikeOut":parseInt(y)&&(r["text-decoration"]="line-through");break;case"Spacing":r["letter-spacing"]=y+"px";break;case"AlphaLevel":r.opacity=parseFloat(y);break;case"ScaleX":f.push(`scaleX(${parseFloat(y)/100})`);break;case"ScaleY":f.push(`scaleY(${parseFloat(y)/100})`);break;case"Angle":f.push(`rotate(${y}deg)`);break;case"Shadow":l=parseInt(y,10)*1.2;break;case"MarginL":r["--cue-width"]="auto",r["--cue-left"]=parseFloat(y)+"px";break;case"MarginR":r["--cue-width"]="auto",r["--cue-right"]=parseFloat(y)+"px";break;case"MarginV":a=parseFloat(y);break;case"Outline":s=parseInt(y,10);break;case"Alignment":const x=parseInt(y,10);switch(x>=4&&(o=x>=7?"top":"center"),x%3){case 1:i="start";break;case 2:i="center";break;case 3:i="end";break}}}if(r.R=o,r["--cue-white-space"]="normal",r["--cue-line-height"]="normal",r["--cue-text-align"]=i,o==="center"?(r["--cue-top"]="50%",f.push("translateY(-50%)")):r[`--cue-${o}`]=(a||0)+"px",d===1&&(r["--cue-padding-y"]="0"),(d===1||u)&&(r["--cue-bg-color"]=d===1?"none":u),d===3&&c&&(r["--cue-outline"]=`${s}px solid ${c}`),d===1&&typeof s=="number"){const p=u??"#000";r["--cue-text-shadow"]=[c&&zI(s*1.2,l*1.2,c),c?zI(s*(s/2),l*(s/2),p):zI(s,l,p)].filter(Boolean).join(", ")}f.length&&(r["--cue-transform"]=f.join(" ")),this.P[t]=r}U(e,t){const r=this.V(e),s=this.q(r.Start,r.End,t);if(!s)return;const i=new n8(s[0],s[1],""),o={...this.P[r.Style]||{}},a=r.Name?`<v ${r.Name}>`:"",l=o.R,c=r.MarginL&&parseFloat(r.MarginL),u=r.MarginR&&parseFloat(r.MarginR),d=r.MarginV&&parseFloat(r.MarginV);return c&&(o["--cue-width"]="auto",o["--cue-left"]=c+"px"),u&&(o["--cue-width"]="auto",o["--cue-right"]=u+"px"),d&&l!=="center"&&(o[`--cue-${l}`]=d+"px"),i.text=a+e.slice(this.N.length-1).join(", ").replace(soe,"").replace(ioe,` +`),delete o.R,Object.keys(o).length&&(i.style=o),i}V(e){const t={};for(let r=0;r<this.N.length;r++)t[this.N[r]]=e[r];return t}q(e,t,r){var o,a,l;const s=B0(e),i=B0(t);if(s!==null&&i!==null&&i>s)return[s,i];s===null&&this.g((o=this.f)==null?void 0:o.s(e,r)),i===null&&this.g((a=this.f)==null?void 0:a.t(t,r)),s!=null&&i!==null&&i>s&&this.g((l=this.f)==null?void 0:l.u(s,i,r))}g(e){var t,r;if(e){if(this.m.push(e),this.h.strict)throw this.h.cancel(),e;(r=(t=this.h).onError)==null||r.call(t,e)}}}function VI(n){const e=parseInt(n.replace("&H",""),16);if(e>=0){const r=(e>>24&255^255)/255,s=e>>16&255,i=e>>8&255;return"rgba("+[e&255,i,s,r].join(",")+")"}return null}function zI(n,e,t){const r=Math.ceil(2*Math.PI*n);let s="";for(let i=0;i<r;i++){const o=2*Math.PI*i/r;s+=n*Math.cos(o)+"px "+e*Math.sin(o)+"px 0 "+t+(i==r-1?"":",")}return s}function aHe(){return new aoe}const lHe=Object.freeze(Object.defineProperty({__proto__:null,SSAParser:aoe,default:aHe},Symbol.toStringTag,{value:"Module"})),loe=Object.freeze(Object.defineProperty({__proto__:null,ParseErrorBuilder:{r(){return new Ic({code:Pc.BadSignature,reason:"missing WEBVTT file header",line:1})},s(n,e){return new Ic({code:Pc.BadTimestamp,reason:`cue start timestamp \`${n}\` is invalid on line ${e}`,line:e})},t(n,e){return new Ic({code:Pc.BadTimestamp,reason:`cue end timestamp \`${n}\` is invalid on line ${e}`,line:e})},u(n,e,t){return new Ic({code:Pc.BadTimestamp,reason:`cue end timestamp \`${e}\` is greater than start \`${n}\` on line ${t}`,line:t})},y(n,e,t){return new Ic({code:Pc.BadSettingValue,reason:`invalid value for cue setting \`${n}\` on line ${t} (value: ${e})`,line:t})},x(n,e,t){return new Ic({code:Pc.UnknownSetting,reason:`unknown cue setting \`${n}\` on line ${t} (value: ${e})`,line:t})},w(n,e,t){return new Ic({code:Pc.BadSettingValue,reason:`invalid value for region setting \`${n}\` on line ${t} (value: ${e})`,line:t})},v(n,e,t){return new Ic({code:Pc.UnknownSetting,reason:`unknown region setting \`${n}\` on line ${t} (value: ${e})`,line:t})},T(n,e){return new Ic({code:Pc.BadFormat,reason:`format missing for \`${n}\` block on line ${e}`,line:e})}}},Symbol.toStringTag,{value:"Module"}));class cHe{constructor(e){N(this,z8);N(this,zl);M(this,zl,new chrome.cast.media.MediaInfo(e.src,e.type))}build(){return h(this,zl)}setStreamType(e){return e.includes("live")?h(this,zl).streamType=chrome.cast.media.StreamType.LIVE:h(this,zl).streamType=chrome.cast.media.StreamType.BUFFERED,this}setTracks(e){return h(this,zl).tracks=e.map(v(this,z8,Ape)),this}setMetadata(e,t){return h(this,zl).metadata=new chrome.cast.media.GenericMediaMetadata,h(this,zl).metadata.title=e,h(this,zl).metadata.images=[{url:t}],this}}zl=new WeakMap,z8=new WeakSet,Ape=function(e,t){const r=new chrome.cast.media.Track(t,chrome.cast.media.TrackType.TEXT);return r.name=e.label,r.trackContentId=e.src,r.trackContentType="text/vtt",r.language=e.language,r.subtype=e.kind.toUpperCase(),r};class uHe{constructor(e,t,r){N(this,Sr);N(this,ip);N(this,cu);N(this,u6);M(this,ip,e),M(this,cu,t),M(this,u6,r)}setup(){const e=this.syncRemoteActiveIds.bind(this);Rn(h(this,cu).audioTracks,"change",e),Rn(h(this,cu).textTracks,"mode-change",e),me(v(this,Sr,Mpe).bind(this))}getLocalTextTracks(){return h(this,cu).$state.textTracks().filter(e=>e.src&&e.type==="vtt")}syncRemoteTracks(e){if(!h(this,ip).isMediaLoaded)return;const t=v(this,Sr,b$).call(this),r=this.getLocalTextTracks(),s=v(this,Sr,Jv).call(this,chrome.cast.media.TrackType.AUDIO),i=v(this,Sr,Jv).call(this,chrome.cast.media.TrackType.TEXT);for(const o of s){if(v(this,Sr,w$).call(this,t,o))continue;const l={id:o.trackId.toString(),label:o.name,language:o.language,kind:o.subtype??"main",selected:!1};h(this,cu).audioTracks[$t.add](l,e)}for(const o of i){if(v(this,Sr,w$).call(this,r,o))continue;const l={id:o.trackId.toString(),src:o.trackContentId,label:o.name,language:o.language,kind:o.subtype.toLowerCase()};h(this,cu).textTracks.add(l,e)}}syncRemoteActiveIds(e){if(!h(this,ip).isMediaLoaded)return;const t=v(this,Sr,Npe).call(this),r=new chrome.cast.media.EditTracksInfoRequest(t);v(this,Sr,Ope).call(this,r).catch(s=>{})}}ip=new WeakMap,cu=new WeakMap,u6=new WeakMap,Sr=new WeakSet,b$=function(){return h(this,cu).$state.audioTracks()},Jv=function(e){var r;const t=((r=h(this,ip).mediaInfo)==null?void 0:r.tracks)??[];return e?t.filter(s=>s.type===e):t},Npe=function(){const e=[],t=v(this,Sr,b$).call(this).find(s=>s.selected),r=this.getLocalTextTracks().filter(s=>s.mode==="showing");if(t){const s=v(this,Sr,Jv).call(this,chrome.cast.media.TrackType.AUDIO),i=v(this,Sr,hC).call(this,s,t);i&&e.push(i.trackId)}if(r!=null&&r.length){const s=v(this,Sr,Jv).call(this,chrome.cast.media.TrackType.TEXT);if(s.length)for(const i of r){const o=v(this,Sr,hC).call(this,s,i);o&&e.push(o.trackId)}}return e},Mpe=function(){const e=this.getLocalTextTracks();if(!h(this,ip).isMediaLoaded)return;const t=v(this,Sr,Jv).call(this,chrome.cast.media.TrackType.TEXT);for(const r of e)if(!v(this,Sr,hC).call(this,t,r)){Bp(()=>{var i;return(i=h(this,u6))==null?void 0:i.call(this)});break}},Ope=function(e){const t=c8();return new Promise((r,s)=>t==null?void 0:t.editTracksInfo(e,r,s))},w$=function(e,t){return e.find(r=>v(this,Sr,x$).call(this,r,t))},hC=function(e,t){return e.find(r=>v(this,Sr,x$).call(this,t,r))},x$=function(e,t){return t.name===e.label&&t.language===e.language&&t.subtype.toLowerCase()===e.kind.toLowerCase()};class dHe{constructor(e,t){N(this,nt);G(this,"$$PROVIDER_TYPE","GOOGLE_CAST");G(this,"scope",wu());N(this,yn);N(this,In);N(this,op);N(this,ap,null);N(this,d6,"disconnected");N(this,Hv,0);N(this,Jm,0);N(this,Qm,new bs(0,0));N(this,qv,new k2(v(this,nt,$pe).bind(this)));N(this,h6);N(this,Va,null);N(this,Uv,!1);M(this,yn,e),M(this,In,t),M(this,op,new uHe(e,t,v(this,nt,Upe).bind(this)))}get type(){return"google-cast"}get currentSrc(){return h(this,ap)}get player(){return h(this,yn)}get cast(){return Q1()}get session(){return l8()}get media(){return c8()}get hasActiveSession(){return FI(h(this,ap))}setup(){v(this,nt,Ppe).call(this),v(this,nt,Ipe).call(this),h(this,op).setup(),h(this,In).notify("provider-setup",this)}async play(){var e;if(!(!h(this,yn).isPaused&&!h(this,Uv))){if(h(this,Uv)){await v(this,nt,O$).call(this,!1,0);return}(e=h(this,yn).controller)==null||e.playOrPause()}}async pause(){var e;h(this,yn).isPaused||(e=h(this,yn).controller)==null||e.playOrPause()}getMediaStatus(e){return new Promise((t,r)=>{var s;(s=this.media)==null||s.getStatus(e,t,r)})}setMuted(e){var r;(e&&!h(this,yn).isMuted||!e&&h(this,yn).isMuted)&&((r=h(this,yn).controller)==null||r.muteOrUnmute())}setCurrentTime(e){var t;h(this,yn).currentTime=e,h(this,In).notify("seeking",e),(t=h(this,yn).controller)==null||t.seek()}setVolume(e){var t;h(this,yn).volumeLevel=e,(t=h(this,yn).controller)==null||t.setVolumeLevel()}async loadSource(e){var s;if(((s=h(this,Va))==null?void 0:s.src)!==e&&M(this,Va,null),FI(e)){v(this,nt,Dpe).call(this),M(this,ap,e);return}h(this,In).notify("load-start");const t=v(this,nt,qpe).call(this,e),r=await this.session.loadMedia(t);if(r){M(this,ap,null),h(this,In).notify("error",Error(jI(r)));return}M(this,ap,e)}destroy(){v(this,nt,k$).call(this),v(this,nt,C$).call(this)}}yn=new WeakMap,In=new WeakMap,op=new WeakMap,ap=new WeakMap,d6=new WeakMap,Hv=new WeakMap,Jm=new WeakMap,Qm=new WeakMap,qv=new WeakMap,h6=new WeakMap,Va=new WeakMap,Uv=new WeakMap,nt=new WeakSet,Ppe=function(){eoe(cast.framework.CastContextEventType.CAST_STATE_CHANGED,v(this,nt,S$).bind(this))},Ipe=function(){const e=cast.framework.RemotePlayerEventType,t={[e.IS_CONNECTED_CHANGED]:v(this,nt,S$),[e.IS_MEDIA_LOADED_CHANGED]:v(this,nt,E$),[e.CAN_CONTROL_VOLUME_CHANGED]:v(this,nt,_$),[e.CAN_SEEK_CHANGED]:v(this,nt,T$),[e.DURATION_CHANGED]:v(this,nt,Bpe),[e.IS_MUTED_CHANGED]:v(this,nt,A$),[e.VOLUME_LEVEL_CHANGED]:v(this,nt,A$),[e.IS_PAUSED_CHANGED]:v(this,nt,Vpe),[e.LIVE_SEEKABLE_RANGE_CHANGED]:v(this,nt,N$),[e.PLAYER_STATE_CHANGED]:v(this,nt,zpe)};M(this,h6,t);const r=v(this,nt,Lpe).bind(this);for(const s of A5(t))h(this,yn).controller.addEventListener(s,r);Qt(()=>{for(const s of A5(t))h(this,yn).controller.removeEventListener(s,r)})},k$=function(){h(this,Va)||(M(this,Jm,0),M(this,Qm,new bs(0,0))),h(this,qv).stop(),M(this,Hv,0),M(this,Va,null)},Dpe=function(){const e=new tn("resume-session",{detail:this.session});v(this,nt,E$).call(this,e);const{muted:t,volume:r,savedState:s}=h(this,In).$state,i=s();this.setCurrentTime(Math.max(h(this,yn).currentTime,(i==null?void 0:i.currentTime)??0)),this.setMuted(t()),this.setVolume(r()),(i==null?void 0:i.paused)===!1&&this.play()},C$=function(){this.cast.endCurrentSession(!0);const{remotePlaybackLoader:e}=h(this,In).$state;e.set(null)},Rpe=function(){const{savedState:e}=h(this,In).$state;e.set({paused:h(this,yn).isPaused,currentTime:h(this,yn).currentTime}),v(this,nt,C$).call(this)},$pe=function(){v(this,nt,jpe).call(this)},Lpe=function(e){h(this,h6)[e.type].call(this,e)},S$=function(e){const t=this.cast.getCastState(),r=t===cast.framework.CastState.CONNECTED?"connected":t===cast.framework.CastState.CONNECTING?"connecting":"disconnected";if(h(this,d6)===r)return;const s={type:"google-cast",state:r},i=v(this,nt,Ud).call(this,e);M(this,d6,r),h(this,In).notify("remote-playback-change",s,i),r==="disconnected"&&v(this,nt,Rpe).call(this)},E$=function(e){if(!!!h(this,yn).isMediaLoaded)return;const r=Re(h(this,In).$state.source);Promise.resolve().then(()=>{if(r!==Re(h(this,In).$state.source)||!h(this,yn).isMediaLoaded)return;v(this,nt,k$).call(this);const s=h(this,yn).duration;M(this,Qm,new bs(0,s));const i={provider:this,duration:s,buffered:new bs(0,0),seekable:v(this,nt,M$).call(this)},o=v(this,nt,Ud).call(this,e);h(this,In).notify("loaded-metadata",void 0,o),h(this,In).notify("loaded-data",void 0,o),h(this,In).notify("can-play",i,o),v(this,nt,_$).call(this),v(this,nt,T$).call(this,e);const{volume:a,muted:l}=h(this,In).$state;this.setVolume(a()),this.setMuted(l()),h(this,qv).start(),h(this,op).syncRemoteTracks(o),h(this,op).syncRemoteActiveIds(o)})},_$=function(){h(this,In).$state.canSetVolume.set(h(this,yn).canControlVolume)},T$=function(e){const t=v(this,nt,Ud).call(this,e);h(this,In).notify("stream-type-change",v(this,nt,Fpe).call(this),t)},Fpe=function(){var t;return((t=h(this,yn).mediaInfo)==null?void 0:t.streamType)===chrome.cast.media.StreamType.LIVE?h(this,yn).canSeek?"live:dvr":"live":"on-demand"},jpe=function(){if(h(this,Va))return;const e=h(this,yn).currentTime;e!==h(this,Hv)&&(h(this,In).notify("time-change",e),e>h(this,Jm)&&(M(this,Jm,e),v(this,nt,N$).call(this)),h(this,In).$state.seeking()&&h(this,In).notify("seeked",e),M(this,Hv,e))},Bpe=function(e){if(!h(this,yn).isMediaLoaded||h(this,Va))return;const t=h(this,yn).duration,r=v(this,nt,Ud).call(this,e);M(this,Qm,new bs(0,t)),h(this,In).notify("duration-change",t,r)},A$=function(e){if(!h(this,yn).isMediaLoaded)return;const t={muted:h(this,yn).isMuted,volume:h(this,yn).volumeLevel},r=v(this,nt,Ud).call(this,e);h(this,In).notify("volume-change",t,r)},Vpe=function(e){const t=v(this,nt,Ud).call(this,e);h(this,yn).isPaused?h(this,In).notify("pause",void 0,t):h(this,In).notify("play",void 0,t)},N$=function(e){const t={seekable:v(this,nt,M$).call(this),buffered:new bs(0,h(this,Jm))},r=e?v(this,nt,Ud).call(this,e):void 0;h(this,In).notify("progress",t,r)},zpe=function(e){const t=h(this,yn).playerState,r=chrome.cast.media.PlayerState;if(M(this,Uv,t===r.IDLE),t===r.PAUSED)return;const s=v(this,nt,Ud).call(this,e);switch(t){case r.PLAYING:h(this,In).notify("playing",void 0,s);break;case r.BUFFERING:h(this,In).notify("waiting",void 0,s);break;case r.IDLE:h(this,qv).stop(),h(this,In).notify("pause"),h(this,In).notify("end");break}},M$=function(){return h(this,yn).liveSeekableRange?new bs(h(this,yn).liveSeekableRange.start,h(this,yn).liveSeekableRange.end):h(this,Qm)},Ud=function(e){return e instanceof Event?e:new tn(e.type,{detail:e})},Hpe=function(e){const{streamType:t,title:r,poster:s}=h(this,In).$state;return new cHe(e).setMetadata(r(),s()).setStreamType(t()).setTracks(h(this,op).getLocalTextTracks()).build()},qpe=function(e){var i,o;const t=v(this,nt,Hpe).call(this,e),r=new chrome.cast.media.LoadRequest(t),s=h(this,In).$state.savedState();return r.autoplay=(((i=h(this,Va))==null?void 0:i.paused)??(s==null?void 0:s.paused))===!1,r.currentTime=((o=h(this,Va))==null?void 0:o.time)??(s==null?void 0:s.currentTime)??0,r},O$=async function(e,t){const r=Re(h(this,In).$state.source);M(this,Va,{src:r,paused:e,time:t}),await this.loadSource(r)},Upe=function(){v(this,nt,O$).call(this,h(this,yn).isPaused,h(this,yn).currentTime).catch(e=>{})};const hHe=Object.freeze(Object.defineProperty({__proto__:null,GoogleCastProvider:dHe},Symbol.toStringTag,{value:"Module"}));ln.MediaGrid=MY,ln.PhotoGrid=MY,ln.ResponsiveImage=nb,Object.defineProperty(ln,Symbol.toStringTag,{value:"Module"})}); +//# sourceMappingURL=pm-pics-components.umd.js.map diff --git a/packages/ui/dist-lib/pm-pics-components.umd.js.map b/packages/ui/dist-lib/pm-pics-components.umd.js.map new file mode 100644 index 00000000..4ec9387d --- /dev/null +++ b/packages/ui/dist-lib/pm-pics-components.umd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pm-pics-components.umd.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/hooks/useResponsiveImage.ts","../src/components/ResponsiveImage.tsx","../src/integrations/supabase/client.ts","../src/lib/db.ts","../node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/clsx/dist/clsx.mjs","../node_modules/class-variance-authority/dist/index.mjs","../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/lib/utils.ts","../src/components/ui/button.tsx","../src/hooks/useAuth.tsx","../node_modules/marked/lib/marked.esm.js","../node_modules/dompurify/dist/purify.es.mjs","../node_modules/zod/v3/helpers/util.js","../node_modules/zod/v3/ZodError.js","../node_modules/zod/v3/locales/en.js","../node_modules/zod/v3/errors.js","../node_modules/zod/v3/helpers/parseUtil.js","../node_modules/zod/v3/helpers/errorUtil.js","../node_modules/zod/v3/types.js","../src/utils/tagUtils.ts","../src/components/HashtagText.tsx","../node_modules/prismjs/prism.js","../node_modules/prismjs/components/prism-typescript.js","../node_modules/prismjs/components/prism-javascript.js","../node_modules/prismjs/components/prism-json.js","../node_modules/prismjs/components/prism-bash.js","../node_modules/prismjs/components/prism-css.js","../node_modules/prismjs/components/prism-markup.js","../src/components/MarkdownRenderer.tsx","../node_modules/@radix-ui/primitive/dist/index.mjs","../node_modules/@radix-ui/react-context/dist/index.mjs","../node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../node_modules/@radix-ui/react-id/dist/index.mjs","../node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs","../node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../node_modules/@radix-ui/react-focus-scope/dist/index.mjs","../node_modules/@radix-ui/react-portal/dist/index.mjs","../node_modules/@radix-ui/react-presence/dist/index.mjs","../node_modules/@radix-ui/react-focus-guards/dist/index.mjs","../node_modules/tslib/tslib.es6.mjs","../node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../node_modules/use-callback-ref/dist/es2015/assignRef.js","../node_modules/use-callback-ref/dist/es2015/useRef.js","../node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../node_modules/use-sidecar/dist/es2015/medium.js","../node_modules/use-sidecar/dist/es2015/exports.js","../node_modules/react-remove-scroll/dist/es2015/medium.js","../node_modules/react-remove-scroll/dist/es2015/UI.js","../node_modules/get-nonce/dist/es2015/index.js","../node_modules/react-style-singleton/dist/es2015/singleton.js","../node_modules/react-style-singleton/dist/es2015/hook.js","../node_modules/react-style-singleton/dist/es2015/component.js","../node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../node_modules/react-remove-scroll-bar/dist/es2015/component.js","../node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../node_modules/react-remove-scroll/dist/es2015/sidecar.js","../node_modules/react-remove-scroll/dist/es2015/Combination.js","../node_modules/aria-hidden/dist/es2015/index.js","../node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-dialog/dist/index.mjs","../src/components/ui/dialog.tsx","../src/components/ui/input.tsx","../node_modules/react-hook-form/dist/index.esm.mjs","../node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/@radix-ui/react-label/dist/index.mjs","../src/components/ui/label.tsx","../src/components/ui/form.tsx","../node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-collection/dist/index.mjs","../node_modules/@radix-ui/react-direction/dist/index.mjs","../node_modules/@radix-ui/react-roving-focus/dist/index.mjs","../node_modules/@radix-ui/react-tabs/dist/index.mjs","../src/components/ui/tabs.tsx","../node_modules/@radix-ui/react-use-previous/dist/index.mjs","../node_modules/@radix-ui/react-use-size/dist/index.mjs","../node_modules/@radix-ui/react-switch/dist/index.mjs","../src/components/ui/switch.tsx","../node_modules/@radix-ui/react-checkbox/dist/index.mjs","../src/components/ui/checkbox.tsx","../src/components/ui/card.tsx","../node_modules/@hookform/resolvers/dist/resolvers.mjs","../node_modules/@hookform/resolvers/zod/dist/zod.mjs","../src/components/ui/badge.tsx","../src/i18n.tsx","../src/components/widgets/ImagePickerDialog.tsx","../src/components/MarkdownEditor.tsx","../node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-alert-dialog/dist/index.mjs","../src/components/ui/alert-dialog.tsx","../src/components/VersionSelector.tsx","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/chatkit/sessions.mjs","../node_modules/openai/resources/beta/chatkit/threads.mjs","../node_modules/openai/resources/beta/chatkit/chatkit.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/calls.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/input-tokens.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/videos.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../node_modules/zod-to-json-schema/dist/esm/parsers/string.js","../node_modules/@google/generative-ai/dist/index.mjs","../src/image-api.ts","../src/lib/openai.ts","../src/constants.ts","../src/components/EditImageModal.tsx","../node_modules/react-zoom-pan-pinch/dist/index.esm.js","../src/components/ui/textarea.tsx","../node_modules/@radix-ui/react-radio-group/dist/index.mjs","../src/components/ui/radio-group.tsx","../src/components/PublishDialog.tsx","../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../node_modules/@radix-ui/react-arrow/dist/index.mjs","../node_modules/@radix-ui/react-popper/dist/index.mjs","../node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-menu/dist/index.mjs","../node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs","../src/components/ui/dropdown-menu.tsx","../src/components/StylePresetSelector.tsx","../src/components/ImageLightbox.tsx","../node_modules/zustand/esm/vanilla.mjs","../node_modules/zustand/esm/react.mjs","../node_modules/zustand/esm/middleware.mjs","../src/stores/navigationStore.ts","../src/hooks/useWizardContext.ts","../src/components/MagicWizardButton.tsx","../src/utils/downloadUtils.ts","../src/contexts/PostNavigationContext.tsx","../src/utils/textUtils.ts","../node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-context/dist/index.mjs","../node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../node_modules/use-sync-external-store/shim/index.js","../node_modules/@radix-ui/react-use-is-hydrated/dist/index.mjs","../node_modules/@radix-ui/react-avatar/dist/index.mjs","../src/components/ui/avatar.tsx","../src/contexts/ProfilesContext.tsx","../src/components/UserAvatarBlock.tsx","../src/components/PhotoCard.tsx","../node_modules/@vidstack/react/prod/chunks/vidstack-CZgUA94N.js","../node_modules/@vidstack/react/prod/chunks/vidstack-D5Pzx_k5.js","../node_modules/@vidstack/react/prod/chunks/vidstack-CQ3Bde2N.js","../node_modules/@vidstack/react/prod/chunks/vidstack-DqtDbuaC.js","../node_modules/@vidstack/react/prod/chunks/vidstack-DzQtn4XB.js","../node_modules/@vidstack/react/prod/chunks/vidstack-vqp2QaHR.js","../node_modules/@vidstack/react/prod/chunks/vidstack-D27o2o-g.js","../node_modules/@vidstack/react/prod/chunks/vidstack-CBF7iUqu.js","../node_modules/@vidstack/react/prod/player/vidstack-default-icons.js","../src/components/EditVideoModal.tsx","../src/lib/mediaRegistry.ts","../node_modules/@vidstack/react/prod/vidstack.js","../src/components/VideoCard.tsx","../src/utils/mediaUtils.ts","../src/components/PageCard.tsx","../src/components/MediaCard.tsx","../src/hooks/usePostNavigation.ts","../src/contexts/OrganizationContext.tsx","../src/contexts/FeedCacheContext.tsx","../src/hooks/useFeedData.ts","../src/components/PhotoGrid.tsx","../node_modules/@milkdown/exception/lib/index.js","../node_modules/@milkdown/ctx/lib/index.js","../node_modules/orderedmap/dist/index.js","../node_modules/prosemirror-model/dist/index.js","../node_modules/mdast-util-to-string/lib/index.js","../node_modules/decode-named-character-reference/index.dom.js","../node_modules/micromark-util-chunked/index.js","../node_modules/micromark-util-combine-extensions/index.js","../node_modules/micromark-util-decode-numeric-character-reference/index.js","../node_modules/micromark-util-normalize-identifier/index.js","../node_modules/micromark-util-character/index.js","../node_modules/micromark-factory-space/index.js","../node_modules/micromark/lib/initialize/content.js","../node_modules/micromark/lib/initialize/document.js","../node_modules/micromark-util-classify-character/index.js","../node_modules/micromark-util-resolve-all/index.js","../node_modules/micromark-core-commonmark/lib/attention.js","../node_modules/micromark-core-commonmark/lib/autolink.js","../node_modules/micromark-core-commonmark/lib/blank-line.js","../node_modules/micromark-core-commonmark/lib/block-quote.js","../node_modules/micromark-core-commonmark/lib/character-escape.js","../node_modules/micromark-core-commonmark/lib/character-reference.js","../node_modules/micromark-core-commonmark/lib/code-fenced.js","../node_modules/micromark-core-commonmark/lib/code-indented.js","../node_modules/micromark-core-commonmark/lib/code-text.js","../node_modules/micromark-util-subtokenize/lib/splice-buffer.js","../node_modules/micromark-util-subtokenize/index.js","../node_modules/micromark-core-commonmark/lib/content.js","../node_modules/micromark-factory-destination/index.js","../node_modules/micromark-factory-label/index.js","../node_modules/micromark-factory-title/index.js","../node_modules/micromark-factory-whitespace/index.js","../node_modules/micromark-core-commonmark/lib/definition.js","../node_modules/micromark-core-commonmark/lib/hard-break-escape.js","../node_modules/micromark-core-commonmark/lib/heading-atx.js","../node_modules/micromark-util-html-tag-name/index.js","../node_modules/micromark-core-commonmark/lib/html-flow.js","../node_modules/micromark-core-commonmark/lib/html-text.js","../node_modules/micromark-core-commonmark/lib/label-end.js","../node_modules/micromark-core-commonmark/lib/label-start-image.js","../node_modules/micromark-core-commonmark/lib/label-start-link.js","../node_modules/micromark-core-commonmark/lib/line-ending.js","../node_modules/micromark-core-commonmark/lib/thematic-break.js","../node_modules/micromark-core-commonmark/lib/list.js","../node_modules/micromark-core-commonmark/lib/setext-underline.js","../node_modules/micromark/lib/initialize/flow.js","../node_modules/micromark/lib/initialize/text.js","../node_modules/micromark/lib/constructs.js","../node_modules/micromark/lib/create-tokenizer.js","../node_modules/micromark/lib/parse.js","../node_modules/micromark/lib/postprocess.js","../node_modules/micromark/lib/preprocess.js","../node_modules/micromark-util-decode-string/index.js","../node_modules/unist-util-stringify-position/lib/index.js","../node_modules/mdast-util-from-markdown/lib/index.js","../node_modules/remark-parse/lib/index.js","../node_modules/zwitch/index.js","../node_modules/mdast-util-to-markdown/lib/configure.js","../node_modules/mdast-util-to-markdown/lib/handle/blockquote.js","../node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js","../node_modules/mdast-util-to-markdown/lib/handle/break.js","../node_modules/longest-streak/index.js","../node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js","../node_modules/mdast-util-to-markdown/lib/util/check-fence.js","../node_modules/mdast-util-to-markdown/lib/handle/code.js","../node_modules/mdast-util-to-markdown/lib/util/check-quote.js","../node_modules/mdast-util-to-markdown/lib/handle/definition.js","../node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js","../node_modules/mdast-util-to-markdown/lib/util/encode-character-reference.js","../node_modules/mdast-util-to-markdown/lib/util/encode-info.js","../node_modules/mdast-util-to-markdown/lib/handle/emphasis.js","../node_modules/unist-util-is/lib/index.js","../node_modules/unist-util-visit-parents/lib/color.js","../node_modules/unist-util-visit-parents/lib/index.js","../node_modules/unist-util-visit/lib/index.js","../node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js","../node_modules/mdast-util-to-markdown/lib/handle/heading.js","../node_modules/mdast-util-to-markdown/lib/handle/html.js","../node_modules/mdast-util-to-markdown/lib/handle/image.js","../node_modules/mdast-util-to-markdown/lib/handle/image-reference.js","../node_modules/mdast-util-to-markdown/lib/handle/inline-code.js","../node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js","../node_modules/mdast-util-to-markdown/lib/handle/link.js","../node_modules/mdast-util-to-markdown/lib/handle/link-reference.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js","../node_modules/mdast-util-to-markdown/lib/util/check-rule.js","../node_modules/mdast-util-to-markdown/lib/handle/list.js","../node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js","../node_modules/mdast-util-to-markdown/lib/handle/list-item.js","../node_modules/mdast-util-to-markdown/lib/handle/paragraph.js","../node_modules/mdast-util-phrasing/lib/index.js","../node_modules/mdast-util-to-markdown/lib/handle/root.js","../node_modules/mdast-util-to-markdown/lib/util/check-strong.js","../node_modules/mdast-util-to-markdown/lib/handle/strong.js","../node_modules/mdast-util-to-markdown/lib/handle/text.js","../node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js","../node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js","../node_modules/mdast-util-to-markdown/lib/handle/index.js","../node_modules/mdast-util-to-markdown/lib/join.js","../node_modules/mdast-util-to-markdown/lib/unsafe.js","../node_modules/mdast-util-to-markdown/lib/util/association.js","../node_modules/mdast-util-to-markdown/lib/util/compile-pattern.js","../node_modules/mdast-util-to-markdown/lib/util/container-phrasing.js","../node_modules/mdast-util-to-markdown/lib/util/container-flow.js","../node_modules/mdast-util-to-markdown/lib/util/indent-lines.js","../node_modules/mdast-util-to-markdown/lib/util/safe.js","../node_modules/mdast-util-to-markdown/lib/util/track.js","../node_modules/mdast-util-to-markdown/lib/index.js","../node_modules/remark-stringify/lib/index.js","../node_modules/bail/index.js","../node_modules/extend/index.js","../node_modules/devlop/lib/default.js","../node_modules/is-plain-obj/index.js","../node_modules/trough/lib/index.js","../node_modules/vfile-message/lib/index.js","../node_modules/vfile/lib/minpath.browser.js","../node_modules/vfile/lib/minproc.browser.js","../node_modules/vfile/lib/minurl.shared.js","../node_modules/vfile/lib/minurl.browser.js","../node_modules/vfile/lib/index.js","../node_modules/unified/lib/callable-instance.js","../node_modules/unified/lib/index.js","../node_modules/@milkdown/transformer/lib/index.js","../node_modules/prosemirror-transform/dist/index.js","../node_modules/prosemirror-state/dist/index.js","../node_modules/prosemirror-commands/dist/index.js","../node_modules/prosemirror-inputrules/dist/index.js","../node_modules/@milkdown/prose/lib/index.js","../node_modules/w3c-keyname/index.js","../node_modules/prosemirror-keymap/dist/index.js","../node_modules/prosemirror-view/dist/index.js","../node_modules/@milkdown/core/lib/index.js","../node_modules/nanoid/index.browser.js","../node_modules/@milkdown/utils/lib/index.js","../node_modules/@milkdown/plugin-clipboard/lib/index.js","../node_modules/rope-sequence/dist/index.js","../node_modules/prosemirror-history/dist/index.js","../node_modules/@milkdown/plugin-history/lib/index.js","../node_modules/@milkdown/plugin-indent/lib/index.js","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/lodash-es/_baseTrim.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/now.js","../node_modules/lodash-es/debounce.js","../node_modules/lodash-es/throttle.js","../node_modules/@milkdown/plugin-listener/lib/index.js","../node_modules/@milkdown/plugin-trailing/lib/index.js","../node_modules/prosemirror-schema-list/dist/index.js","../node_modules/mdast-util-definitions/lib/index.js","../node_modules/remark-inline-links/lib/index.js","../node_modules/@milkdown/preset-commonmark/lib/index.js","../node_modules/prosemirror-tables/dist/index.js","../node_modules/prosemirror-safari-ime-span/dist/index.js","../node_modules/ccount/index.js","../node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp/index.js","../node_modules/mdast-util-find-and-replace/lib/index.js","../node_modules/mdast-util-gfm-autolink-literal/lib/index.js","../node_modules/mdast-util-gfm-footnote/lib/index.js","../node_modules/mdast-util-gfm-strikethrough/lib/index.js","../node_modules/markdown-table/index.js","../node_modules/mdast-util-gfm-table/lib/index.js","../node_modules/mdast-util-gfm-task-list-item/lib/index.js","../node_modules/mdast-util-gfm/lib/index.js","../node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js","../node_modules/micromark-extension-gfm-footnote/lib/syntax.js","../node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js","../node_modules/micromark-extension-gfm-table/lib/edit-map.js","../node_modules/micromark-extension-gfm-table/lib/infer.js","../node_modules/micromark-extension-gfm-table/lib/syntax.js","../node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js","../node_modules/micromark-extension-gfm/index.js","../node_modules/remark-gfm/lib/index.js","../node_modules/@milkdown/preset-gfm/lib/index.js","../node_modules/@milkdown/crepe/lib/esm/builder.js","../node_modules/@milkdown/plugin-block/lib/index.js","../node_modules/@vue/shared/dist/shared.esm-bundler.js","../node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js","../node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js","../node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js","../node_modules/vue/dist/vue.runtime.esm-bundler.js","../node_modules/@milkdown/plugin-slash/lib/index.js","../node_modules/@milkdown/components/lib/index.js","../node_modules/@milkdown/components/lib/image-block/index.js","../node_modules/@milkdown/crepe/lib/esm/feature/block-edit/index.js","../node_modules/@milkdown/plugin-tooltip/lib/index.js","../node_modules/@milkdown/components/lib/link-tooltip/index.js","../node_modules/katex/dist/katex.mjs","../node_modules/@milkdown/crepe/lib/esm/feature/toolbar/index.js","../src/components/lazy-editors/MilkdownEditorInternal.tsx","../node_modules/media-captions/dist/prod/index.js","../node_modules/@vidstack/react/prod/chunks/vidstack-R_ot4AhB.js","../node_modules/@vidstack/react/prod/chunks/vidstack-BN7_0WI-.js","../node_modules/@vidstack/react/prod/chunks/vidstack-FldwQc2Q.js","../node_modules/@vidstack/react/prod/chunks/vidstack-krOAtKMi.js","../node_modules/@vidstack/react/prod/chunks/vidstack-BqgQkvb4.js","../node_modules/@vidstack/react/prod/chunks/vidstack-Dm1xEU9Q.js","../node_modules/@vidstack/react/prod/chunks/vidstack-DHmfHold.js","../node_modules/@vidstack/react/prod/chunks/vidstack-CQQ1xKSy.js","../node_modules/media-captions/dist/prod/srt-parser.js","../node_modules/media-captions/dist/prod/ssa-parser.js","../node_modules/media-captions/dist/prod/errors.js","../node_modules/@vidstack/react/prod/chunks/vidstack-BeT6vBOi.js"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar React = require('react');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n // eslint-disable-next-line no-fallthrough\n }\n }\n\n return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if ( !fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n return type;\n }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner$1.current) {\n var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement$1(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object') {\n return;\n }\n\n if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n {\n if (hasOwnProperty.call(props, 'key')) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(props).filter(function (k) {\n return k !== 'key';\n });\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, true);\n }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, false);\n }\n}\n\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs = jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","\r\nimport { useState, useEffect } from 'react';\r\nimport { ResponsiveData } from '@/components/ResponsiveImage';\r\n\r\ninterface UseResponsiveImageProps {\r\n src: string | File | null;\r\n responsiveSizes?: number[];\r\n formats?: string[];\r\n enabled?: boolean;\r\n apiUrl?: string;\r\n}\r\n\r\n// Module-level cache to deduplicate requests\r\n// Key: stringified request params, Value: Promise<ResponsiveData>\r\nconst requestCache = new Map<string, Promise<ResponsiveData>>();\r\n\r\nexport const useResponsiveImage = ({\r\n src,\r\n responsiveSizes = [180, 640, 1024],\r\n formats = ['avif', 'webp', 'jpeg'],\r\n enabled = true,\r\n apiUrl,\r\n}: UseResponsiveImageProps) => {\r\n const [data, setData] = useState<ResponsiveData | null>(null);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n useEffect(() => {\r\n let isMounted = true;\r\n\r\n const generateResponsiveImages = async () => {\r\n if (!src || !enabled) {\r\n if (isMounted) {\r\n // Only reset if disabled or no src, but if we already have data we might want to keep it?\r\n // actually if distinct src change, reset. if just disabled, maybe do nothing?\r\n // For now, if disabled, we just don't start.\r\n if (!src) {\r\n setData(null);\r\n setLoading(false);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (isMounted) {\r\n setLoading(true);\r\n setError(null);\r\n }\r\n\r\n try {\r\n // Only cache string URLs (remote images)\r\n // File objects are harder to cache reliably and usually come from user input anyway\r\n if (typeof src === 'string') {\r\n // Check for Data URI\r\n if (src.startsWith('data:')) {\r\n if (isMounted) {\r\n setData({\r\n img: {\r\n src: src,\r\n width: 0, // Unknown dimensions without parsing\r\n height: 0,\r\n format: 'unknown'\r\n },\r\n sources: [] // No alternative sources for raw data URI\r\n });\r\n setLoading(false);\r\n }\r\n return;\r\n }\r\n\r\n const cacheKey = JSON.stringify({ src, sizes: responsiveSizes, formats, apiUrl });\r\n\r\n if (!requestCache.has(cacheKey)) {\r\n const requestPromise = (async () => {\r\n const formData = new FormData();\r\n formData.append('url', src);\r\n formData.append('sizes', JSON.stringify(responsiveSizes));\r\n formData.append('formats', JSON.stringify(formats));\r\n\r\n const serverUrl = apiUrl || import.meta.env.VITE_SERVER_IMAGE_API_URL || 'http://192.168.1.11:3333';\r\n const response = await fetch(`${serverUrl}/api/images/responsive`, {\r\n method: 'POST',\r\n body: formData,\r\n });\r\n\r\n if (!response.ok) {\r\n const txt = await response.text();\r\n // Remove from cache on error so it can be retried\r\n requestCache.delete(cacheKey);\r\n throw new Error(txt || 'Failed to generate responsive images');\r\n }\r\n\r\n return response.json();\r\n })();\r\n\r\n requestCache.set(cacheKey, requestPromise);\r\n }\r\n\r\n const result = await requestCache.get(cacheKey)!;\r\n if (isMounted) {\r\n setData(result);\r\n }\r\n } else {\r\n // Handle File objects (no caching)\r\n const formData = new FormData();\r\n formData.append('file', src);\r\n formData.append('sizes', JSON.stringify(responsiveSizes));\r\n formData.append('formats', JSON.stringify(formats));\r\n\r\n const serverUrl = apiUrl || import.meta.env.VITE_SERVER_IMAGE_API_URL || '';\r\n const response = await fetch(`${serverUrl}/api/images/responsive`, {\r\n method: 'POST',\r\n body: formData,\r\n });\r\n\r\n if (!response.ok) {\r\n const txt = await response.text();\r\n throw new Error(txt || 'Failed to generate responsive images');\r\n }\r\n\r\n const result = await response.json();\r\n if (isMounted) {\r\n setData(result);\r\n }\r\n }\r\n } catch (err: any) {\r\n console.error('Error generating responsive images:', err);\r\n if (isMounted) {\r\n setError(err.message);\r\n }\r\n } finally {\r\n if (isMounted) {\r\n setLoading(false);\r\n }\r\n }\r\n };\r\n\r\n generateResponsiveImages();\r\n\r\n return () => {\r\n isMounted = false;\r\n };\r\n }, [src, JSON.stringify(responsiveSizes), JSON.stringify(formats), enabled]);\r\n\r\n return { data, loading, error };\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useResponsiveImage } from '@/hooks/useResponsiveImage';\r\n\r\ninterface ResponsiveImageProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'src'> {\r\n src: string | File;\r\n sizes?: string;\r\n className?: string;\r\n imgClassName?: string;\r\n responsiveSizes?: number[];\r\n formats?: string[];\r\n alt: string;\r\n onDataLoaded?: (data: ResponsiveData) => void;\r\n rootMargin?: string;\r\n data?: ResponsiveData;\r\n apiUrl?: string;\r\n}\r\n\r\nexport interface ResponsiveData {\r\n img: {\r\n src: string;\r\n width: number;\r\n height: number;\r\n format: string;\r\n };\r\n sources?: {\r\n srcset: string;\r\n type: string;\r\n }[];\r\n}\r\n\r\nconst ResponsiveImage: React.FC<ResponsiveImageProps> = ({\r\n src,\r\n sizes = '(max-width: 1024px) 100vw, 50vw',\r\n className,\r\n imgClassName,\r\n responsiveSizes = [180, 640, 1024, 1280, 1600],\r\n formats = ['avif', 'webp'],\r\n alt,\r\n onDataLoaded,\r\n rootMargin = '800px',\r\n onLoad,\r\n onError,\r\n data: providedData,\r\n apiUrl,\r\n ...props\r\n}) => {\r\n // Lazy load logic\r\n const [isInView, setIsInView] = useState(props.loading === 'eager');\r\n const [imgLoaded, setImgLoaded] = useState(false);\r\n const ref = React.useRef<HTMLDivElement>(null);\r\n const imgRef = React.useRef<HTMLImageElement>(null);\r\n\r\n useEffect(() => {\r\n if (props.loading === 'eager' || providedData) {\r\n setIsInView(true);\r\n return;\r\n }\r\n\r\n const observer = new IntersectionObserver(([entry]) => {\r\n if (entry.isIntersecting) {\r\n setIsInView(true);\r\n observer.disconnect();\r\n }\r\n }, {\r\n rootMargin\r\n });\r\n\r\n if (ref.current) {\r\n observer.observe(ref.current);\r\n }\r\n\r\n return () => {\r\n observer.disconnect();\r\n };\r\n }, [props.loading, rootMargin, providedData]);\r\n\r\n const hookResult = useResponsiveImage({\r\n src: src as string | File,\r\n responsiveSizes,\r\n formats,\r\n enabled: isInView && !providedData,\r\n apiUrl: apiUrl\r\n });\r\n\r\n const data = providedData || hookResult.data;\r\n const loading = !providedData && hookResult.loading;\r\n const error = !providedData && hookResult.error;\r\n\r\n useEffect(() => {\r\n if (data && onDataLoaded) {\r\n onDataLoaded(data);\r\n }\r\n }, [data, onDataLoaded]);\r\n\r\n // Reset loaded state when src changes\r\n useEffect(() => {\r\n setImgLoaded(false);\r\n }, [src]);\r\n\r\n // Check if image is already loaded (from cache)\r\n useEffect(() => {\r\n if (imgRef.current?.complete) {\r\n setImgLoaded(true);\r\n }\r\n }, [data, imgLoaded]);\r\n\r\n // If we are enabled (isInView) but have no data and no error yet,\r\n // we are effectively in a \"pending load\" state.\r\n const isLoadingOrPending = loading || (isInView && !data && !error);\r\n\r\n if (!isInView || isLoadingOrPending) {\r\n // Use className for wrapper if provided, otherwise generic\r\n // We attach the ref here to detect when this placeholder comes into view\r\n return <div ref={ref} className={`animate-pulse bg-gray-200 w-full h-full ${className || ''}`} />;\r\n }\r\n\r\n if (error || !data) {\r\n // Fallback if generation failed\r\n if (typeof src === 'string') {\r\n return <img src={src} alt={alt} className={imgClassName || className} {...props} />;\r\n }\r\n return <div className=\"text-red-500 text-xs\">Failed to load image</div>;\r\n }\r\n\r\n return (\r\n <div className={`relative w-full h-full ${className || ''}`}>\r\n <picture>\r\n {(data.sources || []).map((source, index) => (\r\n <source key={index} srcSet={source.srcset} type={source.type} sizes={sizes} />\r\n ))}\r\n <img\r\n ref={imgRef}\r\n src={data.img.src}\r\n alt={alt}\r\n // Only apply width/height if they are known (> 0)\r\n // This fixes an issue where Data URIs (which return 0/0) render as invisible 0x0 images\r\n width={data.img.width > 0 ? data.img.width : undefined}\r\n height={data.img.height > 0 ? data.img.height : undefined}\r\n className={`${imgClassName || ''} transition-opacity duration-300 ${imgLoaded ? 'opacity-100' : 'opacity-0'}`}\r\n onLoad={(e) => {\r\n setImgLoaded(true);\r\n onLoad?.(e);\r\n }}\r\n onError={(e) => {\r\n setImgLoaded(true);\r\n onError?.(e);\r\n }}\r\n loading={props.loading || \"lazy\"}\r\n decoding=\"async\"\r\n {...props}\r\n />\r\n </picture>\r\n {!imgLoaded && (\r\n <div className=\"absolute inset-0 flex items-center justify-center bg-gray-100/50 z-10 pointer-events-none\">\r\n <div className=\"animate-spin rounded-full h-8 w-8 border-2 border-primary border-t-transparent\"></div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ResponsiveImage;\r\n","// This file is automatically generated. Do not edit it directly.\nimport { createClient } from '@supabase/supabase-js';\nimport type { Database } from './types';\n\nconst SUPABASE_URL = \"https://ytoadlpbdguriiccjnip.supabase.co\";\nconst SUPABASE_PUBLISHABLE_KEY = \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inl0b2FkbHBiZGd1cmlpY2NqbmlwIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTg5NjU5OTAsImV4cCI6MjA3NDU0MTk5MH0.mXt594NQ2QsJQ_F-HqsSlBsLQ5EUB4iFxXtPE7zyaX8\";\n\n// Import the supabase client like this:\n// import { supabase } from \"@/integrations/supabase/client\";\n\nexport const supabase = createClient<Database>(SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY, {\n auth: {\n storage: localStorage,\n persistSession: true,\n autoRefreshToken: true,\n }\n});","import { supabase as defaultSupabase } from \"@/integrations/supabase/client\";\r\nimport { UserProfile, PostMediaItem } from \"@/pages/Post/types\";\r\nimport { MediaType, MediaItem } from \"@/types\";\r\nimport { SupabaseClient } from \"@supabase/supabase-js\";\r\n\r\n// Request cache for deduplication\r\nconst requestCache = new Map<string, Promise<any>>();\r\n\r\nconst fetchWithDeduplication = async <T>(key: string, fetcher: () => Promise<T>): Promise<T> => {\r\n if (!requestCache.has(key)) {\r\n const promise = fetcher().catch((err) => {\r\n requestCache.delete(key);\r\n throw err;\r\n }).finally(() => {\r\n // Clear cache after a short delay to allow immediate re-renders to share data\r\n // but prevent stale data issues.\r\n setTimeout(() => requestCache.delete(key), 2500);\r\n });\r\n requestCache.set(key, promise);\r\n }\r\n return requestCache.get(key) as Promise<T>;\r\n};\r\n\r\nexport const fetchPostById = async (id: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`post-${id}`, async () => {\r\n const { data, error } = await supabase\r\n .from('posts')\r\n .select(`\r\n *,\r\n pictures (\r\n *\r\n )\r\n `)\r\n .eq('id', id)\r\n .maybeSingle();\r\n\r\n if (error) throw error;\r\n return data;\r\n });\r\n};\r\n\r\nexport const fetchPictureById = async (id: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`picture-${id}`, async () => {\r\n const { data, error } = await supabase\r\n .from('pictures')\r\n .select(`\r\n *,\r\n post:posts (\r\n *\r\n )\r\n `)\r\n .eq('id', id)\r\n .maybeSingle();\r\n\r\n if (error) throw error;\r\n return data;\r\n });\r\n};\r\n\r\nexport const fetchPageById = async (id: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`page-${id}`, async () => {\r\n const { data, error } = await supabase\r\n .from('pages')\r\n .select('*')\r\n .eq('id', id)\r\n .maybeSingle();\r\n\r\n if (error) throw error;\r\n return data;\r\n });\r\n};\r\n\r\nexport const fetchFullPost = async (postId: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`full-post-${postId}`, async () => {\r\n const { data, error } = await supabase\r\n .from('posts')\r\n .select(`*, pictures (*)`)\r\n .eq('id', postId)\r\n .single();\r\n\r\n if (error) throw error;\r\n return data;\r\n });\r\n};\r\n\r\nexport const fetchAuthorProfile = async (userId: string, client?: SupabaseClient): Promise<UserProfile | null> => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`profile-${userId}`, async () => {\r\n const { data, error } = await supabase\r\n .from('profiles')\r\n .select('user_id, avatar_url, display_name, username')\r\n .eq('user_id', userId)\r\n .single();\r\n\r\n if (error && error.code !== 'PGRST116') throw error;\r\n return data as UserProfile;\r\n });\r\n};\r\n\r\nexport const fetchVersions = async (mediaItem: PostMediaItem, userId?: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n const key = `versions-${mediaItem.id}-${userId || 'anon'}`;\r\n return fetchWithDeduplication(key, async () => {\r\n let query = supabase\r\n .from('pictures')\r\n .select('*')\r\n .or(`parent_id.eq.${mediaItem.parent_id || mediaItem.id},id.eq.${mediaItem.parent_id || mediaItem.id}`)\r\n .or('type.is.null,type.eq.supabase-image');\r\n\r\n if (!userId || userId !== mediaItem.user_id) {\r\n query = query.eq('visible', true);\r\n }\r\n\r\n const { data, error } = await query.order('created_at', { ascending: true });\r\n if (error) throw error;\r\n return data;\r\n });\r\n};\r\n\r\nexport const checkLikeStatus = async (userId: string, pictureId: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`like-${userId}-${pictureId}`, async () => {\r\n const { data, error } = await supabase\r\n .from('likes')\r\n .select('id')\r\n .eq('user_id', userId)\r\n .eq('picture_id', pictureId)\r\n .maybeSingle();\r\n\r\n if (error) throw error;\r\n return !!data;\r\n });\r\n};\r\n\r\nexport const toggleLike = async (userId: string, pictureId: string, isLiked: boolean, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n // Invalidate like status cache immediately\r\n const cacheKey = `like-${userId}-${pictureId}`;\r\n if (requestCache.has(cacheKey)) requestCache.delete(cacheKey);\r\n\r\n if (isLiked) {\r\n const { error } = await supabase\r\n .from('likes')\r\n .delete()\r\n .eq('user_id', userId)\r\n .eq('picture_id', pictureId);\r\n if (error) throw error;\r\n return false;\r\n } else {\r\n const { error } = await supabase\r\n .from('likes')\r\n .insert([{ user_id: userId, picture_id: pictureId }]);\r\n if (error) throw error;\r\n return true;\r\n }\r\n};\r\n\r\nexport const uploadFileToStorage = async (userId: string, file: File | Blob, fileName?: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n const name = fileName || `${userId}/${Date.now()}-${Math.random().toString(36).substring(7)}`;\r\n const { error } = await supabase.storage.from('pictures').upload(name, file);\r\n if (error) throw error;\r\n\r\n const { data: { publicUrl } } = supabase.storage.from('pictures').getPublicUrl(name);\r\n return publicUrl;\r\n};\r\n\r\nexport const createPicture = async (picture: Partial<PostMediaItem>, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n // Ensure type is a valid MediaType (string/enum compatibility)\r\n const dbPicture: any = { ...picture };\r\n\r\n const { data, error } = await supabase\r\n .from('pictures')\r\n .insert([dbPicture])\r\n .select()\r\n .single();\r\n\r\n if (error) throw error;\r\n return data;\r\n};\r\n\r\nexport const updatePostDetails = async (postId: string, updates: { title: string, description: string }, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n const { error } = await supabase\r\n .from('posts')\r\n .update(updates)\r\n .eq('id', postId);\r\n if (error) throw error;\r\n\r\n // Invalidate post cache\r\n const cacheKey = `post-${postId}`;\r\n if (requestCache.has(cacheKey)) requestCache.delete(cacheKey);\r\n const fullCacheKey = `full-post-${postId}`;\r\n if (requestCache.has(fullCacheKey)) requestCache.delete(fullCacheKey);\r\n};\r\n\r\nexport const unlinkPictures = async (ids: string[], client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n const { error } = await supabase\r\n .from('pictures')\r\n .update({ post_id: null, position: -1 } as any)\r\n .in('id', ids);\r\n if (error) throw error;\r\n};\r\n\r\nexport const upsertPictures = async (pictures: Partial<PostMediaItem>[], client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n const { error } = await supabase\r\n .from('pictures')\r\n .upsert(pictures as any, { onConflict: 'id' });\r\n if (error) throw error;\r\n};\r\n\r\nexport const getUserSettings = async (userId: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`settings-${userId}`, async () => {\r\n const { data, error } = await supabase\r\n .from('profiles')\r\n .select('settings')\r\n .eq('user_id', userId)\r\n .single();\r\n if (error) throw error;\r\n return (data?.settings as any) || {};\r\n });\r\n};\r\n\r\nexport const updateUserSettings = async (userId: string, settings: any, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n await supabase\r\n .from('profiles')\r\n .update({ settings })\r\n .eq('user_id', userId);\r\n\r\n // Invalidate settings cache\r\n const cacheKey = `settings-${userId}`;\r\n if (requestCache.has(cacheKey)) requestCache.delete(cacheKey);\r\n};\r\n\r\nexport const getUserOpenAIKey = async (userId: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`openai-${userId}`, async () => {\r\n const { data, error } = await supabase\r\n .from('user_secrets')\r\n .select('settings')\r\n .eq('user_id', userId)\r\n .maybeSingle();\r\n\r\n if (error) throw error;\r\n const settings = data?.settings as any;\r\n return settings?.api_keys?.openai_api_key;\r\n });\r\n}\r\n\r\nexport const addCollectionPictures = async (inserts: { collection_id: string, picture_id: string }[], client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n const { error } = await supabase\r\n .from('collection_pictures')\r\n .insert(inserts);\r\n if (error) throw error;\r\n};\r\n\r\nexport const updateStorageFile = async (path: string, blob: Blob, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n const { error } = await supabase.storage.from('pictures').update(path, blob, {\r\n cacheControl: '0',\r\n upsert: true\r\n });\r\n if (error) throw error;\r\n};\r\n\r\nexport const fetchSelectedVersions = async (rootIds: string[], client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n if (rootIds.length === 0) return [];\r\n\r\n // Sort ids to ensure consistent cache key\r\n const sortedIds = [...rootIds].sort();\r\n const key = `selected-versions-${sortedIds.join(',')}`;\r\n\r\n return fetchWithDeduplication(key, async () => {\r\n // safe query format\r\n const idsString = `(${rootIds.join(',')})`;\r\n const { data, error } = await supabase\r\n .from('pictures')\r\n .select('*')\r\n .eq('is_selected', true)\r\n .or(`parent_id.in.${idsString},id.in.${idsString}`);\r\n\r\n if (error) throw error;\r\n return data;\r\n });\r\n};\r\n\r\nexport const fetchRelatedVersions = async (rootIds: string[], client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n if (rootIds.length === 0) return [];\r\n\r\n const sortedIds = [...rootIds].sort();\r\n const key = `related-versions-${sortedIds.join(',')}`;\r\n\r\n return fetchWithDeduplication(key, async () => {\r\n const idsString = `(${rootIds.join(',')})`;\r\n const { data, error } = await supabase\r\n .from('pictures')\r\n .select('*')\r\n .or(`parent_id.in.${idsString},id.in.${idsString}`)\r\n .order('created_at', { ascending: true }); // Ensure deterministic order\r\n\r\n if (error) throw error;\r\n return data;\r\n });\r\n};\r\n\r\nexport const fetchUserRoles = async (userId: string, client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n return fetchWithDeduplication(`roles-${userId}`, async () => {\r\n const { data, error } = await supabase\r\n .from('user_roles')\r\n .select('role')\r\n .eq('user_id', userId);\r\n\r\n if (error) {\r\n console.error('Error fetching user roles:', error);\r\n return [];\r\n }\r\n return data.map(r => r.role);\r\n });\r\n};\r\n\r\nexport const fetchUserLikesForPictures = async (userId: string, pictureIds: string[], client?: SupabaseClient) => {\r\n const supabase = client || defaultSupabase;\r\n if (pictureIds.length === 0) return [];\r\n\r\n // Create a deterministic cache key. Max length consideration might be needed for very large posts,\r\n // but for now simple join is fine or we can skip cache for very large sets.\r\n const sortedIds = [...pictureIds].sort();\r\n // Using a hash or truncated key might be safer for URL limits if this was GET, but internal map is fine.\r\n const key = `likes-batch-${userId}-${sortedIds.slice(0, 5).join(',')}-${sortedIds.length}`;\r\n\r\n return fetchWithDeduplication(key, async () => {\r\n const { data, error } = await supabase\r\n .from('likes')\r\n .select('picture_id')\r\n .eq('user_id', userId)\r\n .in('picture_id', pictureIds);\r\n\r\n if (error) throw error;\r\n // Return array of liked picture IDs\r\n return data.map(like => like.picture_id);\r\n });\r\n};\r\n\r\nexport interface FeedPost {\r\n id: string; // Post ID\r\n title: string;\r\n description: string | null;\r\n created_at: string;\r\n user_id: string;\r\n pictures: MediaItem[]; // All visible pictures\r\n cover: MediaItem; // The selected cover picture\r\n likes_count: number;\r\n comments_count: number;\r\n type: MediaType;\r\n author_profile?: UserProfile;\r\n}\r\n\r\nexport const fetchFeedPosts = async (\r\n source: 'home' | 'collection' | 'tag' | 'user' = 'home',\r\n sourceId?: string,\r\n isOrgContext?: boolean,\r\n orgSlug?: string,\r\n client?: SupabaseClient\r\n): Promise<FeedPost[]> => {\r\n // Forward to paginated version with defaults\r\n return fetchFeedPostsPaginated(source, sourceId, isOrgContext, orgSlug, 0, 30, client);\r\n};\r\n\r\nexport const fetchFeedPostsPaginated = async (\r\n source: 'home' | 'collection' | 'tag' | 'user' = 'home',\r\n sourceId?: string,\r\n isOrgContext?: boolean,\r\n orgSlug?: string,\r\n page: number = 0,\r\n pageSize: number = 30,\r\n client?: SupabaseClient\r\n): Promise<FeedPost[]> => {\r\n const supabase = client || defaultSupabase;\r\n const start = page * pageSize;\r\n const end = start + pageSize - 1;\r\n\r\n // 1. Fetch Posts\r\n let query = supabase\r\n .from('posts')\r\n .select(`\r\n *,\r\n pictures(\r\n id,\r\n image_url,\r\n thumbnail_url,\r\n type,\r\n meta,\r\n description,\r\n likes_count,\r\n visible,\r\n is_selected,\r\n position,\r\n parent_id,\r\n created_at,\r\n title\r\n )\r\n `)\r\n .order('created_at', { ascending: false })\r\n .range(start, end);\r\n\r\n // Filter out non-public posts (listed/private) for the home feed\r\n if (!sourceId && source === 'home') {\r\n query = query.or('settings.is.null,settings->>visibility.eq.public');\r\n }\r\n\r\n // Org context logic (placeholder from PhotoGrid)\r\n if (isOrgContext && orgSlug) {\r\n /*\r\n const { data: org } = await supabase\r\n .from('organizations')\r\n .select('id')\r\n .eq('slug', orgSlug)\r\n .single();\r\n */\r\n }\r\n\r\n const { data: postsData, error: postsError } = await query;\r\n if (postsError) throw postsError;\r\n\r\n // 2. Fetch Pages (if applicable)\r\n // Only fetch pages for home/user/org sources to keep it simple for now\r\n let pagesData: any[] = [];\r\n if (source === 'home' || source === 'user' || source === 'collection') {\r\n let pageQuery = supabase\r\n .from('pages')\r\n .select('*')\r\n .order('created_at', { ascending: false })\r\n .range(start, end);\r\n\r\n if (source === 'user' && sourceId) {\r\n pageQuery = pageQuery.eq('owner', sourceId);\r\n // If viewing someone else's profile, usually only public pages\r\n // But let's assume if sourceId is provided we might want to filter visibility\r\n // For now, let's fetch all public ones if not owner? \r\n // Logic in PageManager was: if (!isOwnProfile) eq('is_public', true).eq('visible', true)\r\n // We'll mimic strict visibility for feed:\r\n pageQuery = pageQuery.eq('is_public', true).eq('visible', true);\r\n } else if (source === 'home') {\r\n pageQuery = pageQuery.eq('is_public', true).eq('visible', true);\r\n }\r\n\r\n const { data: pages, error: pagesError } = await pageQuery;\r\n\r\n if (!pagesError && pages) {\r\n pagesData = pages;\r\n }\r\n console.log('pagesData : source', source, pagesData);\r\n } else {\r\n console.log('no pages for source', source);\r\n }\r\n\r\n // 2.5 Extract Page Images\r\n const pageImageIds: string[] = [];\r\n const pageIdToImageId = new Map<string, string>();\r\n pagesData.forEach(page => {\r\n let content = page.content;\r\n if (typeof content === 'string') {\r\n try {\r\n content = JSON.parse(content);\r\n } catch (e) {\r\n console.error(`[db] Failed to parse content for page ${page.id}`, e);\r\n return;\r\n }\r\n }\r\n\r\n // Handle new structure: { pages: { [pageId]: { containers: [] } } }\r\n let containers = content?.containers;\r\n\r\n if (!containers && content?.pages) {\r\n // Find the first page in the dictionary\r\n const firstPageKey = Object.keys(content.pages)[0];\r\n if (firstPageKey && content.pages[firstPageKey]?.containers) {\r\n containers = content.pages[firstPageKey].containers;\r\n // console.log(`[db] Found containers in nested page ${firstPageKey}`);\r\n }\r\n }\r\n\r\n if (!containers) {\r\n\r\n return;\r\n }\r\n\r\n // Find first photo-card\r\n for (const container of containers) {\r\n if (container.widgets) {\r\n const photoWidget = container.widgets.find((w: any) => w.widgetId === 'photo-card' && w.props?.pictureId);\r\n if (photoWidget) {\r\n const picId = photoWidget.props.pictureId;\r\n\r\n pageImageIds.push(picId);\r\n pageIdToImageId.set(page.id, picId);\r\n break; // Found first image for this page\r\n }\r\n }\r\n }\r\n });\r\n\r\n const pageImages = new Map<string, string>();\r\n if (pageImageIds.length > 0) {\r\n const { data: pics } = await supabase\r\n .from('pictures')\r\n .select('id, image_url')\r\n .in('id', pageImageIds);\r\n\r\n pics?.forEach(p => pageImages.set(p.id, p.image_url));\r\n }\r\n\r\n // 3. Process Posts (existing logic)\r\n const rootIds = new Set<string>();\r\n const postCandidates = new Map<string, any>();\r\n\r\n (postsData as any[] || []).forEach((post) => {\r\n const pics = post.pictures as any[] || [];\r\n const validPics = pics.filter(p => p.visible !== false);\r\n validPics.sort((a, b) => (a.position || 0) - (b.position || 0));\r\n\r\n const cover = validPics[0];\r\n if (cover) {\r\n postCandidates.set(post.id, cover);\r\n rootIds.add(cover.parent_id || cover.id);\r\n }\r\n });\r\n\r\n // 4. Fetch overrides\r\n let selectedVersions: any[] = [];\r\n if (rootIds.size > 0) {\r\n selectedVersions = await fetchSelectedVersions(Array.from(rootIds), supabase); // Pass supabase client\r\n }\r\n\r\n // 5. Transform Posts\r\n const transformedPosts: FeedPost[] = (postsData as any[] || [])\r\n .map((post) => {\r\n let coverPic = postCandidates.get(post.id);\r\n\r\n // Handle Link Posts (no pictures but has link settings)\r\n if (!coverPic) {\r\n const settings = (post.settings as any) || {};\r\n if (settings && settings.link) {\r\n // Create virtual picture for link post\r\n coverPic = {\r\n id: post.id,\r\n picture_id: post.id,\r\n title: post.title,\r\n description: post.description,\r\n image_url: settings.image_url || 'https://picsum.photos/seed/' + post.id + '/600/400', // Fallback or use settings image\r\n thumbnail_url: settings.thumbnail_url || null,\r\n type: 'page-external',\r\n meta: { url: settings.link },\r\n created_at: post.created_at,\r\n user_id: post.user_id,\r\n likes_count: 0,\r\n comments: [{ count: 0 }],\r\n visible: true,\r\n is_selected: false,\r\n position: 0\r\n };\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n const rootId = coverPic.parent_id || coverPic.id;\r\n const selected = selectedVersions?.find((v: any) =>\r\n (v.id === rootId || v.parent_id === rootId) && v.is_selected\r\n );\r\n\r\n if (selected && selected.id !== coverPic.id) {\r\n coverPic = selected;\r\n }\r\n\r\n const pics = post.pictures as any[] || [];\r\n const validPics = pics.filter(p => p.visible !== false)\r\n .sort((a, b) => (a.position || 0) - (b.position || 0));\r\n\r\n return {\r\n id: post.id,\r\n title: post.title,\r\n description: post.description,\r\n created_at: post.created_at,\r\n user_id: post.user_id,\r\n pictures: validPics,\r\n cover: coverPic,\r\n likes_count: validPics.reduce((sum, p) => sum + (p.likes_count || 0), 0),\r\n comments_count: 0,\r\n type: coverPic.type as MediaType,\r\n };\r\n })\r\n .filter((item) => item !== null) as FeedPost[];\r\n\r\n // 6. Transform Pages\r\n // We treat Pages as FeedPosts with a single \"virtual\" picture of type 'page-intern'\r\n const transformedPages: FeedPost[] = pagesData.map(page => {\r\n // Resolve mage\r\n let displayImage = \"https://picsum.photos/640\"; // Fallback\r\n const requiredPicId = pageIdToImageId.get(page.id);\r\n if (requiredPicId) {\r\n const foundUrl = pageImages.get(requiredPicId);\r\n if (foundUrl) displayImage = foundUrl;\r\n }\r\n\r\n\r\n // Virtual picture for the page\r\n const virtualPic: any = {\r\n id: page.id, // Use page ID as picture ID in grid context? Or make a virtual one? \r\n // Using page ID is risky if IDs collide, but UUIDs shouldn't.\r\n image_url: displayImage,\r\n thumbnail_url: null,\r\n type: 'page-intern',\r\n meta: { slug: page.slug }, // Store slug in meta for easy access\r\n description: null,\r\n likes_count: 0,\r\n visible: true,\r\n is_selected: false,\r\n position: 0,\r\n created_at: page.created_at,\r\n title: page.title\r\n };\r\n\r\n return {\r\n id: page.id,\r\n title: page.title,\r\n description: null, // Could parse content?\r\n created_at: page.created_at,\r\n user_id: page.owner,\r\n pictures: [virtualPic],\r\n cover: virtualPic,\r\n likes_count: 0,\r\n comments_count: 0,\r\n type: 'page-intern' as MediaType,\r\n };\r\n });\r\n\r\n // 7. Merge and Sort\r\n const allItems = [...transformedPosts, ...transformedPages];\r\n allItems.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());\r\n\r\n return allItems;\r\n};\r\n\r\n// Map FeedPost[] back to MediaItemType[] for backward compatibility w/ PhotoGrid\r\nexport const mapFeedPostsToMediaItems = (posts: FeedPost[], sortBy: 'latest' | 'top' = 'latest'): any[] => {\r\n return posts.map(post => {\r\n let cover = post.cover;\r\n\r\n // Select cover based on sort mode\r\n if (post.pictures && post.pictures.length > 0) {\r\n const validPics = post.pictures.filter((p: any) => p.visible !== false);\r\n\r\n if (validPics.length > 0) {\r\n if (sortBy === 'latest') {\r\n // For \"Latest\" mode: Show the newest picture (by created_at)\r\n cover = validPics.reduce((newest, current) => {\r\n const newestDate = new Date(newest.created_at || post.created_at).getTime();\r\n const currentDate = new Date(current.created_at || post.created_at).getTime();\r\n return currentDate > newestDate ? current : newest;\r\n });\r\n } else {\r\n // For \"Top\" or default: Use first by position (existing behavior)\r\n const sortedByPosition = [...validPics].sort((a, b) => (a.position || 0) - (b.position || 0));\r\n cover = sortedByPosition[0];\r\n }\r\n } else {\r\n cover = post.pictures[0]; // Fallback to any picture\r\n }\r\n }\r\n\r\n if (!cover) return null;\r\n return {\r\n id: post.id,\r\n picture_id: cover.id,\r\n title: post.title,\r\n description: post.description,\r\n image_url: cover.image_url,\r\n thumbnail_url: cover.thumbnail_url,\r\n type: cover.type as MediaType,\r\n meta: cover.meta,\r\n created_at: post.created_at,\r\n user_id: post.user_id,\r\n likes_count: post.likes_count,\r\n comments: [{ count: post.comments_count }],\r\n responsive: (cover as any).responsive,\r\n job: (cover as any).job,\r\n // author_profile must be populated externally\r\n };\r\n }).filter(item => item !== null);\r\n};\r\n\r\n// Augment posts if they come from API/Hydration (missing cover/author_profile)\r\nexport const augmentFeedPosts = (posts: any[]): FeedPost[] => {\r\n return posts.map(p => {\r\n // Check if we need to augment (heuristic: missing cover)\r\n if (!p.cover) {\r\n const pics = p.pictures || [];\r\n const validPics = pics.filter((pic: any) => pic.visible !== false)\r\n .sort((a: any, b: any) => (a.position || 0) - (b.position || 0));\r\n\r\n return {\r\n ...p,\r\n cover: validPics[0] || pics[0], // fallback to first if none visible?\r\n author_profile: p.author ? {\r\n user_id: p.author.user_id,\r\n username: p.author.username,\r\n display_name: p.author.display_name,\r\n avatar_url: p.author.avatar_url\r\n } : undefined\r\n };\r\n }\r\n return p;\r\n });\r\n};\r\n","// packages/react/compose-refs/src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\nfunction composeRefs(...refs) {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\nfunction useComposedRefs(...refs) {\n return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n composeRefs,\n useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\nvar REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nvar use = React[\" use \".trim().toString()];\nfunction isPromiseLike(value) {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\nfunction isLazyComponent(element) {\n return element != null && typeof element === \"object\" && \"$$typeof\" in element && element.$$typeof === REACT_LAZY_TYPE && \"_payload\" in element && isPromiseLike(element._payload);\n}\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift();\n }\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n const conflicts = conflictingClassGroups[classGroupId] || [];\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n }\n return conflicts;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[0];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart;\n }\n if (classPartObject.validators.length === 0) {\n return undefined;\n }\n const classRest = classParts.join(CLASS_PART_SEPARATOR);\n return classPartObject.validators.find(({\n validator\n }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property;\n }\n }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n prefix\n } = config;\n const classMap = {\n nextPart: new Map(),\n validators: []\n };\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme);\n });\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n classGroup.forEach(classDefinition => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n return;\n }\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId\n });\n return;\n }\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n });\n });\n};\nconst getPart = (classPartObject, path) => {\n let currentClassPartObject = classPartObject;\n path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: []\n });\n }\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n });\n return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\nconst getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {\n if (!prefix) {\n return classGroupEntries;\n }\n return classGroupEntries.map(([classGroupId, classGroup]) => {\n const prefixedClassGroup = classGroup.map(classDefinition => {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition;\n }\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));\n }\n return classDefinition;\n });\n return [classGroupId, prefixedClassGroup];\n });\n};\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = new Map();\n let previousCache = new Map();\n const update = (key, value) => {\n cache.set(key, value);\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = new Map();\n }\n };\n return {\n get(key) {\n let value = cache.get(key);\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value);\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst createParseClassName = config => {\n const {\n separator,\n experimentalParseClassName\n } = config;\n const isSeparatorSingleCharacter = separator.length === 1;\n const firstSeparatorCharacter = separator[0];\n const separatorLength = separator.length;\n // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n const parseClassName = className => {\n const modifiers = [];\n let bracketDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index];\n if (bracketDepth === 0) {\n if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + separatorLength;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') {\n bracketDepth++;\n } else if (currentCharacter === ']') {\n bracketDepth--;\n }\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);\n const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n };\n };\n if (experimentalParseClassName) {\n return className => experimentalParseClassName({\n className,\n parseClassName\n });\n }\n return parseClassName;\n};\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst sortModifiers = modifiers => {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n const sortedModifiers = [];\n let unsortedModifiers = [];\n modifiers.forEach(modifier => {\n const isArbitraryVariant = modifier[0] === '[';\n if (isArbitraryVariant) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n unsortedModifiers = [];\n } else {\n unsortedModifiers.push(modifier);\n }\n });\n sortedModifiers.push(...unsortedModifiers.sort());\n return sortedModifiers;\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition);\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n const variantModifier = sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < arguments.length) {\n if (argument = arguments[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n}\nconst toValue = mix => {\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall = initTailwindMerge;\n function initTailwindMerge(classList) {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n }\n function tailwindMerge(classList) {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n }\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments));\n };\n}\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || [];\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly);\nconst isNumber = value => Boolean(value) && !Number.isNaN(Number(value));\nconst isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber);\nconst isInteger = value => Boolean(value) && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);\nconst isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever);\nconst imageLabels = /*#__PURE__*/new Set(['image', 'url']);\nconst isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow);\nconst isAny = () => true;\nconst getIsArbitraryValue = (value, label, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return typeof label === 'string' ? result[1] === label : label.has(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isInteger,\n isLength,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n const colors = fromTheme('colors');\n const spacing = fromTheme('spacing');\n const blur = fromTheme('blur');\n const brightness = fromTheme('brightness');\n const borderColor = fromTheme('borderColor');\n const borderRadius = fromTheme('borderRadius');\n const borderSpacing = fromTheme('borderSpacing');\n const borderWidth = fromTheme('borderWidth');\n const contrast = fromTheme('contrast');\n const grayscale = fromTheme('grayscale');\n const hueRotate = fromTheme('hueRotate');\n const invert = fromTheme('invert');\n const gap = fromTheme('gap');\n const gradientColorStops = fromTheme('gradientColorStops');\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions');\n const inset = fromTheme('inset');\n const margin = fromTheme('margin');\n const opacity = fromTheme('opacity');\n const padding = fromTheme('padding');\n const saturate = fromTheme('saturate');\n const scale = fromTheme('scale');\n const sepia = fromTheme('sepia');\n const skew = fromTheme('skew');\n const space = fromTheme('space');\n const translate = fromTheme('translate');\n const getOverscroll = () => ['auto', 'contain', 'none'];\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing];\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength];\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue];\n const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'];\n const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue];\n const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];\n return {\n cacheSize: 500,\n separator: ':',\n theme: {\n colors: [isAny],\n spacing: [isLength, isArbitraryLength],\n blur: ['none', '', isTshirtSize, isArbitraryValue],\n brightness: getNumberAndArbitrary(),\n borderColor: [colors],\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n borderSpacing: getSpacingWithArbitrary(),\n borderWidth: getLengthWithEmptyAndArbitrary(),\n contrast: getNumberAndArbitrary(),\n grayscale: getZeroAndEmpty(),\n hueRotate: getNumberAndArbitrary(),\n invert: getZeroAndEmpty(),\n gap: getSpacingWithArbitrary(),\n gradientColorStops: [colors],\n gradientColorStopPositions: [isPercent, isArbitraryLength],\n inset: getSpacingWithAutoAndArbitrary(),\n margin: getSpacingWithAutoAndArbitrary(),\n opacity: getNumberAndArbitrary(),\n padding: getSpacingWithArbitrary(),\n saturate: getNumberAndArbitrary(),\n scale: getNumberAndArbitrary(),\n sepia: getZeroAndEmpty(),\n skew: getNumberAndArbitrary(),\n space: getSpacingWithArbitrary(),\n translate: getSpacingWithArbitrary()\n },\n classGroups: {\n // Layout\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', 'video', isArbitraryValue]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isTshirtSize]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': getBreaks()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': getBreaks()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: [...getPositions(), isArbitraryValue]\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: getOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': getOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': getOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: getOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': getOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': getOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: [inset]\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': [inset]\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': [inset]\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: [inset]\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: [inset]\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: [inset]\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: [inset]\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: [inset]\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: [inset]\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: ['auto', isInteger, isArbitraryValue]\n }],\n // Flexbox and Grid\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: getSpacingWithAutoAndArbitrary()\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['wrap', 'wrap-reverse', 'nowrap']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: getZeroAndEmpty()\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: getZeroAndEmpty()\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: ['first', 'last', 'none', isInteger, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': [isAny]\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: ['auto', {\n span: ['full', isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': [isAny]\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: ['auto', {\n span: [isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: [gap]\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': [gap]\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': [gap]\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: ['normal', ...getAlign()]\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': ['start', 'end', 'center', 'stretch']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...getAlign(), 'baseline']\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': [...getAlign(), 'baseline']\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: [padding]\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: [padding]\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: [padding]\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: [padding]\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: [padding]\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: [padding]\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: [padding]\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: [padding]\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: [padding]\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: [margin]\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: [margin]\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: [margin]\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: [margin]\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: [margin]\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: [margin]\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: [margin]\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: [margin]\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: [margin]\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x': [{\n 'space-x': [space]\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y': [{\n 'space-y': [space]\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y-reverse': ['space-y-reverse'],\n // Sizing\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit']\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', {\n screen: [isTshirtSize]\n }, isTshirtSize]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Size\n * @see https://tailwindcss.com/docs/size\n */\n size: [{\n size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']\n }],\n // Typography\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', isTshirtSize, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isAny]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': ['none', isNumber, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryValue]\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['none', 'disc', 'decimal', isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: [colors]\n }],\n /**\n * Placeholder Opacity\n * @see https://tailwindcss.com/docs/placeholder-opacity\n */\n 'placeholder-opacity': [{\n 'placeholder-opacity': [opacity]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: [colors]\n }],\n /**\n * Text Opacity\n * @see https://tailwindcss.com/docs/text-opacity\n */\n 'text-opacity': [{\n 'text-opacity': [opacity]\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...getLineStyles(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: ['auto', 'from-font', isLength, isArbitraryLength]\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': ['auto', isLength, isArbitraryValue]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: [colors]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: getSpacingWithArbitrary()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryValue]\n }],\n // Backgrounds\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Opacity\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/background-opacity\n */\n 'bg-opacity': [{\n 'bg-opacity': [opacity]\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: [...getPositions(), isArbitraryPosition]\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: ['no-repeat', {\n repeat: ['', 'x', 'y', 'round', 'space']\n }]\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: ['auto', 'cover', 'contain', isArbitrarySize]\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: [colors]\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: [gradientColorStops]\n }],\n // Borders\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: [borderRadius]\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': [borderRadius]\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': [borderRadius]\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': [borderRadius]\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': [borderRadius]\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': [borderRadius]\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': [borderRadius]\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': [borderRadius]\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': [borderRadius]\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': [borderRadius]\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': [borderRadius]\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': [borderRadius]\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': [borderRadius]\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': [borderRadius]\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': [borderRadius]\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: [borderWidth]\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': [borderWidth]\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': [borderWidth]\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': [borderWidth]\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': [borderWidth]\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': [borderWidth]\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': [borderWidth]\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': [borderWidth]\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': [borderWidth]\n }],\n /**\n * Border Opacity\n * @see https://tailwindcss.com/docs/border-opacity\n */\n 'border-opacity': [{\n 'border-opacity': [opacity]\n }],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...getLineStyles(), 'hidden']\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x': [{\n 'divide-x': [borderWidth]\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y': [{\n 'divide-y': [borderWidth]\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Divide Opacity\n * @see https://tailwindcss.com/docs/divide-opacity\n */\n 'divide-opacity': [{\n 'divide-opacity': [opacity]\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/divide-style\n */\n 'divide-style': [{\n divide: getLineStyles()\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: [borderColor]\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': [borderColor]\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': [borderColor]\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': [borderColor]\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': [borderColor]\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': [borderColor]\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': [borderColor]\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': [borderColor]\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': [borderColor]\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: [borderColor]\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: ['', ...getLineStyles()]\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isLength, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: [isLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: [colors]\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w': [{\n ring: getLengthWithEmptyAndArbitrary()\n }],\n /**\n * Ring Width Inset\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/ring-color\n */\n 'ring-color': [{\n ring: [colors]\n }],\n /**\n * Ring Opacity\n * @see https://tailwindcss.com/docs/ring-opacity\n */\n 'ring-opacity': [{\n 'ring-opacity': [opacity]\n }],\n /**\n * Ring Offset Width\n * @see https://tailwindcss.com/docs/ring-offset-width\n */\n 'ring-offset-w': [{\n 'ring-offset': [isLength, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://tailwindcss.com/docs/ring-offset-color\n */\n 'ring-offset-color': [{\n 'ring-offset': [colors]\n }],\n // Effects\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow-color\n */\n 'shadow-color': [{\n shadow: [isAny]\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [opacity]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': getBlendModes()\n }],\n // Filters\n /**\n * Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: ['', 'none']\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: [blur]\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [brightness]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [contrast]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: [grayscale]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [hueRotate]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: [invert]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [saturate]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: [sepia]\n }],\n /**\n * Backdrop Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': ['', 'none']\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': [blur]\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [brightness]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [contrast]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': [grayscale]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [hueRotate]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': [invert]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [opacity]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [saturate]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': [sepia]\n }],\n // Tables\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': [borderSpacing]\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': [borderSpacing]\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': [borderSpacing]\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // Transitions and Animation\n /**\n * Tranisition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: getNumberAndArbitrary()\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: getNumberAndArbitrary()\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]\n }],\n // Transforms\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: ['', 'gpu', 'none']\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: [scale]\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': [scale]\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': [scale]\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: [isInteger, isArbitraryValue]\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': [translate]\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': [translate]\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': [skew]\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': [skew]\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]\n }],\n // Interactivity\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: ['auto', colors]\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue]\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: [colors]\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['none', 'auto']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', 'y', 'x', '']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]\n }],\n // SVG\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: [colors, 'none']\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: [colors, 'none']\n }],\n // Accessibility\n /**\n * Screen Readers\n * @see https://tailwindcss.com/docs/screen-readers\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n }\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n separator,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'separator', separator);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n for (const configKey in override) {\n overrideConfigProperties(baseConfig[configKey], override[configKey]);\n }\n for (const key in extend) {\n mergeConfigProperties(baseConfig[key], extend[key]);\n }\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = (baseObject[key] || []).concat(mergeValue);\n }\n }\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return <Comp className={cn(buttonVariants({ variant, size, className }))} ref={ref} {...props} />;\n },\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import { createContext, useContext, useEffect, useState } from 'react';\nimport { User, Session } from '@supabase/supabase-js';\nimport { supabase } from '@/integrations/supabase/client';\nimport { useToast } from '@/hooks/use-toast';\nimport * as db from '@/pages/Post/db';\n\ninterface AuthContextType {\n user: User | null;\n session: Session | null;\n roles: string[];\n loading: boolean;\n signUp: (email: string, password: string, username: string, displayName: string) => Promise<{ data: any; error: any }>;\n signIn: (email: string, password: string) => Promise<{ error: any }>;\n signInWithGithub: () => Promise<{ error: any }>;\n signInWithGoogle: () => Promise<{ error: any }>;\n signOut: () => Promise<void>;\n}\n\nconst AuthContext = createContext<AuthContextType | undefined>(undefined);\n\nexport const AuthProvider = ({ children }: { children: React.ReactNode }) => {\n const [user, setUser] = useState<User | null>(null);\n const [session, setSession] = useState<Session | null>(null);\n const [roles, setRoles] = useState<string[]>([]);\n const [loading, setLoading] = useState(true);\n const { toast } = useToast();\n\n useEffect(() => {\n setLoading(true);\n supabase.auth.getSession().then(({ data: { session } }) => {\n setSession(session);\n setUser(session?.user ?? null);\n setLoading(false);\n });\n\n const { data: { subscription } } = supabase.auth.onAuthStateChange(\n (_event, session) => {\n setSession(session);\n setUser(session?.user ?? null);\n }\n );\n\n return () => subscription.unsubscribe();\n }, []);\n\n useEffect(() => {\n let mounted = true;\n\n const loadRoles = async () => {\n if (user) {\n try {\n const roles = await db.fetchUserRoles(user.id);\n if (mounted) setRoles(roles);\n } catch (error) {\n console.error('Error fetching user roles:', error);\n if (mounted) setRoles([]);\n }\n } else {\n if (mounted) setRoles([]);\n }\n };\n\n loadRoles();\n\n return () => {\n mounted = false;\n };\n }, [user]);\n\n const signUp = async (email: string, password: string, username: string, displayName: string) => {\n const redirectUrl = `${window.location.origin}/`;\n\n const { data, error } = await supabase.auth.signUp({\n email,\n password,\n options: {\n emailRedirectTo: redirectUrl,\n data: {\n username,\n display_name: displayName\n }\n }\n });\n\n if (error) {\n toast({\n title: \"Sign up failed\",\n description: error.message,\n variant: \"destructive\",\n });\n } else {\n toast({\n title: \"Check your email\",\n description: \"Please check your email to confirm your account.\",\n });\n }\n\n return { data, error };\n };\n\n const signIn = async (email: string, password: string) => {\n const { error } = await supabase.auth.signInWithPassword({\n email,\n password,\n });\n\n if (error) {\n toast({\n title: \"Sign in failed\",\n description: error.message,\n variant: \"destructive\",\n });\n }\n\n return { error };\n };\n\n const signInWithGithub = async () => {\n const { error } = await supabase.auth.signInWithOAuth({\n provider: 'github',\n options: {\n redirectTo: `${window.location.origin}/`\n }\n });\n\n if (error) {\n toast({\n title: \"Sign in failed\",\n description: error.message,\n variant: \"destructive\",\n });\n }\n\n return { error };\n };\n\n const signInWithGoogle = async () => {\n const redirectTo = `${window.location.origin}/`;\n const { error } = await supabase.auth.signInWithOAuth({\n provider: 'google',\n options: {\n redirectTo\n }\n });\n\n if (error) {\n toast({\n title: \"Sign in failed\",\n description: error.message,\n variant: \"destructive\",\n });\n }\n\n return { error };\n };\n\n const signOut = async () => {\n const { error } = await supabase.auth.signOut();\n\n debugger\n\n if (error) {\n toast({\n title: \"Sign out failed\",\n description: error.message,\n variant: \"destructive\",\n });\n return;\n }\n\n setUser(null);\n setSession(null);\n setRoles([]);\n };\n\n return (\n <AuthContext.Provider value={{\n user,\n session,\n roles,\n loading,\n signUp,\n signIn,\n signInWithGithub,\n signInWithGoogle,\n signOut,\n }}>\n {children}\n </AuthContext.Provider>\n );\n};\n\nexport const useAuth = () => {\n const context = useContext(AuthContext);\n if (context === undefined) {\n throw new Error('useAuth must be used within an AuthProvider');\n }\n return context;\n};","/**\n * marked v16.4.2 - a markdown parser\n * Copyright (c) 2018-2025, MarkedJS. (MIT License)\n * Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var T=L();function G(l){T=l}var E={exec:()=>null};function d(l,e=\"\"){let t=typeof l==\"string\"?l:l.source,n={replace:(r,i)=>{let s=typeof i==\"string\"?i:i.source;return s=s.replace(m.caret,\"$1\"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var be=(()=>{try{return!!new RegExp(\"(?<=1)(?<!1)\")}catch{return!1}})(),m={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,listReplaceTabs:/^\\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] /,listReplaceTask:/^\\[[ xX]\\] +/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/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,unescapeTest:/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}#`),htmlBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}<(?:[a-z].*>|!--)`,\"i\")},Re=/^(?:[ \\t]*(?:\\n|$))+/,Te=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,Oe=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,I=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,we=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,F=/(?:[*+-]|\\d{1,9}[.)])/,ie=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,oe=d(ie).replace(/bull/g,F).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(),ye=d(ie).replace(/bull/g,F).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(),j=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,Pe=/^[^\\n]+/,Q=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,Se=d(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",Q).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),$e=d(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,F).getRegex(),v=\"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\",U=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,_e=d(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",U).replace(\"tag\",v).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),ae=d(j).replace(\"hr\",I).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[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),Le=d(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",ae).getRegex(),K={blockquote:Le,code:Te,def:Se,fences:Oe,heading:we,hr:I,html:_e,lheading:oe,list:$e,newline:Re,paragraph:ae,table:E,text:Pe},re=d(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),Me={...K,lheading:ye,table:re,paragraph:d(j).replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",re).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex()},ze={...K,html:d(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",U).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:E,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:d(j).replace(\"hr\",I).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",oe).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Ae=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,Ee=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,le=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ie=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,D=/[\\p{P}\\p{S}]/u,W=/[\\s\\p{P}\\p{S}]/u,ue=/[^\\s\\p{P}\\p{S}]/u,Ce=d(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,W).getRegex(),pe=/(?!~)[\\p{P}\\p{S}]/u,Be=/(?!~)[\\s\\p{P}\\p{S}]/u,qe=/(?:[^\\s\\p{P}\\p{S}]|~)/u,ve=d(/link|precode-code|html/,\"g\").replace(\"link\",/\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/).replace(\"precode-\",be?\"(?<!`)()\":\"(^^|[^`])\").replace(\"code\",/(?<b>`+)[^`]+\\k<b>(?!`)/).replace(\"html\",/<(?! )[^<>]*?>/).getRegex(),ce=/^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/,De=d(ce,\"u\").replace(/punct/g,D).getRegex(),He=d(ce,\"u\").replace(/punct/g,pe).getRegex(),he=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",Ze=d(he,\"gu\").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Ge=d(he,\"gu\").replace(/notPunctSpace/g,qe).replace(/punctSpace/g,Be).replace(/punct/g,pe).getRegex(),Ne=d(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Fe=d(/\\\\(punct)/,\"gu\").replace(/punct/g,D).getRegex(),je=d(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Qe=d(U).replace(\"(?:-->|$)\",\"-->\").getRegex(),Ue=d(\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\").replace(\"comment\",Qe).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),q=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+[^`]*?`+(?!`)|[^\\[\\]\\\\`])*?/,Ke=d(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\",q).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),de=d(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",q).replace(\"ref\",Q).getRegex(),ke=d(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",Q).getRegex(),We=d(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",de).replace(\"nolink\",ke).getRegex(),se=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,X={_backpedal:E,anyPunctuation:Fe,autolink:je,blockSkip:ve,br:le,code:Ee,del:E,emStrongLDelim:De,emStrongRDelimAst:Ze,emStrongRDelimUnd:Ne,escape:Ae,link:Ke,nolink:ke,punctuation:Ce,reflink:de,reflinkSearch:We,tag:Ue,text:Ie,url:E},Xe={...X,link:d(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",q).getRegex(),reflink:d(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",q).getRegex()},N={...X,emStrongRDelimAst:Ge,emStrongLDelim:He,url:d(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/).replace(\"protocol\",se).replace(\"email\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:d(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/).replace(\"protocol\",se).getRegex()},Je={...N,br:d(le).replace(\"{2,}\",\"*\").getRegex(),text:d(N.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},C={normal:K,gfm:Me,pedantic:ze},M={normal:X,gfm:N,breaks:Je,pedantic:Xe};var Ve={\"&\":\"&\",\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\"},ge=l=>Ve[l];function w(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,ge)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,ge);return l}function J(l){try{l=encodeURI(l).replace(m.percentDecode,\"%\")}catch{return null}return l}function V(l,e){let t=l.replace(m.findPipe,(i,s,a)=>{let o=!1,p=s;for(;--p>=0&&a[p]===\"\\\\\";)o=!o;return o?\"|\":\" |\"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(\"\");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,\"|\");return n}function z(l,e,t){let n=l.length;if(n===0)return\"\";let r=0;for(;r<n;){let i=l.charAt(n-r-1);if(i===e&&!t)r++;else if(i!==e&&t)r++;else break}return l.slice(0,n-r)}function fe(l,e){if(l.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<l.length;n++)if(l[n]===\"\\\\\")n++;else if(l[n]===e[0])t++;else if(l[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function me(l,e,t,n,r){let i=e.href,s=e.title||null,a=l[1].replace(r.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let o={type:l[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:i,title:s,text:a,tokens:n.inlineTokens(a)};return n.state.inLink=!1,o}function Ye(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`\n`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[a]=s;return a.length>=r.length?i.slice(r.length):i}).join(`\n`)}var y=class{options;rules;lexer;constructor(e){this.options=e||T}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:z(n,`\n`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=Ye(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=z(n,\"#\");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:z(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=z(t[0],`\n`).split(`\n`),r=\"\",i=\"\",s=[];for(;n.length>0;){let a=!1,o=[],p;for(p=0;p<n.length;p++)if(this.rules.other.blockquoteStart.test(n[p]))o.push(n[p]),a=!0;else if(!a)o.push(n[p]);else break;n=n.slice(p);let u=o.join(`\n`),c=u.replace(this.rules.other.blockquoteSetextReplace,`\n $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");r=r?`${r}\n${u}`:u,i=i?`${i}\n${c}`:c;let g=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,s,!0),this.lexer.state.top=g,n.length===0)break;let h=s.at(-1);if(h?.type===\"code\")break;if(h?.type===\"blockquote\"){let R=h,f=R.raw+`\n`+n.join(`\n`),O=this.blockquote(f);s[s.length-1]=O,r=r.substring(0,r.length-R.raw.length)+O.raw,i=i.substring(0,i.length-R.text.length)+O.text;break}else if(h?.type===\"list\"){let R=h,f=R.raw+`\n`+n.join(`\n`),O=this.list(f);s[s.length-1]=O,r=r.substring(0,r.length-h.raw.length)+O.raw,i=i.substring(0,i.length-R.raw.length)+O.raw,n=f.substring(s.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:\"list\",raw:\"\",ordered:r,start:r?+n.slice(0,-1):\"\",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?n:\"[*+-]\");let s=this.rules.other.listItemRegex(n),a=!1;for(;e;){let p=!1,u=\"\",c=\"\";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;u=t[0],e=e.substring(u.length);let g=t[2].split(`\n`,1)[0].replace(this.rules.other.listReplaceTabs,H=>\" \".repeat(3*H.length)),h=e.split(`\n`,1)[0],R=!g.trim(),f=0;if(this.options.pedantic?(f=2,c=g.trimStart()):R?f=t[1].length+1:(f=t[2].search(this.rules.other.nonSpaceChar),f=f>4?1:f,c=g.slice(f),f+=t[1].length),R&&this.rules.other.blankLine.test(h)&&(u+=h+`\n`,e=e.substring(h.length+1),p=!0),!p){let H=this.rules.other.nextBulletRegex(f),ee=this.rules.other.hrRegex(f),te=this.rules.other.fencesBeginRegex(f),ne=this.rules.other.headingBeginRegex(f),xe=this.rules.other.htmlBeginRegex(f);for(;e;){let Z=e.split(`\n`,1)[0],A;if(h=Z,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting,\" \"),A=h):A=h.replace(this.rules.other.tabCharGlobal,\" \"),te.test(h)||ne.test(h)||xe.test(h)||H.test(h)||ee.test(h))break;if(A.search(this.rules.other.nonSpaceChar)>=f||!h.trim())c+=`\n`+A.slice(f);else{if(R||g.replace(this.rules.other.tabCharGlobal,\" \").search(this.rules.other.nonSpaceChar)>=4||te.test(g)||ne.test(g)||ee.test(g))break;c+=`\n`+h}!R&&!h.trim()&&(R=!0),u+=Z+`\n`,e=e.substring(Z.length+1),g=A.slice(f)}}i.loose||(a?i.loose=!0:this.rules.other.doubleBlankLine.test(u)&&(a=!0));let O=null,Y;this.options.gfm&&(O=this.rules.other.listIsTask.exec(c),O&&(Y=O[0]!==\"[ ] \",c=c.replace(this.rules.other.listReplaceTask,\"\"))),i.items.push({type:\"list_item\",raw:u,task:!!O,checked:Y,loose:!1,text:c,tokens:[]}),i.raw+=u}let o=i.items.at(-1);if(o)o.raw=o.raw.trimEnd(),o.text=o.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let p=0;p<i.items.length;p++)if(this.lexer.state.top=!1,i.items[p].tokens=this.lexer.blockTokens(i.items[p].text,[]),!i.loose){let u=i.items[p].tokens.filter(g=>g.type===\"space\"),c=u.length>0&&u.some(g=>this.rules.other.anyLine.test(g.raw));i.loose=c}if(i.loose)for(let p=0;p<i.items.length;p++)i.items[p].loose=!0;return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:\"html\",block:!0,raw:t[0],pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,\" \"),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=V(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],s={type:\"table\",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let a of r)this.rules.other.tableAlignRight.test(a)?s.align.push(\"right\"):this.rules.other.tableAlignCenter.test(a)?s.align.push(\"center\"):this.rules.other.tableAlignLeft.test(a)?s.align.push(\"left\"):s.align.push(null);for(let a=0;a<n.length;a++)s.header.push({text:n[a],tokens:this.lexer.inline(n[a]),header:!0,align:s.align[a]});for(let a of i)s.rows.push(V(a,s.header.length).map((o,p)=>({text:o,tokens:this.lexer.inline(o),header:!1,align:s.align[p]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:t[2].charAt(0)===\"=\"?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=z(n.slice(0,-1),\"\\\\\");if((n.length-s.length)%2===0)return}else{let s=fe(t[2],\"()\");if(s===-2)return;if(s>-1){let o=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,o).trim(),t[3]=\"\"}}let r=t[2],i=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),me(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:i&&i.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return me(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,a,o,p=s,u=0,c=r[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a)continue;if(o=[...a].length,r[3]||r[4]){p+=o;continue}else if((r[5]||r[6])&&s%3&&!((s+o)%3)){u+=o;continue}if(p-=o,p>0)continue;o=Math.min(o,o+p+u);let g=[...r[0]][0].length,h=e.slice(0,s+r.index+g+o);if(Math.min(s,o)%2){let f=h.slice(1,-1);return{type:\"em\",raw:h,text:f,tokens:this.lexer.inlineTokens(f)}}let R=h.slice(2,-2);return{type:\"strong\",raw:h,text:R,tokens:this.lexer.inlineTokens(R)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:\"del\",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]===\"@\"?(n=t[1],r=\"mailto:\"+n):(n=t[1],r=n),{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]===\"@\")n=t[0],r=\"mailto:\"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(i!==t[0]);n=t[0],t[1]===\"www.\"?r=\"http://\"+t[0]:r=t[0]}return{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var x=class l{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||T,this.options.tokenizer=this.options.tokenizer||new y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:C.normal,inline:M.normal};this.options.pedantic?(t.block=C.pedantic,t.inline=M.pedantic):this.options.gfm&&(t.block=C.gfm,this.options.breaks?t.inline=M.breaks:t.inline=M.gfm),this.tokenizer.rules=t}static get rules(){return{block:C,inline:M}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.options.pedantic&&(e=e.replace(m.tabCharGlobal,\" \").replace(m.spaceLine,\"\"));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,a=e.slice(1),o;this.options.extensions.startBlock.forEach(p=>{o=p.call({lexer:this},a),typeof o==\"number\"&&o>=0&&(s=Math.min(s,o))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+\"[\"+\"a\".repeat(r[0].length-i-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let s=!1,a=\"\";for(;e;){s||(a=\"\"),s=!1;let o;if(this.options.extensions?.inline?.some(u=>(o=u.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let u=t.at(-1);o.type===\"text\"&&u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,a)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let p=e;if(this.options.extensions?.startInline){let u=1/0,c=e.slice(1),g;this.options.extensions.startInline.forEach(h=>{g=h.call({lexer:this},c),typeof g==\"number\"&&g>=0&&(u=Math.min(u,g))}),u<1/0&&u>=0&&(p=e.substring(0,u+1))}if(o=this.tokenizer.inlineText(p)){e=e.substring(o.raw.length),o.raw.slice(-1)!==\"_\"&&(a=o.raw.slice(-1)),s=!0;let u=t.at(-1);u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(e){let u=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(u);break}else throw new Error(u)}}return t}};var P=class{options;parser;constructor(e){this.options=e||T}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let r=(t||\"\").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,\"\")+`\n`;return r?'<pre><code class=\"language-'+w(r)+'\">'+(n?i:w(i,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?i:w(i,!0))+`</code></pre>\n`}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}def(e){return\"\"}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\n`}hr(e){return`<hr>\n`}list(e){let t=e.ordered,n=e.start,r=\"\";for(let a=0;a<e.items.length;a++){let o=e.items[a];r+=this.listitem(o)}let i=t?\"ol\":\"ul\",s=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+i+s+`>\n`+r+\"</\"+i+`>\n`}listitem(e){let t=\"\";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type===\"paragraph\"?(e.tokens[0].text=n+\" \"+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type===\"text\"&&(e.tokens[0].tokens[0].text=n+\" \"+w(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:\"text\",raw:n+\" \",text:n+\" \",escaped:!0}):t+=n+\" \"}return t+=this.parser.parse(e.tokens,!!e.loose),`<li>${t}</li>\n`}checkbox({checked:e}){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\">'}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\n`}table(e){let t=\"\",n=\"\";for(let i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let r=\"\";for(let i=0;i<e.rows.length;i++){let s=e.rows[i];n=\"\";for(let a=0;a<s.length;a++)n+=this.tablecell(s[a]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+r+`</table>\n`}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${w(e,!0)}</code>`}br(e){return\"<br>\"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=J(e);if(i===null)return r;e=i;let s='<a href=\"'+e+'\"';return t&&(s+=' title=\"'+w(t)+'\"'),s+=\">\"+r+\"</a>\",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=J(e);if(i===null)return w(n);e=i;let s=`<img src=\"${e}\" alt=\"${n}\"`;return t&&(s+=` title=\"${w(t)}\"`),s+=\">\",s}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:w(e.text)}};var $=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}};var b=class l{options;renderer;textRenderer;constructor(e){this.options=e||T,this.options.renderer=this.options.renderer||new P,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new $}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e,t=!0){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let a=i,o=this.options.extensions.renderers[a.type].call({parser:this},a);if(o!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"def\",\"paragraph\",\"text\"].includes(a.type)){n+=o||\"\";continue}}let s=i;switch(s.type){case\"space\":{n+=this.renderer.space(s);continue}case\"hr\":{n+=this.renderer.hr(s);continue}case\"heading\":{n+=this.renderer.heading(s);continue}case\"code\":{n+=this.renderer.code(s);continue}case\"table\":{n+=this.renderer.table(s);continue}case\"blockquote\":{n+=this.renderer.blockquote(s);continue}case\"list\":{n+=this.renderer.list(s);continue}case\"html\":{n+=this.renderer.html(s);continue}case\"def\":{n+=this.renderer.def(s);continue}case\"paragraph\":{n+=this.renderer.paragraph(s);continue}case\"text\":{let a=s,o=this.renderer.text(a);for(;r+1<e.length&&e[r+1].type===\"text\";)a=e[++r],o+=`\n`+this.renderer.text(a);t?n+=this.renderer.paragraph({type:\"paragraph\",raw:o,text:o,tokens:[{type:\"text\",raw:o,text:o,escaped:!0}]}):n+=o;continue}default:{let a='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(a),\"\";throw new Error(a)}}}return n}parseInline(e,t=this.renderer){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let a=this.options.extensions.renderers[i.type].call({parser:this},i);if(a!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(i.type)){n+=a||\"\";continue}}let s=i;switch(s.type){case\"escape\":{n+=t.text(s);break}case\"html\":{n+=t.html(s);break}case\"link\":{n+=t.link(s);break}case\"image\":{n+=t.image(s);break}case\"strong\":{n+=t.strong(s);break}case\"em\":{n+=t.em(s);break}case\"codespan\":{n+=t.codespan(s);break}case\"br\":{n+=t.br(s);break}case\"del\":{n+=t.del(s);break}case\"text\":{n+=t.text(s);break}default:{let a='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(a),\"\";throw new Error(a)}}}return n}};var S=class{options;block;constructor(e){this.options=e||T}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\",\"emStrongMask\"]);static passThroughHooksRespectAsync=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?x.lex:x.lexInline}provideParser(){return this.block?b.parse:b.parseInline}};var B=class{defaults=L();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=b;Renderer=P;TextRenderer=$;Lexer=x;Tokenizer=y;Hooks=S;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case\"table\":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let a of s)n=n.concat(this.walkTokens(a.tokens,t));break}case\"list\":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let a=i[s].flat(1/0);n=n.concat(this.walkTokens(a,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error(\"extension name required\");if(\"renderer\"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...a){let o=i.renderer.apply(this,a);return o===!1&&(o=s.apply(this,a)),o}:t.renderers[i.name]=i.renderer}if(\"tokenizer\"in i){if(!i.level||i.level!==\"block\"&&i.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level===\"block\"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level===\"inline\"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}\"childTokens\"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new P(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if([\"options\",\"parser\"].includes(s))continue;let a=s,o=n.renderer[a],p=i[a];i[a]=(...u)=>{let c=o.apply(i,u);return c===!1&&(c=p.apply(i,u)),c||\"\"}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new y(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(s))continue;let a=s,o=n.tokenizer[a],p=i[a];i[a]=(...u)=>{let c=o.apply(i,u);return c===!1&&(c=p.apply(i,u)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new S;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if([\"options\",\"block\"].includes(s))continue;let a=s,o=n.hooks[a],p=i[a];S.passThroughHooks.has(s)?i[a]=u=>{if(this.defaults.async&&S.passThroughHooksRespectAsync.has(s))return(async()=>{let g=await o.call(i,u);return p.call(i,g)})();let c=o.call(i,u);return p.call(i,c)}:i[a]=(...u)=>{if(this.defaults.async)return(async()=>{let g=await o.apply(i,u);return g===!1&&(g=await p.apply(i,u)),g})();let c=o.apply(i,u);return c===!1&&(c=p.apply(i,u)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(a){let o=[];return o.push(s.call(this,a)),i&&(o=o.concat(i.call(this,a))),o}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return x.lex(e,t??this.defaults)}parser(e,t){return b.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},a=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return a(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return a(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return a(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));if(s.hooks&&(s.hooks.options=s,s.hooks.block=e),s.async)return(async()=>{let o=s.hooks?await s.hooks.preprocess(n):n,u=await(s.hooks?await s.hooks.provideLexer():e?x.lex:x.lexInline)(o,s),c=s.hooks?await s.hooks.processAllTokens(u):u;s.walkTokens&&await Promise.all(this.walkTokens(c,s.walkTokens));let h=await(s.hooks?await s.hooks.provideParser():e?b.parse:b.parseInline)(c,s);return s.hooks?await s.hooks.postprocess(h):h})().catch(a);try{s.hooks&&(n=s.hooks.preprocess(n));let p=(s.hooks?s.hooks.provideLexer():e?x.lex:x.lexInline)(n,s);s.hooks&&(p=s.hooks.processAllTokens(p)),s.walkTokens&&this.walkTokens(p,s.walkTokens);let c=(s.hooks?s.hooks.provideParser():e?b.parse:b.parseInline)(p,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(o){return a(o)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let r=\"<p>An error occurred:</p><pre>\"+w(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var _=new B;function k(l,e){return _.parse(l,e)}k.options=k.setOptions=function(l){return _.setOptions(l),k.defaults=_.defaults,G(k.defaults),k};k.getDefaults=L;k.defaults=T;k.use=function(...l){return _.use(...l),k.defaults=_.defaults,G(k.defaults),k};k.walkTokens=function(l,e){return _.walkTokens(l,e)};k.parseInline=_.parseInline;k.Parser=b;k.parser=b.parse;k.Renderer=P;k.TextRenderer=$;k.Lexer=x;k.lexer=x.lex;k.Tokenizer=y;k.Hooks=S;k.parse=k;var Zt=k.options,Gt=k.setOptions,Nt=k.use,Ft=k.walkTokens,jt=k.parseInline,Qt=k,Ut=b.parse,Kt=x.lex;export{S as Hooks,x as Lexer,B as Marked,b as Parser,P as Renderer,$ as TextRenderer,y as Tokenizer,T as defaults,L as getDefaults,Kt as lexer,k as marked,Zt as options,Qt as parse,jt as parseInline,Ut as parser,Gt as setOptions,Nt as use,Ft as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\n","/*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE */\n\nconst {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n} = Object;\nlet {\n freeze,\n seal,\n create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n apply,\n construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n}\nif (!seal) {\n seal = function seal(x) {\n return x;\n };\n}\nif (!apply) {\n apply = function apply(func, thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n return func.apply(thisArg, args);\n };\n}\nif (!construct) {\n construct = function construct(Func) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n return new Func(...args);\n };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n return function (thisArg) {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return apply(func, thisArg, args);\n };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(Func) {\n return function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return construct(Func, args);\n };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'search', 'section', 'select', 'shadow', 'slot', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'enterkeyhint', 'exportparts', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'inputmode', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'part', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'mask-type', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ARIA_ATTR: ARIA_ATTR,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n DATA_ATTR: DATA_ATTR,\n DOCTYPE_NAME: DOCTYPE_NAME,\n ERB_EXPR: ERB_EXPR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\nconst _createHooksMap = function _createHooksMap() {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: []\n };\n};\nfunction createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n DOMPurify.version = '3.3.1';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = _createHooksMap();\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n tagCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n }\n }));\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n /* Decide if document with <html>... should be returned */\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (typeof cfg.ADD_TAGS === 'function') {\n EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n } else {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n }\n if (cfg.ADD_ATTR) {\n if (typeof cfg.ADD_ATTR === 'function') {\n EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n } else {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n if (cfg.ADD_FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either <annotation-xml> or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, element) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element\n });\n }\n element.removeAttribute(name);\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n * _isClobbered\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(element) {\n return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n };\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param value object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n const _isNode = function _isNode(value) {\n return typeof Node === 'function' && value instanceof Node;\n };\n function _executeHooks(hooks, currentNode, data) {\n arrayForEach(hooks, hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */\n if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\\w!]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */\n if (!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n const {\n attributes\n } = currentNode;\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined\n };\n let l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title|textarea)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n if (lcName === 'attributename' && stringMatch(value, 'href')) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */\n DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n return arrayPop(hooks[entryPoint]);\n };\n DOMPurify.removeHooks = function (entryPoint) {\n hooks[entryPoint] = [];\n };\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import { z } from 'zod';\n\n// Tag validation schema\nexport const tagSchema = z.string()\n .min(1, 'Tag cannot be empty')\n .max(50, 'Tag must be less than 50 characters')\n .regex(/^[a-zA-Z0-9_]+$/, 'Tag can only contain letters, numbers, and underscores');\n\n/**\n * Extract hashtags from text content\n * @param content - Text content to parse\n * @returns Array of unique tags (without # symbol)\n */\nexport function extractHashtags(content: string): string[] {\n if (!content) return [];\n \n const hashtagRegex = /#([a-zA-Z0-9_]+)/g;\n const matches = content.match(hashtagRegex) || [];\n \n // Remove # symbol and deduplicate\n const tags = matches\n .map(tag => tag.substring(1))\n .filter(tag => {\n try {\n tagSchema.parse(tag);\n return true;\n } catch {\n return false;\n }\n });\n \n return [...new Set(tags)];\n}\n\n/**\n * Parse content into segments with hashtag information\n * @param content - Text content with hashtags\n * @returns Array of segments with type and content\n */\nexport interface ContentSegment {\n type: 'text' | 'hashtag';\n content: string;\n}\n\nexport function parseHashtagContent(content: string): ContentSegment[] {\n if (!content) return [{ type: 'text', content: '' }];\n \n const hashtagRegex = /#([a-zA-Z0-9_]+)/g;\n const parts = content.split(hashtagRegex);\n \n return parts.map((part, index) => {\n // Even indices are regular text, odd indices are hashtag content\n if (index % 2 === 0) {\n return { type: 'text', content: part };\n }\n \n // This is a hashtag - validate it\n try {\n tagSchema.parse(part);\n return { type: 'hashtag', content: part };\n } catch {\n // Invalid hashtag, render as regular text\n return { type: 'text', content: `#${part}` };\n }\n });\n}\n\n/**\n * Clean and normalize tag for URL usage\n */\nexport function normalizeTag(tag: string): string {\n return tag.toLowerCase().replace(/[^a-z0-9_]/g, '');\n}","import React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { parseHashtagContent, type ContentSegment } from '@/utils/tagUtils';\n\ninterface HashtagTextProps {\n children: string;\n className?: string;\n onTagClick?: (tag: string) => void;\n}\n\nconst HashtagText: React.FC<HashtagTextProps> = ({ \n children, \n className = '',\n onTagClick \n}) => {\n const navigate = useNavigate();\n \n const handleTagClick = (tag: string) => {\n if (onTagClick) {\n onTagClick(tag);\n } else {\n navigate(`/tags/${tag}`);\n }\n };\n\n const segments = parseHashtagContent(children);\n\n return (\n <span className={className}>\n {segments.map((segment: ContentSegment, index: number) => {\n if (segment.type === 'hashtag') {\n return (\n <button\n key={`tag-${index}`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n handleTagClick(segment.content);\n }}\n className=\"text-primary hover:text-primary/80 font-medium hover:underline cursor-pointer transition-colors\"\n >\n #{segment.content}\n </button>\n );\n }\n return <span key={`text-${index}`}>{segment.content}</span>;\n })}\n </span>\n );\n};\n\nexport default HashtagText;","\n/* **********************************************\n Begin prism-core.js\n********************************************** */\n\n/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {} // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&').replace(/</g, '<').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null) === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123) === 'Number'\n\t\t\t * type('foo') === 'String'\n\t\t\t * type(true) === 'Boolean'\n\t\t\t * type([1, 2]) === 'Array'\n\t\t\t * type({}) === 'Object'\n\t\t\t * type(String) === 'Function'\n\t\t\t * type(/abc+/) === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (document.currentScript && document.currentScript.tagName === 'SCRIPT' && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t// at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t// at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t * // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t * // at its original position\n\t\t\t * 'comment': { ... },\n\t\t\t * // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t * 'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t * // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t * 'style': {\n\t\t\t * // token\n\t\t\t * }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t * 'comment': Prism.languages.markup.comment,\n\t\t\t * // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism’s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you’re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t * if (token instanceof Prism.Token && token.type === 'number') {\n\t\t * console.log(`Found numeric literal: ${token.content}`);\n\t\t * }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t// @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t * The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '"') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n\n\n/* **********************************************\n Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n\n\n/* **********************************************\n Begin prism-css.js\n********************************************** */\n\n(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n\n\n/* **********************************************\n Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n\n/* **********************************************\n Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading…';\n\tvar FAILURE_MESSAGE = function (status, message) {\n\t\treturn '✖ Error ' + status + ' while fetching file: ' + message;\n\t};\n\tvar FAILURE_EMPTY_MESSAGE = '✖ Error: File does not exist or is empty';\n\n\tvar EXTENSIONS = {\n\t\t'js': 'javascript',\n\t\t'py': 'python',\n\t\t'rb': 'ruby',\n\t\t'ps1': 'powershell',\n\t\t'psm1': 'powershell',\n\t\t'sh': 'bash',\n\t\t'bat': 'batch',\n\t\t'h': 'c',\n\t\t'tex': 'latex'\n\t};\n\n\tvar STATUS_ATTR = 'data-src-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-src]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\t/**\n\t * Loads the given file.\n\t *\n\t * @param {string} src The URL or path of the source file to load.\n\t * @param {(result: string) => void} success\n\t * @param {(reason: string) => void} error\n\t */\n\tfunction loadFile(src, success, error) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', src, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState == 4) {\n\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\tsuccess(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tif (xhr.status >= 400) {\n\t\t\t\t\t\terror(FAILURE_MESSAGE(xhr.status, xhr.statusText));\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror(FAILURE_EMPTY_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.send(null);\n\t}\n\n\t/**\n\t * Parses the given range.\n\t *\n\t * This returns a range with inclusive ends.\n\t *\n\t * @param {string | null | undefined} range\n\t * @returns {[number, number | undefined] | undefined}\n\t */\n\tfunction parseRange(range) {\n\t\tvar m = /^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(range || '');\n\t\tif (m) {\n\t\t\tvar start = Number(m[1]);\n\t\t\tvar comma = m[2];\n\t\t\tvar end = m[3];\n\n\t\t\tif (!comma) {\n\t\t\t\treturn [start, start];\n\t\t\t}\n\t\t\tif (!end) {\n\t\t\t\treturn [start, undefined];\n\t\t\t}\n\t\t\treturn [start, Number(end)];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING); // mark as loading\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language = env.language;\n\t\t\tif (language === 'none') {\n\t\t\t\t// the language might be 'none' because there is no language set;\n\t\t\t\t// in this case, we want to use the extension as the language\n\t\t\t\tvar extension = (/\\.(\\w+)$/.exec(src) || [, 'none'])[1];\n\t\t\t\tlanguage = EXTENSIONS[extension] || extension;\n\t\t\t}\n\n\t\t\t// set language classes\n\t\t\tPrism.util.setLanguage(code, language);\n\t\t\tPrism.util.setLanguage(pre, language);\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\t// load file\n\t\t\tloadFile(\n\t\t\t\tsrc,\n\t\t\t\tfunction (text) {\n\t\t\t\t\t// mark as loaded\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t// handle data-range\n\t\t\t\t\tvar range = parseRange(pre.getAttribute('data-range'));\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tvar lines = text.split(/\\r\\n?|\\n/g);\n\n\t\t\t\t\t\t// the range is one-based and inclusive on both ends\n\t\t\t\t\t\tvar start = range[0];\n\t\t\t\t\t\tvar end = range[1] == null ? lines.length : range[1];\n\n\t\t\t\t\t\tif (start < 0) { start += lines.length; }\n\t\t\t\t\t\tstart = Math.max(0, Math.min(start - 1, lines.length));\n\t\t\t\t\t\tif (end < 0) { end += lines.length; }\n\t\t\t\t\t\tend = Math.max(0, Math.min(end, lines.length));\n\n\t\t\t\t\t\ttext = lines.slice(start, end).join('\\n');\n\n\t\t\t\t\t\t// add data-start for line numbers\n\t\t\t\t\t\tif (!pre.hasAttribute('data-start')) {\n\t\t\t\t\t\t\tpre.setAttribute('data-start', String(start + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// highlight code\n\t\t\t\t\tcode.textContent = text;\n\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = error;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\tPrism.plugins.fileHighlight = {\n\t\t/**\n\t\t * Executes the File Highlight plugin for all matching `pre` elements under the given container.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {ParentNode} [container=document]\n\t\t */\n\t\thighlight: function highlight(container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar logged = false;\n\t/** @deprecated Use `Prism.plugins.fileHighlight.highlight` instead. */\n\tPrism.fileHighlight = function () {\n\t\tif (!logged) {\n\t\t\tconsole.warn('Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.');\n\t\t\tlogged = true;\n\t\t}\n\t\tPrism.plugins.fileHighlight.highlight.apply(this, arguments);\n\t};\n\n}());\n","(function (Prism) {\n\n\tPrism.languages.typescript = Prism.languages.extend('javascript', {\n\t\t'class-name': {\n\t\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|type)\\s+)(?!keyof\\b)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?:\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: null // see below\n\t\t},\n\t\t'builtin': /\\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\\b/,\n\t});\n\n\t// The keywords TypeScript adds to JavaScript\n\tPrism.languages.typescript.keyword.push(\n\t\t/\\b(?:abstract|declare|is|keyof|readonly|require)\\b/,\n\t\t// keywords that have to be followed by an identifier\n\t\t/\\b(?:asserts|infer|interface|module|namespace|type)\\b(?=\\s*(?:[{_$a-zA-Z\\xA0-\\uFFFF]|$))/,\n\t\t// This is for `import type *, {}`\n\t\t/\\btype\\b(?=\\s*(?:[\\{*]|$))/\n\t);\n\n\t// doesn't work with TS because TS is too complex\n\tdelete Prism.languages.typescript['parameter'];\n\tdelete Prism.languages.typescript['literal-property'];\n\n\t// a version of typescript specifically for highlighting types\n\tvar typeInside = Prism.languages.extend('typescript', {});\n\tdelete typeInside['class-name'];\n\n\tPrism.languages.typescript['class-name'].inside = typeInside;\n\n\tPrism.languages.insertBefore('typescript', 'function', {\n\t\t'decorator': {\n\t\t\tpattern: /@[$\\w\\xA0-\\uFFFF]+/,\n\t\t\tinside: {\n\t\t\t\t'at': {\n\t\t\t\t\tpattern: /^@/,\n\t\t\t\t\talias: 'operator'\n\t\t\t\t},\n\t\t\t\t'function': /^[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t'generic-function': {\n\t\t\t// e.g. foo<T extends \"bar\" | \"baz\">( ...\n\t\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\\s*\\()/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<[\\s\\S]+/, // everything after the first <\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: typeInside\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.ts = Prism.languages.typescript;\n\n}(Prism));\n","Prism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n","// https://www.json.org/json-en.html\nPrism.languages.json = {\n\t'property': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?!\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'comment': {\n\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'number': /-?\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,\n\t'punctuation': /[{}[\\],]/,\n\t'operator': /:/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'null': {\n\t\tpattern: /\\bnull\\b/,\n\t\talias: 'keyword'\n\t}\n};\n\nPrism.languages.webmanifest = Prism.languages.json;\n","(function (Prism) {\n\t// $ set | grep '^[A-Z][^[:space:]]*=' | cut -d= -f1 | tr '\\n' '|'\n\t// + LC_ALL, RANDOM, REPLY, SECONDS.\n\t// + make sure PS1..4 are here as they are not always set,\n\t// - some useless things.\n\tvar envVars = '\\\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\\\b';\n\n\tvar commandAfterHeredoc = {\n\t\tpattern: /(^([\"']?)\\w+\\2)[ \\t]+\\S.*/,\n\t\tlookbehind: true,\n\t\talias: 'punctuation', // this looks reasonably well in all themes\n\t\tinside: null // see below\n\t};\n\n\tvar insideString = {\n\t\t'bash': commandAfterHeredoc,\n\t\t'environment': {\n\t\t\tpattern: RegExp('\\\\$' + envVars),\n\t\t\talias: 'constant'\n\t\t},\n\t\t'variable': [\n\t\t\t// [0]: Arithmetic Environment\n\t\t\t{\n\t\t\t\tpattern: /\\$?\\(\\([\\s\\S]+?\\)\\)/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t// If there is a $ sign at the beginning highlight $(( and )) as variable\n\t\t\t\t\t'variable': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /(^\\$\\(\\([\\s\\S]+)\\)\\)/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/^\\$\\(\\(/\n\t\t\t\t\t],\n\t\t\t\t\t'number': /\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee]-?\\d+)?/,\n\t\t\t\t\t// Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic\n\t\t\t\t\t'operator': /--|\\+\\+|\\*\\*=?|<<=?|>>=?|&&|\\|\\||[=!+\\-*/%<>^&|]=?|[?~:]/,\n\t\t\t\t\t// If there is no $ sign at the beginning highlight (( and )) as punctuation\n\t\t\t\t\t'punctuation': /\\(\\(?|\\)\\)?|,|;/\n\t\t\t\t}\n\t\t\t},\n\t\t\t// [1]: Command Substitution\n\t\t\t{\n\t\t\t\tpattern: /\\$\\((?:\\([^)]+\\)|[^()])+\\)|`[^`]+`/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'variable': /^\\$\\(|^`|\\)$|`$/\n\t\t\t\t}\n\t\t\t},\n\t\t\t// [2]: Brace expansion\n\t\t\t{\n\t\t\t\tpattern: /\\$\\{[^}]+\\}/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'operator': /:[-=?+]?|[!\\/]|##?|%%?|\\^\\^?|,,?/,\n\t\t\t\t\t'punctuation': /[\\[\\]]/,\n\t\t\t\t\t'environment': {\n\t\t\t\t\t\tpattern: RegExp('(\\\\{)' + envVars),\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\talias: 'constant'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t/\\$(?:\\w+|[#?*!@$])/\n\t\t],\n\t\t// Escape sequences from echo and printf's manuals, and escaped quotes.\n\t\t'entity': /\\\\(?:[abceEfnrtv\\\\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/\n\t};\n\n\tPrism.languages.bash = {\n\t\t'shebang': {\n\t\t\tpattern: /^#!\\s*\\/.*/,\n\t\t\talias: 'important'\n\t\t},\n\t\t'comment': {\n\t\t\tpattern: /(^|[^\"{\\\\$])#.*/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'function-name': [\n\t\t\t// a) function foo {\n\t\t\t// b) foo() {\n\t\t\t// c) function foo() {\n\t\t\t// but not “foo {”\n\t\t\t{\n\t\t\t\t// a) and c)\n\t\t\t\tpattern: /(\\bfunction\\s+)[\\w-]+(?=(?:\\s*\\(?:\\s*\\))?\\s*\\{)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'function'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// b)\n\t\t\t\tpattern: /\\b[\\w-]+(?=\\s*\\(\\s*\\)\\s*\\{)/,\n\t\t\t\talias: 'function'\n\t\t\t}\n\t\t],\n\t\t// Highlight variable names as variables in for and select beginnings.\n\t\t'for-or-select': {\n\t\t\tpattern: /(\\b(?:for|select)\\s+)\\w+(?=\\s+in\\s)/,\n\t\t\talias: 'variable',\n\t\t\tlookbehind: true\n\t\t},\n\t\t// Highlight variable names as variables in the left-hand part\n\t\t// of assignments (“=” and “+=”).\n\t\t'assign-left': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()\\w+(?:\\.\\w+)*(?=\\+?=)/,\n\t\t\tinside: {\n\t\t\t\t'environment': {\n\t\t\t\t\tpattern: RegExp('(^|[\\\\s;|&]|[<>]\\\\()' + envVars),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'constant'\n\t\t\t\t}\n\t\t\t},\n\t\t\talias: 'variable',\n\t\t\tlookbehind: true\n\t\t},\n\t\t// Highlight parameter names as variables\n\t\t'parameter': {\n\t\t\tpattern: /(^|\\s)-{1,2}(?:\\w+:[+-]?)?\\w+(?:\\.\\w+)*(?=[=\\s]|$)/,\n\t\t\talias: 'variable',\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': [\n\t\t\t// Support for Here-documents https://en.wikipedia.org/wiki/Here_document\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)(\\w+)\\s[\\s\\S]*?(?:\\r?\\n|\\r)\\2/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: insideString\n\t\t\t},\n\t\t\t// Here-document with quotes around the tag\n\t\t\t// → No expansion (so no “inside”).\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)([\"'])(\\w+)\\2\\s[\\s\\S]*?(?:\\r?\\n|\\r)\\3/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'bash': commandAfterHeredoc\n\t\t\t\t}\n\t\t\t},\n\t\t\t// “Normal” string\n\t\t\t{\n\t\t\t\t// https://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html\n\t\t\t\tpattern: /(^|[^\\\\](?:\\\\\\\\)*)\"(?:\\\\[\\s\\S]|\\$\\([^)]+\\)|\\$(?!\\()|`[^`]+`|[^\"\\\\`$])*\"/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: insideString\n\t\t\t},\n\t\t\t{\n\t\t\t\t// https://www.gnu.org/software/bash/manual/html_node/Single-Quotes.html\n\t\t\t\tpattern: /(^|[^$\\\\])'[^']*'/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// https://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html\n\t\t\t\tpattern: /\\$'(?:[^'\\\\]|\\\\[\\s\\S])*'/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'entity': insideString.entity\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'environment': {\n\t\t\tpattern: RegExp('\\\\$?' + envVars),\n\t\t\talias: 'constant'\n\t\t},\n\t\t'variable': insideString.variable,\n\t\t'function': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'keyword': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t// https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n\t\t'builtin': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:\\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true,\n\t\t\t// Alias added to make those easier to distinguish from strings.\n\t\t\talias: 'class-name'\n\t\t},\n\t\t'boolean': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:false|true)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'file-descriptor': {\n\t\t\tpattern: /\\B&\\d\\b/,\n\t\t\talias: 'important'\n\t\t},\n\t\t'operator': {\n\t\t\t// Lots of redirections here, but not just that.\n\t\t\tpattern: /\\d?<>|>\\||\\+=|=[=~]?|!=?|<<[<-]?|[&\\d]?>>|\\d[<>]&?|[<>][&=]?|&[>&]?|\\|[&|]?/,\n\t\t\tinside: {\n\t\t\t\t'file-descriptor': {\n\t\t\t\t\tpattern: /^\\d/,\n\t\t\t\t\talias: 'important'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'punctuation': /\\$?\\(\\(?|\\)\\)?|\\.\\.|[{}[\\];\\\\]/,\n\t\t'number': {\n\t\t\tpattern: /(^|\\s)(?:[1-9]\\d*|0)(?:[.,]\\d+)?\\b/,\n\t\t\tlookbehind: true\n\t\t}\n\t};\n\n\tcommandAfterHeredoc.inside = Prism.languages.bash;\n\n\t/* Patterns in command substitution. */\n\tvar toBeCopied = [\n\t\t'comment',\n\t\t'function-name',\n\t\t'for-or-select',\n\t\t'assign-left',\n\t\t'parameter',\n\t\t'string',\n\t\t'environment',\n\t\t'function',\n\t\t'keyword',\n\t\t'builtin',\n\t\t'boolean',\n\t\t'file-descriptor',\n\t\t'operator',\n\t\t'punctuation',\n\t\t'number'\n\t];\n\tvar inside = insideString.variable[1].inside;\n\tfor (var i = 0; i < toBeCopied.length; i++) {\n\t\tinside[toBeCopied[i]] = Prism.languages.bash[toBeCopied[i]];\n\t}\n\n\tPrism.languages.sh = Prism.languages.bash;\n\tPrism.languages.shell = Prism.languages.bash;\n}(Prism));\n","(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n","Prism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n","import React, { useMemo, useEffect, useRef } from 'react';\nimport { marked } from 'marked';\nimport DOMPurify from 'dompurify';\nimport HashtagText from './HashtagText';\nimport Prism from 'prismjs';\n\nimport 'prismjs/components/prism-typescript';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-markup';\nimport '../styles/prism-custom-theme.css';\n\ninterface MarkdownRendererProps {\n content: string;\n className?: string;\n}\n\nconst MarkdownRenderer = React.memo(({ content, className = \"\" }: MarkdownRendererProps) => {\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n // Memoize content analysis\n const contentAnalysis = useMemo(() => {\n const hasHashtags = /#[a-zA-Z0-9_]+/.test(content);\n const hasMarkdownLinks = /\\[.*?\\]\\(.*?\\)/.test(content);\n const hasMarkdownSyntax = /(\\*\\*|__|##?|###?|####?|#####?|######?|\\*|\\n\\*|\\n-|\\n\\d+\\.)/.test(content);\n\n return {\n hasHashtags,\n hasMarkdownLinks,\n hasMarkdownSyntax\n };\n }, [content]);\n\n // Only use HashtagText if content has hashtags but NO markdown syntax at all\n // This preserves hashtag linking for simple text while allowing markdown to render properly\n if (contentAnalysis.hasHashtags && !contentAnalysis.hasMarkdownLinks && !contentAnalysis.hasMarkdownSyntax) {\n return (\n <div className={`prose prose-sm max-w-none dark:prose-invert ${className}`}>\n <HashtagText>{content}</HashtagText>\n </div>\n );\n }\n\n // Memoize the expensive HTML processing\n const htmlContent = useMemo(() => {\n // Decode HTML entities first if present\n const decodedContent = content\n .replace(/ /g, ' ')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\");\n\n // Configure marked options for regular markdown\n marked.setOptions({\n breaks: true, // Convert \\n to <br>\n gfm: true, // GitHub flavored markdown\n });\n\n // Convert markdown to HTML\n const rawHtml = marked.parse(decodedContent) as string;\n\n // Helper function to format URL display text\n const formatUrlDisplay = (url: string): string => {\n try {\n // Remove protocol\n let displayUrl = url.replace(/^https?:\\/\\//, '');\n\n // Remove www. if present\n displayUrl = displayUrl.replace(/^www\\./, '');\n\n // Truncate if too long (keep domain + some path)\n if (displayUrl.length > 40) {\n const parts = displayUrl.split('/');\n const domain = parts[0];\n const path = parts.slice(1).join('/');\n\n if (path.length > 20) {\n displayUrl = `${domain}/${path.substring(0, 15)}...`;\n } else {\n displayUrl = `${domain}/${path}`;\n }\n }\n\n return displayUrl;\n } catch {\n return url;\n }\n };\n\n // Post-process to add target=\"_blank\", styling, and format link text\n const processedHtml = rawHtml.replace(\n /<a href=\"([^\"]*)\"([^>]*)>([^<]*)<\\/a>/g,\n (match, href, attrs, text) => {\n // If the link text is the same as the URL (auto-generated), format it nicely\n const isAutoLink = text === href || text.replace(/^https?:\\/\\//, '') === href.replace(/^https?:\\/\\//, '');\n const displayText = isAutoLink ? formatUrlDisplay(href) : text;\n\n return `<a href=\"${href}\"${attrs} target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-primary hover:text-primary/80 underline hover:no-underline transition-colors\">${displayText}</a>`;\n }\n );\n\n return DOMPurify.sanitize(processedHtml, {\n ADD_ATTR: ['target', 'rel', 'class'] // Allow target, rel, and class attributes for links\n });\n }, [content]);\n\n // Apply syntax highlighting after render\n React.useEffect(() => {\n if (containerRef.current) {\n Prism.highlightAllUnder(containerRef.current);\n }\n }, [htmlContent]);\n\n return (\n <div\n ref={containerRef}\n className={`prose prose-sm max-w-none dark:prose-invert ${className}`}\n dangerouslySetInnerHTML={{ __html: htmlContent }}\n />\n );\n});\n\nMarkdownRenderer.displayName = 'MarkdownRenderer';\n\nexport default MarkdownRenderer;","// src/primitive.tsx\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n return function handleEvent(event) {\n originalEventHandler?.(event);\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\nfunction getOwnerWindow(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access window outside of the DOM\");\n }\n return element?.ownerDocument?.defaultView ?? window;\n}\nfunction getOwnerDocument(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access document outside of the DOM\");\n }\n return element?.ownerDocument ?? document;\n}\nfunction getActiveElement(node, activeDescendant = false) {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n return null;\n }\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n if (activeDescendant) {\n const id = activeElement.getAttribute(\"aria-activedescendant\");\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n return activeElement;\n}\nfunction isFrame(element) {\n return element.tagName === \"IFRAME\";\n}\nexport {\n canUseDOM,\n composeEventHandlers,\n getActiveElement,\n getOwnerDocument,\n getOwnerWindow,\n isFrame\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/context/src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-layout-effect/src/use-layout-effect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {\n};\nexport {\n useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/id/src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\" useId \".trim().toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n const [id, setId] = React.useState(useReactId());\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : \"\");\n}\nexport {\n useId\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n prop,\n defaultProp,\n onChange = () => {\n },\n caller\n}) {\n const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== void 0;\n const value = isControlled ? prop : uncontrolledProp;\n if (true) {\n const isControlledRef = React.useRef(prop !== void 0);\n React.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const setValue = React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;\n if (value2 !== prop) {\n onChangeRef.current?.(value2);\n }\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, onChangeRef]\n );\n return [value, setValue];\n}\nfunction useUncontrolledState({\n defaultProp,\n onChange\n}) {\n const [value, setValue] = React.useState(defaultProp);\n const prevValueRef = React.useRef(value);\n const onChangeRef = React.useRef(onChange);\n useInsertionEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n onChangeRef.current?.(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef]);\n return [value, setValue, onChangeRef];\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nvar SYNC_STATE = Symbol(\"RADIX:SYNC_STATE\");\nfunction useControllableStateReducer(reducer, userArgs, initialArg, init) {\n const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n const isControlled = controlledState !== void 0;\n const onChange = useEffectEvent(onChangeProp);\n if (true) {\n const isControlledRef = React2.useRef(controlledState !== void 0);\n React2.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const args = [{ ...initialArg, state: defaultProp }];\n if (init) {\n args.push(init);\n }\n const [internalState, dispatch] = React2.useReducer(\n (state2, action) => {\n if (action.type === SYNC_STATE) {\n return { ...state2, state: action.state };\n }\n const next = reducer(state2, action);\n if (isControlled && !Object.is(next.state, state2.state)) {\n onChange(next.state);\n }\n return next;\n },\n ...args\n );\n const uncontrolledState = internalState.state;\n const prevValueRef = React2.useRef(uncontrolledState);\n React2.useEffect(() => {\n if (prevValueRef.current !== uncontrolledState) {\n prevValueRef.current = uncontrolledState;\n if (!isControlled) {\n onChange(uncontrolledState);\n }\n }\n }, [onChange, uncontrolledState, prevValueRef, isControlled]);\n const state = React2.useMemo(() => {\n const isControlled2 = controlledState !== void 0;\n if (isControlled2) {\n return { ...internalState, state: controlledState };\n }\n return internalState;\n }, [internalState, controlledState]);\n React2.useEffect(() => {\n if (isControlled && !Object.is(controlledState, internalState.state)) {\n dispatch({ type: SYNC_STATE, state: controlledState });\n }\n }, [controlledState, internalState.state, isControlled]);\n return [state, dispatch];\n}\nexport {\n useControllableState,\n useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-callback-ref/src/use-callback-ref.tsx\nimport * as React from \"react\";\nfunction useCallbackRef(callback) {\n const callbackRef = React.useRef(callback);\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => (...args) => callbackRef.current?.(...args), []);\n}\nexport {\n useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-escape-keydown/src/use-escape-keydown.tsx\nimport * as React from \"react\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nfunction useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n React.useEffect(() => {\n const handleKeyDown = (event) => {\n if (event.key === \"Escape\") {\n onEscapeKeyDown(event);\n }\n };\n ownerDocument.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n }, [onEscapeKeyDown, ownerDocument]);\n}\nexport {\n useEscapeKeydown\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dismissable-layer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DISMISSABLE_LAYER_NAME = \"DismissableLayer\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n layers: /* @__PURE__ */ new Set(),\n layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n branches: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n const focusOutside = useFocusOutside((event) => {\n const target = event.target;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = \"none\";\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...layerProps,\n ref: composedRefs,\n style: {\n pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n ...props.style\n },\n onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n onPointerDownCapture: composeEventHandlers(\n props.onPointerDownCapture,\n pointerDownOutside.onPointerDownCapture\n )\n }\n );\n }\n);\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\nvar BRANCH_NAME = \"DismissableLayerBranch\";\nvar DismissableLayerBranch = React.forwardRef((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n});\nDismissableLayerBranch.displayName = BRANCH_NAME;\nfunction usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {\n });\n React.useEffect(() => {\n const handlePointerDown = (event) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n let handleAndDispatchPointerDownOutsideEvent2 = function() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n };\n var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n const eventDetail = { originalEvent: event };\n if (event.pointerType === \"touch\") {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent2();\n }\n } else {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true\n };\n}\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n const handleFocusOutside = useCallbackRef(onFocusOutside);\n const isFocusInsideReactTreeRef = React.useRef(false);\n React.useEffect(() => {\n const handleFocus = (event) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false\n });\n }\n };\n ownerDocument.addEventListener(\"focusin\", handleFocus);\n return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n return {\n onFocusCapture: () => isFocusInsideReactTreeRef.current = true,\n onBlurCapture: () => isFocusInsideReactTreeRef.current = false\n };\n}\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler, { once: true });\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n Branch,\n DismissableLayer,\n DismissableLayerBranch,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-scope.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AUTOFOCUS_ON_MOUNT = \"focusScope.autoFocusOnMount\";\nvar AUTOFOCUS_ON_UNMOUNT = \"focusScope.autoFocusOnUnmount\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar FOCUS_SCOPE_NAME = \"FocusScope\";\nvar FocusScope = React.forwardRef((props, forwardedRef) => {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n }\n }).current;\n React.useEffect(() => {\n if (trapped) {\n let handleFocusIn2 = function(event) {\n if (focusScope.paused || !container) return;\n const target = event.target;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleFocusOut2 = function(event) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget;\n if (relatedTarget === null) return;\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleMutations2 = function(mutations) {\n const focusedElement = document.activeElement;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n };\n var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2;\n document.addEventListener(\"focusin\", handleFocusIn2);\n document.addEventListener(\"focusout\", handleFocusOut2);\n const mutationObserver = new MutationObserver(handleMutations2);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n return () => {\n document.removeEventListener(\"focusin\", handleFocusIn2);\n document.removeEventListener(\"focusout\", handleFocusOut2);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n const handleKeyDown = React.useCallback(\n (event) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n const isTabKey = event.key === \"Tab\" && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement;\n if (isTabKey && focusedElement) {\n const container2 = event.currentTarget;\n const [first, last] = getTabbableEdges(container2);\n const hasTabbableElementsInside = first && last;\n if (!hasTabbableElementsInside) {\n if (focusedElement === container2) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n return /* @__PURE__ */ jsx(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });\n});\nFocusScope.displayName = FOCUS_SCOPE_NAME;\nfunction focusFirst(candidates, { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\nfunction getTabbableEdges(container) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last];\n}\nfunction getTabbableCandidates(container) {\n const nodes = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node) => {\n const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n }\n });\n while (walker.nextNode()) nodes.push(walker.currentNode);\n return nodes;\n}\nfunction findVisible(elements, container) {\n for (const element of elements) {\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\nfunction isHidden(node, { upTo }) {\n if (getComputedStyle(node).visibility === \"hidden\") return true;\n while (node) {\n if (upTo !== void 0 && node === upTo) return false;\n if (getComputedStyle(node).display === \"none\") return true;\n node = node.parentElement;\n }\n return false;\n}\nfunction isSelectableInput(element) {\n return element instanceof HTMLInputElement && \"select\" in element;\n}\nfunction focus(element, { select = false } = {}) {\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n element.focus({ preventScroll: true });\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\nvar focusScopesStack = createFocusScopesStack();\nfunction createFocusScopesStack() {\n let stack = [];\n return {\n add(focusScope) {\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n remove(focusScope) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n }\n };\n}\nfunction arrayRemove(array, item) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\nfunction removeLinks(items) {\n return items.filter((item) => item.tagName !== \"A\");\n}\nvar Root = FocusScope;\nexport {\n FocusScope,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/portal.tsx\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PORTAL_NAME = \"Portal\";\nvar Portal = React.forwardRef((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || mounted && globalThis?.document?.body;\n return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;\n});\nPortal.displayName = PORTAL_NAME;\nvar Root = Portal;\nexport {\n Portal,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/presence.tsx\nimport * as React2 from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// src/use-state-machine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// src/presence.tsx\nvar Presence = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === \"function\";\n return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n const [node, setNode] = React2.useState();\n const stylesRef = React2.useRef(null);\n const prevPresentRef = React2.useRef(present);\n const prevAnimationNameRef = React2.useRef(\"none\");\n const initialState = present ? \"mounted\" : \"unmounted\";\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: \"unmounted\",\n ANIMATION_OUT: \"unmountSuspended\"\n },\n unmountSuspended: {\n MOUNT: \"mounted\",\n ANIMATION_END: \"unmounted\"\n },\n unmounted: {\n MOUNT: \"mounted\"\n }\n });\n React2.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n }, [state]);\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n if (present) {\n send(\"MOUNT\");\n } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n send(\"UNMOUNT\");\n } else {\n const isAnimating = prevAnimationName !== currentAnimationName;\n if (wasPresent && isAnimating) {\n send(\"ANIMATION_OUT\");\n } else {\n send(\"UNMOUNT\");\n }\n }\n prevPresentRef.current = present;\n }\n }, [present, send]);\n useLayoutEffect(() => {\n if (node) {\n let timeoutId;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n const handleAnimationEnd = (event) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n send(\"ANIMATION_END\");\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = \"forwards\";\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === \"forwards\") {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event) => {\n if (event.target === node) {\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener(\"animationstart\", handleAnimationStart);\n node.addEventListener(\"animationcancel\", handleAnimationEnd);\n node.addEventListener(\"animationend\", handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener(\"animationstart\", handleAnimationStart);\n node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n node.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n } else {\n send(\"ANIMATION_END\");\n }\n }, [node, send]);\n return {\n isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n ref: React2.useCallback((node2) => {\n stylesRef.current = node2 ? getComputedStyle(node2) : null;\n setNode(node2);\n }, [])\n };\n}\nfunction getAnimationName(styles) {\n return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nvar Root = Presence;\nexport {\n Presence,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-guards.tsx\nimport * as React from \"react\";\nvar count = 0;\nfunction FocusGuards(props) {\n useFocusGuards();\n return props.children;\n}\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll(\"[data-radix-focus-guard]\");\n document.body.insertAdjacentElement(\"afterbegin\", edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement(\"beforeend\", edgeGuards[1] ?? createFocusGuard());\n count++;\n return () => {\n if (count === 1) {\n document.querySelectorAll(\"[data-radix-focus-guard]\").forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n}\nfunction createFocusGuard() {\n const element = document.createElement(\"span\");\n element.setAttribute(\"data-radix-focus-guard\", \"\");\n element.tabIndex = 0;\n element.style.outline = \"none\";\n element.style.opacity = \"0\";\n element.style.position = \"fixed\";\n element.style.pointerEvents = \"none\";\n return element;\n}\nexport {\n FocusGuards,\n FocusGuards as Root,\n useFocusGuards\n};\n//# sourceMappingURL=index.mjs.map\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n },\n },\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n * return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n // handle refs changes - added or removed\n useIsomorphicLayoutEffect(function () {\n var oldValue = currentValues.get(callbackRef);\n if (oldValue) {\n var prevRefs_1 = new Set(oldValue);\n var nextRefs_1 = new Set(refs);\n var current_1 = callbackRef.current;\n prevRefs_1.forEach(function (ref) {\n if (!nextRefs_1.has(ref)) {\n assignRef(ref, null);\n }\n });\n nextRefs_1.forEach(function (ref) {\n if (!prevRefs_1.has(ref)) {\n assignRef(ref, current_1);\n }\n });\n }\n currentValues.set(callbackRef, refs);\n }, [refs]);\n return callbackRef;\n}\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = __assign({ async: true, ssr: false }, options);\n return medium;\n}\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n if (!sideCar) {\n throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n }\n var Target = sideCar.read();\n if (!Target) {\n throw new Error('Sidecar medium not found');\n }\n return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n medium.useMedium(exported);\n return SideCar;\n}\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noRelative\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noRelative: noRelative, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","var currentNonce;\nexport var setNonce = function (nonce) {\n currentNonce = nonce;\n};\nexport var getNonce = function () {\n if (currentNonce) {\n return currentNonce;\n }\n if (typeof __webpack_nonce__ !== 'undefined') {\n return __webpack_nonce__;\n }\n return undefined;\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n if (!document)\n return null;\n var tag = document.createElement('style');\n tag.type = 'text/css';\n var nonce = getNonce();\n if (nonce) {\n tag.setAttribute('nonce', nonce);\n }\n return tag;\n}\nfunction injectStyles(tag, css) {\n // @ts-ignore\n if (tag.styleSheet) {\n // @ts-ignore\n tag.styleSheet.cssText = css;\n }\n else {\n tag.appendChild(document.createTextNode(css));\n }\n}\nfunction insertStyleTag(tag) {\n var head = document.head || document.getElementsByTagName('head')[0];\n head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n var counter = 0;\n var stylesheet = null;\n return {\n add: function (style) {\n if (counter == 0) {\n if ((stylesheet = makeStyleTag())) {\n injectStyles(stylesheet, style);\n insertStyleTag(stylesheet);\n }\n }\n counter++;\n },\n remove: function () {\n counter--;\n if (!counter && stylesheet) {\n stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n stylesheet = null;\n }\n },\n };\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n var sheet = stylesheetSingleton();\n return function (styles, isDynamic) {\n React.useEffect(function () {\n sheet.add(styles);\n return function () {\n sheet.remove();\n };\n }, [styles && isDynamic]);\n };\n};\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n var useStyle = styleHookSingleton();\n var Sheet = function (_a) {\n var styles = _a.styles, dynamic = _a.dynamic;\n useStyle(styles, dynamic);\n return null;\n };\n return Sheet;\n};\n","export var zeroGap = {\n left: 0,\n top: 0,\n right: 0,\n gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n var cs = window.getComputedStyle(document.body);\n var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n if (gapMode === void 0) { gapMode = 'margin'; }\n if (typeof window === 'undefined') {\n return zeroGap;\n }\n var offsets = getOffset(gapMode);\n var documentWidth = document.documentElement.clientWidth;\n var windowWidth = window.innerWidth;\n return {\n left: offsets[0],\n top: offsets[1],\n right: offsets[2],\n gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\".concat(noScrollbarsClassName, \" {\\n overflow: hidden \").concat(important, \";\\n padding-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n body[\").concat(lockAttribute, \"] {\\n overflow: hidden \").concat(important, \";\\n overscroll-behavior: contain;\\n \").concat([\n allowRelative && \"position: relative \".concat(important, \";\"),\n gapMode === 'margin' &&\n \"\\n padding-left: \".concat(left, \"px;\\n padding-top: \").concat(top, \"px;\\n padding-right: \").concat(right, \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n \"),\n gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n ]\n .filter(Boolean)\n .join(''), \"\\n }\\n \\n .\").concat(zeroRightClassName, \" {\\n right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" {\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n right: 0 \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n margin-right: 0 \").concat(important, \";\\n }\\n \\n body[\").concat(lockAttribute, \"] {\\n \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n }\\n\");\n};\nvar getCurrentUseCounter = function () {\n var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n React.useEffect(function () {\n document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n return function () {\n var newCounter = getCurrentUseCounter() - 1;\n if (newCounter <= 0) {\n document.body.removeAttribute(lockAttribute);\n }\n else {\n document.body.setAttribute(lockAttribute, newCounter.toString());\n }\n };\n }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n useLockAttribute();\n /*\n gap will be measured on every component mount\n however it will be used only by the \"first\" invocation\n due to singleton nature of <Style\n */\n var gap = React.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);\n return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });\n};\n","var passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n return true;\n },\n });\n // @ts-ignore\n window.addEventListener('test', options, options);\n // @ts-ignore\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n","var alwaysContainsScroll = function (node) {\n // textarea will always _contain_ scroll inside self. It only can be hidden\n return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n if (!(node instanceof Element)) {\n return false;\n }\n var styles = window.getComputedStyle(node);\n return (\n // not-not-scrollable\n styles[overflow] !== 'hidden' &&\n // contains scroll inside self\n !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n var ownerDocument = node.ownerDocument;\n var current = node;\n do {\n // Skip over shadow root\n if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n current = current.host;\n }\n var isScrollable = elementCouldBeScrolled(axis, current);\n if (isScrollable) {\n var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];\n if (scrollHeight > clientHeight) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n if (!target) {\n break;\n }\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n var parent_1 = target.parentNode;\n // we will \"bubble\" from ShadowDom in case we are, or just to the parent in normal case\n // this is the same logic used in focus-lock\n target = (parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1);\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(styleSingleton)[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n // allow drag selection (iOS); check if selection's anchorNode is the same as target or contains target\n var selection = window.getSelection();\n var anchorNode = selection && selection.anchorNode;\n var isTouchingSelection = anchorNode ? anchorNode === target || anchorNode.contains(target) : false;\n if (isTouchingSelection) {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n var shadowParent = null;\n while (node !== null) {\n if (node instanceof ShadowRoot) {\n shadowParent = node.host;\n node = node.host;\n }\n node = node.parentNode;\n }\n return shadowParent;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","var getDefaultParent = function (originalTarget) {\n if (typeof document === 'undefined') {\n return null;\n }\n var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n return targets\n .map(function (target) {\n if (parent.contains(target)) {\n return target;\n }\n var correctedTarget = unwrapHost(target);\n if (correctedTarget && parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n return null;\n })\n .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n var markerCounter = markerMap[markerName];\n var hiddenNodes = [];\n var elementsToKeep = new Set();\n var elementsToStop = new Set(targets);\n var keep = function (el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n keep(el.parentNode);\n };\n targets.forEach(keep);\n var deep = function (parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n Array.prototype.forEach.call(parent.children, function (node) {\n if (elementsToKeep.has(node)) {\n deep(node);\n }\n else {\n try {\n var attr = node.getAttribute(controlAttribute);\n var alreadyHidden = attr !== null && attr !== 'false';\n var counterValue = (counterMap.get(node) || 0) + 1;\n var markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenNodes.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledNodes.set(node, true);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, 'true');\n }\n if (!alreadyHidden) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n catch (e) {\n console.error('aria-hidden: cannot operate on ', node, e);\n }\n }\n });\n };\n deep(parentNode);\n elementsToKeep.clear();\n lockCount++;\n return function () {\n hiddenNodes.forEach(function (node) {\n var counterValue = counterMap.get(node) - 1;\n var markerValue = markerCounter.get(node) - 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n if (!counterValue) {\n if (!uncontrolledNodes.has(node)) {\n node.removeAttribute(controlAttribute);\n }\n uncontrolledNodes.delete(node);\n }\n if (!markerValue) {\n node.removeAttribute(markerName);\n }\n });\n lockCount--;\n if (!lockCount) {\n // clear\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledNodes = new WeakMap();\n markerMap = {};\n }\n };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n // we should not hide aria-live elements - https://github.com/theKashey/aria-hidden/issues/10\n // and script elements, as they have no impact on accessibility.\n targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live], script')));\n return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-inert-ed'; }\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-suppressed'; }\n return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContext, createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = (props) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME\n });\n return /* @__PURE__ */ jsx(\n DialogProvider,\n {\n scope: __scopeDialog,\n triggerRef,\n contentRef,\n contentId: useId(),\n titleId: useId(),\n descriptionId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children\n }\n );\n};\nDialog.displayName = DIALOG_NAME;\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar DialogPortal = (props) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n};\nDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n }\n);\nDialogOverlay.displayName = OVERLAY_NAME;\nvar Slot = createSlot(\"DialogOverlay.RemoveScroll\");\nvar DialogOverlayImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n ...overlayProps,\n ref: forwardedRef,\n style: { pointerEvents: \"auto\", ...overlayProps.style }\n }\n ) })\n );\n }\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nDialogContent.displayName = CONTENT_NAME;\nvar DialogContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (isRightClick) event.preventDefault();\n }),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault()\n )\n }\n );\n }\n);\nvar DialogContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar DialogContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n useFocusGuards();\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n role: \"dialog\",\n id: context.contentId,\n \"aria-describedby\": context.descriptionId,\n \"aria-labelledby\": context.titleId,\n \"data-state\": getState(context.open),\n ...contentProps,\n ref: composedRefs,\n onDismiss: () => context.onOpenChange(false)\n }\n )\n }\n ),\n /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(TitleWarning, { titleId: context.titleId }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })\n ] })\n ] });\n }\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n }\n);\nDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n }\n);\nDialogDescription.displayName = DESCRIPTION_NAME;\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nDialogClose.displayName = CLOSE_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar TITLE_WARNING_NAME = \"DialogTitleWarning\";\nvar [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"dialog\"\n});\nvar TitleWarning = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n return null;\n};\nvar DESCRIPTION_WARNING_NAME = \"DialogDescriptionWarning\";\nvar DescriptionWarning = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute(\"aria-describedby\");\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n return null;\n};\nvar Root = Dialog;\nvar Trigger = DialogTrigger;\nvar Portal = DialogPortal;\nvar Overlay = DialogOverlay;\nvar Content = DialogContent;\nvar Title = DialogTitle;\nvar Description = DialogDescription;\nvar Close = DialogClose;\nexport {\n Close,\n Content,\n Description,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n Overlay,\n Portal,\n Root,\n Title,\n Trigger,\n WarningProvider,\n createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity data-[state=open]:bg-accent data-[state=open]:text-muted-foreground hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col space-y-1.5 text-center sm:text-left\", className)} {...props} />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className)} {...props} />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n },\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","import React from 'react';\n\nvar isCheckBoxInput = (element) => element.type === 'checkbox';\n\nvar isDateObject = (value) => value instanceof Date;\n\nvar isNullOrUndefined = (value) => value == null;\n\nconst isObjectType = (value) => typeof value === 'object';\nvar isObject = (value) => !isNullOrUndefined(value) &&\n !Array.isArray(value) &&\n isObjectType(value) &&\n !isDateObject(value);\n\nvar getEventValue = (event) => isObject(event) && event.target\n ? isCheckBoxInput(event.target)\n ? event.target.checked\n : event.target.value\n : event;\n\nvar getNodeParentName = (name) => name.substring(0, name.search(/\\.\\d+(\\.|$)/)) || name;\n\nvar isNameInFieldArray = (names, name) => names.has(getNodeParentName(name));\n\nvar isPlainObject = (tempObject) => {\n const prototypeCopy = tempObject.constructor && tempObject.constructor.prototype;\n return (isObject(prototypeCopy) && prototypeCopy.hasOwnProperty('isPrototypeOf'));\n};\n\nvar isWeb = typeof window !== 'undefined' &&\n typeof window.HTMLElement !== 'undefined' &&\n typeof document !== 'undefined';\n\nfunction cloneObject(data) {\n if (data instanceof Date) {\n return new Date(data);\n }\n const isFileListInstance = typeof FileList !== 'undefined' && data instanceof FileList;\n if (isWeb && (data instanceof Blob || isFileListInstance)) {\n return data;\n }\n const isArray = Array.isArray(data);\n if (!isArray && !(isObject(data) && isPlainObject(data))) {\n return data;\n }\n const copy = isArray ? [] : Object.create(Object.getPrototypeOf(data));\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n copy[key] = cloneObject(data[key]);\n }\n }\n return copy;\n}\n\nvar isKey = (value) => /^\\w*$/.test(value);\n\nvar isUndefined = (val) => val === undefined;\n\nvar compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];\n\nvar stringToPath = (input) => compact(input.replace(/[\"|']|\\]/g, '').split(/\\.|\\[/));\n\nvar get = (object, path, defaultValue) => {\n if (!path || !isObject(object)) {\n return defaultValue;\n }\n const result = (isKey(path) ? [path] : stringToPath(path)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], object);\n return isUndefined(result) || result === object\n ? isUndefined(object[path])\n ? defaultValue\n : object[path]\n : result;\n};\n\nvar isBoolean = (value) => typeof value === 'boolean';\n\nvar isFunction = (value) => typeof value === 'function';\n\nvar set = (object, path, value) => {\n let index = -1;\n const tempPath = isKey(path) ? [path] : stringToPath(path);\n const length = tempPath.length;\n const lastIndex = length - 1;\n while (++index < length) {\n const key = tempPath[index];\n let newValue = value;\n if (index !== lastIndex) {\n const objValue = object[key];\n newValue =\n isObject(objValue) || Array.isArray(objValue)\n ? objValue\n : !isNaN(+tempPath[index + 1])\n ? []\n : {};\n }\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return;\n }\n object[key] = newValue;\n object = object[key];\n }\n};\n\nconst EVENTS = {\n BLUR: 'blur',\n FOCUS_OUT: 'focusout',\n CHANGE: 'change',\n};\nconst VALIDATION_MODE = {\n onBlur: 'onBlur',\n onChange: 'onChange',\n onSubmit: 'onSubmit',\n onTouched: 'onTouched',\n all: 'all',\n};\nconst INPUT_VALIDATION_RULES = {\n max: 'max',\n min: 'min',\n maxLength: 'maxLength',\n minLength: 'minLength',\n pattern: 'pattern',\n required: 'required',\n validate: 'validate',\n};\n\n/**\n * Separate context for `control` to prevent unnecessary rerenders.\n * Internal hooks that only need control use this instead of full form context.\n */\nconst HookFormControlContext = React.createContext(null);\nHookFormControlContext.displayName = 'HookFormControlContext';\n/**\n * @internal Internal hook to access only control from context.\n */\nconst useFormControlContext = () => React.useContext(HookFormControlContext);\n\nvar getProxyFormState = (formState, control, localProxyFormState, isRoot = true) => {\n const result = {\n defaultValues: control._defaultValues,\n };\n for (const key in formState) {\n Object.defineProperty(result, key, {\n get: () => {\n const _key = key;\n if (control._proxyFormState[_key] !== VALIDATION_MODE.all) {\n control._proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;\n }\n localProxyFormState && (localProxyFormState[_key] = true);\n return formState[_key];\n },\n });\n }\n return result;\n};\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\n/**\n * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformstate) • [Demo](https://codesandbox.io/s/useformstate-75xly)\n *\n * @param props - include options on specify fields to subscribe. {@link UseFormStateReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, control } = useForm({\n * defaultValues: {\n * firstName: \"firstName\"\n * }});\n * const { dirtyFields } = useFormState({\n * control\n * });\n * const onSubmit = (data) => console.log(data);\n *\n * return (\n * <form onSubmit={handleSubmit(onSubmit)}>\n * <input {...register(\"firstName\")} placeholder=\"First Name\" />\n * {dirtyFields.firstName && <p>Field is dirty.</p>}\n * <input type=\"submit\" />\n * </form>\n * );\n * }\n * ```\n */\nfunction useFormState(props) {\n const formControl = useFormControlContext();\n const { control = formControl, disabled, name, exact } = props || {};\n const [formState, updateFormState] = React.useState(control._formState);\n const _localProxyFormState = React.useRef({\n isDirty: false,\n isLoading: false,\n dirtyFields: false,\n touchedFields: false,\n validatingFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n });\n useIsomorphicLayoutEffect(() => control._subscribe({\n name,\n formState: _localProxyFormState.current,\n exact,\n callback: (formState) => {\n !disabled &&\n updateFormState({\n ...control._formState,\n ...formState,\n });\n },\n }), [name, disabled, exact]);\n React.useEffect(() => {\n _localProxyFormState.current.isValid && control._setValid(true);\n }, [control]);\n return React.useMemo(() => getProxyFormState(formState, control, _localProxyFormState.current, false), [formState, control]);\n}\n\nvar isString = (value) => typeof value === 'string';\n\nvar generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) => {\n if (isString(names)) {\n isGlobal && _names.watch.add(names);\n return get(formValues, names, defaultValue);\n }\n if (Array.isArray(names)) {\n return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName),\n get(formValues, fieldName)));\n }\n isGlobal && (_names.watchAll = true);\n return formValues;\n};\n\nvar isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);\n\nfunction deepEqual(object1, object2, _internal_visited = new WeakSet()) {\n if (isPrimitive(object1) || isPrimitive(object2)) {\n return Object.is(object1, object2);\n }\n if (isDateObject(object1) && isDateObject(object2)) {\n return Object.is(object1.getTime(), object2.getTime());\n }\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n if (_internal_visited.has(object1) || _internal_visited.has(object2)) {\n return true;\n }\n _internal_visited.add(object1);\n _internal_visited.add(object2);\n for (const key of keys1) {\n const val1 = object1[key];\n if (!keys2.includes(key)) {\n return false;\n }\n if (key !== 'ref') {\n const val2 = object2[key];\n if ((isDateObject(val1) && isDateObject(val2)) ||\n (isObject(val1) && isObject(val2)) ||\n (Array.isArray(val1) && Array.isArray(val2))\n ? !deepEqual(val1, val2, _internal_visited)\n : !Object.is(val1, val2)) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * name: \"fieldName\"\n * control,\n * })\n * ```\n */\nfunction useWatch(props) {\n const formControl = useFormControlContext();\n const { control = formControl, name, defaultValue, disabled, exact, compute, } = props || {};\n const _defaultValue = React.useRef(defaultValue);\n const _compute = React.useRef(compute);\n const _computeFormValues = React.useRef(undefined);\n const _prevControl = React.useRef(control);\n const _prevName = React.useRef(name);\n _compute.current = compute;\n const [value, updateValue] = React.useState(() => {\n const defaultValue = control._getWatch(name, _defaultValue.current);\n return _compute.current ? _compute.current(defaultValue) : defaultValue;\n });\n const getCurrentOutput = React.useCallback((values) => {\n const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n return _compute.current ? _compute.current(formValues) : formValues;\n }, [control._formValues, control._names, name]);\n const refreshValue = React.useCallback((values) => {\n if (!disabled) {\n const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n if (_compute.current) {\n const computedFormValues = _compute.current(formValues);\n if (!deepEqual(computedFormValues, _computeFormValues.current)) {\n updateValue(computedFormValues);\n _computeFormValues.current = computedFormValues;\n }\n }\n else {\n updateValue(formValues);\n }\n }\n }, [control._formValues, control._names, disabled, name]);\n useIsomorphicLayoutEffect(() => {\n if (_prevControl.current !== control ||\n !deepEqual(_prevName.current, name)) {\n _prevControl.current = control;\n _prevName.current = name;\n refreshValue();\n }\n return control._subscribe({\n name,\n formState: {\n values: true,\n },\n exact,\n callback: (formState) => {\n refreshValue(formState.values);\n },\n });\n }, [control, exact, name, refreshValue]);\n React.useEffect(() => control._removeUnmounted());\n // If name or control changed for this render, synchronously reflect the\n // latest value so callers (like useController) see the correct value\n // immediately on the same render.\n // Optimize: Check control reference first before expensive deepEqual\n const controlChanged = _prevControl.current !== control;\n const prevName = _prevName.current;\n // Cache the computed output to avoid duplicate calls within the same render\n // We include shouldReturnImmediate in deps to ensure proper recomputation\n const computedOutput = React.useMemo(() => {\n if (disabled) {\n return null;\n }\n const nameChanged = !controlChanged && !deepEqual(prevName, name);\n const shouldReturnImmediate = controlChanged || nameChanged;\n return shouldReturnImmediate ? getCurrentOutput() : null;\n }, [disabled, controlChanged, name, prevName, getCurrentOutput]);\n return computedOutput !== null ? computedOutput : value;\n}\n\n/**\n * Custom hook to work with controlled component, this function provide you with both form and field level state. Re-render is isolated at the hook level.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller) • [Demo](https://codesandbox.io/s/usecontroller-0o8px)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns field properties, field and form state. {@link UseControllerReturn}\n *\n * @example\n * ```tsx\n * function Input(props) {\n * const { field, fieldState, formState } = useController(props);\n * return (\n * <div>\n * <input {...field} placeholder={props.name} />\n * <p>{fieldState.isTouched && \"Touched\"}</p>\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n * </div>\n * );\n * }\n * ```\n */\nfunction useController(props) {\n const formControl = useFormControlContext();\n const { name, disabled, control = formControl, shouldUnregister, defaultValue, exact = true, } = props;\n const isArrayField = isNameInFieldArray(control._names.array, name);\n const defaultValueMemo = React.useMemo(() => get(control._formValues, name, get(control._defaultValues, name, defaultValue)), [control, name, defaultValue]);\n const value = useWatch({\n control,\n name,\n defaultValue: defaultValueMemo,\n exact,\n });\n const formState = useFormState({\n control,\n name,\n exact,\n });\n const _props = React.useRef(props);\n const _previousNameRef = React.useRef(undefined);\n const _registerProps = React.useRef(control.register(name, {\n ...props.rules,\n value,\n ...(isBoolean(props.disabled) ? { disabled: props.disabled } : {}),\n }));\n _props.current = props;\n const fieldState = React.useMemo(() => Object.defineProperties({}, {\n invalid: {\n enumerable: true,\n get: () => !!get(formState.errors, name),\n },\n isDirty: {\n enumerable: true,\n get: () => !!get(formState.dirtyFields, name),\n },\n isTouched: {\n enumerable: true,\n get: () => !!get(formState.touchedFields, name),\n },\n isValidating: {\n enumerable: true,\n get: () => !!get(formState.validatingFields, name),\n },\n error: {\n enumerable: true,\n get: () => get(formState.errors, name),\n },\n }), [formState, name]);\n const onChange = React.useCallback((event) => _registerProps.current.onChange({\n target: {\n value: getEventValue(event),\n name: name,\n },\n type: EVENTS.CHANGE,\n }), [name]);\n const onBlur = React.useCallback(() => _registerProps.current.onBlur({\n target: {\n value: get(control._formValues, name),\n name: name,\n },\n type: EVENTS.BLUR,\n }), [name, control._formValues]);\n const ref = React.useCallback((elm) => {\n const field = get(control._fields, name);\n if (field && field._f && elm) {\n field._f.ref = {\n focus: () => isFunction(elm.focus) && elm.focus(),\n select: () => isFunction(elm.select) && elm.select(),\n setCustomValidity: (message) => isFunction(elm.setCustomValidity) && elm.setCustomValidity(message),\n reportValidity: () => isFunction(elm.reportValidity) && elm.reportValidity(),\n };\n }\n }, [control._fields, name]);\n const field = React.useMemo(() => ({\n name,\n value,\n ...(isBoolean(disabled) || formState.disabled\n ? { disabled: formState.disabled || disabled }\n : {}),\n onChange,\n onBlur,\n ref,\n }), [name, disabled, formState.disabled, onChange, onBlur, ref, value]);\n React.useEffect(() => {\n const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;\n const previousName = _previousNameRef.current;\n if (previousName && previousName !== name && !isArrayField) {\n control.unregister(previousName);\n }\n control.register(name, {\n ..._props.current.rules,\n ...(isBoolean(_props.current.disabled)\n ? { disabled: _props.current.disabled }\n : {}),\n });\n const updateMounted = (name, value) => {\n const field = get(control._fields, name);\n if (field && field._f) {\n field._f.mount = value;\n }\n };\n updateMounted(name, true);\n if (_shouldUnregisterField) {\n const value = cloneObject(get(control._options.defaultValues, name, _props.current.defaultValue));\n set(control._defaultValues, name, value);\n if (isUndefined(get(control._formValues, name))) {\n set(control._formValues, name, value);\n }\n }\n !isArrayField && control.register(name);\n _previousNameRef.current = name;\n return () => {\n (isArrayField\n ? _shouldUnregisterField && !control._state.action\n : _shouldUnregisterField)\n ? control.unregister(name)\n : updateMounted(name, false);\n };\n }, [name, control, isArrayField, shouldUnregister]);\n React.useEffect(() => {\n control._setDisabledField({\n disabled,\n name,\n });\n }, [disabled, name, control]);\n return React.useMemo(() => ({\n field,\n formState,\n fieldState,\n }), [field, formState, fieldState]);\n}\n\n/**\n * Component based on `useController` hook to work with controlled component.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller/controller) • [Demo](https://codesandbox.io/s/react-hook-form-v6-controller-ts-jwyzw) • [Video](https://www.youtube.com/watch?v=N2UNk_UCVyA)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns provide field handler functions, field and form state.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control } = useForm<FormValues>({\n * defaultValues: {\n * test: \"\"\n * }\n * });\n *\n * return (\n * <form>\n * <Controller\n * control={control}\n * name=\"test\"\n * render={({ field: { onChange, onBlur, value, ref }, formState, fieldState }) => (\n * <>\n * <input\n * onChange={onChange} // send value to hook form\n * onBlur={onBlur} // notify when input is touched\n * value={value} // return updated value\n * ref={ref} // set ref for focus management\n * />\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n * <p>{fieldState.isTouched ? \"touched\" : \"\"}</p>\n * </>\n * )}\n * />\n * </form>\n * );\n * }\n * ```\n */\nconst Controller = (props) => props.render(useController(props));\n\nconst flatten = (obj) => {\n const output = {};\n for (const key of Object.keys(obj)) {\n if (isObjectType(obj[key]) && obj[key] !== null) {\n const nested = flatten(obj[key]);\n for (const nestedKey of Object.keys(nested)) {\n output[`${key}.${nestedKey}`] = nested[nestedKey];\n }\n }\n else {\n output[key] = obj[key];\n }\n }\n return output;\n};\n\nconst HookFormContext = React.createContext(null);\nHookFormContext.displayName = 'HookFormContext';\n/**\n * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @returns return all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * <FormProvider {...methods} >\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\n * <NestedInput />\n * <input type=\"submit\" />\n * </form>\n * </FormProvider>\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst useFormContext = () => React.useContext(HookFormContext);\n/**\n * A provider component that propagates the `useForm` methods to all children components via [React Context](https://react.dev/reference/react/useContext) API. To be used with {@link useFormContext}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @param props - all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * <FormProvider {...methods} >\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\n * <NestedInput />\n * <input type=\"submit\" />\n * </form>\n * </FormProvider>\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst FormProvider = (props) => {\n const { children, watch, getValues, getFieldState, setError, clearErrors, setValue, trigger, formState, resetField, reset, handleSubmit, unregister, control, register, setFocus, subscribe, } = props;\n return (React.createElement(HookFormContext.Provider, { value: React.useMemo(() => ({\n watch,\n getValues,\n getFieldState,\n setError,\n clearErrors,\n setValue,\n trigger,\n formState,\n resetField,\n reset,\n handleSubmit,\n unregister,\n control,\n register,\n setFocus,\n subscribe,\n }), [\n clearErrors,\n control,\n formState,\n getFieldState,\n getValues,\n handleSubmit,\n register,\n reset,\n resetField,\n setError,\n setFocus,\n setValue,\n subscribe,\n trigger,\n unregister,\n watch,\n ]) },\n React.createElement(HookFormControlContext.Provider, { value: control }, children)));\n};\n\nconst POST_REQUEST = 'post';\n/**\n * Form component to manage submission.\n *\n * @param props - to setup submission detail. {@link FormProps}\n *\n * @returns form component or headless render prop.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control, formState: { errors } } = useForm();\n *\n * return (\n * <Form action=\"/api\" control={control}>\n * <input {...register(\"name\")} />\n * <p>{errors?.root?.server && 'Server error'}</p>\n * <button>Submit</button>\n * </Form>\n * );\n * }\n * ```\n */\nfunction Form(props) {\n const methods = useFormContext();\n const [mounted, setMounted] = React.useState(false);\n const { control = methods.control, onSubmit, children, action, method = POST_REQUEST, headers, encType, onError, render, onSuccess, validateStatus, ...rest } = props;\n const submit = async (event) => {\n let hasError = false;\n let type = '';\n await control.handleSubmit(async (data) => {\n const formData = new FormData();\n let formDataJson = '';\n try {\n formDataJson = JSON.stringify(data);\n }\n catch (_a) { }\n const flattenFormValues = flatten(control._formValues);\n for (const key in flattenFormValues) {\n formData.append(key, flattenFormValues[key]);\n }\n if (onSubmit) {\n await onSubmit({\n data,\n event,\n method,\n formData,\n formDataJson,\n });\n }\n if (action) {\n try {\n const shouldStringifySubmissionData = [\n headers && headers['Content-Type'],\n encType,\n ].some((value) => value && value.includes('json'));\n const response = await fetch(String(action), {\n method,\n headers: {\n ...headers,\n ...(encType && encType !== 'multipart/form-data'\n ? { 'Content-Type': encType }\n : {}),\n },\n body: shouldStringifySubmissionData ? formDataJson : formData,\n });\n if (response &&\n (validateStatus\n ? !validateStatus(response.status)\n : response.status < 200 || response.status >= 300)) {\n hasError = true;\n onError && onError({ response });\n type = String(response.status);\n }\n else {\n onSuccess && onSuccess({ response });\n }\n }\n catch (error) {\n hasError = true;\n onError && onError({ error });\n }\n }\n })(event);\n if (hasError && props.control) {\n props.control._subjects.state.next({\n isSubmitSuccessful: false,\n });\n props.control.setError('root.server', {\n type,\n });\n }\n };\n React.useEffect(() => {\n setMounted(true);\n }, []);\n return render ? (React.createElement(React.Fragment, null, render({\n submit,\n }))) : (React.createElement(\"form\", { noValidate: mounted, action: action, method: method, encType: encType, onSubmit: submit, ...rest }, children));\n}\n\nconst FormStateSubscribe = ({ control, disabled, exact, name, render, }) => render(useFormState({ control, name, disabled, exact }));\n\nvar appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria\n ? {\n ...errors[name],\n types: {\n ...(errors[name] && errors[name].types ? errors[name].types : {}),\n [type]: message || true,\n },\n }\n : {};\n\nvar convertToArrayPayload = (value) => (Array.isArray(value) ? value : [value]);\n\nvar createSubject = () => {\n let _observers = [];\n const next = (value) => {\n for (const observer of _observers) {\n observer.next && observer.next(value);\n }\n };\n const subscribe = (observer) => {\n _observers.push(observer);\n return {\n unsubscribe: () => {\n _observers = _observers.filter((o) => o !== observer);\n },\n };\n };\n const unsubscribe = () => {\n _observers = [];\n };\n return {\n get observers() {\n return _observers;\n },\n next,\n subscribe,\n unsubscribe,\n };\n};\n\nfunction extractFormValues(fieldsState, formValues) {\n const values = {};\n for (const key in fieldsState) {\n if (fieldsState.hasOwnProperty(key)) {\n const fieldState = fieldsState[key];\n const fieldValue = formValues[key];\n if (fieldState && isObject(fieldState) && fieldValue) {\n const nestedFieldsState = extractFormValues(fieldState, fieldValue);\n if (isObject(nestedFieldsState)) {\n values[key] = nestedFieldsState;\n }\n }\n else if (fieldsState[key]) {\n values[key] = fieldValue;\n }\n }\n }\n return values;\n}\n\nvar isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;\n\nvar isFileInput = (element) => element.type === 'file';\n\nvar isHTMLElement = (value) => {\n if (!isWeb) {\n return false;\n }\n const owner = value ? value.ownerDocument : 0;\n return (value instanceof\n (owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement));\n};\n\nvar isMultipleSelect = (element) => element.type === `select-multiple`;\n\nvar isRadioInput = (element) => element.type === 'radio';\n\nvar isRadioOrCheckbox = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);\n\nvar live = (ref) => isHTMLElement(ref) && ref.isConnected;\n\nfunction baseGet(object, updatePath) {\n const length = updatePath.slice(0, -1).length;\n let index = 0;\n while (index < length) {\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\n }\n return object;\n}\nfunction isEmptyArray(obj) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && !isUndefined(obj[key])) {\n return false;\n }\n }\n return true;\n}\nfunction unset(object, path) {\n const paths = Array.isArray(path)\n ? path\n : isKey(path)\n ? [path]\n : stringToPath(path);\n const childObject = paths.length === 1 ? object : baseGet(object, paths);\n const index = paths.length - 1;\n const key = paths[index];\n if (childObject) {\n delete childObject[key];\n }\n if (index !== 0 &&\n ((isObject(childObject) && isEmptyObject(childObject)) ||\n (Array.isArray(childObject) && isEmptyArray(childObject)))) {\n unset(object, paths.slice(0, -1));\n }\n return object;\n}\n\nvar objectHasFunction = (data) => {\n for (const key in data) {\n if (isFunction(data[key])) {\n return true;\n }\n }\n return false;\n};\n\nfunction isTraversable(value) {\n return Array.isArray(value) || (isObject(value) && !objectHasFunction(value));\n}\nfunction markFieldsDirty(data, fields = {}) {\n for (const key in data) {\n const value = data[key];\n if (isTraversable(value)) {\n fields[key] = Array.isArray(value) ? [] : {};\n markFieldsDirty(value, fields[key]);\n }\n else if (!isUndefined(value)) {\n fields[key] = true;\n }\n }\n return fields;\n}\nfunction getDirtyFields(data, formValues, dirtyFieldsFromValues) {\n if (!dirtyFieldsFromValues) {\n dirtyFieldsFromValues = markFieldsDirty(formValues);\n }\n for (const key in data) {\n const value = data[key];\n if (isTraversable(value)) {\n if (isUndefined(formValues) || isPrimitive(dirtyFieldsFromValues[key])) {\n dirtyFieldsFromValues[key] = markFieldsDirty(value, Array.isArray(value) ? [] : {});\n }\n else {\n getDirtyFields(value, isNullOrUndefined(formValues) ? {} : formValues[key], dirtyFieldsFromValues[key]);\n }\n }\n else {\n const formValue = formValues[key];\n dirtyFieldsFromValues[key] = !deepEqual(value, formValue);\n }\n }\n return dirtyFieldsFromValues;\n}\n\nconst defaultResult = {\n value: false,\n isValid: false,\n};\nconst validResult = { value: true, isValid: true };\nvar getCheckboxValue = (options) => {\n if (Array.isArray(options)) {\n if (options.length > 1) {\n const values = options\n .filter((option) => option && option.checked && !option.disabled)\n .map((option) => option.value);\n return { value: values, isValid: !!values.length };\n }\n return options[0].checked && !options[0].disabled\n ? // @ts-expect-error expected to work in the browser\n options[0].attributes && !isUndefined(options[0].attributes.value)\n ? isUndefined(options[0].value) || options[0].value === ''\n ? validResult\n : { value: options[0].value, isValid: true }\n : validResult\n : defaultResult;\n }\n return defaultResult;\n};\n\nvar getFieldValueAs = (value, { valueAsNumber, valueAsDate, setValueAs }) => isUndefined(value)\n ? value\n : valueAsNumber\n ? value === ''\n ? NaN\n : value\n ? +value\n : value\n : valueAsDate && isString(value)\n ? new Date(value)\n : setValueAs\n ? setValueAs(value)\n : value;\n\nconst defaultReturn = {\n isValid: false,\n value: null,\n};\nvar getRadioValue = (options) => Array.isArray(options)\n ? options.reduce((previous, option) => option && option.checked && !option.disabled\n ? {\n isValid: true,\n value: option.value,\n }\n : previous, defaultReturn)\n : defaultReturn;\n\nfunction getFieldValue(_f) {\n const ref = _f.ref;\n if (isFileInput(ref)) {\n return ref.files;\n }\n if (isRadioInput(ref)) {\n return getRadioValue(_f.refs).value;\n }\n if (isMultipleSelect(ref)) {\n return [...ref.selectedOptions].map(({ value }) => value);\n }\n if (isCheckBoxInput(ref)) {\n return getCheckboxValue(_f.refs).value;\n }\n return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);\n}\n\nvar getResolverOptions = (fieldsNames, _fields, criteriaMode, shouldUseNativeValidation) => {\n const fields = {};\n for (const name of fieldsNames) {\n const field = get(_fields, name);\n field && set(fields, name, field._f);\n }\n return {\n criteriaMode,\n names: [...fieldsNames],\n fields,\n shouldUseNativeValidation,\n };\n};\n\nvar isRegex = (value) => value instanceof RegExp;\n\nvar getRuleValue = (rule) => isUndefined(rule)\n ? rule\n : isRegex(rule)\n ? rule.source\n : isObject(rule)\n ? isRegex(rule.value)\n ? rule.value.source\n : rule.value\n : rule;\n\nvar getValidationModes = (mode) => ({\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\n isOnBlur: mode === VALIDATION_MODE.onBlur,\n isOnChange: mode === VALIDATION_MODE.onChange,\n isOnAll: mode === VALIDATION_MODE.all,\n isOnTouch: mode === VALIDATION_MODE.onTouched,\n});\n\nconst ASYNC_FUNCTION = 'AsyncFunction';\nvar hasPromiseValidation = (fieldReference) => !!fieldReference &&\n !!fieldReference.validate &&\n !!((isFunction(fieldReference.validate) &&\n fieldReference.validate.constructor.name === ASYNC_FUNCTION) ||\n (isObject(fieldReference.validate) &&\n Object.values(fieldReference.validate).find((validateFunction) => validateFunction.constructor.name === ASYNC_FUNCTION)));\n\nvar hasValidation = (options) => options.mount &&\n (options.required ||\n options.min ||\n options.max ||\n options.maxLength ||\n options.minLength ||\n options.pattern ||\n options.validate);\n\nvar isWatched = (name, _names, isBlurEvent) => !isBlurEvent &&\n (_names.watchAll ||\n _names.watch.has(name) ||\n [..._names.watch].some((watchName) => name.startsWith(watchName) &&\n /^\\.\\w+/.test(name.slice(watchName.length))));\n\nconst iterateFieldsByAction = (fields, action, fieldsNames, abortEarly) => {\n for (const key of fieldsNames || Object.keys(fields)) {\n const field = get(fields, key);\n if (field) {\n const { _f, ...currentField } = field;\n if (_f) {\n if (_f.refs && _f.refs[0] && action(_f.refs[0], key) && !abortEarly) {\n return true;\n }\n else if (_f.ref && action(_f.ref, _f.name) && !abortEarly) {\n return true;\n }\n else {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n }\n else if (isObject(currentField)) {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n }\n }\n return;\n};\n\nfunction schemaErrorLookup(errors, _fields, name) {\n const error = get(errors, name);\n if (error || isKey(name)) {\n return {\n error,\n name,\n };\n }\n const names = name.split('.');\n while (names.length) {\n const fieldName = names.join('.');\n const field = get(_fields, fieldName);\n const foundError = get(errors, fieldName);\n if (field && !Array.isArray(field) && name !== fieldName) {\n return { name };\n }\n if (foundError && foundError.type) {\n return {\n name: fieldName,\n error: foundError,\n };\n }\n if (foundError && foundError.root && foundError.root.type) {\n return {\n name: `${fieldName}.root`,\n error: foundError.root,\n };\n }\n names.pop();\n }\n return {\n name,\n };\n}\n\nvar shouldRenderFormState = (formStateData, _proxyFormState, updateFormState, isRoot) => {\n updateFormState(formStateData);\n const { name, ...formState } = formStateData;\n return (isEmptyObject(formState) ||\n Object.keys(formState).length >= Object.keys(_proxyFormState).length ||\n Object.keys(formState).find((key) => _proxyFormState[key] ===\n (!isRoot || VALIDATION_MODE.all)));\n};\n\nvar shouldSubscribeByName = (name, signalName, exact) => !name ||\n !signalName ||\n name === signalName ||\n convertToArrayPayload(name).some((currentName) => currentName &&\n (exact\n ? currentName === signalName\n : currentName.startsWith(signalName) ||\n signalName.startsWith(currentName)));\n\nvar skipValidation = (isBlurEvent, isTouched, isSubmitted, reValidateMode, mode) => {\n if (mode.isOnAll) {\n return false;\n }\n else if (!isSubmitted && mode.isOnTouch) {\n return !(isTouched || isBlurEvent);\n }\n else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {\n return !isBlurEvent;\n }\n else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {\n return isBlurEvent;\n }\n return true;\n};\n\nvar unsetEmptyArray = (ref, name) => !compact(get(ref, name)).length && unset(ref, name);\n\nvar updateFieldArrayRootError = (errors, error, name) => {\n const fieldArrayErrors = convertToArrayPayload(get(errors, name));\n set(fieldArrayErrors, 'root', error[name]);\n set(errors, name, fieldArrayErrors);\n return errors;\n};\n\nfunction getValidateError(result, ref, type = 'validate') {\n if (isString(result) ||\n (Array.isArray(result) && result.every(isString)) ||\n (isBoolean(result) && !result)) {\n return {\n type,\n message: isString(result) ? result : '',\n ref,\n };\n }\n}\n\nvar getValueAndMessage = (validationData) => isObject(validationData) && !isRegex(validationData)\n ? validationData\n : {\n value: validationData,\n message: '',\n };\n\nvar validateField = async (field, disabledFieldNames, formValues, validateAllFieldCriteria, shouldUseNativeValidation, isFieldArray) => {\n const { ref, refs, required, maxLength, minLength, min, max, pattern, validate, name, valueAsNumber, mount, } = field._f;\n const inputValue = get(formValues, name);\n if (!mount || disabledFieldNames.has(name)) {\n return {};\n }\n const inputRef = refs ? refs[0] : ref;\n const setCustomValidity = (message) => {\n if (shouldUseNativeValidation && inputRef.reportValidity) {\n inputRef.setCustomValidity(isBoolean(message) ? '' : message || '');\n inputRef.reportValidity();\n }\n };\n const error = {};\n const isRadio = isRadioInput(ref);\n const isCheckBox = isCheckBoxInput(ref);\n const isRadioOrCheckbox = isRadio || isCheckBox;\n const isEmpty = ((valueAsNumber || isFileInput(ref)) &&\n isUndefined(ref.value) &&\n isUndefined(inputValue)) ||\n (isHTMLElement(ref) && ref.value === '') ||\n inputValue === '' ||\n (Array.isArray(inputValue) && !inputValue.length);\n const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);\n const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\n error[name] = {\n type: exceedMax ? maxType : minType,\n message,\n ref,\n ...appendErrorsCurry(exceedMax ? maxType : minType, message),\n };\n };\n if (isFieldArray\n ? !Array.isArray(inputValue) || !inputValue.length\n : required &&\n ((!isRadioOrCheckbox && (isEmpty || isNullOrUndefined(inputValue))) ||\n (isBoolean(inputValue) && !inputValue) ||\n (isCheckBox && !getCheckboxValue(refs).isValid) ||\n (isRadio && !getRadioValue(refs).isValid))) {\n const { value, message } = isString(required)\n ? { value: !!required, message: required }\n : getValueAndMessage(required);\n if (value) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.required,\n message,\n ref: inputRef,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {\n let exceedMax;\n let exceedMin;\n const maxOutput = getValueAndMessage(max);\n const minOutput = getValueAndMessage(min);\n if (!isNullOrUndefined(inputValue) && !isNaN(inputValue)) {\n const valueNumber = ref.valueAsNumber ||\n (inputValue ? +inputValue : inputValue);\n if (!isNullOrUndefined(maxOutput.value)) {\n exceedMax = valueNumber > maxOutput.value;\n }\n if (!isNullOrUndefined(minOutput.value)) {\n exceedMin = valueNumber < minOutput.value;\n }\n }\n else {\n const valueDate = ref.valueAsDate || new Date(inputValue);\n const convertTimeToDate = (time) => new Date(new Date().toDateString() + ' ' + time);\n const isTime = ref.type == 'time';\n const isWeek = ref.type == 'week';\n if (isString(maxOutput.value) && inputValue) {\n exceedMax = isTime\n ? convertTimeToDate(inputValue) > convertTimeToDate(maxOutput.value)\n : isWeek\n ? inputValue > maxOutput.value\n : valueDate > new Date(maxOutput.value);\n }\n if (isString(minOutput.value) && inputValue) {\n exceedMin = isTime\n ? convertTimeToDate(inputValue) < convertTimeToDate(minOutput.value)\n : isWeek\n ? inputValue < minOutput.value\n : valueDate < new Date(minOutput.value);\n }\n }\n if (exceedMax || exceedMin) {\n getMinMaxMessage(!!exceedMax, maxOutput.message, minOutput.message, INPUT_VALIDATION_RULES.max, INPUT_VALIDATION_RULES.min);\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name].message);\n return error;\n }\n }\n }\n if ((maxLength || minLength) &&\n !isEmpty &&\n (isString(inputValue) || (isFieldArray && Array.isArray(inputValue)))) {\n const maxLengthOutput = getValueAndMessage(maxLength);\n const minLengthOutput = getValueAndMessage(minLength);\n const exceedMax = !isNullOrUndefined(maxLengthOutput.value) &&\n inputValue.length > +maxLengthOutput.value;\n const exceedMin = !isNullOrUndefined(minLengthOutput.value) &&\n inputValue.length < +minLengthOutput.value;\n if (exceedMax || exceedMin) {\n getMinMaxMessage(exceedMax, maxLengthOutput.message, minLengthOutput.message);\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name].message);\n return error;\n }\n }\n }\n if (pattern && !isEmpty && isString(inputValue)) {\n const { value: patternValue, message } = getValueAndMessage(pattern);\n if (isRegex(patternValue) && !inputValue.match(patternValue)) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.pattern,\n message,\n ref,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n if (validate) {\n if (isFunction(validate)) {\n const result = await validate(inputValue, formValues);\n const validateError = getValidateError(result, inputRef);\n if (validateError) {\n error[name] = {\n ...validateError,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.validate, validateError.message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(validateError.message);\n return error;\n }\n }\n }\n else if (isObject(validate)) {\n let validationResult = {};\n for (const key in validate) {\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\n break;\n }\n const validateError = getValidateError(await validate[key](inputValue, formValues), inputRef, key);\n if (validateError) {\n validationResult = {\n ...validateError,\n ...appendErrorsCurry(key, validateError.message),\n };\n setCustomValidity(validateError.message);\n if (validateAllFieldCriteria) {\n error[name] = validationResult;\n }\n }\n }\n if (!isEmptyObject(validationResult)) {\n error[name] = {\n ref: inputRef,\n ...validationResult,\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n }\n setCustomValidity(true);\n return error;\n};\n\nconst defaultOptions = {\n mode: VALIDATION_MODE.onSubmit,\n reValidateMode: VALIDATION_MODE.onChange,\n shouldFocusError: true,\n};\nfunction createFormControl(props = {}) {\n let _options = {\n ...defaultOptions,\n ...props,\n };\n let _formState = {\n submitCount: 0,\n isDirty: false,\n isReady: false,\n isLoading: isFunction(_options.defaultValues),\n isValidating: false,\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n touchedFields: {},\n dirtyFields: {},\n validatingFields: {},\n errors: _options.errors || {},\n disabled: _options.disabled || false,\n };\n let _fields = {};\n let _defaultValues = isObject(_options.defaultValues) || isObject(_options.values)\n ? cloneObject(_options.defaultValues || _options.values) || {}\n : {};\n let _formValues = _options.shouldUnregister\n ? {}\n : cloneObject(_defaultValues);\n let _state = {\n action: false,\n mount: false,\n watch: false,\n keepIsValid: false,\n };\n let _names = {\n mount: new Set(),\n disabled: new Set(),\n unMount: new Set(),\n array: new Set(),\n watch: new Set(),\n };\n let delayErrorCallback;\n let timer = 0;\n const defaultProxyFormState = {\n isDirty: false,\n dirtyFields: false,\n validatingFields: false,\n touchedFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n };\n const _proxyFormState = {\n ...defaultProxyFormState,\n };\n let _proxySubscribeFormState = {\n ..._proxyFormState,\n };\n const _subjects = {\n array: createSubject(),\n state: createSubject(),\n };\n const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;\n const debounce = (callback) => (wait) => {\n clearTimeout(timer);\n timer = setTimeout(callback, wait);\n };\n const _setValid = async (shouldUpdateValid) => {\n if (_state.keepIsValid) {\n return;\n }\n if (!_options.disabled &&\n (_proxyFormState.isValid ||\n _proxySubscribeFormState.isValid ||\n shouldUpdateValid)) {\n let isValid;\n if (_options.resolver) {\n isValid = isEmptyObject((await _runSchema()).errors);\n _updateIsValidating();\n }\n else {\n isValid = await executeBuiltInValidation(_fields, true);\n }\n if (isValid !== _formState.isValid) {\n _subjects.state.next({\n isValid,\n });\n }\n }\n };\n const _updateIsValidating = (names, isValidating) => {\n if (!_options.disabled &&\n (_proxyFormState.isValidating ||\n _proxyFormState.validatingFields ||\n _proxySubscribeFormState.isValidating ||\n _proxySubscribeFormState.validatingFields)) {\n (names || Array.from(_names.mount)).forEach((name) => {\n if (name) {\n isValidating\n ? set(_formState.validatingFields, name, isValidating)\n : unset(_formState.validatingFields, name);\n }\n });\n _subjects.state.next({\n validatingFields: _formState.validatingFields,\n isValidating: !isEmptyObject(_formState.validatingFields),\n });\n }\n };\n const _setFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndState = true) => {\n if (args && method && !_options.disabled) {\n _state.action = true;\n if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {\n const fieldValues = method(get(_fields, name), args.argA, args.argB);\n shouldSetValues && set(_fields, name, fieldValues);\n }\n if (shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.errors, name))) {\n const errors = method(get(_formState.errors, name), args.argA, args.argB);\n shouldSetValues && set(_formState.errors, name, errors);\n unsetEmptyArray(_formState.errors, name);\n }\n if ((_proxyFormState.touchedFields ||\n _proxySubscribeFormState.touchedFields) &&\n shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.touchedFields, name))) {\n const touchedFields = method(get(_formState.touchedFields, name), args.argA, args.argB);\n shouldSetValues && set(_formState.touchedFields, name, touchedFields);\n }\n if (_proxyFormState.dirtyFields || _proxySubscribeFormState.dirtyFields) {\n _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\n }\n _subjects.state.next({\n name,\n isDirty: _getDirty(name, values),\n dirtyFields: _formState.dirtyFields,\n errors: _formState.errors,\n isValid: _formState.isValid,\n });\n }\n else {\n set(_formValues, name, values);\n }\n };\n const updateErrors = (name, error) => {\n set(_formState.errors, name, error);\n _subjects.state.next({\n errors: _formState.errors,\n });\n };\n const _setErrors = (errors) => {\n _formState.errors = errors;\n _subjects.state.next({\n errors: _formState.errors,\n isValid: false,\n });\n };\n const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {\n const field = get(_fields, name);\n if (field) {\n const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);\n isUndefined(defaultValue) ||\n (ref && ref.defaultChecked) ||\n shouldSkipSetValueAs\n ? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f))\n : setFieldValue(name, defaultValue);\n _state.mount && !_state.action && _setValid();\n }\n };\n const updateTouchAndDirty = (name, fieldValue, isBlurEvent, shouldDirty, shouldRender) => {\n let shouldUpdateField = false;\n let isPreviousDirty = false;\n const output = {\n name,\n };\n if (!_options.disabled) {\n if (!isBlurEvent || shouldDirty) {\n if (_proxyFormState.isDirty || _proxySubscribeFormState.isDirty) {\n isPreviousDirty = _formState.isDirty;\n _formState.isDirty = output.isDirty = _getDirty();\n shouldUpdateField = isPreviousDirty !== output.isDirty;\n }\n const isCurrentFieldPristine = deepEqual(get(_defaultValues, name), fieldValue);\n isPreviousDirty = !!get(_formState.dirtyFields, name);\n isCurrentFieldPristine\n ? unset(_formState.dirtyFields, name)\n : set(_formState.dirtyFields, name, true);\n output.dirtyFields = _formState.dirtyFields;\n shouldUpdateField =\n shouldUpdateField ||\n ((_proxyFormState.dirtyFields ||\n _proxySubscribeFormState.dirtyFields) &&\n isPreviousDirty !== !isCurrentFieldPristine);\n }\n if (isBlurEvent) {\n const isPreviousFieldTouched = get(_formState.touchedFields, name);\n if (!isPreviousFieldTouched) {\n set(_formState.touchedFields, name, isBlurEvent);\n output.touchedFields = _formState.touchedFields;\n shouldUpdateField =\n shouldUpdateField ||\n ((_proxyFormState.touchedFields ||\n _proxySubscribeFormState.touchedFields) &&\n isPreviousFieldTouched !== isBlurEvent);\n }\n }\n shouldUpdateField && shouldRender && _subjects.state.next(output);\n }\n return shouldUpdateField ? output : {};\n };\n const shouldRenderByError = (name, isValid, error, fieldState) => {\n const previousFieldError = get(_formState.errors, name);\n const shouldUpdateValid = (_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n isBoolean(isValid) &&\n _formState.isValid !== isValid;\n if (_options.delayError && error) {\n delayErrorCallback = debounce(() => updateErrors(name, error));\n delayErrorCallback(_options.delayError);\n }\n else {\n clearTimeout(timer);\n delayErrorCallback = null;\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n if ((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||\n !isEmptyObject(fieldState) ||\n shouldUpdateValid) {\n const updatedFormState = {\n ...fieldState,\n ...(shouldUpdateValid && isBoolean(isValid) ? { isValid } : {}),\n errors: _formState.errors,\n name,\n };\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n _subjects.state.next(updatedFormState);\n }\n };\n const _runSchema = async (name) => {\n _updateIsValidating(name, true);\n const result = await _options.resolver(_formValues, _options.context, getResolverOptions(name || _names.mount, _fields, _options.criteriaMode, _options.shouldUseNativeValidation));\n return result;\n };\n const executeSchemaAndUpdateState = async (names) => {\n const { errors } = await _runSchema(names);\n _updateIsValidating(names);\n if (names) {\n for (const name of names) {\n const error = get(errors, name);\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n }\n else {\n _formState.errors = errors;\n }\n return errors;\n };\n const executeBuiltInValidation = async (fields, shouldOnlyCheckValid, context = {\n valid: true,\n }) => {\n for (const name in fields) {\n const field = fields[name];\n if (field) {\n const { _f, ...fieldValue } = field;\n if (_f) {\n const isFieldArrayRoot = _names.array.has(_f.name);\n const isPromiseFunction = field._f && hasPromiseValidation(field._f);\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([_f.name], true);\n }\n const fieldError = await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation && !shouldOnlyCheckValid, isFieldArrayRoot);\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([_f.name]);\n }\n if (fieldError[_f.name]) {\n context.valid = false;\n if (shouldOnlyCheckValid || props.shouldUseNativeValidation) {\n break;\n }\n }\n !shouldOnlyCheckValid &&\n (get(fieldError, _f.name)\n ? isFieldArrayRoot\n ? updateFieldArrayRootError(_formState.errors, fieldError, _f.name)\n : set(_formState.errors, _f.name, fieldError[_f.name])\n : unset(_formState.errors, _f.name));\n }\n !isEmptyObject(fieldValue) &&\n (await executeBuiltInValidation(fieldValue, shouldOnlyCheckValid, context));\n }\n }\n return context.valid;\n };\n const _removeUnmounted = () => {\n for (const name of _names.unMount) {\n const field = get(_fields, name);\n field &&\n (field._f.refs\n ? field._f.refs.every((ref) => !live(ref))\n : !live(field._f.ref)) &&\n unregister(name);\n }\n _names.unMount = new Set();\n };\n const _getDirty = (name, data) => !_options.disabled &&\n (name && data && set(_formValues, name, data),\n !deepEqual(getValues(), _defaultValues));\n const _getWatch = (names, defaultValue, isGlobal) => generateWatchOutput(names, _names, {\n ...(_state.mount\n ? _formValues\n : isUndefined(defaultValue)\n ? _defaultValues\n : isString(names)\n ? { [names]: defaultValue }\n : defaultValue),\n }, isGlobal, defaultValue);\n const _getFieldArray = (name) => compact(get(_state.mount ? _formValues : _defaultValues, name, _options.shouldUnregister ? get(_defaultValues, name, []) : []));\n const setFieldValue = (name, value, options = {}) => {\n const field = get(_fields, name);\n let fieldValue = value;\n if (field) {\n const fieldReference = field._f;\n if (fieldReference) {\n !fieldReference.disabled &&\n set(_formValues, name, getFieldValueAs(value, fieldReference));\n fieldValue =\n isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)\n ? ''\n : value;\n if (isMultipleSelect(fieldReference.ref)) {\n [...fieldReference.ref.options].forEach((optionRef) => (optionRef.selected = fieldValue.includes(optionRef.value)));\n }\n else if (fieldReference.refs) {\n if (isCheckBoxInput(fieldReference.ref)) {\n fieldReference.refs.forEach((checkboxRef) => {\n if (!checkboxRef.defaultChecked || !checkboxRef.disabled) {\n if (Array.isArray(fieldValue)) {\n checkboxRef.checked = !!fieldValue.find((data) => data === checkboxRef.value);\n }\n else {\n checkboxRef.checked =\n fieldValue === checkboxRef.value || !!fieldValue;\n }\n }\n });\n }\n else {\n fieldReference.refs.forEach((radioRef) => (radioRef.checked = radioRef.value === fieldValue));\n }\n }\n else if (isFileInput(fieldReference.ref)) {\n fieldReference.ref.value = '';\n }\n else {\n fieldReference.ref.value = fieldValue;\n if (!fieldReference.ref.type) {\n _subjects.state.next({\n name,\n values: cloneObject(_formValues),\n });\n }\n }\n }\n }\n (options.shouldDirty || options.shouldTouch) &&\n updateTouchAndDirty(name, fieldValue, options.shouldTouch, options.shouldDirty, true);\n options.shouldValidate && trigger(name);\n };\n const setValues = (name, value, options) => {\n for (const fieldKey in value) {\n if (!value.hasOwnProperty(fieldKey)) {\n return;\n }\n const fieldValue = value[fieldKey];\n const fieldName = name + '.' + fieldKey;\n const field = get(_fields, fieldName);\n (_names.array.has(name) ||\n isObject(fieldValue) ||\n (field && !field._f)) &&\n !isDateObject(fieldValue)\n ? setValues(fieldName, fieldValue, options)\n : setFieldValue(fieldName, fieldValue, options);\n }\n };\n const setValue = (name, value, options = {}) => {\n const field = get(_fields, name);\n const isFieldArray = _names.array.has(name);\n const cloneValue = cloneObject(value);\n set(_formValues, name, cloneValue);\n if (isFieldArray) {\n _subjects.array.next({\n name,\n values: cloneObject(_formValues),\n });\n if ((_proxyFormState.isDirty ||\n _proxyFormState.dirtyFields ||\n _proxySubscribeFormState.isDirty ||\n _proxySubscribeFormState.dirtyFields) &&\n options.shouldDirty) {\n _subjects.state.next({\n name,\n dirtyFields: getDirtyFields(_defaultValues, _formValues),\n isDirty: _getDirty(name, cloneValue),\n });\n }\n }\n else {\n field && !field._f && !isNullOrUndefined(cloneValue)\n ? setValues(name, cloneValue, options)\n : setFieldValue(name, cloneValue, options);\n }\n if (isWatched(name, _names)) {\n _subjects.state.next({\n ..._formState,\n name,\n values: cloneObject(_formValues),\n });\n }\n else {\n _subjects.state.next({\n name: _state.mount ? name : undefined,\n values: cloneObject(_formValues),\n });\n }\n };\n const onChange = async (event) => {\n _state.mount = true;\n const target = event.target;\n let name = target.name;\n let isFieldValueUpdated = true;\n const field = get(_fields, name);\n const _updateIsFieldValueUpdated = (fieldValue) => {\n isFieldValueUpdated =\n Number.isNaN(fieldValue) ||\n (isDateObject(fieldValue) && isNaN(fieldValue.getTime())) ||\n deepEqual(fieldValue, get(_formValues, name, fieldValue));\n };\n const validationModeBeforeSubmit = getValidationModes(_options.mode);\n const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\n if (field) {\n let error;\n let isValid;\n const fieldValue = target.type\n ? getFieldValue(field._f)\n : getEventValue(event);\n const isBlurEvent = event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;\n const shouldSkipValidation = (!hasValidation(field._f) &&\n !_options.resolver &&\n !get(_formState.errors, name) &&\n !field._f.deps) ||\n skipValidation(isBlurEvent, get(_formState.touchedFields, name), _formState.isSubmitted, validationModeAfterSubmit, validationModeBeforeSubmit);\n const watched = isWatched(name, _names, isBlurEvent);\n set(_formValues, name, fieldValue);\n if (isBlurEvent) {\n if (!target || !target.readOnly) {\n field._f.onBlur && field._f.onBlur(event);\n delayErrorCallback && delayErrorCallback(0);\n }\n }\n else if (field._f.onChange) {\n field._f.onChange(event);\n }\n const fieldState = updateTouchAndDirty(name, fieldValue, isBlurEvent);\n const shouldRender = !isEmptyObject(fieldState) || watched;\n !isBlurEvent &&\n _subjects.state.next({\n name,\n type: event.type,\n values: cloneObject(_formValues),\n });\n if (shouldSkipValidation) {\n if (_proxyFormState.isValid || _proxySubscribeFormState.isValid) {\n if (_options.mode === 'onBlur') {\n if (isBlurEvent) {\n _setValid();\n }\n }\n else if (!isBlurEvent) {\n _setValid();\n }\n }\n return (shouldRender &&\n _subjects.state.next({ name, ...(watched ? {} : fieldState) }));\n }\n !isBlurEvent && watched && _subjects.state.next({ ..._formState });\n if (_options.resolver) {\n const { errors } = await _runSchema([name]);\n _updateIsValidating([name]);\n _updateIsFieldValueUpdated(fieldValue);\n if (isFieldValueUpdated) {\n const previousErrorLookupResult = schemaErrorLookup(_formState.errors, _fields, name);\n const errorLookupResult = schemaErrorLookup(errors, _fields, previousErrorLookupResult.name || name);\n error = errorLookupResult.error;\n name = errorLookupResult.name;\n isValid = isEmptyObject(errors);\n }\n }\n else {\n _updateIsValidating([name], true);\n error = (await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation))[name];\n _updateIsValidating([name]);\n _updateIsFieldValueUpdated(fieldValue);\n if (isFieldValueUpdated) {\n if (error) {\n isValid = false;\n }\n else if (_proxyFormState.isValid ||\n _proxySubscribeFormState.isValid) {\n isValid = await executeBuiltInValidation(_fields, true);\n }\n }\n }\n if (isFieldValueUpdated) {\n field._f.deps &&\n (!Array.isArray(field._f.deps) || field._f.deps.length > 0) &&\n trigger(field._f.deps);\n shouldRenderByError(name, isValid, error, fieldState);\n }\n }\n };\n const _focusInput = (ref, key) => {\n if (get(_formState.errors, key) && ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n };\n const trigger = async (name, options = {}) => {\n let isValid;\n let validationResult;\n const fieldNames = convertToArrayPayload(name);\n if (_options.resolver) {\n const errors = await executeSchemaAndUpdateState(isUndefined(name) ? name : fieldNames);\n isValid = isEmptyObject(errors);\n validationResult = name\n ? !fieldNames.some((name) => get(errors, name))\n : isValid;\n }\n else if (name) {\n validationResult = (await Promise.all(fieldNames.map(async (fieldName) => {\n const field = get(_fields, fieldName);\n return await executeBuiltInValidation(field && field._f ? { [fieldName]: field } : field);\n }))).every(Boolean);\n !(!validationResult && !_formState.isValid) && _setValid();\n }\n else {\n validationResult = isValid = await executeBuiltInValidation(_fields);\n }\n _subjects.state.next({\n ...(!isString(name) ||\n ((_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n isValid !== _formState.isValid)\n ? {}\n : { name }),\n ...(_options.resolver || !name ? { isValid } : {}),\n errors: _formState.errors,\n });\n options.shouldFocus &&\n !validationResult &&\n iterateFieldsByAction(_fields, _focusInput, name ? fieldNames : _names.mount);\n return validationResult;\n };\n const getValues = (fieldNames, config) => {\n let values = {\n ...(_state.mount ? _formValues : _defaultValues),\n };\n if (config) {\n values = extractFormValues(config.dirtyFields ? _formState.dirtyFields : _formState.touchedFields, values);\n }\n return isUndefined(fieldNames)\n ? values\n : isString(fieldNames)\n ? get(values, fieldNames)\n : fieldNames.map((name) => get(values, name));\n };\n const getFieldState = (name, formState) => ({\n invalid: !!get((formState || _formState).errors, name),\n isDirty: !!get((formState || _formState).dirtyFields, name),\n error: get((formState || _formState).errors, name),\n isValidating: !!get(_formState.validatingFields, name),\n isTouched: !!get((formState || _formState).touchedFields, name),\n });\n const clearErrors = (name) => {\n name &&\n convertToArrayPayload(name).forEach((inputName) => unset(_formState.errors, inputName));\n _subjects.state.next({\n errors: name ? _formState.errors : {},\n });\n };\n const setError = (name, error, options) => {\n const ref = (get(_fields, name, { _f: {} })._f || {}).ref;\n const currentError = get(_formState.errors, name) || {};\n // Don't override existing error messages elsewhere in the object tree.\n const { ref: currentRef, message, type, ...restOfErrorTree } = currentError;\n set(_formState.errors, name, {\n ...restOfErrorTree,\n ...error,\n ref,\n });\n _subjects.state.next({\n name,\n errors: _formState.errors,\n isValid: false,\n });\n options && options.shouldFocus && ref && ref.focus && ref.focus();\n };\n const watch = (name, defaultValue) => isFunction(name)\n ? _subjects.state.subscribe({\n next: (payload) => 'values' in payload &&\n name(_getWatch(undefined, defaultValue), payload),\n })\n : _getWatch(name, defaultValue, true);\n const _subscribe = (props) => _subjects.state.subscribe({\n next: (formState) => {\n if (shouldSubscribeByName(props.name, formState.name, props.exact) &&\n shouldRenderFormState(formState, props.formState || _proxyFormState, _setFormState, props.reRenderRoot)) {\n props.callback({\n values: { ..._formValues },\n ..._formState,\n ...formState,\n defaultValues: _defaultValues,\n });\n }\n },\n }).unsubscribe;\n const subscribe = (props) => {\n _state.mount = true;\n _proxySubscribeFormState = {\n ..._proxySubscribeFormState,\n ...props.formState,\n };\n return _subscribe({\n ...props,\n formState: {\n ...defaultProxyFormState,\n ...props.formState,\n },\n });\n };\n const unregister = (name, options = {}) => {\n for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {\n _names.mount.delete(fieldName);\n _names.array.delete(fieldName);\n if (!options.keepValue) {\n unset(_fields, fieldName);\n unset(_formValues, fieldName);\n }\n !options.keepError && unset(_formState.errors, fieldName);\n !options.keepDirty && unset(_formState.dirtyFields, fieldName);\n !options.keepTouched && unset(_formState.touchedFields, fieldName);\n !options.keepIsValidating &&\n unset(_formState.validatingFields, fieldName);\n !_options.shouldUnregister &&\n !options.keepDefaultValue &&\n unset(_defaultValues, fieldName);\n }\n _subjects.state.next({\n values: cloneObject(_formValues),\n });\n _subjects.state.next({\n ..._formState,\n ...(!options.keepDirty ? {} : { isDirty: _getDirty() }),\n });\n !options.keepIsValid && _setValid();\n };\n const _setDisabledField = ({ disabled, name, }) => {\n if ((isBoolean(disabled) && _state.mount) ||\n !!disabled ||\n _names.disabled.has(name)) {\n const wasDisabled = _names.disabled.has(name);\n const isDisabled = !!disabled;\n const disabledStateChanged = wasDisabled !== isDisabled;\n disabled ? _names.disabled.add(name) : _names.disabled.delete(name);\n disabledStateChanged && _state.mount && !_state.action && _setValid();\n }\n };\n const register = (name, options = {}) => {\n let field = get(_fields, name);\n const disabledIsDefined = isBoolean(options.disabled) || isBoolean(_options.disabled);\n set(_fields, name, {\n ...(field || {}),\n _f: {\n ...(field && field._f ? field._f : { ref: { name } }),\n name,\n mount: true,\n ...options,\n },\n });\n _names.mount.add(name);\n if (field) {\n _setDisabledField({\n disabled: isBoolean(options.disabled)\n ? options.disabled\n : _options.disabled,\n name,\n });\n }\n else {\n updateValidAndValue(name, true, options.value);\n }\n return {\n ...(disabledIsDefined\n ? { disabled: options.disabled || _options.disabled }\n : {}),\n ...(_options.progressive\n ? {\n required: !!options.required,\n min: getRuleValue(options.min),\n max: getRuleValue(options.max),\n minLength: getRuleValue(options.minLength),\n maxLength: getRuleValue(options.maxLength),\n pattern: getRuleValue(options.pattern),\n }\n : {}),\n name,\n onChange,\n onBlur: onChange,\n ref: (ref) => {\n if (ref) {\n register(name, options);\n field = get(_fields, name);\n const fieldRef = isUndefined(ref.value)\n ? ref.querySelectorAll\n ? ref.querySelectorAll('input,select,textarea')[0] || ref\n : ref\n : ref;\n const radioOrCheckbox = isRadioOrCheckbox(fieldRef);\n const refs = field._f.refs || [];\n if (radioOrCheckbox\n ? refs.find((option) => option === fieldRef)\n : fieldRef === field._f.ref) {\n return;\n }\n set(_fields, name, {\n _f: {\n ...field._f,\n ...(radioOrCheckbox\n ? {\n refs: [\n ...refs.filter(live),\n fieldRef,\n ...(Array.isArray(get(_defaultValues, name)) ? [{}] : []),\n ],\n ref: { type: fieldRef.type, name },\n }\n : { ref: fieldRef }),\n },\n });\n updateValidAndValue(name, false, undefined, fieldRef);\n }\n else {\n field = get(_fields, name, {});\n if (field._f) {\n field._f.mount = false;\n }\n (_options.shouldUnregister || options.shouldUnregister) &&\n !(isNameInFieldArray(_names.array, name) && _state.action) &&\n _names.unMount.add(name);\n }\n },\n };\n };\n const _focusError = () => _options.shouldFocusError &&\n iterateFieldsByAction(_fields, _focusInput, _names.mount);\n const _disableForm = (disabled) => {\n if (isBoolean(disabled)) {\n _subjects.state.next({ disabled });\n iterateFieldsByAction(_fields, (ref, name) => {\n const currentField = get(_fields, name);\n if (currentField) {\n ref.disabled = currentField._f.disabled || disabled;\n if (Array.isArray(currentField._f.refs)) {\n currentField._f.refs.forEach((inputRef) => {\n inputRef.disabled = currentField._f.disabled || disabled;\n });\n }\n }\n }, 0, false);\n }\n };\n const handleSubmit = (onValid, onInvalid) => async (e) => {\n let onValidError = undefined;\n if (e) {\n e.preventDefault && e.preventDefault();\n e.persist &&\n e.persist();\n }\n let fieldValues = cloneObject(_formValues);\n _subjects.state.next({\n isSubmitting: true,\n });\n if (_options.resolver) {\n const { errors, values } = await _runSchema();\n _updateIsValidating();\n _formState.errors = errors;\n fieldValues = cloneObject(values);\n }\n else {\n await executeBuiltInValidation(_fields);\n }\n if (_names.disabled.size) {\n for (const name of _names.disabled) {\n unset(fieldValues, name);\n }\n }\n unset(_formState.errors, 'root');\n if (isEmptyObject(_formState.errors)) {\n _subjects.state.next({\n errors: {},\n });\n try {\n await onValid(fieldValues, e);\n }\n catch (error) {\n onValidError = error;\n }\n }\n else {\n if (onInvalid) {\n await onInvalid({ ..._formState.errors }, e);\n }\n _focusError();\n setTimeout(_focusError);\n }\n _subjects.state.next({\n isSubmitted: true,\n isSubmitting: false,\n isSubmitSuccessful: isEmptyObject(_formState.errors) && !onValidError,\n submitCount: _formState.submitCount + 1,\n errors: _formState.errors,\n });\n if (onValidError) {\n throw onValidError;\n }\n };\n const resetField = (name, options = {}) => {\n if (get(_fields, name)) {\n if (isUndefined(options.defaultValue)) {\n setValue(name, cloneObject(get(_defaultValues, name)));\n }\n else {\n setValue(name, options.defaultValue);\n set(_defaultValues, name, cloneObject(options.defaultValue));\n }\n if (!options.keepTouched) {\n unset(_formState.touchedFields, name);\n }\n if (!options.keepDirty) {\n unset(_formState.dirtyFields, name);\n _formState.isDirty = options.defaultValue\n ? _getDirty(name, cloneObject(get(_defaultValues, name)))\n : _getDirty();\n }\n if (!options.keepError) {\n unset(_formState.errors, name);\n _proxyFormState.isValid && _setValid();\n }\n _subjects.state.next({ ..._formState });\n }\n };\n const _reset = (formValues, keepStateOptions = {}) => {\n const updatedValues = formValues ? cloneObject(formValues) : _defaultValues;\n const cloneUpdatedValues = cloneObject(updatedValues);\n const isEmptyResetValues = isEmptyObject(formValues);\n const values = isEmptyResetValues ? _defaultValues : cloneUpdatedValues;\n if (!keepStateOptions.keepDefaultValues) {\n _defaultValues = updatedValues;\n }\n if (!keepStateOptions.keepValues) {\n if (keepStateOptions.keepDirtyValues) {\n const fieldsToCheck = new Set([\n ..._names.mount,\n ...Object.keys(getDirtyFields(_defaultValues, _formValues)),\n ]);\n for (const fieldName of Array.from(fieldsToCheck)) {\n const isDirty = get(_formState.dirtyFields, fieldName);\n const existingValue = get(_formValues, fieldName);\n const newValue = get(values, fieldName);\n if (isDirty && !isUndefined(existingValue)) {\n set(values, fieldName, existingValue);\n }\n else if (!isDirty && !isUndefined(newValue)) {\n setValue(fieldName, newValue);\n }\n }\n }\n else {\n if (isWeb && isUndefined(formValues)) {\n for (const name of _names.mount) {\n const field = get(_fields, name);\n if (field && field._f) {\n const fieldReference = Array.isArray(field._f.refs)\n ? field._f.refs[0]\n : field._f.ref;\n if (isHTMLElement(fieldReference)) {\n const form = fieldReference.closest('form');\n if (form) {\n form.reset();\n break;\n }\n }\n }\n }\n }\n if (keepStateOptions.keepFieldsRef) {\n for (const fieldName of _names.mount) {\n setValue(fieldName, get(values, fieldName));\n }\n }\n else {\n _fields = {};\n }\n }\n _formValues = _options.shouldUnregister\n ? keepStateOptions.keepDefaultValues\n ? cloneObject(_defaultValues)\n : {}\n : cloneObject(values);\n _subjects.array.next({\n values: { ...values },\n });\n _subjects.state.next({\n values: { ...values },\n });\n }\n _names = {\n mount: keepStateOptions.keepDirtyValues ? _names.mount : new Set(),\n unMount: new Set(),\n array: new Set(),\n disabled: new Set(),\n watch: new Set(),\n watchAll: false,\n focus: '',\n };\n _state.mount =\n !_proxyFormState.isValid ||\n !!keepStateOptions.keepIsValid ||\n !!keepStateOptions.keepDirtyValues ||\n (!_options.shouldUnregister && !isEmptyObject(values));\n _state.watch = !!_options.shouldUnregister;\n _state.keepIsValid = !!keepStateOptions.keepIsValid;\n _state.action = false;\n // Clear errors synchronously to prevent validation errors on subsequent submissions\n // This fixes the issue where form.reset() causes validation errors on subsequent\n // submissions in Next.js 16 with Server Actions\n if (!keepStateOptions.keepErrors) {\n _formState.errors = {};\n }\n _subjects.state.next({\n submitCount: keepStateOptions.keepSubmitCount\n ? _formState.submitCount\n : 0,\n isDirty: isEmptyResetValues\n ? false\n : keepStateOptions.keepDirty\n ? _formState.isDirty\n : !!(keepStateOptions.keepDefaultValues &&\n !deepEqual(formValues, _defaultValues)),\n isSubmitted: keepStateOptions.keepIsSubmitted\n ? _formState.isSubmitted\n : false,\n dirtyFields: isEmptyResetValues\n ? {}\n : keepStateOptions.keepDirtyValues\n ? keepStateOptions.keepDefaultValues && _formValues\n ? getDirtyFields(_defaultValues, _formValues)\n : _formState.dirtyFields\n : keepStateOptions.keepDefaultValues && formValues\n ? getDirtyFields(_defaultValues, formValues)\n : keepStateOptions.keepDirty\n ? _formState.dirtyFields\n : {},\n touchedFields: keepStateOptions.keepTouched\n ? _formState.touchedFields\n : {},\n errors: keepStateOptions.keepErrors ? _formState.errors : {},\n isSubmitSuccessful: keepStateOptions.keepIsSubmitSuccessful\n ? _formState.isSubmitSuccessful\n : false,\n isSubmitting: false,\n defaultValues: _defaultValues,\n });\n };\n const reset = (formValues, keepStateOptions) => _reset(isFunction(formValues)\n ? formValues(_formValues)\n : formValues, { ..._options.resetOptions, ...keepStateOptions });\n const setFocus = (name, options = {}) => {\n const field = get(_fields, name);\n const fieldReference = field && field._f;\n if (fieldReference) {\n const fieldRef = fieldReference.refs\n ? fieldReference.refs[0]\n : fieldReference.ref;\n if (fieldRef.focus) {\n // Use setTimeout to ensure focus happens after any pending state updates\n // This fixes the issue where setFocus doesn't work immediately after setError\n setTimeout(() => {\n fieldRef.focus();\n options.shouldSelect &&\n isFunction(fieldRef.select) &&\n fieldRef.select();\n });\n }\n }\n };\n const _setFormState = (updatedFormState) => {\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n };\n const _resetDefaultValues = () => isFunction(_options.defaultValues) &&\n _options.defaultValues().then((values) => {\n reset(values, _options.resetOptions);\n _subjects.state.next({\n isLoading: false,\n });\n });\n const methods = {\n control: {\n register,\n unregister,\n getFieldState,\n handleSubmit,\n setError,\n _subscribe,\n _runSchema,\n _updateIsValidating,\n _focusError,\n _getWatch,\n _getDirty,\n _setValid,\n _setFieldArray,\n _setDisabledField,\n _setErrors,\n _getFieldArray,\n _reset,\n _resetDefaultValues,\n _removeUnmounted,\n _disableForm,\n _subjects,\n _proxyFormState,\n get _fields() {\n return _fields;\n },\n get _formValues() {\n return _formValues;\n },\n get _state() {\n return _state;\n },\n set _state(value) {\n _state = value;\n },\n get _defaultValues() {\n return _defaultValues;\n },\n get _names() {\n return _names;\n },\n set _names(value) {\n _names = value;\n },\n get _formState() {\n return _formState;\n },\n get _options() {\n return _options;\n },\n set _options(value) {\n _options = {\n ..._options,\n ...value,\n };\n },\n },\n subscribe,\n trigger,\n register,\n handleSubmit,\n watch,\n setValue,\n getValues,\n reset,\n resetField,\n clearErrors,\n unregister,\n setError,\n setFocus,\n getFieldState,\n };\n return {\n ...methods,\n formControl: methods,\n };\n}\n\nvar generateId = () => {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = ((Math.random() * 16 + d) % 16) | 0;\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n};\n\nvar getFocusFieldName = (name, index, options = {}) => options.shouldFocus || isUndefined(options.shouldFocus)\n ? options.focusName ||\n `${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`\n : '';\n\nvar appendAt = (data, value) => [\n ...data,\n ...convertToArrayPayload(value),\n];\n\nvar fillEmptyArray = (value) => Array.isArray(value) ? value.map(() => undefined) : undefined;\n\nfunction insert(data, index, value) {\n return [\n ...data.slice(0, index),\n ...convertToArrayPayload(value),\n ...data.slice(index),\n ];\n}\n\nvar moveArrayAt = (data, from, to) => {\n if (!Array.isArray(data)) {\n return [];\n }\n if (isUndefined(data[to])) {\n data[to] = undefined;\n }\n data.splice(to, 0, data.splice(from, 1)[0]);\n return data;\n};\n\nvar prependAt = (data, value) => [\n ...convertToArrayPayload(value),\n ...convertToArrayPayload(data),\n];\n\nfunction removeAtIndexes(data, indexes) {\n let i = 0;\n const temp = [...data];\n for (const index of indexes) {\n temp.splice(index - i, 1);\n i++;\n }\n return compact(temp).length ? temp : [];\n}\nvar removeArrayAt = (data, index) => isUndefined(index)\n ? []\n : removeAtIndexes(data, convertToArrayPayload(index).sort((a, b) => a - b));\n\nvar swapArrayAt = (data, indexA, indexB) => {\n [data[indexA], data[indexB]] = [data[indexB], data[indexA]];\n};\n\nvar updateAt = (fieldValues, index, value) => {\n fieldValues[index] = value;\n return fieldValues;\n};\n\n/**\n * A custom hook that exposes convenient methods to perform operations with a list of dynamic inputs that need to be appended, updated, removed etc. • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn) • [Video](https://youtu.be/4MrbfGSFY2A)\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usefieldarray) • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn)\n *\n * @param props - useFieldArray props\n *\n * @returns methods - functions to manipulate with the Field Arrays (dynamic inputs) {@link UseFieldArrayReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, control, handleSubmit, reset, trigger, setError } = useForm({\n * defaultValues: {\n * test: []\n * }\n * });\n * const { fields, append } = useFieldArray({\n * control,\n * name: \"test\"\n * });\n *\n * return (\n * <form onSubmit={handleSubmit(data => console.log(data))}>\n * {fields.map((item, index) => (\n * <input key={item.id} {...register(`test.${index}.firstName`)} />\n * ))}\n * <button type=\"button\" onClick={() => append({ firstName: \"bill\" })}>\n * append\n * </button>\n * <input type=\"submit\" />\n * </form>\n * );\n * }\n * ```\n */\nfunction useFieldArray(props) {\n const formControl = useFormControlContext();\n const { control = formControl, name, keyName = 'id', shouldUnregister, rules, } = props;\n const [fields, setFields] = React.useState(control._getFieldArray(name));\n const ids = React.useRef(control._getFieldArray(name).map(generateId));\n const _actioned = React.useRef(false);\n control._names.array.add(name);\n React.useMemo(() => rules &&\n fields.length >= 0 &&\n control.register(name, rules), [control, name, fields.length, rules]);\n useIsomorphicLayoutEffect(() => control._subjects.array.subscribe({\n next: ({ values, name: fieldArrayName, }) => {\n if (fieldArrayName === name || !fieldArrayName) {\n const fieldValues = get(values, name);\n if (Array.isArray(fieldValues)) {\n setFields(fieldValues);\n ids.current = fieldValues.map(generateId);\n }\n }\n },\n }).unsubscribe, [control, name]);\n const updateValues = React.useCallback((updatedFieldArrayValues) => {\n _actioned.current = true;\n control._setFieldArray(name, updatedFieldArrayValues);\n }, [control, name]);\n const append = (value, options) => {\n const appendValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = appendAt(control._getFieldArray(name), appendValue);\n control._names.focus = getFocusFieldName(name, updatedFieldArrayValues.length - 1, options);\n ids.current = appendAt(ids.current, appendValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, appendAt, {\n argA: fillEmptyArray(value),\n });\n };\n const prepend = (value, options) => {\n const prependValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = prependAt(control._getFieldArray(name), prependValue);\n control._names.focus = getFocusFieldName(name, 0, options);\n ids.current = prependAt(ids.current, prependValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, prependAt, {\n argA: fillEmptyArray(value),\n });\n };\n const remove = (index) => {\n const updatedFieldArrayValues = removeArrayAt(control._getFieldArray(name), index);\n ids.current = removeArrayAt(ids.current, index);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n !Array.isArray(get(control._fields, name)) &&\n set(control._fields, name, undefined);\n control._setFieldArray(name, updatedFieldArrayValues, removeArrayAt, {\n argA: index,\n });\n };\n const insert$1 = (index, value, options) => {\n const insertValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = insert(control._getFieldArray(name), index, insertValue);\n control._names.focus = getFocusFieldName(name, index, options);\n ids.current = insert(ids.current, index, insertValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, insert, {\n argA: index,\n argB: fillEmptyArray(value),\n });\n };\n const swap = (indexA, indexB) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n swapArrayAt(updatedFieldArrayValues, indexA, indexB);\n swapArrayAt(ids.current, indexA, indexB);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, swapArrayAt, {\n argA: indexA,\n argB: indexB,\n }, false);\n };\n const move = (from, to) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n moveArrayAt(updatedFieldArrayValues, from, to);\n moveArrayAt(ids.current, from, to);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, moveArrayAt, {\n argA: from,\n argB: to,\n }, false);\n };\n const update = (index, value) => {\n const updateValue = cloneObject(value);\n const updatedFieldArrayValues = updateAt(control._getFieldArray(name), index, updateValue);\n ids.current = [...updatedFieldArrayValues].map((item, i) => !item || i === index ? generateId() : ids.current[i]);\n updateValues(updatedFieldArrayValues);\n setFields([...updatedFieldArrayValues]);\n control._setFieldArray(name, updatedFieldArrayValues, updateAt, {\n argA: index,\n argB: updateValue,\n }, true, false);\n };\n const replace = (value) => {\n const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));\n ids.current = updatedFieldArrayValues.map(generateId);\n updateValues([...updatedFieldArrayValues]);\n setFields([...updatedFieldArrayValues]);\n control._setFieldArray(name, [...updatedFieldArrayValues], (data) => data, {}, true, false);\n };\n React.useEffect(() => {\n control._state.action = false;\n isWatched(name, control._names) &&\n control._subjects.state.next({\n ...control._formState,\n });\n if (_actioned.current &&\n (!getValidationModes(control._options.mode).isOnSubmit ||\n control._formState.isSubmitted) &&\n !getValidationModes(control._options.reValidateMode).isOnSubmit) {\n if (control._options.resolver) {\n control._runSchema([name]).then((result) => {\n control._updateIsValidating([name]);\n const error = get(result.errors, name);\n const existingError = get(control._formState.errors, name);\n if (existingError\n ? (!error && existingError.type) ||\n (error &&\n (existingError.type !== error.type ||\n existingError.message !== error.message))\n : error && error.type) {\n error\n ? set(control._formState.errors, name, error)\n : unset(control._formState.errors, name);\n control._subjects.state.next({\n errors: control._formState.errors,\n });\n }\n });\n }\n else {\n const field = get(control._fields, name);\n if (field &&\n field._f &&\n !(getValidationModes(control._options.reValidateMode).isOnSubmit &&\n getValidationModes(control._options.mode).isOnSubmit)) {\n validateField(field, control._names.disabled, control._formValues, control._options.criteriaMode === VALIDATION_MODE.all, control._options.shouldUseNativeValidation, true).then((error) => !isEmptyObject(error) &&\n control._subjects.state.next({\n errors: updateFieldArrayRootError(control._formState.errors, error, name),\n }));\n }\n }\n }\n control._subjects.state.next({\n name,\n values: cloneObject(control._formValues),\n });\n control._names.focus &&\n iterateFieldsByAction(control._fields, (ref, key) => {\n if (control._names.focus &&\n key.startsWith(control._names.focus) &&\n ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n });\n control._names.focus = '';\n control._setValid();\n _actioned.current = false;\n }, [fields, name, control]);\n React.useEffect(() => {\n !get(control._formValues, name) && control._setFieldArray(name);\n return () => {\n const updateMounted = (name, value) => {\n const field = get(control._fields, name);\n if (field && field._f) {\n field._f.mount = value;\n }\n };\n control._options.shouldUnregister || shouldUnregister\n ? control.unregister(name)\n : updateMounted(name, false);\n };\n }, [name, control, keyName, shouldUnregister]);\n return {\n swap: React.useCallback(swap, [updateValues, name, control]),\n move: React.useCallback(move, [updateValues, name, control]),\n prepend: React.useCallback(prepend, [updateValues, name, control]),\n append: React.useCallback(append, [updateValues, name, control]),\n remove: React.useCallback(remove, [updateValues, name, control]),\n insert: React.useCallback(insert$1, [updateValues, name, control]),\n update: React.useCallback(update, [updateValues, name, control]),\n replace: React.useCallback(replace, [updateValues, name, control]),\n fields: React.useMemo(() => fields.map((field, index) => ({\n ...field,\n [keyName]: ids.current[index] || generateId(),\n })), [fields, keyName]),\n };\n}\n\n/**\n * Custom hook to manage the entire form.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useform) • [Demo](https://codesandbox.io/s/react-hook-form-get-started-ts-5ksmm) • [Video](https://www.youtube.com/watch?v=RkXv4AXXC_4)\n *\n * @param props - form configuration and validation parameters.\n *\n * @returns methods - individual functions to manage the form state. {@link UseFormReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, watch, formState: { errors } } = useForm();\n * const onSubmit = data => console.log(data);\n *\n * console.log(watch(\"example\"));\n *\n * return (\n * <form onSubmit={handleSubmit(onSubmit)}>\n * <input defaultValue=\"test\" {...register(\"example\")} />\n * <input {...register(\"exampleRequired\", { required: true })} />\n * {errors.exampleRequired && <span>This field is required</span>}\n * <button>Submit</button>\n * </form>\n * );\n * }\n * ```\n */\nfunction useForm(props = {}) {\n const _formControl = React.useRef(undefined);\n const _values = React.useRef(undefined);\n const [formState, updateFormState] = React.useState({\n isDirty: false,\n isValidating: false,\n isLoading: isFunction(props.defaultValues),\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n submitCount: 0,\n dirtyFields: {},\n touchedFields: {},\n validatingFields: {},\n errors: props.errors || {},\n disabled: props.disabled || false,\n isReady: false,\n defaultValues: isFunction(props.defaultValues)\n ? undefined\n : props.defaultValues,\n });\n if (!_formControl.current) {\n if (props.formControl) {\n _formControl.current = {\n ...props.formControl,\n formState,\n };\n if (props.defaultValues && !isFunction(props.defaultValues)) {\n props.formControl.reset(props.defaultValues, props.resetOptions);\n }\n }\n else {\n const { formControl, ...rest } = createFormControl(props);\n _formControl.current = {\n ...rest,\n formState,\n };\n }\n }\n const control = _formControl.current.control;\n control._options = props;\n useIsomorphicLayoutEffect(() => {\n const sub = control._subscribe({\n formState: control._proxyFormState,\n callback: () => updateFormState({ ...control._formState }),\n reRenderRoot: true,\n });\n updateFormState((data) => ({\n ...data,\n isReady: true,\n }));\n control._formState.isReady = true;\n return sub;\n }, [control]);\n React.useEffect(() => control._disableForm(props.disabled), [control, props.disabled]);\n React.useEffect(() => {\n if (props.mode) {\n control._options.mode = props.mode;\n }\n if (props.reValidateMode) {\n control._options.reValidateMode = props.reValidateMode;\n }\n }, [control, props.mode, props.reValidateMode]);\n React.useEffect(() => {\n if (props.errors) {\n control._setErrors(props.errors);\n control._focusError();\n }\n }, [control, props.errors]);\n React.useEffect(() => {\n props.shouldUnregister &&\n control._subjects.state.next({\n values: control._getWatch(),\n });\n }, [control, props.shouldUnregister]);\n React.useEffect(() => {\n if (control._proxyFormState.isDirty) {\n const isDirty = control._getDirty();\n if (isDirty !== formState.isDirty) {\n control._subjects.state.next({\n isDirty,\n });\n }\n }\n }, [control, formState.isDirty]);\n React.useEffect(() => {\n var _a;\n if (props.values && !deepEqual(props.values, _values.current)) {\n control._reset(props.values, {\n keepFieldsRef: true,\n ...control._options.resetOptions,\n });\n if (!((_a = control._options.resetOptions) === null || _a === void 0 ? void 0 : _a.keepIsValid)) {\n control._setValid();\n }\n _values.current = props.values;\n updateFormState((state) => ({ ...state }));\n }\n else {\n control._resetDefaultValues();\n }\n }, [control, props.values]);\n React.useEffect(() => {\n if (!control._state.mount) {\n control._setValid();\n control._state.mount = true;\n }\n if (control._state.watch) {\n control._state.watch = false;\n control._subjects.state.next({ ...control._formState });\n }\n control._removeUnmounted();\n });\n _formControl.current.formState = React.useMemo(() => getProxyFormState(formState, control), [control, formState]);\n return _formControl.current;\n}\n\n/**\n * Watch component that subscribes to form field changes and re-renders when watched fields update.\n *\n * @param control - The form control object from useForm\n * @param name - Can be field name, array of field names, or undefined to watch the entire form\n * @param disabled - Disable subscription\n * @param exact - Whether to watch exact field names or not\n * @param defaultValue - The default value to use if the field is not yet set\n * @param compute - Function to compute derived values from watched fields\n * @param render - The function that receives watched values and returns ReactNode\n * @returns The result of calling render function with watched values\n *\n * @example\n * The `Watch` component only re-render when the values of `foo`, `bar`, and `baz.qux` change.\n * The types of `foo`, `bar`, and `baz.qux` are precisely inferred.\n *\n * ```tsx\n * const { control } = useForm();\n *\n * <Watch\n * control={control}\n * names={['foo', 'bar', 'baz.qux']}\n * render={([foo, bar, baz_qux]) => <div>{foo}{bar}{baz_qux}</div>}\n * />\n * ```\n */\nconst Watch = (props) => props.render(useWatch({ name: props.names, ...props }));\n\nexport { Controller, Form, FormProvider, FormStateSubscribe, Watch, appendErrors, createFormControl, get, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };\n//# sourceMappingURL=index.esm.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/label.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Label\";\nvar Label = React.forwardRef((props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.label,\n {\n ...props,\n ref: forwardedRef,\n onMouseDown: (event) => {\n const target = event.target;\n if (target.closest(\"button, input, select, textarea\")) return;\n props.onMouseDown?.(event);\n if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n }\n }\n );\n});\nLabel.displayName = NAME;\nvar Root = Label;\nexport {\n Label,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst labelVariants = cva(\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\");\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root ref={ref} className={cn(labelVariants(), className)} {...props} />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { Controller, ControllerProps, FieldPath, FieldValues, FormProvider, useFormContext } from \"react-hook-form\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Label } from \"@/components/ui/label\";\n\nconst Form = FormProvider;\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>({} as FormFieldContextValue);\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext);\n const itemContext = React.useContext(FormItemContext);\n const { getFieldState, formState } = useFormContext();\n\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\");\n }\n\n const { id } = itemContext;\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n };\n};\n\ntype FormItemContextValue = {\n id: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>({} as FormItemContextValue);\n\nconst FormItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const id = React.useId();\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div ref={ref} className={cn(\"space-y-2\", className)} {...props} />\n </FormItemContext.Provider>\n );\n },\n);\nFormItem.displayName = \"FormItem\";\n\nconst FormLabel = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => {\n const { error, formItemId } = useFormField();\n\n return <Label ref={ref} className={cn(error && \"text-destructive\", className)} htmlFor={formItemId} {...props} />;\n});\nFormLabel.displayName = \"FormLabel\";\n\nconst FormControl = React.forwardRef<React.ElementRef<typeof Slot>, React.ComponentPropsWithoutRef<typeof Slot>>(\n ({ ...props }, ref) => {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField();\n\n return (\n <Slot\n ref={ref}\n id={formItemId}\n aria-describedby={!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`}\n aria-invalid={!!error}\n {...props}\n />\n );\n },\n);\nFormControl.displayName = \"FormControl\";\n\nconst FormDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => {\n const { formDescriptionId } = useFormField();\n\n return <p ref={ref} id={formDescriptionId} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />;\n },\n);\nFormDescription.displayName = \"FormDescription\";\n\nconst FormMessage = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, children, ...props }, ref) => {\n const { error, formMessageId } = useFormField();\n const body = error ? String(error?.message) : children;\n\n if (!body) {\n return null;\n }\n\n return (\n <p ref={ref} id={formMessageId} className={cn(\"text-sm font-medium text-destructive\", className)} {...props}>\n {body}\n </p>\n );\n },\n);\nFormMessage.displayName = \"FormMessage\";\n\nexport { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField };\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/collection-legacy.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n );\n const CollectionProvider = (props) => {\n const { scope, children } = props;\n const ref = React.useRef(null);\n const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...itemData });\n return () => void context.itemMap.delete(ref);\n });\n return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useCollection(scope) {\n const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n return getItems;\n }\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\n\n// src/collection.tsx\nimport React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n #keys;\n constructor(entries) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n set(key, value) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n insert(index, key, value) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n const size = this.size + (has ? 0 : 1);\n if (relativeIndex < 0) {\n actualIndex++;\n }\n const keys = [...this.#keys];\n let nextValue;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i];\n if (keys[i] === key) {\n nextKey = keys[i + 1];\n }\n if (has) {\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1];\n const currentValue = nextValue;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n with(index, key, value) {\n const copy = new _OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n before(key) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n after(key) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n first() {\n return this.entryAt(0);\n }\n last() {\n return this.entryAt(-1);\n }\n clear() {\n this.#keys = [];\n return super.clear();\n }\n delete(key) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n deleteAt(index) {\n const key = this.keyAt(index);\n if (key !== void 0) {\n return this.delete(key);\n }\n return false;\n }\n at(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return this.get(key);\n }\n }\n entryAt(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return [key, this.get(key)];\n }\n }\n indexOf(key) {\n return this.#keys.indexOf(key);\n }\n keyAt(index) {\n return at(this.#keys, index);\n }\n from(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n keyFrom(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n find(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return void 0;\n }\n findIndex(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n filter(predicate, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new _OrderedDict(entries);\n }\n map(callbackfn, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new _OrderedDict(entries);\n }\n reduce(...args) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0);\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n reduceRight(...args) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1);\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index);\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n toSorted(compareFn) {\n const entries = [...this.entries()].sort(compareFn);\n return new _OrderedDict(entries);\n }\n toReversed() {\n const reversed = new _OrderedDict();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index);\n const element = this.get(key);\n reversed.set(key, element);\n }\n return reversed;\n }\n toSpliced(...args) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new _OrderedDict(entries);\n }\n slice(start, end) {\n const result = new _OrderedDict();\n let stop = this.size - 1;\n if (start === void 0) {\n return result;\n }\n if (start < 0) {\n start = start + this.size;\n }\n if (end !== void 0 && end > 0) {\n stop = end - 1;\n }\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index);\n const element = this.get(key);\n result.set(key, element);\n }\n return result;\n }\n every(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n some(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n};\nfunction at(array, index) {\n if (\"at\" in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0\n }\n );\n const CollectionProvider = ({ state, ...props }) => {\n return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const CollectionInit = (props) => {\n const state = useInitCollection();\n return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n };\n CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n const CollectionProviderImpl = (props) => {\n const { scope, children, state } = props;\n const ref = React2.useRef(null);\n const [collectionElement, setCollectionElement] = React2.useState(\n null\n );\n const composeRefs = useComposedRefs2(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n React2.useEffect(() => {\n if (!collectionElement) return;\n const observer = getChildListObserver(() => {\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n return /* @__PURE__ */ jsx2(\n CollectionContextProvider,\n {\n scope,\n itemMap,\n setItemMap,\n collectionRef: composeRefs,\n collectionRefObject: ref,\n collectionElement,\n children\n }\n );\n };\n CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n const CollectionSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n const CollectionItemSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React2.useRef(null);\n const [element, setElement] = React2.useState(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n const { setItemMap } = context;\n const itemDataRef = React2.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n React2.useEffect(() => {\n const itemData2 = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n if (!map.has(element)) {\n map.set(element, { ...itemData2, element });\n return map.toSorted(sortByDocumentPosition);\n }\n return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n });\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useInitCollection() {\n return React2.useState(new OrderedDict());\n }\n function useCollection(scope) {\n const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n return itemMap;\n }\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection\n };\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions\n ];\n}\nfunction shallowEqual(a, b) {\n if (a === b) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\nfunction isElementPreceding(a, b) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === \"childList\") {\n callback();\n return;\n }\n }\n });\n return observer;\n}\nexport {\n createCollection,\n createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/direction/src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n DirectionProvider,\n Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/roving-focus-group.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar GROUP_NAME = \"RovingFocusGroup\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);\nvar [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope]\n);\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });\n }\n);\nRovingFocusGroup.displayName = GROUP_NAME;\nvar RovingFocusGroupImpl = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n orientation,\n loop = false,\n dir,\n currentTabStopId: currentTabStopIdProp,\n defaultCurrentTabStopId,\n onCurrentTabStopIdChange,\n onEntryFocus,\n preventScrollOnEntryFocus = false,\n ...groupProps\n } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const direction = useDirection(dir);\n const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n prop: currentTabStopIdProp,\n defaultProp: defaultCurrentTabStopId ?? null,\n onChange: onCurrentTabStopIdChange,\n caller: GROUP_NAME\n });\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const handleEntryFocus = useCallbackRef(onEntryFocus);\n const getItems = useCollection(__scopeRovingFocusGroup);\n const isClickFocusRef = React.useRef(false);\n const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n }\n }, [handleEntryFocus]);\n return /* @__PURE__ */ jsx(\n RovingFocusProvider,\n {\n scope: __scopeRovingFocusGroup,\n orientation,\n dir: direction,\n loop,\n currentTabStopId,\n onItemFocus: React.useCallback(\n (tabStopId) => setCurrentTabStopId(tabStopId),\n [setCurrentTabStopId]\n ),\n onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),\n onFocusableItemAdd: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount + 1),\n []\n ),\n onFocusableItemRemove: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount - 1),\n []\n ),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,\n \"data-orientation\": orientation,\n ...groupProps,\n ref: composedRefs,\n style: { outline: \"none\", ...props.style },\n onMouseDown: composeEventHandlers(props.onMouseDown, () => {\n isClickFocusRef.current = true;\n }),\n onFocus: composeEventHandlers(props.onFocus, (event) => {\n const isKeyboardFocus = !isClickFocusRef.current;\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().filter((item) => item.focusable);\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === currentTabStopId);\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean\n );\n const candidateNodes = candidateItems.map((item) => item.ref.current);\n focusFirst(candidateNodes, preventScrollOnEntryFocus);\n }\n }\n isClickFocusRef.current = false;\n }),\n onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))\n }\n )\n }\n );\n});\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n focusable = true,\n active = false,\n tabStopId,\n children,\n ...itemProps\n } = props;\n const autoId = useId();\n const id = tabStopId || autoId;\n const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n const isCurrentTabStop = context.currentTabStopId === id;\n const getItems = useCollection(__scopeRovingFocusGroup);\n const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n React.useEffect(() => {\n if (focusable) {\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }\n }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeRovingFocusGroup,\n id,\n focusable,\n active,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n tabIndex: isCurrentTabStop ? 0 : -1,\n \"data-orientation\": context.orientation,\n ...itemProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!focusable) event.preventDefault();\n else context.onItemFocus(id);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Tab\" && event.shiftKey) {\n context.onItemShiftTab();\n return;\n }\n if (event.target !== event.currentTarget) return;\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n if (focusIntent !== void 0) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n event.preventDefault();\n const items = getItems().filter((item) => item.focusable);\n let candidateNodes = items.map((item) => item.ref.current);\n if (focusIntent === \"last\") candidateNodes.reverse();\n else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(event.currentTarget);\n candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n }\n }),\n children: typeof children === \"function\" ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null }) : children\n }\n )\n }\n );\n }\n);\nRovingFocusGroupItem.displayName = ITEM_NAME;\nvar MAP_KEY_TO_FOCUS_INTENT = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\"\n};\nfunction getDirectionAwareKey(key, dir) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\nfunction getFocusIntent(event, orientation, dir) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) return void 0;\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key)) return void 0;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\nfunction focusFirst(candidates, preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root = RovingFocusGroup;\nvar Item = RovingFocusGroupItem;\nexport {\n Item,\n Root,\n RovingFocusGroup,\n RovingFocusGroupItem,\n createRovingFocusGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = \"horizontal\",\n dir,\n activationMode = \"automatic\",\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue ?? \"\",\n caller: TABS_NAME\n });\n return /* @__PURE__ */ jsx(\n TabsProvider,\n {\n scope: __scopeTabs,\n baseId: useId(),\n value,\n onValueChange: setValue,\n orientation,\n dir: direction,\n activationMode,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n \"data-orientation\": orientation,\n ...tabsProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation: context.orientation,\n dir: context.dir,\n loop,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"tablist\",\n \"aria-orientation\": context.orientation,\n ...listProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: isSelected,\n children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"tab\",\n \"aria-selected\": isSelected,\n \"aria-controls\": contentId,\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n id: triggerId,\n ...triggerProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n const isAutomaticActivation = context.activationMode !== \"manual\";\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })\n }\n )\n }\n );\n }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-orientation\": context.orientation,\n role: \"tabpanel\",\n \"aria-labelledby\": triggerId,\n hidden: !present,\n id: contentId,\n tabIndex: 0,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n },\n children: present && children\n }\n ) });\n }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n Content,\n List,\n Root2 as Root,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Trigger,\n createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground\",\n className,\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className,\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","// packages/react/use-previous/src/use-previous.tsx\nimport * as React from \"react\";\nfunction usePrevious(value) {\n const ref = React.useRef({ value, previous: value });\n return React.useMemo(() => {\n if (ref.current.value !== value) {\n ref.current.previous = ref.current.value;\n ref.current.value = value;\n }\n return ref.current.previous;\n }, [value]);\n}\nexport {\n usePrevious\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-size/src/use-size.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nfunction useSize(element) {\n const [size, setSize] = React.useState(void 0);\n useLayoutEffect(() => {\n if (element) {\n setSize({ width: element.offsetWidth, height: element.offsetHeight });\n const resizeObserver = new ResizeObserver((entries) => {\n if (!Array.isArray(entries)) {\n return;\n }\n if (!entries.length) {\n return;\n }\n const entry = entries[0];\n let width;\n let height;\n if (\"borderBoxSize\" in entry) {\n const borderSizeEntry = entry[\"borderBoxSize\"];\n const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n width = borderSize[\"inlineSize\"];\n height = borderSize[\"blockSize\"];\n } else {\n width = element.offsetWidth;\n height = element.offsetHeight;\n }\n setSize({ width, height });\n });\n resizeObserver.observe(element, { box: \"border-box\" });\n return () => resizeObserver.unobserve(element);\n } else {\n setSize(void 0);\n }\n }, [element]);\n return size;\n}\nexport {\n useSize\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n \"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0\",\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","\"use client\";\n\n// src/checkbox.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar CHECKBOX_NAME = \"Checkbox\";\nvar [createCheckboxContext, createCheckboxScope] = createContextScope(CHECKBOX_NAME);\nvar [CheckboxProviderImpl, useCheckboxContext] = createCheckboxContext(CHECKBOX_NAME);\nfunction CheckboxProvider(props) {\n const {\n __scopeCheckbox,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = \"on\",\n // @ts-expect-error\n internal_do_not_use_render\n } = props;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: CHECKBOX_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n // We set this to true by default so that events bubble to forms without JS (SSR)\n true\n );\n const context = {\n checked,\n disabled,\n setChecked,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n required,\n defaultChecked: isIndeterminate(defaultChecked) ? false : defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(\n CheckboxProviderImpl,\n {\n scope: __scopeCheckbox,\n ...context,\n children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children\n }\n );\n}\nvar TRIGGER_NAME = \"CheckboxTrigger\";\nvar CheckboxTrigger = React.forwardRef(\n ({ __scopeCheckbox, onKeyDown, onClick, ...checkboxProps }, forwardedRef) => {\n const {\n control,\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n isFormControl,\n bubbleInput\n } = useCheckboxContext(TRIGGER_NAME, __scopeCheckbox);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const form = control?.form;\n if (form) {\n const reset = () => setChecked(initialCheckedStateRef.current);\n form.addEventListener(\"reset\", reset);\n return () => form.removeEventListener(\"reset\", reset);\n }\n }, [control, setChecked]);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"checkbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...checkboxProps,\n ref: composedRefs,\n onKeyDown: composeEventHandlers(onKeyDown, (event) => {\n if (event.key === \"Enter\") event.preventDefault();\n }),\n onClick: composeEventHandlers(onClick, (event) => {\n setChecked((prevChecked) => isIndeterminate(prevChecked) ? true : !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }\n);\nCheckboxTrigger.displayName = TRIGGER_NAME;\nvar Checkbox = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeCheckbox,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...checkboxProps\n } = props;\n return /* @__PURE__ */ jsx(\n CheckboxProvider,\n {\n __scopeCheckbox,\n checked,\n defaultChecked,\n disabled,\n required,\n onCheckedChange,\n name,\n form,\n value,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n CheckboxTrigger,\n {\n ...checkboxProps,\n ref: forwardedRef,\n __scopeCheckbox\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n CheckboxBubbleInput,\n {\n __scopeCheckbox\n }\n )\n ] })\n }\n );\n }\n);\nCheckbox.displayName = CHECKBOX_NAME;\nvar INDICATOR_NAME = \"CheckboxIndicator\";\nvar CheckboxIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeCheckbox, forceMount, ...indicatorProps } = props;\n const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);\n return /* @__PURE__ */ jsx(\n Presence,\n {\n present: forceMount || isIndeterminate(context.checked) || context.checked === true,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...indicatorProps,\n ref: forwardedRef,\n style: { pointerEvents: \"none\", ...props.style }\n }\n )\n }\n );\n }\n);\nCheckboxIndicator.displayName = INDICATOR_NAME;\nvar BUBBLE_INPUT_NAME = \"CheckboxBubbleInput\";\nvar CheckboxBubbleInput = React.forwardRef(\n ({ __scopeCheckbox, ...props }, forwardedRef) => {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useCheckboxContext(BUBBLE_INPUT_NAME, __scopeCheckbox);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n const bubbles = !hasConsumerStoppedPropagationRef.current;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n input.indeterminate = isIndeterminate(checked);\n setChecked.call(input, isIndeterminate(checked) ? false : checked);\n input.dispatchEvent(event);\n }\n }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n const defaultCheckedRef = React.useRef(isIndeterminate(checked) ? false : checked);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n required,\n disabled,\n name,\n value,\n form,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: \"translateX(-100%)\"\n }\n }\n );\n }\n);\nCheckboxBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\nfunction getState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nexport {\n Checkbox,\n CheckboxIndicator,\n CheckboxIndicator as Indicator,\n Checkbox as Root,\n createCheckboxScope,\n CheckboxBubbleInput as unstable_BubbleInput,\n CheckboxBubbleInput as unstable_CheckboxBubbleInput,\n CheckboxProvider as unstable_CheckboxProvider,\n CheckboxTrigger as unstable_CheckboxTrigger,\n CheckboxProvider as unstable_Provider,\n CheckboxTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className={cn(\"flex items-center justify-center text-current\")}>\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"rounded-lg bg-card text-card-foreground shadow-sm\", className)} {...props} />\n));\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n ),\n);\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn(\"text-2xl font-semibold leading-none tracking-tight\", className)} {...props} />\n ),\n);\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n ),\n);\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />,\n);\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center p-6 pt-0\", className)} {...props} />\n ),\n);\nCardFooter.displayName = \"CardFooter\";\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n","import{get as t,set as e}from\"react-hook-form\";const s=(e,s,o)=>{if(e&&\"reportValidity\"in e){const r=t(o,s);e.setCustomValidity(r&&r.message||\"\"),e.reportValidity()}},o=(t,e)=>{for(const o in e.fields){const r=e.fields[o];r&&r.ref&&\"reportValidity\"in r.ref?s(r.ref,o,t):r.refs&&r.refs.forEach(e=>s(e,o,t))}},r=(s,r)=>{r.shouldUseNativeValidation&&o(s,r);const f={};for(const o in s){const n=t(r.fields,o),a=Object.assign(s[o]||{},{ref:n&&n.ref});if(i(r.names||Object.keys(s),o)){const s=Object.assign({},t(f,o));e(s,\"root\",a),e(f,o,s)}else e(f,o,a)}return f},i=(t,e)=>t.some(t=>t.startsWith(e+\".\"));export{r as toNestErrors,o as validateFieldsNatively};\n//# sourceMappingURL=resolvers.mjs.map\n","import{validateFieldsNatively as r,toNestErrors as e}from\"@hookform/resolvers\";import{appendErrors as o}from\"react-hook-form\";var n=function(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(\".\");if(!n[a])if(\"unionErrors\"in t){var u=t.unionErrors[0].errors[0];n[a]={message:u.message,type:u.code}}else n[a]={message:i,type:s};if(\"unionErrors\"in t&&t.unionErrors.forEach(function(e){return e.errors.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=o(a,e,n,s,f?[].concat(f,t.message):t.message)}r.shift()}return n},t=function(o,t,s){return void 0===s&&(s={}),function(i,a,u){try{return Promise.resolve(function(e,n){try{var a=Promise.resolve(o[\"sync\"===s.mode?\"parse\":\"parseAsync\"](i,t)).then(function(e){return u.shouldUseNativeValidation&&r({},u),{errors:{},values:s.raw?i:e}})}catch(r){return n(r)}return a&&a.then?a.then(void 0,n):a}(0,function(r){if(function(r){return Array.isArray(null==r?void 0:r.errors)}(r))return{values:{},errors:e(n(r.errors,!u.shouldUseNativeValidation&&\"all\"===u.criteriaMode),u)};throw r}))}catch(r){return Promise.reject(r)}}};export{t as zodResolver};\n//# sourceMappingURL=zod.module.js.map\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-primary text-primary-foreground hover:bg-primary/80\",\n secondary: \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive: \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n outline: \"text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return <div className={cn(badgeVariants({ variant }), className)} {...props} />;\n}\n\nexport { Badge, badgeVariants };\n","import React, { useState, useEffect, ReactNode, useMemo } from 'react';\n// import { translations as generatedTranslations } from '../src/translations'; // Generated translations\n\n// --- Language Configuration ---\ntype LangCode = 'en' | 'fr' | 'sw' | 'de' | 'es' | 'it' | 'ja' | 'ko' | 'pt' | 'ru' | 'tr' | 'zh' | 'nl';\nconst DEFAULT_LANG: LangCode = 'en';\n\nexport const supportedLanguages = [\n { code: 'en', name: 'English' },\n { code: 'fr', name: 'Français' },\n { code: 'sw', name: 'Kiswahili' },\n { code: 'de', name: 'Deutsch' },\n { code: 'es', name: 'Español' },\n { code: 'nl', name: 'Nederlands' }\n];\n\n// --- Caching and Loading ---\nconst translationCache: { [lang: string]: Record<string, string> } = {};\nconst loadingPromises: { [lang: string]: Promise<Record<string, string>> } = {};\nconst translationsLoaded: { [lang: string]: boolean } = {};\n\n// --- Pub/Sub for updates ---\nlet listeners: (() => void)[] = [];\nconst subscribe = (callback: () => void) => {\n listeners.push(callback);\n return () => {\n listeners = listeners.filter(l => l !== callback);\n };\n};\nconst notify = () => {\n listeners.forEach(l => l());\n};\n\nconst loadTranslations = (lang: LangCode): Promise<Record<string, string>> => {\n if (translationsLoaded[lang]) {\n return Promise.resolve(translationCache[lang] || {});\n }\n\n return loadingPromises[lang] || (() => {\n const promise = import(`./i18n/${lang}.json`)\n .then(module => {\n const translations = module.default;\n // Merge with existing auto-collected keys, but prioritize loaded translations\n const existingCache = translationCache[lang] || {};\n translationCache[lang] = { ...existingCache, ...translations };\n translationsLoaded[lang] = true;\n delete loadingPromises[lang];\n notify(); // Notify components to re-render with new translations\n return translationCache[lang];\n })\n .catch(error => {\n console.warn(`Could not load translations for language: ${lang}`, error);\n // Don't mark as loaded if it failed, but keep auto-collected keys\n delete loadingPromises[lang];\n notify(); // Still notify to update state\n return translationCache[lang] || {};\n });\n \n loadingPromises[lang] = promise;\n return promise;\n })();\n};\n\n// Helper to get cookie value\nconst getCookie = (name: string): string | null => {\n if (typeof document === 'undefined') return null;\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) return parts.pop()?.split(';').shift() || null;\n return null;\n};\n\n// Helper to set cookie value\nconst setCookie = (name: string, value: string, days: number = 365) => {\n if (typeof document === 'undefined') return;\n const expires = new Date();\n expires.setTime(expires.getTime() + days * 24 * 60 * 60 * 1000);\n document.cookie = `${name}=${value};expires=${expires.toUTCString()};path=/;SameSite=Lax`;\n};\n\nconst getCurrentLangInternal = (): LangCode => {\n if (typeof window !== 'undefined') {\n // 1. Check cookie first\n const cookieLang = getCookie('lang') as LangCode;\n if (cookieLang && cookieLang.length === 2) {\n return cookieLang;\n }\n\n // 2. Check URL parameter (for backward compatibility)\n const params = new URLSearchParams(window.location.search);\n const langParam = params.get('lang') as LangCode;\n if (langParam && langParam.length === 2) {\n // Save to cookie for future visits\n setCookie('lang', langParam);\n return langParam;\n }\n\n // 3. Fallback to browser language\n const browserLangs = navigator.languages || [navigator.language];\n for (const lang of browserLangs) {\n const shortLang = lang.split('-')[0] as LangCode;\n if (shortLang && shortLang.length === 2) {\n return shortLang;\n }\n }\n }\n return DEFAULT_LANG;\n};\nexport const getCurrentLang = getCurrentLangInternal;\n\n// Function to change language and save to cookie\nexport const setLanguage = (langCode: LangCode) => {\n setCookie('lang', langCode);\n // Reload to apply new language\n if (typeof window !== 'undefined') {\n window.location.reload();\n }\n};\n\n\n// Helper function to get a translated string directly (SYNC)\nexport const translate = (textKey: string, langParam?: LangCode): string => {\n const langToUse = langParam || getCurrentLangInternal();\n \n // 1. Try loaded translations for current language\n if (translationsLoaded[langToUse] && translationCache[langToUse] && translationCache[langToUse][textKey] !== undefined) {\n return translationCache[langToUse][textKey];\n }\n\n // 2. If not found and lang is not default, try loaded translations for default language\n if (langToUse !== DEFAULT_LANG && translationsLoaded[DEFAULT_LANG] && translationCache[DEFAULT_LANG] && translationCache[DEFAULT_LANG][textKey] !== undefined) {\n return translationCache[DEFAULT_LANG][textKey];\n }\n\n // 3. Auto-populate cache with key for dictionary building (only if not already loaded)\n if (!translationCache[langToUse]) {\n translationCache[langToUse] = {};\n }\n if (translationCache[langToUse][textKey] === undefined) {\n translationCache[langToUse][textKey] = textKey; // Store key as value for now\n }\n\n // 4. Ultimate fallback: return the key itself\n return textKey;\n};\n\ninterface TProps {\n children: ReactNode;\n}\n\nconst T: React.FC<TProps> = ({ children }) => {\n const [, forceUpdate] = useState(0);\n\n useEffect(() => {\n return subscribe(() => {\n forceUpdate(c => c + 1);\n });\n }, []);\n\n const currentLang = getCurrentLangInternal();\n useEffect(() => {\n loadTranslations(currentLang);\n }, [currentLang]);\n\n const textKey = useMemo(() => {\n if (typeof children === 'string') return children;\n if (React.isValidElement(children) && typeof children.props.children === 'string') {\n return children.props.children;\n }\n return null;\n }, [children]);\n\n if (!textKey) {\n return <>{children}</>;\n }\n\n const translatedString = translate(textKey, currentLang);\n\n if (React.isValidElement(children) && typeof children.props.children === 'string') {\n return React.cloneElement(children, {}, translatedString);\n }\n return <>{translatedString}</>;\n};\n\nexport const getTranslationCache = (lang?: LangCode): Record<string, string> | Record<string, Record<string, string>> => {\n if (lang) {\n return translationCache[lang] || {};\n }\n return translationCache;\n};\n\n// Helper function to download collected translations as JSON file\nexport const downloadTranslations = (lang: LangCode = 'en') => {\n const translations = translationCache[lang] || {};\n const isLoaded = translationsLoaded[lang];\n \n const sortedTranslations = Object.keys(translations)\n .sort()\n .reduce((result, key) => {\n result[key] = translations[key];\n return result;\n }, {} as Record<string, string>);\n \n const jsonString = JSON.stringify(sortedTranslations, null, 2);\n const blob = new Blob([jsonString], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n \n const link = document.createElement('a');\n link.href = url;\n link.download = `${lang}.json`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n \n console.log(`Downloaded ${Object.keys(sortedTranslations).length} translation keys for language: ${lang} (${isLoaded ? 'loaded from file' : 'auto-collected'})`);\n};\n\n// Helper function to check translation loading status\nexport const getTranslationStatus = (lang?: LangCode) => {\n if (lang) {\n return {\n loaded: translationsLoaded[lang] || false,\n keysCount: Object.keys(translationCache[lang] || {}).length\n };\n }\n \n const status: Record<string, { loaded: boolean; keysCount: number }> = {};\n for (const langCode of Object.keys(translationCache)) {\n status[langCode] = {\n loaded: translationsLoaded[langCode] || false,\n keysCount: Object.keys(translationCache[langCode] || {}).length\n };\n }\n return status;\n};\n\nif (typeof window !== 'undefined') {\n (window as any).getTranslationCache = getTranslationCache;\n (window as any).translate = translate; \n (window as any).getCurrentLang = getCurrentLang;\n (window as any).downloadTranslations = downloadTranslations;\n (window as any).getTranslationStatus = getTranslationStatus;\n}\n\nexport { T };\n","import React, { useState, useEffect, useMemo } from 'react';\r\nimport { supabase } from '@/integrations/supabase/client';\r\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '@/components/ui/dialog';\r\nimport { Input } from '@/components/ui/input';\r\nimport { Button } from '@/components/ui/button';\r\nimport { Badge } from '@/components/ui/badge';\r\nimport { T, translate } from '@/i18n';\r\nimport { Search, Image as ImageIcon, Check, Tag, FolderOpen, X } from 'lucide-react';\r\nimport { useAuth } from '@/hooks/useAuth';\r\nimport MediaCard from '@/components/MediaCard';\r\nimport { MediaType } from '@/lib/mediaRegistry';\r\n\r\ninterface ImagePickerDialogProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n onSelect?: (pictureId: string) => void;\r\n onMultiSelect?: (pictureIds: string[]) => void;\r\n onMultiSelectPictures?: (pictures: Picture[]) => void;\r\n currentValue?: string | null;\r\n currentValues?: string[];\r\n multiple?: boolean;\r\n}\r\ninterface Picture {\r\n id: string;\r\n title: string;\r\n image_url: string;\r\n thumbnail_url?: string;\r\n type?: string;\r\n user_id: string;\r\n tags: string[] | null;\r\n meta: any;\r\n}\r\n\r\ninterface Collection {\r\n id: string;\r\n name: string;\r\n slug: string;\r\n}\r\n\r\nexport const ImagePickerDialog: React.FC<ImagePickerDialogProps> = ({\r\n isOpen,\r\n onClose,\r\n onSelect,\r\n onMultiSelect,\r\n onMultiSelectPictures,\r\n currentValue,\r\n currentValues = [],\r\n multiple = false\r\n}) => {\r\n const { user } = useAuth();\r\n const [pictures, setPictures] = useState<Picture[]>([]);\r\n const [allTags, setAllTags] = useState<string[]>([]);\r\n const [collections, setCollections] = useState<Collection[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n const [searchQuery, setSearchQuery] = useState('');\r\n const [selectedTags, setSelectedTags] = useState<string[]>([]);\r\n const [selectedCollections, setSelectedCollections] = useState<string[]>([]);\r\n const [selectedIds, setSelectedIds] = useState<string[]>([]);\r\n const [selectedId, setSelectedId] = useState<string | null>(currentValue || null);\r\n\r\n // Initial data fetch - only runs when dialog opens\r\n useEffect(() => {\r\n if (isOpen) {\r\n fetchPictures();\r\n fetchTags();\r\n fetchCollections();\r\n }\r\n }, [isOpen]);\r\n\r\n // Sync props to local state - runs when props change\r\n useEffect(() => {\r\n if (isOpen) {\r\n if (multiple) {\r\n // Only update if actually different to avoid cycles if parent passes new array ref\r\n if (JSON.stringify(selectedIds) !== JSON.stringify(currentValues)) {\r\n setSelectedIds(currentValues || []);\r\n }\r\n } else {\r\n if (selectedId !== currentValue) {\r\n setSelectedId(currentValue || null);\r\n }\r\n }\r\n }\r\n }, [isOpen, currentValue, currentValues, multiple]);\r\n\r\n const fetchPictures = async () => {\r\n setLoading(true);\r\n try {\r\n const { data, error } = await supabase\r\n .from('pictures')\r\n .select('id, title, image_url, thumbnail_url, type, user_id, tags, meta')\r\n .eq('is_selected', true)\r\n .order('created_at', { ascending: false })\r\n .limit(100);\r\n\r\n if (error) throw error;\r\n setPictures(data || []);\r\n } catch (error) {\r\n console.error('Error fetching pictures:', error);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const fetchTags = async () => {\r\n try {\r\n const { data, error } = await supabase\r\n .from('pictures')\r\n .select('tags')\r\n .eq('is_selected', true);\r\n\r\n if (error) throw error;\r\n\r\n // Extract unique tags\r\n const tagsSet = new Set<string>();\r\n data?.forEach(pic => {\r\n pic.tags?.forEach(tag => tagsSet.add(tag));\r\n });\r\n\r\n setAllTags(Array.from(tagsSet).sort());\r\n } catch (error) {\r\n console.error('Error fetching tags:', error);\r\n }\r\n };\r\n\r\n const fetchCollections = async () => {\r\n if (!user) return;\r\n\r\n try {\r\n const { data, error } = await supabase\r\n .from('collections')\r\n .select('id, name, slug')\r\n .eq('user_id', user.id)\r\n .order('name');\r\n\r\n if (error) throw error;\r\n setCollections(data || []);\r\n } catch (error) {\r\n console.error('Error fetching collections:', error);\r\n }\r\n };\r\n\r\n const filteredPictures = useMemo(() => {\r\n return pictures.filter(pic => {\r\n // Search filter\r\n const matchesSearch = pic.title.toLowerCase().includes(searchQuery.toLowerCase()) ||\r\n pic.id.toLowerCase().includes(searchQuery.toLowerCase());\r\n\r\n // Tag filter\r\n const matchesTags = selectedTags.length === 0 ||\r\n (pic.tags && selectedTags.some(tag => pic.tags?.includes(tag)));\r\n\r\n return matchesSearch && matchesTags;\r\n });\r\n }, [pictures, searchQuery, selectedTags]);\r\n\r\n // Further filter by collections if any selected\r\n const [finalPictures, setFinalPictures] = useState<Picture[]>([]);\r\n\r\n useEffect(() => {\r\n const filterByCollections = async () => {\r\n if (selectedCollections.length === 0) {\r\n setFinalPictures(filteredPictures);\r\n return;\r\n }\r\n\r\n try {\r\n const { data, error } = await supabase\r\n .from('collection_pictures')\r\n .select('picture_id')\r\n .in('collection_id', selectedCollections);\r\n\r\n if (error) throw error;\r\n\r\n const pictureIdsInCollections = new Set(data?.map(cp => cp.picture_id) || []);\r\n setFinalPictures(filteredPictures.filter(pic => pictureIdsInCollections.has(pic.id)));\r\n } catch (error) {\r\n console.error('Error filtering by collections:', error);\r\n setFinalPictures(filteredPictures);\r\n }\r\n };\r\n\r\n filterByCollections();\r\n }, [filteredPictures, selectedCollections]);\r\n\r\n const handleSelect = () => {\r\n if (multiple) {\r\n if (onMultiSelect) {\r\n onMultiSelect(selectedIds);\r\n }\r\n if (onMultiSelectPictures) {\r\n const selectedPictures = pictures.filter(p => selectedIds.includes(p.id));\r\n onMultiSelectPictures(selectedPictures);\r\n }\r\n } else {\r\n if (selectedId && onSelect) {\r\n onSelect(selectedId);\r\n }\r\n }\r\n };\r\n\r\n const toggleSelection = (id: string) => {\r\n if (multiple) {\r\n setSelectedIds(prev =>\r\n prev.includes(id)\r\n ? prev.filter(pid => pid !== id)\r\n : [...prev, id]\r\n );\r\n } else {\r\n setSelectedId(id);\r\n }\r\n };\r\n\r\n return (\r\n <Dialog open={isOpen} onOpenChange={onClose}>\r\n <DialogContent className=\"max-w-4xl max-h-[80vh] overflow-hidden flex flex-col\">\r\n <DialogHeader>\r\n <DialogTitle><T>Select Picture</T></DialogTitle>\r\n <DialogDescription>\r\n <T>Choose a picture from your published images</T>\r\n </DialogDescription>\r\n </DialogHeader>\r\n\r\n {/* Search */}\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\r\n <Input\r\n placeholder={translate('Search by title or ID...')}\r\n value={searchQuery}\r\n onChange={(e) => setSearchQuery(e.target.value)}\r\n className=\"pl-10\"\r\n />\r\n </div>\r\n\r\n {/* Filter Buttons */}\r\n <div className=\"space-y-3\">\r\n {/* Tags Filter */}\r\n {allTags.length > 0 && (\r\n <div className=\"space-y-2\">\r\n <div className=\"flex items-center gap-2 text-sm font-medium text-muted-foreground\">\r\n <Tag className=\"h-4 w-4\" />\r\n <span><T>Tags</T></span>\r\n {selectedTags.length > 0 && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-6 px-2 text-xs\"\r\n onClick={() => setSelectedTags([])}\r\n >\r\n <T>Clear</T>\r\n </Button>\r\n )}\r\n </div>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {allTags.slice(0, 12).map(tag => (\r\n <Badge\r\n key={tag}\r\n variant={selectedTags.includes(tag) ? \"default\" : \"outline\"}\r\n className=\"cursor-pointer hover:shadow-md transition-shadow\"\r\n onClick={() => {\r\n setSelectedTags(prev =>\r\n prev.includes(tag)\r\n ? prev.filter(t => t !== tag)\r\n : [...prev, tag]\r\n );\r\n }}\r\n >\r\n {tag}\r\n {selectedTags.includes(tag) && (\r\n <X className=\"ml-1 h-3 w-3\" />\r\n )}\r\n </Badge>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Collections Filter */}\r\n {collections.length > 0 && (\r\n <div className=\"space-y-2\">\r\n <div className=\"flex items-center gap-2 text-sm font-medium text-muted-foreground\">\r\n <FolderOpen className=\"h-4 w-4\" />\r\n <span><T>Collections</T></span>\r\n {selectedCollections.length > 0 && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-6 px-2 text-xs\"\r\n onClick={() => setSelectedCollections([])}\r\n >\r\n <T>Clear</T>\r\n </Button>\r\n )}\r\n </div>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {collections.map(collection => (\r\n <Badge\r\n key={collection.id}\r\n variant={selectedCollections.includes(collection.id) ? \"default\" : \"outline\"}\r\n className=\"cursor-pointer hover:shadow-md transition-shadow\"\r\n onClick={() => {\r\n setSelectedCollections(prev =>\r\n prev.includes(collection.id)\r\n ? prev.filter(c => c !== collection.id)\r\n : [...prev, collection.id]\r\n );\r\n }}\r\n >\r\n {collection.name}\r\n {selectedCollections.includes(collection.id) && (\r\n <X className=\"ml-1 h-3 w-3\" />\r\n )}\r\n </Badge>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Pictures Grid */}\r\n <div className=\"flex-1 overflow-y-auto min-h-0 -mx-6 px-6\">\r\n {loading ? (\r\n <div className=\"flex items-center justify-center py-12\">\r\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-primary\"></div>\r\n </div>\r\n ) : finalPictures.length === 0 ? (\r\n <div className=\"text-center py-12\">\r\n <ImageIcon className=\"h-12 w-12 mx-auto mb-4 text-muted-foreground opacity-50\" />\r\n <p className=\"text-muted-foreground\">\r\n <T>{searchQuery || selectedTags.length > 0 || selectedCollections.length > 0 ? 'No pictures found' : 'No pictures available'}</T>\r\n </p>\r\n </div>\r\n ) : (\r\n <div className=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4 p-1\">\r\n {finalPictures.map((picture) => {\r\n const isSelected = multiple\r\n ? selectedIds.includes(picture.id)\r\n : selectedId === picture.id;\r\n\r\n return (\r\n <div\r\n key={picture.id}\r\n onClick={() => toggleSelection(picture.id)}\r\n onDoubleClick={() => {\r\n if (!multiple) {\r\n setSelectedId(picture.id);\r\n if (onSelect) onSelect(picture.id);\r\n } else {\r\n toggleSelection(picture.id);\r\n }\r\n }}\r\n className={`relative cursor-pointer rounded-lg overflow-hidden border-2 transition-all group ${isSelected\r\n ? 'border-primary shadow-lg scale-[1.02]'\r\n : 'border-transparent hover:border-primary/50'\r\n }`}\r\n >\r\n <div className=\"aspect-square relative pointer-events-none\">\r\n <MediaCard\r\n id={picture.id}\r\n pictureId={picture.id}\r\n url={picture.image_url}\r\n thumbnailUrl={picture.thumbnail_url}\r\n title={picture.title}\r\n author={'Me'}\r\n authorId={picture.user_id}\r\n likes={0}\r\n comments={0}\r\n type={picture.type as MediaType}\r\n meta={picture.meta}\r\n showContent={false}\r\n onClick={() => { }}\r\n onLike={undefined}\r\n onDelete={undefined}\r\n onEdit={undefined}\r\n />\r\n </div>\r\n {/* Overlay Title */}\r\n <div className=\"absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/80 to-transparent p-2 pointer-events-none\">\r\n <p className=\"text-white text-xs font-medium truncate\">\r\n {picture.title}\r\n </p>\r\n </div>\r\n </div>\r\n )\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Actions */}\r\n <div className=\"flex justify-between items-center pt-4 border-t mt-auto\">\r\n <div className=\"text-sm text-muted-foreground\">\r\n {multiple && <span>{selectedIds.length} selected</span>}\r\n </div>\r\n <div className=\"flex gap-2\">\r\n <Button variant=\"outline\" onClick={onClose}>\r\n <T>Cancel</T>\r\n </Button>\r\n <Button onClick={handleSelect} disabled={multiple ? selectedIds.length === 0 : !selectedId}>\r\n <T>Select Picture{multiple ? 's' : ''}</T>\r\n </Button>\r\n </div>\r\n </div>\r\n </DialogContent>\r\n </Dialog>\r\n );\r\n};\r\n","import React, { useEffect, useRef, useState, useCallback } from 'react';\nimport { ImagePickerDialog } from '@/components/widgets/ImagePickerDialog';\nimport { supabase } from '@/integrations/supabase/client';\n\n\n// Lazy load the heavy editor component\nconst MilkdownEditorInternal = React.lazy(() => import('@/components/lazy-editors/MilkdownEditorInternal'));\n\ninterface MarkdownEditorProps {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n className?: string;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n}\n\nconst MarkdownEditor: React.FC<MarkdownEditorProps> = ({\n value,\n onChange,\n placeholder = \"Enter description...\",\n className = \"\",\n onKeyDown\n}) => {\n const [activeTab, setActiveTab] = useState<'editor' | 'raw'>('editor');\n const [imagePickerOpen, setImagePickerOpen] = useState(false);\n const pendingImageResolveRef = useRef<((url: string) => void) | null>(null);\n\n // Handler for image upload - opens the ImagePickerDialog\n const handleImageUpload = useCallback((_file?: File): Promise<string> => {\n console.log('[handleImageUpload] Called from image-block, opening ImagePickerDialog');\n return new Promise((resolve) => {\n pendingImageResolveRef.current = resolve;\n console.log('[handleImageUpload] Resolve function stored in ref');\n setImagePickerOpen(true);\n });\n }, []);\n\n // Handler for image selection from picker\n const handleImageSelect = useCallback(async (pictureId: string) => {\n console.log('[handleImageSelect] Selected picture ID:', pictureId);\n try {\n // Fetch the image URL from Supabase\n const { data, error } = await supabase\n .from('pictures')\n .select('image_url')\n .eq('id', pictureId)\n .single();\n\n if (error) throw error;\n\n const imageUrl = data.image_url;\n\n const resolveFunc = pendingImageResolveRef.current;\n\n if (resolveFunc) {\n pendingImageResolveRef.current = null;\n resolveFunc(imageUrl);\n }\n\n setImagePickerOpen(false);\n } catch (error) {\n console.error('[handleImageSelect] Error fetching image:', error);\n if (pendingImageResolveRef.current) {\n pendingImageResolveRef.current('');\n pendingImageResolveRef.current = null;\n }\n setImagePickerOpen(false);\n }\n }, []);\n\n const handleRawChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange(e.target.value);\n }, [onChange]);\n\n return (\n <>\n <div className={`border rounded-md bg-background ${className}`}>\n <div className=\"flex border-b\">\n <button\n type=\"button\"\n onClick={() => setActiveTab('editor')}\n className={`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${activeTab === 'editor'\n ? 'border-primary text-primary'\n : 'border-transparent text-muted-foreground hover:text-foreground hover:border-border'\n }`}\n >\n Editor\n </button>\n <button\n type=\"button\"\n onClick={() => setActiveTab('raw')}\n className={`px-4 py-2 text-sm font-medium border-b-2 transition-colors ${activeTab === 'raw'\n ? 'border-primary text-primary'\n : 'border-transparent text-muted-foreground hover:text-foreground hover:border-border'\n }`}\n >\n Markdown\n </button>\n </div>\n {activeTab === 'editor' && (\n <React.Suspense fallback={<div className=\"p-3 text-muted-foreground\">Loading editor...</div>}>\n <MilkdownEditorInternal\n value={value}\n onChange={onChange}\n className={className}\n />\n </React.Suspense>\n )}\n {activeTab === 'raw' && (\n <textarea\n value={value || ''}\n onChange={handleRawChange}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n className=\"w-full p-3 bg-transparent border-0 rounded-b-md focus:ring-0 focus:outline-none resize-none font-mono text-sm\"\n style={{ height: '120px', minHeight: '120px' }}\n aria-label=\"Raw markdown input\"\n autoFocus\n />\n )}\n </div>\n\n {/* Image Picker Dialog */}\n <ImagePickerDialog\n isOpen={imagePickerOpen}\n onClose={() => {\n setImagePickerOpen(false);\n // Reject the promise if closed without selection\n if (pendingImageResolveRef.current) {\n pendingImageResolveRef.current('');\n pendingImageResolveRef.current = null;\n }\n }}\n onSelect={handleImageSelect}\n currentValue={null}\n />\n </>\n );\n};\n\nMarkdownEditor.displayName = 'MarkdownEditor';\n\n// Memoize with custom comparison\nexport default React.memo(MarkdownEditor, (prevProps, nextProps) => {\n // Re-render if value, placeholder, className, or onKeyDown change\n return (\n prevProps.value === nextProps.value &&\n prevProps.placeholder === nextProps.placeholder &&\n prevProps.className === nextProps.className &&\n prevProps.onKeyDown === nextProps.onKeyDown\n // onChange is intentionally omitted to prevent unnecessary re-renders\n );\n});","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/alert-dialog.tsx\nimport * as React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { createDialogScope } from \"@radix-ui/react-dialog\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createSlottable } from \"@radix-ui/react-slot\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar ROOT_NAME = \"AlertDialog\";\nvar [createAlertDialogContext, createAlertDialogScope] = createContextScope(ROOT_NAME, [\n createDialogScope\n]);\nvar useDialogScope = createDialogScope();\nvar AlertDialog = (props) => {\n const { __scopeAlertDialog, ...alertDialogProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Root, { ...dialogScope, ...alertDialogProps, modal: true });\n};\nAlertDialog.displayName = ROOT_NAME;\nvar TRIGGER_NAME = \"AlertDialogTrigger\";\nvar AlertDialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...triggerProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Trigger, { ...dialogScope, ...triggerProps, ref: forwardedRef });\n }\n);\nAlertDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"AlertDialogPortal\";\nvar AlertDialogPortal = (props) => {\n const { __scopeAlertDialog, ...portalProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Portal, { ...dialogScope, ...portalProps });\n};\nAlertDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"AlertDialogOverlay\";\nvar AlertDialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...overlayProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Overlay, { ...dialogScope, ...overlayProps, ref: forwardedRef });\n }\n);\nAlertDialogOverlay.displayName = OVERLAY_NAME;\nvar CONTENT_NAME = \"AlertDialogContent\";\nvar [AlertDialogContentProvider, useAlertDialogContentContext] = createAlertDialogContext(CONTENT_NAME);\nvar Slottable = createSlottable(\"AlertDialogContent\");\nvar AlertDialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, children, ...contentProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const cancelRef = React.useRef(null);\n return /* @__PURE__ */ jsx(\n DialogPrimitive.WarningProvider,\n {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"alert-dialog\",\n children: /* @__PURE__ */ jsx(AlertDialogContentProvider, { scope: __scopeAlertDialog, cancelRef, children: /* @__PURE__ */ jsxs(\n DialogPrimitive.Content,\n {\n role: \"alertdialog\",\n ...dialogScope,\n ...contentProps,\n ref: composedRefs,\n onOpenAutoFocus: composeEventHandlers(contentProps.onOpenAutoFocus, (event) => {\n event.preventDefault();\n cancelRef.current?.focus({ preventScroll: true });\n }),\n onPointerDownOutside: (event) => event.preventDefault(),\n onInteractOutside: (event) => event.preventDefault(),\n children: [\n /* @__PURE__ */ jsx(Slottable, { children }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef })\n ]\n }\n ) })\n }\n );\n }\n);\nAlertDialogContent.displayName = CONTENT_NAME;\nvar TITLE_NAME = \"AlertDialogTitle\";\nvar AlertDialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...titleProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Title, { ...dialogScope, ...titleProps, ref: forwardedRef });\n }\n);\nAlertDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"AlertDialogDescription\";\nvar AlertDialogDescription = React.forwardRef((props, forwardedRef) => {\n const { __scopeAlertDialog, ...descriptionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Description, { ...dialogScope, ...descriptionProps, ref: forwardedRef });\n});\nAlertDialogDescription.displayName = DESCRIPTION_NAME;\nvar ACTION_NAME = \"AlertDialogAction\";\nvar AlertDialogAction = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...actionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Close, { ...dialogScope, ...actionProps, ref: forwardedRef });\n }\n);\nAlertDialogAction.displayName = ACTION_NAME;\nvar CANCEL_NAME = \"AlertDialogCancel\";\nvar AlertDialogCancel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...cancelProps } = props;\n const { cancelRef } = useAlertDialogContentContext(CANCEL_NAME, __scopeAlertDialog);\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const ref = useComposedRefs(forwardedRef, cancelRef);\n return /* @__PURE__ */ jsx(DialogPrimitive.Close, { ...dialogScope, ...cancelProps, ref });\n }\n);\nAlertDialogCancel.displayName = CANCEL_NAME;\nvar DescriptionWarning = ({ contentRef }) => {\n const MESSAGE = `\\`${CONTENT_NAME}\\` requires a description for the component to be accessible for screen reader users.\n\nYou can add a description to the \\`${CONTENT_NAME}\\` by passing a \\`${DESCRIPTION_NAME}\\` component as a child, which also benefits sighted users by adding visible context to the dialog.\n\nAlternatively, you can use your own component as a description by assigning it an \\`id\\` and passing the same value to the \\`aria-describedby\\` prop in \\`${CONTENT_NAME}\\`. If the description is confusing or duplicative for sighted users, you can use the \\`@radix-ui/react-visually-hidden\\` primitive as a wrapper around your description component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;\n React.useEffect(() => {\n const hasDescription = document.getElementById(\n contentRef.current?.getAttribute(\"aria-describedby\")\n );\n if (!hasDescription) console.warn(MESSAGE);\n }, [MESSAGE, contentRef]);\n return null;\n};\nvar Root2 = AlertDialog;\nvar Trigger2 = AlertDialogTrigger;\nvar Portal2 = AlertDialogPortal;\nvar Overlay2 = AlertDialogOverlay;\nvar Content2 = AlertDialogContent;\nvar Action = AlertDialogAction;\nvar Cancel = AlertDialogCancel;\nvar Title2 = AlertDialogTitle;\nvar Description2 = AlertDialogDescription;\nexport {\n Action,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n Cancel,\n Content2 as Content,\n Description2 as Description,\n Overlay2 as Overlay,\n Portal2 as Portal,\n Root2 as Root,\n Title2 as Title,\n Trigger2 as Trigger,\n createAlertDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\n\nimport { cn } from \"@/lib/utils\";\nimport { buttonVariants } from \"@/components/ui/button\";\n\nconst AlertDialog = AlertDialogPrimitive.Root;\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n ref={ref}\n />\n));\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\n\nconst AlertDialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col space-y-2 text-center sm:text-left\", className)} {...props} />\n);\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\nconst AlertDialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className)} {...props} />\n);\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title ref={ref} className={cn(\"text-lg font-semibold\", className)} {...props} />\n));\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n));\nAlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action ref={ref} className={cn(buttonVariants(), className)} {...props} />\n));\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(buttonVariants({ variant: \"outline\" }), \"mt-2 sm:mt-0\", className)}\n {...props}\n />\n));\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n","import React, { useState, useEffect } from 'react';\nimport { Button } from '@/components/ui/button';\nimport { Card, CardContent } from '@/components/ui/card';\nimport { Badge } from '@/components/ui/badge';\nimport { Check, Image as ImageIcon, Eye, EyeOff, Trash2 } from 'lucide-react';\nimport { supabase } from '@/integrations/supabase/client';\nimport { useAuth } from '@/hooks/useAuth';\nimport { toast } from 'sonner';\nimport { T, translate } from '@/i18n';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\";\n\ninterface Version {\n id: string;\n title: string;\n image_url: string;\n is_selected: boolean;\n created_at: string;\n parent_id: string | null;\n visible: boolean;\n user_id: string; // Added for storage deletion path\n}\n\ninterface VersionSelectorProps {\n currentPictureId: string;\n onVersionSelect: (selectedVersionId: string) => void;\n}\n\nconst VersionSelector: React.FC<VersionSelectorProps> = ({\n currentPictureId,\n onVersionSelect\n}) => {\n const { user } = useAuth();\n const [versions, setVersions] = useState<Version[]>([]);\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState<string | null>(null);\n const [toggling, setToggling] = useState<string | null>(null);\n const [showDeleteDialog, setShowDeleteDialog] = useState(false);\n const [versionToDelete, setVersionToDelete] = useState<Version | null>(null);\n const [isDeleting, setIsDeleting] = useState(false);\n\n useEffect(() => {\n loadVersions();\n }, [currentPictureId]);\n\n const loadVersions = async () => {\n if (!user || !currentPictureId) return;\n\n setLoading(true);\n try {\n // Get the current picture to determine if it's a parent or child\n const { data: currentPicture, error: currentError } = await supabase\n .from('pictures')\n .select('id, parent_id, title, image_url, is_selected, created_at, visible')\n .eq('id', currentPictureId)\n .single();\n\n if (currentError) throw currentError;\n\n // Determine the root parent ID\n const rootParentId = currentPicture.parent_id || currentPicture.id;\n\n // Get all versions (parent + children) for this image tree\n const { data: allVersions, error: versionsError } = await supabase\n .from('pictures')\n .select('id, title, image_url, is_selected, created_at, parent_id, visible, user_id')\n .eq('user_id', user.id)\n .or(`id.eq.${rootParentId},parent_id.eq.${rootParentId}`)\n .order('created_at', { ascending: true });\n\n if (versionsError) throw versionsError;\n\n setVersions(allVersions || []);\n } catch (error) {\n console.error('Error loading versions:', error);\n toast.error(translate('Failed to load image versions'));\n } finally {\n setLoading(false);\n }\n };\n\n const handleVersionSelect = async (versionId: string) => {\n if (!user) return;\n\n setUpdating(versionId);\n try {\n // First, unselect all versions in this image tree\n const rootParentId = versions.find(v => v.parent_id === null)?.id || currentPictureId;\n\n await supabase\n .from('pictures')\n .update({ is_selected: false })\n .eq('user_id', user.id)\n .or(`id.eq.${rootParentId},parent_id.eq.${rootParentId}`);\n\n // Then select the chosen version\n const { error: selectError } = await supabase\n .from('pictures')\n .update({ is_selected: true })\n .eq('id', versionId)\n .eq('user_id', user.id);\n\n if (selectError) throw selectError;\n\n // Update local state\n setVersions(prevVersions =>\n prevVersions.map(v => ({\n ...v,\n is_selected: v.id === versionId\n }))\n );\n\n toast.success(translate('Version selected successfully!'));\n onVersionSelect(versionId);\n } catch (error) {\n console.error('Error selecting version:', error);\n toast.error(translate('Failed to select version'));\n } finally {\n setUpdating(null);\n }\n };\n\n const handleToggleVisibility = async (versionId: string, currentVisibility: boolean) => {\n if (!user) return;\n\n setToggling(versionId);\n try {\n const { error } = await supabase\n .from('pictures')\n .update({ visible: !currentVisibility })\n .eq('id', versionId)\n .eq('user_id', user.id);\n\n if (error) throw error;\n\n // Update local state\n setVersions(prevVersions =>\n prevVersions.map(v => ({\n ...v,\n visible: v.id === versionId ? !currentVisibility : v.visible\n }))\n );\n\n toast.success(translate(!currentVisibility ? 'Version made visible successfully!' : 'Version hidden successfully!'));\n } catch (error) {\n console.error('Error toggling visibility:', error);\n toast.error(translate('Failed to update visibility'));\n } finally {\n setToggling(null);\n }\n };\n\n const handleDeleteClick = (version: Version) => {\n setVersionToDelete(version);\n setShowDeleteDialog(true);\n };\n\n const confirmDelete = async () => {\n if (!versionToDelete || !user) return;\n\n setIsDeleting(true);\n try {\n // 1. Find all descendants to delete (cascade)\n const { data: allUserPictures, error: loadError } = await supabase\n .from('pictures')\n .select('*')\n .eq('user_id', user.id); // Fetch all to build tree (optimization: could just fetch relevant sub-tree but this is safer)\n\n if (loadError) throw loadError;\n\n const findDescendants = (parentId: string): typeof versionToDelete[] => {\n const descendants: typeof versionToDelete[] = [];\n const children = allUserPictures.filter(p => p.parent_id === parentId);\n children.forEach(child => {\n descendants.push(child);\n descendants.push(...findDescendants(child.id));\n });\n return descendants;\n };\n\n const descendantsToDelete = findDescendants(versionToDelete.id);\n const allToDelete = [versionToDelete, ...descendantsToDelete];\n\n // 2. Delete from Storage for ALL items\n for (const item of allToDelete) {\n if (item.image_url?.includes('supabase.co/storage/')) {\n const urlParts = item.image_url.split('/');\n const fileName = urlParts[urlParts.length - 1];\n const bucketPath = `${item.user_id}/${fileName}`;\n\n await supabase.storage\n .from('pictures')\n .remove([bucketPath]);\n }\n }\n\n // 3. Delete from Database (bulk)\n const { error: dbError } = await supabase\n .from('pictures')\n .delete()\n .in('id', allToDelete.map(v => v.id));\n\n if (dbError) throw dbError;\n\n // 4. Update local state\n const deletedIds = new Set(allToDelete.map(v => v.id));\n setVersions(prev => prev.filter(v => !deletedIds.has(v.id)));\n\n const totalDeleted = allToDelete.length;\n toast.success(translate(`Deleted ${totalDeleted > 1 ? `${totalDeleted} versions` : 'version'} successfully`));\n\n } catch (error) {\n console.error('Error deleting version:', error);\n toast.error(translate('Failed to delete version'));\n } finally {\n setIsDeleting(false);\n setShowDeleteDialog(false);\n setVersionToDelete(null);\n }\n };\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center p-4\">\n <div className=\"text-muted-foreground\"><T>Loading versions...</T></div>\n </div>\n );\n }\n\n if (versions.length <= 1) {\n return (\n <div className=\"text-center p-4\">\n <p className=\"text-muted-foreground\"><T>No other versions available for this image.</T></p>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center gap-2 mb-4\">\n <ImageIcon className=\"h-5 w-5\" />\n <h3 className=\"font-semibold\"><T>Image Versions</T></h3>\n <Badge variant=\"secondary\">{versions.length}</Badge>\n </div>\n\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-4\">\n {versions.map((version) => (\n <Card\n key={version.id}\n className={`cursor-pointer transition-all hover:scale-105 ${version.is_selected ? 'ring-2 ring-primary' : ''\n }`}\n >\n <CardContent className=\"p-2\">\n <div className=\"aspect-square relative mb-2 overflow-hidden rounded-md\">\n <img\n src={version.image_url}\n alt={version.title}\n className=\"w-full h-full object-cover\"\n />\n {version.is_selected && (\n <div className=\"absolute top-2 right-2 bg-primary text-primary-foreground rounded-full p-1\">\n <Check className=\"h-3 w-3\" />\n </div>\n )}\n </div>\n\n <div className=\"space-y-1\">\n <p className=\"text-xs font-medium truncate\">{version.title}</p>\n <p className=\"text-xs text-muted-foreground\">\n {new Date(version.created_at).toLocaleDateString()}\n </p>\n <div className=\"flex items-center gap-1\">\n {version.parent_id === null && (\n <Badge variant=\"outline\" className=\"text-xs\"><T>Original</T></Badge>\n )}\n {!version.visible && (\n <Badge variant=\"secondary\" className=\"text-xs\"><T>Hidden</T></Badge>\n )}\n </div>\n </div>\n\n <div className=\"flex gap-1 mt-2\">\n <Button\n size=\"sm\"\n className=\"flex-1\"\n variant={version.is_selected ? \"default\" : \"outline\"}\n onClick={() => handleVersionSelect(version.id)}\n disabled={updating === version.id}\n >\n <T>{updating === version.id ? 'Selecting...' :\n version.is_selected ? 'Selected' : 'Select'}</T>\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => handleToggleVisibility(version.id, version.visible)}\n disabled={toggling === version.id}\n className=\"px-2\"\n >\n {toggling === version.id ? (\n <div className=\"animate-spin rounded-full h-3 w-3 border border-current border-t-transparent\" />\n ) : version.visible ? (\n <Eye className=\"h-3 w-3\" />\n ) : (\n <EyeOff className=\"h-3 w-3\" />\n )}\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"px-2 text-destructive hover:text-destructive hover:bg-destructive/10\"\n onClick={() => handleDeleteClick(version)}\n disabled={isDeleting || version.id === currentPictureId} // Disable deleting the currently ACTIVE one? Or just handle correctly?\n title={translate(\"Delete version\")}\n >\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <AlertDialog open={showDeleteDialog} onOpenChange={setShowDeleteDialog}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle><T>Delete Version</T></AlertDialogTitle>\n <AlertDialogDescription>\n <T>Are you sure you want to delete this version?</T> \"{versionToDelete?.title}\"\n <br /><br />\n <span className=\"text-destructive font-semibold\">\n <T>This action cannot be undone.</T>\n </span>\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel><T>Cancel</T></AlertDialogCancel>\n <AlertDialogAction\n onClick={(e) => {\n e.preventDefault();\n confirmDelete();\n }}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n disabled={isDeleting}\n >\n {isDeleting ? <T>Deleting...</T> : <T>Delete</T>}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n};\n\nexport default VersionSelector;","function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '6.16.0'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream<T>`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, BlobLikePart, or AsyncIterable of BlobLikeParts\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create a ChatKit session\n *\n * @example\n * ```ts\n * const chatSession =\n * await client.beta.chatkit.sessions.create({\n * user: 'x',\n * workflow: { id: 'id' },\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/chatkit/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n });\n }\n /**\n * Cancel a ChatKit session\n *\n * @example\n * ```ts\n * const chatSession =\n * await client.beta.chatkit.sessions.cancel('cksess_123');\n * ```\n */\n cancel(sessionID, options) {\n return this._client.post(path `/chatkit/sessions/${sessionID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Threads extends APIResource {\n /**\n * Retrieve a ChatKit thread\n *\n * @example\n * ```ts\n * const chatkitThread =\n * await client.beta.chatkit.threads.retrieve('cthr_123');\n * ```\n */\n retrieve(threadID, options) {\n return this._client.get(path `/chatkit/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n });\n }\n /**\n * List ChatKit threads\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatkitThread of client.beta.chatkit.threads.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chatkit/threads', (ConversationCursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n });\n }\n /**\n * Delete a ChatKit thread\n *\n * @example\n * ```ts\n * const thread = await client.beta.chatkit.threads.delete(\n * 'cthr_123',\n * );\n * ```\n */\n delete(threadID, options) {\n return this._client.delete(path `/chatkit/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n });\n }\n /**\n * List ChatKit thread items\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const thread of client.beta.chatkit.threads.listItems(\n * 'cthr_123',\n * )) {\n * // ...\n * }\n * ```\n */\n listItems(threadID, query = {}, options) {\n return this._client.getAPIList(path `/chatkit/threads/${threadID}/items`, (ConversationCursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions } from \"./sessions.mjs\";\nimport * as ThreadsAPI from \"./threads.mjs\";\nimport { Threads, } from \"./threads.mjs\";\nexport class ChatKit extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nChatKit.Sessions = Sessions;\nChatKit.Threads = Threads;\n//# sourceMappingURL=chatkit.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ChatKitAPI from \"./chatkit/chatkit.mjs\";\nimport { ChatKit } from \"./chatkit/chatkit.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.chatkit = new ChatKitAPI.ChatKit(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.ChatKit = ChatKit;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * - The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools)\n * for details.\n * - The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input)\n * or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n * - The Batch API only supports `.jsonl` files up to 200 MB in size. The input\n * also has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file and remove it from all vector stores.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Calls extends APIResource {\n /**\n * Accept an incoming SIP call and configure the realtime session that will handle\n * it.\n *\n * @example\n * ```ts\n * await client.realtime.calls.accept('call_id', {\n * type: 'realtime',\n * });\n * ```\n */\n accept(callID, body, options) {\n return this._client.post(path `/realtime/calls/${callID}/accept`, {\n body,\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n /**\n * End an active Realtime API call, whether it was initiated over SIP or WebRTC.\n *\n * @example\n * ```ts\n * await client.realtime.calls.hangup('call_id');\n * ```\n */\n hangup(callID, options) {\n return this._client.post(path `/realtime/calls/${callID}/hangup`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n /**\n * Transfer an active SIP call to a new destination using the SIP REFER verb.\n *\n * @example\n * ```ts\n * await client.realtime.calls.refer('call_id', {\n * target_uri: 'tel:+14155550123',\n * });\n * ```\n */\n refer(callID, body, options) {\n return this._client.post(path `/realtime/calls/${callID}/refer`, {\n body,\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n /**\n * Decline an incoming SIP call by returning a SIP status code to the caller.\n *\n * @example\n * ```ts\n * await client.realtime.calls.reject('call_id');\n * ```\n */\n reject(callID, body = {}, options) {\n return this._client.post(path `/realtime/calls/${callID}/reject`, {\n body,\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=calls.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n *\n * @example\n * ```ts\n * const clientSecret =\n * await client.realtime.clientSecrets.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CallsAPI from \"./calls.mjs\";\nimport { Calls } from \"./calls.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n this.calls = new CallsAPI.Calls(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\nRealtime.Calls = Calls;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class InputTokens extends APIResource {\n /**\n * Get input token counts\n *\n * @example\n * ```ts\n * const response = await client.responses.inputTokens.count();\n * ```\n */\n count(body = {}, options) {\n return this._client.post('/responses/input_tokens', { body, ...options });\n }\n}\n//# sourceMappingURL=input-tokens.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport * as InputTokensAPI from \"./input-tokens.mjs\";\nimport { InputTokens } from \"./input-tokens.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n this.inputTokens = new InputTokensAPI.InputTokens(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n /**\n * Compact conversation\n *\n * @example\n * ```ts\n * const compactedResponse = await client.responses.compact({\n * model: 'gpt-5.2',\n * });\n * ```\n */\n compact(body, options) {\n return this._client.post('/responses/compact', { body, ...options });\n }\n}\nResponses.InputItems = InputItems;\nResponses.InputTokens = InputTokens;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { ConversationCursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { maybeMultipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Videos extends APIResource {\n /**\n * Create a video\n */\n create(body, options) {\n return this._client.post('/videos', maybeMultipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve a video\n */\n retrieve(videoID, options) {\n return this._client.get(path `/videos/${videoID}`, options);\n }\n /**\n * List videos\n */\n list(query = {}, options) {\n return this._client.getAPIList('/videos', (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete a video\n */\n delete(videoID, options) {\n return this._client.delete(path `/videos/${videoID}`, options);\n }\n /**\n * Download video content\n */\n downloadContent(videoID, query = {}, options) {\n return this._client.get(path `/videos/${videoID}/content`, {\n query,\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Create a video remix\n */\n remix(videoID, body, options) {\n return this._client.post(path `/videos/${videoID}/remix`, maybeMultipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=videos.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1,<base64> format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,<base64>. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Videos, } from \"./resources/videos.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record<string, string | undefined>} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n this.videos = new API.Videos(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\nOpenAI.Videos = Videos;\n//# sourceMappingURL=client.mjs.map","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nlet emojiRegex = undefined;\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n /**\n * `c` was changed to `[cC]` to replicate /i flag\n */\n cuid: /^[cC][^\\s-]{8,}$/,\n cuid2: /^[0-9a-z]+$/,\n ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n /**\n * `a-z` was added to replicate /i flag\n */\n email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n /**\n * Constructed a valid Unicode RegExp\n *\n * Lazily instantiate since this type of regex isn't supported\n * in all envs (e.g. React Native).\n *\n * See:\n * https://github.com/colinhacks/zod/issues/2433\n * Fix in Zod:\n * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n */\n emoji: () => {\n if (emojiRegex === undefined) {\n emojiRegex = RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\");\n }\n return emojiRegex;\n },\n /**\n * Unused\n */\n uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n /**\n * Unused\n */\n ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n /**\n * Unused\n */\n ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n nanoid: /^[a-zA-Z0-9_-]{21}$/,\n jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n};\nexport function parseStringDef(def, refs) {\n const res = {\n type: \"string\",\n };\n if (def.checks) {\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"max\":\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"email\":\n switch (refs.emailStrategy) {\n case \"format:email\":\n addFormat(res, \"email\", check.message, refs);\n break;\n case \"format:idn-email\":\n addFormat(res, \"idn-email\", check.message, refs);\n break;\n case \"pattern:zod\":\n addPattern(res, zodPatterns.email, check.message, refs);\n break;\n }\n break;\n case \"url\":\n addFormat(res, \"uri\", check.message, refs);\n break;\n case \"uuid\":\n addFormat(res, \"uuid\", check.message, refs);\n break;\n case \"regex\":\n addPattern(res, check.regex, check.message, refs);\n break;\n case \"cuid\":\n addPattern(res, zodPatterns.cuid, check.message, refs);\n break;\n case \"cuid2\":\n addPattern(res, zodPatterns.cuid2, check.message, refs);\n break;\n case \"startsWith\":\n addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);\n break;\n case \"endsWith\":\n addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);\n break;\n case \"datetime\":\n addFormat(res, \"date-time\", check.message, refs);\n break;\n case \"date\":\n addFormat(res, \"date\", check.message, refs);\n break;\n case \"time\":\n addFormat(res, \"time\", check.message, refs);\n break;\n case \"duration\":\n addFormat(res, \"duration\", check.message, refs);\n break;\n case \"length\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"includes\": {\n addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);\n break;\n }\n case \"ip\": {\n if (check.version !== \"v6\") {\n addFormat(res, \"ipv4\", check.message, refs);\n }\n if (check.version !== \"v4\") {\n addFormat(res, \"ipv6\", check.message, refs);\n }\n break;\n }\n case \"base64url\":\n addPattern(res, zodPatterns.base64url, check.message, refs);\n break;\n case \"jwt\":\n addPattern(res, zodPatterns.jwt, check.message, refs);\n break;\n case \"cidr\": {\n if (check.version !== \"v6\") {\n addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n }\n if (check.version !== \"v4\") {\n addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n }\n break;\n }\n case \"emoji\":\n addPattern(res, zodPatterns.emoji(), check.message, refs);\n break;\n case \"ulid\": {\n addPattern(res, zodPatterns.ulid, check.message, refs);\n break;\n }\n case \"base64\": {\n switch (refs.base64Strategy) {\n case \"format:binary\": {\n addFormat(res, \"binary\", check.message, refs);\n break;\n }\n case \"contentEncoding:base64\": {\n setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n break;\n }\n case \"pattern:zod\": {\n addPattern(res, zodPatterns.base64, check.message, refs);\n break;\n }\n }\n break;\n }\n case \"nanoid\": {\n addPattern(res, zodPatterns.nanoid, check.message, refs);\n }\n case \"toLowerCase\":\n case \"toUpperCase\":\n case \"trim\":\n break;\n default:\n ((_) => { })(check);\n }\n }\n }\n return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n return refs.patternStrategy === \"escape\"\n ? escapeNonAlphaNumeric(literal)\n : literal;\n}\nconst ALPHA_NUMERIC = new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");\nfunction escapeNonAlphaNumeric(source) {\n let result = \"\";\n for (let i = 0; i < source.length; i++) {\n if (!ALPHA_NUMERIC.has(source[i])) {\n result += \"\\\\\";\n }\n result += source[i];\n }\n return result;\n}\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(schema, value, message, refs) {\n if (schema.format || schema.anyOf?.some((x) => x.format)) {\n if (!schema.anyOf) {\n schema.anyOf = [];\n }\n if (schema.format) {\n schema.anyOf.push({\n format: schema.format,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { format: schema.errorMessage.format },\n }),\n });\n delete schema.format;\n if (schema.errorMessage) {\n delete schema.errorMessage.format;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.anyOf.push({\n format: value,\n ...(message &&\n refs.errorMessages && { errorMessage: { format: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"format\", value, message, refs);\n }\n}\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(schema, regex, message, refs) {\n if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n if (!schema.allOf) {\n schema.allOf = [];\n }\n if (schema.pattern) {\n schema.allOf.push({\n pattern: schema.pattern,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { pattern: schema.errorMessage.pattern },\n }),\n });\n delete schema.pattern;\n if (schema.errorMessage) {\n delete schema.errorMessage.pattern;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.allOf.push({\n pattern: stringifyRegExpWithFlags(regex, refs),\n ...(message &&\n refs.errorMessages && { errorMessage: { pattern: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"pattern\", stringifyRegExpWithFlags(regex, refs), message, refs);\n }\n}\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex, refs) {\n if (!refs.applyRegexFlags || !regex.flags) {\n return regex.source;\n }\n // Currently handled flags\n const flags = {\n i: regex.flags.includes(\"i\"),\n m: regex.flags.includes(\"m\"),\n s: regex.flags.includes(\"s\"), // `.` matches newlines\n };\n // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n const source = flags.i ? regex.source.toLowerCase() : regex.source;\n let pattern = \"\";\n let isEscaped = false;\n let inCharGroup = false;\n let inCharRange = false;\n for (let i = 0; i < source.length; i++) {\n if (isEscaped) {\n pattern += source[i];\n isEscaped = false;\n continue;\n }\n if (flags.i) {\n if (inCharGroup) {\n if (source[i].match(/[a-z]/)) {\n if (inCharRange) {\n pattern += source[i];\n pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n inCharRange = false;\n }\n else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n pattern += source[i];\n inCharRange = true;\n }\n else {\n pattern += `${source[i]}${source[i].toUpperCase()}`;\n }\n continue;\n }\n }\n else if (source[i].match(/[a-z]/)) {\n pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n continue;\n }\n }\n if (flags.m) {\n if (source[i] === \"^\") {\n pattern += `(^|(?<=[\\r\\n]))`;\n continue;\n }\n else if (source[i] === \"$\") {\n pattern += `($|(?=[\\r\\n]))`;\n continue;\n }\n }\n if (flags.s && source[i] === \".\") {\n pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n continue;\n }\n pattern += source[i];\n if (source[i] === \"\\\\\") {\n isEscaped = true;\n }\n else if (inCharGroup && source[i] === \"]\") {\n inCharGroup = false;\n }\n else if (!inCharGroup && source[i] === \"[\") {\n inCharGroup = true;\n }\n }\n try {\n new RegExp(pattern);\n }\n catch {\n console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n return regex.source;\n }\n return pattern;\n}\n","/**\n * Contains the list of OpenAPI data types\n * as defined by https://swagger.io/docs/specification/data-models/data-types/\n * @public\n */\nvar SchemaType;\n(function (SchemaType) {\n /** String type. */\n SchemaType[\"STRING\"] = \"string\";\n /** Number type. */\n SchemaType[\"NUMBER\"] = \"number\";\n /** Integer type. */\n SchemaType[\"INTEGER\"] = \"integer\";\n /** Boolean type. */\n SchemaType[\"BOOLEAN\"] = \"boolean\";\n /** Array type. */\n SchemaType[\"ARRAY\"] = \"array\";\n /** Object type. */\n SchemaType[\"OBJECT\"] = \"object\";\n})(SchemaType || (SchemaType = {}));\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @public\n */\nvar ExecutableCodeLanguage;\n(function (ExecutableCodeLanguage) {\n ExecutableCodeLanguage[\"LANGUAGE_UNSPECIFIED\"] = \"language_unspecified\";\n ExecutableCodeLanguage[\"PYTHON\"] = \"python\";\n})(ExecutableCodeLanguage || (ExecutableCodeLanguage = {}));\n/**\n * Possible outcomes of code execution.\n * @public\n */\nvar Outcome;\n(function (Outcome) {\n /**\n * Unspecified status. This value should not be used.\n */\n Outcome[\"OUTCOME_UNSPECIFIED\"] = \"outcome_unspecified\";\n /**\n * Code execution completed successfully.\n */\n Outcome[\"OUTCOME_OK\"] = \"outcome_ok\";\n /**\n * Code execution finished but with a failure. `stderr` should contain the\n * reason.\n */\n Outcome[\"OUTCOME_FAILED\"] = \"outcome_failed\";\n /**\n * Code execution ran for too long, and was cancelled. There may or may not\n * be a partial output present.\n */\n Outcome[\"OUTCOME_DEADLINE_EXCEEDED\"] = \"outcome_deadline_exceeded\";\n})(Outcome || (Outcome = {}));\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Possible roles.\n * @public\n */\nconst POSSIBLE_ROLES = [\"user\", \"model\", \"function\", \"system\"];\n/**\n * Harm categories that would cause prompts or candidates to be blocked.\n * @public\n */\nvar HarmCategory;\n(function (HarmCategory) {\n HarmCategory[\"HARM_CATEGORY_UNSPECIFIED\"] = \"HARM_CATEGORY_UNSPECIFIED\";\n HarmCategory[\"HARM_CATEGORY_HATE_SPEECH\"] = \"HARM_CATEGORY_HATE_SPEECH\";\n HarmCategory[\"HARM_CATEGORY_SEXUALLY_EXPLICIT\"] = \"HARM_CATEGORY_SEXUALLY_EXPLICIT\";\n HarmCategory[\"HARM_CATEGORY_HARASSMENT\"] = \"HARM_CATEGORY_HARASSMENT\";\n HarmCategory[\"HARM_CATEGORY_DANGEROUS_CONTENT\"] = \"HARM_CATEGORY_DANGEROUS_CONTENT\";\n HarmCategory[\"HARM_CATEGORY_CIVIC_INTEGRITY\"] = \"HARM_CATEGORY_CIVIC_INTEGRITY\";\n})(HarmCategory || (HarmCategory = {}));\n/**\n * Threshold above which a prompt or candidate will be blocked.\n * @public\n */\nvar HarmBlockThreshold;\n(function (HarmBlockThreshold) {\n /** Threshold is unspecified. */\n HarmBlockThreshold[\"HARM_BLOCK_THRESHOLD_UNSPECIFIED\"] = \"HARM_BLOCK_THRESHOLD_UNSPECIFIED\";\n /** Content with NEGLIGIBLE will be allowed. */\n HarmBlockThreshold[\"BLOCK_LOW_AND_ABOVE\"] = \"BLOCK_LOW_AND_ABOVE\";\n /** Content with NEGLIGIBLE and LOW will be allowed. */\n HarmBlockThreshold[\"BLOCK_MEDIUM_AND_ABOVE\"] = \"BLOCK_MEDIUM_AND_ABOVE\";\n /** Content with NEGLIGIBLE, LOW, and MEDIUM will be allowed. */\n HarmBlockThreshold[\"BLOCK_ONLY_HIGH\"] = \"BLOCK_ONLY_HIGH\";\n /** All content will be allowed. */\n HarmBlockThreshold[\"BLOCK_NONE\"] = \"BLOCK_NONE\";\n})(HarmBlockThreshold || (HarmBlockThreshold = {}));\n/**\n * Probability that a prompt or candidate matches a harm category.\n * @public\n */\nvar HarmProbability;\n(function (HarmProbability) {\n /** Probability is unspecified. */\n HarmProbability[\"HARM_PROBABILITY_UNSPECIFIED\"] = \"HARM_PROBABILITY_UNSPECIFIED\";\n /** Content has a negligible chance of being unsafe. */\n HarmProbability[\"NEGLIGIBLE\"] = \"NEGLIGIBLE\";\n /** Content has a low chance of being unsafe. */\n HarmProbability[\"LOW\"] = \"LOW\";\n /** Content has a medium chance of being unsafe. */\n HarmProbability[\"MEDIUM\"] = \"MEDIUM\";\n /** Content has a high chance of being unsafe. */\n HarmProbability[\"HIGH\"] = \"HIGH\";\n})(HarmProbability || (HarmProbability = {}));\n/**\n * Reason that a prompt was blocked.\n * @public\n */\nvar BlockReason;\n(function (BlockReason) {\n // A blocked reason was not specified.\n BlockReason[\"BLOCKED_REASON_UNSPECIFIED\"] = \"BLOCKED_REASON_UNSPECIFIED\";\n // Content was blocked by safety settings.\n BlockReason[\"SAFETY\"] = \"SAFETY\";\n // Content was blocked, but the reason is uncategorized.\n BlockReason[\"OTHER\"] = \"OTHER\";\n})(BlockReason || (BlockReason = {}));\n/**\n * Reason that a candidate finished.\n * @public\n */\nvar FinishReason;\n(function (FinishReason) {\n // Default value. This value is unused.\n FinishReason[\"FINISH_REASON_UNSPECIFIED\"] = \"FINISH_REASON_UNSPECIFIED\";\n // Natural stop point of the model or provided stop sequence.\n FinishReason[\"STOP\"] = \"STOP\";\n // The maximum number of tokens as specified in the request was reached.\n FinishReason[\"MAX_TOKENS\"] = \"MAX_TOKENS\";\n // The candidate content was flagged for safety reasons.\n FinishReason[\"SAFETY\"] = \"SAFETY\";\n // The candidate content was flagged for recitation reasons.\n FinishReason[\"RECITATION\"] = \"RECITATION\";\n // The candidate content was flagged for using an unsupported language.\n FinishReason[\"LANGUAGE\"] = \"LANGUAGE\";\n // Token generation stopped because the content contains forbidden terms.\n FinishReason[\"BLOCKLIST\"] = \"BLOCKLIST\";\n // Token generation stopped for potentially containing prohibited content.\n FinishReason[\"PROHIBITED_CONTENT\"] = \"PROHIBITED_CONTENT\";\n // Token generation stopped because the content potentially contains Sensitive Personally Identifiable Information (SPII).\n FinishReason[\"SPII\"] = \"SPII\";\n // The function call generated by the model is invalid.\n FinishReason[\"MALFORMED_FUNCTION_CALL\"] = \"MALFORMED_FUNCTION_CALL\";\n // Unknown reason.\n FinishReason[\"OTHER\"] = \"OTHER\";\n})(FinishReason || (FinishReason = {}));\n/**\n * Task type for embedding content.\n * @public\n */\nvar TaskType;\n(function (TaskType) {\n TaskType[\"TASK_TYPE_UNSPECIFIED\"] = \"TASK_TYPE_UNSPECIFIED\";\n TaskType[\"RETRIEVAL_QUERY\"] = \"RETRIEVAL_QUERY\";\n TaskType[\"RETRIEVAL_DOCUMENT\"] = \"RETRIEVAL_DOCUMENT\";\n TaskType[\"SEMANTIC_SIMILARITY\"] = \"SEMANTIC_SIMILARITY\";\n TaskType[\"CLASSIFICATION\"] = \"CLASSIFICATION\";\n TaskType[\"CLUSTERING\"] = \"CLUSTERING\";\n})(TaskType || (TaskType = {}));\n/**\n * @public\n */\nvar FunctionCallingMode;\n(function (FunctionCallingMode) {\n // Unspecified function calling mode. This value should not be used.\n FunctionCallingMode[\"MODE_UNSPECIFIED\"] = \"MODE_UNSPECIFIED\";\n // Default model behavior, model decides to predict either a function call\n // or a natural language repspose.\n FunctionCallingMode[\"AUTO\"] = \"AUTO\";\n // Model is constrained to always predicting a function call only.\n // If \"allowed_function_names\" are set, the predicted function call will be\n // limited to any one of \"allowed_function_names\", else the predicted\n // function call will be any one of the provided \"function_declarations\".\n FunctionCallingMode[\"ANY\"] = \"ANY\";\n // Model will not predict any function call. Model behavior is same as when\n // not passing any function declarations.\n FunctionCallingMode[\"NONE\"] = \"NONE\";\n})(FunctionCallingMode || (FunctionCallingMode = {}));\n/**\n * The mode of the predictor to be used in dynamic retrieval.\n * @public\n */\nvar DynamicRetrievalMode;\n(function (DynamicRetrievalMode) {\n // Unspecified function calling mode. This value should not be used.\n DynamicRetrievalMode[\"MODE_UNSPECIFIED\"] = \"MODE_UNSPECIFIED\";\n // Run retrieval only when system decides it is necessary.\n DynamicRetrievalMode[\"MODE_DYNAMIC\"] = \"MODE_DYNAMIC\";\n})(DynamicRetrievalMode || (DynamicRetrievalMode = {}));\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Basic error type for this SDK.\n * @public\n */\nclass GoogleGenerativeAIError extends Error {\n constructor(message) {\n super(`[GoogleGenerativeAI Error]: ${message}`);\n }\n}\n/**\n * Errors in the contents of a response from the model. This includes parsing\n * errors, or responses including a safety block reason.\n * @public\n */\nclass GoogleGenerativeAIResponseError extends GoogleGenerativeAIError {\n constructor(message, response) {\n super(message);\n this.response = response;\n }\n}\n/**\n * Error class covering HTTP errors when calling the server. Includes HTTP\n * status, statusText, and optional details, if provided in the server response.\n * @public\n */\nclass GoogleGenerativeAIFetchError extends GoogleGenerativeAIError {\n constructor(message, status, statusText, errorDetails) {\n super(message);\n this.status = status;\n this.statusText = statusText;\n this.errorDetails = errorDetails;\n }\n}\n/**\n * Errors in the contents of a request originating from user input.\n * @public\n */\nclass GoogleGenerativeAIRequestInputError extends GoogleGenerativeAIError {\n}\n/**\n * Error thrown when a request is aborted, either due to a timeout or\n * intentional cancellation by the user.\n * @public\n */\nclass GoogleGenerativeAIAbortError extends GoogleGenerativeAIError {\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_BASE_URL = \"https://generativelanguage.googleapis.com\";\nconst DEFAULT_API_VERSION = \"v1beta\";\n/**\n * We can't `require` package.json if this runs on web. We will use rollup to\n * swap in the version number here at build time.\n */\nconst PACKAGE_VERSION = \"0.24.1\";\nconst PACKAGE_LOG_HEADER = \"genai-js\";\nvar Task;\n(function (Task) {\n Task[\"GENERATE_CONTENT\"] = \"generateContent\";\n Task[\"STREAM_GENERATE_CONTENT\"] = \"streamGenerateContent\";\n Task[\"COUNT_TOKENS\"] = \"countTokens\";\n Task[\"EMBED_CONTENT\"] = \"embedContent\";\n Task[\"BATCH_EMBED_CONTENTS\"] = \"batchEmbedContents\";\n})(Task || (Task = {}));\nclass RequestUrl {\n constructor(model, task, apiKey, stream, requestOptions) {\n this.model = model;\n this.task = task;\n this.apiKey = apiKey;\n this.stream = stream;\n this.requestOptions = requestOptions;\n }\n toString() {\n var _a, _b;\n const apiVersion = ((_a = this.requestOptions) === null || _a === void 0 ? void 0 : _a.apiVersion) || DEFAULT_API_VERSION;\n const baseUrl = ((_b = this.requestOptions) === null || _b === void 0 ? void 0 : _b.baseUrl) || DEFAULT_BASE_URL;\n let url = `${baseUrl}/${apiVersion}/${this.model}:${this.task}`;\n if (this.stream) {\n url += \"?alt=sse\";\n }\n return url;\n }\n}\n/**\n * Simple, but may become more complex if we add more versions to log.\n */\nfunction getClientHeaders(requestOptions) {\n const clientHeaders = [];\n if (requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.apiClient) {\n clientHeaders.push(requestOptions.apiClient);\n }\n clientHeaders.push(`${PACKAGE_LOG_HEADER}/${PACKAGE_VERSION}`);\n return clientHeaders.join(\" \");\n}\nasync function getHeaders(url) {\n var _a;\n const headers = new Headers();\n headers.append(\"Content-Type\", \"application/json\");\n headers.append(\"x-goog-api-client\", getClientHeaders(url.requestOptions));\n headers.append(\"x-goog-api-key\", url.apiKey);\n let customHeaders = (_a = url.requestOptions) === null || _a === void 0 ? void 0 : _a.customHeaders;\n if (customHeaders) {\n if (!(customHeaders instanceof Headers)) {\n try {\n customHeaders = new Headers(customHeaders);\n }\n catch (e) {\n throw new GoogleGenerativeAIRequestInputError(`unable to convert customHeaders value ${JSON.stringify(customHeaders)} to Headers: ${e.message}`);\n }\n }\n for (const [headerName, headerValue] of customHeaders.entries()) {\n if (headerName === \"x-goog-api-key\") {\n throw new GoogleGenerativeAIRequestInputError(`Cannot set reserved header name ${headerName}`);\n }\n else if (headerName === \"x-goog-api-client\") {\n throw new GoogleGenerativeAIRequestInputError(`Header name ${headerName} can only be set using the apiClient field`);\n }\n headers.append(headerName, headerValue);\n }\n }\n return headers;\n}\nasync function constructModelRequest(model, task, apiKey, stream, body, requestOptions) {\n const url = new RequestUrl(model, task, apiKey, stream, requestOptions);\n return {\n url: url.toString(),\n fetchOptions: Object.assign(Object.assign({}, buildFetchOptions(requestOptions)), { method: \"POST\", headers: await getHeaders(url), body }),\n };\n}\nasync function makeModelRequest(model, task, apiKey, stream, body, requestOptions = {}, \n// Allows this to be stubbed for tests\nfetchFn = fetch) {\n const { url, fetchOptions } = await constructModelRequest(model, task, apiKey, stream, body, requestOptions);\n return makeRequest(url, fetchOptions, fetchFn);\n}\nasync function makeRequest(url, fetchOptions, fetchFn = fetch) {\n let response;\n try {\n response = await fetchFn(url, fetchOptions);\n }\n catch (e) {\n handleResponseError(e, url);\n }\n if (!response.ok) {\n await handleResponseNotOk(response, url);\n }\n return response;\n}\nfunction handleResponseError(e, url) {\n let err = e;\n if (err.name === \"AbortError\") {\n err = new GoogleGenerativeAIAbortError(`Request aborted when fetching ${url.toString()}: ${e.message}`);\n err.stack = e.stack;\n }\n else if (!(e instanceof GoogleGenerativeAIFetchError ||\n e instanceof GoogleGenerativeAIRequestInputError)) {\n err = new GoogleGenerativeAIError(`Error fetching from ${url.toString()}: ${e.message}`);\n err.stack = e.stack;\n }\n throw err;\n}\nasync function handleResponseNotOk(response, url) {\n let message = \"\";\n let errorDetails;\n try {\n const json = await response.json();\n message = json.error.message;\n if (json.error.details) {\n message += ` ${JSON.stringify(json.error.details)}`;\n errorDetails = json.error.details;\n }\n }\n catch (e) {\n // ignored\n }\n throw new GoogleGenerativeAIFetchError(`Error fetching from ${url.toString()}: [${response.status} ${response.statusText}] ${message}`, response.status, response.statusText, errorDetails);\n}\n/**\n * Generates the request options to be passed to the fetch API.\n * @param requestOptions - The user-defined request options.\n * @returns The generated request options.\n */\nfunction buildFetchOptions(requestOptions) {\n const fetchOptions = {};\n if ((requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.signal) !== undefined || (requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeout) >= 0) {\n const controller = new AbortController();\n if ((requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeout) >= 0) {\n setTimeout(() => controller.abort(), requestOptions.timeout);\n }\n if (requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.signal) {\n requestOptions.signal.addEventListener(\"abort\", () => {\n controller.abort();\n });\n }\n fetchOptions.signal = controller.signal;\n }\n return fetchOptions;\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Adds convenience helper methods to a response object, including stream\n * chunks (as long as each chunk is a complete GenerateContentResponse JSON).\n */\nfunction addHelpers(response) {\n response.text = () => {\n if (response.candidates && response.candidates.length > 0) {\n if (response.candidates.length > 1) {\n console.warn(`This response had ${response.candidates.length} ` +\n `candidates. Returning text from the first candidate only. ` +\n `Access response.candidates directly to use the other candidates.`);\n }\n if (hadBadFinishReason(response.candidates[0])) {\n throw new GoogleGenerativeAIResponseError(`${formatBlockErrorMessage(response)}`, response);\n }\n return getText(response);\n }\n else if (response.promptFeedback) {\n throw new GoogleGenerativeAIResponseError(`Text not available. ${formatBlockErrorMessage(response)}`, response);\n }\n return \"\";\n };\n /**\n * TODO: remove at next major version\n */\n response.functionCall = () => {\n if (response.candidates && response.candidates.length > 0) {\n if (response.candidates.length > 1) {\n console.warn(`This response had ${response.candidates.length} ` +\n `candidates. Returning function calls from the first candidate only. ` +\n `Access response.candidates directly to use the other candidates.`);\n }\n if (hadBadFinishReason(response.candidates[0])) {\n throw new GoogleGenerativeAIResponseError(`${formatBlockErrorMessage(response)}`, response);\n }\n console.warn(`response.functionCall() is deprecated. ` +\n `Use response.functionCalls() instead.`);\n return getFunctionCalls(response)[0];\n }\n else if (response.promptFeedback) {\n throw new GoogleGenerativeAIResponseError(`Function call not available. ${formatBlockErrorMessage(response)}`, response);\n }\n return undefined;\n };\n response.functionCalls = () => {\n if (response.candidates && response.candidates.length > 0) {\n if (response.candidates.length > 1) {\n console.warn(`This response had ${response.candidates.length} ` +\n `candidates. Returning function calls from the first candidate only. ` +\n `Access response.candidates directly to use the other candidates.`);\n }\n if (hadBadFinishReason(response.candidates[0])) {\n throw new GoogleGenerativeAIResponseError(`${formatBlockErrorMessage(response)}`, response);\n }\n return getFunctionCalls(response);\n }\n else if (response.promptFeedback) {\n throw new GoogleGenerativeAIResponseError(`Function call not available. ${formatBlockErrorMessage(response)}`, response);\n }\n return undefined;\n };\n return response;\n}\n/**\n * Returns all text found in all parts of first candidate.\n */\nfunction getText(response) {\n var _a, _b, _c, _d;\n const textStrings = [];\n if ((_b = (_a = response.candidates) === null || _a === void 0 ? void 0 : _a[0].content) === null || _b === void 0 ? void 0 : _b.parts) {\n for (const part of (_d = (_c = response.candidates) === null || _c === void 0 ? void 0 : _c[0].content) === null || _d === void 0 ? void 0 : _d.parts) {\n if (part.text) {\n textStrings.push(part.text);\n }\n if (part.executableCode) {\n textStrings.push(\"\\n```\" +\n part.executableCode.language +\n \"\\n\" +\n part.executableCode.code +\n \"\\n```\\n\");\n }\n if (part.codeExecutionResult) {\n textStrings.push(\"\\n```\\n\" + part.codeExecutionResult.output + \"\\n```\\n\");\n }\n }\n }\n if (textStrings.length > 0) {\n return textStrings.join(\"\");\n }\n else {\n return \"\";\n }\n}\n/**\n * Returns functionCall of first candidate.\n */\nfunction getFunctionCalls(response) {\n var _a, _b, _c, _d;\n const functionCalls = [];\n if ((_b = (_a = response.candidates) === null || _a === void 0 ? void 0 : _a[0].content) === null || _b === void 0 ? void 0 : _b.parts) {\n for (const part of (_d = (_c = response.candidates) === null || _c === void 0 ? void 0 : _c[0].content) === null || _d === void 0 ? void 0 : _d.parts) {\n if (part.functionCall) {\n functionCalls.push(part.functionCall);\n }\n }\n }\n if (functionCalls.length > 0) {\n return functionCalls;\n }\n else {\n return undefined;\n }\n}\nconst badFinishReasons = [\n FinishReason.RECITATION,\n FinishReason.SAFETY,\n FinishReason.LANGUAGE,\n];\nfunction hadBadFinishReason(candidate) {\n return (!!candidate.finishReason &&\n badFinishReasons.includes(candidate.finishReason));\n}\nfunction formatBlockErrorMessage(response) {\n var _a, _b, _c;\n let message = \"\";\n if ((!response.candidates || response.candidates.length === 0) &&\n response.promptFeedback) {\n message += \"Response was blocked\";\n if ((_a = response.promptFeedback) === null || _a === void 0 ? void 0 : _a.blockReason) {\n message += ` due to ${response.promptFeedback.blockReason}`;\n }\n if ((_b = response.promptFeedback) === null || _b === void 0 ? void 0 : _b.blockReasonMessage) {\n message += `: ${response.promptFeedback.blockReasonMessage}`;\n }\n }\n else if ((_c = response.candidates) === null || _c === void 0 ? void 0 : _c[0]) {\n const firstCandidate = response.candidates[0];\n if (hadBadFinishReason(firstCandidate)) {\n message += `Candidate was blocked due to ${firstCandidate.finishReason}`;\n if (firstCandidate.finishMessage) {\n message += `: ${firstCandidate.finishMessage}`;\n }\n }\n }\n return message;\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\n\r\nfunction __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nfunction __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst responseLineRE = /^data\\: (.*)(?:\\n\\n|\\r\\r|\\r\\n\\r\\n)/;\n/**\n * Process a response.body stream from the backend and return an\n * iterator that provides one complete GenerateContentResponse at a time\n * and a promise that resolves with a single aggregated\n * GenerateContentResponse.\n *\n * @param response - Response from a fetch call\n */\nfunction processStream(response) {\n const inputStream = response.body.pipeThrough(new TextDecoderStream(\"utf8\", { fatal: true }));\n const responseStream = getResponseStream(inputStream);\n const [stream1, stream2] = responseStream.tee();\n return {\n stream: generateResponseSequence(stream1),\n response: getResponsePromise(stream2),\n };\n}\nasync function getResponsePromise(stream) {\n const allResponses = [];\n const reader = stream.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n return addHelpers(aggregateResponses(allResponses));\n }\n allResponses.push(value);\n }\n}\nfunction generateResponseSequence(stream) {\n return __asyncGenerator(this, arguments, function* generateResponseSequence_1() {\n const reader = stream.getReader();\n while (true) {\n const { value, done } = yield __await(reader.read());\n if (done) {\n break;\n }\n yield yield __await(addHelpers(value));\n }\n });\n}\n/**\n * Reads a raw stream from the fetch response and join incomplete\n * chunks, returning a new stream that provides a single complete\n * GenerateContentResponse in each iteration.\n */\nfunction getResponseStream(inputStream) {\n const reader = inputStream.getReader();\n const stream = new ReadableStream({\n start(controller) {\n let currentText = \"\";\n return pump();\n function pump() {\n return reader\n .read()\n .then(({ value, done }) => {\n if (done) {\n if (currentText.trim()) {\n controller.error(new GoogleGenerativeAIError(\"Failed to parse stream\"));\n return;\n }\n controller.close();\n return;\n }\n currentText += value;\n let match = currentText.match(responseLineRE);\n let parsedResponse;\n while (match) {\n try {\n parsedResponse = JSON.parse(match[1]);\n }\n catch (e) {\n controller.error(new GoogleGenerativeAIError(`Error parsing JSON response: \"${match[1]}\"`));\n return;\n }\n controller.enqueue(parsedResponse);\n currentText = currentText.substring(match[0].length);\n match = currentText.match(responseLineRE);\n }\n return pump();\n })\n .catch((e) => {\n let err = e;\n err.stack = e.stack;\n if (err.name === \"AbortError\") {\n err = new GoogleGenerativeAIAbortError(\"Request aborted when reading from the stream\");\n }\n else {\n err = new GoogleGenerativeAIError(\"Error reading from the stream\");\n }\n throw err;\n });\n }\n },\n });\n return stream;\n}\n/**\n * Aggregates an array of `GenerateContentResponse`s into a single\n * GenerateContentResponse.\n */\nfunction aggregateResponses(responses) {\n const lastResponse = responses[responses.length - 1];\n const aggregatedResponse = {\n promptFeedback: lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.promptFeedback,\n };\n for (const response of responses) {\n if (response.candidates) {\n let candidateIndex = 0;\n for (const candidate of response.candidates) {\n if (!aggregatedResponse.candidates) {\n aggregatedResponse.candidates = [];\n }\n if (!aggregatedResponse.candidates[candidateIndex]) {\n aggregatedResponse.candidates[candidateIndex] = {\n index: candidateIndex,\n };\n }\n // Keep overwriting, the last one will be final\n aggregatedResponse.candidates[candidateIndex].citationMetadata =\n candidate.citationMetadata;\n aggregatedResponse.candidates[candidateIndex].groundingMetadata =\n candidate.groundingMetadata;\n aggregatedResponse.candidates[candidateIndex].finishReason =\n candidate.finishReason;\n aggregatedResponse.candidates[candidateIndex].finishMessage =\n candidate.finishMessage;\n aggregatedResponse.candidates[candidateIndex].safetyRatings =\n candidate.safetyRatings;\n /**\n * Candidates should always have content and parts, but this handles\n * possible malformed responses.\n */\n if (candidate.content && candidate.content.parts) {\n if (!aggregatedResponse.candidates[candidateIndex].content) {\n aggregatedResponse.candidates[candidateIndex].content = {\n role: candidate.content.role || \"user\",\n parts: [],\n };\n }\n const newPart = {};\n for (const part of candidate.content.parts) {\n if (part.text) {\n newPart.text = part.text;\n }\n if (part.functionCall) {\n newPart.functionCall = part.functionCall;\n }\n if (part.executableCode) {\n newPart.executableCode = part.executableCode;\n }\n if (part.codeExecutionResult) {\n newPart.codeExecutionResult = part.codeExecutionResult;\n }\n if (Object.keys(newPart).length === 0) {\n newPart.text = \"\";\n }\n aggregatedResponse.candidates[candidateIndex].content.parts.push(newPart);\n }\n }\n }\n candidateIndex++;\n }\n if (response.usageMetadata) {\n aggregatedResponse.usageMetadata = response.usageMetadata;\n }\n }\n return aggregatedResponse;\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function generateContentStream(apiKey, model, params, requestOptions) {\n const response = await makeModelRequest(model, Task.STREAM_GENERATE_CONTENT, apiKey, \n /* stream */ true, JSON.stringify(params), requestOptions);\n return processStream(response);\n}\nasync function generateContent(apiKey, model, params, requestOptions) {\n const response = await makeModelRequest(model, Task.GENERATE_CONTENT, apiKey, \n /* stream */ false, JSON.stringify(params), requestOptions);\n const responseJson = await response.json();\n const enhancedResponse = addHelpers(responseJson);\n return {\n response: enhancedResponse,\n };\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction formatSystemInstruction(input) {\n // null or undefined\n if (input == null) {\n return undefined;\n }\n else if (typeof input === \"string\") {\n return { role: \"system\", parts: [{ text: input }] };\n }\n else if (input.text) {\n return { role: \"system\", parts: [input] };\n }\n else if (input.parts) {\n if (!input.role) {\n return { role: \"system\", parts: input.parts };\n }\n else {\n return input;\n }\n }\n}\nfunction formatNewContent(request) {\n let newParts = [];\n if (typeof request === \"string\") {\n newParts = [{ text: request }];\n }\n else {\n for (const partOrString of request) {\n if (typeof partOrString === \"string\") {\n newParts.push({ text: partOrString });\n }\n else {\n newParts.push(partOrString);\n }\n }\n }\n return assignRoleToPartsAndValidateSendMessageRequest(newParts);\n}\n/**\n * When multiple Part types (i.e. FunctionResponsePart and TextPart) are\n * passed in a single Part array, we may need to assign different roles to each\n * part. Currently only FunctionResponsePart requires a role other than 'user'.\n * @private\n * @param parts Array of parts to pass to the model\n * @returns Array of content items\n */\nfunction assignRoleToPartsAndValidateSendMessageRequest(parts) {\n const userContent = { role: \"user\", parts: [] };\n const functionContent = { role: \"function\", parts: [] };\n let hasUserContent = false;\n let hasFunctionContent = false;\n for (const part of parts) {\n if (\"functionResponse\" in part) {\n functionContent.parts.push(part);\n hasFunctionContent = true;\n }\n else {\n userContent.parts.push(part);\n hasUserContent = true;\n }\n }\n if (hasUserContent && hasFunctionContent) {\n throw new GoogleGenerativeAIError(\"Within a single message, FunctionResponse cannot be mixed with other type of part in the request for sending chat message.\");\n }\n if (!hasUserContent && !hasFunctionContent) {\n throw new GoogleGenerativeAIError(\"No content is provided for sending chat message.\");\n }\n if (hasUserContent) {\n return userContent;\n }\n return functionContent;\n}\nfunction formatCountTokensInput(params, modelParams) {\n var _a;\n let formattedGenerateContentRequest = {\n model: modelParams === null || modelParams === void 0 ? void 0 : modelParams.model,\n generationConfig: modelParams === null || modelParams === void 0 ? void 0 : modelParams.generationConfig,\n safetySettings: modelParams === null || modelParams === void 0 ? void 0 : modelParams.safetySettings,\n tools: modelParams === null || modelParams === void 0 ? void 0 : modelParams.tools,\n toolConfig: modelParams === null || modelParams === void 0 ? void 0 : modelParams.toolConfig,\n systemInstruction: modelParams === null || modelParams === void 0 ? void 0 : modelParams.systemInstruction,\n cachedContent: (_a = modelParams === null || modelParams === void 0 ? void 0 : modelParams.cachedContent) === null || _a === void 0 ? void 0 : _a.name,\n contents: [],\n };\n const containsGenerateContentRequest = params.generateContentRequest != null;\n if (params.contents) {\n if (containsGenerateContentRequest) {\n throw new GoogleGenerativeAIRequestInputError(\"CountTokensRequest must have one of contents or generateContentRequest, not both.\");\n }\n formattedGenerateContentRequest.contents = params.contents;\n }\n else if (containsGenerateContentRequest) {\n formattedGenerateContentRequest = Object.assign(Object.assign({}, formattedGenerateContentRequest), params.generateContentRequest);\n }\n else {\n // Array or string\n const content = formatNewContent(params);\n formattedGenerateContentRequest.contents = [content];\n }\n return { generateContentRequest: formattedGenerateContentRequest };\n}\nfunction formatGenerateContentInput(params) {\n let formattedRequest;\n if (params.contents) {\n formattedRequest = params;\n }\n else {\n // Array or string\n const content = formatNewContent(params);\n formattedRequest = { contents: [content] };\n }\n if (params.systemInstruction) {\n formattedRequest.systemInstruction = formatSystemInstruction(params.systemInstruction);\n }\n return formattedRequest;\n}\nfunction formatEmbedContentInput(params) {\n if (typeof params === \"string\" || Array.isArray(params)) {\n const content = formatNewContent(params);\n return { content };\n }\n return params;\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// https://ai.google.dev/api/rest/v1beta/Content#part\nconst VALID_PART_FIELDS = [\n \"text\",\n \"inlineData\",\n \"functionCall\",\n \"functionResponse\",\n \"executableCode\",\n \"codeExecutionResult\",\n];\nconst VALID_PARTS_PER_ROLE = {\n user: [\"text\", \"inlineData\"],\n function: [\"functionResponse\"],\n model: [\"text\", \"functionCall\", \"executableCode\", \"codeExecutionResult\"],\n // System instructions shouldn't be in history anyway.\n system: [\"text\"],\n};\nfunction validateChatHistory(history) {\n let prevContent = false;\n for (const currContent of history) {\n const { role, parts } = currContent;\n if (!prevContent && role !== \"user\") {\n throw new GoogleGenerativeAIError(`First content should be with role 'user', got ${role}`);\n }\n if (!POSSIBLE_ROLES.includes(role)) {\n throw new GoogleGenerativeAIError(`Each item should include role field. Got ${role} but valid roles are: ${JSON.stringify(POSSIBLE_ROLES)}`);\n }\n if (!Array.isArray(parts)) {\n throw new GoogleGenerativeAIError(\"Content should have 'parts' property with an array of Parts\");\n }\n if (parts.length === 0) {\n throw new GoogleGenerativeAIError(\"Each Content should have at least one part\");\n }\n const countFields = {\n text: 0,\n inlineData: 0,\n functionCall: 0,\n functionResponse: 0,\n fileData: 0,\n executableCode: 0,\n codeExecutionResult: 0,\n };\n for (const part of parts) {\n for (const key of VALID_PART_FIELDS) {\n if (key in part) {\n countFields[key] += 1;\n }\n }\n }\n const validParts = VALID_PARTS_PER_ROLE[role];\n for (const key of VALID_PART_FIELDS) {\n if (!validParts.includes(key) && countFields[key] > 0) {\n throw new GoogleGenerativeAIError(`Content with role '${role}' can't contain '${key}' part`);\n }\n }\n prevContent = true;\n }\n}\n/**\n * Returns true if the response is valid (could be appended to the history), flase otherwise.\n */\nfunction isValidResponse(response) {\n var _a;\n if (response.candidates === undefined || response.candidates.length === 0) {\n return false;\n }\n const content = (_a = response.candidates[0]) === null || _a === void 0 ? void 0 : _a.content;\n if (content === undefined) {\n return false;\n }\n if (content.parts === undefined || content.parts.length === 0) {\n return false;\n }\n for (const part of content.parts) {\n if (part === undefined || Object.keys(part).length === 0) {\n return false;\n }\n if (part.text !== undefined && part.text === \"\") {\n return false;\n }\n }\n return true;\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Do not log a message for this error.\n */\nconst SILENT_ERROR = \"SILENT_ERROR\";\n/**\n * ChatSession class that enables sending chat messages and stores\n * history of sent and received messages so far.\n *\n * @public\n */\nclass ChatSession {\n constructor(apiKey, model, params, _requestOptions = {}) {\n this.model = model;\n this.params = params;\n this._requestOptions = _requestOptions;\n this._history = [];\n this._sendPromise = Promise.resolve();\n this._apiKey = apiKey;\n if (params === null || params === void 0 ? void 0 : params.history) {\n validateChatHistory(params.history);\n this._history = params.history;\n }\n }\n /**\n * Gets the chat history so far. Blocked prompts are not added to history.\n * Blocked candidates are not added to history, nor are the prompts that\n * generated them.\n */\n async getHistory() {\n await this._sendPromise;\n return this._history;\n }\n /**\n * Sends a chat message and receives a non-streaming\n * {@link GenerateContentResult}.\n *\n * Fields set in the optional {@link SingleRequestOptions} parameter will\n * take precedence over the {@link RequestOptions} values provided to\n * {@link GoogleGenerativeAI.getGenerativeModel }.\n */\n async sendMessage(request, requestOptions = {}) {\n var _a, _b, _c, _d, _e, _f;\n await this._sendPromise;\n const newContent = formatNewContent(request);\n const generateContentRequest = {\n safetySettings: (_a = this.params) === null || _a === void 0 ? void 0 : _a.safetySettings,\n generationConfig: (_b = this.params) === null || _b === void 0 ? void 0 : _b.generationConfig,\n tools: (_c = this.params) === null || _c === void 0 ? void 0 : _c.tools,\n toolConfig: (_d = this.params) === null || _d === void 0 ? void 0 : _d.toolConfig,\n systemInstruction: (_e = this.params) === null || _e === void 0 ? void 0 : _e.systemInstruction,\n cachedContent: (_f = this.params) === null || _f === void 0 ? void 0 : _f.cachedContent,\n contents: [...this._history, newContent],\n };\n const chatSessionRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n let finalResult;\n // Add onto the chain.\n this._sendPromise = this._sendPromise\n .then(() => generateContent(this._apiKey, this.model, generateContentRequest, chatSessionRequestOptions))\n .then((result) => {\n var _a;\n if (isValidResponse(result.response)) {\n this._history.push(newContent);\n const responseContent = Object.assign({ parts: [], \n // Response seems to come back without a role set.\n role: \"model\" }, (_a = result.response.candidates) === null || _a === void 0 ? void 0 : _a[0].content);\n this._history.push(responseContent);\n }\n else {\n const blockErrorMessage = formatBlockErrorMessage(result.response);\n if (blockErrorMessage) {\n console.warn(`sendMessage() was unsuccessful. ${blockErrorMessage}. Inspect response object for details.`);\n }\n }\n finalResult = result;\n })\n .catch((e) => {\n // Resets _sendPromise to avoid subsequent calls failing and throw error.\n this._sendPromise = Promise.resolve();\n throw e;\n });\n await this._sendPromise;\n return finalResult;\n }\n /**\n * Sends a chat message and receives the response as a\n * {@link GenerateContentStreamResult} containing an iterable stream\n * and a response promise.\n *\n * Fields set in the optional {@link SingleRequestOptions} parameter will\n * take precedence over the {@link RequestOptions} values provided to\n * {@link GoogleGenerativeAI.getGenerativeModel }.\n */\n async sendMessageStream(request, requestOptions = {}) {\n var _a, _b, _c, _d, _e, _f;\n await this._sendPromise;\n const newContent = formatNewContent(request);\n const generateContentRequest = {\n safetySettings: (_a = this.params) === null || _a === void 0 ? void 0 : _a.safetySettings,\n generationConfig: (_b = this.params) === null || _b === void 0 ? void 0 : _b.generationConfig,\n tools: (_c = this.params) === null || _c === void 0 ? void 0 : _c.tools,\n toolConfig: (_d = this.params) === null || _d === void 0 ? void 0 : _d.toolConfig,\n systemInstruction: (_e = this.params) === null || _e === void 0 ? void 0 : _e.systemInstruction,\n cachedContent: (_f = this.params) === null || _f === void 0 ? void 0 : _f.cachedContent,\n contents: [...this._history, newContent],\n };\n const chatSessionRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n const streamPromise = generateContentStream(this._apiKey, this.model, generateContentRequest, chatSessionRequestOptions);\n // Add onto the chain.\n this._sendPromise = this._sendPromise\n .then(() => streamPromise)\n // This must be handled to avoid unhandled rejection, but jump\n // to the final catch block with a label to not log this error.\n .catch((_ignored) => {\n throw new Error(SILENT_ERROR);\n })\n .then((streamResult) => streamResult.response)\n .then((response) => {\n if (isValidResponse(response)) {\n this._history.push(newContent);\n const responseContent = Object.assign({}, response.candidates[0].content);\n // Response seems to come back without a role set.\n if (!responseContent.role) {\n responseContent.role = \"model\";\n }\n this._history.push(responseContent);\n }\n else {\n const blockErrorMessage = formatBlockErrorMessage(response);\n if (blockErrorMessage) {\n console.warn(`sendMessageStream() was unsuccessful. ${blockErrorMessage}. Inspect response object for details.`);\n }\n }\n })\n .catch((e) => {\n // Errors in streamPromise are already catchable by the user as\n // streamPromise is returned.\n // Avoid duplicating the error message in logs.\n if (e.message !== SILENT_ERROR) {\n // Users do not have access to _sendPromise to catch errors\n // downstream from streamPromise, so they should not throw.\n console.error(e);\n }\n });\n return streamPromise;\n }\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function countTokens(apiKey, model, params, singleRequestOptions) {\n const response = await makeModelRequest(model, Task.COUNT_TOKENS, apiKey, false, JSON.stringify(params), singleRequestOptions);\n return response.json();\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function embedContent(apiKey, model, params, requestOptions) {\n const response = await makeModelRequest(model, Task.EMBED_CONTENT, apiKey, false, JSON.stringify(params), requestOptions);\n return response.json();\n}\nasync function batchEmbedContents(apiKey, model, params, requestOptions) {\n const requestsWithModel = params.requests.map((request) => {\n return Object.assign(Object.assign({}, request), { model });\n });\n const response = await makeModelRequest(model, Task.BATCH_EMBED_CONTENTS, apiKey, false, JSON.stringify({ requests: requestsWithModel }), requestOptions);\n return response.json();\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class for generative model APIs.\n * @public\n */\nclass GenerativeModel {\n constructor(apiKey, modelParams, _requestOptions = {}) {\n this.apiKey = apiKey;\n this._requestOptions = _requestOptions;\n if (modelParams.model.includes(\"/\")) {\n // Models may be named \"models/model-name\" or \"tunedModels/model-name\"\n this.model = modelParams.model;\n }\n else {\n // If path is not included, assume it's a non-tuned model.\n this.model = `models/${modelParams.model}`;\n }\n this.generationConfig = modelParams.generationConfig || {};\n this.safetySettings = modelParams.safetySettings || [];\n this.tools = modelParams.tools;\n this.toolConfig = modelParams.toolConfig;\n this.systemInstruction = formatSystemInstruction(modelParams.systemInstruction);\n this.cachedContent = modelParams.cachedContent;\n }\n /**\n * Makes a single non-streaming call to the model\n * and returns an object containing a single {@link GenerateContentResponse}.\n *\n * Fields set in the optional {@link SingleRequestOptions} parameter will\n * take precedence over the {@link RequestOptions} values provided to\n * {@link GoogleGenerativeAI.getGenerativeModel }.\n */\n async generateContent(request, requestOptions = {}) {\n var _a;\n const formattedParams = formatGenerateContentInput(request);\n const generativeModelRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n return generateContent(this.apiKey, this.model, Object.assign({ generationConfig: this.generationConfig, safetySettings: this.safetySettings, tools: this.tools, toolConfig: this.toolConfig, systemInstruction: this.systemInstruction, cachedContent: (_a = this.cachedContent) === null || _a === void 0 ? void 0 : _a.name }, formattedParams), generativeModelRequestOptions);\n }\n /**\n * Makes a single streaming call to the model and returns an object\n * containing an iterable stream that iterates over all chunks in the\n * streaming response as well as a promise that returns the final\n * aggregated response.\n *\n * Fields set in the optional {@link SingleRequestOptions} parameter will\n * take precedence over the {@link RequestOptions} values provided to\n * {@link GoogleGenerativeAI.getGenerativeModel }.\n */\n async generateContentStream(request, requestOptions = {}) {\n var _a;\n const formattedParams = formatGenerateContentInput(request);\n const generativeModelRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n return generateContentStream(this.apiKey, this.model, Object.assign({ generationConfig: this.generationConfig, safetySettings: this.safetySettings, tools: this.tools, toolConfig: this.toolConfig, systemInstruction: this.systemInstruction, cachedContent: (_a = this.cachedContent) === null || _a === void 0 ? void 0 : _a.name }, formattedParams), generativeModelRequestOptions);\n }\n /**\n * Gets a new {@link ChatSession} instance which can be used for\n * multi-turn chats.\n */\n startChat(startChatParams) {\n var _a;\n return new ChatSession(this.apiKey, this.model, Object.assign({ generationConfig: this.generationConfig, safetySettings: this.safetySettings, tools: this.tools, toolConfig: this.toolConfig, systemInstruction: this.systemInstruction, cachedContent: (_a = this.cachedContent) === null || _a === void 0 ? void 0 : _a.name }, startChatParams), this._requestOptions);\n }\n /**\n * Counts the tokens in the provided request.\n *\n * Fields set in the optional {@link SingleRequestOptions} parameter will\n * take precedence over the {@link RequestOptions} values provided to\n * {@link GoogleGenerativeAI.getGenerativeModel }.\n */\n async countTokens(request, requestOptions = {}) {\n const formattedParams = formatCountTokensInput(request, {\n model: this.model,\n generationConfig: this.generationConfig,\n safetySettings: this.safetySettings,\n tools: this.tools,\n toolConfig: this.toolConfig,\n systemInstruction: this.systemInstruction,\n cachedContent: this.cachedContent,\n });\n const generativeModelRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n return countTokens(this.apiKey, this.model, formattedParams, generativeModelRequestOptions);\n }\n /**\n * Embeds the provided content.\n *\n * Fields set in the optional {@link SingleRequestOptions} parameter will\n * take precedence over the {@link RequestOptions} values provided to\n * {@link GoogleGenerativeAI.getGenerativeModel }.\n */\n async embedContent(request, requestOptions = {}) {\n const formattedParams = formatEmbedContentInput(request);\n const generativeModelRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n return embedContent(this.apiKey, this.model, formattedParams, generativeModelRequestOptions);\n }\n /**\n * Embeds an array of {@link EmbedContentRequest}s.\n *\n * Fields set in the optional {@link SingleRequestOptions} parameter will\n * take precedence over the {@link RequestOptions} values provided to\n * {@link GoogleGenerativeAI.getGenerativeModel }.\n */\n async batchEmbedContents(batchEmbedContentRequest, requestOptions = {}) {\n const generativeModelRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n return batchEmbedContents(this.apiKey, this.model, batchEmbedContentRequest, generativeModelRequestOptions);\n }\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Top-level class for this SDK\n * @public\n */\nclass GoogleGenerativeAI {\n constructor(apiKey) {\n this.apiKey = apiKey;\n }\n /**\n * Gets a {@link GenerativeModel} instance for the provided model name.\n */\n getGenerativeModel(modelParams, requestOptions) {\n if (!modelParams.model) {\n throw new GoogleGenerativeAIError(`Must provide a model name. ` +\n `Example: genai.getGenerativeModel({ model: 'my-model-name' })`);\n }\n return new GenerativeModel(this.apiKey, modelParams, requestOptions);\n }\n /**\n * Creates a {@link GenerativeModel} instance from provided content cache.\n */\n getGenerativeModelFromCachedContent(cachedContent, modelParams, requestOptions) {\n if (!cachedContent.name) {\n throw new GoogleGenerativeAIRequestInputError(\"Cached content must contain a `name` field.\");\n }\n if (!cachedContent.model) {\n throw new GoogleGenerativeAIRequestInputError(\"Cached content must contain a `model` field.\");\n }\n /**\n * Not checking tools and toolConfig for now as it would require a deep\n * equality comparison and isn't likely to be a common case.\n */\n const disallowedDuplicates = [\"model\", \"systemInstruction\"];\n for (const key of disallowedDuplicates) {\n if ((modelParams === null || modelParams === void 0 ? void 0 : modelParams[key]) &&\n cachedContent[key] &&\n (modelParams === null || modelParams === void 0 ? void 0 : modelParams[key]) !== cachedContent[key]) {\n if (key === \"model\") {\n const modelParamsComp = modelParams.model.startsWith(\"models/\")\n ? modelParams.model.replace(\"models/\", \"\")\n : modelParams.model;\n const cachedContentComp = cachedContent.model.startsWith(\"models/\")\n ? cachedContent.model.replace(\"models/\", \"\")\n : cachedContent.model;\n if (modelParamsComp === cachedContentComp) {\n continue;\n }\n }\n throw new GoogleGenerativeAIRequestInputError(`Different value for \"${key}\" specified in modelParams` +\n ` (${modelParams[key]}) and cachedContent (${cachedContent[key]})`);\n }\n }\n const modelParamsFromCache = Object.assign(Object.assign({}, modelParams), { model: cachedContent.model, tools: cachedContent.tools, toolConfig: cachedContent.toolConfig, systemInstruction: cachedContent.systemInstruction, cachedContent });\n return new GenerativeModel(this.apiKey, modelParamsFromCache, requestOptions);\n }\n}\n\nexport { BlockReason, ChatSession, DynamicRetrievalMode, ExecutableCodeLanguage, FinishReason, FunctionCallingMode, GenerativeModel, GoogleGenerativeAI, GoogleGenerativeAIAbortError, GoogleGenerativeAIError, GoogleGenerativeAIFetchError, GoogleGenerativeAIRequestInputError, GoogleGenerativeAIResponseError, HarmBlockThreshold, HarmCategory, HarmProbability, Outcome, POSSIBLE_ROLES, SchemaType, TaskType };\n//# sourceMappingURL=index.mjs.map\n","import { GoogleGenerativeAI, Part, GenerationConfig } from \"@google/generative-ai\";\nimport { supabase } from \"@/integrations/supabase/client\";\n\n// Simple logger for user feedback (safety messages)\nconst logger = {\n debug: (message: string, data?: any) => console.debug(`[DEBUG] ${message}`, data),\n info: (message: string, data?: any) => console.info(`[INFO] ${message}`, data),\n warn: (message: string, data?: any) => console.warn(`[WARN] ${message}`, data),\n error: (message: string, data?: any) => console.error(`[ERROR] ${message}`, data),\n};\n\nexport interface ImageGenerationRequest {\n prompt: string;\n width?: number;\n height?: number;\n model?: string;\n}\n\nexport interface ImageGenerationResponse {\n success: boolean;\n imagePath?: string;\n imageUrl?: string;\n text?: string; // Add text field for AI descriptions\n error?: string;\n}\n\nexport interface ImageEditRequest {\n imagePath: string;\n prompt: string;\n action: string;\n}\n\ninterface ImageResult {\n imageData: ArrayBuffer;\n text?: string;\n}\n\n// Get user's Google API key from user_secrets\nexport const getGoogleApiKey = async (): Promise<string | null> => {\n try {\n const { data: { user } } = await supabase.auth.getUser();\n if (!user) {\n logger.error('No authenticated user found');\n return null;\n }\n\n const { data: secretData, error } = await supabase\n .from('user_secrets')\n .select('settings')\n .eq('user_id', user.id)\n .maybeSingle();\n\n if (error) {\n logger.error('Error fetching user secrets:', error);\n return null;\n }\n\n const settings = secretData?.settings as { api_keys?: Record<string, string> } | null;\n const apiKey = settings?.api_keys?.google_api_key;\n\n if (!apiKey) {\n logger.error('No Google API key found in user secrets. Please add your Google API key in your profile settings.');\n return null;\n }\n\n return apiKey;\n } catch (error) {\n logger.error('Error getting Google API key:', error);\n return null;\n }\n};\n\n\n// Create Google GenAI client\nconst createGoogleGenAIClient = async (apiKey?: string) => {\n const key = apiKey || await getGoogleApiKey();\n\n if (!key) {\n logger.error('No Google API key found. Please provide an API key or set it in your profile.');\n return null;\n }\n\n return new GoogleGenerativeAI(key);\n};\n\n// Helper to get MIME type from file extension\nconst getMimeType = (filename: string): string => {\n const ext = filename.split('.').pop()?.toLowerCase();\n const mimeTypes: { [key: string]: string } = {\n 'png': 'image/png',\n 'jpg': 'image/jpeg',\n 'jpeg': 'image/jpeg',\n 'webp': 'image/webp',\n 'gif': 'image/gif'\n };\n return mimeTypes[ext || ''] || 'image/png';\n};\n\n// Helper to convert File to base64\nconst fileToBase64 = (file: File): Promise<string> => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n const result = reader.result as string;\n // Remove data URL prefix to get just the base64 string\n const base64 = result.split(',')[1];\n resolve(base64);\n };\n reader.onerror = error => reject(error);\n });\n};\n\nexport const createImage = async (\n prompt: string,\n model: string = 'gemini-3-pro-image-preview',\n apiKey?: string,\n aspectRatio?: string,\n resolution?: string,\n enableSearchGrounding?: boolean\n): Promise<ImageResult | null> => {\n const ai = await createGoogleGenAIClient(apiKey);\n if (!ai) {\n return null;\n }\n\n const genModel = ai.getGenerativeModel({\n model,\n // @ts-ignore - tools is not in the version of the SDK used, but are supported by the API\n tools: enableSearchGrounding ? [{ 'google_search': {} }] : undefined,\n });\n\n const generationConfig: GenerationConfig = {};\n if (model === 'gemini-3-pro-image-preview' && (aspectRatio || resolution)) {\n // @ts-ignore - imageConfig and imageSize are not in the version of the SDK used, but are supported by the API\n generationConfig.imageConfig = {};\n if (aspectRatio) {\n // @ts-ignore\n generationConfig.imageConfig.aspectRatio = aspectRatio;\n }\n if (resolution) {\n // @ts-ignore\n generationConfig.imageConfig.imageSize = resolution;\n }\n }\n\n try {\n let result;\n if (Object.keys(generationConfig).length > 0) {\n // @ts-ignore\n result = await genModel.generateContent(prompt, generationConfig);\n } else {\n result = await genModel.generateContent(prompt);\n }\n\n const response = result.response;\n logger.debug('Google AI API response structure:', {\n hasResponse: !!response,\n hasCandidates: !!response?.candidates,\n candidatesLength: response?.candidates?.length,\n });\n\n if (!response || !response.candidates || response.candidates.length === 0) {\n logger.error('Invalid API response structure - no candidates found');\n throw new Error('No candidates returned from Google AI API. The content may have been blocked due to safety filters or other restrictions.');\n }\n\n const candidate = response.candidates[0];\n\n // Check for safety filter rejections first\n if (candidate.finishReason && candidate.finishReason !== 'STOP') {\n const finishReasonMessages: { [key: string]: string } = {\n 'SAFETY': 'Content blocked by safety filters. The prompt contains content that violates Google AI safety policies.',\n 'RECITATION': 'Content blocked due to recitation concerns. The generated content may be too similar to existing copyrighted material.',\n 'OTHER': 'Content generation stopped for other safety or policy reasons.'\n };\n\n const message = finishReasonMessages[candidate.finishReason] ||\n `Content generation stopped. Reason: ${candidate.finishReason}`;\n\n logger.error('Google AI blocked content due to safety filters:', {\n finishReason: candidate.finishReason,\n rejectionMessage: message,\n });\n throw new Error(`Request blocked by Google AI: ${message}`);\n }\n\n if (!candidate.content || !candidate.content.parts) {\n logger.error('Invalid candidate structure - no content parts found');\n throw new Error('Invalid response structure from Google AI API - no content parts found.');\n }\n\n const parts = candidate.content.parts;\n\n let imageData: ArrayBuffer | null = null;\n let aiText: string | null = null;\n\n // Extract both image data and text from all parts\n for (const part of parts) {\n if ('inlineData' in part && part.inlineData) {\n // Convert base64 to ArrayBuffer\n const binaryString = atob(part.inlineData.data);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n imageData = bytes.buffer;\n } else if ('text' in part && part.text) {\n // Collect text descriptions\n if (!aiText) {\n aiText = part.text.trim();\n } else {\n aiText += ' ' + part.text.trim();\n }\n }\n }\n\n if (imageData) {\n logger.info('Successfully found image data in response', {\n hasText: !!aiText,\n textPreview: aiText?.substring(0, 100)\n });\n return { imageData, text: aiText || undefined };\n }\n\n // Only if no image data found, check for text responses to provide helpful error\n if (aiText) {\n logger.info('Google AI returned text response instead of image:', {\n textResponse: aiText,\n finishReason: candidate.finishReason\n });\n throw new Error(`Google AI returned text instead of image: ${aiText}`);\n }\n\n logger.warn('No image data found in API response parts');\n throw new Error('No image data found in API response. The model may not have generated an image.');\n\n } catch (error: any) {\n logger.error('Google AI API error in createImage:', {\n error: error.message,\n prompt: prompt.substring(0, 100) + '...'\n });\n throw error;\n }\n};\n\nexport const editImage = async (\n prompt: string,\n imageFiles: File[],\n model: string = 'gemini-3-pro-image-preview',\n apiKey?: string,\n aspectRatio?: string,\n resolution?: string,\n enableSearchGrounding?: boolean\n): Promise<ImageResult | null> => {\n const ai = await createGoogleGenAIClient(apiKey);\n if (!ai) {\n return null;\n }\n\n const genModel = ai.getGenerativeModel({\n model,\n // @ts-ignore\n tools: enableSearchGrounding ? [{ 'google_search': {} }] : undefined,\n });\n\n try {\n const imageParts: Part[] = await Promise.all(imageFiles.map(async (file) => {\n const base64Data = await fileToBase64(file);\n const mimeType = getMimeType(file.name);\n return {\n inlineData: {\n mimeType,\n data: base64Data,\n },\n };\n }));\n\n const textPart: Part = { text: prompt };\n const promptParts = [...imageParts, textPart];\n\n const generationConfig: GenerationConfig = {};\n if (model === 'gemini-3-pro-image-preview' && (aspectRatio || resolution)) {\n // @ts-ignore\n generationConfig.imageConfig = {};\n if (aspectRatio) {\n // @ts-ignore\n generationConfig.imageConfig.aspectRatio = aspectRatio;\n }\n if (resolution) {\n // @ts-ignore\n generationConfig.imageConfig.imageSize = resolution;\n }\n }\n\n let result;\n if (Object.keys(generationConfig).length > 0) {\n // @ts-ignore\n result = await genModel.generateContent(promptParts, generationConfig);\n } else {\n result = await genModel.generateContent(promptParts);\n }\n\n const response = result.response;\n logger.debug('Google AI API response structure (editImage):', {\n hasResponse: !!response,\n hasCandidates: !!response?.candidates,\n candidatesLength: response?.candidates?.length,\n });\n\n if (!response || !response.candidates || response.candidates.length === 0) {\n logger.error('Invalid API response structure - no candidates found (editImage)');\n throw new Error('No candidates returned from Google AI API. The content may have been blocked due to safety filters or other restrictions.');\n }\n\n const candidate = response.candidates[0];\n\n // Check for safety filter rejections first\n if (candidate.finishReason && candidate.finishReason !== 'STOP') {\n const finishReasonMessages: { [key: string]: string } = {\n 'SAFETY': 'Content blocked by safety filters. The prompt contains content that violates Google AI safety policies.',\n 'RECITATION': 'Content blocked due to recitation concerns. The generated content may be too similar to existing copyrighted material.',\n 'OTHER': 'Content generation stopped for other safety or policy reasons.'\n };\n\n const message = finishReasonMessages[candidate.finishReason] ||\n `Content generation stopped. Reason: ${candidate.finishReason}`;\n\n logger.error('Google AI blocked image edit due to safety filters:', {\n finishReason: candidate.finishReason,\n rejectionMessage: message,\n });\n throw new Error(`Request blocked by Google AI: ${message}`);\n }\n\n if (!candidate.content || !candidate.content.parts) {\n logger.error('Invalid candidate structure - no content parts found (editImage)');\n throw new Error('Invalid response structure from Google AI API - no content parts found.');\n }\n\n const parts = candidate.content.parts;\n\n let imageData: ArrayBuffer | null = null;\n let aiText: string | null = null;\n\n // Extract both image data and text from all parts\n for (const part of parts) {\n if ('inlineData' in part && part.inlineData) {\n // Convert base64 to ArrayBuffer\n const binaryString = atob(part.inlineData.data);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n imageData = bytes.buffer;\n } else if ('text' in part && part.text) {\n // Collect text descriptions\n if (!aiText) {\n aiText = part.text.trim();\n } else {\n aiText += ' ' + part.text.trim();\n }\n }\n }\n\n if (imageData) {\n logger.info('Successfully found image data in editImage response', {\n hasText: !!aiText,\n textPreview: aiText?.substring(0, 100)\n });\n return { imageData, text: aiText || undefined };\n }\n\n // Only if no image data found, check for text responses to provide helpful error\n if (aiText) {\n logger.info('Google AI returned text response instead of image (editImage):', {\n textResponse: aiText,\n finishReason: candidate.finishReason\n });\n throw new Error(`Google AI returned text instead of image: ${aiText}`);\n }\n\n logger.warn('No image data found in API response parts (editImage)');\n throw new Error('No image data found in API response. The model may not have generated an image.');\n\n } catch (error: any) {\n logger.error('Google AI API error in editImage:', {\n error: error.message,\n prompt: prompt.substring(0, 100) + '...',\n imageCount: imageFiles.length,\n });\n throw error;\n }\n};\n\nexport const imageApi = {\n // Generate new image from text prompt\n generateImage: async (request: ImageGenerationRequest): Promise<ImageGenerationResponse> => {\n console.log('🎨 Generate image:', request);\n\n try {\n const imageBuffer = await createImage(request.prompt, request.model);\n if (!imageBuffer) {\n return {\n success: false,\n error: 'Failed to generate image - no Google API key found'\n };\n }\n\n // Convert ArrayBuffer to blob URL for display\n const uint8Array = new Uint8Array(imageBuffer.imageData);\n const blob = new Blob([uint8Array], { type: 'image/png' });\n const imageUrl = URL.createObjectURL(blob);\n\n return {\n success: true,\n imagePath: `generated_${Date.now()}.png`,\n imageUrl,\n text: imageBuffer.text\n };\n } catch (error: any) {\n logger.error('Image generation failed:', error);\n return {\n success: false,\n error: error.message || 'Failed to generate image'\n };\n }\n },\n\n // Edit existing image with prompt\n editImage: async (request: ImageEditRequest): Promise<ImageGenerationResponse> => {\n console.log('✏️ Edit image:', request);\n\n try {\n // For now, we'll need to get the image file from the path\n // This would need to be adapted based on how images are stored\n console.warn('Image editing requires File objects - this needs to be called with actual File objects');\n\n return {\n success: false,\n error: 'Image editing requires File objects - please use the editImage function directly'\n };\n } catch (error: any) {\n logger.error('Image editing failed:', error);\n return {\n success: false,\n error: error.message || 'Failed to edit image'\n };\n }\n },\n\n // Upload image file\n uploadImage: async (file: File): Promise<{ success: boolean; path?: string; error?: string }> => {\n console.log('📤 Upload image:', file.name);\n\n return {\n success: true,\n path: `uploaded_${Date.now()}_${file.name}`\n };\n },\n\n // Get image from URL\n downloadImage: async (url: string): Promise<{ success: boolean; path?: string; error?: string }> => {\n console.log('📥 Download image from URL:', url);\n\n return {\n success: true,\n path: `downloaded_${Date.now()}.png`\n };\n }\n};","/**\n * OpenAI Integration with Tool Presets\n * \n * PRESET QUICK REFERENCE:\n * ----------------------\n * Agent/Voice Agent: 'smart-generation' (optimize → generate → metadata, NO publish)\n * Workflows: 'metadata-only' for metadata step\n * Auto workflows: 'auto-publish' (includes publish tool)\n * \n * See PRESET_TOOLS mapping below for tool combinations.\n */\nimport OpenAI from 'openai';\nimport { supabase } from \"@/integrations/supabase/client\";\nimport { z } from 'zod';\nimport { zodToJsonSchema } from 'zod-to-json-schema';\nimport { RunnableToolFunctionWithParse } from 'openai/lib/RunnableFunction';\nimport { JSONSchema } from 'openai/lib/jsonschema';\nimport { createImage as createImageRouter, editImage as editImageRouter } from '@/lib/image-router';\nimport { generateTextWithImagesTool } from '@/lib/markdownImageTools';\nimport { createPageTool } from '@/lib/pageTools';\n\ntype LogFunction = (level: string, message: string, data?: any) => void;\n\n// Simple logger for user feedback\nconst consoleLogger = {\n debug: (message: string, data?: any) => console.debug(`[OPENAI-DEBUG] ${message}`, data),\n info: (message: string, data?: any) => console.info(`[OPENAI-INFO] ${message}`, data),\n warn: (message: string, data?: any) => console.warn(`[OPENAI-WARN] ${message}`, data),\n error: (message: string, data?: any) => console.error(`[OPENAI-ERROR] ${message}`, data),\n};\n\n/**\n * SIMPLE TOOL PRESET MAPPING\n * \n * This mapping defines common tool combinations:\n * - generate-only: [generate]\n * - generate-metadata: [generate, metadata]\n * - generate-publish: [generate, metadata, publish]\n * - metadata-only: [metadata]\n * - optimize-generate: [optimize, generate, metadata]\n * \n * Use these to avoid calling unwanted tools (e.g., publish when user wants manual control)\n */\nexport type PresetType =\n | 'generate-only' // Just generate image\n | 'generate-metadata' // Generate + metadata\n | 'generate-publish' // Generate + metadata + publish\n | 'metadata-only' // Only metadata\n | 'optimize-generate'; // Optimize + generate + metadata\n\nconst PRESET_TOOLS: Record<PresetType, (apiKey?: string) => RunnableToolFunctionWithParse<any>[]> = {\n 'generate-only': (apiKey) => [\n generateImageTool(apiKey)\n ],\n 'generate-metadata': (apiKey) => [\n generateImageTool(apiKey),\n generateImageMetadataTool(apiKey)\n ],\n 'generate-publish': (apiKey) => [\n generateImageTool(apiKey),\n generateImageMetadataTool(apiKey),\n publishImageTool()\n ],\n 'metadata-only': (apiKey) => [\n generateImageMetadataTool(apiKey)\n ],\n 'optimize-generate': (apiKey) => [\n optimizePromptTool(apiKey),\n generateImageTool(apiKey),\n generateImageMetadataTool(apiKey)\n ],\n};\n\n// Get user's OpenAI API key from user_secrets\nconst getOpenAIApiKey = async (): Promise<string | null> => {\n try {\n const { data: { user } } = await supabase.auth.getUser();\n if (!user) {\n consoleLogger.error('No authenticated user found');\n return null;\n }\n\n const { data: secretData, error } = await supabase\n .from('user_secrets')\n .select('settings')\n .eq('user_id', user.id)\n .maybeSingle();\n\n if (error) {\n consoleLogger.error('Error fetching user secrets:', error);\n return null;\n }\n\n const settings = secretData?.settings as { api_keys?: Record<string, string> } | null;\n const apiKey = settings?.api_keys?.openai_api_key;\n\n if (!apiKey) {\n consoleLogger.error('No OpenAI API key found in user secrets. Please add your OpenAI API key in your profile settings.');\n return null;\n }\n\n return apiKey;\n } catch (error) {\n consoleLogger.error('Error getting OpenAI API key:', error);\n return null;\n }\n};\n\n\n// Create OpenAI client\nexport const createOpenAIClient = async (apiKey?: string): Promise<OpenAI | null> => {\n const key = apiKey || await getOpenAIApiKey();\n\n if (!key) {\n consoleLogger.error('No OpenAI API key found. Please provide an API key or set it in your profile.');\n return null;\n }\n\n try {\n return new OpenAI({\n apiKey: key,\n dangerouslyAllowBrowser: true // Required for client-side usage\n });\n } catch (error) {\n consoleLogger.error('Error creating OpenAI client:', error);\n return null;\n }\n};\n\n// Helper function to check if OpenAI is available (non-throwing)\nexport const isOpenAIAvailable = async (apiKey?: string): Promise<boolean> => {\n try {\n const client = await createOpenAIClient(apiKey);\n return client !== null;\n } catch (error) {\n consoleLogger.debug('OpenAI not available:', error);\n return false;\n }\n};\n\n// Safe wrapper for OpenAI operations that handles missing API key gracefully\nexport const withOpenAI = async <T>(\n operation: (client: OpenAI) => Promise<T>,\n fallback?: T,\n apiKey?: string\n): Promise<T | null> => {\n try {\n const client = await createOpenAIClient(apiKey);\n if (!client) {\n consoleLogger.warn('OpenAI client not available, using fallback or returning null');\n return fallback ?? null;\n }\n\n return await operation(client);\n } catch (error) {\n consoleLogger.error('OpenAI operation failed:', error);\n return fallback ?? null;\n }\n};\n\n// Simple text completion function\nexport const generateText = async (\n input: string,\n model: string = \"gpt-5\",\n apiKey?: string,\n\n signal?: AbortSignal,\n onChunk?: (chunk: string) => void,\n webSearch?: boolean\n): Promise<string | null> => {\n return withOpenAI(async (client) => {\n try {\n // If web search is enabled, we MUST use the responses API\n if (webSearch) {\n consoleLogger.info('Using web_search with responses API', { model });\n\n const response = await (client as any).responses?.create({\n model,\n tools: [{ type: \"web_search\" }],\n input,\n });\n\n // Parse response.output array structure\n if (response?.output && Array.isArray(response.output)) {\n const messageItem = response.output.find((item: any) => item.type === 'message');\n\n if (messageItem?.content && Array.isArray(messageItem.content)) {\n const textItem = messageItem.content.find((c: any) => c.type === 'output_text');\n\n if (textItem?.text) {\n consoleLogger.info('Successfully generated text with web search', {\n inputLength: input.length,\n outputLength: textItem.text.length,\n model\n });\n return textItem.text;\n }\n }\n }\n\n consoleLogger.warn('Web search response had no valid text content', { response });\n }\n\n // Streaming implementation\n if (onChunk) {\n const stream = await client.chat.completions.create({\n model,\n messages: [{ role: \"user\", content: input }],\n stream: true,\n }, { signal });\n\n let fullContent = '';\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content || '';\n if (delta) {\n fullContent += delta;\n onChunk(delta);\n }\n }\n\n consoleLogger.info('Successfully streamed text response', {\n inputLength: input.length,\n outputLength: fullContent.length,\n model\n });\n\n return fullContent;\n }\n\n // Non-streaming implementation\n const response = await client.chat.completions.create({\n model,\n messages: [{ role: \"user\", content: input }]\n }, {\n signal, // Pass abort signal to OpenAI client\n });\n\n const content = response.choices[0]?.message?.content;\n if (!content) {\n consoleLogger.warn('No content returned from OpenAI');\n return null;\n }\n\n consoleLogger.info('Successfully generated text response', {\n inputLength: input.length,\n outputLength: content.length,\n model,\n content\n });\n\n return content;\n } catch (error: any) {\n // Handle abort error specifically\n if (error.name === 'AbortError' || error.message?.includes('aborted')) {\n consoleLogger.info('Text generation aborted by user');\n return null;\n }\n\n consoleLogger.error('OpenAI text generation failed:', {\n error: error.message,\n model,\n inputPreview: input.substring(0, 100) + '...'\n });\n throw error;\n }\n }, null, apiKey);\n};\n\n// Alternative function using the responses API (if available)\nexport const generateResponse = async (\n input: string,\n model: string = \"gpt-4o-mini\",\n apiKey?: string\n): Promise<string | null> => {\n return withOpenAI(async (client) => {\n try {\n // Note: The responses API might not be available in all OpenAI versions\n // This is a placeholder for the API structure you mentioned\n const response = await (client as any).responses?.create({\n model,\n input,\n });\n\n if (!response) {\n consoleLogger.warn('Responses API not available, falling back to chat completions');\n return generateText(input, model, apiKey);\n }\n\n consoleLogger.info('Successfully generated response', {\n inputLength: input.length,\n model\n });\n\n return response;\n } catch (error: any) {\n consoleLogger.error('OpenAI responses API failed, falling back to chat completions:', error.message);\n // Fallback to standard chat completions\n return generateText(input, model, apiKey);\n }\n }, null, apiKey);\n};\n\n// Helper to convert File to base64 (browser-compatible)\nconst fileToBase64 = (file: File): Promise<string> => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n const result = reader.result as string;\n // Remove data URL prefix to get just the base64 string\n const base64 = result.split(',')[1];\n resolve(base64);\n };\n reader.onerror = error => reject(error);\n });\n};\n\n// Get MIME type from file\nconst getImageMimeType = (file: File): string => {\n return file.type || 'image/jpeg';\n};\n\n// Image analysis function for generating descriptions and titles\nexport const analyzeImages = async (\n imageFiles: File[],\n prompt: string = \"Analyze this image and provide a detailed description and suggest a creative title.\",\n model: string = \"gpt-4o-mini\",\n apiKey?: string\n): Promise<{ description: string; title: string } | null> => {\n return withOpenAI(async (client) => {\n try {\n if (imageFiles.length === 0) {\n consoleLogger.warn('No images provided for analysis');\n return null;\n }\n\n // Convert all images to base64\n const imageContents = await Promise.all(\n imageFiles.map(async (file) => {\n const base64 = await fileToBase64(file);\n const mimeType = getImageMimeType(file);\n return {\n type: \"input_image\" as const,\n image_url: `data:${mimeType};base64,${base64}`,\n };\n })\n );\n\n // Create the content array with text prompt and images\n const content = [\n { type: \"input_text\" as const, text: prompt },\n ...imageContents\n ];\n\n // Use responses API for image analysis\n const response = await (client as any).responses?.create({\n model,\n input: [\n {\n role: \"user\",\n content,\n },\n ],\n });\n\n if (!response?.output_text) {\n consoleLogger.warn('No output text returned from OpenAI image analysis');\n return null;\n }\n\n const outputText = response.output_text;\n\n // Try to parse description and title from the response\n // This assumes the AI will format it properly, but we'll add some parsing logic\n const lines = outputText.split('\\n').filter(line => line.trim());\n\n let description = outputText;\n let title = `Analysis of ${imageFiles.length} image${imageFiles.length > 1 ? 's' : ''}`;\n let titleLineIndex = -1;\n\n // Simple parsing - look for title patterns\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const lowerLine = line.toLowerCase();\n if (lowerLine.includes('title:') || lowerLine.includes('suggested title:')) {\n title = line.replace(/^.*title:\\s*/i, '').trim();\n titleLineIndex = i;\n break;\n }\n }\n\n // Remove title line from description\n if (titleLineIndex >= 0) {\n const descriptionLines = lines.filter((_, index) => index !== titleLineIndex);\n description = descriptionLines.join('\\n').trim();\n }\n\n consoleLogger.info('Successfully analyzed images', {\n imageCount: imageFiles.length,\n descriptionLength: description.length,\n title: title.substring(0, 50) + '...',\n model\n });\n\n return { description, title };\n\n } catch (error: any) {\n consoleLogger.error('OpenAI image analysis failed:', {\n error: error.message,\n model,\n imageCount: imageFiles.length,\n promptPreview: prompt.substring(0, 100) + '...'\n });\n\n // Fallback to chat completions if responses API fails\n try {\n consoleLogger.info('Falling back to chat completions for image analysis');\n\n const imageContents = await Promise.all(\n imageFiles.map(async (file) => {\n const base64 = await fileToBase64(file);\n const mimeType = getImageMimeType(file);\n return {\n type: \"image_url\" as const,\n image_url: {\n url: `data:${mimeType};base64,${base64}`,\n },\n };\n })\n );\n\n const response = await client.chat.completions.create({\n model: \"gpt-4-vision-preview\", // Use vision model for fallback\n messages: [\n {\n role: \"user\",\n content: [\n { type: \"text\", text: prompt },\n ...imageContents\n ],\n },\n ]\n });\n\n const content = response.choices[0]?.message?.content;\n if (!content) {\n consoleLogger.warn('No content returned from fallback image analysis');\n return null;\n }\n\n // Parse the fallback response\n const lines = content.split('\\n').filter(line => line.trim());\n let description = content;\n let title = `Analysis of ${imageFiles.length} image${imageFiles.length > 1 ? 's' : ''}`;\n let titleLineIndex = -1;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const lowerLine = line.toLowerCase();\n if (lowerLine.includes('title:') || lowerLine.includes('suggested title:')) {\n title = line.replace(/^.*title:\\s*/i, '').trim();\n titleLineIndex = i;\n break;\n }\n }\n\n // Remove title line from description\n if (titleLineIndex >= 0) {\n const descriptionLines = lines.filter((_, index) => index !== titleLineIndex);\n description = descriptionLines.join('\\n').trim();\n }\n\n return { description, title };\n\n } catch (fallbackError: any) {\n consoleLogger.error('Fallback image analysis also failed:', fallbackError.message);\n throw error; // Throw original error\n }\n }\n }, null, apiKey);\n};\n\n// Simplified function for wizard integration (disabled for now)\nexport const generateImageMetadata = async (\n imageFiles: File[],\n apiKey?: string\n): Promise<{ description: string; title: string } | null> => {\n // This function is disabled for now as mentioned in requirements\n consoleLogger.info('Image metadata generation is currently disabled');\n return null;\n\n // When enabled, uncomment this:\n // return analyzeImages(\n // imageFiles,\n // \"Analyze these images and provide: 1) A detailed description of what you see, and 2) A creative, engaging title. Format your response with 'Title: [your title]' on the first line, followed by the description.\",\n // \"gpt-4.1-mini\",\n // apiKey\n // );\n};\n\n// Audio transcription function using Whisper\nexport const transcribeAudio = async (\n audioFile: File,\n model: string = \"whisper-1\",\n apiKey?: string\n): Promise<string | null> => {\n return withOpenAI(async (client) => {\n try {\n consoleLogger.info('Starting audio transcription', {\n fileName: audioFile.name,\n fileSize: audioFile.size,\n fileType: audioFile.type,\n model\n });\n\n const transcription = await client.audio.transcriptions.create({\n file: audioFile,\n model,\n response_format: \"verbose_json\",\n timestamp_granularities: [\"word\"]\n });\n\n const transcribedText = transcription.text;\n\n if (!transcribedText) {\n consoleLogger.warn('No text returned from audio transcription');\n return null;\n }\n\n consoleLogger.info('Successfully transcribed audio', {\n textLength: transcribedText.length,\n textPreview: transcribedText.substring(0, 100) + '...',\n model\n });\n\n return transcribedText;\n } catch (error: any) {\n consoleLogger.error('OpenAI audio transcription failed:', {\n error: error.message,\n fileName: audioFile.name,\n model\n });\n throw error;\n }\n }, null, apiKey);\n};\n\n// Optimize prompt for image generation\nexport const optimizePrompt = async (\n userPrompt: string,\n model: string = \"gpt-5\",\n apiKey?: string\n): Promise<string | null> => {\n return withOpenAI(async (client) => {\n try {\n consoleLogger.info('Starting prompt optimization', {\n originalPromptLength: userPrompt.length,\n originalPromptPreview: userPrompt.substring(0, 100) + '...',\n model\n });\n\n const systemPrompt = `You are an expert at writing prompts for AI image generation models. Your task is to optimize user prompts to produce better, more detailed, and more visually striking images.\n\nGuidelines for optimization:\n- Add specific visual details (lighting, composition, style, mood, colors)\n- Include technical photography/art terms when relevant (e.g., \"bokeh\", \"golden hour\", \"rule of thirds\")\n- Specify artistic styles if not mentioned (e.g., \"cinematic\", \"photorealistic\", \"digital art\")\n- Add quality enhancers (e.g., \"highly detailed\", \"4k\", \"masterpiece\")\n- Keep the core intent of the user's prompt\n- Make it concise but descriptive (aim for 1-3 sentences)\n- Return ONLY the optimized prompt, no explanations or additional text\n\nExample:\nUser: \"a cat sitting on a chair\"\nOptimized: \"A fluffy tabby cat sitting gracefully on a vintage wooden chair, soft natural lighting from a nearby window creating gentle shadows, photorealistic style, highly detailed fur texture, warm color palette, shallow depth of field\"`;\n\n const response = await client.chat.completions.create({\n model,\n messages: [\n { role: \"system\", content: systemPrompt },\n { role: \"user\", content: userPrompt }\n ]\n });\n\n const optimizedPrompt = response.choices[0]?.message?.content?.trim();\n\n if (!optimizedPrompt) {\n consoleLogger.warn('No optimized prompt returned from OpenAI');\n return null;\n }\n\n consoleLogger.info('Successfully optimized prompt', {\n originalLength: userPrompt.length,\n optimizedLength: optimizedPrompt.length,\n optimizedPreview: optimizedPrompt.substring(0, 100) + '...',\n model\n });\n\n return optimizedPrompt;\n } catch (error: any) {\n consoleLogger.error('OpenAI prompt optimization failed:', {\n error: error.message,\n promptPreview: userPrompt.substring(0, 100) + '...',\n model\n });\n throw error;\n }\n }, null, apiKey);\n};\n\n// ====================================================================\n// TOOL SYSTEM - LLM with Function Calling\n// ====================================================================\n\n/**\n * Helper function to create Zod-validated OpenAI tools\n * Based on ref/tools/index.ts\n */\nexport const zodFunction = <T extends object>({\n function: fn,\n schema,\n description = '',\n name,\n}: {\n function: (args: T) => Promise<object>;\n schema: z.ZodSchema<T>;\n description?: string;\n name?: string;\n}): RunnableToolFunctionWithParse<T> => {\n return {\n type: 'function',\n function: {\n function: fn,\n name: name ?? fn.name,\n description: description,\n parameters: zodToJsonSchema(schema) as JSONSchema,\n parse(input: string): T {\n const obj = JSON.parse(input);\n return schema.parse(obj);\n },\n },\n };\n};\n\n// ====================================================================\n// TOOL DEFINITIONS\n// ====================================================================\n\n/**\n * Tool: Generate Image\n * Creates a new image from a text prompt using the specified AI model\n */\nexport const generateImageTool = (apiKey?: string) =>\n zodFunction({\n name: 'generate_image',\n description: 'Generate one or more images from a text prompt using AI image generation models. Supports multiple providers (Google, Replicate, Bria, AIML API). Can generate multiple images if count is specified.',\n schema: z.object({\n prompt: z.string().describe('The text prompt describing the image to generate'),\n count: z.number().optional().describe('Number of images to generate (1-4). Default: 1'),\n model: z.string().optional().describe('Model string in format \"provider/model-name\". Default: \"google/gemini-3-pro-image-preview\"'),\n }),\n function: async (args) => {\n try {\n const count = Math.min(Math.max(args.count || 1, 1), 4); // Clamp between 1-4\n consoleLogger.info('Tool::GenerateImage called', {\n prompt: args.prompt,\n model: args.model,\n count\n });\n\n // Image Router will fetch the appropriate provider API key from user profile\n // Don't pass OpenAI API key to image generation\n const results = [];\n\n // Generate multiple images if count > 1\n for (let i = 0; i < count; i++) {\n const result = await createImageRouter(\n args.prompt,\n args.model || 'google/gemini-3-pro-image-preview',\n undefined // Let Image Router fetch the correct provider API key\n );\n\n if (!result) {\n consoleLogger.warn(`Image ${i + 1}/${count} generation failed`);\n continue;\n }\n\n // Convert ArrayBuffer to blob URL\n const uint8Array = new Uint8Array(result.imageData);\n const blob = new Blob([uint8Array], { type: 'image/png' });\n const imageUrl = URL.createObjectURL(blob);\n\n results.push({\n imageUrl,\n text: result.text,\n });\n }\n\n if (results.length === 0) {\n return { success: false, error: 'Failed to generate any images' };\n }\n\n return {\n success: true,\n images: results,\n count: results.length,\n message: `${results.length} image${results.length > 1 ? 's' : ''} generated successfully`,\n };\n } catch (error: any) {\n consoleLogger.error('Tool::GenerateImage failed', error);\n return { success: false, error: error.message };\n }\n },\n });\n\n/**\n * Tool: Transcribe Audio\n * Converts speech/audio to text using OpenAI Whisper\n */\nexport const transcribeAudioTool = (apiKey?: string) =>\n zodFunction({\n name: 'transcribe_audio',\n description: 'Transcribe audio or speech to text using OpenAI Whisper model. Accepts audio files in various formats.',\n schema: z.object({\n audioFile: z.any().describe('The audio file to transcribe (File object)'),\n model: z.string().optional().describe('Whisper model to use. Default: \"whisper-1\"'),\n }),\n function: async (args) => {\n try {\n consoleLogger.info('Tool::TranscribeAudio called', { model: args.model });\n\n const text = await transcribeAudio(args.audioFile, args.model, apiKey);\n\n if (!text) {\n return { success: false, error: 'Failed to transcribe audio' };\n }\n\n return {\n success: true,\n text,\n message: 'Audio transcribed successfully',\n };\n } catch (error: any) {\n consoleLogger.error('Tool::TranscribeAudio failed', error);\n return { success: false, error: error.message };\n }\n },\n });\n\n/**\n * Tool: Optimize Prompt\n * Enhances a user's prompt to produce better image generation results\n */\nexport const optimizePromptTool = (apiKey?: string) =>\n zodFunction({\n name: 'optimize_prompt',\n description: 'Optimize and enhance a text prompt for better image generation results. Adds specific visual details, technical terms, and quality enhancers.',\n schema: z.object({\n prompt: z.string().describe('The original user prompt to optimize'),\n model: z.string().optional().describe('GPT model to use for optimization. Default: \"gpt-4o-mini\"'),\n }),\n function: async (args) => {\n try {\n consoleLogger.info('Tool::OptimizePrompt called', { promptLength: args.prompt.length });\n\n const optimized = await optimizePrompt(args.prompt, args.model, apiKey);\n\n if (!optimized) {\n return { success: false, error: 'Failed to optimize prompt' };\n }\n\n return {\n success: true,\n originalPrompt: args.prompt,\n optimizedPrompt: optimized,\n message: 'Prompt optimized successfully',\n };\n } catch (error: any) {\n consoleLogger.error('Tool::OptimizePrompt failed', error);\n return { success: false, error: error.message };\n }\n },\n });\n\n/**\n * Tool: Generate Text\n * Generates text completion using GPT models\n */\nexport const generateTextTool = (apiKey?: string) =>\n zodFunction({\n name: 'generate_text',\n description: 'Generate text completion using OpenAI GPT models. Useful for creating descriptions, titles, or any text content.',\n schema: z.object({\n input: z.string().describe('The input text or prompt'),\n model: z.string().optional().describe('GPT model to use. Default: \"gpt-4o-mini\"'),\n }),\n function: async (args) => {\n try {\n consoleLogger.info('Tool::GenerateText called', { inputLength: args.input.length });\n\n const text = await generateText(args.input, args.model, apiKey);\n\n if (!text) {\n return { success: false, error: 'Failed to generate text' };\n }\n\n return {\n success: true,\n text,\n message: 'Text generated successfully',\n };\n } catch (error: any) {\n consoleLogger.error('Tool::GenerateText failed', error);\n return { success: false, error: error.message };\n }\n },\n });\n\n/**\n * Tool: Generate Image Metadata\n * Generates title and description for an image based on the prompt or image content\n */\nexport const generateImageMetadataTool = (apiKey?: string) =>\n zodFunction({\n name: 'generate_image_metadata',\n description: 'Generate a creative title and detailed description for an image based on the prompt or image concept. Returns both title and description.',\n schema: z.object({\n prompt: z.string().describe('The image prompt or concept to generate metadata for'),\n style: z.string().optional().describe('Optional style hint for the metadata (e.g., \"creative\", \"professional\", \"poetic\")'),\n }),\n function: async (args) => {\n try {\n consoleLogger.info('Tool::GenerateImageMetadata called', { promptLength: args.prompt.length });\n\n const style = args.style || 'creative';\n const metadataPrompt = `Based on this image concept: \"${args.prompt}\"\n\nGenerate a ${style} title and description for this image.\n\nRequirements:\n- Title: Short, catchy, and descriptive (5-8 words max)\n- Description: Engaging description that captures the essence (2-3 sentences)\n\nFormat your response EXACTLY as:\nTitle: [your title here]\nDescription: [your description here]`;\n\n const response = await generateText(metadataPrompt, 'gpt-4o-mini', apiKey);\n\n if (!response) {\n return { success: false, error: 'Failed to generate metadata' };\n }\n\n // Parse title and description from response\n const titleMatch = response.match(/Title:\\s*(.+?)(?:\\n|$)/i);\n const descMatch = response.match(/Description:\\s*(.+?)$/is);\n\n const title = titleMatch ? titleMatch[1].trim() : `Generated: ${args.prompt.substring(0, 50)}`;\n const description = descMatch ? descMatch[1].trim() : args.prompt;\n\n consoleLogger.info('Successfully generated image metadata', {\n titleLength: title.length,\n descriptionLength: description.length,\n });\n\n return {\n success: true,\n title,\n description,\n message: 'Image metadata generated successfully',\n };\n } catch (error: any) {\n consoleLogger.error('Tool::GenerateImageMetadata failed', error);\n return { success: false, error: error.message };\n }\n },\n });\n\n/**\n * Tool: Publish Image to Gallery\n * Publishes a generated image to the user's gallery with title and description\n */\nexport const publishImageTool = () =>\n zodFunction({\n name: 'publish_image',\n description: 'Publish a generated image to the gallery with title, description, and optional tags. This saves the image permanently to the user\\'s account.',\n schema: z.object({\n imageUrl: z.string().describe('The URL or blob URL of the image to publish'),\n title: z.string().describe('The title for the image'),\n description: z.string().optional().describe('Optional description for the image'),\n tags: z.array(z.string()).optional().describe('Optional array of tags for the image'),\n prompt: z.string().optional().describe('The prompt used to generate the image'),\n }),\n function: async (args) => {\n try {\n consoleLogger.info('Tool::PublishImage called', { title: args.title });\n\n // Note: This is a placeholder. The actual publishing logic needs to be\n // implemented in the component that calls runTools, as it requires\n // access to Supabase client, user context, and File handling.\n // The tool returns the data needed for publishing.\n\n return {\n success: true,\n publishData: {\n imageUrl: args.imageUrl,\n title: args.title,\n description: args.description || '',\n tags: args.tags || [],\n prompt: args.prompt || '',\n },\n message: 'Image ready to publish. Please confirm publication in the UI.',\n requiresConfirmation: true,\n };\n } catch (error: any) {\n consoleLogger.error('Tool::PublishImage failed', error);\n return { success: false, error: error.message };\n }\n },\n });\n\n// ====================================================================\n// TOOL PRESETS\n// ====================================================================\n\nexport interface ToolPreset {\n name: string;\n description: string;\n model: string;\n tools: RunnableToolFunctionWithParse<any>[];\n systemPrompt?: string;\n}\n\n\n/**\n * Create a simple custom preset using the preset type mapping\n */\nexport const createSimplePreset = (\n type: PresetType,\n systemPrompt: string,\n apiKey?: string\n): ToolPreset => ({\n name: `Custom ${type}`,\n description: type,\n model: 'gpt-4o-mini',\n tools: PRESET_TOOLS[type](apiKey),\n systemPrompt,\n});\n\n/**\n * Create tool presets with API key\n */\nexport const createToolPresets = (apiKey?: string, userId?: string, addLog?: LogFunction): Record<string, ToolPreset> => ({\n 'image-wizard': {\n name: 'Image Generation Wizard',\n description: 'Optimize → generate → metadata',\n model: 'gpt-4o-mini',\n tools: PRESET_TOOLS['optimize-generate'](apiKey),\n systemPrompt: `You are an AI image generation assistant. Your role is to:\n1. Optimize prompts for better results\n2. Generate images using optimized prompts\n3. Create metadata (title + description)\n\nExecute these steps automatically. Do NOT publish - user handles publishing.`,\n },\n\n 'speech-to-image': {\n name: 'Speech to Image',\n description: 'Complete workflow: transcribe audio → optimize prompt → generate image',\n model: 'gpt-4o-mini',\n tools: [\n transcribeAudioTool(apiKey),\n optimizePromptTool(apiKey),\n generateImageTool(apiKey),\n ],\n systemPrompt: `You are an AI assistant that converts speech to images. Your workflow:\n1. Transcribe audio input to text (using transcribe_audio tool)\n2. Optimize the transcribed text as an image prompt (using optimize_prompt tool)\n3. Generate an image from the optimized prompt (using generate_image tool)\n4. Provide clear feedback at each step\n\nExecute all steps automatically when given audio input.`,\n },\n\n 'text-to-image': {\n name: 'Text to Image',\n description: 'Optimize → generate → metadata',\n model: 'gpt-4o-mini',\n tools: PRESET_TOOLS['optimize-generate'](apiKey),\n systemPrompt: `You are a text-to-image generation assistant. \n- Optimize prompts and generate images\n- Create metadata automatically\n- Do NOT publish - user handles that`,\n },\n\n\n 'smart-generation': {\n name: 'Smart Generation',\n description: 'Optimize → generate → metadata (no publish)',\n model: 'gpt-4o-mini',\n tools: PRESET_TOOLS['optimize-generate'](apiKey),\n systemPrompt: `You are an intelligent image generation assistant.\n\nWorkflow: Optimize prompt → Generate image → Create metadata\n\nExecute automatically. Do NOT publish - user handles publishing.\nKeep responses brief.`,\n },\n\n 'auto-publish': {\n name: 'Auto-Publish Workflow',\n description: 'Optimize → generate → metadata → publish (full automation)',\n model: 'gpt-4o-mini',\n tools: PRESET_TOOLS['generate-publish'](apiKey),\n systemPrompt: `You are an auto-publishing assistant.\n\nWorkflow: Optimize → Generate → Metadata → Publish\n\nExecute all steps automatically. Always include metadata.`,\n },\n\n 'metadata-generator': {\n name: 'Metadata Generator',\n description: 'Generate title and description for image concepts or existing images',\n model: 'gpt-4o-mini',\n tools: [\n generateImageMetadataTool(apiKey),\n ],\n systemPrompt: `You are a creative metadata generator for images.\nYour job is to create engaging titles and descriptions that capture the essence of the image.\n\nFor titles: Make them short, catchy, and memorable (5-8 words)\nFor descriptions: Create 2-3 sentences that are engaging and descriptive\n\nBe creative and match the style of the image concept.`,\n },\n\n 'metadata-only': {\n name: 'Metadata Only',\n description: 'Only generate title and description',\n model: 'gpt-4o-mini',\n tools: PRESET_TOOLS['metadata-only'](apiKey),\n systemPrompt: `Generate title and description for the prompt.\nTitle: 5-8 words. Description: 2-3 sentences.`,\n },\n 'page-generator': {\n name: 'Page Generator',\n description: 'Generate a complete page with text, images, and metadata from a single voice command.',\n model: 'gpt-4o',\n tools: [\n generateTextWithImagesTool(userId || 'anonymous-user', addLog),\n createPageTool(userId || 'anonymous-user', addLog),\n ],\n systemPrompt: `You are an AI assistant that creates well-structured pages with text and images. Your only task is to use the 'generate_text_with_images' tool to create rich, comprehensive markdown content based on the user's request. Include at least one relevant image unless otherwise specified.`,\n },\n 'page-generator-text-only': {\n name: 'Page Generator (Text Only)',\n description: 'Generate a complete page with text from a single command, without images.',\n model: 'gpt-4o',\n tools: [\n createPageTool(userId || 'anonymous-user', addLog),\n ],\n systemPrompt: `You are an AI assistant that writes well-structured, comprehensive markdown documents. Based on the user's request, generate the full text content for a page, then call the 'create_page' tool with that content and a suitable title and tags. Your final response must be only the 'create_page' tool call.`,\n }\n});\n\n// ====================================================================\n// RUN TOOLS - Main Orchestration Function\n// ====================================================================\n\nexport interface RunToolsOptions {\n prompt: string;\n preset?: string | ToolPreset;\n apiKey?: string;\n onMessage?: (message: any) => void;\n onToolCall?: (toolCall: any) => void;\n onContent?: (content: string) => void;\n model?: string;\n maxIterations?: number;\n userId?: string;\n images?: string[];\n addLog?: LogFunction;\n}\n\nexport interface RunToolsResult {\n success: boolean;\n content?: string;\n messages: any[];\n toolCalls: any[];\n error?: string;\n}\n\n/**\n * Run OpenAI with tools - main orchestration function\n * Based on ref/run-tools.ts\n * \n * @example\n * // Use preset\n * const result = await runTools({\n * prompt: \"Create a beautiful sunset over mountains\",\n * preset: \"image-wizard\"\n * });\n * \n * @example\n * // Custom tools\n * const result = await runTools({\n * prompt: \"Generate an image of a cat\",\n * preset: {\n * name: \"custom\",\n * model: \"gpt-4o-mini\",\n * tools: [generateImageTool()],\n * systemPrompt: \"You are a helpful assistant\"\n * }\n * });\n */\nexport const runTools = async (options: RunToolsOptions): Promise<RunToolsResult> => {\n const {\n prompt,\n preset,\n apiKey,\n onMessage,\n onToolCall,\n onContent,\n maxIterations = 10,\n userId,\n images,\n addLog,\n } = options;\n\n const logger = addLog ? {\n debug: (m: string, d?: any) => addLog('debug', `[OPENAI] ${m}`, d),\n info: (m: string, d?: any) => addLog('info', `[OPENAI] ${m}`, d),\n warn: (m: string, d?: any) => addLog('warn', `[OPENAI] ${m}`, d),\n error: (m: string, d?: any) => addLog('error', `[OPENAI] ${m}`, d),\n } : consoleLogger;\n\n\n const messages: any[] = [];\n const toolCalls: any[] = [];\n\n try {\n // Create OpenAI client\n const client = await createOpenAIClient(apiKey);\n if (!client) {\n return {\n success: false,\n messages,\n toolCalls,\n error: 'Failed to create OpenAI client - no API key available',\n };\n }\n\n // Get preset configuration\n const presets = createToolPresets(apiKey, userId, addLog);\n const presetConfig: ToolPreset =\n typeof preset === 'string'\n ? presets[preset] || presets['image-wizard']\n : preset || presets['image-wizard'];\n\n logger.info('Using preset', {\n name: presetConfig.name,\n model: presetConfig.model,\n toolCount: presetConfig.tools.length\n });\n\n // Build messages\n const initialMessages: OpenAI.Chat.ChatCompletionMessageParam[] = [];\n\n if (presetConfig.systemPrompt) {\n initialMessages.push({\n role: 'system',\n content: presetConfig.systemPrompt,\n });\n }\n\n // Handle multimodal input if images are provided\n if (images && images.length > 0) {\n logger.info('Adding images to request', { count: images.length });\n\n const content: any[] = [\n { type: \"text\", text: prompt }\n ];\n\n images.forEach(url => {\n content.push({\n type: \"image_url\",\n image_url: {\n url,\n detail: \"auto\"\n }\n });\n });\n\n initialMessages.push({\n role: 'user',\n content: content,\n });\n } else {\n initialMessages.push({\n role: 'user',\n content: prompt,\n });\n }\n\n // Run tools\n const runner = client.chat.completions\n .runTools({\n model: options.model || presetConfig.model,\n messages: initialMessages,\n tools: presetConfig.tools\n });\n\n logger.info('RunTools started', {\n prompt: prompt.substring(0, 100),\n preset: typeof preset === 'string' ? preset : 'custom',\n model: options.model || presetConfig.model,\n toolCount: presetConfig.tools.length,\n initialMessages\n });\n\n await runner.done();\n\n const finalMessages = runner.messages;\n const finalContent = await runner.finalContent();\n\n // Manually reconstruct tool calls with their output from the message history\n // This is more reliable than depending on the runner's final state.\n const completedToolCalls = finalMessages\n .filter((msg): msg is OpenAI.Chat.Completions.ChatCompletionMessage & { tool_calls: OpenAI.Chat.Completions.ChatCompletionMessageToolCall[] } => msg.role === 'assistant' && !!msg.tool_calls)\n .flatMap(msg => msg.tool_calls);\n\n for (const toolCall of completedToolCalls) {\n const toolOutputMessage = finalMessages.find(\n (msg): msg is OpenAI.Chat.Completions.ChatCompletionMessage => msg.role === 'tool' && msg.tool_call_id === toolCall.id\n );\n if (toolOutputMessage && 'function' in toolCall && toolCall.function) {\n (toolCall.function as any).output = toolOutputMessage.content;\n }\n }\n\n logger.info('RunTools completed', {\n messageCount: finalMessages.length,\n toolCallCount: completedToolCalls.length,\n completedToolCalls,\n finalMessages: finalMessages,\n finalContent: finalContent,\n });\n\n // The SDK should handle parsing, but as a safeguard, parse stringified outputs.\n for (const toolCall of completedToolCalls) {\n if ('function' in toolCall && toolCall.function && 'output' in toolCall.function && typeof toolCall.function.output === 'string') {\n try {\n // Attempt to parse the output, but don't fail if it's just a raw string.\n const parsedOutput = JSON.parse(toolCall.function.output);\n (toolCall.function as any).output = parsedOutput;\n } catch (e) {\n logger.debug('Tool output was a non-JSON string.', { output: toolCall.function.output });\n }\n }\n }\n\n return {\n success: true,\n content: finalContent ?? undefined,\n messages: finalMessages,\n toolCalls: completedToolCalls,\n };\n } catch (error: any) {\n\n logger.error('RunTools failed', {\n error: error.message,\n prompt: prompt.substring(0, 100),\n });\n\n return {\n success: false,\n messages,\n toolCalls,\n error: error.message || 'Unknown error occurred',\n };\n }\n};\n","export const ENABLE_ZOOM = true;\n\nexport enum TauriCommand {\n SUBMIT_PROMPT = 'submit_prompt',\n LOG_ERROR = 'log_error_to_console',\n RESOLVE_PATH = 'resolve_path_relative_to_home',\n ADD_DEBUG_MESSAGE = 'add_debug_message',\n SEND_IPC_MESSAGE = 'send_ipc_message',\n REQUEST_CONFIG = 'request_config_from_images',\n GENERATE_IMAGE = 'generate_image_via_backend',\n REQUEST_FILE_DELETION = 'request_file_deletion',\n}\n\nexport enum TauriEvent {\n CONFIG_RECEIVED = 'config-received',\n IMAGE_RECEIVED = 'image-received',\n GENERATION_ERROR = 'generation-error',\n GENERATION_COMPLETE = 'generation-complete',\n FILE_DELETED_SUCCESSFULLY = 'file-deleted-successfully',\n FILE_DELETION_ERROR = 'file-deletion-error',\n}\n\nexport const QUICK_STYLES = [\n 'cartoon style',\n 'photorealistic',\n 'noir style',\n 'product mockup',\n 'watercolor painting',\n 'digital art',\n 'minimalist design',\n 'vintage poster',\n 'cyberpunk aesthetic'\n] as const;\n\nexport const QUICK_ACTIONS = [\n {\n name: 'Remove Background',\n prompt: 'remove the background, make it transparent',\n iconName: 'Eraser'\n },\n {\n name: 'Cleanup',\n prompt: 'clean up and enhance the image, remove noise and artifacts',\n iconName: 'Sparkles'\n },\n {\n name: 'Crop Foreground',\n prompt: 'crop to focus on the main subject, remove unnecessary background',\n iconName: 'Crop'\n },\n {\n name: 'Improve Colors',\n prompt: 'enhance colors, improve saturation and contrast',\n iconName: 'Palette'\n },\n {\n name: 'Product Presentation',\n prompt: 'professional product photography style, clean background, studio lighting',\n iconName: 'Package'\n }\n] as const;\n\n// AI Image Analysis Prompt\nexport const AI_IMAGE_ANALYSIS_PROMPT =\n \"Analyze this image and provide: 1) A creative, engaging title (max 50 characters), and 2) A detailed description. Format your response with 'Title: [your title]' on the first line, followed by the description on the next lines.\" as const;\n\n// Photo Grid Image Dimensions\nexport const PHOTO_GRID_THUMBNAIL_WIDTH = 600;\nexport const PHOTO_GRID_IMAGE_FORMAT = 'jpg' as const; // 'jpg' | 'png'\n\n// Feed Configuration\nexport const FEED_PAGE_SIZE = 30;\nexport const FEED_API_ENDPOINT = '/api/feed';\n\n// Split Prompts Configuration\nexport const MAX_SPLIT_PROMPTS = 10;\n\n/**\n * Split a prompt into multiple lines for sequential generation\n * @param prompt The full prompt text\n * @param maxLines Maximum number of lines to accept (default: 10)\n * @returns Array of prompt lines, trimmed and filtered for empty lines\n */\nexport const splitPromptByLines = (prompt: string, maxLines: number = MAX_SPLIT_PROMPTS): string[] => {\n return prompt\n .split('\\n')\n .map(line => line.trim())\n .map(line => line.replace(/^[-•*]\\s*/, '')) // Remove leading bullets/dashes\n .filter(line => line.length > 0)\n .slice(0, maxLines);\n};\n\n// Default Quick Actions for ImageWizard\nexport interface QuickAction {\n id: string;\n name: string;\n prompt: string;\n icon: string;\n}\n\nexport const DEFAULT_QUICK_ACTIONS: QuickAction[] = [\n { id: '1', name: \"Enhance\", prompt: \"Enhance and improve this image\", icon: \"✨\" },\n { id: '2', name: \"Make Artistic\", prompt: \"Transform this into a beautiful artistic painting\", icon: \"🎨\" },\n { id: '3', name: \"Cyberpunk Style\", prompt: \"Transform this into cyberpunk style with neon colors\", icon: \"🌆\" },\n { id: '4', name: \"Fantasy\", prompt: \"Transform this into a fantasy art style\", icon: \"🧙‍♂️\" },\n { id: '5', name: \"Portrait\", prompt: \"Transform this into a professional portrait\", icon: \"👤\" },\n];","import { useState, useRef, useEffect } from 'react';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { Switch } from '@/components/ui/switch';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { Card, CardContent } from '@/components/ui/card';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { z } from 'zod';\nimport { supabase } from '@/integrations/supabase/client';\nimport { useAuth } from '@/hooks/useAuth';\nimport { toast } from 'sonner';\nimport { Edit3, GitBranch, Sparkles, Mic, MicOff, Loader2, Bookmark } from 'lucide-react';\nimport MarkdownEditor from '@/components/MarkdownEditor';\nimport VersionSelector from '@/components/VersionSelector';\nimport { analyzeImages, transcribeAudio } from '@/lib/openai';\nimport { AI_IMAGE_ANALYSIS_PROMPT } from '@/constants';\nimport { T, translate } from '@/i18n';\n\ninterface Collection {\n id: string;\n name: string;\n description: string | null;\n slug: string;\n is_public: boolean;\n}\n\nconst editSchema = z.object({\n title: z.string().max(100, 'Title must be less than 100 characters').optional(),\n description: z.string().max(1000, 'Description must be less than 1000 characters').optional(),\n visible: z.boolean(),\n});\n\ntype EditFormData = z.infer<typeof editSchema>;\n\ninterface EditImageModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n pictureId: string;\n currentTitle: string;\n currentDescription: string | null;\n currentVisible: boolean;\n imageUrl?: string;\n onUpdateSuccess: () => void;\n}\n\nconst EditImageModal = ({ \n open, \n onOpenChange, \n pictureId, \n currentTitle, \n currentDescription,\n currentVisible,\n imageUrl,\n onUpdateSuccess \n}: EditImageModalProps) => {\n const [updating, setUpdating] = useState(false);\n const [isGenerating, setIsGenerating] = useState(false);\n const { user } = useAuth();\n \n // Microphone recording state\n const [isRecording, setIsRecording] = useState(false);\n const [isTranscribing, setIsTranscribing] = useState(false);\n const mediaRecorderRef = useRef<MediaRecorder | null>(null);\n const audioChunksRef = useRef<Blob[]>([]);\n\n // Collections state\n const [collections, setCollections] = useState<Collection[]>([]);\n const [selectedCollections, setSelectedCollections] = useState<Set<string>>(new Set());\n const [loadingCollections, setLoadingCollections] = useState(false);\n\n const form = useForm<EditFormData>({\n resolver: zodResolver(editSchema),\n defaultValues: {\n title: currentTitle,\n description: currentDescription || '',\n visible: currentVisible,\n },\n });\n\n // Load collections when modal opens\n useEffect(() => {\n if (open && user) {\n fetchCollections();\n fetchPictureCollections();\n }\n }, [open, user, pictureId]);\n\n const fetchCollections = async () => {\n if (!user) return;\n\n setLoadingCollections(true);\n try {\n const { data, error } = await supabase\n .from('collections')\n .select('*')\n .eq('user_id', user.id)\n .order('created_at', { ascending: false });\n\n if (error) throw error;\n setCollections(data || []);\n } catch (error) {\n console.error('Error fetching collections:', error);\n toast.error(translate('Failed to load collections'));\n } finally {\n setLoadingCollections(false);\n }\n };\n\n const fetchPictureCollections = async () => {\n if (!user) return;\n\n try {\n const { data, error } = await supabase\n .from('collection_pictures')\n .select('collection_id')\n .eq('picture_id', pictureId);\n\n if (error) throw error;\n\n const collectionIds = new Set(data.map(item => item.collection_id));\n setSelectedCollections(collectionIds);\n } catch (error) {\n console.error('Error fetching picture collections:', error);\n }\n };\n\n const handleToggleCollection = async (collectionId: string) => {\n if (!user) return;\n\n const isSelected = selectedCollections.has(collectionId);\n\n try {\n if (isSelected) {\n // Remove from collection\n const { error } = await supabase\n .from('collection_pictures')\n .delete()\n .eq('collection_id', collectionId)\n .eq('picture_id', pictureId);\n\n if (error) throw error;\n\n setSelectedCollections(prev => {\n const newSet = new Set(prev);\n newSet.delete(collectionId);\n return newSet;\n });\n\n toast.success(translate('Removed from collection'));\n } else {\n // Add to collection\n const { error } = await supabase\n .from('collection_pictures')\n .insert({\n collection_id: collectionId,\n picture_id: pictureId\n });\n\n if (error) throw error;\n\n setSelectedCollections(prev => new Set([...prev, collectionId]));\n toast.success(translate('Added to collection'));\n }\n } catch (error) {\n console.error('Error toggling collection:', error);\n toast.error(translate('Failed to update collection'));\n }\n };\n\n const onSubmit = async (data: EditFormData) => {\n if (!user) return;\n \n setUpdating(true);\n try {\n const { error } = await supabase\n .from('pictures')\n .update({\n title: data.title?.trim() || null,\n description: data.description || null,\n visible: data.visible,\n updated_at: new Date().toISOString(),\n })\n .eq('id', pictureId)\n .eq('user_id', user.id);\n\n if (error) throw error;\n\n toast.success(translate('Picture updated successfully!'));\n onUpdateSuccess();\n } catch (error: any) {\n console.error('Error updating picture:', error);\n toast.error(translate('Failed to update picture'));\n } finally {\n setUpdating(false);\n }\n };\n\n const handleClose = () => {\n form.reset();\n onOpenChange(false);\n };\n\n const handleMagicGenerate = async () => {\n if (!imageUrl) {\n toast.error(translate('No image URL available'));\n return;\n }\n\n setIsGenerating(true);\n try {\n // Fetch the image and convert to File\n const response = await fetch(imageUrl);\n const blob = await response.blob();\n const file = new File([blob], 'image.png', { type: blob.type || 'image/png' });\n\n // Call OpenAI to analyze the image\n const result = await analyzeImages([file], AI_IMAGE_ANALYSIS_PROMPT);\n\n if (!result) {\n toast.error(translate('OpenAI API key not configured. Please add your OpenAI API key in your profile settings.'));\n return;\n }\n\n // Update form fields with generated content\n form.setValue('title', result.title);\n form.setValue('description', result.description);\n \n toast.success(translate('Title and description generated!'));\n } catch (error: any) {\n console.error('Error generating metadata:', error);\n toast.error(error.message || translate('Failed to generate metadata. Please check your OpenAI API key.'));\n } finally {\n setIsGenerating(false);\n }\n };\n\n const handleMicrophone = async () => {\n if (isRecording) {\n // Stop recording\n if (mediaRecorderRef.current && mediaRecorderRef.current.state === 'recording') {\n mediaRecorderRef.current.stop();\n setIsRecording(false);\n }\n } else {\n // Start recording\n try {\n // Check if MediaRecorder is supported\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\n toast.error(translate('Audio recording is not supported in your browser'));\n return;\n }\n\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n \n // Create MediaRecorder with common audio format\n const options = { mimeType: 'audio/webm' };\n let mediaRecorder: MediaRecorder;\n \n try {\n mediaRecorder = new MediaRecorder(stream, options);\n } catch (e) {\n // Fallback without options if the format is not supported\n mediaRecorder = new MediaRecorder(stream);\n }\n \n mediaRecorderRef.current = mediaRecorder;\n audioChunksRef.current = [];\n\n mediaRecorder.ondataavailable = (event) => {\n if (event.data.size > 0) {\n audioChunksRef.current.push(event.data);\n }\n };\n\n mediaRecorder.onstop = async () => {\n setIsTranscribing(true);\n \n try {\n const audioBlob = new Blob(audioChunksRef.current, { type: 'audio/webm' });\n const audioFile = new File([audioBlob], 'recording.webm', { type: 'audio/webm' });\n \n toast.info(translate('Transcribing audio...'));\n const transcribedText = await transcribeAudio(audioFile);\n \n if (transcribedText) {\n // Append transcribed text to description field\n const currentDescription = form.getValues('description') || '';\n const trimmed = currentDescription.trim();\n const newDescription = trimmed ? `${trimmed}\\n\\n${transcribedText}` : transcribedText;\n \n form.setValue('description', newDescription);\n toast.success(translate('Audio transcribed successfully!'));\n } else {\n toast.error(translate('Failed to transcribe audio. Please check your OpenAI API key.'));\n }\n } catch (error: any) {\n console.error('Error transcribing audio:', error);\n toast.error(error.message || translate('Failed to transcribe audio'));\n } finally {\n setIsTranscribing(false);\n audioChunksRef.current = [];\n \n // Stop all tracks\n stream.getTracks().forEach(track => track.stop());\n }\n };\n\n mediaRecorder.start();\n setIsRecording(true);\n toast.info(translate('Recording started... Click again to stop'));\n \n } catch (error: any) {\n console.error('Error accessing microphone:', error);\n if (error.name === 'NotAllowedError') {\n toast.error(translate('Microphone access denied. Please allow microphone access in your browser settings.'));\n } else {\n toast.error(translate('Failed to access microphone') + ': ' + error.message);\n }\n }\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={handleClose}>\n <DialogContent className=\"max-w-2xl max-h-[80vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n <Edit3 className=\"h-5 w-5\" />\n <T>Edit Picture</T>\n </DialogTitle>\n </DialogHeader>\n \n <Tabs defaultValue=\"edit\" className=\"w-full\">\n <TabsList className=\"grid w-full grid-cols-3\">\n <TabsTrigger value=\"edit\" className=\"flex items-center gap-2\">\n <Edit3 className=\"h-4 w-4\" />\n <T>Edit Details</T>\n </TabsTrigger>\n <TabsTrigger value=\"collections\" className=\"flex items-center gap-2\">\n <Bookmark className=\"h-4 w-4\" />\n <T>Collections</T>\n </TabsTrigger>\n <TabsTrigger value=\"versions\" className=\"flex items-center gap-2\">\n <GitBranch className=\"h-4 w-4\" />\n <T>Versions</T>\n </TabsTrigger>\n </TabsList>\n \n <TabsContent value=\"edit\" className=\"mt-4\">\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-4\">\n {/* Magic Generate Button */}\n {imageUrl && (\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"w-full\"\n onClick={handleMagicGenerate}\n disabled={isGenerating || updating}\n >\n {isGenerating ? (\n <>\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-primary border-t-transparent mr-2\"></div>\n <T>Generating...</T>\n </>\n ) : (\n <>\n <Sparkles className=\"h-4 w-4 mr-2\" />\n <T>Generate Title & Description with AI</T>\n </>\n )}\n </Button>\n )}\n \n <FormField\n control={form.control}\n name=\"title\"\n render={({ field }) => (\n <FormItem>\n <FormLabel><T>Title (Optional)</T></FormLabel>\n <FormControl>\n <Input \n placeholder={translate(\"Enter a title...\")} \n {...field}\n onKeyDown={(e) => {\n if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') {\n e.preventDefault();\n form.handleSubmit(onSubmit)();\n }\n }}\n />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <FormField\n control={form.control}\n name=\"description\"\n render={({ field }) => (\n <FormItem>\n <div className=\"flex items-center justify-between mb-2\">\n <FormLabel><T>Description (Optional)</T></FormLabel>\n <button\n type=\"button\"\n onClick={handleMicrophone}\n disabled={isTranscribing || updating}\n className={`p-1.5 rounded-md transition-colors ${\n isRecording\n ? 'bg-red-100 text-red-600 hover:bg-red-200' \n : 'text-muted-foreground hover:text-foreground hover:bg-accent'\n }`}\n title={translate(isRecording ? 'Stop recording' : 'Record audio')}\n >\n {isTranscribing ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : isRecording ? (\n <MicOff className=\"h-4 w-4\" />\n ) : (\n <Mic className=\"h-4 w-4\" />\n )}\n </button>\n </div>\n <FormControl>\n <MarkdownEditor\n value={field.value || ''}\n onChange={field.onChange}\n placeholder={translate(\"Describe your photo... You can use **markdown** formatting!\")}\n className=\"min-h-[120px]\"\n onKeyDown={(e) => {\n if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') {\n e.preventDefault();\n form.handleSubmit(onSubmit)();\n }\n }}\n />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <FormField\n control={form.control}\n name=\"visible\"\n render={({ field }) => (\n <FormItem className=\"flex flex-row items-center justify-between rounded-lg border p-4\">\n <div className=\"space-y-0.5\">\n <FormLabel className=\"text-base\">\n <T>Visible</T>\n </FormLabel>\n <div className=\"text-sm text-muted-foreground\">\n <T>Make this picture visible to others</T>\n </div>\n </div>\n <FormControl>\n <Switch\n checked={field.value}\n onCheckedChange={field.onChange}\n />\n </FormControl>\n </FormItem>\n )}\n />\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"flex-1\"\n onClick={handleClose}\n disabled={updating}\n >\n <T>Cancel</T>\n </Button>\n <Button\n type=\"submit\"\n className=\"flex-1\"\n disabled={updating}\n >\n <T>{updating ? 'Updating...' : 'Update'}</T>\n </Button>\n </div>\n </form>\n </Form>\n </TabsContent>\n \n <TabsContent value=\"collections\" className=\"mt-4\">\n <div className=\"space-y-4\">\n {loadingCollections ? (\n <div className=\"flex items-center justify-center py-8\">\n <Loader2 className=\"h-6 w-6 animate-spin text-muted-foreground\" />\n </div>\n ) : collections.length === 0 ? (\n <div className=\"text-center py-8\">\n <Bookmark className=\"h-12 w-12 mx-auto mb-3 text-muted-foreground opacity-50\" />\n <p className=\"text-muted-foreground mb-4\">\n <T>No collections yet</T>\n </p>\n <Button\n variant=\"outline\"\n onClick={() => {\n handleClose();\n // Navigate to create collection - could be improved with proper navigation\n window.location.href = '/collections/new';\n }}\n >\n <T>Create Collection</T>\n </Button>\n </div>\n ) : (\n <div className=\"space-y-2 max-h-96 overflow-y-auto\">\n {collections.map((collection) => (\n <Card\n key={collection.id}\n className={`cursor-pointer transition-colors ${\n selectedCollections.has(collection.id)\n ? 'bg-primary/10 border-primary'\n : 'hover:bg-muted/50'\n }`}\n onClick={() => handleToggleCollection(collection.id)}\n >\n <CardContent className=\"p-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex-1 mr-3\">\n <div className=\"flex items-center gap-2\">\n <h4 className=\"font-medium\">{collection.name}</h4>\n {!collection.is_public && (\n <span className=\"text-xs text-muted-foreground\">(Private)</span>\n )}\n </div>\n {collection.description && (\n <p className=\"text-sm text-muted-foreground line-clamp-1\">\n {collection.description}\n </p>\n )}\n </div>\n <Checkbox\n checked={selectedCollections.has(collection.id)}\n onCheckedChange={() => handleToggleCollection(collection.id)}\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n )}\n \n <div className=\"pt-2 text-sm text-muted-foreground text-center\">\n <T>\n {selectedCollections.size === 0\n ? 'Not in any collections'\n : selectedCollections.size === 1\n ? 'In 1 collection'\n : `In ${selectedCollections.size} collections`}\n </T>\n </div>\n </div>\n </TabsContent>\n \n <TabsContent value=\"versions\" className=\"mt-4\">\n <VersionSelector \n currentPictureId={pictureId}\n onVersionSelect={onUpdateSuccess}\n />\n </TabsContent>\n </Tabs>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default EditImageModal;","import React, { useRef, useImperativeHandle, useEffect, useContext, useLayoutEffect, useState, useCallback, useMemo } from 'react';\n\n/**\n * Rounds number to given decimal\n * eg. roundNumber(2.34343, 1) => 2.3\n */\nvar roundNumber = function (num, decimal) {\n return Number(num.toFixed(decimal));\n};\n/**\n * Checks if value is number, if not it returns default value\n * 1# eg. checkIsNumber(2, 30) => 2\n * 2# eg. checkIsNumber(null, 30) => 30\n */\nvar checkIsNumber = function (num, defaultValue) {\n return typeof num === \"number\" ? num : defaultValue;\n};\n\nvar handleCallback = function (context, event, callback) {\n if (callback && typeof callback === \"function\") {\n callback(context, event);\n }\n};\n\n/* eslint-disable no-plusplus */\n/* eslint-disable no-param-reassign */\n/**\n * Functions should return denominator of the target value, which is the next animation step.\n * t is a value from 0 to 1, reflecting the percentage of animation status.\n */\nvar easeOut = function (t) {\n return -Math.cos(t * Math.PI) / 2 + 0.5;\n};\n// linear\nvar linear = function (t) {\n return t;\n};\n// accelerating from zero velocity\nvar easeInQuad = function (t) {\n return t * t;\n};\n// decelerating to zero velocity\nvar easeOutQuad = function (t) {\n return t * (2 - t);\n};\n// acceleration until halfway, then deceleration\nvar easeInOutQuad = function (t) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n};\n// accelerating from zero velocity\nvar easeInCubic = function (t) {\n return t * t * t;\n};\n// decelerating to zero velocity\nvar easeOutCubic = function (t) {\n return --t * t * t + 1;\n};\n// acceleration until halfway, then deceleration\nvar easeInOutCubic = function (t) {\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n};\n// accelerating from zero velocity\nvar easeInQuart = function (t) {\n return t * t * t * t;\n};\n// decelerating to zero velocity\nvar easeOutQuart = function (t) {\n return 1 - --t * t * t * t;\n};\n// acceleration until halfway, then deceleration\nvar easeInOutQuart = function (t) {\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n};\n// accelerating from zero velocity\nvar easeInQuint = function (t) {\n return t * t * t * t * t;\n};\n// decelerating to zero velocity\nvar easeOutQuint = function (t) {\n return 1 + --t * t * t * t * t;\n};\n// acceleration until halfway, then deceleration\nvar easeInOutQuint = function (t) {\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\n};\nvar animations = {\n easeOut: easeOut,\n linear: linear,\n easeInQuad: easeInQuad,\n easeOutQuad: easeOutQuad,\n easeInOutQuad: easeInOutQuad,\n easeInCubic: easeInCubic,\n easeOutCubic: easeOutCubic,\n easeInOutCubic: easeInOutCubic,\n easeInQuart: easeInQuart,\n easeOutQuart: easeOutQuart,\n easeInOutQuart: easeInOutQuart,\n easeInQuint: easeInQuint,\n easeOutQuint: easeOutQuint,\n easeInOutQuint: easeInOutQuint,\n};\n\n/* eslint-disable no-param-reassign */\nvar handleCancelAnimationFrame = function (animation) {\n if (typeof animation === \"number\") {\n cancelAnimationFrame(animation);\n }\n};\nvar handleCancelAnimation = function (contextInstance) {\n if (!contextInstance.mounted)\n return;\n handleCancelAnimationFrame(contextInstance.animation);\n // Clear animation state\n contextInstance.animate = false;\n contextInstance.animation = null;\n contextInstance.velocity = null;\n};\nfunction handleSetupAnimation(contextInstance, animationName, animationTime, callback) {\n if (!contextInstance.mounted)\n return;\n var startTime = new Date().getTime();\n var lastStep = 1;\n // if another animation is active\n handleCancelAnimation(contextInstance);\n // new animation\n contextInstance.animation = function () {\n if (!contextInstance.mounted) {\n return handleCancelAnimationFrame(contextInstance.animation);\n }\n var frameTime = new Date().getTime() - startTime;\n var animationProgress = frameTime / animationTime;\n var animationType = animations[animationName];\n var step = animationType(animationProgress);\n if (frameTime >= animationTime) {\n callback(lastStep);\n contextInstance.animation = null;\n }\n else if (contextInstance.animation) {\n callback(step);\n requestAnimationFrame(contextInstance.animation);\n }\n };\n requestAnimationFrame(contextInstance.animation);\n}\nfunction isValidTargetState(targetState) {\n var scale = targetState.scale, positionX = targetState.positionX, positionY = targetState.positionY;\n if (Number.isNaN(scale) ||\n Number.isNaN(positionX) ||\n Number.isNaN(positionY)) {\n return false;\n }\n return true;\n}\nfunction animate(contextInstance, targetState, animationTime, animationName) {\n var isValid = isValidTargetState(targetState);\n if (!contextInstance.mounted || !isValid)\n return;\n var setTransformState = contextInstance.setTransformState;\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n var scaleDiff = targetState.scale - scale;\n var positionXDiff = targetState.positionX - positionX;\n var positionYDiff = targetState.positionY - positionY;\n if (animationTime === 0) {\n setTransformState(targetState.scale, targetState.positionX, targetState.positionY);\n }\n else {\n // animation start timestamp\n handleSetupAnimation(contextInstance, animationName, animationTime, function (step) {\n var newScale = scale + scaleDiff * step;\n var newPositionX = positionX + positionXDiff * step;\n var newPositionY = positionY + positionYDiff * step;\n setTransformState(newScale, newPositionX, newPositionY);\n });\n }\n}\n\n/* eslint-disable no-param-reassign */\nfunction getComponentsSizes(wrapperComponent, contentComponent, newScale) {\n var wrapperWidth = wrapperComponent.offsetWidth;\n var wrapperHeight = wrapperComponent.offsetHeight;\n var contentWidth = contentComponent.offsetWidth;\n var contentHeight = contentComponent.offsetHeight;\n var newContentWidth = contentWidth * newScale;\n var newContentHeight = contentHeight * newScale;\n var newDiffWidth = wrapperWidth - newContentWidth;\n var newDiffHeight = wrapperHeight - newContentHeight;\n return {\n wrapperWidth: wrapperWidth,\n wrapperHeight: wrapperHeight,\n newContentWidth: newContentWidth,\n newDiffWidth: newDiffWidth,\n newContentHeight: newContentHeight,\n newDiffHeight: newDiffHeight,\n };\n}\nvar getBounds = function (wrapperWidth, newContentWidth, diffWidth, wrapperHeight, newContentHeight, diffHeight, centerZoomedOut) {\n var scaleWidthFactor = wrapperWidth > newContentWidth\n ? diffWidth * (centerZoomedOut ? 1 : 0.5)\n : 0;\n var scaleHeightFactor = wrapperHeight > newContentHeight\n ? diffHeight * (centerZoomedOut ? 1 : 0.5)\n : 0;\n var minPositionX = wrapperWidth - newContentWidth - scaleWidthFactor;\n var maxPositionX = scaleWidthFactor;\n var minPositionY = wrapperHeight - newContentHeight - scaleHeightFactor;\n var maxPositionY = scaleHeightFactor;\n return { minPositionX: minPositionX, maxPositionX: maxPositionX, minPositionY: minPositionY, maxPositionY: maxPositionY };\n};\nvar calculateBounds = function (contextInstance, newScale) {\n var wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n var centerZoomedOut = contextInstance.setup.centerZoomedOut;\n if (!wrapperComponent || !contentComponent) {\n throw new Error(\"Components are not mounted\");\n }\n var _a = getComponentsSizes(wrapperComponent, contentComponent, newScale), wrapperWidth = _a.wrapperWidth, wrapperHeight = _a.wrapperHeight, newContentWidth = _a.newContentWidth, newDiffWidth = _a.newDiffWidth, newContentHeight = _a.newContentHeight, newDiffHeight = _a.newDiffHeight;\n var bounds = getBounds(wrapperWidth, newContentWidth, newDiffWidth, wrapperHeight, newContentHeight, newDiffHeight, Boolean(centerZoomedOut));\n return bounds;\n};\n/**\n * Keeps value between given bounds, used for limiting view to given boundaries\n * 1# eg. boundLimiter(2, 0, 3, true) => 2\n * 2# eg. boundLimiter(4, 0, 3, true) => 3\n * 3# eg. boundLimiter(-2, 0, 3, true) => 0\n * 4# eg. boundLimiter(10, 0, 3, false) => 10\n */\nvar boundLimiter = function (value, minBound, maxBound, isActive) {\n if (!isActive)\n return roundNumber(value, 2);\n if (value < minBound)\n return roundNumber(minBound, 2);\n if (value > maxBound)\n return roundNumber(maxBound, 2);\n return roundNumber(value, 2);\n};\nvar handleCalculateBounds = function (contextInstance, newScale) {\n var bounds = calculateBounds(contextInstance, newScale);\n // Save bounds\n contextInstance.bounds = bounds;\n return bounds;\n};\nfunction getMouseBoundedPosition(positionX, positionY, bounds, limitToBounds, paddingValueX, paddingValueY, wrapperComponent) {\n var minPositionX = bounds.minPositionX, minPositionY = bounds.minPositionY, maxPositionX = bounds.maxPositionX, maxPositionY = bounds.maxPositionY;\n var paddingX = 0;\n var paddingY = 0;\n if (wrapperComponent) {\n paddingX = paddingValueX;\n paddingY = paddingValueY;\n }\n var x = boundLimiter(positionX, minPositionX - paddingX, maxPositionX + paddingX, limitToBounds);\n var y = boundLimiter(positionY, minPositionY - paddingY, maxPositionY + paddingY, limitToBounds);\n return { x: x, y: y };\n}\n\nfunction handleCalculateZoomPositions(contextInstance, mouseX, mouseY, newScale, bounds, limitToBounds) {\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n var scaleDifference = newScale - scale;\n if (typeof mouseX !== \"number\" || typeof mouseY !== \"number\") {\n console.error(\"Mouse X and Y position were not provided!\");\n return { x: positionX, y: positionY };\n }\n var calculatedPositionX = positionX - mouseX * scaleDifference;\n var calculatedPositionY = positionY - mouseY * scaleDifference;\n // do not limit to bounds when there is padding animation,\n // it causes animation strange behaviour\n var newPositions = getMouseBoundedPosition(calculatedPositionX, calculatedPositionY, bounds, limitToBounds, 0, 0, null);\n return newPositions;\n}\nfunction checkZoomBounds(zoom, minScale, maxScale, zoomPadding, enablePadding) {\n var scalePadding = enablePadding ? zoomPadding : 0;\n var minScaleWithPadding = minScale - scalePadding;\n if (!Number.isNaN(maxScale) && zoom >= maxScale)\n return maxScale;\n if (!Number.isNaN(minScale) && zoom <= minScaleWithPadding)\n return minScaleWithPadding;\n return zoom;\n}\n\nvar isPanningStartAllowed = function (contextInstance, event) {\n var excluded = contextInstance.setup.panning.excluded;\n var isInitialized = contextInstance.isInitialized, wrapperComponent = contextInstance.wrapperComponent;\n var target = event.target;\n var targetIsShadowDom = \"shadowRoot\" in target && \"composedPath\" in event;\n var isWrapperChild = targetIsShadowDom\n ? event.composedPath().some(function (el) {\n if (!(el instanceof Element)) {\n return false;\n }\n return wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.contains(el);\n })\n : wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.contains(target);\n var isAllowed = isInitialized && target && isWrapperChild;\n if (!isAllowed)\n return false;\n var isExcluded = isExcludedNode(target, excluded);\n if (isExcluded)\n return false;\n return true;\n};\nvar isPanningAllowed = function (contextInstance) {\n var isInitialized = contextInstance.isInitialized, isPanning = contextInstance.isPanning, setup = contextInstance.setup;\n var disabled = setup.panning.disabled;\n var isAllowed = isInitialized && isPanning && !disabled;\n if (!isAllowed)\n return false;\n return true;\n};\nvar handlePanningSetup = function (contextInstance, event) {\n var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY;\n contextInstance.isPanning = true;\n // Panning with mouse\n var x = event.clientX;\n var y = event.clientY;\n contextInstance.startCoords = { x: x - positionX, y: y - positionY };\n};\nvar handleTouchPanningSetup = function (contextInstance, event) {\n var touches = event.touches;\n var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY;\n contextInstance.isPanning = true;\n // Panning with touch\n var oneFingerTouch = touches.length === 1;\n if (oneFingerTouch) {\n var x = touches[0].clientX;\n var y = touches[0].clientY;\n contextInstance.startCoords = { x: x - positionX, y: y - positionY };\n }\n};\nfunction handlePanToBounds(contextInstance) {\n var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY, scale = _a.scale;\n var _b = contextInstance.setup, disabled = _b.disabled, limitToBounds = _b.limitToBounds, centerZoomedOut = _b.centerZoomedOut;\n var wrapperComponent = contextInstance.wrapperComponent;\n if (disabled || !wrapperComponent || !contextInstance.bounds)\n return;\n var _c = contextInstance.bounds, maxPositionX = _c.maxPositionX, minPositionX = _c.minPositionX, maxPositionY = _c.maxPositionY, minPositionY = _c.minPositionY;\n var xChanged = positionX > maxPositionX || positionX < minPositionX;\n var yChanged = positionY > maxPositionY || positionY < minPositionY;\n var mousePosX = positionX > maxPositionX\n ? wrapperComponent.offsetWidth\n : contextInstance.setup.minPositionX || 0;\n var mousePosY = positionY > maxPositionY\n ? wrapperComponent.offsetHeight\n : contextInstance.setup.minPositionY || 0;\n var _d = handleCalculateZoomPositions(contextInstance, mousePosX, mousePosY, scale, contextInstance.bounds, limitToBounds || centerZoomedOut), x = _d.x, y = _d.y;\n return {\n scale: scale,\n positionX: xChanged ? x : positionX,\n positionY: yChanged ? y : positionY,\n };\n}\nfunction handleNewPosition(contextInstance, newPositionX, newPositionY, paddingValueX, paddingValueY) {\n var limitToBounds = contextInstance.setup.limitToBounds;\n var wrapperComponent = contextInstance.wrapperComponent, bounds = contextInstance.bounds;\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n if (wrapperComponent === null ||\n bounds === null ||\n (newPositionX === positionX && newPositionY === positionY)) {\n return;\n }\n var _b = getMouseBoundedPosition(newPositionX, newPositionY, bounds, limitToBounds, paddingValueX, paddingValueY, wrapperComponent), x = _b.x, y = _b.y;\n contextInstance.setTransformState(scale, x, y);\n}\nvar getPanningClientPosition = function (contextInstance, clientX, clientY) {\n var startCoords = contextInstance.startCoords, transformState = contextInstance.transformState;\n var panning = contextInstance.setup.panning;\n var lockAxisX = panning.lockAxisX, lockAxisY = panning.lockAxisY;\n var positionX = transformState.positionX, positionY = transformState.positionY;\n if (!startCoords) {\n return { x: positionX, y: positionY };\n }\n var mouseX = clientX - startCoords.x;\n var mouseY = clientY - startCoords.y;\n var newPositionX = lockAxisX ? positionX : mouseX;\n var newPositionY = lockAxisY ? positionY : mouseY;\n return { x: newPositionX, y: newPositionY };\n};\nvar getPaddingValue = function (contextInstance, size) {\n var setup = contextInstance.setup, transformState = contextInstance.transformState;\n var scale = transformState.scale;\n var minScale = setup.minScale, disablePadding = setup.disablePadding;\n if (size > 0 && scale >= minScale && !disablePadding) {\n return size;\n }\n return 0;\n};\n\nvar isVelocityCalculationAllowed = function (contextInstance) {\n var mounted = contextInstance.mounted;\n var _a = contextInstance.setup, disabled = _a.disabled, velocityAnimation = _a.velocityAnimation;\n var scale = contextInstance.transformState.scale;\n var disabledVelocity = velocityAnimation.disabled;\n var isAllowed = !disabledVelocity || scale > 1 || !disabled || mounted;\n if (!isAllowed)\n return false;\n return true;\n};\nvar isVelocityAllowed = function (contextInstance) {\n var mounted = contextInstance.mounted, velocity = contextInstance.velocity, bounds = contextInstance.bounds;\n var _a = contextInstance.setup, disabled = _a.disabled, velocityAnimation = _a.velocityAnimation;\n var scale = contextInstance.transformState.scale;\n var disabledVelocity = velocityAnimation.disabled;\n var isAllowed = !disabledVelocity || scale > 1 || !disabled || mounted;\n if (!isAllowed)\n return false;\n if (!velocity || !bounds)\n return false;\n return true;\n};\nfunction getVelocityMoveTime(contextInstance, velocity) {\n var velocityAnimation = contextInstance.setup.velocityAnimation;\n var equalToMove = velocityAnimation.equalToMove, animationTime = velocityAnimation.animationTime, sensitivity = velocityAnimation.sensitivity;\n if (equalToMove) {\n return animationTime * velocity * sensitivity;\n }\n return animationTime;\n}\nfunction getVelocityPosition(newPosition, startPosition, currentPosition, isLocked, limitToBounds, minPosition, maxPosition, minTarget, maxTarget, step) {\n if (limitToBounds) {\n if (startPosition > maxPosition && currentPosition > maxPosition) {\n var calculatedPosition = maxPosition + (newPosition - maxPosition) * step;\n if (calculatedPosition > maxTarget)\n return maxTarget;\n if (calculatedPosition < maxPosition)\n return maxPosition;\n return calculatedPosition;\n }\n if (startPosition < minPosition && currentPosition < minPosition) {\n var calculatedPosition = minPosition + (newPosition - minPosition) * step;\n if (calculatedPosition < minTarget)\n return minTarget;\n if (calculatedPosition > minPosition)\n return minPosition;\n return calculatedPosition;\n }\n }\n if (isLocked)\n return startPosition;\n return boundLimiter(newPosition, minPosition, maxPosition, limitToBounds);\n}\n\nfunction getSizeMultiplier(wrapperComponent, equalToMove) {\n var defaultMultiplier = 1;\n if (equalToMove) {\n return Math.min(defaultMultiplier, wrapperComponent.offsetWidth / window.innerWidth);\n }\n return defaultMultiplier;\n}\nfunction handleCalculateVelocity(contextInstance, position) {\n var isAllowed = isVelocityCalculationAllowed(contextInstance);\n if (!isAllowed) {\n return;\n }\n var lastMousePosition = contextInstance.lastMousePosition, velocityTime = contextInstance.velocityTime, setup = contextInstance.setup;\n var wrapperComponent = contextInstance.wrapperComponent;\n var equalToMove = setup.velocityAnimation.equalToMove;\n var now = Date.now();\n if (lastMousePosition && velocityTime && wrapperComponent) {\n var sizeMultiplier = getSizeMultiplier(wrapperComponent, equalToMove);\n var distanceX = position.x - lastMousePosition.x;\n var distanceY = position.y - lastMousePosition.y;\n var velocityX = distanceX / sizeMultiplier;\n var velocityY = distanceY / sizeMultiplier;\n var interval = now - velocityTime;\n var speed = distanceX * distanceX + distanceY * distanceY;\n var velocity = Math.sqrt(speed) / interval;\n contextInstance.velocity = { velocityX: velocityX, velocityY: velocityY, total: velocity };\n }\n contextInstance.lastMousePosition = position;\n contextInstance.velocityTime = now;\n}\nfunction handleVelocityPanning(contextInstance) {\n var velocity = contextInstance.velocity, bounds = contextInstance.bounds, setup = contextInstance.setup, wrapperComponent = contextInstance.wrapperComponent;\n var isAllowed = isVelocityAllowed(contextInstance);\n if (!isAllowed || !velocity || !bounds || !wrapperComponent) {\n return;\n }\n var velocityX = velocity.velocityX, velocityY = velocity.velocityY, total = velocity.total;\n var maxPositionX = bounds.maxPositionX, minPositionX = bounds.minPositionX, maxPositionY = bounds.maxPositionY, minPositionY = bounds.minPositionY;\n var limitToBounds = setup.limitToBounds, alignmentAnimation = setup.alignmentAnimation;\n var zoomAnimation = setup.zoomAnimation, panning = setup.panning;\n var lockAxisY = panning.lockAxisY, lockAxisX = panning.lockAxisX;\n var animationType = zoomAnimation.animationType;\n var sizeX = alignmentAnimation.sizeX, sizeY = alignmentAnimation.sizeY, velocityAlignmentTime = alignmentAnimation.velocityAlignmentTime;\n var alignAnimationTime = velocityAlignmentTime;\n var moveAnimationTime = getVelocityMoveTime(contextInstance, total);\n var finalAnimationTime = Math.max(moveAnimationTime, alignAnimationTime);\n var paddingValueX = getPaddingValue(contextInstance, sizeX);\n var paddingValueY = getPaddingValue(contextInstance, sizeY);\n var paddingX = (paddingValueX * wrapperComponent.offsetWidth) / 100;\n var paddingY = (paddingValueY * wrapperComponent.offsetHeight) / 100;\n var maxTargetX = maxPositionX + paddingX;\n var minTargetX = minPositionX - paddingX;\n var maxTargetY = maxPositionY + paddingY;\n var minTargetY = minPositionY - paddingY;\n var startState = contextInstance.transformState;\n var startTime = new Date().getTime();\n handleSetupAnimation(contextInstance, animationType, finalAnimationTime, function (step) {\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n var frameTime = new Date().getTime() - startTime;\n var animationProgress = frameTime / alignAnimationTime;\n var alignAnimation = animations[alignmentAnimation.animationType];\n var alignStep = 1 - alignAnimation(Math.min(1, animationProgress));\n var customStep = 1 - step;\n var newPositionX = positionX + velocityX * customStep;\n var newPositionY = positionY + velocityY * customStep;\n var currentPositionX = getVelocityPosition(newPositionX, startState.positionX, positionX, lockAxisX, limitToBounds, minPositionX, maxPositionX, minTargetX, maxTargetX, alignStep);\n var currentPositionY = getVelocityPosition(newPositionY, startState.positionY, positionY, lockAxisY, limitToBounds, minPositionY, maxPositionY, minTargetY, maxTargetY, alignStep);\n if (positionX !== newPositionX || positionY !== newPositionY) {\n contextInstance.setTransformState(scale, currentPositionX, currentPositionY);\n }\n });\n}\n\nfunction handlePanningStart(contextInstance, event) {\n var scale = contextInstance.transformState.scale;\n handleCancelAnimation(contextInstance);\n handleCalculateBounds(contextInstance, scale);\n if (window.TouchEvent !== undefined && event instanceof TouchEvent) {\n handleTouchPanningSetup(contextInstance, event);\n }\n else {\n handlePanningSetup(contextInstance, event);\n }\n}\nfunction handleAlignToBounds(contextInstance, customAnimationTime) {\n var scale = contextInstance.transformState.scale;\n var _a = contextInstance.setup, minScale = _a.minScale, alignmentAnimation = _a.alignmentAnimation;\n var disabled = alignmentAnimation.disabled, sizeX = alignmentAnimation.sizeX, sizeY = alignmentAnimation.sizeY, animationTime = alignmentAnimation.animationTime, animationType = alignmentAnimation.animationType;\n var isDisabled = disabled || scale < minScale || (!sizeX && !sizeY);\n if (isDisabled)\n return;\n var targetState = handlePanToBounds(contextInstance);\n if (targetState) {\n animate(contextInstance, targetState, customAnimationTime !== null && customAnimationTime !== void 0 ? customAnimationTime : animationTime, animationType);\n }\n}\nfunction handlePanning(contextInstance, clientX, clientY) {\n var startCoords = contextInstance.startCoords, setup = contextInstance.setup;\n var _a = setup.alignmentAnimation, sizeX = _a.sizeX, sizeY = _a.sizeY;\n if (!startCoords)\n return;\n var _b = getPanningClientPosition(contextInstance, clientX, clientY), x = _b.x, y = _b.y;\n var paddingValueX = getPaddingValue(contextInstance, sizeX);\n var paddingValueY = getPaddingValue(contextInstance, sizeY);\n handleCalculateVelocity(contextInstance, { x: x, y: y });\n handleNewPosition(contextInstance, x, y, paddingValueX, paddingValueY);\n}\nfunction handlePanningEnd(contextInstance) {\n if (contextInstance.isPanning) {\n var velocityDisabled = contextInstance.setup.panning.velocityDisabled;\n var velocity = contextInstance.velocity, wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n contextInstance.isPanning = false;\n contextInstance.animate = false;\n contextInstance.animation = null;\n var wrapperRect = wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.getBoundingClientRect();\n var contentRect = contentComponent === null || contentComponent === void 0 ? void 0 : contentComponent.getBoundingClientRect();\n var wrapperWidth = (wrapperRect === null || wrapperRect === void 0 ? void 0 : wrapperRect.width) || 0;\n var wrapperHeight = (wrapperRect === null || wrapperRect === void 0 ? void 0 : wrapperRect.height) || 0;\n var contentWidth = (contentRect === null || contentRect === void 0 ? void 0 : contentRect.width) || 0;\n var contentHeight = (contentRect === null || contentRect === void 0 ? void 0 : contentRect.height) || 0;\n var isZoomed = wrapperWidth < contentWidth || wrapperHeight < contentHeight;\n var shouldAnimate = !velocityDisabled && velocity && (velocity === null || velocity === void 0 ? void 0 : velocity.total) > 0.1 && isZoomed;\n if (shouldAnimate) {\n handleVelocityPanning(contextInstance);\n }\n else {\n handleAlignToBounds(contextInstance);\n }\n }\n}\n\nfunction handleZoomToPoint(contextInstance, scale, mouseX, mouseY) {\n var _a = contextInstance.setup, minScale = _a.minScale, maxScale = _a.maxScale, limitToBounds = _a.limitToBounds;\n var newScale = checkZoomBounds(roundNumber(scale, 2), minScale, maxScale, 0, false);\n var bounds = handleCalculateBounds(contextInstance, newScale);\n var _b = handleCalculateZoomPositions(contextInstance, mouseX, mouseY, newScale, bounds, limitToBounds), x = _b.x, y = _b.y;\n return { scale: newScale, positionX: x, positionY: y };\n}\nfunction handleAlignToScaleBounds(contextInstance, mousePositionX, mousePositionY) {\n var scale = contextInstance.transformState.scale;\n var wrapperComponent = contextInstance.wrapperComponent;\n var _a = contextInstance.setup, minScale = _a.minScale, limitToBounds = _a.limitToBounds, zoomAnimation = _a.zoomAnimation;\n var disabled = zoomAnimation.disabled, animationTime = zoomAnimation.animationTime, animationType = zoomAnimation.animationType;\n var isDisabled = disabled || scale >= minScale;\n if (scale >= 1 || limitToBounds) {\n // fire fit to bounds animation\n handleAlignToBounds(contextInstance);\n }\n if (isDisabled || !wrapperComponent || !contextInstance.mounted)\n return;\n var mouseX = mousePositionX || wrapperComponent.offsetWidth / 2;\n var mouseY = mousePositionY || wrapperComponent.offsetHeight / 2;\n var targetState = handleZoomToPoint(contextInstance, minScale, mouseX, mouseY);\n if (targetState) {\n animate(contextInstance, targetState, animationTime, animationType);\n }\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nvar initialState = {\n previousScale: 1,\n scale: 1,\n positionX: 0,\n positionY: 0,\n};\nvar initialSetup = {\n disabled: false,\n minPositionX: null,\n maxPositionX: null,\n minPositionY: null,\n maxPositionY: null,\n minScale: 1,\n maxScale: 8,\n limitToBounds: true,\n centerZoomedOut: false,\n centerOnInit: false,\n disablePadding: false,\n smooth: true,\n wheel: {\n step: 0.2,\n disabled: false,\n smoothStep: 0.001,\n wheelDisabled: false,\n touchPadDisabled: false,\n activationKeys: [],\n excluded: [],\n },\n panning: {\n disabled: false,\n velocityDisabled: false,\n lockAxisX: false,\n lockAxisY: false,\n allowLeftClickPan: true,\n allowMiddleClickPan: true,\n allowRightClickPan: true,\n wheelPanning: false,\n activationKeys: [],\n excluded: [],\n },\n pinch: {\n step: 5,\n disabled: false,\n excluded: [],\n },\n doubleClick: {\n disabled: false,\n step: 0.7,\n mode: \"zoomIn\",\n animationType: \"easeOut\",\n animationTime: 200,\n excluded: [],\n },\n zoomAnimation: {\n disabled: false,\n size: 0.4,\n animationTime: 200,\n animationType: \"easeOut\",\n },\n alignmentAnimation: {\n disabled: false,\n sizeX: 100,\n sizeY: 100,\n animationTime: 200,\n velocityAlignmentTime: 400,\n animationType: \"easeOut\",\n },\n velocityAnimation: {\n disabled: false,\n sensitivity: 1,\n animationTime: 400,\n animationType: \"easeOut\",\n equalToMove: true,\n },\n};\nvar baseClasses = {\n wrapperClass: \"react-transform-wrapper\",\n contentClass: \"react-transform-component\",\n};\n\nvar createState = function (props) {\n var _a, _b, _c, _d;\n return {\n previousScale: (_a = props.initialScale) !== null && _a !== void 0 ? _a : initialState.scale,\n scale: (_b = props.initialScale) !== null && _b !== void 0 ? _b : initialState.scale,\n positionX: (_c = props.initialPositionX) !== null && _c !== void 0 ? _c : initialState.positionX,\n positionY: (_d = props.initialPositionY) !== null && _d !== void 0 ? _d : initialState.positionY,\n };\n};\nvar createSetup = function (props) {\n var newSetup = __assign({}, initialSetup);\n Object.keys(props).forEach(function (key) {\n var validValue = typeof props[key] !== \"undefined\";\n var validParameter = typeof initialSetup[key] !== \"undefined\";\n if (validParameter && validValue) {\n var dataType = Object.prototype.toString.call(initialSetup[key]);\n var isObject = dataType === \"[object Object]\";\n var isArray = dataType === \"[object Array]\";\n if (isObject) {\n newSetup[key] = __assign(__assign({}, initialSetup[key]), props[key]);\n }\n else if (isArray) {\n newSetup[key] = __spreadArray(__spreadArray([], initialSetup[key], true), props[key], true);\n }\n else {\n newSetup[key] = props[key];\n }\n }\n });\n return newSetup;\n};\n\nvar handleCalculateButtonZoom = function (contextInstance, delta, step) {\n var scale = contextInstance.transformState.scale;\n var wrapperComponent = contextInstance.wrapperComponent, setup = contextInstance.setup;\n var maxScale = setup.maxScale, minScale = setup.minScale, zoomAnimation = setup.zoomAnimation, smooth = setup.smooth;\n var size = zoomAnimation.size;\n if (!wrapperComponent) {\n throw new Error(\"Wrapper is not mounted\");\n }\n var targetScale = smooth\n ? scale * Math.exp(delta * step)\n : scale + delta * step;\n var newScale = checkZoomBounds(roundNumber(targetScale, 3), minScale, maxScale, size, false);\n return newScale;\n};\nfunction handleZoomToViewCenter(contextInstance, delta, step, animationTime, animationType) {\n var wrapperComponent = contextInstance.wrapperComponent;\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n if (!wrapperComponent)\n return console.error(\"No WrapperComponent found\");\n var wrapperWidth = wrapperComponent.offsetWidth;\n var wrapperHeight = wrapperComponent.offsetHeight;\n var mouseX = (wrapperWidth / 2 - positionX) / scale;\n var mouseY = (wrapperHeight / 2 - positionY) / scale;\n var newScale = handleCalculateButtonZoom(contextInstance, delta, step);\n var targetState = handleZoomToPoint(contextInstance, newScale, mouseX, mouseY);\n if (!targetState) {\n return console.error(\"Error during zoom event. New transformation state was not calculated.\");\n }\n animate(contextInstance, targetState, animationTime, animationType);\n}\nfunction resetTransformations(contextInstance, animationTime, animationType, onResetTransformation) {\n var setup = contextInstance.setup, wrapperComponent = contextInstance.wrapperComponent;\n var limitToBounds = setup.limitToBounds;\n var initialTransformation = createState(contextInstance.props);\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n if (!wrapperComponent)\n return;\n var newBounds = calculateBounds(contextInstance, initialTransformation.scale);\n var boundedPositions = getMouseBoundedPosition(initialTransformation.positionX, initialTransformation.positionY, newBounds, limitToBounds, 0, 0, wrapperComponent);\n var newState = {\n scale: initialTransformation.scale,\n positionX: boundedPositions.x,\n positionY: boundedPositions.y,\n };\n if (scale === initialTransformation.scale &&\n positionX === initialTransformation.positionX &&\n positionY === initialTransformation.positionY) {\n return;\n }\n onResetTransformation === null || onResetTransformation === void 0 ? void 0 : onResetTransformation();\n animate(contextInstance, newState, animationTime, animationType);\n}\nfunction getOffset(element, wrapper, content, state) {\n var offset = element.getBoundingClientRect();\n var wrapperOffset = wrapper.getBoundingClientRect();\n var contentOffset = content.getBoundingClientRect();\n var xOff = wrapperOffset.x * state.scale;\n var yOff = wrapperOffset.y * state.scale;\n return {\n x: (offset.x - contentOffset.x + xOff) / state.scale,\n y: (offset.y - contentOffset.y + yOff) / state.scale,\n };\n}\nfunction calculateZoomToNode(contextInstance, node, customZoom) {\n var wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent, transformState = contextInstance.transformState;\n var _a = contextInstance.setup, limitToBounds = _a.limitToBounds, minScale = _a.minScale, maxScale = _a.maxScale;\n if (!wrapperComponent || !contentComponent)\n return transformState;\n var wrapperRect = wrapperComponent.getBoundingClientRect();\n var nodeRect = node.getBoundingClientRect();\n var nodeOffset = getOffset(node, wrapperComponent, contentComponent, transformState);\n var nodeLeft = nodeOffset.x;\n var nodeTop = nodeOffset.y;\n var nodeWidth = nodeRect.width / transformState.scale;\n var nodeHeight = nodeRect.height / transformState.scale;\n var scaleX = wrapperComponent.offsetWidth / nodeWidth;\n var scaleY = wrapperComponent.offsetHeight / nodeHeight;\n var newScale = checkZoomBounds(customZoom || Math.min(scaleX, scaleY), minScale, maxScale, 0, false);\n var offsetX = (wrapperRect.width - nodeWidth * newScale) / 2;\n var offsetY = (wrapperRect.height - nodeHeight * newScale) / 2;\n var newPositionX = (wrapperRect.left - nodeLeft) * newScale + offsetX;\n var newPositionY = (wrapperRect.top - nodeTop) * newScale + offsetY;\n var bounds = calculateBounds(contextInstance, newScale);\n var _b = getMouseBoundedPosition(newPositionX, newPositionY, bounds, limitToBounds, 0, 0, wrapperComponent), x = _b.x, y = _b.y;\n return { positionX: x, positionY: y, scale: newScale };\n}\n\nvar zoomIn = function (contextInstance) {\n return function (step, animationTime, animationType) {\n if (step === void 0) { step = 0.5; }\n if (animationTime === void 0) { animationTime = 300; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n handleZoomToViewCenter(contextInstance, 1, step, animationTime, animationType);\n };\n};\nvar zoomOut = function (contextInstance) {\n return function (step, animationTime, animationType) {\n if (step === void 0) { step = 0.5; }\n if (animationTime === void 0) { animationTime = 300; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n handleZoomToViewCenter(contextInstance, -1, step, animationTime, animationType);\n };\n};\nvar setTransform = function (contextInstance) {\n return function (newPositionX, newPositionY, newScale, animationTime, animationType) {\n if (animationTime === void 0) { animationTime = 300; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY, scale = _a.scale;\n var wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n var disabled = contextInstance.setup.disabled;\n if (disabled || !wrapperComponent || !contentComponent)\n return;\n var targetState = {\n positionX: Number.isNaN(newPositionX) ? positionX : newPositionX,\n positionY: Number.isNaN(newPositionY) ? positionY : newPositionY,\n scale: Number.isNaN(newScale) ? scale : newScale,\n };\n animate(contextInstance, targetState, animationTime, animationType);\n };\n};\nvar resetTransform = function (contextInstance) {\n return function (animationTime, animationType) {\n if (animationTime === void 0) { animationTime = 200; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n resetTransformations(contextInstance, animationTime, animationType);\n };\n};\nvar centerView = function (contextInstance) {\n return function (scale, animationTime, animationType) {\n if (animationTime === void 0) { animationTime = 200; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n var transformState = contextInstance.transformState, wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n if (wrapperComponent && contentComponent) {\n var targetState = getCenterPosition(scale || transformState.scale, wrapperComponent, contentComponent);\n animate(contextInstance, targetState, animationTime, animationType);\n }\n };\n};\nvar zoomToElement = function (contextInstance) {\n return function (node, scale, animationTime, animationType) {\n if (animationTime === void 0) { animationTime = 600; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n handleCancelAnimation(contextInstance);\n var wrapperComponent = contextInstance.wrapperComponent;\n var target = typeof node === \"string\" ? document.getElementById(node) : node;\n if (wrapperComponent && target && wrapperComponent.contains(target)) {\n var targetState = calculateZoomToNode(contextInstance, target, scale);\n animate(contextInstance, targetState, animationTime, animationType);\n }\n };\n};\n\nvar getControls = function (contextInstance) {\n return {\n instance: contextInstance,\n zoomIn: zoomIn(contextInstance),\n zoomOut: zoomOut(contextInstance),\n setTransform: setTransform(contextInstance),\n resetTransform: resetTransform(contextInstance),\n centerView: centerView(contextInstance),\n zoomToElement: zoomToElement(contextInstance),\n };\n};\nvar getState = function (contextInstance) {\n return {\n instance: contextInstance,\n state: contextInstance.transformState,\n };\n};\nvar getContext = function (contextInstance) {\n var ref = {};\n Object.assign(ref, getState(contextInstance));\n Object.assign(ref, getControls(contextInstance));\n return ref;\n};\n\n// We want to make event listeners non-passive, and to do so have to check\n// that browsers support EventListenerOptions in the first place.\n// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\nvar passiveSupported = false;\nfunction makePassiveEventOption() {\n try {\n var options = {\n get passive() {\n // This function will be called when the browser\n // attempts to access the passive property.\n passiveSupported = true;\n return false;\n },\n };\n return options;\n }\n catch (err) {\n passiveSupported = false;\n return passiveSupported;\n }\n}\n\nvar matchPrefix = \".\".concat(baseClasses.wrapperClass);\nvar isExcludedNode = function (node, excluded) {\n return excluded.some(function (exclude) {\n return node.matches(\"\".concat(matchPrefix, \" \").concat(exclude, \", \").concat(matchPrefix, \" .\").concat(exclude, \", \").concat(matchPrefix, \" \").concat(exclude, \" *, \").concat(matchPrefix, \" .\").concat(exclude, \" *\"));\n });\n};\nvar cancelTimeout = function (timeout) {\n if (timeout) {\n clearTimeout(timeout);\n }\n};\n\nvar getTransformStyles = function (x, y, scale) {\n // Standard translate prevents blurry svg on the safari\n return \"translate(\".concat(x, \"px, \").concat(y, \"px) scale(\").concat(scale, \")\");\n};\nvar getMatrixTransformStyles = function (x, y, scale) {\n // The shorthand for matrix does not work for Safari hence the need to explicitly use matrix3d\n // Refer to https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix\n var a = scale;\n var b = 0;\n var c = 0;\n var d = scale;\n var tx = x;\n var ty = y;\n return \"matrix3d(\".concat(a, \", \").concat(b, \", 0, 0, \").concat(c, \", \").concat(d, \", 0, 0, 0, 0, 1, 0, \").concat(tx, \", \").concat(ty, \", 0, 1)\");\n};\nvar getCenterPosition = function (scale, wrapperComponent, contentComponent) {\n var contentWidth = contentComponent.offsetWidth * scale;\n var contentHeight = contentComponent.offsetHeight * scale;\n var centerPositionX = (wrapperComponent.offsetWidth - contentWidth) / 2;\n var centerPositionY = (wrapperComponent.offsetHeight - contentHeight) / 2;\n return {\n scale: scale,\n positionX: centerPositionX,\n positionY: centerPositionY,\n };\n};\n\nfunction mergeRefs(refs) {\n return function (value) {\n refs.forEach(function (ref) {\n if (typeof ref === \"function\") {\n ref(value);\n }\n else if (ref != null) {\n ref.current = value;\n }\n });\n };\n}\n\nvar isWheelAllowed = function (contextInstance, event) {\n var _a = contextInstance.setup.wheel, disabled = _a.disabled, wheelDisabled = _a.wheelDisabled, touchPadDisabled = _a.touchPadDisabled, excluded = _a.excluded;\n var isInitialized = contextInstance.isInitialized, isPanning = contextInstance.isPanning;\n var target = event.target;\n var isAllowed = isInitialized && !isPanning && !disabled && target;\n if (!isAllowed)\n return false;\n // Event ctrlKey detects if touchpad action is executing wheel or pinch gesture\n if (wheelDisabled && !event.ctrlKey)\n return false;\n if (touchPadDisabled && event.ctrlKey)\n return false;\n var isExcluded = isExcludedNode(target, excluded);\n if (isExcluded)\n return false;\n return true;\n};\nvar getDeltaY = function (event) {\n if (event) {\n return event.deltaY < 0 ? 1 : -1;\n }\n return 0;\n};\nfunction getDelta(event, customDelta) {\n var deltaY = getDeltaY(event);\n var delta = checkIsNumber(customDelta, deltaY);\n return delta;\n}\nfunction getMousePosition(event, contentComponent, scale) {\n var contentRect = contentComponent.getBoundingClientRect();\n var mouseX = 0;\n var mouseY = 0;\n if (\"clientX\" in event) {\n // mouse position x, y over wrapper component\n mouseX = (event.clientX - contentRect.left) / scale;\n mouseY = (event.clientY - contentRect.top) / scale;\n }\n else {\n var touch = event.touches[0];\n mouseX = (touch.clientX - contentRect.left) / scale;\n mouseY = (touch.clientY - contentRect.top) / scale;\n }\n if (Number.isNaN(mouseX) || Number.isNaN(mouseY))\n console.error(\"No mouse or touch offset found\");\n return {\n x: mouseX,\n y: mouseY,\n };\n}\nvar handleCalculateWheelZoom = function (contextInstance, delta, step, disable, getTarget) {\n var scale = contextInstance.transformState.scale;\n var wrapperComponent = contextInstance.wrapperComponent, setup = contextInstance.setup;\n var maxScale = setup.maxScale, minScale = setup.minScale, zoomAnimation = setup.zoomAnimation, disablePadding = setup.disablePadding;\n var size = zoomAnimation.size, disabled = zoomAnimation.disabled;\n if (!wrapperComponent) {\n throw new Error(\"Wrapper is not mounted\");\n }\n var targetScale = scale + delta * step;\n if (getTarget)\n return targetScale;\n var paddingEnabled = disable ? false : !disabled;\n var newScale = checkZoomBounds(roundNumber(targetScale, 3), minScale, maxScale, size, paddingEnabled && !disablePadding);\n return newScale;\n};\nvar handleWheelZoomStop = function (contextInstance, event) {\n var previousWheelEvent = contextInstance.previousWheelEvent;\n var scale = contextInstance.transformState.scale;\n var _a = contextInstance.setup, maxScale = _a.maxScale, minScale = _a.minScale;\n if (!previousWheelEvent)\n return false;\n if (scale < maxScale || scale > minScale)\n return true;\n if (Math.sign(previousWheelEvent.deltaY) !== Math.sign(event.deltaY))\n return true;\n if (previousWheelEvent.deltaY > 0 && previousWheelEvent.deltaY < event.deltaY)\n return true;\n if (previousWheelEvent.deltaY < 0 && previousWheelEvent.deltaY > event.deltaY)\n return true;\n if (Math.sign(previousWheelEvent.deltaY) !== Math.sign(event.deltaY))\n return true;\n return false;\n};\n\nvar isPinchStartAllowed = function (contextInstance, event) {\n var _a = contextInstance.setup.pinch, disabled = _a.disabled, excluded = _a.excluded;\n var isInitialized = contextInstance.isInitialized;\n var target = event.target;\n var isAllowed = isInitialized && !disabled && target;\n if (!isAllowed)\n return false;\n var isExcluded = isExcludedNode(target, excluded);\n if (isExcluded)\n return false;\n return true;\n};\nvar isPinchAllowed = function (contextInstance) {\n var disabled = contextInstance.setup.pinch.disabled;\n var isInitialized = contextInstance.isInitialized, pinchStartDistance = contextInstance.pinchStartDistance;\n var isAllowed = isInitialized && !disabled && pinchStartDistance;\n if (!isAllowed)\n return false;\n return true;\n};\nvar calculateTouchMidPoint = function (event, scale, contentComponent) {\n var contentRect = contentComponent.getBoundingClientRect();\n var touches = event.touches;\n var firstPointX = roundNumber(touches[0].clientX - contentRect.left, 5);\n var firstPointY = roundNumber(touches[0].clientY - contentRect.top, 5);\n var secondPointX = roundNumber(touches[1].clientX - contentRect.left, 5);\n var secondPointY = roundNumber(touches[1].clientY - contentRect.top, 5);\n return {\n x: (firstPointX + secondPointX) / 2 / scale,\n y: (firstPointY + secondPointY) / 2 / scale,\n };\n};\nvar getTouchDistance = function (event) {\n return Math.sqrt(Math.pow((event.touches[0].pageX - event.touches[1].pageX), 2) +\n Math.pow((event.touches[0].pageY - event.touches[1].pageY), 2));\n};\nvar calculatePinchZoom = function (contextInstance, currentDistance) {\n var pinchStartScale = contextInstance.pinchStartScale, pinchStartDistance = contextInstance.pinchStartDistance, setup = contextInstance.setup;\n var maxScale = setup.maxScale, minScale = setup.minScale, zoomAnimation = setup.zoomAnimation, disablePadding = setup.disablePadding;\n var size = zoomAnimation.size, disabled = zoomAnimation.disabled;\n if (!pinchStartScale || pinchStartDistance === null || !currentDistance) {\n throw new Error(\"Pinch touches distance was not provided\");\n }\n if (currentDistance < 0) {\n return contextInstance.transformState.scale;\n }\n var touchProportion = currentDistance / pinchStartDistance;\n var scaleDifference = touchProportion * pinchStartScale;\n return checkZoomBounds(roundNumber(scaleDifference, 2), minScale, maxScale, size, !disabled && !disablePadding);\n};\n\nvar wheelStopEventTime = 160;\nvar wheelAnimationTime = 100;\nvar handleWheelStart = function (contextInstance, event) {\n var _a = contextInstance.props, onWheelStart = _a.onWheelStart, onZoomStart = _a.onZoomStart;\n if (!contextInstance.wheelStopEventTimer) {\n handleCancelAnimation(contextInstance);\n handleCallback(getContext(contextInstance), event, onWheelStart);\n handleCallback(getContext(contextInstance), event, onZoomStart);\n }\n};\nvar handleWheelZoom = function (contextInstance, event) {\n var _a = contextInstance.props, onWheel = _a.onWheel, onZoom = _a.onZoom;\n var contentComponent = contextInstance.contentComponent, setup = contextInstance.setup, transformState = contextInstance.transformState;\n var scale = transformState.scale;\n var limitToBounds = setup.limitToBounds, centerZoomedOut = setup.centerZoomedOut, zoomAnimation = setup.zoomAnimation, wheel = setup.wheel, disablePadding = setup.disablePadding, smooth = setup.smooth;\n var size = zoomAnimation.size, disabled = zoomAnimation.disabled;\n var step = wheel.step, smoothStep = wheel.smoothStep;\n if (!contentComponent) {\n throw new Error(\"Component not mounted\");\n }\n event.preventDefault();\n event.stopPropagation();\n var delta = getDelta(event, null);\n var zoomStep = smooth ? smoothStep * Math.abs(event.deltaY) : step;\n var newScale = handleCalculateWheelZoom(contextInstance, delta, zoomStep, !event.ctrlKey);\n // if scale not change\n if (scale === newScale)\n return;\n var bounds = handleCalculateBounds(contextInstance, newScale);\n var mousePosition = getMousePosition(event, contentComponent, scale);\n var isPaddingDisabled = disabled || size === 0 || centerZoomedOut || disablePadding;\n var isLimitedToBounds = limitToBounds && isPaddingDisabled;\n var _b = handleCalculateZoomPositions(contextInstance, mousePosition.x, mousePosition.y, newScale, bounds, isLimitedToBounds), x = _b.x, y = _b.y;\n contextInstance.previousWheelEvent = event;\n contextInstance.setTransformState(newScale, x, y);\n handleCallback(getContext(contextInstance), event, onWheel);\n handleCallback(getContext(contextInstance), event, onZoom);\n};\nvar handleWheelStop = function (contextInstance, event) {\n var _a = contextInstance.props, onWheelStop = _a.onWheelStop, onZoomStop = _a.onZoomStop;\n // fire animation\n cancelTimeout(contextInstance.wheelAnimationTimer);\n contextInstance.wheelAnimationTimer = setTimeout(function () {\n if (!contextInstance.mounted)\n return;\n handleAlignToScaleBounds(contextInstance, event.x, event.y);\n contextInstance.wheelAnimationTimer = null;\n }, wheelAnimationTime);\n // Wheel stop event\n var hasStoppedZooming = handleWheelZoomStop(contextInstance, event);\n if (hasStoppedZooming) {\n cancelTimeout(contextInstance.wheelStopEventTimer);\n contextInstance.wheelStopEventTimer = setTimeout(function () {\n if (!contextInstance.mounted)\n return;\n contextInstance.wheelStopEventTimer = null;\n handleCallback(getContext(contextInstance), event, onWheelStop);\n handleCallback(getContext(contextInstance), event, onZoomStop);\n }, wheelStopEventTime);\n }\n};\n\nvar getTouchCenter = function (event) {\n var totalX = 0;\n var totalY = 0;\n // Sum up the positions of all touches\n for (var i = 0; i < 2; i += 1) {\n totalX += event.touches[i].clientX;\n totalY += event.touches[i].clientY;\n }\n // Calculate the average position\n var x = totalX / 2;\n var y = totalY / 2;\n return { x: x, y: y };\n};\nvar handlePinchStart = function (contextInstance, event) {\n var distance = getTouchDistance(event);\n contextInstance.pinchStartDistance = distance;\n contextInstance.lastDistance = distance;\n contextInstance.pinchStartScale = contextInstance.transformState.scale;\n contextInstance.isPanning = false;\n var center = getTouchCenter(event);\n contextInstance.pinchLastCenterX = center.x;\n contextInstance.pinchLastCenterY = center.y;\n handleCancelAnimation(contextInstance);\n};\nvar handlePinchZoom = function (contextInstance, event) {\n var contentComponent = contextInstance.contentComponent, pinchStartDistance = contextInstance.pinchStartDistance, wrapperComponent = contextInstance.wrapperComponent;\n var scale = contextInstance.transformState.scale;\n var _a = contextInstance.setup, limitToBounds = _a.limitToBounds, centerZoomedOut = _a.centerZoomedOut, zoomAnimation = _a.zoomAnimation, alignmentAnimation = _a.alignmentAnimation;\n var disabled = zoomAnimation.disabled, size = zoomAnimation.size;\n // if one finger starts from outside of wrapper\n if (pinchStartDistance === null || !contentComponent)\n return;\n var midPoint = calculateTouchMidPoint(event, scale, contentComponent);\n // if touches goes off of the wrapper element\n if (!Number.isFinite(midPoint.x) || !Number.isFinite(midPoint.y))\n return;\n var currentDistance = getTouchDistance(event);\n var newScale = calculatePinchZoom(contextInstance, currentDistance);\n var center = getTouchCenter(event);\n // pan should be scale invariant.\n var panX = center.x - (contextInstance.pinchLastCenterX || 0);\n var panY = center.y - (contextInstance.pinchLastCenterY || 0);\n if (newScale === scale && panX === 0 && panY === 0)\n return;\n contextInstance.pinchLastCenterX = center.x;\n contextInstance.pinchLastCenterY = center.y;\n var bounds = handleCalculateBounds(contextInstance, newScale);\n var isPaddingDisabled = disabled || size === 0 || centerZoomedOut;\n var isLimitedToBounds = limitToBounds && isPaddingDisabled;\n var _b = handleCalculateZoomPositions(contextInstance, midPoint.x, midPoint.y, newScale, bounds, isLimitedToBounds), x = _b.x, y = _b.y;\n contextInstance.pinchMidpoint = midPoint;\n contextInstance.lastDistance = currentDistance;\n var sizeX = alignmentAnimation.sizeX, sizeY = alignmentAnimation.sizeY;\n var paddingValueX = getPaddingValue(contextInstance, sizeX);\n var paddingValueY = getPaddingValue(contextInstance, sizeY);\n var newPositionX = x + panX;\n var newPositionY = y + panY;\n var _c = getMouseBoundedPosition(newPositionX, newPositionY, bounds, limitToBounds, paddingValueX, paddingValueY, wrapperComponent), finalX = _c.x, finalY = _c.y;\n contextInstance.setTransformState(newScale, finalX, finalY);\n};\nvar handlePinchStop = function (contextInstance) {\n var pinchMidpoint = contextInstance.pinchMidpoint;\n contextInstance.velocity = null;\n contextInstance.lastDistance = null;\n contextInstance.pinchMidpoint = null;\n contextInstance.pinchStartScale = null;\n contextInstance.pinchStartDistance = null;\n handleAlignToScaleBounds(contextInstance, pinchMidpoint === null || pinchMidpoint === void 0 ? void 0 : pinchMidpoint.x, pinchMidpoint === null || pinchMidpoint === void 0 ? void 0 : pinchMidpoint.y);\n};\n\nvar handleDoubleClickStop = function (contextInstance, event) {\n var onZoomStop = contextInstance.props.onZoomStop;\n var animationTime = contextInstance.setup.doubleClick.animationTime;\n cancelTimeout(contextInstance.doubleClickStopEventTimer);\n contextInstance.doubleClickStopEventTimer = setTimeout(function () {\n contextInstance.doubleClickStopEventTimer = null;\n handleCallback(getContext(contextInstance), event, onZoomStop);\n }, animationTime);\n};\nvar handleDoubleClickResetMode = function (contextInstance, event) {\n var _a = contextInstance.props, onZoomStart = _a.onZoomStart, onZoom = _a.onZoom;\n var _b = contextInstance.setup.doubleClick, animationTime = _b.animationTime, animationType = _b.animationType;\n handleCallback(getContext(contextInstance), event, onZoomStart);\n resetTransformations(contextInstance, animationTime, animationType, function () {\n return handleCallback(getContext(contextInstance), event, onZoom);\n });\n handleDoubleClickStop(contextInstance, event);\n};\nfunction getDoubleClickScale(mode, scale) {\n if (mode === \"toggle\") {\n return scale === 1 ? 1 : -1;\n }\n return mode === \"zoomOut\" ? -1 : 1;\n}\nfunction handleDoubleClick(contextInstance, event) {\n var setup = contextInstance.setup, doubleClickStopEventTimer = contextInstance.doubleClickStopEventTimer, transformState = contextInstance.transformState, contentComponent = contextInstance.contentComponent;\n var scale = transformState.scale;\n var _a = contextInstance.props, onZoomStart = _a.onZoomStart, onZoom = _a.onZoom;\n var _b = setup.doubleClick, disabled = _b.disabled, mode = _b.mode, step = _b.step, animationTime = _b.animationTime, animationType = _b.animationType;\n if (disabled)\n return;\n if (doubleClickStopEventTimer)\n return;\n if (mode === \"reset\") {\n return handleDoubleClickResetMode(contextInstance, event);\n }\n if (!contentComponent)\n return console.error(\"No ContentComponent found\");\n var delta = getDoubleClickScale(mode, contextInstance.transformState.scale);\n var newScale = handleCalculateButtonZoom(contextInstance, delta, step);\n // stop execution when scale didn't change\n if (scale === newScale)\n return;\n handleCallback(getContext(contextInstance), event, onZoomStart);\n var mousePosition = getMousePosition(event, contentComponent, scale);\n var targetState = handleZoomToPoint(contextInstance, newScale, mousePosition.x, mousePosition.y);\n if (!targetState) {\n return console.error(\"Error during zoom event. New transformation state was not calculated.\");\n }\n handleCallback(getContext(contextInstance), event, onZoom);\n animate(contextInstance, targetState, animationTime, animationType);\n handleDoubleClickStop(contextInstance, event);\n}\nvar isDoubleClickAllowed = function (contextInstance, event) {\n var isInitialized = contextInstance.isInitialized, setup = contextInstance.setup, wrapperComponent = contextInstance.wrapperComponent;\n var _a = setup.doubleClick, disabled = _a.disabled, excluded = _a.excluded;\n var target = event.target;\n var isWrapperChild = wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.contains(target);\n var isAllowed = isInitialized && target && isWrapperChild && !disabled;\n if (!isAllowed)\n return false;\n var isExcluded = isExcludedNode(target, excluded);\n if (isExcluded)\n return false;\n return true;\n};\n\nvar ZoomPanPinch = /** @class */ (function () {\n function ZoomPanPinch(props) {\n var _this = this;\n this.mounted = true;\n this.pinchLastCenterX = null;\n this.pinchLastCenterY = null;\n this.onChangeCallbacks = new Set();\n this.onInitCallbacks = new Set();\n // Components\n this.wrapperComponent = null;\n this.contentComponent = null;\n // Initialization\n this.isInitialized = false;\n this.bounds = null;\n // wheel helpers\n this.previousWheelEvent = null;\n this.wheelStopEventTimer = null;\n this.wheelAnimationTimer = null;\n // panning helpers\n this.isPanning = false;\n this.isWheelPanning = false;\n this.startCoords = null;\n this.lastTouch = null;\n // pinch helpers\n this.distance = null;\n this.lastDistance = null;\n this.pinchStartDistance = null;\n this.pinchStartScale = null;\n this.pinchMidpoint = null;\n // double click helpers\n this.doubleClickStopEventTimer = null;\n // velocity helpers\n this.velocity = null;\n this.velocityTime = null;\n this.lastMousePosition = null;\n // animations helpers\n this.animate = false;\n this.animation = null;\n this.maxBounds = null;\n // key press\n this.pressedKeys = {};\n this.mount = function () {\n _this.initializeWindowEvents();\n };\n this.unmount = function () {\n _this.cleanupWindowEvents();\n };\n this.update = function (newProps) {\n _this.props = newProps;\n handleCalculateBounds(_this, _this.transformState.scale);\n _this.setup = createSetup(newProps);\n };\n this.initializeWindowEvents = function () {\n var _a, _b;\n var passive = makePassiveEventOption();\n var currentDocument = (_a = _this.wrapperComponent) === null || _a === void 0 ? void 0 : _a.ownerDocument;\n var currentWindow = currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.defaultView;\n (_b = _this.wrapperComponent) === null || _b === void 0 ? void 0 : _b.addEventListener(\"wheel\", _this.onWheelPanning, passive);\n // Panning on window to allow panning when mouse is out of component wrapper\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"mousedown\", _this.onPanningStart, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"mousemove\", _this.onPanning, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"mouseup\", _this.onPanningStop, passive);\n currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.addEventListener(\"mouseleave\", _this.clearPanning, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"keyup\", _this.setKeyUnPressed, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"keydown\", _this.setKeyPressed, passive);\n };\n this.cleanupWindowEvents = function () {\n var _a, _b;\n var passive = makePassiveEventOption();\n var currentDocument = (_a = _this.wrapperComponent) === null || _a === void 0 ? void 0 : _a.ownerDocument;\n var currentWindow = currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.defaultView;\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"mousedown\", _this.onPanningStart, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"mousemove\", _this.onPanning, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"mouseup\", _this.onPanningStop, passive);\n currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.removeEventListener(\"mouseleave\", _this.clearPanning, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"keyup\", _this.setKeyUnPressed, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"keydown\", _this.setKeyPressed, passive);\n document.removeEventListener(\"mouseleave\", _this.clearPanning, passive);\n handleCancelAnimation(_this);\n (_b = _this.observer) === null || _b === void 0 ? void 0 : _b.disconnect();\n };\n this.handleInitializeWrapperEvents = function (wrapper) {\n // Zooming events on wrapper\n var passive = makePassiveEventOption();\n wrapper.addEventListener(\"wheel\", _this.onWheelZoom, passive);\n wrapper.addEventListener(\"dblclick\", _this.onDoubleClick, passive);\n wrapper.addEventListener(\"touchstart\", _this.onTouchPanningStart, passive);\n wrapper.addEventListener(\"touchmove\", _this.onTouchPanning, passive);\n wrapper.addEventListener(\"touchend\", _this.onTouchPanningStop, passive);\n };\n this.handleInitialize = function (wrapper, contentComponent) {\n var isCentered = false;\n var centerOnInit = _this.setup.centerOnInit;\n var hasTarget = function (entries, target) {\n // eslint-disable-next-line no-restricted-syntax\n for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n var entry = entries_1[_i];\n if (entry.target === target) {\n return true;\n }\n }\n return false;\n };\n _this.applyTransformation();\n _this.onInitCallbacks.forEach(function (callback) {\n callback(getContext(_this));\n });\n _this.observer = new ResizeObserver(function (entries) {\n if (hasTarget(entries, wrapper) || hasTarget(entries, contentComponent)) {\n if (centerOnInit && !isCentered) {\n var currentWidth = contentComponent.offsetWidth;\n var currentHeight = contentComponent.offsetHeight;\n if (currentWidth > 0 || currentHeight > 0) {\n isCentered = true;\n _this.setCenter();\n }\n }\n else {\n handleCancelAnimation(_this);\n handleCalculateBounds(_this, _this.transformState.scale);\n handleAlignToBounds(_this, 0);\n }\n }\n });\n // Start observing the target node for configured mutations\n _this.observer.observe(wrapper);\n _this.observer.observe(contentComponent);\n };\n /// ///////\n // Zoom\n /// ///////\n this.onWheelZoom = function (event) {\n var disabled = _this.setup.disabled;\n if (disabled)\n return;\n var isAllowed = isWheelAllowed(_this, event);\n if (!isAllowed)\n return;\n var keysPressed = _this.isPressingKeys(_this.setup.wheel.activationKeys);\n if (!keysPressed)\n return;\n handleWheelStart(_this, event);\n handleWheelZoom(_this, event);\n handleWheelStop(_this, event);\n };\n /// ///////\n // Pan\n /// ///////\n this.onWheelPanning = function (event) {\n var _a = _this.setup, disabled = _a.disabled, wheel = _a.wheel, panning = _a.panning;\n if (!_this.wrapperComponent ||\n !_this.contentComponent ||\n disabled ||\n !wheel.wheelDisabled ||\n panning.disabled ||\n !panning.wheelPanning ||\n event.ctrlKey) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n var _b = _this.transformState, positionX = _b.positionX, positionY = _b.positionY;\n var mouseX = positionX - event.deltaX;\n var mouseY = positionY - event.deltaY;\n var newPositionX = panning.lockAxisX ? positionX : mouseX;\n var newPositionY = panning.lockAxisY ? positionY : mouseY;\n var _c = _this.setup.alignmentAnimation, sizeX = _c.sizeX, sizeY = _c.sizeY;\n var paddingValueX = getPaddingValue(_this, sizeX);\n var paddingValueY = getPaddingValue(_this, sizeY);\n if (newPositionX === positionX && newPositionY === positionY)\n return;\n handleNewPosition(_this, newPositionX, newPositionY, paddingValueX, paddingValueY);\n };\n this.onPanningStart = function (event) {\n var disabled = _this.setup.disabled;\n var onPanningStart = _this.props.onPanningStart;\n if (disabled)\n return;\n var isAllowed = isPanningStartAllowed(_this, event);\n if (!isAllowed)\n return;\n var keysPressed = _this.isPressingKeys(_this.setup.panning.activationKeys);\n if (!keysPressed)\n return;\n if (event.button === 0 && !_this.setup.panning.allowLeftClickPan)\n return;\n if (event.button === 1 && !_this.setup.panning.allowMiddleClickPan)\n return;\n if (event.button === 2 && !_this.setup.panning.allowRightClickPan)\n return;\n event.preventDefault();\n event.stopPropagation();\n handleCancelAnimation(_this);\n handlePanningStart(_this, event);\n handleCallback(getContext(_this), event, onPanningStart);\n };\n this.onPanning = function (event) {\n var disabled = _this.setup.disabled;\n var onPanning = _this.props.onPanning;\n if (disabled)\n return;\n var isAllowed = isPanningAllowed(_this);\n if (!isAllowed)\n return;\n var keysPressed = _this.isPressingKeys(_this.setup.panning.activationKeys);\n if (!keysPressed)\n return;\n event.preventDefault();\n event.stopPropagation();\n handlePanning(_this, event.clientX, event.clientY);\n handleCallback(getContext(_this), event, onPanning);\n };\n this.onPanningStop = function (event) {\n var onPanningStop = _this.props.onPanningStop;\n if (_this.isPanning) {\n handlePanningEnd(_this);\n handleCallback(getContext(_this), event, onPanningStop);\n }\n };\n /// ///////\n // Pinch\n /// ///////\n this.onPinchStart = function (event) {\n var disabled = _this.setup.disabled;\n var _a = _this.props, onPinchingStart = _a.onPinchingStart, onZoomStart = _a.onZoomStart;\n if (disabled)\n return;\n var isAllowed = isPinchStartAllowed(_this, event);\n if (!isAllowed)\n return;\n handlePinchStart(_this, event);\n handleCancelAnimation(_this);\n handleCallback(getContext(_this), event, onPinchingStart);\n handleCallback(getContext(_this), event, onZoomStart);\n };\n this.onPinch = function (event) {\n var disabled = _this.setup.disabled;\n var _a = _this.props, onPinching = _a.onPinching, onZoom = _a.onZoom;\n if (disabled)\n return;\n var isAllowed = isPinchAllowed(_this);\n if (!isAllowed)\n return;\n event.preventDefault();\n event.stopPropagation();\n handlePinchZoom(_this, event);\n handleCallback(getContext(_this), event, onPinching);\n handleCallback(getContext(_this), event, onZoom);\n };\n this.onPinchStop = function (event) {\n var _a = _this.props, onPinchingStop = _a.onPinchingStop, onZoomStop = _a.onZoomStop;\n if (_this.pinchStartScale) {\n handlePinchStop(_this);\n handleCallback(getContext(_this), event, onPinchingStop);\n handleCallback(getContext(_this), event, onZoomStop);\n }\n };\n /// ///////\n // Touch\n /// ///////\n this.onTouchPanningStart = function (event) {\n var disabled = _this.setup.disabled;\n var onPanningStart = _this.props.onPanningStart;\n if (disabled)\n return;\n var isAllowed = isPanningStartAllowed(_this, event);\n if (!isAllowed)\n return;\n var isDoubleTap = _this.lastTouch &&\n +new Date() - _this.lastTouch < 200 &&\n event.touches.length === 1;\n if (!isDoubleTap) {\n _this.lastTouch = +new Date();\n handleCancelAnimation(_this);\n var touches = event.touches;\n var isPanningAction = touches.length === 1;\n var isPinchAction = touches.length === 2;\n if (isPanningAction) {\n handleCancelAnimation(_this);\n handlePanningStart(_this, event);\n handleCallback(getContext(_this), event, onPanningStart);\n }\n if (isPinchAction) {\n _this.onPinchStart(event);\n }\n }\n };\n this.onTouchPanning = function (event) {\n var disabled = _this.setup.disabled;\n var onPanning = _this.props.onPanning;\n if (_this.isPanning && event.touches.length === 1) {\n if (disabled)\n return;\n var isAllowed = isPanningAllowed(_this);\n if (!isAllowed)\n return;\n event.preventDefault();\n event.stopPropagation();\n var touch = event.touches[0];\n handlePanning(_this, touch.clientX, touch.clientY);\n handleCallback(getContext(_this), event, onPanning);\n }\n else if (event.touches.length > 1) {\n _this.onPinch(event);\n }\n };\n this.onTouchPanningStop = function (event) {\n _this.onPanningStop(event);\n _this.onPinchStop(event);\n };\n /// ///////\n // Double Click\n /// ///////\n this.onDoubleClick = function (event) {\n var disabled = _this.setup.disabled;\n if (disabled)\n return;\n var isAllowed = isDoubleClickAllowed(_this, event);\n if (!isAllowed)\n return;\n handleDoubleClick(_this, event);\n };\n /// ///////\n // Helpers\n /// ///////\n this.clearPanning = function (event) {\n if (_this.isPanning) {\n _this.onPanningStop(event);\n }\n };\n this.setKeyPressed = function (e) {\n _this.pressedKeys[e.key] = true;\n };\n this.setKeyUnPressed = function (e) {\n _this.pressedKeys[e.key] = false;\n };\n this.isPressingKeys = function (keys) {\n if (!keys.length) {\n return true;\n }\n return Boolean(keys.find(function (key) { return _this.pressedKeys[key]; }));\n };\n this.setTransformState = function (scale, positionX, positionY) {\n var onTransformed = _this.props.onTransformed;\n if (!Number.isNaN(scale) &&\n !Number.isNaN(positionX) &&\n !Number.isNaN(positionY)) {\n if (scale !== _this.transformState.scale) {\n _this.transformState.previousScale = _this.transformState.scale;\n _this.transformState.scale = scale;\n }\n _this.transformState.positionX = positionX;\n _this.transformState.positionY = positionY;\n _this.applyTransformation();\n var ctx_1 = getContext(_this);\n _this.onChangeCallbacks.forEach(function (callback) { return callback(ctx_1); });\n handleCallback(ctx_1, { scale: scale, positionX: positionX, positionY: positionY }, onTransformed);\n }\n else {\n console.error(\"Detected NaN set state values\");\n }\n };\n this.setCenter = function () {\n if (_this.wrapperComponent && _this.contentComponent) {\n var targetState = getCenterPosition(_this.transformState.scale, _this.wrapperComponent, _this.contentComponent);\n _this.setTransformState(targetState.scale, targetState.positionX, targetState.positionY);\n }\n };\n this.handleTransformStyles = function (x, y, scale) {\n if (_this.props.customTransform) {\n return _this.props.customTransform(x, y, scale);\n }\n return getTransformStyles(x, y, scale);\n };\n this.applyTransformation = function () {\n if (!_this.mounted || !_this.contentComponent)\n return;\n var _a = _this.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n var transform = _this.handleTransformStyles(positionX, positionY, scale);\n _this.contentComponent.style.transform = transform;\n };\n this.getContext = function () {\n return getContext(_this);\n };\n /**\n * Hooks\n */\n this.onChange = function (callback) {\n if (!_this.onChangeCallbacks.has(callback)) {\n _this.onChangeCallbacks.add(callback);\n }\n return function () {\n _this.onChangeCallbacks.delete(callback);\n };\n };\n this.onInit = function (callback) {\n if (!_this.onInitCallbacks.has(callback)) {\n _this.onInitCallbacks.add(callback);\n }\n return function () {\n _this.onInitCallbacks.delete(callback);\n };\n };\n /**\n * Initialization\n */\n this.init = function (wrapperComponent, contentComponent) {\n _this.cleanupWindowEvents();\n _this.wrapperComponent = wrapperComponent;\n _this.contentComponent = contentComponent;\n handleCalculateBounds(_this, _this.transformState.scale);\n _this.handleInitializeWrapperEvents(wrapperComponent);\n _this.handleInitialize(wrapperComponent, contentComponent);\n _this.initializeWindowEvents();\n _this.isInitialized = true;\n var ctx = getContext(_this);\n handleCallback(ctx, undefined, _this.props.onInit);\n };\n this.props = props;\n this.setup = createSetup(this.props);\n this.transformState = createState(this.props);\n }\n return ZoomPanPinch;\n}());\n\nvar Context = React.createContext(null);\nvar getContent = function (children, ctx) {\n if (typeof children === \"function\") {\n return children(ctx);\n }\n return children;\n};\nvar TransformWrapper = React.forwardRef(function (props, ref) {\n var instance = useRef(new ZoomPanPinch(props)).current;\n var content = getContent(props.children, getControls(instance));\n useImperativeHandle(ref, function () { return getControls(instance); }, [instance]);\n useEffect(function () {\n instance.update(props);\n }, [instance, props]);\n return React.createElement(Context.Provider, { value: instance }, content);\n});\n\nvar KeepScale = React.forwardRef(function (props, ref) {\n var localRef = useRef(null);\n var instance = useContext(Context);\n useEffect(function () {\n return instance.onChange(function (ctx) {\n if (localRef.current) {\n var positionX = 0;\n var positionY = 0;\n localRef.current.style.transform = instance.handleTransformStyles(positionX, positionY, 1 / ctx.instance.transformState.scale);\n }\n });\n }, [instance]);\n return React.createElement(\"div\", __assign({}, props, { ref: mergeRefs([localRef, ref]) }));\n});\n\nvar initialElementRect = {\n width: 0,\n height: 0,\n y: 0,\n x: 0,\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n};\nvar useResize = function (ref, onResize, dependencies) {\n var resizeObserverRef = useRef();\n var rectRef = useRef(initialElementRect);\n var didUnmount = useRef(false);\n useLayoutEffect(function () {\n var _a;\n didUnmount.current = false;\n if (!(\"ResizeObserver\" in window)) {\n return;\n }\n if (ref) {\n resizeObserverRef.current = new ResizeObserver(function (entries) {\n var newSize = ref.getBoundingClientRect();\n if (!Array.isArray(entries) ||\n !entries.length ||\n didUnmount.current ||\n (newSize.width === rectRef.current.width &&\n newSize.height === rectRef.current.height))\n return;\n onResize(newSize, ref);\n rectRef.current = newSize;\n });\n (_a = resizeObserverRef.current) === null || _a === void 0 ? void 0 : _a.observe(ref);\n }\n return function () {\n var _a;\n didUnmount.current = true;\n if (ref) {\n (_a = resizeObserverRef.current) === null || _a === void 0 ? void 0 : _a.unobserve(ref);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, __spreadArray([onResize, ref], dependencies, true));\n};\n\nvar previewStyles = {\n position: \"absolute\",\n zIndex: 2,\n top: \"0px\",\n left: \"0px\",\n boxSizing: \"border-box\",\n border: \"3px solid red\",\n transformOrigin: \"0% 0%\",\n boxShadow: \"rgba(0,0,0,0.2) 0 0 0 10000000px\",\n};\nvar MiniMap = function (_a) {\n var _b = _a.width, width = _b === void 0 ? 200 : _b, _c = _a.height, height = _c === void 0 ? 200 : _c, _d = _a.borderColor, borderColor = _d === void 0 ? \"red\" : _d, children = _a.children, rest = __rest(_a, [\"width\", \"height\", \"borderColor\", \"children\"]);\n var _e = useState(false), initialized = _e[0], setInitialized = _e[1];\n var instance = useTransformContext();\n var miniMapInstance = useRef(null);\n var mainRef = useRef(null);\n var wrapperRef = useRef(null);\n var previewRef = useRef(null);\n var getViewportSize = useCallback(function () {\n if (instance.wrapperComponent) {\n var rect = instance.wrapperComponent.getBoundingClientRect();\n return {\n width: rect.width,\n height: rect.height,\n };\n }\n return {\n width: 0,\n height: 0,\n };\n }, [instance.wrapperComponent]);\n var getContentSize = useCallback(function () {\n if (instance.contentComponent) {\n var rect = instance.contentComponent.getBoundingClientRect();\n return {\n width: rect.width / instance.transformState.scale,\n height: rect.height / instance.transformState.scale,\n };\n }\n return {\n width: 0,\n height: 0,\n };\n }, [instance.contentComponent, instance.transformState.scale]);\n var computeMiniMapScale = useCallback(function () {\n var contentSize = getContentSize();\n var scaleX = width / contentSize.width;\n var scaleY = height / contentSize.height;\n var scale = scaleY > scaleX ? scaleX : scaleY;\n return scale;\n }, [getContentSize, height, width]);\n var computeMiniMapSize = function () {\n var contentSize = getContentSize();\n var scaleX = width / contentSize.width;\n var scaleY = height / contentSize.height;\n if (scaleY > scaleX) {\n return { width: width, height: contentSize.height * scaleX };\n }\n return { width: contentSize.width * scaleY, height: height };\n };\n var computeMiniMapStyle = function () {\n var scale = computeMiniMapScale();\n var style = {\n transform: \"scale(\".concat(scale || 1, \")\"),\n transformOrigin: \"0% 0%\",\n position: \"absolute\",\n boxSizing: \"border-box\",\n zIndex: 1,\n overflow: \"hidden\",\n };\n Object.keys(style).forEach(function (key) {\n if (wrapperRef.current) {\n wrapperRef.current.style[key] = style[key];\n }\n });\n };\n var transformMiniMap = function () {\n computeMiniMapStyle();\n var miniSize = computeMiniMapSize();\n var wrapSize = getContentSize();\n if (wrapperRef.current) {\n wrapperRef.current.style.width = \"\".concat(wrapSize.width, \"px\");\n wrapperRef.current.style.height = \"\".concat(wrapSize.height, \"px\");\n }\n if (mainRef.current) {\n mainRef.current.style.width = \"\".concat(miniSize.width, \"px\");\n mainRef.current.style.height = \"\".concat(miniSize.height, \"px\");\n }\n if (previewRef.current) {\n var size = getViewportSize();\n var scale = computeMiniMapScale();\n var previewScale = scale * (1 / instance.transformState.scale);\n var transform = instance.handleTransformStyles(-instance.transformState.positionX * previewScale, -instance.transformState.positionY * previewScale, 1);\n previewRef.current.style.transform = transform;\n previewRef.current.style.width = \"\".concat(size.width * previewScale, \"px\");\n previewRef.current.style.height = \"\".concat(size.height * previewScale, \"px\");\n }\n };\n var initialize = function () {\n transformMiniMap();\n };\n useTransformEffect(function () {\n transformMiniMap();\n });\n useTransformInit(function () {\n initialize();\n setInitialized(true);\n });\n useResize(instance.contentComponent, initialize, [initialized]);\n useEffect(function () {\n return instance.onChange(function (zpp) {\n var scale = computeMiniMapScale();\n if (miniMapInstance.current) {\n miniMapInstance.current.instance.transformState.scale =\n zpp.instance.transformState.scale;\n miniMapInstance.current.instance.transformState.positionX =\n zpp.instance.transformState.positionX * scale;\n miniMapInstance.current.instance.transformState.positionY =\n zpp.instance.transformState.positionY * scale;\n }\n });\n }, [computeMiniMapScale, instance, miniMapInstance]);\n var wrapperStyle = useMemo(function () {\n return {\n position: \"relative\",\n zIndex: 2,\n overflow: \"hidden\",\n };\n }, []);\n return (React.createElement(\"div\", __assign({}, rest, { ref: mainRef, style: wrapperStyle, className: \"rzpp-mini-map \".concat(rest.className || \"\") }),\n React.createElement(\"div\", __assign({}, rest, { ref: wrapperRef, className: \"rzpp-wrapper\" }), children),\n React.createElement(\"div\", { className: \"rzpp-preview\", ref: previewRef, style: __assign(__assign({}, previewStyles), { borderColor: borderColor }) })));\n};\n\nfunction styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar css_248z = \".transform-component-module_wrapper__SPB86 {\\n position: relative;\\n width: -moz-fit-content;\\n width: fit-content;\\n height: -moz-fit-content;\\n height: fit-content;\\n overflow: hidden;\\n -webkit-touch-callout: none; /* iOS Safari */\\n -webkit-user-select: none; /* Safari */\\n -khtml-user-select: none; /* Konqueror HTML */\\n -moz-user-select: none; /* Firefox */\\n -ms-user-select: none; /* Internet Explorer/Edge */\\n user-select: none;\\n margin: 0;\\n padding: 0;\\n transform: translate3d(0, 0, 0);\\n}\\n.transform-component-module_content__FBWxo {\\n display: flex;\\n flex-wrap: wrap;\\n width: -moz-fit-content;\\n width: fit-content;\\n height: -moz-fit-content;\\n height: fit-content;\\n margin: 0;\\n padding: 0;\\n transform-origin: 0% 0%;\\n}\\n.transform-component-module_content__FBWxo img {\\n pointer-events: none;\\n}\\n\";\nvar styles = {\"wrapper\":\"transform-component-module_wrapper__SPB86\",\"content\":\"transform-component-module_content__FBWxo\"};\nstyleInject(css_248z);\n\nvar TransformComponent = function (_a) {\n var children = _a.children, _b = _a.wrapperClass, wrapperClass = _b === void 0 ? \"\" : _b, _c = _a.contentClass, contentClass = _c === void 0 ? \"\" : _c, wrapperStyle = _a.wrapperStyle, contentStyle = _a.contentStyle, _d = _a.wrapperProps, wrapperProps = _d === void 0 ? {} : _d, _e = _a.contentProps, contentProps = _e === void 0 ? {} : _e;\n var _f = useContext(Context), init = _f.init, cleanupWindowEvents = _f.cleanupWindowEvents;\n var wrapperRef = useRef(null);\n var contentRef = useRef(null);\n useEffect(function () {\n var wrapper = wrapperRef.current;\n var content = contentRef.current;\n if (wrapper !== null && content !== null && init) {\n init === null || init === void 0 ? void 0 : init(wrapper, content);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return function () {\n cleanupWindowEvents === null || cleanupWindowEvents === void 0 ? void 0 : cleanupWindowEvents();\n };\n }, []);\n return (React.createElement(\"div\", __assign({}, wrapperProps, { ref: wrapperRef, className: \"\".concat(baseClasses.wrapperClass, \" \").concat(styles.wrapper, \" \").concat(wrapperClass), style: wrapperStyle }),\n React.createElement(\"div\", __assign({}, contentProps, { ref: contentRef, className: \"\".concat(baseClasses.contentClass, \" \").concat(styles.content, \" \").concat(contentClass), style: contentStyle }), children)));\n};\n\nvar useTransformContext = function () {\n var libraryContext = useContext(Context);\n if (!libraryContext) {\n throw new Error(\"Transform context must be placed inside TransformWrapper\");\n }\n return libraryContext;\n};\n\nvar useControls = function () {\n var libraryContext = useTransformContext();\n return getControls(libraryContext);\n};\n\nvar useTransformInit = function (callback) {\n var libraryContext = useTransformContext();\n useEffect(function () {\n var unmountCallback;\n var unmount;\n if (libraryContext.contentComponent && libraryContext.wrapperComponent) {\n unmountCallback = callback(getState(libraryContext));\n }\n else {\n unmount = libraryContext.onInit(function (ref) {\n unmountCallback = callback(getState(ref.instance));\n });\n }\n return function () {\n unmount === null || unmount === void 0 ? void 0 : unmount();\n unmountCallback === null || unmountCallback === void 0 ? void 0 : unmountCallback();\n };\n }, []);\n};\n\nvar useTransformEffect = function (callback) {\n var libraryContext = useTransformContext();\n useEffect(function () {\n var unmountCallback;\n var unmount = libraryContext.onChange(function (ref) {\n unmountCallback = callback(getState(ref.instance));\n });\n return function () {\n unmount();\n unmountCallback === null || unmountCallback === void 0 ? void 0 : unmountCallback();\n };\n }, [callback, libraryContext]);\n};\n\nfunction useTransformComponent(callback) {\n var libraryContext = useTransformContext();\n var _a = useState(callback(getState(libraryContext))), transformRender = _a[0], setTransformRender = _a[1];\n useEffect(function () {\n var mounted = true;\n var unmount = libraryContext.onChange(function (ref) {\n if (mounted) {\n setTransformRender(callback(getState(ref.instance)));\n }\n });\n return function () {\n unmount();\n mounted = false;\n };\n }, [callback, libraryContext]);\n return transformRender;\n}\n\nexport { Context, KeepScale, MiniMap, TransformComponent, TransformWrapper, getCenterPosition, getMatrixTransformStyles, getTransformStyles, useControls, useTransformComponent, useTransformContext, useTransformEffect, useTransformInit };\n//# sourceMappingURL=index.esm.js.map\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n});\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","\"use client\";\n\n// src/radio-group.tsx\nimport * as React2 from \"react\";\nimport { composeEventHandlers as composeEventHandlers2 } from \"@radix-ui/primitive\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { Primitive as Primitive2 } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\n\n// src/radio.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar RADIO_NAME = \"Radio\";\nvar [createRadioContext, createRadioScope] = createContextScope(RADIO_NAME);\nvar [RadioProvider, useRadioContext] = createRadioContext(RADIO_NAME);\nvar Radio = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRadio,\n name,\n checked = false,\n required,\n disabled,\n value = \"on\",\n onCheck,\n form,\n ...radioProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n return /* @__PURE__ */ jsxs(RadioProvider, { scope: __scopeRadio, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"radio\",\n \"aria-checked\": checked,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...radioProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n if (!checked) onCheck?.();\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n RadioBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nRadio.displayName = RADIO_NAME;\nvar INDICATOR_NAME = \"RadioIndicator\";\nvar RadioIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeRadio, forceMount, ...indicatorProps } = props;\n const context = useRadioContext(INDICATOR_NAME, __scopeRadio);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.checked, children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...indicatorProps,\n ref: forwardedRef\n }\n ) });\n }\n);\nRadioIndicator.displayName = INDICATOR_NAME;\nvar BUBBLE_INPUT_NAME = \"RadioBubbleInput\";\nvar RadioBubbleInput = React.forwardRef(\n ({\n __scopeRadio,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"radio\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nRadioBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\n\n// src/radio-group.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nvar ARROW_KEYS = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"];\nvar RADIO_GROUP_NAME = \"RadioGroup\";\nvar [createRadioGroupContext, createRadioGroupScope] = createContextScope2(RADIO_GROUP_NAME, [\n createRovingFocusGroupScope,\n createRadioScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar useRadioScope = createRadioScope();\nvar [RadioGroupProvider, useRadioGroupContext] = createRadioGroupContext(RADIO_GROUP_NAME);\nvar RadioGroup = React2.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRadioGroup,\n name,\n defaultValue,\n value: valueProp,\n required = false,\n disabled = false,\n orientation,\n dir,\n loop = true,\n onValueChange,\n ...groupProps\n } = props;\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeRadioGroup);\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? null,\n onChange: onValueChange,\n caller: RADIO_GROUP_NAME\n });\n return /* @__PURE__ */ jsx2(\n RadioGroupProvider,\n {\n scope: __scopeRadioGroup,\n name,\n required,\n disabled,\n value,\n onValueChange: setValue,\n children: /* @__PURE__ */ jsx2(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation,\n dir: direction,\n loop,\n children: /* @__PURE__ */ jsx2(\n Primitive2.div,\n {\n role: \"radiogroup\",\n \"aria-required\": required,\n \"aria-orientation\": orientation,\n \"data-disabled\": disabled ? \"\" : void 0,\n dir: direction,\n ...groupProps,\n ref: forwardedRef\n }\n )\n }\n )\n }\n );\n }\n);\nRadioGroup.displayName = RADIO_GROUP_NAME;\nvar ITEM_NAME = \"RadioGroupItem\";\nvar RadioGroupItem = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeRadioGroup, disabled, ...itemProps } = props;\n const context = useRadioGroupContext(ITEM_NAME, __scopeRadioGroup);\n const isDisabled = context.disabled || disabled;\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeRadioGroup);\n const radioScope = useRadioScope(__scopeRadioGroup);\n const ref = React2.useRef(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref);\n const checked = context.value === itemProps.value;\n const isArrowKeyPressedRef = React2.useRef(false);\n React2.useEffect(() => {\n const handleKeyDown = (event) => {\n if (ARROW_KEYS.includes(event.key)) {\n isArrowKeyPressedRef.current = true;\n }\n };\n const handleKeyUp = () => isArrowKeyPressedRef.current = false;\n document.addEventListener(\"keydown\", handleKeyDown);\n document.addEventListener(\"keyup\", handleKeyUp);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.removeEventListener(\"keyup\", handleKeyUp);\n };\n }, []);\n return /* @__PURE__ */ jsx2(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !isDisabled,\n active: checked,\n children: /* @__PURE__ */ jsx2(\n Radio,\n {\n disabled: isDisabled,\n required: context.required,\n checked,\n ...radioScope,\n ...itemProps,\n name: context.name,\n ref: composedRefs,\n onCheck: () => context.onValueChange(itemProps.value),\n onKeyDown: composeEventHandlers2((event) => {\n if (event.key === \"Enter\") event.preventDefault();\n }),\n onFocus: composeEventHandlers2(itemProps.onFocus, () => {\n if (isArrowKeyPressedRef.current) ref.current?.click();\n })\n }\n )\n }\n );\n }\n);\nRadioGroupItem.displayName = ITEM_NAME;\nvar INDICATOR_NAME2 = \"RadioGroupIndicator\";\nvar RadioGroupIndicator = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeRadioGroup, ...indicatorProps } = props;\n const radioScope = useRadioScope(__scopeRadioGroup);\n return /* @__PURE__ */ jsx2(RadioIndicator, { ...radioScope, ...indicatorProps, ref: forwardedRef });\n }\n);\nRadioGroupIndicator.displayName = INDICATOR_NAME2;\nvar Root2 = RadioGroup;\nvar Item2 = RadioGroupItem;\nvar Indicator = RadioGroupIndicator;\nexport {\n Indicator,\n Item2 as Item,\n RadioGroup,\n RadioGroupIndicator,\n RadioGroupItem,\n Root2 as Root,\n createRadioGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { Circle } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return <RadioGroupPrimitive.Root className={cn(\"grid gap-2\", className)} {...props} ref={ref} />;\n});\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n});\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n","import { useState, useEffect } from 'react';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Textarea } from '@/components/ui/textarea';\nimport { Label } from '@/components/ui/label';\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { Upload, RefreshCw, GitBranch, Bookmark } from 'lucide-react';\nimport { supabase } from '@/integrations/supabase/client';\nimport { useAuth } from '@/hooks/useAuth';\n\ninterface Collection {\n id: string;\n name: string;\n slug: string;\n}\n\ninterface PublishDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onPublish: (option: 'overwrite' | 'new' | 'version' | 'add-to-post', title?: string, description?: string, parentId?: string, collectionIds?: string[]) => void;\n originalTitle: string;\n originalImageId?: string;\n isPublishing?: boolean;\n editingPostId?: string;\n}\n\nexport default function PublishDialog({\n isOpen,\n onClose,\n onPublish,\n originalTitle,\n originalImageId,\n isPublishing = false,\n editingPostId\n}: PublishDialogProps) {\n const { user } = useAuth();\n const [publishOption, setPublishOption] = useState<'overwrite' | 'new' | 'version' | 'add-to-post'>('new');\n const [title, setTitle] = useState(originalTitle);\n const [description, setDescription] = useState('');\n const [collections, setCollections] = useState<Collection[]>([]);\n const [selectedCollections, setSelectedCollections] = useState<string[]>([]);\n const [loadingCollections, setLoadingCollections] = useState(false);\n\n // Load user's collections when dialog opens\n useEffect(() => {\n if (isOpen && user) {\n loadCollections();\n // Default to \"add-to-post\" if editing a post\n if (editingPostId) {\n setPublishOption('add-to-post');\n } else {\n setPublishOption('new');\n }\n }\n }, [isOpen, user, editingPostId]);\n\n const loadCollections = async () => {\n if (!user) return;\n\n setLoadingCollections(true);\n try {\n const { data, error } = await supabase\n .from('collections')\n .select('id, name, slug')\n .eq('user_id', user.id)\n .order('name');\n\n if (error) throw error;\n setCollections(data || []);\n } catch (error) {\n console.error('Error loading collections:', error);\n } finally {\n setLoadingCollections(false);\n }\n };\n\n const toggleCollection = (collectionId: string) => {\n setSelectedCollections(prev =>\n prev.includes(collectionId)\n ? prev.filter(id => id !== collectionId)\n : [...prev, collectionId]\n );\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n onPublish(\n publishOption,\n title.trim() || undefined,\n description.trim() || undefined,\n originalImageId,\n selectedCollections.length > 0 ? selectedCollections : undefined\n );\n };\n\n const handleClose = () => {\n if (!isPublishing) {\n onClose();\n }\n };\n\n if (!isOpen) return null;\n\n return (\n <div className=\"fixed inset-0 bg-black/50 z-[10000] flex items-center justify-center p-4\">\n <div className=\"bg-background rounded-xl shadow-2xl max-w-md w-full max-h-[90vh] overflow-y-auto\">\n <div className=\"p-6\">\n <h2 className=\"text-xl font-semibold text-foreground mb-4\">\n Publish Generated Image\n </h2>\n\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div>\n <Label className=\"text-sm font-medium text-foreground mb-3 block\">\n Publishing Option\n </Label>\n <RadioGroup\n value={publishOption}\n onValueChange={(value) => setPublishOption(value as 'overwrite' | 'new' | 'version' | 'add-to-post')}\n className=\"space-y-3\"\n >\n <div className=\"flex items-center space-x-2 p-3 border rounded-lg hover:bg-muted/50 transition-colors\">\n <RadioGroupItem value=\"overwrite\" id=\"overwrite\" />\n <div className=\"flex-1\">\n <Label htmlFor=\"overwrite\" className=\"font-medium cursor-pointer\">\n <div className=\"flex items-center gap-2\">\n <RefreshCw className=\"h-4 w-4\" />\n Overwrite Original\n </div>\n </Label>\n <p className=\"text-sm text-muted-foreground mt-1\">\n Replace the original image with the generated version\n </p>\n </div>\n </div>\n\n <div className=\"flex items-center space-x-2 p-3 border rounded-lg hover:bg-muted/50 transition-colors\">\n <RadioGroupItem value=\"new\" id=\"new\" />\n <div className=\"flex-1\">\n <Label htmlFor=\"new\" className=\"font-medium cursor-pointer\">\n <div className=\"flex items-center gap-2\">\n <Upload className=\"h-4 w-4\" />\n Create New Post\n </div>\n </Label>\n <p className=\"text-sm text-muted-foreground mt-1\">\n Save as a new image in your gallery\n </p>\n </div>\n </div>\n\n {originalImageId && (\n <div className=\"flex items-center space-x-2 p-3 border rounded-lg hover:bg-muted/50 transition-colors\">\n <RadioGroupItem value=\"version\" id=\"version\" />\n <div className=\"flex-1\">\n <Label htmlFor=\"version\" className=\"font-medium cursor-pointer\">\n <div className=\"flex items-center gap-2\">\n <GitBranch className=\"h-4 w-4\" />\n Save as Version\n </div>\n </Label>\n <p className=\"text-sm text-muted-foreground mt-1\">\n Create a new version linked to the original image\n </p>\n </div>\n </div>\n )}\n </RadioGroup>\n </div>\n\n {(publishOption === 'new' || publishOption === 'version' || publishOption === 'add-to-post') && (\n <div className=\"space-y-4 pt-2\">\n <div>\n <Label htmlFor=\"title\" className=\"text-sm font-medium text-foreground\">\n Title <span className=\"text-muted-foreground\">(optional)</span>\n </Label>\n <Input\n id=\"title\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n placeholder=\"Enter a title...\"\n className=\"mt-1\"\n disabled={isPublishing}\n />\n </div>\n\n <div>\n <Label htmlFor=\"description\" className=\"text-sm font-medium text-foreground\">\n Description <span className=\"text-muted-foreground\">(optional)</span>\n </Label>\n <Textarea\n id=\"description\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"Add a description for your generated image...\"\n className=\"mt-1 resize-none\"\n rows={3}\n disabled={isPublishing}\n />\n </div>\n\n {/* Collections Selection */}\n {collections.length > 0 && (\n <div>\n <Label className=\"text-sm font-medium text-foreground mb-2 flex items-center gap-2\">\n <Bookmark className=\"h-4 w-4\" />\n Add to Collections <span className=\"text-muted-foreground\">(optional)</span>\n </Label>\n <div className=\"mt-2 space-y-2 max-h-32 overflow-y-auto border rounded-lg p-3\">\n {loadingCollections ? (\n <div className=\"text-sm text-muted-foreground text-center py-2\">\n Loading collections...\n </div>\n ) : (\n collections.map((collection) => (\n <div key={collection.id} className=\"flex items-center space-x-2\">\n <Checkbox\n id={`collection-${collection.id}`}\n checked={selectedCollections.includes(collection.id)}\n onCheckedChange={() => toggleCollection(collection.id)}\n disabled={isPublishing}\n />\n <label\n htmlFor={`collection-${collection.id}`}\n className=\"text-sm cursor-pointer flex-1\"\n >\n {collection.name}\n </label>\n </div>\n ))\n )}\n </div>\n {selectedCollections.length > 0 && (\n <p className=\"text-xs text-muted-foreground mt-2\">\n Will be added to {selectedCollections.length} collection{selectedCollections.length > 1 ? 's' : ''}\n </p>\n )}\n </div>\n )}\n </div>\n )}\n\n <div className=\"flex gap-3 pt-4\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleClose}\n className=\"flex-1\"\n disabled={isPublishing}\n >\n Cancel\n </Button>\n <Button\n type=\"submit\"\n className=\"flex-1\"\n disabled={isPublishing}\n >\n {isPublishing ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white border-t-transparent\"></div>\n Publishing...\n </div>\n ) : (\n <div className=\"flex items-center gap-2\">\n {publishOption === 'overwrite' && <RefreshCw className=\"h-4 w-4\" />}\n {publishOption === 'new' && <Upload className=\"h-4 w-4\" />}\n {publishOption === 'version' && <GitBranch className=\"h-4 w-4\" />}\n {publishOption === 'add-to-post' && <Bookmark className=\"h-4 w-4\" />}\n {publishOption === 'overwrite' ? 'Overwrite' :\n publishOption === 'version' ? 'Save Version' :\n publishOption === 'add-to-post' ? 'Add to Post' : 'Publish New'}\n </div>\n )}\n </Button>\n </div>\n </form>\n </div>\n </div>\n </div>\n );\n}","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nconst yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);\nfunction getSideAxis(placement) {\n return yAxisSides.has(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nconst invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);\n}\nconst tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);\nfunction isTableElement(element) {\n return tableElements.has(getNodeName(element));\n}\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(element) {\n return topLayerSelectors.some(selector => {\n try {\n return element.matches(selector);\n } catch (_e) {\n return false;\n }\n });\n}\nconst transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];\nconst willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];\nconst containValues = ['paint', 'layout', 'strict', 'content'];\nfunction isContainingBlock(elementOrCss) {\n const webkit = isWebKit();\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nconst lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);\nfunction isLastTraversableNode(node) {\n return lastTraversableNodeNames.has(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\nconst absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n resizeObserver.observe(floating);\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { computePosition, arrow as arrow$2, autoPlacement as autoPlacement$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar isClient = typeof document !== 'undefined';\n\nvar noop = function noop() {};\nvar index = isClient ? useLayoutEffect : noop;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (typeof a === 'function' && a.toString() === b.toString()) {\n return true;\n }\n let length;\n let i;\n let keys;\n if (a && b && typeof a === 'object') {\n if (Array.isArray(a)) {\n length = a.length;\n if (length !== b.length) return false;\n for (i = length; i-- !== 0;) {\n if (!deepEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) {\n return false;\n }\n for (i = length; i-- !== 0;) {\n if (!{}.hasOwnProperty.call(b, keys[i])) {\n return false;\n }\n }\n for (i = length; i-- !== 0;) {\n const key = keys[i];\n if (key === '_owner' && a.$$typeof) {\n continue;\n }\n if (!deepEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n const ref = React.useRef(value);\n index(() => {\n ref.current = value;\n });\n return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform,\n elements: {\n reference: externalReference,\n floating: externalFloating\n } = {},\n transform = true,\n whileElementsMounted,\n open\n } = options;\n const [data, setData] = React.useState({\n x: 0,\n y: 0,\n strategy,\n placement,\n middlewareData: {},\n isPositioned: false\n });\n const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n if (!deepEqual(latestMiddleware, middleware)) {\n setLatestMiddleware(middleware);\n }\n const [_reference, _setReference] = React.useState(null);\n const [_floating, _setFloating] = React.useState(null);\n const setReference = React.useCallback(node => {\n if (node !== referenceRef.current) {\n referenceRef.current = node;\n _setReference(node);\n }\n }, []);\n const setFloating = React.useCallback(node => {\n if (node !== floatingRef.current) {\n floatingRef.current = node;\n _setFloating(node);\n }\n }, []);\n const referenceEl = externalReference || _reference;\n const floatingEl = externalFloating || _floating;\n const referenceRef = React.useRef(null);\n const floatingRef = React.useRef(null);\n const dataRef = React.useRef(data);\n const hasWhileElementsMounted = whileElementsMounted != null;\n const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n const platformRef = useLatestRef(platform);\n const openRef = useLatestRef(open);\n const update = React.useCallback(() => {\n if (!referenceRef.current || !floatingRef.current) {\n return;\n }\n const config = {\n placement,\n strategy,\n middleware: latestMiddleware\n };\n if (platformRef.current) {\n config.platform = platformRef.current;\n }\n computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n const fullData = {\n ...data,\n // The floating element's position may be recomputed while it's closed\n // but still mounted (such as when transitioning out). To ensure\n // `isPositioned` will be `false` initially on the next open, avoid\n // setting it to `true` when `open === false` (must be specified).\n isPositioned: openRef.current !== false\n };\n if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n dataRef.current = fullData;\n ReactDOM.flushSync(() => {\n setData(fullData);\n });\n }\n });\n }, [latestMiddleware, placement, strategy, platformRef, openRef]);\n index(() => {\n if (open === false && dataRef.current.isPositioned) {\n dataRef.current.isPositioned = false;\n setData(data => ({\n ...data,\n isPositioned: false\n }));\n }\n }, [open]);\n const isMountedRef = React.useRef(false);\n index(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n index(() => {\n if (referenceEl) referenceRef.current = referenceEl;\n if (floatingEl) floatingRef.current = floatingEl;\n if (referenceEl && floatingEl) {\n if (whileElementsMountedRef.current) {\n return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n }\n update();\n }\n }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\n const refs = React.useMemo(() => ({\n reference: referenceRef,\n floating: floatingRef,\n setReference,\n setFloating\n }), [setReference, setFloating]);\n const elements = React.useMemo(() => ({\n reference: referenceEl,\n floating: floatingEl\n }), [referenceEl, floatingEl]);\n const floatingStyles = React.useMemo(() => {\n const initialStyles = {\n position: strategy,\n left: 0,\n top: 0\n };\n if (!elements.floating) {\n return initialStyles;\n }\n const x = roundByDPR(elements.floating, data.x);\n const y = roundByDPR(elements.floating, data.y);\n if (transform) {\n return {\n ...initialStyles,\n transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n ...(getDPR(elements.floating) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy,\n left: x,\n top: y\n };\n }, [strategy, transform, elements.floating, data.x, data.y]);\n return React.useMemo(() => ({\n ...data,\n update,\n refs,\n elements,\n floatingStyles\n }), [data, update, refs, elements, floatingStyles]);\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow$1 = options => {\n function isRef(value) {\n return {}.hasOwnProperty.call(value, 'current');\n }\n return {\n name: 'arrow',\n options,\n fn(state) {\n const {\n element,\n padding\n } = typeof options === 'function' ? options(state) : options;\n if (element && isRef(element)) {\n if (element.current != null) {\n return arrow$2({\n element: element.current,\n padding\n }).fn(state);\n }\n return {};\n }\n if (element) {\n return arrow$2({\n element,\n padding\n }).fn(state);\n }\n return {};\n }\n };\n};\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = (options, deps) => ({\n ...offset$1(options),\n options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = (options, deps) => ({\n ...shift$1(options),\n options: [options, deps]\n});\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => ({\n ...limitShift$1(options),\n options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = (options, deps) => ({\n ...flip$1(options),\n options: [options, deps]\n});\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = (options, deps) => ({\n ...size$1(options),\n options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = (options, deps) => ({\n ...autoPlacement$1(options),\n options: [options, deps]\n});\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = (options, deps) => ({\n ...hide$1(options),\n options: [options, deps]\n});\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = (options, deps) => ({\n ...inline$1(options),\n options: [options, deps]\n});\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = (options, deps) => ({\n ...arrow$1(options),\n options: [options, deps]\n});\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","// src/arrow.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Arrow\";\nvar Arrow = React.forwardRef((props, forwardedRef) => {\n const { children, width = 10, height = 5, ...arrowProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.svg,\n {\n ...arrowProps,\n ref: forwardedRef,\n width,\n height,\n viewBox: \"0 0 30 10\",\n preserveAspectRatio: \"none\",\n children: props.asChild ? children : /* @__PURE__ */ jsx(\"polygon\", { points: \"0,0 30,0 15,10\" })\n }\n );\n});\nArrow.displayName = NAME;\nvar Root = Arrow;\nexport {\n Arrow,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/popper.tsx\nimport * as React from \"react\";\nimport {\n useFloating,\n autoUpdate,\n offset,\n shift,\n limitShift,\n hide,\n arrow as floatingUIarrow,\n flip,\n size\n} from \"@floating-ui/react-dom\";\nimport * as ArrowPrimitive from \"@radix-ui/react-arrow\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"];\nvar ALIGN_OPTIONS = [\"start\", \"center\", \"end\"];\nvar POPPER_NAME = \"Popper\";\nvar [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\nvar [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);\nvar Popper = (props) => {\n const { __scopePopper, children } = props;\n const [anchor, setAnchor] = React.useState(null);\n return /* @__PURE__ */ jsx(PopperProvider, { scope: __scopePopper, anchor, onAnchorChange: setAnchor, children });\n};\nPopper.displayName = POPPER_NAME;\nvar ANCHOR_NAME = \"PopperAnchor\";\nvar PopperAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopper, virtualRef, ...anchorProps } = props;\n const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const anchorRef = React.useRef(null);\n React.useEffect(() => {\n const previousAnchor = anchorRef.current;\n anchorRef.current = virtualRef?.current || ref.current;\n if (previousAnchor !== anchorRef.current) {\n context.onAnchorChange(anchorRef.current);\n }\n });\n return virtualRef ? null : /* @__PURE__ */ jsx(Primitive.div, { ...anchorProps, ref: composedRefs });\n }\n);\nPopperAnchor.displayName = ANCHOR_NAME;\nvar CONTENT_NAME = \"PopperContent\";\nvar [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);\nvar PopperContent = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopper,\n side = \"bottom\",\n sideOffset = 0,\n align = \"center\",\n alignOffset = 0,\n arrowPadding = 0,\n avoidCollisions = true,\n collisionBoundary = [],\n collisionPadding: collisionPaddingProp = 0,\n sticky = \"partial\",\n hideWhenDetached = false,\n updatePositionStrategy = \"optimized\",\n onPlaced,\n ...contentProps\n } = props;\n const context = usePopperContext(CONTENT_NAME, __scopePopper);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [arrow, setArrow] = React.useState(null);\n const arrowSize = useSize(arrow);\n const arrowWidth = arrowSize?.width ?? 0;\n const arrowHeight = arrowSize?.height ?? 0;\n const desiredPlacement = side + (align !== \"center\" ? \"-\" + align : \"\");\n const collisionPadding = typeof collisionPaddingProp === \"number\" ? collisionPaddingProp : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n const hasExplicitBoundaries = boundary.length > 0;\n const detectOverflowOptions = {\n padding: collisionPadding,\n boundary: boundary.filter(isNotNull),\n // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n altBoundary: hasExplicitBoundaries\n };\n const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n strategy: \"fixed\",\n placement: desiredPlacement,\n whileElementsMounted: (...args) => {\n const cleanup = autoUpdate(...args, {\n animationFrame: updatePositionStrategy === \"always\"\n });\n return cleanup;\n },\n elements: {\n reference: context.anchor\n },\n middleware: [\n offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n avoidCollisions && shift({\n mainAxis: true,\n crossAxis: false,\n limiter: sticky === \"partial\" ? limitShift() : void 0,\n ...detectOverflowOptions\n }),\n avoidCollisions && flip({ ...detectOverflowOptions }),\n size({\n ...detectOverflowOptions,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const { width: anchorWidth, height: anchorHeight } = rects.reference;\n const contentStyle = elements.floating.style;\n contentStyle.setProperty(\"--radix-popper-available-width\", `${availableWidth}px`);\n contentStyle.setProperty(\"--radix-popper-available-height\", `${availableHeight}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-width\", `${anchorWidth}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-height\", `${anchorHeight}px`);\n }\n }),\n arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n transformOrigin({ arrowWidth, arrowHeight }),\n hideWhenDetached && hide({ strategy: \"referenceHidden\", ...detectOverflowOptions })\n ]\n });\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const handlePlaced = useCallbackRef(onPlaced);\n useLayoutEffect(() => {\n if (isPositioned) {\n handlePlaced?.();\n }\n }, [isPositioned, handlePlaced]);\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n return /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: refs.setFloating,\n \"data-radix-popper-content-wrapper\": \"\",\n style: {\n ...floatingStyles,\n transform: isPositioned ? floatingStyles.transform : \"translate(0, -200%)\",\n // keep off the page when measuring\n minWidth: \"max-content\",\n zIndex: contentZIndex,\n [\"--radix-popper-transform-origin\"]: [\n middlewareData.transformOrigin?.x,\n middlewareData.transformOrigin?.y\n ].join(\" \"),\n // hide the content if using the hide middleware and should be hidden\n // set visibility to hidden and disable pointer events so the UI behaves\n // as if the PopperContent isn't there at all\n ...middlewareData.hide?.referenceHidden && {\n visibility: \"hidden\",\n pointerEvents: \"none\"\n }\n },\n dir: props.dir,\n children: /* @__PURE__ */ jsx(\n PopperContentProvider,\n {\n scope: __scopePopper,\n placedSide,\n onArrowChange: setArrow,\n arrowX,\n arrowY,\n shouldHideArrow: cannotCenterArrow,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-side\": placedSide,\n \"data-align\": placedAlign,\n ...contentProps,\n ref: composedRefs,\n style: {\n ...contentProps.style,\n // if the PopperContent hasn't been placed yet (not all measurements done)\n // we prevent animations so that users's animation don't kick in too early referring wrong sides\n animation: !isPositioned ? \"none\" : void 0\n }\n }\n )\n }\n )\n }\n );\n }\n);\nPopperContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"PopperArrow\";\nvar OPPOSITE_SIDE = {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\"\n};\nvar PopperArrow = React.forwardRef(function PopperArrow2(props, forwardedRef) {\n const { __scopePopper, ...arrowProps } = props;\n const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n return (\n // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n // doesn't report size as we'd expect on SVG elements.\n // it reports their bounding box which is effectively the largest path inside the SVG.\n /* @__PURE__ */ jsx(\n \"span\",\n {\n ref: contentContext.onArrowChange,\n style: {\n position: \"absolute\",\n left: contentContext.arrowX,\n top: contentContext.arrowY,\n [baseSide]: 0,\n transformOrigin: {\n top: \"\",\n right: \"0 0\",\n bottom: \"center 0\",\n left: \"100% 0\"\n }[contentContext.placedSide],\n transform: {\n top: \"translateY(100%)\",\n right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n bottom: `rotate(180deg)`,\n left: \"translateY(50%) rotate(-90deg) translateX(50%)\"\n }[contentContext.placedSide],\n visibility: contentContext.shouldHideArrow ? \"hidden\" : void 0\n },\n children: /* @__PURE__ */ jsx(\n ArrowPrimitive.Root,\n {\n ...arrowProps,\n ref: forwardedRef,\n style: {\n ...arrowProps.style,\n // ensures the element can be measured correctly (mostly for if SVG)\n display: \"block\"\n }\n }\n )\n }\n )\n );\n});\nPopperArrow.displayName = ARROW_NAME;\nfunction isNotNull(value) {\n return value !== null;\n}\nvar transformOrigin = (options) => ({\n name: \"transformOrigin\",\n options,\n fn(data) {\n const { placement, rects, middlewareData } = data;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isArrowHidden = cannotCenterArrow;\n const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const noArrowAlign = { start: \"0%\", center: \"50%\", end: \"100%\" }[placedAlign];\n const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n let x = \"\";\n let y = \"\";\n if (placedSide === \"bottom\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${-arrowHeight}px`;\n } else if (placedSide === \"top\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${rects.floating.height + arrowHeight}px`;\n } else if (placedSide === \"right\") {\n x = `${-arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n } else if (placedSide === \"left\") {\n x = `${rects.floating.width + arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n }\n return { data: { x, y } };\n }\n});\nfunction getSideAndAlignFromPlacement(placement) {\n const [side, align = \"center\"] = placement.split(\"-\");\n return [side, align];\n}\nvar Root2 = Popper;\nvar Anchor = PopperAnchor;\nvar Content = PopperContent;\nvar Arrow = PopperArrow;\nexport {\n ALIGN_OPTIONS,\n Anchor,\n Arrow,\n Content,\n Popper,\n PopperAnchor,\n PopperArrow,\n PopperContent,\n Root2 as Root,\n SIDE_OPTIONS,\n createPopperScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs, composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SELECTION_KEYS = [\"Enter\", \" \"];\nvar FIRST_KEYS = [\"ArrowDown\", \"PageUp\", \"Home\"];\nvar LAST_KEYS = [\"ArrowUp\", \"PageDown\", \"End\"];\nvar FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];\nvar SUB_OPEN_KEYS = {\n ltr: [...SELECTION_KEYS, \"ArrowRight\"],\n rtl: [...SELECTION_KEYS, \"ArrowLeft\"]\n};\nvar SUB_CLOSE_KEYS = {\n ltr: [\"ArrowLeft\"],\n rtl: [\"ArrowRight\"]\n};\nvar MENU_NAME = \"Menu\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(MENU_NAME);\nvar [createMenuContext, createMenuScope] = createContextScope(MENU_NAME, [\n createCollectionScope,\n createPopperScope,\n createRovingFocusGroupScope\n]);\nvar usePopperScope = createPopperScope();\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [MenuProvider, useMenuContext] = createMenuContext(MENU_NAME);\nvar [MenuRootProvider, useMenuRootContext] = createMenuContext(MENU_NAME);\nvar Menu = (props) => {\n const { __scopeMenu, open = false, children, dir, onOpenChange, modal = true } = props;\n const popperScope = usePopperScope(__scopeMenu);\n const [content, setContent] = React.useState(null);\n const isUsingKeyboardRef = React.useRef(false);\n const handleOpenChange = useCallbackRef(onOpenChange);\n const direction = useDirection(dir);\n React.useEffect(() => {\n const handleKeyDown = () => {\n isUsingKeyboardRef.current = true;\n document.addEventListener(\"pointerdown\", handlePointer, { capture: true, once: true });\n document.addEventListener(\"pointermove\", handlePointer, { capture: true, once: true });\n };\n const handlePointer = () => isUsingKeyboardRef.current = false;\n document.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n document.removeEventListener(\"pointerdown\", handlePointer, { capture: true });\n document.removeEventListener(\"pointermove\", handlePointer, { capture: true });\n };\n }, []);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuRootProvider,\n {\n scope: __scopeMenu,\n onClose: React.useCallback(() => handleOpenChange(false), [handleOpenChange]),\n isUsingKeyboardRef,\n dir: direction,\n modal,\n children\n }\n )\n }\n ) });\n};\nMenu.displayName = MENU_NAME;\nvar ANCHOR_NAME = \"MenuAnchor\";\nvar MenuAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...anchorProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n }\n);\nMenuAnchor.displayName = ANCHOR_NAME;\nvar PORTAL_NAME = \"MenuPortal\";\nvar [PortalProvider, usePortalContext] = createMenuContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar MenuPortal = (props) => {\n const { __scopeMenu, forceMount, children, container } = props;\n const context = useMenuContext(PORTAL_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeMenu, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"MenuContent\";\nvar [MenuContentProvider, useMenuContentContext] = createMenuContext(CONTENT_NAME);\nvar MenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: rootContext.modal ? /* @__PURE__ */ jsx(MenuRootContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(MenuRootContentNonModal, { ...contentProps, ref: forwardedRef }) }) }) });\n }\n);\nvar MenuRootContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const content = ref.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: context.open,\n disableOutsideScroll: true,\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n ),\n onDismiss: () => context.onOpenChange(false)\n }\n );\n }\n);\nvar MenuRootContentNonModal = React.forwardRef((props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n onDismiss: () => context.onOpenChange(false)\n }\n );\n});\nvar Slot = createSlot(\"MenuContent.ScrollLock\");\nvar MenuContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeMenu,\n loop = false,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEntryFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n disableOutsideScroll,\n ...contentProps\n } = props;\n const context = useMenuContext(CONTENT_NAME, __scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const getItems = useCollection(__scopeMenu);\n const [currentItemId, setCurrentItemId] = React.useState(null);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef, context.onContentChange);\n const timerRef = React.useRef(0);\n const searchRef = React.useRef(\"\");\n const pointerGraceTimerRef = React.useRef(0);\n const pointerGraceIntentRef = React.useRef(null);\n const pointerDirRef = React.useRef(\"right\");\n const lastPointerXRef = React.useRef(0);\n const ScrollLockWrapper = disableOutsideScroll ? RemoveScroll : React.Fragment;\n const scrollLockWrapperProps = disableOutsideScroll ? { as: Slot, allowPinchZoom: true } : void 0;\n const handleTypeaheadSearch = (key) => {\n const search = searchRef.current + key;\n const items = getItems().filter((item) => !item.disabled);\n const currentItem = document.activeElement;\n const currentMatch = items.find((item) => item.ref.current === currentItem)?.textValue;\n const values = items.map((item) => item.textValue);\n const nextMatch = getNextMatch(values, search, currentMatch);\n const newItem = items.find((item) => item.textValue === nextMatch)?.ref.current;\n (function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n })(search);\n if (newItem) {\n setTimeout(() => newItem.focus());\n }\n };\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n useFocusGuards();\n const isPointerMovingToSubmenu = React.useCallback((event) => {\n const isMovingTowards = pointerDirRef.current === pointerGraceIntentRef.current?.side;\n return isMovingTowards && isPointerInGraceArea(event, pointerGraceIntentRef.current?.area);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentProvider,\n {\n scope: __scopeMenu,\n searchRef,\n onItemEnter: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n onItemLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) return;\n contentRef.current?.focus();\n setCurrentItemId(null);\n },\n [isPointerMovingToSubmenu]\n ),\n onTriggerLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n pointerGraceTimerRef,\n onPointerGraceIntentChange: React.useCallback((intent) => {\n pointerGraceIntentRef.current = intent;\n }, []),\n children: /* @__PURE__ */ jsx(ScrollLockWrapper, { ...scrollLockWrapperProps, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: trapFocus,\n onMountAutoFocus: composeEventHandlers(onOpenAutoFocus, (event) => {\n event.preventDefault();\n contentRef.current?.focus({ preventScroll: true });\n }),\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n children: /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n dir: rootContext.dir,\n orientation: \"vertical\",\n loop,\n currentTabStopId: currentItemId,\n onCurrentTabStopIdChange: setCurrentItemId,\n onEntryFocus: composeEventHandlers(onEntryFocus, (event) => {\n if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();\n }),\n preventScrollOnEntryFocus: true,\n children: /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n role: \"menu\",\n \"aria-orientation\": \"vertical\",\n \"data-state\": getOpenState(context.open),\n \"data-radix-menu-content\": \"\",\n dir: rootContext.dir,\n ...popperScope,\n ...contentProps,\n ref: composedRefs,\n style: { outline: \"none\", ...contentProps.style },\n onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n const target = event.target;\n const isKeyDownInside = target.closest(\"[data-radix-menu-content]\") === event.currentTarget;\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n const isCharacterKey = event.key.length === 1;\n if (isKeyDownInside) {\n if (event.key === \"Tab\") event.preventDefault();\n if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key);\n }\n const content = contentRef.current;\n if (event.target !== content) return;\n if (!FIRST_LAST_KEYS.includes(event.key)) return;\n event.preventDefault();\n const items = getItems().filter((item) => !item.disabled);\n const candidateNodes = items.map((item) => item.ref.current);\n if (LAST_KEYS.includes(event.key)) candidateNodes.reverse();\n focusFirst(candidateNodes);\n }),\n onBlur: composeEventHandlers(props.onBlur, (event) => {\n if (!event.currentTarget.contains(event.target)) {\n window.clearTimeout(timerRef.current);\n searchRef.current = \"\";\n }\n }),\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n const target = event.target;\n const pointerXHasChanged = lastPointerXRef.current !== event.clientX;\n if (event.currentTarget.contains(target) && pointerXHasChanged) {\n const newDir = event.clientX > lastPointerXRef.current ? \"right\" : \"left\";\n pointerDirRef.current = newDir;\n lastPointerXRef.current = event.clientX;\n }\n })\n )\n }\n )\n }\n )\n }\n )\n }\n ) })\n }\n );\n }\n);\nMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"MenuGroup\";\nvar MenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...groupProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", ...groupProps, ref: forwardedRef });\n }\n);\nMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"MenuLabel\";\nvar MenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...labelProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { ...labelProps, ref: forwardedRef });\n }\n);\nMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"MenuItem\";\nvar ITEM_SELECT = \"menu.itemSelect\";\nvar MenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { disabled = false, onSelect, ...itemProps } = props;\n const ref = React.useRef(null);\n const rootContext = useMenuRootContext(ITEM_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(ITEM_NAME, props.__scopeMenu);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const isPointerDownRef = React.useRef(false);\n const handleSelect = () => {\n const menuItem = ref.current;\n if (!disabled && menuItem) {\n const itemSelectEvent = new CustomEvent(ITEM_SELECT, { bubbles: true, cancelable: true });\n menuItem.addEventListener(ITEM_SELECT, (event) => onSelect?.(event), { once: true });\n dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);\n if (itemSelectEvent.defaultPrevented) {\n isPointerDownRef.current = false;\n } else {\n rootContext.onClose();\n }\n }\n };\n return /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n ...itemProps,\n ref: composedRefs,\n disabled,\n onClick: composeEventHandlers(props.onClick, handleSelect),\n onPointerDown: (event) => {\n props.onPointerDown?.(event);\n isPointerDownRef.current = true;\n },\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n if (!isPointerDownRef.current) event.currentTarget?.click();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (disabled || isTypingAhead && event.key === \" \") return;\n if (SELECTION_KEYS.includes(event.key)) {\n event.currentTarget.click();\n event.preventDefault();\n }\n })\n }\n );\n }\n);\nMenuItem.displayName = ITEM_NAME;\nvar MenuItemImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, disabled = false, textValue, ...itemProps } = props;\n const contentContext = useMenuContentContext(ITEM_NAME, __scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [isFocused, setIsFocused] = React.useState(false);\n const [textContent, setTextContent] = React.useState(\"\");\n React.useEffect(() => {\n const menuItem = ref.current;\n if (menuItem) {\n setTextContent((menuItem.textContent ?? \"\").trim());\n }\n }, [itemProps.children]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeMenu,\n disabled,\n textValue: textValue ?? textContent,\n children: /* @__PURE__ */ jsx(RovingFocusGroup.Item, { asChild: true, ...rovingFocusGroupScope, focusable: !disabled, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"menuitem\",\n \"data-highlighted\": isFocused ? \"\" : void 0,\n \"aria-disabled\": disabled || void 0,\n \"data-disabled\": disabled ? \"\" : void 0,\n ...itemProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n if (disabled) {\n contentContext.onItemLeave(event);\n } else {\n contentContext.onItemEnter(event);\n if (!event.defaultPrevented) {\n const item = event.currentTarget;\n item.focus({ preventScroll: true });\n }\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => contentContext.onItemLeave(event))\n ),\n onFocus: composeEventHandlers(props.onFocus, () => setIsFocused(true)),\n onBlur: composeEventHandlers(props.onBlur, () => setIsFocused(false))\n }\n ) })\n }\n );\n }\n);\nvar CHECKBOX_ITEM_NAME = \"MenuCheckboxItem\";\nvar MenuCheckboxItem = React.forwardRef(\n (props, forwardedRef) => {\n const { checked = false, onCheckedChange, ...checkboxItemProps } = props;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemcheckbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n ...checkboxItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n checkboxItemProps.onSelect,\n () => onCheckedChange?.(isIndeterminate(checked) ? true : !checked),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"MenuRadioGroup\";\nvar [RadioGroupProvider, useRadioGroupContext] = createMenuContext(\n RADIO_GROUP_NAME,\n { value: void 0, onValueChange: () => {\n } }\n);\nvar MenuRadioGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { value, onValueChange, ...groupProps } = props;\n const handleValueChange = useCallbackRef(onValueChange);\n return /* @__PURE__ */ jsx(RadioGroupProvider, { scope: props.__scopeMenu, value, onValueChange: handleValueChange, children: /* @__PURE__ */ jsx(MenuGroup, { ...groupProps, ref: forwardedRef }) });\n }\n);\nMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"MenuRadioItem\";\nvar MenuRadioItem = React.forwardRef(\n (props, forwardedRef) => {\n const { value, ...radioItemProps } = props;\n const context = useRadioGroupContext(RADIO_ITEM_NAME, props.__scopeMenu);\n const checked = value === context.value;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemradio\",\n \"aria-checked\": checked,\n ...radioItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n radioItemProps.onSelect,\n () => context.onValueChange?.(value),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar ITEM_INDICATOR_NAME = \"MenuItemIndicator\";\nvar [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext(\n ITEM_INDICATOR_NAME,\n { checked: false }\n);\nvar MenuItemIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, forceMount, ...itemIndicatorProps } = props;\n const indicatorContext = useItemIndicatorContext(ITEM_INDICATOR_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(\n Presence,\n {\n present: forceMount || isIndeterminate(indicatorContext.checked) || indicatorContext.checked === true,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...itemIndicatorProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(indicatorContext.checked)\n }\n )\n }\n );\n }\n);\nMenuItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SEPARATOR_NAME = \"MenuSeparator\";\nvar MenuSeparator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...separatorProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"separator\",\n \"aria-orientation\": \"horizontal\",\n ...separatorProps,\n ref: forwardedRef\n }\n );\n }\n);\nMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"MenuArrow\";\nvar MenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nMenuArrow.displayName = ARROW_NAME;\nvar SUB_NAME = \"MenuSub\";\nvar [MenuSubProvider, useMenuSubContext] = createMenuContext(SUB_NAME);\nvar MenuSub = (props) => {\n const { __scopeMenu, children, open = false, onOpenChange } = props;\n const parentMenuContext = useMenuContext(SUB_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const [trigger, setTrigger] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const handleOpenChange = useCallbackRef(onOpenChange);\n React.useEffect(() => {\n if (parentMenuContext.open === false) handleOpenChange(false);\n return () => handleOpenChange(false);\n }, [parentMenuContext.open, handleOpenChange]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuSubProvider,\n {\n scope: __scopeMenu,\n contentId: useId(),\n triggerId: useId(),\n trigger,\n onTriggerChange: setTrigger,\n children\n }\n )\n }\n ) });\n};\nMenuSub.displayName = SUB_NAME;\nvar SUB_TRIGGER_NAME = \"MenuSubTrigger\";\nvar MenuSubTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const openTimerRef = React.useRef(null);\n const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext;\n const scope = { __scopeMenu: props.__scopeMenu };\n const clearOpenTimer = React.useCallback(() => {\n if (openTimerRef.current) window.clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }, []);\n React.useEffect(() => clearOpenTimer, [clearOpenTimer]);\n React.useEffect(() => {\n const pointerGraceTimer = pointerGraceTimerRef.current;\n return () => {\n window.clearTimeout(pointerGraceTimer);\n onPointerGraceIntentChange(null);\n };\n }, [pointerGraceTimerRef, onPointerGraceIntentChange]);\n return /* @__PURE__ */ jsx(MenuAnchor, { asChild: true, ...scope, children: /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n id: subContext.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": subContext.contentId,\n \"data-state\": getOpenState(context.open),\n ...props,\n ref: composeRefs(forwardedRef, subContext.onTriggerChange),\n onClick: (event) => {\n props.onClick?.(event);\n if (props.disabled || event.defaultPrevented) return;\n event.currentTarget.focus();\n if (!context.open) context.onOpenChange(true);\n },\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n contentContext.onItemEnter(event);\n if (event.defaultPrevented) return;\n if (!props.disabled && !context.open && !openTimerRef.current) {\n contentContext.onPointerGraceIntentChange(null);\n openTimerRef.current = window.setTimeout(() => {\n context.onOpenChange(true);\n clearOpenTimer();\n }, 100);\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => {\n clearOpenTimer();\n const contentRect = context.content?.getBoundingClientRect();\n if (contentRect) {\n const side = context.content?.dataset.side;\n const rightSide = side === \"right\";\n const bleed = rightSide ? -5 : 5;\n const contentNearEdge = contentRect[rightSide ? \"left\" : \"right\"];\n const contentFarEdge = contentRect[rightSide ? \"right\" : \"left\"];\n contentContext.onPointerGraceIntentChange({\n area: [\n // Apply a bleed on clientX to ensure that our exit point is\n // consistently within polygon bounds\n { x: event.clientX + bleed, y: event.clientY },\n { x: contentNearEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.bottom },\n { x: contentNearEdge, y: contentRect.bottom }\n ],\n side\n });\n window.clearTimeout(pointerGraceTimerRef.current);\n pointerGraceTimerRef.current = window.setTimeout(\n () => contentContext.onPointerGraceIntentChange(null),\n 300\n );\n } else {\n contentContext.onTriggerLeave(event);\n if (event.defaultPrevented) return;\n contentContext.onPointerGraceIntentChange(null);\n }\n })\n ),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (props.disabled || isTypingAhead && event.key === \" \") return;\n if (SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {\n context.onOpenChange(true);\n context.content?.focus();\n event.preventDefault();\n }\n })\n }\n ) });\n }\n);\nMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"MenuSubContent\";\nvar MenuSubContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...subContentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n id: subContext.contentId,\n \"aria-labelledby\": subContext.triggerId,\n ...subContentProps,\n ref: composedRefs,\n align: \"start\",\n side: rootContext.dir === \"rtl\" ? \"left\" : \"right\",\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n trapFocus: false,\n onOpenAutoFocus: (event) => {\n if (rootContext.isUsingKeyboardRef.current) ref.current?.focus();\n event.preventDefault();\n },\n onCloseAutoFocus: (event) => event.preventDefault(),\n onFocusOutside: composeEventHandlers(props.onFocusOutside, (event) => {\n if (event.target !== subContext.trigger) context.onOpenChange(false);\n }),\n onEscapeKeyDown: composeEventHandlers(props.onEscapeKeyDown, (event) => {\n rootContext.onClose();\n event.preventDefault();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isKeyDownInside = event.currentTarget.contains(event.target);\n const isCloseKey = SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);\n if (isKeyDownInside && isCloseKey) {\n context.onOpenChange(false);\n subContext.trigger?.focus();\n event.preventDefault();\n }\n })\n }\n ) }) }) });\n }\n);\nMenuSubContent.displayName = SUB_CONTENT_NAME;\nfunction getOpenState(open) {\n return open ? \"open\" : \"closed\";\n}\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\nfunction getCheckedState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nfunction focusFirst(candidates) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nfunction getNextMatch(values, search, currentMatch) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1;\n let wrappedValues = wrapArray(values, Math.max(currentMatchIndex, 0));\n const excludeCurrentMatch = normalizedSearch.length === 1;\n if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v) => v !== currentMatch);\n const nextMatch = wrappedValues.find(\n (value) => value.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextMatch !== currentMatch ? nextMatch : void 0;\n}\nfunction isPointInPolygon(point, polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const ii = polygon[i];\n const jj = polygon[j];\n const xi = ii.x;\n const yi = ii.y;\n const xj = jj.x;\n const yj = jj.y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\nfunction isPointerInGraceArea(event, area) {\n if (!area) return false;\n const cursorPos = { x: event.clientX, y: event.clientY };\n return isPointInPolygon(cursorPos, area);\n}\nfunction whenMouse(handler) {\n return (event) => event.pointerType === \"mouse\" ? handler(event) : void 0;\n}\nvar Root3 = Menu;\nvar Anchor2 = MenuAnchor;\nvar Portal = MenuPortal;\nvar Content2 = MenuContent;\nvar Group = MenuGroup;\nvar Label = MenuLabel;\nvar Item2 = MenuItem;\nvar CheckboxItem = MenuCheckboxItem;\nvar RadioGroup = MenuRadioGroup;\nvar RadioItem = MenuRadioItem;\nvar ItemIndicator = MenuItemIndicator;\nvar Separator = MenuSeparator;\nvar Arrow2 = MenuArrow;\nvar Sub = MenuSub;\nvar SubTrigger = MenuSubTrigger;\nvar SubContent = MenuSubContent;\nexport {\n Anchor2 as Anchor,\n Arrow2 as Arrow,\n CheckboxItem,\n Content2 as Content,\n Group,\n Item2 as Item,\n ItemIndicator,\n Label,\n Menu,\n MenuAnchor,\n MenuArrow,\n MenuCheckboxItem,\n MenuContent,\n MenuGroup,\n MenuItem,\n MenuItemIndicator,\n MenuLabel,\n MenuPortal,\n MenuRadioGroup,\n MenuRadioItem,\n MenuSeparator,\n MenuSub,\n MenuSubContent,\n MenuSubTrigger,\n Portal,\n RadioGroup,\n RadioItem,\n Root3 as Root,\n Separator,\n Sub,\n SubContent,\n SubTrigger,\n createMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dropdown-menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as MenuPrimitive from \"@radix-ui/react-menu\";\nimport { createMenuScope } from \"@radix-ui/react-menu\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DROPDOWN_MENU_NAME = \"DropdownMenu\";\nvar [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(\n DROPDOWN_MENU_NAME,\n [createMenuScope]\n);\nvar useMenuScope = createMenuScope();\nvar [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);\nvar DropdownMenu = (props) => {\n const {\n __scopeDropdownMenu,\n children,\n dir,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const triggerRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DROPDOWN_MENU_NAME\n });\n return /* @__PURE__ */ jsx(\n DropdownMenuProvider,\n {\n scope: __scopeDropdownMenu,\n triggerId: useId(),\n triggerRef,\n contentId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children: /* @__PURE__ */ jsx(MenuPrimitive.Root, { ...menuScope, open, onOpenChange: setOpen, dir, modal, children })\n }\n );\n};\nDropdownMenu.displayName = DROPDOWN_MENU_NAME;\nvar TRIGGER_NAME = \"DropdownMenuTrigger\";\nvar DropdownMenuTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;\n const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Anchor, { asChild: true, ...menuScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n id: context.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.open ? context.contentId : void 0,\n \"data-state\": context.open ? \"open\" : \"closed\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n ...triggerProps,\n ref: composeRefs(forwardedRef, context.triggerRef),\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onOpenToggle();\n if (!context.open) event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (disabled) return;\n if ([\"Enter\", \" \"].includes(event.key)) context.onOpenToggle();\n if (event.key === \"ArrowDown\") context.onOpenChange(true);\n if ([\"Enter\", \" \", \"ArrowDown\"].includes(event.key)) event.preventDefault();\n })\n }\n ) });\n }\n);\nDropdownMenuTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DropdownMenuPortal\";\nvar DropdownMenuPortal = (props) => {\n const { __scopeDropdownMenu, ...portalProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Portal, { ...menuScope, ...portalProps });\n};\nDropdownMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"DropdownMenuContent\";\nvar DropdownMenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...contentProps } = props;\n const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const hasInteractedOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.Content,\n {\n id: context.contentId,\n \"aria-labelledby\": context.triggerId,\n ...menuScope,\n ...contentProps,\n ref: forwardedRef,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n hasInteractedOutsideRef.current = false;\n event.preventDefault();\n }),\n onInteractOutside: composeEventHandlers(props.onInteractOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;\n }),\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n }\n);\nDropdownMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"DropdownMenuGroup\";\nvar DropdownMenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...groupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Group, { ...menuScope, ...groupProps, ref: forwardedRef });\n }\n);\nDropdownMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"DropdownMenuLabel\";\nvar DropdownMenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...labelProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Label, { ...menuScope, ...labelProps, ref: forwardedRef });\n }\n);\nDropdownMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"DropdownMenuItem\";\nvar DropdownMenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Item, { ...menuScope, ...itemProps, ref: forwardedRef });\n }\n);\nDropdownMenuItem.displayName = ITEM_NAME;\nvar CHECKBOX_ITEM_NAME = \"DropdownMenuCheckboxItem\";\nvar DropdownMenuCheckboxItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...checkboxItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.CheckboxItem, { ...menuScope, ...checkboxItemProps, ref: forwardedRef });\n});\nDropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"DropdownMenuRadioGroup\";\nvar DropdownMenuRadioGroup = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioGroupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioGroup, { ...menuScope, ...radioGroupProps, ref: forwardedRef });\n});\nDropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"DropdownMenuRadioItem\";\nvar DropdownMenuRadioItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioItem, { ...menuScope, ...radioItemProps, ref: forwardedRef });\n});\nDropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar INDICATOR_NAME = \"DropdownMenuItemIndicator\";\nvar DropdownMenuItemIndicator = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemIndicatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.ItemIndicator, { ...menuScope, ...itemIndicatorProps, ref: forwardedRef });\n});\nDropdownMenuItemIndicator.displayName = INDICATOR_NAME;\nvar SEPARATOR_NAME = \"DropdownMenuSeparator\";\nvar DropdownMenuSeparator = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...separatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Separator, { ...menuScope, ...separatorProps, ref: forwardedRef });\n});\nDropdownMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"DropdownMenuArrow\";\nvar DropdownMenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...arrowProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Arrow, { ...menuScope, ...arrowProps, ref: forwardedRef });\n }\n);\nDropdownMenuArrow.displayName = ARROW_NAME;\nvar DropdownMenuSub = (props) => {\n const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: \"DropdownMenuSub\"\n });\n return /* @__PURE__ */ jsx(MenuPrimitive.Sub, { ...menuScope, open, onOpenChange: setOpen, children });\n};\nvar SUB_TRIGGER_NAME = \"DropdownMenuSubTrigger\";\nvar DropdownMenuSubTrigger = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...subTriggerProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.SubTrigger, { ...menuScope, ...subTriggerProps, ref: forwardedRef });\n});\nDropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"DropdownMenuSubContent\";\nvar DropdownMenuSubContent = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...subContentProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.SubContent,\n {\n ...menuScope,\n ...subContentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nDropdownMenuSubContent.displayName = SUB_CONTENT_NAME;\nvar Root2 = DropdownMenu;\nvar Trigger = DropdownMenuTrigger;\nvar Portal2 = DropdownMenuPortal;\nvar Content2 = DropdownMenuContent;\nvar Group2 = DropdownMenuGroup;\nvar Label2 = DropdownMenuLabel;\nvar Item2 = DropdownMenuItem;\nvar CheckboxItem2 = DropdownMenuCheckboxItem;\nvar RadioGroup2 = DropdownMenuRadioGroup;\nvar RadioItem2 = DropdownMenuRadioItem;\nvar ItemIndicator2 = DropdownMenuItemIndicator;\nvar Separator2 = DropdownMenuSeparator;\nvar Arrow2 = DropdownMenuArrow;\nvar Sub2 = DropdownMenuSub;\nvar SubTrigger2 = DropdownMenuSubTrigger;\nvar SubContent2 = DropdownMenuSubContent;\nexport {\n Arrow2 as Arrow,\n CheckboxItem2 as CheckboxItem,\n Content2 as Content,\n DropdownMenu,\n DropdownMenuArrow,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuItemIndicator,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n Group2 as Group,\n Item2 as Item,\n ItemIndicator2 as ItemIndicator,\n Label2 as Label,\n Portal2 as Portal,\n RadioGroup2 as RadioGroup,\n RadioItem2 as RadioItem,\n Root2 as Root,\n Separator2 as Separator,\n Sub2 as Sub,\n SubContent2 as SubContent,\n SubTrigger2 as SubTrigger,\n Trigger,\n createDropdownMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[state=open]:bg-accent focus:bg-accent\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 text-sm font-semibold\", inset && \"pl-8\", className)}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator ref={ref} className={cn(\"-mx-1 my-1 h-px bg-muted\", className)} {...props} />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\n return <span className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)} {...props} />;\n};\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n};\n","import React from 'react';\r\nimport { Button } from '@/components/ui/button';\r\nimport { QuickAction } from '@/constants';\r\nimport { cn } from '@/lib/utils';\r\n\r\ninterface StylePresetSelectorProps {\r\n presets: QuickAction[];\r\n onSelect: (preset: QuickAction) => void;\r\n disabled?: boolean;\r\n activeId?: string;\r\n className?: string;\r\n variant?: 'default' | 'minimal' | 'compact';\r\n}\r\n\r\nexport const StylePresetSelector: React.FC<StylePresetSelectorProps> = ({\r\n presets,\r\n onSelect,\r\n disabled = false,\r\n activeId,\r\n className = '',\r\n variant = 'default',\r\n}) => {\r\n if (presets.length === 0) return null;\r\n\r\n return (\r\n <div className={cn(\"flex flex-wrap items-center gap-2\", className)}>\r\n {presets.map((preset) => (\r\n <Button\r\n key={preset.id}\r\n type=\"button\"\r\n variant={variant === 'minimal' ? 'ghost' : 'secondary'}\r\n size=\"sm\"\r\n disabled={disabled}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onSelect(preset);\r\n }}\r\n className={cn(\r\n variant === 'minimal'\r\n ? 'h-6 px-2.5 text-xs text-white border border-white/20 hover:bg-white/20 hover:text-white rounded-full bg-black/40 backdrop-blur-md shadow-sm transition-all duration-200 hover:scale-105'\r\n : 'h-8 px-3 text-xs',\r\n activeId === preset.id && 'ring-2 ring-primary bg-primary/20',\r\n \"transition-all duration-200\"\r\n )}\r\n title={preset.prompt}\r\n >\r\n {preset.icon && <span className=\"mr-1.5\">{preset.icon}</span>}\r\n <span>{preset.name}</span>\r\n </Button>\r\n ))}\r\n </div>\r\n );\r\n};\r\n","import { useState, useEffect, useRef } from 'react';\r\nimport { TransformWrapper, TransformComponent } from 'react-zoom-pan-pinch';\r\nimport { ArrowUp, ArrowDown, Upload, Info, FileText, Sparkles, Mic, MicOff, Plus, Trash2, Save, History, Wand2 } from 'lucide-react';\r\nimport { Button } from '@/components/ui/button';\r\nimport { Textarea } from '@/components/ui/textarea';\r\nimport PublishDialog from '@/components/PublishDialog';\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuSeparator,\r\n DropdownMenuTrigger,\r\n} from \"@/components/ui/dropdown-menu\";\r\nimport { T, translate } from \"@/i18n\";\r\nimport { QuickAction, DEFAULT_QUICK_ACTIONS } from \"@/constants\";\r\nimport { StylePresetSelector } from \"./StylePresetSelector\";\r\n\r\ninterface ImageLightboxProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n imageUrl: string;\r\n imageTitle: string;\r\n originalImageId?: string;\r\n onPromptSubmit?: (prompt: string) => void;\r\n onPublish?: (option: 'overwrite' | 'new' | 'version', imageUrl: string, title: string, description?: string, parentId?: string, collectionIds?: string[]) => void;\r\n isGenerating?: boolean;\r\n isPublishing?: boolean;\r\n showPrompt?: boolean;\r\n showPublish?: boolean;\r\n generatedImageUrl?: string;\r\n // Navigation props\r\n currentIndex?: number;\r\n totalCount?: number;\r\n onNavigate?: (direction: 'prev' | 'next') => void;\r\n onPreload?: (direction: 'prev' | 'next') => void;\r\n // Wizard features (optional)\r\n showWizardFeatures?: boolean;\r\n promptTemplates?: Array<{ name: string; template: string }>;\r\n onApplyTemplate?: (template: string) => void;\r\n onSaveTemplate?: () => void;\r\n onDeleteTemplate?: (index: number) => void;\r\n onOptimizePrompt?: () => void;\r\n isOptimizing?: boolean;\r\n onMicrophoneToggle?: () => void;\r\n isRecording?: boolean;\r\n isTranscribing?: boolean;\r\n showQuickPublish?: boolean;\r\n onQuickPublish?: () => void;\r\n prompt?: string;\r\n onPromptChange?: (value: string) => void;\r\n quickActions?: QuickAction[];\r\n // Prompt history\r\n promptHistory?: string[];\r\n historyIndex?: number;\r\n onNavigateHistory?: (direction: 'up' | 'down') => void;\r\n onManualPromptEdit?: () => void; // Callback to reset history index when user manually types\r\n // Wizard navigation\r\n onOpenInWizard?: () => void; // Open current image in full wizard\r\n}\r\n\r\nimport ResponsiveImage from './ResponsiveImage';\r\n\r\nexport default function ImageLightbox({\r\n isOpen,\r\n onClose,\r\n imageUrl,\r\n imageTitle,\r\n originalImageId,\r\n onPromptSubmit,\r\n onPublish,\r\n isGenerating = false,\r\n isPublishing = false,\r\n showPrompt = true,\r\n showPublish = false,\r\n generatedImageUrl,\r\n currentIndex,\r\n totalCount,\r\n onNavigate,\r\n onPreload,\r\n // Wizard features\r\n showWizardFeatures = false,\r\n promptTemplates = [],\r\n onApplyTemplate,\r\n onSaveTemplate,\r\n onDeleteTemplate,\r\n onOptimizePrompt,\r\n isOptimizing = false,\r\n onMicrophoneToggle,\r\n isRecording = false,\r\n isTranscribing = false,\r\n showQuickPublish = false,\r\n onQuickPublish,\r\n prompt: externalPrompt,\r\n onPromptChange,\r\n // Prompt history\r\n promptHistory = [],\r\n historyIndex = -1,\r\n onNavigateHistory,\r\n onManualPromptEdit,\r\n // Wizard navigation\r\n onOpenInWizard,\r\n quickActions = DEFAULT_QUICK_ACTIONS\r\n}: ImageLightboxProps) {\r\n const [lightboxLoaded, setLightboxLoaded] = useState(false);\r\n const [isPanning, setIsPanning] = useState(false);\r\n const [scale, setScale] = useState(1);\r\n const [internalPrompt, setInternalPrompt] = useState('');\r\n const [showPublishDialog, setShowPublishDialog] = useState(false);\r\n const [showPromptField, setShowPromptField] = useState(false);\r\n const [showInfoPopup, setShowInfoPopup] = useState(false);\r\n const panStartRef = useRef<{ x: number; y: number } | null>(null);\r\n const tapTimeoutRef = useRef<NodeJS.Timeout | null>(null);\r\n const lastTapRef = useRef<number>(0);\r\n const swipeStartRef = useRef<{ x: number; y: number; time: number } | null>(null);\r\n const isSwipingRef = useRef(false);\r\n const isPanningRef = useRef(false);\r\n\r\n // Use external prompt if provided (controlled), otherwise internal state (uncontrolled)\r\n const lightboxPrompt = externalPrompt !== undefined ? externalPrompt : internalPrompt;\r\n const setLightboxPrompt = (value: string) => {\r\n if (onPromptChange) {\r\n onPromptChange(value);\r\n } else {\r\n setInternalPrompt(value);\r\n }\r\n };\r\n\r\n // Preload image when lightbox opens\r\n useEffect(() => {\r\n if (isOpen) {\r\n // Ensure prompt field is hidden by default when opening\r\n setShowPromptField(false);\r\n }\r\n }, [isOpen]);\r\n\r\n // Handle keyboard events\r\n useEffect(() => {\r\n if (!isOpen) return;\r\n\r\n const handleKeyDown = (event: KeyboardEvent) => {\r\n // Check if user is typing in the textarea or any input field\r\n const target = event.target as HTMLElement;\r\n const isTypingInInput = target instanceof HTMLTextAreaElement ||\r\n target instanceof HTMLInputElement ||\r\n target?.contentEditable === 'true' ||\r\n target?.tagName === 'TEXTAREA' ||\r\n target?.tagName === 'INPUT';\r\n\r\n\r\n if (event.key === 'Escape') {\r\n if (isTypingInInput) {\r\n // If typing in input, ESC should hide prompt and clear text (handled in textarea onKeyDown)\r\n return;\r\n }\r\n onClose();\r\n } else if (event.key === 'ArrowUp' && event.ctrlKey && onNavigateHistory) {\r\n // Ctrl+ArrowUp for prompt history navigation\r\n event.preventDefault();\r\n onNavigateHistory('up');\r\n } else if (event.key === 'ArrowDown' && event.ctrlKey && onNavigateHistory) {\r\n // Ctrl+ArrowDown for prompt history navigation\r\n event.preventDefault();\r\n onNavigateHistory('down');\r\n } else if (event.key === 'ArrowLeft' && !isTypingInInput && onNavigate) {\r\n event.preventDefault();\r\n onNavigate('prev');\r\n } else if (event.key === 'ArrowRight' && !isTypingInInput && onNavigate) {\r\n event.preventDefault();\r\n onNavigate('next');\r\n } else if (event.key === ' ' && !isTypingInInput && showPrompt) {\r\n // Spacebar to toggle prompt field (only when not typing)\r\n event.preventDefault();\r\n setShowPromptField(!showPromptField);\r\n }\r\n };\r\n\r\n document.addEventListener('keydown', handleKeyDown);\r\n return () => document.removeEventListener('keydown', handleKeyDown);\r\n }, [isOpen, onClose, onNavigate, currentIndex, totalCount, showPrompt, showPromptField, onNavigateHistory]);\r\n\r\n // Cleanup timeout on unmount\r\n useEffect(() => {\r\n return () => {\r\n if (tapTimeoutRef.current) {\r\n clearTimeout(tapTimeoutRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n // Swipe detection functions\r\n const handleSwipeStart = (clientX: number, clientY: number) => {\r\n swipeStartRef.current = { x: clientX, y: clientY, time: Date.now() };\r\n isSwipingRef.current = false;\r\n };\r\n\r\n const handleSwipeEnd = (clientX: number, clientY: number) => {\r\n if (!swipeStartRef.current || !onNavigate) {\r\n return;\r\n }\r\n\r\n const deltaX = clientX - swipeStartRef.current.x;\r\n const deltaY = clientY - swipeStartRef.current.y;\r\n const deltaTime = Date.now() - swipeStartRef.current.time;\r\n\r\n // Swipe thresholds\r\n const minSwipeDistance = 50; // Minimum distance for a swipe\r\n const maxSwipeTime = 500; // Maximum time for a swipe (ms)\r\n const maxVerticalDistance = 100; // Maximum vertical movement for horizontal swipe\r\n\r\n // Check if this is a valid horizontal swipe\r\n if (\r\n Math.abs(deltaX) > minSwipeDistance &&\r\n Math.abs(deltaY) < maxVerticalDistance &&\r\n deltaTime < maxSwipeTime &&\r\n !isPanning // Don't trigger swipe if user was panning/zooming\r\n ) {\r\n if (deltaX > 0) {\r\n // Swipe right = previous image\r\n onNavigate('prev');\r\n } else if (deltaX < 0) {\r\n // Swipe left = next image \r\n onNavigate('next');\r\n }\r\n }\r\n\r\n swipeStartRef.current = null;\r\n isSwipingRef.current = false;\r\n };\r\n\r\n const handlePromptSubmit = () => {\r\n if (lightboxPrompt.trim() && !isGenerating && onPromptSubmit) {\r\n onPromptSubmit(lightboxPrompt);\r\n // Don't clear the prompt - keep it for reference/reuse\r\n }\r\n };\r\n\r\n const handlePublishClick = () => {\r\n setShowPublishDialog(true);\r\n };\r\n\r\n const handlePublish = (option: 'overwrite' | 'new' | 'version', title: string, description?: string, parentId?: string, collectionIds?: string[]) => {\r\n if (onPublish) {\r\n const urlToPublish = generatedImageUrl || imageUrl;\r\n onPublish(option, urlToPublish, title, description, parentId, collectionIds);\r\n }\r\n setShowPublishDialog(false);\r\n };\r\n\r\n if (!isOpen) return null;\r\n\r\n\r\n return (\r\n <div\r\n className=\"fixed inset-0 bg-black/95 z-[9999] flex items-center justify-center\"\r\n onClick={(e) => {\r\n // Only close if clicking on the main background (not on image area)\r\n if (e.target === e.currentTarget) {\r\n if (showPrompt) {\r\n setShowPromptField(!showPromptField);\r\n } else {\r\n onClose();\r\n }\r\n }\r\n }}\r\n onTouchStart={(e) => {\r\n // Only handle swipe on the main container, not on child elements\r\n if (e.target === e.currentTarget) {\r\n const touch = e.touches[0];\r\n handleSwipeStart(touch.clientX, touch.clientY);\r\n }\r\n }}\r\n onTouchEnd={(e) => {\r\n // Only handle swipe on the main container, not on child elements\r\n if (e.target === e.currentTarget) {\r\n const touch = e.changedTouches[0];\r\n handleSwipeEnd(touch.clientX, touch.clientY);\r\n }\r\n }}\r\n >\r\n <div className=\"relative w-full h-full flex items-center justify-center\">\r\n <div className=\"relative w-full h-full flex items-center justify-center\">\r\n <TransformWrapper\r\n initialScale={1}\r\n minScale={1}\r\n maxScale={40}\r\n centerOnInit={true}\r\n centerZoomedOut={true}\r\n limitToBounds={true}\r\n\r\n alignmentAnimation={{ animationTime: 200, animationType: 'easeOut' }}\r\n wheel={{ step: 1 }}\r\n doubleClick={{ disabled: false, step: 0.7 }}\r\n pinch={{ step: 20 }}\r\n onTransformed={(e) => setScale(e.state.scale)}\r\n >\r\n <TransformComponent\r\n wrapperClass=\"w-full h-full\"\r\n contentClass=\"\"\r\n >\r\n <ResponsiveImage\r\n src={generatedImageUrl || imageUrl}\r\n alt={imageTitle}\r\n sizes={`${Math.ceil(scale * 100)}vw`}\r\n responsiveSizes={[640, 1024, 2048]}\r\n imgClassName=\"max-w-[90vw] max-h-[90vh] object-contain cursor-grab active:cursor-grabbing pointer-events-auto\"\r\n className=\"w-full h-full flex items-center justify-center\"\r\n loading=\"eager\"\r\n draggable={false}\r\n onLoad={() => setLightboxLoaded(true)}\r\n onClick={(e: React.MouseEvent) => {\r\n // Only toggle controls if we haven't been panning\r\n if (!isPanningRef.current && showPrompt) {\r\n e.stopPropagation();\r\n setShowPromptField(!showPromptField);\r\n }\r\n }}\r\n />\r\n </TransformComponent>\r\n </TransformWrapper>\r\n </div>\r\n {!lightboxLoaded && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none z-10\">\r\n <div className=\"w-12 h-12 border-4 border-white/30 border-t-white rounded-full animate-spin\"></div>\r\n </div>\r\n )}\r\n\r\n {/* Close Button */}\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onClose();\r\n }}\r\n className=\"absolute top-4 right-4 text-white text-2xl p-4 bg-black/75 rounded-lg hover:bg-black/90 transition-all duration-200 z-20\"\r\n title=\"Close (ESC)\"\r\n >\r\n ×\r\n </button>\r\n\r\n {/* Navigation Buttons - show if navigation function exists and we have valid navigation data */}\r\n {onNavigate && currentIndex !== undefined && totalCount !== undefined && totalCount > 1 && (\r\n <>\r\n {currentIndex > 0 && (\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onNavigate('prev');\r\n }}\r\n className=\"absolute left-4 top-1/2 transform -translate-y-1/2 p-4 text-white text-3xl bg-black/75 rounded-lg hover:bg-black/90 transition-all duration-200\"\r\n style={{ zIndex: 50 }}\r\n title=\"Previous (←)\"\r\n >\r\n ‹\r\n </button>\r\n )}\r\n\r\n {currentIndex < totalCount - 1 && (\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onNavigate('next');\r\n }}\r\n className=\"absolute right-4 top-1/2 transform -translate-y-1/2 p-4 text-white text-3xl bg-black/75 rounded-lg hover:bg-black/90 transition-all duration-200\"\r\n style={{ zIndex: 50 }}\r\n title=\"Next (→)\"\r\n >\r\n ›\r\n </button>\r\n )}\r\n </>\r\n )}\r\n\r\n {/* Quick Prompt Field */}\r\n {showPrompt && showPromptField && lightboxLoaded && (\r\n <div\r\n className=\"absolute bottom-4 left-1/2 transform -translate-x-1/2 w-[90vw] md:w-[80vw] max-w-4xl z-40\"\r\n onClick={(e) => {\r\n // Allow clicking outside the prompt container to hide it\r\n if (e.target === e.currentTarget) {\r\n setShowPromptField(false);\r\n }\r\n }}\r\n >\r\n <div\r\n className=\"bg-black/80 backdrop-blur-sm rounded-xl p-3 md:p-4 shadow-2xl border border-white/20\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {showWizardFeatures ? (\r\n /* Wizard Mode: Textarea + Separate Actions Row */\r\n <>\r\n {/* Prompt History Indicator */}\r\n {promptHistory.length > 0 && (\r\n <div className=\"flex items-center justify-between mb-2 text-xs\">\r\n <span className=\"text-white/60\">\r\n History: {historyIndex >= 0 ? `${historyIndex + 1}/${promptHistory.length}` : 'Current'}\r\n </span>\r\n <div className=\"flex items-center gap-1\">\r\n {/* History Picker Dropdown */}\r\n <DropdownMenu modal={false}>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"h-6 w-6 p-0 text-white hover:text-primary\"\r\n title=\"Browse prompt history\"\r\n >\r\n <History className=\"h-3 w-3\" />\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"end\" className=\"w-80 max-h-64 overflow-y-auto z-[10000]\">\r\n {promptHistory.length === 0 ? (\r\n <div className=\"px-2 py-3 text-sm text-muted-foreground text-center\">\r\n <T>No history yet</T>\r\n </div>\r\n ) : (\r\n <>\r\n {[...promptHistory].reverse().map((historyPrompt, reverseIndex) => {\r\n const actualIndex = promptHistory.length - 1 - reverseIndex;\r\n return (\r\n <DropdownMenuItem\r\n key={actualIndex}\r\n onSelect={() => {\r\n setLightboxPrompt(historyPrompt);\r\n }}\r\n className={`flex flex-col items-start gap-1 py-2 ${historyIndex === actualIndex ? 'bg-primary/10' : ''\r\n }`}\r\n >\r\n <div className=\"text-xs text-muted-foreground\">\r\n #{promptHistory.length - reverseIndex}\r\n {historyIndex === actualIndex && ' (current)'}\r\n </div>\r\n <div className=\"text-sm line-clamp-2 w-full\">\r\n {historyPrompt}\r\n </div>\r\n </DropdownMenuItem>\r\n );\r\n })}\r\n </>\r\n )}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onNavigateHistory?.('up');\r\n }}\r\n disabled={promptHistory.length === 0 || historyIndex === promptHistory.length - 1}\r\n className=\"h-6 w-6 p-0 text-white hover:text-primary disabled:opacity-30\"\r\n title=\"Previous prompt (Ctrl+↑)\"\r\n >\r\n <ArrowUp className=\"h-3 w-3\" />\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onNavigateHistory?.('down');\r\n }}\r\n disabled={historyIndex === -1}\r\n className=\"h-6 w-6 p-0 text-white hover:text-primary disabled:opacity-30\"\r\n title=\"Next prompt (Ctrl+↓)\"\r\n >\r\n <ArrowUp className=\"h-3 w-3 rotate-180\" />\r\n </Button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Input Row */}\r\n <div className=\"flex gap-2 mb-2 md:mb-0\">\r\n <div className=\"flex-1 relative\">\r\n <Textarea\r\n value={lightboxPrompt}\r\n onChange={(e) => {\r\n setLightboxPrompt(e.target.value);\r\n onManualPromptEdit?.(); // Reset history index when manually typing\r\n }}\r\n placeholder={translate(\"Quick edit prompt...\")}\r\n disabled={isGenerating}\r\n rows={2}\r\n className=\"w-full bg-white/10 border border-white/30 rounded-lg px-3 py-2 pr-10 text-white placeholder-white/60 focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent backdrop-blur-sm disabled:opacity-50 resize-none text-sm md:text-base\"\r\n onKeyDown={(e) => {\r\n if ((e.key === 'Enter' && e.ctrlKey) || (e.key === 'Enter' && !e.shiftKey && lightboxPrompt.trim() && !isGenerating)) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n handlePromptSubmit();\r\n if (!e.ctrlKey) {\r\n setLightboxPrompt('');\r\n }\r\n } else if (e.key === 'ArrowUp' && e.ctrlKey) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n onNavigateHistory?.('up');\r\n } else if (e.key === 'ArrowDown' && e.ctrlKey) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n onNavigateHistory?.('down');\r\n } else if (e.key === 'Escape') {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n setLightboxPrompt('');\r\n } else if (e.key.startsWith('Arrow') || e.key === 'Delete' || e.key === 'Backspace') {\r\n e.stopPropagation();\r\n }\r\n }}\r\n onClick={(e) => e.stopPropagation()}\r\n />\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onMicrophoneToggle?.();\r\n }}\r\n disabled={isTranscribing}\r\n className={`absolute right-2 bottom-2 p-1 rounded-md transition-colors ${isRecording\r\n ? 'bg-red-600/80 text-white hover:bg-red-700'\r\n : 'text-white/60 hover:text-white hover:bg-white/10'\r\n }`}\r\n title={isRecording ? 'Stop recording' : 'Record audio'}\r\n >\r\n {isTranscribing ? (\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white border-t-transparent\"></div>\r\n ) : isRecording ? (\r\n <MicOff size={16} />\r\n ) : (\r\n <Mic size={16} />\r\n )}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {/* Style Presets - Minimal Row */}\r\n <div className=\"mb-2 mt-2\">\r\n <StylePresetSelector\r\n presets={quickActions}\r\n onSelect={(preset) => {\r\n const current = lightboxPrompt || '';\r\n const trimmed = current.trim();\r\n const separator = trimmed ? ', ' : '';\r\n setLightboxPrompt(`${trimmed}${separator}${preset.prompt}`);\r\n }}\r\n variant=\"minimal\"\r\n disabled={isGenerating}\r\n />\r\n </div>\r\n\r\n {/* Actions Row - Separate on mobile */}\r\n <div className=\"flex gap-2 flex-wrap md:flex-nowrap\">\r\n {/* Templates Dropdown */}\r\n <DropdownMenu modal={false}>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n onClick={(e) => e.stopPropagation()}\r\n variant=\"ghost\"\r\n className=\"text-white hover:text-primary disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title={translate(\"Prompt Templates\")}\r\n >\r\n <FileText size={20} className=\"md:w-5 md:h-5\" />\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"end\" className=\"w-64 z-[10000]\">\r\n {promptTemplates.length === 0 ? (\r\n <div className=\"px-2 py-3 text-sm text-muted-foreground text-center\">\r\n <T>No templates saved yet</T>\r\n </div>\r\n ) : (\r\n <>\r\n {promptTemplates.map((template, index) => (\r\n <DropdownMenuItem\r\n key={index}\r\n onSelect={() => onApplyTemplate?.(template.template)}\r\n className=\"flex items-center justify-between group\"\r\n >\r\n <span className=\"flex-1 truncate\">{template.name}</span>\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onDeleteTemplate?.(index);\r\n }}\r\n className=\"opacity-0 group-hover:opacity-100 ml-2 p-1 hover:bg-destructive/20 rounded\"\r\n title={translate(\"Delete template\")}\r\n >\r\n <Trash2 className=\"h-3 w-3 text-destructive\" />\r\n </button>\r\n </DropdownMenuItem>\r\n ))}\r\n <DropdownMenuSeparator />\r\n </>\r\n )}\r\n <DropdownMenuItem onSelect={() => onSaveTemplate?.()}>\r\n <Plus className=\"h-3 w-3 mr-2\" />\r\n <T>Save current as template</T>\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n {onOpenInWizard && (\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onOpenInWizard();\r\n }}\r\n variant=\"ghost\"\r\n className=\"text-white hover:text-purple-400 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title={translate(\"Open in AI Wizard for advanced editing\")}\r\n >\r\n <Wand2 size={20} className=\"md:w-5 md:h-5\" />\r\n </Button>\r\n )}\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onOptimizePrompt?.();\r\n }}\r\n disabled={isOptimizing || !lightboxPrompt.trim()}\r\n variant=\"ghost\"\r\n className=\"text-white hover:text-primary disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title={translate(\"Optimize prompt with AI\")}\r\n >\r\n {isOptimizing ? (\r\n <div className=\"animate-spin rounded-full h-5 w-5 border-2 border-white border-t-transparent\"></div>\r\n ) : (\r\n <Sparkles size={20} className=\"md:w-5 md:h-5\" />\r\n )}\r\n </Button>\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n if (lightboxPrompt.trim() && !isGenerating) {\r\n handlePromptSubmit();\r\n setLightboxPrompt('');\r\n }\r\n }}\r\n disabled={!lightboxPrompt.trim() || isGenerating}\r\n variant=\"ghost\"\r\n className=\"text-primary hover:text-primary/80 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title=\"Generate (Enter to submit)\"\r\n >\r\n {isGenerating ? (\r\n <div className=\"animate-spin rounded-full h-5 w-5 border-2 border-primary border-t-transparent\"></div>\r\n ) : (\r\n <ArrowUp size={20} className=\"md:w-5 md:h-5\" />\r\n )}\r\n </Button>\r\n {showQuickPublish && (\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onQuickPublish?.();\r\n }}\r\n disabled={isPublishing}\r\n variant=\"ghost\"\r\n className=\"text-green-500 hover:text-green-400 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title=\"Quick Publish with prompt as description\"\r\n >\r\n {isPublishing ? (\r\n <div className=\"animate-spin rounded-full h-5 w-5 border-2 border-green-500 border-t-transparent\"></div>\r\n ) : (\r\n <Upload size={20} className=\"md:w-5 md:h-5\" />\r\n )}\r\n </Button>\r\n )}\r\n {showPublish && (\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handlePublishClick();\r\n }}\r\n disabled={isPublishing}\r\n variant=\"ghost\"\r\n className=\"text-green-500 hover:text-green-400 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title=\"Publish to gallery with options\"\r\n >\r\n {isPublishing ? (\r\n <div className=\"animate-spin rounded-full h-5 w-5 border-2 border-green-500 border-t-transparent\"></div>\r\n ) : (\r\n <Save size={20} className=\"md:w-5 md:h-5\" />\r\n )}\r\n </Button>\r\n )}\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setShowPromptField(false);\r\n }}\r\n variant=\"ghost\"\r\n className=\"text-white/60 hover:text-white p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0 md:ml-auto\"\r\n title={translate(\"Hide prompt\")}\r\n type=\"button\"\r\n >\r\n <ArrowDown size={20} className=\"md:w-5 md:h-5\" />\r\n </Button>\r\n </div>\r\n </>\r\n ) : (\r\n /* Simple Mode: Same layout as wizard, fewer buttons */\r\n <>\r\n {/* Input Row */}\r\n <div className=\"flex gap-2 mb-2 md:mb-0\">\r\n <div className=\"flex-1 relative\">\r\n <Textarea\r\n value={lightboxPrompt}\r\n onChange={(e) => {\r\n setLightboxPrompt(e.target.value);\r\n onManualPromptEdit?.(); // Reset history index when manually typing\r\n }}\r\n placeholder={translate(\"Quick edit prompt...\")}\r\n disabled={isGenerating}\r\n rows={2}\r\n className=\"w-full bg-white/10 border border-white/30 rounded-lg px-3 py-2 text-white placeholder-white/60 focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent backdrop-blur-sm disabled:opacity-50 resize-none text-sm md:text-base\"\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter' && !e.shiftKey && lightboxPrompt.trim() && !isGenerating) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n handlePromptSubmit();\r\n } else if (e.key === 'Escape') {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n setLightboxPrompt('');\r\n } else if (e.key.startsWith('Arrow') || e.key === 'Delete' || e.key === 'Backspace') {\r\n e.stopPropagation();\r\n }\r\n }}\r\n onClick={(e) => e.stopPropagation()}\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Style Presets - Minimal Row (Simple Mode) */}\r\n <div className=\"mb-2 mt-2\">\r\n <StylePresetSelector\r\n presets={quickActions}\r\n onSelect={(preset) => {\r\n const current = lightboxPrompt || '';\r\n const trimmed = current.trim();\r\n const separator = trimmed ? ', ' : '';\r\n setLightboxPrompt(`${trimmed}${separator}${preset.prompt}`);\r\n }}\r\n variant=\"minimal\"\r\n disabled={isGenerating}\r\n />\r\n </div>\r\n\r\n {/* Actions Row - Simple mode */}\r\n <div className=\"flex gap-2\">\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n if (lightboxPrompt.trim() && !isGenerating) {\r\n handlePromptSubmit();\r\n }\r\n }}\r\n disabled={!lightboxPrompt.trim() || isGenerating}\r\n variant=\"ghost\"\r\n className=\"text-primary hover:text-primary/80 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title=\"Generate (Enter to submit)\"\r\n >\r\n {isGenerating ? (\r\n <div className=\"animate-spin rounded-full h-5 w-5 border-2 border-primary border-t-transparent\"></div>\r\n ) : (\r\n <ArrowUp size={20} className=\"md:w-5 md:h-5\" />\r\n )}\r\n </Button>\r\n {showPublish && (\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handlePublishClick();\r\n }}\r\n disabled={isPublishing}\r\n variant=\"ghost\"\r\n className=\"text-green-500 hover:text-green-400 disabled:opacity-50 p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title=\"Publish to gallery\"\r\n >\r\n {isPublishing ? (\r\n <div className=\"animate-spin rounded-full h-5 w-5 border-2 border-green-500 border-t-transparent\"></div>\r\n ) : (\r\n <Save size={20} className=\"md:w-5 md:h-5\" />\r\n )}\r\n </Button>\r\n )}\r\n <Button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setShowPromptField(false);\r\n }}\r\n variant=\"ghost\"\r\n className=\"text-white/60 hover:text-white p-2.5 md:p-2 transition-colors duration-200 min-w-[44px] md:min-w-0\"\r\n title={translate(\"Hide prompt\")}\r\n type=\"button\"\r\n >\r\n <ArrowDown size={20} className=\"md:w-5 md:h-5\" />\r\n </Button>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n {/* Prompt Toggle Button - shown when prompt is hidden */}\r\n {\r\n showPrompt && !showPromptField && lightboxLoaded && (\r\n <div className=\"absolute bottom-4 left-1/2 transform -translate-x-1/2 z-50\">\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setShowPromptField(true);\r\n }}\r\n className=\"bg-primary/80 hover:bg-primary text-primary-foreground p-2 rounded-full shadow-lg transition-all duration-200 hover:scale-110\"\r\n title=\"Show prompt field (Space)\"\r\n >\r\n <Wand2 size={20} />\r\n </button>\r\n </div>\r\n )\r\n }\r\n\r\n {/* Info Popup */}\r\n {\r\n showInfoPopup && lightboxLoaded && showPromptField && (\r\n <div\r\n className=\"absolute bottom-16 left-1/2 transform -translate-x-1/2 bg-black/80 backdrop-blur-md text-white px-4 py-3 rounded-lg text-sm max-w-md text-center border border-white/20 z-50\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {isPublishing ? (\r\n <div className=\"flex items-center justify-center gap-2\">\r\n <div className=\"animate-spin rounded-full h-3 w-3 border-2 border-white border-t-transparent\"></div>\r\n <span>Publishing... • ESC to close</span>\r\n </div>\r\n ) : (\r\n <div className=\"space-y-2\">\r\n <div className=\"font-medium\">{imageTitle}</div>\r\n {currentIndex !== undefined && totalCount !== undefined && (\r\n <div className=\"text-white/80 text-xs\">{currentIndex + 1} of {totalCount}</div>\r\n )}\r\n <div className=\"text-white/70 text-xs space-y-1\">\r\n <div>• Enter: generate</div>\r\n <div>• Space/Click: hide prompt</div>\r\n {showWizardFeatures && promptHistory.length > 0 && (\r\n <div>• Ctrl+↑↓: prompt history</div>\r\n )}\r\n {onNavigate && totalCount && totalCount > 1 && (\r\n <div>• ← → keys or swipe: navigate</div>\r\n )}\r\n <div>• ESC: close lightbox</div>\r\n </div>\r\n </div>\r\n )}\r\n {/* Close popup when clicking outside */}\r\n <div\r\n className=\"fixed inset-0 z-[-1]\"\r\n onClick={() => setShowInfoPopup(false)}\r\n />\r\n </div>\r\n )\r\n }\r\n </div >\r\n\r\n <PublishDialog\r\n isOpen={showPublishDialog}\r\n onClose={() => setShowPublishDialog(false)}\r\n onPublish={handlePublish}\r\n originalTitle={imageTitle}\r\n originalImageId={originalImageId}\r\n isPublishing={isPublishing}\r\n />\r\n </div >\r\n );\r\n}\r\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n React.useCallback(() => selector(api.getState()), [api, selector]),\n React.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...args) => api.dispatch(...args), ...initial };\n};\nconst redux = reduxImpl;\n\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api) return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst removeStoreFromTrackedConnections = (name, store) => {\n if (store === void 0) return;\n const connectionInfo = trackedConnections.get(name);\n if (!connectionInfo) return;\n delete connectionInfo.stores[store];\n if (Object.keys(connectionInfo.stores).length === 0) {\n trackedConnections.delete(name);\n }\n};\nconst findCallerName = (stack) => {\n var _a, _b;\n if (!stack) return void 0;\n const traceLines = stack.split(\"\\n\");\n const apiSetStateLineIndex = traceLines.findIndex(\n (traceLine) => traceLine.includes(\"api.setState\")\n );\n if (apiSetStateLineIndex < 0) return void 0;\n const callerLine = ((_a = traceLines[apiSetStateLineIndex + 1]) == null ? void 0 : _a.trim()) || \"\";\n return (_b = /.+ (.+) .+/.exec(callerLine)) == null ? void 0 : _b[1];\n};\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = ((state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording) return r;\n const action = nameOrAction === void 0 ? {\n type: anonymousActionType || findCallerName(new Error().stack) || \"anonymous\"\n } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n });\n api.devtools = {\n cleanup: () => {\n if (connection && typeof connection.unsubscribe === \"function\") {\n connection.unsubscribe();\n }\n removeStoreFromTrackedConnections(options.name, store);\n }\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (api.dispatchFromDevtools && typeof api.dispatch === \"function\") {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...args) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && args[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...args);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format.\n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (!api.dispatchFromDevtools) return;\n if (typeof api.dispatch !== \"function\") return;\n api.dispatch(action);\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState) return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, fn) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0) fn(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = ((selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n });\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nfunction combine(initialState, create) {\n return (...args) => Object.assign({}, initialState, create(...args));\n}\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(name, JSON.stringify(newValue, options == null ? void 0 : options.replacer)),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst persistImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n let hydrationVersion = 0;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n return setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n return setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage) return;\n const currentVersion = ++hydrationVersion;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n const migration = options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n if (migration instanceof Promise) {\n return migration.then((result) => [true, result]);\n }\n return [true, migration];\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return [false, deserializedStorageValue.state];\n }\n }\n return [false, void 0];\n }).then((migrationResult) => {\n var _a2;\n if (currentVersion !== hydrationVersion) {\n return;\n }\n const [migrated, migratedState] = migrationResult;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n if (migrated) {\n return setItem();\n }\n }).then(() => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persist = persistImpl;\n\nfunction ssrSafe(config, isSSR = typeof window === \"undefined\") {\n return (set, get, api) => {\n if (!isSSR) {\n return config(set, get, api);\n }\n const ssrSet = () => {\n throw new Error(\"Cannot set state of Zustand store in SSR\");\n };\n api.setState = ssrSet;\n return config(ssrSet, get, api);\n };\n}\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector, ssrSafe as unstable_ssrSafe };\n","import { create } from 'zustand';\r\nimport { persist, createJSONStorage } from 'zustand/middleware';\r\n\r\n// Types\r\nexport interface NavigationPost {\r\n id: string;\r\n title: string;\r\n image_url: string;\r\n user_id: string;\r\n}\r\n\r\nexport interface NavigationData {\r\n posts: NavigationPost[];\r\n currentIndex: number;\r\n source: 'home' | 'collection' | 'tag' | 'search' | 'user' | 'photogrid';\r\n sourceId?: string;\r\n}\r\n\r\nexport interface NavigationHistory {\r\n path: string;\r\n data: NavigationData;\r\n timestamp: number;\r\n}\r\n\r\nexport interface WizardInitialImage {\r\n id: string;\r\n src: string;\r\n title: string;\r\n realDatabaseId?: string;\r\n selected: boolean;\r\n}\r\n\r\ninterface NavigationStore {\r\n // Current navigation state\r\n navigationData: NavigationData | null;\r\n\r\n // Navigation history stack\r\n history: NavigationHistory[];\r\n\r\n // Wizard state (replaces sessionStorage)\r\n wizardInitialImage: WizardInitialImage | null;\r\n wizardReturnPath: string | null;\r\n\r\n // Global Creation Wizard state\r\n creationWizardOpen: boolean;\r\n creationWizardMode: 'default' | 'page'; // Add more modes if needed\r\n\r\n // Actions\r\n setNavigationData: (data: NavigationData | null) => void;\r\n updateCurrentIndex: (index: number) => void;\r\n\r\n // History management\r\n pushHistory: (path: string, data: NavigationData) => void;\r\n popHistory: () => NavigationHistory | null;\r\n clearHistory: () => void;\r\n canGoBack: () => boolean;\r\n\r\n // Wizard actions\r\n setWizardImage: (image: WizardInitialImage | null, returnPath?: string) => void;\r\n clearWizardImage: () => void;\r\n setCreationWizardOpen: (open: boolean, mode?: 'default' | 'page') => void;\r\n\r\n // Preloading\r\n preloadImage: (url: string) => void;\r\n\r\n // Reset all\r\n reset: () => void;\r\n}\r\n\r\n// Preload image helper\r\nconst preloadImageHelper = (url: string) => {\r\n if (!url) return;\r\n const img = new Image();\r\n img.src = url;\r\n};\r\n\r\nexport const useNavigationStore = create<NavigationStore>()(\r\n persist(\r\n (set, get) => ({\r\n // Initial state\r\n navigationData: null,\r\n history: [],\r\n wizardInitialImage: null,\r\n wizardReturnPath: null,\r\n creationWizardOpen: false,\r\n creationWizardMode: 'default',\r\n\r\n // Set navigation data\r\n setNavigationData: (data) => {\r\n set({ navigationData: data });\r\n },\r\n\r\n // Update just the current index (faster than full data update)\r\n updateCurrentIndex: (index) => {\r\n const current = get().navigationData;\r\n if (current) {\r\n set({\r\n navigationData: { ...current, currentIndex: index }\r\n });\r\n }\r\n },\r\n\r\n // Push navigation to history stack\r\n pushHistory: (path, data) => {\r\n const state = get();\r\n const newHistory = [...state.history, {\r\n path,\r\n data,\r\n timestamp: Date.now()\r\n }];\r\n\r\n // Limit history to 50 entries\r\n const limitedHistory = newHistory.slice(-50);\r\n\r\n set({\r\n history: limitedHistory,\r\n navigationData: data\r\n });\r\n },\r\n\r\n // Pop from history stack\r\n popHistory: () => {\r\n const state = get();\r\n if (state.history.length === 0) return null;\r\n\r\n const newHistory = [...state.history];\r\n const previous = newHistory.pop()!;\r\n\r\n const previousData = newHistory.length > 0\r\n ? newHistory[newHistory.length - 1].data\r\n : null;\r\n\r\n set({\r\n history: newHistory,\r\n navigationData: previousData\r\n });\r\n\r\n return previous;\r\n },\r\n\r\n // Clear history\r\n clearHistory: () => {\r\n set({ history: [] });\r\n },\r\n\r\n // Check if can go back\r\n canGoBack: () => {\r\n return get().history.length > 1;\r\n },\r\n\r\n // Set wizard image (replaces sessionStorage)\r\n setWizardImage: (image, returnPath) => {\r\n set({\r\n wizardInitialImage: image,\r\n wizardReturnPath: returnPath || null\r\n });\r\n },\r\n\r\n // Clear wizard image\r\n clearWizardImage: () => {\r\n set({\r\n wizardInitialImage: null,\r\n wizardReturnPath: null\r\n });\r\n },\r\n\r\n // Set global creation wizard open state\r\n setCreationWizardOpen: (open, mode = 'default') => {\r\n set({\r\n creationWizardOpen: open,\r\n creationWizardMode: mode\r\n });\r\n },\r\n\r\n // Preload image\r\n preloadImage: (url) => {\r\n preloadImageHelper(url);\r\n },\r\n\r\n // Reset entire store\r\n reset: () => {\r\n set({\r\n navigationData: null,\r\n history: [],\r\n wizardInitialImage: null,\r\n wizardReturnPath: null,\r\n creationWizardOpen: false,\r\n creationWizardMode: 'default'\r\n });\r\n }\r\n }),\r\n {\r\n name: 'pm-pics-navigation', // localStorage key\r\n storage: createJSONStorage(() => localStorage), // Use localStorage\r\n\r\n // Only persist certain fields (not history - too large)\r\n partialize: (state) => ({\r\n navigationData: state.navigationData,\r\n wizardInitialImage: state.wizardInitialImage,\r\n wizardReturnPath: state.wizardReturnPath,\r\n // Don't persist history - it's too large and not needed across sessions\r\n }),\r\n\r\n // Version for migrations\r\n version: 1,\r\n\r\n // Skip hydration on server (if using SSR)\r\n skipHydration: false,\r\n }\r\n )\r\n);\r\n\r\n// Selectors for better performance (only re-render when needed)\r\nexport const selectNavigationData = (state: NavigationStore) => state.navigationData;\r\nexport const selectCurrentIndex = (state: NavigationStore) => state.navigationData?.currentIndex;\r\nexport const selectPosts = (state: NavigationStore) => state.navigationData?.posts;\r\nexport const selectCanGoBack = (state: NavigationStore) => state.canGoBack();\r\nexport const selectWizardImage = (state: NavigationStore) => state.wizardInitialImage;\r\nexport const selectWizardReturnPath = (state: NavigationStore) => state.wizardReturnPath;\r\nexport const selectCreationWizardOpen = (state: NavigationStore) => state.creationWizardOpen;\r\nexport const selectCreationWizardMode = (state: NavigationStore) => state.creationWizardMode;\r\n\r\n","/**\r\n * useWizardContext Hook\r\n * \r\n * Replaces sessionStorage for wizard initial image and return path\r\n * Uses Zustand store with localStorage persistence\r\n */\r\n\r\nimport { useNavigationStore, selectWizardImage, selectWizardReturnPath } from '@/stores/navigationStore';\r\n\r\nexport const useWizardContext = () => {\r\n const wizardInitialImage = useNavigationStore(selectWizardImage);\r\n const wizardReturnPath = useNavigationStore(selectWizardReturnPath);\r\n const setWizardImage = useNavigationStore((state) => state.setWizardImage);\r\n const clearWizardImage = useNavigationStore((state) => state.clearWizardImage);\r\n\r\n const creationWizardOpen = useNavigationStore((state) => state.creationWizardOpen);\r\n const creationWizardMode = useNavigationStore((state) => state.creationWizardMode);\r\n const setCreationWizardOpen = useNavigationStore((state) => state.setCreationWizardOpen);\r\n\r\n return {\r\n wizardInitialImage,\r\n wizardReturnPath,\r\n setWizardImage,\r\n clearWizardImage,\r\n creationWizardOpen,\r\n creationWizardMode,\r\n setCreationWizardOpen,\r\n };\r\n};\r\n\r\nexport default useWizardContext;\r\n\r\n","import React from \"react\";\nimport { Wand2 } from \"lucide-react\";\nimport { Button } from \"@/components/ui/button\";\nimport { useAuth } from \"@/hooks/useAuth\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useWizardContext } from \"@/hooks/useWizardContext\";\nimport { toast } from \"sonner\";\nimport { translate } from \"@/i18n\";\n\ninterface MagicWizardButtonProps {\n imageUrl: string;\n imageTitle: string;\n className?: string;\n size?: \"sm\" | \"default\" | \"lg\" | \"icon\";\n variant?: \"default\" | \"ghost\" | \"outline\";\n onClick?: (e: React.MouseEvent) => void;\n editingPostId?: string | null; // Explicitly pass the post ID if known, or null to prevent auto-detection\n pictureId?: string; // Explicitly pass the picture ID if known\n children?: React.ReactNode;\n}\n\nconst MagicWizardButton: React.FC<MagicWizardButtonProps> = ({\n imageUrl,\n imageTitle,\n className = \"\",\n size = \"sm\",\n variant = \"ghost\",\n onClick,\n editingPostId: explicitPostId,\n pictureId: explicitPictureId,\n children\n}) => {\n const { user } = useAuth();\n const navigate = useNavigate();\n const { setWizardImage } = useWizardContext();\n\n const handleClick = async (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (onClick) {\n onClick(e);\n return;\n }\n\n if (!user) {\n toast.error(translate('Please sign in to use the AI wizard'));\n return;\n }\n\n // Get the real picture ID from the URL path if available\n const urlPath = window.location.pathname;\n\n // Check if we are in a post context\n // If explicitPostId is provided (even as null), use it.\n // If it is undefined, try to infer from URL.\n let editingPostId: string | null = null;\n\n if (explicitPostId !== undefined) {\n editingPostId = explicitPostId;\n } else {\n const postMatch = urlPath.match(/\\/post\\/([a-f0-9-]{36})/);\n if (postMatch) {\n editingPostId = postMatch[1];\n }\n }\n\n let realPictureId = explicitPictureId || null;\n\n // Only try to guess from URL if explicitPictureId is not provided\n if (!realPictureId) {\n const pictureIdMatch = urlPath.match(/\\/post\\/([a-f0-9-]{36})/);\n realPictureId = pictureIdMatch ? pictureIdMatch[1] : null;\n }\n\n const imageData = {\n id: realPictureId || `external-${Date.now()}`,\n src: imageUrl,\n title: imageTitle,\n selected: true,\n realDatabaseId: realPictureId // Store the real database ID separately\n };\n // Store in Zustand (replaces sessionStorage) with return path\n setWizardImage(imageData, window.location.pathname);\n // Navigate to wizard\n // Note: navigationData is now maintained by Zustand - no manual storage needed!\n navigate('/wizard', {\n state: {\n mode: 'default', // Keep default mode but passing editingPostId allows \"Add to Post\"\n editingPostId: editingPostId\n }\n });\n };\n\n // Don't render if user is not logged in\n if (!user) {\n return null;\n }\n\n return (\n <Button\n size={size}\n variant={variant}\n onClick={handleClick}\n className={`${className?.includes('p-0')\n ? 'text-foreground hover:text-primary transition-colors'\n : 'text-foreground hover:text-primary transition-colors'\n } ${className}`}\n title={translate(\"Edit with AI Wizard\")}\n >\n <Wand2 className={`${size === 'sm' ? 'h-6 w-6' : 'h-5 w-5'} ${className?.includes('p-0') ? '' : 'mr-1'} drop-shadow-sm`} />\n {children}\n </Button>\n );\n};\n\nexport default MagicWizardButton;","/**\n * Download an image from a URL or data URI\n */\nexport const downloadImage = async (imageUrl: string, filename?: string) => {\n try {\n // If it's a data URI, download directly\n if (imageUrl.startsWith('data:')) {\n downloadFromDataUri(imageUrl, filename);\n return;\n }\n\n // For external URLs, fetch and download\n const response = await fetch(imageUrl, { mode: 'cors' });\n if (!response.ok) throw new Error('Failed to fetch image');\n \n const blob = await response.blob();\n const url = window.URL.createObjectURL(blob);\n \n // Extract filename from URL or use provided filename\n const defaultFilename = filename || extractFilenameFromUrl(imageUrl) || 'image.jpg';\n \n downloadFromUrl(url, defaultFilename);\n window.URL.revokeObjectURL(url);\n } catch (error) {\n console.error('Error downloading image:', error);\n // Fallback: try to open image in new tab\n window.open(imageUrl, '_blank');\n }\n};\n\n/**\n * Download from data URI\n */\nconst downloadFromDataUri = (dataUri: string, filename?: string) => {\n const link = document.createElement('a');\n link.href = dataUri;\n link.download = filename || 'image.png';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n};\n\n/**\n * Download from blob URL\n */\nconst downloadFromUrl = (url: string, filename: string) => {\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n};\n\n/**\n * Extract filename from URL\n */\nconst extractFilenameFromUrl = (url: string): string | null => {\n try {\n const urlObj = new URL(url);\n const pathname = urlObj.pathname;\n const filename = pathname.substring(pathname.lastIndexOf('/') + 1);\n return filename && filename.includes('.') ? filename : null;\n } catch {\n return null;\n }\n};\n\n/**\n * Generate a filename based on title and timestamp\n */\nexport const generateFilename = (title?: string, extension = 'jpg'): string => {\n const timestamp = new Date().toISOString().slice(0, 19).replace(/:/g, '-');\n const cleanTitle = title \n ? title.replace(/[^a-zA-Z0-9\\s-_]/g, '').replace(/\\s+/g, '-').toLowerCase()\n : 'image';\n \n return `${cleanTitle}-${timestamp}.${extension}`;\n};","import { createContext, useContext, useState, ReactNode } from 'react';\r\n\r\nimport { PostNavigationData } from '../types';\r\n\r\ninterface PostNavigationContextType {\r\n navigationData: PostNavigationData | null;\r\n setNavigationData: (data: PostNavigationData | null) => void;\r\n preloadedImages: Map<string, boolean>;\r\n preloadImage: (imageUrl: string) => void;\r\n}\r\n\r\nconst PostNavigationContext = createContext<PostNavigationContextType | undefined>(undefined);\r\n\r\nexport const usePostNavigation = () => {\r\n const context = useContext(PostNavigationContext);\r\n if (context === undefined) {\r\n throw new Error('usePostNavigation must be used within a PostNavigationProvider');\r\n }\r\n return context;\r\n};\r\n\r\ninterface PostNavigationProviderProps {\r\n children: ReactNode;\r\n}\r\n\r\nexport const PostNavigationProvider = ({ children }: PostNavigationProviderProps) => {\r\n const [navigationData, setNavigationData] = useState<PostNavigationData | null>(null);\r\n const [preloadedImages, setPreloadedImages] = useState<Map<string, boolean>>(new Map());\r\n\r\n const preloadImage = (imageUrl: string) => {\r\n if (preloadedImages.has(imageUrl)) return;\r\n\r\n const img = new Image();\r\n img.onload = () => {\r\n setPreloadedImages(prev => new Map(prev).set(imageUrl, true));\r\n };\r\n img.onerror = () => {\r\n setPreloadedImages(prev => new Map(prev).set(imageUrl, false));\r\n };\r\n img.src = imageUrl;\r\n };\r\n\r\n return (\r\n <PostNavigationContext.Provider\r\n value={{\r\n navigationData,\r\n setNavigationData,\r\n preloadedImages,\r\n preloadImage,\r\n }}\r\n >\r\n {children}\r\n </PostNavigationContext.Provider>\r\n );\r\n};\r\n","\r\n/**\r\n * Formats a date string to a relative time (e.g. \"5m ago\", \"2h ago\", \"3d ago\")\r\n * if less than 7 days, otherwise returns a short date (e.g. \"Oct 24\").\r\n */\r\nexport const formatDate = (dateStr?: string) => {\r\n if (!dateStr) return '';\r\n const date = new Date(dateStr);\r\n const now = new Date();\r\n const diff = now.getTime() - date.getTime();\r\n const days = Math.floor(diff / (1000 * 60 * 60 * 24));\r\n\r\n if (days < 7) {\r\n if (days === 0) {\r\n const hours = Math.floor(diff / (1000 * 60 * 60));\r\n if (hours === 0) {\r\n const minutes = Math.floor(diff / (1000 * 60));\r\n return `${minutes}m ago`;\r\n }\r\n return `${hours}h ago`;\r\n }\r\n return `${days}d ago`;\r\n }\r\n return date.toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\r\n};\r\n\r\n/**\r\n * Checks if a title string looks like a filename.\r\n * Used to hide titles that aren't meaningful user descriptions.\r\n */\r\nexport const isLikelyFilename = (title: string) => {\r\n if (!title) return false;\r\n\r\n // Check for common file extensions\r\n // Expanded list to catch more cases\r\n if (/\\.(jpg|jpeg|png|gif|webp|mp4|mov|avi|mkv|webm|heic|tiff|bmp|svg)$/i.test(title)) return true;\r\n\r\n // Check for date-like filenames (e.g. 2023-10-24, IMG_2023...)\r\n if (/^[\\d_-]+$/.test(title)) return true; // Only numbers, dashes, underscores\r\n if (/^(IMG|VID|DSC|P|MOV)[\\d_-]+/i.test(title)) return true; // Camera prefixes\r\n if (/^\\d{4}[-_]\\d{2}[-_]\\d{2}/.test(title)) return true; // Date start\r\n\r\n // Check for screenshot patterns\r\n if (/^Screenshot_/.test(title)) return true;\r\n if (/^Screen\\s?Shot/.test(title)) return true;\r\n\r\n return false;\r\n};\r\n","// src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n Context.displayName = rootComponentName + \"Context\";\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n BaseContext.displayName = rootComponentName + \"Context\";\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n ));\n var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","// src/use-is-hydrated.tsx\nimport { useSyncExternalStore } from \"use-sync-external-store/shim\";\nfunction useIsHydrated() {\n return useSyncExternalStore(\n subscribe,\n () => true,\n () => false\n );\n}\nfunction subscribe() {\n return () => {\n };\n}\nexport {\n useIsHydrated\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/avatar.tsx\nimport * as React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useIsHydrated } from \"@radix-ui/react-use-is-hydrated\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AVATAR_NAME = \"Avatar\";\nvar [createAvatarContext, createAvatarScope] = createContextScope(AVATAR_NAME);\nvar [AvatarProvider, useAvatarContext] = createAvatarContext(AVATAR_NAME);\nvar Avatar = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAvatar, ...avatarProps } = props;\n const [imageLoadingStatus, setImageLoadingStatus] = React.useState(\"idle\");\n return /* @__PURE__ */ jsx(\n AvatarProvider,\n {\n scope: __scopeAvatar,\n imageLoadingStatus,\n onImageLoadingStatusChange: setImageLoadingStatus,\n children: /* @__PURE__ */ jsx(Primitive.span, { ...avatarProps, ref: forwardedRef })\n }\n );\n }\n);\nAvatar.displayName = AVATAR_NAME;\nvar IMAGE_NAME = \"AvatarImage\";\nvar AvatarImage = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAvatar, src, onLoadingStatusChange = () => {\n }, ...imageProps } = props;\n const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);\n const imageLoadingStatus = useImageLoadingStatus(src, imageProps);\n const handleLoadingStatusChange = useCallbackRef((status) => {\n onLoadingStatusChange(status);\n context.onImageLoadingStatusChange(status);\n });\n useLayoutEffect(() => {\n if (imageLoadingStatus !== \"idle\") {\n handleLoadingStatusChange(imageLoadingStatus);\n }\n }, [imageLoadingStatus, handleLoadingStatusChange]);\n return imageLoadingStatus === \"loaded\" ? /* @__PURE__ */ jsx(Primitive.img, { ...imageProps, ref: forwardedRef, src }) : null;\n }\n);\nAvatarImage.displayName = IMAGE_NAME;\nvar FALLBACK_NAME = \"AvatarFallback\";\nvar AvatarFallback = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAvatar, delayMs, ...fallbackProps } = props;\n const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);\n const [canRender, setCanRender] = React.useState(delayMs === void 0);\n React.useEffect(() => {\n if (delayMs !== void 0) {\n const timerId = window.setTimeout(() => setCanRender(true), delayMs);\n return () => window.clearTimeout(timerId);\n }\n }, [delayMs]);\n return canRender && context.imageLoadingStatus !== \"loaded\" ? /* @__PURE__ */ jsx(Primitive.span, { ...fallbackProps, ref: forwardedRef }) : null;\n }\n);\nAvatarFallback.displayName = FALLBACK_NAME;\nfunction resolveLoadingStatus(image, src) {\n if (!image) {\n return \"idle\";\n }\n if (!src) {\n return \"error\";\n }\n if (image.src !== src) {\n image.src = src;\n }\n return image.complete && image.naturalWidth > 0 ? \"loaded\" : \"loading\";\n}\nfunction useImageLoadingStatus(src, { referrerPolicy, crossOrigin }) {\n const isHydrated = useIsHydrated();\n const imageRef = React.useRef(null);\n const image = (() => {\n if (!isHydrated) return null;\n if (!imageRef.current) {\n imageRef.current = new window.Image();\n }\n return imageRef.current;\n })();\n const [loadingStatus, setLoadingStatus] = React.useState(\n () => resolveLoadingStatus(image, src)\n );\n useLayoutEffect(() => {\n setLoadingStatus(resolveLoadingStatus(image, src));\n }, [image, src]);\n useLayoutEffect(() => {\n const updateStatus = (status) => () => {\n setLoadingStatus(status);\n };\n if (!image) return;\n const handleLoad = updateStatus(\"loaded\");\n const handleError = updateStatus(\"error\");\n image.addEventListener(\"load\", handleLoad);\n image.addEventListener(\"error\", handleError);\n if (referrerPolicy) {\n image.referrerPolicy = referrerPolicy;\n }\n if (typeof crossOrigin === \"string\") {\n image.crossOrigin = crossOrigin;\n }\n return () => {\n image.removeEventListener(\"load\", handleLoad);\n image.removeEventListener(\"error\", handleError);\n };\n }, [image, crossOrigin, referrerPolicy]);\n return loadingStatus;\n}\nvar Root = Avatar;\nvar Image = AvatarImage;\nvar Fallback = AvatarFallback;\nexport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n Fallback,\n Image,\n Root,\n createAvatarScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\", className)}\n {...props}\n />\n));\nAvatar.displayName = AvatarPrimitive.Root.displayName;\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image ref={ref} className={cn(\"aspect-square h-full w-full\", className)} {...props} />\n));\nAvatarImage.displayName = AvatarPrimitive.Image.displayName;\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\"flex h-full w-full items-center justify-center rounded-full bg-muted\", className)}\n {...props}\n />\n));\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\n\nexport { Avatar, AvatarImage, AvatarFallback };\n","import React, { createContext, useContext, useState, useEffect, useCallback } from 'react';\r\nimport { supabase } from \"@/integrations/supabase/client\";\r\nimport { UserProfile } from \"@/pages/Post/types\";\r\n\r\ninterface ProfilesContextType {\r\n profiles: Record<string, UserProfile>;\r\n fetchProfile: (userId: string) => Promise<UserProfile | null>;\r\n fetchProfiles: (userIds: string[]) => Promise<void>;\r\n isLoading: boolean;\r\n}\r\n\r\nconst ProfilesContext = createContext<ProfilesContextType | undefined>(undefined);\r\n\r\nexport const ProfilesProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\r\n const [profiles, setProfiles] = useState<Record<string, UserProfile>>({});\r\n const [isLoading, setIsLoading] = useState(false);\r\n const fetchedIds = React.useRef<Set<string>>(new Set());\r\n const profilesRef = React.useRef(profiles);\r\n\r\n // Keep ref in sync\r\n useEffect(() => {\r\n profilesRef.current = profiles;\r\n }, [profiles]);\r\n\r\n const fetchProfiles = useCallback(async (userIds: string[]) => {\r\n // Filter out existing AND already requested to prevent loops\r\n const missingIds = userIds.filter(id => !fetchedIds.current.has(id) && !profilesRef.current[id]);\r\n const uniqueMissingIds = Array.from(new Set(missingIds));\r\n if (uniqueMissingIds.length === 0) return;\r\n // Mark as fetched immediately to prevent re-entry\r\n uniqueMissingIds.forEach(id => fetchedIds.current.add(id));\r\n setIsLoading(true);\r\n try {\r\n // Use the new batch API endpoint\r\n const SERVER_URL = import.meta.env.VITE_SERVER_IMAGE_API_URL;\r\n const res = await fetch(`${SERVER_URL}/api/profiles?ids=${uniqueMissingIds.join(',')}`);\r\n if (!res.ok) {\r\n console.error('Error fetching profiles context:', res.statusText);\r\n return;\r\n }\r\n\r\n const data: Record<string, UserProfile> = await res.json();\r\n\r\n if (data) {\r\n setProfiles(prev => {\r\n const next = { ...prev, ...data };\r\n // If any IDs are missing from response, we might want to mark them as 'not found' \r\n // to prevent refetch loops, but for now we trust the server response map.\r\n return next;\r\n });\r\n }\r\n } catch (e) {\r\n console.error('Error in fetchProfiles context:', e);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n }, []); // Stable callback\r\n\r\n // but ideally remove it if logic allows. \r\n // Since we check !profiles[id], we depend on it. \r\n // However, fetchedIds prevents the loop even if profiles is stale.\r\n\r\n const fetchProfile = useCallback(async (userId: string) => {\r\n if (profiles[userId]) return profiles[userId];\r\n\r\n await fetchProfiles([userId]);\r\n return profiles[userId] || null;\r\n }, [profiles, fetchProfiles]);\r\n\r\n return (\r\n <ProfilesContext.Provider value={{ profiles, fetchProfile, fetchProfiles, isLoading }}>\r\n {children}\r\n </ProfilesContext.Provider>\r\n );\r\n};\r\n\r\nexport const useProfiles = () => {\r\n const context = useContext(ProfilesContext);\r\n if (context === undefined) {\r\n throw new Error('useProfiles must be used within a ProfilesProvider');\r\n }\r\n return context;\r\n};\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { User as UserIcon } from \"lucide-react\";\r\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\";\r\nimport { useNavigate } from \"react-router-dom\";\r\nimport { useProfiles } from \"@/contexts/ProfilesContext\";\r\n\r\ninterface UserAvatarBlockProps {\r\n userId: string;\r\n avatarUrl?: string | null;\r\n displayName?: string | null;\r\n createdAt?: string;\r\n className?: string;\r\n showDate?: boolean;\r\n onClick?: (e: React.MouseEvent) => void;\r\n hoverStyle?: boolean;\r\n textSize?: \"xs\" | \"sm\" | \"base\";\r\n}\r\n\r\nconst UserAvatarBlock: React.FC<UserAvatarBlockProps> = ({\r\n userId,\r\n avatarUrl,\r\n displayName,\r\n createdAt,\r\n className = \"w-8 h-8\",\r\n showDate = true,\r\n onClick,\r\n hoverStyle = false,\r\n textSize = \"sm\"\r\n}) => {\r\n const navigate = useNavigate();\r\n const { profiles, fetchProfile } = useProfiles();\r\n\r\n // Use prop if available, otherwise look up in context\r\n const profile = profiles[userId];\r\n const effectiveAvatarUrl = avatarUrl || profile?.avatar_url;\r\n\r\n // Prefer prop displayName if truthy (e.g. override), else usage context\r\n const effectiveDisplayName = displayName || profile?.display_name || `User ${userId.slice(0, 8)}`;\r\n\r\n useEffect(() => {\r\n // If we don't have the profile in context, ask for it\r\n if (!profile) {\r\n fetchProfile(userId);\r\n }\r\n }, [userId, profile, fetchProfile]);\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n if (onClick) {\r\n onClick(e);\r\n return;\r\n }\r\n e.stopPropagation();\r\n window.location.href = `/user/${userId}`;\r\n };\r\n\r\n const nameClass = hoverStyle\r\n ? `text-white text-${textSize} font-medium hover:underline cursor-pointer`\r\n : `font-semibold hover:underline text-${textSize}`;\r\n\r\n const dateClass = hoverStyle\r\n ? \"text-white/60 text-xs\"\r\n : \"text-xs text-muted-foreground\";\r\n\r\n return (\r\n <div className=\"flex items-center space-x-2\" onClick={handleClick}>\r\n <Avatar className={`${className} bg-background hover:scale-105 transition-transform cursor-pointer`}>\r\n <AvatarImage src={effectiveAvatarUrl || undefined} alt={effectiveDisplayName || \"Avatar\"} className=\"object-cover\" />\r\n <AvatarFallback className=\"bg-gradient-to-br from-purple-500 to-indigo-600 text-white\">\r\n <UserIcon className=\"h-1/2 w-1/2\" />\r\n </AvatarFallback>\r\n </Avatar>\r\n <div className=\"flex flex-col min-w-0\">\r\n <span className={nameClass}>\r\n {effectiveDisplayName}\r\n </span>\r\n {showDate && createdAt && (\r\n <span className={dateClass}>\r\n {new Date(createdAt).toLocaleDateString()}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default UserAvatarBlock;\r\n","import { Heart, Download, Share2, User, MessageCircle, Edit3, Trash2, Maximize, Layers } from \"lucide-react\";\nimport { Button } from \"@/components/ui/button\";\nimport { supabase } from \"@/integrations/supabase/client\";\nimport { useAuth } from \"@/hooks/useAuth\";\nimport { toast } from \"sonner\";\nimport { useState, useEffect } from \"react\";\nimport MarkdownRenderer from \"@/components/MarkdownRenderer\";\nimport EditImageModal from \"@/components/EditImageModal\";\nimport ImageLightbox from \"@/components/ImageLightbox\";\nimport MagicWizardButton from \"@/components/MagicWizardButton\";\nimport { downloadImage, generateFilename } from \"@/utils/downloadUtils\";\nimport { editImage } from \"@/image-api\";\nimport { usePostNavigation } from \"@/contexts/PostNavigationContext\";\nimport { useNavigate } from \"react-router-dom\";\nimport ResponsiveImage from \"@/components/ResponsiveImage\";\nimport { T, translate } from \"@/i18n\";\nimport { isLikelyFilename, formatDate } from \"@/utils/textUtils\";\nimport UserAvatarBlock from \"@/components/UserAvatarBlock\";\n\ninterface PhotoCardProps {\n pictureId: string;\n image: string;\n title: string;\n author: string;\n authorId: string;\n likes: number;\n comments: number;\n isLiked?: boolean;\n description?: string | null;\n onClick?: (pictureId: string) => void;\n onLike?: () => void;\n onDelete?: () => void;\n isVid?: boolean;\n onEdit?: (pictureId: string) => void;\n createdAt?: string;\n authorAvatarUrl?: string | null;\n showContent?: boolean;\n responsive?: any;\n variant?: 'grid' | 'feed';\n apiUrl?: string;\n}\n\nconst PhotoCard = ({\n pictureId,\n image,\n title,\n author,\n authorId,\n likes,\n comments,\n isLiked = false,\n description,\n onClick,\n onLike,\n onDelete,\n isVid,\n onEdit,\n createdAt,\n authorAvatarUrl,\n showContent = true,\n responsive,\n variant = 'grid',\n apiUrl\n}: PhotoCardProps) => {\n const { user } = useAuth();\n const navigate = useNavigate();\n const { navigationData, setNavigationData, preloadImage } = usePostNavigation();\n const [localIsLiked, setLocalIsLiked] = useState(isLiked);\n const [localLikes, setLocalLikes] = useState(likes);\n const [showEditModal, setShowEditModal] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n const [showLightbox, setShowLightbox] = useState(false);\n const [isGenerating, setIsGenerating] = useState(false);\n const [isPublishing, setIsPublishing] = useState(false);\n const [generatedImageUrl, setGeneratedImageUrl] = useState<string | null>(null);\n const [versionCount, setVersionCount] = useState<number>(0);\n\n const isOwner = user?.id === authorId;\n\n // Fetch version count for owners only\n useEffect(() => {\n const fetchVersionCount = async () => {\n if (!isOwner || !user) return;\n\n try {\n // Count pictures that have this picture as parent OR pictures that share the same parent\n const { data: currentPicture } = await supabase\n .from('pictures')\n .select('parent_id')\n .eq('id', pictureId)\n .single();\n\n if (!currentPicture) return;\n\n let query = supabase\n .from('pictures')\n .select('id', { count: 'exact', head: true });\n\n if (currentPicture.parent_id) {\n // This is a version - count all versions with same parent_id + the parent itself\n query = query.or(`parent_id.eq.${currentPicture.parent_id},id.eq.${currentPicture.parent_id}`);\n } else {\n // This is the original - count this picture + all its versions\n query = query.or(`parent_id.eq.${pictureId},id.eq.${pictureId}`);\n }\n\n const { count } = await query;\n // console.log('Version count:', count);\n setVersionCount(count || 1);\n } catch (error) {\n console.error('Error fetching version count:', error);\n }\n };\n\n fetchVersionCount();\n }, [pictureId, isOwner, user]);\n\n const handleLike = async (e: React.MouseEvent) => {\n e.stopPropagation();\n\n if (!user) {\n toast.error(translate('Please sign in to like pictures'));\n return;\n }\n\n try {\n if (localIsLiked) {\n // Unlike\n const { error } = await supabase\n .from('likes')\n .delete()\n .eq('user_id', user.id)\n .eq('picture_id', pictureId);\n\n if (error) throw error;\n setLocalIsLiked(false);\n setLocalLikes(prev => prev - 1);\n } else {\n // Like\n const { error } = await supabase\n .from('likes')\n .insert([{ user_id: user.id, picture_id: pictureId }]);\n\n if (error) throw error;\n setLocalIsLiked(true);\n setLocalLikes(prev => prev + 1);\n }\n\n onLike?.();\n } catch (error) {\n console.error('Error toggling like:', error);\n toast.error(translate('Failed to update like'));\n }\n };\n const handleDelete = async (e: React.MouseEvent) => {\n e.stopPropagation();\n\n if (!user || !isOwner) {\n toast.error(translate('You can only delete your own images'));\n return;\n }\n\n if (!confirm(translate('Are you sure you want to delete this image? This action cannot be undone.'))) {\n return;\n }\n\n setIsDeleting(true);\n try {\n // First get the picture details for storage cleanup\n const { data: picture, error: fetchError } = await supabase\n .from('pictures')\n .select('image_url')\n .eq('id', pictureId)\n .single();\n\n if (fetchError) throw fetchError;\n\n // Delete from database (this will cascade delete likes and comments due to foreign keys)\n const { error: deleteError } = await supabase\n .from('pictures')\n .delete()\n .eq('id', pictureId);\n\n if (deleteError) throw deleteError;\n\n // Try to delete from storage as well\n if (picture?.image_url) {\n const urlParts = picture.image_url.split('/');\n const fileName = urlParts[urlParts.length - 1];\n const userIdFromUrl = urlParts[urlParts.length - 2];\n\n const { error: storageError } = await supabase.storage\n .from('pictures')\n .remove([`${userIdFromUrl}/${fileName}`]);\n\n if (storageError) {\n console.error('Error deleting from storage:', storageError);\n // Don't show error to user as the main deletion succeeded\n }\n }\n\n toast.success(translate('Image deleted successfully'));\n onDelete?.(); // Trigger refresh of the parent component\n } catch (error) {\n console.error('Error deleting image:', error);\n toast.error(translate('Failed to delete image'));\n } finally {\n setIsDeleting(false);\n }\n };\n\n const handleDownload = async () => {\n try {\n const filename = generateFilename(title);\n await downloadImage(image, filename);\n toast.success(translate('Image downloaded successfully'));\n } catch (error) {\n console.error('Error downloading image:', error);\n toast.error(translate('Failed to download image'));\n }\n };\n\n const handleLightboxOpen = () => {\n // Update current index in navigation data\n if (navigationData) {\n const currentIndex = navigationData.posts.findIndex(p => p.id === pictureId);\n if (currentIndex !== -1) {\n setNavigationData({\n ...navigationData,\n currentIndex\n });\n }\n }\n setShowLightbox(true);\n };\n\n const handleNavigate = (direction: 'prev' | 'next') => {\n if (!navigationData || !navigationData.posts.length) {\n toast.error(translate('No navigation data available'));\n return;\n }\n\n const newIndex = direction === 'next'\n ? navigationData.currentIndex + 1\n : navigationData.currentIndex - 1;\n\n if (newIndex >= 0 && newIndex < navigationData.posts.length) {\n const newPost = navigationData.posts[newIndex];\n setNavigationData({\n ...navigationData,\n currentIndex: newIndex\n });\n\n // Navigate to the new post\n navigate(`/post/${newPost.id}`);\n } else {\n toast.info(translate(direction === 'next' ? 'No next post available' : 'No previous post available'));\n }\n };\n\n const handlePreload = (direction: 'prev' | 'next') => {\n if (!navigationData) return;\n\n const targetIndex = direction === 'next'\n ? navigationData.currentIndex + 1\n : navigationData.currentIndex - 1;\n\n if (targetIndex >= 0 && targetIndex < navigationData.posts.length) {\n const targetPost = navigationData.posts[targetIndex];\n preloadImage(targetPost.image_url);\n }\n };\n\n const handlePromptSubmit = async (prompt: string) => {\n if (!prompt.trim()) {\n toast.error(translate('Please enter a prompt'));\n return;\n }\n\n setIsGenerating(true);\n try {\n // Convert image URL to File for API\n const response = await fetch(image);\n const blob = await response.blob();\n const file = new File([blob], title || 'image.png', {\n type: blob.type || 'image/png'\n });\n\n const result = await editImage(prompt, [file]);\n\n if (result) {\n // Convert ArrayBuffer to base64 data URL \n const uint8Array = new Uint8Array(result.imageData);\n const imageBlob = new Blob([uint8Array], { type: 'image/png' });\n const reader = new FileReader();\n\n reader.onload = () => {\n const dataUrl = reader.result as string;\n setGeneratedImageUrl(dataUrl);\n toast.success(translate('Image generated successfully!'));\n };\n\n reader.readAsDataURL(imageBlob);\n }\n } catch (error) {\n console.error('Error generating image:', error);\n toast.error(translate('Failed to generate image. Please check your Google API key.'));\n } finally {\n setIsGenerating(false);\n }\n };\n\n const handlePublish = async (option: 'overwrite' | 'new', imageUrl: string, newTitle: string, description?: string) => {\n if (!user) {\n toast.error(translate('Please sign in to publish images'));\n return;\n }\n\n setIsPublishing(true);\n try {\n // Convert data URL to blob for upload\n const response = await fetch(imageUrl);\n const blob = await response.blob();\n\n if (option === 'overwrite') {\n // Overwrite the existing image\n // First, get the current image URL to extract the file path\n const currentImageUrl = image;\n if (currentImageUrl.includes('supabase.co/storage/')) {\n const urlParts = currentImageUrl.split('/');\n const fileName = urlParts[urlParts.length - 1];\n const bucketPath = `${authorId}/${fileName}`;\n\n // Upload new image with same path (overwrite)\n const { error: uploadError } = await supabase.storage\n .from('pictures')\n .update(bucketPath, blob, {\n cacheControl: '0', // Disable caching to ensure immediate update\n upsert: true\n });\n\n if (uploadError) throw uploadError;\n\n toast.success(translate('Image updated successfully!'));\n } else {\n toast.error(translate('Cannot overwrite this image'));\n return;\n }\n } else {\n // Create new image\n const fileName = `${user.id}/${Date.now()}-generated.png`;\n const { data: uploadData, error: uploadError } = await supabase.storage\n .from('pictures')\n .upload(fileName, blob);\n\n if (uploadError) throw uploadError;\n\n // Get public URL\n const { data: { publicUrl } } = supabase.storage\n .from('pictures')\n .getPublicUrl(fileName);\n\n // Save to database\n const { error: dbError } = await supabase\n .from('pictures')\n .insert([{\n title: newTitle,\n description: description || translate('Generated from') + `: ${title}`,\n image_url: publicUrl,\n user_id: user.id\n }]);\n\n if (dbError) throw dbError;\n\n toast.success(translate('Image published to gallery!'));\n }\n\n setShowLightbox(false);\n setGeneratedImageUrl(null);\n\n // Trigger refresh if available\n onLike?.();\n } catch (error) {\n console.error('Error publishing image:', error);\n toast.error(translate('Failed to publish image'));\n } finally {\n setIsPublishing(false);\n }\n };\n\n const handleClick = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onClick?.(pictureId);\n };\n\n const handleCardClick = (e: React.MouseEvent) => {\n if (isVid) {\n handleLightboxOpen();\n } else {\n handleClick(e);\n }\n };\n\n return (\n <div\n data-testid=\"photo-card\"\n className=\"group relative overflow-hidden bg-card transition-all duration-300 cursor-pointer w-full\"\n onClick={handleCardClick}\n >\n {/* Image */}\n <div className={`${variant === 'grid' ? \"aspect-square\" : \"\"} overflow-hidden`}>\n <ResponsiveImage\n src={image}\n alt={title}\n className=\"w-full h-full\"\n imgClassName=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n sizes={variant === 'grid'\n ? \"(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw\"\n : \"100vw\"\n }\n responsiveSizes={variant === 'grid' ? [320, 640, 1024, 1280] : [640, 1024, 1280, 1920]} // 1920 added\n data={responsive}\n apiUrl={apiUrl}\n />\n </div>\n\n {/* Desktop Hover Overlay - hidden on mobile, and hidden in feed variant */}\n {showContent && variant === 'grid' && (\n <div className=\"hidden md:block absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none\">\n <div className=\"absolute bottom-0 left-0 right-0 p-4 pointer-events-auto\">\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"flex items-center space-x-2\">\n <UserAvatarBlock\n userId={authorId}\n avatarUrl={authorAvatarUrl}\n displayName={author}\n hoverStyle={true}\n showDate={false}\n />\n </div>\n <div className=\"flex items-center space-x-1\">\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={handleLike}\n className={`h-8 w-8 p-0 ${localIsLiked ? \"text-red-500\" : \"text-white hover:text-red-500\"\n }`}\n >\n <Heart className=\"h-4 w-4\" fill={localIsLiked ? \"currentColor\" : \"none\"} />\n </Button>\n {localLikes > 0 && <span className=\"text-white text-sm\">{localLikes}</span>}\n\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-8 w-8 p-0 text-white hover:text-blue-400 ml-2\"\n >\n <MessageCircle className=\"h-4 w-4\" />\n </Button>\n <span className=\"text-white text-sm\">{comments}</span>\n\n {isOwner && (\n <>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n if (onEdit) {\n onEdit(pictureId);\n } else {\n setShowEditModal(true);\n }\n }}\n className=\"h-8 w-8 p-0 text-white hover:text-green-400 ml-2\"\n >\n <Edit3 className=\"h-4 w-4\" />\n </Button>\n\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={handleDelete}\n disabled={isDeleting}\n className=\"h-8 w-8 p-0 text-white hover:text-red-400 ml-2\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n\n {versionCount > 1 && (\n <div className=\"flex items-center ml-2 px-2 py-1 bg-white/20 rounded text-white text-xs\">\n <Layers className=\"h-3 w-3 mr-1\" />\n {versionCount}\n </div>\n )}\n </>\n )}\n </div>\n </div>\n\n {!isLikelyFilename(title) && <h3 className=\"text-white font-medium mb-1\">{title}</h3>}\n {description && (\n <div className=\"text-white/80 text-sm mb-1 line-clamp-2 overflow-hidden\">\n <MarkdownRenderer content={description} className=\"prose-invert prose-white\" />\n </div>\n )}\n {createdAt && (\n <div className=\"text-white/60 text-xs mb-2\">\n {formatDate(createdAt)}\n </div>\n )}\n\n <div className=\"flex items-center space-x-1\">\n <Button\n size=\"sm\"\n variant=\"secondary\"\n className=\"h-6 px-2 text-xs bg-white/20 hover:bg-white/30 border-0 text-white\"\n onClick={(e) => {\n e.stopPropagation();\n handleDownload();\n }}\n >\n <Download className=\"h-3 w-3 mr-1\" />\n <T>Save</T>\n </Button>\n <Button\n size=\"sm\"\n variant=\"secondary\"\n className=\"h-6 w-6 p-0 bg-white/20 hover:bg-white/30 border-0 text-white\"\n onClick={(e) => {\n e.stopPropagation();\n handleLightboxOpen();\n }}\n title=\"View in lightbox\"\n >\n <Maximize className=\"h-2.5 w-2.5\" />\n </Button>\n <Button size=\"sm\" variant=\"secondary\" className=\"h-6 w-6 p-0 bg-white/20 hover:bg-white/30 border-0 text-white\">\n <Share2 className=\"h-2.5 w-2.5\" />\n </Button>\n <MagicWizardButton\n imageUrl={image}\n imageTitle={title}\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-6 px-2 text-xs bg-white/20 hover:bg-white/30 border-0 text-white\"\n />\n </div>\n </div>\n </div>\n )}\n\n {/* Mobile/Feed Content - always visible below image */}\n {showContent && (variant === 'feed' || (variant === 'grid' && true)) && (\n <div className={`${variant === 'grid' ? \"md:hidden\" : \"\"} pb-2 space-y-2`}>\n {/* Row 1: User Avatar (Left) + Actions (Right) */}\n <div className=\"flex items-center justify-between px-2 pt-2\">\n {/* User Avatar Block */}\n <UserAvatarBlock\n userId={authorId}\n avatarUrl={authorAvatarUrl}\n displayName={author === 'User' ? undefined : author}\n className=\"w-8 h-8\"\n showDate={false}\n />\n\n {/* Actions */}\n <div className=\"flex items-center gap-1\">\n <Button\n size=\"icon\"\n variant=\"ghost\"\n onClick={handleLike}\n className={localIsLiked ? \"text-red-500 hover:text-red-600\" : \"\"}\n >\n <Heart className=\"h-6 w-6\" fill={localIsLiked ? \"currentColor\" : \"none\"} />\n </Button>\n {localLikes > 0 && (\n <span className=\"text-sm font-medium text-foreground mr-1\">{localLikes}</span>\n )}\n\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"text-foreground\"\n >\n <MessageCircle className=\"h-6 w-6 -rotate-90\" />\n </Button>\n {comments > 0 && (\n <span className=\"text-sm font-medium text-foreground mr-1\">{comments}</span>\n )}\n\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"text-foreground\"\n onClick={(e) => {\n e.stopPropagation();\n handleDownload();\n }}\n >\n <Download className=\"h-6 w-6\" />\n </Button>\n\n <MagicWizardButton\n imageUrl={image}\n imageTitle={title}\n size=\"icon\"\n variant=\"ghost\"\n className=\"text-foreground hover:text-primary\"\n />\n {isOwner && (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n if (onEdit) {\n onEdit(pictureId);\n } else {\n setShowEditModal(true);\n }\n }}\n className=\"text-foreground hover:text-green-400\"\n >\n <Edit3 className=\"h-6 w-6\" />\n </Button>\n )}\n </div>\n </div>\n\n {/* Likes */}\n\n\n {/* Caption / Description section */}\n <div className=\"px-4 space-y-1\">\n {(!isLikelyFilename(title) && title) && (\n <div className=\"font-semibold text-sm\">{title}</div>\n )}\n\n {description && (\n <div className=\"text-sm text-foreground/90 line-clamp-3\">\n <MarkdownRenderer content={description} className=\"prose-sm dark:prose-invert\" />\n </div>\n )}\n\n {createdAt && (\n <div className=\"text-xs text-muted-foreground pt-1\">\n {formatDate(createdAt)}\n </div>\n )}\n </div>\n </div>\n )}\n\n {showEditModal && (\n <EditImageModal\n open={showEditModal}\n onOpenChange={setShowEditModal}\n pictureId={pictureId}\n currentTitle={title}\n currentDescription={description}\n currentVisible={true} // Default to true until we can properly pass this\n onUpdateSuccess={() => {\n setShowEditModal(false);\n onLike?.(); // Trigger refresh\n }}\n />\n )}\n\n <ImageLightbox\n isOpen={showLightbox}\n onClose={() => {\n setShowLightbox(false);\n setGeneratedImageUrl(null);\n }}\n imageUrl={generatedImageUrl || image}\n imageTitle={title}\n onPromptSubmit={handlePromptSubmit}\n onPublish={handlePublish}\n isGenerating={isGenerating}\n isPublishing={isPublishing}\n showPrompt={true}\n showPublish={!!generatedImageUrl}\n generatedImageUrl={generatedImageUrl || undefined}\n currentIndex={navigationData?.currentIndex}\n totalCount={navigationData?.posts.length}\n onNavigate={handleNavigate}\n onPreload={handlePreload}\n />\n </div>\n );\n};\n\nexport default PhotoCard;","\"use client\"\n\nimport * as React from 'react';\n\nconst IS_SERVER = typeof document === \"undefined\";\nconst SCOPE = Symbol(0);\nlet scheduledEffects = false, runningEffects = false, currentScope = null, currentObserver = null, currentObservers = null, currentObserversIndex = 0, effects = [], defaultContext = {};\nconst NOOP = () => {\n}, STATE_CLEAN = 0, STATE_CHECK = 1, STATE_DIRTY = 2, STATE_DISPOSED = 3;\nfunction flushEffects() {\n scheduledEffects = true;\n queueMicrotask(runEffects);\n}\nfunction runEffects() {\n if (!effects.length) {\n scheduledEffects = false;\n return;\n }\n runningEffects = true;\n for (let i = 0; i < effects.length; i++) {\n if (effects[i].$st !== STATE_CLEAN)\n runTop(effects[i]);\n }\n effects = [];\n scheduledEffects = false;\n runningEffects = false;\n}\nfunction runTop(node) {\n let ancestors = [node];\n while (node = node[SCOPE]) {\n if (node.$e && node.$st !== STATE_CLEAN)\n ancestors.push(node);\n }\n for (let i = ancestors.length - 1; i >= 0; i--) {\n updateCheck(ancestors[i]);\n }\n}\nfunction root(init) {\n const scope = createScope();\n return compute(scope, !init.length ? init : init.bind(null, dispose.bind(scope)), null);\n}\nfunction peek(fn) {\n return compute(currentScope, fn, null);\n}\nfunction untrack(fn) {\n return compute(null, fn, null);\n}\nfunction tick() {\n if (!runningEffects)\n runEffects();\n}\nfunction getScope() {\n return currentScope;\n}\nfunction scoped(run2, scope) {\n try {\n return compute(scope, run2, null);\n } catch (error) {\n handleError(scope, error);\n return;\n }\n}\nfunction getContext(key, scope = currentScope) {\n return scope?.$cx[key];\n}\nfunction setContext(key, value, scope = currentScope) {\n if (scope)\n scope.$cx = { ...scope.$cx, [key]: value };\n}\nfunction onDispose(disposable) {\n if (!disposable || !currentScope)\n return disposable || NOOP;\n const node = currentScope;\n if (!node.$d) {\n node.$d = disposable;\n } else if (Array.isArray(node.$d)) {\n node.$d.push(disposable);\n } else {\n node.$d = [node.$d, disposable];\n }\n return function removeDispose() {\n if (node.$st === STATE_DISPOSED)\n return;\n disposable.call(null);\n if (isFunction$1(node.$d)) {\n node.$d = null;\n } else if (Array.isArray(node.$d)) {\n node.$d.splice(node.$d.indexOf(disposable), 1);\n }\n };\n}\nfunction dispose(self = true) {\n if (this.$st === STATE_DISPOSED)\n return;\n if (this.$h) {\n if (Array.isArray(this.$h)) {\n for (let i = this.$h.length - 1; i >= 0; i--) {\n dispose.call(this.$h[i]);\n }\n } else {\n dispose.call(this.$h);\n }\n }\n if (self) {\n const parent = this[SCOPE];\n if (parent) {\n if (Array.isArray(parent.$h)) {\n parent.$h.splice(parent.$h.indexOf(this), 1);\n } else {\n parent.$h = null;\n }\n }\n disposeNode(this);\n }\n}\nfunction disposeNode(node) {\n node.$st = STATE_DISPOSED;\n if (node.$d)\n emptyDisposal(node);\n if (node.$s)\n removeSourceObservers(node, 0);\n node[SCOPE] = null;\n node.$s = null;\n node.$o = null;\n node.$h = null;\n node.$cx = defaultContext;\n node.$eh = null;\n}\nfunction emptyDisposal(scope) {\n try {\n if (Array.isArray(scope.$d)) {\n for (let i = scope.$d.length - 1; i >= 0; i--) {\n const callable = scope.$d[i];\n callable.call(callable);\n }\n } else {\n scope.$d.call(scope.$d);\n }\n scope.$d = null;\n } catch (error) {\n handleError(scope, error);\n }\n}\nfunction compute(scope, compute2, observer) {\n const prevScope = currentScope, prevObserver = currentObserver;\n currentScope = scope;\n currentObserver = observer;\n try {\n return compute2.call(scope);\n } finally {\n currentScope = prevScope;\n currentObserver = prevObserver;\n }\n}\nfunction handleError(scope, error) {\n if (!scope || !scope.$eh)\n throw error;\n let i = 0, len = scope.$eh.length, currentError = error;\n for (i = 0; i < len; i++) {\n try {\n scope.$eh[i](currentError);\n break;\n } catch (error2) {\n currentError = error2;\n }\n }\n if (i === len)\n throw currentError;\n}\nfunction read() {\n if (this.$st === STATE_DISPOSED)\n return this.$v;\n if (currentObserver && !this.$e) {\n if (!currentObservers && currentObserver.$s && currentObserver.$s[currentObserversIndex] == this) {\n currentObserversIndex++;\n } else if (!currentObservers)\n currentObservers = [this];\n else\n currentObservers.push(this);\n }\n if (this.$c)\n updateCheck(this);\n return this.$v;\n}\nfunction write(newValue) {\n const value = isFunction$1(newValue) ? newValue(this.$v) : newValue;\n if (this.$ch(this.$v, value)) {\n this.$v = value;\n if (this.$o) {\n for (let i = 0; i < this.$o.length; i++) {\n notify(this.$o[i], STATE_DIRTY);\n }\n }\n }\n return this.$v;\n}\nconst ScopeNode = function Scope() {\n this[SCOPE] = null;\n this.$h = null;\n if (currentScope)\n currentScope.append(this);\n};\nconst ScopeProto = ScopeNode.prototype;\nScopeProto.$cx = defaultContext;\nScopeProto.$eh = null;\nScopeProto.$c = null;\nScopeProto.$d = null;\nScopeProto.append = function(child) {\n child[SCOPE] = this;\n if (!this.$h) {\n this.$h = child;\n } else if (Array.isArray(this.$h)) {\n this.$h.push(child);\n } else {\n this.$h = [this.$h, child];\n }\n child.$cx = child.$cx === defaultContext ? this.$cx : { ...this.$cx, ...child.$cx };\n if (this.$eh) {\n child.$eh = !child.$eh ? this.$eh : [...child.$eh, ...this.$eh];\n }\n};\nScopeProto.dispose = function() {\n dispose.call(this);\n};\nfunction createScope() {\n return new ScopeNode();\n}\nconst ComputeNode = function Computation(initialValue, compute2, options) {\n ScopeNode.call(this);\n this.$st = compute2 ? STATE_DIRTY : STATE_CLEAN;\n this.$i = false;\n this.$e = false;\n this.$s = null;\n this.$o = null;\n this.$v = initialValue;\n if (compute2)\n this.$c = compute2;\n if (options && options.dirty)\n this.$ch = options.dirty;\n};\nconst ComputeProto = ComputeNode.prototype;\nObject.setPrototypeOf(ComputeProto, ScopeProto);\nComputeProto.$ch = isNotEqual;\nComputeProto.call = read;\nfunction createComputation(initialValue, compute2, options) {\n return new ComputeNode(initialValue, compute2, options);\n}\nfunction isNotEqual(a, b) {\n return a !== b;\n}\nfunction isFunction$1(value) {\n return typeof value === \"function\";\n}\nfunction updateCheck(node) {\n if (node.$st === STATE_CHECK) {\n for (let i = 0; i < node.$s.length; i++) {\n updateCheck(node.$s[i]);\n if (node.$st === STATE_DIRTY) {\n break;\n }\n }\n }\n if (node.$st === STATE_DIRTY)\n update(node);\n else\n node.$st = STATE_CLEAN;\n}\nfunction cleanup(node) {\n if (node.$h)\n dispose.call(node, false);\n if (node.$d)\n emptyDisposal(node);\n node.$eh = node[SCOPE] ? node[SCOPE].$eh : null;\n}\nfunction update(node) {\n let prevObservers = currentObservers, prevObserversIndex = currentObserversIndex;\n currentObservers = null;\n currentObserversIndex = 0;\n try {\n cleanup(node);\n const result = compute(node, node.$c, node);\n updateObservers(node);\n if (!node.$e && node.$i) {\n write.call(node, result);\n } else {\n node.$v = result;\n node.$i = true;\n }\n } catch (error) {\n updateObservers(node);\n handleError(node, error);\n } finally {\n currentObservers = prevObservers;\n currentObserversIndex = prevObserversIndex;\n node.$st = STATE_CLEAN;\n }\n}\nfunction updateObservers(node) {\n if (currentObservers) {\n if (node.$s)\n removeSourceObservers(node, currentObserversIndex);\n if (node.$s && currentObserversIndex > 0) {\n node.$s.length = currentObserversIndex + currentObservers.length;\n for (let i = 0; i < currentObservers.length; i++) {\n node.$s[currentObserversIndex + i] = currentObservers[i];\n }\n } else {\n node.$s = currentObservers;\n }\n let source;\n for (let i = currentObserversIndex; i < node.$s.length; i++) {\n source = node.$s[i];\n if (!source.$o)\n source.$o = [node];\n else\n source.$o.push(node);\n }\n } else if (node.$s && currentObserversIndex < node.$s.length) {\n removeSourceObservers(node, currentObserversIndex);\n node.$s.length = currentObserversIndex;\n }\n}\nfunction notify(node, state) {\n if (node.$st >= state)\n return;\n if (node.$e && node.$st === STATE_CLEAN) {\n effects.push(node);\n if (!scheduledEffects)\n flushEffects();\n }\n node.$st = state;\n if (node.$o) {\n for (let i = 0; i < node.$o.length; i++) {\n notify(node.$o[i], STATE_CHECK);\n }\n }\n}\nfunction removeSourceObservers(node, index) {\n let source, swap;\n for (let i = index; i < node.$s.length; i++) {\n source = node.$s[i];\n if (source.$o) {\n swap = source.$o.indexOf(node);\n source.$o[swap] = source.$o[source.$o.length - 1];\n source.$o.pop();\n }\n }\n}\nfunction signal(initialValue, options) {\n const node = createComputation(initialValue, null, options), signal2 = read.bind(node);\n signal2[SCOPE] = true;\n signal2.set = write.bind(node);\n return signal2;\n}\nfunction isReadSignal(fn) {\n return isFunction$1(fn) && SCOPE in fn;\n}\nfunction computed(compute2, options) {\n const node = createComputation(\n options?.initial,\n compute2,\n options\n ), signal2 = read.bind(node);\n signal2[SCOPE] = true;\n return signal2;\n}\nfunction effect$1(effect2, options) {\n const signal2 = createComputation(\n null,\n function runEffect() {\n let effectResult = effect2();\n isFunction$1(effectResult) && onDispose(effectResult);\n return null;\n },\n void 0\n );\n signal2.$e = true;\n update(signal2);\n return dispose.bind(signal2, true);\n}\nfunction isWriteSignal(fn) {\n return isReadSignal(fn) && \"set\" in fn;\n}\nfunction noop(...args) {\n}\nfunction isNull(value) {\n return value === null;\n}\nfunction isUndefined(value) {\n return typeof value === \"undefined\";\n}\nfunction isNil(value) {\n return isNull(value) || isUndefined(value);\n}\nfunction isObject(value) {\n return value?.constructor === Object;\n}\nfunction isNumber(value) {\n return typeof value === \"number\" && !Number.isNaN(value);\n}\nfunction isString(value) {\n return typeof value === \"string\";\n}\nfunction isBoolean(value) {\n return typeof value === \"boolean\";\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction isArray(value) {\n return Array.isArray(value);\n}\nconst effect = IS_SERVER ? serverEffect : effect$1;\nfunction serverEffect(effect2, options) {\n if (typeof process !== \"undefined\" && process.env?.NODE_ENV === \"test\") {\n return effect$1(effect2);\n }\n return noop;\n}\nconst EVENT = IS_SERVER ? class Event2 {\n} : Event, DOM_EVENT = Symbol(\"DOM_EVENT\");\nclass DOMEvent extends EVENT {\n [DOM_EVENT] = true;\n /**\n * The event detail.\n */\n detail;\n /**\n * The event trigger chain.\n */\n triggers = new EventTriggers();\n /**\n * The preceding event that was responsible for this event being fired.\n */\n get trigger() {\n return this.triggers.source;\n }\n /**\n * The origin event that lead to this event being fired.\n */\n get originEvent() {\n return this.triggers.origin;\n }\n /**\n * Whether the origin event was triggered by the user.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted}\n */\n get isOriginTrusted() {\n return this.triggers.origin?.isTrusted ?? false;\n }\n constructor(type, ...init) {\n super(type, init[0]);\n this.detail = init[0]?.detail;\n const trigger = init[0]?.trigger;\n if (trigger) this.triggers.add(trigger);\n }\n}\nclass EventTriggers {\n chain = [];\n get source() {\n return this.chain[0];\n }\n get origin() {\n return this.chain[this.chain.length - 1];\n }\n /**\n * Appends the event to the end of the chain.\n */\n add(event) {\n this.chain.push(event);\n if (isDOMEvent(event)) {\n this.chain.push(...event.triggers);\n }\n }\n /**\n * Removes the event from the chain and returns it (if found).\n */\n remove(event) {\n return this.chain.splice(this.chain.indexOf(event), 1)[0];\n }\n /**\n * Returns whether the chain contains the given `event`.\n */\n has(event) {\n return this.chain.some((e) => e === event);\n }\n /**\n * Returns whether the chain contains the given event type.\n */\n hasType(type) {\n return !!this.findType(type);\n }\n /**\n * Returns the first event with the given `type` found in the chain.\n */\n findType(type) {\n return this.chain.find((e) => e.type === type);\n }\n /**\n * Walks an event chain on a given `event`, and invokes the given `callback` for each trigger event.\n */\n walk(callback) {\n for (const event of this.chain) {\n const returnValue = callback(event);\n if (returnValue) return [event, returnValue];\n }\n }\n [Symbol.iterator]() {\n return this.chain.values();\n }\n}\nfunction isDOMEvent(event) {\n return !!event?.[DOM_EVENT];\n}\nfunction walkTriggerEventChain(event, callback) {\n if (!isDOMEvent(event)) return;\n return event.triggers.walk(callback);\n}\nfunction findTriggerEvent(event, type) {\n return isDOMEvent(event) ? event.triggers.findType(type) : void 0;\n}\nfunction hasTriggerEvent(event, type) {\n return !!findTriggerEvent(event, type);\n}\nfunction appendTriggerEvent(event, trigger) {\n if (trigger) event.triggers.add(trigger);\n}\nclass EventsTarget extends EventTarget {\n /** @internal type only */\n $ts__events;\n addEventListener(type, callback, options) {\n return super.addEventListener(type, callback, options);\n }\n removeEventListener(type, callback, options) {\n return super.removeEventListener(type, callback, options);\n }\n}\nfunction listenEvent(target, type, handler, options) {\n if (IS_SERVER) return noop;\n target.addEventListener(type, handler, options);\n return onDispose(() => target.removeEventListener(type, handler, options));\n}\nclass EventsController {\n #target;\n #controller;\n get signal() {\n return this.#controller.signal;\n }\n constructor(target) {\n this.#target = target;\n this.#controller = new AbortController();\n onDispose(this.abort.bind(this));\n }\n add(type, handler, options) {\n if (this.signal.aborted) throw Error(\"aborted\");\n this.#target.addEventListener(type, handler, {\n ...options,\n signal: options?.signal ? anySignal(this.signal, options.signal) : this.signal\n });\n return this;\n }\n remove(type, handler) {\n this.#target.removeEventListener(type, handler);\n return this;\n }\n abort(reason) {\n this.#controller.abort(reason);\n }\n}\nfunction anySignal(...signals) {\n const controller = new AbortController(), options = { signal: controller.signal };\n function onAbort(event) {\n controller.abort(event.target.reason);\n }\n for (const signal2 of signals) {\n if (signal2.aborted) {\n controller.abort(signal2.reason);\n break;\n }\n signal2.addEventListener(\"abort\", onAbort, options);\n }\n return controller.signal;\n}\nfunction isPointerEvent(event) {\n return !!event?.type.startsWith(\"pointer\");\n}\nfunction isTouchEvent(event) {\n return !!event?.type.startsWith(\"touch\");\n}\nfunction isMouseEvent(event) {\n return /^(click|mouse)/.test(event?.type ?? \"\");\n}\nfunction isKeyboardEvent(event) {\n return !!event?.type.startsWith(\"key\");\n}\nfunction wasEnterKeyPressed(event) {\n return isKeyboardEvent(event) && event.key === \"Enter\";\n}\nfunction isKeyboardClick(event) {\n return isKeyboardEvent(event) && (event.key === \"Enter\" || event.key === \" \");\n}\nfunction isDOMNode(node) {\n return node instanceof Node;\n}\nfunction setAttribute(host, name, value) {\n if (!host) return;\n else if (!value && value !== \"\" && value !== 0) {\n host.removeAttribute(name);\n } else {\n const attrValue = value === true ? \"\" : value + \"\";\n if (host.getAttribute(name) !== attrValue) {\n host.setAttribute(name, attrValue);\n }\n }\n}\nfunction setStyle(host, property, value) {\n if (!host) return;\n else if (!value && value !== 0) {\n host.style.removeProperty(property);\n } else {\n host.style.setProperty(property, value + \"\");\n }\n}\nfunction toggleClass(host, name, value) {\n host.classList[value ? \"add\" : \"remove\"](name);\n}\nfunction unwrapDeep(fn) {\n let value = fn;\n while (typeof value === \"function\") value = value.call(this);\n return value;\n}\nfunction createContext(provide) {\n return { id: Symbol(), provide };\n}\nfunction provideContext(context, value, scope = getScope()) {\n const hasProvidedValue = !isUndefined(value);\n setContext(context.id, hasProvidedValue ? value : context.provide?.(), scope);\n}\nfunction useContext(context) {\n const value = getContext(context.id);\n return value;\n}\nfunction hasProvidedContext(context) {\n return !isUndefined(getContext(context.id));\n}\nconst PROPS = /* @__PURE__ */ Symbol(0);\nconst METHODS = /* @__PURE__ */ Symbol(0);\nconst ON_DISPATCH = /* @__PURE__ */ Symbol(0);\nconst EMPTY_PROPS = {};\nclass Instance {\n /** @internal type only */\n $ts__events;\n /** @internal type only */\n $ts__vars;\n /* @internal */\n [ON_DISPATCH] = null;\n $el = signal(null);\n el = null;\n scope = null;\n attachScope = null;\n connectScope = null;\n component = null;\n destroyed = false;\n props = EMPTY_PROPS;\n attrs = null;\n styles = null;\n state;\n $state;\n #setupCallbacks = [];\n #attachCallbacks = [];\n #connectCallbacks = [];\n #destroyCallbacks = [];\n constructor(Component2, scope, init) {\n this.scope = scope;\n if (init?.scope) init.scope.append(scope);\n let stateFactory = Component2.state, props = Component2.props;\n if (stateFactory) {\n this.$state = stateFactory.create();\n this.state = new Proxy(this.$state, {\n get: (_, prop2) => this.$state[prop2]()\n });\n provideContext(stateFactory, this.$state);\n }\n if (props) {\n this.props = createInstanceProps(props);\n if (init?.props) {\n for (const prop2 of Object.keys(init.props)) {\n this.props[prop2]?.set(init.props[prop2]);\n }\n }\n }\n onDispose(this.destroy.bind(this));\n }\n setup() {\n scoped(() => {\n for (const callback of this.#setupCallbacks) callback();\n }, this.scope);\n }\n attach(el) {\n if (this.el) return;\n this.el = el;\n this.$el.set(el);\n scoped(() => {\n this.attachScope = createScope();\n scoped(() => {\n for (const callback of this.#attachCallbacks) callback(this.el);\n this.#attachAttrs();\n this.#attachStyles();\n }, this.attachScope);\n }, this.scope);\n el.dispatchEvent(new Event(\"attached\"));\n }\n detach() {\n this.attachScope?.dispose();\n this.attachScope = null;\n this.connectScope = null;\n this.el = null;\n this.$el.set(null);\n }\n connect() {\n if (!this.el || !this.attachScope || !this.#connectCallbacks.length) return;\n scoped(() => {\n this.connectScope = createScope();\n scoped(() => {\n for (const callback of this.#connectCallbacks) callback(this.el);\n }, this.connectScope);\n }, this.attachScope);\n }\n disconnect() {\n this.connectScope?.dispose();\n this.connectScope = null;\n }\n destroy() {\n if (this.destroyed) return;\n this.destroyed = true;\n scoped(() => {\n for (const callback of this.#destroyCallbacks) callback(this.el);\n }, this.scope);\n const el = this.el;\n this.detach();\n this.scope.dispose();\n this.#setupCallbacks.length = 0;\n this.#attachCallbacks.length = 0;\n this.#connectCallbacks.length = 0;\n this.#destroyCallbacks.length = 0;\n this.component = null;\n this.attrs = null;\n this.styles = null;\n this.props = EMPTY_PROPS;\n this.scope = null;\n this.state = EMPTY_PROPS;\n this.$state = null;\n if (el) delete el.$;\n }\n addHooks(target) {\n if (target.onSetup) this.#setupCallbacks.push(target.onSetup.bind(target));\n if (target.onAttach) this.#attachCallbacks.push(target.onAttach.bind(target));\n if (target.onConnect) this.#connectCallbacks.push(target.onConnect.bind(target));\n if (target.onDestroy) this.#destroyCallbacks.push(target.onDestroy.bind(target));\n }\n #attachAttrs() {\n if (!this.attrs) return;\n for (const name of Object.keys(this.attrs)) {\n if (IS_SERVER) {\n setAttribute(this.el, name, unwrapDeep.call(this.component, this.attrs[name]));\n } else if (isFunction(this.attrs[name])) {\n effect(this.#setAttr.bind(this, name));\n } else {\n setAttribute(this.el, name, this.attrs[name]);\n }\n }\n }\n #attachStyles() {\n if (!this.styles) return;\n for (const name of Object.keys(this.styles)) {\n if (IS_SERVER) {\n setStyle(this.el, name, unwrapDeep.call(this.component, this.styles[name]));\n } else if (isFunction(this.styles[name])) {\n effect(this.#setStyle.bind(this, name));\n } else {\n setStyle(this.el, name, this.styles[name]);\n }\n }\n }\n #setAttr(name) {\n setAttribute(this.el, name, this.attrs[name].call(this.component));\n }\n #setStyle(name) {\n setStyle(this.el, name, this.styles[name].call(this.component));\n }\n}\nfunction createInstanceProps(props) {\n const $props = {};\n for (const name of Object.keys(props)) {\n const def = props[name];\n $props[name] = signal(def, def);\n }\n return $props;\n}\nlet currentInstance = { $$: null };\nfunction createComponent(Component2, init) {\n return root(() => {\n currentInstance.$$ = new Instance(Component2, getScope(), init);\n const component = new Component2();\n currentInstance.$$.component = component;\n currentInstance.$$ = null;\n return component;\n });\n}\nclass ViewController extends EventTarget {\n /** @internal */\n $$;\n get el() {\n return this.$$.el;\n }\n get $el() {\n return this.$$.$el();\n }\n get scope() {\n return this.$$.scope;\n }\n get attachScope() {\n return this.$$.attachScope;\n }\n get connectScope() {\n return this.$$.connectScope;\n }\n /** @internal */\n get $props() {\n return this.$$.props;\n }\n /** @internal */\n get $state() {\n return this.$$.$state;\n }\n get state() {\n return this.$$.state;\n }\n constructor() {\n super();\n if (currentInstance.$$) this.attach(currentInstance);\n }\n attach({ $$ }) {\n this.$$ = $$;\n $$.addHooks(this);\n return this;\n }\n addEventListener(type, callback, options) {\n this.listen(type, callback, options);\n }\n removeEventListener(type, callback, options) {\n this.el?.removeEventListener(type, callback, options);\n }\n /**\n * The given callback is invoked when the component is ready to be set up.\n *\n * - This hook will run once.\n * - This hook is called both client-side and server-side.\n * - It's safe to use context inside this hook.\n * - The host element has not attached yet - wait for `onAttach`.\n */\n /**\n * This method can be used to specify attributes that should be set on the host element. Any\n * attributes that are assigned to a function will be considered a signal and updated accordingly.\n */\n setAttributes(attributes) {\n if (!this.$$.attrs) this.$$.attrs = {};\n Object.assign(this.$$.attrs, attributes);\n }\n /**\n * This method can be used to specify styles that should set be set on the host element. Any\n * styles that are assigned to a function will be considered a signal and updated accordingly.\n */\n setStyles(styles) {\n if (!this.$$.styles) this.$$.styles = {};\n Object.assign(this.$$.styles, styles);\n }\n /**\n * This method is used to satisfy the CSS variables contract specified on the current\n * component. Other CSS variables can be set via the `setStyles` method.\n */\n setCSSVars(vars) {\n this.setStyles(vars);\n }\n /**\n * Type-safe utility for creating component DOM events.\n */\n createEvent(type, ...init) {\n return new DOMEvent(type, init[0]);\n }\n /**\n * Creates a `DOMEvent` and dispatches it from the host element. This method is typed to\n * match all component events.\n */\n dispatch(type, ...init) {\n if (IS_SERVER || !this.el) return false;\n const event = type instanceof Event ? type : new DOMEvent(type, init[0]);\n Object.defineProperty(event, \"target\", {\n get: () => this.$$.component\n });\n return untrack(() => {\n this.$$[ON_DISPATCH]?.(event);\n return this.el.dispatchEvent(event);\n });\n }\n dispatchEvent(event) {\n return this.dispatch(event);\n }\n /**\n * Adds an event listener for the given `type` and returns a function which can be invoked to\n * remove the event listener.\n *\n * - The listener is removed if the current scope is disposed.\n * - This method is safe to use on the server (noop).\n */\n listen(type, handler, options) {\n if (IS_SERVER || !this.el) return noop;\n return listenEvent(this.el, type, handler, options);\n }\n}\nclass Component extends ViewController {\n subscribe(callback) {\n return scoped(() => effect(() => callback(this.state)), this.$$.scope);\n }\n destroy() {\n this.$$.destroy();\n }\n}\nfunction prop(target, propertyKey, descriptor) {\n if (!target[PROPS]) target[PROPS] = /* @__PURE__ */ new Set();\n target[PROPS].add(propertyKey);\n}\nfunction method(target, propertyKey, descriptor) {\n if (!target[METHODS]) target[METHODS] = /* @__PURE__ */ new Set();\n target[METHODS].add(propertyKey);\n}\nclass State {\n id = Symbol(0);\n record;\n #descriptors;\n constructor(record) {\n this.record = record;\n this.#descriptors = Object.getOwnPropertyDescriptors(record);\n }\n create() {\n const store = {}, state = new Proxy(store, { get: (_, prop2) => store[prop2]() });\n for (const name of Object.keys(this.record)) {\n const getter = this.#descriptors[name].get;\n store[name] = getter ? computed(getter.bind(state)) : signal(this.record[name]);\n }\n return store;\n }\n reset(record, filter) {\n for (const name of Object.keys(record)) {\n if (!this.#descriptors[name].get && (!filter || filter(name))) {\n record[name].set(this.record[name]);\n }\n }\n }\n}\nfunction useState(state) {\n return useContext(state);\n}\nfunction camelToKebabCase(str) {\n return str.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\nfunction kebabToCamelCase(str) {\n return str.replace(/-./g, (x) => x[1].toUpperCase());\n}\nfunction kebabToPascalCase(str) {\n return kebabToTitleCase(str).replace(/\\s/g, \"\");\n}\nfunction kebabToTitleCase(str) {\n return uppercaseFirstChar(str.replace(/-./g, (x) => \" \" + x[1].toUpperCase()));\n}\nfunction uppercaseFirstChar(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst ReactScopeContext = React.createContext({ current: null });\nReactScopeContext.displayName = \"Scope\";\nfunction WithScope(scope, ...children) {\n return React.createElement(ReactScopeContext.Provider, { value: scope }, ...children);\n}\nfunction useReactScope() {\n return React.useContext(ReactScopeContext).current;\n}\nfunction useReactContext(context) {\n const scope = useReactScope();\n return React.useMemo(() => getContext(context.id, scope), [scope]);\n}\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}\nfunction composeRefs(...refs) {\n return (node) => refs.forEach((ref) => setRef(ref, node));\n}\nfunction createClientComponent(Component2, options) {\n const forwardComponent = React.forwardRef((props, forwardRef) => {\n let parentScopeRef = React.useContext(ReactScopeContext), scopeRef = React.useRef(null), stateRef = React.useRef();\n if (!stateRef.current) {\n const state2 = createInternalState(), component = initComponent(Component2, state2, props, parentScopeRef.current);\n state2.component = component;\n stateRef.current = state2;\n scopeRef.current = component.scope;\n }\n function onAttach() {\n let state2 = stateRef.current, scope = parentScopeRef.current;\n window.cancelAnimationFrame(state2.destroyId);\n state2.destroyId = -1;\n if (state2.component.$$.destroyed) {\n const component = initComponent(Component2, state2, props, scope);\n state2.component = component;\n state2.attached = false;\n state2.forwardRef = false;\n scopeRef.current = component.scope;\n }\n if (state2.el) {\n attachToHost(state2, state2.el);\n }\n if (!state2.forwardRef) {\n setRef(forwardRef, state2.component);\n state2.forwardRef = true;\n }\n return () => detachFromHost(state2);\n }\n function onRefChange(el) {\n const state2 = stateRef.current;\n if (!state2.forwardRef) {\n state2.el = el;\n return;\n }\n window.cancelAnimationFrame(state2.refChangeId);\n state2.refChangeId = window.requestAnimationFrame(() => {\n const state3 = stateRef.current;\n state3.refChangeId = -1;\n if (state3.el === el) return;\n detachFromHost(state3);\n if (el) attachToHost(state3, el);\n state3.el = el;\n });\n }\n React.useEffect(() => {\n const state2 = stateRef.current;\n window.cancelAnimationFrame(state2.destroyId);\n state2.destroyId = -1;\n return function onDestroy() {\n if (!isFunction(props.children)) return;\n window.cancelAnimationFrame(state2.refChangeId);\n state2.refChangeId = -1;\n window.cancelAnimationFrame(state2.connectId);\n state2.connectId = -1;\n window.cancelAnimationFrame(state2.destroyId);\n state2.destroyId = window.requestAnimationFrame(() => {\n state2.destroyId = -1;\n detachFromHost(state2);\n state2.component.$$.destroy();\n state2.component.$$[ON_DISPATCH] = null;\n state2.callbacks = {};\n state2.domCallbacks = {};\n scopeRef.current = null;\n });\n };\n }, []);\n React.useEffect(tick);\n let state = stateRef.current, { children, ...renderProps } = props, attrs = {}, prevPropNames = state.prevProps, newPropNames = Object.keys(renderProps);\n state.callbacks = {};\n for (const name of [...prevPropNames, ...newPropNames]) {\n if (options.props.has(name)) {\n state.component.$props[name].set(\n // If the prop was removed we'll use the default value provided on Component creation.\n isUndefined(renderProps[name]) ? Component2.props?.[name] : renderProps[name]\n );\n } else if (options.events?.has(name) || options.eventsRE?.test(name)) {\n state.callbacks[name] = renderProps[name];\n } else if (options.domEvents?.has(name) || options.domEventsRE?.test(name)) {\n let type = camelToKebabCase(name.slice(2));\n state.domCallbacks[type] = renderProps[name];\n if (!newPropNames.includes(name)) {\n state.el?.removeEventListener(type, state.onDOMEvent);\n state.listening?.delete(type);\n } else if (state.el && !state.listening?.has(type)) {\n if (!state.listening) state.listening = /* @__PURE__ */ new Set();\n state.listening.add(type);\n state.el.addEventListener(type, state.onDOMEvent);\n }\n } else {\n attrs[name] = renderProps[name];\n }\n }\n state.prevProps = newPropNames;\n return WithScope(\n scopeRef,\n React.createElement(AttachEffect, {\n effect: onAttach\n }),\n isFunction(children) ? children?.(\n {\n ...attrs,\n suppressHydrationWarning: true,\n ref: onRefChange\n },\n state.component\n ) : children\n );\n });\n forwardComponent.displayName = Component2.name + \"Bridge\";\n return forwardComponent;\n}\nfunction AttachEffect({ effect: effect2 }) {\n React.useEffect(effect2, []);\n return null;\n}\nconst eventTypeToCallbackName = /* @__PURE__ */ new Map();\nfunction createInternalState() {\n const state = {\n el: null,\n prevProps: [],\n callbacks: {},\n domCallbacks: {},\n refChangeId: -1,\n connectId: -1,\n destroyId: -1,\n attached: false,\n forwardRef: false,\n listening: null,\n onDOMEvent(event) {\n const args = !isUndefined(event.detail) ? [event.detail, event] : [event];\n state.domCallbacks[event.type]?.(...args);\n }\n };\n return state;\n}\nfunction attachToHost(state, el) {\n if (state.el === el && state.attached) return;\n else if (state.attached) detachFromHost(state);\n if (state.domCallbacks) {\n if (!state.listening) state.listening = /* @__PURE__ */ new Set();\n for (const type of Object.keys(state.domCallbacks)) {\n if (state.listening.has(type)) continue;\n el.addEventListener(type, state.onDOMEvent);\n state.listening.add(type);\n }\n }\n state.component.$$.attach(el);\n state.connectId = window.requestAnimationFrame(() => {\n state.component.$$.connect();\n state.connectId = -1;\n });\n state.attached = true;\n}\nfunction detachFromHost(state) {\n if (!state.attached) return;\n window.cancelAnimationFrame(state.connectId);\n state.connectId = -1;\n state.component.$$.detach();\n state.attached = false;\n if (state.el && state.listening) {\n for (const type of state.listening) {\n state.el.removeEventListener(type, state.onDOMEvent);\n }\n state.listening.clear();\n }\n}\nfunction onDispatch(event) {\n let callbackProp = eventTypeToCallbackName.get(event.type), args = !isUndefined(event.detail) ? [event.detail, event] : [event];\n if (!callbackProp) {\n eventTypeToCallbackName.set(event.type, callbackProp = `on${kebabToPascalCase(event.type)}`);\n }\n this.callbacks[callbackProp]?.(...args);\n}\nfunction initComponent(Component2, state, props, scope) {\n const component = createComponent(Component2, { props, scope });\n component.$$[ON_DISPATCH] = onDispatch.bind(state);\n component.$$.setup();\n return component;\n}\nfunction escape(value, isAttr = false) {\n const type = typeof value;\n if (type !== \"string\") {\n if (!isAttr && type === \"function\") return escape(value());\n if (isAttr && type === \"boolean\") return value + \"\";\n return value;\n }\n const delimeter = isAttr ? '\"' : \"<\", escapeDelimeter = isAttr ? \""\" : \"<\";\n let iDelimeter = value.indexOf(delimeter), isAmpersand = value.indexOf(\"&\");\n if (iDelimeter < 0 && isAmpersand < 0) return value;\n let left = 0, out = \"\";\n while (iDelimeter >= 0 && isAmpersand >= 0) {\n if (iDelimeter < isAmpersand) {\n if (left < iDelimeter) out += value.substring(left, iDelimeter);\n out += escapeDelimeter;\n left = iDelimeter + 1;\n iDelimeter = value.indexOf(delimeter, left);\n } else {\n if (left < isAmpersand) out += value.substring(left, isAmpersand);\n out += \"&\";\n left = isAmpersand + 1;\n isAmpersand = value.indexOf(\"&\", left);\n }\n }\n if (iDelimeter >= 0) {\n do {\n if (left < iDelimeter) out += value.substring(left, iDelimeter);\n out += escapeDelimeter;\n left = iDelimeter + 1;\n iDelimeter = value.indexOf(delimeter, left);\n } while (iDelimeter >= 0);\n } else\n while (isAmpersand >= 0) {\n if (left < isAmpersand) out += value.substring(left, isAmpersand);\n out += \"&\";\n left = isAmpersand + 1;\n isAmpersand = value.indexOf(\"&\", left);\n }\n return left < value.length ? out + value.substring(left) : out;\n}\nconst SETUP = /* @__PURE__ */ Symbol(0);\nconst classSplitRE = /\\s+/;\nfunction parseClassAttr(tokens, attrValue) {\n const classes = attrValue.trim().split(classSplitRE);\n for (const token of classes) tokens.add(token);\n}\nconst styleSplitRE = /\\s*:\\s*/;\nconst stylesDelimeterRE = /\\s*;\\s*/;\nfunction parseStyleAttr(tokens, attrValue) {\n const styles = attrValue.trim().split(stylesDelimeterRE);\n for (let i = 0; i < styles.length; i++) {\n if (styles[i] === \"\") continue;\n const [name, value] = styles[i].split(styleSplitRE);\n tokens.set(name, value);\n }\n}\nclass MaverickServerElement {\n keepAlive = false;\n forwardKeepAlive = true;\n $;\n attributes = new ServerAttributes();\n style = new ServerStyle();\n classList = new ServerClassList();\n get $props() {\n return this.$.$$.props;\n }\n get $state() {\n return this.$.$$.$state;\n }\n get state() {\n return this.$.state;\n }\n constructor(component) {\n this.$ = component;\n }\n setup() {\n const instance = this.$.$$;\n scoped(() => {\n if (this.hasAttribute(\"class\")) {\n parseClassAttr(this.classList.tokens, this.getAttribute(\"class\"));\n }\n if (this.hasAttribute(\"style\")) {\n parseStyleAttr(this.style.tokens, this.getAttribute(\"style\"));\n }\n instance.setup();\n instance.attach(this);\n if (this.classList.length > 0) {\n this.setAttribute(\"class\", this.classList.toString());\n }\n if (this.style.length > 0) {\n this.setAttribute(\"style\", this.style.toString());\n }\n if (this.keepAlive) {\n this.setAttribute(\"keep-alive\", \"\");\n }\n }, instance.scope);\n }\n getAttribute(name) {\n return this.attributes.getAttribute(name);\n }\n setAttribute(name, value) {\n this.attributes.setAttribute(name, value);\n }\n hasAttribute(name) {\n return this.attributes.hasAttribute(name);\n }\n removeAttribute(name) {\n return this.attributes.removeAttribute(name);\n }\n [SETUP]() {\n }\n addEventListener() {\n }\n removeEventListener() {\n }\n dispatchEvent() {\n return false;\n }\n subscribe() {\n return noop;\n }\n destroy() {\n this.$.destroy();\n }\n}\nclass ServerAttributes {\n #tokens = /* @__PURE__ */ new Map();\n get length() {\n return this.#tokens.size;\n }\n get tokens() {\n return this.#tokens;\n }\n getAttribute(name) {\n return this.#tokens.get(name) ?? null;\n }\n hasAttribute(name) {\n return this.#tokens.has(name);\n }\n setAttribute(name, value) {\n this.#tokens.set(name, value + \"\");\n }\n removeAttribute(name) {\n this.#tokens.delete(name);\n }\n toString() {\n if (this.#tokens.size === 0) return \"\";\n let result = \"\";\n for (const [name, value] of this.#tokens) {\n result += ` ${name}=\"${escape(value, true)}\"`;\n }\n return result;\n }\n}\nclass ServerStyle {\n #tokens = /* @__PURE__ */ new Map();\n get length() {\n return this.#tokens.size;\n }\n get tokens() {\n return this.#tokens;\n }\n getPropertyValue(prop2) {\n return this.#tokens.get(prop2) ?? \"\";\n }\n setProperty(prop2, value) {\n this.#tokens.set(prop2, value ?? \"\");\n }\n removeProperty(prop2) {\n const value = this.#tokens.get(prop2);\n this.#tokens.delete(prop2);\n return value ?? \"\";\n }\n toString() {\n if (this.#tokens.size === 0) return \"\";\n let result = \"\";\n for (const [name, value] of this.#tokens) {\n result += `${name}: ${value};`;\n }\n return result;\n }\n}\nclass ServerClassList {\n #tokens = /* @__PURE__ */ new Set();\n get length() {\n return this.#tokens.size;\n }\n get tokens() {\n return this.#tokens;\n }\n add(...tokens) {\n for (const token of tokens) {\n this.#tokens.add(token);\n }\n }\n contains(token) {\n return this.#tokens.has(token);\n }\n remove(token) {\n this.#tokens.delete(token);\n }\n replace(token, newToken) {\n if (!this.#tokens.has(token)) return false;\n this.#tokens.delete(token);\n this.#tokens.add(newToken);\n return true;\n }\n toggle(token, force) {\n if (force !== true && (this.#tokens.has(token) || force === false)) {\n this.#tokens.delete(token);\n return false;\n } else {\n this.#tokens.add(token);\n return true;\n }\n }\n toString() {\n return Array.from(this.#tokens).join(\" \");\n }\n}\nconst attrsToProps = {\n acceptcharset: \"acceptCharset\",\n \"accept-charset\": \"acceptCharset\",\n accesskey: \"accessKey\",\n allowfullscreen: \"allowFullScreen\",\n autocapitalize: \"autoCapitalize\",\n autocomplete: \"autoComplete\",\n autocorrect: \"autoCorrect\",\n autofocus: \"autoFocus\",\n autoplay: \"autoPlay\",\n autosave: \"autoSave\",\n cellpadding: \"cellPadding\",\n cellspacing: \"cellSpacing\",\n charset: \"charSet\",\n class: \"className\",\n classid: \"classID\",\n classname: \"className\",\n colspan: \"colSpan\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n controlslist: \"controlsList\",\n crossorigin: \"crossOrigin\",\n dangerouslysetinnerhtml: \"dangerouslySetInnerHTML\",\n datetime: \"dateTime\",\n defaultchecked: \"defaultChecked\",\n defaultvalue: \"defaultValue\",\n disablepictureinpicture: \"disablePictureInPicture\",\n disableremoteplayback: \"disableRemotePlayback\",\n enctype: \"encType\",\n enterkeyhint: \"enterKeyHint\",\n fetchpriority: \"fetchPriority\",\n for: \"htmlFor\",\n formmethod: \"formMethod\",\n formaction: \"formAction\",\n formenctype: \"formEncType\",\n formnovalidate: \"formNoValidate\",\n formtarget: \"formTarget\",\n frameborder: \"frameBorder\",\n hreflang: \"hrefLang\",\n htmlfor: \"htmlFor\",\n httpequiv: \"httpEquiv\",\n \"http-equiv\": \"httpEquiv\",\n imagesizes: \"imageSizes\",\n imagesrcset: \"imageSrcSet\",\n innerhtml: \"innerHTML\",\n inputmode: \"inputMode\",\n itemid: \"itemID\",\n itemprop: \"itemProp\",\n itemref: \"itemRef\",\n itemscope: \"itemScope\",\n itemtype: \"itemType\",\n keyparams: \"keyParams\",\n keytype: \"keyType\",\n marginwidth: \"marginWidth\",\n marginheight: \"marginHeight\",\n maxlength: \"maxLength\",\n mediagroup: \"mediaGroup\",\n minlength: \"minLength\",\n nomodule: \"noModule\",\n novalidate: \"noValidate\",\n playsinline: \"playsInline\",\n radiogroup: \"radioGroup\",\n readonly: \"readOnly\",\n referrerpolicy: \"referrerPolicy\",\n rowspan: \"rowSpan\",\n spellcheck: \"spellCheck\",\n srcdoc: \"srcDoc\",\n srclang: \"srcLang\",\n srcset: \"srcSet\",\n tabindex: \"tabIndex\",\n usemap: \"useMap\"\n};\nfunction createServerComponent(Component2, options) {\n function ServerComponent(props) {\n let scope = React.useContext(ReactScopeContext), component = createComponent(Component2, {\n props,\n scope: scope.current\n }), host = new MaverickServerElement(component), attrs = {}, { style = {}, children, forwardRef, ...renderProps } = props;\n if (options.props.size) {\n for (const prop2 of Object.keys(renderProps)) {\n if (!options.props.has(prop2)) attrs[prop2] = renderProps[prop2];\n }\n } else {\n attrs = renderProps;\n }\n host.setup();\n if (host.hasAttribute(\"style\")) {\n for (const [name, value] of host.style.tokens) {\n style[name.startsWith(\"--\") ? name : kebabToCamelCase(name)] = value;\n }\n host.removeAttribute(\"style\");\n }\n for (const [attrName, attrValue] of host.attributes.tokens) {\n const propName = attrsToProps[attrName];\n if (propName) {\n if (!(propName in attrs)) {\n attrs[propName] = attrValue;\n }\n host.removeAttribute(attrName);\n }\n }\n return WithScope(\n { current: component.$$.scope },\n isFunction(children) ? children?.(\n {\n ...Object.fromEntries(host.attributes.tokens),\n ...attrs,\n style\n },\n component\n ) : children,\n React.createElement(() => {\n host.destroy();\n return null;\n })\n );\n }\n ServerComponent.displayName = Component2.name + \"Bridge\";\n return ServerComponent;\n}\nfunction useStateContext(state) {\n return useReactContext(state);\n}\nfunction useSignal(signal2, key) {\n const [, scheduleReactUpdate] = React.useState();\n React.useEffect(() => {\n return effect$1(() => {\n signal2();\n scheduleReactUpdate({});\n });\n }, [key ?? signal2]);\n return signal2();\n}\nfunction ariaBool(value) {\n return value ? \"true\" : \"false\";\n}\nfunction createDisposalBin() {\n const disposal = /* @__PURE__ */ new Set();\n return {\n add(...callbacks) {\n for (const callback of callbacks) disposal.add(callback);\n },\n empty() {\n for (const callback of disposal) callback();\n disposal.clear();\n }\n };\n}\nfunction keysOf(obj) {\n return Object.keys(obj);\n}\nfunction deferredPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\nfunction waitTimeout(delay) {\n return new Promise((resolve) => setTimeout(resolve, delay));\n}\nfunction animationFrameThrottle(func) {\n if (IS_SERVER) return noop;\n let id = -1, lastArgs;\n function throttle(...args) {\n lastArgs = args;\n if (id >= 0) return;\n id = window.requestAnimationFrame(() => {\n func.apply(this, lastArgs);\n id = -1;\n lastArgs = void 0;\n });\n }\n return throttle;\n}\nconst requestIdleCallback = IS_SERVER ? noop : typeof window !== \"undefined\" ? \"requestIdleCallback\" in window ? window.requestIdleCallback : (cb) => window.setTimeout(cb, 1) : noop;\nfunction waitIdlePeriod(callback, options) {\n if (IS_SERVER) return Promise.resolve();\n return new Promise((resolve) => {\n requestIdleCallback((deadline) => {\n callback?.(deadline);\n resolve();\n }, options);\n });\n}\nfunction useSignalRecord($state) {\n const [, scheduleReactUpdate] = React.useState(), tracking = React.useRef(null);\n if (tracking.current == null) {\n tracking.current = {\n state: {},\n $update: signal({}),\n props: /* @__PURE__ */ new Set()\n };\n }\n React.useEffect(() => {\n let { state, $update, props } = tracking.current;\n return effect(() => {\n for (const prop2 of props) {\n const value = $state[prop2]();\n state[prop2] = isArray(value) ? [...value] : value;\n }\n $update();\n scheduleReactUpdate({});\n });\n }, [$state]);\n return React.useMemo(() => {\n let { state, $update, props } = tracking.current, scheduledUpdate = false;\n props.clear();\n return new Proxy(state, {\n get(_, prop2) {\n if (!props.has(prop2) && prop2 in $state) {\n props.add(prop2);\n const value = $state[prop2]();\n state[prop2] = isArray(value) ? [...value] : value;\n if (!scheduledUpdate) {\n $update.set({});\n scheduledUpdate = true;\n queueMicrotask(() => scheduledUpdate = false);\n }\n }\n return state[prop2];\n },\n set(_, prop2, newValue) {\n if (!(prop2 in $state)) state[prop2] = newValue;\n return true;\n }\n });\n }, [$state]);\n}\nfunction createReactComponent(Component2, options) {\n if (IS_SERVER) {\n return createServerComponent(Component2, {\n props: new Set(Object.keys(Component2.props || {}))\n });\n } else {\n return createClientComponent(Component2, {\n props: new Set(Object.keys(Component2.props || {})),\n events: new Set(options?.events),\n eventsRE: options?.eventsRegex,\n domEvents: options?.domEvents,\n domEventsRE: options?.domEventsRegex\n });\n }\n}\n\nvar key = {\n fullscreenEnabled: 0,\n fullscreenElement: 1,\n requestFullscreen: 2,\n exitFullscreen: 3,\n fullscreenchange: 4,\n fullscreenerror: 5,\n fullscreen: 6\n};\nvar webkit = [\n \"webkitFullscreenEnabled\",\n \"webkitFullscreenElement\",\n \"webkitRequestFullscreen\",\n \"webkitExitFullscreen\",\n \"webkitfullscreenchange\",\n \"webkitfullscreenerror\",\n \"-webkit-full-screen\"\n];\nvar moz = [\n \"mozFullScreenEnabled\",\n \"mozFullScreenElement\",\n \"mozRequestFullScreen\",\n \"mozCancelFullScreen\",\n \"mozfullscreenchange\",\n \"mozfullscreenerror\",\n \"-moz-full-screen\"\n];\nvar ms = [\n \"msFullscreenEnabled\",\n \"msFullscreenElement\",\n \"msRequestFullscreen\",\n \"msExitFullscreen\",\n \"MSFullscreenChange\",\n \"MSFullscreenError\",\n \"-ms-fullscreen\"\n];\nvar document$1 = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" ? window.document : {};\nvar vendor = \"fullscreenEnabled\" in document$1 && Object.keys(key) || webkit[0] in document$1 && webkit || moz[0] in document$1 && moz || ms[0] in document$1 && ms || [];\nvar fscreen = {\n requestFullscreen: function(element) {\n return element[vendor[key.requestFullscreen]]();\n },\n requestFullscreenFunction: function(element) {\n return element[vendor[key.requestFullscreen]];\n },\n get exitFullscreen() {\n return document$1[vendor[key.exitFullscreen]].bind(document$1);\n },\n get fullscreenPseudoClass() {\n return \":\" + vendor[key.fullscreen];\n },\n addEventListener: function(type, handler, options) {\n return document$1.addEventListener(vendor[key[type]], handler, options);\n },\n removeEventListener: function(type, handler, options) {\n return document$1.removeEventListener(vendor[key[type]], handler, options);\n },\n get fullscreenEnabled() {\n return Boolean(document$1[vendor[key.fullscreenEnabled]]);\n },\n set fullscreenEnabled(val) {\n },\n get fullscreenElement() {\n return document$1[vendor[key.fullscreenElement]];\n },\n set fullscreenElement(val) {\n },\n get onfullscreenchange() {\n return document$1[(\"on\" + vendor[key.fullscreenchange]).toLowerCase()];\n },\n set onfullscreenchange(handler) {\n return document$1[(\"on\" + vendor[key.fullscreenchange]).toLowerCase()] = handler;\n },\n get onfullscreenerror() {\n return document$1[(\"on\" + vendor[key.fullscreenerror]).toLowerCase()];\n },\n set onfullscreenerror(handler) {\n return document$1[(\"on\" + vendor[key.fullscreenerror]).toLowerCase()] = handler;\n }\n};\n\nvar functionThrottle = throttle;\n\nfunction throttle(fn, interval, options) {\n var timeoutId = null;\n var throttledFn = null;\n var leading = (options && options.leading);\n var trailing = (options && options.trailing);\n\n if (leading == null) {\n leading = true; // default\n }\n\n if (trailing == null) {\n trailing = !leading; //default\n }\n\n if (leading == true) {\n trailing = false; // forced because there should be invocation per call\n }\n\n var cancel = function() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n var flush = function() {\n var call = throttledFn;\n cancel();\n\n if (call) {\n call();\n }\n };\n\n var throttleWrapper = function() {\n var callNow = leading && !timeoutId;\n var context = this;\n var args = arguments;\n\n throttledFn = function() {\n return fn.apply(context, args);\n };\n\n if (!timeoutId) {\n timeoutId = setTimeout(function() {\n timeoutId = null;\n\n if (trailing) {\n return throttledFn();\n }\n }, interval);\n }\n\n if (callNow) {\n callNow = false;\n return throttledFn();\n }\n };\n\n throttleWrapper.cancel = cancel;\n throttleWrapper.flush = flush;\n\n return throttleWrapper;\n}\n\nvar functionDebounce = debounce;\n\nfunction debounce(fn, wait, callFirst) {\n var timeout = null;\n var debouncedFn = null;\n\n var clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n\n debouncedFn = null;\n timeout = null;\n }\n };\n\n var flush = function() {\n var call = debouncedFn;\n clear();\n\n if (call) {\n call();\n }\n };\n\n var debounceWrapper = function() {\n if (!wait) {\n return fn.apply(this, arguments);\n }\n\n var context = this;\n var args = arguments;\n var callNow = callFirst && !timeout;\n clear();\n\n debouncedFn = function() {\n fn.apply(context, args);\n };\n\n timeout = setTimeout(function() {\n timeout = null;\n\n if (!callNow) {\n var call = debouncedFn;\n debouncedFn = null;\n\n return call();\n }\n }, wait);\n\n if (callNow) {\n return debouncedFn();\n }\n };\n\n debounceWrapper.cancel = clear;\n debounceWrapper.flush = flush;\n\n return debounceWrapper;\n}\n\nconst t = (t2) => \"object\" == typeof t2 && null != t2 && 1 === t2.nodeType, e = (t2, e2) => (!e2 || \"hidden\" !== t2) && (\"visible\" !== t2 && \"clip\" !== t2), n = (t2, n2) => {\n if (t2.clientHeight < t2.scrollHeight || t2.clientWidth < t2.scrollWidth) {\n const o2 = getComputedStyle(t2, null);\n return e(o2.overflowY, n2) || e(o2.overflowX, n2) || ((t3) => {\n const e2 = ((t4) => {\n if (!t4.ownerDocument || !t4.ownerDocument.defaultView) return null;\n try {\n return t4.ownerDocument.defaultView.frameElement;\n } catch (t5) {\n return null;\n }\n })(t3);\n return !!e2 && (e2.clientHeight < t3.scrollHeight || e2.clientWidth < t3.scrollWidth);\n })(t2);\n }\n return false;\n}, o = (t2, e2, n2, o2, l2, r2, i, s) => r2 < t2 && i > e2 || r2 > t2 && i < e2 ? 0 : r2 <= t2 && s <= n2 || i >= e2 && s >= n2 ? r2 - t2 - o2 : i > e2 && s < n2 || r2 < t2 && s > n2 ? i - e2 + l2 : 0, l = (t2) => {\n const e2 = t2.parentElement;\n return null == e2 ? t2.getRootNode().host || null : e2;\n}, r = (e2, r2) => {\n var i, s, d, h;\n if (\"undefined\" == typeof document) return [];\n const { scrollMode: c, block: f, inline: u, boundary: a, skipOverflowHiddenElements: g } = r2, p = \"function\" == typeof a ? a : (t2) => t2 !== a;\n if (!t(e2)) throw new TypeError(\"Invalid target\");\n const m = document.scrollingElement || document.documentElement, w = [];\n let W = e2;\n for (; t(W) && p(W); ) {\n if (W = l(W), W === m) {\n w.push(W);\n break;\n }\n null != W && W === document.body && n(W) && !n(document.documentElement) || null != W && n(W, g) && w.push(W);\n }\n const b = null != (s = null == (i = window.visualViewport) ? void 0 : i.width) ? s : innerWidth, H = null != (h = null == (d = window.visualViewport) ? void 0 : d.height) ? h : innerHeight, { scrollX: y, scrollY: M } = window, { height: v, width: E, top: x, right: C, bottom: I, left: R } = e2.getBoundingClientRect(), { top: T, right: B, bottom: F, left: V } = ((t2) => {\n const e3 = window.getComputedStyle(t2);\n return { top: parseFloat(e3.scrollMarginTop) || 0, right: parseFloat(e3.scrollMarginRight) || 0, bottom: parseFloat(e3.scrollMarginBottom) || 0, left: parseFloat(e3.scrollMarginLeft) || 0 };\n })(e2);\n let k = \"start\" === f || \"nearest\" === f ? x - T : \"end\" === f ? I + F : x + v / 2 - T + F, D = \"center\" === u ? R + E / 2 - V + B : \"end\" === u ? C + B : R - V;\n const L = [];\n for (let t2 = 0; t2 < w.length; t2++) {\n const e3 = w[t2], { height: l2, width: r3, top: i2, right: s2, bottom: d2, left: h2 } = e3.getBoundingClientRect();\n if (\"if-needed\" === c && x >= 0 && R >= 0 && I <= H && C <= b && (e3 === m && !n(e3) || x >= i2 && I <= d2 && R >= h2 && C <= s2)) return L;\n const a2 = getComputedStyle(e3), g2 = parseInt(a2.borderLeftWidth, 10), p2 = parseInt(a2.borderTopWidth, 10), W2 = parseInt(a2.borderRightWidth, 10), T2 = parseInt(a2.borderBottomWidth, 10);\n let B2 = 0, F2 = 0;\n const V2 = \"offsetWidth\" in e3 ? e3.offsetWidth - e3.clientWidth - g2 - W2 : 0, S = \"offsetHeight\" in e3 ? e3.offsetHeight - e3.clientHeight - p2 - T2 : 0, X = \"offsetWidth\" in e3 ? 0 === e3.offsetWidth ? 0 : r3 / e3.offsetWidth : 0, Y = \"offsetHeight\" in e3 ? 0 === e3.offsetHeight ? 0 : l2 / e3.offsetHeight : 0;\n if (m === e3) B2 = \"start\" === f ? k : \"end\" === f ? k - H : \"nearest\" === f ? o(M, M + H, H, p2, T2, M + k, M + k + v, v) : k - H / 2, F2 = \"start\" === u ? D : \"center\" === u ? D - b / 2 : \"end\" === u ? D - b : o(y, y + b, b, g2, W2, y + D, y + D + E, E), B2 = Math.max(0, B2 + M), F2 = Math.max(0, F2 + y);\n else {\n B2 = \"start\" === f ? k - i2 - p2 : \"end\" === f ? k - d2 + T2 + S : \"nearest\" === f ? o(i2, d2, l2, p2, T2 + S, k, k + v, v) : k - (i2 + l2 / 2) + S / 2, F2 = \"start\" === u ? D - h2 - g2 : \"center\" === u ? D - (h2 + r3 / 2) + V2 / 2 : \"end\" === u ? D - s2 + W2 + V2 : o(h2, s2, r3, g2, W2 + V2, D, D + E, E);\n const { scrollLeft: t3, scrollTop: n2 } = e3;\n B2 = 0 === Y ? 0 : Math.max(0, Math.min(n2 + B2 / Y, e3.scrollHeight - l2 / Y + S)), F2 = 0 === X ? 0 : Math.max(0, Math.min(t3 + F2 / X, e3.scrollWidth - r3 / X + V2)), k += n2 - B2, D += t3 - F2;\n }\n L.push({ el: e3, top: B2, left: F2 });\n }\n return L;\n};\n\nvar Icon$0 = `<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M15.0007 28.7923C15.0007 29.0152 14.9774 29.096 14.9339 29.1775C14.8903 29.259 14.8263 29.323 14.7449 29.3665C14.6634 29.4101 14.5826 29.4333 14.3597 29.4333H12.575C12.3521 29.4333 12.2713 29.4101 12.1898 29.3665C12.1083 29.323 12.0443 29.259 12.0008 29.1775C11.9572 29.096 11.934 29.0152 11.934 28.7923V12.2993L5.97496 12.3C5.75208 12.3 5.67125 12.2768 5.58977 12.2332C5.50829 12.1896 5.44434 12.1257 5.40077 12.0442C5.35719 11.9627 5.33398 11.8819 5.33398 11.659V9.87429C5.33398 9.65141 5.35719 9.57059 5.40077 9.48911C5.44434 9.40762 5.50829 9.34368 5.58977 9.3001C5.67125 9.25652 5.75208 9.23332 5.97496 9.23332H26.0263C26.2492 9.23332 26.33 9.25652 26.4115 9.3001C26.493 9.34368 26.557 9.40762 26.6005 9.48911C26.6441 9.57059 26.6673 9.65141 26.6673 9.87429V11.659C26.6673 11.8819 26.6441 11.9627 26.6005 12.0442C26.557 12.1257 26.493 12.1896 26.4115 12.2332C26.33 12.2768 26.2492 12.3 26.0263 12.3L20.067 12.2993L20.0673 28.7923C20.0673 29.0152 20.0441 29.096 20.0005 29.1775C19.957 29.259 19.893 29.323 19.8115 29.3665C19.73 29.4101 19.6492 29.4333 19.4263 29.4333H17.6416C17.4187 29.4333 17.3379 29.4101 17.2564 29.3665C17.175 29.323 17.111 29.259 17.0674 29.1775C17.0239 29.096 17.0007 29.0152 17.0007 28.7923L17 22.7663H15L15.0007 28.7923Z\" fill=\"currentColor\"/> <path d=\"M16.0007 7.89998C17.4734 7.89998 18.6673 6.70608 18.6673 5.23332C18.6673 3.76056 17.4734 2.56665 16.0007 2.56665C14.5279 2.56665 13.334 3.76056 13.334 5.23332C13.334 6.70608 14.5279 7.89998 16.0007 7.89998Z\" fill=\"currentColor\"/>`;\n\nvar Icon$5 = `<path d=\"M5.33334 6.00001C5.33334 5.63182 5.63181 5.33334 6 5.33334H26C26.3682 5.33334 26.6667 5.63182 26.6667 6.00001V20.6667C26.6667 21.0349 26.3682 21.3333 26 21.3333H23.7072C23.4956 21.3333 23.2966 21.233 23.171 21.0628L22.1859 19.7295C21.8607 19.2894 22.1749 18.6667 22.7221 18.6667H23.3333C23.7015 18.6667 24 18.3682 24 18V8.66668C24 8.29849 23.7015 8.00001 23.3333 8.00001H8.66667C8.29848 8.00001 8 8.29849 8 8.66668V18C8 18.3682 8.29848 18.6667 8.66667 18.6667H9.29357C9.84072 18.6667 10.1549 19.2894 9.82976 19.7295L8.84467 21.0628C8.71898 21.233 8.52 21.3333 8.30848 21.3333H6C5.63181 21.3333 5.33334 21.0349 5.33334 20.6667V6.00001Z\" fill=\"currentColor\"/> <path d=\"M8.78528 25.6038C8.46013 26.0439 8.77431 26.6667 9.32147 26.6667L22.6785 26.6667C23.2256 26.6667 23.5398 26.0439 23.2146 25.6038L16.5358 16.5653C16.2693 16.2046 15.73 16.2047 15.4635 16.5653L8.78528 25.6038Z\" fill=\"currentColor\"/>`;\n\nvar Icon$8 = `<path d=\"M17.4853 18.9093C17.4853 19.0281 17.6289 19.0875 17.7129 19.0035L22.4185 14.2979C22.6788 14.0376 23.1009 14.0376 23.3613 14.2979L24.7755 15.7122C25.0359 15.9725 25.0359 16.3946 24.7755 16.655L16.2902 25.1403C16.0299 25.4006 15.6078 25.4006 15.3474 25.1403L13.9332 23.726L13.9319 23.7247L6.86189 16.6547C6.60154 16.3944 6.60154 15.9723 6.86189 15.7119L8.2761 14.2977C8.53645 14.0373 8.95856 14.0373 9.21891 14.2977L13.9243 19.0031C14.0083 19.0871 14.1519 19.0276 14.1519 18.9088L14.1519 6.00004C14.1519 5.63185 14.4504 5.33337 14.8186 5.33337L16.8186 5.33337C17.1868 5.33337 17.4853 5.63185 17.4853 6.00004L17.4853 18.9093Z\" fill=\"currentColor\"/>`;\n\nvar Icon$11 = `<path d=\"M13.0908 14.3334C12.972 14.3334 12.9125 14.1898 12.9965 14.1058L17.7021 9.40022C17.9625 9.13987 17.9625 8.71776 17.7021 8.45741L16.2879 7.04319C16.0275 6.78284 15.6054 6.78284 15.3451 7.04319L6.8598 15.5285C6.59945 15.7888 6.59945 16.2109 6.8598 16.4713L8.27401 17.8855L8.27536 17.8868L15.3453 24.9568C15.6057 25.2172 16.0278 25.2172 16.2881 24.9568L17.7024 23.5426C17.9627 23.2822 17.9627 22.8601 17.7024 22.5998L12.9969 17.8944C12.9129 17.8104 12.9724 17.6668 13.0912 17.6668L26 17.6668C26.3682 17.6668 26.6667 17.3683 26.6667 17.0001V15.0001C26.6667 14.6319 26.3682 14.3334 26 14.3334L13.0908 14.3334Z\" fill=\"currentColor\"/>`;\n\nvar Icon$13 = `<path d=\"M14.1521 13.0929C14.1521 12.9741 14.0085 12.9147 13.9245 12.9987L9.21891 17.7043C8.95856 17.9646 8.53645 17.9646 8.2761 17.7043L6.86189 16.29C6.60154 16.0297 6.60154 15.6076 6.86189 15.3472L15.3472 6.86195C15.6075 6.6016 16.0296 6.6016 16.29 6.86195L17.7042 8.27616L17.7055 8.27751L24.7755 15.3475C25.0359 15.6078 25.0359 16.0299 24.7755 16.2903L23.3613 17.7045C23.1009 17.9649 22.6788 17.9649 22.4185 17.7045L17.7131 12.9991C17.6291 12.9151 17.4855 12.9746 17.4855 13.0934V26.0022C17.4855 26.3704 17.187 26.6688 16.8188 26.6688H14.8188C14.4506 26.6688 14.1521 26.3704 14.1521 26.0022L14.1521 13.0929Z\" fill=\"currentColor\"/>`;\n\nvar Icon$16 = `<path d=\"M16.6927 25.3346C16.3245 25.3346 16.026 25.0361 16.026 24.6679L16.026 7.3346C16.026 6.96641 16.3245 6.66794 16.6927 6.66794L18.6927 6.66794C19.0609 6.66794 19.3594 6.96642 19.3594 7.3346L19.3594 24.6679C19.3594 25.0361 19.0609 25.3346 18.6927 25.3346H16.6927Z\" fill=\"currentColor\"/> <path d=\"M24.026 25.3346C23.6578 25.3346 23.3594 25.0361 23.3594 24.6679L23.3594 7.3346C23.3594 6.96641 23.6578 6.66794 24.026 6.66794L26.026 6.66794C26.3942 6.66794 26.6927 6.96642 26.6927 7.3346V24.6679C26.6927 25.0361 26.3942 25.3346 26.026 25.3346H24.026Z\" fill=\"currentColor\"/> <path d=\"M5.48113 23.9407C5.38584 24.2963 5.59689 24.6619 5.95254 24.7572L7.88439 25.2748C8.24003 25.3701 8.60559 25.159 8.70089 24.8034L13.1871 8.06067C13.2824 7.70503 13.0713 7.33947 12.7157 7.24417L10.7838 6.72654C10.4282 6.63124 10.0626 6.8423 9.96733 7.19794L5.48113 23.9407Z\" fill=\"currentColor\"/>`;\n\nvar Icon$19 = `<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M24.9266 7.57992C25.015 7.60672 25.0886 7.64746 25.2462 7.80506L26.956 9.51488C27.1136 9.67248 27.1543 9.74604 27.1811 9.83447C27.2079 9.9229 27.2079 10.0133 27.1811 10.1018C27.1543 10.1902 27.1136 10.2638 26.956 10.4214L13.1822 24.1951C13.0246 24.3527 12.951 24.3935 12.8626 24.4203C12.797 24.4402 12.7304 24.4453 12.6642 24.4357L12.7319 24.4203C12.6435 24.4471 12.553 24.4471 12.4646 24.4203C12.3762 24.3935 12.3026 24.3527 12.145 24.1951L5.04407 17.0942C4.88647 16.9366 4.84573 16.863 4.81893 16.7746C4.79213 16.6862 4.79213 16.5957 4.81893 16.5073C4.84573 16.4189 4.88647 16.3453 5.04407 16.1877L6.7539 14.4779C6.9115 14.3203 6.98506 14.2796 7.07349 14.2528C7.16191 14.226 7.25235 14.226 7.34078 14.2528C7.42921 14.2796 7.50277 14.3203 7.66037 14.4779L12.6628 19.4808L24.3397 7.80506C24.4973 7.64746 24.5709 7.60672 24.6593 7.57992C24.7477 7.55311 24.8382 7.55311 24.9266 7.57992Z\" fill=\"currentColor\"/>`;\n\nvar Icon$22 = `<path d=\"M17.947 16.095C17.999 16.043 17.999 15.9585 17.947 15.9065L11.6295 9.58899C11.3691 9.32864 11.3691 8.90653 11.6295 8.64618L13.2323 7.04341C13.4926 6.78306 13.9147 6.78306 14.1751 7.04341L21.0289 13.8973C21.0392 13.9064 21.0493 13.9158 21.0591 13.9257L22.6619 15.5285C22.9223 15.7888 22.9223 16.2109 22.6619 16.4713L14.1766 24.9565C13.9163 25.2169 13.4942 25.2169 13.2338 24.9565L11.631 23.3538C11.3707 23.0934 11.3707 22.6713 11.631 22.411L17.947 16.095Z\" fill=\"currentColor\"/>`;\n\nvar Icon$24 = `<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M6 7C5.63181 7 5.33333 7.29848 5.33333 7.66667V14.8667C5.33333 14.9403 5.39361 14.9999 5.46724 15.0009C10.8844 15.0719 15.2614 19.449 15.3325 24.8661C15.3334 24.9397 15.393 25 15.4667 25H26C26.3682 25 26.6667 24.7015 26.6667 24.3333V7.66667C26.6667 7.29848 26.3682 7 26 7H6ZM17.0119 22.2294C17.0263 22.29 17.0802 22.3333 17.1425 22.3333H23.3333C23.7015 22.3333 24 22.0349 24 21.6667V10.3333C24 9.96514 23.7015 9.66667 23.3333 9.66667H8.66667C8.29848 9.66667 8 9.96514 8 10.3333V13.1909C8 13.2531 8.04332 13.3071 8.10392 13.3214C12.5063 14.3618 15.9715 17.827 17.0119 22.2294Z\" fill=\"currentColor\"/> <path d=\"M13.2 25C13.2736 25 13.3334 24.9398 13.3322 24.8661C13.2615 20.5544 9.77889 17.0718 5.46718 17.0011C5.39356 16.9999 5.33333 17.0597 5.33333 17.1333V18.8667C5.33333 18.9403 5.39348 18.9999 5.4671 19.0015C8.67465 19.0716 11.2617 21.6587 11.3319 24.8662C11.3335 24.9399 11.393 25 11.4667 25H13.2Z\" fill=\"currentColor\"/> <path d=\"M5.33333 21.1333C5.33333 21.0597 5.39332 20.9998 5.46692 21.0022C7.57033 21.0712 9.26217 22.763 9.33114 24.8664C9.33356 24.94 9.27364 25 9.2 25H6C5.63181 25 5.33333 24.7015 5.33333 24.3333V21.1333Z\" fill=\"currentColor\"/>`;\n\nvar chromecast = /*#__PURE__*/Object.freeze({\n __proto__: null,\n default: Icon$24\n});\n\nvar Icon$26 = `<path d=\"M8 28.0003C8 27.6321 8.29848 27.3336 8.66667 27.3336H23.3333C23.7015 27.3336 24 27.6321 24 28.0003V29.3336C24 29.7018 23.7015 30.0003 23.3333 30.0003H8.66667C8.29848 30.0003 8 29.7018 8 29.3336V28.0003Z\" fill=\"currentColor\"/> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.66602 6.66699C4.29783 6.66699 3.99935 6.96547 3.99935 7.33366V24.667C3.99935 25.0352 4.29783 25.3337 4.66602 25.3337H27.3327C27.7009 25.3337 27.9994 25.0352 27.9994 24.667V7.33366C27.9994 6.96547 27.7009 6.66699 27.3327 6.66699H4.66602ZM8.66659 21.3333C8.2984 21.3333 7.99992 21.0349 7.99992 20.6667V11.3333C7.99992 10.9651 8.2984 10.6667 8.66659 10.6667H13.9999C14.3681 10.6667 14.6666 10.9651 14.6666 11.3333V12.6667C14.6666 13.0349 14.3681 13.3333 13.9999 13.3333H10.7999C10.7263 13.3333 10.6666 13.393 10.6666 13.4667V18.5333C10.6666 18.607 10.7263 18.6667 10.7999 18.6667H13.9999C14.3681 18.6667 14.6666 18.9651 14.6666 19.3333V20.6667C14.6666 21.0349 14.3681 21.3333 13.9999 21.3333H8.66659ZM17.9999 21.3333C17.6317 21.3333 17.3333 21.0349 17.3333 20.6667V11.3333C17.3333 10.9651 17.6317 10.6667 17.9999 10.6667H23.3333C23.7014 10.6667 23.9999 10.9651 23.9999 11.3333V12.6667C23.9999 13.0349 23.7014 13.3333 23.3333 13.3333H20.1333C20.0596 13.3333 19.9999 13.393 19.9999 13.4667V18.5333C19.9999 18.607 20.0596 18.6667 20.1333 18.6667H23.3333C23.7014 18.6667 23.9999 18.9651 23.9999 19.3333V20.6667C23.9999 21.0349 23.7014 21.3333 23.3333 21.3333H17.9999Z\" fill=\"currentColor\"/>`;\n\nvar Icon$27 = `<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.6661 6.66699C4.29791 6.66699 3.99943 6.96547 3.99943 7.33366V24.667C3.99943 25.0352 4.29791 25.3337 4.6661 25.3337H27.3328C27.701 25.3337 27.9994 25.0352 27.9994 24.667V7.33366C27.9994 6.96547 27.701 6.66699 27.3328 6.66699H4.6661ZM8.66667 21.3333C8.29848 21.3333 8 21.0349 8 20.6667V11.3333C8 10.9651 8.29848 10.6667 8.66667 10.6667H14C14.3682 10.6667 14.6667 10.9651 14.6667 11.3333V12.6667C14.6667 13.0349 14.3682 13.3333 14 13.3333H10.8C10.7264 13.3333 10.6667 13.393 10.6667 13.4667V18.5333C10.6667 18.607 10.7264 18.6667 10.8 18.6667H14C14.3682 18.6667 14.6667 18.9651 14.6667 19.3333V20.6667C14.6667 21.0349 14.3682 21.3333 14 21.3333H8.66667ZM18 21.3333C17.6318 21.3333 17.3333 21.0349 17.3333 20.6667V11.3333C17.3333 10.9651 17.6318 10.6667 18 10.6667H23.3333C23.7015 10.6667 24 10.9651 24 11.3333V12.6667C24 13.0349 23.7015 13.3333 23.3333 13.3333H20.1333C20.0597 13.3333 20 13.393 20 13.4667V18.5333C20 18.607 20.0597 18.6667 20.1333 18.6667H23.3333C23.7015 18.6667 24 18.9651 24 19.3333V20.6667C24 21.0349 23.7015 21.3333 23.3333 21.3333H18Z\" fill=\"currentColor\"/>`;\n\nvar Icon$31 = `<path d=\"M14.2225 13.7867C14.3065 13.8706 14.4501 13.8112 14.4501 13.6924V5.99955C14.4501 5.63136 14.7486 5.33289 15.1167 5.33289H16.8501C17.2183 5.33289 17.5167 5.63136 17.5167 5.99955V13.6916C17.5167 13.8104 17.6604 13.8699 17.7444 13.7859L19.9433 11.5869C20.2037 11.3266 20.6258 11.3266 20.8861 11.5869L22.1118 12.8126C22.3722 13.0729 22.3722 13.4951 22.1118 13.7554L16.4549 19.4123C16.1946 19.6726 15.772 19.6731 15.5116 19.4128L9.85479 13.7559C9.59444 13.4956 9.59444 13.0734 9.85479 12.8131L11.0804 11.5874C11.3408 11.3271 11.7629 11.3271 12.0233 11.5874L14.2225 13.7867Z\" fill=\"currentColor\"/> <path d=\"M5.99998 20.267C5.63179 20.267 5.33331 20.5654 5.33331 20.9336V25.9997C5.33331 26.3678 5.63179 26.6663 5.99998 26.6663H26C26.3682 26.6663 26.6666 26.3678 26.6666 25.9997V20.9336C26.6666 20.5654 26.3682 20.267 26 20.267H24.2666C23.8985 20.267 23.6 20.5654 23.6 20.9336V22.9333C23.6 23.3014 23.3015 23.5999 22.9333 23.5999H9.06638C8.69819 23.5999 8.39972 23.3014 8.39972 22.9333V20.9336C8.39972 20.5654 8.10124 20.267 7.73305 20.267H5.99998Z\" fill=\"currentColor\"/>`;\n\nvar Icon$33 = `<path d=\"M16 20C18.2091 20 20 18.2092 20 16C20 13.7909 18.2091 12 16 12C13.7909 12 12 13.7909 12 16C12 18.2092 13.7909 20 16 20Z\" fill=\"currentColor\"/> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M28 16.0058C28 18.671 23.5 25.3334 16 25.3334C8.5 25.3334 4 18.6762 4 16.0058C4 13.3354 8.50447 6.66669 16 6.66669C23.4955 6.66669 28 13.3406 28 16.0058ZM25.3318 15.9934C25.3328 16.0017 25.3328 16.0099 25.3318 16.0182C25.3274 16.0571 25.3108 16.1728 25.2485 16.3708C25.1691 16.6229 25.0352 16.9462 24.8327 17.3216C24.4264 18.0749 23.7969 18.9398 22.9567 19.754C21.2791 21.3798 18.9148 22.6667 16 22.6667C13.0845 22.6667 10.7202 21.3805 9.04298 19.7557C8.20295 18.9419 7.57362 18.0773 7.16745 17.3241C6.96499 16.9486 6.83114 16.6252 6.75172 16.3729C6.67942 16.1431 6.66856 16.0243 6.66695 16.0066L6.66695 16.005C6.66859 15.9871 6.67951 15.8682 6.75188 15.6383C6.83145 15.3854 6.96554 15.0614 7.16831 14.6853C7.57507 13.9306 8.20514 13.0644 9.04577 12.249C10.7245 10.6208 13.0886 9.33335 16 9.33335C18.9108 9.33335 21.2748 10.6215 22.9539 12.2507C23.7947 13.0664 24.4249 13.933 24.8318 14.6877C25.0346 15.0639 25.1688 15.3878 25.2483 15.6404C25.3107 15.8386 25.3274 15.9545 25.3318 15.9934Z\" fill=\"currentColor\"/>`;\n\nvar Icon$34 = `<path d=\"M15.8747 8.11857C16.3148 7.79342 16.9375 8.10759 16.9375 8.65476V14.2575C16.9375 14.3669 17.0621 14.4297 17.1501 14.3647L25.6038 8.11857C26.0439 7.79342 26.6667 8.10759 26.6667 8.65476V23.3451C26.6667 23.8923 26.0439 24.2064 25.6038 23.8813L17.1501 17.6346C17.0621 17.5695 16.9375 17.6324 16.9375 17.7418L16.9375 23.3451C16.9375 23.8923 16.3147 24.2064 15.8747 23.8813L5.93387 16.5358C5.57322 16.2693 5.57323 15.7299 5.93389 15.4634L15.8747 8.11857Z\" fill=\"currentColor\"/>`;\n\nvar Icon$35 = `<path d=\"M16.1253 8.11866C15.6852 7.7935 15.0625 8.10768 15.0625 8.65484V14.2576C15.0625 14.367 14.9379 14.4298 14.8499 14.3648L6.39615 8.11866C5.95607 7.7935 5.33331 8.10768 5.33331 8.65484V23.3452C5.33331 23.8923 5.9561 24.2065 6.39617 23.8813L14.8499 17.6347C14.9379 17.5696 15.0625 17.6325 15.0625 17.7419L15.0625 23.3452C15.0625 23.8923 15.6853 24.2065 16.1253 23.8813L26.0661 16.5358C26.4268 16.2694 26.4268 15.73 26.0661 15.4635L16.1253 8.11866Z\" fill=\"currentColor\"/>`;\n\nvar Icon$39 = `<path d=\"M19.3334 13.3333C18.9652 13.3333 18.6667 13.0349 18.6667 12.6667L18.6667 7.33333C18.6667 6.96514 18.9652 6.66666 19.3334 6.66666H21.3334C21.7015 6.66666 22 6.96514 22 7.33333V9.86666C22 9.9403 22.0597 10 22.1334 10L24.6667 10C25.0349 10 25.3334 10.2985 25.3334 10.6667V12.6667C25.3334 13.0349 25.0349 13.3333 24.6667 13.3333L19.3334 13.3333Z\" fill=\"currentColor\"/> <path d=\"M13.3334 19.3333C13.3334 18.9651 13.0349 18.6667 12.6667 18.6667H7.33335C6.96516 18.6667 6.66669 18.9651 6.66669 19.3333V21.3333C6.66669 21.7015 6.96516 22 7.33335 22H9.86669C9.94032 22 10 22.0597 10 22.1333L10 24.6667C10 25.0349 10.2985 25.3333 10.6667 25.3333H12.6667C13.0349 25.3333 13.3334 25.0349 13.3334 24.6667L13.3334 19.3333Z\" fill=\"currentColor\"/> <path d=\"M18.6667 24.6667C18.6667 25.0349 18.9652 25.3333 19.3334 25.3333H21.3334C21.7015 25.3333 22 25.0349 22 24.6667V22.1333C22 22.0597 22.0597 22 22.1334 22H24.6667C25.0349 22 25.3334 21.7015 25.3334 21.3333V19.3333C25.3334 18.9651 25.0349 18.6667 24.6667 18.6667L19.3334 18.6667C18.9652 18.6667 18.6667 18.9651 18.6667 19.3333L18.6667 24.6667Z\" fill=\"currentColor\"/> <path d=\"M10.6667 13.3333H12.6667C13.0349 13.3333 13.3334 13.0349 13.3334 12.6667L13.3334 10.6667V7.33333C13.3334 6.96514 13.0349 6.66666 12.6667 6.66666H10.6667C10.2985 6.66666 10 6.96514 10 7.33333L10 9.86666C10 9.9403 9.94033 10 9.86669 10L7.33335 10C6.96516 10 6.66669 10.2985 6.66669 10.6667V12.6667C6.66669 13.0349 6.96516 13.3333 7.33335 13.3333L10.6667 13.3333Z\" fill=\"currentColor\"/>`;\n\nvar Icon$40 = `<path d=\"M25.3299 7.26517C25.2958 6.929 25.0119 6.66666 24.6667 6.66666H19.3334C18.9652 6.66666 18.6667 6.96514 18.6667 7.33333V9.33333C18.6667 9.70152 18.9652 10 19.3334 10L21.8667 10C21.9403 10 22 10.0597 22 10.1333V12.6667C22 13.0349 22.2985 13.3333 22.6667 13.3333H24.6667C25.0349 13.3333 25.3334 13.0349 25.3334 12.6667V7.33333C25.3334 7.31032 25.3322 7.28758 25.3299 7.26517Z\" fill=\"currentColor\"/> <path d=\"M22 21.8667C22 21.9403 21.9403 22 21.8667 22L19.3334 22C18.9652 22 18.6667 22.2985 18.6667 22.6667V24.6667C18.6667 25.0349 18.9652 25.3333 19.3334 25.3333L24.6667 25.3333C25.0349 25.3333 25.3334 25.0349 25.3334 24.6667V19.3333C25.3334 18.9651 25.0349 18.6667 24.6667 18.6667H22.6667C22.2985 18.6667 22 18.9651 22 19.3333V21.8667Z\" fill=\"currentColor\"/> <path d=\"M12.6667 22H10.1334C10.0597 22 10 21.9403 10 21.8667V19.3333C10 18.9651 9.70154 18.6667 9.33335 18.6667H7.33335C6.96516 18.6667 6.66669 18.9651 6.66669 19.3333V24.6667C6.66669 25.0349 6.96516 25.3333 7.33335 25.3333H12.6667C13.0349 25.3333 13.3334 25.0349 13.3334 24.6667V22.6667C13.3334 22.2985 13.0349 22 12.6667 22Z\" fill=\"currentColor\"/> <path d=\"M10 12.6667V10.1333C10 10.0597 10.0597 10 10.1334 10L12.6667 10C13.0349 10 13.3334 9.70152 13.3334 9.33333V7.33333C13.3334 6.96514 13.0349 6.66666 12.6667 6.66666H7.33335C6.96516 6.66666 6.66669 6.96514 6.66669 7.33333V12.6667C6.66669 13.0349 6.96516 13.3333 7.33335 13.3333H9.33335C9.70154 13.3333 10 13.0349 10 12.6667Z\" fill=\"currentColor\"/>`;\n\nvar Icon$53 = `<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M26.6667 5.99998C26.6667 5.63179 26.3682 5.33331 26 5.33331H11.3333C10.9651 5.33331 10.6667 5.63179 10.6667 5.99998V17.5714C10.6667 17.6694 10.5644 17.7342 10.4741 17.6962C9.91823 17.4625 9.30754 17.3333 8.66667 17.3333C6.08934 17.3333 4 19.4226 4 22C4 24.5773 6.08934 26.6666 8.66667 26.6666C11.244 26.6666 13.3333 24.5773 13.3333 22V8.66665C13.3333 8.29846 13.6318 7.99998 14 7.99998L23.3333 7.99998C23.7015 7.99998 24 8.29846 24 8.66665V14.9048C24 15.0027 23.8978 15.0675 23.8075 15.0296C23.2516 14.7958 22.6409 14.6666 22 14.6666C19.4227 14.6666 17.3333 16.756 17.3333 19.3333C17.3333 21.9106 19.4227 24 22 24C24.5773 24 26.6667 21.9106 26.6667 19.3333V5.99998ZM22 21.3333C23.1046 21.3333 24 20.4379 24 19.3333C24 18.2287 23.1046 17.3333 22 17.3333C20.8954 17.3333 20 18.2287 20 19.3333C20 20.4379 20.8954 21.3333 22 21.3333ZM8.66667 24C9.77124 24 10.6667 23.1045 10.6667 22C10.6667 20.8954 9.77124 20 8.66667 20C7.5621 20 6.66667 20.8954 6.66667 22C6.66667 23.1045 7.5621 24 8.66667 24Z\" fill=\"currentColor\"/>`;\n\nvar Icon$54 = `<path d=\"M17.5091 24.6594C17.5091 25.2066 16.8864 25.5208 16.4463 25.1956L9.44847 20.0252C9.42553 20.0083 9.39776 19.9991 9.36923 19.9991H4.66667C4.29848 19.9991 4 19.7006 4 19.3325V12.6658C4 12.2976 4.29848 11.9991 4.66667 11.9991H9.37115C9.39967 11.9991 9.42745 11.99 9.45039 11.973L16.4463 6.8036C16.8863 6.47842 17.5091 6.79259 17.5091 7.33977L17.5091 24.6594Z\" fill=\"currentColor\"/> <path d=\"M28.8621 13.6422C29.1225 13.3818 29.1225 12.9597 28.8621 12.6994L27.9193 11.7566C27.659 11.4962 27.2368 11.4962 26.9765 11.7566L24.7134 14.0197C24.6613 14.0717 24.5769 14.0717 24.5248 14.0197L22.262 11.7568C22.0016 11.4964 21.5795 11.4964 21.3191 11.7568L20.3763 12.6996C20.116 12.9599 20.116 13.382 20.3763 13.6424L22.6392 15.9053C22.6913 15.9573 22.6913 16.0418 22.6392 16.0938L20.3768 18.3562C20.1165 18.6166 20.1165 19.0387 20.3768 19.299L21.3196 20.2419C21.58 20.5022 22.0021 20.5022 22.2624 20.2418L24.5248 17.9795C24.5769 17.9274 24.6613 17.9274 24.7134 17.9795L26.976 20.2421C27.2363 20.5024 27.6585 20.5024 27.9188 20.2421L28.8616 19.2992C29.122 19.0389 29.122 18.6168 28.8616 18.3564L26.599 16.0938C26.547 16.0418 26.547 15.9573 26.599 15.9053L28.8621 13.6422Z\" fill=\"currentColor\"/>`;\n\nvar Icon$56 = `<path d=\"M26.6009 16.0725C26.6009 16.424 26.4302 17.1125 25.9409 18.0213C25.4676 18.8976 24.7542 19.8715 23.8182 20.7783C21.9489 22.5905 19.2662 24.0667 15.9342 24.0667C12.6009 24.0667 9.91958 22.5915 8.04891 20.78C7.11424 19.8736 6.40091 18.9 5.92758 18.0236C5.43824 17.1149 5.26758 16.4257 5.26758 16.0725C5.26758 15.7193 5.43824 15.0293 5.92891 14.1193C6.40224 13.2416 7.11558 12.2665 8.05158 11.3587C9.92224 9.54398 12.6049 8.06665 15.9342 8.06665C19.2636 8.06665 21.9449 9.54505 23.8169 11.3604C24.7529 12.2687 25.4662 13.2441 25.9396 14.1216C26.4302 15.0317 26.6009 15.7209 26.6009 16.0725Z\" stroke=\"currentColor\" stroke-width=\"3\"/> <path d=\"M15.9336 20.0667C18.1427 20.0667 19.9336 18.2758 19.9336 16.0667C19.9336 13.8575 18.1427 12.0667 15.9336 12.0667C13.7245 12.0667 11.9336 13.8575 11.9336 16.0667C11.9336 18.2758 13.7245 20.0667 15.9336 20.0667Z\" fill=\"currentColor\"/> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M27.2323 25.0624L6.93878 4.76886C6.78118 4.61126 6.70762 4.57052 6.61919 4.54372C6.53077 4.51692 6.44033 4.51691 6.3519 4.54372C6.26347 4.57052 6.18991 4.61126 6.03231 4.76886L4.77032 6.03085C4.61272 6.18845 4.57198 6.26201 4.54518 6.35044C4.51838 6.43887 4.51838 6.5293 4.54518 6.61773C4.57198 6.70616 4.61272 6.77972 4.77032 6.93732L25.0639 27.2308C25.2215 27.3884 25.295 27.4292 25.3834 27.456C25.4719 27.4828 25.5623 27.4828 25.6507 27.456C25.7392 27.4292 25.8127 27.3885 25.9703 27.2309L27.2323 25.9689C27.3899 25.8113 27.4307 25.7377 27.4575 25.6493C27.4843 25.5608 27.4843 25.4704 27.4575 25.382C27.4307 25.2935 27.3899 25.22 27.2323 25.0624Z\" fill=\"currentColor\"/>`;\n\nvar Icon$59 = `<path d=\"M8.66667 6.66667C8.29848 6.66667 8 6.96514 8 7.33333V24.6667C8 25.0349 8.29848 25.3333 8.66667 25.3333H12.6667C13.0349 25.3333 13.3333 25.0349 13.3333 24.6667V7.33333C13.3333 6.96514 13.0349 6.66667 12.6667 6.66667H8.66667Z\" fill=\"currentColor\"/> <path d=\"M19.3333 6.66667C18.9651 6.66667 18.6667 6.96514 18.6667 7.33333V24.6667C18.6667 25.0349 18.9651 25.3333 19.3333 25.3333H23.3333C23.7015 25.3333 24 25.0349 24 24.6667V7.33333C24 6.96514 23.7015 6.66667 23.3333 6.66667H19.3333Z\" fill=\"currentColor\"/>`;\n\nvar Icon$60 = `<path d=\"M5.33334 26V19.4667C5.33334 19.393 5.39304 19.3333 5.46668 19.3333H7.86668C7.94031 19.3333 8.00001 19.393 8.00001 19.4667V23.3333C8.00001 23.7015 8.29849 24 8.66668 24H23.3333C23.7015 24 24 23.7015 24 23.3333V8.66666C24 8.29847 23.7015 7.99999 23.3333 7.99999H19.4667C19.393 7.99999 19.3333 7.9403 19.3333 7.86666V5.46666C19.3333 5.39302 19.393 5.33333 19.4667 5.33333H26C26.3682 5.33333 26.6667 5.63181 26.6667 5.99999V26C26.6667 26.3682 26.3682 26.6667 26 26.6667H6.00001C5.63182 26.6667 5.33334 26.3682 5.33334 26Z\" fill=\"currentColor\"/> <path d=\"M14.0098 8.42359H10.806C10.6872 8.42359 10.6277 8.56721 10.7117 8.6512L16.5491 14.4886C16.8094 14.7489 16.8094 15.171 16.5491 15.4314L15.3234 16.657C15.0631 16.9174 14.641 16.9174 14.3806 16.657L8.63739 10.9138C8.55339 10.8298 8.40978 10.8893 8.40978 11.0081V14.0236C8.40978 14.3918 8.1113 14.6903 7.74311 14.6903H6.00978C5.64159 14.6903 5.34311 14.3918 5.34311 14.0236L5.34311 6.02359C5.34311 5.6554 5.64159 5.35692 6.00978 5.35692L14.0098 5.35692C14.378 5.35692 14.6764 5.6554 14.6764 6.02359V7.75692C14.6764 8.12511 14.378 8.42359 14.0098 8.42359Z\" fill=\"currentColor\"/>`;\n\nvar Icon$61 = `<path d=\"M16 15.3333C15.6318 15.3333 15.3333 15.6318 15.3333 16V20C15.3333 20.3682 15.6318 20.6667 16 20.6667H21.3333C21.7015 20.6667 22 20.3682 22 20V16C22 15.6318 21.7015 15.3333 21.3333 15.3333H16Z\" fill=\"currentColor\"/> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.33333 7.33334C5.33333 6.96515 5.63181 6.66667 5.99999 6.66667H26C26.3682 6.66667 26.6667 6.96515 26.6667 7.33334V24.6667C26.6667 25.0349 26.3682 25.3333 26 25.3333H5.99999C5.63181 25.3333 5.33333 25.0349 5.33333 24.6667V7.33334ZM7.99999 10C7.99999 9.63182 8.29847 9.33334 8.66666 9.33334H23.3333C23.7015 9.33334 24 9.63182 24 10V22C24 22.3682 23.7015 22.6667 23.3333 22.6667H8.66666C8.29847 22.6667 7.99999 22.3682 7.99999 22V10Z\" fill=\"currentColor\"/>`;\n\nvar Icon$62 = `<path d=\"M10.6667 6.6548C10.6667 6.10764 11.2894 5.79346 11.7295 6.11862L24.377 15.4634C24.7377 15.7298 24.7377 16.2692 24.3771 16.5357L11.7295 25.8813C11.2895 26.2065 10.6667 25.8923 10.6667 25.3451L10.6667 6.6548Z\" fill=\"currentColor\"/>`;\n\nvar Icon$63 = `<path d=\"M13.9213 5.53573C14.3146 5.45804 14.6666 5.76987 14.6666 6.17079V7.57215C14.6666 7.89777 14.4305 8.17277 14.114 8.24925C12.5981 8.61559 11.2506 9.41368 10.2091 10.506C9.98474 10.7414 9.62903 10.8079 9.34742 10.6453L8.14112 9.94885C7.79394 9.7484 7.69985 9.28777 7.96359 8.98585C9.48505 7.24409 11.5636 6.00143 13.9213 5.53573Z\" fill=\"currentColor\"/> <path d=\"M5.88974 12.5908C6.01805 12.2101 6.46491 12.0603 6.81279 12.2611L8.01201 12.9535C8.29379 13.1162 8.41396 13.4577 8.32238 13.7699C8.11252 14.4854 7.99998 15.2424 7.99998 16.0257C7.99998 16.809 8.11252 17.566 8.32238 18.2814C8.41396 18.5936 8.29378 18.9352 8.01201 19.0979L6.82742 19.7818C6.48051 19.9821 6.03488 19.8337 5.90521 19.4547C5.5345 18.3712 5.33331 17.2091 5.33331 16C5.33331 14.8078 5.5289 13.6613 5.88974 12.5908Z\" fill=\"currentColor\"/> <path d=\"M8.17106 22.0852C7.82291 22.2862 7.72949 22.7486 7.99532 23.0502C9.51387 24.773 11.5799 26.0017 13.9213 26.4642C14.3146 26.5419 14.6666 26.2301 14.6666 25.8291V24.4792C14.6666 24.1536 14.4305 23.8786 14.114 23.8021C12.5981 23.4358 11.2506 22.6377 10.2091 21.5453C9.98474 21.31 9.62903 21.2435 9.34742 21.4061L8.17106 22.0852Z\" fill=\"currentColor\"/> <path d=\"M17.3333 25.8291C17.3333 26.2301 17.6857 26.5418 18.079 26.4641C22.9748 25.4969 26.6666 21.1796 26.6666 16C26.6666 10.8204 22.9748 6.50302 18.079 5.5358C17.6857 5.4581 17.3333 5.76987 17.3333 6.17079V7.57215C17.3333 7.89777 17.5697 8.17282 17.8862 8.24932C21.3942 9.09721 24 12.2572 24 16.0257C24 19.7942 21.3942 22.9542 17.8862 23.802C17.5697 23.8785 17.3333 24.1536 17.3333 24.4792V25.8291Z\" fill=\"currentColor\"/> <path d=\"M14.3961 10.4163C13.9561 10.0911 13.3333 10.4053 13.3333 10.9525L13.3333 21.0474C13.3333 21.5946 13.9561 21.9087 14.3962 21.5836L21.2273 16.5359C21.5879 16.2694 21.5879 15.73 21.2273 15.4635L14.3961 10.4163Z\" fill=\"currentColor\"/>`;\n\nvar Icon$74 = `<path d=\"M15.6038 12.2147C16.0439 12.5399 16.6667 12.2257 16.6667 11.6786V10.1789C16.6667 10.1001 16.7351 10.0384 16.8134 10.0479C20.1116 10.4494 22.6667 13.2593 22.6667 16.6659C22.6667 20.3481 19.6817 23.3332 15.9995 23.3332C12.542 23.3332 9.69927 20.7014 9.36509 17.332C9.32875 16.9655 9.03371 16.6662 8.66548 16.6662L6.66655 16.6666C6.29841 16.6666 5.99769 16.966 6.02187 17.3334C6.36494 22.5454 10.7012 26.6667 16 26.6667C21.5228 26.6667 26 22.1895 26 16.6667C26 11.4103 21.9444 7.10112 16.7916 6.69757C16.7216 6.69209 16.6667 6.63396 16.6667 6.56372V4.98824C16.6667 4.44106 16.0439 4.12689 15.6038 4.45206L11.0765 7.79738C10.7159 8.06387 10.7159 8.60326 11.0766 8.86973L15.6038 12.2147Z\" fill=\"currentColor\"/>`;\n\nvar Icon$77 = `<path d=\"M16.6667 10.3452C16.6667 10.8924 16.0439 11.2066 15.6038 10.8814L11.0766 7.5364C10.7159 7.26993 10.7159 6.73054 11.0766 6.46405L15.6038 3.11873C16.0439 2.79356 16.6667 3.10773 16.6667 3.6549V5.22682C16.6667 5.29746 16.7223 5.35579 16.7927 5.36066C22.6821 5.76757 27.3333 10.674 27.3333 16.6667C27.3333 22.9259 22.2592 28 16 28C9.96483 28 5.03145 23.2827 4.68601 17.3341C4.66466 16.9665 4.96518 16.6673 5.33339 16.6673H7.3334C7.70157 16.6673 7.99714 16.9668 8.02743 17.3337C8.36638 21.4399 11.8064 24.6667 16 24.6667C20.4183 24.6667 24 21.085 24 16.6667C24 12.5225 20.8483 9.11428 16.8113 8.70739C16.7337 8.69957 16.6667 8.76096 16.6667 8.83893V10.3452Z\" fill=\"currentColor\"/> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M17.0879 19.679C17.4553 19.9195 17.8928 20.0398 18.4004 20.0398C18.9099 20.0398 19.3474 19.9205 19.7129 19.6818C20.0803 19.4413 20.3635 19.0938 20.5623 18.6392C20.7612 18.1847 20.8606 17.6373 20.8606 16.9972C20.8625 16.3608 20.764 15.8192 20.5652 15.3722C20.3663 14.9252 20.0822 14.5853 19.7129 14.3523C19.3455 14.1175 18.908 14 18.4004 14C17.8928 14 17.4553 14.1175 17.0879 14.3523C16.7224 14.5853 16.4402 14.9252 16.2413 15.3722C16.0443 15.8173 15.9449 16.3589 15.943 16.9972C15.9411 17.6354 16.0396 18.1818 16.2385 18.6364C16.4373 19.089 16.7205 19.4366 17.0879 19.679ZM19.1362 18.4262C18.9487 18.7349 18.7034 18.8892 18.4004 18.8892C18.1996 18.8892 18.0226 18.8211 17.8691 18.6847C17.7157 18.5464 17.5964 18.3372 17.5112 18.0568C17.4279 17.7765 17.3871 17.4233 17.389 16.9972C17.3909 16.3684 17.4847 15.9025 17.6703 15.5995C17.8559 15.2945 18.0993 15.1421 18.4004 15.1421C18.603 15.1421 18.7801 15.2093 18.9316 15.3438C19.0832 15.4782 19.2015 15.6828 19.2868 15.9574C19.372 16.2301 19.4146 16.5767 19.4146 16.9972C19.4165 17.6392 19.3237 18.1156 19.1362 18.4262Z\" fill=\"currentColor\"/> <path d=\"M13.7746 19.8978C13.8482 19.8978 13.9079 19.8381 13.9079 19.7644V14.2129C13.9079 14.1393 13.8482 14.0796 13.7746 14.0796H12.642C12.6171 14.0796 12.5927 14.0865 12.5716 14.0997L11.2322 14.9325C11.1931 14.9568 11.1693 14.9996 11.1693 15.0457V15.9497C11.1693 16.0539 11.2833 16.1178 11.3722 16.0635L12.464 15.396C12.4682 15.3934 12.473 15.3921 12.4779 15.3921C12.4926 15.3921 12.5045 15.404 12.5045 15.4187V19.7644C12.5045 19.8381 12.5642 19.8978 12.6378 19.8978H13.7746Z\" fill=\"currentColor\"/>`;\n\nvar Icon$81 = `<path d=\"M15.3333 10.3452C15.3333 10.8924 15.9561 11.2066 16.3962 10.8814L20.9234 7.5364C21.2841 7.26993 21.2841 6.73054 20.9235 6.46405L16.3962 3.11873C15.9561 2.79356 15.3333 3.10773 15.3333 3.6549V5.22682C15.3333 5.29746 15.2778 5.35579 15.2073 5.36066C9.31791 5.76757 4.66667 10.674 4.66667 16.6667C4.66667 22.9259 9.74078 28 16 28C22.0352 28 26.9686 23.2827 27.314 17.3341C27.3354 16.9665 27.0348 16.6673 26.6666 16.6673H24.6666C24.2984 16.6673 24.0029 16.9668 23.9726 17.3337C23.6336 21.4399 20.1937 24.6667 16 24.6667C11.5817 24.6667 8 21.085 8 16.6667C8 12.5225 11.1517 9.11428 15.1887 8.70739C15.2663 8.69957 15.3333 8.76096 15.3333 8.83893V10.3452Z\" fill=\"currentColor\"/> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M17.0879 19.679C17.4553 19.9195 17.8928 20.0398 18.4004 20.0398C18.9099 20.0398 19.3474 19.9205 19.7129 19.6818C20.0803 19.4413 20.3635 19.0938 20.5623 18.6392C20.7612 18.1847 20.8606 17.6373 20.8606 16.9972C20.8625 16.3608 20.764 15.8192 20.5652 15.3722C20.3663 14.9252 20.0822 14.5853 19.7129 14.3523C19.3455 14.1175 18.908 14 18.4004 14C17.8928 14 17.4553 14.1175 17.0879 14.3523C16.7224 14.5853 16.4402 14.9252 16.2413 15.3722C16.0443 15.8173 15.9449 16.3589 15.943 16.9972C15.9411 17.6354 16.0396 18.1818 16.2385 18.6364C16.4373 19.089 16.7205 19.4366 17.0879 19.679ZM19.1362 18.4262C18.9487 18.7349 18.7034 18.8892 18.4004 18.8892C18.1996 18.8892 18.0225 18.8211 17.8691 18.6847C17.7157 18.5464 17.5964 18.3372 17.5112 18.0568C17.4278 17.7765 17.3871 17.4233 17.389 16.9972C17.3909 16.3684 17.4847 15.9025 17.6703 15.5995C17.8559 15.2945 18.0992 15.1421 18.4004 15.1421C18.603 15.1421 18.7801 15.2093 18.9316 15.3438C19.0831 15.4782 19.2015 15.6828 19.2867 15.9574C19.372 16.2301 19.4146 16.5767 19.4146 16.9972C19.4165 17.6392 19.3237 18.1156 19.1362 18.4262Z\" fill=\"currentColor\"/> <path d=\"M13.7746 19.8978C13.8482 19.8978 13.9079 19.8381 13.9079 19.7644V14.2129C13.9079 14.1393 13.8482 14.0796 13.7746 14.0796H12.642C12.6171 14.0796 12.5927 14.0865 12.5716 14.0997L11.2322 14.9325C11.1931 14.9568 11.1693 14.9996 11.1693 15.0457V15.9497C11.1693 16.0539 11.2833 16.1178 11.3722 16.0635L12.464 15.396C12.4682 15.3934 12.473 15.3921 12.4779 15.3921C12.4926 15.3921 12.5045 15.404 12.5045 15.4187V19.7644C12.5045 19.8381 12.5642 19.8978 12.6378 19.8978H13.7746Z\" fill=\"currentColor\"/>`;\n\nvar Icon$88 = `<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M13.5722 5.33333C13.2429 5.33333 12.9629 5.57382 12.9132 5.89938L12.4063 9.21916C12.4 9.26058 12.3746 9.29655 12.3378 9.31672C12.2387 9.37118 12.1409 9.42779 12.0444 9.48648C12.0086 9.5083 11.9646 9.51242 11.9255 9.49718L8.79572 8.27692C8.48896 8.15732 8.14083 8.27958 7.9762 8.56472L5.5491 12.7686C5.38444 13.0538 5.45271 13.4165 5.70981 13.6223L8.33308 15.7225C8.3658 15.7487 8.38422 15.7887 8.38331 15.8306C8.38209 15.8867 8.38148 15.9429 8.38148 15.9993C8.38148 16.0558 8.3821 16.1121 8.38332 16.1684C8.38423 16.2102 8.36582 16.2503 8.33313 16.2765L5.7103 18.3778C5.45334 18.5836 5.38515 18.9462 5.54978 19.2314L7.97688 23.4352C8.14155 23.7205 8.48981 23.8427 8.79661 23.723L11.926 22.5016C11.9651 22.4864 12.009 22.4905 12.0449 22.5123C12.1412 22.5709 12.2388 22.6274 12.3378 22.6818C12.3745 22.7019 12.4 22.7379 12.4063 22.7793L12.9132 26.0993C12.9629 26.4249 13.2429 26.6654 13.5722 26.6654H18.4264C18.7556 26.6654 19.0356 26.425 19.0854 26.0995L19.5933 22.7801C19.5997 22.7386 19.6252 22.7027 19.6619 22.6825C19.7614 22.6279 19.8596 22.5711 19.9564 22.5121C19.9923 22.4903 20.0362 22.4862 20.0754 22.5015L23.2035 23.7223C23.5103 23.842 23.8585 23.7198 24.0232 23.4346L26.4503 19.2307C26.6149 18.9456 26.5467 18.583 26.2898 18.3771L23.6679 16.2766C23.6352 16.2504 23.6168 16.2104 23.6177 16.1685C23.619 16.1122 23.6196 16.0558 23.6196 15.9993C23.6196 15.9429 23.619 15.8866 23.6177 15.8305C23.6168 15.7886 23.6353 15.7486 23.668 15.7224L26.2903 13.623C26.5474 13.4172 26.6156 13.0544 26.451 12.7692L24.0239 8.56537C23.8592 8.28023 23.5111 8.15797 23.2043 8.27757L20.0758 9.49734C20.0367 9.51258 19.9927 9.50846 19.9569 9.48664C19.8599 9.42762 19.7616 9.37071 19.6618 9.31596C19.6251 9.2958 19.5997 9.25984 19.5933 9.21843L19.0854 5.89915C19.0356 5.57369 18.7556 5.33333 18.4264 5.33333H13.5722ZM16.0001 20.2854C18.3672 20.2854 20.2862 18.3664 20.2862 15.9993C20.2862 13.6322 18.3672 11.7132 16.0001 11.7132C13.6329 11.7132 11.714 13.6322 11.714 15.9993C11.714 18.3664 13.6329 20.2854 16.0001 20.2854Z\" fill=\"currentColor\"/>`;\n\nvar Icon$104 = `<path d=\"M17.5091 24.6595C17.5091 25.2066 16.8864 25.5208 16.4463 25.1956L9.44847 20.0252C9.42553 20.0083 9.39776 19.9992 9.36923 19.9992H4.66667C4.29848 19.9992 4 19.7007 4 19.3325V12.6658C4 12.2976 4.29848 11.9992 4.66667 11.9992H9.37115C9.39967 11.9992 9.42745 11.99 9.45039 11.9731L16.4463 6.80363C16.8863 6.47845 17.5091 6.79262 17.5091 7.3398L17.5091 24.6595Z\" fill=\"currentColor\"/> <path d=\"M27.5091 9.33336C27.8773 9.33336 28.1758 9.63184 28.1758 10V22C28.1758 22.3682 27.8773 22.6667 27.5091 22.6667H26.1758C25.8076 22.6667 25.5091 22.3682 25.5091 22V10C25.5091 9.63184 25.8076 9.33336 26.1758 9.33336L27.5091 9.33336Z\" fill=\"currentColor\"/> <path d=\"M22.1758 12C22.544 12 22.8424 12.2985 22.8424 12.6667V19.3334C22.8424 19.7016 22.544 20 22.1758 20H20.8424C20.4743 20 20.1758 19.7016 20.1758 19.3334V12.6667C20.1758 12.2985 20.4743 12 20.8424 12H22.1758Z\" fill=\"currentColor\"/>`;\n\nvar Icon$105 = `<path d=\"M17.5091 24.6594C17.5091 25.2066 16.8864 25.5207 16.4463 25.1956L9.44847 20.0252C9.42553 20.0083 9.39776 19.9991 9.36923 19.9991H4.66667C4.29848 19.9991 4 19.7006 4 19.3324V12.6658C4 12.2976 4.29848 11.9991 4.66667 11.9991H9.37115C9.39967 11.9991 9.42745 11.99 9.45039 11.973L16.4463 6.80358C16.8863 6.4784 17.5091 6.79258 17.5091 7.33975L17.5091 24.6594Z\" fill=\"currentColor\"/> <path d=\"M22.8424 12.6667C22.8424 12.2985 22.544 12 22.1758 12H20.8424C20.4743 12 20.1758 12.2985 20.1758 12.6667V19.3333C20.1758 19.7015 20.4743 20 20.8424 20H22.1758C22.544 20 22.8424 19.7015 22.8424 19.3333V12.6667Z\" fill=\"currentColor\"/>`;\n\nexport { Component, DOMEvent, EventsController, EventsTarget, Icon$0, Icon$104, Icon$105, Icon$11, Icon$13, Icon$16, Icon$19, Icon$22, Icon$24, Icon$26, Icon$27, Icon$31, Icon$33, Icon$34, Icon$35, Icon$39, Icon$40, Icon$5, Icon$53, Icon$54, Icon$56, Icon$59, Icon$60, Icon$61, Icon$62, Icon$63, Icon$74, Icon$77, Icon$8, Icon$81, Icon$88, State, ViewController, animationFrameThrottle, appendTriggerEvent, ariaBool, camelToKebabCase, chromecast, composeRefs, computed, createContext, createDisposalBin, createReactComponent, createScope, deferredPromise, effect, findTriggerEvent, fscreen, functionDebounce, functionThrottle, getScope, hasProvidedContext, hasTriggerEvent, isArray, isBoolean, isDOMNode, isFunction, isKeyboardClick, isKeyboardEvent, isMouseEvent, isNil, isNull, isNumber, isObject, isPointerEvent, isString, isTouchEvent, isUndefined, isWriteSignal, kebabToCamelCase, keysOf, listenEvent, method, noop, onDispose, peek, prop, provideContext, r, scoped, setAttribute, setStyle, signal, tick, toggleClass, untrack, uppercaseFirstChar, useContext, useReactContext, useReactScope, useSignal, useSignalRecord, useState, useStateContext, waitIdlePeriod, waitTimeout, walkTriggerEventChain, wasEnterKeyPressed };\n","\"use client\"\n\nimport * as React from 'react';\nimport { isNumber, isString, isFunction, waitTimeout, isUndefined, isArray, isNull, deferredPromise, isBoolean, listenEvent, scoped, getScope, EventsTarget, DOMEvent, State, fscreen, tick, useContext, createContext, Component, functionThrottle, isTouchEvent, setStyle, EventsController, isKeyboardClick, setAttribute, effect, isDOMNode, onDispose, untrack, functionDebounce, ViewController, signal, peek, isKeyboardEvent, isNil, createScope, camelToKebabCase, waitIdlePeriod, provideContext, animationFrameThrottle, uppercaseFirstChar, computed, prop, method, noop, ariaBool as ariaBool$1, isWriteSignal, hasProvidedContext, isObject, useState, r, wasEnterKeyPressed, isPointerEvent, isMouseEvent, kebabToCamelCase, composeRefs, useStateContext, useSignal, useSignalRecord } from './vidstack-CZgUA94N.js';\nimport { autoUpdate, computePosition, flip, shift } from '@floating-ui/dom';\n\nfunction isVideoQualitySrc(src) {\n return !isString(src) && \"width\" in src && \"height\" in src && isNumber(src.width) && isNumber(src.height);\n}\n\nconst IS_SERVER = typeof document === \"undefined\";\n\nconst UA = IS_SERVER ? \"\" : navigator?.userAgent.toLowerCase() || \"\";\nconst IS_IOS = !IS_SERVER && /iphone|ipad|ipod|ios|crios|fxios/i.test(UA);\nconst IS_IPHONE = !IS_SERVER && /(iphone|ipod)/gi.test(navigator?.platform || \"\");\nconst IS_CHROME = !IS_SERVER && !!window.chrome;\nconst IS_SAFARI = !IS_SERVER && (!!window.safari || IS_IOS);\nfunction canOrientScreen() {\n return canRotateScreen() && isFunction(screen.orientation.unlock);\n}\nfunction canRotateScreen() {\n return !IS_SERVER && !isUndefined(window.screen.orientation) && !isUndefined(window.screen.orientation.lock);\n}\nfunction canPlayAudioType(audio, type) {\n if (IS_SERVER) return false;\n if (!audio) audio = document.createElement(\"audio\");\n return audio.canPlayType(type).length > 0;\n}\nfunction canPlayVideoType(video, type) {\n if (IS_SERVER) return false;\n if (!video) video = document.createElement(\"video\");\n return video.canPlayType(type).length > 0;\n}\nfunction canPlayHLSNatively(video) {\n if (IS_SERVER) return false;\n if (!video) video = document.createElement(\"video\");\n return video.canPlayType(\"application/vnd.apple.mpegurl\").length > 0;\n}\nfunction canUsePictureInPicture(video) {\n if (IS_SERVER) return false;\n return !!document.pictureInPictureEnabled && !video?.disablePictureInPicture;\n}\nfunction canUseVideoPresentation(video) {\n if (IS_SERVER) return false;\n return isFunction(video?.webkitSupportsPresentationMode) && isFunction(video?.webkitSetPresentationMode);\n}\nasync function canChangeVolume() {\n const video = document.createElement(\"video\");\n video.volume = 0.5;\n await waitTimeout(0);\n return video.volume === 0.5;\n}\nfunction getMediaSource() {\n return IS_SERVER ? void 0 : window?.ManagedMediaSource ?? window?.MediaSource ?? window?.WebKitMediaSource;\n}\nfunction getSourceBuffer() {\n return IS_SERVER ? void 0 : window?.SourceBuffer ?? window?.WebKitSourceBuffer;\n}\nfunction isHLSSupported() {\n if (IS_SERVER) return false;\n const MediaSource = getMediaSource();\n if (isUndefined(MediaSource)) return false;\n const isTypeSupported = MediaSource && isFunction(MediaSource.isTypeSupported) && MediaSource.isTypeSupported('video/mp4; codecs=\"avc1.42E01E,mp4a.40.2\"');\n const SourceBuffer = getSourceBuffer();\n const isSourceBufferValid = isUndefined(SourceBuffer) || !isUndefined(SourceBuffer.prototype) && isFunction(SourceBuffer.prototype.appendBuffer) && isFunction(SourceBuffer.prototype.remove);\n return !!isTypeSupported && !!isSourceBufferValid;\n}\nfunction isDASHSupported() {\n return isHLSSupported();\n}\n\nclass TimeRange {\n #ranges;\n get length() {\n return this.#ranges.length;\n }\n constructor(start, end) {\n if (isArray(start)) {\n this.#ranges = start;\n } else if (!isUndefined(start) && !isUndefined(end)) {\n this.#ranges = [[start, end]];\n } else {\n this.#ranges = [];\n }\n }\n start(index) {\n return this.#ranges[index][0] ?? Infinity;\n }\n end(index) {\n return this.#ranges[index][1] ?? Infinity;\n }\n}\nfunction getTimeRangesStart(range) {\n if (!range.length) return null;\n let min = range.start(0);\n for (let i = 1; i < range.length; i++) {\n const value = range.start(i);\n if (value < min) min = value;\n }\n return min;\n}\nfunction getTimeRangesEnd(range) {\n if (!range.length) return null;\n let max = range.end(0);\n for (let i = 1; i < range.length; i++) {\n const value = range.end(i);\n if (value > max) max = value;\n }\n return max;\n}\nfunction normalizeTimeIntervals(intervals) {\n if (intervals.length <= 1) {\n return intervals;\n }\n intervals.sort((a, b) => a[0] - b[0]);\n let normalized = [], current = intervals[0];\n for (let i = 1; i < intervals.length; i++) {\n const next = intervals[i];\n if (current[1] >= next[0] - 1) {\n current = [current[0], Math.max(current[1], next[1])];\n } else {\n normalized.push(current);\n current = next;\n }\n }\n normalized.push(current);\n return normalized;\n}\nfunction updateTimeIntervals(intervals, interval, value) {\n let start = interval[0], end = interval[1];\n if (value < start) {\n return [value, -1];\n } else if (value === start) {\n return interval;\n } else if (start === -1) {\n interval[0] = value;\n return interval;\n } else if (value > start) {\n interval[1] = value;\n if (end === -1) intervals.push(interval);\n }\n normalizeTimeIntervals(intervals);\n return interval;\n}\n\nconst AUDIO_EXTENSIONS = /\\.(m4a|m4b|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx|flac)($|\\?)/i;\nconst AUDIO_TYPES = /* @__PURE__ */ new Set([\n \"audio/mpeg\",\n \"audio/ogg\",\n \"audio/3gp\",\n \"audio/mp3\",\n \"audio/webm\",\n \"audio/flac\",\n \"audio/m4a\",\n \"audio/m4b\",\n \"audio/mp4a\",\n \"audio/mp4\"\n]);\nconst VIDEO_EXTENSIONS = /\\.(mp4|og[gv]|webm|mov|m4v)(#t=[,\\d+]+)?($|\\?)/i;\nconst VIDEO_TYPES = /* @__PURE__ */ new Set([\n \"video/mp4\",\n \"video/webm\",\n \"video/3gp\",\n \"video/ogg\",\n \"video/avi\",\n \"video/mpeg\"\n]);\nconst HLS_VIDEO_EXTENSIONS = /\\.(m3u8)($|\\?)/i;\nconst DASH_VIDEO_EXTENSIONS = /\\.(mpd)($|\\?)/i;\nconst HLS_VIDEO_TYPES = /* @__PURE__ */ new Set([\n // Apple sanctioned\n \"application/vnd.apple.mpegurl\",\n // Apple sanctioned for backwards compatibility\n \"audio/mpegurl\",\n // Very common\n \"audio/x-mpegurl\",\n // Very common\n \"application/x-mpegurl\",\n // Included for completeness\n \"video/x-mpegurl\",\n \"video/mpegurl\",\n \"application/mpegurl\"\n]);\nconst DASH_VIDEO_TYPES = /* @__PURE__ */ new Set([\"application/dash+xml\"]);\nfunction isAudioSrc({ src, type }) {\n return isString(src) ? AUDIO_EXTENSIONS.test(src) || AUDIO_TYPES.has(type) || src.startsWith(\"blob:\") && type === \"audio/object\" : type === \"audio/object\";\n}\nfunction isVideoSrc(src) {\n return isString(src.src) ? VIDEO_EXTENSIONS.test(src.src) || VIDEO_TYPES.has(src.type) || src.src.startsWith(\"blob:\") && src.type === \"video/object\" || isHLSSrc(src) && (IS_SERVER || canPlayHLSNatively()) : src.type === \"video/object\";\n}\nfunction isHLSSrc({ src, type }) {\n return isString(src) && HLS_VIDEO_EXTENSIONS.test(src) || HLS_VIDEO_TYPES.has(type);\n}\nfunction isDASHSrc({ src, type }) {\n return isString(src) && DASH_VIDEO_EXTENSIONS.test(src) || DASH_VIDEO_TYPES.has(type);\n}\nfunction canGoogleCastSrc(src) {\n return isString(src.src) && (isAudioSrc(src) || isVideoSrc(src) || isHLSSrc(src));\n}\nfunction isMediaStream(src) {\n return !IS_SERVER && typeof window.MediaStream !== \"undefined\" && src instanceof window.MediaStream;\n}\n\nfunction appendParamsToURL(baseUrl, params) {\n const url = new URL(baseUrl);\n for (const key of Object.keys(params)) {\n url.searchParams.set(key, params[key] + \"\");\n }\n return url.toString();\n}\nfunction preconnect(url, rel = \"preconnect\") {\n if (IS_SERVER) return false;\n const exists = document.querySelector(`link[href=\"${url}\"]`);\n if (!isNull(exists)) return true;\n const link = document.createElement(\"link\");\n link.rel = rel;\n link.href = url;\n link.crossOrigin = \"true\";\n document.head.append(link);\n return true;\n}\nconst pendingRequests = {};\nfunction loadScript(src) {\n if (pendingRequests[src]) return pendingRequests[src].promise;\n const promise = deferredPromise(), exists = document.querySelector(`script[src=\"${src}\"]`);\n if (!isNull(exists)) {\n promise.resolve();\n return promise.promise;\n }\n pendingRequests[src] = promise;\n const script = document.createElement(\"script\");\n script.src = src;\n script.onload = () => {\n promise.resolve();\n delete pendingRequests[src];\n };\n script.onerror = () => {\n promise.reject();\n delete pendingRequests[src];\n };\n setTimeout(() => document.head.append(script), 0);\n return promise.promise;\n}\nfunction getRequestCredentials(crossOrigin) {\n return crossOrigin === \"use-credentials\" ? \"include\" : isString(crossOrigin) ? \"same-origin\" : void 0;\n}\nfunction getDownloadFile({\n title,\n src,\n download\n}) {\n const url = isBoolean(download) || download === \"\" ? src.src : isString(download) ? download : download?.url;\n if (!isValidFileDownload({ url, src, download })) return null;\n return {\n url,\n name: !isBoolean(download) && !isString(download) && download?.filename || title.toLowerCase() || \"media\"\n };\n}\nfunction isValidFileDownload({\n url,\n src,\n download\n}) {\n return isString(url) && (download && download !== true || isAudioSrc(src) || isVideoSrc(src));\n}\n\nconst CROSS_ORIGIN = Symbol(0), READY_STATE = Symbol(0), UPDATE_ACTIVE_CUES = Symbol(0), CAN_LOAD = Symbol(0), ON_MODE_CHANGE = Symbol(0), NATIVE = Symbol(0), NATIVE_HLS = Symbol(0);\nconst TextTrackSymbol = {\n crossOrigin: CROSS_ORIGIN,\n readyState: READY_STATE,\n updateActiveCues: UPDATE_ACTIVE_CUES,\n canLoad: CAN_LOAD,\n onModeChange: ON_MODE_CHANGE,\n native: NATIVE,\n nativeHLS: NATIVE_HLS\n};\n\nfunction findActiveCue(cues, time) {\n for (let i = 0, len = cues.length; i < len; i++) {\n if (isCueActive(cues[i], time)) return cues[i];\n }\n return null;\n}\nfunction isCueActive(cue, time) {\n return time >= cue.startTime && time < cue.endTime;\n}\nfunction watchActiveTextTrack(tracks, kind, onChange) {\n let currentTrack = null, scope = getScope();\n function onModeChange() {\n const kinds = isString(kind) ? [kind] : kind, track = tracks.toArray().find((track2) => kinds.includes(track2.kind) && track2.mode === \"showing\");\n if (track === currentTrack) return;\n if (!track) {\n onChange(null);\n currentTrack = null;\n return;\n }\n if (track.readyState == 2) {\n onChange(track);\n } else {\n onChange(null);\n scoped(() => {\n const off = listenEvent(\n track,\n \"load\",\n () => {\n onChange(track);\n off();\n },\n { once: true }\n );\n }, scope);\n }\n currentTrack = track;\n }\n onModeChange();\n return listenEvent(tracks, \"mode-change\", onModeChange);\n}\nfunction watchCueTextChange(tracks, kind, callback) {\n watchActiveTextTrack(tracks, kind, (track) => {\n if (!track) {\n callback(\"\");\n return;\n }\n const onCueChange = () => {\n const activeCue = track?.activeCues[0];\n callback(activeCue?.text || \"\");\n };\n onCueChange();\n listenEvent(track, \"cue-change\", onCueChange);\n });\n}\n\nclass TextTrack extends EventsTarget {\n static createId(track) {\n return `vds-${track.type}-${track.kind}-${track.src ?? track.label ?? \"?\"}`;\n }\n src;\n content;\n type;\n encoding;\n id = \"\";\n label = \"\";\n language = \"\";\n kind;\n default = false;\n #canLoad = false;\n #currentTime = 0;\n #mode = \"disabled\";\n #metadata = {};\n #regions = [];\n #cues = [];\n #activeCues = [];\n /** @internal */\n [TextTrackSymbol.readyState] = 0;\n /** @internal */\n [TextTrackSymbol.crossOrigin];\n /** @internal */\n [TextTrackSymbol.onModeChange] = null;\n /** @internal */\n [TextTrackSymbol.native] = null;\n get metadata() {\n return this.#metadata;\n }\n get regions() {\n return this.#regions;\n }\n get cues() {\n return this.#cues;\n }\n get activeCues() {\n return this.#activeCues;\n }\n /**\n * - 0: Not Loading\n * - 1: Loading\n * - 2: Ready\n * - 3: Error\n */\n get readyState() {\n return this[TextTrackSymbol.readyState];\n }\n get mode() {\n return this.#mode;\n }\n set mode(mode) {\n this.setMode(mode);\n }\n constructor(init) {\n super();\n for (const prop of Object.keys(init)) this[prop] = init[prop];\n if (!this.type) this.type = \"vtt\";\n if (!IS_SERVER && init.content) {\n this.#parseContent(init);\n } else if (!init.src) {\n this[TextTrackSymbol.readyState] = 2;\n }\n }\n addCue(cue, trigger) {\n let i = 0, length = this.#cues.length;\n for (i = 0; i < length; i++) if (cue.endTime <= this.#cues[i].startTime) break;\n if (i === length) this.#cues.push(cue);\n else this.#cues.splice(i, 0, cue);\n if (!(cue instanceof TextTrackCue)) {\n this[TextTrackSymbol.native]?.track.addCue(cue);\n }\n this.dispatchEvent(new DOMEvent(\"add-cue\", { detail: cue, trigger }));\n if (isCueActive(cue, this.#currentTime)) {\n this[TextTrackSymbol.updateActiveCues](this.#currentTime, trigger);\n }\n }\n removeCue(cue, trigger) {\n const index = this.#cues.indexOf(cue);\n if (index >= 0) {\n const isActive = this.#activeCues.includes(cue);\n this.#cues.splice(index, 1);\n this[TextTrackSymbol.native]?.track.removeCue(cue);\n this.dispatchEvent(new DOMEvent(\"remove-cue\", { detail: cue, trigger }));\n if (isActive) {\n this[TextTrackSymbol.updateActiveCues](this.#currentTime, trigger);\n }\n }\n }\n setMode(mode, trigger) {\n if (this.#mode === mode) return;\n this.#mode = mode;\n if (mode === \"disabled\") {\n this.#activeCues = [];\n this.#activeCuesChanged();\n } else if (this.readyState === 2) {\n this[TextTrackSymbol.updateActiveCues](this.#currentTime, trigger);\n } else {\n this.#load();\n }\n this.dispatchEvent(new DOMEvent(\"mode-change\", { detail: this, trigger }));\n this[TextTrackSymbol.onModeChange]?.();\n }\n /** @internal */\n [TextTrackSymbol.updateActiveCues](currentTime, trigger) {\n this.#currentTime = currentTime;\n if (this.mode === \"disabled\" || !this.#cues.length) return;\n const activeCues = [];\n for (let i = 0, length = this.#cues.length; i < length; i++) {\n const cue = this.#cues[i];\n if (isCueActive(cue, currentTime)) activeCues.push(cue);\n }\n let changed = activeCues.length !== this.#activeCues.length;\n if (!changed) {\n for (let i = 0; i < activeCues.length; i++) {\n if (!this.#activeCues.includes(activeCues[i])) {\n changed = true;\n break;\n }\n }\n }\n this.#activeCues = activeCues;\n if (changed) this.#activeCuesChanged(trigger);\n }\n /** @internal */\n [TextTrackSymbol.canLoad]() {\n this.#canLoad = true;\n if (this.#mode !== \"disabled\") this.#load();\n }\n #parseContent(init) {\n import('media-captions').then(({ parseText, VTTCue, VTTRegion }) => {\n if (!isString(init.content) || init.type === \"json\") {\n this.#parseJSON(init.content, VTTCue, VTTRegion);\n if (this.readyState !== 3) this.#ready();\n } else {\n parseText(init.content, { type: init.type }).then(({ cues, regions }) => {\n this.#cues = cues;\n this.#regions = regions;\n this.#ready();\n });\n }\n });\n }\n async #load() {\n if (!this.#canLoad || this[TextTrackSymbol.readyState] > 0) return;\n this[TextTrackSymbol.readyState] = 1;\n this.dispatchEvent(new DOMEvent(\"load-start\"));\n if (!this.src) {\n this.#ready();\n return;\n }\n try {\n const { parseResponse, VTTCue, VTTRegion } = await import('media-captions'), crossOrigin = this[TextTrackSymbol.crossOrigin]?.();\n const response = fetch(this.src, {\n headers: this.type === \"json\" ? { \"Content-Type\": \"application/json\" } : void 0,\n credentials: getRequestCredentials(crossOrigin)\n });\n if (this.type === \"json\") {\n this.#parseJSON(await (await response).text(), VTTCue, VTTRegion);\n } else {\n const { errors, metadata, regions, cues } = await parseResponse(response, {\n type: this.type,\n encoding: this.encoding\n });\n if (errors[0]?.code === 0) {\n throw errors[0];\n } else {\n this.#metadata = metadata;\n this.#regions = regions;\n this.#cues = cues;\n }\n }\n this.#ready();\n } catch (error) {\n this.#error(error);\n }\n }\n #ready() {\n this[TextTrackSymbol.readyState] = 2;\n if (!this.src || this.type !== \"vtt\") {\n const native = this[TextTrackSymbol.native];\n if (native && !native.managed) {\n for (const cue of this.#cues) native.track.addCue(cue);\n }\n }\n const loadEvent = new DOMEvent(\"load\");\n this[TextTrackSymbol.updateActiveCues](this.#currentTime, loadEvent);\n this.dispatchEvent(loadEvent);\n }\n #error(error) {\n this[TextTrackSymbol.readyState] = 3;\n this.dispatchEvent(new DOMEvent(\"error\", { detail: error }));\n }\n #parseJSON(json, VTTCue, VTTRegion) {\n try {\n const { regions, cues } = parseJSONCaptionsFile(json, VTTCue, VTTRegion);\n this.#regions = regions;\n this.#cues = cues;\n } catch (error) {\n this.#error(error);\n }\n }\n #activeCuesChanged(trigger) {\n this.dispatchEvent(new DOMEvent(\"cue-change\", { trigger }));\n }\n}\nconst captionRE = /captions|subtitles/;\nfunction isTrackCaptionKind(track) {\n return captionRE.test(track.kind);\n}\nfunction parseJSONCaptionsFile(json, Cue, Region) {\n const content = isString(json) ? JSON.parse(json) : json;\n let regions = [], cues = [];\n if (content.regions && Region) {\n regions = content.regions.map((region) => Object.assign(new Region(), region));\n }\n if (content.cues || isArray(content)) {\n cues = (isArray(content) ? content : content.cues).filter((content2) => isNumber(content2.startTime) && isNumber(content2.endTime)).map((cue) => Object.assign(new Cue(0, 0, \"\"), cue));\n }\n return { regions, cues };\n}\n\nconst mediaState = new State({\n artist: \"\",\n artwork: null,\n audioTrack: null,\n audioTracks: [],\n autoPlay: false,\n autoPlayError: null,\n audioGain: null,\n buffered: new TimeRange(),\n canLoad: false,\n canLoadPoster: false,\n canFullscreen: false,\n canOrientScreen: canOrientScreen(),\n canPictureInPicture: false,\n canPlay: false,\n clipStartTime: 0,\n clipEndTime: 0,\n controls: false,\n get iOSControls() {\n return IS_IPHONE && this.mediaType === \"video\" && (!this.playsInline || !fscreen.fullscreenEnabled && this.fullscreen);\n },\n get nativeControls() {\n return this.controls || this.iOSControls;\n },\n controlsVisible: false,\n get controlsHidden() {\n return !this.controlsVisible;\n },\n crossOrigin: null,\n ended: false,\n error: null,\n fullscreen: false,\n get loop() {\n return this.providedLoop || this.userPrefersLoop;\n },\n logLevel: \"silent\",\n mediaType: \"unknown\",\n muted: false,\n paused: true,\n played: new TimeRange(),\n playing: false,\n playsInline: false,\n pictureInPicture: false,\n preload: \"metadata\",\n playbackRate: 1,\n qualities: [],\n quality: null,\n autoQuality: false,\n canSetQuality: true,\n canSetPlaybackRate: true,\n canSetVolume: false,\n canSetAudioGain: false,\n seekable: new TimeRange(),\n seeking: false,\n source: { src: \"\", type: \"\" },\n sources: [],\n started: false,\n textTracks: [],\n textTrack: null,\n get hasCaptions() {\n return this.textTracks.filter(isTrackCaptionKind).length > 0;\n },\n volume: 1,\n waiting: false,\n realCurrentTime: 0,\n get currentTime() {\n return this.ended ? this.duration : this.clipStartTime > 0 ? Math.max(0, Math.min(this.realCurrentTime - this.clipStartTime, this.duration)) : this.realCurrentTime;\n },\n providedDuration: -1,\n intrinsicDuration: 0,\n get duration() {\n return this.seekableWindow;\n },\n get title() {\n return this.providedTitle || this.inferredTitle;\n },\n get poster() {\n return this.providedPoster || this.inferredPoster;\n },\n get viewType() {\n return this.providedViewType !== \"unknown\" ? this.providedViewType : this.inferredViewType;\n },\n get streamType() {\n return this.providedStreamType !== \"unknown\" ? this.providedStreamType : this.inferredStreamType;\n },\n get currentSrc() {\n return this.source;\n },\n get bufferedStart() {\n const start = getTimeRangesStart(this.buffered) ?? 0;\n return Math.max(start, this.clipStartTime);\n },\n get bufferedEnd() {\n const end = getTimeRangesEnd(this.buffered) ?? 0;\n return Math.min(this.seekableEnd, Math.max(0, end - this.clipStartTime));\n },\n get bufferedWindow() {\n return Math.max(0, this.bufferedEnd - this.bufferedStart);\n },\n get seekableStart() {\n if (this.isLiveDVR && this.liveDVRWindow > 0) {\n return Math.max(0, this.seekableEnd - this.liveDVRWindow);\n }\n const start = getTimeRangesStart(this.seekable) ?? 0;\n return Math.max(start, this.clipStartTime);\n },\n get seekableEnd() {\n if (this.providedDuration > 0) return this.providedDuration;\n const end = this.liveSyncPosition > 0 ? this.liveSyncPosition : this.canPlay ? getTimeRangesEnd(this.seekable) ?? Infinity : 0;\n return this.clipEndTime > 0 ? Math.min(this.clipEndTime, end) : end;\n },\n get seekableWindow() {\n const window = this.seekableEnd - this.seekableStart;\n return !isNaN(window) ? Math.max(0, window) : Infinity;\n },\n // ~~ remote playback ~~\n canAirPlay: false,\n canGoogleCast: false,\n remotePlaybackState: \"disconnected\",\n remotePlaybackType: \"none\",\n remotePlaybackLoader: null,\n remotePlaybackInfo: null,\n get isAirPlayConnected() {\n return this.remotePlaybackType === \"airplay\" && this.remotePlaybackState === \"connected\";\n },\n get isGoogleCastConnected() {\n return this.remotePlaybackType === \"google-cast\" && this.remotePlaybackState === \"connected\";\n },\n // ~~ responsive design ~~\n pointer: \"fine\",\n orientation: \"landscape\",\n width: 0,\n height: 0,\n mediaWidth: 0,\n mediaHeight: 0,\n lastKeyboardAction: null,\n // ~~ user props ~~\n userBehindLiveEdge: false,\n // ~~ live props ~~\n liveEdgeTolerance: 10,\n minLiveDVRWindow: 60,\n get canSeek() {\n return /unknown|on-demand|:dvr/.test(this.streamType) && Number.isFinite(this.duration) && (!this.isLiveDVR || this.duration >= this.liveDVRWindow);\n },\n get live() {\n return this.streamType.includes(\"live\") || !Number.isFinite(this.duration);\n },\n get liveEdgeStart() {\n return this.live && Number.isFinite(this.seekableEnd) ? Math.max(0, this.seekableEnd - this.liveEdgeTolerance) : 0;\n },\n get liveEdge() {\n return this.live && (!this.canSeek || !this.userBehindLiveEdge && this.currentTime >= this.liveEdgeStart);\n },\n get liveEdgeWindow() {\n return this.live && Number.isFinite(this.seekableEnd) ? this.seekableEnd - this.liveEdgeStart : 0;\n },\n get isLiveDVR() {\n return /:dvr/.test(this.streamType);\n },\n get liveDVRWindow() {\n return Math.max(this.inferredLiveDVRWindow, this.minLiveDVRWindow);\n },\n // ~~ internal props ~~\n autoPlaying: false,\n providedTitle: \"\",\n inferredTitle: \"\",\n providedLoop: false,\n userPrefersLoop: false,\n providedPoster: \"\",\n inferredPoster: \"\",\n inferredViewType: \"unknown\",\n providedViewType: \"unknown\",\n providedStreamType: \"unknown\",\n inferredStreamType: \"unknown\",\n liveSyncPosition: null,\n inferredLiveDVRWindow: 0,\n savedState: null\n});\nconst RESET_ON_SRC_QUALITY_CHANGE = /* @__PURE__ */ new Set([\n \"autoPlayError\",\n \"autoPlaying\",\n \"buffered\",\n \"canPlay\",\n \"error\",\n \"paused\",\n \"played\",\n \"playing\",\n \"seekable\",\n \"seeking\",\n \"waiting\"\n]);\nconst RESET_ON_SRC_CHANGE = /* @__PURE__ */ new Set([\n ...RESET_ON_SRC_QUALITY_CHANGE,\n \"ended\",\n \"inferredPoster\",\n \"inferredStreamType\",\n \"inferredTitle\",\n \"intrinsicDuration\",\n \"inferredLiveDVRWindow\",\n \"liveSyncPosition\",\n \"realCurrentTime\",\n \"savedState\",\n \"started\",\n \"userBehindLiveEdge\"\n]);\nfunction softResetMediaState($media, isSourceQualityChange = false) {\n const filter = isSourceQualityChange ? RESET_ON_SRC_QUALITY_CHANGE : RESET_ON_SRC_CHANGE;\n mediaState.reset($media, (prop) => filter.has(prop));\n tick();\n}\nfunction boundTime(time, store) {\n const clippedTime = time + store.clipStartTime(), isStart = Math.floor(time) === Math.floor(store.seekableStart()), isEnd = Math.floor(clippedTime) === Math.floor(store.seekableEnd());\n if (isStart) {\n return store.seekableStart();\n }\n if (isEnd) {\n return store.seekableEnd();\n }\n if (store.isLiveDVR() && store.liveDVRWindow() > 0 && clippedTime < store.seekableEnd() - store.liveDVRWindow()) {\n return store.bufferedStart();\n }\n return Math.min(Math.max(store.seekableStart() + 0.1, clippedTime), store.seekableEnd() - 0.1);\n}\n\nconst mediaContext = createContext();\nfunction useMediaContext() {\n return useContext(mediaContext);\n}\n\nclass MediaRemoteControl {\n #target = null;\n #player = null;\n #prevTrackIndex = -1;\n #logger;\n constructor(logger = void 0) {\n this.#logger = logger;\n }\n /**\n * Set the target from which to dispatch media requests events from. The events should bubble\n * up from this target to the player element.\n *\n * @example\n * ```ts\n * const button = document.querySelector('button');\n * remote.setTarget(button);\n * ```\n */\n setTarget(target) {\n this.#target = target;\n }\n /**\n * Returns the current player element. This method will attempt to find the player by\n * searching up from either the given `target` or default target set via `remote.setTarget`.\n *\n * @example\n * ```ts\n * const player = remote.getPlayer();\n * ```\n */\n getPlayer(target) {\n if (this.#player) return this.#player;\n (target ?? this.#target)?.dispatchEvent(\n new DOMEvent(\"find-media-player\", {\n detail: (player) => void (this.#player = player),\n bubbles: true,\n composed: true\n })\n );\n return this.#player;\n }\n /**\n * Set the current player element so the remote can support toggle methods such as\n * `togglePaused` as they rely on the current media state.\n */\n setPlayer(player) {\n this.#player = player;\n }\n /**\n * Dispatch a request to start the media loading process. This will only work if the media\n * player has been initialized with a custom loading strategy `load=\"custom\">`.\n *\n * @docs {@link https://www.vidstack.io/docs/player/core-concepts/loading#load-strategies}\n */\n startLoading(trigger) {\n this.#dispatchRequest(\"media-start-loading\", trigger);\n }\n /**\n * Dispatch a request to start the poster loading process. This will only work if the media\n * player has been initialized with a custom poster loading strategy `posterLoad=\"custom\">`.\n *\n * @docs {@link https://www.vidstack.io/docs/player/core-concepts/loading#load-strategies}\n */\n startLoadingPoster(trigger) {\n this.#dispatchRequest(\"media-poster-start-loading\", trigger);\n }\n /**\n * Dispatch a request to connect to AirPlay.\n *\n * @see {@link https://www.apple.com/au/airplay}\n */\n requestAirPlay(trigger) {\n this.#dispatchRequest(\"media-airplay-request\", trigger);\n }\n /**\n * Dispatch a request to connect to Google Cast.\n *\n * @see {@link https://developers.google.com/cast/docs/overview}\n */\n requestGoogleCast(trigger) {\n this.#dispatchRequest(\"media-google-cast-request\", trigger);\n }\n /**\n * Dispatch a request to begin/resume media playback.\n */\n play(trigger) {\n this.#dispatchRequest(\"media-play-request\", trigger);\n }\n /**\n * Dispatch a request to pause media playback.\n */\n pause(trigger) {\n this.#dispatchRequest(\"media-pause-request\", trigger);\n }\n /**\n * Dispatch a request to set the media volume to mute (0).\n */\n mute(trigger) {\n this.#dispatchRequest(\"media-mute-request\", trigger);\n }\n /**\n * Dispatch a request to unmute the media volume and set it back to it's previous state.\n */\n unmute(trigger) {\n this.#dispatchRequest(\"media-unmute-request\", trigger);\n }\n /**\n * Dispatch a request to enter fullscreen.\n *\n * @docs {@link https://www.vidstack.io/docs/player/api/fullscreen#remote-control}\n */\n enterFullscreen(target, trigger) {\n this.#dispatchRequest(\"media-enter-fullscreen-request\", trigger, target);\n }\n /**\n * Dispatch a request to exit fullscreen.\n *\n * @docs {@link https://www.vidstack.io/docs/player/api/fullscreen#remote-control}\n */\n exitFullscreen(target, trigger) {\n this.#dispatchRequest(\"media-exit-fullscreen-request\", trigger, target);\n }\n /**\n * Dispatch a request to lock the screen orientation.\n *\n * @docs {@link https://www.vidstack.io/docs/player/screen-orientation#remote-control}\n */\n lockScreenOrientation(lockType, trigger) {\n this.#dispatchRequest(\"media-orientation-lock-request\", trigger, lockType);\n }\n /**\n * Dispatch a request to unlock the screen orientation.\n *\n * @docs {@link https://www.vidstack.io/docs/player/api/screen-orientation#remote-control}\n */\n unlockScreenOrientation(trigger) {\n this.#dispatchRequest(\"media-orientation-unlock-request\", trigger);\n }\n /**\n * Dispatch a request to enter picture-in-picture mode.\n *\n * @docs {@link https://www.vidstack.io/docs/player/api/picture-in-picture#remote-control}\n */\n enterPictureInPicture(trigger) {\n this.#dispatchRequest(\"media-enter-pip-request\", trigger);\n }\n /**\n * Dispatch a request to exit picture-in-picture mode.\n *\n * @docs {@link https://www.vidstack.io/docs/player/api/picture-in-picture#remote-control}\n */\n exitPictureInPicture(trigger) {\n this.#dispatchRequest(\"media-exit-pip-request\", trigger);\n }\n /**\n * Notify the media player that a seeking process is happening and to seek to the given `time`.\n */\n seeking(time, trigger) {\n this.#dispatchRequest(\"media-seeking-request\", trigger, time);\n }\n /**\n * Notify the media player that a seeking operation has completed and to seek to the given `time`.\n * This is generally called after a series of `remote.seeking()` calls.\n */\n seek(time, trigger) {\n this.#dispatchRequest(\"media-seek-request\", trigger, time);\n }\n seekToLiveEdge(trigger) {\n this.#dispatchRequest(\"media-live-edge-request\", trigger);\n }\n /**\n * Dispatch a request to update the length of the media in seconds.\n *\n * @example\n * ```ts\n * remote.changeDuration(100); // 100 seconds\n * ```\n */\n changeDuration(duration, trigger) {\n this.#dispatchRequest(\"media-duration-change-request\", trigger, duration);\n }\n /**\n * Dispatch a request to update the clip start time. This is the time at which media playback\n * should start at.\n *\n * @example\n * ```ts\n * remote.changeClipStart(100); // start at 100 seconds\n * ```\n */\n changeClipStart(startTime, trigger) {\n this.#dispatchRequest(\"media-clip-start-change-request\", trigger, startTime);\n }\n /**\n * Dispatch a request to update the clip end time. This is the time at which media playback\n * should end at.\n *\n * @example\n * ```ts\n * remote.changeClipEnd(100); // end at 100 seconds\n * ```\n */\n changeClipEnd(endTime, trigger) {\n this.#dispatchRequest(\"media-clip-end-change-request\", trigger, endTime);\n }\n /**\n * Dispatch a request to update the media volume to the given `volume` level which is a value\n * between 0 and 1.\n *\n * @docs {@link https://www.vidstack.io/docs/player/api/audio-gain#remote-control}\n * @example\n * ```ts\n * remote.changeVolume(0); // 0%\n * remote.changeVolume(0.05); // 5%\n * remote.changeVolume(0.5); // 50%\n * remote.changeVolume(0.75); // 70%\n * remote.changeVolume(1); // 100%\n * ```\n */\n changeVolume(volume, trigger) {\n this.#dispatchRequest(\"media-volume-change-request\", trigger, Math.max(0, Math.min(1, volume)));\n }\n /**\n * Dispatch a request to change the current audio track.\n *\n * @example\n * ```ts\n * remote.changeAudioTrack(1); // track at index 1\n * ```\n */\n changeAudioTrack(index, trigger) {\n this.#dispatchRequest(\"media-audio-track-change-request\", trigger, index);\n }\n /**\n * Dispatch a request to change the video quality. The special value `-1` represents auto quality\n * selection.\n *\n * @example\n * ```ts\n * remote.changeQuality(-1); // auto\n * remote.changeQuality(1); // quality at index 1\n * ```\n */\n changeQuality(index, trigger) {\n this.#dispatchRequest(\"media-quality-change-request\", trigger, index);\n }\n /**\n * Request auto quality selection.\n */\n requestAutoQuality(trigger) {\n this.changeQuality(-1, trigger);\n }\n /**\n * Dispatch a request to change the mode of the text track at the given index.\n *\n * @example\n * ```ts\n * remote.changeTextTrackMode(1, 'showing'); // track at index 1\n * ```\n */\n changeTextTrackMode(index, mode, trigger) {\n this.#dispatchRequest(\"media-text-track-change-request\", trigger, {\n index,\n mode\n });\n }\n /**\n * Dispatch a request to change the media playback rate.\n *\n * @example\n * ```ts\n * remote.changePlaybackRate(0.5); // Half the normal speed\n * remote.changePlaybackRate(1); // Normal speed\n * remote.changePlaybackRate(1.5); // 50% faster than normal\n * remote.changePlaybackRate(2); // Double the normal speed\n * ```\n */\n changePlaybackRate(rate, trigger) {\n this.#dispatchRequest(\"media-rate-change-request\", trigger, rate);\n }\n /**\n * Dispatch a request to change the media audio gain.\n *\n * @example\n * ```ts\n * remote.changeAudioGain(1); // Disable audio gain\n * remote.changeAudioGain(1.5); // 50% louder\n * remote.changeAudioGain(2); // 100% louder\n * ```\n */\n changeAudioGain(gain, trigger) {\n this.#dispatchRequest(\"media-audio-gain-change-request\", trigger, gain);\n }\n /**\n * Dispatch a request to resume idle tracking on controls.\n */\n resumeControls(trigger) {\n this.#dispatchRequest(\"media-resume-controls-request\", trigger);\n }\n /**\n * Dispatch a request to pause controls idle tracking. Pausing tracking will result in the\n * controls being visible until `remote.resumeControls()` is called. This method\n * is generally used when building custom controls and you'd like to prevent the UI from\n * disappearing.\n *\n * @example\n * ```ts\n * // Prevent controls hiding while menu is being interacted with.\n * function onSettingsOpen() {\n * remote.pauseControls();\n * }\n *\n * function onSettingsClose() {\n * remote.resumeControls();\n * }\n * ```\n */\n pauseControls(trigger) {\n this.#dispatchRequest(\"media-pause-controls-request\", trigger);\n }\n /**\n * Dispatch a request to toggle the media playback state.\n */\n togglePaused(trigger) {\n const player = this.getPlayer(trigger?.target);\n if (!player) {\n return;\n }\n if (player.state.paused) this.play(trigger);\n else this.pause(trigger);\n }\n /**\n * Dispatch a request to toggle the controls visibility.\n */\n toggleControls(trigger) {\n const player = this.getPlayer(trigger?.target);\n if (!player) {\n return;\n }\n if (!player.controls.showing) {\n player.controls.show(0, trigger);\n } else {\n player.controls.hide(0, trigger);\n }\n }\n /**\n * Dispatch a request to toggle the media muted state.\n */\n toggleMuted(trigger) {\n const player = this.getPlayer(trigger?.target);\n if (!player) {\n return;\n }\n if (player.state.muted) this.unmute(trigger);\n else this.mute(trigger);\n }\n /**\n * Dispatch a request to toggle the media fullscreen state.\n *\n * @docs {@link https://www.vidstack.io/docs/player/api/fullscreen#remote-control}\n */\n toggleFullscreen(target, trigger) {\n const player = this.getPlayer(trigger?.target);\n if (!player) {\n return;\n }\n if (player.state.fullscreen) this.exitFullscreen(target, trigger);\n else this.enterFullscreen(target, trigger);\n }\n /**\n * Dispatch a request to toggle the media picture-in-picture mode.\n *\n * @docs {@link https://www.vidstack.io/docs/player/api/picture-in-picture#remote-control}\n */\n togglePictureInPicture(trigger) {\n const player = this.getPlayer(trigger?.target);\n if (!player) {\n return;\n }\n if (player.state.pictureInPicture) this.exitPictureInPicture(trigger);\n else this.enterPictureInPicture(trigger);\n }\n /**\n * Show captions.\n */\n showCaptions(trigger) {\n const player = this.getPlayer(trigger?.target);\n if (!player) {\n return;\n }\n let tracks = player.state.textTracks, index = this.#prevTrackIndex;\n if (!tracks[index] || !isTrackCaptionKind(tracks[index])) {\n index = -1;\n }\n if (index === -1) {\n index = tracks.findIndex((track) => isTrackCaptionKind(track) && track.default);\n }\n if (index === -1) {\n index = tracks.findIndex((track) => isTrackCaptionKind(track));\n }\n if (index >= 0) this.changeTextTrackMode(index, \"showing\", trigger);\n this.#prevTrackIndex = -1;\n }\n /**\n * Turn captions off.\n */\n disableCaptions(trigger) {\n const player = this.getPlayer(trigger?.target);\n if (!player) {\n return;\n }\n const tracks = player.state.textTracks, track = player.state.textTrack;\n if (track) {\n const index = tracks.indexOf(track);\n this.changeTextTrackMode(index, \"disabled\", trigger);\n this.#prevTrackIndex = index;\n }\n }\n /**\n * Dispatch a request to toggle the current captions mode.\n */\n toggleCaptions(trigger) {\n const player = this.getPlayer(trigger?.target);\n if (!player) {\n return;\n }\n if (player.state.textTrack) {\n this.disableCaptions();\n } else {\n this.showCaptions();\n }\n }\n userPrefersLoopChange(prefersLoop, trigger) {\n this.#dispatchRequest(\"media-user-loop-change-request\", trigger, prefersLoop);\n }\n #dispatchRequest(type, trigger, detail) {\n const request = new DOMEvent(type, {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail,\n trigger\n });\n let target = trigger?.target || null;\n if (target && target instanceof Component) target = target.el;\n const shouldUsePlayer = !target || target === document || target === window || target === document.body || this.#player?.el && target instanceof Node && !this.#player.el.contains(target);\n target = shouldUsePlayer ? this.#target ?? this.getPlayer()?.el : target ?? this.#target;\n if (this.#player) {\n if (type === \"media-play-request\" && !this.#player.state.canLoad) {\n target?.dispatchEvent(request);\n } else {\n this.#player.canPlayQueue.enqueue(type, () => target?.dispatchEvent(request));\n }\n } else {\n target?.dispatchEvent(request);\n }\n }\n #noPlayerWarning(method) {\n }\n}\n\nclass LocalMediaStorage {\n playerId = \"vds-player\";\n mediaId = null;\n #data = {\n volume: null,\n muted: null,\n audioGain: null,\n time: null,\n lang: null,\n captions: null,\n rate: null,\n quality: null\n };\n async getVolume() {\n return this.#data.volume;\n }\n async setVolume(volume) {\n this.#data.volume = volume;\n this.save();\n }\n async getMuted() {\n return this.#data.muted;\n }\n async setMuted(muted) {\n this.#data.muted = muted;\n this.save();\n }\n async getTime() {\n return this.#data.time;\n }\n async setTime(time, ended) {\n const shouldClear = time < 0;\n this.#data.time = !shouldClear ? time : null;\n if (shouldClear || ended) this.saveTime();\n else this.saveTimeThrottled();\n }\n async getLang() {\n return this.#data.lang;\n }\n async setLang(lang) {\n this.#data.lang = lang;\n this.save();\n }\n async getCaptions() {\n return this.#data.captions;\n }\n async setCaptions(enabled) {\n this.#data.captions = enabled;\n this.save();\n }\n async getPlaybackRate() {\n return this.#data.rate;\n }\n async setPlaybackRate(rate) {\n this.#data.rate = rate;\n this.save();\n }\n async getAudioGain() {\n return this.#data.audioGain;\n }\n async setAudioGain(gain) {\n this.#data.audioGain = gain;\n this.save();\n }\n async getVideoQuality() {\n return this.#data.quality;\n }\n async setVideoQuality(quality) {\n this.#data.quality = quality;\n this.save();\n }\n onChange(src, mediaId, playerId = \"vds-player\") {\n const savedData = playerId ? localStorage.getItem(playerId) : null, savedTime = mediaId ? localStorage.getItem(mediaId) : null;\n this.playerId = playerId;\n this.mediaId = mediaId;\n this.#data = {\n volume: null,\n muted: null,\n audioGain: null,\n lang: null,\n captions: null,\n rate: null,\n quality: null,\n ...savedData ? JSON.parse(savedData) : {},\n time: savedTime ? +savedTime : null\n };\n }\n save() {\n if (IS_SERVER || !this.playerId) return;\n const data = JSON.stringify({ ...this.#data, time: void 0 });\n localStorage.setItem(this.playerId, data);\n }\n saveTimeThrottled = functionThrottle(this.saveTime.bind(this), 1e3);\n saveTime() {\n if (IS_SERVER || !this.mediaId) return;\n const data = (this.#data.time ?? 0).toString();\n localStorage.setItem(this.mediaId, data);\n }\n}\n\nconst ADD = Symbol(0), REMOVE = Symbol(0), RESET = Symbol(0), SELECT = Symbol(0), READONLY = Symbol(0), SET_READONLY = Symbol(0), ON_RESET = Symbol(0), ON_REMOVE = Symbol(0), ON_USER_SELECT = Symbol(0);\nconst ListSymbol = {\n add: ADD,\n remove: REMOVE,\n reset: RESET,\n select: SELECT,\n readonly: READONLY,\n setReadonly: SET_READONLY,\n onReset: ON_RESET,\n onRemove: ON_REMOVE,\n onUserSelect: ON_USER_SELECT\n};\n\nclass List extends EventsTarget {\n items = [];\n /** @internal */\n [ListSymbol.readonly] = false;\n get length() {\n return this.items.length;\n }\n get readonly() {\n return this[ListSymbol.readonly];\n }\n /**\n * Returns the index of the first occurrence of the given item, or -1 if it is not present.\n */\n indexOf(item) {\n return this.items.indexOf(item);\n }\n /**\n * Returns an item matching the given `id`, or `null` if not present.\n */\n getById(id) {\n if (id === \"\") return null;\n return this.items.find((item) => item.id === id) ?? null;\n }\n /**\n * Transform list to an array.\n */\n toArray() {\n return [...this.items];\n }\n [Symbol.iterator]() {\n return this.items.values();\n }\n /** @internal */\n [ListSymbol.add](item, trigger) {\n const index = this.items.length;\n if (!(\"\" + index in this)) {\n Object.defineProperty(this, index, {\n get() {\n return this.items[index];\n }\n });\n }\n if (this.items.includes(item)) return;\n this.items.push(item);\n this.dispatchEvent(new DOMEvent(\"add\", { detail: item, trigger }));\n }\n /** @internal */\n [ListSymbol.remove](item, trigger) {\n const index = this.items.indexOf(item);\n if (index >= 0) {\n this[ListSymbol.onRemove]?.(item, trigger);\n this.items.splice(index, 1);\n this.dispatchEvent(new DOMEvent(\"remove\", { detail: item, trigger }));\n }\n }\n /** @internal */\n [ListSymbol.reset](trigger) {\n for (const item of [...this.items]) this[ListSymbol.remove](item, trigger);\n this.items = [];\n this[ListSymbol.setReadonly](false, trigger);\n this[ListSymbol.onReset]?.();\n }\n /** @internal */\n [ListSymbol.setReadonly](readonly, trigger) {\n if (this[ListSymbol.readonly] === readonly) return;\n this[ListSymbol.readonly] = readonly;\n this.dispatchEvent(new DOMEvent(\"readonly-change\", { detail: readonly, trigger }));\n }\n}\n\nconst SELECTED = Symbol(0);\nclass SelectList extends List {\n get selected() {\n return this.items.find((item) => item.selected) ?? null;\n }\n get selectedIndex() {\n return this.items.findIndex((item) => item.selected);\n }\n /** @internal */\n [ListSymbol.onRemove](item, trigger) {\n this[ListSymbol.select](item, false, trigger);\n }\n /** @internal */\n [ListSymbol.add](item, trigger) {\n item[SELECTED] = false;\n Object.defineProperty(item, \"selected\", {\n get() {\n return this[SELECTED];\n },\n set: (selected) => {\n if (this.readonly) return;\n this[ListSymbol.onUserSelect]?.();\n this[ListSymbol.select](item, selected);\n }\n });\n super[ListSymbol.add](item, trigger);\n }\n /** @internal */\n [ListSymbol.select](item, selected, trigger) {\n if (selected === item?.[SELECTED]) return;\n const prev = this.selected;\n if (item) item[SELECTED] = selected;\n const changed = !selected ? prev === item : prev !== item;\n if (changed) {\n if (prev) prev[SELECTED] = false;\n this.dispatchEvent(\n new DOMEvent(\"change\", {\n detail: {\n prev,\n current: this.selected\n },\n trigger\n })\n );\n }\n }\n}\n\nclass AudioTrackList extends SelectList {\n}\n\nfunction round(num, decimalPlaces = 2) {\n return Number(num.toFixed(decimalPlaces));\n}\nfunction getNumberOfDecimalPlaces(num) {\n return String(num).split(\".\")[1]?.length ?? 0;\n}\nfunction clampNumber(min, value, max) {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction isEventInside(el, event) {\n const target = event.composedPath()[0];\n return isDOMNode(target) && el.contains(target);\n}\nconst rafJobs = /* @__PURE__ */ new Set();\nif (!IS_SERVER) {\n let processJobs = function() {\n for (const job of rafJobs) {\n try {\n job();\n } catch (e) {\n }\n }\n window.requestAnimationFrame(processJobs);\n };\n processJobs();\n}\nfunction scheduleRafJob(job) {\n rafJobs.add(job);\n return () => rafJobs.delete(job);\n}\nfunction setAttributeIfEmpty(target, name, value) {\n if (!target.hasAttribute(name)) target.setAttribute(name, value);\n}\nfunction setARIALabel(target, $label) {\n if (target.hasAttribute(\"aria-label\") || target.hasAttribute(\"data-no-label\")) return;\n if (!isFunction($label)) {\n setAttribute(target, \"aria-label\", $label);\n return;\n }\n function updateAriaDescription() {\n setAttribute(target, \"aria-label\", $label());\n }\n if (IS_SERVER) updateAriaDescription();\n else effect(updateAriaDescription);\n}\nfunction isElementVisible(el) {\n const style = getComputedStyle(el);\n return style.display !== \"none\" && parseInt(style.opacity) > 0;\n}\nfunction checkVisibility(el) {\n return !!el && (\"checkVisibility\" in el ? el.checkVisibility({ checkOpacity: true, checkVisibilityCSS: true }) : isElementVisible(el));\n}\nfunction observeVisibility(el, callback) {\n return scheduleRafJob(() => callback(checkVisibility(el)));\n}\nfunction isElementParent(owner, node, test) {\n while (node) {\n if (node === owner) {\n return true;\n } else if (test?.(node)) {\n break;\n } else {\n node = node.parentElement;\n }\n }\n return false;\n}\nfunction onPress(target, handler) {\n return new EventsController(target).add(\"pointerup\", (event) => {\n if (event.button === 0 && !event.defaultPrevented) handler(event);\n }).add(\"keydown\", (event) => {\n if (isKeyboardClick(event)) handler(event);\n });\n}\nfunction isTouchPinchEvent(event) {\n return isTouchEvent(event) && (event.touches.length > 1 || event.changedTouches.length > 1);\n}\nfunction requestScopedAnimationFrame(callback) {\n if (IS_SERVER) return callback();\n let scope = getScope(), id = window.requestAnimationFrame(() => {\n scoped(callback, scope);\n id = -1;\n });\n return () => void window.cancelAnimationFrame(id);\n}\nfunction autoPlacement(el, trigger, placement, {\n offsetVarName,\n xOffset,\n yOffset,\n ...options\n}) {\n if (!el) return;\n const floatingPlacement = placement.replace(\" \", \"-\").replace(\"-center\", \"\");\n setStyle(el, \"visibility\", !trigger ? \"hidden\" : null);\n if (!trigger) return;\n let isTop = placement.includes(\"top\");\n const negateX = (x) => placement.includes(\"left\") ? `calc(-1 * ${x})` : x, negateY = (y) => isTop ? `calc(-1 * ${y})` : y;\n return autoUpdate(trigger, el, () => {\n computePosition(trigger, el, {\n placement: floatingPlacement,\n middleware: [\n ...options.middleware ?? [],\n flip({ fallbackAxisSideDirection: \"start\", crossAxis: false }),\n shift()\n ],\n ...options\n }).then(({ x, y, middlewareData }) => {\n const hasFlipped = !!middlewareData.flip?.index;\n isTop = placement.includes(hasFlipped ? \"bottom\" : \"top\");\n el.setAttribute(\n \"data-placement\",\n hasFlipped ? placement.startsWith(\"top\") ? placement.replace(\"top\", \"bottom\") : placement.replace(\"bottom\", \"top\") : placement\n );\n Object.assign(el.style, {\n top: `calc(${y + \"px\"} + ${negateY(\n yOffset ? yOffset + \"px\" : `var(--${offsetVarName}-y-offset, 0px)`\n )})`,\n left: `calc(${x + \"px\"} + ${negateX(\n xOffset ? xOffset + \"px\" : `var(--${offsetVarName}-x-offset, 0px)`\n )})`\n });\n });\n });\n}\nfunction hasAnimation(el) {\n const styles = getComputedStyle(el);\n return styles.animationName !== \"none\";\n}\nfunction isHTMLElement(el) {\n return el instanceof HTMLElement;\n}\n\nclass NativeTextRenderer {\n priority = 0;\n #display = true;\n #video = null;\n #track = null;\n #tracks = /* @__PURE__ */ new Set();\n canRender(_, video) {\n return !!video;\n }\n attach(video) {\n this.#video = video;\n if (video) video.textTracks.onchange = this.#onChange.bind(this);\n }\n addTrack(track) {\n this.#tracks.add(track);\n this.#attachTrack(track);\n }\n removeTrack(track) {\n track[TextTrackSymbol.native]?.remove?.();\n track[TextTrackSymbol.native] = null;\n this.#tracks.delete(track);\n }\n changeTrack(track) {\n const current = track?.[TextTrackSymbol.native];\n if (current && current.track.mode !== \"showing\") {\n current.track.mode = \"showing\";\n }\n this.#track = track;\n }\n setDisplay(display) {\n this.#display = display;\n this.#onChange();\n }\n detach() {\n if (this.#video) this.#video.textTracks.onchange = null;\n for (const track of this.#tracks) this.removeTrack(track);\n this.#tracks.clear();\n this.#video = null;\n this.#track = null;\n }\n #attachTrack(track) {\n if (!this.#video) return;\n const el = track[TextTrackSymbol.native] ??= this.#createTrackElement(track);\n if (isHTMLElement(el)) {\n this.#video.append(el);\n el.track.mode = el.default ? \"showing\" : \"disabled\";\n }\n }\n #createTrackElement(track) {\n const el = document.createElement(\"track\"), isDefault = track.default || track.mode === \"showing\", isSupported = track.src && track.type === \"vtt\";\n el.id = track.id;\n el.src = isSupported ? track.src : \"\";\n el.label = track.label;\n el.kind = track.kind;\n el.default = isDefault;\n track.language && (el.srclang = track.language);\n if (isDefault && !isSupported) {\n this.#copyCues(track, el.track);\n }\n return el;\n }\n #copyCues(track, native) {\n if (track.src && track.type === \"vtt\" || native.cues?.length) return;\n for (const cue of track.cues) native.addCue(cue);\n }\n #onChange(event) {\n for (const track of this.#tracks) {\n const native = track[TextTrackSymbol.native];\n if (!native) continue;\n if (!this.#display) {\n native.track.mode = native.managed ? \"hidden\" : \"disabled\";\n continue;\n }\n const isShowing = native.track.mode === \"showing\";\n if (isShowing) this.#copyCues(track, native.track);\n track.setMode(isShowing ? \"showing\" : \"disabled\", event);\n }\n }\n}\n\nclass TextRenderers {\n #video = null;\n #textTracks;\n #renderers = [];\n #media;\n #nativeDisplay = false;\n #nativeRenderer = null;\n #customRenderer = null;\n constructor(media) {\n this.#media = media;\n const textTracks = media.textTracks;\n this.#textTracks = textTracks;\n effect(this.#watchControls.bind(this));\n onDispose(this.#detach.bind(this));\n new EventsController(textTracks).add(\"add\", this.#onAddTrack.bind(this)).add(\"remove\", this.#onRemoveTrack.bind(this)).add(\"mode-change\", this.#update.bind(this));\n }\n #watchControls() {\n const { nativeControls } = this.#media.$state;\n this.#nativeDisplay = nativeControls();\n this.#update();\n }\n add(renderer) {\n this.#renderers.push(renderer);\n untrack(this.#update.bind(this));\n }\n remove(renderer) {\n renderer.detach();\n this.#renderers.splice(this.#renderers.indexOf(renderer), 1);\n untrack(this.#update.bind(this));\n }\n /** @internal */\n attachVideo(video) {\n requestAnimationFrame(() => {\n this.#video = video;\n if (video) {\n this.#nativeRenderer = new NativeTextRenderer();\n this.#nativeRenderer.attach(video);\n for (const track of this.#textTracks) this.#addNativeTrack(track);\n }\n this.#update();\n });\n }\n #addNativeTrack(track) {\n if (!isTrackCaptionKind(track)) return;\n this.#nativeRenderer?.addTrack(track);\n }\n #removeNativeTrack(track) {\n if (!isTrackCaptionKind(track)) return;\n this.#nativeRenderer?.removeTrack(track);\n }\n #onAddTrack(event) {\n this.#addNativeTrack(event.detail);\n }\n #onRemoveTrack(event) {\n this.#removeNativeTrack(event.detail);\n }\n #update() {\n const currentTrack = this.#textTracks.selected;\n if (this.#video && (this.#nativeDisplay || currentTrack?.[TextTrackSymbol.nativeHLS])) {\n this.#customRenderer?.changeTrack(null);\n this.#nativeRenderer?.setDisplay(true);\n this.#nativeRenderer?.changeTrack(currentTrack);\n return;\n }\n this.#nativeRenderer?.setDisplay(false);\n this.#nativeRenderer?.changeTrack(null);\n if (!currentTrack) {\n this.#customRenderer?.changeTrack(null);\n return;\n }\n const customRenderer = this.#renderers.sort((a, b) => a.priority - b.priority).find((renderer) => renderer.canRender(currentTrack, this.#video));\n if (this.#customRenderer !== customRenderer) {\n this.#customRenderer?.detach();\n customRenderer?.attach(this.#video);\n this.#customRenderer = customRenderer ?? null;\n }\n customRenderer?.changeTrack(currentTrack);\n }\n #detach() {\n this.#nativeRenderer?.detach();\n this.#nativeRenderer = null;\n this.#customRenderer?.detach();\n this.#customRenderer = null;\n }\n}\n\nclass TextTrackList extends List {\n #canLoad = false;\n #defaults = {};\n #storage = null;\n #preferredLang = null;\n /** @internal */\n [TextTrackSymbol.crossOrigin];\n constructor() {\n super();\n }\n get selected() {\n const track = this.items.find((t) => t.mode === \"showing\" && isTrackCaptionKind(t));\n return track ?? null;\n }\n get selectedIndex() {\n const selected = this.selected;\n return selected ? this.indexOf(selected) : -1;\n }\n get preferredLang() {\n return this.#preferredLang;\n }\n set preferredLang(lang) {\n this.#preferredLang = lang;\n this.#saveLang(lang);\n }\n add(init, trigger) {\n const isTrack = init instanceof TextTrack, track = isTrack ? init : new TextTrack(init), kind = init.kind === \"captions\" || init.kind === \"subtitles\" ? \"captions\" : init.kind;\n if (this.#defaults[kind] && init.default) delete init.default;\n track.addEventListener(\"mode-change\", this.#onTrackModeChangeBind);\n this[ListSymbol.add](track, trigger);\n track[TextTrackSymbol.crossOrigin] = this[TextTrackSymbol.crossOrigin];\n if (this.#canLoad) track[TextTrackSymbol.canLoad]();\n if (init.default) this.#defaults[kind] = track;\n this.#selectTracks();\n return this;\n }\n remove(track, trigger) {\n this.#pendingRemoval = track;\n if (!this.items.includes(track)) return;\n if (track === this.#defaults[track.kind]) delete this.#defaults[track.kind];\n track.mode = \"disabled\";\n track[TextTrackSymbol.onModeChange] = null;\n track.removeEventListener(\"mode-change\", this.#onTrackModeChangeBind);\n this[ListSymbol.remove](track, trigger);\n this.#pendingRemoval = null;\n return this;\n }\n clear(trigger) {\n for (const track of [...this.items]) {\n this.remove(track, trigger);\n }\n return this;\n }\n getByKind(kind) {\n const kinds = Array.isArray(kind) ? kind : [kind];\n return this.items.filter((track) => kinds.includes(track.kind));\n }\n /** @internal */\n [TextTrackSymbol.canLoad]() {\n if (this.#canLoad) return;\n for (const track of this.items) track[TextTrackSymbol.canLoad]();\n this.#canLoad = true;\n this.#selectTracks();\n }\n #selectTracks = functionDebounce(async () => {\n if (!this.#canLoad) return;\n if (!this.#preferredLang && this.#storage) {\n this.#preferredLang = await this.#storage.getLang();\n }\n const showCaptions = await this.#storage?.getCaptions(), kinds = [\n [\"captions\", \"subtitles\"],\n \"chapters\",\n \"descriptions\",\n \"metadata\"\n ];\n for (const kind of kinds) {\n const tracks = this.getByKind(kind);\n if (tracks.find((t) => t.mode === \"showing\")) continue;\n const preferredTrack = this.#preferredLang ? tracks.find((track2) => track2.language === this.#preferredLang) : null;\n const defaultTrack = isArray(kind) ? this.#defaults[kind.find((kind2) => this.#defaults[kind2]) || \"\"] : this.#defaults[kind];\n const track = preferredTrack ?? defaultTrack, isCaptionsKind = track && isTrackCaptionKind(track);\n if (track && (!isCaptionsKind || showCaptions !== false)) {\n track.mode = \"showing\";\n if (isCaptionsKind) this.#saveCaptionsTrack(track);\n }\n }\n }, 300);\n #pendingRemoval = null;\n #onTrackModeChangeBind = this.#onTrackModeChange.bind(this);\n #onTrackModeChange(event) {\n const track = event.detail;\n if (this.#storage && isTrackCaptionKind(track) && track !== this.#pendingRemoval) {\n this.#saveCaptionsTrack(track);\n }\n if (track.mode === \"showing\") {\n const kinds = isTrackCaptionKind(track) ? [\"captions\", \"subtitles\"] : [track.kind];\n for (const t of this.items) {\n if (t.mode === \"showing\" && t != track && kinds.includes(t.kind)) {\n t.mode = \"disabled\";\n }\n }\n }\n this.dispatchEvent(\n new DOMEvent(\"mode-change\", {\n detail: event.detail,\n trigger: event\n })\n );\n }\n #saveCaptionsTrack(track) {\n if (track.mode !== \"disabled\") {\n this.#saveLang(track.language);\n }\n this.#storage?.setCaptions?.(track.mode === \"showing\");\n }\n #saveLang(lang) {\n this.#storage?.setLang?.(this.#preferredLang = lang);\n }\n setStorage(storage) {\n this.#storage = storage;\n }\n}\n\nconst SET_AUTO = Symbol(0), ENABLE_AUTO = Symbol(0);\nconst QualitySymbol = {\n setAuto: SET_AUTO,\n enableAuto: ENABLE_AUTO\n};\n\nclass VideoQualityList extends SelectList {\n #auto = false;\n /**\n * Configures quality switching:\n *\n * - `current`: Trigger an immediate quality level switch. This will abort the current fragment\n * request if any, flush the whole buffer, and fetch fragment matching with current position\n * and requested quality level.\n *\n * - `next`: Trigger a quality level switch for next fragment. This could eventually flush\n * already buffered next fragment.\n *\n * - `load`: Set quality level for next loaded fragment.\n *\n * @see {@link https://www.vidstack.io/docs/player/api/video-quality#switch}\n * @see {@link https://github.com/video-dev/hls.js/blob/master/docs/API.md#quality-switch-control-api}\n */\n switch = \"current\";\n /**\n * Whether automatic quality selection is enabled.\n */\n get auto() {\n return this.#auto || this.readonly;\n }\n /** @internal */\n [QualitySymbol.enableAuto];\n /** @internal */\n [ListSymbol.onUserSelect]() {\n this[QualitySymbol.setAuto](false);\n }\n /** @internal */\n [ListSymbol.onReset](trigger) {\n this[QualitySymbol.enableAuto] = void 0;\n this[QualitySymbol.setAuto](false, trigger);\n }\n /**\n * Request automatic quality selection (if supported). This will be a no-op if the list is\n * `readonly` as that already implies auto-selection.\n */\n autoSelect(trigger) {\n if (this.readonly || this.#auto || !this[QualitySymbol.enableAuto]) return;\n this[QualitySymbol.enableAuto]?.(trigger);\n this[QualitySymbol.setAuto](true, trigger);\n }\n getBySrc(src) {\n return this.items.find((quality) => quality.src === src);\n }\n /** @internal */\n [QualitySymbol.setAuto](auto, trigger) {\n if (this.#auto === auto) return;\n this.#auto = auto;\n this.dispatchEvent(\n new DOMEvent(\"auto-change\", {\n detail: auto,\n trigger\n })\n );\n }\n}\n\nfunction sortVideoQualities(qualities, desc) {\n return [...qualities].sort(desc ? compareVideoQualityDesc : compareVideoQualityAsc);\n}\nfunction compareVideoQualityAsc(a, b) {\n return a.height === b.height ? (a.bitrate ?? 0) - (b.bitrate ?? 0) : a.height - b.height;\n}\nfunction compareVideoQualityDesc(a, b) {\n return b.height === a.height ? (b.bitrate ?? 0) - (a.bitrate ?? 0) : b.height - a.height;\n}\n\nfunction isAudioProvider(provider) {\n return provider?.$$PROVIDER_TYPE === \"AUDIO\";\n}\nfunction isVideoProvider(provider) {\n return provider?.$$PROVIDER_TYPE === \"VIDEO\";\n}\nfunction isHLSProvider(provider) {\n return provider?.$$PROVIDER_TYPE === \"HLS\";\n}\nfunction isDASHProvider(provider) {\n return provider?.$$PROVIDER_TYPE === \"DASH\";\n}\nfunction isYouTubeProvider(provider) {\n return provider?.$$PROVIDER_TYPE === \"YOUTUBE\";\n}\nfunction isVimeoProvider(provider) {\n return provider?.$$PROVIDER_TYPE === \"VIMEO\";\n}\nfunction isGoogleCastProvider(provider) {\n return provider?.$$PROVIDER_TYPE === \"GOOGLE_CAST\";\n}\nfunction isHTMLAudioElement(element) {\n return !IS_SERVER && element instanceof HTMLAudioElement;\n}\nfunction isHTMLVideoElement(element) {\n return !IS_SERVER && element instanceof HTMLVideoElement;\n}\nfunction isHTMLMediaElement(element) {\n return isHTMLAudioElement(element) || isHTMLVideoElement(element);\n}\nfunction isHTMLIFrameElement(element) {\n return !IS_SERVER && element instanceof HTMLIFrameElement;\n}\n\nclass MediaPlayerController extends ViewController {\n}\n\nconst MEDIA_KEY_SHORTCUTS = {\n togglePaused: \"k Space\",\n toggleMuted: \"m\",\n toggleFullscreen: \"f\",\n togglePictureInPicture: \"i\",\n toggleCaptions: \"c\",\n seekBackward: \"j J ArrowLeft\",\n seekForward: \"l L ArrowRight\",\n volumeUp: \"ArrowUp\",\n volumeDown: \"ArrowDown\",\n speedUp: \">\",\n slowDown: \"<\"\n};\nconst MODIFIER_KEYS = /* @__PURE__ */ new Set([\"Shift\", \"Alt\", \"Meta\", \"Ctrl\"]), BUTTON_SELECTORS = 'button, [role=\"button\"]', IGNORE_SELECTORS = 'input, textarea, select, [contenteditable], [role^=\"menuitem\"], [role=\"timer\"]';\nclass MediaKeyboardController extends MediaPlayerController {\n #media;\n constructor(media) {\n super();\n this.#media = media;\n }\n onConnect() {\n effect(this.#onTargetChange.bind(this));\n }\n #onTargetChange() {\n const { keyDisabled, keyTarget } = this.$props;\n if (keyDisabled()) return;\n const target = keyTarget() === \"player\" ? this.el : document, $active = signal(false);\n if (target === this.el) {\n new EventsController(this.el).add(\"focusin\", () => $active.set(true)).add(\"focusout\", (event) => {\n if (!this.el.contains(event.target)) $active.set(false);\n });\n } else {\n if (!peek($active)) $active.set(document.querySelector(\"[data-media-player]\") === this.el);\n listenEvent(document, \"focusin\", (event) => {\n const activePlayer = event.composedPath().find((el) => el instanceof Element && el.localName === \"media-player\");\n if (activePlayer !== void 0) $active.set(this.el === activePlayer);\n });\n }\n effect(() => {\n if (!$active()) return;\n new EventsController(target).add(\"keyup\", this.#onKeyUp.bind(this)).add(\"keydown\", this.#onKeyDown.bind(this)).add(\"keydown\", this.#onPreventVideoKeys.bind(this), { capture: true });\n });\n }\n #onKeyUp(event) {\n const focusedEl = document.activeElement;\n if (!event.key || !this.$state.canSeek() || focusedEl?.matches(IGNORE_SELECTORS)) {\n return;\n }\n let { method, value } = this.#getMatchingMethod(event);\n if (!isString(value) && !isArray(value)) {\n value?.onKeyUp?.({\n event,\n player: this.#media.player,\n remote: this.#media.remote\n });\n value?.callback?.(event, this.#media.remote);\n return;\n }\n if (method?.startsWith(\"seek\")) {\n event.preventDefault();\n event.stopPropagation();\n if (this.#timeSlider) {\n this.#forwardTimeKeyboardEvent(event, method === \"seekForward\");\n this.#timeSlider = null;\n } else {\n this.#media.remote.seek(this.#seekTotal, event);\n this.#seekTotal = void 0;\n }\n }\n if (method?.startsWith(\"volume\")) {\n const volumeSlider = this.el.querySelector(\"[data-media-volume-slider]\");\n volumeSlider?.dispatchEvent(\n new KeyboardEvent(\"keyup\", {\n key: method === \"volumeUp\" ? \"Up\" : \"Down\",\n shiftKey: event.shiftKey,\n trigger: event\n })\n );\n }\n }\n #onKeyDown(event) {\n if (!event.key || MODIFIER_KEYS.has(event.key)) return;\n const focusedEl = document.activeElement;\n if (focusedEl?.matches(IGNORE_SELECTORS) || isKeyboardClick(event) && focusedEl?.matches(BUTTON_SELECTORS)) {\n return;\n }\n let { method, value } = this.#getMatchingMethod(event), isNumberPress = !event.metaKey && /^[0-9]$/.test(event.key);\n if (!isString(value) && !isArray(value) && !isNumberPress) {\n value?.onKeyDown?.({\n event,\n player: this.#media.player,\n remote: this.#media.remote\n });\n value?.callback?.(event, this.#media.remote);\n return;\n }\n if (!method && isNumberPress && !modifierKeyPressed(event)) {\n event.preventDefault();\n event.stopPropagation();\n this.#media.remote.seek(this.$state.duration() / 10 * Number(event.key), event);\n return;\n }\n if (!method) return;\n event.preventDefault();\n event.stopPropagation();\n switch (method) {\n case \"seekForward\":\n case \"seekBackward\":\n this.#seeking(event, method, method === \"seekForward\");\n break;\n case \"volumeUp\":\n case \"volumeDown\":\n const volumeSlider = this.el.querySelector(\"[data-media-volume-slider]\");\n if (volumeSlider) {\n volumeSlider.dispatchEvent(\n new KeyboardEvent(\"keydown\", {\n key: method === \"volumeUp\" ? \"Up\" : \"Down\",\n shiftKey: event.shiftKey,\n trigger: event\n })\n );\n } else {\n const value2 = event.shiftKey ? 0.1 : 0.05;\n this.#media.remote.changeVolume(\n this.$state.volume() + (method === \"volumeUp\" ? +value2 : -value2),\n event\n );\n }\n break;\n case \"toggleFullscreen\":\n this.#media.remote.toggleFullscreen(\"prefer-media\", event);\n break;\n case \"speedUp\":\n case \"slowDown\":\n const playbackRate = this.$state.playbackRate();\n this.#media.remote.changePlaybackRate(\n Math.max(0.25, Math.min(2, playbackRate + (method === \"speedUp\" ? 0.25 : -0.25))),\n event\n );\n break;\n default:\n this.#media.remote[method]?.(event);\n }\n this.$state.lastKeyboardAction.set({\n action: method,\n event\n });\n }\n #onPreventVideoKeys(event) {\n if (isHTMLMediaElement(event.target) && this.#getMatchingMethod(event).method) {\n event.preventDefault();\n }\n }\n #getMatchingMethod(event) {\n const keyShortcuts = {\n ...this.$props.keyShortcuts(),\n ...this.#media.ariaKeys\n };\n const method = Object.keys(keyShortcuts).find((method2) => {\n const value = keyShortcuts[method2], keys = isArray(value) ? value.join(\" \") : isString(value) ? value : value?.keys;\n const combinations = (isArray(keys) ? keys : keys?.split(\" \"))?.map(\n (key) => replaceSymbolKeys(key).replace(/Control/g, \"Ctrl\").split(\"+\")\n );\n return combinations?.some((combo) => {\n const modifierKeys = new Set(combo.filter((key) => MODIFIER_KEYS.has(key)));\n for (const modKey of MODIFIER_KEYS) {\n const modKeyProp = modKey.toLowerCase() + \"Key\";\n if (!modifierKeys.has(modKey) && event[modKeyProp]) {\n return false;\n }\n }\n return combo.every((key) => {\n return MODIFIER_KEYS.has(key) ? event[key.toLowerCase() + \"Key\"] : event.key === key.replace(\"Space\", \" \");\n });\n });\n });\n return {\n method,\n value: method ? keyShortcuts[method] : null\n };\n }\n #seekTotal;\n #calcSeekAmount(event, type) {\n const seekBy = event.shiftKey ? 10 : 5;\n return this.#seekTotal = Math.max(\n 0,\n Math.min(\n (this.#seekTotal ?? this.$state.currentTime()) + (type === \"seekForward\" ? +seekBy : -seekBy),\n this.$state.duration()\n )\n );\n }\n #timeSlider = null;\n #forwardTimeKeyboardEvent(event, forward) {\n this.#timeSlider?.dispatchEvent(\n new KeyboardEvent(event.type, {\n key: !forward ? \"Left\" : \"Right\",\n shiftKey: event.shiftKey,\n trigger: event\n })\n );\n }\n #seeking(event, type, forward) {\n if (!this.$state.canSeek()) return;\n if (!this.#timeSlider) {\n this.#timeSlider = this.el.querySelector(\"[data-media-time-slider]\");\n }\n if (this.#timeSlider) {\n this.#forwardTimeKeyboardEvent(event, forward);\n } else {\n this.#media.remote.seeking(this.#calcSeekAmount(event, type), event);\n }\n }\n}\nconst SYMBOL_KEY_MAP = [\"!\", \"@\", \"#\", \"$\", \"%\", \"^\", \"&\", \"*\", \"(\", \")\"];\nfunction replaceSymbolKeys(key) {\n return key.replace(/Shift\\+(\\d)/g, (_, num) => SYMBOL_KEY_MAP[num - 1]);\n}\nfunction modifierKeyPressed(event) {\n for (const key of MODIFIER_KEYS) {\n if (event[key.toLowerCase() + \"Key\"]) {\n return true;\n }\n }\n return false;\n}\n\nclass ARIAKeyShortcuts extends ViewController {\n #shortcut;\n constructor(shortcut) {\n super();\n this.#shortcut = shortcut;\n }\n onAttach(el) {\n const { $props, ariaKeys } = useMediaContext(), keys = el.getAttribute(\"aria-keyshortcuts\");\n if (keys) {\n ariaKeys[this.#shortcut] = keys;\n if (!IS_SERVER) {\n onDispose(() => {\n delete ariaKeys[this.#shortcut];\n });\n }\n return;\n }\n const shortcuts = $props.keyShortcuts()[this.#shortcut];\n if (shortcuts) {\n const keys2 = isArray(shortcuts) ? shortcuts.join(\" \") : isString(shortcuts) ? shortcuts : shortcuts?.keys;\n el.setAttribute(\"aria-keyshortcuts\", isArray(keys2) ? keys2.join(\" \") : keys2);\n }\n }\n}\n\nclass MediaControls extends MediaPlayerController {\n #idleTimer = -2;\n #pausedTracking = false;\n #hideOnMouseLeave = signal(false);\n #isMouseOutside = signal(false);\n #focusedItem = null;\n #canIdle = signal(true);\n /**\n * The default amount of delay in milliseconds while media playback is progressing without user\n * activity to indicate an idle state (i.e., hide controls).\n *\n * @defaultValue 2000\n */\n defaultDelay = 2e3;\n /**\n * Whether controls can hide after a delay in user interaction. If this is false, controls will\n * not hide and be user controlled.\n */\n get canIdle() {\n return this.#canIdle();\n }\n set canIdle(canIdle) {\n this.#canIdle.set(canIdle);\n }\n /**\n * Whether controls visibility should be toggled when the mouse enters and leaves the player\n * container.\n *\n * @defaultValue false\n */\n get hideOnMouseLeave() {\n const { hideControlsOnMouseLeave } = this.$props;\n return this.#hideOnMouseLeave() || hideControlsOnMouseLeave();\n }\n set hideOnMouseLeave(hide) {\n this.#hideOnMouseLeave.set(hide);\n }\n /**\n * Whether media controls are currently visible.\n */\n get showing() {\n return this.$state.controlsVisible();\n }\n /**\n * Show controls.\n */\n show(delay = 0, trigger) {\n this.#clearIdleTimer();\n if (!this.#pausedTracking) {\n this.#changeVisibility(true, delay, trigger);\n }\n }\n /**\n * Hide controls.\n */\n hide(delay = this.defaultDelay, trigger) {\n this.#clearIdleTimer();\n if (!this.#pausedTracking) {\n this.#changeVisibility(false, delay, trigger);\n }\n }\n /**\n * Whether all idle tracking on controls should be paused until resumed again.\n */\n pause(trigger) {\n this.#pausedTracking = true;\n this.#clearIdleTimer();\n this.#changeVisibility(true, 0, trigger);\n }\n resume(trigger) {\n this.#pausedTracking = false;\n if (this.$state.paused()) return;\n this.#changeVisibility(false, this.defaultDelay, trigger);\n }\n onConnect() {\n effect(this.#init.bind(this));\n }\n #init() {\n const { viewType } = this.$state;\n if (!this.el || !this.#canIdle()) return;\n if (viewType() === \"audio\") {\n this.show();\n return;\n }\n effect(this.#watchMouse.bind(this));\n effect(this.#watchPaused.bind(this));\n const onPlay = this.#onPlay.bind(this), onPause = this.#onPause.bind(this), onEnd = this.#onEnd.bind(this);\n new EventsController(this.el).add(\"can-play\", (event) => this.show(0, event)).add(\"play\", onPlay).add(\"pause\", onPause).add(\"end\", onEnd).add(\"auto-play-fail\", onPause);\n }\n #watchMouse() {\n if (!this.el) return;\n const { started, pointer, paused } = this.$state;\n if (!started() || pointer() !== \"fine\") return;\n const events = new EventsController(this.el), shouldHideOnMouseLeave = this.hideOnMouseLeave;\n if (!shouldHideOnMouseLeave || !this.#isMouseOutside()) {\n effect(() => {\n if (!paused()) events.add(\"pointermove\", this.#onStopIdle.bind(this));\n });\n }\n if (shouldHideOnMouseLeave) {\n events.add(\"mouseenter\", this.#onMouseEnter.bind(this)).add(\"mouseleave\", this.#onMouseLeave.bind(this));\n }\n }\n #watchPaused() {\n const { paused, started, autoPlayError } = this.$state;\n if (paused() || autoPlayError() && !started()) return;\n const onStopIdle = this.#onStopIdle.bind(this);\n effect(() => {\n if (!this.el) return;\n const pointer = this.$state.pointer(), isTouch = pointer === \"coarse\", events = new EventsController(this.el), eventTypes = [isTouch ? \"touchend\" : \"pointerup\", \"keydown\"];\n for (const eventType of eventTypes) {\n events.add(eventType, onStopIdle, { passive: false });\n }\n });\n }\n #onPlay(event) {\n if (event.triggers.hasType(\"ended\")) return;\n this.show(0, event);\n this.hide(void 0, event);\n }\n #onPause(event) {\n this.show(0, event);\n }\n #onEnd(event) {\n const { loop } = this.$state;\n if (loop()) this.hide(0, event);\n }\n #onMouseEnter(event) {\n this.#isMouseOutside.set(false);\n this.show(0, event);\n this.hide(void 0, event);\n }\n #onMouseLeave(event) {\n this.#isMouseOutside.set(true);\n this.hide(0, event);\n }\n #clearIdleTimer() {\n window.clearTimeout(this.#idleTimer);\n this.#idleTimer = -1;\n }\n #onStopIdle(event) {\n if (\n // @ts-expect-error\n event.MEDIA_GESTURE || this.#pausedTracking || isTouchPinchEvent(event)\n ) {\n return;\n }\n if (isKeyboardEvent(event)) {\n if (event.key === \"Escape\") {\n this.el?.focus();\n this.#focusedItem = null;\n } else if (this.#focusedItem) {\n event.preventDefault();\n requestAnimationFrame(() => {\n this.#focusedItem?.focus();\n this.#focusedItem = null;\n });\n }\n }\n this.show(0, event);\n this.hide(this.defaultDelay, event);\n }\n #changeVisibility(visible, delay, trigger) {\n if (delay === 0) {\n this.#onChange(visible, trigger);\n return;\n }\n this.#idleTimer = window.setTimeout(() => {\n if (!this.scope) return;\n this.#onChange(visible && !this.#pausedTracking, trigger);\n }, delay);\n }\n #onChange(visible, trigger) {\n if (this.$state.controlsVisible() === visible) return;\n this.$state.controlsVisible.set(visible);\n if (!visible && document.activeElement && this.el?.contains(document.activeElement)) {\n this.#focusedItem = document.activeElement;\n requestAnimationFrame(() => {\n this.el?.focus({ preventScroll: true });\n });\n }\n this.dispatch(\"controls-change\", {\n detail: visible,\n trigger\n });\n }\n}\n\nconst CAN_FULLSCREEN = fscreen.fullscreenEnabled;\nclass FullscreenController extends ViewController {\n /**\n * Tracks whether we're the active fullscreen event listener. Fullscreen events can only be\n * listened to globally on the document so we need to know if they relate to the current host\n * element or not.\n */\n #listening = false;\n #active = false;\n get active() {\n return this.#active;\n }\n get supported() {\n return CAN_FULLSCREEN;\n }\n onConnect() {\n new EventsController(fscreen).add(\"fullscreenchange\", this.#onChange.bind(this)).add(\"fullscreenerror\", this.#onError.bind(this));\n onDispose(this.#onDisconnect.bind(this));\n }\n async #onDisconnect() {\n if (CAN_FULLSCREEN) await this.exit();\n }\n #onChange(event) {\n const active = isFullscreen(this.el);\n if (active === this.#active) return;\n if (!active) this.#listening = false;\n this.#active = active;\n this.dispatch(\"fullscreen-change\", { detail: active, trigger: event });\n }\n #onError(event) {\n if (!this.#listening) return;\n this.dispatch(\"fullscreen-error\", { detail: null, trigger: event });\n this.#listening = false;\n }\n async enter() {\n try {\n this.#listening = true;\n if (!this.el || isFullscreen(this.el)) return;\n assertFullscreenAPI();\n return fscreen.requestFullscreen(this.el);\n } catch (error) {\n this.#listening = false;\n throw error;\n }\n }\n async exit() {\n if (!this.el || !isFullscreen(this.el)) return;\n assertFullscreenAPI();\n return fscreen.exitFullscreen();\n }\n}\nfunction canFullscreen() {\n return CAN_FULLSCREEN;\n}\nfunction isFullscreen(host) {\n if (fscreen.fullscreenElement === host) return true;\n try {\n return host.matches(\n // @ts-expect-error - `fullscreenPseudoClass` is missing from `@types/fscreen`.\n fscreen.fullscreenPseudoClass\n );\n } catch (error) {\n return false;\n }\n}\nfunction assertFullscreenAPI() {\n if (CAN_FULLSCREEN) return;\n throw Error(\n \"[vidstack] no fullscreen API\"\n );\n}\n\nclass ScreenOrientationController extends ViewController {\n #type = signal(this.#getScreenOrientation());\n #locked = signal(false);\n #currentLock;\n /**\n * The current screen orientation type.\n *\n * @signal\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/ScreenOrientation}\n * @see https://w3c.github.io/screen-orientation/#screen-orientation-types-and-locks\n */\n get type() {\n return this.#type();\n }\n /**\n * Whether the screen orientation is currently locked.\n *\n * @signal\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/ScreenOrientation}\n * @see https://w3c.github.io/screen-orientation/#screen-orientation-types-and-locks\n */\n get locked() {\n return this.#locked();\n }\n /**\n * Whether the viewport is in a portrait orientation.\n *\n * @signal\n */\n get portrait() {\n return this.#type().startsWith(\"portrait\");\n }\n /**\n * Whether the viewport is in a landscape orientation.\n *\n * @signal\n */\n get landscape() {\n return this.#type().startsWith(\"landscape\");\n }\n /**\n * Whether the native Screen Orientation API is available.\n */\n static supported = canOrientScreen();\n /**\n * Whether the native Screen Orientation API is available.\n */\n get supported() {\n return ScreenOrientationController.supported;\n }\n onConnect() {\n if (this.supported) {\n listenEvent(screen.orientation, \"change\", this.#onOrientationChange.bind(this));\n } else {\n const query = window.matchMedia(\"(orientation: landscape)\");\n query.onchange = this.#onOrientationChange.bind(this);\n onDispose(() => query.onchange = null);\n }\n onDispose(this.#onDisconnect.bind(this));\n }\n async #onDisconnect() {\n if (this.supported && this.#locked()) await this.unlock();\n }\n #onOrientationChange(event) {\n this.#type.set(this.#getScreenOrientation());\n this.dispatch(\"orientation-change\", {\n detail: {\n orientation: peek(this.#type),\n lock: this.#currentLock\n },\n trigger: event\n });\n }\n /**\n * Locks the orientation of the screen to the desired orientation type using the\n * Screen Orientation API.\n *\n * @param lockType - The screen lock orientation type.\n * @throws Error - If screen orientation API is unavailable.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Screen/orientation}\n * @see {@link https://w3c.github.io/screen-orientation}\n */\n async lock(lockType) {\n if (peek(this.#locked) || this.#currentLock === lockType) return;\n this.#assertScreenOrientationAPI();\n await screen.orientation.lock(lockType);\n this.#locked.set(true);\n this.#currentLock = lockType;\n }\n /**\n * Unlocks the orientation of the screen to it's default state using the Screen Orientation\n * API. This method will throw an error if the API is unavailable.\n *\n * @throws Error - If screen orientation API is unavailable.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Screen/orientation}\n * @see {@link https://w3c.github.io/screen-orientation}\n */\n async unlock() {\n if (!peek(this.#locked)) return;\n this.#assertScreenOrientationAPI();\n this.#currentLock = void 0;\n await screen.orientation.unlock();\n this.#locked.set(false);\n }\n #assertScreenOrientationAPI() {\n if (this.supported) return;\n throw Error(\n \"[vidstack] no orientation API\"\n );\n }\n #getScreenOrientation() {\n if (IS_SERVER) return \"portrait-primary\";\n if (this.supported) return window.screen.orientation.type;\n return window.innerWidth >= window.innerHeight ? \"landscape-primary\" : \"portrait-primary\";\n }\n}\n\nclass AudioProviderLoader {\n name = \"audio\";\n target;\n canPlay(src) {\n if (!isAudioSrc(src)) return false;\n return IS_SERVER || !isString(src.src) || src.type === \"?\" || canPlayAudioType(this.target, src.type);\n }\n mediaType() {\n return \"audio\";\n }\n async load(ctx) {\n if (IS_SERVER) {\n throw Error(\"[vidstack] can not load audio provider server-side\");\n }\n return new (await import('./vidstack-R_ot4AhB.js')).AudioProvider(this.target, ctx);\n }\n}\n\nclass VideoProviderLoader {\n name = \"video\";\n target;\n canPlay(src) {\n if (!isVideoSrc(src)) return false;\n return IS_SERVER || !isString(src.src) || src.type === \"?\" || canPlayVideoType(this.target, src.type);\n }\n mediaType() {\n return \"video\";\n }\n async load(ctx) {\n if (IS_SERVER) {\n throw Error(\"[vidstack] can not load video provider server-side\");\n }\n return new (await Promise.resolve().then(function () { return provider$1; })).VideoProvider(this.target, ctx);\n }\n}\n\nclass HLSProviderLoader extends VideoProviderLoader {\n static supported = isHLSSupported();\n name = \"hls\";\n canPlay(src) {\n return HLSProviderLoader.supported && isHLSSrc(src);\n }\n async load(context) {\n if (IS_SERVER) {\n throw Error(\"[vidstack] can not load hls provider server-side\");\n }\n return new (await import('./vidstack-BN7_0WI-.js')).HLSProvider(this.target, context);\n }\n}\n\nlet audioContext = null, gainNodes = [], elAudioSources = [];\nfunction getOrCreateAudioCtx() {\n return audioContext ??= new AudioContext();\n}\nfunction createGainNode() {\n const audioCtx = getOrCreateAudioCtx(), gainNode = audioCtx.createGain();\n gainNode.connect(audioCtx.destination);\n gainNodes.push(gainNode);\n return gainNode;\n}\nfunction createElementSource(el, gainNode) {\n const audioCtx = getOrCreateAudioCtx(), src = audioCtx.createMediaElementSource(el);\n if (gainNode) {\n src.connect(gainNode);\n }\n elAudioSources.push(src);\n return src;\n}\nfunction destroyGainNode(node) {\n const idx = gainNodes.indexOf(node);\n if (idx !== -1) {\n gainNodes.splice(idx, 1);\n node.disconnect();\n freeAudioCtxWhenAllResourcesFreed();\n }\n}\nfunction destroyElementSource(src) {\n const idx = elAudioSources.indexOf(src);\n if (idx !== -1) {\n elAudioSources.splice(idx, 1);\n src.disconnect();\n freeAudioCtxWhenAllResourcesFreed();\n }\n}\nfunction freeAudioCtxWhenAllResourcesFreed() {\n if (audioContext && gainNodes.length === 0 && elAudioSources.length === 0) {\n audioContext.close().then(() => {\n audioContext = null;\n });\n }\n}\n\nclass AudioGain {\n #media;\n #onChange;\n #gainNode = null;\n #srcAudioNode = null;\n get currentGain() {\n return this.#gainNode?.gain?.value ?? null;\n }\n get supported() {\n return true;\n }\n constructor(media, onChange) {\n this.#media = media;\n this.#onChange = onChange;\n }\n setGain(gain) {\n const currGain = this.currentGain;\n if (gain === this.currentGain) {\n return;\n }\n if (gain === 1 && currGain !== 1) {\n this.removeGain();\n return;\n }\n if (!this.#gainNode) {\n this.#gainNode = createGainNode();\n if (this.#srcAudioNode) {\n this.#srcAudioNode.connect(this.#gainNode);\n }\n }\n if (!this.#srcAudioNode) {\n this.#srcAudioNode = createElementSource(this.#media, this.#gainNode);\n }\n this.#gainNode.gain.value = gain;\n this.#onChange(gain);\n }\n removeGain() {\n if (!this.#gainNode) return;\n if (this.#srcAudioNode) {\n this.#srcAudioNode.connect(getOrCreateAudioCtx().destination);\n }\n this.#destroyGainNode();\n this.#onChange(null);\n }\n destroy() {\n this.#destroySrcNode();\n this.#destroyGainNode();\n }\n #destroySrcNode() {\n if (!this.#srcAudioNode) return;\n try {\n destroyElementSource(this.#srcAudioNode);\n } catch (e) {\n } finally {\n this.#srcAudioNode = null;\n }\n }\n #destroyGainNode() {\n if (!this.#gainNode) return;\n try {\n destroyGainNode(this.#gainNode);\n } catch (e) {\n } finally {\n this.#gainNode = null;\n }\n }\n}\n\nconst PAGE_EVENTS = [\"focus\", \"blur\", \"visibilitychange\", \"pageshow\", \"pagehide\"];\nclass PageVisibility {\n #state = signal(determinePageState());\n #visibility = signal(IS_SERVER ? \"visible\" : document.visibilityState);\n #safariBeforeUnloadTimeout;\n connect() {\n const events = new EventsController(window), handlePageEvent = this.#handlePageEvent.bind(this);\n for (const eventType of PAGE_EVENTS) {\n events.add(eventType, handlePageEvent);\n }\n if (IS_SAFARI) {\n events.add(\"beforeunload\", (event) => {\n this.#safariBeforeUnloadTimeout = setTimeout(() => {\n if (!(event.defaultPrevented || event.returnValue.length > 0)) {\n this.#state.set(\"hidden\");\n this.#visibility.set(\"hidden\");\n }\n }, 0);\n });\n }\n }\n /**\n * The current page state. Important to note we only account for a subset of page states, as\n * the rest aren't valuable to the player at the moment.\n *\n * - **active:** A page is in the active state if it is visible and has input focus.\n * - **passive:** A page is in the passive state if it is visible and does not have input focus.\n * - **hidden:** A page is in the hidden state if it is not visible.\n *\n * @see https://developers.google.com/web/updates/2018/07/page-lifecycle-api#states\n */\n get pageState() {\n return this.#state();\n }\n /**\n * The current document visibility state.\n *\n * - **visible:** The page content may be at least partially visible. In practice, this means that\n * the page is the foreground tab of a non-minimized window.\n * - **hidden:** The page content is not visible to the user. In practice this means that the\n * document is either a background tab or part of a minimized window, or the OS screen lock is\n * active.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilityState\n */\n get visibility() {\n return this.#visibility();\n }\n #handlePageEvent(event) {\n if (IS_SAFARI) window.clearTimeout(this.#safariBeforeUnloadTimeout);\n if (event.type !== \"blur\" || this.#state() === \"active\") {\n this.#state.set(determinePageState(event));\n this.#visibility.set(document.visibilityState == \"hidden\" ? \"hidden\" : \"visible\");\n }\n }\n}\nfunction determinePageState(event) {\n if (IS_SERVER) return \"hidden\";\n if (event?.type === \"blur\" || document.visibilityState === \"hidden\") return \"hidden\";\n if (document.hasFocus()) return \"active\";\n return \"passive\";\n}\n\nclass RAFLoop {\n #id;\n #callback;\n constructor(callback) {\n this.#callback = callback;\n }\n start() {\n if (!isUndefined(this.#id)) return;\n this.#loop();\n }\n stop() {\n if (isNumber(this.#id)) window.cancelAnimationFrame(this.#id);\n this.#id = void 0;\n }\n #loop() {\n this.#id = window.requestAnimationFrame(() => {\n if (isUndefined(this.#id)) return;\n this.#callback();\n this.#loop();\n });\n }\n}\n\nclass HTMLMediaEvents {\n #provider;\n #ctx;\n #waiting = false;\n #attachedLoadStart = false;\n #attachedCanPlay = false;\n #timeRAF = new RAFLoop(this.#onAnimationFrame.bind(this));\n #pageVisibility = new PageVisibility();\n #events;\n get #media() {\n return this.#provider.media;\n }\n constructor(provider, ctx) {\n this.#provider = provider;\n this.#ctx = ctx;\n this.#events = new EventsController(provider.media);\n this.#attachInitialListeners();\n this.#pageVisibility.connect();\n effect(this.#attachTimeUpdate.bind(this));\n onDispose(this.#onDispose.bind(this));\n }\n #onDispose() {\n this.#attachedLoadStart = false;\n this.#attachedCanPlay = false;\n this.#timeRAF.stop();\n this.#events.abort();\n this.#devHandlers?.clear();\n }\n /**\n * The `timeupdate` event fires surprisingly infrequently during playback, meaning your progress\n * bar (or whatever else is synced to the currentTime) moves in a choppy fashion. This helps\n * resolve that by retrieving time updates in a request animation frame loop.\n */\n #lastSeenTime = 0;\n #seekedTo = -1;\n #onAnimationFrame() {\n const newTime = this.#media.currentTime;\n const didStutter = IS_SAFARI && newTime - this.#seekedTo < 0.35;\n if (!didStutter && this.#lastSeenTime !== newTime) {\n this.#updateCurrentTime(newTime);\n this.#lastSeenTime = newTime;\n }\n }\n #attachInitialListeners() {\n this.#attachEventListener(\"loadstart\", this.#onLoadStart);\n this.#attachEventListener(\"abort\", this.#onAbort);\n this.#attachEventListener(\"emptied\", this.#onEmptied);\n this.#attachEventListener(\"error\", this.#onError);\n this.#attachEventListener(\"volumechange\", this.#onVolumeChange);\n }\n #attachLoadStartListeners() {\n if (this.#attachedLoadStart) return;\n this.#attachEventListener(\"loadeddata\", this.#onLoadedData);\n this.#attachEventListener(\"loadedmetadata\", this.#onLoadedMetadata);\n this.#attachEventListener(\"canplay\", this.#onCanPlay);\n this.#attachEventListener(\"canplaythrough\", this.#onCanPlayThrough);\n this.#attachEventListener(\"durationchange\", this.#onDurationChange);\n this.#attachEventListener(\"play\", this.#onPlay);\n this.#attachEventListener(\"progress\", this.#onProgress);\n this.#attachEventListener(\"stalled\", this.#onStalled);\n this.#attachEventListener(\"suspend\", this.#onSuspend);\n this.#attachEventListener(\"ratechange\", this.#onRateChange);\n this.#attachedLoadStart = true;\n }\n #attachCanPlayListeners() {\n if (this.#attachedCanPlay) return;\n this.#attachEventListener(\"pause\", this.#onPause);\n this.#attachEventListener(\"playing\", this.#onPlaying);\n this.#attachEventListener(\"seeked\", this.#onSeeked);\n this.#attachEventListener(\"seeking\", this.#onSeeking);\n this.#attachEventListener(\"ended\", this.#onEnded);\n this.#attachEventListener(\"waiting\", this.#onWaiting);\n this.#attachedCanPlay = true;\n }\n #devHandlers = void 0;\n #handleDevEvent = void 0;\n #attachEventListener(eventType, handler) {\n this.#events.add(eventType, handler.bind(this));\n }\n #onDevEvent(event2) {\n return;\n }\n #updateCurrentTime(time, trigger) {\n const newTime = Math.min(time, this.#ctx.$state.seekableEnd());\n this.#ctx.notify(\"time-change\", newTime, trigger);\n }\n #onLoadStart(event2) {\n if (this.#media.networkState === 3) {\n this.#onAbort(event2);\n return;\n }\n this.#attachLoadStartListeners();\n this.#ctx.notify(\"load-start\", void 0, event2);\n }\n #onAbort(event2) {\n this.#ctx.notify(\"abort\", void 0, event2);\n }\n #onEmptied() {\n this.#ctx.notify(\"emptied\", void 0, event);\n }\n #onLoadedData(event2) {\n this.#ctx.notify(\"loaded-data\", void 0, event2);\n }\n #onLoadedMetadata(event2) {\n this.#lastSeenTime = 0;\n this.#seekedTo = -1;\n this.#attachCanPlayListeners();\n this.#ctx.notify(\"loaded-metadata\", void 0, event2);\n if (IS_IOS || IS_SAFARI && isHLSSrc(this.#ctx.$state.source())) {\n this.#ctx.delegate.ready(this.#getCanPlayDetail(), event2);\n }\n }\n #getCanPlayDetail() {\n return {\n provider: peek(this.#ctx.$provider),\n duration: this.#media.duration,\n buffered: this.#media.buffered,\n seekable: this.#media.seekable\n };\n }\n #onPlay(event2) {\n if (!this.#ctx.$state.canPlay) return;\n this.#ctx.notify(\"play\", void 0, event2);\n }\n #onPause(event2) {\n if (this.#media.readyState === 1 && !this.#waiting) return;\n this.#waiting = false;\n this.#timeRAF.stop();\n this.#ctx.notify(\"pause\", void 0, event2);\n }\n #onCanPlay(event2) {\n this.#ctx.delegate.ready(this.#getCanPlayDetail(), event2);\n }\n #onCanPlayThrough(event2) {\n if (this.#ctx.$state.started()) return;\n this.#ctx.notify(\"can-play-through\", this.#getCanPlayDetail(), event2);\n }\n #onPlaying(event2) {\n if (this.#media.paused) return;\n this.#waiting = false;\n this.#ctx.notify(\"playing\", void 0, event2);\n this.#timeRAF.start();\n }\n #onStalled(event2) {\n this.#ctx.notify(\"stalled\", void 0, event2);\n if (this.#media.readyState < 3) {\n this.#waiting = true;\n this.#ctx.notify(\"waiting\", void 0, event2);\n }\n }\n #onWaiting(event2) {\n if (this.#media.readyState < 3) {\n this.#waiting = true;\n this.#ctx.notify(\"waiting\", void 0, event2);\n }\n }\n #onEnded(event2) {\n this.#timeRAF.stop();\n this.#updateCurrentTime(this.#media.duration, event2);\n this.#ctx.notify(\"end\", void 0, event2);\n if (this.#ctx.$state.loop()) {\n const hasCustomControls = isNil(this.#media.controls);\n if (hasCustomControls) this.#media.controls = false;\n }\n }\n #attachTimeUpdate() {\n const isPaused = this.#ctx.$state.paused(), isPageHidden = this.#pageVisibility.visibility === \"hidden\", shouldListenToTimeUpdates = isPaused || isPageHidden;\n if (shouldListenToTimeUpdates) {\n listenEvent(this.#media, \"timeupdate\", this.#onTimeUpdate.bind(this));\n }\n }\n #onTimeUpdate(event2) {\n this.#updateCurrentTime(this.#media.currentTime, event2);\n }\n #onDurationChange(event2) {\n if (this.#ctx.$state.ended()) {\n this.#updateCurrentTime(this.#media.duration, event2);\n }\n this.#ctx.notify(\"duration-change\", this.#media.duration, event2);\n }\n #onVolumeChange(event2) {\n const detail = {\n volume: this.#media.volume,\n muted: this.#media.muted\n };\n this.#ctx.notify(\"volume-change\", detail, event2);\n }\n #onSeeked(event2) {\n this.#seekedTo = this.#media.currentTime;\n this.#updateCurrentTime(this.#media.currentTime, event2);\n this.#ctx.notify(\"seeked\", this.#media.currentTime, event2);\n if (Math.trunc(this.#media.currentTime) === Math.trunc(this.#media.duration) && getNumberOfDecimalPlaces(this.#media.duration) > getNumberOfDecimalPlaces(this.#media.currentTime)) {\n this.#updateCurrentTime(this.#media.duration, event2);\n if (!this.#media.ended) {\n this.#ctx.player.dispatch(\n new DOMEvent(\"media-play-request\", {\n trigger: event2\n })\n );\n }\n }\n }\n #onSeeking(event2) {\n this.#ctx.notify(\"seeking\", this.#media.currentTime, event2);\n }\n #onProgress(event2) {\n const detail = {\n buffered: this.#media.buffered,\n seekable: this.#media.seekable\n };\n this.#ctx.notify(\"progress\", detail, event2);\n }\n #onSuspend(event2) {\n this.#ctx.notify(\"suspend\", void 0, event2);\n }\n #onRateChange(event2) {\n this.#ctx.notify(\"rate-change\", this.#media.playbackRate, event2);\n }\n #onError(event2) {\n const error = this.#media.error;\n if (!error) return;\n const detail = {\n message: error.message,\n code: error.code,\n mediaError: error\n };\n this.#ctx.notify(\"error\", detail, event2);\n }\n}\n\nclass NativeAudioTracks {\n #provider;\n #ctx;\n get #nativeTracks() {\n return this.#provider.media.audioTracks;\n }\n constructor(provider, ctx) {\n this.#provider = provider;\n this.#ctx = ctx;\n this.#nativeTracks.onaddtrack = this.#onAddNativeTrack.bind(this);\n this.#nativeTracks.onremovetrack = this.#onRemoveNativeTrack.bind(this);\n this.#nativeTracks.onchange = this.#onChangeNativeTrack.bind(this);\n listenEvent(this.#ctx.audioTracks, \"change\", this.#onChangeTrack.bind(this));\n }\n #onAddNativeTrack(event) {\n const nativeTrack = event.track;\n if (nativeTrack.label === \"\") return;\n const id = nativeTrack.id.toString() || `native-audio-${this.#ctx.audioTracks.length}`, audioTrack = {\n id,\n label: nativeTrack.label,\n language: nativeTrack.language,\n kind: nativeTrack.kind,\n selected: false\n };\n this.#ctx.audioTracks[ListSymbol.add](audioTrack, event);\n if (nativeTrack.enabled) audioTrack.selected = true;\n }\n #onRemoveNativeTrack(event) {\n const track = this.#ctx.audioTracks.getById(event.track.id);\n if (track) this.#ctx.audioTracks[ListSymbol.remove](track, event);\n }\n #onChangeNativeTrack(event) {\n let enabledTrack = this.#getEnabledNativeTrack();\n if (!enabledTrack) return;\n const track = this.#ctx.audioTracks.getById(enabledTrack.id);\n if (track) this.#ctx.audioTracks[ListSymbol.select](track, true, event);\n }\n #getEnabledNativeTrack() {\n return Array.from(this.#nativeTracks).find((track) => track.enabled);\n }\n #onChangeTrack(event) {\n const { current } = event.detail;\n if (!current) return;\n const track = this.#nativeTracks.getTrackById(current.id);\n if (track) {\n const prev = this.#getEnabledNativeTrack();\n if (prev) prev.enabled = false;\n track.enabled = true;\n }\n }\n}\n\nclass HTMLMediaProvider {\n constructor(media, ctx) {\n this.media = media;\n this.ctx = ctx;\n this.audioGain = new AudioGain(media, (gain) => {\n this.ctx.notify(\"audio-gain-change\", gain);\n });\n }\n scope = createScope();\n currentSrc = null;\n audioGain;\n setup() {\n new HTMLMediaEvents(this, this.ctx);\n if (\"audioTracks\" in this.media) new NativeAudioTracks(this, this.ctx);\n onDispose(() => {\n this.audioGain.destroy();\n this.media.srcObject = null;\n this.media.removeAttribute(\"src\");\n for (const source of this.media.querySelectorAll(\"source\")) source.remove();\n this.media.load();\n });\n }\n get type() {\n return \"\";\n }\n setPlaybackRate(rate) {\n this.media.playbackRate = rate;\n }\n async play() {\n return this.media.play();\n }\n async pause() {\n return this.media.pause();\n }\n setMuted(muted) {\n this.media.muted = muted;\n }\n setVolume(volume) {\n this.media.volume = volume;\n }\n setCurrentTime(time) {\n this.media.currentTime = time;\n }\n setPlaysInline(inline) {\n setAttribute(this.media, \"playsinline\", inline);\n }\n async loadSource({ src, type }, preload) {\n this.media.preload = preload || \"\";\n if (isMediaStream(src)) {\n this.removeSource();\n this.media.srcObject = src;\n } else {\n this.media.srcObject = null;\n if (isString(src)) {\n if (type !== \"?\") {\n this.appendSource({ src, type });\n } else {\n this.removeSource();\n this.media.src = this.#appendMediaFragment(src);\n }\n } else {\n this.removeSource();\n this.media.src = window.URL.createObjectURL(src);\n }\n }\n this.media.load();\n this.currentSrc = { src, type };\n }\n /**\n * Append source so it works when requesting AirPlay since hls.js will remove it.\n */\n appendSource(src, defaultType) {\n const prevSource = this.media.querySelector(\"source[data-vds]\"), source = prevSource ?? document.createElement(\"source\");\n setAttribute(source, \"src\", this.#appendMediaFragment(src.src));\n setAttribute(source, \"type\", src.type !== \"?\" ? src.type : defaultType);\n setAttribute(source, \"data-vds\", \"\");\n if (!prevSource) this.media.append(source);\n }\n removeSource() {\n this.media.querySelector(\"source[data-vds]\")?.remove();\n }\n #appendMediaFragment(src) {\n const { clipStartTime, clipEndTime } = this.ctx.$state, startTime = clipStartTime(), endTime = clipEndTime();\n if (startTime > 0 && endTime > 0) {\n return `${src}#t=${startTime},${endTime}`;\n } else if (startTime > 0) {\n return `${src}#t=${startTime}`;\n } else if (endTime > 0) {\n return `${src}#t=0,${endTime}`;\n }\n return src;\n }\n}\n\nclass HTMLRemotePlaybackAdapter {\n #media;\n #ctx;\n #state;\n #supported = signal(false);\n get supported() {\n return this.#supported();\n }\n constructor(media, ctx) {\n this.#media = media;\n this.#ctx = ctx;\n this.#setup();\n }\n #setup() {\n if (IS_SERVER || !this.#media?.remote || !this.canPrompt) return;\n this.#media.remote.watchAvailability((available) => {\n this.#supported.set(available);\n }).catch(() => {\n this.#supported.set(false);\n });\n effect(this.#watchSupported.bind(this));\n }\n #watchSupported() {\n if (!this.#supported()) return;\n const events = [\"connecting\", \"connect\", \"disconnect\"], onStateChange = this.#onStateChange.bind(this);\n onStateChange();\n listenEvent(this.#media, \"playing\", onStateChange);\n const remoteEvents = new EventsController(this.#media.remote);\n for (const type of events) {\n remoteEvents.add(type, onStateChange);\n }\n }\n async prompt() {\n if (!this.supported) throw Error(\"Not supported on this platform.\");\n if (this.type === \"airplay\" && this.#media.webkitShowPlaybackTargetPicker) {\n return this.#media.webkitShowPlaybackTargetPicker();\n }\n return this.#media.remote.prompt();\n }\n #onStateChange(event) {\n const state = this.#media.remote.state;\n if (state === this.#state) return;\n const detail = { type: this.type, state };\n this.#ctx.notify(\"remote-playback-change\", detail, event);\n this.#state = state;\n }\n}\nclass HTMLAirPlayAdapter extends HTMLRemotePlaybackAdapter {\n type = \"airplay\";\n get canPrompt() {\n return \"WebKitPlaybackTargetAvailabilityEvent\" in window;\n }\n}\n\nclass NativeHLSTextTracks {\n #video;\n #ctx;\n constructor(video, ctx) {\n this.#video = video;\n this.#ctx = ctx;\n video.textTracks.onaddtrack = this.#onAddTrack.bind(this);\n onDispose(this.#onDispose.bind(this));\n }\n #onAddTrack(event) {\n const nativeTrack = event.track;\n if (!nativeTrack || findTextTrackElement(this.#video, nativeTrack)) return;\n const track = new TextTrack({\n id: nativeTrack.id,\n kind: nativeTrack.kind,\n label: nativeTrack.label ?? \"\",\n language: nativeTrack.language,\n type: \"vtt\"\n });\n track[TextTrackSymbol.native] = { track: nativeTrack };\n track[TextTrackSymbol.readyState] = 2;\n track[TextTrackSymbol.nativeHLS] = true;\n let lastIndex = 0;\n const onCueChange = (event2) => {\n if (!nativeTrack.cues) return;\n for (let i = lastIndex; i < nativeTrack.cues.length; i++) {\n track.addCue(nativeTrack.cues[i], event2);\n lastIndex++;\n }\n };\n onCueChange(event);\n nativeTrack.oncuechange = onCueChange;\n this.#ctx.textTracks.add(track, event);\n track.setMode(nativeTrack.mode, event);\n }\n #onDispose() {\n this.#video.textTracks.onaddtrack = null;\n for (const track of this.#ctx.textTracks) {\n const nativeTrack = track[TextTrackSymbol.native]?.track;\n if (nativeTrack?.oncuechange) nativeTrack.oncuechange = null;\n }\n }\n}\nfunction findTextTrackElement(video, track) {\n return Array.from(video.children).find((el) => el.track === track);\n}\n\nclass VideoPictureInPicture {\n #video;\n #media;\n constructor(video, media) {\n this.#video = video;\n this.#media = media;\n new EventsController(video).add(\"enterpictureinpicture\", this.#onEnter.bind(this)).add(\"leavepictureinpicture\", this.#onExit.bind(this));\n }\n get active() {\n return document.pictureInPictureElement === this.#video;\n }\n get supported() {\n return canUsePictureInPicture(this.#video);\n }\n async enter() {\n return this.#video.requestPictureInPicture();\n }\n exit() {\n return document.exitPictureInPicture();\n }\n #onEnter(event) {\n this.#onChange(true, event);\n }\n #onExit(event) {\n this.#onChange(false, event);\n }\n #onChange = (active, event) => {\n this.#media.notify(\"picture-in-picture-change\", active, event);\n };\n}\n\nclass VideoPresentation {\n #video;\n #media;\n #mode = \"inline\";\n get mode() {\n return this.#mode;\n }\n constructor(video, media) {\n this.#video = video;\n this.#media = media;\n listenEvent(video, \"webkitpresentationmodechanged\", this.#onModeChange.bind(this));\n }\n get supported() {\n return canUseVideoPresentation(this.#video);\n }\n async setPresentationMode(mode) {\n if (this.#mode === mode) return;\n this.#video.webkitSetPresentationMode(mode);\n }\n #onModeChange(event) {\n const prevMode = this.#mode;\n this.#mode = this.#video.webkitPresentationMode;\n this.#media.player?.dispatch(\n new DOMEvent(\"video-presentation-change\", {\n detail: this.#mode,\n trigger: event\n })\n );\n [\"fullscreen\", \"picture-in-picture\"].forEach((type) => {\n if (this.#mode === type || prevMode === type) {\n this.#media.notify(`${type}-change`, this.#mode === type, event);\n }\n });\n }\n}\nclass FullscreenPresentationAdapter {\n #presentation;\n get active() {\n return this.#presentation.mode === \"fullscreen\";\n }\n get supported() {\n return this.#presentation.supported;\n }\n constructor(presentation) {\n this.#presentation = presentation;\n }\n async enter() {\n this.#presentation.setPresentationMode(\"fullscreen\");\n }\n async exit() {\n this.#presentation.setPresentationMode(\"inline\");\n }\n}\nclass PIPPresentationAdapter {\n #presentation;\n get active() {\n return this.#presentation.mode === \"picture-in-picture\";\n }\n get supported() {\n return this.#presentation.supported;\n }\n constructor(presentation) {\n this.#presentation = presentation;\n }\n async enter() {\n this.#presentation.setPresentationMode(\"picture-in-picture\");\n }\n async exit() {\n this.#presentation.setPresentationMode(\"inline\");\n }\n}\n\nclass VideoProvider extends HTMLMediaProvider {\n $$PROVIDER_TYPE = \"VIDEO\";\n get type() {\n return \"video\";\n }\n airPlay;\n fullscreen;\n pictureInPicture;\n constructor(video, ctx) {\n super(video, ctx);\n scoped(() => {\n this.airPlay = new HTMLAirPlayAdapter(video, ctx);\n if (canUseVideoPresentation(video)) {\n const presentation = new VideoPresentation(video, ctx);\n this.fullscreen = new FullscreenPresentationAdapter(presentation);\n this.pictureInPicture = new PIPPresentationAdapter(presentation);\n } else if (canUsePictureInPicture(video)) {\n this.pictureInPicture = new VideoPictureInPicture(video, ctx);\n }\n }, this.scope);\n }\n setup() {\n super.setup();\n if (canPlayHLSNatively(this.video)) {\n new NativeHLSTextTracks(this.video, this.ctx);\n }\n this.ctx.textRenderers.attachVideo(this.video);\n onDispose(() => {\n this.ctx.textRenderers.attachVideo(null);\n });\n if (this.type === \"video\") this.ctx.notify(\"provider-setup\", this);\n }\n /**\n * The native HTML `<video>` element.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement}\n */\n get video() {\n return this.media;\n }\n}\n\nvar provider$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n VideoProvider: VideoProvider\n});\n\nfunction getLangName(langCode) {\n try {\n const displayNames = new Intl.DisplayNames(navigator.languages, { type: \"language\" });\n const languageName = displayNames.of(langCode);\n return languageName ?? null;\n } catch (err) {\n return null;\n }\n}\n\nconst toDOMEventType = (type) => `dash-${camelToKebabCase(type)}`;\nclass DASHController {\n #video;\n #ctx;\n #instance = null;\n #callbacks = /* @__PURE__ */ new Set();\n #stopLiveSync = null;\n config = {};\n get instance() {\n return this.#instance;\n }\n constructor(video, ctx) {\n this.#video = video;\n this.#ctx = ctx;\n }\n setup(ctor) {\n this.#instance = ctor().create();\n const dispatcher = this.#dispatchDASHEvent.bind(this);\n for (const event of Object.values(ctor.events)) this.#instance.on(event, dispatcher);\n this.#instance.on(ctor.events.ERROR, this.#onError.bind(this));\n for (const callback of this.#callbacks) callback(this.#instance);\n this.#ctx.player.dispatch(\"dash-instance\", {\n detail: this.#instance\n });\n this.#instance.initialize(this.#video, void 0, false);\n this.#instance.updateSettings({\n streaming: {\n text: {\n // Disabling text rendering by dash.\n defaultEnabled: false,\n dispatchForManualRendering: true\n },\n buffer: {\n /// Enables buffer replacement when switching bitrates for faster switching.\n fastSwitchEnabled: true\n }\n },\n ...this.config\n });\n this.#instance.on(ctor.events.FRAGMENT_LOADING_STARTED, this.#onFragmentLoadStart.bind(this));\n this.#instance.on(\n ctor.events.FRAGMENT_LOADING_COMPLETED,\n this.#onFragmentLoadComplete.bind(this)\n );\n this.#instance.on(ctor.events.MANIFEST_LOADED, this.#onManifestLoaded.bind(this));\n this.#instance.on(ctor.events.QUALITY_CHANGE_RENDERED, this.#onQualityChange.bind(this));\n this.#instance.on(ctor.events.TEXT_TRACKS_ADDED, this.#onTextTracksAdded.bind(this));\n this.#instance.on(ctor.events.TRACK_CHANGE_RENDERED, this.#onTrackChange.bind(this));\n this.#ctx.qualities[QualitySymbol.enableAuto] = this.#enableAutoQuality.bind(this);\n listenEvent(this.#ctx.qualities, \"change\", this.#onUserQualityChange.bind(this));\n listenEvent(this.#ctx.audioTracks, \"change\", this.#onUserAudioChange.bind(this));\n this.#stopLiveSync = effect(this.#liveSync.bind(this));\n }\n #createDOMEvent(event) {\n return new DOMEvent(toDOMEventType(event.type), { detail: event });\n }\n #liveSync() {\n if (!this.#ctx.$state.live()) return;\n const raf = new RAFLoop(this.#liveSyncPosition.bind(this));\n raf.start();\n return raf.stop.bind(raf);\n }\n #liveSyncPosition() {\n if (!this.#instance) return;\n const position = this.#instance.duration() - this.#instance.time();\n this.#ctx.$state.liveSyncPosition.set(!isNaN(position) ? position : Infinity);\n }\n #dispatchDASHEvent(event) {\n this.#ctx.player?.dispatch(this.#createDOMEvent(event));\n }\n #currentTrack = null;\n #cueTracker = {};\n #onTextFragmentLoaded(event) {\n const native = this.#currentTrack?.[TextTrackSymbol.native], cues = (native?.track).cues;\n if (!native || !cues) return;\n const id = this.#currentTrack.id, startIndex = this.#cueTracker[id] ?? 0, trigger = this.#createDOMEvent(event);\n for (let i = startIndex; i < cues.length; i++) {\n const cue = cues[i];\n if (!cue.positionAlign) cue.positionAlign = \"auto\";\n this.#currentTrack.addCue(cue, trigger);\n }\n this.#cueTracker[id] = cues.length;\n }\n #onTextTracksAdded(event) {\n if (!this.#instance) return;\n const data = event.tracks, nativeTextTracks = [...this.#video.textTracks].filter((track) => \"manualMode\" in track), trigger = this.#createDOMEvent(event);\n for (let i = 0; i < nativeTextTracks.length; i++) {\n const textTrackInfo = data[i], nativeTextTrack = nativeTextTracks[i];\n const id = `dash-${textTrackInfo.kind}-${i}`, track = new TextTrack({\n id,\n label: textTrackInfo?.label ?? textTrackInfo.labels.find((t) => t.text)?.text ?? (textTrackInfo?.lang && getLangName(textTrackInfo.lang)) ?? textTrackInfo?.lang ?? void 0,\n language: textTrackInfo.lang ?? void 0,\n kind: textTrackInfo.kind,\n default: textTrackInfo.defaultTrack\n });\n track[TextTrackSymbol.native] = {\n managed: true,\n track: nativeTextTrack\n };\n track[TextTrackSymbol.readyState] = 2;\n track[TextTrackSymbol.onModeChange] = () => {\n if (!this.#instance) return;\n if (track.mode === \"showing\") {\n this.#instance.setTextTrack(i);\n this.#currentTrack = track;\n } else {\n this.#instance.setTextTrack(-1);\n this.#currentTrack = null;\n }\n };\n this.#ctx.textTracks.add(track, trigger);\n }\n }\n #onTrackChange(event) {\n const { mediaType, newMediaInfo } = event;\n if (mediaType === \"audio\") {\n const track = this.#ctx.audioTracks.getById(`dash-audio-${newMediaInfo.index}`);\n if (track) {\n const trigger = this.#createDOMEvent(event);\n this.#ctx.audioTracks[ListSymbol.select](track, true, trigger);\n }\n }\n }\n #onQualityChange(event) {\n if (event.mediaType !== \"video\") return;\n const quality = this.#ctx.qualities[event.newQuality];\n if (quality) {\n const trigger = this.#createDOMEvent(event);\n this.#ctx.qualities[ListSymbol.select](quality, true, trigger);\n }\n }\n #onManifestLoaded(event) {\n if (this.#ctx.$state.canPlay() || !this.#instance) return;\n const { type, mediaPresentationDuration } = event.data, trigger = this.#createDOMEvent(event);\n this.#ctx.notify(\"stream-type-change\", type !== \"static\" ? \"live\" : \"on-demand\", trigger);\n this.#ctx.notify(\"duration-change\", mediaPresentationDuration, trigger);\n this.#ctx.qualities[QualitySymbol.setAuto](true, trigger);\n const media = this.#instance.getVideoElement();\n const videoQualities = this.#instance.getTracksForTypeFromManifest(\n \"video\",\n event.data\n );\n const supportedVideoMimeType = [...new Set(videoQualities.map((e) => e.mimeType))].find(\n (type2) => type2 && canPlayVideoType(media, type2)\n );\n const videoQuality = videoQualities.filter(\n (track) => supportedVideoMimeType === track.mimeType\n )[0];\n let audioTracks = this.#instance.getTracksForTypeFromManifest(\n \"audio\",\n event.data\n );\n const supportedAudioMimeType = [...new Set(audioTracks.map((e) => e.mimeType))].find(\n (type2) => type2 && canPlayAudioType(media, type2)\n );\n audioTracks = audioTracks.filter((track) => supportedAudioMimeType === track.mimeType);\n videoQuality.bitrateList.forEach((bitrate, index) => {\n const quality = {\n id: bitrate.id?.toString() ?? `dash-bitrate-${index}`,\n width: bitrate.width ?? 0,\n height: bitrate.height ?? 0,\n bitrate: bitrate.bandwidth ?? 0,\n codec: videoQuality.codec,\n index\n };\n this.#ctx.qualities[ListSymbol.add](quality, trigger);\n });\n if (isNumber(videoQuality.index)) {\n const quality = this.#ctx.qualities[videoQuality.index];\n if (quality) this.#ctx.qualities[ListSymbol.select](quality, true, trigger);\n }\n audioTracks.forEach((audioTrack, index) => {\n const matchingLabel = audioTrack.labels.find((label2) => {\n return navigator.languages.some((language) => {\n return label2.lang && language.toLowerCase().startsWith(label2.lang.toLowerCase());\n });\n });\n const label = matchingLabel || audioTrack.labels[0];\n const localTrack = {\n id: `dash-audio-${audioTrack?.index}`,\n label: label?.text ?? (audioTrack.lang && getLangName(audioTrack.lang)) ?? audioTrack.lang ?? \"\",\n language: audioTrack.lang ?? \"\",\n kind: \"main\",\n mimeType: audioTrack.mimeType,\n codec: audioTrack.codec,\n index\n };\n this.#ctx.audioTracks[ListSymbol.add](localTrack, trigger);\n });\n media.dispatchEvent(new DOMEvent(\"canplay\", { trigger }));\n }\n #onError(event) {\n const { type: eventType, error: data } = event;\n switch (data.code) {\n case 27:\n this.#onNetworkError(data);\n break;\n default:\n this.#onFatalError(data);\n break;\n }\n }\n #onFragmentLoadStart() {\n if (this.#retryLoadingTimer >= 0) this.#clearRetryTimer();\n }\n #onFragmentLoadComplete(event) {\n const mediaType = event.mediaType;\n if (mediaType === \"text\") {\n requestAnimationFrame(this.#onTextFragmentLoaded.bind(this, event));\n }\n }\n #retryLoadingTimer = -1;\n #onNetworkError(error) {\n this.#clearRetryTimer();\n this.#instance?.play();\n this.#retryLoadingTimer = window.setTimeout(() => {\n this.#retryLoadingTimer = -1;\n this.#onFatalError(error);\n }, 5e3);\n }\n #clearRetryTimer() {\n clearTimeout(this.#retryLoadingTimer);\n this.#retryLoadingTimer = -1;\n }\n #onFatalError(error) {\n this.#ctx.notify(\"error\", {\n message: error.message ?? \"\",\n code: 1,\n error\n });\n }\n #enableAutoQuality() {\n this.#switchAutoBitrate(\"video\", true);\n const { qualities } = this.#ctx;\n this.#instance?.setQualityFor(\"video\", qualities.selectedIndex, true);\n }\n #switchAutoBitrate(type, auto) {\n this.#instance?.updateSettings({\n streaming: { abr: { autoSwitchBitrate: { [type]: auto } } }\n });\n }\n #onUserQualityChange() {\n const { qualities } = this.#ctx;\n if (!this.#instance || qualities.auto || !qualities.selected) return;\n this.#switchAutoBitrate(\"video\", false);\n this.#instance.setQualityFor(\"video\", qualities.selectedIndex, qualities.switch === \"current\");\n if (IS_CHROME) {\n this.#video.currentTime = this.#video.currentTime;\n }\n }\n #onUserAudioChange() {\n if (!this.#instance) return;\n const { audioTracks } = this.#ctx, selectedTrack = this.#instance.getTracksFor(\"audio\").find(\n (track) => audioTracks.selected && audioTracks.selected.id === `dash-audio-${track.index}`\n );\n if (selectedTrack) this.#instance.setCurrentTrack(selectedTrack);\n }\n #reset() {\n this.#clearRetryTimer();\n this.#currentTrack = null;\n this.#cueTracker = {};\n }\n onInstance(callback) {\n this.#callbacks.add(callback);\n return () => this.#callbacks.delete(callback);\n }\n loadSource(src) {\n this.#reset();\n if (!isString(src.src)) return;\n this.#instance?.attachSource(src.src);\n }\n destroy() {\n this.#reset();\n this.#instance?.destroy();\n this.#instance = null;\n this.#stopLiveSync?.();\n this.#stopLiveSync = null;\n }\n}\n\nfunction coerceToError(error) {\n return error instanceof Error ? error : Error(typeof error === \"string\" ? error : JSON.stringify(error));\n}\nfunction assert(condition, message) {\n if (!condition) {\n throw Error(\"Assertion failed.\");\n }\n}\n\nclass DASHLibLoader {\n #lib;\n #ctx;\n #callback;\n constructor(lib, ctx, callback) {\n this.#lib = lib;\n this.#ctx = ctx;\n this.#callback = callback;\n this.#startLoading();\n }\n async #startLoading() {\n const callbacks = {\n onLoadStart: this.#onLoadStart.bind(this),\n onLoaded: this.#onLoaded.bind(this),\n onLoadError: this.#onLoadError.bind(this)\n };\n let ctor = await loadDASHScript(this.#lib, callbacks);\n if (isUndefined(ctor) && !isString(this.#lib)) ctor = await importDASH(this.#lib, callbacks);\n if (!ctor) return null;\n if (!window.dashjs.supportsMediaSource()) {\n const message = \"[vidstack] `dash.js` is not supported in this environment\";\n this.#ctx.player.dispatch(new DOMEvent(\"dash-unsupported\"));\n this.#ctx.notify(\"error\", { message, code: 4 });\n return null;\n }\n return ctor;\n }\n #onLoadStart() {\n this.#ctx.player.dispatch(new DOMEvent(\"dash-lib-load-start\"));\n }\n #onLoaded(ctor) {\n this.#ctx.player.dispatch(\n new DOMEvent(\"dash-lib-loaded\", {\n detail: ctor\n })\n );\n this.#callback(ctor);\n }\n #onLoadError(e) {\n const error = coerceToError(e);\n this.#ctx.player.dispatch(\n new DOMEvent(\"dash-lib-load-error\", {\n detail: error\n })\n );\n this.#ctx.notify(\"error\", {\n message: error.message,\n code: 4,\n error\n });\n }\n}\nasync function importDASH(loader, callbacks = {}) {\n if (isUndefined(loader)) return void 0;\n callbacks.onLoadStart?.();\n if (isDASHConstructor(loader)) {\n callbacks.onLoaded?.(loader);\n return loader;\n }\n if (isDASHNamespace(loader)) {\n const ctor = loader.MediaPlayer;\n callbacks.onLoaded?.(ctor);\n return ctor;\n }\n try {\n const ctor = (await loader())?.default;\n if (isDASHNamespace(ctor)) {\n callbacks.onLoaded?.(ctor.MediaPlayer);\n return ctor.MediaPlayer;\n }\n if (ctor) {\n callbacks.onLoaded?.(ctor);\n } else {\n throw Error(\n false ? \"[vidstack] failed importing `dash.js`. Dynamic import returned invalid object.\" : \"\"\n );\n }\n return ctor;\n } catch (err) {\n callbacks.onLoadError?.(err);\n }\n return void 0;\n}\nasync function loadDASHScript(src, callbacks = {}) {\n if (!isString(src)) return void 0;\n callbacks.onLoadStart?.();\n try {\n await loadScript(src);\n if (!isFunction(window.dashjs.MediaPlayer)) {\n throw Error(\n false ? \"[vidstack] failed loading `dash.js`. Could not find a valid `Dash` constructor on window\" : \"\"\n );\n }\n const ctor = window.dashjs.MediaPlayer;\n callbacks.onLoaded?.(ctor);\n return ctor;\n } catch (err) {\n callbacks.onLoadError?.(err);\n }\n return void 0;\n}\nfunction isDASHConstructor(value) {\n return value && value.prototype && value.prototype !== Function;\n}\nfunction isDASHNamespace(value) {\n return value && \"MediaPlayer\" in value;\n}\n\nconst JS_DELIVR_CDN = \"https://cdn.jsdelivr.net\";\nclass DASHProvider extends VideoProvider {\n $$PROVIDER_TYPE = \"DASH\";\n #ctor = null;\n #controller = new DASHController(this.video, this.ctx);\n /**\n * The `dash.js` constructor.\n */\n get ctor() {\n return this.#ctor;\n }\n /**\n * The current `dash.js` instance.\n */\n get instance() {\n return this.#controller.instance;\n }\n /**\n * Whether `dash.js` is supported in this environment.\n */\n static supported = isDASHSupported();\n get type() {\n return \"dash\";\n }\n get canLiveSync() {\n return true;\n }\n #library = `${JS_DELIVR_CDN}/npm/dashjs@4.7.4/dist/dash${\".all.min.js\"}`;\n /**\n * The `dash.js` configuration object.\n *\n * @see {@link https://cdn.dashjs.org/latest/jsdoc/module-Settings.html}\n */\n get config() {\n return this.#controller.config;\n }\n set config(config) {\n this.#controller.config = config;\n }\n /**\n * The `dash.js` constructor (supports dynamic imports) or a URL of where it can be found.\n *\n * @defaultValue `https://cdn.jsdelivr.net/npm/dashjs@4.7.4/dist/dash.all.min.js`\n */\n get library() {\n return this.#library;\n }\n set library(library) {\n this.#library = library;\n }\n preconnect() {\n if (!isString(this.#library)) return;\n preconnect(this.#library);\n }\n setup() {\n super.setup();\n new DASHLibLoader(this.#library, this.ctx, (ctor) => {\n this.#ctor = ctor;\n this.#controller.setup(ctor);\n this.ctx.notify(\"provider-setup\", this);\n const src = peek(this.ctx.$state.source);\n if (src) this.loadSource(src);\n });\n }\n async loadSource(src, preload) {\n if (!isString(src.src)) {\n this.removeSource();\n return;\n }\n this.media.preload = preload || \"\";\n this.appendSource(src, \"application/x-mpegurl\");\n this.#controller.loadSource(src);\n this.currentSrc = src;\n }\n /**\n * The given callback is invoked when a new `dash.js` instance is created and right before it's\n * attached to media.\n */\n onInstance(callback) {\n const instance = this.#controller.instance;\n if (instance) callback(instance);\n return this.#controller.onInstance(callback);\n }\n destroy() {\n this.#controller.destroy();\n }\n}\n\nvar provider = /*#__PURE__*/Object.freeze({\n __proto__: null,\n DASHProvider: DASHProvider\n});\n\nclass DASHProviderLoader extends VideoProviderLoader {\n static supported = isDASHSupported();\n name = \"dash\";\n canPlay(src) {\n return DASHProviderLoader.supported && isDASHSrc(src);\n }\n async load(context) {\n if (IS_SERVER) {\n throw Error(\"[vidstack] can not load dash provider server-side\");\n }\n return new (await Promise.resolve().then(function () { return provider; })).DASHProvider(this.target, context);\n }\n}\n\nclass VimeoProviderLoader {\n name = \"vimeo\";\n target;\n preconnect() {\n const connections = [\n \"https://i.vimeocdn.com\",\n \"https://f.vimeocdn.com\",\n \"https://fresnel.vimeocdn.com\"\n ];\n for (const url of connections) {\n preconnect(url);\n }\n }\n canPlay(src) {\n return isString(src.src) && src.type === \"video/vimeo\";\n }\n mediaType() {\n return \"video\";\n }\n async load(ctx) {\n if (IS_SERVER) {\n throw Error(\"[vidstack] can not load vimeo provider server-side\");\n }\n return new (await import('./vidstack-BqgQkvb4.js')).VimeoProvider(this.target, ctx);\n }\n async loadPoster(src, ctx, abort) {\n const { resolveVimeoVideoId, getVimeoVideoInfo } = await import('./vidstack-krOAtKMi.js');\n if (!isString(src.src)) return null;\n const { videoId, hash } = resolveVimeoVideoId(src.src);\n if (videoId) {\n return getVimeoVideoInfo(videoId, abort, hash).then((info) => info ? info.poster : null);\n }\n return null;\n }\n}\n\nclass YouTubeProviderLoader {\n name = \"youtube\";\n target;\n preconnect() {\n const connections = [\n // Botguard script.\n \"https://www.google.com\",\n // Posters.\n \"https://i.ytimg.com\",\n // Ads.\n \"https://googleads.g.doubleclick.net\",\n \"https://static.doubleclick.net\"\n ];\n for (const url of connections) {\n preconnect(url);\n }\n }\n canPlay(src) {\n return isString(src.src) && src.type === \"video/youtube\";\n }\n mediaType() {\n return \"video\";\n }\n async load(ctx) {\n if (IS_SERVER) {\n throw Error(\"[vidstack] can not load youtube provider server-side\");\n }\n return new (await import('./vidstack-DHmfHold.js')).YouTubeProvider(this.target, ctx);\n }\n async loadPoster(src, ctx, abort) {\n const { findYouTubePoster, resolveYouTubeVideoId } = await import('./vidstack-Dm1xEU9Q.js');\n const videoId = isString(src.src) && resolveYouTubeVideoId(src.src);\n if (videoId) return findYouTubePoster(videoId, abort);\n return null;\n }\n}\n\nfunction padNumberWithZeroes(num, expectedLength) {\n const str = String(num);\n const actualLength = str.length;\n const shouldPad = actualLength < expectedLength;\n if (shouldPad) {\n const padLength = expectedLength - actualLength;\n const padding = `0`.repeat(padLength);\n return `${padding}${num}`;\n }\n return str;\n}\nfunction parseTime(duration) {\n const hours = Math.trunc(duration / 3600);\n const minutes = Math.trunc(duration % 3600 / 60);\n const seconds = Math.trunc(duration % 60);\n const fraction = Number((duration - Math.trunc(duration)).toPrecision(3));\n return {\n hours,\n minutes,\n seconds,\n fraction\n };\n}\nfunction formatTime(duration, { padHrs = null, padMins = null, showHrs = false, showMs = false } = {}) {\n const { hours, minutes, seconds, fraction } = parseTime(duration), paddedHours = padHrs ? padNumberWithZeroes(hours, 2) : hours, paddedMinutes = padMins || isNull(padMins) && duration >= 3600 ? padNumberWithZeroes(minutes, 2) : minutes, paddedSeconds = padNumberWithZeroes(seconds, 2), paddedMs = showMs && fraction > 0 ? `.${String(fraction).replace(/^0?\\./, \"\")}` : \"\", time = `${paddedMinutes}:${paddedSeconds}${paddedMs}`;\n return hours > 0 || showHrs ? `${paddedHours}:${time}` : time;\n}\nfunction formatSpokenTime(duration) {\n const spokenParts = [];\n const { hours, minutes, seconds } = parseTime(duration);\n if (hours > 0) {\n spokenParts.push(`${hours} hour`);\n }\n if (minutes > 0) {\n spokenParts.push(`${minutes} min`);\n }\n if (seconds > 0 || spokenParts.length === 0) {\n spokenParts.push(`${seconds} sec`);\n }\n return spokenParts.join(\" \");\n}\n\nconst MEDIA_ATTRIBUTES = Symbol(0);\nconst mediaAttributes = [\n \"autoPlay\",\n \"canAirPlay\",\n \"canFullscreen\",\n \"canGoogleCast\",\n \"canLoad\",\n \"canLoadPoster\",\n \"canPictureInPicture\",\n \"canPlay\",\n \"canSeek\",\n \"ended\",\n \"fullscreen\",\n \"isAirPlayConnected\",\n \"isGoogleCastConnected\",\n \"live\",\n \"liveEdge\",\n \"loop\",\n \"mediaType\",\n \"muted\",\n \"paused\",\n \"pictureInPicture\",\n \"playing\",\n \"playsInline\",\n \"remotePlaybackState\",\n \"remotePlaybackType\",\n \"seeking\",\n \"started\",\n \"streamType\",\n \"viewType\",\n \"waiting\"\n];\n\nconst mediaPlayerProps = {\n artist: \"\",\n artwork: null,\n autoplay: false,\n autoPlay: false,\n clipStartTime: 0,\n clipEndTime: 0,\n controls: false,\n currentTime: 0,\n crossorigin: null,\n crossOrigin: null,\n duration: -1,\n fullscreenOrientation: \"landscape\",\n googleCast: {},\n load: \"visible\",\n posterLoad: \"visible\",\n logLevel: \"silent\",\n loop: false,\n muted: false,\n paused: true,\n playsinline: false,\n playsInline: false,\n playbackRate: 1,\n poster: \"\",\n preload: \"metadata\",\n preferNativeHLS: false,\n src: \"\",\n title: \"\",\n controlsDelay: 2e3,\n hideControlsOnMouseLeave: false,\n viewType: \"unknown\",\n streamType: \"unknown\",\n volume: 1,\n liveEdgeTolerance: 10,\n minLiveDVRWindow: 60,\n keyDisabled: false,\n keyTarget: \"player\",\n keyShortcuts: MEDIA_KEY_SHORTCUTS,\n storage: null\n};\n\nclass MediaLoadController extends MediaPlayerController {\n #type;\n #callback;\n constructor(type, callback) {\n super();\n this.#type = type;\n this.#callback = callback;\n }\n async onAttach(el) {\n if (IS_SERVER) return;\n const load = this.$props[this.#type]();\n if (load === \"eager\") {\n requestAnimationFrame(this.#callback);\n } else if (load === \"idle\") {\n waitIdlePeriod(this.#callback);\n } else if (load === \"visible\") {\n let dispose, observer = new IntersectionObserver((entries) => {\n if (!this.scope) return;\n if (entries[0].isIntersecting) {\n dispose?.();\n dispose = void 0;\n this.#callback();\n }\n });\n observer.observe(el);\n dispose = onDispose(() => observer.disconnect());\n }\n }\n}\n\nclass MediaPlayerDelegate {\n #handle;\n #media;\n constructor(handle, media) {\n this.#handle = handle;\n this.#media = media;\n }\n notify(type, ...init) {\n if (IS_SERVER) return;\n this.#handle(\n new DOMEvent(type, {\n detail: init?.[0],\n trigger: init?.[1]\n })\n );\n }\n async ready(info, trigger) {\n if (IS_SERVER) return;\n return untrack(async () => {\n const { logger } = this.#media, {\n autoPlay,\n canPlay,\n started,\n duration,\n seekable,\n buffered,\n remotePlaybackInfo,\n playsInline,\n savedState,\n source\n } = this.#media.$state;\n if (canPlay()) return;\n const detail = {\n duration: info?.duration ?? duration(),\n seekable: info?.seekable ?? seekable(),\n buffered: info?.buffered ?? buffered(),\n provider: this.#media.$provider()\n };\n this.notify(\"can-play\", detail, trigger);\n tick();\n let provider = this.#media.$provider(), { storage, qualities } = this.#media, { muted, volume, clipStartTime, playbackRate } = this.#media.$props;\n await storage?.onLoad?.(source());\n const savedPlaybackTime = savedState()?.currentTime, savedPausedState = savedState()?.paused, storageTime = await storage?.getTime(), startTime = savedPlaybackTime ?? storageTime ?? clipStartTime(), shouldAutoPlay = savedPausedState === false || savedPausedState !== true && !started() && autoPlay();\n if (provider) {\n provider.setVolume(await storage?.getVolume() ?? volume());\n provider.setMuted(muted() || !!await storage?.getMuted());\n const audioGain = await storage?.getAudioGain() ?? 1;\n if (audioGain > 1) provider.audioGain?.setGain?.(audioGain);\n provider.setPlaybackRate?.(await storage?.getPlaybackRate() ?? playbackRate());\n provider.setPlaysInline?.(playsInline());\n if (startTime > 0) provider.setCurrentTime(startTime);\n }\n const prefQuality = await storage?.getVideoQuality();\n if (prefQuality && qualities.length) {\n let currentQuality = null, currentScore = Infinity;\n for (const quality of qualities) {\n const score = Math.abs(prefQuality.width - quality.width) + Math.abs(prefQuality.height - quality.height) + (prefQuality.bitrate ? Math.abs(prefQuality.bitrate - (quality.bitrate ?? 0)) : 0);\n if (score < currentScore) {\n currentQuality = quality;\n currentScore = score;\n }\n }\n if (currentQuality) currentQuality.selected = true;\n }\n if (canPlay() && shouldAutoPlay) {\n await this.#attemptAutoplay(trigger);\n } else if (storageTime && storageTime > 0) {\n this.notify(\"started\", void 0, trigger);\n }\n remotePlaybackInfo.set(null);\n });\n }\n async #attemptAutoplay(trigger) {\n const {\n player,\n $state: { autoPlaying, muted }\n } = this.#media;\n autoPlaying.set(true);\n const attemptEvent = new DOMEvent(\"auto-play-attempt\", { trigger });\n try {\n await player.play(attemptEvent);\n } catch (error) {\n }\n }\n}\n\nclass Queue {\n #queue = /* @__PURE__ */ new Map();\n /**\n * Queue the given `item` under the given `key` to be processed at a later time by calling\n * `serve(key)`.\n */\n enqueue(key, item) {\n this.#queue.set(key, item);\n }\n /**\n * Process item in queue for the given `key`.\n */\n serve(key) {\n const value = this.peek(key);\n this.#queue.delete(key);\n return value;\n }\n /**\n * Peek at item in queue for the given `key`.\n */\n peek(key) {\n return this.#queue.get(key);\n }\n /**\n * Removes queued item under the given `key`.\n */\n delete(key) {\n this.#queue.delete(key);\n }\n /**\n * Clear all items in the queue.\n */\n clear() {\n this.#queue.clear();\n }\n}\n\nclass RequestQueue {\n #serving = false;\n #pending = deferredPromise();\n #queue = /* @__PURE__ */ new Map();\n /**\n * The number of callbacks that are currently in queue.\n */\n get size() {\n return this.#queue.size;\n }\n /**\n * Whether items in the queue are being served immediately, otherwise they're queued to\n * be processed later.\n */\n get isServing() {\n return this.#serving;\n }\n /**\n * Waits for the queue to be flushed (ie: start serving).\n */\n async waitForFlush() {\n if (this.#serving) return;\n await this.#pending.promise;\n }\n /**\n * Queue the given `callback` to be invoked at a later time by either calling the `serve()` or\n * `start()` methods. If the queue has started serving (i.e., `start()` was already called),\n * then the callback will be invoked immediately.\n *\n * @param key - Uniquely identifies this callback so duplicates are ignored.\n * @param callback - The function to call when this item in the queue is being served.\n */\n enqueue(key, callback) {\n if (this.#serving) {\n callback();\n return;\n }\n this.#queue.delete(key);\n this.#queue.set(key, callback);\n }\n /**\n * Invokes the callback with the given `key` in the queue (if it exists).\n */\n serve(key) {\n this.#queue.get(key)?.();\n this.#queue.delete(key);\n }\n /**\n * Flush all queued items and start serving future requests immediately until `stop()` is called.\n */\n start() {\n this.#flush();\n this.#serving = true;\n if (this.#queue.size > 0) this.#flush();\n }\n /**\n * Stop serving requests, they'll be queued until you begin processing again by calling `start()`.\n */\n stop() {\n this.#serving = false;\n }\n /**\n * Stop serving requests, empty the request queue, and release any promises waiting for the\n * queue to flush.\n */\n reset() {\n this.stop();\n this.#queue.clear();\n this.#release();\n }\n #flush() {\n for (const key of this.#queue.keys()) this.serve(key);\n this.#release();\n }\n #release() {\n this.#pending.resolve();\n this.#pending = deferredPromise();\n }\n}\n\nfunction ariaBool(value) {\n return value ? \"true\" : \"false\";\n}\nfunction $ariaBool(signal) {\n return () => ariaBool(signal());\n}\nfunction prefersReducedMotion() {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\nclass MediaRequestManager extends MediaPlayerController {\n #stateMgr;\n #request;\n #media;\n controls;\n #fullscreen;\n #orientation;\n #$provider;\n #providerQueue = new RequestQueue();\n constructor(stateMgr, request, media) {\n super();\n this.#stateMgr = stateMgr;\n this.#request = request;\n this.#media = media;\n this.#$provider = media.$provider;\n this.controls = new MediaControls();\n this.#fullscreen = new FullscreenController();\n this.#orientation = new ScreenOrientationController();\n }\n onAttach() {\n this.listen(\"fullscreen-change\", this.#onFullscreenChange.bind(this));\n }\n onConnect(el) {\n const names = Object.getOwnPropertyNames(Object.getPrototypeOf(this)), events = new EventsController(el), handleRequest = this.#handleRequest.bind(this);\n for (const name of names) {\n if (name.startsWith(\"media-\")) {\n events.add(name, handleRequest);\n }\n }\n this.#attachLoadPlayListener();\n effect(this.#watchProvider.bind(this));\n effect(this.#watchControlsDelayChange.bind(this));\n effect(this.#watchAudioGainSupport.bind(this));\n effect(this.#watchAirPlaySupport.bind(this));\n effect(this.#watchGoogleCastSupport.bind(this));\n effect(this.#watchFullscreenSupport.bind(this));\n effect(this.#watchPiPSupport.bind(this));\n }\n onDestroy() {\n try {\n const destroyEvent = this.createEvent(\"destroy\"), { pictureInPicture, fullscreen } = this.$state;\n if (fullscreen()) this.exitFullscreen(\"prefer-media\", destroyEvent);\n if (pictureInPicture()) this.exitPictureInPicture(destroyEvent);\n } catch (e) {\n }\n this.#providerQueue.reset();\n }\n #attachLoadPlayListener() {\n const { load } = this.$props, { canLoad } = this.$state;\n if (load() !== \"play\" || canLoad()) return;\n const off = this.listen(\"media-play-request\", (event) => {\n this.#handleLoadPlayStrategy(event);\n off();\n });\n }\n #watchProvider() {\n const provider = this.#$provider(), canPlay = this.$state.canPlay();\n if (provider && canPlay) {\n this.#providerQueue.start();\n }\n return () => {\n this.#providerQueue.stop();\n };\n }\n #handleRequest(event) {\n event.stopPropagation();\n if (event.defaultPrevented) return;\n if (!this[event.type]) return;\n if (peek(this.#$provider)) {\n this[event.type](event);\n } else {\n this.#providerQueue.enqueue(event.type, () => {\n if (peek(this.#$provider)) this[event.type](event);\n });\n }\n }\n async play(trigger) {\n if (IS_SERVER) return;\n const { canPlay, paused, autoPlaying } = this.$state;\n if (this.#handleLoadPlayStrategy(trigger)) return;\n if (!peek(paused)) return;\n if (trigger) this.#request.queue.enqueue(\"media-play-request\", trigger);\n const isAutoPlaying = peek(autoPlaying);\n try {\n const provider = peek(this.#$provider);\n throwIfNotReadyForPlayback(provider, peek(canPlay));\n throwIfAutoplayingWithReducedMotion(isAutoPlaying);\n return await provider.play();\n } catch (error) {\n const errorEvent = this.createEvent(\"play-fail\", {\n detail: coerceToError(error),\n trigger\n });\n errorEvent.autoPlay = isAutoPlaying;\n this.#stateMgr.handle(errorEvent);\n throw error;\n }\n }\n #handleLoadPlayStrategy(trigger) {\n const { load } = this.$props, { canLoad } = this.$state;\n if (load() === \"play\" && !canLoad()) {\n const event = this.createEvent(\"media-start-loading\", { trigger });\n this.dispatchEvent(event);\n this.#providerQueue.enqueue(\"media-play-request\", async () => {\n try {\n await this.play(event);\n } catch (error) {\n }\n });\n return true;\n }\n return false;\n }\n async pause(trigger) {\n if (IS_SERVER) return;\n const { canPlay, paused } = this.$state;\n if (peek(paused)) return;\n if (trigger) {\n this.#request.queue.enqueue(\"media-pause-request\", trigger);\n }\n try {\n const provider = peek(this.#$provider);\n throwIfNotReadyForPlayback(provider, peek(canPlay));\n return await provider.pause();\n } catch (error) {\n this.#request.queue.delete(\"media-pause-request\");\n throw error;\n }\n }\n setAudioGain(gain, trigger) {\n const { audioGain, canSetAudioGain } = this.$state;\n if (audioGain() === gain) return;\n const provider = this.#$provider();\n if (!provider?.audioGain || !canSetAudioGain()) {\n throw Error(\"[vidstack] audio gain api not available\");\n }\n if (trigger) {\n this.#request.queue.enqueue(\"media-audio-gain-change-request\", trigger);\n }\n provider.audioGain.setGain(gain);\n }\n seekToLiveEdge(trigger) {\n if (IS_SERVER) return;\n const { canPlay, live, liveEdge, canSeek, liveSyncPosition, seekableEnd, userBehindLiveEdge } = this.$state;\n userBehindLiveEdge.set(false);\n if (peek(() => !live() || liveEdge() || !canSeek())) return;\n const provider = peek(this.#$provider);\n throwIfNotReadyForPlayback(provider, peek(canPlay));\n if (trigger) this.#request.queue.enqueue(\"media-seek-request\", trigger);\n const end = seekableEnd() - 2;\n provider.setCurrentTime(Math.min(end, liveSyncPosition() ?? end));\n }\n #wasPIPActive = false;\n async enterFullscreen(target = \"prefer-media\", trigger) {\n if (IS_SERVER) return;\n const adapter = this.#getFullscreenAdapter(target);\n throwIfFullscreenNotSupported(target, adapter);\n if (adapter.active) return;\n if (peek(this.$state.pictureInPicture)) {\n this.#wasPIPActive = true;\n await this.exitPictureInPicture(trigger);\n }\n if (trigger) {\n this.#request.queue.enqueue(\"media-enter-fullscreen-request\", trigger);\n }\n return adapter.enter();\n }\n async exitFullscreen(target = \"prefer-media\", trigger) {\n if (IS_SERVER) return;\n const adapter = this.#getFullscreenAdapter(target);\n throwIfFullscreenNotSupported(target, adapter);\n if (!adapter.active) return;\n if (trigger) {\n this.#request.queue.enqueue(\"media-exit-fullscreen-request\", trigger);\n }\n try {\n const result = await adapter.exit();\n if (this.#wasPIPActive && peek(this.$state.canPictureInPicture)) {\n await this.enterPictureInPicture();\n }\n return result;\n } finally {\n this.#wasPIPActive = false;\n }\n }\n #getFullscreenAdapter(target) {\n const provider = peek(this.#$provider);\n return target === \"prefer-media\" && this.#fullscreen.supported || target === \"media\" ? this.#fullscreen : provider?.fullscreen;\n }\n async enterPictureInPicture(trigger) {\n if (IS_SERVER) return;\n this.#throwIfPIPNotSupported();\n if (this.$state.pictureInPicture()) return;\n if (trigger) {\n this.#request.queue.enqueue(\"media-enter-pip-request\", trigger);\n }\n return await this.#$provider().pictureInPicture.enter();\n }\n async exitPictureInPicture(trigger) {\n if (IS_SERVER) return;\n this.#throwIfPIPNotSupported();\n if (!this.$state.pictureInPicture()) return;\n if (trigger) {\n this.#request.queue.enqueue(\"media-exit-pip-request\", trigger);\n }\n return await this.#$provider().pictureInPicture.exit();\n }\n #throwIfPIPNotSupported() {\n if (this.$state.canPictureInPicture()) return;\n throw Error(\n \"[vidstack] no pip support\"\n );\n }\n #watchControlsDelayChange() {\n this.controls.defaultDelay = this.$props.controlsDelay();\n }\n #watchAudioGainSupport() {\n const { canSetAudioGain } = this.$state, supported = !!this.#$provider()?.audioGain?.supported;\n canSetAudioGain.set(supported);\n }\n #watchAirPlaySupport() {\n const { canAirPlay } = this.$state, supported = !!this.#$provider()?.airPlay?.supported;\n canAirPlay.set(supported);\n }\n #watchGoogleCastSupport() {\n const { canGoogleCast, source } = this.$state, supported = IS_CHROME && !IS_IOS && canGoogleCastSrc(source());\n canGoogleCast.set(supported);\n }\n #watchFullscreenSupport() {\n const { canFullscreen } = this.$state, supported = this.#fullscreen.supported || !!this.#$provider()?.fullscreen?.supported;\n canFullscreen.set(supported);\n }\n #watchPiPSupport() {\n const { canPictureInPicture } = this.$state, supported = !!this.#$provider()?.pictureInPicture?.supported;\n canPictureInPicture.set(supported);\n }\n async [\"media-airplay-request\"](event) {\n try {\n await this.requestAirPlay(event);\n } catch (error) {\n }\n }\n async requestAirPlay(trigger) {\n try {\n const adapter = this.#$provider()?.airPlay;\n if (!adapter?.supported) {\n throw Error(false ? \"AirPlay adapter not available on provider.\" : \"No AirPlay adapter.\");\n }\n if (trigger) {\n this.#request.queue.enqueue(\"media-airplay-request\", trigger);\n }\n return await adapter.prompt();\n } catch (error) {\n this.#request.queue.delete(\"media-airplay-request\");\n throw error;\n }\n }\n async [\"media-google-cast-request\"](event) {\n try {\n await this.requestGoogleCast(event);\n } catch (error) {\n }\n }\n #googleCastLoader;\n async requestGoogleCast(trigger) {\n try {\n const { canGoogleCast } = this.$state;\n if (!peek(canGoogleCast)) {\n const error = Error(\n false ? \"Google Cast not available on this platform.\" : \"Cast not available.\"\n );\n error.code = \"CAST_NOT_AVAILABLE\";\n throw error;\n }\n preconnect(\"https://www.gstatic.com\");\n if (!this.#googleCastLoader) {\n const $module = await import('./vidstack-CQQ1xKSy.js').then(function (n) { return n.loader; });\n this.#googleCastLoader = new $module.GoogleCastLoader();\n }\n await this.#googleCastLoader.prompt(this.#media);\n if (trigger) {\n this.#request.queue.enqueue(\"media-google-cast-request\", trigger);\n }\n const isConnecting = peek(this.$state.remotePlaybackState) !== \"disconnected\";\n if (isConnecting) {\n this.$state.savedState.set({\n paused: peek(this.$state.paused),\n currentTime: peek(this.$state.currentTime)\n });\n }\n this.$state.remotePlaybackLoader.set(isConnecting ? this.#googleCastLoader : null);\n } catch (error) {\n this.#request.queue.delete(\"media-google-cast-request\");\n throw error;\n }\n }\n [\"media-clip-start-change-request\"](event) {\n const { clipStartTime } = this.$state;\n clipStartTime.set(event.detail);\n }\n [\"media-clip-end-change-request\"](event) {\n const { clipEndTime } = this.$state;\n clipEndTime.set(event.detail);\n this.dispatch(\"duration-change\", {\n detail: event.detail,\n trigger: event\n });\n }\n [\"media-duration-change-request\"](event) {\n const { providedDuration, clipEndTime } = this.$state;\n providedDuration.set(event.detail);\n if (clipEndTime() <= 0) {\n this.dispatch(\"duration-change\", {\n detail: event.detail,\n trigger: event\n });\n }\n }\n [\"media-audio-track-change-request\"](event) {\n const { logger, audioTracks } = this.#media;\n if (audioTracks.readonly) {\n return;\n }\n const index = event.detail, track = audioTracks[index];\n if (track) {\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n track.selected = true;\n }\n }\n async [\"media-enter-fullscreen-request\"](event) {\n try {\n await this.enterFullscreen(event.detail, event);\n } catch (error) {\n this.#onFullscreenError(error, event);\n }\n }\n async [\"media-exit-fullscreen-request\"](event) {\n try {\n await this.exitFullscreen(event.detail, event);\n } catch (error) {\n this.#onFullscreenError(error, event);\n }\n }\n async #onFullscreenChange(event) {\n const lockType = peek(this.$props.fullscreenOrientation), isFullscreen = event.detail;\n if (isUndefined(lockType) || lockType === \"none\" || !this.#orientation.supported) return;\n if (isFullscreen) {\n if (this.#orientation.locked) return;\n this.dispatch(\"media-orientation-lock-request\", {\n detail: lockType,\n trigger: event\n });\n } else if (this.#orientation.locked) {\n this.dispatch(\"media-orientation-unlock-request\", {\n trigger: event\n });\n }\n }\n #onFullscreenError(error, request) {\n this.#stateMgr.handle(\n this.createEvent(\"fullscreen-error\", {\n detail: coerceToError(error)\n })\n );\n }\n async [\"media-orientation-lock-request\"](event) {\n const key = event.type;\n try {\n this.#request.queue.enqueue(key, event);\n await this.#orientation.lock(event.detail);\n } catch (error) {\n this.#request.queue.delete(key);\n }\n }\n async [\"media-orientation-unlock-request\"](event) {\n const key = event.type;\n try {\n this.#request.queue.enqueue(key, event);\n await this.#orientation.unlock();\n } catch (error) {\n this.#request.queue.delete(key);\n }\n }\n async [\"media-enter-pip-request\"](event) {\n try {\n await this.enterPictureInPicture(event);\n } catch (error) {\n this.#onPictureInPictureError(error, event);\n }\n }\n async [\"media-exit-pip-request\"](event) {\n try {\n await this.exitPictureInPicture(event);\n } catch (error) {\n this.#onPictureInPictureError(error, event);\n }\n }\n #onPictureInPictureError(error, request) {\n this.#stateMgr.handle(\n this.createEvent(\"picture-in-picture-error\", {\n detail: coerceToError(error)\n })\n );\n }\n [\"media-live-edge-request\"](event) {\n const { live, liveEdge, canSeek } = this.$state;\n if (!live() || liveEdge() || !canSeek()) return;\n this.#request.queue.enqueue(\"media-seek-request\", event);\n try {\n this.seekToLiveEdge();\n } catch (error) {\n this.#request.queue.delete(\"media-seek-request\");\n }\n }\n async [\"media-loop-request\"](event) {\n try {\n this.#request.looping = true;\n this.#request.replaying = true;\n await this.play(event);\n } catch (error) {\n this.#request.looping = false;\n }\n }\n [\"media-user-loop-change-request\"](event) {\n this.$state.userPrefersLoop.set(event.detail);\n }\n async [\"media-pause-request\"](event) {\n if (this.$state.paused()) return;\n try {\n await this.pause(event);\n } catch (error) {\n }\n }\n async [\"media-play-request\"](event) {\n if (!this.$state.paused()) return;\n try {\n await this.play(event);\n } catch (e) {\n }\n }\n [\"media-rate-change-request\"](event) {\n const { playbackRate, canSetPlaybackRate } = this.$state;\n if (playbackRate() === event.detail || !canSetPlaybackRate()) return;\n const provider = this.#$provider();\n if (!provider?.setPlaybackRate) return;\n this.#request.queue.enqueue(\"media-rate-change-request\", event);\n provider.setPlaybackRate(event.detail);\n }\n [\"media-audio-gain-change-request\"](event) {\n try {\n this.setAudioGain(event.detail, event);\n } catch (e) {\n }\n }\n [\"media-quality-change-request\"](event) {\n const { qualities, storage, logger } = this.#media;\n if (qualities.readonly) {\n return;\n }\n this.#request.queue.enqueue(\"media-quality-change-request\", event);\n const index = event.detail;\n if (index < 0) {\n qualities.autoSelect(event);\n if (event.isOriginTrusted) storage?.setVideoQuality?.(null);\n } else {\n const quality = qualities[index];\n if (quality) {\n quality.selected = true;\n if (event.isOriginTrusted) {\n storage?.setVideoQuality?.({\n id: quality.id,\n width: quality.width,\n height: quality.height,\n bitrate: quality.bitrate\n });\n }\n }\n }\n }\n [\"media-pause-controls-request\"](event) {\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n this.controls.pause(event);\n }\n [\"media-resume-controls-request\"](event) {\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n this.controls.resume(event);\n }\n [\"media-seek-request\"](event) {\n const { canSeek, ended, live, seekableEnd, userBehindLiveEdge } = this.$state, seekTime = event.detail;\n if (ended()) this.#request.replaying = true;\n const key = event.type;\n this.#request.seeking = false;\n this.#request.queue.delete(key);\n const boundedTime = boundTime(seekTime, this.$state);\n if (!Number.isFinite(boundedTime) || !canSeek()) return;\n this.#request.queue.enqueue(key, event);\n this.#$provider().setCurrentTime(boundedTime);\n if (live() && event.isOriginTrusted && Math.abs(seekableEnd() - boundedTime) >= 2) {\n userBehindLiveEdge.set(true);\n }\n }\n [\"media-seeking-request\"](event) {\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n this.$state.seeking.set(true);\n this.#request.seeking = true;\n }\n [\"media-start-loading\"](event) {\n if (this.$state.canLoad()) return;\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n this.#stateMgr.handle(this.createEvent(\"can-load\"));\n }\n [\"media-poster-start-loading\"](event) {\n if (this.$state.canLoadPoster()) return;\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n this.#stateMgr.handle(this.createEvent(\"can-load-poster\"));\n }\n [\"media-text-track-change-request\"](event) {\n const { index, mode } = event.detail, track = this.#media.textTracks[index];\n if (track) {\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n track.setMode(mode, event);\n }\n }\n [\"media-mute-request\"](event) {\n if (this.$state.muted()) return;\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n this.#$provider().setMuted(true);\n }\n [\"media-unmute-request\"](event) {\n const { muted, volume } = this.$state;\n if (!muted()) return;\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n this.#media.$provider().setMuted(false);\n if (volume() === 0) {\n this.#request.queue.enqueue(key, event);\n this.#$provider().setVolume(0.25);\n }\n }\n [\"media-volume-change-request\"](event) {\n const { muted, volume } = this.$state;\n const newVolume = event.detail;\n if (volume() === newVolume) return;\n const key = event.type;\n this.#request.queue.enqueue(key, event);\n this.#$provider().setVolume(newVolume);\n if (newVolume > 0 && muted()) {\n this.#request.queue.enqueue(key, event);\n this.#$provider().setMuted(false);\n }\n }\n #logError(title, error, request) {\n return;\n }\n}\nfunction throwIfNotReadyForPlayback(provider, canPlay) {\n if (provider && canPlay) return;\n throw Error(\n \"[vidstack] media not ready\"\n );\n}\nfunction throwIfFullscreenNotSupported(target, fullscreen) {\n if (fullscreen?.supported) return;\n throw Error(\n \"[vidstack] no fullscreen support\"\n );\n}\nfunction throwIfAutoplayingWithReducedMotion(autoplaying) {\n if (!prefersReducedMotion() || !autoplaying) return;\n throw Error(\n \"[vidstack] autoplay blocked\"\n );\n}\nclass MediaRequestContext {\n seeking = false;\n looping = false;\n replaying = false;\n queue = new Queue();\n}\n\nconst TRACKED_EVENT = /* @__PURE__ */ new Set([\n \"auto-play\",\n \"auto-play-fail\",\n \"can-load\",\n \"sources-change\",\n \"source-change\",\n \"load-start\",\n \"abort\",\n \"error\",\n \"loaded-metadata\",\n \"loaded-data\",\n \"can-play\",\n \"play\",\n \"play-fail\",\n \"pause\",\n \"playing\",\n \"seeking\",\n \"seeked\",\n \"waiting\"\n]);\n\nclass MediaStateManager extends MediaPlayerController {\n #request;\n #media;\n #trackedEvents = /* @__PURE__ */ new Map();\n #clipEnded = false;\n #playedIntervals = [];\n #playedInterval = [-1, -1];\n #firingWaiting = false;\n #waitingTrigger;\n constructor(request, media) {\n super();\n this.#request = request;\n this.#media = media;\n }\n onAttach(el) {\n el.setAttribute(\"aria-busy\", \"true\");\n new EventsController(this).add(\"fullscreen-change\", this[\"fullscreen-change\"].bind(this)).add(\"fullscreen-error\", this[\"fullscreen-error\"].bind(this)).add(\"orientation-change\", this[\"orientation-change\"].bind(this));\n }\n onConnect(el) {\n effect(this.#watchCanSetVolume.bind(this));\n this.#addTextTrackListeners();\n this.#addQualityListeners();\n this.#addAudioTrackListeners();\n this.#resumePlaybackOnConnect();\n onDispose(this.#pausePlaybackOnDisconnect.bind(this));\n }\n onDestroy() {\n const { audioTracks, qualities, textTracks } = this.#media;\n audioTracks[ListSymbol.reset]();\n qualities[ListSymbol.reset]();\n textTracks[ListSymbol.reset]();\n this.#stopWatchingQualityResize();\n }\n handle(event) {\n if (!this.scope) return;\n const type = event.type;\n untrack(() => this[event.type]?.(event));\n if (!IS_SERVER) {\n if (TRACKED_EVENT.has(type)) this.#trackedEvents.set(type, event);\n this.dispatch(event);\n }\n }\n #isPlayingOnDisconnect = false;\n #resumePlaybackOnConnect() {\n if (!this.#isPlayingOnDisconnect) return;\n requestAnimationFrame(() => {\n if (!this.scope) return;\n this.#media.remote.play(new DOMEvent(\"dom-connect\"));\n });\n this.#isPlayingOnDisconnect = false;\n }\n #pausePlaybackOnDisconnect() {\n if (this.#isPlayingOnDisconnect) return;\n this.#isPlayingOnDisconnect = !this.$state.paused();\n this.#media.$provider()?.pause();\n }\n #resetTracking() {\n this.#stopWaiting();\n this.#clipEnded = false;\n this.#request.replaying = false;\n this.#request.looping = false;\n this.#firingWaiting = false;\n this.#waitingTrigger = void 0;\n this.#trackedEvents.clear();\n }\n #satisfyRequest(request, event) {\n const requestEvent = this.#request.queue.serve(request);\n if (!requestEvent) return;\n event.request = requestEvent;\n event.triggers.add(requestEvent);\n }\n #addTextTrackListeners() {\n this.#onTextTracksChange();\n this.#onTextTrackModeChange();\n const textTracks = this.#media.textTracks;\n new EventsController(textTracks).add(\"add\", this.#onTextTracksChange.bind(this)).add(\"remove\", this.#onTextTracksChange.bind(this)).add(\"mode-change\", this.#onTextTrackModeChange.bind(this));\n }\n #addQualityListeners() {\n const qualities = this.#media.qualities;\n new EventsController(qualities).add(\"add\", this.#onQualitiesChange.bind(this)).add(\"remove\", this.#onQualitiesChange.bind(this)).add(\"change\", this.#onQualityChange.bind(this)).add(\"auto-change\", this.#onAutoQualityChange.bind(this)).add(\"readonly-change\", this.#onCanSetQualityChange.bind(this));\n }\n #addAudioTrackListeners() {\n const audioTracks = this.#media.audioTracks;\n new EventsController(audioTracks).add(\"add\", this.#onAudioTracksChange.bind(this)).add(\"remove\", this.#onAudioTracksChange.bind(this)).add(\"change\", this.#onAudioTrackChange.bind(this));\n }\n #onTextTracksChange(event) {\n const { textTracks } = this.$state;\n textTracks.set(this.#media.textTracks.toArray());\n this.dispatch(\"text-tracks-change\", {\n detail: textTracks(),\n trigger: event\n });\n }\n #onTextTrackModeChange(event) {\n if (event) this.#satisfyRequest(\"media-text-track-change-request\", event);\n const current = this.#media.textTracks.selected, { textTrack } = this.$state;\n if (textTrack() !== current) {\n textTrack.set(current);\n this.dispatch(\"text-track-change\", {\n detail: current,\n trigger: event\n });\n }\n }\n #onAudioTracksChange(event) {\n const { audioTracks } = this.$state;\n audioTracks.set(this.#media.audioTracks.toArray());\n this.dispatch(\"audio-tracks-change\", {\n detail: audioTracks(),\n trigger: event\n });\n }\n #onAudioTrackChange(event) {\n const { audioTrack } = this.$state;\n audioTrack.set(this.#media.audioTracks.selected);\n if (event) this.#satisfyRequest(\"media-audio-track-change-request\", event);\n this.dispatch(\"audio-track-change\", {\n detail: audioTrack(),\n trigger: event\n });\n }\n #onQualitiesChange(event) {\n const { qualities } = this.$state;\n qualities.set(this.#media.qualities.toArray());\n this.dispatch(\"qualities-change\", {\n detail: qualities(),\n trigger: event\n });\n }\n #onQualityChange(event) {\n const { quality } = this.$state;\n quality.set(this.#media.qualities.selected);\n if (event) this.#satisfyRequest(\"media-quality-change-request\", event);\n this.dispatch(\"quality-change\", {\n detail: quality(),\n trigger: event\n });\n }\n #onAutoQualityChange() {\n const { qualities } = this.#media, isAuto = qualities.auto;\n this.$state.autoQuality.set(isAuto);\n if (!isAuto) this.#stopWatchingQualityResize();\n }\n #stopQualityResizeEffect = null;\n #watchQualityResize() {\n this.#stopWatchingQualityResize();\n this.#stopQualityResizeEffect = effect(() => {\n const { qualities } = this.#media, { mediaWidth, mediaHeight } = this.$state, w = mediaWidth(), h = mediaHeight();\n if (w === 0 || h === 0) return;\n let selectedQuality = null, minScore = Infinity;\n for (const quality of qualities) {\n const score = Math.abs(quality.width - w) + Math.abs(quality.height - h);\n if (score < minScore) {\n minScore = score;\n selectedQuality = quality;\n }\n }\n if (selectedQuality) {\n qualities[ListSymbol.select](\n selectedQuality,\n true,\n new DOMEvent(\"resize\", { detail: { width: w, height: h } })\n );\n }\n });\n }\n #stopWatchingQualityResize() {\n this.#stopQualityResizeEffect?.();\n this.#stopQualityResizeEffect = null;\n }\n #onCanSetQualityChange() {\n this.$state.canSetQuality.set(!this.#media.qualities.readonly);\n }\n #watchCanSetVolume() {\n const { canSetVolume, isGoogleCastConnected } = this.$state;\n if (isGoogleCastConnected()) {\n canSetVolume.set(false);\n return;\n }\n canChangeVolume().then(canSetVolume.set);\n }\n [\"provider-change\"](event) {\n const prevProvider = this.#media.$provider(), newProvider = event.detail;\n if (prevProvider?.type === newProvider?.type) return;\n prevProvider?.destroy?.();\n prevProvider?.scope?.dispose();\n this.#media.$provider.set(event.detail);\n if (prevProvider && event.detail === null) {\n this.#resetMediaState(event);\n }\n }\n [\"provider-loader-change\"](event) {\n }\n [\"auto-play\"](event) {\n this.$state.autoPlayError.set(null);\n }\n [\"auto-play-fail\"](event) {\n this.$state.autoPlayError.set(event.detail);\n this.#resetTracking();\n }\n [\"can-load\"](event) {\n this.$state.canLoad.set(true);\n this.#trackedEvents.set(\"can-load\", event);\n this.#media.textTracks[TextTrackSymbol.canLoad]();\n this.#satisfyRequest(\"media-start-loading\", event);\n }\n [\"can-load-poster\"](event) {\n this.$state.canLoadPoster.set(true);\n this.#trackedEvents.set(\"can-load-poster\", event);\n this.#satisfyRequest(\"media-poster-start-loading\", event);\n }\n [\"media-type-change\"](event) {\n const sourceChangeEvent = this.#trackedEvents.get(\"source-change\");\n if (sourceChangeEvent) event.triggers.add(sourceChangeEvent);\n const viewType = this.$state.viewType();\n this.$state.mediaType.set(event.detail);\n const providedViewType = this.$state.providedViewType(), currentViewType = providedViewType === \"unknown\" ? event.detail : providedViewType;\n if (viewType !== currentViewType) {\n if (IS_SERVER) {\n this.$state.inferredViewType.set(currentViewType);\n } else {\n setTimeout(() => {\n requestAnimationFrame(() => {\n if (!this.scope) return;\n this.$state.inferredViewType.set(event.detail);\n this.dispatch(\"view-type-change\", {\n detail: currentViewType,\n trigger: event\n });\n });\n }, 0);\n }\n }\n }\n [\"stream-type-change\"](event) {\n const sourceChangeEvent = this.#trackedEvents.get(\"source-change\");\n if (sourceChangeEvent) event.triggers.add(sourceChangeEvent);\n const { streamType, inferredStreamType } = this.$state;\n inferredStreamType.set(event.detail);\n event.detail = streamType();\n }\n [\"rate-change\"](event) {\n const { storage } = this.#media, { canPlay } = this.$state;\n this.$state.playbackRate.set(event.detail);\n this.#satisfyRequest(\"media-rate-change-request\", event);\n if (canPlay()) {\n storage?.setPlaybackRate?.(event.detail);\n }\n }\n [\"remote-playback-change\"](event) {\n const { remotePlaybackState, remotePlaybackType } = this.$state, { type, state } = event.detail, isConnected = state === \"connected\";\n remotePlaybackType.set(type);\n remotePlaybackState.set(state);\n const key = type === \"airplay\" ? \"media-airplay-request\" : \"media-google-cast-request\";\n if (isConnected) {\n this.#satisfyRequest(key, event);\n } else {\n const requestEvent = this.#request.queue.peek(key);\n if (requestEvent) {\n event.request = requestEvent;\n event.triggers.add(requestEvent);\n }\n }\n }\n [\"sources-change\"](event) {\n const prevSources = this.$state.sources(), newSources = event.detail;\n this.$state.sources.set(newSources);\n this.#onSourceQualitiesChange(prevSources, newSources, event);\n }\n #onSourceQualitiesChange(prevSources, newSources, trigger) {\n let { qualities } = this.#media, added = false, removed = false;\n for (const prevSrc of prevSources) {\n if (!isVideoQualitySrc(prevSrc)) continue;\n const exists = newSources.some((s) => s.src === prevSrc.src);\n if (!exists) {\n const quality = qualities.getBySrc(prevSrc.src);\n if (quality) {\n qualities[ListSymbol.remove](quality, trigger);\n removed = true;\n }\n }\n }\n if (removed && !qualities.length) {\n this.$state.savedState.set(null);\n qualities[ListSymbol.reset](trigger);\n }\n for (const src of newSources) {\n if (!isVideoQualitySrc(src) || qualities.getBySrc(src.src)) continue;\n const quality = {\n id: src.id ?? src.height + \"p\",\n bitrate: null,\n codec: null,\n ...src,\n selected: false\n };\n qualities[ListSymbol.add](quality, trigger);\n added = true;\n }\n if (added && !qualities[QualitySymbol.enableAuto]) {\n this.#watchQualityResize();\n qualities[QualitySymbol.enableAuto] = this.#watchQualityResize.bind(this);\n qualities[QualitySymbol.setAuto](true, trigger);\n }\n }\n [\"source-change\"](event) {\n event.isQualityChange = event.originEvent?.type === \"quality-change\";\n const source = event.detail;\n this.#resetMediaState(event, event.isQualityChange);\n this.#trackedEvents.set(event.type, event);\n this.$state.source.set(source);\n this.el?.setAttribute(\"aria-busy\", \"true\");\n }\n #resetMediaState(event, isSourceQualityChange = false) {\n const { audioTracks, qualities } = this.#media;\n if (!isSourceQualityChange) {\n this.#playedIntervals = [];\n this.#playedInterval = [-1, -1];\n audioTracks[ListSymbol.reset](event);\n qualities[ListSymbol.reset](event);\n softResetMediaState(this.$state, isSourceQualityChange);\n this.#resetTracking();\n return;\n }\n softResetMediaState(this.$state, isSourceQualityChange);\n this.#resetTracking();\n }\n [\"abort\"](event) {\n const sourceChangeEvent = this.#trackedEvents.get(\"source-change\");\n if (sourceChangeEvent) event.triggers.add(sourceChangeEvent);\n const canLoadEvent = this.#trackedEvents.get(\"can-load\");\n if (canLoadEvent && !event.triggers.hasType(\"can-load\")) {\n event.triggers.add(canLoadEvent);\n }\n }\n [\"load-start\"](event) {\n const sourceChangeEvent = this.#trackedEvents.get(\"source-change\");\n if (sourceChangeEvent) event.triggers.add(sourceChangeEvent);\n }\n [\"error\"](event) {\n this.$state.error.set(event.detail);\n const abortEvent = this.#trackedEvents.get(\"abort\");\n if (abortEvent) event.triggers.add(abortEvent);\n }\n [\"loaded-metadata\"](event) {\n const loadStartEvent = this.#trackedEvents.get(\"load-start\");\n if (loadStartEvent) event.triggers.add(loadStartEvent);\n }\n [\"loaded-data\"](event) {\n const loadStartEvent = this.#trackedEvents.get(\"load-start\");\n if (loadStartEvent) event.triggers.add(loadStartEvent);\n }\n [\"can-play\"](event) {\n const loadedMetadata = this.#trackedEvents.get(\"loaded-metadata\");\n if (loadedMetadata) event.triggers.add(loadedMetadata);\n this.#onCanPlayDetail(event.detail);\n this.el?.setAttribute(\"aria-busy\", \"false\");\n }\n [\"can-play-through\"](event) {\n this.#onCanPlayDetail(event.detail);\n const canPlay = this.#trackedEvents.get(\"can-play\");\n if (canPlay) event.triggers.add(canPlay);\n }\n #onCanPlayDetail(detail) {\n const { seekable, buffered, intrinsicDuration, canPlay } = this.$state;\n canPlay.set(true);\n buffered.set(detail.buffered);\n seekable.set(detail.seekable);\n const seekableEnd = getTimeRangesEnd(detail.seekable) ?? Infinity;\n intrinsicDuration.set(seekableEnd);\n }\n [\"duration-change\"](event) {\n const { live, intrinsicDuration, providedDuration, clipEndTime, ended } = this.$state, time = event.detail;\n if (!live()) {\n const duration = !Number.isNaN(time) ? time : 0;\n intrinsicDuration.set(duration);\n if (ended()) this.#onEndPrecisionChange(event);\n }\n if (providedDuration() > 0 || clipEndTime() > 0) {\n event.stopImmediatePropagation();\n }\n }\n [\"progress\"](event) {\n const { buffered, seekable } = this.$state, { buffered: newBuffered, seekable: newSeekable } = event.detail, newBufferedEnd = getTimeRangesEnd(newBuffered), hasBufferedLengthChanged = newBuffered.length !== buffered().length, hasBufferedEndChanged = newBufferedEnd !== getTimeRangesEnd(buffered()), newSeekableEnd = getTimeRangesEnd(newSeekable), hasSeekableLengthChanged = newSeekable.length !== seekable().length, hasSeekableEndChanged = newSeekableEnd !== getTimeRangesEnd(seekable());\n if (hasBufferedLengthChanged || hasBufferedEndChanged) {\n buffered.set(newBuffered);\n }\n if (hasSeekableLengthChanged || hasSeekableEndChanged) {\n seekable.set(newSeekable);\n }\n }\n [\"play\"](event) {\n const {\n paused,\n autoPlayError,\n ended,\n autoPlaying,\n playsInline,\n pointer,\n muted,\n viewType,\n live,\n userBehindLiveEdge\n } = this.$state;\n this.#resetPlaybackIfNeeded();\n if (!paused()) {\n event.stopImmediatePropagation();\n return;\n }\n event.autoPlay = autoPlaying();\n const waitingEvent = this.#trackedEvents.get(\"waiting\");\n if (waitingEvent) event.triggers.add(waitingEvent);\n this.#satisfyRequest(\"media-play-request\", event);\n this.#trackedEvents.set(\"play\", event);\n paused.set(false);\n autoPlayError.set(null);\n if (event.autoPlay) {\n this.handle(\n this.createEvent(\"auto-play\", {\n detail: { muted: muted() },\n trigger: event\n })\n );\n autoPlaying.set(false);\n }\n if (ended() || this.#request.replaying) {\n this.#request.replaying = false;\n ended.set(false);\n this.handle(this.createEvent(\"replay\", { trigger: event }));\n }\n if (!playsInline() && viewType() === \"video\" && pointer() === \"coarse\") {\n this.#media.remote.enterFullscreen(\"prefer-media\", event);\n }\n if (live() && !userBehindLiveEdge()) {\n this.#media.remote.seekToLiveEdge(event);\n }\n }\n #resetPlaybackIfNeeded(trigger) {\n const provider = peek(this.#media.$provider);\n if (!provider) return;\n const { ended, seekableStart, clipEndTime, currentTime, realCurrentTime, duration } = this.$state;\n const shouldReset = ended() || realCurrentTime() < seekableStart() || clipEndTime() > 0 && realCurrentTime() >= clipEndTime() || Math.abs(currentTime() - duration()) < 0.1;\n if (shouldReset) {\n this.dispatch(\"media-seek-request\", {\n detail: seekableStart(),\n trigger\n });\n }\n return shouldReset;\n }\n [\"play-fail\"](event) {\n const { muted, autoPlaying } = this.$state;\n const playEvent = this.#trackedEvents.get(\"play\");\n if (playEvent) event.triggers.add(playEvent);\n this.#satisfyRequest(\"media-play-request\", event);\n const { paused, playing } = this.$state;\n paused.set(true);\n playing.set(false);\n this.#resetTracking();\n this.#trackedEvents.set(\"play-fail\", event);\n if (event.autoPlay) {\n this.handle(\n this.createEvent(\"auto-play-fail\", {\n detail: {\n muted: muted(),\n error: event.detail\n },\n trigger: event\n })\n );\n autoPlaying.set(false);\n }\n }\n [\"playing\"](event) {\n const playEvent = this.#trackedEvents.get(\"play\"), seekedEvent = this.#trackedEvents.get(\"seeked\");\n if (playEvent) event.triggers.add(playEvent);\n else if (seekedEvent) event.triggers.add(seekedEvent);\n setTimeout(() => this.#resetTracking(), 0);\n const {\n paused,\n playing,\n live,\n liveSyncPosition,\n seekableEnd,\n started,\n currentTime,\n seeking,\n ended\n } = this.$state;\n paused.set(false);\n playing.set(true);\n seeking.set(false);\n ended.set(false);\n if (this.#request.looping) {\n this.#request.looping = false;\n return;\n }\n if (live() && !started() && currentTime() === 0) {\n const end = liveSyncPosition() ?? seekableEnd() - 2;\n if (Number.isFinite(end)) this.#media.$provider().setCurrentTime(end);\n }\n this[\"started\"](event);\n }\n [\"started\"](event) {\n const { started } = this.$state;\n if (!started()) {\n started.set(true);\n this.handle(this.createEvent(\"started\", { trigger: event }));\n }\n }\n [\"pause\"](event) {\n if (!this.el?.isConnected) {\n this.#isPlayingOnDisconnect = true;\n }\n this.#satisfyRequest(\"media-pause-request\", event);\n const seekedEvent = this.#trackedEvents.get(\"seeked\");\n if (seekedEvent) event.triggers.add(seekedEvent);\n const { paused, playing } = this.$state;\n paused.set(true);\n playing.set(false);\n if (this.#clipEnded) {\n setTimeout(() => {\n this.handle(this.createEvent(\"end\", { trigger: event }));\n this.#clipEnded = false;\n }, 0);\n }\n this.#resetTracking();\n }\n [\"time-change\"](event) {\n if (this.#request.looping) {\n event.stopImmediatePropagation();\n return;\n }\n let { waiting, played, clipEndTime, realCurrentTime, currentTime } = this.$state, newTime = event.detail, endTime = clipEndTime();\n realCurrentTime.set(newTime);\n this.#updatePlayed();\n waiting.set(false);\n for (const track of this.#media.textTracks) {\n track[TextTrackSymbol.updateActiveCues](newTime, event);\n }\n if (endTime > 0 && newTime >= endTime) {\n this.#clipEnded = true;\n this.dispatch(\"media-pause-request\", { trigger: event });\n }\n this.#saveTime();\n this.dispatch(\"time-update\", {\n detail: { currentTime: currentTime(), played: played() },\n trigger: event\n });\n }\n #updatePlayed() {\n const { currentTime, played, paused } = this.$state;\n if (paused()) return;\n this.#playedInterval = updateTimeIntervals(\n this.#playedIntervals,\n this.#playedInterval,\n currentTime()\n );\n played.set(new TimeRange(this.#playedIntervals));\n }\n // Called to update time again incase duration precision has changed.\n #onEndPrecisionChange(trigger) {\n const { clipStartTime, clipEndTime, duration } = this.$state, isClipped = clipStartTime() > 0 || clipEndTime() > 0;\n if (isClipped) return;\n this.handle(\n this.createEvent(\"time-change\", {\n detail: duration(),\n trigger\n })\n );\n }\n #saveTime() {\n const { storage } = this.#media, { canPlay, realCurrentTime } = this.$state;\n if (canPlay()) {\n storage?.setTime?.(realCurrentTime());\n }\n }\n [\"audio-gain-change\"](event) {\n const { storage } = this.#media, { canPlay, audioGain } = this.$state;\n audioGain.set(event.detail);\n this.#satisfyRequest(\"media-audio-gain-change-request\", event);\n if (canPlay()) storage?.setAudioGain?.(audioGain());\n }\n [\"volume-change\"](event) {\n const { storage } = this.#media, { volume, muted, canPlay } = this.$state, detail = event.detail;\n volume.set(detail.volume);\n muted.set(detail.muted || detail.volume === 0);\n this.#satisfyRequest(\"media-volume-change-request\", event);\n this.#satisfyRequest(detail.muted ? \"media-mute-request\" : \"media-unmute-request\", event);\n if (canPlay()) {\n storage?.setVolume?.(volume());\n storage?.setMuted?.(muted());\n }\n }\n [\"seeking\"] = functionThrottle(\n (event) => {\n const { seeking, realCurrentTime, paused } = this.$state;\n seeking.set(true);\n realCurrentTime.set(event.detail);\n this.#satisfyRequest(\"media-seeking-request\", event);\n if (paused()) {\n this.#waitingTrigger = event;\n this.#fireWaiting();\n }\n this.#playedInterval = [-1, -1];\n },\n 150,\n { leading: true }\n );\n [\"seeked\"](event) {\n const { seeking, currentTime, realCurrentTime, paused, seekableEnd, ended, live } = this.$state;\n if (this.#request.seeking) {\n seeking.set(true);\n event.stopImmediatePropagation();\n } else if (seeking()) {\n const waitingEvent = this.#trackedEvents.get(\"waiting\");\n if (waitingEvent) event.triggers.add(waitingEvent);\n const seekingEvent = this.#trackedEvents.get(\"seeking\");\n if (seekingEvent && !event.triggers.has(seekingEvent)) {\n event.triggers.add(seekingEvent);\n }\n if (paused()) this.#stopWaiting();\n seeking.set(false);\n realCurrentTime.set(event.detail);\n this.#satisfyRequest(\"media-seek-request\", event);\n const origin = event?.originEvent;\n if (origin?.isTrusted && !(origin instanceof MessageEvent) && !/seek/.test(origin.type)) {\n this[\"started\"](event);\n }\n }\n if (!live()) {\n if (Math.floor(currentTime()) !== Math.floor(seekableEnd())) {\n ended.set(false);\n } else {\n this.end(event);\n }\n }\n }\n [\"waiting\"](event) {\n if (this.#firingWaiting || this.#request.seeking) return;\n event.stopImmediatePropagation();\n this.#waitingTrigger = event;\n this.#fireWaiting();\n }\n #fireWaiting = functionDebounce(() => {\n if (!this.#waitingTrigger) return;\n this.#firingWaiting = true;\n const { waiting, playing } = this.$state;\n waiting.set(true);\n playing.set(false);\n const event = this.createEvent(\"waiting\", { trigger: this.#waitingTrigger });\n this.#trackedEvents.set(\"waiting\", event);\n this.dispatch(event);\n this.#waitingTrigger = void 0;\n this.#firingWaiting = false;\n }, 300);\n [\"end\"](event) {\n const { loop, ended } = this.$state;\n if (!loop() && ended()) return;\n if (loop()) {\n setTimeout(() => {\n requestAnimationFrame(() => {\n this.#resetPlaybackIfNeeded(event);\n this.dispatch(\"media-loop-request\", { trigger: event });\n });\n }, 10);\n return;\n }\n setTimeout(() => this.#onEnded(event), 0);\n }\n #onEnded(event) {\n const { storage } = this.#media, { paused, seeking, ended, duration } = this.$state;\n this.#onEndPrecisionChange(event);\n if (!paused()) {\n this.dispatch(\"pause\", { trigger: event });\n }\n if (seeking()) {\n this.dispatch(\"seeked\", {\n detail: duration(),\n trigger: event\n });\n }\n ended.set(true);\n this.#resetTracking();\n storage?.setTime?.(duration(), true);\n this.dispatch(\"ended\", {\n trigger: event\n });\n }\n #stopWaiting() {\n this.#fireWaiting.cancel();\n this.$state.waiting.set(false);\n }\n [\"fullscreen-change\"](event) {\n const isFullscreen = event.detail;\n this.$state.fullscreen.set(isFullscreen);\n this.#satisfyRequest(\n isFullscreen ? \"media-enter-fullscreen-request\" : \"media-exit-fullscreen-request\",\n event\n );\n }\n [\"fullscreen-error\"](event) {\n this.#satisfyRequest(\"media-enter-fullscreen-request\", event);\n this.#satisfyRequest(\"media-exit-fullscreen-request\", event);\n }\n [\"orientation-change\"](event) {\n const isLocked = event.detail.lock;\n this.#satisfyRequest(\n isLocked ? \"media-orientation-lock-request\" : \"media-orientation-unlock-request\",\n event\n );\n }\n [\"picture-in-picture-change\"](event) {\n const isPiP = event.detail;\n this.$state.pictureInPicture.set(isPiP);\n this.#satisfyRequest(isPiP ? \"media-enter-pip-request\" : \"media-exit-pip-request\", event);\n }\n [\"picture-in-picture-error\"](event) {\n this.#satisfyRequest(\"media-enter-pip-request\", event);\n this.#satisfyRequest(\"media-exit-pip-request\", event);\n }\n [\"title-change\"](event) {\n if (!event.trigger) return;\n event.stopImmediatePropagation();\n this.$state.inferredTitle.set(event.detail);\n }\n [\"poster-change\"](event) {\n if (!event.trigger) return;\n event.stopImmediatePropagation();\n this.$state.inferredPoster.set(event.detail);\n }\n}\n\nclass MediaStateSync extends MediaPlayerController {\n onSetup() {\n this.#init();\n if (IS_SERVER) return;\n const effects = [\n this.#watchMetadata,\n this.#watchAutoplay,\n this.#watchClipStartTime,\n this.#watchClipEndTime,\n this.#watchControls,\n this.#watchCrossOrigin,\n this.#watchDuration,\n this.#watchLive,\n this.#watchLiveEdge,\n this.#watchLiveTolerance,\n this.#watchLoop,\n this.#watchPlaysInline,\n this.#watchPoster,\n this.#watchProvidedTypes,\n this.#watchTitle\n ];\n for (const callback of effects) {\n effect(callback.bind(this));\n }\n }\n #init() {\n const providedProps = {\n duration: \"providedDuration\",\n loop: \"providedLoop\",\n poster: \"providedPoster\",\n streamType: \"providedStreamType\",\n title: \"providedTitle\",\n viewType: \"providedViewType\"\n };\n const skip = /* @__PURE__ */ new Set([\n \"currentTime\",\n \"paused\",\n \"playbackRate\",\n \"volume\"\n ]);\n for (const prop of Object.keys(this.$props)) {\n if (skip.has(prop)) continue;\n this.$state[providedProps[prop] ?? prop]?.set(this.$props[prop]());\n }\n this.$state.muted.set(this.$props.muted() || this.$props.volume() === 0);\n }\n // Sync \"provided\" props with internal state. Provided props are used to differentiate from\n // provider inferred values.\n #watchProvidedTypes() {\n const { viewType, streamType, title, poster, loop } = this.$props, $state = this.$state;\n $state.providedPoster.set(poster());\n $state.providedStreamType.set(streamType());\n $state.providedViewType.set(viewType());\n $state.providedTitle.set(title());\n $state.providedLoop.set(loop());\n }\n #watchLogLevel() {\n return;\n }\n #watchMetadata() {\n const { artist, artwork } = this.$props;\n this.$state.artist.set(artist());\n this.$state.artwork.set(artwork());\n }\n #watchTitle() {\n const { title } = this.$state;\n this.dispatch(\"title-change\", { detail: title() });\n }\n #watchAutoplay() {\n const autoPlay = this.$props.autoPlay() || this.$props.autoplay();\n this.$state.autoPlay.set(autoPlay);\n this.dispatch(\"auto-play-change\", { detail: autoPlay });\n }\n #watchLoop() {\n const loop = this.$state.loop();\n this.dispatch(\"loop-change\", { detail: loop });\n }\n #watchControls() {\n const controls = this.$props.controls();\n this.$state.controls.set(controls);\n }\n #watchPoster() {\n const { poster } = this.$state;\n this.dispatch(\"poster-change\", { detail: poster() });\n }\n #watchCrossOrigin() {\n const crossOrigin = this.$props.crossOrigin() ?? this.$props.crossorigin(), value = crossOrigin === true ? \"\" : crossOrigin;\n this.$state.crossOrigin.set(value);\n }\n #watchDuration() {\n const { duration } = this.$props;\n this.dispatch(\"media-duration-change-request\", {\n detail: duration()\n });\n }\n #watchPlaysInline() {\n const inline = this.$props.playsInline() || this.$props.playsinline();\n this.$state.playsInline.set(inline);\n this.dispatch(\"plays-inline-change\", { detail: inline });\n }\n #watchClipStartTime() {\n const { clipStartTime } = this.$props;\n this.dispatch(\"media-clip-start-change-request\", {\n detail: clipStartTime()\n });\n }\n #watchClipEndTime() {\n const { clipEndTime } = this.$props;\n this.dispatch(\"media-clip-end-change-request\", {\n detail: clipEndTime()\n });\n }\n #watchLive() {\n this.dispatch(\"live-change\", { detail: this.$state.live() });\n }\n #watchLiveTolerance() {\n this.$state.liveEdgeTolerance.set(this.$props.liveEdgeTolerance());\n this.$state.minLiveDVRWindow.set(this.$props.minLiveDVRWindow());\n }\n #watchLiveEdge() {\n this.dispatch(\"live-edge-change\", { detail: this.$state.liveEdge() });\n }\n}\n\nconst actions = [\"play\", \"pause\", \"seekforward\", \"seekbackward\", \"seekto\"];\nclass NavigatorMediaSession extends MediaPlayerController {\n onConnect() {\n effect(this.#onMetadataChange.bind(this));\n effect(this.#onPlaybackStateChange.bind(this));\n const handleAction = this.#handleAction.bind(this);\n for (const action of actions) {\n navigator.mediaSession.setActionHandler(action, handleAction);\n }\n onDispose(this.#onDisconnect.bind(this));\n }\n #onDisconnect() {\n for (const action of actions) {\n navigator.mediaSession.setActionHandler(action, null);\n }\n }\n #onMetadataChange() {\n const { title, artist, artwork, poster } = this.$state;\n navigator.mediaSession.metadata = new MediaMetadata({\n title: title(),\n artist: artist(),\n artwork: artwork() ?? [{ src: poster() }]\n });\n }\n #onPlaybackStateChange() {\n const { canPlay, paused } = this.$state;\n navigator.mediaSession.playbackState = !canPlay() ? \"none\" : paused() ? \"paused\" : \"playing\";\n }\n #handleAction(details) {\n const trigger = new DOMEvent(`media-session-action`, { detail: details });\n switch (details.action) {\n case \"play\":\n this.dispatch(\"media-play-request\", { trigger });\n break;\n case \"pause\":\n this.dispatch(\"media-pause-request\", { trigger });\n break;\n case \"seekto\":\n case \"seekforward\":\n case \"seekbackward\":\n this.dispatch(\"media-seek-request\", {\n detail: isNumber(details.seekTime) ? details.seekTime : this.$state.currentTime() + (details.seekOffset ?? (details.action === \"seekforward\" ? 10 : -10)),\n trigger\n });\n break;\n }\n }\n}\n\nlet $keyboard = signal(false);\nif (!IS_SERVER) {\n listenEvent(document, \"pointerdown\", () => {\n $keyboard.set(false);\n });\n listenEvent(document, \"keydown\", (e) => {\n if (e.metaKey || e.altKey || e.ctrlKey) return;\n $keyboard.set(true);\n });\n}\nclass FocusVisibleController extends ViewController {\n #focused = signal(false);\n onConnect(el) {\n effect(() => {\n const events = new EventsController(el);\n if (!$keyboard()) {\n this.#focused.set(false);\n updateFocusAttr(el, false);\n events.add(\"pointerenter\", this.#onPointerEnter.bind(this)).add(\"pointerleave\", this.#onPointerLeave.bind(this));\n return;\n }\n const active = document.activeElement === el;\n this.#focused.set(active);\n updateFocusAttr(el, active);\n events.add(\"focus\", this.#onFocus.bind(this)).add(\"blur\", this.#onBlur.bind(this));\n });\n }\n focused() {\n return this.#focused();\n }\n #onFocus() {\n this.#focused.set(true);\n updateFocusAttr(this.el, true);\n }\n #onBlur() {\n this.#focused.set(false);\n updateFocusAttr(this.el, false);\n }\n #onPointerEnter() {\n updateHoverAttr(this.el, true);\n }\n #onPointerLeave() {\n updateHoverAttr(this.el, false);\n }\n}\nfunction updateFocusAttr(el, isFocused) {\n setAttribute(el, \"data-focus\", isFocused);\n setAttribute(el, \"data-hocus\", isFocused);\n}\nfunction updateHoverAttr(el, isHovering) {\n setAttribute(el, \"data-hocus\", isHovering);\n setAttribute(el, \"data-hover\", isHovering);\n}\n\nclass MediaPlayer extends Component {\n static props = mediaPlayerProps;\n static state = mediaState;\n #media;\n #stateMgr;\n #requestMgr;\n canPlayQueue = new RequestQueue();\n remoteControl;\n get #provider() {\n return this.#media.$provider();\n }\n get #props() {\n return this.$props;\n }\n constructor() {\n super();\n new MediaStateSync();\n const context = {\n player: this,\n qualities: new VideoQualityList(),\n audioTracks: new AudioTrackList(),\n storage: null,\n $provider: signal(null),\n $providerSetup: signal(false),\n $props: this.$props,\n $state: this.$state\n };\n context.remote = this.remoteControl = new MediaRemoteControl(\n void 0\n );\n context.remote.setPlayer(this);\n context.textTracks = new TextTrackList();\n context.textTracks[TextTrackSymbol.crossOrigin] = this.$state.crossOrigin;\n context.textRenderers = new TextRenderers(context);\n context.ariaKeys = {};\n this.#media = context;\n provideContext(mediaContext, context);\n this.orientation = new ScreenOrientationController();\n new FocusVisibleController();\n new MediaKeyboardController(context);\n const request = new MediaRequestContext();\n this.#stateMgr = new MediaStateManager(request, context);\n this.#requestMgr = new MediaRequestManager(this.#stateMgr, request, context);\n context.delegate = new MediaPlayerDelegate(this.#stateMgr.handle.bind(this.#stateMgr), context);\n context.notify = context.delegate.notify.bind(context.delegate);\n if (typeof navigator !== \"undefined\" && \"mediaSession\" in navigator) {\n new NavigatorMediaSession();\n }\n new MediaLoadController(\"load\", this.startLoading.bind(this));\n new MediaLoadController(\"posterLoad\", this.startLoadingPoster.bind(this));\n }\n onSetup() {\n this.#setupMediaAttributes();\n effect(this.#watchCanPlay.bind(this));\n effect(this.#watchMuted.bind(this));\n effect(this.#watchPaused.bind(this));\n effect(this.#watchVolume.bind(this));\n effect(this.#watchCurrentTime.bind(this));\n effect(this.#watchPlaysInline.bind(this));\n effect(this.#watchPlaybackRate.bind(this));\n }\n onAttach(el) {\n el.setAttribute(\"data-media-player\", \"\");\n setAttributeIfEmpty(el, \"tabindex\", \"0\");\n setAttributeIfEmpty(el, \"role\", \"region\");\n effect(this.#watchStorage.bind(this));\n if (IS_SERVER) this.#watchTitle();\n else effect(this.#watchTitle.bind(this));\n if (IS_SERVER) this.#watchOrientation();\n else effect(this.#watchOrientation.bind(this));\n listenEvent(el, \"find-media-player\", this.#onFindPlayer.bind(this));\n }\n onConnect(el) {\n if (IS_IPHONE) setAttribute(el, \"data-iphone\", \"\");\n const pointerQuery = window.matchMedia(\"(pointer: coarse)\");\n this.#onPointerChange(pointerQuery);\n pointerQuery.onchange = this.#onPointerChange.bind(this);\n const resize = new ResizeObserver(animationFrameThrottle(this.#onResize.bind(this)));\n resize.observe(el);\n effect(this.#onResize.bind(this));\n this.dispatch(\"media-player-connect\", {\n detail: this,\n bubbles: true,\n composed: true\n });\n onDispose(() => {\n resize.disconnect();\n pointerQuery.onchange = null;\n });\n }\n onDestroy() {\n this.#media.player = null;\n this.canPlayQueue.reset();\n }\n #skipTitleUpdate = false;\n #watchTitle() {\n const el = this.$el, { title, live, viewType, providedTitle } = this.$state, isLive = live(), type = uppercaseFirstChar(viewType()), typeText = type !== \"Unknown\" ? `${isLive ? \"Live \" : \"\"}${type}` : isLive ? \"Live\" : \"Media\", currentTitle = title();\n setAttribute(\n this.el,\n \"aria-label\",\n `${typeText} Player` + (currentTitle ? ` - ${currentTitle}` : \"\")\n );\n if (!IS_SERVER && el?.hasAttribute(\"title\")) {\n this.#skipTitleUpdate = true;\n el?.removeAttribute(\"title\");\n }\n }\n #watchOrientation() {\n const orientation = this.orientation.landscape ? \"landscape\" : \"portrait\";\n this.$state.orientation.set(orientation);\n setAttribute(this.el, \"data-orientation\", orientation);\n this.#onResize();\n }\n #watchCanPlay() {\n if (this.$state.canPlay() && this.#provider) this.canPlayQueue.start();\n else this.canPlayQueue.stop();\n }\n #setupMediaAttributes() {\n if (MediaPlayer[MEDIA_ATTRIBUTES]) {\n this.setAttributes(MediaPlayer[MEDIA_ATTRIBUTES]);\n return;\n }\n const $attrs = {\n \"data-load\": function() {\n return this.$props.load();\n },\n \"data-captions\": function() {\n const track = this.$state.textTrack();\n return !!track && isTrackCaptionKind(track);\n },\n \"data-ios-controls\": function() {\n return this.$state.iOSControls();\n },\n \"data-controls\": function() {\n return this.controls.showing;\n },\n \"data-buffering\": function() {\n const { canLoad, canPlay, waiting } = this.$state;\n return canLoad() && (!canPlay() || waiting());\n },\n \"data-error\": function() {\n const { error } = this.$state;\n return !!error();\n },\n \"data-autoplay-error\": function() {\n const { autoPlayError } = this.$state;\n return !!autoPlayError();\n }\n };\n const alias = {\n autoPlay: \"autoplay\",\n canAirPlay: \"can-airplay\",\n canPictureInPicture: \"can-pip\",\n pictureInPicture: \"pip\",\n playsInline: \"playsinline\",\n remotePlaybackState: \"remote-state\",\n remotePlaybackType: \"remote-type\",\n isAirPlayConnected: \"airplay\",\n isGoogleCastConnected: \"google-cast\"\n };\n for (const prop2 of mediaAttributes) {\n const attrName = \"data-\" + (alias[prop2] ?? camelToKebabCase(prop2));\n $attrs[attrName] = function() {\n return this.$state[prop2]();\n };\n }\n delete $attrs.title;\n MediaPlayer[MEDIA_ATTRIBUTES] = $attrs;\n this.setAttributes($attrs);\n }\n #onFindPlayer(event) {\n event.detail(this);\n }\n #onResize() {\n if (IS_SERVER || !this.el) return;\n const width = this.el.clientWidth, height = this.el.clientHeight;\n this.$state.width.set(width);\n this.$state.height.set(height);\n setStyle(this.el, \"--player-width\", width + \"px\");\n setStyle(this.el, \"--player-height\", height + \"px\");\n }\n #onPointerChange(queryList) {\n if (IS_SERVER) return;\n const pointer = queryList.matches ? \"coarse\" : \"fine\";\n setAttribute(this.el, \"data-pointer\", pointer);\n this.$state.pointer.set(pointer);\n this.#onResize();\n }\n /**\n * The current media provider.\n */\n get provider() {\n return this.#provider;\n }\n /**\n * Media controls settings.\n */\n get controls() {\n return this.#requestMgr.controls;\n }\n set controls(controls) {\n this.#props.controls.set(controls);\n }\n /**\n * Controls the screen orientation of the current browser window and dispatches orientation\n * change events on the player.\n */\n orientation;\n /**\n * The title of the current media.\n */\n get title() {\n return peek(this.$state.title);\n }\n set title(newTitle) {\n if (this.#skipTitleUpdate) {\n this.#skipTitleUpdate = false;\n return;\n }\n this.#props.title.set(newTitle);\n }\n /**\n * A list of all `VideoQuality` objects representing the set of available video renditions.\n *\n * @see {@link https://vidstack.io/docs/player/api/video-quality}\n */\n get qualities() {\n return this.#media.qualities;\n }\n /**\n * A list of all `AudioTrack` objects representing the set of available audio tracks.\n *\n * @see {@link https://vidstack.io/docs/player/api/audio-tracks}\n */\n get audioTracks() {\n return this.#media.audioTracks;\n }\n /**\n * A list of all `TextTrack` objects representing the set of available text tracks.\n *\n * @see {@link https://vidstack.io/docs/player/api/text-tracks}\n */\n get textTracks() {\n return this.#media.textTracks;\n }\n /**\n * Contains text renderers which are responsible for loading, parsing, and rendering text\n * tracks.\n */\n get textRenderers() {\n return this.#media.textRenderers;\n }\n get duration() {\n return this.$state.duration();\n }\n set duration(duration) {\n this.#props.duration.set(duration);\n }\n get paused() {\n return peek(this.$state.paused);\n }\n set paused(paused) {\n this.#queuePausedUpdate(paused);\n }\n #watchPaused() {\n this.#queuePausedUpdate(this.$props.paused());\n }\n #queuePausedUpdate(paused) {\n if (paused) {\n this.canPlayQueue.enqueue(\"paused\", () => this.#requestMgr.pause());\n } else this.canPlayQueue.enqueue(\"paused\", () => this.#requestMgr.play());\n }\n get muted() {\n return peek(this.$state.muted);\n }\n set muted(muted) {\n this.#queueMutedUpdate(muted);\n }\n #watchMuted() {\n this.#queueMutedUpdate(this.$props.muted());\n }\n #queueMutedUpdate(muted) {\n this.canPlayQueue.enqueue(\"muted\", () => {\n if (this.#provider) this.#provider.setMuted(muted);\n });\n }\n get currentTime() {\n return peek(this.$state.currentTime);\n }\n set currentTime(time) {\n this.#queueCurrentTimeUpdate(time);\n }\n #watchCurrentTime() {\n this.#queueCurrentTimeUpdate(this.$props.currentTime());\n }\n #queueCurrentTimeUpdate(time) {\n this.canPlayQueue.enqueue(\"currentTime\", () => {\n const { currentTime } = this.$state;\n if (time === peek(currentTime)) return;\n peek(() => {\n if (!this.#provider) return;\n const boundedTime = boundTime(time, this.$state);\n if (Number.isFinite(boundedTime)) {\n this.#provider.setCurrentTime(boundedTime);\n }\n });\n });\n }\n get volume() {\n return peek(this.$state.volume);\n }\n set volume(volume) {\n this.#queueVolumeUpdate(volume);\n }\n #watchVolume() {\n this.#queueVolumeUpdate(this.$props.volume());\n }\n #queueVolumeUpdate(volume) {\n const clampedVolume = clampNumber(0, volume, 1);\n this.canPlayQueue.enqueue(\"volume\", () => {\n if (this.#provider) this.#provider.setVolume(clampedVolume);\n });\n }\n get playbackRate() {\n return peek(this.$state.playbackRate);\n }\n set playbackRate(rate) {\n this.#queuePlaybackRateUpdate(rate);\n }\n #watchPlaybackRate() {\n this.#queuePlaybackRateUpdate(this.$props.playbackRate());\n }\n #queuePlaybackRateUpdate(rate) {\n this.canPlayQueue.enqueue(\"rate\", () => {\n if (this.#provider) this.#provider.setPlaybackRate?.(rate);\n });\n }\n #watchPlaysInline() {\n this.#queuePlaysInlineUpdate(this.$props.playsInline());\n }\n #queuePlaysInlineUpdate(inline) {\n this.canPlayQueue.enqueue(\"playsinline\", () => {\n if (this.#provider) this.#provider.setPlaysInline?.(inline);\n });\n }\n #watchStorage() {\n let storageValue = this.$props.storage(), storage = isString(storageValue) ? new LocalMediaStorage() : storageValue;\n if (storage?.onChange) {\n const { source } = this.$state, playerId = isString(storageValue) ? storageValue : this.el?.id, mediaId = computed(this.#computeMediaId.bind(this));\n effect(() => storage.onChange(source(), mediaId(), playerId || void 0));\n }\n this.#media.storage = storage;\n this.#media.textTracks.setStorage(storage);\n onDispose(() => {\n storage?.onDestroy?.();\n this.#media.storage = null;\n this.#media.textTracks.setStorage(null);\n });\n }\n #computeMediaId() {\n const { clipStartTime, clipEndTime } = this.$props, { source } = this.$state, src = source();\n return src.src ? `${src.src}:${clipStartTime()}:${clipEndTime()}` : null;\n }\n /**\n * Begins/resumes playback of the media. If this method is called programmatically before the\n * user has interacted with the player, the promise may be rejected subject to the browser's\n * autoplay policies. This method will throw if called before media is ready for playback.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/play}\n */\n async play(trigger) {\n return this.#requestMgr.play(trigger);\n }\n /**\n * Pauses playback of the media. This method will throw if called before media is ready for\n * playback.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/pause}\n */\n async pause(trigger) {\n return this.#requestMgr.pause(trigger);\n }\n /**\n * Attempts to display the player in fullscreen. The promise will resolve if successful, and\n * reject if not. This method will throw if any fullscreen API is _not_ currently available.\n *\n * @see {@link https://vidstack.io/docs/player/api/fullscreen}\n */\n async enterFullscreen(target, trigger) {\n return this.#requestMgr.enterFullscreen(target, trigger);\n }\n /**\n * Attempts to display the player inline by exiting fullscreen. This method will throw if any\n * fullscreen API is _not_ currently available.\n *\n * @see {@link https://vidstack.io/docs/player/api/fullscreen}\n */\n async exitFullscreen(target, trigger) {\n return this.#requestMgr.exitFullscreen(target, trigger);\n }\n /**\n * Attempts to display the player in picture-in-picture mode. This method will throw if PIP is\n * not supported. This method will also return a `PictureInPictureWindow` if the current\n * provider supports it.\n *\n * @see {@link https://vidstack.io/docs/player/api/picture-in-picture}\n */\n enterPictureInPicture(trigger) {\n return this.#requestMgr.enterPictureInPicture(trigger);\n }\n /**\n * Attempts to display the player in inline by exiting picture-in-picture mode. This method\n * will throw if not supported.\n *\n * @see {@link https://vidstack.io/docs/player/api/picture-in-picture}\n */\n exitPictureInPicture(trigger) {\n return this.#requestMgr.exitPictureInPicture(trigger);\n }\n /**\n * Sets the current time to the live edge (i.e., `duration`). This is a no-op for non-live\n * streams and will throw if called before media is ready for playback.\n *\n * @see {@link https://vidstack.io/docs/player/api/live}\n */\n seekToLiveEdge(trigger) {\n this.#requestMgr.seekToLiveEdge(trigger);\n }\n /**\n * Called when media can begin loading. Calling this method will trigger the initial provider\n * loading process. Calling it more than once has no effect.\n *\n * @see {@link https://vidstack.io/docs/player/core-concepts/loading#load-strategies}\n */\n startLoading(trigger) {\n this.#media.notify(\"can-load\", void 0, trigger);\n }\n /**\n * Called when the poster image can begin loading. Calling it more than once has no effect.\n *\n * @see {@link https://vidstack.io/docs/player/core-concepts/loading#load-strategies}\n */\n startLoadingPoster(trigger) {\n this.#media.notify(\"can-load-poster\", void 0, trigger);\n }\n /**\n * Request Apple AirPlay picker to open.\n */\n requestAirPlay(trigger) {\n return this.#requestMgr.requestAirPlay(trigger);\n }\n /**\n * Request Google Cast device picker to open. The Google Cast framework will be loaded if it\n * hasn't yet.\n */\n requestGoogleCast(trigger) {\n return this.#requestMgr.requestGoogleCast(trigger);\n }\n /**\n * Set the audio gain, amplifying volume and enabling a maximum volume above 100%.\n *\n * @see {@link https://vidstack.io/docs/player/api/audio-gain}\n */\n setAudioGain(gain, trigger) {\n return this.#requestMgr.setAudioGain(gain, trigger);\n }\n destroy() {\n super.destroy();\n this.#media.remote.setPlayer(null);\n this.dispatch(\"destroy\");\n }\n}\nconst mediaplayer__proto = MediaPlayer.prototype;\nprop(mediaplayer__proto, \"canPlayQueue\");\nprop(mediaplayer__proto, \"remoteControl\");\nprop(mediaplayer__proto, \"provider\");\nprop(mediaplayer__proto, \"controls\");\nprop(mediaplayer__proto, \"orientation\");\nprop(mediaplayer__proto, \"title\");\nprop(mediaplayer__proto, \"qualities\");\nprop(mediaplayer__proto, \"audioTracks\");\nprop(mediaplayer__proto, \"textTracks\");\nprop(mediaplayer__proto, \"textRenderers\");\nprop(mediaplayer__proto, \"duration\");\nprop(mediaplayer__proto, \"paused\");\nprop(mediaplayer__proto, \"muted\");\nprop(mediaplayer__proto, \"currentTime\");\nprop(mediaplayer__proto, \"volume\");\nprop(mediaplayer__proto, \"playbackRate\");\nmethod(mediaplayer__proto, \"play\");\nmethod(mediaplayer__proto, \"pause\");\nmethod(mediaplayer__proto, \"enterFullscreen\");\nmethod(mediaplayer__proto, \"exitFullscreen\");\nmethod(mediaplayer__proto, \"enterPictureInPicture\");\nmethod(mediaplayer__proto, \"exitPictureInPicture\");\nmethod(mediaplayer__proto, \"seekToLiveEdge\");\nmethod(mediaplayer__proto, \"startLoading\");\nmethod(mediaplayer__proto, \"startLoadingPoster\");\nmethod(mediaplayer__proto, \"requestAirPlay\");\nmethod(mediaplayer__proto, \"requestGoogleCast\");\nmethod(mediaplayer__proto, \"setAudioGain\");\n\nfunction resolveStreamTypeFromDASHManifest(manifestSrc, requestInit) {\n return fetch(manifestSrc, requestInit).then((res) => res.text()).then((manifest) => {\n return /type=\"static\"/.test(manifest) ? \"on-demand\" : \"live\";\n });\n}\nfunction resolveStreamTypeFromHLSManifest(manifestSrc, requestInit) {\n return fetch(manifestSrc, requestInit).then((res) => res.text()).then((manifest) => {\n const renditionURI = resolveHLSRenditionURI(manifest);\n if (renditionURI) {\n return resolveStreamTypeFromHLSManifest(\n /^https?:/.test(renditionURI) ? renditionURI : new URL(renditionURI, manifestSrc).href,\n requestInit\n );\n }\n const streamType = /EXT-X-PLAYLIST-TYPE:\\s*VOD/.test(manifest) ? \"on-demand\" : \"live\";\n if (streamType === \"live\" && resolveTargetDuration(manifest) >= 10 && (/#EXT-X-DVR-ENABLED:\\s*true/.test(manifest) || manifest.includes(\"#EXT-X-DISCONTINUITY\"))) {\n return \"live:dvr\";\n }\n return streamType;\n });\n}\nfunction resolveHLSRenditionURI(manifest) {\n const matches = manifest.match(/#EXT-X-STREAM-INF:[^\\n]+(\\n[^\\n]+)*/g);\n return matches ? matches[0].split(\"\\n\")[1].trim() : null;\n}\nfunction resolveTargetDuration(manifest) {\n const lines = manifest.split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"#EXT-X-TARGETDURATION\")) {\n const duration = parseFloat(line.split(\":\")[1]);\n if (!isNaN(duration)) {\n return duration;\n }\n }\n }\n return -1;\n}\n\nconst sourceTypes = /* @__PURE__ */ new Map();\nclass SourceSelection {\n #initialize = false;\n #loaders;\n #domSources;\n #media;\n #loader;\n constructor(domSources, media, loader, customLoaders = []) {\n this.#domSources = domSources;\n this.#media = media;\n this.#loader = loader;\n const DASH_LOADER = new DASHProviderLoader(), HLS_LOADER = new HLSProviderLoader(), VIDEO_LOADER = new VideoProviderLoader(), AUDIO_LOADER = new AudioProviderLoader(), YOUTUBE_LOADER = new YouTubeProviderLoader(), VIMEO_LOADER = new VimeoProviderLoader(), EMBED_LOADERS = [YOUTUBE_LOADER, VIMEO_LOADER];\n this.#loaders = computed(() => {\n const remoteLoader = media.$state.remotePlaybackLoader();\n const loaders = media.$props.preferNativeHLS() ? [VIDEO_LOADER, AUDIO_LOADER, DASH_LOADER, HLS_LOADER, ...EMBED_LOADERS, ...customLoaders] : [HLS_LOADER, VIDEO_LOADER, AUDIO_LOADER, DASH_LOADER, ...EMBED_LOADERS, ...customLoaders];\n return remoteLoader ? [remoteLoader, ...loaders] : loaders;\n });\n const { $state } = media;\n $state.sources.set(normalizeSrc(media.$props.src()));\n for (const src of $state.sources()) {\n const loader2 = this.#loaders().find((loader3) => loader3.canPlay(src));\n if (!loader2) continue;\n const mediaType = loader2.mediaType(src);\n media.$state.source.set(src);\n media.$state.mediaType.set(mediaType);\n media.$state.inferredViewType.set(mediaType);\n this.#loader.set(loader2);\n this.#initialize = true;\n break;\n }\n }\n connect() {\n const loader = this.#loader();\n if (this.#initialize) {\n this.#notifySourceChange(this.#media.$state.source(), loader);\n this.#notifyLoaderChange(loader);\n this.#initialize = false;\n }\n effect(this.#onSourcesChange.bind(this));\n effect(this.#onSourceChange.bind(this));\n effect(this.#onSetup.bind(this));\n effect(this.#onLoadSource.bind(this));\n effect(this.#onLoadPoster.bind(this));\n }\n #onSourcesChange() {\n this.#media.notify(\"sources-change\", [\n ...normalizeSrc(this.#media.$props.src()),\n ...this.#domSources()\n ]);\n }\n #onSourceChange() {\n const { $state } = this.#media;\n const sources = $state.sources(), currentSource = peek($state.source), newSource = this.#findNewSource(currentSource, sources), noMatch = sources[0]?.src && !newSource.src && !newSource.type;\n if (noMatch) {\n const { crossOrigin } = $state, credentials = getRequestCredentials(crossOrigin()), abort = new AbortController();\n Promise.all(\n sources.map(\n (source) => isString(source.src) && source.type === \"?\" ? fetch(source.src, {\n method: \"HEAD\",\n credentials,\n signal: abort.signal\n }).then((res) => {\n source.type = res.headers.get(\"content-type\") || \"??\";\n sourceTypes.set(source.src, source.type);\n return source;\n }).catch(() => source) : source\n )\n ).then((sources2) => {\n if (abort.signal.aborted) return;\n const newSource2 = this.#findNewSource(peek($state.source), sources2);\n tick();\n if (!newSource2.src) {\n this.#media.notify(\"error\", {\n message: \"Failed to load resource.\",\n code: 4\n });\n }\n });\n return () => abort.abort();\n }\n tick();\n }\n #findNewSource(currentSource, sources) {\n let newSource = { src: \"\", type: \"\" }, newLoader = null, triggerEvent = new DOMEvent(\"sources-change\", { detail: { sources } }), loaders = this.#loaders(), { started, paused, currentTime, quality, savedState } = this.#media.$state;\n for (const src of sources) {\n const loader = loaders.find((loader2) => loader2.canPlay(src));\n if (loader) {\n newSource = src;\n newLoader = loader;\n break;\n }\n }\n if (isVideoQualitySrc(newSource)) {\n const currentQuality = quality(), sourceQuality = sources.find((s) => s.src === currentQuality?.src);\n if (peek(started)) {\n savedState.set({\n paused: peek(paused),\n currentTime: peek(currentTime)\n });\n } else {\n savedState.set(null);\n }\n if (sourceQuality) {\n newSource = sourceQuality;\n triggerEvent = new DOMEvent(\"quality-change\", {\n detail: { quality: currentQuality }\n });\n }\n }\n if (!isSameSrc(currentSource, newSource)) {\n this.#notifySourceChange(newSource, newLoader, triggerEvent);\n }\n if (newLoader !== peek(this.#loader)) {\n this.#notifyLoaderChange(newLoader, triggerEvent);\n }\n return newSource;\n }\n #notifySourceChange(src, loader, trigger) {\n this.#media.notify(\"source-change\", src, trigger);\n this.#media.notify(\"media-type-change\", loader?.mediaType(src) || \"unknown\", trigger);\n }\n #notifyLoaderChange(loader, trigger) {\n this.#media.$providerSetup.set(false);\n this.#media.notify(\"provider-change\", null, trigger);\n loader && peek(() => loader.preconnect?.(this.#media));\n this.#loader.set(loader);\n this.#media.notify(\"provider-loader-change\", loader, trigger);\n }\n #onSetup() {\n const provider = this.#media.$provider();\n if (!provider || peek(this.#media.$providerSetup)) return;\n if (this.#media.$state.canLoad()) {\n scoped(() => provider.setup(), provider.scope);\n this.#media.$providerSetup.set(true);\n return;\n }\n peek(() => provider.preconnect?.());\n }\n #onLoadSource() {\n if (!this.#media.$providerSetup()) return;\n const provider = this.#media.$provider(), source = this.#media.$state.source(), crossOrigin = peek(this.#media.$state.crossOrigin), preferNativeHLS = peek(this.#media.$props.preferNativeHLS);\n if (isSameSrc(provider?.currentSrc, source)) {\n return;\n }\n if (this.#media.$state.canLoad()) {\n const abort = new AbortController();\n if (isHLSSrc(source)) {\n if (preferNativeHLS || !isHLSSupported()) {\n resolveStreamTypeFromHLSManifest(source.src, {\n credentials: getRequestCredentials(crossOrigin),\n signal: abort.signal\n }).then((streamType) => {\n this.#media.notify(\"stream-type-change\", streamType);\n }).catch(noop);\n }\n } else if (isDASHSrc(source)) {\n resolveStreamTypeFromDASHManifest(source.src, {\n credentials: getRequestCredentials(crossOrigin),\n signal: abort.signal\n }).then((streamType) => {\n this.#media.notify(\"stream-type-change\", streamType);\n }).catch(noop);\n } else {\n this.#media.notify(\"stream-type-change\", \"on-demand\");\n }\n peek(() => {\n const preload = peek(this.#media.$state.preload);\n return provider?.loadSource(source, preload).catch((error) => {\n });\n });\n return () => abort.abort();\n }\n try {\n isString(source.src) && preconnect(new URL(source.src).origin);\n } catch (error) {\n }\n }\n #onLoadPoster() {\n const loader = this.#loader(), { providedPoster, source, canLoadPoster } = this.#media.$state;\n if (!loader || !loader.loadPoster || !source() || !canLoadPoster() || providedPoster()) return;\n const abort = new AbortController(), trigger = new DOMEvent(\"source-change\", { detail: source });\n loader.loadPoster(source(), this.#media, abort).then((url) => {\n this.#media.notify(\"poster-change\", url || \"\", trigger);\n }).catch(() => {\n this.#media.notify(\"poster-change\", \"\", trigger);\n });\n return () => {\n abort.abort();\n };\n }\n}\nfunction normalizeSrc(src) {\n return (isArray(src) ? src : [src]).map((src2) => {\n if (isString(src2)) {\n return { src: src2, type: inferType(src2) };\n } else {\n return { ...src2, type: inferType(src2.src, src2.type) };\n }\n });\n}\nfunction inferType(src, type) {\n if (isString(type) && type.length) {\n return type;\n } else if (isString(src) && sourceTypes.has(src)) {\n return sourceTypes.get(src);\n } else if (!type && isHLSSrc({ src, type: \"\" })) {\n return \"application/x-mpegurl\";\n } else if (!type && isDASHSrc({ src, type: \"\" })) {\n return \"application/dash+xml\";\n } else if (!isString(src) || src.startsWith(\"blob:\")) {\n return \"video/object\";\n } else if (src.includes(\"youtube\") || src.includes(\"youtu.be\")) {\n return \"video/youtube\";\n } else if (src.includes(\"vimeo\") && !src.includes(\"progressive_redirect\") && !src.includes(\".m3u8\")) {\n return \"video/vimeo\";\n }\n return \"?\";\n}\nfunction isSameSrc(a, b) {\n return a?.src === b?.src && a?.type === b?.type;\n}\n\nclass Tracks {\n #domTracks;\n #media;\n #prevTracks = [];\n constructor(domTracks, media) {\n this.#domTracks = domTracks;\n this.#media = media;\n effect(this.#onTracksChange.bind(this));\n }\n #onTracksChange() {\n const newTracks = this.#domTracks();\n for (const oldTrack of this.#prevTracks) {\n if (!newTracks.some((t) => t.id === oldTrack.id)) {\n const track = oldTrack.id && this.#media.textTracks.getById(oldTrack.id);\n if (track) this.#media.textTracks.remove(track);\n }\n }\n for (const newTrack of newTracks) {\n const id = newTrack.id || TextTrack.createId(newTrack);\n if (!this.#media.textTracks.getById(id)) {\n newTrack.id = id;\n this.#media.textTracks.add(newTrack);\n }\n }\n this.#prevTracks = newTracks;\n }\n}\n\nclass MediaProvider extends Component {\n static props = {\n loaders: []\n };\n static state = new State({\n loader: null\n });\n #media;\n #sources;\n #domSources = signal([]);\n #domTracks = signal([]);\n #loader = null;\n onSetup() {\n this.#media = useMediaContext();\n this.#sources = new SourceSelection(\n this.#domSources,\n this.#media,\n this.$state.loader,\n this.$props.loaders()\n );\n }\n onAttach(el) {\n el.setAttribute(\"data-media-provider\", \"\");\n }\n onConnect(el) {\n this.#sources.connect();\n new Tracks(this.#domTracks, this.#media);\n const resize = new ResizeObserver(animationFrameThrottle(this.#onResize.bind(this)));\n resize.observe(el);\n const mutations = new MutationObserver(this.#onMutation.bind(this));\n mutations.observe(el, { attributes: true, childList: true });\n this.#onResize();\n this.#onMutation();\n onDispose(() => {\n resize.disconnect();\n mutations.disconnect();\n });\n }\n #loadRafId = -1;\n load(target) {\n target?.setAttribute(\"aria-hidden\", \"true\");\n window.cancelAnimationFrame(this.#loadRafId);\n this.#loadRafId = requestAnimationFrame(() => this.#runLoader(target));\n onDispose(() => {\n window.cancelAnimationFrame(this.#loadRafId);\n });\n }\n #runLoader(target) {\n if (!this.scope) return;\n const loader = this.$state.loader(), { $provider } = this.#media;\n if (this.#loader === loader && loader?.target === target && peek($provider)) return;\n this.#destroyProvider();\n this.#loader = loader;\n if (loader) loader.target = target || null;\n if (!loader || !target) return;\n loader.load(this.#media).then((provider) => {\n if (!this.scope) return;\n if (peek(this.$state.loader) !== loader) return;\n this.#media.notify(\"provider-change\", provider);\n });\n }\n onDestroy() {\n this.#loader = null;\n this.#destroyProvider();\n }\n #destroyProvider() {\n this.#media?.notify(\"provider-change\", null);\n }\n #onResize() {\n if (!this.el) return;\n const { player, $state } = this.#media, width = this.el.offsetWidth, height = this.el.offsetHeight;\n if (!player) return;\n $state.mediaWidth.set(width);\n $state.mediaHeight.set(height);\n if (player.el) {\n setStyle(player.el, \"--media-width\", width + \"px\");\n setStyle(player.el, \"--media-height\", height + \"px\");\n }\n }\n #onMutation() {\n const sources = [], tracks = [], children = this.el.children;\n for (const el of children) {\n if (el.hasAttribute(\"data-vds\")) continue;\n if (el instanceof HTMLSourceElement) {\n const src = {\n id: el.id,\n src: el.src,\n type: el.type\n };\n for (const prop of [\"id\", \"src\", \"width\", \"height\", \"bitrate\", \"codec\"]) {\n const value = el.getAttribute(`data-${prop}`);\n if (isString(value)) src[prop] = /id|src|codec/.test(prop) ? value : Number(value);\n }\n sources.push(src);\n } else if (el instanceof HTMLTrackElement) {\n const track = {\n src: el.src,\n kind: el.track.kind,\n language: el.srclang,\n label: el.label,\n default: el.default,\n type: el.getAttribute(\"data-type\")\n };\n tracks.push({\n id: el.id || TextTrack.createId(track),\n ...track\n });\n }\n }\n this.#domSources.set(sources);\n this.#domTracks.set(tracks);\n tick();\n }\n}\nconst mediaprovider__proto = MediaProvider.prototype;\nmethod(mediaprovider__proto, \"load\");\n\nclass MediaAnnouncer extends Component {\n static props = {\n translations: null\n };\n static state = new State({\n label: null,\n busy: false\n });\n #media;\n #initializing = false;\n onSetup() {\n this.#media = useMediaContext();\n }\n onAttach(el) {\n el.style.display = \"contents\";\n }\n onConnect(el) {\n el.setAttribute(\"data-media-announcer\", \"\");\n setAttributeIfEmpty(el, \"role\", \"status\");\n setAttributeIfEmpty(el, \"aria-live\", \"polite\");\n const { busy } = this.$state;\n this.setAttributes({\n \"aria-busy\": () => busy() ? \"true\" : null\n });\n this.#initializing = true;\n effect(this.#watchPaused.bind(this));\n effect(this.#watchVolume.bind(this));\n effect(this.#watchCaptions.bind(this));\n effect(this.#watchFullscreen.bind(this));\n effect(this.#watchPiP.bind(this));\n effect(this.#watchSeeking.bind(this));\n effect(this.#watchLabel.bind(this));\n tick();\n this.#initializing = false;\n }\n #watchPaused() {\n const { paused } = this.#media.$state;\n this.#setLabel(!paused() ? \"Play\" : \"Pause\");\n }\n #watchFullscreen() {\n const { fullscreen } = this.#media.$state;\n this.#setLabel(fullscreen() ? \"Enter Fullscreen\" : \"Exit Fullscreen\");\n }\n #watchPiP() {\n const { pictureInPicture } = this.#media.$state;\n this.#setLabel(pictureInPicture() ? \"Enter PiP\" : \"Exit PiP\");\n }\n #watchCaptions() {\n const { textTrack } = this.#media.$state;\n this.#setLabel(textTrack() ? \"Closed-Captions On\" : \"Closed-Captions Off\");\n }\n #watchVolume() {\n const { muted, volume, audioGain } = this.#media.$state;\n this.#setLabel(\n muted() || volume() === 0 ? \"Mute\" : `${Math.round(volume() * (audioGain() ?? 1) * 100)}% ${this.#translate(\"Volume\")}`\n );\n }\n #startedSeekingAt = -1;\n #seekTimer = -1;\n #watchSeeking() {\n const { seeking, currentTime } = this.#media.$state, isSeeking = seeking();\n if (this.#startedSeekingAt > 0) {\n window.clearTimeout(this.#seekTimer);\n this.#seekTimer = window.setTimeout(() => {\n if (!this.scope) return;\n const newTime = peek(currentTime), seconds = Math.abs(newTime - this.#startedSeekingAt);\n if (seconds >= 1) {\n const isForward = newTime >= this.#startedSeekingAt, spokenTime = formatSpokenTime(seconds);\n this.#setLabel(\n `${this.#translate(isForward ? \"Seek Forward\" : \"Seek Backward\")} ${spokenTime}`\n );\n }\n this.#startedSeekingAt = -1;\n this.#seekTimer = -1;\n }, 300);\n } else if (isSeeking) {\n this.#startedSeekingAt = peek(currentTime);\n }\n }\n #translate(word) {\n const { translations } = this.$props;\n return translations?.()?.[word || \"\"] ?? word;\n }\n #watchLabel() {\n const { label, busy } = this.$state, $label = this.#translate(label());\n if (this.#initializing) return;\n busy.set(true);\n const id = window.setTimeout(() => void busy.set(false), 150);\n this.el && setAttribute(this.el, \"aria-label\", $label);\n if (isString($label)) {\n this.dispatch(\"change\", { detail: $label });\n }\n return () => window.clearTimeout(id);\n }\n #setLabel(word) {\n const { label } = this.$state;\n label.set(word);\n }\n}\n\nclass Controls extends Component {\n static props = {\n hideDelay: 2e3,\n hideOnMouseLeave: false\n };\n #media;\n onSetup() {\n this.#media = useMediaContext();\n effect(this.#watchProps.bind(this));\n }\n onAttach(el) {\n const { pictureInPicture, fullscreen } = this.#media.$state;\n setStyle(el, \"pointer-events\", \"none\");\n setAttributeIfEmpty(el, \"role\", \"group\");\n this.setAttributes({\n \"data-visible\": this.#isShowing.bind(this),\n \"data-fullscreen\": fullscreen,\n \"data-pip\": pictureInPicture\n });\n effect(() => {\n this.dispatch(\"change\", { detail: this.#isShowing() });\n });\n effect(this.#hideControls.bind(this));\n effect(() => {\n const isFullscreen = fullscreen();\n for (const side of [\"top\", \"right\", \"bottom\", \"left\"]) {\n setStyle(el, `padding-${side}`, isFullscreen && `env(safe-area-inset-${side})`);\n }\n });\n }\n #hideControls() {\n if (!this.el) return;\n const { nativeControls } = this.#media.$state, isHidden = nativeControls();\n setAttribute(this.el, \"aria-hidden\", isHidden ? \"true\" : null);\n setStyle(this.el, \"display\", isHidden ? \"none\" : null);\n }\n #watchProps() {\n const { controls } = this.#media.player, { hideDelay, hideOnMouseLeave } = this.$props;\n controls.defaultDelay = hideDelay() === 2e3 ? this.#media.$props.controlsDelay() : hideDelay();\n controls.hideOnMouseLeave = hideOnMouseLeave();\n }\n #isShowing() {\n const { controlsVisible } = this.#media.$state;\n return controlsVisible();\n }\n}\n\nclass ControlsGroup extends Component {\n onAttach(el) {\n if (!el.style.pointerEvents) setStyle(el, \"pointer-events\", \"auto\");\n }\n}\n\nclass Popper extends ViewController {\n #delegate;\n constructor(delegate) {\n super();\n this.#delegate = delegate;\n effect(this.#watchTrigger.bind(this));\n }\n onDestroy() {\n this.#stopAnimationEndListener?.();\n this.#stopAnimationEndListener = null;\n }\n #watchTrigger() {\n const trigger = this.#delegate.trigger();\n if (!trigger) {\n this.hide();\n return;\n }\n const show = this.show.bind(this), hide = this.hide.bind(this);\n this.#delegate.listen(trigger, show, hide);\n }\n #showTimerId = -1;\n #hideRafId = -1;\n #stopAnimationEndListener = null;\n show(trigger) {\n this.#cancelShowing();\n window.cancelAnimationFrame(this.#hideRafId);\n this.#hideRafId = -1;\n this.#stopAnimationEndListener?.();\n this.#stopAnimationEndListener = null;\n this.#showTimerId = window.setTimeout(() => {\n this.#showTimerId = -1;\n const content = this.#delegate.content();\n if (content) content.style.removeProperty(\"display\");\n peek(() => this.#delegate.onChange(true, trigger));\n }, this.#delegate.showDelay?.() ?? 0);\n }\n hide(trigger) {\n this.#cancelShowing();\n peek(() => this.#delegate.onChange(false, trigger));\n this.#hideRafId = requestAnimationFrame(() => {\n this.#cancelShowing();\n this.#hideRafId = -1;\n const content = this.#delegate.content();\n if (content) {\n const onHide = () => {\n content.style.display = \"none\";\n this.#stopAnimationEndListener = null;\n };\n const isAnimated = hasAnimation(content);\n if (isAnimated) {\n this.#stopAnimationEndListener?.();\n const stop = listenEvent(content, \"animationend\", onHide, { once: true });\n this.#stopAnimationEndListener = stop;\n } else {\n onHide();\n }\n }\n });\n }\n #cancelShowing() {\n window.clearTimeout(this.#showTimerId);\n this.#showTimerId = -1;\n }\n}\n\nconst tooltipContext = createContext();\n\nlet id = 0;\nclass Tooltip extends Component {\n static props = {\n showDelay: 700\n };\n #id = `media-tooltip-${++id}`;\n #trigger = signal(null);\n #content = signal(null);\n #showing = signal(false);\n constructor() {\n super();\n new FocusVisibleController();\n const { showDelay } = this.$props;\n new Popper({\n trigger: this.#trigger,\n content: this.#content,\n showDelay,\n listen(trigger, show, hide) {\n effect(() => {\n if ($keyboard()) listenEvent(trigger, \"focus\", show);\n listenEvent(trigger, \"blur\", hide);\n });\n new EventsController(trigger).add(\"touchstart\", (e) => e.preventDefault(), { passive: false }).add(\"mouseenter\", show).add(\"mouseleave\", hide);\n },\n onChange: this.#onShowingChange.bind(this)\n });\n }\n onAttach(el) {\n el.style.setProperty(\"display\", \"contents\");\n }\n onSetup() {\n provideContext(tooltipContext, {\n trigger: this.#trigger,\n content: this.#content,\n showing: this.#showing,\n attachTrigger: this.#attachTrigger.bind(this),\n detachTrigger: this.#detachTrigger.bind(this),\n attachContent: this.#attachContent.bind(this),\n detachContent: this.#detachContent.bind(this)\n });\n }\n #attachTrigger(el) {\n this.#trigger.set(el);\n let tooltipName = el.getAttribute(\"data-media-tooltip\");\n if (tooltipName) {\n this.el?.setAttribute(`data-media-${tooltipName}-tooltip`, \"\");\n }\n setAttribute(el, \"data-describedby\", this.#id);\n }\n #detachTrigger(el) {\n el.removeAttribute(\"data-describedby\");\n el.removeAttribute(\"aria-describedby\");\n this.#trigger.set(null);\n }\n #attachContent(el) {\n el.setAttribute(\"id\", this.#id);\n el.style.display = \"none\";\n setAttributeIfEmpty(el, \"role\", \"tooltip\");\n this.#content.set(el);\n }\n #detachContent(el) {\n el.removeAttribute(\"id\");\n el.removeAttribute(\"role\");\n this.#content.set(null);\n }\n #onShowingChange(isShowing) {\n const trigger = this.#trigger(), content = this.#content();\n if (trigger) {\n setAttribute(trigger, \"aria-describedby\", isShowing ? this.#id : null);\n }\n for (const el of [this.el, trigger, content]) {\n el && setAttribute(el, \"data-visible\", isShowing);\n }\n this.#showing.set(isShowing);\n }\n}\n\nclass TooltipTrigger extends Component {\n constructor() {\n super();\n new FocusVisibleController();\n }\n onConnect(el) {\n onDispose(\n requestScopedAnimationFrame(() => {\n if (!this.connectScope) return;\n this.#attach();\n const tooltip = useContext(tooltipContext);\n onDispose(() => {\n const button = this.#getButton();\n button && tooltip.detachTrigger(button);\n });\n })\n );\n }\n #attach() {\n const button = this.#getButton(), tooltip = useContext(tooltipContext);\n button && tooltip.attachTrigger(button);\n }\n #getButton() {\n const candidate = this.el.firstElementChild;\n return candidate?.localName === \"button\" || candidate?.getAttribute(\"role\") === \"button\" ? candidate : this.el;\n }\n}\n\nclass TooltipContent extends Component {\n static props = {\n placement: \"top center\",\n offset: 0,\n alignOffset: 0\n };\n constructor() {\n super();\n new FocusVisibleController();\n const { placement } = this.$props;\n this.setAttributes({\n \"data-placement\": placement\n });\n }\n onAttach(el) {\n this.#attach(el);\n Object.assign(el.style, {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"max-content\"\n });\n }\n onConnect(el) {\n this.#attach(el);\n const tooltip = useContext(tooltipContext);\n onDispose(() => tooltip.detachContent(el));\n onDispose(\n requestScopedAnimationFrame(() => {\n if (!this.connectScope) return;\n effect(this.#watchPlacement.bind(this));\n })\n );\n }\n #attach(el) {\n const tooltip = useContext(tooltipContext);\n tooltip.attachContent(el);\n }\n #watchPlacement() {\n const { showing } = useContext(tooltipContext);\n if (!showing()) return;\n const { placement, offset: mainOffset, alignOffset } = this.$props;\n return autoPlacement(this.el, this.#getTrigger(), placement(), {\n offsetVarName: \"media-tooltip\",\n xOffset: alignOffset(),\n yOffset: mainOffset()\n });\n }\n #getTrigger() {\n return useContext(tooltipContext).trigger();\n }\n}\n\nclass ToggleButtonController extends ViewController {\n static props = {\n disabled: false\n };\n #delegate;\n constructor(delegate) {\n super();\n this.#delegate = delegate;\n new FocusVisibleController();\n if (delegate.keyShortcut) {\n new ARIAKeyShortcuts(delegate.keyShortcut);\n }\n }\n onSetup() {\n const { disabled } = this.$props;\n this.setAttributes({\n \"data-pressed\": this.#delegate.isPresssed,\n \"aria-pressed\": this.#isARIAPressed.bind(this),\n \"aria-disabled\": () => disabled() ? \"true\" : null\n });\n }\n onAttach(el) {\n setAttributeIfEmpty(el, \"tabindex\", \"0\");\n setAttributeIfEmpty(el, \"role\", \"button\");\n setAttributeIfEmpty(el, \"type\", \"button\");\n }\n onConnect(el) {\n const events = onPress(el, this.#onMaybePress.bind(this));\n for (const type of [\"click\", \"touchstart\"]) {\n events.add(type, this.#onInteraction.bind(this), {\n passive: true\n });\n }\n }\n #isARIAPressed() {\n return ariaBool$1(this.#delegate.isPresssed());\n }\n #onPressed(event) {\n if (isWriteSignal(this.#delegate.isPresssed)) {\n this.#delegate.isPresssed.set((p) => !p);\n }\n }\n #onMaybePress(event) {\n const disabled = this.$props.disabled() || this.el.hasAttribute(\"data-disabled\");\n if (disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n event.preventDefault();\n (this.#delegate.onPress ?? this.#onPressed).call(this, event);\n }\n #onInteraction(event) {\n if (this.$props.disabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n}\n\nclass ToggleButton extends Component {\n static props = {\n disabled: false,\n defaultPressed: false\n };\n #pressed = signal(false);\n /**\n * Whether the toggle is currently in a `pressed` state.\n */\n get pressed() {\n return this.#pressed();\n }\n constructor() {\n super();\n new ToggleButtonController({\n isPresssed: this.#pressed\n });\n }\n}\nconst togglebutton__proto = ToggleButton.prototype;\nprop(togglebutton__proto, \"pressed\");\n\nclass AirPlayButton extends Component {\n static props = ToggleButtonController.props;\n #media;\n constructor() {\n super();\n new ToggleButtonController({\n isPresssed: this.#isPressed.bind(this),\n onPress: this.#onPress.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n const { canAirPlay, isAirPlayConnected } = this.#media.$state;\n this.setAttributes({\n \"data-active\": isAirPlayConnected,\n \"data-supported\": canAirPlay,\n \"data-state\": this.#getState.bind(this),\n \"aria-hidden\": $ariaBool(() => !canAirPlay())\n });\n }\n onAttach(el) {\n el.setAttribute(\"data-media-tooltip\", \"airplay\");\n setARIALabel(el, this.#getDefaultLabel.bind(this));\n }\n #onPress(event) {\n const remote = this.#media.remote;\n remote.requestAirPlay(event);\n }\n #isPressed() {\n const { remotePlaybackType, remotePlaybackState } = this.#media.$state;\n return remotePlaybackType() === \"airplay\" && remotePlaybackState() !== \"disconnected\";\n }\n #getState() {\n const { remotePlaybackType, remotePlaybackState } = this.#media.$state;\n return remotePlaybackType() === \"airplay\" && remotePlaybackState();\n }\n #getDefaultLabel() {\n const { remotePlaybackState } = this.#media.$state;\n return `AirPlay ${remotePlaybackState()}`;\n }\n}\n\nclass GoogleCastButton extends Component {\n static props = ToggleButtonController.props;\n #media;\n constructor() {\n super();\n new ToggleButtonController({\n isPresssed: this.#isPressed.bind(this),\n onPress: this.#onPress.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n const { canGoogleCast, isGoogleCastConnected } = this.#media.$state;\n this.setAttributes({\n \"data-active\": isGoogleCastConnected,\n \"data-supported\": canGoogleCast,\n \"data-state\": this.#getState.bind(this),\n \"aria-hidden\": $ariaBool(() => !canGoogleCast())\n });\n }\n onAttach(el) {\n el.setAttribute(\"data-media-tooltip\", \"google-cast\");\n setARIALabel(el, this.#getDefaultLabel.bind(this));\n }\n #onPress(event) {\n const remote = this.#media.remote;\n remote.requestGoogleCast(event);\n }\n #isPressed() {\n const { remotePlaybackType, remotePlaybackState } = this.#media.$state;\n return remotePlaybackType() === \"google-cast\" && remotePlaybackState() !== \"disconnected\";\n }\n #getState() {\n const { remotePlaybackType, remotePlaybackState } = this.#media.$state;\n return remotePlaybackType() === \"google-cast\" && remotePlaybackState();\n }\n #getDefaultLabel() {\n const { remotePlaybackState } = this.#media.$state;\n return `Google Cast ${remotePlaybackState()}`;\n }\n}\n\nclass PlayButton extends Component {\n static props = ToggleButtonController.props;\n #media;\n constructor() {\n super();\n new ToggleButtonController({\n isPresssed: this.#isPressed.bind(this),\n keyShortcut: \"togglePaused\",\n onPress: this.#onPress.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n const { paused, ended } = this.#media.$state;\n this.setAttributes({\n \"data-paused\": paused,\n \"data-ended\": ended\n });\n }\n onAttach(el) {\n el.setAttribute(\"data-media-tooltip\", \"play\");\n setARIALabel(el, \"Play\");\n }\n #onPress(event) {\n const remote = this.#media.remote;\n this.#isPressed() ? remote.pause(event) : remote.play(event);\n }\n #isPressed() {\n const { paused } = this.#media.$state;\n return !paused();\n }\n}\n\nclass CaptionButton extends Component {\n static props = ToggleButtonController.props;\n #media;\n constructor() {\n super();\n new ToggleButtonController({\n isPresssed: this.#isPressed.bind(this),\n keyShortcut: \"toggleCaptions\",\n onPress: this.#onPress.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n this.setAttributes({\n \"data-active\": this.#isPressed.bind(this),\n \"data-supported\": () => !this.#isHidden(),\n \"aria-hidden\": $ariaBool(this.#isHidden.bind(this))\n });\n }\n onAttach(el) {\n el.setAttribute(\"data-media-tooltip\", \"caption\");\n setARIALabel(el, \"Captions\");\n }\n #onPress(event) {\n this.#media.remote.toggleCaptions(event);\n }\n #isPressed() {\n const { textTrack } = this.#media.$state, track = textTrack();\n return !!track && isTrackCaptionKind(track);\n }\n #isHidden() {\n const { hasCaptions } = this.#media.$state;\n return !hasCaptions();\n }\n}\n\nclass FullscreenButton extends Component {\n static props = {\n ...ToggleButtonController.props,\n target: \"prefer-media\"\n };\n #media;\n constructor() {\n super();\n new ToggleButtonController({\n isPresssed: this.#isPressed.bind(this),\n keyShortcut: \"toggleFullscreen\",\n onPress: this.#onPress.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n const { fullscreen } = this.#media.$state, isSupported = this.#isSupported.bind(this);\n this.setAttributes({\n \"data-active\": fullscreen,\n \"data-supported\": isSupported,\n \"aria-hidden\": $ariaBool(() => !isSupported())\n });\n }\n onAttach(el) {\n el.setAttribute(\"data-media-tooltip\", \"fullscreen\");\n setARIALabel(el, \"Fullscreen\");\n }\n #onPress(event) {\n const remote = this.#media.remote, target = this.$props.target();\n this.#isPressed() ? remote.exitFullscreen(target, event) : remote.enterFullscreen(target, event);\n }\n #isPressed() {\n const { fullscreen } = this.#media.$state;\n return fullscreen();\n }\n #isSupported() {\n const { canFullscreen } = this.#media.$state;\n return canFullscreen();\n }\n}\n\nclass MuteButton extends Component {\n static props = ToggleButtonController.props;\n #media;\n constructor() {\n super();\n new ToggleButtonController({\n isPresssed: this.#isPressed.bind(this),\n keyShortcut: \"toggleMuted\",\n onPress: this.#onPress.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n this.setAttributes({\n \"data-muted\": this.#isPressed.bind(this),\n \"data-state\": this.#getState.bind(this)\n });\n }\n onAttach(el) {\n el.setAttribute(\"data-media-mute-button\", \"\");\n el.setAttribute(\"data-media-tooltip\", \"mute\");\n setARIALabel(el, \"Mute\");\n }\n #onPress(event) {\n const remote = this.#media.remote;\n this.#isPressed() ? remote.unmute(event) : remote.mute(event);\n }\n #isPressed() {\n const { muted, volume } = this.#media.$state;\n return muted() || volume() === 0;\n }\n #getState() {\n const { muted, volume } = this.#media.$state, $volume = volume();\n if (muted() || $volume === 0) return \"muted\";\n else if ($volume >= 0.5) return \"high\";\n else if ($volume < 0.5) return \"low\";\n }\n}\n\nclass PIPButton extends Component {\n static props = ToggleButtonController.props;\n #media;\n constructor() {\n super();\n new ToggleButtonController({\n isPresssed: this.#isPressed.bind(this),\n keyShortcut: \"togglePictureInPicture\",\n onPress: this.#onPress.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n const { pictureInPicture } = this.#media.$state, isSupported = this.#isSupported.bind(this);\n this.setAttributes({\n \"data-active\": pictureInPicture,\n \"data-supported\": isSupported,\n \"aria-hidden\": $ariaBool(() => !isSupported())\n });\n }\n onAttach(el) {\n el.setAttribute(\"data-media-tooltip\", \"pip\");\n setARIALabel(el, \"PiP\");\n }\n #onPress(event) {\n const remote = this.#media.remote;\n this.#isPressed() ? remote.exitPictureInPicture(event) : remote.enterPictureInPicture(event);\n }\n #isPressed() {\n const { pictureInPicture } = this.#media.$state;\n return pictureInPicture();\n }\n #isSupported() {\n const { canPictureInPicture } = this.#media.$state;\n return canPictureInPicture();\n }\n}\n\nclass SeekButton extends Component {\n static props = {\n disabled: false,\n seconds: 30\n };\n #media;\n constructor() {\n super();\n new FocusVisibleController();\n }\n onSetup() {\n this.#media = useMediaContext();\n const { seeking } = this.#media.$state, { seconds } = this.$props, isSupported = this.#isSupported.bind(this);\n this.setAttributes({\n seconds,\n \"data-seeking\": seeking,\n \"data-supported\": isSupported,\n \"aria-hidden\": $ariaBool(() => !isSupported())\n });\n }\n onAttach(el) {\n setAttributeIfEmpty(el, \"tabindex\", \"0\");\n setAttributeIfEmpty(el, \"role\", \"button\");\n setAttributeIfEmpty(el, \"type\", \"button\");\n el.setAttribute(\"data-media-tooltip\", \"seek\");\n setARIALabel(el, this.#getDefaultLabel.bind(this));\n }\n onConnect(el) {\n onPress(el, this.#onPress.bind(this));\n }\n #isSupported() {\n const { canSeek } = this.#media.$state;\n return canSeek();\n }\n #getDefaultLabel() {\n const { seconds } = this.$props;\n return `Seek ${seconds() > 0 ? \"forward\" : \"backward\"} ${seconds()} seconds`;\n }\n #onPress(event) {\n const { seconds, disabled } = this.$props;\n if (disabled()) return;\n const { currentTime } = this.#media.$state, seekTo = currentTime() + seconds();\n this.#media.remote.seek(seekTo, event);\n }\n}\n\nclass LiveButton extends Component {\n static props = {\n disabled: false\n };\n #media;\n constructor() {\n super();\n new FocusVisibleController();\n }\n onSetup() {\n this.#media = useMediaContext();\n const { disabled } = this.$props, { live, liveEdge } = this.#media.$state, isHidden = () => !live();\n this.setAttributes({\n \"data-edge\": liveEdge,\n \"data-hidden\": isHidden,\n \"aria-disabled\": $ariaBool(() => disabled() || liveEdge()),\n \"aria-hidden\": $ariaBool(isHidden)\n });\n }\n onAttach(el) {\n setAttributeIfEmpty(el, \"tabindex\", \"0\");\n setAttributeIfEmpty(el, \"role\", \"button\");\n setAttributeIfEmpty(el, \"type\", \"button\");\n el.setAttribute(\"data-media-tooltip\", \"live\");\n }\n onConnect(el) {\n onPress(el, this.#onPress.bind(this));\n }\n #onPress(event) {\n const { disabled } = this.$props, { liveEdge } = this.#media.$state;\n if (disabled() || liveEdge()) return;\n this.#media.remote.seekToLiveEdge(event);\n }\n}\n\nconst sliderState = new State({\n min: 0,\n max: 100,\n value: 0,\n step: 1,\n pointerValue: 0,\n focused: false,\n dragging: false,\n pointing: false,\n hidden: false,\n get active() {\n return this.dragging || this.focused || this.pointing;\n },\n get fillRate() {\n return calcRate(this.min, this.max, this.value);\n },\n get fillPercent() {\n return this.fillRate * 100;\n },\n get pointerRate() {\n return calcRate(this.min, this.max, this.pointerValue);\n },\n get pointerPercent() {\n return this.pointerRate * 100;\n }\n});\nfunction calcRate(min, max, value) {\n const range = max - min, offset = value - min;\n return range > 0 ? offset / range : 0;\n}\n\nclass IntersectionObserverController extends ViewController {\n #init;\n #observer;\n constructor(init) {\n super();\n this.#init = init;\n }\n onConnect(el) {\n this.#observer = new IntersectionObserver((entries) => {\n this.#init.callback?.(entries, this.#observer);\n }, this.#init);\n this.#observer.observe(el);\n onDispose(this.#onDisconnect.bind(this));\n }\n /**\n * Disconnect any active intersection observers.\n */\n #onDisconnect() {\n this.#observer?.disconnect();\n this.#observer = void 0;\n }\n}\n\nconst sliderContext = createContext();\nconst sliderObserverContext = createContext();\n\nfunction getClampedValue(min, max, value, step) {\n return clampNumber(min, round(value, getNumberOfDecimalPlaces(step)), max);\n}\nfunction getValueFromRate(min, max, rate, step) {\n const boundRate = clampNumber(0, rate, 1), range = max - min, fill = range * boundRate, stepRatio = fill / step, steps = step * Math.round(stepRatio);\n return min + steps;\n}\n\nconst SliderKeyDirection = {\n Left: -1,\n ArrowLeft: -1,\n Up: 1,\n ArrowUp: 1,\n Right: 1,\n ArrowRight: 1,\n Down: -1,\n ArrowDown: -1\n};\nclass SliderEventsController extends ViewController {\n #delegate;\n #media;\n #observer;\n constructor(delegate, media) {\n super();\n this.#delegate = delegate;\n this.#media = media;\n }\n onSetup() {\n if (hasProvidedContext(sliderObserverContext)) {\n this.#observer = useContext(sliderObserverContext);\n }\n }\n onConnect(el) {\n effect(this.#attachEventListeners.bind(this, el));\n effect(this.#attachPointerListeners.bind(this, el));\n if (this.#delegate.swipeGesture) effect(this.#watchSwipeGesture.bind(this));\n }\n #watchSwipeGesture() {\n const { pointer } = this.#media.$state;\n if (pointer() !== \"coarse\" || !this.#delegate.swipeGesture()) {\n this.#provider = null;\n return;\n }\n this.#provider = this.#media.player.el?.querySelector(\n \"media-provider,[data-media-provider]\"\n );\n if (!this.#provider) return;\n new EventsController(this.#provider).add(\"touchstart\", this.#onTouchStart.bind(this), {\n passive: true\n }).add(\"touchmove\", this.#onTouchMove.bind(this), { passive: false });\n }\n #provider = null;\n #touch = null;\n #touchStartValue = null;\n #onTouchStart(event) {\n this.#touch = event.touches[0];\n }\n #onTouchMove(event) {\n if (isNull(this.#touch) || isTouchPinchEvent(event)) return;\n const touch = event.touches[0], xDiff = touch.clientX - this.#touch.clientX, yDiff = touch.clientY - this.#touch.clientY, isDragging = this.$state.dragging();\n if (!isDragging && Math.abs(yDiff) > 5) {\n return;\n }\n if (isDragging) return;\n event.preventDefault();\n if (Math.abs(xDiff) > 20) {\n this.#touch = touch;\n this.#touchStartValue = this.$state.value();\n this.#onStartDragging(this.#touchStartValue, event);\n }\n }\n #attachEventListeners(el) {\n const { hidden } = this.$props;\n listenEvent(el, \"focus\", this.#onFocus.bind(this));\n if (hidden() || this.#delegate.isDisabled()) return;\n new EventsController(el).add(\"keyup\", this.#onKeyUp.bind(this)).add(\"keydown\", this.#onKeyDown.bind(this)).add(\"pointerenter\", this.#onPointerEnter.bind(this)).add(\"pointermove\", this.#onPointerMove.bind(this)).add(\"pointerleave\", this.#onPointerLeave.bind(this)).add(\"pointerdown\", this.#onPointerDown.bind(this));\n }\n #attachPointerListeners(el) {\n if (this.#delegate.isDisabled() || !this.$state.dragging()) return;\n new EventsController(document).add(\"pointerup\", this.#onDocumentPointerUp.bind(this), { capture: true }).add(\"pointermove\", this.#onDocumentPointerMove.bind(this)).add(\"touchmove\", this.#onDocumentTouchMove.bind(this), {\n passive: false\n });\n }\n #onFocus() {\n this.#updatePointerValue(this.$state.value());\n }\n #updateValue(newValue, trigger) {\n const { value, min, max, dragging } = this.$state;\n const clampedValue = Math.max(min(), Math.min(newValue, max()));\n value.set(clampedValue);\n const event = this.createEvent(\"value-change\", { detail: clampedValue, trigger });\n this.dispatch(event);\n this.#delegate.onValueChange?.(event);\n if (dragging()) {\n const event2 = this.createEvent(\"drag-value-change\", { detail: clampedValue, trigger });\n this.dispatch(event2);\n this.#delegate.onDragValueChange?.(event2);\n }\n }\n #updatePointerValue(value, trigger) {\n const { pointerValue, dragging } = this.$state;\n pointerValue.set(value);\n this.dispatch(\"pointer-value-change\", { detail: value, trigger });\n if (dragging()) {\n this.#updateValue(value, trigger);\n }\n }\n #getPointerValue(event) {\n let thumbPositionRate, rect = this.el.getBoundingClientRect(), { min, max } = this.$state;\n if (this.$props.orientation() === \"vertical\") {\n const { bottom: trackBottom, height: trackHeight } = rect;\n thumbPositionRate = (trackBottom - event.clientY) / trackHeight;\n } else {\n if (this.#touch && isNumber(this.#touchStartValue)) {\n const { width } = this.#provider.getBoundingClientRect(), rate = (event.clientX - this.#touch.clientX) / width, range = max() - min(), diff = range * Math.abs(rate);\n thumbPositionRate = (rate < 0 ? this.#touchStartValue - diff : this.#touchStartValue + diff) / range;\n } else {\n const { left: trackLeft, width: trackWidth } = rect;\n thumbPositionRate = (event.clientX - trackLeft) / trackWidth;\n }\n }\n return Math.max(\n min(),\n Math.min(\n max(),\n this.#delegate.roundValue(\n getValueFromRate(min(), max(), thumbPositionRate, this.#delegate.getStep())\n )\n )\n );\n }\n #onPointerEnter(event) {\n this.$state.pointing.set(true);\n }\n #onPointerMove(event) {\n const { dragging } = this.$state;\n if (dragging()) return;\n this.#updatePointerValue(this.#getPointerValue(event), event);\n }\n #onPointerLeave(event) {\n this.$state.pointing.set(false);\n }\n #onPointerDown(event) {\n if (event.button !== 0) return;\n const value = this.#getPointerValue(event);\n this.#onStartDragging(value, event);\n this.#updatePointerValue(value, event);\n }\n #onStartDragging(value, trigger) {\n const { dragging } = this.$state;\n if (dragging()) return;\n dragging.set(true);\n this.#media.remote.pauseControls(trigger);\n const event = this.createEvent(\"drag-start\", { detail: value, trigger });\n this.dispatch(event);\n this.#delegate.onDragStart?.(event);\n this.#observer?.onDragStart?.();\n }\n #onStopDragging(value, trigger) {\n const { dragging } = this.$state;\n if (!dragging()) return;\n dragging.set(false);\n this.#media.remote.resumeControls(trigger);\n const event = this.createEvent(\"drag-end\", { detail: value, trigger });\n this.dispatch(event);\n this.#delegate.onDragEnd?.(event);\n this.#touch = null;\n this.#touchStartValue = null;\n this.#observer?.onDragEnd?.();\n }\n // -------------------------------------------------------------------------------------------\n // Keyboard Events\n // -------------------------------------------------------------------------------------------\n #lastDownKey;\n #repeatedKeys = false;\n #onKeyDown(event) {\n const isValidKey = Object.keys(SliderKeyDirection).includes(event.key);\n if (!isValidKey) return;\n const { key } = event, jumpValue = this.#calcJumpValue(event);\n if (!isNull(jumpValue)) {\n this.#updatePointerValue(jumpValue, event);\n this.#updateValue(jumpValue, event);\n return;\n }\n const newValue = this.#calcNewKeyValue(event);\n if (!this.#repeatedKeys) {\n this.#repeatedKeys = key === this.#lastDownKey;\n if (!this.$state.dragging() && this.#repeatedKeys) {\n this.#onStartDragging(newValue, event);\n }\n }\n this.#updatePointerValue(newValue, event);\n this.#lastDownKey = key;\n }\n #onKeyUp(event) {\n const isValidKey = Object.keys(SliderKeyDirection).includes(event.key);\n if (!isValidKey || !isNull(this.#calcJumpValue(event))) return;\n const newValue = this.#repeatedKeys ? this.$state.pointerValue() : this.#calcNewKeyValue(event);\n this.#updateValue(newValue, event);\n this.#onStopDragging(newValue, event);\n this.#lastDownKey = \"\";\n this.#repeatedKeys = false;\n }\n #calcJumpValue(event) {\n let key = event.key, { min, max } = this.$state;\n if (key === \"Home\" || key === \"PageUp\") {\n return min();\n } else if (key === \"End\" || key === \"PageDown\") {\n return max();\n } else if (!event.metaKey && /^[0-9]$/.test(key)) {\n return (max() - min()) / 10 * Number(key);\n }\n return null;\n }\n #calcNewKeyValue(event) {\n const { key, shiftKey } = event;\n event.preventDefault();\n event.stopPropagation();\n const { shiftKeyMultiplier } = this.$props;\n const { min, max, value, pointerValue } = this.$state, step = this.#delegate.getStep(), keyStep = this.#delegate.getKeyStep();\n const modifiedStep = !shiftKey ? keyStep : keyStep * shiftKeyMultiplier(), direction = Number(SliderKeyDirection[key]), diff = modifiedStep * direction, currentValue = this.#repeatedKeys ? pointerValue() : this.#delegate.getValue?.() ?? value(), steps = (currentValue + diff) / step;\n return Math.max(min(), Math.min(max(), Number((step * steps).toFixed(3))));\n }\n // -------------------------------------------------------------------------------------------\n // Document (Pointer Events)\n // -------------------------------------------------------------------------------------------\n #onDocumentPointerUp(event) {\n if (event.button !== 0) return;\n event.preventDefault();\n event.stopImmediatePropagation();\n const value = this.#getPointerValue(event);\n this.#updatePointerValue(value, event);\n this.#onStopDragging(value, event);\n }\n #onDocumentTouchMove(event) {\n event.preventDefault();\n }\n #onDocumentPointerMove = functionThrottle(\n (event) => {\n this.#updatePointerValue(this.#getPointerValue(event), event);\n },\n 20,\n { leading: true }\n );\n}\n\nconst sliderValueFormatContext = createContext(() => ({}));\n\nclass SliderController extends ViewController {\n static props = {\n hidden: false,\n disabled: false,\n step: 1,\n keyStep: 1,\n orientation: \"horizontal\",\n shiftKeyMultiplier: 5\n };\n #media;\n #delegate;\n #isVisible = signal(true);\n #isIntersecting = signal(true);\n constructor(delegate) {\n super();\n this.#delegate = delegate;\n }\n onSetup() {\n this.#media = useMediaContext();\n const focus = new FocusVisibleController();\n focus.attach(this);\n this.$state.focused = focus.focused.bind(focus);\n if (!hasProvidedContext(sliderValueFormatContext)) {\n provideContext(sliderValueFormatContext, {\n default: \"value\"\n });\n }\n provideContext(sliderContext, {\n orientation: this.$props.orientation,\n disabled: this.#delegate.isDisabled,\n preview: signal(null)\n });\n effect(this.#watchValue.bind(this));\n effect(this.#watchStep.bind(this));\n effect(this.#watchDisabled.bind(this));\n this.#setupAttrs();\n new SliderEventsController(this.#delegate, this.#media).attach(this);\n new IntersectionObserverController({\n callback: this.#onIntersectionChange.bind(this)\n }).attach(this);\n }\n onAttach(el) {\n setAttributeIfEmpty(el, \"role\", \"slider\");\n setAttributeIfEmpty(el, \"tabindex\", \"0\");\n setAttributeIfEmpty(el, \"autocomplete\", \"off\");\n if (IS_SERVER) this.#watchCSSVars();\n else effect(this.#watchCSSVars.bind(this));\n }\n onConnect(el) {\n onDispose(observeVisibility(el, this.#isVisible.set));\n effect(this.#watchHidden.bind(this));\n }\n #onIntersectionChange(entries) {\n this.#isIntersecting.set(entries[0].isIntersecting);\n }\n // -------------------------------------------------------------------------------------------\n // Watch\n // -------------------------------------------------------------------------------------------\n #watchHidden() {\n const { hidden } = this.$props;\n this.$state.hidden.set(hidden() || !this.#isVisible() || !this.#isIntersecting.bind(this));\n }\n #watchValue() {\n const { dragging, value, min, max } = this.$state;\n if (peek(dragging)) return;\n value.set(getClampedValue(min(), max(), value(), this.#delegate.getStep()));\n }\n #watchStep() {\n this.$state.step.set(this.#delegate.getStep());\n }\n #watchDisabled() {\n if (!this.#delegate.isDisabled()) return;\n const { dragging, pointing } = this.$state;\n dragging.set(false);\n pointing.set(false);\n }\n // -------------------------------------------------------------------------------------------\n // ARIA\n // -------------------------------------------------------------------------------------------\n #getARIADisabled() {\n return ariaBool$1(this.#delegate.isDisabled());\n }\n // -------------------------------------------------------------------------------------------\n // Attributes\n // -------------------------------------------------------------------------------------------\n #setupAttrs() {\n const { orientation } = this.$props, { dragging, active, pointing } = this.$state;\n this.setAttributes({\n \"data-dragging\": dragging,\n \"data-pointing\": pointing,\n \"data-active\": active,\n \"aria-disabled\": this.#getARIADisabled.bind(this),\n \"aria-valuemin\": this.#delegate.aria.valueMin ?? this.$state.min,\n \"aria-valuemax\": this.#delegate.aria.valueMax ?? this.$state.max,\n \"aria-valuenow\": this.#delegate.aria.valueNow,\n \"aria-valuetext\": this.#delegate.aria.valueText,\n \"aria-orientation\": orientation\n });\n }\n #watchCSSVars() {\n const { fillPercent, pointerPercent } = this.$state;\n this.#updateSliderVars(round(fillPercent(), 3), round(pointerPercent(), 3));\n }\n #updateSliderVars = animationFrameThrottle((fillPercent, pointerPercent) => {\n this.el?.style.setProperty(\"--slider-fill\", fillPercent + \"%\");\n this.el?.style.setProperty(\"--slider-pointer\", pointerPercent + \"%\");\n });\n}\n\nclass Slider extends Component {\n static props = {\n ...SliderController.props,\n min: 0,\n max: 100,\n value: 0\n };\n static state = sliderState;\n constructor() {\n super();\n new SliderController({\n getStep: this.$props.step,\n getKeyStep: this.$props.keyStep,\n roundValue: Math.round,\n isDisabled: this.$props.disabled,\n aria: {\n valueNow: this.#getARIAValueNow.bind(this),\n valueText: this.#getARIAValueText.bind(this)\n }\n });\n }\n onSetup() {\n effect(this.#watchValue.bind(this));\n effect(this.#watchMinMax.bind(this));\n }\n // -------------------------------------------------------------------------------------------\n // Props\n // -------------------------------------------------------------------------------------------\n #getARIAValueNow() {\n const { value } = this.$state;\n return Math.round(value());\n }\n #getARIAValueText() {\n const { value, max } = this.$state;\n return round(value() / max() * 100, 2) + \"%\";\n }\n // -------------------------------------------------------------------------------------------\n // Watch\n // -------------------------------------------------------------------------------------------\n #watchValue() {\n const { value } = this.$props;\n this.$state.value.set(value());\n }\n #watchMinMax() {\n const { min, max } = this.$props;\n this.$state.min.set(min());\n this.$state.max.set(max());\n }\n}\n\nconst cache = /* @__PURE__ */ new Map(), pending = /* @__PURE__ */ new Map();\nclass ThumbnailsLoader {\n #media;\n #src;\n #crossOrigin;\n $images = signal([]);\n static create(src, crossOrigin) {\n const media = useMediaContext();\n return new ThumbnailsLoader(src, crossOrigin, media);\n }\n constructor(src, crossOrigin, media) {\n this.#src = src;\n this.#crossOrigin = crossOrigin;\n this.#media = media;\n effect(this.#onLoadCues.bind(this));\n }\n #onLoadCues() {\n const { canLoad } = this.#media.$state;\n if (!canLoad()) return;\n const src = this.#src();\n if (!src) return;\n if (isString(src) && cache.has(src)) {\n const cues = cache.get(src);\n cache.delete(src);\n cache.set(src, cues);\n if (cache.size > 99) {\n const firstKey = cache.keys().next().value;\n cache.delete(firstKey);\n }\n this.$images.set(cache.get(src));\n } else if (isString(src)) {\n const crossOrigin = this.#crossOrigin(), currentKey = src + \"::\" + crossOrigin;\n if (!pending.has(currentKey)) {\n const promise = new Promise(async (resolve, reject) => {\n try {\n const response = await fetch(src, {\n credentials: getRequestCredentials(crossOrigin)\n }), isJSON = response.headers.get(\"content-type\") === \"application/json\";\n if (isJSON) {\n const json = await response.json();\n if (isArray(json)) {\n if (json[0] && \"text\" in json[0]) {\n resolve(this.#processVTTCues(json));\n } else {\n for (let i = 0; i < json.length; i++) {\n const image = json[i];\n assert(isObject(image), false);\n assert(\n \"url\" in image && isString(image.url),\n false\n );\n assert(\n \"startTime\" in image && isNumber(image.startTime),\n false\n );\n }\n resolve(json);\n }\n } else {\n resolve(this.#processStoryboard(json));\n }\n return;\n }\n import('media-captions').then(async ({ parseResponse }) => {\n try {\n const { cues } = await parseResponse(response);\n resolve(this.#processVTTCues(cues));\n } catch (e) {\n reject(e);\n }\n });\n } catch (e) {\n reject(e);\n }\n }).then((images) => {\n cache.set(currentKey, images);\n return images;\n }).catch((error) => {\n this.#onError(src, error);\n }).finally(() => {\n if (isString(currentKey)) pending.delete(currentKey);\n });\n pending.set(currentKey, promise);\n }\n pending.get(currentKey)?.then((images) => {\n this.$images.set(images || []);\n });\n } else if (isArray(src)) {\n try {\n this.$images.set(this.#processImages(src));\n } catch (error) {\n this.#onError(src, error);\n }\n } else {\n try {\n this.$images.set(this.#processStoryboard(src));\n } catch (error) {\n this.#onError(src, error);\n }\n }\n return () => {\n this.$images.set([]);\n };\n }\n #processImages(images) {\n const baseURL = this.#resolveBaseUrl();\n return images.map((img, i) => {\n assert(\n img.url && isString(img.url));\n assert(\n \"startTime\" in img && isNumber(img.startTime));\n return {\n ...img,\n url: isString(img.url) ? this.#resolveURL(img.url, baseURL) : img.url\n };\n });\n }\n #processStoryboard(board) {\n assert(isString(board.url));\n assert(isArray(board.tiles) && board.tiles?.length);\n const url = new URL(board.url), images = [];\n const tileWidth = \"tile_width\" in board ? board.tile_width : board.tileWidth, tileHeight = \"tile_height\" in board ? board.tile_height : board.tileHeight;\n for (const tile of board.tiles) {\n images.push({\n url,\n startTime: \"start\" in tile ? tile.start : tile.startTime,\n width: tileWidth,\n height: tileHeight,\n coords: { x: tile.x, y: tile.y }\n });\n }\n return images;\n }\n #processVTTCues(cues) {\n for (let i = 0; i < cues.length; i++) {\n const cue = cues[i];\n assert(\n \"startTime\" in cue && isNumber(cue.startTime));\n assert(\n \"text\" in cue && isString(cue.text));\n }\n const images = [], baseURL = this.#resolveBaseUrl();\n for (const cue of cues) {\n const [url, hash] = cue.text.split(\"#\"), data = this.#resolveData(hash);\n images.push({\n url: this.#resolveURL(url, baseURL),\n startTime: cue.startTime,\n endTime: cue.endTime,\n width: data?.w,\n height: data?.h,\n coords: data && isNumber(data.x) && isNumber(data.y) ? { x: data.x, y: data.y } : void 0\n });\n }\n return images;\n }\n #resolveBaseUrl() {\n let baseURL = peek(this.#src);\n if (!isString(baseURL) || !/^https?:/.test(baseURL)) {\n return location.href;\n }\n return baseURL;\n }\n #resolveURL(src, baseURL) {\n return /^https?:/.test(src) ? new URL(src) : new URL(src, baseURL);\n }\n #resolveData(hash) {\n if (!hash) return {};\n const [hashProps, values] = hash.split(\"=\"), hashValues = values?.split(\",\"), data = {};\n if (!hashProps || !hashValues) {\n return null;\n }\n for (let i = 0; i < hashProps.length; i++) {\n const value = +hashValues[i];\n if (!isNaN(value)) data[hashProps[i]] = value;\n }\n return data;\n }\n #onError(src, error) {\n return;\n }\n}\n\nclass Thumbnail extends Component {\n static props = {\n src: null,\n time: 0,\n crossOrigin: null\n };\n static state = new State({\n src: \"\",\n img: null,\n thumbnails: [],\n activeThumbnail: null,\n crossOrigin: null,\n loading: false,\n error: null,\n hidden: false\n });\n media;\n #loader;\n #styleResets = [];\n onSetup() {\n this.media = useMediaContext();\n this.#loader = ThumbnailsLoader.create(this.$props.src, this.$state.crossOrigin);\n this.#watchCrossOrigin();\n this.setAttributes({\n \"data-loading\": this.#isLoading.bind(this),\n \"data-error\": this.#hasError.bind(this),\n \"data-hidden\": this.$state.hidden,\n \"aria-hidden\": $ariaBool(this.$state.hidden)\n });\n }\n onConnect(el) {\n effect(this.#watchImg.bind(this));\n effect(this.#watchHidden.bind(this));\n effect(this.#watchCrossOrigin.bind(this));\n effect(this.#onLoadStart.bind(this));\n effect(this.#onFindActiveThumbnail.bind(this));\n effect(this.#resize.bind(this));\n }\n #watchImg() {\n const img = this.$state.img();\n if (!img) return;\n new EventsController(img).add(\"load\", this.#onLoaded.bind(this)).add(\"error\", this.#onError.bind(this));\n }\n #watchCrossOrigin() {\n const { crossOrigin: crossOriginProp } = this.$props, { crossOrigin: crossOriginState } = this.$state, { crossOrigin: mediaCrossOrigin } = this.media.$state, crossOrigin = crossOriginProp() !== null ? crossOriginProp() : mediaCrossOrigin();\n crossOriginState.set(crossOrigin === true ? \"anonymous\" : crossOrigin);\n }\n #onLoadStart() {\n const { src, loading, error } = this.$state;\n if (src()) {\n loading.set(true);\n error.set(null);\n }\n return () => {\n this.#resetStyles();\n loading.set(false);\n error.set(null);\n };\n }\n #onLoaded() {\n const { loading, error } = this.$state;\n this.#resize();\n loading.set(false);\n error.set(null);\n }\n #onError(event) {\n const { loading, error } = this.$state;\n loading.set(false);\n error.set(event);\n }\n #isLoading() {\n const { loading, hidden } = this.$state;\n return !hidden() && loading();\n }\n #hasError() {\n const { error } = this.$state;\n return !isNull(error());\n }\n #watchHidden() {\n const { hidden } = this.$state, { duration } = this.media.$state, images = this.#loader.$images();\n hidden.set(this.#hasError() || !Number.isFinite(duration()) || images.length === 0);\n }\n getTime() {\n return this.$props.time();\n }\n #onFindActiveThumbnail() {\n let images = this.#loader.$images();\n if (!images.length) return;\n let time = this.getTime(), { src, activeThumbnail } = this.$state, activeIndex = -1, activeImage = null;\n for (let i = images.length - 1; i >= 0; i--) {\n const image = images[i];\n if (time >= image.startTime && (!image.endTime || time < image.endTime)) {\n activeIndex = i;\n break;\n }\n }\n if (images[activeIndex]) {\n activeImage = images[activeIndex];\n }\n activeThumbnail.set(activeImage);\n src.set(activeImage?.url.href || \"\");\n }\n #resize() {\n if (!this.scope || this.$state.hidden()) return;\n const rootEl = this.el, imgEl = this.$state.img(), thumbnail = this.$state.activeThumbnail();\n if (!imgEl || !thumbnail || !rootEl) return;\n let width = thumbnail.width ?? imgEl.naturalWidth, height = thumbnail?.height ?? imgEl.naturalHeight, {\n maxWidth,\n maxHeight,\n minWidth,\n minHeight,\n width: elWidth,\n height: elHeight\n } = getComputedStyle(this.el);\n if (minWidth === \"100%\") minWidth = parseFloat(elWidth) + \"\";\n if (minHeight === \"100%\") minHeight = parseFloat(elHeight) + \"\";\n let minRatio = Math.max(parseInt(minWidth) / width, parseInt(minHeight) / height), maxRatio = Math.min(\n Math.max(parseInt(minWidth), parseInt(maxWidth)) / width,\n Math.max(parseInt(minHeight), parseInt(maxHeight)) / height\n ), scale = !isNaN(maxRatio) && maxRatio < 1 ? maxRatio : minRatio > 1 ? minRatio : 1;\n this.#style(rootEl, \"--thumbnail-width\", `${width * scale}px`);\n this.#style(rootEl, \"--thumbnail-height\", `${height * scale}px`);\n this.#style(rootEl, \"--thumbnail-aspect-ratio\", String(round(width / height, 5)));\n this.#style(imgEl, \"width\", `${imgEl.naturalWidth * scale}px`);\n this.#style(imgEl, \"height\", `${imgEl.naturalHeight * scale}px`);\n this.#style(\n imgEl,\n \"transform\",\n thumbnail.coords ? `translate(-${thumbnail.coords.x * scale}px, -${thumbnail.coords.y * scale}px)` : \"\"\n );\n this.#style(imgEl, \"max-width\", \"none\");\n }\n #style(el, name, value) {\n el.style.setProperty(name, value);\n this.#styleResets.push(() => el.style.removeProperty(name));\n }\n #resetStyles() {\n for (const reset of this.#styleResets) reset();\n this.#styleResets = [];\n }\n}\n\nclass SliderThumbnail extends Thumbnail {\n #slider;\n onAttach(el) {\n this.#slider = useState(Slider.state);\n }\n getTime() {\n const { duration, clipStartTime } = this.media.$state;\n return clipStartTime() + this.#slider.pointerRate() * duration();\n }\n}\n\nclass SliderVideo extends Component {\n static props = {\n src: null,\n crossOrigin: null\n };\n static state = new State({\n video: null,\n src: null,\n crossOrigin: null,\n canPlay: false,\n error: null,\n hidden: false\n });\n #media;\n #slider;\n get video() {\n return this.$state.video();\n }\n onSetup() {\n this.#media = useMediaContext();\n this.#slider = useState(Slider.state);\n this.#watchCrossOrigin();\n this.setAttributes({\n \"data-loading\": this.#isLoading.bind(this),\n \"data-hidden\": this.$state.hidden,\n \"data-error\": this.#hasError.bind(this),\n \"aria-hidden\": $ariaBool(this.$state.hidden)\n });\n }\n onAttach(el) {\n effect(this.#watchVideo.bind(this));\n effect(this.#watchSrc.bind(this));\n effect(this.#watchCrossOrigin.bind(this));\n effect(this.#watchHidden.bind(this));\n effect(this.#onSrcChange.bind(this));\n effect(this.#onUpdateTime.bind(this));\n }\n #watchVideo() {\n const video = this.$state.video();\n if (!video) return;\n if (video.readyState >= 2) this.#onCanPlay();\n new EventsController(video).add(\"canplay\", this.#onCanPlay.bind(this)).add(\"error\", this.#onError.bind(this));\n }\n #watchSrc() {\n const { src } = this.$state, { canLoad } = this.#media.$state;\n src.set(canLoad() ? this.$props.src() : null);\n }\n #watchCrossOrigin() {\n const { crossOrigin: crossOriginProp } = this.$props, { crossOrigin: crossOriginState } = this.$state, { crossOrigin: mediaCrossOrigin } = this.#media.$state, crossOrigin = crossOriginProp() !== null ? crossOriginProp() : mediaCrossOrigin();\n crossOriginState.set(crossOrigin === true ? \"anonymous\" : crossOrigin);\n }\n #isLoading() {\n const { canPlay, hidden } = this.$state;\n return !canPlay() && !hidden();\n }\n #hasError() {\n const { error } = this.$state;\n return !isNull(error);\n }\n #watchHidden() {\n const { src, hidden } = this.$state, { canLoad, duration } = this.#media.$state;\n hidden.set(canLoad() && (!src() || this.#hasError() || !Number.isFinite(duration())));\n }\n #onSrcChange() {\n const { src, canPlay, error } = this.$state;\n src();\n canPlay.set(false);\n error.set(null);\n }\n #onCanPlay(event) {\n const { canPlay, error } = this.$state;\n canPlay.set(true);\n error.set(null);\n this.dispatch(\"can-play\", { trigger: event });\n }\n #onError(event) {\n const { canPlay, error } = this.$state;\n canPlay.set(false);\n error.set(event);\n this.dispatch(\"error\", { trigger: event });\n }\n #onUpdateTime() {\n const { video, canPlay } = this.$state, { duration } = this.#media.$state, { pointerRate } = this.#slider, media = video(), canUpdate = canPlay() && media && Number.isFinite(duration()) && Number.isFinite(pointerRate());\n if (canUpdate) {\n media.currentTime = pointerRate() * duration();\n }\n }\n}\nconst slidervideo__proto = SliderVideo.prototype;\nprop(slidervideo__proto, \"video\");\n\nclass SliderValue extends Component {\n static props = {\n type: \"pointer\",\n format: null,\n showHours: false,\n showMs: false,\n padHours: null,\n padMinutes: null,\n decimalPlaces: 2\n };\n #format;\n #text;\n #slider;\n onSetup() {\n this.#slider = useState(Slider.state);\n this.#format = useContext(sliderValueFormatContext);\n this.#text = computed(this.getValueText.bind(this));\n }\n /**\n * Returns the current value formatted as text based on prop settings.\n */\n getValueText() {\n const {\n type,\n format: $format,\n decimalPlaces,\n padHours,\n padMinutes,\n showHours,\n showMs\n } = this.$props, { value: sliderValue, pointerValue, min, max } = this.#slider, format = $format?.() ?? this.#format.default;\n const value = type() === \"current\" ? sliderValue() : pointerValue();\n if (format === \"percent\") {\n const range = max() - min();\n const percent = value / range * 100;\n return (this.#format.percent ?? round)(percent, decimalPlaces()) + \"%\";\n } else if (format === \"time\") {\n return (this.#format.time ?? formatTime)(value, {\n padHrs: padHours(),\n padMins: padMinutes(),\n showHrs: showHours(),\n showMs: showMs()\n });\n } else {\n return (this.#format.value?.(value) ?? value.toFixed(2)) + \"\";\n }\n }\n}\nconst slidervalue__proto = SliderValue.prototype;\nmethod(slidervalue__proto, \"getValueText\");\n\nclass SliderPreview extends Component {\n static props = {\n offset: 0,\n noClamp: false\n };\n #slider;\n onSetup() {\n this.#slider = useContext(sliderContext);\n const { active } = useState(Slider.state);\n this.setAttributes({\n \"data-visible\": active\n });\n }\n onAttach(el) {\n Object.assign(el.style, {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"max-content\"\n });\n }\n onConnect(el) {\n const { preview } = this.#slider;\n preview.set(el);\n onDispose(() => preview.set(null));\n effect(this.#updatePlacement.bind(this));\n const resize = new ResizeObserver(this.#updatePlacement.bind(this));\n resize.observe(el);\n onDispose(() => resize.disconnect());\n }\n #updatePlacement = animationFrameThrottle(() => {\n const { disabled, orientation } = this.#slider;\n if (disabled()) return;\n const el = this.el, { offset, noClamp } = this.$props;\n if (!el) return;\n updateSliderPreviewPlacement(el, {\n clamp: !noClamp(),\n offset: offset(),\n orientation: orientation()\n });\n });\n}\nfunction updateSliderPreviewPlacement(el, {\n clamp,\n offset,\n orientation\n}) {\n const computedStyle = getComputedStyle(el), width = parseFloat(computedStyle.width), height = parseFloat(computedStyle.height), styles = {\n top: null,\n right: null,\n bottom: null,\n left: null\n };\n styles[orientation === \"horizontal\" ? \"bottom\" : \"left\"] = `calc(100% + var(--media-slider-preview-offset, ${offset}px))`;\n if (orientation === \"horizontal\") {\n const widthHalf = width / 2;\n if (!clamp) {\n styles.left = `calc(var(--slider-pointer) - ${widthHalf}px)`;\n } else {\n const leftClamp = `max(0px, calc(var(--slider-pointer) - ${widthHalf}px))`, rightClamp = `calc(100% - ${width}px)`;\n styles.left = `min(${leftClamp}, ${rightClamp})`;\n }\n } else {\n const heightHalf = height / 2;\n if (!clamp) {\n styles.bottom = `calc(var(--slider-pointer) - ${heightHalf}px)`;\n } else {\n const topClamp = `max(${heightHalf}px, calc(var(--slider-pointer) - ${heightHalf}px))`, bottomClamp = `calc(100% - ${height}px)`;\n styles.bottom = `min(${topClamp}, ${bottomClamp})`;\n }\n }\n Object.assign(el.style, styles);\n}\n\nclass VolumeSlider extends Component {\n static props = {\n ...SliderController.props,\n keyStep: 5,\n shiftKeyMultiplier: 2\n };\n static state = sliderState;\n #media;\n onSetup() {\n this.#media = useMediaContext();\n const { audioGain } = this.#media.$state;\n provideContext(sliderValueFormatContext, {\n default: \"percent\",\n value(value) {\n return (value * (audioGain() ?? 1)).toFixed(2);\n },\n percent(value) {\n return Math.round(value * (audioGain() ?? 1));\n }\n });\n new SliderController({\n getStep: this.$props.step,\n getKeyStep: this.$props.keyStep,\n roundValue: Math.round,\n isDisabled: this.#isDisabled.bind(this),\n aria: {\n valueMax: this.#getARIAValueMax.bind(this),\n valueNow: this.#getARIAValueNow.bind(this),\n valueText: this.#getARIAValueText.bind(this)\n },\n onDragValueChange: this.#onDragValueChange.bind(this),\n onValueChange: this.#onValueChange.bind(this)\n }).attach(this);\n effect(this.#watchVolume.bind(this));\n }\n onAttach(el) {\n el.setAttribute(\"data-media-volume-slider\", \"\");\n setAttributeIfEmpty(el, \"aria-label\", \"Volume\");\n const { canSetVolume } = this.#media.$state;\n this.setAttributes({\n \"data-supported\": canSetVolume,\n \"aria-hidden\": $ariaBool(() => !canSetVolume())\n });\n }\n #getARIAValueNow() {\n const { value } = this.$state, { audioGain } = this.#media.$state;\n return Math.round(value() * (audioGain() ?? 1));\n }\n #getARIAValueText() {\n const { value, max } = this.$state, { audioGain } = this.#media.$state;\n return round(value() / max() * (audioGain() ?? 1) * 100, 2) + \"%\";\n }\n #getARIAValueMax() {\n const { audioGain } = this.#media.$state;\n return this.$state.max() * (audioGain() ?? 1);\n }\n #isDisabled() {\n const { disabled } = this.$props, { canSetVolume } = this.#media.$state;\n return disabled() || !canSetVolume();\n }\n #watchVolume() {\n const { muted, volume } = this.#media.$state;\n const newValue = muted() ? 0 : volume() * 100;\n this.$state.value.set(newValue);\n this.dispatch(\"value-change\", { detail: newValue });\n }\n #throttleVolumeChange = functionThrottle(this.#onVolumeChange.bind(this), 25);\n #onVolumeChange(event) {\n if (!event.trigger) return;\n const mediaVolume = round(event.detail / 100, 3);\n this.#media.remote.changeVolume(mediaVolume, event);\n }\n #onValueChange(event) {\n this.#throttleVolumeChange(event);\n }\n #onDragValueChange(event) {\n this.#throttleVolumeChange(event);\n }\n}\n\nclass AudioGainSlider extends Component {\n static props = {\n ...SliderController.props,\n step: 25,\n keyStep: 25,\n shiftKeyMultiplier: 2,\n min: 0,\n max: 300\n };\n static state = sliderState;\n #media;\n onSetup() {\n this.#media = useMediaContext();\n provideContext(sliderValueFormatContext, {\n default: \"percent\",\n percent: (_, decimalPlaces) => {\n return round(this.$state.value(), decimalPlaces) + \"%\";\n }\n });\n new SliderController({\n getStep: this.$props.step,\n getKeyStep: this.$props.keyStep,\n roundValue: Math.round,\n isDisabled: this.#isDisabled.bind(this),\n aria: {\n valueNow: this.#getARIAValueNow.bind(this),\n valueText: this.#getARIAValueText.bind(this)\n },\n onDragValueChange: this.#onDragValueChange.bind(this),\n onValueChange: this.#onValueChange.bind(this)\n }).attach(this);\n effect(this.#watchMinMax.bind(this));\n effect(this.#watchAudioGain.bind(this));\n }\n onAttach(el) {\n el.setAttribute(\"data-media-audio-gain-slider\", \"\");\n setAttributeIfEmpty(el, \"aria-label\", \"Audio Boost\");\n const { canSetAudioGain } = this.#media.$state;\n this.setAttributes({\n \"data-supported\": canSetAudioGain,\n \"aria-hidden\": $ariaBool(() => !canSetAudioGain())\n });\n }\n #getARIAValueNow() {\n const { value } = this.$state;\n return Math.round(value());\n }\n #getARIAValueText() {\n const { value } = this.$state;\n return value() + \"%\";\n }\n #watchMinMax() {\n const { min, max } = this.$props;\n this.$state.min.set(min());\n this.$state.max.set(max());\n }\n #watchAudioGain() {\n const { audioGain } = this.#media.$state, value = ((audioGain() ?? 1) - 1) * 100;\n this.$state.value.set(value);\n this.dispatch(\"value-change\", { detail: value });\n }\n #isDisabled() {\n const { disabled } = this.$props, { canSetAudioGain } = this.#media.$state;\n return disabled() || !canSetAudioGain();\n }\n #onAudioGainChange(event) {\n if (!event.trigger) return;\n const gain = round(1 + event.detail / 100, 2);\n this.#media.remote.changeAudioGain(gain, event);\n }\n #onValueChange(event) {\n this.#onAudioGainChange(event);\n }\n #onDragValueChange(event) {\n this.#onAudioGainChange(event);\n }\n}\n\nclass SpeedSlider extends Component {\n static props = {\n ...SliderController.props,\n step: 0.25,\n keyStep: 0.25,\n shiftKeyMultiplier: 2,\n min: 0,\n max: 2\n };\n static state = sliderState;\n #media;\n onSetup() {\n this.#media = useMediaContext();\n new SliderController({\n getStep: this.$props.step,\n getKeyStep: this.$props.keyStep,\n roundValue: this.#roundValue,\n isDisabled: this.#isDisabled.bind(this),\n aria: {\n valueNow: this.#getARIAValueNow.bind(this),\n valueText: this.#getARIAValueText.bind(this)\n },\n onDragValueChange: this.#onDragValueChange.bind(this),\n onValueChange: this.#onValueChange.bind(this)\n }).attach(this);\n effect(this.#watchMinMax.bind(this));\n effect(this.#watchPlaybackRate.bind(this));\n }\n onAttach(el) {\n el.setAttribute(\"data-media-speed-slider\", \"\");\n setAttributeIfEmpty(el, \"aria-label\", \"Speed\");\n const { canSetPlaybackRate } = this.#media.$state;\n this.setAttributes({\n \"data-supported\": canSetPlaybackRate,\n \"aria-hidden\": $ariaBool(() => !canSetPlaybackRate())\n });\n }\n #getARIAValueNow() {\n const { value } = this.$state;\n return value();\n }\n #getARIAValueText() {\n const { value } = this.$state;\n return value() + \"x\";\n }\n #watchMinMax() {\n const { min, max } = this.$props;\n this.$state.min.set(min());\n this.$state.max.set(max());\n }\n #watchPlaybackRate() {\n const { playbackRate } = this.#media.$state;\n const newValue = playbackRate();\n this.$state.value.set(newValue);\n this.dispatch(\"value-change\", { detail: newValue });\n }\n #roundValue(value) {\n return round(value, 2);\n }\n #isDisabled() {\n const { disabled } = this.$props, { canSetPlaybackRate } = this.#media.$state;\n return disabled() || !canSetPlaybackRate();\n }\n #throttledSpeedChange = functionThrottle(this.#onPlaybackRateChange.bind(this), 25);\n #onPlaybackRateChange(event) {\n if (!event.trigger) return;\n const rate = event.detail;\n this.#media.remote.changePlaybackRate(rate, event);\n }\n #onValueChange(event) {\n this.#throttledSpeedChange(event);\n }\n #onDragValueChange(event) {\n this.#throttledSpeedChange(event);\n }\n}\n\nclass QualitySlider extends Component {\n static props = {\n ...SliderController.props,\n step: 1,\n keyStep: 1,\n shiftKeyMultiplier: 1\n };\n static state = sliderState;\n #media;\n #sortedQualities = computed(() => {\n const { qualities } = this.#media.$state;\n return sortVideoQualities(qualities());\n });\n onSetup() {\n this.#media = useMediaContext();\n new SliderController({\n getStep: this.$props.step,\n getKeyStep: this.$props.keyStep,\n roundValue: Math.round,\n isDisabled: this.#isDisabled.bind(this),\n aria: {\n valueNow: this.#getARIAValueNow.bind(this),\n valueText: this.#getARIAValueText.bind(this)\n },\n onDragValueChange: this.#onDragValueChange.bind(this),\n onValueChange: this.#onValueChange.bind(this)\n }).attach(this);\n effect(this.#watchMax.bind(this));\n effect(this.#watchQuality.bind(this));\n }\n onAttach(el) {\n el.setAttribute(\"data-media-quality-slider\", \"\");\n setAttributeIfEmpty(el, \"aria-label\", \"Video Quality\");\n const { qualities, canSetQuality } = this.#media.$state, $supported = computed(() => canSetQuality() && qualities().length > 0);\n this.setAttributes({\n \"data-supported\": $supported,\n \"aria-hidden\": $ariaBool(() => !$supported())\n });\n }\n #getARIAValueNow() {\n const { value } = this.$state;\n return value();\n }\n #getARIAValueText() {\n const { quality } = this.#media.$state;\n if (!quality()) return \"\";\n const { height, bitrate } = quality(), bitrateText = bitrate && bitrate > 0 ? `${(bitrate / 1e6).toFixed(2)} Mbps` : null;\n return height ? `${height}p${bitrateText ? ` (${bitrateText})` : \"\"}` : \"Auto\";\n }\n #watchMax() {\n const $qualities = this.#sortedQualities();\n this.$state.max.set(Math.max(0, $qualities.length - 1));\n }\n #watchQuality() {\n let { quality } = this.#media.$state, $qualities = this.#sortedQualities(), value = Math.max(0, $qualities.indexOf(quality()));\n this.$state.value.set(value);\n this.dispatch(\"value-change\", { detail: value });\n }\n #isDisabled() {\n const { disabled } = this.$props, { canSetQuality, qualities } = this.#media.$state;\n return disabled() || qualities().length <= 1 || !canSetQuality();\n }\n #throttledQualityChange = functionThrottle(this.#onQualityChange.bind(this), 25);\n #onQualityChange(event) {\n if (!event.trigger) return;\n const { qualities } = this.#media, quality = peek(this.#sortedQualities)[event.detail];\n this.#media.remote.changeQuality(qualities.indexOf(quality), event);\n }\n #onValueChange(event) {\n this.#throttledQualityChange(event);\n }\n #onDragValueChange(event) {\n this.#throttledQualityChange(event);\n }\n}\n\nclass TimeSlider extends Component {\n static props = {\n ...SliderController.props,\n step: 0.1,\n keyStep: 5,\n shiftKeyMultiplier: 2,\n pauseWhileDragging: false,\n noSwipeGesture: false,\n seekingRequestThrottle: 100\n };\n static state = sliderState;\n #media;\n #dispatchSeeking;\n #chapter = signal(null);\n constructor() {\n super();\n const { noSwipeGesture } = this.$props;\n new SliderController({\n swipeGesture: () => !noSwipeGesture(),\n getValue: this.#getValue.bind(this),\n getStep: this.#getStep.bind(this),\n getKeyStep: this.#getKeyStep.bind(this),\n roundValue: this.#roundValue,\n isDisabled: this.#isDisabled.bind(this),\n aria: {\n valueNow: this.#getARIAValueNow.bind(this),\n valueText: this.#getARIAValueText.bind(this)\n },\n onDragStart: this.#onDragStart.bind(this),\n onDragValueChange: this.#onDragValueChange.bind(this),\n onDragEnd: this.#onDragEnd.bind(this),\n onValueChange: this.#onValueChange.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n provideContext(sliderValueFormatContext, {\n default: \"time\",\n value: this.#formatValue.bind(this),\n time: this.#formatTime.bind(this)\n });\n this.setAttributes({\n \"data-chapters\": this.#hasChapters.bind(this)\n });\n this.setStyles({\n \"--slider-progress\": this.#calcBufferedPercent.bind(this)\n });\n effect(this.#watchCurrentTime.bind(this));\n effect(this.#watchSeekingThrottle.bind(this));\n }\n onAttach(el) {\n el.setAttribute(\"data-media-time-slider\", \"\");\n setAttributeIfEmpty(el, \"aria-label\", \"Seek\");\n }\n onConnect(el) {\n effect(this.#watchPreviewing.bind(this));\n watchActiveTextTrack(this.#media.textTracks, \"chapters\", this.#chapter.set);\n }\n #calcBufferedPercent() {\n const { bufferedEnd, duration } = this.#media.$state;\n return round(Math.min(bufferedEnd() / Math.max(duration(), 1), 1) * 100, 3) + \"%\";\n }\n #hasChapters() {\n const { duration } = this.#media.$state;\n return this.#chapter()?.cues.length && Number.isFinite(duration()) && duration() > 0;\n }\n #watchSeekingThrottle() {\n this.#dispatchSeeking = functionThrottle(\n this.#seeking.bind(this),\n this.$props.seekingRequestThrottle()\n );\n }\n #watchCurrentTime() {\n if (this.$state.hidden()) return;\n const { value, dragging } = this.$state, newValue = this.#getValue();\n if (!peek(dragging)) {\n value.set(newValue);\n this.dispatch(\"value-change\", { detail: newValue });\n }\n }\n #watchPreviewing() {\n const player = this.#media.player.el, { preview } = useContext(sliderContext);\n player && preview() && setAttribute(player, \"data-preview\", this.$state.active());\n }\n #seeking(time, event) {\n this.#media.remote.seeking(time, event);\n }\n #seek(time, percent, event) {\n this.#dispatchSeeking.cancel();\n const { live } = this.#media.$state;\n if (live() && percent >= 99) {\n this.#media.remote.seekToLiveEdge(event);\n return;\n }\n this.#media.remote.seek(time, event);\n }\n #playingBeforeDragStart = false;\n #onDragStart(event) {\n const { pauseWhileDragging } = this.$props;\n if (pauseWhileDragging()) {\n const { paused } = this.#media.$state;\n this.#playingBeforeDragStart = !paused();\n this.#media.remote.pause(event);\n }\n }\n #onDragValueChange(event) {\n this.#dispatchSeeking(this.#percentToTime(event.detail), event);\n }\n #onDragEnd(event) {\n const { seeking } = this.#media.$state;\n if (!peek(seeking)) this.#seeking(this.#percentToTime(event.detail), event);\n const percent = event.detail;\n this.#seek(this.#percentToTime(percent), percent, event);\n const { pauseWhileDragging } = this.$props;\n if (pauseWhileDragging() && this.#playingBeforeDragStart) {\n this.#media.remote.play(event);\n this.#playingBeforeDragStart = false;\n }\n }\n #onValueChange(event) {\n const { dragging } = this.$state;\n if (dragging() || !event.trigger) return;\n this.#onDragEnd(event);\n }\n // -------------------------------------------------------------------------------------------\n // Props\n // -------------------------------------------------------------------------------------------\n #getValue() {\n const { currentTime } = this.#media.$state;\n return this.#timeToPercent(currentTime());\n }\n #getStep() {\n const value = this.$props.step() / this.#media.$state.duration() * 100;\n return Number.isFinite(value) ? value : 1;\n }\n #getKeyStep() {\n const value = this.$props.keyStep() / this.#media.$state.duration() * 100;\n return Number.isFinite(value) ? value : 1;\n }\n #roundValue(value) {\n return round(value, 3);\n }\n #isDisabled() {\n const { disabled } = this.$props, { canSeek } = this.#media.$state;\n return disabled() || !canSeek();\n }\n // -------------------------------------------------------------------------------------------\n // ARIA\n // -------------------------------------------------------------------------------------------\n #getARIAValueNow() {\n const { value } = this.$state;\n return Math.round(value());\n }\n #getARIAValueText() {\n const time = this.#percentToTime(this.$state.value()), { duration } = this.#media.$state;\n return Number.isFinite(time) ? `${formatSpokenTime(time)} out of ${formatSpokenTime(duration())}` : \"live\";\n }\n // -------------------------------------------------------------------------------------------\n // Format\n // -------------------------------------------------------------------------------------------\n #percentToTime(percent) {\n const { duration } = this.#media.$state;\n return round(percent / 100 * duration(), 5);\n }\n #timeToPercent(time) {\n const { liveEdge, duration } = this.#media.$state, rate = Math.max(0, Math.min(1, liveEdge() ? 1 : Math.min(time, duration()) / duration()));\n return Number.isNaN(rate) ? 0 : Number.isFinite(rate) ? rate * 100 : 100;\n }\n #formatValue(percent) {\n const time = this.#percentToTime(percent), { live, duration } = this.#media.$state;\n return Number.isFinite(time) ? (live() ? time - duration() : time).toFixed(0) : \"LIVE\";\n }\n #formatTime(percent, options) {\n const time = this.#percentToTime(percent), { live, duration } = this.#media.$state, value = live() ? time - duration() : time;\n return Number.isFinite(time) ? `${value < 0 ? \"-\" : \"\"}${formatTime(Math.abs(value), options)}` : \"LIVE\";\n }\n}\n\nclass SliderChapters extends Component {\n static props = {\n disabled: false\n };\n #media;\n #sliderState;\n #updateScope;\n #titleRef = null;\n #refs = [];\n #$track = signal(null);\n #$cues = signal([]);\n #activeIndex = signal(-1);\n #activePointerIndex = signal(-1);\n #bufferedIndex = 0;\n get cues() {\n return this.#$cues();\n }\n get activeCue() {\n return this.#$cues()[this.#activeIndex()] || null;\n }\n get activePointerCue() {\n return this.#$cues()[this.#activePointerIndex()] || null;\n }\n onSetup() {\n this.#media = useMediaContext();\n this.#sliderState = useState(TimeSlider.state);\n }\n onAttach(el) {\n watchActiveTextTrack(this.#media.textTracks, \"chapters\", this.#setTrack.bind(this));\n effect(this.#watchSource.bind(this));\n }\n onConnect() {\n onDispose(() => this.#reset.bind(this));\n }\n onDestroy() {\n this.#setTrack(null);\n }\n setRefs(refs) {\n this.#refs = refs;\n this.#updateScope?.dispose();\n if (this.#refs.length === 1) {\n const el = this.#refs[0];\n el.style.width = \"100%\";\n el.style.setProperty(\"--chapter-fill\", \"var(--slider-fill)\");\n el.style.setProperty(\"--chapter-progress\", \"var(--slider-progress)\");\n } else if (this.#refs.length > 0) {\n scoped(() => this.#watch(), this.#updateScope = createScope());\n }\n }\n #setTrack(track) {\n if (peek(this.#$track) === track) return;\n this.#reset();\n this.#$track.set(track);\n }\n #reset() {\n this.#refs = [];\n this.#$cues.set([]);\n this.#activeIndex.set(-1);\n this.#activePointerIndex.set(-1);\n this.#bufferedIndex = 0;\n this.#updateScope?.dispose();\n }\n #watch() {\n if (!this.#refs.length) return;\n effect(this.#watchUpdates.bind(this));\n }\n #watchUpdates() {\n const { hidden } = this.#sliderState;\n if (hidden()) return;\n effect(this.#watchContainerWidths.bind(this));\n effect(this.#watchFillPercent.bind(this));\n effect(this.#watchPointerPercent.bind(this));\n effect(this.#watchBufferedPercent.bind(this));\n }\n #watchContainerWidths() {\n const cues = this.#$cues();\n if (!cues.length) return;\n let cue, { seekableStart, seekableEnd } = this.#media.$state, startTime = seekableStart(), endTime = seekableEnd() || cues[cues.length - 1].endTime, duration = endTime - startTime, remainingWidth = 100;\n for (let i = 0; i < cues.length; i++) {\n cue = cues[i];\n if (this.#refs[i]) {\n const width = i === cues.length - 1 ? remainingWidth : round((cue.endTime - Math.max(startTime, cue.startTime)) / duration * 100, 3);\n this.#refs[i].style.width = width + \"%\";\n remainingWidth -= width;\n }\n }\n }\n #watchFillPercent() {\n let { liveEdge, seekableStart, seekableEnd } = this.#media.$state, { fillPercent, value } = this.#sliderState, cues = this.#$cues(), isLiveEdge = liveEdge(), prevActiveIndex = peek(this.#activeIndex), currentChapter = cues[prevActiveIndex];\n let currentActiveIndex = isLiveEdge ? this.#$cues.length - 1 : this.#findActiveChapterIndex(\n currentChapter ? currentChapter.startTime / seekableEnd() * 100 <= peek(value) ? prevActiveIndex : 0 : 0,\n fillPercent()\n );\n if (isLiveEdge || !currentChapter) {\n this.#updateFillPercents(0, cues.length, 100);\n } else if (currentActiveIndex > prevActiveIndex) {\n this.#updateFillPercents(prevActiveIndex, currentActiveIndex, 100);\n } else if (currentActiveIndex < prevActiveIndex) {\n this.#updateFillPercents(currentActiveIndex + 1, prevActiveIndex + 1, 0);\n }\n const percent = isLiveEdge ? 100 : this.#calcPercent(\n cues[currentActiveIndex],\n fillPercent(),\n seekableStart(),\n this.#getEndTime(cues)\n );\n this.#updateFillPercent(this.#refs[currentActiveIndex], percent);\n this.#activeIndex.set(currentActiveIndex);\n }\n #watchPointerPercent() {\n let { hidden, pointerPercent } = this.#sliderState;\n if (hidden()) {\n this.#activePointerIndex.set(-1);\n return;\n }\n const activeIndex = this.#findActiveChapterIndex(0, pointerPercent());\n this.#activePointerIndex.set(activeIndex);\n }\n #updateFillPercents(start, end, percent) {\n for (let i = start; i < end; i++) this.#updateFillPercent(this.#refs[i], percent);\n }\n #updateFillPercent(ref, percent) {\n if (!ref) return;\n ref.style.setProperty(\"--chapter-fill\", percent + \"%\");\n setAttribute(ref, \"data-active\", percent > 0 && percent < 100);\n setAttribute(ref, \"data-ended\", percent === 100);\n }\n #findActiveChapterIndex(startIndex, percent) {\n let chapterPercent = 0, cues = this.#$cues();\n if (percent === 0) return 0;\n else if (percent === 100) return cues.length - 1;\n let { seekableStart } = this.#media.$state, startTime = seekableStart(), endTime = this.#getEndTime(cues);\n for (let i = startIndex; i < cues.length; i++) {\n chapterPercent = this.#calcPercent(cues[i], percent, startTime, endTime);\n if (chapterPercent >= 0 && chapterPercent < 100) return i;\n }\n return 0;\n }\n #watchBufferedPercent() {\n this.#updateBufferedPercent(this.#bufferedPercent());\n }\n #updateBufferedPercent = animationFrameThrottle((bufferedPercent) => {\n let percent, cues = this.#$cues(), { seekableStart } = this.#media.$state, startTime = seekableStart(), endTime = this.#getEndTime(cues);\n for (let i = this.#bufferedIndex; i < this.#refs.length; i++) {\n percent = this.#calcPercent(cues[i], bufferedPercent, startTime, endTime);\n this.#refs[i]?.style.setProperty(\"--chapter-progress\", percent + \"%\");\n if (percent < 100) {\n this.#bufferedIndex = i;\n break;\n }\n }\n });\n #bufferedPercent = computed(this.#calcMediaBufferedPercent.bind(this));\n #calcMediaBufferedPercent() {\n const { bufferedEnd, duration } = this.#media.$state;\n return round(Math.min(bufferedEnd() / Math.max(duration(), 1), 1), 3) * 100;\n }\n #getEndTime(cues) {\n const { seekableEnd } = this.#media.$state, endTime = seekableEnd();\n return Number.isFinite(endTime) ? endTime : cues[cues.length - 1]?.endTime || 0;\n }\n #calcPercent(cue, percent, startTime, endTime) {\n if (!cue) return 0;\n const cues = this.#$cues();\n if (cues.length === 0) return 0;\n const duration = endTime - startTime, cueStartTime = Math.max(0, cue.startTime - startTime), cueEndTime = Math.min(endTime, cue.endTime) - startTime;\n const startRatio = cueStartTime / duration, startPercent = startRatio * 100, endPercent = Math.min(1, startRatio + (cueEndTime - cueStartTime) / duration) * 100;\n return Math.max(\n 0,\n round(\n percent >= endPercent ? 100 : (percent - startPercent) / (endPercent - startPercent) * 100,\n 3\n )\n );\n }\n #fillGaps(cues) {\n let chapters = [], { seekableStart, seekableEnd, duration } = this.#media.$state, startTime = seekableStart(), endTime = seekableEnd();\n cues = cues.filter((cue) => cue.startTime <= endTime && cue.endTime >= startTime);\n const firstCue = cues[0];\n if (firstCue && firstCue.startTime > startTime) {\n chapters.push(new window.VTTCue(startTime, firstCue.startTime, \"\"));\n }\n for (let i = 0; i < cues.length - 1; i++) {\n const currentCue = cues[i], nextCue = cues[i + 1];\n chapters.push(currentCue);\n if (nextCue) {\n const timeDiff = nextCue.startTime - currentCue.endTime;\n if (timeDiff > 0) {\n chapters.push(new window.VTTCue(currentCue.endTime, currentCue.endTime + timeDiff, \"\"));\n }\n }\n }\n const lastCue = cues[cues.length - 1];\n if (lastCue) {\n chapters.push(lastCue);\n const endTime2 = duration();\n if (endTime2 >= 0 && endTime2 - lastCue.endTime > 1) {\n chapters.push(new window.VTTCue(lastCue.endTime, duration(), \"\"));\n }\n }\n return chapters;\n }\n #watchSource() {\n const { source } = this.#media.$state;\n source();\n this.#onTrackChange();\n }\n #onTrackChange() {\n if (!this.scope) return;\n const { disabled } = this.$props;\n if (disabled()) {\n this.#$cues.set([]);\n this.#activeIndex.set(0);\n this.#bufferedIndex = 0;\n return;\n }\n const track = this.#$track();\n if (track) {\n const onCuesChange = this.#onCuesChange.bind(this);\n onCuesChange();\n new EventsController(track).add(\"add-cue\", onCuesChange).add(\"remove-cue\", onCuesChange);\n effect(this.#watchMediaDuration.bind(this));\n }\n this.#titleRef = this.#findChapterTitleRef();\n if (this.#titleRef) effect(this.#onChapterTitleChange.bind(this));\n return () => {\n if (this.#titleRef) {\n this.#titleRef.textContent = \"\";\n this.#titleRef = null;\n }\n };\n }\n #watchMediaDuration() {\n this.#media.$state.duration();\n this.#onCuesChange();\n }\n #onCuesChange = functionDebounce(\n () => {\n const track = peek(this.#$track);\n if (!this.scope || !track || !track.cues.length) return;\n this.#$cues.set(this.#fillGaps(track.cues));\n this.#activeIndex.set(0);\n this.#bufferedIndex = 0;\n },\n 150,\n true\n );\n #onChapterTitleChange() {\n const cue = this.activePointerCue || this.activeCue;\n if (this.#titleRef) this.#titleRef.textContent = cue?.text || \"\";\n }\n #findParentSlider() {\n let node = this.el;\n while (node && node.getAttribute(\"role\") !== \"slider\") {\n node = node.parentElement;\n }\n return node;\n }\n #findChapterTitleRef() {\n const slider = this.#findParentSlider();\n return slider ? slider.querySelector('[data-part=\"chapter-title\"]') : null;\n }\n}\nconst sliderchapters__proto = SliderChapters.prototype;\nprop(sliderchapters__proto, \"cues\");\nprop(sliderchapters__proto, \"activeCue\");\nprop(sliderchapters__proto, \"activePointerCue\");\nmethod(sliderchapters__proto, \"setRefs\");\n\nconst menuContext = createContext();\n\nfunction scrollIntoView(el, options) {\n const scrolls = r(el, options);\n for (const { el: el2, top, left } of scrolls) {\n el2.scroll({ top, left, behavior: options.behavior });\n }\n}\nfunction scrollIntoCenter(el, options = {}) {\n scrollIntoView(el, {\n scrollMode: \"if-needed\",\n block: \"center\",\n inline: \"center\",\n ...options\n });\n}\n\nconst FOCUSABLE_ELEMENTS_SELECTOR = /* @__PURE__ */ [\n \"a[href]\",\n \"[tabindex]\",\n \"input\",\n \"select\",\n \"button\"\n].map((selector) => `${selector}:not([aria-hidden='true'])`).join(\",\");\nconst VALID_KEYS = /* @__PURE__ */ new Set([\n \"Escape\",\n \"Tab\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"Home\",\n \"PageUp\",\n \"End\",\n \"PageDown\",\n \"Enter\",\n \" \"\n]);\nclass MenuFocusController {\n #index = -1;\n #el = null;\n #elements = [];\n #delegate;\n get items() {\n return this.#elements;\n }\n constructor(delegate) {\n this.#delegate = delegate;\n }\n attachMenu(el) {\n listenEvent(el, \"focus\", this.#onFocus.bind(this));\n this.#el = el;\n onDispose(() => {\n this.#el = null;\n });\n }\n listen() {\n if (!this.#el) return;\n this.update();\n new EventsController(this.#el).add(\"keyup\", this.#onKeyUp.bind(this)).add(\"keydown\", this.#onKeyDown.bind(this));\n onDispose(() => {\n this.#index = -1;\n this.#elements = [];\n });\n }\n update() {\n this.#index = 0;\n this.#elements = this.#getFocusableElements();\n }\n scroll(index = this.#findActiveIndex()) {\n const element = this.#elements[index];\n if (element) {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n scrollIntoCenter(element, {\n behavior: \"smooth\",\n boundary: (el) => {\n return !el.hasAttribute(\"data-root\");\n }\n });\n });\n });\n }\n }\n focusActive(scroll = true) {\n const index = this.#findActiveIndex();\n this.#focusAt(index >= 0 ? index : 0, scroll);\n }\n #focusAt(index, scroll = true) {\n this.#index = index;\n if (this.#elements[index]) {\n this.#elements[index].focus({ preventScroll: true });\n if (scroll) this.scroll(index);\n } else {\n this.#el?.focus({ preventScroll: true });\n }\n }\n #findActiveIndex() {\n return this.#elements.findIndex(\n (el) => document.activeElement === el || el.getAttribute(\"role\") === \"menuitemradio\" && el.getAttribute(\"aria-checked\") === \"true\"\n );\n }\n #onFocus() {\n if (this.#index >= 0) return;\n this.update();\n this.focusActive();\n }\n #validateKeyEvent(event) {\n const el = event.target;\n if (wasEnterKeyPressed(event) && el instanceof Element) {\n const role = el.getAttribute(\"role\");\n return !/a|input|select|button/.test(el.localName) && !role;\n }\n return VALID_KEYS.has(event.key);\n }\n #onKeyUp(event) {\n if (!this.#validateKeyEvent(event)) return;\n event.stopPropagation();\n event.preventDefault();\n }\n #onKeyDown(event) {\n if (!this.#validateKeyEvent(event)) return;\n event.stopPropagation();\n event.preventDefault();\n switch (event.key) {\n case \"Escape\":\n this.#delegate.closeMenu(event);\n break;\n case \"Tab\":\n this.#focusAt(this.#nextIndex(event.shiftKey ? -1 : 1));\n break;\n case \"ArrowUp\":\n this.#focusAt(this.#nextIndex(-1));\n break;\n case \"ArrowDown\":\n this.#focusAt(this.#nextIndex(1));\n break;\n case \"Home\":\n case \"PageUp\":\n this.#focusAt(0);\n break;\n case \"End\":\n case \"PageDown\":\n this.#focusAt(this.#elements.length - 1);\n break;\n }\n }\n #nextIndex(delta) {\n let index = this.#index;\n do {\n index = (index + delta + this.#elements.length) % this.#elements.length;\n } while (this.#elements[index]?.offsetParent === null);\n return index;\n }\n #getFocusableElements() {\n if (!this.#el) return [];\n const focusableElements = this.#el.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR), elements = [];\n const is = (node) => {\n return node.getAttribute(\"role\") === \"menu\";\n };\n for (const el of focusableElements) {\n if (isHTMLElement(el) && el.offsetParent !== null && // does not have display: none\n isElementParent(this.#el, el, is)) {\n elements.push(el);\n }\n }\n return elements;\n }\n}\n\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __decorateClass = (decorators, target, key, kind) => {\n var result = __getOwnPropDesc(target, key) ;\n for (var i = decorators.length - 1, decorator; i >= 0; i--)\n if (decorator = decorators[i])\n result = (decorator(target, key, result) ) || result;\n if (result) __defProp(target, key, result);\n return result;\n};\nlet idCount = 0;\nclass Menu extends Component {\n static props = {\n showDelay: 0\n };\n #media;\n #menuId;\n #menuButtonId;\n #expanded = signal(false);\n #disabled = signal(false);\n #trigger = signal(null);\n #content = signal(null);\n #parentMenu;\n #submenus = /* @__PURE__ */ new Set();\n #menuObserver = null;\n #popper;\n #focus;\n #isSliderActive = false;\n #isTriggerDisabled = signal(false);\n #transitionCallbacks = /* @__PURE__ */ new Set();\n get triggerElement() {\n return this.#trigger();\n }\n get contentElement() {\n return this.#content();\n }\n get isSubmenu() {\n return !!this.#parentMenu;\n }\n constructor() {\n super();\n const { showDelay } = this.$props;\n this.#popper = new Popper({\n trigger: this.#trigger,\n content: this.#content,\n showDelay,\n listen: (trigger, show, hide) => {\n onPress(trigger, (event) => {\n if (this.#expanded()) hide(event);\n else show(event);\n });\n const closeTarget = this.#getCloseTarget();\n if (closeTarget) {\n onPress(closeTarget, (event) => {\n event.stopPropagation();\n hide(event);\n });\n }\n },\n onChange: this.#onExpandedChange.bind(this)\n });\n }\n onSetup() {\n this.#media = useMediaContext();\n const currentIdCount = ++idCount;\n this.#menuId = `media-menu-${currentIdCount}`;\n this.#menuButtonId = `media-menu-button-${currentIdCount}`;\n this.#focus = new MenuFocusController({\n closeMenu: this.close.bind(this)\n });\n if (hasProvidedContext(menuContext)) {\n this.#parentMenu = useContext(menuContext);\n }\n this.#observeSliders();\n this.setAttributes({\n \"data-open\": this.#expanded,\n \"data-root\": !this.isSubmenu,\n \"data-submenu\": this.isSubmenu,\n \"data-disabled\": this.#isDisabled.bind(this)\n });\n provideContext(menuContext, {\n button: this.#trigger,\n content: this.#content,\n expanded: this.#expanded,\n hint: signal(\"\"),\n submenu: !!this.#parentMenu,\n disable: this.#disable.bind(this),\n attachMenuButton: this.#attachMenuButton.bind(this),\n attachMenuItems: this.#attachMenuItems.bind(this),\n attachObserver: this.#attachObserver.bind(this),\n disableMenuButton: this.#disableMenuButton.bind(this),\n addSubmenu: this.#addSubmenu.bind(this),\n onTransitionEvent: (callback) => {\n this.#transitionCallbacks.add(callback);\n onDispose(() => {\n this.#transitionCallbacks.delete(callback);\n });\n }\n });\n }\n onAttach(el) {\n el.style.setProperty(\"display\", \"contents\");\n }\n onConnect(el) {\n effect(this.#watchExpanded.bind(this));\n if (this.isSubmenu) {\n this.#parentMenu?.addSubmenu(this);\n }\n }\n onDestroy() {\n this.#trigger.set(null);\n this.#content.set(null);\n this.#menuObserver = null;\n this.#transitionCallbacks.clear();\n }\n #observeSliders() {\n let sliderActiveTimer = -1, parentSliderObserver = hasProvidedContext(sliderObserverContext) ? useContext(sliderObserverContext) : null;\n provideContext(sliderObserverContext, {\n onDragStart: () => {\n parentSliderObserver?.onDragStart?.();\n window.clearTimeout(sliderActiveTimer);\n sliderActiveTimer = -1;\n this.#isSliderActive = true;\n },\n onDragEnd: () => {\n parentSliderObserver?.onDragEnd?.();\n sliderActiveTimer = window.setTimeout(() => {\n this.#isSliderActive = false;\n sliderActiveTimer = -1;\n }, 300);\n }\n });\n }\n #watchExpanded() {\n const expanded = this.#isExpanded();\n if (!this.isSubmenu) this.#onResize();\n this.#updateMenuItemsHidden(expanded);\n if (!expanded) return;\n effect(() => {\n const { height } = this.#media.$state, content = this.#content();\n content && setStyle(content, \"--player-height\", height() + \"px\");\n });\n this.#focus.listen();\n this.listen(\"pointerup\", this.#onPointerUp.bind(this));\n listenEvent(window, \"pointerup\", this.#onWindowPointerUp.bind(this));\n }\n #attachMenuButton(button) {\n const el = button.el, isMenuItem = this.isSubmenu, isARIADisabled = $ariaBool(this.#isDisabled.bind(this));\n setAttributeIfEmpty(el, \"tabindex\", isMenuItem ? \"-1\" : \"0\");\n setAttributeIfEmpty(el, \"role\", isMenuItem ? \"menuitem\" : \"button\");\n setAttribute(el, \"id\", this.#menuButtonId);\n setAttribute(el, \"aria-haspopup\", \"menu\");\n setAttribute(el, \"aria-expanded\", \"false\");\n setAttribute(el, \"data-root\", !this.isSubmenu);\n setAttribute(el, \"data-submenu\", this.isSubmenu);\n const watchAttrs = () => {\n setAttribute(el, \"data-open\", this.#expanded());\n setAttribute(el, \"aria-disabled\", isARIADisabled());\n };\n if (IS_SERVER) watchAttrs();\n else effect(watchAttrs);\n this.#trigger.set(el);\n onDispose(() => {\n this.#trigger.set(null);\n });\n }\n #attachMenuItems(items) {\n const el = items.el;\n el.style.setProperty(\"display\", \"none\");\n setAttribute(el, \"id\", this.#menuId);\n setAttributeIfEmpty(el, \"role\", \"menu\");\n setAttributeIfEmpty(el, \"tabindex\", \"-1\");\n setAttribute(el, \"data-root\", !this.isSubmenu);\n setAttribute(el, \"data-submenu\", this.isSubmenu);\n this.#content.set(el);\n onDispose(() => this.#content.set(null));\n const watchAttrs = () => setAttribute(el, \"data-open\", this.#expanded());\n if (IS_SERVER) watchAttrs();\n else effect(watchAttrs);\n this.#focus.attachMenu(el);\n this.#updateMenuItemsHidden(false);\n const onTransition = this.#onResizeTransition.bind(this);\n if (!this.isSubmenu) {\n items.listen(\"transitionstart\", onTransition);\n items.listen(\"transitionend\", onTransition);\n items.listen(\"animationend\", this.#onResize);\n items.listen(\"vds-menu-resize\", this.#onResize);\n } else {\n this.#parentMenu?.onTransitionEvent(onTransition);\n }\n }\n #attachObserver(observer) {\n this.#menuObserver = observer;\n }\n #updateMenuItemsHidden(expanded) {\n const content = peek(this.#content);\n if (content) setAttribute(content, \"aria-hidden\", ariaBool$1(!expanded));\n }\n #disableMenuButton(disabled) {\n this.#isTriggerDisabled.set(disabled);\n }\n #wasKeyboardExpand = false;\n #onExpandedChange(isExpanded, event) {\n this.#wasKeyboardExpand = isKeyboardEvent(event);\n event?.stopPropagation();\n if (this.#expanded() === isExpanded) return;\n if (this.#isDisabled()) {\n if (isExpanded) this.#popper.hide(event);\n return;\n }\n this.el?.dispatchEvent(\n new Event(\"vds-menu-resize\", {\n bubbles: true,\n composed: true\n })\n );\n const trigger = this.#trigger(), content = this.#content();\n if (trigger) {\n setAttribute(trigger, \"aria-controls\", isExpanded && this.#menuId);\n setAttribute(trigger, \"aria-expanded\", ariaBool$1(isExpanded));\n }\n if (content) setAttribute(content, \"aria-labelledby\", isExpanded && this.#menuButtonId);\n this.#expanded.set(isExpanded);\n this.#toggleMediaControls(event);\n tick();\n if (this.#wasKeyboardExpand) {\n if (isExpanded) content?.focus();\n else trigger?.focus();\n for (const el of [this.el, content]) {\n el && el.setAttribute(\"data-keyboard\", \"\");\n }\n } else {\n for (const el of [this.el, content]) {\n el && el.removeAttribute(\"data-keyboard\");\n }\n }\n this.dispatch(isExpanded ? \"open\" : \"close\", { trigger: event });\n if (isExpanded) {\n if (!this.isSubmenu && this.#media.activeMenu !== this) {\n this.#media.activeMenu?.close(event);\n this.#media.activeMenu = this;\n }\n this.#menuObserver?.onOpen?.(event);\n } else {\n if (this.isSubmenu) {\n for (const el of this.#submenus) el.close(event);\n } else {\n this.#media.activeMenu = null;\n }\n this.#menuObserver?.onClose?.(event);\n }\n if (isExpanded) {\n requestAnimationFrame(this.#updateFocus.bind(this));\n }\n }\n #updateFocus() {\n if (this.#isTransitionActive || this.#isSubmenuOpen) return;\n this.#focus.update();\n requestAnimationFrame(() => {\n if (this.#wasKeyboardExpand) {\n this.#focus.focusActive();\n } else {\n this.#focus.scroll();\n }\n });\n }\n #isExpanded() {\n return !this.#isDisabled() && this.#expanded();\n }\n #isDisabled() {\n return this.#disabled() || this.#isTriggerDisabled();\n }\n #disable(disabled) {\n this.#disabled.set(disabled);\n }\n #onPointerUp(event) {\n const content = this.#content();\n if (this.#isSliderActive || content && isEventInside(content, event)) {\n return;\n }\n event.stopPropagation();\n }\n #onWindowPointerUp(event) {\n const content = this.#content();\n if (this.#isSliderActive || content && isEventInside(content, event)) {\n return;\n }\n this.close(event);\n }\n #getCloseTarget() {\n const target = this.el?.querySelector('[data-part=\"close-target\"]');\n return this.el && target && isElementParent(this.el, target, (node) => node.getAttribute(\"role\") === \"menu\") ? target : null;\n }\n #toggleMediaControls(trigger) {\n if (this.isSubmenu) return;\n if (this.#expanded()) this.#media.remote.pauseControls(trigger);\n else this.#media.remote.resumeControls(trigger);\n }\n #addSubmenu(menu) {\n this.#submenus.add(menu);\n new EventsController(menu).add(\"open\", this.#onSubmenuOpenBind).add(\"close\", this.#onSubmenuCloseBind);\n onDispose(this.#removeSubmenuBind);\n }\n #removeSubmenuBind = this.#removeSubmenu.bind(this);\n #removeSubmenu(menu) {\n this.#submenus.delete(menu);\n }\n #isSubmenuOpen = false;\n #onSubmenuOpenBind = this.#onSubmenuOpen.bind(this);\n #onSubmenuOpen(event) {\n this.#isSubmenuOpen = true;\n const content = this.#content();\n if (this.isSubmenu) {\n this.triggerElement?.setAttribute(\"aria-hidden\", \"true\");\n }\n for (const target of this.#submenus) {\n if (target !== event.target) {\n for (const el of [target.el, target.triggerElement]) {\n el?.setAttribute(\"aria-hidden\", \"true\");\n }\n }\n }\n if (content) {\n const el = event.target.el;\n for (const child of content.children) {\n if (child.contains(el)) {\n child.setAttribute(\"data-open\", \"\");\n } else if (child !== el) {\n child.setAttribute(\"data-hidden\", \"\");\n }\n }\n }\n }\n #onSubmenuCloseBind = this.#onSubmenuClose.bind(this);\n #onSubmenuClose(event) {\n this.#isSubmenuOpen = false;\n const content = this.#content();\n if (this.isSubmenu) {\n this.triggerElement?.setAttribute(\"aria-hidden\", \"false\");\n }\n for (const target of this.#submenus) {\n for (const el of [target.el, target.triggerElement]) {\n el?.setAttribute(\"aria-hidden\", \"false\");\n }\n }\n if (content) {\n for (const child of content.children) {\n child.removeAttribute(\"data-open\");\n child.removeAttribute(\"data-hidden\");\n }\n }\n }\n #onResize = animationFrameThrottle(() => {\n const content = peek(this.#content);\n if (!content || IS_SERVER) return;\n let height = 0, styles = getComputedStyle(content), children = [...content.children];\n for (const prop2 of [\"paddingTop\", \"paddingBottom\", \"borderTopWidth\", \"borderBottomWidth\"]) {\n height += parseFloat(styles[prop2]) || 0;\n }\n for (const child of children) {\n if (isHTMLElement(child) && child.style.display === \"contents\") {\n children.push(...child.children);\n } else if (child.nodeType === 3) {\n height += parseFloat(getComputedStyle(child).fontSize);\n } else if (isHTMLElement(child)) {\n if (!isElementVisible(child)) continue;\n const style = getComputedStyle(child);\n height += child.offsetHeight + (parseFloat(style.marginTop) || 0) + (parseFloat(style.marginBottom) || 0);\n }\n }\n setStyle(content, \"--menu-height\", height + \"px\");\n });\n #isTransitionActive = false;\n #onResizeTransition(event) {\n const content = this.#content();\n if (content && event.propertyName === \"height\") {\n this.#isTransitionActive = event.type === \"transitionstart\";\n setAttribute(content, \"data-transition\", this.#isTransitionActive ? \"height\" : null);\n if (this.#expanded()) this.#updateFocus();\n }\n for (const callback of this.#transitionCallbacks) callback(event);\n }\n open(trigger) {\n if (peek(this.#expanded)) return;\n this.#popper.show(trigger);\n tick();\n }\n close(trigger) {\n if (!peek(this.#expanded)) return;\n this.#popper.hide(trigger);\n tick();\n }\n}\n__decorateClass([\n prop\n], Menu.prototype, \"triggerElement\");\n__decorateClass([\n prop\n], Menu.prototype, \"contentElement\");\n__decorateClass([\n prop\n], Menu.prototype, \"isSubmenu\");\n__decorateClass([\n method\n], Menu.prototype, \"open\");\n__decorateClass([\n method\n], Menu.prototype, \"close\");\n\nclass MenuButton extends Component {\n static props = {\n disabled: false\n };\n #menu;\n #hintEl = signal(null);\n get expanded() {\n return this.#menu?.expanded() ?? false;\n }\n constructor() {\n super();\n new FocusVisibleController();\n }\n onSetup() {\n this.#menu = useContext(menuContext);\n }\n onAttach(el) {\n this.#menu.attachMenuButton(this);\n effect(this.#watchDisabled.bind(this));\n setAttributeIfEmpty(el, \"type\", \"button\");\n }\n onConnect(el) {\n effect(this.#watchHintEl.bind(this));\n this.#onMutation();\n const mutations = new MutationObserver(this.#onMutation.bind(this));\n mutations.observe(el, { attributeFilter: [\"data-part\"], childList: true, subtree: true });\n onDispose(() => mutations.disconnect());\n onPress(el, (trigger) => {\n this.dispatch(\"select\", { trigger });\n });\n }\n #watchDisabled() {\n this.#menu.disableMenuButton(this.$props.disabled());\n }\n #watchHintEl() {\n const el = this.#hintEl();\n if (!el) return;\n effect(() => {\n const text = this.#menu.hint();\n if (text) el.textContent = text;\n });\n }\n #onMutation() {\n const hintEl = this.el?.querySelector('[data-part=\"hint\"]');\n this.#hintEl.set(hintEl ?? null);\n }\n}\nconst menubutton__proto = MenuButton.prototype;\nprop(menubutton__proto, \"expanded\");\n\nclass MenuItem extends MenuButton {\n}\n\nclass MenuPortal extends Component {\n static props = {\n container: null,\n disabled: false\n };\n #target = null;\n #media;\n onSetup() {\n this.#media = useMediaContext();\n provideContext(menuPortalContext, {\n attach: this.#attachElement.bind(this)\n });\n }\n onAttach(el) {\n el.style.setProperty(\"display\", \"contents\");\n }\n // Need this so connect scope is defined.\n onConnect(el) {\n }\n onDestroy() {\n this.#target?.remove();\n this.#target = null;\n }\n #attachElement(el) {\n this.#portal(false);\n this.#target = el;\n requestScopedAnimationFrame(() => {\n requestScopedAnimationFrame(() => {\n if (!this.connectScope) return;\n effect(this.#watchDisabled.bind(this));\n });\n });\n }\n #watchDisabled() {\n const { fullscreen } = this.#media.$state, { disabled } = this.$props;\n this.#portal(disabled() === \"fullscreen\" ? !fullscreen() : !disabled());\n }\n #portal(shouldPortal) {\n if (!this.#target) return;\n let container = this.#getContainer(this.$props.container());\n if (!container) return;\n const isPortalled = this.#target.parentElement === container;\n setAttribute(this.#target, \"data-portal\", shouldPortal);\n if (shouldPortal) {\n if (!isPortalled) {\n this.#target.remove();\n container.append(this.#target);\n }\n } else if (isPortalled && this.#target.parentElement === container) {\n this.#target.remove();\n this.el?.append(this.#target);\n }\n }\n #getContainer(selector) {\n if (isHTMLElement(selector)) return selector;\n return selector ? document.querySelector(selector) : document.body;\n }\n}\nconst menuPortalContext = createContext();\n\nclass MenuItems extends Component {\n static props = {\n placement: null,\n offset: 0,\n alignOffset: 0\n };\n #menu;\n constructor() {\n super();\n new FocusVisibleController();\n const { placement } = this.$props;\n this.setAttributes({\n \"data-placement\": placement\n });\n }\n onAttach(el) {\n this.#menu = useContext(menuContext);\n this.#menu.attachMenuItems(this);\n if (hasProvidedContext(menuPortalContext)) {\n const portal = useContext(menuPortalContext);\n if (portal) {\n provideContext(menuPortalContext, null);\n portal.attach(el);\n onDispose(() => portal.attach(null));\n }\n }\n }\n onConnect(el) {\n effect(this.#watchPlacement.bind(this));\n }\n #watchPlacement() {\n const { expanded } = this.#menu;\n if (!this.el || !expanded()) return;\n const placement = this.$props.placement();\n if (!placement) return;\n Object.assign(this.el.style, {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"max-content\"\n });\n const { offset: mainOffset, alignOffset } = this.$props;\n onDispose(\n autoPlacement(this.el, this.#getButton(), placement, {\n offsetVarName: \"media-menu\",\n xOffset: alignOffset(),\n yOffset: mainOffset()\n })\n );\n onDispose(this.#hide.bind(this));\n }\n #hide() {\n if (!this.el) return;\n this.el.removeAttribute(\"style\");\n this.el.style.display = \"none\";\n }\n #getButton() {\n return this.#menu.button();\n }\n}\n\nconst radioControllerContext = createContext();\n\nclass RadioGroupController extends ViewController {\n #group = /* @__PURE__ */ new Set();\n #value = signal(\"\");\n #controller = null;\n onValueChange;\n get values() {\n return Array.from(this.#group).map((radio) => radio.value());\n }\n get value() {\n return this.#value();\n }\n set value(value) {\n this.#onChange(value);\n }\n onSetup() {\n provideContext(radioControllerContext, {\n add: this.#addRadio.bind(this),\n remove: this.#removeRadio.bind(this)\n });\n }\n onAttach(el) {\n const isMenuItem = hasProvidedContext(menuContext);\n if (!isMenuItem) setAttributeIfEmpty(el, \"role\", \"radiogroup\");\n this.setAttributes({ value: this.#value });\n }\n onDestroy() {\n this.#group.clear();\n }\n #addRadio(radio) {\n if (this.#group.has(radio)) return;\n this.#group.add(radio);\n radio.onCheck = this.#onChangeBind;\n radio.check(radio.value() === this.#value());\n }\n #removeRadio(radio) {\n radio.onCheck = null;\n this.#group.delete(radio);\n }\n #onChangeBind = this.#onChange.bind(this);\n #onChange(newValue, trigger) {\n const currentValue = peek(this.#value);\n if (!newValue || newValue === currentValue) return;\n const currentRadio = this.#findRadio(currentValue), newRadio = this.#findRadio(newValue);\n currentRadio?.check(false, trigger);\n newRadio?.check(true, trigger);\n this.#value.set(newValue);\n this.onValueChange?.(newValue, trigger);\n }\n #findRadio(newValue) {\n for (const radio of this.#group) {\n if (newValue === peek(radio.value)) return radio;\n }\n return null;\n }\n}\n\nclass RadioGroup extends Component {\n static props = {\n value: \"\"\n };\n #controller;\n /**\n * A list of radio values that belong this group.\n */\n get values() {\n return this.#controller.values;\n }\n /**\n * The radio value that is checked in this group.\n */\n get value() {\n return this.#controller.value;\n }\n set value(newValue) {\n this.#controller.value = newValue;\n }\n constructor() {\n super();\n this.#controller = new RadioGroupController();\n this.#controller.onValueChange = this.#onValueChange.bind(this);\n }\n onSetup() {\n if (IS_SERVER) this.#watchValue();\n else effect(this.#watchValue.bind(this));\n }\n #watchValue() {\n this.#controller.value = this.$props.value();\n }\n #onValueChange(value, trigger) {\n const event = this.createEvent(\"change\", { detail: value, trigger });\n this.dispatch(event);\n }\n}\nconst radiogroup__proto = RadioGroup.prototype;\nprop(radiogroup__proto, \"values\");\nprop(radiogroup__proto, \"value\");\n\nclass Radio extends Component {\n static props = {\n value: \"\"\n };\n #checked = signal(false);\n #controller = {\n value: this.$props.value,\n check: this.#check.bind(this),\n onCheck: null\n };\n /**\n * Whether this radio is currently checked.\n */\n get checked() {\n return this.#checked();\n }\n constructor() {\n super();\n new FocusVisibleController();\n }\n onSetup() {\n this.setAttributes({\n value: this.$props.value,\n \"data-checked\": this.#checked,\n \"aria-checked\": $ariaBool(this.#checked)\n });\n }\n onAttach(el) {\n const isMenuItem = hasProvidedContext(menuContext);\n setAttributeIfEmpty(el, \"tabindex\", isMenuItem ? \"-1\" : \"0\");\n setAttributeIfEmpty(el, \"role\", isMenuItem ? \"menuitemradio\" : \"radio\");\n effect(this.#watchValue.bind(this));\n }\n onConnect(el) {\n this.#addToGroup();\n onPress(el, this.#onPress.bind(this));\n onDispose(this.#onDisconnect.bind(this));\n }\n #onDisconnect() {\n scoped(() => {\n const group = useContext(radioControllerContext);\n group.remove(this.#controller);\n }, this.connectScope);\n }\n #addToGroup() {\n const group = useContext(radioControllerContext);\n group.add(this.#controller);\n }\n #watchValue() {\n const { value } = this.$props, newValue = value();\n if (peek(this.#checked)) {\n this.#controller.onCheck?.(newValue);\n }\n }\n #onPress(event) {\n if (peek(this.#checked)) return;\n this.#onChange(true, event);\n this.#onSelect(event);\n this.#controller.onCheck?.(peek(this.$props.value), event);\n }\n #check(value, trigger) {\n if (peek(this.#checked) === value) return;\n this.#onChange(value, trigger);\n }\n #onChange(value, trigger) {\n this.#checked.set(value);\n this.dispatch(\"change\", { detail: value, trigger });\n }\n #onSelect(trigger) {\n this.dispatch(\"select\", { trigger });\n }\n}\nconst radio__proto = Radio.prototype;\nprop(radio__proto, \"checked\");\n\nclass Gesture extends Component {\n static props = {\n disabled: false,\n event: void 0,\n action: void 0\n };\n #media;\n #provider = null;\n onSetup() {\n this.#media = useMediaContext();\n const { event, action } = this.$props;\n this.setAttributes({\n event,\n action\n });\n }\n onAttach(el) {\n el.setAttribute(\"data-media-gesture\", \"\");\n el.style.setProperty(\"pointer-events\", \"none\");\n }\n onConnect(el) {\n this.#provider = this.#media.player.el?.querySelector(\n \"[data-media-provider]\"\n );\n effect(this.#attachListener.bind(this));\n }\n #attachListener() {\n let eventType = this.$props.event(), disabled = this.$props.disabled();\n if (!this.#provider || !eventType || disabled) return;\n if (/^dbl/.test(eventType)) {\n eventType = eventType.split(/^dbl/)[1];\n }\n if (eventType === \"pointerup\" || eventType === \"pointerdown\") {\n const pointer = this.#media.$state.pointer();\n if (pointer === \"coarse\") {\n eventType = eventType === \"pointerup\" ? \"touchend\" : \"touchstart\";\n }\n }\n listenEvent(\n this.#provider,\n eventType,\n this.#acceptEvent.bind(this),\n { passive: false }\n );\n }\n #presses = 0;\n #pressTimerId = -1;\n #acceptEvent(event) {\n if (this.$props.disabled() || isPointerEvent(event) && (event.button !== 0 || this.#media.activeMenu) || isTouchEvent(event) && this.#media.activeMenu || isTouchPinchEvent(event) || !this.#inBounds(event)) {\n return;\n }\n event.MEDIA_GESTURE = true;\n event.preventDefault();\n const eventType = peek(this.$props.event), isDblEvent = eventType?.startsWith(\"dbl\");\n if (!isDblEvent) {\n if (this.#presses === 0) {\n setTimeout(() => {\n if (this.#presses === 1) this.#handleEvent(event);\n }, 250);\n }\n } else if (this.#presses === 1) {\n queueMicrotask(() => this.#handleEvent(event));\n clearTimeout(this.#pressTimerId);\n this.#presses = 0;\n return;\n }\n if (this.#presses === 0) {\n this.#pressTimerId = window.setTimeout(() => {\n this.#presses = 0;\n }, 275);\n }\n this.#presses++;\n }\n #handleEvent(event) {\n this.el.setAttribute(\"data-triggered\", \"\");\n requestAnimationFrame(() => {\n if (this.#isTopLayer()) {\n this.#performAction(peek(this.$props.action), event);\n }\n requestAnimationFrame(() => {\n this.el.removeAttribute(\"data-triggered\");\n });\n });\n }\n /** Validate event occurred in gesture bounds. */\n #inBounds(event) {\n if (!this.el) return false;\n if (isPointerEvent(event) || isMouseEvent(event) || isTouchEvent(event)) {\n const touch = isTouchEvent(event) ? event.changedTouches[0] ?? event.touches[0] : void 0;\n const clientX = touch?.clientX ?? event.clientX;\n const clientY = touch?.clientY ?? event.clientY;\n const rect = this.el.getBoundingClientRect();\n const inBounds = clientY >= rect.top && clientY <= rect.bottom && clientX >= rect.left && clientX <= rect.right;\n return event.type.includes(\"leave\") ? !inBounds : inBounds;\n }\n return true;\n }\n /** Validate gesture has the highest z-index in this triggered group. */\n #isTopLayer() {\n const gestures = this.#media.player.el.querySelectorAll(\n \"[data-media-gesture][data-triggered]\"\n );\n return Array.from(gestures).sort(\n (a, b) => +getComputedStyle(b).zIndex - +getComputedStyle(a).zIndex\n )[0] === this.el;\n }\n #performAction(action, trigger) {\n if (!action) return;\n const willTriggerEvent = new DOMEvent(\"will-trigger\", {\n detail: action,\n cancelable: true,\n trigger\n });\n this.dispatchEvent(willTriggerEvent);\n if (willTriggerEvent.defaultPrevented) return;\n const [method, value] = action.replace(/:([a-z])/, \"-$1\").split(\":\");\n if (action.includes(\":fullscreen\")) {\n this.#media.remote.toggleFullscreen(\"prefer-media\", trigger);\n } else if (action.includes(\"seek:\")) {\n this.#media.remote.seek(peek(this.#media.$state.currentTime) + (+value || 0), trigger);\n } else {\n this.#media.remote[kebabToCamelCase(method)](trigger);\n }\n this.dispatch(\"trigger\", {\n detail: action,\n trigger\n });\n }\n}\n\nclass CaptionsTextRenderer {\n priority = 10;\n #track = null;\n #renderer;\n #events;\n constructor(renderer) {\n this.#renderer = renderer;\n }\n attach() {\n }\n canRender() {\n return true;\n }\n detach() {\n this.#events?.abort();\n this.#events = void 0;\n this.#renderer.reset();\n this.#track = null;\n }\n changeTrack(track) {\n if (!track || this.#track === track) return;\n this.#events?.abort();\n this.#events = new EventsController(track);\n if (track.readyState < 2) {\n this.#renderer.reset();\n this.#events.add(\"load\", () => this.#changeTrack(track), { once: true });\n } else {\n this.#changeTrack(track);\n }\n this.#events.add(\"add-cue\", (event) => {\n this.#renderer.addCue(event.detail);\n }).add(\"remove-cue\", (event) => {\n this.#renderer.removeCue(event.detail);\n });\n this.#track = track;\n }\n #changeTrack(track) {\n this.#renderer.changeTrack({\n cues: [...track.cues],\n regions: [...track.regions]\n });\n }\n}\n\nclass Captions extends Component {\n static props = {\n textDir: \"ltr\",\n exampleText: \"Captions look like this.\"\n };\n #media;\n static lib = signal(null);\n onSetup() {\n this.#media = useMediaContext();\n this.setAttributes({\n \"aria-hidden\": $ariaBool(this.#isHidden.bind(this))\n });\n }\n onAttach(el) {\n el.style.setProperty(\"pointer-events\", \"none\");\n }\n onConnect(el) {\n if (!Captions.lib()) {\n import('media-captions').then((lib) => Captions.lib.set(lib));\n }\n effect(this.#watchViewType.bind(this));\n }\n #isHidden() {\n const { textTrack, remotePlaybackState, iOSControls } = this.#media.$state, track = textTrack();\n return iOSControls() || remotePlaybackState() === \"connected\" || !track || !isTrackCaptionKind(track);\n }\n #watchViewType() {\n if (!Captions.lib()) return;\n const { viewType } = this.#media.$state;\n if (viewType() === \"audio\") {\n return this.#setupAudioView();\n } else {\n return this.#setupVideoView();\n }\n }\n #setupAudioView() {\n effect(this.#onTrackChange.bind(this));\n this.#listenToFontStyleChanges(null);\n return () => {\n this.el.textContent = \"\";\n };\n }\n #onTrackChange() {\n if (this.#isHidden()) return;\n this.#onCueChange();\n const { textTrack } = this.#media.$state;\n listenEvent(textTrack(), \"cue-change\", this.#onCueChange.bind(this));\n effect(this.#onUpdateTimedNodes.bind(this));\n }\n #onCueChange() {\n this.el.textContent = \"\";\n if (this.#hideExampleTimer >= 0) {\n this.#removeExample();\n }\n const { realCurrentTime, textTrack } = this.#media.$state, { renderVTTCueString } = Captions.lib(), time = peek(realCurrentTime), activeCues = peek(textTrack).activeCues;\n for (const cue of activeCues) {\n const displayEl = this.#createCueDisplayElement(), cueEl = this.#createCueElement();\n cueEl.innerHTML = renderVTTCueString(cue, time);\n displayEl.append(cueEl);\n this.el.append(cueEl);\n }\n }\n #onUpdateTimedNodes() {\n const { realCurrentTime } = this.#media.$state, { updateTimedVTTCueNodes } = Captions.lib();\n updateTimedVTTCueNodes(this.el, realCurrentTime());\n }\n #setupVideoView() {\n const { CaptionsRenderer } = Captions.lib(), renderer = new CaptionsRenderer(this.el), textRenderer = new CaptionsTextRenderer(renderer);\n this.#media.textRenderers.add(textRenderer);\n effect(this.#watchTextDirection.bind(this, renderer));\n effect(this.#watchMediaTime.bind(this, renderer));\n this.#listenToFontStyleChanges(renderer);\n return () => {\n this.el.textContent = \"\";\n this.#media.textRenderers.remove(textRenderer);\n renderer.destroy();\n };\n }\n #watchTextDirection(renderer) {\n renderer.dir = this.$props.textDir();\n }\n #watchMediaTime(renderer) {\n if (this.#isHidden()) return;\n const { realCurrentTime, textTrack } = this.#media.$state;\n renderer.currentTime = realCurrentTime();\n if (this.#hideExampleTimer >= 0 && textTrack()?.activeCues[0]) {\n this.#removeExample();\n }\n }\n #listenToFontStyleChanges(renderer) {\n const player = this.#media.player;\n if (!player) return;\n const onChange = this.#onFontStyleChange.bind(this, renderer);\n listenEvent(player, \"vds-font-change\", onChange);\n }\n #onFontStyleChange(renderer) {\n if (this.#hideExampleTimer >= 0) {\n this.#hideExample();\n return;\n }\n const { textTrack } = this.#media.$state;\n if (!textTrack()?.activeCues[0]) {\n this.#showExample();\n } else {\n renderer?.update(true);\n }\n }\n #showExample() {\n const display = this.#createCueDisplayElement();\n setAttribute(display, \"data-example\", \"\");\n const cue = this.#createCueElement();\n setAttribute(cue, \"data-example\", \"\");\n cue.textContent = this.$props.exampleText();\n display?.append(cue);\n this.el?.append(display);\n this.el?.setAttribute(\"data-example\", \"\");\n this.#hideExample();\n }\n #hideExampleTimer = -1;\n #hideExample() {\n window.clearTimeout(this.#hideExampleTimer);\n this.#hideExampleTimer = window.setTimeout(this.#removeExample.bind(this), 2500);\n }\n #removeExample() {\n this.el?.removeAttribute(\"data-example\");\n if (this.el?.querySelector(\"[data-example]\")) this.el.textContent = \"\";\n this.#hideExampleTimer = -1;\n }\n #createCueDisplayElement() {\n const el = document.createElement(\"div\");\n setAttribute(el, \"data-part\", \"cue-display\");\n return el;\n }\n #createCueElement() {\n const el = document.createElement(\"div\");\n setAttribute(el, \"data-part\", \"cue\");\n return el;\n }\n}\n\nclass Poster extends Component {\n static props = {\n src: null,\n alt: null,\n crossOrigin: null\n };\n static state = new State({\n img: null,\n src: null,\n alt: null,\n crossOrigin: null,\n loading: true,\n error: null,\n hidden: false\n });\n #media;\n onSetup() {\n this.#media = useMediaContext();\n this.#watchSrc();\n this.#watchAlt();\n this.#watchCrossOrigin();\n this.#watchHidden();\n }\n onAttach(el) {\n el.style.setProperty(\"pointer-events\", \"none\");\n effect(this.#watchImg.bind(this));\n effect(this.#watchSrc.bind(this));\n effect(this.#watchAlt.bind(this));\n effect(this.#watchCrossOrigin.bind(this));\n effect(this.#watchHidden.bind(this));\n const { started } = this.#media.$state;\n this.setAttributes({\n \"data-visible\": () => !started() && !this.$state.hidden(),\n \"data-loading\": this.#isLoading.bind(this),\n \"data-error\": this.#hasError.bind(this),\n \"data-hidden\": this.$state.hidden\n });\n }\n onConnect(el) {\n effect(this.#onPreconnect.bind(this));\n effect(this.#onLoadStart.bind(this));\n }\n #hasError() {\n const { error } = this.$state;\n return !isNull(error());\n }\n #onPreconnect() {\n const { canLoadPoster, poster } = this.#media.$state;\n if (!canLoadPoster() && poster()) preconnect(poster(), \"preconnect\");\n }\n #watchHidden() {\n const { src } = this.$props, { poster, nativeControls } = this.#media.$state;\n this.el && setAttribute(this.el, \"display\", nativeControls() ? \"none\" : null);\n this.$state.hidden.set(this.#hasError() || !(src() || poster()) || nativeControls());\n }\n #isLoading() {\n const { loading, hidden } = this.$state;\n return !hidden() && loading();\n }\n #watchImg() {\n const img = this.$state.img();\n if (!img) return;\n new EventsController(img).add(\"load\", this.#onLoad.bind(this)).add(\"error\", this.#onError.bind(this));\n if (img.complete) this.#onLoad();\n }\n #prevSrc = \"\";\n #watchSrc() {\n const { poster: defaultPoster } = this.#media.$props, { canLoadPoster, providedPoster, inferredPoster } = this.#media.$state;\n const src = this.$props.src() || \"\", poster = src || defaultPoster() || inferredPoster();\n if (this.#prevSrc === providedPoster()) {\n providedPoster.set(src);\n }\n this.$state.src.set(canLoadPoster() && poster.length ? poster : null);\n this.#prevSrc = src;\n }\n #watchAlt() {\n const { src } = this.$props, { alt } = this.$state, { poster } = this.#media.$state;\n alt.set(src() || poster() ? this.$props.alt() : null);\n }\n #watchCrossOrigin() {\n const { crossOrigin: crossOriginProp } = this.$props, { crossOrigin: crossOriginState } = this.$state, { crossOrigin: mediaCrossOrigin, poster: src } = this.#media.$state, crossOrigin = crossOriginProp() !== null ? crossOriginProp() : mediaCrossOrigin();\n crossOriginState.set(\n /ytimg\\.com|vimeo/.test(src() || \"\") ? null : crossOrigin === true ? \"anonymous\" : crossOrigin\n );\n }\n #onLoadStart() {\n const { loading, error } = this.$state, { canLoadPoster, poster } = this.#media.$state;\n loading.set(canLoadPoster() && !!poster());\n error.set(null);\n }\n #onLoad() {\n const { loading, error } = this.$state;\n loading.set(false);\n error.set(null);\n }\n #onError(event) {\n const { loading, error } = this.$state;\n loading.set(false);\n error.set(event);\n }\n}\n\nclass Time extends Component {\n static props = {\n type: \"current\",\n showHours: false,\n padHours: null,\n padMinutes: null,\n remainder: false,\n toggle: false,\n hidden: false\n };\n static state = new State({\n timeText: \"\",\n hidden: false\n });\n #media;\n #invert = signal(null);\n #isVisible = signal(true);\n #isIntersecting = signal(true);\n onSetup() {\n this.#media = useMediaContext();\n this.#watchTime();\n const { type } = this.$props;\n this.setAttributes({\n \"data-type\": type,\n \"data-remainder\": this.#shouldInvert.bind(this)\n });\n new IntersectionObserverController({\n callback: this.#onIntersectionChange.bind(this)\n }).attach(this);\n }\n onAttach(el) {\n if (!el.hasAttribute(\"role\")) effect(this.#watchRole.bind(this));\n effect(this.#watchTime.bind(this));\n }\n onConnect(el) {\n onDispose(observeVisibility(el, this.#isVisible.set));\n effect(this.#watchHidden.bind(this));\n effect(this.#watchToggle.bind(this));\n }\n #onIntersectionChange(entries) {\n this.#isIntersecting.set(entries[0].isIntersecting);\n }\n #watchHidden() {\n const { hidden } = this.$props;\n this.$state.hidden.set(hidden() || !this.#isVisible() || !this.#isIntersecting());\n }\n #watchToggle() {\n if (!this.$props.toggle()) {\n this.#invert.set(null);\n return;\n }\n if (this.el) {\n onPress(this.el, this.#onToggle.bind(this));\n }\n }\n #watchTime() {\n const { hidden, timeText } = this.$state, { duration } = this.#media.$state;\n if (hidden()) return;\n const { type, padHours, padMinutes, showHours } = this.$props, seconds = this.#getSeconds(type()), $duration = duration(), shouldInvert = this.#shouldInvert();\n if (!Number.isFinite(seconds + $duration)) {\n timeText.set(\"LIVE\");\n return;\n }\n const time = shouldInvert ? Math.max(0, $duration - seconds) : seconds, formattedTime = formatTime(time, {\n padHrs: padHours(),\n padMins: padMinutes(),\n showHrs: showHours()\n });\n timeText.set((shouldInvert ? \"-\" : \"\") + formattedTime);\n }\n #watchRole() {\n if (!this.el) return;\n const { toggle } = this.$props;\n setAttribute(this.el, \"role\", toggle() ? \"timer\" : null);\n setAttribute(this.el, \"tabindex\", toggle() ? 0 : null);\n }\n #getSeconds(type) {\n const { bufferedEnd, duration, currentTime } = this.#media.$state;\n switch (type) {\n case \"buffered\":\n return bufferedEnd();\n case \"duration\":\n return duration();\n default:\n return currentTime();\n }\n }\n #shouldInvert() {\n return this.$props.remainder() && this.#invert() !== false;\n }\n #onToggle(event) {\n event.preventDefault();\n if (this.#invert() === null) {\n this.#invert.set(!this.$props.remainder());\n return;\n }\n this.#invert.set((v) => !v);\n }\n}\n\nclass MediaPlayerInstance extends MediaPlayer {\n}\nclass MediaProviderInstance extends MediaProvider {\n}\nclass MediaAnnouncerInstance extends MediaAnnouncer {\n}\nclass ControlsInstance extends Controls {\n}\nclass ControlsGroupInstance extends ControlsGroup {\n}\nclass ToggleButtonInstance extends ToggleButton {\n}\nclass CaptionButtonInstance extends CaptionButton {\n}\nclass FullscreenButtonInstance extends FullscreenButton {\n}\nclass LiveButtonInstance extends LiveButton {\n}\nclass MuteButtonInstance extends MuteButton {\n}\nclass PIPButtonInstance extends PIPButton {\n}\nclass PlayButtonInstance extends PlayButton {\n}\nclass AirPlayButtonInstance extends AirPlayButton {\n}\nclass GoogleCastButtonInstance extends GoogleCastButton {\n}\nclass SeekButtonInstance extends SeekButton {\n}\nclass TooltipInstance extends Tooltip {\n}\nclass TooltipTriggerInstance extends TooltipTrigger {\n}\nclass TooltipContentInstance extends TooltipContent {\n}\nclass SliderInstance extends Slider {\n}\nclass TimeSliderInstance extends TimeSlider {\n}\nclass VolumeSliderInstance extends VolumeSlider {\n}\nclass AudioGainSliderInstance extends AudioGainSlider {\n}\nclass SpeedSliderInstance extends SpeedSlider {\n}\nclass QualitySliderInstance extends QualitySlider {\n}\nclass SliderThumbnailInstance extends SliderThumbnail {\n}\nclass SliderValueInstance extends SliderValue {\n}\nclass SliderVideoInstance extends SliderVideo {\n}\nclass SliderPreviewInstance extends SliderPreview {\n}\nclass SliderChaptersInstance extends SliderChapters {\n}\nclass MenuInstance extends Menu {\n}\nclass MenuButtonInstance extends MenuButton {\n}\nclass MenuItemsInstance extends MenuItems {\n}\nclass MenuItemInstance extends MenuItem {\n}\nclass MenuPortalInstance extends MenuPortal {\n}\nclass RadioGroupInstance extends RadioGroup {\n}\nclass RadioInstance extends Radio {\n}\nclass CaptionsInstance extends Captions {\n}\nclass GestureInstance extends Gesture {\n}\nclass PosterInstance extends Poster {\n}\nclass ThumbnailInstance extends Thumbnail {\n}\nclass TimeInstance extends Time {\n}\n\nconst Slot = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ React.createElement(SlotClone, { ...slotProps, ref: forwardedRef }, React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null);\n }\n return /* @__PURE__ */ React.createElement(SlotClone, { ...slotProps, ref: forwardedRef }, children);\n});\nSlot.displayName = \"Slot\";\nconst SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n return React.cloneElement(children, {\n ...mergeProps(slotProps, children.props),\n ref: forwardedRef ? composeRefs(forwardedRef, children.ref) : children.ref\n });\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n});\nSlotClone.displayName = \"SlotClone\";\nconst Slottable = ({ children }) => {\n return /* @__PURE__ */ React.createElement(React.Fragment, null, children);\n};\nfunction isSlottable(child) {\n return React.isValidElement(child) && child.type === Slottable;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n childPropValue(...args);\n slotPropValue(...args);\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\n\nconst NODES = [\"button\", \"div\", \"span\", \"img\", \"video\", \"audio\"];\nconst Primitive = NODES.reduce((primitives, node) => {\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n return /* @__PURE__ */ React.createElement(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitives, [node]: Node };\n}, {});\n\nfunction isRemotionProvider(provider) {\n return provider?.$$PROVIDER_TYPE === \"REMOTION\";\n}\nfunction isRemotionSrc(src) {\n return src?.type === \"video/remotion\";\n}\n\nconst sliderStateRecord = SliderInstance.state.record, initialSliderStore = Object.keys(sliderStateRecord).reduce(\n (store, prop) => ({\n ...store,\n [prop]() {\n return sliderStateRecord[prop];\n }\n }),\n {}\n);\nfunction useSliderState(prop, ref) {\n const $state = useStateContext(sliderState);\n return useSignal((ref?.current?.$state || $state || initialSliderStore)[prop]);\n}\nfunction useSliderStore(ref) {\n const $state = useStateContext(sliderState);\n return useSignalRecord(ref?.current ? ref.current.$state : $state || initialSliderStore);\n}\n\nconst mediaStateRecord = MediaPlayerInstance.state.record, initialMediaStore = Object.keys(mediaStateRecord).reduce(\n (store, prop) => ({\n ...store,\n [prop]() {\n return mediaStateRecord[prop];\n }\n }),\n {}\n);\nfunction useMediaState(prop, ref) {\n const $state = useStateContext(mediaState);\n return useSignal((ref?.current?.$state || $state || initialMediaStore)[prop]);\n}\nfunction useMediaStore(ref) {\n const $state = useStateContext(mediaState);\n return useSignalRecord(ref?.current ? ref.current.$state : $state || initialMediaStore);\n}\n\nexport { ARIAKeyShortcuts, AUDIO_EXTENSIONS, AUDIO_TYPES, AirPlayButtonInstance, AudioGainSliderInstance, AudioProviderLoader, AudioTrackList, CaptionButtonInstance, CaptionsInstance, ControlsGroupInstance, ControlsInstance, DASHProviderLoader, DASH_VIDEO_EXTENSIONS, DASH_VIDEO_TYPES, FullscreenButtonInstance, FullscreenController, GestureInstance, GoogleCastButtonInstance, HLSProviderLoader, HLS_VIDEO_EXTENSIONS, HLS_VIDEO_TYPES, HTMLAirPlayAdapter, HTMLMediaProvider, IS_CHROME, IS_IOS, IS_SERVER, List, ListSymbol, LiveButtonInstance, LocalMediaStorage, MEDIA_KEY_SHORTCUTS, MediaAnnouncerInstance, MediaControls, MediaPlayerInstance, MediaProviderInstance, MediaRemoteControl, MenuButtonInstance, MenuInstance, MenuItemInstance, MenuItemsInstance, MenuPortalInstance, MuteButtonInstance, PIPButtonInstance, PlayButtonInstance, PosterInstance, Primitive, QualitySliderInstance, QualitySymbol, RAFLoop, RadioGroupController, RadioGroupInstance, RadioInstance, ScreenOrientationController, SeekButtonInstance, SliderChaptersInstance, SliderInstance, SliderPreviewInstance, SliderThumbnailInstance, SliderValueInstance, SliderVideoInstance, SpeedSliderInstance, TextRenderers, TextTrack, TextTrackList, TextTrackSymbol, ThumbnailInstance, ThumbnailsLoader, TimeInstance, TimeRange, TimeSliderInstance, ToggleButtonInstance, TooltipContentInstance, TooltipInstance, TooltipTriggerInstance, VIDEO_EXTENSIONS, VIDEO_TYPES, VideoProvider, VideoProviderLoader, VideoQualityList, VimeoProviderLoader, VolumeSliderInstance, YouTubeProviderLoader, appendParamsToURL, boundTime, canChangeVolume, canFullscreen, canGoogleCastSrc, canOrientScreen, canPlayHLSNatively, canRotateScreen, canUsePictureInPicture, canUseVideoPresentation, coerceToError, findActiveCue, formatSpokenTime, formatTime, getDownloadFile, getTimeRangesEnd, getTimeRangesStart, isAudioProvider, isAudioSrc, isCueActive, isDASHProvider, isDASHSrc, isGoogleCastProvider, isHLSProvider, isHLSSrc, isHLSSupported, isHTMLAudioElement, isHTMLIFrameElement, isHTMLMediaElement, isHTMLVideoElement, isMediaStream, isRemotionProvider, isRemotionSrc, isTrackCaptionKind, isVideoProvider, isVideoQualitySrc, isVideoSrc, isVimeoProvider, isYouTubeProvider, loadScript, mediaContext, mediaState, menuContext, normalizeTimeIntervals, parseJSONCaptionsFile, preconnect, sliderState, softResetMediaState, sortVideoQualities, updateSliderPreviewPlacement, updateTimeIntervals, useMediaContext, useMediaState, useMediaStore, useSliderState, useSliderStore, watchActiveTextTrack, watchCueTextChange };\n","\"use client\"\n\nimport * as React from 'react';\nimport { useReactContext, createReactComponent, composeRefs, useSignal, noop, useStateContext, signal, effect, isString } from './vidstack-CZgUA94N.js';\nimport { mediaContext, AirPlayButtonInstance, Primitive, PlayButtonInstance, CaptionButtonInstance, FullscreenButtonInstance, MuteButtonInstance, PIPButtonInstance, SeekButtonInstance, LiveButtonInstance, SliderValueInstance, SliderInstance, SliderPreviewInstance, useSliderState, VolumeSliderInstance, IS_SERVER, ThumbnailInstance, TimeSliderInstance, SliderChaptersInstance, SliderThumbnailInstance, SliderVideoInstance, mediaState, RadioGroupInstance, RadioInstance, MenuInstance, MenuButtonInstance, useMediaState, MenuItemsInstance, MenuItemInstance, GestureInstance, TimeInstance, isTrackCaptionKind } from './vidstack-D5Pzx_k5.js';\nimport { createPortal } from 'react-dom';\n\nfunction useMediaContext() {\n return useReactContext(mediaContext);\n}\n\nconst AirPlayButtonBridge = createReactComponent(AirPlayButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst AirPlayButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(AirPlayButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nAirPlayButton.displayName = \"AirPlayButton\";\n\nconst PlayButtonBridge = createReactComponent(PlayButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst PlayButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(PlayButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nPlayButton.displayName = \"PlayButton\";\n\nconst CaptionButtonBridge = createReactComponent(CaptionButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst CaptionButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(CaptionButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nCaptionButton.displayName = \"CaptionButton\";\n\nconst FullscreenButtonBridge = createReactComponent(FullscreenButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst FullscreenButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(FullscreenButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nFullscreenButton.displayName = \"FullscreenButton\";\n\nconst MuteButtonBridge = createReactComponent(MuteButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst MuteButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(MuteButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nMuteButton.displayName = \"MuteButton\";\n\nconst PIPButtonBridge = createReactComponent(PIPButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst PIPButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(PIPButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nPIPButton.displayName = \"PIPButton\";\n\nconst SeekButtonBridge = createReactComponent(SeekButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst SeekButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(SeekButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nSeekButton.displayName = \"SeekButton\";\n\nconst LiveButtonBridge = createReactComponent(LiveButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst LiveButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(LiveButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nLiveButton.displayName = \"LiveButton\";\n\nconst sliderCallbacks = [\n \"onDragStart\",\n \"onDragEnd\",\n \"onDragValueChange\",\n \"onValueChange\",\n \"onPointerValueChange\"\n];\n\nconst SliderValueBridge = createReactComponent(SliderValueInstance);\n\nconst SliderBridge = createReactComponent(SliderInstance, {\n events: sliderCallbacks\n});\nconst Root$5 = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(SliderBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children));\n});\nRoot$5.displayName = \"Slider\";\nconst Thumb = React.forwardRef((props, forwardRef) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props, ref: forwardRef }));\nThumb.displayName = \"SliderThumb\";\nconst Track = React.forwardRef((props, forwardRef) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props, ref: forwardRef }));\nTrack.displayName = \"SliderTrack\";\nconst TrackFill = React.forwardRef((props, forwardRef) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props, ref: forwardRef }));\nTrackFill.displayName = \"SliderTrackFill\";\nconst PreviewBridge = createReactComponent(SliderPreviewInstance);\nconst Preview = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(PreviewBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nPreview.displayName = \"SliderPreview\";\nconst Value = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(SliderValueBridge, { ...props }, (props2, instance) => {\n const $text = useSignal(() => instance.getValueText(), instance);\n return /* @__PURE__ */ React.createElement(Primitive.div, { ...props2, ref: forwardRef }, $text, children);\n });\n});\nValue.displayName = \"SliderValue\";\nconst Steps = React.forwardRef(({ children, ...props }, forwardRef) => {\n const $min = useSliderState(\"min\"), $max = useSliderState(\"max\"), $step = useSliderState(\"step\"), steps = ($max - $min) / $step;\n return /* @__PURE__ */ React.createElement(Primitive.div, { ...props, ref: forwardRef }, Array.from({ length: Math.floor(steps) + 1 }).map((_, step) => children(step)));\n});\nSteps.displayName = \"SliderSteps\";\n\nvar slider = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Preview: Preview,\n Root: Root$5,\n Steps: Steps,\n Thumb: Thumb,\n Track: Track,\n TrackFill: TrackFill,\n Value: Value\n});\n\nconst VolumeSliderBridge = createReactComponent(VolumeSliderInstance, {\n events: sliderCallbacks,\n domEventsRegex: /^onMedia/\n});\nconst Root$4 = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(VolumeSliderBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children));\n }\n);\nRoot$4.displayName = \"VolumeSlider\";\n\nvar volumeSlider = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Preview: Preview,\n Root: Root$4,\n Steps: Steps,\n Thumb: Thumb,\n Track: Track,\n TrackFill: TrackFill,\n Value: Value\n});\n\nfunction createVTTCue(startTime = 0, endTime = 0, text = \"\") {\n if (IS_SERVER) {\n return {\n startTime,\n endTime,\n text,\n addEventListener: noop,\n removeEventListener: noop,\n dispatchEvent: noop\n };\n }\n return new window.VTTCue(startTime, endTime, text);\n}\nfunction appendParamsToURL(baseUrl, params) {\n const url = new URL(baseUrl);\n for (const key of Object.keys(params)) {\n url.searchParams.set(key, params[key] + \"\");\n }\n return url.toString();\n}\n\nconst ThumbnailBridge = createReactComponent(ThumbnailInstance);\nconst Root$3 = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ThumbnailBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n});\nRoot$3.displayName = \"Thumbnail\";\nconst Img = React.forwardRef(({ children, ...props }, forwardRef) => {\n const { src, img, crossOrigin } = useStateContext(ThumbnailInstance.state), $src = useSignal(src), $crossOrigin = useSignal(crossOrigin);\n return /* @__PURE__ */ React.createElement(\n Primitive.img,\n {\n crossOrigin: $crossOrigin,\n ...props,\n src: $src || void 0,\n ref: composeRefs(img.set, forwardRef)\n },\n children\n );\n});\nImg.displayName = \"ThumbnailImg\";\n\nvar thumbnail = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Img: Img,\n Root: Root$3\n});\n\nconst TimeSliderContext = React.createContext({\n $chapters: signal(null)\n});\nTimeSliderContext.displayName = \"TimeSliderContext\";\nconst TimeSliderBridge = createReactComponent(TimeSliderInstance, {\n events: sliderCallbacks,\n domEventsRegex: /^onMedia/\n});\nconst Root$2 = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n const $chapters = React.useMemo(() => signal(null), []);\n return /* @__PURE__ */ React.createElement(TimeSliderContext.Provider, { value: { $chapters } }, /* @__PURE__ */ React.createElement(TimeSliderBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children)));\n }\n);\nRoot$2.displayName = \"TimeSlider\";\nconst SliderChaptersBridge = createReactComponent(SliderChaptersInstance);\nconst Chapters = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(SliderChaptersBridge, { ...props }, (props2, instance) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n /* @__PURE__ */ React.createElement(ChapterTracks, { instance }, children)\n ));\n }\n);\nChapters.displayName = \"SliderChapters\";\nfunction ChapterTracks({ instance, children }) {\n const $cues = useSignal(() => instance.cues, instance), refs = React.useRef([]), emptyCue = React.useRef(null), { $chapters } = React.useContext(TimeSliderContext);\n if (!emptyCue.current) {\n emptyCue.current = createVTTCue();\n }\n React.useEffect(() => {\n $chapters.set(instance);\n return () => void $chapters.set(null);\n }, [instance]);\n React.useEffect(() => {\n instance.setRefs(refs.current);\n }, [$cues]);\n return children($cues.length ? $cues : [emptyCue.current], (el) => {\n if (!el) {\n refs.current.length = 0;\n return;\n }\n refs.current.push(el);\n });\n}\nChapterTracks.displayName = \"SliderChapterTracks\";\nconst ChapterTitle = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n const { $chapters } = React.useContext(TimeSliderContext), [title, setTitle] = React.useState();\n React.useEffect(() => {\n return effect(() => {\n const chapters = $chapters(), cue = chapters?.activePointerCue || chapters?.activeCue;\n setTitle(cue?.text || \"\");\n });\n }, []);\n return /* @__PURE__ */ React.createElement(Primitive.div, { ...props, ref: forwardRef }, title, children);\n }\n);\nChapterTitle.displayName = \"SliderChapterTitle\";\nconst Progress = React.forwardRef((props, forwardRef) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props, ref: forwardRef }));\nProgress.displayName = \"SliderProgress\";\nconst SliderThumbnailBridge = createReactComponent(SliderThumbnailInstance);\nconst ThumbnailRoot = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(SliderThumbnailBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2, ref: composeRefs(props2.ref, forwardRef) }, children));\n }\n);\nThumbnailRoot.displayName = \"SliderThumbnail\";\nconst Thumbnail = {\n Root: ThumbnailRoot,\n Img: Img\n};\nconst VideoBridge = createReactComponent(SliderVideoInstance, {\n events: [\"onCanPlay\", \"onError\"]\n});\nconst Video = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(VideoBridge, { ...props }, (props2, instance) => /* @__PURE__ */ React.createElement(\n VideoProvider,\n {\n ...props2,\n instance,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nVideo.displayName = \"SliderVideo\";\nconst VideoProvider = React.forwardRef(\n ({ instance, children, ...props }, forwardRef) => {\n const { canLoad } = useStateContext(mediaState), { src, video, crossOrigin } = instance.$state, $src = useSignal(src), $canLoad = useSignal(canLoad), $crossOrigin = useSignal(crossOrigin);\n return /* @__PURE__ */ React.createElement(\n Primitive.video,\n {\n style: { maxWidth: \"unset\" },\n ...props,\n src: $src || void 0,\n muted: true,\n playsInline: true,\n preload: $canLoad ? \"auto\" : \"none\",\n crossOrigin: $crossOrigin || void 0,\n ref: composeRefs(video.set, forwardRef)\n },\n children\n );\n }\n);\nVideoProvider.displayName = \"SliderVideoProvider\";\n\nvar timeSlider = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ChapterTitle: ChapterTitle,\n Chapters: Chapters,\n Preview: Preview,\n Progress: Progress,\n Root: Root$2,\n Steps: Steps,\n Thumb: Thumb,\n Thumbnail: Thumbnail,\n Track: Track,\n TrackFill: TrackFill,\n Value: Value,\n Video: Video\n});\n\nconst RadioGroupBridge = createReactComponent(RadioGroupInstance, {\n events: [\"onChange\"]\n});\nconst Root$1 = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(RadioGroupBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children));\n }\n);\nRoot$1.displayName = \"RadioGroup\";\nconst ItemBridge$1 = createReactComponent(RadioInstance, {\n events: [\"onChange\", \"onSelect\"]\n});\nconst Item$1 = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ItemBridge$1, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n});\nItem$1.displayName = \"RadioItem\";\n\nvar radioGroup = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Item: Item$1,\n Root: Root$1\n});\n\nconst MenuBridge = createReactComponent(MenuInstance, {\n events: [\"onOpen\", \"onClose\"],\n domEventsRegex: /^onMedia/\n});\nconst Root = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(MenuBridge, { ...props, ref: forwardRef }, (props2, instance) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n style: { display: !instance.isSubmenu ? \"contents\" : void 0, ...props2.style }\n },\n children\n ));\n});\nRoot.displayName = \"Menu\";\nconst ButtonBridge = createReactComponent(MenuButtonInstance, {\n events: [\"onSelect\"]\n});\nconst Button = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nButton.displayName = \"MenuButton\";\nconst Portal = React.forwardRef(\n ({ container = null, disabled = false, children, ...props }, forwardRef) => {\n let fullscreen = useMediaState(\"fullscreen\"), shouldPortal = disabled === \"fullscreen\" ? !fullscreen : !disabled;\n const target = React.useMemo(() => {\n if (IS_SERVER) return null;\n const node = isString(container) ? document.querySelector(container) : container;\n return node ?? document.body;\n }, [container]);\n return !target || !shouldPortal ? children : createPortal(\n /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props,\n style: { display: \"contents\", ...props.style },\n ref: forwardRef\n },\n children\n ),\n target\n );\n }\n);\nPortal.displayName = \"MenuPortal\";\nconst ItemsBridge = createReactComponent(MenuItemsInstance);\nconst Items = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ItemsBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n});\nItems.displayName = \"MenuItems\";\nconst ItemBridge = createReactComponent(MenuItemInstance);\nconst Item = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ItemBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n});\nItem.displayName = \"MenuItem\";\n\nvar menu = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Button: Button,\n Content: Items,\n Item: Item,\n Items: Items,\n Portal: Portal,\n Radio: Item$1,\n RadioGroup: Root$1,\n Root: Root\n});\n\nconst GestureBridge = createReactComponent(GestureInstance, {\n events: [\"onWillTrigger\", \"onTrigger\"]\n});\nconst Gesture = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(GestureBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children));\n }\n);\nGesture.displayName = \"Gesture\";\n\nconst TimeBridge = createReactComponent(TimeInstance);\nconst Time = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(TimeBridge, { ...props }, (props2, instance) => /* @__PURE__ */ React.createElement(\n TimeText,\n {\n ...props2,\n instance,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n});\nTime.displayName = \"Time\";\nconst TimeText = React.forwardRef(\n ({ instance, children, ...props }, forwardRef) => {\n const { timeText } = instance.$state, $timeText = useSignal(timeText);\n return /* @__PURE__ */ React.createElement(Primitive.div, { ...props, ref: forwardRef }, $timeText, children);\n }\n);\nTimeText.displayName = \"TimeText\";\n\nfunction useMediaPlayer() {\n const context = useMediaContext();\n return context?.player || null;\n}\n\nfunction useAudioOptions() {\n const media = useMediaContext(), { audioTracks, audioTrack } = media.$state, $audioTracks = useSignal(audioTracks);\n useSignal(audioTrack);\n return React.useMemo(() => {\n const options = $audioTracks.map((track) => ({\n track,\n label: track.label,\n value: getTrackValue$1(track),\n get selected() {\n return audioTrack() === track;\n },\n select(trigger) {\n const index = audioTracks().indexOf(track);\n if (index >= 0) media.remote.changeAudioTrack(index, trigger);\n }\n }));\n Object.defineProperty(options, \"disabled\", {\n get() {\n return options.length <= 1;\n }\n });\n Object.defineProperty(options, \"selectedTrack\", {\n get() {\n return audioTrack();\n }\n });\n Object.defineProperty(options, \"selectedValue\", {\n get() {\n const track = audioTrack();\n return track ? getTrackValue$1(track) : void 0;\n }\n });\n return options;\n }, [$audioTracks]);\n}\nfunction getTrackValue$1(track) {\n return track.label.toLowerCase();\n}\n\nfunction useCaptionOptions({ off = true } = {}) {\n const media = useMediaContext(), { textTracks, textTrack } = media.$state, $textTracks = useSignal(textTracks);\n useSignal(textTrack);\n return React.useMemo(() => {\n const captionTracks = $textTracks.filter(isTrackCaptionKind), options = captionTracks.map((track) => ({\n track,\n label: track.label,\n value: getTrackValue(track),\n get selected() {\n return textTrack() === track;\n },\n select(trigger) {\n const index = textTracks().indexOf(track);\n if (index >= 0) media.remote.changeTextTrackMode(index, \"showing\", trigger);\n }\n }));\n if (off) {\n options.unshift({\n track: null,\n label: isString(off) ? off : \"Off\",\n value: \"off\",\n get selected() {\n return !textTrack();\n },\n select(trigger) {\n media.remote.toggleCaptions(trigger);\n }\n });\n }\n Object.defineProperty(options, \"disabled\", {\n get() {\n return !captionTracks.length;\n }\n });\n Object.defineProperty(options, \"selectedTrack\", {\n get() {\n return textTrack();\n }\n });\n Object.defineProperty(options, \"selectedValue\", {\n get() {\n const track = textTrack();\n return track ? getTrackValue(track) : \"off\";\n }\n });\n return options;\n }, [$textTracks]);\n}\nfunction getTrackValue(track) {\n return track.id + \":\" + track.kind + \"-\" + track.label.toLowerCase();\n}\n\nexport { AirPlayButton, Button, CaptionButton, ChapterTitle, Chapters, FullscreenButton, Gesture, Img, Item$1 as Item, Items, LiveButton, MuteButton, PIPButton, PlayButton, Portal, Preview, Progress, Root$3 as Root, Root$2 as Root$1, Root as Root$2, Root$1 as Root$3, Root$4, Root$5, SeekButton, Steps, Thumb, Thumbnail, Time, Track, TrackFill, Value, appendParamsToURL, menu, radioGroup, slider, sliderCallbacks, thumbnail, timeSlider, useAudioOptions, useCaptionOptions, useMediaContext, useMediaPlayer, volumeSlider };\n","\"use client\"\n\nimport * as React from 'react';\nimport { createReactComponent, composeRefs, listenEvent, useReactScope, scoped, computed, signal, effect, EventsController, useSignal } from './vidstack-CZgUA94N.js';\nimport { MediaAnnouncerInstance, Primitive, ControlsInstance, ControlsGroupInstance, TooltipInstance, TooltipTriggerInstance, TooltipContentInstance, GoogleCastButtonInstance, QualitySliderInstance, AudioGainSliderInstance, SpeedSliderInstance, useMediaState, watchActiveTextTrack, CaptionsInstance, formatSpokenTime, formatTime } from './vidstack-D5Pzx_k5.js';\nimport { sliderCallbacks, Preview, Steps, Thumb, Track as Track$1, TrackFill as TrackFill$1, Value, useMediaContext } from './vidstack-CQ3Bde2N.js';\n\nconst MediaAnnouncerBridge = createReactComponent(MediaAnnouncerInstance, {\n events: [\"onChange\"]\n});\nconst MediaAnnouncer = React.forwardRef(\n ({ style, children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(MediaAnnouncerBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n style: { display: \"contents\", ...style },\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nMediaAnnouncer.displayName = \"MediaAnnouncer\";\n\nconst ControlsBridge = createReactComponent(ControlsInstance);\nconst Root$5 = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ControlsBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n});\nRoot$5.displayName = \"Controls\";\nconst ControlsGroupBridge = createReactComponent(ControlsGroupInstance);\nconst Group = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ControlsGroupBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n});\nGroup.displayName = \"ControlsGroup\";\n\nvar controls = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Group: Group,\n Root: Root$5\n});\n\nconst TooltipBridge = createReactComponent(TooltipInstance);\nfunction Root$4({ children, ...props }) {\n return /* @__PURE__ */ React.createElement(TooltipBridge, { ...props }, children);\n}\nRoot$4.displayName = \"Tooltip\";\nconst TriggerBridge = createReactComponent(TooltipTriggerInstance);\nconst Trigger = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(TriggerBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nTrigger.displayName = \"TooltipTrigger\";\nconst ContentBridge = createReactComponent(TooltipContentInstance);\nconst Content = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ContentBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nContent.displayName = \"TooltipContent\";\n\nvar tooltip = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Content: Content,\n Root: Root$4,\n Trigger: Trigger\n});\n\nconst GoogleCastButtonBridge = createReactComponent(GoogleCastButtonInstance, {\n domEventsRegex: /^onMedia/\n});\nconst GoogleCastButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(GoogleCastButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nGoogleCastButton.displayName = \"GoogleCastButton\";\n\nconst QualitySliderBridge = createReactComponent(QualitySliderInstance, {\n events: sliderCallbacks,\n domEventsRegex: /^onMedia/\n});\nconst Root$3 = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(QualitySliderBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children));\n }\n);\nRoot$3.displayName = \"QualitySlider\";\n\nvar qualitySlider = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Preview: Preview,\n Root: Root$3,\n Steps: Steps,\n Thumb: Thumb,\n Track: Track$1,\n TrackFill: TrackFill$1,\n Value: Value\n});\n\nconst AudioGainSliderBridge = createReactComponent(AudioGainSliderInstance, {\n events: sliderCallbacks,\n domEventsRegex: /^onMedia/\n});\nconst Root$2 = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(AudioGainSliderBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children));\n }\n);\nRoot$2.displayName = \"AudioGainSlider\";\n\nvar audioGainSlider = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Preview: Preview,\n Root: Root$2,\n Steps: Steps,\n Thumb: Thumb,\n Track: Track$1,\n TrackFill: TrackFill$1,\n Value: Value\n});\n\nconst SpeedSliderBridge = createReactComponent(SpeedSliderInstance, {\n events: sliderCallbacks,\n domEventsRegex: /^onMedia/\n});\nconst Root$1 = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(SpeedSliderBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children));\n }\n);\nRoot$1.displayName = \"SpeedSlider\";\n\nvar speedSlider = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Preview: Preview,\n Root: Root$1,\n Steps: Steps,\n Thumb: Thumb,\n Track: Track$1,\n TrackFill: TrackFill$1,\n Value: Value\n});\n\nconst Title = React.forwardRef(({ children, ...props }, forwardRef) => {\n const $title = useMediaState(\"title\");\n return /* @__PURE__ */ React.createElement(Primitive.span, { ...props, ref: forwardRef }, $title, children);\n});\nTitle.displayName = \"Title\";\n\nfunction useActiveTextCues(track) {\n const [activeCues, setActiveCues] = React.useState([]);\n React.useEffect(() => {\n if (!track) {\n setActiveCues([]);\n return;\n }\n function onCuesChange() {\n if (track) setActiveCues(track.activeCues);\n }\n onCuesChange();\n return listenEvent(track, \"cue-change\", onCuesChange);\n }, [track]);\n return activeCues;\n}\n\nfunction useActiveTextTrack(kind) {\n const media = useMediaContext(), [track, setTrack] = React.useState(null);\n React.useEffect(() => {\n return watchActiveTextTrack(media.textTracks, kind, setTrack);\n }, [kind]);\n return track;\n}\n\nfunction useChapterTitle() {\n const $track = useActiveTextTrack(\"chapters\"), $cues = useActiveTextCues($track);\n return $cues[0]?.text || \"\";\n}\n\nconst ChapterTitle = React.forwardRef(\n ({ defaultText = \"\", children, ...props }, forwardRef) => {\n const $chapterTitle = useChapterTitle();\n return /* @__PURE__ */ React.createElement(Primitive.span, { ...props, ref: forwardRef }, $chapterTitle || defaultText, children);\n }\n);\nChapterTitle.displayName = \"ChapterTitle\";\n\nconst CaptionsBridge = createReactComponent(CaptionsInstance);\nconst Captions = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(CaptionsBridge, { ...props, ref: forwardRef }, (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children));\n }\n);\nCaptions.displayName = \"Captions\";\n\nconst Root = React.forwardRef(\n ({ size = 96, children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(\n \"svg\",\n {\n width: size,\n height: size,\n fill: \"none\",\n viewBox: \"0 0 120 120\",\n \"aria-hidden\": \"true\",\n \"data-part\": \"root\",\n ...props,\n ref: forwardRef\n },\n children\n );\n }\n);\nconst Track = React.forwardRef(\n ({ width = 8, children, ...props }, ref) => /* @__PURE__ */ React.createElement(\n \"circle\",\n {\n cx: \"60\",\n cy: \"60\",\n r: \"54\",\n stroke: \"currentColor\",\n strokeWidth: width,\n \"data-part\": \"track\",\n ...props,\n ref\n },\n children\n )\n);\nconst TrackFill = React.forwardRef(\n ({ width = 8, fillPercent = 50, children, ...props }, ref) => /* @__PURE__ */ React.createElement(\n \"circle\",\n {\n cx: \"60\",\n cy: \"60\",\n r: \"54\",\n stroke: \"currentColor\",\n pathLength: \"100\",\n strokeWidth: width,\n strokeDasharray: 100,\n strokeDashoffset: 100 - fillPercent,\n \"data-part\": \"track-fill\",\n ...props,\n ref\n },\n children\n )\n);\n\nvar spinner = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Root: Root,\n Track: Track,\n TrackFill: TrackFill\n});\n\nfunction createSignal(initialValue, deps = []) {\n const scope = useReactScope();\n return React.useMemo(() => scoped(() => signal(initialValue), scope), [scope, ...deps]);\n}\nfunction createComputed(compute, deps = []) {\n const scope = useReactScope();\n return React.useMemo(() => scoped(() => computed(compute), scope), [scope, ...deps]);\n}\nfunction createEffect(compute, deps = []) {\n const scope = useReactScope();\n React.useEffect(() => scoped(() => effect(compute), scope), [scope, ...deps]);\n}\nfunction useScoped(compute) {\n const scope = useReactScope();\n return React.useMemo(() => scoped(compute, scope), [scope]);\n}\n\nfunction useTextCues(track) {\n const [cues, setCues] = React.useState([]);\n React.useEffect(() => {\n if (!track) return;\n function onCuesChange() {\n if (track) setCues([...track.cues]);\n }\n const events = new EventsController(track).add(\"add-cue\", onCuesChange).add(\"remove-cue\", onCuesChange);\n onCuesChange();\n return () => {\n setCues([]);\n events.abort();\n };\n }, [track]);\n return cues;\n}\n\nfunction useChapterOptions() {\n const media = useMediaContext(), track = useActiveTextTrack(\"chapters\"), cues = useTextCues(track), $startTime = useSignal(media.$state.seekableStart), $endTime = useSignal(media.$state.seekableEnd);\n useActiveTextCues(track);\n return React.useMemo(() => {\n const options = track ? cues.filter((cue) => cue.startTime <= $endTime && cue.endTime >= $startTime).map((cue, i) => {\n let currentRef = null, stopProgressEffect;\n return {\n cue,\n label: cue.text,\n value: i.toString(),\n startTimeText: formatTime(Math.max(0, cue.startTime - $startTime)),\n durationText: formatSpokenTime(\n Math.min($endTime, cue.endTime) - Math.max($startTime, cue.startTime)\n ),\n get selected() {\n return cue === track.activeCues[0];\n },\n setProgressVar(ref) {\n if (!ref || cue !== track.activeCues[0]) {\n stopProgressEffect?.();\n stopProgressEffect = void 0;\n ref?.style.setProperty(\"--progress\", \"0%\");\n currentRef = null;\n return;\n }\n if (currentRef === ref) return;\n currentRef = ref;\n stopProgressEffect?.();\n stopProgressEffect = effect(() => {\n const { realCurrentTime } = media.$state, time = realCurrentTime(), cueStartTime = Math.max($startTime, cue.startTime), duration = Math.min($endTime, cue.endTime) - cueStartTime, progress = Math.max(0, time - cueStartTime) / duration * 100;\n ref.style.setProperty(\"--progress\", progress.toFixed(3) + \"%\");\n });\n },\n select(trigger) {\n media.remote.seek(cue.startTime - $startTime, trigger);\n }\n };\n }) : [];\n Object.defineProperty(options, \"selectedValue\", {\n get() {\n const index = options.findIndex((option) => option.selected);\n return (index >= 0 ? index : 0).toString();\n }\n });\n return options;\n }, [cues, $startTime, $endTime]);\n}\n\nexport { Captions, ChapterTitle, Content, GoogleCastButton, Group, MediaAnnouncer, Root$4 as Root, Root$2 as Root$1, Root$1 as Root$2, Root$3, Root$5 as Root$4, Root as Root$5, Title, Track, TrackFill, Trigger, audioGainSlider, controls, createComputed, createEffect, createSignal, qualitySlider, speedSlider, spinner, tooltip, useActiveTextCues, useActiveTextTrack, useChapterOptions, useChapterTitle, useScoped, useTextCues };\n","\"use client\"\n\nimport * as React from 'react';\nimport { listenEvent, EventsController, animationFrameThrottle, effect } from './vidstack-CZgUA94N.js';\nimport { useMediaPlayer } from './vidstack-CQ3Bde2N.js';\n\nfunction useClassName(el, className) {\n React.useEffect(() => {\n if (!el || !className) return;\n const tokens = className.split(\" \");\n for (const token of tokens) el.classList.add(token);\n return () => {\n for (const token of tokens) el.classList.remove(token);\n };\n }, [el, className]);\n}\nfunction useResizeObserver(el, callback) {\n React.useEffect(() => {\n if (!el) return;\n callback();\n const observer = new ResizeObserver(animationFrameThrottle(callback));\n observer.observe(el);\n return () => observer.disconnect();\n }, [el, callback]);\n}\nfunction useTransitionActive(el) {\n const [isActive, setIsActive] = React.useState(false);\n React.useEffect(() => {\n if (!el) return;\n const events = new EventsController(el).add(\"transitionstart\", () => setIsActive(true)).add(\"transitionend\", () => setIsActive(false));\n return () => events.abort();\n }, [el]);\n return isActive;\n}\nfunction useMouseEnter(el) {\n const [isMouseEnter, setIsMouseEnter] = React.useState(false);\n React.useEffect(() => {\n if (!el) return;\n const events = new EventsController(el).add(\"mouseenter\", () => setIsMouseEnter(true)).add(\"mouseleave\", () => setIsMouseEnter(false));\n return () => events.abort();\n }, [el]);\n return isMouseEnter;\n}\nfunction useFocusIn(el) {\n const [isFocusIn, setIsFocusIn] = React.useState(false);\n React.useEffect(() => {\n if (!el) return;\n const events = new EventsController(el).add(\"focusin\", () => setIsFocusIn(true)).add(\"focusout\", () => setIsFocusIn(false));\n return () => events.abort();\n }, [el]);\n return isFocusIn;\n}\nfunction useActive(el) {\n const isMouseEnter = useMouseEnter(el), isFocusIn = useFocusIn(el), prevMouseEnter = React.useRef(false);\n if (prevMouseEnter.current && !isMouseEnter) return false;\n prevMouseEnter.current = isMouseEnter;\n return isMouseEnter || isFocusIn;\n}\nfunction useColorSchemePreference() {\n const [colorScheme, setColorScheme] = React.useState(\"dark\");\n React.useEffect(() => {\n const media = window.matchMedia(\"(prefers-color-scheme: light)\");\n function onChange() {\n setColorScheme(media.matches ? \"light\" : \"dark\");\n }\n onChange();\n return listenEvent(media, \"change\", onChange);\n }, []);\n return colorScheme;\n}\n\nfunction useLayoutName(name) {\n const player = useMediaPlayer();\n React.useEffect(() => {\n if (!player) return;\n return effect(() => {\n const el = player.$el;\n el?.setAttribute(\"data-layout\", name);\n return () => el?.removeAttribute(\"data-layout\");\n });\n }, [player]);\n}\n\nexport { useActive, useClassName, useColorSchemePreference, useLayoutName, useResizeObserver, useTransitionActive };\n","\"use client\"\n\nimport { signal } from './vidstack-CZgUA94N.js';\n\nconst RemotionThumbnail = /* @__PURE__ */ signal(null);\nconst RemotionSliderThumbnail = /* @__PURE__ */ signal(null);\nconst RemotionPoster = /* @__PURE__ */ signal(null);\n\nexport { RemotionPoster, RemotionSliderThumbnail, RemotionThumbnail };\n","\"use client\"\n\nimport * as React from 'react';\nimport { useSignal, composeRefs, isBoolean, uppercaseFirstChar, isUndefined, isString, signal, camelToKebabCase, onDispose, scoped, keysOf, effect, isArray, isKeyboardClick, listenEvent, toggleClass, useContext } from './vidstack-CZgUA94N.js';\nimport { createComputed, createSignal, MediaAnnouncer, Root, Trigger, Content, GoogleCastButton, Captions, useChapterOptions, Root$1 as Root$5, Root$2 as Root$6, Root$3 as Root$7, useScoped, Root$4 as Root$a, Group, useChapterTitle, createEffect, useActiveTextTrack, ChapterTitle as ChapterTitle$1, Title, Root$5 as Root$b, Track as Track$1, TrackFill as TrackFill$1 } from './vidstack-DqtDbuaC.js';\nimport { useColorSchemePreference, useActive, useResizeObserver, useLayoutName, useTransitionActive } from './vidstack-DzQtn4XB.js';\nimport { useMediaContext, MuteButton, LiveButton, SeekButton, PlayButton, CaptionButton, appendParamsToURL, PIPButton, FullscreenButton, AirPlayButton, Items, Root$3 as Root$1, Item, Root as Root$2, Img, Root$2 as Root$3, Button, Portal, Track, TrackFill, Thumb, Steps, useMediaPlayer, Root$5 as Root$4, useAudioOptions, useCaptionOptions, Root$4 as Root$8, Preview, Value, Root$1 as Root$9, Chapters, Progress, Thumbnail, ChapterTitle, Time, Gesture } from './vidstack-CQ3Bde2N.js';\nimport { useMediaState, isTrackCaptionKind, getDownloadFile, isRemotionSrc, IS_SERVER, useMediaContext as useMediaContext$1, sortVideoQualities, Primitive, mediaContext } from './vidstack-D5Pzx_k5.js';\nimport { flushSync } from 'react-dom';\nimport { RemotionThumbnail, RemotionSliderThumbnail } from './vidstack-vqp2QaHR.js';\n\nconst DefaultLayoutContext = React.createContext({});\nDefaultLayoutContext.displayName = \"DefaultLayoutContext\";\nfunction useDefaultLayoutContext() {\n return React.useContext(DefaultLayoutContext);\n}\nfunction useDefaultLayoutWord(word) {\n const { translations } = useDefaultLayoutContext();\n return i18n(translations, word);\n}\nfunction i18n(translations, word) {\n return translations?.[word] ?? word;\n}\n\nfunction useColorSchemeClass(colorScheme) {\n const systemColorPreference = useColorSchemePreference();\n if (colorScheme === \"default\") {\n return null;\n } else if (colorScheme === \"system\") {\n return systemColorPreference;\n } else {\n return colorScheme;\n }\n}\n\nfunction createDefaultMediaLayout({\n type,\n smLayoutWhen,\n renderLayout\n}) {\n const Layout = React.forwardRef(\n ({\n children,\n className,\n disableTimeSlider = false,\n hideQualityBitrate = false,\n icons,\n colorScheme = \"system\",\n download = null,\n menuContainer = null,\n menuGroup = \"bottom\",\n noAudioGain = false,\n audioGains = { min: 0, max: 300, step: 25 },\n noGestures = false,\n noKeyboardAnimations = false,\n noModal = false,\n noScrubGesture,\n playbackRates = { min: 0, max: 2, step: 0.25 },\n seekStep = 10,\n showMenuDelay,\n showTooltipDelay = 700,\n sliderChaptersMinWidth = 325,\n slots,\n smallLayoutWhen = smLayoutWhen,\n thumbnails = null,\n translations,\n ...props\n }, forwardRef) => {\n const media = useMediaContext(), $load = useSignal(media.$props.load), $canLoad = useMediaState(\"canLoad\"), $viewType = useMediaState(\"viewType\"), $streamType = useMediaState(\"streamType\"), $smallWhen = createComputed(() => {\n return isBoolean(smallLayoutWhen) ? smallLayoutWhen : smallLayoutWhen(media.player.state);\n }, [smallLayoutWhen]), userPrefersAnnouncements = createSignal(true), userPrefersKeyboardAnimations = createSignal(true), isMatch = $viewType === type, isSmallLayout = $smallWhen(), isForcedLayout = isBoolean(smallLayoutWhen), isLoadLayout = $load === \"play\" && !$canLoad, canRender = $canLoad || isForcedLayout || isLoadLayout, colorSchemeClass = useColorSchemeClass(colorScheme), layoutEl = createSignal(null);\n useSignal($smallWhen);\n return /* @__PURE__ */ React.createElement(\n \"div\",\n {\n ...props,\n className: `vds-${type}-layout` + (colorSchemeClass ? ` ${colorSchemeClass}` : \"\") + (className ? ` ${className}` : \"\"),\n \"data-match\": isMatch ? \"\" : null,\n \"data-sm\": isSmallLayout ? \"\" : null,\n \"data-lg\": !isSmallLayout ? \"\" : null,\n \"data-size\": isSmallLayout ? \"sm\" : \"lg\",\n \"data-no-scrub-gesture\": noScrubGesture ? \"\" : null,\n ref: composeRefs(layoutEl.set, forwardRef)\n },\n canRender && isMatch ? /* @__PURE__ */ React.createElement(\n DefaultLayoutContext.Provider,\n {\n value: {\n disableTimeSlider,\n hideQualityBitrate,\n icons,\n colorScheme,\n download,\n isSmallLayout,\n menuContainer,\n menuGroup,\n noAudioGain,\n audioGains,\n layoutEl,\n noGestures,\n noKeyboardAnimations,\n noModal,\n noScrubGesture,\n showMenuDelay,\n showTooltipDelay,\n sliderChaptersMinWidth,\n slots,\n seekStep,\n playbackRates,\n thumbnails,\n translations,\n userPrefersAnnouncements,\n userPrefersKeyboardAnimations\n }\n },\n renderLayout({ streamType: $streamType, isSmallLayout, isLoadLayout }),\n children\n ) : null\n );\n }\n );\n Layout.displayName = \"DefaultMediaLayout\";\n return Layout;\n}\n\nfunction useDefaultAudioLayoutSlots() {\n return React.useContext(DefaultLayoutContext).slots;\n}\nfunction useDefaultVideoLayoutSlots() {\n return React.useContext(DefaultLayoutContext).slots;\n}\nfunction slot(slots, name, defaultValue) {\n const slot2 = slots?.[name], capitalizedName = uppercaseFirstChar(name);\n return /* @__PURE__ */ React.createElement(React.Fragment, null, slots?.[`before${capitalizedName}`], isUndefined(slot2) ? defaultValue : slot2, slots?.[`after${capitalizedName}`]);\n}\n\nfunction DefaultAnnouncer() {\n const { userPrefersAnnouncements, translations } = useDefaultLayoutContext(), $userPrefersAnnouncements = useSignal(userPrefersAnnouncements);\n if (!$userPrefersAnnouncements) return null;\n return /* @__PURE__ */ React.createElement(MediaAnnouncer, { translations });\n}\nDefaultAnnouncer.displayName = \"DefaultAnnouncer\";\n\nfunction DefaultTooltip({ content, placement, children }) {\n const { showTooltipDelay } = useDefaultLayoutContext();\n return /* @__PURE__ */ React.createElement(Root, { showDelay: showTooltipDelay }, /* @__PURE__ */ React.createElement(Trigger, { asChild: true }, children), /* @__PURE__ */ React.createElement(Content, { className: \"vds-tooltip-content\", placement }, content));\n}\nDefaultTooltip.displayName = \"DefaultTooltip\";\n\nfunction DefaultPlayButton({ tooltip }) {\n const { icons: Icons } = useDefaultLayoutContext(), playText = useDefaultLayoutWord(\"Play\"), pauseText = useDefaultLayoutWord(\"Pause\"), $paused = useMediaState(\"paused\"), $ended = useMediaState(\"ended\");\n return /* @__PURE__ */ React.createElement(DefaultTooltip, { content: $paused ? playText : pauseText, placement: tooltip }, /* @__PURE__ */ React.createElement(PlayButton, { className: \"vds-play-button vds-button\", \"aria-label\": playText }, $ended ? /* @__PURE__ */ React.createElement(Icons.PlayButton.Replay, { className: \"vds-icon\" }) : $paused ? /* @__PURE__ */ React.createElement(Icons.PlayButton.Play, { className: \"vds-icon\" }) : /* @__PURE__ */ React.createElement(Icons.PlayButton.Pause, { className: \"vds-icon\" })));\n}\nDefaultPlayButton.displayName = \"DefaultPlayButton\";\nconst DefaultMuteButton = React.forwardRef(\n ({ tooltip }, forwardRef) => {\n const { icons: Icons } = useDefaultLayoutContext(), muteText = useDefaultLayoutWord(\"Mute\"), unmuteText = useDefaultLayoutWord(\"Unmute\"), $muted = useMediaState(\"muted\"), $volume = useMediaState(\"volume\");\n return /* @__PURE__ */ React.createElement(DefaultTooltip, { content: $muted ? unmuteText : muteText, placement: tooltip }, /* @__PURE__ */ React.createElement(MuteButton, { className: \"vds-mute-button vds-button\", \"aria-label\": muteText, ref: forwardRef }, $muted || $volume == 0 ? /* @__PURE__ */ React.createElement(Icons.MuteButton.Mute, { className: \"vds-icon\" }) : $volume < 0.5 ? /* @__PURE__ */ React.createElement(Icons.MuteButton.VolumeLow, { className: \"vds-icon\" }) : /* @__PURE__ */ React.createElement(Icons.MuteButton.VolumeHigh, { className: \"vds-icon\" })));\n }\n);\nDefaultMuteButton.displayName = \"DefaultMuteButton\";\nfunction DefaultCaptionButton({ tooltip }) {\n const { icons: Icons } = useDefaultLayoutContext(), captionsText = useDefaultLayoutWord(\"Captions\"), onText = useDefaultLayoutWord(\"Closed-Captions On\"), offText = useDefaultLayoutWord(\"Closed-Captions Off\"), $track = useMediaState(\"textTrack\"), isOn = $track && isTrackCaptionKind($track);\n return /* @__PURE__ */ React.createElement(DefaultTooltip, { content: isOn ? onText : offText, placement: tooltip }, /* @__PURE__ */ React.createElement(CaptionButton, { className: \"vds-caption-button vds-button\", \"aria-label\": captionsText }, isOn ? /* @__PURE__ */ React.createElement(Icons.CaptionButton.On, { className: \"vds-icon\" }) : /* @__PURE__ */ React.createElement(Icons.CaptionButton.Off, { className: \"vds-icon\" })));\n}\nDefaultCaptionButton.displayName = \"DefaultCaptionButton\";\nfunction DefaultPIPButton({ tooltip }) {\n const { icons: Icons } = useDefaultLayoutContext(), pipText = useDefaultLayoutWord(\"PiP\"), enterText = useDefaultLayoutWord(\"Enter PiP\"), exitText = useDefaultLayoutWord(\"Exit PiP\"), $pip = useMediaState(\"pictureInPicture\");\n return /* @__PURE__ */ React.createElement(DefaultTooltip, { content: $pip ? exitText : enterText, placement: tooltip }, /* @__PURE__ */ React.createElement(PIPButton, { className: \"vds-pip-button vds-button\", \"aria-label\": pipText }, $pip ? /* @__PURE__ */ React.createElement(Icons.PIPButton.Exit, { className: \"vds-icon\" }) : /* @__PURE__ */ React.createElement(Icons.PIPButton.Enter, { className: \"vds-icon\" })));\n}\nDefaultPIPButton.displayName = \"DefaultPIPButton\";\nfunction DefaultFullscreenButton({ tooltip }) {\n const { icons: Icons } = useDefaultLayoutContext(), fullscreenText = useDefaultLayoutWord(\"Fullscreen\"), enterText = useDefaultLayoutWord(\"Enter Fullscreen\"), exitText = useDefaultLayoutWord(\"Exit Fullscreen\"), $fullscreen = useMediaState(\"fullscreen\");\n return /* @__PURE__ */ React.createElement(DefaultTooltip, { content: $fullscreen ? exitText : enterText, placement: tooltip }, /* @__PURE__ */ React.createElement(FullscreenButton, { className: \"vds-fullscreen-button vds-button\", \"aria-label\": fullscreenText }, $fullscreen ? /* @__PURE__ */ React.createElement(Icons.FullscreenButton.Exit, { className: \"vds-icon\" }) : /* @__PURE__ */ React.createElement(Icons.FullscreenButton.Enter, { className: \"vds-icon\" })));\n}\nDefaultFullscreenButton.displayName = \"DefaultFullscreenButton\";\nfunction DefaultSeekButton({\n backward,\n tooltip\n}) {\n const { icons: Icons, seekStep } = useDefaultLayoutContext(), seekForwardText = useDefaultLayoutWord(\"Seek Forward\"), seekBackwardText = useDefaultLayoutWord(\"Seek Backward\"), seconds = (backward ? -1 : 1) * seekStep, label = seconds >= 0 ? seekForwardText : seekBackwardText;\n return /* @__PURE__ */ React.createElement(DefaultTooltip, { content: label, placement: tooltip }, /* @__PURE__ */ React.createElement(SeekButton, { className: \"vds-seek-button vds-button\", seconds, \"aria-label\": label }, seconds >= 0 ? /* @__PURE__ */ React.createElement(Icons.SeekButton.Forward, { className: \"vds-icon\" }) : /* @__PURE__ */ React.createElement(Icons.SeekButton.Backward, { className: \"vds-icon\" })));\n}\nDefaultSeekButton.displayName = \"DefaultSeekButton\";\nfunction DefaultAirPlayButton({ tooltip }) {\n const { icons: Icons } = useDefaultLayoutContext(), airPlayText = useDefaultLayoutWord(\"AirPlay\"), $state = useMediaState(\"remotePlaybackState\"), stateText = useDefaultLayoutWord(uppercaseFirstChar($state)), label = `${airPlayText} ${stateText}`, Icon = ($state === \"connecting\" ? Icons.AirPlayButton.Connecting : $state === \"connected\" ? Icons.AirPlayButton.Connected : null) ?? Icons.AirPlayButton.Default;\n return /* @__PURE__ */ React.createElement(DefaultTooltip, { content: airPlayText, placement: tooltip }, /* @__PURE__ */ React.createElement(AirPlayButton, { className: \"vds-airplay-button vds-button\", \"aria-label\": label }, /* @__PURE__ */ React.createElement(Icon, { className: \"vds-icon\" })));\n}\nDefaultAirPlayButton.displayName = \"DefaultAirPlayButton\";\nfunction DefaultGoogleCastButton({ tooltip }) {\n const { icons: Icons } = useDefaultLayoutContext(), googleCastText = useDefaultLayoutWord(\"Google Cast\"), $state = useMediaState(\"remotePlaybackState\"), stateText = useDefaultLayoutWord(uppercaseFirstChar($state)), label = `${googleCastText} ${stateText}`, Icon = ($state === \"connecting\" ? Icons.GoogleCastButton.Connecting : $state === \"connected\" ? Icons.GoogleCastButton.Connected : null) ?? Icons.GoogleCastButton.Default;\n return /* @__PURE__ */ React.createElement(DefaultTooltip, { content: googleCastText, placement: tooltip }, /* @__PURE__ */ React.createElement(GoogleCastButton, { className: \"vds-google-cast-button vds-button\", \"aria-label\": label }, /* @__PURE__ */ React.createElement(Icon, { className: \"vds-icon\" })));\n}\nDefaultGoogleCastButton.displayName = \"DefaultGoogleCastButton\";\nfunction DefaultLiveButton() {\n const $live = useMediaState(\"live\"), label = useDefaultLayoutWord(\"Skip To Live\"), liveText = useDefaultLayoutWord(\"LIVE\");\n return $live ? /* @__PURE__ */ React.createElement(LiveButton, { className: \"vds-live-button\", \"aria-label\": label }, /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-live-button-text\" }, liveText)) : null;\n}\nDefaultLiveButton.displayName = \"DefaultLiveButton\";\nfunction DefaultDownloadButton() {\n const { download, icons: Icons } = useDefaultLayoutContext(), $src = useMediaState(\"source\"), $title = useMediaState(\"title\"), file = getDownloadFile({\n title: $title,\n src: $src,\n download\n }), downloadText = useDefaultLayoutWord(\"Download\");\n return isString(file?.url) ? /* @__PURE__ */ React.createElement(DefaultTooltip, { content: downloadText, placement: \"top\" }, /* @__PURE__ */ React.createElement(\n \"a\",\n {\n role: \"button\",\n className: \"vds-download-button vds-button\",\n \"aria-label\": downloadText,\n href: appendParamsToURL(file.url, { download: file.name }),\n download: file.name,\n target: \"_blank\"\n },\n Icons.DownloadButton ? /* @__PURE__ */ React.createElement(Icons.DownloadButton.Default, { className: \"vds-icon\" }) : null\n )) : null;\n}\nDefaultDownloadButton.displayName = \"DefaultDownloadButton\";\n\nfunction DefaultCaptions() {\n const exampleText = useDefaultLayoutWord(\"Captions look like this\");\n return /* @__PURE__ */ React.createElement(Captions, { className: \"vds-captions\", exampleText });\n}\nDefaultCaptions.displayName = \"DefaultCaptions\";\n\nfunction DefaultControlsSpacer() {\n return /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-controls-spacer\" });\n}\nDefaultControlsSpacer.displayName = \"DefaultControlsSpacer\";\n\nfunction useParentDialogEl() {\n const { layoutEl } = useDefaultLayoutContext(), $layoutEl = useSignal(layoutEl);\n return React.useMemo(() => $layoutEl?.closest(\"dialog\"), [$layoutEl]);\n}\n\nfunction DefaultChaptersMenu({ tooltip, placement, portalClass = \"\" }) {\n const {\n showMenuDelay,\n noModal,\n isSmallLayout,\n icons: Icons,\n menuGroup,\n menuContainer,\n colorScheme\n } = useDefaultLayoutContext(), chaptersText = useDefaultLayoutWord(\"Chapters\"), options = useChapterOptions(), disabled = !options.length, { thumbnails } = useDefaultLayoutContext(), $src = useMediaState(\"currentSrc\"), $viewType = useMediaState(\"viewType\"), $offset = !isSmallLayout && menuGroup === \"bottom\" && $viewType === \"video\" ? 26 : 0, $RemotionThumbnail = useSignal(RemotionThumbnail), colorSchemeClass = useColorSchemeClass(colorScheme), [isOpen, setIsOpen] = React.useState(false), dialogEl = useParentDialogEl();\n if (disabled) return null;\n function onOpen() {\n flushSync(() => {\n setIsOpen(true);\n });\n }\n function onClose() {\n setIsOpen(false);\n }\n const Content = /* @__PURE__ */ React.createElement(\n Items,\n {\n className: \"vds-chapters-menu-items vds-menu-items\",\n placement,\n offset: $offset\n },\n isOpen ? /* @__PURE__ */ React.createElement(\n Root$1,\n {\n className: \"vds-chapters-radio-group vds-radio-group\",\n value: options.selectedValue,\n \"data-thumbnails\": thumbnails ? \"\" : null\n },\n options.map(\n ({ cue, label, value, startTimeText, durationText, select, setProgressVar }) => /* @__PURE__ */ React.createElement(\n Item,\n {\n className: \"vds-chapter-radio vds-radio\",\n value,\n key: value,\n onSelect: select,\n ref: setProgressVar\n },\n thumbnails ? /* @__PURE__ */ React.createElement(Root$2, { src: thumbnails, className: \"vds-thumbnail\", time: cue.startTime }, /* @__PURE__ */ React.createElement(Img, null)) : $RemotionThumbnail && isRemotionSrc($src) ? /* @__PURE__ */ React.createElement($RemotionThumbnail, { className: \"vds-thumbnail\", frame: cue.startTime * $src.fps }) : null,\n /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-chapter-radio-content\" }, /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-chapter-radio-label\" }, label), /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-chapter-radio-start-time\" }, startTimeText), /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-chapter-radio-duration\" }, durationText))\n )\n )\n ) : null\n );\n return /* @__PURE__ */ React.createElement(\n Root$3,\n {\n className: \"vds-chapters-menu vds-menu\",\n showDelay: showMenuDelay,\n onOpen,\n onClose\n },\n /* @__PURE__ */ React.createElement(DefaultTooltip, { content: chaptersText, placement: tooltip }, /* @__PURE__ */ React.createElement(\n Button,\n {\n className: \"vds-menu-button vds-button\",\n disabled,\n \"aria-label\": chaptersText\n },\n /* @__PURE__ */ React.createElement(Icons.Menu.Chapters, { className: \"vds-icon\" })\n )),\n noModal || !isSmallLayout ? Content : /* @__PURE__ */ React.createElement(\n Portal,\n {\n container: menuContainer ?? dialogEl,\n className: portalClass + (colorSchemeClass ? ` ${colorSchemeClass}` : \"\"),\n disabled: \"fullscreen\",\n \"data-sm\": isSmallLayout ? \"\" : null,\n \"data-lg\": !isSmallLayout ? \"\" : null,\n \"data-size\": isSmallLayout ? \"sm\" : \"lg\"\n },\n Content\n )\n );\n}\nDefaultChaptersMenu.displayName = \"DefaultChaptersMenu\";\n\nconst FONT_COLOR_OPTION = {\n type: \"color\"\n};\nconst FONT_FAMILY_OPTION = {\n type: \"radio\",\n values: {\n \"Monospaced Serif\": \"mono-serif\",\n \"Proportional Serif\": \"pro-serif\",\n \"Monospaced Sans-Serif\": \"mono-sans\",\n \"Proportional Sans-Serif\": \"pro-sans\",\n Casual: \"casual\",\n Cursive: \"cursive\",\n \"Small Capitals\": \"capitals\"\n }\n};\nconst FONT_SIZE_OPTION = {\n type: \"slider\",\n min: 0,\n max: 400,\n step: 25,\n upIcon: null,\n downIcon: null\n};\nconst FONT_OPACITY_OPTION = {\n type: \"slider\",\n min: 0,\n max: 100,\n step: 5,\n upIcon: null,\n downIcon: null\n};\nconst FONT_TEXT_SHADOW_OPTION = {\n type: \"radio\",\n values: [\"None\", \"Drop Shadow\", \"Raised\", \"Depressed\", \"Outline\"]\n};\nconst FONT_DEFAULTS = {\n fontFamily: \"pro-sans\",\n fontSize: \"100%\",\n textColor: \"#ffffff\",\n textOpacity: \"100%\",\n textShadow: \"none\",\n textBg: \"#000000\",\n textBgOpacity: \"100%\",\n displayBg: \"#000000\",\n displayBgOpacity: \"0%\"\n};\nconst FONT_SIGNALS = Object.keys(FONT_DEFAULTS).reduce(\n (prev, type) => ({\n ...prev,\n [type]: signal(FONT_DEFAULTS[type])\n }),\n {}\n);\nif (!IS_SERVER) {\n for (const type of Object.keys(FONT_SIGNALS)) {\n const value = localStorage.getItem(`vds-player:${camelToKebabCase(type)}`);\n if (isString(value)) FONT_SIGNALS[type].set(value);\n }\n}\nfunction onFontReset() {\n for (const type of Object.keys(FONT_SIGNALS)) {\n const defaultValue = FONT_DEFAULTS[type];\n FONT_SIGNALS[type].set(defaultValue);\n }\n}\n\nfunction hexToRgb(hex) {\n const { style } = new Option();\n style.color = hex;\n return style.color.match(/\\((.*?)\\)/)[1].replace(/,/g, \" \");\n}\n\nlet isWatchingVars = false, players = /* @__PURE__ */ new Set();\nfunction updateFontCssVars() {\n if (IS_SERVER) return;\n const { player } = useMediaContext$1();\n players.add(player);\n onDispose(() => players.delete(player));\n if (!isWatchingVars) {\n scoped(() => {\n for (const type of keysOf(FONT_SIGNALS)) {\n const $value = FONT_SIGNALS[type], defaultValue = FONT_DEFAULTS[type], varName = `--media-user-${camelToKebabCase(type)}`, storageKey = `vds-player:${camelToKebabCase(type)}`;\n effect(() => {\n const value = $value(), isDefaultVarValue = value === defaultValue, varValue = !isDefaultVarValue ? getCssVarValue(player, type, value) : null;\n for (const player2 of players) {\n player2.el?.style.setProperty(varName, varValue);\n }\n if (isDefaultVarValue) {\n localStorage.removeItem(storageKey);\n } else {\n localStorage.setItem(storageKey, value);\n }\n });\n }\n }, null);\n isWatchingVars = true;\n }\n}\nfunction getCssVarValue(player, type, value) {\n switch (type) {\n case \"fontFamily\":\n const fontVariant = value === \"capitals\" ? \"small-caps\" : \"\";\n player.el?.style.setProperty(\"--media-user-font-variant\", fontVariant);\n return getFontFamilyCSSVarValue(value);\n case \"fontSize\":\n case \"textOpacity\":\n case \"textBgOpacity\":\n case \"displayBgOpacity\":\n return percentToRatio(value);\n case \"textColor\":\n return `rgb(${hexToRgb(value)} / var(--media-user-text-opacity, 1))`;\n case \"textShadow\":\n return getTextShadowCssVarValue(value);\n case \"textBg\":\n return `rgb(${hexToRgb(value)} / var(--media-user-text-bg-opacity, 1))`;\n case \"displayBg\":\n return `rgb(${hexToRgb(value)} / var(--media-user-display-bg-opacity, 1))`;\n }\n}\nfunction percentToRatio(value) {\n return (parseInt(value) / 100).toString();\n}\nfunction getFontFamilyCSSVarValue(value) {\n switch (value) {\n case \"mono-serif\":\n return '\"Courier New\", Courier, \"Nimbus Mono L\", \"Cutive Mono\", monospace';\n case \"mono-sans\":\n return '\"Deja Vu Sans Mono\", \"Lucida Console\", Monaco, Consolas, \"PT Mono\", monospace';\n case \"pro-sans\":\n return 'Roboto, \"Arial Unicode Ms\", Arial, Helvetica, Verdana, \"PT Sans Caption\", sans-serif';\n case \"casual\":\n return '\"Comic Sans MS\", Impact, Handlee, fantasy';\n case \"cursive\":\n return '\"Monotype Corsiva\", \"URW Chancery L\", \"Apple Chancery\", \"Dancing Script\", cursive';\n case \"capitals\":\n return '\"Arial Unicode Ms\", Arial, Helvetica, Verdana, \"Marcellus SC\", sans-serif + font-variant=small-caps';\n default:\n return '\"Times New Roman\", Times, Georgia, Cambria, \"PT Serif Caption\", serif';\n }\n}\nfunction getTextShadowCssVarValue(value) {\n switch (value) {\n case \"drop shadow\":\n return \"rgb(34, 34, 34) 1.86389px 1.86389px 2.79583px, rgb(34, 34, 34) 1.86389px 1.86389px 3.72778px, rgb(34, 34, 34) 1.86389px 1.86389px 4.65972px\";\n case \"raised\":\n return \"rgb(34, 34, 34) 1px 1px, rgb(34, 34, 34) 2px 2px\";\n case \"depressed\":\n return \"rgb(204, 204, 204) 1px 1px, rgb(34, 34, 34) -1px -1px\";\n case \"outline\":\n return \"rgb(34, 34, 34) 0px 0px 1.86389px, rgb(34, 34, 34) 0px 0px 1.86389px, rgb(34, 34, 34) 0px 0px 1.86389px, rgb(34, 34, 34) 0px 0px 1.86389px, rgb(34, 34, 34) 0px 0px 1.86389px\";\n default:\n return \"\";\n }\n}\n\nfunction DefaultMenuSection({ label, value, children }) {\n const id = React.useId();\n if (!label) {\n return /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-section\" }, /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-section-body\" }, children));\n }\n return /* @__PURE__ */ React.createElement(\"section\", { className: \"vds-menu-section\", role: \"group\", \"aria-labelledby\": id }, /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-section-title\" }, /* @__PURE__ */ React.createElement(\"header\", { id }, label), value ? /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-section-value\" }, value) : null), /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-section-body\" }, children));\n}\nDefaultMenuSection.displayName = \"DefaultMenuSection\";\nfunction DefaultMenuButton({ label, hint = \"\", Icon, disabled = false }) {\n const { icons: Icons } = React.useContext(DefaultLayoutContext);\n return /* @__PURE__ */ React.createElement(Button, { className: \"vds-menu-item\", disabled }, /* @__PURE__ */ React.createElement(Icons.Menu.ArrowLeft, { className: \"vds-menu-close-icon vds-icon\" }), Icon ? /* @__PURE__ */ React.createElement(Icon, { className: \"vds-menu-item-icon vds-icon\" }) : null, /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-menu-item-label\" }, label), /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-menu-item-hint\" }, hint), /* @__PURE__ */ React.createElement(Icons.Menu.ArrowRight, { className: \"vds-menu-open-icon vds-icon\" }));\n}\nDefaultMenuButton.displayName = \"DefaultMenuButton\";\nfunction DefaultMenuItem({ label, children }) {\n return /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-item\" }, /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-item-label\" }, label), children);\n}\nDefaultMenuItem.displayName = \"DefaultMenuItem\";\nfunction DefaultMenuRadioGroup({ value, options, onChange }) {\n const { icons: Icons } = useDefaultLayoutContext();\n return /* @__PURE__ */ React.createElement(Root$1, { className: \"vds-radio-group\", value, onChange }, options.map((option) => /* @__PURE__ */ React.createElement(Item, { className: \"vds-radio\", value: option.value, key: option.value }, /* @__PURE__ */ React.createElement(Icons.Menu.RadioCheck, { className: \"vds-icon\" }), /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-radio-label\", \"data-part\": \"label\" }, option.label))));\n}\nDefaultMenuRadioGroup.displayName = \"DefaultMenuRadioGroup\";\nfunction createRadioOptions(entries) {\n return React.useMemo(\n () => isArray(entries) ? entries.map((entry) => ({ label: entry, value: entry.toLowerCase() })) : Object.keys(entries).map((label) => ({ label, value: entries[label] })),\n [entries]\n );\n}\n\nfunction DefaultMenuSliderItem({\n label,\n value,\n UpIcon,\n DownIcon,\n children,\n isMin,\n isMax\n}) {\n const hasTitle = label || value, Content = /* @__PURE__ */ React.createElement(React.Fragment, null, DownIcon ? /* @__PURE__ */ React.createElement(DownIcon, { className: \"vds-icon down\" }) : null, children, UpIcon ? /* @__PURE__ */ React.createElement(UpIcon, { className: \"vds-icon up\" }) : null);\n return /* @__PURE__ */ React.createElement(\n \"div\",\n {\n className: `vds-menu-item vds-menu-slider-item${hasTitle ? \" group\" : \"\"}`,\n \"data-min\": isMin ? \"\" : null,\n \"data-max\": isMax ? \"\" : null\n },\n hasTitle ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-slider-title\" }, label ? /* @__PURE__ */ React.createElement(\"div\", null, label) : null, value ? /* @__PURE__ */ React.createElement(\"div\", null, value) : null), /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-menu-slider-body\" }, Content)) : Content\n );\n}\nDefaultMenuSliderItem.displayName = \"DefaultMenuSliderItem\";\nfunction DefaultSliderParts() {\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Track, { className: \"vds-slider-track\" }), /* @__PURE__ */ React.createElement(TrackFill, { className: \"vds-slider-track-fill vds-slider-track\" }), /* @__PURE__ */ React.createElement(Thumb, { className: \"vds-slider-thumb\" }));\n}\nDefaultSliderParts.displayName = \"DefaultSliderParts\";\nfunction DefaultSliderSteps() {\n return /* @__PURE__ */ React.createElement(Steps, { className: \"vds-slider-steps\" }, (step) => /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-slider-step\", key: String(step) }));\n}\nDefaultSliderSteps.displayName = \"DefaultSliderSteps\";\n\nfunction DefaultFontMenu() {\n const label = useDefaultLayoutWord(\"Caption Styles\"), $hasCaptions = useMediaState(\"hasCaptions\"), fontSectionLabel = useDefaultLayoutWord(\"Font\"), textSectionLabel = useDefaultLayoutWord(\"Text\"), textBgSectionLabel = useDefaultLayoutWord(\"Text Background\"), displayBgSectionLabel = useDefaultLayoutWord(\"Display Background\");\n if (!$hasCaptions) return null;\n return /* @__PURE__ */ React.createElement(Root$3, { className: \"vds-font-menu vds-menu\" }, /* @__PURE__ */ React.createElement(DefaultMenuButton, { label }), /* @__PURE__ */ React.createElement(Items, { className: \"vds-font-style-items vds-menu-items\" }, /* @__PURE__ */ React.createElement(DefaultMenuSection, { label: fontSectionLabel }, /* @__PURE__ */ React.createElement(DefaultFontFamilyMenu, null), /* @__PURE__ */ React.createElement(DefaultFontSizeSlider, null)), /* @__PURE__ */ React.createElement(DefaultMenuSection, { label: textSectionLabel }, /* @__PURE__ */ React.createElement(DefaultTextColorInput, null), /* @__PURE__ */ React.createElement(DefaultTextShadowMenu, null), /* @__PURE__ */ React.createElement(DefaultTextOpacitySlider, null)), /* @__PURE__ */ React.createElement(DefaultMenuSection, { label: textBgSectionLabel }, /* @__PURE__ */ React.createElement(DefaultTextBgInput, null), /* @__PURE__ */ React.createElement(DefaultTextBgOpacitySlider, null)), /* @__PURE__ */ React.createElement(DefaultMenuSection, { label: displayBgSectionLabel }, /* @__PURE__ */ React.createElement(DefaultDisplayBgInput, null), /* @__PURE__ */ React.createElement(DefaultDisplayBgOpacitySlider, null)), /* @__PURE__ */ React.createElement(DefaultMenuSection, null, /* @__PURE__ */ React.createElement(DefaultResetMenuItem, null))));\n}\nDefaultFontMenu.displayName = \"DefaultFontMenu\";\nfunction DefaultFontFamilyMenu() {\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Family\", type: \"fontFamily\", option: FONT_FAMILY_OPTION });\n}\nDefaultFontFamilyMenu.displayName = \"DefaultFontFamilyMenu\";\nfunction DefaultFontSizeSlider() {\n const { icons: Icons } = useDefaultLayoutContext(), option = {\n ...FONT_SIZE_OPTION,\n upIcon: Icons.Menu.FontSizeUp,\n downIcon: Icons.Menu.FontSizeDown\n };\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Size\", type: \"fontSize\", option });\n}\nDefaultFontSizeSlider.displayName = \"DefaultFontSizeSlider\";\nfunction DefaultTextColorInput() {\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Color\", type: \"textColor\", option: FONT_COLOR_OPTION });\n}\nDefaultTextColorInput.displayName = \"DefaultTextColorInput\";\nfunction DefaultTextOpacitySlider() {\n const { icons: Icons } = useDefaultLayoutContext(), option = {\n ...FONT_OPACITY_OPTION,\n upIcon: Icons.Menu.OpacityUp,\n downIcon: Icons.Menu.OpacityDown\n };\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Opacity\", type: \"textOpacity\", option });\n}\nDefaultTextOpacitySlider.displayName = \"DefaultTextOpacitySlider\";\nfunction DefaultTextShadowMenu() {\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Shadow\", type: \"textShadow\", option: FONT_TEXT_SHADOW_OPTION });\n}\nDefaultTextShadowMenu.displayName = \"DefaultTextShadowMenu\";\nfunction DefaultTextBgInput() {\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Color\", type: \"textBg\", option: FONT_COLOR_OPTION });\n}\nDefaultTextBgInput.displayName = \"DefaultTextBgInput\";\nfunction DefaultTextBgOpacitySlider() {\n const { icons: Icons } = useDefaultLayoutContext(), option = {\n ...FONT_OPACITY_OPTION,\n upIcon: Icons.Menu.OpacityUp,\n downIcon: Icons.Menu.OpacityDown\n };\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Opacity\", type: \"textBgOpacity\", option });\n}\nDefaultTextBgOpacitySlider.displayName = \"DefaultTextBgOpacitySlider\";\nfunction DefaultDisplayBgInput() {\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Color\", type: \"displayBg\", option: FONT_COLOR_OPTION });\n}\nDefaultDisplayBgInput.displayName = \"DefaultDisplayBgInput\";\nfunction DefaultDisplayBgOpacitySlider() {\n const { icons: Icons } = useDefaultLayoutContext(), option = {\n ...FONT_OPACITY_OPTION,\n upIcon: Icons.Menu.OpacityUp,\n downIcon: Icons.Menu.OpacityDown\n };\n return /* @__PURE__ */ React.createElement(DefaultFontSetting, { label: \"Opacity\", type: \"displayBgOpacity\", option });\n}\nDefaultDisplayBgOpacitySlider.displayName = \"DefaultDisplayBgOpacitySlider\";\nfunction DefaultFontSetting({ label, option, type }) {\n const player = useMediaPlayer(), $currentValue = FONT_SIGNALS[type], $value = useSignal($currentValue), translatedLabel = useDefaultLayoutWord(label);\n const notify = React.useCallback(() => {\n player?.dispatchEvent(new Event(\"vds-font-change\"));\n }, [player]);\n const onChange = React.useCallback(\n (newValue) => {\n $currentValue.set(newValue);\n notify();\n },\n [$currentValue, notify]\n );\n if (option.type === \"color\") {\n let onColorChange2 = function(event) {\n onChange(event.target.value);\n };\n return /* @__PURE__ */ React.createElement(DefaultMenuItem, { label: translatedLabel }, /* @__PURE__ */ React.createElement(\"input\", { className: \"vds-color-picker\", type: \"color\", value: $value, onChange: onColorChange2 }));\n }\n if (option.type === \"slider\") {\n let onSliderValueChange2 = function(value) {\n onChange(value + \"%\");\n };\n const { min, max, step, upIcon, downIcon } = option;\n return /* @__PURE__ */ React.createElement(\n DefaultMenuSliderItem,\n {\n label: translatedLabel,\n value: $value,\n UpIcon: upIcon,\n DownIcon: downIcon,\n isMin: $value === min + \"%\",\n isMax: $value === max + \"%\"\n },\n /* @__PURE__ */ React.createElement(\n Root$4,\n {\n className: \"vds-slider\",\n min,\n max,\n step,\n keyStep: step,\n value: parseInt($value),\n \"aria-label\": translatedLabel,\n onValueChange: onSliderValueChange2,\n onDragValueChange: onSliderValueChange2\n },\n /* @__PURE__ */ React.createElement(DefaultSliderParts, null),\n /* @__PURE__ */ React.createElement(DefaultSliderSteps, null)\n )\n );\n }\n if (option.type === \"radio\") {\n return /* @__PURE__ */ React.createElement(\n DefaultFontRadioGroup,\n {\n id: camelToKebabCase(type),\n label: translatedLabel,\n value: $value,\n values: option.values,\n onChange\n }\n );\n }\n return null;\n}\nDefaultFontSetting.displayName = \"DefaultFontSetting\";\nfunction DefaultFontRadioGroup({ id, label, value, values, onChange }) {\n const radioOptions = createRadioOptions(values), { translations } = useDefaultLayoutContext(), hint = React.useMemo(() => {\n const label2 = radioOptions.find((radio) => radio.value === value)?.label || \"\";\n return i18n(translations, label2);\n }, [value, radioOptions]);\n return /* @__PURE__ */ React.createElement(Root$3, { className: `vds-${id}-menu vds-menu` }, /* @__PURE__ */ React.createElement(DefaultMenuButton, { label, hint }), /* @__PURE__ */ React.createElement(Items, { className: \"vds-menu-items\" }, /* @__PURE__ */ React.createElement(DefaultMenuRadioGroup, { value, options: radioOptions, onChange })));\n}\nDefaultFontRadioGroup.displayName = \"DefaultFontRadioGroup\";\nfunction DefaultResetMenuItem() {\n const resetText = useDefaultLayoutWord(\"Reset\");\n return /* @__PURE__ */ React.createElement(\"button\", { className: \"vds-menu-item\", role: \"menuitem\", onClick: onFontReset }, /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-menu-item-label\" }, resetText));\n}\nDefaultResetMenuItem.displayName = \"DefaultResetMenuItem\";\n\nfunction DefaultMenuCheckbox({\n label,\n checked,\n storageKey,\n defaultChecked = false,\n onChange\n}) {\n const [isChecked, setIsChecked] = React.useState(defaultChecked), [isActive, setIsActive] = React.useState(false);\n React.useEffect(() => {\n const savedValue = storageKey ? localStorage.getItem(storageKey) : null, checked2 = !!(savedValue ?? defaultChecked);\n setIsChecked(checked2);\n onChange?.(checked2);\n }, []);\n React.useEffect(() => {\n if (isBoolean(checked)) setIsChecked(checked);\n }, [checked]);\n function onPress(event) {\n if (event && \"button\" in event && event?.button === 1) return;\n const toggledCheck = !isChecked;\n setIsChecked(toggledCheck);\n if (storageKey) localStorage.setItem(storageKey, toggledCheck ? \"1\" : \"\");\n onChange?.(toggledCheck, event?.nativeEvent);\n setIsActive(false);\n }\n function onActive(event) {\n if (event.button !== 0) return;\n setIsActive(true);\n }\n function onKeyDown(event) {\n if (isKeyboardClick(event.nativeEvent)) onPress();\n }\n return /* @__PURE__ */ React.createElement(\n \"div\",\n {\n className: \"vds-menu-checkbox\",\n role: \"menuitemcheckbox\",\n tabIndex: 0,\n \"aria-label\": label,\n \"aria-checked\": isChecked ? \"true\" : \"false\",\n \"data-active\": isActive ? \"\" : null,\n onPointerUp: onPress,\n onPointerDown: onActive,\n onKeyDown\n }\n );\n}\nDefaultMenuCheckbox.displayName = \"DefaultMenuCheckbox\";\n\nfunction DefaultAccessibilityMenu({ slots }) {\n const label = useDefaultLayoutWord(\"Accessibility\"), { icons: Icons } = useDefaultLayoutContext();\n return /* @__PURE__ */ React.createElement(Root$3, { className: \"vds-accessibility-menu vds-menu\" }, /* @__PURE__ */ React.createElement(DefaultMenuButton, { label, Icon: Icons.Menu.Accessibility }), /* @__PURE__ */ React.createElement(Items, { className: \"vds-menu-items\" }, slot(slots, \"accessibilityMenuItemsStart\", null), /* @__PURE__ */ React.createElement(DefaultMenuSection, null, /* @__PURE__ */ React.createElement(DefaultAnnouncementsMenuCheckbox, null), /* @__PURE__ */ React.createElement(DefaultKeyboardAnimationsMenuCheckbox, null)), /* @__PURE__ */ React.createElement(DefaultMenuSection, null, /* @__PURE__ */ React.createElement(DefaultFontMenu, null)), slot(slots, \"accessibilityMenuItemsEnd\", null)));\n}\nDefaultAccessibilityMenu.displayName = \"DefaultAccessibilityMenu\";\nfunction DefaultAnnouncementsMenuCheckbox() {\n const { userPrefersAnnouncements } = useDefaultLayoutContext(), label = useDefaultLayoutWord(\"Announcements\");\n function onChange(checked) {\n userPrefersAnnouncements.set(checked);\n }\n return /* @__PURE__ */ React.createElement(DefaultMenuItem, { label }, /* @__PURE__ */ React.createElement(\n DefaultMenuCheckbox,\n {\n label,\n defaultChecked: true,\n storageKey: \"vds-player::announcements\",\n onChange\n }\n ));\n}\nDefaultAnnouncementsMenuCheckbox.displayName = \"DefaultAnnouncementsMenuCheckbox\";\nfunction DefaultKeyboardAnimationsMenuCheckbox() {\n const $viewType = useMediaState(\"viewType\"), { userPrefersKeyboardAnimations, noKeyboardAnimations } = useDefaultLayoutContext(), label = useDefaultLayoutWord(\"Keyboard Animations\");\n if ($viewType !== \"video\" || noKeyboardAnimations) return null;\n function onChange(checked) {\n userPrefersKeyboardAnimations.set(checked);\n }\n return /* @__PURE__ */ React.createElement(DefaultMenuItem, { label }, /* @__PURE__ */ React.createElement(\n DefaultMenuCheckbox,\n {\n label,\n defaultChecked: true,\n storageKey: \"vds-player::keyboard-animations\",\n onChange\n }\n ));\n}\nDefaultKeyboardAnimationsMenuCheckbox.displayName = \"DefaultKeyboardAnimationsMenuCheckbox\";\n\nfunction DefaultAudioMenu({ slots }) {\n const label = useDefaultLayoutWord(\"Audio\"), $canSetAudioGain = useMediaState(\"canSetAudioGain\"), $audioTracks = useMediaState(\"audioTracks\"), { noAudioGain, icons: Icons } = useDefaultLayoutContext(), hasGainSlider = $canSetAudioGain && !noAudioGain, $disabled = !hasGainSlider && $audioTracks.length <= 1;\n if ($disabled) return null;\n return /* @__PURE__ */ React.createElement(Root$3, { className: \"vds-audio-menu vds-menu\" }, /* @__PURE__ */ React.createElement(DefaultMenuButton, { label, Icon: Icons.Menu.Audio }), /* @__PURE__ */ React.createElement(Items, { className: \"vds-menu-items\" }, slot(slots, \"audioMenuItemsStart\", null), /* @__PURE__ */ React.createElement(DefaultAudioTracksMenu, null), hasGainSlider ? /* @__PURE__ */ React.createElement(DefaultAudioBoostMenuSection, null) : null, slot(slots, \"audioMenuItemsEnd\", null)));\n}\nDefaultAudioMenu.displayName = \"DefaultAudioMenu\";\nfunction DefaultAudioBoostMenuSection() {\n const $audioGain = useMediaState(\"audioGain\"), label = useDefaultLayoutWord(\"Boost\"), value = Math.round((($audioGain ?? 1) - 1) * 100) + \"%\", $canSetAudioGain = useMediaState(\"canSetAudioGain\"), { noAudioGain, icons: Icons } = useDefaultLayoutContext(), $disabled = !$canSetAudioGain || noAudioGain, min = useGainMin(), max = useGainMax();\n if ($disabled) return null;\n return /* @__PURE__ */ React.createElement(DefaultMenuSection, { label, value }, /* @__PURE__ */ React.createElement(\n DefaultMenuSliderItem,\n {\n UpIcon: Icons.Menu.AudioBoostUp,\n DownIcon: Icons.Menu.AudioBoostDown,\n isMin: (($audioGain ?? 1) - 1) * 100 <= min,\n isMax: (($audioGain ?? 1) - 1) * 100 === max\n },\n /* @__PURE__ */ React.createElement(DefaultAudioGainSlider, null)\n ));\n}\nDefaultAudioBoostMenuSection.displayName = \"DefaultAudioBoostMenuSection\";\nfunction useGainMin() {\n const { audioGains } = useDefaultLayoutContext(), min = isArray(audioGains) ? audioGains[0] : audioGains?.min;\n return min ?? 0;\n}\nfunction useGainMax() {\n const { audioGains } = useDefaultLayoutContext(), max = isArray(audioGains) ? audioGains[audioGains.length - 1] : audioGains?.max;\n return max ?? 300;\n}\nfunction useGainStep() {\n const { audioGains } = useDefaultLayoutContext(), step = isArray(audioGains) ? audioGains[1] - audioGains[0] : audioGains?.step;\n return step || 25;\n}\nfunction DefaultAudioGainSlider() {\n const label = useDefaultLayoutWord(\"Audio Boost\"), min = useGainMin(), max = useGainMax(), step = useGainStep();\n return /* @__PURE__ */ React.createElement(\n Root$5,\n {\n className: \"vds-audio-gain-slider vds-slider\",\n \"aria-label\": label,\n min,\n max,\n step,\n keyStep: step\n },\n /* @__PURE__ */ React.createElement(DefaultSliderParts, null),\n /* @__PURE__ */ React.createElement(DefaultSliderSteps, null)\n );\n}\nDefaultAudioGainSlider.displayName = \"DefaultAudioGainSlider\";\nfunction DefaultAudioTracksMenu() {\n const { icons: Icons } = useDefaultLayoutContext(), label = useDefaultLayoutWord(\"Track\"), defaultText = useDefaultLayoutWord(\"Default\"), $track = useMediaState(\"audioTrack\"), options = useAudioOptions();\n if (options.disabled) return null;\n return /* @__PURE__ */ React.createElement(Root$3, { className: \"vds-audio-track-menu vds-menu\" }, /* @__PURE__ */ React.createElement(\n DefaultMenuButton,\n {\n label,\n hint: $track?.label ?? defaultText,\n disabled: options.disabled,\n Icon: Icons.Menu.Audio\n }\n ), /* @__PURE__ */ React.createElement(Items, { className: \"vds-menu-items\" }, /* @__PURE__ */ React.createElement(\n Root$1,\n {\n className: \"vds-audio-radio-group vds-radio-group\",\n value: options.selectedValue\n },\n options.map(({ label: label2, value, select }) => /* @__PURE__ */ React.createElement(\n Item,\n {\n className: \"vds-audio-radio vds-radio\",\n value,\n onSelect: select,\n key: value\n },\n /* @__PURE__ */ React.createElement(Icons.Menu.RadioCheck, { className: \"vds-icon\" }),\n /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-radio-label\" }, label2)\n ))\n )));\n}\nDefaultAudioTracksMenu.displayName = \"DefaultAudioTracksMenu\";\n\nfunction DefaultCaptionMenu({ slots }) {\n const { icons: Icons } = useDefaultLayoutContext(), label = useDefaultLayoutWord(\"Captions\"), offText = useDefaultLayoutWord(\"Off\"), options = useCaptionOptions({ off: offText }), hint = options.selectedTrack?.label ?? offText;\n if (options.disabled) return null;\n return /* @__PURE__ */ React.createElement(Root$3, { className: \"vds-captions-menu vds-menu\" }, /* @__PURE__ */ React.createElement(\n DefaultMenuButton,\n {\n label,\n hint,\n disabled: options.disabled,\n Icon: Icons.Menu.Captions\n }\n ), /* @__PURE__ */ React.createElement(Items, { className: \"vds-menu-items\" }, slot(slots, \"captionsMenuItemsStart\", null), /* @__PURE__ */ React.createElement(\n Root$1,\n {\n className: \"vds-captions-radio-group vds-radio-group\",\n value: options.selectedValue\n },\n options.map(({ label: label2, value, select }) => /* @__PURE__ */ React.createElement(\n Item,\n {\n className: \"vds-caption-radio vds-radio\",\n value,\n onSelect: select,\n key: value\n },\n /* @__PURE__ */ React.createElement(Icons.Menu.RadioCheck, { className: \"vds-icon\" }),\n /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-radio-label\" }, label2)\n ))\n ), slot(slots, \"captionsMenuItemsEnd\", null)));\n}\nDefaultCaptionMenu.displayName = \"DefaultCaptionMenu\";\n\nfunction DefaultPlaybackMenu({ slots }) {\n const label = useDefaultLayoutWord(\"Playback\"), { icons: Icons } = useDefaultLayoutContext();\n return /* @__PURE__ */ React.createElement(Root$3, { className: \"vds-playback-menu vds-menu\" }, /* @__PURE__ */ React.createElement(DefaultMenuButton, { label, Icon: Icons.Menu.Playback }), /* @__PURE__ */ React.createElement(Items, { className: \"vds-menu-items\" }, slot(slots, \"playbackMenuItemsStart\", null), /* @__PURE__ */ React.createElement(DefaultMenuSection, null, slot(slots, \"playbackMenuLoop\", /* @__PURE__ */ React.createElement(DefaultLoopMenuCheckbox, null))), /* @__PURE__ */ React.createElement(DefaultSpeedMenuSection, null), /* @__PURE__ */ React.createElement(DefaultQualityMenuSection, null), slot(slots, \"playbackMenuItemsEnd\", null)));\n}\nDefaultPlaybackMenu.displayName = \"DefaultPlaybackMenu\";\nfunction DefaultLoopMenuCheckbox() {\n const { remote } = useMediaContext(), label = useDefaultLayoutWord(\"Loop\");\n function onChange(checked, trigger) {\n remote.userPrefersLoopChange(checked, trigger);\n }\n return /* @__PURE__ */ React.createElement(DefaultMenuItem, { label }, /* @__PURE__ */ React.createElement(DefaultMenuCheckbox, { label, storageKey: \"vds-player::user-loop\", onChange }));\n}\nDefaultLoopMenuCheckbox.displayName = \"DefaultLoopMenuCheckbox\";\nfunction DefaultAutoQualityMenuCheckbox() {\n const { remote, qualities } = useMediaContext(), $autoQuality = useMediaState(\"autoQuality\"), label = useDefaultLayoutWord(\"Auto\");\n function onChange(checked, trigger) {\n if (checked) {\n remote.requestAutoQuality(trigger);\n } else {\n remote.changeQuality(qualities.selectedIndex, trigger);\n }\n }\n return /* @__PURE__ */ React.createElement(DefaultMenuItem, { label }, /* @__PURE__ */ React.createElement(\n DefaultMenuCheckbox,\n {\n label,\n checked: $autoQuality,\n onChange,\n defaultChecked: $autoQuality\n }\n ));\n}\nDefaultAutoQualityMenuCheckbox.displayName = \"DefaultAutoQualityMenuCheckbox\";\nfunction DefaultQualityMenuSection() {\n const { hideQualityBitrate, icons: Icons } = useDefaultLayoutContext(), $canSetQuality = useMediaState(\"canSetQuality\"), $qualities = useMediaState(\"qualities\"), $quality = useMediaState(\"quality\"), label = useDefaultLayoutWord(\"Quality\"), autoText = useDefaultLayoutWord(\"Auto\"), sortedQualities = React.useMemo(() => sortVideoQualities($qualities), [$qualities]);\n if (!$canSetQuality || $qualities.length <= 1) return null;\n const height = $quality?.height, bitrate = !hideQualityBitrate ? $quality?.bitrate : null, bitrateText = bitrate && bitrate > 0 ? `${(bitrate / 1e6).toFixed(2)} Mbps` : null, value = height ? `${height}p${bitrateText ? ` (${bitrateText})` : \"\"}` : autoText, isMin = sortedQualities[0] === $quality, isMax = sortedQualities.at(-1) === $quality;\n return /* @__PURE__ */ React.createElement(DefaultMenuSection, { label, value }, /* @__PURE__ */ React.createElement(\n DefaultMenuSliderItem,\n {\n UpIcon: Icons.Menu.QualityUp,\n DownIcon: Icons.Menu.QualityDown,\n isMin,\n isMax\n },\n /* @__PURE__ */ React.createElement(DefaultQualitySlider, null)\n ), /* @__PURE__ */ React.createElement(DefaultAutoQualityMenuCheckbox, null));\n}\nDefaultQualityMenuSection.displayName = \"DefaultQualityMenuSection\";\nfunction DefaultQualitySlider() {\n const label = useDefaultLayoutWord(\"Quality\");\n return /* @__PURE__ */ React.createElement(Root$7, { className: \"vds-quality-slider vds-slider\", \"aria-label\": label }, /* @__PURE__ */ React.createElement(DefaultSliderParts, null), /* @__PURE__ */ React.createElement(DefaultSliderSteps, null));\n}\nDefaultQualitySlider.displayName = \"DefaultQualitySlider\";\nfunction DefaultSpeedMenuSection() {\n const { icons: Icons } = useDefaultLayoutContext(), $playbackRate = useMediaState(\"playbackRate\"), $canSetPlaybackRate = useMediaState(\"canSetPlaybackRate\"), label = useDefaultLayoutWord(\"Speed\"), normalText = useDefaultLayoutWord(\"Normal\"), min = useSpeedMin(), max = useSpeedMax(), value = $playbackRate === 1 ? normalText : $playbackRate + \"x\";\n if (!$canSetPlaybackRate) return null;\n return /* @__PURE__ */ React.createElement(DefaultMenuSection, { label, value }, /* @__PURE__ */ React.createElement(\n DefaultMenuSliderItem,\n {\n UpIcon: Icons.Menu.SpeedUp,\n DownIcon: Icons.Menu.SpeedDown,\n isMin: $playbackRate === min,\n isMax: $playbackRate === max\n },\n /* @__PURE__ */ React.createElement(DefaultSpeedSlider, null)\n ));\n}\nfunction useSpeedMin() {\n const { playbackRates } = useDefaultLayoutContext(), rates = playbackRates;\n return (isArray(rates) ? rates[0] : rates?.min) ?? 0;\n}\nfunction useSpeedMax() {\n const { playbackRates } = useDefaultLayoutContext(), rates = playbackRates;\n return (isArray(rates) ? rates[rates.length - 1] : rates?.max) ?? 2;\n}\nfunction useSpeedStep() {\n const { playbackRates } = useDefaultLayoutContext(), rates = playbackRates;\n return (isArray(rates) ? rates[1] - rates[0] : rates?.step) || 0.25;\n}\nfunction DefaultSpeedSlider() {\n const label = useDefaultLayoutWord(\"Speed\"), min = useSpeedMin(), max = useSpeedMax(), step = useSpeedStep();\n return /* @__PURE__ */ React.createElement(\n Root$6,\n {\n className: \"vds-speed-slider vds-slider\",\n \"aria-label\": label,\n min,\n max,\n step,\n keyStep: step\n },\n /* @__PURE__ */ React.createElement(DefaultSliderParts, null),\n /* @__PURE__ */ React.createElement(DefaultSliderSteps, null)\n );\n}\nDefaultSpeedSlider.displayName = \"DefaultSpeedSlider\";\n\nfunction DefaultSettingsMenu({\n tooltip,\n placement,\n portalClass = \"\",\n slots\n}) {\n const {\n showMenuDelay,\n icons: Icons,\n isSmallLayout,\n menuContainer,\n menuGroup,\n noModal,\n colorScheme\n } = useDefaultLayoutContext(), settingsText = useDefaultLayoutWord(\"Settings\"), $viewType = useMediaState(\"viewType\"), $offset = !isSmallLayout && menuGroup === \"bottom\" && $viewType === \"video\" ? 26 : 0, colorSchemeClass = useColorSchemeClass(colorScheme), [isOpen, setIsOpen] = React.useState(false), dialogEl = useParentDialogEl();\n useScoped(updateFontCssVars);\n function onOpen() {\n flushSync(() => {\n setIsOpen(true);\n });\n }\n function onClose() {\n setIsOpen(false);\n }\n const Content = /* @__PURE__ */ React.createElement(\n Items,\n {\n className: \"vds-settings-menu-items vds-menu-items\",\n placement,\n offset: $offset\n },\n isOpen ? /* @__PURE__ */ React.createElement(React.Fragment, null, slot(slots, \"settingsMenuItemsStart\", null), slot(slots, \"settingsMenuStartItems\", null), /* @__PURE__ */ React.createElement(DefaultPlaybackMenu, { slots }), /* @__PURE__ */ React.createElement(DefaultAccessibilityMenu, { slots }), /* @__PURE__ */ React.createElement(DefaultAudioMenu, { slots }), /* @__PURE__ */ React.createElement(DefaultCaptionMenu, { slots }), slot(slots, \"settingsMenuEndItems\", null), slot(slots, \"settingsMenuItemsEnd\", null)) : null\n );\n return /* @__PURE__ */ React.createElement(\n Root$3,\n {\n className: \"vds-settings-menu vds-menu\",\n showDelay: showMenuDelay,\n onOpen,\n onClose\n },\n /* @__PURE__ */ React.createElement(DefaultTooltip, { content: settingsText, placement: tooltip }, /* @__PURE__ */ React.createElement(Button, { className: \"vds-menu-button vds-button\", \"aria-label\": settingsText }, /* @__PURE__ */ React.createElement(Icons.Menu.Settings, { className: \"vds-icon vds-rotate-icon\" }))),\n noModal || !isSmallLayout ? Content : /* @__PURE__ */ React.createElement(\n Portal,\n {\n className: portalClass + (colorSchemeClass ? ` ${colorSchemeClass}` : \"\"),\n container: menuContainer ?? dialogEl,\n disabled: \"fullscreen\",\n \"data-sm\": isSmallLayout ? \"\" : null,\n \"data-lg\": !isSmallLayout ? \"\" : null,\n \"data-size\": isSmallLayout ? \"sm\" : \"lg\",\n \"data-view-type\": $viewType\n },\n Content\n )\n );\n}\nDefaultSettingsMenu.displayName = \"DefaultSettingsMenu\";\n\nfunction DefaultVolumePopup({ tooltip, orientation, slots }) {\n const $pointer = useMediaState(\"pointer\"), $muted = useMediaState(\"muted\"), $canSetVolume = useMediaState(\"canSetVolume\"), [rootEl, setRootEl] = React.useState(null), isRootActive = useActive(rootEl), muteButton = slot(slots, \"muteButton\", /* @__PURE__ */ React.createElement(DefaultMuteButton, { tooltip }));\n if (!$canSetVolume) {\n return muteButton;\n }\n return $pointer === \"coarse\" && !$muted ? null : /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-volume\", \"data-active\": isRootActive ? \"\" : null, ref: setRootEl }, muteButton, /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-volume-popup\" }, slot(slots, \"volumeSlider\", /* @__PURE__ */ React.createElement(DefaultVolumeSlider, { orientation }))));\n}\nDefaultVolumePopup.displayName = \"DefaultVolumePopup\";\nfunction DefaultVolumeSlider(props) {\n const label = useDefaultLayoutWord(\"Volume\");\n return /* @__PURE__ */ React.createElement(Root$8, { className: \"vds-volume-slider vds-slider\", \"aria-label\": label, ...props }, /* @__PURE__ */ React.createElement(Track, { className: \"vds-slider-track\" }), /* @__PURE__ */ React.createElement(TrackFill, { className: \"vds-slider-track-fill vds-slider-track\" }), /* @__PURE__ */ React.createElement(Thumb, { className: \"vds-slider-thumb\" }), /* @__PURE__ */ React.createElement(Preview, { className: \"vds-slider-preview\", noClamp: true }, /* @__PURE__ */ React.createElement(Value, { className: \"vds-slider-value\" })));\n}\nDefaultVolumeSlider.displayName = \"DefaultVolumeSlider\";\nfunction DefaultTimeSlider() {\n const [instance, setInstance] = React.useState(null), [width, setWidth] = React.useState(0), $src = useMediaState(\"currentSrc\"), { thumbnails, sliderChaptersMinWidth, disableTimeSlider, seekStep, noScrubGesture } = useDefaultLayoutContext(), label = useDefaultLayoutWord(\"Seek\"), $RemotionSliderThumbnail = useSignal(RemotionSliderThumbnail);\n const onResize = React.useCallback(() => {\n const el = instance?.el;\n el && setWidth(el.clientWidth);\n }, [instance]);\n useResizeObserver(instance?.el, onResize);\n return /* @__PURE__ */ React.createElement(\n Root$9,\n {\n className: \"vds-time-slider vds-slider\",\n \"aria-label\": label,\n disabled: disableTimeSlider,\n noSwipeGesture: noScrubGesture,\n keyStep: seekStep,\n ref: setInstance\n },\n /* @__PURE__ */ React.createElement(\n Chapters,\n {\n className: \"vds-slider-chapters\",\n disabled: width < sliderChaptersMinWidth\n },\n (cues, forwardRef) => cues.map((cue) => /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-slider-chapter\", key: cue.startTime, ref: forwardRef }, /* @__PURE__ */ React.createElement(Track, { className: \"vds-slider-track\" }), /* @__PURE__ */ React.createElement(TrackFill, { className: \"vds-slider-track-fill vds-slider-track\" }), /* @__PURE__ */ React.createElement(Progress, { className: \"vds-slider-progress vds-slider-track\" })))\n ),\n /* @__PURE__ */ React.createElement(Thumb, { className: \"vds-slider-thumb\" }),\n /* @__PURE__ */ React.createElement(Preview, { className: \"vds-slider-preview\" }, thumbnails ? /* @__PURE__ */ React.createElement(\n Thumbnail.Root,\n {\n src: thumbnails,\n className: \"vds-slider-thumbnail vds-thumbnail\"\n },\n /* @__PURE__ */ React.createElement(Thumbnail.Img, null)\n ) : $RemotionSliderThumbnail && isRemotionSrc($src) ? /* @__PURE__ */ React.createElement($RemotionSliderThumbnail, { className: \"vds-slider-thumbnail vds-thumbnail\" }) : null, /* @__PURE__ */ React.createElement(ChapterTitle, { className: \"vds-slider-chapter-title\" }), /* @__PURE__ */ React.createElement(Value, { className: \"vds-slider-value\" }))\n );\n}\nDefaultTimeSlider.displayName = \"DefaultTimeSlider\";\n\nfunction DefaultTimeGroup({ slots }) {\n const $duration = useMediaState(\"duration\");\n if (!$duration) return null;\n return /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-time-group\" }, slot(slots, \"currentTime\", /* @__PURE__ */ React.createElement(Time, { className: \"vds-time\", type: \"current\" })), slot(slots, \"timeDivider\", /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-time-divider\" }, \"/\")), slot(slots, \"endTime\", /* @__PURE__ */ React.createElement(Time, { className: \"vds-time\", type: \"duration\" })));\n}\nDefaultTimeGroup.displayName = \"DefaultTimeGroup\";\nfunction DefaultTimeInfo({ slots }) {\n const $live = useMediaState(\"live\");\n return $live ? slot(slots, \"liveButton\", /* @__PURE__ */ React.createElement(DefaultLiveButton, null)) : /* @__PURE__ */ React.createElement(DefaultTimeGroup, { slots });\n}\nDefaultTimeInfo.displayName = \"DefaultTimeInfo\";\nfunction DefaultTimeInvert({ slots }) {\n const $live = useMediaState(\"live\"), $duration = useMediaState(\"duration\");\n return $live ? slot(slots, \"liveButton\", /* @__PURE__ */ React.createElement(DefaultLiveButton, null)) : slot(\n slots,\n \"endTime\",\n $duration ? /* @__PURE__ */ React.createElement(Time, { className: \"vds-time\", type: \"current\", toggle: true, remainder: true }) : null\n );\n}\nDefaultTimeInvert.displayName = \"DefaultTimeInvert\";\n\nconst MediaLayout$1 = createDefaultMediaLayout({\n type: \"audio\",\n smLayoutWhen({ width }) {\n return width < 576;\n },\n renderLayout: () => /* @__PURE__ */ React.createElement(AudioLayout, null)\n});\nfunction DefaultAudioLayout(props) {\n const [scrubbing, setScrubbing] = React.useState(false), $pointer = useMediaState(\"pointer\");\n const onStartScrubbing = React.useCallback((event) => {\n const { target } = event, hasTimeSlider = !!(target instanceof HTMLElement && target.closest(\".vds-time-slider\"));\n if (!hasTimeSlider) return;\n event.nativeEvent.stopImmediatePropagation();\n setScrubbing(true);\n }, []);\n const onStopScrubbing = React.useCallback(() => {\n setScrubbing(false);\n }, []);\n React.useEffect(() => {\n if (scrubbing) return listenEvent(window, \"pointerdown\", onStopScrubbing);\n }, [scrubbing, onStopScrubbing]);\n return /* @__PURE__ */ React.createElement(\n MediaLayout$1,\n {\n ...props,\n \"data-scrubbing\": scrubbing ? \"\" : null,\n onPointerDown: scrubbing ? (e) => e.stopPropagation() : void 0,\n onPointerDownCapture: $pointer === \"coarse\" && !scrubbing ? onStartScrubbing : void 0\n }\n );\n}\nDefaultAudioLayout.displayName = \"DefaultAudioLayout\";\nfunction AudioLayout() {\n const slots = useDefaultAudioLayoutSlots();\n useLayoutName(\"audio\");\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(DefaultAnnouncer, null), /* @__PURE__ */ React.createElement(DefaultCaptions, null), /* @__PURE__ */ React.createElement(Root$a, { className: \"vds-controls\" }, /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\" }, slot(slots, \"seekBackwardButton\", /* @__PURE__ */ React.createElement(DefaultSeekButton, { backward: true, tooltip: \"top start\" })), slot(slots, \"playButton\", /* @__PURE__ */ React.createElement(DefaultPlayButton, { tooltip: \"top center\" })), slot(slots, \"seekForwardButton\", /* @__PURE__ */ React.createElement(DefaultSeekButton, { tooltip: \"top center\" })), /* @__PURE__ */ React.createElement(DefaultAudioTitle, null), slot(slots, \"timeSlider\", /* @__PURE__ */ React.createElement(DefaultTimeSlider, null)), /* @__PURE__ */ React.createElement(DefaultTimeInvert, { slots }), /* @__PURE__ */ React.createElement(DefaultVolumePopup, { orientation: \"vertical\", tooltip: \"top\", slots }), slot(slots, \"captionButton\", /* @__PURE__ */ React.createElement(DefaultCaptionButton, { tooltip: \"top center\" })), slot(slots, \"downloadButton\", /* @__PURE__ */ React.createElement(DefaultDownloadButton, null)), /* @__PURE__ */ React.createElement(DefaultAudioMenus, { slots }))));\n}\nAudioLayout.displayName = \"AudioLayout\";\nfunction DefaultAudioMenus({ slots }) {\n const { isSmallLayout, noModal } = useDefaultLayoutContext(), placement = noModal ? \"top end\" : !isSmallLayout ? \"top end\" : null;\n return /* @__PURE__ */ React.createElement(React.Fragment, null, slot(\n slots,\n \"chaptersMenu\",\n /* @__PURE__ */ React.createElement(DefaultChaptersMenu, { tooltip: \"top\", placement, portalClass: \"vds-audio-layout\" })\n ), slot(\n slots,\n \"settingsMenu\",\n /* @__PURE__ */ React.createElement(\n DefaultSettingsMenu,\n {\n tooltip: \"top end\",\n placement,\n portalClass: \"vds-audio-layout\",\n slots\n }\n )\n ));\n}\nDefaultAudioMenus.displayName = \"DefaultAudioMenus\";\nfunction DefaultAudioTitle() {\n const [rootEl, setRootEl] = React.useState(null), media = useMediaContext(), { translations } = useDefaultLayoutContext(), [isTextOverflowing, setIsTextOverflowing] = React.useState(false);\n const isContinued = createComputed(() => {\n const { started, currentTime } = media.$state;\n return started() || currentTime() > 0;\n });\n const $title = useSignal(\n createComputed(() => {\n const { title, ended } = media.$state;\n if (!title()) return \"\";\n const word = ended() ? \"Replay\" : isContinued() ? \"Continue\" : \"Play\";\n return `${i18n(translations, word)}: ${title()}`;\n })\n );\n const chapterTitle = useChapterTitle(), $isContinued = useSignal(isContinued), $chapterTitle = $isContinued ? chapterTitle : \"\", isTransitionActive = useTransitionActive(rootEl);\n React.useEffect(() => {\n if (isTransitionActive && document.activeElement === document.body) {\n media.player.el?.focus({ preventScroll: true });\n }\n }, []);\n const onResize = React.useCallback(() => {\n const el = rootEl, isOverflowing = !!el && !isTransitionActive && el.clientWidth < el.children[0].clientWidth;\n if (el) toggleClass(el, \"vds-marquee\", isOverflowing);\n setIsTextOverflowing(isOverflowing);\n }, [rootEl, isTransitionActive]);\n useResizeObserver(rootEl, onResize);\n return $title ? /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-title\", title: $title, ref: setRootEl }, /* @__PURE__ */ React.createElement(AudioTitle, { title: $title, chapterTitle: $chapterTitle }), isTextOverflowing && !isTransitionActive ? /* @__PURE__ */ React.createElement(AudioTitle, { title: $title, chapterTitle: $chapterTitle }) : null) : /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null);\n}\nDefaultAudioTitle.displayName = \"DefaultAudioTitle\";\nfunction AudioTitle({ title, chapterTitle }) {\n const slots = useDefaultAudioLayoutSlots();\n return /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-title-text\" }, slot(slots, \"title\", title), slot(slots, \"chapterTitle\", /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-chapter-title\" }, chapterTitle)));\n}\nAudioTitle.displayName = \"AudioTitle\";\n\nconst DefaultKeyboardDisplay = React.forwardRef(\n ({ icons: Icons, ...props }, forwardRef) => {\n const [visible, setVisible] = React.useState(false), [Icon, setIcon] = React.useState(null), [count, setCount] = React.useState(0), $lastKeyboardAction = useMediaState(\"lastKeyboardAction\");\n React.useEffect(() => {\n setCount((n) => n + 1);\n }, [$lastKeyboardAction]);\n const actionDataAttr = React.useMemo(() => {\n const action = $lastKeyboardAction?.action;\n return action && visible ? camelToKebabCase(action) : null;\n }, [visible, $lastKeyboardAction]);\n const className = React.useMemo(\n () => `vds-kb-action${!visible ? \" hidden\" : \"\"}${props.className ? ` ${props.className}` : \"\"}`,\n [visible]\n );\n const $$text = createComputed(getText), $text = useSignal($$text);\n createEffect(() => {\n const Icon2 = getIcon(Icons);\n setIcon(() => Icon2);\n }, [Icons]);\n React.useEffect(() => {\n setVisible(!!$lastKeyboardAction);\n const id = setTimeout(() => setVisible(false), 500);\n return () => {\n setVisible(false);\n window.clearTimeout(id);\n };\n }, [$lastKeyboardAction]);\n return Icon ? /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n ...props,\n className,\n \"data-action\": actionDataAttr,\n ref: forwardRef\n },\n /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-kb-text-wrapper\" }, /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-kb-text\" }, $text)),\n /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-kb-bezel\", key: count }, /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-kb-icon\" }, /* @__PURE__ */ React.createElement(Icon, null)))\n ) : null;\n }\n);\nDefaultKeyboardDisplay.displayName = \"DefaultKeyboardDisplay\";\nfunction getText() {\n const { $state } = useContext(mediaContext), action = $state.lastKeyboardAction()?.action, audioGain = $state.audioGain() ?? 1;\n switch (action) {\n case \"toggleMuted\":\n return $state.muted() ? \"0%\" : getVolumeText($state.volume(), audioGain);\n case \"volumeUp\":\n case \"volumeDown\":\n return getVolumeText($state.volume(), audioGain);\n default:\n return \"\";\n }\n}\nfunction getVolumeText(volume, gain) {\n return `${Math.round(volume * gain * 100)}%`;\n}\nfunction getIcon(Icons) {\n const { $state } = useContext(mediaContext), action = $state.lastKeyboardAction()?.action;\n switch (action) {\n case \"togglePaused\":\n return !$state.paused() ? Icons.Play : Icons.Pause;\n case \"toggleMuted\":\n return $state.muted() || $state.volume() === 0 ? Icons.Mute : $state.volume() >= 0.5 ? Icons.VolumeUp : Icons.VolumeDown;\n case \"toggleFullscreen\":\n return $state.fullscreen() ? Icons.EnterFullscreen : Icons.ExitFullscreen;\n case \"togglePictureInPicture\":\n return $state.pictureInPicture() ? Icons.EnterPiP : Icons.ExitPiP;\n case \"toggleCaptions\":\n return $state.hasCaptions() ? $state.textTrack() ? Icons.CaptionsOn : Icons.CaptionsOff : null;\n case \"volumeUp\":\n return Icons.VolumeUp;\n case \"volumeDown\":\n return Icons.VolumeDown;\n case \"seekForward\":\n return Icons.SeekForward;\n case \"seekBackward\":\n return Icons.SeekBackward;\n default:\n return null;\n }\n}\n\nfunction DefaultTitle() {\n const $started = useMediaState(\"started\"), $title = useMediaState(\"title\"), $hasChapters = useActiveTextTrack(\"chapters\");\n return $hasChapters && ($started || !$title) ? /* @__PURE__ */ React.createElement(ChapterTitle$1, { className: \"vds-chapter-title\" }) : /* @__PURE__ */ React.createElement(Title, { className: \"vds-chapter-title\" });\n}\nDefaultTitle.displayName = \"DefaultTitle\";\n\nconst MediaLayout = createDefaultMediaLayout({\n type: \"video\",\n smLayoutWhen({ width, height }) {\n return width < 576 || height < 380;\n },\n renderLayout(props) {\n return /* @__PURE__ */ React.createElement(VideoLayout, { ...props });\n }\n});\nfunction DefaultVideoLayout(props) {\n return /* @__PURE__ */ React.createElement(MediaLayout, { ...props });\n}\nDefaultVideoLayout.displayName = \"DefaultVideoLayout\";\nfunction VideoLayout({ streamType, isLoadLayout, isSmallLayout }) {\n useLayoutName(\"video\");\n return isLoadLayout ? /* @__PURE__ */ React.createElement(DefaultVideoLoadLayout, null) : streamType === \"unknown\" ? /* @__PURE__ */ React.createElement(DefaultBufferingIndicator, null) : isSmallLayout ? /* @__PURE__ */ React.createElement(DefaultVideoSmallLayout, null) : /* @__PURE__ */ React.createElement(DefaultVideoLargeLayout, null);\n}\nVideoLayout.displayName = \"VideoLayout\";\nfunction DefaultVideoLargeLayout() {\n const { menuGroup } = useDefaultLayoutContext(), baseSlots = useDefaultVideoLayoutSlots(), slots = { ...baseSlots, ...baseSlots?.largeLayout };\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(DefaultAnnouncer, null), /* @__PURE__ */ React.createElement(DefaultVideoGestures, null), /* @__PURE__ */ React.createElement(DefaultVideoKeyboardDisplay, null), slot(slots, \"bufferingIndicator\", /* @__PURE__ */ React.createElement(DefaultBufferingIndicator, null)), slot(slots, \"captions\", /* @__PURE__ */ React.createElement(DefaultCaptions, null)), /* @__PURE__ */ React.createElement(Root$a, { className: \"vds-controls\" }, /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\" }, slot(slots, \"topControlsGroupStart\", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, \"topControlsGroupCenter\", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, \"topControlsGroupEnd\", null), menuGroup === \"top\" && /* @__PURE__ */ React.createElement(DefaultVideoMenus, { slots })), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\" }, slot(slots, \"centerControlsGroupStart\", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, \"centerControlsGroupCenter\", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, \"centerControlsGroupEnd\", null)), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\" }, slot(slots, \"timeSlider\", /* @__PURE__ */ React.createElement(DefaultTimeSlider, null))), /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\" }, slot(slots, \"playButton\", /* @__PURE__ */ React.createElement(DefaultPlayButton, { tooltip: \"top start\" })), /* @__PURE__ */ React.createElement(DefaultVolumePopup, { orientation: \"horizontal\", tooltip: \"top\", slots }), /* @__PURE__ */ React.createElement(DefaultTimeInfo, { slots }), slot(slots, \"chapterTitle\", /* @__PURE__ */ React.createElement(DefaultTitle, null)), slot(slots, \"captionButton\", /* @__PURE__ */ React.createElement(DefaultCaptionButton, { tooltip: \"top\" })), menuGroup === \"bottom\" && /* @__PURE__ */ React.createElement(DefaultVideoMenus, { slots }), slot(slots, \"airPlayButton\", /* @__PURE__ */ React.createElement(DefaultAirPlayButton, { tooltip: \"top\" })), slot(slots, \"googleCastButton\", /* @__PURE__ */ React.createElement(DefaultGoogleCastButton, { tooltip: \"top\" })), slot(slots, \"downloadButton\", /* @__PURE__ */ React.createElement(DefaultDownloadButton, null)), slot(slots, \"pipButton\", /* @__PURE__ */ React.createElement(DefaultPIPButton, { tooltip: \"top\" })), slot(slots, \"fullscreenButton\", /* @__PURE__ */ React.createElement(DefaultFullscreenButton, { tooltip: \"top end\" })))));\n}\nDefaultVideoLargeLayout.displayName = \"DefaultVideoLargeLayout\";\nfunction DefaultVideoSmallLayout() {\n const baseSlots = useDefaultVideoLayoutSlots(), slots = { ...baseSlots, ...baseSlots?.smallLayout };\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(DefaultAnnouncer, null), /* @__PURE__ */ React.createElement(DefaultVideoGestures, null), /* @__PURE__ */ React.createElement(DefaultVideoKeyboardDisplay, null), slot(slots, \"bufferingIndicator\", /* @__PURE__ */ React.createElement(DefaultBufferingIndicator, null)), slot(slots, \"captions\", /* @__PURE__ */ React.createElement(DefaultCaptions, null)), /* @__PURE__ */ React.createElement(Root$a, { className: \"vds-controls\" }, /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\" }, slot(slots, \"topControlsGroupStart\", null), slot(slots, \"airPlayButton\", /* @__PURE__ */ React.createElement(DefaultAirPlayButton, { tooltip: \"top start\" })), slot(slots, \"googleCastButton\", /* @__PURE__ */ React.createElement(DefaultGoogleCastButton, { tooltip: \"top start\" })), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, \"topControlsGroupCenter\", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, \"captionButton\", /* @__PURE__ */ React.createElement(DefaultCaptionButton, { tooltip: \"bottom\" })), slot(slots, \"downloadButton\", /* @__PURE__ */ React.createElement(DefaultDownloadButton, null)), /* @__PURE__ */ React.createElement(DefaultVideoMenus, { slots }), /* @__PURE__ */ React.createElement(DefaultVolumePopup, { orientation: \"vertical\", tooltip: \"bottom end\", slots }), slot(slots, \"topControlsGroupEnd\", null)), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\", style: { pointerEvents: \"none\" } }, slot(slots, \"centerControlsGroupStart\", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, \"centerControlsGroupCenter\", null), slot(slots, \"playButton\", /* @__PURE__ */ React.createElement(DefaultPlayButton, { tooltip: \"top\" })), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, \"centerControlsGroupEnd\", null)), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\" }, /* @__PURE__ */ React.createElement(DefaultTimeInfo, { slots }), slot(slots, \"chapterTitle\", /* @__PURE__ */ React.createElement(DefaultTitle, null)), slot(slots, \"fullscreenButton\", /* @__PURE__ */ React.createElement(DefaultFullscreenButton, { tooltip: \"top end\" }))), /* @__PURE__ */ React.createElement(Group, { className: \"vds-controls-group\" }, slot(slots, \"timeSlider\", /* @__PURE__ */ React.createElement(DefaultTimeSlider, null)))), slot(slots, \"startDuration\", /* @__PURE__ */ React.createElement(DefaultVideoStartDuration, null)));\n}\nDefaultVideoSmallLayout.displayName = \"DefaultVideoSmallLayout\";\nfunction DefaultVideoStartDuration() {\n const $duration = useMediaState(\"duration\");\n if ($duration === 0) return null;\n return /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-start-duration\" }, /* @__PURE__ */ React.createElement(Time, { className: \"vds-time\", type: \"duration\" }));\n}\nDefaultVideoStartDuration.displayName = \"DefaultVideoStartDuration\";\nfunction DefaultVideoGestures() {\n const { noGestures } = useDefaultLayoutContext();\n if (noGestures) return null;\n return /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-gestures\" }, /* @__PURE__ */ React.createElement(Gesture, { className: \"vds-gesture\", event: \"pointerup\", action: \"toggle:paused\" }), /* @__PURE__ */ React.createElement(Gesture, { className: \"vds-gesture\", event: \"pointerup\", action: \"toggle:controls\" }), /* @__PURE__ */ React.createElement(Gesture, { className: \"vds-gesture\", event: \"dblpointerup\", action: \"toggle:fullscreen\" }), /* @__PURE__ */ React.createElement(Gesture, { className: \"vds-gesture\", event: \"dblpointerup\", action: \"seek:-10\" }), /* @__PURE__ */ React.createElement(Gesture, { className: \"vds-gesture\", event: \"dblpointerup\", action: \"seek:10\" }));\n}\nDefaultVideoGestures.displayName = \"DefaultVideoGestures\";\nfunction DefaultBufferingIndicator() {\n return /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-buffering-indicator\" }, /* @__PURE__ */ React.createElement(Root$b, { className: \"vds-buffering-spinner\" }, /* @__PURE__ */ React.createElement(Track$1, { className: \"vds-buffering-track\" }), /* @__PURE__ */ React.createElement(TrackFill$1, { className: \"vds-buffering-track-fill\" })));\n}\nDefaultBufferingIndicator.displayName = \"DefaultBufferingIndicator\";\nfunction DefaultVideoMenus({ slots }) {\n const { isSmallLayout, noModal, menuGroup } = useDefaultLayoutContext(), side = menuGroup === \"top\" || isSmallLayout ? \"bottom\" : \"top\", tooltip = `${side} end`, placement = noModal ? `${side} end` : !isSmallLayout ? `${side} end` : null;\n return /* @__PURE__ */ React.createElement(React.Fragment, null, slot(\n slots,\n \"chaptersMenu\",\n /* @__PURE__ */ React.createElement(\n DefaultChaptersMenu,\n {\n tooltip,\n placement,\n portalClass: \"vds-video-layout\"\n }\n )\n ), slot(\n slots,\n \"settingsMenu\",\n /* @__PURE__ */ React.createElement(\n DefaultSettingsMenu,\n {\n tooltip,\n placement,\n portalClass: \"vds-video-layout\",\n slots\n }\n )\n ));\n}\nDefaultVideoMenus.displayName = \"DefaultVideoMenus\";\nfunction DefaultVideoLoadLayout() {\n const { isSmallLayout } = useDefaultLayoutContext(), baseSlots = useDefaultVideoLayoutSlots(), slots = { ...baseSlots, ...baseSlots?.[isSmallLayout ? \"smallLayout\" : \"largeLayout\"] };\n return /* @__PURE__ */ React.createElement(\"div\", { className: \"vds-load-container\" }, slot(slots, \"bufferingIndicator\", /* @__PURE__ */ React.createElement(DefaultBufferingIndicator, null)), slot(slots, \"loadButton\", /* @__PURE__ */ React.createElement(DefaultPlayButton, { tooltip: \"top\" })));\n}\nDefaultVideoLoadLayout.displayName = \"DefaultVideoLoadLayout\";\nfunction DefaultVideoKeyboardDisplay() {\n const { noKeyboardAnimations, icons, userPrefersKeyboardAnimations } = useDefaultLayoutContext(), $userPrefersKeyboardAnimations = useSignal(userPrefersKeyboardAnimations), disabled = noKeyboardAnimations || !$userPrefersKeyboardAnimations;\n if (disabled || !icons.KeyboardDisplay) return null;\n return /* @__PURE__ */ React.createElement(DefaultKeyboardDisplay, { icons: icons.KeyboardDisplay });\n}\nDefaultVideoKeyboardDisplay.displayName = \"DefaultVideoKeyboardDisplay\";\n\nexport { DefaultAudioLayout, DefaultBufferingIndicator, DefaultKeyboardDisplay, DefaultLayoutContext, DefaultMenuButton, DefaultMenuCheckbox, DefaultMenuItem, DefaultMenuRadioGroup, DefaultMenuSection, DefaultMenuSliderItem, DefaultSliderParts, DefaultSliderSteps, DefaultTooltip, DefaultVideoGestures, DefaultVideoLargeLayout, DefaultVideoLayout, DefaultVideoSmallLayout, createRadioOptions, i18n, useDefaultLayoutContext, useDefaultLayoutWord };\n","\"use client\"\n\nimport * as React from 'react';\n\nconst Icon = /* @__PURE__ */ React.forwardRef((props, ref) => {\n const { width, height, size = null, paths, ...restProps } = props;\n return React.createElement(\"svg\", {\n viewBox: \"0 0 32 32\",\n ...restProps,\n width: width ?? size,\n height: height ?? size,\n fill: \"none\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref,\n dangerouslySetInnerHTML: { __html: paths }\n });\n});\nIcon.displayName = \"VidstackIcon\";\n\nexport { Icon };\n","\"use client\"\n\nimport * as React from 'react';\nimport { Icon$34, Icon$35, Icon$27, Icon$26, Icon$60, Icon$61, Icon$39, Icon$40, Icon$105, Icon$104, Icon$54, Icon$59, Icon$62, Icon$19, Icon$56, Icon$33, Icon$8, Icon$13, Icon$88, Icon$63, Icon$16, Icon$53, Icon$22, Icon$11, Icon$0, Icon$31, Icon$81, Icon$77, Icon$74, Icon$24, Icon$5 } from '../chunks/vidstack-CZgUA94N.js';\nimport { Icon } from '../chunks/vidstack-CBF7iUqu.js';\n\nfunction createIcon(paths) {\n function DefaultLayoutIcon(props) {\n return /* @__PURE__ */ React.createElement(Icon, { paths, ...props });\n }\n DefaultLayoutIcon.displayName = \"DefaultLayoutIcon\";\n return DefaultLayoutIcon;\n}\nconst defaultLayoutIcons = {\n AirPlayButton: {\n Default: createIcon(Icon$5)\n },\n GoogleCastButton: {\n Default: createIcon(Icon$24)\n },\n PlayButton: {\n Play: createIcon(Icon$62),\n Pause: createIcon(Icon$59),\n Replay: createIcon(Icon$74)\n },\n MuteButton: {\n Mute: createIcon(Icon$54),\n VolumeLow: createIcon(Icon$105),\n VolumeHigh: createIcon(Icon$104)\n },\n CaptionButton: {\n On: createIcon(Icon$26),\n Off: createIcon(Icon$27)\n },\n PIPButton: {\n Enter: createIcon(Icon$61),\n Exit: createIcon(Icon$60)\n },\n FullscreenButton: {\n Enter: createIcon(Icon$40),\n Exit: createIcon(Icon$39)\n },\n SeekButton: {\n Backward: createIcon(Icon$77),\n Forward: createIcon(Icon$81)\n },\n DownloadButton: {\n Default: createIcon(Icon$31)\n },\n Menu: {\n Accessibility: createIcon(Icon$0),\n ArrowLeft: createIcon(Icon$11),\n ArrowRight: createIcon(Icon$22),\n Audio: createIcon(Icon$53),\n Chapters: createIcon(Icon$16),\n Captions: createIcon(Icon$27),\n Playback: createIcon(Icon$63),\n Settings: createIcon(Icon$88),\n AudioBoostUp: createIcon(Icon$104),\n AudioBoostDown: createIcon(Icon$105),\n SpeedUp: createIcon(Icon$35),\n SpeedDown: createIcon(Icon$34),\n QualityUp: createIcon(Icon$13),\n QualityDown: createIcon(Icon$8),\n FontSizeUp: createIcon(Icon$13),\n FontSizeDown: createIcon(Icon$8),\n OpacityUp: createIcon(Icon$33),\n OpacityDown: createIcon(Icon$56),\n RadioCheck: createIcon(Icon$19)\n },\n KeyboardDisplay: {\n Play: createIcon(Icon$62),\n Pause: createIcon(Icon$59),\n Mute: createIcon(Icon$54),\n VolumeUp: createIcon(Icon$104),\n VolumeDown: createIcon(Icon$105),\n EnterFullscreen: createIcon(Icon$40),\n ExitFullscreen: createIcon(Icon$39),\n EnterPiP: createIcon(Icon$61),\n ExitPiP: createIcon(Icon$60),\n CaptionsOn: createIcon(Icon$26),\n CaptionsOff: createIcon(Icon$27),\n SeekForward: createIcon(Icon$35),\n SeekBackward: createIcon(Icon$34)\n }\n};\n\nexport { defaultLayoutIcons };\n","import { useState, useRef, useEffect } from 'react';\r\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog';\r\nimport { Button } from '@/components/ui/button';\r\nimport { Input } from '@/components/ui/input';\r\nimport { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form';\r\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\r\nimport { Switch } from '@/components/ui/switch';\r\nimport { Checkbox } from '@/components/ui/checkbox';\r\nimport { Card, CardContent } from '@/components/ui/card';\r\nimport { useForm } from 'react-hook-form';\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { z } from 'zod';\r\nimport { supabase } from '@/integrations/supabase/client';\r\nimport { useAuth } from '@/hooks/useAuth';\r\nimport { toast } from 'sonner';\r\nimport { Mic, MicOff, Loader2, Bookmark } from 'lucide-react';\r\nimport MarkdownEditor from '@/components/MarkdownEditor';\r\nimport { transcribeAudio } from '@/lib/openai';\r\nimport { T, translate } from '@/i18n';\r\n\r\ninterface Collection {\r\n id: string;\r\n name: string;\r\n description: string | null;\r\n slug: string;\r\n is_public: boolean;\r\n}\r\n\r\nconst editSchema = z.object({\r\n title: z.string().max(100, 'Title must be less than 100 characters').optional(),\r\n description: z.string().max(1000, 'Description must be less than 1000 characters').optional(),\r\n visible: z.boolean(),\r\n});\r\n\r\ntype EditFormData = z.infer<typeof editSchema>;\r\n\r\ninterface EditVideoModalProps {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n videoId: string;\r\n currentTitle: string;\r\n currentDescription: string | null;\r\n currentVisible: boolean;\r\n onUpdateSuccess: () => void;\r\n}\r\n\r\nconst EditVideoModal = ({ \r\n open, \r\n onOpenChange, \r\n videoId, \r\n currentTitle, \r\n currentDescription,\r\n currentVisible,\r\n onUpdateSuccess \r\n}: EditVideoModalProps) => {\r\n const [updating, setUpdating] = useState(false);\r\n const { user } = useAuth();\r\n \r\n // Microphone recording state\r\n const [isRecording, setIsRecording] = useState(false);\r\n const [isTranscribing, setIsTranscribing] = useState(false);\r\n const mediaRecorderRef = useRef<MediaRecorder | null>(null);\r\n const audioChunksRef = useRef<Blob[]>([]);\r\n\r\n // Collections state\r\n const [collections, setCollections] = useState<Collection[]>([]);\r\n const [selectedCollections, setSelectedCollections] = useState<Set<string>>(new Set());\r\n const [loadingCollections, setLoadingCollections] = useState(false);\r\n\r\n const form = useForm<EditFormData>({\r\n resolver: zodResolver(editSchema),\r\n defaultValues: {\r\n title: currentTitle,\r\n description: currentDescription || '',\r\n visible: currentVisible,\r\n },\r\n });\r\n\r\n // Load collections when modal opens\r\n useEffect(() => {\r\n if (open && user) {\r\n fetchCollections();\r\n fetchVideoCollections();\r\n }\r\n }, [open, user, videoId]);\r\n\r\n const fetchCollections = async () => {\r\n if (!user) return;\r\n\r\n setLoadingCollections(true);\r\n try {\r\n const { data, error } = await supabase\r\n .from('collections')\r\n .select('*')\r\n .eq('user_id', user.id)\r\n .order('created_at', { ascending: false });\r\n\r\n if (error) throw error;\r\n setCollections(data || []);\r\n } catch (error) {\r\n console.error('Error fetching collections:', error);\r\n toast.error(translate('Failed to load collections'));\r\n } finally {\r\n setLoadingCollections(false);\r\n }\r\n };\r\n\r\n const fetchVideoCollections = async () => {\r\n if (!user) return;\r\n\r\n try {\r\n // Reuse collection_pictures table with picture_id field for videos\r\n const { data, error } = await supabase\r\n .from('collection_pictures')\r\n .select('collection_id')\r\n .eq('picture_id', videoId);\r\n\r\n if (error) throw error;\r\n\r\n if (data) {\r\n const collectionIds = data.map(cp => cp.collection_id);\r\n setSelectedCollections(new Set(collectionIds));\r\n }\r\n } catch (error) {\r\n console.error('Error fetching video collections:', error);\r\n }\r\n };\r\n\r\n const handleCollectionToggle = (collectionId: string) => {\r\n const newSelected = new Set(selectedCollections);\r\n if (newSelected.has(collectionId)) {\r\n newSelected.delete(collectionId);\r\n } else {\r\n newSelected.add(collectionId);\r\n }\r\n setSelectedCollections(newSelected);\r\n };\r\n\r\n const onSubmit = async (data: EditFormData) => {\r\n if (!user) return;\r\n\r\n setUpdating(true);\r\n try {\r\n // Update video metadata in pictures table\r\n const { error: updateError } = await supabase\r\n .from('pictures')\r\n .update({\r\n title: data.title?.trim() || null,\r\n description: data.description?.trim() || null,\r\n visible: data.visible,\r\n updated_at: new Date().toISOString(),\r\n })\r\n .eq('id', videoId)\r\n .eq('user_id', user.id)\r\n .eq('type', 'mux-video');\r\n\r\n if (updateError) throw updateError;\r\n\r\n // Update collections (reuse collection_pictures table with picture_id for videos)\r\n try {\r\n // First, remove all existing collection associations\r\n await supabase\r\n .from('collection_pictures')\r\n .delete()\r\n .eq('picture_id', videoId);\r\n\r\n // Then add new associations\r\n if (selectedCollections.size > 0) {\r\n const collectionInserts = Array.from(selectedCollections).map(collectionId => ({\r\n collection_id: collectionId,\r\n picture_id: videoId,\r\n }));\r\n\r\n await supabase\r\n .from('collection_pictures')\r\n .insert(collectionInserts);\r\n }\r\n } catch (collectionError) {\r\n console.error('Collection update failed:', collectionError);\r\n toast.error(translate('Failed to update collections'));\r\n // Don't fail the whole update if collections fail\r\n }\r\n\r\n toast.success(translate('Video updated successfully'));\r\n onUpdateSuccess();\r\n onOpenChange(false);\r\n } catch (error) {\r\n console.error('Error updating video:', error);\r\n toast.error(translate('Failed to update video'));\r\n } finally {\r\n setUpdating(false);\r\n }\r\n };\r\n\r\n const handleMicrophone = async (field: 'title' | 'description') => {\r\n if (isRecording) {\r\n // Stop recording\r\n if (mediaRecorderRef.current && mediaRecorderRef.current.state === 'recording') {\r\n mediaRecorderRef.current.stop();\r\n }\r\n setIsRecording(false);\r\n } else {\r\n // Start recording\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\r\n const mediaRecorder = new MediaRecorder(stream);\r\n mediaRecorderRef.current = mediaRecorder;\r\n audioChunksRef.current = [];\r\n\r\n mediaRecorder.ondataavailable = (event) => {\r\n if (event.data.size > 0) {\r\n audioChunksRef.current.push(event.data);\r\n }\r\n };\r\n\r\n mediaRecorder.onstop = async () => {\r\n const audioBlob = new Blob(audioChunksRef.current, { type: 'audio/webm' });\r\n \r\n // Stop all tracks\r\n stream.getTracks().forEach(track => track.stop());\r\n \r\n // Transcribe audio\r\n setIsTranscribing(true);\r\n try {\r\n const audioFile = new File([audioBlob], 'recording.webm', { type: 'audio/webm' });\r\n const transcription = await transcribeAudio(audioFile);\r\n \r\n if (transcription) {\r\n if (field === 'title') {\r\n form.setValue('title', transcription);\r\n } else {\r\n const currentDesc = form.getValues('description') || '';\r\n form.setValue('description', currentDesc ? `${currentDesc}\\n\\n${transcription}` : transcription);\r\n }\r\n toast.success(translate('Voice transcribed successfully!'));\r\n }\r\n } catch (error) {\r\n console.error('Error transcribing audio:', error);\r\n toast.error(translate('Failed to transcribe audio'));\r\n } finally {\r\n setIsTranscribing(false);\r\n }\r\n };\r\n\r\n mediaRecorder.start();\r\n setIsRecording(true);\r\n toast.info(translate('Recording... Click again to stop'));\r\n } catch (error) {\r\n console.error('Error starting recording:', error);\r\n toast.error(translate('Failed to start recording. Please check microphone permissions.'));\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <Dialog open={open} onOpenChange={onOpenChange}>\r\n <DialogContent className=\"sm:max-w-[600px] max-h-[90vh] overflow-y-auto\">\r\n <DialogHeader>\r\n <DialogTitle><T>Edit Video</T></DialogTitle>\r\n </DialogHeader>\r\n\r\n <Form {...form}>\r\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-4\">\r\n <Tabs defaultValue=\"metadata\" className=\"w-full\">\r\n <TabsList className=\"grid w-full grid-cols-2\">\r\n <TabsTrigger value=\"metadata\"><T>Metadata</T></TabsTrigger>\r\n <TabsTrigger value=\"collections\">\r\n <Bookmark className=\"h-4 w-4 mr-1\" />\r\n <T>Collections</T>\r\n </TabsTrigger>\r\n </TabsList>\r\n\r\n <TabsContent value=\"metadata\" className=\"space-y-4\">\r\n <FormField\r\n control={form.control}\r\n name=\"title\"\r\n render={({ field }) => (\r\n <FormItem>\r\n <FormLabel><T>Title</T></FormLabel>\r\n <div className=\"relative\">\r\n <FormControl>\r\n <Input placeholder={translate('Video title')} {...field} />\r\n </FormControl>\r\n <button\r\n type=\"button\"\r\n onClick={() => handleMicrophone('title')}\r\n disabled={isTranscribing}\r\n className=\"absolute right-2 top-1/2 -translate-y-1/2 p-1.5 rounded-md hover:bg-accent transition-colors\"\r\n >\r\n {isTranscribing ? (\r\n <Loader2 className=\"h-4 w-4 animate-spin\" />\r\n ) : isRecording ? (\r\n <MicOff className=\"h-4 w-4 text-red-500\" />\r\n ) : (\r\n <Mic className=\"h-4 w-4\" />\r\n )}\r\n </button>\r\n </div>\r\n <FormMessage />\r\n </FormItem>\r\n )}\r\n />\r\n\r\n <FormField\r\n control={form.control}\r\n name=\"description\"\r\n render={({ field }) => (\r\n <FormItem>\r\n <FormLabel><T>Description</T></FormLabel>\r\n <div className=\"relative\">\r\n <FormControl>\r\n <MarkdownEditor\r\n value={field.value || ''}\r\n onChange={field.onChange}\r\n placeholder={translate('Add a description (supports Markdown)')}\r\n className=\"min-h-[120px]\"\r\n />\r\n </FormControl>\r\n <button\r\n type=\"button\"\r\n onClick={() => handleMicrophone('description')}\r\n disabled={isTranscribing}\r\n className=\"absolute right-2 top-2 p-1.5 rounded-md hover:bg-accent transition-colors z-10\"\r\n >\r\n {isTranscribing ? (\r\n <Loader2 className=\"h-4 w-4 animate-spin\" />\r\n ) : isRecording ? (\r\n <MicOff className=\"h-4 w-4 text-red-500\" />\r\n ) : (\r\n <Mic className=\"h-4 w-4\" />\r\n )}\r\n </button>\r\n </div>\r\n <FormMessage />\r\n </FormItem>\r\n )}\r\n />\r\n\r\n <FormField\r\n control={form.control}\r\n name=\"visible\"\r\n render={({ field }) => (\r\n <FormItem className=\"flex flex-row items-center justify-between rounded-lg border p-4\">\r\n <div className=\"space-y-0.5\">\r\n <FormLabel className=\"text-base\"><T>Visibility</T></FormLabel>\r\n <div className=\"text-sm text-muted-foreground\">\r\n <T>Make this video visible to others</T>\r\n </div>\r\n </div>\r\n <FormControl>\r\n <Switch\r\n checked={field.value}\r\n onCheckedChange={field.onChange}\r\n />\r\n </FormControl>\r\n </FormItem>\r\n )}\r\n />\r\n </TabsContent>\r\n\r\n <TabsContent value=\"collections\" className=\"space-y-4\">\r\n {loadingCollections ? (\r\n <div className=\"flex items-center justify-center py-8\">\r\n <Loader2 className=\"h-6 w-6 animate-spin\" />\r\n </div>\r\n ) : collections.length === 0 ? (\r\n <div className=\"text-center py-8 text-muted-foreground\">\r\n <Bookmark className=\"h-12 w-12 mx-auto mb-3 opacity-50\" />\r\n <p><T>No collections yet</T></p>\r\n <p className=\"text-sm\"><T>Create a collection first to organize your videos</T></p>\r\n </div>\r\n ) : (\r\n <div className=\"space-y-2\">\r\n {collections.map((collection) => (\r\n <Card key={collection.id} className=\"cursor-pointer hover:bg-accent/50 transition-colors\">\r\n <CardContent className=\"p-4\">\r\n <div className=\"flex items-center space-x-3\">\r\n <Checkbox\r\n checked={selectedCollections.has(collection.id)}\r\n onCheckedChange={() => handleCollectionToggle(collection.id)}\r\n />\r\n <div className=\"flex-1\">\r\n <h4 className=\"font-medium\">{collection.name}</h4>\r\n {collection.description && (\r\n <p className=\"text-sm text-muted-foreground line-clamp-1\">\r\n {collection.description}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n </CardContent>\r\n </Card>\r\n ))}\r\n </div>\r\n )}\r\n </TabsContent>\r\n </Tabs>\r\n\r\n <div className=\"flex justify-end space-x-2\">\r\n <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\r\n <T>Cancel</T>\r\n </Button>\r\n <Button type=\"submit\" disabled={updating}>\r\n {updating ? (\r\n <>\r\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\r\n <T>Updating...</T>\r\n </>\r\n ) : (\r\n <T>Save Changes</T>\r\n )}\r\n </Button>\r\n </div>\r\n </form>\r\n </Form>\r\n </DialogContent>\r\n </Dialog>\r\n );\r\n};\r\n\r\nexport default EditVideoModal;\r\n\r\n","/**\r\n * Media Type Registry\r\n * \r\n * Unified system for handling different media types in the 'pictures' table\r\n * based on the 'type' column:\r\n * \r\n * - NULL or 'supabase-image' => Traditional images (PhotoCard)\r\n * - 'mux-video' => Mux-powered videos (MuxVideoCard)\r\n * - 'youtube' => YouTube videos\r\n */\r\n\r\nimport React from 'react';\r\n\r\n// Media type identifiers\r\nexport const MEDIA_TYPES = {\r\n SUPABASE_IMAGE: 'supabase-image',\r\n MUX_VIDEO: 'mux-video',\r\n VIDEO_INTERN: 'video-intern',\r\n YOUTUBE: 'youtube',\r\n TIKTOK: 'tiktok',\r\n PAGE: 'page-intern',\r\n PAGE_EXTERNAL: 'page-external',\r\n} as const;\r\n\r\nexport type MediaType = typeof MEDIA_TYPES[keyof typeof MEDIA_TYPES] | null;\r\n\r\n// Normalize type - treat NULL as SUPABASE_IMAGE (backward compatibility)\r\nexport function normalizeMediaType(type: string | null | undefined): MediaType {\r\n if (!type || type === MEDIA_TYPES.SUPABASE_IMAGE) {\r\n return MEDIA_TYPES.SUPABASE_IMAGE;\r\n }\r\n return type as MediaType;\r\n}\r\n\r\n// Check if a media type is a video\r\nexport function isVideoType(type: MediaType): boolean {\r\n return type === MEDIA_TYPES.MUX_VIDEO || type === MEDIA_TYPES.YOUTUBE || type === MEDIA_TYPES.TIKTOK || type === MEDIA_TYPES.VIDEO_INTERN;\r\n}\r\n\r\n// Check if a media type is an image\r\nexport function isImageType(type: MediaType): boolean {\r\n return !type || type === MEDIA_TYPES.SUPABASE_IMAGE;\r\n}\r\n\r\n// Get URL field name based on type\r\nexport function getMediaUrlField(type: MediaType): 'image_url' | 'image_url' {\r\n // For now, both use image_url (videos store their m3u8 URL there)\r\n return 'image_url';\r\n}\r\n\r\n// Get thumbnail field\r\nexport function getThumbnailField(type: MediaType): 'thumbnail_url' | null {\r\n return 'thumbnail_url';\r\n}\r\n\r\n// Media renderer registry\r\nexport interface MediaRendererProps {\r\n id: string;\r\n url: string;\r\n thumbnailUrl?: string | null;\r\n title: string;\r\n author: string;\r\n authorId: string;\r\n likes: number;\r\n comments: number;\r\n isLiked?: boolean;\r\n description?: string | null;\r\n type: MediaType;\r\n meta?: any;\r\n onClick?: (id: string) => void;\r\n onLike?: () => void;\r\n onDelete?: () => void;\r\n}\r\n\r\n// Registry interface\r\ninterface MediaTypeConfig {\r\n name: string;\r\n component: React.ComponentType<MediaRendererProps>;\r\n uploadComponent?: React.ComponentType<any>;\r\n}\r\n\r\n// The registry will be populated by importing the components\r\nconst registry = new Map<MediaType, MediaTypeConfig>();\r\n\r\n// Register a media type\r\nexport function registerMediaType(\r\n type: MediaType,\r\n config: MediaTypeConfig\r\n): void {\r\n registry.set(type, config);\r\n}\r\n\r\n// Get renderer for a media type\r\nexport function getMediaRenderer(type: MediaType): React.ComponentType<MediaRendererProps> | null {\r\n const normalized = normalizeMediaType(type);\r\n const config = registry.get(normalized);\r\n return config?.component || null;\r\n}\r\n\r\n// Get media type config\r\nexport function getMediaTypeConfig(type: MediaType): MediaTypeConfig | null {\r\n const normalized = normalizeMediaType(type);\r\n return registry.get(normalized) || null;\r\n}\r\n\r\n// Helper to determine media type from URL or other properties\r\nexport function detectMediaType(url: string, meta?: any): MediaType {\r\n // Check for Internal Video\r\n if (url.includes('/api/videos/')) {\r\n return MEDIA_TYPES.VIDEO_INTERN;\r\n }\r\n\r\n // Check if it's a Mux video (HLS stream)\r\n if (url.includes('stream.mux.com') || url.includes('.m3u8')) {\r\n return MEDIA_TYPES.MUX_VIDEO;\r\n }\r\n\r\n // Check if it's a YouTube video\r\n if (url.includes('youtube.com') || url.includes('youtu.be')) {\r\n return MEDIA_TYPES.YOUTUBE;\r\n }\r\n\r\n // Check if it's a TikTok video\r\n if (url.includes('tiktok.com')) {\r\n return MEDIA_TYPES.TIKTOK;\r\n }\r\n\r\n // Check meta for Mux identifiers\r\n if (meta && (meta.mux_asset_id || meta.mux_playback_id)) {\r\n return MEDIA_TYPES.MUX_VIDEO;\r\n }\r\n\r\n // Default to image\r\n return MEDIA_TYPES.SUPABASE_IMAGE;\r\n}\r\n\r\nexport default {\r\n MEDIA_TYPES,\r\n normalizeMediaType,\r\n isVideoType,\r\n isImageType,\r\n getMediaUrlField,\r\n getThumbnailField,\r\n registerMediaType,\r\n getMediaRenderer,\r\n getMediaTypeConfig,\r\n detectMediaType,\r\n};\r\n","\"use client\"\n\nimport { TextTrackSymbol, RadioGroupController, useMediaContext, menuContext, Primitive, MediaPlayerInstance, MediaProviderInstance, isRemotionProvider, mediaState, TextTrack, ToggleButtonInstance, PosterInstance, useMediaState, ThumbnailsLoader, updateSliderPreviewPlacement } from './chunks/vidstack-D5Pzx_k5.js';\nexport { ARIAKeyShortcuts, AUDIO_EXTENSIONS, AUDIO_TYPES, AirPlayButtonInstance, AudioGainSliderInstance, AudioProviderLoader, AudioTrackList, CaptionButtonInstance, CaptionsInstance, ControlsGroupInstance, ControlsInstance, DASHProviderLoader, DASH_VIDEO_EXTENSIONS, DASH_VIDEO_TYPES, FullscreenButtonInstance, FullscreenController, GestureInstance, GoogleCastButtonInstance, HLSProviderLoader, HLS_VIDEO_EXTENSIONS, HLS_VIDEO_TYPES, List, LiveButtonInstance, LocalMediaStorage, MEDIA_KEY_SHORTCUTS, MediaAnnouncerInstance, MediaControls, MediaRemoteControl, MenuButtonInstance, MenuInstance, MenuItemInstance, MenuItemsInstance, MenuPortalInstance, MuteButtonInstance, PIPButtonInstance, PlayButtonInstance, QualitySliderInstance, RadioGroupInstance, RadioInstance, ScreenOrientationController, SeekButtonInstance, SliderChaptersInstance, SliderInstance, SliderPreviewInstance, SliderThumbnailInstance, SliderValueInstance, SliderVideoInstance, SpeedSliderInstance, TextRenderers, TextTrackList, ThumbnailInstance, TimeInstance, TimeRange, TimeSliderInstance, TooltipContentInstance, TooltipInstance, TooltipTriggerInstance, VIDEO_EXTENSIONS, VIDEO_TYPES, VideoProviderLoader, VideoQualityList, VimeoProviderLoader, VolumeSliderInstance, YouTubeProviderLoader, boundTime, canChangeVolume, canFullscreen, canGoogleCastSrc, canOrientScreen, canPlayHLSNatively, canRotateScreen, canUsePictureInPicture, canUseVideoPresentation, findActiveCue, formatSpokenTime, formatTime, getDownloadFile, getTimeRangesEnd, getTimeRangesStart, isAudioProvider, isAudioSrc, isCueActive, isDASHProvider, isDASHSrc, isGoogleCastProvider, isHLSProvider, isHLSSrc, isHTMLAudioElement, isHTMLIFrameElement, isHTMLMediaElement, isHTMLVideoElement, isMediaStream, isTrackCaptionKind, isVideoProvider, isVideoQualitySrc, isVideoSrc, isVimeoProvider, isYouTubeProvider, mediaContext, normalizeTimeIntervals, parseJSONCaptionsFile, sliderState, softResetMediaState, sortVideoQualities, updateTimeIntervals, useMediaStore, useSliderState, useSliderStore, watchActiveTextTrack, watchCueTextChange } from './chunks/vidstack-D5Pzx_k5.js';\nimport * as React from 'react';\nimport { DOMEvent, isString, EventsController, prop, method, Component, hasProvidedContext, useContext, effect, createReactComponent, useStateContext, useSignal, composeRefs, useSignalRecord, useReactScope, signal } from './chunks/vidstack-CZgUA94N.js';\nexport { appendTriggerEvent, findTriggerEvent, hasTriggerEvent, isKeyboardClick, isKeyboardEvent, isPointerEvent, walkTriggerEventChain } from './chunks/vidstack-CZgUA94N.js';\nimport { createSignal, useScoped } from './chunks/vidstack-DqtDbuaC.js';\nexport { audioGainSlider as AudioGainSlider, Captions, ChapterTitle, controls as Controls, GoogleCastButton, MediaAnnouncer, qualitySlider as QualitySlider, speedSlider as SpeedSlider, spinner as Spinner, Title, tooltip as Tooltip, useActiveTextCues, useActiveTextTrack, useChapterOptions, useChapterTitle, useTextCues } from './chunks/vidstack-DqtDbuaC.js';\nimport { useMediaContext as useMediaContext$1 } from './chunks/vidstack-CQ3Bde2N.js';\nexport { AirPlayButton, CaptionButton, FullscreenButton, Gesture, LiveButton, menu as Menu, MuteButton, PIPButton, PlayButton, radioGroup as RadioGroup, SeekButton, slider as Slider, thumbnail as Thumbnail, Time, timeSlider as TimeSlider, volumeSlider as VolumeSlider, useAudioOptions, useCaptionOptions, useMediaPlayer } from './chunks/vidstack-CQ3Bde2N.js';\nimport { Icon } from './chunks/vidstack-CBF7iUqu.js';\nexport { DEFAULT_PLAYBACK_RATES, useMediaRemote, usePlaybackRateOptions, useVideoQualityOptions } from './chunks/vidstack-CEWbu4SL.js';\nimport '@floating-ui/dom';\nimport 'react-dom';\n\nconst GROUPED_LOG = Symbol(0);\nclass GroupedLog {\n constructor(logger, level, title, root, parent) {\n this.logger = logger;\n this.level = level;\n this.title = title;\n this.root = root;\n this.parent = parent;\n }\n [GROUPED_LOG] = true;\n logs = [];\n log(...data) {\n this.logs.push({ data });\n return this;\n }\n labelledLog(label, ...data) {\n this.logs.push({ label, data });\n return this;\n }\n groupStart(title) {\n return new GroupedLog(this.logger, this.level, title, this.root ?? this, this);\n }\n groupEnd() {\n this.parent?.logs.push(this);\n return this.parent ?? this;\n }\n dispatch() {\n return this.logger.dispatch(this.level, this.root ?? this);\n }\n}\n\nclass Logger {\n #target = null;\n error(...data) {\n return this.dispatch(\"error\", ...data);\n }\n warn(...data) {\n return this.dispatch(\"warn\", ...data);\n }\n info(...data) {\n return this.dispatch(\"info\", ...data);\n }\n debug(...data) {\n return this.dispatch(\"debug\", ...data);\n }\n errorGroup(title) {\n return new GroupedLog(this, \"error\", title);\n }\n warnGroup(title) {\n return new GroupedLog(this, \"warn\", title);\n }\n infoGroup(title) {\n return new GroupedLog(this, \"info\", title);\n }\n debugGroup(title) {\n return new GroupedLog(this, \"debug\", title);\n }\n setTarget(newTarget) {\n this.#target = newTarget;\n }\n dispatch(level, ...data) {\n return this.#target?.dispatchEvent(\n new DOMEvent(\"vds-log\", {\n bubbles: true,\n composed: true,\n detail: { level, data }\n })\n ) || false;\n }\n}\n\nclass LibASSTextRenderer {\n constructor(loader, config) {\n this.loader = loader;\n this.config = config;\n }\n priority = 1;\n #instance = null;\n #track = null;\n #typeRE = /(ssa|ass)$/;\n canRender(track, video) {\n return !!video && !!track.src && (isString(track.type) && this.#typeRE.test(track.type) || this.#typeRE.test(track.src));\n }\n attach(video) {\n if (!video) return;\n this.loader().then(async (mod) => {\n this.#instance = new mod.default({\n ...this.config,\n video,\n subUrl: this.#track?.src || \"\"\n });\n new EventsController(this.#instance).add(\"ready\", () => {\n const canvas = this.#instance?._canvas;\n if (canvas) canvas.style.pointerEvents = \"none\";\n }).add(\"error\", (event) => {\n if (!this.#track) return;\n this.#track[TextTrackSymbol.readyState] = 3;\n this.#track.dispatchEvent(\n new DOMEvent(\"error\", {\n trigger: event,\n detail: event.error\n })\n );\n });\n });\n }\n changeTrack(track) {\n if (!track || track.readyState === 3) {\n this.#freeTrack();\n } else if (this.#track !== track) {\n this.#instance?.setTrackByUrl(track.src);\n this.#track = track;\n }\n }\n detach() {\n this.#freeTrack();\n }\n #freeTrack() {\n this.#instance?.freeTrack();\n this.#track = null;\n }\n}\n\nconst DEFAULT_AUDIO_GAINS = [1, 1.25, 1.5, 1.75, 2, 2.5, 3, 4];\nclass AudioGainRadioGroup extends Component {\n static props = {\n normalLabel: \"Disabled\",\n gains: DEFAULT_AUDIO_GAINS\n };\n #media;\n #menu;\n #controller;\n get value() {\n return this.#controller.value;\n }\n get disabled() {\n const { gains } = this.$props, { canSetAudioGain } = this.#media.$state;\n return !canSetAudioGain() || gains().length === 0;\n }\n constructor() {\n super();\n this.#controller = new RadioGroupController();\n this.#controller.onValueChange = this.#onValueChange.bind(this);\n }\n onSetup() {\n this.#media = useMediaContext();\n if (hasProvidedContext(menuContext)) {\n this.#menu = useContext(menuContext);\n }\n }\n onConnect(el) {\n effect(this.#watchValue.bind(this));\n effect(this.#watchHintText.bind(this));\n effect(this.#watchControllerDisabled.bind(this));\n }\n getOptions() {\n const { gains, normalLabel } = this.$props;\n return gains().map((gain) => ({\n label: gain === 1 || gain === null ? normalLabel : String(gain * 100) + \"%\",\n value: gain.toString()\n }));\n }\n #watchValue() {\n this.#controller.value = this.#getValue();\n }\n #watchHintText() {\n const { normalLabel } = this.$props, { audioGain } = this.#media.$state, gain = audioGain();\n this.#menu?.hint.set(gain === 1 || gain == null ? normalLabel() : String(gain * 100) + \"%\");\n }\n #watchControllerDisabled() {\n this.#menu?.disable(this.disabled);\n }\n #getValue() {\n const { audioGain } = this.#media.$state;\n return audioGain()?.toString() ?? \"1\";\n }\n #onValueChange(value, trigger) {\n if (this.disabled) return;\n const gain = +value;\n this.#media.remote.changeAudioGain(gain, trigger);\n this.dispatch(\"change\", { detail: gain, trigger });\n }\n}\nconst audiogainradiogroup__proto = AudioGainRadioGroup.prototype;\nprop(audiogainradiogroup__proto, \"value\");\nprop(audiogainradiogroup__proto, \"disabled\");\nmethod(audiogainradiogroup__proto, \"getOptions\");\n\nconst playerCallbacks = [\n \"onAbort\",\n \"onAudioTrackChange\",\n \"onAudioTracksChange\",\n \"onAutoPlay\",\n \"onAutoPlayChange\",\n \"onAutoPlayFail\",\n \"onCanLoad\",\n \"onCanPlay\",\n \"onCanPlayThrough\",\n \"onControlsChange\",\n \"onDestroy\",\n \"onDurationChange\",\n \"onEmptied\",\n \"onEnd\",\n \"onEnded\",\n \"onError\",\n \"onFindMediaPlayer\",\n \"onFullscreenChange\",\n \"onFullscreenError\",\n \"onLiveChange\",\n \"onLiveEdgeChange\",\n \"onLoadedData\",\n \"onLoadedMetadata\",\n \"onLoadStart\",\n \"onLoopChange\",\n \"onOrientationChange\",\n \"onPause\",\n \"onPictureInPictureChange\",\n \"onPictureInPictureError\",\n \"onPlay\",\n \"onPlayFail\",\n \"onPlaying\",\n \"onPlaysInlineChange\",\n \"onPosterChange\",\n \"onProgress\",\n \"onProviderChange\",\n \"onProviderLoaderChange\",\n \"onProviderSetup\",\n \"onQualitiesChange\",\n \"onQualityChange\",\n \"onRateChange\",\n \"onReplay\",\n \"onSeeked\",\n \"onSeeking\",\n \"onSourceChange\",\n \"onSourceChange\",\n \"onStalled\",\n \"onStarted\",\n \"onStreamTypeChange\",\n \"onSuspend\",\n \"onTextTrackChange\",\n \"onTextTracksChange\",\n \"onTimeUpdate\",\n \"onTitleChange\",\n \"onVdsLog\",\n \"onVideoPresentationChange\",\n \"onVolumeChange\",\n \"onWaiting\"\n];\n\nconst MediaPlayerBridge = createReactComponent(MediaPlayerInstance, {\n events: playerCallbacks,\n eventsRegex: /^onHls/,\n domEventsRegex: /^onMedia/\n});\nconst MediaPlayer = React.forwardRef(\n ({ aspectRatio, children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(\n MediaPlayerBridge,\n {\n ...props,\n src: props.src,\n ref: forwardRef,\n style: {\n aspectRatio,\n ...props.style\n }\n },\n (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children)\n );\n }\n);\nMediaPlayer.displayName = \"MediaPlayer\";\n\nconst MediaProviderBridge = createReactComponent(MediaProviderInstance);\nconst MediaProvider = React.forwardRef(\n ({ loaders = [], children, iframeProps, mediaProps, ...props }, forwardRef) => {\n const reactLoaders = React.useMemo(() => loaders.map((Loader) => new Loader()), loaders);\n return /* @__PURE__ */ React.createElement(MediaProviderBridge, { ...props, loaders: reactLoaders, ref: forwardRef }, (props2, instance) => /* @__PURE__ */ React.createElement(\"div\", { ...props2 }, /* @__PURE__ */ React.createElement(MediaOutlet, { provider: instance, mediaProps, iframeProps }), children));\n }\n);\nMediaProvider.displayName = \"MediaProvider\";\nfunction MediaOutlet({ provider, mediaProps, iframeProps }) {\n const { sources, crossOrigin, poster, remotePlaybackInfo, nativeControls, viewType } = useStateContext(mediaState), { loader } = provider.$state, { $provider: $$provider, $providerSetup: $$providerSetup } = useMediaContext$1(), $sources = useSignal(sources), $nativeControls = useSignal(nativeControls), $crossOrigin = useSignal(crossOrigin), $poster = useSignal(poster), $loader = useSignal(loader), $provider = useSignal($$provider), $providerSetup = useSignal($$providerSetup), $remoteInfo = useSignal(remotePlaybackInfo), $mediaType = $loader?.mediaType(), $viewType = useSignal(viewType), isAudioView = $viewType === \"audio\", isYouTubeEmbed = $loader?.name === \"youtube\", isVimeoEmbed = $loader?.name === \"vimeo\", isEmbed = isYouTubeEmbed || isVimeoEmbed, isRemotion = $loader?.name === \"remotion\", isGoogleCast = $loader?.name === \"google-cast\", [googleCastIconPaths, setGoogleCastIconPaths] = React.useState(\"\"), [hasMounted, setHasMounted] = React.useState(false);\n React.useEffect(() => {\n if (!isGoogleCast || googleCastIconPaths) return;\n import('./chunks/vidstack-CZgUA94N.js').then(function (n) { return n.chromecast; }).then((mod) => {\n setGoogleCastIconPaths(mod.default);\n });\n }, [isGoogleCast]);\n React.useEffect(() => {\n setHasMounted(true);\n }, []);\n if (isGoogleCast) {\n return /* @__PURE__ */ React.createElement(\n \"div\",\n {\n className: \"vds-google-cast\",\n ref: (el) => {\n provider.load(el);\n }\n },\n /* @__PURE__ */ React.createElement(Icon, { paths: googleCastIconPaths }),\n $remoteInfo?.deviceName ? /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-google-cast-info\" }, \"Google Cast on\", \" \", /* @__PURE__ */ React.createElement(\"span\", { className: \"vds-google-cast-device-name\" }, $remoteInfo.deviceName)) : null\n );\n }\n if (isRemotion) {\n return /* @__PURE__ */ React.createElement(\"div\", { \"data-remotion-canvas\": true }, /* @__PURE__ */ React.createElement(\n \"div\",\n {\n \"data-remotion-container\": true,\n ref: (el) => {\n provider.load(el);\n }\n },\n isRemotionProvider($provider) && $providerSetup ? React.createElement($provider.render) : null\n ));\n }\n return isEmbed ? React.createElement(\n React.Fragment,\n null,\n React.createElement(\"iframe\", {\n ...iframeProps,\n className: (iframeProps?.className ? `${iframeProps.className} ` : \"\") + isYouTubeEmbed ? \"vds-youtube\" : \"vds-vimeo\",\n suppressHydrationWarning: true,\n tabIndex: !$nativeControls ? -1 : void 0,\n \"aria-hidden\": \"true\",\n \"data-no-controls\": !$nativeControls ? \"\" : void 0,\n ref(el) {\n provider.load(el);\n }\n }),\n !$nativeControls && !isAudioView ? React.createElement(\"div\", { className: \"vds-blocker\" }) : null\n ) : $mediaType ? React.createElement($mediaType === \"audio\" ? \"audio\" : \"video\", {\n ...mediaProps,\n controls: $nativeControls ? true : null,\n crossOrigin: typeof $crossOrigin === \"boolean\" ? \"\" : $crossOrigin,\n poster: $mediaType === \"video\" && $nativeControls && $poster ? $poster : null,\n suppressHydrationWarning: true,\n children: !hasMounted ? $sources.map(\n ({ src, type }) => isString(src) ? /* @__PURE__ */ React.createElement(\"source\", { src, type: type !== \"?\" ? type : void 0, key: src }) : null\n ) : null,\n ref(el) {\n provider.load(el);\n }\n }) : null;\n}\nMediaOutlet.displayName = \"MediaOutlet\";\n\nfunction createTextTrack(init) {\n const media = useMediaContext$1(), track = React.useMemo(() => new TextTrack(init), Object.values(init));\n React.useEffect(() => {\n media.textTracks.add(track);\n return () => void media.textTracks.remove(track);\n }, [track]);\n return track;\n}\n\nfunction Track({ lang, ...props }) {\n createTextTrack({ language: lang, ...props });\n return null;\n}\nTrack.displayName = \"Track\";\n\nconst ToggleButtonBridge = createReactComponent(ToggleButtonInstance);\nconst ToggleButton = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(ToggleButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(\n Primitive.button,\n {\n ...props2,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n ));\n }\n);\nToggleButton.displayName = \"ToggleButton\";\n\nconst PosterBridge = createReactComponent(PosterInstance);\nconst Poster = React.forwardRef(\n ({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(\n PosterBridge,\n {\n src: props.asChild && React.isValidElement(children) ? children.props.src : void 0,\n ...props\n },\n (props2, instance) => /* @__PURE__ */ React.createElement(\n PosterImg,\n {\n ...props2,\n instance,\n ref: composeRefs(props2.ref, forwardRef)\n },\n children\n )\n );\n }\n);\nPoster.displayName = \"Poster\";\nconst PosterImg = React.forwardRef(\n ({ instance, children, ...props }, forwardRef) => {\n const { src, img, alt, crossOrigin, hidden } = instance.$state, $src = useSignal(src), $alt = useSignal(alt), $crossOrigin = useSignal(crossOrigin), $hidden = useSignal(hidden);\n return /* @__PURE__ */ React.createElement(\n Primitive.img,\n {\n ...props,\n src: $src || void 0,\n alt: $alt || void 0,\n crossOrigin: $crossOrigin || void 0,\n ref: composeRefs(img.set, forwardRef),\n style: { display: $hidden ? \"none\" : void 0 }\n },\n children\n );\n }\n);\nPosterImg.displayName = \"PosterImg\";\n\nconst Root = React.forwardRef(({ children, ...props }, forwardRef) => {\n return /* @__PURE__ */ React.createElement(\n Primitive.div,\n {\n translate: \"yes\",\n \"aria-live\": \"off\",\n \"aria-atomic\": \"true\",\n ...props,\n ref: forwardRef\n },\n children\n );\n});\nRoot.displayName = \"Caption\";\nconst Text = React.forwardRef((props, forwardRef) => {\n const textTrack = useMediaState(\"textTrack\"), [activeCue, setActiveCue] = React.useState();\n React.useEffect(() => {\n if (!textTrack) return;\n function onCueChange() {\n setActiveCue(textTrack?.activeCues[0]);\n }\n textTrack.addEventListener(\"cue-change\", onCueChange);\n return () => {\n textTrack.removeEventListener(\"cue-change\", onCueChange);\n setActiveCue(void 0);\n };\n }, [textTrack]);\n return /* @__PURE__ */ React.createElement(\n Primitive.span,\n {\n ...props,\n \"data-part\": \"cue\",\n dangerouslySetInnerHTML: {\n __html: activeCue?.text || \"\"\n },\n ref: forwardRef\n }\n );\n});\nText.displayName = \"CaptionText\";\n\nvar caption = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Root: Root,\n Text: Text\n});\n\nfunction useState(ctor, prop, ref) {\n const initialValue = React.useMemo(() => ctor.state.record[prop], [ctor, prop]);\n return useSignal(ref.current ? ref.current.$state[prop] : initialValue);\n}\nconst storesCache = /* @__PURE__ */ new Map();\nfunction useStore(ctor, ref) {\n const initialStore = React.useMemo(() => {\n let store = storesCache.get(ctor);\n if (!store) {\n store = new Proxy(ctor.state.record, {\n get: (_, prop) => () => ctor.state.record[prop]\n });\n storesCache.set(ctor, store);\n }\n return store;\n }, [ctor]);\n return useSignalRecord(ref.current ? ref.current.$state : initialStore);\n}\n\nfunction useMediaProvider() {\n const [provider, setProvider] = React.useState(null), context = useMediaContext$1();\n React.useEffect(() => {\n if (!context) return;\n return effect(() => {\n setProvider(context.$provider());\n });\n }, []);\n return provider;\n}\n\nfunction useThumbnails(src, crossOrigin = null) {\n useReactScope(); const $src = createSignal(src), $crossOrigin = createSignal(crossOrigin), loader = useScoped(() => ThumbnailsLoader.create($src, $crossOrigin));\n React.useEffect(() => {\n $src.set(src);\n }, [src]);\n React.useEffect(() => {\n $crossOrigin.set(crossOrigin);\n }, [crossOrigin]);\n return useSignal(loader.$images);\n}\nfunction useActiveThumbnail(thumbnails, time) {\n return React.useMemo(() => {\n let activeIndex = -1;\n for (let i = thumbnails.length - 1; i >= 0; i--) {\n const image = thumbnails[i];\n if (time >= image.startTime && (!image.endTime || time < image.endTime)) {\n activeIndex = i;\n break;\n }\n }\n return thumbnails[activeIndex] || null;\n }, [thumbnails, time]);\n}\n\nfunction useSliderPreview({\n clamp = false,\n offset = 0,\n orientation = \"horizontal\"\n} = {}) {\n const [rootRef, setRootRef] = React.useState(null), [previewRef, setPreviewRef] = React.useState(null), [pointerValue, setPointerValue] = React.useState(0), [isVisible, setIsVisible] = React.useState(false);\n React.useEffect(() => {\n if (!rootRef) return;\n const dragging = signal(false);\n function updatePointerValue(event) {\n if (!rootRef) return;\n setPointerValue(getPointerValue(rootRef, event, orientation));\n }\n return effect(() => {\n if (!dragging()) {\n new EventsController(rootRef).add(\"pointerenter\", () => {\n setIsVisible(true);\n previewRef?.setAttribute(\"data-visible\", \"\");\n }).add(\"pointerdown\", (event) => {\n dragging.set(true);\n updatePointerValue(event);\n }).add(\"pointerleave\", () => {\n setIsVisible(false);\n previewRef?.removeAttribute(\"data-visible\");\n }).add(\"pointermove\", updatePointerValue);\n }\n previewRef?.setAttribute(\"data-dragging\", \"\");\n new EventsController(document).add(\"pointerup\", (event) => {\n dragging.set(false);\n previewRef?.removeAttribute(\"data-dragging\");\n updatePointerValue(event);\n }).add(\"pointermove\", updatePointerValue).add(\"touchmove\", (e) => e.preventDefault(), { passive: false });\n });\n }, [rootRef]);\n React.useEffect(() => {\n if (previewRef) {\n previewRef.style.setProperty(\"--slider-pointer\", pointerValue + \"%\");\n }\n }, [previewRef, pointerValue]);\n React.useEffect(() => {\n if (!previewRef) return;\n const update = () => {\n updateSliderPreviewPlacement(previewRef, {\n offset,\n clamp,\n orientation\n });\n };\n update();\n const resize = new ResizeObserver(update);\n resize.observe(previewRef);\n return () => resize.disconnect();\n }, [previewRef, clamp, offset, orientation]);\n return {\n previewRootRef: setRootRef,\n previewRef: setPreviewRef,\n previewValue: pointerValue,\n isPreviewVisible: isVisible\n };\n}\nfunction getPointerValue(root, event, orientation) {\n let thumbPositionRate, rect = root.getBoundingClientRect();\n if (orientation === \"vertical\") {\n const { bottom: trackBottom, height: trackHeight } = rect;\n thumbPositionRate = (trackBottom - event.clientY) / trackHeight;\n } else {\n const { left: trackLeft, width: trackWidth } = rect;\n thumbPositionRate = (event.clientX - trackLeft) / trackWidth;\n }\n return round(Math.max(0, Math.min(100, 100 * thumbPositionRate)));\n}\nfunction round(num) {\n return Number(num.toFixed(3));\n}\n\nfunction useAudioGainOptions({\n gains = DEFAULT_AUDIO_GAINS,\n disabledLabel = \"disabled\"\n} = {}) {\n const media = useMediaContext$1(), { audioGain, canSetAudioGain } = media.$state;\n useSignal(audioGain);\n useSignal(canSetAudioGain);\n return React.useMemo(() => {\n const options = gains.map((opt) => {\n const label = typeof opt === \"number\" ? opt === 1 && disabledLabel ? disabledLabel : opt * 100 + \"%\" : opt.label, gain = typeof opt === \"number\" ? opt : opt.gain;\n return {\n label,\n value: gain.toString(),\n gain,\n get selected() {\n return audioGain() === gain;\n },\n select(trigger) {\n media.remote.changeAudioGain(gain, trigger);\n }\n };\n });\n Object.defineProperty(options, \"disabled\", {\n get() {\n return !canSetAudioGain() || !options.length;\n }\n });\n Object.defineProperty(options, \"selectedValue\", {\n get() {\n return audioGain()?.toString();\n }\n });\n return options;\n }, [gains]);\n}\n\nexport { caption as Caption, DEFAULT_AUDIO_GAINS, Icon, LibASSTextRenderer, Logger, MediaPlayer, MediaPlayerInstance, MediaProvider, MediaProviderInstance, Poster, PosterInstance, TextTrack, ToggleButton, ToggleButtonInstance, Track, createTextTrack, mediaState, useActiveThumbnail, useAudioGainOptions, useMediaContext$1 as useMediaContext, useMediaProvider, useMediaState, useSliderPreview, useState, useStore, useThumbnails };\n","import { Heart, Download, Share2, MessageCircle, Edit3, Trash2, Layers, Loader2, X } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { supabase } from \"@/integrations/supabase/client\";\r\nimport { useAuth } from \"@/hooks/useAuth\";\r\nimport { toast } from \"sonner\";\r\nimport { useState, useEffect, useRef } from \"react\";\r\nimport MarkdownRenderer from \"@/components/MarkdownRenderer\";\r\nimport { defaultLayoutIcons, DefaultVideoLayout } from '@vidstack/react/player/layouts/default';\r\nimport { useNavigate, useLocation } from \"react-router-dom\";\r\nimport { T, translate } from \"@/i18n\";\r\nimport type { MuxResolution } from \"@/types\";\r\nimport EditVideoModal from \"@/components/EditVideoModal\";\r\nimport { detectMediaType, MEDIA_TYPES } from \"@/lib/mediaRegistry\";\r\nimport UserAvatarBlock from \"@/components/UserAvatarBlock\";\r\nimport { formatDate, isLikelyFilename } from \"@/utils/textUtils\";\r\n\r\nimport {\r\n MediaPlayer, MediaProvider, type MediaPlayerInstance\r\n} from '@vidstack/react';\r\n\r\n// Import Vidstack styles\r\nimport '@vidstack/react/player/styles/default/theme.css';\r\nimport '@vidstack/react/player/styles/default/layouts/video.css';\r\n\r\ninterface VideoCardProps {\r\n videoId: string;\r\n videoUrl: string;\r\n thumbnailUrl?: string;\r\n title: string;\r\n author: string;\r\n authorId: string;\r\n likes: number;\r\n comments: number;\r\n isLiked?: boolean;\r\n description?: string | null;\r\n onClick?: (videoId: string) => void;\r\n onLike?: () => void;\r\n onDelete?: () => void;\r\n maxResolution?: MuxResolution;\r\n authorAvatarUrl?: string | null;\r\n showContent?: boolean;\r\n\r\n created_at?: string;\r\n job?: any;\r\n variant?: 'grid' | 'feed';\r\n showPlayButton?: boolean;\r\n apiUrl?: string;\r\n}\r\n\r\nconst VideoCard = ({\r\n videoId,\r\n videoUrl,\r\n thumbnailUrl,\r\n title,\r\n author,\r\n authorId,\r\n likes,\r\n comments,\r\n isLiked = false,\r\n description,\r\n onClick,\r\n onLike,\r\n onDelete,\r\n maxResolution = '270p',\r\n authorAvatarUrl,\r\n showContent = true,\r\n showPlayButton = false,\r\n\r\n created_at,\r\n job,\r\n variant = 'grid',\r\n apiUrl\r\n}: VideoCardProps) => {\r\n const { user } = useAuth();\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n const [localIsLiked, setLocalIsLiked] = useState(isLiked);\r\n const [localLikes, setLocalLikes] = useState(likes);\r\n const [isDeleting, setIsDeleting] = useState(false);\r\n const [versionCount, setVersionCount] = useState<number>(0);\r\n const [isPlaying, setIsPlaying] = useState(false);\r\n const [showEditModal, setShowEditModal] = useState(false);\r\n const player = useRef<MediaPlayerInstance>(null);\r\n\r\n // Stop playback on navigation & Cleanup\r\n useEffect(() => {\r\n console.log(`[VideoCard ${videoId}] Mounted`);\r\n const handleNavigation = () => {\r\n if (isPlaying) {\r\n console.log(`[VideoCard ${videoId}] Navigation detected - stopping`);\r\n }\r\n setIsPlaying(false);\r\n player.current?.pause();\r\n };\r\n\r\n handleNavigation();\r\n\r\n return () => {\r\n console.log(`[VideoCard ${videoId}] Unmounting - pausing player`);\r\n player.current?.pause();\r\n };\r\n }, [location.pathname]);\r\n const [processingStatus, setProcessingStatus] = useState<'active' | 'completed' | 'failed' | 'unknown'>('unknown');\r\n const [progress, setProgress] = useState(0);\r\n const [videoMeta, setVideoMeta] = useState<any>(null);\r\n\r\n const isOwner = user?.id === authorId;\r\n const mediaType = detectMediaType(videoUrl);\r\n const isInternalVideo = mediaType === MEDIA_TYPES.VIDEO_INTERN;\r\n\r\n // Handle poster URL based on media type\r\n const posterUrl = (() => {\r\n if (!thumbnailUrl) return undefined;\r\n\r\n if (isInternalVideo) {\r\n return thumbnailUrl; // Use direct thumbnail for internal videos\r\n }\r\n\r\n // Default to Mux behavior\r\n return `${thumbnailUrl}?width=640&height=640&fit_mode=smartcrop&time=0`;\r\n })();\r\n\r\n // Add max_resolution query parameter to video URL for bandwidth optimization\r\n // See: https://www.mux.com/docs/guides/control-playback-resolution\r\n const getVideoUrlWithResolution = (url: string) => {\r\n if (isInternalVideo) return url; // Internal videos handle quality differently (via HLS/presets in future)\r\n\r\n try {\r\n const urlObj = new URL(url);\r\n urlObj.searchParams.set('max_resolution', maxResolution);\r\n return urlObj.toString();\r\n } catch {\r\n // If URL parsing fails, append as query string\r\n const separator = url.includes('?') ? '&' : '?';\r\n return `${url}${separator}max_resolution=${maxResolution}`;\r\n }\r\n };\r\n\r\n const playbackUrl = getVideoUrlWithResolution(videoUrl);\r\n\r\n // Fetch version count for owners only\r\n useEffect(() => {\r\n const fetchVersionCount = async () => {\r\n if (!isOwner || !user) return;\r\n return;\r\n };\r\n\r\n fetchVersionCount();\r\n\r\n }, [videoId, isOwner, user]);\r\n\r\n // Handle Video Processing Status (SSE)\r\n useEffect(() => {\r\n if (!isInternalVideo) return;\r\n\r\n // 1. Use verified job data from server if available (e.g. from Feed)\r\n if (job) {\r\n if (job.status === 'completed') {\r\n setProcessingStatus('completed');\r\n // If we have a verified resultUrl, we might want to use it? \r\n // But the parent component passes `videoUrl`, so we assume parent updated it or logic below handles it.\r\n return;\r\n }\r\n if (job.status === 'failed') {\r\n setProcessingStatus('failed');\r\n return;\r\n }\r\n // If active, we fall through to start SSE below, but init state first\r\n setProcessingStatus('active');\r\n setProgress(job.progress || 0);\r\n }\r\n\r\n // Extract Job ID from URL\r\n // Format: .../api/videos/jobs/:jobId/... (regex: /api/videos/jobs/([^/]+)\\//)\r\n const match = videoUrl.match(/\\/api\\/videos\\/jobs\\/([^\\/]+)\\//) || (job ? [null, job.id] : null);\r\n if (!match) return;\r\n\r\n const jobId = match[1];\r\n\r\n // Use VITE_SERVER_IMAGE_API_URL or default. Do NOT infer from videoUrl if it logic fails.\r\n let baseUrl = import.meta.env.VITE_SERVER_IMAGE_API_URL || 'http://localhost:3333';\r\n\r\n // Fallback: If videoUrl is internal (same origin), use that origin. \r\n // But for Supabase URLs, we MUST use the API server URL.\r\n if (videoUrl.startsWith('/') || videoUrl.includes(window.location.origin)) {\r\n baseUrl = window.location.origin;\r\n }\r\n\r\n let eventSource: EventSource | null = null;\r\n let isMounted = true;\r\n\r\n const checkStatusAndConnect = async () => {\r\n if (!jobId) return;\r\n try {\r\n const res = await fetch(`${baseUrl}/api/videos/jobs/${jobId}`);\r\n if (!res.ok) throw new Error('Failed to fetch job');\r\n const data = await res.json();\r\n\r\n if (!isMounted) return;\r\n\r\n if (data.status === 'completed') {\r\n setProcessingStatus('completed');\r\n return;\r\n } else if (data.status === 'failed') {\r\n setProcessingStatus('failed');\r\n return;\r\n }\r\n\r\n // Only connect SSE if still active/created/waiting\r\n setProcessingStatus('active');\r\n const sseUrl = `${baseUrl}/api/videos/jobs/${jobId}/progress`;\r\n eventSource = new EventSource(sseUrl);\r\n\r\n eventSource.addEventListener('progress', (e) => {\r\n if (!isMounted) return;\r\n try {\r\n const data = JSON.parse((e as MessageEvent).data);\r\n if (data.progress !== undefined) {\r\n setProgress(Math.round(data.progress));\r\n }\r\n if (data.status) {\r\n if (data.status === 'completed') {\r\n setProcessingStatus('completed');\r\n eventSource?.close();\r\n } else if (data.status === 'failed') {\r\n setProcessingStatus('failed');\r\n eventSource?.close();\r\n } else {\r\n setProcessingStatus('active');\r\n }\r\n }\r\n } catch (err) {\r\n console.error('SSE Parse Error', err);\r\n }\r\n });\r\n\r\n eventSource.onerror = (e) => {\r\n eventSource?.close();\r\n // Fallback check handled by initial check logic or user refresh\r\n // But we can retry once\r\n };\r\n\r\n } catch (error) {\r\n console.error('Error checking video status:', error);\r\n if (isMounted) setProcessingStatus('unknown');\r\n }\r\n };\r\n\r\n checkStatusAndConnect();\r\n\r\n return () => {\r\n isMounted = false;\r\n if (eventSource) {\r\n eventSource.close();\r\n }\r\n };\r\n }, [isInternalVideo, videoUrl, job]);\r\n\r\n const handleCancelProcessing = async (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n if (!confirm('Cancel this upload?')) return;\r\n\r\n const match = videoUrl.match(/\\/api\\/videos\\/jobs\\/([^\\/]+)\\//);\r\n if (!match) return;\r\n\r\n const jobId = match[1];\r\n\r\n // Use VITE_SERVER_IMAGE_API_URL or default\r\n let baseUrl = import.meta.env.VITE_SERVER_IMAGE_API_URL || 'http://localhost:3333';\r\n\r\n if (videoUrl.startsWith('/') || videoUrl.includes(window.location.origin)) {\r\n baseUrl = window.location.origin;\r\n }\r\n\r\n try {\r\n await fetch(`${baseUrl}/api/videos/jobs/${jobId}`, {\r\n method: 'DELETE'\r\n });\r\n toast.info(translate('Upload cancelled'));\r\n // Trigger delete to remove from UI\r\n onDelete?.();\r\n } catch (err) {\r\n console.error('Failed to cancel', err);\r\n toast.error(translate('Failed to cancel upload'));\r\n }\r\n };\r\n\r\n\r\n const handleLike = async (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n\r\n if (!user) {\r\n toast.error(translate('Please sign in to like videos'));\r\n return;\r\n }\r\n\r\n try {\r\n if (localIsLiked) {\r\n // Unlike - need to implement video likes table\r\n toast.info('Video likes coming soon');\r\n } else {\r\n // Like - need to implement video likes table\r\n toast.info('Video likes coming soon');\r\n }\r\n\r\n onLike?.();\r\n } catch (error) {\r\n console.error('Error toggling like:', error);\r\n toast.error(translate('Failed to update like'));\r\n }\r\n };\r\n\r\n const handleDelete = async (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n\r\n if (!user || !isOwner) {\r\n toast.error(translate('You can only delete your own videos'));\r\n return;\r\n }\r\n\r\n if (!confirm(translate('Are you sure you want to delete this video? This action cannot be undone.'))) {\r\n return;\r\n }\r\n\r\n setIsDeleting(true);\r\n try {\r\n // First get the video details for storage cleanup\r\n const { data: video, error: fetchError } = await supabase\r\n .from('pictures')\r\n .select('image_url')\r\n .eq('id', videoId)\r\n .single();\r\n\r\n if (fetchError) throw fetchError;\r\n\r\n // Delete from database (this will cascade delete likes and comments due to foreign keys)\r\n const { error: deleteError } = await supabase\r\n .from('pictures')\r\n .delete()\r\n .eq('id', videoId);\r\n\r\n if (deleteError) throw deleteError;\r\n\r\n // Try to delete from storage as well (videos use image_url field for HLS URL)\r\n if (video?.image_url) {\r\n const urlParts = video.image_url.split('/');\r\n const fileName = urlParts[urlParts.length - 1];\r\n const userIdFromUrl = urlParts[urlParts.length - 2];\r\n\r\n const { error: storageError } = await supabase.storage\r\n .from('videos')\r\n .remove([`${userIdFromUrl}/${fileName}`]);\r\n\r\n if (storageError) {\r\n console.error('Error deleting from storage:', storageError);\r\n // Don't show error to user as the main deletion succeeded\r\n }\r\n }\r\n\r\n toast.success(translate('Video deleted successfully'));\r\n onDelete?.(); // Trigger refresh of the parent component\r\n } catch (error) {\r\n console.error('Error deleting video:', error);\r\n toast.error(translate('Failed to delete video'));\r\n } finally {\r\n setIsDeleting(false);\r\n }\r\n };\r\n\r\n const handleDownload = async () => {\r\n try {\r\n const link = document.createElement('a');\r\n link.href = videoUrl;\r\n link.download = `${title}.mp4`;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n toast.success(translate('Video download started'));\r\n } catch (error) {\r\n console.error('Error downloading video:', error);\r\n toast.error(translate('Failed to download video'));\r\n }\r\n };\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n console.log('Video clicked');\r\n e.preventDefault();\r\n e.stopPropagation();\r\n onClick?.(videoId);\r\n };\r\n\r\n // Handle global stop-video event\r\n useEffect(() => {\r\n const handleStopVideo = (e: Event) => {\r\n const customEvent = e as CustomEvent;\r\n if (customEvent.detail?.sourceId !== videoId && isPlaying) {\r\n console.log(`[VideoCard ${videoId}] Stopping due to global event`);\r\n setIsPlaying(false);\r\n player.current?.pause();\r\n }\r\n };\r\n\r\n window.addEventListener('stop-video', handleStopVideo);\r\n return () => window.removeEventListener('stop-video', handleStopVideo);\r\n }, [isPlaying, videoId]);\r\n\r\n const handlePlayClick = (e: React.MouseEvent) => {\r\n console.log('Play clicked');\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n // Stop other videos\r\n window.dispatchEvent(new CustomEvent('stop-video', { detail: { sourceId: videoId } }));\r\n\r\n setIsPlaying(true);\r\n };\r\n\r\n return (\r\n <div\r\n data-testid=\"video-card\"\r\n className=\"group relative overflow-hidden bg-card transition-all duration-300 cursor-pointer w-full\"\r\n onClick={handleClick}\r\n >\r\n {/* Video Player - usage square aspect to match PhotoCard unless variant is feed */}\r\n <div className={`${variant === 'grid' ? \"aspect-square\" : \"w-full\"} overflow-hidden relative`}>\r\n {!isPlaying ? (\r\n // Show thumbnail with play button overlay\r\n <>\r\n <img\r\n src={posterUrl || '/placeholder.svg'}\r\n alt={title}\r\n className=\"w-full h-full object-cover\"\r\n />\r\n {/* Processing Overlay */}\r\n {isInternalVideo && processingStatus !== 'completed' && processingStatus !== 'unknown' && (\r\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-black/60 z-10\">\r\n {processingStatus === 'failed' ? (\r\n <div className=\"text-red-500 flex flex-col items-center\">\r\n <span className=\"text-sm font-medium\">Processing Failed</span>\r\n </div>\r\n ) : (\r\n <div className=\"flex flex-col items-center text-white space-y-2\">\r\n <Loader2 className=\"w-8 h-8 animate-spin text-primary\" />\r\n\r\n <span className=\"text-xs font-medium\">Processing {progress}%</span>\r\n <Button\r\n size=\"sm\"\r\n variant=\"destructive\"\r\n className=\"h-6 text-xs mt-2\"\r\n onClick={handleCancelProcessing}\r\n >\r\n <X className=\"w-3 h-3 mr-1\" /> Cancel\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Play Button Overlay */}\r\n {showPlayButton && (!isInternalVideo || processingStatus === 'completed' || processingStatus === 'unknown') && (\r\n <button\r\n onClick={handlePlayClick}\r\n className=\"absolute inset-0 flex items-center justify-center bg-black/30 hover:bg-black/40 transition-colors group\"\r\n aria-label=\"Play video\"\r\n >\r\n <div className=\"w-16 h-16 rounded-full bg-white/90 flex items-center justify-center group-hover:bg-white group-hover:scale-110 transition-all\">\r\n <svg\r\n className=\"w-8 h-8 text-black ml-1\"\r\n fill=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path d=\"M8 5v14l11-7z\" />\r\n </svg>\r\n </div>\r\n </button>\r\n )}\r\n </>\r\n ) : (\r\n // Show MediaPlayer when playing\r\n <MediaPlayer\r\n key={videoId}\r\n ref={player}\r\n title={title}\r\n src={\r\n playbackUrl.includes('.m3u8')\r\n ? { src: playbackUrl, type: 'application/x-mpegurl' }\r\n : (job?.resultUrl && job.status === 'completed')\r\n ? { src: job.resultUrl, type: 'application/x-mpegurl' }\r\n : playbackUrl.includes('/api/videos/jobs')\r\n ? { src: playbackUrl, type: 'video/mp4' }\r\n : playbackUrl\r\n }\r\n poster={posterUrl}\r\n fullscreenOrientation=\"any\"\r\n controls\r\n playsInline\r\n className={`w-full ${variant === 'grid' ? \"h-full\" : \"\"}`}\r\n >\r\n <MediaProvider />\r\n <DefaultVideoLayout icons={defaultLayoutIcons} />\r\n </MediaPlayer>\r\n )}\r\n </div>\r\n\r\n {/* Desktop Hover Overlay - hidden on mobile, and hidden in feed variant. Also hidden when playing to avoid blocking controls. */}\r\n {showContent && variant === 'grid' && !isPlaying && (\r\n <div className=\"hidden md:block absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none\">\r\n <div className=\"absolute bottom-0 left-0 right-0 p-4 pointer-events-auto\">\r\n <div className=\"flex items-center justify-between mb-2\">\r\n <div className=\"flex items-center space-x-2\">\r\n <UserAvatarBlock\r\n userId={authorId}\r\n avatarUrl={authorAvatarUrl}\r\n displayName={author}\r\n hoverStyle={true}\r\n showDate={false}\r\n />\r\n </div>\r\n <div className=\"flex items-center space-x-1\">\r\n <Button\r\n size=\"sm\"\r\n variant=\"ghost\"\r\n onClick={handleLike}\r\n className={`h-8 w-8 p-0 ${localIsLiked ? \"text-red-500\" : \"text-white hover:text-red-500\"\r\n }`}\r\n >\r\n <Heart className=\"h-4 w-4\" fill={localIsLiked ? \"currentColor\" : \"none\"} />\r\n </Button>\r\n <span className=\"text-white text-sm\">{localLikes}</span>\r\n\r\n <Button\r\n size=\"sm\"\r\n variant=\"ghost\"\r\n className=\"h-8 w-8 p-0 text-white hover:text-blue-400 ml-2\"\r\n >\r\n <MessageCircle className=\"h-4 w-4\" />\r\n </Button>\r\n <span className=\"text-white text-sm\">{comments}</span>\r\n\r\n {isOwner && (\r\n <>\r\n <Button\r\n size=\"sm\"\r\n variant=\"ghost\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setShowEditModal(true);\r\n }}\r\n className=\"h-8 w-8 p-0 text-white hover:text-green-400 ml-2\"\r\n >\r\n <Edit3 className=\"h-4 w-4\" />\r\n </Button>\r\n\r\n <Button\r\n size=\"sm\"\r\n variant=\"ghost\"\r\n onClick={handleDelete}\r\n disabled={isDeleting}\r\n className=\"h-8 w-8 p-0 text-white hover:text-red-400 ml-2\"\r\n >\r\n <Trash2 className=\"h-4 w-4\" />\r\n </Button>\r\n\r\n {versionCount > 1 && (\r\n <div className=\"flex items-center ml-2 px-2 py-1 bg-white/20 rounded text-white text-xs\">\r\n <Layers className=\"h-3 w-3 mr-1\" />\r\n {versionCount}\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <h3 className=\"text-white font-medium mb-1\">{title}</h3>\r\n {description && (\r\n <div className=\"text-white/80 text-sm mb-3 line-clamp-3 overflow-hidden\">\r\n <MarkdownRenderer content={description} className=\"prose-invert prose-white\" />\r\n </div>\r\n )}\r\n\r\n <div className=\"flex items-center space-x-1\">\r\n <Button\r\n size=\"sm\"\r\n variant=\"secondary\"\r\n className=\"h-6 px-2 text-xs bg-white/20 hover:bg-white/30 border-0 text-white\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleDownload();\r\n }}\r\n >\r\n <Download className=\"h-3 w-3 mr-1\" />\r\n <T>Download</T>\r\n </Button>\r\n <Button size=\"sm\" variant=\"secondary\" className=\"h-6 w-6 p-0 bg-white/20 hover:bg-white/30 border-0 text-white\">\r\n <Share2 className=\"h-2.5 w-2.5\" />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Mobile/Feed Content - always visible below video */}\r\n {showContent && (variant === 'feed' || (variant === 'grid' && true)) && (\r\n <div className={`${variant === 'grid' ? \"md:hidden\" : \"\"} pb-2 space-y-2`}>\r\n {/* Row 1: Avatar + Actions */}\r\n <div className=\"flex items-center justify-between px-2 pt-2\">\r\n <UserAvatarBlock\r\n userId={authorId}\r\n avatarUrl={authorAvatarUrl}\r\n displayName={author === 'User' ? undefined : author}\r\n className=\"w-8 h-8\"\r\n showDate={false}\r\n />\r\n\r\n <div className=\"flex items-center gap-1\">\r\n <Button\r\n size=\"icon\"\r\n variant=\"ghost\"\r\n onClick={handleLike}\r\n className={localIsLiked ? \"text-red-500 hover:text-red-600\" : \"\"}\r\n >\r\n <Heart className=\"h-6 w-6\" fill={localIsLiked ? \"currentColor\" : \"none\"} />\r\n </Button>\r\n {localLikes > 0 && (\r\n <span className=\"text-sm font-medium text-foreground mr-1\">{localLikes}</span>\r\n )}\r\n\r\n <Button\r\n size=\"icon\"\r\n variant=\"ghost\"\r\n className=\"text-foreground\"\r\n >\r\n <MessageCircle className=\"h-6 w-6 -rotate-90\" />\r\n </Button>\r\n {comments > 0 && (\r\n <span className=\"text-sm font-medium text-foreground mr-1\">{comments}</span>\r\n )}\r\n\r\n <Button\r\n size=\"icon\"\r\n variant=\"ghost\"\r\n className=\"text-foreground\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleDownload();\r\n }}\r\n >\r\n <Download className=\"h-6 w-6\" />\r\n </Button>\r\n\r\n {isOwner && (\r\n <>\r\n <Button\r\n size=\"icon\"\r\n variant=\"ghost\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setShowEditModal(true);\r\n }}\r\n className=\"text-foreground hover:text-green-400\"\r\n >\r\n <Edit3 className=\"h-6 w-6\" />\r\n </Button>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Likes */}\r\n\r\n\r\n {/* Caption / Description section */}\r\n <div className=\"px-4 space-y-1\">\r\n {(!isLikelyFilename(title) && title) && (\r\n <div className=\"font-semibold text-sm\">{title}</div>\r\n )}\r\n\r\n {description && (\r\n <div className=\"text-sm text-foreground/90 line-clamp-3 pl-8\">\r\n <MarkdownRenderer content={description} className=\"prose-sm dark:prose-invert\" />\r\n </div>\r\n )}\r\n\r\n {created_at && (\r\n <div className=\"text-xs text-muted-foreground pt-1\">\r\n {formatDate(created_at)}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {showEditModal && (\r\n <EditVideoModal\r\n open={showEditModal}\r\n onOpenChange={setShowEditModal}\r\n videoId={videoId}\r\n currentTitle={title}\r\n currentDescription={description || null}\r\n currentVisible={true} // Default to true until we can properly pass this\r\n onUpdateSuccess={() => {\r\n setShowEditModal(false);\r\n onDelete?.(); // Trigger refresh\r\n }}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default VideoCard;\r\n","import { supabase } from \"@/integrations/supabase/client\";\nimport { filterPrivateCollectionPictures } from \"@/utils/collectionUtils\";\n\nexport interface MediaItem {\n id: string;\n type: 'picture' | 'video' | 'page-external';\n title: string;\n description: string | null;\n url: string; // image_url or video_url\n thumbnail_url: string | null;\n likes_count: number;\n created_at: string;\n user_id: string;\n comments_count: number;\n meta?: any;\n}\n\ninterface FetchMediaOptions {\n organizationId?: string | null;\n includePrivate?: boolean;\n limit?: number;\n userId?: string; // Filter by specific user\n tag?: string; // Filter by tag\n}\n\n/**\n * Fetches and merges pictures and videos from the database\n * Returns a unified array of media items sorted by created_at\n */\nexport async function fetchMediaItems(options: FetchMediaOptions = {}): Promise<MediaItem[]> {\n const { organizationId, includePrivate = false, limit, userId, tag } = options;\n\n try {\n // Fetch pictures\n let picturesQuery = supabase\n .from('pictures')\n .select('*')\n .eq('is_selected', true)\n .eq('visible', true);\n\n // Apply filters\n if (organizationId !== undefined) {\n if (organizationId === null) {\n picturesQuery = picturesQuery.is('organization_id', null);\n } else {\n picturesQuery = picturesQuery.eq('organization_id', organizationId);\n }\n }\n\n if (userId) {\n picturesQuery = picturesQuery.eq('user_id', userId);\n }\n\n if (tag) {\n picturesQuery = picturesQuery.contains('tags', [tag]);\n }\n\n const { data: picturesData, error: picturesError } = await picturesQuery\n .order('created_at', { ascending: false });\n\n if (picturesError) throw picturesError;\n\n // Filter private collections if needed\n const publicPictures = includePrivate\n ? (picturesData || [])\n : await filterPrivateCollectionPictures(picturesData || []);\n\n // Get comment counts for pictures\n const picturesWithComments = await Promise.all(\n publicPictures.map(async (picture) => {\n const { count } = await supabase\n .from('comments')\n .select('*', { count: 'exact', head: true })\n .eq('picture_id', picture.id);\n\n return { ...picture, comments_count: count || 0 };\n })\n );\n\n // Convert to unified MediaItem format\n // Videos have type='mux-video' or type='video', everything else is a picture\n const allMedia: MediaItem[] = picturesWithComments.map(p => {\n const isLegacyVideo = p.type === 'video-intern';\n let url = p.image_url; // Default for pictures\n if (isLegacyVideo) {\n url = p.image_url;\n }\n\n return {\n id: p.id,\n type: isLegacyVideo ? 'video' as const : 'picture' as const,\n title: p.title,\n description: p.description,\n url: url, // Use the constructed URL\n thumbnail_url: p.thumbnail_url,\n likes_count: p.likes_count || 0,\n created_at: p.created_at,\n user_id: p.user_id,\n comments_count: p.comments_count,\n meta: p.meta,\n };\n }).sort(\n (a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()\n );\n\n // Apply limit if specified\n return limit ? allMedia.slice(0, limit) : allMedia;\n } catch (error) {\n console.error('Error fetching media items:', error);\n throw error;\n }\n}\n\n/**\n * Fetches user likes for all media (both pictures and videos)\n * Note: Videos are also stored in the pictures table with type='mux-video'\n */\nexport async function fetchUserMediaLikes(userId: string): Promise<{\n pictureLikes: Set<string>;\n videoLikes: Set<string>;\n}> {\n try {\n // Fetch all likes (both pictures and videos are in the same table)\n const { data: likesData, error: likesError } = await supabase\n .from('likes')\n .select('picture_id')\n .eq('user_id', userId);\n\n if (likesError) throw likesError;\n\n // Since videos are also in the pictures table, all likes are in picture_id\n const allLikedIds = new Set(likesData?.map(like => like.picture_id) || []);\n\n return {\n pictureLikes: allLikedIds,\n videoLikes: allLikedIds, // Same set since videos are also in pictures table\n };\n } catch (error) {\n console.error('Error fetching user likes:', error);\n throw error;\n }\n}\n\n\n/**\n * Checks if a given URL is a TikTok URL\n */\nexport function isTikTokUrl(url: string | null | undefined): boolean {\n if (!url) return false;\n return url.includes('tiktok.com');\n}\n\n/**\n * Extracts YouTube Video ID from various URL formats\n */\nexport function getYouTubeVideoId(url: string | null | undefined): string | null {\n if (!url) return null;\n\n // Regular expressions for different YouTube URL formats\n const regExp = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n const match = url.match(regExp);\n\n return (match && match[2].length === 11) ? match[2] : null;\n}\n\n/**\n * Extracts TikTok Video ID\n */\nexport function getTikTokVideoId(url: string | null | undefined): string | null {\n if (!url) return null;\n try {\n const urlObj = new URL(url);\n if (urlObj.hostname.includes('tiktok.com') && urlObj.pathname.includes('/video/')) {\n const parts = urlObj.pathname.split('/video/');\n if (parts.length > 1) {\n return parts[1].split(/[?#]/)[0];\n }\n }\n } catch {\n return null;\n }\n return null;\n}\n","import React from 'react';\r\nimport { FileText, Heart, MessageCircle, Maximize, Play } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport ResponsiveImage from \"@/components/ResponsiveImage\";\r\nimport UserAvatarBlock from \"@/components/UserAvatarBlock\";\r\nimport MarkdownRenderer from \"@/components/MarkdownRenderer\";\r\nimport type { MediaRendererProps } from \"@/lib/mediaRegistry\";\r\nimport { getTikTokVideoId, getYouTubeVideoId } from \"@/utils/mediaUtils\";\r\n\r\ninterface PageCardProps extends Omit<MediaRendererProps, 'created_at'> {\r\n variant?: 'grid' | 'feed';\r\n responsive?: any;\r\n showContent?: boolean;\r\n authorAvatarUrl?: string | null;\r\n created_at?: string;\r\n apiUrl?: string;\r\n}\r\n\r\nconst PageCard: React.FC<PageCardProps> = ({\r\n id,\r\n url,\r\n thumbnailUrl,\r\n title,\r\n author,\r\n authorId,\r\n authorAvatarUrl,\r\n likes,\r\n comments,\r\n isLiked,\r\n description,\r\n onClick,\r\n onLike,\r\n created_at,\r\n variant = 'grid',\r\n responsive,\r\n showContent = true,\r\n apiUrl\r\n}) => {\r\n // Determine image source\r\n // If url is missing or empty, fallback to picsum\r\n // For PAGE_EXTERNAL, currently 'url' is the link and 'thumbnailUrl' is the image.\r\n const displayImage = thumbnailUrl || url || \"https://picsum.photos/640\";\r\n const [isPlaying, setIsPlaying] = React.useState(false);\r\n\r\n // Check for External Video Types\r\n const tikTokId = getTikTokVideoId(url);\r\n const ytId = getYouTubeVideoId(url);\r\n const isExternalVideo = !!(tikTokId || ytId);\r\n\r\n\r\n // Use thumbnail if available and preferred (logic from MediaCard usually handles this before passing url, \r\n // but here we ensure we have *something*).\r\n\r\n const handleLike = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n onLike?.();\r\n };\r\n\r\n const handleCardClick = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n onClick?.(id);\r\n };\r\n\r\n if (variant === 'feed') {\r\n return (\r\n <div\r\n className=\"group relative overflow-hidden bg-card transition-all duration-300 cursor-pointer w-full border rounded-lg mb-4\"\r\n onClick={handleCardClick}\r\n >\r\n <div className=\"p-4 border-b flex items-center justify-between\">\r\n <UserAvatarBlock\r\n userId={authorId}\r\n avatarUrl={authorAvatarUrl}\r\n displayName={author}\r\n className=\"w-8 h-8\"\r\n showDate={true}\r\n createdAt={created_at}\r\n />\r\n </div>\r\n\r\n <div className={`relative w-full ${tikTokId ? 'aspect-[9/16]' : 'aspect-[16/9]'} overflow-hidden bg-muted`}>\r\n {isPlaying && isExternalVideo ? (\r\n <div className=\"w-full h-full bg-black flex justify-center\">\r\n <iframe\r\n src={tikTokId\r\n ? `https://www.tiktok.com/embed/v2/${tikTokId}`\r\n : `https://www.youtube.com/embed/${ytId}?autoplay=1`\r\n }\r\n className=\"w-full h-full border-0\"\r\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\r\n allowFullScreen\r\n title={title}\r\n ></iframe>\r\n </div>\r\n ) : (\r\n <>\r\n <ResponsiveImage\r\n src={displayImage}\r\n alt={title}\r\n className=\"w-full h-full\"\r\n imgClassName=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\r\n sizes=\"100vw\"\r\n data={responsive}\r\n apiUrl={apiUrl}\r\n />\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none\">\r\n {isExternalVideo ? (\r\n <div\r\n className=\"bg-black/50 p-4 rounded-full backdrop-blur-sm pointer-events-auto cursor-pointer hover:bg-black/70 transition-colors\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setIsPlaying(true);\r\n }}\r\n >\r\n <Play className=\"w-8 h-8 text-white fill-white\" />\r\n </div>\r\n ) : (\r\n <div className=\"bg-black/50 p-4 rounded-full backdrop-blur-sm\">\r\n <FileText className=\"w-8 h-8 text-white\" />\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n\r\n <div className=\"p-4 space-y-2\">\r\n <div className=\"flex items-center justify-between\">\r\n <h3 className=\"text-xl font-semibold\">{title}</h3>\r\n </div>\r\n\r\n {description && (\r\n <div className=\"text-sm text-foreground/90 line-clamp-3\">\r\n <MarkdownRenderer content={description} className=\"prose-sm dark:prose-invert\" />\r\n </div>\r\n )}\r\n\r\n <div className=\"flex items-center gap-4 pt-2\">\r\n <Button size=\"sm\" variant=\"ghost\" className=\"px-0 gap-1\" onClick={handleLike}>\r\n <Heart className={`h-5 w-5 ${isLiked ? \"fill-red-500 text-red-500\" : \"\"}`} />\r\n <span>{likes}</span>\r\n </Button>\r\n <Button size=\"sm\" variant=\"ghost\" className=\"px-0 gap-1\">\r\n <MessageCircle className=\"h-5 w-5\" />\r\n <span>{comments}</span>\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Grid Variant\r\n return (\r\n <div\r\n className={`group relative overflow-hidden bg-card transition-all duration-300 cursor-pointer w-full ${isPlaying && tikTokId ? 'aspect-[9/16]' : 'aspect-square'}`}\r\n onClick={(e) => {\r\n if (isExternalVideo && !isPlaying) {\r\n e.stopPropagation();\r\n setIsPlaying(true);\r\n } else {\r\n handleCardClick(e);\r\n }\r\n }}\r\n >\r\n {isPlaying && isExternalVideo ? (\r\n <div className=\"w-full h-full bg-black flex justify-center\">\r\n <iframe\r\n src={tikTokId\r\n ? `https://www.tiktok.com/embed/v2/${tikTokId}`\r\n : `https://www.youtube.com/embed/${ytId}?autoplay=1`\r\n }\r\n className=\"w-full h-full border-0\"\r\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\r\n allowFullScreen\r\n title={title}\r\n ></iframe>\r\n </div>\r\n ) : (\r\n <>\r\n <ResponsiveImage\r\n src={displayImage}\r\n alt={title}\r\n className=\"w-full h-full\"\r\n imgClassName=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\r\n sizes=\"(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw\"\r\n responsiveSizes={[320, 640, 1024]}\r\n data={responsive}\r\n apiUrl={apiUrl}\r\n />\r\n\r\n <div className=\"absolute top-2 right-2 p-1.5 bg-black/60 rounded-md backdrop-blur-sm z-10\">\r\n {isExternalVideo ? (\r\n <Play className=\"w-4 h-4 text-white fill-white\" />\r\n ) : (\r\n <FileText className=\"w-4 h-4 text-white\" />\r\n )}\r\n </div>\r\n\r\n {isExternalVideo && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none\">\r\n <div className=\"bg-black/50 p-3 rounded-full backdrop-blur-sm group-hover:bg-black/70 transition-colors\">\r\n <Play className=\"w-8 h-8 text-white fill-white\" />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {showContent && (\r\n <div className=\"hidden md:block absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none\">\r\n <div className=\"absolute bottom-0 left-0 right-0 p-4 pointer-events-auto\">\r\n <div className=\"flex items-center justify-between mb-2\">\r\n <UserAvatarBlock\r\n userId={authorId}\r\n avatarUrl={authorAvatarUrl}\r\n displayName={author}\r\n hoverStyle={true}\r\n showDate={false}\r\n />\r\n\r\n <div className=\"flex items-center space-x-1\">\r\n <Button\r\n size=\"sm\"\r\n variant=\"ghost\"\r\n onClick={handleLike}\r\n className={`h-8 w-8 p-0 ${isLiked ? \"text-red-500\" : \"text-white hover:text-red-500\"}`}\r\n >\r\n <Heart className=\"h-4 w-4\" fill={isLiked ? \"currentColor\" : \"none\"} />\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n <h3 className=\"text-white font-medium mb-1 line-clamp-1\">{title}</h3>\r\n {description && (\r\n <div className=\"text-white/80 text-sm mb-1 line-clamp-2\">\r\n <MarkdownRenderer content={description} className=\"prose-invert prose-white\" />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Mobile Footer used in Grid view on mobile */}\r\n <div className=\"md:hidden absolute bottom-0 left-0 right-0 p-2 bg-gradient-to-t from-black/80 to-transparent\">\r\n <div className=\"flex items-center justify-between text-white\">\r\n <span className=\"text-xs font-medium truncate flex-1 mr-2\">{title}</span>\r\n {isExternalVideo ? (\r\n <Play className=\"w-3 h-3 flex-shrink-0 fill-white\" />\r\n ) : (\r\n <FileText className=\"w-3 h-3 flex-shrink-0\" />\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default PageCard;\r\n","/**\r\n * MediaCard - Unified component that renders the appropriate card type\r\n * based on the media type from the 'pictures' table\r\n */\r\n\r\nimport React from 'react';\r\nimport PhotoCard from './PhotoCard';\r\nimport VideoCard from '@/components/VideoCard';\r\nimport PageCard from '@/components/PageCard';\r\nimport { normalizeMediaType, MEDIA_TYPES, type MediaType } from '@/lib/mediaRegistry';\r\n\r\ninterface MediaCardProps {\r\n id: string;\r\n pictureId?: string; // Add pictureId explicitly\r\n url: string;\r\n thumbnailUrl?: string | null;\r\n title: string;\r\n author: string;\r\n authorId: string;\r\n likes: number;\r\n comments: number;\r\n isLiked?: boolean;\r\n description?: string | null;\r\n type: MediaType;\r\n meta?: any;\r\n responsive?: any; // Keeping as any for now to avoid tight coupling or import ResponsiveData\r\n onClick?: (id: string) => void;\r\n onLike?: () => void;\r\n onDelete?: () => void;\r\n onEdit?: (id: string) => void;\r\n created_at?: string;\r\n authorAvatarUrl?: string | null;\r\n showContent?: boolean;\r\n job?: any;\r\n variant?: 'grid' | 'feed';\r\n apiUrl?: string;\r\n}\r\n\r\nconst MediaCard: React.FC<MediaCardProps> = ({\r\n id,\r\n pictureId,\r\n url,\r\n thumbnailUrl,\r\n title,\r\n author,\r\n authorAvatarUrl,\r\n authorId,\r\n likes,\r\n comments,\r\n isLiked,\r\n description,\r\n type,\r\n meta,\r\n onClick,\r\n onLike,\r\n onDelete,\r\n onEdit,\r\n created_at,\r\n showContent = true,\r\n responsive,\r\n job,\r\n variant = 'grid',\r\n apiUrl\r\n}) => {\r\n const normalizedType = normalizeMediaType(type);\r\n // Render based on type\r\n if (normalizedType === 'tiktok') {\r\n return (\r\n <div className=\"w-full h-full bg-black flex justify-center aspect-[9/16] rounded-md overflow-hidden shadow-sm border relative\">\r\n <iframe\r\n src={url}\r\n className=\"w-full h-full border-0\"\r\n title={title}\r\n ></iframe>\r\n </div>\r\n );\r\n }\r\n\r\n if (normalizedType === MEDIA_TYPES.VIDEO_INTERN) {\r\n return (\r\n <VideoCard\r\n videoId={pictureId || id}\r\n videoUrl={url}\r\n thumbnailUrl={thumbnailUrl || undefined}\r\n title={title}\r\n author={author}\r\n authorId={authorId}\r\n likes={likes}\r\n comments={comments}\r\n isLiked={isLiked}\r\n description={description}\r\n onClick={() => onClick?.(id)}\r\n onLike={onLike}\r\n onDelete={onDelete}\r\n showContent={showContent}\r\n created_at={created_at}\r\n authorAvatarUrl={authorAvatarUrl}\r\n job={job}\r\n variant={variant}\r\n apiUrl={apiUrl}\r\n />\r\n );\r\n }\r\n if (normalizedType === MEDIA_TYPES.PAGE || normalizedType === MEDIA_TYPES.PAGE_EXTERNAL) {\r\n return (\r\n <PageCard\r\n id={id}\r\n url={url} // For external pages, this is the link\r\n thumbnailUrl={thumbnailUrl} // Preview image\r\n title={title}\r\n author={author}\r\n authorId={authorId}\r\n authorAvatarUrl={authorAvatarUrl}\r\n likes={likes}\r\n comments={comments}\r\n isLiked={isLiked}\r\n description={description}\r\n type={type}\r\n meta={meta}\r\n onClick={() => onClick?.(id)}\r\n onLike={onLike}\r\n onDelete={onDelete}\r\n showContent={showContent}\r\n created_at={created_at}\r\n responsive={responsive}\r\n variant={variant}\r\n apiUrl={apiUrl}\r\n />\r\n );\r\n }\r\n\r\n // Default to PhotoCard for images (type === null or 'supabase-image')\r\n return (\r\n <PhotoCard\r\n pictureId={pictureId || id} // Use pictureId if available\r\n image={url}\r\n title={title}\r\n author={author}\r\n authorId={authorId}\r\n likes={likes}\r\n comments={comments}\r\n isLiked={isLiked}\r\n description={description}\r\n onClick={onClick}\r\n onLike={onLike}\r\n onDelete={onDelete}\r\n onEdit={onEdit}\r\n createdAt={created_at}\r\n authorAvatarUrl={authorAvatarUrl}\r\n showContent={showContent}\r\n responsive={responsive}\r\n variant={variant}\r\n apiUrl={apiUrl}\r\n />\r\n );\r\n};\r\n\r\nexport default MediaCard;\r\n","/**\r\n * usePostNavigation Hook\r\n * \r\n * Compatibility wrapper around Zustand navigationStore\r\n * Provides same API as old PostNavigationContext for easy migration\r\n */\r\n\r\nimport { useNavigationStore, selectNavigationData } from '@/stores/navigationStore';\r\n\r\nexport const usePostNavigation = () => {\r\n const navigationData = useNavigationStore(selectNavigationData);\r\n const setNavigationData = useNavigationStore((state) => state.setNavigationData);\r\n const preloadImage = useNavigationStore((state) => state.preloadImage);\r\n const updateCurrentIndex = useNavigationStore((state) => state.updateCurrentIndex);\r\n\r\n return {\r\n navigationData,\r\n setNavigationData,\r\n preloadImage,\r\n updateCurrentIndex,\r\n };\r\n};\r\n\r\n// Export for backward compatibility\r\nexport default usePostNavigation;\r\n\r\n","import { createContext, useContext, ReactNode } from 'react';\nimport { useLocation } from 'react-router-dom';\n\ninterface OrganizationContextType {\n orgSlug: string | null;\n isOrgContext: boolean;\n}\n\nconst OrganizationContext = createContext<OrganizationContextType>({\n orgSlug: null,\n isOrgContext: false,\n});\n\nexport const useOrganization = () => {\n const context = useContext(OrganizationContext);\n return context;\n};\n\nexport const OrganizationProvider = ({ children }: { children: ReactNode }) => {\n const location = useLocation();\n \n // Parse orgSlug from pathname like /org/:orgSlug/...\n const orgSlugMatch = location.pathname.match(/^\\/org\\/([^\\/]+)/);\n const orgSlug = orgSlugMatch ? orgSlugMatch[1] : null;\n \n return (\n <OrganizationContext.Provider\n value={{\n orgSlug,\n isOrgContext: !!orgSlug,\n }}\n >\n {children}\n </OrganizationContext.Provider>\n );\n};\n","import React, { createContext, useContext, useRef, useCallback } from 'react';\r\nimport { FeedPost } from '@/lib/db';\r\n\r\ninterface FeedCacheState {\r\n posts: FeedPost[];\r\n page: number;\r\n hasMore: boolean;\r\n scrollY: number;\r\n timestamp: number;\r\n}\r\n\r\ninterface FeedCacheContextType {\r\n saveCache: (key: string, state: Omit<FeedCacheState, 'timestamp'>) => void;\r\n getCache: (key: string) => FeedCacheState | null;\r\n clearCache: (key?: string) => void;\r\n}\r\n\r\nconst FeedCacheContext = createContext<FeedCacheContextType | null>(null);\r\n\r\nconst CACHE_TTL = 5 * 60 * 1000; // 5 minutes\r\n\r\nexport const FeedCacheProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\r\n const cache = useRef<Map<string, FeedCacheState>>(new Map());\r\n\r\n const saveCache = useCallback((key: string, state: Omit<FeedCacheState, 'timestamp'>) => {\r\n\r\n cache.current.set(key, { ...state, timestamp: Date.now() });\r\n }, []);\r\n\r\n const getCache = useCallback((key: string) => {\r\n const item = cache.current.get(key);\r\n if (!item) {\r\n return null;\r\n }\r\n\r\n if (Date.now() - item.timestamp > CACHE_TTL) {\r\n\r\n cache.current.delete(key);\r\n return null;\r\n }\r\n\r\n\r\n return item;\r\n }, []);\r\n\r\n const clearCache = useCallback((key?: string) => {\r\n if (key) {\r\n cache.current.delete(key);\r\n } else {\r\n cache.current.clear();\r\n }\r\n }, []);\r\n\r\n return (\r\n <FeedCacheContext.Provider value={{ saveCache, getCache, clearCache }}>\r\n {children}\r\n </FeedCacheContext.Provider>\r\n );\r\n};\r\n\r\nexport const useFeedCache = () => {\r\n const context = useContext(FeedCacheContext);\r\n if (!context) {\r\n throw new Error('useFeedCache must be used within a FeedCacheProvider');\r\n }\r\n return context;\r\n};\r\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { FeedPost } from '@/lib/db';\nimport * as db from '@/lib/db';\nimport { FEED_PAGE_SIZE } from '@/constants';\nimport { useProfiles } from '@/contexts/ProfilesContext';\nimport { useFeedCache } from '@/contexts/FeedCacheContext';\n\nexport type FeedSortOption = 'latest' | 'top';\n\ninterface UseFeedDataProps {\n source?: 'home' | 'collection' | 'tag' | 'user';\n sourceId?: string;\n isOrgContext?: boolean;\n orgSlug?: string;\n enabled?: boolean;\n sortBy?: FeedSortOption;\n supabaseClient?: any; // Using any to avoid importing SupabaseClient type if not strictly needed here, or better import it\n}\n\nexport const useFeedData = ({\n source = 'home',\n sourceId,\n isOrgContext,\n orgSlug,\n enabled = true,\n sortBy = 'latest',\n supabaseClient\n}: UseFeedDataProps) => {\n const { getCache, saveCache } = useFeedCache();\n const cacheKey = `${source}-${sourceId || ''}-${isOrgContext ? 'org' : 'personal'}-${orgSlug || ''}-${sortBy}`;\n\n // Initialize from cache if available\n const [posts, setPosts] = useState<FeedPost[]>(() => {\n const cached = getCache(cacheKey);\n return cached ? cached.posts : [];\n });\n const [page, setPage] = useState(() => {\n const cached = getCache(cacheKey);\n return cached ? cached.page : 0;\n });\n const [hasMore, setHasMore] = useState(() => {\n const cached = getCache(cacheKey);\n return cached !== null ? cached.hasMore : true;\n });\n const [loading, setLoading] = useState(() => {\n const cached = getCache(cacheKey);\n return cached ? false : true;\n });\n\n const [isFetchingMore, setIsFetchingMore] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const { fetchProfiles } = useProfiles();\n\n // Track if we mounted with cache to avoid double fetch\n const mountedWithCache = useRef(!!getCache(cacheKey));\n\n // Reset pagination when source changes (if not cached)\n useEffect(() => {\n const cached = getCache(cacheKey);\n if (cached) {\n setPosts(cached.posts);\n setPage(cached.page);\n setHasMore(cached.hasMore);\n setLoading(false);\n mountedWithCache.current = true;\n } else {\n setPosts([]);\n setPage(0);\n setHasMore(true);\n setLoading(true);\n mountedWithCache.current = false;\n }\n }, [source, sourceId, isOrgContext, orgSlug, cacheKey, getCache]);\n\n // Update Cache whenever state changes\n useEffect(() => {\n if (!loading && posts.length > 0) {\n // We only cache the data state here. \n // Scroll position is updated by the consumer (PhotoGrid) before unmount/nav.\n // But verify if we need to merge with existing cache to preserve scrollY?\n // saveCache replaces the object.\n // So we need to retrieve current scrollY from cache or keep it.\n // Actually, the provider's saveCache typically overwrites.\n // Let's modify saveCache usage or trust that PhotoGrid saves scrollY *after* these updates?\n // No, PhotoGrid saves scrollY on unmount.\n // If we update posts here, we might overwrite scrollY with undefined if we clean write.\n // We should get current cache to preserve scrollY.\n const currentCache = getCache(cacheKey);\n saveCache(cacheKey, {\n posts,\n page,\n hasMore,\n scrollY: currentCache?.scrollY || 0\n });\n }\n }, [posts, page, hasMore, loading, cacheKey, saveCache, getCache]);\n\n const loadFeed = useCallback(async (currentPage: number, isLoadMore: boolean) => {\n if (!enabled) {\n setLoading(false);\n return;\n }\n\n if (isLoadMore) {\n setIsFetchingMore(true);\n } else {\n setLoading(true);\n }\n\n setError(null);\n let fetchedPosts: any[] = [];\n\n try {\n // 1. Hydration (Home only, first page)\n if (source === 'home' && !sourceId && currentPage === 0 && window.__INITIAL_STATE__?.feed) {\n fetchedPosts = window.__INITIAL_STATE__.feed;\n window.__INITIAL_STATE__.feed = undefined;\n\n console.log('Hydrated feed', fetchedPosts);\n }\n // 2. API Fetch (Home only - disabled to use client-side DB logic with pagination/pages support)\n /*\n else if (source === 'home' && !sourceId) {\n const SERVER_URL = import.meta.env.VITE_SERVER_IMAGE_API_URL || '';\n const fetchUrl = SERVER_URL\n ? `${SERVER_URL}${FEED_API_ENDPOINT}?page=${currentPage}&limit=${FEED_PAGE_SIZE}`\n : `${FEED_API_ENDPOINT}?page=${currentPage}&limit=${FEED_PAGE_SIZE}`;\n\n const res = await fetch(fetchUrl);\n if (!res.ok) throw new Error(`Feed fetch failed: ${res.statusText}`);\n fetchedPosts = await res.json();\n }\n */\n // 3. Fallback DB Fetch\n else {\n fetchedPosts = await db.fetchFeedPostsPaginated(\n source,\n sourceId,\n isOrgContext,\n orgSlug,\n currentPage,\n FEED_PAGE_SIZE,\n supabaseClient\n );\n }\n\n if (fetchedPosts.length < FEED_PAGE_SIZE) {\n setHasMore(false);\n } else {\n setHasMore(true);\n }\n\n // Augment posts (ensure cover, author profiles etc are set)\n const augmentedPosts = db.augmentFeedPosts(fetchedPosts);\n\n // Update cover based on sort mode\n const postsWithUpdatedCovers = updatePostCovers(augmentedPosts, sortBy);\n\n // Apply client-side sorting\n setPosts(prev => {\n const combined = isLoadMore ? [...prev, ...postsWithUpdatedCovers] : postsWithUpdatedCovers;\n // Re-sort the entire combined list to maintain correct order across pages\n return sortFeedPosts(combined, sortBy);\n });\n\n // Fetch profiles via context for any users in the feed\n const userIds = Array.from(new Set(augmentedPosts.map((p: any) => p.user_id)));\n if (userIds.length > 0) {\n fetchProfiles(userIds as string[]);\n }\n\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Unknown error fetching feed'));\n } finally {\n setLoading(false);\n setIsFetchingMore(false);\n }\n }, [source, sourceId, isOrgContext, orgSlug, enabled, fetchProfiles, sortBy, supabaseClient]);\n\n // Initial Load\n useEffect(() => {\n // If we initialized from cache, don't fetch page 0 again immediately.\n if (mountedWithCache.current) {\n mountedWithCache.current = false;\n return;\n }\n loadFeed(0, false);\n }, [loadFeed]);\n\n const loadMore = useCallback(() => {\n if (!hasMore || isFetchingMore || loading) return;\n const nextPage = page + 1;\n setPage(nextPage);\n loadFeed(nextPage, true);\n }, [hasMore, isFetchingMore, loading, page, loadFeed]);\n\n return { posts, loading, error, hasMore, loadMore, isFetchingMore };\n};\n\n// Helper function to update post covers based on sort mode\nconst updatePostCovers = (posts: FeedPost[], sortBy: FeedSortOption): FeedPost[] => {\n return posts.map(post => {\n if (!post.pictures || post.pictures.length === 0) {\n return post;\n }\n\n const validPics = post.pictures.filter((p: any) => p.visible !== false);\n if (validPics.length === 0) {\n return post;\n }\n\n let newCover;\n if (sortBy === 'latest') {\n // For \"Latest\" mode: Show the newest picture (by created_at)\n newCover = validPics.reduce((newest, current) => {\n const newestDate = new Date(newest.created_at || post.created_at).getTime();\n const currentDate = new Date(current.created_at || post.created_at).getTime();\n return currentDate > newestDate ? current : newest;\n });\n } else {\n // For \"Top\" or default: Use first by position\n const sortedByPosition = [...validPics].sort((a, b) => (a.position || 0) - (b.position || 0));\n newCover = sortedByPosition[0];\n }\n\n return {\n ...post,\n cover: newCover\n };\n });\n};\n\n// Helper function to sort feed posts\nconst sortFeedPosts = (posts: FeedPost[], sortBy: FeedSortOption): FeedPost[] => {\n const sorted = [...posts];\n\n if (sortBy === 'top') {\n // Sort by likes_count descending, then by created_at descending as tiebreaker\n sorted.sort((a, b) => {\n const likesA = a.likes_count || 0;\n const likesB = b.likes_count || 0;\n\n if (likesB !== likesA) {\n return likesB - likesA;\n }\n\n // Tiebreaker: most recent first\n return new Date(b.created_at).getTime() - new Date(a.created_at).getTime();\n });\n } else {\n // 'latest' - Sort by created_at descending (most recent first)\n // Also consider the latest picture modification if pictures array has dates\n sorted.sort((a, b) => {\n // Check if post has pictures with created_at dates\n const latestPicDateA = a.pictures && a.pictures.length > 0\n ? Math.max(...a.pictures.map(p => new Date(p.created_at || a.created_at).getTime()))\n : new Date(a.created_at).getTime();\n\n const latestPicDateB = b.pictures && b.pictures.length > 0\n ? Math.max(...b.pictures.map(p => new Date(p.created_at || b.created_at).getTime()))\n : new Date(b.created_at).getTime();\n\n return latestPicDateB - latestPicDateA;\n });\n }\n\n return sorted;\n};\n","import { supabase as defaultSupabase } from \"@/integrations/supabase/client\";\nimport * as db from '../pages/Post/db';\nimport { UserProfile } from '../pages/Post/types';\nimport MediaCard from \"./MediaCard\";\nimport React, { useEffect, useState, useRef } from \"react\";\nimport { useAuth } from \"@/hooks/useAuth\";\nimport { useNavigate } from \"react-router-dom\";\nimport { usePostNavigation } from \"@/hooks/usePostNavigation\";\nimport { useOrganization } from \"@/contexts/OrganizationContext\";\nimport { useFeedCache } from \"@/contexts/FeedCacheContext\";\nimport { useLayoutEffect } from \"react\";\n\nimport { useFeedData } from \"@/hooks/useFeedData\";\n\nimport { normalizeMediaType, isVideoType } from \"@/lib/mediaRegistry\";\nimport { UploadCloud, Maximize } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport type { MediaType } from \"@/types\";\n\nexport interface MediaItemType {\n id: string;\n picture_id?: string;\n title: string;\n description: string | null;\n image_url: string;\n thumbnail_url: string | null;\n type: MediaType;\n meta: any | null;\n likes_count: number;\n created_at: string;\n user_id: string;\n comments: { count: number }[];\n\n author_profile?: UserProfile;\n job?: any;\n responsive?: any; // Add responsive data\n}\n\nimport type { FeedSortOption } from '@/hooks/useFeedData';\n\n\ninterface MediaGridProps {\n customPictures?: MediaItemType[];\n customLoading?: boolean;\n navigationSource?: 'home' | 'collection' | 'tag' | 'user' | 'widget';\n navigationSourceId?: string;\n isOwner?: boolean;\n onFilesDrop?: (files: File[]) => void;\n showVideos?: boolean; // Toggle video display (kept for backward compatibility)\n sortBy?: FeedSortOption;\n supabaseClient?: any;\n apiUrl?: string;\n}\n\nconst MediaGrid = ({\n customPictures,\n customLoading,\n navigationSource = 'home',\n navigationSourceId,\n isOwner = false,\n onFilesDrop,\n\n showVideos = true,\n sortBy = 'latest',\n supabaseClient,\n apiUrl\n}: MediaGridProps) => {\n const { user } = useAuth();\n // Use provided client or fallback to default\n const supabase = supabaseClient || defaultSupabase;\n const navigate = useNavigate();\n const { setNavigationData, navigationData } = usePostNavigation();\n const { getCache, saveCache } = useFeedCache();\n\n\n\n const { orgSlug, isOrgContext } = useOrganization();\n // State definitions restored\n const [mediaItems, setMediaItems] = useState<MediaItemType[]>([]);\n const [userLikes, setUserLikes] = useState<Set<string>>(new Set());\n const [loading, setLoading] = useState(true);\n const [isDragging, setIsDragging] = useState(false);\n const dragLeaveTimeoutRef = useRef<number | null>(null);\n\n // 1. Data Fetching\n const {\n posts: feedPosts,\n loading: feedLoading,\n hasMore,\n loadMore,\n isFetchingMore\n } = useFeedData({\n source: navigationSource,\n sourceId: navigationSourceId,\n isOrgContext,\n orgSlug,\n sortBy,\n // Disable hook if we have custom pictures\n enabled: !customPictures,\n supabaseClient\n });\n\n // Infinite Scroll Observer\n const observerTarget = useRef(null);\n\n useEffect(() => {\n const observer = new IntersectionObserver(\n entries => {\n if (entries[0].isIntersecting && hasMore && !feedLoading && !isFetchingMore) {\n loadMore();\n }\n },\n { threshold: 1.0 }\n );\n\n if (observerTarget.current) {\n observer.observe(observerTarget.current);\n }\n\n return () => {\n if (observerTarget.current) {\n observer.unobserve(observerTarget.current);\n }\n };\n }, [hasMore, feedLoading, isFetchingMore, loadMore]);\n\n // 2. State & Effects\n useEffect(() => {\n let finalMedia: MediaItemType[] = [];\n\n if (customPictures) {\n finalMedia = customPictures;\n setLoading(customLoading || false);\n } else {\n // Map FeedPost[] -> MediaItemType[]\n finalMedia = db.mapFeedPostsToMediaItems(feedPosts as any, sortBy);\n setLoading(feedLoading);\n }\n\n setMediaItems(finalMedia);\n\n // Update Navigation Data\n if (finalMedia.length > 0) {\n const navData = {\n posts: finalMedia.map(item => ({\n id: item.id,\n title: item.title,\n image_url: item.image_url,\n user_id: item.user_id,\n type: normalizeMediaType(item.type)\n })),\n currentIndex: 0,\n source: navigationSource,\n sourceId: navigationSourceId\n };\n setNavigationData(navData);\n }\n }, [feedPosts, feedLoading, customPictures, customLoading, navigationSource, navigationSourceId, setNavigationData, sortBy]);\n\n // Scroll Restoration Logic\n const cacheKey = `${navigationSource}-${navigationSourceId || ''}-${isOrgContext ? 'org' : 'personal'}-${orgSlug || ''}`;\n const hasRestoredScroll = useRef(false);\n\n // Restore scroll when mediaItems are populated\n useLayoutEffect(() => {\n // Enable restoration if we have items, haven't restored yet, and either it's NOT custom pictures OR it IS a widget with an ID\n const shouldRestore = mediaItems.length > 0 &&\n !hasRestoredScroll.current &&\n (!customPictures || (navigationSource === 'widget' && navigationSourceId));\n\n if (shouldRestore) {\n const cached = getCache(cacheKey);\n\n if (cached && cached.scrollY > 0) {\n window.scrollTo(0, cached.scrollY);\n }\n hasRestoredScroll.current = true;\n }\n }, [mediaItems, cacheKey, getCache, customPictures, navigationSource, navigationSourceId]);\n\n // Reset restored flag when source changes\n useEffect(() => {\n hasRestoredScroll.current = false;\n }, [cacheKey]);\n\n // Track scroll position\n const lastScrollY = useRef(window.scrollY);\n\n useEffect(() => {\n const handleScroll = () => {\n lastScrollY.current = window.scrollY;\n };\n window.addEventListener('scroll', handleScroll);\n return () => window.removeEventListener('scroll', handleScroll);\n }, []);\n\n // Save scroll position on unmount or before source change\n useEffect(() => {\n return () => {\n // Save if not custom pictures OR if it is a widget with an ID\n const shouldSave = !customPictures || (navigationSource === 'widget' && navigationSourceId);\n\n if (shouldSave) {\n const cached = getCache(cacheKey); // Get latest data from cache (posts etc)\n // Use lastScrollY instead of window.scrollY because unmount might happen after a scroll-to-top by router\n\n if (cached && lastScrollY.current > 0) {\n saveCache(cacheKey, { ...cached, scrollY: lastScrollY.current });\n }\n }\n };\n }, [cacheKey, getCache, saveCache, customPictures, navigationSource, navigationSourceId]);\n\n const fetchMediaFromPicturesTable = async () => {\n // Manual Refresh Stub if needed - for onDelete/refresh actions\n // Since the hook data is reactive, we might need a refresh function from the hook\n // But for now, we can just reload the page or implement refresh in future.\n window.location.reload();\n };\n\n const fetchUserLikes = async () => {\n if (!user || mediaItems.length === 0) return;\n\n try {\n // Collect IDs to check (picture_id for feed, id for collection/direct pictures)\n const targetIds = mediaItems\n .map(item => item.picture_id || item.id)\n .filter(Boolean) as string[];\n\n if (targetIds.length === 0) return;\n\n // Fetch likes only for the displayed items\n const { data: likesData, error } = await supabase\n .from('likes')\n .select('picture_id')\n .eq('user_id', user.id)\n .in('picture_id', targetIds);\n\n if (error) throw error;\n\n // Merge new likes with existing set\n setUserLikes(prev => {\n const newSet = new Set(prev);\n likesData?.forEach(l => newSet.add(l.picture_id));\n return newSet;\n });\n } catch (error) {\n console.error('Error fetching user likes:', error);\n }\n };\n\n const handleMediaClick = (mediaId: string, type: MediaType, index: number) => {\n // Handle Page navigation\n if (type === 'page-intern') {\n const item = mediaItems.find(i => i.id === mediaId);\n if (item && item.meta?.slug) {\n navigate(`/user/${item.user_id}/pages/${item.meta.slug}`);\n return;\n }\n }\n\n // Update navigation data with current index for correct Prev/Next behavior\n if (navigationData) {\n setNavigationData({ ...navigationData, currentIndex: index });\n }\n navigate(`/post/${mediaId}`);\n };\n\n const handleDragEnter = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (dragLeaveTimeoutRef.current) {\n clearTimeout(dragLeaveTimeoutRef.current);\n }\n if (isOwner && onFilesDrop) setIsDragging(true);\n };\n\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (dragLeaveTimeoutRef.current) {\n clearTimeout(dragLeaveTimeoutRef.current);\n }\n dragLeaveTimeoutRef.current = window.setTimeout(() => {\n setIsDragging(false);\n }, 100);\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n\n if (!isOwner || !onFilesDrop) return;\n\n const files = [...e.dataTransfer.files].filter(f => f.type.startsWith('image/'));\n if (files.length > 0) {\n onFilesDrop(files);\n }\n };\n\n const handleEditPost = async (postId: string) => {\n try {\n const toastId = toast.loading('Loading post for editing...');\n\n // Fetch full post with all pictures\n const { data: post, error } = await supabase\n .from('posts')\n .select(`*, pictures(*)`)\n .eq('id', postId)\n .single();\n\n if (error) throw error;\n\n if (!post.pictures || post.pictures.length === 0) {\n throw new Error('No pictures found in post');\n }\n\n // Transform pictures for wizard\n const wizardImages = post.pictures\n .sort((a: any, b: any) => (a.position - b.position))\n .map((p: any) => ({\n id: p.id,\n path: p.id,\n src: p.image_url,\n title: p.title,\n description: p.description || '',\n selected: false,\n realDatabaseId: p.id\n }));\n\n toast.dismiss(toastId);\n\n navigate('/wizard', {\n state: {\n mode: 'post',\n initialImages: wizardImages,\n postTitle: post.title,\n postDescription: post.description,\n editingPostId: post.id\n }\n });\n } catch (error) {\n console.error('Error opening post editor:', error);\n toast.error('Failed to open post editor');\n }\n };\n\n\n // Set up navigation data when media items change (for custom media)\n useEffect(() => {\n if (mediaItems.length > 0 && customPictures) {\n const navData = {\n posts: mediaItems\n .filter(item => !isVideoType(normalizeMediaType(item.type)))\n .map(item => ({\n id: item.id,\n title: item.title,\n image_url: item.image_url,\n user_id: item.user_id\n })),\n currentIndex: 0,\n source: navigationSource,\n sourceId: navigationSourceId\n };\n setNavigationData(navData);\n }\n }, [mediaItems, customPictures, navigationSource, navigationSourceId, setNavigationData]);\n\n if (loading) {\n return (\n <div className=\"py-8\">\n <div className=\"text-center text-muted-foreground\">\n Loading media...\n </div>\n </div>\n );\n }\n\n const hasItems = mediaItems.length > 0;\n\n return (\n <div className=\"w-full relative\">\n {hasItems && isOwner && onFilesDrop && navigationSource === 'collection' && (\n <div\n className={`my-4 border-2 border-dashed border-muted rounded-lg p-6 text-center text-muted-foreground transition-all ${isDragging ? 'ring-4 ring-primary ring-offset-2 border-solid border-primary bg-primary/5' : ''\n } `}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <UploadCloud className=\"mx-auto h-8 w-8 text-muted-foreground\" />\n <p className=\"mt-2 text-sm\">Drag and drop more images here to upload.</p>\n </div>\n )}\n\n {!hasItems ? (\n isOwner && navigationSource === 'collection' && onFilesDrop ? (\n <div\n className=\"py-8\"\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <div className={`border-2 border-dashed border-muted rounded-lg p-12 text-center text-muted-foreground transition-all ${isDragging ? 'ring-4 ring-primary ring-offset-2 border-solid border-primary bg-primary/5' : ''\n } `}>\n <UploadCloud className=\"mx-auto h-12 w-12 text-muted-foreground\" />\n <h3 className=\"mt-4 text-lg font-semibold\">This collection is empty</h3>\n <p className=\"mt-2\">Drag and drop images here to get started.</p>\n </div>\n </div>\n ) : (\n <div className=\"py-8\">\n <div className=\"text-center text-muted-foreground\">\n <p className=\"text-lg\">No media yet!</p>\n <p>Be the first to share content with the community.</p>\n </div>\n </div>\n )\n ) : (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {mediaItems.map((item, index) => {\n const itemType = normalizeMediaType(item.type);\n const isVideo = isVideoType(itemType);\n\n // For images, convert URL to optimized format\n const displayUrl = item.image_url;\n\n if (isVideo) {\n return (\n <div key={item.id} className=\"relative group\">\n <MediaCard\n id={item.id}\n pictureId={item.picture_id}\n url={displayUrl}\n thumbnailUrl={item.thumbnail_url}\n title={item.title}\n // Pass blank/undefined so UserAvatarBlock uses context data\n author={undefined as any}\n authorAvatarUrl={undefined}\n authorId={item.user_id}\n likes={item.likes_count || 0}\n comments={item.comments[0]?.count || 0}\n isLiked={userLikes.has(item.picture_id || item.id)}\n description={item.description}\n type={itemType}\n meta={item.meta}\n onClick={() => handleMediaClick(item.id, itemType, index)}\n onLike={fetchUserLikes}\n onDelete={fetchMediaFromPicturesTable}\n onEdit={handleEditPost}\n created_at={item.created_at}\n job={item.job}\n responsive={item.responsive}\n apiUrl={apiUrl}\n />\n <div className=\"absolute top-2 right-2 flex items-center justify-center w-8 h-8 bg-black/50 rounded-full opacity-0 group-hover:opacity-100 transition-opacity\">\n <Maximize className=\"w-4 h-4 text-white\" />\n </div>\n </div>\n );\n }\n\n return (\n <MediaCard\n key={item.id}\n id={item.id}\n pictureId={item.picture_id}\n url={displayUrl}\n thumbnailUrl={item.thumbnail_url}\n title={item.title}\n author={undefined as any}\n authorAvatarUrl={undefined}\n authorId={item.user_id}\n likes={item.likes_count || 0}\n comments={item.comments[0]?.count || 0}\n isLiked={userLikes.has(item.picture_id || item.id)}\n description={item.description}\n type={itemType}\n meta={item.meta}\n onClick={() => handleMediaClick(item.id, itemType, index)}\n onLike={fetchUserLikes}\n onDelete={fetchMediaFromPicturesTable}\n onEdit={handleEditPost}\n\n created_at={item.created_at}\n job={item.job}\n responsive={item.responsive}\n apiUrl={apiUrl}\n />\n );\n })}\n </div>\n )}\n\n {/* Loading Indicator / Observer Target */}\n <div ref={observerTarget} className=\"h-10 w-full flex items-center justify-center p-4\">\n {isFetchingMore && (\n <div className=\"animate-spin rounded-full h-6 w-6 border-b-2 border-gray-900 dark:border-white\"></div>\n )}\n </div>\n </div>\n );\n};\n\n// Backward compatibility export\nexport default MediaGrid;\n\n// Named exports for clarity\nexport { MediaGrid };\nexport const PhotoGrid = MediaGrid;","var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => {\n ErrorCode2[\"docTypeError\"] = \"docTypeError\";\n ErrorCode2[\"contextNotFound\"] = \"contextNotFound\";\n ErrorCode2[\"timerNotFound\"] = \"timerNotFound\";\n ErrorCode2[\"ctxCallOutOfScope\"] = \"ctxCallOutOfScope\";\n ErrorCode2[\"createNodeInParserFail\"] = \"createNodeInParserFail\";\n ErrorCode2[\"stackOverFlow\"] = \"stackOverFlow\";\n ErrorCode2[\"parserMatchError\"] = \"parserMatchError\";\n ErrorCode2[\"serializerMatchError\"] = \"serializerMatchError\";\n ErrorCode2[\"getAtomFromSchemaFail\"] = \"getAtomFromSchemaFail\";\n ErrorCode2[\"expectDomTypeError\"] = \"expectDomTypeError\";\n ErrorCode2[\"callCommandBeforeEditorView\"] = \"callCommandBeforeEditorView\";\n ErrorCode2[\"missingRootElement\"] = \"missingRootElement\";\n ErrorCode2[\"missingNodeInSchema\"] = \"missingNodeInSchema\";\n ErrorCode2[\"missingMarkInSchema\"] = \"missingMarkInSchema\";\n ErrorCode2[\"ctxNotBind\"] = \"ctxNotBind\";\n ErrorCode2[\"missingYjsDoc\"] = \"missingYjsDoc\";\n return ErrorCode2;\n})(ErrorCode || {});\nclass MilkdownError extends Error {\n constructor(code, message) {\n super(message);\n this.name = \"MilkdownError\";\n this.code = code;\n }\n}\nconst functionReplacer = (_, value) => typeof value === \"function\" ? \"[Function]\" : value;\nconst stringify = (x) => JSON.stringify(x, functionReplacer);\nfunction docTypeError(type) {\n return new MilkdownError(\n ErrorCode.docTypeError,\n `Doc type error, unsupported type: ${stringify(type)}`\n );\n}\nfunction contextNotFound(name) {\n return new MilkdownError(\n ErrorCode.contextNotFound,\n `Context \"${name}\" not found, do you forget to inject it?`\n );\n}\nfunction timerNotFound(name) {\n return new MilkdownError(\n ErrorCode.timerNotFound,\n `Timer \"${name}\" not found, do you forget to record it?`\n );\n}\nfunction ctxCallOutOfScope() {\n return new MilkdownError(\n ErrorCode.ctxCallOutOfScope,\n \"Should not call a context out of the plugin.\"\n );\n}\nfunction createNodeInParserFail(nodeType, attrs, content) {\n const nodeTypeName = \"name\" in nodeType ? nodeType.name : nodeType;\n const heading = `Cannot create node for ${nodeTypeName}`;\n const serialize = (x) => {\n if (x == null) return \"null\";\n if (Array.isArray(x)) {\n return `[${x.map(serialize).join(\", \")}]`;\n }\n if (typeof x === \"object\") {\n if (\"toJSON\" in x && typeof x.toJSON === \"function\") {\n return JSON.stringify(x.toJSON());\n }\n if (\"spec\" in x) {\n return JSON.stringify(x.spec);\n }\n return JSON.stringify(x);\n }\n if (typeof x === \"string\" || typeof x === \"number\" || typeof x === \"boolean\") {\n return JSON.stringify(x);\n }\n if (typeof x === \"function\") {\n return `[Function: ${x.name || \"anonymous\"}]`;\n }\n try {\n return String(x);\n } catch {\n return \"[Unserializable]\";\n }\n };\n const headingMessage = [\"[Description]\", heading];\n const attrsMessage = [\"[Attributes]\", attrs];\n const contentMessage = [\n \"[Content]\",\n (content ?? []).map((node) => {\n if (!node) return \"null\";\n if (typeof node === \"object\" && \"type\" in node) {\n return `${node}`;\n }\n return serialize(node);\n })\n ];\n const messages = [headingMessage, attrsMessage, contentMessage].reduce(\n (acc, [title, value]) => {\n const message = `${title}: ${serialize(value)}.`;\n return acc.concat(message);\n },\n []\n );\n return new MilkdownError(\n ErrorCode.createNodeInParserFail,\n messages.join(\"\\n\")\n );\n}\nfunction stackOverFlow() {\n return new MilkdownError(\n ErrorCode.stackOverFlow,\n \"Stack over flow, cannot pop on an empty stack.\"\n );\n}\nfunction parserMatchError(node) {\n return new MilkdownError(\n ErrorCode.parserMatchError,\n `Cannot match target parser for node: ${stringify(node)}.`\n );\n}\nfunction serializerMatchError(node) {\n return new MilkdownError(\n ErrorCode.serializerMatchError,\n `Cannot match target serializer for node: ${stringify(node)}.`\n );\n}\nfunction getAtomFromSchemaFail(type, name) {\n return new MilkdownError(\n ErrorCode.getAtomFromSchemaFail,\n `Cannot get ${type}: ${name} from schema.`\n );\n}\nfunction expectDomTypeError(node) {\n return new MilkdownError(\n ErrorCode.expectDomTypeError,\n `Expect to be a dom, but get: ${stringify(node)}.`\n );\n}\nfunction callCommandBeforeEditorView() {\n return new MilkdownError(\n ErrorCode.callCommandBeforeEditorView,\n \"You're trying to call a command before editor view initialized, make sure to get commandManager from ctx after editor view has been initialized\"\n );\n}\nfunction missingRootElement() {\n return new MilkdownError(\n ErrorCode.missingRootElement,\n \"Missing root element, milkdown cannot find root element of the editor.\"\n );\n}\nfunction missingNodeInSchema(name) {\n return new MilkdownError(\n ErrorCode.missingNodeInSchema,\n `Missing node in schema, milkdown cannot find \"${name}\" in schema.`\n );\n}\nfunction missingMarkInSchema(name) {\n return new MilkdownError(\n ErrorCode.missingMarkInSchema,\n `Missing mark in schema, milkdown cannot find \"${name}\" in schema.`\n );\n}\nfunction ctxNotBind() {\n return new MilkdownError(\n ErrorCode.ctxNotBind,\n \"Context not bind, please make sure the plugin has been initialized.\"\n );\n}\nfunction missingYjsDoc() {\n return new MilkdownError(\n ErrorCode.missingYjsDoc,\n \"Missing yjs doc, please make sure you have bind one.\"\n );\n}\nexport {\n callCommandBeforeEditorView,\n contextNotFound,\n createNodeInParserFail,\n ctxCallOutOfScope,\n ctxNotBind,\n docTypeError,\n expectDomTypeError,\n getAtomFromSchemaFail,\n missingMarkInSchema,\n missingNodeInSchema,\n missingRootElement,\n missingYjsDoc,\n parserMatchError,\n serializerMatchError,\n stackOverFlow,\n timerNotFound\n};\n//# sourceMappingURL=index.js.map\n","import { contextNotFound, ctxCallOutOfScope, timerNotFound } from \"@milkdown/exception\";\nclass Container {\n constructor() {\n this.sliceMap = /* @__PURE__ */ new Map();\n this.get = (slice) => {\n const context = typeof slice === \"string\" ? [...this.sliceMap.values()].find((x) => x.type.name === slice) : this.sliceMap.get(slice.id);\n if (!context) {\n const name = typeof slice === \"string\" ? slice : slice.name;\n throw contextNotFound(name);\n }\n return context;\n };\n this.remove = (slice) => {\n const context = typeof slice === \"string\" ? [...this.sliceMap.values()].find((x) => x.type.name === slice) : this.sliceMap.get(slice.id);\n if (!context) return;\n this.sliceMap.delete(context.type.id);\n };\n this.has = (slice) => {\n if (typeof slice === \"string\")\n return [...this.sliceMap.values()].some((x) => x.type.name === slice);\n return this.sliceMap.has(slice.id);\n };\n }\n}\nclass Slice {\n /// @internal\n constructor(container, value, type) {\n this.#watchers = [];\n this.#emit = () => {\n this.#watchers.forEach((watcher) => watcher(this.#value));\n };\n this.set = (value2) => {\n this.#value = value2;\n this.#emit();\n };\n this.get = () => this.#value;\n this.update = (updater) => {\n this.#value = updater(this.#value);\n this.#emit();\n };\n this.type = type;\n this.#value = value;\n container.set(type.id, this);\n }\n #watchers;\n /// @internal\n #value;\n #emit;\n /// Add a watcher for changes in the slice.\n /// Returns a function to remove the watcher.\n on(watcher) {\n this.#watchers.push(watcher);\n return () => {\n this.#watchers = this.#watchers.filter((w) => w !== watcher);\n };\n }\n /// Add a one-time watcher for changes in the slice.\n /// The watcher will be removed after it is called.\n /// Returns a function to remove the watcher.\n once(watcher) {\n const off = this.on((value) => {\n watcher(value);\n off();\n });\n return off;\n }\n /// Remove a watcher.\n off(watcher) {\n this.#watchers = this.#watchers.filter((w) => w !== watcher);\n }\n /// Remove all watchers.\n offAll() {\n this.#watchers = [];\n }\n}\nclass SliceType {\n /// Create a slice type with a default value and a name.\n /// The name should be unique in the container.\n constructor(value, name) {\n this.id = /* @__PURE__ */ Symbol(`Context-${name}`);\n this.name = name;\n this._defaultValue = value;\n this._typeInfo = () => {\n throw ctxCallOutOfScope();\n };\n }\n /// Create a slice with a container.\n /// You can also pass a value to override the default value.\n create(container, value = this._defaultValue) {\n return new Slice(container, value, this);\n }\n}\nconst createSlice = (value, name) => new SliceType(value, name);\nclass Inspector {\n /// Create an inspector with container, clock and metadata.\n constructor(container, clock, meta) {\n this.#injectedSlices = /* @__PURE__ */ new Set();\n this.#consumedSlices = /* @__PURE__ */ new Set();\n this.#recordedTimers = /* @__PURE__ */ new Map();\n this.#waitTimers = /* @__PURE__ */ new Map();\n this.read = () => {\n return {\n metadata: this.#meta,\n injectedSlices: [...this.#injectedSlices].map((slice) => ({\n name: typeof slice === \"string\" ? slice : slice.name,\n value: this.#getSlice(slice)\n })),\n consumedSlices: [...this.#consumedSlices].map((slice) => ({\n name: typeof slice === \"string\" ? slice : slice.name,\n value: this.#getSlice(slice)\n })),\n recordedTimers: [...this.#recordedTimers].map(\n ([timer, { duration }]) => ({\n name: timer.name,\n duration,\n status: this.#getTimer(timer)\n })\n ),\n waitTimers: [...this.#waitTimers].map(([timer, { duration }]) => ({\n name: timer.name,\n duration,\n status: this.#getTimer(timer)\n }))\n };\n };\n this.onRecord = (timerType) => {\n this.#recordedTimers.set(timerType, { start: Date.now(), duration: 0 });\n };\n this.onClear = (timerType) => {\n this.#recordedTimers.delete(timerType);\n };\n this.onDone = (timerType) => {\n const timer = this.#recordedTimers.get(timerType);\n if (!timer) return;\n timer.duration = Date.now() - timer.start;\n };\n this.onWait = (timerType, promise) => {\n const start = Date.now();\n promise.finally(() => {\n this.#waitTimers.set(timerType, { duration: Date.now() - start });\n }).catch(console.error);\n };\n this.onInject = (sliceType) => {\n this.#injectedSlices.add(sliceType);\n };\n this.onRemove = (sliceType) => {\n this.#injectedSlices.delete(sliceType);\n };\n this.onUse = (sliceType) => {\n this.#consumedSlices.add(sliceType);\n };\n this.#getSlice = (sliceType) => {\n return this.#container.get(sliceType).get();\n };\n this.#getTimer = (timerType) => {\n return this.#clock.get(timerType).status;\n };\n this.#container = container;\n this.#clock = clock;\n this.#meta = meta;\n }\n /// @internal\n #meta;\n /// @internal\n #container;\n /// @internal\n #clock;\n #injectedSlices;\n #consumedSlices;\n #recordedTimers;\n #waitTimers;\n #getSlice;\n #getTimer;\n}\nclass Ctx {\n /// Create a ctx object with container and clock.\n constructor(container, clock, meta) {\n this.produce = (meta2) => {\n if (meta2 && Object.keys(meta2).length)\n return new Ctx(this.#container, this.#clock, { ...meta2 });\n return this;\n };\n this.inject = (sliceType, value) => {\n const slice = sliceType.create(this.#container.sliceMap);\n if (value != null) slice.set(value);\n this.#inspector?.onInject(sliceType);\n return this;\n };\n this.remove = (sliceType) => {\n this.#container.remove(sliceType);\n this.#inspector?.onRemove(sliceType);\n return this;\n };\n this.record = (timerType) => {\n timerType.create(this.#clock.store);\n this.#inspector?.onRecord(timerType);\n return this;\n };\n this.clearTimer = (timerType) => {\n this.#clock.remove(timerType);\n this.#inspector?.onClear(timerType);\n return this;\n };\n this.isInjected = (sliceType) => this.#container.has(sliceType);\n this.isRecorded = (timerType) => this.#clock.has(timerType);\n this.use = (sliceType) => {\n this.#inspector?.onUse(sliceType);\n return this.#container.get(sliceType);\n };\n this.get = (sliceType) => this.use(sliceType).get();\n this.set = (sliceType, value) => this.use(sliceType).set(value);\n this.update = (sliceType, updater) => this.use(sliceType).update(updater);\n this.timer = (timer) => this.#clock.get(timer);\n this.done = (timer) => {\n this.timer(timer).done();\n this.#inspector?.onDone(timer);\n };\n this.wait = (timer) => {\n const promise = this.timer(timer).start();\n this.#inspector?.onWait(timer, promise);\n return promise;\n };\n this.waitTimers = async (slice) => {\n await Promise.all(this.get(slice).map((x) => this.wait(x)));\n };\n this.#container = container;\n this.#clock = clock;\n this.#meta = meta;\n if (meta) this.#inspector = new Inspector(container, clock, meta);\n }\n /// @internal\n #container;\n /// @internal\n #clock;\n /// @internal\n #meta;\n /// @internal\n #inspector;\n /// Get metadata of the ctx.\n get meta() {\n return this.#meta;\n }\n /// Get the inspector of the ctx.\n get inspector() {\n return this.#inspector;\n }\n}\nclass Clock {\n constructor() {\n this.store = /* @__PURE__ */ new Map();\n this.get = (timer) => {\n const meta = this.store.get(timer.id);\n if (!meta) throw timerNotFound(timer.name);\n return meta;\n };\n this.remove = (timer) => {\n this.store.delete(timer.id);\n };\n this.has = (timer) => {\n return this.store.has(timer.id);\n };\n }\n}\nclass Timer {\n /// @internal\n constructor(clock, type) {\n this.#promise = null;\n this.#listener = null;\n this.#status = \"pending\";\n this.start = () => {\n this.#promise ??= new Promise((resolve, reject) => {\n this.#listener = (e) => {\n if (!(e instanceof CustomEvent)) return;\n if (e.detail.id === this.#eventUniqId) {\n this.#status = \"resolved\";\n this.#removeListener();\n e.stopImmediatePropagation();\n resolve();\n }\n };\n this.#waitTimeout(() => {\n if (this.#status === \"pending\") this.#status = \"rejected\";\n this.#removeListener();\n reject(new Error(`Timing ${this.type.name} timeout.`));\n });\n this.#status = \"pending\";\n addEventListener(this.type.name, this.#listener);\n });\n return this.#promise;\n };\n this.done = () => {\n const event = new CustomEvent(this.type.name, {\n detail: { id: this.#eventUniqId }\n });\n dispatchEvent(event);\n };\n this.#removeListener = () => {\n if (this.#listener) removeEventListener(this.type.name, this.#listener);\n };\n this.#waitTimeout = (ifTimeout) => {\n setTimeout(() => {\n ifTimeout();\n }, this.type.timeout);\n };\n this.#eventUniqId = Symbol(type.name);\n this.type = type;\n clock.set(type.id, this);\n }\n #promise;\n #listener;\n /// @internal\n #eventUniqId;\n #status;\n /// The status of the timer.\n /// Can be `pending`, `resolved` or `rejected`.\n get status() {\n return this.#status;\n }\n #removeListener;\n #waitTimeout;\n}\nclass TimerType {\n /// Create a timer type with a name and a timeout.\n /// The name should be unique in the clock.\n constructor(name, timeout = 3e3) {\n this.create = (clock) => {\n return new Timer(clock, this);\n };\n this.id = /* @__PURE__ */ Symbol(`Timer-${name}`);\n this.name = name;\n this.timeout = timeout;\n }\n}\nconst createTimer = (name, timeout = 3e3) => new TimerType(name, timeout);\nexport {\n Clock,\n Container,\n Ctx,\n Inspector,\n Slice,\n SliceType,\n Timer,\n TimerType,\n createSlice,\n createTimer\n};\n//# sourceMappingURL=index.js.map\n","// ::- Persistent data structure representing an ordered mapping from\n// strings to values, with some convenient update methods.\nfunction OrderedMap(content) {\n this.content = content;\n}\n\nOrderedMap.prototype = {\n constructor: OrderedMap,\n\n find: function(key) {\n for (var i = 0; i < this.content.length; i += 2)\n if (this.content[i] === key) return i\n return -1\n },\n\n // :: (string) → ?any\n // Retrieve the value stored under `key`, or return undefined when\n // no such key exists.\n get: function(key) {\n var found = this.find(key);\n return found == -1 ? undefined : this.content[found + 1]\n },\n\n // :: (string, any, ?string) → OrderedMap\n // Create a new map by replacing the value of `key` with a new\n // value, or adding a binding to the end of the map. If `newKey` is\n // given, the key of the binding will be replaced with that key.\n update: function(key, value, newKey) {\n var self = newKey && newKey != key ? this.remove(newKey) : this;\n var found = self.find(key), content = self.content.slice();\n if (found == -1) {\n content.push(newKey || key, value);\n } else {\n content[found + 1] = value;\n if (newKey) content[found] = newKey;\n }\n return new OrderedMap(content)\n },\n\n // :: (string) → OrderedMap\n // Return a map with the given key removed, if it existed.\n remove: function(key) {\n var found = this.find(key);\n if (found == -1) return this\n var content = this.content.slice();\n content.splice(found, 2);\n return new OrderedMap(content)\n },\n\n // :: (string, any) → OrderedMap\n // Add a new key to the start of the map.\n addToStart: function(key, value) {\n return new OrderedMap([key, value].concat(this.remove(key).content))\n },\n\n // :: (string, any) → OrderedMap\n // Add a new key to the end of the map.\n addToEnd: function(key, value) {\n var content = this.remove(key).content.slice();\n content.push(key, value);\n return new OrderedMap(content)\n },\n\n // :: (string, string, any) → OrderedMap\n // Add a key after the given key. If `place` is not found, the new\n // key is added to the end.\n addBefore: function(place, key, value) {\n var without = this.remove(key), content = without.content.slice();\n var found = without.find(place);\n content.splice(found == -1 ? content.length : found, 0, key, value);\n return new OrderedMap(content)\n },\n\n // :: ((key: string, value: any))\n // Call the given function for each key/value pair in the map, in\n // order.\n forEach: function(f) {\n for (var i = 0; i < this.content.length; i += 2)\n f(this.content[i], this.content[i + 1]);\n },\n\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a new map by prepending the keys in this map that don't\n // appear in `map` before the keys in `map`.\n prepend: function(map) {\n map = OrderedMap.from(map);\n if (!map.size) return this\n return new OrderedMap(map.content.concat(this.subtract(map).content))\n },\n\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a new map by appending the keys in this map that don't\n // appear in `map` after the keys in `map`.\n append: function(map) {\n map = OrderedMap.from(map);\n if (!map.size) return this\n return new OrderedMap(this.subtract(map).content.concat(map.content))\n },\n\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a map containing all the keys in this map that don't\n // appear in `map`.\n subtract: function(map) {\n var result = this;\n map = OrderedMap.from(map);\n for (var i = 0; i < map.content.length; i += 2)\n result = result.remove(map.content[i]);\n return result\n },\n\n // :: () → Object\n // Turn ordered map into a plain object.\n toObject: function() {\n var result = {};\n this.forEach(function(key, value) { result[key] = value; });\n return result\n },\n\n // :: number\n // The amount of keys in this map.\n get size() {\n return this.content.length >> 1\n }\n};\n\n// :: (?union<Object, OrderedMap>) → OrderedMap\n// Return a map with the given content. If null, create an empty\n// map. If given an ordered map, return that map itself. If given an\n// object, create a map from the object's properties.\nOrderedMap.from = function(value) {\n if (value instanceof OrderedMap) return value\n var content = [];\n if (value) for (var prop in value) content.push(prop, value[prop]);\n return new OrderedMap(content)\n};\n\nexport default OrderedMap;\n","import OrderedMap from 'orderedmap';\n\nfunction findDiffStart(a, b, pos) {\n for (let i = 0;; i++) {\n if (i == a.childCount || i == b.childCount)\n return a.childCount == b.childCount ? null : pos;\n let childA = a.child(i), childB = b.child(i);\n if (childA == childB) {\n pos += childA.nodeSize;\n continue;\n }\n if (!childA.sameMarkup(childB))\n return pos;\n if (childA.isText && childA.text != childB.text) {\n for (let j = 0; childA.text[j] == childB.text[j]; j++)\n pos++;\n return pos;\n }\n if (childA.content.size || childB.content.size) {\n let inner = findDiffStart(childA.content, childB.content, pos + 1);\n if (inner != null)\n return inner;\n }\n pos += childA.nodeSize;\n }\n}\nfunction findDiffEnd(a, b, posA, posB) {\n for (let iA = a.childCount, iB = b.childCount;;) {\n if (iA == 0 || iB == 0)\n return iA == iB ? null : { a: posA, b: posB };\n let childA = a.child(--iA), childB = b.child(--iB), size = childA.nodeSize;\n if (childA == childB) {\n posA -= size;\n posB -= size;\n continue;\n }\n if (!childA.sameMarkup(childB))\n return { a: posA, b: posB };\n if (childA.isText && childA.text != childB.text) {\n let same = 0, minSize = Math.min(childA.text.length, childB.text.length);\n while (same < minSize && childA.text[childA.text.length - same - 1] == childB.text[childB.text.length - same - 1]) {\n same++;\n posA--;\n posB--;\n }\n return { a: posA, b: posB };\n }\n if (childA.content.size || childB.content.size) {\n let inner = findDiffEnd(childA.content, childB.content, posA - 1, posB - 1);\n if (inner)\n return inner;\n }\n posA -= size;\n posB -= size;\n }\n}\n\n/**\nA fragment represents a node's collection of child nodes.\n\nLike nodes, fragments are persistent data structures, and you\nshould not mutate them or their content. Rather, you create new\ninstances whenever needed. The API tries to make this easy.\n*/\nclass Fragment {\n /**\n @internal\n */\n constructor(\n /**\n The child nodes in this fragment.\n */\n content, size) {\n this.content = content;\n this.size = size || 0;\n if (size == null)\n for (let i = 0; i < content.length; i++)\n this.size += content[i].nodeSize;\n }\n /**\n Invoke a callback for all descendant nodes between the given two\n positions (relative to start of this fragment). Doesn't descend\n into a node when the callback returns `false`.\n */\n nodesBetween(from, to, f, nodeStart = 0, parent) {\n for (let i = 0, pos = 0; pos < to; i++) {\n let child = this.content[i], end = pos + child.nodeSize;\n if (end > from && f(child, nodeStart + pos, parent || null, i) !== false && child.content.size) {\n let start = pos + 1;\n child.nodesBetween(Math.max(0, from - start), Math.min(child.content.size, to - start), f, nodeStart + start);\n }\n pos = end;\n }\n }\n /**\n Call the given callback for every descendant node. `pos` will be\n relative to the start of the fragment. The callback may return\n `false` to prevent traversal of a given node's children.\n */\n descendants(f) {\n this.nodesBetween(0, this.size, f);\n }\n /**\n Extract the text between `from` and `to`. See the same method on\n [`Node`](https://prosemirror.net/docs/ref/#model.Node.textBetween).\n */\n textBetween(from, to, blockSeparator, leafText) {\n let text = \"\", first = true;\n this.nodesBetween(from, to, (node, pos) => {\n let nodeText = node.isText ? node.text.slice(Math.max(from, pos) - pos, to - pos)\n : !node.isLeaf ? \"\"\n : leafText ? (typeof leafText === \"function\" ? leafText(node) : leafText)\n : node.type.spec.leafText ? node.type.spec.leafText(node)\n : \"\";\n if (node.isBlock && (node.isLeaf && nodeText || node.isTextblock) && blockSeparator) {\n if (first)\n first = false;\n else\n text += blockSeparator;\n }\n text += nodeText;\n }, 0);\n return text;\n }\n /**\n Create a new fragment containing the combined content of this\n fragment and the other.\n */\n append(other) {\n if (!other.size)\n return this;\n if (!this.size)\n return other;\n let last = this.lastChild, first = other.firstChild, content = this.content.slice(), i = 0;\n if (last.isText && last.sameMarkup(first)) {\n content[content.length - 1] = last.withText(last.text + first.text);\n i = 1;\n }\n for (; i < other.content.length; i++)\n content.push(other.content[i]);\n return new Fragment(content, this.size + other.size);\n }\n /**\n Cut out the sub-fragment between the two given positions.\n */\n cut(from, to = this.size) {\n if (from == 0 && to == this.size)\n return this;\n let result = [], size = 0;\n if (to > from)\n for (let i = 0, pos = 0; pos < to; i++) {\n let child = this.content[i], end = pos + child.nodeSize;\n if (end > from) {\n if (pos < from || end > to) {\n if (child.isText)\n child = child.cut(Math.max(0, from - pos), Math.min(child.text.length, to - pos));\n else\n child = child.cut(Math.max(0, from - pos - 1), Math.min(child.content.size, to - pos - 1));\n }\n result.push(child);\n size += child.nodeSize;\n }\n pos = end;\n }\n return new Fragment(result, size);\n }\n /**\n @internal\n */\n cutByIndex(from, to) {\n if (from == to)\n return Fragment.empty;\n if (from == 0 && to == this.content.length)\n return this;\n return new Fragment(this.content.slice(from, to));\n }\n /**\n Create a new fragment in which the node at the given index is\n replaced by the given node.\n */\n replaceChild(index, node) {\n let current = this.content[index];\n if (current == node)\n return this;\n let copy = this.content.slice();\n let size = this.size + node.nodeSize - current.nodeSize;\n copy[index] = node;\n return new Fragment(copy, size);\n }\n /**\n Create a new fragment by prepending the given node to this\n fragment.\n */\n addToStart(node) {\n return new Fragment([node].concat(this.content), this.size + node.nodeSize);\n }\n /**\n Create a new fragment by appending the given node to this\n fragment.\n */\n addToEnd(node) {\n return new Fragment(this.content.concat(node), this.size + node.nodeSize);\n }\n /**\n Compare this fragment to another one.\n */\n eq(other) {\n if (this.content.length != other.content.length)\n return false;\n for (let i = 0; i < this.content.length; i++)\n if (!this.content[i].eq(other.content[i]))\n return false;\n return true;\n }\n /**\n The first child of the fragment, or `null` if it is empty.\n */\n get firstChild() { return this.content.length ? this.content[0] : null; }\n /**\n The last child of the fragment, or `null` if it is empty.\n */\n get lastChild() { return this.content.length ? this.content[this.content.length - 1] : null; }\n /**\n The number of child nodes in this fragment.\n */\n get childCount() { return this.content.length; }\n /**\n Get the child node at the given index. Raise an error when the\n index is out of range.\n */\n child(index) {\n let found = this.content[index];\n if (!found)\n throw new RangeError(\"Index \" + index + \" out of range for \" + this);\n return found;\n }\n /**\n Get the child node at the given index, if it exists.\n */\n maybeChild(index) {\n return this.content[index] || null;\n }\n /**\n Call `f` for every child node, passing the node, its offset\n into this parent node, and its index.\n */\n forEach(f) {\n for (let i = 0, p = 0; i < this.content.length; i++) {\n let child = this.content[i];\n f(child, p, i);\n p += child.nodeSize;\n }\n }\n /**\n Find the first position at which this fragment and another\n fragment differ, or `null` if they are the same.\n */\n findDiffStart(other, pos = 0) {\n return findDiffStart(this, other, pos);\n }\n /**\n Find the first position, searching from the end, at which this\n fragment and the given fragment differ, or `null` if they are\n the same. Since this position will not be the same in both\n nodes, an object with two separate positions is returned.\n */\n findDiffEnd(other, pos = this.size, otherPos = other.size) {\n return findDiffEnd(this, other, pos, otherPos);\n }\n /**\n Find the index and inner offset corresponding to a given relative\n position in this fragment. The result object will be reused\n (overwritten) the next time the function is called. @internal\n */\n findIndex(pos) {\n if (pos == 0)\n return retIndex(0, pos);\n if (pos == this.size)\n return retIndex(this.content.length, pos);\n if (pos > this.size || pos < 0)\n throw new RangeError(`Position ${pos} outside of fragment (${this})`);\n for (let i = 0, curPos = 0;; i++) {\n let cur = this.child(i), end = curPos + cur.nodeSize;\n if (end >= pos) {\n if (end == pos)\n return retIndex(i + 1, end);\n return retIndex(i, curPos);\n }\n curPos = end;\n }\n }\n /**\n Return a debugging string that describes this fragment.\n */\n toString() { return \"<\" + this.toStringInner() + \">\"; }\n /**\n @internal\n */\n toStringInner() { return this.content.join(\", \"); }\n /**\n Create a JSON-serializeable representation of this fragment.\n */\n toJSON() {\n return this.content.length ? this.content.map(n => n.toJSON()) : null;\n }\n /**\n Deserialize a fragment from its JSON representation.\n */\n static fromJSON(schema, value) {\n if (!value)\n return Fragment.empty;\n if (!Array.isArray(value))\n throw new RangeError(\"Invalid input for Fragment.fromJSON\");\n return new Fragment(value.map(schema.nodeFromJSON));\n }\n /**\n Build a fragment from an array of nodes. Ensures that adjacent\n text nodes with the same marks are joined together.\n */\n static fromArray(array) {\n if (!array.length)\n return Fragment.empty;\n let joined, size = 0;\n for (let i = 0; i < array.length; i++) {\n let node = array[i];\n size += node.nodeSize;\n if (i && node.isText && array[i - 1].sameMarkup(node)) {\n if (!joined)\n joined = array.slice(0, i);\n joined[joined.length - 1] = node\n .withText(joined[joined.length - 1].text + node.text);\n }\n else if (joined) {\n joined.push(node);\n }\n }\n return new Fragment(joined || array, size);\n }\n /**\n Create a fragment from something that can be interpreted as a\n set of nodes. For `null`, it returns the empty fragment. For a\n fragment, the fragment itself. For a node or array of nodes, a\n fragment containing those nodes.\n */\n static from(nodes) {\n if (!nodes)\n return Fragment.empty;\n if (nodes instanceof Fragment)\n return nodes;\n if (Array.isArray(nodes))\n return this.fromArray(nodes);\n if (nodes.attrs)\n return new Fragment([nodes], nodes.nodeSize);\n throw new RangeError(\"Can not convert \" + nodes + \" to a Fragment\" +\n (nodes.nodesBetween ? \" (looks like multiple versions of prosemirror-model were loaded)\" : \"\"));\n }\n}\n/**\nAn empty fragment. Intended to be reused whenever a node doesn't\ncontain anything (rather than allocating a new empty fragment for\neach leaf node).\n*/\nFragment.empty = new Fragment([], 0);\nconst found = { index: 0, offset: 0 };\nfunction retIndex(index, offset) {\n found.index = index;\n found.offset = offset;\n return found;\n}\n\nfunction compareDeep(a, b) {\n if (a === b)\n return true;\n if (!(a && typeof a == \"object\") ||\n !(b && typeof b == \"object\"))\n return false;\n let array = Array.isArray(a);\n if (Array.isArray(b) != array)\n return false;\n if (array) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!compareDeep(a[i], b[i]))\n return false;\n }\n else {\n for (let p in a)\n if (!(p in b) || !compareDeep(a[p], b[p]))\n return false;\n for (let p in b)\n if (!(p in a))\n return false;\n }\n return true;\n}\n\n/**\nA mark is a piece of information that can be attached to a node,\nsuch as it being emphasized, in code font, or a link. It has a\ntype and optionally a set of attributes that provide further\ninformation (such as the target of the link). Marks are created\nthrough a `Schema`, which controls which types exist and which\nattributes they have.\n*/\nclass Mark {\n /**\n @internal\n */\n constructor(\n /**\n The type of this mark.\n */\n type, \n /**\n The attributes associated with this mark.\n */\n attrs) {\n this.type = type;\n this.attrs = attrs;\n }\n /**\n Given a set of marks, create a new set which contains this one as\n well, in the right position. If this mark is already in the set,\n the set itself is returned. If any marks that are set to be\n [exclusive](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) with this mark are present,\n those are replaced by this one.\n */\n addToSet(set) {\n let copy, placed = false;\n for (let i = 0; i < set.length; i++) {\n let other = set[i];\n if (this.eq(other))\n return set;\n if (this.type.excludes(other.type)) {\n if (!copy)\n copy = set.slice(0, i);\n }\n else if (other.type.excludes(this.type)) {\n return set;\n }\n else {\n if (!placed && other.type.rank > this.type.rank) {\n if (!copy)\n copy = set.slice(0, i);\n copy.push(this);\n placed = true;\n }\n if (copy)\n copy.push(other);\n }\n }\n if (!copy)\n copy = set.slice();\n if (!placed)\n copy.push(this);\n return copy;\n }\n /**\n Remove this mark from the given set, returning a new set. If this\n mark is not in the set, the set itself is returned.\n */\n removeFromSet(set) {\n for (let i = 0; i < set.length; i++)\n if (this.eq(set[i]))\n return set.slice(0, i).concat(set.slice(i + 1));\n return set;\n }\n /**\n Test whether this mark is in the given set of marks.\n */\n isInSet(set) {\n for (let i = 0; i < set.length; i++)\n if (this.eq(set[i]))\n return true;\n return false;\n }\n /**\n Test whether this mark has the same type and attributes as\n another mark.\n */\n eq(other) {\n return this == other ||\n (this.type == other.type && compareDeep(this.attrs, other.attrs));\n }\n /**\n Convert this mark to a JSON-serializeable representation.\n */\n toJSON() {\n let obj = { type: this.type.name };\n for (let _ in this.attrs) {\n obj.attrs = this.attrs;\n break;\n }\n return obj;\n }\n /**\n Deserialize a mark from JSON.\n */\n static fromJSON(schema, json) {\n if (!json)\n throw new RangeError(\"Invalid input for Mark.fromJSON\");\n let type = schema.marks[json.type];\n if (!type)\n throw new RangeError(`There is no mark type ${json.type} in this schema`);\n let mark = type.create(json.attrs);\n type.checkAttrs(mark.attrs);\n return mark;\n }\n /**\n Test whether two sets of marks are identical.\n */\n static sameSet(a, b) {\n if (a == b)\n return true;\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!a[i].eq(b[i]))\n return false;\n return true;\n }\n /**\n Create a properly sorted mark set from null, a single mark, or an\n unsorted array of marks.\n */\n static setFrom(marks) {\n if (!marks || Array.isArray(marks) && marks.length == 0)\n return Mark.none;\n if (marks instanceof Mark)\n return [marks];\n let copy = marks.slice();\n copy.sort((a, b) => a.type.rank - b.type.rank);\n return copy;\n }\n}\n/**\nThe empty set of marks.\n*/\nMark.none = [];\n\n/**\nError type raised by [`Node.replace`](https://prosemirror.net/docs/ref/#model.Node.replace) when\ngiven an invalid replacement.\n*/\nclass ReplaceError extends Error {\n}\n/*\nReplaceError = function(this: any, message: string) {\n let err = Error.call(this, message)\n ;(err as any).__proto__ = ReplaceError.prototype\n return err\n} as any\n\nReplaceError.prototype = Object.create(Error.prototype)\nReplaceError.prototype.constructor = ReplaceError\nReplaceError.prototype.name = \"ReplaceError\"\n*/\n/**\nA slice represents a piece cut out of a larger document. It\nstores not only a fragment, but also the depth up to which nodes on\nboth side are ‘open’ (cut through).\n*/\nclass Slice {\n /**\n Create a slice. When specifying a non-zero open depth, you must\n make sure that there are nodes of at least that depth at the\n appropriate side of the fragment—i.e. if the fragment is an\n empty paragraph node, `openStart` and `openEnd` can't be greater\n than 1.\n \n It is not necessary for the content of open nodes to conform to\n the schema's content constraints, though it should be a valid\n start/end/middle for such a node, depending on which sides are\n open.\n */\n constructor(\n /**\n The slice's content.\n */\n content, \n /**\n The open depth at the start of the fragment.\n */\n openStart, \n /**\n The open depth at the end.\n */\n openEnd) {\n this.content = content;\n this.openStart = openStart;\n this.openEnd = openEnd;\n }\n /**\n The size this slice would add when inserted into a document.\n */\n get size() {\n return this.content.size - this.openStart - this.openEnd;\n }\n /**\n @internal\n */\n insertAt(pos, fragment) {\n let content = insertInto(this.content, pos + this.openStart, fragment);\n return content && new Slice(content, this.openStart, this.openEnd);\n }\n /**\n @internal\n */\n removeBetween(from, to) {\n return new Slice(removeRange(this.content, from + this.openStart, to + this.openStart), this.openStart, this.openEnd);\n }\n /**\n Tests whether this slice is equal to another slice.\n */\n eq(other) {\n return this.content.eq(other.content) && this.openStart == other.openStart && this.openEnd == other.openEnd;\n }\n /**\n @internal\n */\n toString() {\n return this.content + \"(\" + this.openStart + \",\" + this.openEnd + \")\";\n }\n /**\n Convert a slice to a JSON-serializable representation.\n */\n toJSON() {\n if (!this.content.size)\n return null;\n let json = { content: this.content.toJSON() };\n if (this.openStart > 0)\n json.openStart = this.openStart;\n if (this.openEnd > 0)\n json.openEnd = this.openEnd;\n return json;\n }\n /**\n Deserialize a slice from its JSON representation.\n */\n static fromJSON(schema, json) {\n if (!json)\n return Slice.empty;\n let openStart = json.openStart || 0, openEnd = json.openEnd || 0;\n if (typeof openStart != \"number\" || typeof openEnd != \"number\")\n throw new RangeError(\"Invalid input for Slice.fromJSON\");\n return new Slice(Fragment.fromJSON(schema, json.content), openStart, openEnd);\n }\n /**\n Create a slice from a fragment by taking the maximum possible\n open value on both side of the fragment.\n */\n static maxOpen(fragment, openIsolating = true) {\n let openStart = 0, openEnd = 0;\n for (let n = fragment.firstChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.firstChild)\n openStart++;\n for (let n = fragment.lastChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.lastChild)\n openEnd++;\n return new Slice(fragment, openStart, openEnd);\n }\n}\n/**\nThe empty slice.\n*/\nSlice.empty = new Slice(Fragment.empty, 0, 0);\nfunction removeRange(content, from, to) {\n let { index, offset } = content.findIndex(from), child = content.maybeChild(index);\n let { index: indexTo, offset: offsetTo } = content.findIndex(to);\n if (offset == from || child.isText) {\n if (offsetTo != to && !content.child(indexTo).isText)\n throw new RangeError(\"Removing non-flat range\");\n return content.cut(0, from).append(content.cut(to));\n }\n if (index != indexTo)\n throw new RangeError(\"Removing non-flat range\");\n return content.replaceChild(index, child.copy(removeRange(child.content, from - offset - 1, to - offset - 1)));\n}\nfunction insertInto(content, dist, insert, parent) {\n let { index, offset } = content.findIndex(dist), child = content.maybeChild(index);\n if (offset == dist || child.isText) {\n if (parent && !parent.canReplace(index, index, insert))\n return null;\n return content.cut(0, dist).append(insert).append(content.cut(dist));\n }\n let inner = insertInto(child.content, dist - offset - 1, insert, child);\n return inner && content.replaceChild(index, child.copy(inner));\n}\nfunction replace($from, $to, slice) {\n if (slice.openStart > $from.depth)\n throw new ReplaceError(\"Inserted content deeper than insertion position\");\n if ($from.depth - slice.openStart != $to.depth - slice.openEnd)\n throw new ReplaceError(\"Inconsistent open depths\");\n return replaceOuter($from, $to, slice, 0);\n}\nfunction replaceOuter($from, $to, slice, depth) {\n let index = $from.index(depth), node = $from.node(depth);\n if (index == $to.index(depth) && depth < $from.depth - slice.openStart) {\n let inner = replaceOuter($from, $to, slice, depth + 1);\n return node.copy(node.content.replaceChild(index, inner));\n }\n else if (!slice.content.size) {\n return close(node, replaceTwoWay($from, $to, depth));\n }\n else if (!slice.openStart && !slice.openEnd && $from.depth == depth && $to.depth == depth) { // Simple, flat case\n let parent = $from.parent, content = parent.content;\n return close(parent, content.cut(0, $from.parentOffset).append(slice.content).append(content.cut($to.parentOffset)));\n }\n else {\n let { start, end } = prepareSliceForReplace(slice, $from);\n return close(node, replaceThreeWay($from, start, end, $to, depth));\n }\n}\nfunction checkJoin(main, sub) {\n if (!sub.type.compatibleContent(main.type))\n throw new ReplaceError(\"Cannot join \" + sub.type.name + \" onto \" + main.type.name);\n}\nfunction joinable($before, $after, depth) {\n let node = $before.node(depth);\n checkJoin(node, $after.node(depth));\n return node;\n}\nfunction addNode(child, target) {\n let last = target.length - 1;\n if (last >= 0 && child.isText && child.sameMarkup(target[last]))\n target[last] = child.withText(target[last].text + child.text);\n else\n target.push(child);\n}\nfunction addRange($start, $end, depth, target) {\n let node = ($end || $start).node(depth);\n let startIndex = 0, endIndex = $end ? $end.index(depth) : node.childCount;\n if ($start) {\n startIndex = $start.index(depth);\n if ($start.depth > depth) {\n startIndex++;\n }\n else if ($start.textOffset) {\n addNode($start.nodeAfter, target);\n startIndex++;\n }\n }\n for (let i = startIndex; i < endIndex; i++)\n addNode(node.child(i), target);\n if ($end && $end.depth == depth && $end.textOffset)\n addNode($end.nodeBefore, target);\n}\nfunction close(node, content) {\n node.type.checkContent(content);\n return node.copy(content);\n}\nfunction replaceThreeWay($from, $start, $end, $to, depth) {\n let openStart = $from.depth > depth && joinable($from, $start, depth + 1);\n let openEnd = $to.depth > depth && joinable($end, $to, depth + 1);\n let content = [];\n addRange(null, $from, depth, content);\n if (openStart && openEnd && $start.index(depth) == $end.index(depth)) {\n checkJoin(openStart, openEnd);\n addNode(close(openStart, replaceThreeWay($from, $start, $end, $to, depth + 1)), content);\n }\n else {\n if (openStart)\n addNode(close(openStart, replaceTwoWay($from, $start, depth + 1)), content);\n addRange($start, $end, depth, content);\n if (openEnd)\n addNode(close(openEnd, replaceTwoWay($end, $to, depth + 1)), content);\n }\n addRange($to, null, depth, content);\n return new Fragment(content);\n}\nfunction replaceTwoWay($from, $to, depth) {\n let content = [];\n addRange(null, $from, depth, content);\n if ($from.depth > depth) {\n let type = joinable($from, $to, depth + 1);\n addNode(close(type, replaceTwoWay($from, $to, depth + 1)), content);\n }\n addRange($to, null, depth, content);\n return new Fragment(content);\n}\nfunction prepareSliceForReplace(slice, $along) {\n let extra = $along.depth - slice.openStart, parent = $along.node(extra);\n let node = parent.copy(slice.content);\n for (let i = extra - 1; i >= 0; i--)\n node = $along.node(i).copy(Fragment.from(node));\n return { start: node.resolveNoCache(slice.openStart + extra),\n end: node.resolveNoCache(node.content.size - slice.openEnd - extra) };\n}\n\n/**\nYou can [_resolve_](https://prosemirror.net/docs/ref/#model.Node.resolve) a position to get more\ninformation about it. Objects of this class represent such a\nresolved position, providing various pieces of context\ninformation, and some helper methods.\n\nThroughout this interface, methods that take an optional `depth`\nparameter will interpret undefined as `this.depth` and negative\nnumbers as `this.depth + value`.\n*/\nclass ResolvedPos {\n /**\n @internal\n */\n constructor(\n /**\n The position that was resolved.\n */\n pos, \n /**\n @internal\n */\n path, \n /**\n The offset this position has into its parent node.\n */\n parentOffset) {\n this.pos = pos;\n this.path = path;\n this.parentOffset = parentOffset;\n this.depth = path.length / 3 - 1;\n }\n /**\n @internal\n */\n resolveDepth(val) {\n if (val == null)\n return this.depth;\n if (val < 0)\n return this.depth + val;\n return val;\n }\n /**\n The parent node that the position points into. Note that even if\n a position points into a text node, that node is not considered\n the parent—text nodes are ‘flat’ in this model, and have no content.\n */\n get parent() { return this.node(this.depth); }\n /**\n The root node in which the position was resolved.\n */\n get doc() { return this.node(0); }\n /**\n The ancestor node at the given level. `p.node(p.depth)` is the\n same as `p.parent`.\n */\n node(depth) { return this.path[this.resolveDepth(depth) * 3]; }\n /**\n The index into the ancestor at the given level. If this points\n at the 3rd node in the 2nd paragraph on the top level, for\n example, `p.index(0)` is 1 and `p.index(1)` is 2.\n */\n index(depth) { return this.path[this.resolveDepth(depth) * 3 + 1]; }\n /**\n The index pointing after this position into the ancestor at the\n given level.\n */\n indexAfter(depth) {\n depth = this.resolveDepth(depth);\n return this.index(depth) + (depth == this.depth && !this.textOffset ? 0 : 1);\n }\n /**\n The (absolute) position at the start of the node at the given\n level.\n */\n start(depth) {\n depth = this.resolveDepth(depth);\n return depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;\n }\n /**\n The (absolute) position at the end of the node at the given\n level.\n */\n end(depth) {\n depth = this.resolveDepth(depth);\n return this.start(depth) + this.node(depth).content.size;\n }\n /**\n The (absolute) position directly before the wrapping node at the\n given level, or, when `depth` is `this.depth + 1`, the original\n position.\n */\n before(depth) {\n depth = this.resolveDepth(depth);\n if (!depth)\n throw new RangeError(\"There is no position before the top-level node\");\n return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1];\n }\n /**\n The (absolute) position directly after the wrapping node at the\n given level, or the original position when `depth` is `this.depth + 1`.\n */\n after(depth) {\n depth = this.resolveDepth(depth);\n if (!depth)\n throw new RangeError(\"There is no position after the top-level node\");\n return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1] + this.path[depth * 3].nodeSize;\n }\n /**\n When this position points into a text node, this returns the\n distance between the position and the start of the text node.\n Will be zero for positions that point between nodes.\n */\n get textOffset() { return this.pos - this.path[this.path.length - 1]; }\n /**\n Get the node directly after the position, if any. If the position\n points into a text node, only the part of that node after the\n position is returned.\n */\n get nodeAfter() {\n let parent = this.parent, index = this.index(this.depth);\n if (index == parent.childCount)\n return null;\n let dOff = this.pos - this.path[this.path.length - 1], child = parent.child(index);\n return dOff ? parent.child(index).cut(dOff) : child;\n }\n /**\n Get the node directly before the position, if any. If the\n position points into a text node, only the part of that node\n before the position is returned.\n */\n get nodeBefore() {\n let index = this.index(this.depth);\n let dOff = this.pos - this.path[this.path.length - 1];\n if (dOff)\n return this.parent.child(index).cut(0, dOff);\n return index == 0 ? null : this.parent.child(index - 1);\n }\n /**\n Get the position at the given index in the parent node at the\n given depth (which defaults to `this.depth`).\n */\n posAtIndex(index, depth) {\n depth = this.resolveDepth(depth);\n let node = this.path[depth * 3], pos = depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;\n for (let i = 0; i < index; i++)\n pos += node.child(i).nodeSize;\n return pos;\n }\n /**\n Get the marks at this position, factoring in the surrounding\n marks' [`inclusive`](https://prosemirror.net/docs/ref/#model.MarkSpec.inclusive) property. If the\n position is at the start of a non-empty node, the marks of the\n node after it (if any) are returned.\n */\n marks() {\n let parent = this.parent, index = this.index();\n // In an empty parent, return the empty array\n if (parent.content.size == 0)\n return Mark.none;\n // When inside a text node, just return the text node's marks\n if (this.textOffset)\n return parent.child(index).marks;\n let main = parent.maybeChild(index - 1), other = parent.maybeChild(index);\n // If the `after` flag is true of there is no node before, make\n // the node after this position the main reference.\n if (!main) {\n let tmp = main;\n main = other;\n other = tmp;\n }\n // Use all marks in the main node, except those that have\n // `inclusive` set to false and are not present in the other node.\n let marks = main.marks;\n for (var i = 0; i < marks.length; i++)\n if (marks[i].type.spec.inclusive === false && (!other || !marks[i].isInSet(other.marks)))\n marks = marks[i--].removeFromSet(marks);\n return marks;\n }\n /**\n Get the marks after the current position, if any, except those\n that are non-inclusive and not present at position `$end`. This\n is mostly useful for getting the set of marks to preserve after a\n deletion. Will return `null` if this position is at the end of\n its parent node or its parent node isn't a textblock (in which\n case no marks should be preserved).\n */\n marksAcross($end) {\n let after = this.parent.maybeChild(this.index());\n if (!after || !after.isInline)\n return null;\n let marks = after.marks, next = $end.parent.maybeChild($end.index());\n for (var i = 0; i < marks.length; i++)\n if (marks[i].type.spec.inclusive === false && (!next || !marks[i].isInSet(next.marks)))\n marks = marks[i--].removeFromSet(marks);\n return marks;\n }\n /**\n The depth up to which this position and the given (non-resolved)\n position share the same parent nodes.\n */\n sharedDepth(pos) {\n for (let depth = this.depth; depth > 0; depth--)\n if (this.start(depth) <= pos && this.end(depth) >= pos)\n return depth;\n return 0;\n }\n /**\n Returns a range based on the place where this position and the\n given position diverge around block content. If both point into\n the same textblock, for example, a range around that textblock\n will be returned. If they point into different blocks, the range\n around those blocks in their shared ancestor is returned. You can\n pass in an optional predicate that will be called with a parent\n node to see if a range into that parent is acceptable.\n */\n blockRange(other = this, pred) {\n if (other.pos < this.pos)\n return other.blockRange(this);\n for (let d = this.depth - (this.parent.inlineContent || this.pos == other.pos ? 1 : 0); d >= 0; d--)\n if (other.pos <= this.end(d) && (!pred || pred(this.node(d))))\n return new NodeRange(this, other, d);\n return null;\n }\n /**\n Query whether the given position shares the same parent node.\n */\n sameParent(other) {\n return this.pos - this.parentOffset == other.pos - other.parentOffset;\n }\n /**\n Return the greater of this and the given position.\n */\n max(other) {\n return other.pos > this.pos ? other : this;\n }\n /**\n Return the smaller of this and the given position.\n */\n min(other) {\n return other.pos < this.pos ? other : this;\n }\n /**\n @internal\n */\n toString() {\n let str = \"\";\n for (let i = 1; i <= this.depth; i++)\n str += (str ? \"/\" : \"\") + this.node(i).type.name + \"_\" + this.index(i - 1);\n return str + \":\" + this.parentOffset;\n }\n /**\n @internal\n */\n static resolve(doc, pos) {\n if (!(pos >= 0 && pos <= doc.content.size))\n throw new RangeError(\"Position \" + pos + \" out of range\");\n let path = [];\n let start = 0, parentOffset = pos;\n for (let node = doc;;) {\n let { index, offset } = node.content.findIndex(parentOffset);\n let rem = parentOffset - offset;\n path.push(node, index, start + offset);\n if (!rem)\n break;\n node = node.child(index);\n if (node.isText)\n break;\n parentOffset = rem - 1;\n start += offset + 1;\n }\n return new ResolvedPos(pos, path, parentOffset);\n }\n /**\n @internal\n */\n static resolveCached(doc, pos) {\n let cache = resolveCache.get(doc);\n if (cache) {\n for (let i = 0; i < cache.elts.length; i++) {\n let elt = cache.elts[i];\n if (elt.pos == pos)\n return elt;\n }\n }\n else {\n resolveCache.set(doc, cache = new ResolveCache);\n }\n let result = cache.elts[cache.i] = ResolvedPos.resolve(doc, pos);\n cache.i = (cache.i + 1) % resolveCacheSize;\n return result;\n }\n}\nclass ResolveCache {\n constructor() {\n this.elts = [];\n this.i = 0;\n }\n}\nconst resolveCacheSize = 12, resolveCache = new WeakMap();\n/**\nRepresents a flat range of content, i.e. one that starts and\nends in the same node.\n*/\nclass NodeRange {\n /**\n Construct a node range. `$from` and `$to` should point into the\n same node until at least the given `depth`, since a node range\n denotes an adjacent set of nodes in a single parent node.\n */\n constructor(\n /**\n A resolved position along the start of the content. May have a\n `depth` greater than this object's `depth` property, since\n these are the positions that were used to compute the range,\n not re-resolved positions directly at its boundaries.\n */\n $from, \n /**\n A position along the end of the content. See\n caveat for [`$from`](https://prosemirror.net/docs/ref/#model.NodeRange.$from).\n */\n $to, \n /**\n The depth of the node that this range points into.\n */\n depth) {\n this.$from = $from;\n this.$to = $to;\n this.depth = depth;\n }\n /**\n The position at the start of the range.\n */\n get start() { return this.$from.before(this.depth + 1); }\n /**\n The position at the end of the range.\n */\n get end() { return this.$to.after(this.depth + 1); }\n /**\n The parent node that the range points into.\n */\n get parent() { return this.$from.node(this.depth); }\n /**\n The start index of the range in the parent node.\n */\n get startIndex() { return this.$from.index(this.depth); }\n /**\n The end index of the range in the parent node.\n */\n get endIndex() { return this.$to.indexAfter(this.depth); }\n}\n\nconst emptyAttrs = Object.create(null);\n/**\nThis class represents a node in the tree that makes up a\nProseMirror document. So a document is an instance of `Node`, with\nchildren that are also instances of `Node`.\n\nNodes are persistent data structures. Instead of changing them, you\ncreate new ones with the content you want. Old ones keep pointing\nat the old document shape. This is made cheaper by sharing\nstructure between the old and new data as much as possible, which a\ntree shape like this (without back pointers) makes easy.\n\n**Do not** directly mutate the properties of a `Node` object. See\n[the guide](https://prosemirror.net/docs/guide/#doc) for more information.\n*/\nclass Node {\n /**\n @internal\n */\n constructor(\n /**\n The type of node that this is.\n */\n type, \n /**\n An object mapping attribute names to values. The kind of\n attributes allowed and required are\n [determined](https://prosemirror.net/docs/ref/#model.NodeSpec.attrs) by the node type.\n */\n attrs, \n // A fragment holding the node's children.\n content, \n /**\n The marks (things like whether it is emphasized or part of a\n link) applied to this node.\n */\n marks = Mark.none) {\n this.type = type;\n this.attrs = attrs;\n this.marks = marks;\n this.content = content || Fragment.empty;\n }\n /**\n The array of this node's child nodes.\n */\n get children() { return this.content.content; }\n /**\n The size of this node, as defined by the integer-based [indexing\n scheme](https://prosemirror.net/docs/guide/#doc.indexing). For text nodes, this is the\n amount of characters. For other leaf nodes, it is one. For\n non-leaf nodes, it is the size of the content plus two (the\n start and end token).\n */\n get nodeSize() { return this.isLeaf ? 1 : 2 + this.content.size; }\n /**\n The number of children that the node has.\n */\n get childCount() { return this.content.childCount; }\n /**\n Get the child node at the given index. Raises an error when the\n index is out of range.\n */\n child(index) { return this.content.child(index); }\n /**\n Get the child node at the given index, if it exists.\n */\n maybeChild(index) { return this.content.maybeChild(index); }\n /**\n Call `f` for every child node, passing the node, its offset\n into this parent node, and its index.\n */\n forEach(f) { this.content.forEach(f); }\n /**\n Invoke a callback for all descendant nodes recursively between\n the given two positions that are relative to start of this\n node's content. The callback is invoked with the node, its\n position relative to the original node (method receiver),\n its parent node, and its child index. When the callback returns\n false for a given node, that node's children will not be\n recursed over. The last parameter can be used to specify a\n starting position to count from.\n */\n nodesBetween(from, to, f, startPos = 0) {\n this.content.nodesBetween(from, to, f, startPos, this);\n }\n /**\n Call the given callback for every descendant node. Doesn't\n descend into a node when the callback returns `false`.\n */\n descendants(f) {\n this.nodesBetween(0, this.content.size, f);\n }\n /**\n Concatenates all the text nodes found in this fragment and its\n children.\n */\n get textContent() {\n return (this.isLeaf && this.type.spec.leafText)\n ? this.type.spec.leafText(this)\n : this.textBetween(0, this.content.size, \"\");\n }\n /**\n Get all text between positions `from` and `to`. When\n `blockSeparator` is given, it will be inserted to separate text\n from different block nodes. If `leafText` is given, it'll be\n inserted for every non-text leaf node encountered, otherwise\n [`leafText`](https://prosemirror.net/docs/ref/#model.NodeSpec.leafText) will be used.\n */\n textBetween(from, to, blockSeparator, leafText) {\n return this.content.textBetween(from, to, blockSeparator, leafText);\n }\n /**\n Returns this node's first child, or `null` if there are no\n children.\n */\n get firstChild() { return this.content.firstChild; }\n /**\n Returns this node's last child, or `null` if there are no\n children.\n */\n get lastChild() { return this.content.lastChild; }\n /**\n Test whether two nodes represent the same piece of document.\n */\n eq(other) {\n return this == other || (this.sameMarkup(other) && this.content.eq(other.content));\n }\n /**\n Compare the markup (type, attributes, and marks) of this node to\n those of another. Returns `true` if both have the same markup.\n */\n sameMarkup(other) {\n return this.hasMarkup(other.type, other.attrs, other.marks);\n }\n /**\n Check whether this node's markup correspond to the given type,\n attributes, and marks.\n */\n hasMarkup(type, attrs, marks) {\n return this.type == type &&\n compareDeep(this.attrs, attrs || type.defaultAttrs || emptyAttrs) &&\n Mark.sameSet(this.marks, marks || Mark.none);\n }\n /**\n Create a new node with the same markup as this node, containing\n the given content (or empty, if no content is given).\n */\n copy(content = null) {\n if (content == this.content)\n return this;\n return new Node(this.type, this.attrs, content, this.marks);\n }\n /**\n Create a copy of this node, with the given set of marks instead\n of the node's own marks.\n */\n mark(marks) {\n return marks == this.marks ? this : new Node(this.type, this.attrs, this.content, marks);\n }\n /**\n Create a copy of this node with only the content between the\n given positions. If `to` is not given, it defaults to the end of\n the node.\n */\n cut(from, to = this.content.size) {\n if (from == 0 && to == this.content.size)\n return this;\n return this.copy(this.content.cut(from, to));\n }\n /**\n Cut out the part of the document between the given positions, and\n return it as a `Slice` object.\n */\n slice(from, to = this.content.size, includeParents = false) {\n if (from == to)\n return Slice.empty;\n let $from = this.resolve(from), $to = this.resolve(to);\n let depth = includeParents ? 0 : $from.sharedDepth(to);\n let start = $from.start(depth), node = $from.node(depth);\n let content = node.content.cut($from.pos - start, $to.pos - start);\n return new Slice(content, $from.depth - depth, $to.depth - depth);\n }\n /**\n Replace the part of the document between the given positions with\n the given slice. The slice must 'fit', meaning its open sides\n must be able to connect to the surrounding content, and its\n content nodes must be valid children for the node they are placed\n into. If any of this is violated, an error of type\n [`ReplaceError`](https://prosemirror.net/docs/ref/#model.ReplaceError) is thrown.\n */\n replace(from, to, slice) {\n return replace(this.resolve(from), this.resolve(to), slice);\n }\n /**\n Find the node directly after the given position.\n */\n nodeAt(pos) {\n for (let node = this;;) {\n let { index, offset } = node.content.findIndex(pos);\n node = node.maybeChild(index);\n if (!node)\n return null;\n if (offset == pos || node.isText)\n return node;\n pos -= offset + 1;\n }\n }\n /**\n Find the (direct) child node after the given offset, if any,\n and return it along with its index and offset relative to this\n node.\n */\n childAfter(pos) {\n let { index, offset } = this.content.findIndex(pos);\n return { node: this.content.maybeChild(index), index, offset };\n }\n /**\n Find the (direct) child node before the given offset, if any,\n and return it along with its index and offset relative to this\n node.\n */\n childBefore(pos) {\n if (pos == 0)\n return { node: null, index: 0, offset: 0 };\n let { index, offset } = this.content.findIndex(pos);\n if (offset < pos)\n return { node: this.content.child(index), index, offset };\n let node = this.content.child(index - 1);\n return { node, index: index - 1, offset: offset - node.nodeSize };\n }\n /**\n Resolve the given position in the document, returning an\n [object](https://prosemirror.net/docs/ref/#model.ResolvedPos) with information about its context.\n */\n resolve(pos) { return ResolvedPos.resolveCached(this, pos); }\n /**\n @internal\n */\n resolveNoCache(pos) { return ResolvedPos.resolve(this, pos); }\n /**\n Test whether a given mark or mark type occurs in this document\n between the two given positions.\n */\n rangeHasMark(from, to, type) {\n let found = false;\n if (to > from)\n this.nodesBetween(from, to, node => {\n if (type.isInSet(node.marks))\n found = true;\n return !found;\n });\n return found;\n }\n /**\n True when this is a block (non-inline node)\n */\n get isBlock() { return this.type.isBlock; }\n /**\n True when this is a textblock node, a block node with inline\n content.\n */\n get isTextblock() { return this.type.isTextblock; }\n /**\n True when this node allows inline content.\n */\n get inlineContent() { return this.type.inlineContent; }\n /**\n True when this is an inline node (a text node or a node that can\n appear among text).\n */\n get isInline() { return this.type.isInline; }\n /**\n True when this is a text node.\n */\n get isText() { return this.type.isText; }\n /**\n True when this is a leaf node.\n */\n get isLeaf() { return this.type.isLeaf; }\n /**\n True when this is an atom, i.e. when it does not have directly\n editable content. This is usually the same as `isLeaf`, but can\n be configured with the [`atom` property](https://prosemirror.net/docs/ref/#model.NodeSpec.atom)\n on a node's spec (typically used when the node is displayed as\n an uneditable [node view](https://prosemirror.net/docs/ref/#view.NodeView)).\n */\n get isAtom() { return this.type.isAtom; }\n /**\n Return a string representation of this node for debugging\n purposes.\n */\n toString() {\n if (this.type.spec.toDebugString)\n return this.type.spec.toDebugString(this);\n let name = this.type.name;\n if (this.content.size)\n name += \"(\" + this.content.toStringInner() + \")\";\n return wrapMarks(this.marks, name);\n }\n /**\n Get the content match in this node at the given index.\n */\n contentMatchAt(index) {\n let match = this.type.contentMatch.matchFragment(this.content, 0, index);\n if (!match)\n throw new Error(\"Called contentMatchAt on a node with invalid content\");\n return match;\n }\n /**\n Test whether replacing the range between `from` and `to` (by\n child index) with the given replacement fragment (which defaults\n to the empty fragment) would leave the node's content valid. You\n can optionally pass `start` and `end` indices into the\n replacement fragment.\n */\n canReplace(from, to, replacement = Fragment.empty, start = 0, end = replacement.childCount) {\n let one = this.contentMatchAt(from).matchFragment(replacement, start, end);\n let two = one && one.matchFragment(this.content, to);\n if (!two || !two.validEnd)\n return false;\n for (let i = start; i < end; i++)\n if (!this.type.allowsMarks(replacement.child(i).marks))\n return false;\n return true;\n }\n /**\n Test whether replacing the range `from` to `to` (by index) with\n a node of the given type would leave the node's content valid.\n */\n canReplaceWith(from, to, type, marks) {\n if (marks && !this.type.allowsMarks(marks))\n return false;\n let start = this.contentMatchAt(from).matchType(type);\n let end = start && start.matchFragment(this.content, to);\n return end ? end.validEnd : false;\n }\n /**\n Test whether the given node's content could be appended to this\n node. If that node is empty, this will only return true if there\n is at least one node type that can appear in both nodes (to avoid\n merging completely incompatible nodes).\n */\n canAppend(other) {\n if (other.content.size)\n return this.canReplace(this.childCount, this.childCount, other.content);\n else\n return this.type.compatibleContent(other.type);\n }\n /**\n Check whether this node and its descendants conform to the\n schema, and raise an exception when they do not.\n */\n check() {\n this.type.checkContent(this.content);\n this.type.checkAttrs(this.attrs);\n let copy = Mark.none;\n for (let i = 0; i < this.marks.length; i++) {\n let mark = this.marks[i];\n mark.type.checkAttrs(mark.attrs);\n copy = mark.addToSet(copy);\n }\n if (!Mark.sameSet(copy, this.marks))\n throw new RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map(m => m.type.name)}`);\n this.content.forEach(node => node.check());\n }\n /**\n Return a JSON-serializeable representation of this node.\n */\n toJSON() {\n let obj = { type: this.type.name };\n for (let _ in this.attrs) {\n obj.attrs = this.attrs;\n break;\n }\n if (this.content.size)\n obj.content = this.content.toJSON();\n if (this.marks.length)\n obj.marks = this.marks.map(n => n.toJSON());\n return obj;\n }\n /**\n Deserialize a node from its JSON representation.\n */\n static fromJSON(schema, json) {\n if (!json)\n throw new RangeError(\"Invalid input for Node.fromJSON\");\n let marks = undefined;\n if (json.marks) {\n if (!Array.isArray(json.marks))\n throw new RangeError(\"Invalid mark data for Node.fromJSON\");\n marks = json.marks.map(schema.markFromJSON);\n }\n if (json.type == \"text\") {\n if (typeof json.text != \"string\")\n throw new RangeError(\"Invalid text node in JSON\");\n return schema.text(json.text, marks);\n }\n let content = Fragment.fromJSON(schema, json.content);\n let node = schema.nodeType(json.type).create(json.attrs, content, marks);\n node.type.checkAttrs(node.attrs);\n return node;\n }\n}\nNode.prototype.text = undefined;\nclass TextNode extends Node {\n /**\n @internal\n */\n constructor(type, attrs, content, marks) {\n super(type, attrs, null, marks);\n if (!content)\n throw new RangeError(\"Empty text nodes are not allowed\");\n this.text = content;\n }\n toString() {\n if (this.type.spec.toDebugString)\n return this.type.spec.toDebugString(this);\n return wrapMarks(this.marks, JSON.stringify(this.text));\n }\n get textContent() { return this.text; }\n textBetween(from, to) { return this.text.slice(from, to); }\n get nodeSize() { return this.text.length; }\n mark(marks) {\n return marks == this.marks ? this : new TextNode(this.type, this.attrs, this.text, marks);\n }\n withText(text) {\n if (text == this.text)\n return this;\n return new TextNode(this.type, this.attrs, text, this.marks);\n }\n cut(from = 0, to = this.text.length) {\n if (from == 0 && to == this.text.length)\n return this;\n return this.withText(this.text.slice(from, to));\n }\n eq(other) {\n return this.sameMarkup(other) && this.text == other.text;\n }\n toJSON() {\n let base = super.toJSON();\n base.text = this.text;\n return base;\n }\n}\nfunction wrapMarks(marks, str) {\n for (let i = marks.length - 1; i >= 0; i--)\n str = marks[i].type.name + \"(\" + str + \")\";\n return str;\n}\n\n/**\nInstances of this class represent a match state of a node type's\n[content expression](https://prosemirror.net/docs/ref/#model.NodeSpec.content), and can be used to\nfind out whether further content matches here, and whether a given\nposition is a valid end of the node.\n*/\nclass ContentMatch {\n /**\n @internal\n */\n constructor(\n /**\n True when this match state represents a valid end of the node.\n */\n validEnd) {\n this.validEnd = validEnd;\n /**\n @internal\n */\n this.next = [];\n /**\n @internal\n */\n this.wrapCache = [];\n }\n /**\n @internal\n */\n static parse(string, nodeTypes) {\n let stream = new TokenStream(string, nodeTypes);\n if (stream.next == null)\n return ContentMatch.empty;\n let expr = parseExpr(stream);\n if (stream.next)\n stream.err(\"Unexpected trailing text\");\n let match = dfa(nfa(expr));\n checkForDeadEnds(match, stream);\n return match;\n }\n /**\n Match a node type, returning a match after that node if\n successful.\n */\n matchType(type) {\n for (let i = 0; i < this.next.length; i++)\n if (this.next[i].type == type)\n return this.next[i].next;\n return null;\n }\n /**\n Try to match a fragment. Returns the resulting match when\n successful.\n */\n matchFragment(frag, start = 0, end = frag.childCount) {\n let cur = this;\n for (let i = start; cur && i < end; i++)\n cur = cur.matchType(frag.child(i).type);\n return cur;\n }\n /**\n @internal\n */\n get inlineContent() {\n return this.next.length != 0 && this.next[0].type.isInline;\n }\n /**\n Get the first matching node type at this match position that can\n be generated.\n */\n get defaultType() {\n for (let i = 0; i < this.next.length; i++) {\n let { type } = this.next[i];\n if (!(type.isText || type.hasRequiredAttrs()))\n return type;\n }\n return null;\n }\n /**\n @internal\n */\n compatible(other) {\n for (let i = 0; i < this.next.length; i++)\n for (let j = 0; j < other.next.length; j++)\n if (this.next[i].type == other.next[j].type)\n return true;\n return false;\n }\n /**\n Try to match the given fragment, and if that fails, see if it can\n be made to match by inserting nodes in front of it. When\n successful, return a fragment of inserted nodes (which may be\n empty if nothing had to be inserted). When `toEnd` is true, only\n return a fragment if the resulting match goes to the end of the\n content expression.\n */\n fillBefore(after, toEnd = false, startIndex = 0) {\n let seen = [this];\n function search(match, types) {\n let finished = match.matchFragment(after, startIndex);\n if (finished && (!toEnd || finished.validEnd))\n return Fragment.from(types.map(tp => tp.createAndFill()));\n for (let i = 0; i < match.next.length; i++) {\n let { type, next } = match.next[i];\n if (!(type.isText || type.hasRequiredAttrs()) && seen.indexOf(next) == -1) {\n seen.push(next);\n let found = search(next, types.concat(type));\n if (found)\n return found;\n }\n }\n return null;\n }\n return search(this, []);\n }\n /**\n Find a set of wrapping node types that would allow a node of the\n given type to appear at this position. The result may be empty\n (when it fits directly) and will be null when no such wrapping\n exists.\n */\n findWrapping(target) {\n for (let i = 0; i < this.wrapCache.length; i += 2)\n if (this.wrapCache[i] == target)\n return this.wrapCache[i + 1];\n let computed = this.computeWrapping(target);\n this.wrapCache.push(target, computed);\n return computed;\n }\n /**\n @internal\n */\n computeWrapping(target) {\n let seen = Object.create(null), active = [{ match: this, type: null, via: null }];\n while (active.length) {\n let current = active.shift(), match = current.match;\n if (match.matchType(target)) {\n let result = [];\n for (let obj = current; obj.type; obj = obj.via)\n result.push(obj.type);\n return result.reverse();\n }\n for (let i = 0; i < match.next.length; i++) {\n let { type, next } = match.next[i];\n if (!type.isLeaf && !type.hasRequiredAttrs() && !(type.name in seen) && (!current.type || next.validEnd)) {\n active.push({ match: type.contentMatch, type, via: current });\n seen[type.name] = true;\n }\n }\n }\n return null;\n }\n /**\n The number of outgoing edges this node has in the finite\n automaton that describes the content expression.\n */\n get edgeCount() {\n return this.next.length;\n }\n /**\n Get the _n_​th outgoing edge from this node in the finite\n automaton that describes the content expression.\n */\n edge(n) {\n if (n >= this.next.length)\n throw new RangeError(`There's no ${n}th edge in this content match`);\n return this.next[n];\n }\n /**\n @internal\n */\n toString() {\n let seen = [];\n function scan(m) {\n seen.push(m);\n for (let i = 0; i < m.next.length; i++)\n if (seen.indexOf(m.next[i].next) == -1)\n scan(m.next[i].next);\n }\n scan(this);\n return seen.map((m, i) => {\n let out = i + (m.validEnd ? \"*\" : \" \") + \" \";\n for (let i = 0; i < m.next.length; i++)\n out += (i ? \", \" : \"\") + m.next[i].type.name + \"->\" + seen.indexOf(m.next[i].next);\n return out;\n }).join(\"\\n\");\n }\n}\n/**\n@internal\n*/\nContentMatch.empty = new ContentMatch(true);\nclass TokenStream {\n constructor(string, nodeTypes) {\n this.string = string;\n this.nodeTypes = nodeTypes;\n this.inline = null;\n this.pos = 0;\n this.tokens = string.split(/\\s*(?=\\b|\\W|$)/);\n if (this.tokens[this.tokens.length - 1] == \"\")\n this.tokens.pop();\n if (this.tokens[0] == \"\")\n this.tokens.shift();\n }\n get next() { return this.tokens[this.pos]; }\n eat(tok) { return this.next == tok && (this.pos++ || true); }\n err(str) { throw new SyntaxError(str + \" (in content expression '\" + this.string + \"')\"); }\n}\nfunction parseExpr(stream) {\n let exprs = [];\n do {\n exprs.push(parseExprSeq(stream));\n } while (stream.eat(\"|\"));\n return exprs.length == 1 ? exprs[0] : { type: \"choice\", exprs };\n}\nfunction parseExprSeq(stream) {\n let exprs = [];\n do {\n exprs.push(parseExprSubscript(stream));\n } while (stream.next && stream.next != \")\" && stream.next != \"|\");\n return exprs.length == 1 ? exprs[0] : { type: \"seq\", exprs };\n}\nfunction parseExprSubscript(stream) {\n let expr = parseExprAtom(stream);\n for (;;) {\n if (stream.eat(\"+\"))\n expr = { type: \"plus\", expr };\n else if (stream.eat(\"*\"))\n expr = { type: \"star\", expr };\n else if (stream.eat(\"?\"))\n expr = { type: \"opt\", expr };\n else if (stream.eat(\"{\"))\n expr = parseExprRange(stream, expr);\n else\n break;\n }\n return expr;\n}\nfunction parseNum(stream) {\n if (/\\D/.test(stream.next))\n stream.err(\"Expected number, got '\" + stream.next + \"'\");\n let result = Number(stream.next);\n stream.pos++;\n return result;\n}\nfunction parseExprRange(stream, expr) {\n let min = parseNum(stream), max = min;\n if (stream.eat(\",\")) {\n if (stream.next != \"}\")\n max = parseNum(stream);\n else\n max = -1;\n }\n if (!stream.eat(\"}\"))\n stream.err(\"Unclosed braced range\");\n return { type: \"range\", min, max, expr };\n}\nfunction resolveName(stream, name) {\n let types = stream.nodeTypes, type = types[name];\n if (type)\n return [type];\n let result = [];\n for (let typeName in types) {\n let type = types[typeName];\n if (type.isInGroup(name))\n result.push(type);\n }\n if (result.length == 0)\n stream.err(\"No node type or group '\" + name + \"' found\");\n return result;\n}\nfunction parseExprAtom(stream) {\n if (stream.eat(\"(\")) {\n let expr = parseExpr(stream);\n if (!stream.eat(\")\"))\n stream.err(\"Missing closing paren\");\n return expr;\n }\n else if (!/\\W/.test(stream.next)) {\n let exprs = resolveName(stream, stream.next).map(type => {\n if (stream.inline == null)\n stream.inline = type.isInline;\n else if (stream.inline != type.isInline)\n stream.err(\"Mixing inline and block content\");\n return { type: \"name\", value: type };\n });\n stream.pos++;\n return exprs.length == 1 ? exprs[0] : { type: \"choice\", exprs };\n }\n else {\n stream.err(\"Unexpected token '\" + stream.next + \"'\");\n }\n}\n// Construct an NFA from an expression as returned by the parser. The\n// NFA is represented as an array of states, which are themselves\n// arrays of edges, which are `{term, to}` objects. The first state is\n// the entry state and the last node is the success state.\n//\n// Note that unlike typical NFAs, the edge ordering in this one is\n// significant, in that it is used to contruct filler content when\n// necessary.\nfunction nfa(expr) {\n let nfa = [[]];\n connect(compile(expr, 0), node());\n return nfa;\n function node() { return nfa.push([]) - 1; }\n function edge(from, to, term) {\n let edge = { term, to };\n nfa[from].push(edge);\n return edge;\n }\n function connect(edges, to) {\n edges.forEach(edge => edge.to = to);\n }\n function compile(expr, from) {\n if (expr.type == \"choice\") {\n return expr.exprs.reduce((out, expr) => out.concat(compile(expr, from)), []);\n }\n else if (expr.type == \"seq\") {\n for (let i = 0;; i++) {\n let next = compile(expr.exprs[i], from);\n if (i == expr.exprs.length - 1)\n return next;\n connect(next, from = node());\n }\n }\n else if (expr.type == \"star\") {\n let loop = node();\n edge(from, loop);\n connect(compile(expr.expr, loop), loop);\n return [edge(loop)];\n }\n else if (expr.type == \"plus\") {\n let loop = node();\n connect(compile(expr.expr, from), loop);\n connect(compile(expr.expr, loop), loop);\n return [edge(loop)];\n }\n else if (expr.type == \"opt\") {\n return [edge(from)].concat(compile(expr.expr, from));\n }\n else if (expr.type == \"range\") {\n let cur = from;\n for (let i = 0; i < expr.min; i++) {\n let next = node();\n connect(compile(expr.expr, cur), next);\n cur = next;\n }\n if (expr.max == -1) {\n connect(compile(expr.expr, cur), cur);\n }\n else {\n for (let i = expr.min; i < expr.max; i++) {\n let next = node();\n edge(cur, next);\n connect(compile(expr.expr, cur), next);\n cur = next;\n }\n }\n return [edge(cur)];\n }\n else if (expr.type == \"name\") {\n return [edge(from, undefined, expr.value)];\n }\n else {\n throw new Error(\"Unknown expr type\");\n }\n }\n}\nfunction cmp(a, b) { return b - a; }\n// Get the set of nodes reachable by null edges from `node`. Omit\n// nodes with only a single null-out-edge, since they may lead to\n// needless duplicated nodes.\nfunction nullFrom(nfa, node) {\n let result = [];\n scan(node);\n return result.sort(cmp);\n function scan(node) {\n let edges = nfa[node];\n if (edges.length == 1 && !edges[0].term)\n return scan(edges[0].to);\n result.push(node);\n for (let i = 0; i < edges.length; i++) {\n let { term, to } = edges[i];\n if (!term && result.indexOf(to) == -1)\n scan(to);\n }\n }\n}\n// Compiles an NFA as produced by `nfa` into a DFA, modeled as a set\n// of state objects (`ContentMatch` instances) with transitions\n// between them.\nfunction dfa(nfa) {\n let labeled = Object.create(null);\n return explore(nullFrom(nfa, 0));\n function explore(states) {\n let out = [];\n states.forEach(node => {\n nfa[node].forEach(({ term, to }) => {\n if (!term)\n return;\n let set;\n for (let i = 0; i < out.length; i++)\n if (out[i][0] == term)\n set = out[i][1];\n nullFrom(nfa, to).forEach(node => {\n if (!set)\n out.push([term, set = []]);\n if (set.indexOf(node) == -1)\n set.push(node);\n });\n });\n });\n let state = labeled[states.join(\",\")] = new ContentMatch(states.indexOf(nfa.length - 1) > -1);\n for (let i = 0; i < out.length; i++) {\n let states = out[i][1].sort(cmp);\n state.next.push({ type: out[i][0], next: labeled[states.join(\",\")] || explore(states) });\n }\n return state;\n }\n}\nfunction checkForDeadEnds(match, stream) {\n for (let i = 0, work = [match]; i < work.length; i++) {\n let state = work[i], dead = !state.validEnd, nodes = [];\n for (let j = 0; j < state.next.length; j++) {\n let { type, next } = state.next[j];\n nodes.push(type.name);\n if (dead && !(type.isText || type.hasRequiredAttrs()))\n dead = false;\n if (work.indexOf(next) == -1)\n work.push(next);\n }\n if (dead)\n stream.err(\"Only non-generatable nodes (\" + nodes.join(\", \") + \") in a required position (see https://prosemirror.net/docs/guide/#generatable)\");\n }\n}\n\n// For node types where all attrs have a default value (or which don't\n// have any attributes), build up a single reusable default attribute\n// object, and use it for all nodes that don't specify specific\n// attributes.\nfunction defaultAttrs(attrs) {\n let defaults = Object.create(null);\n for (let attrName in attrs) {\n let attr = attrs[attrName];\n if (!attr.hasDefault)\n return null;\n defaults[attrName] = attr.default;\n }\n return defaults;\n}\nfunction computeAttrs(attrs, value) {\n let built = Object.create(null);\n for (let name in attrs) {\n let given = value && value[name];\n if (given === undefined) {\n let attr = attrs[name];\n if (attr.hasDefault)\n given = attr.default;\n else\n throw new RangeError(\"No value supplied for attribute \" + name);\n }\n built[name] = given;\n }\n return built;\n}\nfunction checkAttrs(attrs, values, type, name) {\n for (let name in values)\n if (!(name in attrs))\n throw new RangeError(`Unsupported attribute ${name} for ${type} of type ${name}`);\n for (let name in attrs) {\n let attr = attrs[name];\n if (attr.validate)\n attr.validate(values[name]);\n }\n}\nfunction initAttrs(typeName, attrs) {\n let result = Object.create(null);\n if (attrs)\n for (let name in attrs)\n result[name] = new Attribute(typeName, name, attrs[name]);\n return result;\n}\n/**\nNode types are objects allocated once per `Schema` and used to\n[tag](https://prosemirror.net/docs/ref/#model.Node.type) `Node` instances. They contain information\nabout the node type, such as its name and what kind of node it\nrepresents.\n*/\nclass NodeType {\n /**\n @internal\n */\n constructor(\n /**\n The name the node type has in this schema.\n */\n name, \n /**\n A link back to the `Schema` the node type belongs to.\n */\n schema, \n /**\n The spec that this type is based on\n */\n spec) {\n this.name = name;\n this.schema = schema;\n this.spec = spec;\n /**\n The set of marks allowed in this node. `null` means all marks\n are allowed.\n */\n this.markSet = null;\n this.groups = spec.group ? spec.group.split(\" \") : [];\n this.attrs = initAttrs(name, spec.attrs);\n this.defaultAttrs = defaultAttrs(this.attrs);\n this.contentMatch = null;\n this.inlineContent = null;\n this.isBlock = !(spec.inline || name == \"text\");\n this.isText = name == \"text\";\n }\n /**\n True if this is an inline type.\n */\n get isInline() { return !this.isBlock; }\n /**\n True if this is a textblock type, a block that contains inline\n content.\n */\n get isTextblock() { return this.isBlock && this.inlineContent; }\n /**\n True for node types that allow no content.\n */\n get isLeaf() { return this.contentMatch == ContentMatch.empty; }\n /**\n True when this node is an atom, i.e. when it does not have\n directly editable content.\n */\n get isAtom() { return this.isLeaf || !!this.spec.atom; }\n /**\n Return true when this node type is part of the given\n [group](https://prosemirror.net/docs/ref/#model.NodeSpec.group).\n */\n isInGroup(group) {\n return this.groups.indexOf(group) > -1;\n }\n /**\n The node type's [whitespace](https://prosemirror.net/docs/ref/#model.NodeSpec.whitespace) option.\n */\n get whitespace() {\n return this.spec.whitespace || (this.spec.code ? \"pre\" : \"normal\");\n }\n /**\n Tells you whether this node type has any required attributes.\n */\n hasRequiredAttrs() {\n for (let n in this.attrs)\n if (this.attrs[n].isRequired)\n return true;\n return false;\n }\n /**\n Indicates whether this node allows some of the same content as\n the given node type.\n */\n compatibleContent(other) {\n return this == other || this.contentMatch.compatible(other.contentMatch);\n }\n /**\n @internal\n */\n computeAttrs(attrs) {\n if (!attrs && this.defaultAttrs)\n return this.defaultAttrs;\n else\n return computeAttrs(this.attrs, attrs);\n }\n /**\n Create a `Node` of this type. The given attributes are\n checked and defaulted (you can pass `null` to use the type's\n defaults entirely, if no required attributes exist). `content`\n may be a `Fragment`, a node, an array of nodes, or\n `null`. Similarly `marks` may be `null` to default to the empty\n set of marks.\n */\n create(attrs = null, content, marks) {\n if (this.isText)\n throw new Error(\"NodeType.create can't construct text nodes\");\n return new Node(this, this.computeAttrs(attrs), Fragment.from(content), Mark.setFrom(marks));\n }\n /**\n Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but check the given content\n against the node type's content restrictions, and throw an error\n if it doesn't match.\n */\n createChecked(attrs = null, content, marks) {\n content = Fragment.from(content);\n this.checkContent(content);\n return new Node(this, this.computeAttrs(attrs), content, Mark.setFrom(marks));\n }\n /**\n Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but see if it is\n necessary to add nodes to the start or end of the given fragment\n to make it fit the node. If no fitting wrapping can be found,\n return null. Note that, due to the fact that required nodes can\n always be created, this will always succeed if you pass null or\n `Fragment.empty` as content.\n */\n createAndFill(attrs = null, content, marks) {\n attrs = this.computeAttrs(attrs);\n content = Fragment.from(content);\n if (content.size) {\n let before = this.contentMatch.fillBefore(content);\n if (!before)\n return null;\n content = before.append(content);\n }\n let matched = this.contentMatch.matchFragment(content);\n let after = matched && matched.fillBefore(Fragment.empty, true);\n if (!after)\n return null;\n return new Node(this, attrs, content.append(after), Mark.setFrom(marks));\n }\n /**\n Returns true if the given fragment is valid content for this node\n type.\n */\n validContent(content) {\n let result = this.contentMatch.matchFragment(content);\n if (!result || !result.validEnd)\n return false;\n for (let i = 0; i < content.childCount; i++)\n if (!this.allowsMarks(content.child(i).marks))\n return false;\n return true;\n }\n /**\n Throws a RangeError if the given fragment is not valid content for this\n node type.\n @internal\n */\n checkContent(content) {\n if (!this.validContent(content))\n throw new RangeError(`Invalid content for node ${this.name}: ${content.toString().slice(0, 50)}`);\n }\n /**\n @internal\n */\n checkAttrs(attrs) {\n checkAttrs(this.attrs, attrs, \"node\", this.name);\n }\n /**\n Check whether the given mark type is allowed in this node.\n */\n allowsMarkType(markType) {\n return this.markSet == null || this.markSet.indexOf(markType) > -1;\n }\n /**\n Test whether the given set of marks are allowed in this node.\n */\n allowsMarks(marks) {\n if (this.markSet == null)\n return true;\n for (let i = 0; i < marks.length; i++)\n if (!this.allowsMarkType(marks[i].type))\n return false;\n return true;\n }\n /**\n Removes the marks that are not allowed in this node from the given set.\n */\n allowedMarks(marks) {\n if (this.markSet == null)\n return marks;\n let copy;\n for (let i = 0; i < marks.length; i++) {\n if (!this.allowsMarkType(marks[i].type)) {\n if (!copy)\n copy = marks.slice(0, i);\n }\n else if (copy) {\n copy.push(marks[i]);\n }\n }\n return !copy ? marks : copy.length ? copy : Mark.none;\n }\n /**\n @internal\n */\n static compile(nodes, schema) {\n let result = Object.create(null);\n nodes.forEach((name, spec) => result[name] = new NodeType(name, schema, spec));\n let topType = schema.spec.topNode || \"doc\";\n if (!result[topType])\n throw new RangeError(\"Schema is missing its top node type ('\" + topType + \"')\");\n if (!result.text)\n throw new RangeError(\"Every schema needs a 'text' type\");\n for (let _ in result.text.attrs)\n throw new RangeError(\"The text node type should not have attributes\");\n return result;\n }\n}\nfunction validateType(typeName, attrName, type) {\n let types = type.split(\"|\");\n return (value) => {\n let name = value === null ? \"null\" : typeof value;\n if (types.indexOf(name) < 0)\n throw new RangeError(`Expected value of type ${types} for attribute ${attrName} on type ${typeName}, got ${name}`);\n };\n}\n// Attribute descriptors\nclass Attribute {\n constructor(typeName, attrName, options) {\n this.hasDefault = Object.prototype.hasOwnProperty.call(options, \"default\");\n this.default = options.default;\n this.validate = typeof options.validate == \"string\" ? validateType(typeName, attrName, options.validate) : options.validate;\n }\n get isRequired() {\n return !this.hasDefault;\n }\n}\n// Marks\n/**\nLike nodes, marks (which are associated with nodes to signify\nthings like emphasis or being part of a link) are\n[tagged](https://prosemirror.net/docs/ref/#model.Mark.type) with type objects, which are\ninstantiated once per `Schema`.\n*/\nclass MarkType {\n /**\n @internal\n */\n constructor(\n /**\n The name of the mark type.\n */\n name, \n /**\n @internal\n */\n rank, \n /**\n The schema that this mark type instance is part of.\n */\n schema, \n /**\n The spec on which the type is based.\n */\n spec) {\n this.name = name;\n this.rank = rank;\n this.schema = schema;\n this.spec = spec;\n this.attrs = initAttrs(name, spec.attrs);\n this.excluded = null;\n let defaults = defaultAttrs(this.attrs);\n this.instance = defaults ? new Mark(this, defaults) : null;\n }\n /**\n Create a mark of this type. `attrs` may be `null` or an object\n containing only some of the mark's attributes. The others, if\n they have defaults, will be added.\n */\n create(attrs = null) {\n if (!attrs && this.instance)\n return this.instance;\n return new Mark(this, computeAttrs(this.attrs, attrs));\n }\n /**\n @internal\n */\n static compile(marks, schema) {\n let result = Object.create(null), rank = 0;\n marks.forEach((name, spec) => result[name] = new MarkType(name, rank++, schema, spec));\n return result;\n }\n /**\n When there is a mark of this type in the given set, a new set\n without it is returned. Otherwise, the input set is returned.\n */\n removeFromSet(set) {\n for (var i = 0; i < set.length; i++)\n if (set[i].type == this) {\n set = set.slice(0, i).concat(set.slice(i + 1));\n i--;\n }\n return set;\n }\n /**\n Tests whether there is a mark of this type in the given set.\n */\n isInSet(set) {\n for (let i = 0; i < set.length; i++)\n if (set[i].type == this)\n return set[i];\n }\n /**\n @internal\n */\n checkAttrs(attrs) {\n checkAttrs(this.attrs, attrs, \"mark\", this.name);\n }\n /**\n Queries whether a given mark type is\n [excluded](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) by this one.\n */\n excludes(other) {\n return this.excluded.indexOf(other) > -1;\n }\n}\n/**\nA document schema. Holds [node](https://prosemirror.net/docs/ref/#model.NodeType) and [mark\ntype](https://prosemirror.net/docs/ref/#model.MarkType) objects for the nodes and marks that may\noccur in conforming documents, and provides functionality for\ncreating and deserializing such documents.\n\nWhen given, the type parameters provide the names of the nodes and\nmarks in this schema.\n*/\nclass Schema {\n /**\n Construct a schema from a schema [specification](https://prosemirror.net/docs/ref/#model.SchemaSpec).\n */\n constructor(spec) {\n /**\n The [linebreak\n replacement](https://prosemirror.net/docs/ref/#model.NodeSpec.linebreakReplacement) node defined\n in this schema, if any.\n */\n this.linebreakReplacement = null;\n /**\n An object for storing whatever values modules may want to\n compute and cache per schema. (If you want to store something\n in it, try to use property names unlikely to clash.)\n */\n this.cached = Object.create(null);\n let instanceSpec = this.spec = {};\n for (let prop in spec)\n instanceSpec[prop] = spec[prop];\n instanceSpec.nodes = OrderedMap.from(spec.nodes),\n instanceSpec.marks = OrderedMap.from(spec.marks || {}),\n this.nodes = NodeType.compile(this.spec.nodes, this);\n this.marks = MarkType.compile(this.spec.marks, this);\n let contentExprCache = Object.create(null);\n for (let prop in this.nodes) {\n if (prop in this.marks)\n throw new RangeError(prop + \" can not be both a node and a mark\");\n let type = this.nodes[prop], contentExpr = type.spec.content || \"\", markExpr = type.spec.marks;\n type.contentMatch = contentExprCache[contentExpr] ||\n (contentExprCache[contentExpr] = ContentMatch.parse(contentExpr, this.nodes));\n type.inlineContent = type.contentMatch.inlineContent;\n if (type.spec.linebreakReplacement) {\n if (this.linebreakReplacement)\n throw new RangeError(\"Multiple linebreak nodes defined\");\n if (!type.isInline || !type.isLeaf)\n throw new RangeError(\"Linebreak replacement nodes must be inline leaf nodes\");\n this.linebreakReplacement = type;\n }\n type.markSet = markExpr == \"_\" ? null :\n markExpr ? gatherMarks(this, markExpr.split(\" \")) :\n markExpr == \"\" || !type.inlineContent ? [] : null;\n }\n for (let prop in this.marks) {\n let type = this.marks[prop], excl = type.spec.excludes;\n type.excluded = excl == null ? [type] : excl == \"\" ? [] : gatherMarks(this, excl.split(\" \"));\n }\n this.nodeFromJSON = json => Node.fromJSON(this, json);\n this.markFromJSON = json => Mark.fromJSON(this, json);\n this.topNodeType = this.nodes[this.spec.topNode || \"doc\"];\n this.cached.wrappings = Object.create(null);\n }\n /**\n Create a node in this schema. The `type` may be a string or a\n `NodeType` instance. Attributes will be extended with defaults,\n `content` may be a `Fragment`, `null`, a `Node`, or an array of\n nodes.\n */\n node(type, attrs = null, content, marks) {\n if (typeof type == \"string\")\n type = this.nodeType(type);\n else if (!(type instanceof NodeType))\n throw new RangeError(\"Invalid node type: \" + type);\n else if (type.schema != this)\n throw new RangeError(\"Node type from different schema used (\" + type.name + \")\");\n return type.createChecked(attrs, content, marks);\n }\n /**\n Create a text node in the schema. Empty text nodes are not\n allowed.\n */\n text(text, marks) {\n let type = this.nodes.text;\n return new TextNode(type, type.defaultAttrs, text, Mark.setFrom(marks));\n }\n /**\n Create a mark with the given type and attributes.\n */\n mark(type, attrs) {\n if (typeof type == \"string\")\n type = this.marks[type];\n return type.create(attrs);\n }\n /**\n @internal\n */\n nodeType(name) {\n let found = this.nodes[name];\n if (!found)\n throw new RangeError(\"Unknown node type: \" + name);\n return found;\n }\n}\nfunction gatherMarks(schema, marks) {\n let found = [];\n for (let i = 0; i < marks.length; i++) {\n let name = marks[i], mark = schema.marks[name], ok = mark;\n if (mark) {\n found.push(mark);\n }\n else {\n for (let prop in schema.marks) {\n let mark = schema.marks[prop];\n if (name == \"_\" || (mark.spec.group && mark.spec.group.split(\" \").indexOf(name) > -1))\n found.push(ok = mark);\n }\n }\n if (!ok)\n throw new SyntaxError(\"Unknown mark type: '\" + marks[i] + \"'\");\n }\n return found;\n}\n\nfunction isTagRule(rule) { return rule.tag != null; }\nfunction isStyleRule(rule) { return rule.style != null; }\n/**\nA DOM parser represents a strategy for parsing DOM content into a\nProseMirror document conforming to a given schema. Its behavior is\ndefined by an array of [rules](https://prosemirror.net/docs/ref/#model.ParseRule).\n*/\nclass DOMParser {\n /**\n Create a parser that targets the given schema, using the given\n parsing rules.\n */\n constructor(\n /**\n The schema into which the parser parses.\n */\n schema, \n /**\n The set of [parse rules](https://prosemirror.net/docs/ref/#model.ParseRule) that the parser\n uses, in order of precedence.\n */\n rules) {\n this.schema = schema;\n this.rules = rules;\n /**\n @internal\n */\n this.tags = [];\n /**\n @internal\n */\n this.styles = [];\n let matchedStyles = this.matchedStyles = [];\n rules.forEach(rule => {\n if (isTagRule(rule)) {\n this.tags.push(rule);\n }\n else if (isStyleRule(rule)) {\n let prop = /[^=]*/.exec(rule.style)[0];\n if (matchedStyles.indexOf(prop) < 0)\n matchedStyles.push(prop);\n this.styles.push(rule);\n }\n });\n // Only normalize list elements when lists in the schema can't directly contain themselves\n this.normalizeLists = !this.tags.some(r => {\n if (!/^(ul|ol)\\b/.test(r.tag) || !r.node)\n return false;\n let node = schema.nodes[r.node];\n return node.contentMatch.matchType(node);\n });\n }\n /**\n Parse a document from the content of a DOM node.\n */\n parse(dom, options = {}) {\n let context = new ParseContext(this, options, false);\n context.addAll(dom, Mark.none, options.from, options.to);\n return context.finish();\n }\n /**\n Parses the content of the given DOM node, like\n [`parse`](https://prosemirror.net/docs/ref/#model.DOMParser.parse), and takes the same set of\n options. But unlike that method, which produces a whole node,\n this one returns a slice that is open at the sides, meaning that\n the schema constraints aren't applied to the start of nodes to\n the left of the input and the end of nodes at the end.\n */\n parseSlice(dom, options = {}) {\n let context = new ParseContext(this, options, true);\n context.addAll(dom, Mark.none, options.from, options.to);\n return Slice.maxOpen(context.finish());\n }\n /**\n @internal\n */\n matchTag(dom, context, after) {\n for (let i = after ? this.tags.indexOf(after) + 1 : 0; i < this.tags.length; i++) {\n let rule = this.tags[i];\n if (matches(dom, rule.tag) &&\n (rule.namespace === undefined || dom.namespaceURI == rule.namespace) &&\n (!rule.context || context.matchesContext(rule.context))) {\n if (rule.getAttrs) {\n let result = rule.getAttrs(dom);\n if (result === false)\n continue;\n rule.attrs = result || undefined;\n }\n return rule;\n }\n }\n }\n /**\n @internal\n */\n matchStyle(prop, value, context, after) {\n for (let i = after ? this.styles.indexOf(after) + 1 : 0; i < this.styles.length; i++) {\n let rule = this.styles[i], style = rule.style;\n if (style.indexOf(prop) != 0 ||\n rule.context && !context.matchesContext(rule.context) ||\n // Test that the style string either precisely matches the prop,\n // or has an '=' sign after the prop, followed by the given\n // value.\n style.length > prop.length &&\n (style.charCodeAt(prop.length) != 61 || style.slice(prop.length + 1) != value))\n continue;\n if (rule.getAttrs) {\n let result = rule.getAttrs(value);\n if (result === false)\n continue;\n rule.attrs = result || undefined;\n }\n return rule;\n }\n }\n /**\n @internal\n */\n static schemaRules(schema) {\n let result = [];\n function insert(rule) {\n let priority = rule.priority == null ? 50 : rule.priority, i = 0;\n for (; i < result.length; i++) {\n let next = result[i], nextPriority = next.priority == null ? 50 : next.priority;\n if (nextPriority < priority)\n break;\n }\n result.splice(i, 0, rule);\n }\n for (let name in schema.marks) {\n let rules = schema.marks[name].spec.parseDOM;\n if (rules)\n rules.forEach(rule => {\n insert(rule = copy(rule));\n if (!(rule.mark || rule.ignore || rule.clearMark))\n rule.mark = name;\n });\n }\n for (let name in schema.nodes) {\n let rules = schema.nodes[name].spec.parseDOM;\n if (rules)\n rules.forEach(rule => {\n insert(rule = copy(rule));\n if (!(rule.node || rule.ignore || rule.mark))\n rule.node = name;\n });\n }\n return result;\n }\n /**\n Construct a DOM parser using the parsing rules listed in a\n schema's [node specs](https://prosemirror.net/docs/ref/#model.NodeSpec.parseDOM), reordered by\n [priority](https://prosemirror.net/docs/ref/#model.GenericParseRule.priority).\n */\n static fromSchema(schema) {\n return schema.cached.domParser ||\n (schema.cached.domParser = new DOMParser(schema, DOMParser.schemaRules(schema)));\n }\n}\nconst blockTags = {\n address: true, article: true, aside: true, blockquote: true, canvas: true,\n dd: true, div: true, dl: true, fieldset: true, figcaption: true, figure: true,\n footer: true, form: true, h1: true, h2: true, h3: true, h4: true, h5: true,\n h6: true, header: true, hgroup: true, hr: true, li: true, noscript: true, ol: true,\n output: true, p: true, pre: true, section: true, table: true, tfoot: true, ul: true\n};\nconst ignoreTags = {\n head: true, noscript: true, object: true, script: true, style: true, title: true\n};\nconst listTags = { ol: true, ul: true };\n// Using a bitfield for node context options\nconst OPT_PRESERVE_WS = 1, OPT_PRESERVE_WS_FULL = 2, OPT_OPEN_LEFT = 4;\nfunction wsOptionsFor(type, preserveWhitespace, base) {\n if (preserveWhitespace != null)\n return (preserveWhitespace ? OPT_PRESERVE_WS : 0) |\n (preserveWhitespace === \"full\" ? OPT_PRESERVE_WS_FULL : 0);\n return type && type.whitespace == \"pre\" ? OPT_PRESERVE_WS | OPT_PRESERVE_WS_FULL : base & ~OPT_OPEN_LEFT;\n}\nclass NodeContext {\n constructor(type, attrs, marks, solid, match, options) {\n this.type = type;\n this.attrs = attrs;\n this.marks = marks;\n this.solid = solid;\n this.options = options;\n this.content = [];\n // Marks applied to the node's children\n this.activeMarks = Mark.none;\n this.match = match || (options & OPT_OPEN_LEFT ? null : type.contentMatch);\n }\n findWrapping(node) {\n if (!this.match) {\n if (!this.type)\n return [];\n let fill = this.type.contentMatch.fillBefore(Fragment.from(node));\n if (fill) {\n this.match = this.type.contentMatch.matchFragment(fill);\n }\n else {\n let start = this.type.contentMatch, wrap;\n if (wrap = start.findWrapping(node.type)) {\n this.match = start;\n return wrap;\n }\n else {\n return null;\n }\n }\n }\n return this.match.findWrapping(node.type);\n }\n finish(openEnd) {\n if (!(this.options & OPT_PRESERVE_WS)) { // Strip trailing whitespace\n let last = this.content[this.content.length - 1], m;\n if (last && last.isText && (m = /[ \\t\\r\\n\\u000c]+$/.exec(last.text))) {\n let text = last;\n if (last.text.length == m[0].length)\n this.content.pop();\n else\n this.content[this.content.length - 1] = text.withText(text.text.slice(0, text.text.length - m[0].length));\n }\n }\n let content = Fragment.from(this.content);\n if (!openEnd && this.match)\n content = content.append(this.match.fillBefore(Fragment.empty, true));\n return this.type ? this.type.create(this.attrs, content, this.marks) : content;\n }\n inlineContext(node) {\n if (this.type)\n return this.type.inlineContent;\n if (this.content.length)\n return this.content[0].isInline;\n return node.parentNode && !blockTags.hasOwnProperty(node.parentNode.nodeName.toLowerCase());\n }\n}\nclass ParseContext {\n constructor(\n // The parser we are using.\n parser, \n // The options passed to this parse.\n options, isOpen) {\n this.parser = parser;\n this.options = options;\n this.isOpen = isOpen;\n this.open = 0;\n this.localPreserveWS = false;\n let topNode = options.topNode, topContext;\n let topOptions = wsOptionsFor(null, options.preserveWhitespace, 0) | (isOpen ? OPT_OPEN_LEFT : 0);\n if (topNode)\n topContext = new NodeContext(topNode.type, topNode.attrs, Mark.none, true, options.topMatch || topNode.type.contentMatch, topOptions);\n else if (isOpen)\n topContext = new NodeContext(null, null, Mark.none, true, null, topOptions);\n else\n topContext = new NodeContext(parser.schema.topNodeType, null, Mark.none, true, null, topOptions);\n this.nodes = [topContext];\n this.find = options.findPositions;\n this.needsBlock = false;\n }\n get top() {\n return this.nodes[this.open];\n }\n // Add a DOM node to the content. Text is inserted as text node,\n // otherwise, the node is passed to `addElement` or, if it has a\n // `style` attribute, `addElementWithStyles`.\n addDOM(dom, marks) {\n if (dom.nodeType == 3)\n this.addTextNode(dom, marks);\n else if (dom.nodeType == 1)\n this.addElement(dom, marks);\n }\n addTextNode(dom, marks) {\n let value = dom.nodeValue;\n let top = this.top, preserveWS = (top.options & OPT_PRESERVE_WS_FULL) ? \"full\"\n : this.localPreserveWS || (top.options & OPT_PRESERVE_WS) > 0;\n let { schema } = this.parser;\n if (preserveWS === \"full\" ||\n top.inlineContext(dom) ||\n /[^ \\t\\r\\n\\u000c]/.test(value)) {\n if (!preserveWS) {\n value = value.replace(/[ \\t\\r\\n\\u000c]+/g, \" \");\n // If this starts with whitespace, and there is no node before it, or\n // a hard break, or a text node that ends with whitespace, strip the\n // leading space.\n if (/^[ \\t\\r\\n\\u000c]/.test(value) && this.open == this.nodes.length - 1) {\n let nodeBefore = top.content[top.content.length - 1];\n let domNodeBefore = dom.previousSibling;\n if (!nodeBefore ||\n (domNodeBefore && domNodeBefore.nodeName == 'BR') ||\n (nodeBefore.isText && /[ \\t\\r\\n\\u000c]$/.test(nodeBefore.text)))\n value = value.slice(1);\n }\n }\n else if (preserveWS === \"full\") {\n value = value.replace(/\\r\\n?/g, \"\\n\");\n }\n else if (schema.linebreakReplacement && /[\\r\\n]/.test(value) && this.top.findWrapping(schema.linebreakReplacement.create())) {\n let lines = value.split(/\\r?\\n|\\r/);\n for (let i = 0; i < lines.length; i++) {\n if (i)\n this.insertNode(schema.linebreakReplacement.create(), marks, true);\n if (lines[i])\n this.insertNode(schema.text(lines[i]), marks, !/\\S/.test(lines[i]));\n }\n value = \"\";\n }\n else {\n value = value.replace(/\\r?\\n|\\r/g, \" \");\n }\n if (value)\n this.insertNode(schema.text(value), marks, !/\\S/.test(value));\n this.findInText(dom);\n }\n else {\n this.findInside(dom);\n }\n }\n // Try to find a handler for the given tag and use that to parse. If\n // none is found, the element's content nodes are added directly.\n addElement(dom, marks, matchAfter) {\n let outerWS = this.localPreserveWS, top = this.top;\n if (dom.tagName == \"PRE\" || /pre/.test(dom.style && dom.style.whiteSpace))\n this.localPreserveWS = true;\n let name = dom.nodeName.toLowerCase(), ruleID;\n if (listTags.hasOwnProperty(name) && this.parser.normalizeLists)\n normalizeList(dom);\n let rule = (this.options.ruleFromNode && this.options.ruleFromNode(dom)) ||\n (ruleID = this.parser.matchTag(dom, this, matchAfter));\n out: if (rule ? rule.ignore : ignoreTags.hasOwnProperty(name)) {\n this.findInside(dom);\n this.ignoreFallback(dom, marks);\n }\n else if (!rule || rule.skip || rule.closeParent) {\n if (rule && rule.closeParent)\n this.open = Math.max(0, this.open - 1);\n else if (rule && rule.skip.nodeType)\n dom = rule.skip;\n let sync, oldNeedsBlock = this.needsBlock;\n if (blockTags.hasOwnProperty(name)) {\n if (top.content.length && top.content[0].isInline && this.open) {\n this.open--;\n top = this.top;\n }\n sync = true;\n if (!top.type)\n this.needsBlock = true;\n }\n else if (!dom.firstChild) {\n this.leafFallback(dom, marks);\n break out;\n }\n let innerMarks = rule && rule.skip ? marks : this.readStyles(dom, marks);\n if (innerMarks)\n this.addAll(dom, innerMarks);\n if (sync)\n this.sync(top);\n this.needsBlock = oldNeedsBlock;\n }\n else {\n let innerMarks = this.readStyles(dom, marks);\n if (innerMarks)\n this.addElementByRule(dom, rule, innerMarks, rule.consuming === false ? ruleID : undefined);\n }\n this.localPreserveWS = outerWS;\n }\n // Called for leaf DOM nodes that would otherwise be ignored\n leafFallback(dom, marks) {\n if (dom.nodeName == \"BR\" && this.top.type && this.top.type.inlineContent)\n this.addTextNode(dom.ownerDocument.createTextNode(\"\\n\"), marks);\n }\n // Called for ignored nodes\n ignoreFallback(dom, marks) {\n // Ignored BR nodes should at least create an inline context\n if (dom.nodeName == \"BR\" && (!this.top.type || !this.top.type.inlineContent))\n this.findPlace(this.parser.schema.text(\"-\"), marks, true);\n }\n // Run any style parser associated with the node's styles. Either\n // return an updated array of marks, or null to indicate some of the\n // styles had a rule with `ignore` set.\n readStyles(dom, marks) {\n let styles = dom.style;\n // Because many properties will only show up in 'normalized' form\n // in `style.item` (i.e. text-decoration becomes\n // text-decoration-line, text-decoration-color, etc), we directly\n // query the styles mentioned in our rules instead of iterating\n // over the items.\n if (styles && styles.length)\n for (let i = 0; i < this.parser.matchedStyles.length; i++) {\n let name = this.parser.matchedStyles[i], value = styles.getPropertyValue(name);\n if (value)\n for (let after = undefined;;) {\n let rule = this.parser.matchStyle(name, value, this, after);\n if (!rule)\n break;\n if (rule.ignore)\n return null;\n if (rule.clearMark)\n marks = marks.filter(m => !rule.clearMark(m));\n else\n marks = marks.concat(this.parser.schema.marks[rule.mark].create(rule.attrs));\n if (rule.consuming === false)\n after = rule;\n else\n break;\n }\n }\n return marks;\n }\n // Look up a handler for the given node. If none are found, return\n // false. Otherwise, apply it, use its return value to drive the way\n // the node's content is wrapped, and return true.\n addElementByRule(dom, rule, marks, continueAfter) {\n let sync, nodeType;\n if (rule.node) {\n nodeType = this.parser.schema.nodes[rule.node];\n if (!nodeType.isLeaf) {\n let inner = this.enter(nodeType, rule.attrs || null, marks, rule.preserveWhitespace);\n if (inner) {\n sync = true;\n marks = inner;\n }\n }\n else if (!this.insertNode(nodeType.create(rule.attrs), marks, dom.nodeName == \"BR\")) {\n this.leafFallback(dom, marks);\n }\n }\n else {\n let markType = this.parser.schema.marks[rule.mark];\n marks = marks.concat(markType.create(rule.attrs));\n }\n let startIn = this.top;\n if (nodeType && nodeType.isLeaf) {\n this.findInside(dom);\n }\n else if (continueAfter) {\n this.addElement(dom, marks, continueAfter);\n }\n else if (rule.getContent) {\n this.findInside(dom);\n rule.getContent(dom, this.parser.schema).forEach(node => this.insertNode(node, marks, false));\n }\n else {\n let contentDOM = dom;\n if (typeof rule.contentElement == \"string\")\n contentDOM = dom.querySelector(rule.contentElement);\n else if (typeof rule.contentElement == \"function\")\n contentDOM = rule.contentElement(dom);\n else if (rule.contentElement)\n contentDOM = rule.contentElement;\n this.findAround(dom, contentDOM, true);\n this.addAll(contentDOM, marks);\n this.findAround(dom, contentDOM, false);\n }\n if (sync && this.sync(startIn))\n this.open--;\n }\n // Add all child nodes between `startIndex` and `endIndex` (or the\n // whole node, if not given). If `sync` is passed, use it to\n // synchronize after every block element.\n addAll(parent, marks, startIndex, endIndex) {\n let index = startIndex || 0;\n for (let dom = startIndex ? parent.childNodes[startIndex] : parent.firstChild, end = endIndex == null ? null : parent.childNodes[endIndex]; dom != end; dom = dom.nextSibling, ++index) {\n this.findAtPoint(parent, index);\n this.addDOM(dom, marks);\n }\n this.findAtPoint(parent, index);\n }\n // Try to find a way to fit the given node type into the current\n // context. May add intermediate wrappers and/or leave non-solid\n // nodes that we're in.\n findPlace(node, marks, cautious) {\n let route, sync;\n for (let depth = this.open, penalty = 0; depth >= 0; depth--) {\n let cx = this.nodes[depth];\n let found = cx.findWrapping(node);\n if (found && (!route || route.length > found.length + penalty)) {\n route = found;\n sync = cx;\n if (!found.length)\n break;\n }\n if (cx.solid) {\n if (cautious)\n break;\n penalty += 2;\n }\n }\n if (!route)\n return null;\n this.sync(sync);\n for (let i = 0; i < route.length; i++)\n marks = this.enterInner(route[i], null, marks, false);\n return marks;\n }\n // Try to insert the given node, adjusting the context when needed.\n insertNode(node, marks, cautious) {\n if (node.isInline && this.needsBlock && !this.top.type) {\n let block = this.textblockFromContext();\n if (block)\n marks = this.enterInner(block, null, marks);\n }\n let innerMarks = this.findPlace(node, marks, cautious);\n if (innerMarks) {\n this.closeExtra();\n let top = this.top;\n if (top.match)\n top.match = top.match.matchType(node.type);\n let nodeMarks = Mark.none;\n for (let m of innerMarks.concat(node.marks))\n if (top.type ? top.type.allowsMarkType(m.type) : markMayApply(m.type, node.type))\n nodeMarks = m.addToSet(nodeMarks);\n top.content.push(node.mark(nodeMarks));\n return true;\n }\n return false;\n }\n // Try to start a node of the given type, adjusting the context when\n // necessary.\n enter(type, attrs, marks, preserveWS) {\n let innerMarks = this.findPlace(type.create(attrs), marks, false);\n if (innerMarks)\n innerMarks = this.enterInner(type, attrs, marks, true, preserveWS);\n return innerMarks;\n }\n // Open a node of the given type\n enterInner(type, attrs, marks, solid = false, preserveWS) {\n this.closeExtra();\n let top = this.top;\n top.match = top.match && top.match.matchType(type);\n let options = wsOptionsFor(type, preserveWS, top.options);\n if ((top.options & OPT_OPEN_LEFT) && top.content.length == 0)\n options |= OPT_OPEN_LEFT;\n let applyMarks = Mark.none;\n marks = marks.filter(m => {\n if (top.type ? top.type.allowsMarkType(m.type) : markMayApply(m.type, type)) {\n applyMarks = m.addToSet(applyMarks);\n return false;\n }\n return true;\n });\n this.nodes.push(new NodeContext(type, attrs, applyMarks, solid, null, options));\n this.open++;\n return marks;\n }\n // Make sure all nodes above this.open are finished and added to\n // their parents\n closeExtra(openEnd = false) {\n let i = this.nodes.length - 1;\n if (i > this.open) {\n for (; i > this.open; i--)\n this.nodes[i - 1].content.push(this.nodes[i].finish(openEnd));\n this.nodes.length = this.open + 1;\n }\n }\n finish() {\n this.open = 0;\n this.closeExtra(this.isOpen);\n return this.nodes[0].finish(!!(this.isOpen || this.options.topOpen));\n }\n sync(to) {\n for (let i = this.open; i >= 0; i--) {\n if (this.nodes[i] == to) {\n this.open = i;\n return true;\n }\n else if (this.localPreserveWS) {\n this.nodes[i].options |= OPT_PRESERVE_WS;\n }\n }\n return false;\n }\n get currentPos() {\n this.closeExtra();\n let pos = 0;\n for (let i = this.open; i >= 0; i--) {\n let content = this.nodes[i].content;\n for (let j = content.length - 1; j >= 0; j--)\n pos += content[j].nodeSize;\n if (i)\n pos++;\n }\n return pos;\n }\n findAtPoint(parent, offset) {\n if (this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].node == parent && this.find[i].offset == offset)\n this.find[i].pos = this.currentPos;\n }\n }\n findInside(parent) {\n if (this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node))\n this.find[i].pos = this.currentPos;\n }\n }\n findAround(parent, content, before) {\n if (parent != content && this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node)) {\n let pos = content.compareDocumentPosition(this.find[i].node);\n if (pos & (before ? 2 : 4))\n this.find[i].pos = this.currentPos;\n }\n }\n }\n findInText(textNode) {\n if (this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].node == textNode)\n this.find[i].pos = this.currentPos - (textNode.nodeValue.length - this.find[i].offset);\n }\n }\n // Determines whether the given context string matches this context.\n matchesContext(context) {\n if (context.indexOf(\"|\") > -1)\n return context.split(/\\s*\\|\\s*/).some(this.matchesContext, this);\n let parts = context.split(\"/\");\n let option = this.options.context;\n let useRoot = !this.isOpen && (!option || option.parent.type == this.nodes[0].type);\n let minDepth = -(option ? option.depth + 1 : 0) + (useRoot ? 0 : 1);\n let match = (i, depth) => {\n for (; i >= 0; i--) {\n let part = parts[i];\n if (part == \"\") {\n if (i == parts.length - 1 || i == 0)\n continue;\n for (; depth >= minDepth; depth--)\n if (match(i - 1, depth))\n return true;\n return false;\n }\n else {\n let next = depth > 0 || (depth == 0 && useRoot) ? this.nodes[depth].type\n : option && depth >= minDepth ? option.node(depth - minDepth).type\n : null;\n if (!next || (next.name != part && !next.isInGroup(part)))\n return false;\n depth--;\n }\n }\n return true;\n };\n return match(parts.length - 1, this.open);\n }\n textblockFromContext() {\n let $context = this.options.context;\n if ($context)\n for (let d = $context.depth; d >= 0; d--) {\n let deflt = $context.node(d).contentMatchAt($context.indexAfter(d)).defaultType;\n if (deflt && deflt.isTextblock && deflt.defaultAttrs)\n return deflt;\n }\n for (let name in this.parser.schema.nodes) {\n let type = this.parser.schema.nodes[name];\n if (type.isTextblock && type.defaultAttrs)\n return type;\n }\n }\n}\n// Kludge to work around directly nested list nodes produced by some\n// tools and allowed by browsers to mean that the nested list is\n// actually part of the list item above it.\nfunction normalizeList(dom) {\n for (let child = dom.firstChild, prevItem = null; child; child = child.nextSibling) {\n let name = child.nodeType == 1 ? child.nodeName.toLowerCase() : null;\n if (name && listTags.hasOwnProperty(name) && prevItem) {\n prevItem.appendChild(child);\n child = prevItem;\n }\n else if (name == \"li\") {\n prevItem = child;\n }\n else if (name) {\n prevItem = null;\n }\n }\n}\n// Apply a CSS selector.\nfunction matches(dom, selector) {\n return (dom.matches || dom.msMatchesSelector || dom.webkitMatchesSelector || dom.mozMatchesSelector).call(dom, selector);\n}\nfunction copy(obj) {\n let copy = {};\n for (let prop in obj)\n copy[prop] = obj[prop];\n return copy;\n}\n// Used when finding a mark at the top level of a fragment parse.\n// Checks whether it would be reasonable to apply a given mark type to\n// a given node, by looking at the way the mark occurs in the schema.\nfunction markMayApply(markType, nodeType) {\n let nodes = nodeType.schema.nodes;\n for (let name in nodes) {\n let parent = nodes[name];\n if (!parent.allowsMarkType(markType))\n continue;\n let seen = [], scan = (match) => {\n seen.push(match);\n for (let i = 0; i < match.edgeCount; i++) {\n let { type, next } = match.edge(i);\n if (type == nodeType)\n return true;\n if (seen.indexOf(next) < 0 && scan(next))\n return true;\n }\n };\n if (scan(parent.contentMatch))\n return true;\n }\n}\n\n/**\nA DOM serializer knows how to convert ProseMirror nodes and\nmarks of various types to DOM nodes.\n*/\nclass DOMSerializer {\n /**\n Create a serializer. `nodes` should map node names to functions\n that take a node and return a description of the corresponding\n DOM. `marks` does the same for mark names, but also gets an\n argument that tells it whether the mark's content is block or\n inline content (for typical use, it'll always be inline). A mark\n serializer may be `null` to indicate that marks of that type\n should not be serialized.\n */\n constructor(\n /**\n The node serialization functions.\n */\n nodes, \n /**\n The mark serialization functions.\n */\n marks) {\n this.nodes = nodes;\n this.marks = marks;\n }\n /**\n Serialize the content of this fragment to a DOM fragment. When\n not in the browser, the `document` option, containing a DOM\n document, should be passed so that the serializer can create\n nodes.\n */\n serializeFragment(fragment, options = {}, target) {\n if (!target)\n target = doc(options).createDocumentFragment();\n let top = target, active = [];\n fragment.forEach(node => {\n if (active.length || node.marks.length) {\n let keep = 0, rendered = 0;\n while (keep < active.length && rendered < node.marks.length) {\n let next = node.marks[rendered];\n if (!this.marks[next.type.name]) {\n rendered++;\n continue;\n }\n if (!next.eq(active[keep][0]) || next.type.spec.spanning === false)\n break;\n keep++;\n rendered++;\n }\n while (keep < active.length)\n top = active.pop()[1];\n while (rendered < node.marks.length) {\n let add = node.marks[rendered++];\n let markDOM = this.serializeMark(add, node.isInline, options);\n if (markDOM) {\n active.push([add, top]);\n top.appendChild(markDOM.dom);\n top = markDOM.contentDOM || markDOM.dom;\n }\n }\n }\n top.appendChild(this.serializeNodeInner(node, options));\n });\n return target;\n }\n /**\n @internal\n */\n serializeNodeInner(node, options) {\n let { dom, contentDOM } = renderSpec(doc(options), this.nodes[node.type.name](node), null, node.attrs);\n if (contentDOM) {\n if (node.isLeaf)\n throw new RangeError(\"Content hole not allowed in a leaf node spec\");\n this.serializeFragment(node.content, options, contentDOM);\n }\n return dom;\n }\n /**\n Serialize this node to a DOM node. This can be useful when you\n need to serialize a part of a document, as opposed to the whole\n document. To serialize a whole document, use\n [`serializeFragment`](https://prosemirror.net/docs/ref/#model.DOMSerializer.serializeFragment) on\n its [content](https://prosemirror.net/docs/ref/#model.Node.content).\n */\n serializeNode(node, options = {}) {\n let dom = this.serializeNodeInner(node, options);\n for (let i = node.marks.length - 1; i >= 0; i--) {\n let wrap = this.serializeMark(node.marks[i], node.isInline, options);\n if (wrap) {\n (wrap.contentDOM || wrap.dom).appendChild(dom);\n dom = wrap.dom;\n }\n }\n return dom;\n }\n /**\n @internal\n */\n serializeMark(mark, inline, options = {}) {\n let toDOM = this.marks[mark.type.name];\n return toDOM && renderSpec(doc(options), toDOM(mark, inline), null, mark.attrs);\n }\n static renderSpec(doc, structure, xmlNS = null, blockArraysIn) {\n return renderSpec(doc, structure, xmlNS, blockArraysIn);\n }\n /**\n Build a serializer using the [`toDOM`](https://prosemirror.net/docs/ref/#model.NodeSpec.toDOM)\n properties in a schema's node and mark specs.\n */\n static fromSchema(schema) {\n return schema.cached.domSerializer ||\n (schema.cached.domSerializer = new DOMSerializer(this.nodesFromSchema(schema), this.marksFromSchema(schema)));\n }\n /**\n Gather the serializers in a schema's node specs into an object.\n This can be useful as a base to build a custom serializer from.\n */\n static nodesFromSchema(schema) {\n let result = gatherToDOM(schema.nodes);\n if (!result.text)\n result.text = node => node.text;\n return result;\n }\n /**\n Gather the serializers in a schema's mark specs into an object.\n */\n static marksFromSchema(schema) {\n return gatherToDOM(schema.marks);\n }\n}\nfunction gatherToDOM(obj) {\n let result = {};\n for (let name in obj) {\n let toDOM = obj[name].spec.toDOM;\n if (toDOM)\n result[name] = toDOM;\n }\n return result;\n}\nfunction doc(options) {\n return options.document || window.document;\n}\nconst suspiciousAttributeCache = new WeakMap();\nfunction suspiciousAttributes(attrs) {\n let value = suspiciousAttributeCache.get(attrs);\n if (value === undefined)\n suspiciousAttributeCache.set(attrs, value = suspiciousAttributesInner(attrs));\n return value;\n}\nfunction suspiciousAttributesInner(attrs) {\n let result = null;\n function scan(value) {\n if (value && typeof value == \"object\") {\n if (Array.isArray(value)) {\n if (typeof value[0] == \"string\") {\n if (!result)\n result = [];\n result.push(value);\n }\n else {\n for (let i = 0; i < value.length; i++)\n scan(value[i]);\n }\n }\n else {\n for (let prop in value)\n scan(value[prop]);\n }\n }\n }\n scan(attrs);\n return result;\n}\nfunction renderSpec(doc, structure, xmlNS, blockArraysIn) {\n if (typeof structure == \"string\")\n return { dom: doc.createTextNode(structure) };\n if (structure.nodeType != null)\n return { dom: structure };\n if (structure.dom && structure.dom.nodeType != null)\n return structure;\n let tagName = structure[0], suspicious;\n if (typeof tagName != \"string\")\n throw new RangeError(\"Invalid array passed to renderSpec\");\n if (blockArraysIn && (suspicious = suspiciousAttributes(blockArraysIn)) &&\n suspicious.indexOf(structure) > -1)\n throw new RangeError(\"Using an array from an attribute object as a DOM spec. This may be an attempted cross site scripting attack.\");\n let space = tagName.indexOf(\" \");\n if (space > 0) {\n xmlNS = tagName.slice(0, space);\n tagName = tagName.slice(space + 1);\n }\n let contentDOM;\n let dom = (xmlNS ? doc.createElementNS(xmlNS, tagName) : doc.createElement(tagName));\n let attrs = structure[1], start = 1;\n if (attrs && typeof attrs == \"object\" && attrs.nodeType == null && !Array.isArray(attrs)) {\n start = 2;\n for (let name in attrs)\n if (attrs[name] != null) {\n let space = name.indexOf(\" \");\n if (space > 0)\n dom.setAttributeNS(name.slice(0, space), name.slice(space + 1), attrs[name]);\n else if (name == \"style\" && dom.style)\n dom.style.cssText = attrs[name];\n else\n dom.setAttribute(name, attrs[name]);\n }\n }\n for (let i = start; i < structure.length; i++) {\n let child = structure[i];\n if (child === 0) {\n if (i < structure.length - 1 || i > start)\n throw new RangeError(\"Content hole must be the only child of its parent node\");\n return { dom, contentDOM: dom };\n }\n else {\n let { dom: inner, contentDOM: innerContent } = renderSpec(doc, child, xmlNS, blockArraysIn);\n dom.appendChild(inner);\n if (innerContent) {\n if (contentDOM)\n throw new RangeError(\"Multiple content holes\");\n contentDOM = innerContent;\n }\n }\n }\n return { dom, contentDOM };\n}\n\nexport { ContentMatch, DOMParser, DOMSerializer, Fragment, Mark, MarkType, Node, NodeRange, NodeType, ReplaceError, ResolvedPos, Schema, Slice };\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n * Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n * Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n * Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n * Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized `value`.\n */\nexport function toString(value, options) {\n const settings = options || emptyOptions\n const includeImageAlt =\n typeof settings.includeImageAlt === 'boolean'\n ? settings.includeImageAlt\n : true\n const includeHtml =\n typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n if (node(value)) {\n if ('value' in value) {\n return value.type === 'html' && !includeHtml ? '' : value.value\n }\n\n if (includeImageAlt && 'alt' in value && value.alt) {\n return value.alt\n }\n\n if ('children' in value) {\n return all(value.children, includeImageAlt, includeHtml)\n }\n }\n\n if (Array.isArray(value)) {\n return all(value, includeImageAlt, includeHtml)\n }\n\n return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n /** @type {Array<string>} */\n const result = []\n let index = -1\n\n while (++index < values.length) {\n result[index] = one(values[index], includeImageAlt, includeHtml)\n }\n\n return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n * Thing.\n * @returns {value is Nodes}\n * Whether `value` is a node.\n */\nfunction node(value) {\n return Boolean(value && typeof value === 'object')\n}\n","/// <reference lib=\"dom\" />\n\n/* global document */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string | false}\n */\nexport function decodeNamedCharacterReference(value) {\n const characterReference = '&' + value + ';'\n element.innerHTML = characterReference\n const character = element.textContent\n\n // Some named character references do not require the closing semicolon\n // (`¬`, for instance), which leads to situations where parsing the assumed\n // named reference of `¬it;` will result in the string `¬it;`.\n // When we encounter a trailing semicolon after parsing, and the character\n // reference to decode was not a semicolon (`;`), we can assume that the\n // matching was not complete.\n if (\n character.charCodeAt(character.length - 1) === 59 /* `;` */ &&\n value !== 'semi'\n ) {\n return false\n }\n\n // If the decoded string is equal to the input, the character reference was\n // not valid.\n return character === characterReference ? false : character\n}\n","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array<T>} list\n * List to operate on.\n * @param {number} start\n * Index to remove/insert at (can be negative).\n * @param {number} remove\n * Number of items to remove.\n * @param {Array<T>} items\n * Items to inject into `list`.\n * @returns {undefined}\n * Nothing.\n */\nexport function splice(list, start, remove, items) {\n const end = list.length;\n let chunkStart = 0;\n /** @type {Array<unknown>} */\n let parameters;\n\n // Make start between zero and `end` (included).\n if (start < 0) {\n start = -start > end ? 0 : end + start;\n } else {\n start = start > end ? end : start;\n }\n remove = remove > 0 ? remove : 0;\n\n // No need to chunk the items if there’s only a couple (10k) items.\n if (items.length < 10000) {\n parameters = Array.from(items);\n parameters.unshift(start, remove);\n // @ts-expect-error Hush, it’s fine.\n list.splice(...parameters);\n } else {\n // Delete `remove` items starting from `start`\n if (remove) list.splice(start, remove);\n\n // Insert the items in chunks to not cause stack overflows.\n while (chunkStart < items.length) {\n parameters = items.slice(chunkStart, chunkStart + 10000);\n parameters.unshift(start, 0);\n // @ts-expect-error Hush, it’s fine.\n list.splice(...parameters);\n chunkStart += 10000;\n start += 10000;\n }\n }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array<T>} list\n * List to operate on.\n * @param {Array<T>} items\n * Items to add to `list`.\n * @returns {Array<T>}\n * Either `list` or `items`.\n */\nexport function push(list, items) {\n if (list.length > 0) {\n splice(list, list.length, 0, items);\n return list;\n }\n return items;\n}","/**\n * @import {\n * Extension,\n * Handles,\n * HtmlExtension,\n * NormalizedExtension\n * } from 'micromark-util-types'\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {ReadonlyArray<Extension>} extensions\n * List of syntax extensions.\n * @returns {NormalizedExtension}\n * A single combined extension.\n */\nexport function combineExtensions(extensions) {\n /** @type {NormalizedExtension} */\n const all = {}\n let index = -1\n\n while (++index < extensions.length) {\n syntaxExtension(all, extensions[index])\n }\n\n return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n * Extension to merge into.\n * @param {Extension} extension\n * Extension to merge.\n * @returns {undefined}\n * Nothing.\n */\nfunction syntaxExtension(all, extension) {\n /** @type {keyof Extension} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n /** @type {Record<string, unknown>} */\n const left = maybe || (all[hook] = {})\n /** @type {Record<string, unknown> | undefined} */\n const right = extension[hook]\n /** @type {string} */\n let code\n\n if (right) {\n for (code in right) {\n if (!hasOwnProperty.call(left, code)) left[code] = []\n const value = right[code]\n constructs(\n // @ts-expect-error Looks like a list.\n left[code],\n Array.isArray(value) ? value : value ? [value] : []\n )\n }\n }\n }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n * List of constructs to merge into.\n * @param {Array<unknown>} list\n * List of constructs to merge.\n * @returns {undefined}\n * Nothing.\n */\nfunction constructs(existing, list) {\n let index = -1\n /** @type {Array<unknown>} */\n const before = []\n\n while (++index < list.length) {\n // @ts-expect-error Looks like an object.\n ;(list[index].add === 'after' ? existing : before).push(list[index])\n }\n\n splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {ReadonlyArray<HtmlExtension>} htmlExtensions\n * List of HTML extensions.\n * @returns {HtmlExtension}\n * Single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n /** @type {HtmlExtension} */\n const handlers = {}\n let index = -1\n\n while (++index < htmlExtensions.length) {\n htmlExtension(handlers, htmlExtensions[index])\n }\n\n return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n * Extension to merge into.\n * @param {HtmlExtension} extension\n * Extension to merge.\n * @returns {undefined}\n * Nothing.\n */\nfunction htmlExtension(all, extension) {\n /** @type {keyof HtmlExtension} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n const left = maybe || (all[hook] = {})\n const right = extension[hook]\n /** @type {keyof Handles} */\n let type\n\n if (right) {\n for (type in right) {\n // @ts-expect-error assume document vs regular handler are managed correctly.\n left[type] = right[type]\n }\n }\n }\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n * Value to decode.\n * @param {number} base\n * Numeric base.\n * @returns {string}\n * Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n const code = Number.parseInt(value, base);\n if (\n // C0 except for HT, LF, FF, CR, space.\n code < 9 || code === 11 || code > 13 && code < 32 ||\n // Control character (DEL) of C0, and C1 controls.\n code > 126 && code < 160 ||\n // Lone high surrogates and low surrogates.\n code > 55_295 && code < 57_344 ||\n // Noncharacters.\n code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n // Out of range\n code > 1_114_111) {\n return \"\\uFFFD\";\n }\n return String.fromCodePoint(code);\n}","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n * Identifier to normalize.\n * @returns {string}\n * Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n return value\n // Collapse markdown whitespace.\n .replace(/[\\t\\n\\r ]+/g, \" \")\n // Trim.\n .replace(/^ | $/g, '')\n // Some characters are considered “uppercase”, but if their lowercase\n // counterpart is uppercased will result in a different uppercase\n // character.\n // Hence, to get that form, we perform both lower- and uppercase.\n // Upper case makes sure keys will not interact with default prototypal\n // methods: no method is uppercase.\n .toLowerCase().toUpperCase();\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function asciiControl(code) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code !== null && (code < 32 || code === 127)\n );\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/);\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEnding(code) {\n return code !== null && code < -2;\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n return code !== null && (code < 0 || code === 32);\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownSpace(code) {\n return code === -2 || code === -1 || code === 32;\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/);\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * Expression.\n * @returns {(code: Code) => boolean}\n * Check.\n */\nfunction regexCheck(regex) {\n return check;\n\n /**\n * Check whether a code matches the bound regex.\n *\n * @param {Code} code\n * Character code.\n * @returns {boolean}\n * Whether the character code matches the bound regex.\n */\n function check(code) {\n return code !== null && code > -1 && regex.test(String.fromCharCode(code));\n }\n}","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { markdownSpace } from 'micromark-util-character';\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * * spaces in markdown are often optional, in which case this factory can be\n * used and `ok` will be switched to whether spaces were found or not\n * * one line ending or space can be detected with `markdownSpace(code)` right\n * before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {TokenType} type\n * Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n * Max (exclusive).\n * @returns {State}\n * Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n const limit = max ? max - 1 : Number.POSITIVE_INFINITY;\n let size = 0;\n return start;\n\n /** @type {State} */\n function start(code) {\n if (markdownSpace(code)) {\n effects.enter(type);\n return prefix(code);\n }\n return ok(code);\n }\n\n /** @type {State} */\n function prefix(code) {\n if (markdownSpace(code) && size++ < limit) {\n effects.consume(code);\n return prefix;\n }\n effects.exit(type);\n return ok(code);\n }\n}","/**\n * @import {\n * InitialConstruct,\n * Initializer,\n * State,\n * TokenizeContext,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const content = {\n tokenize: initializeContent\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Initializer}\n * Content.\n */\nfunction initializeContent(effects) {\n const contentStart = effects.attempt(this.parser.constructs.contentInitial, afterContentStartConstruct, paragraphInitial);\n /** @type {Token} */\n let previous;\n return contentStart;\n\n /** @type {State} */\n function afterContentStartConstruct(code) {\n if (code === null) {\n effects.consume(code);\n return;\n }\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return factorySpace(effects, contentStart, \"linePrefix\");\n }\n\n /** @type {State} */\n function paragraphInitial(code) {\n effects.enter(\"paragraph\");\n return lineStart(code);\n }\n\n /** @type {State} */\n function lineStart(code) {\n const token = effects.enter(\"chunkText\", {\n contentType: \"text\",\n previous\n });\n if (previous) {\n previous.next = token;\n }\n previous = token;\n return data(code);\n }\n\n /** @type {State} */\n function data(code) {\n if (code === null) {\n effects.exit(\"chunkText\");\n effects.exit(\"paragraph\");\n effects.consume(code);\n return;\n }\n if (markdownLineEnding(code)) {\n effects.consume(code);\n effects.exit(\"chunkText\");\n return lineStart;\n }\n\n // Data.\n effects.consume(code);\n return data;\n }\n}","/**\n * @import {\n * Construct,\n * ContainerState,\n * InitialConstruct,\n * Initializer,\n * Point,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n * Construct and its state.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {InitialConstruct} */\nexport const document = {\n tokenize: initializeDocument\n};\n\n/** @type {Construct} */\nconst containerConstruct = {\n tokenize: tokenizeContainer\n};\n\n/**\n * @this {TokenizeContext}\n * Self.\n * @type {Initializer}\n * Initializer.\n */\nfunction initializeDocument(effects) {\n const self = this;\n /** @type {Array<StackItem>} */\n const stack = [];\n let continued = 0;\n /** @type {TokenizeContext | undefined} */\n let childFlow;\n /** @type {Token | undefined} */\n let childToken;\n /** @type {number} */\n let lineStartOffset;\n return start;\n\n /** @type {State} */\n function start(code) {\n // First we iterate through the open blocks, starting with the root\n // document, and descending through last children down to the last open\n // block.\n // Each block imposes a condition that the line must satisfy if the block is\n // to remain open.\n // For example, a block quote requires a `>` character.\n // A paragraph requires a non-blank line.\n // In this phase we may match all or just some of the open blocks.\n // But we cannot close unmatched blocks yet, because we may have a lazy\n // continuation line.\n if (continued < stack.length) {\n const item = stack[continued];\n self.containerState = item[1];\n return effects.attempt(item[0].continuation, documentContinue, checkNewContainers)(code);\n }\n\n // Done.\n return checkNewContainers(code);\n }\n\n /** @type {State} */\n function documentContinue(code) {\n continued++;\n\n // Note: this field is called `_closeFlow` but it also closes containers.\n // Perhaps a good idea to rename it but it’s already used in the wild by\n // extensions.\n if (self.containerState._closeFlow) {\n self.containerState._closeFlow = undefined;\n if (childFlow) {\n closeFlow();\n }\n\n // Note: this algorithm for moving events around is similar to the\n // algorithm when dealing with lazy lines in `writeToChild`.\n const indexBeforeExits = self.events.length;\n let indexBeforeFlow = indexBeforeExits;\n /** @type {Point | undefined} */\n let point;\n\n // Find the flow chunk.\n while (indexBeforeFlow--) {\n if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n point = self.events[indexBeforeFlow][1].end;\n break;\n }\n }\n exitContainers(continued);\n\n // Fix positions.\n let index = indexBeforeExits;\n while (index < self.events.length) {\n self.events[index][1].end = {\n ...point\n };\n index++;\n }\n\n // Inject the exits earlier (they’re still also at the end).\n splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n // Discard the duplicate exits.\n self.events.length = index;\n return checkNewContainers(code);\n }\n return start(code);\n }\n\n /** @type {State} */\n function checkNewContainers(code) {\n // Next, after consuming the continuation markers for existing blocks, we\n // look for new block starts (e.g. `>` for a block quote).\n // If we encounter a new block start, we close any blocks unmatched in\n // step 1 before creating the new block as a child of the last matched\n // block.\n if (continued === stack.length) {\n // No need to `check` whether there’s a container, of `exitContainers`\n // would be moot.\n // We can instead immediately `attempt` to parse one.\n if (!childFlow) {\n return documentContinued(code);\n }\n\n // If we have concrete content, such as block HTML or fenced code,\n // we can’t have containers “pierce” into them, so we can immediately\n // start.\n if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n return flowStart(code);\n }\n\n // If we do have flow, it could still be a blank line,\n // but we’d be interrupting it w/ a new container if there’s a current\n // construct.\n // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n // needed in micromark-extension-gfm-table@1.0.6).\n self.interrupt = Boolean(childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack);\n }\n\n // Check if there is a new container.\n self.containerState = {};\n return effects.check(containerConstruct, thereIsANewContainer, thereIsNoNewContainer)(code);\n }\n\n /** @type {State} */\n function thereIsANewContainer(code) {\n if (childFlow) closeFlow();\n exitContainers(continued);\n return documentContinued(code);\n }\n\n /** @type {State} */\n function thereIsNoNewContainer(code) {\n self.parser.lazy[self.now().line] = continued !== stack.length;\n lineStartOffset = self.now().offset;\n return flowStart(code);\n }\n\n /** @type {State} */\n function documentContinued(code) {\n // Try new containers.\n self.containerState = {};\n return effects.attempt(containerConstruct, containerContinue, flowStart)(code);\n }\n\n /** @type {State} */\n function containerContinue(code) {\n continued++;\n stack.push([self.currentConstruct, self.containerState]);\n // Try another.\n return documentContinued(code);\n }\n\n /** @type {State} */\n function flowStart(code) {\n if (code === null) {\n if (childFlow) closeFlow();\n exitContainers(0);\n effects.consume(code);\n return;\n }\n childFlow = childFlow || self.parser.flow(self.now());\n effects.enter(\"chunkFlow\", {\n _tokenizer: childFlow,\n contentType: \"flow\",\n previous: childToken\n });\n return flowContinue(code);\n }\n\n /** @type {State} */\n function flowContinue(code) {\n if (code === null) {\n writeToChild(effects.exit(\"chunkFlow\"), true);\n exitContainers(0);\n effects.consume(code);\n return;\n }\n if (markdownLineEnding(code)) {\n effects.consume(code);\n writeToChild(effects.exit(\"chunkFlow\"));\n // Get ready for the next line.\n continued = 0;\n self.interrupt = undefined;\n return start;\n }\n effects.consume(code);\n return flowContinue;\n }\n\n /**\n * @param {Token} token\n * Token.\n * @param {boolean | undefined} [endOfFile]\n * Whether the token is at the end of the file (default: `false`).\n * @returns {undefined}\n * Nothing.\n */\n function writeToChild(token, endOfFile) {\n const stream = self.sliceStream(token);\n if (endOfFile) stream.push(null);\n token.previous = childToken;\n if (childToken) childToken.next = token;\n childToken = token;\n childFlow.defineSkip(token.start);\n childFlow.write(stream);\n\n // Alright, so we just added a lazy line:\n //\n // ```markdown\n // > a\n // b.\n //\n // Or:\n //\n // > ~~~c\n // d\n //\n // Or:\n //\n // > | e |\n // f\n // ```\n //\n // The construct in the second example (fenced code) does not accept lazy\n // lines, so it marked itself as done at the end of its first line, and\n // then the content construct parses `d`.\n // Most constructs in markdown match on the first line: if the first line\n // forms a construct, a non-lazy line can’t “unmake” it.\n //\n // The construct in the third example is potentially a GFM table, and\n // those are *weird*.\n // It *could* be a table, from the first line, if the following line\n // matches a condition.\n // In this case, that second line is lazy, which “unmakes” the first line\n // and turns the whole into one content block.\n //\n // We’ve now parsed the non-lazy and the lazy line, and can figure out\n // whether the lazy line started a new flow block.\n // If it did, we exit the current containers between the two flow blocks.\n if (self.parser.lazy[token.start.line]) {\n let index = childFlow.events.length;\n while (index--) {\n if (\n // The token starts before the line ending…\n childFlow.events[index][1].start.offset < lineStartOffset && (\n // …and either is not ended yet…\n !childFlow.events[index][1].end ||\n // …or ends after it.\n childFlow.events[index][1].end.offset > lineStartOffset)) {\n // Exit: there’s still something open, which means it’s a lazy line\n // part of something.\n return;\n }\n }\n\n // Note: this algorithm for moving events around is similar to the\n // algorithm when closing flow in `documentContinue`.\n const indexBeforeExits = self.events.length;\n let indexBeforeFlow = indexBeforeExits;\n /** @type {boolean | undefined} */\n let seen;\n /** @type {Point | undefined} */\n let point;\n\n // Find the previous chunk (the one before the lazy line).\n while (indexBeforeFlow--) {\n if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n if (seen) {\n point = self.events[indexBeforeFlow][1].end;\n break;\n }\n seen = true;\n }\n }\n exitContainers(continued);\n\n // Fix positions.\n index = indexBeforeExits;\n while (index < self.events.length) {\n self.events[index][1].end = {\n ...point\n };\n index++;\n }\n\n // Inject the exits earlier (they’re still also at the end).\n splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n // Discard the duplicate exits.\n self.events.length = index;\n }\n }\n\n /**\n * @param {number} size\n * Size.\n * @returns {undefined}\n * Nothing.\n */\n function exitContainers(size) {\n let index = stack.length;\n\n // Exit open containers.\n while (index-- > size) {\n const entry = stack[index];\n self.containerState = entry[1];\n entry[0].exit.call(self, effects);\n }\n stack.length = size;\n }\n function closeFlow() {\n childFlow.write([null]);\n childToken = undefined;\n childFlow = undefined;\n self.containerState._closeFlow = undefined;\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n * Tokenizer.\n */\nfunction tokenizeContainer(effects, ok, nok) {\n // Always populated by defaults.\n\n return factorySpace(effects, effects.attempt(this.parser.constructs.document, ok, nok), \"linePrefix\", this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4);\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\nimport { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n * Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n * Group.\n */\nexport function classifyCharacter(code) {\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return 1;\n }\n if (unicodePunctuation(code)) {\n return 2;\n }\n}","/**\n * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types'\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs\n * List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n * List of events.\n * @param {TokenizeContext} context\n * Context used by `tokenize`.\n * @returns {Array<Event>}\n * Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n /** @type {Array<Resolver>} */\n const called = []\n let index = -1\n\n while (++index < constructs.length) {\n const resolve = constructs[index].resolveAll\n\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context)\n called.push(resolve)\n }\n }\n\n return events\n}\n","/**\n * @import {\n * Code,\n * Construct,\n * Event,\n * Point,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { push, splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const attention = {\n name: 'attention',\n resolveAll: resolveAllAttention,\n tokenize: tokenizeAttention\n};\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n let index = -1;\n /** @type {number} */\n let open;\n /** @type {Token} */\n let group;\n /** @type {Token} */\n let text;\n /** @type {Token} */\n let openingSequence;\n /** @type {Token} */\n let closingSequence;\n /** @type {number} */\n let use;\n /** @type {Array<Event>} */\n let nextEvents;\n /** @type {number} */\n let offset;\n\n // Walk through all events.\n //\n // Note: performance of this is fine on an mb of normal markdown, but it’s\n // a bottleneck for malicious stuff.\n while (++index < events.length) {\n // Find a token that can close.\n if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\n open = index;\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open &&\n // If the markers are the same:\n context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n // If the opening can close or the closing can open,\n // and the close size *is not* a multiple of three,\n // but the sum of the opening and closing size *is* multiple of three,\n // then don’t match.\n if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n continue;\n }\n\n // Number of markers to use from the sequence.\n use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n const start = {\n ...events[open][1].end\n };\n const end = {\n ...events[index][1].start\n };\n movePoint(start, -use);\n movePoint(end, use);\n openingSequence = {\n type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n start,\n end: {\n ...events[open][1].end\n }\n };\n closingSequence = {\n type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n start: {\n ...events[index][1].start\n },\n end\n };\n text = {\n type: use > 1 ? \"strongText\" : \"emphasisText\",\n start: {\n ...events[open][1].end\n },\n end: {\n ...events[index][1].start\n }\n };\n group = {\n type: use > 1 ? \"strong\" : \"emphasis\",\n start: {\n ...openingSequence.start\n },\n end: {\n ...closingSequence.end\n }\n };\n events[open][1].end = {\n ...openingSequence.start\n };\n events[index][1].start = {\n ...closingSequence.end\n };\n nextEvents = [];\n\n // If there are more markers in the opening, add them before.\n if (events[open][1].end.offset - events[open][1].start.offset) {\n nextEvents = push(nextEvents, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n }\n\n // Opening.\n nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]);\n\n // Always populated by defaults.\n\n // Between.\n nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context));\n\n // Closing.\n nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]);\n\n // If there are more markers in the closing, add them after.\n if (events[index][1].end.offset - events[index][1].start.offset) {\n offset = 2;\n nextEvents = push(nextEvents, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\n } else {\n offset = 0;\n }\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - offset - 2;\n break;\n }\n }\n }\n }\n\n // Remove remaining sequences.\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === 'attentionSequence') {\n events[index][1].type = 'data';\n }\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n const previous = this.previous;\n const before = classifyCharacter(previous);\n\n /** @type {NonNullable<Code>} */\n let marker;\n return start;\n\n /**\n * Before a sequence.\n *\n * ```markdown\n * > | **\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n marker = code;\n effects.enter('attentionSequence');\n return inside(code);\n }\n\n /**\n * In a sequence.\n *\n * ```markdown\n * > | **\n * ^^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker) {\n effects.consume(code);\n return inside;\n }\n const token = effects.exit('attentionSequence');\n\n // To do: next major: move this to resolver, just like `markdown-rs`.\n const after = classifyCharacter(code);\n\n // Always populated by defaults.\n\n const open = !after || after === 2 && before || attentionMarkers.includes(code);\n const close = !before || before === 2 && after || attentionMarkers.includes(previous);\n token._open = Boolean(marker === 42 ? open : open && (before || !close));\n token._close = Boolean(marker === 42 ? close : close && (after || !open));\n return ok(code);\n }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * Point.\n * @param {number} offset\n * Amount to move.\n * @returns {undefined}\n * Nothing.\n */\nfunction movePoint(point, offset) {\n point.column += offset;\n point.offset += offset;\n point._bufferIndex += offset;\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\nexport const autolink = {\n name: 'autolink',\n tokenize: tokenizeAutolink\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n let size = 0;\n return start;\n\n /**\n * Start of an autolink.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * > | a<user@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"autolink\");\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.enter(\"autolinkProtocol\");\n return open;\n }\n\n /**\n * After `<`, at protocol or atext.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * > | a<user@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (asciiAlpha(code)) {\n effects.consume(code);\n return schemeOrEmailAtext;\n }\n if (code === 64) {\n return nok(code);\n }\n return emailAtext(code);\n }\n\n /**\n * At second byte of protocol or atext.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * > | a<user@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeOrEmailAtext(code) {\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n // Count the previous alphabetical from `open` too.\n size = 1;\n return schemeInsideOrEmailAtext(code);\n }\n return emailAtext(code);\n }\n\n /**\n * In ambiguous protocol or atext.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * > | a<user@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeInsideOrEmailAtext(code) {\n if (code === 58) {\n effects.consume(code);\n size = 0;\n return urlInside;\n }\n\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\n effects.consume(code);\n return schemeInsideOrEmailAtext;\n }\n size = 0;\n return emailAtext(code);\n }\n\n /**\n * After protocol, in URL.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function urlInside(code) {\n if (code === 62) {\n effects.exit(\"autolinkProtocol\");\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.exit(\"autolink\");\n return ok;\n }\n\n // ASCII control, space, or `<`.\n if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n return nok(code);\n }\n effects.consume(code);\n return urlInside;\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | a<user.name@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailAtext(code) {\n if (code === 64) {\n effects.consume(code);\n return emailAtSignOrDot;\n }\n if (asciiAtext(code)) {\n effects.consume(code);\n return emailAtext;\n }\n return nok(code);\n }\n\n /**\n * In label, after at-sign or dot.\n *\n * ```markdown\n * > | a<user.name@example.com>b\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function emailAtSignOrDot(code) {\n return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);\n }\n\n /**\n * In label, where `.` and `>` are allowed.\n *\n * ```markdown\n * > | a<user.name@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailLabel(code) {\n if (code === 46) {\n effects.consume(code);\n size = 0;\n return emailAtSignOrDot;\n }\n if (code === 62) {\n // Exit, then change the token type.\n effects.exit(\"autolinkProtocol\").type = \"autolinkEmail\";\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.exit(\"autolink\");\n return ok;\n }\n return emailValue(code);\n }\n\n /**\n * In label, where `.` and `>` are *not* allowed.\n *\n * Though, this is also used in `emailLabel` to parse other values.\n *\n * ```markdown\n * > | a<user.name@ex-ample.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailValue(code) {\n // ASCII alphanumeric or `-`.\n if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n const next = code === 45 ? emailValue : emailLabel;\n effects.consume(code);\n return next;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blankLine = {\n partial: true,\n tokenize: tokenizeBlankLine\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n return start;\n\n /**\n * Start of blank line.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n return markdownSpace(code) ? factorySpace(effects, after, \"linePrefix\")(code) : after(code);\n }\n\n /**\n * At eof/eol, after optional whitespace.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * Exiter,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blockQuote = {\n continuation: {\n tokenize: tokenizeBlockQuoteContinuation\n },\n exit,\n name: 'blockQuote',\n tokenize: tokenizeBlockQuoteStart\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of block quote.\n *\n * ```markdown\n * > | > a\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (code === 62) {\n const state = self.containerState;\n if (!state.open) {\n effects.enter(\"blockQuote\", {\n _container: true\n });\n state.open = true;\n }\n effects.enter(\"blockQuotePrefix\");\n effects.enter(\"blockQuoteMarker\");\n effects.consume(code);\n effects.exit(\"blockQuoteMarker\");\n return after;\n }\n return nok(code);\n }\n\n /**\n * After `>`, before optional whitespace.\n *\n * ```markdown\n * > | > a\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (markdownSpace(code)) {\n effects.enter(\"blockQuotePrefixWhitespace\");\n effects.consume(code);\n effects.exit(\"blockQuotePrefixWhitespace\");\n effects.exit(\"blockQuotePrefix\");\n return ok;\n }\n effects.exit(\"blockQuotePrefix\");\n return ok(code);\n }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n const self = this;\n return contStart;\n\n /**\n * Start of block quote continuation.\n *\n * Also used to parse the first block quote opening.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @type {State}\n */\n function contStart(code) {\n if (markdownSpace(code)) {\n // Always populated by defaults.\n\n return factorySpace(effects, contBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n }\n return contBefore(code);\n }\n\n /**\n * At `>`, after optional whitespace.\n *\n * Also used to parse the first block quote opening.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @type {State}\n */\n function contBefore(code) {\n return effects.attempt(blockQuote, ok, nok)(code);\n }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n effects.exit(\"blockQuote\");\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiPunctuation } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterEscape = {\n name: 'characterEscape',\n tokenize: tokenizeCharacterEscape\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n return start;\n\n /**\n * Start of character escape.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"characterEscape\");\n effects.enter(\"escapeMarker\");\n effects.consume(code);\n effects.exit(\"escapeMarker\");\n return inside;\n }\n\n /**\n * After `\\`, at punctuation.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // ASCII punctuation.\n if (asciiPunctuation(code)) {\n effects.enter(\"characterEscapeValue\");\n effects.consume(code);\n effects.exit(\"characterEscapeValue\");\n effects.exit(\"characterEscape\");\n return ok;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterReference = {\n name: 'characterReference',\n tokenize: tokenizeCharacterReference\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n const self = this;\n let size = 0;\n /** @type {number} */\n let max;\n /** @type {(code: Code) => boolean} */\n let test;\n return start;\n\n /**\n * Start of character reference.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"characterReference\");\n effects.enter(\"characterReferenceMarker\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarker\");\n return open;\n }\n\n /**\n * After `&`, at `#` for numeric references or alphanumeric for named\n * references.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 35) {\n effects.enter(\"characterReferenceMarkerNumeric\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarkerNumeric\");\n return numeric;\n }\n effects.enter(\"characterReferenceValue\");\n max = 31;\n test = asciiAlphanumeric;\n return value(code);\n }\n\n /**\n * After `#`, at `x` for hexadecimals or digit for decimals.\n *\n * ```markdown\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function numeric(code) {\n if (code === 88 || code === 120) {\n effects.enter(\"characterReferenceMarkerHexadecimal\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarkerHexadecimal\");\n effects.enter(\"characterReferenceValue\");\n max = 6;\n test = asciiHexDigit;\n return value;\n }\n effects.enter(\"characterReferenceValue\");\n max = 7;\n test = asciiDigit;\n return value(code);\n }\n\n /**\n * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n *\n * The character reference kind defines what and how many characters are\n * allowed.\n *\n * ```markdown\n * > | a&b\n * ^^^\n * > | a{b\n * ^^^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function value(code) {\n if (code === 59 && size) {\n const token = effects.exit(\"characterReferenceValue\");\n if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\n return nok(code);\n }\n\n // To do: `markdown-rs` uses a different name:\n // `CharacterReferenceMarkerSemi`.\n effects.enter(\"characterReferenceMarker\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarker\");\n effects.exit(\"characterReference\");\n return ok;\n }\n if (test(code) && size++ < max) {\n effects.consume(code);\n return value;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nconst nonLazyContinuation = {\n partial: true,\n tokenize: tokenizeNonLazyContinuation\n};\n\n/** @type {Construct} */\nexport const codeFenced = {\n concrete: true,\n name: 'codeFenced',\n tokenize: tokenizeCodeFenced\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n const self = this;\n /** @type {Construct} */\n const closeStart = {\n partial: true,\n tokenize: tokenizeCloseStart\n };\n let initialPrefix = 0;\n let sizeOpen = 0;\n /** @type {NonNullable<Code>} */\n let marker;\n return start;\n\n /**\n * Start of code.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse whitespace like `markdown-rs`.\n return beforeSequenceOpen(code);\n }\n\n /**\n * In opening fence, after prefix, at sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeSequenceOpen(code) {\n const tail = self.events[self.events.length - 1];\n initialPrefix = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n marker = code;\n effects.enter(\"codeFenced\");\n effects.enter(\"codeFencedFence\");\n effects.enter(\"codeFencedFenceSequence\");\n return sequenceOpen(code);\n }\n\n /**\n * In opening fence sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === marker) {\n sizeOpen++;\n effects.consume(code);\n return sequenceOpen;\n }\n if (sizeOpen < 3) {\n return nok(code);\n }\n effects.exit(\"codeFencedFenceSequence\");\n return markdownSpace(code) ? factorySpace(effects, infoBefore, \"whitespace\")(code) : infoBefore(code);\n }\n\n /**\n * In opening fence, after the sequence (and optional whitespace), before info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function infoBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFencedFence\");\n return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n }\n effects.enter(\"codeFencedFenceInfo\");\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return info(code);\n }\n\n /**\n * In info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function info(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceInfo\");\n return infoBefore(code);\n }\n if (markdownSpace(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceInfo\");\n return factorySpace(effects, metaBefore, \"whitespace\")(code);\n }\n if (code === 96 && code === marker) {\n return nok(code);\n }\n effects.consume(code);\n return info;\n }\n\n /**\n * In opening fence, after info and whitespace, before meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function metaBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n return infoBefore(code);\n }\n effects.enter(\"codeFencedFenceMeta\");\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return meta(code);\n }\n\n /**\n * In meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function meta(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceMeta\");\n return infoBefore(code);\n }\n if (code === 96 && code === marker) {\n return nok(code);\n }\n effects.consume(code);\n return meta;\n }\n\n /**\n * At eol/eof in code, before a non-lazy closing fence or content.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function atNonLazyBreak(code) {\n return effects.attempt(closeStart, after, contentBefore)(code);\n }\n\n /**\n * Before code content, not a closing fence, at eol.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentBefore(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return contentStart;\n }\n\n /**\n * Before code content, not a closing fence.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentStart(code) {\n return initialPrefix > 0 && markdownSpace(code) ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialPrefix + 1)(code) : beforeContentChunk(code);\n }\n\n /**\n * Before code content, after optional prefix.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeContentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n }\n effects.enter(\"codeFlowValue\");\n return contentChunk(code);\n }\n\n /**\n * In code content.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^^^^^^^^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFlowValue\");\n return beforeContentChunk(code);\n }\n effects.consume(code);\n return contentChunk;\n }\n\n /**\n * After code.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n effects.exit(\"codeFenced\");\n return ok(code);\n }\n\n /**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\n function tokenizeCloseStart(effects, ok, nok) {\n let size = 0;\n return startBefore;\n\n /**\n *\n *\n * @type {State}\n */\n function startBefore(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return start;\n }\n\n /**\n * Before closing fence, at optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Always populated by defaults.\n\n // To do: `enter` here or in next state?\n effects.enter(\"codeFencedFence\");\n return markdownSpace(code) ? factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : beforeSequenceClose(code);\n }\n\n /**\n * In closing fence, after optional whitespace, at sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeSequenceClose(code) {\n if (code === marker) {\n effects.enter(\"codeFencedFenceSequence\");\n return sequenceClose(code);\n }\n return nok(code);\n }\n\n /**\n * In closing fence sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n if (code === marker) {\n size++;\n effects.consume(code);\n return sequenceClose;\n }\n if (size >= sizeOpen) {\n effects.exit(\"codeFencedFenceSequence\");\n return markdownSpace(code) ? factorySpace(effects, sequenceCloseAfter, \"whitespace\")(code) : sequenceCloseAfter(code);\n }\n return nok(code);\n }\n\n /**\n * After closing fence sequence, after optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceCloseAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFencedFence\");\n return ok(code);\n }\n return nok(code);\n }\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n *\n *\n * @type {State}\n */\n function start(code) {\n if (code === null) {\n return nok(code);\n }\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return lineStart;\n }\n\n /**\n *\n *\n * @type {State}\n */\n function lineStart(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeIndented = {\n name: 'codeIndented',\n tokenize: tokenizeCodeIndented\n};\n\n/** @type {Construct} */\nconst furtherStart = {\n partial: true,\n tokenize: tokenizeFurtherStart\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of code (indented).\n *\n * > **Parsing note**: it is not needed to check if this first line is a\n * > filled line (that it has a non-whitespace character), because blank lines\n * > are parsed already, so we never run into that.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: manually check if interrupting like `markdown-rs`.\n\n effects.enter(\"codeIndented\");\n // To do: use an improved `space_or_tab` function like `markdown-rs`,\n // so that we can drop the next state.\n return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n }\n\n /**\n * At start, after 1 or 4 spaces.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? atBreak(code) : nok(code);\n }\n\n /**\n * At a break.\n *\n * ```markdown\n * > | aaa\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === null) {\n return after(code);\n }\n if (markdownLineEnding(code)) {\n return effects.attempt(furtherStart, atBreak, after)(code);\n }\n effects.enter(\"codeFlowValue\");\n return inside(code);\n }\n\n /**\n * In code content.\n *\n * ```markdown\n * > | aaa\n * ^^^^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFlowValue\");\n return atBreak(code);\n }\n effects.consume(code);\n return inside;\n }\n\n /** @type {State} */\n function after(code) {\n effects.exit(\"codeIndented\");\n // To do: allow interrupting like `markdown-rs`.\n // Feel free to interrupt.\n // tokenizer.interrupt = false\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n const self = this;\n return furtherStart;\n\n /**\n * At eol, trying to parse another indent.\n *\n * ```markdown\n * > | aaa\n * ^\n * | bbb\n * ```\n *\n * @type {State}\n */\n function furtherStart(code) {\n // To do: improve `lazy` / `pierce` handling.\n // If this is a lazy line, it can’t be code.\n if (self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return furtherStart;\n }\n\n // To do: the code here in `micromark-js` is a bit different from\n // `markdown-rs` because there it can attempt spaces.\n // We can’t yet.\n //\n // To do: use an improved `space_or_tab` function like `markdown-rs`,\n // so that we can drop the next state.\n return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n }\n\n /**\n * At start, after 1 or 4 spaces.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? ok(code) : markdownLineEnding(code) ? furtherStart(code) : nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * Previous,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeText = {\n name: 'codeText',\n previous,\n resolve: resolveCodeText,\n tokenize: tokenizeCodeText\n};\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n let tailExitIndex = events.length - 4;\n let headEnterIndex = 3;\n /** @type {number} */\n let index;\n /** @type {number | undefined} */\n let enter;\n\n // If we start and end with an EOL or a space.\n if ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\n index = headEnterIndex;\n\n // And we have data.\n while (++index < tailExitIndex) {\n if (events[index][1].type === \"codeTextData\") {\n // Then we have padding.\n events[headEnterIndex][1].type = \"codeTextPadding\";\n events[tailExitIndex][1].type = \"codeTextPadding\";\n headEnterIndex += 2;\n tailExitIndex -= 2;\n break;\n }\n }\n }\n\n // Merge adjacent spaces and data.\n index = headEnterIndex - 1;\n tailExitIndex++;\n while (++index <= tailExitIndex) {\n if (enter === undefined) {\n if (index !== tailExitIndex && events[index][1].type !== \"lineEnding\") {\n enter = index;\n }\n } else if (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\n events[enter][1].type = \"codeTextData\";\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end;\n events.splice(enter + 2, index - enter - 2);\n tailExitIndex -= index - enter - 2;\n index = enter + 2;\n }\n enter = undefined;\n }\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Previous}\n */\nfunction previous(code) {\n // If there is a previous code, there will always be a tail.\n return code !== 96 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n const self = this;\n let sizeOpen = 0;\n /** @type {number} */\n let size;\n /** @type {Token} */\n let token;\n return start;\n\n /**\n * Start of code (text).\n *\n * ```markdown\n * > | `a`\n * ^\n * > | \\`a`\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"codeText\");\n effects.enter(\"codeTextSequence\");\n return sequenceOpen(code);\n }\n\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === 96) {\n effects.consume(code);\n sizeOpen++;\n return sequenceOpen;\n }\n effects.exit(\"codeTextSequence\");\n return between(code);\n }\n\n /**\n * Between something and something else.\n *\n * ```markdown\n * > | `a`\n * ^^\n * ```\n *\n * @type {State}\n */\n function between(code) {\n // EOF.\n if (code === null) {\n return nok(code);\n }\n\n // To do: next major: don’t do spaces in resolve, but when compiling,\n // like `markdown-rs`.\n // Tabs don’t work, and virtual spaces don’t make sense.\n if (code === 32) {\n effects.enter('space');\n effects.consume(code);\n effects.exit('space');\n return between;\n }\n\n // Closing fence? Could also be data.\n if (code === 96) {\n token = effects.enter(\"codeTextSequence\");\n size = 0;\n return sequenceClose(code);\n }\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return between;\n }\n\n // Data.\n effects.enter(\"codeTextData\");\n return data(code);\n }\n\n /**\n * In data.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function data(code) {\n if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\n effects.exit(\"codeTextData\");\n return between(code);\n }\n effects.consume(code);\n return data;\n }\n\n /**\n * In closing sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n // More.\n if (code === 96) {\n effects.consume(code);\n size++;\n return sequenceClose;\n }\n\n // Done!\n if (size === sizeOpen) {\n effects.exit(\"codeTextSequence\");\n effects.exit(\"codeText\");\n return ok(code);\n }\n\n // More or less accents: mark as data.\n token.type = \"codeTextData\";\n return data(code);\n }\n}","/**\n * Some of the internal operations of micromark do lots of editing\n * operations on very large arrays. This runs into problems with two\n * properties of most circa-2020 JavaScript interpreters:\n *\n * - Array-length modifications at the high end of an array (push/pop) are\n * expected to be common and are implemented in (amortized) time\n * proportional to the number of elements added or removed, whereas\n * other operations (shift/unshift and splice) are much less efficient.\n * - Function arguments are passed on the stack, so adding tens of thousands\n * of elements to an array with `arr.push(...newElements)` will frequently\n * cause stack overflows. (see <https://stackoverflow.com/questions/22123769/rangeerror-maximum-call-stack-size-exceeded-why>)\n *\n * SpliceBuffers are an implementation of gap buffers, which are a\n * generalization of the \"queue made of two stacks\" idea. The splice buffer\n * maintains a cursor, and moving the cursor has cost proportional to the\n * distance the cursor moves, but inserting, deleting, or splicing in\n * new information at the cursor is as efficient as the push/pop operation.\n * This allows for an efficient sequence of splices (or pushes, pops, shifts,\n * or unshifts) as long such edits happen at the same part of the array or\n * generally sweep through the array from the beginning to the end.\n *\n * The interface for splice buffers also supports large numbers of inputs by\n * passing a single array argument rather passing multiple arguments on the\n * function call stack.\n *\n * @template T\n * Item type.\n */\nexport class SpliceBuffer {\n /**\n * @param {ReadonlyArray<T> | null | undefined} [initial]\n * Initial items (optional).\n * @returns\n * Splice buffer.\n */\n constructor(initial) {\n /** @type {Array<T>} */\n this.left = initial ? [...initial] : [];\n /** @type {Array<T>} */\n this.right = [];\n }\n\n /**\n * Array access;\n * does not move the cursor.\n *\n * @param {number} index\n * Index.\n * @return {T}\n * Item.\n */\n get(index) {\n if (index < 0 || index >= this.left.length + this.right.length) {\n throw new RangeError('Cannot access index `' + index + '` in a splice buffer of size `' + (this.left.length + this.right.length) + '`');\n }\n if (index < this.left.length) return this.left[index];\n return this.right[this.right.length - index + this.left.length - 1];\n }\n\n /**\n * The length of the splice buffer, one greater than the largest index in the\n * array.\n */\n get length() {\n return this.left.length + this.right.length;\n }\n\n /**\n * Remove and return `list[0]`;\n * moves the cursor to `0`.\n *\n * @returns {T | undefined}\n * Item, optional.\n */\n shift() {\n this.setCursor(0);\n return this.right.pop();\n }\n\n /**\n * Slice the buffer to get an array;\n * does not move the cursor.\n *\n * @param {number} start\n * Start.\n * @param {number | null | undefined} [end]\n * End (optional).\n * @returns {Array<T>}\n * Array of items.\n */\n slice(start, end) {\n /** @type {number} */\n const stop = end === null || end === undefined ? Number.POSITIVE_INFINITY : end;\n if (stop < this.left.length) {\n return this.left.slice(start, stop);\n }\n if (start > this.left.length) {\n return this.right.slice(this.right.length - stop + this.left.length, this.right.length - start + this.left.length).reverse();\n }\n return this.left.slice(start).concat(this.right.slice(this.right.length - stop + this.left.length).reverse());\n }\n\n /**\n * Mimics the behavior of Array.prototype.splice() except for the change of\n * interface necessary to avoid segfaults when patching in very large arrays.\n *\n * This operation moves cursor is moved to `start` and results in the cursor\n * placed after any inserted items.\n *\n * @param {number} start\n * Start;\n * zero-based index at which to start changing the array;\n * negative numbers count backwards from the end of the array and values\n * that are out-of bounds are clamped to the appropriate end of the array.\n * @param {number | null | undefined} [deleteCount=0]\n * Delete count (default: `0`);\n * maximum number of elements to delete, starting from start.\n * @param {Array<T> | null | undefined} [items=[]]\n * Items to include in place of the deleted items (default: `[]`).\n * @return {Array<T>}\n * Any removed items.\n */\n splice(start, deleteCount, items) {\n /** @type {number} */\n const count = deleteCount || 0;\n this.setCursor(Math.trunc(start));\n const removed = this.right.splice(this.right.length - count, Number.POSITIVE_INFINITY);\n if (items) chunkedPush(this.left, items);\n return removed.reverse();\n }\n\n /**\n * Remove and return the highest-numbered item in the array, so\n * `list[list.length - 1]`;\n * Moves the cursor to `length`.\n *\n * @returns {T | undefined}\n * Item, optional.\n */\n pop() {\n this.setCursor(Number.POSITIVE_INFINITY);\n return this.left.pop();\n }\n\n /**\n * Inserts a single item to the high-numbered side of the array;\n * moves the cursor to `length`.\n *\n * @param {T} item\n * Item.\n * @returns {undefined}\n * Nothing.\n */\n push(item) {\n this.setCursor(Number.POSITIVE_INFINITY);\n this.left.push(item);\n }\n\n /**\n * Inserts many items to the high-numbered side of the array.\n * Moves the cursor to `length`.\n *\n * @param {Array<T>} items\n * Items.\n * @returns {undefined}\n * Nothing.\n */\n pushMany(items) {\n this.setCursor(Number.POSITIVE_INFINITY);\n chunkedPush(this.left, items);\n }\n\n /**\n * Inserts a single item to the low-numbered side of the array;\n * Moves the cursor to `0`.\n *\n * @param {T} item\n * Item.\n * @returns {undefined}\n * Nothing.\n */\n unshift(item) {\n this.setCursor(0);\n this.right.push(item);\n }\n\n /**\n * Inserts many items to the low-numbered side of the array;\n * moves the cursor to `0`.\n *\n * @param {Array<T>} items\n * Items.\n * @returns {undefined}\n * Nothing.\n */\n unshiftMany(items) {\n this.setCursor(0);\n chunkedPush(this.right, items.reverse());\n }\n\n /**\n * Move the cursor to a specific position in the array. Requires\n * time proportional to the distance moved.\n *\n * If `n < 0`, the cursor will end up at the beginning.\n * If `n > length`, the cursor will end up at the end.\n *\n * @param {number} n\n * Position.\n * @return {undefined}\n * Nothing.\n */\n setCursor(n) {\n if (n === this.left.length || n > this.left.length && this.right.length === 0 || n < 0 && this.left.length === 0) return;\n if (n < this.left.length) {\n // Move cursor to the this.left\n const removed = this.left.splice(n, Number.POSITIVE_INFINITY);\n chunkedPush(this.right, removed.reverse());\n } else {\n // Move cursor to the this.right\n const removed = this.right.splice(this.left.length + this.right.length - n, Number.POSITIVE_INFINITY);\n chunkedPush(this.left, removed.reverse());\n }\n }\n}\n\n/**\n * Avoid stack overflow by pushing items onto the stack in segments\n *\n * @template T\n * Item type.\n * @param {Array<T>} list\n * List to inject into.\n * @param {ReadonlyArray<T>} right\n * Items to inject.\n * @return {undefined}\n * Nothing.\n */\nfunction chunkedPush(list, right) {\n /** @type {number} */\n let chunkStart = 0;\n if (right.length < 10000) {\n list.push(...right);\n } else {\n while (chunkStart < right.length) {\n list.push(...right.slice(chunkStart, chunkStart + 10000));\n chunkStart += 10000;\n }\n }\n}","/**\n * @import {Chunk, Event, Token} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { SpliceBuffer } from './lib/splice-buffer.js';\n\n// Hidden API exposed for testing.\nexport { SpliceBuffer } from './lib/splice-buffer.js';\n\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} eventsArray\n * List of events.\n * @returns {boolean}\n * Whether subtokens were found.\n */\n// eslint-disable-next-line complexity\nexport function subtokenize(eventsArray) {\n /** @type {Record<string, number>} */\n const jumps = {};\n let index = -1;\n /** @type {Event} */\n let event;\n /** @type {number | undefined} */\n let lineIndex;\n /** @type {number} */\n let otherIndex;\n /** @type {Event} */\n let otherEvent;\n /** @type {Array<Event>} */\n let parameters;\n /** @type {Array<Event>} */\n let subevents;\n /** @type {boolean | undefined} */\n let more;\n const events = new SpliceBuffer(eventsArray);\n while (++index < events.length) {\n while (index in jumps) {\n index = jumps[index];\n }\n event = events.get(index);\n\n // Add a hook for the GFM tasklist extension, which needs to know if text\n // is in the first content of a list item.\n if (index && event[1].type === \"chunkFlow\" && events.get(index - 1)[1].type === \"listItemPrefix\") {\n subevents = event[1]._tokenizer.events;\n otherIndex = 0;\n if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"lineEndingBlank\") {\n otherIndex += 2;\n }\n if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"content\") {\n while (++otherIndex < subevents.length) {\n if (subevents[otherIndex][1].type === \"content\") {\n break;\n }\n if (subevents[otherIndex][1].type === \"chunkText\") {\n subevents[otherIndex][1]._isInFirstContentOfListItem = true;\n otherIndex++;\n }\n }\n }\n }\n\n // Enter.\n if (event[0] === 'enter') {\n if (event[1].contentType) {\n Object.assign(jumps, subcontent(events, index));\n index = jumps[index];\n more = true;\n }\n }\n // Exit.\n else if (event[1]._container) {\n otherIndex = index;\n lineIndex = undefined;\n while (otherIndex--) {\n otherEvent = events.get(otherIndex);\n if (otherEvent[1].type === \"lineEnding\" || otherEvent[1].type === \"lineEndingBlank\") {\n if (otherEvent[0] === 'enter') {\n if (lineIndex) {\n events.get(lineIndex)[1].type = \"lineEndingBlank\";\n }\n otherEvent[1].type = \"lineEnding\";\n lineIndex = otherIndex;\n }\n } else if (otherEvent[1].type === \"linePrefix\" || otherEvent[1].type === \"listItemIndent\") {\n // Move past.\n } else {\n break;\n }\n }\n if (lineIndex) {\n // Fix position.\n event[1].end = {\n ...events.get(lineIndex)[1].start\n };\n\n // Switch container exit w/ line endings.\n parameters = events.slice(lineIndex, index);\n parameters.unshift(event);\n events.splice(lineIndex, index - lineIndex + 1, parameters);\n }\n }\n }\n\n // The changes to the `events` buffer must be copied back into the eventsArray\n splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0));\n return !more;\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {SpliceBuffer<Event>} events\n * Events.\n * @param {number} eventIndex\n * Index.\n * @returns {Record<string, number>}\n * Gaps.\n */\nfunction subcontent(events, eventIndex) {\n const token = events.get(eventIndex)[1];\n const context = events.get(eventIndex)[2];\n let startPosition = eventIndex - 1;\n /** @type {Array<number>} */\n const startPositions = [];\n let tokenizer = token._tokenizer;\n if (!tokenizer) {\n tokenizer = context.parser[token.contentType](token.start);\n if (token._contentTypeTextTrailing) {\n tokenizer._contentTypeTextTrailing = true;\n }\n }\n const childEvents = tokenizer.events;\n /** @type {Array<[number, number]>} */\n const jumps = [];\n /** @type {Record<string, number>} */\n const gaps = {};\n /** @type {Array<Chunk>} */\n let stream;\n /** @type {Token | undefined} */\n let previous;\n let index = -1;\n /** @type {Token | undefined} */\n let current = token;\n let adjust = 0;\n let start = 0;\n const breaks = [start];\n\n // Loop forward through the linked tokens to pass them in order to the\n // subtokenizer.\n while (current) {\n // Find the position of the event for this token.\n while (events.get(++startPosition)[1] !== current) {\n // Empty.\n }\n startPositions.push(startPosition);\n if (!current._tokenizer) {\n stream = context.sliceStream(current);\n if (!current.next) {\n stream.push(null);\n }\n if (previous) {\n tokenizer.defineSkip(current.start);\n }\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = true;\n }\n tokenizer.write(stream);\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = undefined;\n }\n }\n\n // Unravel the next token.\n previous = current;\n current = current.next;\n }\n\n // Now, loop back through all events (and linked tokens), to figure out which\n // parts belong where.\n current = token;\n while (++index < childEvents.length) {\n if (\n // Find a void token that includes a break.\n childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) {\n start = index + 1;\n breaks.push(start);\n // Help GC.\n current._tokenizer = undefined;\n current.previous = undefined;\n current = current.next;\n }\n }\n\n // Help GC.\n tokenizer.events = [];\n\n // If there’s one more token (which is the cases for lines that end in an\n // EOF), that’s perfect: the last point we found starts it.\n // If there isn’t then make sure any remaining content is added to it.\n if (current) {\n // Help GC.\n current._tokenizer = undefined;\n current.previous = undefined;\n } else {\n breaks.pop();\n }\n\n // Now splice the events from the subtokenizer into the current events,\n // moving back to front so that splice indices aren’t affected.\n index = breaks.length;\n while (index--) {\n const slice = childEvents.slice(breaks[index], breaks[index + 1]);\n const start = startPositions.pop();\n jumps.push([start, start + slice.length - 1]);\n events.splice(start, 2, slice);\n }\n jumps.reverse();\n index = -1;\n while (++index < jumps.length) {\n gaps[adjust + jumps[index][0]] = adjust + jumps[index][1];\n adjust += jumps[index][1] - jumps[index][0] - 1;\n }\n return gaps;\n}","/**\n * @import {\n * Construct,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { subtokenize } from 'micromark-util-subtokenize';\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n resolve: resolveContent,\n tokenize: tokenizeContent\n};\n\n/** @type {Construct} */\nconst continuationConstruct = {\n partial: true,\n tokenize: tokenizeContinuation\n};\n\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n subtokenize(events);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n /** @type {Token | undefined} */\n let previous;\n return chunkStart;\n\n /**\n * Before a content chunk.\n *\n * ```markdown\n * > | abc\n * ^\n * ```\n *\n * @type {State}\n */\n function chunkStart(code) {\n effects.enter(\"content\");\n previous = effects.enter(\"chunkContent\", {\n contentType: \"content\"\n });\n return chunkInside(code);\n }\n\n /**\n * In a content chunk.\n *\n * ```markdown\n * > | abc\n * ^^^\n * ```\n *\n * @type {State}\n */\n function chunkInside(code) {\n if (code === null) {\n return contentEnd(code);\n }\n\n // To do: in `markdown-rs`, each line is parsed on its own, and everything\n // is stitched together resolving.\n if (markdownLineEnding(code)) {\n return effects.check(continuationConstruct, contentContinue, contentEnd)(code);\n }\n\n // Data.\n effects.consume(code);\n return chunkInside;\n }\n\n /**\n *\n *\n * @type {State}\n */\n function contentEnd(code) {\n effects.exit(\"chunkContent\");\n effects.exit(\"content\");\n return ok(code);\n }\n\n /**\n *\n *\n * @type {State}\n */\n function contentContinue(code) {\n effects.consume(code);\n effects.exit(\"chunkContent\");\n previous.next = effects.enter(\"chunkContent\", {\n contentType: \"content\",\n previous\n });\n previous = previous.next;\n return chunkInside;\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n const self = this;\n return startLookahead;\n\n /**\n *\n *\n * @type {State}\n */\n function startLookahead(code) {\n effects.exit(\"chunkContent\");\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return factorySpace(effects, prefixed, \"linePrefix\");\n }\n\n /**\n *\n *\n * @type {State}\n */\n function prefixed(code) {\n if (code === null || markdownLineEnding(code)) {\n return nok(code);\n }\n\n // Always populated by defaults.\n\n const tail = self.events[self.events.length - 1];\n if (!self.parser.constructs.disable.null.includes('codeIndented') && tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4) {\n return ok(code);\n }\n return effects.interrupt(self.parser.constructs.flow, nok, ok)(code);\n }\n}","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { asciiControl, markdownLineEndingOrSpace, markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * <a>\n * <a\\>b>\n * <a b>\n * <a)>\n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type for whole (`<a>` or `b`).\n * @param {TokenType} literalType\n * Type when enclosed (`<a>`).\n * @param {TokenType} literalMarkerType\n * Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n * Type when not enclosed (`b`).\n * @param {TokenType} stringType\n * Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n * Depth of nested parens (inclusive).\n * @returns {State}\n * Start state.\n */\nexport function factoryDestination(effects, ok, nok, type, literalType, literalMarkerType, rawType, stringType, max) {\n const limit = max || Number.POSITIVE_INFINITY;\n let balance = 0;\n return start;\n\n /**\n * Start of destination.\n *\n * ```markdown\n * > | <aa>\n * ^\n * > | aa\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (code === 60) {\n effects.enter(type);\n effects.enter(literalType);\n effects.enter(literalMarkerType);\n effects.consume(code);\n effects.exit(literalMarkerType);\n return enclosedBefore;\n }\n\n // ASCII control, space, closing paren.\n if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n return nok(code);\n }\n effects.enter(type);\n effects.enter(rawType);\n effects.enter(stringType);\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return raw(code);\n }\n\n /**\n * After `<`, at an enclosed destination.\n *\n * ```markdown\n * > | <aa>\n * ^\n * ```\n *\n * @type {State}\n */\n function enclosedBefore(code) {\n if (code === 62) {\n effects.enter(literalMarkerType);\n effects.consume(code);\n effects.exit(literalMarkerType);\n effects.exit(literalType);\n effects.exit(type);\n return ok;\n }\n effects.enter(stringType);\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return enclosed(code);\n }\n\n /**\n * In enclosed destination.\n *\n * ```markdown\n * > | <aa>\n * ^\n * ```\n *\n * @type {State}\n */\n function enclosed(code) {\n if (code === 62) {\n effects.exit(\"chunkString\");\n effects.exit(stringType);\n return enclosedBefore(code);\n }\n if (code === null || code === 60 || markdownLineEnding(code)) {\n return nok(code);\n }\n effects.consume(code);\n return code === 92 ? enclosedEscape : enclosed;\n }\n\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | <a\\*a>\n * ^\n * ```\n *\n * @type {State}\n */\n function enclosedEscape(code) {\n if (code === 60 || code === 62 || code === 92) {\n effects.consume(code);\n return enclosed;\n }\n return enclosed(code);\n }\n\n /**\n * In raw destination.\n *\n * ```markdown\n * > | aa\n * ^\n * ```\n *\n * @type {State}\n */\n function raw(code) {\n if (!balance && (code === null || code === 41 || markdownLineEndingOrSpace(code))) {\n effects.exit(\"chunkString\");\n effects.exit(stringType);\n effects.exit(rawType);\n effects.exit(type);\n return ok(code);\n }\n if (balance < limit && code === 40) {\n effects.consume(code);\n balance++;\n return raw;\n }\n if (code === 41) {\n effects.consume(code);\n balance--;\n return raw;\n }\n\n // ASCII control (but *not* `\\0`) and space and `(`.\n // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n // doesn’t.\n if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n return nok(code);\n }\n effects.consume(code);\n return code === 92 ? rawEscape : raw;\n }\n\n /**\n * After `\\`, at special character.\n *\n * ```markdown\n * > | a\\*a\n * ^\n * ```\n *\n * @type {State}\n */\n function rawEscape(code) {\n if (code === 40 || code === 41 || code === 92) {\n effects.consume(code);\n return raw;\n }\n return raw(code);\n }\n}","/**\n * @import {\n * Effects,\n * State,\n * TokenizeContext,\n * TokenType\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse labels.\n *\n * > 👉 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n * Tokenize context.\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n * Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n * Type for the identifier (`a`).\n * @returns {State}\n * Start state.\n */\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n const self = this;\n let size = 0;\n /** @type {boolean} */\n let seen;\n return start;\n\n /**\n * Start of label.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(type);\n effects.enter(markerType);\n effects.consume(code);\n effects.exit(markerType);\n effects.enter(stringType);\n return atBreak;\n }\n\n /**\n * In label, at something, before something else.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (size > 999 || code === null || code === 91 || code === 93 && !seen ||\n // To do: remove in the future once we’ve switched from\n // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n // which doesn’t need this.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n code === 94 && !size && '_hiddenFootnoteSupport' in self.parser.constructs) {\n return nok(code);\n }\n if (code === 93) {\n effects.exit(stringType);\n effects.enter(markerType);\n effects.consume(code);\n effects.exit(markerType);\n effects.exit(type);\n return ok;\n }\n\n // To do: indent? Link chunks and EOLs together?\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return atBreak;\n }\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return labelInside(code);\n }\n\n /**\n * In label, in text.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n function labelInside(code) {\n if (code === null || code === 91 || code === 93 || markdownLineEnding(code) || size++ > 999) {\n effects.exit(\"chunkString\");\n return atBreak(code);\n }\n effects.consume(code);\n if (!seen) seen = !markdownSpace(code);\n return code === 92 ? labelEscape : labelInside;\n }\n\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | [a\\*a]\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code);\n size++;\n return labelInside;\n }\n return labelInside(code);\n }\n}","/**\n * @import {\n * Code,\n * Effects,\n * State,\n * TokenType\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n * b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n * Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n * Type for the value (`a`).\n * @returns {State}\n * Start state.\n */\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n /** @type {NonNullable<Code>} */\n let marker;\n return start;\n\n /**\n * Start of title.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (code === 34 || code === 39 || code === 40) {\n effects.enter(type);\n effects.enter(markerType);\n effects.consume(code);\n effects.exit(markerType);\n marker = code === 40 ? 41 : code;\n return begin;\n }\n return nok(code);\n }\n\n /**\n * After opening marker.\n *\n * This is also used at the closing marker.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n function begin(code) {\n if (code === marker) {\n effects.enter(markerType);\n effects.consume(code);\n effects.exit(markerType);\n effects.exit(type);\n return ok;\n }\n effects.enter(stringType);\n return atBreak(code);\n }\n\n /**\n * At something, before something else.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === marker) {\n effects.exit(stringType);\n return begin(marker);\n }\n if (code === null) {\n return nok(code);\n }\n\n // Note: blank lines can’t exist in content.\n if (markdownLineEnding(code)) {\n // To do: use `space_or_tab_eol_with_options`, connect.\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return factorySpace(effects, atBreak, \"linePrefix\");\n }\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return inside(code);\n }\n\n /**\n *\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker || code === null || markdownLineEnding(code)) {\n effects.exit(\"chunkString\");\n return atBreak(code);\n }\n effects.consume(code);\n return code === 92 ? escape : inside;\n }\n\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | \"a\\*b\"\n * ^\n * ```\n *\n * @type {State}\n */\n function escape(code) {\n if (code === marker || code === 92) {\n effects.consume(code);\n return inside;\n }\n return inside(code);\n }\n}","/**\n * @import {Effects, State} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * * line endings or spaces in markdown are often optional, in which case this\n * factory can be used and `ok` will be switched to whether spaces were found\n * or not\n * * one line ending or space can be detected with\n * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @returns {State}\n * Start state.\n */\nexport function factoryWhitespace(effects, ok) {\n /** @type {boolean} */\n let seen;\n return start;\n\n /** @type {State} */\n function start(code) {\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n seen = true;\n return start;\n }\n if (markdownSpace(code)) {\n return factorySpace(effects, start, seen ? \"linePrefix\" : \"lineSuffix\")(code);\n }\n return ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factorySpace } from 'micromark-factory-space';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\n/** @type {Construct} */\nexport const definition = {\n name: 'definition',\n tokenize: tokenizeDefinition\n};\n\n/** @type {Construct} */\nconst titleBefore = {\n partial: true,\n tokenize: tokenizeTitleBefore\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n const self = this;\n /** @type {string} */\n let identifier;\n return start;\n\n /**\n * At start of a definition.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Do not interrupt paragraphs (but do follow definitions).\n // To do: do `interrupt` the way `markdown-rs` does.\n // To do: parse whitespace the way `markdown-rs` does.\n effects.enter(\"definition\");\n return before(code);\n }\n\n /**\n * After optional whitespace, at `[`.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n // To do: parse whitespace the way `markdown-rs` does.\n\n return factoryLabel.call(self, effects, labelAfter,\n // Note: we don’t need to reset the way `markdown-rs` does.\n nok, \"definitionLabel\", \"definitionLabelMarker\", \"definitionLabelString\")(code);\n }\n\n /**\n * After label.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAfter(code) {\n identifier = normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1));\n if (code === 58) {\n effects.enter(\"definitionMarker\");\n effects.consume(code);\n effects.exit(\"definitionMarker\");\n return markerAfter;\n }\n return nok(code);\n }\n\n /**\n * After marker.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function markerAfter(code) {\n // Note: whitespace is optional.\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, destinationBefore)(code) : destinationBefore(code);\n }\n\n /**\n * Before destination.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function destinationBefore(code) {\n return factoryDestination(effects, destinationAfter,\n // Note: we don’t need to reset the way `markdown-rs` does.\n nok, \"definitionDestination\", \"definitionDestinationLiteral\", \"definitionDestinationLiteralMarker\", \"definitionDestinationRaw\", \"definitionDestinationString\")(code);\n }\n\n /**\n * After destination.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function destinationAfter(code) {\n return effects.attempt(titleBefore, after, after)(code);\n }\n\n /**\n * After definition.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return markdownSpace(code) ? factorySpace(effects, afterWhitespace, \"whitespace\")(code) : afterWhitespace(code);\n }\n\n /**\n * After definition, after optional whitespace.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function afterWhitespace(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"definition\");\n\n // Note: we don’t care about uniqueness.\n // It’s likely that that doesn’t happen very frequently.\n // It is more likely that it wastes precious time.\n self.parser.defined.push(identifier);\n\n // To do: `markdown-rs` interrupt.\n // // You’d be interrupting.\n // tokenizer.interrupt = true\n return ok(code);\n }\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n return titleBefore;\n\n /**\n * After destination, at whitespace.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleBefore(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, beforeMarker)(code) : nok(code);\n }\n\n /**\n * At title.\n *\n * ```markdown\n * | [a]: b\n * > | \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeMarker(code) {\n return factoryTitle(effects, titleAfter, nok, \"definitionTitle\", \"definitionTitleMarker\", \"definitionTitleString\")(code);\n }\n\n /**\n * After title.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleAfter(code) {\n return markdownSpace(code) ? factorySpace(effects, titleAfterOptionalWhitespace, \"whitespace\")(code) : titleAfterOptionalWhitespace(code);\n }\n\n /**\n * After title, after optional whitespace.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleAfterOptionalWhitespace(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const hardBreakEscape = {\n name: 'hardBreakEscape',\n tokenize: tokenizeHardBreakEscape\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n return start;\n\n /**\n * Start of a hard break (escape).\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"hardBreakEscape\");\n effects.consume(code);\n return after;\n }\n\n /**\n * After `\\`, at eol.\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (markdownLineEnding(code)) {\n effects.exit(\"hardBreakEscape\");\n return ok(code);\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {Construct} */\nexport const headingAtx = {\n name: 'headingAtx',\n resolve: resolveHeadingAtx,\n tokenize: tokenizeHeadingAtx\n};\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n let contentEnd = events.length - 2;\n let contentStart = 3;\n /** @type {Token} */\n let content;\n /** @type {Token} */\n let text;\n\n // Prefix whitespace, part of the opening.\n if (events[contentStart][1].type === \"whitespace\") {\n contentStart += 2;\n }\n\n // Suffix whitespace, part of the closing.\n if (contentEnd - 2 > contentStart && events[contentEnd][1].type === \"whitespace\") {\n contentEnd -= 2;\n }\n if (events[contentEnd][1].type === \"atxHeadingSequence\" && (contentStart === contentEnd - 1 || contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === \"whitespace\")) {\n contentEnd -= contentStart + 1 === contentEnd ? 2 : 4;\n }\n if (contentEnd > contentStart) {\n content = {\n type: \"atxHeadingText\",\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end\n };\n text = {\n type: \"chunkText\",\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end,\n contentType: \"text\"\n };\n splice(events, contentStart, contentEnd - contentStart + 1, [['enter', content, context], ['enter', text, context], ['exit', text, context], ['exit', content, context]]);\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n let size = 0;\n return start;\n\n /**\n * Start of a heading (atx).\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse indent like `markdown-rs`.\n effects.enter(\"atxHeading\");\n return before(code);\n }\n\n /**\n * After optional whitespace, at `#`.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n effects.enter(\"atxHeadingSequence\");\n return sequenceOpen(code);\n }\n\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === 35 && size++ < 6) {\n effects.consume(code);\n return sequenceOpen;\n }\n\n // Always at least one `#`.\n if (code === null || markdownLineEndingOrSpace(code)) {\n effects.exit(\"atxHeadingSequence\");\n return atBreak(code);\n }\n return nok(code);\n }\n\n /**\n * After something, before something else.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === 35) {\n effects.enter(\"atxHeadingSequence\");\n return sequenceFurther(code);\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"atxHeading\");\n // To do: interrupt like `markdown-rs`.\n // // Feel free to interrupt.\n // tokenizer.interrupt = false\n return ok(code);\n }\n if (markdownSpace(code)) {\n return factorySpace(effects, atBreak, \"whitespace\")(code);\n }\n\n // To do: generate `data` tokens, add the `text` token later.\n // Needs edit map, see: `markdown.rs`.\n effects.enter(\"atxHeadingText\");\n return data(code);\n }\n\n /**\n * In further sequence (after whitespace).\n *\n * Could be normal “visible” hashes in the heading or a final sequence.\n *\n * ```markdown\n * > | ## aa ##\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceFurther(code) {\n if (code === 35) {\n effects.consume(code);\n return sequenceFurther;\n }\n effects.exit(\"atxHeadingSequence\");\n return atBreak(code);\n }\n\n /**\n * In text.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function data(code) {\n if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n effects.exit(\"atxHeadingText\");\n return atBreak(code);\n }\n effects.consume(code);\n return data;\n }\n}","/**\n * List of lowercase HTML “block” tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn’t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'search',\n 'section',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n]\n\n/**\n * List of lowercase HTML “raw” tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @import {\n * Code,\n * Construct,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { htmlBlockNames, htmlRawNames } from 'micromark-util-html-tag-name';\nimport { blankLine } from './blank-line.js';\n\n/** @type {Construct} */\nexport const htmlFlow = {\n concrete: true,\n name: 'htmlFlow',\n resolveTo: resolveToHtmlFlow,\n tokenize: tokenizeHtmlFlow\n};\n\n/** @type {Construct} */\nconst blankLineBefore = {\n partial: true,\n tokenize: tokenizeBlankLineBefore\n};\nconst nonLazyContinuationStart = {\n partial: true,\n tokenize: tokenizeNonLazyContinuationStart\n};\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n let index = events.length;\n while (index--) {\n if (events[index][0] === 'enter' && events[index][1].type === \"htmlFlow\") {\n break;\n }\n }\n if (index > 1 && events[index - 2][1].type === \"linePrefix\") {\n // Add the prefix start to the HTML token.\n events[index][1].start = events[index - 2][1].start;\n // Add the prefix start to the HTML line token.\n events[index + 1][1].start = events[index - 2][1].start;\n // Remove the line prefix.\n events.splice(index - 2, 2);\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n const self = this;\n /** @type {number} */\n let marker;\n /** @type {boolean} */\n let closingTag;\n /** @type {string} */\n let buffer;\n /** @type {number} */\n let index;\n /** @type {Code} */\n let markerB;\n return start;\n\n /**\n * Start of HTML (flow).\n *\n * ```markdown\n * > | <x />\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse indent like `markdown-rs`.\n return before(code);\n }\n\n /**\n * At `<`, after optional whitespace.\n *\n * ```markdown\n * > | <x />\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n effects.enter(\"htmlFlow\");\n effects.enter(\"htmlFlowData\");\n effects.consume(code);\n return open;\n }\n\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | <x />\n * ^\n * > | <!doctype>\n * ^\n * > | <!--xxx-->\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 33) {\n effects.consume(code);\n return declarationOpen;\n }\n if (code === 47) {\n effects.consume(code);\n closingTag = true;\n return tagCloseStart;\n }\n if (code === 63) {\n effects.consume(code);\n marker = 3;\n // To do:\n // tokenizer.concrete = true\n // To do: use `markdown-rs` style interrupt.\n // While we’re in an instruction instead of a declaration, we’re on a `?`\n // right now, so we do need to search for `>`, similar to declarations.\n return self.interrupt ? ok : continuationDeclarationInside;\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n // Always the case.\n effects.consume(code);\n buffer = String.fromCharCode(code);\n return tagName;\n }\n return nok(code);\n }\n\n /**\n * After `<!`, at declaration, comment, or CDATA.\n *\n * ```markdown\n * > | <!doctype>\n * ^\n * > | <!--xxx-->\n * ^\n * > | <![CDATA[>&<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code);\n marker = 2;\n return commentOpenInside;\n }\n if (code === 91) {\n effects.consume(code);\n marker = 5;\n index = 0;\n return cdataOpenInside;\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n marker = 4;\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuationDeclarationInside;\n }\n return nok(code);\n }\n\n /**\n * After `<!-`, inside a comment, at another `-`.\n *\n * ```markdown\n * > | <!--xxx-->\n * ^\n * ```\n *\n * @type {State}\n */\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code);\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuationDeclarationInside;\n }\n return nok(code);\n }\n\n /**\n * After `<![`, inside CDATA, expecting `CDATA[`.\n *\n * ```markdown\n * > | <![CDATA[>&<]]>\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function cdataOpenInside(code) {\n const value = \"CDATA[\";\n if (code === value.charCodeAt(index++)) {\n effects.consume(code);\n if (index === value.length) {\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuation;\n }\n return cdataOpenInside;\n }\n return nok(code);\n }\n\n /**\n * After `</`, in closing tag, at tag name.\n *\n * ```markdown\n * > | </x>\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseStart(code) {\n if (asciiAlpha(code)) {\n // Always the case.\n effects.consume(code);\n buffer = String.fromCharCode(code);\n return tagName;\n }\n return nok(code);\n }\n\n /**\n * In tag name.\n *\n * ```markdown\n * > | <ab>\n * ^^\n * > | </ab>\n * ^^\n * ```\n *\n * @type {State}\n */\n function tagName(code) {\n if (code === null || code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n const slash = code === 47;\n const name = buffer.toLowerCase();\n if (!slash && !closingTag && htmlRawNames.includes(name)) {\n marker = 1;\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok(code) : continuation(code);\n }\n if (htmlBlockNames.includes(buffer.toLowerCase())) {\n marker = 6;\n if (slash) {\n effects.consume(code);\n return basicSelfClosing;\n }\n\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok(code) : continuation(code);\n }\n marker = 7;\n // Do not support complete HTML when interrupting.\n return self.interrupt && !self.parser.lazy[self.now().line] ? nok(code) : closingTag ? completeClosingTagAfter(code) : completeAttributeNameBefore(code);\n }\n\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n buffer += String.fromCharCode(code);\n return tagName;\n }\n return nok(code);\n }\n\n /**\n * After closing slash of a basic tag name.\n *\n * ```markdown\n * > | <div/>\n * ^\n * ```\n *\n * @type {State}\n */\n function basicSelfClosing(code) {\n if (code === 62) {\n effects.consume(code);\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuation;\n }\n return nok(code);\n }\n\n /**\n * After closing slash of a complete tag name.\n *\n * ```markdown\n * > | <x/>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeClosingTagAfter(code) {\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeClosingTagAfter;\n }\n return completeEnd(code);\n }\n\n /**\n * At an attribute name.\n *\n * At first, this state is used after a complete tag name, after whitespace,\n * where it expects optional attributes or the end of the tag.\n * It is also reused after attributes, when expecting more optional\n * attributes.\n *\n * ```markdown\n * > | <a />\n * ^\n * > | <a :b>\n * ^\n * > | <a _b>\n * ^\n * > | <a b>\n * ^\n * > | <a >\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeNameBefore(code) {\n if (code === 47) {\n effects.consume(code);\n return completeEnd;\n }\n\n // ASCII alphanumerical and `:` and `_`.\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code);\n return completeAttributeName;\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeAttributeNameBefore;\n }\n return completeEnd(code);\n }\n\n /**\n * In attribute name.\n *\n * ```markdown\n * > | <a :b>\n * ^\n * > | <a _b>\n * ^\n * > | <a b>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeName(code) {\n // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return completeAttributeName;\n }\n return completeAttributeNameAfter(code);\n }\n\n /**\n * After attribute name, at an optional initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | <a b>\n * ^\n * > | <a b=c>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code);\n return completeAttributeValueBefore;\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeAttributeNameAfter;\n }\n return completeAttributeNameBefore(code);\n }\n\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | <a b=c>\n * ^\n * > | <a b=\"c\">\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueBefore(code) {\n if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n return nok(code);\n }\n if (code === 34 || code === 39) {\n effects.consume(code);\n markerB = code;\n return completeAttributeValueQuoted;\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeAttributeValueBefore;\n }\n return completeAttributeValueUnquoted(code);\n }\n\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | <a b=\"c\">\n * ^\n * > | <a b='c'>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueQuoted(code) {\n if (code === markerB) {\n effects.consume(code);\n markerB = null;\n return completeAttributeValueQuotedAfter;\n }\n if (code === null || markdownLineEnding(code)) {\n return nok(code);\n }\n effects.consume(code);\n return completeAttributeValueQuoted;\n }\n\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | <a b=c>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueUnquoted(code) {\n if (code === null || code === 34 || code === 39 || code === 47 || code === 60 || code === 61 || code === 62 || code === 96 || markdownLineEndingOrSpace(code)) {\n return completeAttributeNameAfter(code);\n }\n effects.consume(code);\n return completeAttributeValueUnquoted;\n }\n\n /**\n * After double or single quoted attribute value, before whitespace or the\n * end of the tag.\n *\n * ```markdown\n * > | <a b=\"c\">\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownSpace(code)) {\n return completeAttributeNameBefore(code);\n }\n return nok(code);\n }\n\n /**\n * In certain circumstances of a complete tag where only an `>` is allowed.\n *\n * ```markdown\n * > | <a b=\"c\">\n * ^\n * ```\n *\n * @type {State}\n */\n function completeEnd(code) {\n if (code === 62) {\n effects.consume(code);\n return completeAfter;\n }\n return nok(code);\n }\n\n /**\n * After `>` in a complete tag.\n *\n * ```markdown\n * > | <x>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n // // Do not form containers.\n // tokenizer.concrete = true\n return continuation(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeAfter;\n }\n return nok(code);\n }\n\n /**\n * In continuation of any HTML kind.\n *\n * ```markdown\n * > | <!--xxx-->\n * ^\n * ```\n *\n * @type {State}\n */\n function continuation(code) {\n if (code === 45 && marker === 2) {\n effects.consume(code);\n return continuationCommentInside;\n }\n if (code === 60 && marker === 1) {\n effects.consume(code);\n return continuationRawTagOpen;\n }\n if (code === 62 && marker === 4) {\n effects.consume(code);\n return continuationClose;\n }\n if (code === 63 && marker === 3) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n if (code === 93 && marker === 5) {\n effects.consume(code);\n return continuationCdataInside;\n }\n if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n effects.exit(\"htmlFlowData\");\n return effects.check(blankLineBefore, continuationAfter, continuationStart)(code);\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"htmlFlowData\");\n return continuationStart(code);\n }\n effects.consume(code);\n return continuation;\n }\n\n /**\n * In continuation, at eol.\n *\n * ```markdown\n * > | <x>\n * ^\n * | asd\n * ```\n *\n * @type {State}\n */\n function continuationStart(code) {\n return effects.check(nonLazyContinuationStart, continuationStartNonLazy, continuationAfter)(code);\n }\n\n /**\n * In continuation, at eol, before non-lazy content.\n *\n * ```markdown\n * > | <x>\n * ^\n * | asd\n * ```\n *\n * @type {State}\n */\n function continuationStartNonLazy(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return continuationBefore;\n }\n\n /**\n * In continuation, before non-lazy content.\n *\n * ```markdown\n * | <x>\n * > | asd\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n return continuationStart(code);\n }\n effects.enter(\"htmlFlowData\");\n return continuation(code);\n }\n\n /**\n * In comment continuation, after one `-`, expecting another.\n *\n * ```markdown\n * > | <!--xxx-->\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationCommentInside(code) {\n if (code === 45) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n return continuation(code);\n }\n\n /**\n * In raw continuation, after `<`, at `/`.\n *\n * ```markdown\n * > | <script>console.log(1)</script>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationRawTagOpen(code) {\n if (code === 47) {\n effects.consume(code);\n buffer = '';\n return continuationRawEndTag;\n }\n return continuation(code);\n }\n\n /**\n * In raw continuation, after `</`, in a raw tag name.\n *\n * ```markdown\n * > | <script>console.log(1)</script>\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function continuationRawEndTag(code) {\n if (code === 62) {\n const name = buffer.toLowerCase();\n if (htmlRawNames.includes(name)) {\n effects.consume(code);\n return continuationClose;\n }\n return continuation(code);\n }\n if (asciiAlpha(code) && buffer.length < 8) {\n // Always the case.\n effects.consume(code);\n buffer += String.fromCharCode(code);\n return continuationRawEndTag;\n }\n return continuation(code);\n }\n\n /**\n * In cdata continuation, after `]`, expecting `]>`.\n *\n * ```markdown\n * > | <![CDATA[>&<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationCdataInside(code) {\n if (code === 93) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n return continuation(code);\n }\n\n /**\n * In declaration or instruction continuation, at `>`.\n *\n * ```markdown\n * > | <!-->\n * ^\n * > | <?>\n * ^\n * > | <!q>\n * ^\n * > | <!--ab-->\n * ^\n * > | <![CDATA[>&<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationDeclarationInside(code) {\n if (code === 62) {\n effects.consume(code);\n return continuationClose;\n }\n\n // More dashes.\n if (code === 45 && marker === 2) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n return continuation(code);\n }\n\n /**\n * In closed continuation: everything we get until the eol/eof is part of it.\n *\n * ```markdown\n * > | <!doctype>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationClose(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"htmlFlowData\");\n return continuationAfter(code);\n }\n effects.consume(code);\n return continuationClose;\n }\n\n /**\n * Done.\n *\n * ```markdown\n * > | <!doctype>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationAfter(code) {\n effects.exit(\"htmlFlow\");\n // // Feel free to interrupt.\n // tokenizer.interrupt = false\n // // No longer concrete.\n // tokenizer.concrete = false\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * At eol, before continuation.\n *\n * ```markdown\n * > | * ```js\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return after;\n }\n return nok(code);\n }\n\n /**\n * A continuation.\n *\n * ```markdown\n * | * ```js\n * > | b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n return start;\n\n /**\n * Before eol, expecting blank line.\n *\n * ```markdown\n * > | <div>\n * ^\n * |\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return effects.attempt(blankLine, ok, nok);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n name: 'htmlText',\n tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n const self = this;\n /** @type {NonNullable<Code> | undefined} */\n let marker;\n /** @type {number} */\n let index;\n /** @type {State} */\n let returnState;\n return start;\n\n /**\n * Start of HTML (text).\n *\n * ```markdown\n * > | a <b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"htmlText\");\n effects.enter(\"htmlTextData\");\n effects.consume(code);\n return open;\n }\n\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | a <b> c\n * ^\n * > | a <!doctype> c\n * ^\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 33) {\n effects.consume(code);\n return declarationOpen;\n }\n if (code === 47) {\n effects.consume(code);\n return tagCloseStart;\n }\n if (code === 63) {\n effects.consume(code);\n return instruction;\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagOpen;\n }\n return nok(code);\n }\n\n /**\n * After `<!`, at declaration, comment, or CDATA.\n *\n * ```markdown\n * > | a <!doctype> c\n * ^\n * > | a <!--b--> c\n * ^\n * > | a <![CDATA[>&<]]> c\n * ^\n * ```\n *\n * @type {State}\n */\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code);\n return commentOpenInside;\n }\n if (code === 91) {\n effects.consume(code);\n index = 0;\n return cdataOpenInside;\n }\n if (asciiAlpha(code)) {\n effects.consume(code);\n return declaration;\n }\n return nok(code);\n }\n\n /**\n * In a comment, after `<!-`, at another `-`.\n *\n * ```markdown\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n return nok(code);\n }\n\n /**\n * In comment.\n *\n * ```markdown\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function comment(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 45) {\n effects.consume(code);\n return commentClose;\n }\n if (markdownLineEnding(code)) {\n returnState = comment;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return comment;\n }\n\n /**\n * In comment, after `-`.\n *\n * ```markdown\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentClose(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n return comment(code);\n }\n\n /**\n * In comment, after `--`.\n *\n * ```markdown\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentEnd(code) {\n return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n }\n\n /**\n * After `<![`, in CDATA, expecting `CDATA[`.\n *\n * ```markdown\n * > | a <![CDATA[>&<]]> b\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function cdataOpenInside(code) {\n const value = \"CDATA[\";\n if (code === value.charCodeAt(index++)) {\n effects.consume(code);\n return index === value.length ? cdata : cdataOpenInside;\n }\n return nok(code);\n }\n\n /**\n * In CDATA.\n *\n * ```markdown\n * > | a <![CDATA[>&<]]> b\n * ^^^\n * ```\n *\n * @type {State}\n */\n function cdata(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 93) {\n effects.consume(code);\n return cdataClose;\n }\n if (markdownLineEnding(code)) {\n returnState = cdata;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return cdata;\n }\n\n /**\n * In CDATA, after `]`, at another `]`.\n *\n * ```markdown\n * > | a <![CDATA[>&<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataClose(code) {\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n return cdata(code);\n }\n\n /**\n * In CDATA, after `]]`, at `>`.\n *\n * ```markdown\n * > | a <![CDATA[>&<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataEnd(code) {\n if (code === 62) {\n return end(code);\n }\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n return cdata(code);\n }\n\n /**\n * In declaration.\n *\n * ```markdown\n * > | a <!b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function declaration(code) {\n if (code === null || code === 62) {\n return end(code);\n }\n if (markdownLineEnding(code)) {\n returnState = declaration;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return declaration;\n }\n\n /**\n * In instruction.\n *\n * ```markdown\n * > | a <?b?> c\n * ^\n * ```\n *\n * @type {State}\n */\n function instruction(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 63) {\n effects.consume(code);\n return instructionClose;\n }\n if (markdownLineEnding(code)) {\n returnState = instruction;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return instruction;\n }\n\n /**\n * In instruction, after `?`, at `>`.\n *\n * ```markdown\n * > | a <?b?> c\n * ^\n * ```\n *\n * @type {State}\n */\n function instructionClose(code) {\n return code === 62 ? end(code) : instruction(code);\n }\n\n /**\n * After `</`, in closing tag, at tag name.\n *\n * ```markdown\n * > | a </b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseStart(code) {\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagClose;\n }\n return nok(code);\n }\n\n /**\n * After `</x`, in a tag name.\n *\n * ```markdown\n * > | a </b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagClose(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagClose;\n }\n return tagCloseBetween(code);\n }\n\n /**\n * In closing tag, after tag name.\n *\n * ```markdown\n * > | a </b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseBetween(code) {\n if (markdownLineEnding(code)) {\n returnState = tagCloseBetween;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagCloseBetween;\n }\n return end(code);\n }\n\n /**\n * After `<x`, in opening tag name.\n *\n * ```markdown\n * > | a <b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpen(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpen;\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n return nok(code);\n }\n\n /**\n * In opening tag, after tag name.\n *\n * ```markdown\n * > | a <b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenBetween(code) {\n if (code === 47) {\n effects.consume(code);\n return end;\n }\n\n // ASCII alphabetical and `:` and `_`.\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenBetween;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenBetween;\n }\n return end(code);\n }\n\n /**\n * In attribute name.\n *\n * ```markdown\n * > | a <b c> d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeName(code) {\n // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n return tagOpenAttributeNameAfter(code);\n }\n\n /**\n * After attribute name, before initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | a <b c> d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeNameAfter;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeNameAfter;\n }\n return tagOpenBetween(code);\n }\n\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | a <b c=d> e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueBefore(code) {\n if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n return nok(code);\n }\n if (code === 34 || code === 39) {\n effects.consume(code);\n marker = code;\n return tagOpenAttributeValueQuoted;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueBefore;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | a <b c=\"d\"> e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuoted(code) {\n if (code === marker) {\n effects.consume(code);\n marker = undefined;\n return tagOpenAttributeValueQuotedAfter;\n }\n if (code === null) {\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueQuoted;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return tagOpenAttributeValueQuoted;\n }\n\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | a <b c=d> e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueUnquoted(code) {\n if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n return nok(code);\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n\n /**\n * After double or single quoted attribute value, before whitespace or the end\n * of the tag.\n *\n * ```markdown\n * > | a <b c=\"d\"> e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n return nok(code);\n }\n\n /**\n * In certain circumstances of a tag where only an `>` is allowed.\n *\n * ```markdown\n * > | a <b c=\"d\"> e\n * ^\n * ```\n *\n * @type {State}\n */\n function end(code) {\n if (code === 62) {\n effects.consume(code);\n effects.exit(\"htmlTextData\");\n effects.exit(\"htmlText\");\n return ok;\n }\n return nok(code);\n }\n\n /**\n * At eol.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * > | a <!--a\n * ^\n * | b-->\n * ```\n *\n * @type {State}\n */\n function lineEndingBefore(code) {\n effects.exit(\"htmlTextData\");\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return lineEndingAfter;\n }\n\n /**\n * After eol, at optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a <!--a\n * > | b-->\n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfter(code) {\n // Always populated by defaults.\n\n return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n }\n\n /**\n * After eol, after optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a <!--a\n * > | b-->\n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfterPrefix(code) {\n effects.enter(\"htmlTextData\");\n return returnState(code);\n }\n}","/**\n * @import {\n * Construct,\n * Event,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const labelEnd = {\n name: 'labelEnd',\n resolveAll: resolveAllLabelEnd,\n resolveTo: resolveToLabelEnd,\n tokenize: tokenizeLabelEnd\n};\n\n/** @type {Construct} */\nconst resourceConstruct = {\n tokenize: tokenizeResource\n};\n/** @type {Construct} */\nconst referenceFullConstruct = {\n tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n tokenize: tokenizeReferenceCollapsed\n};\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n let index = -1;\n /** @type {Array<Event>} */\n const newEvents = [];\n while (++index < events.length) {\n const token = events[index][1];\n newEvents.push(events[index]);\n if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n // Remove the marker.\n const offset = token.type === \"labelImage\" ? 4 : 2;\n token.type = \"data\";\n index += offset;\n }\n }\n\n // If the events are equal, we don't have to copy newEvents to events\n if (events.length !== newEvents.length) {\n splice(events, 0, events.length, newEvents);\n }\n return events;\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n let index = events.length;\n let offset = 0;\n /** @type {Token} */\n let token;\n /** @type {number | undefined} */\n let open;\n /** @type {number | undefined} */\n let close;\n /** @type {Array<Event>} */\n let media;\n\n // Find an opening.\n while (index--) {\n token = events[index][1];\n if (open) {\n // If we see another link, or inactive link label, we’ve been here before.\n if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n break;\n }\n\n // Mark other link openings as inactive, as we can’t have links in\n // links.\n if (events[index][0] === 'enter' && token.type === \"labelLink\") {\n token._inactive = true;\n }\n } else if (close) {\n if (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\n open = index;\n if (token.type !== \"labelLink\") {\n offset = 2;\n break;\n }\n }\n } else if (token.type === \"labelEnd\") {\n close = index;\n }\n }\n const group = {\n type: events[open][1].type === \"labelLink\" ? \"link\" : \"image\",\n start: {\n ...events[open][1].start\n },\n end: {\n ...events[events.length - 1][1].end\n }\n };\n const label = {\n type: \"label\",\n start: {\n ...events[open][1].start\n },\n end: {\n ...events[close][1].end\n }\n };\n const text = {\n type: \"labelText\",\n start: {\n ...events[open + offset + 2][1].end\n },\n end: {\n ...events[close - 2][1].start\n }\n };\n media = [['enter', group, context], ['enter', label, context]];\n\n // Opening marker.\n media = push(media, events.slice(open + 1, open + offset + 3));\n\n // Text open.\n media = push(media, [['enter', text, context]]);\n\n // Always populated by defaults.\n\n // Between.\n media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n // Text close, marker close, label close.\n media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\n\n // Reference, resource, or so.\n media = push(media, events.slice(close + 1));\n\n // Media close.\n media = push(media, [['exit', group, context]]);\n splice(events, open, events.length, media);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n const self = this;\n let index = self.events.length;\n /** @type {Token} */\n let labelStart;\n /** @type {boolean} */\n let defined;\n\n // Find an opening.\n while (index--) {\n if ((self.events[index][1].type === \"labelImage\" || self.events[index][1].type === \"labelLink\") && !self.events[index][1]._balanced) {\n labelStart = self.events[index][1];\n break;\n }\n }\n return start;\n\n /**\n * Start of label end.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // If there is not an okay opening.\n if (!labelStart) {\n return nok(code);\n }\n\n // If the corresponding label (link) start is marked as inactive,\n // it means we’d be wrapping a link, like this:\n //\n // ```markdown\n // > | a [b [c](d) e](f) g.\n // ^\n // ```\n //\n // We can’t have that, so it’s just balanced brackets.\n if (labelStart._inactive) {\n return labelEndNok(code);\n }\n defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })));\n effects.enter(\"labelEnd\");\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelEnd\");\n return after;\n }\n\n /**\n * After `]`.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n // an extension.\n\n // Resource (`[asd](fgh)`)?\n if (code === 40) {\n return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n }\n\n // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n if (code === 91) {\n return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n }\n\n // Shortcut (`[asd]`) reference?\n return defined ? labelEndOk(code) : labelEndNok(code);\n }\n\n /**\n * After `]`, at `[`, but not at a full reference.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceNotFull(code) {\n return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n }\n\n /**\n * Done, we found something.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndOk(code) {\n // Note: `markdown-rs` does a bunch of stuff here.\n return ok(code);\n }\n\n /**\n * Done, it’s nothing.\n *\n * There was an okay opening, but we didn’t match anything.\n *\n * ```markdown\n * > | [a](b c\n * ^\n * > | [a][b c\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndNok(code) {\n labelStart._balanced = true;\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n return resourceStart;\n\n /**\n * At a resource.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceStart(code) {\n effects.enter(\"resource\");\n effects.enter(\"resourceMarker\");\n effects.consume(code);\n effects.exit(\"resourceMarker\");\n return resourceBefore;\n }\n\n /**\n * In resource, after `(`, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBefore(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n }\n\n /**\n * In resource, after optional whitespace, at `)` or a destination.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceOpen(code) {\n if (code === 41) {\n return resourceEnd(code);\n }\n return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(code);\n }\n\n /**\n * In resource, after destination, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n }\n\n /**\n * At invalid destination.\n *\n * ```markdown\n * > | [a](<<) b\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationMissing(code) {\n return nok(code);\n }\n\n /**\n * In resource, after destination and whitespace, at `(` or title.\n *\n * ```markdown\n * > | [a](b ) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBetween(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(code);\n }\n return resourceEnd(code);\n }\n\n /**\n * In resource, after title, at optional whitespace.\n *\n * ```markdown\n * > | [a](b \"c\") d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceTitleAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n }\n\n /**\n * In resource, at `)`.\n *\n * ```markdown\n * > | [a](b) d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceEnd(code) {\n if (code === 41) {\n effects.enter(\"resourceMarker\");\n effects.consume(code);\n effects.exit(\"resourceMarker\");\n effects.exit(\"resource\");\n return ok;\n }\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n const self = this;\n return referenceFull;\n\n /**\n * In a reference (full), at the `[`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFull(code) {\n return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(code);\n }\n\n /**\n * In a reference (full), after `]`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullAfter(code) {\n return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n }\n\n /**\n * In reference (full) that was missing.\n *\n * ```markdown\n * > | [a][b d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullMissing(code) {\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n return referenceCollapsedStart;\n\n /**\n * In reference (collapsed), at `[`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedStart(code) {\n // We only attempt a collapsed label if there’s a `[`.\n\n effects.enter(\"reference\");\n effects.enter(\"referenceMarker\");\n effects.consume(code);\n effects.exit(\"referenceMarker\");\n return referenceCollapsedOpen;\n }\n\n /**\n * In reference (collapsed), at `]`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedOpen(code) {\n if (code === 93) {\n effects.enter(\"referenceMarker\");\n effects.consume(code);\n effects.exit(\"referenceMarker\");\n effects.exit(\"reference\");\n return ok;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n name: 'labelStartImage',\n resolveAll: labelEnd.resolveAll,\n tokenize: tokenizeLabelStartImage\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of label (image) start.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"labelImage\");\n effects.enter(\"labelImageMarker\");\n effects.consume(code);\n effects.exit(\"labelImageMarker\");\n return open;\n }\n\n /**\n * After `!`, at `[`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 91) {\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelImage\");\n return after;\n }\n return nok(code);\n }\n\n /**\n * After `![`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * This is needed in because, when GFM footnotes are enabled, images never\n * form when started with a `^`.\n * Instead, links form:\n *\n * ```markdown\n * ![^a](b)\n *\n * ![^a][b]\n *\n * [b]: c\n * ```\n *\n * ```html\n * <p>!<a href=\\\"b\\\">^a</a></p>\n * <p>!<a href=\\\"c\\\">^a</a></p>\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // To do: use a new field to do this, this is still needed for\n // `micromark-extension-gfm-footnote`, but the `label-start-link`\n // behavior isn’t.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n name: 'labelStartLink',\n resolveAll: labelEnd.resolveAll,\n tokenize: tokenizeLabelStartLink\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of label (link) start.\n *\n * ```markdown\n * > | a [b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"labelLink\");\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelLink\");\n return after;\n }\n\n /** @type {State} */\n function after(code) {\n // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n // remove.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const lineEnding = {\n name: 'lineEnding',\n tokenize: tokenizeLineEnding\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n return start;\n\n /** @type {State} */\n function start(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return factorySpace(effects, ok, \"linePrefix\");\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const thematicBreak = {\n name: 'thematicBreak',\n tokenize: tokenizeThematicBreak\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n let size = 0;\n /** @type {NonNullable<Code>} */\n let marker;\n return start;\n\n /**\n * Start of thematic break.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"thematicBreak\");\n // To do: parse indent like `markdown-rs`.\n return before(code);\n }\n\n /**\n * After optional whitespace, at marker.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n marker = code;\n return atBreak(code);\n }\n\n /**\n * After something, before something else.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === marker) {\n effects.enter(\"thematicBreakSequence\");\n return sequence(code);\n }\n if (size >= 3 && (code === null || markdownLineEnding(code))) {\n effects.exit(\"thematicBreak\");\n return ok(code);\n }\n return nok(code);\n }\n\n /**\n * In sequence.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function sequence(code) {\n if (code === marker) {\n effects.consume(code);\n size++;\n return sequence;\n }\n effects.exit(\"thematicBreakSequence\");\n return markdownSpace(code) ? factorySpace(effects, atBreak, \"whitespace\")(code) : atBreak(code);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * Exiter,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiDigit, markdownSpace } from 'micromark-util-character';\nimport { blankLine } from './blank-line.js';\nimport { thematicBreak } from './thematic-break.js';\n\n/** @type {Construct} */\nexport const list = {\n continuation: {\n tokenize: tokenizeListContinuation\n },\n exit: tokenizeListEnd,\n name: 'list',\n tokenize: tokenizeListStart\n};\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n partial: true,\n tokenize: tokenizeListItemPrefixWhitespace\n};\n\n/** @type {Construct} */\nconst indentConstruct = {\n partial: true,\n tokenize: tokenizeIndent\n};\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n const self = this;\n const tail = self.events[self.events.length - 1];\n let initialSize = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n let size = 0;\n return start;\n\n /** @type {State} */\n function start(code) {\n const kind = self.containerState.type || (code === 42 || code === 43 || code === 45 ? \"listUnordered\" : \"listOrdered\");\n if (kind === \"listUnordered\" ? !self.containerState.marker || code === self.containerState.marker : asciiDigit(code)) {\n if (!self.containerState.type) {\n self.containerState.type = kind;\n effects.enter(kind, {\n _container: true\n });\n }\n if (kind === \"listUnordered\") {\n effects.enter(\"listItemPrefix\");\n return code === 42 || code === 45 ? effects.check(thematicBreak, nok, atMarker)(code) : atMarker(code);\n }\n if (!self.interrupt || code === 49) {\n effects.enter(\"listItemPrefix\");\n effects.enter(\"listItemValue\");\n return inside(code);\n }\n }\n return nok(code);\n }\n\n /** @type {State} */\n function inside(code) {\n if (asciiDigit(code) && ++size < 10) {\n effects.consume(code);\n return inside;\n }\n if ((!self.interrupt || size < 2) && (self.containerState.marker ? code === self.containerState.marker : code === 41 || code === 46)) {\n effects.exit(\"listItemValue\");\n return atMarker(code);\n }\n return nok(code);\n }\n\n /**\n * @type {State}\n **/\n function atMarker(code) {\n effects.enter(\"listItemMarker\");\n effects.consume(code);\n effects.exit(\"listItemMarker\");\n self.containerState.marker = self.containerState.marker || code;\n return effects.check(blankLine,\n // Can’t be empty when interrupting.\n self.interrupt ? nok : onBlank, effects.attempt(listItemPrefixWhitespaceConstruct, endOfPrefix, otherPrefix));\n }\n\n /** @type {State} */\n function onBlank(code) {\n self.containerState.initialBlankLine = true;\n initialSize++;\n return endOfPrefix(code);\n }\n\n /** @type {State} */\n function otherPrefix(code) {\n if (markdownSpace(code)) {\n effects.enter(\"listItemPrefixWhitespace\");\n effects.consume(code);\n effects.exit(\"listItemPrefixWhitespace\");\n return endOfPrefix;\n }\n return nok(code);\n }\n\n /** @type {State} */\n function endOfPrefix(code) {\n self.containerState.size = initialSize + self.sliceSerialize(effects.exit(\"listItemPrefix\"), true).length;\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n const self = this;\n self.containerState._closeFlow = undefined;\n return effects.check(blankLine, onBlank, notBlank);\n\n /** @type {State} */\n function onBlank(code) {\n self.containerState.furtherBlankLines = self.containerState.furtherBlankLines || self.containerState.initialBlankLine;\n\n // We have a blank line.\n // Still, try to consume at most the items size.\n return factorySpace(effects, ok, \"listItemIndent\", self.containerState.size + 1)(code);\n }\n\n /** @type {State} */\n function notBlank(code) {\n if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n self.containerState.furtherBlankLines = undefined;\n self.containerState.initialBlankLine = undefined;\n return notInCurrentItem(code);\n }\n self.containerState.furtherBlankLines = undefined;\n self.containerState.initialBlankLine = undefined;\n return effects.attempt(indentConstruct, ok, notInCurrentItem)(code);\n }\n\n /** @type {State} */\n function notInCurrentItem(code) {\n // While we do continue, we signal that the flow should be closed.\n self.containerState._closeFlow = true;\n // As we’re closing flow, we’re no longer interrupting.\n self.interrupt = undefined;\n // Always populated by defaults.\n\n return factorySpace(effects, effects.attempt(list, ok, nok), \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this;\n return factorySpace(effects, afterPrefix, \"listItemIndent\", self.containerState.size + 1);\n\n /** @type {State} */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === \"listItemIndent\" && tail[2].sliceSerialize(tail[1], true).length === self.containerState.size ? ok(code) : nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Exiter}\n */\nfunction tokenizeListEnd(effects) {\n effects.exit(this.containerState.type);\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n const self = this;\n\n // Always populated by defaults.\n\n return factorySpace(effects, afterPrefix, \"listItemPrefixWhitespace\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + 1);\n\n /** @type {State} */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return !markdownSpace(code) && tail && tail[1].type === \"listItemPrefixWhitespace\" ? ok(code) : nok(code);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const setextUnderline = {\n name: 'setextUnderline',\n resolveTo: resolveToSetextUnderline,\n tokenize: tokenizeSetextUnderline\n};\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n // To do: resolve like `markdown-rs`.\n let index = events.length;\n /** @type {number | undefined} */\n let content;\n /** @type {number | undefined} */\n let text;\n /** @type {number | undefined} */\n let definition;\n\n // Find the opening of the content.\n // It’ll always exist: we don’t tokenize if it isn’t there.\n while (index--) {\n if (events[index][0] === 'enter') {\n if (events[index][1].type === \"content\") {\n content = index;\n break;\n }\n if (events[index][1].type === \"paragraph\") {\n text = index;\n }\n }\n // Exit\n else {\n if (events[index][1].type === \"content\") {\n // Remove the content end (if needed we’ll add it later)\n events.splice(index, 1);\n }\n if (!definition && events[index][1].type === \"definition\") {\n definition = index;\n }\n }\n }\n const heading = {\n type: \"setextHeading\",\n start: {\n ...events[content][1].start\n },\n end: {\n ...events[events.length - 1][1].end\n }\n };\n\n // Change the paragraph to setext heading text.\n events[text][1].type = \"setextHeadingText\";\n\n // If we have definitions in the content, we’ll keep on having content,\n // but we need move it.\n if (definition) {\n events.splice(text, 0, ['enter', heading, context]);\n events.splice(definition + 1, 0, ['exit', events[content][1], context]);\n events[content][1].end = {\n ...events[definition][1].end\n };\n } else {\n events[content][1] = heading;\n }\n\n // Add the heading exit at the end.\n events.push(['exit', heading, context]);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n const self = this;\n /** @type {NonNullable<Code>} */\n let marker;\n return start;\n\n /**\n * At start of heading (setext) underline.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n let index = self.events.length;\n /** @type {boolean | undefined} */\n let paragraph;\n // Find an opening.\n while (index--) {\n // Skip enter/exit of line ending, line prefix, and content.\n // We can now either have a definition or a paragraph.\n if (self.events[index][1].type !== \"lineEnding\" && self.events[index][1].type !== \"linePrefix\" && self.events[index][1].type !== \"content\") {\n paragraph = self.events[index][1].type === \"paragraph\";\n break;\n }\n }\n\n // To do: handle lazy/pierce like `markdown-rs`.\n // To do: parse indent like `markdown-rs`.\n if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n effects.enter(\"setextHeadingLine\");\n marker = code;\n return before(code);\n }\n return nok(code);\n }\n\n /**\n * After optional whitespace, at `-` or `=`.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n effects.enter(\"setextHeadingLineSequence\");\n return inside(code);\n }\n\n /**\n * In sequence.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker) {\n effects.consume(code);\n return inside;\n }\n effects.exit(\"setextHeadingLineSequence\");\n return markdownSpace(code) ? factorySpace(effects, after, \"lineSuffix\")(code) : after(code);\n }\n\n /**\n * After sequence, after optional whitespace.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"setextHeadingLine\");\n return ok(code);\n }\n return nok(code);\n }\n}","/**\n * @import {\n * InitialConstruct,\n * Initializer,\n * State,\n * TokenizeContext\n * } from 'micromark-util-types'\n */\n\nimport { blankLine, content } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const flow = {\n tokenize: initializeFlow\n};\n\n/**\n * @this {TokenizeContext}\n * Self.\n * @type {Initializer}\n * Initializer.\n */\nfunction initializeFlow(effects) {\n const self = this;\n const initial = effects.attempt(\n // Try to parse a blank line.\n blankLine, atBlankEnding,\n // Try to parse initial flow (essentially, only code).\n effects.attempt(this.parser.constructs.flowInitial, afterConstruct, factorySpace(effects, effects.attempt(this.parser.constructs.flow, afterConstruct, effects.attempt(content, afterConstruct)), \"linePrefix\")));\n return initial;\n\n /** @type {State} */\n function atBlankEnding(code) {\n if (code === null) {\n effects.consume(code);\n return;\n }\n effects.enter(\"lineEndingBlank\");\n effects.consume(code);\n effects.exit(\"lineEndingBlank\");\n self.currentConstruct = undefined;\n return initial;\n }\n\n /** @type {State} */\n function afterConstruct(code) {\n if (code === null) {\n effects.consume(code);\n return;\n }\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n self.currentConstruct = undefined;\n return initial;\n }\n}","/**\n * @import {\n * Code,\n * InitialConstruct,\n * Initializer,\n * Resolver,\n * State,\n * TokenizeContext\n * } from 'micromark-util-types'\n */\n\nexport const resolver = {\n resolveAll: createResolver()\n};\nexport const string = initializeFactory('string');\nexport const text = initializeFactory('text');\n\n/**\n * @param {'string' | 'text'} field\n * Field.\n * @returns {InitialConstruct}\n * Construct.\n */\nfunction initializeFactory(field) {\n return {\n resolveAll: createResolver(field === 'text' ? resolveAllLineSuffixes : undefined),\n tokenize: initializeText\n };\n\n /**\n * @this {TokenizeContext}\n * Context.\n * @type {Initializer}\n */\n function initializeText(effects) {\n const self = this;\n const constructs = this.parser.constructs[field];\n const text = effects.attempt(constructs, start, notText);\n return start;\n\n /** @type {State} */\n function start(code) {\n return atBreak(code) ? text(code) : notText(code);\n }\n\n /** @type {State} */\n function notText(code) {\n if (code === null) {\n effects.consume(code);\n return;\n }\n effects.enter(\"data\");\n effects.consume(code);\n return data;\n }\n\n /** @type {State} */\n function data(code) {\n if (atBreak(code)) {\n effects.exit(\"data\");\n return text(code);\n }\n\n // Data.\n effects.consume(code);\n return data;\n }\n\n /**\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether the code is a break.\n */\n function atBreak(code) {\n if (code === null) {\n return true;\n }\n const list = constructs[code];\n let index = -1;\n if (list) {\n // Always populated by defaults.\n\n while (++index < list.length) {\n const item = list[index];\n if (!item.previous || item.previous.call(self, self.previous)) {\n return true;\n }\n }\n }\n return false;\n }\n }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n * Resolver.\n * @returns {Resolver}\n * Resolver.\n */\nfunction createResolver(extraResolver) {\n return resolveAllText;\n\n /** @type {Resolver} */\n function resolveAllText(events, context) {\n let index = -1;\n /** @type {number | undefined} */\n let enter;\n\n // A rather boring computation (to merge adjacent `data` events) which\n // improves mm performance by 29%.\n while (++index <= events.length) {\n if (enter === undefined) {\n if (events[index] && events[index][1].type === \"data\") {\n enter = index;\n index++;\n }\n } else if (!events[index] || events[index][1].type !== \"data\") {\n // Don’t do anything if there is one data token.\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end;\n events.splice(enter + 2, index - enter - 2);\n index = enter + 2;\n }\n enter = undefined;\n }\n }\n return extraResolver ? extraResolver(events, context) : events;\n }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n let eventIndex = 0; // Skip first.\n\n while (++eventIndex <= events.length) {\n if ((eventIndex === events.length || events[eventIndex][1].type === \"lineEnding\") && events[eventIndex - 1][1].type === \"data\") {\n const data = events[eventIndex - 1][1];\n const chunks = context.sliceStream(data);\n let index = chunks.length;\n let bufferIndex = -1;\n let size = 0;\n /** @type {boolean | undefined} */\n let tabs;\n while (index--) {\n const chunk = chunks[index];\n if (typeof chunk === 'string') {\n bufferIndex = chunk.length;\n while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n size++;\n bufferIndex--;\n }\n if (bufferIndex) break;\n bufferIndex = -1;\n }\n // Number\n else if (chunk === -2) {\n tabs = true;\n size++;\n } else if (chunk === -1) {\n // Empty\n } else {\n // Replacement character, exit.\n index++;\n break;\n }\n }\n\n // Allow final trailing whitespace.\n if (context._contentTypeTextTrailing && eventIndex === events.length) {\n size = 0;\n }\n if (size) {\n const token = {\n type: eventIndex === events.length || tabs || size < 2 ? \"lineSuffix\" : \"hardBreakTrailing\",\n start: {\n _bufferIndex: index ? bufferIndex : data.start._bufferIndex + bufferIndex,\n _index: data.start._index + index,\n line: data.end.line,\n column: data.end.column - size,\n offset: data.end.offset - size\n },\n end: {\n ...data.end\n }\n };\n data.end = {\n ...token.start\n };\n if (data.start.offset === data.end.offset) {\n Object.assign(data, token);\n } else {\n events.splice(eventIndex, 0, ['enter', token, context], ['exit', token, context]);\n eventIndex += 2;\n }\n }\n eventIndex++;\n }\n }\n return events;\n}","/**\n * @import {Extension} from 'micromark-util-types'\n */\n\nimport { attention, autolink, blockQuote, characterEscape, characterReference, codeFenced, codeIndented, codeText, definition, hardBreakEscape, headingAtx, htmlFlow, htmlText, labelEnd, labelStartImage, labelStartLink, lineEnding, list, setextUnderline, thematicBreak } from 'micromark-core-commonmark';\nimport { resolver as resolveText } from './initialize/text.js';\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n [42]: list,\n [43]: list,\n [45]: list,\n [48]: list,\n [49]: list,\n [50]: list,\n [51]: list,\n [52]: list,\n [53]: list,\n [54]: list,\n [55]: list,\n [56]: list,\n [57]: list,\n [62]: blockQuote\n};\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n [91]: definition\n};\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n [-2]: codeIndented,\n [-1]: codeIndented,\n [32]: codeIndented\n};\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n [35]: headingAtx,\n [42]: thematicBreak,\n [45]: [setextUnderline, thematicBreak],\n [60]: htmlFlow,\n [61]: setextUnderline,\n [95]: thematicBreak,\n [96]: codeFenced,\n [126]: codeFenced\n};\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n [38]: characterReference,\n [92]: characterEscape\n};\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n [-5]: lineEnding,\n [-4]: lineEnding,\n [-3]: lineEnding,\n [33]: labelStartImage,\n [38]: characterReference,\n [42]: attention,\n [60]: [autolink, htmlText],\n [91]: labelStartLink,\n [92]: [hardBreakEscape, characterEscape],\n [93]: labelEnd,\n [95]: attention,\n [96]: codeText\n};\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n null: [attention, resolveText]\n};\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n null: [42, 95]\n};\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n null: []\n};","/**\n * @import {\n * Chunk,\n * Code,\n * ConstructRecord,\n * Construct,\n * Effects,\n * InitialConstruct,\n * ParseContext,\n * Point,\n * State,\n * TokenizeContext,\n * Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @callback Restore\n * Restore the state.\n * @returns {undefined}\n * Nothing.\n *\n * @typedef Info\n * Info.\n * @property {Restore} restore\n * Restore.\n * @property {number} from\n * From.\n *\n * @callback ReturnHandle\n * Handle a successful run.\n * @param {Construct} construct\n * Construct.\n * @param {Info} info\n * Info.\n * @returns {undefined}\n * Nothing.\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * Parser.\n * @param {InitialConstruct} initialize\n * Construct.\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n * Point (optional).\n * @returns {TokenizeContext}\n * Context.\n */\nexport function createTokenizer(parser, initialize, from) {\n /** @type {Point} */\n let point = {\n _bufferIndex: -1,\n _index: 0,\n line: from && from.line || 1,\n column: from && from.column || 1,\n offset: from && from.offset || 0\n };\n /** @type {Record<string, number>} */\n const columnStart = {};\n /** @type {Array<Construct>} */\n const resolveAllConstructs = [];\n /** @type {Array<Chunk>} */\n let chunks = [];\n /** @type {Array<Token>} */\n let stack = [];\n /** @type {boolean | undefined} */\n let consumed = true;\n\n /**\n * Tools used for tokenizing.\n *\n * @type {Effects}\n */\n const effects = {\n attempt: constructFactory(onsuccessfulconstruct),\n check: constructFactory(onsuccessfulcheck),\n consume,\n enter,\n exit,\n interrupt: constructFactory(onsuccessfulcheck, {\n interrupt: true\n })\n };\n\n /**\n * State and tools for resolving and serializing.\n *\n * @type {TokenizeContext}\n */\n const context = {\n code: null,\n containerState: {},\n defineSkip,\n events: [],\n now,\n parser,\n previous: null,\n sliceSerialize,\n sliceStream,\n write\n };\n\n /**\n * The state function.\n *\n * @type {State | undefined}\n */\n let state = initialize.tokenize.call(context, effects);\n\n /**\n * Track which character we expect to be consumed, to catch bugs.\n *\n * @type {Code}\n */\n let expectedCode;\n if (initialize.resolveAll) {\n resolveAllConstructs.push(initialize);\n }\n return context;\n\n /** @type {TokenizeContext['write']} */\n function write(slice) {\n chunks = push(chunks, slice);\n main();\n\n // Exit if we’re not done, resolve might change stuff.\n if (chunks[chunks.length - 1] !== null) {\n return [];\n }\n addResult(initialize, 0);\n\n // Otherwise, resolve, and exit.\n context.events = resolveAll(resolveAllConstructs, context.events, context);\n return context.events;\n }\n\n //\n // Tools.\n //\n\n /** @type {TokenizeContext['sliceSerialize']} */\n function sliceSerialize(token, expandTabs) {\n return serializeChunks(sliceStream(token), expandTabs);\n }\n\n /** @type {TokenizeContext['sliceStream']} */\n function sliceStream(token) {\n return sliceChunks(chunks, token);\n }\n\n /** @type {TokenizeContext['now']} */\n function now() {\n // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n const {\n _bufferIndex,\n _index,\n line,\n column,\n offset\n } = point;\n return {\n _bufferIndex,\n _index,\n line,\n column,\n offset\n };\n }\n\n /** @type {TokenizeContext['defineSkip']} */\n function defineSkip(value) {\n columnStart[value.line] = value.column;\n accountForPotentialSkip();\n }\n\n //\n // State management.\n //\n\n /**\n * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n * `consume`).\n * Here is where we walk through the chunks, which either include strings of\n * several characters, or numerical character codes.\n * The reason to do this in a loop instead of a call is so the stack can\n * drain.\n *\n * @returns {undefined}\n * Nothing.\n */\n function main() {\n /** @type {number} */\n let chunkIndex;\n while (point._index < chunks.length) {\n const chunk = chunks[point._index];\n\n // If we’re in a buffer chunk, loop through it.\n if (typeof chunk === 'string') {\n chunkIndex = point._index;\n if (point._bufferIndex < 0) {\n point._bufferIndex = 0;\n }\n while (point._index === chunkIndex && point._bufferIndex < chunk.length) {\n go(chunk.charCodeAt(point._bufferIndex));\n }\n } else {\n go(chunk);\n }\n }\n }\n\n /**\n * Deal with one code.\n *\n * @param {Code} code\n * Code.\n * @returns {undefined}\n * Nothing.\n */\n function go(code) {\n consumed = undefined;\n expectedCode = code;\n state = state(code);\n }\n\n /** @type {Effects['consume']} */\n function consume(code) {\n if (markdownLineEnding(code)) {\n point.line++;\n point.column = 1;\n point.offset += code === -3 ? 2 : 1;\n accountForPotentialSkip();\n } else if (code !== -1) {\n point.column++;\n point.offset++;\n }\n\n // Not in a string chunk.\n if (point._bufferIndex < 0) {\n point._index++;\n } else {\n point._bufferIndex++;\n\n // At end of string chunk.\n if (point._bufferIndex ===\n // Points w/ non-negative `_bufferIndex` reference\n // strings.\n /** @type {string} */\n chunks[point._index].length) {\n point._bufferIndex = -1;\n point._index++;\n }\n }\n\n // Expose the previous character.\n context.previous = code;\n\n // Mark as consumed.\n consumed = true;\n }\n\n /** @type {Effects['enter']} */\n function enter(type, fields) {\n /** @type {Token} */\n // @ts-expect-error Patch instead of assign required fields to help GC.\n const token = fields || {};\n token.type = type;\n token.start = now();\n context.events.push(['enter', token, context]);\n stack.push(token);\n return token;\n }\n\n /** @type {Effects['exit']} */\n function exit(type) {\n const token = stack.pop();\n token.end = now();\n context.events.push(['exit', token, context]);\n return token;\n }\n\n /**\n * Use results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulconstruct(construct, info) {\n addResult(construct, info.from);\n }\n\n /**\n * Discard results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulcheck(_, info) {\n info.restore();\n }\n\n /**\n * Factory to attempt/check/interrupt.\n *\n * @param {ReturnHandle} onreturn\n * Callback.\n * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n * Fields.\n */\n function constructFactory(onreturn, fields) {\n return hook;\n\n /**\n * Handle either an object mapping codes to constructs, a list of\n * constructs, or a single construct.\n *\n * @param {Array<Construct> | ConstructRecord | Construct} constructs\n * Constructs.\n * @param {State} returnState\n * State.\n * @param {State | undefined} [bogusState]\n * State.\n * @returns {State}\n * State.\n */\n function hook(constructs, returnState, bogusState) {\n /** @type {ReadonlyArray<Construct>} */\n let listOfConstructs;\n /** @type {number} */\n let constructIndex;\n /** @type {Construct} */\n let currentConstruct;\n /** @type {Info} */\n let info;\n return Array.isArray(constructs) ? /* c8 ignore next 1 */\n handleListOfConstructs(constructs) : 'tokenize' in constructs ?\n // Looks like a construct.\n handleListOfConstructs([(/** @type {Construct} */constructs)]) : handleMapOfConstructs(constructs);\n\n /**\n * Handle a list of construct.\n *\n * @param {ConstructRecord} map\n * Constructs.\n * @returns {State}\n * State.\n */\n function handleMapOfConstructs(map) {\n return start;\n\n /** @type {State} */\n function start(code) {\n const left = code !== null && map[code];\n const all = code !== null && map.null;\n const list = [\n // To do: add more extension tests.\n /* c8 ignore next 2 */\n ...(Array.isArray(left) ? left : left ? [left] : []), ...(Array.isArray(all) ? all : all ? [all] : [])];\n return handleListOfConstructs(list)(code);\n }\n }\n\n /**\n * Handle a list of construct.\n *\n * @param {ReadonlyArray<Construct>} list\n * Constructs.\n * @returns {State}\n * State.\n */\n function handleListOfConstructs(list) {\n listOfConstructs = list;\n constructIndex = 0;\n if (list.length === 0) {\n return bogusState;\n }\n return handleConstruct(list[constructIndex]);\n }\n\n /**\n * Handle a single construct.\n *\n * @param {Construct} construct\n * Construct.\n * @returns {State}\n * State.\n */\n function handleConstruct(construct) {\n return start;\n\n /** @type {State} */\n function start(code) {\n // To do: not needed to store if there is no bogus state, probably?\n // Currently doesn’t work because `inspect` in document does a check\n // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n // by not storing.\n info = store();\n currentConstruct = construct;\n if (!construct.partial) {\n context.currentConstruct = construct;\n }\n\n // Always populated by defaults.\n\n if (construct.name && context.parser.constructs.disable.null.includes(construct.name)) {\n return nok(code);\n }\n return construct.tokenize.call(\n // If we do have fields, create an object w/ `context` as its\n // prototype.\n // This allows a “live binding”, which is needed for `interrupt`.\n fields ? Object.assign(Object.create(context), fields) : context, effects, ok, nok)(code);\n }\n }\n\n /** @type {State} */\n function ok(code) {\n consumed = true;\n onreturn(currentConstruct, info);\n return returnState;\n }\n\n /** @type {State} */\n function nok(code) {\n consumed = true;\n info.restore();\n if (++constructIndex < listOfConstructs.length) {\n return handleConstruct(listOfConstructs[constructIndex]);\n }\n return bogusState;\n }\n }\n }\n\n /**\n * @param {Construct} construct\n * Construct.\n * @param {number} from\n * From.\n * @returns {undefined}\n * Nothing.\n */\n function addResult(construct, from) {\n if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n resolveAllConstructs.push(construct);\n }\n if (construct.resolve) {\n splice(context.events, from, context.events.length - from, construct.resolve(context.events.slice(from), context));\n }\n if (construct.resolveTo) {\n context.events = construct.resolveTo(context.events, context);\n }\n }\n\n /**\n * Store state.\n *\n * @returns {Info}\n * Info.\n */\n function store() {\n const startPoint = now();\n const startPrevious = context.previous;\n const startCurrentConstruct = context.currentConstruct;\n const startEventsIndex = context.events.length;\n const startStack = Array.from(stack);\n return {\n from: startEventsIndex,\n restore\n };\n\n /**\n * Restore state.\n *\n * @returns {undefined}\n * Nothing.\n */\n function restore() {\n point = startPoint;\n context.previous = startPrevious;\n context.currentConstruct = startCurrentConstruct;\n context.events.length = startEventsIndex;\n stack = startStack;\n accountForPotentialSkip();\n }\n }\n\n /**\n * Move the current point a bit forward in the line when it’s on a column\n * skip.\n *\n * @returns {undefined}\n * Nothing.\n */\n function accountForPotentialSkip() {\n if (point.line in columnStart && point.column < 2) {\n point.column = columnStart[point.line];\n point.offset += columnStart[point.line] - 1;\n }\n }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n * Chunks.\n * @param {Pick<Token, 'end' | 'start'>} token\n * Token.\n * @returns {Array<Chunk>}\n * Chunks.\n */\nfunction sliceChunks(chunks, token) {\n const startIndex = token.start._index;\n const startBufferIndex = token.start._bufferIndex;\n const endIndex = token.end._index;\n const endBufferIndex = token.end._bufferIndex;\n /** @type {Array<Chunk>} */\n let view;\n if (startIndex === endIndex) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)];\n } else {\n view = chunks.slice(startIndex, endIndex);\n if (startBufferIndex > -1) {\n const head = view[0];\n if (typeof head === 'string') {\n view[0] = head.slice(startBufferIndex);\n /* c8 ignore next 4 -- used to be used, no longer */\n } else {\n view.shift();\n }\n }\n if (endBufferIndex > 0) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view.push(chunks[endIndex].slice(0, endBufferIndex));\n }\n }\n return view;\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n * Chunks.\n * @param {boolean | undefined} [expandTabs=false]\n * Whether to expand tabs (default: `false`).\n * @returns {string}\n * Result.\n */\nfunction serializeChunks(chunks, expandTabs) {\n let index = -1;\n /** @type {Array<string>} */\n const result = [];\n /** @type {boolean | undefined} */\n let atTab;\n while (++index < chunks.length) {\n const chunk = chunks[index];\n /** @type {string} */\n let value;\n if (typeof chunk === 'string') {\n value = chunk;\n } else switch (chunk) {\n case -5:\n {\n value = \"\\r\";\n break;\n }\n case -4:\n {\n value = \"\\n\";\n break;\n }\n case -3:\n {\n value = \"\\r\" + \"\\n\";\n break;\n }\n case -2:\n {\n value = expandTabs ? \" \" : \"\\t\";\n break;\n }\n case -1:\n {\n if (!expandTabs && atTab) continue;\n value = \" \";\n break;\n }\n default:\n {\n // Currently only replacement character.\n value = String.fromCharCode(chunk);\n }\n }\n atTab = chunk === -2;\n result.push(value);\n }\n return result.join('');\n}","/**\n * @import {\n * Create,\n * FullNormalizedExtension,\n * InitialConstruct,\n * ParseContext,\n * ParseOptions\n * } from 'micromark-util-types'\n */\n\nimport { combineExtensions } from 'micromark-util-combine-extensions';\nimport { content } from './initialize/content.js';\nimport { document } from './initialize/document.js';\nimport { flow } from './initialize/flow.js';\nimport { string, text } from './initialize/text.js';\nimport * as defaultConstructs from './constructs.js';\nimport { createTokenizer } from './create-tokenizer.js';\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n * Configuration (optional).\n * @returns {ParseContext}\n * Parser.\n */\nexport function parse(options) {\n const settings = options || {};\n const constructs = /** @type {FullNormalizedExtension} */\n combineExtensions([defaultConstructs, ...(settings.extensions || [])]);\n\n /** @type {ParseContext} */\n const parser = {\n constructs,\n content: create(content),\n defined: [],\n document: create(document),\n flow: create(flow),\n lazy: {},\n string: create(string),\n text: create(text)\n };\n return parser;\n\n /**\n * @param {InitialConstruct} initial\n * Construct to start with.\n * @returns {Create}\n * Create a tokenizer.\n */\n function create(initial) {\n return creator;\n /** @type {Create} */\n function creator(from) {\n return createTokenizer(parser, initial, from);\n }\n }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\nimport { subtokenize } from 'micromark-util-subtokenize';\n\n/**\n * @param {Array<Event>} events\n * Events.\n * @returns {Array<Event>}\n * Events.\n */\nexport function postprocess(events) {\n while (!subtokenize(events)) {\n // Empty\n }\n return events;\n}","/**\n * @import {Chunk, Code, Encoding, Value} from 'micromark-util-types'\n */\n\n/**\n * @callback Preprocessor\n * Preprocess a value.\n * @param {Value} value\n * Value.\n * @param {Encoding | null | undefined} [encoding]\n * Encoding when `value` is a typed array (optional).\n * @param {boolean | null | undefined} [end=false]\n * Whether this is the last chunk (default: `false`).\n * @returns {Array<Chunk>}\n * Chunks.\n */\n\nconst search = /[\\0\\t\\n\\r]/g;\n\n/**\n * @returns {Preprocessor}\n * Preprocess a value.\n */\nexport function preprocess() {\n let column = 1;\n let buffer = '';\n /** @type {boolean | undefined} */\n let start = true;\n /** @type {boolean | undefined} */\n let atCarriageReturn;\n return preprocessor;\n\n /** @type {Preprocessor} */\n // eslint-disable-next-line complexity\n function preprocessor(value, encoding, end) {\n /** @type {Array<Chunk>} */\n const chunks = [];\n /** @type {RegExpMatchArray | null} */\n let match;\n /** @type {number} */\n let next;\n /** @type {number} */\n let startPosition;\n /** @type {number} */\n let endPosition;\n /** @type {Code} */\n let code;\n value = buffer + (typeof value === 'string' ? value.toString() : new TextDecoder(encoding || undefined).decode(value));\n startPosition = 0;\n buffer = '';\n if (start) {\n // To do: `markdown-rs` actually parses BOMs (byte order mark).\n if (value.charCodeAt(0) === 65279) {\n startPosition++;\n }\n start = undefined;\n }\n while (startPosition < value.length) {\n search.lastIndex = startPosition;\n match = search.exec(value);\n endPosition = match && match.index !== undefined ? match.index : value.length;\n code = value.charCodeAt(endPosition);\n if (!match) {\n buffer = value.slice(startPosition);\n break;\n }\n if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n chunks.push(-3);\n atCarriageReturn = undefined;\n } else {\n if (atCarriageReturn) {\n chunks.push(-5);\n atCarriageReturn = undefined;\n }\n if (startPosition < endPosition) {\n chunks.push(value.slice(startPosition, endPosition));\n column += endPosition - startPosition;\n }\n switch (code) {\n case 0:\n {\n chunks.push(65533);\n column++;\n break;\n }\n case 9:\n {\n next = Math.ceil(column / 4) * 4;\n chunks.push(-2);\n while (column++ < next) chunks.push(-1);\n break;\n }\n case 10:\n {\n chunks.push(-4);\n column = 1;\n break;\n }\n default:\n {\n atCarriageReturn = true;\n column = 1;\n }\n }\n }\n startPosition = endPosition + 1;\n }\n if (end) {\n if (atCarriageReturn) chunks.push(-5);\n if (buffer) chunks.push(buffer);\n chunks.push(null);\n }\n return chunks;\n }\n}","import { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nconst characterEscapeOrReference = /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n * Value to decode.\n * @returns {string}\n * Decoded value.\n */\nexport function decodeString(value) {\n return value.replace(characterEscapeOrReference, decode);\n}\n\n/**\n * @param {string} $0\n * Match.\n * @param {string} $1\n * Character escape.\n * @param {string} $2\n * Character reference.\n * @returns {string}\n * Decoded value\n */\nfunction decode($0, $1, $2) {\n if ($1) {\n // Escape.\n return $1;\n }\n\n // Reference.\n const head = $2.charCodeAt(0);\n if (head === 35) {\n const head = $2.charCodeAt(1);\n const hex = head === 120 || head === 88;\n return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10);\n }\n return decodeNamedCharacterReference($2) || $0;\n}","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n * Node, position, or point.\n * @returns {string}\n * Pretty printed positional info of a node (`string`).\n *\n * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n * or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n * column, `s` for `start`, and `e` for end.\n * An empty string (`''`) is returned if the given value is neither `node`,\n * `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if ('position' in value || 'type' in value) {\n return position(value.position)\n }\n\n // Position.\n if ('start' in value || 'end' in value) {\n return position(value)\n }\n\n // Point.\n if ('line' in value || 'column' in value) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @import {\n * Break,\n * Blockquote,\n * Code,\n * Definition,\n * Emphasis,\n * Heading,\n * Html,\n * Image,\n * InlineCode,\n * Link,\n * ListItem,\n * List,\n * Nodes,\n * Paragraph,\n * PhrasingContent,\n * ReferenceType,\n * Root,\n * Strong,\n * Text,\n * ThematicBreak\n * } from 'mdast'\n * @import {\n * Encoding,\n * Event,\n * Token,\n * Value\n * } from 'micromark-util-types'\n * @import {Point} from 'unist'\n * @import {\n * CompileContext,\n * CompileData,\n * Config,\n * Extension,\n * Handle,\n * OnEnterError,\n * Options\n * } from './types.js'\n */\n\nimport { toString } from 'mdast-util-to-string';\nimport { parse, postprocess, preprocess } from 'micromark';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nimport { decodeString } from 'micromark-util-decode-string';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { stringifyPosition } from 'unist-util-stringify-position';\nconst own = {}.hasOwnProperty;\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n * Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n * Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {Root}\n * mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n if (typeof encoding !== 'string') {\n options = encoding;\n encoding = undefined;\n }\n return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n /** @type {Config} */\n const config = {\n transforms: [],\n canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n enter: {\n autolink: opener(link),\n autolinkProtocol: onenterdata,\n autolinkEmail: onenterdata,\n atxHeading: opener(heading),\n blockQuote: opener(blockQuote),\n characterEscape: onenterdata,\n characterReference: onenterdata,\n codeFenced: opener(codeFlow),\n codeFencedFenceInfo: buffer,\n codeFencedFenceMeta: buffer,\n codeIndented: opener(codeFlow, buffer),\n codeText: opener(codeText, buffer),\n codeTextData: onenterdata,\n data: onenterdata,\n codeFlowValue: onenterdata,\n definition: opener(definition),\n definitionDestinationString: buffer,\n definitionLabelString: buffer,\n definitionTitleString: buffer,\n emphasis: opener(emphasis),\n hardBreakEscape: opener(hardBreak),\n hardBreakTrailing: opener(hardBreak),\n htmlFlow: opener(html, buffer),\n htmlFlowData: onenterdata,\n htmlText: opener(html, buffer),\n htmlTextData: onenterdata,\n image: opener(image),\n label: buffer,\n link: opener(link),\n listItem: opener(listItem),\n listItemValue: onenterlistitemvalue,\n listOrdered: opener(list, onenterlistordered),\n listUnordered: opener(list),\n paragraph: opener(paragraph),\n reference: onenterreference,\n referenceString: buffer,\n resourceDestinationString: buffer,\n resourceTitleString: buffer,\n setextHeading: opener(heading),\n strong: opener(strong),\n thematicBreak: opener(thematicBreak)\n },\n exit: {\n atxHeading: closer(),\n atxHeadingSequence: onexitatxheadingsequence,\n autolink: closer(),\n autolinkEmail: onexitautolinkemail,\n autolinkProtocol: onexitautolinkprotocol,\n blockQuote: closer(),\n characterEscapeValue: onexitdata,\n characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n characterReferenceValue: onexitcharacterreferencevalue,\n characterReference: onexitcharacterreference,\n codeFenced: closer(onexitcodefenced),\n codeFencedFence: onexitcodefencedfence,\n codeFencedFenceInfo: onexitcodefencedfenceinfo,\n codeFencedFenceMeta: onexitcodefencedfencemeta,\n codeFlowValue: onexitdata,\n codeIndented: closer(onexitcodeindented),\n codeText: closer(onexitcodetext),\n codeTextData: onexitdata,\n data: onexitdata,\n definition: closer(),\n definitionDestinationString: onexitdefinitiondestinationstring,\n definitionLabelString: onexitdefinitionlabelstring,\n definitionTitleString: onexitdefinitiontitlestring,\n emphasis: closer(),\n hardBreakEscape: closer(onexithardbreak),\n hardBreakTrailing: closer(onexithardbreak),\n htmlFlow: closer(onexithtmlflow),\n htmlFlowData: onexitdata,\n htmlText: closer(onexithtmltext),\n htmlTextData: onexitdata,\n image: closer(onexitimage),\n label: onexitlabel,\n labelText: onexitlabeltext,\n lineEnding: onexitlineending,\n link: closer(onexitlink),\n listItem: closer(),\n listOrdered: closer(),\n listUnordered: closer(),\n paragraph: closer(),\n referenceString: onexitreferencestring,\n resourceDestinationString: onexitresourcedestinationstring,\n resourceTitleString: onexitresourcetitlestring,\n resource: onexitresource,\n setextHeading: closer(onexitsetextheading),\n setextHeadingLineSequence: onexitsetextheadinglinesequence,\n setextHeadingText: onexitsetextheadingtext,\n strong: closer(),\n thematicBreak: closer()\n }\n };\n configure(config, (options || {}).mdastExtensions || []);\n\n /** @type {CompileData} */\n const data = {};\n return compile;\n\n /**\n * Turn micromark events into an mdast tree.\n *\n * @param {Array<Event>} events\n * Events.\n * @returns {Root}\n * mdast tree.\n */\n function compile(events) {\n /** @type {Root} */\n let tree = {\n type: 'root',\n children: []\n };\n /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n const context = {\n stack: [tree],\n tokenStack: [],\n config,\n enter,\n exit,\n buffer,\n resume,\n data\n };\n /** @type {Array<number>} */\n const listStack = [];\n let index = -1;\n while (++index < events.length) {\n // We preprocess lists to add `listItem` tokens, and to infer whether\n // items the list itself are spread out.\n if (events[index][1].type === \"listOrdered\" || events[index][1].type === \"listUnordered\") {\n if (events[index][0] === 'enter') {\n listStack.push(index);\n } else {\n const tail = listStack.pop();\n index = prepareList(events, tail, index);\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n const handler = config[events[index][0]];\n if (own.call(handler, events[index][1].type)) {\n handler[events[index][1].type].call(Object.assign({\n sliceSerialize: events[index][2].sliceSerialize\n }, context), events[index][1]);\n }\n }\n\n // Handle tokens still being open.\n if (context.tokenStack.length > 0) {\n const tail = context.tokenStack[context.tokenStack.length - 1];\n const handler = tail[1] || defaultOnError;\n handler.call(context, undefined, tail[0]);\n }\n\n // Figure out `root` position.\n tree.position = {\n start: point(events.length > 0 ? events[0][1].start : {\n line: 1,\n column: 1,\n offset: 0\n }),\n end: point(events.length > 0 ? events[events.length - 2][1].end : {\n line: 1,\n column: 1,\n offset: 0\n })\n };\n\n // Call transforms.\n index = -1;\n while (++index < config.transforms.length) {\n tree = config.transforms[index](tree) || tree;\n }\n return tree;\n }\n\n /**\n * @param {Array<Event>} events\n * @param {number} start\n * @param {number} length\n * @returns {number}\n */\n function prepareList(events, start, length) {\n let index = start - 1;\n let containerBalance = -1;\n let listSpread = false;\n /** @type {Token | undefined} */\n let listItem;\n /** @type {number | undefined} */\n let lineIndex;\n /** @type {number | undefined} */\n let firstBlankLineIndex;\n /** @type {boolean | undefined} */\n let atMarker;\n while (++index <= length) {\n const event = events[index];\n switch (event[1].type) {\n case \"listUnordered\":\n case \"listOrdered\":\n case \"blockQuote\":\n {\n if (event[0] === 'enter') {\n containerBalance++;\n } else {\n containerBalance--;\n }\n atMarker = undefined;\n break;\n }\n case \"lineEndingBlank\":\n {\n if (event[0] === 'enter') {\n if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n firstBlankLineIndex = index;\n }\n atMarker = undefined;\n }\n break;\n }\n case \"linePrefix\":\n case \"listItemValue\":\n case \"listItemMarker\":\n case \"listItemPrefix\":\n case \"listItemPrefixWhitespace\":\n {\n // Empty.\n\n break;\n }\n default:\n {\n atMarker = undefined;\n }\n }\n if (!containerBalance && event[0] === 'enter' && event[1].type === \"listItemPrefix\" || containerBalance === -1 && event[0] === 'exit' && (event[1].type === \"listUnordered\" || event[1].type === \"listOrdered\")) {\n if (listItem) {\n let tailIndex = index;\n lineIndex = undefined;\n while (tailIndex--) {\n const tailEvent = events[tailIndex];\n if (tailEvent[1].type === \"lineEnding\" || tailEvent[1].type === \"lineEndingBlank\") {\n if (tailEvent[0] === 'exit') continue;\n if (lineIndex) {\n events[lineIndex][1].type = \"lineEndingBlank\";\n listSpread = true;\n }\n tailEvent[1].type = \"lineEnding\";\n lineIndex = tailIndex;\n } else if (tailEvent[1].type === \"linePrefix\" || tailEvent[1].type === \"blockQuotePrefix\" || tailEvent[1].type === \"blockQuotePrefixWhitespace\" || tailEvent[1].type === \"blockQuoteMarker\" || tailEvent[1].type === \"listItemIndent\") {\n // Empty\n } else {\n break;\n }\n }\n if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n listItem._spread = true;\n }\n\n // Fix position.\n listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\n events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]);\n index++;\n length++;\n }\n\n // Create a new list item.\n if (event[1].type === \"listItemPrefix\") {\n /** @type {Token} */\n const item = {\n type: 'listItem',\n _spread: false,\n start: Object.assign({}, event[1].start),\n // @ts-expect-error: we’ll add `end` in a second.\n end: undefined\n };\n listItem = item;\n events.splice(index, 0, ['enter', item, event[2]]);\n index++;\n length++;\n firstBlankLineIndex = undefined;\n atMarker = true;\n }\n }\n }\n events[start][1]._spread = listSpread;\n return length;\n }\n\n /**\n * Create an opener handle.\n *\n * @param {(token: Token) => Nodes} create\n * Create a node.\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function opener(create, and) {\n return open;\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function open(token) {\n enter.call(this, create(token), token);\n if (and) and.call(this, token);\n }\n }\n\n /**\n * @type {CompileContext['buffer']}\n */\n function buffer() {\n this.stack.push({\n type: 'fragment',\n children: []\n });\n }\n\n /**\n * @type {CompileContext['enter']}\n */\n function enter(node, token, errorHandler) {\n const parent = this.stack[this.stack.length - 1];\n /** @type {Array<Nodes>} */\n const siblings = parent.children;\n siblings.push(node);\n this.stack.push(node);\n this.tokenStack.push([token, errorHandler || undefined]);\n node.position = {\n start: point(token.start),\n // @ts-expect-error: `end` will be patched later.\n end: undefined\n };\n }\n\n /**\n * Create a closer handle.\n *\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function closer(and) {\n return close;\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function close(token) {\n if (and) and.call(this, token);\n exit.call(this, token);\n }\n }\n\n /**\n * @type {CompileContext['exit']}\n */\n function exit(token, onExitError) {\n const node = this.stack.pop();\n const open = this.tokenStack.pop();\n if (!open) {\n throw new Error('Cannot close `' + token.type + '` (' + stringifyPosition({\n start: token.start,\n end: token.end\n }) + '): it’s not open');\n } else if (open[0].type !== token.type) {\n if (onExitError) {\n onExitError.call(this, token, open[0]);\n } else {\n const handler = open[1] || defaultOnError;\n handler.call(this, token, open[0]);\n }\n }\n node.position.end = point(token.end);\n }\n\n /**\n * @type {CompileContext['resume']}\n */\n function resume() {\n return toString(this.stack.pop());\n }\n\n //\n // Handlers.\n //\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistordered() {\n this.data.expectingFirstListItemValue = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistitemvalue(token) {\n if (this.data.expectingFirstListItemValue) {\n const ancestor = this.stack[this.stack.length - 2];\n ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n this.data.expectingFirstListItemValue = undefined;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfenceinfo() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.lang = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfencemeta() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.meta = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfence() {\n // Exit if this is the closing fence.\n if (this.data.flowCodeInside) return;\n this.buffer();\n this.data.flowCodeInside = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefenced() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '');\n this.data.flowCodeInside = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodeindented() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data.replace(/(\\r?\\n|\\r)$/g, '');\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitionlabelstring(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.label = label;\n node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiontitlestring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.title = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiondestinationstring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.url = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitatxheadingsequence(token) {\n const node = this.stack[this.stack.length - 1];\n if (!node.depth) {\n const depth = this.sliceSerialize(token).length;\n node.depth = depth;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadingtext() {\n this.data.setextHeadingSlurpLineEnding = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadinglinesequence(token) {\n const node = this.stack[this.stack.length - 1];\n node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheading() {\n this.data.setextHeadingSlurpLineEnding = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterdata(token) {\n const node = this.stack[this.stack.length - 1];\n /** @type {Array<Nodes>} */\n const siblings = node.children;\n let tail = siblings[siblings.length - 1];\n if (!tail || tail.type !== 'text') {\n // Add a new text node.\n tail = text();\n tail.position = {\n start: point(token.start),\n // @ts-expect-error: we’ll add `end` later.\n end: undefined\n };\n siblings.push(tail);\n }\n this.stack.push(tail);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitdata(token) {\n const tail = this.stack.pop();\n tail.value += this.sliceSerialize(token);\n tail.position.end = point(token.end);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlineending(token) {\n const context = this.stack[this.stack.length - 1];\n // If we’re at a hard break, include the line ending in there.\n if (this.data.atHardBreak) {\n const tail = context.children[context.children.length - 1];\n tail.position.end = point(token.end);\n this.data.atHardBreak = undefined;\n return;\n }\n if (!this.data.setextHeadingSlurpLineEnding && config.canContainEols.includes(context.type)) {\n onenterdata.call(this, token);\n onexitdata.call(this, token);\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithardbreak() {\n this.data.atHardBreak = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmlflow() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmltext() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcodetext() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlink() {\n const node = this.stack[this.stack.length - 1];\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut';\n node.type += 'Reference';\n // @ts-expect-error: mutate.\n node.referenceType = referenceType;\n // @ts-expect-error: mutate.\n delete node.url;\n delete node.title;\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier;\n // @ts-expect-error: mutate.\n delete node.label;\n }\n this.data.referenceType = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitimage() {\n const node = this.stack[this.stack.length - 1];\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut';\n node.type += 'Reference';\n // @ts-expect-error: mutate.\n node.referenceType = referenceType;\n // @ts-expect-error: mutate.\n delete node.url;\n delete node.title;\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier;\n // @ts-expect-error: mutate.\n delete node.label;\n }\n this.data.referenceType = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabeltext(token) {\n const string = this.sliceSerialize(token);\n const ancestor = this.stack[this.stack.length - 2];\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n ancestor.label = decodeString(string);\n // @ts-expect-error: same as above.\n ancestor.identifier = normalizeIdentifier(string).toLowerCase();\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabel() {\n const fragment = this.stack[this.stack.length - 1];\n const value = this.resume();\n const node = this.stack[this.stack.length - 1];\n // Assume a reference.\n this.data.inReference = true;\n if (node.type === 'link') {\n /** @type {Array<PhrasingContent>} */\n const children = fragment.children;\n node.children = children;\n } else {\n node.alt = value;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcedestinationstring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.url = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcetitlestring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.title = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresource() {\n this.data.inReference = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterreference() {\n this.data.referenceType = 'collapsed';\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitreferencestring(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n node.label = label;\n // @ts-expect-error: same as above.\n node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n this.data.referenceType = 'full';\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcharacterreferencemarker(token) {\n this.data.characterReferenceType = token.type;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreferencevalue(token) {\n const data = this.sliceSerialize(token);\n const type = this.data.characterReferenceType;\n /** @type {string} */\n let value;\n if (type) {\n value = decodeNumericCharacterReference(data, type === \"characterReferenceMarkerNumeric\" ? 10 : 16);\n this.data.characterReferenceType = undefined;\n } else {\n const result = decodeNamedCharacterReference(data);\n value = result;\n }\n const tail = this.stack[this.stack.length - 1];\n tail.value += value;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreference(token) {\n const tail = this.stack.pop();\n tail.position.end = point(token.end);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkprotocol(token) {\n onexitdata.call(this, token);\n const node = this.stack[this.stack.length - 1];\n node.url = this.sliceSerialize(token);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkemail(token) {\n onexitdata.call(this, token);\n const node = this.stack[this.stack.length - 1];\n node.url = 'mailto:' + this.sliceSerialize(token);\n }\n\n //\n // Creaters.\n //\n\n /** @returns {Blockquote} */\n function blockQuote() {\n return {\n type: 'blockquote',\n children: []\n };\n }\n\n /** @returns {Code} */\n function codeFlow() {\n return {\n type: 'code',\n lang: null,\n meta: null,\n value: ''\n };\n }\n\n /** @returns {InlineCode} */\n function codeText() {\n return {\n type: 'inlineCode',\n value: ''\n };\n }\n\n /** @returns {Definition} */\n function definition() {\n return {\n type: 'definition',\n identifier: '',\n label: null,\n title: null,\n url: ''\n };\n }\n\n /** @returns {Emphasis} */\n function emphasis() {\n return {\n type: 'emphasis',\n children: []\n };\n }\n\n /** @returns {Heading} */\n function heading() {\n return {\n type: 'heading',\n // @ts-expect-error `depth` will be set later.\n depth: 0,\n children: []\n };\n }\n\n /** @returns {Break} */\n function hardBreak() {\n return {\n type: 'break'\n };\n }\n\n /** @returns {Html} */\n function html() {\n return {\n type: 'html',\n value: ''\n };\n }\n\n /** @returns {Image} */\n function image() {\n return {\n type: 'image',\n title: null,\n url: '',\n alt: null\n };\n }\n\n /** @returns {Link} */\n function link() {\n return {\n type: 'link',\n title: null,\n url: '',\n children: []\n };\n }\n\n /**\n * @param {Token} token\n * @returns {List}\n */\n function list(token) {\n return {\n type: 'list',\n ordered: token.type === 'listOrdered',\n start: null,\n spread: token._spread,\n children: []\n };\n }\n\n /**\n * @param {Token} token\n * @returns {ListItem}\n */\n function listItem(token) {\n return {\n type: 'listItem',\n spread: token._spread,\n checked: null,\n children: []\n };\n }\n\n /** @returns {Paragraph} */\n function paragraph() {\n return {\n type: 'paragraph',\n children: []\n };\n }\n\n /** @returns {Strong} */\n function strong() {\n return {\n type: 'strong',\n children: []\n };\n }\n\n /** @returns {Text} */\n function text() {\n return {\n type: 'text',\n value: ''\n };\n }\n\n /** @returns {ThematicBreak} */\n function thematicBreak() {\n return {\n type: 'thematicBreak'\n };\n }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n * Point-like value.\n * @returns {Point}\n * unist point.\n */\nfunction point(d) {\n return {\n line: d.line,\n column: d.column,\n offset: d.offset\n };\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Array<Extension> | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n let index = -1;\n while (++index < extensions.length) {\n const value = extensions[index];\n if (Array.isArray(value)) {\n configure(combined, value);\n } else {\n extension(combined, value);\n }\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n /** @type {keyof Extension} */\n let key;\n for (key in extension) {\n if (own.call(extension, key)) {\n switch (key) {\n case 'canContainEols':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(...right);\n }\n break;\n }\n case 'transforms':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(...right);\n }\n break;\n }\n case 'enter':\n case 'exit':\n {\n const right = extension[key];\n if (right) {\n Object.assign(combined[key], right);\n }\n break;\n }\n // No default\n }\n }\n }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n if (left) {\n throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n start: left.start,\n end: left.end\n }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is open');\n } else {\n throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is still open');\n }\n}","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser<Root>} Parser\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {Omit<FromMarkdownOptions, 'extensions' | 'mdastExtensions'>} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkParse(options) {\n /** @type {Processor} */\n // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n const self = this\n\n self.parser = parser\n\n /**\n * @type {Parser}\n */\n function parser(doc) {\n return fromMarkdown(doc, {\n ...self.data('settings'),\n ...options,\n // Note: these options are not in the readme.\n // The goal is for them to be set by plugins on `data` instead of being\n // passed by users.\n extensions: self.data('micromarkExtensions') || [],\n mdastExtensions: self.data('fromMarkdownExtensions') || []\n })\n }\n}\n","/**\n * @callback Handler\n * Handle a value, with a certain ID field set to a certain value.\n * The ID field is passed to `zwitch`, and it’s value is this function’s\n * place on the `handlers` record.\n * @param {...any} parameters\n * Arbitrary parameters passed to the zwitch.\n * The first will be an object with a certain ID field set to a certain value.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback UnknownHandler\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @param {unknown} value\n * An object with a certain ID field set to an unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback InvalidHandler\n * Handle values that do not have a certain ID field.\n * @param {unknown} value\n * Any unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {void|null|undefined|never}\n * This should crash or return nothing.\n */\n\n/**\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @typedef Options\n * Configuration (required).\n * @property {Invalid} [invalid]\n * Handler to use for invalid values.\n * @property {Unknown} [unknown]\n * Handler to use for unknown values.\n * @property {Handlers} [handlers]\n * Handlers to use.\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Handle values based on a field.\n *\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @param {string} key\n * Field to switch on.\n * @param {Options<Invalid, Unknown, Handlers>} [options]\n * Configuration (required).\n * @returns {{unknown: Unknown, invalid: Invalid, handlers: Handlers, (...parameters: Parameters<Handlers[keyof Handlers]>): ReturnType<Handlers[keyof Handlers]>, (...parameters: Parameters<Unknown>): ReturnType<Unknown>}}\n */\nexport function zwitch(key, options) {\n const settings = options || {}\n\n /**\n * Handle one value.\n *\n * Based on the bound `key`, a respective handler will be called.\n * If `value` is not an object, or doesn’t have a `key` property, the special\n * “invalid” handler will be called.\n * If `value` has an unknown `key`, the special “unknown” handler will be\n * called.\n *\n * All arguments, and the context object, are passed through to the handler,\n * and it’s result is returned.\n *\n * @this {unknown}\n * Any context object.\n * @param {unknown} [value]\n * Any value.\n * @param {...unknown} parameters\n * Arbitrary parameters passed to the zwitch.\n * @property {Handler} invalid\n * Handle for values that do not have a certain ID field.\n * @property {Handler} unknown\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @property {Handlers} handlers\n * Record of handlers.\n * @returns {unknown}\n * Anything.\n */\n function one(value, ...parameters) {\n /** @type {Handler|undefined} */\n let fn = one.invalid\n const handlers = one.handlers\n\n if (value && own.call(value, key)) {\n // @ts-expect-error Indexable.\n const id = String(value[key])\n // @ts-expect-error Indexable.\n fn = own.call(handlers, id) ? handlers[id] : one.unknown\n }\n\n if (fn) {\n return fn.call(this, value, ...parameters)\n }\n }\n\n one.handlers = settings.handlers || {}\n one.invalid = settings.invalid\n one.unknown = settings.unknown\n\n // @ts-expect-error: matches!\n return one\n}\n","/**\n * @import {Options, State} from './types.js'\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * @param {State} base\n * @param {Options} extension\n * @returns {State}\n */\nexport function configure(base, extension) {\n let index = -1\n /** @type {keyof Options} */\n let key\n\n // First do subextensions.\n if (extension.extensions) {\n while (++index < extension.extensions.length) {\n configure(base, extension.extensions[index])\n }\n }\n\n for (key in extension) {\n if (own.call(extension, key)) {\n switch (key) {\n case 'extensions': {\n // Empty.\n break\n }\n\n /* c8 ignore next 4 */\n case 'unsafe': {\n list(base[key], extension[key])\n break\n }\n\n case 'join': {\n list(base[key], extension[key])\n break\n }\n\n case 'handlers': {\n map(base[key], extension[key])\n break\n }\n\n default: {\n // @ts-expect-error: matches.\n base.options[key] = extension[key]\n }\n }\n }\n }\n\n return base\n}\n\n/**\n * @template T\n * @param {Array<T>} left\n * @param {Array<T> | null | undefined} right\n */\nfunction list(left, right) {\n if (right) {\n left.push(...right)\n }\n}\n\n/**\n * @template T\n * @param {Record<string, T>} left\n * @param {Record<string, T> | null | undefined} right\n */\nfunction map(left, right) {\n if (right) {\n Object.assign(left, right)\n }\n}\n","/**\n * @import {Blockquote, Parents} from 'mdast'\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Blockquote} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function blockquote(node, _, state, info) {\n const exit = state.enter('blockquote')\n const tracker = state.createTracker(info)\n tracker.move('> ')\n tracker.shift(2)\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return '>' + (blank ? '' : ' ') + line\n}\n","/**\n * @import {ConstructName, Unsafe} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe} pattern\n * @returns {boolean}\n */\nexport function patternInScope(stack, pattern) {\n return (\n listInScope(stack, pattern.inConstruct, true) &&\n !listInScope(stack, pattern.notInConstruct, false)\n )\n}\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe['inConstruct']} list\n * @param {boolean} none\n * @returns {boolean}\n */\nfunction listInScope(stack, list, none) {\n if (typeof list === 'string') {\n list = [list]\n }\n\n if (!list || list.length === 0) {\n return none\n }\n\n let index = -1\n\n while (++index < list.length) {\n if (stack.includes(list[index])) {\n return true\n }\n }\n\n return false\n}\n","/**\n * @import {Break, Parents} from 'mdast'\n * @import {Info, State} from 'mdast-util-to-markdown'\n */\n\nimport {patternInScope} from '../util/pattern-in-scope.js'\n\n/**\n * @param {Break} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function hardBreak(_, _1, state, info) {\n let index = -1\n\n while (++index < state.unsafe.length) {\n // If we can’t put eols in this construct (setext headings, tables), use a\n // space instead.\n if (\n state.unsafe[index].character === '\\n' &&\n patternInScope(state.stack, state.unsafe[index])\n ) {\n return /[ \\t]/.test(info.before) ? '' : ' '\n }\n }\n\n return '\\\\\\n'\n}\n","/**\n * Get the count of the longest repeating streak of `substring` in `value`.\n *\n * @param {string} value\n * Content to search in.\n * @param {string} substring\n * Substring to look for, typically one character.\n * @returns {number}\n * Count of most frequent adjacent `substring`s in `value`.\n */\nexport function longestStreak(value, substring) {\n const source = String(value)\n let index = source.indexOf(substring)\n let expected = index\n let count = 0\n let max = 0\n\n if (typeof substring !== 'string') {\n throw new TypeError('Expected substring')\n }\n\n while (index !== -1) {\n if (index === expected) {\n if (++count > max) {\n max = count\n }\n } else {\n count = 1\n }\n\n expected = index + substring.length\n index = source.indexOf(substring, expected)\n }\n\n return max\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Code} from 'mdast'\n */\n\n/**\n * @param {Code} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatCodeAsIndented(node, state) {\n return Boolean(\n state.options.fences === false &&\n node.value &&\n // If there’s no info…\n !node.lang &&\n // And there’s a non-whitespace character…\n /[^ \\r\\n]/.test(node.value) &&\n // And the value doesn’t start or end in a blank…\n !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n )\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['fence'], null | undefined>}\n */\nexport function checkFence(state) {\n const marker = state.options.fence || '`'\n\n if (marker !== '`' && marker !== '~') {\n throw new Error(\n 'Cannot serialize code with `' +\n marker +\n '` for `options.fence`, expected `` ` `` or `~`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {Code, Parents} from 'mdast'\n */\n\nimport {longestStreak} from 'longest-streak'\nimport {formatCodeAsIndented} from '../util/format-code-as-indented.js'\nimport {checkFence} from '../util/check-fence.js'\n\n/**\n * @param {Code} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function code(node, _, state, info) {\n const marker = checkFence(state)\n const raw = node.value || ''\n const suffix = marker === '`' ? 'GraveAccent' : 'Tilde'\n\n if (formatCodeAsIndented(node, state)) {\n const exit = state.enter('codeIndented')\n const value = state.indentLines(raw, map)\n exit()\n return value\n }\n\n const tracker = state.createTracker(info)\n const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3))\n const exit = state.enter('codeFenced')\n let value = tracker.move(sequence)\n\n if (node.lang) {\n const subexit = state.enter(`codeFencedLang${suffix}`)\n value += tracker.move(\n state.safe(node.lang, {\n before: value,\n after: ' ',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n if (node.lang && node.meta) {\n const subexit = state.enter(`codeFencedMeta${suffix}`)\n value += tracker.move(' ')\n value += tracker.move(\n state.safe(node.meta, {\n before: value,\n after: '\\n',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n value += tracker.move('\\n')\n\n if (raw) {\n value += tracker.move(raw + '\\n')\n }\n\n value += tracker.move(sequence)\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return (blank ? '' : ' ') + line\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['quote'], null | undefined>}\n */\nexport function checkQuote(state) {\n const marker = state.options.quote || '\"'\n\n if (marker !== '\"' && marker !== \"'\") {\n throw new Error(\n 'Cannot serialize title with `' +\n marker +\n '` for `options.quote`, expected `\"`, or `\\'`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Definition, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\n/**\n * @param {Definition} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function definition(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('definition')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n value += tracker.move(\n state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n )\n value += tracker.move(']: ')\n\n subexit()\n\n if (\n // If there’s no url, or…\n !node.url ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : '\\n',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n exit()\n\n return value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['emphasis'], null | undefined>}\n */\nexport function checkEmphasis(state) {\n const marker = state.options.emphasis || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize emphasis with `' +\n marker +\n '` for `options.emphasis`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * Encode a code point as a character reference.\n *\n * @param {number} code\n * Code point to encode.\n * @returns {string}\n * Encoded character reference.\n */\nexport function encodeCharacterReference(code) {\n return '&#x' + code.toString(16).toUpperCase() + ';'\n}\n","/**\n * @import {EncodeSides} from '../types.js'\n */\n\nimport {classifyCharacter} from 'micromark-util-classify-character'\n\n/**\n * Check whether to encode (as a character reference) the characters\n * surrounding an attention run.\n *\n * Which characters are around an attention run influence whether it works or\n * not.\n *\n * See <https://github.com/orgs/syntax-tree/discussions/60> for more info.\n * See this markdown in a particular renderer to see what works:\n *\n * ```markdown\n * | | A (letter inside) | B (punctuation inside) | C (whitespace inside) | D (nothing inside) |\n * | ----------------------- | ----------------- | ---------------------- | --------------------- | ------------------ |\n * | 1 (letter outside) | x*y*z | x*.*z | x* *z | x**z |\n * | 2 (punctuation outside) | .*y*. | .*.*. | .* *. | .**. |\n * | 3 (whitespace outside) | x *y* z | x *.* z | x * * z | x ** z |\n * | 4 (nothing outside) | *x* | *.* | * * | ** |\n * ```\n *\n * @param {number} outside\n * Code point on the outer side of the run.\n * @param {number} inside\n * Code point on the inner side of the run.\n * @param {'*' | '_'} marker\n * Marker of the run.\n * Underscores are handled more strictly (they form less often) than\n * asterisks.\n * @returns {EncodeSides}\n * Whether to encode characters.\n */\n// Important: punctuation must never be encoded.\n// Punctuation is solely used by markdown constructs.\n// And by encoding itself.\n// Encoding them will break constructs or double encode things.\nexport function encodeInfo(outside, inside, marker) {\n const outsideKind = classifyCharacter(outside)\n const insideKind = classifyCharacter(inside)\n\n // Letter outside:\n if (outsideKind === undefined) {\n return insideKind === undefined\n ? // Letter inside:\n // we have to encode *both* letters for `_` as it is looser.\n // it already forms for `*` (and GFMs `~`).\n marker === '_'\n ? {inside: true, outside: true}\n : {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode both (letter, whitespace).\n {inside: true, outside: true}\n : // Punctuation inside: encode outer (letter)\n {inside: false, outside: true}\n }\n\n // Whitespace outside:\n if (outsideKind === 1) {\n return insideKind === undefined\n ? // Letter inside: already forms.\n {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode both (whitespace).\n {inside: true, outside: true}\n : // Punctuation inside: already forms.\n {inside: false, outside: false}\n }\n\n // Punctuation outside:\n return insideKind === undefined\n ? // Letter inside: already forms.\n {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode inner (whitespace).\n {inside: true, outside: false}\n : // Punctuation inside: already forms.\n {inside: false, outside: false}\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Emphasis, Parents} from 'mdast'\n */\n\nimport {checkEmphasis} from '../util/check-emphasis.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nemphasis.peek = emphasisPeek\n\n/**\n * @param {Emphasis} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function emphasis(node, _, state, info) {\n const marker = checkEmphasis(state)\n const exit = state.enter('emphasis')\n const tracker = state.createTracker(info)\n const before = tracker.move(marker)\n\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n )\n const betweenHead = between.charCodeAt(0)\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n )\n\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1)\n }\n\n const betweenTail = between.charCodeAt(between.length - 1)\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n }\n\n const after = tracker.move(marker)\n\n exit()\n\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n }\n return before + between + after\n}\n\n/**\n * @param {Emphasis} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction emphasisPeek(_, _1, state) {\n return state.options.emphasis || '*'\n}\n","/**\n * @import {Node, Parent} from 'unist'\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n * Check that an arbitrary value is a node.\n * @param {unknown} this\n * The given context.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean}\n * Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n * Object to check for equivalence.\n *\n * Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | ReadonlyArray<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n * Check for an arbitrary node.\n *\n * @callback TestFunction\n * Check if a node passes a test.\n * @param {unknown} this\n * The given context.\n * @param {Node} node\n * A node.\n * @param {number | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n * The node’s parent.\n * @returns {boolean | undefined | void}\n * Whether this node passes the test.\n *\n * Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n * Thing to check, typically `Node`.\n * @param {Test} test\n * A check for a specific node.\n * @param {number | null | undefined} index\n * The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n * The node’s parent.\n * @param {unknown} context\n * Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n * Whether `node` is a node and passes a test.\n */\nexport const is =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends ReadonlyArray<string>>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n * (<Condition extends Array<string>>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n * (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((node?: null | undefined) => false) &\n * ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n * )}\n */\n (\n /**\n * @param {unknown} [node]\n * @param {Test} [test]\n * @param {number | null | undefined} [index]\n * @param {Parent | null | undefined} [parent]\n * @param {unknown} [context]\n * @returns {boolean}\n */\n // eslint-disable-next-line max-params\n function (node, test, index, parent, context) {\n const check = convert(test)\n\n if (\n index !== undefined &&\n index !== null &&\n (typeof index !== 'number' ||\n index < 0 ||\n index === Number.POSITIVE_INFINITY)\n ) {\n throw new Error('Expected positive finite index')\n }\n\n if (\n parent !== undefined &&\n parent !== null &&\n (!is(parent) || !parent.children)\n ) {\n throw new Error('Expected parent node')\n }\n\n if (\n (parent === undefined || parent === null) !==\n (index === undefined || index === null)\n ) {\n throw new Error('Expected both parent and index')\n }\n\n return looksLikeANode(node)\n ? check.call(context, node, index, parent)\n : false\n }\n )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n * * when nullish, checks if `node` is a `Node`.\n * * when `string`, works like passing `(node) => node.type === test`.\n * * when `function` checks if function passed the node is true.\n * * when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n * * when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n * An assertion.\n */\nexport const convert =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n (\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n function (test) {\n if (test === null || test === undefined) {\n return ok\n }\n\n if (typeof test === 'function') {\n return castFactory(test)\n }\n\n if (typeof test === 'object') {\n return Array.isArray(test)\n ? anyFactory(test)\n : // Cast because `ReadonlyArray` goes into the above but `isArray`\n // narrows to `Array`.\n propertiesFactory(/** @type {Props} */ (test))\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n throw new Error('Expected function, string, or object as test')\n }\n )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n /** @type {Array<Check>} */\n const checks = []\n let index = -1\n\n while (++index < tests.length) {\n checks[index] = convert(tests[index])\n }\n\n return castFactory(any)\n\n /**\n * @this {unknown}\n * @type {TestFunction}\n */\n function any(...parameters) {\n let index = -1\n\n while (++index < checks.length) {\n if (checks[index].apply(this, parameters)) return true\n }\n\n return false\n }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propertiesFactory(check) {\n const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n return castFactory(all)\n\n /**\n * @param {Node} node\n * @returns {boolean}\n */\n function all(node) {\n const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n /** @type {unknown} */ (node)\n )\n\n /** @type {string} */\n let key\n\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n }\n\n return true\n }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n return castFactory(type)\n\n /**\n * @param {Node} node\n */\n function type(node) {\n return node && node.type === check\n }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n return check\n\n /**\n * @this {unknown}\n * @type {Check}\n */\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) &&\n testFunction.call(\n this,\n value,\n typeof index === 'number' ? index : undefined,\n parent || undefined\n )\n )\n }\n}\n\nfunction ok() {\n return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @param {string} d\n * @returns {string}\n */\nexport function color(d) {\n return d\n}\n","/**\n * @import {Node as UnistNode, Parent as UnistParent} from 'unist'\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate<Check, Value> extends Value\n * ? Predicate<Check, Value>\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends ReadonlyArray<infer T>\n * ? MatchesOne<Value, T>\n * : Check extends Array<infer T>\n * ? MatchesOne<Value, T>\n * : MatchesOne<Value, Check>\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array<infer Children>}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent<Node, Child>\n * | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n * Union of the action types.\n *\n * @typedef {number} Index\n * Move to the sibling at `index` next (after node itself is completely\n * traversed).\n *\n * Useful if mutating the tree, such as removing the node the visitor is\n * currently on, or any of its previous siblings.\n * Results less than 0 or greater than or equal to `children.length` stop\n * traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n * List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n * Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform the parent of node (the last of `ancestors`).\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of an ancestor still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Array<VisitedParents>} ancestors\n * Ancestors of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n * Tree type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} test\n * `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n * Handle each node.\n * @param {boolean | null | undefined} [reverse]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n /** @type {Test} */\n let check\n\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n // @ts-expect-error no visitor given, so `visitor` is test.\n visitor = test\n } else {\n // @ts-expect-error visitor given, so `test` isn’t a visitor.\n check = test\n }\n\n const is = convert(check)\n const step = reverse ? -1 : 1\n\n factory(tree, undefined, [])()\n\n /**\n * @param {UnistNode} node\n * @param {number | undefined} index\n * @param {Array<UnistParent>} parents\n */\n function factory(node, index, parents) {\n const value = /** @type {Record<string, unknown>} */ (\n node && typeof node === 'object' ? node : {}\n )\n\n if (typeof value.type === 'string') {\n const name =\n // `hast`\n typeof value.tagName === 'string'\n ? value.tagName\n : // `xast`\n typeof value.name === 'string'\n ? value.name\n : undefined\n\n Object.defineProperty(visit, 'name', {\n value:\n 'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n })\n }\n\n return visit\n\n function visit() {\n /** @type {Readonly<ActionTuple>} */\n let result = empty\n /** @type {Readonly<ActionTuple>} */\n let subresult\n /** @type {number} */\n let offset\n /** @type {Array<UnistParent>} */\n let grandparents\n\n if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n // @ts-expect-error: `visitor` is now a visitor.\n result = toResult(visitor(node, parents))\n\n if (result[0] === EXIT) {\n return result\n }\n }\n\n if ('children' in node && node.children) {\n const nodeAsParent = /** @type {UnistParent} */ (node)\n\n if (nodeAsParent.children && result[0] !== SKIP) {\n offset = (reverse ? nodeAsParent.children.length : -1) + step\n grandparents = parents.concat(nodeAsParent)\n\n while (offset > -1 && offset < nodeAsParent.children.length) {\n const child = nodeAsParent.children[offset]\n\n subresult = factory(child, offset, grandparents)()\n\n if (subresult[0] === EXIT) {\n return subresult\n }\n\n offset =\n typeof subresult[1] === 'number' ? subresult[1] : offset + step\n }\n }\n }\n\n return result\n }\n }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n * Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n * Clean result.\n */\nfunction toResult(value) {\n if (Array.isArray(value)) {\n return value\n }\n\n if (typeof value === 'number') {\n return [CONTINUE, value]\n }\n\n return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate<Check, Value> extends Value\n * ? Predicate<Check, Value>\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends Array<any>\n * ? MatchesOne<Value, Check[keyof Check]>\n * : MatchesOne<Value, Check>\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array<infer Children>}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent<Node, Child>\n * | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform `parent`.\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of `parent` still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n * Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n * Parent of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\n * Build a typed `Visitor` function from a node and all possible parents.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n * Node type.\n * @template {UnistParent} Ancestor\n * Parent type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromMatch<\n * Matches<Descendant, Check>,\n * Extract<Descendant, UnistParent>\n * >\n * )} BuildVisitorFromDescendants\n * Build a typed `Visitor` function from a list of descendants and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n * Node type.\n * @template {Test} Check\n * Test type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromDescendants<\n * InclusiveDescendant<Tree>,\n * Check\n * >\n * )} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n * Node type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n * `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n * Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n /** @type {boolean | null | undefined} */\n let reverse\n /** @type {Test} */\n let test\n /** @type {Visitor} */\n let visitor\n\n if (\n typeof testOrVisitor === 'function' &&\n typeof visitorOrReverse !== 'function'\n ) {\n test = undefined\n visitor = testOrVisitor\n reverse = visitorOrReverse\n } else {\n // @ts-expect-error: assume the overload with test was given.\n test = testOrVisitor\n // @ts-expect-error: assume the overload with test was given.\n visitor = visitorOrReverse\n reverse = maybeReverse\n }\n\n visitParents(tree, test, overload, reverse)\n\n /**\n * @param {UnistNode} node\n * @param {Array<UnistParent>} parents\n */\n function overload(node, parents) {\n const parent = parents[parents.length - 1]\n const index = parent ? parent.children.indexOf(node) : undefined\n return visitor(node, index, parent)\n }\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Heading} from 'mdast'\n */\n\nimport {EXIT, visit} from 'unist-util-visit'\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Heading} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatHeadingAsSetext(node, state) {\n let literalWithBreak = false\n\n // Look for literals with a line break.\n // Note that this also\n visit(node, function (node) {\n if (\n ('value' in node && /\\r?\\n|\\r/.test(node.value)) ||\n node.type === 'break'\n ) {\n literalWithBreak = true\n return EXIT\n }\n })\n\n return Boolean(\n (!node.depth || node.depth < 3) &&\n toString(node) &&\n (state.options.setext || literalWithBreak)\n )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Heading, Parents} from 'mdast'\n */\n\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {formatHeadingAsSetext} from '../util/format-heading-as-setext.js'\n\n/**\n * @param {Heading} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function heading(node, _, state, info) {\n const rank = Math.max(Math.min(6, node.depth || 1), 1)\n const tracker = state.createTracker(info)\n\n if (formatHeadingAsSetext(node, state)) {\n const exit = state.enter('headingSetext')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...tracker.current(),\n before: '\\n',\n after: '\\n'\n })\n subexit()\n exit()\n\n return (\n value +\n '\\n' +\n (rank === 1 ? '=' : '-').repeat(\n // The whole size…\n value.length -\n // Minus the position of the character after the last EOL (or\n // 0 if there is none)…\n (Math.max(value.lastIndexOf('\\r'), value.lastIndexOf('\\n')) + 1)\n )\n )\n }\n\n const sequence = '#'.repeat(rank)\n const exit = state.enter('headingAtx')\n const subexit = state.enter('phrasing')\n\n // Note: for proper tracking, we should reset the output positions when there\n // is no content returned, because then the space is not output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n tracker.move(sequence + ' ')\n\n let value = state.containerPhrasing(node, {\n before: '# ',\n after: '\\n',\n ...tracker.current()\n })\n\n if (/^[\\t ]/.test(value)) {\n // To do: what effect has the character reference on tracking?\n value = encodeCharacterReference(value.charCodeAt(0)) + value.slice(1)\n }\n\n value = value ? sequence + ' ' + value : sequence\n\n if (state.options.closeAtx) {\n value += ' ' + sequence\n }\n\n subexit()\n exit()\n\n return value\n}\n","/**\n * @import {Html} from 'mdast'\n */\n\nhtml.peek = htmlPeek\n\n/**\n * @param {Html} node\n * @returns {string}\n */\nexport function html(node) {\n return node.value || ''\n}\n\n/**\n * @returns {string}\n */\nfunction htmlPeek() {\n return '<'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Image, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\nimage.peek = imagePeek\n\n/**\n * @param {Image} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function image(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('image')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n value += tracker.move(\n state.safe(node.alt, {before: value, after: ']', ...tracker.current()})\n )\n value += tracker.move('](')\n\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n exit()\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imagePeek() {\n return '!'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {ImageReference, Parents} from 'mdast'\n */\n\nimageReference.peek = imageReferencePeek\n\n/**\n * @param {ImageReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function imageReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('imageReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n const alt = state.safe(node.alt, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(alt + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !alt || alt !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imageReferencePeek() {\n return '!'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {InlineCode, Parents} from 'mdast'\n */\n\ninlineCode.peek = inlineCodePeek\n\n/**\n * @param {InlineCode} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nexport function inlineCode(node, _, state) {\n let value = node.value || ''\n let sequence = '`'\n let index = -1\n\n // If there is a single grave accent on its own in the code, use a fence of\n // two.\n // If there are two in a row, use one.\n while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) {\n sequence += '`'\n }\n\n // If this is not just spaces or eols (tabs don’t count), and either the\n // first or last character are a space, eol, or tick, then pad with spaces.\n if (\n /[^ \\r\\n]/.test(value) &&\n ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) || /^`|`$/.test(value))\n ) {\n value = ' ' + value + ' '\n }\n\n // We have a potential problem: certain characters after eols could result in\n // blocks being seen.\n // For example, if someone injected the string `'\\n# b'`, then that would\n // result in an ATX heading.\n // We can’t escape characters in `inlineCode`, but because eols are\n // transformed to spaces when going from markdown to HTML anyway, we can swap\n // them out.\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index]\n const expression = state.compilePattern(pattern)\n /** @type {RegExpExecArray | null} */\n let match\n\n // Only look for `atBreak`s.\n // Btw: note that `atBreak` patterns will always start the regex at LF or\n // CR.\n if (!pattern.atBreak) continue\n\n while ((match = expression.exec(value))) {\n let position = match.index\n\n // Support CRLF (patterns only look for one of the characters).\n if (\n value.charCodeAt(position) === 10 /* `\\n` */ &&\n value.charCodeAt(position - 1) === 13 /* `\\r` */\n ) {\n position--\n }\n\n value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n }\n }\n\n return sequence + value + sequence\n}\n\n/**\n * @returns {string}\n */\nfunction inlineCodePeek() {\n return '`'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Link} from 'mdast'\n */\n\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Link} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatLinkAsAutolink(node, state) {\n const raw = toString(node)\n\n return Boolean(\n !state.options.resourceLink &&\n // If there’s a url…\n node.url &&\n // And there’s a no title…\n !node.title &&\n // And the content of `node` is a single text node…\n node.children &&\n node.children.length === 1 &&\n node.children[0].type === 'text' &&\n // And if the url is the same as the content…\n (raw === node.url || 'mailto:' + raw === node.url) &&\n // And that starts w/ a protocol…\n /^[a-z][a-z+.-]+:/i.test(node.url) &&\n // And that doesn’t contain ASCII control codes (character escapes and\n // references don’t work), space, or angle brackets…\n !/[\\0- <>\\u007F]/.test(node.url)\n )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Link, Parents} from 'mdast'\n * @import {Exit} from '../types.js'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\nimport {formatLinkAsAutolink} from '../util/format-link-as-autolink.js'\n\nlink.peek = linkPeek\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function link(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const tracker = state.createTracker(info)\n /** @type {Exit} */\n let exit\n /** @type {Exit} */\n let subexit\n\n if (formatLinkAsAutolink(node, state)) {\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n exit = state.enter('autolink')\n let value = tracker.move('<')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '>',\n ...tracker.current()\n })\n )\n value += tracker.move('>')\n exit()\n state.stack = stack\n return value\n }\n\n exit = state.enter('link')\n subexit = state.enter('label')\n let value = tracker.move('[')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '](',\n ...tracker.current()\n })\n )\n value += tracker.move('](')\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n\n exit()\n return value\n}\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nfunction linkPeek(node, _, state) {\n return formatLinkAsAutolink(node, state) ? '<' : '['\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {LinkReference, Parents} from 'mdast'\n */\n\nlinkReference.peek = linkReferencePeek\n\n/**\n * @param {LinkReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function linkReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('linkReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n const text = state.containerPhrasing(node, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(text + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !text || text !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction linkReferencePeek() {\n return '['\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBullet(state) {\n const marker = state.options.bullet || '*'\n\n if (marker !== '*' && marker !== '+' && marker !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bullet`, expected `*`, `+`, or `-`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\nimport {checkBullet} from './check-bullet.js'\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBulletOther(state) {\n const bullet = checkBullet(state)\n const bulletOther = state.options.bulletOther\n\n if (!bulletOther) {\n return bullet === '*' ? '-' : '*'\n }\n\n if (bulletOther !== '*' && bulletOther !== '+' && bulletOther !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n bulletOther +\n '` for `options.bulletOther`, expected `*`, `+`, or `-`'\n )\n }\n\n if (bulletOther === bullet) {\n throw new Error(\n 'Expected `bullet` (`' +\n bullet +\n '`) and `bulletOther` (`' +\n bulletOther +\n '`) to be different'\n )\n }\n\n return bulletOther\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bulletOrdered'], null | undefined>}\n */\nexport function checkBulletOrdered(state) {\n const marker = state.options.bulletOrdered || '.'\n\n if (marker !== '.' && marker !== ')') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bulletOrdered`, expected `.` or `)`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['rule'], null | undefined>}\n */\nexport function checkRule(state) {\n const marker = state.options.rule || '*'\n\n if (marker !== '*' && marker !== '-' && marker !== '_') {\n throw new Error(\n 'Cannot serialize rules with `' +\n marker +\n '` for `options.rule`, expected `*`, `-`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {List, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkBulletOther} from '../util/check-bullet-other.js'\nimport {checkBulletOrdered} from '../util/check-bullet-ordered.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {List} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function list(node, parent, state, info) {\n const exit = state.enter('list')\n const bulletCurrent = state.bulletCurrent\n /** @type {string} */\n let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state)\n /** @type {string} */\n const bulletOther = node.ordered\n ? bullet === '.'\n ? ')'\n : '.'\n : checkBulletOther(state)\n let useDifferentMarker =\n parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false\n\n if (!node.ordered) {\n const firstListItem = node.children ? node.children[0] : undefined\n\n // If there’s an empty first list item directly in two list items,\n // we have to use a different bullet:\n //\n // ```markdown\n // * - *\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (\n // Bullet could be used as a thematic break marker:\n (bullet === '*' || bullet === '-') &&\n // Empty first list item:\n firstListItem &&\n (!firstListItem.children || !firstListItem.children[0]) &&\n // Directly in two other list items:\n state.stack[state.stack.length - 1] === 'list' &&\n state.stack[state.stack.length - 2] === 'listItem' &&\n state.stack[state.stack.length - 3] === 'list' &&\n state.stack[state.stack.length - 4] === 'listItem' &&\n // That are each the first child.\n state.indexStack[state.indexStack.length - 1] === 0 &&\n state.indexStack[state.indexStack.length - 2] === 0 &&\n state.indexStack[state.indexStack.length - 3] === 0\n ) {\n useDifferentMarker = true\n }\n\n // If there’s a thematic break at the start of the first list item,\n // we have to use a different bullet:\n //\n // ```markdown\n // * ---\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (checkRule(state) === bullet && firstListItem) {\n let index = -1\n\n while (++index < node.children.length) {\n const item = node.children[index]\n\n if (\n item &&\n item.type === 'listItem' &&\n item.children &&\n item.children[0] &&\n item.children[0].type === 'thematicBreak'\n ) {\n useDifferentMarker = true\n break\n }\n }\n }\n }\n\n if (useDifferentMarker) {\n bullet = bulletOther\n }\n\n state.bulletCurrent = bullet\n const value = state.containerFlow(node, info)\n state.bulletLastUsed = bullet\n state.bulletCurrent = bulletCurrent\n exit()\n return value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['listItemIndent'], null | undefined>}\n */\nexport function checkListItemIndent(state) {\n const style = state.options.listItemIndent || 'one'\n\n if (style !== 'tab' && style !== 'one' && style !== 'mixed') {\n throw new Error(\n 'Cannot serialize items with `' +\n style +\n '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`'\n )\n }\n\n return style\n}\n","/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {ListItem, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkListItemIndent} from '../util/check-list-item-indent.js'\n\n/**\n * @param {ListItem} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function listItem(node, parent, state, info) {\n const listItemIndent = checkListItemIndent(state)\n let bullet = state.bulletCurrent || checkBullet(state)\n\n // Add the marker value for ordered lists.\n if (parent && parent.type === 'list' && parent.ordered) {\n bullet =\n (typeof parent.start === 'number' && parent.start > -1\n ? parent.start\n : 1) +\n (state.options.incrementListMarker === false\n ? 0\n : parent.children.indexOf(node)) +\n bullet\n }\n\n let size = bullet.length + 1\n\n if (\n listItemIndent === 'tab' ||\n (listItemIndent === 'mixed' &&\n ((parent && parent.type === 'list' && parent.spread) || node.spread))\n ) {\n size = Math.ceil(size / 4) * 4\n }\n\n const tracker = state.createTracker(info)\n tracker.move(bullet + ' '.repeat(size - bullet.length))\n tracker.shift(size)\n const exit = state.enter('listItem')\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n\n return value\n\n /** @type {Map} */\n function map(line, index, blank) {\n if (index) {\n return (blank ? '' : ' '.repeat(size)) + line\n }\n\n return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line\n }\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Paragraph, Parents} from 'mdast'\n */\n\n/**\n * @param {Paragraph} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function paragraph(node, _, state, info) {\n const exit = state.enter('paragraph')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, info)\n subexit()\n exit()\n return value\n}\n","/**\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n */\n\nimport {convert} from 'unist-util-is'\n\n/**\n * Check if the given value is *phrasing content*.\n *\n * > 👉 **Note**: Excludes `html`, which can be both phrasing or flow.\n *\n * @param node\n * Thing to check, typically `Node`.\n * @returns\n * Whether `value` is phrasing content.\n */\n\nexport const phrasing =\n /** @type {(node?: unknown) => node is Exclude<PhrasingContent, Html>} */\n (\n convert([\n 'break',\n 'delete',\n 'emphasis',\n // To do: next major: removed since footnotes were added to GFM.\n 'footnote',\n 'footnoteReference',\n 'image',\n 'imageReference',\n 'inlineCode',\n // Enabled by `mdast-util-math`:\n 'inlineMath',\n 'link',\n 'linkReference',\n // Enabled by `mdast-util-mdx`:\n 'mdxJsxTextElement',\n // Enabled by `mdast-util-mdx`:\n 'mdxTextExpression',\n 'strong',\n 'text',\n // Enabled by `mdast-util-directive`:\n 'textDirective'\n ])\n )\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Root} from 'mdast'\n */\n\nimport {phrasing} from 'mdast-util-phrasing'\n\n/**\n * @param {Root} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function root(node, _, state, info) {\n // Note: `html` nodes are ambiguous.\n const hasPhrasing = node.children.some(function (d) {\n return phrasing(d)\n })\n\n const container = hasPhrasing ? state.containerPhrasing : state.containerFlow\n return container.call(state, node, info)\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['strong'], null | undefined>}\n */\nexport function checkStrong(state) {\n const marker = state.options.strong || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize strong with `' +\n marker +\n '` for `options.strong`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Strong} from 'mdast'\n */\n\nimport {checkStrong} from '../util/check-strong.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nstrong.peek = strongPeek\n\n/**\n * @param {Strong} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function strong(node, _, state, info) {\n const marker = checkStrong(state)\n const exit = state.enter('strong')\n const tracker = state.createTracker(info)\n const before = tracker.move(marker + marker)\n\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n )\n const betweenHead = between.charCodeAt(0)\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n )\n\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1)\n }\n\n const betweenTail = between.charCodeAt(between.length - 1)\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n }\n\n const after = tracker.move(marker + marker)\n\n exit()\n\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n }\n return before + between + after\n}\n\n/**\n * @param {Strong} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction strongPeek(_, _1, state) {\n return state.options.strong || '*'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Text} from 'mdast'\n */\n\n/**\n * @param {Text} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function text(node, _, state, info) {\n return state.safe(node.value, info)\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['ruleRepetition'], null | undefined>}\n */\nexport function checkRuleRepetition(state) {\n const repetition = state.options.ruleRepetition || 3\n\n if (repetition < 3) {\n throw new Error(\n 'Cannot serialize rules with repetition `' +\n repetition +\n '` for `options.ruleRepetition`, expected `3` or more'\n )\n }\n\n return repetition\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Parents, ThematicBreak} from 'mdast'\n */\n\nimport {checkRuleRepetition} from '../util/check-rule-repetition.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {ThematicBreak} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nexport function thematicBreak(_, _1, state) {\n const value = (\n checkRule(state) + (state.options.ruleSpaces ? ' ' : '')\n ).repeat(checkRuleRepetition(state))\n\n return state.options.ruleSpaces ? value.slice(0, -1) : value\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {definition} from './definition.js'\nimport {emphasis} from './emphasis.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {image} from './image.js'\nimport {imageReference} from './image-reference.js'\nimport {inlineCode} from './inline-code.js'\nimport {link} from './link.js'\nimport {linkReference} from './link-reference.js'\nimport {list} from './list.js'\nimport {listItem} from './list-item.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default (CommonMark) handlers.\n */\nexport const handle = {\n blockquote,\n break: hardBreak,\n code,\n definition,\n emphasis,\n hardBreak,\n heading,\n html,\n image,\n imageReference,\n inlineCode,\n link,\n linkReference,\n list,\n listItem,\n paragraph,\n root,\n strong,\n text,\n thematicBreak\n}\n","/**\n * @import {Join} from 'mdast-util-to-markdown'\n */\n\nimport {formatCodeAsIndented} from './util/format-code-as-indented.js'\nimport {formatHeadingAsSetext} from './util/format-heading-as-setext.js'\n\n/** @type {Array<Join>} */\nexport const join = [joinDefaults]\n\n/** @type {Join} */\nfunction joinDefaults(left, right, parent, state) {\n // Indented code after list or another indented code.\n if (\n right.type === 'code' &&\n formatCodeAsIndented(right, state) &&\n (left.type === 'list' ||\n (left.type === right.type && formatCodeAsIndented(left, state)))\n ) {\n return false\n }\n\n // Join children of a list or an item.\n // In which case, `parent` has a `spread` field.\n if ('spread' in parent && typeof parent.spread === 'boolean') {\n if (\n left.type === 'paragraph' &&\n // Two paragraphs.\n (left.type === right.type ||\n right.type === 'definition' ||\n // Paragraph followed by a setext heading.\n (right.type === 'heading' && formatHeadingAsSetext(right, state)))\n ) {\n return\n }\n\n return parent.spread ? 1 : 0\n }\n}\n","/**\n * @import {ConstructName, Unsafe} from 'mdast-util-to-markdown'\n */\n\n/**\n * List of constructs that occur in phrasing (paragraphs, headings), but cannot\n * contain things like attention (emphasis, strong), images, or links.\n * So they sort of cancel each other out.\n * Note: could use a better name.\n *\n * @type {Array<ConstructName>}\n */\nconst fullPhrasingSpans = [\n 'autolink',\n 'destinationLiteral',\n 'destinationRaw',\n 'reference',\n 'titleQuote',\n 'titleApostrophe'\n]\n\n/** @type {Array<Unsafe>} */\nexport const unsafe = [\n {character: '\\t', after: '[\\\\r\\\\n]', inConstruct: 'phrasing'},\n {character: '\\t', before: '[\\\\r\\\\n]', inConstruct: 'phrasing'},\n {\n character: '\\t',\n inConstruct: ['codeFencedLangGraveAccent', 'codeFencedLangTilde']\n },\n {\n character: '\\r',\n inConstruct: [\n 'codeFencedLangGraveAccent',\n 'codeFencedLangTilde',\n 'codeFencedMetaGraveAccent',\n 'codeFencedMetaTilde',\n 'destinationLiteral',\n 'headingAtx'\n ]\n },\n {\n character: '\\n',\n inConstruct: [\n 'codeFencedLangGraveAccent',\n 'codeFencedLangTilde',\n 'codeFencedMetaGraveAccent',\n 'codeFencedMetaTilde',\n 'destinationLiteral',\n 'headingAtx'\n ]\n },\n {character: ' ', after: '[\\\\r\\\\n]', inConstruct: 'phrasing'},\n {character: ' ', before: '[\\\\r\\\\n]', inConstruct: 'phrasing'},\n {\n character: ' ',\n inConstruct: ['codeFencedLangGraveAccent', 'codeFencedLangTilde']\n },\n // An exclamation mark can start an image, if it is followed by a link or\n // a link reference.\n {\n character: '!',\n after: '\\\\[',\n inConstruct: 'phrasing',\n notInConstruct: fullPhrasingSpans\n },\n // A quote can break out of a title.\n {character: '\"', inConstruct: 'titleQuote'},\n // A number sign could start an ATX heading if it starts a line.\n {atBreak: true, character: '#'},\n {character: '#', inConstruct: 'headingAtx', after: '(?:[\\r\\n]|$)'},\n // Dollar sign and percentage are not used in markdown.\n // An ampersand could start a character reference.\n {character: '&', after: '[#A-Za-z]', inConstruct: 'phrasing'},\n // An apostrophe can break out of a title.\n {character: \"'\", inConstruct: 'titleApostrophe'},\n // A left paren could break out of a destination raw.\n {character: '(', inConstruct: 'destinationRaw'},\n // A left paren followed by `]` could make something into a link or image.\n {\n before: '\\\\]',\n character: '(',\n inConstruct: 'phrasing',\n notInConstruct: fullPhrasingSpans\n },\n // A right paren could start a list item or break out of a destination\n // raw.\n {atBreak: true, before: '\\\\d+', character: ')'},\n {character: ')', inConstruct: 'destinationRaw'},\n // An asterisk can start thematic breaks, list items, emphasis, strong.\n {atBreak: true, character: '*', after: '(?:[ \\t\\r\\n*])'},\n {character: '*', inConstruct: 'phrasing', notInConstruct: fullPhrasingSpans},\n // A plus sign could start a list item.\n {atBreak: true, character: '+', after: '(?:[ \\t\\r\\n])'},\n // A dash can start thematic breaks, list items, and setext heading\n // underlines.\n {atBreak: true, character: '-', after: '(?:[ \\t\\r\\n-])'},\n // A dot could start a list item.\n {atBreak: true, before: '\\\\d+', character: '.', after: '(?:[ \\t\\r\\n]|$)'},\n // Slash, colon, and semicolon are not used in markdown for constructs.\n // A less than can start html (flow or text) or an autolink.\n // HTML could start with an exclamation mark (declaration, cdata, comment),\n // slash (closing tag), question mark (instruction), or a letter (tag).\n // An autolink also starts with a letter.\n // Finally, it could break out of a destination literal.\n {atBreak: true, character: '<', after: '[!/?A-Za-z]'},\n {\n character: '<',\n after: '[!/?A-Za-z]',\n inConstruct: 'phrasing',\n notInConstruct: fullPhrasingSpans\n },\n {character: '<', inConstruct: 'destinationLiteral'},\n // An equals to can start setext heading underlines.\n {atBreak: true, character: '='},\n // A greater than can start block quotes and it can break out of a\n // destination literal.\n {atBreak: true, character: '>'},\n {character: '>', inConstruct: 'destinationLiteral'},\n // Question mark and at sign are not used in markdown for constructs.\n // A left bracket can start definitions, references, labels,\n {atBreak: true, character: '['},\n {character: '[', inConstruct: 'phrasing', notInConstruct: fullPhrasingSpans},\n {character: '[', inConstruct: ['label', 'reference']},\n // A backslash can start an escape (when followed by punctuation) or a\n // hard break (when followed by an eol).\n // Note: typical escapes are handled in `safe`!\n {character: '\\\\', after: '[\\\\r\\\\n]', inConstruct: 'phrasing'},\n // A right bracket can exit labels.\n {character: ']', inConstruct: ['label', 'reference']},\n // Caret is not used in markdown for constructs.\n // An underscore can start emphasis, strong, or a thematic break.\n {atBreak: true, character: '_'},\n {character: '_', inConstruct: 'phrasing', notInConstruct: fullPhrasingSpans},\n // A grave accent can start code (fenced or text), or it can break out of\n // a grave accent code fence.\n {atBreak: true, character: '`'},\n {\n character: '`',\n inConstruct: ['codeFencedLangGraveAccent', 'codeFencedMetaGraveAccent']\n },\n {character: '`', inConstruct: 'phrasing', notInConstruct: fullPhrasingSpans},\n // Left brace, vertical bar, right brace are not used in markdown for\n // constructs.\n // A tilde can start code (fenced).\n {atBreak: true, character: '~'}\n]\n","/**\n * @import {AssociationId} from '../types.js'\n */\n\nimport {decodeString} from 'micromark-util-decode-string'\n\n/**\n * Get an identifier from an association to match it to others.\n *\n * Associations are nodes that match to something else through an ID:\n * <https://github.com/syntax-tree/mdast#association>.\n *\n * The `label` of an association is the string value: character escapes and\n * references work, and casing is intact.\n * The `identifier` is used to match one association to another:\n * controversially, character escapes and references don’t work in this\n * matching: `©` does not match `©`, and `\\+` does not match `+`.\n *\n * But casing is ignored (and whitespace) is trimmed and collapsed: ` A\\nb`\n * matches `a b`.\n * So, we do prefer the label when figuring out how we’re going to serialize:\n * it has whitespace, casing, and we can ignore most useless character\n * escapes and all character references.\n *\n * @type {AssociationId}\n */\nexport function association(node) {\n if (node.label || !node.identifier) {\n return node.label || ''\n }\n\n return decodeString(node.identifier)\n}\n","/**\n * @import {CompilePattern} from '../types.js'\n */\n\n/**\n * @type {CompilePattern}\n */\nexport function compilePattern(pattern) {\n if (!pattern._compiled) {\n const before =\n (pattern.atBreak ? '[\\\\r\\\\n][\\\\t ]*' : '') +\n (pattern.before ? '(?:' + pattern.before + ')' : '')\n\n pattern._compiled = new RegExp(\n (before ? '(' + before + ')' : '') +\n (/[|\\\\{}()[\\]^$+*?.-]/.test(pattern.character) ? '\\\\' : '') +\n pattern.character +\n (pattern.after ? '(?:' + pattern.after + ')' : ''),\n 'g'\n )\n }\n\n return pattern._compiled\n}\n","/**\n * @import {Handle, Info, State} from 'mdast-util-to-markdown'\n * @import {PhrasingParents} from '../types.js'\n */\n\nimport {encodeCharacterReference} from './encode-character-reference.js'\n\n/**\n * Serialize the children of a parent that contains phrasing children.\n *\n * These children will be joined flush together.\n *\n * @param {PhrasingParents} parent\n * Parent of flow nodes.\n * @param {State} state\n * Info passed around about the current state.\n * @param {Info} info\n * Info on where we are in the document we are generating.\n * @returns {string}\n * Serialized children, joined together.\n */\nexport function containerPhrasing(parent, state, info) {\n const indexStack = state.indexStack\n const children = parent.children || []\n /** @type {Array<string>} */\n const results = []\n let index = -1\n let before = info.before\n /** @type {string | undefined} */\n let encodeAfter\n\n indexStack.push(-1)\n let tracker = state.createTracker(info)\n\n while (++index < children.length) {\n const child = children[index]\n /** @type {string} */\n let after\n\n indexStack[indexStack.length - 1] = index\n\n if (index + 1 < children.length) {\n /** @type {Handle} */\n // @ts-expect-error: hush, it’s actually a `zwitch`.\n let handle = state.handle.handlers[children[index + 1].type]\n /** @type {Handle} */\n // @ts-expect-error: hush, it’s actually a `zwitch`.\n if (handle && handle.peek) handle = handle.peek\n after = handle\n ? handle(children[index + 1], parent, state, {\n before: '',\n after: '',\n ...tracker.current()\n }).charAt(0)\n : ''\n } else {\n after = info.after\n }\n\n // In some cases, html (text) can be found in phrasing right after an eol.\n // When we’d serialize that, in most cases that would be seen as html\n // (flow).\n // As we can’t escape or so to prevent it from happening, we take a somewhat\n // reasonable approach: replace that eol with a space.\n // See: <https://github.com/syntax-tree/mdast-util-to-markdown/issues/15>\n if (\n results.length > 0 &&\n (before === '\\r' || before === '\\n') &&\n child.type === 'html'\n ) {\n results[results.length - 1] = results[results.length - 1].replace(\n /(\\r?\\n|\\r)$/,\n ' '\n )\n before = ' '\n\n // To do: does this work to reset tracker?\n tracker = state.createTracker(info)\n tracker.move(results.join(''))\n }\n\n let value = state.handle(child, parent, state, {\n ...tracker.current(),\n after,\n before\n })\n\n // If we had to encode the first character after the previous node and it’s\n // still the same character,\n // encode it.\n if (encodeAfter && encodeAfter === value.slice(0, 1)) {\n value =\n encodeCharacterReference(encodeAfter.charCodeAt(0)) + value.slice(1)\n }\n\n const encodingInfo = state.attentionEncodeSurroundingInfo\n state.attentionEncodeSurroundingInfo = undefined\n encodeAfter = undefined\n\n // If we have to encode the first character before the current node and\n // it’s still the same character,\n // encode it.\n if (encodingInfo) {\n if (\n results.length > 0 &&\n encodingInfo.before &&\n before === results[results.length - 1].slice(-1)\n ) {\n results[results.length - 1] =\n results[results.length - 1].slice(0, -1) +\n encodeCharacterReference(before.charCodeAt(0))\n }\n\n if (encodingInfo.after) encodeAfter = after\n }\n\n tracker.move(value)\n results.push(value)\n before = value.slice(-1)\n }\n\n indexStack.pop()\n\n return results.join('')\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {FlowChildren, FlowParents, TrackFields} from '../types.js'\n */\n\n/**\n * @param {FlowParents} parent\n * Parent of flow nodes.\n * @param {State} state\n * Info passed around about the current state.\n * @param {TrackFields} info\n * Info on where we are in the document we are generating.\n * @returns {string}\n * Serialized children, joined by (blank) lines.\n */\nexport function containerFlow(parent, state, info) {\n const indexStack = state.indexStack\n const children = parent.children || []\n const tracker = state.createTracker(info)\n /** @type {Array<string>} */\n const results = []\n let index = -1\n\n indexStack.push(-1)\n\n while (++index < children.length) {\n const child = children[index]\n\n indexStack[indexStack.length - 1] = index\n\n results.push(\n tracker.move(\n state.handle(child, parent, state, {\n before: '\\n',\n after: '\\n',\n ...tracker.current()\n })\n )\n )\n\n if (child.type !== 'list') {\n state.bulletLastUsed = undefined\n }\n\n if (index < children.length - 1) {\n results.push(\n tracker.move(between(child, children[index + 1], parent, state))\n )\n }\n }\n\n indexStack.pop()\n\n return results.join('')\n}\n\n/**\n * @param {FlowChildren} left\n * @param {FlowChildren} right\n * @param {FlowParents} parent\n * @param {State} state\n * @returns {string}\n */\nfunction between(left, right, parent, state) {\n let index = state.join.length\n\n while (index--) {\n const result = state.join[index](left, right, parent, state)\n\n if (result === true || result === 1) {\n break\n }\n\n if (typeof result === 'number') {\n return '\\n'.repeat(1 + result)\n }\n\n if (result === false) {\n return '\\n\\n<!---->\\n\\n'\n }\n }\n\n return '\\n\\n'\n}\n","/**\n * @import {IndentLines} from '../types.js'\n */\n\nconst eol = /\\r?\\n|\\r/g\n\n/**\n * @type {IndentLines}\n */\nexport function indentLines(value, map) {\n /** @type {Array<string>} */\n const result = []\n let start = 0\n let line = 0\n /** @type {RegExpExecArray | null} */\n let match\n\n while ((match = eol.exec(value))) {\n one(value.slice(start, match.index))\n result.push(match[0])\n start = match.index + match[0].length\n line++\n }\n\n one(value.slice(start))\n\n return result.join('')\n\n /**\n * @param {string} value\n */\n function one(value) {\n result.push(map(value, line, !value))\n }\n}\n","/**\n * @import {SafeConfig, State} from 'mdast-util-to-markdown'\n */\n\nimport {encodeCharacterReference} from './encode-character-reference.js'\nimport {patternInScope} from './pattern-in-scope.js'\n\n/**\n * Make a string safe for embedding in markdown constructs.\n *\n * In markdown, almost all punctuation characters can, in certain cases,\n * result in something.\n * Whether they do is highly subjective to where they happen and in what\n * they happen.\n *\n * To solve this, `mdast-util-to-markdown` tracks:\n *\n * * Characters before and after something;\n * * What “constructs” we are in.\n *\n * This information is then used by this function to escape or encode\n * special characters.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {string | null | undefined} input\n * Raw value to make safe.\n * @param {SafeConfig} config\n * Configuration.\n * @returns {string}\n * Serialized markdown safe for embedding.\n */\nexport function safe(state, input, config) {\n const value = (config.before || '') + (input || '') + (config.after || '')\n /** @type {Array<number>} */\n const positions = []\n /** @type {Array<string>} */\n const result = []\n /** @type {Record<number, {before: boolean, after: boolean}>} */\n const infos = {}\n let index = -1\n\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index]\n\n if (!patternInScope(state.stack, pattern)) {\n continue\n }\n\n const expression = state.compilePattern(pattern)\n /** @type {RegExpExecArray | null} */\n let match\n\n while ((match = expression.exec(value))) {\n const before = 'before' in pattern || Boolean(pattern.atBreak)\n const after = 'after' in pattern\n const position = match.index + (before ? match[1].length : 0)\n\n if (positions.includes(position)) {\n if (infos[position].before && !before) {\n infos[position].before = false\n }\n\n if (infos[position].after && !after) {\n infos[position].after = false\n }\n } else {\n positions.push(position)\n infos[position] = {before, after}\n }\n }\n }\n\n positions.sort(numerical)\n\n let start = config.before ? config.before.length : 0\n const end = value.length - (config.after ? config.after.length : 0)\n index = -1\n\n while (++index < positions.length) {\n const position = positions[index]\n\n // Character before or after matched:\n if (position < start || position >= end) {\n continue\n }\n\n // If this character is supposed to be escaped because it has a condition on\n // the next character, and the next character is definitly being escaped,\n // then skip this escape.\n if (\n (position + 1 < end &&\n positions[index + 1] === position + 1 &&\n infos[position].after &&\n !infos[position + 1].before &&\n !infos[position + 1].after) ||\n (positions[index - 1] === position - 1 &&\n infos[position].before &&\n !infos[position - 1].before &&\n !infos[position - 1].after)\n ) {\n continue\n }\n\n if (start !== position) {\n // If we have to use a character reference, an ampersand would be more\n // correct, but as backslashes only care about punctuation, either will\n // do the trick\n result.push(escapeBackslashes(value.slice(start, position), '\\\\'))\n }\n\n start = position\n\n if (\n /[!-/:-@[-`{-~]/.test(value.charAt(position)) &&\n (!config.encode || !config.encode.includes(value.charAt(position)))\n ) {\n // Character escape.\n result.push('\\\\')\n } else {\n // Character reference.\n result.push(encodeCharacterReference(value.charCodeAt(position)))\n start++\n }\n }\n\n result.push(escapeBackslashes(value.slice(start, end), config.after))\n\n return result.join('')\n}\n\n/**\n * @param {number} a\n * @param {number} b\n * @returns {number}\n */\nfunction numerical(a, b) {\n return a - b\n}\n\n/**\n * @param {string} value\n * @param {string} after\n * @returns {string}\n */\nfunction escapeBackslashes(value, after) {\n const expression = /\\\\(?=[!-/:-@[-`{-~])/g\n /** @type {Array<number>} */\n const positions = []\n /** @type {Array<string>} */\n const results = []\n const whole = value + after\n let index = -1\n let start = 0\n /** @type {RegExpExecArray | null} */\n let match\n\n while ((match = expression.exec(whole))) {\n positions.push(match.index)\n }\n\n while (++index < positions.length) {\n if (start !== positions[index]) {\n results.push(value.slice(start, positions[index]))\n }\n\n results.push('\\\\')\n start = positions[index]\n }\n\n results.push(value.slice(start))\n\n return results.join('')\n}\n","/**\n * @import {CreateTracker, TrackCurrent, TrackMove, TrackShift} from '../types.js'\n */\n\n/**\n * Track positional info in the output.\n *\n * @type {CreateTracker}\n */\nexport function track(config) {\n // Defaults are used to prevent crashes when older utilities somehow activate\n // this code.\n /* c8 ignore next 5 */\n const options = config || {}\n const now = options.now || {}\n let lineShift = options.lineShift || 0\n let line = now.line || 1\n let column = now.column || 1\n\n return {move, current, shift}\n\n /**\n * Get the current tracked info.\n *\n * @type {TrackCurrent}\n */\n function current() {\n return {now: {line, column}, lineShift}\n }\n\n /**\n * Define an increased line shift (the typical indent for lines).\n *\n * @type {TrackShift}\n */\n function shift(value) {\n lineShift += value\n }\n\n /**\n * Move past some generated markdown.\n *\n * @type {TrackMove}\n */\n function move(input) {\n // eslint-disable-next-line unicorn/prefer-default-parameters\n const value = input || ''\n const chunks = value.split(/\\r?\\n|\\r/g)\n const tail = chunks[chunks.length - 1]\n line += chunks.length - 1\n column =\n chunks.length === 1 ? column + tail.length : 1 + tail.length + lineShift\n return value\n }\n}\n","/**\n * @import {Info, Join, Options, SafeConfig, State} from 'mdast-util-to-markdown'\n * @import {Nodes} from 'mdast'\n * @import {Enter, FlowParents, PhrasingParents, TrackFields} from './types.js'\n */\n\nimport {zwitch} from 'zwitch'\nimport {configure} from './configure.js'\nimport {handle as handlers} from './handle/index.js'\nimport {join} from './join.js'\nimport {unsafe} from './unsafe.js'\nimport {association} from './util/association.js'\nimport {compilePattern} from './util/compile-pattern.js'\nimport {containerPhrasing} from './util/container-phrasing.js'\nimport {containerFlow} from './util/container-flow.js'\nimport {indentLines} from './util/indent-lines.js'\nimport {safe} from './util/safe.js'\nimport {track} from './util/track.js'\n\n/**\n * Turn an mdast syntax tree into markdown.\n *\n * @param {Nodes} tree\n * Tree to serialize.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized markdown representing `tree`.\n */\nexport function toMarkdown(tree, options) {\n const settings = options || {}\n /** @type {State} */\n const state = {\n associationId: association,\n containerPhrasing: containerPhrasingBound,\n containerFlow: containerFlowBound,\n createTracker: track,\n compilePattern,\n enter,\n // @ts-expect-error: GFM / frontmatter are typed in `mdast` but not defined\n // here.\n handlers: {...handlers},\n // @ts-expect-error: add `handle` in a second.\n handle: undefined,\n indentLines,\n indexStack: [],\n join: [...join],\n options: {},\n safe: safeBound,\n stack: [],\n unsafe: [...unsafe]\n }\n\n configure(state, settings)\n\n if (state.options.tightDefinitions) {\n state.join.push(joinDefinition)\n }\n\n state.handle = zwitch('type', {\n invalid,\n unknown,\n handlers: state.handlers\n })\n\n let result = state.handle(tree, undefined, state, {\n before: '\\n',\n after: '\\n',\n now: {line: 1, column: 1},\n lineShift: 0\n })\n\n if (\n result &&\n result.charCodeAt(result.length - 1) !== 10 &&\n result.charCodeAt(result.length - 1) !== 13\n ) {\n result += '\\n'\n }\n\n return result\n\n /** @type {Enter} */\n function enter(name) {\n state.stack.push(name)\n return exit\n\n /**\n * @returns {undefined}\n */\n function exit() {\n state.stack.pop()\n }\n }\n}\n\n/**\n * @param {unknown} value\n * @returns {never}\n */\nfunction invalid(value) {\n throw new Error('Cannot handle value `' + value + '`, expected node')\n}\n\n/**\n * @param {unknown} value\n * @returns {never}\n */\nfunction unknown(value) {\n // Always a node.\n const node = /** @type {Nodes} */ (value)\n throw new Error('Cannot handle unknown node `' + node.type + '`')\n}\n\n/** @type {Join} */\nfunction joinDefinition(left, right) {\n // No blank line between adjacent definitions.\n if (left.type === 'definition' && left.type === right.type) {\n return 0\n }\n}\n\n/**\n * Serialize the children of a parent that contains phrasing children.\n *\n * These children will be joined flush together.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {PhrasingParents} parent\n * Parent of flow nodes.\n * @param {Info} info\n * Info on where we are in the document we are generating.\n * @returns {string}\n * Serialized children, joined together.\n */\nfunction containerPhrasingBound(parent, info) {\n return containerPhrasing(parent, this, info)\n}\n\n/**\n * Serialize the children of a parent that contains flow children.\n *\n * These children will typically be joined by blank lines.\n * What they are joined by exactly is defined by `Join` functions.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {FlowParents} parent\n * Parent of flow nodes.\n * @param {TrackFields} info\n * Info on where we are in the document we are generating.\n * @returns {string}\n * Serialized children, joined by (blank) lines.\n */\nfunction containerFlowBound(parent, info) {\n return containerFlow(parent, this, info)\n}\n\n/**\n * Make a string safe for embedding in markdown constructs.\n *\n * In markdown, almost all punctuation characters can, in certain cases,\n * result in something.\n * Whether they do is highly subjective to where they happen and in what\n * they happen.\n *\n * To solve this, `mdast-util-to-markdown` tracks:\n *\n * * Characters before and after something;\n * * What “constructs” we are in.\n *\n * This information is then used by this function to escape or encode\n * special characters.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {string | null | undefined} value\n * Raw value to make safe.\n * @param {SafeConfig} config\n * Configuration.\n * @returns {string}\n * Serialized markdown safe for embedding.\n */\nfunction safeBound(value, config) {\n return safe(this, value, config)\n}\n","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownOptions\n * @typedef {import('unified').Compiler<Root, string>} Compiler\n * @typedef {import('unified').Processor<undefined, undefined, undefined, Root, string>} Processor\n */\n\n/**\n * @typedef {Omit<ToMarkdownOptions, 'extensions'>} Options\n */\n\nimport {toMarkdown} from 'mdast-util-to-markdown'\n\n/**\n * Add support for serializing to markdown.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkStringify(options) {\n /** @type {Processor} */\n // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n const self = this\n\n self.compiler = compiler\n\n /**\n * @type {Compiler}\n */\n function compiler(tree) {\n return toMarkdown(tree, {\n ...self.data('settings'),\n ...options,\n // Note: this option is not in the readme.\n // The goal is for it to be set by plugins on `data` instead of being\n // passed by users.\n extensions: self.data('toMarkdownExtensions') || []\n })\n }\n}\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n * Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n if (error) {\n throw error\n }\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","export function deprecate(fn) {\n return fn\n}\n\nexport function equal() {}\n\nexport function ok() {}\n\nexport function unreachable() {}\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array<any>) => void} Callback\n * Callback.\n *\n * @typedef {(...input: Array<any>) => any} Middleware\n * Ware.\n *\n * @typedef Pipeline\n * Pipeline.\n * @property {Run} run\n * Run the pipeline.\n * @property {Use} use\n * Add middleware.\n *\n * @typedef {(...input: Array<any>) => void} Run\n * Call all middleware.\n *\n * Calls `done` on completion with either an error or the output of the\n * last middleware.\n *\n * > 👉 **Note**: as the length of input defines whether async functions get a\n * > `next` function,\n * > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n * Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n * Pipeline.\n */\nexport function trough() {\n /** @type {Array<Middleware>} */\n const fns = []\n /** @type {Pipeline} */\n const pipeline = {run, use}\n\n return pipeline\n\n /** @type {Run} */\n function run(...values) {\n let middlewareIndex = -1\n /** @type {Callback} */\n const callback = values.pop()\n\n if (typeof callback !== 'function') {\n throw new TypeError('Expected function as last argument, not ' + callback)\n }\n\n next(null, ...values)\n\n /**\n * Run the next `fn`, or we’re done.\n *\n * @param {Error | null | undefined} error\n * @param {Array<any>} output\n */\n function next(error, ...output) {\n const fn = fns[++middlewareIndex]\n let index = -1\n\n if (error) {\n callback(error)\n return\n }\n\n // Copy non-nullish input into values.\n while (++index < values.length) {\n if (output[index] === null || output[index] === undefined) {\n output[index] = values[index]\n }\n }\n\n // Save the newly created `output` for the next call.\n values = output\n\n // Next or done.\n if (fn) {\n wrap(fn, next)(...output)\n } else {\n callback(null, ...output)\n }\n }\n }\n\n /** @type {Use} */\n function use(middelware) {\n if (typeof middelware !== 'function') {\n throw new TypeError(\n 'Expected `middelware` to be a function, not ' + middelware\n )\n }\n\n fns.push(middelware)\n return pipeline\n }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n * returns a promise that is rejected,\n * or calls the given `done` function with an error,\n * `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n * that value is the main output value\n * * if `middleware` calls `done`,\n * all non-nullish values except for the first one (the error) overwrite the\n * output values\n *\n * @param {Middleware} middleware\n * Function to wrap.\n * @param {Callback} callback\n * Callback called with the output of `middleware`.\n * @returns {Run}\n * Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n /** @type {boolean} */\n let called\n\n return wrapped\n\n /**\n * Call `middleware`.\n * @this {any}\n * @param {Array<any>} parameters\n * @returns {void}\n */\n function wrapped(...parameters) {\n const fnExpectsCallback = middleware.length > parameters.length\n /** @type {any} */\n let result\n\n if (fnExpectsCallback) {\n parameters.push(done)\n }\n\n try {\n result = middleware.apply(this, parameters)\n } catch (error) {\n const exception = /** @type {Error} */ (error)\n\n // Well, this is quite the pickle.\n // `middleware` received a callback and called it synchronously, but that\n // threw an error.\n // The only thing left to do is to throw the thing instead.\n if (fnExpectsCallback && called) {\n throw exception\n }\n\n return done(exception)\n }\n\n if (!fnExpectsCallback) {\n if (result && result.then && typeof result.then === 'function') {\n result.then(then, done)\n } else if (result instanceof Error) {\n done(result)\n } else {\n then(result)\n }\n }\n }\n\n /**\n * Call `callback`, only once.\n *\n * @type {Callback}\n */\n function done(error, ...output) {\n if (!called) {\n called = true\n callback(error, ...output)\n }\n }\n\n /**\n * Call `done` with one value.\n *\n * @param {any} [value]\n */\n function then(value) {\n done(null, value)\n }\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef Options\n * Configuration.\n * @property {Array<Node> | null | undefined} [ancestors]\n * Stack of (inclusive) ancestor nodes surrounding the message (optional).\n * @property {Error | null | undefined} [cause]\n * Original error cause of the message (optional).\n * @property {Point | Position | null | undefined} [place]\n * Place of message (optional).\n * @property {string | null | undefined} [ruleId]\n * Category of message (optional, example: `'my-rule'`).\n * @property {string | null | undefined} [source]\n * Namespace of who sent the message (optional, example: `'my-package'`).\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n /**\n * Create a message for `reason`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {Options | null | undefined} [options]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns\n * Instance of `VFileMessage`.\n */\n // eslint-disable-next-line complexity\n constructor(causeOrReason, optionsOrParentOrPlace, origin) {\n super()\n\n if (typeof optionsOrParentOrPlace === 'string') {\n origin = optionsOrParentOrPlace\n optionsOrParentOrPlace = undefined\n }\n\n /** @type {string} */\n let reason = ''\n /** @type {Options} */\n let options = {}\n let legacyCause = false\n\n if (optionsOrParentOrPlace) {\n // Point.\n if (\n 'line' in optionsOrParentOrPlace &&\n 'column' in optionsOrParentOrPlace\n ) {\n options = {place: optionsOrParentOrPlace}\n }\n // Position.\n else if (\n 'start' in optionsOrParentOrPlace &&\n 'end' in optionsOrParentOrPlace\n ) {\n options = {place: optionsOrParentOrPlace}\n }\n // Node.\n else if ('type' in optionsOrParentOrPlace) {\n options = {\n ancestors: [optionsOrParentOrPlace],\n place: optionsOrParentOrPlace.position\n }\n }\n // Options.\n else {\n options = {...optionsOrParentOrPlace}\n }\n }\n\n if (typeof causeOrReason === 'string') {\n reason = causeOrReason\n }\n // Error.\n else if (!options.cause && causeOrReason) {\n legacyCause = true\n reason = causeOrReason.message\n options.cause = causeOrReason\n }\n\n if (!options.ruleId && !options.source && typeof origin === 'string') {\n const index = origin.indexOf(':')\n\n if (index === -1) {\n options.ruleId = origin\n } else {\n options.source = origin.slice(0, index)\n options.ruleId = origin.slice(index + 1)\n }\n }\n\n if (!options.place && options.ancestors && options.ancestors) {\n const parent = options.ancestors[options.ancestors.length - 1]\n\n if (parent) {\n options.place = parent.position\n }\n }\n\n const start =\n options.place && 'start' in options.place\n ? options.place.start\n : options.place\n\n /**\n * Stack of ancestor nodes surrounding the message.\n *\n * @type {Array<Node> | undefined}\n */\n this.ancestors = options.ancestors || undefined\n\n /**\n * Original error cause of the message.\n *\n * @type {Error | undefined}\n */\n this.cause = options.cause || undefined\n\n /**\n * Starting column of message.\n *\n * @type {number | undefined}\n */\n this.column = start ? start.column : undefined\n\n /**\n * State of problem.\n *\n * * `true` — error, file not usable\n * * `false` — warning, change may be needed\n * * `undefined` — change likely not needed\n *\n * @type {boolean | null | undefined}\n */\n this.fatal = undefined\n\n /**\n * Path of a file (used throughout the `VFile` ecosystem).\n *\n * @type {string | undefined}\n */\n this.file = ''\n\n // Field from `Error`.\n /**\n * Reason for message.\n *\n * @type {string}\n */\n this.message = reason\n\n /**\n * Starting line of error.\n *\n * @type {number | undefined}\n */\n this.line = start ? start.line : undefined\n\n // Field from `Error`.\n /**\n * Serialized positional info of message.\n *\n * On normal errors, this would be something like `ParseError`, buit in\n * `VFile` messages we use this space to show where an error happened.\n */\n this.name = stringifyPosition(options.place) || '1:1'\n\n /**\n * Place of message.\n *\n * @type {Point | Position | undefined}\n */\n this.place = options.place || undefined\n\n /**\n * Reason for message, should use markdown.\n *\n * @type {string}\n */\n this.reason = this.message\n\n /**\n * Category of message (example: `'my-rule'`).\n *\n * @type {string | undefined}\n */\n this.ruleId = options.ruleId || undefined\n\n /**\n * Namespace of message (example: `'my-package'`).\n *\n * @type {string | undefined}\n */\n this.source = options.source || undefined\n\n // Field from `Error`.\n /**\n * Stack of message.\n *\n * This is used by normal errors to show where something happened in\n * programming code, irrelevant for `VFile` messages,\n *\n * @type {string}\n */\n this.stack =\n legacyCause && options.cause && typeof options.cause.stack === 'string'\n ? options.cause.stack\n : ''\n\n // The following fields are “well known”.\n // Not standard.\n // Feel free to add other non-standard fields to your messages.\n\n /**\n * Specify the source value that’s being reported, which is deemed\n * incorrect.\n *\n * @type {string | undefined}\n */\n this.actual = undefined\n\n /**\n * Suggest acceptable values that can be used instead of `actual`.\n *\n * @type {Array<string> | undefined}\n */\n this.expected = undefined\n\n /**\n * Long form description of the message (you should use markdown).\n *\n * @type {string | undefined}\n */\n this.note = undefined\n\n /**\n * Link to docs for the message.\n *\n * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n * > to `new URL(x)`.\n *\n * @type {string | undefined}\n */\n this.url = undefined\n }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.column = undefined\nVFileMessage.prototype.line = undefined\nVFileMessage.prototype.ancestors = undefined\nVFileMessage.prototype.cause = undefined\nVFileMessage.prototype.fatal = undefined\nVFileMessage.prototype.place = undefined\nVFileMessage.prototype.ruleId = undefined\nVFileMessage.prototype.source = undefined\n","// A derivative work based on:\n// <https://github.com/browserify/path-browserify>.\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// <https://github.com/nodejs/node/blob/master/lib/path.js>.\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const minpath = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n * File path.\n * @param {string | null | undefined} [extname]\n * Extension to strip.\n * @returns {string}\n * Stem or basename.\n */\nfunction basename(path, extname) {\n if (extname !== undefined && typeof extname !== 'string') {\n throw new TypeError('\"ext\" argument must be a string')\n }\n\n assertPath(path)\n let start = 0\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let seenNonSlash\n\n if (\n extname === undefined ||\n extname.length === 0 ||\n extname.length > path.length\n ) {\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // path component.\n seenNonSlash = true\n end = index + 1\n }\n }\n\n return end < 0 ? '' : path.slice(start, end)\n }\n\n if (extname === path) {\n return ''\n }\n\n let firstNonSlashEnd = -1\n let extnameIndex = extname.length - 1\n\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else {\n if (firstNonSlashEnd < 0) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching.\n seenNonSlash = true\n firstNonSlashEnd = index + 1\n }\n\n if (extnameIndex > -1) {\n // Try to match the explicit extension.\n if (path.codePointAt(index) === extname.codePointAt(extnameIndex--)) {\n if (extnameIndex < 0) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = index\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extnameIndex = -1\n end = firstNonSlashEnd\n }\n }\n }\n }\n\n if (start === end) {\n end = firstNonSlashEnd\n } else if (end < 0) {\n end = path.length\n }\n\n return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\nfunction dirname(path) {\n assertPath(path)\n\n if (path.length === 0) {\n return '.'\n }\n\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n // Prefix `--` is important to not run on `0`.\n while (--index) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n if (unmatchedSlash) {\n end = index\n break\n }\n } else if (!unmatchedSlash) {\n // We saw the first non-path separator\n unmatchedSlash = true\n }\n }\n\n return end < 0\n ? path.codePointAt(0) === 47 /* `/` */\n ? '/'\n : '.'\n : end === 1 && path.codePointAt(0) === 47 /* `/` */\n ? '//'\n : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * Extname.\n */\nfunction extname(path) {\n assertPath(path)\n\n let index = path.length\n\n let end = -1\n let startPart = 0\n let startDot = -1\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find.\n let preDotState = 0\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n while (index--) {\n const code = path.codePointAt(index)\n\n if (code === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (unmatchedSlash) {\n startPart = index + 1\n break\n }\n\n continue\n }\n\n if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // extension.\n unmatchedSlash = true\n end = index + 1\n }\n\n if (code === 46 /* `.` */) {\n // If this is our first dot, mark it as the start of our extension.\n if (startDot < 0) {\n startDot = index\n } else if (preDotState !== 1) {\n preDotState = 1\n }\n } else if (startDot > -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension.\n preDotState = -1\n }\n }\n\n if (\n startDot < 0 ||\n end < 0 ||\n // We saw a non-dot character immediately before the dot.\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly `..`.\n (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n ) {\n return ''\n }\n\n return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array<string>} segments\n * Path segments.\n * @returns {string}\n * File path.\n */\nfunction join(...segments) {\n let index = -1\n /** @type {string | undefined} */\n let joined\n\n while (++index < segments.length) {\n assertPath(segments[index])\n\n if (segments[index]) {\n joined =\n joined === undefined ? segments[index] : joined + '/' + segments[index]\n }\n }\n\n return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n assertPath(path)\n\n const absolute = path.codePointAt(0) === 47 /* `/` */\n\n // Normalize the path according to POSIX rules.\n let value = normalizeString(path, !absolute)\n\n if (value.length === 0 && !absolute) {\n value = '.'\n }\n\n if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n value += '/'\n }\n\n return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n * File path.\n * @param {boolean} allowAboveRoot\n * Whether `..` can move above root.\n * @returns {string}\n * File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n let result = ''\n let lastSegmentLength = 0\n let lastSlash = -1\n let dots = 0\n let index = -1\n /** @type {number | undefined} */\n let code\n /** @type {number} */\n let lastSlashIndex\n\n while (++index <= path.length) {\n if (index < path.length) {\n code = path.codePointAt(index)\n } else if (code === 47 /* `/` */) {\n break\n } else {\n code = 47 /* `/` */\n }\n\n if (code === 47 /* `/` */) {\n if (lastSlash === index - 1 || dots === 1) {\n // Empty.\n } else if (lastSlash !== index - 1 && dots === 2) {\n if (\n result.length < 2 ||\n lastSegmentLength !== 2 ||\n result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n result.codePointAt(result.length - 2) !== 46 /* `.` */\n ) {\n if (result.length > 2) {\n lastSlashIndex = result.lastIndexOf('/')\n\n if (lastSlashIndex !== result.length - 1) {\n if (lastSlashIndex < 0) {\n result = ''\n lastSegmentLength = 0\n } else {\n result = result.slice(0, lastSlashIndex)\n lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n }\n\n lastSlash = index\n dots = 0\n continue\n }\n } else if (result.length > 0) {\n result = ''\n lastSegmentLength = 0\n lastSlash = index\n dots = 0\n continue\n }\n }\n\n if (allowAboveRoot) {\n result = result.length > 0 ? result + '/..' : '..'\n lastSegmentLength = 2\n }\n } else {\n if (result.length > 0) {\n result += '/' + path.slice(lastSlash + 1, index)\n } else {\n result = path.slice(lastSlash + 1, index)\n }\n\n lastSegmentLength = index - lastSlash - 1\n }\n\n lastSlash = index\n dots = 0\n } else if (code === 46 /* `.` */ && dots > -1) {\n dots++\n } else {\n dots = -1\n }\n }\n\n return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n * File path.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError(\n 'Path must be a string. Received ' + JSON.stringify(path)\n )\n }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// <https://github.com/defunctzombie/node-process/blob/master/browser.js>.\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const minproc = {cwd}\n\nfunction cwd() {\n return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n * File path or URL.\n * @returns {fileUrlOrPath is URL}\n * Whether it’s a URL.\n */\n// From: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js#L720>\nexport function isUrl(fileUrlOrPath) {\n return Boolean(\n fileUrlOrPath !== null &&\n typeof fileUrlOrPath === 'object' &&\n 'href' in fileUrlOrPath &&\n fileUrlOrPath.href &&\n 'protocol' in fileUrlOrPath &&\n fileUrlOrPath.protocol &&\n // @ts-expect-error: indexing is fine.\n fileUrlOrPath.auth === undefined\n )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js>\n\n/**\n * @param {URL | string} path\n * File URL.\n * @returns {string}\n * File URL.\n */\nexport function urlToPath(path) {\n if (typeof path === 'string') {\n path = new URL(path)\n } else if (!isUrl(path)) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'The \"path\" argument must be of type string or an instance of URL. Received `' +\n path +\n '`'\n )\n error.code = 'ERR_INVALID_ARG_TYPE'\n throw error\n }\n\n if (path.protocol !== 'file:') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError('The URL must be of scheme file')\n error.code = 'ERR_INVALID_URL_SCHEME'\n throw error\n }\n\n return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n * URL.\n * @returns {string}\n * File path.\n */\nfunction getPathFromURLPosix(url) {\n if (url.hostname !== '') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL host must be \"localhost\" or empty on darwin'\n )\n error.code = 'ERR_INVALID_FILE_URL_HOST'\n throw error\n }\n\n const pathname = url.pathname\n let index = -1\n\n while (++index < pathname.length) {\n if (\n pathname.codePointAt(index) === 37 /* `%` */ &&\n pathname.codePointAt(index + 1) === 50 /* `2` */\n ) {\n const third = pathname.codePointAt(index + 2)\n if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL path must not include encoded / characters'\n )\n error.code = 'ERR_INVALID_FILE_URL_PATH'\n throw error\n }\n }\n }\n\n return decodeURIComponent(pathname)\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n * @import {Options as MessageOptions} from 'vfile-message'\n * @import {Compatible, Data, Map, Options, Value} from 'vfile'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {minpath} from '#minpath'\nimport {minproc} from '#minproc'\nimport {urlToPath, isUrl} from '#minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n 'history',\n 'path',\n 'basename',\n 'stem',\n 'extname',\n 'dirname'\n])\n\nexport class VFile {\n /**\n * Create a new virtual file.\n *\n * `options` is treated as:\n *\n * * `string` or `Uint8Array` — `{value: options}`\n * * `URL` — `{path: options}`\n * * `VFile` — shallow copies its data over to the new file\n * * `object` — all fields are shallow copied over to the new file\n *\n * Path related fields are set in the following order (least specific to\n * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n * `dirname`.\n *\n * You cannot set `dirname` or `extname` without setting either `history`,\n * `path`, `basename`, or `stem` too.\n *\n * @param {Compatible | null | undefined} [value]\n * File value.\n * @returns\n * New instance.\n */\n constructor(value) {\n /** @type {Options | VFile} */\n let options\n\n if (!value) {\n options = {}\n } else if (isUrl(value)) {\n options = {path: value}\n } else if (typeof value === 'string' || isUint8Array(value)) {\n options = {value}\n } else {\n options = value\n }\n\n /* eslint-disable no-unused-expressions */\n\n /**\n * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n *\n * @type {string}\n */\n // Prevent calling `cwd` (which could be expensive) if it’s not needed;\n // the empty string will be overridden in the next block.\n this.cwd = 'cwd' in options ? '' : minproc.cwd()\n\n /**\n * Place to store custom info (default: `{}`).\n *\n * It’s OK to store custom data directly on the file but moving it to\n * `data` is recommended.\n *\n * @type {Data}\n */\n this.data = {}\n\n /**\n * List of file paths the file moved between.\n *\n * The first is the original path and the last is the current path.\n *\n * @type {Array<string>}\n */\n this.history = []\n\n /**\n * List of messages associated with the file.\n *\n * @type {Array<VFileMessage>}\n */\n this.messages = []\n\n /**\n * Raw value.\n *\n * @type {Value}\n */\n this.value\n\n // The below are non-standard, they are “well-known”.\n // As in, used in several tools.\n /**\n * Source map.\n *\n * This type is equivalent to the `RawSourceMap` type from the `source-map`\n * module.\n *\n * @type {Map | null | undefined}\n */\n this.map\n\n /**\n * Custom, non-string, compiled, representation.\n *\n * This is used by unified to store non-string results.\n * One example is when turning markdown into React nodes.\n *\n * @type {unknown}\n */\n this.result\n\n /**\n * Whether a file was saved to disk.\n *\n * This is used by vfile reporters.\n *\n * @type {boolean}\n */\n this.stored\n /* eslint-enable no-unused-expressions */\n\n // Set path related properties in the correct order.\n let index = -1\n\n while (++index < order.length) {\n const field = order[index]\n\n // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n // `vfile`s too.\n if (\n field in options &&\n options[field] !== undefined &&\n options[field] !== null\n ) {\n // @ts-expect-error: TS doesn’t understand basic reality.\n this[field] = field === 'history' ? [...options[field]] : options[field]\n }\n }\n\n /** @type {string} */\n let field\n\n // Set non-path related properties.\n for (field in options) {\n // @ts-expect-error: fine to set other things.\n if (!order.includes(field)) {\n // @ts-expect-error: fine to set other things.\n this[field] = options[field]\n }\n }\n }\n\n /**\n * Get the basename (including extname) (example: `'index.min.js'`).\n *\n * @returns {string | undefined}\n * Basename.\n */\n get basename() {\n return typeof this.path === 'string'\n ? minpath.basename(this.path)\n : undefined\n }\n\n /**\n * Set basename (including extname) (`'index.min.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} basename\n * Basename.\n * @returns {undefined}\n * Nothing.\n */\n set basename(basename) {\n assertNonEmpty(basename, 'basename')\n assertPart(basename, 'basename')\n this.path = minpath.join(this.dirname || '', basename)\n }\n\n /**\n * Get the parent path (example: `'~'`).\n *\n * @returns {string | undefined}\n * Dirname.\n */\n get dirname() {\n return typeof this.path === 'string'\n ? minpath.dirname(this.path)\n : undefined\n }\n\n /**\n * Set the parent path (example: `'~'`).\n *\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} dirname\n * Dirname.\n * @returns {undefined}\n * Nothing.\n */\n set dirname(dirname) {\n assertPath(this.basename, 'dirname')\n this.path = minpath.join(dirname || '', this.basename)\n }\n\n /**\n * Get the extname (including dot) (example: `'.js'`).\n *\n * @returns {string | undefined}\n * Extname.\n */\n get extname() {\n return typeof this.path === 'string'\n ? minpath.extname(this.path)\n : undefined\n }\n\n /**\n * Set the extname (including dot) (example: `'.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} extname\n * Extname.\n * @returns {undefined}\n * Nothing.\n */\n set extname(extname) {\n assertPart(extname, 'extname')\n assertPath(this.dirname, 'extname')\n\n if (extname) {\n if (extname.codePointAt(0) !== 46 /* `.` */) {\n throw new Error('`extname` must start with `.`')\n }\n\n if (extname.includes('.', 1)) {\n throw new Error('`extname` cannot contain multiple dots')\n }\n }\n\n this.path = minpath.join(this.dirname, this.stem + (extname || ''))\n }\n\n /**\n * Get the full path (example: `'~/index.min.js'`).\n *\n * @returns {string}\n * Path.\n */\n get path() {\n return this.history[this.history.length - 1]\n }\n\n /**\n * Set the full path (example: `'~/index.min.js'`).\n *\n * Cannot be nullified.\n * You can set a file URL (a `URL` object with a `file:` protocol) which will\n * be turned into a path with `url.fileURLToPath`.\n *\n * @param {URL | string} path\n * Path.\n * @returns {undefined}\n * Nothing.\n */\n set path(path) {\n if (isUrl(path)) {\n path = urlToPath(path)\n }\n\n assertNonEmpty(path, 'path')\n\n if (this.path !== path) {\n this.history.push(path)\n }\n }\n\n /**\n * Get the stem (basename w/o extname) (example: `'index.min'`).\n *\n * @returns {string | undefined}\n * Stem.\n */\n get stem() {\n return typeof this.path === 'string'\n ? minpath.basename(this.path, this.extname)\n : undefined\n }\n\n /**\n * Set the stem (basename w/o extname) (example: `'index.min'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} stem\n * Stem.\n * @returns {undefined}\n * Nothing.\n */\n set stem(stem) {\n assertNonEmpty(stem, 'stem')\n assertPart(stem, 'stem')\n this.path = minpath.join(this.dirname || '', stem + (this.extname || ''))\n }\n\n // Normal prototypal methods.\n /**\n * Create a fatal message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `true` (error; file not usable)\n * and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {never}\n * Never.\n * @throws {VFileMessage}\n * Message.\n */\n fail(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = true\n\n throw message\n }\n\n /**\n * Create an info message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `undefined` (info; change\n * likely not needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n info(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = undefined\n\n return message\n }\n\n /**\n * Create a message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `false` (warning; change may be\n * needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n message(causeOrReason, optionsOrParentOrPlace, origin) {\n const message = new VFileMessage(\n // @ts-expect-error: the overloads are fine.\n causeOrReason,\n optionsOrParentOrPlace,\n origin\n )\n\n if (this.path) {\n message.name = this.path + ':' + message.name\n message.file = this.path\n }\n\n message.fatal = false\n\n this.messages.push(message)\n\n return message\n }\n\n /**\n * Serialize the file.\n *\n * > **Note**: which encodings are supported depends on the engine.\n * > For info on Node.js, see:\n * > <https://nodejs.org/api/util.html#whatwg-supported-encodings>.\n *\n * @param {string | null | undefined} [encoding='utf8']\n * Character encoding to understand `value` as when it’s a `Uint8Array`\n * (default: `'utf-8'`).\n * @returns {string}\n * Serialized file.\n */\n toString(encoding) {\n if (this.value === undefined) {\n return ''\n }\n\n if (typeof this.value === 'string') {\n return this.value\n }\n\n const decoder = new TextDecoder(encoding || undefined)\n return decoder.decode(this.value)\n }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n * File path part.\n * @param {string} name\n * Part name.\n * @returns {undefined}\n * Nothing.\n */\nfunction assertPart(part, name) {\n if (part && part.includes(minpath.sep)) {\n throw new Error(\n '`' + name + '` cannot be a path: did not expect `' + minpath.sep + '`'\n )\n }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n * Thing.\n * @param {string} name\n * Part name.\n * @returns {asserts part is string}\n * Nothing.\n */\nfunction assertNonEmpty(part, name) {\n if (!part) {\n throw new Error('`' + name + '` cannot be empty')\n }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n * Path.\n * @param {string} name\n * Dependency name.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path, name) {\n if (!path) {\n throw new Error('Setting `' + name + '` requires `path` to be set too')\n }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","export const CallableInstance =\n /**\n * @type {new <Parameters extends Array<unknown>, Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n */\n (\n /** @type {unknown} */\n (\n /**\n * @this {Function}\n * @param {string | symbol} property\n * @returns {(...parameters: Array<unknown>) => unknown}\n */\n function (property) {\n const self = this\n const constr = self.constructor\n const proto = /** @type {Record<string | symbol, Function>} */ (\n // Prototypes do exist.\n // type-coverage:ignore-next-line\n constr.prototype\n )\n const value = proto[property]\n /** @type {(...parameters: Array<unknown>) => unknown} */\n const apply = function () {\n return value.apply(apply, arguments)\n }\n\n Object.setPrototypeOf(apply, proto)\n\n // Not needed for us in `unified`: we only call this on the `copy`\n // function,\n // and we don't need to add its fields (`length`, `name`)\n // over.\n // See also: GH-246.\n // const names = Object.getOwnPropertyNames(value)\n //\n // for (const p of names) {\n // const descriptor = Object.getOwnPropertyDescriptor(value, p)\n // if (descriptor) Object.defineProperty(apply, p, descriptor)\n // }\n\n return apply\n }\n )\n )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n * Acceptable results from compilers.\n *\n * To register custom results, add them to\n * {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n * The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n * A **compiler** handles the compiling of a syntax tree to something else\n * (in most cases, text) (TypeScript type).\n *\n * It is used in the stringify phase and called with a {@linkcode Node}\n * and {@linkcode VFile} representation of the document to compile.\n * It should return the textual representation of the given tree (typically\n * `string`).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n * Tree to compile.\n * @param {VFile} file\n * File associated with `tree`.\n * @returns {Result}\n * New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n * something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the parser yields (default: `Node`)\n * @callback Parser\n * A **parser** handles the parsing of text to a syntax tree.\n *\n * It is used in the parse phase and is called with a `string` and\n * {@linkcode VFile} of the document to parse.\n * It must return the syntax tree representation of the given file\n * ({@linkcode Node}).\n * @param {string} document\n * Document to parse.\n * @param {VFile} file\n * File associated with `document`.\n * @returns {Tree}\n * Node representing the given file.\n */\n\n/**\n * @typedef {(\n * Plugin<Array<any>, any, any> |\n * PluginTuple<Array<any>, any, any> |\n * Preset\n * )} Pluggable\n * Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array<Pluggable>} PluggableList\n * List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n// <https://github.com/microsoft/TypeScript/issues/55197>.\n/**\n * @template {Array<unknown>} [PluginParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n * Value that is expected as input (default: `Node`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=Input]\n * Value that is yielded as output (default: `Input`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * (this: Processor, ...parameters: PluginParameters) =>\n * Input extends string ? // Parser.\n * Output extends Node | undefined ? undefined | void : never :\n * Output extends CompileResults ? // Compiler.\n * Input extends Node | undefined ? undefined | void : never :\n * Transformer<\n * Input extends Node ? Input : Node,\n * Output extends Node ? Output : Node\n * > | undefined | void\n * )} Plugin\n * Single plugin.\n *\n * Plugins configure the processors they are applied on in the following\n * ways:\n *\n * * they change the processor, such as the parser, the compiler, or by\n * configuring data\n * * they specify how to handle trees and files\n *\n * In practice, they are functions that can receive options and configure the\n * processor (`this`).\n *\n * > **Note**: plugins are called when the processor is *frozen*, not when\n * > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array<unknown>} [TupleParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n * Value that is expected as input (optional).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=undefined] (optional).\n * Value that is yielded as output.\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * [\n * plugin: Plugin<TupleParameters, Input, Output>,\n * ...parameters: TupleParameters\n * ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n * Sharable configuration.\n *\n * They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n * List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n * Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n * The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n * Callback called when the process is done.\n *\n * Called with either an error or a result.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {File | undefined} [file]\n * Processed file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n * Callback called when transformers are done.\n *\n * Called with either an error or results.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {Tree | undefined} [tree]\n * Transformed tree (optional).\n * @param {VFile | undefined} [file]\n * File (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n * Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n * Callback passed to transforms.\n *\n * If the signature of a `transformer` accepts a third argument, the\n * transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n * Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n * New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n * New, changed, file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n * Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n * Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n * Transformers handle syntax trees and files.\n *\n * They are functions that are called each time a syntax tree and file are\n * passed through the run phase.\n * When an error occurs in them (either because it’s thrown, returned,\n * rejected, or passed to `next`), the process stops.\n *\n * The run phase is handled by [`trough`][trough], see its documentation for\n * the exact semantics of these functions.\n *\n * > **Note**: you should likely ignore `next`: don’t accept it.\n * > it supports callback-style async work.\n * > But promises are likely easier to reason about.\n *\n * [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n * Tree to handle.\n * @param {VFile} file\n * File to handle.\n * @param {TransformCallback<Output>} next\n * Callback.\n * @returns {(\n * Promise<Output | undefined | void> |\n * Promise<never> | // For some reason this is needed separately.\n * Output |\n * Error |\n * undefined |\n * void\n * )}\n * If you accept `next`, nothing.\n * Otherwise:\n *\n * * `Error` — fatal error to stop the process\n * * `Promise<undefined>` or `undefined` — the next transformer keeps using\n * same tree\n * * `Promise<Node>` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n * Output of `parse`.\n * @template {Node | undefined} HeadTree\n * Input for `run`.\n * @template {Node | undefined} TailTree\n * Output for `run`.\n * @template {Node | undefined} CompileTree\n * Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n * Output of `stringify`.\n * @template {Node | string | undefined} Input\n * Input of plugin.\n * @template Output\n * Output of plugin (optional).\n * @typedef {(\n * Input extends string\n * ? Output extends Node | undefined\n * ? // Parser.\n * Processor<\n * Output extends undefined ? ParseTree : Output,\n * HeadTree,\n * TailTree,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * : Output extends CompileResults\n * ? Input extends Node | undefined\n * ? // Compiler.\n * Processor<\n * ParseTree,\n * HeadTree,\n * TailTree,\n * Input extends undefined ? CompileTree : Input,\n * Output extends undefined ? CompileResult : Output\n * >\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * : Input extends Node | undefined\n * ? Output extends Node | undefined\n * ? // Transform.\n * Processor<\n * ParseTree,\n * HeadTree extends undefined ? Input : HeadTree,\n * Output extends undefined ? TailTree : Output,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * )} UsePlugin\n * Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n * Node type that the transformer yields.\n * @typedef {(\n * Result extends Value | undefined ?\n * VFile :\n * VFile & {result: Result}\n * )} VFileWithOutput\n * Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n * If a result that is not acceptable on a `VFile` is used, that will\n * be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n * Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n * Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n * Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n * Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n * Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>>}\n */\nexport class Processor extends CallableInstance {\n /**\n * Create a processor.\n */\n constructor() {\n // If `Processor()` is called (w/o new), `copy` is called instead.\n super('copy')\n\n /**\n * Compiler to use (deprecated).\n *\n * @deprecated\n * Use `compiler` instead.\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.Compiler = undefined\n\n /**\n * Parser to use (deprecated).\n *\n * @deprecated\n * Use `parser` instead.\n * @type {(\n * Parser<ParseTree extends undefined ? Node : ParseTree> |\n * undefined\n * )}\n */\n this.Parser = undefined\n\n // Note: the following fields are considered private.\n // However, they are needed for tests, and TSC generates an untyped\n // `private freezeIndex` field for, which trips `type-coverage` up.\n // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n /**\n * Internal list of configured plugins.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Array<PluginTuple<Array<unknown>>>}\n */\n this.attachers = []\n\n /**\n * Compiler to use.\n *\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.compiler = undefined\n\n /**\n * Internal state to track where we are while freezing.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {number}\n */\n this.freezeIndex = -1\n\n /**\n * Internal state to track whether we’re frozen.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {boolean | undefined}\n */\n this.frozen = undefined\n\n /**\n * Internal state.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Data}\n */\n this.namespace = {}\n\n /**\n * Parser to use.\n *\n * @type {(\n * Parser<ParseTree extends undefined ? Node : ParseTree> |\n * undefined\n * )}\n */\n this.parser = undefined\n\n /**\n * Internal list of configured transformers.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Pipeline}\n */\n this.transformers = trough()\n }\n\n /**\n * Copy a processor.\n *\n * @deprecated\n * This is a private internal method and should not be used.\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n * New *unfrozen* processor ({@linkcode Processor}) that is\n * configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\n copy() {\n // Cast as the type parameters will be the same after attaching.\n const destination =\n /** @type {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>} */ (\n new Processor()\n )\n let index = -1\n\n while (++index < this.attachers.length) {\n const attacher = this.attachers[index]\n destination.use(...attacher)\n }\n\n destination.data(extend(true, {}, this.namespace))\n\n return destination\n }\n\n /**\n * Configure the processor with info available to all plugins.\n * Information is stored in an object.\n *\n * Typically, options can be given to a specific plugin, but sometimes it\n * makes sense to have information shared with several plugins.\n * For example, a list of HTML elements that are self-closing, which is\n * needed during all phases.\n *\n * > **Note**: setting information cannot occur on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * > **Note**: to register custom data in TypeScript, augment the\n * > {@linkcode Data} interface.\n *\n * @example\n * This example show how to get and set info:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * const processor = unified().data('alpha', 'bravo')\n *\n * processor.data('alpha') // => 'bravo'\n *\n * processor.data() // => {alpha: 'bravo'}\n *\n * processor.data({charlie: 'delta'})\n *\n * processor.data() // => {charlie: 'delta'}\n * ```\n *\n * @template {keyof Data} Key\n *\n * @overload\n * @returns {Data}\n *\n * @overload\n * @param {Data} dataset\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @overload\n * @param {Key} key\n * @returns {Data[Key]}\n *\n * @overload\n * @param {Key} key\n * @param {Data[Key]} value\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @param {Data | Key} [key]\n * Key to get or set, or entire dataset to set, or nothing to get the\n * entire dataset (optional).\n * @param {Data[Key]} [value]\n * Value to set (optional).\n * @returns {unknown}\n * The current processor when setting, the value at `key` when getting, or\n * the entire dataset when getting without key.\n */\n data(key, value) {\n if (typeof key === 'string') {\n // Set `key`.\n if (arguments.length === 2) {\n assertUnfrozen('data', this.frozen)\n this.namespace[key] = value\n return this\n }\n\n // Get `key`.\n return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n }\n\n // Set space.\n if (key) {\n assertUnfrozen('data', this.frozen)\n this.namespace = key\n return this\n }\n\n // Get space.\n return this.namespace\n }\n\n /**\n * Freeze a processor.\n *\n * Frozen processors are meant to be extended and not to be configured\n * directly.\n *\n * When a processor is frozen it cannot be unfrozen.\n * New processors working the same way can be created by calling the\n * processor.\n *\n * It’s possible to freeze processors explicitly by calling `.freeze()`.\n * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n * `.stringify()`, `.process()`, or `.processSync()` are called.\n *\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n * The current processor.\n */\n freeze() {\n if (this.frozen) {\n return this\n }\n\n // Cast so that we can type plugins easier.\n // Plugins are supposed to be usable on different processors, not just on\n // this exact processor.\n const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n while (++this.freezeIndex < this.attachers.length) {\n const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n if (options[0] === false) {\n continue\n }\n\n if (options[0] === true) {\n options[0] = undefined\n }\n\n const transformer = attacher.call(self, ...options)\n\n if (typeof transformer === 'function') {\n this.transformers.use(transformer)\n }\n }\n\n this.frozen = true\n this.freezeIndex = Number.POSITIVE_INFINITY\n\n return this\n }\n\n /**\n * Parse text to a syntax tree.\n *\n * > **Note**: `parse` freezes the processor if not already *frozen*.\n *\n * > **Note**: `parse` performs the parse phase, not the run phase or other\n * > phases.\n *\n * @param {Compatible | undefined} [file]\n * file to parse (optional); typically `string` or `VFile`; any value\n * accepted as `x` in `new VFile(x)`.\n * @returns {ParseTree extends undefined ? Node : ParseTree}\n * Syntax tree representing `file`.\n */\n parse(file) {\n this.freeze()\n const realFile = vfile(file)\n const parser = this.parser || this.Parser\n assertParser('parse', parser)\n return parser(String(realFile), realFile)\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * > **Note**: `process` freezes the processor if not already *frozen*.\n *\n * > **Note**: `process` performs the parse, run, and stringify phases.\n *\n * @overload\n * @param {Compatible | undefined} file\n * @param {ProcessCallback<VFileWithOutput<CompileResult>>} done\n * @returns {undefined}\n *\n * @overload\n * @param {Compatible | undefined} [file]\n * @returns {Promise<VFileWithOutput<CompileResult>>}\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`]; any value accepted as\n * `x` in `new VFile(x)`.\n * @param {ProcessCallback<VFileWithOutput<CompileResult>> | undefined} [done]\n * Callback (optional).\n * @returns {Promise<VFile> | undefined}\n * Nothing if `done` is given.\n * Otherwise a promise, rejected with a fatal error or resolved with the\n * processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n process(file, done) {\n const self = this\n\n this.freeze()\n assertParser('process', this.parser || this.Parser)\n assertCompiler('process', this.compiler || this.Compiler)\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {((file: VFileWithOutput<CompileResult>) => undefined | void) | undefined} resolve\n * @param {(error: Error | undefined) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n const realFile = vfile(file)\n // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n // input of the first transform).\n const parseTree =\n /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n /** @type {unknown} */ (self.parse(realFile))\n )\n\n self.run(parseTree, realFile, function (error, tree, file) {\n if (error || !tree || !file) {\n return realDone(error)\n }\n\n // Assume `TailTree` (the output of the last transform) matches\n // `CompileTree` (the input of the compiler).\n const compileTree =\n /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n /** @type {unknown} */ (tree)\n )\n\n const compileResult = self.stringify(compileTree, file)\n\n if (looksLikeAValue(compileResult)) {\n file.value = compileResult\n } else {\n file.result = compileResult\n }\n\n realDone(error, /** @type {VFileWithOutput<CompileResult>} */ (file))\n })\n\n /**\n * @param {Error | undefined} error\n * @param {VFileWithOutput<CompileResult> | undefined} [file]\n * @returns {undefined}\n */\n function realDone(error, file) {\n if (error || !file) {\n reject(error)\n } else if (resolve) {\n resolve(file)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, file)\n }\n }\n }\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `processSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `processSync` performs the parse, run, and stringify phases.\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`; any value accepted as\n * `x` in `new VFile(x)`.\n * @returns {VFileWithOutput<CompileResult>}\n * The processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n processSync(file) {\n /** @type {boolean} */\n let complete = false\n /** @type {VFileWithOutput<CompileResult> | undefined} */\n let result\n\n this.freeze()\n assertParser('processSync', this.parser || this.Parser)\n assertCompiler('processSync', this.compiler || this.Compiler)\n\n this.process(file, realDone)\n assertDone('processSync', 'process', complete)\n assert(result, 'we either bailed on an error or have a tree')\n\n return result\n\n /**\n * @type {ProcessCallback<VFileWithOutput<CompileResult>>}\n */\n function realDone(error, file) {\n complete = true\n bail(error)\n result = file\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * > **Note**: `run` freezes the processor if not already *frozen*.\n *\n * > **Note**: `run` performs the run phase, not other phases.\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} file\n * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} [file]\n * @returns {Promise<TailTree extends undefined ? Node : TailTree>}\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {(\n * RunCallback<TailTree extends undefined ? Node : TailTree> |\n * Compatible\n * )} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} [done]\n * Callback (optional).\n * @returns {Promise<TailTree extends undefined ? Node : TailTree> | undefined}\n * Nothing if `done` is given.\n * Otherwise, a promise rejected with a fatal error or resolved with the\n * transformed tree.\n */\n run(tree, file, done) {\n assertNode(tree)\n this.freeze()\n\n const transformers = this.transformers\n\n if (!done && typeof file === 'function') {\n done = file\n file = undefined\n }\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {(\n * ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n * undefined\n * )} resolve\n * @param {(error: Error) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n assert(\n typeof file !== 'function',\n '`file` can’t be a `done` anymore, we checked'\n )\n const realFile = vfile(file)\n transformers.run(tree, realFile, realDone)\n\n /**\n * @param {Error | undefined} error\n * @param {Node} outputTree\n * @param {VFile} file\n * @returns {undefined}\n */\n function realDone(error, outputTree, file) {\n const resultingTree =\n /** @type {TailTree extends undefined ? Node : TailTree} */ (\n outputTree || tree\n )\n\n if (error) {\n reject(error)\n } else if (resolve) {\n resolve(resultingTree)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, resultingTree, file)\n }\n }\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `runSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `runSync` performs the run phase, not other phases.\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {TailTree extends undefined ? Node : TailTree}\n * Transformed tree.\n */\n runSync(tree, file) {\n /** @type {boolean} */\n let complete = false\n /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n let result\n\n this.run(tree, file, realDone)\n\n assertDone('runSync', 'run', complete)\n assert(result, 'we either bailed on an error or have a tree')\n return result\n\n /**\n * @type {RunCallback<TailTree extends undefined ? Node : TailTree>}\n */\n function realDone(error, tree) {\n bail(error)\n result = tree\n complete = true\n }\n }\n\n /**\n * Compile a syntax tree.\n *\n * > **Note**: `stringify` freezes the processor if not already *frozen*.\n *\n * > **Note**: `stringify` performs the stringify phase, not the run phase\n * > or other phases.\n *\n * @param {CompileTree extends undefined ? Node : CompileTree} tree\n * Tree to compile.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {CompileResult extends undefined ? Value : CompileResult}\n * Textual representation of the tree (see note).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n stringify(tree, file) {\n this.freeze()\n const realFile = vfile(file)\n const compiler = this.compiler || this.Compiler\n assertCompiler('stringify', compiler)\n assertNode(tree)\n\n return compiler(tree, realFile)\n }\n\n /**\n * Configure the processor to use a plugin, a list of usable values, or a\n * preset.\n *\n * If the processor is already using a plugin, the previous plugin\n * configuration is changed based on the options that are passed in.\n * In other words, the plugin is not added a second time.\n *\n * > **Note**: `use` cannot be called on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * @example\n * There are many ways to pass plugins to `.use()`.\n * This example gives an overview:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * unified()\n * // Plugin with options:\n * .use(pluginA, {x: true, y: true})\n * // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n * .use(pluginA, {y: false, z: true})\n * // Plugins:\n * .use([pluginB, pluginC])\n * // Two plugins, the second with options:\n * .use([pluginD, [pluginE, {}]])\n * // Preset with plugins and settings:\n * .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n * // Settings only:\n * .use({settings: {position: false}})\n * ```\n *\n * @template {Array<unknown>} [Parameters=[]]\n * @template {Node | string | undefined} [Input=undefined]\n * @template [Output=Input]\n *\n * @overload\n * @param {Preset | null | undefined} [preset]\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @overload\n * @param {PluggableList} list\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @overload\n * @param {Plugin<Parameters, Input, Output>} plugin\n * @param {...(Parameters | [boolean])} parameters\n * @returns {UsePlugin<ParseTree, HeadTree, TailTree, CompileTree, CompileResult, Input, Output>}\n *\n * @param {PluggableList | Plugin | Preset | null | undefined} value\n * Usable value.\n * @param {...unknown} parameters\n * Parameters, when a plugin is given as a usable value.\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n * Current processor.\n */\n use(value, ...parameters) {\n const attachers = this.attachers\n const namespace = this.namespace\n\n assertUnfrozen('use', this.frozen)\n\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'function') {\n addPlugin(value, parameters)\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n addList(value)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n\n return this\n\n /**\n * @param {Pluggable} value\n * @returns {undefined}\n */\n function add(value) {\n if (typeof value === 'function') {\n addPlugin(value, [])\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n const [plugin, ...parameters] =\n /** @type {PluginTuple<Array<unknown>>} */ (value)\n addPlugin(plugin, parameters)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n }\n\n /**\n * @param {Preset} result\n * @returns {undefined}\n */\n function addPreset(result) {\n if (!('plugins' in result) && !('settings' in result)) {\n throw new Error(\n 'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n )\n }\n\n addList(result.plugins)\n\n if (result.settings) {\n namespace.settings = extend(true, namespace.settings, result.settings)\n }\n }\n\n /**\n * @param {PluggableList | null | undefined} plugins\n * @returns {undefined}\n */\n function addList(plugins) {\n let index = -1\n\n if (plugins === null || plugins === undefined) {\n // Empty.\n } else if (Array.isArray(plugins)) {\n while (++index < plugins.length) {\n const thing = plugins[index]\n add(thing)\n }\n } else {\n throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n }\n }\n\n /**\n * @param {Plugin} plugin\n * @param {Array<unknown>} parameters\n * @returns {undefined}\n */\n function addPlugin(plugin, parameters) {\n let index = -1\n let entryIndex = -1\n\n while (++index < attachers.length) {\n if (attachers[index][0] === plugin) {\n entryIndex = index\n break\n }\n }\n\n if (entryIndex === -1) {\n attachers.push([plugin, ...parameters])\n }\n // Only set if there was at least a `primary` value, otherwise we’d change\n // `arguments.length`.\n else if (parameters.length > 0) {\n let [primary, ...rest] = parameters\n const currentPrimary = attachers[entryIndex][1]\n if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n primary = extend(true, currentPrimary, primary)\n }\n\n attachers[entryIndex] = [plugin, primary, ...rest]\n }\n }\n }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n * This example shows how a new processor can be created (from `remark`) and linked\n * to **stdin**(4) and **stdout**(4).\n *\n * ```js\n * import process from 'node:process'\n * import concatStream from 'concat-stream'\n * import {remark} from 'remark'\n *\n * process.stdin.pipe(\n * concatStream(function (buf) {\n * process.stdout.write(String(remark().processSync(buf)))\n * })\n * )\n * ```\n *\n * @returns\n * New *unfrozen* processor (`processor`).\n *\n * This processor is configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `parser`')\n }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `compiler`')\n }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n if (frozen) {\n throw new Error(\n 'Cannot call `' +\n name +\n '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n )\n }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n // type-coverage:ignore-next-line\n if (!isPlainObj(node) || typeof node.type !== 'string') {\n throw new TypeError('Expected node, got `' + node + '`')\n // Fine.\n }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n if (!complete) {\n throw new Error(\n '`' + name + '` finished async. Use `' + asyncName + '` instead'\n )\n }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'message' in value &&\n 'messages' in value\n )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","var __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), setter ? setter.call(obj, value) : member.set(obj, value), value);\nvar _marks, _hasText, _maybeMerge, _matchTarget, _runNode, _closeNodeAndPush, _addNodeAndPush, _marks2, _matchTarget2, _runProseNode, _runProseMark, _runNode2, _searchType, _maybeMergeChildren, _createMarkdownNode, _moveSpaces, _closeNodeAndPush2, _addNodeAndPush2, _openMark, _closeMark;\nimport { stackOverFlow, parserMatchError, createNodeInParserFail, serializerMatchError } from \"@milkdown/exception\";\nimport { Mark } from \"@milkdown/prose/model\";\nclass StackElement {\n}\nclass Stack {\n constructor() {\n this.elements = [];\n this.size = () => {\n return this.elements.length;\n };\n this.top = () => {\n return this.elements.at(-1);\n };\n this.push = (node) => {\n this.top()?.push(node);\n };\n this.open = (node) => {\n this.elements.push(node);\n };\n this.close = () => {\n const el = this.elements.pop();\n if (!el) throw stackOverFlow();\n return el;\n };\n }\n}\nclass ParserStackElement extends StackElement {\n constructor(type, content, attrs) {\n super();\n this.type = type;\n this.content = content;\n this.attrs = attrs;\n }\n push(node, ...rest) {\n this.content.push(node, ...rest);\n }\n pop() {\n return this.content.pop();\n }\n static create(type, content, attrs) {\n return new ParserStackElement(type, content, attrs);\n }\n}\nconst _ParserState = class _ParserState extends Stack {\n /// @internal\n constructor(schema) {\n super();\n __privateAdd(this, _marks);\n __privateAdd(this, _hasText);\n __privateAdd(this, _maybeMerge);\n __privateAdd(this, _matchTarget);\n __privateAdd(this, _runNode);\n __privateAdd(this, _closeNodeAndPush);\n __privateAdd(this, _addNodeAndPush);\n __privateSet(this, _marks, Mark.none);\n __privateSet(this, _hasText, (node) => node.isText);\n __privateSet(this, _maybeMerge, (a, b) => {\n if (__privateGet(this, _hasText).call(this, a) && __privateGet(this, _hasText).call(this, b) && Mark.sameSet(a.marks, b.marks))\n return this.schema.text(a.text + b.text, a.marks);\n return void 0;\n });\n __privateSet(this, _matchTarget, (node) => {\n const result = Object.values({\n ...this.schema.nodes,\n ...this.schema.marks\n }).find((x) => {\n const spec = x.spec;\n return spec.parseMarkdown.match(node);\n });\n if (!result) throw parserMatchError(node);\n return result;\n });\n __privateSet(this, _runNode, (node) => {\n const type = __privateGet(this, _matchTarget).call(this, node);\n const spec = type.spec;\n spec.parseMarkdown.runner(this, node, type);\n });\n this.injectRoot = (node, nodeType, attrs) => {\n this.openNode(nodeType, attrs);\n this.next(node.children);\n return this;\n };\n this.openNode = (nodeType, attrs) => {\n this.open(ParserStackElement.create(nodeType, [], attrs));\n return this;\n };\n __privateSet(this, _closeNodeAndPush, () => {\n __privateSet(this, _marks, Mark.none);\n const element = this.close();\n return __privateGet(this, _addNodeAndPush).call(this, element.type, element.attrs, element.content);\n });\n this.closeNode = () => {\n try {\n __privateGet(this, _closeNodeAndPush).call(this);\n } catch (e) {\n console.error(e);\n }\n return this;\n };\n __privateSet(this, _addNodeAndPush, (nodeType, attrs, content) => {\n const node = nodeType.createAndFill(attrs, content, __privateGet(this, _marks));\n if (!node) throw createNodeInParserFail(nodeType, attrs, content);\n this.push(node);\n return node;\n });\n this.addNode = (nodeType, attrs, content) => {\n try {\n __privateGet(this, _addNodeAndPush).call(this, nodeType, attrs, content);\n } catch (e) {\n console.error(e);\n }\n return this;\n };\n this.openMark = (markType, attrs) => {\n const mark = markType.create(attrs);\n __privateSet(this, _marks, mark.addToSet(__privateGet(this, _marks)));\n return this;\n };\n this.closeMark = (markType) => {\n __privateSet(this, _marks, markType.removeFromSet(__privateGet(this, _marks)));\n return this;\n };\n this.addText = (text) => {\n try {\n const topElement = this.top();\n if (!topElement) throw stackOverFlow();\n const prevNode = topElement.pop();\n const currNode = this.schema.text(text, __privateGet(this, _marks));\n if (!prevNode) {\n topElement.push(currNode);\n return this;\n }\n const merged = __privateGet(this, _maybeMerge).call(this, prevNode, currNode);\n if (merged) {\n topElement.push(merged);\n return this;\n }\n topElement.push(prevNode, currNode);\n return this;\n } catch (e) {\n console.error(e);\n return this;\n }\n };\n this.build = () => {\n let doc;\n do\n doc = __privateGet(this, _closeNodeAndPush).call(this);\n while (this.size());\n return doc;\n };\n this.next = (nodes = []) => {\n [nodes].flat().forEach((node) => __privateGet(this, _runNode).call(this, node));\n return this;\n };\n this.toDoc = () => this.build();\n this.run = (remark, markdown) => {\n const tree = remark.runSync(\n remark.parse(markdown),\n markdown\n );\n this.next(tree);\n return this;\n };\n this.schema = schema;\n }\n};\n_marks = new WeakMap();\n_hasText = new WeakMap();\n_maybeMerge = new WeakMap();\n_matchTarget = new WeakMap();\n_runNode = new WeakMap();\n_closeNodeAndPush = new WeakMap();\n_addNodeAndPush = new WeakMap();\n_ParserState.create = (schema, remark) => {\n const state = new _ParserState(schema);\n return (text) => {\n state.run(remark, text);\n return state.toDoc();\n };\n};\nlet ParserState = _ParserState;\nconst _SerializerStackElement = class _SerializerStackElement extends StackElement {\n constructor(type, children, value, props = {}) {\n super();\n this.type = type;\n this.children = children;\n this.value = value;\n this.props = props;\n this.push = (node, ...rest) => {\n if (!this.children) this.children = [];\n this.children.push(node, ...rest);\n };\n this.pop = () => this.children?.pop();\n }\n};\n_SerializerStackElement.create = (type, children, value, props = {}) => new _SerializerStackElement(type, children, value, props);\nlet SerializerStackElement = _SerializerStackElement;\nconst isFragment = (x) => Object.prototype.hasOwnProperty.call(x, \"size\");\nconst _SerializerState = class _SerializerState extends Stack {\n /// @internal\n constructor(schema) {\n super();\n __privateAdd(this, _marks2);\n __privateAdd(this, _matchTarget2);\n __privateAdd(this, _runProseNode);\n __privateAdd(this, _runProseMark);\n __privateAdd(this, _runNode2);\n __privateAdd(this, _searchType);\n __privateAdd(this, _maybeMergeChildren);\n __privateAdd(this, _createMarkdownNode);\n __privateAdd(this, _moveSpaces);\n __privateAdd(this, _closeNodeAndPush2);\n __privateAdd(this, _addNodeAndPush2);\n __privateAdd(this, _openMark);\n __privateAdd(this, _closeMark);\n __privateSet(this, _marks2, Mark.none);\n __privateSet(this, _matchTarget2, (node) => {\n const result = Object.values({\n ...this.schema.nodes,\n ...this.schema.marks\n }).find((x) => {\n const spec = x.spec;\n return spec.toMarkdown.match(node);\n });\n if (!result) throw serializerMatchError(node.type);\n return result;\n });\n __privateSet(this, _runProseNode, (node) => {\n const type = __privateGet(this, _matchTarget2).call(this, node);\n const spec = type.spec;\n return spec.toMarkdown.runner(this, node);\n });\n __privateSet(this, _runProseMark, (mark, node) => {\n const type = __privateGet(this, _matchTarget2).call(this, mark);\n const spec = type.spec;\n return spec.toMarkdown.runner(this, mark, node);\n });\n __privateSet(this, _runNode2, (node) => {\n const { marks } = node;\n const getPriority = (x) => x.type.spec.priority ?? 50;\n const tmp = [...marks].sort((a, b) => getPriority(a) - getPriority(b));\n const unPreventNext = tmp.every((mark) => !__privateGet(this, _runProseMark).call(this, mark, node));\n if (unPreventNext) __privateGet(this, _runProseNode).call(this, node);\n marks.forEach((mark) => __privateGet(this, _closeMark).call(this, mark));\n });\n __privateSet(this, _searchType, (child, type) => {\n if (child.type === type) return child;\n if (child.children?.length !== 1) return child;\n const searchNode = (node2) => {\n if (node2.type === type) return node2;\n if (node2.children?.length !== 1) return null;\n const [firstChild] = node2.children;\n if (!firstChild) return null;\n return searchNode(firstChild);\n };\n const target = searchNode(child);\n if (!target) return child;\n const tmp = target.children ? [...target.children] : void 0;\n const node = { ...child, children: tmp };\n node.children = tmp;\n target.children = [node];\n return target;\n });\n __privateSet(this, _maybeMergeChildren, (node) => {\n const { children } = node;\n if (!children) return node;\n node.children = children.reduce((nextChildren, child, index) => {\n if (index === 0) return [child];\n const last = nextChildren.at(-1);\n if (last && last.isMark && child.isMark) {\n child = __privateGet(this, _searchType).call(this, child, last.type);\n const { children: currChildren, ...currRest } = child;\n const { children: prevChildren, ...prevRest } = last;\n if (child.type === last.type && currChildren && prevChildren && JSON.stringify(currRest) === JSON.stringify(prevRest)) {\n const next = {\n ...prevRest,\n children: [...prevChildren, ...currChildren]\n };\n return nextChildren.slice(0, -1).concat(__privateGet(this, _maybeMergeChildren).call(this, next));\n }\n }\n return nextChildren.concat(child);\n }, []);\n return node;\n });\n __privateSet(this, _createMarkdownNode, (element) => {\n const node = {\n ...element.props,\n type: element.type\n };\n if (element.children) node.children = element.children;\n if (element.value) node.value = element.value;\n return node;\n });\n this.openNode = (type, value, props) => {\n this.open(SerializerStackElement.create(type, void 0, value, props));\n return this;\n };\n __privateSet(this, _moveSpaces, (element, onPush) => {\n let startSpaces = \"\";\n let endSpaces = \"\";\n const children = element.children;\n let first = -1;\n let last = -1;\n const findIndex = (node) => {\n if (!node) return;\n node.forEach((child, index) => {\n if (child.type === \"text\" && child.value) {\n if (first < 0) first = index;\n last = index;\n }\n });\n };\n if (children) {\n findIndex(children);\n const lastChild = children?.[last];\n const firstChild = children?.[first];\n if (lastChild && lastChild.value.endsWith(\" \")) {\n const text = lastChild.value;\n const trimmed = text.trimEnd();\n endSpaces = text.slice(trimmed.length);\n lastChild.value = trimmed;\n }\n if (firstChild && firstChild.value.startsWith(\" \")) {\n const text = firstChild.value;\n const trimmed = text.trimStart();\n startSpaces = text.slice(0, text.length - trimmed.length);\n firstChild.value = trimmed;\n }\n }\n if (startSpaces.length) __privateGet(this, _addNodeAndPush2).call(this, \"text\", void 0, startSpaces);\n const result = onPush();\n if (endSpaces.length) __privateGet(this, _addNodeAndPush2).call(this, \"text\", void 0, endSpaces);\n return result;\n });\n __privateSet(this, _closeNodeAndPush2, (trim = false) => {\n const element = this.close();\n const onPush = () => __privateGet(this, _addNodeAndPush2).call(this, element.type, element.children, element.value, element.props);\n if (trim) return __privateGet(this, _moveSpaces).call(this, element, onPush);\n return onPush();\n });\n this.closeNode = () => {\n __privateGet(this, _closeNodeAndPush2).call(this);\n return this;\n };\n __privateSet(this, _addNodeAndPush2, (type, children, value, props) => {\n const element = SerializerStackElement.create(type, children, value, props);\n const node = __privateGet(this, _maybeMergeChildren).call(this, __privateGet(this, _createMarkdownNode).call(this, element));\n this.push(node);\n return node;\n });\n this.addNode = (type, children, value, props) => {\n __privateGet(this, _addNodeAndPush2).call(this, type, children, value, props);\n return this;\n };\n __privateSet(this, _openMark, (mark, type, value, props) => {\n const isIn = mark.isInSet(__privateGet(this, _marks2));\n if (isIn) return this;\n __privateSet(this, _marks2, mark.addToSet(__privateGet(this, _marks2)));\n return this.openNode(type, value, { ...props, isMark: true });\n });\n __privateSet(this, _closeMark, (mark) => {\n const isIn = mark.isInSet(__privateGet(this, _marks2));\n if (!isIn) return;\n __privateSet(this, _marks2, mark.type.removeFromSet(__privateGet(this, _marks2)));\n __privateGet(this, _closeNodeAndPush2).call(this, true);\n });\n this.withMark = (mark, type, value, props) => {\n __privateGet(this, _openMark).call(this, mark, type, value, props);\n return this;\n };\n this.closeMark = (mark) => {\n __privateGet(this, _closeMark).call(this, mark);\n return this;\n };\n this.build = () => {\n let doc = null;\n do\n doc = __privateGet(this, _closeNodeAndPush2).call(this);\n while (this.size());\n return doc;\n };\n this.next = (nodes) => {\n if (isFragment(nodes)) {\n nodes.forEach((node) => {\n __privateGet(this, _runNode2).call(this, node);\n });\n return this;\n }\n __privateGet(this, _runNode2).call(this, nodes);\n return this;\n };\n this.toString = (remark) => remark.stringify(this.build());\n this.run = (tree) => {\n this.next(tree);\n return this;\n };\n this.schema = schema;\n }\n};\n_marks2 = new WeakMap();\n_matchTarget2 = new WeakMap();\n_runProseNode = new WeakMap();\n_runProseMark = new WeakMap();\n_runNode2 = new WeakMap();\n_searchType = new WeakMap();\n_maybeMergeChildren = new WeakMap();\n_createMarkdownNode = new WeakMap();\n_moveSpaces = new WeakMap();\n_closeNodeAndPush2 = new WeakMap();\n_addNodeAndPush2 = new WeakMap();\n_openMark = new WeakMap();\n_closeMark = new WeakMap();\n_SerializerState.create = (schema, remark) => {\n const state = new _SerializerState(schema);\n return (content) => {\n state.run(content);\n return state.toString(remark);\n };\n};\nlet SerializerState = _SerializerState;\nexport {\n ParserState,\n SerializerState,\n Stack,\n StackElement\n};\n//# sourceMappingURL=index.js.map\n","import { ReplaceError, Slice, Fragment, MarkType, Mark } from 'prosemirror-model';\n\n// Recovery values encode a range index and an offset. They are\n// represented as numbers, because tons of them will be created when\n// mapping, for example, a large number of decorations. The number's\n// lower 16 bits provide the index, the remaining bits the offset.\n//\n// Note: We intentionally don't use bit shift operators to en- and\n// decode these, since those clip to 32 bits, which we might in rare\n// cases want to overflow. A 64-bit float can represent 48-bit\n// integers precisely.\nconst lower16 = 0xffff;\nconst factor16 = Math.pow(2, 16);\nfunction makeRecover(index, offset) { return index + offset * factor16; }\nfunction recoverIndex(value) { return value & lower16; }\nfunction recoverOffset(value) { return (value - (value & lower16)) / factor16; }\nconst DEL_BEFORE = 1, DEL_AFTER = 2, DEL_ACROSS = 4, DEL_SIDE = 8;\n/**\nAn object representing a mapped position with extra\ninformation.\n*/\nclass MapResult {\n /**\n @internal\n */\n constructor(\n /**\n The mapped version of the position.\n */\n pos, \n /**\n @internal\n */\n delInfo, \n /**\n @internal\n */\n recover) {\n this.pos = pos;\n this.delInfo = delInfo;\n this.recover = recover;\n }\n /**\n Tells you whether the position was deleted, that is, whether the\n step removed the token on the side queried (via the `assoc`)\n argument from the document.\n */\n get deleted() { return (this.delInfo & DEL_SIDE) > 0; }\n /**\n Tells you whether the token before the mapped position was deleted.\n */\n get deletedBefore() { return (this.delInfo & (DEL_BEFORE | DEL_ACROSS)) > 0; }\n /**\n True when the token after the mapped position was deleted.\n */\n get deletedAfter() { return (this.delInfo & (DEL_AFTER | DEL_ACROSS)) > 0; }\n /**\n Tells whether any of the steps mapped through deletes across the\n position (including both the token before and after the\n position).\n */\n get deletedAcross() { return (this.delInfo & DEL_ACROSS) > 0; }\n}\n/**\nA map describing the deletions and insertions made by a step, which\ncan be used to find the correspondence between positions in the\npre-step version of a document and the same position in the\npost-step version.\n*/\nclass StepMap {\n /**\n Create a position map. The modifications to the document are\n represented as an array of numbers, in which each group of three\n represents a modified chunk as `[start, oldSize, newSize]`.\n */\n constructor(\n /**\n @internal\n */\n ranges, \n /**\n @internal\n */\n inverted = false) {\n this.ranges = ranges;\n this.inverted = inverted;\n if (!ranges.length && StepMap.empty)\n return StepMap.empty;\n }\n /**\n @internal\n */\n recover(value) {\n let diff = 0, index = recoverIndex(value);\n if (!this.inverted)\n for (let i = 0; i < index; i++)\n diff += this.ranges[i * 3 + 2] - this.ranges[i * 3 + 1];\n return this.ranges[index * 3] + diff + recoverOffset(value);\n }\n mapResult(pos, assoc = 1) { return this._map(pos, assoc, false); }\n map(pos, assoc = 1) { return this._map(pos, assoc, true); }\n /**\n @internal\n */\n _map(pos, assoc, simple) {\n let diff = 0, oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n for (let i = 0; i < this.ranges.length; i += 3) {\n let start = this.ranges[i] - (this.inverted ? diff : 0);\n if (start > pos)\n break;\n let oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex], end = start + oldSize;\n if (pos <= end) {\n let side = !oldSize ? assoc : pos == start ? -1 : pos == end ? 1 : assoc;\n let result = start + diff + (side < 0 ? 0 : newSize);\n if (simple)\n return result;\n let recover = pos == (assoc < 0 ? start : end) ? null : makeRecover(i / 3, pos - start);\n let del = pos == start ? DEL_AFTER : pos == end ? DEL_BEFORE : DEL_ACROSS;\n if (assoc < 0 ? pos != start : pos != end)\n del |= DEL_SIDE;\n return new MapResult(result, del, recover);\n }\n diff += newSize - oldSize;\n }\n return simple ? pos + diff : new MapResult(pos + diff, 0, null);\n }\n /**\n @internal\n */\n touches(pos, recover) {\n let diff = 0, index = recoverIndex(recover);\n let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n for (let i = 0; i < this.ranges.length; i += 3) {\n let start = this.ranges[i] - (this.inverted ? diff : 0);\n if (start > pos)\n break;\n let oldSize = this.ranges[i + oldIndex], end = start + oldSize;\n if (pos <= end && i == index * 3)\n return true;\n diff += this.ranges[i + newIndex] - oldSize;\n }\n return false;\n }\n /**\n Calls the given function on each of the changed ranges included in\n this map.\n */\n forEach(f) {\n let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n for (let i = 0, diff = 0; i < this.ranges.length; i += 3) {\n let start = this.ranges[i], oldStart = start - (this.inverted ? diff : 0), newStart = start + (this.inverted ? 0 : diff);\n let oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex];\n f(oldStart, oldStart + oldSize, newStart, newStart + newSize);\n diff += newSize - oldSize;\n }\n }\n /**\n Create an inverted version of this map. The result can be used to\n map positions in the post-step document to the pre-step document.\n */\n invert() {\n return new StepMap(this.ranges, !this.inverted);\n }\n /**\n @internal\n */\n toString() {\n return (this.inverted ? \"-\" : \"\") + JSON.stringify(this.ranges);\n }\n /**\n Create a map that moves all positions by offset `n` (which may be\n negative). This can be useful when applying steps meant for a\n sub-document to a larger document, or vice-versa.\n */\n static offset(n) {\n return n == 0 ? StepMap.empty : new StepMap(n < 0 ? [0, -n, 0] : [0, 0, n]);\n }\n}\n/**\nA StepMap that contains no changed ranges.\n*/\nStepMap.empty = new StepMap([]);\n/**\nA mapping represents a pipeline of zero or more [step\nmaps](https://prosemirror.net/docs/ref/#transform.StepMap). It has special provisions for losslessly\nhandling mapping positions through a series of steps in which some\nsteps are inverted versions of earlier steps. (This comes up when\n‘[rebasing](https://prosemirror.net/docs/guide/#transform.rebasing)’ steps for\ncollaboration or history management.)\n*/\nclass Mapping {\n /**\n Create a new mapping with the given position maps.\n */\n constructor(maps, \n /**\n @internal\n */\n mirror, \n /**\n The starting position in the `maps` array, used when `map` or\n `mapResult` is called.\n */\n from = 0, \n /**\n The end position in the `maps` array.\n */\n to = maps ? maps.length : 0) {\n this.mirror = mirror;\n this.from = from;\n this.to = to;\n this._maps = maps || [];\n this.ownData = !(maps || mirror);\n }\n /**\n The step maps in this mapping.\n */\n get maps() { return this._maps; }\n /**\n Create a mapping that maps only through a part of this one.\n */\n slice(from = 0, to = this.maps.length) {\n return new Mapping(this._maps, this.mirror, from, to);\n }\n /**\n Add a step map to the end of this mapping. If `mirrors` is\n given, it should be the index of the step map that is the mirror\n image of this one.\n */\n appendMap(map, mirrors) {\n if (!this.ownData) {\n this._maps = this._maps.slice();\n this.mirror = this.mirror && this.mirror.slice();\n this.ownData = true;\n }\n this.to = this._maps.push(map);\n if (mirrors != null)\n this.setMirror(this._maps.length - 1, mirrors);\n }\n /**\n Add all the step maps in a given mapping to this one (preserving\n mirroring information).\n */\n appendMapping(mapping) {\n for (let i = 0, startSize = this._maps.length; i < mapping._maps.length; i++) {\n let mirr = mapping.getMirror(i);\n this.appendMap(mapping._maps[i], mirr != null && mirr < i ? startSize + mirr : undefined);\n }\n }\n /**\n Finds the offset of the step map that mirrors the map at the\n given offset, in this mapping (as per the second argument to\n `appendMap`).\n */\n getMirror(n) {\n if (this.mirror)\n for (let i = 0; i < this.mirror.length; i++)\n if (this.mirror[i] == n)\n return this.mirror[i + (i % 2 ? -1 : 1)];\n }\n /**\n @internal\n */\n setMirror(n, m) {\n if (!this.mirror)\n this.mirror = [];\n this.mirror.push(n, m);\n }\n /**\n Append the inverse of the given mapping to this one.\n */\n appendMappingInverted(mapping) {\n for (let i = mapping.maps.length - 1, totalSize = this._maps.length + mapping._maps.length; i >= 0; i--) {\n let mirr = mapping.getMirror(i);\n this.appendMap(mapping._maps[i].invert(), mirr != null && mirr > i ? totalSize - mirr - 1 : undefined);\n }\n }\n /**\n Create an inverted version of this mapping.\n */\n invert() {\n let inverse = new Mapping;\n inverse.appendMappingInverted(this);\n return inverse;\n }\n /**\n Map a position through this mapping.\n */\n map(pos, assoc = 1) {\n if (this.mirror)\n return this._map(pos, assoc, true);\n for (let i = this.from; i < this.to; i++)\n pos = this._maps[i].map(pos, assoc);\n return pos;\n }\n /**\n Map a position through this mapping, returning a mapping\n result.\n */\n mapResult(pos, assoc = 1) { return this._map(pos, assoc, false); }\n /**\n @internal\n */\n _map(pos, assoc, simple) {\n let delInfo = 0;\n for (let i = this.from; i < this.to; i++) {\n let map = this._maps[i], result = map.mapResult(pos, assoc);\n if (result.recover != null) {\n let corr = this.getMirror(i);\n if (corr != null && corr > i && corr < this.to) {\n i = corr;\n pos = this._maps[corr].recover(result.recover);\n continue;\n }\n }\n delInfo |= result.delInfo;\n pos = result.pos;\n }\n return simple ? pos : new MapResult(pos, delInfo, null);\n }\n}\n\nconst stepsByID = Object.create(null);\n/**\nA step object represents an atomic change. It generally applies\nonly to the document it was created for, since the positions\nstored in it will only make sense for that document.\n\nNew steps are defined by creating classes that extend `Step`,\noverriding the `apply`, `invert`, `map`, `getMap` and `fromJSON`\nmethods, and registering your class with a unique\nJSON-serialization identifier using\n[`Step.jsonID`](https://prosemirror.net/docs/ref/#transform.Step^jsonID).\n*/\nclass Step {\n /**\n Get the step map that represents the changes made by this step,\n and which can be used to transform between positions in the old\n and the new document.\n */\n getMap() { return StepMap.empty; }\n /**\n Try to merge this step with another one, to be applied directly\n after it. Returns the merged step when possible, null if the\n steps can't be merged.\n */\n merge(other) { return null; }\n /**\n Deserialize a step from its JSON representation. Will call\n through to the step class' own implementation of this method.\n */\n static fromJSON(schema, json) {\n if (!json || !json.stepType)\n throw new RangeError(\"Invalid input for Step.fromJSON\");\n let type = stepsByID[json.stepType];\n if (!type)\n throw new RangeError(`No step type ${json.stepType} defined`);\n return type.fromJSON(schema, json);\n }\n /**\n To be able to serialize steps to JSON, each step needs a string\n ID to attach to its JSON representation. Use this method to\n register an ID for your step classes. Try to pick something\n that's unlikely to clash with steps from other modules.\n */\n static jsonID(id, stepClass) {\n if (id in stepsByID)\n throw new RangeError(\"Duplicate use of step JSON ID \" + id);\n stepsByID[id] = stepClass;\n stepClass.prototype.jsonID = id;\n return stepClass;\n }\n}\n/**\nThe result of [applying](https://prosemirror.net/docs/ref/#transform.Step.apply) a step. Contains either a\nnew document or a failure value.\n*/\nclass StepResult {\n /**\n @internal\n */\n constructor(\n /**\n The transformed document, if successful.\n */\n doc, \n /**\n The failure message, if unsuccessful.\n */\n failed) {\n this.doc = doc;\n this.failed = failed;\n }\n /**\n Create a successful step result.\n */\n static ok(doc) { return new StepResult(doc, null); }\n /**\n Create a failed step result.\n */\n static fail(message) { return new StepResult(null, message); }\n /**\n Call [`Node.replace`](https://prosemirror.net/docs/ref/#model.Node.replace) with the given\n arguments. Create a successful result if it succeeds, and a\n failed one if it throws a `ReplaceError`.\n */\n static fromReplace(doc, from, to, slice) {\n try {\n return StepResult.ok(doc.replace(from, to, slice));\n }\n catch (e) {\n if (e instanceof ReplaceError)\n return StepResult.fail(e.message);\n throw e;\n }\n }\n}\n\nfunction mapFragment(fragment, f, parent) {\n let mapped = [];\n for (let i = 0; i < fragment.childCount; i++) {\n let child = fragment.child(i);\n if (child.content.size)\n child = child.copy(mapFragment(child.content, f, child));\n if (child.isInline)\n child = f(child, parent, i);\n mapped.push(child);\n }\n return Fragment.fromArray(mapped);\n}\n/**\nAdd a mark to all inline content between two positions.\n*/\nclass AddMarkStep extends Step {\n /**\n Create a mark step.\n */\n constructor(\n /**\n The start of the marked range.\n */\n from, \n /**\n The end of the marked range.\n */\n to, \n /**\n The mark to add.\n */\n mark) {\n super();\n this.from = from;\n this.to = to;\n this.mark = mark;\n }\n apply(doc) {\n let oldSlice = doc.slice(this.from, this.to), $from = doc.resolve(this.from);\n let parent = $from.node($from.sharedDepth(this.to));\n let slice = new Slice(mapFragment(oldSlice.content, (node, parent) => {\n if (!node.isAtom || !parent.type.allowsMarkType(this.mark.type))\n return node;\n return node.mark(this.mark.addToSet(node.marks));\n }, parent), oldSlice.openStart, oldSlice.openEnd);\n return StepResult.fromReplace(doc, this.from, this.to, slice);\n }\n invert() {\n return new RemoveMarkStep(this.from, this.to, this.mark);\n }\n map(mapping) {\n let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n if (from.deleted && to.deleted || from.pos >= to.pos)\n return null;\n return new AddMarkStep(from.pos, to.pos, this.mark);\n }\n merge(other) {\n if (other instanceof AddMarkStep &&\n other.mark.eq(this.mark) &&\n this.from <= other.to && this.to >= other.from)\n return new AddMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark);\n return null;\n }\n toJSON() {\n return { stepType: \"addMark\", mark: this.mark.toJSON(),\n from: this.from, to: this.to };\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\")\n throw new RangeError(\"Invalid input for AddMarkStep.fromJSON\");\n return new AddMarkStep(json.from, json.to, schema.markFromJSON(json.mark));\n }\n}\nStep.jsonID(\"addMark\", AddMarkStep);\n/**\nRemove a mark from all inline content between two positions.\n*/\nclass RemoveMarkStep extends Step {\n /**\n Create a mark-removing step.\n */\n constructor(\n /**\n The start of the unmarked range.\n */\n from, \n /**\n The end of the unmarked range.\n */\n to, \n /**\n The mark to remove.\n */\n mark) {\n super();\n this.from = from;\n this.to = to;\n this.mark = mark;\n }\n apply(doc) {\n let oldSlice = doc.slice(this.from, this.to);\n let slice = new Slice(mapFragment(oldSlice.content, node => {\n return node.mark(this.mark.removeFromSet(node.marks));\n }, doc), oldSlice.openStart, oldSlice.openEnd);\n return StepResult.fromReplace(doc, this.from, this.to, slice);\n }\n invert() {\n return new AddMarkStep(this.from, this.to, this.mark);\n }\n map(mapping) {\n let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n if (from.deleted && to.deleted || from.pos >= to.pos)\n return null;\n return new RemoveMarkStep(from.pos, to.pos, this.mark);\n }\n merge(other) {\n if (other instanceof RemoveMarkStep &&\n other.mark.eq(this.mark) &&\n this.from <= other.to && this.to >= other.from)\n return new RemoveMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark);\n return null;\n }\n toJSON() {\n return { stepType: \"removeMark\", mark: this.mark.toJSON(),\n from: this.from, to: this.to };\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\")\n throw new RangeError(\"Invalid input for RemoveMarkStep.fromJSON\");\n return new RemoveMarkStep(json.from, json.to, schema.markFromJSON(json.mark));\n }\n}\nStep.jsonID(\"removeMark\", RemoveMarkStep);\n/**\nAdd a mark to a specific node.\n*/\nclass AddNodeMarkStep extends Step {\n /**\n Create a node mark step.\n */\n constructor(\n /**\n The position of the target node.\n */\n pos, \n /**\n The mark to add.\n */\n mark) {\n super();\n this.pos = pos;\n this.mark = mark;\n }\n apply(doc) {\n let node = doc.nodeAt(this.pos);\n if (!node)\n return StepResult.fail(\"No node at mark step's position\");\n let updated = node.type.create(node.attrs, null, this.mark.addToSet(node.marks));\n return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n }\n invert(doc) {\n let node = doc.nodeAt(this.pos);\n if (node) {\n let newSet = this.mark.addToSet(node.marks);\n if (newSet.length == node.marks.length) {\n for (let i = 0; i < node.marks.length; i++)\n if (!node.marks[i].isInSet(newSet))\n return new AddNodeMarkStep(this.pos, node.marks[i]);\n return new AddNodeMarkStep(this.pos, this.mark);\n }\n }\n return new RemoveNodeMarkStep(this.pos, this.mark);\n }\n map(mapping) {\n let pos = mapping.mapResult(this.pos, 1);\n return pos.deletedAfter ? null : new AddNodeMarkStep(pos.pos, this.mark);\n }\n toJSON() {\n return { stepType: \"addNodeMark\", pos: this.pos, mark: this.mark.toJSON() };\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.pos != \"number\")\n throw new RangeError(\"Invalid input for AddNodeMarkStep.fromJSON\");\n return new AddNodeMarkStep(json.pos, schema.markFromJSON(json.mark));\n }\n}\nStep.jsonID(\"addNodeMark\", AddNodeMarkStep);\n/**\nRemove a mark from a specific node.\n*/\nclass RemoveNodeMarkStep extends Step {\n /**\n Create a mark-removing step.\n */\n constructor(\n /**\n The position of the target node.\n */\n pos, \n /**\n The mark to remove.\n */\n mark) {\n super();\n this.pos = pos;\n this.mark = mark;\n }\n apply(doc) {\n let node = doc.nodeAt(this.pos);\n if (!node)\n return StepResult.fail(\"No node at mark step's position\");\n let updated = node.type.create(node.attrs, null, this.mark.removeFromSet(node.marks));\n return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n }\n invert(doc) {\n let node = doc.nodeAt(this.pos);\n if (!node || !this.mark.isInSet(node.marks))\n return this;\n return new AddNodeMarkStep(this.pos, this.mark);\n }\n map(mapping) {\n let pos = mapping.mapResult(this.pos, 1);\n return pos.deletedAfter ? null : new RemoveNodeMarkStep(pos.pos, this.mark);\n }\n toJSON() {\n return { stepType: \"removeNodeMark\", pos: this.pos, mark: this.mark.toJSON() };\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.pos != \"number\")\n throw new RangeError(\"Invalid input for RemoveNodeMarkStep.fromJSON\");\n return new RemoveNodeMarkStep(json.pos, schema.markFromJSON(json.mark));\n }\n}\nStep.jsonID(\"removeNodeMark\", RemoveNodeMarkStep);\n\n/**\nReplace a part of the document with a slice of new content.\n*/\nclass ReplaceStep extends Step {\n /**\n The given `slice` should fit the 'gap' between `from` and\n `to`—the depths must line up, and the surrounding nodes must be\n able to be joined with the open sides of the slice. When\n `structure` is true, the step will fail if the content between\n from and to is not just a sequence of closing and then opening\n tokens (this is to guard against rebased replace steps\n overwriting something they weren't supposed to).\n */\n constructor(\n /**\n The start position of the replaced range.\n */\n from, \n /**\n The end position of the replaced range.\n */\n to, \n /**\n The slice to insert.\n */\n slice, \n /**\n @internal\n */\n structure = false) {\n super();\n this.from = from;\n this.to = to;\n this.slice = slice;\n this.structure = structure;\n }\n apply(doc) {\n if (this.structure && contentBetween(doc, this.from, this.to))\n return StepResult.fail(\"Structure replace would overwrite content\");\n return StepResult.fromReplace(doc, this.from, this.to, this.slice);\n }\n getMap() {\n return new StepMap([this.from, this.to - this.from, this.slice.size]);\n }\n invert(doc) {\n return new ReplaceStep(this.from, this.from + this.slice.size, doc.slice(this.from, this.to));\n }\n map(mapping) {\n let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n if (from.deletedAcross && to.deletedAcross)\n return null;\n return new ReplaceStep(from.pos, Math.max(from.pos, to.pos), this.slice, this.structure);\n }\n merge(other) {\n if (!(other instanceof ReplaceStep) || other.structure || this.structure)\n return null;\n if (this.from + this.slice.size == other.from && !this.slice.openEnd && !other.slice.openStart) {\n let slice = this.slice.size + other.slice.size == 0 ? Slice.empty\n : new Slice(this.slice.content.append(other.slice.content), this.slice.openStart, other.slice.openEnd);\n return new ReplaceStep(this.from, this.to + (other.to - other.from), slice, this.structure);\n }\n else if (other.to == this.from && !this.slice.openStart && !other.slice.openEnd) {\n let slice = this.slice.size + other.slice.size == 0 ? Slice.empty\n : new Slice(other.slice.content.append(this.slice.content), other.slice.openStart, this.slice.openEnd);\n return new ReplaceStep(other.from, this.to, slice, this.structure);\n }\n else {\n return null;\n }\n }\n toJSON() {\n let json = { stepType: \"replace\", from: this.from, to: this.to };\n if (this.slice.size)\n json.slice = this.slice.toJSON();\n if (this.structure)\n json.structure = true;\n return json;\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\")\n throw new RangeError(\"Invalid input for ReplaceStep.fromJSON\");\n return new ReplaceStep(json.from, json.to, Slice.fromJSON(schema, json.slice), !!json.structure);\n }\n}\nStep.jsonID(\"replace\", ReplaceStep);\n/**\nReplace a part of the document with a slice of content, but\npreserve a range of the replaced content by moving it into the\nslice.\n*/\nclass ReplaceAroundStep extends Step {\n /**\n Create a replace-around step with the given range and gap.\n `insert` should be the point in the slice into which the content\n of the gap should be moved. `structure` has the same meaning as\n it has in the [`ReplaceStep`](https://prosemirror.net/docs/ref/#transform.ReplaceStep) class.\n */\n constructor(\n /**\n The start position of the replaced range.\n */\n from, \n /**\n The end position of the replaced range.\n */\n to, \n /**\n The start of preserved range.\n */\n gapFrom, \n /**\n The end of preserved range.\n */\n gapTo, \n /**\n The slice to insert.\n */\n slice, \n /**\n The position in the slice where the preserved range should be\n inserted.\n */\n insert, \n /**\n @internal\n */\n structure = false) {\n super();\n this.from = from;\n this.to = to;\n this.gapFrom = gapFrom;\n this.gapTo = gapTo;\n this.slice = slice;\n this.insert = insert;\n this.structure = structure;\n }\n apply(doc) {\n if (this.structure && (contentBetween(doc, this.from, this.gapFrom) ||\n contentBetween(doc, this.gapTo, this.to)))\n return StepResult.fail(\"Structure gap-replace would overwrite content\");\n let gap = doc.slice(this.gapFrom, this.gapTo);\n if (gap.openStart || gap.openEnd)\n return StepResult.fail(\"Gap is not a flat range\");\n let inserted = this.slice.insertAt(this.insert, gap.content);\n if (!inserted)\n return StepResult.fail(\"Content does not fit in gap\");\n return StepResult.fromReplace(doc, this.from, this.to, inserted);\n }\n getMap() {\n return new StepMap([this.from, this.gapFrom - this.from, this.insert,\n this.gapTo, this.to - this.gapTo, this.slice.size - this.insert]);\n }\n invert(doc) {\n let gap = this.gapTo - this.gapFrom;\n return new ReplaceAroundStep(this.from, this.from + this.slice.size + gap, this.from + this.insert, this.from + this.insert + gap, doc.slice(this.from, this.to).removeBetween(this.gapFrom - this.from, this.gapTo - this.from), this.gapFrom - this.from, this.structure);\n }\n map(mapping) {\n let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n let gapFrom = this.from == this.gapFrom ? from.pos : mapping.map(this.gapFrom, -1);\n let gapTo = this.to == this.gapTo ? to.pos : mapping.map(this.gapTo, 1);\n if ((from.deletedAcross && to.deletedAcross) || gapFrom < from.pos || gapTo > to.pos)\n return null;\n return new ReplaceAroundStep(from.pos, to.pos, gapFrom, gapTo, this.slice, this.insert, this.structure);\n }\n toJSON() {\n let json = { stepType: \"replaceAround\", from: this.from, to: this.to,\n gapFrom: this.gapFrom, gapTo: this.gapTo, insert: this.insert };\n if (this.slice.size)\n json.slice = this.slice.toJSON();\n if (this.structure)\n json.structure = true;\n return json;\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\" ||\n typeof json.gapFrom != \"number\" || typeof json.gapTo != \"number\" || typeof json.insert != \"number\")\n throw new RangeError(\"Invalid input for ReplaceAroundStep.fromJSON\");\n return new ReplaceAroundStep(json.from, json.to, json.gapFrom, json.gapTo, Slice.fromJSON(schema, json.slice), json.insert, !!json.structure);\n }\n}\nStep.jsonID(\"replaceAround\", ReplaceAroundStep);\nfunction contentBetween(doc, from, to) {\n let $from = doc.resolve(from), dist = to - from, depth = $from.depth;\n while (dist > 0 && depth > 0 && $from.indexAfter(depth) == $from.node(depth).childCount) {\n depth--;\n dist--;\n }\n if (dist > 0) {\n let next = $from.node(depth).maybeChild($from.indexAfter(depth));\n while (dist > 0) {\n if (!next || next.isLeaf)\n return true;\n next = next.firstChild;\n dist--;\n }\n }\n return false;\n}\n\nfunction addMark(tr, from, to, mark) {\n let removed = [], added = [];\n let removing, adding;\n tr.doc.nodesBetween(from, to, (node, pos, parent) => {\n if (!node.isInline)\n return;\n let marks = node.marks;\n if (!mark.isInSet(marks) && parent.type.allowsMarkType(mark.type)) {\n let start = Math.max(pos, from), end = Math.min(pos + node.nodeSize, to);\n let newSet = mark.addToSet(marks);\n for (let i = 0; i < marks.length; i++) {\n if (!marks[i].isInSet(newSet)) {\n if (removing && removing.to == start && removing.mark.eq(marks[i]))\n removing.to = end;\n else\n removed.push(removing = new RemoveMarkStep(start, end, marks[i]));\n }\n }\n if (adding && adding.to == start)\n adding.to = end;\n else\n added.push(adding = new AddMarkStep(start, end, mark));\n }\n });\n removed.forEach(s => tr.step(s));\n added.forEach(s => tr.step(s));\n}\nfunction removeMark(tr, from, to, mark) {\n let matched = [], step = 0;\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isInline)\n return;\n step++;\n let toRemove = null;\n if (mark instanceof MarkType) {\n let set = node.marks, found;\n while (found = mark.isInSet(set)) {\n (toRemove || (toRemove = [])).push(found);\n set = found.removeFromSet(set);\n }\n }\n else if (mark) {\n if (mark.isInSet(node.marks))\n toRemove = [mark];\n }\n else {\n toRemove = node.marks;\n }\n if (toRemove && toRemove.length) {\n let end = Math.min(pos + node.nodeSize, to);\n for (let i = 0; i < toRemove.length; i++) {\n let style = toRemove[i], found;\n for (let j = 0; j < matched.length; j++) {\n let m = matched[j];\n if (m.step == step - 1 && style.eq(matched[j].style))\n found = m;\n }\n if (found) {\n found.to = end;\n found.step = step;\n }\n else {\n matched.push({ style, from: Math.max(pos, from), to: end, step });\n }\n }\n }\n });\n matched.forEach(m => tr.step(new RemoveMarkStep(m.from, m.to, m.style)));\n}\nfunction clearIncompatible(tr, pos, parentType, match = parentType.contentMatch, clearNewlines = true) {\n let node = tr.doc.nodeAt(pos);\n let replSteps = [], cur = pos + 1;\n for (let i = 0; i < node.childCount; i++) {\n let child = node.child(i), end = cur + child.nodeSize;\n let allowed = match.matchType(child.type);\n if (!allowed) {\n replSteps.push(new ReplaceStep(cur, end, Slice.empty));\n }\n else {\n match = allowed;\n for (let j = 0; j < child.marks.length; j++)\n if (!parentType.allowsMarkType(child.marks[j].type))\n tr.step(new RemoveMarkStep(cur, end, child.marks[j]));\n if (clearNewlines && child.isText && parentType.whitespace != \"pre\") {\n let m, newline = /\\r?\\n|\\r/g, slice;\n while (m = newline.exec(child.text)) {\n if (!slice)\n slice = new Slice(Fragment.from(parentType.schema.text(\" \", parentType.allowedMarks(child.marks))), 0, 0);\n replSteps.push(new ReplaceStep(cur + m.index, cur + m.index + m[0].length, slice));\n }\n }\n }\n cur = end;\n }\n if (!match.validEnd) {\n let fill = match.fillBefore(Fragment.empty, true);\n tr.replace(cur, cur, new Slice(fill, 0, 0));\n }\n for (let i = replSteps.length - 1; i >= 0; i--)\n tr.step(replSteps[i]);\n}\n\nfunction canCut(node, start, end) {\n return (start == 0 || node.canReplace(start, node.childCount)) &&\n (end == node.childCount || node.canReplace(0, end));\n}\n/**\nTry to find a target depth to which the content in the given range\ncan be lifted. Will not go across\n[isolating](https://prosemirror.net/docs/ref/#model.NodeSpec.isolating) parent nodes.\n*/\nfunction liftTarget(range) {\n let parent = range.parent;\n let content = parent.content.cutByIndex(range.startIndex, range.endIndex);\n for (let depth = range.depth, contentBefore = 0, contentAfter = 0;; --depth) {\n let node = range.$from.node(depth);\n let index = range.$from.index(depth) + contentBefore, endIndex = range.$to.indexAfter(depth) - contentAfter;\n if (depth < range.depth && node.canReplace(index, endIndex, content))\n return depth;\n if (depth == 0 || node.type.spec.isolating || !canCut(node, index, endIndex))\n break;\n if (index)\n contentBefore = 1;\n if (endIndex < node.childCount)\n contentAfter = 1;\n }\n return null;\n}\nfunction lift(tr, range, target) {\n let { $from, $to, depth } = range;\n let gapStart = $from.before(depth + 1), gapEnd = $to.after(depth + 1);\n let start = gapStart, end = gapEnd;\n let before = Fragment.empty, openStart = 0;\n for (let d = depth, splitting = false; d > target; d--)\n if (splitting || $from.index(d) > 0) {\n splitting = true;\n before = Fragment.from($from.node(d).copy(before));\n openStart++;\n }\n else {\n start--;\n }\n let after = Fragment.empty, openEnd = 0;\n for (let d = depth, splitting = false; d > target; d--)\n if (splitting || $to.after(d + 1) < $to.end(d)) {\n splitting = true;\n after = Fragment.from($to.node(d).copy(after));\n openEnd++;\n }\n else {\n end++;\n }\n tr.step(new ReplaceAroundStep(start, end, gapStart, gapEnd, new Slice(before.append(after), openStart, openEnd), before.size - openStart, true));\n}\n/**\nTry to find a valid way to wrap the content in the given range in a\nnode of the given type. May introduce extra nodes around and inside\nthe wrapper node, if necessary. Returns null if no valid wrapping\ncould be found. When `innerRange` is given, that range's content is\nused as the content to fit into the wrapping, instead of the\ncontent of `range`.\n*/\nfunction findWrapping(range, nodeType, attrs = null, innerRange = range) {\n let around = findWrappingOutside(range, nodeType);\n let inner = around && findWrappingInside(innerRange, nodeType);\n if (!inner)\n return null;\n return around.map(withAttrs)\n .concat({ type: nodeType, attrs }).concat(inner.map(withAttrs));\n}\nfunction withAttrs(type) { return { type, attrs: null }; }\nfunction findWrappingOutside(range, type) {\n let { parent, startIndex, endIndex } = range;\n let around = parent.contentMatchAt(startIndex).findWrapping(type);\n if (!around)\n return null;\n let outer = around.length ? around[0] : type;\n return parent.canReplaceWith(startIndex, endIndex, outer) ? around : null;\n}\nfunction findWrappingInside(range, type) {\n let { parent, startIndex, endIndex } = range;\n let inner = parent.child(startIndex);\n let inside = type.contentMatch.findWrapping(inner.type);\n if (!inside)\n return null;\n let lastType = inside.length ? inside[inside.length - 1] : type;\n let innerMatch = lastType.contentMatch;\n for (let i = startIndex; innerMatch && i < endIndex; i++)\n innerMatch = innerMatch.matchType(parent.child(i).type);\n if (!innerMatch || !innerMatch.validEnd)\n return null;\n return inside;\n}\nfunction wrap(tr, range, wrappers) {\n let content = Fragment.empty;\n for (let i = wrappers.length - 1; i >= 0; i--) {\n if (content.size) {\n let match = wrappers[i].type.contentMatch.matchFragment(content);\n if (!match || !match.validEnd)\n throw new RangeError(\"Wrapper type given to Transform.wrap does not form valid content of its parent wrapper\");\n }\n content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content));\n }\n let start = range.start, end = range.end;\n tr.step(new ReplaceAroundStep(start, end, start, end, new Slice(content, 0, 0), wrappers.length, true));\n}\nfunction setBlockType(tr, from, to, type, attrs) {\n if (!type.isTextblock)\n throw new RangeError(\"Type given to setBlockType should be a textblock\");\n let mapFrom = tr.steps.length;\n tr.doc.nodesBetween(from, to, (node, pos) => {\n let attrsHere = typeof attrs == \"function\" ? attrs(node) : attrs;\n if (node.isTextblock && !node.hasMarkup(type, attrsHere) &&\n canChangeType(tr.doc, tr.mapping.slice(mapFrom).map(pos), type)) {\n let convertNewlines = null;\n if (type.schema.linebreakReplacement) {\n let pre = type.whitespace == \"pre\", supportLinebreak = !!type.contentMatch.matchType(type.schema.linebreakReplacement);\n if (pre && !supportLinebreak)\n convertNewlines = false;\n else if (!pre && supportLinebreak)\n convertNewlines = true;\n }\n // Ensure all markup that isn't allowed in the new node type is cleared\n if (convertNewlines === false)\n replaceLinebreaks(tr, node, pos, mapFrom);\n clearIncompatible(tr, tr.mapping.slice(mapFrom).map(pos, 1), type, undefined, convertNewlines === null);\n let mapping = tr.mapping.slice(mapFrom);\n let startM = mapping.map(pos, 1), endM = mapping.map(pos + node.nodeSize, 1);\n tr.step(new ReplaceAroundStep(startM, endM, startM + 1, endM - 1, new Slice(Fragment.from(type.create(attrsHere, null, node.marks)), 0, 0), 1, true));\n if (convertNewlines === true)\n replaceNewlines(tr, node, pos, mapFrom);\n return false;\n }\n });\n}\nfunction replaceNewlines(tr, node, pos, mapFrom) {\n node.forEach((child, offset) => {\n if (child.isText) {\n let m, newline = /\\r?\\n|\\r/g;\n while (m = newline.exec(child.text)) {\n let start = tr.mapping.slice(mapFrom).map(pos + 1 + offset + m.index);\n tr.replaceWith(start, start + 1, node.type.schema.linebreakReplacement.create());\n }\n }\n });\n}\nfunction replaceLinebreaks(tr, node, pos, mapFrom) {\n node.forEach((child, offset) => {\n if (child.type == child.type.schema.linebreakReplacement) {\n let start = tr.mapping.slice(mapFrom).map(pos + 1 + offset);\n tr.replaceWith(start, start + 1, node.type.schema.text(\"\\n\"));\n }\n });\n}\nfunction canChangeType(doc, pos, type) {\n let $pos = doc.resolve(pos), index = $pos.index();\n return $pos.parent.canReplaceWith(index, index + 1, type);\n}\n/**\nChange the type, attributes, and/or marks of the node at `pos`.\nWhen `type` isn't given, the existing node type is preserved,\n*/\nfunction setNodeMarkup(tr, pos, type, attrs, marks) {\n let node = tr.doc.nodeAt(pos);\n if (!node)\n throw new RangeError(\"No node at given position\");\n if (!type)\n type = node.type;\n let newNode = type.create(attrs, null, marks || node.marks);\n if (node.isLeaf)\n return tr.replaceWith(pos, pos + node.nodeSize, newNode);\n if (!type.validContent(node.content))\n throw new RangeError(\"Invalid content for node type \" + type.name);\n tr.step(new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1, pos + node.nodeSize - 1, new Slice(Fragment.from(newNode), 0, 0), 1, true));\n}\n/**\nCheck whether splitting at the given position is allowed.\n*/\nfunction canSplit(doc, pos, depth = 1, typesAfter) {\n let $pos = doc.resolve(pos), base = $pos.depth - depth;\n let innerType = (typesAfter && typesAfter[typesAfter.length - 1]) || $pos.parent;\n if (base < 0 || $pos.parent.type.spec.isolating ||\n !$pos.parent.canReplace($pos.index(), $pos.parent.childCount) ||\n !innerType.type.validContent($pos.parent.content.cutByIndex($pos.index(), $pos.parent.childCount)))\n return false;\n for (let d = $pos.depth - 1, i = depth - 2; d > base; d--, i--) {\n let node = $pos.node(d), index = $pos.index(d);\n if (node.type.spec.isolating)\n return false;\n let rest = node.content.cutByIndex(index, node.childCount);\n let overrideChild = typesAfter && typesAfter[i + 1];\n if (overrideChild)\n rest = rest.replaceChild(0, overrideChild.type.create(overrideChild.attrs));\n let after = (typesAfter && typesAfter[i]) || node;\n if (!node.canReplace(index + 1, node.childCount) || !after.type.validContent(rest))\n return false;\n }\n let index = $pos.indexAfter(base);\n let baseType = typesAfter && typesAfter[0];\n return $pos.node(base).canReplaceWith(index, index, baseType ? baseType.type : $pos.node(base + 1).type);\n}\nfunction split(tr, pos, depth = 1, typesAfter) {\n let $pos = tr.doc.resolve(pos), before = Fragment.empty, after = Fragment.empty;\n for (let d = $pos.depth, e = $pos.depth - depth, i = depth - 1; d > e; d--, i--) {\n before = Fragment.from($pos.node(d).copy(before));\n let typeAfter = typesAfter && typesAfter[i];\n after = Fragment.from(typeAfter ? typeAfter.type.create(typeAfter.attrs, after) : $pos.node(d).copy(after));\n }\n tr.step(new ReplaceStep(pos, pos, new Slice(before.append(after), depth, depth), true));\n}\n/**\nTest whether the blocks before and after a given position can be\njoined.\n*/\nfunction canJoin(doc, pos) {\n let $pos = doc.resolve(pos), index = $pos.index();\n return joinable($pos.nodeBefore, $pos.nodeAfter) &&\n $pos.parent.canReplace(index, index + 1);\n}\nfunction canAppendWithSubstitutedLinebreaks(a, b) {\n if (!b.content.size)\n a.type.compatibleContent(b.type);\n let match = a.contentMatchAt(a.childCount);\n let { linebreakReplacement } = a.type.schema;\n for (let i = 0; i < b.childCount; i++) {\n let child = b.child(i);\n let type = child.type == linebreakReplacement ? a.type.schema.nodes.text : child.type;\n match = match.matchType(type);\n if (!match)\n return false;\n if (!a.type.allowsMarks(child.marks))\n return false;\n }\n return match.validEnd;\n}\nfunction joinable(a, b) {\n return !!(a && b && !a.isLeaf && canAppendWithSubstitutedLinebreaks(a, b));\n}\n/**\nFind an ancestor of the given position that can be joined to the\nblock before (or after if `dir` is positive). Returns the joinable\npoint, if any.\n*/\nfunction joinPoint(doc, pos, dir = -1) {\n let $pos = doc.resolve(pos);\n for (let d = $pos.depth;; d--) {\n let before, after, index = $pos.index(d);\n if (d == $pos.depth) {\n before = $pos.nodeBefore;\n after = $pos.nodeAfter;\n }\n else if (dir > 0) {\n before = $pos.node(d + 1);\n index++;\n after = $pos.node(d).maybeChild(index);\n }\n else {\n before = $pos.node(d).maybeChild(index - 1);\n after = $pos.node(d + 1);\n }\n if (before && !before.isTextblock && joinable(before, after) &&\n $pos.node(d).canReplace(index, index + 1))\n return pos;\n if (d == 0)\n break;\n pos = dir < 0 ? $pos.before(d) : $pos.after(d);\n }\n}\nfunction join(tr, pos, depth) {\n let convertNewlines = null;\n let { linebreakReplacement } = tr.doc.type.schema;\n let $before = tr.doc.resolve(pos - depth), beforeType = $before.node().type;\n if (linebreakReplacement && beforeType.inlineContent) {\n let pre = beforeType.whitespace == \"pre\";\n let supportLinebreak = !!beforeType.contentMatch.matchType(linebreakReplacement);\n if (pre && !supportLinebreak)\n convertNewlines = false;\n else if (!pre && supportLinebreak)\n convertNewlines = true;\n }\n let mapFrom = tr.steps.length;\n if (convertNewlines === false) {\n let $after = tr.doc.resolve(pos + depth);\n replaceLinebreaks(tr, $after.node(), $after.before(), mapFrom);\n }\n if (beforeType.inlineContent)\n clearIncompatible(tr, pos + depth - 1, beforeType, $before.node().contentMatchAt($before.index()), convertNewlines == null);\n let mapping = tr.mapping.slice(mapFrom), start = mapping.map(pos - depth);\n tr.step(new ReplaceStep(start, mapping.map(pos + depth, -1), Slice.empty, true));\n if (convertNewlines === true) {\n let $full = tr.doc.resolve(start);\n replaceNewlines(tr, $full.node(), $full.before(), tr.steps.length);\n }\n return tr;\n}\n/**\nTry to find a point where a node of the given type can be inserted\nnear `pos`, by searching up the node hierarchy when `pos` itself\nisn't a valid place but is at the start or end of a node. Return\nnull if no position was found.\n*/\nfunction insertPoint(doc, pos, nodeType) {\n let $pos = doc.resolve(pos);\n if ($pos.parent.canReplaceWith($pos.index(), $pos.index(), nodeType))\n return pos;\n if ($pos.parentOffset == 0)\n for (let d = $pos.depth - 1; d >= 0; d--) {\n let index = $pos.index(d);\n if ($pos.node(d).canReplaceWith(index, index, nodeType))\n return $pos.before(d + 1);\n if (index > 0)\n return null;\n }\n if ($pos.parentOffset == $pos.parent.content.size)\n for (let d = $pos.depth - 1; d >= 0; d--) {\n let index = $pos.indexAfter(d);\n if ($pos.node(d).canReplaceWith(index, index, nodeType))\n return $pos.after(d + 1);\n if (index < $pos.node(d).childCount)\n return null;\n }\n return null;\n}\n/**\nFinds a position at or around the given position where the given\nslice can be inserted. Will look at parent nodes' nearest boundary\nand try there, even if the original position wasn't directly at the\nstart or end of that node. Returns null when no position was found.\n*/\nfunction dropPoint(doc, pos, slice) {\n let $pos = doc.resolve(pos);\n if (!slice.content.size)\n return pos;\n let content = slice.content;\n for (let i = 0; i < slice.openStart; i++)\n content = content.firstChild.content;\n for (let pass = 1; pass <= (slice.openStart == 0 && slice.size ? 2 : 1); pass++) {\n for (let d = $pos.depth; d >= 0; d--) {\n let bias = d == $pos.depth ? 0 : $pos.pos <= ($pos.start(d + 1) + $pos.end(d + 1)) / 2 ? -1 : 1;\n let insertPos = $pos.index(d) + (bias > 0 ? 1 : 0);\n let parent = $pos.node(d), fits = false;\n if (pass == 1) {\n fits = parent.canReplace(insertPos, insertPos, content);\n }\n else {\n let wrapping = parent.contentMatchAt(insertPos).findWrapping(content.firstChild.type);\n fits = wrapping && parent.canReplaceWith(insertPos, insertPos, wrapping[0]);\n }\n if (fits)\n return bias == 0 ? $pos.pos : bias < 0 ? $pos.before(d + 1) : $pos.after(d + 1);\n }\n }\n return null;\n}\n\n/**\n‘Fit’ a slice into a given position in the document, producing a\n[step](https://prosemirror.net/docs/ref/#transform.Step) that inserts it. Will return null if\nthere's no meaningful way to insert the slice here, or inserting it\nwould be a no-op (an empty slice over an empty range).\n*/\nfunction replaceStep(doc, from, to = from, slice = Slice.empty) {\n if (from == to && !slice.size)\n return null;\n let $from = doc.resolve(from), $to = doc.resolve(to);\n // Optimization -- avoid work if it's obvious that it's not needed.\n if (fitsTrivially($from, $to, slice))\n return new ReplaceStep(from, to, slice);\n return new Fitter($from, $to, slice).fit();\n}\nfunction fitsTrivially($from, $to, slice) {\n return !slice.openStart && !slice.openEnd && $from.start() == $to.start() &&\n $from.parent.canReplace($from.index(), $to.index(), slice.content);\n}\n// Algorithm for 'placing' the elements of a slice into a gap:\n//\n// We consider the content of each node that is open to the left to be\n// independently placeable. I.e. in <p(\"foo\"), p(\"bar\")>, when the\n// paragraph on the left is open, \"foo\" can be placed (somewhere on\n// the left side of the replacement gap) independently from p(\"bar\").\n//\n// This class tracks the state of the placement progress in the\n// following properties:\n//\n// - `frontier` holds a stack of `{type, match}` objects that\n// represent the open side of the replacement. It starts at\n// `$from`, then moves forward as content is placed, and is finally\n// reconciled with `$to`.\n//\n// - `unplaced` is a slice that represents the content that hasn't\n// been placed yet.\n//\n// - `placed` is a fragment of placed content. Its open-start value\n// is implicit in `$from`, and its open-end value in `frontier`.\nclass Fitter {\n constructor($from, $to, unplaced) {\n this.$from = $from;\n this.$to = $to;\n this.unplaced = unplaced;\n this.frontier = [];\n this.placed = Fragment.empty;\n for (let i = 0; i <= $from.depth; i++) {\n let node = $from.node(i);\n this.frontier.push({\n type: node.type,\n match: node.contentMatchAt($from.indexAfter(i))\n });\n }\n for (let i = $from.depth; i > 0; i--)\n this.placed = Fragment.from($from.node(i).copy(this.placed));\n }\n get depth() { return this.frontier.length - 1; }\n fit() {\n // As long as there's unplaced content, try to place some of it.\n // If that fails, either increase the open score of the unplaced\n // slice, or drop nodes from it, and then try again.\n while (this.unplaced.size) {\n let fit = this.findFittable();\n if (fit)\n this.placeNodes(fit);\n else\n this.openMore() || this.dropNode();\n }\n // When there's inline content directly after the frontier _and_\n // directly after `this.$to`, we must generate a `ReplaceAround`\n // step that pulls that content into the node after the frontier.\n // That means the fitting must be done to the end of the textblock\n // node after `this.$to`, not `this.$to` itself.\n let moveInline = this.mustMoveInline(), placedSize = this.placed.size - this.depth - this.$from.depth;\n let $from = this.$from, $to = this.close(moveInline < 0 ? this.$to : $from.doc.resolve(moveInline));\n if (!$to)\n return null;\n // If closing to `$to` succeeded, create a step\n let content = this.placed, openStart = $from.depth, openEnd = $to.depth;\n while (openStart && openEnd && content.childCount == 1) { // Normalize by dropping open parent nodes\n content = content.firstChild.content;\n openStart--;\n openEnd--;\n }\n let slice = new Slice(content, openStart, openEnd);\n if (moveInline > -1)\n return new ReplaceAroundStep($from.pos, moveInline, this.$to.pos, this.$to.end(), slice, placedSize);\n if (slice.size || $from.pos != this.$to.pos) // Don't generate no-op steps\n return new ReplaceStep($from.pos, $to.pos, slice);\n return null;\n }\n // Find a position on the start spine of `this.unplaced` that has\n // content that can be moved somewhere on the frontier. Returns two\n // depths, one for the slice and one for the frontier.\n findFittable() {\n let startDepth = this.unplaced.openStart;\n for (let cur = this.unplaced.content, d = 0, openEnd = this.unplaced.openEnd; d < startDepth; d++) {\n let node = cur.firstChild;\n if (cur.childCount > 1)\n openEnd = 0;\n if (node.type.spec.isolating && openEnd <= d) {\n startDepth = d;\n break;\n }\n cur = node.content;\n }\n // Only try wrapping nodes (pass 2) after finding a place without\n // wrapping failed.\n for (let pass = 1; pass <= 2; pass++) {\n for (let sliceDepth = pass == 1 ? startDepth : this.unplaced.openStart; sliceDepth >= 0; sliceDepth--) {\n let fragment, parent = null;\n if (sliceDepth) {\n parent = contentAt(this.unplaced.content, sliceDepth - 1).firstChild;\n fragment = parent.content;\n }\n else {\n fragment = this.unplaced.content;\n }\n let first = fragment.firstChild;\n for (let frontierDepth = this.depth; frontierDepth >= 0; frontierDepth--) {\n let { type, match } = this.frontier[frontierDepth], wrap, inject = null;\n // In pass 1, if the next node matches, or there is no next\n // node but the parents look compatible, we've found a\n // place.\n if (pass == 1 && (first ? match.matchType(first.type) || (inject = match.fillBefore(Fragment.from(first), false))\n : parent && type.compatibleContent(parent.type)))\n return { sliceDepth, frontierDepth, parent, inject };\n // In pass 2, look for a set of wrapping nodes that make\n // `first` fit here.\n else if (pass == 2 && first && (wrap = match.findWrapping(first.type)))\n return { sliceDepth, frontierDepth, parent, wrap };\n // Don't continue looking further up if the parent node\n // would fit here.\n if (parent && match.matchType(parent.type))\n break;\n }\n }\n }\n }\n openMore() {\n let { content, openStart, openEnd } = this.unplaced;\n let inner = contentAt(content, openStart);\n if (!inner.childCount || inner.firstChild.isLeaf)\n return false;\n this.unplaced = new Slice(content, openStart + 1, Math.max(openEnd, inner.size + openStart >= content.size - openEnd ? openStart + 1 : 0));\n return true;\n }\n dropNode() {\n let { content, openStart, openEnd } = this.unplaced;\n let inner = contentAt(content, openStart);\n if (inner.childCount <= 1 && openStart > 0) {\n let openAtEnd = content.size - openStart <= openStart + inner.size;\n this.unplaced = new Slice(dropFromFragment(content, openStart - 1, 1), openStart - 1, openAtEnd ? openStart - 1 : openEnd);\n }\n else {\n this.unplaced = new Slice(dropFromFragment(content, openStart, 1), openStart, openEnd);\n }\n }\n // Move content from the unplaced slice at `sliceDepth` to the\n // frontier node at `frontierDepth`. Close that frontier node when\n // applicable.\n placeNodes({ sliceDepth, frontierDepth, parent, inject, wrap }) {\n while (this.depth > frontierDepth)\n this.closeFrontierNode();\n if (wrap)\n for (let i = 0; i < wrap.length; i++)\n this.openFrontierNode(wrap[i]);\n let slice = this.unplaced, fragment = parent ? parent.content : slice.content;\n let openStart = slice.openStart - sliceDepth;\n let taken = 0, add = [];\n let { match, type } = this.frontier[frontierDepth];\n if (inject) {\n for (let i = 0; i < inject.childCount; i++)\n add.push(inject.child(i));\n match = match.matchFragment(inject);\n }\n // Computes the amount of (end) open nodes at the end of the\n // fragment. When 0, the parent is open, but no more. When\n // negative, nothing is open.\n let openEndCount = (fragment.size + sliceDepth) - (slice.content.size - slice.openEnd);\n // Scan over the fragment, fitting as many child nodes as\n // possible.\n while (taken < fragment.childCount) {\n let next = fragment.child(taken), matches = match.matchType(next.type);\n if (!matches)\n break;\n taken++;\n if (taken > 1 || openStart == 0 || next.content.size) { // Drop empty open nodes\n match = matches;\n add.push(closeNodeStart(next.mark(type.allowedMarks(next.marks)), taken == 1 ? openStart : 0, taken == fragment.childCount ? openEndCount : -1));\n }\n }\n let toEnd = taken == fragment.childCount;\n if (!toEnd)\n openEndCount = -1;\n this.placed = addToFragment(this.placed, frontierDepth, Fragment.from(add));\n this.frontier[frontierDepth].match = match;\n // If the parent types match, and the entire node was moved, and\n // it's not open, close this frontier node right away.\n if (toEnd && openEndCount < 0 && parent && parent.type == this.frontier[this.depth].type && this.frontier.length > 1)\n this.closeFrontierNode();\n // Add new frontier nodes for any open nodes at the end.\n for (let i = 0, cur = fragment; i < openEndCount; i++) {\n let node = cur.lastChild;\n this.frontier.push({ type: node.type, match: node.contentMatchAt(node.childCount) });\n cur = node.content;\n }\n // Update `this.unplaced`. Drop the entire node from which we\n // placed it we got to its end, otherwise just drop the placed\n // nodes.\n this.unplaced = !toEnd ? new Slice(dropFromFragment(slice.content, sliceDepth, taken), slice.openStart, slice.openEnd)\n : sliceDepth == 0 ? Slice.empty\n : new Slice(dropFromFragment(slice.content, sliceDepth - 1, 1), sliceDepth - 1, openEndCount < 0 ? slice.openEnd : sliceDepth - 1);\n }\n mustMoveInline() {\n if (!this.$to.parent.isTextblock)\n return -1;\n let top = this.frontier[this.depth], level;\n if (!top.type.isTextblock || !contentAfterFits(this.$to, this.$to.depth, top.type, top.match, false) ||\n (this.$to.depth == this.depth && (level = this.findCloseLevel(this.$to)) && level.depth == this.depth))\n return -1;\n let { depth } = this.$to, after = this.$to.after(depth);\n while (depth > 1 && after == this.$to.end(--depth))\n ++after;\n return after;\n }\n findCloseLevel($to) {\n scan: for (let i = Math.min(this.depth, $to.depth); i >= 0; i--) {\n let { match, type } = this.frontier[i];\n let dropInner = i < $to.depth && $to.end(i + 1) == $to.pos + ($to.depth - (i + 1));\n let fit = contentAfterFits($to, i, type, match, dropInner);\n if (!fit)\n continue;\n for (let d = i - 1; d >= 0; d--) {\n let { match, type } = this.frontier[d];\n let matches = contentAfterFits($to, d, type, match, true);\n if (!matches || matches.childCount)\n continue scan;\n }\n return { depth: i, fit, move: dropInner ? $to.doc.resolve($to.after(i + 1)) : $to };\n }\n }\n close($to) {\n let close = this.findCloseLevel($to);\n if (!close)\n return null;\n while (this.depth > close.depth)\n this.closeFrontierNode();\n if (close.fit.childCount)\n this.placed = addToFragment(this.placed, close.depth, close.fit);\n $to = close.move;\n for (let d = close.depth + 1; d <= $to.depth; d++) {\n let node = $to.node(d), add = node.type.contentMatch.fillBefore(node.content, true, $to.index(d));\n this.openFrontierNode(node.type, node.attrs, add);\n }\n return $to;\n }\n openFrontierNode(type, attrs = null, content) {\n let top = this.frontier[this.depth];\n top.match = top.match.matchType(type);\n this.placed = addToFragment(this.placed, this.depth, Fragment.from(type.create(attrs, content)));\n this.frontier.push({ type, match: type.contentMatch });\n }\n closeFrontierNode() {\n let open = this.frontier.pop();\n let add = open.match.fillBefore(Fragment.empty, true);\n if (add.childCount)\n this.placed = addToFragment(this.placed, this.frontier.length, add);\n }\n}\nfunction dropFromFragment(fragment, depth, count) {\n if (depth == 0)\n return fragment.cutByIndex(count, fragment.childCount);\n return fragment.replaceChild(0, fragment.firstChild.copy(dropFromFragment(fragment.firstChild.content, depth - 1, count)));\n}\nfunction addToFragment(fragment, depth, content) {\n if (depth == 0)\n return fragment.append(content);\n return fragment.replaceChild(fragment.childCount - 1, fragment.lastChild.copy(addToFragment(fragment.lastChild.content, depth - 1, content)));\n}\nfunction contentAt(fragment, depth) {\n for (let i = 0; i < depth; i++)\n fragment = fragment.firstChild.content;\n return fragment;\n}\nfunction closeNodeStart(node, openStart, openEnd) {\n if (openStart <= 0)\n return node;\n let frag = node.content;\n if (openStart > 1)\n frag = frag.replaceChild(0, closeNodeStart(frag.firstChild, openStart - 1, frag.childCount == 1 ? openEnd - 1 : 0));\n if (openStart > 0) {\n frag = node.type.contentMatch.fillBefore(frag).append(frag);\n if (openEnd <= 0)\n frag = frag.append(node.type.contentMatch.matchFragment(frag).fillBefore(Fragment.empty, true));\n }\n return node.copy(frag);\n}\nfunction contentAfterFits($to, depth, type, match, open) {\n let node = $to.node(depth), index = open ? $to.indexAfter(depth) : $to.index(depth);\n if (index == node.childCount && !type.compatibleContent(node.type))\n return null;\n let fit = match.fillBefore(node.content, true, index);\n return fit && !invalidMarks(type, node.content, index) ? fit : null;\n}\nfunction invalidMarks(type, fragment, start) {\n for (let i = start; i < fragment.childCount; i++)\n if (!type.allowsMarks(fragment.child(i).marks))\n return true;\n return false;\n}\nfunction definesContent(type) {\n return type.spec.defining || type.spec.definingForContent;\n}\nfunction replaceRange(tr, from, to, slice) {\n if (!slice.size)\n return tr.deleteRange(from, to);\n let $from = tr.doc.resolve(from), $to = tr.doc.resolve(to);\n if (fitsTrivially($from, $to, slice))\n return tr.step(new ReplaceStep(from, to, slice));\n let targetDepths = coveredDepths($from, $to);\n // Can't replace the whole document, so remove 0 if it's present\n if (targetDepths[targetDepths.length - 1] == 0)\n targetDepths.pop();\n // Negative numbers represent not expansion over the whole node at\n // that depth, but replacing from $from.before(-D) to $to.pos.\n let preferredTarget = -($from.depth + 1);\n targetDepths.unshift(preferredTarget);\n // This loop picks a preferred target depth, if one of the covering\n // depths is not outside of a defining node, and adds negative\n // depths for any depth that has $from at its start and does not\n // cross a defining node.\n for (let d = $from.depth, pos = $from.pos - 1; d > 0; d--, pos--) {\n let spec = $from.node(d).type.spec;\n if (spec.defining || spec.definingAsContext || spec.isolating)\n break;\n if (targetDepths.indexOf(d) > -1)\n preferredTarget = d;\n else if ($from.before(d) == pos)\n targetDepths.splice(1, 0, -d);\n }\n // Try to fit each possible depth of the slice into each possible\n // target depth, starting with the preferred depths.\n let preferredTargetIndex = targetDepths.indexOf(preferredTarget);\n let leftNodes = [], preferredDepth = slice.openStart;\n for (let content = slice.content, i = 0;; i++) {\n let node = content.firstChild;\n leftNodes.push(node);\n if (i == slice.openStart)\n break;\n content = node.content;\n }\n // Back up preferredDepth to cover defining textblocks directly\n // above it, possibly skipping a non-defining textblock.\n for (let d = preferredDepth - 1; d >= 0; d--) {\n let leftNode = leftNodes[d], def = definesContent(leftNode.type);\n if (def && !leftNode.sameMarkup($from.node(Math.abs(preferredTarget) - 1)))\n preferredDepth = d;\n else if (def || !leftNode.type.isTextblock)\n break;\n }\n for (let j = slice.openStart; j >= 0; j--) {\n let openDepth = (j + preferredDepth + 1) % (slice.openStart + 1);\n let insert = leftNodes[openDepth];\n if (!insert)\n continue;\n for (let i = 0; i < targetDepths.length; i++) {\n // Loop over possible expansion levels, starting with the\n // preferred one\n let targetDepth = targetDepths[(i + preferredTargetIndex) % targetDepths.length], expand = true;\n if (targetDepth < 0) {\n expand = false;\n targetDepth = -targetDepth;\n }\n let parent = $from.node(targetDepth - 1), index = $from.index(targetDepth - 1);\n if (parent.canReplaceWith(index, index, insert.type, insert.marks))\n return tr.replace($from.before(targetDepth), expand ? $to.after(targetDepth) : to, new Slice(closeFragment(slice.content, 0, slice.openStart, openDepth), openDepth, slice.openEnd));\n }\n }\n let startSteps = tr.steps.length;\n for (let i = targetDepths.length - 1; i >= 0; i--) {\n tr.replace(from, to, slice);\n if (tr.steps.length > startSteps)\n break;\n let depth = targetDepths[i];\n if (depth < 0)\n continue;\n from = $from.before(depth);\n to = $to.after(depth);\n }\n}\nfunction closeFragment(fragment, depth, oldOpen, newOpen, parent) {\n if (depth < oldOpen) {\n let first = fragment.firstChild;\n fragment = fragment.replaceChild(0, first.copy(closeFragment(first.content, depth + 1, oldOpen, newOpen, first)));\n }\n if (depth > newOpen) {\n let match = parent.contentMatchAt(0);\n let start = match.fillBefore(fragment).append(fragment);\n fragment = start.append(match.matchFragment(start).fillBefore(Fragment.empty, true));\n }\n return fragment;\n}\nfunction replaceRangeWith(tr, from, to, node) {\n if (!node.isInline && from == to && tr.doc.resolve(from).parent.content.size) {\n let point = insertPoint(tr.doc, from, node.type);\n if (point != null)\n from = to = point;\n }\n tr.replaceRange(from, to, new Slice(Fragment.from(node), 0, 0));\n}\nfunction deleteRange(tr, from, to) {\n let $from = tr.doc.resolve(from), $to = tr.doc.resolve(to);\n let covered = coveredDepths($from, $to);\n for (let i = 0; i < covered.length; i++) {\n let depth = covered[i], last = i == covered.length - 1;\n if ((last && depth == 0) || $from.node(depth).type.contentMatch.validEnd)\n return tr.delete($from.start(depth), $to.end(depth));\n if (depth > 0 && (last || $from.node(depth - 1).canReplace($from.index(depth - 1), $to.indexAfter(depth - 1))))\n return tr.delete($from.before(depth), $to.after(depth));\n }\n for (let d = 1; d <= $from.depth && d <= $to.depth; d++) {\n if (from - $from.start(d) == $from.depth - d && to > $from.end(d) && $to.end(d) - to != $to.depth - d &&\n $from.start(d - 1) == $to.start(d - 1) && $from.node(d - 1).canReplace($from.index(d - 1), $to.index(d - 1)))\n return tr.delete($from.before(d), to);\n }\n tr.delete(from, to);\n}\n// Returns an array of all depths for which $from - $to spans the\n// whole content of the nodes at that depth.\nfunction coveredDepths($from, $to) {\n let result = [], minDepth = Math.min($from.depth, $to.depth);\n for (let d = minDepth; d >= 0; d--) {\n let start = $from.start(d);\n if (start < $from.pos - ($from.depth - d) ||\n $to.end(d) > $to.pos + ($to.depth - d) ||\n $from.node(d).type.spec.isolating ||\n $to.node(d).type.spec.isolating)\n break;\n if (start == $to.start(d) ||\n (d == $from.depth && d == $to.depth && $from.parent.inlineContent && $to.parent.inlineContent &&\n d && $to.start(d - 1) == start - 1))\n result.push(d);\n }\n return result;\n}\n\n/**\nUpdate an attribute in a specific node.\n*/\nclass AttrStep extends Step {\n /**\n Construct an attribute step.\n */\n constructor(\n /**\n The position of the target node.\n */\n pos, \n /**\n The attribute to set.\n */\n attr, \n // The attribute's new value.\n value) {\n super();\n this.pos = pos;\n this.attr = attr;\n this.value = value;\n }\n apply(doc) {\n let node = doc.nodeAt(this.pos);\n if (!node)\n return StepResult.fail(\"No node at attribute step's position\");\n let attrs = Object.create(null);\n for (let name in node.attrs)\n attrs[name] = node.attrs[name];\n attrs[this.attr] = this.value;\n let updated = node.type.create(attrs, null, node.marks);\n return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n }\n getMap() {\n return StepMap.empty;\n }\n invert(doc) {\n return new AttrStep(this.pos, this.attr, doc.nodeAt(this.pos).attrs[this.attr]);\n }\n map(mapping) {\n let pos = mapping.mapResult(this.pos, 1);\n return pos.deletedAfter ? null : new AttrStep(pos.pos, this.attr, this.value);\n }\n toJSON() {\n return { stepType: \"attr\", pos: this.pos, attr: this.attr, value: this.value };\n }\n static fromJSON(schema, json) {\n if (typeof json.pos != \"number\" || typeof json.attr != \"string\")\n throw new RangeError(\"Invalid input for AttrStep.fromJSON\");\n return new AttrStep(json.pos, json.attr, json.value);\n }\n}\nStep.jsonID(\"attr\", AttrStep);\n/**\nUpdate an attribute in the doc node.\n*/\nclass DocAttrStep extends Step {\n /**\n Construct an attribute step.\n */\n constructor(\n /**\n The attribute to set.\n */\n attr, \n // The attribute's new value.\n value) {\n super();\n this.attr = attr;\n this.value = value;\n }\n apply(doc) {\n let attrs = Object.create(null);\n for (let name in doc.attrs)\n attrs[name] = doc.attrs[name];\n attrs[this.attr] = this.value;\n let updated = doc.type.create(attrs, doc.content, doc.marks);\n return StepResult.ok(updated);\n }\n getMap() {\n return StepMap.empty;\n }\n invert(doc) {\n return new DocAttrStep(this.attr, doc.attrs[this.attr]);\n }\n map(mapping) {\n return this;\n }\n toJSON() {\n return { stepType: \"docAttr\", attr: this.attr, value: this.value };\n }\n static fromJSON(schema, json) {\n if (typeof json.attr != \"string\")\n throw new RangeError(\"Invalid input for DocAttrStep.fromJSON\");\n return new DocAttrStep(json.attr, json.value);\n }\n}\nStep.jsonID(\"docAttr\", DocAttrStep);\n\n/**\n@internal\n*/\nlet TransformError = class extends Error {\n};\nTransformError = function TransformError(message) {\n let err = Error.call(this, message);\n err.__proto__ = TransformError.prototype;\n return err;\n};\nTransformError.prototype = Object.create(Error.prototype);\nTransformError.prototype.constructor = TransformError;\nTransformError.prototype.name = \"TransformError\";\n/**\nAbstraction to build up and track an array of\n[steps](https://prosemirror.net/docs/ref/#transform.Step) representing a document transformation.\n\nMost transforming methods return the `Transform` object itself, so\nthat they can be chained.\n*/\nclass Transform {\n /**\n Create a transform that starts with the given document.\n */\n constructor(\n /**\n The current document (the result of applying the steps in the\n transform).\n */\n doc) {\n this.doc = doc;\n /**\n The steps in this transform.\n */\n this.steps = [];\n /**\n The documents before each of the steps.\n */\n this.docs = [];\n /**\n A mapping with the maps for each of the steps in this transform.\n */\n this.mapping = new Mapping;\n }\n /**\n The starting document.\n */\n get before() { return this.docs.length ? this.docs[0] : this.doc; }\n /**\n Apply a new step in this transform, saving the result. Throws an\n error when the step fails.\n */\n step(step) {\n let result = this.maybeStep(step);\n if (result.failed)\n throw new TransformError(result.failed);\n return this;\n }\n /**\n Try to apply a step in this transformation, ignoring it if it\n fails. Returns the step result.\n */\n maybeStep(step) {\n let result = step.apply(this.doc);\n if (!result.failed)\n this.addStep(step, result.doc);\n return result;\n }\n /**\n True when the document has been changed (when there are any\n steps).\n */\n get docChanged() {\n return this.steps.length > 0;\n }\n /**\n @internal\n */\n addStep(step, doc) {\n this.docs.push(this.doc);\n this.steps.push(step);\n this.mapping.appendMap(step.getMap());\n this.doc = doc;\n }\n /**\n Replace the part of the document between `from` and `to` with the\n given `slice`.\n */\n replace(from, to = from, slice = Slice.empty) {\n let step = replaceStep(this.doc, from, to, slice);\n if (step)\n this.step(step);\n return this;\n }\n /**\n Replace the given range with the given content, which may be a\n fragment, node, or array of nodes.\n */\n replaceWith(from, to, content) {\n return this.replace(from, to, new Slice(Fragment.from(content), 0, 0));\n }\n /**\n Delete the content between the given positions.\n */\n delete(from, to) {\n return this.replace(from, to, Slice.empty);\n }\n /**\n Insert the given content at the given position.\n */\n insert(pos, content) {\n return this.replaceWith(pos, pos, content);\n }\n /**\n Replace a range of the document with a given slice, using\n `from`, `to`, and the slice's\n [`openStart`](https://prosemirror.net/docs/ref/#model.Slice.openStart) property as hints, rather\n than fixed start and end points. This method may grow the\n replaced area or close open nodes in the slice in order to get a\n fit that is more in line with WYSIWYG expectations, by dropping\n fully covered parent nodes of the replaced region when they are\n marked [non-defining as\n context](https://prosemirror.net/docs/ref/#model.NodeSpec.definingAsContext), or including an\n open parent node from the slice that _is_ marked as [defining\n its content](https://prosemirror.net/docs/ref/#model.NodeSpec.definingForContent).\n \n This is the method, for example, to handle paste. The similar\n [`replace`](https://prosemirror.net/docs/ref/#transform.Transform.replace) method is a more\n primitive tool which will _not_ move the start and end of its given\n range, and is useful in situations where you need more precise\n control over what happens.\n */\n replaceRange(from, to, slice) {\n replaceRange(this, from, to, slice);\n return this;\n }\n /**\n Replace the given range with a node, but use `from` and `to` as\n hints, rather than precise positions. When from and to are the same\n and are at the start or end of a parent node in which the given\n node doesn't fit, this method may _move_ them out towards a parent\n that does allow the given node to be placed. When the given range\n completely covers a parent node, this method may completely replace\n that parent node.\n */\n replaceRangeWith(from, to, node) {\n replaceRangeWith(this, from, to, node);\n return this;\n }\n /**\n Delete the given range, expanding it to cover fully covered\n parent nodes until a valid replace is found.\n */\n deleteRange(from, to) {\n deleteRange(this, from, to);\n return this;\n }\n /**\n Split the content in the given range off from its parent, if there\n is sibling content before or after it, and move it up the tree to\n the depth specified by `target`. You'll probably want to use\n [`liftTarget`](https://prosemirror.net/docs/ref/#transform.liftTarget) to compute `target`, to make\n sure the lift is valid.\n */\n lift(range, target) {\n lift(this, range, target);\n return this;\n }\n /**\n Join the blocks around the given position. If depth is 2, their\n last and first siblings are also joined, and so on.\n */\n join(pos, depth = 1) {\n join(this, pos, depth);\n return this;\n }\n /**\n Wrap the given [range](https://prosemirror.net/docs/ref/#model.NodeRange) in the given set of wrappers.\n The wrappers are assumed to be valid in this position, and should\n probably be computed with [`findWrapping`](https://prosemirror.net/docs/ref/#transform.findWrapping).\n */\n wrap(range, wrappers) {\n wrap(this, range, wrappers);\n return this;\n }\n /**\n Set the type of all textblocks (partly) between `from` and `to` to\n the given node type with the given attributes.\n */\n setBlockType(from, to = from, type, attrs = null) {\n setBlockType(this, from, to, type, attrs);\n return this;\n }\n /**\n Change the type, attributes, and/or marks of the node at `pos`.\n When `type` isn't given, the existing node type is preserved,\n */\n setNodeMarkup(pos, type, attrs = null, marks) {\n setNodeMarkup(this, pos, type, attrs, marks);\n return this;\n }\n /**\n Set a single attribute on a given node to a new value.\n The `pos` addresses the document content. Use `setDocAttribute`\n to set attributes on the document itself.\n */\n setNodeAttribute(pos, attr, value) {\n this.step(new AttrStep(pos, attr, value));\n return this;\n }\n /**\n Set a single attribute on the document to a new value.\n */\n setDocAttribute(attr, value) {\n this.step(new DocAttrStep(attr, value));\n return this;\n }\n /**\n Add a mark to the node at position `pos`.\n */\n addNodeMark(pos, mark) {\n this.step(new AddNodeMarkStep(pos, mark));\n return this;\n }\n /**\n Remove a mark (or all marks of the given type) from the node at\n position `pos`.\n */\n removeNodeMark(pos, mark) {\n let node = this.doc.nodeAt(pos);\n if (!node)\n throw new RangeError(\"No node at position \" + pos);\n if (mark instanceof Mark) {\n if (mark.isInSet(node.marks))\n this.step(new RemoveNodeMarkStep(pos, mark));\n }\n else {\n let set = node.marks, found, steps = [];\n while (found = mark.isInSet(set)) {\n steps.push(new RemoveNodeMarkStep(pos, found));\n set = found.removeFromSet(set);\n }\n for (let i = steps.length - 1; i >= 0; i--)\n this.step(steps[i]);\n }\n return this;\n }\n /**\n Split the node at the given position, and optionally, if `depth` is\n greater than one, any number of nodes above that. By default, the\n parts split off will inherit the node type of the original node.\n This can be changed by passing an array of types and attributes to\n use after the split (with the outermost nodes coming first).\n */\n split(pos, depth = 1, typesAfter) {\n split(this, pos, depth, typesAfter);\n return this;\n }\n /**\n Add the given mark to the inline content between `from` and `to`.\n */\n addMark(from, to, mark) {\n addMark(this, from, to, mark);\n return this;\n }\n /**\n Remove marks from inline nodes between `from` and `to`. When\n `mark` is a single mark, remove precisely that mark. When it is\n a mark type, remove all marks of that type. When it is null,\n remove all marks of any type.\n */\n removeMark(from, to, mark) {\n removeMark(this, from, to, mark);\n return this;\n }\n /**\n Removes all marks and nodes from the content of the node at\n `pos` that don't match the given new parent node type. Accepts\n an optional starting [content match](https://prosemirror.net/docs/ref/#model.ContentMatch) as\n third argument.\n */\n clearIncompatible(pos, parentType, match) {\n clearIncompatible(this, pos, parentType, match);\n return this;\n }\n}\n\nexport { AddMarkStep, AddNodeMarkStep, AttrStep, DocAttrStep, MapResult, Mapping, RemoveMarkStep, RemoveNodeMarkStep, ReplaceAroundStep, ReplaceStep, Step, StepMap, StepResult, Transform, TransformError, canJoin, canSplit, dropPoint, findWrapping, insertPoint, joinPoint, liftTarget, replaceStep };\n","import { Slice, Fragment, Mark, Node } from 'prosemirror-model';\nimport { ReplaceStep, ReplaceAroundStep, Transform } from 'prosemirror-transform';\n\nconst classesById = Object.create(null);\n/**\nSuperclass for editor selections. Every selection type should\nextend this. Should not be instantiated directly.\n*/\nclass Selection {\n /**\n Initialize a selection with the head and anchor and ranges. If no\n ranges are given, constructs a single range across `$anchor` and\n `$head`.\n */\n constructor(\n /**\n The resolved anchor of the selection (the side that stays in\n place when the selection is modified).\n */\n $anchor, \n /**\n The resolved head of the selection (the side that moves when\n the selection is modified).\n */\n $head, ranges) {\n this.$anchor = $anchor;\n this.$head = $head;\n this.ranges = ranges || [new SelectionRange($anchor.min($head), $anchor.max($head))];\n }\n /**\n The selection's anchor, as an unresolved position.\n */\n get anchor() { return this.$anchor.pos; }\n /**\n The selection's head.\n */\n get head() { return this.$head.pos; }\n /**\n The lower bound of the selection's main range.\n */\n get from() { return this.$from.pos; }\n /**\n The upper bound of the selection's main range.\n */\n get to() { return this.$to.pos; }\n /**\n The resolved lower bound of the selection's main range.\n */\n get $from() {\n return this.ranges[0].$from;\n }\n /**\n The resolved upper bound of the selection's main range.\n */\n get $to() {\n return this.ranges[0].$to;\n }\n /**\n Indicates whether the selection contains any content.\n */\n get empty() {\n let ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++)\n if (ranges[i].$from.pos != ranges[i].$to.pos)\n return false;\n return true;\n }\n /**\n Get the content of this selection as a slice.\n */\n content() {\n return this.$from.doc.slice(this.from, this.to, true);\n }\n /**\n Replace the selection with a slice or, if no slice is given,\n delete the selection. Will append to the given transaction.\n */\n replace(tr, content = Slice.empty) {\n // Put the new selection at the position after the inserted\n // content. When that ended in an inline node, search backwards,\n // to get the position after that node. If not, search forward.\n let lastNode = content.content.lastChild, lastParent = null;\n for (let i = 0; i < content.openEnd; i++) {\n lastParent = lastNode;\n lastNode = lastNode.lastChild;\n }\n let mapFrom = tr.steps.length, ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n tr.replaceRange(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content);\n if (i == 0)\n selectionToInsertionEnd(tr, mapFrom, (lastNode ? lastNode.isInline : lastParent && lastParent.isTextblock) ? -1 : 1);\n }\n }\n /**\n Replace the selection with the given node, appending the changes\n to the given transaction.\n */\n replaceWith(tr, node) {\n let mapFrom = tr.steps.length, ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n let from = mapping.map($from.pos), to = mapping.map($to.pos);\n if (i) {\n tr.deleteRange(from, to);\n }\n else {\n tr.replaceRangeWith(from, to, node);\n selectionToInsertionEnd(tr, mapFrom, node.isInline ? -1 : 1);\n }\n }\n }\n /**\n Find a valid cursor or leaf node selection starting at the given\n position and searching back if `dir` is negative, and forward if\n positive. When `textOnly` is true, only consider cursor\n selections. Will return null when no valid selection position is\n found.\n */\n static findFrom($pos, dir, textOnly = false) {\n let inner = $pos.parent.inlineContent ? new TextSelection($pos)\n : findSelectionIn($pos.node(0), $pos.parent, $pos.pos, $pos.index(), dir, textOnly);\n if (inner)\n return inner;\n for (let depth = $pos.depth - 1; depth >= 0; depth--) {\n let found = dir < 0\n ? findSelectionIn($pos.node(0), $pos.node(depth), $pos.before(depth + 1), $pos.index(depth), dir, textOnly)\n : findSelectionIn($pos.node(0), $pos.node(depth), $pos.after(depth + 1), $pos.index(depth) + 1, dir, textOnly);\n if (found)\n return found;\n }\n return null;\n }\n /**\n Find a valid cursor or leaf node selection near the given\n position. Searches forward first by default, but if `bias` is\n negative, it will search backwards first.\n */\n static near($pos, bias = 1) {\n return this.findFrom($pos, bias) || this.findFrom($pos, -bias) || new AllSelection($pos.node(0));\n }\n /**\n Find the cursor or leaf node selection closest to the start of\n the given document. Will return an\n [`AllSelection`](https://prosemirror.net/docs/ref/#state.AllSelection) if no valid position\n exists.\n */\n static atStart(doc) {\n return findSelectionIn(doc, doc, 0, 0, 1) || new AllSelection(doc);\n }\n /**\n Find the cursor or leaf node selection closest to the end of the\n given document.\n */\n static atEnd(doc) {\n return findSelectionIn(doc, doc, doc.content.size, doc.childCount, -1) || new AllSelection(doc);\n }\n /**\n Deserialize the JSON representation of a selection. Must be\n implemented for custom classes (as a static class method).\n */\n static fromJSON(doc, json) {\n if (!json || !json.type)\n throw new RangeError(\"Invalid input for Selection.fromJSON\");\n let cls = classesById[json.type];\n if (!cls)\n throw new RangeError(`No selection type ${json.type} defined`);\n return cls.fromJSON(doc, json);\n }\n /**\n To be able to deserialize selections from JSON, custom selection\n classes must register themselves with an ID string, so that they\n can be disambiguated. Try to pick something that's unlikely to\n clash with classes from other modules.\n */\n static jsonID(id, selectionClass) {\n if (id in classesById)\n throw new RangeError(\"Duplicate use of selection JSON ID \" + id);\n classesById[id] = selectionClass;\n selectionClass.prototype.jsonID = id;\n return selectionClass;\n }\n /**\n Get a [bookmark](https://prosemirror.net/docs/ref/#state.SelectionBookmark) for this selection,\n which is a value that can be mapped without having access to a\n current document, and later resolved to a real selection for a\n given document again. (This is used mostly by the history to\n track and restore old selections.) The default implementation of\n this method just converts the selection to a text selection and\n returns the bookmark for that.\n */\n getBookmark() {\n return TextSelection.between(this.$anchor, this.$head).getBookmark();\n }\n}\nSelection.prototype.visible = true;\n/**\nRepresents a selected range in a document.\n*/\nclass SelectionRange {\n /**\n Create a range.\n */\n constructor(\n /**\n The lower bound of the range.\n */\n $from, \n /**\n The upper bound of the range.\n */\n $to) {\n this.$from = $from;\n this.$to = $to;\n }\n}\nlet warnedAboutTextSelection = false;\nfunction checkTextSelection($pos) {\n if (!warnedAboutTextSelection && !$pos.parent.inlineContent) {\n warnedAboutTextSelection = true;\n console[\"warn\"](\"TextSelection endpoint not pointing into a node with inline content (\" + $pos.parent.type.name + \")\");\n }\n}\n/**\nA text selection represents a classical editor selection, with a\nhead (the moving side) and anchor (immobile side), both of which\npoint into textblock nodes. It can be empty (a regular cursor\nposition).\n*/\nclass TextSelection extends Selection {\n /**\n Construct a text selection between the given points.\n */\n constructor($anchor, $head = $anchor) {\n checkTextSelection($anchor);\n checkTextSelection($head);\n super($anchor, $head);\n }\n /**\n Returns a resolved position if this is a cursor selection (an\n empty text selection), and null otherwise.\n */\n get $cursor() { return this.$anchor.pos == this.$head.pos ? this.$head : null; }\n map(doc, mapping) {\n let $head = doc.resolve(mapping.map(this.head));\n if (!$head.parent.inlineContent)\n return Selection.near($head);\n let $anchor = doc.resolve(mapping.map(this.anchor));\n return new TextSelection($anchor.parent.inlineContent ? $anchor : $head, $head);\n }\n replace(tr, content = Slice.empty) {\n super.replace(tr, content);\n if (content == Slice.empty) {\n let marks = this.$from.marksAcross(this.$to);\n if (marks)\n tr.ensureMarks(marks);\n }\n }\n eq(other) {\n return other instanceof TextSelection && other.anchor == this.anchor && other.head == this.head;\n }\n getBookmark() {\n return new TextBookmark(this.anchor, this.head);\n }\n toJSON() {\n return { type: \"text\", anchor: this.anchor, head: this.head };\n }\n /**\n @internal\n */\n static fromJSON(doc, json) {\n if (typeof json.anchor != \"number\" || typeof json.head != \"number\")\n throw new RangeError(\"Invalid input for TextSelection.fromJSON\");\n return new TextSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n }\n /**\n Create a text selection from non-resolved positions.\n */\n static create(doc, anchor, head = anchor) {\n let $anchor = doc.resolve(anchor);\n return new this($anchor, head == anchor ? $anchor : doc.resolve(head));\n }\n /**\n Return a text selection that spans the given positions or, if\n they aren't text positions, find a text selection near them.\n `bias` determines whether the method searches forward (default)\n or backwards (negative number) first. Will fall back to calling\n [`Selection.near`](https://prosemirror.net/docs/ref/#state.Selection^near) when the document\n doesn't contain a valid text position.\n */\n static between($anchor, $head, bias) {\n let dPos = $anchor.pos - $head.pos;\n if (!bias || dPos)\n bias = dPos >= 0 ? 1 : -1;\n if (!$head.parent.inlineContent) {\n let found = Selection.findFrom($head, bias, true) || Selection.findFrom($head, -bias, true);\n if (found)\n $head = found.$head;\n else\n return Selection.near($head, bias);\n }\n if (!$anchor.parent.inlineContent) {\n if (dPos == 0) {\n $anchor = $head;\n }\n else {\n $anchor = (Selection.findFrom($anchor, -bias, true) || Selection.findFrom($anchor, bias, true)).$anchor;\n if (($anchor.pos < $head.pos) != (dPos < 0))\n $anchor = $head;\n }\n }\n return new TextSelection($anchor, $head);\n }\n}\nSelection.jsonID(\"text\", TextSelection);\nclass TextBookmark {\n constructor(anchor, head) {\n this.anchor = anchor;\n this.head = head;\n }\n map(mapping) {\n return new TextBookmark(mapping.map(this.anchor), mapping.map(this.head));\n }\n resolve(doc) {\n return TextSelection.between(doc.resolve(this.anchor), doc.resolve(this.head));\n }\n}\n/**\nA node selection is a selection that points at a single node. All\nnodes marked [selectable](https://prosemirror.net/docs/ref/#model.NodeSpec.selectable) can be the\ntarget of a node selection. In such a selection, `from` and `to`\npoint directly before and after the selected node, `anchor` equals\n`from`, and `head` equals `to`..\n*/\nclass NodeSelection extends Selection {\n /**\n Create a node selection. Does not verify the validity of its\n argument.\n */\n constructor($pos) {\n let node = $pos.nodeAfter;\n let $end = $pos.node(0).resolve($pos.pos + node.nodeSize);\n super($pos, $end);\n this.node = node;\n }\n map(doc, mapping) {\n let { deleted, pos } = mapping.mapResult(this.anchor);\n let $pos = doc.resolve(pos);\n if (deleted)\n return Selection.near($pos);\n return new NodeSelection($pos);\n }\n content() {\n return new Slice(Fragment.from(this.node), 0, 0);\n }\n eq(other) {\n return other instanceof NodeSelection && other.anchor == this.anchor;\n }\n toJSON() {\n return { type: \"node\", anchor: this.anchor };\n }\n getBookmark() { return new NodeBookmark(this.anchor); }\n /**\n @internal\n */\n static fromJSON(doc, json) {\n if (typeof json.anchor != \"number\")\n throw new RangeError(\"Invalid input for NodeSelection.fromJSON\");\n return new NodeSelection(doc.resolve(json.anchor));\n }\n /**\n Create a node selection from non-resolved positions.\n */\n static create(doc, from) {\n return new NodeSelection(doc.resolve(from));\n }\n /**\n Determines whether the given node may be selected as a node\n selection.\n */\n static isSelectable(node) {\n return !node.isText && node.type.spec.selectable !== false;\n }\n}\nNodeSelection.prototype.visible = false;\nSelection.jsonID(\"node\", NodeSelection);\nclass NodeBookmark {\n constructor(anchor) {\n this.anchor = anchor;\n }\n map(mapping) {\n let { deleted, pos } = mapping.mapResult(this.anchor);\n return deleted ? new TextBookmark(pos, pos) : new NodeBookmark(pos);\n }\n resolve(doc) {\n let $pos = doc.resolve(this.anchor), node = $pos.nodeAfter;\n if (node && NodeSelection.isSelectable(node))\n return new NodeSelection($pos);\n return Selection.near($pos);\n }\n}\n/**\nA selection type that represents selecting the whole document\n(which can not necessarily be expressed with a text selection, when\nthere are for example leaf block nodes at the start or end of the\ndocument).\n*/\nclass AllSelection extends Selection {\n /**\n Create an all-selection over the given document.\n */\n constructor(doc) {\n super(doc.resolve(0), doc.resolve(doc.content.size));\n }\n replace(tr, content = Slice.empty) {\n if (content == Slice.empty) {\n tr.delete(0, tr.doc.content.size);\n let sel = Selection.atStart(tr.doc);\n if (!sel.eq(tr.selection))\n tr.setSelection(sel);\n }\n else {\n super.replace(tr, content);\n }\n }\n toJSON() { return { type: \"all\" }; }\n /**\n @internal\n */\n static fromJSON(doc) { return new AllSelection(doc); }\n map(doc) { return new AllSelection(doc); }\n eq(other) { return other instanceof AllSelection; }\n getBookmark() { return AllBookmark; }\n}\nSelection.jsonID(\"all\", AllSelection);\nconst AllBookmark = {\n map() { return this; },\n resolve(doc) { return new AllSelection(doc); }\n};\n// FIXME we'll need some awareness of text direction when scanning for selections\n// Try to find a selection inside the given node. `pos` points at the\n// position where the search starts. When `text` is true, only return\n// text selections.\nfunction findSelectionIn(doc, node, pos, index, dir, text = false) {\n if (node.inlineContent)\n return TextSelection.create(doc, pos);\n for (let i = index - (dir > 0 ? 0 : 1); dir > 0 ? i < node.childCount : i >= 0; i += dir) {\n let child = node.child(i);\n if (!child.isAtom) {\n let inner = findSelectionIn(doc, child, pos + dir, dir < 0 ? child.childCount : 0, dir, text);\n if (inner)\n return inner;\n }\n else if (!text && NodeSelection.isSelectable(child)) {\n return NodeSelection.create(doc, pos - (dir < 0 ? child.nodeSize : 0));\n }\n pos += child.nodeSize * dir;\n }\n return null;\n}\nfunction selectionToInsertionEnd(tr, startLen, bias) {\n let last = tr.steps.length - 1;\n if (last < startLen)\n return;\n let step = tr.steps[last];\n if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep))\n return;\n let map = tr.mapping.maps[last], end;\n map.forEach((_from, _to, _newFrom, newTo) => { if (end == null)\n end = newTo; });\n tr.setSelection(Selection.near(tr.doc.resolve(end), bias));\n}\n\nconst UPDATED_SEL = 1, UPDATED_MARKS = 2, UPDATED_SCROLL = 4;\n/**\nAn editor state transaction, which can be applied to a state to\ncreate an updated state. Use\n[`EditorState.tr`](https://prosemirror.net/docs/ref/#state.EditorState.tr) to create an instance.\n\nTransactions track changes to the document (they are a subclass of\n[`Transform`](https://prosemirror.net/docs/ref/#transform.Transform)), but also other state changes,\nlike selection updates and adjustments of the set of [stored\nmarks](https://prosemirror.net/docs/ref/#state.EditorState.storedMarks). In addition, you can store\nmetadata properties in a transaction, which are extra pieces of\ninformation that client code or plugins can use to describe what a\ntransaction represents, so that they can update their [own\nstate](https://prosemirror.net/docs/ref/#state.StateField) accordingly.\n\nThe [editor view](https://prosemirror.net/docs/ref/#view.EditorView) uses a few metadata\nproperties: it will attach a property `\"pointer\"` with the value\n`true` to selection transactions directly caused by mouse or touch\ninput, a `\"composition\"` property holding an ID identifying the\ncomposition that caused it to transactions caused by composed DOM\ninput, and a `\"uiEvent\"` property of that may be `\"paste\"`,\n`\"cut\"`, or `\"drop\"`.\n*/\nclass Transaction extends Transform {\n /**\n @internal\n */\n constructor(state) {\n super(state.doc);\n // The step count for which the current selection is valid.\n this.curSelectionFor = 0;\n // Bitfield to track which aspects of the state were updated by\n // this transaction.\n this.updated = 0;\n // Object used to store metadata properties for the transaction.\n this.meta = Object.create(null);\n this.time = Date.now();\n this.curSelection = state.selection;\n this.storedMarks = state.storedMarks;\n }\n /**\n The transaction's current selection. This defaults to the editor\n selection [mapped](https://prosemirror.net/docs/ref/#state.Selection.map) through the steps in the\n transaction, but can be overwritten with\n [`setSelection`](https://prosemirror.net/docs/ref/#state.Transaction.setSelection).\n */\n get selection() {\n if (this.curSelectionFor < this.steps.length) {\n this.curSelection = this.curSelection.map(this.doc, this.mapping.slice(this.curSelectionFor));\n this.curSelectionFor = this.steps.length;\n }\n return this.curSelection;\n }\n /**\n Update the transaction's current selection. Will determine the\n selection that the editor gets when the transaction is applied.\n */\n setSelection(selection) {\n if (selection.$from.doc != this.doc)\n throw new RangeError(\"Selection passed to setSelection must point at the current document\");\n this.curSelection = selection;\n this.curSelectionFor = this.steps.length;\n this.updated = (this.updated | UPDATED_SEL) & ~UPDATED_MARKS;\n this.storedMarks = null;\n return this;\n }\n /**\n Whether the selection was explicitly updated by this transaction.\n */\n get selectionSet() {\n return (this.updated & UPDATED_SEL) > 0;\n }\n /**\n Set the current stored marks.\n */\n setStoredMarks(marks) {\n this.storedMarks = marks;\n this.updated |= UPDATED_MARKS;\n return this;\n }\n /**\n Make sure the current stored marks or, if that is null, the marks\n at the selection, match the given set of marks. Does nothing if\n this is already the case.\n */\n ensureMarks(marks) {\n if (!Mark.sameSet(this.storedMarks || this.selection.$from.marks(), marks))\n this.setStoredMarks(marks);\n return this;\n }\n /**\n Add a mark to the set of stored marks.\n */\n addStoredMark(mark) {\n return this.ensureMarks(mark.addToSet(this.storedMarks || this.selection.$head.marks()));\n }\n /**\n Remove a mark or mark type from the set of stored marks.\n */\n removeStoredMark(mark) {\n return this.ensureMarks(mark.removeFromSet(this.storedMarks || this.selection.$head.marks()));\n }\n /**\n Whether the stored marks were explicitly set for this transaction.\n */\n get storedMarksSet() {\n return (this.updated & UPDATED_MARKS) > 0;\n }\n /**\n @internal\n */\n addStep(step, doc) {\n super.addStep(step, doc);\n this.updated = this.updated & ~UPDATED_MARKS;\n this.storedMarks = null;\n }\n /**\n Update the timestamp for the transaction.\n */\n setTime(time) {\n this.time = time;\n return this;\n }\n /**\n Replace the current selection with the given slice.\n */\n replaceSelection(slice) {\n this.selection.replace(this, slice);\n return this;\n }\n /**\n Replace the selection with the given node. When `inheritMarks` is\n true and the content is inline, it inherits the marks from the\n place where it is inserted.\n */\n replaceSelectionWith(node, inheritMarks = true) {\n let selection = this.selection;\n if (inheritMarks)\n node = node.mark(this.storedMarks || (selection.empty ? selection.$from.marks() : (selection.$from.marksAcross(selection.$to) || Mark.none)));\n selection.replaceWith(this, node);\n return this;\n }\n /**\n Delete the selection.\n */\n deleteSelection() {\n this.selection.replace(this);\n return this;\n }\n /**\n Replace the given range, or the selection if no range is given,\n with a text node containing the given string.\n */\n insertText(text, from, to) {\n let schema = this.doc.type.schema;\n if (from == null) {\n if (!text)\n return this.deleteSelection();\n return this.replaceSelectionWith(schema.text(text), true);\n }\n else {\n if (to == null)\n to = from;\n if (!text)\n return this.deleteRange(from, to);\n let marks = this.storedMarks;\n if (!marks) {\n let $from = this.doc.resolve(from);\n marks = to == from ? $from.marks() : $from.marksAcross(this.doc.resolve(to));\n }\n this.replaceRangeWith(from, to, schema.text(text, marks));\n if (!this.selection.empty && this.selection.to == from + text.length)\n this.setSelection(Selection.near(this.selection.$to));\n return this;\n }\n }\n /**\n Store a metadata property in this transaction, keyed either by\n name or by plugin.\n */\n setMeta(key, value) {\n this.meta[typeof key == \"string\" ? key : key.key] = value;\n return this;\n }\n /**\n Retrieve a metadata property for a given name or plugin.\n */\n getMeta(key) {\n return this.meta[typeof key == \"string\" ? key : key.key];\n }\n /**\n Returns true if this transaction doesn't contain any metadata,\n and can thus safely be extended.\n */\n get isGeneric() {\n for (let _ in this.meta)\n return false;\n return true;\n }\n /**\n Indicate that the editor should scroll the selection into view\n when updated to the state produced by this transaction.\n */\n scrollIntoView() {\n this.updated |= UPDATED_SCROLL;\n return this;\n }\n /**\n True when this transaction has had `scrollIntoView` called on it.\n */\n get scrolledIntoView() {\n return (this.updated & UPDATED_SCROLL) > 0;\n }\n}\n\nfunction bind(f, self) {\n return !self || !f ? f : f.bind(self);\n}\nclass FieldDesc {\n constructor(name, desc, self) {\n this.name = name;\n this.init = bind(desc.init, self);\n this.apply = bind(desc.apply, self);\n }\n}\nconst baseFields = [\n new FieldDesc(\"doc\", {\n init(config) { return config.doc || config.schema.topNodeType.createAndFill(); },\n apply(tr) { return tr.doc; }\n }),\n new FieldDesc(\"selection\", {\n init(config, instance) { return config.selection || Selection.atStart(instance.doc); },\n apply(tr) { return tr.selection; }\n }),\n new FieldDesc(\"storedMarks\", {\n init(config) { return config.storedMarks || null; },\n apply(tr, _marks, _old, state) { return state.selection.$cursor ? tr.storedMarks : null; }\n }),\n new FieldDesc(\"scrollToSelection\", {\n init() { return 0; },\n apply(tr, prev) { return tr.scrolledIntoView ? prev + 1 : prev; }\n })\n];\n// Object wrapping the part of a state object that stays the same\n// across transactions. Stored in the state's `config` property.\nclass Configuration {\n constructor(schema, plugins) {\n this.schema = schema;\n this.plugins = [];\n this.pluginsByKey = Object.create(null);\n this.fields = baseFields.slice();\n if (plugins)\n plugins.forEach(plugin => {\n if (this.pluginsByKey[plugin.key])\n throw new RangeError(\"Adding different instances of a keyed plugin (\" + plugin.key + \")\");\n this.plugins.push(plugin);\n this.pluginsByKey[plugin.key] = plugin;\n if (plugin.spec.state)\n this.fields.push(new FieldDesc(plugin.key, plugin.spec.state, plugin));\n });\n }\n}\n/**\nThe state of a ProseMirror editor is represented by an object of\nthis type. A state is a persistent data structure—it isn't\nupdated, but rather a new state value is computed from an old one\nusing the [`apply`](https://prosemirror.net/docs/ref/#state.EditorState.apply) method.\n\nA state holds a number of built-in fields, and plugins can\n[define](https://prosemirror.net/docs/ref/#state.PluginSpec.state) additional fields.\n*/\nclass EditorState {\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n config) {\n this.config = config;\n }\n /**\n The schema of the state's document.\n */\n get schema() {\n return this.config.schema;\n }\n /**\n The plugins that are active in this state.\n */\n get plugins() {\n return this.config.plugins;\n }\n /**\n Apply the given transaction to produce a new state.\n */\n apply(tr) {\n return this.applyTransaction(tr).state;\n }\n /**\n @internal\n */\n filterTransaction(tr, ignore = -1) {\n for (let i = 0; i < this.config.plugins.length; i++)\n if (i != ignore) {\n let plugin = this.config.plugins[i];\n if (plugin.spec.filterTransaction && !plugin.spec.filterTransaction.call(plugin, tr, this))\n return false;\n }\n return true;\n }\n /**\n Verbose variant of [`apply`](https://prosemirror.net/docs/ref/#state.EditorState.apply) that\n returns the precise transactions that were applied (which might\n be influenced by the [transaction\n hooks](https://prosemirror.net/docs/ref/#state.PluginSpec.filterTransaction) of\n plugins) along with the new state.\n */\n applyTransaction(rootTr) {\n if (!this.filterTransaction(rootTr))\n return { state: this, transactions: [] };\n let trs = [rootTr], newState = this.applyInner(rootTr), seen = null;\n // This loop repeatedly gives plugins a chance to respond to\n // transactions as new transactions are added, making sure to only\n // pass the transactions the plugin did not see before.\n for (;;) {\n let haveNew = false;\n for (let i = 0; i < this.config.plugins.length; i++) {\n let plugin = this.config.plugins[i];\n if (plugin.spec.appendTransaction) {\n let n = seen ? seen[i].n : 0, oldState = seen ? seen[i].state : this;\n let tr = n < trs.length &&\n plugin.spec.appendTransaction.call(plugin, n ? trs.slice(n) : trs, oldState, newState);\n if (tr && newState.filterTransaction(tr, i)) {\n tr.setMeta(\"appendedTransaction\", rootTr);\n if (!seen) {\n seen = [];\n for (let j = 0; j < this.config.plugins.length; j++)\n seen.push(j < i ? { state: newState, n: trs.length } : { state: this, n: 0 });\n }\n trs.push(tr);\n newState = newState.applyInner(tr);\n haveNew = true;\n }\n if (seen)\n seen[i] = { state: newState, n: trs.length };\n }\n }\n if (!haveNew)\n return { state: newState, transactions: trs };\n }\n }\n /**\n @internal\n */\n applyInner(tr) {\n if (!tr.before.eq(this.doc))\n throw new RangeError(\"Applying a mismatched transaction\");\n let newInstance = new EditorState(this.config), fields = this.config.fields;\n for (let i = 0; i < fields.length; i++) {\n let field = fields[i];\n newInstance[field.name] = field.apply(tr, this[field.name], this, newInstance);\n }\n return newInstance;\n }\n /**\n Accessor that constructs and returns a new [transaction](https://prosemirror.net/docs/ref/#state.Transaction) from this state.\n */\n get tr() { return new Transaction(this); }\n /**\n Create a new state.\n */\n static create(config) {\n let $config = new Configuration(config.doc ? config.doc.type.schema : config.schema, config.plugins);\n let instance = new EditorState($config);\n for (let i = 0; i < $config.fields.length; i++)\n instance[$config.fields[i].name] = $config.fields[i].init(config, instance);\n return instance;\n }\n /**\n Create a new state based on this one, but with an adjusted set\n of active plugins. State fields that exist in both sets of\n plugins are kept unchanged. Those that no longer exist are\n dropped, and those that are new are initialized using their\n [`init`](https://prosemirror.net/docs/ref/#state.StateField.init) method, passing in the new\n configuration object..\n */\n reconfigure(config) {\n let $config = new Configuration(this.schema, config.plugins);\n let fields = $config.fields, instance = new EditorState($config);\n for (let i = 0; i < fields.length; i++) {\n let name = fields[i].name;\n instance[name] = this.hasOwnProperty(name) ? this[name] : fields[i].init(config, instance);\n }\n return instance;\n }\n /**\n Serialize this state to JSON. If you want to serialize the state\n of plugins, pass an object mapping property names to use in the\n resulting JSON object to plugin objects. The argument may also be\n a string or number, in which case it is ignored, to support the\n way `JSON.stringify` calls `toString` methods.\n */\n toJSON(pluginFields) {\n let result = { doc: this.doc.toJSON(), selection: this.selection.toJSON() };\n if (this.storedMarks)\n result.storedMarks = this.storedMarks.map(m => m.toJSON());\n if (pluginFields && typeof pluginFields == 'object')\n for (let prop in pluginFields) {\n if (prop == \"doc\" || prop == \"selection\")\n throw new RangeError(\"The JSON fields `doc` and `selection` are reserved\");\n let plugin = pluginFields[prop], state = plugin.spec.state;\n if (state && state.toJSON)\n result[prop] = state.toJSON.call(plugin, this[plugin.key]);\n }\n return result;\n }\n /**\n Deserialize a JSON representation of a state. `config` should\n have at least a `schema` field, and should contain array of\n plugins to initialize the state with. `pluginFields` can be used\n to deserialize the state of plugins, by associating plugin\n instances with the property names they use in the JSON object.\n */\n static fromJSON(config, json, pluginFields) {\n if (!json)\n throw new RangeError(\"Invalid input for EditorState.fromJSON\");\n if (!config.schema)\n throw new RangeError(\"Required config field 'schema' missing\");\n let $config = new Configuration(config.schema, config.plugins);\n let instance = new EditorState($config);\n $config.fields.forEach(field => {\n if (field.name == \"doc\") {\n instance.doc = Node.fromJSON(config.schema, json.doc);\n }\n else if (field.name == \"selection\") {\n instance.selection = Selection.fromJSON(instance.doc, json.selection);\n }\n else if (field.name == \"storedMarks\") {\n if (json.storedMarks)\n instance.storedMarks = json.storedMarks.map(config.schema.markFromJSON);\n }\n else {\n if (pluginFields)\n for (let prop in pluginFields) {\n let plugin = pluginFields[prop], state = plugin.spec.state;\n if (plugin.key == field.name && state && state.fromJSON &&\n Object.prototype.hasOwnProperty.call(json, prop)) {\n instance[field.name] = state.fromJSON.call(plugin, config, json[prop], instance);\n return;\n }\n }\n instance[field.name] = field.init(config, instance);\n }\n });\n return instance;\n }\n}\n\nfunction bindProps(obj, self, target) {\n for (let prop in obj) {\n let val = obj[prop];\n if (val instanceof Function)\n val = val.bind(self);\n else if (prop == \"handleDOMEvents\")\n val = bindProps(val, self, {});\n target[prop] = val;\n }\n return target;\n}\n/**\nPlugins bundle functionality that can be added to an editor.\nThey are part of the [editor state](https://prosemirror.net/docs/ref/#state.EditorState) and\nmay influence that state and the view that contains it.\n*/\nclass Plugin {\n /**\n Create a plugin.\n */\n constructor(\n /**\n The plugin's [spec object](https://prosemirror.net/docs/ref/#state.PluginSpec).\n */\n spec) {\n this.spec = spec;\n /**\n The [props](https://prosemirror.net/docs/ref/#view.EditorProps) exported by this plugin.\n */\n this.props = {};\n if (spec.props)\n bindProps(spec.props, this, this.props);\n this.key = spec.key ? spec.key.key : createKey(\"plugin\");\n }\n /**\n Extract the plugin's state field from an editor state.\n */\n getState(state) { return state[this.key]; }\n}\nconst keys = Object.create(null);\nfunction createKey(name) {\n if (name in keys)\n return name + \"$\" + ++keys[name];\n keys[name] = 0;\n return name + \"$\";\n}\n/**\nA key is used to [tag](https://prosemirror.net/docs/ref/#state.PluginSpec.key) plugins in a way\nthat makes it possible to find them, given an editor state.\nAssigning a key does mean only one plugin of that type can be\nactive in a state.\n*/\nclass PluginKey {\n /**\n Create a plugin key.\n */\n constructor(name = \"key\") { this.key = createKey(name); }\n /**\n Get the active plugin with this key, if any, from an editor\n state.\n */\n get(state) { return state.config.pluginsByKey[this.key]; }\n /**\n Get the plugin's state from an editor state.\n */\n getState(state) { return state[this.key]; }\n}\n\nexport { AllSelection, EditorState, NodeSelection, Plugin, PluginKey, Selection, SelectionRange, TextSelection, Transaction };\n","import { liftTarget, replaceStep, ReplaceStep, canJoin, joinPoint, canSplit, ReplaceAroundStep, findWrapping } from 'prosemirror-transform';\nimport { Slice, Fragment } from 'prosemirror-model';\nimport { NodeSelection, Selection, TextSelection, AllSelection, SelectionRange } from 'prosemirror-state';\n\n/**\nDelete the selection, if there is one.\n*/\nconst deleteSelection = (state, dispatch) => {\n if (state.selection.empty)\n return false;\n if (dispatch)\n dispatch(state.tr.deleteSelection().scrollIntoView());\n return true;\n};\nfunction atBlockStart(state, view) {\n let { $cursor } = state.selection;\n if (!$cursor || (view ? !view.endOfTextblock(\"backward\", state)\n : $cursor.parentOffset > 0))\n return null;\n return $cursor;\n}\n/**\nIf the selection is empty and at the start of a textblock, try to\nreduce the distance between that block and the one before it—if\nthere's a block directly before it that can be joined, join them.\nIf not, try to move the selected block closer to the next one in\nthe document structure by lifting it out of its parent or moving it\ninto a parent of the previous block. Will use the view for accurate\n(bidi-aware) start-of-textblock detection if given.\n*/\nconst joinBackward = (state, dispatch, view) => {\n let $cursor = atBlockStart(state, view);\n if (!$cursor)\n return false;\n let $cut = findCutBefore($cursor);\n // If there is no node before this, try to lift\n if (!$cut) {\n let range = $cursor.blockRange(), target = range && liftTarget(range);\n if (target == null)\n return false;\n if (dispatch)\n dispatch(state.tr.lift(range, target).scrollIntoView());\n return true;\n }\n let before = $cut.nodeBefore;\n // Apply the joining algorithm\n if (deleteBarrier(state, $cut, dispatch, -1))\n return true;\n // If the node below has no content and the node above is\n // selectable, delete the node below and select the one above.\n if ($cursor.parent.content.size == 0 &&\n (textblockAt(before, \"end\") || NodeSelection.isSelectable(before))) {\n for (let depth = $cursor.depth;; depth--) {\n let delStep = replaceStep(state.doc, $cursor.before(depth), $cursor.after(depth), Slice.empty);\n if (delStep && delStep.slice.size < delStep.to - delStep.from) {\n if (dispatch) {\n let tr = state.tr.step(delStep);\n tr.setSelection(textblockAt(before, \"end\")\n ? Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos, -1)), -1)\n : NodeSelection.create(tr.doc, $cut.pos - before.nodeSize));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n if (depth == 1 || $cursor.node(depth - 1).childCount > 1)\n break;\n }\n }\n // If the node before is an atom, delete it\n if (before.isAtom && $cut.depth == $cursor.depth - 1) {\n if (dispatch)\n dispatch(state.tr.delete($cut.pos - before.nodeSize, $cut.pos).scrollIntoView());\n return true;\n }\n return false;\n};\n/**\nA more limited form of [`joinBackward`](https://prosemirror.net/docs/ref/#commands.joinBackward)\nthat only tries to join the current textblock to the one before\nit, if the cursor is at the start of a textblock.\n*/\nconst joinTextblockBackward = (state, dispatch, view) => {\n let $cursor = atBlockStart(state, view);\n if (!$cursor)\n return false;\n let $cut = findCutBefore($cursor);\n return $cut ? joinTextblocksAround(state, $cut, dispatch) : false;\n};\n/**\nA more limited form of [`joinForward`](https://prosemirror.net/docs/ref/#commands.joinForward)\nthat only tries to join the current textblock to the one after\nit, if the cursor is at the end of a textblock.\n*/\nconst joinTextblockForward = (state, dispatch, view) => {\n let $cursor = atBlockEnd(state, view);\n if (!$cursor)\n return false;\n let $cut = findCutAfter($cursor);\n return $cut ? joinTextblocksAround(state, $cut, dispatch) : false;\n};\nfunction joinTextblocksAround(state, $cut, dispatch) {\n let before = $cut.nodeBefore, beforeText = before, beforePos = $cut.pos - 1;\n for (; !beforeText.isTextblock; beforePos--) {\n if (beforeText.type.spec.isolating)\n return false;\n let child = beforeText.lastChild;\n if (!child)\n return false;\n beforeText = child;\n }\n let after = $cut.nodeAfter, afterText = after, afterPos = $cut.pos + 1;\n for (; !afterText.isTextblock; afterPos++) {\n if (afterText.type.spec.isolating)\n return false;\n let child = afterText.firstChild;\n if (!child)\n return false;\n afterText = child;\n }\n let step = replaceStep(state.doc, beforePos, afterPos, Slice.empty);\n if (!step || step.from != beforePos ||\n step instanceof ReplaceStep && step.slice.size >= afterPos - beforePos)\n return false;\n if (dispatch) {\n let tr = state.tr.step(step);\n tr.setSelection(TextSelection.create(tr.doc, beforePos));\n dispatch(tr.scrollIntoView());\n }\n return true;\n}\nfunction textblockAt(node, side, only = false) {\n for (let scan = node; scan; scan = (side == \"start\" ? scan.firstChild : scan.lastChild)) {\n if (scan.isTextblock)\n return true;\n if (only && scan.childCount != 1)\n return false;\n }\n return false;\n}\n/**\nWhen the selection is empty and at the start of a textblock, select\nthe node before that textblock, if possible. This is intended to be\nbound to keys like backspace, after\n[`joinBackward`](https://prosemirror.net/docs/ref/#commands.joinBackward) or other deleting\ncommands, as a fall-back behavior when the schema doesn't allow\ndeletion at the selected point.\n*/\nconst selectNodeBackward = (state, dispatch, view) => {\n let { $head, empty } = state.selection, $cut = $head;\n if (!empty)\n return false;\n if ($head.parent.isTextblock) {\n if (view ? !view.endOfTextblock(\"backward\", state) : $head.parentOffset > 0)\n return false;\n $cut = findCutBefore($head);\n }\n let node = $cut && $cut.nodeBefore;\n if (!node || !NodeSelection.isSelectable(node))\n return false;\n if (dispatch)\n dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos - node.nodeSize)).scrollIntoView());\n return true;\n};\nfunction findCutBefore($pos) {\n if (!$pos.parent.type.spec.isolating)\n for (let i = $pos.depth - 1; i >= 0; i--) {\n if ($pos.index(i) > 0)\n return $pos.doc.resolve($pos.before(i + 1));\n if ($pos.node(i).type.spec.isolating)\n break;\n }\n return null;\n}\nfunction atBlockEnd(state, view) {\n let { $cursor } = state.selection;\n if (!$cursor || (view ? !view.endOfTextblock(\"forward\", state)\n : $cursor.parentOffset < $cursor.parent.content.size))\n return null;\n return $cursor;\n}\n/**\nIf the selection is empty and the cursor is at the end of a\ntextblock, try to reduce or remove the boundary between that block\nand the one after it, either by joining them or by moving the other\nblock closer to this one in the tree structure. Will use the view\nfor accurate start-of-textblock detection if given.\n*/\nconst joinForward = (state, dispatch, view) => {\n let $cursor = atBlockEnd(state, view);\n if (!$cursor)\n return false;\n let $cut = findCutAfter($cursor);\n // If there is no node after this, there's nothing to do\n if (!$cut)\n return false;\n let after = $cut.nodeAfter;\n // Try the joining algorithm\n if (deleteBarrier(state, $cut, dispatch, 1))\n return true;\n // If the node above has no content and the node below is\n // selectable, delete the node above and select the one below.\n if ($cursor.parent.content.size == 0 &&\n (textblockAt(after, \"start\") || NodeSelection.isSelectable(after))) {\n let delStep = replaceStep(state.doc, $cursor.before(), $cursor.after(), Slice.empty);\n if (delStep && delStep.slice.size < delStep.to - delStep.from) {\n if (dispatch) {\n let tr = state.tr.step(delStep);\n tr.setSelection(textblockAt(after, \"start\") ? Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos)), 1)\n : NodeSelection.create(tr.doc, tr.mapping.map($cut.pos)));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n }\n // If the next node is an atom, delete it\n if (after.isAtom && $cut.depth == $cursor.depth - 1) {\n if (dispatch)\n dispatch(state.tr.delete($cut.pos, $cut.pos + after.nodeSize).scrollIntoView());\n return true;\n }\n return false;\n};\n/**\nWhen the selection is empty and at the end of a textblock, select\nthe node coming after that textblock, if possible. This is intended\nto be bound to keys like delete, after\n[`joinForward`](https://prosemirror.net/docs/ref/#commands.joinForward) and similar deleting\ncommands, to provide a fall-back behavior when the schema doesn't\nallow deletion at the selected point.\n*/\nconst selectNodeForward = (state, dispatch, view) => {\n let { $head, empty } = state.selection, $cut = $head;\n if (!empty)\n return false;\n if ($head.parent.isTextblock) {\n if (view ? !view.endOfTextblock(\"forward\", state) : $head.parentOffset < $head.parent.content.size)\n return false;\n $cut = findCutAfter($head);\n }\n let node = $cut && $cut.nodeAfter;\n if (!node || !NodeSelection.isSelectable(node))\n return false;\n if (dispatch)\n dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos)).scrollIntoView());\n return true;\n};\nfunction findCutAfter($pos) {\n if (!$pos.parent.type.spec.isolating)\n for (let i = $pos.depth - 1; i >= 0; i--) {\n let parent = $pos.node(i);\n if ($pos.index(i) + 1 < parent.childCount)\n return $pos.doc.resolve($pos.after(i + 1));\n if (parent.type.spec.isolating)\n break;\n }\n return null;\n}\n/**\nJoin the selected block or, if there is a text selection, the\nclosest ancestor block of the selection that can be joined, with\nthe sibling above it.\n*/\nconst joinUp = (state, dispatch) => {\n let sel = state.selection, nodeSel = sel instanceof NodeSelection, point;\n if (nodeSel) {\n if (sel.node.isTextblock || !canJoin(state.doc, sel.from))\n return false;\n point = sel.from;\n }\n else {\n point = joinPoint(state.doc, sel.from, -1);\n if (point == null)\n return false;\n }\n if (dispatch) {\n let tr = state.tr.join(point);\n if (nodeSel)\n tr.setSelection(NodeSelection.create(tr.doc, point - state.doc.resolve(point).nodeBefore.nodeSize));\n dispatch(tr.scrollIntoView());\n }\n return true;\n};\n/**\nJoin the selected block, or the closest ancestor of the selection\nthat can be joined, with the sibling after it.\n*/\nconst joinDown = (state, dispatch) => {\n let sel = state.selection, point;\n if (sel instanceof NodeSelection) {\n if (sel.node.isTextblock || !canJoin(state.doc, sel.to))\n return false;\n point = sel.to;\n }\n else {\n point = joinPoint(state.doc, sel.to, 1);\n if (point == null)\n return false;\n }\n if (dispatch)\n dispatch(state.tr.join(point).scrollIntoView());\n return true;\n};\n/**\nLift the selected block, or the closest ancestor block of the\nselection that can be lifted, out of its parent node.\n*/\nconst lift = (state, dispatch) => {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to), target = range && liftTarget(range);\n if (target == null)\n return false;\n if (dispatch)\n dispatch(state.tr.lift(range, target).scrollIntoView());\n return true;\n};\n/**\nIf the selection is in a node whose type has a truthy\n[`code`](https://prosemirror.net/docs/ref/#model.NodeSpec.code) property in its spec, replace the\nselection with a newline character.\n*/\nconst newlineInCode = (state, dispatch) => {\n let { $head, $anchor } = state.selection;\n if (!$head.parent.type.spec.code || !$head.sameParent($anchor))\n return false;\n if (dispatch)\n dispatch(state.tr.insertText(\"\\n\").scrollIntoView());\n return true;\n};\nfunction defaultBlockAt(match) {\n for (let i = 0; i < match.edgeCount; i++) {\n let { type } = match.edge(i);\n if (type.isTextblock && !type.hasRequiredAttrs())\n return type;\n }\n return null;\n}\n/**\nWhen the selection is in a node with a truthy\n[`code`](https://prosemirror.net/docs/ref/#model.NodeSpec.code) property in its spec, create a\ndefault block after the code block, and move the cursor there.\n*/\nconst exitCode = (state, dispatch) => {\n let { $head, $anchor } = state.selection;\n if (!$head.parent.type.spec.code || !$head.sameParent($anchor))\n return false;\n let above = $head.node(-1), after = $head.indexAfter(-1), type = defaultBlockAt(above.contentMatchAt(after));\n if (!type || !above.canReplaceWith(after, after, type))\n return false;\n if (dispatch) {\n let pos = $head.after(), tr = state.tr.replaceWith(pos, pos, type.createAndFill());\n tr.setSelection(Selection.near(tr.doc.resolve(pos), 1));\n dispatch(tr.scrollIntoView());\n }\n return true;\n};\n/**\nIf a block node is selected, create an empty paragraph before (if\nit is its parent's first child) or after it.\n*/\nconst createParagraphNear = (state, dispatch) => {\n let sel = state.selection, { $from, $to } = sel;\n if (sel instanceof AllSelection || $from.parent.inlineContent || $to.parent.inlineContent)\n return false;\n let type = defaultBlockAt($to.parent.contentMatchAt($to.indexAfter()));\n if (!type || !type.isTextblock)\n return false;\n if (dispatch) {\n let side = (!$from.parentOffset && $to.index() < $to.parent.childCount ? $from : $to).pos;\n let tr = state.tr.insert(side, type.createAndFill());\n tr.setSelection(TextSelection.create(tr.doc, side + 1));\n dispatch(tr.scrollIntoView());\n }\n return true;\n};\n/**\nIf the cursor is in an empty textblock that can be lifted, lift the\nblock.\n*/\nconst liftEmptyBlock = (state, dispatch) => {\n let { $cursor } = state.selection;\n if (!$cursor || $cursor.parent.content.size)\n return false;\n if ($cursor.depth > 1 && $cursor.after() != $cursor.end(-1)) {\n let before = $cursor.before();\n if (canSplit(state.doc, before)) {\n if (dispatch)\n dispatch(state.tr.split(before).scrollIntoView());\n return true;\n }\n }\n let range = $cursor.blockRange(), target = range && liftTarget(range);\n if (target == null)\n return false;\n if (dispatch)\n dispatch(state.tr.lift(range, target).scrollIntoView());\n return true;\n};\n/**\nCreate a variant of [`splitBlock`](https://prosemirror.net/docs/ref/#commands.splitBlock) that uses\na custom function to determine the type of the newly split off block.\n*/\nfunction splitBlockAs(splitNode) {\n return (state, dispatch) => {\n let { $from, $to } = state.selection;\n if (state.selection instanceof NodeSelection && state.selection.node.isBlock) {\n if (!$from.parentOffset || !canSplit(state.doc, $from.pos))\n return false;\n if (dispatch)\n dispatch(state.tr.split($from.pos).scrollIntoView());\n return true;\n }\n if (!$from.depth)\n return false;\n let types = [];\n let splitDepth, deflt, atEnd = false, atStart = false;\n for (let d = $from.depth;; d--) {\n let node = $from.node(d);\n if (node.isBlock) {\n atEnd = $from.end(d) == $from.pos + ($from.depth - d);\n atStart = $from.start(d) == $from.pos - ($from.depth - d);\n deflt = defaultBlockAt($from.node(d - 1).contentMatchAt($from.indexAfter(d - 1)));\n let splitType = splitNode && splitNode($to.parent, atEnd, $from);\n types.unshift(splitType || (atEnd && deflt ? { type: deflt } : null));\n splitDepth = d;\n break;\n }\n else {\n if (d == 1)\n return false;\n types.unshift(null);\n }\n }\n let tr = state.tr;\n if (state.selection instanceof TextSelection || state.selection instanceof AllSelection)\n tr.deleteSelection();\n let splitPos = tr.mapping.map($from.pos);\n let can = canSplit(tr.doc, splitPos, types.length, types);\n if (!can) {\n types[0] = deflt ? { type: deflt } : null;\n can = canSplit(tr.doc, splitPos, types.length, types);\n }\n if (!can)\n return false;\n tr.split(splitPos, types.length, types);\n if (!atEnd && atStart && $from.node(splitDepth).type != deflt) {\n let first = tr.mapping.map($from.before(splitDepth)), $first = tr.doc.resolve(first);\n if (deflt && $from.node(splitDepth - 1).canReplaceWith($first.index(), $first.index() + 1, deflt))\n tr.setNodeMarkup(tr.mapping.map($from.before(splitDepth)), deflt);\n }\n if (dispatch)\n dispatch(tr.scrollIntoView());\n return true;\n };\n}\n/**\nSplit the parent block of the selection. If the selection is a text\nselection, also delete its content.\n*/\nconst splitBlock = splitBlockAs();\n/**\nActs like [`splitBlock`](https://prosemirror.net/docs/ref/#commands.splitBlock), but without\nresetting the set of active marks at the cursor.\n*/\nconst splitBlockKeepMarks = (state, dispatch) => {\n return splitBlock(state, dispatch && (tr => {\n let marks = state.storedMarks || (state.selection.$to.parentOffset && state.selection.$from.marks());\n if (marks)\n tr.ensureMarks(marks);\n dispatch(tr);\n }));\n};\n/**\nMove the selection to the node wrapping the current selection, if\nany. (Will not select the document node.)\n*/\nconst selectParentNode = (state, dispatch) => {\n let { $from, to } = state.selection, pos;\n let same = $from.sharedDepth(to);\n if (same == 0)\n return false;\n pos = $from.before(same);\n if (dispatch)\n dispatch(state.tr.setSelection(NodeSelection.create(state.doc, pos)));\n return true;\n};\n/**\nSelect the whole document.\n*/\nconst selectAll = (state, dispatch) => {\n if (dispatch)\n dispatch(state.tr.setSelection(new AllSelection(state.doc)));\n return true;\n};\nfunction joinMaybeClear(state, $pos, dispatch) {\n let before = $pos.nodeBefore, after = $pos.nodeAfter, index = $pos.index();\n if (!before || !after || !before.type.compatibleContent(after.type))\n return false;\n if (!before.content.size && $pos.parent.canReplace(index - 1, index)) {\n if (dispatch)\n dispatch(state.tr.delete($pos.pos - before.nodeSize, $pos.pos).scrollIntoView());\n return true;\n }\n if (!$pos.parent.canReplace(index, index + 1) || !(after.isTextblock || canJoin(state.doc, $pos.pos)))\n return false;\n if (dispatch)\n dispatch(state.tr.join($pos.pos).scrollIntoView());\n return true;\n}\nfunction deleteBarrier(state, $cut, dispatch, dir) {\n let before = $cut.nodeBefore, after = $cut.nodeAfter, conn, match;\n let isolated = before.type.spec.isolating || after.type.spec.isolating;\n if (!isolated && joinMaybeClear(state, $cut, dispatch))\n return true;\n let canDelAfter = !isolated && $cut.parent.canReplace($cut.index(), $cut.index() + 1);\n if (canDelAfter &&\n (conn = (match = before.contentMatchAt(before.childCount)).findWrapping(after.type)) &&\n match.matchType(conn[0] || after.type).validEnd) {\n if (dispatch) {\n let end = $cut.pos + after.nodeSize, wrap = Fragment.empty;\n for (let i = conn.length - 1; i >= 0; i--)\n wrap = Fragment.from(conn[i].create(null, wrap));\n wrap = Fragment.from(before.copy(wrap));\n let tr = state.tr.step(new ReplaceAroundStep($cut.pos - 1, end, $cut.pos, end, new Slice(wrap, 1, 0), conn.length, true));\n let $joinAt = tr.doc.resolve(end + 2 * conn.length);\n if ($joinAt.nodeAfter && $joinAt.nodeAfter.type == before.type &&\n canJoin(tr.doc, $joinAt.pos))\n tr.join($joinAt.pos);\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n let selAfter = after.type.spec.isolating || (dir > 0 && isolated) ? null : Selection.findFrom($cut, 1);\n let range = selAfter && selAfter.$from.blockRange(selAfter.$to), target = range && liftTarget(range);\n if (target != null && target >= $cut.depth) {\n if (dispatch)\n dispatch(state.tr.lift(range, target).scrollIntoView());\n return true;\n }\n if (canDelAfter && textblockAt(after, \"start\", true) && textblockAt(before, \"end\")) {\n let at = before, wrap = [];\n for (;;) {\n wrap.push(at);\n if (at.isTextblock)\n break;\n at = at.lastChild;\n }\n let afterText = after, afterDepth = 1;\n for (; !afterText.isTextblock; afterText = afterText.firstChild)\n afterDepth++;\n if (at.canReplace(at.childCount, at.childCount, afterText.content)) {\n if (dispatch) {\n let end = Fragment.empty;\n for (let i = wrap.length - 1; i >= 0; i--)\n end = Fragment.from(wrap[i].copy(end));\n let tr = state.tr.step(new ReplaceAroundStep($cut.pos - wrap.length, $cut.pos + after.nodeSize, $cut.pos + afterDepth, $cut.pos + after.nodeSize - afterDepth, new Slice(end, wrap.length, 0), 0, true));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n }\n return false;\n}\nfunction selectTextblockSide(side) {\n return function (state, dispatch) {\n let sel = state.selection, $pos = side < 0 ? sel.$from : sel.$to;\n let depth = $pos.depth;\n while ($pos.node(depth).isInline) {\n if (!depth)\n return false;\n depth--;\n }\n if (!$pos.node(depth).isTextblock)\n return false;\n if (dispatch)\n dispatch(state.tr.setSelection(TextSelection.create(state.doc, side < 0 ? $pos.start(depth) : $pos.end(depth))));\n return true;\n };\n}\n/**\nMoves the cursor to the start of current text block.\n*/\nconst selectTextblockStart = selectTextblockSide(-1);\n/**\nMoves the cursor to the end of current text block.\n*/\nconst selectTextblockEnd = selectTextblockSide(1);\n// Parameterized commands\n/**\nWrap the selection in a node of the given type with the given\nattributes.\n*/\nfunction wrapIn(nodeType, attrs = null) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to), wrapping = range && findWrapping(range, nodeType, attrs);\n if (!wrapping)\n return false;\n if (dispatch)\n dispatch(state.tr.wrap(range, wrapping).scrollIntoView());\n return true;\n };\n}\n/**\nReturns a command that tries to set the selected textblocks to the\ngiven node type with the given attributes.\n*/\nfunction setBlockType(nodeType, attrs = null) {\n return function (state, dispatch) {\n let applicable = false;\n for (let i = 0; i < state.selection.ranges.length && !applicable; i++) {\n let { $from: { pos: from }, $to: { pos: to } } = state.selection.ranges[i];\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (applicable)\n return false;\n if (!node.isTextblock || node.hasMarkup(nodeType, attrs))\n return;\n if (node.type == nodeType) {\n applicable = true;\n }\n else {\n let $pos = state.doc.resolve(pos), index = $pos.index();\n applicable = $pos.parent.canReplaceWith(index, index + 1, nodeType);\n }\n });\n }\n if (!applicable)\n return false;\n if (dispatch) {\n let tr = state.tr;\n for (let i = 0; i < state.selection.ranges.length; i++) {\n let { $from: { pos: from }, $to: { pos: to } } = state.selection.ranges[i];\n tr.setBlockType(from, to, nodeType, attrs);\n }\n dispatch(tr.scrollIntoView());\n }\n return true;\n };\n}\nfunction markApplies(doc, ranges, type, enterAtoms) {\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n let can = $from.depth == 0 ? doc.inlineContent && doc.type.allowsMarkType(type) : false;\n doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\n if (can || !enterAtoms && node.isAtom && node.isInline && pos >= $from.pos && pos + node.nodeSize <= $to.pos)\n return false;\n can = node.inlineContent && node.type.allowsMarkType(type);\n });\n if (can)\n return true;\n }\n return false;\n}\nfunction removeInlineAtoms(ranges) {\n let result = [];\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n $from.doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\n if (node.isAtom && node.content.size && node.isInline && pos >= $from.pos && pos + node.nodeSize <= $to.pos) {\n if (pos + 1 > $from.pos)\n result.push(new SelectionRange($from, $from.doc.resolve(pos + 1)));\n $from = $from.doc.resolve(pos + 1 + node.content.size);\n return false;\n }\n });\n if ($from.pos < $to.pos)\n result.push(new SelectionRange($from, $to));\n }\n return result;\n}\n/**\nCreate a command function that toggles the given mark with the\ngiven attributes. Will return `false` when the current selection\ndoesn't support that mark. This will remove the mark if any marks\nof that type exist in the selection, or add it otherwise. If the\nselection is empty, this applies to the [stored\nmarks](https://prosemirror.net/docs/ref/#state.EditorState.storedMarks) instead of a range of the\ndocument.\n*/\nfunction toggleMark(markType, attrs = null, options) {\n let removeWhenPresent = (options && options.removeWhenPresent) !== false;\n let enterAtoms = (options && options.enterInlineAtoms) !== false;\n let dropSpace = !(options && options.includeWhitespace);\n return function (state, dispatch) {\n let { empty, $cursor, ranges } = state.selection;\n if ((empty && !$cursor) || !markApplies(state.doc, ranges, markType, enterAtoms))\n return false;\n if (dispatch) {\n if ($cursor) {\n if (markType.isInSet(state.storedMarks || $cursor.marks()))\n dispatch(state.tr.removeStoredMark(markType));\n else\n dispatch(state.tr.addStoredMark(markType.create(attrs)));\n }\n else {\n let add, tr = state.tr;\n if (!enterAtoms)\n ranges = removeInlineAtoms(ranges);\n if (removeWhenPresent) {\n add = !ranges.some(r => state.doc.rangeHasMark(r.$from.pos, r.$to.pos, markType));\n }\n else {\n add = !ranges.every(r => {\n let missing = false;\n tr.doc.nodesBetween(r.$from.pos, r.$to.pos, (node, pos, parent) => {\n if (missing)\n return false;\n missing = !markType.isInSet(node.marks) && !!parent && parent.type.allowsMarkType(markType) &&\n !(node.isText && /^\\s*$/.test(node.textBetween(Math.max(0, r.$from.pos - pos), Math.min(node.nodeSize, r.$to.pos - pos))));\n });\n return !missing;\n });\n }\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n if (!add) {\n tr.removeMark($from.pos, $to.pos, markType);\n }\n else {\n let from = $from.pos, to = $to.pos, start = $from.nodeAfter, end = $to.nodeBefore;\n let spaceStart = dropSpace && start && start.isText ? /^\\s*/.exec(start.text)[0].length : 0;\n let spaceEnd = dropSpace && end && end.isText ? /\\s*$/.exec(end.text)[0].length : 0;\n if (from + spaceStart < to) {\n from += spaceStart;\n to -= spaceEnd;\n }\n tr.addMark(from, to, markType.create(attrs));\n }\n }\n dispatch(tr.scrollIntoView());\n }\n }\n return true;\n };\n}\nfunction wrapDispatchForJoin(dispatch, isJoinable) {\n return (tr) => {\n if (!tr.isGeneric)\n return dispatch(tr);\n let ranges = [];\n for (let i = 0; i < tr.mapping.maps.length; i++) {\n let map = tr.mapping.maps[i];\n for (let j = 0; j < ranges.length; j++)\n ranges[j] = map.map(ranges[j]);\n map.forEach((_s, _e, from, to) => ranges.push(from, to));\n }\n // Figure out which joinable points exist inside those ranges,\n // by checking all node boundaries in their parent nodes.\n let joinable = [];\n for (let i = 0; i < ranges.length; i += 2) {\n let from = ranges[i], to = ranges[i + 1];\n let $from = tr.doc.resolve(from), depth = $from.sharedDepth(to), parent = $from.node(depth);\n for (let index = $from.indexAfter(depth), pos = $from.after(depth + 1); pos <= to; ++index) {\n let after = parent.maybeChild(index);\n if (!after)\n break;\n if (index && joinable.indexOf(pos) == -1) {\n let before = parent.child(index - 1);\n if (before.type == after.type && isJoinable(before, after))\n joinable.push(pos);\n }\n pos += after.nodeSize;\n }\n }\n // Join the joinable points\n joinable.sort((a, b) => a - b);\n for (let i = joinable.length - 1; i >= 0; i--) {\n if (canJoin(tr.doc, joinable[i]))\n tr.join(joinable[i]);\n }\n dispatch(tr);\n };\n}\n/**\nWrap a command so that, when it produces a transform that causes\ntwo joinable nodes to end up next to each other, those are joined.\nNodes are considered joinable when they are of the same type and\nwhen the `isJoinable` predicate returns true for them or, if an\narray of strings was passed, if their node type name is in that\narray.\n*/\nfunction autoJoin(command, isJoinable) {\n let canJoin = Array.isArray(isJoinable) ? (node) => isJoinable.indexOf(node.type.name) > -1\n : isJoinable;\n return (state, dispatch, view) => command(state, dispatch && wrapDispatchForJoin(dispatch, canJoin), view);\n}\n/**\nCombine a number of command functions into a single function (which\ncalls them one by one until one returns true).\n*/\nfunction chainCommands(...commands) {\n return function (state, dispatch, view) {\n for (let i = 0; i < commands.length; i++)\n if (commands[i](state, dispatch, view))\n return true;\n return false;\n };\n}\nlet backspace = chainCommands(deleteSelection, joinBackward, selectNodeBackward);\nlet del = chainCommands(deleteSelection, joinForward, selectNodeForward);\n/**\nA basic keymap containing bindings not specific to any schema.\nBinds the following keys (when multiple commands are listed, they\nare chained with [`chainCommands`](https://prosemirror.net/docs/ref/#commands.chainCommands)):\n\n* **Enter** to `newlineInCode`, `createParagraphNear`, `liftEmptyBlock`, `splitBlock`\n* **Mod-Enter** to `exitCode`\n* **Backspace** and **Mod-Backspace** to `deleteSelection`, `joinBackward`, `selectNodeBackward`\n* **Delete** and **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`\n* **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`\n* **Mod-a** to `selectAll`\n*/\nconst pcBaseKeymap = {\n \"Enter\": chainCommands(newlineInCode, createParagraphNear, liftEmptyBlock, splitBlock),\n \"Mod-Enter\": exitCode,\n \"Backspace\": backspace,\n \"Mod-Backspace\": backspace,\n \"Shift-Backspace\": backspace,\n \"Delete\": del,\n \"Mod-Delete\": del,\n \"Mod-a\": selectAll\n};\n/**\nA copy of `pcBaseKeymap` that also binds **Ctrl-h** like Backspace,\n**Ctrl-d** like Delete, **Alt-Backspace** like Ctrl-Backspace, and\n**Ctrl-Alt-Backspace**, **Alt-Delete**, and **Alt-d** like\nCtrl-Delete.\n*/\nconst macBaseKeymap = {\n \"Ctrl-h\": pcBaseKeymap[\"Backspace\"],\n \"Alt-Backspace\": pcBaseKeymap[\"Mod-Backspace\"],\n \"Ctrl-d\": pcBaseKeymap[\"Delete\"],\n \"Ctrl-Alt-Backspace\": pcBaseKeymap[\"Mod-Delete\"],\n \"Alt-Delete\": pcBaseKeymap[\"Mod-Delete\"],\n \"Alt-d\": pcBaseKeymap[\"Mod-Delete\"],\n \"Ctrl-a\": selectTextblockStart,\n \"Ctrl-e\": selectTextblockEnd\n};\nfor (let key in pcBaseKeymap)\n macBaseKeymap[key] = pcBaseKeymap[key];\nconst mac = typeof navigator != \"undefined\" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform)\n // @ts-ignore\n : typeof os != \"undefined\" && os.platform ? os.platform() == \"darwin\" : false;\n/**\nDepending on the detected platform, this will hold\n[`pcBasekeymap`](https://prosemirror.net/docs/ref/#commands.pcBaseKeymap) or\n[`macBaseKeymap`](https://prosemirror.net/docs/ref/#commands.macBaseKeymap).\n*/\nconst baseKeymap = mac ? macBaseKeymap : pcBaseKeymap;\n\nexport { autoJoin, baseKeymap, chainCommands, createParagraphNear, deleteSelection, exitCode, joinBackward, joinDown, joinForward, joinTextblockBackward, joinTextblockForward, joinUp, lift, liftEmptyBlock, macBaseKeymap, newlineInCode, pcBaseKeymap, selectAll, selectNodeBackward, selectNodeForward, selectParentNode, selectTextblockEnd, selectTextblockStart, setBlockType, splitBlock, splitBlockAs, splitBlockKeepMarks, toggleMark, wrapIn };\n","import { Plugin } from 'prosemirror-state';\nimport { findWrapping, canJoin } from 'prosemirror-transform';\n\n/**\nInput rules are regular expressions describing a piece of text\nthat, when typed, causes something to happen. This might be\nchanging two dashes into an emdash, wrapping a paragraph starting\nwith `\"> \"` into a blockquote, or something entirely different.\n*/\nclass InputRule {\n /**\n Create an input rule. The rule applies when the user typed\n something and the text directly in front of the cursor matches\n `match`, which should end with `$`.\n \n The `handler` can be a string, in which case the matched text, or\n the first matched group in the regexp, is replaced by that\n string.\n \n Or a it can be a function, which will be called with the match\n array produced by\n [`RegExp.exec`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec),\n as well as the start and end of the matched range, and which can\n return a [transaction](https://prosemirror.net/docs/ref/#state.Transaction) that describes the\n rule's effect, or null to indicate the input was not handled.\n */\n constructor(\n /**\n @internal\n */\n match, handler, options = {}) {\n this.match = match;\n this.match = match;\n this.handler = typeof handler == \"string\" ? stringHandler(handler) : handler;\n this.undoable = options.undoable !== false;\n this.inCode = options.inCode || false;\n this.inCodeMark = options.inCodeMark !== false;\n }\n}\nfunction stringHandler(string) {\n return function (state, match, start, end) {\n let insert = string;\n if (match[1]) {\n let offset = match[0].lastIndexOf(match[1]);\n insert += match[0].slice(offset + match[1].length);\n start += offset;\n let cutOff = start - end;\n if (cutOff > 0) {\n insert = match[0].slice(offset - cutOff, offset) + insert;\n start = end;\n }\n }\n return state.tr.insertText(insert, start, end);\n };\n}\nconst MAX_MATCH = 500;\n/**\nCreate an input rules plugin. When enabled, it will cause text\ninput that matches any of the given rules to trigger the rule's\naction.\n*/\nfunction inputRules({ rules }) {\n let plugin = new Plugin({\n state: {\n init() { return null; },\n apply(tr, prev) {\n let stored = tr.getMeta(this);\n if (stored)\n return stored;\n return tr.selectionSet || tr.docChanged ? null : prev;\n }\n },\n props: {\n handleTextInput(view, from, to, text) {\n return run(view, from, to, text, rules, plugin);\n },\n handleDOMEvents: {\n compositionend: (view) => {\n setTimeout(() => {\n let { $cursor } = view.state.selection;\n if ($cursor)\n run(view, $cursor.pos, $cursor.pos, \"\", rules, plugin);\n });\n }\n }\n },\n isInputRules: true\n });\n return plugin;\n}\nfunction run(view, from, to, text, rules, plugin) {\n if (view.composing)\n return false;\n let state = view.state, $from = state.doc.resolve(from);\n let textBefore = $from.parent.textBetween(Math.max(0, $from.parentOffset - MAX_MATCH), $from.parentOffset, null, \"\\ufffc\") + text;\n for (let i = 0; i < rules.length; i++) {\n let rule = rules[i];\n if (!rule.inCodeMark && $from.marks().some(m => m.type.spec.code))\n continue;\n if ($from.parent.type.spec.code) {\n if (!rule.inCode)\n continue;\n }\n else if (rule.inCode === \"only\") {\n continue;\n }\n let match = rule.match.exec(textBefore);\n if (!match || match[0].length < text.length)\n continue;\n let startPos = from - (match[0].length - text.length);\n if (!rule.inCodeMark) {\n let hasMark = false;\n state.doc.nodesBetween(startPos, $from.pos, node => {\n if (node.isInline && node.marks.some(m => m.type.spec.code))\n hasMark = true;\n });\n if (hasMark)\n continue;\n }\n let tr = rule.handler(state, match, startPos, to);\n if (!tr)\n continue;\n if (rule.undoable)\n tr.setMeta(plugin, { transform: tr, from, to, text });\n view.dispatch(tr);\n return true;\n }\n return false;\n}\n/**\nThis is a command that will undo an input rule, if applying such a\nrule was the last thing that the user did.\n*/\nconst undoInputRule = (state, dispatch) => {\n let plugins = state.plugins;\n for (let i = 0; i < plugins.length; i++) {\n let plugin = plugins[i], undoable;\n if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {\n if (dispatch) {\n let tr = state.tr, toUndo = undoable.transform;\n for (let j = toUndo.steps.length - 1; j >= 0; j--)\n tr.step(toUndo.steps[j].invert(toUndo.docs[j]));\n if (undoable.text) {\n let marks = tr.doc.resolve(undoable.from).marks();\n tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks));\n }\n else {\n tr.delete(undoable.from, undoable.to);\n }\n dispatch(tr);\n }\n return true;\n }\n }\n return false;\n};\n\n/**\nConverts double dashes to an emdash.\n*/\nconst emDash = new InputRule(/--$/, \"—\", { inCodeMark: false });\n/**\nConverts three dots to an ellipsis character.\n*/\nconst ellipsis = new InputRule(/\\.\\.\\.$/, \"…\", { inCodeMark: false });\n/**\n“Smart” opening double quotes.\n*/\nconst openDoubleQuote = new InputRule(/(?:^|[\\s\\{\\[\\(\\<'\"\\u2018\\u201C])(\")$/, \"“\", { inCodeMark: false });\n/**\n“Smart” closing double quotes.\n*/\nconst closeDoubleQuote = new InputRule(/\"$/, \"”\", { inCodeMark: false });\n/**\n“Smart” opening single quotes.\n*/\nconst openSingleQuote = new InputRule(/(?:^|[\\s\\{\\[\\(\\<'\"\\u2018\\u201C])(')$/, \"‘\", { inCodeMark: false });\n/**\n“Smart” closing single quotes.\n*/\nconst closeSingleQuote = new InputRule(/'$/, \"’\", { inCodeMark: false });\n/**\nSmart-quote related input rules.\n*/\nconst smartQuotes = [openDoubleQuote, closeDoubleQuote, openSingleQuote, closeSingleQuote];\n\n/**\nBuild an input rule for automatically wrapping a textblock when a\ngiven string is typed. The `regexp` argument is\ndirectly passed through to the `InputRule` constructor. You'll\nprobably want the regexp to start with `^`, so that the pattern can\nonly occur at the start of a textblock.\n\n`nodeType` is the type of node to wrap in. If it needs attributes,\nyou can either pass them directly, or pass a function that will\ncompute them from the regular expression match.\n\nBy default, if there's a node with the same type above the newly\nwrapped node, the rule will try to [join](https://prosemirror.net/docs/ref/#transform.Transform.join) those\ntwo nodes. You can pass a join predicate, which takes a regular\nexpression match and the node before the wrapped node, and can\nreturn a boolean to indicate whether a join should happen.\n*/\nfunction wrappingInputRule(regexp, nodeType, getAttrs = null, joinPredicate) {\n return new InputRule(regexp, (state, match, start, end) => {\n let attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n let tr = state.tr.delete(start, end);\n let $start = tr.doc.resolve(start), range = $start.blockRange(), wrapping = range && findWrapping(range, nodeType, attrs);\n if (!wrapping)\n return null;\n tr.wrap(range, wrapping);\n let before = tr.doc.resolve(start - 1).nodeBefore;\n if (before && before.type == nodeType && canJoin(tr.doc, start - 1) &&\n (!joinPredicate || joinPredicate(match, before)))\n tr.join(start - 1);\n return tr;\n });\n}\n/**\nBuild an input rule that changes the type of a textblock when the\nmatched text is typed into it. You'll usually want to start your\nregexp with `^` to that it is only matched at the start of a\ntextblock. The optional `getAttrs` parameter can be used to compute\nthe new node's attributes, and works the same as in the\n`wrappingInputRule` function.\n*/\nfunction textblockTypeInputRule(regexp, nodeType, getAttrs = null) {\n return new InputRule(regexp, (state, match, start, end) => {\n let $start = state.doc.resolve(start);\n let attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), nodeType))\n return null;\n return state.tr\n .delete(start, end)\n .setBlockType(start, start, nodeType, attrs);\n });\n}\n\nexport { InputRule, closeDoubleQuote, closeSingleQuote, ellipsis, emDash, inputRules, openDoubleQuote, openSingleQuote, smartQuotes, textblockTypeInputRule, undoInputRule, wrappingInputRule };\n","import { PluginKey, Plugin, NodeSelection } from 'prosemirror-state';\nimport { InputRule } from 'prosemirror-inputrules';\nimport { expectDomTypeError, missingRootElement, getAtomFromSchemaFail } from '@milkdown/exception';\n\nconst nav = typeof navigator != \"undefined\" ? navigator : null;\nconst doc = typeof document != \"undefined\" ? document : null;\nconst agent = nav && nav.userAgent || \"\";\nconst ie_edge = /Edge\\/(\\d+)/.exec(agent);\nconst ie_upto10 = /MSIE \\d/.exec(agent);\nconst ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(agent);\nconst ie = !!(ie_upto10 || ie_11up || ie_edge);\nconst ie_version = ie_upto10 ? document.documentMode : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0;\nconst gecko = !ie && /gecko\\/(\\d+)/i.test(agent);\nconst gecko_version = gecko && +(/Firefox\\/(\\d+)/.exec(agent) || [0, 0])[1];\nconst _chrome = !ie && /Chrome\\/(\\d+)/.exec(agent);\nconst chrome = !!_chrome;\nconst chrome_version = _chrome ? +_chrome[1] : 0;\nconst safari = !ie && !!nav && /Apple Computer/.test(nav.vendor);\nconst ios = safari && (/Mobile\\/\\w+/.test(agent) || !!nav && nav.maxTouchPoints > 2);\nconst mac = ios || (nav ? /Mac/.test(nav.platform) : false);\nconst android = /Android \\d/.test(agent);\nconst webkit = !!doc && \"webkitFontSmoothing\" in doc.documentElement.style;\nconst webkit_version = webkit ? +(/\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0;\n\nvar browser = /*#__PURE__*/Object.freeze({\n __proto__: null,\n android: android,\n chrome: chrome,\n chrome_version: chrome_version,\n gecko: gecko,\n gecko_version: gecko_version,\n ie: ie,\n ie_version: ie_version,\n ios: ios,\n mac: mac,\n safari: safari,\n webkit: webkit,\n webkit_version: webkit_version\n});\n\nfunction run(view, from, to, text, rules, plugin) {\n if (view.composing) return false;\n const state = view.state;\n const $from = state.doc.resolve(from);\n if ($from.parent.type.spec.code) return false;\n const textBefore = $from.parent.textBetween(\n Math.max(0, $from.parentOffset - 500),\n $from.parentOffset,\n void 0,\n \"\\uFFFC\"\n ) + text;\n for (let _matcher of rules) {\n const matcher = _matcher;\n const match = matcher.match.exec(textBefore);\n const tr = match && match[0] && matcher.handler(state, match, from - (match[0].length - text.length), to);\n if (!tr) continue;\n if (matcher.undoable !== false)\n tr.setMeta(plugin, { transform: tr, from, to, text });\n view.dispatch(tr);\n return true;\n }\n return false;\n}\nconst customInputRulesKey = new PluginKey(\"MILKDOWN_CUSTOM_INPUTRULES\");\nfunction customInputRules({ rules }) {\n const plugin = new Plugin({\n key: customInputRulesKey,\n isInputRules: true,\n state: {\n init() {\n return null;\n },\n apply(tr, prev) {\n const stored = tr.getMeta(this);\n if (stored) return stored;\n return tr.selectionSet || tr.docChanged ? null : prev;\n }\n },\n props: {\n handleTextInput(view, from, to, text) {\n return run(view, from, to, text, rules, plugin);\n },\n handleDOMEvents: {\n compositionend: (view) => {\n setTimeout(() => {\n const { $cursor } = view.state.selection;\n if ($cursor) run(view, $cursor.pos, $cursor.pos, \"\", rules, plugin);\n });\n return false;\n }\n },\n handleKeyDown(view, event) {\n if (event.key !== \"Enter\") return false;\n const { $cursor } = view.state.selection;\n if ($cursor)\n return run(view, $cursor.pos, $cursor.pos, \"\\n\", rules, plugin);\n return false;\n }\n }\n });\n return plugin;\n}\n\nfunction markRule(regexp, markType, options = {}) {\n return new InputRule(regexp, (state, match, start, end) => {\n var _a, _b, _c, _d;\n const { tr } = state;\n const matchLength = match.length;\n let group = match[matchLength - 1];\n let fullMatch = match[0];\n let initialStoredMarks = [];\n let markEnd = end;\n const captured = {\n group,\n fullMatch,\n start,\n end\n };\n const result = (_a = options.updateCaptured) == null ? void 0 : _a.call(options, captured);\n Object.assign(captured, result);\n ({ group, fullMatch, start, end } = captured);\n if (fullMatch === null) return null;\n if ((group == null ? void 0 : group.trim()) === \"\") return null;\n if (group) {\n const startSpaces = fullMatch.search(/\\S/);\n const textStart = start + fullMatch.indexOf(group);\n const textEnd = textStart + group.length;\n initialStoredMarks = (_b = tr.storedMarks) != null ? _b : [];\n if (textEnd < end) tr.delete(textEnd, end);\n if (textStart > start) tr.delete(start + startSpaces, textStart);\n markEnd = start + startSpaces + group.length;\n const attrs = (_c = options.getAttr) == null ? void 0 : _c.call(options, match);\n tr.addMark(start, markEnd, markType.create(attrs));\n tr.setStoredMarks(initialStoredMarks);\n (_d = options.beforeDispatch) == null ? void 0 : _d.call(options, { match, start, end, tr });\n }\n return tr;\n });\n}\n\nfunction nodeRule(regexp, nodeType, options = {}) {\n return new InputRule(regexp, (state, match, start, end) => {\n var _a, _b, _c;\n const { tr } = state;\n let group = match[1];\n let fullMatch = match[0];\n const captured = {\n group,\n fullMatch,\n start,\n end\n };\n const result = (_a = options.updateCaptured) == null ? void 0 : _a.call(options, captured);\n Object.assign(captured, result);\n ({ group, fullMatch, start, end } = captured);\n if (fullMatch === null) return null;\n if (!group || group.trim() === \"\") return null;\n const attrs = (_b = options.getAttr) == null ? void 0 : _b.call(options, match);\n const node = nodeType.createAndFill(attrs);\n if (node) {\n tr.replaceRangeWith(\n nodeType.isBlock ? tr.doc.resolve(start).before() : start,\n end,\n node\n );\n (_c = options.beforeDispatch) == null ? void 0 : _c.call(options, {\n match: [fullMatch, group != null ? group : \"\"],\n start,\n end,\n tr\n });\n }\n return tr;\n });\n}\n\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction calculateNodePosition(view, target, handler) {\n const state = view.state;\n const { from } = state.selection;\n const { node } = view.domAtPos(from);\n const element = node instanceof Text ? node.parentElement : node;\n if (!(element instanceof HTMLElement)) throw expectDomTypeError(element);\n const selectedNodeRect = element.getBoundingClientRect();\n const targetNodeRect = target.getBoundingClientRect();\n const parent = target.parentElement;\n if (!parent) throw expectDomTypeError(parent);\n const parentNodeRect = parent.getBoundingClientRect();\n const [top, left] = handler(selectedNodeRect, targetNodeRect, parentNodeRect);\n target.style.top = `${top}px`;\n target.style.left = `${left}px`;\n}\nfunction calculateTextPosition(view, target, handler) {\n const state = view.state;\n const { from, to } = state.selection;\n const start = view.coordsAtPos(from);\n const end = view.coordsAtPos(to);\n const targetNodeRect = target.getBoundingClientRect();\n const parent = target.parentElement;\n if (!parent) throw missingRootElement();\n const parentNodeRect = parent.getBoundingClientRect();\n const [top, left] = handler(start, end, targetNodeRect, parentNodeRect);\n target.style.top = `${top}px`;\n target.style.left = `${left}px`;\n}\nfunction minMax(value = 0, min = 0, max = 0) {\n return Math.min(Math.max(value, min), max);\n}\nfunction posToDOMRect(view, from, to) {\n const minPos = 0;\n const maxPos = view.state.doc.content.size;\n const resolvedFrom = minMax(from, minPos, maxPos);\n const resolvedEnd = minMax(to, minPos, maxPos);\n const start = view.coordsAtPos(resolvedFrom);\n const end = view.coordsAtPos(resolvedEnd, -1);\n const top = Math.min(start.top, end.top);\n const bottom = Math.max(start.bottom, end.bottom);\n const left = Math.min(start.left, end.left);\n const right = Math.max(start.right, end.right);\n const width = right - left;\n const height = bottom - top;\n const x = left;\n const y = top;\n const data = {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x,\n y\n };\n return __spreadProps(__spreadValues({}, data), {\n toJSON: () => data\n });\n}\n\nfunction cloneTr(tr) {\n return Object.assign(Object.create(tr), tr).setTime(Date.now());\n}\nfunction equalNodeType(nodeType, node) {\n return Array.isArray(nodeType) && nodeType.includes(node.type) || node.type === nodeType;\n}\nfunction isTextOnlySlice(slice) {\n if (slice.content.childCount === 1) {\n const node = slice.content.firstChild;\n if ((node == null ? void 0 : node.type.name) === \"text\" && node.marks.length === 0) return node;\n if ((node == null ? void 0 : node.type.name) === \"paragraph\" && node.childCount === 1) {\n const _node = node.firstChild;\n if ((_node == null ? void 0 : _node.type.name) === \"text\" && _node.marks.length === 0) return _node;\n }\n }\n return false;\n}\n\nfunction flatten(node, descend = true) {\n const result = [];\n node.descendants((child, pos) => {\n result.push({ node: child, pos });\n if (!descend) return false;\n return void 0;\n });\n return result;\n}\nfunction findChildren(predicate) {\n return (node, descend) => flatten(node, descend).filter((child) => predicate(child.node));\n}\nfunction findChildrenByMark(node, markType, descend) {\n return findChildren((child) => Boolean(markType.isInSet(child.marks)))(\n node,\n descend\n );\n}\nfunction findParent(predicate) {\n return ($pos) => {\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\n const node = $pos.node(depth);\n if (predicate(node)) {\n const from = $pos.before(depth);\n const to = $pos.after(depth);\n return {\n from,\n to,\n node\n };\n }\n }\n return void 0;\n };\n}\nfunction findParentNodeType($pos, nodeType) {\n return findParent((node) => node.type === nodeType)($pos);\n}\n\nfunction getNodeFromSchema(type, schema) {\n const target = schema.nodes[type];\n if (!target) throw getAtomFromSchemaFail(\"node\", type);\n return target;\n}\nfunction getMarkFromSchema(type, schema) {\n const target = schema.marks[type];\n if (!target) throw getAtomFromSchemaFail(\"mark\", type);\n return target;\n}\n\nfunction findParentNodeClosestToPos(predicate) {\n return ($pos) => {\n for (let i = $pos.depth; i > 0; i--) {\n const node = $pos.node(i);\n if (predicate(node)) {\n return {\n pos: i > 0 ? $pos.before(i) : 0,\n start: $pos.start(i),\n depth: i,\n node\n };\n }\n }\n return void 0;\n };\n}\nfunction findParentNode(predicate) {\n return (selection) => {\n return findParentNodeClosestToPos(predicate)(selection.$from);\n };\n}\nfunction findSelectedNodeOfType(selection, nodeType) {\n if (!(selection instanceof NodeSelection)) return;\n const { node, $from } = selection;\n if (equalNodeType(nodeType, node))\n return {\n node,\n pos: $from.pos,\n start: $from.start($from.depth),\n depth: $from.depth\n };\n return void 0;\n}\nconst findNodeInSelection = (state, node) => {\n const { selection, doc } = state;\n if (selection instanceof NodeSelection) {\n return {\n hasNode: selection.node.type === node,\n pos: selection.from,\n target: selection.node\n };\n }\n const { from, to } = selection;\n let hasNode = false;\n let pos = -1;\n let target = null;\n doc.nodesBetween(from, to, (n, p) => {\n if (target) return false;\n if (n.type === node) {\n hasNode = true;\n pos = p;\n target = n;\n return false;\n }\n return true;\n });\n return {\n hasNode,\n pos,\n target\n };\n};\n\nexport { browser, calculateNodePosition, calculateTextPosition, cloneTr, customInputRules, customInputRulesKey, equalNodeType, findChildren, findChildrenByMark, findNodeInSelection, findParent, findParentNode, findParentNodeClosestToPos, findParentNodeType, findSelectedNodeOfType, flatten, getMarkFromSchema, getNodeFromSchema, isTextOnlySlice, markRule, nodeRule, posToDOMRect };\n//# sourceMappingURL=index.js.map\n","export var base = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 10: \"Enter\",\n 12: \"NumLock\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 44: \"PrintScreen\",\n 45: \"Insert\",\n 46: \"Delete\",\n 59: \";\",\n 61: \"=\",\n 91: \"Meta\",\n 92: \"Meta\",\n 106: \"*\",\n 107: \"+\",\n 108: \",\",\n 109: \"-\",\n 110: \".\",\n 111: \"/\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 160: \"Shift\",\n 161: \"Shift\",\n 162: \"Control\",\n 163: \"Control\",\n 164: \"Alt\",\n 165: \"Alt\",\n 173: \"-\",\n 186: \";\",\n 187: \"=\",\n 188: \",\",\n 189: \"-\",\n 190: \".\",\n 191: \"/\",\n 192: \"`\",\n 219: \"[\",\n 220: \"\\\\\",\n 221: \"]\",\n 222: \"'\"\n}\n\nexport var shift = {\n 48: \")\",\n 49: \"!\",\n 50: \"@\",\n 51: \"#\",\n 52: \"$\",\n 53: \"%\",\n 54: \"^\",\n 55: \"&\",\n 56: \"*\",\n 57: \"(\",\n 59: \":\",\n 61: \"+\",\n 173: \"_\",\n 186: \":\",\n 187: \"+\",\n 188: \"<\",\n 189: \"_\",\n 190: \">\",\n 191: \"?\",\n 192: \"~\",\n 219: \"{\",\n 220: \"|\",\n 221: \"}\",\n 222: \"\\\"\"\n}\n\nvar mac = typeof navigator != \"undefined\" && /Mac/.test(navigator.platform)\nvar ie = typeof navigator != \"undefined\" && /MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent)\n\n// Fill in the digit keys\nfor (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i)\n\n// The function keys\nfor (var i = 1; i <= 24; i++) base[i + 111] = \"F\" + i\n\n// And the alphabetic keys\nfor (var i = 65; i <= 90; i++) {\n base[i] = String.fromCharCode(i + 32)\n shift[i] = String.fromCharCode(i)\n}\n\n// For each code that doesn't have a shift-equivalent, copy the base name\nfor (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code]\n\nexport function keyName(event) {\n // On macOS, keys held with Shift and Cmd don't reflect the effect of Shift in `.key`.\n // On IE, shift effect is never included in `.key`.\n var ignoreKey = mac && event.metaKey && event.shiftKey && !event.ctrlKey && !event.altKey ||\n ie && event.shiftKey && event.key && event.key.length == 1 ||\n event.key == \"Unidentified\"\n var name = (!ignoreKey && event.key) ||\n (event.shiftKey ? shift : base)[event.keyCode] ||\n event.key || \"Unidentified\"\n // Edge sometimes produces wrong names (Issue #3)\n if (name == \"Esc\") name = \"Escape\"\n if (name == \"Del\") name = \"Delete\"\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/\n if (name == \"Left\") name = \"ArrowLeft\"\n if (name == \"Up\") name = \"ArrowUp\"\n if (name == \"Right\") name = \"ArrowRight\"\n if (name == \"Down\") name = \"ArrowDown\"\n return name\n}\n","import { keyName, base } from 'w3c-keyname';\nimport { Plugin } from 'prosemirror-state';\n\nconst mac = typeof navigator != \"undefined\" && /Mac|iP(hone|[oa]d)/.test(navigator.platform);\nconst windows = typeof navigator != \"undefined\" && /Win/.test(navigator.platform);\nfunction normalizeKeyName(name) {\n let parts = name.split(/-(?!$)/), result = parts[parts.length - 1];\n if (result == \"Space\")\n result = \" \";\n let alt, ctrl, shift, meta;\n for (let i = 0; i < parts.length - 1; i++) {\n let mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod))\n meta = true;\n else if (/^a(lt)?$/i.test(mod))\n alt = true;\n else if (/^(c|ctrl|control)$/i.test(mod))\n ctrl = true;\n else if (/^s(hift)?$/i.test(mod))\n shift = true;\n else if (/^mod$/i.test(mod)) {\n if (mac)\n meta = true;\n else\n ctrl = true;\n }\n else\n throw new Error(\"Unrecognized modifier name: \" + mod);\n }\n if (alt)\n result = \"Alt-\" + result;\n if (ctrl)\n result = \"Ctrl-\" + result;\n if (meta)\n result = \"Meta-\" + result;\n if (shift)\n result = \"Shift-\" + result;\n return result;\n}\nfunction normalize(map) {\n let copy = Object.create(null);\n for (let prop in map)\n copy[normalizeKeyName(prop)] = map[prop];\n return copy;\n}\nfunction modifiers(name, event, shift = true) {\n if (event.altKey)\n name = \"Alt-\" + name;\n if (event.ctrlKey)\n name = \"Ctrl-\" + name;\n if (event.metaKey)\n name = \"Meta-\" + name;\n if (shift && event.shiftKey)\n name = \"Shift-\" + name;\n return name;\n}\n/**\nCreate a keymap plugin for the given set of bindings.\n\nBindings should map key names to [command](https://prosemirror.net/docs/ref/#commands)-style\nfunctions, which will be called with `(EditorState, dispatch,\nEditorView)` arguments, and should return true when they've handled\nthe key. Note that the view argument isn't part of the command\nprotocol, but can be used as an escape hatch if a binding needs to\ndirectly interact with the UI.\n\nKey names may be strings like `\"Shift-Ctrl-Enter\"`—a key\nidentifier prefixed with zero or more modifiers. Key identifiers\nare based on the strings that can appear in\n[`KeyEvent.key`](https:developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key).\nUse lowercase letters to refer to letter keys (or uppercase letters\nif you want shift to be held). You may use `\"Space\"` as an alias\nfor the `\" \"` name.\n\nModifiers can be given in any order. `Shift-` (or `s-`), `Alt-` (or\n`a-`), `Ctrl-` (or `c-` or `Control-`) and `Cmd-` (or `m-` or\n`Meta-`) are recognized. For characters that are created by holding\nshift, the `Shift-` prefix is implied, and should not be added\nexplicitly.\n\nYou can use `Mod-` as a shorthand for `Cmd-` on Mac and `Ctrl-` on\nother platforms.\n\nYou can add multiple keymap plugins to an editor. The order in\nwhich they appear determines their precedence (the ones early in\nthe array get to dispatch first).\n*/\nfunction keymap(bindings) {\n return new Plugin({ props: { handleKeyDown: keydownHandler(bindings) } });\n}\n/**\nGiven a set of bindings (using the same format as\n[`keymap`](https://prosemirror.net/docs/ref/#keymap.keymap)), return a [keydown\nhandler](https://prosemirror.net/docs/ref/#view.EditorProps.handleKeyDown) that handles them.\n*/\nfunction keydownHandler(bindings) {\n let map = normalize(bindings);\n return function (view, event) {\n let name = keyName(event), baseName, direct = map[modifiers(name, event)];\n if (direct && direct(view.state, view.dispatch, view))\n return true;\n // A character key\n if (name.length == 1 && name != \" \") {\n if (event.shiftKey) {\n // In case the name was already modified by shift, try looking\n // it up without its shift modifier\n let noShift = map[modifiers(name, event, false)];\n if (noShift && noShift(view.state, view.dispatch, view))\n return true;\n }\n if ((event.altKey || event.metaKey || event.ctrlKey) &&\n // Ctrl-Alt may be used for AltGr on Windows\n !(windows && event.ctrlKey && event.altKey) &&\n (baseName = base[event.keyCode]) && baseName != name) {\n // Try falling back to the keyCode when there's a modifier\n // active or the character produced isn't ASCII, and our table\n // produces a different name from the the keyCode. See #668,\n // #1060, #1529.\n let fromCode = map[modifiers(baseName, event)];\n if (fromCode && fromCode(view.state, view.dispatch, view))\n return true;\n }\n }\n return false;\n };\n}\n\nexport { keydownHandler, keymap };\n","import { TextSelection, NodeSelection, AllSelection, Selection } from 'prosemirror-state';\nimport { DOMSerializer, Fragment, Mark, Slice, DOMParser } from 'prosemirror-model';\nimport { dropPoint } from 'prosemirror-transform';\n\nconst domIndex = function (node) {\n for (var index = 0;; index++) {\n node = node.previousSibling;\n if (!node)\n return index;\n }\n};\nconst parentNode = function (node) {\n let parent = node.assignedSlot || node.parentNode;\n return parent && parent.nodeType == 11 ? parent.host : parent;\n};\nlet reusedRange = null;\n// Note that this will always return the same range, because DOM range\n// objects are every expensive, and keep slowing down subsequent DOM\n// updates, for some reason.\nconst textRange = function (node, from, to) {\n let range = reusedRange || (reusedRange = document.createRange());\n range.setEnd(node, to == null ? node.nodeValue.length : to);\n range.setStart(node, from || 0);\n return range;\n};\nconst clearReusedRange = function () {\n reusedRange = null;\n};\n// Scans forward and backward through DOM positions equivalent to the\n// given one to see if the two are in the same place (i.e. after a\n// text node vs at the end of that text node)\nconst isEquivalentPosition = function (node, off, targetNode, targetOff) {\n return targetNode && (scanFor(node, off, targetNode, targetOff, -1) ||\n scanFor(node, off, targetNode, targetOff, 1));\n};\nconst atomElements = /^(img|br|input|textarea|hr)$/i;\nfunction scanFor(node, off, targetNode, targetOff, dir) {\n var _a;\n for (;;) {\n if (node == targetNode && off == targetOff)\n return true;\n if (off == (dir < 0 ? 0 : nodeSize(node))) {\n let parent = node.parentNode;\n if (!parent || parent.nodeType != 1 || hasBlockDesc(node) || atomElements.test(node.nodeName) ||\n node.contentEditable == \"false\")\n return false;\n off = domIndex(node) + (dir < 0 ? 0 : 1);\n node = parent;\n }\n else if (node.nodeType == 1) {\n let child = node.childNodes[off + (dir < 0 ? -1 : 0)];\n if (child.nodeType == 1 && child.contentEditable == \"false\") {\n if ((_a = child.pmViewDesc) === null || _a === void 0 ? void 0 : _a.ignoreForSelection)\n off += dir;\n else\n return false;\n }\n else {\n node = child;\n off = dir < 0 ? nodeSize(node) : 0;\n }\n }\n else {\n return false;\n }\n }\n}\nfunction nodeSize(node) {\n return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction textNodeBefore$1(node, offset) {\n for (;;) {\n if (node.nodeType == 3 && offset)\n return node;\n if (node.nodeType == 1 && offset > 0) {\n if (node.contentEditable == \"false\")\n return null;\n node = node.childNodes[offset - 1];\n offset = nodeSize(node);\n }\n else if (node.parentNode && !hasBlockDesc(node)) {\n offset = domIndex(node);\n node = node.parentNode;\n }\n else {\n return null;\n }\n }\n}\nfunction textNodeAfter$1(node, offset) {\n for (;;) {\n if (node.nodeType == 3 && offset < node.nodeValue.length)\n return node;\n if (node.nodeType == 1 && offset < node.childNodes.length) {\n if (node.contentEditable == \"false\")\n return null;\n node = node.childNodes[offset];\n offset = 0;\n }\n else if (node.parentNode && !hasBlockDesc(node)) {\n offset = domIndex(node) + 1;\n node = node.parentNode;\n }\n else {\n return null;\n }\n }\n}\nfunction isOnEdge(node, offset, parent) {\n for (let atStart = offset == 0, atEnd = offset == nodeSize(node); atStart || atEnd;) {\n if (node == parent)\n return true;\n let index = domIndex(node);\n node = node.parentNode;\n if (!node)\n return false;\n atStart = atStart && index == 0;\n atEnd = atEnd && index == nodeSize(node);\n }\n}\nfunction hasBlockDesc(dom) {\n let desc;\n for (let cur = dom; cur; cur = cur.parentNode)\n if (desc = cur.pmViewDesc)\n break;\n return desc && desc.node && desc.node.isBlock && (desc.dom == dom || desc.contentDOM == dom);\n}\n// Work around Chrome issue https://bugs.chromium.org/p/chromium/issues/detail?id=447523\n// (isCollapsed inappropriately returns true in shadow dom)\nconst selectionCollapsed = function (domSel) {\n return domSel.focusNode && isEquivalentPosition(domSel.focusNode, domSel.focusOffset, domSel.anchorNode, domSel.anchorOffset);\n};\nfunction keyEvent(keyCode, key) {\n let event = document.createEvent(\"Event\");\n event.initEvent(\"keydown\", true, true);\n event.keyCode = keyCode;\n event.key = event.code = key;\n return event;\n}\nfunction deepActiveElement(doc) {\n let elt = doc.activeElement;\n while (elt && elt.shadowRoot)\n elt = elt.shadowRoot.activeElement;\n return elt;\n}\nfunction caretFromPoint(doc, x, y) {\n if (doc.caretPositionFromPoint) {\n try { // Firefox throws for this call in hard-to-predict circumstances (#994)\n let pos = doc.caretPositionFromPoint(x, y);\n // Clip the offset, because Chrome will return a text offset\n // into <input> nodes, which can't be treated as a regular DOM\n // offset\n if (pos)\n return { node: pos.offsetNode, offset: Math.min(nodeSize(pos.offsetNode), pos.offset) };\n }\n catch (_) { }\n }\n if (doc.caretRangeFromPoint) {\n let range = doc.caretRangeFromPoint(x, y);\n if (range)\n return { node: range.startContainer, offset: Math.min(nodeSize(range.startContainer), range.startOffset) };\n }\n}\n\nconst nav = typeof navigator != \"undefined\" ? navigator : null;\nconst doc = typeof document != \"undefined\" ? document : null;\nconst agent = (nav && nav.userAgent) || \"\";\nconst ie_edge = /Edge\\/(\\d+)/.exec(agent);\nconst ie_upto10 = /MSIE \\d/.exec(agent);\nconst ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(agent);\nconst ie = !!(ie_upto10 || ie_11up || ie_edge);\nconst ie_version = ie_upto10 ? document.documentMode : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0;\nconst gecko = !ie && /gecko\\/(\\d+)/i.test(agent);\ngecko && +(/Firefox\\/(\\d+)/.exec(agent) || [0, 0])[1];\nconst _chrome = !ie && /Chrome\\/(\\d+)/.exec(agent);\nconst chrome = !!_chrome;\nconst chrome_version = _chrome ? +_chrome[1] : 0;\nconst safari = !ie && !!nav && /Apple Computer/.test(nav.vendor);\n// Is true for both iOS and iPadOS for convenience\nconst ios = safari && (/Mobile\\/\\w+/.test(agent) || !!nav && nav.maxTouchPoints > 2);\nconst mac = ios || (nav ? /Mac/.test(nav.platform) : false);\nconst windows = nav ? /Win/.test(nav.platform) : false;\nconst android = /Android \\d/.test(agent);\nconst webkit = !!doc && \"webkitFontSmoothing\" in doc.documentElement.style;\nconst webkit_version = webkit ? +(/\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0;\n\nfunction windowRect(doc) {\n let vp = doc.defaultView && doc.defaultView.visualViewport;\n if (vp)\n return {\n left: 0, right: vp.width,\n top: 0, bottom: vp.height\n };\n return { left: 0, right: doc.documentElement.clientWidth,\n top: 0, bottom: doc.documentElement.clientHeight };\n}\nfunction getSide(value, side) {\n return typeof value == \"number\" ? value : value[side];\n}\nfunction clientRect(node) {\n let rect = node.getBoundingClientRect();\n // Adjust for elements with style \"transform: scale()\"\n let scaleX = (rect.width / node.offsetWidth) || 1;\n let scaleY = (rect.height / node.offsetHeight) || 1;\n // Make sure scrollbar width isn't included in the rectangle\n return { left: rect.left, right: rect.left + node.clientWidth * scaleX,\n top: rect.top, bottom: rect.top + node.clientHeight * scaleY };\n}\nfunction scrollRectIntoView(view, rect, startDOM) {\n let scrollThreshold = view.someProp(\"scrollThreshold\") || 0, scrollMargin = view.someProp(\"scrollMargin\") || 5;\n let doc = view.dom.ownerDocument;\n for (let parent = startDOM || view.dom;;) {\n if (!parent)\n break;\n if (parent.nodeType != 1) {\n parent = parentNode(parent);\n continue;\n }\n let elt = parent;\n let atTop = elt == doc.body;\n let bounding = atTop ? windowRect(doc) : clientRect(elt);\n let moveX = 0, moveY = 0;\n if (rect.top < bounding.top + getSide(scrollThreshold, \"top\"))\n moveY = -(bounding.top - rect.top + getSide(scrollMargin, \"top\"));\n else if (rect.bottom > bounding.bottom - getSide(scrollThreshold, \"bottom\"))\n moveY = rect.bottom - rect.top > bounding.bottom - bounding.top\n ? rect.top + getSide(scrollMargin, \"top\") - bounding.top\n : rect.bottom - bounding.bottom + getSide(scrollMargin, \"bottom\");\n if (rect.left < bounding.left + getSide(scrollThreshold, \"left\"))\n moveX = -(bounding.left - rect.left + getSide(scrollMargin, \"left\"));\n else if (rect.right > bounding.right - getSide(scrollThreshold, \"right\"))\n moveX = rect.right - bounding.right + getSide(scrollMargin, \"right\");\n if (moveX || moveY) {\n if (atTop) {\n doc.defaultView.scrollBy(moveX, moveY);\n }\n else {\n let startX = elt.scrollLeft, startY = elt.scrollTop;\n if (moveY)\n elt.scrollTop += moveY;\n if (moveX)\n elt.scrollLeft += moveX;\n let dX = elt.scrollLeft - startX, dY = elt.scrollTop - startY;\n rect = { left: rect.left - dX, top: rect.top - dY, right: rect.right - dX, bottom: rect.bottom - dY };\n }\n }\n let pos = atTop ? \"fixed\" : getComputedStyle(parent).position;\n if (/^(fixed|sticky)$/.test(pos))\n break;\n parent = pos == \"absolute\" ? parent.offsetParent : parentNode(parent);\n }\n}\n// Store the scroll position of the editor's parent nodes, along with\n// the top position of an element near the top of the editor, which\n// will be used to make sure the visible viewport remains stable even\n// when the size of the content above changes.\nfunction storeScrollPos(view) {\n let rect = view.dom.getBoundingClientRect(), startY = Math.max(0, rect.top);\n let refDOM, refTop;\n for (let x = (rect.left + rect.right) / 2, y = startY + 1; y < Math.min(innerHeight, rect.bottom); y += 5) {\n let dom = view.root.elementFromPoint(x, y);\n if (!dom || dom == view.dom || !view.dom.contains(dom))\n continue;\n let localRect = dom.getBoundingClientRect();\n if (localRect.top >= startY - 20) {\n refDOM = dom;\n refTop = localRect.top;\n break;\n }\n }\n return { refDOM: refDOM, refTop: refTop, stack: scrollStack(view.dom) };\n}\nfunction scrollStack(dom) {\n let stack = [], doc = dom.ownerDocument;\n for (let cur = dom; cur; cur = parentNode(cur)) {\n stack.push({ dom: cur, top: cur.scrollTop, left: cur.scrollLeft });\n if (dom == doc)\n break;\n }\n return stack;\n}\n// Reset the scroll position of the editor's parent nodes to that what\n// it was before, when storeScrollPos was called.\nfunction resetScrollPos({ refDOM, refTop, stack }) {\n let newRefTop = refDOM ? refDOM.getBoundingClientRect().top : 0;\n restoreScrollStack(stack, newRefTop == 0 ? 0 : newRefTop - refTop);\n}\nfunction restoreScrollStack(stack, dTop) {\n for (let i = 0; i < stack.length; i++) {\n let { dom, top, left } = stack[i];\n if (dom.scrollTop != top + dTop)\n dom.scrollTop = top + dTop;\n if (dom.scrollLeft != left)\n dom.scrollLeft = left;\n }\n}\nlet preventScrollSupported = null;\n// Feature-detects support for .focus({preventScroll: true}), and uses\n// a fallback kludge when not supported.\nfunction focusPreventScroll(dom) {\n if (dom.setActive)\n return dom.setActive(); // in IE\n if (preventScrollSupported)\n return dom.focus(preventScrollSupported);\n let stored = scrollStack(dom);\n dom.focus(preventScrollSupported == null ? {\n get preventScroll() {\n preventScrollSupported = { preventScroll: true };\n return true;\n }\n } : undefined);\n if (!preventScrollSupported) {\n preventScrollSupported = false;\n restoreScrollStack(stored, 0);\n }\n}\nfunction findOffsetInNode(node, coords) {\n let closest, dxClosest = 2e8, coordsClosest, offset = 0;\n let rowBot = coords.top, rowTop = coords.top;\n let firstBelow, coordsBelow;\n for (let child = node.firstChild, childIndex = 0; child; child = child.nextSibling, childIndex++) {\n let rects;\n if (child.nodeType == 1)\n rects = child.getClientRects();\n else if (child.nodeType == 3)\n rects = textRange(child).getClientRects();\n else\n continue;\n for (let i = 0; i < rects.length; i++) {\n let rect = rects[i];\n if (rect.top <= rowBot && rect.bottom >= rowTop) {\n rowBot = Math.max(rect.bottom, rowBot);\n rowTop = Math.min(rect.top, rowTop);\n let dx = rect.left > coords.left ? rect.left - coords.left\n : rect.right < coords.left ? coords.left - rect.right : 0;\n if (dx < dxClosest) {\n closest = child;\n dxClosest = dx;\n coordsClosest = dx && closest.nodeType == 3 ? {\n left: rect.right < coords.left ? rect.right : rect.left,\n top: coords.top\n } : coords;\n if (child.nodeType == 1 && dx)\n offset = childIndex + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0);\n continue;\n }\n }\n else if (rect.top > coords.top && !firstBelow && rect.left <= coords.left && rect.right >= coords.left) {\n firstBelow = child;\n coordsBelow = { left: Math.max(rect.left, Math.min(rect.right, coords.left)), top: rect.top };\n }\n if (!closest && (coords.left >= rect.right && coords.top >= rect.top ||\n coords.left >= rect.left && coords.top >= rect.bottom))\n offset = childIndex + 1;\n }\n }\n if (!closest && firstBelow) {\n closest = firstBelow;\n coordsClosest = coordsBelow;\n dxClosest = 0;\n }\n if (closest && closest.nodeType == 3)\n return findOffsetInText(closest, coordsClosest);\n if (!closest || (dxClosest && closest.nodeType == 1))\n return { node, offset };\n return findOffsetInNode(closest, coordsClosest);\n}\nfunction findOffsetInText(node, coords) {\n let len = node.nodeValue.length;\n let range = document.createRange(), result;\n for (let i = 0; i < len; i++) {\n range.setEnd(node, i + 1);\n range.setStart(node, i);\n let rect = singleRect(range, 1);\n if (rect.top == rect.bottom)\n continue;\n if (inRect(coords, rect)) {\n result = { node, offset: i + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0) };\n break;\n }\n }\n range.detach();\n return result || { node, offset: 0 };\n}\nfunction inRect(coords, rect) {\n return coords.left >= rect.left - 1 && coords.left <= rect.right + 1 &&\n coords.top >= rect.top - 1 && coords.top <= rect.bottom + 1;\n}\nfunction targetKludge(dom, coords) {\n let parent = dom.parentNode;\n if (parent && /^li$/i.test(parent.nodeName) && coords.left < dom.getBoundingClientRect().left)\n return parent;\n return dom;\n}\nfunction posFromElement(view, elt, coords) {\n let { node, offset } = findOffsetInNode(elt, coords), bias = -1;\n if (node.nodeType == 1 && !node.firstChild) {\n let rect = node.getBoundingClientRect();\n bias = rect.left != rect.right && coords.left > (rect.left + rect.right) / 2 ? 1 : -1;\n }\n return view.docView.posFromDOM(node, offset, bias);\n}\nfunction posFromCaret(view, node, offset, coords) {\n // Browser (in caretPosition/RangeFromPoint) will agressively\n // normalize towards nearby inline nodes. Since we are interested in\n // positions between block nodes too, we first walk up the hierarchy\n // of nodes to see if there are block nodes that the coordinates\n // fall outside of. If so, we take the position before/after that\n // block. If not, we call `posFromDOM` on the raw node/offset.\n let outsideBlock = -1;\n for (let cur = node, sawBlock = false;;) {\n if (cur == view.dom)\n break;\n let desc = view.docView.nearestDesc(cur, true), rect;\n if (!desc)\n return null;\n if (desc.dom.nodeType == 1 && (desc.node.isBlock && desc.parent || !desc.contentDOM) &&\n // Ignore elements with zero-size bounding rectangles\n ((rect = desc.dom.getBoundingClientRect()).width || rect.height)) {\n if (desc.node.isBlock && desc.parent && !/^T(R|BODY|HEAD|FOOT)$/.test(desc.dom.nodeName)) {\n // Only apply the horizontal test to the innermost block. Vertical for any parent.\n if (!sawBlock && rect.left > coords.left || rect.top > coords.top)\n outsideBlock = desc.posBefore;\n else if (!sawBlock && rect.right < coords.left || rect.bottom < coords.top)\n outsideBlock = desc.posAfter;\n sawBlock = true;\n }\n if (!desc.contentDOM && outsideBlock < 0 && !desc.node.isText) {\n // If we are inside a leaf, return the side of the leaf closer to the coords\n let before = desc.node.isBlock ? coords.top < (rect.top + rect.bottom) / 2\n : coords.left < (rect.left + rect.right) / 2;\n return before ? desc.posBefore : desc.posAfter;\n }\n }\n cur = desc.dom.parentNode;\n }\n return outsideBlock > -1 ? outsideBlock : view.docView.posFromDOM(node, offset, -1);\n}\nfunction elementFromPoint(element, coords, box) {\n let len = element.childNodes.length;\n if (len && box.top < box.bottom) {\n for (let startI = Math.max(0, Math.min(len - 1, Math.floor(len * (coords.top - box.top) / (box.bottom - box.top)) - 2)), i = startI;;) {\n let child = element.childNodes[i];\n if (child.nodeType == 1) {\n let rects = child.getClientRects();\n for (let j = 0; j < rects.length; j++) {\n let rect = rects[j];\n if (inRect(coords, rect))\n return elementFromPoint(child, coords, rect);\n }\n }\n if ((i = (i + 1) % len) == startI)\n break;\n }\n }\n return element;\n}\n// Given an x,y position on the editor, get the position in the document.\nfunction posAtCoords(view, coords) {\n let doc = view.dom.ownerDocument, node, offset = 0;\n let caret = caretFromPoint(doc, coords.left, coords.top);\n if (caret)\n ({ node, offset } = caret);\n let elt = (view.root.elementFromPoint ? view.root : doc)\n .elementFromPoint(coords.left, coords.top);\n let pos;\n if (!elt || !view.dom.contains(elt.nodeType != 1 ? elt.parentNode : elt)) {\n let box = view.dom.getBoundingClientRect();\n if (!inRect(coords, box))\n return null;\n elt = elementFromPoint(view.dom, coords, box);\n if (!elt)\n return null;\n }\n // Safari's caretRangeFromPoint returns nonsense when on a draggable element\n if (safari) {\n for (let p = elt; node && p; p = parentNode(p))\n if (p.draggable)\n node = undefined;\n }\n elt = targetKludge(elt, coords);\n if (node) {\n if (gecko && node.nodeType == 1) {\n // Firefox will sometimes return offsets into <input> nodes, which\n // have no actual children, from caretPositionFromPoint (#953)\n offset = Math.min(offset, node.childNodes.length);\n // It'll also move the returned position before image nodes,\n // even if those are behind it.\n if (offset < node.childNodes.length) {\n let next = node.childNodes[offset], box;\n if (next.nodeName == \"IMG\" && (box = next.getBoundingClientRect()).right <= coords.left &&\n box.bottom > coords.top)\n offset++;\n }\n }\n let prev;\n // When clicking above the right side of an uneditable node, Chrome will report a cursor position after that node.\n if (webkit && offset && node.nodeType == 1 && (prev = node.childNodes[offset - 1]).nodeType == 1 &&\n prev.contentEditable == \"false\" && prev.getBoundingClientRect().top >= coords.top)\n offset--;\n // Suspiciously specific kludge to work around caret*FromPoint\n // never returning a position at the end of the document\n if (node == view.dom && offset == node.childNodes.length - 1 && node.lastChild.nodeType == 1 &&\n coords.top > node.lastChild.getBoundingClientRect().bottom)\n pos = view.state.doc.content.size;\n // Ignore positions directly after a BR, since caret*FromPoint\n // 'round up' positions that would be more accurately placed\n // before the BR node.\n else if (offset == 0 || node.nodeType != 1 || node.childNodes[offset - 1].nodeName != \"BR\")\n pos = posFromCaret(view, node, offset, coords);\n }\n if (pos == null)\n pos = posFromElement(view, elt, coords);\n let desc = view.docView.nearestDesc(elt, true);\n return { pos, inside: desc ? desc.posAtStart - desc.border : -1 };\n}\nfunction nonZero(rect) {\n return rect.top < rect.bottom || rect.left < rect.right;\n}\nfunction singleRect(target, bias) {\n let rects = target.getClientRects();\n if (rects.length) {\n let first = rects[bias < 0 ? 0 : rects.length - 1];\n if (nonZero(first))\n return first;\n }\n return Array.prototype.find.call(rects, nonZero) || target.getBoundingClientRect();\n}\nconst BIDI = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n// Given a position in the document model, get a bounding box of the\n// character at that position, relative to the window.\nfunction coordsAtPos(view, pos, side) {\n let { node, offset, atom } = view.docView.domFromPos(pos, side < 0 ? -1 : 1);\n let supportEmptyRange = webkit || gecko;\n if (node.nodeType == 3) {\n // These browsers support querying empty text ranges. Prefer that in\n // bidi context or when at the end of a node.\n if (supportEmptyRange && (BIDI.test(node.nodeValue) || (side < 0 ? !offset : offset == node.nodeValue.length))) {\n let rect = singleRect(textRange(node, offset, offset), side);\n // Firefox returns bad results (the position before the space)\n // when querying a position directly after line-broken\n // whitespace. Detect this situation and and kludge around it\n if (gecko && offset && /\\s/.test(node.nodeValue[offset - 1]) && offset < node.nodeValue.length) {\n let rectBefore = singleRect(textRange(node, offset - 1, offset - 1), -1);\n if (rectBefore.top == rect.top) {\n let rectAfter = singleRect(textRange(node, offset, offset + 1), -1);\n if (rectAfter.top != rect.top)\n return flattenV(rectAfter, rectAfter.left < rectBefore.left);\n }\n }\n return rect;\n }\n else {\n let from = offset, to = offset, takeSide = side < 0 ? 1 : -1;\n if (side < 0 && !offset) {\n to++;\n takeSide = -1;\n }\n else if (side >= 0 && offset == node.nodeValue.length) {\n from--;\n takeSide = 1;\n }\n else if (side < 0) {\n from--;\n }\n else {\n to++;\n }\n return flattenV(singleRect(textRange(node, from, to), takeSide), takeSide < 0);\n }\n }\n let $dom = view.state.doc.resolve(pos - (atom || 0));\n // Return a horizontal line in block context\n if (!$dom.parent.inlineContent) {\n if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {\n let before = node.childNodes[offset - 1];\n if (before.nodeType == 1)\n return flattenH(before.getBoundingClientRect(), false);\n }\n if (atom == null && offset < nodeSize(node)) {\n let after = node.childNodes[offset];\n if (after.nodeType == 1)\n return flattenH(after.getBoundingClientRect(), true);\n }\n return flattenH(node.getBoundingClientRect(), side >= 0);\n }\n // Inline, not in text node (this is not Bidi-safe)\n if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {\n let before = node.childNodes[offset - 1];\n let target = before.nodeType == 3 ? textRange(before, nodeSize(before) - (supportEmptyRange ? 0 : 1))\n // BR nodes tend to only return the rectangle before them.\n // Only use them if they are the last element in their parent\n : before.nodeType == 1 && (before.nodeName != \"BR\" || !before.nextSibling) ? before : null;\n if (target)\n return flattenV(singleRect(target, 1), false);\n }\n if (atom == null && offset < nodeSize(node)) {\n let after = node.childNodes[offset];\n while (after.pmViewDesc && after.pmViewDesc.ignoreForCoords)\n after = after.nextSibling;\n let target = !after ? null : after.nodeType == 3 ? textRange(after, 0, (supportEmptyRange ? 0 : 1))\n : after.nodeType == 1 ? after : null;\n if (target)\n return flattenV(singleRect(target, -1), true);\n }\n // All else failed, just try to get a rectangle for the target node\n return flattenV(singleRect(node.nodeType == 3 ? textRange(node) : node, -side), side >= 0);\n}\nfunction flattenV(rect, left) {\n if (rect.width == 0)\n return rect;\n let x = left ? rect.left : rect.right;\n return { top: rect.top, bottom: rect.bottom, left: x, right: x };\n}\nfunction flattenH(rect, top) {\n if (rect.height == 0)\n return rect;\n let y = top ? rect.top : rect.bottom;\n return { top: y, bottom: y, left: rect.left, right: rect.right };\n}\nfunction withFlushedState(view, state, f) {\n let viewState = view.state, active = view.root.activeElement;\n if (viewState != state)\n view.updateState(state);\n if (active != view.dom)\n view.focus();\n try {\n return f();\n }\n finally {\n if (viewState != state)\n view.updateState(viewState);\n if (active != view.dom && active)\n active.focus();\n }\n}\n// Whether vertical position motion in a given direction\n// from a position would leave a text block.\nfunction endOfTextblockVertical(view, state, dir) {\n let sel = state.selection;\n let $pos = dir == \"up\" ? sel.$from : sel.$to;\n return withFlushedState(view, state, () => {\n let { node: dom } = view.docView.domFromPos($pos.pos, dir == \"up\" ? -1 : 1);\n for (;;) {\n let nearest = view.docView.nearestDesc(dom, true);\n if (!nearest)\n break;\n if (nearest.node.isBlock) {\n dom = nearest.contentDOM || nearest.dom;\n break;\n }\n dom = nearest.dom.parentNode;\n }\n let coords = coordsAtPos(view, $pos.pos, 1);\n for (let child = dom.firstChild; child; child = child.nextSibling) {\n let boxes;\n if (child.nodeType == 1)\n boxes = child.getClientRects();\n else if (child.nodeType == 3)\n boxes = textRange(child, 0, child.nodeValue.length).getClientRects();\n else\n continue;\n for (let i = 0; i < boxes.length; i++) {\n let box = boxes[i];\n if (box.bottom > box.top + 1 &&\n (dir == \"up\" ? coords.top - box.top > (box.bottom - coords.top) * 2\n : box.bottom - coords.bottom > (coords.bottom - box.top) * 2))\n return false;\n }\n }\n return true;\n });\n}\nconst maybeRTL = /[\\u0590-\\u08ac]/;\nfunction endOfTextblockHorizontal(view, state, dir) {\n let { $head } = state.selection;\n if (!$head.parent.isTextblock)\n return false;\n let offset = $head.parentOffset, atStart = !offset, atEnd = offset == $head.parent.content.size;\n let sel = view.domSelection();\n if (!sel)\n return $head.pos == $head.start() || $head.pos == $head.end();\n // If the textblock is all LTR, or the browser doesn't support\n // Selection.modify (Edge), fall back to a primitive approach\n if (!maybeRTL.test($head.parent.textContent) || !sel.modify)\n return dir == \"left\" || dir == \"backward\" ? atStart : atEnd;\n return withFlushedState(view, state, () => {\n // This is a huge hack, but appears to be the best we can\n // currently do: use `Selection.modify` to move the selection by\n // one character, and see if that moves the cursor out of the\n // textblock (or doesn't move it at all, when at the start/end of\n // the document).\n let { focusNode: oldNode, focusOffset: oldOff, anchorNode, anchorOffset } = view.domSelectionRange();\n let oldBidiLevel = sel.caretBidiLevel // Only for Firefox\n ;\n sel.modify(\"move\", dir, \"character\");\n let parentDOM = $head.depth ? view.docView.domAfterPos($head.before()) : view.dom;\n let { focusNode: newNode, focusOffset: newOff } = view.domSelectionRange();\n let result = newNode && !parentDOM.contains(newNode.nodeType == 1 ? newNode : newNode.parentNode) ||\n (oldNode == newNode && oldOff == newOff);\n // Restore the previous selection\n try {\n sel.collapse(anchorNode, anchorOffset);\n if (oldNode && (oldNode != anchorNode || oldOff != anchorOffset) && sel.extend)\n sel.extend(oldNode, oldOff);\n }\n catch (_) { }\n if (oldBidiLevel != null)\n sel.caretBidiLevel = oldBidiLevel;\n return result;\n });\n}\nlet cachedState = null;\nlet cachedDir = null;\nlet cachedResult = false;\nfunction endOfTextblock(view, state, dir) {\n if (cachedState == state && cachedDir == dir)\n return cachedResult;\n cachedState = state;\n cachedDir = dir;\n return cachedResult = dir == \"up\" || dir == \"down\"\n ? endOfTextblockVertical(view, state, dir)\n : endOfTextblockHorizontal(view, state, dir);\n}\n\n// View descriptions are data structures that describe the DOM that is\n// used to represent the editor's content. They are used for:\n//\n// - Incremental redrawing when the document changes\n//\n// - Figuring out what part of the document a given DOM position\n// corresponds to\n//\n// - Wiring in custom implementations of the editing interface for a\n// given node\n//\n// They form a doubly-linked mutable tree, starting at `view.docView`.\nconst NOT_DIRTY = 0, CHILD_DIRTY = 1, CONTENT_DIRTY = 2, NODE_DIRTY = 3;\n// Superclass for the various kinds of descriptions. Defines their\n// basic structure and shared methods.\nclass ViewDesc {\n constructor(parent, children, dom, \n // This is the node that holds the child views. It may be null for\n // descs that don't have children.\n contentDOM) {\n this.parent = parent;\n this.children = children;\n this.dom = dom;\n this.contentDOM = contentDOM;\n this.dirty = NOT_DIRTY;\n // An expando property on the DOM node provides a link back to its\n // description.\n dom.pmViewDesc = this;\n }\n // Used to check whether a given description corresponds to a\n // widget/mark/node.\n matchesWidget(widget) { return false; }\n matchesMark(mark) { return false; }\n matchesNode(node, outerDeco, innerDeco) { return false; }\n matchesHack(nodeName) { return false; }\n // When parsing in-editor content (in domchange.js), we allow\n // descriptions to determine the parse rules that should be used to\n // parse them.\n parseRule() { return null; }\n // Used by the editor's event handler to ignore events that come\n // from certain descs.\n stopEvent(event) { return false; }\n // The size of the content represented by this desc.\n get size() {\n let size = 0;\n for (let i = 0; i < this.children.length; i++)\n size += this.children[i].size;\n return size;\n }\n // For block nodes, this represents the space taken up by their\n // start/end tokens.\n get border() { return 0; }\n destroy() {\n this.parent = undefined;\n if (this.dom.pmViewDesc == this)\n this.dom.pmViewDesc = undefined;\n for (let i = 0; i < this.children.length; i++)\n this.children[i].destroy();\n }\n posBeforeChild(child) {\n for (let i = 0, pos = this.posAtStart;; i++) {\n let cur = this.children[i];\n if (cur == child)\n return pos;\n pos += cur.size;\n }\n }\n get posBefore() {\n return this.parent.posBeforeChild(this);\n }\n get posAtStart() {\n return this.parent ? this.parent.posBeforeChild(this) + this.border : 0;\n }\n get posAfter() {\n return this.posBefore + this.size;\n }\n get posAtEnd() {\n return this.posAtStart + this.size - 2 * this.border;\n }\n localPosFromDOM(dom, offset, bias) {\n // If the DOM position is in the content, use the child desc after\n // it to figure out a position.\n if (this.contentDOM && this.contentDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode)) {\n if (bias < 0) {\n let domBefore, desc;\n if (dom == this.contentDOM) {\n domBefore = dom.childNodes[offset - 1];\n }\n else {\n while (dom.parentNode != this.contentDOM)\n dom = dom.parentNode;\n domBefore = dom.previousSibling;\n }\n while (domBefore && !((desc = domBefore.pmViewDesc) && desc.parent == this))\n domBefore = domBefore.previousSibling;\n return domBefore ? this.posBeforeChild(desc) + desc.size : this.posAtStart;\n }\n else {\n let domAfter, desc;\n if (dom == this.contentDOM) {\n domAfter = dom.childNodes[offset];\n }\n else {\n while (dom.parentNode != this.contentDOM)\n dom = dom.parentNode;\n domAfter = dom.nextSibling;\n }\n while (domAfter && !((desc = domAfter.pmViewDesc) && desc.parent == this))\n domAfter = domAfter.nextSibling;\n return domAfter ? this.posBeforeChild(desc) : this.posAtEnd;\n }\n }\n // Otherwise, use various heuristics, falling back on the bias\n // parameter, to determine whether to return the position at the\n // start or at the end of this view desc.\n let atEnd;\n if (dom == this.dom && this.contentDOM) {\n atEnd = offset > domIndex(this.contentDOM);\n }\n else if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) {\n atEnd = dom.compareDocumentPosition(this.contentDOM) & 2;\n }\n else if (this.dom.firstChild) {\n if (offset == 0)\n for (let search = dom;; search = search.parentNode) {\n if (search == this.dom) {\n atEnd = false;\n break;\n }\n if (search.previousSibling)\n break;\n }\n if (atEnd == null && offset == dom.childNodes.length)\n for (let search = dom;; search = search.parentNode) {\n if (search == this.dom) {\n atEnd = true;\n break;\n }\n if (search.nextSibling)\n break;\n }\n }\n return (atEnd == null ? bias > 0 : atEnd) ? this.posAtEnd : this.posAtStart;\n }\n nearestDesc(dom, onlyNodes = false) {\n for (let first = true, cur = dom; cur; cur = cur.parentNode) {\n let desc = this.getDesc(cur), nodeDOM;\n if (desc && (!onlyNodes || desc.node)) {\n // If dom is outside of this desc's nodeDOM, don't count it.\n if (first && (nodeDOM = desc.nodeDOM) &&\n !(nodeDOM.nodeType == 1 ? nodeDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode) : nodeDOM == dom))\n first = false;\n else\n return desc;\n }\n }\n }\n getDesc(dom) {\n let desc = dom.pmViewDesc;\n for (let cur = desc; cur; cur = cur.parent)\n if (cur == this)\n return desc;\n }\n posFromDOM(dom, offset, bias) {\n for (let scan = dom; scan; scan = scan.parentNode) {\n let desc = this.getDesc(scan);\n if (desc)\n return desc.localPosFromDOM(dom, offset, bias);\n }\n return -1;\n }\n // Find the desc for the node after the given pos, if any. (When a\n // parent node overrode rendering, there might not be one.)\n descAt(pos) {\n for (let i = 0, offset = 0; i < this.children.length; i++) {\n let child = this.children[i], end = offset + child.size;\n if (offset == pos && end != offset) {\n while (!child.border && child.children.length) {\n for (let i = 0; i < child.children.length; i++) {\n let inner = child.children[i];\n if (inner.size) {\n child = inner;\n break;\n }\n }\n }\n return child;\n }\n if (pos < end)\n return child.descAt(pos - offset - child.border);\n offset = end;\n }\n }\n domFromPos(pos, side) {\n if (!this.contentDOM)\n return { node: this.dom, offset: 0, atom: pos + 1 };\n // First find the position in the child array\n let i = 0, offset = 0;\n for (let curPos = 0; i < this.children.length; i++) {\n let child = this.children[i], end = curPos + child.size;\n if (end > pos || child instanceof TrailingHackViewDesc) {\n offset = pos - curPos;\n break;\n }\n curPos = end;\n }\n // If this points into the middle of a child, call through\n if (offset)\n return this.children[i].domFromPos(offset - this.children[i].border, side);\n // Go back if there were any zero-length widgets with side >= 0 before this point\n for (let prev; i && !(prev = this.children[i - 1]).size && prev instanceof WidgetViewDesc && prev.side >= 0; i--) { }\n // Scan towards the first useable node\n if (side <= 0) {\n let prev, enter = true;\n for (;; i--, enter = false) {\n prev = i ? this.children[i - 1] : null;\n if (!prev || prev.dom.parentNode == this.contentDOM)\n break;\n }\n if (prev && side && enter && !prev.border && !prev.domAtom)\n return prev.domFromPos(prev.size, side);\n return { node: this.contentDOM, offset: prev ? domIndex(prev.dom) + 1 : 0 };\n }\n else {\n let next, enter = true;\n for (;; i++, enter = false) {\n next = i < this.children.length ? this.children[i] : null;\n if (!next || next.dom.parentNode == this.contentDOM)\n break;\n }\n if (next && enter && !next.border && !next.domAtom)\n return next.domFromPos(0, side);\n return { node: this.contentDOM, offset: next ? domIndex(next.dom) : this.contentDOM.childNodes.length };\n }\n }\n // Used to find a DOM range in a single parent for a given changed\n // range.\n parseRange(from, to, base = 0) {\n if (this.children.length == 0)\n return { node: this.contentDOM, from, to, fromOffset: 0, toOffset: this.contentDOM.childNodes.length };\n let fromOffset = -1, toOffset = -1;\n for (let offset = base, i = 0;; i++) {\n let child = this.children[i], end = offset + child.size;\n if (fromOffset == -1 && from <= end) {\n let childBase = offset + child.border;\n // FIXME maybe descend mark views to parse a narrower range?\n if (from >= childBase && to <= end - child.border && child.node &&\n child.contentDOM && this.contentDOM.contains(child.contentDOM))\n return child.parseRange(from, to, childBase);\n from = offset;\n for (let j = i; j > 0; j--) {\n let prev = this.children[j - 1];\n if (prev.size && prev.dom.parentNode == this.contentDOM && !prev.emptyChildAt(1)) {\n fromOffset = domIndex(prev.dom) + 1;\n break;\n }\n from -= prev.size;\n }\n if (fromOffset == -1)\n fromOffset = 0;\n }\n if (fromOffset > -1 && (end > to || i == this.children.length - 1)) {\n to = end;\n for (let j = i + 1; j < this.children.length; j++) {\n let next = this.children[j];\n if (next.size && next.dom.parentNode == this.contentDOM && !next.emptyChildAt(-1)) {\n toOffset = domIndex(next.dom);\n break;\n }\n to += next.size;\n }\n if (toOffset == -1)\n toOffset = this.contentDOM.childNodes.length;\n break;\n }\n offset = end;\n }\n return { node: this.contentDOM, from, to, fromOffset, toOffset };\n }\n emptyChildAt(side) {\n if (this.border || !this.contentDOM || !this.children.length)\n return false;\n let child = this.children[side < 0 ? 0 : this.children.length - 1];\n return child.size == 0 || child.emptyChildAt(side);\n }\n domAfterPos(pos) {\n let { node, offset } = this.domFromPos(pos, 0);\n if (node.nodeType != 1 || offset == node.childNodes.length)\n throw new RangeError(\"No node after pos \" + pos);\n return node.childNodes[offset];\n }\n // View descs are responsible for setting any selection that falls\n // entirely inside of them, so that custom implementations can do\n // custom things with the selection. Note that this falls apart when\n // a selection starts in such a node and ends in another, in which\n // case we just use whatever domFromPos produces as a best effort.\n setSelection(anchor, head, view, force = false) {\n // If the selection falls entirely in a child, give it to that child\n let from = Math.min(anchor, head), to = Math.max(anchor, head);\n for (let i = 0, offset = 0; i < this.children.length; i++) {\n let child = this.children[i], end = offset + child.size;\n if (from > offset && to < end)\n return child.setSelection(anchor - offset - child.border, head - offset - child.border, view, force);\n offset = end;\n }\n let anchorDOM = this.domFromPos(anchor, anchor ? -1 : 1);\n let headDOM = head == anchor ? anchorDOM : this.domFromPos(head, head ? -1 : 1);\n let domSel = view.root.getSelection();\n let selRange = view.domSelectionRange();\n let brKludge = false;\n // On Firefox, using Selection.collapse to put the cursor after a\n // BR node for some reason doesn't always work (#1073). On Safari,\n // the cursor sometimes inexplicable visually lags behind its\n // reported position in such situations (#1092).\n if ((gecko || safari) && anchor == head) {\n let { node, offset } = anchorDOM;\n if (node.nodeType == 3) {\n brKludge = !!(offset && node.nodeValue[offset - 1] == \"\\n\");\n // Issue #1128\n if (brKludge && offset == node.nodeValue.length) {\n for (let scan = node, after; scan; scan = scan.parentNode) {\n if (after = scan.nextSibling) {\n if (after.nodeName == \"BR\")\n anchorDOM = headDOM = { node: after.parentNode, offset: domIndex(after) + 1 };\n break;\n }\n let desc = scan.pmViewDesc;\n if (desc && desc.node && desc.node.isBlock)\n break;\n }\n }\n }\n else {\n let prev = node.childNodes[offset - 1];\n brKludge = prev && (prev.nodeName == \"BR\" || prev.contentEditable == \"false\");\n }\n }\n // Firefox can act strangely when the selection is in front of an\n // uneditable node. See #1163 and https://bugzilla.mozilla.org/show_bug.cgi?id=1709536\n if (gecko && selRange.focusNode && selRange.focusNode != headDOM.node && selRange.focusNode.nodeType == 1) {\n let after = selRange.focusNode.childNodes[selRange.focusOffset];\n if (after && after.contentEditable == \"false\")\n force = true;\n }\n if (!(force || brKludge && safari) &&\n isEquivalentPosition(anchorDOM.node, anchorDOM.offset, selRange.anchorNode, selRange.anchorOffset) &&\n isEquivalentPosition(headDOM.node, headDOM.offset, selRange.focusNode, selRange.focusOffset))\n return;\n // Selection.extend can be used to create an 'inverted' selection\n // (one where the focus is before the anchor), but not all\n // browsers support it yet.\n let domSelExtended = false;\n if ((domSel.extend || anchor == head) && !(brKludge && gecko)) {\n domSel.collapse(anchorDOM.node, anchorDOM.offset);\n try {\n if (anchor != head)\n domSel.extend(headDOM.node, headDOM.offset);\n domSelExtended = true;\n }\n catch (_) {\n // In some cases with Chrome the selection is empty after calling\n // collapse, even when it should be valid. This appears to be a bug, but\n // it is difficult to isolate. If this happens fallback to the old path\n // without using extend.\n // Similarly, this could crash on Safari if the editor is hidden, and\n // there was no selection.\n }\n }\n if (!domSelExtended) {\n if (anchor > head) {\n let tmp = anchorDOM;\n anchorDOM = headDOM;\n headDOM = tmp;\n }\n let range = document.createRange();\n range.setEnd(headDOM.node, headDOM.offset);\n range.setStart(anchorDOM.node, anchorDOM.offset);\n domSel.removeAllRanges();\n domSel.addRange(range);\n }\n }\n ignoreMutation(mutation) {\n return !this.contentDOM && mutation.type != \"selection\";\n }\n get contentLost() {\n return this.contentDOM && this.contentDOM != this.dom && !this.dom.contains(this.contentDOM);\n }\n // Remove a subtree of the element tree that has been touched\n // by a DOM change, so that the next update will redraw it.\n markDirty(from, to) {\n for (let offset = 0, i = 0; i < this.children.length; i++) {\n let child = this.children[i], end = offset + child.size;\n if (offset == end ? from <= end && to >= offset : from < end && to > offset) {\n let startInside = offset + child.border, endInside = end - child.border;\n if (from >= startInside && to <= endInside) {\n this.dirty = from == offset || to == end ? CONTENT_DIRTY : CHILD_DIRTY;\n if (from == startInside && to == endInside &&\n (child.contentLost || child.dom.parentNode != this.contentDOM))\n child.dirty = NODE_DIRTY;\n else\n child.markDirty(from - startInside, to - startInside);\n return;\n }\n else {\n child.dirty = child.dom == child.contentDOM && child.dom.parentNode == this.contentDOM && !child.children.length\n ? CONTENT_DIRTY : NODE_DIRTY;\n }\n }\n offset = end;\n }\n this.dirty = CONTENT_DIRTY;\n }\n markParentsDirty() {\n let level = 1;\n for (let node = this.parent; node; node = node.parent, level++) {\n let dirty = level == 1 ? CONTENT_DIRTY : CHILD_DIRTY;\n if (node.dirty < dirty)\n node.dirty = dirty;\n }\n }\n get domAtom() { return false; }\n get ignoreForCoords() { return false; }\n get ignoreForSelection() { return false; }\n isText(text) { return false; }\n}\n// A widget desc represents a widget decoration, which is a DOM node\n// drawn between the document nodes.\nclass WidgetViewDesc extends ViewDesc {\n constructor(parent, widget, view, pos) {\n let self, dom = widget.type.toDOM;\n if (typeof dom == \"function\")\n dom = dom(view, () => {\n if (!self)\n return pos;\n if (self.parent)\n return self.parent.posBeforeChild(self);\n });\n if (!widget.type.spec.raw) {\n if (dom.nodeType != 1) {\n let wrap = document.createElement(\"span\");\n wrap.appendChild(dom);\n dom = wrap;\n }\n dom.contentEditable = \"false\";\n dom.classList.add(\"ProseMirror-widget\");\n }\n super(parent, [], dom, null);\n this.widget = widget;\n this.widget = widget;\n self = this;\n }\n matchesWidget(widget) {\n return this.dirty == NOT_DIRTY && widget.type.eq(this.widget.type);\n }\n parseRule() { return { ignore: true }; }\n stopEvent(event) {\n let stop = this.widget.spec.stopEvent;\n return stop ? stop(event) : false;\n }\n ignoreMutation(mutation) {\n return mutation.type != \"selection\" || this.widget.spec.ignoreSelection;\n }\n destroy() {\n this.widget.type.destroy(this.dom);\n super.destroy();\n }\n get domAtom() { return true; }\n get ignoreForSelection() { return !!this.widget.type.spec.relaxedSide; }\n get side() { return this.widget.type.side; }\n}\nclass CompositionViewDesc extends ViewDesc {\n constructor(parent, dom, textDOM, text) {\n super(parent, [], dom, null);\n this.textDOM = textDOM;\n this.text = text;\n }\n get size() { return this.text.length; }\n localPosFromDOM(dom, offset) {\n if (dom != this.textDOM)\n return this.posAtStart + (offset ? this.size : 0);\n return this.posAtStart + offset;\n }\n domFromPos(pos) {\n return { node: this.textDOM, offset: pos };\n }\n ignoreMutation(mut) {\n return mut.type === 'characterData' && mut.target.nodeValue == mut.oldValue;\n }\n}\n// A mark desc represents a mark. May have multiple children,\n// depending on how the mark is split. Note that marks are drawn using\n// a fixed nesting order, for simplicity and predictability, so in\n// some cases they will be split more often than would appear\n// necessary.\nclass MarkViewDesc extends ViewDesc {\n constructor(parent, mark, dom, contentDOM, spec) {\n super(parent, [], dom, contentDOM);\n this.mark = mark;\n this.spec = spec;\n }\n static create(parent, mark, inline, view) {\n let custom = view.nodeViews[mark.type.name];\n let spec = custom && custom(mark, view, inline);\n if (!spec || !spec.dom)\n spec = DOMSerializer.renderSpec(document, mark.type.spec.toDOM(mark, inline), null, mark.attrs);\n return new MarkViewDesc(parent, mark, spec.dom, spec.contentDOM || spec.dom, spec);\n }\n parseRule() {\n if ((this.dirty & NODE_DIRTY) || this.mark.type.spec.reparseInView)\n return null;\n return { mark: this.mark.type.name, attrs: this.mark.attrs, contentElement: this.contentDOM };\n }\n matchesMark(mark) { return this.dirty != NODE_DIRTY && this.mark.eq(mark); }\n markDirty(from, to) {\n super.markDirty(from, to);\n // Move dirty info to nearest node view\n if (this.dirty != NOT_DIRTY) {\n let parent = this.parent;\n while (!parent.node)\n parent = parent.parent;\n if (parent.dirty < this.dirty)\n parent.dirty = this.dirty;\n this.dirty = NOT_DIRTY;\n }\n }\n slice(from, to, view) {\n let copy = MarkViewDesc.create(this.parent, this.mark, true, view);\n let nodes = this.children, size = this.size;\n if (to < size)\n nodes = replaceNodes(nodes, to, size, view);\n if (from > 0)\n nodes = replaceNodes(nodes, 0, from, view);\n for (let i = 0; i < nodes.length; i++)\n nodes[i].parent = copy;\n copy.children = nodes;\n return copy;\n }\n ignoreMutation(mutation) {\n return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : super.ignoreMutation(mutation);\n }\n destroy() {\n if (this.spec.destroy)\n this.spec.destroy();\n super.destroy();\n }\n}\n// Node view descs are the main, most common type of view desc, and\n// correspond to an actual node in the document. Unlike mark descs,\n// they populate their child array themselves.\nclass NodeViewDesc extends ViewDesc {\n constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos) {\n super(parent, [], dom, contentDOM);\n this.node = node;\n this.outerDeco = outerDeco;\n this.innerDeco = innerDeco;\n this.nodeDOM = nodeDOM;\n }\n // By default, a node is rendered using the `toDOM` method from the\n // node type spec. But client code can use the `nodeViews` spec to\n // supply a custom node view, which can influence various aspects of\n // the way the node works.\n //\n // (Using subclassing for this was intentionally decided against,\n // since it'd require exposing a whole slew of finicky\n // implementation details to the user code that they probably will\n // never need.)\n static create(parent, node, outerDeco, innerDeco, view, pos) {\n let custom = view.nodeViews[node.type.name], descObj;\n let spec = custom && custom(node, view, () => {\n // (This is a function that allows the custom view to find its\n // own position)\n if (!descObj)\n return pos;\n if (descObj.parent)\n return descObj.parent.posBeforeChild(descObj);\n }, outerDeco, innerDeco);\n let dom = spec && spec.dom, contentDOM = spec && spec.contentDOM;\n if (node.isText) {\n if (!dom)\n dom = document.createTextNode(node.text);\n else if (dom.nodeType != 3)\n throw new RangeError(\"Text must be rendered as a DOM text node\");\n }\n else if (!dom) {\n let spec = DOMSerializer.renderSpec(document, node.type.spec.toDOM(node), null, node.attrs);\n ({ dom, contentDOM } = spec);\n }\n if (!contentDOM && !node.isText && dom.nodeName != \"BR\") { // Chrome gets confused by <br contenteditable=false>\n if (!dom.hasAttribute(\"contenteditable\"))\n dom.contentEditable = \"false\";\n if (node.type.spec.draggable)\n dom.draggable = true;\n }\n let nodeDOM = dom;\n dom = applyOuterDeco(dom, outerDeco, node);\n if (spec)\n return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, spec, view, pos + 1);\n else if (node.isText)\n return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM, view);\n else\n return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, view, pos + 1);\n }\n parseRule() {\n // Experimental kludge to allow opt-in re-parsing of nodes\n if (this.node.type.spec.reparseInView)\n return null;\n // FIXME the assumption that this can always return the current\n // attrs means that if the user somehow manages to change the\n // attrs in the dom, that won't be picked up. Not entirely sure\n // whether this is a problem\n let rule = { node: this.node.type.name, attrs: this.node.attrs };\n if (this.node.type.whitespace == \"pre\")\n rule.preserveWhitespace = \"full\";\n if (!this.contentDOM) {\n rule.getContent = () => this.node.content;\n }\n else if (!this.contentLost) {\n rule.contentElement = this.contentDOM;\n }\n else {\n // Chrome likes to randomly recreate parent nodes when\n // backspacing things. When that happens, this tries to find the\n // new parent.\n for (let i = this.children.length - 1; i >= 0; i--) {\n let child = this.children[i];\n if (this.dom.contains(child.dom.parentNode)) {\n rule.contentElement = child.dom.parentNode;\n break;\n }\n }\n if (!rule.contentElement)\n rule.getContent = () => Fragment.empty;\n }\n return rule;\n }\n matchesNode(node, outerDeco, innerDeco) {\n return this.dirty == NOT_DIRTY && node.eq(this.node) &&\n sameOuterDeco(outerDeco, this.outerDeco) && innerDeco.eq(this.innerDeco);\n }\n get size() { return this.node.nodeSize; }\n get border() { return this.node.isLeaf ? 0 : 1; }\n // Syncs `this.children` to match `this.node.content` and the local\n // decorations, possibly introducing nesting for marks. Then, in a\n // separate step, syncs the DOM inside `this.contentDOM` to\n // `this.children`.\n updateChildren(view, pos) {\n let inline = this.node.inlineContent, off = pos;\n let composition = view.composing ? this.localCompositionInfo(view, pos) : null;\n let localComposition = composition && composition.pos > -1 ? composition : null;\n let compositionInChild = composition && composition.pos < 0;\n let updater = new ViewTreeUpdater(this, localComposition && localComposition.node, view);\n iterDeco(this.node, this.innerDeco, (widget, i, insideNode) => {\n if (widget.spec.marks)\n updater.syncToMarks(widget.spec.marks, inline, view, i);\n else if (widget.type.side >= 0 && !insideNode)\n updater.syncToMarks(i == this.node.childCount ? Mark.none : this.node.child(i).marks, inline, view, i);\n // If the next node is a desc matching this widget, reuse it,\n // otherwise insert the widget as a new view desc.\n updater.placeWidget(widget, view, off);\n }, (child, outerDeco, innerDeco, i) => {\n // Make sure the wrapping mark descs match the node's marks.\n updater.syncToMarks(child.marks, inline, view, i);\n // Try several strategies for drawing this node\n let compIndex;\n if (updater.findNodeMatch(child, outerDeco, innerDeco, i)) ;\n else if (compositionInChild && view.state.selection.from > off &&\n view.state.selection.to < off + child.nodeSize &&\n (compIndex = updater.findIndexWithChild(composition.node)) > -1 &&\n updater.updateNodeAt(child, outerDeco, innerDeco, compIndex, view)) ;\n else if (updater.updateNextNode(child, outerDeco, innerDeco, view, i, off)) ;\n else {\n // Add it as a new view\n updater.addNode(child, outerDeco, innerDeco, view, off);\n }\n off += child.nodeSize;\n });\n // Drop all remaining descs after the current position.\n updater.syncToMarks([], inline, view, 0);\n if (this.node.isTextblock)\n updater.addTextblockHacks();\n updater.destroyRest();\n // Sync the DOM if anything changed\n if (updater.changed || this.dirty == CONTENT_DIRTY) {\n // May have to protect focused DOM from being changed if a composition is active\n if (localComposition)\n this.protectLocalComposition(view, localComposition);\n renderDescs(this.contentDOM, this.children, view);\n if (ios)\n iosHacks(this.dom);\n }\n }\n localCompositionInfo(view, pos) {\n // Only do something if both the selection and a focused text node\n // are inside of this node\n let { from, to } = view.state.selection;\n if (!(view.state.selection instanceof TextSelection) || from < pos || to > pos + this.node.content.size)\n return null;\n let textNode = view.input.compositionNode;\n if (!textNode || !this.dom.contains(textNode.parentNode))\n return null;\n if (this.node.inlineContent) {\n // Find the text in the focused node in the node, stop if it's not\n // there (may have been modified through other means, in which\n // case it should overwritten)\n let text = textNode.nodeValue;\n let textPos = findTextInFragment(this.node.content, text, from - pos, to - pos);\n return textPos < 0 ? null : { node: textNode, pos: textPos, text };\n }\n else {\n return { node: textNode, pos: -1, text: \"\" };\n }\n }\n protectLocalComposition(view, { node, pos, text }) {\n // The node is already part of a local view desc, leave it there\n if (this.getDesc(node))\n return;\n // Create a composition view for the orphaned nodes\n let topNode = node;\n for (;; topNode = topNode.parentNode) {\n if (topNode.parentNode == this.contentDOM)\n break;\n while (topNode.previousSibling)\n topNode.parentNode.removeChild(topNode.previousSibling);\n while (topNode.nextSibling)\n topNode.parentNode.removeChild(topNode.nextSibling);\n if (topNode.pmViewDesc)\n topNode.pmViewDesc = undefined;\n }\n let desc = new CompositionViewDesc(this, topNode, node, text);\n view.input.compositionNodes.push(desc);\n // Patch up this.children to contain the composition view\n this.children = replaceNodes(this.children, pos, pos + text.length, view, desc);\n }\n // If this desc must be updated to match the given node decoration,\n // do so and return true.\n update(node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY ||\n !node.sameMarkup(this.node))\n return false;\n this.updateInner(node, outerDeco, innerDeco, view);\n return true;\n }\n updateInner(node, outerDeco, innerDeco, view) {\n this.updateOuterDeco(outerDeco);\n this.node = node;\n this.innerDeco = innerDeco;\n if (this.contentDOM)\n this.updateChildren(view, this.posAtStart);\n this.dirty = NOT_DIRTY;\n }\n updateOuterDeco(outerDeco) {\n if (sameOuterDeco(outerDeco, this.outerDeco))\n return;\n let needsWrap = this.nodeDOM.nodeType != 1;\n let oldDOM = this.dom;\n this.dom = patchOuterDeco(this.dom, this.nodeDOM, computeOuterDeco(this.outerDeco, this.node, needsWrap), computeOuterDeco(outerDeco, this.node, needsWrap));\n if (this.dom != oldDOM) {\n oldDOM.pmViewDesc = undefined;\n this.dom.pmViewDesc = this;\n }\n this.outerDeco = outerDeco;\n }\n // Mark this node as being the selected node.\n selectNode() {\n if (this.nodeDOM.nodeType == 1) {\n this.nodeDOM.classList.add(\"ProseMirror-selectednode\");\n if (this.contentDOM || !this.node.type.spec.draggable)\n this.nodeDOM.draggable = true;\n }\n }\n // Remove selected node marking from this node.\n deselectNode() {\n if (this.nodeDOM.nodeType == 1) {\n this.nodeDOM.classList.remove(\"ProseMirror-selectednode\");\n if (this.contentDOM || !this.node.type.spec.draggable)\n this.nodeDOM.removeAttribute(\"draggable\");\n }\n }\n get domAtom() { return this.node.isAtom; }\n}\n// Create a view desc for the top-level document node, to be exported\n// and used by the view class.\nfunction docViewDesc(doc, outerDeco, innerDeco, dom, view) {\n applyOuterDeco(dom, outerDeco, doc);\n let docView = new NodeViewDesc(undefined, doc, outerDeco, innerDeco, dom, dom, dom, view, 0);\n if (docView.contentDOM)\n docView.updateChildren(view, 0);\n return docView;\n}\nclass TextViewDesc extends NodeViewDesc {\n constructor(parent, node, outerDeco, innerDeco, dom, nodeDOM, view) {\n super(parent, node, outerDeco, innerDeco, dom, null, nodeDOM, view, 0);\n }\n parseRule() {\n let skip = this.nodeDOM.parentNode;\n while (skip && skip != this.dom && !skip.pmIsDeco)\n skip = skip.parentNode;\n return { skip: (skip || true) };\n }\n update(node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY || (this.dirty != NOT_DIRTY && !this.inParent()) ||\n !node.sameMarkup(this.node))\n return false;\n this.updateOuterDeco(outerDeco);\n if ((this.dirty != NOT_DIRTY || node.text != this.node.text) && node.text != this.nodeDOM.nodeValue) {\n this.nodeDOM.nodeValue = node.text;\n if (view.trackWrites == this.nodeDOM)\n view.trackWrites = null;\n }\n this.node = node;\n this.dirty = NOT_DIRTY;\n return true;\n }\n inParent() {\n let parentDOM = this.parent.contentDOM;\n for (let n = this.nodeDOM; n; n = n.parentNode)\n if (n == parentDOM)\n return true;\n return false;\n }\n domFromPos(pos) {\n return { node: this.nodeDOM, offset: pos };\n }\n localPosFromDOM(dom, offset, bias) {\n if (dom == this.nodeDOM)\n return this.posAtStart + Math.min(offset, this.node.text.length);\n return super.localPosFromDOM(dom, offset, bias);\n }\n ignoreMutation(mutation) {\n return mutation.type != \"characterData\" && mutation.type != \"selection\";\n }\n slice(from, to, view) {\n let node = this.node.cut(from, to), dom = document.createTextNode(node.text);\n return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom, view);\n }\n markDirty(from, to) {\n super.markDirty(from, to);\n if (this.dom != this.nodeDOM && (from == 0 || to == this.nodeDOM.nodeValue.length))\n this.dirty = NODE_DIRTY;\n }\n get domAtom() { return false; }\n isText(text) { return this.node.text == text; }\n}\n// A dummy desc used to tag trailing BR or IMG nodes created to work\n// around contentEditable terribleness.\nclass TrailingHackViewDesc extends ViewDesc {\n parseRule() { return { ignore: true }; }\n matchesHack(nodeName) { return this.dirty == NOT_DIRTY && this.dom.nodeName == nodeName; }\n get domAtom() { return true; }\n get ignoreForCoords() { return this.dom.nodeName == \"IMG\"; }\n}\n// A separate subclass is used for customized node views, so that the\n// extra checks only have to be made for nodes that are actually\n// customized.\nclass CustomNodeViewDesc extends NodeViewDesc {\n constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec, view, pos) {\n super(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos);\n this.spec = spec;\n }\n // A custom `update` method gets to decide whether the update goes\n // through. If it does, and there's a `contentDOM` node, our logic\n // updates the children.\n update(node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY)\n return false;\n if (this.spec.update && (this.node.type == node.type || this.spec.multiType)) {\n let result = this.spec.update(node, outerDeco, innerDeco);\n if (result)\n this.updateInner(node, outerDeco, innerDeco, view);\n return result;\n }\n else if (!this.contentDOM && !node.isLeaf) {\n return false;\n }\n else {\n return super.update(node, outerDeco, innerDeco, view);\n }\n }\n selectNode() {\n this.spec.selectNode ? this.spec.selectNode() : super.selectNode();\n }\n deselectNode() {\n this.spec.deselectNode ? this.spec.deselectNode() : super.deselectNode();\n }\n setSelection(anchor, head, view, force) {\n this.spec.setSelection ? this.spec.setSelection(anchor, head, view.root)\n : super.setSelection(anchor, head, view, force);\n }\n destroy() {\n if (this.spec.destroy)\n this.spec.destroy();\n super.destroy();\n }\n stopEvent(event) {\n return this.spec.stopEvent ? this.spec.stopEvent(event) : false;\n }\n ignoreMutation(mutation) {\n return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : super.ignoreMutation(mutation);\n }\n}\n// Sync the content of the given DOM node with the nodes associated\n// with the given array of view descs, recursing into mark descs\n// because this should sync the subtree for a whole node at a time.\nfunction renderDescs(parentDOM, descs, view) {\n let dom = parentDOM.firstChild, written = false;\n for (let i = 0; i < descs.length; i++) {\n let desc = descs[i], childDOM = desc.dom;\n if (childDOM.parentNode == parentDOM) {\n while (childDOM != dom) {\n dom = rm(dom);\n written = true;\n }\n dom = dom.nextSibling;\n }\n else {\n written = true;\n parentDOM.insertBefore(childDOM, dom);\n }\n if (desc instanceof MarkViewDesc) {\n let pos = dom ? dom.previousSibling : parentDOM.lastChild;\n renderDescs(desc.contentDOM, desc.children, view);\n dom = pos ? pos.nextSibling : parentDOM.firstChild;\n }\n }\n while (dom) {\n dom = rm(dom);\n written = true;\n }\n if (written && view.trackWrites == parentDOM)\n view.trackWrites = null;\n}\nconst OuterDecoLevel = function (nodeName) {\n if (nodeName)\n this.nodeName = nodeName;\n};\nOuterDecoLevel.prototype = Object.create(null);\nconst noDeco = [new OuterDecoLevel];\nfunction computeOuterDeco(outerDeco, node, needsWrap) {\n if (outerDeco.length == 0)\n return noDeco;\n let top = needsWrap ? noDeco[0] : new OuterDecoLevel, result = [top];\n for (let i = 0; i < outerDeco.length; i++) {\n let attrs = outerDeco[i].type.attrs;\n if (!attrs)\n continue;\n if (attrs.nodeName)\n result.push(top = new OuterDecoLevel(attrs.nodeName));\n for (let name in attrs) {\n let val = attrs[name];\n if (val == null)\n continue;\n if (needsWrap && result.length == 1)\n result.push(top = new OuterDecoLevel(node.isInline ? \"span\" : \"div\"));\n if (name == \"class\")\n top.class = (top.class ? top.class + \" \" : \"\") + val;\n else if (name == \"style\")\n top.style = (top.style ? top.style + \";\" : \"\") + val;\n else if (name != \"nodeName\")\n top[name] = val;\n }\n }\n return result;\n}\nfunction patchOuterDeco(outerDOM, nodeDOM, prevComputed, curComputed) {\n // Shortcut for trivial case\n if (prevComputed == noDeco && curComputed == noDeco)\n return nodeDOM;\n let curDOM = nodeDOM;\n for (let i = 0; i < curComputed.length; i++) {\n let deco = curComputed[i], prev = prevComputed[i];\n if (i) {\n let parent;\n if (prev && prev.nodeName == deco.nodeName && curDOM != outerDOM &&\n (parent = curDOM.parentNode) && parent.nodeName.toLowerCase() == deco.nodeName) {\n curDOM = parent;\n }\n else {\n parent = document.createElement(deco.nodeName);\n parent.pmIsDeco = true;\n parent.appendChild(curDOM);\n prev = noDeco[0];\n curDOM = parent;\n }\n }\n patchAttributes(curDOM, prev || noDeco[0], deco);\n }\n return curDOM;\n}\nfunction patchAttributes(dom, prev, cur) {\n for (let name in prev)\n if (name != \"class\" && name != \"style\" && name != \"nodeName\" && !(name in cur))\n dom.removeAttribute(name);\n for (let name in cur)\n if (name != \"class\" && name != \"style\" && name != \"nodeName\" && cur[name] != prev[name])\n dom.setAttribute(name, cur[name]);\n if (prev.class != cur.class) {\n let prevList = prev.class ? prev.class.split(\" \").filter(Boolean) : [];\n let curList = cur.class ? cur.class.split(\" \").filter(Boolean) : [];\n for (let i = 0; i < prevList.length; i++)\n if (curList.indexOf(prevList[i]) == -1)\n dom.classList.remove(prevList[i]);\n for (let i = 0; i < curList.length; i++)\n if (prevList.indexOf(curList[i]) == -1)\n dom.classList.add(curList[i]);\n if (dom.classList.length == 0)\n dom.removeAttribute(\"class\");\n }\n if (prev.style != cur.style) {\n if (prev.style) {\n let prop = /\\s*([\\w\\-\\xa1-\\uffff]+)\\s*:(?:\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|\\(.*?\\)|[^;])*/g, m;\n while (m = prop.exec(prev.style))\n dom.style.removeProperty(m[1]);\n }\n if (cur.style)\n dom.style.cssText += cur.style;\n }\n}\nfunction applyOuterDeco(dom, deco, node) {\n return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, dom.nodeType != 1));\n}\nfunction sameOuterDeco(a, b) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!a[i].type.eq(b[i].type))\n return false;\n return true;\n}\n// Remove a DOM node and return its next sibling.\nfunction rm(dom) {\n let next = dom.nextSibling;\n dom.parentNode.removeChild(dom);\n return next;\n}\n// Helper class for incrementally updating a tree of mark descs and\n// the widget and node descs inside of them.\nclass ViewTreeUpdater {\n constructor(top, lock, view) {\n this.lock = lock;\n this.view = view;\n // Index into `this.top`'s child array, represents the current\n // update position.\n this.index = 0;\n // When entering a mark, the current top and index are pushed\n // onto this.\n this.stack = [];\n // Tracks whether anything was changed\n this.changed = false;\n this.top = top;\n this.preMatch = preMatch(top.node.content, top);\n }\n // Destroy and remove the children between the given indices in\n // `this.top`.\n destroyBetween(start, end) {\n if (start == end)\n return;\n for (let i = start; i < end; i++)\n this.top.children[i].destroy();\n this.top.children.splice(start, end - start);\n this.changed = true;\n }\n // Destroy all remaining children in `this.top`.\n destroyRest() {\n this.destroyBetween(this.index, this.top.children.length);\n }\n // Sync the current stack of mark descs with the given array of\n // marks, reusing existing mark descs when possible.\n syncToMarks(marks, inline, view, parentIndex) {\n let keep = 0, depth = this.stack.length >> 1;\n let maxKeep = Math.min(depth, marks.length);\n while (keep < maxKeep &&\n (keep == depth - 1 ? this.top : this.stack[(keep + 1) << 1])\n .matchesMark(marks[keep]) && marks[keep].type.spec.spanning !== false)\n keep++;\n while (keep < depth) {\n this.destroyRest();\n this.top.dirty = NOT_DIRTY;\n this.index = this.stack.pop();\n this.top = this.stack.pop();\n depth--;\n }\n while (depth < marks.length) {\n this.stack.push(this.top, this.index + 1);\n let found = -1, scanTo = this.top.children.length;\n if (parentIndex < this.preMatch.index)\n scanTo = Math.min(this.index + 3, scanTo);\n for (let i = this.index; i < scanTo; i++) {\n let next = this.top.children[i];\n if (next.matchesMark(marks[depth]) && !this.isLocked(next.dom)) {\n found = i;\n break;\n }\n }\n if (found > -1) {\n if (found > this.index) {\n this.changed = true;\n this.destroyBetween(this.index, found);\n }\n this.top = this.top.children[this.index];\n }\n else {\n let markDesc = MarkViewDesc.create(this.top, marks[depth], inline, view);\n this.top.children.splice(this.index, 0, markDesc);\n this.top = markDesc;\n this.changed = true;\n }\n this.index = 0;\n depth++;\n }\n }\n // Try to find a node desc matching the given data. Skip over it and\n // return true when successful.\n findNodeMatch(node, outerDeco, innerDeco, index) {\n let found = -1, targetDesc;\n if (index >= this.preMatch.index &&\n (targetDesc = this.preMatch.matches[index - this.preMatch.index]).parent == this.top &&\n targetDesc.matchesNode(node, outerDeco, innerDeco)) {\n found = this.top.children.indexOf(targetDesc, this.index);\n }\n else {\n for (let i = this.index, e = Math.min(this.top.children.length, i + 5); i < e; i++) {\n let child = this.top.children[i];\n if (child.matchesNode(node, outerDeco, innerDeco) && !this.preMatch.matched.has(child)) {\n found = i;\n break;\n }\n }\n }\n if (found < 0)\n return false;\n this.destroyBetween(this.index, found);\n this.index++;\n return true;\n }\n updateNodeAt(node, outerDeco, innerDeco, index, view) {\n let child = this.top.children[index];\n if (child.dirty == NODE_DIRTY && child.dom == child.contentDOM)\n child.dirty = CONTENT_DIRTY;\n if (!child.update(node, outerDeco, innerDeco, view))\n return false;\n this.destroyBetween(this.index, index);\n this.index++;\n return true;\n }\n findIndexWithChild(domNode) {\n for (;;) {\n let parent = domNode.parentNode;\n if (!parent)\n return -1;\n if (parent == this.top.contentDOM) {\n let desc = domNode.pmViewDesc;\n if (desc)\n for (let i = this.index; i < this.top.children.length; i++) {\n if (this.top.children[i] == desc)\n return i;\n }\n return -1;\n }\n domNode = parent;\n }\n }\n // Try to update the next node, if any, to the given data. Checks\n // pre-matches to avoid overwriting nodes that could still be used.\n updateNextNode(node, outerDeco, innerDeco, view, index, pos) {\n for (let i = this.index; i < this.top.children.length; i++) {\n let next = this.top.children[i];\n if (next instanceof NodeViewDesc) {\n let preMatch = this.preMatch.matched.get(next);\n if (preMatch != null && preMatch != index)\n return false;\n let nextDOM = next.dom, updated;\n // Can't update if nextDOM is or contains this.lock, except if\n // it's a text node whose content already matches the new text\n // and whose decorations match the new ones.\n let locked = this.isLocked(nextDOM) &&\n !(node.isText && next.node && next.node.isText && next.nodeDOM.nodeValue == node.text &&\n next.dirty != NODE_DIRTY && sameOuterDeco(outerDeco, next.outerDeco));\n if (!locked && next.update(node, outerDeco, innerDeco, view)) {\n this.destroyBetween(this.index, i);\n if (next.dom != nextDOM)\n this.changed = true;\n this.index++;\n return true;\n }\n else if (!locked && (updated = this.recreateWrapper(next, node, outerDeco, innerDeco, view, pos))) {\n this.destroyBetween(this.index, i);\n this.top.children[this.index] = updated;\n if (updated.contentDOM) {\n updated.dirty = CONTENT_DIRTY;\n updated.updateChildren(view, pos + 1);\n updated.dirty = NOT_DIRTY;\n }\n this.changed = true;\n this.index++;\n return true;\n }\n break;\n }\n }\n return false;\n }\n // When a node with content is replaced by a different node with\n // identical content, move over its children.\n recreateWrapper(next, node, outerDeco, innerDeco, view, pos) {\n if (next.dirty || node.isAtom || !next.children.length ||\n !next.node.content.eq(node.content) ||\n !sameOuterDeco(outerDeco, next.outerDeco) || !innerDeco.eq(next.innerDeco))\n return null;\n let wrapper = NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos);\n if (wrapper.contentDOM) {\n wrapper.children = next.children;\n next.children = [];\n for (let ch of wrapper.children)\n ch.parent = wrapper;\n }\n next.destroy();\n return wrapper;\n }\n // Insert the node as a newly created node desc.\n addNode(node, outerDeco, innerDeco, view, pos) {\n let desc = NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos);\n if (desc.contentDOM)\n desc.updateChildren(view, pos + 1);\n this.top.children.splice(this.index++, 0, desc);\n this.changed = true;\n }\n placeWidget(widget, view, pos) {\n let next = this.index < this.top.children.length ? this.top.children[this.index] : null;\n if (next && next.matchesWidget(widget) &&\n (widget == next.widget || !next.widget.type.toDOM.parentNode)) {\n this.index++;\n }\n else {\n let desc = new WidgetViewDesc(this.top, widget, view, pos);\n this.top.children.splice(this.index++, 0, desc);\n this.changed = true;\n }\n }\n // Make sure a textblock looks and behaves correctly in\n // contentEditable.\n addTextblockHacks() {\n let lastChild = this.top.children[this.index - 1], parent = this.top;\n while (lastChild instanceof MarkViewDesc) {\n parent = lastChild;\n lastChild = parent.children[parent.children.length - 1];\n }\n if (!lastChild || // Empty textblock\n !(lastChild instanceof TextViewDesc) ||\n /\\n$/.test(lastChild.node.text) ||\n (this.view.requiresGeckoHackNode && /\\s$/.test(lastChild.node.text))) {\n // Avoid bugs in Safari's cursor drawing (#1165) and Chrome's mouse selection (#1152)\n if ((safari || chrome) && lastChild && lastChild.dom.contentEditable == \"false\")\n this.addHackNode(\"IMG\", parent);\n this.addHackNode(\"BR\", this.top);\n }\n }\n addHackNode(nodeName, parent) {\n if (parent == this.top && this.index < parent.children.length && parent.children[this.index].matchesHack(nodeName)) {\n this.index++;\n }\n else {\n let dom = document.createElement(nodeName);\n if (nodeName == \"IMG\") {\n dom.className = \"ProseMirror-separator\";\n dom.alt = \"\";\n }\n if (nodeName == \"BR\")\n dom.className = \"ProseMirror-trailingBreak\";\n let hack = new TrailingHackViewDesc(this.top, [], dom, null);\n if (parent != this.top)\n parent.children.push(hack);\n else\n parent.children.splice(this.index++, 0, hack);\n this.changed = true;\n }\n }\n isLocked(node) {\n return this.lock && (node == this.lock || node.nodeType == 1 && node.contains(this.lock.parentNode));\n }\n}\n// Iterate from the end of the fragment and array of descs to find\n// directly matching ones, in order to avoid overeagerly reusing those\n// for other nodes.\nfunction preMatch(frag, parentDesc) {\n let curDesc = parentDesc, descI = curDesc.children.length;\n let fI = frag.childCount, matched = new Map, matches = [];\n outer: while (fI > 0) {\n let desc;\n for (;;) {\n if (descI) {\n let next = curDesc.children[descI - 1];\n if (next instanceof MarkViewDesc) {\n curDesc = next;\n descI = next.children.length;\n }\n else {\n desc = next;\n descI--;\n break;\n }\n }\n else if (curDesc == parentDesc) {\n break outer;\n }\n else {\n descI = curDesc.parent.children.indexOf(curDesc);\n curDesc = curDesc.parent;\n }\n }\n let node = desc.node;\n if (!node)\n continue;\n if (node != frag.child(fI - 1))\n break;\n --fI;\n matched.set(desc, fI);\n matches.push(desc);\n }\n return { index: fI, matched, matches: matches.reverse() };\n}\nfunction compareSide(a, b) {\n return a.type.side - b.type.side;\n}\n// This function abstracts iterating over the nodes and decorations in\n// a fragment. Calls `onNode` for each node, with its local and child\n// decorations. Splits text nodes when there is a decoration starting\n// or ending inside of them. Calls `onWidget` for each widget.\nfunction iterDeco(parent, deco, onWidget, onNode) {\n let locals = deco.locals(parent), offset = 0;\n // Simple, cheap variant for when there are no local decorations\n if (locals.length == 0) {\n for (let i = 0; i < parent.childCount; i++) {\n let child = parent.child(i);\n onNode(child, locals, deco.forChild(offset, child), i);\n offset += child.nodeSize;\n }\n return;\n }\n let decoIndex = 0, active = [], restNode = null;\n for (let parentIndex = 0;;) {\n let widget, widgets;\n while (decoIndex < locals.length && locals[decoIndex].to == offset) {\n let next = locals[decoIndex++];\n if (next.widget) {\n if (!widget)\n widget = next;\n else\n (widgets || (widgets = [widget])).push(next);\n }\n }\n if (widget) {\n if (widgets) {\n widgets.sort(compareSide);\n for (let i = 0; i < widgets.length; i++)\n onWidget(widgets[i], parentIndex, !!restNode);\n }\n else {\n onWidget(widget, parentIndex, !!restNode);\n }\n }\n let child, index;\n if (restNode) {\n index = -1;\n child = restNode;\n restNode = null;\n }\n else if (parentIndex < parent.childCount) {\n index = parentIndex;\n child = parent.child(parentIndex++);\n }\n else {\n break;\n }\n for (let i = 0; i < active.length; i++)\n if (active[i].to <= offset)\n active.splice(i--, 1);\n while (decoIndex < locals.length && locals[decoIndex].from <= offset && locals[decoIndex].to > offset)\n active.push(locals[decoIndex++]);\n let end = offset + child.nodeSize;\n if (child.isText) {\n let cutAt = end;\n if (decoIndex < locals.length && locals[decoIndex].from < cutAt)\n cutAt = locals[decoIndex].from;\n for (let i = 0; i < active.length; i++)\n if (active[i].to < cutAt)\n cutAt = active[i].to;\n if (cutAt < end) {\n restNode = child.cut(cutAt - offset);\n child = child.cut(0, cutAt - offset);\n end = cutAt;\n index = -1;\n }\n }\n else {\n while (decoIndex < locals.length && locals[decoIndex].to < end)\n decoIndex++;\n }\n let outerDeco = child.isInline && !child.isLeaf ? active.filter(d => !d.inline) : active.slice();\n onNode(child, outerDeco, deco.forChild(offset, child), index);\n offset = end;\n }\n}\n// List markers in Mobile Safari will mysteriously disappear\n// sometimes. This works around that.\nfunction iosHacks(dom) {\n if (dom.nodeName == \"UL\" || dom.nodeName == \"OL\") {\n let oldCSS = dom.style.cssText;\n dom.style.cssText = oldCSS + \"; list-style: square !important\";\n window.getComputedStyle(dom).listStyle;\n dom.style.cssText = oldCSS;\n }\n}\n// Find a piece of text in an inline fragment, overlapping from-to\nfunction findTextInFragment(frag, text, from, to) {\n for (let i = 0, pos = 0; i < frag.childCount && pos <= to;) {\n let child = frag.child(i++), childStart = pos;\n pos += child.nodeSize;\n if (!child.isText)\n continue;\n let str = child.text;\n while (i < frag.childCount) {\n let next = frag.child(i++);\n pos += next.nodeSize;\n if (!next.isText)\n break;\n str += next.text;\n }\n if (pos >= from) {\n if (pos >= to && str.slice(to - text.length - childStart, to - childStart) == text)\n return to - text.length;\n let found = childStart < to ? str.lastIndexOf(text, to - childStart - 1) : -1;\n if (found >= 0 && found + text.length + childStart >= from)\n return childStart + found;\n if (from == to && str.length >= (to + text.length) - childStart &&\n str.slice(to - childStart, to - childStart + text.length) == text)\n return to;\n }\n }\n return -1;\n}\n// Replace range from-to in an array of view descs with replacement\n// (may be null to just delete). This goes very much against the grain\n// of the rest of this code, which tends to create nodes with the\n// right shape in one go, rather than messing with them after\n// creation, but is necessary in the composition hack.\nfunction replaceNodes(nodes, from, to, view, replacement) {\n let result = [];\n for (let i = 0, off = 0; i < nodes.length; i++) {\n let child = nodes[i], start = off, end = off += child.size;\n if (start >= to || end <= from) {\n result.push(child);\n }\n else {\n if (start < from)\n result.push(child.slice(0, from - start, view));\n if (replacement) {\n result.push(replacement);\n replacement = undefined;\n }\n if (end > to)\n result.push(child.slice(to - start, child.size, view));\n }\n }\n return result;\n}\n\nfunction selectionFromDOM(view, origin = null) {\n let domSel = view.domSelectionRange(), doc = view.state.doc;\n if (!domSel.focusNode)\n return null;\n let nearestDesc = view.docView.nearestDesc(domSel.focusNode), inWidget = nearestDesc && nearestDesc.size == 0;\n let head = view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset, 1);\n if (head < 0)\n return null;\n let $head = doc.resolve(head), anchor, selection;\n if (selectionCollapsed(domSel)) {\n anchor = head;\n while (nearestDesc && !nearestDesc.node)\n nearestDesc = nearestDesc.parent;\n let nearestDescNode = nearestDesc.node;\n if (nearestDesc && nearestDescNode.isAtom && NodeSelection.isSelectable(nearestDescNode) && nearestDesc.parent\n && !(nearestDescNode.isInline && isOnEdge(domSel.focusNode, domSel.focusOffset, nearestDesc.dom))) {\n let pos = nearestDesc.posBefore;\n selection = new NodeSelection(head == pos ? $head : doc.resolve(pos));\n }\n }\n else {\n if (domSel instanceof view.dom.ownerDocument.defaultView.Selection && domSel.rangeCount > 1) {\n let min = head, max = head;\n for (let i = 0; i < domSel.rangeCount; i++) {\n let range = domSel.getRangeAt(i);\n min = Math.min(min, view.docView.posFromDOM(range.startContainer, range.startOffset, 1));\n max = Math.max(max, view.docView.posFromDOM(range.endContainer, range.endOffset, -1));\n }\n if (min < 0)\n return null;\n [anchor, head] = max == view.state.selection.anchor ? [max, min] : [min, max];\n $head = doc.resolve(head);\n }\n else {\n anchor = view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset, 1);\n }\n if (anchor < 0)\n return null;\n }\n let $anchor = doc.resolve(anchor);\n if (!selection) {\n let bias = origin == \"pointer\" || (view.state.selection.head < $head.pos && !inWidget) ? 1 : -1;\n selection = selectionBetween(view, $anchor, $head, bias);\n }\n return selection;\n}\nfunction editorOwnsSelection(view) {\n return view.editable ? view.hasFocus() :\n hasSelection(view) && document.activeElement && document.activeElement.contains(view.dom);\n}\nfunction selectionToDOM(view, force = false) {\n let sel = view.state.selection;\n syncNodeSelection(view, sel);\n if (!editorOwnsSelection(view))\n return;\n // The delayed drag selection causes issues with Cell Selections\n // in Safari. And the drag selection delay is to workarond issues\n // which only present in Chrome.\n if (!force && view.input.mouseDown && view.input.mouseDown.allowDefault && chrome) {\n let domSel = view.domSelectionRange(), curSel = view.domObserver.currentSelection;\n if (domSel.anchorNode && curSel.anchorNode &&\n isEquivalentPosition(domSel.anchorNode, domSel.anchorOffset, curSel.anchorNode, curSel.anchorOffset)) {\n view.input.mouseDown.delayedSelectionSync = true;\n view.domObserver.setCurSelection();\n return;\n }\n }\n view.domObserver.disconnectSelection();\n if (view.cursorWrapper) {\n selectCursorWrapper(view);\n }\n else {\n let { anchor, head } = sel, resetEditableFrom, resetEditableTo;\n if (brokenSelectBetweenUneditable && !(sel instanceof TextSelection)) {\n if (!sel.$from.parent.inlineContent)\n resetEditableFrom = temporarilyEditableNear(view, sel.from);\n if (!sel.empty && !sel.$from.parent.inlineContent)\n resetEditableTo = temporarilyEditableNear(view, sel.to);\n }\n view.docView.setSelection(anchor, head, view, force);\n if (brokenSelectBetweenUneditable) {\n if (resetEditableFrom)\n resetEditable(resetEditableFrom);\n if (resetEditableTo)\n resetEditable(resetEditableTo);\n }\n if (sel.visible) {\n view.dom.classList.remove(\"ProseMirror-hideselection\");\n }\n else {\n view.dom.classList.add(\"ProseMirror-hideselection\");\n if (\"onselectionchange\" in document)\n removeClassOnSelectionChange(view);\n }\n }\n view.domObserver.setCurSelection();\n view.domObserver.connectSelection();\n}\n// Kludge to work around Webkit not allowing a selection to start/end\n// between non-editable block nodes. We briefly make something\n// editable, set the selection, then set it uneditable again.\nconst brokenSelectBetweenUneditable = safari || chrome && chrome_version < 63;\nfunction temporarilyEditableNear(view, pos) {\n let { node, offset } = view.docView.domFromPos(pos, 0);\n let after = offset < node.childNodes.length ? node.childNodes[offset] : null;\n let before = offset ? node.childNodes[offset - 1] : null;\n if (safari && after && after.contentEditable == \"false\")\n return setEditable(after);\n if ((!after || after.contentEditable == \"false\") &&\n (!before || before.contentEditable == \"false\")) {\n if (after)\n return setEditable(after);\n else if (before)\n return setEditable(before);\n }\n}\nfunction setEditable(element) {\n element.contentEditable = \"true\";\n if (safari && element.draggable) {\n element.draggable = false;\n element.wasDraggable = true;\n }\n return element;\n}\nfunction resetEditable(element) {\n element.contentEditable = \"false\";\n if (element.wasDraggable) {\n element.draggable = true;\n element.wasDraggable = null;\n }\n}\nfunction removeClassOnSelectionChange(view) {\n let doc = view.dom.ownerDocument;\n doc.removeEventListener(\"selectionchange\", view.input.hideSelectionGuard);\n let domSel = view.domSelectionRange();\n let node = domSel.anchorNode, offset = domSel.anchorOffset;\n doc.addEventListener(\"selectionchange\", view.input.hideSelectionGuard = () => {\n if (domSel.anchorNode != node || domSel.anchorOffset != offset) {\n doc.removeEventListener(\"selectionchange\", view.input.hideSelectionGuard);\n setTimeout(() => {\n if (!editorOwnsSelection(view) || view.state.selection.visible)\n view.dom.classList.remove(\"ProseMirror-hideselection\");\n }, 20);\n }\n });\n}\nfunction selectCursorWrapper(view) {\n let domSel = view.domSelection();\n if (!domSel)\n return;\n let node = view.cursorWrapper.dom, img = node.nodeName == \"IMG\";\n if (img)\n domSel.collapse(node.parentNode, domIndex(node) + 1);\n else\n domSel.collapse(node, 0);\n // Kludge to kill 'control selection' in IE11 when selecting an\n // invisible cursor wrapper, since that would result in those weird\n // resize handles and a selection that considers the absolutely\n // positioned wrapper, rather than the root editable node, the\n // focused element.\n if (!img && !view.state.selection.visible && ie && ie_version <= 11) {\n node.disabled = true;\n node.disabled = false;\n }\n}\nfunction syncNodeSelection(view, sel) {\n if (sel instanceof NodeSelection) {\n let desc = view.docView.descAt(sel.from);\n if (desc != view.lastSelectedViewDesc) {\n clearNodeSelection(view);\n if (desc)\n desc.selectNode();\n view.lastSelectedViewDesc = desc;\n }\n }\n else {\n clearNodeSelection(view);\n }\n}\n// Clear all DOM statefulness of the last node selection.\nfunction clearNodeSelection(view) {\n if (view.lastSelectedViewDesc) {\n if (view.lastSelectedViewDesc.parent)\n view.lastSelectedViewDesc.deselectNode();\n view.lastSelectedViewDesc = undefined;\n }\n}\nfunction selectionBetween(view, $anchor, $head, bias) {\n return view.someProp(\"createSelectionBetween\", f => f(view, $anchor, $head))\n || TextSelection.between($anchor, $head, bias);\n}\nfunction hasFocusAndSelection(view) {\n if (view.editable && !view.hasFocus())\n return false;\n return hasSelection(view);\n}\nfunction hasSelection(view) {\n let sel = view.domSelectionRange();\n if (!sel.anchorNode)\n return false;\n try {\n // Firefox will raise 'permission denied' errors when accessing\n // properties of `sel.anchorNode` when it's in a generated CSS\n // element.\n return view.dom.contains(sel.anchorNode.nodeType == 3 ? sel.anchorNode.parentNode : sel.anchorNode) &&\n (view.editable || view.dom.contains(sel.focusNode.nodeType == 3 ? sel.focusNode.parentNode : sel.focusNode));\n }\n catch (_) {\n return false;\n }\n}\nfunction anchorInRightPlace(view) {\n let anchorDOM = view.docView.domFromPos(view.state.selection.anchor, 0);\n let domSel = view.domSelectionRange();\n return isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset);\n}\n\nfunction moveSelectionBlock(state, dir) {\n let { $anchor, $head } = state.selection;\n let $side = dir > 0 ? $anchor.max($head) : $anchor.min($head);\n let $start = !$side.parent.inlineContent ? $side : $side.depth ? state.doc.resolve(dir > 0 ? $side.after() : $side.before()) : null;\n return $start && Selection.findFrom($start, dir);\n}\nfunction apply(view, sel) {\n view.dispatch(view.state.tr.setSelection(sel).scrollIntoView());\n return true;\n}\nfunction selectHorizontally(view, dir, mods) {\n let sel = view.state.selection;\n if (sel instanceof TextSelection) {\n if (mods.indexOf(\"s\") > -1) {\n let { $head } = sel, node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter;\n if (!node || node.isText || !node.isLeaf)\n return false;\n let $newHead = view.state.doc.resolve($head.pos + node.nodeSize * (dir < 0 ? -1 : 1));\n return apply(view, new TextSelection(sel.$anchor, $newHead));\n }\n else if (!sel.empty) {\n return false;\n }\n else if (view.endOfTextblock(dir > 0 ? \"forward\" : \"backward\")) {\n let next = moveSelectionBlock(view.state, dir);\n if (next && (next instanceof NodeSelection))\n return apply(view, next);\n return false;\n }\n else if (!(mac && mods.indexOf(\"m\") > -1)) {\n let $head = sel.$head, node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter, desc;\n if (!node || node.isText)\n return false;\n let nodePos = dir < 0 ? $head.pos - node.nodeSize : $head.pos;\n if (!(node.isAtom || (desc = view.docView.descAt(nodePos)) && !desc.contentDOM))\n return false;\n if (NodeSelection.isSelectable(node)) {\n return apply(view, new NodeSelection(dir < 0 ? view.state.doc.resolve($head.pos - node.nodeSize) : $head));\n }\n else if (webkit) {\n // Chrome and Safari will introduce extra pointless cursor\n // positions around inline uneditable nodes, so we have to\n // take over and move the cursor past them (#937)\n return apply(view, new TextSelection(view.state.doc.resolve(dir < 0 ? nodePos : nodePos + node.nodeSize)));\n }\n else {\n return false;\n }\n }\n }\n else if (sel instanceof NodeSelection && sel.node.isInline) {\n return apply(view, new TextSelection(dir > 0 ? sel.$to : sel.$from));\n }\n else {\n let next = moveSelectionBlock(view.state, dir);\n if (next)\n return apply(view, next);\n return false;\n }\n}\nfunction nodeLen(node) {\n return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction isIgnorable(dom, dir) {\n let desc = dom.pmViewDesc;\n return desc && desc.size == 0 && (dir < 0 || dom.nextSibling || dom.nodeName != \"BR\");\n}\nfunction skipIgnoredNodes(view, dir) {\n return dir < 0 ? skipIgnoredNodesBefore(view) : skipIgnoredNodesAfter(view);\n}\n// Make sure the cursor isn't directly after one or more ignored\n// nodes, which will confuse the browser's cursor motion logic.\nfunction skipIgnoredNodesBefore(view) {\n let sel = view.domSelectionRange();\n let node = sel.focusNode, offset = sel.focusOffset;\n if (!node)\n return;\n let moveNode, moveOffset, force = false;\n // Gecko will do odd things when the selection is directly in front\n // of a non-editable node, so in that case, move it into the next\n // node if possible. Issue prosemirror/prosemirror#832.\n if (gecko && node.nodeType == 1 && offset < nodeLen(node) && isIgnorable(node.childNodes[offset], -1))\n force = true;\n for (;;) {\n if (offset > 0) {\n if (node.nodeType != 1) {\n break;\n }\n else {\n let before = node.childNodes[offset - 1];\n if (isIgnorable(before, -1)) {\n moveNode = node;\n moveOffset = --offset;\n }\n else if (before.nodeType == 3) {\n node = before;\n offset = node.nodeValue.length;\n }\n else\n break;\n }\n }\n else if (isBlockNode(node)) {\n break;\n }\n else {\n let prev = node.previousSibling;\n while (prev && isIgnorable(prev, -1)) {\n moveNode = node.parentNode;\n moveOffset = domIndex(prev);\n prev = prev.previousSibling;\n }\n if (!prev) {\n node = node.parentNode;\n if (node == view.dom)\n break;\n offset = 0;\n }\n else {\n node = prev;\n offset = nodeLen(node);\n }\n }\n }\n if (force)\n setSelFocus(view, node, offset);\n else if (moveNode)\n setSelFocus(view, moveNode, moveOffset);\n}\n// Make sure the cursor isn't directly before one or more ignored\n// nodes.\nfunction skipIgnoredNodesAfter(view) {\n let sel = view.domSelectionRange();\n let node = sel.focusNode, offset = sel.focusOffset;\n if (!node)\n return;\n let len = nodeLen(node);\n let moveNode, moveOffset;\n for (;;) {\n if (offset < len) {\n if (node.nodeType != 1)\n break;\n let after = node.childNodes[offset];\n if (isIgnorable(after, 1)) {\n moveNode = node;\n moveOffset = ++offset;\n }\n else\n break;\n }\n else if (isBlockNode(node)) {\n break;\n }\n else {\n let next = node.nextSibling;\n while (next && isIgnorable(next, 1)) {\n moveNode = next.parentNode;\n moveOffset = domIndex(next) + 1;\n next = next.nextSibling;\n }\n if (!next) {\n node = node.parentNode;\n if (node == view.dom)\n break;\n offset = len = 0;\n }\n else {\n node = next;\n offset = 0;\n len = nodeLen(node);\n }\n }\n }\n if (moveNode)\n setSelFocus(view, moveNode, moveOffset);\n}\nfunction isBlockNode(dom) {\n let desc = dom.pmViewDesc;\n return desc && desc.node && desc.node.isBlock;\n}\nfunction textNodeAfter(node, offset) {\n while (node && offset == node.childNodes.length && !hasBlockDesc(node)) {\n offset = domIndex(node) + 1;\n node = node.parentNode;\n }\n while (node && offset < node.childNodes.length) {\n let next = node.childNodes[offset];\n if (next.nodeType == 3)\n return next;\n if (next.nodeType == 1 && next.contentEditable == \"false\")\n break;\n node = next;\n offset = 0;\n }\n}\nfunction textNodeBefore(node, offset) {\n while (node && !offset && !hasBlockDesc(node)) {\n offset = domIndex(node);\n node = node.parentNode;\n }\n while (node && offset) {\n let next = node.childNodes[offset - 1];\n if (next.nodeType == 3)\n return next;\n if (next.nodeType == 1 && next.contentEditable == \"false\")\n break;\n node = next;\n offset = node.childNodes.length;\n }\n}\nfunction setSelFocus(view, node, offset) {\n if (node.nodeType != 3) {\n let before, after;\n if (after = textNodeAfter(node, offset)) {\n node = after;\n offset = 0;\n }\n else if (before = textNodeBefore(node, offset)) {\n node = before;\n offset = before.nodeValue.length;\n }\n }\n let sel = view.domSelection();\n if (!sel)\n return;\n if (selectionCollapsed(sel)) {\n let range = document.createRange();\n range.setEnd(node, offset);\n range.setStart(node, offset);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n else if (sel.extend) {\n sel.extend(node, offset);\n }\n view.domObserver.setCurSelection();\n let { state } = view;\n // If no state update ends up happening, reset the selection.\n setTimeout(() => {\n if (view.state == state)\n selectionToDOM(view);\n }, 50);\n}\nfunction findDirection(view, pos) {\n let $pos = view.state.doc.resolve(pos);\n if (!(chrome || windows) && $pos.parent.inlineContent) {\n let coords = view.coordsAtPos(pos);\n if (pos > $pos.start()) {\n let before = view.coordsAtPos(pos - 1);\n let mid = (before.top + before.bottom) / 2;\n if (mid > coords.top && mid < coords.bottom && Math.abs(before.left - coords.left) > 1)\n return before.left < coords.left ? \"ltr\" : \"rtl\";\n }\n if (pos < $pos.end()) {\n let after = view.coordsAtPos(pos + 1);\n let mid = (after.top + after.bottom) / 2;\n if (mid > coords.top && mid < coords.bottom && Math.abs(after.left - coords.left) > 1)\n return after.left > coords.left ? \"ltr\" : \"rtl\";\n }\n }\n let computed = getComputedStyle(view.dom).direction;\n return computed == \"rtl\" ? \"rtl\" : \"ltr\";\n}\n// Check whether vertical selection motion would involve node\n// selections. If so, apply it (if not, the result is left to the\n// browser)\nfunction selectVertically(view, dir, mods) {\n let sel = view.state.selection;\n if (sel instanceof TextSelection && !sel.empty || mods.indexOf(\"s\") > -1)\n return false;\n if (mac && mods.indexOf(\"m\") > -1)\n return false;\n let { $from, $to } = sel;\n if (!$from.parent.inlineContent || view.endOfTextblock(dir < 0 ? \"up\" : \"down\")) {\n let next = moveSelectionBlock(view.state, dir);\n if (next && (next instanceof NodeSelection))\n return apply(view, next);\n }\n if (!$from.parent.inlineContent) {\n let side = dir < 0 ? $from : $to;\n let beyond = sel instanceof AllSelection ? Selection.near(side, dir) : Selection.findFrom(side, dir);\n return beyond ? apply(view, beyond) : false;\n }\n return false;\n}\nfunction stopNativeHorizontalDelete(view, dir) {\n if (!(view.state.selection instanceof TextSelection))\n return true;\n let { $head, $anchor, empty } = view.state.selection;\n if (!$head.sameParent($anchor))\n return true;\n if (!empty)\n return false;\n if (view.endOfTextblock(dir > 0 ? \"forward\" : \"backward\"))\n return true;\n let nextNode = !$head.textOffset && (dir < 0 ? $head.nodeBefore : $head.nodeAfter);\n if (nextNode && !nextNode.isText) {\n let tr = view.state.tr;\n if (dir < 0)\n tr.delete($head.pos - nextNode.nodeSize, $head.pos);\n else\n tr.delete($head.pos, $head.pos + nextNode.nodeSize);\n view.dispatch(tr);\n return true;\n }\n return false;\n}\nfunction switchEditable(view, node, state) {\n view.domObserver.stop();\n node.contentEditable = state;\n view.domObserver.start();\n}\n// Issue #867 / #1090 / https://bugs.chromium.org/p/chromium/issues/detail?id=903821\n// In which Safari (and at some point in the past, Chrome) does really\n// wrong things when the down arrow is pressed when the cursor is\n// directly at the start of a textblock and has an uneditable node\n// after it\nfunction safariDownArrowBug(view) {\n if (!safari || view.state.selection.$head.parentOffset > 0)\n return false;\n let { focusNode, focusOffset } = view.domSelectionRange();\n if (focusNode && focusNode.nodeType == 1 && focusOffset == 0 &&\n focusNode.firstChild && focusNode.firstChild.contentEditable == \"false\") {\n let child = focusNode.firstChild;\n switchEditable(view, child, \"true\");\n setTimeout(() => switchEditable(view, child, \"false\"), 20);\n }\n return false;\n}\n// A backdrop key mapping used to make sure we always suppress keys\n// that have a dangerous default effect, even if the commands they are\n// bound to return false, and to make sure that cursor-motion keys\n// find a cursor (as opposed to a node selection) when pressed. For\n// cursor-motion keys, the code in the handlers also takes care of\n// block selections.\nfunction getMods(event) {\n let result = \"\";\n if (event.ctrlKey)\n result += \"c\";\n if (event.metaKey)\n result += \"m\";\n if (event.altKey)\n result += \"a\";\n if (event.shiftKey)\n result += \"s\";\n return result;\n}\nfunction captureKeyDown(view, event) {\n let code = event.keyCode, mods = getMods(event);\n if (code == 8 || (mac && code == 72 && mods == \"c\")) { // Backspace, Ctrl-h on Mac\n return stopNativeHorizontalDelete(view, -1) || skipIgnoredNodes(view, -1);\n }\n else if ((code == 46 && !event.shiftKey) || (mac && code == 68 && mods == \"c\")) { // Delete, Ctrl-d on Mac\n return stopNativeHorizontalDelete(view, 1) || skipIgnoredNodes(view, 1);\n }\n else if (code == 13 || code == 27) { // Enter, Esc\n return true;\n }\n else if (code == 37 || (mac && code == 66 && mods == \"c\")) { // Left arrow, Ctrl-b on Mac\n let dir = code == 37 ? (findDirection(view, view.state.selection.from) == \"ltr\" ? -1 : 1) : -1;\n return selectHorizontally(view, dir, mods) || skipIgnoredNodes(view, dir);\n }\n else if (code == 39 || (mac && code == 70 && mods == \"c\")) { // Right arrow, Ctrl-f on Mac\n let dir = code == 39 ? (findDirection(view, view.state.selection.from) == \"ltr\" ? 1 : -1) : 1;\n return selectHorizontally(view, dir, mods) || skipIgnoredNodes(view, dir);\n }\n else if (code == 38 || (mac && code == 80 && mods == \"c\")) { // Up arrow, Ctrl-p on Mac\n return selectVertically(view, -1, mods) || skipIgnoredNodes(view, -1);\n }\n else if (code == 40 || (mac && code == 78 && mods == \"c\")) { // Down arrow, Ctrl-n on Mac\n return safariDownArrowBug(view) || selectVertically(view, 1, mods) || skipIgnoredNodes(view, 1);\n }\n else if (mods == (mac ? \"m\" : \"c\") &&\n (code == 66 || code == 73 || code == 89 || code == 90)) { // Mod-[biyz]\n return true;\n }\n return false;\n}\n\nfunction serializeForClipboard(view, slice) {\n view.someProp(\"transformCopied\", f => { slice = f(slice, view); });\n let context = [], { content, openStart, openEnd } = slice;\n while (openStart > 1 && openEnd > 1 && content.childCount == 1 && content.firstChild.childCount == 1) {\n openStart--;\n openEnd--;\n let node = content.firstChild;\n context.push(node.type.name, node.attrs != node.type.defaultAttrs ? node.attrs : null);\n content = node.content;\n }\n let serializer = view.someProp(\"clipboardSerializer\") || DOMSerializer.fromSchema(view.state.schema);\n let doc = detachedDoc(), wrap = doc.createElement(\"div\");\n wrap.appendChild(serializer.serializeFragment(content, { document: doc }));\n let firstChild = wrap.firstChild, needsWrap, wrappers = 0;\n while (firstChild && firstChild.nodeType == 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {\n for (let i = needsWrap.length - 1; i >= 0; i--) {\n let wrapper = doc.createElement(needsWrap[i]);\n while (wrap.firstChild)\n wrapper.appendChild(wrap.firstChild);\n wrap.appendChild(wrapper);\n wrappers++;\n }\n firstChild = wrap.firstChild;\n }\n if (firstChild && firstChild.nodeType == 1)\n firstChild.setAttribute(\"data-pm-slice\", `${openStart} ${openEnd}${wrappers ? ` -${wrappers}` : \"\"} ${JSON.stringify(context)}`);\n let text = view.someProp(\"clipboardTextSerializer\", f => f(slice, view)) ||\n slice.content.textBetween(0, slice.content.size, \"\\n\\n\");\n return { dom: wrap, text, slice };\n}\n// Read a slice of content from the clipboard (or drop data).\nfunction parseFromClipboard(view, text, html, plainText, $context) {\n let inCode = $context.parent.type.spec.code;\n let dom, slice;\n if (!html && !text)\n return null;\n let asText = !!text && (plainText || inCode || !html);\n if (asText) {\n view.someProp(\"transformPastedText\", f => { text = f(text, inCode || plainText, view); });\n if (inCode) {\n slice = new Slice(Fragment.from(view.state.schema.text(text.replace(/\\r\\n?/g, \"\\n\"))), 0, 0);\n view.someProp(\"transformPasted\", f => { slice = f(slice, view, true); });\n return slice;\n }\n let parsed = view.someProp(\"clipboardTextParser\", f => f(text, $context, plainText, view));\n if (parsed) {\n slice = parsed;\n }\n else {\n let marks = $context.marks();\n let { schema } = view.state, serializer = DOMSerializer.fromSchema(schema);\n dom = document.createElement(\"div\");\n text.split(/(?:\\r\\n?|\\n)+/).forEach(block => {\n let p = dom.appendChild(document.createElement(\"p\"));\n if (block)\n p.appendChild(serializer.serializeNode(schema.text(block, marks)));\n });\n }\n }\n else {\n view.someProp(\"transformPastedHTML\", f => { html = f(html, view); });\n dom = readHTML(html);\n if (webkit)\n restoreReplacedSpaces(dom);\n }\n let contextNode = dom && dom.querySelector(\"[data-pm-slice]\");\n let sliceData = contextNode && /^(\\d+) (\\d+)(?: -(\\d+))? (.*)/.exec(contextNode.getAttribute(\"data-pm-slice\") || \"\");\n if (sliceData && sliceData[3])\n for (let i = +sliceData[3]; i > 0; i--) {\n let child = dom.firstChild;\n while (child && child.nodeType != 1)\n child = child.nextSibling;\n if (!child)\n break;\n dom = child;\n }\n if (!slice) {\n let parser = view.someProp(\"clipboardParser\") || view.someProp(\"domParser\") || DOMParser.fromSchema(view.state.schema);\n slice = parser.parseSlice(dom, {\n preserveWhitespace: !!(asText || sliceData),\n context: $context,\n ruleFromNode(dom) {\n if (dom.nodeName == \"BR\" && !dom.nextSibling &&\n dom.parentNode && !inlineParents.test(dom.parentNode.nodeName))\n return { ignore: true };\n return null;\n }\n });\n }\n if (sliceData) {\n slice = addContext(closeSlice(slice, +sliceData[1], +sliceData[2]), sliceData[4]);\n }\n else { // HTML wasn't created by ProseMirror. Make sure top-level siblings are coherent\n slice = Slice.maxOpen(normalizeSiblings(slice.content, $context), true);\n if (slice.openStart || slice.openEnd) {\n let openStart = 0, openEnd = 0;\n for (let node = slice.content.firstChild; openStart < slice.openStart && !node.type.spec.isolating; openStart++, node = node.firstChild) { }\n for (let node = slice.content.lastChild; openEnd < slice.openEnd && !node.type.spec.isolating; openEnd++, node = node.lastChild) { }\n slice = closeSlice(slice, openStart, openEnd);\n }\n }\n view.someProp(\"transformPasted\", f => { slice = f(slice, view, asText); });\n return slice;\n}\nconst inlineParents = /^(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;\n// Takes a slice parsed with parseSlice, which means there hasn't been\n// any content-expression checking done on the top nodes, tries to\n// find a parent node in the current context that might fit the nodes,\n// and if successful, rebuilds the slice so that it fits into that parent.\n//\n// This addresses the problem that Transform.replace expects a\n// coherent slice, and will fail to place a set of siblings that don't\n// fit anywhere in the schema.\nfunction normalizeSiblings(fragment, $context) {\n if (fragment.childCount < 2)\n return fragment;\n for (let d = $context.depth; d >= 0; d--) {\n let parent = $context.node(d);\n let match = parent.contentMatchAt($context.index(d));\n let lastWrap, result = [];\n fragment.forEach(node => {\n if (!result)\n return;\n let wrap = match.findWrapping(node.type), inLast;\n if (!wrap)\n return result = null;\n if (inLast = result.length && lastWrap.length && addToSibling(wrap, lastWrap, node, result[result.length - 1], 0)) {\n result[result.length - 1] = inLast;\n }\n else {\n if (result.length)\n result[result.length - 1] = closeRight(result[result.length - 1], lastWrap.length);\n let wrapped = withWrappers(node, wrap);\n result.push(wrapped);\n match = match.matchType(wrapped.type);\n lastWrap = wrap;\n }\n });\n if (result)\n return Fragment.from(result);\n }\n return fragment;\n}\nfunction withWrappers(node, wrap, from = 0) {\n for (let i = wrap.length - 1; i >= from; i--)\n node = wrap[i].create(null, Fragment.from(node));\n return node;\n}\n// Used to group adjacent nodes wrapped in similar parents by\n// normalizeSiblings into the same parent node\nfunction addToSibling(wrap, lastWrap, node, sibling, depth) {\n if (depth < wrap.length && depth < lastWrap.length && wrap[depth] == lastWrap[depth]) {\n let inner = addToSibling(wrap, lastWrap, node, sibling.lastChild, depth + 1);\n if (inner)\n return sibling.copy(sibling.content.replaceChild(sibling.childCount - 1, inner));\n let match = sibling.contentMatchAt(sibling.childCount);\n if (match.matchType(depth == wrap.length - 1 ? node.type : wrap[depth + 1]))\n return sibling.copy(sibling.content.append(Fragment.from(withWrappers(node, wrap, depth + 1))));\n }\n}\nfunction closeRight(node, depth) {\n if (depth == 0)\n return node;\n let fragment = node.content.replaceChild(node.childCount - 1, closeRight(node.lastChild, depth - 1));\n let fill = node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true);\n return node.copy(fragment.append(fill));\n}\nfunction closeRange(fragment, side, from, to, depth, openEnd) {\n let node = side < 0 ? fragment.firstChild : fragment.lastChild, inner = node.content;\n if (fragment.childCount > 1)\n openEnd = 0;\n if (depth < to - 1)\n inner = closeRange(inner, side, from, to, depth + 1, openEnd);\n if (depth >= from)\n inner = side < 0 ? node.contentMatchAt(0).fillBefore(inner, openEnd <= depth).append(inner)\n : inner.append(node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true));\n return fragment.replaceChild(side < 0 ? 0 : fragment.childCount - 1, node.copy(inner));\n}\nfunction closeSlice(slice, openStart, openEnd) {\n if (openStart < slice.openStart)\n slice = new Slice(closeRange(slice.content, -1, openStart, slice.openStart, 0, slice.openEnd), openStart, slice.openEnd);\n if (openEnd < slice.openEnd)\n slice = new Slice(closeRange(slice.content, 1, openEnd, slice.openEnd, 0, 0), slice.openStart, openEnd);\n return slice;\n}\n// Trick from jQuery -- some elements must be wrapped in other\n// elements for innerHTML to work. I.e. if you do `div.innerHTML =\n// \"<td>..</td>\"` the table cells are ignored.\nconst wrapMap = {\n thead: [\"table\"],\n tbody: [\"table\"],\n tfoot: [\"table\"],\n caption: [\"table\"],\n colgroup: [\"table\"],\n col: [\"table\", \"colgroup\"],\n tr: [\"table\", \"tbody\"],\n td: [\"table\", \"tbody\", \"tr\"],\n th: [\"table\", \"tbody\", \"tr\"]\n};\nlet _detachedDoc = null;\nfunction detachedDoc() {\n return _detachedDoc || (_detachedDoc = document.implementation.createHTMLDocument(\"title\"));\n}\nlet _policy = null;\nfunction maybeWrapTrusted(html) {\n let trustedTypes = window.trustedTypes;\n if (!trustedTypes)\n return html;\n // With the require-trusted-types-for CSP, Chrome will block\n // innerHTML, even on a detached document. This wraps the string in\n // a way that makes the browser allow us to use its parser again.\n if (!_policy)\n _policy = trustedTypes.defaultPolicy || trustedTypes.createPolicy(\"ProseMirrorClipboard\", { createHTML: (s) => s });\n return _policy.createHTML(html);\n}\nfunction readHTML(html) {\n let metas = /^(\\s*<meta [^>]*>)*/.exec(html);\n if (metas)\n html = html.slice(metas[0].length);\n let elt = detachedDoc().createElement(\"div\");\n let firstTag = /<([a-z][^>\\s]+)/i.exec(html), wrap;\n if (wrap = firstTag && wrapMap[firstTag[1].toLowerCase()])\n html = wrap.map(n => \"<\" + n + \">\").join(\"\") + html + wrap.map(n => \"</\" + n + \">\").reverse().join(\"\");\n elt.innerHTML = maybeWrapTrusted(html);\n if (wrap)\n for (let i = 0; i < wrap.length; i++)\n elt = elt.querySelector(wrap[i]) || elt;\n return elt;\n}\n// Webkit browsers do some hard-to-predict replacement of regular\n// spaces with non-breaking spaces when putting content on the\n// clipboard. This tries to convert such non-breaking spaces (which\n// will be wrapped in a plain span on Chrome, a span with class\n// Apple-converted-space on Safari) back to regular spaces.\nfunction restoreReplacedSpaces(dom) {\n let nodes = dom.querySelectorAll(chrome ? \"span:not([class]):not([style])\" : \"span.Apple-converted-space\");\n for (let i = 0; i < nodes.length; i++) {\n let node = nodes[i];\n if (node.childNodes.length == 1 && node.textContent == \"\\u00a0\" && node.parentNode)\n node.parentNode.replaceChild(dom.ownerDocument.createTextNode(\" \"), node);\n }\n}\nfunction addContext(slice, context) {\n if (!slice.size)\n return slice;\n let schema = slice.content.firstChild.type.schema, array;\n try {\n array = JSON.parse(context);\n }\n catch (e) {\n return slice;\n }\n let { content, openStart, openEnd } = slice;\n for (let i = array.length - 2; i >= 0; i -= 2) {\n let type = schema.nodes[array[i]];\n if (!type || type.hasRequiredAttrs())\n break;\n content = Fragment.from(type.create(array[i + 1], content));\n openStart++;\n openEnd++;\n }\n return new Slice(content, openStart, openEnd);\n}\n\n// A collection of DOM events that occur within the editor, and callback functions\n// to invoke when the event fires.\nconst handlers = {};\nconst editHandlers = {};\nconst passiveHandlers = { touchstart: true, touchmove: true };\nclass InputState {\n constructor() {\n this.shiftKey = false;\n this.mouseDown = null;\n this.lastKeyCode = null;\n this.lastKeyCodeTime = 0;\n this.lastClick = { time: 0, x: 0, y: 0, type: \"\", button: 0 };\n this.lastSelectionOrigin = null;\n this.lastSelectionTime = 0;\n this.lastIOSEnter = 0;\n this.lastIOSEnterFallbackTimeout = -1;\n this.lastFocus = 0;\n this.lastTouch = 0;\n this.lastChromeDelete = 0;\n this.composing = false;\n this.compositionNode = null;\n this.composingTimeout = -1;\n this.compositionNodes = [];\n this.compositionEndedAt = -2e8;\n this.compositionID = 1;\n this.badSafariComposition = false;\n // Set to a composition ID when there are pending changes at compositionend\n this.compositionPendingChanges = 0;\n this.domChangeCount = 0;\n this.eventHandlers = Object.create(null);\n this.hideSelectionGuard = null;\n }\n}\nfunction initInput(view) {\n for (let event in handlers) {\n let handler = handlers[event];\n view.dom.addEventListener(event, view.input.eventHandlers[event] = (event) => {\n if (eventBelongsToView(view, event) && !runCustomHandler(view, event) &&\n (view.editable || !(event.type in editHandlers)))\n handler(view, event);\n }, passiveHandlers[event] ? { passive: true } : undefined);\n }\n // On Safari, for reasons beyond my understanding, adding an input\n // event handler makes an issue where the composition vanishes when\n // you press enter go away.\n if (safari)\n view.dom.addEventListener(\"input\", () => null);\n ensureListeners(view);\n}\nfunction setSelectionOrigin(view, origin) {\n view.input.lastSelectionOrigin = origin;\n view.input.lastSelectionTime = Date.now();\n}\nfunction destroyInput(view) {\n view.domObserver.stop();\n for (let type in view.input.eventHandlers)\n view.dom.removeEventListener(type, view.input.eventHandlers[type]);\n clearTimeout(view.input.composingTimeout);\n clearTimeout(view.input.lastIOSEnterFallbackTimeout);\n}\nfunction ensureListeners(view) {\n view.someProp(\"handleDOMEvents\", currentHandlers => {\n for (let type in currentHandlers)\n if (!view.input.eventHandlers[type])\n view.dom.addEventListener(type, view.input.eventHandlers[type] = event => runCustomHandler(view, event));\n });\n}\nfunction runCustomHandler(view, event) {\n return view.someProp(\"handleDOMEvents\", handlers => {\n let handler = handlers[event.type];\n return handler ? handler(view, event) || event.defaultPrevented : false;\n });\n}\nfunction eventBelongsToView(view, event) {\n if (!event.bubbles)\n return true;\n if (event.defaultPrevented)\n return false;\n for (let node = event.target; node != view.dom; node = node.parentNode)\n if (!node || node.nodeType == 11 ||\n (node.pmViewDesc && node.pmViewDesc.stopEvent(event)))\n return false;\n return true;\n}\nfunction dispatchEvent(view, event) {\n if (!runCustomHandler(view, event) && handlers[event.type] &&\n (view.editable || !(event.type in editHandlers)))\n handlers[event.type](view, event);\n}\neditHandlers.keydown = (view, _event) => {\n let event = _event;\n view.input.shiftKey = event.keyCode == 16 || event.shiftKey;\n if (inOrNearComposition(view, event))\n return;\n view.input.lastKeyCode = event.keyCode;\n view.input.lastKeyCodeTime = Date.now();\n // Suppress enter key events on Chrome Android, because those tend\n // to be part of a confused sequence of composition events fired,\n // and handling them eagerly tends to corrupt the input.\n if (android && chrome && event.keyCode == 13)\n return;\n if (event.keyCode != 229)\n view.domObserver.forceFlush();\n // On iOS, if we preventDefault enter key presses, the virtual\n // keyboard gets confused. So the hack here is to set a flag that\n // makes the DOM change code recognize that what just happens should\n // be replaced by whatever the Enter key handlers do.\n if (ios && event.keyCode == 13 && !event.ctrlKey && !event.altKey && !event.metaKey) {\n let now = Date.now();\n view.input.lastIOSEnter = now;\n view.input.lastIOSEnterFallbackTimeout = setTimeout(() => {\n if (view.input.lastIOSEnter == now) {\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\")));\n view.input.lastIOSEnter = 0;\n }\n }, 200);\n }\n else if (view.someProp(\"handleKeyDown\", f => f(view, event)) || captureKeyDown(view, event)) {\n event.preventDefault();\n }\n else {\n setSelectionOrigin(view, \"key\");\n }\n};\neditHandlers.keyup = (view, event) => {\n if (event.keyCode == 16)\n view.input.shiftKey = false;\n};\neditHandlers.keypress = (view, _event) => {\n let event = _event;\n if (inOrNearComposition(view, event) || !event.charCode ||\n event.ctrlKey && !event.altKey || mac && event.metaKey)\n return;\n if (view.someProp(\"handleKeyPress\", f => f(view, event))) {\n event.preventDefault();\n return;\n }\n let sel = view.state.selection;\n if (!(sel instanceof TextSelection) || !sel.$from.sameParent(sel.$to)) {\n let text = String.fromCharCode(event.charCode);\n let deflt = () => view.state.tr.insertText(text).scrollIntoView();\n if (!/[\\r\\n]/.test(text) && !view.someProp(\"handleTextInput\", f => f(view, sel.$from.pos, sel.$to.pos, text, deflt)))\n view.dispatch(deflt());\n event.preventDefault();\n }\n};\nfunction eventCoords(event) { return { left: event.clientX, top: event.clientY }; }\nfunction isNear(event, click) {\n let dx = click.x - event.clientX, dy = click.y - event.clientY;\n return dx * dx + dy * dy < 100;\n}\nfunction runHandlerOnContext(view, propName, pos, inside, event) {\n if (inside == -1)\n return false;\n let $pos = view.state.doc.resolve(inside);\n for (let i = $pos.depth + 1; i > 0; i--) {\n if (view.someProp(propName, f => i > $pos.depth ? f(view, pos, $pos.nodeAfter, $pos.before(i), event, true)\n : f(view, pos, $pos.node(i), $pos.before(i), event, false)))\n return true;\n }\n return false;\n}\nfunction updateSelection(view, selection, origin) {\n if (!view.focused)\n view.focus();\n if (view.state.selection.eq(selection))\n return;\n let tr = view.state.tr.setSelection(selection);\n if (origin == \"pointer\")\n tr.setMeta(\"pointer\", true);\n view.dispatch(tr);\n}\nfunction selectClickedLeaf(view, inside) {\n if (inside == -1)\n return false;\n let $pos = view.state.doc.resolve(inside), node = $pos.nodeAfter;\n if (node && node.isAtom && NodeSelection.isSelectable(node)) {\n updateSelection(view, new NodeSelection($pos), \"pointer\");\n return true;\n }\n return false;\n}\nfunction selectClickedNode(view, inside) {\n if (inside == -1)\n return false;\n let sel = view.state.selection, selectedNode, selectAt;\n if (sel instanceof NodeSelection)\n selectedNode = sel.node;\n let $pos = view.state.doc.resolve(inside);\n for (let i = $pos.depth + 1; i > 0; i--) {\n let node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);\n if (NodeSelection.isSelectable(node)) {\n if (selectedNode && sel.$from.depth > 0 &&\n i >= sel.$from.depth && $pos.before(sel.$from.depth + 1) == sel.$from.pos)\n selectAt = $pos.before(sel.$from.depth);\n else\n selectAt = $pos.before(i);\n break;\n }\n }\n if (selectAt != null) {\n updateSelection(view, NodeSelection.create(view.state.doc, selectAt), \"pointer\");\n return true;\n }\n else {\n return false;\n }\n}\nfunction handleSingleClick(view, pos, inside, event, selectNode) {\n return runHandlerOnContext(view, \"handleClickOn\", pos, inside, event) ||\n view.someProp(\"handleClick\", f => f(view, pos, event)) ||\n (selectNode ? selectClickedNode(view, inside) : selectClickedLeaf(view, inside));\n}\nfunction handleDoubleClick(view, pos, inside, event) {\n return runHandlerOnContext(view, \"handleDoubleClickOn\", pos, inside, event) ||\n view.someProp(\"handleDoubleClick\", f => f(view, pos, event));\n}\nfunction handleTripleClick(view, pos, inside, event) {\n return runHandlerOnContext(view, \"handleTripleClickOn\", pos, inside, event) ||\n view.someProp(\"handleTripleClick\", f => f(view, pos, event)) ||\n defaultTripleClick(view, inside, event);\n}\nfunction defaultTripleClick(view, inside, event) {\n if (event.button != 0)\n return false;\n let doc = view.state.doc;\n if (inside == -1) {\n if (doc.inlineContent) {\n updateSelection(view, TextSelection.create(doc, 0, doc.content.size), \"pointer\");\n return true;\n }\n return false;\n }\n let $pos = doc.resolve(inside);\n for (let i = $pos.depth + 1; i > 0; i--) {\n let node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);\n let nodePos = $pos.before(i);\n if (node.inlineContent)\n updateSelection(view, TextSelection.create(doc, nodePos + 1, nodePos + 1 + node.content.size), \"pointer\");\n else if (NodeSelection.isSelectable(node))\n updateSelection(view, NodeSelection.create(doc, nodePos), \"pointer\");\n else\n continue;\n return true;\n }\n}\nfunction forceDOMFlush(view) {\n return endComposition(view);\n}\nconst selectNodeModifier = mac ? \"metaKey\" : \"ctrlKey\";\nhandlers.mousedown = (view, _event) => {\n let event = _event;\n view.input.shiftKey = event.shiftKey;\n let flushed = forceDOMFlush(view);\n let now = Date.now(), type = \"singleClick\";\n if (now - view.input.lastClick.time < 500 && isNear(event, view.input.lastClick) && !event[selectNodeModifier] &&\n view.input.lastClick.button == event.button) {\n if (view.input.lastClick.type == \"singleClick\")\n type = \"doubleClick\";\n else if (view.input.lastClick.type == \"doubleClick\")\n type = \"tripleClick\";\n }\n view.input.lastClick = { time: now, x: event.clientX, y: event.clientY, type, button: event.button };\n let pos = view.posAtCoords(eventCoords(event));\n if (!pos)\n return;\n if (type == \"singleClick\") {\n if (view.input.mouseDown)\n view.input.mouseDown.done();\n view.input.mouseDown = new MouseDown(view, pos, event, !!flushed);\n }\n else if ((type == \"doubleClick\" ? handleDoubleClick : handleTripleClick)(view, pos.pos, pos.inside, event)) {\n event.preventDefault();\n }\n else {\n setSelectionOrigin(view, \"pointer\");\n }\n};\nclass MouseDown {\n constructor(view, pos, event, flushed) {\n this.view = view;\n this.pos = pos;\n this.event = event;\n this.flushed = flushed;\n this.delayedSelectionSync = false;\n this.mightDrag = null;\n this.startDoc = view.state.doc;\n this.selectNode = !!event[selectNodeModifier];\n this.allowDefault = event.shiftKey;\n let targetNode, targetPos;\n if (pos.inside > -1) {\n targetNode = view.state.doc.nodeAt(pos.inside);\n targetPos = pos.inside;\n }\n else {\n let $pos = view.state.doc.resolve(pos.pos);\n targetNode = $pos.parent;\n targetPos = $pos.depth ? $pos.before() : 0;\n }\n const target = flushed ? null : event.target;\n const targetDesc = target ? view.docView.nearestDesc(target, true) : null;\n this.target = targetDesc && targetDesc.nodeDOM.nodeType == 1 ? targetDesc.nodeDOM : null;\n let { selection } = view.state;\n if (event.button == 0 &&\n targetNode.type.spec.draggable && targetNode.type.spec.selectable !== false ||\n selection instanceof NodeSelection && selection.from <= targetPos && selection.to > targetPos)\n this.mightDrag = {\n node: targetNode,\n pos: targetPos,\n addAttr: !!(this.target && !this.target.draggable),\n setUneditable: !!(this.target && gecko && !this.target.hasAttribute(\"contentEditable\"))\n };\n if (this.target && this.mightDrag && (this.mightDrag.addAttr || this.mightDrag.setUneditable)) {\n this.view.domObserver.stop();\n if (this.mightDrag.addAttr)\n this.target.draggable = true;\n if (this.mightDrag.setUneditable)\n setTimeout(() => {\n if (this.view.input.mouseDown == this)\n this.target.setAttribute(\"contentEditable\", \"false\");\n }, 20);\n this.view.domObserver.start();\n }\n view.root.addEventListener(\"mouseup\", this.up = this.up.bind(this));\n view.root.addEventListener(\"mousemove\", this.move = this.move.bind(this));\n setSelectionOrigin(view, \"pointer\");\n }\n done() {\n this.view.root.removeEventListener(\"mouseup\", this.up);\n this.view.root.removeEventListener(\"mousemove\", this.move);\n if (this.mightDrag && this.target) {\n this.view.domObserver.stop();\n if (this.mightDrag.addAttr)\n this.target.removeAttribute(\"draggable\");\n if (this.mightDrag.setUneditable)\n this.target.removeAttribute(\"contentEditable\");\n this.view.domObserver.start();\n }\n if (this.delayedSelectionSync)\n setTimeout(() => selectionToDOM(this.view));\n this.view.input.mouseDown = null;\n }\n up(event) {\n this.done();\n if (!this.view.dom.contains(event.target))\n return;\n let pos = this.pos;\n if (this.view.state.doc != this.startDoc)\n pos = this.view.posAtCoords(eventCoords(event));\n this.updateAllowDefault(event);\n if (this.allowDefault || !pos) {\n setSelectionOrigin(this.view, \"pointer\");\n }\n else if (handleSingleClick(this.view, pos.pos, pos.inside, event, this.selectNode)) {\n event.preventDefault();\n }\n else if (event.button == 0 &&\n (this.flushed ||\n // Safari ignores clicks on draggable elements\n (safari && this.mightDrag && !this.mightDrag.node.isAtom) ||\n // Chrome will sometimes treat a node selection as a\n // cursor, but still report that the node is selected\n // when asked through getSelection. You'll then get a\n // situation where clicking at the point where that\n // (hidden) cursor is doesn't change the selection, and\n // thus doesn't get a reaction from ProseMirror. This\n // works around that.\n (chrome && !this.view.state.selection.visible &&\n Math.min(Math.abs(pos.pos - this.view.state.selection.from), Math.abs(pos.pos - this.view.state.selection.to)) <= 2))) {\n updateSelection(this.view, Selection.near(this.view.state.doc.resolve(pos.pos)), \"pointer\");\n event.preventDefault();\n }\n else {\n setSelectionOrigin(this.view, \"pointer\");\n }\n }\n move(event) {\n this.updateAllowDefault(event);\n setSelectionOrigin(this.view, \"pointer\");\n if (event.buttons == 0)\n this.done();\n }\n updateAllowDefault(event) {\n if (!this.allowDefault && (Math.abs(this.event.x - event.clientX) > 4 ||\n Math.abs(this.event.y - event.clientY) > 4))\n this.allowDefault = true;\n }\n}\nhandlers.touchstart = view => {\n view.input.lastTouch = Date.now();\n forceDOMFlush(view);\n setSelectionOrigin(view, \"pointer\");\n};\nhandlers.touchmove = view => {\n view.input.lastTouch = Date.now();\n setSelectionOrigin(view, \"pointer\");\n};\nhandlers.contextmenu = view => forceDOMFlush(view);\nfunction inOrNearComposition(view, event) {\n if (view.composing)\n return true;\n // See https://www.stum.de/2016/06/24/handling-ime-events-in-javascript/.\n // On Japanese input method editors (IMEs), the Enter key is used to confirm character\n // selection. On Safari, when Enter is pressed, compositionend and keydown events are\n // emitted. The keydown event triggers newline insertion, which we don't want.\n // This method returns true if the keydown event should be ignored.\n // We only ignore it once, as pressing Enter a second time *should* insert a newline.\n // Furthermore, the keydown event timestamp must be close to the compositionEndedAt timestamp.\n // This guards against the case where compositionend is triggered without the keyboard\n // (e.g. character confirmation may be done with the mouse), and keydown is triggered\n // afterwards- we wouldn't want to ignore the keydown event in this case.\n if (safari && Math.abs(event.timeStamp - view.input.compositionEndedAt) < 500) {\n view.input.compositionEndedAt = -2e8;\n return true;\n }\n return false;\n}\n// Drop active composition after 5 seconds of inactivity on Android\nconst timeoutComposition = android ? 5000 : -1;\neditHandlers.compositionstart = editHandlers.compositionupdate = view => {\n if (!view.composing) {\n view.domObserver.flush();\n let { state } = view, $pos = state.selection.$to;\n if (state.selection instanceof TextSelection &&\n (state.storedMarks ||\n (!$pos.textOffset && $pos.parentOffset && $pos.nodeBefore.marks.some(m => m.type.spec.inclusive === false)) ||\n chrome && windows && selectionBeforeUneditable(view))) { // Issue #1500\n // Need to wrap the cursor in mark nodes different from the ones in the DOM context\n view.markCursor = view.state.storedMarks || $pos.marks();\n endComposition(view, true);\n view.markCursor = null;\n }\n else {\n endComposition(view, !state.selection.empty);\n // In firefox, if the cursor is after but outside a marked node,\n // the inserted text won't inherit the marks. So this moves it\n // inside if necessary.\n if (gecko && state.selection.empty && $pos.parentOffset && !$pos.textOffset && $pos.nodeBefore.marks.length) {\n let sel = view.domSelectionRange();\n for (let node = sel.focusNode, offset = sel.focusOffset; node && node.nodeType == 1 && offset != 0;) {\n let before = offset < 0 ? node.lastChild : node.childNodes[offset - 1];\n if (!before)\n break;\n if (before.nodeType == 3) {\n let sel = view.domSelection();\n if (sel)\n sel.collapse(before, before.nodeValue.length);\n break;\n }\n else {\n node = before;\n offset = -1;\n }\n }\n }\n }\n view.input.composing = true;\n }\n scheduleComposeEnd(view, timeoutComposition);\n};\nfunction selectionBeforeUneditable(view) {\n let { focusNode, focusOffset } = view.domSelectionRange();\n if (!focusNode || focusNode.nodeType != 1 || focusOffset >= focusNode.childNodes.length)\n return false;\n let next = focusNode.childNodes[focusOffset];\n return next.nodeType == 1 && next.contentEditable == \"false\";\n}\neditHandlers.compositionend = (view, event) => {\n if (view.composing) {\n view.input.composing = false;\n view.input.compositionEndedAt = event.timeStamp;\n view.input.compositionPendingChanges = view.domObserver.pendingRecords().length ? view.input.compositionID : 0;\n view.input.compositionNode = null;\n if (view.input.badSafariComposition)\n view.domObserver.forceFlush();\n else if (view.input.compositionPendingChanges)\n Promise.resolve().then(() => view.domObserver.flush());\n view.input.compositionID++;\n scheduleComposeEnd(view, 20);\n }\n};\nfunction scheduleComposeEnd(view, delay) {\n clearTimeout(view.input.composingTimeout);\n if (delay > -1)\n view.input.composingTimeout = setTimeout(() => endComposition(view), delay);\n}\nfunction clearComposition(view) {\n if (view.composing) {\n view.input.composing = false;\n view.input.compositionEndedAt = timestampFromCustomEvent();\n }\n while (view.input.compositionNodes.length > 0)\n view.input.compositionNodes.pop().markParentsDirty();\n}\nfunction findCompositionNode(view) {\n let sel = view.domSelectionRange();\n if (!sel.focusNode)\n return null;\n let textBefore = textNodeBefore$1(sel.focusNode, sel.focusOffset);\n let textAfter = textNodeAfter$1(sel.focusNode, sel.focusOffset);\n if (textBefore && textAfter && textBefore != textAfter) {\n let descAfter = textAfter.pmViewDesc, lastChanged = view.domObserver.lastChangedTextNode;\n if (textBefore == lastChanged || textAfter == lastChanged)\n return lastChanged;\n if (!descAfter || !descAfter.isText(textAfter.nodeValue)) {\n return textAfter;\n }\n else if (view.input.compositionNode == textAfter) {\n let descBefore = textBefore.pmViewDesc;\n if (!(!descBefore || !descBefore.isText(textBefore.nodeValue)))\n return textAfter;\n }\n }\n return textBefore || textAfter;\n}\nfunction timestampFromCustomEvent() {\n let event = document.createEvent(\"Event\");\n event.initEvent(\"event\", true, true);\n return event.timeStamp;\n}\n/**\n@internal\n*/\nfunction endComposition(view, restarting = false) {\n if (android && view.domObserver.flushingSoon >= 0)\n return;\n view.domObserver.forceFlush();\n clearComposition(view);\n if (restarting || view.docView && view.docView.dirty) {\n let sel = selectionFromDOM(view), cur = view.state.selection;\n if (sel && !sel.eq(cur))\n view.dispatch(view.state.tr.setSelection(sel));\n else if ((view.markCursor || restarting) && !cur.$from.node(cur.$from.sharedDepth(cur.to)).inlineContent)\n view.dispatch(view.state.tr.deleteSelection());\n else\n view.updateState(view.state);\n return true;\n }\n return false;\n}\nfunction captureCopy(view, dom) {\n // The extra wrapper is somehow necessary on IE/Edge to prevent the\n // content from being mangled when it is put onto the clipboard\n if (!view.dom.parentNode)\n return;\n let wrap = view.dom.parentNode.appendChild(document.createElement(\"div\"));\n wrap.appendChild(dom);\n wrap.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n let sel = getSelection(), range = document.createRange();\n range.selectNodeContents(dom);\n // Done because IE will fire a selectionchange moving the selection\n // to its start when removeAllRanges is called and the editor still\n // has focus (which will mess up the editor's selection state).\n view.dom.blur();\n sel.removeAllRanges();\n sel.addRange(range);\n setTimeout(() => {\n if (wrap.parentNode)\n wrap.parentNode.removeChild(wrap);\n view.focus();\n }, 50);\n}\n// This is very crude, but unfortunately both these browsers _pretend_\n// that they have a clipboard API—all the objects and methods are\n// there, they just don't work, and they are hard to test.\nconst brokenClipboardAPI = (ie && ie_version < 15) ||\n (ios && webkit_version < 604);\nhandlers.copy = editHandlers.cut = (view, _event) => {\n let event = _event;\n let sel = view.state.selection, cut = event.type == \"cut\";\n if (sel.empty)\n return;\n // IE and Edge's clipboard interface is completely broken\n let data = brokenClipboardAPI ? null : event.clipboardData;\n let slice = sel.content(), { dom, text } = serializeForClipboard(view, slice);\n if (data) {\n event.preventDefault();\n data.clearData();\n data.setData(\"text/html\", dom.innerHTML);\n data.setData(\"text/plain\", text);\n }\n else {\n captureCopy(view, dom);\n }\n if (cut)\n view.dispatch(view.state.tr.deleteSelection().scrollIntoView().setMeta(\"uiEvent\", \"cut\"));\n};\nfunction sliceSingleNode(slice) {\n return slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1 ? slice.content.firstChild : null;\n}\nfunction capturePaste(view, event) {\n if (!view.dom.parentNode)\n return;\n let plainText = view.input.shiftKey || view.state.selection.$from.parent.type.spec.code;\n let target = view.dom.parentNode.appendChild(document.createElement(plainText ? \"textarea\" : \"div\"));\n if (!plainText)\n target.contentEditable = \"true\";\n target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n target.focus();\n let plain = view.input.shiftKey && view.input.lastKeyCode != 45;\n setTimeout(() => {\n view.focus();\n if (target.parentNode)\n target.parentNode.removeChild(target);\n if (plainText)\n doPaste(view, target.value, null, plain, event);\n else\n doPaste(view, target.textContent, target.innerHTML, plain, event);\n }, 50);\n}\nfunction doPaste(view, text, html, preferPlain, event) {\n let slice = parseFromClipboard(view, text, html, preferPlain, view.state.selection.$from);\n if (view.someProp(\"handlePaste\", f => f(view, event, slice || Slice.empty)))\n return true;\n if (!slice)\n return false;\n let singleNode = sliceSingleNode(slice);\n let tr = singleNode\n ? view.state.tr.replaceSelectionWith(singleNode, preferPlain)\n : view.state.tr.replaceSelection(slice);\n view.dispatch(tr.scrollIntoView().setMeta(\"paste\", true).setMeta(\"uiEvent\", \"paste\"));\n return true;\n}\nfunction getText(clipboardData) {\n let text = clipboardData.getData(\"text/plain\") || clipboardData.getData(\"Text\");\n if (text)\n return text;\n let uris = clipboardData.getData(\"text/uri-list\");\n return uris ? uris.replace(/\\r?\\n/g, \" \") : \"\";\n}\neditHandlers.paste = (view, _event) => {\n let event = _event;\n // Handling paste from JavaScript during composition is very poorly\n // handled by browsers, so as a dodgy but preferable kludge, we just\n // let the browser do its native thing there, except on Android,\n // where the editor is almost always composing.\n if (view.composing && !android)\n return;\n let data = brokenClipboardAPI ? null : event.clipboardData;\n let plain = view.input.shiftKey && view.input.lastKeyCode != 45;\n if (data && doPaste(view, getText(data), data.getData(\"text/html\"), plain, event))\n event.preventDefault();\n else\n capturePaste(view, event);\n};\nclass Dragging {\n constructor(slice, move, node) {\n this.slice = slice;\n this.move = move;\n this.node = node;\n }\n}\nconst dragCopyModifier = mac ? \"altKey\" : \"ctrlKey\";\nfunction dragMoves(view, event) {\n let moves = view.someProp(\"dragCopies\", test => !test(event));\n return moves != null ? moves : !event[dragCopyModifier];\n}\nhandlers.dragstart = (view, _event) => {\n let event = _event;\n let mouseDown = view.input.mouseDown;\n if (mouseDown)\n mouseDown.done();\n if (!event.dataTransfer)\n return;\n let sel = view.state.selection;\n let pos = sel.empty ? null : view.posAtCoords(eventCoords(event));\n let node;\n if (pos && pos.pos >= sel.from && pos.pos <= (sel instanceof NodeSelection ? sel.to - 1 : sel.to)) ;\n else if (mouseDown && mouseDown.mightDrag) {\n node = NodeSelection.create(view.state.doc, mouseDown.mightDrag.pos);\n }\n else if (event.target && event.target.nodeType == 1) {\n let desc = view.docView.nearestDesc(event.target, true);\n if (desc && desc.node.type.spec.draggable && desc != view.docView)\n node = NodeSelection.create(view.state.doc, desc.posBefore);\n }\n let draggedSlice = (node || view.state.selection).content();\n let { dom, text, slice } = serializeForClipboard(view, draggedSlice);\n // Pre-120 Chrome versions clear files when calling `clearData` (#1472)\n if (!event.dataTransfer.files.length || !chrome || chrome_version > 120)\n event.dataTransfer.clearData();\n event.dataTransfer.setData(brokenClipboardAPI ? \"Text\" : \"text/html\", dom.innerHTML);\n // See https://github.com/ProseMirror/prosemirror/issues/1156\n event.dataTransfer.effectAllowed = \"copyMove\";\n if (!brokenClipboardAPI)\n event.dataTransfer.setData(\"text/plain\", text);\n view.dragging = new Dragging(slice, dragMoves(view, event), node);\n};\nhandlers.dragend = view => {\n let dragging = view.dragging;\n window.setTimeout(() => {\n if (view.dragging == dragging)\n view.dragging = null;\n }, 50);\n};\neditHandlers.dragover = editHandlers.dragenter = (_, e) => e.preventDefault();\neditHandlers.drop = (view, event) => {\n try {\n handleDrop(view, event, view.dragging);\n }\n finally {\n view.dragging = null;\n }\n};\nfunction handleDrop(view, event, dragging) {\n if (!event.dataTransfer)\n return;\n let eventPos = view.posAtCoords(eventCoords(event));\n if (!eventPos)\n return;\n let $mouse = view.state.doc.resolve(eventPos.pos);\n let slice = dragging && dragging.slice;\n if (slice) {\n view.someProp(\"transformPasted\", f => { slice = f(slice, view, false); });\n }\n else {\n slice = parseFromClipboard(view, getText(event.dataTransfer), brokenClipboardAPI ? null : event.dataTransfer.getData(\"text/html\"), false, $mouse);\n }\n let move = !!(dragging && dragMoves(view, event));\n if (view.someProp(\"handleDrop\", f => f(view, event, slice || Slice.empty, move))) {\n event.preventDefault();\n return;\n }\n if (!slice)\n return;\n event.preventDefault();\n let insertPos = slice ? dropPoint(view.state.doc, $mouse.pos, slice) : $mouse.pos;\n if (insertPos == null)\n insertPos = $mouse.pos;\n let tr = view.state.tr;\n if (move) {\n let { node } = dragging;\n if (node)\n node.replace(tr);\n else\n tr.deleteSelection();\n }\n let pos = tr.mapping.map(insertPos);\n let isNode = slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1;\n let beforeInsert = tr.doc;\n if (isNode)\n tr.replaceRangeWith(pos, pos, slice.content.firstChild);\n else\n tr.replaceRange(pos, pos, slice);\n if (tr.doc.eq(beforeInsert))\n return;\n let $pos = tr.doc.resolve(pos);\n if (isNode && NodeSelection.isSelectable(slice.content.firstChild) &&\n $pos.nodeAfter && $pos.nodeAfter.sameMarkup(slice.content.firstChild)) {\n tr.setSelection(new NodeSelection($pos));\n }\n else {\n let end = tr.mapping.map(insertPos);\n tr.mapping.maps[tr.mapping.maps.length - 1].forEach((_from, _to, _newFrom, newTo) => end = newTo);\n tr.setSelection(selectionBetween(view, $pos, tr.doc.resolve(end)));\n }\n view.focus();\n view.dispatch(tr.setMeta(\"uiEvent\", \"drop\"));\n}\nhandlers.focus = view => {\n view.input.lastFocus = Date.now();\n if (!view.focused) {\n view.domObserver.stop();\n view.dom.classList.add(\"ProseMirror-focused\");\n view.domObserver.start();\n view.focused = true;\n setTimeout(() => {\n if (view.docView && view.hasFocus() && !view.domObserver.currentSelection.eq(view.domSelectionRange()))\n selectionToDOM(view);\n }, 20);\n }\n};\nhandlers.blur = (view, _event) => {\n let event = _event;\n if (view.focused) {\n view.domObserver.stop();\n view.dom.classList.remove(\"ProseMirror-focused\");\n view.domObserver.start();\n if (event.relatedTarget && view.dom.contains(event.relatedTarget))\n view.domObserver.currentSelection.clear();\n view.focused = false;\n }\n};\nhandlers.beforeinput = (view, _event) => {\n let event = _event;\n // We should probably do more with beforeinput events, but support\n // is so spotty that I'm still waiting to see where they are going.\n // Very specific hack to deal with backspace sometimes failing on\n // Chrome Android when after an uneditable node.\n if (chrome && android && event.inputType == \"deleteContentBackward\") {\n view.domObserver.flushSoon();\n let { domChangeCount } = view.input;\n setTimeout(() => {\n if (view.input.domChangeCount != domChangeCount)\n return; // Event already had some effect\n // This bug tends to close the virtual keyboard, so we refocus\n view.dom.blur();\n view.focus();\n if (view.someProp(\"handleKeyDown\", f => f(view, keyEvent(8, \"Backspace\"))))\n return;\n let { $cursor } = view.state.selection;\n // Crude approximation of backspace behavior when no command handled it\n if ($cursor && $cursor.pos > 0)\n view.dispatch(view.state.tr.delete($cursor.pos - 1, $cursor.pos).scrollIntoView());\n }, 50);\n }\n};\n// Make sure all handlers get registered\nfor (let prop in editHandlers)\n handlers[prop] = editHandlers[prop];\n\nfunction compareObjs(a, b) {\n if (a == b)\n return true;\n for (let p in a)\n if (a[p] !== b[p])\n return false;\n for (let p in b)\n if (!(p in a))\n return false;\n return true;\n}\nclass WidgetType {\n constructor(toDOM, spec) {\n this.toDOM = toDOM;\n this.spec = spec || noSpec;\n this.side = this.spec.side || 0;\n }\n map(mapping, span, offset, oldOffset) {\n let { pos, deleted } = mapping.mapResult(span.from + oldOffset, this.side < 0 ? -1 : 1);\n return deleted ? null : new Decoration(pos - offset, pos - offset, this);\n }\n valid() { return true; }\n eq(other) {\n return this == other ||\n (other instanceof WidgetType &&\n (this.spec.key && this.spec.key == other.spec.key ||\n this.toDOM == other.toDOM && compareObjs(this.spec, other.spec)));\n }\n destroy(node) {\n if (this.spec.destroy)\n this.spec.destroy(node);\n }\n}\nclass InlineType {\n constructor(attrs, spec) {\n this.attrs = attrs;\n this.spec = spec || noSpec;\n }\n map(mapping, span, offset, oldOffset) {\n let from = mapping.map(span.from + oldOffset, this.spec.inclusiveStart ? -1 : 1) - offset;\n let to = mapping.map(span.to + oldOffset, this.spec.inclusiveEnd ? 1 : -1) - offset;\n return from >= to ? null : new Decoration(from, to, this);\n }\n valid(_, span) { return span.from < span.to; }\n eq(other) {\n return this == other ||\n (other instanceof InlineType && compareObjs(this.attrs, other.attrs) &&\n compareObjs(this.spec, other.spec));\n }\n static is(span) { return span.type instanceof InlineType; }\n destroy() { }\n}\nclass NodeType {\n constructor(attrs, spec) {\n this.attrs = attrs;\n this.spec = spec || noSpec;\n }\n map(mapping, span, offset, oldOffset) {\n let from = mapping.mapResult(span.from + oldOffset, 1);\n if (from.deleted)\n return null;\n let to = mapping.mapResult(span.to + oldOffset, -1);\n if (to.deleted || to.pos <= from.pos)\n return null;\n return new Decoration(from.pos - offset, to.pos - offset, this);\n }\n valid(node, span) {\n let { index, offset } = node.content.findIndex(span.from), child;\n return offset == span.from && !(child = node.child(index)).isText && offset + child.nodeSize == span.to;\n }\n eq(other) {\n return this == other ||\n (other instanceof NodeType && compareObjs(this.attrs, other.attrs) &&\n compareObjs(this.spec, other.spec));\n }\n destroy() { }\n}\n/**\nDecoration objects can be provided to the view through the\n[`decorations` prop](https://prosemirror.net/docs/ref/#view.EditorProps.decorations). They come in\nseveral variants—see the static members of this class for details.\n*/\nclass Decoration {\n /**\n @internal\n */\n constructor(\n /**\n The start position of the decoration.\n */\n from, \n /**\n The end position. Will be the same as `from` for [widget\n decorations](https://prosemirror.net/docs/ref/#view.Decoration^widget).\n */\n to, \n /**\n @internal\n */\n type) {\n this.from = from;\n this.to = to;\n this.type = type;\n }\n /**\n @internal\n */\n copy(from, to) {\n return new Decoration(from, to, this.type);\n }\n /**\n @internal\n */\n eq(other, offset = 0) {\n return this.type.eq(other.type) && this.from + offset == other.from && this.to + offset == other.to;\n }\n /**\n @internal\n */\n map(mapping, offset, oldOffset) {\n return this.type.map(mapping, this, offset, oldOffset);\n }\n /**\n Creates a widget decoration, which is a DOM node that's shown in\n the document at the given position. It is recommended that you\n delay rendering the widget by passing a function that will be\n called when the widget is actually drawn in a view, but you can\n also directly pass a DOM node. `getPos` can be used to find the\n widget's current document position.\n */\n static widget(pos, toDOM, spec) {\n return new Decoration(pos, pos, new WidgetType(toDOM, spec));\n }\n /**\n Creates an inline decoration, which adds the given attributes to\n each inline node between `from` and `to`.\n */\n static inline(from, to, attrs, spec) {\n return new Decoration(from, to, new InlineType(attrs, spec));\n }\n /**\n Creates a node decoration. `from` and `to` should point precisely\n before and after a node in the document. That node, and only that\n node, will receive the given attributes.\n */\n static node(from, to, attrs, spec) {\n return new Decoration(from, to, new NodeType(attrs, spec));\n }\n /**\n The spec provided when creating this decoration. Can be useful\n if you've stored extra information in that object.\n */\n get spec() { return this.type.spec; }\n /**\n @internal\n */\n get inline() { return this.type instanceof InlineType; }\n /**\n @internal\n */\n get widget() { return this.type instanceof WidgetType; }\n}\nconst none = [], noSpec = {};\n/**\nA collection of [decorations](https://prosemirror.net/docs/ref/#view.Decoration), organized in such\na way that the drawing algorithm can efficiently use and compare\nthem. This is a persistent data structure—it is not modified,\nupdates create a new value.\n*/\nclass DecorationSet {\n /**\n @internal\n */\n constructor(local, children) {\n this.local = local.length ? local : none;\n this.children = children.length ? children : none;\n }\n /**\n Create a set of decorations, using the structure of the given\n document. This will consume (modify) the `decorations` array, so\n you must make a copy if you want need to preserve that.\n */\n static create(doc, decorations) {\n return decorations.length ? buildTree(decorations, doc, 0, noSpec) : empty;\n }\n /**\n Find all decorations in this set which touch the given range\n (including decorations that start or end directly at the\n boundaries) and match the given predicate on their spec. When\n `start` and `end` are omitted, all decorations in the set are\n considered. When `predicate` isn't given, all decorations are\n assumed to match.\n */\n find(start, end, predicate) {\n let result = [];\n this.findInner(start == null ? 0 : start, end == null ? 1e9 : end, result, 0, predicate);\n return result;\n }\n findInner(start, end, result, offset, predicate) {\n for (let i = 0; i < this.local.length; i++) {\n let span = this.local[i];\n if (span.from <= end && span.to >= start && (!predicate || predicate(span.spec)))\n result.push(span.copy(span.from + offset, span.to + offset));\n }\n for (let i = 0; i < this.children.length; i += 3) {\n if (this.children[i] < end && this.children[i + 1] > start) {\n let childOff = this.children[i] + 1;\n this.children[i + 2].findInner(start - childOff, end - childOff, result, offset + childOff, predicate);\n }\n }\n }\n /**\n Map the set of decorations in response to a change in the\n document.\n */\n map(mapping, doc, options) {\n if (this == empty || mapping.maps.length == 0)\n return this;\n return this.mapInner(mapping, doc, 0, 0, options || noSpec);\n }\n /**\n @internal\n */\n mapInner(mapping, node, offset, oldOffset, options) {\n let newLocal;\n for (let i = 0; i < this.local.length; i++) {\n let mapped = this.local[i].map(mapping, offset, oldOffset);\n if (mapped && mapped.type.valid(node, mapped))\n (newLocal || (newLocal = [])).push(mapped);\n else if (options.onRemove)\n options.onRemove(this.local[i].spec);\n }\n if (this.children.length)\n return mapChildren(this.children, newLocal || [], mapping, node, offset, oldOffset, options);\n else\n return newLocal ? new DecorationSet(newLocal.sort(byPos), none) : empty;\n }\n /**\n Add the given array of decorations to the ones in the set,\n producing a new set. Consumes the `decorations` array. Needs\n access to the current document to create the appropriate tree\n structure.\n */\n add(doc, decorations) {\n if (!decorations.length)\n return this;\n if (this == empty)\n return DecorationSet.create(doc, decorations);\n return this.addInner(doc, decorations, 0);\n }\n addInner(doc, decorations, offset) {\n let children, childIndex = 0;\n doc.forEach((childNode, childOffset) => {\n let baseOffset = childOffset + offset, found;\n if (!(found = takeSpansForNode(decorations, childNode, baseOffset)))\n return;\n if (!children)\n children = this.children.slice();\n while (childIndex < children.length && children[childIndex] < childOffset)\n childIndex += 3;\n if (children[childIndex] == childOffset)\n children[childIndex + 2] = children[childIndex + 2].addInner(childNode, found, baseOffset + 1);\n else\n children.splice(childIndex, 0, childOffset, childOffset + childNode.nodeSize, buildTree(found, childNode, baseOffset + 1, noSpec));\n childIndex += 3;\n });\n let local = moveSpans(childIndex ? withoutNulls(decorations) : decorations, -offset);\n for (let i = 0; i < local.length; i++)\n if (!local[i].type.valid(doc, local[i]))\n local.splice(i--, 1);\n return new DecorationSet(local.length ? this.local.concat(local).sort(byPos) : this.local, children || this.children);\n }\n /**\n Create a new set that contains the decorations in this set, minus\n the ones in the given array.\n */\n remove(decorations) {\n if (decorations.length == 0 || this == empty)\n return this;\n return this.removeInner(decorations, 0);\n }\n removeInner(decorations, offset) {\n let children = this.children, local = this.local;\n for (let i = 0; i < children.length; i += 3) {\n let found;\n let from = children[i] + offset, to = children[i + 1] + offset;\n for (let j = 0, span; j < decorations.length; j++)\n if (span = decorations[j]) {\n if (span.from > from && span.to < to) {\n decorations[j] = null;\n (found || (found = [])).push(span);\n }\n }\n if (!found)\n continue;\n if (children == this.children)\n children = this.children.slice();\n let removed = children[i + 2].removeInner(found, from + 1);\n if (removed != empty) {\n children[i + 2] = removed;\n }\n else {\n children.splice(i, 3);\n i -= 3;\n }\n }\n if (local.length)\n for (let i = 0, span; i < decorations.length; i++)\n if (span = decorations[i]) {\n for (let j = 0; j < local.length; j++)\n if (local[j].eq(span, offset)) {\n if (local == this.local)\n local = this.local.slice();\n local.splice(j--, 1);\n }\n }\n if (children == this.children && local == this.local)\n return this;\n return local.length || children.length ? new DecorationSet(local, children) : empty;\n }\n forChild(offset, node) {\n if (this == empty)\n return this;\n if (node.isLeaf)\n return DecorationSet.empty;\n let child, local;\n for (let i = 0; i < this.children.length; i += 3)\n if (this.children[i] >= offset) {\n if (this.children[i] == offset)\n child = this.children[i + 2];\n break;\n }\n let start = offset + 1, end = start + node.content.size;\n for (let i = 0; i < this.local.length; i++) {\n let dec = this.local[i];\n if (dec.from < end && dec.to > start && (dec.type instanceof InlineType)) {\n let from = Math.max(start, dec.from) - start, to = Math.min(end, dec.to) - start;\n if (from < to)\n (local || (local = [])).push(dec.copy(from, to));\n }\n }\n if (local) {\n let localSet = new DecorationSet(local.sort(byPos), none);\n return child ? new DecorationGroup([localSet, child]) : localSet;\n }\n return child || empty;\n }\n /**\n @internal\n */\n eq(other) {\n if (this == other)\n return true;\n if (!(other instanceof DecorationSet) ||\n this.local.length != other.local.length ||\n this.children.length != other.children.length)\n return false;\n for (let i = 0; i < this.local.length; i++)\n if (!this.local[i].eq(other.local[i]))\n return false;\n for (let i = 0; i < this.children.length; i += 3)\n if (this.children[i] != other.children[i] ||\n this.children[i + 1] != other.children[i + 1] ||\n !this.children[i + 2].eq(other.children[i + 2]))\n return false;\n return true;\n }\n /**\n @internal\n */\n locals(node) {\n return removeOverlap(this.localsInner(node));\n }\n /**\n @internal\n */\n localsInner(node) {\n if (this == empty)\n return none;\n if (node.inlineContent || !this.local.some(InlineType.is))\n return this.local;\n let result = [];\n for (let i = 0; i < this.local.length; i++) {\n if (!(this.local[i].type instanceof InlineType))\n result.push(this.local[i]);\n }\n return result;\n }\n forEachSet(f) { f(this); }\n}\n/**\nThe empty set of decorations.\n*/\nDecorationSet.empty = new DecorationSet([], []);\n/**\n@internal\n*/\nDecorationSet.removeOverlap = removeOverlap;\nconst empty = DecorationSet.empty;\n// An abstraction that allows the code dealing with decorations to\n// treat multiple DecorationSet objects as if it were a single object\n// with (a subset of) the same interface.\nclass DecorationGroup {\n constructor(members) {\n this.members = members;\n }\n map(mapping, doc) {\n const mappedDecos = this.members.map(member => member.map(mapping, doc, noSpec));\n return DecorationGroup.from(mappedDecos);\n }\n forChild(offset, child) {\n if (child.isLeaf)\n return DecorationSet.empty;\n let found = [];\n for (let i = 0; i < this.members.length; i++) {\n let result = this.members[i].forChild(offset, child);\n if (result == empty)\n continue;\n if (result instanceof DecorationGroup)\n found = found.concat(result.members);\n else\n found.push(result);\n }\n return DecorationGroup.from(found);\n }\n eq(other) {\n if (!(other instanceof DecorationGroup) ||\n other.members.length != this.members.length)\n return false;\n for (let i = 0; i < this.members.length; i++)\n if (!this.members[i].eq(other.members[i]))\n return false;\n return true;\n }\n locals(node) {\n let result, sorted = true;\n for (let i = 0; i < this.members.length; i++) {\n let locals = this.members[i].localsInner(node);\n if (!locals.length)\n continue;\n if (!result) {\n result = locals;\n }\n else {\n if (sorted) {\n result = result.slice();\n sorted = false;\n }\n for (let j = 0; j < locals.length; j++)\n result.push(locals[j]);\n }\n }\n return result ? removeOverlap(sorted ? result : result.sort(byPos)) : none;\n }\n // Create a group for the given array of decoration sets, or return\n // a single set when possible.\n static from(members) {\n switch (members.length) {\n case 0: return empty;\n case 1: return members[0];\n default: return new DecorationGroup(members.every(m => m instanceof DecorationSet) ? members :\n members.reduce((r, m) => r.concat(m instanceof DecorationSet ? m : m.members), []));\n }\n }\n forEachSet(f) {\n for (let i = 0; i < this.members.length; i++)\n this.members[i].forEachSet(f);\n }\n}\nfunction mapChildren(oldChildren, newLocal, mapping, node, offset, oldOffset, options) {\n let children = oldChildren.slice();\n // Mark the children that are directly touched by changes, and\n // move those that are after the changes.\n for (let i = 0, baseOffset = oldOffset; i < mapping.maps.length; i++) {\n let moved = 0;\n mapping.maps[i].forEach((oldStart, oldEnd, newStart, newEnd) => {\n let dSize = (newEnd - newStart) - (oldEnd - oldStart);\n for (let i = 0; i < children.length; i += 3) {\n let end = children[i + 1];\n if (end < 0 || oldStart > end + baseOffset - moved)\n continue;\n let start = children[i] + baseOffset - moved;\n if (oldEnd >= start) {\n children[i + 1] = oldStart <= start ? -2 : -1;\n }\n else if (oldStart >= baseOffset && dSize) {\n children[i] += dSize;\n children[i + 1] += dSize;\n }\n }\n moved += dSize;\n });\n baseOffset = mapping.maps[i].map(baseOffset, -1);\n }\n // Find the child nodes that still correspond to a single node,\n // recursively call mapInner on them and update their positions.\n let mustRebuild = false;\n for (let i = 0; i < children.length; i += 3)\n if (children[i + 1] < 0) { // Touched nodes\n if (children[i + 1] == -2) {\n mustRebuild = true;\n children[i + 1] = -1;\n continue;\n }\n let from = mapping.map(oldChildren[i] + oldOffset), fromLocal = from - offset;\n if (fromLocal < 0 || fromLocal >= node.content.size) {\n mustRebuild = true;\n continue;\n }\n // Must read oldChildren because children was tagged with -1\n let to = mapping.map(oldChildren[i + 1] + oldOffset, -1), toLocal = to - offset;\n let { index, offset: childOffset } = node.content.findIndex(fromLocal);\n let childNode = node.maybeChild(index);\n if (childNode && childOffset == fromLocal && childOffset + childNode.nodeSize == toLocal) {\n let mapped = children[i + 2]\n .mapInner(mapping, childNode, from + 1, oldChildren[i] + oldOffset + 1, options);\n if (mapped != empty) {\n children[i] = fromLocal;\n children[i + 1] = toLocal;\n children[i + 2] = mapped;\n }\n else {\n children[i + 1] = -2;\n mustRebuild = true;\n }\n }\n else {\n mustRebuild = true;\n }\n }\n // Remaining children must be collected and rebuilt into the appropriate structure\n if (mustRebuild) {\n let decorations = mapAndGatherRemainingDecorations(children, oldChildren, newLocal, mapping, offset, oldOffset, options);\n let built = buildTree(decorations, node, 0, options);\n newLocal = built.local;\n for (let i = 0; i < children.length; i += 3)\n if (children[i + 1] < 0) {\n children.splice(i, 3);\n i -= 3;\n }\n for (let i = 0, j = 0; i < built.children.length; i += 3) {\n let from = built.children[i];\n while (j < children.length && children[j] < from)\n j += 3;\n children.splice(j, 0, built.children[i], built.children[i + 1], built.children[i + 2]);\n }\n }\n return new DecorationSet(newLocal.sort(byPos), children);\n}\nfunction moveSpans(spans, offset) {\n if (!offset || !spans.length)\n return spans;\n let result = [];\n for (let i = 0; i < spans.length; i++) {\n let span = spans[i];\n result.push(new Decoration(span.from + offset, span.to + offset, span.type));\n }\n return result;\n}\nfunction mapAndGatherRemainingDecorations(children, oldChildren, decorations, mapping, offset, oldOffset, options) {\n // Gather all decorations from the remaining marked children\n function gather(set, oldOffset) {\n for (let i = 0; i < set.local.length; i++) {\n let mapped = set.local[i].map(mapping, offset, oldOffset);\n if (mapped)\n decorations.push(mapped);\n else if (options.onRemove)\n options.onRemove(set.local[i].spec);\n }\n for (let i = 0; i < set.children.length; i += 3)\n gather(set.children[i + 2], set.children[i] + oldOffset + 1);\n }\n for (let i = 0; i < children.length; i += 3)\n if (children[i + 1] == -1)\n gather(children[i + 2], oldChildren[i] + oldOffset + 1);\n return decorations;\n}\nfunction takeSpansForNode(spans, node, offset) {\n if (node.isLeaf)\n return null;\n let end = offset + node.nodeSize, found = null;\n for (let i = 0, span; i < spans.length; i++) {\n if ((span = spans[i]) && span.from > offset && span.to < end) {\n (found || (found = [])).push(span);\n spans[i] = null;\n }\n }\n return found;\n}\nfunction withoutNulls(array) {\n let result = [];\n for (let i = 0; i < array.length; i++)\n if (array[i] != null)\n result.push(array[i]);\n return result;\n}\n// Build up a tree that corresponds to a set of decorations. `offset`\n// is a base offset that should be subtracted from the `from` and `to`\n// positions in the spans (so that we don't have to allocate new spans\n// for recursive calls).\nfunction buildTree(spans, node, offset, options) {\n let children = [], hasNulls = false;\n node.forEach((childNode, localStart) => {\n let found = takeSpansForNode(spans, childNode, localStart + offset);\n if (found) {\n hasNulls = true;\n let subtree = buildTree(found, childNode, offset + localStart + 1, options);\n if (subtree != empty)\n children.push(localStart, localStart + childNode.nodeSize, subtree);\n }\n });\n let locals = moveSpans(hasNulls ? withoutNulls(spans) : spans, -offset).sort(byPos);\n for (let i = 0; i < locals.length; i++)\n if (!locals[i].type.valid(node, locals[i])) {\n if (options.onRemove)\n options.onRemove(locals[i].spec);\n locals.splice(i--, 1);\n }\n return locals.length || children.length ? new DecorationSet(locals, children) : empty;\n}\n// Used to sort decorations so that ones with a low start position\n// come first, and within a set with the same start position, those\n// with an smaller end position come first.\nfunction byPos(a, b) {\n return a.from - b.from || a.to - b.to;\n}\n// Scan a sorted array of decorations for partially overlapping spans,\n// and split those so that only fully overlapping spans are left (to\n// make subsequent rendering easier). Will return the input array if\n// no partially overlapping spans are found (the common case).\nfunction removeOverlap(spans) {\n let working = spans;\n for (let i = 0; i < working.length - 1; i++) {\n let span = working[i];\n if (span.from != span.to)\n for (let j = i + 1; j < working.length; j++) {\n let next = working[j];\n if (next.from == span.from) {\n if (next.to != span.to) {\n if (working == spans)\n working = spans.slice();\n // Followed by a partially overlapping larger span. Split that\n // span.\n working[j] = next.copy(next.from, span.to);\n insertAhead(working, j + 1, next.copy(span.to, next.to));\n }\n continue;\n }\n else {\n if (next.from < span.to) {\n if (working == spans)\n working = spans.slice();\n // The end of this one overlaps with a subsequent span. Split\n // this one.\n working[i] = span.copy(span.from, next.from);\n insertAhead(working, j, span.copy(next.from, span.to));\n }\n break;\n }\n }\n }\n return working;\n}\nfunction insertAhead(array, i, deco) {\n while (i < array.length && byPos(deco, array[i]) > 0)\n i++;\n array.splice(i, 0, deco);\n}\n// Get the decorations associated with the current props of a view.\nfunction viewDecorations(view) {\n let found = [];\n view.someProp(\"decorations\", f => {\n let result = f(view.state);\n if (result && result != empty)\n found.push(result);\n });\n if (view.cursorWrapper)\n found.push(DecorationSet.create(view.state.doc, [view.cursorWrapper.deco]));\n return DecorationGroup.from(found);\n}\n\nconst observeOptions = {\n childList: true,\n characterData: true,\n characterDataOldValue: true,\n attributes: true,\n attributeOldValue: true,\n subtree: true\n};\n// IE11 has very broken mutation observers, so we also listen to DOMCharacterDataModified\nconst useCharData = ie && ie_version <= 11;\nclass SelectionState {\n constructor() {\n this.anchorNode = null;\n this.anchorOffset = 0;\n this.focusNode = null;\n this.focusOffset = 0;\n }\n set(sel) {\n this.anchorNode = sel.anchorNode;\n this.anchorOffset = sel.anchorOffset;\n this.focusNode = sel.focusNode;\n this.focusOffset = sel.focusOffset;\n }\n clear() {\n this.anchorNode = this.focusNode = null;\n }\n eq(sel) {\n return sel.anchorNode == this.anchorNode && sel.anchorOffset == this.anchorOffset &&\n sel.focusNode == this.focusNode && sel.focusOffset == this.focusOffset;\n }\n}\nclass DOMObserver {\n constructor(view, handleDOMChange) {\n this.view = view;\n this.handleDOMChange = handleDOMChange;\n this.queue = [];\n this.flushingSoon = -1;\n this.observer = null;\n this.currentSelection = new SelectionState;\n this.onCharData = null;\n this.suppressingSelectionUpdates = false;\n this.lastChangedTextNode = null;\n this.observer = window.MutationObserver &&\n new window.MutationObserver(mutations => {\n for (let i = 0; i < mutations.length; i++)\n this.queue.push(mutations[i]);\n if (ie && ie_version <= 11 && mutations.some(m => m.type == \"childList\" && m.removedNodes.length ||\n m.type == \"characterData\" && m.oldValue.length > m.target.nodeValue.length)) {\n // IE11 will sometimes (on backspacing out a single character\n // text node after a BR node) call the observer callback\n // before actually updating the DOM, which will cause\n // ProseMirror to miss the change (see #930)\n this.flushSoon();\n }\n else if (safari && view.composing && mutations.some(m => m.type == \"childList\" && m.target.nodeName == \"TR\")) {\n // Safari does weird stuff when finishing a composition in a\n // table cell, which tends to involve inserting inappropriate\n // nodes in the table row.\n view.input.badSafariComposition = true;\n this.flushSoon();\n }\n else {\n this.flush();\n }\n });\n if (useCharData) {\n this.onCharData = e => {\n this.queue.push({ target: e.target, type: \"characterData\", oldValue: e.prevValue });\n this.flushSoon();\n };\n }\n this.onSelectionChange = this.onSelectionChange.bind(this);\n }\n flushSoon() {\n if (this.flushingSoon < 0)\n this.flushingSoon = window.setTimeout(() => { this.flushingSoon = -1; this.flush(); }, 20);\n }\n forceFlush() {\n if (this.flushingSoon > -1) {\n window.clearTimeout(this.flushingSoon);\n this.flushingSoon = -1;\n this.flush();\n }\n }\n start() {\n if (this.observer) {\n this.observer.takeRecords();\n this.observer.observe(this.view.dom, observeOptions);\n }\n if (this.onCharData)\n this.view.dom.addEventListener(\"DOMCharacterDataModified\", this.onCharData);\n this.connectSelection();\n }\n stop() {\n if (this.observer) {\n let take = this.observer.takeRecords();\n if (take.length) {\n for (let i = 0; i < take.length; i++)\n this.queue.push(take[i]);\n window.setTimeout(() => this.flush(), 20);\n }\n this.observer.disconnect();\n }\n if (this.onCharData)\n this.view.dom.removeEventListener(\"DOMCharacterDataModified\", this.onCharData);\n this.disconnectSelection();\n }\n connectSelection() {\n this.view.dom.ownerDocument.addEventListener(\"selectionchange\", this.onSelectionChange);\n }\n disconnectSelection() {\n this.view.dom.ownerDocument.removeEventListener(\"selectionchange\", this.onSelectionChange);\n }\n suppressSelectionUpdates() {\n this.suppressingSelectionUpdates = true;\n setTimeout(() => this.suppressingSelectionUpdates = false, 50);\n }\n onSelectionChange() {\n if (!hasFocusAndSelection(this.view))\n return;\n if (this.suppressingSelectionUpdates)\n return selectionToDOM(this.view);\n // Deletions on IE11 fire their events in the wrong order, giving\n // us a selection change event before the DOM changes are\n // reported.\n if (ie && ie_version <= 11 && !this.view.state.selection.empty) {\n let sel = this.view.domSelectionRange();\n // Selection.isCollapsed isn't reliable on IE\n if (sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset))\n return this.flushSoon();\n }\n this.flush();\n }\n setCurSelection() {\n this.currentSelection.set(this.view.domSelectionRange());\n }\n ignoreSelectionChange(sel) {\n if (!sel.focusNode)\n return true;\n let ancestors = new Set, container;\n for (let scan = sel.focusNode; scan; scan = parentNode(scan))\n ancestors.add(scan);\n for (let scan = sel.anchorNode; scan; scan = parentNode(scan))\n if (ancestors.has(scan)) {\n container = scan;\n break;\n }\n let desc = container && this.view.docView.nearestDesc(container);\n if (desc && desc.ignoreMutation({\n type: \"selection\",\n target: container.nodeType == 3 ? container.parentNode : container\n })) {\n this.setCurSelection();\n return true;\n }\n }\n pendingRecords() {\n if (this.observer)\n for (let mut of this.observer.takeRecords())\n this.queue.push(mut);\n return this.queue;\n }\n flush() {\n let { view } = this;\n if (!view.docView || this.flushingSoon > -1)\n return;\n let mutations = this.pendingRecords();\n if (mutations.length)\n this.queue = [];\n let sel = view.domSelectionRange();\n let newSel = !this.suppressingSelectionUpdates && !this.currentSelection.eq(sel) && hasFocusAndSelection(view) && !this.ignoreSelectionChange(sel);\n let from = -1, to = -1, typeOver = false, added = [];\n if (view.editable) {\n for (let i = 0; i < mutations.length; i++) {\n let result = this.registerMutation(mutations[i], added);\n if (result) {\n from = from < 0 ? result.from : Math.min(result.from, from);\n to = to < 0 ? result.to : Math.max(result.to, to);\n if (result.typeOver)\n typeOver = true;\n }\n }\n }\n if (gecko && added.length) {\n let brs = added.filter(n => n.nodeName == \"BR\");\n if (brs.length == 2) {\n let [a, b] = brs;\n if (a.parentNode && a.parentNode.parentNode == b.parentNode)\n b.remove();\n else\n a.remove();\n }\n else {\n let { focusNode } = this.currentSelection;\n for (let br of brs) {\n let parent = br.parentNode;\n if (parent && parent.nodeName == \"LI\" && (!focusNode || blockParent(view, focusNode) != parent))\n br.remove();\n }\n }\n }\n else if ((chrome || safari) && added.some(n => n.nodeName == \"BR\") &&\n (view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46)) {\n // Chrome/Safari sometimes insert a bogus break node if you\n // backspace out the last bit of text before an inline-flex node (#1552)\n for (let node of added)\n if (node.nodeName == \"BR\" && node.parentNode) {\n let after = node.nextSibling;\n if (after && after.nodeType == 1 && after.contentEditable == \"false\")\n node.parentNode.removeChild(node);\n }\n }\n let readSel = null;\n // If it looks like the browser has reset the selection to the\n // start of the document after focus, restore the selection from\n // the state\n if (from < 0 && newSel && view.input.lastFocus > Date.now() - 200 &&\n Math.max(view.input.lastTouch, view.input.lastClick.time) < Date.now() - 300 &&\n selectionCollapsed(sel) && (readSel = selectionFromDOM(view)) &&\n readSel.eq(Selection.near(view.state.doc.resolve(0), 1))) {\n view.input.lastFocus = 0;\n selectionToDOM(view);\n this.currentSelection.set(sel);\n view.scrollToSelection();\n }\n else if (from > -1 || newSel) {\n if (from > -1) {\n view.docView.markDirty(from, to);\n checkCSS(view);\n }\n if (view.input.badSafariComposition) {\n view.input.badSafariComposition = false;\n fixUpBadSafariComposition(view, added);\n }\n this.handleDOMChange(from, to, typeOver, added);\n if (view.docView && view.docView.dirty)\n view.updateState(view.state);\n else if (!this.currentSelection.eq(sel))\n selectionToDOM(view);\n this.currentSelection.set(sel);\n }\n }\n registerMutation(mut, added) {\n // Ignore mutations inside nodes that were already noted as inserted\n if (added.indexOf(mut.target) > -1)\n return null;\n let desc = this.view.docView.nearestDesc(mut.target);\n if (mut.type == \"attributes\" &&\n (desc == this.view.docView || mut.attributeName == \"contenteditable\" ||\n // Firefox sometimes fires spurious events for null/empty styles\n (mut.attributeName == \"style\" && !mut.oldValue && !mut.target.getAttribute(\"style\"))))\n return null;\n if (!desc || desc.ignoreMutation(mut))\n return null;\n if (mut.type == \"childList\") {\n for (let i = 0; i < mut.addedNodes.length; i++) {\n let node = mut.addedNodes[i];\n added.push(node);\n if (node.nodeType == 3)\n this.lastChangedTextNode = node;\n }\n if (desc.contentDOM && desc.contentDOM != desc.dom && !desc.contentDOM.contains(mut.target))\n return { from: desc.posBefore, to: desc.posAfter };\n let prev = mut.previousSibling, next = mut.nextSibling;\n if (ie && ie_version <= 11 && mut.addedNodes.length) {\n // IE11 gives us incorrect next/prev siblings for some\n // insertions, so if there are added nodes, recompute those\n for (let i = 0; i < mut.addedNodes.length; i++) {\n let { previousSibling, nextSibling } = mut.addedNodes[i];\n if (!previousSibling || Array.prototype.indexOf.call(mut.addedNodes, previousSibling) < 0)\n prev = previousSibling;\n if (!nextSibling || Array.prototype.indexOf.call(mut.addedNodes, nextSibling) < 0)\n next = nextSibling;\n }\n }\n let fromOffset = prev && prev.parentNode == mut.target\n ? domIndex(prev) + 1 : 0;\n let from = desc.localPosFromDOM(mut.target, fromOffset, -1);\n let toOffset = next && next.parentNode == mut.target\n ? domIndex(next) : mut.target.childNodes.length;\n let to = desc.localPosFromDOM(mut.target, toOffset, 1);\n return { from, to };\n }\n else if (mut.type == \"attributes\") {\n return { from: desc.posAtStart - desc.border, to: desc.posAtEnd + desc.border };\n }\n else { // \"characterData\"\n this.lastChangedTextNode = mut.target;\n return {\n from: desc.posAtStart,\n to: desc.posAtEnd,\n // An event was generated for a text change that didn't change\n // any text. Mark the dom change to fall back to assuming the\n // selection was typed over with an identical value if it can't\n // find another change.\n typeOver: mut.target.nodeValue == mut.oldValue\n };\n }\n }\n}\nlet cssChecked = new WeakMap();\nlet cssCheckWarned = false;\nfunction checkCSS(view) {\n if (cssChecked.has(view))\n return;\n cssChecked.set(view, null);\n if (['normal', 'nowrap', 'pre-line'].indexOf(getComputedStyle(view.dom).whiteSpace) !== -1) {\n view.requiresGeckoHackNode = gecko;\n if (cssCheckWarned)\n return;\n 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.\");\n cssCheckWarned = true;\n }\n}\nfunction rangeToSelectionRange(view, range) {\n let anchorNode = range.startContainer, anchorOffset = range.startOffset;\n let focusNode = range.endContainer, focusOffset = range.endOffset;\n let currentAnchor = view.domAtPos(view.state.selection.anchor);\n // Since such a range doesn't distinguish between anchor and head,\n // use a heuristic that flips it around if its end matches the\n // current anchor.\n if (isEquivalentPosition(currentAnchor.node, currentAnchor.offset, focusNode, focusOffset))\n [anchorNode, anchorOffset, focusNode, focusOffset] = [focusNode, focusOffset, anchorNode, anchorOffset];\n return { anchorNode, anchorOffset, focusNode, focusOffset };\n}\n// Used to work around a Safari Selection/shadow DOM bug\n// Based on https://github.com/codemirror/dev/issues/414 fix\nfunction safariShadowSelectionRange(view, selection) {\n if (selection.getComposedRanges) {\n let range = selection.getComposedRanges(view.root)[0];\n if (range)\n return rangeToSelectionRange(view, range);\n }\n let found;\n function read(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n found = event.getTargetRanges()[0];\n }\n // Because Safari (at least in 2018-2022) doesn't provide regular\n // access to the selection inside a shadowRoot, we have to perform a\n // ridiculous hack to get at it—using `execCommand` to trigger a\n // `beforeInput` event so that we can read the target range from the\n // event.\n view.dom.addEventListener(\"beforeinput\", read, true);\n document.execCommand(\"indent\");\n view.dom.removeEventListener(\"beforeinput\", read, true);\n return found ? rangeToSelectionRange(view, found) : null;\n}\nfunction blockParent(view, node) {\n for (let p = node.parentNode; p && p != view.dom; p = p.parentNode) {\n let desc = view.docView.nearestDesc(p, true);\n if (desc && desc.node.isBlock)\n return p;\n }\n return null;\n}\n// Kludge for a Safari bug where, on ending a composition in an\n// otherwise empty table cell, it randomly moves the composed text\n// into the table row around that cell, greatly confusing everything\n// (#188).\nfunction fixUpBadSafariComposition(view, addedNodes) {\n var _a;\n let { focusNode, focusOffset } = view.domSelectionRange();\n for (let node of addedNodes) {\n if (((_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.nodeName) == \"TR\") {\n let nextCell = node.nextSibling;\n while (nextCell && (nextCell.nodeName != \"TD\" && nextCell.nodeName != \"TH\"))\n nextCell = nextCell.nextSibling;\n if (nextCell) {\n let parent = nextCell;\n for (;;) {\n let first = parent.firstChild;\n if (!first || first.nodeType != 1 || first.contentEditable == \"false\" ||\n /^(BR|IMG)$/.test(first.nodeName))\n break;\n parent = first;\n }\n parent.insertBefore(node, parent.firstChild);\n if (focusNode == node)\n view.domSelection().collapse(node, focusOffset);\n }\n else {\n node.parentNode.removeChild(node);\n }\n }\n }\n}\n\n// Note that all referencing and parsing is done with the\n// start-of-operation selection and document, since that's the one\n// that the DOM represents. If any changes came in in the meantime,\n// the modification is mapped over those before it is applied, in\n// readDOMChange.\nfunction parseBetween(view, from_, to_) {\n let { node: parent, fromOffset, toOffset, from, to } = view.docView.parseRange(from_, to_);\n let domSel = view.domSelectionRange();\n let find;\n let anchor = domSel.anchorNode;\n if (anchor && view.dom.contains(anchor.nodeType == 1 ? anchor : anchor.parentNode)) {\n find = [{ node: anchor, offset: domSel.anchorOffset }];\n if (!selectionCollapsed(domSel))\n find.push({ node: domSel.focusNode, offset: domSel.focusOffset });\n }\n // Work around issue in Chrome where backspacing sometimes replaces\n // the deleted content with a random BR node (issues #799, #831)\n if (chrome && view.input.lastKeyCode === 8) {\n for (let off = toOffset; off > fromOffset; off--) {\n let node = parent.childNodes[off - 1], desc = node.pmViewDesc;\n if (node.nodeName == \"BR\" && !desc) {\n toOffset = off;\n break;\n }\n if (!desc || desc.size)\n break;\n }\n }\n let startDoc = view.state.doc;\n let parser = view.someProp(\"domParser\") || DOMParser.fromSchema(view.state.schema);\n let $from = startDoc.resolve(from);\n let sel = null, doc = parser.parse(parent, {\n topNode: $from.parent,\n topMatch: $from.parent.contentMatchAt($from.index()),\n topOpen: true,\n from: fromOffset,\n to: toOffset,\n preserveWhitespace: $from.parent.type.whitespace == \"pre\" ? \"full\" : true,\n findPositions: find,\n ruleFromNode,\n context: $from\n });\n if (find && find[0].pos != null) {\n let anchor = find[0].pos, head = find[1] && find[1].pos;\n if (head == null)\n head = anchor;\n sel = { anchor: anchor + from, head: head + from };\n }\n return { doc, sel, from, to };\n}\nfunction ruleFromNode(dom) {\n let desc = dom.pmViewDesc;\n if (desc) {\n return desc.parseRule();\n }\n else if (dom.nodeName == \"BR\" && dom.parentNode) {\n // Safari replaces the list item or table cell with a BR\n // directly in the list node (?!) if you delete the last\n // character in a list item or table cell (#708, #862)\n if (safari && /^(ul|ol)$/i.test(dom.parentNode.nodeName)) {\n let skip = document.createElement(\"div\");\n skip.appendChild(document.createElement(\"li\"));\n return { skip };\n }\n else if (dom.parentNode.lastChild == dom || safari && /^(tr|table)$/i.test(dom.parentNode.nodeName)) {\n return { ignore: true };\n }\n }\n else if (dom.nodeName == \"IMG\" && dom.getAttribute(\"mark-placeholder\")) {\n return { ignore: true };\n }\n return null;\n}\nconst isInline = /^(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;\nfunction readDOMChange(view, from, to, typeOver, addedNodes) {\n let compositionID = view.input.compositionPendingChanges || (view.composing ? view.input.compositionID : 0);\n view.input.compositionPendingChanges = 0;\n if (from < 0) {\n let origin = view.input.lastSelectionTime > Date.now() - 50 ? view.input.lastSelectionOrigin : null;\n let newSel = selectionFromDOM(view, origin);\n if (newSel && !view.state.selection.eq(newSel)) {\n if (chrome && android &&\n view.input.lastKeyCode === 13 && Date.now() - 100 < view.input.lastKeyCodeTime &&\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\"))))\n return;\n let tr = view.state.tr.setSelection(newSel);\n if (origin == \"pointer\")\n tr.setMeta(\"pointer\", true);\n else if (origin == \"key\")\n tr.scrollIntoView();\n if (compositionID)\n tr.setMeta(\"composition\", compositionID);\n view.dispatch(tr);\n }\n return;\n }\n let $before = view.state.doc.resolve(from);\n let shared = $before.sharedDepth(to);\n from = $before.before(shared + 1);\n to = view.state.doc.resolve(to).after(shared + 1);\n let sel = view.state.selection;\n let parse = parseBetween(view, from, to);\n let doc = view.state.doc, compare = doc.slice(parse.from, parse.to);\n let preferredPos, preferredSide;\n // Prefer anchoring to end when Backspace is pressed\n if (view.input.lastKeyCode === 8 && Date.now() - 100 < view.input.lastKeyCodeTime) {\n preferredPos = view.state.selection.to;\n preferredSide = \"end\";\n }\n else {\n preferredPos = view.state.selection.from;\n preferredSide = \"start\";\n }\n view.input.lastKeyCode = null;\n let change = findDiff(compare.content, parse.doc.content, parse.from, preferredPos, preferredSide);\n if (change)\n view.input.domChangeCount++;\n if ((ios && view.input.lastIOSEnter > Date.now() - 225 || android) &&\n addedNodes.some(n => n.nodeType == 1 && !isInline.test(n.nodeName)) &&\n (!change || change.endA >= change.endB) &&\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\")))) {\n view.input.lastIOSEnter = 0;\n return;\n }\n if (!change) {\n if (typeOver && sel instanceof TextSelection && !sel.empty && sel.$head.sameParent(sel.$anchor) &&\n !view.composing && !(parse.sel && parse.sel.anchor != parse.sel.head)) {\n change = { start: sel.from, endA: sel.to, endB: sel.to };\n }\n else {\n if (parse.sel) {\n let sel = resolveSelection(view, view.state.doc, parse.sel);\n if (sel && !sel.eq(view.state.selection)) {\n let tr = view.state.tr.setSelection(sel);\n if (compositionID)\n tr.setMeta(\"composition\", compositionID);\n view.dispatch(tr);\n }\n }\n return;\n }\n }\n // Handle the case where overwriting a selection by typing matches\n // the start or end of the selected content, creating a change\n // that's smaller than what was actually overwritten.\n if (view.state.selection.from < view.state.selection.to &&\n change.start == change.endB &&\n view.state.selection instanceof TextSelection) {\n if (change.start > view.state.selection.from && change.start <= view.state.selection.from + 2 &&\n view.state.selection.from >= parse.from) {\n change.start = view.state.selection.from;\n }\n else if (change.endA < view.state.selection.to && change.endA >= view.state.selection.to - 2 &&\n view.state.selection.to <= parse.to) {\n change.endB += (view.state.selection.to - change.endA);\n change.endA = view.state.selection.to;\n }\n }\n // IE11 will insert a non-breaking space _ahead_ of the space after\n // the cursor space when adding a space before another space. When\n // that happened, adjust the change to cover the space instead.\n if (ie && ie_version <= 11 && change.endB == change.start + 1 &&\n change.endA == change.start && change.start > parse.from &&\n parse.doc.textBetween(change.start - parse.from - 1, change.start - parse.from + 1) == \" \\u00a0\") {\n change.start--;\n change.endA--;\n change.endB--;\n }\n let $from = parse.doc.resolveNoCache(change.start - parse.from);\n let $to = parse.doc.resolveNoCache(change.endB - parse.from);\n let $fromA = doc.resolve(change.start);\n let inlineChange = $from.sameParent($to) && $from.parent.inlineContent && $fromA.end() >= change.endA;\n // If this looks like the effect of pressing Enter (or was recorded\n // as being an iOS enter press), just dispatch an Enter key instead.\n if (((ios && view.input.lastIOSEnter > Date.now() - 225 &&\n (!inlineChange || addedNodes.some(n => n.nodeName == \"DIV\" || n.nodeName == \"P\"))) ||\n (!inlineChange && $from.pos < parse.doc.content.size &&\n (!$from.sameParent($to) || !$from.parent.inlineContent) &&\n $from.pos < $to.pos && !/\\S/.test(parse.doc.textBetween($from.pos, $to.pos, \"\", \"\")))) &&\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\")))) {\n view.input.lastIOSEnter = 0;\n return;\n }\n // Same for backspace\n if (view.state.selection.anchor > change.start &&\n looksLikeBackspace(doc, change.start, change.endA, $from, $to) &&\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(8, \"Backspace\")))) {\n if (android && chrome)\n view.domObserver.suppressSelectionUpdates(); // #820\n return;\n }\n // Chrome will occasionally, during composition, delete the\n // entire composition and then immediately insert it again. This is\n // used to detect that situation.\n if (chrome && change.endB == change.start)\n view.input.lastChromeDelete = Date.now();\n // This tries to detect Android virtual keyboard\n // enter-and-pick-suggestion action. That sometimes (see issue\n // #1059) first fires a DOM mutation, before moving the selection to\n // the newly created block. And then, because ProseMirror cleans up\n // the DOM selection, it gives up moving the selection entirely,\n // leaving the cursor in the wrong place. When that happens, we drop\n // the new paragraph from the initial change, and fire a simulated\n // enter key afterwards.\n if (android && !inlineChange && $from.start() != $to.start() && $to.parentOffset == 0 && $from.depth == $to.depth &&\n parse.sel && parse.sel.anchor == parse.sel.head && parse.sel.head == change.endA) {\n change.endB -= 2;\n $to = parse.doc.resolveNoCache(change.endB - parse.from);\n setTimeout(() => {\n view.someProp(\"handleKeyDown\", function (f) { return f(view, keyEvent(13, \"Enter\")); });\n }, 20);\n }\n let chFrom = change.start, chTo = change.endA;\n let mkTr = (base) => {\n let tr = base || view.state.tr.replace(chFrom, chTo, parse.doc.slice(change.start - parse.from, change.endB - parse.from));\n if (parse.sel) {\n let sel = resolveSelection(view, tr.doc, parse.sel);\n // Chrome will sometimes, during composition, report the\n // selection in the wrong place. If it looks like that is\n // happening, don't update the selection.\n // Edge just doesn't move the cursor forward when you start typing\n // in an empty block or between br nodes.\n if (sel && !(chrome && view.composing && sel.empty &&\n (change.start != change.endB || view.input.lastChromeDelete < Date.now() - 100) &&\n (sel.head == chFrom || sel.head == tr.mapping.map(chTo) - 1) ||\n ie && sel.empty && sel.head == chFrom))\n tr.setSelection(sel);\n }\n if (compositionID)\n tr.setMeta(\"composition\", compositionID);\n return tr.scrollIntoView();\n };\n let markChange;\n if (inlineChange) {\n if ($from.pos == $to.pos) { // Deletion\n // IE11 sometimes weirdly moves the DOM selection around after\n // backspacing out the first element in a textblock\n if (ie && ie_version <= 11 && $from.parentOffset == 0) {\n view.domObserver.suppressSelectionUpdates();\n setTimeout(() => selectionToDOM(view), 20);\n }\n let tr = mkTr(view.state.tr.delete(chFrom, chTo));\n let marks = doc.resolve(change.start).marksAcross(doc.resolve(change.endA));\n if (marks)\n tr.ensureMarks(marks);\n view.dispatch(tr);\n }\n else if ( // Adding or removing a mark\n change.endA == change.endB &&\n (markChange = isMarkChange($from.parent.content.cut($from.parentOffset, $to.parentOffset), $fromA.parent.content.cut($fromA.parentOffset, change.endA - $fromA.start())))) {\n let tr = mkTr(view.state.tr);\n if (markChange.type == \"add\")\n tr.addMark(chFrom, chTo, markChange.mark);\n else\n tr.removeMark(chFrom, chTo, markChange.mark);\n view.dispatch(tr);\n }\n else if ($from.parent.child($from.index()).isText && $from.index() == $to.index() - ($to.textOffset ? 0 : 1)) {\n // Both positions in the same text node -- simply insert text\n let text = $from.parent.textBetween($from.parentOffset, $to.parentOffset);\n let deflt = () => mkTr(view.state.tr.insertText(text, chFrom, chTo));\n if (!view.someProp(\"handleTextInput\", f => f(view, chFrom, chTo, text, deflt)))\n view.dispatch(deflt());\n }\n else {\n view.dispatch(mkTr());\n }\n }\n else {\n view.dispatch(mkTr());\n }\n}\nfunction resolveSelection(view, doc, parsedSel) {\n if (Math.max(parsedSel.anchor, parsedSel.head) > doc.content.size)\n return null;\n return selectionBetween(view, doc.resolve(parsedSel.anchor), doc.resolve(parsedSel.head));\n}\n// Given two same-length, non-empty fragments of inline content,\n// determine whether the first could be created from the second by\n// removing or adding a single mark type.\nfunction isMarkChange(cur, prev) {\n let curMarks = cur.firstChild.marks, prevMarks = prev.firstChild.marks;\n let added = curMarks, removed = prevMarks, type, mark, update;\n for (let i = 0; i < prevMarks.length; i++)\n added = prevMarks[i].removeFromSet(added);\n for (let i = 0; i < curMarks.length; i++)\n removed = curMarks[i].removeFromSet(removed);\n if (added.length == 1 && removed.length == 0) {\n mark = added[0];\n type = \"add\";\n update = (node) => node.mark(mark.addToSet(node.marks));\n }\n else if (added.length == 0 && removed.length == 1) {\n mark = removed[0];\n type = \"remove\";\n update = (node) => node.mark(mark.removeFromSet(node.marks));\n }\n else {\n return null;\n }\n let updated = [];\n for (let i = 0; i < prev.childCount; i++)\n updated.push(update(prev.child(i)));\n if (Fragment.from(updated).eq(cur))\n return { mark, type };\n}\nfunction looksLikeBackspace(old, start, end, $newStart, $newEnd) {\n if ( // The content must have shrunk\n end - start <= $newEnd.pos - $newStart.pos ||\n // newEnd must point directly at or after the end of the block that newStart points into\n skipClosingAndOpening($newStart, true, false) < $newEnd.pos)\n return false;\n let $start = old.resolve(start);\n // Handle the case where, rather than joining blocks, the change just removed an entire block\n if (!$newStart.parent.isTextblock) {\n let after = $start.nodeAfter;\n return after != null && end == start + after.nodeSize;\n }\n // Start must be at the end of a block\n if ($start.parentOffset < $start.parent.content.size || !$start.parent.isTextblock)\n return false;\n let $next = old.resolve(skipClosingAndOpening($start, true, true));\n // The next textblock must start before end and end near it\n if (!$next.parent.isTextblock || $next.pos > end ||\n skipClosingAndOpening($next, true, false) < end)\n return false;\n // The fragments after the join point must match\n return $newStart.parent.content.cut($newStart.parentOffset).eq($next.parent.content);\n}\nfunction skipClosingAndOpening($pos, fromEnd, mayOpen) {\n let depth = $pos.depth, end = fromEnd ? $pos.end() : $pos.pos;\n while (depth > 0 && (fromEnd || $pos.indexAfter(depth) == $pos.node(depth).childCount)) {\n depth--;\n end++;\n fromEnd = false;\n }\n if (mayOpen) {\n let next = $pos.node(depth).maybeChild($pos.indexAfter(depth));\n while (next && !next.isLeaf) {\n next = next.firstChild;\n end++;\n }\n }\n return end;\n}\nfunction findDiff(a, b, pos, preferredPos, preferredSide) {\n let start = a.findDiffStart(b, pos);\n if (start == null)\n return null;\n let { a: endA, b: endB } = a.findDiffEnd(b, pos + a.size, pos + b.size);\n if (preferredSide == \"end\") {\n let adjust = Math.max(0, start - Math.min(endA, endB));\n preferredPos -= endA + adjust - start;\n }\n if (endA < start && a.size < b.size) {\n let move = preferredPos <= start && preferredPos >= endA ? start - preferredPos : 0;\n start -= move;\n if (start && start < b.size && isSurrogatePair(b.textBetween(start - 1, start + 1)))\n start += move ? 1 : -1;\n endB = start + (endB - endA);\n endA = start;\n }\n else if (endB < start) {\n let move = preferredPos <= start && preferredPos >= endB ? start - preferredPos : 0;\n start -= move;\n if (start && start < a.size && isSurrogatePair(a.textBetween(start - 1, start + 1)))\n start += move ? 1 : -1;\n endA = start + (endA - endB);\n endB = start;\n }\n return { start, endA, endB };\n}\nfunction isSurrogatePair(str) {\n if (str.length != 2)\n return false;\n let a = str.charCodeAt(0), b = str.charCodeAt(1);\n return a >= 0xDC00 && a <= 0xDFFF && b >= 0xD800 && b <= 0xDBFF;\n}\n\n/**\n@internal\n*/\nconst __parseFromClipboard = parseFromClipboard;\n/**\n@internal\n*/\nconst __endComposition = endComposition;\n/**\nAn editor view manages the DOM structure that represents an\neditable document. Its state and behavior are determined by its\n[props](https://prosemirror.net/docs/ref/#view.DirectEditorProps).\n*/\nclass EditorView {\n /**\n Create a view. `place` may be a DOM node that the editor should\n be appended to, a function that will place it into the document,\n or an object whose `mount` property holds the node to use as the\n document container. If it is `null`, the editor will not be\n added to the document.\n */\n constructor(place, props) {\n this._root = null;\n /**\n @internal\n */\n this.focused = false;\n /**\n Kludge used to work around a Chrome bug @internal\n */\n this.trackWrites = null;\n this.mounted = false;\n /**\n @internal\n */\n this.markCursor = null;\n /**\n @internal\n */\n this.cursorWrapper = null;\n /**\n @internal\n */\n this.lastSelectedViewDesc = undefined;\n /**\n @internal\n */\n this.input = new InputState;\n this.prevDirectPlugins = [];\n this.pluginViews = [];\n /**\n Holds `true` when a hack node is needed in Firefox to prevent the\n [space is eaten issue](https://github.com/ProseMirror/prosemirror/issues/651)\n @internal\n */\n this.requiresGeckoHackNode = false;\n /**\n When editor content is being dragged, this object contains\n information about the dragged slice and whether it is being\n copied or moved. At any other time, it is null.\n */\n this.dragging = null;\n this._props = props;\n this.state = props.state;\n this.directPlugins = props.plugins || [];\n this.directPlugins.forEach(checkStateComponent);\n this.dispatch = this.dispatch.bind(this);\n this.dom = (place && place.mount) || document.createElement(\"div\");\n if (place) {\n if (place.appendChild)\n place.appendChild(this.dom);\n else if (typeof place == \"function\")\n place(this.dom);\n else if (place.mount)\n this.mounted = true;\n }\n this.editable = getEditable(this);\n updateCursorWrapper(this);\n this.nodeViews = buildNodeViews(this);\n this.docView = docViewDesc(this.state.doc, computeDocDeco(this), viewDecorations(this), this.dom, this);\n this.domObserver = new DOMObserver(this, (from, to, typeOver, added) => readDOMChange(this, from, to, typeOver, added));\n this.domObserver.start();\n initInput(this);\n this.updatePluginViews();\n }\n /**\n Holds `true` when a\n [composition](https://w3c.github.io/uievents/#events-compositionevents)\n is active.\n */\n get composing() { return this.input.composing; }\n /**\n The view's current [props](https://prosemirror.net/docs/ref/#view.EditorProps).\n */\n get props() {\n if (this._props.state != this.state) {\n let prev = this._props;\n this._props = {};\n for (let name in prev)\n this._props[name] = prev[name];\n this._props.state = this.state;\n }\n return this._props;\n }\n /**\n Update the view's props. Will immediately cause an update to\n the DOM.\n */\n update(props) {\n if (props.handleDOMEvents != this._props.handleDOMEvents)\n ensureListeners(this);\n let prevProps = this._props;\n this._props = props;\n if (props.plugins) {\n props.plugins.forEach(checkStateComponent);\n this.directPlugins = props.plugins;\n }\n this.updateStateInner(props.state, prevProps);\n }\n /**\n Update the view by updating existing props object with the object\n given as argument. Equivalent to `view.update(Object.assign({},\n view.props, props))`.\n */\n setProps(props) {\n let updated = {};\n for (let name in this._props)\n updated[name] = this._props[name];\n updated.state = this.state;\n for (let name in props)\n updated[name] = props[name];\n this.update(updated);\n }\n /**\n Update the editor's `state` prop, without touching any of the\n other props.\n */\n updateState(state) {\n this.updateStateInner(state, this._props);\n }\n updateStateInner(state, prevProps) {\n var _a;\n let prev = this.state, redraw = false, updateSel = false;\n // When stored marks are added, stop composition, so that they can\n // be displayed.\n if (state.storedMarks && this.composing) {\n clearComposition(this);\n updateSel = true;\n }\n this.state = state;\n let pluginsChanged = prev.plugins != state.plugins || this._props.plugins != prevProps.plugins;\n if (pluginsChanged || this._props.plugins != prevProps.plugins || this._props.nodeViews != prevProps.nodeViews) {\n let nodeViews = buildNodeViews(this);\n if (changedNodeViews(nodeViews, this.nodeViews)) {\n this.nodeViews = nodeViews;\n redraw = true;\n }\n }\n if (pluginsChanged || prevProps.handleDOMEvents != this._props.handleDOMEvents) {\n ensureListeners(this);\n }\n this.editable = getEditable(this);\n updateCursorWrapper(this);\n let innerDeco = viewDecorations(this), outerDeco = computeDocDeco(this);\n let scroll = prev.plugins != state.plugins && !prev.doc.eq(state.doc) ? \"reset\"\n : state.scrollToSelection > prev.scrollToSelection ? \"to selection\" : \"preserve\";\n let updateDoc = redraw || !this.docView.matchesNode(state.doc, outerDeco, innerDeco);\n if (updateDoc || !state.selection.eq(prev.selection))\n updateSel = true;\n let oldScrollPos = scroll == \"preserve\" && updateSel && this.dom.style.overflowAnchor == null && storeScrollPos(this);\n if (updateSel) {\n this.domObserver.stop();\n // Work around an issue in Chrome, IE, and Edge where changing\n // the DOM around an active selection puts it into a broken\n // state where the thing the user sees differs from the\n // selection reported by the Selection object (#710, #973,\n // #1011, #1013, #1035).\n let forceSelUpdate = updateDoc && (ie || chrome) && !this.composing &&\n !prev.selection.empty && !state.selection.empty && selectionContextChanged(prev.selection, state.selection);\n if (updateDoc) {\n // If the node that the selection points into is written to,\n // Chrome sometimes starts misreporting the selection, so this\n // tracks that and forces a selection reset when our update\n // did write to the node.\n let chromeKludge = chrome ? (this.trackWrites = this.domSelectionRange().focusNode) : null;\n if (this.composing)\n this.input.compositionNode = findCompositionNode(this);\n if (redraw || !this.docView.update(state.doc, outerDeco, innerDeco, this)) {\n this.docView.updateOuterDeco(outerDeco);\n this.docView.destroy();\n this.docView = docViewDesc(state.doc, outerDeco, innerDeco, this.dom, this);\n }\n if (chromeKludge && (!this.trackWrites || !this.dom.contains(this.trackWrites)))\n forceSelUpdate = true;\n }\n // Work around for an issue where an update arriving right between\n // a DOM selection change and the \"selectionchange\" event for it\n // can cause a spurious DOM selection update, disrupting mouse\n // drag selection.\n if (forceSelUpdate ||\n !(this.input.mouseDown && this.domObserver.currentSelection.eq(this.domSelectionRange()) &&\n anchorInRightPlace(this))) {\n selectionToDOM(this, forceSelUpdate);\n }\n else {\n syncNodeSelection(this, state.selection);\n this.domObserver.setCurSelection();\n }\n this.domObserver.start();\n }\n this.updatePluginViews(prev);\n if (((_a = this.dragging) === null || _a === void 0 ? void 0 : _a.node) && !prev.doc.eq(state.doc))\n this.updateDraggedNode(this.dragging, prev);\n if (scroll == \"reset\") {\n this.dom.scrollTop = 0;\n }\n else if (scroll == \"to selection\") {\n this.scrollToSelection();\n }\n else if (oldScrollPos) {\n resetScrollPos(oldScrollPos);\n }\n }\n /**\n @internal\n */\n scrollToSelection() {\n let startDOM = this.domSelectionRange().focusNode;\n if (!startDOM || !this.dom.contains(startDOM.nodeType == 1 ? startDOM : startDOM.parentNode)) ;\n else if (this.someProp(\"handleScrollToSelection\", f => f(this))) ;\n else if (this.state.selection instanceof NodeSelection) {\n let target = this.docView.domAfterPos(this.state.selection.from);\n if (target.nodeType == 1)\n scrollRectIntoView(this, target.getBoundingClientRect(), startDOM);\n }\n else {\n scrollRectIntoView(this, this.coordsAtPos(this.state.selection.head, 1), startDOM);\n }\n }\n destroyPluginViews() {\n let view;\n while (view = this.pluginViews.pop())\n if (view.destroy)\n view.destroy();\n }\n updatePluginViews(prevState) {\n if (!prevState || prevState.plugins != this.state.plugins || this.directPlugins != this.prevDirectPlugins) {\n this.prevDirectPlugins = this.directPlugins;\n this.destroyPluginViews();\n for (let i = 0; i < this.directPlugins.length; i++) {\n let plugin = this.directPlugins[i];\n if (plugin.spec.view)\n this.pluginViews.push(plugin.spec.view(this));\n }\n for (let i = 0; i < this.state.plugins.length; i++) {\n let plugin = this.state.plugins[i];\n if (plugin.spec.view)\n this.pluginViews.push(plugin.spec.view(this));\n }\n }\n else {\n for (let i = 0; i < this.pluginViews.length; i++) {\n let pluginView = this.pluginViews[i];\n if (pluginView.update)\n pluginView.update(this, prevState);\n }\n }\n }\n updateDraggedNode(dragging, prev) {\n let sel = dragging.node, found = -1;\n if (this.state.doc.nodeAt(sel.from) == sel.node) {\n found = sel.from;\n }\n else {\n let movedPos = sel.from + (this.state.doc.content.size - prev.doc.content.size);\n let moved = movedPos > 0 && this.state.doc.nodeAt(movedPos);\n if (moved == sel.node)\n found = movedPos;\n }\n this.dragging = new Dragging(dragging.slice, dragging.move, found < 0 ? undefined : NodeSelection.create(this.state.doc, found));\n }\n someProp(propName, f) {\n let prop = this._props && this._props[propName], value;\n if (prop != null && (value = f ? f(prop) : prop))\n return value;\n for (let i = 0; i < this.directPlugins.length; i++) {\n let prop = this.directPlugins[i].props[propName];\n if (prop != null && (value = f ? f(prop) : prop))\n return value;\n }\n let plugins = this.state.plugins;\n if (plugins)\n for (let i = 0; i < plugins.length; i++) {\n let prop = plugins[i].props[propName];\n if (prop != null && (value = f ? f(prop) : prop))\n return value;\n }\n }\n /**\n Query whether the view has focus.\n */\n hasFocus() {\n // Work around IE not handling focus correctly if resize handles are shown.\n // If the cursor is inside an element with resize handles, activeElement\n // will be that element instead of this.dom.\n if (ie) {\n // If activeElement is within this.dom, and there are no other elements\n // setting `contenteditable` to false in between, treat it as focused.\n let node = this.root.activeElement;\n if (node == this.dom)\n return true;\n if (!node || !this.dom.contains(node))\n return false;\n while (node && this.dom != node && this.dom.contains(node)) {\n if (node.contentEditable == 'false')\n return false;\n node = node.parentElement;\n }\n return true;\n }\n return this.root.activeElement == this.dom;\n }\n /**\n Focus the editor.\n */\n focus() {\n this.domObserver.stop();\n if (this.editable)\n focusPreventScroll(this.dom);\n selectionToDOM(this);\n this.domObserver.start();\n }\n /**\n Get the document root in which the editor exists. This will\n usually be the top-level `document`, but might be a [shadow\n DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Shadow_DOM)\n root if the editor is inside one.\n */\n get root() {\n let cached = this._root;\n if (cached == null)\n for (let search = this.dom.parentNode; search; search = search.parentNode) {\n if (search.nodeType == 9 || (search.nodeType == 11 && search.host)) {\n if (!search.getSelection)\n Object.getPrototypeOf(search).getSelection = () => search.ownerDocument.getSelection();\n return this._root = search;\n }\n }\n return cached || document;\n }\n /**\n When an existing editor view is moved to a new document or\n shadow tree, call this to make it recompute its root.\n */\n updateRoot() {\n this._root = null;\n }\n /**\n Given a pair of viewport coordinates, return the document\n position that corresponds to them. May return null if the given\n coordinates aren't inside of the editor. When an object is\n returned, its `pos` property is the position nearest to the\n coordinates, and its `inside` property holds the position of the\n inner node that the position falls inside of, or -1 if it is at\n the top level, not in any node.\n */\n posAtCoords(coords) {\n return posAtCoords(this, coords);\n }\n /**\n Returns the viewport rectangle at a given document position.\n `left` and `right` will be the same number, as this returns a\n flat cursor-ish rectangle. If the position is between two things\n that aren't directly adjacent, `side` determines which element\n is used. When < 0, the element before the position is used,\n otherwise the element after.\n */\n coordsAtPos(pos, side = 1) {\n return coordsAtPos(this, pos, side);\n }\n /**\n Find the DOM position that corresponds to the given document\n position. When `side` is negative, find the position as close as\n possible to the content before the position. When positive,\n prefer positions close to the content after the position. When\n zero, prefer as shallow a position as possible.\n \n Note that you should **not** mutate the editor's internal DOM,\n only inspect it (and even that is usually not necessary).\n */\n domAtPos(pos, side = 0) {\n return this.docView.domFromPos(pos, side);\n }\n /**\n Find the DOM node that represents the document node after the\n given position. May return `null` when the position doesn't point\n in front of a node or if the node is inside an opaque node view.\n \n This is intended to be able to call things like\n `getBoundingClientRect` on that DOM node. Do **not** mutate the\n editor DOM directly, or add styling this way, since that will be\n immediately overriden by the editor as it redraws the node.\n */\n nodeDOM(pos) {\n let desc = this.docView.descAt(pos);\n return desc ? desc.nodeDOM : null;\n }\n /**\n Find the document position that corresponds to a given DOM\n position. (Whenever possible, it is preferable to inspect the\n document structure directly, rather than poking around in the\n DOM, but sometimes—for example when interpreting an event\n target—you don't have a choice.)\n \n The `bias` parameter can be used to influence which side of a DOM\n node to use when the position is inside a leaf node.\n */\n posAtDOM(node, offset, bias = -1) {\n let pos = this.docView.posFromDOM(node, offset, bias);\n if (pos == null)\n throw new RangeError(\"DOM position not inside the editor\");\n return pos;\n }\n /**\n Find out whether the selection is at the end of a textblock when\n moving in a given direction. When, for example, given `\"left\"`,\n it will return true if moving left from the current cursor\n position would leave that position's parent textblock. Will apply\n to the view's current state by default, but it is possible to\n pass a different state.\n */\n endOfTextblock(dir, state) {\n return endOfTextblock(this, state || this.state, dir);\n }\n /**\n Run the editor's paste logic with the given HTML string. The\n `event`, if given, will be passed to the\n [`handlePaste`](https://prosemirror.net/docs/ref/#view.EditorProps.handlePaste) hook.\n */\n pasteHTML(html, event) {\n return doPaste(this, \"\", html, false, event || new ClipboardEvent(\"paste\"));\n }\n /**\n Run the editor's paste logic with the given plain-text input.\n */\n pasteText(text, event) {\n return doPaste(this, text, null, true, event || new ClipboardEvent(\"paste\"));\n }\n /**\n Serialize the given slice as it would be if it was copied from\n this editor. Returns a DOM element that contains a\n representation of the slice as its children, a textual\n representation, and the transformed slice (which can be\n different from the given input due to hooks like\n [`transformCopied`](https://prosemirror.net/docs/ref/#view.EditorProps.transformCopied)).\n */\n serializeForClipboard(slice) {\n return serializeForClipboard(this, slice);\n }\n /**\n Removes the editor from the DOM and destroys all [node\n views](https://prosemirror.net/docs/ref/#view.NodeView).\n */\n destroy() {\n if (!this.docView)\n return;\n destroyInput(this);\n this.destroyPluginViews();\n if (this.mounted) {\n this.docView.update(this.state.doc, [], viewDecorations(this), this);\n this.dom.textContent = \"\";\n }\n else if (this.dom.parentNode) {\n this.dom.parentNode.removeChild(this.dom);\n }\n this.docView.destroy();\n this.docView = null;\n clearReusedRange();\n }\n /**\n This is true when the view has been\n [destroyed](https://prosemirror.net/docs/ref/#view.EditorView.destroy) (and thus should not be\n used anymore).\n */\n get isDestroyed() {\n return this.docView == null;\n }\n /**\n Used for testing.\n */\n dispatchEvent(event) {\n return dispatchEvent(this, event);\n }\n /**\n @internal\n */\n domSelectionRange() {\n let sel = this.domSelection();\n if (!sel)\n return { focusNode: null, focusOffset: 0, anchorNode: null, anchorOffset: 0 };\n return safari && this.root.nodeType === 11 &&\n deepActiveElement(this.dom.ownerDocument) == this.dom && safariShadowSelectionRange(this, sel) || sel;\n }\n /**\n @internal\n */\n domSelection() {\n return this.root.getSelection();\n }\n}\nEditorView.prototype.dispatch = function (tr) {\n let dispatchTransaction = this._props.dispatchTransaction;\n if (dispatchTransaction)\n dispatchTransaction.call(this, tr);\n else\n this.updateState(this.state.apply(tr));\n};\nfunction computeDocDeco(view) {\n let attrs = Object.create(null);\n attrs.class = \"ProseMirror\";\n attrs.contenteditable = String(view.editable);\n view.someProp(\"attributes\", value => {\n if (typeof value == \"function\")\n value = value(view.state);\n if (value)\n for (let attr in value) {\n if (attr == \"class\")\n attrs.class += \" \" + value[attr];\n else if (attr == \"style\")\n attrs.style = (attrs.style ? attrs.style + \";\" : \"\") + value[attr];\n else if (!attrs[attr] && attr != \"contenteditable\" && attr != \"nodeName\")\n attrs[attr] = String(value[attr]);\n }\n });\n if (!attrs.translate)\n attrs.translate = \"no\";\n return [Decoration.node(0, view.state.doc.content.size, attrs)];\n}\nfunction updateCursorWrapper(view) {\n if (view.markCursor) {\n let dom = document.createElement(\"img\");\n dom.className = \"ProseMirror-separator\";\n dom.setAttribute(\"mark-placeholder\", \"true\");\n dom.setAttribute(\"alt\", \"\");\n view.cursorWrapper = { dom, deco: Decoration.widget(view.state.selection.from, dom, { raw: true, marks: view.markCursor }) };\n }\n else {\n view.cursorWrapper = null;\n }\n}\nfunction getEditable(view) {\n return !view.someProp(\"editable\", value => value(view.state) === false);\n}\nfunction selectionContextChanged(sel1, sel2) {\n let depth = Math.min(sel1.$anchor.sharedDepth(sel1.head), sel2.$anchor.sharedDepth(sel2.head));\n return sel1.$anchor.start(depth) != sel2.$anchor.start(depth);\n}\nfunction buildNodeViews(view) {\n let result = Object.create(null);\n function add(obj) {\n for (let prop in obj)\n if (!Object.prototype.hasOwnProperty.call(result, prop))\n result[prop] = obj[prop];\n }\n view.someProp(\"nodeViews\", add);\n view.someProp(\"markViews\", add);\n return result;\n}\nfunction changedNodeViews(a, b) {\n let nA = 0, nB = 0;\n for (let prop in a) {\n if (a[prop] != b[prop])\n return true;\n nA++;\n }\n for (let _ in b)\n nB++;\n return nA != nB;\n}\nfunction checkStateComponent(plugin) {\n if (plugin.spec.state || plugin.spec.filterTransaction || plugin.spec.appendTransaction)\n throw new RangeError(\"Plugins passed directly to the view must not have a state component\");\n}\n\nexport { Decoration, DecorationSet, EditorView, __endComposition, __parseFromClipboard };\n","import { createSlice, createTimer, Container, Clock, Ctx } from \"@milkdown/ctx\";\nimport { Schema, DOMParser, Node } from \"@milkdown/prose/model\";\nimport remarkParse from \"remark-parse\";\nimport remarkStringify from \"remark-stringify\";\nimport { unified } from \"unified\";\nimport { callCommandBeforeEditorView, ctxCallOutOfScope, docTypeError } from \"@milkdown/exception\";\nimport { ParserState, SerializerState } from \"@milkdown/transformer\";\nimport { chainCommands, deleteSelection, joinTextblockBackward, selectNodeBackward, baseKeymap } from \"@milkdown/prose/commands\";\nimport { undoInputRule } from \"@milkdown/prose/inputrules\";\nimport { customInputRules } from \"@milkdown/prose\";\nimport { keymap as keymap$1 } from \"@milkdown/prose/keymap\";\nimport { Plugin, PluginKey, EditorState } from \"@milkdown/prose/state\";\nimport { EditorView } from \"@milkdown/prose/view\";\nfunction withMeta(plugin, meta) {\n plugin.meta = {\n package: \"@milkdown/core\",\n group: \"System\",\n ...meta\n };\n return plugin;\n}\nconst remarkHandlers = {\n text: (node, _, state, info) => {\n const value = node.value;\n if (/^[^*_\\\\]*\\s+$/.test(value)) {\n return value;\n }\n return state.safe(value, { ...info, encode: [] });\n },\n strong: (node, _, state, info) => {\n const marker = node.marker || state.options.strong || \"*\";\n const exit = state.enter(\"strong\");\n const tracker = state.createTracker(info);\n let value = tracker.move(marker + marker);\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: marker,\n ...tracker.current()\n })\n );\n value += tracker.move(marker + marker);\n exit();\n return value;\n },\n emphasis: (node, _, state, info) => {\n const marker = node.marker || state.options.emphasis || \"*\";\n const exit = state.enter(\"emphasis\");\n const tracker = state.createTracker(info);\n let value = tracker.move(marker);\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: marker,\n ...tracker.current()\n })\n );\n value += tracker.move(marker);\n exit();\n return value;\n }\n};\nconst editorViewCtx = createSlice({}, \"editorView\");\nconst editorStateCtx = createSlice({}, \"editorState\");\nconst initTimerCtx = createSlice([], \"initTimer\");\nconst editorCtx = createSlice({}, \"editor\");\nconst inputRulesCtx = createSlice([], \"inputRules\");\nconst prosePluginsCtx = createSlice([], \"prosePlugins\");\nconst remarkPluginsCtx = createSlice(\n [],\n \"remarkPlugins\"\n);\nconst nodeViewCtx = createSlice([], \"nodeView\");\nconst markViewCtx = createSlice([], \"markView\");\nconst remarkCtx = createSlice(\n unified().use(remarkParse).use(remarkStringify),\n \"remark\"\n);\nconst remarkStringifyOptionsCtx = createSlice(\n {\n handlers: remarkHandlers,\n encode: []\n },\n \"remarkStringifyOptions\"\n);\nconst ConfigReady = createTimer(\"ConfigReady\");\nfunction config(configure) {\n const plugin = (ctx) => {\n ctx.record(ConfigReady);\n return async () => {\n await configure(ctx);\n ctx.done(ConfigReady);\n return () => {\n ctx.clearTimer(ConfigReady);\n };\n };\n };\n withMeta(plugin, {\n displayName: \"Config\"\n });\n return plugin;\n}\nconst InitReady = createTimer(\"InitReady\");\nfunction init(editor) {\n const plugin = (ctx) => {\n ctx.inject(editorCtx, editor).inject(prosePluginsCtx, []).inject(remarkPluginsCtx, []).inject(inputRulesCtx, []).inject(nodeViewCtx, []).inject(markViewCtx, []).inject(remarkStringifyOptionsCtx, {\n handlers: remarkHandlers,\n encode: []\n }).inject(remarkCtx, unified().use(remarkParse).use(remarkStringify)).inject(initTimerCtx, [ConfigReady]).record(InitReady);\n return async () => {\n await ctx.waitTimers(initTimerCtx);\n const options = ctx.get(remarkStringifyOptionsCtx);\n ctx.set(\n remarkCtx,\n unified().use(remarkParse).use(remarkStringify, options)\n );\n ctx.done(InitReady);\n return () => {\n ctx.remove(editorCtx).remove(prosePluginsCtx).remove(remarkPluginsCtx).remove(inputRulesCtx).remove(nodeViewCtx).remove(markViewCtx).remove(remarkStringifyOptionsCtx).remove(remarkCtx).remove(initTimerCtx).clearTimer(InitReady);\n };\n };\n };\n withMeta(plugin, {\n displayName: \"Init\"\n });\n return plugin;\n}\nconst SchemaReady = createTimer(\"SchemaReady\");\nconst schemaTimerCtx = createSlice([], \"schemaTimer\");\nconst schemaCtx = createSlice({}, \"schema\");\nconst nodesCtx = createSlice([], \"nodes\");\nconst marksCtx = createSlice([], \"marks\");\nfunction extendPriority(x) {\n return {\n ...x,\n parseDOM: x.parseDOM?.map((rule) => ({ priority: x.priority, ...rule }))\n };\n}\nconst schema = (ctx) => {\n ctx.inject(schemaCtx, {}).inject(nodesCtx, []).inject(marksCtx, []).inject(schemaTimerCtx, [InitReady]).record(SchemaReady);\n return async () => {\n await ctx.waitTimers(schemaTimerCtx);\n const remark = ctx.get(remarkCtx);\n const remarkPlugins = ctx.get(remarkPluginsCtx);\n const processor = remarkPlugins.reduce(\n (acc, plug) => acc.use(plug.plugin, plug.options),\n remark\n );\n ctx.set(remarkCtx, processor);\n const nodes = Object.fromEntries(\n ctx.get(nodesCtx).map(([key2, x]) => [key2, extendPriority(x)])\n );\n const marks = Object.fromEntries(\n ctx.get(marksCtx).map(([key2, x]) => [key2, extendPriority(x)])\n );\n const schema2 = new Schema({ nodes, marks });\n ctx.set(schemaCtx, schema2);\n ctx.done(SchemaReady);\n return () => {\n ctx.remove(schemaCtx).remove(nodesCtx).remove(marksCtx).remove(schemaTimerCtx).clearTimer(SchemaReady);\n };\n };\n};\nwithMeta(schema, {\n displayName: \"Schema\"\n});\nclass CommandManager {\n constructor() {\n this.#container = new Container();\n this.#ctx = null;\n this.setCtx = (ctx) => {\n this.#ctx = ctx;\n };\n this.chain = () => {\n if (this.#ctx == null) throw callCommandBeforeEditorView();\n const ctx = this.#ctx;\n const commands2 = [];\n const get = this.get.bind(this);\n const chains = {\n run: () => {\n const chained = chainCommands(...commands2);\n const view = ctx.get(editorViewCtx);\n return chained(view.state, view.dispatch, view);\n },\n inline: (command) => {\n commands2.push(command);\n return chains;\n },\n pipe: pipe.bind(this)\n };\n function pipe(slice, payload) {\n const cmd = get(slice);\n commands2.push(cmd(payload));\n return chains;\n }\n return chains;\n };\n }\n #container;\n #ctx;\n get ctx() {\n return this.#ctx;\n }\n /// Register a command into the manager.\n create(meta, value) {\n const slice = meta.create(this.#container.sliceMap);\n slice.set(value);\n return slice;\n }\n get(slice) {\n return this.#container.get(slice).get();\n }\n remove(slice) {\n return this.#container.remove(slice);\n }\n call(slice, payload) {\n if (this.#ctx == null) throw callCommandBeforeEditorView();\n const cmd = this.get(slice);\n const command = cmd(payload);\n const view = this.#ctx.get(editorViewCtx);\n return command(view.state, view.dispatch, view);\n }\n /// Call an inline command.\n inline(command) {\n if (this.#ctx == null) throw callCommandBeforeEditorView();\n const view = this.#ctx.get(editorViewCtx);\n return command(view.state, view.dispatch, view);\n }\n}\nfunction createCmdKey(key2 = \"cmdKey\") {\n return createSlice((() => () => false), key2);\n}\nconst commandsCtx = createSlice(new CommandManager(), \"commands\");\nconst commandsTimerCtx = createSlice([SchemaReady], \"commandsTimer\");\nconst CommandsReady = createTimer(\"CommandsReady\");\nconst commands = (ctx) => {\n const cmd = new CommandManager();\n cmd.setCtx(ctx);\n ctx.inject(commandsCtx, cmd).inject(commandsTimerCtx, [SchemaReady]).record(CommandsReady);\n return async () => {\n await ctx.waitTimers(commandsTimerCtx);\n ctx.done(CommandsReady);\n return () => {\n ctx.remove(commandsCtx).remove(commandsTimerCtx).clearTimer(CommandsReady);\n };\n };\n};\nwithMeta(commands, {\n displayName: \"Commands\"\n});\nfunction overrideBaseKeymap(keymap2) {\n const handleBackspace = chainCommands(\n undoInputRule,\n deleteSelection,\n joinTextblockBackward,\n selectNodeBackward\n );\n keymap2.Backspace = handleBackspace;\n return keymap2;\n}\nclass KeymapManager {\n constructor() {\n this.#ctx = null;\n this.#keymap = [];\n this.setCtx = (ctx) => {\n this.#ctx = ctx;\n };\n this.add = (keymap2) => {\n this.#keymap.push(keymap2);\n return () => {\n this.#keymap = this.#keymap.filter((item) => item !== keymap2);\n };\n };\n this.addObjectKeymap = (keymaps) => {\n const remove = [];\n Object.entries(keymaps).forEach(([key2, command]) => {\n if (typeof command === \"function\") {\n const keymapItem = {\n key: key2,\n onRun: () => command\n };\n this.#keymap.push(keymapItem);\n remove.push(() => {\n this.#keymap = this.#keymap.filter((item) => item !== keymapItem);\n });\n } else {\n this.#keymap.push(command);\n remove.push(() => {\n this.#keymap = this.#keymap.filter((item) => item !== command);\n });\n }\n });\n return () => {\n remove.forEach((fn) => fn());\n };\n };\n this.addBaseKeymap = () => {\n const base = overrideBaseKeymap(baseKeymap);\n return this.addObjectKeymap(base);\n };\n this.build = () => {\n const keymap2 = {};\n this.#keymap.forEach((item) => {\n keymap2[item.key] = [...keymap2[item.key] || [], item];\n });\n const output = Object.fromEntries(\n Object.entries(keymap2).map(([key2, items]) => {\n const sortedItems = items.sort(\n (a, b) => (b.priority ?? 50) - (a.priority ?? 50)\n );\n const command = (state, dispatch, view) => {\n const ctx = this.#ctx;\n if (ctx == null) throw ctxCallOutOfScope();\n const commands2 = sortedItems.map((item) => item.onRun(ctx));\n const chained = chainCommands(...commands2);\n return chained(state, dispatch, view);\n };\n return [key2, command];\n })\n );\n return output;\n };\n }\n #ctx;\n #keymap;\n get ctx() {\n return this.#ctx;\n }\n}\nconst keymapCtx = createSlice(new KeymapManager(), \"keymap\");\nconst keymapTimerCtx = createSlice([SchemaReady], \"keymapTimer\");\nconst KeymapReady = createTimer(\"KeymapReady\");\nconst keymap = (ctx) => {\n const km = new KeymapManager();\n km.setCtx(ctx);\n ctx.inject(keymapCtx, km).inject(keymapTimerCtx, [SchemaReady]).record(KeymapReady);\n return async () => {\n await ctx.waitTimers(keymapTimerCtx);\n ctx.done(KeymapReady);\n return () => {\n ctx.remove(keymapCtx).remove(keymapTimerCtx).clearTimer(KeymapReady);\n };\n };\n};\nconst ParserReady = createTimer(\"ParserReady\");\nconst outOfScope$1 = (() => {\n throw ctxCallOutOfScope();\n});\nconst parserCtx = createSlice(outOfScope$1, \"parser\");\nconst parserTimerCtx = createSlice([], \"parserTimer\");\nconst parser = (ctx) => {\n ctx.inject(parserCtx, outOfScope$1).inject(parserTimerCtx, [SchemaReady]).record(ParserReady);\n return async () => {\n await ctx.waitTimers(parserTimerCtx);\n const remark = ctx.get(remarkCtx);\n const schema2 = ctx.get(schemaCtx);\n ctx.set(parserCtx, ParserState.create(schema2, remark));\n ctx.done(ParserReady);\n return () => {\n ctx.remove(parserCtx).remove(parserTimerCtx).clearTimer(ParserReady);\n };\n };\n};\nwithMeta(parser, {\n displayName: \"Parser\"\n});\nconst SerializerReady = createTimer(\"SerializerReady\");\nconst serializerTimerCtx = createSlice(\n [],\n \"serializerTimer\"\n);\nconst outOfScope = (() => {\n throw ctxCallOutOfScope();\n});\nconst serializerCtx = createSlice(\n outOfScope,\n \"serializer\"\n);\nconst serializer = (ctx) => {\n ctx.inject(serializerCtx, outOfScope).inject(serializerTimerCtx, [SchemaReady]).record(SerializerReady);\n return async () => {\n await ctx.waitTimers(serializerTimerCtx);\n const remark = ctx.get(remarkCtx);\n const schema2 = ctx.get(schemaCtx);\n ctx.set(serializerCtx, SerializerState.create(schema2, remark));\n ctx.done(SerializerReady);\n return () => {\n ctx.remove(serializerCtx).remove(serializerTimerCtx).clearTimer(SerializerReady);\n };\n };\n};\nwithMeta(serializer, {\n displayName: \"Serializer\"\n});\nconst defaultValueCtx = createSlice(\"\", \"defaultValue\");\nconst editorStateOptionsCtx = createSlice(\n (x) => x,\n \"stateOptions\"\n);\nconst editorStateTimerCtx = createSlice(\n [],\n \"editorStateTimer\"\n);\nconst EditorStateReady = createTimer(\"EditorStateReady\");\nfunction getDoc(defaultValue, parser2, schema2) {\n if (typeof defaultValue === \"string\") return parser2(defaultValue);\n if (defaultValue.type === \"html\")\n return DOMParser.fromSchema(schema2).parse(defaultValue.dom);\n if (defaultValue.type === \"json\")\n return Node.fromJSON(schema2, defaultValue.value);\n throw docTypeError(defaultValue);\n}\nconst key$1 = new PluginKey(\"MILKDOWN_STATE_TRACKER\");\nconst editorState = (ctx) => {\n ctx.inject(defaultValueCtx, \"\").inject(editorStateCtx, {}).inject(editorStateOptionsCtx, (x) => x).inject(editorStateTimerCtx, [\n ParserReady,\n SerializerReady,\n CommandsReady,\n KeymapReady\n ]).record(EditorStateReady);\n return async () => {\n await ctx.waitTimers(editorStateTimerCtx);\n const schema2 = ctx.get(schemaCtx);\n const parser2 = ctx.get(parserCtx);\n const rules = ctx.get(inputRulesCtx);\n const optionsOverride = ctx.get(editorStateOptionsCtx);\n const prosePlugins = ctx.get(prosePluginsCtx);\n const defaultValue = ctx.get(defaultValueCtx);\n const doc = getDoc(defaultValue, parser2, schema2);\n const km = ctx.get(keymapCtx);\n const disposeBaseKeymap = km.addBaseKeymap();\n const plugins = [\n ...prosePlugins,\n new Plugin({\n key: key$1,\n state: {\n init: () => {\n },\n apply: (_tr, _value, _oldState, newState) => {\n ctx.set(editorStateCtx, newState);\n }\n }\n }),\n customInputRules({ rules }),\n keymap$1(km.build())\n ];\n ctx.set(prosePluginsCtx, plugins);\n const options = optionsOverride({\n schema: schema2,\n doc,\n plugins\n });\n const state = EditorState.create(options);\n ctx.set(editorStateCtx, state);\n ctx.done(EditorStateReady);\n return () => {\n disposeBaseKeymap();\n ctx.remove(defaultValueCtx).remove(editorStateCtx).remove(editorStateOptionsCtx).remove(editorStateTimerCtx).clearTimer(EditorStateReady);\n };\n };\n};\nwithMeta(editorState, {\n displayName: \"EditorState\"\n});\nconst pasteRulesCtx = createSlice([], \"pasteRule\");\nconst pasteRulesTimerCtx = createSlice([SchemaReady], \"pasteRuleTimer\");\nconst PasteRulesReady = createTimer(\"PasteRuleReady\");\nconst pasteRule = (ctx) => {\n ctx.inject(pasteRulesCtx, []).inject(pasteRulesTimerCtx, [SchemaReady]).record(PasteRulesReady);\n return async () => {\n await ctx.waitTimers(pasteRulesTimerCtx);\n ctx.done(PasteRulesReady);\n return () => {\n ctx.remove(pasteRulesCtx).remove(pasteRulesTimerCtx).clearTimer(PasteRulesReady);\n };\n };\n};\nwithMeta(pasteRule, {\n displayName: \"PasteRule\"\n});\nconst EditorViewReady = createTimer(\"EditorViewReady\");\nconst editorViewTimerCtx = createSlice(\n [],\n \"editorViewTimer\"\n);\nconst editorViewOptionsCtx = createSlice(\n {},\n \"editorViewOptions\"\n);\nconst rootCtx = createSlice(null, \"root\");\nconst rootDOMCtx = createSlice(null, \"rootDOM\");\nconst rootAttrsCtx = createSlice(\n {},\n \"rootAttrs\"\n);\nfunction createViewContainer(root, ctx) {\n const container = document.createElement(\"div\");\n container.className = \"milkdown\";\n root.appendChild(container);\n ctx.set(rootDOMCtx, container);\n const attrs = ctx.get(rootAttrsCtx);\n Object.entries(attrs).forEach(\n ([key2, value]) => container.setAttribute(key2, value)\n );\n return container;\n}\nfunction prepareViewDom(dom) {\n dom.classList.add(\"editor\");\n dom.setAttribute(\"role\", \"textbox\");\n}\nconst key = new PluginKey(\"MILKDOWN_VIEW_CLEAR\");\nconst editorView = (ctx) => {\n ctx.inject(rootCtx, document.body).inject(editorViewCtx, {}).inject(editorViewOptionsCtx, {}).inject(rootDOMCtx, null).inject(rootAttrsCtx, {}).inject(editorViewTimerCtx, [EditorStateReady, PasteRulesReady]).record(EditorViewReady);\n return async () => {\n await ctx.wait(InitReady);\n const root = ctx.get(rootCtx) || document.body;\n const el = typeof root === \"string\" ? document.querySelector(root) : root;\n ctx.update(prosePluginsCtx, (xs) => [\n new Plugin({\n key,\n view: (editorView2) => {\n const container = el ? createViewContainer(el, ctx) : void 0;\n const handleDOM = () => {\n if (container && el) {\n const editor = editorView2.dom;\n el.replaceChild(container, editor);\n container.appendChild(editor);\n }\n };\n handleDOM();\n return {\n destroy: () => {\n if (container?.parentNode)\n container?.parentNode.replaceChild(editorView2.dom, container);\n container?.remove();\n }\n };\n }\n }),\n ...xs\n ]);\n await ctx.waitTimers(editorViewTimerCtx);\n const state = ctx.get(editorStateCtx);\n const options = ctx.get(editorViewOptionsCtx);\n const nodeViews = Object.fromEntries(ctx.get(nodeViewCtx));\n const markViews = Object.fromEntries(ctx.get(markViewCtx));\n const view = new EditorView(el, {\n state,\n nodeViews,\n markViews,\n transformPasted: (slice, view2, isPlainText) => {\n ctx.get(pasteRulesCtx).sort((a, b) => (b.priority ?? 50) - (a.priority ?? 50)).map((rule) => rule.run).forEach((runner) => {\n slice = runner(slice, view2, isPlainText);\n });\n return slice;\n },\n ...options\n });\n prepareViewDom(view.dom);\n ctx.set(editorViewCtx, view);\n ctx.done(EditorViewReady);\n return () => {\n view?.destroy();\n ctx.remove(rootCtx).remove(editorViewCtx).remove(editorViewOptionsCtx).remove(rootDOMCtx).remove(rootAttrsCtx).remove(editorViewTimerCtx).clearTimer(EditorViewReady);\n };\n };\n};\nwithMeta(editorView, {\n displayName: \"EditorView\"\n});\nvar EditorStatus = /* @__PURE__ */ ((EditorStatus2) => {\n EditorStatus2[\"Idle\"] = \"Idle\";\n EditorStatus2[\"OnCreate\"] = \"OnCreate\";\n EditorStatus2[\"Created\"] = \"Created\";\n EditorStatus2[\"OnDestroy\"] = \"OnDestroy\";\n EditorStatus2[\"Destroyed\"] = \"Destroyed\";\n return EditorStatus2;\n})(EditorStatus || {});\nclass Editor {\n constructor() {\n this.#enableInspector = false;\n this.#status = \"Idle\";\n this.#configureList = [];\n this.#onStatusChange = () => void 0;\n this.#container = new Container();\n this.#clock = new Clock();\n this.#usrPluginStore = /* @__PURE__ */ new Map();\n this.#sysPluginStore = /* @__PURE__ */ new Map();\n this.#ctx = new Ctx(this.#container, this.#clock);\n this.#loadInternal = () => {\n const configPlugin = config(async (ctx) => {\n await Promise.all(\n this.#configureList.map((fn) => Promise.resolve(fn(ctx)))\n );\n });\n const internalPlugins = [\n schema,\n parser,\n serializer,\n commands,\n keymap,\n pasteRule,\n editorState,\n editorView,\n init(this),\n configPlugin\n ];\n this.#prepare(internalPlugins, this.#sysPluginStore);\n };\n this.#prepare = (plugins, store) => {\n plugins.forEach((plugin) => {\n const ctx = this.#ctx.produce(\n this.#enableInspector ? plugin.meta : void 0\n );\n const handler = plugin(ctx);\n store.set(plugin, { ctx, handler, cleanup: void 0 });\n });\n };\n this.#cleanup = (plugins, remove = false) => {\n return Promise.all(\n [plugins].flat().map(async (plugin) => {\n const loader = this.#usrPluginStore.get(plugin);\n const cleanup = loader?.cleanup;\n if (remove) this.#usrPluginStore.delete(plugin);\n else\n this.#usrPluginStore.set(plugin, {\n ctx: void 0,\n handler: void 0,\n cleanup: void 0\n });\n if (typeof cleanup === \"function\") return cleanup();\n return cleanup;\n })\n );\n };\n this.#cleanupInternal = async () => {\n await Promise.all(\n [...this.#sysPluginStore.entries()].map(async ([_, { cleanup }]) => {\n if (typeof cleanup === \"function\") return cleanup();\n return cleanup;\n })\n );\n this.#sysPluginStore.clear();\n };\n this.#setStatus = (status) => {\n this.#status = status;\n this.#onStatusChange(status);\n };\n this.#loadPluginInStore = (store) => {\n return [...store.entries()].map(async ([key2, loader]) => {\n const { ctx, handler } = loader;\n if (!handler) return;\n const cleanup = await handler();\n store.set(key2, { ctx, handler, cleanup });\n });\n };\n this.enableInspector = (enable = true) => {\n this.#enableInspector = enable;\n return this;\n };\n this.onStatusChange = (onChange) => {\n this.#onStatusChange = onChange;\n return this;\n };\n this.config = (configure) => {\n this.#configureList.push(configure);\n return this;\n };\n this.removeConfig = (configure) => {\n this.#configureList = this.#configureList.filter((x) => x !== configure);\n return this;\n };\n this.use = (plugins) => {\n const _plugins = [plugins].flat();\n _plugins.flat().forEach((plugin) => {\n this.#usrPluginStore.set(plugin, {\n ctx: void 0,\n handler: void 0,\n cleanup: void 0\n });\n });\n if (this.#status === \"Created\")\n this.#prepare(_plugins, this.#usrPluginStore);\n return this;\n };\n this.remove = async (plugins) => {\n if (this.#status === \"OnCreate\") {\n console.warn(\n \"[Milkdown]: You are trying to remove plugins when the editor is creating, this is not recommended, please check your code.\"\n );\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(this.remove(plugins));\n }, 50);\n });\n }\n await this.#cleanup([plugins].flat(), true);\n return this;\n };\n this.create = async () => {\n if (this.#status === \"OnCreate\") return this;\n if (this.#status === \"Created\") await this.destroy();\n this.#setStatus(\n \"OnCreate\"\n /* OnCreate */\n );\n this.#loadInternal();\n this.#prepare([...this.#usrPluginStore.keys()], this.#usrPluginStore);\n await Promise.all(\n [\n this.#loadPluginInStore(this.#sysPluginStore),\n this.#loadPluginInStore(this.#usrPluginStore)\n ].flat()\n );\n this.#setStatus(\n \"Created\"\n /* Created */\n );\n return this;\n };\n this.destroy = async (clearPlugins = false) => {\n if (this.#status === \"Destroyed\" || this.#status === \"OnDestroy\")\n return this;\n if (this.#status === \"OnCreate\") {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(this.destroy(clearPlugins));\n }, 50);\n });\n }\n if (clearPlugins) this.#configureList = [];\n this.#setStatus(\n \"OnDestroy\"\n /* OnDestroy */\n );\n await this.#cleanup([...this.#usrPluginStore.keys()], clearPlugins);\n await this.#cleanupInternal();\n this.#setStatus(\n \"Destroyed\"\n /* Destroyed */\n );\n return this;\n };\n this.action = (action) => action(this.#ctx);\n this.inspect = () => {\n if (!this.#enableInspector) {\n console.warn(\n \"[Milkdown]: You are trying to collect inspection when inspector is disabled, please enable inspector by `editor.enableInspector()` first.\"\n );\n return [];\n }\n return [...this.#sysPluginStore.values(), ...this.#usrPluginStore.values()].map(({ ctx }) => ctx?.inspector?.read()).filter((x) => Boolean(x));\n };\n }\n /// Create a new editor instance.\n static make() {\n return new Editor();\n }\n #enableInspector;\n #status;\n #configureList;\n #onStatusChange;\n #container;\n #clock;\n #usrPluginStore;\n #sysPluginStore;\n #ctx;\n #loadInternal;\n #prepare;\n #cleanup;\n #cleanupInternal;\n #setStatus;\n #loadPluginInStore;\n /// Get the ctx of the editor.\n get ctx() {\n return this.#ctx;\n }\n /// Get the status of the editor.\n get status() {\n return this.#status;\n }\n}\nexport {\n CommandManager,\n CommandsReady,\n ConfigReady,\n Editor,\n EditorStateReady,\n EditorStatus,\n EditorViewReady,\n InitReady,\n KeymapManager,\n KeymapReady,\n ParserReady,\n PasteRulesReady,\n SchemaReady,\n SerializerReady,\n commands,\n commandsCtx,\n commandsTimerCtx,\n config,\n createCmdKey,\n defaultValueCtx,\n editorCtx,\n editorState,\n editorStateCtx,\n editorStateOptionsCtx,\n editorStateTimerCtx,\n editorView,\n editorViewCtx,\n editorViewOptionsCtx,\n editorViewTimerCtx,\n getDoc,\n init,\n initTimerCtx,\n inputRulesCtx,\n keymap,\n keymapCtx,\n keymapTimerCtx,\n markViewCtx,\n marksCtx,\n nodeViewCtx,\n nodesCtx,\n parser,\n parserCtx,\n parserTimerCtx,\n pasteRule,\n pasteRulesCtx,\n pasteRulesTimerCtx,\n prosePluginsCtx,\n remarkCtx,\n remarkPluginsCtx,\n remarkStringifyOptionsCtx,\n rootAttrsCtx,\n rootCtx,\n rootDOMCtx,\n schema,\n schemaCtx,\n schemaTimerCtx,\n serializer,\n serializerCtx,\n serializerTimerCtx\n};\n//# sourceMappingURL=index.js.map\n","/* @ts-self-types=\"./index.d.ts\" */\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << Math.log2(alphabet.length - 1)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step | 0\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length >= size) return id\n }\n }\n }\n}\nexport let customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size | 0, random)\nexport let nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array((size |= 0)))\n while (size--) {\n id += scopedUrlAlphabet[bytes[size] & 63]\n }\n return id\n}\n","import { createCmdKey, commandsTimerCtx, CommandsReady, commandsCtx, editorStateTimerCtx, SchemaReady, inputRulesCtx, pasteRulesTimerCtx, pasteRulesCtx, schemaCtx, schemaTimerCtx, marksCtx, nodesCtx, prosePluginsCtx, KeymapReady, keymapCtx, editorViewTimerCtx, nodeViewCtx, markViewCtx, InitReady, remarkPluginsCtx, editorViewCtx, serializerCtx, parserCtx, editorStateOptionsCtx } from \"@milkdown/core\";\nimport { createTimer, createSlice } from \"@milkdown/ctx\";\nimport { customAlphabet } from \"nanoid\";\nimport { missingMarkInSchema, missingNodeInSchema } from \"@milkdown/exception\";\nimport { NodeType, DOMSerializer, Slice, DOMParser } from \"@milkdown/prose/model\";\nimport { isTextOnlySlice } from \"@milkdown/prose\";\nimport { EditorState } from \"@milkdown/prose/state\";\nconst nanoid = customAlphabet(\"abcedfghicklmn\", 10);\nfunction addTimer(runner, injectTo, timerName) {\n const timer = createTimer(timerName || nanoid());\n let doneCalled = false;\n const plugin = (ctx) => {\n ctx.record(timer);\n ctx.update(injectTo, (x) => x.concat(timer));\n return async () => {\n const done = () => {\n ctx.done(timer);\n doneCalled = true;\n };\n const cleanup = await runner(ctx, plugin, done);\n if (!doneCalled) ctx.done(timer);\n return () => {\n ctx.update(injectTo, (x) => x.filter((y) => y !== timer));\n ctx.clearTimer(timer);\n if (cleanup) {\n const result = cleanup();\n if (result && \"then\" in result) {\n result.catch(console.error);\n }\n }\n };\n };\n };\n plugin.timer = timer;\n return plugin;\n}\nfunction $command(key, cmd) {\n const cmdKey = createCmdKey(key);\n const plugin = (ctx) => async () => {\n plugin.key = cmdKey;\n await ctx.wait(CommandsReady);\n const command = cmd(ctx);\n ctx.get(commandsCtx).create(cmdKey, command);\n plugin.run = (payload) => ctx.get(commandsCtx).call(key, payload);\n return () => {\n ctx.get(commandsCtx).remove(cmdKey);\n };\n };\n return plugin;\n}\nfunction $commandAsync(key, cmd, timerName) {\n const cmdKey = createCmdKey(key);\n return addTimer(\n async (ctx, plugin) => {\n await ctx.wait(CommandsReady);\n const command = await cmd(ctx);\n ctx.get(commandsCtx).create(cmdKey, command);\n plugin.run = (payload) => ctx.get(commandsCtx).call(key, payload);\n plugin.key = cmdKey;\n return () => {\n ctx.get(commandsCtx).remove(cmdKey);\n };\n },\n commandsTimerCtx,\n timerName\n );\n}\nfunction $inputRule(inputRule) {\n const plugin = (ctx) => async () => {\n await ctx.wait(SchemaReady);\n const ir = inputRule(ctx);\n ctx.update(inputRulesCtx, (irs) => [...irs, ir]);\n plugin.inputRule = ir;\n return () => {\n ctx.update(inputRulesCtx, (irs) => irs.filter((x) => x !== ir));\n };\n };\n return plugin;\n}\nfunction $inputRuleAsync(inputRule, timerName) {\n return addTimer(\n async (ctx, plugin) => {\n await ctx.wait(SchemaReady);\n const ir = await inputRule(ctx);\n ctx.update(inputRulesCtx, (irs) => [...irs, ir]);\n plugin.inputRule = ir;\n return () => {\n ctx.update(inputRulesCtx, (irs) => irs.filter((x) => x !== ir));\n };\n },\n editorStateTimerCtx,\n timerName\n );\n}\nfunction $pasteRule(pasteRule) {\n const plugin = (ctx) => async () => {\n await ctx.wait(SchemaReady);\n const pr = pasteRule(ctx);\n ctx.update(pasteRulesCtx, (prs) => [...prs, pr]);\n plugin.pasteRule = pr;\n return () => {\n ctx.update(pasteRulesCtx, (prs) => prs.filter((x) => x !== pr));\n };\n };\n return plugin;\n}\nfunction $pasteRuleAsync(pasteRule, timerName) {\n return addTimer(\n async (ctx, plugin) => {\n await ctx.wait(SchemaReady);\n const pr = await pasteRule(ctx);\n ctx.update(pasteRulesCtx, (prs) => [...prs, pr]);\n plugin.pasteRule = pr;\n return () => {\n ctx.update(pasteRulesCtx, (prs) => prs.filter((x) => x !== pr));\n };\n },\n pasteRulesTimerCtx,\n timerName\n );\n}\nfunction $mark(id, schema) {\n const plugin = (ctx) => async () => {\n const markSchema = schema(ctx);\n ctx.update(marksCtx, (ns) => [\n ...ns.filter((n) => n[0] !== id),\n [id, markSchema]\n ]);\n plugin.id = id;\n plugin.schema = markSchema;\n return () => {\n ctx.update(marksCtx, (ns) => ns.filter(([x]) => x !== id));\n };\n };\n plugin.type = (ctx) => {\n const markType = ctx.get(schemaCtx).marks[id];\n if (!markType) throw missingMarkInSchema(id);\n return markType;\n };\n return plugin;\n}\nfunction $markAsync(id, schema, timerName) {\n const plugin = addTimer(\n async (ctx, plugin2, done) => {\n const markSchema = await schema(ctx);\n ctx.update(marksCtx, (ns) => [\n ...ns.filter((n) => n[0] !== id),\n [id, markSchema]\n ]);\n plugin2.id = id;\n plugin2.schema = markSchema;\n done();\n return () => {\n ctx.update(marksCtx, (ns) => ns.filter(([x]) => x !== id));\n };\n },\n schemaTimerCtx,\n timerName\n );\n plugin.type = (ctx) => {\n const markType = ctx.get(schemaCtx).marks[id];\n if (!markType) throw missingMarkInSchema(id);\n return markType;\n };\n return plugin;\n}\nfunction $node(id, schema) {\n const plugin = (ctx) => async () => {\n const nodeSchema = schema(ctx);\n ctx.update(nodesCtx, (ns) => [\n ...ns.filter((n) => n[0] !== id),\n [id, nodeSchema]\n ]);\n plugin.id = id;\n plugin.schema = nodeSchema;\n return () => {\n ctx.update(nodesCtx, (ns) => ns.filter(([x]) => x !== id));\n };\n };\n plugin.type = (ctx) => {\n const nodeType = ctx.get(schemaCtx).nodes[id];\n if (!nodeType) throw missingNodeInSchema(id);\n return nodeType;\n };\n return plugin;\n}\nfunction $nodeAsync(id, schema, timerName) {\n const plugin = addTimer(\n async (ctx, plugin2, done) => {\n const nodeSchema = await schema(ctx);\n ctx.update(nodesCtx, (ns) => [\n ...ns.filter((n) => n[0] !== id),\n [id, nodeSchema]\n ]);\n plugin2.id = id;\n plugin2.schema = nodeSchema;\n done();\n return () => {\n ctx.update(nodesCtx, (ns) => ns.filter(([x]) => x !== id));\n };\n },\n schemaTimerCtx,\n timerName\n );\n plugin.type = (ctx) => {\n const nodeType = ctx.get(schemaCtx).nodes[id];\n if (!nodeType) throw missingNodeInSchema(id);\n return nodeType;\n };\n return plugin;\n}\nfunction $prose(prose) {\n let prosePlugin;\n const plugin = (ctx) => async () => {\n await ctx.wait(SchemaReady);\n prosePlugin = prose(ctx);\n ctx.update(prosePluginsCtx, (ps) => [...ps, prosePlugin]);\n return () => {\n ctx.update(prosePluginsCtx, (ps) => ps.filter((x) => x !== prosePlugin));\n };\n };\n plugin.plugin = () => prosePlugin;\n plugin.key = () => prosePlugin.spec.key;\n return plugin;\n}\nfunction $proseAsync(prose, timerName) {\n let prosePlugin;\n const plugin = addTimer(\n async (ctx) => {\n await ctx.wait(SchemaReady);\n prosePlugin = await prose(ctx);\n ctx.update(prosePluginsCtx, (ps) => [...ps, prosePlugin]);\n return () => {\n ctx.update(prosePluginsCtx, (ps) => ps.filter((x) => x !== prosePlugin));\n };\n },\n editorStateTimerCtx,\n timerName\n );\n plugin.plugin = () => prosePlugin;\n plugin.key = () => prosePlugin.spec.key;\n return plugin;\n}\nfunction $shortcut(shortcut) {\n const plugin = (ctx) => async () => {\n await ctx.wait(KeymapReady);\n const km = ctx.get(keymapCtx);\n const keymap = shortcut(ctx);\n const dispose = km.addObjectKeymap(keymap);\n plugin.keymap = keymap;\n return () => {\n dispose();\n };\n };\n return plugin;\n}\nfunction $shortcutAsync(shortcut, timerName) {\n return addTimer(\n async (ctx, plugin) => {\n await ctx.wait(KeymapReady);\n const km = ctx.get(keymapCtx);\n const keymap = await shortcut(ctx);\n const dispose = km.addObjectKeymap(keymap);\n plugin.keymap = keymap;\n return () => {\n dispose();\n };\n },\n editorStateTimerCtx,\n timerName\n );\n}\nfunction $view(type, view) {\n const plugin = (ctx) => async () => {\n await ctx.wait(SchemaReady);\n const v = view(ctx);\n if (type.type(ctx) instanceof NodeType)\n ctx.update(nodeViewCtx, (ps) => [\n ...ps,\n [type.id, v]\n ]);\n else\n ctx.update(markViewCtx, (ps) => [\n ...ps,\n [type.id, v]\n ]);\n plugin.view = v;\n plugin.type = type;\n return () => {\n if (type.type(ctx) instanceof NodeType)\n ctx.update(nodeViewCtx, (ps) => ps.filter((x) => x[0] !== type.id));\n else ctx.update(markViewCtx, (ps) => ps.filter((x) => x[0] !== type.id));\n };\n };\n return plugin;\n}\nfunction $viewAsync(type, view, timerName) {\n return addTimer(\n async (ctx, plugin) => {\n await ctx.wait(SchemaReady);\n const v = await view(ctx);\n if (type.type(ctx) instanceof NodeType)\n ctx.update(nodeViewCtx, (ps) => [\n ...ps,\n [type.id, v]\n ]);\n else\n ctx.update(markViewCtx, (ps) => [\n ...ps,\n [type.id, v]\n ]);\n plugin.view = v;\n plugin.type = type;\n return () => {\n if (type.type(ctx) instanceof NodeType)\n ctx.update(nodeViewCtx, (ps) => ps.filter((x) => x[0] !== type.id));\n else ctx.update(markViewCtx, (ps) => ps.filter((x) => x[0] !== type.id));\n };\n },\n editorViewTimerCtx,\n timerName\n );\n}\nfunction $ctx(value, name) {\n const slice = createSlice(value, name);\n const plugin = (ctx) => {\n ctx.inject(slice);\n return () => {\n return () => {\n ctx.remove(slice);\n };\n };\n };\n plugin.key = slice;\n return plugin;\n}\nfunction $nodeSchema(id, schema) {\n const schemaCtx2 = $ctx(schema, id);\n const nodeSchema = $node(id, (ctx) => {\n const userSchema = ctx.get(schemaCtx2.key);\n return userSchema(ctx);\n });\n const result = [schemaCtx2, nodeSchema];\n result.id = nodeSchema.id;\n result.node = nodeSchema;\n result.type = (ctx) => nodeSchema.type(ctx);\n result.ctx = schemaCtx2;\n result.key = schemaCtx2.key;\n result.extendSchema = (handler) => {\n const nextSchema = handler(schema);\n return $nodeSchema(id, nextSchema);\n };\n return result;\n}\nfunction $markSchema(id, schema) {\n const schemaCtx2 = $ctx(schema, id);\n const markSchema = $mark(id, (ctx) => {\n const userSchema = ctx.get(schemaCtx2.key);\n return userSchema(ctx);\n });\n const result = [schemaCtx2, markSchema];\n result.id = markSchema.id;\n result.mark = markSchema;\n result.type = (ctx) => markSchema.type(ctx);\n result.ctx = schemaCtx2;\n result.key = schemaCtx2.key;\n result.extendSchema = (handler) => {\n const nextSchema = handler(schema);\n return $markSchema(id, nextSchema);\n };\n return result;\n}\nfunction $useKeymap(name, userKeymap) {\n const key = Object.fromEntries(\n Object.entries(userKeymap).map(\n ([key2, { shortcuts: shortcuts2, priority }]) => {\n return [key2, { shortcuts: shortcuts2, priority }];\n }\n )\n );\n const keymapDef = $ctx(key, `${name}Keymap`);\n const shortcuts = $shortcut((ctx) => {\n const keys = ctx.get(keymapDef.key);\n const keymapTuple = Object.entries(userKeymap).flatMap(\n ([key2, { command }]) => {\n const target = keys[key2];\n const targetKeys = [target.shortcuts].flat();\n const priority = target.priority;\n return targetKeys.map(\n (targetKey) => [\n targetKey,\n {\n key: targetKey,\n onRun: command,\n priority\n }\n ]\n );\n }\n );\n return Object.fromEntries(keymapTuple);\n });\n const result = [keymapDef, shortcuts];\n result.ctx = keymapDef;\n result.shortcuts = shortcuts;\n result.key = keymapDef.key;\n result.keymap = shortcuts.keymap;\n return result;\n}\nconst $nodeAttr = (name, value = () => ({})) => $ctx(value, `${name}Attr`);\nconst $markAttr = (name, value = () => ({})) => $ctx(value, `${name}Attr`);\nfunction $remark(id, remark, initialOptions) {\n const options = $ctx(initialOptions ?? {}, id);\n const plugin = (ctx) => async () => {\n await ctx.wait(InitReady);\n const re = remark(ctx);\n const remarkPlugin = {\n plugin: re,\n options: ctx.get(options.key)\n };\n ctx.update(remarkPluginsCtx, (rp) => [...rp, remarkPlugin]);\n return () => {\n ctx.update(remarkPluginsCtx, (rp) => rp.filter((x) => x !== remarkPlugin));\n };\n };\n const result = [options, plugin];\n result.id = id;\n result.plugin = plugin;\n result.options = options;\n return result;\n}\nfunction callCommand(slice, payload) {\n return (ctx) => {\n return ctx.get(commandsCtx).call(slice, payload);\n };\n}\nfunction forceUpdate() {\n return (ctx) => {\n const view = ctx.get(editorViewCtx);\n const { tr } = view.state;\n const nextTr = Object.assign(Object.create(tr), tr).setTime(Date.now());\n return view.dispatch(nextTr);\n };\n}\nfunction getHTML() {\n return (ctx) => {\n const div = document.createElement(\"div\");\n const schema = ctx.get(schemaCtx);\n const view = ctx.get(editorViewCtx);\n const fragment = DOMSerializer.fromSchema(schema).serializeFragment(\n view.state.doc.content\n );\n div.appendChild(fragment);\n return div.innerHTML;\n };\n}\nfunction getMarkdown(range) {\n return (ctx) => {\n const view = ctx.get(editorViewCtx);\n const schema = ctx.get(schemaCtx);\n const serializer = ctx.get(serializerCtx);\n if (!range) {\n return serializer(view.state.doc);\n }\n const state = view.state;\n const slice = state.doc.slice(range.from, range.to, true);\n const doc = schema.topNodeType.createAndFill(null, slice.content);\n if (!doc) {\n console.error(\"No document found\");\n return \"\";\n }\n return serializer(doc);\n };\n}\nfunction insert(markdown, inline = false) {\n return (ctx) => {\n const view = ctx.get(editorViewCtx);\n const parser = ctx.get(parserCtx);\n const doc = parser(markdown);\n if (!doc) return;\n if (!inline) {\n const contentSlice = view.state.selection.content();\n return view.dispatch(\n view.state.tr.replaceSelection(\n new Slice(doc.content, contentSlice.openStart, contentSlice.openEnd)\n ).scrollIntoView()\n );\n }\n const schema = ctx.get(schemaCtx);\n const dom = DOMSerializer.fromSchema(schema).serializeFragment(doc.content);\n const domParser = DOMParser.fromSchema(schema);\n const slice = domParser.parseSlice(dom);\n const node = isTextOnlySlice(slice);\n if (node) {\n view.dispatch(view.state.tr.replaceSelectionWith(node, true));\n return;\n }\n view.dispatch(view.state.tr.replaceSelection(slice));\n };\n}\nfunction outline() {\n return (ctx) => {\n const view = ctx.get(editorViewCtx);\n const data = [];\n const doc = view.state.doc;\n doc.descendants((node) => {\n if (node.type.name === \"heading\" && node.attrs.level)\n data.push({\n text: node.textContent,\n level: node.attrs.level,\n id: node.attrs.id\n });\n });\n return data;\n };\n}\nfunction replaceAll(markdown, flush = false) {\n return (ctx) => {\n const view = ctx.get(editorViewCtx);\n const parser = ctx.get(parserCtx);\n const doc = parser(markdown);\n if (!doc) return;\n if (!flush) {\n const { state: state2 } = view;\n return view.dispatch(\n state2.tr.replace(\n 0,\n state2.doc.content.size,\n new Slice(doc.content, 0, 0)\n )\n );\n }\n const schema = ctx.get(schemaCtx);\n const options = ctx.get(editorStateOptionsCtx);\n const plugins = ctx.get(prosePluginsCtx);\n const state = EditorState.create({\n schema,\n doc,\n plugins,\n ...options\n });\n view.updateState(state);\n };\n}\nfunction setAttr(pos, update) {\n return (ctx) => {\n const view = ctx.get(editorViewCtx);\n const { tr } = view.state;\n const node = tr.doc.nodeAt(pos);\n if (!node) return;\n const nextAttr = update(node.attrs);\n return view.dispatch(tr.setNodeMarkup(pos, void 0, nextAttr));\n };\n}\nfunction markdownToSlice(markdown) {\n return (ctx) => {\n const parser = ctx.get(parserCtx);\n const doc = parser(markdown);\n const schema = ctx.get(schemaCtx);\n const dom = DOMSerializer.fromSchema(schema).serializeFragment(doc.content);\n const domParser = DOMParser.fromSchema(schema);\n const slice = domParser.parseSlice(dom);\n return slice;\n };\n}\nfunction insertPos(markdown, pos, inline = false) {\n return (ctx) => {\n const slice = markdownToSlice(markdown)(ctx);\n const view = ctx.get(editorViewCtx);\n const toPos = view.state.doc.resolve(pos);\n const min = 0;\n const max = view.state.doc.content.size;\n const resolved = inline ? toPos.pos : toPos.after(toPos.depth - 1);\n const to = Math.min(Math.max(resolved, min), max);\n view.dispatch(view.state.tr.replace(resolved, to, slice));\n };\n}\nfunction replaceRange(markdown, range) {\n return (ctx) => {\n const view = ctx.get(editorViewCtx);\n const slice = markdownToSlice(markdown)(ctx);\n view.dispatch(view.state.tr.replace(range.from, range.to, slice));\n };\n}\nconst pipe = (...funcs) => {\n const length = funcs.length;\n let index = length;\n while (index--) {\n if (typeof funcs[index] !== \"function\")\n throw new TypeError(\"Expected a function\");\n }\n return (...args) => {\n let index2 = 0;\n let result = length ? funcs[index2](...args) : args[0];\n while (++index2 < length) result = funcs[index2](result);\n return result;\n };\n};\nexport {\n $command,\n $commandAsync,\n $ctx,\n $inputRule,\n $inputRuleAsync,\n $mark,\n $markAsync,\n $markAttr,\n $markSchema,\n $node,\n $nodeAsync,\n $nodeAttr,\n $nodeSchema,\n $pasteRule,\n $pasteRuleAsync,\n $prose,\n $proseAsync,\n $remark,\n $shortcut,\n $shortcutAsync,\n $useKeymap,\n $view,\n $viewAsync,\n addTimer,\n callCommand,\n forceUpdate,\n getHTML,\n getMarkdown,\n insert,\n insertPos,\n markdownToSlice,\n nanoid,\n outline,\n pipe,\n replaceAll,\n replaceRange,\n setAttr\n};\n//# sourceMappingURL=index.js.map\n","import { schemaCtx, editorViewOptionsCtx, serializerCtx, parserCtx } from \"@milkdown/core\";\nimport { getNodeFromSchema, isTextOnlySlice } from \"@milkdown/prose\";\nimport { DOMParser, DOMSerializer } from \"@milkdown/prose/model\";\nimport { PluginKey, Plugin, TextSelection } from \"@milkdown/prose/state\";\nimport { $prose } from \"@milkdown/utils\";\nfunction isPureText(content) {\n if (!content) return false;\n if (Array.isArray(content)) {\n if (content.length > 1) return false;\n return isPureText(content[0]);\n }\n const child = content.content;\n if (child) return isPureText(child);\n return content.type === \"text\";\n}\nfunction withMeta(plugin, meta) {\n Object.assign(plugin, {\n meta: {\n package: \"@milkdown/plugin-clipboard\",\n ...meta\n }\n });\n return plugin;\n}\nconst clipboard = $prose((ctx) => {\n const schema = ctx.get(schemaCtx);\n ctx.update(editorViewOptionsCtx, (prev) => ({\n ...prev,\n editable: prev.editable ?? (() => true)\n }));\n const key = new PluginKey(\"MILKDOWN_CLIPBOARD\");\n const plugin = new Plugin({\n key,\n props: {\n handlePaste: (view, event) => {\n const parser = ctx.get(parserCtx);\n const editable = view.props.editable?.(view.state);\n const { clipboardData } = event;\n if (!editable || !clipboardData) return false;\n const currentNode = view.state.selection.$from.node();\n if (currentNode.type.spec.code) return false;\n const text = clipboardData.getData(\"text/plain\");\n const vscodeData = clipboardData.getData(\"vscode-editor-data\");\n if (vscodeData) {\n const data = JSON.parse(vscodeData);\n const language = data?.mode;\n if (text && language) {\n const { tr } = view.state;\n const codeBlock = getNodeFromSchema(\"code_block\", schema);\n tr.replaceSelectionWith(codeBlock.create({ language })).setSelection(\n TextSelection.near(\n tr.doc.resolve(Math.max(0, tr.selection.from - 2))\n )\n ).insertText(text.replace(/\\r\\n?/g, \"\\n\"));\n view.dispatch(tr);\n return true;\n }\n }\n const html = clipboardData.getData(\"text/html\");\n if (html.length === 0 && text.length === 0) return false;\n const domParser = DOMParser.fromSchema(schema);\n let dom;\n if (html.length === 0) {\n const slice2 = parser(text);\n if (!slice2 || typeof slice2 === \"string\") return false;\n dom = DOMSerializer.fromSchema(schema).serializeFragment(\n slice2.content\n );\n } else {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n dom = template.content.cloneNode(true);\n template.remove();\n }\n const slice = domParser.parseSlice(dom);\n const node = isTextOnlySlice(slice);\n if (node) {\n view.dispatch(view.state.tr.replaceSelectionWith(node, true));\n return true;\n }\n try {\n view.dispatch(view.state.tr.replaceSelection(slice));\n return true;\n } catch {\n return false;\n }\n },\n clipboardTextSerializer: (slice) => {\n const serializer = ctx.get(serializerCtx);\n const isText = isPureText(slice.content.toJSON());\n if (isText)\n return slice.content.textBetween(\n 0,\n slice.content.size,\n \"\\n\\n\"\n );\n const doc = schema.topNodeType.createAndFill(void 0, slice.content);\n if (!doc) return \"\";\n const value = serializer(doc);\n return value;\n }\n }\n });\n return plugin;\n});\nwithMeta(clipboard, { displayName: \"Prose<clipboard>\" });\nexport {\n clipboard\n};\n//# sourceMappingURL=index.js.map\n","var GOOD_LEAF_SIZE = 200;\n\n// :: class<T> A rope sequence is a persistent sequence data structure\n// that supports appending, prepending, and slicing without doing a\n// full copy. It is represented as a mostly-balanced tree.\nvar RopeSequence = function RopeSequence () {};\n\nRopeSequence.prototype.append = function append (other) {\n if (!other.length) { return this }\n other = RopeSequence.from(other);\n\n return (!this.length && other) ||\n (other.length < GOOD_LEAF_SIZE && this.leafAppend(other)) ||\n (this.length < GOOD_LEAF_SIZE && other.leafPrepend(this)) ||\n this.appendInner(other)\n};\n\n// :: (union<[T], RopeSequence<T>>) → RopeSequence<T>\n// Prepend an array or other rope to this one, returning a new rope.\nRopeSequence.prototype.prepend = function prepend (other) {\n if (!other.length) { return this }\n return RopeSequence.from(other).append(this)\n};\n\nRopeSequence.prototype.appendInner = function appendInner (other) {\n return new Append(this, other)\n};\n\n// :: (?number, ?number) → RopeSequence<T>\n// Create a rope repesenting a sub-sequence of this rope.\nRopeSequence.prototype.slice = function slice (from, to) {\n if ( from === void 0 ) from = 0;\n if ( to === void 0 ) to = this.length;\n\n if (from >= to) { return RopeSequence.empty }\n return this.sliceInner(Math.max(0, from), Math.min(this.length, to))\n};\n\n// :: (number) → T\n// Retrieve the element at the given position from this rope.\nRopeSequence.prototype.get = function get (i) {\n if (i < 0 || i >= this.length) { return undefined }\n return this.getInner(i)\n};\n\n// :: ((element: T, index: number) → ?bool, ?number, ?number)\n// Call the given function for each element between the given\n// indices. This tends to be more efficient than looping over the\n// indices and calling `get`, because it doesn't have to descend the\n// tree for every element.\nRopeSequence.prototype.forEach = function forEach (f, from, to) {\n if ( from === void 0 ) from = 0;\n if ( to === void 0 ) to = this.length;\n\n if (from <= to)\n { this.forEachInner(f, from, to, 0); }\n else\n { this.forEachInvertedInner(f, from, to, 0); }\n};\n\n// :: ((element: T, index: number) → U, ?number, ?number) → [U]\n// Map the given functions over the elements of the rope, producing\n// a flat array.\nRopeSequence.prototype.map = function map (f, from, to) {\n if ( from === void 0 ) from = 0;\n if ( to === void 0 ) to = this.length;\n\n var result = [];\n this.forEach(function (elt, i) { return result.push(f(elt, i)); }, from, to);\n return result\n};\n\n// :: (?union<[T], RopeSequence<T>>) → RopeSequence<T>\n// Create a rope representing the given array, or return the rope\n// itself if a rope was given.\nRopeSequence.from = function from (values) {\n if (values instanceof RopeSequence) { return values }\n return values && values.length ? new Leaf(values) : RopeSequence.empty\n};\n\nvar Leaf = /*@__PURE__*/(function (RopeSequence) {\n function Leaf(values) {\n RopeSequence.call(this);\n this.values = values;\n }\n\n if ( RopeSequence ) Leaf.__proto__ = RopeSequence;\n Leaf.prototype = Object.create( RopeSequence && RopeSequence.prototype );\n Leaf.prototype.constructor = Leaf;\n\n var prototypeAccessors = { length: { configurable: true },depth: { configurable: true } };\n\n Leaf.prototype.flatten = function flatten () {\n return this.values\n };\n\n Leaf.prototype.sliceInner = function sliceInner (from, to) {\n if (from == 0 && to == this.length) { return this }\n return new Leaf(this.values.slice(from, to))\n };\n\n Leaf.prototype.getInner = function getInner (i) {\n return this.values[i]\n };\n\n Leaf.prototype.forEachInner = function forEachInner (f, from, to, start) {\n for (var i = from; i < to; i++)\n { if (f(this.values[i], start + i) === false) { return false } }\n };\n\n Leaf.prototype.forEachInvertedInner = function forEachInvertedInner (f, from, to, start) {\n for (var i = from - 1; i >= to; i--)\n { if (f(this.values[i], start + i) === false) { return false } }\n };\n\n Leaf.prototype.leafAppend = function leafAppend (other) {\n if (this.length + other.length <= GOOD_LEAF_SIZE)\n { return new Leaf(this.values.concat(other.flatten())) }\n };\n\n Leaf.prototype.leafPrepend = function leafPrepend (other) {\n if (this.length + other.length <= GOOD_LEAF_SIZE)\n { return new Leaf(other.flatten().concat(this.values)) }\n };\n\n prototypeAccessors.length.get = function () { return this.values.length };\n\n prototypeAccessors.depth.get = function () { return 0 };\n\n Object.defineProperties( Leaf.prototype, prototypeAccessors );\n\n return Leaf;\n}(RopeSequence));\n\n// :: RopeSequence\n// The empty rope sequence.\nRopeSequence.empty = new Leaf([]);\n\nvar Append = /*@__PURE__*/(function (RopeSequence) {\n function Append(left, right) {\n RopeSequence.call(this);\n this.left = left;\n this.right = right;\n this.length = left.length + right.length;\n this.depth = Math.max(left.depth, right.depth) + 1;\n }\n\n if ( RopeSequence ) Append.__proto__ = RopeSequence;\n Append.prototype = Object.create( RopeSequence && RopeSequence.prototype );\n Append.prototype.constructor = Append;\n\n Append.prototype.flatten = function flatten () {\n return this.left.flatten().concat(this.right.flatten())\n };\n\n Append.prototype.getInner = function getInner (i) {\n return i < this.left.length ? this.left.get(i) : this.right.get(i - this.left.length)\n };\n\n Append.prototype.forEachInner = function forEachInner (f, from, to, start) {\n var leftLen = this.left.length;\n if (from < leftLen &&\n this.left.forEachInner(f, from, Math.min(to, leftLen), start) === false)\n { return false }\n if (to > leftLen &&\n this.right.forEachInner(f, Math.max(from - leftLen, 0), Math.min(this.length, to) - leftLen, start + leftLen) === false)\n { return false }\n };\n\n Append.prototype.forEachInvertedInner = function forEachInvertedInner (f, from, to, start) {\n var leftLen = this.left.length;\n if (from > leftLen &&\n this.right.forEachInvertedInner(f, from - leftLen, Math.max(to, leftLen) - leftLen, start + leftLen) === false)\n { return false }\n if (to < leftLen &&\n this.left.forEachInvertedInner(f, Math.min(from, leftLen), to, start) === false)\n { return false }\n };\n\n Append.prototype.sliceInner = function sliceInner (from, to) {\n if (from == 0 && to == this.length) { return this }\n var leftLen = this.left.length;\n if (to <= leftLen) { return this.left.slice(from, to) }\n if (from >= leftLen) { return this.right.slice(from - leftLen, to - leftLen) }\n return this.left.slice(from, leftLen).append(this.right.slice(0, to - leftLen))\n };\n\n Append.prototype.leafAppend = function leafAppend (other) {\n var inner = this.right.leafAppend(other);\n if (inner) { return new Append(this.left, inner) }\n };\n\n Append.prototype.leafPrepend = function leafPrepend (other) {\n var inner = this.left.leafPrepend(other);\n if (inner) { return new Append(inner, this.right) }\n };\n\n Append.prototype.appendInner = function appendInner (other) {\n if (this.left.depth >= Math.max(this.right.depth, other.depth) + 1)\n { return new Append(this.left, new Append(this.right, other)) }\n return new Append(this, other)\n };\n\n return Append;\n}(RopeSequence));\n\nexport default RopeSequence;\n","import RopeSequence from 'rope-sequence';\nimport { Mapping } from 'prosemirror-transform';\nimport { PluginKey, Plugin } from 'prosemirror-state';\n\n// ProseMirror's history isn't simply a way to roll back to a previous\n// state, because ProseMirror supports applying changes without adding\n// them to the history (for example during collaboration).\n//\n// To this end, each 'Branch' (one for the undo history and one for\n// the redo history) keeps an array of 'Items', which can optionally\n// hold a step (an actual undoable change), and always hold a position\n// map (which is needed to move changes below them to apply to the\n// current document).\n//\n// An item that has both a step and a selection bookmark is the start\n// of an 'event' — a group of changes that will be undone or redone at\n// once. (It stores only the bookmark, since that way we don't have to\n// provide a document until the selection is actually applied, which\n// is useful when compressing.)\n// Used to schedule history compression\nconst max_empty_items = 500;\nclass Branch {\n constructor(items, eventCount) {\n this.items = items;\n this.eventCount = eventCount;\n }\n // Pop the latest event off the branch's history and apply it\n // to a document transform.\n popEvent(state, preserveItems) {\n if (this.eventCount == 0)\n return null;\n let end = this.items.length;\n for (;; end--) {\n let next = this.items.get(end - 1);\n if (next.selection) {\n --end;\n break;\n }\n }\n let remap, mapFrom;\n if (preserveItems) {\n remap = this.remapping(end, this.items.length);\n mapFrom = remap.maps.length;\n }\n let transform = state.tr;\n let selection, remaining;\n let addAfter = [], addBefore = [];\n this.items.forEach((item, i) => {\n if (!item.step) {\n if (!remap) {\n remap = this.remapping(end, i + 1);\n mapFrom = remap.maps.length;\n }\n mapFrom--;\n addBefore.push(item);\n return;\n }\n if (remap) {\n addBefore.push(new Item(item.map));\n let step = item.step.map(remap.slice(mapFrom)), map;\n if (step && transform.maybeStep(step).doc) {\n map = transform.mapping.maps[transform.mapping.maps.length - 1];\n addAfter.push(new Item(map, undefined, undefined, addAfter.length + addBefore.length));\n }\n mapFrom--;\n if (map)\n remap.appendMap(map, mapFrom);\n }\n else {\n transform.maybeStep(item.step);\n }\n if (item.selection) {\n selection = remap ? item.selection.map(remap.slice(mapFrom)) : item.selection;\n remaining = new Branch(this.items.slice(0, end).append(addBefore.reverse().concat(addAfter)), this.eventCount - 1);\n return false;\n }\n }, this.items.length, 0);\n return { remaining: remaining, transform, selection: selection };\n }\n // Create a new branch with the given transform added.\n addTransform(transform, selection, histOptions, preserveItems) {\n let newItems = [], eventCount = this.eventCount;\n let oldItems = this.items, lastItem = !preserveItems && oldItems.length ? oldItems.get(oldItems.length - 1) : null;\n for (let i = 0; i < transform.steps.length; i++) {\n let step = transform.steps[i].invert(transform.docs[i]);\n let item = new Item(transform.mapping.maps[i], step, selection), merged;\n if (merged = lastItem && lastItem.merge(item)) {\n item = merged;\n if (i)\n newItems.pop();\n else\n oldItems = oldItems.slice(0, oldItems.length - 1);\n }\n newItems.push(item);\n if (selection) {\n eventCount++;\n selection = undefined;\n }\n if (!preserveItems)\n lastItem = item;\n }\n let overflow = eventCount - histOptions.depth;\n if (overflow > DEPTH_OVERFLOW) {\n oldItems = cutOffEvents(oldItems, overflow);\n eventCount -= overflow;\n }\n return new Branch(oldItems.append(newItems), eventCount);\n }\n remapping(from, to) {\n let maps = new Mapping;\n this.items.forEach((item, i) => {\n let mirrorPos = item.mirrorOffset != null && i - item.mirrorOffset >= from\n ? maps.maps.length - item.mirrorOffset : undefined;\n maps.appendMap(item.map, mirrorPos);\n }, from, to);\n return maps;\n }\n addMaps(array) {\n if (this.eventCount == 0)\n return this;\n return new Branch(this.items.append(array.map(map => new Item(map))), this.eventCount);\n }\n // When the collab module receives remote changes, the history has\n // to know about those, so that it can adjust the steps that were\n // rebased on top of the remote changes, and include the position\n // maps for the remote changes in its array of items.\n rebased(rebasedTransform, rebasedCount) {\n if (!this.eventCount)\n return this;\n let rebasedItems = [], start = Math.max(0, this.items.length - rebasedCount);\n let mapping = rebasedTransform.mapping;\n let newUntil = rebasedTransform.steps.length;\n let eventCount = this.eventCount;\n this.items.forEach(item => { if (item.selection)\n eventCount--; }, start);\n let iRebased = rebasedCount;\n this.items.forEach(item => {\n let pos = mapping.getMirror(--iRebased);\n if (pos == null)\n return;\n newUntil = Math.min(newUntil, pos);\n let map = mapping.maps[pos];\n if (item.step) {\n let step = rebasedTransform.steps[pos].invert(rebasedTransform.docs[pos]);\n let selection = item.selection && item.selection.map(mapping.slice(iRebased + 1, pos));\n if (selection)\n eventCount++;\n rebasedItems.push(new Item(map, step, selection));\n }\n else {\n rebasedItems.push(new Item(map));\n }\n }, start);\n let newMaps = [];\n for (let i = rebasedCount; i < newUntil; i++)\n newMaps.push(new Item(mapping.maps[i]));\n let items = this.items.slice(0, start).append(newMaps).append(rebasedItems);\n let branch = new Branch(items, eventCount);\n if (branch.emptyItemCount() > max_empty_items)\n branch = branch.compress(this.items.length - rebasedItems.length);\n return branch;\n }\n emptyItemCount() {\n let count = 0;\n this.items.forEach(item => { if (!item.step)\n count++; });\n return count;\n }\n // Compressing a branch means rewriting it to push the air (map-only\n // items) out. During collaboration, these naturally accumulate\n // because each remote change adds one. The `upto` argument is used\n // to ensure that only the items below a given level are compressed,\n // because `rebased` relies on a clean, untouched set of items in\n // order to associate old items with rebased steps.\n compress(upto = this.items.length) {\n let remap = this.remapping(0, upto), mapFrom = remap.maps.length;\n let items = [], events = 0;\n this.items.forEach((item, i) => {\n if (i >= upto) {\n items.push(item);\n if (item.selection)\n events++;\n }\n else if (item.step) {\n let step = item.step.map(remap.slice(mapFrom)), map = step && step.getMap();\n mapFrom--;\n if (map)\n remap.appendMap(map, mapFrom);\n if (step) {\n let selection = item.selection && item.selection.map(remap.slice(mapFrom));\n if (selection)\n events++;\n let newItem = new Item(map.invert(), step, selection), merged, last = items.length - 1;\n if (merged = items.length && items[last].merge(newItem))\n items[last] = merged;\n else\n items.push(newItem);\n }\n }\n else if (item.map) {\n mapFrom--;\n }\n }, this.items.length, 0);\n return new Branch(RopeSequence.from(items.reverse()), events);\n }\n}\nBranch.empty = new Branch(RopeSequence.empty, 0);\nfunction cutOffEvents(items, n) {\n let cutPoint;\n items.forEach((item, i) => {\n if (item.selection && (n-- == 0)) {\n cutPoint = i;\n return false;\n }\n });\n return items.slice(cutPoint);\n}\nclass Item {\n constructor(\n // The (forward) step map for this item.\n map, \n // The inverted step\n step, \n // If this is non-null, this item is the start of a group, and\n // this selection is the starting selection for the group (the one\n // that was active before the first step was applied)\n selection, \n // If this item is the inverse of a previous mapping on the stack,\n // this points at the inverse's offset\n mirrorOffset) {\n this.map = map;\n this.step = step;\n this.selection = selection;\n this.mirrorOffset = mirrorOffset;\n }\n merge(other) {\n if (this.step && other.step && !other.selection) {\n let step = other.step.merge(this.step);\n if (step)\n return new Item(step.getMap().invert(), step, this.selection);\n }\n }\n}\n// The value of the state field that tracks undo/redo history for that\n// state. Will be stored in the plugin state when the history plugin\n// is active.\nclass HistoryState {\n constructor(done, undone, prevRanges, prevTime, prevComposition) {\n this.done = done;\n this.undone = undone;\n this.prevRanges = prevRanges;\n this.prevTime = prevTime;\n this.prevComposition = prevComposition;\n }\n}\nconst DEPTH_OVERFLOW = 20;\n// Record a transformation in undo history.\nfunction applyTransaction(history, state, tr, options) {\n let historyTr = tr.getMeta(historyKey), rebased;\n if (historyTr)\n return historyTr.historyState;\n if (tr.getMeta(closeHistoryKey))\n history = new HistoryState(history.done, history.undone, null, 0, -1);\n let appended = tr.getMeta(\"appendedTransaction\");\n if (tr.steps.length == 0) {\n return history;\n }\n else if (appended && appended.getMeta(historyKey)) {\n if (appended.getMeta(historyKey).redo)\n return new HistoryState(history.done.addTransform(tr, undefined, options, mustPreserveItems(state)), history.undone, rangesFor(tr.mapping.maps), history.prevTime, history.prevComposition);\n else\n return new HistoryState(history.done, history.undone.addTransform(tr, undefined, options, mustPreserveItems(state)), null, history.prevTime, history.prevComposition);\n }\n else if (tr.getMeta(\"addToHistory\") !== false && !(appended && appended.getMeta(\"addToHistory\") === false)) {\n // Group transforms that occur in quick succession into one event.\n let composition = tr.getMeta(\"composition\");\n let newGroup = history.prevTime == 0 ||\n (!appended && history.prevComposition != composition &&\n (history.prevTime < (tr.time || 0) - options.newGroupDelay || !isAdjacentTo(tr, history.prevRanges)));\n let prevRanges = appended ? mapRanges(history.prevRanges, tr.mapping) : rangesFor(tr.mapping.maps);\n return new HistoryState(history.done.addTransform(tr, newGroup ? state.selection.getBookmark() : undefined, options, mustPreserveItems(state)), Branch.empty, prevRanges, tr.time, composition == null ? history.prevComposition : composition);\n }\n else if (rebased = tr.getMeta(\"rebased\")) {\n // Used by the collab module to tell the history that some of its\n // content has been rebased.\n return new HistoryState(history.done.rebased(tr, rebased), history.undone.rebased(tr, rebased), mapRanges(history.prevRanges, tr.mapping), history.prevTime, history.prevComposition);\n }\n else {\n return new HistoryState(history.done.addMaps(tr.mapping.maps), history.undone.addMaps(tr.mapping.maps), mapRanges(history.prevRanges, tr.mapping), history.prevTime, history.prevComposition);\n }\n}\nfunction isAdjacentTo(transform, prevRanges) {\n if (!prevRanges)\n return false;\n if (!transform.docChanged)\n return true;\n let adjacent = false;\n transform.mapping.maps[0].forEach((start, end) => {\n for (let i = 0; i < prevRanges.length; i += 2)\n if (start <= prevRanges[i + 1] && end >= prevRanges[i])\n adjacent = true;\n });\n return adjacent;\n}\nfunction rangesFor(maps) {\n let result = [];\n for (let i = maps.length - 1; i >= 0 && result.length == 0; i--)\n maps[i].forEach((_from, _to, from, to) => result.push(from, to));\n return result;\n}\nfunction mapRanges(ranges, mapping) {\n if (!ranges)\n return null;\n let result = [];\n for (let i = 0; i < ranges.length; i += 2) {\n let from = mapping.map(ranges[i], 1), to = mapping.map(ranges[i + 1], -1);\n if (from <= to)\n result.push(from, to);\n }\n return result;\n}\n// Apply the latest event from one branch to the document and shift the event\n// onto the other branch.\nfunction histTransaction(history, state, redo) {\n let preserveItems = mustPreserveItems(state);\n let histOptions = historyKey.get(state).spec.config;\n let pop = (redo ? history.undone : history.done).popEvent(state, preserveItems);\n if (!pop)\n return null;\n let selection = pop.selection.resolve(pop.transform.doc);\n let added = (redo ? history.done : history.undone).addTransform(pop.transform, state.selection.getBookmark(), histOptions, preserveItems);\n let newHist = new HistoryState(redo ? added : pop.remaining, redo ? pop.remaining : added, null, 0, -1);\n return pop.transform.setSelection(selection).setMeta(historyKey, { redo, historyState: newHist });\n}\nlet cachedPreserveItems = false, cachedPreserveItemsPlugins = null;\n// Check whether any plugin in the given state has a\n// `historyPreserveItems` property in its spec, in which case we must\n// preserve steps exactly as they came in, so that they can be\n// rebased.\nfunction mustPreserveItems(state) {\n let plugins = state.plugins;\n if (cachedPreserveItemsPlugins != plugins) {\n cachedPreserveItems = false;\n cachedPreserveItemsPlugins = plugins;\n for (let i = 0; i < plugins.length; i++)\n if (plugins[i].spec.historyPreserveItems) {\n cachedPreserveItems = true;\n break;\n }\n }\n return cachedPreserveItems;\n}\n/**\nSet a flag on the given transaction that will prevent further steps\nfrom being appended to an existing history event (so that they\nrequire a separate undo command to undo).\n*/\nfunction closeHistory(tr) {\n return tr.setMeta(closeHistoryKey, true);\n}\nconst historyKey = new PluginKey(\"history\");\nconst closeHistoryKey = new PluginKey(\"closeHistory\");\n/**\nReturns a plugin that enables the undo history for an editor. The\nplugin will track undo and redo stacks, which can be used with the\n[`undo`](https://prosemirror.net/docs/ref/#history.undo) and [`redo`](https://prosemirror.net/docs/ref/#history.redo) commands.\n\nYou can set an `\"addToHistory\"` [metadata\nproperty](https://prosemirror.net/docs/ref/#state.Transaction.setMeta) of `false` on a transaction\nto prevent it from being rolled back by undo.\n*/\nfunction history(config = {}) {\n config = { depth: config.depth || 100,\n newGroupDelay: config.newGroupDelay || 500 };\n return new Plugin({\n key: historyKey,\n state: {\n init() {\n return new HistoryState(Branch.empty, Branch.empty, null, 0, -1);\n },\n apply(tr, hist, state) {\n return applyTransaction(hist, state, tr, config);\n }\n },\n config,\n props: {\n handleDOMEvents: {\n beforeinput(view, e) {\n let inputType = e.inputType;\n let command = inputType == \"historyUndo\" ? undo : inputType == \"historyRedo\" ? redo : null;\n if (!command || !view.editable)\n return false;\n e.preventDefault();\n return command(view.state, view.dispatch);\n }\n }\n }\n });\n}\nfunction buildCommand(redo, scroll) {\n return (state, dispatch) => {\n let hist = historyKey.getState(state);\n if (!hist || (redo ? hist.undone : hist.done).eventCount == 0)\n return false;\n if (dispatch) {\n let tr = histTransaction(hist, state, redo);\n if (tr)\n dispatch(scroll ? tr.scrollIntoView() : tr);\n }\n return true;\n };\n}\n/**\nA command function that undoes the last change, if any.\n*/\nconst undo = buildCommand(false, true);\n/**\nA command function that redoes the last undone change, if any.\n*/\nconst redo = buildCommand(true, true);\n/**\nA command function that undoes the last change. Don't scroll the\nselection into view.\n*/\nconst undoNoScroll = buildCommand(false, false);\n/**\nA command function that redoes the last undone change. Don't\nscroll the selection into view.\n*/\nconst redoNoScroll = buildCommand(true, false);\n/**\nThe amount of undoable events available in a given state.\n*/\nfunction undoDepth(state) {\n let hist = historyKey.getState(state);\n return hist ? hist.done.eventCount : 0;\n}\n/**\nThe amount of redoable events available in a given editor state.\n*/\nfunction redoDepth(state) {\n let hist = historyKey.getState(state);\n return hist ? hist.undone.eventCount : 0;\n}\n/**\nReturns true if the given transaction was generated by the history\nplugin.\n*/\nfunction isHistoryTransaction(tr) {\n return tr.getMeta(historyKey) != null;\n}\n\nexport { closeHistory, history, isHistoryTransaction, redo, redoDepth, redoNoScroll, undo, undoDepth, undoNoScroll };\n","import { commandsCtx } from \"@milkdown/core\";\nimport { undo, redo, history as history$1 } from \"@milkdown/prose/history\";\nimport { $command, $ctx, $prose, $useKeymap } from \"@milkdown/utils\";\nfunction withMeta(plugin, meta) {\n Object.assign(plugin, {\n meta: {\n package: \"@milkdown/plugin-history\",\n ...meta\n }\n });\n return plugin;\n}\nconst undoCommand = $command(\"Undo\", () => () => undo);\nwithMeta(undoCommand, {\n displayName: \"Command<undo>\"\n});\nconst redoCommand = $command(\"Redo\", () => () => redo);\nwithMeta(redoCommand, {\n displayName: \"Command<redo>\"\n});\nconst historyProviderConfig = $ctx({}, \"historyProviderConfig\");\nwithMeta(historyProviderConfig, {\n displayName: \"Ctx<historyProviderConfig>\"\n});\nconst historyProviderPlugin = $prose(\n (ctx) => history$1(ctx.get(historyProviderConfig.key))\n);\nwithMeta(historyProviderPlugin, {\n displayName: \"Ctx<historyProviderPlugin>\"\n});\nconst historyKeymap = $useKeymap(\"historyKeymap\", {\n Undo: {\n shortcuts: \"Mod-z\",\n command: (ctx) => {\n const commands = ctx.get(commandsCtx);\n return () => commands.call(undoCommand.key);\n }\n },\n Redo: {\n shortcuts: [\"Mod-y\", \"Shift-Mod-z\"],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx);\n return () => commands.call(redoCommand.key);\n }\n }\n});\nwithMeta(historyKeymap.ctx, {\n displayName: \"KeymapCtx<history>\"\n});\nwithMeta(historyKeymap.shortcuts, {\n displayName: \"Keymap<history>\"\n});\nconst history = [\n historyProviderConfig,\n historyProviderPlugin,\n historyKeymap,\n undoCommand,\n redoCommand\n].flat();\nexport {\n history,\n historyKeymap,\n historyProviderConfig,\n historyProviderPlugin,\n redoCommand,\n undoCommand\n};\n//# sourceMappingURL=index.js.map\n","import { TextSelection, AllSelection } from \"@milkdown/prose/state\";\nimport { $ctx, $shortcut } from \"@milkdown/utils\";\nfunction updateIndent(tr, options) {\n const { doc, selection } = tr;\n if (!doc || !selection) return tr;\n if (!(selection instanceof TextSelection || selection instanceof AllSelection))\n return tr;\n const { to } = selection;\n const text = options.type === \"space\" ? Array(options.size).fill(\" \").join(\"\") : \"\t\";\n return tr.insertText(text, to);\n}\nconst indentConfig = $ctx(\n { type: \"space\", size: 2 },\n \"indentConfig\"\n);\nindentConfig.meta = {\n package: \"@milkdown/plugin-indent\",\n displayName: \"Ctx<indentConfig>\"\n};\nconst indentPlugin = $shortcut((ctx) => ({\n Tab: (state, dispatch) => {\n const config = ctx.get(indentConfig.key);\n const { tr } = state;\n const _tr = updateIndent(tr, config);\n if (_tr.docChanged) {\n dispatch?.(_tr);\n return true;\n }\n return false;\n }\n}));\nindentPlugin.meta = {\n package: \"@milkdown/plugin-indent\",\n displayName: \"Shortcut<indent>\"\n};\nconst indent = [indentConfig, indentPlugin];\nexport {\n indent,\n indentConfig,\n indentPlugin\n};\n//# sourceMappingURL=index.js.map\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n","import { InitReady, SerializerReady, serializerCtx, prosePluginsCtx, EditorViewReady } from \"@milkdown/core\";\nimport { createSlice } from \"@milkdown/ctx\";\nimport { PluginKey, Plugin } from \"@milkdown/prose/state\";\nimport { debounce } from \"lodash-es\";\nclass ListenerManager {\n constructor() {\n this.beforeMountedListeners = [];\n this.mountedListeners = [];\n this.updatedListeners = [];\n this.selectionUpdatedListeners = [];\n this.markdownUpdatedListeners = [];\n this.blurListeners = [];\n this.focusListeners = [];\n this.destroyListeners = [];\n this.beforeMount = (fn) => {\n this.beforeMountedListeners.push(fn);\n return this;\n };\n this.mounted = (fn) => {\n this.mountedListeners.push(fn);\n return this;\n };\n this.updated = (fn) => {\n this.updatedListeners.push(fn);\n return this;\n };\n }\n /// A getter to get all [subscribers](#interface-subscribers). You should not use this method directly.\n get listeners() {\n return {\n beforeMount: this.beforeMountedListeners,\n mounted: this.mountedListeners,\n updated: this.updatedListeners,\n markdownUpdated: this.markdownUpdatedListeners,\n blur: this.blurListeners,\n focus: this.focusListeners,\n destroy: this.destroyListeners,\n selectionUpdated: this.selectionUpdatedListeners\n };\n }\n /// Subscribe to the markdownUpdated event.\n /// This event will be triggered after the editor state is updated and **the document is changed**.\n /// The second parameter is the current markdown and the third parameter is the previous markdown.\n markdownUpdated(fn) {\n this.markdownUpdatedListeners.push(fn);\n return this;\n }\n /// Subscribe to the blur event.\n /// This event will be triggered when the editor is blurred.\n blur(fn) {\n this.blurListeners.push(fn);\n return this;\n }\n /// Subscribe to the focus event.\n /// This event will be triggered when the editor is focused.\n focus(fn) {\n this.focusListeners.push(fn);\n return this;\n }\n /// Subscribe to the destroy event.\n /// This event will be triggered before the editor is destroyed.\n destroy(fn) {\n this.destroyListeners.push(fn);\n return this;\n }\n /// Subscribe to the selectionUpdated event.\n /// This event will be triggered when the editor selection is updated.\n selectionUpdated(fn) {\n this.selectionUpdatedListeners.push(fn);\n return this;\n }\n}\nconst listenerCtx = createSlice(\n new ListenerManager(),\n \"listener\"\n);\nconst key = new PluginKey(\"MILKDOWN_LISTENER\");\nconst listener = (ctx) => {\n ctx.inject(listenerCtx, new ListenerManager());\n return async () => {\n await ctx.wait(InitReady);\n const listener2 = ctx.get(listenerCtx);\n const { listeners } = listener2;\n listeners.beforeMount.forEach((fn) => fn(ctx));\n await ctx.wait(SerializerReady);\n const serializer = ctx.get(serializerCtx);\n let prevDoc = null;\n let prevMarkdown = null;\n let prevSelection = null;\n const plugin = new Plugin({\n key,\n view: () => {\n return {\n destroy: () => {\n listeners.destroy.forEach((fn) => fn(ctx));\n }\n };\n },\n props: {\n handleDOMEvents: {\n focus: () => {\n listeners.focus.forEach((fn) => fn(ctx));\n return false;\n },\n blur: () => {\n listeners.blur.forEach((fn) => fn(ctx));\n return false;\n }\n }\n },\n state: {\n init: (_, instance) => {\n prevDoc = instance.doc;\n prevMarkdown = serializer(instance.doc);\n },\n apply: (tr) => {\n const currentSelection = tr.selection;\n if (!prevSelection && currentSelection || prevSelection && !currentSelection.eq(prevSelection)) {\n listeners.selectionUpdated.forEach((fn) => {\n fn(ctx, currentSelection, prevSelection);\n });\n prevSelection = currentSelection;\n }\n if (!(tr.docChanged || tr.storedMarksSet) || tr.getMeta(\"addToHistory\") === false)\n return;\n const handler = debounce(() => {\n const { doc } = tr;\n if (listeners.updated.length > 0 && prevDoc && !prevDoc.eq(doc)) {\n listeners.updated.forEach((fn) => {\n fn(ctx, doc, prevDoc);\n });\n }\n if (listeners.markdownUpdated.length > 0 && prevDoc && !prevDoc.eq(doc)) {\n const markdown = serializer(doc);\n listeners.markdownUpdated.forEach((fn) => {\n fn(ctx, markdown, prevMarkdown);\n });\n prevMarkdown = markdown;\n }\n prevDoc = doc;\n }, 200);\n return handler();\n }\n }\n });\n ctx.update(prosePluginsCtx, (x) => x.concat(plugin));\n await ctx.wait(EditorViewReady);\n listeners.mounted.forEach((fn) => fn(ctx));\n };\n};\nlistener.meta = {\n package: \"@milkdown/plugin-listener\",\n displayName: \"Listener\"\n};\nexport {\n ListenerManager,\n key,\n listener,\n listenerCtx\n};\n//# sourceMappingURL=index.js.map\n","import { PluginKey, Plugin } from \"@milkdown/prose/state\";\nimport { $ctx, $prose } from \"@milkdown/utils\";\nconst trailingConfig = $ctx(\n {\n shouldAppend: (lastNode) => {\n if (!lastNode) return false;\n if ([\"heading\", \"paragraph\"].includes(lastNode.type.name)) return false;\n return true;\n },\n getNode: (state) => state.schema.nodes.paragraph.create()\n },\n \"trailingConfig\"\n);\ntrailingConfig.meta = {\n package: \"@milkdown/plugin-trailing\",\n displayName: \"Ctx<trailingConfig>\"\n};\nconst trailingPlugin = $prose((ctx) => {\n const trailingPluginKey = new PluginKey(\"MILKDOWN_TRAILING\");\n const { shouldAppend, getNode } = ctx.get(trailingConfig.key);\n const plugin = new Plugin({\n key: trailingPluginKey,\n state: {\n init: (_, state) => {\n const lastNode = state.tr.doc.lastChild;\n return shouldAppend(lastNode, state);\n },\n apply: (tr, value, _, state) => {\n if (!tr.docChanged) return value;\n const lastNode = tr.doc.lastChild;\n return shouldAppend(lastNode, state);\n }\n },\n appendTransaction: (_, __, state) => {\n const { doc, tr } = state;\n const nodeType = getNode?.(state);\n const shouldInsertNodeAtEnd = plugin.getState(state);\n const endPosition = doc.content.size;\n if (!shouldInsertNodeAtEnd || !nodeType) return;\n return tr.insert(endPosition, nodeType);\n }\n });\n return plugin;\n});\ntrailingPlugin.meta = {\n package: \"@milkdown/plugin-trailing\",\n displayName: \"Prose<trailing>\"\n};\nconst trailing = [trailingConfig, trailingPlugin];\nexport {\n trailing,\n trailingConfig,\n trailingPlugin\n};\n//# sourceMappingURL=index.js.map\n","import { findWrapping, ReplaceAroundStep, canSplit, liftTarget, canJoin } from 'prosemirror-transform';\nimport { NodeRange, Fragment, Slice } from 'prosemirror-model';\nimport { Selection } from 'prosemirror-state';\n\nconst olDOM = [\"ol\", 0], ulDOM = [\"ul\", 0], liDOM = [\"li\", 0];\n/**\nAn ordered list [node spec](https://prosemirror.net/docs/ref/#model.NodeSpec). Has a single\nattribute, `order`, which determines the number at which the list\nstarts counting, and defaults to 1. Represented as an `<ol>`\nelement.\n*/\nconst orderedList = {\n attrs: { order: { default: 1, validate: \"number\" } },\n parseDOM: [{ tag: \"ol\", getAttrs(dom) {\n return { order: dom.hasAttribute(\"start\") ? +dom.getAttribute(\"start\") : 1 };\n } }],\n toDOM(node) {\n return node.attrs.order == 1 ? olDOM : [\"ol\", { start: node.attrs.order }, 0];\n }\n};\n/**\nA bullet list node spec, represented in the DOM as `<ul>`.\n*/\nconst bulletList = {\n parseDOM: [{ tag: \"ul\" }],\n toDOM() { return ulDOM; }\n};\n/**\nA list item (`<li>`) spec.\n*/\nconst listItem = {\n parseDOM: [{ tag: \"li\" }],\n toDOM() { return liDOM; },\n defining: true\n};\nfunction add(obj, props) {\n let copy = {};\n for (let prop in obj)\n copy[prop] = obj[prop];\n for (let prop in props)\n copy[prop] = props[prop];\n return copy;\n}\n/**\nConvenience function for adding list-related node types to a map\nspecifying the nodes for a schema. Adds\n[`orderedList`](https://prosemirror.net/docs/ref/#schema-list.orderedList) as `\"ordered_list\"`,\n[`bulletList`](https://prosemirror.net/docs/ref/#schema-list.bulletList) as `\"bullet_list\"`, and\n[`listItem`](https://prosemirror.net/docs/ref/#schema-list.listItem) as `\"list_item\"`.\n\n`itemContent` determines the content expression for the list items.\nIf you want the commands defined in this module to apply to your\nlist structure, it should have a shape like `\"paragraph block*\"` or\n`\"paragraph (ordered_list | bullet_list)*\"`. `listGroup` can be\ngiven to assign a group name to the list node types, for example\n`\"block\"`.\n*/\nfunction addListNodes(nodes, itemContent, listGroup) {\n return nodes.append({\n ordered_list: add(orderedList, { content: \"list_item+\", group: listGroup }),\n bullet_list: add(bulletList, { content: \"list_item+\", group: listGroup }),\n list_item: add(listItem, { content: itemContent })\n });\n}\n/**\nReturns a command function that wraps the selection in a list with\nthe given type an attributes. If `dispatch` is null, only return a\nvalue to indicate whether this is possible, but don't actually\nperform the change.\n*/\nfunction wrapInList(listType, attrs = null) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to);\n if (!range)\n return false;\n let tr = dispatch ? state.tr : null;\n if (!wrapRangeInList(tr, range, listType, attrs))\n return false;\n if (dispatch)\n dispatch(tr.scrollIntoView());\n return true;\n };\n}\n/**\nTry to wrap the given node range in a list of the given type.\nReturn `true` when this is possible, `false` otherwise. When `tr`\nis non-null, the wrapping is added to that transaction. When it is\n`null`, the function only queries whether the wrapping is\npossible.\n*/\nfunction wrapRangeInList(tr, range, listType, attrs = null) {\n let doJoin = false, outerRange = range, doc = range.$from.doc;\n // This is at the top of an existing list item\n if (range.depth >= 2 && range.$from.node(range.depth - 1).type.compatibleContent(listType) && range.startIndex == 0) {\n // Don't do anything if this is the top of the list\n if (range.$from.index(range.depth - 1) == 0)\n return false;\n let $insert = doc.resolve(range.start - 2);\n outerRange = new NodeRange($insert, $insert, range.depth);\n if (range.endIndex < range.parent.childCount)\n range = new NodeRange(range.$from, doc.resolve(range.$to.end(range.depth)), range.depth);\n doJoin = true;\n }\n let wrap = findWrapping(outerRange, listType, attrs, range);\n if (!wrap)\n return false;\n if (tr)\n doWrapInList(tr, range, wrap, doJoin, listType);\n return true;\n}\nfunction doWrapInList(tr, range, wrappers, joinBefore, listType) {\n let content = Fragment.empty;\n for (let i = wrappers.length - 1; i >= 0; i--)\n content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content));\n tr.step(new ReplaceAroundStep(range.start - (joinBefore ? 2 : 0), range.end, range.start, range.end, new Slice(content, 0, 0), wrappers.length, true));\n let found = 0;\n for (let i = 0; i < wrappers.length; i++)\n if (wrappers[i].type == listType)\n found = i + 1;\n let splitDepth = wrappers.length - found;\n let splitPos = range.start + wrappers.length - (joinBefore ? 2 : 0), parent = range.parent;\n for (let i = range.startIndex, e = range.endIndex, first = true; i < e; i++, first = false) {\n if (!first && canSplit(tr.doc, splitPos, splitDepth)) {\n tr.split(splitPos, splitDepth);\n splitPos += 2 * splitDepth;\n }\n splitPos += parent.child(i).nodeSize;\n }\n return tr;\n}\n/**\nBuild a command that splits a non-empty textblock at the top level\nof a list item by also splitting that list item.\n*/\nfunction splitListItem(itemType, itemAttrs) {\n return function (state, dispatch) {\n let { $from, $to, node } = state.selection;\n if ((node && node.isBlock) || $from.depth < 2 || !$from.sameParent($to))\n return false;\n let grandParent = $from.node(-1);\n if (grandParent.type != itemType)\n return false;\n if ($from.parent.content.size == 0 && $from.node(-1).childCount == $from.indexAfter(-1)) {\n // In an empty block. If this is a nested list, the wrapping\n // list item should be split. Otherwise, bail out and let next\n // command handle lifting.\n if ($from.depth == 3 || $from.node(-3).type != itemType ||\n $from.index(-2) != $from.node(-2).childCount - 1)\n return false;\n if (dispatch) {\n let wrap = Fragment.empty;\n let depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3;\n // Build a fragment containing empty versions of the structure\n // from the outer list item to the parent node of the cursor\n for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d--)\n wrap = Fragment.from($from.node(d).copy(wrap));\n let depthAfter = $from.indexAfter(-1) < $from.node(-2).childCount ? 1\n : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3;\n // Add a second list item with an empty default start node\n wrap = wrap.append(Fragment.from(itemType.createAndFill()));\n let start = $from.before($from.depth - (depthBefore - 1));\n let tr = state.tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0));\n let sel = -1;\n tr.doc.nodesBetween(start, tr.doc.content.size, (node, pos) => {\n if (sel > -1)\n return false;\n if (node.isTextblock && node.content.size == 0)\n sel = pos + 1;\n });\n if (sel > -1)\n tr.setSelection(Selection.near(tr.doc.resolve(sel)));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n let nextType = $to.pos == $from.end() ? grandParent.contentMatchAt(0).defaultType : null;\n let tr = state.tr.delete($from.pos, $to.pos);\n let types = nextType ? [itemAttrs ? { type: itemType, attrs: itemAttrs } : null, { type: nextType }] : undefined;\n if (!canSplit(tr.doc, $from.pos, 2, types))\n return false;\n if (dispatch)\n dispatch(tr.split($from.pos, 2, types).scrollIntoView());\n return true;\n };\n}\n/**\nActs like [`splitListItem`](https://prosemirror.net/docs/ref/#schema-list.splitListItem), but\nwithout resetting the set of active marks at the cursor.\n*/\nfunction splitListItemKeepMarks(itemType, itemAttrs) {\n let split = splitListItem(itemType, itemAttrs);\n return (state, dispatch) => {\n return split(state, dispatch && (tr => {\n let marks = state.storedMarks || (state.selection.$to.parentOffset && state.selection.$from.marks());\n if (marks)\n tr.ensureMarks(marks);\n dispatch(tr);\n }));\n };\n}\n/**\nCreate a command to lift the list item around the selection up into\na wrapping list.\n*/\nfunction liftListItem(itemType) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to, node => node.childCount > 0 && node.firstChild.type == itemType);\n if (!range)\n return false;\n if (!dispatch)\n return true;\n if ($from.node(range.depth - 1).type == itemType) // Inside a parent list\n return liftToOuterList(state, dispatch, itemType, range);\n else // Outer list node\n return liftOutOfList(state, dispatch, range);\n };\n}\nfunction liftToOuterList(state, dispatch, itemType, range) {\n let tr = state.tr, end = range.end, endOfList = range.$to.end(range.depth);\n if (end < endOfList) {\n // There are siblings after the lifted items, which must become\n // children of the last item\n tr.step(new ReplaceAroundStep(end - 1, endOfList, end, endOfList, new Slice(Fragment.from(itemType.create(null, range.parent.copy())), 1, 0), 1, true));\n range = new NodeRange(tr.doc.resolve(range.$from.pos), tr.doc.resolve(endOfList), range.depth);\n }\n const target = liftTarget(range);\n if (target == null)\n return false;\n tr.lift(range, target);\n let $after = tr.doc.resolve(tr.mapping.map(end, -1) - 1);\n if (canJoin(tr.doc, $after.pos) && $after.nodeBefore.type == $after.nodeAfter.type)\n tr.join($after.pos);\n dispatch(tr.scrollIntoView());\n return true;\n}\nfunction liftOutOfList(state, dispatch, range) {\n let tr = state.tr, list = range.parent;\n // Merge the list items into a single big item\n for (let pos = range.end, i = range.endIndex - 1, e = range.startIndex; i > e; i--) {\n pos -= list.child(i).nodeSize;\n tr.delete(pos - 1, pos + 1);\n }\n let $start = tr.doc.resolve(range.start), item = $start.nodeAfter;\n if (tr.mapping.map(range.end) != range.start + $start.nodeAfter.nodeSize)\n return false;\n let atStart = range.startIndex == 0, atEnd = range.endIndex == list.childCount;\n let parent = $start.node(-1), indexBefore = $start.index(-1);\n if (!parent.canReplace(indexBefore + (atStart ? 0 : 1), indexBefore + 1, item.content.append(atEnd ? Fragment.empty : Fragment.from(list))))\n return false;\n let start = $start.pos, end = start + item.nodeSize;\n // Strip off the surrounding list. At the sides where we're not at\n // the end of the list, the existing list is closed. At sides where\n // this is the end, it is overwritten to its end.\n tr.step(new ReplaceAroundStep(start - (atStart ? 1 : 0), end + (atEnd ? 1 : 0), start + 1, end - 1, new Slice((atStart ? Fragment.empty : Fragment.from(list.copy(Fragment.empty)))\n .append(atEnd ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))), atStart ? 0 : 1, atEnd ? 0 : 1), atStart ? 0 : 1));\n dispatch(tr.scrollIntoView());\n return true;\n}\n/**\nCreate a command to sink the list item around the selection down\ninto an inner list.\n*/\nfunction sinkListItem(itemType) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to, node => node.childCount > 0 && node.firstChild.type == itemType);\n if (!range)\n return false;\n let startIndex = range.startIndex;\n if (startIndex == 0)\n return false;\n let parent = range.parent, nodeBefore = parent.child(startIndex - 1);\n if (nodeBefore.type != itemType)\n return false;\n if (dispatch) {\n let nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type == parent.type;\n let inner = Fragment.from(nestedBefore ? itemType.create() : null);\n let slice = new Slice(Fragment.from(itemType.create(null, Fragment.from(parent.type.create(null, inner)))), nestedBefore ? 3 : 1, 0);\n let before = range.start, after = range.end;\n dispatch(state.tr.step(new ReplaceAroundStep(before - (nestedBefore ? 3 : 1), after, before, after, slice, 1, true))\n .scrollIntoView());\n }\n return true;\n };\n}\n\nexport { addListNodes, bulletList, liftListItem, listItem, orderedList, sinkListItem, splitListItem, splitListItemKeepMarks, wrapInList, wrapRangeInList };\n","/**\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Nodes} Nodes\n */\n\n/**\n * @callback GetDefinition\n * Get a definition by identifier.\n * @param {string | null | undefined} [identifier]\n * Identifier of definition (optional).\n * @returns {Definition | undefined}\n * Definition corresponding to `identifier` or `null`.\n */\n\nimport {visit} from 'unist-util-visit'\n\n/**\n * Find definitions in `tree`.\n *\n * Uses CommonMark precedence, which means that earlier definitions are\n * preferred over duplicate later definitions.\n *\n * @param {Nodes} tree\n * Tree to check.\n * @returns {GetDefinition}\n * Getter.\n */\nexport function definitions(tree) {\n /** @type {Map<string, Definition>} */\n const cache = new Map()\n\n if (!tree || !tree.type) {\n throw new Error('mdast-util-definitions expected node')\n }\n\n visit(tree, 'definition', function (definition) {\n const id = clean(definition.identifier)\n if (id && !cache.get(id)) {\n cache.set(id, definition)\n }\n })\n\n return definition\n\n /** @type {GetDefinition} */\n function definition(identifier) {\n const id = clean(identifier)\n return cache.get(id)\n }\n}\n\n/**\n * @param {string | null | undefined} [value]\n * @returns {string}\n */\nfunction clean(value) {\n return String(value || '').toUpperCase()\n}\n","/**\n * @typedef {import('mdast').Root} Root\n */\n\nimport {definitions} from 'mdast-util-definitions'\nimport {SKIP, visit} from 'unist-util-visit'\n\n/**\n * Turn references and definitions into normal links and images.\n *\n * @returns\n * Transform.\n */\nexport default function remarkInlineLinks() {\n /**\n * Transform.\n *\n * @param {Root} tree\n * Tree.\n * @returns {undefined}\n * Nothing.\n */\n return function (tree) {\n const definition = definitions(tree)\n\n visit(tree, function (node, index, parent) {\n if (\n node.type === 'definition' &&\n parent !== undefined &&\n typeof index === 'number'\n ) {\n parent.children.splice(index, 1)\n return [SKIP, index]\n }\n\n if (node.type === 'imageReference' || node.type === 'linkReference') {\n const def = definition(node.identifier)\n\n if (def && parent && typeof index === 'number') {\n parent.children[index] =\n node.type === 'imageReference'\n ? {type: 'image', url: def.url, title: def.title, alt: node.alt}\n : {\n type: 'link',\n url: def.url,\n title: def.title,\n children: node.children\n }\n return [SKIP, index]\n }\n }\n })\n }\n}\n","import { markRule, findSelectedNodeOfType, findNodeInSelection } from \"@milkdown/prose\";\nimport { Fragment, Node } from \"@milkdown/prose/model\";\nimport { TextSelection, Selection, PluginKey, Plugin } from \"@milkdown/prose/state\";\nimport { findWrapping, ReplaceStep, AddMarkStep } from \"@milkdown/prose/transform\";\nimport { $markAttr, $markSchema, $inputRule, $command, $useKeymap, $node, $remark, $nodeAttr, $nodeSchema, $ctx, $prose } from \"@milkdown/utils\";\nimport { remarkStringifyOptionsCtx, commandsCtx, editorViewCtx } from \"@milkdown/core\";\nimport { toggleMark, setBlockType, wrapIn, joinBackward } from \"@milkdown/prose/commands\";\nimport { visitParents } from \"unist-util-visit-parents\";\nimport { expectDomTypeError } from \"@milkdown/exception\";\nimport { textblockTypeInputRule, wrappingInputRule, InputRule } from \"@milkdown/prose/inputrules\";\nimport { sinkListItem, splitListItem, liftListItem } from \"@milkdown/prose/schema-list\";\nimport { Decoration, DecorationSet } from \"@milkdown/prose/view\";\nimport { visit } from \"unist-util-visit\";\nimport remarkInlineLinks from \"remark-inline-links\";\nfunction serializeText(state, node) {\n const lastIsHardBreak = node.childCount >= 1 && node.lastChild?.type.name === \"hardbreak\";\n if (!lastIsHardBreak) {\n state.next(node.content);\n return;\n }\n const contentArr = [];\n node.content.forEach((n, _, i) => {\n if (i === node.childCount - 1) return;\n contentArr.push(n);\n });\n state.next(Fragment.fromArray(contentArr));\n}\nfunction withMeta(plugin, meta) {\n Object.assign(plugin, {\n meta: {\n package: \"@milkdown/preset-commonmark\",\n ...meta\n }\n });\n return plugin;\n}\nconst emphasisAttr = $markAttr(\"emphasis\");\nwithMeta(emphasisAttr, {\n displayName: \"Attr<emphasis>\",\n group: \"Emphasis\"\n});\nconst emphasisSchema = $markSchema(\"emphasis\", (ctx) => ({\n attrs: {\n marker: {\n default: ctx.get(remarkStringifyOptionsCtx).emphasis || \"*\",\n validate: \"string\"\n }\n },\n parseDOM: [\n { tag: \"i\" },\n { tag: \"em\" },\n { style: \"font-style\", getAttrs: (value) => value === \"italic\" }\n ],\n toDOM: (mark) => [\"em\", ctx.get(emphasisAttr.key)(mark)],\n parseMarkdown: {\n match: (node) => node.type === \"emphasis\",\n runner: (state, node, markType) => {\n state.openMark(markType, { marker: node.marker });\n state.next(node.children);\n state.closeMark(markType);\n }\n },\n toMarkdown: {\n match: (mark) => mark.type.name === \"emphasis\",\n runner: (state, mark) => {\n state.withMark(mark, \"emphasis\", void 0, {\n marker: mark.attrs.marker\n });\n }\n }\n}));\nwithMeta(emphasisSchema.mark, {\n displayName: \"MarkSchema<emphasis>\",\n group: \"Emphasis\"\n});\nwithMeta(emphasisSchema.ctx, {\n displayName: \"MarkSchemaCtx<emphasis>\",\n group: \"Emphasis\"\n});\nconst toggleEmphasisCommand = $command(\"ToggleEmphasis\", (ctx) => () => {\n return toggleMark(emphasisSchema.type(ctx));\n});\nwithMeta(toggleEmphasisCommand, {\n displayName: \"Command<toggleEmphasisCommand>\",\n group: \"Emphasis\"\n});\nconst emphasisStarInputRule = $inputRule((ctx) => {\n return markRule(/(?:^|[^*])\\*([^*]+)\\*$/, emphasisSchema.type(ctx), {\n getAttr: () => ({\n marker: \"*\"\n }),\n updateCaptured: ({ fullMatch, start }) => !fullMatch.startsWith(\"*\") ? { fullMatch: fullMatch.slice(1), start: start + 1 } : {}\n });\n});\nwithMeta(emphasisStarInputRule, {\n displayName: \"InputRule<emphasis>|Star\",\n group: \"Emphasis\"\n});\nconst emphasisUnderscoreInputRule = $inputRule((ctx) => {\n return markRule(/\\b_(?![_\\s])(.*?[^_\\s])_\\b/, emphasisSchema.type(ctx), {\n getAttr: () => ({\n marker: \"_\"\n }),\n updateCaptured: ({ fullMatch, start }) => !fullMatch.startsWith(\"_\") ? { fullMatch: fullMatch.slice(1), start: start + 1 } : {}\n });\n});\nwithMeta(emphasisUnderscoreInputRule, {\n displayName: \"InputRule<emphasis>|Underscore\",\n group: \"Emphasis\"\n});\nconst emphasisKeymap = $useKeymap(\"emphasisKeymap\", {\n ToggleEmphasis: {\n shortcuts: \"Mod-i\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(toggleEmphasisCommand.key);\n }\n }\n});\nwithMeta(emphasisKeymap.ctx, {\n displayName: \"KeymapCtx<emphasis>\",\n group: \"Emphasis\"\n});\nwithMeta(emphasisKeymap.shortcuts, {\n displayName: \"Keymap<emphasis>\",\n group: \"Emphasis\"\n});\nconst strongAttr = $markAttr(\"strong\");\nwithMeta(strongAttr, {\n displayName: \"Attr<strong>\",\n group: \"Strong\"\n});\nconst strongSchema = $markSchema(\"strong\", (ctx) => ({\n attrs: {\n marker: {\n default: ctx.get(remarkStringifyOptionsCtx).strong || \"*\",\n validate: \"string\"\n }\n },\n parseDOM: [\n // This works around a Google Docs misbehavior where\n // pasted content will be inexplicably wrapped in `<b>`\n // tags with a font-weight normal.\n {\n tag: \"b\",\n getAttrs: (node) => node.style.fontWeight != \"normal\" && null\n },\n { tag: \"strong\" },\n { style: \"font-style\", getAttrs: (value) => value === \"bold\" },\n { style: \"font-weight=400\", clearMark: (m) => m.type.name == \"strong\" },\n {\n style: \"font-weight\",\n getAttrs: (value) => /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null\n }\n ],\n toDOM: (mark) => [\"strong\", ctx.get(strongAttr.key)(mark)],\n parseMarkdown: {\n match: (node) => node.type === \"strong\",\n runner: (state, node, markType) => {\n state.openMark(markType, { marker: node.marker });\n state.next(node.children);\n state.closeMark(markType);\n }\n },\n toMarkdown: {\n match: (mark) => mark.type.name === \"strong\",\n runner: (state, mark) => {\n state.withMark(mark, \"strong\", void 0, {\n marker: mark.attrs.marker\n });\n }\n }\n}));\nwithMeta(strongSchema.mark, {\n displayName: \"MarkSchema<strong>\",\n group: \"Strong\"\n});\nwithMeta(strongSchema.ctx, {\n displayName: \"MarkSchemaCtx<strong>\",\n group: \"Strong\"\n});\nconst toggleStrongCommand = $command(\"ToggleStrong\", (ctx) => () => {\n return toggleMark(strongSchema.type(ctx));\n});\nwithMeta(toggleStrongCommand, {\n displayName: \"Command<toggleStrongCommand>\",\n group: \"Strong\"\n});\nconst strongInputRule = $inputRule((ctx) => {\n return markRule(\n new RegExp(\"(?<![\\\\w:/])(?:\\\\*\\\\*|__)([^*_]+?)(?:\\\\*\\\\*|__)(?![\\\\w/])$\"),\n strongSchema.type(ctx),\n {\n getAttr: (match) => {\n return {\n marker: match[0].startsWith(\"*\") ? \"*\" : \"_\"\n };\n }\n }\n );\n});\nwithMeta(strongInputRule, {\n displayName: \"InputRule<strong>\",\n group: \"Strong\"\n});\nconst strongKeymap = $useKeymap(\"strongKeymap\", {\n ToggleBold: {\n shortcuts: [\"Mod-b\"],\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(toggleStrongCommand.key);\n }\n }\n});\nwithMeta(strongKeymap.ctx, {\n displayName: \"KeymapCtx<strong>\",\n group: \"Strong\"\n});\nwithMeta(strongKeymap.shortcuts, {\n displayName: \"Keymap<strong>\",\n group: \"Strong\"\n});\nconst inlineCodeAttr = $markAttr(\"inlineCode\");\nwithMeta(inlineCodeAttr, {\n displayName: \"Attr<inlineCode>\",\n group: \"InlineCode\"\n});\nconst inlineCodeSchema = $markSchema(\"inlineCode\", (ctx) => ({\n priority: 100,\n code: true,\n parseDOM: [{ tag: \"code\" }],\n toDOM: (mark) => [\"code\", ctx.get(inlineCodeAttr.key)(mark)],\n parseMarkdown: {\n match: (node) => node.type === \"inlineCode\",\n runner: (state, node, markType) => {\n state.openMark(markType);\n state.addText(node.value);\n state.closeMark(markType);\n }\n },\n toMarkdown: {\n match: (mark) => mark.type.name === \"inlineCode\",\n runner: (state, mark, node) => {\n state.withMark(mark, \"inlineCode\", node.text || \"\");\n }\n }\n}));\nwithMeta(inlineCodeSchema.mark, {\n displayName: \"MarkSchema<inlineCode>\",\n group: \"InlineCode\"\n});\nwithMeta(inlineCodeSchema.ctx, {\n displayName: \"MarkSchemaCtx<inlineCode>\",\n group: \"InlineCode\"\n});\nconst toggleInlineCodeCommand = $command(\n \"ToggleInlineCode\",\n (ctx) => () => (state, dispatch) => {\n const { selection, tr } = state;\n if (selection.empty) return false;\n const { from, to } = selection;\n const has = state.doc.rangeHasMark(from, to, inlineCodeSchema.type(ctx));\n if (has) {\n dispatch?.(tr.removeMark(from, to, inlineCodeSchema.type(ctx)));\n return true;\n }\n const restMarksName = Object.keys(state.schema.marks).filter(\n (x) => x !== inlineCodeSchema.type.name\n );\n restMarksName.map((name) => state.schema.marks[name]).forEach((t) => {\n tr.removeMark(from, to, t);\n });\n dispatch?.(tr.addMark(from, to, inlineCodeSchema.type(ctx).create()));\n return true;\n }\n);\nwithMeta(toggleInlineCodeCommand, {\n displayName: \"Command<toggleInlineCodeCommand>\",\n group: \"InlineCode\"\n});\nconst inlineCodeInputRule = $inputRule((ctx) => {\n return markRule(/(?:`)([^`]+)(?:`)$/, inlineCodeSchema.type(ctx));\n});\nwithMeta(inlineCodeInputRule, {\n displayName: \"InputRule<inlineCodeInputRule>\",\n group: \"InlineCode\"\n});\nconst inlineCodeKeymap = $useKeymap(\"inlineCodeKeymap\", {\n ToggleInlineCode: {\n shortcuts: \"Mod-e\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(toggleInlineCodeCommand.key);\n }\n }\n});\nwithMeta(inlineCodeKeymap.ctx, {\n displayName: \"KeymapCtx<inlineCode>\",\n group: \"InlineCode\"\n});\nwithMeta(inlineCodeKeymap.shortcuts, {\n displayName: \"Keymap<inlineCode>\",\n group: \"InlineCode\"\n});\nconst linkAttr = $markAttr(\"link\");\nwithMeta(linkAttr, {\n displayName: \"Attr<link>\",\n group: \"Link\"\n});\nconst linkSchema = $markSchema(\"link\", (ctx) => ({\n attrs: {\n href: { validate: \"string\" },\n title: { default: null, validate: \"string|null\" }\n },\n parseDOM: [\n {\n tag: \"a[href]\",\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n href: dom.getAttribute(\"href\"),\n title: dom.getAttribute(\"title\")\n };\n }\n }\n ],\n toDOM: (mark) => [\"a\", { ...ctx.get(linkAttr.key)(mark), ...mark.attrs }],\n parseMarkdown: {\n match: (node) => node.type === \"link\",\n runner: (state, node, markType) => {\n const url = node.url;\n const title = node.title;\n state.openMark(markType, { href: url, title });\n state.next(node.children);\n state.closeMark(markType);\n }\n },\n toMarkdown: {\n match: (mark) => mark.type.name === \"link\",\n runner: (state, mark) => {\n state.withMark(mark, \"link\", void 0, {\n title: mark.attrs.title,\n url: mark.attrs.href\n });\n }\n }\n}));\nwithMeta(linkSchema.mark, {\n displayName: \"MarkSchema<link>\",\n group: \"Link\"\n});\nconst toggleLinkCommand = $command(\n \"ToggleLink\",\n (ctx) => (payload = {}) => toggleMark(linkSchema.type(ctx), payload)\n);\nwithMeta(toggleLinkCommand, {\n displayName: \"Command<toggleLinkCommand>\",\n group: \"Link\"\n});\nconst updateLinkCommand = $command(\n \"UpdateLink\",\n (ctx) => (payload = {}) => (state, dispatch) => {\n if (!dispatch) return false;\n let node;\n let pos = -1;\n const { selection } = state;\n const { from, to } = selection;\n state.doc.nodesBetween(from, from === to ? to + 1 : to, (n, p) => {\n if (linkSchema.type(ctx).isInSet(n.marks)) {\n node = n;\n pos = p;\n return false;\n }\n return void 0;\n });\n if (!node) return false;\n const mark = node.marks.find(({ type }) => type === linkSchema.type(ctx));\n if (!mark) return false;\n const start = pos;\n const end = pos + node.nodeSize;\n const { tr } = state;\n const linkMark = linkSchema.type(ctx).create({ ...mark.attrs, ...payload });\n if (!linkMark) return false;\n dispatch(\n tr.removeMark(start, end, mark).addMark(start, end, linkMark).setSelection(new TextSelection(tr.selection.$anchor)).scrollIntoView()\n );\n return true;\n }\n);\nwithMeta(updateLinkCommand, {\n displayName: \"Command<updateLinkCommand>\",\n group: \"Link\"\n});\nconst docSchema = $node(\"doc\", () => ({\n content: \"block+\",\n parseMarkdown: {\n match: ({ type }) => type === \"root\",\n runner: (state, node, type) => {\n state.injectRoot(node, type);\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"doc\",\n runner: (state, node) => {\n state.openNode(\"root\");\n state.next(node.content);\n }\n }\n}));\nwithMeta(docSchema, {\n displayName: \"NodeSchema<doc>\",\n group: \"Doc\"\n});\nfunction visitEmptyLine(ast) {\n return visitParents(\n ast,\n (node) => node.type === \"html\" && [\"<br />\", \"<br>\", \"<br >\", \"<br/>\"].includes(\n node.value?.trim()\n ),\n (node, parents) => {\n if (!parents.length) return;\n const parent = parents[parents.length - 1];\n if (!parent) return;\n const index = parent.children.indexOf(node);\n if (index === -1) return;\n parent.children.splice(index, 1);\n },\n true\n );\n}\nconst remarkPreserveEmptyLinePlugin = $remark(\n \"remark-preserve-empty-line\",\n () => () => visitEmptyLine\n);\nwithMeta(remarkPreserveEmptyLinePlugin.plugin, {\n displayName: \"Remark<remarkPreserveEmptyLine>\",\n group: \"Remark\"\n});\nwithMeta(remarkPreserveEmptyLinePlugin.options, {\n displayName: \"RemarkConfig<remarkPreserveEmptyLine>\",\n group: \"Remark\"\n});\nconst paragraphAttr = $nodeAttr(\"paragraph\");\nwithMeta(paragraphAttr, {\n displayName: \"Attr<paragraph>\",\n group: \"Paragraph\"\n});\nconst paragraphSchema = $nodeSchema(\"paragraph\", (ctx) => ({\n content: \"inline*\",\n group: \"block\",\n parseDOM: [{ tag: \"p\" }],\n toDOM: (node) => [\"p\", ctx.get(paragraphAttr.key)(node), 0],\n parseMarkdown: {\n match: (node) => node.type === \"paragraph\",\n runner: (state, node, type) => {\n state.openNode(type);\n if (node.children) state.next(node.children);\n else state.addText(node.value || \"\");\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"paragraph\",\n runner: (state, node) => {\n const view = ctx.get(editorViewCtx);\n const lastNode = view.state?.doc.lastChild;\n state.openNode(\"paragraph\");\n if ((!node.content || node.content.size === 0) && node !== lastNode && shouldPreserveEmptyLine(ctx)) {\n state.addNode(\"html\", void 0, \"<br />\");\n } else {\n serializeText(state, node);\n }\n state.closeNode();\n }\n }\n}));\nfunction shouldPreserveEmptyLine(ctx) {\n let shouldPreserveEmptyLine2 = false;\n try {\n ctx.get(remarkPreserveEmptyLinePlugin.id);\n shouldPreserveEmptyLine2 = true;\n } catch {\n shouldPreserveEmptyLine2 = false;\n }\n return shouldPreserveEmptyLine2;\n}\nwithMeta(paragraphSchema.node, {\n displayName: \"NodeSchema<paragraph>\",\n group: \"Paragraph\"\n});\nwithMeta(paragraphSchema.ctx, {\n displayName: \"NodeSchemaCtx<paragraph>\",\n group: \"Paragraph\"\n});\nconst turnIntoTextCommand = $command(\n \"TurnIntoText\",\n (ctx) => () => setBlockType(paragraphSchema.type(ctx))\n);\nwithMeta(turnIntoTextCommand, {\n displayName: \"Command<turnIntoTextCommand>\",\n group: \"Paragraph\"\n});\nconst paragraphKeymap = $useKeymap(\"paragraphKeymap\", {\n TurnIntoText: {\n shortcuts: \"Mod-Alt-0\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(turnIntoTextCommand.key);\n }\n }\n});\nwithMeta(paragraphKeymap.ctx, {\n displayName: \"KeymapCtx<paragraph>\",\n group: \"Paragraph\"\n});\nwithMeta(paragraphKeymap.shortcuts, {\n displayName: \"Keymap<paragraph>\",\n group: \"Paragraph\"\n});\nconst headingIndex = Array(6).fill(0).map((_, i) => i + 1);\nfunction defaultHeadingIdGenerator(node) {\n return node.textContent.toLowerCase().trim().replace(/\\s+/g, \"-\");\n}\nconst headingIdGenerator = $ctx(\n defaultHeadingIdGenerator,\n \"headingIdGenerator\"\n);\nwithMeta(headingIdGenerator, {\n displayName: \"Ctx<HeadingIdGenerator>\",\n group: \"Heading\"\n});\nconst headingAttr = $nodeAttr(\"heading\");\nwithMeta(headingAttr, {\n displayName: \"Attr<heading>\",\n group: \"Heading\"\n});\nconst headingSchema = $nodeSchema(\"heading\", (ctx) => {\n const getId = ctx.get(headingIdGenerator.key);\n return {\n content: \"inline*\",\n group: \"block\",\n defining: true,\n attrs: {\n id: {\n default: \"\",\n validate: \"string\"\n },\n level: {\n default: 1,\n validate: \"number\"\n }\n },\n parseDOM: headingIndex.map((x) => ({\n tag: `h${x}`,\n getAttrs: (node) => {\n if (!(node instanceof HTMLElement)) throw expectDomTypeError(node);\n return { level: x, id: node.id };\n }\n })),\n toDOM: (node) => {\n return [\n `h${node.attrs.level}`,\n {\n ...ctx.get(headingAttr.key)(node),\n id: node.attrs.id || getId(node)\n },\n 0\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === \"heading\",\n runner: (state, node, type) => {\n const depth = node.depth;\n state.openNode(type, { level: depth });\n state.next(node.children);\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"heading\",\n runner: (state, node) => {\n state.openNode(\"heading\", void 0, { depth: node.attrs.level });\n serializeText(state, node);\n state.closeNode();\n }\n }\n };\n});\nwithMeta(headingSchema.node, {\n displayName: \"NodeSchema<heading>\",\n group: \"Heading\"\n});\nwithMeta(headingSchema.ctx, {\n displayName: \"NodeSchemaCtx<heading>\",\n group: \"Heading\"\n});\nconst wrapInHeadingInputRule = $inputRule((ctx) => {\n return textblockTypeInputRule(\n /^(?<hashes>#+)\\s$/,\n headingSchema.type(ctx),\n (match) => {\n const x = match.groups?.hashes?.length || 0;\n const view = ctx.get(editorViewCtx);\n const { $from } = view.state.selection;\n const node = $from.node();\n if (node.type.name === \"heading\") {\n let level = Number(node.attrs.level) + Number(x);\n if (level > 6) level = 6;\n return { level };\n }\n return { level: x };\n }\n );\n});\nwithMeta(wrapInHeadingInputRule, {\n displayName: \"InputRule<wrapInHeadingInputRule>\",\n group: \"Heading\"\n});\nconst wrapInHeadingCommand = $command(\"WrapInHeading\", (ctx) => {\n return (level) => {\n level ??= 1;\n if (level < 1) return setBlockType(paragraphSchema.type(ctx));\n return setBlockType(headingSchema.type(ctx), { level });\n };\n});\nwithMeta(wrapInHeadingCommand, {\n displayName: \"Command<wrapInHeadingCommand>\",\n group: \"Heading\"\n});\nconst downgradeHeadingCommand = $command(\n \"DowngradeHeading\",\n (ctx) => () => (state, dispatch, view) => {\n const { $from } = state.selection;\n const node = $from.node();\n if (node.type !== headingSchema.type(ctx) || !state.selection.empty || $from.parentOffset !== 0)\n return false;\n const level = node.attrs.level - 1;\n if (!level)\n return setBlockType(paragraphSchema.type(ctx))(state, dispatch, view);\n dispatch?.(\n state.tr.setNodeMarkup(state.selection.$from.before(), void 0, {\n ...node.attrs,\n level\n })\n );\n return true;\n }\n);\nwithMeta(downgradeHeadingCommand, {\n displayName: \"Command<downgradeHeadingCommand>\",\n group: \"Heading\"\n});\nconst headingKeymap = $useKeymap(\"headingKeymap\", {\n TurnIntoH1: {\n shortcuts: \"Mod-Alt-1\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInHeadingCommand.key, 1);\n }\n },\n TurnIntoH2: {\n shortcuts: \"Mod-Alt-2\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInHeadingCommand.key, 2);\n }\n },\n TurnIntoH3: {\n shortcuts: \"Mod-Alt-3\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInHeadingCommand.key, 3);\n }\n },\n TurnIntoH4: {\n shortcuts: \"Mod-Alt-4\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInHeadingCommand.key, 4);\n }\n },\n TurnIntoH5: {\n shortcuts: \"Mod-Alt-5\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInHeadingCommand.key, 5);\n }\n },\n TurnIntoH6: {\n shortcuts: \"Mod-Alt-6\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInHeadingCommand.key, 6);\n }\n },\n DowngradeHeading: {\n shortcuts: [\"Delete\", \"Backspace\"],\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(downgradeHeadingCommand.key);\n }\n }\n});\nwithMeta(headingKeymap.ctx, {\n displayName: \"KeymapCtx<heading>\",\n group: \"Heading\"\n});\nwithMeta(headingKeymap.shortcuts, {\n displayName: \"Keymap<heading>\",\n group: \"Heading\"\n});\nconst blockquoteAttr = $nodeAttr(\"blockquote\");\nwithMeta(blockquoteAttr, {\n displayName: \"Attr<blockquote>\",\n group: \"Blockquote\"\n});\nconst blockquoteSchema = $nodeSchema(\n \"blockquote\",\n (ctx) => ({\n content: \"block+\",\n group: \"block\",\n defining: true,\n parseDOM: [{ tag: \"blockquote\" }],\n toDOM: (node) => [\"blockquote\", ctx.get(blockquoteAttr.key)(node), 0],\n parseMarkdown: {\n match: ({ type }) => type === \"blockquote\",\n runner: (state, node, type) => {\n state.openNode(type).next(node.children).closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"blockquote\",\n runner: (state, node) => {\n state.openNode(\"blockquote\").next(node.content).closeNode();\n }\n }\n })\n);\nwithMeta(blockquoteSchema.node, {\n displayName: \"NodeSchema<blockquote>\",\n group: \"Blockquote\"\n});\nwithMeta(blockquoteSchema.ctx, {\n displayName: \"NodeSchemaCtx<blockquote>\",\n group: \"Blockquote\"\n});\nconst wrapInBlockquoteInputRule = $inputRule(\n (ctx) => wrappingInputRule(/^\\s*>\\s$/, blockquoteSchema.type(ctx))\n);\nwithMeta(wrapInBlockquoteInputRule, {\n displayName: \"InputRule<wrapInBlockquoteInputRule>\",\n group: \"Blockquote\"\n});\nconst wrapInBlockquoteCommand = $command(\n \"WrapInBlockquote\",\n (ctx) => () => wrapIn(blockquoteSchema.type(ctx))\n);\nwithMeta(wrapInBlockquoteCommand, {\n displayName: \"Command<wrapInBlockquoteCommand>\",\n group: \"Blockquote\"\n});\nconst blockquoteKeymap = $useKeymap(\"blockquoteKeymap\", {\n WrapInBlockquote: {\n shortcuts: \"Mod-Shift-b\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInBlockquoteCommand.key);\n }\n }\n});\nwithMeta(blockquoteKeymap.ctx, {\n displayName: \"KeymapCtx<blockquote>\",\n group: \"Blockquote\"\n});\nwithMeta(blockquoteKeymap.shortcuts, {\n displayName: \"Keymap<blockquote>\",\n group: \"Blockquote\"\n});\nconst codeBlockAttr = $nodeAttr(\"codeBlock\", () => ({\n pre: {},\n code: {}\n}));\nwithMeta(codeBlockAttr, {\n displayName: \"Attr<codeBlock>\",\n group: \"CodeBlock\"\n});\nconst codeBlockSchema = $nodeSchema(\"code_block\", (ctx) => {\n return {\n content: \"text*\",\n group: \"block\",\n marks: \"\",\n defining: true,\n code: true,\n attrs: {\n language: {\n default: \"\",\n validate: \"string\"\n }\n },\n parseDOM: [\n {\n tag: \"pre\",\n preserveWhitespace: \"full\",\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return { language: dom.dataset.language };\n }\n }\n ],\n toDOM: (node) => {\n const attr = ctx.get(codeBlockAttr.key)(node);\n const language = node.attrs.language;\n const languageAttrs = language && language.length > 0 ? { \"data-language\": language } : void 0;\n return [\n \"pre\",\n {\n ...attr.pre,\n ...languageAttrs\n },\n [\"code\", attr.code, 0]\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === \"code\",\n runner: (state, node, type) => {\n const language = node.lang ?? \"\";\n const value = node.value;\n state.openNode(type, { language });\n if (value) state.addText(value);\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"code_block\",\n runner: (state, node) => {\n state.addNode(\"code\", void 0, node.content.firstChild?.text || \"\", {\n lang: node.attrs.language\n });\n }\n }\n };\n});\nwithMeta(codeBlockSchema.node, {\n displayName: \"NodeSchema<codeBlock>\",\n group: \"CodeBlock\"\n});\nwithMeta(codeBlockSchema.ctx, {\n displayName: \"NodeSchemaCtx<codeBlock>\",\n group: \"CodeBlock\"\n});\nconst createCodeBlockInputRule = $inputRule(\n (ctx) => textblockTypeInputRule(\n /^```(?<language>[a-z]*)?[\\s\\n]$/,\n codeBlockSchema.type(ctx),\n (match) => ({\n language: match.groups?.language ?? \"\"\n })\n )\n);\nwithMeta(createCodeBlockInputRule, {\n displayName: \"InputRule<createCodeBlockInputRule>\",\n group: \"CodeBlock\"\n});\nconst createCodeBlockCommand = $command(\n \"CreateCodeBlock\",\n (ctx) => (language = \"\") => setBlockType(codeBlockSchema.type(ctx), { language })\n);\nwithMeta(createCodeBlockCommand, {\n displayName: \"Command<createCodeBlockCommand>\",\n group: \"CodeBlock\"\n});\nconst updateCodeBlockLanguageCommand = $command(\n \"UpdateCodeBlockLanguage\",\n () => ({ pos, language } = {\n pos: -1,\n language: \"\"\n }) => (state, dispatch) => {\n if (pos >= 0) {\n dispatch?.(state.tr.setNodeAttribute(pos, \"language\", language));\n return true;\n }\n return false;\n }\n);\nwithMeta(updateCodeBlockLanguageCommand, {\n displayName: \"Command<updateCodeBlockLanguageCommand>\",\n group: \"CodeBlock\"\n});\nconst codeBlockKeymap = $useKeymap(\"codeBlockKeymap\", {\n CreateCodeBlock: {\n shortcuts: \"Mod-Alt-c\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(createCodeBlockCommand.key);\n }\n }\n});\nwithMeta(codeBlockKeymap.ctx, {\n displayName: \"KeymapCtx<codeBlock>\",\n group: \"CodeBlock\"\n});\nwithMeta(codeBlockKeymap.shortcuts, {\n displayName: \"Keymap<codeBlock>\",\n group: \"CodeBlock\"\n});\nconst imageAttr = $nodeAttr(\"image\");\nwithMeta(imageAttr, {\n displayName: \"Attr<image>\",\n group: \"Image\"\n});\nconst imageSchema = $nodeSchema(\"image\", (ctx) => {\n return {\n inline: true,\n group: \"inline\",\n selectable: true,\n draggable: true,\n marks: \"\",\n atom: true,\n defining: true,\n isolating: true,\n attrs: {\n src: { default: \"\", validate: \"string\" },\n alt: { default: \"\", validate: \"string\" },\n title: { default: \"\", validate: \"string\" }\n },\n parseDOM: [\n {\n tag: \"img[src]\",\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n src: dom.getAttribute(\"src\") || \"\",\n alt: dom.getAttribute(\"alt\") || \"\",\n title: dom.getAttribute(\"title\") || dom.getAttribute(\"alt\") || \"\"\n };\n }\n }\n ],\n toDOM: (node) => {\n return [\"img\", { ...ctx.get(imageAttr.key)(node), ...node.attrs }];\n },\n parseMarkdown: {\n match: ({ type }) => type === \"image\",\n runner: (state, node, type) => {\n const url = node.url;\n const alt = node.alt;\n const title = node.title;\n state.addNode(type, {\n src: url,\n alt,\n title\n });\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"image\",\n runner: (state, node) => {\n state.addNode(\"image\", void 0, void 0, {\n title: node.attrs.title,\n url: node.attrs.src,\n alt: node.attrs.alt\n });\n }\n }\n };\n});\nwithMeta(imageSchema.node, {\n displayName: \"NodeSchema<image>\",\n group: \"Image\"\n});\nwithMeta(imageSchema.ctx, {\n displayName: \"NodeSchemaCtx<image>\",\n group: \"Image\"\n});\nconst insertImageCommand = $command(\n \"InsertImage\",\n (ctx) => (payload = {}) => (state, dispatch) => {\n if (!dispatch) return true;\n const { src = \"\", alt = \"\", title = \"\" } = payload;\n const node = imageSchema.type(ctx).create({ src, alt, title });\n if (!node) return true;\n dispatch(state.tr.replaceSelectionWith(node).scrollIntoView());\n return true;\n }\n);\nwithMeta(insertImageCommand, {\n displayName: \"Command<insertImageCommand>\",\n group: \"Image\"\n});\nconst updateImageCommand = $command(\n \"UpdateImage\",\n (ctx) => (payload = {}) => (state, dispatch) => {\n const nodeWithPos = findSelectedNodeOfType(\n state.selection,\n imageSchema.type(ctx)\n );\n if (!nodeWithPos) return false;\n const { node, pos } = nodeWithPos;\n const newAttrs = { ...node.attrs };\n const { src, alt, title } = payload;\n if (src !== void 0) newAttrs.src = src;\n if (alt !== void 0) newAttrs.alt = alt;\n if (title !== void 0) newAttrs.title = title;\n dispatch?.(\n state.tr.setNodeMarkup(pos, void 0, newAttrs).scrollIntoView()\n );\n return true;\n }\n);\nwithMeta(updateImageCommand, {\n displayName: \"Command<updateImageCommand>\",\n group: \"Image\"\n});\nconst insertImageInputRule = $inputRule(\n (ctx) => new InputRule(\n /!\\[(?<alt>.*?)]\\((?<filename>.*?)\\s*(?=\"|\\))\"?(?<title>[^\"]+)?\"?\\)/,\n (state, match, start, end) => {\n const [matched, alt, src = \"\", title] = match;\n if (matched)\n return state.tr.replaceWith(\n start,\n end,\n imageSchema.type(ctx).create({ src, alt, title })\n );\n return null;\n }\n )\n);\nwithMeta(insertImageInputRule, {\n displayName: \"InputRule<insertImageInputRule>\",\n group: \"Image\"\n});\nconst hardbreakAttr = $nodeAttr(\"hardbreak\", (node) => {\n return {\n \"data-type\": \"hardbreak\",\n \"data-is-inline\": node.attrs.isInline\n };\n});\nwithMeta(hardbreakAttr, {\n displayName: \"Attr<hardbreak>\",\n group: \"Hardbreak\"\n});\nconst hardbreakSchema = $nodeSchema(\"hardbreak\", (ctx) => ({\n inline: true,\n group: \"inline\",\n attrs: {\n isInline: {\n default: false,\n validate: \"boolean\"\n }\n },\n selectable: false,\n parseDOM: [\n { tag: \"br\" },\n {\n tag: 'span[data-type=\"hardbreak\"]',\n getAttrs: () => ({ isInline: true })\n }\n ],\n toDOM: (node) => node.attrs.isInline ? [\"span\", ctx.get(hardbreakAttr.key)(node), \" \"] : [\"br\", ctx.get(hardbreakAttr.key)(node)],\n parseMarkdown: {\n match: ({ type }) => type === \"break\",\n runner: (state, node, type) => {\n state.addNode(type, {\n isInline: Boolean(\n node.data?.isInline\n )\n });\n }\n },\n leafText: () => \"\\n\",\n toMarkdown: {\n match: (node) => node.type.name === \"hardbreak\",\n runner: (state, node) => {\n if (node.attrs.isInline) state.addNode(\"text\", void 0, \"\\n\");\n else state.addNode(\"break\");\n }\n }\n}));\nwithMeta(hardbreakSchema.node, {\n displayName: \"NodeSchema<hardbreak>\",\n group: \"Hardbreak\"\n});\nwithMeta(hardbreakSchema.ctx, {\n displayName: \"NodeSchemaCtx<hardbreak>\",\n group: \"Hardbreak\"\n});\nconst insertHardbreakCommand = $command(\n \"InsertHardbreak\",\n (ctx) => () => (state, dispatch) => {\n const { selection, tr } = state;\n if (!(selection instanceof TextSelection)) return false;\n if (selection.empty) {\n const node = selection.$from.node();\n if (node.childCount > 0 && node.lastChild?.type.name === \"hardbreak\") {\n dispatch?.(\n tr.replaceRangeWith(\n selection.to - 1,\n selection.to,\n state.schema.node(\"paragraph\")\n ).setSelection(Selection.near(tr.doc.resolve(selection.to))).scrollIntoView()\n );\n return true;\n }\n }\n dispatch?.(\n tr.setMeta(\"hardbreak\", true).replaceSelectionWith(hardbreakSchema.type(ctx).create()).scrollIntoView()\n );\n return true;\n }\n);\nwithMeta(insertHardbreakCommand, {\n displayName: \"Command<insertHardbreakCommand>\",\n group: \"Hardbreak\"\n});\nconst hardbreakKeymap = $useKeymap(\"hardbreakKeymap\", {\n InsertHardbreak: {\n shortcuts: \"Shift-Enter\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(insertHardbreakCommand.key);\n }\n }\n});\nwithMeta(hardbreakKeymap.ctx, {\n displayName: \"KeymapCtx<hardbreak>\",\n group: \"Hardbreak\"\n});\nwithMeta(hardbreakKeymap.shortcuts, {\n displayName: \"Keymap<hardbreak>\",\n group: \"Hardbreak\"\n});\nconst hrAttr = $nodeAttr(\"hr\");\nwithMeta(hrAttr, {\n displayName: \"Attr<hr>\",\n group: \"Hr\"\n});\nconst hrSchema = $nodeSchema(\"hr\", (ctx) => ({\n group: \"block\",\n parseDOM: [{ tag: \"hr\" }],\n toDOM: (node) => [\"hr\", ctx.get(hrAttr.key)(node)],\n parseMarkdown: {\n match: ({ type }) => type === \"thematicBreak\",\n runner: (state, _, type) => {\n state.addNode(type);\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"hr\",\n runner: (state) => {\n state.addNode(\"thematicBreak\");\n }\n }\n}));\nwithMeta(hrSchema.node, {\n displayName: \"NodeSchema<hr>\",\n group: \"Hr\"\n});\nwithMeta(hrSchema.ctx, {\n displayName: \"NodeSchemaCtx<hr>\",\n group: \"Hr\"\n});\nconst insertHrInputRule = $inputRule(\n (ctx) => new InputRule(/^(?:---|___\\s|\\*\\*\\*\\s)$/, (state, match, start, end) => {\n const { tr } = state;\n if (match[0]) tr.replaceWith(start - 1, end, hrSchema.type(ctx).create());\n return tr;\n })\n);\nwithMeta(insertHrInputRule, {\n displayName: \"InputRule<insertHrInputRule>\",\n group: \"Hr\"\n});\nconst insertHrCommand = $command(\n \"InsertHr\",\n (ctx) => () => (state, dispatch) => {\n if (!dispatch) return true;\n const paragraph = paragraphSchema.node.type(ctx).create();\n const { tr, selection } = state;\n const { from } = selection;\n const node = hrSchema.type(ctx).create();\n if (!node) return true;\n const _tr = tr.replaceSelectionWith(node).insert(from, paragraph);\n const sel = Selection.findFrom(_tr.doc.resolve(from), 1, true);\n if (!sel) return true;\n dispatch(_tr.setSelection(sel).scrollIntoView());\n return true;\n }\n);\nwithMeta(insertHrCommand, {\n displayName: \"Command<insertHrCommand>\",\n group: \"Hr\"\n});\nconst bulletListAttr = $nodeAttr(\"bulletList\");\nwithMeta(bulletListAttr, {\n displayName: \"Attr<bulletList>\",\n group: \"BulletList\"\n});\nconst bulletListSchema = $nodeSchema(\"bullet_list\", (ctx) => {\n return {\n content: \"listItem+\",\n group: \"block\",\n attrs: {\n spread: {\n default: false,\n validate: \"boolean\"\n }\n },\n parseDOM: [\n {\n tag: \"ul\",\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n spread: dom.dataset.spread === \"true\"\n };\n }\n }\n ],\n toDOM: (node) => {\n return [\n \"ul\",\n {\n ...ctx.get(bulletListAttr.key)(node),\n \"data-spread\": node.attrs.spread\n },\n 0\n ];\n },\n parseMarkdown: {\n match: ({ type, ordered }) => type === \"list\" && !ordered,\n runner: (state, node, type) => {\n const spread = node.spread != null ? `${node.spread}` : \"false\";\n state.openNode(type, { spread }).next(node.children).closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"bullet_list\",\n runner: (state, node) => {\n state.openNode(\"list\", void 0, {\n ordered: false,\n spread: node.attrs.spread\n }).next(node.content).closeNode();\n }\n }\n };\n});\nwithMeta(bulletListSchema.node, {\n displayName: \"NodeSchema<bulletList>\",\n group: \"BulletList\"\n});\nwithMeta(bulletListSchema.ctx, {\n displayName: \"NodeSchemaCtx<bulletList>\",\n group: \"BulletList\"\n});\nconst wrapInBulletListInputRule = $inputRule(\n (ctx) => wrappingInputRule(/^\\s*([-+*])\\s$/, bulletListSchema.type(ctx))\n);\nwithMeta(wrapInBulletListInputRule, {\n displayName: \"InputRule<wrapInBulletListInputRule>\",\n group: \"BulletList\"\n});\nconst wrapInBulletListCommand = $command(\n \"WrapInBulletList\",\n (ctx) => () => wrapIn(bulletListSchema.type(ctx))\n);\nwithMeta(wrapInBulletListCommand, {\n displayName: \"Command<wrapInBulletListCommand>\",\n group: \"BulletList\"\n});\nconst bulletListKeymap = $useKeymap(\"bulletListKeymap\", {\n WrapInBulletList: {\n shortcuts: \"Mod-Alt-8\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInBulletListCommand.key);\n }\n }\n});\nwithMeta(bulletListKeymap.ctx, {\n displayName: \"KeymapCtx<bulletListKeymap>\",\n group: \"BulletList\"\n});\nwithMeta(bulletListKeymap.shortcuts, {\n displayName: \"Keymap<bulletListKeymap>\",\n group: \"BulletList\"\n});\nconst orderedListAttr = $nodeAttr(\"orderedList\");\nwithMeta(orderedListAttr, {\n displayName: \"Attr<orderedList>\",\n group: \"OrderedList\"\n});\nconst orderedListSchema = $nodeSchema(\"ordered_list\", (ctx) => ({\n content: \"listItem+\",\n group: \"block\",\n attrs: {\n order: {\n default: 1,\n validate: \"number\"\n },\n spread: {\n default: false,\n validate: \"boolean\"\n }\n },\n parseDOM: [\n {\n tag: \"ol\",\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n spread: dom.dataset.spread,\n order: dom.hasAttribute(\"start\") ? Number(dom.getAttribute(\"start\")) : 1\n };\n }\n }\n ],\n toDOM: (node) => [\n \"ol\",\n {\n ...ctx.get(orderedListAttr.key)(node),\n ...node.attrs.order === 1 ? {} : node.attrs.order,\n \"data-spread\": node.attrs.spread\n },\n 0\n ],\n parseMarkdown: {\n match: ({ type, ordered }) => type === \"list\" && !!ordered,\n runner: (state, node, type) => {\n const spread = node.spread != null ? `${node.spread}` : \"true\";\n state.openNode(type, { spread }).next(node.children).closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"ordered_list\",\n runner: (state, node) => {\n state.openNode(\"list\", void 0, {\n ordered: true,\n start: 1,\n spread: node.attrs.spread === \"true\"\n });\n state.next(node.content);\n state.closeNode();\n }\n }\n}));\nwithMeta(orderedListSchema.node, {\n displayName: \"NodeSchema<orderedList>\",\n group: \"OrderedList\"\n});\nwithMeta(orderedListSchema.ctx, {\n displayName: \"NodeSchemaCtx<orderedList>\",\n group: \"OrderedList\"\n});\nconst wrapInOrderedListInputRule = $inputRule(\n (ctx) => wrappingInputRule(\n /^\\s*(\\d+)\\.\\s$/,\n orderedListSchema.type(ctx),\n (match) => ({ order: Number(match[1]) }),\n (match, node) => node.childCount + node.attrs.order === Number(match[1])\n )\n);\nwithMeta(wrapInOrderedListInputRule, {\n displayName: \"InputRule<wrapInOrderedListInputRule>\",\n group: \"OrderedList\"\n});\nconst wrapInOrderedListCommand = $command(\n \"WrapInOrderedList\",\n (ctx) => () => wrapIn(orderedListSchema.type(ctx))\n);\nwithMeta(wrapInOrderedListCommand, {\n displayName: \"Command<wrapInOrderedListCommand>\",\n group: \"OrderedList\"\n});\nconst orderedListKeymap = $useKeymap(\"orderedListKeymap\", {\n WrapInOrderedList: {\n shortcuts: \"Mod-Alt-7\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(wrapInOrderedListCommand.key);\n }\n }\n});\nwithMeta(orderedListKeymap.ctx, {\n displayName: \"KeymapCtx<orderedList>\",\n group: \"OrderedList\"\n});\nwithMeta(orderedListKeymap.shortcuts, {\n displayName: \"Keymap<orderedList>\",\n group: \"OrderedList\"\n});\nconst listItemAttr = $nodeAttr(\"listItem\");\nwithMeta(listItemAttr, {\n displayName: \"Attr<listItem>\",\n group: \"ListItem\"\n});\nconst listItemSchema = $nodeSchema(\"list_item\", (ctx) => ({\n group: \"listItem\",\n content: \"paragraph block*\",\n attrs: {\n label: {\n default: \"•\",\n validate: \"string\"\n },\n listType: {\n default: \"bullet\",\n validate: \"string\"\n },\n spread: {\n default: true,\n validate: \"boolean\"\n }\n },\n defining: true,\n parseDOM: [\n {\n tag: \"li\",\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n label: dom.dataset.label,\n listType: dom.dataset.listType,\n spread: dom.dataset.spread === \"true\"\n };\n }\n }\n ],\n toDOM: (node) => [\n \"li\",\n {\n ...ctx.get(listItemAttr.key)(node),\n \"data-label\": node.attrs.label,\n \"data-list-type\": node.attrs.listType,\n \"data-spread\": node.attrs.spread\n },\n 0\n ],\n parseMarkdown: {\n match: ({ type }) => type === \"listItem\",\n runner: (state, node, type) => {\n const label = node.label != null ? `${node.label}.` : \"•\";\n const listType = node.label != null ? \"ordered\" : \"bullet\";\n const spread = node.spread != null ? `${node.spread}` : \"true\";\n state.openNode(type, { label, listType, spread });\n state.next(node.children);\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"list_item\",\n runner: (state, node) => {\n state.openNode(\"listItem\", void 0, {\n spread: node.attrs.spread\n });\n state.next(node.content);\n state.closeNode();\n }\n }\n}));\nwithMeta(listItemSchema.node, {\n displayName: \"NodeSchema<listItem>\",\n group: \"ListItem\"\n});\nwithMeta(listItemSchema.ctx, {\n displayName: \"NodeSchemaCtx<listItem>\",\n group: \"ListItem\"\n});\nconst sinkListItemCommand = $command(\n \"SinkListItem\",\n (ctx) => () => sinkListItem(listItemSchema.type(ctx))\n);\nwithMeta(sinkListItemCommand, {\n displayName: \"Command<sinkListItemCommand>\",\n group: \"ListItem\"\n});\nconst liftListItemCommand = $command(\n \"LiftListItem\",\n (ctx) => () => liftListItem(listItemSchema.type(ctx))\n);\nwithMeta(liftListItemCommand, {\n displayName: \"Command<liftListItemCommand>\",\n group: \"ListItem\"\n});\nconst splitListItemCommand = $command(\n \"SplitListItem\",\n (ctx) => () => splitListItem(listItemSchema.type(ctx))\n);\nwithMeta(splitListItemCommand, {\n displayName: \"Command<splitListItemCommand>\",\n group: \"ListItem\"\n});\nfunction liftFirstListItem(ctx) {\n return (state, dispatch, view) => {\n const { selection } = state;\n if (!(selection instanceof TextSelection)) return false;\n const { empty, $from } = selection;\n if (!empty || $from.parentOffset !== 0) return false;\n const parentItem = $from.node(-1);\n if (parentItem.type !== listItemSchema.type(ctx)) return false;\n return joinBackward(state, dispatch, view);\n };\n}\nconst liftFirstListItemCommand = $command(\n \"LiftFirstListItem\",\n (ctx) => () => liftFirstListItem(ctx)\n);\nwithMeta(liftFirstListItemCommand, {\n displayName: \"Command<liftFirstListItemCommand>\",\n group: \"ListItem\"\n});\nconst listItemKeymap = $useKeymap(\"listItemKeymap\", {\n NextListItem: {\n shortcuts: \"Enter\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(splitListItemCommand.key);\n }\n },\n SinkListItem: {\n shortcuts: [\"Tab\", \"Mod-]\"],\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(sinkListItemCommand.key);\n }\n },\n LiftListItem: {\n shortcuts: [\"Shift-Tab\", \"Mod-[\"],\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(liftListItemCommand.key);\n }\n },\n LiftFirstListItem: {\n shortcuts: [\"Backspace\", \"Delete\"],\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(liftFirstListItemCommand.key);\n }\n }\n});\nwithMeta(listItemKeymap.ctx, {\n displayName: \"KeymapCtx<listItem>\",\n group: \"ListItem\"\n});\nwithMeta(listItemKeymap.shortcuts, {\n displayName: \"Keymap<listItem>\",\n group: \"ListItem\"\n});\nconst textSchema = $node(\"text\", () => ({\n group: \"inline\",\n parseMarkdown: {\n match: ({ type }) => type === \"text\",\n runner: (state, node) => {\n state.addText(node.value);\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"text\",\n runner: (state, node) => {\n state.addNode(\"text\", void 0, node.text);\n }\n }\n}));\nwithMeta(textSchema, {\n displayName: \"NodeSchema<text>\",\n group: \"Text\"\n});\nconst htmlAttr = $nodeAttr(\"html\");\nwithMeta(htmlAttr, {\n displayName: \"Attr<html>\",\n group: \"Html\"\n});\nconst htmlSchema = $nodeSchema(\"html\", (ctx) => {\n return {\n atom: true,\n group: \"inline\",\n inline: true,\n attrs: {\n value: {\n default: \"\",\n validate: \"string\"\n }\n },\n toDOM: (node) => {\n const span = document.createElement(\"span\");\n const attr = {\n ...ctx.get(htmlAttr.key)(node),\n \"data-value\": node.attrs.value,\n \"data-type\": \"html\"\n };\n span.textContent = node.attrs.value;\n return [\"span\", attr, node.attrs.value];\n },\n parseDOM: [\n {\n tag: 'span[data-type=\"html\"]',\n getAttrs: (dom) => {\n return {\n value: dom.dataset.value ?? \"\"\n };\n }\n }\n ],\n parseMarkdown: {\n match: ({ type }) => Boolean(type === \"html\"),\n runner: (state, node, type) => {\n state.addNode(type, { value: node.value });\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"html\",\n runner: (state, node) => {\n state.addNode(\"html\", void 0, node.attrs.value);\n }\n }\n };\n});\nwithMeta(htmlSchema.node, {\n displayName: \"NodeSchema<html>\",\n group: \"Html\"\n});\nwithMeta(htmlSchema.ctx, {\n displayName: \"NodeSchemaCtx<html>\",\n group: \"Html\"\n});\nconst schema = [\n docSchema,\n paragraphAttr,\n paragraphSchema,\n headingIdGenerator,\n headingAttr,\n headingSchema,\n hardbreakAttr,\n hardbreakSchema,\n blockquoteAttr,\n blockquoteSchema,\n codeBlockAttr,\n codeBlockSchema,\n hrAttr,\n hrSchema,\n imageAttr,\n imageSchema,\n bulletListAttr,\n bulletListSchema,\n orderedListAttr,\n orderedListSchema,\n listItemAttr,\n listItemSchema,\n emphasisAttr,\n emphasisSchema,\n strongAttr,\n strongSchema,\n inlineCodeAttr,\n inlineCodeSchema,\n linkAttr,\n linkSchema,\n htmlAttr,\n htmlSchema,\n textSchema\n].flat();\nconst inputRules = [\n wrapInBlockquoteInputRule,\n wrapInBulletListInputRule,\n wrapInOrderedListInputRule,\n createCodeBlockInputRule,\n insertHrInputRule,\n wrapInHeadingInputRule\n].flat();\nconst markInputRules = [\n emphasisStarInputRule,\n emphasisUnderscoreInputRule,\n inlineCodeInputRule,\n strongInputRule\n];\nconst isMarkSelectedCommand = $command(\n \"IsMarkSelected\",\n () => (markType) => (state) => {\n if (!markType) return false;\n const { doc, selection } = state;\n const hasLink = doc.rangeHasMark(selection.from, selection.to, markType);\n return hasLink;\n }\n);\nconst isNodeSelectedCommand = $command(\n \"IsNoteSelected\",\n () => (nodeType) => (state) => {\n if (!nodeType) return false;\n const result = findNodeInSelection(state, nodeType);\n return result.hasNode;\n }\n);\nconst clearTextInCurrentBlockCommand = $command(\n \"ClearTextInCurrentBlock\",\n () => () => (state, dispatch) => {\n let tr = state.tr;\n const { $from, $to } = tr.selection;\n const { pos: from } = $from;\n const { pos: right } = $to;\n const left = from - $from.node().content.size;\n if (left < 0) return false;\n tr = tr.deleteRange(left, right);\n dispatch?.(tr);\n return true;\n }\n);\nconst setBlockTypeCommand = $command(\n \"SetBlockType\",\n () => (payload) => (state, dispatch) => {\n const { nodeType, attrs = null } = payload ?? {};\n if (!nodeType) return false;\n const tr = state.tr;\n const { from, to } = tr.selection;\n try {\n tr.setBlockType(from, to, nodeType, attrs);\n } catch {\n return false;\n }\n dispatch?.(tr);\n return true;\n }\n);\nconst wrapInBlockTypeCommand = $command(\n \"WrapInBlockType\",\n () => (payload) => (state, dispatch) => {\n const { nodeType, attrs = null } = payload ?? {};\n if (!nodeType) return false;\n let tr = state.tr;\n try {\n const { $from, $to } = tr.selection;\n const blockRange = $from.blockRange($to);\n const wrapping = blockRange && findWrapping(blockRange, nodeType, attrs);\n if (!wrapping) return false;\n tr = tr.wrap(blockRange, wrapping);\n } catch {\n return false;\n }\n dispatch?.(tr);\n return true;\n }\n);\nconst addBlockTypeCommand = $command(\n \"AddBlockType\",\n () => (payload) => (state, dispatch) => {\n const { nodeType, attrs = null } = payload ?? {};\n if (!nodeType) return false;\n const tr = state.tr;\n try {\n const node = nodeType instanceof Node ? nodeType : nodeType.createAndFill(attrs);\n if (!node) return false;\n tr.replaceSelectionWith(node);\n } catch {\n return false;\n }\n dispatch?.(tr);\n return true;\n }\n);\nconst selectTextNearPosCommand = $command(\n \"SelectTextNearPos\",\n () => (payload) => (state, dispatch) => {\n const { pos } = payload ?? {};\n if (pos == null) return false;\n const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n const tr = state.tr;\n try {\n const $pos = state.doc.resolve(clamp(pos, 0, state.doc.content.size));\n tr.setSelection(TextSelection.near($pos));\n } catch {\n return false;\n }\n dispatch?.(tr.scrollIntoView());\n return true;\n }\n);\nconst commands = [\n turnIntoTextCommand,\n wrapInBlockquoteCommand,\n wrapInHeadingCommand,\n downgradeHeadingCommand,\n createCodeBlockCommand,\n insertHardbreakCommand,\n insertHrCommand,\n insertImageCommand,\n updateImageCommand,\n wrapInOrderedListCommand,\n wrapInBulletListCommand,\n sinkListItemCommand,\n splitListItemCommand,\n liftListItemCommand,\n liftFirstListItemCommand,\n toggleEmphasisCommand,\n toggleInlineCodeCommand,\n toggleStrongCommand,\n toggleLinkCommand,\n updateLinkCommand,\n isMarkSelectedCommand,\n isNodeSelectedCommand,\n clearTextInCurrentBlockCommand,\n setBlockTypeCommand,\n wrapInBlockTypeCommand,\n addBlockTypeCommand,\n selectTextNearPosCommand\n];\nconst keymap = [\n blockquoteKeymap,\n codeBlockKeymap,\n hardbreakKeymap,\n headingKeymap,\n listItemKeymap,\n orderedListKeymap,\n bulletListKeymap,\n paragraphKeymap,\n emphasisKeymap,\n inlineCodeKeymap,\n strongKeymap\n].flat();\nconst remarkAddOrderInListPlugin = $remark(\n \"remarkAddOrderInList\",\n () => () => (tree) => {\n visit(tree, \"list\", (node) => {\n if (node.ordered) {\n const start = node.start ?? 1;\n node.children.forEach((child, index) => {\n child.label = index + start;\n });\n }\n });\n }\n);\nwithMeta(remarkAddOrderInListPlugin.plugin, {\n displayName: \"Remark<remarkAddOrderInListPlugin>\",\n group: \"Remark\"\n});\nwithMeta(remarkAddOrderInListPlugin.options, {\n displayName: \"RemarkConfig<remarkAddOrderInListPlugin>\",\n group: \"Remark\"\n});\nconst remarkLineBreak = $remark(\n \"remarkLineBreak\",\n () => () => (tree) => {\n const find = /[\\t ]*(?:\\r?\\n|\\r)/g;\n visit(\n tree,\n \"text\",\n (node, index, parent) => {\n if (!node.value || typeof node.value !== \"string\") return;\n const result = [];\n let start = 0;\n find.lastIndex = 0;\n let match = find.exec(node.value);\n while (match) {\n const position = match.index;\n if (start !== position)\n result.push({\n type: \"text\",\n value: node.value.slice(start, position)\n });\n result.push({ type: \"break\", data: { isInline: true } });\n start = position + match[0].length;\n match = find.exec(node.value);\n }\n const hasResultAndIndex = result.length > 0 && parent && typeof index === \"number\";\n if (!hasResultAndIndex) return;\n if (start < node.value.length)\n result.push({ type: \"text\", value: node.value.slice(start) });\n parent.children.splice(index, 1, ...result);\n return index + result.length;\n }\n );\n }\n);\nwithMeta(remarkLineBreak.plugin, {\n displayName: \"Remark<remarkLineBreak>\",\n group: \"Remark\"\n});\nwithMeta(remarkLineBreak.options, {\n displayName: \"RemarkConfig<remarkLineBreak>\",\n group: \"Remark\"\n});\nconst remarkInlineLinkPlugin = $remark(\n \"remarkInlineLink\",\n () => remarkInlineLinks\n);\nwithMeta(remarkInlineLinkPlugin.plugin, {\n displayName: \"Remark<remarkInlineLinkPlugin>\",\n group: \"Remark\"\n});\nwithMeta(remarkInlineLinkPlugin.options, {\n displayName: \"RemarkConfig<remarkInlineLinkPlugin>\",\n group: \"Remark\"\n});\nconst isParent = (node) => !!node.children;\nconst isHTML = (node) => node.type === \"html\";\nfunction flatMapWithDepth(ast, fn) {\n return transform(ast, 0, null)[0];\n function transform(node, index, parent) {\n if (isParent(node)) {\n const out = [];\n for (let i = 0, n = node.children.length; i < n; i++) {\n const nthChild = node.children[i];\n if (nthChild) {\n const xs = transform(nthChild, i, node);\n if (xs) {\n for (let j = 0, m = xs.length; j < m; j++) {\n const item = xs[j];\n if (item) out.push(item);\n }\n }\n }\n }\n node.children = out;\n }\n return fn(node, index, parent);\n }\n}\nconst BLOCK_CONTAINER_TYPES = [\"root\", \"blockquote\", \"listItem\"];\nconst remarkHtmlTransformer = $remark(\n \"remarkHTMLTransformer\",\n () => () => (tree) => {\n flatMapWithDepth(tree, (node, _index, parent) => {\n if (!isHTML(node)) return [node];\n if (parent && BLOCK_CONTAINER_TYPES.includes(parent.type)) {\n node.children = [{ ...node }];\n delete node.value;\n node.type = \"paragraph\";\n }\n return [node];\n });\n }\n);\nwithMeta(remarkHtmlTransformer.plugin, {\n displayName: \"Remark<remarkHtmlTransformer>\",\n group: \"Remark\"\n});\nwithMeta(remarkHtmlTransformer.options, {\n displayName: \"RemarkConfig<remarkHtmlTransformer>\",\n group: \"Remark\"\n});\nconst remarkMarker = $remark(\n \"remarkMarker\",\n () => () => (tree, file) => {\n const getMarker = (node) => {\n return file.value.charAt(node.position.start.offset);\n };\n visit(\n tree,\n (node) => [\"strong\", \"emphasis\"].includes(node.type),\n (node) => {\n node.marker = getMarker(node);\n }\n );\n }\n);\nwithMeta(remarkMarker.plugin, {\n displayName: \"Remark<remarkMarker>\",\n group: \"Remark\"\n});\nwithMeta(remarkMarker.options, {\n displayName: \"RemarkConfig<remarkMarker>\",\n group: \"Remark\"\n});\nconst inlineNodesCursorPlugin = $prose(() => {\n let lock = false;\n const inlineNodesCursorPluginKey = new PluginKey(\n \"MILKDOWN_INLINE_NODES_CURSOR\"\n );\n const inlineNodesCursorPlugin2 = new Plugin({\n key: inlineNodesCursorPluginKey,\n state: {\n init() {\n return false;\n },\n apply(tr) {\n if (!tr.selection.empty) return false;\n const pos = tr.selection.$from;\n const left = pos.nodeBefore;\n const right = pos.nodeAfter;\n if (left && right && left.isInline && !left.isText && right.isInline && !right.isText)\n return true;\n return false;\n }\n },\n props: {\n handleDOMEvents: {\n compositionend: (view, e) => {\n if (lock) {\n lock = false;\n requestAnimationFrame(() => {\n const active = inlineNodesCursorPlugin2.getState(view.state);\n if (active) {\n const from = view.state.selection.from;\n e.preventDefault();\n view.dispatch(view.state.tr.insertText(e.data || \"\", from));\n }\n });\n return true;\n }\n return false;\n },\n compositionstart: (view) => {\n const active = inlineNodesCursorPlugin2.getState(view.state);\n if (active) lock = true;\n return false;\n },\n beforeinput: (view, e) => {\n const active = inlineNodesCursorPlugin2.getState(view.state);\n if (active && e instanceof InputEvent && e.data && !lock) {\n const from = view.state.selection.from;\n e.preventDefault();\n view.dispatch(view.state.tr.insertText(e.data || \"\", from));\n return true;\n }\n return false;\n }\n },\n decorations(state) {\n const active = inlineNodesCursorPlugin2.getState(state);\n if (active) {\n const pos = state.selection.$from;\n const position = pos.pos;\n const left = document.createElement(\"span\");\n const leftDec = Decoration.widget(position, left, {\n side: -1\n });\n const right = document.createElement(\"span\");\n const rightDec = Decoration.widget(position, right);\n setTimeout(() => {\n left.contentEditable = \"true\";\n right.contentEditable = \"true\";\n });\n return DecorationSet.create(state.doc, [leftDec, rightDec]);\n }\n return DecorationSet.empty;\n }\n }\n });\n return inlineNodesCursorPlugin2;\n});\nwithMeta(inlineNodesCursorPlugin, {\n displayName: \"Prose<inlineNodesCursorPlugin>\",\n group: \"Prose\"\n});\nconst hardbreakClearMarkPlugin = $prose((ctx) => {\n return new Plugin({\n key: new PluginKey(\"MILKDOWN_HARDBREAK_MARKS\"),\n appendTransaction: (trs, _oldState, newState) => {\n if (!trs.length) return;\n const [tr] = trs;\n if (!tr) return;\n const [step] = tr.steps;\n const isInsertHr = tr.getMeta(\"hardbreak\");\n if (isInsertHr) {\n if (!(step instanceof ReplaceStep)) return;\n const { from } = step;\n return newState.tr.setNodeMarkup(\n from,\n hardbreakSchema.type(ctx),\n void 0,\n []\n );\n }\n const isAddMarkStep = step instanceof AddMarkStep;\n if (isAddMarkStep) {\n let _tr = newState.tr;\n const { from, to } = step;\n newState.doc.nodesBetween(from, to, (node, pos) => {\n if (node.type === hardbreakSchema.type(ctx))\n _tr = _tr.setNodeMarkup(\n pos,\n hardbreakSchema.type(ctx),\n void 0,\n []\n );\n });\n return _tr;\n }\n return void 0;\n }\n });\n});\nwithMeta(hardbreakClearMarkPlugin, {\n displayName: \"Prose<hardbreakClearMarkPlugin>\",\n group: \"Prose\"\n});\nconst hardbreakFilterNodes = $ctx(\n [\"table\", \"code_block\"],\n \"hardbreakFilterNodes\"\n);\nwithMeta(hardbreakFilterNodes, {\n displayName: \"Ctx<hardbreakFilterNodes>\",\n group: \"Prose\"\n});\nconst hardbreakFilterPlugin = $prose((ctx) => {\n const notIn = ctx.get(hardbreakFilterNodes.key);\n return new Plugin({\n key: new PluginKey(\"MILKDOWN_HARDBREAK_FILTER\"),\n filterTransaction: (tr, state) => {\n const isInsertHr = tr.getMeta(\"hardbreak\");\n const [step] = tr.steps;\n if (isInsertHr && step) {\n const { from } = step;\n const $from = state.doc.resolve(from);\n let curDepth = $from.depth;\n let canApply = true;\n while (curDepth > 0) {\n if (notIn.includes($from.node(curDepth).type.name)) canApply = false;\n curDepth--;\n }\n return canApply;\n }\n return true;\n }\n });\n});\nwithMeta(hardbreakFilterPlugin, {\n displayName: \"Prose<hardbreakFilterPlugin>\",\n group: \"Prose\"\n});\nconst syncHeadingIdPlugin = $prose((ctx) => {\n const headingIdPluginKey = new PluginKey(\"MILKDOWN_HEADING_ID\");\n const updateId = (view) => {\n if (view.composing) return;\n const getId = ctx.get(headingIdGenerator.key);\n const tr = view.state.tr.setMeta(\"addToHistory\", false);\n let found = false;\n const idMap = {};\n view.state.doc.descendants((node, pos) => {\n if (node.type === headingSchema.type(ctx)) {\n if (node.textContent.trim().length === 0) return;\n const attrs = node.attrs;\n let id = getId(node);\n if (idMap[id]) {\n idMap[id] += 1;\n id += `-#${idMap[id]}`;\n } else {\n idMap[id] = 1;\n }\n if (attrs.id !== id) {\n found = true;\n tr.setMeta(headingIdPluginKey, true).setNodeMarkup(pos, void 0, {\n ...attrs,\n id\n });\n }\n }\n });\n if (found) view.dispatch(tr);\n };\n return new Plugin({\n key: headingIdPluginKey,\n view: (view) => {\n updateId(view);\n return {\n update: (view2, prevState) => {\n if (view2.state.doc.eq(prevState.doc)) return;\n updateId(view2);\n }\n };\n }\n });\n});\nwithMeta(syncHeadingIdPlugin, {\n displayName: \"Prose<syncHeadingIdPlugin>\",\n group: \"Prose\"\n});\nconst syncListOrderPlugin = $prose((ctx) => {\n const syncOrderLabel = (transactions, _oldState, newState) => {\n if (!newState.selection || transactions.some(\n (tr2) => tr2.getMeta(\"addToHistory\") === false || !tr2.isGeneric\n ))\n return null;\n const orderedListType = orderedListSchema.type(ctx);\n const bulletListType = bulletListSchema.type(ctx);\n const listItemType = listItemSchema.type(ctx);\n const handleNodeItem = (attrs, index) => {\n let changed = false;\n const expectedLabel = `${index + 1}.`;\n if (attrs.label !== expectedLabel) {\n attrs.label = expectedLabel;\n changed = true;\n }\n return changed;\n };\n let tr = newState.tr;\n let needDispatch = false;\n newState.doc.descendants(\n (node, pos, parent, index) => {\n if (node.type === bulletListType) {\n const base = node.maybeChild(0);\n if (base?.type === listItemType && base.attrs.listType === \"ordered\") {\n needDispatch = true;\n tr.setNodeMarkup(pos, orderedListType, { spread: \"true\" });\n node.descendants(\n (child, pos2, _parent, index2) => {\n if (child.type === listItemType) {\n const attrs = { ...child.attrs };\n const changed = handleNodeItem(attrs, index2);\n if (changed) tr = tr.setNodeMarkup(pos2, void 0, attrs);\n }\n return false;\n }\n );\n }\n } else if (node.type === listItemType && parent?.type === orderedListType) {\n const attrs = { ...node.attrs };\n let changed = false;\n if (attrs.listType !== \"ordered\") {\n attrs.listType = \"ordered\";\n changed = true;\n }\n const base = parent?.maybeChild(0);\n if (base) changed = handleNodeItem(attrs, index);\n if (changed) {\n tr = tr.setNodeMarkup(pos, void 0, attrs);\n needDispatch = true;\n }\n }\n }\n );\n return needDispatch ? tr.setMeta(\"addToHistory\", false) : null;\n };\n return new Plugin({\n key: new PluginKey(\"MILKDOWN_KEEP_LIST_ORDER\"),\n appendTransaction: syncOrderLabel\n });\n});\nwithMeta(syncListOrderPlugin, {\n displayName: \"Prose<syncListOrderPlugin>\",\n group: \"Prose\"\n});\nconst plugins = [\n hardbreakClearMarkPlugin,\n hardbreakFilterNodes,\n hardbreakFilterPlugin,\n inlineNodesCursorPlugin,\n remarkAddOrderInListPlugin,\n remarkInlineLinkPlugin,\n remarkLineBreak,\n remarkHtmlTransformer,\n remarkMarker,\n remarkPreserveEmptyLinePlugin,\n syncHeadingIdPlugin,\n syncListOrderPlugin\n].flat();\nconst commonmark = [\n schema,\n inputRules,\n markInputRules,\n commands,\n keymap,\n plugins\n].flat();\nexport {\n addBlockTypeCommand,\n blockquoteAttr,\n blockquoteKeymap,\n blockquoteSchema,\n bulletListAttr,\n bulletListKeymap,\n bulletListSchema,\n clearTextInCurrentBlockCommand,\n codeBlockAttr,\n codeBlockKeymap,\n codeBlockSchema,\n commands,\n commonmark,\n createCodeBlockCommand,\n createCodeBlockInputRule,\n docSchema,\n downgradeHeadingCommand,\n emphasisAttr,\n emphasisKeymap,\n emphasisSchema,\n emphasisStarInputRule,\n emphasisUnderscoreInputRule,\n hardbreakAttr,\n hardbreakClearMarkPlugin,\n hardbreakFilterNodes,\n hardbreakFilterPlugin,\n hardbreakKeymap,\n hardbreakSchema,\n headingAttr,\n headingIdGenerator,\n headingKeymap,\n headingSchema,\n hrAttr,\n hrSchema,\n htmlAttr,\n htmlSchema,\n imageAttr,\n imageSchema,\n inlineCodeAttr,\n inlineCodeInputRule,\n inlineCodeKeymap,\n inlineCodeSchema,\n inlineNodesCursorPlugin,\n inputRules,\n insertHardbreakCommand,\n insertHrCommand,\n insertHrInputRule,\n insertImageCommand,\n insertImageInputRule,\n isMarkSelectedCommand,\n isNodeSelectedCommand,\n keymap,\n liftFirstListItemCommand,\n liftListItemCommand,\n linkAttr,\n linkSchema,\n listItemAttr,\n listItemKeymap,\n listItemSchema,\n markInputRules,\n orderedListAttr,\n orderedListKeymap,\n orderedListSchema,\n paragraphAttr,\n paragraphKeymap,\n paragraphSchema,\n plugins,\n remarkAddOrderInListPlugin,\n remarkHtmlTransformer,\n remarkInlineLinkPlugin,\n remarkLineBreak,\n remarkMarker,\n remarkPreserveEmptyLinePlugin,\n schema,\n selectTextNearPosCommand,\n setBlockTypeCommand,\n sinkListItemCommand,\n splitListItemCommand,\n strongAttr,\n strongInputRule,\n strongKeymap,\n strongSchema,\n syncHeadingIdPlugin,\n syncListOrderPlugin,\n textSchema,\n toggleEmphasisCommand,\n toggleInlineCodeCommand,\n toggleLinkCommand,\n toggleStrongCommand,\n turnIntoTextCommand,\n updateCodeBlockLanguageCommand,\n updateImageCommand,\n updateLinkCommand,\n wrapInBlockTypeCommand,\n wrapInBlockquoteCommand,\n wrapInBlockquoteInputRule,\n wrapInBulletListCommand,\n wrapInBulletListInputRule,\n wrapInHeadingCommand,\n wrapInHeadingInputRule,\n wrapInOrderedListCommand,\n wrapInOrderedListInputRule\n};\n//# sourceMappingURL=index.js.map\n","import { NodeSelection, Plugin, PluginKey, Selection, SelectionRange, TextSelection } from \"prosemirror-state\";\nimport { Fragment, Slice } from \"prosemirror-model\";\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\nimport { keydownHandler } from \"prosemirror-keymap\";\nimport { Transform } from \"prosemirror-transform\";\n\n//#region src/tablemap.ts\nlet readFromCache;\nlet addToCache;\nif (typeof WeakMap != \"undefined\") {\n\tlet cache = /* @__PURE__ */ new WeakMap();\n\treadFromCache = (key) => cache.get(key);\n\taddToCache = (key, value) => {\n\t\tcache.set(key, value);\n\t\treturn value;\n\t};\n} else {\n\tconst cache = [];\n\tconst cacheSize = 10;\n\tlet cachePos = 0;\n\treadFromCache = (key) => {\n\t\tfor (let i = 0; i < cache.length; i += 2) if (cache[i] == key) return cache[i + 1];\n\t};\n\taddToCache = (key, value) => {\n\t\tif (cachePos == cacheSize) cachePos = 0;\n\t\tcache[cachePos++] = key;\n\t\treturn cache[cachePos++] = value;\n\t};\n}\n/**\n* A table map describes the structure of a given table. To avoid\n* recomputing them all the time, they are cached per table node. To\n* be able to do that, positions saved in the map are relative to the\n* start of the table, rather than the start of the document.\n*\n* @public\n*/\nvar TableMap = class {\n\tconstructor(width, height, map, problems) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.map = map;\n\t\tthis.problems = problems;\n\t}\n\tfindCell(pos) {\n\t\tfor (let i = 0; i < this.map.length; i++) {\n\t\t\tconst curPos = this.map[i];\n\t\t\tif (curPos != pos) continue;\n\t\t\tconst left = i % this.width;\n\t\t\tconst top = i / this.width | 0;\n\t\t\tlet right = left + 1;\n\t\t\tlet bottom = top + 1;\n\t\t\tfor (let j = 1; right < this.width && this.map[i + j] == curPos; j++) right++;\n\t\t\tfor (let j = 1; bottom < this.height && this.map[i + this.width * j] == curPos; j++) bottom++;\n\t\t\treturn {\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\tright,\n\t\t\t\tbottom\n\t\t\t};\n\t\t}\n\t\tthrow new RangeError(`No cell with offset ${pos} found`);\n\t}\n\tcolCount(pos) {\n\t\tfor (let i = 0; i < this.map.length; i++) if (this.map[i] == pos) return i % this.width;\n\t\tthrow new RangeError(`No cell with offset ${pos} found`);\n\t}\n\tnextCell(pos, axis, dir) {\n\t\tconst { left, right, top, bottom } = this.findCell(pos);\n\t\tif (axis == \"horiz\") {\n\t\t\tif (dir < 0 ? left == 0 : right == this.width) return null;\n\t\t\treturn this.map[top * this.width + (dir < 0 ? left - 1 : right)];\n\t\t} else {\n\t\t\tif (dir < 0 ? top == 0 : bottom == this.height) return null;\n\t\t\treturn this.map[left + this.width * (dir < 0 ? top - 1 : bottom)];\n\t\t}\n\t}\n\trectBetween(a, b) {\n\t\tconst { left: leftA, right: rightA, top: topA, bottom: bottomA } = this.findCell(a);\n\t\tconst { left: leftB, right: rightB, top: topB, bottom: bottomB } = this.findCell(b);\n\t\treturn {\n\t\t\tleft: Math.min(leftA, leftB),\n\t\t\ttop: Math.min(topA, topB),\n\t\t\tright: Math.max(rightA, rightB),\n\t\t\tbottom: Math.max(bottomA, bottomB)\n\t\t};\n\t}\n\tcellsInRect(rect) {\n\t\tconst result = [];\n\t\tconst seen = {};\n\t\tfor (let row = rect.top; row < rect.bottom; row++) for (let col = rect.left; col < rect.right; col++) {\n\t\t\tconst index = row * this.width + col;\n\t\t\tconst pos = this.map[index];\n\t\t\tif (seen[pos]) continue;\n\t\t\tseen[pos] = true;\n\t\t\tif (col == rect.left && col && this.map[index - 1] == pos || row == rect.top && row && this.map[index - this.width] == pos) continue;\n\t\t\tresult.push(pos);\n\t\t}\n\t\treturn result;\n\t}\n\tpositionAt(row, col, table) {\n\t\tfor (let i = 0, rowStart = 0;; i++) {\n\t\t\tconst rowEnd = rowStart + table.child(i).nodeSize;\n\t\t\tif (i == row) {\n\t\t\t\tlet index = col + row * this.width;\n\t\t\t\tconst rowEndIndex = (row + 1) * this.width;\n\t\t\t\twhile (index < rowEndIndex && this.map[index] < rowStart) index++;\n\t\t\t\treturn index == rowEndIndex ? rowEnd - 1 : this.map[index];\n\t\t\t}\n\t\t\trowStart = rowEnd;\n\t\t}\n\t}\n\tstatic get(table) {\n\t\treturn readFromCache(table) || addToCache(table, computeMap(table));\n\t}\n};\nfunction computeMap(table) {\n\tif (table.type.spec.tableRole != \"table\") throw new RangeError(\"Not a table node: \" + table.type.name);\n\tconst width = findWidth(table), height = table.childCount;\n\tconst map = [];\n\tlet mapPos = 0;\n\tlet problems = null;\n\tconst colWidths = [];\n\tfor (let i = 0, e = width * height; i < e; i++) map[i] = 0;\n\tfor (let row = 0, pos = 0; row < height; row++) {\n\t\tconst rowNode = table.child(row);\n\t\tpos++;\n\t\tfor (let i = 0;; i++) {\n\t\t\twhile (mapPos < map.length && map[mapPos] != 0) mapPos++;\n\t\t\tif (i == rowNode.childCount) break;\n\t\t\tconst cellNode = rowNode.child(i);\n\t\t\tconst { colspan, rowspan, colwidth } = cellNode.attrs;\n\t\t\tfor (let h = 0; h < rowspan; h++) {\n\t\t\t\tif (h + row >= height) {\n\t\t\t\t\t(problems || (problems = [])).push({\n\t\t\t\t\t\ttype: \"overlong_rowspan\",\n\t\t\t\t\t\tpos,\n\t\t\t\t\t\tn: rowspan - h\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst start = mapPos + h * width;\n\t\t\t\tfor (let w = 0; w < colspan; w++) {\n\t\t\t\t\tif (map[start + w] == 0) map[start + w] = pos;\n\t\t\t\t\telse (problems || (problems = [])).push({\n\t\t\t\t\t\ttype: \"collision\",\n\t\t\t\t\t\trow,\n\t\t\t\t\t\tpos,\n\t\t\t\t\t\tn: colspan - w\n\t\t\t\t\t});\n\t\t\t\t\tconst colW = colwidth && colwidth[w];\n\t\t\t\t\tif (colW) {\n\t\t\t\t\t\tconst widthIndex = (start + w) % width * 2, prev = colWidths[widthIndex];\n\t\t\t\t\t\tif (prev == null || prev != colW && colWidths[widthIndex + 1] == 1) {\n\t\t\t\t\t\t\tcolWidths[widthIndex] = colW;\n\t\t\t\t\t\t\tcolWidths[widthIndex + 1] = 1;\n\t\t\t\t\t\t} else if (prev == colW) colWidths[widthIndex + 1]++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmapPos += colspan;\n\t\t\tpos += cellNode.nodeSize;\n\t\t}\n\t\tconst expectedPos = (row + 1) * width;\n\t\tlet missing = 0;\n\t\twhile (mapPos < expectedPos) if (map[mapPos++] == 0) missing++;\n\t\tif (missing) (problems || (problems = [])).push({\n\t\t\ttype: \"missing\",\n\t\t\trow,\n\t\t\tn: missing\n\t\t});\n\t\tpos++;\n\t}\n\tif (width === 0 || height === 0) (problems || (problems = [])).push({ type: \"zero_sized\" });\n\tconst tableMap = new TableMap(width, height, map, problems);\n\tlet badWidths = false;\n\tfor (let i = 0; !badWidths && i < colWidths.length; i += 2) if (colWidths[i] != null && colWidths[i + 1] < height) badWidths = true;\n\tif (badWidths) findBadColWidths(tableMap, colWidths, table);\n\treturn tableMap;\n}\nfunction findWidth(table) {\n\tlet width = -1;\n\tlet hasRowSpan = false;\n\tfor (let row = 0; row < table.childCount; row++) {\n\t\tconst rowNode = table.child(row);\n\t\tlet rowWidth = 0;\n\t\tif (hasRowSpan) for (let j = 0; j < row; j++) {\n\t\t\tconst prevRow = table.child(j);\n\t\t\tfor (let i = 0; i < prevRow.childCount; i++) {\n\t\t\t\tconst cell = prevRow.child(i);\n\t\t\t\tif (j + cell.attrs.rowspan > row) rowWidth += cell.attrs.colspan;\n\t\t\t}\n\t\t}\n\t\tfor (let i = 0; i < rowNode.childCount; i++) {\n\t\t\tconst cell = rowNode.child(i);\n\t\t\trowWidth += cell.attrs.colspan;\n\t\t\tif (cell.attrs.rowspan > 1) hasRowSpan = true;\n\t\t}\n\t\tif (width == -1) width = rowWidth;\n\t\telse if (width != rowWidth) width = Math.max(width, rowWidth);\n\t}\n\treturn width;\n}\nfunction findBadColWidths(map, colWidths, table) {\n\tif (!map.problems) map.problems = [];\n\tconst seen = {};\n\tfor (let i = 0; i < map.map.length; i++) {\n\t\tconst pos = map.map[i];\n\t\tif (seen[pos]) continue;\n\t\tseen[pos] = true;\n\t\tconst node = table.nodeAt(pos);\n\t\tif (!node) throw new RangeError(`No cell with offset ${pos} found`);\n\t\tlet updated = null;\n\t\tconst attrs = node.attrs;\n\t\tfor (let j = 0; j < attrs.colspan; j++) {\n\t\t\tconst colWidth = colWidths[(i + j) % map.width * 2];\n\t\t\tif (colWidth != null && (!attrs.colwidth || attrs.colwidth[j] != colWidth)) (updated || (updated = freshColWidth(attrs)))[j] = colWidth;\n\t\t}\n\t\tif (updated) map.problems.unshift({\n\t\t\ttype: \"colwidth mismatch\",\n\t\t\tpos,\n\t\t\tcolwidth: updated\n\t\t});\n\t}\n}\nfunction freshColWidth(attrs) {\n\tif (attrs.colwidth) return attrs.colwidth.slice();\n\tconst result = [];\n\tfor (let i = 0; i < attrs.colspan; i++) result.push(0);\n\treturn result;\n}\n\n//#endregion\n//#region src/schema.ts\nfunction getCellAttrs(dom, extraAttrs) {\n\tif (typeof dom === \"string\") return {};\n\tconst widthAttr = dom.getAttribute(\"data-colwidth\");\n\tconst widths = widthAttr && /^\\d+(,\\d+)*$/.test(widthAttr) ? widthAttr.split(\",\").map((s) => Number(s)) : null;\n\tconst colspan = Number(dom.getAttribute(\"colspan\") || 1);\n\tconst result = {\n\t\tcolspan,\n\t\trowspan: Number(dom.getAttribute(\"rowspan\") || 1),\n\t\tcolwidth: widths && widths.length == colspan ? widths : null\n\t};\n\tfor (const prop in extraAttrs) {\n\t\tconst getter = extraAttrs[prop].getFromDOM;\n\t\tconst value = getter && getter(dom);\n\t\tif (value != null) result[prop] = value;\n\t}\n\treturn result;\n}\nfunction setCellAttrs(node, extraAttrs) {\n\tconst attrs = {};\n\tif (node.attrs.colspan != 1) attrs.colspan = node.attrs.colspan;\n\tif (node.attrs.rowspan != 1) attrs.rowspan = node.attrs.rowspan;\n\tif (node.attrs.colwidth) attrs[\"data-colwidth\"] = node.attrs.colwidth.join(\",\");\n\tfor (const prop in extraAttrs) {\n\t\tconst setter = extraAttrs[prop].setDOMAttr;\n\t\tif (setter) setter(node.attrs[prop], attrs);\n\t}\n\treturn attrs;\n}\nfunction validateColwidth(value) {\n\tif (value === null) return;\n\tif (!Array.isArray(value)) throw new TypeError(\"colwidth must be null or an array\");\n\tfor (const item of value) if (typeof item !== \"number\") throw new TypeError(\"colwidth must be null or an array of numbers\");\n}\n/**\n* This function creates a set of [node\n* specs](http://prosemirror.net/docs/ref/#model.SchemaSpec.nodes) for\n* `table`, `table_row`, and `table_cell` nodes types as used by this\n* module. The result can then be added to the set of nodes when\n* creating a schema.\n*\n* @public\n*/\nfunction tableNodes(options) {\n\tconst extraAttrs = options.cellAttributes || {};\n\tconst cellAttrs = {\n\t\tcolspan: {\n\t\t\tdefault: 1,\n\t\t\tvalidate: \"number\"\n\t\t},\n\t\trowspan: {\n\t\t\tdefault: 1,\n\t\t\tvalidate: \"number\"\n\t\t},\n\t\tcolwidth: {\n\t\t\tdefault: null,\n\t\t\tvalidate: validateColwidth\n\t\t}\n\t};\n\tfor (const prop in extraAttrs) cellAttrs[prop] = {\n\t\tdefault: extraAttrs[prop].default,\n\t\tvalidate: extraAttrs[prop].validate\n\t};\n\treturn {\n\t\ttable: {\n\t\t\tcontent: \"table_row+\",\n\t\t\ttableRole: \"table\",\n\t\t\tisolating: true,\n\t\t\tgroup: options.tableGroup,\n\t\t\tparseDOM: [{ tag: \"table\" }],\n\t\t\ttoDOM() {\n\t\t\t\treturn [\"table\", [\"tbody\", 0]];\n\t\t\t}\n\t\t},\n\t\ttable_row: {\n\t\t\tcontent: \"(table_cell | table_header)*\",\n\t\t\ttableRole: \"row\",\n\t\t\tparseDOM: [{ tag: \"tr\" }],\n\t\t\ttoDOM() {\n\t\t\t\treturn [\"tr\", 0];\n\t\t\t}\n\t\t},\n\t\ttable_cell: {\n\t\t\tcontent: options.cellContent,\n\t\t\tattrs: cellAttrs,\n\t\t\ttableRole: \"cell\",\n\t\t\tisolating: true,\n\t\t\tparseDOM: [{\n\t\t\t\ttag: \"td\",\n\t\t\t\tgetAttrs: (dom) => getCellAttrs(dom, extraAttrs)\n\t\t\t}],\n\t\t\ttoDOM(node) {\n\t\t\t\treturn [\n\t\t\t\t\t\"td\",\n\t\t\t\t\tsetCellAttrs(node, extraAttrs),\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t}\n\t\t},\n\t\ttable_header: {\n\t\t\tcontent: options.cellContent,\n\t\t\tattrs: cellAttrs,\n\t\t\ttableRole: \"header_cell\",\n\t\t\tisolating: true,\n\t\t\tparseDOM: [{\n\t\t\t\ttag: \"th\",\n\t\t\t\tgetAttrs: (dom) => getCellAttrs(dom, extraAttrs)\n\t\t\t}],\n\t\t\ttoDOM(node) {\n\t\t\t\treturn [\n\t\t\t\t\t\"th\",\n\t\t\t\t\tsetCellAttrs(node, extraAttrs),\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t}\n\t\t}\n\t};\n}\n/**\n* @public\n*/\nfunction tableNodeTypes(schema) {\n\tlet result = schema.cached.tableNodeTypes;\n\tif (!result) {\n\t\tresult = schema.cached.tableNodeTypes = {};\n\t\tfor (const name in schema.nodes) {\n\t\t\tconst type = schema.nodes[name], role = type.spec.tableRole;\n\t\t\tif (role) result[role] = type;\n\t\t}\n\t}\n\treturn result;\n}\n\n//#endregion\n//#region src/util.ts\n/**\n* @public\n*/\nconst tableEditingKey = new PluginKey(\"selectingCells\");\n/**\n* @public\n*/\nfunction cellAround($pos) {\n\tfor (let d = $pos.depth - 1; d > 0; d--) if ($pos.node(d).type.spec.tableRole == \"row\") return $pos.node(0).resolve($pos.before(d + 1));\n\treturn null;\n}\nfunction cellWrapping($pos) {\n\tfor (let d = $pos.depth; d > 0; d--) {\n\t\tconst role = $pos.node(d).type.spec.tableRole;\n\t\tif (role === \"cell\" || role === \"header_cell\") return $pos.node(d);\n\t}\n\treturn null;\n}\n/**\n* @public\n*/\nfunction isInTable(state) {\n\tconst $head = state.selection.$head;\n\tfor (let d = $head.depth; d > 0; d--) if ($head.node(d).type.spec.tableRole == \"row\") return true;\n\treturn false;\n}\n/**\n* @internal\n*/\nfunction selectionCell(state) {\n\tconst sel = state.selection;\n\tif (\"$anchorCell\" in sel && sel.$anchorCell) return sel.$anchorCell.pos > sel.$headCell.pos ? sel.$anchorCell : sel.$headCell;\n\telse if (\"node\" in sel && sel.node && sel.node.type.spec.tableRole == \"cell\") return sel.$anchor;\n\tconst $cell = cellAround(sel.$head) || cellNear(sel.$head);\n\tif ($cell) return $cell;\n\tthrow new RangeError(`No cell found around position ${sel.head}`);\n}\n/**\n* @public\n*/\nfunction cellNear($pos) {\n\tfor (let after = $pos.nodeAfter, pos = $pos.pos; after; after = after.firstChild, pos++) {\n\t\tconst role = after.type.spec.tableRole;\n\t\tif (role == \"cell\" || role == \"header_cell\") return $pos.doc.resolve(pos);\n\t}\n\tfor (let before = $pos.nodeBefore, pos = $pos.pos; before; before = before.lastChild, pos--) {\n\t\tconst role = before.type.spec.tableRole;\n\t\tif (role == \"cell\" || role == \"header_cell\") return $pos.doc.resolve(pos - before.nodeSize);\n\t}\n}\n/**\n* @public\n*/\nfunction pointsAtCell($pos) {\n\treturn $pos.parent.type.spec.tableRole == \"row\" && !!$pos.nodeAfter;\n}\n/**\n* @public\n*/\nfunction moveCellForward($pos) {\n\treturn $pos.node(0).resolve($pos.pos + $pos.nodeAfter.nodeSize);\n}\n/**\n* @internal\n*/\nfunction inSameTable($cellA, $cellB) {\n\treturn $cellA.depth == $cellB.depth && $cellA.pos >= $cellB.start(-1) && $cellA.pos <= $cellB.end(-1);\n}\n/**\n* @public\n*/\nfunction findCell($pos) {\n\treturn TableMap.get($pos.node(-1)).findCell($pos.pos - $pos.start(-1));\n}\n/**\n* @public\n*/\nfunction colCount($pos) {\n\treturn TableMap.get($pos.node(-1)).colCount($pos.pos - $pos.start(-1));\n}\n/**\n* @public\n*/\nfunction nextCell($pos, axis, dir) {\n\tconst table = $pos.node(-1);\n\tconst map = TableMap.get(table);\n\tconst tableStart = $pos.start(-1);\n\tconst moved = map.nextCell($pos.pos - tableStart, axis, dir);\n\treturn moved == null ? null : $pos.node(0).resolve(tableStart + moved);\n}\n/**\n* @public\n*/\nfunction removeColSpan(attrs, pos, n = 1) {\n\tconst result = {\n\t\t...attrs,\n\t\tcolspan: attrs.colspan - n\n\t};\n\tif (result.colwidth) {\n\t\tresult.colwidth = result.colwidth.slice();\n\t\tresult.colwidth.splice(pos, n);\n\t\tif (!result.colwidth.some((w) => w > 0)) result.colwidth = null;\n\t}\n\treturn result;\n}\n/**\n* @public\n*/\nfunction addColSpan(attrs, pos, n = 1) {\n\tconst result = {\n\t\t...attrs,\n\t\tcolspan: attrs.colspan + n\n\t};\n\tif (result.colwidth) {\n\t\tresult.colwidth = result.colwidth.slice();\n\t\tfor (let i = 0; i < n; i++) result.colwidth.splice(pos, 0, 0);\n\t}\n\treturn result;\n}\n/**\n* @public\n*/\nfunction columnIsHeader(map, table, col) {\n\tconst headerCell = tableNodeTypes(table.type.schema).header_cell;\n\tfor (let row = 0; row < map.height; row++) if (table.nodeAt(map.map[col + row * map.width]).type != headerCell) return false;\n\treturn true;\n}\n\n//#endregion\n//#region src/cellselection.ts\n/**\n* A [`Selection`](http://prosemirror.net/docs/ref/#state.Selection)\n* subclass that represents a cell selection spanning part of a table.\n* With the plugin enabled, these will be created when the user\n* selects across cells, and will be drawn by giving selected cells a\n* `selectedCell` CSS class.\n*\n* @public\n*/\nvar CellSelection = class CellSelection extends Selection {\n\tconstructor($anchorCell, $headCell = $anchorCell) {\n\t\tconst table = $anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = $anchorCell.start(-1);\n\t\tconst rect = map.rectBetween($anchorCell.pos - tableStart, $headCell.pos - tableStart);\n\t\tconst doc = $anchorCell.node(0);\n\t\tconst cells = map.cellsInRect(rect).filter((p) => p != $headCell.pos - tableStart);\n\t\tcells.unshift($headCell.pos - tableStart);\n\t\tconst ranges = cells.map((pos) => {\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tif (!cell) throw new RangeError(`No cell with offset ${pos} found`);\n\t\t\tconst from = tableStart + pos + 1;\n\t\t\treturn new SelectionRange(doc.resolve(from), doc.resolve(from + cell.content.size));\n\t\t});\n\t\tsuper(ranges[0].$from, ranges[0].$to, ranges);\n\t\tthis.$anchorCell = $anchorCell;\n\t\tthis.$headCell = $headCell;\n\t}\n\tmap(doc, mapping) {\n\t\tconst $anchorCell = doc.resolve(mapping.map(this.$anchorCell.pos));\n\t\tconst $headCell = doc.resolve(mapping.map(this.$headCell.pos));\n\t\tif (pointsAtCell($anchorCell) && pointsAtCell($headCell) && inSameTable($anchorCell, $headCell)) {\n\t\t\tconst tableChanged = this.$anchorCell.node(-1) != $anchorCell.node(-1);\n\t\t\tif (tableChanged && this.isRowSelection()) return CellSelection.rowSelection($anchorCell, $headCell);\n\t\t\telse if (tableChanged && this.isColSelection()) return CellSelection.colSelection($anchorCell, $headCell);\n\t\t\telse return new CellSelection($anchorCell, $headCell);\n\t\t}\n\t\treturn TextSelection.between($anchorCell, $headCell);\n\t}\n\tcontent() {\n\t\tconst table = this.$anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = this.$anchorCell.start(-1);\n\t\tconst rect = map.rectBetween(this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart);\n\t\tconst seen = {};\n\t\tconst rows = [];\n\t\tfor (let row = rect.top; row < rect.bottom; row++) {\n\t\t\tconst rowContent = [];\n\t\t\tfor (let index = row * map.width + rect.left, col = rect.left; col < rect.right; col++, index++) {\n\t\t\t\tconst pos = map.map[index];\n\t\t\t\tif (seen[pos]) continue;\n\t\t\t\tseen[pos] = true;\n\t\t\t\tconst cellRect = map.findCell(pos);\n\t\t\t\tlet cell = table.nodeAt(pos);\n\t\t\t\tif (!cell) throw new RangeError(`No cell with offset ${pos} found`);\n\t\t\t\tconst extraLeft = rect.left - cellRect.left;\n\t\t\t\tconst extraRight = cellRect.right - rect.right;\n\t\t\t\tif (extraLeft > 0 || extraRight > 0) {\n\t\t\t\t\tlet attrs = cell.attrs;\n\t\t\t\t\tif (extraLeft > 0) attrs = removeColSpan(attrs, 0, extraLeft);\n\t\t\t\t\tif (extraRight > 0) attrs = removeColSpan(attrs, attrs.colspan - extraRight, extraRight);\n\t\t\t\t\tif (cellRect.left < rect.left) {\n\t\t\t\t\t\tcell = cell.type.createAndFill(attrs);\n\t\t\t\t\t\tif (!cell) throw new RangeError(`Could not create cell with attrs ${JSON.stringify(attrs)}`);\n\t\t\t\t\t} else cell = cell.type.create(attrs, cell.content);\n\t\t\t\t}\n\t\t\t\tif (cellRect.top < rect.top || cellRect.bottom > rect.bottom) {\n\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t...cell.attrs,\n\t\t\t\t\t\trowspan: Math.min(cellRect.bottom, rect.bottom) - Math.max(cellRect.top, rect.top)\n\t\t\t\t\t};\n\t\t\t\t\tif (cellRect.top < rect.top) cell = cell.type.createAndFill(attrs);\n\t\t\t\t\telse cell = cell.type.create(attrs, cell.content);\n\t\t\t\t}\n\t\t\t\trowContent.push(cell);\n\t\t\t}\n\t\t\trows.push(table.child(row).copy(Fragment.from(rowContent)));\n\t\t}\n\t\tconst fragment = this.isColSelection() && this.isRowSelection() ? table : rows;\n\t\treturn new Slice(Fragment.from(fragment), 1, 1);\n\t}\n\treplace(tr, content = Slice.empty) {\n\t\tconst mapFrom = tr.steps.length, ranges = this.ranges;\n\t\tfor (let i = 0; i < ranges.length; i++) {\n\t\t\tconst { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n\t\t\ttr.replace(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content);\n\t\t}\n\t\tconst sel = Selection.findFrom(tr.doc.resolve(tr.mapping.slice(mapFrom).map(this.to)), -1);\n\t\tif (sel) tr.setSelection(sel);\n\t}\n\treplaceWith(tr, node) {\n\t\tthis.replace(tr, new Slice(Fragment.from(node), 0, 0));\n\t}\n\tforEachCell(f) {\n\t\tconst table = this.$anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = this.$anchorCell.start(-1);\n\t\tconst cells = map.cellsInRect(map.rectBetween(this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart));\n\t\tfor (let i = 0; i < cells.length; i++) f(table.nodeAt(cells[i]), tableStart + cells[i]);\n\t}\n\tisColSelection() {\n\t\tconst anchorTop = this.$anchorCell.index(-1);\n\t\tconst headTop = this.$headCell.index(-1);\n\t\tif (Math.min(anchorTop, headTop) > 0) return false;\n\t\tconst anchorBottom = anchorTop + this.$anchorCell.nodeAfter.attrs.rowspan;\n\t\tconst headBottom = headTop + this.$headCell.nodeAfter.attrs.rowspan;\n\t\treturn Math.max(anchorBottom, headBottom) == this.$headCell.node(-1).childCount;\n\t}\n\tstatic colSelection($anchorCell, $headCell = $anchorCell) {\n\t\tconst table = $anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = $anchorCell.start(-1);\n\t\tconst anchorRect = map.findCell($anchorCell.pos - tableStart);\n\t\tconst headRect = map.findCell($headCell.pos - tableStart);\n\t\tconst doc = $anchorCell.node(0);\n\t\tif (anchorRect.top <= headRect.top) {\n\t\t\tif (anchorRect.top > 0) $anchorCell = doc.resolve(tableStart + map.map[anchorRect.left]);\n\t\t\tif (headRect.bottom < map.height) $headCell = doc.resolve(tableStart + map.map[map.width * (map.height - 1) + headRect.right - 1]);\n\t\t} else {\n\t\t\tif (headRect.top > 0) $headCell = doc.resolve(tableStart + map.map[headRect.left]);\n\t\t\tif (anchorRect.bottom < map.height) $anchorCell = doc.resolve(tableStart + map.map[map.width * (map.height - 1) + anchorRect.right - 1]);\n\t\t}\n\t\treturn new CellSelection($anchorCell, $headCell);\n\t}\n\tisRowSelection() {\n\t\tconst table = this.$anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = this.$anchorCell.start(-1);\n\t\tconst anchorLeft = map.colCount(this.$anchorCell.pos - tableStart);\n\t\tconst headLeft = map.colCount(this.$headCell.pos - tableStart);\n\t\tif (Math.min(anchorLeft, headLeft) > 0) return false;\n\t\tconst anchorRight = anchorLeft + this.$anchorCell.nodeAfter.attrs.colspan;\n\t\tconst headRight = headLeft + this.$headCell.nodeAfter.attrs.colspan;\n\t\treturn Math.max(anchorRight, headRight) == map.width;\n\t}\n\teq(other) {\n\t\treturn other instanceof CellSelection && other.$anchorCell.pos == this.$anchorCell.pos && other.$headCell.pos == this.$headCell.pos;\n\t}\n\tstatic rowSelection($anchorCell, $headCell = $anchorCell) {\n\t\tconst table = $anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = $anchorCell.start(-1);\n\t\tconst anchorRect = map.findCell($anchorCell.pos - tableStart);\n\t\tconst headRect = map.findCell($headCell.pos - tableStart);\n\t\tconst doc = $anchorCell.node(0);\n\t\tif (anchorRect.left <= headRect.left) {\n\t\t\tif (anchorRect.left > 0) $anchorCell = doc.resolve(tableStart + map.map[anchorRect.top * map.width]);\n\t\t\tif (headRect.right < map.width) $headCell = doc.resolve(tableStart + map.map[map.width * (headRect.top + 1) - 1]);\n\t\t} else {\n\t\t\tif (headRect.left > 0) $headCell = doc.resolve(tableStart + map.map[headRect.top * map.width]);\n\t\t\tif (anchorRect.right < map.width) $anchorCell = doc.resolve(tableStart + map.map[map.width * (anchorRect.top + 1) - 1]);\n\t\t}\n\t\treturn new CellSelection($anchorCell, $headCell);\n\t}\n\ttoJSON() {\n\t\treturn {\n\t\t\ttype: \"cell\",\n\t\t\tanchor: this.$anchorCell.pos,\n\t\t\thead: this.$headCell.pos\n\t\t};\n\t}\n\tstatic fromJSON(doc, json) {\n\t\treturn new CellSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n\t}\n\tstatic create(doc, anchorCell, headCell = anchorCell) {\n\t\treturn new CellSelection(doc.resolve(anchorCell), doc.resolve(headCell));\n\t}\n\tgetBookmark() {\n\t\treturn new CellBookmark(this.$anchorCell.pos, this.$headCell.pos);\n\t}\n};\nCellSelection.prototype.visible = false;\nSelection.jsonID(\"cell\", CellSelection);\n/**\n* @public\n*/\nvar CellBookmark = class CellBookmark {\n\tconstructor(anchor, head) {\n\t\tthis.anchor = anchor;\n\t\tthis.head = head;\n\t}\n\tmap(mapping) {\n\t\treturn new CellBookmark(mapping.map(this.anchor), mapping.map(this.head));\n\t}\n\tresolve(doc) {\n\t\tconst $anchorCell = doc.resolve(this.anchor), $headCell = doc.resolve(this.head);\n\t\tif ($anchorCell.parent.type.spec.tableRole == \"row\" && $headCell.parent.type.spec.tableRole == \"row\" && $anchorCell.index() < $anchorCell.parent.childCount && $headCell.index() < $headCell.parent.childCount && inSameTable($anchorCell, $headCell)) return new CellSelection($anchorCell, $headCell);\n\t\telse return Selection.near($headCell, 1);\n\t}\n};\nfunction drawCellSelection(state) {\n\tif (!(state.selection instanceof CellSelection)) return null;\n\tconst cells = [];\n\tstate.selection.forEachCell((node, pos) => {\n\t\tcells.push(Decoration.node(pos, pos + node.nodeSize, { class: \"selectedCell\" }));\n\t});\n\treturn DecorationSet.create(state.doc, cells);\n}\nfunction isCellBoundarySelection({ $from, $to }) {\n\tif ($from.pos == $to.pos || $from.pos < $to.pos - 6) return false;\n\tlet afterFrom = $from.pos;\n\tlet beforeTo = $to.pos;\n\tlet depth = $from.depth;\n\tfor (; depth >= 0; depth--, afterFrom++) if ($from.after(depth + 1) < $from.end(depth)) break;\n\tfor (let d = $to.depth; d >= 0; d--, beforeTo--) if ($to.before(d + 1) > $to.start(d)) break;\n\treturn afterFrom == beforeTo && /row|table/.test($from.node(depth).type.spec.tableRole);\n}\nfunction isTextSelectionAcrossCells({ $from, $to }) {\n\tlet fromCellBoundaryNode;\n\tlet toCellBoundaryNode;\n\tfor (let i = $from.depth; i > 0; i--) {\n\t\tconst node = $from.node(i);\n\t\tif (node.type.spec.tableRole === \"cell\" || node.type.spec.tableRole === \"header_cell\") {\n\t\t\tfromCellBoundaryNode = node;\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor (let i = $to.depth; i > 0; i--) {\n\t\tconst node = $to.node(i);\n\t\tif (node.type.spec.tableRole === \"cell\" || node.type.spec.tableRole === \"header_cell\") {\n\t\t\ttoCellBoundaryNode = node;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn fromCellBoundaryNode !== toCellBoundaryNode && $to.parentOffset === 0;\n}\nfunction normalizeSelection(state, tr, allowTableNodeSelection) {\n\tconst sel = (tr || state).selection;\n\tconst doc = (tr || state).doc;\n\tlet normalize;\n\tlet role;\n\tif (sel instanceof NodeSelection && (role = sel.node.type.spec.tableRole)) {\n\t\tif (role == \"cell\" || role == \"header_cell\") normalize = CellSelection.create(doc, sel.from);\n\t\telse if (role == \"row\") {\n\t\t\tconst $cell = doc.resolve(sel.from + 1);\n\t\t\tnormalize = CellSelection.rowSelection($cell, $cell);\n\t\t} else if (!allowTableNodeSelection) {\n\t\t\tconst map = TableMap.get(sel.node);\n\t\t\tconst start = sel.from + 1;\n\t\t\tconst lastCell = start + map.map[map.width * map.height - 1];\n\t\t\tnormalize = CellSelection.create(doc, start + 1, lastCell);\n\t\t}\n\t} else if (sel instanceof TextSelection && isCellBoundarySelection(sel)) normalize = TextSelection.create(doc, sel.from);\n\telse if (sel instanceof TextSelection && isTextSelectionAcrossCells(sel)) normalize = TextSelection.create(doc, sel.$from.start(), sel.$from.end());\n\tif (normalize) (tr || (tr = state.tr)).setSelection(normalize);\n\treturn tr;\n}\n\n//#endregion\n//#region src/fixtables.ts\n/**\n* @public\n*/\nconst fixTablesKey = new PluginKey(\"fix-tables\");\n/**\n* Helper for iterating through the nodes in a document that changed\n* compared to the given previous document. Useful for avoiding\n* duplicate work on each transaction.\n*\n* @public\n*/\nfunction changedDescendants(old, cur, offset, f) {\n\tconst oldSize = old.childCount, curSize = cur.childCount;\n\touter: for (let i = 0, j = 0; i < curSize; i++) {\n\t\tconst child = cur.child(i);\n\t\tfor (let scan = j, e = Math.min(oldSize, i + 3); scan < e; scan++) if (old.child(scan) == child) {\n\t\t\tj = scan + 1;\n\t\t\toffset += child.nodeSize;\n\t\t\tcontinue outer;\n\t\t}\n\t\tf(child, offset);\n\t\tif (j < oldSize && old.child(j).sameMarkup(child)) changedDescendants(old.child(j), child, offset + 1, f);\n\t\telse child.nodesBetween(0, child.content.size, f, offset + 1);\n\t\toffset += child.nodeSize;\n\t}\n}\n/**\n* Inspect all tables in the given state's document and return a\n* transaction that fixes them, if necessary. If `oldState` was\n* provided, that is assumed to hold a previous, known-good state,\n* which will be used to avoid re-scanning unchanged parts of the\n* document.\n*\n* @public\n*/\nfunction fixTables(state, oldState) {\n\tlet tr;\n\tconst check = (node, pos) => {\n\t\tif (node.type.spec.tableRole == \"table\") tr = fixTable(state, node, pos, tr);\n\t};\n\tif (!oldState) state.doc.descendants(check);\n\telse if (oldState.doc != state.doc) changedDescendants(oldState.doc, state.doc, 0, check);\n\treturn tr;\n}\nfunction fixTable(state, table, tablePos, tr) {\n\tconst map = TableMap.get(table);\n\tif (!map.problems) return tr;\n\tif (!tr) tr = state.tr;\n\tconst mustAdd = [];\n\tfor (let i = 0; i < map.height; i++) mustAdd.push(0);\n\tfor (let i = 0; i < map.problems.length; i++) {\n\t\tconst prob = map.problems[i];\n\t\tif (prob.type == \"collision\") {\n\t\t\tconst cell = table.nodeAt(prob.pos);\n\t\t\tif (!cell) continue;\n\t\t\tconst attrs = cell.attrs;\n\t\t\tfor (let j = 0; j < attrs.rowspan; j++) mustAdd[prob.row + j] += prob.n;\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, removeColSpan(attrs, attrs.colspan - prob.n, prob.n));\n\t\t} else if (prob.type == \"missing\") mustAdd[prob.row] += prob.n;\n\t\telse if (prob.type == \"overlong_rowspan\") {\n\t\t\tconst cell = table.nodeAt(prob.pos);\n\t\t\tif (!cell) continue;\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, {\n\t\t\t\t...cell.attrs,\n\t\t\t\trowspan: cell.attrs.rowspan - prob.n\n\t\t\t});\n\t\t} else if (prob.type == \"colwidth mismatch\") {\n\t\t\tconst cell = table.nodeAt(prob.pos);\n\t\t\tif (!cell) continue;\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, {\n\t\t\t\t...cell.attrs,\n\t\t\t\tcolwidth: prob.colwidth\n\t\t\t});\n\t\t} else if (prob.type == \"zero_sized\") {\n\t\t\tconst pos = tr.mapping.map(tablePos);\n\t\t\ttr.delete(pos, pos + table.nodeSize);\n\t\t}\n\t}\n\tlet first, last;\n\tfor (let i = 0; i < mustAdd.length; i++) if (mustAdd[i]) {\n\t\tif (first == null) first = i;\n\t\tlast = i;\n\t}\n\tfor (let i = 0, pos = tablePos + 1; i < map.height; i++) {\n\t\tconst row = table.child(i);\n\t\tconst end = pos + row.nodeSize;\n\t\tconst add = mustAdd[i];\n\t\tif (add > 0) {\n\t\t\tlet role = \"cell\";\n\t\t\tif (row.firstChild) role = row.firstChild.type.spec.tableRole;\n\t\t\tconst nodes = [];\n\t\t\tfor (let j = 0; j < add; j++) {\n\t\t\t\tconst node = tableNodeTypes(state.schema)[role].createAndFill();\n\t\t\t\tif (node) nodes.push(node);\n\t\t\t}\n\t\t\tconst side = (i == 0 || first == i - 1) && last == i ? pos + 1 : end - 1;\n\t\t\ttr.insert(tr.mapping.map(side), nodes);\n\t\t}\n\t\tpos = end;\n\t}\n\treturn tr.setMeta(fixTablesKey, { fixTables: true });\n}\n\n//#endregion\n//#region src/utils/convert.ts\n/**\n* This function will transform the table node into a matrix of rows and columns\n* respecting merged cells, for example this table:\n*\n* ```\n* ┌──────┬──────┬─────────────┐\n* │ A1 │ B1 │ C1 │\n* ├──────┼──────┴──────┬──────┤\n* │ A2 │ B2 │ │\n* ├──────┼─────────────┤ D1 │\n* │ A3 │ B3 │ C3 │ │\n* └──────┴──────┴──────┴──────┘\n* ```\n*\n* will be converted to the below:\n*\n* ```javascript\n* [\n* [A1, B1, C1, null],\n* [A2, B2, null, D1],\n* [A3, B3, C3, null],\n* ]\n* ```\n* @internal\n*/\nfunction convertTableNodeToArrayOfRows(tableNode) {\n\tconst map = TableMap.get(tableNode);\n\tconst rows = [];\n\tconst rowCount = map.height;\n\tconst colCount$1 = map.width;\n\tfor (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n\t\tconst row = [];\n\t\tfor (let colIndex = 0; colIndex < colCount$1; colIndex++) {\n\t\t\tconst cellIndex = rowIndex * colCount$1 + colIndex;\n\t\t\tconst cellPos = map.map[cellIndex];\n\t\t\tif (rowIndex > 0) {\n\t\t\t\tconst topCellIndex = cellIndex - colCount$1;\n\t\t\t\tif (cellPos === map.map[topCellIndex]) {\n\t\t\t\t\trow.push(null);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (colIndex > 0) {\n\t\t\t\tconst leftCellIndex = cellIndex - 1;\n\t\t\t\tif (cellPos === map.map[leftCellIndex]) {\n\t\t\t\t\trow.push(null);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\trow.push(tableNode.nodeAt(cellPos));\n\t\t}\n\t\trows.push(row);\n\t}\n\treturn rows;\n}\n/**\n* Convert an array of rows to a table node.\n*\n* @internal\n*/\nfunction convertArrayOfRowsToTableNode(tableNode, arrayOfNodes) {\n\tconst newRows = [];\n\tconst map = TableMap.get(tableNode);\n\tconst rowCount = map.height;\n\tconst colCount$1 = map.width;\n\tfor (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n\t\tconst oldRow = tableNode.child(rowIndex);\n\t\tconst newCells = [];\n\t\tfor (let colIndex = 0; colIndex < colCount$1; colIndex++) {\n\t\t\tconst cell = arrayOfNodes[rowIndex][colIndex];\n\t\t\tif (!cell) continue;\n\t\t\tconst cellPos = map.map[rowIndex * map.width + colIndex];\n\t\t\tconst oldCell = tableNode.nodeAt(cellPos);\n\t\t\tif (!oldCell) continue;\n\t\t\tconst newCell = oldCell.type.createChecked(cell.attrs, cell.content, cell.marks);\n\t\t\tnewCells.push(newCell);\n\t\t}\n\t\tconst newRow = oldRow.type.createChecked(oldRow.attrs, newCells, oldRow.marks);\n\t\tnewRows.push(newRow);\n\t}\n\treturn tableNode.type.createChecked(tableNode.attrs, newRows, tableNode.marks);\n}\n\n//#endregion\n//#region src/utils/move-row-in-array-of-rows.ts\n/**\n* Move a row in an array of rows.\n*\n* @internal\n*/\nfunction moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, directionOverride) {\n\tconst direction = indexesOrigin[0] > indexesTarget[0] ? -1 : 1;\n\tconst rowsExtracted = rows.splice(indexesOrigin[0], indexesOrigin.length);\n\tconst positionOffset = rowsExtracted.length % 2 === 0 ? 1 : 0;\n\tlet target;\n\tif (directionOverride === -1 && direction === 1) target = indexesTarget[0] - 1;\n\telse if (directionOverride === 1 && direction === -1) target = indexesTarget[indexesTarget.length - 1] - positionOffset + 1;\n\telse target = direction === -1 ? indexesTarget[0] : indexesTarget[indexesTarget.length - 1] - positionOffset;\n\trows.splice(target, 0, ...rowsExtracted);\n\treturn rows;\n}\n\n//#endregion\n//#region src/utils/query.ts\n/**\n* Checks if the given object is a `CellSelection` instance.\n*\n* @internal\n*/\nfunction isCellSelection(value) {\n\treturn value instanceof CellSelection;\n}\n/**\n* Find the closest table node for a given position.\n*\n* @public\n*/\nfunction findTable($pos) {\n\treturn findParentNode((node) => node.type.spec.tableRole === \"table\", $pos);\n}\n/**\n* Try to find the anchor and head cell in the same table by using the given\n* anchor and head as hit points, or fallback to the selection's anchor and\n* head.\n*\n* @public\n*/\nfunction findCellRange(selection, anchorHit, headHit) {\n\tvar _ref, _ref2;\n\tif (anchorHit == null && headHit == null && isCellSelection(selection)) return [selection.$anchorCell, selection.$headCell];\n\tconst anchor = (_ref = anchorHit !== null && anchorHit !== void 0 ? anchorHit : headHit) !== null && _ref !== void 0 ? _ref : selection.anchor;\n\tconst head = (_ref2 = headHit !== null && headHit !== void 0 ? headHit : anchorHit) !== null && _ref2 !== void 0 ? _ref2 : selection.head;\n\tconst doc = selection.$head.doc;\n\tconst $anchorCell = findCellPos(doc, anchor);\n\tconst $headCell = findCellPos(doc, head);\n\tif ($anchorCell && $headCell && inSameTable($anchorCell, $headCell)) return [$anchorCell, $headCell];\n\treturn null;\n}\n/**\n* Try to find a resolved pos of a cell by using the given pos as a hit point.\n*\n* @public\n*/\nfunction findCellPos(doc, pos) {\n\tconst $pos = doc.resolve(pos);\n\treturn cellAround($pos) || cellNear($pos);\n}\n/**\n* Find the closest parent node that satisfies the predicate.\n*\n* @internal\n*/\nfunction findParentNode(predicate, $pos) {\n\tfor (let depth = $pos.depth; depth >= 0; depth -= 1) {\n\t\tconst node = $pos.node(depth);\n\t\tif (predicate(node)) return {\n\t\t\tnode,\n\t\t\tpos: depth === 0 ? 0 : $pos.before(depth),\n\t\t\tstart: $pos.start(depth),\n\t\t\tdepth\n\t\t};\n\t}\n\treturn null;\n}\n\n//#endregion\n//#region src/utils/get-cells.ts\n/**\n* Returns an array of cells in a column at the specified column index.\n*\n* @internal\n*/\nfunction getCellsInColumn(columnIndex, selection) {\n\tconst table = findTable(selection.$from);\n\tif (!table) return;\n\tconst map = TableMap.get(table.node);\n\tif (columnIndex < 0 || columnIndex > map.width - 1) return;\n\treturn map.cellsInRect({\n\t\tleft: columnIndex,\n\t\tright: columnIndex + 1,\n\t\ttop: 0,\n\t\tbottom: map.height\n\t}).map((nodePos) => {\n\t\tconst node = table.node.nodeAt(nodePos);\n\t\tconst pos = nodePos + table.start;\n\t\treturn {\n\t\t\tpos,\n\t\t\tstart: pos + 1,\n\t\t\tnode,\n\t\t\tdepth: table.depth + 2\n\t\t};\n\t});\n}\n/**\n* Returns an array of cells in a row at the specified row index.\n*\n* @internal\n*/\nfunction getCellsInRow(rowIndex, selection) {\n\tconst table = findTable(selection.$from);\n\tif (!table) return;\n\tconst map = TableMap.get(table.node);\n\tif (rowIndex < 0 || rowIndex > map.height - 1) return;\n\treturn map.cellsInRect({\n\t\tleft: 0,\n\t\tright: map.width,\n\t\ttop: rowIndex,\n\t\tbottom: rowIndex + 1\n\t}).map((nodePos) => {\n\t\tconst node = table.node.nodeAt(nodePos);\n\t\tconst pos = nodePos + table.start;\n\t\treturn {\n\t\t\tpos,\n\t\t\tstart: pos + 1,\n\t\t\tnode,\n\t\t\tdepth: table.depth + 2\n\t\t};\n\t});\n}\n\n//#endregion\n//#region src/utils/selection-range.ts\n/**\n* Returns a range of rectangular selection spanning all merged cells around a\n* column at index `columnIndex`.\n*\n* Original implementation from Atlassian (Apache License 2.0)\n*\n* https://bitbucket.org/atlassian/atlassian-frontend-mirror/src/5f91cb871e8248bc3bae5ddc30bb9fd9200fadbb/editor/editor-tables/src/utils/get-selection-range-in-column.ts#editor/editor-tables/src/utils/get-selection-range-in-column.ts\n*\n* @internal\n*/\nfunction getSelectionRangeInColumn(tr, startColIndex, endColIndex = startColIndex) {\n\tlet startIndex = startColIndex;\n\tlet endIndex = endColIndex;\n\tfor (let i = startColIndex; i >= 0; i--) {\n\t\tconst cells = getCellsInColumn(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.colspan + i - 1;\n\t\t\tif (maybeEndIndex >= startIndex) startIndex = i;\n\t\t\tif (maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tfor (let i = startColIndex; i <= endIndex; i++) {\n\t\tconst cells = getCellsInColumn(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.colspan + i - 1;\n\t\t\tif (cell.node.attrs.colspan > 1 && maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tconst indexes = [];\n\tfor (let i = startIndex; i <= endIndex; i++) {\n\t\tconst maybeCells = getCellsInColumn(i, tr.selection);\n\t\tif (maybeCells && maybeCells.length > 0) indexes.push(i);\n\t}\n\tstartIndex = indexes[0];\n\tendIndex = indexes[indexes.length - 1];\n\tconst firstSelectedColumnCells = getCellsInColumn(startIndex, tr.selection);\n\tconst firstRowCells = getCellsInRow(0, tr.selection);\n\tif (!firstSelectedColumnCells || !firstRowCells) return;\n\tconst $anchor = tr.doc.resolve(firstSelectedColumnCells[firstSelectedColumnCells.length - 1].pos);\n\tlet headCell;\n\tfor (let i = endIndex; i >= startIndex; i--) {\n\t\tconst columnCells = getCellsInColumn(i, tr.selection);\n\t\tif (columnCells && columnCells.length > 0) {\n\t\t\tfor (let j = firstRowCells.length - 1; j >= 0; j--) if (firstRowCells[j].pos === columnCells[0].pos) {\n\t\t\t\theadCell = columnCells[0];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (headCell) break;\n\t\t}\n\t}\n\tif (!headCell) return;\n\treturn {\n\t\t$anchor,\n\t\t$head: tr.doc.resolve(headCell.pos),\n\t\tindexes\n\t};\n}\n/**\n* Returns a range of rectangular selection spanning all merged cells around a\n* row at index `rowIndex`.\n*\n* Original implementation from Atlassian (Apache License 2.0)\n*\n* https://bitbucket.org/atlassian/atlassian-frontend-mirror/src/5f91cb871e8248bc3bae5ddc30bb9fd9200fadbb/editor/editor-tables/src/utils/get-selection-range-in-row.ts#editor/editor-tables/src/utils/get-selection-range-in-row.ts\n*\n* @internal\n*/\nfunction getSelectionRangeInRow(tr, startRowIndex, endRowIndex = startRowIndex) {\n\tlet startIndex = startRowIndex;\n\tlet endIndex = endRowIndex;\n\tfor (let i = startRowIndex; i >= 0; i--) {\n\t\tconst cells = getCellsInRow(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n\t\t\tif (maybeEndIndex >= startIndex) startIndex = i;\n\t\t\tif (maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tfor (let i = startRowIndex; i <= endIndex; i++) {\n\t\tconst cells = getCellsInRow(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n\t\t\tif (cell.node.attrs.rowspan > 1 && maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tconst indexes = [];\n\tfor (let i = startIndex; i <= endIndex; i++) {\n\t\tconst maybeCells = getCellsInRow(i, tr.selection);\n\t\tif (maybeCells && maybeCells.length > 0) indexes.push(i);\n\t}\n\tstartIndex = indexes[0];\n\tendIndex = indexes[indexes.length - 1];\n\tconst firstSelectedRowCells = getCellsInRow(startIndex, tr.selection);\n\tconst firstColumnCells = getCellsInColumn(0, tr.selection);\n\tif (!firstSelectedRowCells || !firstColumnCells) return;\n\tconst $anchor = tr.doc.resolve(firstSelectedRowCells[firstSelectedRowCells.length - 1].pos);\n\tlet headCell;\n\tfor (let i = endIndex; i >= startIndex; i--) {\n\t\tconst rowCells = getCellsInRow(i, tr.selection);\n\t\tif (rowCells && rowCells.length > 0) {\n\t\t\tfor (let j = firstColumnCells.length - 1; j >= 0; j--) if (firstColumnCells[j].pos === rowCells[0].pos) {\n\t\t\t\theadCell = rowCells[0];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (headCell) break;\n\t\t}\n\t}\n\tif (!headCell) return;\n\treturn {\n\t\t$anchor,\n\t\t$head: tr.doc.resolve(headCell.pos),\n\t\tindexes\n\t};\n}\n\n//#endregion\n//#region src/utils/transpose.ts\n/**\n* Transposes a 2D array by flipping columns to rows.\n*\n* Transposition is a familiar algebra concept where the matrix is flipped\n* along its diagonal. For more details, see:\n* https://en.wikipedia.org/wiki/Transpose\n*\n* @example\n* ```javascript\n* const arr = [\n* ['a1', 'a2', 'a3'],\n* ['b1', 'b2', 'b3'],\n* ['c1', 'c2', 'c3'],\n* ['d1', 'd2', 'd3'],\n* ];\n*\n* const result = transpose(arr);\n* result === [\n* ['a1', 'b1', 'c1', 'd1'],\n* ['a2', 'b2', 'c2', 'd2'],\n* ['a3', 'b3', 'c3', 'd3'],\n* ]\n* ```\n*/\nfunction transpose(array) {\n\treturn array[0].map((_, i) => {\n\t\treturn array.map((column) => column[i]);\n\t});\n}\n\n//#endregion\n//#region src/utils/move-column.ts\n/**\n* Move a column from index `origin` to index `target`.\n*\n* @internal\n*/\nfunction moveColumn(moveColParams) {\n\tvar _getSelectionRangeInC, _getSelectionRangeInC2;\n\tconst { tr, originIndex, targetIndex, select, pos } = moveColParams;\n\tconst table = findTable(tr.doc.resolve(pos));\n\tif (!table) return false;\n\tconst indexesOriginColumn = (_getSelectionRangeInC = getSelectionRangeInColumn(tr, originIndex)) === null || _getSelectionRangeInC === void 0 ? void 0 : _getSelectionRangeInC.indexes;\n\tconst indexesTargetColumn = (_getSelectionRangeInC2 = getSelectionRangeInColumn(tr, targetIndex)) === null || _getSelectionRangeInC2 === void 0 ? void 0 : _getSelectionRangeInC2.indexes;\n\tif (!indexesOriginColumn || !indexesTargetColumn) return false;\n\tif (indexesOriginColumn.includes(targetIndex)) return false;\n\tconst newTable = moveTableColumn$1(table.node, indexesOriginColumn, indexesTargetColumn, 0);\n\ttr.replaceWith(table.pos, table.pos + table.node.nodeSize, newTable);\n\tif (!select) return true;\n\tconst map = TableMap.get(newTable);\n\tconst start = table.start;\n\tconst index = targetIndex;\n\tconst lastCell = map.positionAt(map.height - 1, index, newTable);\n\tconst $lastCell = tr.doc.resolve(start + lastCell);\n\tconst firstCell = map.positionAt(0, index, newTable);\n\tconst $firstCell = tr.doc.resolve(start + firstCell);\n\ttr.setSelection(CellSelection.colSelection($lastCell, $firstCell));\n\treturn true;\n}\nfunction moveTableColumn$1(table, indexesOrigin, indexesTarget, direction) {\n\tlet rows = transpose(convertTableNodeToArrayOfRows(table));\n\trows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n\trows = transpose(rows);\n\treturn convertArrayOfRowsToTableNode(table, rows);\n}\n\n//#endregion\n//#region src/utils/move-row.ts\n/**\n* Move a row from index `origin` to index `target`.\n*\n* @internal\n*/\nfunction moveRow(moveRowParams) {\n\tvar _getSelectionRangeInR, _getSelectionRangeInR2;\n\tconst { tr, originIndex, targetIndex, select, pos } = moveRowParams;\n\tconst table = findTable(tr.doc.resolve(pos));\n\tif (!table) return false;\n\tconst indexesOriginRow = (_getSelectionRangeInR = getSelectionRangeInRow(tr, originIndex)) === null || _getSelectionRangeInR === void 0 ? void 0 : _getSelectionRangeInR.indexes;\n\tconst indexesTargetRow = (_getSelectionRangeInR2 = getSelectionRangeInRow(tr, targetIndex)) === null || _getSelectionRangeInR2 === void 0 ? void 0 : _getSelectionRangeInR2.indexes;\n\tif (!indexesOriginRow || !indexesTargetRow) return false;\n\tif (indexesOriginRow.includes(targetIndex)) return false;\n\tconst newTable = moveTableRow$1(table.node, indexesOriginRow, indexesTargetRow, 0);\n\ttr.replaceWith(table.pos, table.pos + table.node.nodeSize, newTable);\n\tif (!select) return true;\n\tconst map = TableMap.get(newTable);\n\tconst start = table.start;\n\tconst index = targetIndex;\n\tconst lastCell = map.positionAt(index, map.width - 1, newTable);\n\tconst $lastCell = tr.doc.resolve(start + lastCell);\n\tconst firstCell = map.positionAt(index, 0, newTable);\n\tconst $firstCell = tr.doc.resolve(start + firstCell);\n\ttr.setSelection(CellSelection.rowSelection($lastCell, $firstCell));\n\treturn true;\n}\nfunction moveTableRow$1(table, indexesOrigin, indexesTarget, direction) {\n\tlet rows = convertTableNodeToArrayOfRows(table);\n\trows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n\treturn convertArrayOfRowsToTableNode(table, rows);\n}\n\n//#endregion\n//#region src/commands.ts\n/**\n* Helper to get the selected rectangle in a table, if any. Adds table\n* map, table node, and table start offset to the object for\n* convenience.\n*\n* @public\n*/\nfunction selectedRect(state) {\n\tconst sel = state.selection;\n\tconst $pos = selectionCell(state);\n\tconst table = $pos.node(-1);\n\tconst tableStart = $pos.start(-1);\n\tconst map = TableMap.get(table);\n\treturn {\n\t\t...sel instanceof CellSelection ? map.rectBetween(sel.$anchorCell.pos - tableStart, sel.$headCell.pos - tableStart) : map.findCell($pos.pos - tableStart),\n\t\ttableStart,\n\t\tmap,\n\t\ttable\n\t};\n}\n/**\n* Add a column at the given position in a table.\n*\n* @public\n*/\nfunction addColumn(tr, { map, tableStart, table }, col) {\n\tlet refColumn = col > 0 ? -1 : 0;\n\tif (columnIsHeader(map, table, col + refColumn)) refColumn = col == 0 || col == map.width ? null : 0;\n\tfor (let row = 0; row < map.height; row++) {\n\t\tconst index = row * map.width + col;\n\t\tif (col > 0 && col < map.width && map.map[index - 1] == map.map[index]) {\n\t\t\tconst pos = map.map[index];\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tableStart + pos), null, addColSpan(cell.attrs, col - map.colCount(pos)));\n\t\t\trow += cell.attrs.rowspan - 1;\n\t\t} else {\n\t\t\tconst type = refColumn == null ? tableNodeTypes(table.type.schema).cell : table.nodeAt(map.map[index + refColumn]).type;\n\t\t\tconst pos = map.positionAt(row, col, table);\n\t\t\ttr.insert(tr.mapping.map(tableStart + pos), type.createAndFill());\n\t\t}\n\t}\n\treturn tr;\n}\n/**\n* Command to add a column before the column with the selection.\n*\n* @public\n*/\nfunction addColumnBefore(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addColumn(state.tr, rect, rect.left));\n\t}\n\treturn true;\n}\n/**\n* Command to add a column after the column with the selection.\n*\n* @public\n*/\nfunction addColumnAfter(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addColumn(state.tr, rect, rect.right));\n\t}\n\treturn true;\n}\n/**\n* @public\n*/\nfunction removeColumn(tr, { map, table, tableStart }, col) {\n\tconst mapStart = tr.mapping.maps.length;\n\tfor (let row = 0; row < map.height;) {\n\t\tconst index = row * map.width + col;\n\t\tconst pos = map.map[index];\n\t\tconst cell = table.nodeAt(pos);\n\t\tconst attrs = cell.attrs;\n\t\tif (col > 0 && map.map[index - 1] == pos || col < map.width - 1 && map.map[index + 1] == pos) tr.setNodeMarkup(tr.mapping.slice(mapStart).map(tableStart + pos), null, removeColSpan(attrs, col - map.colCount(pos)));\n\t\telse {\n\t\t\tconst start = tr.mapping.slice(mapStart).map(tableStart + pos);\n\t\t\ttr.delete(start, start + cell.nodeSize);\n\t\t}\n\t\trow += attrs.rowspan;\n\t}\n}\n/**\n* Command function that removes the selected columns from a table.\n*\n* @public\n*/\nfunction deleteColumn(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tconst tr = state.tr;\n\t\tif (rect.left == 0 && rect.right == rect.map.width) return false;\n\t\tfor (let i = rect.right - 1;; i--) {\n\t\t\tremoveColumn(tr, rect, i);\n\t\t\tif (i == rect.left) break;\n\t\t\tconst table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n\t\t\tif (!table) throw new RangeError(\"No table found\");\n\t\t\trect.table = table;\n\t\t\trect.map = TableMap.get(table);\n\t\t}\n\t\tdispatch(tr);\n\t}\n\treturn true;\n}\n/**\n* @public\n*/\nfunction rowIsHeader(map, table, row) {\n\tvar _table$nodeAt;\n\tconst headerCell = tableNodeTypes(table.type.schema).header_cell;\n\tfor (let col = 0; col < map.width; col++) if (((_table$nodeAt = table.nodeAt(map.map[col + row * map.width])) === null || _table$nodeAt === void 0 ? void 0 : _table$nodeAt.type) != headerCell) return false;\n\treturn true;\n}\n/**\n* @public\n*/\nfunction addRow(tr, { map, tableStart, table }, row) {\n\tlet rowPos = tableStart;\n\tfor (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize;\n\tconst cells = [];\n\tlet refRow = row > 0 ? -1 : 0;\n\tif (rowIsHeader(map, table, row + refRow)) refRow = row == 0 || row == map.height ? null : 0;\n\tfor (let col = 0, index = map.width * row; col < map.width; col++, index++) if (row > 0 && row < map.height && map.map[index] == map.map[index - map.width]) {\n\t\tconst pos = map.map[index];\n\t\tconst attrs = table.nodeAt(pos).attrs;\n\t\ttr.setNodeMarkup(tableStart + pos, null, {\n\t\t\t...attrs,\n\t\t\trowspan: attrs.rowspan + 1\n\t\t});\n\t\tcol += attrs.colspan - 1;\n\t} else {\n\t\tvar _table$nodeAt2;\n\t\tconst type = refRow == null ? tableNodeTypes(table.type.schema).cell : (_table$nodeAt2 = table.nodeAt(map.map[index + refRow * map.width])) === null || _table$nodeAt2 === void 0 ? void 0 : _table$nodeAt2.type;\n\t\tconst node = type === null || type === void 0 ? void 0 : type.createAndFill();\n\t\tif (node) cells.push(node);\n\t}\n\ttr.insert(rowPos, tableNodeTypes(table.type.schema).row.create(null, cells));\n\treturn tr;\n}\n/**\n* Add a table row before the selection.\n*\n* @public\n*/\nfunction addRowBefore(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addRow(state.tr, rect, rect.top));\n\t}\n\treturn true;\n}\n/**\n* Add a table row after the selection.\n*\n* @public\n*/\nfunction addRowAfter(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addRow(state.tr, rect, rect.bottom));\n\t}\n\treturn true;\n}\n/**\n* @public\n*/\nfunction removeRow(tr, { map, table, tableStart }, row) {\n\tlet rowPos = 0;\n\tfor (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize;\n\tconst nextRow = rowPos + table.child(row).nodeSize;\n\tconst mapFrom = tr.mapping.maps.length;\n\ttr.delete(rowPos + tableStart, nextRow + tableStart);\n\tconst seen = /* @__PURE__ */ new Set();\n\tfor (let col = 0, index = row * map.width; col < map.width; col++, index++) {\n\t\tconst pos = map.map[index];\n\t\tif (seen.has(pos)) continue;\n\t\tseen.add(pos);\n\t\tif (row > 0 && pos == map.map[index - map.width]) {\n\t\t\tconst attrs = table.nodeAt(pos).attrs;\n\t\t\ttr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + tableStart), null, {\n\t\t\t\t...attrs,\n\t\t\t\trowspan: attrs.rowspan - 1\n\t\t\t});\n\t\t\tcol += attrs.colspan - 1;\n\t\t} else if (row < map.height && pos == map.map[index + map.width]) {\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tconst attrs = cell.attrs;\n\t\t\tconst copy = cell.type.create({\n\t\t\t\t...attrs,\n\t\t\t\trowspan: cell.attrs.rowspan - 1\n\t\t\t}, cell.content);\n\t\t\tconst newPos = map.positionAt(row + 1, col, table);\n\t\t\ttr.insert(tr.mapping.slice(mapFrom).map(tableStart + newPos), copy);\n\t\t\tcol += attrs.colspan - 1;\n\t\t}\n\t}\n}\n/**\n* Remove the selected rows from a table.\n*\n* @public\n*/\nfunction deleteRow(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\tif (rect.top == 0 && rect.bottom == rect.map.height) return false;\n\t\tfor (let i = rect.bottom - 1;; i--) {\n\t\t\tremoveRow(tr, rect, i);\n\t\t\tif (i == rect.top) break;\n\t\t\tconst table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n\t\t\tif (!table) throw new RangeError(\"No table found\");\n\t\t\trect.table = table;\n\t\t\trect.map = TableMap.get(rect.table);\n\t\t}\n\t\tdispatch(tr);\n\t}\n\treturn true;\n}\nfunction isEmpty(cell) {\n\tconst c = cell.content;\n\treturn c.childCount == 1 && c.child(0).isTextblock && c.child(0).childCount == 0;\n}\nfunction cellsOverlapRectangle({ width, height, map }, rect) {\n\tlet indexTop = rect.top * width + rect.left, indexLeft = indexTop;\n\tlet indexBottom = (rect.bottom - 1) * width + rect.left, indexRight = indexTop + (rect.right - rect.left - 1);\n\tfor (let i = rect.top; i < rect.bottom; i++) {\n\t\tif (rect.left > 0 && map[indexLeft] == map[indexLeft - 1] || rect.right < width && map[indexRight] == map[indexRight + 1]) return true;\n\t\tindexLeft += width;\n\t\tindexRight += width;\n\t}\n\tfor (let i = rect.left; i < rect.right; i++) {\n\t\tif (rect.top > 0 && map[indexTop] == map[indexTop - width] || rect.bottom < height && map[indexBottom] == map[indexBottom + width]) return true;\n\t\tindexTop++;\n\t\tindexBottom++;\n\t}\n\treturn false;\n}\n/**\n* Merge the selected cells into a single cell. Only available when\n* the selected cells' outline forms a rectangle.\n*\n* @public\n*/\nfunction mergeCells(state, dispatch) {\n\tconst sel = state.selection;\n\tif (!(sel instanceof CellSelection) || sel.$anchorCell.pos == sel.$headCell.pos) return false;\n\tconst rect = selectedRect(state), { map } = rect;\n\tif (cellsOverlapRectangle(map, rect)) return false;\n\tif (dispatch) {\n\t\tconst tr = state.tr;\n\t\tconst seen = {};\n\t\tlet content = Fragment.empty;\n\t\tlet mergedPos;\n\t\tlet mergedCell;\n\t\tfor (let row = rect.top; row < rect.bottom; row++) for (let col = rect.left; col < rect.right; col++) {\n\t\t\tconst cellPos = map.map[row * map.width + col];\n\t\t\tconst cell = rect.table.nodeAt(cellPos);\n\t\t\tif (seen[cellPos] || !cell) continue;\n\t\t\tseen[cellPos] = true;\n\t\t\tif (mergedPos == null) {\n\t\t\t\tmergedPos = cellPos;\n\t\t\t\tmergedCell = cell;\n\t\t\t} else {\n\t\t\t\tif (!isEmpty(cell)) content = content.append(cell.content);\n\t\t\t\tconst mapped = tr.mapping.map(cellPos + rect.tableStart);\n\t\t\t\ttr.delete(mapped, mapped + cell.nodeSize);\n\t\t\t}\n\t\t}\n\t\tif (mergedPos == null || mergedCell == null) return true;\n\t\ttr.setNodeMarkup(mergedPos + rect.tableStart, null, {\n\t\t\t...addColSpan(mergedCell.attrs, mergedCell.attrs.colspan, rect.right - rect.left - mergedCell.attrs.colspan),\n\t\t\trowspan: rect.bottom - rect.top\n\t\t});\n\t\tif (content.size > 0) {\n\t\t\tconst end = mergedPos + 1 + mergedCell.content.size;\n\t\t\tconst start = isEmpty(mergedCell) ? mergedPos + 1 : end;\n\t\t\ttr.replaceWith(start + rect.tableStart, end + rect.tableStart, content);\n\t\t}\n\t\ttr.setSelection(new CellSelection(tr.doc.resolve(mergedPos + rect.tableStart)));\n\t\tdispatch(tr);\n\t}\n\treturn true;\n}\n/**\n* Split a selected cell, whose rowpan or colspan is greater than one,\n* into smaller cells. Use the first cell type for the new cells.\n*\n* @public\n*/\nfunction splitCell(state, dispatch) {\n\tconst nodeTypes = tableNodeTypes(state.schema);\n\treturn splitCellWithType(({ node }) => {\n\t\treturn nodeTypes[node.type.spec.tableRole];\n\t})(state, dispatch);\n}\n/**\n* Split a selected cell, whose rowpan or colspan is greater than one,\n* into smaller cells with the cell type (th, td) returned by getType function.\n*\n* @public\n*/\nfunction splitCellWithType(getCellType) {\n\treturn (state, dispatch) => {\n\t\tconst sel = state.selection;\n\t\tlet cellNode;\n\t\tlet cellPos;\n\t\tif (!(sel instanceof CellSelection)) {\n\t\t\tvar _cellAround;\n\t\t\tcellNode = cellWrapping(sel.$from);\n\t\t\tif (!cellNode) return false;\n\t\t\tcellPos = (_cellAround = cellAround(sel.$from)) === null || _cellAround === void 0 ? void 0 : _cellAround.pos;\n\t\t} else {\n\t\t\tif (sel.$anchorCell.pos != sel.$headCell.pos) return false;\n\t\t\tcellNode = sel.$anchorCell.nodeAfter;\n\t\t\tcellPos = sel.$anchorCell.pos;\n\t\t}\n\t\tif (cellNode == null || cellPos == null) return false;\n\t\tif (cellNode.attrs.colspan == 1 && cellNode.attrs.rowspan == 1) return false;\n\t\tif (dispatch) {\n\t\t\tlet baseAttrs = cellNode.attrs;\n\t\t\tconst attrs = [];\n\t\t\tconst colwidth = baseAttrs.colwidth;\n\t\t\tif (baseAttrs.rowspan > 1) baseAttrs = {\n\t\t\t\t...baseAttrs,\n\t\t\t\trowspan: 1\n\t\t\t};\n\t\t\tif (baseAttrs.colspan > 1) baseAttrs = {\n\t\t\t\t...baseAttrs,\n\t\t\t\tcolspan: 1\n\t\t\t};\n\t\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\t\tfor (let i = 0; i < rect.right - rect.left; i++) attrs.push(colwidth ? {\n\t\t\t\t...baseAttrs,\n\t\t\t\tcolwidth: colwidth && colwidth[i] ? [colwidth[i]] : null\n\t\t\t} : baseAttrs);\n\t\t\tlet lastCell;\n\t\t\tfor (let row = rect.top; row < rect.bottom; row++) {\n\t\t\t\tlet pos = rect.map.positionAt(row, rect.left, rect.table);\n\t\t\t\tif (row == rect.top) pos += cellNode.nodeSize;\n\t\t\t\tfor (let col = rect.left, i = 0; col < rect.right; col++, i++) {\n\t\t\t\t\tif (col == rect.left && row == rect.top) continue;\n\t\t\t\t\ttr.insert(lastCell = tr.mapping.map(pos + rect.tableStart, 1), getCellType({\n\t\t\t\t\t\tnode: cellNode,\n\t\t\t\t\t\trow,\n\t\t\t\t\t\tcol\n\t\t\t\t\t}).createAndFill(attrs[i]));\n\t\t\t\t}\n\t\t\t}\n\t\t\ttr.setNodeMarkup(cellPos, getCellType({\n\t\t\t\tnode: cellNode,\n\t\t\t\trow: rect.top,\n\t\t\t\tcol: rect.left\n\t\t\t}), attrs[0]);\n\t\t\tif (sel instanceof CellSelection) tr.setSelection(new CellSelection(tr.doc.resolve(sel.$anchorCell.pos), lastCell ? tr.doc.resolve(lastCell) : void 0));\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\n/**\n* Returns a command that sets the given attribute to the given value,\n* and is only available when the currently selected cell doesn't\n* already have that attribute set to that value.\n*\n* @public\n*/\nfunction setCellAttr(name, value) {\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tconst $cell = selectionCell(state);\n\t\tif ($cell.nodeAfter.attrs[name] === value) return false;\n\t\tif (dispatch) {\n\t\t\tconst tr = state.tr;\n\t\t\tif (state.selection instanceof CellSelection) state.selection.forEachCell((node, pos) => {\n\t\t\t\tif (node.attrs[name] !== value) tr.setNodeMarkup(pos, null, {\n\t\t\t\t\t...node.attrs,\n\t\t\t\t\t[name]: value\n\t\t\t\t});\n\t\t\t});\n\t\t\telse tr.setNodeMarkup($cell.pos, null, {\n\t\t\t\t...$cell.nodeAfter.attrs,\n\t\t\t\t[name]: value\n\t\t\t});\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\nfunction deprecated_toggleHeader(type) {\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tif (dispatch) {\n\t\t\tconst types = tableNodeTypes(state.schema);\n\t\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\t\tconst cells = rect.map.cellsInRect(type == \"column\" ? {\n\t\t\t\tleft: rect.left,\n\t\t\t\ttop: 0,\n\t\t\t\tright: rect.right,\n\t\t\t\tbottom: rect.map.height\n\t\t\t} : type == \"row\" ? {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: rect.top,\n\t\t\t\tright: rect.map.width,\n\t\t\t\tbottom: rect.bottom\n\t\t\t} : rect);\n\t\t\tconst nodes = cells.map((pos) => rect.table.nodeAt(pos));\n\t\t\tfor (let i = 0; i < cells.length; i++) if (nodes[i].type == types.header_cell) tr.setNodeMarkup(rect.tableStart + cells[i], types.cell, nodes[i].attrs);\n\t\t\tif (tr.steps.length === 0) for (let i = 0; i < cells.length; i++) tr.setNodeMarkup(rect.tableStart + cells[i], types.header_cell, nodes[i].attrs);\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\nfunction isHeaderEnabledByType(type, rect, types) {\n\tconst cellPositions = rect.map.cellsInRect({\n\t\tleft: 0,\n\t\ttop: 0,\n\t\tright: type == \"row\" ? rect.map.width : 1,\n\t\tbottom: type == \"column\" ? rect.map.height : 1\n\t});\n\tfor (let i = 0; i < cellPositions.length; i++) {\n\t\tconst cell = rect.table.nodeAt(cellPositions[i]);\n\t\tif (cell && cell.type !== types.header_cell) return false;\n\t}\n\treturn true;\n}\n/**\n* Toggles between row/column header and normal cells (Only applies to first row/column).\n* For deprecated behavior pass `useDeprecatedLogic` in options with true.\n*\n* @public\n*/\nfunction toggleHeader(type, options) {\n\toptions = options || { useDeprecatedLogic: false };\n\tif (options.useDeprecatedLogic) return deprecated_toggleHeader(type);\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tif (dispatch) {\n\t\t\tconst types = tableNodeTypes(state.schema);\n\t\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\t\tconst isHeaderRowEnabled = isHeaderEnabledByType(\"row\", rect, types);\n\t\t\tconst isHeaderColumnEnabled = isHeaderEnabledByType(\"column\", rect, types);\n\t\t\tconst selectionStartsAt = (type === \"column\" ? isHeaderRowEnabled : type === \"row\" ? isHeaderColumnEnabled : false) ? 1 : 0;\n\t\t\tconst cellsRect = type == \"column\" ? {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: selectionStartsAt,\n\t\t\t\tright: 1,\n\t\t\t\tbottom: rect.map.height\n\t\t\t} : type == \"row\" ? {\n\t\t\t\tleft: selectionStartsAt,\n\t\t\t\ttop: 0,\n\t\t\t\tright: rect.map.width,\n\t\t\t\tbottom: 1\n\t\t\t} : rect;\n\t\t\tconst newType = type == \"column\" ? isHeaderColumnEnabled ? types.cell : types.header_cell : type == \"row\" ? isHeaderRowEnabled ? types.cell : types.header_cell : types.cell;\n\t\t\trect.map.cellsInRect(cellsRect).forEach((relativeCellPos) => {\n\t\t\t\tconst cellPos = relativeCellPos + rect.tableStart;\n\t\t\t\tconst cell = tr.doc.nodeAt(cellPos);\n\t\t\t\tif (cell) tr.setNodeMarkup(cellPos, newType, cell.attrs);\n\t\t\t});\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\n/**\n* Toggles whether the selected row contains header cells.\n*\n* @public\n*/\nconst toggleHeaderRow = toggleHeader(\"row\", { useDeprecatedLogic: true });\n/**\n* Toggles whether the selected column contains header cells.\n*\n* @public\n*/\nconst toggleHeaderColumn = toggleHeader(\"column\", { useDeprecatedLogic: true });\n/**\n* Toggles whether the selected cells are header cells.\n*\n* @public\n*/\nconst toggleHeaderCell = toggleHeader(\"cell\", { useDeprecatedLogic: true });\nfunction findNextCell($cell, dir) {\n\tif (dir < 0) {\n\t\tconst before = $cell.nodeBefore;\n\t\tif (before) return $cell.pos - before.nodeSize;\n\t\tfor (let row = $cell.index(-1) - 1, rowEnd = $cell.before(); row >= 0; row--) {\n\t\t\tconst rowNode = $cell.node(-1).child(row);\n\t\t\tconst lastChild = rowNode.lastChild;\n\t\t\tif (lastChild) return rowEnd - 1 - lastChild.nodeSize;\n\t\t\trowEnd -= rowNode.nodeSize;\n\t\t}\n\t} else {\n\t\tif ($cell.index() < $cell.parent.childCount - 1) return $cell.pos + $cell.nodeAfter.nodeSize;\n\t\tconst table = $cell.node(-1);\n\t\tfor (let row = $cell.indexAfter(-1), rowStart = $cell.after(); row < table.childCount; row++) {\n\t\t\tconst rowNode = table.child(row);\n\t\t\tif (rowNode.childCount) return rowStart + 1;\n\t\t\trowStart += rowNode.nodeSize;\n\t\t}\n\t}\n\treturn null;\n}\n/**\n* Returns a command for selecting the next (direction=1) or previous\n* (direction=-1) cell in a table.\n*\n* @public\n*/\nfunction goToNextCell(direction) {\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tconst cell = findNextCell(selectionCell(state), direction);\n\t\tif (cell == null) return false;\n\t\tif (dispatch) {\n\t\t\tconst $cell = state.doc.resolve(cell);\n\t\t\tdispatch(state.tr.setSelection(TextSelection.between($cell, moveCellForward($cell))).scrollIntoView());\n\t\t}\n\t\treturn true;\n\t};\n}\n/**\n* Deletes the table around the selection, if any.\n*\n* @public\n*/\nfunction deleteTable(state, dispatch) {\n\tconst $pos = state.selection.$anchor;\n\tfor (let d = $pos.depth; d > 0; d--) if ($pos.node(d).type.spec.tableRole == \"table\") {\n\t\tif (dispatch) dispatch(state.tr.delete($pos.before(d), $pos.after(d)).scrollIntoView());\n\t\treturn true;\n\t}\n\treturn false;\n}\n/**\n* Deletes the content of the selected cells, if they are not empty.\n*\n* @public\n*/\nfunction deleteCellSelection(state, dispatch) {\n\tconst sel = state.selection;\n\tif (!(sel instanceof CellSelection)) return false;\n\tif (dispatch) {\n\t\tconst tr = state.tr;\n\t\tconst baseContent = tableNodeTypes(state.schema).cell.createAndFill().content;\n\t\tsel.forEachCell((cell, pos) => {\n\t\t\tif (!cell.content.eq(baseContent)) tr.replace(tr.mapping.map(pos + 1), tr.mapping.map(pos + cell.nodeSize - 1), new Slice(baseContent, 0, 0));\n\t\t});\n\t\tif (tr.docChanged) dispatch(tr);\n\t}\n\treturn true;\n}\n/**\n* Move a table row from index `from` to index `to`.\n*\n* @public\n*/\nfunction moveTableRow(options) {\n\treturn (state, dispatch) => {\n\t\tconst { from: originIndex, to: targetIndex, select = true, pos = state.selection.from } = options;\n\t\tconst tr = state.tr;\n\t\tif (moveRow({\n\t\t\ttr,\n\t\t\toriginIndex,\n\t\t\ttargetIndex,\n\t\t\tselect,\n\t\t\tpos\n\t\t})) {\n\t\t\tdispatch === null || dispatch === void 0 || dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n}\n/**\n* Move a table column from index `from` to index `to`.\n*\n* @public\n*/\nfunction moveTableColumn(options) {\n\treturn (state, dispatch) => {\n\t\tconst { from: originIndex, to: targetIndex, select = true, pos = state.selection.from } = options;\n\t\tconst tr = state.tr;\n\t\tif (moveColumn({\n\t\t\ttr,\n\t\t\toriginIndex,\n\t\t\ttargetIndex,\n\t\t\tselect,\n\t\t\tpos\n\t\t})) {\n\t\t\tdispatch === null || dispatch === void 0 || dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n}\n\n//#endregion\n//#region src/copypaste.ts\n/**\n* Get a rectangular area of cells from a slice, or null if the outer\n* nodes of the slice aren't table cells or rows.\n*\n* @internal\n*/\nfunction pastedCells(slice) {\n\tif (slice.size === 0) return null;\n\tlet { content, openStart, openEnd } = slice;\n\twhile (content.childCount == 1 && (openStart > 0 && openEnd > 0 || content.child(0).type.spec.tableRole == \"table\")) {\n\t\topenStart--;\n\t\topenEnd--;\n\t\tcontent = content.child(0).content;\n\t}\n\tconst first = content.child(0);\n\tconst role = first.type.spec.tableRole;\n\tconst schema = first.type.schema, rows = [];\n\tif (role == \"row\") for (let i = 0; i < content.childCount; i++) {\n\t\tlet cells = content.child(i).content;\n\t\tconst left = i ? 0 : Math.max(0, openStart - 1);\n\t\tconst right = i < content.childCount - 1 ? 0 : Math.max(0, openEnd - 1);\n\t\tif (left || right) cells = fitSlice(tableNodeTypes(schema).row, new Slice(cells, left, right)).content;\n\t\trows.push(cells);\n\t}\n\telse if (role == \"cell\" || role == \"header_cell\") rows.push(openStart || openEnd ? fitSlice(tableNodeTypes(schema).row, new Slice(content, openStart, openEnd)).content : content);\n\telse return null;\n\treturn ensureRectangular(schema, rows);\n}\nfunction ensureRectangular(schema, rows) {\n\tconst widths = [];\n\tfor (let i = 0; i < rows.length; i++) {\n\t\tconst row = rows[i];\n\t\tfor (let j = row.childCount - 1; j >= 0; j--) {\n\t\t\tconst { rowspan, colspan } = row.child(j).attrs;\n\t\t\tfor (let r = i; r < i + rowspan; r++) widths[r] = (widths[r] || 0) + colspan;\n\t\t}\n\t}\n\tlet width = 0;\n\tfor (let r = 0; r < widths.length; r++) width = Math.max(width, widths[r]);\n\tfor (let r = 0; r < widths.length; r++) {\n\t\tif (r >= rows.length) rows.push(Fragment.empty);\n\t\tif (widths[r] < width) {\n\t\t\tconst empty = tableNodeTypes(schema).cell.createAndFill();\n\t\t\tconst cells = [];\n\t\t\tfor (let i = widths[r]; i < width; i++) cells.push(empty);\n\t\t\trows[r] = rows[r].append(Fragment.from(cells));\n\t\t}\n\t}\n\treturn {\n\t\theight: rows.length,\n\t\twidth,\n\t\trows\n\t};\n}\nfunction fitSlice(nodeType, slice) {\n\tconst node = nodeType.createAndFill();\n\treturn new Transform(node).replace(0, node.content.size, slice).doc;\n}\n/**\n* Clip or extend (repeat) the given set of cells to cover the given\n* width and height. Will clip rowspan/colspan cells at the edges when\n* they stick out.\n*\n* @internal\n*/\nfunction clipCells({ width, height, rows }, newWidth, newHeight) {\n\tif (width != newWidth) {\n\t\tconst added = [];\n\t\tconst newRows = [];\n\t\tfor (let row = 0; row < rows.length; row++) {\n\t\t\tconst frag = rows[row], cells = [];\n\t\t\tfor (let col = added[row] || 0, i = 0; col < newWidth; i++) {\n\t\t\t\tlet cell = frag.child(i % frag.childCount);\n\t\t\t\tif (col + cell.attrs.colspan > newWidth) cell = cell.type.createChecked(removeColSpan(cell.attrs, cell.attrs.colspan, col + cell.attrs.colspan - newWidth), cell.content);\n\t\t\t\tcells.push(cell);\n\t\t\t\tcol += cell.attrs.colspan;\n\t\t\t\tfor (let j = 1; j < cell.attrs.rowspan; j++) added[row + j] = (added[row + j] || 0) + cell.attrs.colspan;\n\t\t\t}\n\t\t\tnewRows.push(Fragment.from(cells));\n\t\t}\n\t\trows = newRows;\n\t\twidth = newWidth;\n\t}\n\tif (height != newHeight) {\n\t\tconst newRows = [];\n\t\tfor (let row = 0, i = 0; row < newHeight; row++, i++) {\n\t\t\tconst cells = [], source = rows[i % height];\n\t\t\tfor (let j = 0; j < source.childCount; j++) {\n\t\t\t\tlet cell = source.child(j);\n\t\t\t\tif (row + cell.attrs.rowspan > newHeight) cell = cell.type.create({\n\t\t\t\t\t...cell.attrs,\n\t\t\t\t\trowspan: Math.max(1, newHeight - cell.attrs.rowspan)\n\t\t\t\t}, cell.content);\n\t\t\t\tcells.push(cell);\n\t\t\t}\n\t\t\tnewRows.push(Fragment.from(cells));\n\t\t}\n\t\trows = newRows;\n\t\theight = newHeight;\n\t}\n\treturn {\n\t\twidth,\n\t\theight,\n\t\trows\n\t};\n}\nfunction growTable(tr, map, table, start, width, height, mapFrom) {\n\tconst schema = tr.doc.type.schema;\n\tconst types = tableNodeTypes(schema);\n\tlet empty;\n\tlet emptyHead;\n\tif (width > map.width) for (let row = 0, rowEnd = 0; row < map.height; row++) {\n\t\tconst rowNode = table.child(row);\n\t\trowEnd += rowNode.nodeSize;\n\t\tconst cells = [];\n\t\tlet add;\n\t\tif (rowNode.lastChild == null || rowNode.lastChild.type == types.cell) add = empty || (empty = types.cell.createAndFill());\n\t\telse add = emptyHead || (emptyHead = types.header_cell.createAndFill());\n\t\tfor (let i = map.width; i < width; i++) cells.push(add);\n\t\ttr.insert(tr.mapping.slice(mapFrom).map(rowEnd - 1 + start), cells);\n\t}\n\tif (height > map.height) {\n\t\tconst cells = [];\n\t\tfor (let i = 0, start$1 = (map.height - 1) * map.width; i < Math.max(map.width, width); i++) {\n\t\t\tconst header = i >= map.width ? false : table.nodeAt(map.map[start$1 + i]).type == types.header_cell;\n\t\t\tcells.push(header ? emptyHead || (emptyHead = types.header_cell.createAndFill()) : empty || (empty = types.cell.createAndFill()));\n\t\t}\n\t\tconst emptyRow = types.row.create(null, Fragment.from(cells)), rows = [];\n\t\tfor (let i = map.height; i < height; i++) rows.push(emptyRow);\n\t\ttr.insert(tr.mapping.slice(mapFrom).map(start + table.nodeSize - 2), rows);\n\t}\n\treturn !!(empty || emptyHead);\n}\nfunction isolateHorizontal(tr, map, table, start, left, right, top, mapFrom) {\n\tif (top == 0 || top == map.height) return false;\n\tlet found = false;\n\tfor (let col = left; col < right; col++) {\n\t\tconst index = top * map.width + col, pos = map.map[index];\n\t\tif (map.map[index - map.width] == pos) {\n\t\t\tfound = true;\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tconst { top: cellTop, left: cellLeft } = map.findCell(pos);\n\t\t\ttr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + start), null, {\n\t\t\t\t...cell.attrs,\n\t\t\t\trowspan: top - cellTop\n\t\t\t});\n\t\t\ttr.insert(tr.mapping.slice(mapFrom).map(map.positionAt(top, cellLeft, table)), cell.type.createAndFill({\n\t\t\t\t...cell.attrs,\n\t\t\t\trowspan: cellTop + cell.attrs.rowspan - top\n\t\t\t}));\n\t\t\tcol += cell.attrs.colspan - 1;\n\t\t}\n\t}\n\treturn found;\n}\nfunction isolateVertical(tr, map, table, start, top, bottom, left, mapFrom) {\n\tif (left == 0 || left == map.width) return false;\n\tlet found = false;\n\tfor (let row = top; row < bottom; row++) {\n\t\tconst index = row * map.width + left, pos = map.map[index];\n\t\tif (map.map[index - 1] == pos) {\n\t\t\tfound = true;\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tconst cellLeft = map.colCount(pos);\n\t\t\tconst updatePos = tr.mapping.slice(mapFrom).map(pos + start);\n\t\t\ttr.setNodeMarkup(updatePos, null, removeColSpan(cell.attrs, left - cellLeft, cell.attrs.colspan - (left - cellLeft)));\n\t\t\ttr.insert(updatePos + cell.nodeSize, cell.type.createAndFill(removeColSpan(cell.attrs, 0, left - cellLeft)));\n\t\t\trow += cell.attrs.rowspan - 1;\n\t\t}\n\t}\n\treturn found;\n}\n/**\n* Insert the given set of cells (as returned by `pastedCells`) into a\n* table, at the position pointed at by rect.\n*\n* @internal\n*/\nfunction insertCells(state, dispatch, tableStart, rect, cells) {\n\tlet table = tableStart ? state.doc.nodeAt(tableStart - 1) : state.doc;\n\tif (!table) throw new Error(\"No table found\");\n\tlet map = TableMap.get(table);\n\tconst { top, left } = rect;\n\tconst right = left + cells.width, bottom = top + cells.height;\n\tconst tr = state.tr;\n\tlet mapFrom = 0;\n\tfunction recomp() {\n\t\ttable = tableStart ? tr.doc.nodeAt(tableStart - 1) : tr.doc;\n\t\tif (!table) throw new Error(\"No table found\");\n\t\tmap = TableMap.get(table);\n\t\tmapFrom = tr.mapping.maps.length;\n\t}\n\tif (growTable(tr, map, table, tableStart, right, bottom, mapFrom)) recomp();\n\tif (isolateHorizontal(tr, map, table, tableStart, left, right, top, mapFrom)) recomp();\n\tif (isolateHorizontal(tr, map, table, tableStart, left, right, bottom, mapFrom)) recomp();\n\tif (isolateVertical(tr, map, table, tableStart, top, bottom, left, mapFrom)) recomp();\n\tif (isolateVertical(tr, map, table, tableStart, top, bottom, right, mapFrom)) recomp();\n\tfor (let row = top; row < bottom; row++) {\n\t\tconst from = map.positionAt(row, left, table), to = map.positionAt(row, right, table);\n\t\ttr.replace(tr.mapping.slice(mapFrom).map(from + tableStart), tr.mapping.slice(mapFrom).map(to + tableStart), new Slice(cells.rows[row - top], 0, 0));\n\t}\n\trecomp();\n\ttr.setSelection(new CellSelection(tr.doc.resolve(tableStart + map.positionAt(top, left, table)), tr.doc.resolve(tableStart + map.positionAt(bottom - 1, right - 1, table))));\n\tdispatch(tr);\n}\n\n//#endregion\n//#region src/input.ts\nconst handleKeyDown = keydownHandler({\n\tArrowLeft: arrow(\"horiz\", -1),\n\tArrowRight: arrow(\"horiz\", 1),\n\tArrowUp: arrow(\"vert\", -1),\n\tArrowDown: arrow(\"vert\", 1),\n\t\"Shift-ArrowLeft\": shiftArrow(\"horiz\", -1),\n\t\"Shift-ArrowRight\": shiftArrow(\"horiz\", 1),\n\t\"Shift-ArrowUp\": shiftArrow(\"vert\", -1),\n\t\"Shift-ArrowDown\": shiftArrow(\"vert\", 1),\n\tBackspace: deleteCellSelection,\n\t\"Mod-Backspace\": deleteCellSelection,\n\tDelete: deleteCellSelection,\n\t\"Mod-Delete\": deleteCellSelection\n});\nfunction maybeSetSelection(state, dispatch, selection) {\n\tif (selection.eq(state.selection)) return false;\n\tif (dispatch) dispatch(state.tr.setSelection(selection).scrollIntoView());\n\treturn true;\n}\n/**\n* @internal\n*/\nfunction arrow(axis, dir) {\n\treturn (state, dispatch, view) => {\n\t\tif (!view) return false;\n\t\tconst sel = state.selection;\n\t\tif (sel instanceof CellSelection) return maybeSetSelection(state, dispatch, Selection.near(sel.$headCell, dir));\n\t\tif (axis != \"horiz\" && !sel.empty) return false;\n\t\tconst end = atEndOfCell(view, axis, dir);\n\t\tif (end == null) return false;\n\t\tif (axis == \"horiz\") return maybeSetSelection(state, dispatch, Selection.near(state.doc.resolve(sel.head + dir), dir));\n\t\telse {\n\t\t\tconst $cell = state.doc.resolve(end);\n\t\t\tconst $next = nextCell($cell, axis, dir);\n\t\t\tlet newSel;\n\t\t\tif ($next) newSel = Selection.near($next, 1);\n\t\t\telse if (dir < 0) newSel = Selection.near(state.doc.resolve($cell.before(-1)), -1);\n\t\t\telse newSel = Selection.near(state.doc.resolve($cell.after(-1)), 1);\n\t\t\treturn maybeSetSelection(state, dispatch, newSel);\n\t\t}\n\t};\n}\nfunction shiftArrow(axis, dir) {\n\treturn (state, dispatch, view) => {\n\t\tif (!view) return false;\n\t\tconst sel = state.selection;\n\t\tlet cellSel;\n\t\tif (sel instanceof CellSelection) cellSel = sel;\n\t\telse {\n\t\t\tconst end = atEndOfCell(view, axis, dir);\n\t\t\tif (end == null) return false;\n\t\t\tcellSel = new CellSelection(state.doc.resolve(end));\n\t\t}\n\t\tconst $head = nextCell(cellSel.$headCell, axis, dir);\n\t\tif (!$head) return false;\n\t\treturn maybeSetSelection(state, dispatch, new CellSelection(cellSel.$anchorCell, $head));\n\t};\n}\nfunction handleTripleClick(view, pos) {\n\tconst doc = view.state.doc, $cell = cellAround(doc.resolve(pos));\n\tif (!$cell) return false;\n\tview.dispatch(view.state.tr.setSelection(new CellSelection($cell)));\n\treturn true;\n}\n/**\n* @public\n*/\nfunction handlePaste(view, _, slice) {\n\tif (!isInTable(view.state)) return false;\n\tlet cells = pastedCells(slice);\n\tconst sel = view.state.selection;\n\tif (sel instanceof CellSelection) {\n\t\tif (!cells) cells = {\n\t\t\twidth: 1,\n\t\t\theight: 1,\n\t\t\trows: [Fragment.from(fitSlice(tableNodeTypes(view.state.schema).cell, slice))]\n\t\t};\n\t\tconst table = sel.$anchorCell.node(-1);\n\t\tconst start = sel.$anchorCell.start(-1);\n\t\tconst rect = TableMap.get(table).rectBetween(sel.$anchorCell.pos - start, sel.$headCell.pos - start);\n\t\tcells = clipCells(cells, rect.right - rect.left, rect.bottom - rect.top);\n\t\tinsertCells(view.state, view.dispatch, start, rect, cells);\n\t\treturn true;\n\t} else if (cells) {\n\t\tconst $cell = selectionCell(view.state);\n\t\tconst start = $cell.start(-1);\n\t\tinsertCells(view.state, view.dispatch, start, TableMap.get($cell.node(-1)).findCell($cell.pos - start), cells);\n\t\treturn true;\n\t} else return false;\n}\nfunction handleMouseDown$1(view, startEvent) {\n\tvar _cellUnderMouse;\n\tif (startEvent.button != 0) return;\n\tif (startEvent.ctrlKey || startEvent.metaKey) return;\n\tconst startDOMCell = domInCell(view, startEvent.target);\n\tlet $anchor;\n\tif (startEvent.shiftKey && view.state.selection instanceof CellSelection) {\n\t\tsetCellSelection(view.state.selection.$anchorCell, startEvent);\n\t\tstartEvent.preventDefault();\n\t} else if (startEvent.shiftKey && startDOMCell && ($anchor = cellAround(view.state.selection.$anchor)) != null && ((_cellUnderMouse = cellUnderMouse(view, startEvent)) === null || _cellUnderMouse === void 0 ? void 0 : _cellUnderMouse.pos) != $anchor.pos) {\n\t\tsetCellSelection($anchor, startEvent);\n\t\tstartEvent.preventDefault();\n\t} else if (!startDOMCell) return;\n\tfunction setCellSelection($anchor$1, event) {\n\t\tlet $head = cellUnderMouse(view, event);\n\t\tconst starting = tableEditingKey.getState(view.state) == null;\n\t\tif (!$head || !inSameTable($anchor$1, $head)) if (starting) $head = $anchor$1;\n\t\telse return;\n\t\tconst selection = new CellSelection($anchor$1, $head);\n\t\tif (starting || !view.state.selection.eq(selection)) {\n\t\t\tconst tr = view.state.tr.setSelection(selection);\n\t\t\tif (starting) tr.setMeta(tableEditingKey, $anchor$1.pos);\n\t\t\tview.dispatch(tr);\n\t\t}\n\t}\n\tfunction stop() {\n\t\tview.root.removeEventListener(\"mouseup\", stop);\n\t\tview.root.removeEventListener(\"dragstart\", stop);\n\t\tview.root.removeEventListener(\"mousemove\", move);\n\t\tif (tableEditingKey.getState(view.state) != null) view.dispatch(view.state.tr.setMeta(tableEditingKey, -1));\n\t}\n\tfunction move(_event) {\n\t\tconst event = _event;\n\t\tconst anchor = tableEditingKey.getState(view.state);\n\t\tlet $anchor$1;\n\t\tif (anchor != null) $anchor$1 = view.state.doc.resolve(anchor);\n\t\telse if (domInCell(view, event.target) != startDOMCell) {\n\t\t\t$anchor$1 = cellUnderMouse(view, startEvent);\n\t\t\tif (!$anchor$1) return stop();\n\t\t}\n\t\tif ($anchor$1) setCellSelection($anchor$1, event);\n\t}\n\tview.root.addEventListener(\"mouseup\", stop);\n\tview.root.addEventListener(\"dragstart\", stop);\n\tview.root.addEventListener(\"mousemove\", move);\n}\nfunction atEndOfCell(view, axis, dir) {\n\tif (!(view.state.selection instanceof TextSelection)) return null;\n\tconst { $head } = view.state.selection;\n\tfor (let d = $head.depth - 1; d >= 0; d--) {\n\t\tconst parent = $head.node(d);\n\t\tif ((dir < 0 ? $head.index(d) : $head.indexAfter(d)) != (dir < 0 ? 0 : parent.childCount)) return null;\n\t\tif (parent.type.spec.tableRole == \"cell\" || parent.type.spec.tableRole == \"header_cell\") {\n\t\t\tconst cellPos = $head.before(d);\n\t\t\tconst dirStr = axis == \"vert\" ? dir > 0 ? \"down\" : \"up\" : dir > 0 ? \"right\" : \"left\";\n\t\t\treturn view.endOfTextblock(dirStr) ? cellPos : null;\n\t\t}\n\t}\n\treturn null;\n}\nfunction domInCell(view, dom) {\n\tfor (; dom && dom != view.dom; dom = dom.parentNode) if (dom.nodeName == \"TD\" || dom.nodeName == \"TH\") return dom;\n\treturn null;\n}\nfunction cellUnderMouse(view, event) {\n\tconst mousePos = view.posAtCoords({\n\t\tleft: event.clientX,\n\t\ttop: event.clientY\n\t});\n\tif (!mousePos) return null;\n\tlet { inside, pos } = mousePos;\n\treturn inside >= 0 && cellAround(view.state.doc.resolve(inside)) || cellAround(view.state.doc.resolve(pos));\n}\n\n//#endregion\n//#region src/tableview.ts\n/**\n* @public\n*/\nvar TableView = class {\n\tconstructor(node, defaultCellMinWidth) {\n\t\tthis.node = node;\n\t\tthis.defaultCellMinWidth = defaultCellMinWidth;\n\t\tthis.dom = document.createElement(\"div\");\n\t\tthis.dom.className = \"tableWrapper\";\n\t\tthis.table = this.dom.appendChild(document.createElement(\"table\"));\n\t\tthis.table.style.setProperty(\"--default-cell-min-width\", `${defaultCellMinWidth}px`);\n\t\tthis.colgroup = this.table.appendChild(document.createElement(\"colgroup\"));\n\t\tupdateColumnsOnResize(node, this.colgroup, this.table, defaultCellMinWidth);\n\t\tthis.contentDOM = this.table.appendChild(document.createElement(\"tbody\"));\n\t}\n\tupdate(node) {\n\t\tif (node.type != this.node.type) return false;\n\t\tthis.node = node;\n\t\tupdateColumnsOnResize(node, this.colgroup, this.table, this.defaultCellMinWidth);\n\t\treturn true;\n\t}\n\tignoreMutation(record) {\n\t\treturn record.type == \"attributes\" && (record.target == this.table || this.colgroup.contains(record.target));\n\t}\n};\n/**\n* @public\n*/\nfunction updateColumnsOnResize(node, colgroup, table, defaultCellMinWidth, overrideCol, overrideValue) {\n\tlet totalWidth = 0;\n\tlet fixedWidth = true;\n\tlet nextDOM = colgroup.firstChild;\n\tconst row = node.firstChild;\n\tif (!row) return;\n\tfor (let i = 0, col = 0; i < row.childCount; i++) {\n\t\tconst { colspan, colwidth } = row.child(i).attrs;\n\t\tfor (let j = 0; j < colspan; j++, col++) {\n\t\t\tconst hasWidth = overrideCol == col ? overrideValue : colwidth && colwidth[j];\n\t\t\tconst cssWidth = hasWidth ? hasWidth + \"px\" : \"\";\n\t\t\ttotalWidth += hasWidth || defaultCellMinWidth;\n\t\t\tif (!hasWidth) fixedWidth = false;\n\t\t\tif (!nextDOM) {\n\t\t\t\tconst col$1 = document.createElement(\"col\");\n\t\t\t\tcol$1.style.width = cssWidth;\n\t\t\t\tcolgroup.appendChild(col$1);\n\t\t\t} else {\n\t\t\t\tif (nextDOM.style.width != cssWidth) nextDOM.style.width = cssWidth;\n\t\t\t\tnextDOM = nextDOM.nextSibling;\n\t\t\t}\n\t\t}\n\t}\n\twhile (nextDOM) {\n\t\tvar _nextDOM$parentNode;\n\t\tconst after = nextDOM.nextSibling;\n\t\t(_nextDOM$parentNode = nextDOM.parentNode) === null || _nextDOM$parentNode === void 0 || _nextDOM$parentNode.removeChild(nextDOM);\n\t\tnextDOM = after;\n\t}\n\tif (fixedWidth) {\n\t\ttable.style.width = totalWidth + \"px\";\n\t\ttable.style.minWidth = \"\";\n\t} else {\n\t\ttable.style.width = \"\";\n\t\ttable.style.minWidth = totalWidth + \"px\";\n\t}\n}\n\n//#endregion\n//#region src/columnresizing.ts\n/**\n* @public\n*/\nconst columnResizingPluginKey = new PluginKey(\"tableColumnResizing\");\n/**\n* @public\n*/\nfunction columnResizing({ handleWidth = 5, cellMinWidth = 25, defaultCellMinWidth = 100, View = TableView, lastColumnResizable = true } = {}) {\n\tconst plugin = new Plugin({\n\t\tkey: columnResizingPluginKey,\n\t\tstate: {\n\t\t\tinit(_, state) {\n\t\t\t\tvar _plugin$spec;\n\t\t\t\tconst nodeViews = (_plugin$spec = plugin.spec) === null || _plugin$spec === void 0 || (_plugin$spec = _plugin$spec.props) === null || _plugin$spec === void 0 ? void 0 : _plugin$spec.nodeViews;\n\t\t\t\tconst tableName = tableNodeTypes(state.schema).table.name;\n\t\t\t\tif (View && nodeViews) nodeViews[tableName] = (node, view) => {\n\t\t\t\t\treturn new View(node, defaultCellMinWidth, view);\n\t\t\t\t};\n\t\t\t\treturn new ResizeState(-1, false);\n\t\t\t},\n\t\t\tapply(tr, prev) {\n\t\t\t\treturn prev.apply(tr);\n\t\t\t}\n\t\t},\n\t\tprops: {\n\t\t\tattributes: (state) => {\n\t\t\t\tconst pluginState = columnResizingPluginKey.getState(state);\n\t\t\t\treturn pluginState && pluginState.activeHandle > -1 ? { class: \"resize-cursor\" } : {};\n\t\t\t},\n\t\t\thandleDOMEvents: {\n\t\t\t\tmousemove: (view, event) => {\n\t\t\t\t\thandleMouseMove(view, event, handleWidth, lastColumnResizable);\n\t\t\t\t},\n\t\t\t\tmouseleave: (view) => {\n\t\t\t\t\thandleMouseLeave(view);\n\t\t\t\t},\n\t\t\t\tmousedown: (view, event) => {\n\t\t\t\t\thandleMouseDown(view, event, cellMinWidth, defaultCellMinWidth);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdecorations: (state) => {\n\t\t\t\tconst pluginState = columnResizingPluginKey.getState(state);\n\t\t\t\tif (pluginState && pluginState.activeHandle > -1) return handleDecorations(state, pluginState.activeHandle);\n\t\t\t},\n\t\t\tnodeViews: {}\n\t\t}\n\t});\n\treturn plugin;\n}\n/**\n* @public\n*/\nvar ResizeState = class ResizeState {\n\tconstructor(activeHandle, dragging) {\n\t\tthis.activeHandle = activeHandle;\n\t\tthis.dragging = dragging;\n\t}\n\tapply(tr) {\n\t\tconst state = this;\n\t\tconst action = tr.getMeta(columnResizingPluginKey);\n\t\tif (action && action.setHandle != null) return new ResizeState(action.setHandle, false);\n\t\tif (action && action.setDragging !== void 0) return new ResizeState(state.activeHandle, action.setDragging);\n\t\tif (state.activeHandle > -1 && tr.docChanged) {\n\t\t\tlet handle = tr.mapping.map(state.activeHandle, -1);\n\t\t\tif (!pointsAtCell(tr.doc.resolve(handle))) handle = -1;\n\t\t\treturn new ResizeState(handle, state.dragging);\n\t\t}\n\t\treturn state;\n\t}\n};\nfunction handleMouseMove(view, event, handleWidth, lastColumnResizable) {\n\tif (!view.editable) return;\n\tconst pluginState = columnResizingPluginKey.getState(view.state);\n\tif (!pluginState) return;\n\tif (!pluginState.dragging) {\n\t\tconst target = domCellAround(event.target);\n\t\tlet cell = -1;\n\t\tif (target) {\n\t\t\tconst { left, right } = target.getBoundingClientRect();\n\t\t\tif (event.clientX - left <= handleWidth) cell = edgeCell(view, event, \"left\", handleWidth);\n\t\t\telse if (right - event.clientX <= handleWidth) cell = edgeCell(view, event, \"right\", handleWidth);\n\t\t}\n\t\tif (cell != pluginState.activeHandle) {\n\t\t\tif (!lastColumnResizable && cell !== -1) {\n\t\t\t\tconst $cell = view.state.doc.resolve(cell);\n\t\t\t\tconst table = $cell.node(-1);\n\t\t\t\tconst map = TableMap.get(table);\n\t\t\t\tconst tableStart = $cell.start(-1);\n\t\t\t\tif (map.colCount($cell.pos - tableStart) + $cell.nodeAfter.attrs.colspan - 1 == map.width - 1) return;\n\t\t\t}\n\t\t\tupdateHandle(view, cell);\n\t\t}\n\t}\n}\nfunction handleMouseLeave(view) {\n\tif (!view.editable) return;\n\tconst pluginState = columnResizingPluginKey.getState(view.state);\n\tif (pluginState && pluginState.activeHandle > -1 && !pluginState.dragging) updateHandle(view, -1);\n}\nfunction handleMouseDown(view, event, cellMinWidth, defaultCellMinWidth) {\n\tvar _view$dom$ownerDocume;\n\tif (!view.editable) return false;\n\tconst win = (_view$dom$ownerDocume = view.dom.ownerDocument.defaultView) !== null && _view$dom$ownerDocume !== void 0 ? _view$dom$ownerDocume : window;\n\tconst pluginState = columnResizingPluginKey.getState(view.state);\n\tif (!pluginState || pluginState.activeHandle == -1 || pluginState.dragging) return false;\n\tconst cell = view.state.doc.nodeAt(pluginState.activeHandle);\n\tconst width = currentColWidth(view, pluginState.activeHandle, cell.attrs);\n\tview.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setDragging: {\n\t\tstartX: event.clientX,\n\t\tstartWidth: width\n\t} }));\n\tfunction finish(event$1) {\n\t\twin.removeEventListener(\"mouseup\", finish);\n\t\twin.removeEventListener(\"mousemove\", move);\n\t\tconst pluginState$1 = columnResizingPluginKey.getState(view.state);\n\t\tif (pluginState$1 === null || pluginState$1 === void 0 ? void 0 : pluginState$1.dragging) {\n\t\t\tupdateColumnWidth(view, pluginState$1.activeHandle, draggedWidth(pluginState$1.dragging, event$1, cellMinWidth));\n\t\t\tview.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setDragging: null }));\n\t\t}\n\t}\n\tfunction move(event$1) {\n\t\tif (!event$1.which) return finish(event$1);\n\t\tconst pluginState$1 = columnResizingPluginKey.getState(view.state);\n\t\tif (!pluginState$1) return;\n\t\tif (pluginState$1.dragging) {\n\t\t\tconst dragged = draggedWidth(pluginState$1.dragging, event$1, cellMinWidth);\n\t\t\tdisplayColumnWidth(view, pluginState$1.activeHandle, dragged, defaultCellMinWidth);\n\t\t}\n\t}\n\tdisplayColumnWidth(view, pluginState.activeHandle, width, defaultCellMinWidth);\n\twin.addEventListener(\"mouseup\", finish);\n\twin.addEventListener(\"mousemove\", move);\n\tevent.preventDefault();\n\treturn true;\n}\nfunction currentColWidth(view, cellPos, { colspan, colwidth }) {\n\tconst width = colwidth && colwidth[colwidth.length - 1];\n\tif (width) return width;\n\tconst dom = view.domAtPos(cellPos);\n\tlet domWidth = dom.node.childNodes[dom.offset].offsetWidth, parts = colspan;\n\tif (colwidth) {\n\t\tfor (let i = 0; i < colspan; i++) if (colwidth[i]) {\n\t\t\tdomWidth -= colwidth[i];\n\t\t\tparts--;\n\t\t}\n\t}\n\treturn domWidth / parts;\n}\nfunction domCellAround(target) {\n\twhile (target && target.nodeName != \"TD\" && target.nodeName != \"TH\") target = target.classList && target.classList.contains(\"ProseMirror\") ? null : target.parentNode;\n\treturn target;\n}\nfunction edgeCell(view, event, side, handleWidth) {\n\tconst offset = side == \"right\" ? -handleWidth : handleWidth;\n\tconst found = view.posAtCoords({\n\t\tleft: event.clientX + offset,\n\t\ttop: event.clientY\n\t});\n\tif (!found) return -1;\n\tconst { pos } = found;\n\tconst $cell = cellAround(view.state.doc.resolve(pos));\n\tif (!$cell) return -1;\n\tif (side == \"right\") return $cell.pos;\n\tconst map = TableMap.get($cell.node(-1)), start = $cell.start(-1);\n\tconst index = map.map.indexOf($cell.pos - start);\n\treturn index % map.width == 0 ? -1 : start + map.map[index - 1];\n}\nfunction draggedWidth(dragging, event, resizeMinWidth) {\n\tconst offset = event.clientX - dragging.startX;\n\treturn Math.max(resizeMinWidth, dragging.startWidth + offset);\n}\nfunction updateHandle(view, value) {\n\tview.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setHandle: value }));\n}\nfunction updateColumnWidth(view, cell, width) {\n\tconst $cell = view.state.doc.resolve(cell);\n\tconst table = $cell.node(-1), map = TableMap.get(table), start = $cell.start(-1);\n\tconst col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n\tconst tr = view.state.tr;\n\tfor (let row = 0; row < map.height; row++) {\n\t\tconst mapIndex = row * map.width + col;\n\t\tif (row && map.map[mapIndex] == map.map[mapIndex - map.width]) continue;\n\t\tconst pos = map.map[mapIndex];\n\t\tconst attrs = table.nodeAt(pos).attrs;\n\t\tconst index = attrs.colspan == 1 ? 0 : col - map.colCount(pos);\n\t\tif (attrs.colwidth && attrs.colwidth[index] == width) continue;\n\t\tconst colwidth = attrs.colwidth ? attrs.colwidth.slice() : zeroes(attrs.colspan);\n\t\tcolwidth[index] = width;\n\t\ttr.setNodeMarkup(start + pos, null, {\n\t\t\t...attrs,\n\t\t\tcolwidth\n\t\t});\n\t}\n\tif (tr.docChanged) view.dispatch(tr);\n}\nfunction displayColumnWidth(view, cell, width, defaultCellMinWidth) {\n\tconst $cell = view.state.doc.resolve(cell);\n\tconst table = $cell.node(-1), start = $cell.start(-1);\n\tconst col = TableMap.get(table).colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n\tlet dom = view.domAtPos($cell.start(-1)).node;\n\twhile (dom && dom.nodeName != \"TABLE\") dom = dom.parentNode;\n\tif (!dom) return;\n\tupdateColumnsOnResize(table, dom.firstChild, dom, defaultCellMinWidth, col, width);\n}\nfunction zeroes(n) {\n\treturn Array(n).fill(0);\n}\nfunction handleDecorations(state, cell) {\n\tconst decorations = [];\n\tconst $cell = state.doc.resolve(cell);\n\tconst table = $cell.node(-1);\n\tif (!table) return DecorationSet.empty;\n\tconst map = TableMap.get(table);\n\tconst start = $cell.start(-1);\n\tconst col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n\tfor (let row = 0; row < map.height; row++) {\n\t\tconst index = col + row * map.width;\n\t\tif ((col == map.width - 1 || map.map[index] != map.map[index + 1]) && (row == 0 || map.map[index] != map.map[index - map.width])) {\n\t\t\tvar _columnResizingPlugin;\n\t\t\tconst cellPos = map.map[index];\n\t\t\tconst pos = start + cellPos + table.nodeAt(cellPos).nodeSize - 1;\n\t\t\tconst dom = document.createElement(\"div\");\n\t\t\tdom.className = \"column-resize-handle\";\n\t\t\tif ((_columnResizingPlugin = columnResizingPluginKey.getState(state)) === null || _columnResizingPlugin === void 0 ? void 0 : _columnResizingPlugin.dragging) decorations.push(Decoration.node(start + cellPos, start + cellPos + table.nodeAt(cellPos).nodeSize, { class: \"column-resize-dragging\" }));\n\t\t\tdecorations.push(Decoration.widget(pos, dom));\n\t\t}\n\t}\n\treturn DecorationSet.create(state.doc, decorations);\n}\n\n//#endregion\n//#region src/index.ts\n/**\n* Creates a [plugin](http://prosemirror.net/docs/ref/#state.Plugin)\n* that, when added to an editor, enables cell-selection, handles\n* cell-based copy/paste, and makes sure tables stay well-formed (each\n* row has the same width, and cells don't overlap).\n*\n* You should probably put this plugin near the end of your array of\n* plugins, since it handles mouse and arrow key events in tables\n* rather broadly, and other plugins, like the gap cursor or the\n* column-width dragging plugin, might want to get a turn first to\n* perform more specific behavior.\n*\n* @public\n*/\nfunction tableEditing({ allowTableNodeSelection = false } = {}) {\n\treturn new Plugin({\n\t\tkey: tableEditingKey,\n\t\tstate: {\n\t\t\tinit() {\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tapply(tr, cur) {\n\t\t\t\tconst set = tr.getMeta(tableEditingKey);\n\t\t\t\tif (set != null) return set == -1 ? null : set;\n\t\t\t\tif (cur == null || !tr.docChanged) return cur;\n\t\t\t\tconst { deleted, pos } = tr.mapping.mapResult(cur);\n\t\t\t\treturn deleted ? null : pos;\n\t\t\t}\n\t\t},\n\t\tprops: {\n\t\t\tdecorations: drawCellSelection,\n\t\t\thandleDOMEvents: { mousedown: handleMouseDown$1 },\n\t\t\tcreateSelectionBetween(view) {\n\t\t\t\treturn tableEditingKey.getState(view.state) != null ? view.state.selection : null;\n\t\t\t},\n\t\t\thandleTripleClick,\n\t\t\thandleKeyDown,\n\t\t\thandlePaste\n\t\t},\n\t\tappendTransaction(_, oldState, state) {\n\t\t\treturn normalizeSelection(state, fixTables(state, oldState), allowTableNodeSelection);\n\t\t}\n\t});\n}\n\n//#endregion\nexport { CellBookmark, CellSelection, ResizeState, TableMap, TableView, clipCells as __clipCells, insertCells as __insertCells, pastedCells as __pastedCells, addColSpan, addColumn, addColumnAfter, addColumnBefore, addRow, addRowAfter, addRowBefore, cellAround, cellNear, colCount, columnIsHeader, columnResizing, columnResizingPluginKey, deleteCellSelection, deleteColumn, deleteRow, deleteTable, findCell, findCellPos, findCellRange, findTable, fixTables, fixTablesKey, goToNextCell, handlePaste, inSameTable, isInTable, mergeCells, moveCellForward, moveTableColumn, moveTableRow, nextCell, pointsAtCell, removeColSpan, removeColumn, removeRow, rowIsHeader, selectedRect, selectionCell, setCellAttr, splitCell, splitCellWithType, tableEditing, tableEditingKey, tableNodeTypes, tableNodes, toggleHeader, toggleHeaderCell, toggleHeaderColumn, toggleHeaderRow, updateColumnsOnResize };\n//# sourceMappingURL=index.js.map","// src/index.ts\nimport {\n Plugin,\n PluginKey\n} from \"prosemirror-state\";\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\n\n// src/browser.ts\nvar nav = typeof navigator != \"undefined\" ? navigator : null;\nvar agent = nav && nav.userAgent || \"\";\nvar ie_edge = /Edge\\/(\\d+)/.exec(agent);\nvar ie_upto10 = /MSIE \\d/.exec(agent);\nvar ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(agent);\nvar ie = !!(ie_upto10 || ie_11up || ie_edge);\nvar safari = !ie && !!nav && /Apple Computer/.test(nav.vendor);\n\n// src/index.ts\nvar key = new PluginKey(\"safari-ime-span\");\nvar isComposing = false;\nvar spec = {\n key,\n props: {\n decorations: createDecorations,\n handleDOMEvents: {\n compositionstart: () => {\n isComposing = true;\n },\n compositionend: () => {\n isComposing = false;\n }\n }\n }\n};\nfunction createDecorations(state) {\n const { $from, $to, to } = state.selection;\n if (isComposing && $from.sameParent($to)) {\n const deco = Decoration.widget(to, createSpan, {\n ignoreSelection: true,\n key: \"safari-ime-span\"\n });\n return DecorationSet.create(state.doc, [deco]);\n }\n}\nfunction createSpan(view) {\n const span = view.dom.ownerDocument.createElement(\"span\");\n span.className = \"ProseMirror-safari-ime-span\";\n return span;\n}\nvar imeSpan = new Plugin(safari ? spec : { key });\nexport {\n imeSpan\n};\n","/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n * Value to search in.\n * @param {string} character\n * Character (or substring) to look for.\n * @return {number}\n * Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n const source = String(value)\n\n if (typeof character !== 'string') {\n throw new TypeError('Expected character')\n }\n\n let count = 0\n let index = source.indexOf(character)\n\n while (index !== -1) {\n count++\n index = source.indexOf(character, index + character.length)\n }\n\n return count\n}\n","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","/**\n * @import {Nodes, Parents, PhrasingContent, Root, Text} from 'mdast'\n * @import {BuildVisitor, Test, VisitorResult} from 'unist-util-visit-parents'\n */\n\n/**\n * @typedef RegExpMatchObject\n * Info on the match.\n * @property {number} index\n * The index of the search at which the result was found.\n * @property {string} input\n * A copy of the search string in the text node.\n * @property {[...Array<Parents>, Text]} stack\n * All ancestors of the text node, where the last node is the text itself.\n *\n * @typedef {RegExp | string} Find\n * Pattern to find.\n *\n * Strings are escaped and then turned into global expressions.\n *\n * @typedef {Array<FindAndReplaceTuple>} FindAndReplaceList\n * Several find and replaces, in array form.\n *\n * @typedef {[Find, Replace?]} FindAndReplaceTuple\n * Find and replace in tuple form.\n *\n * @typedef {ReplaceFunction | string | null | undefined} Replace\n * Thing to replace with.\n *\n * @callback ReplaceFunction\n * Callback called when a search matches.\n * @param {...any} parameters\n * The parameters are the result of corresponding search expression:\n *\n * * `value` (`string`) — whole match\n * * `...capture` (`Array<string>`) — matches from regex capture groups\n * * `match` (`RegExpMatchObject`) — info on the match\n * @returns {Array<PhrasingContent> | PhrasingContent | string | false | null | undefined}\n * Thing to replace with.\n *\n * * when `null`, `undefined`, `''`, remove the match\n * * …or when `false`, do not replace at all\n * * …or when `string`, replace with a text node of that value\n * * …or when `Node` or `Array<Node>`, replace with those nodes\n *\n * @typedef {[RegExp, ReplaceFunction]} Pair\n * Normalized find and replace.\n *\n * @typedef {Array<Pair>} Pairs\n * All find and replaced.\n *\n * @typedef Options\n * Configuration.\n * @property {Test | null | undefined} [ignore]\n * Test for which nodes to ignore (optional).\n */\n\nimport escape from 'escape-string-regexp'\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convert} from 'unist-util-is'\n\n/**\n * Find patterns in a tree and replace them.\n *\n * The algorithm searches the tree in *preorder* for complete values in `Text`\n * nodes.\n * Partial matches are not supported.\n *\n * @param {Nodes} tree\n * Tree to change.\n * @param {FindAndReplaceList | FindAndReplaceTuple} list\n * Patterns to find.\n * @param {Options | null | undefined} [options]\n * Configuration (when `find` is not `Find`).\n * @returns {undefined}\n * Nothing.\n */\nexport function findAndReplace(tree, list, options) {\n const settings = options || {}\n const ignored = convert(settings.ignore || [])\n const pairs = toPairs(list)\n let pairIndex = -1\n\n while (++pairIndex < pairs.length) {\n visitParents(tree, 'text', visitor)\n }\n\n /** @type {BuildVisitor<Root, 'text'>} */\n function visitor(node, parents) {\n let index = -1\n /** @type {Parents | undefined} */\n let grandparent\n\n while (++index < parents.length) {\n const parent = parents[index]\n /** @type {Array<Nodes> | undefined} */\n const siblings = grandparent ? grandparent.children : undefined\n\n if (\n ignored(\n parent,\n siblings ? siblings.indexOf(parent) : undefined,\n grandparent\n )\n ) {\n return\n }\n\n grandparent = parent\n }\n\n if (grandparent) {\n return handler(node, parents)\n }\n }\n\n /**\n * Handle a text node which is not in an ignored parent.\n *\n * @param {Text} node\n * Text node.\n * @param {Array<Parents>} parents\n * Parents.\n * @returns {VisitorResult}\n * Result.\n */\n function handler(node, parents) {\n const parent = parents[parents.length - 1]\n const find = pairs[pairIndex][0]\n const replace = pairs[pairIndex][1]\n let start = 0\n /** @type {Array<Nodes>} */\n const siblings = parent.children\n const index = siblings.indexOf(node)\n let change = false\n /** @type {Array<PhrasingContent>} */\n let nodes = []\n\n find.lastIndex = 0\n\n let match = find.exec(node.value)\n\n while (match) {\n const position = match.index\n /** @type {RegExpMatchObject} */\n const matchObject = {\n index: match.index,\n input: match.input,\n stack: [...parents, node]\n }\n let value = replace(...match, matchObject)\n\n if (typeof value === 'string') {\n value = value.length > 0 ? {type: 'text', value} : undefined\n }\n\n // It wasn’t a match after all.\n if (value === false) {\n // False acts as if there was no match.\n // So we need to reset `lastIndex`, which currently being at the end of\n // the current match, to the beginning.\n find.lastIndex = position + 1\n } else {\n if (start !== position) {\n nodes.push({\n type: 'text',\n value: node.value.slice(start, position)\n })\n }\n\n if (Array.isArray(value)) {\n nodes.push(...value)\n } else if (value) {\n nodes.push(value)\n }\n\n start = position + match[0].length\n change = true\n }\n\n if (!find.global) {\n break\n }\n\n match = find.exec(node.value)\n }\n\n if (change) {\n if (start < node.value.length) {\n nodes.push({type: 'text', value: node.value.slice(start)})\n }\n\n parent.children.splice(index, 1, ...nodes)\n } else {\n nodes = [node]\n }\n\n return index + nodes.length\n }\n}\n\n/**\n * Turn a tuple or a list of tuples into pairs.\n *\n * @param {FindAndReplaceList | FindAndReplaceTuple} tupleOrList\n * Schema.\n * @returns {Pairs}\n * Clean pairs.\n */\nfunction toPairs(tupleOrList) {\n /** @type {Pairs} */\n const result = []\n\n if (!Array.isArray(tupleOrList)) {\n throw new TypeError('Expected find and replace tuple or list of tuples')\n }\n\n /** @type {FindAndReplaceList} */\n // @ts-expect-error: correct.\n const list =\n !tupleOrList[0] || Array.isArray(tupleOrList[0])\n ? tupleOrList\n : [tupleOrList]\n\n let index = -1\n\n while (++index < list.length) {\n const tuple = list[index]\n result.push([toExpression(tuple[0]), toFunction(tuple[1])])\n }\n\n return result\n}\n\n/**\n * Turn a find into an expression.\n *\n * @param {Find} find\n * Find.\n * @returns {RegExp}\n * Expression.\n */\nfunction toExpression(find) {\n return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\n/**\n * Turn a replace into a function.\n *\n * @param {Replace} replace\n * Replace.\n * @returns {ReplaceFunction}\n * Function.\n */\nfunction toFunction(replace) {\n return typeof replace === 'function'\n ? replace\n : function () {\n return replace\n }\n}\n","/**\n * @import {RegExpMatchObject, ReplaceFunction} from 'mdast-util-find-and-replace'\n * @import {CompileContext, Extension as FromMarkdownExtension, Handle as FromMarkdownHandle, Transform as FromMarkdownTransform} from 'mdast-util-from-markdown'\n * @import {ConstructName, Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\n * @import {Link, PhrasingContent} from 'mdast'\n */\n\nimport {ccount} from 'ccount'\nimport {ok as assert} from 'devlop'\nimport {unicodePunctuation, unicodeWhitespace} from 'micromark-util-character'\nimport {findAndReplace} from 'mdast-util-find-and-replace'\n\n/** @type {ConstructName} */\nconst inConstruct = 'phrasing'\n/** @type {Array<ConstructName>} */\nconst notInConstruct = ['autolink', 'link', 'image', 'label']\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralFromMarkdown() {\n return {\n transforms: [transformGfmAutolinkLiterals],\n enter: {\n literalAutolink: enterLiteralAutolink,\n literalAutolinkEmail: enterLiteralAutolinkValue,\n literalAutolinkHttp: enterLiteralAutolinkValue,\n literalAutolinkWww: enterLiteralAutolinkValue\n },\n exit: {\n literalAutolink: exitLiteralAutolink,\n literalAutolinkEmail: exitLiteralAutolinkEmail,\n literalAutolinkHttp: exitLiteralAutolinkHttp,\n literalAutolinkWww: exitLiteralAutolinkWww\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralToMarkdown() {\n return {\n unsafe: [\n {\n character: '@',\n before: '[+\\\\-.\\\\w]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {\n character: '.',\n before: '[Ww]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {\n character: ':',\n before: '[ps]',\n after: '\\\\/',\n inConstruct,\n notInConstruct\n }\n ]\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolink(token) {\n this.enter({type: 'link', title: null, url: '', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolinkValue(token) {\n this.config.enter.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkHttp(token) {\n this.config.exit.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkWww(token) {\n this.config.exit.data.call(this, token)\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'link')\n node.url = 'http://' + this.sliceSerialize(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkEmail(token) {\n this.config.exit.autolinkEmail.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolink(token) {\n this.exit(token)\n}\n\n/** @type {FromMarkdownTransform} */\nfunction transformGfmAutolinkLiterals(tree) {\n findAndReplace(\n tree,\n [\n [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n [/(?<=^|\\s|\\p{P}|\\p{S})([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/gu, findEmail]\n ],\n {ignore: ['link', 'linkReference']}\n )\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} protocol\n * @param {string} domain\n * @param {string} path\n * @param {RegExpMatchObject} match\n * @returns {Array<PhrasingContent> | Link | false}\n */\n// eslint-disable-next-line max-params\nfunction findUrl(_, protocol, domain, path, match) {\n let prefix = ''\n\n // Not an expected previous character.\n if (!previous(match)) {\n return false\n }\n\n // Treat `www` as part of the domain.\n if (/^w/i.test(protocol)) {\n domain = protocol + domain\n protocol = ''\n prefix = 'http://'\n }\n\n if (!isCorrectDomain(domain)) {\n return false\n }\n\n const parts = splitUrl(domain + path)\n\n if (!parts[0]) return false\n\n /** @type {Link} */\n const result = {\n type: 'link',\n title: null,\n url: prefix + protocol + parts[0],\n children: [{type: 'text', value: protocol + parts[0]}]\n }\n\n if (parts[1]) {\n return [result, {type: 'text', value: parts[1]}]\n }\n\n return result\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} atext\n * @param {string} label\n * @param {RegExpMatchObject} match\n * @returns {Link | false}\n */\nfunction findEmail(_, atext, label, match) {\n if (\n // Not an expected previous character.\n !previous(match, true) ||\n // Label ends in not allowed character.\n /[-\\d_]$/.test(label)\n ) {\n return false\n }\n\n return {\n type: 'link',\n title: null,\n url: 'mailto:' + atext + '@' + label,\n children: [{type: 'text', value: atext + '@' + label}]\n }\n}\n\n/**\n * @param {string} domain\n * @returns {boolean}\n */\nfunction isCorrectDomain(domain) {\n const parts = domain.split('.')\n\n if (\n parts.length < 2 ||\n (parts[parts.length - 1] &&\n (/_/.test(parts[parts.length - 1]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 1]))) ||\n (parts[parts.length - 2] &&\n (/_/.test(parts[parts.length - 2]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 2])))\n ) {\n return false\n }\n\n return true\n}\n\n/**\n * @param {string} url\n * @returns {[string, string | undefined]}\n */\nfunction splitUrl(url) {\n const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url)\n\n if (!trailExec) {\n return [url, undefined]\n }\n\n url = url.slice(0, trailExec.index)\n\n let trail = trailExec[0]\n let closingParenIndex = trail.indexOf(')')\n const openingParens = ccount(url, '(')\n let closingParens = ccount(url, ')')\n\n while (closingParenIndex !== -1 && openingParens > closingParens) {\n url += trail.slice(0, closingParenIndex + 1)\n trail = trail.slice(closingParenIndex + 1)\n closingParenIndex = trail.indexOf(')')\n closingParens++\n }\n\n return [url, trail]\n}\n\n/**\n * @param {RegExpMatchObject} match\n * @param {boolean | null | undefined} [email=false]\n * @returns {boolean}\n */\nfunction previous(match, email) {\n const code = match.input.charCodeAt(match.index - 1)\n\n return (\n (match.index === 0 ||\n unicodeWhitespace(code) ||\n unicodePunctuation(code)) &&\n // If it’s an email, the previous character should not be a slash.\n (!email || code !== 47)\n )\n}\n","/**\n * @import {\n * CompileContext,\n * Extension as FromMarkdownExtension,\n * Handle as FromMarkdownHandle\n * } from 'mdast-util-from-markdown'\n * @import {ToMarkdownOptions} from 'mdast-util-gfm-footnote'\n * @import {\n * Handle as ToMarkdownHandle,\n * Map,\n * Options as ToMarkdownExtension\n * } from 'mdast-util-to-markdown'\n * @import {FootnoteDefinition, FootnoteReference} from 'mdast'\n */\n\nimport {ok as assert} from 'devlop'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n\nfootnoteReference.peek = footnoteReferencePeek\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCallString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCall(token) {\n this.enter({type: 'footnoteReference', identifier: '', label: ''}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinitionLabelString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinition(token) {\n this.enter(\n {type: 'footnoteDefinition', identifier: '', label: '', children: []},\n token\n )\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCallString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteReference')\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n node.label = label\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCall(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinitionLabelString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteDefinition')\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n node.label = label\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinition(token) {\n this.exit(token)\n}\n\n/** @type {ToMarkdownHandle} */\nfunction footnoteReferencePeek() {\n return '['\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteReference} node\n */\nfunction footnoteReference(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteReference')\n const subexit = state.enter('reference')\n value += tracker.move(\n state.safe(state.associationId(node), {after: ']', before: value})\n )\n subexit()\n exit()\n value += tracker.move(']')\n return value\n}\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown`.\n */\nexport function gfmFootnoteFromMarkdown() {\n return {\n enter: {\n gfmFootnoteCallString: enterFootnoteCallString,\n gfmFootnoteCall: enterFootnoteCall,\n gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n gfmFootnoteDefinition: enterFootnoteDefinition\n },\n exit: {\n gfmFootnoteCallString: exitFootnoteCallString,\n gfmFootnoteCall: exitFootnoteCall,\n gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n gfmFootnoteDefinition: exitFootnoteDefinition\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @param {ToMarkdownOptions | null | undefined} [options]\n * Configuration (optional).\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown`.\n */\nexport function gfmFootnoteToMarkdown(options) {\n // To do: next major: change default.\n let firstLineBlank = false\n\n if (options && options.firstLineBlank) {\n firstLineBlank = true\n }\n\n return {\n handlers: {footnoteDefinition, footnoteReference},\n // This is on by default already.\n unsafe: [{character: '[', inConstruct: ['label', 'phrasing', 'reference']}]\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {FootnoteDefinition} node\n */\n function footnoteDefinition(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteDefinition')\n const subexit = state.enter('label')\n value += tracker.move(\n state.safe(state.associationId(node), {before: value, after: ']'})\n )\n subexit()\n\n value += tracker.move(']:')\n\n if (node.children && node.children.length > 0) {\n tracker.shift(4)\n\n value += tracker.move(\n (firstLineBlank ? '\\n' : ' ') +\n state.indentLines(\n state.containerFlow(node, tracker.current()),\n firstLineBlank ? mapAll : mapExceptFirst\n )\n )\n }\n\n exit()\n\n return value\n }\n}\n\n/** @type {Map} */\nfunction mapExceptFirst(line, index, blank) {\n return index === 0 ? line : mapAll(line, index, blank)\n}\n\n/** @type {Map} */\nfunction mapAll(line, index, blank) {\n return (blank ? '' : ' ') + line\n}\n","/**\n * @typedef {import('mdast').Delete} Delete\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * List of constructs that occur in phrasing (paragraphs, headings), but cannot\n * contain strikethrough.\n * So they sort of cancel each other out.\n * Note: could use a better name.\n *\n * Note: keep in sync with: <https://github.com/syntax-tree/mdast-util-to-markdown/blob/8ce8dbf/lib/unsafe.js#L14>\n *\n * @type {Array<ConstructName>}\n */\nconst constructsWithoutStrikethrough = [\n 'autolink',\n 'destinationLiteral',\n 'destinationRaw',\n 'reference',\n 'titleQuote',\n 'titleApostrophe'\n]\n\nhandleDelete.peek = peekDelete\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughFromMarkdown() {\n return {\n canContainEols: ['delete'],\n enter: {strikethrough: enterStrikethrough},\n exit: {strikethrough: exitStrikethrough}\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughToMarkdown() {\n return {\n unsafe: [\n {\n character: '~',\n inConstruct: 'phrasing',\n notInConstruct: constructsWithoutStrikethrough\n }\n ],\n handlers: {delete: handleDelete}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterStrikethrough(token) {\n this.enter({type: 'delete', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitStrikethrough(token) {\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {Delete} node\n */\nfunction handleDelete(node, _, state, info) {\n const tracker = state.createTracker(info)\n const exit = state.enter('strikethrough')\n let value = tracker.move('~~')\n value += state.containerPhrasing(node, {\n ...tracker.current(),\n before: value,\n after: '~'\n })\n value += tracker.move('~~')\n exit()\n return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction peekDelete() {\n return '~'\n}\n","// To do: next major: remove.\n/**\n * @typedef {Options} MarkdownTableOptions\n * Configuration.\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [alignDelimiters=true]\n * Whether to align the delimiters (default: `true`);\n * they are aligned by default:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * Pass `false` to make them staggered:\n *\n * ```markdown\n * | Alpha | B |\n * | - | - |\n * | C | Delta |\n * ```\n * @property {ReadonlyArray<string | null | undefined> | string | null | undefined} [align]\n * How to align columns (default: `''`);\n * one style for all columns or styles for their respective columns;\n * each style is either `'l'` (left), `'r'` (right), or `'c'` (center);\n * other values are treated as `''`, which doesn’t place the colon in the\n * alignment row but does align left;\n * *only the lowercased first character is used, so `Right` is fine.*\n * @property {boolean | null | undefined} [delimiterEnd=true]\n * Whether to end each row with the delimiter (default: `true`).\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are ending delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no ending delimiters:\n *\n * ```markdown\n * | Alpha | B\n * | ----- | -----\n * | C | Delta\n * ```\n * @property {boolean | null | undefined} [delimiterStart=true]\n * Whether to begin each row with the delimiter (default: `true`).\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are starting delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no starting delimiters:\n *\n * ```markdown\n * Alpha | B |\n * ----- | ----- |\n * C | Delta |\n * ```\n * @property {boolean | null | undefined} [padding=true]\n * Whether to add a space of padding between delimiters and cells\n * (default: `true`).\n *\n * When `true`, there is padding:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there is no padding:\n *\n * ```markdown\n * |Alpha|B |\n * |-----|-----|\n * |C |Delta|\n * ```\n * @property {((value: string) => number) | null | undefined} [stringLength]\n * Function to detect the length of table cell content (optional);\n * this is used when aligning the delimiters (`|`) between table cells;\n * full-width characters and emoji mess up delimiter alignment when viewing\n * the markdown source;\n * to fix this, you can pass this function,\n * which receives the cell content and returns its “visible” size;\n * note that what is and isn’t visible depends on where the text is displayed.\n *\n * Without such a function, the following:\n *\n * ```js\n * markdownTable([\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩‍❤️‍👩', 'Delta']\n * ])\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | - | - |\n * | 中文 | Charlie |\n * | 👩‍❤️‍👩 | Delta |\n * ```\n *\n * With [`string-width`](https://github.com/sindresorhus/string-width):\n *\n * ```js\n * import stringWidth from 'string-width'\n *\n * markdownTable(\n * [\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩‍❤️‍👩', 'Delta']\n * ],\n * {stringLength: stringWidth}\n * )\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | ----- | ------- |\n * | 中文 | Charlie |\n * | 👩‍❤️‍👩 | Delta |\n * ```\n */\n\n/**\n * @param {string} value\n * Cell value.\n * @returns {number}\n * Cell size.\n */\nfunction defaultStringLength(value) {\n return value.length\n}\n\n/**\n * Generate a markdown\n * ([GFM](https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables))\n * table.\n *\n * @param {ReadonlyArray<ReadonlyArray<string | null | undefined>>} table\n * Table data (matrix of strings).\n * @param {Readonly<Options> | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Result.\n */\nexport function markdownTable(table, options) {\n const settings = options || {}\n // To do: next major: change to spread.\n const align = (settings.align || []).concat()\n const stringLength = settings.stringLength || defaultStringLength\n /** @type {Array<number>} Character codes as symbols for alignment per column. */\n const alignments = []\n /** @type {Array<Array<string>>} Cells per row. */\n const cellMatrix = []\n /** @type {Array<Array<number>>} Sizes of each cell per row. */\n const sizeMatrix = []\n /** @type {Array<number>} */\n const longestCellByColumn = []\n let mostCellsPerRow = 0\n let rowIndex = -1\n\n // This is a superfluous loop if we don’t align delimiters, but otherwise we’d\n // do superfluous work when aligning, so optimize for aligning.\n while (++rowIndex < table.length) {\n /** @type {Array<string>} */\n const row = []\n /** @type {Array<number>} */\n const sizes = []\n let columnIndex = -1\n\n if (table[rowIndex].length > mostCellsPerRow) {\n mostCellsPerRow = table[rowIndex].length\n }\n\n while (++columnIndex < table[rowIndex].length) {\n const cell = serialize(table[rowIndex][columnIndex])\n\n if (settings.alignDelimiters !== false) {\n const size = stringLength(cell)\n sizes[columnIndex] = size\n\n if (\n longestCellByColumn[columnIndex] === undefined ||\n size > longestCellByColumn[columnIndex]\n ) {\n longestCellByColumn[columnIndex] = size\n }\n }\n\n row.push(cell)\n }\n\n cellMatrix[rowIndex] = row\n sizeMatrix[rowIndex] = sizes\n }\n\n // Figure out which alignments to use.\n let columnIndex = -1\n\n if (typeof align === 'object' && 'length' in align) {\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = toAlignment(align[columnIndex])\n }\n } else {\n const code = toAlignment(align)\n\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = code\n }\n }\n\n // Inject the alignment row.\n columnIndex = -1\n /** @type {Array<string>} */\n const row = []\n /** @type {Array<number>} */\n const sizes = []\n\n while (++columnIndex < mostCellsPerRow) {\n const code = alignments[columnIndex]\n let before = ''\n let after = ''\n\n if (code === 99 /* `c` */) {\n before = ':'\n after = ':'\n } else if (code === 108 /* `l` */) {\n before = ':'\n } else if (code === 114 /* `r` */) {\n after = ':'\n }\n\n // There *must* be at least one hyphen-minus in each alignment cell.\n let size =\n settings.alignDelimiters === false\n ? 1\n : Math.max(\n 1,\n longestCellByColumn[columnIndex] - before.length - after.length\n )\n\n const cell = before + '-'.repeat(size) + after\n\n if (settings.alignDelimiters !== false) {\n size = before.length + size + after.length\n\n if (size > longestCellByColumn[columnIndex]) {\n longestCellByColumn[columnIndex] = size\n }\n\n sizes[columnIndex] = size\n }\n\n row[columnIndex] = cell\n }\n\n // Inject the alignment row.\n cellMatrix.splice(1, 0, row)\n sizeMatrix.splice(1, 0, sizes)\n\n rowIndex = -1\n /** @type {Array<string>} */\n const lines = []\n\n while (++rowIndex < cellMatrix.length) {\n const row = cellMatrix[rowIndex]\n const sizes = sizeMatrix[rowIndex]\n columnIndex = -1\n /** @type {Array<string>} */\n const line = []\n\n while (++columnIndex < mostCellsPerRow) {\n const cell = row[columnIndex] || ''\n let before = ''\n let after = ''\n\n if (settings.alignDelimiters !== false) {\n const size =\n longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0)\n const code = alignments[columnIndex]\n\n if (code === 114 /* `r` */) {\n before = ' '.repeat(size)\n } else if (code === 99 /* `c` */) {\n if (size % 2) {\n before = ' '.repeat(size / 2 + 0.5)\n after = ' '.repeat(size / 2 - 0.5)\n } else {\n before = ' '.repeat(size / 2)\n after = before\n }\n } else {\n after = ' '.repeat(size)\n }\n }\n\n if (settings.delimiterStart !== false && !columnIndex) {\n line.push('|')\n }\n\n if (\n settings.padding !== false &&\n // Don’t add the opening space if we’re not aligning and the cell is\n // empty: there will be a closing space.\n !(settings.alignDelimiters === false && cell === '') &&\n (settings.delimiterStart !== false || columnIndex)\n ) {\n line.push(' ')\n }\n\n if (settings.alignDelimiters !== false) {\n line.push(before)\n }\n\n line.push(cell)\n\n if (settings.alignDelimiters !== false) {\n line.push(after)\n }\n\n if (settings.padding !== false) {\n line.push(' ')\n }\n\n if (\n settings.delimiterEnd !== false ||\n columnIndex !== mostCellsPerRow - 1\n ) {\n line.push('|')\n }\n }\n\n lines.push(\n settings.delimiterEnd === false\n ? line.join('').replace(/ +$/, '')\n : line.join('')\n )\n }\n\n return lines.join('\\n')\n}\n\n/**\n * @param {string | null | undefined} [value]\n * Value to serialize.\n * @returns {string}\n * Result.\n */\nfunction serialize(value) {\n return value === null || value === undefined ? '' : String(value)\n}\n\n/**\n * @param {string | null | undefined} value\n * Value.\n * @returns {number}\n * Alignment.\n */\nfunction toAlignment(value) {\n const code = typeof value === 'string' ? value.codePointAt(0) : 0\n\n return code === 67 /* `C` */ || code === 99 /* `c` */\n ? 99 /* `c` */\n : code === 76 /* `L` */ || code === 108 /* `l` */\n ? 108 /* `l` */\n : code === 82 /* `R` */ || code === 114 /* `r` */\n ? 114 /* `r` */\n : 0\n}\n","/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Table} Table\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('mdast').TableRow} TableRow\n *\n * @typedef {import('markdown-table').Options} MarkdownTableOptions\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').State} State\n * @typedef {import('mdast-util-to-markdown').Info} Info\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [tableCellPadding=true]\n * Whether to add a space of padding between delimiters and cells (default:\n * `true`).\n * @property {boolean | null | undefined} [tablePipeAlign=true]\n * Whether to align the delimiters (default: `true`).\n * @property {MarkdownTableOptions['stringLength'] | null | undefined} [stringLength]\n * Function to detect the length of table cell content, used when aligning\n * the delimiters between cells (optional).\n */\n\nimport {ok as assert} from 'devlop'\nimport {markdownTable} from 'markdown-table'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM tables in\n * markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM tables.\n */\nexport function gfmTableFromMarkdown() {\n return {\n enter: {\n table: enterTable,\n tableData: enterCell,\n tableHeader: enterCell,\n tableRow: enterRow\n },\n exit: {\n codeText: exitCodeText,\n table: exitTable,\n tableData: exit,\n tableHeader: exit,\n tableRow: exit\n }\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterTable(token) {\n const align = token._align\n assert(align, 'expected `_align` on table')\n this.enter(\n {\n type: 'table',\n align: align.map(function (d) {\n return d === 'none' ? null : d\n }),\n children: []\n },\n token\n )\n this.data.inTable = true\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitTable(token) {\n this.exit(token)\n this.data.inTable = undefined\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterRow(token) {\n this.enter({type: 'tableRow', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exit(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterCell(token) {\n this.enter({type: 'tableCell', children: []}, token)\n}\n\n// Overwrite the default code text data handler to unescape escaped pipes when\n// they are in tables.\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCodeText(token) {\n let value = this.resume()\n\n if (this.data.inTable) {\n value = value.replace(/\\\\([\\\\|])/g, replace)\n }\n\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'inlineCode')\n node.value = value\n this.exit(token)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @returns {string}\n */\nfunction replace($0, $1) {\n // Pipes work, backslashes don’t (but can’t escape pipes).\n return $1 === '|' ? $1 : $0\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM tables in\n * markdown.\n *\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM tables.\n */\nexport function gfmTableToMarkdown(options) {\n const settings = options || {}\n const padding = settings.tableCellPadding\n const alignDelimiters = settings.tablePipeAlign\n const stringLength = settings.stringLength\n const around = padding ? ' ' : '|'\n\n return {\n unsafe: [\n {character: '\\r', inConstruct: 'tableCell'},\n {character: '\\n', inConstruct: 'tableCell'},\n // A pipe, when followed by a tab or space (padding), or a dash or colon\n // (unpadded delimiter row), could result in a table.\n {atBreak: true, character: '|', after: '[\\t :-]'},\n // A pipe in a cell must be encoded.\n {character: '|', inConstruct: 'tableCell'},\n // A colon must be followed by a dash, in which case it could start a\n // delimiter row.\n {atBreak: true, character: ':', after: '-'},\n // A delimiter row can also start with a dash, when followed by more\n // dashes, a colon, or a pipe.\n // This is a stricter version than the built in check for lists, thematic\n // breaks, and setex heading underlines though:\n // <https://github.com/syntax-tree/mdast-util-to-markdown/blob/51a2038/lib/unsafe.js#L57>\n {atBreak: true, character: '-', after: '[:|-]'}\n ],\n handlers: {\n inlineCode: inlineCodeWithTable,\n table: handleTable,\n tableCell: handleTableCell,\n tableRow: handleTableRow\n }\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {Table} node\n */\n function handleTable(node, _, state, info) {\n return serializeData(handleTableAsData(node, state, info), node.align)\n }\n\n /**\n * This function isn’t really used normally, because we handle rows at the\n * table level.\n * But, if someone passes in a table row, this ensures we make somewhat sense.\n *\n * @type {ToMarkdownHandle}\n * @param {TableRow} node\n */\n function handleTableRow(node, _, state, info) {\n const row = handleTableRowAsData(node, state, info)\n const value = serializeData([row])\n // `markdown-table` will always add an align row\n return value.slice(0, value.indexOf('\\n'))\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {TableCell} node\n */\n function handleTableCell(node, _, state, info) {\n const exit = state.enter('tableCell')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...info,\n before: around,\n after: around\n })\n subexit()\n exit()\n return value\n }\n\n /**\n * @param {Array<Array<string>>} matrix\n * @param {Array<string | null | undefined> | null | undefined} [align]\n */\n function serializeData(matrix, align) {\n return markdownTable(matrix, {\n align,\n // @ts-expect-error: `markdown-table` types should support `null`.\n alignDelimiters,\n // @ts-expect-error: `markdown-table` types should support `null`.\n padding,\n // @ts-expect-error: `markdown-table` types should support `null`.\n stringLength\n })\n }\n\n /**\n * @param {Table} node\n * @param {State} state\n * @param {Info} info\n */\n function handleTableAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array<Array<string>>} */\n const result = []\n const subexit = state.enter('table')\n\n while (++index < children.length) {\n result[index] = handleTableRowAsData(children[index], state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @param {TableRow} node\n * @param {State} state\n * @param {Info} info\n */\n function handleTableRowAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array<string>} */\n const result = []\n const subexit = state.enter('tableRow')\n\n while (++index < children.length) {\n // Note: the positional info as used here is incorrect.\n // Making it correct would be impossible due to aligning cells?\n // And it would need copy/pasting `markdown-table` into this project.\n result[index] = handleTableCell(children[index], node, state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {InlineCode} node\n */\n function inlineCodeWithTable(node, parent, state) {\n let value = defaultHandlers.inlineCode(node, parent, state)\n\n if (state.stack.includes('tableCell')) {\n value = value.replace(/\\|/g, '\\\\$&')\n }\n\n return value\n }\n}\n","/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n */\n\nimport {ok as assert} from 'devlop'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM task\n * list items in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemFromMarkdown() {\n return {\n exit: {\n taskListCheckValueChecked: exitCheck,\n taskListCheckValueUnchecked: exitCheck,\n paragraph: exitParagraphWithTaskListItem\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM task list\n * items in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemToMarkdown() {\n return {\n unsafe: [{atBreak: true, character: '-', after: '[:|-]'}],\n handlers: {listItem: listItemWithTaskListItem}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCheck(token) {\n // We’re always in a paragraph, in a list item.\n const node = this.stack[this.stack.length - 2]\n assert(node.type === 'listItem')\n node.checked = token.type === 'taskListCheckValueChecked'\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitParagraphWithTaskListItem(token) {\n const parent = this.stack[this.stack.length - 2]\n\n if (\n parent &&\n parent.type === 'listItem' &&\n typeof parent.checked === 'boolean'\n ) {\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'paragraph')\n const head = node.children[0]\n\n if (head && head.type === 'text') {\n const siblings = parent.children\n let index = -1\n /** @type {Paragraph | undefined} */\n let firstParaghraph\n\n while (++index < siblings.length) {\n const sibling = siblings[index]\n if (sibling.type === 'paragraph') {\n firstParaghraph = sibling\n break\n }\n }\n\n if (firstParaghraph === node) {\n // Must start with a space or a tab.\n head.value = head.value.slice(1)\n\n if (head.value.length === 0) {\n node.children.shift()\n } else if (\n node.position &&\n head.position &&\n typeof head.position.start.offset === 'number'\n ) {\n head.position.start.column++\n head.position.start.offset++\n node.position.start = Object.assign({}, head.position.start)\n }\n }\n }\n }\n\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {ListItem} node\n */\nfunction listItemWithTaskListItem(node, parent, state, info) {\n const head = node.children[0]\n const checkable =\n typeof node.checked === 'boolean' && head && head.type === 'paragraph'\n const checkbox = '[' + (node.checked ? 'x' : ' ') + '] '\n const tracker = state.createTracker(info)\n\n if (checkable) {\n tracker.move(checkbox)\n }\n\n let value = defaultHandlers.listItem(node, parent, state, {\n ...info,\n ...tracker.current()\n })\n\n if (checkable) {\n value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check)\n }\n\n return value\n\n /**\n * @param {string} $0\n * @returns {string}\n */\n function check($0) {\n return $0 + checkbox\n }\n}\n","/**\n * @import {Extension as FromMarkdownExtension} from 'mdast-util-from-markdown'\n * @import {Options} from 'mdast-util-gfm'\n * @import {Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\n */\n\nimport {\n gfmAutolinkLiteralFromMarkdown,\n gfmAutolinkLiteralToMarkdown\n} from 'mdast-util-gfm-autolink-literal'\nimport {\n gfmFootnoteFromMarkdown,\n gfmFootnoteToMarkdown\n} from 'mdast-util-gfm-footnote'\nimport {\n gfmStrikethroughFromMarkdown,\n gfmStrikethroughToMarkdown\n} from 'mdast-util-gfm-strikethrough'\nimport {gfmTableFromMarkdown, gfmTableToMarkdown} from 'mdast-util-gfm-table'\nimport {\n gfmTaskListItemFromMarkdown,\n gfmTaskListItemToMarkdown\n} from 'mdast-util-gfm-task-list-item'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @returns {Array<FromMarkdownExtension>}\n * Extension for `mdast-util-from-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmFromMarkdown() {\n return [\n gfmAutolinkLiteralFromMarkdown(),\n gfmFootnoteFromMarkdown(),\n gfmStrikethroughFromMarkdown(),\n gfmTableFromMarkdown(),\n gfmTaskListItemFromMarkdown()\n ]\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmToMarkdown(options) {\n return {\n extensions: [\n gfmAutolinkLiteralToMarkdown(),\n gfmFootnoteToMarkdown(options),\n gfmStrikethroughToMarkdown(),\n gfmTableToMarkdown(options),\n gfmTaskListItemToMarkdown()\n ]\n }\n}\n","/**\n * @import {Code, ConstructRecord, Event, Extension, Previous, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { asciiAlpha, asciiAlphanumeric, asciiControl, markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\nconst wwwPrefix = {\n tokenize: tokenizeWwwPrefix,\n partial: true\n};\nconst domain = {\n tokenize: tokenizeDomain,\n partial: true\n};\nconst path = {\n tokenize: tokenizePath,\n partial: true\n};\nconst trail = {\n tokenize: tokenizeTrail,\n partial: true\n};\nconst emailDomainDotTrail = {\n tokenize: tokenizeEmailDomainDotTrail,\n partial: true\n};\nconst wwwAutolink = {\n name: 'wwwAutolink',\n tokenize: tokenizeWwwAutolink,\n previous: previousWww\n};\nconst protocolAutolink = {\n name: 'protocolAutolink',\n tokenize: tokenizeProtocolAutolink,\n previous: previousProtocol\n};\nconst emailAutolink = {\n name: 'emailAutolink',\n tokenize: tokenizeEmailAutolink,\n previous: previousEmail\n};\n\n/** @type {ConstructRecord} */\nconst text = {};\n\n/**\n * Create an extension for `micromark` to support GitHub autolink literal\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * autolink literal syntax.\n */\nexport function gfmAutolinkLiteral() {\n return {\n text\n };\n}\n\n/** @type {Code} */\nlet code = 48;\n\n// Add alphanumerics.\nwhile (code < 123) {\n text[code] = emailAutolink;\n code++;\n if (code === 58) code = 65;else if (code === 91) code = 97;\n}\ntext[43] = emailAutolink;\ntext[45] = emailAutolink;\ntext[46] = emailAutolink;\ntext[95] = emailAutolink;\ntext[72] = [emailAutolink, protocolAutolink];\ntext[104] = [emailAutolink, protocolAutolink];\ntext[87] = [emailAutolink, wwwAutolink];\ntext[119] = [emailAutolink, wwwAutolink];\n\n// To do: perform email autolink literals on events, afterwards.\n// That’s where `markdown-rs` and `cmark-gfm` perform it.\n// It should look for `@`, then for atext backwards, and then for a label\n// forwards.\n// To do: `mailto:`, `xmpp:` protocol as prefix.\n\n/**\n * Email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailAutolink(effects, ok, nok) {\n const self = this;\n /** @type {boolean | undefined} */\n let dot;\n /** @type {boolean} */\n let data;\n return start;\n\n /**\n * Start of email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (!gfmAtext(code) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code);\n }\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkEmail');\n return atext(code);\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function atext(code) {\n if (gfmAtext(code)) {\n effects.consume(code);\n return atext;\n }\n if (code === 64) {\n effects.consume(code);\n return emailDomain;\n }\n return nok(code);\n }\n\n /**\n * In email domain.\n *\n * The reference code is a bit overly complex as it handles the `@`, of which\n * there may be just one.\n * Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L318>\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomain(code) {\n // Dot followed by alphanumerical (not `-` or `_`).\n if (code === 46) {\n return effects.check(emailDomainDotTrail, emailDomainAfter, emailDomainDot)(code);\n }\n\n // Alphanumerical, `-`, and `_`.\n if (code === 45 || code === 95 || asciiAlphanumeric(code)) {\n data = true;\n effects.consume(code);\n return emailDomain;\n }\n\n // To do: `/` if xmpp.\n\n // Note: normally we’d truncate trailing punctuation from the link.\n // However, email autolink literals cannot contain any of those markers,\n // except for `.`, but that can only occur if it isn’t trailing.\n // So we can ignore truncating!\n return emailDomainAfter(code);\n }\n\n /**\n * In email domain, on dot that is not a trail.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainDot(code) {\n effects.consume(code);\n dot = true;\n return emailDomain;\n }\n\n /**\n * After email domain.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainAfter(code) {\n // Domain must not be empty, must include a dot, and must end in alphabetical.\n // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L332>.\n if (data && dot && asciiAlpha(self.previous)) {\n effects.exit('literalAutolinkEmail');\n effects.exit('literalAutolink');\n return ok(code);\n }\n return nok(code);\n }\n}\n\n/**\n * `www` autolink literal.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwAutolink(effects, ok, nok) {\n const self = this;\n return wwwStart;\n\n /**\n * Start of www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwStart(code) {\n if (code !== 87 && code !== 119 || !previousWww.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code);\n }\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkWww');\n // Note: we *check*, so we can discard the `www.` we parsed.\n // If it worked, we consider it as a part of the domain.\n return effects.check(wwwPrefix, effects.attempt(domain, effects.attempt(path, wwwAfter), nok), nok)(code);\n }\n\n /**\n * After a www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwAfter(code) {\n effects.exit('literalAutolinkWww');\n effects.exit('literalAutolink');\n return ok(code);\n }\n}\n\n/**\n * Protocol autolink literal.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeProtocolAutolink(effects, ok, nok) {\n const self = this;\n let buffer = '';\n let seen = false;\n return protocolStart;\n\n /**\n * Start of protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolStart(code) {\n if ((code === 72 || code === 104) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events)) {\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkHttp');\n buffer += String.fromCodePoint(code);\n effects.consume(code);\n return protocolPrefixInside;\n }\n return nok(code);\n }\n\n /**\n * In protocol.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^^^^\n * ```\n *\n * @type {State}\n */\n function protocolPrefixInside(code) {\n // `5` is size of `https`\n if (asciiAlpha(code) && buffer.length < 5) {\n // @ts-expect-error: definitely number.\n buffer += String.fromCodePoint(code);\n effects.consume(code);\n return protocolPrefixInside;\n }\n if (code === 58) {\n const protocol = buffer.toLowerCase();\n if (protocol === 'http' || protocol === 'https') {\n effects.consume(code);\n return protocolSlashesInside;\n }\n }\n return nok(code);\n }\n\n /**\n * In slashes.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^\n * ```\n *\n * @type {State}\n */\n function protocolSlashesInside(code) {\n if (code === 47) {\n effects.consume(code);\n if (seen) {\n return afterProtocol;\n }\n seen = true;\n return protocolSlashesInside;\n }\n return nok(code);\n }\n\n /**\n * After protocol, before domain.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function afterProtocol(code) {\n // To do: this is different from `markdown-rs`:\n // https://github.com/wooorm/markdown-rs/blob/b3a921c761309ae00a51fe348d8a43adbc54b518/src/construct/gfm_autolink_literal.rs#L172-L182\n return code === null || asciiControl(code) || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || unicodePunctuation(code) ? nok(code) : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code);\n }\n\n /**\n * After a protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolAfter(code) {\n effects.exit('literalAutolinkHttp');\n effects.exit('literalAutolink');\n return ok(code);\n }\n}\n\n/**\n * `www` prefix.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwPrefix(effects, ok, nok) {\n let size = 0;\n return wwwPrefixInside;\n\n /**\n * In www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^^^^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixInside(code) {\n if ((code === 87 || code === 119) && size < 3) {\n size++;\n effects.consume(code);\n return wwwPrefixInside;\n }\n if (code === 46 && size === 3) {\n effects.consume(code);\n return wwwPrefixAfter;\n }\n return nok(code);\n }\n\n /**\n * After www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixAfter(code) {\n // If there is *anything*, we can link.\n return code === null ? nok(code) : ok(code);\n }\n}\n\n/**\n * Domain.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDomain(effects, ok, nok) {\n /** @type {boolean | undefined} */\n let underscoreInLastSegment;\n /** @type {boolean | undefined} */\n let underscoreInLastLastSegment;\n /** @type {boolean | undefined} */\n let seen;\n return domainInside;\n\n /**\n * In domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^^^^^^^^^^\n * ```\n *\n * @type {State}\n */\n function domainInside(code) {\n // Check whether this marker, which is a trailing punctuation\n // marker, optionally followed by more trailing markers, and then\n // followed by an end.\n if (code === 46 || code === 95) {\n return effects.check(trail, domainAfter, domainAtPunctuation)(code);\n }\n\n // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can\n // occur, which sounds like ASCII only, but they also support `www.點看.com`,\n // so that’s Unicode.\n // Instead of some new production for Unicode alphanumerics, markdown\n // already has that for Unicode punctuation and whitespace, so use those.\n // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L12>.\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || code !== 45 && unicodePunctuation(code)) {\n return domainAfter(code);\n }\n seen = true;\n effects.consume(code);\n return domainInside;\n }\n\n /**\n * In domain, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function domainAtPunctuation(code) {\n // There is an underscore in the last segment of the domain\n if (code === 95) {\n underscoreInLastSegment = true;\n }\n // Otherwise, it’s a `.`: save the last segment underscore in the\n // penultimate segment slot.\n else {\n underscoreInLastLastSegment = underscoreInLastSegment;\n underscoreInLastSegment = undefined;\n }\n effects.consume(code);\n return domainInside;\n }\n\n /**\n * After domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^\n * ```\n *\n * @type {State} */\n function domainAfter(code) {\n // Note: that’s GH says a dot is needed, but it’s not true:\n // <https://github.com/github/cmark-gfm/issues/279>\n if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n return nok(code);\n }\n return ok(code);\n }\n}\n\n/**\n * Path.\n *\n * ```markdown\n * > | a https://example.org/stuff b\n * ^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePath(effects, ok) {\n let sizeOpen = 0;\n let sizeClose = 0;\n return pathInside;\n\n /**\n * In path.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^\n * ```\n *\n * @type {State}\n */\n function pathInside(code) {\n if (code === 40) {\n sizeOpen++;\n effects.consume(code);\n return pathInside;\n }\n\n // To do: `markdown-rs` also needs this.\n // If this is a paren, and there are less closings than openings,\n // we don’t check for a trail.\n if (code === 41 && sizeClose < sizeOpen) {\n return pathAtPunctuation(code);\n }\n\n // Check whether this trailing punctuation marker is optionally\n // followed by more trailing markers, and then followed\n // by an end.\n if (code === 33 || code === 34 || code === 38 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 60 || code === 63 || code === 93 || code === 95 || code === 126) {\n return effects.check(trail, ok, pathAtPunctuation)(code);\n }\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n effects.consume(code);\n return pathInside;\n }\n\n /**\n * In path, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com/a\"b\n * ^\n * ```\n *\n * @type {State}\n */\n function pathAtPunctuation(code) {\n // Count closing parens.\n if (code === 41) {\n sizeClose++;\n }\n effects.consume(code);\n return pathInside;\n }\n}\n\n/**\n * Trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the entire trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | https://example.com\").\n * ^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTrail(effects, ok, nok) {\n return trail;\n\n /**\n * In trail of domain or path.\n *\n * ```markdown\n * > | https://example.com\").\n * ^\n * ```\n *\n * @type {State}\n */\n function trail(code) {\n // Regular trailing punctuation.\n if (code === 33 || code === 34 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 63 || code === 95 || code === 126) {\n effects.consume(code);\n return trail;\n }\n\n // `&` followed by one or more alphabeticals and then a `;`, is\n // as a whole considered as trailing punctuation.\n // In all other cases, it is considered as continuation of the URL.\n if (code === 38) {\n effects.consume(code);\n return trailCharacterReferenceStart;\n }\n\n // Needed because we allow literals after `[`, as we fix:\n // <https://github.com/github/cmark-gfm/issues/278>.\n // Check that it is not followed by `(` or `[`.\n if (code === 93) {\n effects.consume(code);\n return trailBracketAfter;\n }\n if (\n // `<` is an end.\n code === 60 ||\n // So is whitespace.\n code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n return nok(code);\n }\n\n /**\n * In trail, after `]`.\n *\n * > 👉 **Note**: this deviates from `cmark-gfm` to fix a bug.\n * > See end of <https://github.com/github/cmark-gfm/issues/278> for more.\n *\n * ```markdown\n * > | https://example.com](\n * ^\n * ```\n *\n * @type {State}\n */\n function trailBracketAfter(code) {\n // Whitespace or something that could start a resource or reference is the end.\n // Switch back to trail otherwise.\n if (code === null || code === 40 || code === 91 || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n return trail(code);\n }\n\n /**\n * In character-reference like trail, after `&`.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharacterReferenceStart(code) {\n // When non-alpha, it’s not a trail.\n return asciiAlpha(code) ? trailCharacterReferenceInside(code) : nok(code);\n }\n\n /**\n * In character-reference like trail.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharacterReferenceInside(code) {\n // Switch back to trail if this is well-formed.\n if (code === 59) {\n effects.consume(code);\n return trail;\n }\n if (asciiAlpha(code)) {\n effects.consume(code);\n return trailCharacterReferenceInside;\n }\n\n // It’s not a trail.\n return nok(code);\n }\n}\n\n/**\n * Dot in email domain trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | contact@example.org.\n * ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailDomainDotTrail(effects, ok, nok) {\n return start;\n\n /**\n * Dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Must be dot.\n effects.consume(code);\n return after;\n }\n\n /**\n * After dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Not a trail if alphanumeric.\n return asciiAlphanumeric(code) ? nok(code) : ok(code);\n }\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L156>.\n *\n * @type {Previous}\n */\nfunction previousWww(code) {\n return code === null || code === 40 || code === 42 || code === 95 || code === 91 || code === 93 || code === 126 || markdownLineEndingOrSpace(code);\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L214>.\n *\n * @type {Previous}\n */\nfunction previousProtocol(code) {\n return !asciiAlpha(code);\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previousEmail(code) {\n // Do not allow a slash “inside” atext.\n // The reference code is a bit weird, but that’s what it results in.\n // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L307>.\n // Other than slash, every preceding character is allowed.\n return !(code === 47 || gfmAtext(code));\n}\n\n/**\n * @param {Code} code\n * @returns {boolean}\n */\nfunction gfmAtext(code) {\n return code === 43 || code === 45 || code === 46 || code === 95 || asciiAlphanumeric(code);\n}\n\n/**\n * @param {Array<Event>} events\n * @returns {boolean}\n */\nfunction previousUnbalanced(events) {\n let index = events.length;\n let result = false;\n while (index--) {\n const token = events[index][1];\n if ((token.type === 'labelLink' || token.type === 'labelImage') && !token._balanced) {\n result = true;\n break;\n }\n\n // If we’ve seen this token, and it was marked as not having any unbalanced\n // bracket before it, we can exit.\n if (token._gfmAutolinkLiteralWalkedInto) {\n result = false;\n break;\n }\n }\n if (events.length > 0 && !result) {\n // Mark the last token as “walked into” w/o finding\n // anything.\n events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true;\n }\n return result;\n}","/**\n * @import {Event, Exiter, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { blankLine } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nconst indent = {\n tokenize: tokenizeIndent,\n partial: true\n};\n\n// To do: micromark should support a `_hiddenGfmFootnoteSupport`, which only\n// affects label start (image).\n// That will let us drop `tokenizePotentialGfmFootnote*`.\n// It currently has a `_hiddenFootnoteSupport`, which affects that and more.\n// That can be removed when `micromark-extension-footnote` is archived.\n\n/**\n * Create an extension for `micromark` to enable GFM footnote syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to\n * enable GFM footnote syntax.\n */\nexport function gfmFootnote() {\n /** @type {Extension} */\n return {\n document: {\n [91]: {\n name: 'gfmFootnoteDefinition',\n tokenize: tokenizeDefinitionStart,\n continuation: {\n tokenize: tokenizeDefinitionContinuation\n },\n exit: gfmFootnoteDefinitionEnd\n }\n },\n text: {\n [91]: {\n name: 'gfmFootnoteCall',\n tokenize: tokenizeGfmFootnoteCall\n },\n [93]: {\n name: 'gfmPotentialFootnoteCall',\n add: 'after',\n tokenize: tokenizePotentialGfmFootnoteCall,\n resolveTo: resolveToPotentialGfmFootnoteCall\n }\n }\n };\n}\n\n// To do: remove after micromark update.\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePotentialGfmFootnoteCall(effects, ok, nok) {\n const self = this;\n let index = self.events.length;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n /** @type {Token} */\n let labelStart;\n\n // Find an opening.\n while (index--) {\n const token = self.events[index][1];\n if (token.type === \"labelImage\") {\n labelStart = token;\n break;\n }\n\n // Exit if we’ve walked far enough.\n if (token.type === 'gfmFootnoteCall' || token.type === \"labelLink\" || token.type === \"label\" || token.type === \"image\" || token.type === \"link\") {\n break;\n }\n }\n return start;\n\n /**\n * @type {State}\n */\n function start(code) {\n if (!labelStart || !labelStart._balanced) {\n return nok(code);\n }\n const id = normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n }));\n if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n return nok(code);\n }\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n return ok(code);\n }\n}\n\n// To do: remove after micromark update.\n/** @type {Resolver} */\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n let index = events.length;\n /** @type {Token | undefined} */\n let labelStart;\n\n // Find an opening.\n while (index--) {\n if (events[index][1].type === \"labelImage\" && events[index][0] === 'enter') {\n labelStart = events[index][1];\n break;\n }\n }\n // Change the `labelImageMarker` to a `data`.\n events[index + 1][1].type = \"data\";\n events[index + 3][1].type = 'gfmFootnoteCallLabelMarker';\n\n // The whole (without `!`):\n /** @type {Token} */\n const call = {\n type: 'gfmFootnoteCall',\n start: Object.assign({}, events[index + 3][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n };\n // The `^` marker\n /** @type {Token} */\n const marker = {\n type: 'gfmFootnoteCallMarker',\n start: Object.assign({}, events[index + 3][1].end),\n end: Object.assign({}, events[index + 3][1].end)\n };\n // Increment the end 1 character.\n marker.end.column++;\n marker.end.offset++;\n marker.end._bufferIndex++;\n /** @type {Token} */\n const string = {\n type: 'gfmFootnoteCallString',\n start: Object.assign({}, marker.end),\n end: Object.assign({}, events[events.length - 1][1].start)\n };\n /** @type {Token} */\n const chunk = {\n type: \"chunkString\",\n contentType: 'string',\n start: Object.assign({}, string.start),\n end: Object.assign({}, string.end)\n };\n\n /** @type {Array<Event>} */\n const replacement = [\n // Take the `labelImageMarker` (now `data`, the `!`)\n events[index + 1], events[index + 2], ['enter', call, context],\n // The `[`\n events[index + 3], events[index + 4],\n // The `^`.\n ['enter', marker, context], ['exit', marker, context],\n // Everything in between.\n ['enter', string, context], ['enter', chunk, context], ['exit', chunk, context], ['exit', string, context],\n // The ending (`]`, properly parsed and labelled).\n events[events.length - 2], events[events.length - 1], ['exit', call, context]];\n events.splice(index, events.length - index + 1, ...replacement);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeGfmFootnoteCall(effects, ok, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let size = 0;\n /** @type {boolean} */\n let data;\n\n // Note: the implementation of `markdown-rs` is different, because it houses\n // core *and* extensions in one project.\n // Therefore, it can include footnote logic inside `label-end`.\n // We can’t do that, but luckily, we can parse footnotes in a simpler way than\n // needed for labels.\n return start;\n\n /**\n * Start of footnote label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteCall');\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n return callStart;\n }\n\n /**\n * After `[`, at `^`.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callStart(code) {\n if (code !== 94) return nok(code);\n effects.enter('gfmFootnoteCallMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallMarker');\n effects.enter('gfmFootnoteCallString');\n effects.enter('chunkString').contentType = 'string';\n return callData;\n }\n\n /**\n * In label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callData(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n code === 93 && !data ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n return nok(code);\n }\n if (code === 93) {\n effects.exit('chunkString');\n const token = effects.exit('gfmFootnoteCallString');\n if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n return nok(code);\n }\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n effects.exit('gfmFootnoteCall');\n return ok;\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true;\n }\n size++;\n effects.consume(code);\n return code === 92 ? callEscape : callData;\n }\n\n /**\n * On character after escape.\n *\n * ```markdown\n * > | a [^b\\c] d\n * ^\n * ```\n *\n * @type {State}\n */\n function callEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code);\n size++;\n return callData;\n }\n return callData(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionStart(effects, ok, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n /** @type {string} */\n let identifier;\n let size = 0;\n /** @type {boolean | undefined} */\n let data;\n return start;\n\n /**\n * Start of GFM footnote definition.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteDefinition')._container = true;\n effects.enter('gfmFootnoteDefinitionLabel');\n effects.enter('gfmFootnoteDefinitionLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionLabelMarker');\n return labelAtMarker;\n }\n\n /**\n * In label, at caret.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAtMarker(code) {\n if (code === 94) {\n effects.enter('gfmFootnoteDefinitionMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionMarker');\n effects.enter('gfmFootnoteDefinitionLabelString');\n effects.enter('chunkString').contentType = 'string';\n return labelInside;\n }\n return nok(code);\n }\n\n /**\n * In label.\n *\n * > 👉 **Note**: `cmark-gfm` prevents whitespace from occurring in footnote\n * > definition labels.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelInside(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n code === 93 && !data ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n return nok(code);\n }\n if (code === 93) {\n effects.exit('chunkString');\n const token = effects.exit('gfmFootnoteDefinitionLabelString');\n identifier = normalizeIdentifier(self.sliceSerialize(token));\n effects.enter('gfmFootnoteDefinitionLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionLabelMarker');\n effects.exit('gfmFootnoteDefinitionLabel');\n return labelAfter;\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true;\n }\n size++;\n effects.consume(code);\n return code === 92 ? labelEscape : labelInside;\n }\n\n /**\n * After `\\`, at a special character.\n *\n * > 👉 **Note**: `cmark-gfm` currently does not support escaped brackets:\n * > <https://github.com/github/cmark-gfm/issues/240>\n *\n * ```markdown\n * > | [^a\\*b]: c\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code);\n size++;\n return labelInside;\n }\n return labelInside(code);\n }\n\n /**\n * After definition label.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAfter(code) {\n if (code === 58) {\n effects.enter('definitionMarker');\n effects.consume(code);\n effects.exit('definitionMarker');\n if (!defined.includes(identifier)) {\n defined.push(identifier);\n }\n\n // Any whitespace after the marker is eaten, forming indented code\n // is not possible.\n // No space is also fine, just like a block quote marker.\n return factorySpace(effects, whitespaceAfter, 'gfmFootnoteDefinitionWhitespace');\n }\n return nok(code);\n }\n\n /**\n * After definition prefix.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function whitespaceAfter(code) {\n // `markdown-rs` has a wrapping token for the prefix that is closed here.\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionContinuation(effects, ok, nok) {\n /// Start of footnote definition continuation.\n ///\n /// ```markdown\n /// | [^a]: b\n /// > | c\n /// ^\n /// ```\n //\n // Either a blank line, which is okay, or an indented thing.\n return effects.check(blankLine, ok, effects.attempt(indent, ok, nok));\n}\n\n/** @type {Exiter} */\nfunction gfmFootnoteDefinitionEnd(effects) {\n effects.exit('gfmFootnoteDefinition');\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this;\n return factorySpace(effects, afterPrefix, 'gfmFootnoteDefinitionIndent', 4 + 1);\n\n /**\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === 'gfmFootnoteDefinitionIndent' && tail[2].sliceSerialize(tail[1], true).length === 4 ? ok(code) : nok(code);\n }\n}","/**\n * @import {Options} from 'micromark-extension-gfm-strikethrough'\n * @import {Event, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create an extension for `micromark` to enable GFM strikethrough syntax.\n *\n * @param {Options | null | undefined} [options={}]\n * Configuration.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions`, to\n * enable GFM strikethrough syntax.\n */\nexport function gfmStrikethrough(options) {\n const options_ = options || {};\n let single = options_.singleTilde;\n const tokenizer = {\n name: 'strikethrough',\n tokenize: tokenizeStrikethrough,\n resolveAll: resolveAllStrikethrough\n };\n if (single === null || single === undefined) {\n single = true;\n }\n return {\n text: {\n [126]: tokenizer\n },\n insideSpan: {\n null: [tokenizer]\n },\n attentionMarkers: {\n null: [126]\n }\n };\n\n /**\n * Take events and resolve strikethrough.\n *\n * @type {Resolver}\n */\n function resolveAllStrikethrough(events, context) {\n let index = -1;\n\n // Walk through all events.\n while (++index < events.length) {\n // Find a token that can close.\n if (events[index][0] === 'enter' && events[index][1].type === 'strikethroughSequenceTemporary' && events[index][1]._close) {\n let open = index;\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (events[open][0] === 'exit' && events[open][1].type === 'strikethroughSequenceTemporary' && events[open][1]._open &&\n // If the sizes are the same:\n events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {\n events[index][1].type = 'strikethroughSequence';\n events[open][1].type = 'strikethroughSequence';\n\n /** @type {Token} */\n const strikethrough = {\n type: 'strikethrough',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[index][1].end)\n };\n\n /** @type {Token} */\n const text = {\n type: 'strikethroughText',\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n };\n\n // Opening.\n /** @type {Array<Event>} */\n const nextEvents = [['enter', strikethrough, context], ['enter', events[open][1], context], ['exit', events[open][1], context], ['enter', text, context]];\n const insideSpan = context.parser.constructs.insideSpan.null;\n if (insideSpan) {\n // Between.\n splice(nextEvents, nextEvents.length, 0, resolveAll(insideSpan, events.slice(open + 1, index), context));\n }\n\n // Closing.\n splice(nextEvents, nextEvents.length, 0, [['exit', text, context], ['enter', events[index][1], context], ['exit', events[index][1], context], ['exit', strikethrough, context]]);\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - 2;\n break;\n }\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === 'strikethroughSequenceTemporary') {\n events[index][1].type = \"data\";\n }\n }\n return events;\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n function tokenizeStrikethrough(effects, ok, nok) {\n const previous = this.previous;\n const events = this.events;\n let size = 0;\n return start;\n\n /** @type {State} */\n function start(code) {\n if (previous === 126 && events[events.length - 1][1].type !== \"characterEscape\") {\n return nok(code);\n }\n effects.enter('strikethroughSequenceTemporary');\n return more(code);\n }\n\n /** @type {State} */\n function more(code) {\n const before = classifyCharacter(previous);\n if (code === 126) {\n // If this is the third marker, exit.\n if (size > 1) return nok(code);\n effects.consume(code);\n size++;\n return more;\n }\n if (size < 2 && !single) return nok(code);\n const token = effects.exit('strikethroughSequenceTemporary');\n const after = classifyCharacter(code);\n token._open = !after || after === 2 && Boolean(before);\n token._close = !before || before === 2 && Boolean(after);\n return ok(code);\n }\n }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n// Port of `edit_map.rs` from `markdown-rs`.\n// This should move to `markdown-js` later.\n\n// Deal with several changes in events, batching them together.\n//\n// Preferably, changes should be kept to a minimum.\n// Sometimes, it’s needed to change the list of events, because parsing can be\n// messy, and it helps to expose a cleaner interface of events to the compiler\n// and other users.\n// It can also help to merge many adjacent similar events.\n// And, in other cases, it’s needed to parse subcontent: pass some events\n// through another tokenizer and inject the result.\n\n/**\n * @typedef {[number, number, Array<Event>]} Change\n * @typedef {[number, number, number]} Jump\n */\n\n/**\n * Tracks a bunch of edits.\n */\nexport class EditMap {\n /**\n * Create a new edit map.\n */\n constructor() {\n /**\n * Record of changes.\n *\n * @type {Array<Change>}\n */\n this.map = [];\n }\n\n /**\n * Create an edit: a remove and/or add at a certain place.\n *\n * @param {number} index\n * @param {number} remove\n * @param {Array<Event>} add\n * @returns {undefined}\n */\n add(index, remove, add) {\n addImplementation(this, index, remove, add);\n }\n\n // To do: add this when moving to `micromark`.\n // /**\n // * Create an edit: but insert `add` before existing additions.\n // *\n // * @param {number} index\n // * @param {number} remove\n // * @param {Array<Event>} add\n // * @returns {undefined}\n // */\n // addBefore(index, remove, add) {\n // addImplementation(this, index, remove, add, true)\n // }\n\n /**\n * Done, change the events.\n *\n * @param {Array<Event>} events\n * @returns {undefined}\n */\n consume(events) {\n this.map.sort(function (a, b) {\n return a[0] - b[0];\n });\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (this.map.length === 0) {\n return;\n }\n\n // To do: if links are added in events, like they are in `markdown-rs`,\n // this is needed.\n // // Calculate jumps: where items in the current list move to.\n // /** @type {Array<Jump>} */\n // const jumps = []\n // let index = 0\n // let addAcc = 0\n // let removeAcc = 0\n // while (index < this.map.length) {\n // const [at, remove, add] = this.map[index]\n // removeAcc += remove\n // addAcc += add.length\n // jumps.push([at, removeAcc, addAcc])\n // index += 1\n // }\n //\n // . shiftLinks(events, jumps)\n\n let index = this.map.length;\n /** @type {Array<Array<Event>>} */\n const vecs = [];\n while (index > 0) {\n index -= 1;\n vecs.push(events.slice(this.map[index][0] + this.map[index][1]), this.map[index][2]);\n\n // Truncate rest.\n events.length = this.map[index][0];\n }\n vecs.push(events.slice());\n events.length = 0;\n let slice = vecs.pop();\n while (slice) {\n for (const element of slice) {\n events.push(element);\n }\n slice = vecs.pop();\n }\n\n // Truncate everything.\n this.map.length = 0;\n }\n}\n\n/**\n * Create an edit.\n *\n * @param {EditMap} editMap\n * @param {number} at\n * @param {number} remove\n * @param {Array<Event>} add\n * @returns {undefined}\n */\nfunction addImplementation(editMap, at, remove, add) {\n let index = 0;\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (remove === 0 && add.length === 0) {\n return;\n }\n while (index < editMap.map.length) {\n if (editMap.map[index][0] === at) {\n editMap.map[index][1] += remove;\n\n // To do: before not used by tables, use when moving to micromark.\n // if (before) {\n // add.push(...editMap.map[index][2])\n // editMap.map[index][2] = add\n // } else {\n editMap.map[index][2].push(...add);\n // }\n\n return;\n }\n index += 1;\n }\n editMap.map.push([at, remove, add]);\n}\n\n// /**\n// * Shift `previous` and `next` links according to `jumps`.\n// *\n// * This fixes links in case there are events removed or added between them.\n// *\n// * @param {Array<Event>} events\n// * @param {Array<Jump>} jumps\n// */\n// function shiftLinks(events, jumps) {\n// let jumpIndex = 0\n// let index = 0\n// let add = 0\n// let rm = 0\n\n// while (index < events.length) {\n// const rmCurr = rm\n\n// while (jumpIndex < jumps.length && jumps[jumpIndex][0] <= index) {\n// add = jumps[jumpIndex][2]\n// rm = jumps[jumpIndex][1]\n// jumpIndex += 1\n// }\n\n// // Ignore items that will be removed.\n// if (rm > rmCurr) {\n// index += rm - rmCurr\n// } else {\n// // ?\n// // if let Some(link) = &events[index].link {\n// // if let Some(next) = link.next {\n// // events[next].link.as_mut().unwrap().previous = Some(index + add - rm);\n// // while jumpIndex < jumps.len() && jumps[jumpIndex].0 <= next {\n// // add = jumps[jumpIndex].2;\n// // rm = jumps[jumpIndex].1;\n// // jumpIndex += 1;\n// // }\n// // events[index].link.as_mut().unwrap().next = Some(next + add - rm);\n// // index = next;\n// // continue;\n// // }\n// // }\n// index += 1\n// }\n// }\n// }","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n/**\n * @typedef {'center' | 'left' | 'none' | 'right'} Align\n */\n\n/**\n * Figure out the alignment of a GFM table.\n *\n * @param {Readonly<Array<Event>>} events\n * List of events.\n * @param {number} index\n * Table enter event.\n * @returns {Array<Align>}\n * List of aligns.\n */\nexport function gfmTableAlign(events, index) {\n let inDelimiterRow = false;\n /** @type {Array<Align>} */\n const align = [];\n while (index < events.length) {\n const event = events[index];\n if (inDelimiterRow) {\n if (event[0] === 'enter') {\n // Start of alignment value: set a new column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n if (event[1].type === 'tableContent') {\n align.push(events[index + 1][1].type === 'tableDelimiterMarker' ? 'left' : 'none');\n }\n }\n // Exits:\n // End of alignment value: change the column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n else if (event[1].type === 'tableContent') {\n if (events[index - 1][1].type === 'tableDelimiterMarker') {\n const alignIndex = align.length - 1;\n align[alignIndex] = align[alignIndex] === 'left' ? 'center' : 'right';\n }\n }\n // Done!\n else if (event[1].type === 'tableDelimiterRow') {\n break;\n }\n } else if (event[0] === 'enter' && event[1].type === 'tableDelimiterRow') {\n inDelimiterRow = true;\n }\n index += 1;\n }\n return align;\n}","/**\n * @import {Event, Extension, Point, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\n/**\n * @typedef {[number, number, number, number]} Range\n * Cell info.\n *\n * @typedef {0 | 1 | 2 | 3} RowKind\n * Where we are: `1` for head row, `2` for delimiter row, `3` for body row.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { EditMap } from './edit-map.js';\nimport { gfmTableAlign } from './infer.js';\n\n/**\n * Create an HTML extension for `micromark` to support GitHub tables syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * table syntax.\n */\nexport function gfmTable() {\n return {\n flow: {\n null: {\n name: 'table',\n tokenize: tokenizeTable,\n resolveAll: resolveTable\n }\n }\n };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTable(effects, ok, nok) {\n const self = this;\n let size = 0;\n let sizeB = 0;\n /** @type {boolean | undefined} */\n let seen;\n return start;\n\n /**\n * Start of a GFM table.\n *\n * If there is a valid table row or table head before, then we try to parse\n * another row.\n * Otherwise, we try to parse a head.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * > | | b |\n * ^\n * ```\n * @type {State}\n */\n function start(code) {\n let index = self.events.length - 1;\n while (index > -1) {\n const type = self.events[index][1].type;\n if (type === \"lineEnding\" ||\n // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n type === \"linePrefix\") index--;else break;\n }\n const tail = index > -1 ? self.events[index][1].type : null;\n const next = tail === 'tableHead' || tail === 'tableRow' ? bodyRowStart : headRowBefore;\n\n // Don’t allow lazy body rows.\n if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n return next(code);\n }\n\n /**\n * Before table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBefore(code) {\n effects.enter('tableHead');\n effects.enter('tableRow');\n return headRowStart(code);\n }\n\n /**\n * Before table head row, after whitespace.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowStart(code) {\n if (code === 124) {\n return headRowBreak(code);\n }\n\n // To do: micromark-js should let us parse our own whitespace in extensions,\n // like `markdown-rs`:\n //\n // ```js\n // // 4+ spaces.\n // if (markdownSpace(code)) {\n // return nok(code)\n // }\n // ```\n\n seen = true;\n // Count the first character, that isn’t a pipe, double.\n sizeB += 1;\n return headRowBreak(code);\n }\n\n /**\n * At break in table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * ^\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBreak(code) {\n if (code === null) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n // If anything other than one pipe (ignoring whitespace) was used, it’s fine.\n if (sizeB > 1) {\n sizeB = 0;\n // To do: check if this works.\n // Feel free to interrupt:\n self.interrupt = true;\n effects.exit('tableRow');\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return headDelimiterStart;\n }\n\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n if (markdownSpace(code)) {\n // To do: check if this is fine.\n // effects.attempt(State::Next(StateName::GfmTableHeadRowBreak), State::Nok)\n // State::Retry(space_or_tab(tokenizer))\n return factorySpace(effects, headRowBreak, \"whitespace\")(code);\n }\n sizeB += 1;\n if (seen) {\n seen = false;\n // Header cell count.\n size += 1;\n }\n if (code === 124) {\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n // Whether a delimiter was seen.\n seen = true;\n return headRowBreak;\n }\n\n // Anything else is cell data.\n effects.enter(\"data\");\n return headRowData(code);\n }\n\n /**\n * In table head row data.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit(\"data\");\n return headRowBreak(code);\n }\n effects.consume(code);\n return code === 92 ? headRowEscape : headRowData;\n }\n\n /**\n * In table head row escape.\n *\n * ```markdown\n * > | | a\\-b |\n * ^\n * | | ---- |\n * | | c |\n * ```\n *\n * @type {State}\n */\n function headRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code);\n return headRowData;\n }\n return headRowData(code);\n }\n\n /**\n * Before delimiter row.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterStart(code) {\n // Reset `interrupt`.\n self.interrupt = false;\n\n // Note: in `markdown-rs`, we need to handle piercing here too.\n if (self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n effects.enter('tableDelimiterRow');\n // Track if we’ve seen a `:` or `|`.\n seen = false;\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n }\n return headDelimiterBefore(code);\n }\n\n /**\n * Before delimiter row, after optional whitespace.\n *\n * Reused when a `|` is found later, to parse another cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterBefore(code) {\n if (code === 45 || code === 58) {\n return headDelimiterValueBefore(code);\n }\n if (code === 124) {\n seen = true;\n // If we start with a pipe, we open a cell marker.\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n return headDelimiterCellBefore;\n }\n\n // More whitespace / empty row not allowed at start.\n return headDelimiterNok(code);\n }\n\n /**\n * After `|`, before delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellBefore(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterValueBefore, \"whitespace\")(code);\n }\n return headDelimiterValueBefore(code);\n }\n\n /**\n * Before delimiter cell value.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterValueBefore(code) {\n // Align: left.\n if (code === 58) {\n sizeB += 1;\n seen = true;\n effects.enter('tableDelimiterMarker');\n effects.consume(code);\n effects.exit('tableDelimiterMarker');\n return headDelimiterLeftAlignmentAfter;\n }\n\n // Align: none.\n if (code === 45) {\n sizeB += 1;\n // To do: seems weird that this *isn’t* left aligned, but that state is used?\n return headDelimiterLeftAlignmentAfter(code);\n }\n if (code === null || markdownLineEnding(code)) {\n return headDelimiterCellAfter(code);\n }\n return headDelimiterNok(code);\n }\n\n /**\n * After delimiter cell left alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | :- |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterLeftAlignmentAfter(code) {\n if (code === 45) {\n effects.enter('tableDelimiterFiller');\n return headDelimiterFiller(code);\n }\n\n // Anything else is not ok after the left-align colon.\n return headDelimiterNok(code);\n }\n\n /**\n * In delimiter cell filler.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterFiller(code) {\n if (code === 45) {\n effects.consume(code);\n return headDelimiterFiller;\n }\n\n // Align is `center` if it was `left`, `right` otherwise.\n if (code === 58) {\n seen = true;\n effects.exit('tableDelimiterFiller');\n effects.enter('tableDelimiterMarker');\n effects.consume(code);\n effects.exit('tableDelimiterMarker');\n return headDelimiterRightAlignmentAfter;\n }\n effects.exit('tableDelimiterFiller');\n return headDelimiterRightAlignmentAfter(code);\n }\n\n /**\n * After delimiter cell right alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterRightAlignmentAfter(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterCellAfter, \"whitespace\")(code);\n }\n return headDelimiterCellAfter(code);\n }\n\n /**\n * After delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellAfter(code) {\n if (code === 124) {\n return headDelimiterBefore(code);\n }\n if (code === null || markdownLineEnding(code)) {\n // Exit when:\n // * there was no `:` or `|` at all (it’s a thematic break or setext\n // underline instead)\n // * the header cell count is not the delimiter cell count\n if (!seen || size !== sizeB) {\n return headDelimiterNok(code);\n }\n\n // Note: in markdown-rs`, a reset is needed here.\n effects.exit('tableDelimiterRow');\n effects.exit('tableHead');\n // To do: in `markdown-rs`, resolvers need to be registered manually.\n // effects.register_resolver(ResolveName::GfmTable)\n return ok(code);\n }\n return headDelimiterNok(code);\n }\n\n /**\n * In delimiter row, at a disallowed byte.\n *\n * ```markdown\n * | | a |\n * > | | x |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterNok(code) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n\n /**\n * Before table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowStart(code) {\n // Note: in `markdown-rs` we need to manually take care of a prefix,\n // but in `micromark-js` that is done for us, so if we’re here, we’re\n // never at whitespace.\n effects.enter('tableRow');\n return bodyRowBreak(code);\n }\n\n /**\n * At break in table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ^\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowBreak(code) {\n if (code === 124) {\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n return bodyRowBreak;\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit('tableRow');\n return ok(code);\n }\n if (markdownSpace(code)) {\n return factorySpace(effects, bodyRowBreak, \"whitespace\")(code);\n }\n\n // Anything else is cell content.\n effects.enter(\"data\");\n return bodyRowData(code);\n }\n\n /**\n * In table body row data.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit(\"data\");\n return bodyRowBreak(code);\n }\n effects.consume(code);\n return code === 92 ? bodyRowEscape : bodyRowData;\n }\n\n /**\n * In table body row escape.\n *\n * ```markdown\n * | | a |\n * | | ---- |\n * > | | b\\-c |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code);\n return bodyRowData;\n }\n return bodyRowData(code);\n }\n}\n\n/** @type {Resolver} */\n\nfunction resolveTable(events, context) {\n let index = -1;\n let inFirstCellAwaitingPipe = true;\n /** @type {RowKind} */\n let rowKind = 0;\n /** @type {Range} */\n let lastCell = [0, 0, 0, 0];\n /** @type {Range} */\n let cell = [0, 0, 0, 0];\n let afterHeadAwaitingFirstBodyRow = false;\n let lastTableEnd = 0;\n /** @type {Token | undefined} */\n let currentTable;\n /** @type {Token | undefined} */\n let currentBody;\n /** @type {Token | undefined} */\n let currentCell;\n const map = new EditMap();\n while (++index < events.length) {\n const event = events[index];\n const token = event[1];\n if (event[0] === 'enter') {\n // Start of head.\n if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = false;\n\n // Inject previous (body end and) table end.\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n currentBody = undefined;\n lastTableEnd = 0;\n }\n\n // Inject table start.\n currentTable = {\n type: 'table',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map.add(index, 0, [['enter', currentTable, context]]);\n } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n inFirstCellAwaitingPipe = true;\n currentCell = undefined;\n lastCell = [0, 0, 0, 0];\n cell = [0, index + 1, 0, 0];\n\n // Inject table body start.\n if (afterHeadAwaitingFirstBodyRow) {\n afterHeadAwaitingFirstBodyRow = false;\n currentBody = {\n type: 'tableBody',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map.add(index, 0, [['enter', currentBody, context]]);\n }\n rowKind = token.type === 'tableDelimiterRow' ? 2 : currentBody ? 3 : 1;\n }\n // Cell data.\n else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n inFirstCellAwaitingPipe = false;\n\n // First value in cell.\n if (cell[2] === 0) {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n lastCell = [0, 0, 0, 0];\n }\n cell[2] = index;\n }\n } else if (token.type === 'tableCellDivider') {\n if (inFirstCellAwaitingPipe) {\n inFirstCellAwaitingPipe = false;\n } else {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n }\n lastCell = cell;\n cell = [lastCell[1], index, 0, 0];\n }\n }\n }\n // Exit events.\n else if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = true;\n lastTableEnd = index;\n } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n lastTableEnd = index;\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, index, currentCell);\n } else if (cell[1] !== 0) {\n currentCell = flushCell(map, context, cell, rowKind, index, currentCell);\n }\n rowKind = 0;\n } else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n cell[3] = index;\n }\n }\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n }\n map.consume(context.events);\n\n // To do: move this into `html`, when events are exposed there.\n // That’s what `markdown-rs` does.\n // That needs updates to `mdast-util-gfm-table`.\n index = -1;\n while (++index < context.events.length) {\n const event = context.events[index];\n if (event[0] === 'enter' && event[1].type === 'table') {\n event[1]._align = gfmTableAlign(context.events, index);\n }\n }\n return events;\n}\n\n/**\n * Generate a cell.\n *\n * @param {EditMap} map\n * @param {Readonly<TokenizeContext>} context\n * @param {Readonly<Range>} range\n * @param {RowKind} rowKind\n * @param {number | undefined} rowEnd\n * @param {Token | undefined} previousCell\n * @returns {Token | undefined}\n */\n// eslint-disable-next-line max-params\nfunction flushCell(map, context, range, rowKind, rowEnd, previousCell) {\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCell' : 'tableCell'\n const groupName = rowKind === 1 ? 'tableHeader' : rowKind === 2 ? 'tableDelimiter' : 'tableData';\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCellValue' : 'tableCellText'\n const valueName = 'tableContent';\n\n // Insert an exit for the previous cell, if there is one.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[0] !== 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, range[0]));\n map.add(range[0], 0, [['exit', previousCell, context]]);\n }\n\n // Insert enter of this cell.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^^^^-- this cell\n // ```\n const now = getPoint(context.events, range[1]);\n previousCell = {\n type: groupName,\n start: Object.assign({}, now),\n // Note: correct end is set later.\n end: Object.assign({}, now)\n };\n map.add(range[1], 0, [['enter', previousCell, context]]);\n\n // Insert text start at first data start and end at last data end, and\n // remove events between.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[2] !== 0) {\n const relatedStart = getPoint(context.events, range[2]);\n const relatedEnd = getPoint(context.events, range[3]);\n /** @type {Token} */\n const valueToken = {\n type: valueName,\n start: Object.assign({}, relatedStart),\n end: Object.assign({}, relatedEnd)\n };\n map.add(range[2], 0, [['enter', valueToken, context]]);\n if (rowKind !== 2) {\n // Fix positional info on remaining events\n const start = context.events[range[2]];\n const end = context.events[range[3]];\n start[1].end = Object.assign({}, end[1].end);\n start[1].type = \"chunkText\";\n start[1].contentType = \"text\";\n\n // Remove if needed.\n if (range[3] > range[2] + 1) {\n const a = range[2] + 1;\n const b = range[3] - range[2] - 1;\n map.add(a, b, []);\n }\n }\n map.add(range[3] + 1, 0, [['exit', valueToken, context]]);\n }\n\n // Insert an exit for the last cell, if at the row end.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^^^-- this cell (the last one contains two “between” parts)\n // ```\n if (rowEnd !== undefined) {\n previousCell.end = Object.assign({}, getPoint(context.events, rowEnd));\n map.add(rowEnd, 0, [['exit', previousCell, context]]);\n previousCell = undefined;\n }\n return previousCell;\n}\n\n/**\n * Generate table end (and table body end).\n *\n * @param {Readonly<EditMap>} map\n * @param {Readonly<TokenizeContext>} context\n * @param {number} index\n * @param {Token} table\n * @param {Token | undefined} tableBody\n */\n// eslint-disable-next-line max-params\nfunction flushTableEnd(map, context, index, table, tableBody) {\n /** @type {Array<Event>} */\n const exits = [];\n const related = getPoint(context.events, index);\n if (tableBody) {\n tableBody.end = Object.assign({}, related);\n exits.push(['exit', tableBody, context]);\n }\n table.end = Object.assign({}, related);\n exits.push(['exit', table, context]);\n map.add(index + 1, 0, exits);\n}\n\n/**\n * @param {Readonly<Array<Event>>} events\n * @param {number} index\n * @returns {Readonly<Point>}\n */\nfunction getPoint(events, index) {\n const event = events[index];\n const side = event[0] === 'enter' ? 'start' : 'end';\n return event[1][side];\n}","/**\n * @import {Extension, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nconst tasklistCheck = {\n name: 'tasklistCheck',\n tokenize: tokenizeTasklistCheck\n};\n\n/**\n * Create an HTML extension for `micromark` to support GFM task list items\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM task list items when serializing to HTML.\n */\nexport function gfmTaskListItem() {\n return {\n text: {\n [91]: tasklistCheck\n }\n };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTasklistCheck(effects, ok, nok) {\n const self = this;\n return open;\n\n /**\n * At start of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (\n // Exit if there’s stuff before.\n self.previous !== null ||\n // Exit if not in the first content that is the first child of a list\n // item.\n !self._gfmTasklistFirstContentOfListItem) {\n return nok(code);\n }\n effects.enter('taskListCheck');\n effects.enter('taskListCheckMarker');\n effects.consume(code);\n effects.exit('taskListCheckMarker');\n return inside;\n }\n\n /**\n * In task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // Currently we match how GH works in files.\n // To match how GH works in comments, use `markdownSpace` (`[\\t ]`) instead\n // of `markdownLineEndingOrSpace` (`[\\t\\n\\r ]`).\n if (markdownLineEndingOrSpace(code)) {\n effects.enter('taskListCheckValueUnchecked');\n effects.consume(code);\n effects.exit('taskListCheckValueUnchecked');\n return close;\n }\n if (code === 88 || code === 120) {\n effects.enter('taskListCheckValueChecked');\n effects.consume(code);\n effects.exit('taskListCheckValueChecked');\n return close;\n }\n return nok(code);\n }\n\n /**\n * At close of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function close(code) {\n if (code === 93) {\n effects.enter('taskListCheckMarker');\n effects.consume(code);\n effects.exit('taskListCheckMarker');\n effects.exit('taskListCheck');\n return after;\n }\n return nok(code);\n }\n\n /**\n * @type {State}\n */\n function after(code) {\n // EOL in paragraph means there must be something else after it.\n if (markdownLineEnding(code)) {\n return ok(code);\n }\n\n // Space or tab?\n // Check what comes after.\n if (markdownSpace(code)) {\n return effects.check({\n tokenize: spaceThenNonSpace\n }, ok, nok)(code);\n }\n\n // EOF, or non-whitespace, both wrong.\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction spaceThenNonSpace(effects, ok, nok) {\n return factorySpace(effects, after, \"whitespace\");\n\n /**\n * After whitespace, after task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // EOF means there was nothing, so bad.\n // EOL means there’s content after it, so good.\n // Impossible to have more spaces.\n // Anything else is good.\n return code === null ? nok(code) : ok(code);\n }\n}","/**\n * @typedef {import('micromark-extension-gfm-footnote').HtmlOptions} HtmlOptions\n * @typedef {import('micromark-extension-gfm-strikethrough').Options} Options\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {\n combineExtensions,\n combineHtmlExtensions\n} from 'micromark-util-combine-extensions'\nimport {\n gfmAutolinkLiteral,\n gfmAutolinkLiteralHtml\n} from 'micromark-extension-gfm-autolink-literal'\nimport {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote'\nimport {\n gfmStrikethrough,\n gfmStrikethroughHtml\n} from 'micromark-extension-gfm-strikethrough'\nimport {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table'\nimport {gfmTagfilterHtml} from 'micromark-extension-gfm-tagfilter'\nimport {\n gfmTaskListItem,\n gfmTaskListItemHtml\n} from 'micromark-extension-gfm-task-list-item'\n\n/**\n * Create an extension for `micromark` to enable GFM syntax.\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n *\n * Passed to `micromark-extens-gfm-strikethrough`.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * syntax.\n */\nexport function gfm(options) {\n return combineExtensions([\n gfmAutolinkLiteral(),\n gfmFootnote(),\n gfmStrikethrough(options),\n gfmTable(),\n gfmTaskListItem()\n ])\n}\n\n/**\n * Create an extension for `micromark` to support GFM when serializing to HTML.\n *\n * @param {HtmlOptions | null | undefined} [options]\n * Configuration (optional).\n *\n * Passed to `micromark-extens-gfm-footnote`.\n * @returns {HtmlExtension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM when serializing to HTML.\n */\nexport function gfmHtml(options) {\n return combineHtmlExtensions([\n gfmAutolinkLiteralHtml(),\n gfmFootnoteHtml(options),\n gfmStrikethroughHtml(),\n gfmTableHtml(),\n gfmTagfilterHtml(),\n gfmTaskListItemHtml()\n ])\n}\n","/**\n * @import {Root} from 'mdast'\n * @import {Options} from 'remark-gfm'\n * @import {} from 'remark-parse'\n * @import {} from 'remark-stringify'\n * @import {Processor} from 'unified'\n */\n\nimport {gfmFromMarkdown, gfmToMarkdown} from 'mdast-util-gfm'\nimport {gfm} from 'micromark-extension-gfm'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Add support GFM (autolink literals, footnotes, strikethrough, tables,\n * tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkGfm(options) {\n // @ts-expect-error: TS is wrong about `this`.\n // eslint-disable-next-line unicorn/no-this-assignment\n const self = /** @type {Processor<Root>} */ (this)\n const settings = options || emptyOptions\n const data = self.data()\n\n const micromarkExtensions =\n data.micromarkExtensions || (data.micromarkExtensions = [])\n const fromMarkdownExtensions =\n data.fromMarkdownExtensions || (data.fromMarkdownExtensions = [])\n const toMarkdownExtensions =\n data.toMarkdownExtensions || (data.toMarkdownExtensions = [])\n\n micromarkExtensions.push(gfm(settings))\n fromMarkdownExtensions.push(gfmFromMarkdown())\n toMarkdownExtensions.push(gfmToMarkdown(settings))\n}\n","import { expectDomTypeError } from \"@milkdown/exception\";\nimport { paragraphSchema, listItemSchema } from \"@milkdown/preset-commonmark\";\nimport { InputRule } from \"@milkdown/prose/inputrules\";\nimport { $markAttr, $markSchema, $inputRule, $useKeymap, $command, $nodeSchema, $pasteRule, $prose, $remark } from \"@milkdown/utils\";\nimport { tableNodes, findTable, TableMap, CellSelection, goToNextCell, isInTable, moveTableRow, moveTableColumn, deleteTable, deleteColumn, deleteRow, selectedRect, addColumnBefore, addColumnAfter, setCellAttr, columnResizing, tableEditing } from \"@milkdown/prose/tables\";\nimport { commandsCtx } from \"@milkdown/core\";\nimport { markRule, findParentNodeClosestToPos, cloneTr, findParentNodeType } from \"@milkdown/prose\";\nimport { toggleMark } from \"@milkdown/prose/commands\";\nimport { Slice, Fragment } from \"@milkdown/prose/model\";\nimport { Selection, TextSelection, Plugin, PluginKey } from \"@milkdown/prose/state\";\nimport { imeSpan } from \"prosemirror-safari-ime-span\";\nimport remarkGFM from \"remark-gfm\";\nfunction withMeta(plugin, meta) {\n Object.assign(plugin, {\n meta: {\n package: \"@milkdown/preset-gfm\",\n ...meta\n }\n });\n return plugin;\n}\nconst strikethroughAttr = $markAttr(\"strike_through\");\nwithMeta(strikethroughAttr, {\n displayName: \"Attr<strikethrough>\",\n group: \"Strikethrough\"\n});\nconst strikethroughSchema = $markSchema(\"strike_through\", (ctx) => ({\n parseDOM: [\n { tag: \"del\" },\n {\n style: \"text-decoration\",\n getAttrs: (value) => value === \"line-through\"\n }\n ],\n toDOM: (mark) => [\"del\", ctx.get(strikethroughAttr.key)(mark)],\n parseMarkdown: {\n match: (node) => node.type === \"delete\",\n runner: (state, node, markType) => {\n state.openMark(markType);\n state.next(node.children);\n state.closeMark(markType);\n }\n },\n toMarkdown: {\n match: (mark) => mark.type.name === \"strike_through\",\n runner: (state, mark) => {\n state.withMark(mark, \"delete\");\n }\n }\n}));\nwithMeta(strikethroughSchema.mark, {\n displayName: \"MarkSchema<strikethrough>\",\n group: \"Strikethrough\"\n});\nwithMeta(strikethroughSchema.ctx, {\n displayName: \"MarkSchemaCtx<strikethrough>\",\n group: \"Strikethrough\"\n});\nconst toggleStrikethroughCommand = $command(\n \"ToggleStrikeThrough\",\n (ctx) => () => {\n return toggleMark(strikethroughSchema.type(ctx));\n }\n);\nwithMeta(toggleStrikethroughCommand, {\n displayName: \"Command<ToggleStrikethrough>\",\n group: \"Strikethrough\"\n});\nconst strikethroughInputRule = $inputRule((ctx) => {\n return markRule(\n new RegExp(\"(?<![\\\\w:/])(~{1,2})(.+?)\\\\1(?!\\\\w|\\\\/)\"),\n strikethroughSchema.type(ctx)\n );\n});\nwithMeta(strikethroughInputRule, {\n displayName: \"InputRule<strikethrough>\",\n group: \"Strikethrough\"\n});\nconst strikethroughKeymap = $useKeymap(\"strikeThroughKeymap\", {\n ToggleStrikethrough: {\n shortcuts: \"Mod-Alt-x\",\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(toggleStrikethroughCommand.key);\n }\n }\n});\nwithMeta(strikethroughKeymap.ctx, {\n displayName: \"KeymapCtx<strikethrough>\",\n group: \"Strikethrough\"\n});\nwithMeta(strikethroughKeymap.shortcuts, {\n displayName: \"Keymap<strikethrough>\",\n group: \"Strikethrough\"\n});\nconst originalSchema = tableNodes({\n tableGroup: \"block\",\n cellContent: \"paragraph\",\n cellAttributes: {\n alignment: {\n default: \"left\",\n getFromDOM: (dom) => dom.style.textAlign || \"left\",\n setDOMAttr: (value, attrs) => {\n attrs.style = `text-align: ${value || \"left\"}`;\n }\n }\n }\n});\nconst tableSchema = $nodeSchema(\"table\", () => ({\n ...originalSchema.table,\n content: \"table_header_row table_row+\",\n disableDropCursor: true,\n parseMarkdown: {\n match: (node) => node.type === \"table\",\n runner: (state, node, type) => {\n const align = node.align;\n const children = node.children.map((x, i) => ({\n ...x,\n align,\n isHeader: i === 0\n }));\n state.openNode(type);\n state.next(children);\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"table\",\n runner: (state, node) => {\n const firstLine = node.content.firstChild?.content;\n if (!firstLine) return;\n const align = [];\n firstLine.forEach((cell) => {\n align.push(cell.attrs.alignment);\n });\n state.openNode(\"table\", void 0, { align });\n state.next(node.content);\n state.closeNode();\n }\n }\n}));\nwithMeta(tableSchema.node, {\n displayName: \"NodeSchema<table>\",\n group: \"Table\"\n});\nwithMeta(tableSchema.ctx, {\n displayName: \"NodeSchemaCtx<table>\",\n group: \"Table\"\n});\nconst tableHeaderRowSchema = $nodeSchema(\"table_header_row\", () => ({\n ...originalSchema.table_row,\n disableDropCursor: true,\n content: \"(table_header)*\",\n parseDOM: [\n { tag: \"tr[data-is-header]\" },\n {\n tag: \"tr\",\n getAttrs: (dom) => {\n if (dom instanceof HTMLElement) {\n const hasHeader = dom.querySelector(\"th\");\n return hasHeader ? {} : false;\n }\n return false;\n }\n }\n ],\n toDOM() {\n return [\"tr\", { \"data-is-header\": true }, 0];\n },\n parseMarkdown: {\n match: (node) => Boolean(node.type === \"tableRow\" && node.isHeader),\n runner: (state, node, type) => {\n const align = node.align;\n const children = node.children.map((x, i) => ({\n ...x,\n align: align[i],\n isHeader: node.isHeader\n }));\n state.openNode(type);\n state.next(children);\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"table_header_row\",\n runner: (state, node) => {\n state.openNode(\"tableRow\", void 0, { isHeader: true });\n state.next(node.content);\n state.closeNode();\n }\n }\n}));\nwithMeta(tableHeaderRowSchema.node, {\n displayName: \"NodeSchema<tableHeaderRow>\",\n group: \"Table\"\n});\nwithMeta(tableHeaderRowSchema.ctx, {\n displayName: \"NodeSchemaCtx<tableHeaderRow>\",\n group: \"Table\"\n});\nconst tableRowSchema = $nodeSchema(\"table_row\", () => ({\n ...originalSchema.table_row,\n disableDropCursor: true,\n content: \"(table_cell)*\",\n parseMarkdown: {\n match: (node) => node.type === \"tableRow\",\n runner: (state, node, type) => {\n const align = node.align;\n const children = node.children.map((x, i) => ({\n ...x,\n align: align[i]\n }));\n state.openNode(type);\n state.next(children);\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"table_row\",\n runner: (state, node) => {\n if (node.content.size === 0) {\n return;\n }\n state.openNode(\"tableRow\");\n state.next(node.content);\n state.closeNode();\n }\n }\n}));\nwithMeta(tableRowSchema.node, {\n displayName: \"NodeSchema<tableRow>\",\n group: \"Table\"\n});\nwithMeta(tableRowSchema.ctx, {\n displayName: \"NodeSchemaCtx<tableRow>\",\n group: \"Table\"\n});\nconst tableCellSchema = $nodeSchema(\"table_cell\", () => ({\n ...originalSchema.table_cell,\n disableDropCursor: true,\n parseMarkdown: {\n match: (node) => node.type === \"tableCell\" && !node.isHeader,\n runner: (state, node, type) => {\n const align = node.align;\n state.openNode(type, { alignment: align }).openNode(state.schema.nodes.paragraph).next(node.children).closeNode().closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"table_cell\",\n runner: (state, node) => {\n state.openNode(\"tableCell\").next(node.content).closeNode();\n }\n }\n}));\nwithMeta(tableCellSchema.node, {\n displayName: \"NodeSchema<tableCell>\",\n group: \"Table\"\n});\nwithMeta(tableCellSchema.ctx, {\n displayName: \"NodeSchemaCtx<tableCell>\",\n group: \"Table\"\n});\nconst tableHeaderSchema = $nodeSchema(\"table_header\", () => ({\n ...originalSchema.table_header,\n disableDropCursor: true,\n parseMarkdown: {\n match: (node) => node.type === \"tableCell\" && !!node.isHeader,\n runner: (state, node, type) => {\n const align = node.align;\n state.openNode(type, { alignment: align });\n state.openNode(state.schema.nodes.paragraph);\n state.next(node.children);\n state.closeNode();\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"table_header\",\n runner: (state, node) => {\n state.openNode(\"tableCell\");\n state.next(node.content);\n state.closeNode();\n }\n }\n}));\nwithMeta(tableHeaderSchema.node, {\n displayName: \"NodeSchema<tableHeader>\",\n group: \"Table\"\n});\nwithMeta(tableHeaderSchema.ctx, {\n displayName: \"NodeSchemaCtx<tableHeader>\",\n group: \"Table\"\n});\nfunction createTable(ctx, rowsCount = 3, colsCount = 3) {\n const cells = Array(colsCount).fill(0).map(() => tableCellSchema.type(ctx).createAndFill());\n const headerCells = Array(colsCount).fill(0).map(() => tableHeaderSchema.type(ctx).createAndFill());\n const rows = Array(rowsCount).fill(0).map(\n (_, i) => i === 0 ? tableHeaderRowSchema.type(ctx).create(null, headerCells) : tableRowSchema.type(ctx).create(null, cells)\n );\n return tableSchema.type(ctx).create(null, rows);\n}\nfunction getCellsInCol(columnIndexes, selection) {\n const table = findTable(selection.$from);\n if (!table) return void 0;\n const map = TableMap.get(table.node);\n const indexes = Array.isArray(columnIndexes) ? columnIndexes : [columnIndexes];\n return indexes.filter((index) => index >= 0 && index <= map.width - 1).flatMap((index) => {\n const cells = map.cellsInRect({\n left: index,\n right: index + 1,\n top: 0,\n bottom: map.height\n });\n return cells.map((nodePos) => {\n const node = table.node.nodeAt(nodePos);\n const pos = nodePos + table.start;\n return { pos, start: pos + 1, node, depth: table.depth + 2 };\n });\n });\n}\nfunction getCellsInRow(rowIndex, selection) {\n const table = findTable(selection.$from);\n if (!table) {\n return;\n }\n const map = TableMap.get(table.node);\n const indexes = Array.isArray(rowIndex) ? rowIndex : [rowIndex];\n return indexes.filter((index) => index >= 0 && index <= map.height - 1).flatMap((index) => {\n const cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: index,\n bottom: index + 1\n });\n return cells.map((nodePos) => {\n const node = table.node.nodeAt(nodePos);\n const pos = nodePos + table.start;\n return { pos, start: pos + 1, node, depth: table.depth + 2 };\n });\n });\n}\nfunction selectLine(type) {\n return (index, pos) => (tr) => {\n pos = pos ?? tr.selection.from;\n const $pos = tr.doc.resolve(pos);\n const $node = findParentNodeClosestToPos(\n (node) => node.type.name === \"table\"\n )($pos);\n const table = $node ? {\n node: $node.node,\n from: $node.start\n } : void 0;\n const isRowSelection = type === \"row\";\n if (table) {\n const map = TableMap.get(table.node);\n if (index >= 0 && index < (isRowSelection ? map.height : map.width)) {\n const lastCell = map.positionAt(\n isRowSelection ? index : map.height - 1,\n isRowSelection ? map.width - 1 : index,\n table.node\n );\n const $lastCell = tr.doc.resolve(table.from + lastCell);\n const createCellSelection = isRowSelection ? CellSelection.rowSelection : CellSelection.colSelection;\n const firstCell = map.positionAt(\n isRowSelection ? index : 0,\n isRowSelection ? 0 : index,\n table.node\n );\n const $firstCell = tr.doc.resolve(table.from + firstCell);\n return cloneTr(\n tr.setSelection(\n createCellSelection($lastCell, $firstCell)\n )\n );\n }\n }\n return tr;\n };\n}\nconst selectRow = selectLine(\"row\");\nconst selectCol = selectLine(\"col\");\nfunction addRowWithAlignment(ctx, tr, { map, tableStart, table }, row) {\n const rowPos = Array(row).fill(0).reduce((acc, _, i) => {\n return acc + table.child(i).nodeSize;\n }, tableStart);\n const cells = Array(map.width).fill(0).map((_, col) => {\n const headerCol = table.nodeAt(map.map[col]);\n return tableCellSchema.type(ctx).createAndFill({ alignment: headerCol?.attrs.alignment });\n });\n tr.insert(rowPos, tableRowSchema.type(ctx).create(null, cells));\n return tr;\n}\nfunction getAllCellsInTable(selection) {\n const table = findTable(selection.$from);\n if (!table) return;\n const map = TableMap.get(table.node);\n const cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: 0,\n bottom: map.height\n });\n return cells.map((nodePos) => {\n const node = table.node.nodeAt(nodePos);\n const pos = nodePos + table.start;\n return { pos, start: pos + 1, node };\n });\n}\nfunction selectTable(tr) {\n const cells = getAllCellsInTable(tr.selection);\n if (cells && cells[0]) {\n const $firstCell = tr.doc.resolve(cells[0].pos);\n const last = cells[cells.length - 1];\n if (last) {\n const $lastCell = tr.doc.resolve(last.pos);\n return cloneTr(tr.setSelection(new CellSelection($lastCell, $firstCell)));\n }\n }\n return tr;\n}\nconst goToPrevTableCellCommand = $command(\n \"GoToPrevTableCell\",\n () => () => goToNextCell(-1)\n);\nwithMeta(goToPrevTableCellCommand, {\n displayName: \"Command<goToPrevTableCellCommand>\",\n group: \"Table\"\n});\nconst goToNextTableCellCommand = $command(\n \"GoToNextTableCell\",\n () => () => goToNextCell(1)\n);\nwithMeta(goToNextTableCellCommand, {\n displayName: \"Command<goToNextTableCellCommand>\",\n group: \"Table\"\n});\nconst exitTable = $command(\n \"ExitTable\",\n (ctx) => () => (state, dispatch) => {\n if (!isInTable(state)) return false;\n const { $head } = state.selection;\n const table = findParentNodeType($head, tableSchema.type(ctx));\n if (!table) return false;\n const { to } = table;\n const tr = state.tr.replaceWith(\n to,\n to,\n paragraphSchema.type(ctx).createAndFill()\n );\n tr.setSelection(Selection.near(tr.doc.resolve(to), 1)).scrollIntoView();\n dispatch?.(tr);\n return true;\n }\n);\nwithMeta(exitTable, {\n displayName: \"Command<breakTableCommand>\",\n group: \"Table\"\n});\nconst insertTableCommand = $command(\n \"InsertTable\",\n (ctx) => ({ row, col } = {}) => (state, dispatch) => {\n const { selection, tr } = state;\n const { from } = selection;\n const table = createTable(ctx, row, col);\n const _tr = tr.replaceSelectionWith(table);\n const sel = Selection.findFrom(_tr.doc.resolve(from), 1, true);\n if (sel) _tr.setSelection(sel);\n dispatch?.(_tr);\n return true;\n }\n);\nwithMeta(insertTableCommand, {\n displayName: \"Command<insertTableCommand>\",\n group: \"Table\"\n});\nconst moveRowCommand = $command(\n \"MoveRow\",\n () => ({ from, to, pos } = {}) => moveTableRow({\n from: from ?? 0,\n to: to ?? 0,\n pos\n })\n);\nwithMeta(moveRowCommand, {\n displayName: \"Command<moveRowCommand>\",\n group: \"Table\"\n});\nconst moveColCommand = $command(\n \"MoveCol\",\n () => ({ from, to, pos } = {}) => moveTableColumn({\n from: from ?? 0,\n to: to ?? 0,\n pos\n })\n);\nwithMeta(moveColCommand, {\n displayName: \"Command<moveColCommand>\",\n group: \"Table\"\n});\nconst selectRowCommand = $command(\n \"SelectRow\",\n () => (payload = { index: 0 }) => (state, dispatch) => {\n const { tr } = state;\n const result = dispatch?.(selectRow(payload.index, payload.pos)(tr));\n return Boolean(result);\n }\n);\nwithMeta(selectRowCommand, {\n displayName: \"Command<selectRowCommand>\",\n group: \"Table\"\n});\nconst selectColCommand = $command(\n \"SelectCol\",\n () => (payload = { index: 0 }) => (state, dispatch) => {\n const { tr } = state;\n const result = dispatch?.(selectCol(payload.index, payload.pos)(tr));\n return Boolean(result);\n }\n);\nwithMeta(selectColCommand, {\n displayName: \"Command<selectColCommand>\",\n group: \"Table\"\n});\nconst selectTableCommand = $command(\n \"SelectTable\",\n () => () => (state, dispatch) => {\n const { tr } = state;\n const result = dispatch?.(selectTable(tr));\n return Boolean(result);\n }\n);\nwithMeta(selectTableCommand, {\n displayName: \"Command<selectTableCommand>\",\n group: \"Table\"\n});\nconst deleteSelectedCellsCommand = $command(\n \"DeleteSelectedCells\",\n () => () => (state, dispatch) => {\n const { selection } = state;\n if (!(selection instanceof CellSelection)) return false;\n const isRow = selection.isRowSelection();\n const isCol = selection.isColSelection();\n if (isRow && isCol) return deleteTable(state, dispatch);\n if (isCol) return deleteColumn(state, dispatch);\n else return deleteRow(state, dispatch);\n }\n);\nwithMeta(deleteSelectedCellsCommand, {\n displayName: \"Command<deleteSelectedCellsCommand>\",\n group: \"Table\"\n});\nconst addColBeforeCommand = $command(\n \"AddColBefore\",\n () => () => addColumnBefore\n);\nwithMeta(addColBeforeCommand, {\n displayName: \"Command<addColBeforeCommand>\",\n group: \"Table\"\n});\nconst addColAfterCommand = $command(\n \"AddColAfter\",\n () => () => addColumnAfter\n);\nwithMeta(addColAfterCommand, {\n displayName: \"Command<addColAfterCommand>\",\n group: \"Table\"\n});\nconst addRowBeforeCommand = $command(\n \"AddRowBefore\",\n (ctx) => () => (state, dispatch) => {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addRowWithAlignment(ctx, state.tr, rect, rect.top));\n }\n return true;\n }\n);\nwithMeta(addRowBeforeCommand, {\n displayName: \"Command<addRowBeforeCommand>\",\n group: \"Table\"\n});\nconst addRowAfterCommand = $command(\n \"AddRowAfter\",\n (ctx) => () => (state, dispatch) => {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addRowWithAlignment(ctx, state.tr, rect, rect.bottom));\n }\n return true;\n }\n);\nwithMeta(addRowAfterCommand, {\n displayName: \"Command<addRowAfterCommand>\",\n group: \"Table\"\n});\nconst setAlignCommand = $command(\n \"SetAlign\",\n () => (alignment = \"left\") => setCellAttr(\"alignment\", alignment)\n);\nwithMeta(setAlignCommand, {\n displayName: \"Command<setAlignCommand>\",\n group: \"Table\"\n});\nconst insertTableInputRule = $inputRule(\n (ctx) => new InputRule(\n /^\\|(?<col>\\d+)[xX](?<row>\\d+)\\|\\s$/,\n (state, match, start, end) => {\n const $start = state.doc.resolve(start);\n if (!$start.node(-1).canReplaceWith(\n $start.index(-1),\n $start.indexAfter(-1),\n tableSchema.type(ctx)\n ))\n return null;\n const row = Math.max(Number(match.groups?.row ?? 0), 2);\n const tableNode = createTable(ctx, row, Number(match.groups?.col));\n const tr = state.tr.replaceRangeWith(start, end, tableNode);\n return tr.setSelection(TextSelection.create(tr.doc, start + 3)).scrollIntoView();\n }\n )\n);\nwithMeta(insertTableInputRule, {\n displayName: \"InputRule<insertTableInputRule>\",\n group: \"Table\"\n});\nconst tablePasteRule = $pasteRule((ctx) => ({\n run: (slice, _view, isPlainText) => {\n if (isPlainText) {\n return slice;\n }\n let fragment = slice.content;\n slice.content.forEach((node, _offset, index) => {\n if (node?.type !== tableSchema.type(ctx)) {\n return;\n }\n const rowsCount = node.childCount;\n const colsCount = node.lastChild?.childCount ?? 0;\n if (rowsCount === 0 || colsCount === 0) {\n fragment = fragment.replaceChild(\n index,\n paragraphSchema.type(ctx).create()\n );\n return;\n }\n const headerRow = node.firstChild;\n const needToFixHeaderRow = colsCount > 0 && headerRow && headerRow.childCount === 0;\n if (!needToFixHeaderRow) {\n return;\n }\n const headerCells = Array(colsCount).fill(0).map(() => tableHeaderSchema.type(ctx).createAndFill());\n const tableCells = new Slice(Fragment.from(headerCells), 0, 0);\n const newHeaderRow = headerRow.replace(0, 0, tableCells);\n const newTable = node.replace(\n 0,\n headerRow.nodeSize,\n new Slice(Fragment.from(newHeaderRow), 0, 0)\n );\n fragment = fragment.replaceChild(index, newTable);\n });\n return new Slice(Fragment.from(fragment), slice.openStart, slice.openEnd);\n }\n}));\nwithMeta(tablePasteRule, {\n displayName: \"PasteRule<table>\",\n group: \"Table\"\n});\nconst tableKeymap = $useKeymap(\"tableKeymap\", {\n NextCell: {\n priority: 100,\n shortcuts: [\"Mod-]\", \"Tab\"],\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(goToNextTableCellCommand.key);\n }\n },\n PrevCell: {\n shortcuts: [\"Mod-[\", \"Shift-Tab\"],\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(goToPrevTableCellCommand.key);\n }\n },\n ExitTable: {\n shortcuts: [\"Mod-Enter\", \"Enter\"],\n command: (ctx) => {\n const commands2 = ctx.get(commandsCtx);\n return () => commands2.call(exitTable.key);\n }\n }\n});\nwithMeta(tableKeymap.ctx, {\n displayName: \"KeymapCtx<table>\",\n group: \"Table\"\n});\nwithMeta(tableKeymap.shortcuts, {\n displayName: \"Keymap<table>\",\n group: \"Table\"\n});\nconst id$1 = \"footnote_definition\";\nconst markdownId = \"footnoteDefinition\";\nconst footnoteDefinitionSchema = $nodeSchema(\n \"footnote_definition\",\n () => ({\n group: \"block\",\n content: \"block+\",\n defining: true,\n attrs: {\n label: {\n default: \"\",\n validate: \"string\"\n }\n },\n parseDOM: [\n {\n tag: `dl[data-type=\"${id$1}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n label: dom.dataset.label\n };\n },\n contentElement: \"dd\"\n }\n ],\n toDOM: (node) => {\n const label = node.attrs.label;\n return [\n \"dl\",\n {\n // TODO: add a prosemirror plugin to sync label on change\n \"data-label\": label,\n \"data-type\": id$1\n },\n [\"dt\", label],\n [\"dd\", 0]\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === markdownId,\n runner: (state, node, type) => {\n state.openNode(type, {\n label: node.label\n }).next(node.children).closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === id$1,\n runner: (state, node) => {\n state.openNode(markdownId, void 0, {\n label: node.attrs.label,\n identifier: node.attrs.label\n }).next(node.content).closeNode();\n }\n }\n })\n);\nwithMeta(footnoteDefinitionSchema.ctx, {\n displayName: \"NodeSchemaCtx<footnodeDef>\",\n group: \"footnote\"\n});\nwithMeta(footnoteDefinitionSchema.node, {\n displayName: \"NodeSchema<footnodeDef>\",\n group: \"footnote\"\n});\nconst id = \"footnote_reference\";\nconst footnoteReferenceSchema = $nodeSchema(\n \"footnote_reference\",\n () => ({\n group: \"inline\",\n inline: true,\n atom: true,\n attrs: {\n label: {\n default: \"\",\n validate: \"string\"\n }\n },\n parseDOM: [\n {\n tag: `sup[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n label: dom.dataset.label\n };\n }\n }\n ],\n toDOM: (node) => {\n const label = node.attrs.label;\n return [\n \"sup\",\n {\n // TODO: add a prosemirror plugin to sync label on change\n \"data-label\": label,\n \"data-type\": id\n },\n label\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === \"footnoteReference\",\n runner: (state, node, type) => {\n state.addNode(type, {\n label: node.label\n });\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === id,\n runner: (state, node) => {\n state.addNode(\"footnoteReference\", void 0, void 0, {\n label: node.attrs.label,\n identifier: node.attrs.label\n });\n }\n }\n })\n);\nwithMeta(footnoteReferenceSchema.ctx, {\n displayName: \"NodeSchemaCtx<footnodeRef>\",\n group: \"footnote\"\n});\nwithMeta(footnoteReferenceSchema.node, {\n displayName: \"NodeSchema<footnodeRef>\",\n group: \"footnote\"\n});\nconst extendListItemSchemaForTask = listItemSchema.extendSchema(\n (prev) => {\n return (ctx) => {\n const baseSchema = prev(ctx);\n return {\n ...baseSchema,\n attrs: {\n ...baseSchema.attrs,\n checked: {\n default: null,\n validate: \"boolean|null\"\n }\n },\n parseDOM: [\n {\n tag: 'li[data-item-type=\"task\"]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n label: dom.dataset.label,\n listType: dom.dataset.listType,\n spread: dom.dataset.spread,\n checked: dom.dataset.checked ? dom.dataset.checked === \"true\" : null\n };\n }\n },\n ...baseSchema?.parseDOM || []\n ],\n toDOM: (node) => {\n if (baseSchema.toDOM && node.attrs.checked == null)\n return baseSchema.toDOM(node);\n return [\n \"li\",\n {\n \"data-item-type\": \"task\",\n \"data-label\": node.attrs.label,\n \"data-list-type\": node.attrs.listType,\n \"data-spread\": node.attrs.spread,\n \"data-checked\": node.attrs.checked\n },\n 0\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === \"listItem\",\n runner: (state, node, type) => {\n if (node.checked == null) {\n baseSchema.parseMarkdown.runner(state, node, type);\n return;\n }\n const label = node.label != null ? `${node.label}.` : \"•\";\n const checked = node.checked != null ? Boolean(node.checked) : null;\n const listType = node.label != null ? \"ordered\" : \"bullet\";\n const spread = node.spread != null ? `${node.spread}` : \"true\";\n state.openNode(type, { label, listType, spread, checked });\n state.next(node.children);\n state.closeNode();\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"list_item\",\n runner: (state, node) => {\n if (node.attrs.checked == null) {\n baseSchema.toMarkdown.runner(state, node);\n return;\n }\n const label = node.attrs.label;\n const listType = node.attrs.listType;\n const spread = node.attrs.spread === \"true\";\n const checked = node.attrs.checked;\n state.openNode(\"listItem\", void 0, {\n label,\n listType,\n spread,\n checked\n });\n state.next(node.content);\n state.closeNode();\n }\n }\n };\n };\n }\n);\nwithMeta(extendListItemSchemaForTask.node, {\n displayName: \"NodeSchema<taskListItem>\",\n group: \"ListItem\"\n});\nwithMeta(extendListItemSchemaForTask.ctx, {\n displayName: \"NodeSchemaCtx<taskListItem>\",\n group: \"ListItem\"\n});\nconst wrapInTaskListInputRule = $inputRule(() => {\n return new InputRule(\n /^\\[(?<checked>\\s|x)\\]\\s$/,\n (state, match, start, end) => {\n const pos = state.doc.resolve(start);\n let depth = 0;\n let node = pos.node(depth);\n while (node && node.type.name !== \"list_item\") {\n depth--;\n node = pos.node(depth);\n }\n if (!node || node.attrs.checked != null) return null;\n const checked = Boolean(match.groups?.checked === \"x\");\n const finPos = pos.before(depth);\n const tr = state.tr;\n tr.deleteRange(start, end).setNodeMarkup(finPos, void 0, {\n ...node.attrs,\n checked\n });\n return tr;\n }\n );\n});\nwithMeta(wrapInTaskListInputRule, {\n displayName: \"InputRule<wrapInTaskListInputRule>\",\n group: \"ListItem\"\n});\nconst keymap = [\n strikethroughKeymap,\n tableKeymap\n].flat();\nconst inputRules = [\n insertTableInputRule,\n wrapInTaskListInputRule\n];\nconst markInputRules = [strikethroughInputRule];\nconst pasteRules = [tablePasteRule];\nconst autoInsertSpanPlugin = $prose(() => imeSpan);\nwithMeta(autoInsertSpanPlugin, {\n displayName: \"Prose<autoInsertSpanPlugin>\",\n group: \"Prose\"\n});\nconst columnResizingPlugin = $prose(() => columnResizing({}));\nwithMeta(columnResizingPlugin, {\n displayName: \"Prose<columnResizingPlugin>\",\n group: \"Prose\"\n});\nconst tableEditingPlugin = $prose(\n () => tableEditing({ allowTableNodeSelection: true })\n);\nwithMeta(tableEditingPlugin, {\n displayName: \"Prose<tableEditingPlugin>\",\n group: \"Prose\"\n});\nconst remarkGFMPlugin = $remark(\"remarkGFM\", () => remarkGFM);\nwithMeta(remarkGFMPlugin.plugin, {\n displayName: \"Remark<remarkGFMPlugin>\",\n group: \"Remark\"\n});\nwithMeta(remarkGFMPlugin.options, {\n displayName: \"RemarkConfig<remarkGFMPlugin>\",\n group: \"Remark\"\n});\nconst pluginKey = new PluginKey(\"MILKDOWN_KEEP_TABLE_ALIGN_PLUGIN\");\nfunction getChildIndex(node, parent) {\n let index = 0;\n parent.forEach((child, _offset, i) => {\n if (child === node) index = i;\n });\n return index;\n}\nconst keepTableAlignPlugin = $prose(() => {\n return new Plugin({\n key: pluginKey,\n appendTransaction: (_tr, oldState, state) => {\n let tr;\n const check = (node, pos) => {\n if (!tr) tr = state.tr;\n if (node.type.name !== \"table_cell\") return;\n const $pos = state.doc.resolve(pos);\n const tableRow = $pos.node($pos.depth);\n const table = $pos.node($pos.depth - 1);\n const tableHeaderRow = table.firstChild;\n if (!tableHeaderRow) return;\n const index = getChildIndex(node, tableRow);\n const headerCell = tableHeaderRow.maybeChild(index);\n if (!headerCell) return;\n const align = headerCell.attrs.alignment;\n const currentAlign = node.attrs.alignment;\n if (align === currentAlign) return;\n tr.setNodeMarkup(pos, void 0, { ...node.attrs, alignment: align });\n };\n if (oldState.doc !== state.doc) state.doc.descendants(check);\n return tr;\n }\n });\n});\nwithMeta(keepTableAlignPlugin, {\n displayName: \"Prose<keepTableAlignPlugin>\",\n group: \"Prose\"\n});\nconst plugins = [\n keepTableAlignPlugin,\n autoInsertSpanPlugin,\n remarkGFMPlugin,\n tableEditingPlugin\n].flat();\nconst schema = [\n extendListItemSchemaForTask,\n tableSchema,\n tableHeaderRowSchema,\n tableRowSchema,\n tableHeaderSchema,\n tableCellSchema,\n footnoteDefinitionSchema,\n footnoteReferenceSchema,\n strikethroughAttr,\n strikethroughSchema\n].flat();\nconst commands = [\n goToNextTableCellCommand,\n goToPrevTableCellCommand,\n exitTable,\n insertTableCommand,\n moveRowCommand,\n moveColCommand,\n selectRowCommand,\n selectColCommand,\n selectTableCommand,\n deleteSelectedCellsCommand,\n addRowBeforeCommand,\n addRowAfterCommand,\n addColBeforeCommand,\n addColAfterCommand,\n setAlignCommand,\n toggleStrikethroughCommand\n];\nconst gfm = [\n schema,\n inputRules,\n pasteRules,\n markInputRules,\n keymap,\n commands,\n plugins\n].flat();\nexport {\n addColAfterCommand,\n addColBeforeCommand,\n addRowAfterCommand,\n addRowBeforeCommand,\n addRowWithAlignment,\n autoInsertSpanPlugin,\n columnResizingPlugin,\n commands,\n createTable,\n deleteSelectedCellsCommand,\n exitTable,\n extendListItemSchemaForTask,\n footnoteDefinitionSchema,\n footnoteReferenceSchema,\n getAllCellsInTable,\n getCellsInCol,\n getCellsInRow,\n gfm,\n goToNextTableCellCommand,\n goToPrevTableCellCommand,\n inputRules,\n insertTableCommand,\n insertTableInputRule,\n keepTableAlignPlugin,\n keymap,\n markInputRules,\n moveColCommand,\n moveRowCommand,\n pasteRules,\n plugins,\n remarkGFMPlugin,\n schema,\n selectCol,\n selectColCommand,\n selectLine,\n selectRow,\n selectRowCommand,\n selectTable,\n selectTableCommand,\n setAlignCommand,\n strikethroughAttr,\n strikethroughInputRule,\n strikethroughKeymap,\n strikethroughSchema,\n tableCellSchema,\n tableEditingPlugin,\n tableHeaderRowSchema,\n tableHeaderSchema,\n tableKeymap,\n tablePasteRule,\n tableRowSchema,\n tableSchema,\n toggleStrikethroughCommand,\n wrapInTaskListInputRule\n};\n//# sourceMappingURL=index.js.map\n","import { EditorStatus, editorViewCtx, Editor, rootCtx, defaultValueCtx, editorViewOptionsCtx } from '@milkdown/kit/core';\nimport { clipboard } from '@milkdown/kit/plugin/clipboard';\nimport { history } from '@milkdown/kit/plugin/history';\nimport { indentConfig, indent } from '@milkdown/kit/plugin/indent';\nimport { listenerCtx, listener } from '@milkdown/kit/plugin/listener';\nimport { trailing } from '@milkdown/kit/plugin/trailing';\nimport { commonmark } from '@milkdown/kit/preset/commonmark';\nimport { gfm } from '@milkdown/kit/preset/gfm';\nimport { getMarkdown } from '@milkdown/kit/utils';\nimport { createSlice } from '@milkdown/kit/ctx';\n\nconst FeaturesCtx = createSlice([], \"FeaturesCtx\");\nconst CrepeCtx = createSlice({}, \"CrepeCtx\");\n\nvar __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _editor, _rootElement, _editable;\nclass CrepeBuilder {\n /// The constructor of the crepe builder.\n /// You can pass configs to the builder to configure the editor.\n constructor({ root, defaultValue = \"\" } = {}) {\n /// @internal\n __privateAdd(this, _editor);\n /// @internal\n __privateAdd(this, _rootElement);\n /// @internal\n __privateAdd(this, _editable, true);\n /// Add a feature to the editor.\n this.addFeature = (feature, config) => {\n feature(__privateGet(this, _editor), config);\n return this;\n };\n /// Create the editor.\n this.create = () => {\n return __privateGet(this, _editor).create();\n };\n /// Destroy the editor.\n this.destroy = () => {\n return __privateGet(this, _editor).destroy();\n };\n /// Set the readonly mode of the editor.\n this.setReadonly = (value) => {\n __privateSet(this, _editable, !value);\n __privateGet(this, _editor).action((ctx) => {\n if (__privateGet(this, _editor).status === EditorStatus.Created) {\n const view = ctx.get(editorViewCtx);\n view.setProps({\n editable: () => !value\n });\n }\n });\n return this;\n };\n /// Get the markdown content of the editor.\n this.getMarkdown = () => {\n return __privateGet(this, _editor).action(getMarkdown());\n };\n /// Register event listeners.\n this.on = (fn) => {\n if (__privateGet(this, _editor).status !== EditorStatus.Created) {\n __privateGet(this, _editor).config((ctx) => {\n const listener2 = ctx.get(listenerCtx);\n fn(listener2);\n });\n return this;\n }\n __privateGet(this, _editor).action((ctx) => {\n const listener2 = ctx.get(listenerCtx);\n fn(listener2);\n });\n return this;\n };\n var _a;\n __privateSet(this, _rootElement, (_a = typeof root === \"string\" ? document.querySelector(root) : root) != null ? _a : document.body);\n __privateSet(this, _editor, Editor.make().config((ctx) => {\n ctx.inject(CrepeCtx, this);\n ctx.inject(FeaturesCtx, []);\n }).config((ctx) => {\n ctx.set(rootCtx, __privateGet(this, _rootElement));\n ctx.set(defaultValueCtx, defaultValue);\n ctx.set(editorViewOptionsCtx, {\n editable: () => __privateGet(this, _editable)\n });\n ctx.update(indentConfig.key, (value) => ({\n ...value,\n size: 4\n }));\n }).use(commonmark).use(listener).use(history).use(indent).use(trailing).use(clipboard).use(gfm));\n }\n /// Get the milkdown editor instance.\n get editor() {\n return __privateGet(this, _editor);\n }\n /// Get the readonly state of the editor.\n get readonly() {\n return !__privateGet(this, _editable);\n }\n}\n_editor = new WeakMap();\n_rootElement = new WeakMap();\n_editable = new WeakMap();\n\nexport { CrepeBuilder };\n//# sourceMappingURL=builder.js.map\n","import { findParent, browser } from \"@milkdown/prose\";\nimport { $ctx, $prose } from \"@milkdown/utils\";\nimport { NodeSelection, PluginKey, Plugin } from \"@milkdown/prose/state\";\nimport { editorViewCtx } from \"@milkdown/core\";\nimport { throttle } from \"lodash-es\";\nimport { flip, offset, computePosition } from \"@floating-ui/dom\";\nfunction withMeta(plugin, meta) {\n Object.assign(plugin, {\n meta: {\n package: \"@milkdown/plugin-block\",\n ...meta\n }\n });\n return plugin;\n}\nconst defaultNodeFilter = (pos) => {\n const table = findParent((node) => node.type.name === \"table\")(pos);\n if (table) return false;\n return true;\n};\nconst blockConfig = $ctx(\n { filterNodes: defaultNodeFilter },\n \"blockConfig\"\n);\nwithMeta(blockConfig, {\n displayName: \"Ctx<blockConfig>\"\n});\nfunction selectRootNodeByDom(view, coords, filterNodes) {\n const root = view.dom.parentElement;\n if (!root) return null;\n try {\n const pos = view.posAtCoords({\n left: coords.x,\n top: coords.y\n })?.inside;\n if (pos == null || pos < 0) return null;\n let $pos = view.state.doc.resolve(pos);\n let node = view.state.doc.nodeAt(pos);\n let element = view.nodeDOM(pos);\n const filter = (needLookup) => {\n const checkDepth = $pos.depth >= 1 && $pos.index($pos.depth) === 0;\n const shouldLookUp = needLookup || checkDepth;\n if (!shouldLookUp) return;\n const ancestorPos = $pos.before($pos.depth);\n node = view.state.doc.nodeAt(ancestorPos);\n element = view.nodeDOM(ancestorPos);\n $pos = view.state.doc.resolve(ancestorPos);\n if (!filterNodes($pos, node)) filter(true);\n };\n const filterResult = filterNodes($pos, node);\n filter(!filterResult);\n if (!element || !node) return null;\n return { node, $pos, el: element };\n } catch {\n return null;\n }\n}\nconst brokenClipboardAPI = browser.ie && browser.ie_version < 15 || browser.ios && browser.webkit_version < 604;\nconst buffer = 20;\nclass BlockService {\n constructor() {\n this.#createSelection = () => {\n if (!this.#active) return null;\n const result = this.#active;\n const view = this.#view;\n if (view && NodeSelection.isSelectable(result.node)) {\n const nodeSelection = NodeSelection.create(\n view.state.doc,\n result.$pos.pos\n );\n view.dispatch(view.state.tr.setSelection(nodeSelection));\n view.focus();\n this.#activeSelection = nodeSelection;\n return nodeSelection;\n }\n return null;\n };\n this.#activeSelection = null;\n this.#active = null;\n this.#activeDOMRect = void 0;\n this.#dragging = false;\n this.#hide = () => {\n this.#notify?.({ type: \"hide\" });\n this.#active = null;\n };\n this.#show = (active) => {\n this.#active = active;\n this.#notify?.({ type: \"show\", active });\n };\n this.bind = (ctx, notify) => {\n this.#ctx = ctx;\n this.#notify = notify;\n };\n this.addEvent = (dom) => {\n dom.addEventListener(\"mousedown\", this.#handleMouseDown);\n dom.addEventListener(\"mouseup\", this.#handleMouseUp);\n dom.addEventListener(\"dragstart\", this.#handleDragStart);\n dom.addEventListener(\"dragend\", this.#handleDragEnd);\n };\n this.removeEvent = (dom) => {\n dom.removeEventListener(\"mousedown\", this.#handleMouseDown);\n dom.removeEventListener(\"mouseup\", this.#handleMouseUp);\n dom.removeEventListener(\"dragstart\", this.#handleDragStart);\n dom.removeEventListener(\"dragend\", this.#handleDragEnd);\n };\n this.unBind = () => {\n this.#notify = void 0;\n };\n this.#handleMouseDown = () => {\n this.#activeDOMRect = this.#active?.el.getBoundingClientRect();\n this.#createSelection();\n };\n this.#handleMouseUp = () => {\n if (!this.#dragging) {\n requestAnimationFrame(() => {\n if (!this.#activeDOMRect) return;\n this.#view?.focus();\n });\n return;\n }\n this.#dragging = false;\n this.#activeSelection = null;\n };\n this.#handleDragStart = (event) => {\n this.#dragging = true;\n const view = this.#view;\n if (!view) return;\n view.dom.dataset.dragging = \"true\";\n const selection = this.#activeSelection;\n if (event.dataTransfer && selection) {\n const slice = selection.content();\n event.dataTransfer.effectAllowed = \"copyMove\";\n const { dom, text } = view.serializeForClipboard(slice);\n event.dataTransfer.clearData();\n event.dataTransfer.setData(\n brokenClipboardAPI ? \"Text\" : \"text/html\",\n dom.innerHTML\n );\n if (!brokenClipboardAPI) event.dataTransfer.setData(\"text/plain\", text);\n const activeEl = this.#active?.el;\n if (activeEl) event.dataTransfer.setDragImage(activeEl, 0, 0);\n view.dragging = {\n slice,\n move: true\n };\n }\n };\n this.#handleDragEnd = () => {\n if (this.#view) {\n this.#dragEnd(this.#view);\n }\n };\n this.keydownCallback = (view) => {\n this.#hide();\n this.#dragging = false;\n view.dom.dataset.dragging = \"false\";\n return false;\n };\n this.#mousemoveCallback = throttle((view, event) => {\n if (!view.editable) return;\n const rect = view.dom.getBoundingClientRect();\n const x = rect.left + rect.width / 2;\n const dom = view.root.elementFromPoint(x, event.clientY);\n if (!(dom instanceof Element)) {\n this.#hide();\n return;\n }\n const filterNodes = this.#filterNodes;\n if (!filterNodes) return;\n const result = selectRootNodeByDom(\n view,\n { x, y: event.clientY },\n filterNodes\n );\n if (!result) {\n this.#hide();\n return;\n }\n this.#show(result);\n }, 200);\n this.mousemoveCallback = (view, event) => {\n if (view.composing || !view.editable) return false;\n this.#mousemoveCallback(view, event);\n return false;\n };\n this.dragoverCallback = (view, event) => {\n if (this.#dragging) {\n const root = this.#view?.dom.parentElement;\n if (!root) return false;\n const hasHorizontalScrollbar = root.scrollHeight > root.clientHeight;\n const rootRect = root.getBoundingClientRect();\n if (hasHorizontalScrollbar) {\n if (root.scrollTop > 0 && Math.abs(event.y - rootRect.y) < buffer) {\n const top = root.scrollTop > 10 ? root.scrollTop - 10 : 0;\n root.scrollTop = top;\n return false;\n }\n const totalHeight = Math.round(view.dom.getBoundingClientRect().height);\n const scrollBottom = Math.round(root.scrollTop + rootRect.height);\n if (scrollBottom < totalHeight && Math.abs(event.y - (rootRect.height + rootRect.y)) < buffer) {\n const top = root.scrollTop + 10;\n root.scrollTop = top;\n return false;\n }\n }\n }\n return false;\n };\n this.dragenterCallback = (view) => {\n if (!view.dragging) return;\n this.#dragging = true;\n view.dom.dataset.dragging = \"true\";\n };\n this.dragleaveCallback = (view, event) => {\n const x = event.clientX;\n const y = event.clientY;\n if (x < 0 || y < 0 || x > window.innerWidth || y > window.innerHeight) {\n this.#active = null;\n this.#dragEnd(view);\n }\n };\n this.dropCallback = (view) => {\n this.#dragEnd(view);\n return false;\n };\n this.dragendCallback = (view) => {\n this.#dragEnd(view);\n };\n this.#dragEnd = (view) => {\n this.#dragging = false;\n view.dom.dataset.dragging = \"false\";\n };\n }\n /// @internal\n #ctx;\n #createSelection;\n #activeSelection;\n #active;\n #activeDOMRect;\n #dragging;\n /// @internal\n get #filterNodes() {\n try {\n return this.#ctx?.get(blockConfig.key).filterNodes;\n } catch {\n return void 0;\n }\n }\n /// @internal\n get #view() {\n return this.#ctx?.get(editorViewCtx);\n }\n /// @internal\n #notify;\n #hide;\n #show;\n #handleMouseDown;\n #handleMouseUp;\n #handleDragStart;\n #handleDragEnd;\n #mousemoveCallback;\n #dragEnd;\n}\nconst blockService = $ctx(() => new BlockService(), \"blockService\");\nconst blockServiceInstance = $ctx(\n {},\n \"blockServiceInstance\"\n);\nwithMeta(blockService, {\n displayName: \"Ctx<blockService>\"\n});\nwithMeta(blockServiceInstance, {\n displayName: \"Ctx<blockServiceInstance>\"\n});\nconst blockSpec = $ctx({}, \"blockSpec\");\nwithMeta(blockSpec, {\n displayName: \"Ctx<blockSpec>\"\n});\nconst blockPlugin = $prose((ctx) => {\n const milkdownPluginBlockKey = new PluginKey(\"MILKDOWN_BLOCK\");\n const getService = ctx.get(blockService.key);\n const service = getService();\n ctx.set(blockServiceInstance.key, service);\n const spec = ctx.get(blockSpec.key);\n return new Plugin({\n key: milkdownPluginBlockKey,\n ...spec,\n props: {\n ...spec.props,\n handleDOMEvents: {\n drop: (view) => {\n return service.dropCallback(view);\n },\n pointermove: (view, event) => {\n return service.mousemoveCallback(view, event);\n },\n keydown: (view) => {\n return service.keydownCallback(view);\n },\n dragover: (view, event) => {\n return service.dragoverCallback(view, event);\n },\n dragleave: (view, event) => {\n return service.dragleaveCallback(view, event);\n },\n dragenter: (view) => {\n return service.dragenterCallback(view);\n },\n dragend: (view) => {\n return service.dragendCallback(view);\n }\n }\n }\n });\n});\nwithMeta(blockPlugin, {\n displayName: \"Prose<block>\"\n});\nclass BlockProvider {\n constructor(options) {\n this.#activeNode = null;\n this.#initialized = false;\n this.update = () => {\n requestAnimationFrame(() => {\n if (!this.#initialized) {\n try {\n this.#init();\n this.#initialized = true;\n } catch {\n }\n }\n });\n };\n this.destroy = () => {\n this.#service?.unBind();\n this.#service?.removeEvent(this.#element);\n this.#element.remove();\n };\n this.show = (active) => {\n const dom = active.el;\n const editorDom = this.#ctx.get(editorViewCtx).dom;\n const deriveContext = {\n ctx: this.#ctx,\n active,\n editorDom,\n blockDom: this.#element\n };\n const virtualEl = {\n contextElement: dom,\n getBoundingClientRect: () => {\n if (this.#getPosition) return this.#getPosition(deriveContext);\n return dom.getBoundingClientRect();\n }\n };\n const middleware = [flip()];\n if (this.#getOffset) {\n const offsetOption = this.#getOffset(deriveContext);\n const offsetExt = offset(offsetOption);\n middleware.push(offsetExt);\n }\n computePosition(virtualEl, this.#element, {\n placement: this.#getPlacement ? this.#getPlacement(deriveContext) : \"left\",\n middleware: [...middleware, ...this.#middleware],\n ...this.#floatingUIOptions\n }).then(({ x, y }) => {\n Object.assign(this.#element.style, {\n left: `${x}px`,\n top: `${y}px`\n });\n this.#element.dataset.show = \"true\";\n }).catch(console.error);\n };\n this.hide = () => {\n this.#element.dataset.show = \"false\";\n };\n this.#ctx = options.ctx;\n this.#element = options.content;\n this.#getOffset = options.getOffset;\n this.#getPosition = options.getPosition;\n this.#getPlacement = options.getPlacement;\n this.#middleware = options.middleware ?? [];\n this.#floatingUIOptions = options.floatingUIOptions ?? {};\n this.#root = options.root;\n this.hide();\n }\n /// @internal\n #element;\n /// @internal\n #ctx;\n /// @internal\n #service;\n #activeNode;\n /// @internal\n #root;\n #initialized;\n /// @internal\n #middleware;\n /// @internal\n #floatingUIOptions;\n /// @internal\n #getOffset;\n /// @internal\n #getPosition;\n /// @internal\n #getPlacement;\n /// The context of current active node.\n get active() {\n return this.#activeNode;\n }\n /// @internal\n #init() {\n const view = this.#ctx.get(editorViewCtx);\n const root = this.#root ?? view.dom.parentElement ?? document.body;\n root.appendChild(this.#element);\n const service = this.#ctx.get(blockServiceInstance.key);\n service.bind(this.#ctx, (message) => {\n if (message.type === \"hide\") {\n this.hide();\n this.#activeNode = null;\n } else if (message.type === \"show\") {\n this.show(message.active);\n this.#activeNode = message.active;\n }\n });\n this.#service = service;\n this.#service.addEvent(this.#element);\n this.#element.draggable = true;\n }\n}\nconst block = [\n blockSpec,\n blockConfig,\n blockService,\n blockServiceInstance,\n blockPlugin\n];\nblock.key = blockSpec.key;\nblock.pluginKey = blockPlugin.key;\nexport {\n BlockProvider,\n BlockService,\n block,\n blockConfig,\n blockPlugin,\n blockService,\n blockServiceInstance,\n blockSpec,\n defaultNodeFilter\n};\n//# sourceMappingURL=index.js.map\n","/**\n* @vue/shared v3.5.27\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n// @__NO_SIDE_EFFECTS__\nfunction makeMap(str) {\n const map = /* @__PURE__ */ Object.create(null);\n for (const key of str.split(\",\")) map[key] = 1;\n return (val) => val in map;\n}\n\nconst EMPTY_OBJ = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze({}) : {};\nconst EMPTY_ARR = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze([]) : [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n const i = arr.indexOf(el);\n if (i > -1) {\n arr.splice(i, 1);\n }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n // the leading comma is intentional so empty string \"\" is also included\n \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n const cache = /* @__PURE__ */ Object.create(null);\n return ((str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n });\n};\nconst camelizeRE = /-\\w/g;\nconst camelize = cacheStringFunction(\n (str) => {\n return str.replace(camelizeRE, (c) => c.slice(1).toUpperCase());\n }\n);\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction((str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction(\n (str) => {\n const s = str ? `on${capitalize(str)}` : ``;\n return s;\n }\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, ...arg) => {\n for (let i = 0; i < fns.length; i++) {\n fns[i](...arg);\n }\n};\nconst def = (obj, key, value, writable = false) => {\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: false,\n writable,\n value\n });\n};\nconst looseToNumber = (val) => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n const n = isString(val) ? Number(val) : NaN;\n return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\nfunction genCacheKey(source, options) {\n return source + JSON.stringify(\n options,\n (_, val) => typeof val === \"function\" ? val.toString() : val\n );\n}\n\nconst PatchFlags = {\n \"TEXT\": 1,\n \"1\": \"TEXT\",\n \"CLASS\": 2,\n \"2\": \"CLASS\",\n \"STYLE\": 4,\n \"4\": \"STYLE\",\n \"PROPS\": 8,\n \"8\": \"PROPS\",\n \"FULL_PROPS\": 16,\n \"16\": \"FULL_PROPS\",\n \"NEED_HYDRATION\": 32,\n \"32\": \"NEED_HYDRATION\",\n \"STABLE_FRAGMENT\": 64,\n \"64\": \"STABLE_FRAGMENT\",\n \"KEYED_FRAGMENT\": 128,\n \"128\": \"KEYED_FRAGMENT\",\n \"UNKEYED_FRAGMENT\": 256,\n \"256\": \"UNKEYED_FRAGMENT\",\n \"NEED_PATCH\": 512,\n \"512\": \"NEED_PATCH\",\n \"DYNAMIC_SLOTS\": 1024,\n \"1024\": \"DYNAMIC_SLOTS\",\n \"DEV_ROOT_FRAGMENT\": 2048,\n \"2048\": \"DEV_ROOT_FRAGMENT\",\n \"CACHED\": -1,\n \"-1\": \"CACHED\",\n \"BAIL\": -2,\n \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n [1]: `TEXT`,\n [2]: `CLASS`,\n [4]: `STYLE`,\n [8]: `PROPS`,\n [16]: `FULL_PROPS`,\n [32]: `NEED_HYDRATION`,\n [64]: `STABLE_FRAGMENT`,\n [128]: `KEYED_FRAGMENT`,\n [256]: `UNKEYED_FRAGMENT`,\n [512]: `NEED_PATCH`,\n [1024]: `DYNAMIC_SLOTS`,\n [2048]: `DEV_ROOT_FRAGMENT`,\n [-1]: `CACHED`,\n [-2]: `BAIL`\n};\n\nconst ShapeFlags = {\n \"ELEMENT\": 1,\n \"1\": \"ELEMENT\",\n \"FUNCTIONAL_COMPONENT\": 2,\n \"2\": \"FUNCTIONAL_COMPONENT\",\n \"STATEFUL_COMPONENT\": 4,\n \"4\": \"STATEFUL_COMPONENT\",\n \"TEXT_CHILDREN\": 8,\n \"8\": \"TEXT_CHILDREN\",\n \"ARRAY_CHILDREN\": 16,\n \"16\": \"ARRAY_CHILDREN\",\n \"SLOTS_CHILDREN\": 32,\n \"32\": \"SLOTS_CHILDREN\",\n \"TELEPORT\": 64,\n \"64\": \"TELEPORT\",\n \"SUSPENSE\": 128,\n \"128\": \"SUSPENSE\",\n \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n \"COMPONENT_KEPT_ALIVE\": 512,\n \"512\": \"COMPONENT_KEPT_ALIVE\",\n \"COMPONENT\": 6,\n \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n \"STABLE\": 1,\n \"1\": \"STABLE\",\n \"DYNAMIC\": 2,\n \"2\": \"DYNAMIC\",\n \"FORWARDED\": 3,\n \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n [1]: \"STABLE\",\n [2]: \"DYNAMIC\",\n [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n start = Math.max(0, Math.min(start, source.length));\n end = Math.max(0, Math.min(end, source.length));\n if (start > end) return \"\";\n let lines = source.split(/(\\r?\\n)/);\n const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n lines = lines.filter((_, idx) => idx % 2 === 0);\n let count = 0;\n const res = [];\n for (let i = 0; i < lines.length; i++) {\n count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n if (count >= start) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length) continue;\n const line = j + 1;\n res.push(\n `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`\n );\n const lineLength = lines[j].length;\n const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n if (j === i) {\n const pad = start - (count - (lineLength + newLineSeqLength));\n const length = Math.max(\n 1,\n end > count ? lineLength - pad : end - start\n );\n res.push(` | ` + \" \".repeat(pad) + \"^\".repeat(length));\n } else if (j > i) {\n if (end > count) {\n const length = Math.max(Math.min(end - count, lineLength), 1);\n res.push(` | ` + \"^\".repeat(length));\n }\n count += lineLength + newLineSeqLength;\n }\n }\n break;\n }\n }\n return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n if (isArray(value)) {\n const res = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n if (normalized) {\n for (const key in normalized) {\n res[key] = normalized[key];\n }\n }\n }\n return res;\n } else if (isString(value) || isObject(value)) {\n return value;\n }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n const ret = {};\n cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n if (item) {\n const tmp = item.split(propertyDelimiterRE);\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return ret;\n}\nfunction stringifyStyle(styles) {\n if (!styles) return \"\";\n if (isString(styles)) return styles;\n let ret = \"\";\n for (const key in styles) {\n const value = styles[key];\n if (isString(value) || typeof value === \"number\") {\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n ret += `${normalizedKey}:${value};`;\n }\n }\n return ret;\n}\nfunction normalizeClass(value) {\n let res = \"\";\n if (isString(value)) {\n res = value;\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const normalized = normalizeClass(value[i]);\n if (normalized) {\n res += normalized + \" \";\n }\n }\n } else if (isObject(value)) {\n for (const name in value) {\n if (value[name]) {\n res += name + \" \";\n }\n }\n }\n return res.trim();\n}\nfunction normalizeProps(props) {\n if (!props) return null;\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (style) {\n props.style = normalizeStyle(style);\n }\n return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n if (attrValidationCache.hasOwnProperty(name)) {\n return attrValidationCache[name];\n }\n const isUnsafe = unsafeAttrCharRE.test(name);\n if (isUnsafe) {\n console.error(`unsafe attribute name: ${name}`);\n }\n return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n acceptCharset: \"accept-charset\",\n className: \"class\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nconst isKnownMathMLAttr = /* @__PURE__ */ makeMap(\n `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`\n);\nfunction isRenderableAttrValue(value) {\n if (value == null) {\n return false;\n }\n const type = typeof value;\n return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n const str = \"\" + string;\n const match = escapeRE.exec(str);\n if (!match) {\n return str;\n }\n let html = \"\";\n let escaped;\n let index;\n let lastIndex = 0;\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escaped = \""\";\n break;\n case 38:\n escaped = \"&\";\n break;\n case 39:\n escaped = \"'\";\n break;\n case 60:\n escaped = \"<\";\n break;\n case 62:\n escaped = \">\";\n break;\n default:\n continue;\n }\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n lastIndex = index + 1;\n html += escaped;\n }\n return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n return src.replace(commentStripRE, \"\");\n}\nconst cssVarNameEscapeSymbolsRE = /[ !\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~]/g;\nfunction getEscapedCssVarName(key, doubleEscape) {\n return key.replace(\n cssVarNameEscapeSymbolsRE,\n (s) => doubleEscape ? s === '\"' ? '\\\\\\\\\\\\\"' : `\\\\\\\\${s}` : `\\\\${s}`\n );\n}\n\nfunction looseCompareArrays(a, b) {\n if (a.length !== b.length) return false;\n let equal = true;\n for (let i = 0; equal && i < a.length; i++) {\n equal = looseEqual(a[i], b[i]);\n }\n return equal;\n}\nfunction looseEqual(a, b) {\n if (a === b) return true;\n let aValidType = isDate(a);\n let bValidType = isDate(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n }\n aValidType = isSymbol(a);\n bValidType = isSymbol(b);\n if (aValidType || bValidType) {\n return a === b;\n }\n aValidType = isArray(a);\n bValidType = isArray(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n }\n aValidType = isObject(a);\n bValidType = isObject(b);\n if (aValidType || bValidType) {\n if (!aValidType || !bValidType) {\n return false;\n }\n const aKeysCount = Object.keys(a).length;\n const bKeysCount = Object.keys(b).length;\n if (aKeysCount !== bKeysCount) {\n return false;\n }\n for (const key in a) {\n const aHasKey = a.hasOwnProperty(key);\n const bHasKey = b.hasOwnProperty(key);\n if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {\n return false;\n }\n }\n }\n return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n return arr.findIndex((item) => looseEqual(item, val));\n}\n\nconst isRef = (val) => {\n return !!(val && val[\"__v_isRef\"] === true);\n};\nconst toDisplayString = (val) => {\n return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n if (isRef(val)) {\n return replacer(_key, val.value);\n } else if (isMap(val)) {\n return {\n [`Map(${val.size})`]: [...val.entries()].reduce(\n (entries, [key, val2], i) => {\n entries[stringifySymbol(key, i) + \" =>\"] = val2;\n return entries;\n },\n {}\n )\n };\n } else if (isSet(val)) {\n return {\n [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n };\n } else if (isSymbol(val)) {\n return stringifySymbol(val);\n } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n return String(val);\n }\n return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n var _a;\n return (\n // Symbol.description in es2019+ so we need to cast here to pass\n // the lib: es2016 check\n isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v\n );\n};\n\nfunction normalizeCssVarValue(value) {\n if (value == null) {\n return \"initial\";\n }\n if (typeof value === \"string\") {\n return value === \"\" ? \" \" : value;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n console.warn(\n \"[Vue warn] Invalid value used for CSS binding. Expected a string or a finite number but received:\",\n value\n );\n }\n }\n return String(value);\n}\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, PatchFlags, ShapeFlags, SlotFlags, camelize, capitalize, cssVarNameEscapeSymbolsRE, def, escapeHtml, escapeHtmlComment, extend, genCacheKey, genPropsAccessExp, generateCodeFrame, getEscapedCssVarName, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyAllowed, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownMathMLAttr, isKnownSvgAttr, isMap, isMathMLTag, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isRenderableAttrValue, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeCssVarValue, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","/**\n* @vue/reactivity v3.5.27\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { extend, hasChanged, isArray, isIntegerKey, isSymbol, isMap, hasOwn, makeMap, isObject, capitalize, toRawType, def, isFunction, EMPTY_OBJ, isSet, isPlainObject, remove, NOOP } from '@vue/shared';\n\nfunction warn(msg, ...args) {\n console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n constructor(detached = false) {\n this.detached = detached;\n /**\n * @internal\n */\n this._active = true;\n /**\n * @internal track `on` calls, allow `on` call multiple times\n */\n this._on = 0;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this._isPaused = false;\n this.parent = activeEffectScope;\n if (!detached && activeEffectScope) {\n this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(\n this\n ) - 1;\n }\n }\n get active() {\n return this._active;\n }\n pause() {\n if (this._active) {\n this._isPaused = true;\n let i, l;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].pause();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].pause();\n }\n }\n }\n /**\n * Resumes the effect scope, including all child scopes and effects.\n */\n resume() {\n if (this._active) {\n if (this._isPaused) {\n this._isPaused = false;\n let i, l;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].resume();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].resume();\n }\n }\n }\n }\n run(fn) {\n if (this._active) {\n const currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n } finally {\n activeEffectScope = currentEffectScope;\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(`cannot run an inactive effect scope.`);\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n on() {\n if (++this._on === 1) {\n this.prevScope = activeEffectScope;\n activeEffectScope = this;\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n off() {\n if (this._on > 0 && --this._on === 0) {\n activeEffectScope = this.prevScope;\n this.prevScope = void 0;\n }\n }\n stop(fromParent) {\n if (this._active) {\n this._active = false;\n let i, l;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].stop();\n }\n this.effects.length = 0;\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n this.cleanups.length = 0;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].stop(true);\n }\n this.scopes.length = 0;\n }\n if (!this.detached && this.parent && !fromParent) {\n const last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = void 0;\n }\n }\n}\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn, failSilently = false) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onScopeDispose() is called when there is no active effect scope to be associated with.`\n );\n }\n}\n\nlet activeSub;\nconst EffectFlags = {\n \"ACTIVE\": 1,\n \"1\": \"ACTIVE\",\n \"RUNNING\": 2,\n \"2\": \"RUNNING\",\n \"TRACKING\": 4,\n \"4\": \"TRACKING\",\n \"NOTIFIED\": 8,\n \"8\": \"NOTIFIED\",\n \"DIRTY\": 16,\n \"16\": \"DIRTY\",\n \"ALLOW_RECURSE\": 32,\n \"32\": \"ALLOW_RECURSE\",\n \"PAUSED\": 64,\n \"64\": \"PAUSED\",\n \"EVALUATED\": 128,\n \"128\": \"EVALUATED\"\n};\nconst pausedQueueEffects = /* @__PURE__ */ new WeakSet();\nclass ReactiveEffect {\n constructor(fn) {\n this.fn = fn;\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 1 | 4;\n /**\n * @internal\n */\n this.next = void 0;\n /**\n * @internal\n */\n this.cleanup = void 0;\n this.scheduler = void 0;\n if (activeEffectScope && activeEffectScope.active) {\n activeEffectScope.effects.push(this);\n }\n }\n pause() {\n this.flags |= 64;\n }\n resume() {\n if (this.flags & 64) {\n this.flags &= -65;\n if (pausedQueueEffects.has(this)) {\n pausedQueueEffects.delete(this);\n this.trigger();\n }\n }\n }\n /**\n * @internal\n */\n notify() {\n if (this.flags & 2 && !(this.flags & 32)) {\n return;\n }\n if (!(this.flags & 8)) {\n batch(this);\n }\n }\n run() {\n if (!(this.flags & 1)) {\n return this.fn();\n }\n this.flags |= 2;\n cleanupEffect(this);\n prepareDeps(this);\n const prevEffect = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = this;\n shouldTrack = true;\n try {\n return this.fn();\n } finally {\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub !== this) {\n warn(\n \"Active effect was not restored correctly - this is likely a Vue internal bug.\"\n );\n }\n cleanupDeps(this);\n activeSub = prevEffect;\n shouldTrack = prevShouldTrack;\n this.flags &= -3;\n }\n }\n stop() {\n if (this.flags & 1) {\n for (let link = this.deps; link; link = link.nextDep) {\n removeSub(link);\n }\n this.deps = this.depsTail = void 0;\n cleanupEffect(this);\n this.onStop && this.onStop();\n this.flags &= -2;\n }\n }\n trigger() {\n if (this.flags & 64) {\n pausedQueueEffects.add(this);\n } else if (this.scheduler) {\n this.scheduler();\n } else {\n this.runIfDirty();\n }\n }\n /**\n * @internal\n */\n runIfDirty() {\n if (isDirty(this)) {\n this.run();\n }\n }\n get dirty() {\n return isDirty(this);\n }\n}\nlet batchDepth = 0;\nlet batchedSub;\nlet batchedComputed;\nfunction batch(sub, isComputed = false) {\n sub.flags |= 8;\n if (isComputed) {\n sub.next = batchedComputed;\n batchedComputed = sub;\n return;\n }\n sub.next = batchedSub;\n batchedSub = sub;\n}\nfunction startBatch() {\n batchDepth++;\n}\nfunction endBatch() {\n if (--batchDepth > 0) {\n return;\n }\n if (batchedComputed) {\n let e = batchedComputed;\n batchedComputed = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= -9;\n e = next;\n }\n }\n let error;\n while (batchedSub) {\n let e = batchedSub;\n batchedSub = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= -9;\n if (e.flags & 1) {\n try {\n ;\n e.trigger();\n } catch (err) {\n if (!error) error = err;\n }\n }\n e = next;\n }\n }\n if (error) throw error;\n}\nfunction prepareDeps(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n link.version = -1;\n link.prevActiveLink = link.dep.activeLink;\n link.dep.activeLink = link;\n }\n}\nfunction cleanupDeps(sub) {\n let head;\n let tail = sub.depsTail;\n let link = tail;\n while (link) {\n const prev = link.prevDep;\n if (link.version === -1) {\n if (link === tail) tail = prev;\n removeSub(link);\n removeDep(link);\n } else {\n head = link;\n }\n link.dep.activeLink = link.prevActiveLink;\n link.prevActiveLink = void 0;\n link = prev;\n }\n sub.deps = head;\n sub.depsTail = tail;\n}\nfunction isDirty(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) {\n return true;\n }\n }\n if (sub._dirty) {\n return true;\n }\n return false;\n}\nfunction refreshComputed(computed) {\n if (computed.flags & 4 && !(computed.flags & 16)) {\n return;\n }\n computed.flags &= -17;\n if (computed.globalVersion === globalVersion) {\n return;\n }\n computed.globalVersion = globalVersion;\n if (!computed.isSSR && computed.flags & 128 && (!computed.deps && !computed._dirty || !isDirty(computed))) {\n return;\n }\n computed.flags |= 2;\n const dep = computed.dep;\n const prevSub = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = computed;\n shouldTrack = true;\n try {\n prepareDeps(computed);\n const value = computed.fn(computed._value);\n if (dep.version === 0 || hasChanged(value, computed._value)) {\n computed.flags |= 128;\n computed._value = value;\n dep.version++;\n }\n } catch (err) {\n dep.version++;\n throw err;\n } finally {\n activeSub = prevSub;\n shouldTrack = prevShouldTrack;\n cleanupDeps(computed);\n computed.flags &= -3;\n }\n}\nfunction removeSub(link, soft = false) {\n const { dep, prevSub, nextSub } = link;\n if (prevSub) {\n prevSub.nextSub = nextSub;\n link.prevSub = void 0;\n }\n if (nextSub) {\n nextSub.prevSub = prevSub;\n link.nextSub = void 0;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && dep.subsHead === link) {\n dep.subsHead = nextSub;\n }\n if (dep.subs === link) {\n dep.subs = prevSub;\n if (!prevSub && dep.computed) {\n dep.computed.flags &= -5;\n for (let l = dep.computed.deps; l; l = l.nextDep) {\n removeSub(l, true);\n }\n }\n }\n if (!soft && !--dep.sc && dep.map) {\n dep.map.delete(dep.key);\n }\n}\nfunction removeDep(link) {\n const { prevDep, nextDep } = link;\n if (prevDep) {\n prevDep.nextDep = nextDep;\n link.prevDep = void 0;\n }\n if (nextDep) {\n nextDep.prevDep = prevDep;\n link.nextDep = void 0;\n }\n}\nfunction effect(fn, options) {\n if (fn.effect instanceof ReactiveEffect) {\n fn = fn.effect.fn;\n }\n const e = new ReactiveEffect(fn);\n if (options) {\n extend(e, options);\n }\n try {\n e.run();\n } catch (err) {\n e.stop();\n throw err;\n }\n const runner = e.run.bind(e);\n runner.effect = e;\n return runner;\n}\nfunction stop(runner) {\n runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = false;\n}\nfunction enableTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = true;\n}\nfunction resetTracking() {\n const last = trackStack.pop();\n shouldTrack = last === void 0 ? true : last;\n}\nfunction onEffectCleanup(fn, failSilently = false) {\n if (activeSub instanceof ReactiveEffect) {\n activeSub.cleanup = fn;\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onEffectCleanup() was called when there was no active effect to associate with.`\n );\n }\n}\nfunction cleanupEffect(e) {\n const { cleanup } = e;\n e.cleanup = void 0;\n if (cleanup) {\n const prevSub = activeSub;\n activeSub = void 0;\n try {\n cleanup();\n } finally {\n activeSub = prevSub;\n }\n }\n}\n\nlet globalVersion = 0;\nclass Link {\n constructor(sub, dep) {\n this.sub = sub;\n this.dep = dep;\n this.version = dep.version;\n this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0;\n }\n}\nclass Dep {\n // TODO isolatedDeclarations \"__v_skip\"\n constructor(computed) {\n this.computed = computed;\n this.version = 0;\n /**\n * Link between this dep and the current active effect\n */\n this.activeLink = void 0;\n /**\n * Doubly linked list representing the subscribing effects (tail)\n */\n this.subs = void 0;\n /**\n * For object property deps cleanup\n */\n this.map = void 0;\n this.key = void 0;\n /**\n * Subscriber counter\n */\n this.sc = 0;\n /**\n * @internal\n */\n this.__v_skip = true;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.subsHead = void 0;\n }\n }\n track(debugInfo) {\n if (!activeSub || !shouldTrack || activeSub === this.computed) {\n return;\n }\n let link = this.activeLink;\n if (link === void 0 || link.sub !== activeSub) {\n link = this.activeLink = new Link(activeSub, this);\n if (!activeSub.deps) {\n activeSub.deps = activeSub.depsTail = link;\n } else {\n link.prevDep = activeSub.depsTail;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n }\n addSub(link);\n } else if (link.version === -1) {\n link.version = this.version;\n if (link.nextDep) {\n const next = link.nextDep;\n next.prevDep = link.prevDep;\n if (link.prevDep) {\n link.prevDep.nextDep = next;\n }\n link.prevDep = activeSub.depsTail;\n link.nextDep = void 0;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n if (activeSub.deps === link) {\n activeSub.deps = next;\n }\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub.onTrack) {\n activeSub.onTrack(\n extend(\n {\n effect: activeSub\n },\n debugInfo\n )\n );\n }\n return link;\n }\n trigger(debugInfo) {\n this.version++;\n globalVersion++;\n this.notify(debugInfo);\n }\n notify(debugInfo) {\n startBatch();\n try {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n for (let head = this.subsHead; head; head = head.nextSub) {\n if (head.sub.onTrigger && !(head.sub.flags & 8)) {\n head.sub.onTrigger(\n extend(\n {\n effect: head.sub\n },\n debugInfo\n )\n );\n }\n }\n }\n for (let link = this.subs; link; link = link.prevSub) {\n if (link.sub.notify()) {\n ;\n link.sub.dep.notify();\n }\n }\n } finally {\n endBatch();\n }\n }\n}\nfunction addSub(link) {\n link.dep.sc++;\n if (link.sub.flags & 4) {\n const computed = link.dep.computed;\n if (computed && !link.dep.subs) {\n computed.flags |= 4 | 16;\n for (let l = computed.deps; l; l = l.nextDep) {\n addSub(l);\n }\n }\n const currentTail = link.dep.subs;\n if (currentTail !== link) {\n link.prevSub = currentTail;\n if (currentTail) currentTail.nextSub = link;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && link.dep.subsHead === void 0) {\n link.dep.subsHead = link;\n }\n link.dep.subs = link;\n }\n}\nconst targetMap = /* @__PURE__ */ new WeakMap();\nconst ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Object iterate\" : \"\"\n);\nconst MAP_KEY_ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Map keys iterate\" : \"\"\n);\nconst ARRAY_ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Array iterate\" : \"\"\n);\nfunction track(target, type, key) {\n if (shouldTrack && activeSub) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n }\n let dep = depsMap.get(key);\n if (!dep) {\n depsMap.set(key, dep = new Dep());\n dep.map = depsMap;\n dep.key = key;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.track({\n target,\n type,\n key\n });\n } else {\n dep.track();\n }\n }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n globalVersion++;\n return;\n }\n const run = (dep) => {\n if (dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.trigger({\n target,\n type,\n key,\n newValue,\n oldValue,\n oldTarget\n });\n } else {\n dep.trigger();\n }\n }\n };\n startBatch();\n if (type === \"clear\") {\n depsMap.forEach(run);\n } else {\n const targetIsArray = isArray(target);\n const isArrayIndex = targetIsArray && isIntegerKey(key);\n if (targetIsArray && key === \"length\") {\n const newLength = Number(newValue);\n depsMap.forEach((dep, key2) => {\n if (key2 === \"length\" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) {\n run(dep);\n }\n });\n } else {\n if (key !== void 0 || depsMap.has(void 0)) {\n run(depsMap.get(key));\n }\n if (isArrayIndex) {\n run(depsMap.get(ARRAY_ITERATE_KEY));\n }\n switch (type) {\n case \"add\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n } else if (isArrayIndex) {\n run(depsMap.get(\"length\"));\n }\n break;\n case \"delete\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n break;\n case \"set\":\n if (isMap(target)) {\n run(depsMap.get(ITERATE_KEY));\n }\n break;\n }\n }\n }\n endBatch();\n}\nfunction getDepFromReactive(object, key) {\n const depMap = targetMap.get(object);\n return depMap && depMap.get(key);\n}\n\nfunction reactiveReadArray(array) {\n const raw = toRaw(array);\n if (raw === array) return raw;\n track(raw, \"iterate\", ARRAY_ITERATE_KEY);\n return isShallow(array) ? raw : raw.map(toReactive);\n}\nfunction shallowReadArray(arr) {\n track(arr = toRaw(arr), \"iterate\", ARRAY_ITERATE_KEY);\n return arr;\n}\nfunction toWrapped(target, item) {\n if (isReadonly(target)) {\n return isReactive(target) ? toReadonly(toReactive(item)) : toReadonly(item);\n }\n return toReactive(item);\n}\nconst arrayInstrumentations = {\n __proto__: null,\n [Symbol.iterator]() {\n return iterator(this, Symbol.iterator, (item) => toWrapped(this, item));\n },\n concat(...args) {\n return reactiveReadArray(this).concat(\n ...args.map((x) => isArray(x) ? reactiveReadArray(x) : x)\n );\n },\n entries() {\n return iterator(this, \"entries\", (value) => {\n value[1] = toWrapped(this, value[1]);\n return value;\n });\n },\n every(fn, thisArg) {\n return apply(this, \"every\", fn, thisArg, void 0, arguments);\n },\n filter(fn, thisArg) {\n return apply(\n this,\n \"filter\",\n fn,\n thisArg,\n (v) => v.map((item) => toWrapped(this, item)),\n arguments\n );\n },\n find(fn, thisArg) {\n return apply(\n this,\n \"find\",\n fn,\n thisArg,\n (item) => toWrapped(this, item),\n arguments\n );\n },\n findIndex(fn, thisArg) {\n return apply(this, \"findIndex\", fn, thisArg, void 0, arguments);\n },\n findLast(fn, thisArg) {\n return apply(\n this,\n \"findLast\",\n fn,\n thisArg,\n (item) => toWrapped(this, item),\n arguments\n );\n },\n findLastIndex(fn, thisArg) {\n return apply(this, \"findLastIndex\", fn, thisArg, void 0, arguments);\n },\n // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement\n forEach(fn, thisArg) {\n return apply(this, \"forEach\", fn, thisArg, void 0, arguments);\n },\n includes(...args) {\n return searchProxy(this, \"includes\", args);\n },\n indexOf(...args) {\n return searchProxy(this, \"indexOf\", args);\n },\n join(separator) {\n return reactiveReadArray(this).join(separator);\n },\n // keys() iterator only reads `length`, no optimization required\n lastIndexOf(...args) {\n return searchProxy(this, \"lastIndexOf\", args);\n },\n map(fn, thisArg) {\n return apply(this, \"map\", fn, thisArg, void 0, arguments);\n },\n pop() {\n return noTracking(this, \"pop\");\n },\n push(...args) {\n return noTracking(this, \"push\", args);\n },\n reduce(fn, ...args) {\n return reduce(this, \"reduce\", fn, args);\n },\n reduceRight(fn, ...args) {\n return reduce(this, \"reduceRight\", fn, args);\n },\n shift() {\n return noTracking(this, \"shift\");\n },\n // slice could use ARRAY_ITERATE but also seems to beg for range tracking\n some(fn, thisArg) {\n return apply(this, \"some\", fn, thisArg, void 0, arguments);\n },\n splice(...args) {\n return noTracking(this, \"splice\", args);\n },\n toReversed() {\n return reactiveReadArray(this).toReversed();\n },\n toSorted(comparer) {\n return reactiveReadArray(this).toSorted(comparer);\n },\n toSpliced(...args) {\n return reactiveReadArray(this).toSpliced(...args);\n },\n unshift(...args) {\n return noTracking(this, \"unshift\", args);\n },\n values() {\n return iterator(this, \"values\", (item) => toWrapped(this, item));\n }\n};\nfunction iterator(self, method, wrapValue) {\n const arr = shallowReadArray(self);\n const iter = arr[method]();\n if (arr !== self && !isShallow(self)) {\n iter._next = iter.next;\n iter.next = () => {\n const result = iter._next();\n if (!result.done) {\n result.value = wrapValue(result.value);\n }\n return result;\n };\n }\n return iter;\n}\nconst arrayProto = Array.prototype;\nfunction apply(self, method, fn, thisArg, wrappedRetFn, args) {\n const arr = shallowReadArray(self);\n const needsWrap = arr !== self && !isShallow(self);\n const methodFn = arr[method];\n if (methodFn !== arrayProto[method]) {\n const result2 = methodFn.apply(self, args);\n return needsWrap ? toReactive(result2) : result2;\n }\n let wrappedFn = fn;\n if (arr !== self) {\n if (needsWrap) {\n wrappedFn = function(item, index) {\n return fn.call(this, toWrapped(self, item), index, self);\n };\n } else if (fn.length > 2) {\n wrappedFn = function(item, index) {\n return fn.call(this, item, index, self);\n };\n }\n }\n const result = methodFn.call(arr, wrappedFn, thisArg);\n return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result;\n}\nfunction reduce(self, method, fn, args) {\n const arr = shallowReadArray(self);\n let wrappedFn = fn;\n if (arr !== self) {\n if (!isShallow(self)) {\n wrappedFn = function(acc, item, index) {\n return fn.call(this, acc, toWrapped(self, item), index, self);\n };\n } else if (fn.length > 3) {\n wrappedFn = function(acc, item, index) {\n return fn.call(this, acc, item, index, self);\n };\n }\n }\n return arr[method](wrappedFn, ...args);\n}\nfunction searchProxy(self, method, args) {\n const arr = toRaw(self);\n track(arr, \"iterate\", ARRAY_ITERATE_KEY);\n const res = arr[method](...args);\n if ((res === -1 || res === false) && isProxy(args[0])) {\n args[0] = toRaw(args[0]);\n return arr[method](...args);\n }\n return res;\n}\nfunction noTracking(self, method, args = []) {\n pauseTracking();\n startBatch();\n const res = toRaw(self)[method].apply(self, args);\n endBatch();\n resetTracking();\n return res;\n}\n\nconst isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== \"arguments\" && key !== \"caller\").map((key) => Symbol[key]).filter(isSymbol)\n);\nfunction hasOwnProperty(key) {\n if (!isSymbol(key)) key = String(key);\n const obj = toRaw(this);\n track(obj, \"has\", key);\n return obj.hasOwnProperty(key);\n}\nclass BaseReactiveHandler {\n constructor(_isReadonly = false, _isShallow = false) {\n this._isReadonly = _isReadonly;\n this._isShallow = _isShallow;\n }\n get(target, key, receiver) {\n if (key === \"__v_skip\") return target[\"__v_skip\"];\n const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_isShallow\") {\n return isShallow2;\n } else if (key === \"__v_raw\") {\n if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype\n // this means the receiver is a user proxy of the reactive proxy\n Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {\n return target;\n }\n return;\n }\n const targetIsArray = isArray(target);\n if (!isReadonly2) {\n let fn;\n if (targetIsArray && (fn = arrayInstrumentations[key])) {\n return fn;\n }\n if (key === \"hasOwnProperty\") {\n return hasOwnProperty;\n }\n }\n const res = Reflect.get(\n target,\n key,\n // if this is a proxy wrapping a ref, return methods using the raw ref\n // as receiver so that we don't have to call `toRaw` on the ref in all\n // its class methods\n isRef(target) ? target : receiver\n );\n if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n return res;\n }\n if (!isReadonly2) {\n track(target, \"get\", key);\n }\n if (isShallow2) {\n return res;\n }\n if (isRef(res)) {\n const value = targetIsArray && isIntegerKey(key) ? res : res.value;\n return isReadonly2 && isObject(value) ? readonly(value) : value;\n }\n if (isObject(res)) {\n return isReadonly2 ? readonly(res) : reactive(res);\n }\n return res;\n }\n}\nclass MutableReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(false, isShallow2);\n }\n set(target, key, value, receiver) {\n let oldValue = target[key];\n const isArrayWithIntegerKey = isArray(target) && isIntegerKey(key);\n if (!this._isShallow) {\n const isOldValueReadonly = isReadonly(oldValue);\n if (!isShallow(value) && !isReadonly(value)) {\n oldValue = toRaw(oldValue);\n value = toRaw(value);\n }\n if (!isArrayWithIntegerKey && isRef(oldValue) && !isRef(value)) {\n if (isOldValueReadonly) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target[key]\n );\n }\n return true;\n } else {\n oldValue.value = value;\n return true;\n }\n }\n }\n const hadKey = isArrayWithIntegerKey ? Number(key) < target.length : hasOwn(target, key);\n const result = Reflect.set(\n target,\n key,\n value,\n isRef(target) ? target : receiver\n );\n if (target === toRaw(receiver)) {\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n }\n return result;\n }\n deleteProperty(target, key) {\n const hadKey = hasOwn(target, key);\n const oldValue = target[key];\n const result = Reflect.deleteProperty(target, key);\n if (result && hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n }\n has(target, key) {\n const result = Reflect.has(target, key);\n if (!isSymbol(key) || !builtInSymbols.has(key)) {\n track(target, \"has\", key);\n }\n return result;\n }\n ownKeys(target) {\n track(\n target,\n \"iterate\",\n isArray(target) ? \"length\" : ITERATE_KEY\n );\n return Reflect.ownKeys(target);\n }\n}\nclass ReadonlyReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(true, isShallow2);\n }\n set(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n deleteProperty(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Delete operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n}\nconst mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();\nconst readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();\nconst shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true);\nconst shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction createIterableMethod(method, isReadonly2, isShallow2) {\n return function(...args) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const targetIsMap = isMap(rawTarget);\n const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n const isKeyOnly = method === \"keys\" && targetIsMap;\n const innerIterator = target[method](...args);\n const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;\n !isReadonly2 && track(\n rawTarget,\n \"iterate\",\n isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY\n );\n return extend(\n // inheriting all iterator properties\n Object.create(innerIterator),\n {\n // iterator protocol\n next() {\n const { value, done } = innerIterator.next();\n return done ? { value, done } : {\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n done\n };\n }\n }\n );\n };\n}\nfunction createReadonlyMethod(type) {\n return function(...args) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n warn(\n `${capitalize(type)} operation ${key}failed: target is readonly.`,\n toRaw(this)\n );\n }\n return type === \"delete\" ? false : type === \"clear\" ? void 0 : this;\n };\n}\nfunction createInstrumentations(readonly, shallow) {\n const instrumentations = {\n get(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"get\", key);\n }\n track(rawTarget, \"get\", rawKey);\n }\n const { has } = getProto(rawTarget);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n if (has.call(rawTarget, key)) {\n return wrap(target.get(key));\n } else if (has.call(rawTarget, rawKey)) {\n return wrap(target.get(rawKey));\n } else if (target !== rawTarget) {\n target.get(key);\n }\n },\n get size() {\n const target = this[\"__v_raw\"];\n !readonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n return target.size;\n },\n has(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"has\", key);\n }\n track(rawTarget, \"has\", rawKey);\n }\n return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n },\n forEach(callback, thisArg) {\n const observed = this;\n const target = observed[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n !readonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n return target.forEach((value, key) => {\n return callback.call(thisArg, wrap(value), wrap(key), observed);\n });\n }\n };\n extend(\n instrumentations,\n readonly ? {\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\")\n } : {\n add(value) {\n if (!shallow && !isShallow(value) && !isReadonly(value)) {\n value = toRaw(value);\n }\n const target = toRaw(this);\n const proto = getProto(target);\n const hadKey = proto.has.call(target, value);\n if (!hadKey) {\n target.add(value);\n trigger(target, \"add\", value, value);\n }\n return this;\n },\n set(key, value) {\n if (!shallow && !isShallow(value) && !isReadonly(value)) {\n value = toRaw(value);\n }\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get.call(target, key);\n target.set(key, value);\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n return this;\n },\n delete(key) {\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get ? get.call(target, key) : void 0;\n const result = target.delete(key);\n if (hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n },\n clear() {\n const target = toRaw(this);\n const hadItems = target.size !== 0;\n const oldTarget = !!(process.env.NODE_ENV !== \"production\") ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n const result = target.clear();\n if (hadItems) {\n trigger(\n target,\n \"clear\",\n void 0,\n void 0,\n oldTarget\n );\n }\n return result;\n }\n }\n );\n const iteratorMethods = [\n \"keys\",\n \"values\",\n \"entries\",\n Symbol.iterator\n ];\n iteratorMethods.forEach((method) => {\n instrumentations[method] = createIterableMethod(method, readonly, shallow);\n });\n return instrumentations;\n}\nfunction createInstrumentationGetter(isReadonly2, shallow) {\n const instrumentations = createInstrumentations(isReadonly2, shallow);\n return (target, key, receiver) => {\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_raw\") {\n return target;\n }\n return Reflect.get(\n hasOwn(instrumentations, key) && key in target ? instrumentations : target,\n key,\n receiver\n );\n };\n}\nconst mutableCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has, key) {\n const rawKey = toRaw(key);\n if (rawKey !== key && has.call(target, rawKey)) {\n const type = toRawType(target);\n warn(\n `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`\n );\n }\n}\n\nconst reactiveMap = /* @__PURE__ */ new WeakMap();\nconst shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nconst readonlyMap = /* @__PURE__ */ new WeakMap();\nconst shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n switch (rawType) {\n case \"Object\":\n case \"Array\":\n return 1 /* COMMON */;\n case \"Map\":\n case \"Set\":\n case \"WeakMap\":\n case \"WeakSet\":\n return 2 /* COLLECTION */;\n default:\n return 0 /* INVALID */;\n }\n}\nfunction getTargetType(value) {\n return value[\"__v_skip\"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(toRawType(value));\n}\n// @__NO_SIDE_EFFECTS__\nfunction reactive(target) {\n if (/* @__PURE__ */ isReadonly(target)) {\n return target;\n }\n return createReactiveObject(\n target,\n false,\n mutableHandlers,\n mutableCollectionHandlers,\n reactiveMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowReactive(target) {\n return createReactiveObject(\n target,\n false,\n shallowReactiveHandlers,\n shallowCollectionHandlers,\n shallowReactiveMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction readonly(target) {\n return createReactiveObject(\n target,\n true,\n readonlyHandlers,\n readonlyCollectionHandlers,\n readonlyMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowReadonly(target) {\n return createReactiveObject(\n target,\n true,\n shallowReadonlyHandlers,\n shallowReadonlyCollectionHandlers,\n shallowReadonlyMap\n );\n}\nfunction createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n if (!isObject(target)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `value cannot be made ${isReadonly2 ? \"readonly\" : \"reactive\"}: ${String(\n target\n )}`\n );\n }\n return target;\n }\n if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n return target;\n }\n const targetType = getTargetType(target);\n if (targetType === 0 /* INVALID */) {\n return target;\n }\n const existingProxy = proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n const proxy = new Proxy(\n target,\n targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers\n );\n proxyMap.set(target, proxy);\n return proxy;\n}\n// @__NO_SIDE_EFFECTS__\nfunction isReactive(value) {\n if (/* @__PURE__ */ isReadonly(value)) {\n return /* @__PURE__ */ isReactive(value[\"__v_raw\"]);\n }\n return !!(value && value[\"__v_isReactive\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isReadonly(value) {\n return !!(value && value[\"__v_isReadonly\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isShallow(value) {\n return !!(value && value[\"__v_isShallow\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isProxy(value) {\n return value ? !!value[\"__v_raw\"] : false;\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRaw(observed) {\n const raw = observed && observed[\"__v_raw\"];\n return raw ? /* @__PURE__ */ toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n if (!hasOwn(value, \"__v_skip\") && Object.isExtensible(value)) {\n def(value, \"__v_skip\", true);\n }\n return value;\n}\nconst toReactive = (value) => isObject(value) ? /* @__PURE__ */ reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? /* @__PURE__ */ readonly(value) : value;\n\n// @__NO_SIDE_EFFECTS__\nfunction isRef(r) {\n return r ? r[\"__v_isRef\"] === true : false;\n}\n// @__NO_SIDE_EFFECTS__\nfunction ref(value) {\n return createRef(value, false);\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (/* @__PURE__ */ isRef(rawValue)) {\n return rawValue;\n }\n return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n constructor(value, isShallow2) {\n this.dep = new Dep();\n this[\"__v_isRef\"] = true;\n this[\"__v_isShallow\"] = false;\n this._rawValue = isShallow2 ? value : toRaw(value);\n this._value = isShallow2 ? value : toReactive(value);\n this[\"__v_isShallow\"] = isShallow2;\n }\n get value() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n });\n } else {\n this.dep.track();\n }\n return this._value;\n }\n set value(newValue) {\n const oldValue = this._rawValue;\n const useDirectValue = this[\"__v_isShallow\"] || isShallow(newValue) || isReadonly(newValue);\n newValue = useDirectValue ? newValue : toRaw(newValue);\n if (hasChanged(newValue, oldValue)) {\n this._rawValue = newValue;\n this._value = useDirectValue ? newValue : toReactive(newValue);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.trigger({\n target: this,\n type: \"set\",\n key: \"value\",\n newValue,\n oldValue\n });\n } else {\n this.dep.trigger();\n }\n }\n }\n}\nfunction triggerRef(ref2) {\n if (ref2.dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n ref2.dep.trigger({\n target: ref2,\n type: \"set\",\n key: \"value\",\n newValue: ref2._value\n });\n } else {\n ref2.dep.trigger();\n }\n }\n}\nfunction unref(ref2) {\n return /* @__PURE__ */ isRef(ref2) ? ref2.value : ref2;\n}\nfunction toValue(source) {\n return isFunction(source) ? source() : unref(source);\n}\nconst shallowUnwrapHandlers = {\n get: (target, key, receiver) => key === \"__v_raw\" ? target : unref(Reflect.get(target, key, receiver)),\n set: (target, key, value, receiver) => {\n const oldValue = target[key];\n if (/* @__PURE__ */ isRef(oldValue) && !/* @__PURE__ */ isRef(value)) {\n oldValue.value = value;\n return true;\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n }\n};\nfunction proxyRefs(objectWithRefs) {\n return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n constructor(factory) {\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n const dep = this.dep = new Dep();\n const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep));\n this._get = get;\n this._set = set;\n }\n get value() {\n return this._value = this._get();\n }\n set value(newVal) {\n this._set(newVal);\n }\n}\nfunction customRef(factory) {\n return new CustomRefImpl(factory);\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRefs(object) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isProxy(object)) {\n warn(`toRefs() expects a reactive object but received a plain one.`);\n }\n const ret = isArray(object) ? new Array(object.length) : {};\n for (const key in object) {\n ret[key] = propertyToRef(object, key);\n }\n return ret;\n}\nclass ObjectRefImpl {\n constructor(_object, _key, _defaultValue) {\n this._object = _object;\n this._key = _key;\n this._defaultValue = _defaultValue;\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n this._raw = toRaw(_object);\n let shallow = true;\n let obj = _object;\n if (!isArray(_object) || !isIntegerKey(String(_key))) {\n do {\n shallow = !isProxy(obj) || isShallow(obj);\n } while (shallow && (obj = obj[\"__v_raw\"]));\n }\n this._shallow = shallow;\n }\n get value() {\n let val = this._object[this._key];\n if (this._shallow) {\n val = unref(val);\n }\n return this._value = val === void 0 ? this._defaultValue : val;\n }\n set value(newVal) {\n if (this._shallow && /* @__PURE__ */ isRef(this._raw[this._key])) {\n const nestedRef = this._object[this._key];\n if (/* @__PURE__ */ isRef(nestedRef)) {\n nestedRef.value = newVal;\n return;\n }\n }\n this._object[this._key] = newVal;\n }\n get dep() {\n return getDepFromReactive(this._raw, this._key);\n }\n}\nclass GetterRefImpl {\n constructor(_getter) {\n this._getter = _getter;\n this[\"__v_isRef\"] = true;\n this[\"__v_isReadonly\"] = true;\n this._value = void 0;\n }\n get value() {\n return this._value = this._getter();\n }\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRef(source, key, defaultValue) {\n if (/* @__PURE__ */ isRef(source)) {\n return source;\n } else if (isFunction(source)) {\n return new GetterRefImpl(source);\n } else if (isObject(source) && arguments.length > 1) {\n return propertyToRef(source, key, defaultValue);\n } else {\n return /* @__PURE__ */ ref(source);\n }\n}\nfunction propertyToRef(source, key, defaultValue) {\n return new ObjectRefImpl(source, key, defaultValue);\n}\n\nclass ComputedRefImpl {\n constructor(fn, setter, isSSR) {\n this.fn = fn;\n this.setter = setter;\n /**\n * @internal\n */\n this._value = void 0;\n /**\n * @internal\n */\n this.dep = new Dep(this);\n /**\n * @internal\n */\n this.__v_isRef = true;\n // TODO isolatedDeclarations \"__v_isReadonly\"\n // A computed is also a subscriber that tracks other deps\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 16;\n /**\n * @internal\n */\n this.globalVersion = globalVersion - 1;\n /**\n * @internal\n */\n this.next = void 0;\n // for backwards compat\n this.effect = this;\n this[\"__v_isReadonly\"] = !setter;\n this.isSSR = isSSR;\n }\n /**\n * @internal\n */\n notify() {\n this.flags |= 16;\n if (!(this.flags & 8) && // avoid infinite self recursion\n activeSub !== this) {\n batch(this, true);\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\")) ;\n }\n get value() {\n const link = !!(process.env.NODE_ENV !== \"production\") ? this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n }) : this.dep.track();\n refreshComputed(this);\n if (link) {\n link.version = this.dep.version;\n }\n return this._value;\n }\n set value(newValue) {\n if (this.setter) {\n this.setter(newValue);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\"Write operation failed: computed value is readonly\");\n }\n }\n}\n// @__NO_SIDE_EFFECTS__\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n let getter;\n let setter;\n if (isFunction(getterOrOptions)) {\n getter = getterOrOptions;\n } else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n const cRef = new ComputedRefImpl(getter, setter, isSSR);\n if (!!(process.env.NODE_ENV !== \"production\") && debugOptions && !isSSR) {\n cRef.onTrack = debugOptions.onTrack;\n cRef.onTrigger = debugOptions.onTrigger;\n }\n return cRef;\n}\n\nconst TrackOpTypes = {\n \"GET\": \"get\",\n \"HAS\": \"has\",\n \"ITERATE\": \"iterate\"\n};\nconst TriggerOpTypes = {\n \"SET\": \"set\",\n \"ADD\": \"add\",\n \"DELETE\": \"delete\",\n \"CLEAR\": \"clear\"\n};\nconst ReactiveFlags = {\n \"SKIP\": \"__v_skip\",\n \"IS_REACTIVE\": \"__v_isReactive\",\n \"IS_READONLY\": \"__v_isReadonly\",\n \"IS_SHALLOW\": \"__v_isShallow\",\n \"RAW\": \"__v_raw\",\n \"IS_REF\": \"__v_isRef\"\n};\n\nconst WatchErrorCodes = {\n \"WATCH_GETTER\": 2,\n \"2\": \"WATCH_GETTER\",\n \"WATCH_CALLBACK\": 3,\n \"3\": \"WATCH_CALLBACK\",\n \"WATCH_CLEANUP\": 4,\n \"4\": \"WATCH_CLEANUP\"\n};\nconst INITIAL_WATCHER_VALUE = {};\nconst cleanupMap = /* @__PURE__ */ new WeakMap();\nlet activeWatcher = void 0;\nfunction getCurrentWatcher() {\n return activeWatcher;\n}\nfunction onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) {\n if (owner) {\n let cleanups = cleanupMap.get(owner);\n if (!cleanups) cleanupMap.set(owner, cleanups = []);\n cleanups.push(cleanupFn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onWatcherCleanup() was called when there was no active watcher to associate with.`\n );\n }\n}\nfunction watch(source, cb, options = EMPTY_OBJ) {\n const { immediate, deep, once, scheduler, augmentJob, call } = options;\n const warnInvalidSource = (s) => {\n (options.onWarn || warn)(\n `Invalid watch source: `,\n s,\n `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`\n );\n };\n const reactiveGetter = (source2) => {\n if (deep) return source2;\n if (isShallow(source2) || deep === false || deep === 0)\n return traverse(source2, 1);\n return traverse(source2);\n };\n let effect;\n let getter;\n let cleanup;\n let boundCleanup;\n let forceTrigger = false;\n let isMultiSource = false;\n if (isRef(source)) {\n getter = () => source.value;\n forceTrigger = isShallow(source);\n } else if (isReactive(source)) {\n getter = () => reactiveGetter(source);\n forceTrigger = true;\n } else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some((s) => isReactive(s) || isShallow(s));\n getter = () => source.map((s) => {\n if (isRef(s)) {\n return s.value;\n } else if (isReactive(s)) {\n return reactiveGetter(s);\n } else if (isFunction(s)) {\n return call ? call(s, 2) : s();\n } else {\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(s);\n }\n });\n } else if (isFunction(source)) {\n if (cb) {\n getter = call ? () => call(source, 2) : source;\n } else {\n getter = () => {\n if (cleanup) {\n pauseTracking();\n try {\n cleanup();\n } finally {\n resetTracking();\n }\n }\n const currentEffect = activeWatcher;\n activeWatcher = effect;\n try {\n return call ? call(source, 3, [boundCleanup]) : source(boundCleanup);\n } finally {\n activeWatcher = currentEffect;\n }\n };\n }\n } else {\n getter = NOOP;\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(source);\n }\n if (cb && deep) {\n const baseGetter = getter;\n const depth = deep === true ? Infinity : deep;\n getter = () => traverse(baseGetter(), depth);\n }\n const scope = getCurrentScope();\n const watchHandle = () => {\n effect.stop();\n if (scope && scope.active) {\n remove(scope.effects, effect);\n }\n };\n if (once && cb) {\n const _cb = cb;\n cb = (...args) => {\n _cb(...args);\n watchHandle();\n };\n }\n let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;\n const job = (immediateFirstRun) => {\n if (!(effect.flags & 1) || !effect.dirty && !immediateFirstRun) {\n return;\n }\n if (cb) {\n const newValue = effect.run();\n if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) {\n if (cleanup) {\n cleanup();\n }\n const currentWatcher = activeWatcher;\n activeWatcher = effect;\n try {\n const args = [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,\n boundCleanup\n ];\n oldValue = newValue;\n call ? call(cb, 3, args) : (\n // @ts-expect-error\n cb(...args)\n );\n } finally {\n activeWatcher = currentWatcher;\n }\n }\n } else {\n effect.run();\n }\n };\n if (augmentJob) {\n augmentJob(job);\n }\n effect = new ReactiveEffect(getter);\n effect.scheduler = scheduler ? () => scheduler(job, false) : job;\n boundCleanup = (fn) => onWatcherCleanup(fn, false, effect);\n cleanup = effect.onStop = () => {\n const cleanups = cleanupMap.get(effect);\n if (cleanups) {\n if (call) {\n call(cleanups, 4);\n } else {\n for (const cleanup2 of cleanups) cleanup2();\n }\n cleanupMap.delete(effect);\n }\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = options.onTrack;\n effect.onTrigger = options.onTrigger;\n }\n if (cb) {\n if (immediate) {\n job(true);\n } else {\n oldValue = effect.run();\n }\n } else if (scheduler) {\n scheduler(job.bind(null, true), true);\n } else {\n effect.run();\n }\n watchHandle.pause = effect.pause.bind(effect);\n watchHandle.resume = effect.resume.bind(effect);\n watchHandle.stop = watchHandle;\n return watchHandle;\n}\nfunction traverse(value, depth = Infinity, seen) {\n if (depth <= 0 || !isObject(value) || value[\"__v_skip\"]) {\n return value;\n }\n seen = seen || /* @__PURE__ */ new Map();\n if ((seen.get(value) || 0) >= depth) {\n return value;\n }\n seen.set(value, depth);\n depth--;\n if (isRef(value)) {\n traverse(value.value, depth, seen);\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n traverse(value[i], depth, seen);\n }\n } else if (isSet(value) || isMap(value)) {\n value.forEach((v) => {\n traverse(v, depth, seen);\n });\n } else if (isPlainObject(value)) {\n for (const key in value) {\n traverse(value[key], depth, seen);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n if (Object.prototype.propertyIsEnumerable.call(value, key)) {\n traverse(value[key], depth, seen);\n }\n }\n }\n return value;\n}\n\nexport { ARRAY_ITERATE_KEY, EffectFlags, EffectScope, ITERATE_KEY, MAP_KEY_ITERATE_KEY, ReactiveEffect, ReactiveFlags, TrackOpTypes, TriggerOpTypes, WatchErrorCodes, computed, customRef, effect, effectScope, enableTracking, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onEffectCleanup, onScopeDispose, onWatcherCleanup, pauseTracking, proxyRefs, reactive, reactiveReadArray, readonly, ref, resetTracking, shallowReactive, shallowReadArray, shallowReadonly, shallowRef, stop, toRaw, toReactive, toReadonly, toRef, toRefs, toValue, track, traverse, trigger, triggerRef, unref, watch };\n","/**\n* @vue/runtime-core v3.5.27\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { pauseTracking, resetTracking, isRef, toRaw, traverse, watch as watch$1, shallowRef, readonly, isReactive, ref, isShallow, isReadonly, shallowReadArray, toReadonly, toReactive, shallowReadonly, track, reactive, customRef, shallowReactive, trigger, ReactiveEffect, isProxy, proxyRefs, markRaw, EffectScope, computed as computed$1 } from '@vue/reactivity';\nexport { EffectScope, ReactiveEffect, TrackOpTypes, TriggerOpTypes, customRef, effect, effectScope, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, onWatcherCleanup, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, toValue, triggerRef, unref } from '@vue/reactivity';\nimport { isString, isFunction, EMPTY_OBJ, isPromise, isArray, NOOP, getGlobalThis, extend, isBuiltInDirective, NO, hasOwn, remove, def, isOn, isReservedProp, normalizeClass, stringifyStyle, normalizeStyle, isKnownSvgAttr, isBooleanAttr, isKnownHtmlAttr, includeBooleanAttr, isRenderableAttrValue, normalizeCssVarValue, getEscapedCssVarName, isObject, isRegExp, invokeArrayFns, toHandlerKey, camelize, capitalize, isSymbol, isGloballyAllowed, hyphenate, hasChanged, looseToNumber, isModelListener, EMPTY_ARR, makeMap, toRawType, toNumber } from '@vue/shared';\nexport { camelize, capitalize, normalizeClass, normalizeProps, normalizeStyle, toDisplayString, toHandlerKey } from '@vue/shared';\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n stack.push(vnode);\n}\nfunction popWarningContext() {\n stack.pop();\n}\nlet isWarning = false;\nfunction warn$1(msg, ...args) {\n if (isWarning) return;\n isWarning = true;\n pauseTracking();\n const instance = stack.length ? stack[stack.length - 1].component : null;\n const appWarnHandler = instance && instance.appContext.config.warnHandler;\n const trace = getComponentTrace();\n if (appWarnHandler) {\n callWithErrorHandling(\n appWarnHandler,\n instance,\n 11,\n [\n // eslint-disable-next-line no-restricted-syntax\n msg + args.map((a) => {\n var _a, _b;\n return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);\n }).join(\"\"),\n instance && instance.proxy,\n trace.map(\n ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`\n ).join(\"\\n\"),\n trace\n ]\n );\n } else {\n const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n if (trace.length && // avoid spamming console during tests\n true) {\n warnArgs.push(`\n`, ...formatTrace(trace));\n }\n console.warn(...warnArgs);\n }\n resetTracking();\n isWarning = false;\n}\nfunction getComponentTrace() {\n let currentVNode = stack[stack.length - 1];\n if (!currentVNode) {\n return [];\n }\n const normalizedStack = [];\n while (currentVNode) {\n const last = normalizedStack[0];\n if (last && last.vnode === currentVNode) {\n last.recurseCount++;\n } else {\n normalizedStack.push({\n vnode: currentVNode,\n recurseCount: 0\n });\n }\n const parentInstance = currentVNode.component && currentVNode.component.parent;\n currentVNode = parentInstance && parentInstance.vnode;\n }\n return normalizedStack;\n}\nfunction formatTrace(trace) {\n const logs = [];\n trace.forEach((entry, i) => {\n logs.push(...i === 0 ? [] : [`\n`], ...formatTraceEntry(entry));\n });\n return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n const isRoot = vnode.component ? vnode.component.parent == null : false;\n const open = ` at <${formatComponentName(\n vnode.component,\n vnode.type,\n isRoot\n )}`;\n const close = `>` + postfix;\n return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];\n}\nfunction formatProps(props) {\n const res = [];\n const keys = Object.keys(props);\n keys.slice(0, 3).forEach((key) => {\n res.push(...formatProp(key, props[key]));\n });\n if (keys.length > 3) {\n res.push(` ...`);\n }\n return res;\n}\nfunction formatProp(key, value, raw) {\n if (isString(value)) {\n value = JSON.stringify(value);\n return raw ? value : [`${key}=${value}`];\n } else if (typeof value === \"number\" || typeof value === \"boolean\" || value == null) {\n return raw ? value : [`${key}=${value}`];\n } else if (isRef(value)) {\n value = formatProp(key, toRaw(value.value), true);\n return raw ? value : [`${key}=Ref<`, value, `>`];\n } else if (isFunction(value)) {\n return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n } else {\n value = toRaw(value);\n return raw ? value : [`${key}=`, value];\n }\n}\nfunction assertNumber(val, type) {\n if (!!!(process.env.NODE_ENV !== \"production\")) return;\n if (val === void 0) {\n return;\n } else if (typeof val !== \"number\") {\n warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`);\n } else if (isNaN(val)) {\n warn$1(`${type} is NaN - the duration expression might be incorrect.`);\n }\n}\n\nconst ErrorCodes = {\n \"SETUP_FUNCTION\": 0,\n \"0\": \"SETUP_FUNCTION\",\n \"RENDER_FUNCTION\": 1,\n \"1\": \"RENDER_FUNCTION\",\n \"NATIVE_EVENT_HANDLER\": 5,\n \"5\": \"NATIVE_EVENT_HANDLER\",\n \"COMPONENT_EVENT_HANDLER\": 6,\n \"6\": \"COMPONENT_EVENT_HANDLER\",\n \"VNODE_HOOK\": 7,\n \"7\": \"VNODE_HOOK\",\n \"DIRECTIVE_HOOK\": 8,\n \"8\": \"DIRECTIVE_HOOK\",\n \"TRANSITION_HOOK\": 9,\n \"9\": \"TRANSITION_HOOK\",\n \"APP_ERROR_HANDLER\": 10,\n \"10\": \"APP_ERROR_HANDLER\",\n \"APP_WARN_HANDLER\": 11,\n \"11\": \"APP_WARN_HANDLER\",\n \"FUNCTION_REF\": 12,\n \"12\": \"FUNCTION_REF\",\n \"ASYNC_COMPONENT_LOADER\": 13,\n \"13\": \"ASYNC_COMPONENT_LOADER\",\n \"SCHEDULER\": 14,\n \"14\": \"SCHEDULER\",\n \"COMPONENT_UPDATE\": 15,\n \"15\": \"COMPONENT_UPDATE\",\n \"APP_UNMOUNT_CLEANUP\": 16,\n \"16\": \"APP_UNMOUNT_CLEANUP\"\n};\nconst ErrorTypeStrings$1 = {\n [\"sp\"]: \"serverPrefetch hook\",\n [\"bc\"]: \"beforeCreate hook\",\n [\"c\"]: \"created hook\",\n [\"bm\"]: \"beforeMount hook\",\n [\"m\"]: \"mounted hook\",\n [\"bu\"]: \"beforeUpdate hook\",\n [\"u\"]: \"updated\",\n [\"bum\"]: \"beforeUnmount hook\",\n [\"um\"]: \"unmounted hook\",\n [\"a\"]: \"activated hook\",\n [\"da\"]: \"deactivated hook\",\n [\"ec\"]: \"errorCaptured hook\",\n [\"rtc\"]: \"renderTracked hook\",\n [\"rtg\"]: \"renderTriggered hook\",\n [0]: \"setup function\",\n [1]: \"render function\",\n [2]: \"watcher getter\",\n [3]: \"watcher callback\",\n [4]: \"watcher cleanup function\",\n [5]: \"native event handler\",\n [6]: \"component event handler\",\n [7]: \"vnode hook\",\n [8]: \"directive hook\",\n [9]: \"transition hook\",\n [10]: \"app errorHandler\",\n [11]: \"app warnHandler\",\n [12]: \"ref function\",\n [13]: \"async component loader\",\n [14]: \"scheduler flush\",\n [15]: \"component update\",\n [16]: \"app unmount cleanup function\"\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n try {\n return args ? fn(...args) : fn();\n } catch (err) {\n handleError(err, instance, type);\n }\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n if (isFunction(fn)) {\n const res = callWithErrorHandling(fn, instance, type, args);\n if (res && isPromise(res)) {\n res.catch((err) => {\n handleError(err, instance, type);\n });\n }\n return res;\n }\n if (isArray(fn)) {\n const values = [];\n for (let i = 0; i < fn.length; i++) {\n values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n }\n return values;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}`\n );\n }\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n const contextVNode = instance ? instance.vnode : null;\n const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ;\n if (instance) {\n let cur = instance.parent;\n const exposedInstance = instance.proxy;\n const errorInfo = !!(process.env.NODE_ENV !== \"production\") ? ErrorTypeStrings$1[type] : `https://vuejs.org/error-reference/#runtime-${type}`;\n while (cur) {\n const errorCapturedHooks = cur.ec;\n if (errorCapturedHooks) {\n for (let i = 0; i < errorCapturedHooks.length; i++) {\n if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n return;\n }\n }\n }\n cur = cur.parent;\n }\n if (errorHandler) {\n pauseTracking();\n callWithErrorHandling(errorHandler, null, 10, [\n err,\n exposedInstance,\n errorInfo\n ]);\n resetTracking();\n return;\n }\n }\n logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction);\n}\nfunction logError(err, type, contextVNode, throwInDev = true, throwInProd = false) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const info = ErrorTypeStrings$1[type];\n if (contextVNode) {\n pushWarningContext(contextVNode);\n }\n warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n if (contextVNode) {\n popWarningContext();\n }\n if (throwInDev) {\n throw err;\n } else {\n console.error(err);\n }\n } else if (throwInProd) {\n throw err;\n } else {\n console.error(err);\n }\n}\n\nconst queue = [];\nlet flushIndex = -1;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /* @__PURE__ */ Promise.resolve();\nlet currentFlushPromise = null;\nconst RECURSION_LIMIT = 100;\nfunction nextTick(fn) {\n const p = currentFlushPromise || resolvedPromise;\n return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\nfunction findInsertionIndex(id) {\n let start = flushIndex + 1;\n let end = queue.length;\n while (start < end) {\n const middle = start + end >>> 1;\n const middleJob = queue[middle];\n const middleJobId = getId(middleJob);\n if (middleJobId < id || middleJobId === id && middleJob.flags & 2) {\n start = middle + 1;\n } else {\n end = middle;\n }\n }\n return start;\n}\nfunction queueJob(job) {\n if (!(job.flags & 1)) {\n const jobId = getId(job);\n const lastJob = queue[queue.length - 1];\n if (!lastJob || // fast path when the job id is larger than the tail\n !(job.flags & 2) && jobId >= getId(lastJob)) {\n queue.push(job);\n } else {\n queue.splice(findInsertionIndex(jobId), 0, job);\n }\n job.flags |= 1;\n queueFlush();\n }\n}\nfunction queueFlush() {\n if (!currentFlushPromise) {\n currentFlushPromise = resolvedPromise.then(flushJobs);\n }\n}\nfunction queuePostFlushCb(cb) {\n if (!isArray(cb)) {\n if (activePostFlushCbs && cb.id === -1) {\n activePostFlushCbs.splice(postFlushIndex + 1, 0, cb);\n } else if (!(cb.flags & 1)) {\n pendingPostFlushCbs.push(cb);\n cb.flags |= 1;\n }\n } else {\n pendingPostFlushCbs.push(...cb);\n }\n queueFlush();\n}\nfunction flushPreFlushCbs(instance, seen, i = flushIndex + 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (; i < queue.length; i++) {\n const cb = queue[i];\n if (cb && cb.flags & 2) {\n if (instance && cb.id !== instance.uid) {\n continue;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n queue.splice(i, 1);\n i--;\n if (cb.flags & 4) {\n cb.flags &= -2;\n }\n cb();\n if (!(cb.flags & 4)) {\n cb.flags &= -2;\n }\n }\n }\n}\nfunction flushPostFlushCbs(seen) {\n if (pendingPostFlushCbs.length) {\n const deduped = [...new Set(pendingPostFlushCbs)].sort(\n (a, b) => getId(a) - getId(b)\n );\n pendingPostFlushCbs.length = 0;\n if (activePostFlushCbs) {\n activePostFlushCbs.push(...deduped);\n return;\n }\n activePostFlushCbs = deduped;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n const cb = activePostFlushCbs[postFlushIndex];\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n if (cb.flags & 4) {\n cb.flags &= -2;\n }\n if (!(cb.flags & 8)) cb();\n cb.flags &= -2;\n }\n activePostFlushCbs = null;\n postFlushIndex = 0;\n }\n}\nconst getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id;\nfunction flushJobs(seen) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n const check = !!(process.env.NODE_ENV !== \"production\") ? (job) => checkRecursiveUpdates(seen, job) : NOOP;\n try {\n for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job && !(job.flags & 8)) {\n if (!!(process.env.NODE_ENV !== \"production\") && check(job)) {\n continue;\n }\n if (job.flags & 4) {\n job.flags &= ~1;\n }\n callWithErrorHandling(\n job,\n job.i,\n job.i ? 15 : 14\n );\n if (!(job.flags & 4)) {\n job.flags &= ~1;\n }\n }\n }\n } finally {\n for (; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job) {\n job.flags &= -2;\n }\n }\n flushIndex = -1;\n queue.length = 0;\n flushPostFlushCbs(seen);\n currentFlushPromise = null;\n if (queue.length || pendingPostFlushCbs.length) {\n flushJobs(seen);\n }\n }\n}\nfunction checkRecursiveUpdates(seen, fn) {\n const count = seen.get(fn) || 0;\n if (count > RECURSION_LIMIT) {\n const instance = fn.i;\n const componentName = instance && getComponentName(instance.type);\n handleError(\n `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,\n null,\n 10\n );\n return true;\n }\n seen.set(fn, count + 1);\n return false;\n}\n\nlet isHmrUpdating = false;\nconst hmrDirtyComponents = /* @__PURE__ */ new Map();\nif (!!(process.env.NODE_ENV !== \"production\")) {\n getGlobalThis().__VUE_HMR_RUNTIME__ = {\n createRecord: tryWrap(createRecord),\n rerender: tryWrap(rerender),\n reload: tryWrap(reload)\n };\n}\nconst map = /* @__PURE__ */ new Map();\nfunction registerHMR(instance) {\n const id = instance.type.__hmrId;\n let record = map.get(id);\n if (!record) {\n createRecord(id, instance.type);\n record = map.get(id);\n }\n record.instances.add(instance);\n}\nfunction unregisterHMR(instance) {\n map.get(instance.type.__hmrId).instances.delete(instance);\n}\nfunction createRecord(id, initialDef) {\n if (map.has(id)) {\n return false;\n }\n map.set(id, {\n initialDef: normalizeClassComponent(initialDef),\n instances: /* @__PURE__ */ new Set()\n });\n return true;\n}\nfunction normalizeClassComponent(component) {\n return isClassComponent(component) ? component.__vccOpts : component;\n}\nfunction rerender(id, newRender) {\n const record = map.get(id);\n if (!record) {\n return;\n }\n record.initialDef.render = newRender;\n [...record.instances].forEach((instance) => {\n if (newRender) {\n instance.render = newRender;\n normalizeClassComponent(instance.type).render = newRender;\n }\n instance.renderCache = [];\n isHmrUpdating = true;\n if (!(instance.job.flags & 8)) {\n instance.update();\n }\n isHmrUpdating = false;\n });\n}\nfunction reload(id, newComp) {\n const record = map.get(id);\n if (!record) return;\n newComp = normalizeClassComponent(newComp);\n updateComponentDef(record.initialDef, newComp);\n const instances = [...record.instances];\n for (let i = 0; i < instances.length; i++) {\n const instance = instances[i];\n const oldComp = normalizeClassComponent(instance.type);\n let dirtyInstances = hmrDirtyComponents.get(oldComp);\n if (!dirtyInstances) {\n if (oldComp !== record.initialDef) {\n updateComponentDef(oldComp, newComp);\n }\n hmrDirtyComponents.set(oldComp, dirtyInstances = /* @__PURE__ */ new Set());\n }\n dirtyInstances.add(instance);\n instance.appContext.propsCache.delete(instance.type);\n instance.appContext.emitsCache.delete(instance.type);\n instance.appContext.optionsCache.delete(instance.type);\n if (instance.ceReload) {\n dirtyInstances.add(instance);\n instance.ceReload(newComp.styles);\n dirtyInstances.delete(instance);\n } else if (instance.parent) {\n queueJob(() => {\n if (!(instance.job.flags & 8)) {\n isHmrUpdating = true;\n instance.parent.update();\n isHmrUpdating = false;\n dirtyInstances.delete(instance);\n }\n });\n } else if (instance.appContext.reload) {\n instance.appContext.reload();\n } else if (typeof window !== \"undefined\") {\n window.location.reload();\n } else {\n console.warn(\n \"[HMR] Root or manually mounted instance modified. Full reload required.\"\n );\n }\n if (instance.root.ce && instance !== instance.root) {\n instance.root.ce._removeChildStyle(oldComp);\n }\n }\n queuePostFlushCb(() => {\n hmrDirtyComponents.clear();\n });\n}\nfunction updateComponentDef(oldComp, newComp) {\n extend(oldComp, newComp);\n for (const key in oldComp) {\n if (key !== \"__file\" && !(key in newComp)) {\n delete oldComp[key];\n }\n }\n}\nfunction tryWrap(fn) {\n return (id, arg) => {\n try {\n return fn(id, arg);\n } catch (e) {\n console.error(e);\n console.warn(\n `[HMR] Something went wrong during Vue component hot-reload. Full reload required.`\n );\n }\n };\n}\n\nlet devtools$1;\nlet buffer = [];\nlet devtoolsNotInstalled = false;\nfunction emit$1(event, ...args) {\n if (devtools$1) {\n devtools$1.emit(event, ...args);\n } else if (!devtoolsNotInstalled) {\n buffer.push({ event, args });\n }\n}\nfunction setDevtoolsHook$1(hook, target) {\n var _a, _b;\n devtools$1 = hook;\n if (devtools$1) {\n devtools$1.enabled = true;\n buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args));\n buffer = [];\n } else if (\n // handle late devtools injection - only do this if we are in an actual\n // browser environment to avoid the timer handle stalling test runner exit\n // (#4815)\n typeof window !== \"undefined\" && // some envs mock window but not fully\n window.HTMLElement && // also exclude jsdom\n // eslint-disable-next-line no-restricted-syntax\n !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes(\"jsdom\"))\n ) {\n const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];\n replay.push((newHook) => {\n setDevtoolsHook$1(newHook, target);\n });\n setTimeout(() => {\n if (!devtools$1) {\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\n devtoolsNotInstalled = true;\n buffer = [];\n }\n }, 3e3);\n } else {\n devtoolsNotInstalled = true;\n buffer = [];\n }\n}\nfunction devtoolsInitApp(app, version) {\n emit$1(\"app:init\" /* APP_INIT */, app, version, {\n Fragment,\n Text,\n Comment,\n Static\n });\n}\nfunction devtoolsUnmountApp(app) {\n emit$1(\"app:unmount\" /* APP_UNMOUNT */, app);\n}\nconst devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook(\"component:added\" /* COMPONENT_ADDED */);\nconst devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook(\"component:updated\" /* COMPONENT_UPDATED */);\nconst _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(\n \"component:removed\" /* COMPONENT_REMOVED */\n);\nconst devtoolsComponentRemoved = (component) => {\n if (devtools$1 && typeof devtools$1.cleanupBuffer === \"function\" && // remove the component if it wasn't buffered\n !devtools$1.cleanupBuffer(component)) {\n _devtoolsComponentRemoved(component);\n }\n};\n// @__NO_SIDE_EFFECTS__\nfunction createDevtoolsComponentHook(hook) {\n return (component) => {\n emit$1(\n hook,\n component.appContext.app,\n component.uid,\n component.parent ? component.parent.uid : void 0,\n component\n );\n };\n}\nconst devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook(\"perf:start\" /* PERFORMANCE_START */);\nconst devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook(\"perf:end\" /* PERFORMANCE_END */);\nfunction createDevtoolsPerformanceHook(hook) {\n return (component, type, time) => {\n emit$1(hook, component.appContext.app, component.uid, component, type, time);\n };\n}\nfunction devtoolsComponentEmit(component, event, params) {\n emit$1(\n \"component:emit\" /* COMPONENT_EMIT */,\n component.appContext.app,\n component,\n event,\n params\n );\n}\n\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\nfunction setCurrentRenderingInstance(instance) {\n const prev = currentRenderingInstance;\n currentRenderingInstance = instance;\n currentScopeId = instance && instance.type.__scopeId || null;\n return prev;\n}\nfunction pushScopeId(id) {\n currentScopeId = id;\n}\nfunction popScopeId() {\n currentScopeId = null;\n}\nconst withScopeId = (_id) => withCtx;\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) {\n if (!ctx) return fn;\n if (fn._n) {\n return fn;\n }\n const renderFnWithContext = (...args) => {\n if (renderFnWithContext._d) {\n setBlockTracking(-1);\n }\n const prevInstance = setCurrentRenderingInstance(ctx);\n let res;\n try {\n res = fn(...args);\n } finally {\n setCurrentRenderingInstance(prevInstance);\n if (renderFnWithContext._d) {\n setBlockTracking(1);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(ctx);\n }\n return res;\n };\n renderFnWithContext._n = true;\n renderFnWithContext._c = true;\n renderFnWithContext._d = true;\n return renderFnWithContext;\n}\n\nfunction validateDirectiveName(name) {\n if (isBuiltInDirective(name)) {\n warn$1(\"Do not use built-in directive ids as custom directive id: \" + name);\n }\n}\nfunction withDirectives(vnode, directives) {\n if (currentRenderingInstance === null) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`withDirectives can only be used inside render functions.`);\n return vnode;\n }\n const instance = getComponentPublicInstance(currentRenderingInstance);\n const bindings = vnode.dirs || (vnode.dirs = []);\n for (let i = 0; i < directives.length; i++) {\n let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];\n if (dir) {\n if (isFunction(dir)) {\n dir = {\n mounted: dir,\n updated: dir\n };\n }\n if (dir.deep) {\n traverse(value);\n }\n bindings.push({\n dir,\n instance,\n value,\n oldValue: void 0,\n arg,\n modifiers\n });\n }\n }\n return vnode;\n}\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\n const bindings = vnode.dirs;\n const oldBindings = prevVNode && prevVNode.dirs;\n for (let i = 0; i < bindings.length; i++) {\n const binding = bindings[i];\n if (oldBindings) {\n binding.oldValue = oldBindings[i].value;\n }\n let hook = binding.dir[name];\n if (hook) {\n pauseTracking();\n callWithAsyncErrorHandling(hook, instance, 8, [\n vnode.el,\n binding,\n vnode,\n prevVNode\n ]);\n resetTracking();\n }\n }\n}\n\nfunction provide(key, value) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!currentInstance || currentInstance.isMounted) {\n warn$1(`provide() can only be used inside setup().`);\n }\n }\n if (currentInstance) {\n let provides = currentInstance.provides;\n const parentProvides = currentInstance.parent && currentInstance.parent.provides;\n if (parentProvides === provides) {\n provides = currentInstance.provides = Object.create(parentProvides);\n }\n provides[key] = value;\n }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory = false) {\n const instance = getCurrentInstance();\n if (instance || currentApp) {\n let provides = currentApp ? currentApp._context.provides : instance ? instance.parent == null || instance.ce ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : void 0;\n if (provides && key in provides) {\n return provides[key];\n } else if (arguments.length > 1) {\n return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`injection \"${String(key)}\" not found.`);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`inject() can only be used inside setup() or functional components.`);\n }\n}\nfunction hasInjectionContext() {\n return !!(getCurrentInstance() || currentApp);\n}\n\nconst ssrContextKey = /* @__PURE__ */ Symbol.for(\"v-scx\");\nconst useSSRContext = () => {\n {\n const ctx = inject(ssrContextKey);\n if (!ctx) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build.`\n );\n }\n return ctx;\n }\n};\n\nfunction watchEffect(effect, options) {\n return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"post\" }) : { flush: \"post\" }\n );\n}\nfunction watchSyncEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"sync\" }) : { flush: \"sync\" }\n );\n}\nfunction watch(source, cb, options) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isFunction(cb)) {\n warn$1(\n `\\`watch(fn, options?)\\` signature has been moved to a separate API. Use \\`watchEffect(fn, options?)\\` instead. \\`watch\\` now only supports \\`watch(source, cb, options?) signature.`\n );\n }\n return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, options = EMPTY_OBJ) {\n const { immediate, deep, flush, once } = options;\n if (!!(process.env.NODE_ENV !== \"production\") && !cb) {\n if (immediate !== void 0) {\n warn$1(\n `watch() \"immediate\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n if (deep !== void 0) {\n warn$1(\n `watch() \"deep\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n if (once !== void 0) {\n warn$1(\n `watch() \"once\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n }\n const baseWatchOptions = extend({}, options);\n if (!!(process.env.NODE_ENV !== \"production\")) baseWatchOptions.onWarn = warn$1;\n const runsImmediately = cb && immediate || !cb && flush !== \"post\";\n let ssrCleanup;\n if (isInSSRComponentSetup) {\n if (flush === \"sync\") {\n const ctx = useSSRContext();\n ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []);\n } else if (!runsImmediately) {\n const watchStopHandle = () => {\n };\n watchStopHandle.stop = NOOP;\n watchStopHandle.resume = NOOP;\n watchStopHandle.pause = NOOP;\n return watchStopHandle;\n }\n }\n const instance = currentInstance;\n baseWatchOptions.call = (fn, type, args) => callWithAsyncErrorHandling(fn, instance, type, args);\n let isPre = false;\n if (flush === \"post\") {\n baseWatchOptions.scheduler = (job) => {\n queuePostRenderEffect(job, instance && instance.suspense);\n };\n } else if (flush !== \"sync\") {\n isPre = true;\n baseWatchOptions.scheduler = (job, isFirstRun) => {\n if (isFirstRun) {\n job();\n } else {\n queueJob(job);\n }\n };\n }\n baseWatchOptions.augmentJob = (job) => {\n if (cb) {\n job.flags |= 4;\n }\n if (isPre) {\n job.flags |= 2;\n if (instance) {\n job.id = instance.uid;\n job.i = instance;\n }\n }\n };\n const watchHandle = watch$1(source, cb, baseWatchOptions);\n if (isInSSRComponentSetup) {\n if (ssrCleanup) {\n ssrCleanup.push(watchHandle);\n } else if (runsImmediately) {\n watchHandle();\n }\n }\n return watchHandle;\n}\nfunction instanceWatch(source, value, options) {\n const publicThis = this.proxy;\n const getter = isString(source) ? source.includes(\".\") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);\n let cb;\n if (isFunction(value)) {\n cb = value;\n } else {\n cb = value.handler;\n options = value;\n }\n const reset = setCurrentInstance(this);\n const res = doWatch(getter, cb.bind(publicThis), options);\n reset();\n return res;\n}\nfunction createPathGetter(ctx, path) {\n const segments = path.split(\".\");\n return () => {\n let cur = ctx;\n for (let i = 0; i < segments.length && cur; i++) {\n cur = cur[segments[i]];\n }\n return cur;\n };\n}\n\nconst TeleportEndKey = /* @__PURE__ */ Symbol(\"_vte\");\nconst isTeleport = (type) => type.__isTeleport;\nconst isTeleportDisabled = (props) => props && (props.disabled || props.disabled === \"\");\nconst isTeleportDeferred = (props) => props && (props.defer || props.defer === \"\");\nconst isTargetSVG = (target) => typeof SVGElement !== \"undefined\" && target instanceof SVGElement;\nconst isTargetMathML = (target) => typeof MathMLElement === \"function\" && target instanceof MathMLElement;\nconst resolveTarget = (props, select) => {\n const targetSelector = props && props.to;\n if (isString(targetSelector)) {\n if (!select) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Current renderer does not support string target for Teleports. (missing querySelector renderer option)`\n );\n return null;\n } else {\n const target = select(targetSelector);\n if (!!(process.env.NODE_ENV !== \"production\") && !target && !isTeleportDisabled(props)) {\n warn$1(\n `Failed to locate Teleport target with selector \"${targetSelector}\". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.`\n );\n }\n return target;\n }\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && !targetSelector && !isTeleportDisabled(props)) {\n warn$1(`Invalid Teleport target: ${targetSelector}`);\n }\n return targetSelector;\n }\n};\nconst TeleportImpl = {\n name: \"Teleport\",\n __isTeleport: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, internals) {\n const {\n mc: mountChildren,\n pc: patchChildren,\n pbc: patchBlockChildren,\n o: { insert, querySelector, createText, createComment }\n } = internals;\n const disabled = isTeleportDisabled(n2.props);\n let { shapeFlag, children, dynamicChildren } = n2;\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n optimized = false;\n dynamicChildren = null;\n }\n if (n1 == null) {\n const placeholder = n2.el = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport start\") : createText(\"\");\n const mainAnchor = n2.anchor = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport end\") : createText(\"\");\n insert(placeholder, container, anchor);\n insert(mainAnchor, container, anchor);\n const mount = (container2, anchor2) => {\n if (shapeFlag & 16) {\n mountChildren(\n children,\n container2,\n anchor2,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n };\n const mountToTarget = () => {\n const target = n2.target = resolveTarget(n2.props, querySelector);\n const targetAnchor = prepareAnchor(target, n2, createText, insert);\n if (target) {\n if (namespace !== \"svg\" && isTargetSVG(target)) {\n namespace = \"svg\";\n } else if (namespace !== \"mathml\" && isTargetMathML(target)) {\n namespace = \"mathml\";\n }\n if (parentComponent && parentComponent.isCE) {\n (parentComponent.ce._teleportTargets || (parentComponent.ce._teleportTargets = /* @__PURE__ */ new Set())).add(target);\n }\n if (!disabled) {\n mount(target, targetAnchor);\n updateCssVars(n2, false);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && !disabled) {\n warn$1(\n \"Invalid Teleport target on mount:\",\n target,\n `(${typeof target})`\n );\n }\n };\n if (disabled) {\n mount(container, mainAnchor);\n updateCssVars(n2, true);\n }\n if (isTeleportDeferred(n2.props)) {\n n2.el.__isMounted = false;\n queuePostRenderEffect(() => {\n mountToTarget();\n delete n2.el.__isMounted;\n }, parentSuspense);\n } else {\n mountToTarget();\n }\n } else {\n if (isTeleportDeferred(n2.props) && n1.el.__isMounted === false) {\n queuePostRenderEffect(() => {\n TeleportImpl.process(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n internals\n );\n }, parentSuspense);\n return;\n }\n n2.el = n1.el;\n n2.targetStart = n1.targetStart;\n const mainAnchor = n2.anchor = n1.anchor;\n const target = n2.target = n1.target;\n const targetAnchor = n2.targetAnchor = n1.targetAnchor;\n const wasDisabled = isTeleportDisabled(n1.props);\n const currentContainer = wasDisabled ? container : target;\n const currentAnchor = wasDisabled ? mainAnchor : targetAnchor;\n if (namespace === \"svg\" || isTargetSVG(target)) {\n namespace = \"svg\";\n } else if (namespace === \"mathml\" || isTargetMathML(target)) {\n namespace = \"mathml\";\n }\n if (dynamicChildren) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n currentContainer,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds\n );\n traverseStaticChildren(n1, n2, !!!(process.env.NODE_ENV !== \"production\"));\n } else if (!optimized) {\n patchChildren(\n n1,\n n2,\n currentContainer,\n currentAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n false\n );\n }\n if (disabled) {\n if (!wasDisabled) {\n moveTeleport(\n n2,\n container,\n mainAnchor,\n internals,\n 1\n );\n } else {\n if (n2.props && n1.props && n2.props.to !== n1.props.to) {\n n2.props.to = n1.props.to;\n }\n }\n } else {\n if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) {\n const nextTarget = n2.target = resolveTarget(\n n2.props,\n querySelector\n );\n if (nextTarget) {\n moveTeleport(\n n2,\n nextTarget,\n null,\n internals,\n 0\n );\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n \"Invalid Teleport target on update:\",\n target,\n `(${typeof target})`\n );\n }\n } else if (wasDisabled) {\n moveTeleport(\n n2,\n target,\n targetAnchor,\n internals,\n 1\n );\n }\n }\n updateCssVars(n2, disabled);\n }\n },\n remove(vnode, parentComponent, parentSuspense, { um: unmount, o: { remove: hostRemove } }, doRemove) {\n const {\n shapeFlag,\n children,\n anchor,\n targetStart,\n targetAnchor,\n target,\n props\n } = vnode;\n if (target) {\n hostRemove(targetStart);\n hostRemove(targetAnchor);\n }\n doRemove && hostRemove(anchor);\n if (shapeFlag & 16) {\n const shouldRemove = doRemove || !isTeleportDisabled(props);\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n unmount(\n child,\n parentComponent,\n parentSuspense,\n shouldRemove,\n !!child.dynamicChildren\n );\n }\n }\n },\n move: moveTeleport,\n hydrate: hydrateTeleport\n};\nfunction moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) {\n if (moveType === 0) {\n insert(vnode.targetAnchor, container, parentAnchor);\n }\n const { el, anchor, shapeFlag, children, props } = vnode;\n const isReorder = moveType === 2;\n if (isReorder) {\n insert(el, container, parentAnchor);\n }\n if (!isReorder || isTeleportDisabled(props)) {\n if (shapeFlag & 16) {\n for (let i = 0; i < children.length; i++) {\n move(\n children[i],\n container,\n parentAnchor,\n 2\n );\n }\n }\n }\n if (isReorder) {\n insert(anchor, container, parentAnchor);\n }\n}\nfunction hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, {\n o: { nextSibling, parentNode, querySelector, insert, createText }\n}, hydrateChildren) {\n function hydrateDisabledTeleport(node2, vnode2, targetStart, targetAnchor) {\n vnode2.anchor = hydrateChildren(\n nextSibling(node2),\n vnode2,\n parentNode(node2),\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n vnode2.targetStart = targetStart;\n vnode2.targetAnchor = targetAnchor;\n }\n const target = vnode.target = resolveTarget(\n vnode.props,\n querySelector\n );\n const disabled = isTeleportDisabled(vnode.props);\n if (target) {\n const targetNode = target._lpa || target.firstChild;\n if (vnode.shapeFlag & 16) {\n if (disabled) {\n hydrateDisabledTeleport(\n node,\n vnode,\n targetNode,\n targetNode && nextSibling(targetNode)\n );\n } else {\n vnode.anchor = nextSibling(node);\n let targetAnchor = targetNode;\n while (targetAnchor) {\n if (targetAnchor && targetAnchor.nodeType === 8) {\n if (targetAnchor.data === \"teleport start anchor\") {\n vnode.targetStart = targetAnchor;\n } else if (targetAnchor.data === \"teleport anchor\") {\n vnode.targetAnchor = targetAnchor;\n target._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor);\n break;\n }\n }\n targetAnchor = nextSibling(targetAnchor);\n }\n if (!vnode.targetAnchor) {\n prepareAnchor(target, vnode, createText, insert);\n }\n hydrateChildren(\n targetNode && nextSibling(targetNode),\n vnode,\n target,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n }\n updateCssVars(vnode, disabled);\n } else if (disabled) {\n if (vnode.shapeFlag & 16) {\n hydrateDisabledTeleport(node, vnode, node, nextSibling(node));\n }\n }\n return vnode.anchor && nextSibling(vnode.anchor);\n}\nconst Teleport = TeleportImpl;\nfunction updateCssVars(vnode, isDisabled) {\n const ctx = vnode.ctx;\n if (ctx && ctx.ut) {\n let node, anchor;\n if (isDisabled) {\n node = vnode.el;\n anchor = vnode.anchor;\n } else {\n node = vnode.targetStart;\n anchor = vnode.targetAnchor;\n }\n while (node && node !== anchor) {\n if (node.nodeType === 1) node.setAttribute(\"data-v-owner\", ctx.uid);\n node = node.nextSibling;\n }\n ctx.ut();\n }\n}\nfunction prepareAnchor(target, vnode, createText, insert) {\n const targetStart = vnode.targetStart = createText(\"\");\n const targetAnchor = vnode.targetAnchor = createText(\"\");\n targetStart[TeleportEndKey] = targetAnchor;\n if (target) {\n insert(targetStart, target);\n insert(targetAnchor, target);\n }\n return targetAnchor;\n}\n\nconst leaveCbKey = /* @__PURE__ */ Symbol(\"_leaveCb\");\nconst enterCbKey = /* @__PURE__ */ Symbol(\"_enterCb\");\nfunction useTransitionState() {\n const state = {\n isMounted: false,\n isLeaving: false,\n isUnmounting: false,\n leavingVNodes: /* @__PURE__ */ new Map()\n };\n onMounted(() => {\n state.isMounted = true;\n });\n onBeforeUnmount(() => {\n state.isUnmounting = true;\n });\n return state;\n}\nconst TransitionHookValidator = [Function, Array];\nconst BaseTransitionPropsValidators = {\n mode: String,\n appear: Boolean,\n persisted: Boolean,\n // enter\n onBeforeEnter: TransitionHookValidator,\n onEnter: TransitionHookValidator,\n onAfterEnter: TransitionHookValidator,\n onEnterCancelled: TransitionHookValidator,\n // leave\n onBeforeLeave: TransitionHookValidator,\n onLeave: TransitionHookValidator,\n onAfterLeave: TransitionHookValidator,\n onLeaveCancelled: TransitionHookValidator,\n // appear\n onBeforeAppear: TransitionHookValidator,\n onAppear: TransitionHookValidator,\n onAfterAppear: TransitionHookValidator,\n onAppearCancelled: TransitionHookValidator\n};\nconst recursiveGetSubtree = (instance) => {\n const subTree = instance.subTree;\n return subTree.component ? recursiveGetSubtree(subTree.component) : subTree;\n};\nconst BaseTransitionImpl = {\n name: `BaseTransition`,\n props: BaseTransitionPropsValidators,\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n return () => {\n const children = slots.default && getTransitionRawChildren(slots.default(), true);\n if (!children || !children.length) {\n return;\n }\n const child = findNonCommentChild(children);\n const rawProps = toRaw(props);\n const { mode } = rawProps;\n if (!!(process.env.NODE_ENV !== \"production\") && mode && mode !== \"in-out\" && mode !== \"out-in\" && mode !== \"default\") {\n warn$1(`invalid <transition> mode: ${mode}`);\n }\n if (state.isLeaving) {\n return emptyPlaceholder(child);\n }\n const innerChild = getInnerChild$1(child);\n if (!innerChild) {\n return emptyPlaceholder(child);\n }\n let enterHooks = resolveTransitionHooks(\n innerChild,\n rawProps,\n state,\n instance,\n // #11061, ensure enterHooks is fresh after clone\n (hooks) => enterHooks = hooks\n );\n if (innerChild.type !== Comment) {\n setTransitionHooks(innerChild, enterHooks);\n }\n let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree);\n if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(oldInnerChild, innerChild) && recursiveGetSubtree(instance).type !== Comment) {\n let leavingHooks = resolveTransitionHooks(\n oldInnerChild,\n rawProps,\n state,\n instance\n );\n setTransitionHooks(oldInnerChild, leavingHooks);\n if (mode === \"out-in\" && innerChild.type !== Comment) {\n state.isLeaving = true;\n leavingHooks.afterLeave = () => {\n state.isLeaving = false;\n if (!(instance.job.flags & 8)) {\n instance.update();\n }\n delete leavingHooks.afterLeave;\n oldInnerChild = void 0;\n };\n return emptyPlaceholder(child);\n } else if (mode === \"in-out\" && innerChild.type !== Comment) {\n leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\n const leavingVNodesCache = getLeavingNodesForType(\n state,\n oldInnerChild\n );\n leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\n el[leaveCbKey] = () => {\n earlyRemove();\n el[leaveCbKey] = void 0;\n delete enterHooks.delayedLeave;\n oldInnerChild = void 0;\n };\n enterHooks.delayedLeave = () => {\n delayedLeave();\n delete enterHooks.delayedLeave;\n oldInnerChild = void 0;\n };\n };\n } else {\n oldInnerChild = void 0;\n }\n } else if (oldInnerChild) {\n oldInnerChild = void 0;\n }\n return child;\n };\n }\n};\nfunction findNonCommentChild(children) {\n let child = children[0];\n if (children.length > 1) {\n let hasFound = false;\n for (const c of children) {\n if (c.type !== Comment) {\n if (!!(process.env.NODE_ENV !== \"production\") && hasFound) {\n warn$1(\n \"<transition> can only be used on a single element or component. Use <transition-group> for lists.\"\n );\n break;\n }\n child = c;\n hasFound = true;\n if (!!!(process.env.NODE_ENV !== \"production\")) break;\n }\n }\n }\n return child;\n}\nconst BaseTransition = BaseTransitionImpl;\nfunction getLeavingNodesForType(state, vnode) {\n const { leavingVNodes } = state;\n let leavingVNodesCache = leavingVNodes.get(vnode.type);\n if (!leavingVNodesCache) {\n leavingVNodesCache = /* @__PURE__ */ Object.create(null);\n leavingVNodes.set(vnode.type, leavingVNodesCache);\n }\n return leavingVNodesCache;\n}\nfunction resolveTransitionHooks(vnode, props, state, instance, postClone) {\n const {\n appear,\n mode,\n persisted = false,\n onBeforeEnter,\n onEnter,\n onAfterEnter,\n onEnterCancelled,\n onBeforeLeave,\n onLeave,\n onAfterLeave,\n onLeaveCancelled,\n onBeforeAppear,\n onAppear,\n onAfterAppear,\n onAppearCancelled\n } = props;\n const key = String(vnode.key);\n const leavingVNodesCache = getLeavingNodesForType(state, vnode);\n const callHook = (hook, args) => {\n hook && callWithAsyncErrorHandling(\n hook,\n instance,\n 9,\n args\n );\n };\n const callAsyncHook = (hook, args) => {\n const done = args[1];\n callHook(hook, args);\n if (isArray(hook)) {\n if (hook.every((hook2) => hook2.length <= 1)) done();\n } else if (hook.length <= 1) {\n done();\n }\n };\n const hooks = {\n mode,\n persisted,\n beforeEnter(el) {\n let hook = onBeforeEnter;\n if (!state.isMounted) {\n if (appear) {\n hook = onBeforeAppear || onBeforeEnter;\n } else {\n return;\n }\n }\n if (el[leaveCbKey]) {\n el[leaveCbKey](\n true\n /* cancelled */\n );\n }\n const leavingVNode = leavingVNodesCache[key];\n if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) {\n leavingVNode.el[leaveCbKey]();\n }\n callHook(hook, [el]);\n },\n enter(el) {\n let hook = onEnter;\n let afterHook = onAfterEnter;\n let cancelHook = onEnterCancelled;\n if (!state.isMounted) {\n if (appear) {\n hook = onAppear || onEnter;\n afterHook = onAfterAppear || onAfterEnter;\n cancelHook = onAppearCancelled || onEnterCancelled;\n } else {\n return;\n }\n }\n let called = false;\n const done = el[enterCbKey] = (cancelled) => {\n if (called) return;\n called = true;\n if (cancelled) {\n callHook(cancelHook, [el]);\n } else {\n callHook(afterHook, [el]);\n }\n if (hooks.delayedLeave) {\n hooks.delayedLeave();\n }\n el[enterCbKey] = void 0;\n };\n if (hook) {\n callAsyncHook(hook, [el, done]);\n } else {\n done();\n }\n },\n leave(el, remove) {\n const key2 = String(vnode.key);\n if (el[enterCbKey]) {\n el[enterCbKey](\n true\n /* cancelled */\n );\n }\n if (state.isUnmounting) {\n return remove();\n }\n callHook(onBeforeLeave, [el]);\n let called = false;\n const done = el[leaveCbKey] = (cancelled) => {\n if (called) return;\n called = true;\n remove();\n if (cancelled) {\n callHook(onLeaveCancelled, [el]);\n } else {\n callHook(onAfterLeave, [el]);\n }\n el[leaveCbKey] = void 0;\n if (leavingVNodesCache[key2] === vnode) {\n delete leavingVNodesCache[key2];\n }\n };\n leavingVNodesCache[key2] = vnode;\n if (onLeave) {\n callAsyncHook(onLeave, [el, done]);\n } else {\n done();\n }\n },\n clone(vnode2) {\n const hooks2 = resolveTransitionHooks(\n vnode2,\n props,\n state,\n instance,\n postClone\n );\n if (postClone) postClone(hooks2);\n return hooks2;\n }\n };\n return hooks;\n}\nfunction emptyPlaceholder(vnode) {\n if (isKeepAlive(vnode)) {\n vnode = cloneVNode(vnode);\n vnode.children = null;\n return vnode;\n }\n}\nfunction getInnerChild$1(vnode) {\n if (!isKeepAlive(vnode)) {\n if (isTeleport(vnode.type) && vnode.children) {\n return findNonCommentChild(vnode.children);\n }\n return vnode;\n }\n if (vnode.component) {\n return vnode.component.subTree;\n }\n const { shapeFlag, children } = vnode;\n if (children) {\n if (shapeFlag & 16) {\n return children[0];\n }\n if (shapeFlag & 32 && isFunction(children.default)) {\n return children.default();\n }\n }\n}\nfunction setTransitionHooks(vnode, hooks) {\n if (vnode.shapeFlag & 6 && vnode.component) {\n vnode.transition = hooks;\n setTransitionHooks(vnode.component.subTree, hooks);\n } else if (vnode.shapeFlag & 128) {\n vnode.ssContent.transition = hooks.clone(vnode.ssContent);\n vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\n } else {\n vnode.transition = hooks;\n }\n}\nfunction getTransitionRawChildren(children, keepComment = false, parentKey) {\n let ret = [];\n let keyedFragmentCount = 0;\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i);\n if (child.type === Fragment) {\n if (child.patchFlag & 128) keyedFragmentCount++;\n ret = ret.concat(\n getTransitionRawChildren(child.children, keepComment, key)\n );\n } else if (keepComment || child.type !== Comment) {\n ret.push(key != null ? cloneVNode(child, { key }) : child);\n }\n }\n if (keyedFragmentCount > 1) {\n for (let i = 0; i < ret.length; i++) {\n ret[i].patchFlag = -2;\n }\n }\n return ret;\n}\n\n// @__NO_SIDE_EFFECTS__\nfunction defineComponent(options, extraOptions) {\n return isFunction(options) ? (\n // #8236: extend call and options.name access are considered side-effects\n // by Rollup, so we have to wrap it in a pure-annotated IIFE.\n /* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))()\n ) : options;\n}\n\nfunction useId() {\n const i = getCurrentInstance();\n if (i) {\n return (i.appContext.config.idPrefix || \"v\") + \"-\" + i.ids[0] + i.ids[1]++;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `useId() is called when there is no active component instance to be associated with.`\n );\n }\n return \"\";\n}\nfunction markAsyncBoundary(instance) {\n instance.ids = [instance.ids[0] + instance.ids[2]++ + \"-\", 0, 0];\n}\n\nconst knownTemplateRefs = /* @__PURE__ */ new WeakSet();\nfunction useTemplateRef(key) {\n const i = getCurrentInstance();\n const r = shallowRef(null);\n if (i) {\n const refs = i.refs === EMPTY_OBJ ? i.refs = {} : i.refs;\n let desc;\n if (!!(process.env.NODE_ENV !== \"production\") && (desc = Object.getOwnPropertyDescriptor(refs, key)) && !desc.configurable) {\n warn$1(`useTemplateRef('${key}') already exists.`);\n } else {\n Object.defineProperty(refs, key, {\n enumerable: true,\n get: () => r.value,\n set: (val) => r.value = val\n });\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `useTemplateRef() is called when there is no active component instance to be associated with.`\n );\n }\n const ret = !!(process.env.NODE_ENV !== \"production\") ? readonly(r) : r;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n knownTemplateRefs.add(ret);\n }\n return ret;\n}\n\nconst pendingSetRefMap = /* @__PURE__ */ new WeakMap();\nfunction setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {\n if (isArray(rawRef)) {\n rawRef.forEach(\n (r, i) => setRef(\n r,\n oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef),\n parentSuspense,\n vnode,\n isUnmount\n )\n );\n return;\n }\n if (isAsyncWrapper(vnode) && !isUnmount) {\n if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) {\n setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree);\n }\n return;\n }\n const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el;\n const value = isUnmount ? null : refValue;\n const { i: owner, r: ref } = rawRef;\n if (!!(process.env.NODE_ENV !== \"production\") && !owner) {\n warn$1(\n `Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.`\n );\n return;\n }\n const oldRef = oldRawRef && oldRawRef.r;\n const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs;\n const setupState = owner.setupState;\n const rawSetupState = toRaw(setupState);\n const canSetSetupRef = setupState === EMPTY_OBJ ? NO : (key) => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (hasOwn(rawSetupState, key) && !isRef(rawSetupState[key])) {\n warn$1(\n `Template ref \"${key}\" used on a non-ref value. It will not work in the production build.`\n );\n }\n if (knownTemplateRefs.has(rawSetupState[key])) {\n return false;\n }\n }\n return hasOwn(rawSetupState, key);\n };\n const canSetRef = (ref2) => {\n return !!!(process.env.NODE_ENV !== \"production\") || !knownTemplateRefs.has(ref2);\n };\n if (oldRef != null && oldRef !== ref) {\n invalidatePendingSetRef(oldRawRef);\n if (isString(oldRef)) {\n refs[oldRef] = null;\n if (canSetSetupRef(oldRef)) {\n setupState[oldRef] = null;\n }\n } else if (isRef(oldRef)) {\n if (canSetRef(oldRef)) {\n oldRef.value = null;\n }\n const oldRawRefAtom = oldRawRef;\n if (oldRawRefAtom.k) refs[oldRawRefAtom.k] = null;\n }\n }\n if (isFunction(ref)) {\n callWithErrorHandling(ref, owner, 12, [value, refs]);\n } else {\n const _isString = isString(ref);\n const _isRef = isRef(ref);\n if (_isString || _isRef) {\n const doSet = () => {\n if (rawRef.f) {\n const existing = _isString ? canSetSetupRef(ref) ? setupState[ref] : refs[ref] : canSetRef(ref) || !rawRef.k ? ref.value : refs[rawRef.k];\n if (isUnmount) {\n isArray(existing) && remove(existing, refValue);\n } else {\n if (!isArray(existing)) {\n if (_isString) {\n refs[ref] = [refValue];\n if (canSetSetupRef(ref)) {\n setupState[ref] = refs[ref];\n }\n } else {\n const newVal = [refValue];\n if (canSetRef(ref)) {\n ref.value = newVal;\n }\n if (rawRef.k) refs[rawRef.k] = newVal;\n }\n } else if (!existing.includes(refValue)) {\n existing.push(refValue);\n }\n }\n } else if (_isString) {\n refs[ref] = value;\n if (canSetSetupRef(ref)) {\n setupState[ref] = value;\n }\n } else if (_isRef) {\n if (canSetRef(ref)) {\n ref.value = value;\n }\n if (rawRef.k) refs[rawRef.k] = value;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n }\n };\n if (value) {\n const job = () => {\n doSet();\n pendingSetRefMap.delete(rawRef);\n };\n job.id = -1;\n pendingSetRefMap.set(rawRef, job);\n queuePostRenderEffect(job, parentSuspense);\n } else {\n invalidatePendingSetRef(rawRef);\n doSet();\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n }\n }\n}\nfunction invalidatePendingSetRef(rawRef) {\n const pendingSetRef = pendingSetRefMap.get(rawRef);\n if (pendingSetRef) {\n pendingSetRef.flags |= 8;\n pendingSetRefMap.delete(rawRef);\n }\n}\n\nlet hasLoggedMismatchError = false;\nconst logMismatchError = () => {\n if (hasLoggedMismatchError) {\n return;\n }\n console.error(\"Hydration completed but contains mismatches.\");\n hasLoggedMismatchError = true;\n};\nconst isSVGContainer = (container) => container.namespaceURI.includes(\"svg\") && container.tagName !== \"foreignObject\";\nconst isMathMLContainer = (container) => container.namespaceURI.includes(\"MathML\");\nconst getContainerType = (container) => {\n if (container.nodeType !== 1) return void 0;\n if (isSVGContainer(container)) return \"svg\";\n if (isMathMLContainer(container)) return \"mathml\";\n return void 0;\n};\nconst isComment = (node) => node.nodeType === 8;\nfunction createHydrationFunctions(rendererInternals) {\n const {\n mt: mountComponent,\n p: patch,\n o: {\n patchProp,\n createText,\n nextSibling,\n parentNode,\n remove,\n insert,\n createComment\n }\n } = rendererInternals;\n const hydrate = (vnode, container) => {\n if (!container.hasChildNodes()) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Attempting to hydrate existing markup but container is empty. Performing full mount instead.`\n );\n patch(null, vnode, container);\n flushPostFlushCbs();\n container._vnode = vnode;\n return;\n }\n hydrateNode(container.firstChild, vnode, null, null, null);\n flushPostFlushCbs();\n container._vnode = vnode;\n };\n const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {\n optimized = optimized || !!vnode.dynamicChildren;\n const isFragmentStart = isComment(node) && node.data === \"[\";\n const onMismatch = () => handleMismatch(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n isFragmentStart\n );\n const { type, ref, shapeFlag, patchFlag } = vnode;\n let domType = node.nodeType;\n vnode.el = node;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n def(node, \"__vnode\", vnode, true);\n def(node, \"__vueParentComponent\", parentComponent, true);\n }\n if (patchFlag === -2) {\n optimized = false;\n vnode.dynamicChildren = null;\n }\n let nextNode = null;\n switch (type) {\n case Text:\n if (domType !== 3) {\n if (vnode.children === \"\") {\n insert(vnode.el = createText(\"\"), parentNode(node), node);\n nextNode = node;\n } else {\n nextNode = onMismatch();\n }\n } else {\n if (node.data !== vnode.children) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration text mismatch in`,\n node.parentNode,\n `\n - rendered on server: ${JSON.stringify(\n node.data\n )}\n - expected on client: ${JSON.stringify(vnode.children)}`\n );\n logMismatchError();\n node.data = vnode.children;\n }\n nextNode = nextSibling(node);\n }\n break;\n case Comment:\n if (isTemplateNode(node)) {\n nextNode = nextSibling(node);\n replaceNode(\n vnode.el = node.content.firstChild,\n node,\n parentComponent\n );\n } else if (domType !== 8 || isFragmentStart) {\n nextNode = onMismatch();\n } else {\n nextNode = nextSibling(node);\n }\n break;\n case Static:\n if (isFragmentStart) {\n node = nextSibling(node);\n domType = node.nodeType;\n }\n if (domType === 1 || domType === 3) {\n nextNode = node;\n const needToAdoptContent = !vnode.children.length;\n for (let i = 0; i < vnode.staticCount; i++) {\n if (needToAdoptContent)\n vnode.children += nextNode.nodeType === 1 ? nextNode.outerHTML : nextNode.data;\n if (i === vnode.staticCount - 1) {\n vnode.anchor = nextNode;\n }\n nextNode = nextSibling(nextNode);\n }\n return isFragmentStart ? nextSibling(nextNode) : nextNode;\n } else {\n onMismatch();\n }\n break;\n case Fragment:\n if (!isFragmentStart) {\n nextNode = onMismatch();\n } else {\n nextNode = hydrateFragment(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n break;\n default:\n if (shapeFlag & 1) {\n if ((domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) && !isTemplateNode(node)) {\n nextNode = onMismatch();\n } else {\n nextNode = hydrateElement(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n } else if (shapeFlag & 6) {\n vnode.slotScopeIds = slotScopeIds;\n const container = parentNode(node);\n if (isFragmentStart) {\n nextNode = locateClosingAnchor(node);\n } else if (isComment(node) && node.data === \"teleport start\") {\n nextNode = locateClosingAnchor(node, node.data, \"teleport end\");\n } else {\n nextNode = nextSibling(node);\n }\n mountComponent(\n vnode,\n container,\n null,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n optimized\n );\n if (isAsyncWrapper(vnode) && !vnode.type.__asyncResolved) {\n let subTree;\n if (isFragmentStart) {\n subTree = createVNode(Fragment);\n subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild;\n } else {\n subTree = node.nodeType === 3 ? createTextVNode(\"\") : createVNode(\"div\");\n }\n subTree.el = node;\n vnode.component.subTree = subTree;\n }\n } else if (shapeFlag & 64) {\n if (domType !== 8) {\n nextNode = onMismatch();\n } else {\n nextNode = vnode.type.hydrate(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized,\n rendererInternals,\n hydrateChildren\n );\n }\n } else if (shapeFlag & 128) {\n nextNode = vnode.type.hydrate(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n getContainerType(parentNode(node)),\n slotScopeIds,\n optimized,\n rendererInternals,\n hydrateNode\n );\n } else if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) {\n warn$1(\"Invalid HostVNode type:\", type, `(${typeof type})`);\n }\n }\n if (ref != null) {\n setRef(ref, null, parentSuspense, vnode);\n }\n return nextNode;\n };\n const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!vnode.dynamicChildren;\n const { type, props, patchFlag, shapeFlag, dirs, transition } = vnode;\n const forcePatch = type === \"input\" || type === \"option\";\n if (!!(process.env.NODE_ENV !== \"production\") || forcePatch || patchFlag !== -1) {\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n }\n let needCallTransitionHooks = false;\n if (isTemplateNode(el)) {\n needCallTransitionHooks = needTransition(\n null,\n // no need check parentSuspense in hydration\n transition\n ) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear;\n const content = el.content.firstChild;\n if (needCallTransitionHooks) {\n const cls = content.getAttribute(\"class\");\n if (cls) content.$cls = cls;\n transition.beforeEnter(content);\n }\n replaceNode(content, el, parentComponent);\n vnode.el = el = content;\n }\n if (shapeFlag & 16 && // skip if element has innerHTML / textContent\n !(props && (props.innerHTML || props.textContent))) {\n let next = hydrateChildren(\n el.firstChild,\n vnode,\n el,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n let hasWarned = false;\n while (next) {\n if (!isMismatchAllowed(el, 1 /* CHILDREN */)) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && !hasWarned) {\n warn$1(\n `Hydration children mismatch on`,\n el,\n `\nServer rendered element contains more child nodes than client vdom.`\n );\n hasWarned = true;\n }\n logMismatchError();\n }\n const cur = next;\n next = next.nextSibling;\n remove(cur);\n }\n } else if (shapeFlag & 8) {\n let clientText = vnode.children;\n if (clientText[0] === \"\\n\" && (el.tagName === \"PRE\" || el.tagName === \"TEXTAREA\")) {\n clientText = clientText.slice(1);\n }\n const { textContent } = el;\n if (textContent !== clientText && // innerHTML normalize \\r\\n or \\r into a single \\n in the DOM\n textContent !== clientText.replace(/\\r\\n|\\r/g, \"\\n\")) {\n if (!isMismatchAllowed(el, 0 /* TEXT */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration text content mismatch on`,\n el,\n `\n - rendered on server: ${textContent}\n - expected on client: ${clientText}`\n );\n logMismatchError();\n }\n el.textContent = vnode.children;\n }\n }\n if (props) {\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ || forcePatch || !optimized || patchFlag & (16 | 32)) {\n const isCustomElement = el.tagName.includes(\"-\");\n for (const key in props) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && // #11189 skip if this node has directives that have created hooks\n // as it could have mutated the DOM in any possible way\n !(dirs && dirs.some((d) => d.dir.created)) && propHasMismatch(el, key, props[key], vnode, parentComponent)) {\n logMismatchError();\n }\n if (forcePatch && (key.endsWith(\"value\") || key === \"indeterminate\") || isOn(key) && !isReservedProp(key) || // force hydrate v-bind with .prop modifiers\n key[0] === \".\" || isCustomElement && !isReservedProp(key)) {\n patchProp(el, key, null, props[key], void 0, parentComponent);\n }\n }\n } else if (props.onClick) {\n patchProp(\n el,\n \"onClick\",\n null,\n props.onClick,\n void 0,\n parentComponent\n );\n } else if (patchFlag & 4 && isReactive(props.style)) {\n for (const key in props.style) props.style[key];\n }\n }\n let vnodeHooks;\n if (vnodeHooks = props && props.onVnodeBeforeMount) {\n invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n }\n if ((vnodeHooks = props && props.onVnodeMounted) || dirs || needCallTransitionHooks) {\n queueEffectWithSuspense(() => {\n vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n needCallTransitionHooks && transition.enter(el);\n dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n }, parentSuspense);\n }\n }\n return el.nextSibling;\n };\n const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!parentVNode.dynamicChildren;\n const children = parentVNode.children;\n const l = children.length;\n let hasWarned = false;\n for (let i = 0; i < l; i++) {\n const vnode = optimized ? children[i] : children[i] = normalizeVNode(children[i]);\n const isText = vnode.type === Text;\n if (node) {\n if (isText && !optimized) {\n if (i + 1 < l && normalizeVNode(children[i + 1]).type === Text) {\n insert(\n createText(\n node.data.slice(vnode.children.length)\n ),\n container,\n nextSibling(node)\n );\n node.data = vnode.children;\n }\n }\n node = hydrateNode(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n } else if (isText && !vnode.children) {\n insert(vnode.el = createText(\"\"), container);\n } else {\n if (!isMismatchAllowed(container, 1 /* CHILDREN */)) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && !hasWarned) {\n warn$1(\n `Hydration children mismatch on`,\n container,\n `\nServer rendered element contains fewer child nodes than client vdom.`\n );\n hasWarned = true;\n }\n logMismatchError();\n }\n patch(\n null,\n vnode,\n container,\n null,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n slotScopeIds\n );\n }\n }\n return node;\n };\n const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n const { slotScopeIds: fragmentSlotScopeIds } = vnode;\n if (fragmentSlotScopeIds) {\n slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n }\n const container = parentNode(node);\n const next = hydrateChildren(\n nextSibling(node),\n vnode,\n container,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n if (next && isComment(next) && next.data === \"]\") {\n return nextSibling(vnode.anchor = next);\n } else {\n logMismatchError();\n insert(vnode.anchor = createComment(`]`), container, next);\n return next;\n }\n };\n const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {\n if (!isMismatchAllowed(node.parentElement, 1 /* CHILDREN */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration node mismatch:\n- rendered on server:`,\n node,\n node.nodeType === 3 ? `(text)` : isComment(node) && node.data === \"[\" ? `(start of fragment)` : ``,\n `\n- expected on client:`,\n vnode.type\n );\n logMismatchError();\n }\n vnode.el = null;\n if (isFragment) {\n const end = locateClosingAnchor(node);\n while (true) {\n const next2 = nextSibling(node);\n if (next2 && next2 !== end) {\n remove(next2);\n } else {\n break;\n }\n }\n }\n const next = nextSibling(node);\n const container = parentNode(node);\n remove(node);\n patch(\n null,\n vnode,\n container,\n next,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n slotScopeIds\n );\n if (parentComponent) {\n parentComponent.vnode.el = vnode.el;\n updateHOCHostEl(parentComponent, vnode.el);\n }\n return next;\n };\n const locateClosingAnchor = (node, open = \"[\", close = \"]\") => {\n let match = 0;\n while (node) {\n node = nextSibling(node);\n if (node && isComment(node)) {\n if (node.data === open) match++;\n if (node.data === close) {\n if (match === 0) {\n return nextSibling(node);\n } else {\n match--;\n }\n }\n }\n }\n return node;\n };\n const replaceNode = (newNode, oldNode, parentComponent) => {\n const parentNode2 = oldNode.parentNode;\n if (parentNode2) {\n parentNode2.replaceChild(newNode, oldNode);\n }\n let parent = parentComponent;\n while (parent) {\n if (parent.vnode.el === oldNode) {\n parent.vnode.el = parent.subTree.el = newNode;\n }\n parent = parent.parent;\n }\n };\n const isTemplateNode = (node) => {\n return node.nodeType === 1 && node.tagName === \"TEMPLATE\";\n };\n return [hydrate, hydrateNode];\n}\nfunction propHasMismatch(el, key, clientValue, vnode, instance) {\n let mismatchType;\n let mismatchKey;\n let actual;\n let expected;\n if (key === \"class\") {\n if (el.$cls) {\n actual = el.$cls;\n delete el.$cls;\n } else {\n actual = el.getAttribute(\"class\");\n }\n expected = normalizeClass(clientValue);\n if (!isSetEqual(toClassSet(actual || \"\"), toClassSet(expected))) {\n mismatchType = 2 /* CLASS */;\n mismatchKey = `class`;\n }\n } else if (key === \"style\") {\n actual = el.getAttribute(\"style\") || \"\";\n expected = isString(clientValue) ? clientValue : stringifyStyle(normalizeStyle(clientValue));\n const actualMap = toStyleMap(actual);\n const expectedMap = toStyleMap(expected);\n if (vnode.dirs) {\n for (const { dir, value } of vnode.dirs) {\n if (dir.name === \"show\" && !value) {\n expectedMap.set(\"display\", \"none\");\n }\n }\n }\n if (instance) {\n resolveCssVars(instance, vnode, expectedMap);\n }\n if (!isMapEqual(actualMap, expectedMap)) {\n mismatchType = 3 /* STYLE */;\n mismatchKey = \"style\";\n }\n } else if (el instanceof SVGElement && isKnownSvgAttr(key) || el instanceof HTMLElement && (isBooleanAttr(key) || isKnownHtmlAttr(key))) {\n if (isBooleanAttr(key)) {\n actual = el.hasAttribute(key);\n expected = includeBooleanAttr(clientValue);\n } else if (clientValue == null) {\n actual = el.hasAttribute(key);\n expected = false;\n } else {\n if (el.hasAttribute(key)) {\n actual = el.getAttribute(key);\n } else if (key === \"value\" && el.tagName === \"TEXTAREA\") {\n actual = el.value;\n } else {\n actual = false;\n }\n expected = isRenderableAttrValue(clientValue) ? String(clientValue) : false;\n }\n if (actual !== expected) {\n mismatchType = 4 /* ATTRIBUTE */;\n mismatchKey = key;\n }\n }\n if (mismatchType != null && !isMismatchAllowed(el, mismatchType)) {\n const format = (v) => v === false ? `(not rendered)` : `${mismatchKey}=\"${v}\"`;\n const preSegment = `Hydration ${MismatchTypeString[mismatchType]} mismatch on`;\n const postSegment = `\n - rendered on server: ${format(actual)}\n - expected on client: ${format(expected)}\n Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead.\n You should fix the source of the mismatch.`;\n {\n warn$1(preSegment, el, postSegment);\n }\n return true;\n }\n return false;\n}\nfunction toClassSet(str) {\n return new Set(str.trim().split(/\\s+/));\n}\nfunction isSetEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n for (const s of a) {\n if (!b.has(s)) {\n return false;\n }\n }\n return true;\n}\nfunction toStyleMap(str) {\n const styleMap = /* @__PURE__ */ new Map();\n for (const item of str.split(\";\")) {\n let [key, value] = item.split(\":\");\n key = key.trim();\n value = value && value.trim();\n if (key && value) {\n styleMap.set(key, value);\n }\n }\n return styleMap;\n}\nfunction isMapEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (value !== b.get(key)) {\n return false;\n }\n }\n return true;\n}\nfunction resolveCssVars(instance, vnode, expectedMap) {\n const root = instance.subTree;\n if (instance.getCssVars && (vnode === root || root && root.type === Fragment && root.children.includes(vnode))) {\n const cssVars = instance.getCssVars();\n for (const key in cssVars) {\n const value = normalizeCssVarValue(cssVars[key]);\n expectedMap.set(`--${getEscapedCssVarName(key, false)}`, value);\n }\n }\n if (vnode === root && instance.parent) {\n resolveCssVars(instance.parent, instance.vnode, expectedMap);\n }\n}\nconst allowMismatchAttr = \"data-allow-mismatch\";\nconst MismatchTypeString = {\n [0 /* TEXT */]: \"text\",\n [1 /* CHILDREN */]: \"children\",\n [2 /* CLASS */]: \"class\",\n [3 /* STYLE */]: \"style\",\n [4 /* ATTRIBUTE */]: \"attribute\"\n};\nfunction isMismatchAllowed(el, allowedType) {\n if (allowedType === 0 /* TEXT */ || allowedType === 1 /* CHILDREN */) {\n while (el && !el.hasAttribute(allowMismatchAttr)) {\n el = el.parentElement;\n }\n }\n const allowedAttr = el && el.getAttribute(allowMismatchAttr);\n if (allowedAttr == null) {\n return false;\n } else if (allowedAttr === \"\") {\n return true;\n } else {\n const list = allowedAttr.split(\",\");\n if (allowedType === 0 /* TEXT */ && list.includes(\"children\")) {\n return true;\n }\n return list.includes(MismatchTypeString[allowedType]);\n }\n}\n\nconst requestIdleCallback = getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1));\nconst cancelIdleCallback = getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id));\nconst hydrateOnIdle = (timeout = 1e4) => (hydrate) => {\n const id = requestIdleCallback(hydrate, { timeout });\n return () => cancelIdleCallback(id);\n};\nfunction elementIsVisibleInViewport(el) {\n const { top, left, bottom, right } = el.getBoundingClientRect();\n const { innerHeight, innerWidth } = window;\n return (top > 0 && top < innerHeight || bottom > 0 && bottom < innerHeight) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth);\n}\nconst hydrateOnVisible = (opts) => (hydrate, forEach) => {\n const ob = new IntersectionObserver((entries) => {\n for (const e of entries) {\n if (!e.isIntersecting) continue;\n ob.disconnect();\n hydrate();\n break;\n }\n }, opts);\n forEach((el) => {\n if (!(el instanceof Element)) return;\n if (elementIsVisibleInViewport(el)) {\n hydrate();\n ob.disconnect();\n return false;\n }\n ob.observe(el);\n });\n return () => ob.disconnect();\n};\nconst hydrateOnMediaQuery = (query) => (hydrate) => {\n if (query) {\n const mql = matchMedia(query);\n if (mql.matches) {\n hydrate();\n } else {\n mql.addEventListener(\"change\", hydrate, { once: true });\n return () => mql.removeEventListener(\"change\", hydrate);\n }\n }\n};\nconst hydrateOnInteraction = (interactions = []) => (hydrate, forEach) => {\n if (isString(interactions)) interactions = [interactions];\n let hasHydrated = false;\n const doHydrate = (e) => {\n if (!hasHydrated) {\n hasHydrated = true;\n teardown();\n hydrate();\n e.target.dispatchEvent(new e.constructor(e.type, e));\n }\n };\n const teardown = () => {\n forEach((el) => {\n for (const i of interactions) {\n el.removeEventListener(i, doHydrate);\n }\n });\n };\n forEach((el) => {\n for (const i of interactions) {\n el.addEventListener(i, doHydrate, { once: true });\n }\n });\n return teardown;\n};\nfunction forEachElement(node, cb) {\n if (isComment(node) && node.data === \"[\") {\n let depth = 1;\n let next = node.nextSibling;\n while (next) {\n if (next.nodeType === 1) {\n const result = cb(next);\n if (result === false) {\n break;\n }\n } else if (isComment(next)) {\n if (next.data === \"]\") {\n if (--depth === 0) break;\n } else if (next.data === \"[\") {\n depth++;\n }\n }\n next = next.nextSibling;\n }\n } else {\n cb(node);\n }\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\n// @__NO_SIDE_EFFECTS__\nfunction defineAsyncComponent(source) {\n if (isFunction(source)) {\n source = { loader: source };\n }\n const {\n loader,\n loadingComponent,\n errorComponent,\n delay = 200,\n hydrate: hydrateStrategy,\n timeout,\n // undefined = never times out\n suspensible = true,\n onError: userOnError\n } = source;\n let pendingRequest = null;\n let resolvedComp;\n let retries = 0;\n const retry = () => {\n retries++;\n pendingRequest = null;\n return load();\n };\n const load = () => {\n let thisRequest;\n return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => {\n err = err instanceof Error ? err : new Error(String(err));\n if (userOnError) {\n return new Promise((resolve, reject) => {\n const userRetry = () => resolve(retry());\n const userFail = () => reject(err);\n userOnError(err, userRetry, userFail, retries + 1);\n });\n } else {\n throw err;\n }\n }).then((comp) => {\n if (thisRequest !== pendingRequest && pendingRequest) {\n return pendingRequest;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && !comp) {\n warn$1(\n `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.`\n );\n }\n if (comp && (comp.__esModule || comp[Symbol.toStringTag] === \"Module\")) {\n comp = comp.default;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && comp && !isObject(comp) && !isFunction(comp)) {\n throw new Error(`Invalid async component load result: ${comp}`);\n }\n resolvedComp = comp;\n return comp;\n }));\n };\n return defineComponent({\n name: \"AsyncComponentWrapper\",\n __asyncLoader: load,\n __asyncHydrate(el, instance, hydrate) {\n let patched = false;\n (instance.bu || (instance.bu = [])).push(() => patched = true);\n const performHydrate = () => {\n if (patched) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Skipping lazy hydration for component '${getComponentName(resolvedComp) || resolvedComp.__file}': it was updated before lazy hydration performed.`\n );\n }\n return;\n }\n hydrate();\n };\n const doHydrate = hydrateStrategy ? () => {\n const teardown = hydrateStrategy(\n performHydrate,\n (cb) => forEachElement(el, cb)\n );\n if (teardown) {\n (instance.bum || (instance.bum = [])).push(teardown);\n }\n } : performHydrate;\n if (resolvedComp) {\n doHydrate();\n } else {\n load().then(() => !instance.isUnmounted && doHydrate());\n }\n },\n get __asyncResolved() {\n return resolvedComp;\n },\n setup() {\n const instance = currentInstance;\n markAsyncBoundary(instance);\n if (resolvedComp) {\n return () => createInnerComp(resolvedComp, instance);\n }\n const onError = (err) => {\n pendingRequest = null;\n handleError(\n err,\n instance,\n 13,\n !errorComponent\n );\n };\n if (suspensible && instance.suspense || isInSSRComponentSetup) {\n return load().then((comp) => {\n return () => createInnerComp(comp, instance);\n }).catch((err) => {\n onError(err);\n return () => errorComponent ? createVNode(errorComponent, {\n error: err\n }) : null;\n });\n }\n const loaded = ref(false);\n const error = ref();\n const delayed = ref(!!delay);\n if (delay) {\n setTimeout(() => {\n delayed.value = false;\n }, delay);\n }\n if (timeout != null) {\n setTimeout(() => {\n if (!loaded.value && !error.value) {\n const err = new Error(\n `Async component timed out after ${timeout}ms.`\n );\n onError(err);\n error.value = err;\n }\n }, timeout);\n }\n load().then(() => {\n loaded.value = true;\n if (instance.parent && isKeepAlive(instance.parent.vnode)) {\n instance.parent.update();\n }\n }).catch((err) => {\n onError(err);\n error.value = err;\n });\n return () => {\n if (loaded.value && resolvedComp) {\n return createInnerComp(resolvedComp, instance);\n } else if (error.value && errorComponent) {\n return createVNode(errorComponent, {\n error: error.value\n });\n } else if (loadingComponent && !delayed.value) {\n return createInnerComp(\n loadingComponent,\n instance\n );\n }\n };\n }\n });\n}\nfunction createInnerComp(comp, parent) {\n const { ref: ref2, props, children, ce } = parent.vnode;\n const vnode = createVNode(comp, props, children);\n vnode.ref = ref2;\n vnode.ce = ce;\n delete parent.vnode.ce;\n return vnode;\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\nconst KeepAliveImpl = {\n name: `KeepAlive`,\n // Marker for special handling inside the renderer. We are not using a ===\n // check directly on KeepAlive in the renderer, because importing it directly\n // would prevent it from being tree-shaken.\n __isKeepAlive: true,\n props: {\n include: [String, RegExp, Array],\n exclude: [String, RegExp, Array],\n max: [String, Number]\n },\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const sharedContext = instance.ctx;\n if (!sharedContext.renderer) {\n return () => {\n const children = slots.default && slots.default();\n return children && children.length === 1 ? children[0] : children;\n };\n }\n const cache = /* @__PURE__ */ new Map();\n const keys = /* @__PURE__ */ new Set();\n let current = null;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n instance.__v_cache = cache;\n }\n const parentSuspense = instance.suspense;\n const {\n renderer: {\n p: patch,\n m: move,\n um: _unmount,\n o: { createElement }\n }\n } = sharedContext;\n const storageContainer = createElement(\"div\");\n sharedContext.activate = (vnode, container, anchor, namespace, optimized) => {\n const instance2 = vnode.component;\n move(vnode, container, anchor, 0, parentSuspense);\n patch(\n instance2.vnode,\n vnode,\n container,\n anchor,\n instance2,\n parentSuspense,\n namespace,\n vnode.slotScopeIds,\n optimized\n );\n queuePostRenderEffect(() => {\n instance2.isDeactivated = false;\n if (instance2.a) {\n invokeArrayFns(instance2.a);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n };\n sharedContext.deactivate = (vnode) => {\n const instance2 = vnode.component;\n invalidateMount(instance2.m);\n invalidateMount(instance2.a);\n move(vnode, storageContainer, null, 1, parentSuspense);\n queuePostRenderEffect(() => {\n if (instance2.da) {\n invokeArrayFns(instance2.da);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n instance2.isDeactivated = true;\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n if (!!(process.env.NODE_ENV !== \"production\") && true) {\n instance2.__keepAliveStorageContainer = storageContainer;\n }\n };\n function unmount(vnode) {\n resetShapeFlag(vnode);\n _unmount(vnode, instance, parentSuspense, true);\n }\n function pruneCache(filter) {\n cache.forEach((vnode, key) => {\n const name = getComponentName(\n isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : vnode.type\n );\n if (name && !filter(name)) {\n pruneCacheEntry(key);\n }\n });\n }\n function pruneCacheEntry(key) {\n const cached = cache.get(key);\n if (cached && (!current || !isSameVNodeType(cached, current))) {\n unmount(cached);\n } else if (current) {\n resetShapeFlag(current);\n }\n cache.delete(key);\n keys.delete(key);\n }\n watch(\n () => [props.include, props.exclude],\n ([include, exclude]) => {\n include && pruneCache((name) => matches(include, name));\n exclude && pruneCache((name) => !matches(exclude, name));\n },\n // prune post-render after `current` has been updated\n { flush: \"post\", deep: true }\n );\n let pendingCacheKey = null;\n const cacheSubtree = () => {\n if (pendingCacheKey != null) {\n if (isSuspense(instance.subTree.type)) {\n queuePostRenderEffect(() => {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }, instance.subTree.suspense);\n } else {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }\n }\n };\n onMounted(cacheSubtree);\n onUpdated(cacheSubtree);\n onBeforeUnmount(() => {\n cache.forEach((cached) => {\n const { subTree, suspense } = instance;\n const vnode = getInnerChild(subTree);\n if (cached.type === vnode.type && cached.key === vnode.key) {\n resetShapeFlag(vnode);\n const da = vnode.component.da;\n da && queuePostRenderEffect(da, suspense);\n return;\n }\n unmount(cached);\n });\n });\n return () => {\n pendingCacheKey = null;\n if (!slots.default) {\n return current = null;\n }\n const children = slots.default();\n const rawVNode = children[0];\n if (children.length > 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`KeepAlive should contain exactly one component child.`);\n }\n current = null;\n return children;\n } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) {\n current = null;\n return rawVNode;\n }\n let vnode = getInnerChild(rawVNode);\n if (vnode.type === Comment) {\n current = null;\n return vnode;\n }\n const comp = vnode.type;\n const name = getComponentName(\n isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp\n );\n const { include, exclude, max } = props;\n if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) {\n vnode.shapeFlag &= -257;\n current = vnode;\n return rawVNode;\n }\n const key = vnode.key == null ? comp : vnode.key;\n const cachedVNode = cache.get(key);\n if (vnode.el) {\n vnode = cloneVNode(vnode);\n if (rawVNode.shapeFlag & 128) {\n rawVNode.ssContent = vnode;\n }\n }\n pendingCacheKey = key;\n if (cachedVNode) {\n vnode.el = cachedVNode.el;\n vnode.component = cachedVNode.component;\n if (vnode.transition) {\n setTransitionHooks(vnode, vnode.transition);\n }\n vnode.shapeFlag |= 512;\n keys.delete(key);\n keys.add(key);\n } else {\n keys.add(key);\n if (max && keys.size > parseInt(max, 10)) {\n pruneCacheEntry(keys.values().next().value);\n }\n }\n vnode.shapeFlag |= 256;\n current = vnode;\n return isSuspense(rawVNode.type) ? rawVNode : vnode;\n };\n }\n};\nconst KeepAlive = KeepAliveImpl;\nfunction matches(pattern, name) {\n if (isArray(pattern)) {\n return pattern.some((p) => matches(p, name));\n } else if (isString(pattern)) {\n return pattern.split(\",\").includes(name);\n } else if (isRegExp(pattern)) {\n pattern.lastIndex = 0;\n return pattern.test(name);\n }\n return false;\n}\nfunction onActivated(hook, target) {\n registerKeepAliveHook(hook, \"a\", target);\n}\nfunction onDeactivated(hook, target) {\n registerKeepAliveHook(hook, \"da\", target);\n}\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\n const wrappedHook = hook.__wdc || (hook.__wdc = () => {\n let current = target;\n while (current) {\n if (current.isDeactivated) {\n return;\n }\n current = current.parent;\n }\n return hook();\n });\n injectHook(type, wrappedHook, target);\n if (target) {\n let current = target.parent;\n while (current && current.parent) {\n if (isKeepAlive(current.parent.vnode)) {\n injectToKeepAliveRoot(wrappedHook, type, target, current);\n }\n current = current.parent;\n }\n }\n}\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n const injected = injectHook(\n type,\n hook,\n keepAliveRoot,\n true\n /* prepend */\n );\n onUnmounted(() => {\n remove(keepAliveRoot[type], injected);\n }, target);\n}\nfunction resetShapeFlag(vnode) {\n vnode.shapeFlag &= -257;\n vnode.shapeFlag &= -513;\n}\nfunction getInnerChild(vnode) {\n return vnode.shapeFlag & 128 ? vnode.ssContent : vnode;\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\n if (target) {\n const hooks = target[type] || (target[type] = []);\n const wrappedHook = hook.__weh || (hook.__weh = (...args) => {\n pauseTracking();\n const reset = setCurrentInstance(target);\n const res = callWithAsyncErrorHandling(hook, target, type, args);\n reset();\n resetTracking();\n return res;\n });\n if (prepend) {\n hooks.unshift(wrappedHook);\n } else {\n hooks.push(wrappedHook);\n }\n return wrappedHook;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, \"\"));\n warn$1(\n `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().` + (` If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` )\n );\n }\n}\nconst createHook = (lifecycle) => (hook, target = currentInstance) => {\n if (!isInSSRComponentSetup || lifecycle === \"sp\") {\n injectHook(lifecycle, (...args) => hook(...args), target);\n }\n};\nconst onBeforeMount = createHook(\"bm\");\nconst onMounted = createHook(\"m\");\nconst onBeforeUpdate = createHook(\n \"bu\"\n);\nconst onUpdated = createHook(\"u\");\nconst onBeforeUnmount = createHook(\n \"bum\"\n);\nconst onUnmounted = createHook(\"um\");\nconst onServerPrefetch = createHook(\n \"sp\"\n);\nconst onRenderTriggered = createHook(\"rtg\");\nconst onRenderTracked = createHook(\"rtc\");\nfunction onErrorCaptured(hook, target = currentInstance) {\n injectHook(\"ec\", hook, target);\n}\n\nconst COMPONENTS = \"components\";\nconst DIRECTIVES = \"directives\";\nfunction resolveComponent(name, maybeSelfReference) {\n return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\n}\nconst NULL_DYNAMIC_COMPONENT = /* @__PURE__ */ Symbol.for(\"v-ndc\");\nfunction resolveDynamicComponent(component) {\n if (isString(component)) {\n return resolveAsset(COMPONENTS, component, false) || component;\n } else {\n return component || NULL_DYNAMIC_COMPONENT;\n }\n}\nfunction resolveDirective(name) {\n return resolveAsset(DIRECTIVES, name);\n}\nfunction resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\n const instance = currentRenderingInstance || currentInstance;\n if (instance) {\n const Component = instance.type;\n if (type === COMPONENTS) {\n const selfName = getComponentName(\n Component,\n false\n );\n if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {\n return Component;\n }\n }\n const res = (\n // local registration\n // check instance[type] first which is resolved for options API\n resolve(instance[type] || Component[type], name) || // global registration\n resolve(instance.appContext[type], name)\n );\n if (!res && maybeSelfReference) {\n return Component;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && warnMissing && !res) {\n const extra = type === COMPONENTS ? `\nIf this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;\n warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);\n }\n return res;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`\n );\n }\n}\nfunction resolve(registry, name) {\n return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);\n}\n\nfunction renderList(source, renderItem, cache, index) {\n let ret;\n const cached = cache && cache[index];\n const sourceIsArray = isArray(source);\n if (sourceIsArray || isString(source)) {\n const sourceIsReactiveArray = sourceIsArray && isReactive(source);\n let needsWrap = false;\n let isReadonlySource = false;\n if (sourceIsReactiveArray) {\n needsWrap = !isShallow(source);\n isReadonlySource = isReadonly(source);\n source = shallowReadArray(source);\n }\n ret = new Array(source.length);\n for (let i = 0, l = source.length; i < l; i++) {\n ret[i] = renderItem(\n needsWrap ? isReadonlySource ? toReadonly(toReactive(source[i])) : toReactive(source[i]) : source[i],\n i,\n void 0,\n cached && cached[i]\n );\n }\n } else if (typeof source === \"number\") {\n if (!!(process.env.NODE_ENV !== \"production\") && !Number.isInteger(source)) {\n warn$1(`The v-for range expect an integer value but got ${source}.`);\n }\n ret = new Array(source);\n for (let i = 0; i < source; i++) {\n ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]);\n }\n } else if (isObject(source)) {\n if (source[Symbol.iterator]) {\n ret = Array.from(\n source,\n (item, i) => renderItem(item, i, void 0, cached && cached[i])\n );\n } else {\n const keys = Object.keys(source);\n ret = new Array(keys.length);\n for (let i = 0, l = keys.length; i < l; i++) {\n const key = keys[i];\n ret[i] = renderItem(source[key], key, i, cached && cached[i]);\n }\n }\n } else {\n ret = [];\n }\n if (cache) {\n cache[index] = ret;\n }\n return ret;\n}\n\nfunction createSlots(slots, dynamicSlots) {\n for (let i = 0; i < dynamicSlots.length; i++) {\n const slot = dynamicSlots[i];\n if (isArray(slot)) {\n for (let j = 0; j < slot.length; j++) {\n slots[slot[j].name] = slot[j].fn;\n }\n } else if (slot) {\n slots[slot.name] = slot.key ? (...args) => {\n const res = slot.fn(...args);\n if (res) res.key = slot.key;\n return res;\n } : slot.fn;\n }\n }\n return slots;\n}\n\nfunction renderSlot(slots, name, props = {}, fallback, noSlotted) {\n if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) {\n const hasProps = Object.keys(props).length > 0;\n if (name !== \"default\") props.name = name;\n return openBlock(), createBlock(\n Fragment,\n null,\n [createVNode(\"slot\", props, fallback && fallback())],\n hasProps ? -2 : 64\n );\n }\n let slot = slots[name];\n if (!!(process.env.NODE_ENV !== \"production\") && slot && slot.length > 1) {\n warn$1(\n `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.`\n );\n slot = () => [];\n }\n if (slot && slot._c) {\n slot._d = false;\n }\n openBlock();\n const validSlotContent = slot && ensureValidVNode(slot(props));\n const slotKey = props.key || // slot content array of a dynamic conditional slot may have a branch\n // key attached in the `createSlots` helper, respect that\n validSlotContent && validSlotContent.key;\n const rendered = createBlock(\n Fragment,\n {\n key: (slotKey && !isSymbol(slotKey) ? slotKey : `_${name}`) + // #7256 force differentiate fallback content from actual content\n (!validSlotContent && fallback ? \"_fb\" : \"\")\n },\n validSlotContent || (fallback ? fallback() : []),\n validSlotContent && slots._ === 1 ? 64 : -2\n );\n if (!noSlotted && rendered.scopeId) {\n rendered.slotScopeIds = [rendered.scopeId + \"-s\"];\n }\n if (slot && slot._c) {\n slot._d = true;\n }\n return rendered;\n}\nfunction ensureValidVNode(vnodes) {\n return vnodes.some((child) => {\n if (!isVNode(child)) return true;\n if (child.type === Comment) return false;\n if (child.type === Fragment && !ensureValidVNode(child.children))\n return false;\n return true;\n }) ? vnodes : null;\n}\n\nfunction toHandlers(obj, preserveCaseIfNecessary) {\n const ret = {};\n if (!!(process.env.NODE_ENV !== \"production\") && !isObject(obj)) {\n warn$1(`v-on with no argument expects an object value.`);\n return ret;\n }\n for (const key in obj) {\n ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key];\n }\n return ret;\n}\n\nconst getPublicInstance = (i) => {\n if (!i) return null;\n if (isStatefulComponent(i)) return getComponentPublicInstance(i);\n return getPublicInstance(i.parent);\n};\nconst publicPropertiesMap = (\n // Move PURE marker to new line to workaround compiler discarding it\n // due to type annotation\n /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {\n $: (i) => i,\n $el: (i) => i.vnode.el,\n $data: (i) => i.data,\n $props: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.props) : i.props,\n $attrs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.attrs) : i.attrs,\n $slots: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.slots) : i.slots,\n $refs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.refs) : i.refs,\n $parent: (i) => getPublicInstance(i.parent),\n $root: (i) => getPublicInstance(i.root),\n $host: (i) => i.ce,\n $emit: (i) => i.emit,\n $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type,\n $forceUpdate: (i) => i.f || (i.f = () => {\n queueJob(i.update);\n }),\n $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)),\n $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP\n })\n);\nconst isReservedPrefix = (key) => key === \"_\" || key === \"$\";\nconst hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);\nconst PublicInstanceProxyHandlers = {\n get({ _: instance }, key) {\n if (key === \"__v_skip\") {\n return true;\n }\n const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n if (!!(process.env.NODE_ENV !== \"production\") && key === \"__isVue\") {\n return true;\n }\n if (key[0] !== \"$\") {\n const n = accessCache[key];\n if (n !== void 0) {\n switch (n) {\n case 1 /* SETUP */:\n return setupState[key];\n case 2 /* DATA */:\n return data[key];\n case 4 /* CONTEXT */:\n return ctx[key];\n case 3 /* PROPS */:\n return props[key];\n }\n } else if (hasSetupBinding(setupState, key)) {\n accessCache[key] = 1 /* SETUP */;\n return setupState[key];\n } else if (__VUE_OPTIONS_API__ && data !== EMPTY_OBJ && hasOwn(data, key)) {\n accessCache[key] = 2 /* DATA */;\n return data[key];\n } else if (hasOwn(props, key)) {\n accessCache[key] = 3 /* PROPS */;\n return props[key];\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) {\n accessCache[key] = 0 /* OTHER */;\n }\n }\n const publicGetter = publicPropertiesMap[key];\n let cssModule, globalProperties;\n if (publicGetter) {\n if (key === \"$attrs\") {\n track(instance.attrs, \"get\", \"\");\n !!(process.env.NODE_ENV !== \"production\") && markAttrsAccessed();\n } else if (!!(process.env.NODE_ENV !== \"production\") && key === \"$slots\") {\n track(instance, \"get\", key);\n }\n return publicGetter(instance);\n } else if (\n // css module (injected by vue-loader)\n (cssModule = type.__cssModules) && (cssModule = cssModule[key])\n ) {\n return cssModule;\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (\n // global properties\n globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)\n ) {\n {\n return globalProperties[key];\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading\n // to infinite warning loop\n key.indexOf(\"__v\") !== 0)) {\n if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {\n warn$1(\n `Property ${JSON.stringify(\n key\n )} must be accessed via $data because it starts with a reserved character (\"$\" or \"_\") and is not proxied on the render context.`\n );\n } else if (instance === currentRenderingInstance) {\n warn$1(\n `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`\n );\n }\n }\n },\n set({ _: instance }, key, value) {\n const { data, setupState, ctx } = instance;\n if (hasSetupBinding(setupState, key)) {\n setupState[key] = value;\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup && hasOwn(setupState, key)) {\n warn$1(`Cannot mutate <script setup> binding \"${key}\" from Options API.`);\n return false;\n } else if (__VUE_OPTIONS_API__ && data !== EMPTY_OBJ && hasOwn(data, key)) {\n data[key] = value;\n return true;\n } else if (hasOwn(instance.props, key)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`Attempting to mutate prop \"${key}\". Props are readonly.`);\n return false;\n }\n if (key[0] === \"$\" && key.slice(1) in instance) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Attempting to mutate public property \"${key}\". Properties starting with $ are reserved and readonly.`\n );\n return false;\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && key in instance.appContext.config.globalProperties) {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n value\n });\n } else {\n ctx[key] = value;\n }\n }\n return true;\n },\n has({\n _: { data, setupState, accessCache, ctx, appContext, props, type }\n }, key) {\n let cssModules;\n return !!(accessCache[key] || __VUE_OPTIONS_API__ && data !== EMPTY_OBJ && key[0] !== \"$\" && hasOwn(data, key) || hasSetupBinding(setupState, key) || hasOwn(props, key) || hasOwn(ctx, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key) || (cssModules = type.__cssModules) && cssModules[key]);\n },\n defineProperty(target, key, descriptor) {\n if (descriptor.get != null) {\n target._.accessCache[key] = 0;\n } else if (hasOwn(descriptor, \"value\")) {\n this.set(target, key, descriptor.value, null);\n }\n return Reflect.defineProperty(target, key, descriptor);\n }\n};\nif (!!(process.env.NODE_ENV !== \"production\") && true) {\n PublicInstanceProxyHandlers.ownKeys = (target) => {\n warn$1(\n `Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead.`\n );\n return Reflect.ownKeys(target);\n };\n}\nconst RuntimeCompiledPublicInstanceProxyHandlers = /* @__PURE__ */ extend({}, PublicInstanceProxyHandlers, {\n get(target, key) {\n if (key === Symbol.unscopables) {\n return;\n }\n return PublicInstanceProxyHandlers.get(target, key, target);\n },\n has(_, key) {\n const has = key[0] !== \"_\" && !isGloballyAllowed(key);\n if (!!(process.env.NODE_ENV !== \"production\") && !has && PublicInstanceProxyHandlers.has(_, key)) {\n warn$1(\n `Property ${JSON.stringify(\n key\n )} should not start with _ which is a reserved prefix for Vue internals.`\n );\n }\n return has;\n }\n});\nfunction createDevRenderContext(instance) {\n const target = {};\n Object.defineProperty(target, `_`, {\n configurable: true,\n enumerable: false,\n get: () => instance\n });\n Object.keys(publicPropertiesMap).forEach((key) => {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: false,\n get: () => publicPropertiesMap[key](instance),\n // intercepted by the proxy so no need for implementation,\n // but needed to prevent set errors\n set: NOOP\n });\n });\n return target;\n}\nfunction exposePropsOnRenderContext(instance) {\n const {\n ctx,\n propsOptions: [propsOptions]\n } = instance;\n if (propsOptions) {\n Object.keys(propsOptions).forEach((key) => {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => instance.props[key],\n set: NOOP\n });\n });\n }\n}\nfunction exposeSetupStateOnRenderContext(instance) {\n const { ctx, setupState } = instance;\n Object.keys(toRaw(setupState)).forEach((key) => {\n if (!setupState.__isScriptSetup) {\n if (isReservedPrefix(key[0])) {\n warn$1(\n `setup() return property ${JSON.stringify(\n key\n )} should not start with \"$\" or \"_\" which are reserved prefixes for Vue internals.`\n );\n return;\n }\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => setupState[key],\n set: NOOP\n });\n }\n });\n}\n\nconst warnRuntimeUsage = (method) => warn$1(\n `${method}() is a compiler-hint helper that is only usable inside <script setup> of a single file component. Its arguments should be compiled away and passing it at runtime has no effect.`\n);\nfunction defineProps() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineProps`);\n }\n return null;\n}\nfunction defineEmits() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineEmits`);\n }\n return null;\n}\nfunction defineExpose(exposed) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineExpose`);\n }\n}\nfunction defineOptions(options) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineOptions`);\n }\n}\nfunction defineSlots() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineSlots`);\n }\n return null;\n}\nfunction defineModel() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(\"defineModel\");\n }\n}\nfunction withDefaults(props, defaults) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`withDefaults`);\n }\n return null;\n}\nfunction useSlots() {\n return getContext(\"useSlots\").slots;\n}\nfunction useAttrs() {\n return getContext(\"useAttrs\").attrs;\n}\nfunction getContext(calledFunctionName) {\n const i = getCurrentInstance();\n if (!!(process.env.NODE_ENV !== \"production\") && !i) {\n warn$1(`${calledFunctionName}() called without active instance.`);\n }\n return i.setupContext || (i.setupContext = createSetupContext(i));\n}\nfunction normalizePropsOrEmits(props) {\n return isArray(props) ? props.reduce(\n (normalized, p) => (normalized[p] = null, normalized),\n {}\n ) : props;\n}\nfunction mergeDefaults(raw, defaults) {\n const props = normalizePropsOrEmits(raw);\n for (const key in defaults) {\n if (key.startsWith(\"__skip\")) continue;\n let opt = props[key];\n if (opt) {\n if (isArray(opt) || isFunction(opt)) {\n opt = props[key] = { type: opt, default: defaults[key] };\n } else {\n opt.default = defaults[key];\n }\n } else if (opt === null) {\n opt = props[key] = { default: defaults[key] };\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`props default key \"${key}\" has no corresponding declaration.`);\n }\n if (opt && defaults[`__skip_${key}`]) {\n opt.skipFactory = true;\n }\n }\n return props;\n}\nfunction mergeModels(a, b) {\n if (!a || !b) return a || b;\n if (isArray(a) && isArray(b)) return a.concat(b);\n return extend({}, normalizePropsOrEmits(a), normalizePropsOrEmits(b));\n}\nfunction createPropsRestProxy(props, excludedKeys) {\n const ret = {};\n for (const key in props) {\n if (!excludedKeys.includes(key)) {\n Object.defineProperty(ret, key, {\n enumerable: true,\n get: () => props[key]\n });\n }\n }\n return ret;\n}\nfunction withAsyncContext(getAwaitable) {\n const ctx = getCurrentInstance();\n if (!!(process.env.NODE_ENV !== \"production\") && !ctx) {\n warn$1(\n `withAsyncContext called without active current instance. This is likely a bug.`\n );\n }\n let awaitable = getAwaitable();\n unsetCurrentInstance();\n if (isPromise(awaitable)) {\n awaitable = awaitable.catch((e) => {\n setCurrentInstance(ctx);\n throw e;\n });\n }\n return [awaitable, () => setCurrentInstance(ctx)];\n}\n\nfunction createDuplicateChecker() {\n const cache = /* @__PURE__ */ Object.create(null);\n return (type, key) => {\n if (cache[key]) {\n warn$1(`${type} property \"${key}\" is already defined in ${cache[key]}.`);\n } else {\n cache[key] = type;\n }\n };\n}\nlet shouldCacheAccess = true;\nfunction applyOptions(instance) {\n const options = resolveMergedOptions(instance);\n const publicThis = instance.proxy;\n const ctx = instance.ctx;\n shouldCacheAccess = false;\n if (options.beforeCreate) {\n callHook(options.beforeCreate, instance, \"bc\");\n }\n const {\n // state\n data: dataOptions,\n computed: computedOptions,\n methods,\n watch: watchOptions,\n provide: provideOptions,\n inject: injectOptions,\n // lifecycle\n created,\n beforeMount,\n mounted,\n beforeUpdate,\n updated,\n activated,\n deactivated,\n beforeDestroy,\n beforeUnmount,\n destroyed,\n unmounted,\n render,\n renderTracked,\n renderTriggered,\n errorCaptured,\n serverPrefetch,\n // public API\n expose,\n inheritAttrs,\n // assets\n components,\n directives,\n filters\n } = options;\n const checkDuplicateProperties = !!(process.env.NODE_ENV !== \"production\") ? createDuplicateChecker() : null;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const [propsOptions] = instance.propsOptions;\n if (propsOptions) {\n for (const key in propsOptions) {\n checkDuplicateProperties(\"Props\" /* PROPS */, key);\n }\n }\n }\n if (injectOptions) {\n resolveInjections(injectOptions, ctx, checkDuplicateProperties);\n }\n if (methods) {\n for (const key in methods) {\n const methodHandler = methods[key];\n if (isFunction(methodHandler)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n Object.defineProperty(ctx, key, {\n value: methodHandler.bind(publicThis),\n configurable: true,\n enumerable: true,\n writable: true\n });\n } else {\n ctx[key] = methodHandler.bind(publicThis);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n checkDuplicateProperties(\"Methods\" /* METHODS */, key);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Method \"${key}\" has type \"${typeof methodHandler}\" in the component definition. Did you reference the function correctly?`\n );\n }\n }\n }\n if (dataOptions) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isFunction(dataOptions)) {\n warn$1(\n `The data option must be a function. Plain object usage is no longer supported.`\n );\n }\n const data = dataOptions.call(publicThis, publicThis);\n if (!!(process.env.NODE_ENV !== \"production\") && isPromise(data)) {\n warn$1(\n `data() returned a Promise - note data() cannot be async; If you intend to perform data fetching before component renders, use async setup() + <Suspense>.`\n );\n }\n if (!isObject(data)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`data() should return an object.`);\n } else {\n instance.data = reactive(data);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n for (const key in data) {\n checkDuplicateProperties(\"Data\" /* DATA */, key);\n if (!isReservedPrefix(key[0])) {\n Object.defineProperty(ctx, key, {\n configurable: true,\n enumerable: true,\n get: () => data[key],\n set: NOOP\n });\n }\n }\n }\n }\n }\n shouldCacheAccess = true;\n if (computedOptions) {\n for (const key in computedOptions) {\n const opt = computedOptions[key];\n const get = isFunction(opt) ? opt.bind(publicThis, publicThis) : isFunction(opt.get) ? opt.get.bind(publicThis, publicThis) : NOOP;\n if (!!(process.env.NODE_ENV !== \"production\") && get === NOOP) {\n warn$1(`Computed property \"${key}\" has no getter.`);\n }\n const set = !isFunction(opt) && isFunction(opt.set) ? opt.set.bind(publicThis) : !!(process.env.NODE_ENV !== \"production\") ? () => {\n warn$1(\n `Write operation failed: computed property \"${key}\" is readonly.`\n );\n } : NOOP;\n const c = computed({\n get,\n set\n });\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => c.value,\n set: (v) => c.value = v\n });\n if (!!(process.env.NODE_ENV !== \"production\")) {\n checkDuplicateProperties(\"Computed\" /* COMPUTED */, key);\n }\n }\n }\n if (watchOptions) {\n for (const key in watchOptions) {\n createWatcher(watchOptions[key], ctx, publicThis, key);\n }\n }\n if (provideOptions) {\n const provides = isFunction(provideOptions) ? provideOptions.call(publicThis) : provideOptions;\n Reflect.ownKeys(provides).forEach((key) => {\n provide(key, provides[key]);\n });\n }\n if (created) {\n callHook(created, instance, \"c\");\n }\n function registerLifecycleHook(register, hook) {\n if (isArray(hook)) {\n hook.forEach((_hook) => register(_hook.bind(publicThis)));\n } else if (hook) {\n register(hook.bind(publicThis));\n }\n }\n registerLifecycleHook(onBeforeMount, beforeMount);\n registerLifecycleHook(onMounted, mounted);\n registerLifecycleHook(onBeforeUpdate, beforeUpdate);\n registerLifecycleHook(onUpdated, updated);\n registerLifecycleHook(onActivated, activated);\n registerLifecycleHook(onDeactivated, deactivated);\n registerLifecycleHook(onErrorCaptured, errorCaptured);\n registerLifecycleHook(onRenderTracked, renderTracked);\n registerLifecycleHook(onRenderTriggered, renderTriggered);\n registerLifecycleHook(onBeforeUnmount, beforeUnmount);\n registerLifecycleHook(onUnmounted, unmounted);\n registerLifecycleHook(onServerPrefetch, serverPrefetch);\n if (isArray(expose)) {\n if (expose.length) {\n const exposed = instance.exposed || (instance.exposed = {});\n expose.forEach((key) => {\n Object.defineProperty(exposed, key, {\n get: () => publicThis[key],\n set: (val) => publicThis[key] = val,\n enumerable: true\n });\n });\n } else if (!instance.exposed) {\n instance.exposed = {};\n }\n }\n if (render && instance.render === NOOP) {\n instance.render = render;\n }\n if (inheritAttrs != null) {\n instance.inheritAttrs = inheritAttrs;\n }\n if (components) instance.components = components;\n if (directives) instance.directives = directives;\n if (serverPrefetch) {\n markAsyncBoundary(instance);\n }\n}\nfunction resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP) {\n if (isArray(injectOptions)) {\n injectOptions = normalizeInject(injectOptions);\n }\n for (const key in injectOptions) {\n const opt = injectOptions[key];\n let injected;\n if (isObject(opt)) {\n if (\"default\" in opt) {\n injected = inject(\n opt.from || key,\n opt.default,\n true\n );\n } else {\n injected = inject(opt.from || key);\n }\n } else {\n injected = inject(opt);\n }\n if (isRef(injected)) {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => injected.value,\n set: (v) => injected.value = v\n });\n } else {\n ctx[key] = injected;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n checkDuplicateProperties(\"Inject\" /* INJECT */, key);\n }\n }\n}\nfunction callHook(hook, instance, type) {\n callWithAsyncErrorHandling(\n isArray(hook) ? hook.map((h) => h.bind(instance.proxy)) : hook.bind(instance.proxy),\n instance,\n type\n );\n}\nfunction createWatcher(raw, ctx, publicThis, key) {\n let getter = key.includes(\".\") ? createPathGetter(publicThis, key) : () => publicThis[key];\n if (isString(raw)) {\n const handler = ctx[raw];\n if (isFunction(handler)) {\n {\n watch(getter, handler);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid watch handler specified by key \"${raw}\"`, handler);\n }\n } else if (isFunction(raw)) {\n {\n watch(getter, raw.bind(publicThis));\n }\n } else if (isObject(raw)) {\n if (isArray(raw)) {\n raw.forEach((r) => createWatcher(r, ctx, publicThis, key));\n } else {\n const handler = isFunction(raw.handler) ? raw.handler.bind(publicThis) : ctx[raw.handler];\n if (isFunction(handler)) {\n watch(getter, handler, raw);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid watch handler specified by key \"${raw.handler}\"`, handler);\n }\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid watch option: \"${key}\"`, raw);\n }\n}\nfunction resolveMergedOptions(instance) {\n const base = instance.type;\n const { mixins, extends: extendsOptions } = base;\n const {\n mixins: globalMixins,\n optionsCache: cache,\n config: { optionMergeStrategies }\n } = instance.appContext;\n const cached = cache.get(base);\n let resolved;\n if (cached) {\n resolved = cached;\n } else if (!globalMixins.length && !mixins && !extendsOptions) {\n {\n resolved = base;\n }\n } else {\n resolved = {};\n if (globalMixins.length) {\n globalMixins.forEach(\n (m) => mergeOptions(resolved, m, optionMergeStrategies, true)\n );\n }\n mergeOptions(resolved, base, optionMergeStrategies);\n }\n if (isObject(base)) {\n cache.set(base, resolved);\n }\n return resolved;\n}\nfunction mergeOptions(to, from, strats, asMixin = false) {\n const { mixins, extends: extendsOptions } = from;\n if (extendsOptions) {\n mergeOptions(to, extendsOptions, strats, true);\n }\n if (mixins) {\n mixins.forEach(\n (m) => mergeOptions(to, m, strats, true)\n );\n }\n for (const key in from) {\n if (asMixin && key === \"expose\") {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `\"expose\" option is ignored when declared in mixins or extends. It should only be declared in the base component itself.`\n );\n } else {\n const strat = internalOptionMergeStrats[key] || strats && strats[key];\n to[key] = strat ? strat(to[key], from[key]) : from[key];\n }\n }\n return to;\n}\nconst internalOptionMergeStrats = {\n data: mergeDataFn,\n props: mergeEmitsOrPropsOptions,\n emits: mergeEmitsOrPropsOptions,\n // objects\n methods: mergeObjectOptions,\n computed: mergeObjectOptions,\n // lifecycle\n beforeCreate: mergeAsArray,\n created: mergeAsArray,\n beforeMount: mergeAsArray,\n mounted: mergeAsArray,\n beforeUpdate: mergeAsArray,\n updated: mergeAsArray,\n beforeDestroy: mergeAsArray,\n beforeUnmount: mergeAsArray,\n destroyed: mergeAsArray,\n unmounted: mergeAsArray,\n activated: mergeAsArray,\n deactivated: mergeAsArray,\n errorCaptured: mergeAsArray,\n serverPrefetch: mergeAsArray,\n // assets\n components: mergeObjectOptions,\n directives: mergeObjectOptions,\n // watch\n watch: mergeWatchOptions,\n // provide / inject\n provide: mergeDataFn,\n inject: mergeInject\n};\nfunction mergeDataFn(to, from) {\n if (!from) {\n return to;\n }\n if (!to) {\n return from;\n }\n return function mergedDataFn() {\n return (extend)(\n isFunction(to) ? to.call(this, this) : to,\n isFunction(from) ? from.call(this, this) : from\n );\n };\n}\nfunction mergeInject(to, from) {\n return mergeObjectOptions(normalizeInject(to), normalizeInject(from));\n}\nfunction normalizeInject(raw) {\n if (isArray(raw)) {\n const res = {};\n for (let i = 0; i < raw.length; i++) {\n res[raw[i]] = raw[i];\n }\n return res;\n }\n return raw;\n}\nfunction mergeAsArray(to, from) {\n return to ? [...new Set([].concat(to, from))] : from;\n}\nfunction mergeObjectOptions(to, from) {\n return to ? extend(/* @__PURE__ */ Object.create(null), to, from) : from;\n}\nfunction mergeEmitsOrPropsOptions(to, from) {\n if (to) {\n if (isArray(to) && isArray(from)) {\n return [.../* @__PURE__ */ new Set([...to, ...from])];\n }\n return extend(\n /* @__PURE__ */ Object.create(null),\n normalizePropsOrEmits(to),\n normalizePropsOrEmits(from != null ? from : {})\n );\n } else {\n return from;\n }\n}\nfunction mergeWatchOptions(to, from) {\n if (!to) return from;\n if (!from) return to;\n const merged = extend(/* @__PURE__ */ Object.create(null), to);\n for (const key in from) {\n merged[key] = mergeAsArray(to[key], from[key]);\n }\n return merged;\n}\n\nfunction createAppContext() {\n return {\n app: null,\n config: {\n isNativeTag: NO,\n performance: false,\n globalProperties: {},\n optionMergeStrategies: {},\n errorHandler: void 0,\n warnHandler: void 0,\n compilerOptions: {}\n },\n mixins: [],\n components: {},\n directives: {},\n provides: /* @__PURE__ */ Object.create(null),\n optionsCache: /* @__PURE__ */ new WeakMap(),\n propsCache: /* @__PURE__ */ new WeakMap(),\n emitsCache: /* @__PURE__ */ new WeakMap()\n };\n}\nlet uid$1 = 0;\nfunction createAppAPI(render, hydrate) {\n return function createApp(rootComponent, rootProps = null) {\n if (!isFunction(rootComponent)) {\n rootComponent = extend({}, rootComponent);\n }\n if (rootProps != null && !isObject(rootProps)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`root props passed to app.mount() must be an object.`);\n rootProps = null;\n }\n const context = createAppContext();\n const installedPlugins = /* @__PURE__ */ new WeakSet();\n const pluginCleanupFns = [];\n let isMounted = false;\n const app = context.app = {\n _uid: uid$1++,\n _component: rootComponent,\n _props: rootProps,\n _container: null,\n _context: context,\n _instance: null,\n version,\n get config() {\n return context.config;\n },\n set config(v) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `app.config cannot be replaced. Modify individual options instead.`\n );\n }\n },\n use(plugin, ...options) {\n if (installedPlugins.has(plugin)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`Plugin has already been applied to target app.`);\n } else if (plugin && isFunction(plugin.install)) {\n installedPlugins.add(plugin);\n plugin.install(app, ...options);\n } else if (isFunction(plugin)) {\n installedPlugins.add(plugin);\n plugin(app, ...options);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `A plugin must either be a function or an object with an \"install\" function.`\n );\n }\n return app;\n },\n mixin(mixin) {\n if (__VUE_OPTIONS_API__) {\n if (!context.mixins.includes(mixin)) {\n context.mixins.push(mixin);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n \"Mixin has already been applied to target app\" + (mixin.name ? `: ${mixin.name}` : \"\")\n );\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Mixins are only available in builds supporting Options API\");\n }\n return app;\n },\n component(name, component) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateComponentName(name, context.config);\n }\n if (!component) {\n return context.components[name];\n }\n if (!!(process.env.NODE_ENV !== \"production\") && context.components[name]) {\n warn$1(`Component \"${name}\" has already been registered in target app.`);\n }\n context.components[name] = component;\n return app;\n },\n directive(name, directive) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateDirectiveName(name);\n }\n if (!directive) {\n return context.directives[name];\n }\n if (!!(process.env.NODE_ENV !== \"production\") && context.directives[name]) {\n warn$1(`Directive \"${name}\" has already been registered in target app.`);\n }\n context.directives[name] = directive;\n return app;\n },\n mount(rootContainer, isHydrate, namespace) {\n if (!isMounted) {\n if (!!(process.env.NODE_ENV !== \"production\") && rootContainer.__vue_app__) {\n warn$1(\n `There is already an app instance mounted on the host container.\n If you want to mount another app on the same host container, you need to unmount the previous app by calling \\`app.unmount()\\` first.`\n );\n }\n const vnode = app._ceVNode || createVNode(rootComponent, rootProps);\n vnode.appContext = context;\n if (namespace === true) {\n namespace = \"svg\";\n } else if (namespace === false) {\n namespace = void 0;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n context.reload = () => {\n const cloned = cloneVNode(vnode);\n cloned.el = null;\n render(cloned, rootContainer, namespace);\n };\n }\n if (isHydrate && hydrate) {\n hydrate(vnode, rootContainer);\n } else {\n render(vnode, rootContainer, namespace);\n }\n isMounted = true;\n app._container = rootContainer;\n rootContainer.__vue_app__ = app;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n app._instance = vnode.component;\n devtoolsInitApp(app, version);\n }\n return getComponentPublicInstance(vnode.component);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `App has already been mounted.\nIf you want to remount the same app, move your app creation logic into a factory function and create fresh app instances for each mount - e.g. \\`const createMyApp = () => createApp(App)\\``\n );\n }\n },\n onUnmount(cleanupFn) {\n if (!!(process.env.NODE_ENV !== \"production\") && typeof cleanupFn !== \"function\") {\n warn$1(\n `Expected function as first argument to app.onUnmount(), but got ${typeof cleanupFn}`\n );\n }\n pluginCleanupFns.push(cleanupFn);\n },\n unmount() {\n if (isMounted) {\n callWithAsyncErrorHandling(\n pluginCleanupFns,\n app._instance,\n 16\n );\n render(null, app._container);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n app._instance = null;\n devtoolsUnmountApp(app);\n }\n delete app._container.__vue_app__;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Cannot unmount an app that is not mounted.`);\n }\n },\n provide(key, value) {\n if (!!(process.env.NODE_ENV !== \"production\") && key in context.provides) {\n if (hasOwn(context.provides, key)) {\n warn$1(\n `App already provides property with key \"${String(key)}\". It will be overwritten with the new value.`\n );\n } else {\n warn$1(\n `App already provides property with key \"${String(key)}\" inherited from its parent element. It will be overwritten with the new value.`\n );\n }\n }\n context.provides[key] = value;\n return app;\n },\n runWithContext(fn) {\n const lastApp = currentApp;\n currentApp = app;\n try {\n return fn();\n } finally {\n currentApp = lastApp;\n }\n }\n };\n return app;\n };\n}\nlet currentApp = null;\n\nfunction useModel(props, name, options = EMPTY_OBJ) {\n const i = getCurrentInstance();\n if (!!(process.env.NODE_ENV !== \"production\") && !i) {\n warn$1(`useModel() called without active instance.`);\n return ref();\n }\n const camelizedName = camelize(name);\n if (!!(process.env.NODE_ENV !== \"production\") && !i.propsOptions[0][camelizedName]) {\n warn$1(`useModel() called with prop \"${name}\" which is not declared.`);\n return ref();\n }\n const hyphenatedName = hyphenate(name);\n const modifiers = getModelModifiers(props, camelizedName);\n const res = customRef((track, trigger) => {\n let localValue;\n let prevSetValue = EMPTY_OBJ;\n let prevEmittedValue;\n watchSyncEffect(() => {\n const propValue = props[camelizedName];\n if (hasChanged(localValue, propValue)) {\n localValue = propValue;\n trigger();\n }\n });\n return {\n get() {\n track();\n return options.get ? options.get(localValue) : localValue;\n },\n set(value) {\n const emittedValue = options.set ? options.set(value) : value;\n if (!hasChanged(emittedValue, localValue) && !(prevSetValue !== EMPTY_OBJ && hasChanged(value, prevSetValue))) {\n return;\n }\n const rawProps = i.vnode.props;\n if (!(rawProps && // check if parent has passed v-model\n (name in rawProps || camelizedName in rawProps || hyphenatedName in rawProps) && (`onUpdate:${name}` in rawProps || `onUpdate:${camelizedName}` in rawProps || `onUpdate:${hyphenatedName}` in rawProps))) {\n localValue = value;\n trigger();\n }\n i.emit(`update:${name}`, emittedValue);\n if (hasChanged(value, emittedValue) && hasChanged(value, prevSetValue) && !hasChanged(emittedValue, prevEmittedValue)) {\n trigger();\n }\n prevSetValue = value;\n prevEmittedValue = emittedValue;\n }\n };\n });\n res[Symbol.iterator] = () => {\n let i2 = 0;\n return {\n next() {\n if (i2 < 2) {\n return { value: i2++ ? modifiers || EMPTY_OBJ : res, done: false };\n } else {\n return { done: true };\n }\n }\n };\n };\n return res;\n}\nconst getModelModifiers = (props, modelName) => {\n return modelName === \"modelValue\" || modelName === \"model-value\" ? props.modelModifiers : props[`${modelName}Modifiers`] || props[`${camelize(modelName)}Modifiers`] || props[`${hyphenate(modelName)}Modifiers`];\n};\n\nfunction emit(instance, event, ...rawArgs) {\n if (instance.isUnmounted) return;\n const props = instance.vnode.props || EMPTY_OBJ;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const {\n emitsOptions,\n propsOptions: [propsOptions]\n } = instance;\n if (emitsOptions) {\n if (!(event in emitsOptions) && true) {\n if (!propsOptions || !(toHandlerKey(camelize(event)) in propsOptions)) {\n warn$1(\n `Component emitted event \"${event}\" but it is neither declared in the emits option nor as an \"${toHandlerKey(camelize(event))}\" prop.`\n );\n }\n } else {\n const validator = emitsOptions[event];\n if (isFunction(validator)) {\n const isValid = validator(...rawArgs);\n if (!isValid) {\n warn$1(\n `Invalid event arguments: event validation failed for event \"${event}\".`\n );\n }\n }\n }\n }\n }\n let args = rawArgs;\n const isModelListener = event.startsWith(\"update:\");\n const modifiers = isModelListener && getModelModifiers(props, event.slice(7));\n if (modifiers) {\n if (modifiers.trim) {\n args = rawArgs.map((a) => isString(a) ? a.trim() : a);\n }\n if (modifiers.number) {\n args = rawArgs.map(looseToNumber);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentEmit(instance, event, args);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {\n warn$1(\n `Event \"${lowerCaseEvent}\" is emitted in component ${formatComponentName(\n instance,\n instance.type\n )} but the handler is registered for \"${event}\". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use \"${hyphenate(\n event\n )}\" instead of \"${event}\".`\n );\n }\n }\n let handlerName;\n let handler = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249)\n props[handlerName = toHandlerKey(camelize(event))];\n if (!handler && isModelListener) {\n handler = props[handlerName = toHandlerKey(hyphenate(event))];\n }\n if (handler) {\n callWithAsyncErrorHandling(\n handler,\n instance,\n 6,\n args\n );\n }\n const onceHandler = props[handlerName + `Once`];\n if (onceHandler) {\n if (!instance.emitted) {\n instance.emitted = {};\n } else if (instance.emitted[handlerName]) {\n return;\n }\n instance.emitted[handlerName] = true;\n callWithAsyncErrorHandling(\n onceHandler,\n instance,\n 6,\n args\n );\n }\n}\nconst mixinEmitsCache = /* @__PURE__ */ new WeakMap();\nfunction normalizeEmitsOptions(comp, appContext, asMixin = false) {\n const cache = __VUE_OPTIONS_API__ && asMixin ? mixinEmitsCache : appContext.emitsCache;\n const cached = cache.get(comp);\n if (cached !== void 0) {\n return cached;\n }\n const raw = comp.emits;\n let normalized = {};\n let hasExtends = false;\n if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\n const extendEmits = (raw2) => {\n const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);\n if (normalizedFromExtend) {\n hasExtends = true;\n extend(normalized, normalizedFromExtend);\n }\n };\n if (!asMixin && appContext.mixins.length) {\n appContext.mixins.forEach(extendEmits);\n }\n if (comp.extends) {\n extendEmits(comp.extends);\n }\n if (comp.mixins) {\n comp.mixins.forEach(extendEmits);\n }\n }\n if (!raw && !hasExtends) {\n if (isObject(comp)) {\n cache.set(comp, null);\n }\n return null;\n }\n if (isArray(raw)) {\n raw.forEach((key) => normalized[key] = null);\n } else {\n extend(normalized, raw);\n }\n if (isObject(comp)) {\n cache.set(comp, normalized);\n }\n return normalized;\n}\nfunction isEmitListener(options, key) {\n if (!options || !isOn(key)) {\n return false;\n }\n key = key.slice(2).replace(/Once$/, \"\");\n return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key);\n}\n\nlet accessedAttrs = false;\nfunction markAttrsAccessed() {\n accessedAttrs = true;\n}\nfunction renderComponentRoot(instance) {\n const {\n type: Component,\n vnode,\n proxy,\n withProxy,\n propsOptions: [propsOptions],\n slots,\n attrs,\n emit,\n render,\n renderCache,\n props,\n data,\n setupState,\n ctx,\n inheritAttrs\n } = instance;\n const prev = setCurrentRenderingInstance(instance);\n let result;\n let fallthroughAttrs;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n accessedAttrs = false;\n }\n try {\n if (vnode.shapeFlag & 4) {\n const proxyToUse = withProxy || proxy;\n const thisProxy = !!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup ? new Proxy(proxyToUse, {\n get(target, key, receiver) {\n warn$1(\n `Property '${String(\n key\n )}' was accessed via 'this'. Avoid using 'this' in templates.`\n );\n return Reflect.get(target, key, receiver);\n }\n }) : proxyToUse;\n result = normalizeVNode(\n render.call(\n thisProxy,\n proxyToUse,\n renderCache,\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n setupState,\n data,\n ctx\n )\n );\n fallthroughAttrs = attrs;\n } else {\n const render2 = Component;\n if (!!(process.env.NODE_ENV !== \"production\") && attrs === props) {\n markAttrsAccessed();\n }\n result = normalizeVNode(\n render2.length > 1 ? render2(\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n !!(process.env.NODE_ENV !== \"production\") ? {\n get attrs() {\n markAttrsAccessed();\n return shallowReadonly(attrs);\n },\n slots,\n emit\n } : { attrs, slots, emit }\n ) : render2(\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n null\n )\n );\n fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs);\n }\n } catch (err) {\n blockStack.length = 0;\n handleError(err, instance, 1);\n result = createVNode(Comment);\n }\n let root = result;\n let setRoot = void 0;\n if (!!(process.env.NODE_ENV !== \"production\") && result.patchFlag > 0 && result.patchFlag & 2048) {\n [root, setRoot] = getChildRoot(result);\n }\n if (fallthroughAttrs && inheritAttrs !== false) {\n const keys = Object.keys(fallthroughAttrs);\n const { shapeFlag } = root;\n if (keys.length) {\n if (shapeFlag & (1 | 6)) {\n if (propsOptions && keys.some(isModelListener)) {\n fallthroughAttrs = filterModelListeners(\n fallthroughAttrs,\n propsOptions\n );\n }\n root = cloneVNode(root, fallthroughAttrs, false, true);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !accessedAttrs && root.type !== Comment) {\n const allAttrs = Object.keys(attrs);\n const eventAttrs = [];\n const extraAttrs = [];\n for (let i = 0, l = allAttrs.length; i < l; i++) {\n const key = allAttrs[i];\n if (isOn(key)) {\n if (!isModelListener(key)) {\n eventAttrs.push(key[2].toLowerCase() + key.slice(3));\n }\n } else {\n extraAttrs.push(key);\n }\n }\n if (extraAttrs.length) {\n warn$1(\n `Extraneous non-props attributes (${extraAttrs.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text or teleport root nodes.`\n );\n }\n if (eventAttrs.length) {\n warn$1(\n `Extraneous non-emits event listeners (${eventAttrs.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the \"emits\" option.`\n );\n }\n }\n }\n }\n if (vnode.dirs) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isElementRoot(root)) {\n warn$1(\n `Runtime directive used on component with non-element root node. The directives will not function as intended.`\n );\n }\n root = cloneVNode(root, null, false, true);\n root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;\n }\n if (vnode.transition) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isElementRoot(root)) {\n warn$1(\n `Component inside <Transition> renders non-element root node that cannot be animated.`\n );\n }\n setTransitionHooks(root, vnode.transition);\n }\n if (!!(process.env.NODE_ENV !== \"production\") && setRoot) {\n setRoot(root);\n } else {\n result = root;\n }\n setCurrentRenderingInstance(prev);\n return result;\n}\nconst getChildRoot = (vnode) => {\n const rawChildren = vnode.children;\n const dynamicChildren = vnode.dynamicChildren;\n const childRoot = filterSingleRoot(rawChildren, false);\n if (!childRoot) {\n return [vnode, void 0];\n } else if (!!(process.env.NODE_ENV !== \"production\") && childRoot.patchFlag > 0 && childRoot.patchFlag & 2048) {\n return getChildRoot(childRoot);\n }\n const index = rawChildren.indexOf(childRoot);\n const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;\n const setRoot = (updatedRoot) => {\n rawChildren[index] = updatedRoot;\n if (dynamicChildren) {\n if (dynamicIndex > -1) {\n dynamicChildren[dynamicIndex] = updatedRoot;\n } else if (updatedRoot.patchFlag > 0) {\n vnode.dynamicChildren = [...dynamicChildren, updatedRoot];\n }\n }\n };\n return [normalizeVNode(childRoot), setRoot];\n};\nfunction filterSingleRoot(children, recurse = true) {\n let singleRoot;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isVNode(child)) {\n if (child.type !== Comment || child.children === \"v-if\") {\n if (singleRoot) {\n return;\n } else {\n singleRoot = child;\n if (!!(process.env.NODE_ENV !== \"production\") && recurse && singleRoot.patchFlag > 0 && singleRoot.patchFlag & 2048) {\n return filterSingleRoot(singleRoot.children);\n }\n }\n }\n } else {\n return;\n }\n }\n return singleRoot;\n}\nconst getFunctionalFallthrough = (attrs) => {\n let res;\n for (const key in attrs) {\n if (key === \"class\" || key === \"style\" || isOn(key)) {\n (res || (res = {}))[key] = attrs[key];\n }\n }\n return res;\n};\nconst filterModelListeners = (attrs, props) => {\n const res = {};\n for (const key in attrs) {\n if (!isModelListener(key) || !(key.slice(9) in props)) {\n res[key] = attrs[key];\n }\n }\n return res;\n};\nconst isElementRoot = (vnode) => {\n return vnode.shapeFlag & (6 | 1) || vnode.type === Comment;\n};\nfunction shouldUpdateComponent(prevVNode, nextVNode, optimized) {\n const { props: prevProps, children: prevChildren, component } = prevVNode;\n const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;\n const emits = component.emitsOptions;\n if (!!(process.env.NODE_ENV !== \"production\") && (prevChildren || nextChildren) && isHmrUpdating) {\n return true;\n }\n if (nextVNode.dirs || nextVNode.transition) {\n return true;\n }\n if (optimized && patchFlag >= 0) {\n if (patchFlag & 1024) {\n return true;\n }\n if (patchFlag & 16) {\n if (!prevProps) {\n return !!nextProps;\n }\n return hasPropsChanged(prevProps, nextProps, emits);\n } else if (patchFlag & 8) {\n const dynamicProps = nextVNode.dynamicProps;\n for (let i = 0; i < dynamicProps.length; i++) {\n const key = dynamicProps[i];\n if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) {\n return true;\n }\n }\n }\n } else {\n if (prevChildren || nextChildren) {\n if (!nextChildren || !nextChildren.$stable) {\n return true;\n }\n }\n if (prevProps === nextProps) {\n return false;\n }\n if (!prevProps) {\n return !!nextProps;\n }\n if (!nextProps) {\n return true;\n }\n return hasPropsChanged(prevProps, nextProps, emits);\n }\n return false;\n}\nfunction hasPropsChanged(prevProps, nextProps, emitsOptions) {\n const nextKeys = Object.keys(nextProps);\n if (nextKeys.length !== Object.keys(prevProps).length) {\n return true;\n }\n for (let i = 0; i < nextKeys.length; i++) {\n const key = nextKeys[i];\n if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) {\n return true;\n }\n }\n return false;\n}\nfunction updateHOCHostEl({ vnode, parent }, el) {\n while (parent) {\n const root = parent.subTree;\n if (root.suspense && root.suspense.activeBranch === vnode) {\n root.el = vnode.el;\n }\n if (root === vnode) {\n (vnode = parent.vnode).el = el;\n parent = parent.parent;\n } else {\n break;\n }\n }\n}\n\nconst internalObjectProto = {};\nconst createInternalObject = () => Object.create(internalObjectProto);\nconst isInternalObject = (obj) => Object.getPrototypeOf(obj) === internalObjectProto;\n\nfunction initProps(instance, rawProps, isStateful, isSSR = false) {\n const props = {};\n const attrs = createInternalObject();\n instance.propsDefaults = /* @__PURE__ */ Object.create(null);\n setFullProps(instance, rawProps, props, attrs);\n for (const key in instance.propsOptions[0]) {\n if (!(key in props)) {\n props[key] = void 0;\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateProps(rawProps || {}, props, instance);\n }\n if (isStateful) {\n instance.props = isSSR ? props : shallowReactive(props);\n } else {\n if (!instance.type.props) {\n instance.props = attrs;\n } else {\n instance.props = props;\n }\n }\n instance.attrs = attrs;\n}\nfunction isInHmrContext(instance) {\n while (instance) {\n if (instance.type.__hmrId) return true;\n instance = instance.parent;\n }\n}\nfunction updateProps(instance, rawProps, rawPrevProps, optimized) {\n const {\n props,\n attrs,\n vnode: { patchFlag }\n } = instance;\n const rawCurrentProps = toRaw(props);\n const [options] = instance.propsOptions;\n let hasAttrsChanged = false;\n if (\n // always force full diff in dev\n // - #1942 if hmr is enabled with sfc component\n // - vite#872 non-sfc component used by sfc component\n !(!!(process.env.NODE_ENV !== \"production\") && isInHmrContext(instance)) && (optimized || patchFlag > 0) && !(patchFlag & 16)\n ) {\n if (patchFlag & 8) {\n const propsToUpdate = instance.vnode.dynamicProps;\n for (let i = 0; i < propsToUpdate.length; i++) {\n let key = propsToUpdate[i];\n if (isEmitListener(instance.emitsOptions, key)) {\n continue;\n }\n const value = rawProps[key];\n if (options) {\n if (hasOwn(attrs, key)) {\n if (value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n } else {\n const camelizedKey = camelize(key);\n props[camelizedKey] = resolvePropValue(\n options,\n rawCurrentProps,\n camelizedKey,\n value,\n instance,\n false\n );\n }\n } else {\n if (value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n }\n }\n }\n } else {\n if (setFullProps(instance, rawProps, props, attrs)) {\n hasAttrsChanged = true;\n }\n let kebabKey;\n for (const key in rawCurrentProps) {\n if (!rawProps || // for camelCase\n !hasOwn(rawProps, key) && // it's possible the original props was passed in as kebab-case\n // and converted to camelCase (#955)\n ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) {\n if (options) {\n if (rawPrevProps && // for camelCase\n (rawPrevProps[key] !== void 0 || // for kebab-case\n rawPrevProps[kebabKey] !== void 0)) {\n props[key] = resolvePropValue(\n options,\n rawCurrentProps,\n key,\n void 0,\n instance,\n true\n );\n }\n } else {\n delete props[key];\n }\n }\n }\n if (attrs !== rawCurrentProps) {\n for (const key in attrs) {\n if (!rawProps || !hasOwn(rawProps, key) && true) {\n delete attrs[key];\n hasAttrsChanged = true;\n }\n }\n }\n }\n if (hasAttrsChanged) {\n trigger(instance.attrs, \"set\", \"\");\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateProps(rawProps || {}, props, instance);\n }\n}\nfunction setFullProps(instance, rawProps, props, attrs) {\n const [options, needCastKeys] = instance.propsOptions;\n let hasAttrsChanged = false;\n let rawCastValues;\n if (rawProps) {\n for (let key in rawProps) {\n if (isReservedProp(key)) {\n continue;\n }\n const value = rawProps[key];\n let camelKey;\n if (options && hasOwn(options, camelKey = camelize(key))) {\n if (!needCastKeys || !needCastKeys.includes(camelKey)) {\n props[camelKey] = value;\n } else {\n (rawCastValues || (rawCastValues = {}))[camelKey] = value;\n }\n } else if (!isEmitListener(instance.emitsOptions, key)) {\n if (!(key in attrs) || value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n }\n }\n }\n if (needCastKeys) {\n const rawCurrentProps = toRaw(props);\n const castValues = rawCastValues || EMPTY_OBJ;\n for (let i = 0; i < needCastKeys.length; i++) {\n const key = needCastKeys[i];\n props[key] = resolvePropValue(\n options,\n rawCurrentProps,\n key,\n castValues[key],\n instance,\n !hasOwn(castValues, key)\n );\n }\n }\n return hasAttrsChanged;\n}\nfunction resolvePropValue(options, props, key, value, instance, isAbsent) {\n const opt = options[key];\n if (opt != null) {\n const hasDefault = hasOwn(opt, \"default\");\n if (hasDefault && value === void 0) {\n const defaultValue = opt.default;\n if (opt.type !== Function && !opt.skipFactory && isFunction(defaultValue)) {\n const { propsDefaults } = instance;\n if (key in propsDefaults) {\n value = propsDefaults[key];\n } else {\n const reset = setCurrentInstance(instance);\n value = propsDefaults[key] = defaultValue.call(\n null,\n props\n );\n reset();\n }\n } else {\n value = defaultValue;\n }\n if (instance.ce) {\n instance.ce._setProp(key, value);\n }\n }\n if (opt[0 /* shouldCast */]) {\n if (isAbsent && !hasDefault) {\n value = false;\n } else if (opt[1 /* shouldCastTrue */] && (value === \"\" || value === hyphenate(key))) {\n value = true;\n }\n }\n }\n return value;\n}\nconst mixinPropsCache = /* @__PURE__ */ new WeakMap();\nfunction normalizePropsOptions(comp, appContext, asMixin = false) {\n const cache = __VUE_OPTIONS_API__ && asMixin ? mixinPropsCache : appContext.propsCache;\n const cached = cache.get(comp);\n if (cached) {\n return cached;\n }\n const raw = comp.props;\n const normalized = {};\n const needCastKeys = [];\n let hasExtends = false;\n if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\n const extendProps = (raw2) => {\n hasExtends = true;\n const [props, keys] = normalizePropsOptions(raw2, appContext, true);\n extend(normalized, props);\n if (keys) needCastKeys.push(...keys);\n };\n if (!asMixin && appContext.mixins.length) {\n appContext.mixins.forEach(extendProps);\n }\n if (comp.extends) {\n extendProps(comp.extends);\n }\n if (comp.mixins) {\n comp.mixins.forEach(extendProps);\n }\n }\n if (!raw && !hasExtends) {\n if (isObject(comp)) {\n cache.set(comp, EMPTY_ARR);\n }\n return EMPTY_ARR;\n }\n if (isArray(raw)) {\n for (let i = 0; i < raw.length; i++) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isString(raw[i])) {\n warn$1(`props must be strings when using array syntax.`, raw[i]);\n }\n const normalizedKey = camelize(raw[i]);\n if (validatePropName(normalizedKey)) {\n normalized[normalizedKey] = EMPTY_OBJ;\n }\n }\n } else if (raw) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isObject(raw)) {\n warn$1(`invalid props options`, raw);\n }\n for (const key in raw) {\n const normalizedKey = camelize(key);\n if (validatePropName(normalizedKey)) {\n const opt = raw[key];\n const prop = normalized[normalizedKey] = isArray(opt) || isFunction(opt) ? { type: opt } : extend({}, opt);\n const propType = prop.type;\n let shouldCast = false;\n let shouldCastTrue = true;\n if (isArray(propType)) {\n for (let index = 0; index < propType.length; ++index) {\n const type = propType[index];\n const typeName = isFunction(type) && type.name;\n if (typeName === \"Boolean\") {\n shouldCast = true;\n break;\n } else if (typeName === \"String\") {\n shouldCastTrue = false;\n }\n }\n } else {\n shouldCast = isFunction(propType) && propType.name === \"Boolean\";\n }\n prop[0 /* shouldCast */] = shouldCast;\n prop[1 /* shouldCastTrue */] = shouldCastTrue;\n if (shouldCast || hasOwn(prop, \"default\")) {\n needCastKeys.push(normalizedKey);\n }\n }\n }\n }\n const res = [normalized, needCastKeys];\n if (isObject(comp)) {\n cache.set(comp, res);\n }\n return res;\n}\nfunction validatePropName(key) {\n if (key[0] !== \"$\" && !isReservedProp(key)) {\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid prop name: \"${key}\" is a reserved property.`);\n }\n return false;\n}\nfunction getType(ctor) {\n if (ctor === null) {\n return \"null\";\n }\n if (typeof ctor === \"function\") {\n return ctor.name || \"\";\n } else if (typeof ctor === \"object\") {\n const name = ctor.constructor && ctor.constructor.name;\n return name || \"\";\n }\n return \"\";\n}\nfunction validateProps(rawProps, props, instance) {\n const resolvedValues = toRaw(props);\n const options = instance.propsOptions[0];\n const camelizePropsKey = Object.keys(rawProps).map((key) => camelize(key));\n for (const key in options) {\n let opt = options[key];\n if (opt == null) continue;\n validateProp(\n key,\n resolvedValues[key],\n opt,\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(resolvedValues) : resolvedValues,\n !camelizePropsKey.includes(key)\n );\n }\n}\nfunction validateProp(name, value, prop, props, isAbsent) {\n const { type, required, validator, skipCheck } = prop;\n if (required && isAbsent) {\n warn$1('Missing required prop: \"' + name + '\"');\n return;\n }\n if (value == null && !required) {\n return;\n }\n if (type != null && type !== true && !skipCheck) {\n let isValid = false;\n const types = isArray(type) ? type : [type];\n const expectedTypes = [];\n for (let i = 0; i < types.length && !isValid; i++) {\n const { valid, expectedType } = assertType(value, types[i]);\n expectedTypes.push(expectedType || \"\");\n isValid = valid;\n }\n if (!isValid) {\n warn$1(getInvalidTypeMessage(name, value, expectedTypes));\n return;\n }\n }\n if (validator && !validator(value, props)) {\n warn$1('Invalid prop: custom validator check failed for prop \"' + name + '\".');\n }\n}\nconst isSimpleType = /* @__PURE__ */ makeMap(\n \"String,Number,Boolean,Function,Symbol,BigInt\"\n);\nfunction assertType(value, type) {\n let valid;\n const expectedType = getType(type);\n if (expectedType === \"null\") {\n valid = value === null;\n } else if (isSimpleType(expectedType)) {\n const t = typeof value;\n valid = t === expectedType.toLowerCase();\n if (!valid && t === \"object\") {\n valid = value instanceof type;\n }\n } else if (expectedType === \"Object\") {\n valid = isObject(value);\n } else if (expectedType === \"Array\") {\n valid = isArray(value);\n } else {\n valid = value instanceof type;\n }\n return {\n valid,\n expectedType\n };\n}\nfunction getInvalidTypeMessage(name, value, expectedTypes) {\n if (expectedTypes.length === 0) {\n return `Prop type [] for prop \"${name}\" won't match anything. Did you mean to use type Array instead?`;\n }\n let message = `Invalid prop: type check failed for prop \"${name}\". Expected ${expectedTypes.map(capitalize).join(\" | \")}`;\n const expectedType = expectedTypes[0];\n const receivedType = toRawType(value);\n const expectedValue = styleValue(value, expectedType);\n const receivedValue = styleValue(value, receivedType);\n if (expectedTypes.length === 1 && isExplicable(expectedType) && !isBoolean(expectedType, receivedType)) {\n message += ` with value ${expectedValue}`;\n }\n message += `, got ${receivedType} `;\n if (isExplicable(receivedType)) {\n message += `with value ${receivedValue}.`;\n }\n return message;\n}\nfunction styleValue(value, type) {\n if (type === \"String\") {\n return `\"${value}\"`;\n } else if (type === \"Number\") {\n return `${Number(value)}`;\n } else {\n return `${value}`;\n }\n}\nfunction isExplicable(type) {\n const explicitTypes = [\"string\", \"number\", \"boolean\"];\n return explicitTypes.some((elem) => type.toLowerCase() === elem);\n}\nfunction isBoolean(...args) {\n return args.some((elem) => elem.toLowerCase() === \"boolean\");\n}\n\nconst isInternalKey = (key) => key === \"_\" || key === \"_ctx\" || key === \"$stable\";\nconst normalizeSlotValue = (value) => isArray(value) ? value.map(normalizeVNode) : [normalizeVNode(value)];\nconst normalizeSlot = (key, rawSlot, ctx) => {\n if (rawSlot._n) {\n return rawSlot;\n }\n const normalized = withCtx((...args) => {\n if (!!(process.env.NODE_ENV !== \"production\") && currentInstance && !(ctx === null && currentRenderingInstance) && !(ctx && ctx.root !== currentInstance.root)) {\n warn$1(\n `Slot \"${key}\" invoked outside of the render function: this will not track dependencies used in the slot. Invoke the slot function inside the render function instead.`\n );\n }\n return normalizeSlotValue(rawSlot(...args));\n }, ctx);\n normalized._c = false;\n return normalized;\n};\nconst normalizeObjectSlots = (rawSlots, slots, instance) => {\n const ctx = rawSlots._ctx;\n for (const key in rawSlots) {\n if (isInternalKey(key)) continue;\n const value = rawSlots[key];\n if (isFunction(value)) {\n slots[key] = normalizeSlot(key, value, ctx);\n } else if (value != null) {\n if (!!(process.env.NODE_ENV !== \"production\") && true) {\n warn$1(\n `Non-function value encountered for slot \"${key}\". Prefer function slots for better performance.`\n );\n }\n const normalized = normalizeSlotValue(value);\n slots[key] = () => normalized;\n }\n }\n};\nconst normalizeVNodeSlots = (instance, children) => {\n if (!!(process.env.NODE_ENV !== \"production\") && !isKeepAlive(instance.vnode) && true) {\n warn$1(\n `Non-function value encountered for default slot. Prefer function slots for better performance.`\n );\n }\n const normalized = normalizeSlotValue(children);\n instance.slots.default = () => normalized;\n};\nconst assignSlots = (slots, children, optimized) => {\n for (const key in children) {\n if (optimized || !isInternalKey(key)) {\n slots[key] = children[key];\n }\n }\n};\nconst initSlots = (instance, children, optimized) => {\n const slots = instance.slots = createInternalObject();\n if (instance.vnode.shapeFlag & 32) {\n const type = children._;\n if (type) {\n assignSlots(slots, children, optimized);\n if (optimized) {\n def(slots, \"_\", type, true);\n }\n } else {\n normalizeObjectSlots(children, slots);\n }\n } else if (children) {\n normalizeVNodeSlots(instance, children);\n }\n};\nconst updateSlots = (instance, children, optimized) => {\n const { vnode, slots } = instance;\n let needDeletionCheck = true;\n let deletionComparisonTarget = EMPTY_OBJ;\n if (vnode.shapeFlag & 32) {\n const type = children._;\n if (type) {\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n assignSlots(slots, children, optimized);\n trigger(instance, \"set\", \"$slots\");\n } else if (optimized && type === 1) {\n needDeletionCheck = false;\n } else {\n assignSlots(slots, children, optimized);\n }\n } else {\n needDeletionCheck = !children.$stable;\n normalizeObjectSlots(children, slots);\n }\n deletionComparisonTarget = children;\n } else if (children) {\n normalizeVNodeSlots(instance, children);\n deletionComparisonTarget = { default: 1 };\n }\n if (needDeletionCheck) {\n for (const key in slots) {\n if (!isInternalKey(key) && deletionComparisonTarget[key] == null) {\n delete slots[key];\n }\n }\n }\n};\n\nlet supported;\nlet perf;\nfunction startMeasure(instance, type) {\n if (instance.appContext.config.performance && isSupported()) {\n perf.mark(`vue-${type}-${instance.uid}`);\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now());\n }\n}\nfunction endMeasure(instance, type) {\n if (instance.appContext.config.performance && isSupported()) {\n const startTag = `vue-${type}-${instance.uid}`;\n const endTag = startTag + `:end`;\n const measureName = `<${formatComponentName(instance, instance.type)}> ${type}`;\n perf.mark(endTag);\n perf.measure(measureName, startTag, endTag);\n perf.clearMeasures(measureName);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now());\n }\n}\nfunction isSupported() {\n if (supported !== void 0) {\n return supported;\n }\n if (typeof window !== \"undefined\" && window.performance) {\n supported = true;\n perf = window.performance;\n } else {\n supported = false;\n }\n return supported;\n}\n\nfunction initFeatureFlags() {\n const needWarn = [];\n if (typeof __VUE_OPTIONS_API__ !== \"boolean\") {\n !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_OPTIONS_API__`);\n getGlobalThis().__VUE_OPTIONS_API__ = true;\n }\n if (typeof __VUE_PROD_DEVTOOLS__ !== \"boolean\") {\n !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_PROD_DEVTOOLS__`);\n getGlobalThis().__VUE_PROD_DEVTOOLS__ = false;\n }\n if (typeof __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ !== \"boolean\") {\n !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_PROD_HYDRATION_MISMATCH_DETAILS__`);\n getGlobalThis().__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ = false;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && needWarn.length) {\n const multi = needWarn.length > 1;\n console.warn(\n `Feature flag${multi ? `s` : ``} ${needWarn.join(\", \")} ${multi ? `are` : `is`} not explicitly defined. You are running the esm-bundler build of Vue, which expects these compile-time feature flags to be globally injected via the bundler config in order to get better tree-shaking in the production bundle.\n\nFor more details, see https://link.vuejs.org/feature-flags.`\n );\n }\n}\n\nconst queuePostRenderEffect = queueEffectWithSuspense ;\nfunction createRenderer(options) {\n return baseCreateRenderer(options);\n}\nfunction createHydrationRenderer(options) {\n return baseCreateRenderer(options, createHydrationFunctions);\n}\nfunction baseCreateRenderer(options, createHydrationFns) {\n {\n initFeatureFlags();\n }\n const target = getGlobalThis();\n target.__VUE__ = true;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n setDevtoolsHook$1(target.__VUE_DEVTOOLS_GLOBAL_HOOK__, target);\n }\n const {\n insert: hostInsert,\n remove: hostRemove,\n patchProp: hostPatchProp,\n createElement: hostCreateElement,\n createText: hostCreateText,\n createComment: hostCreateComment,\n setText: hostSetText,\n setElementText: hostSetElementText,\n parentNode: hostParentNode,\n nextSibling: hostNextSibling,\n setScopeId: hostSetScopeId = NOOP,\n insertStaticContent: hostInsertStaticContent\n } = options;\n const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, namespace = void 0, slotScopeIds = null, optimized = !!(process.env.NODE_ENV !== \"production\") && isHmrUpdating ? false : !!n2.dynamicChildren) => {\n if (n1 === n2) {\n return;\n }\n if (n1 && !isSameVNodeType(n1, n2)) {\n anchor = getNextHostNode(n1);\n unmount(n1, parentComponent, parentSuspense, true);\n n1 = null;\n }\n if (n2.patchFlag === -2) {\n optimized = false;\n n2.dynamicChildren = null;\n }\n const { type, ref, shapeFlag } = n2;\n switch (type) {\n case Text:\n processText(n1, n2, container, anchor);\n break;\n case Comment:\n processCommentNode(n1, n2, container, anchor);\n break;\n case Static:\n if (n1 == null) {\n mountStaticNode(n2, container, anchor, namespace);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n patchStaticNode(n1, n2, container, namespace);\n }\n break;\n case Fragment:\n processFragment(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n break;\n default:\n if (shapeFlag & 1) {\n processElement(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else if (shapeFlag & 6) {\n processComponent(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else if (shapeFlag & 64) {\n type.process(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n internals\n );\n } else if (shapeFlag & 128) {\n type.process(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n internals\n );\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid VNode type:\", type, `(${typeof type})`);\n }\n }\n if (ref != null && parentComponent) {\n setRef(ref, n1 && n1.ref, parentSuspense, n2 || n1, !n2);\n } else if (ref == null && n1 && n1.ref != null) {\n setRef(n1.ref, null, parentSuspense, n1, true);\n }\n };\n const processText = (n1, n2, container, anchor) => {\n if (n1 == null) {\n hostInsert(\n n2.el = hostCreateText(n2.children),\n container,\n anchor\n );\n } else {\n const el = n2.el = n1.el;\n if (n2.children !== n1.children) {\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating && n2.patchFlag === -1 && \"__elIndex\" in n1) {\n const childNodes = container.childNodes;\n const newChild = hostCreateText(n2.children);\n const oldChild = childNodes[n2.__elIndex = n1.__elIndex];\n hostInsert(newChild, container, oldChild);\n hostRemove(oldChild);\n } else {\n hostSetText(el, n2.children);\n }\n }\n }\n };\n const processCommentNode = (n1, n2, container, anchor) => {\n if (n1 == null) {\n hostInsert(\n n2.el = hostCreateComment(n2.children || \"\"),\n container,\n anchor\n );\n } else {\n n2.el = n1.el;\n }\n };\n const mountStaticNode = (n2, container, anchor, namespace) => {\n [n2.el, n2.anchor] = hostInsertStaticContent(\n n2.children,\n container,\n anchor,\n namespace,\n n2.el,\n n2.anchor\n );\n };\n const patchStaticNode = (n1, n2, container, namespace) => {\n if (n2.children !== n1.children) {\n const anchor = hostNextSibling(n1.anchor);\n removeStaticNode(n1);\n [n2.el, n2.anchor] = hostInsertStaticContent(\n n2.children,\n container,\n anchor,\n namespace\n );\n } else {\n n2.el = n1.el;\n n2.anchor = n1.anchor;\n }\n };\n const moveStaticNode = ({ el, anchor }, container, nextSibling) => {\n let next;\n while (el && el !== anchor) {\n next = hostNextSibling(el);\n hostInsert(el, container, nextSibling);\n el = next;\n }\n hostInsert(anchor, container, nextSibling);\n };\n const removeStaticNode = ({ el, anchor }) => {\n let next;\n while (el && el !== anchor) {\n next = hostNextSibling(el);\n hostRemove(el);\n el = next;\n }\n hostRemove(anchor);\n };\n const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n if (n2.type === \"svg\") {\n namespace = \"svg\";\n } else if (n2.type === \"math\") {\n namespace = \"mathml\";\n }\n if (n1 == null) {\n mountElement(\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n const customElement = !!(n1.el && n1.el._isVueCE) ? n1.el : null;\n try {\n if (customElement) {\n customElement._beginPatch();\n }\n patchElement(\n n1,\n n2,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } finally {\n if (customElement) {\n customElement._endPatch();\n }\n }\n }\n };\n const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n let el;\n let vnodeHook;\n const { props, shapeFlag, transition, dirs } = vnode;\n el = vnode.el = hostCreateElement(\n vnode.type,\n namespace,\n props && props.is,\n props\n );\n if (shapeFlag & 8) {\n hostSetElementText(el, vnode.children);\n } else if (shapeFlag & 16) {\n mountChildren(\n vnode.children,\n el,\n null,\n parentComponent,\n parentSuspense,\n resolveChildrenNamespace(vnode, namespace),\n slotScopeIds,\n optimized\n );\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n }\n setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent);\n if (props) {\n for (const key in props) {\n if (key !== \"value\" && !isReservedProp(key)) {\n hostPatchProp(el, key, null, props[key], namespace, parentComponent);\n }\n }\n if (\"value\" in props) {\n hostPatchProp(el, \"value\", null, props.value, namespace);\n }\n if (vnodeHook = props.onVnodeBeforeMount) {\n invokeVNodeHook(vnodeHook, parentComponent, vnode);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n def(el, \"__vnode\", vnode, true);\n def(el, \"__vueParentComponent\", parentComponent, true);\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n }\n const needCallTransitionHooks = needTransition(parentSuspense, transition);\n if (needCallTransitionHooks) {\n transition.beforeEnter(el);\n }\n hostInsert(el, container, anchor);\n if ((vnodeHook = props && props.onVnodeMounted) || needCallTransitionHooks || dirs) {\n queuePostRenderEffect(() => {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n needCallTransitionHooks && transition.enter(el);\n dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n }, parentSuspense);\n }\n };\n const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => {\n if (scopeId) {\n hostSetScopeId(el, scopeId);\n }\n if (slotScopeIds) {\n for (let i = 0; i < slotScopeIds.length; i++) {\n hostSetScopeId(el, slotScopeIds[i]);\n }\n }\n if (parentComponent) {\n let subTree = parentComponent.subTree;\n if (!!(process.env.NODE_ENV !== \"production\") && subTree.patchFlag > 0 && subTree.patchFlag & 2048) {\n subTree = filterSingleRoot(subTree.children) || subTree;\n }\n if (vnode === subTree || isSuspense(subTree.type) && (subTree.ssContent === vnode || subTree.ssFallback === vnode)) {\n const parentVNode = parentComponent.vnode;\n setScopeId(\n el,\n parentVNode,\n parentVNode.scopeId,\n parentVNode.slotScopeIds,\n parentComponent.parent\n );\n }\n }\n };\n const mountChildren = (children, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, start = 0) => {\n for (let i = start; i < children.length; i++) {\n const child = children[i] = optimized ? cloneIfMounted(children[i]) : normalizeVNode(children[i]);\n patch(\n null,\n child,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n };\n const patchElement = (n1, n2, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n const el = n2.el = n1.el;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n el.__vnode = n2;\n }\n let { patchFlag, dynamicChildren, dirs } = n2;\n patchFlag |= n1.patchFlag & 16;\n const oldProps = n1.props || EMPTY_OBJ;\n const newProps = n2.props || EMPTY_OBJ;\n let vnodeHook;\n parentComponent && toggleRecurse(parentComponent, false);\n if (vnodeHook = newProps.onVnodeBeforeUpdate) {\n invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n }\n if (dirs) {\n invokeDirectiveHook(n2, n1, parentComponent, \"beforeUpdate\");\n }\n parentComponent && toggleRecurse(parentComponent, true);\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n patchFlag = 0;\n optimized = false;\n dynamicChildren = null;\n }\n if (oldProps.innerHTML && newProps.innerHTML == null || oldProps.textContent && newProps.textContent == null) {\n hostSetElementText(el, \"\");\n }\n if (dynamicChildren) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n el,\n parentComponent,\n parentSuspense,\n resolveChildrenNamespace(n2, namespace),\n slotScopeIds\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n traverseStaticChildren(n1, n2);\n }\n } else if (!optimized) {\n patchChildren(\n n1,\n n2,\n el,\n null,\n parentComponent,\n parentSuspense,\n resolveChildrenNamespace(n2, namespace),\n slotScopeIds,\n false\n );\n }\n if (patchFlag > 0) {\n if (patchFlag & 16) {\n patchProps(el, oldProps, newProps, parentComponent, namespace);\n } else {\n if (patchFlag & 2) {\n if (oldProps.class !== newProps.class) {\n hostPatchProp(el, \"class\", null, newProps.class, namespace);\n }\n }\n if (patchFlag & 4) {\n hostPatchProp(el, \"style\", oldProps.style, newProps.style, namespace);\n }\n if (patchFlag & 8) {\n const propsToUpdate = n2.dynamicProps;\n for (let i = 0; i < propsToUpdate.length; i++) {\n const key = propsToUpdate[i];\n const prev = oldProps[key];\n const next = newProps[key];\n if (next !== prev || key === \"value\") {\n hostPatchProp(el, key, prev, next, namespace, parentComponent);\n }\n }\n }\n }\n if (patchFlag & 1) {\n if (n1.children !== n2.children) {\n hostSetElementText(el, n2.children);\n }\n }\n } else if (!optimized && dynamicChildren == null) {\n patchProps(el, oldProps, newProps, parentComponent, namespace);\n }\n if ((vnodeHook = newProps.onVnodeUpdated) || dirs) {\n queuePostRenderEffect(() => {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n dirs && invokeDirectiveHook(n2, n1, parentComponent, \"updated\");\n }, parentSuspense);\n }\n };\n const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, namespace, slotScopeIds) => {\n for (let i = 0; i < newChildren.length; i++) {\n const oldVNode = oldChildren[i];\n const newVNode = newChildren[i];\n const container = (\n // oldVNode may be an errored async setup() component inside Suspense\n // which will not have a mounted element\n oldVNode.el && // - In the case of a Fragment, we need to provide the actual parent\n // of the Fragment itself so it can move its children.\n (oldVNode.type === Fragment || // - In the case of different nodes, there is going to be a replacement\n // which also requires the correct parent container\n !isSameVNodeType(oldVNode, newVNode) || // - In the case of a component, it could contain anything.\n oldVNode.shapeFlag & (6 | 64 | 128)) ? hostParentNode(oldVNode.el) : (\n // In other cases, the parent container is not actually used so we\n // just pass the block element here to avoid a DOM parentNode call.\n fallbackContainer\n )\n );\n patch(\n oldVNode,\n newVNode,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n true\n );\n }\n };\n const patchProps = (el, oldProps, newProps, parentComponent, namespace) => {\n if (oldProps !== newProps) {\n if (oldProps !== EMPTY_OBJ) {\n for (const key in oldProps) {\n if (!isReservedProp(key) && !(key in newProps)) {\n hostPatchProp(\n el,\n key,\n oldProps[key],\n null,\n namespace,\n parentComponent\n );\n }\n }\n }\n for (const key in newProps) {\n if (isReservedProp(key)) continue;\n const next = newProps[key];\n const prev = oldProps[key];\n if (next !== prev && key !== \"value\") {\n hostPatchProp(el, key, prev, next, namespace, parentComponent);\n }\n }\n if (\"value\" in newProps) {\n hostPatchProp(el, \"value\", oldProps.value, newProps.value, namespace);\n }\n }\n };\n const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n const fragmentStartAnchor = n2.el = n1 ? n1.el : hostCreateText(\"\");\n const fragmentEndAnchor = n2.anchor = n1 ? n1.anchor : hostCreateText(\"\");\n let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2;\n if (!!(process.env.NODE_ENV !== \"production\") && // #5523 dev root fragment may inherit directives\n (isHmrUpdating || patchFlag & 2048)) {\n patchFlag = 0;\n optimized = false;\n dynamicChildren = null;\n }\n if (fragmentSlotScopeIds) {\n slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n }\n if (n1 == null) {\n hostInsert(fragmentStartAnchor, container, anchor);\n hostInsert(fragmentEndAnchor, container, anchor);\n mountChildren(\n // #10007\n // such fragment like `<></>` will be compiled into\n // a fragment which doesn't have a children.\n // In this case fallback to an empty array\n n2.children || [],\n container,\n fragmentEndAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n if (patchFlag > 0 && patchFlag & 64 && dynamicChildren && // #2715 the previous fragment could've been a BAILed one as a result\n // of renderSlot() with no valid children\n n1.dynamicChildren && n1.dynamicChildren.length === dynamicChildren.length) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n container,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n traverseStaticChildren(n1, n2);\n } else if (\n // #2080 if the stable fragment has a key, it's a <template v-for> that may\n // get moved around. Make sure all root level vnodes inherit el.\n // #2134 or if it's a component root, it may also get moved around\n // as the component is being moved.\n n2.key != null || parentComponent && n2 === parentComponent.subTree\n ) {\n traverseStaticChildren(\n n1,\n n2,\n true\n /* shallow */\n );\n }\n } else {\n patchChildren(\n n1,\n n2,\n container,\n fragmentEndAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n }\n };\n const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n n2.slotScopeIds = slotScopeIds;\n if (n1 == null) {\n if (n2.shapeFlag & 512) {\n parentComponent.ctx.activate(\n n2,\n container,\n anchor,\n namespace,\n optimized\n );\n } else {\n mountComponent(\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n optimized\n );\n }\n } else {\n updateComponent(n1, n2, optimized);\n }\n };\n const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, namespace, optimized) => {\n const instance = (initialVNode.component = createComponentInstance(\n initialVNode,\n parentComponent,\n parentSuspense\n ));\n if (!!(process.env.NODE_ENV !== \"production\") && instance.type.__hmrId) {\n registerHMR(instance);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(initialVNode);\n startMeasure(instance, `mount`);\n }\n if (isKeepAlive(initialVNode)) {\n instance.ctx.renderer = internals;\n }\n {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `init`);\n }\n setupComponent(instance, false, optimized);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `init`);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) initialVNode.el = null;\n if (instance.asyncDep) {\n parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect, optimized);\n if (!initialVNode.el) {\n const placeholder = instance.subTree = createVNode(Comment);\n processCommentNode(null, placeholder, container, anchor);\n initialVNode.placeholder = placeholder.el;\n }\n } else {\n setupRenderEffect(\n instance,\n initialVNode,\n container,\n anchor,\n parentSuspense,\n namespace,\n optimized\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n endMeasure(instance, `mount`);\n }\n };\n const updateComponent = (n1, n2, optimized) => {\n const instance = n2.component = n1.component;\n if (shouldUpdateComponent(n1, n2, optimized)) {\n if (instance.asyncDep && !instance.asyncResolved) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(n2);\n }\n updateComponentPreRender(instance, n2, optimized);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n }\n return;\n } else {\n instance.next = n2;\n instance.update();\n }\n } else {\n n2.el = n1.el;\n instance.vnode = n2;\n }\n };\n const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, namespace, optimized) => {\n const componentUpdateFn = () => {\n if (!instance.isMounted) {\n let vnodeHook;\n const { el, props } = initialVNode;\n const { bm, m, parent, root, type } = instance;\n const isAsyncWrapperVNode = isAsyncWrapper(initialVNode);\n toggleRecurse(instance, false);\n if (bm) {\n invokeArrayFns(bm);\n }\n if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeBeforeMount)) {\n invokeVNodeHook(vnodeHook, parent, initialVNode);\n }\n toggleRecurse(instance, true);\n if (el && hydrateNode) {\n const hydrateSubTree = () => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `render`);\n }\n instance.subTree = renderComponentRoot(instance);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `render`);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `hydrate`);\n }\n hydrateNode(\n el,\n instance.subTree,\n instance,\n parentSuspense,\n null\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `hydrate`);\n }\n };\n if (isAsyncWrapperVNode && type.__asyncHydrate) {\n type.__asyncHydrate(\n el,\n instance,\n hydrateSubTree\n );\n } else {\n hydrateSubTree();\n }\n } else {\n if (root.ce && // @ts-expect-error _def is private\n root.ce._def.shadowRoot !== false) {\n root.ce._injectChildStyle(type);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `render`);\n }\n const subTree = instance.subTree = renderComponentRoot(instance);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `render`);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `patch`);\n }\n patch(\n null,\n subTree,\n container,\n anchor,\n instance,\n parentSuspense,\n namespace\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `patch`);\n }\n initialVNode.el = subTree.el;\n }\n if (m) {\n queuePostRenderEffect(m, parentSuspense);\n }\n if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeMounted)) {\n const scopedInitialVNode = initialVNode;\n queuePostRenderEffect(\n () => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode),\n parentSuspense\n );\n }\n if (initialVNode.shapeFlag & 256 || parent && isAsyncWrapper(parent.vnode) && parent.vnode.shapeFlag & 256) {\n instance.a && queuePostRenderEffect(instance.a, parentSuspense);\n }\n instance.isMounted = true;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance);\n }\n initialVNode = container = anchor = null;\n } else {\n let { next, bu, u, parent, vnode } = instance;\n {\n const nonHydratedAsyncRoot = locateNonHydratedAsyncRoot(instance);\n if (nonHydratedAsyncRoot) {\n if (next) {\n next.el = vnode.el;\n updateComponentPreRender(instance, next, optimized);\n }\n nonHydratedAsyncRoot.asyncDep.then(() => {\n if (!instance.isUnmounted) {\n componentUpdateFn();\n }\n });\n return;\n }\n }\n let originNext = next;\n let vnodeHook;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(next || instance.vnode);\n }\n toggleRecurse(instance, false);\n if (next) {\n next.el = vnode.el;\n updateComponentPreRender(instance, next, optimized);\n } else {\n next = vnode;\n }\n if (bu) {\n invokeArrayFns(bu);\n }\n if (vnodeHook = next.props && next.props.onVnodeBeforeUpdate) {\n invokeVNodeHook(vnodeHook, parent, next, vnode);\n }\n toggleRecurse(instance, true);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `render`);\n }\n const nextTree = renderComponentRoot(instance);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `render`);\n }\n const prevTree = instance.subTree;\n instance.subTree = nextTree;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `patch`);\n }\n patch(\n prevTree,\n nextTree,\n // parent may have changed if it's in a teleport\n hostParentNode(prevTree.el),\n // anchor may have changed if it's in a fragment\n getNextHostNode(prevTree),\n instance,\n parentSuspense,\n namespace\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `patch`);\n }\n next.el = nextTree.el;\n if (originNext === null) {\n updateHOCHostEl(instance, nextTree.el);\n }\n if (u) {\n queuePostRenderEffect(u, parentSuspense);\n }\n if (vnodeHook = next.props && next.props.onVnodeUpdated) {\n queuePostRenderEffect(\n () => invokeVNodeHook(vnodeHook, parent, next, vnode),\n parentSuspense\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(instance);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n }\n }\n };\n instance.scope.on();\n const effect = instance.effect = new ReactiveEffect(componentUpdateFn);\n instance.scope.off();\n const update = instance.update = effect.run.bind(effect);\n const job = instance.job = effect.runIfDirty.bind(effect);\n job.i = instance;\n job.id = instance.uid;\n effect.scheduler = () => queueJob(job);\n toggleRecurse(instance, true);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = instance.rtc ? (e) => invokeArrayFns(instance.rtc, e) : void 0;\n effect.onTrigger = instance.rtg ? (e) => invokeArrayFns(instance.rtg, e) : void 0;\n }\n update();\n };\n const updateComponentPreRender = (instance, nextVNode, optimized) => {\n nextVNode.component = instance;\n const prevProps = instance.vnode.props;\n instance.vnode = nextVNode;\n instance.next = null;\n updateProps(instance, nextVNode.props, prevProps, optimized);\n updateSlots(instance, nextVNode.children, optimized);\n pauseTracking();\n flushPreFlushCbs(instance);\n resetTracking();\n };\n const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized = false) => {\n const c1 = n1 && n1.children;\n const prevShapeFlag = n1 ? n1.shapeFlag : 0;\n const c2 = n2.children;\n const { patchFlag, shapeFlag } = n2;\n if (patchFlag > 0) {\n if (patchFlag & 128) {\n patchKeyedChildren(\n c1,\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n return;\n } else if (patchFlag & 256) {\n patchUnkeyedChildren(\n c1,\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n return;\n }\n }\n if (shapeFlag & 8) {\n if (prevShapeFlag & 16) {\n unmountChildren(c1, parentComponent, parentSuspense);\n }\n if (c2 !== c1) {\n hostSetElementText(container, c2);\n }\n } else {\n if (prevShapeFlag & 16) {\n if (shapeFlag & 16) {\n patchKeyedChildren(\n c1,\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n unmountChildren(c1, parentComponent, parentSuspense, true);\n }\n } else {\n if (prevShapeFlag & 8) {\n hostSetElementText(container, \"\");\n }\n if (shapeFlag & 16) {\n mountChildren(\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n }\n }\n };\n const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n c1 = c1 || EMPTY_ARR;\n c2 = c2 || EMPTY_ARR;\n const oldLength = c1.length;\n const newLength = c2.length;\n const commonLength = Math.min(oldLength, newLength);\n let i;\n for (i = 0; i < commonLength; i++) {\n const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n patch(\n c1[i],\n nextChild,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n if (oldLength > newLength) {\n unmountChildren(\n c1,\n parentComponent,\n parentSuspense,\n true,\n false,\n commonLength\n );\n } else {\n mountChildren(\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n commonLength\n );\n }\n };\n const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n let i = 0;\n const l2 = c2.length;\n let e1 = c1.length - 1;\n let e2 = l2 - 1;\n while (i <= e1 && i <= e2) {\n const n1 = c1[i];\n const n2 = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n if (isSameVNodeType(n1, n2)) {\n patch(\n n1,\n n2,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n break;\n }\n i++;\n }\n while (i <= e1 && i <= e2) {\n const n1 = c1[e1];\n const n2 = c2[e2] = optimized ? cloneIfMounted(c2[e2]) : normalizeVNode(c2[e2]);\n if (isSameVNodeType(n1, n2)) {\n patch(\n n1,\n n2,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n break;\n }\n e1--;\n e2--;\n }\n if (i > e1) {\n if (i <= e2) {\n const nextPos = e2 + 1;\n const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor;\n while (i <= e2) {\n patch(\n null,\n c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]),\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n i++;\n }\n }\n } else if (i > e2) {\n while (i <= e1) {\n unmount(c1[i], parentComponent, parentSuspense, true);\n i++;\n }\n } else {\n const s1 = i;\n const s2 = i;\n const keyToNewIndexMap = /* @__PURE__ */ new Map();\n for (i = s2; i <= e2; i++) {\n const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n if (nextChild.key != null) {\n if (!!(process.env.NODE_ENV !== \"production\") && keyToNewIndexMap.has(nextChild.key)) {\n warn$1(\n `Duplicate keys found during update:`,\n JSON.stringify(nextChild.key),\n `Make sure keys are unique.`\n );\n }\n keyToNewIndexMap.set(nextChild.key, i);\n }\n }\n let j;\n let patched = 0;\n const toBePatched = e2 - s2 + 1;\n let moved = false;\n let maxNewIndexSoFar = 0;\n const newIndexToOldIndexMap = new Array(toBePatched);\n for (i = 0; i < toBePatched; i++) newIndexToOldIndexMap[i] = 0;\n for (i = s1; i <= e1; i++) {\n const prevChild = c1[i];\n if (patched >= toBePatched) {\n unmount(prevChild, parentComponent, parentSuspense, true);\n continue;\n }\n let newIndex;\n if (prevChild.key != null) {\n newIndex = keyToNewIndexMap.get(prevChild.key);\n } else {\n for (j = s2; j <= e2; j++) {\n if (newIndexToOldIndexMap[j - s2] === 0 && isSameVNodeType(prevChild, c2[j])) {\n newIndex = j;\n break;\n }\n }\n }\n if (newIndex === void 0) {\n unmount(prevChild, parentComponent, parentSuspense, true);\n } else {\n newIndexToOldIndexMap[newIndex - s2] = i + 1;\n if (newIndex >= maxNewIndexSoFar) {\n maxNewIndexSoFar = newIndex;\n } else {\n moved = true;\n }\n patch(\n prevChild,\n c2[newIndex],\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n patched++;\n }\n }\n const increasingNewIndexSequence = moved ? getSequence(newIndexToOldIndexMap) : EMPTY_ARR;\n j = increasingNewIndexSequence.length - 1;\n for (i = toBePatched - 1; i >= 0; i--) {\n const nextIndex = s2 + i;\n const nextChild = c2[nextIndex];\n const anchorVNode = c2[nextIndex + 1];\n const anchor = nextIndex + 1 < l2 ? (\n // #13559, #14173 fallback to el placeholder for unresolved async component\n anchorVNode.el || resolveAsyncComponentPlaceholder(anchorVNode)\n ) : parentAnchor;\n if (newIndexToOldIndexMap[i] === 0) {\n patch(\n null,\n nextChild,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else if (moved) {\n if (j < 0 || i !== increasingNewIndexSequence[j]) {\n move(nextChild, container, anchor, 2);\n } else {\n j--;\n }\n }\n }\n }\n };\n const move = (vnode, container, anchor, moveType, parentSuspense = null) => {\n const { el, type, transition, children, shapeFlag } = vnode;\n if (shapeFlag & 6) {\n move(vnode.component.subTree, container, anchor, moveType);\n return;\n }\n if (shapeFlag & 128) {\n vnode.suspense.move(container, anchor, moveType);\n return;\n }\n if (shapeFlag & 64) {\n type.move(vnode, container, anchor, internals);\n return;\n }\n if (type === Fragment) {\n hostInsert(el, container, anchor);\n for (let i = 0; i < children.length; i++) {\n move(children[i], container, anchor, moveType);\n }\n hostInsert(vnode.anchor, container, anchor);\n return;\n }\n if (type === Static) {\n moveStaticNode(vnode, container, anchor);\n return;\n }\n const needTransition2 = moveType !== 2 && shapeFlag & 1 && transition;\n if (needTransition2) {\n if (moveType === 0) {\n transition.beforeEnter(el);\n hostInsert(el, container, anchor);\n queuePostRenderEffect(() => transition.enter(el), parentSuspense);\n } else {\n const { leave, delayLeave, afterLeave } = transition;\n const remove2 = () => {\n if (vnode.ctx.isUnmounted) {\n hostRemove(el);\n } else {\n hostInsert(el, container, anchor);\n }\n };\n const performLeave = () => {\n if (el._isLeaving) {\n el[leaveCbKey](\n true\n /* cancelled */\n );\n }\n leave(el, () => {\n remove2();\n afterLeave && afterLeave();\n });\n };\n if (delayLeave) {\n delayLeave(el, remove2, performLeave);\n } else {\n performLeave();\n }\n }\n } else {\n hostInsert(el, container, anchor);\n }\n };\n const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => {\n const {\n type,\n props,\n ref,\n children,\n dynamicChildren,\n shapeFlag,\n patchFlag,\n dirs,\n cacheIndex\n } = vnode;\n if (patchFlag === -2) {\n optimized = false;\n }\n if (ref != null) {\n pauseTracking();\n setRef(ref, null, parentSuspense, vnode, true);\n resetTracking();\n }\n if (cacheIndex != null) {\n parentComponent.renderCache[cacheIndex] = void 0;\n }\n if (shapeFlag & 256) {\n parentComponent.ctx.deactivate(vnode);\n return;\n }\n const shouldInvokeDirs = shapeFlag & 1 && dirs;\n const shouldInvokeVnodeHook = !isAsyncWrapper(vnode);\n let vnodeHook;\n if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeBeforeUnmount)) {\n invokeVNodeHook(vnodeHook, parentComponent, vnode);\n }\n if (shapeFlag & 6) {\n unmountComponent(vnode.component, parentSuspense, doRemove);\n } else {\n if (shapeFlag & 128) {\n vnode.suspense.unmount(parentSuspense, doRemove);\n return;\n }\n if (shouldInvokeDirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeUnmount\");\n }\n if (shapeFlag & 64) {\n vnode.type.remove(\n vnode,\n parentComponent,\n parentSuspense,\n internals,\n doRemove\n );\n } else if (dynamicChildren && // #5154\n // when v-once is used inside a block, setBlockTracking(-1) marks the\n // parent block with hasOnce: true\n // so that it doesn't take the fast path during unmount - otherwise\n // components nested in v-once are never unmounted.\n !dynamicChildren.hasOnce && // #1153: fast path should not be taken for non-stable (v-for) fragments\n (type !== Fragment || patchFlag > 0 && patchFlag & 64)) {\n unmountChildren(\n dynamicChildren,\n parentComponent,\n parentSuspense,\n false,\n true\n );\n } else if (type === Fragment && patchFlag & (128 | 256) || !optimized && shapeFlag & 16) {\n unmountChildren(children, parentComponent, parentSuspense);\n }\n if (doRemove) {\n remove(vnode);\n }\n }\n if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeUnmounted) || shouldInvokeDirs) {\n queuePostRenderEffect(() => {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n shouldInvokeDirs && invokeDirectiveHook(vnode, null, parentComponent, \"unmounted\");\n }, parentSuspense);\n }\n };\n const remove = (vnode) => {\n const { type, el, anchor, transition } = vnode;\n if (type === Fragment) {\n if (!!(process.env.NODE_ENV !== \"production\") && vnode.patchFlag > 0 && vnode.patchFlag & 2048 && transition && !transition.persisted) {\n vnode.children.forEach((child) => {\n if (child.type === Comment) {\n hostRemove(child.el);\n } else {\n remove(child);\n }\n });\n } else {\n removeFragment(el, anchor);\n }\n return;\n }\n if (type === Static) {\n removeStaticNode(vnode);\n return;\n }\n const performRemove = () => {\n hostRemove(el);\n if (transition && !transition.persisted && transition.afterLeave) {\n transition.afterLeave();\n }\n };\n if (vnode.shapeFlag & 1 && transition && !transition.persisted) {\n const { leave, delayLeave } = transition;\n const performLeave = () => leave(el, performRemove);\n if (delayLeave) {\n delayLeave(vnode.el, performRemove, performLeave);\n } else {\n performLeave();\n }\n } else {\n performRemove();\n }\n };\n const removeFragment = (cur, end) => {\n let next;\n while (cur !== end) {\n next = hostNextSibling(cur);\n hostRemove(cur);\n cur = next;\n }\n hostRemove(end);\n };\n const unmountComponent = (instance, parentSuspense, doRemove) => {\n if (!!(process.env.NODE_ENV !== \"production\") && instance.type.__hmrId) {\n unregisterHMR(instance);\n }\n const { bum, scope, job, subTree, um, m, a } = instance;\n invalidateMount(m);\n invalidateMount(a);\n if (bum) {\n invokeArrayFns(bum);\n }\n scope.stop();\n if (job) {\n job.flags |= 8;\n unmount(subTree, instance, parentSuspense, doRemove);\n }\n if (um) {\n queuePostRenderEffect(um, parentSuspense);\n }\n queuePostRenderEffect(() => {\n instance.isUnmounted = true;\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentRemoved(instance);\n }\n };\n const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start = 0) => {\n for (let i = start; i < children.length; i++) {\n unmount(children[i], parentComponent, parentSuspense, doRemove, optimized);\n }\n };\n const getNextHostNode = (vnode) => {\n if (vnode.shapeFlag & 6) {\n return getNextHostNode(vnode.component.subTree);\n }\n if (vnode.shapeFlag & 128) {\n return vnode.suspense.next();\n }\n const el = hostNextSibling(vnode.anchor || vnode.el);\n const teleportEnd = el && el[TeleportEndKey];\n return teleportEnd ? hostNextSibling(teleportEnd) : el;\n };\n let isFlushing = false;\n const render = (vnode, container, namespace) => {\n let instance;\n if (vnode == null) {\n if (container._vnode) {\n unmount(container._vnode, null, null, true);\n instance = container._vnode.component;\n }\n } else {\n patch(\n container._vnode || null,\n vnode,\n container,\n null,\n null,\n null,\n namespace\n );\n }\n container._vnode = vnode;\n if (!isFlushing) {\n isFlushing = true;\n flushPreFlushCbs(instance);\n flushPostFlushCbs();\n isFlushing = false;\n }\n };\n const internals = {\n p: patch,\n um: unmount,\n m: move,\n r: remove,\n mt: mountComponent,\n mc: mountChildren,\n pc: patchChildren,\n pbc: patchBlockChildren,\n n: getNextHostNode,\n o: options\n };\n let hydrate;\n let hydrateNode;\n if (createHydrationFns) {\n [hydrate, hydrateNode] = createHydrationFns(\n internals\n );\n }\n return {\n render,\n hydrate,\n createApp: createAppAPI(render, hydrate)\n };\n}\nfunction resolveChildrenNamespace({ type, props }, currentNamespace) {\n return currentNamespace === \"svg\" && type === \"foreignObject\" || currentNamespace === \"mathml\" && type === \"annotation-xml\" && props && props.encoding && props.encoding.includes(\"html\") ? void 0 : currentNamespace;\n}\nfunction toggleRecurse({ effect, job }, allowed) {\n if (allowed) {\n effect.flags |= 32;\n job.flags |= 4;\n } else {\n effect.flags &= -33;\n job.flags &= -5;\n }\n}\nfunction needTransition(parentSuspense, transition) {\n return (!parentSuspense || parentSuspense && !parentSuspense.pendingBranch) && transition && !transition.persisted;\n}\nfunction traverseStaticChildren(n1, n2, shallow = false) {\n const ch1 = n1.children;\n const ch2 = n2.children;\n if (isArray(ch1) && isArray(ch2)) {\n for (let i = 0; i < ch1.length; i++) {\n const c1 = ch1[i];\n let c2 = ch2[i];\n if (c2.shapeFlag & 1 && !c2.dynamicChildren) {\n if (c2.patchFlag <= 0 || c2.patchFlag === 32) {\n c2 = ch2[i] = cloneIfMounted(ch2[i]);\n c2.el = c1.el;\n }\n if (!shallow && c2.patchFlag !== -2)\n traverseStaticChildren(c1, c2);\n }\n if (c2.type === Text) {\n if (c2.patchFlag !== -1) {\n c2.el = c1.el;\n } else {\n c2.__elIndex = i + // take fragment start anchor into account\n (n1.type === Fragment ? 1 : 0);\n }\n }\n if (c2.type === Comment && !c2.el) {\n c2.el = c1.el;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n c2.el && (c2.el.__vnode = c2);\n }\n }\n }\n}\nfunction getSequence(arr) {\n const p = arr.slice();\n const result = [0];\n let i, j, u, v, c;\n const len = arr.length;\n for (i = 0; i < len; i++) {\n const arrI = arr[i];\n if (arrI !== 0) {\n j = result[result.length - 1];\n if (arr[j] < arrI) {\n p[i] = j;\n result.push(i);\n continue;\n }\n u = 0;\n v = result.length - 1;\n while (u < v) {\n c = u + v >> 1;\n if (arr[result[c]] < arrI) {\n u = c + 1;\n } else {\n v = c;\n }\n }\n if (arrI < arr[result[u]]) {\n if (u > 0) {\n p[i] = result[u - 1];\n }\n result[u] = i;\n }\n }\n }\n u = result.length;\n v = result[u - 1];\n while (u-- > 0) {\n result[u] = v;\n v = p[v];\n }\n return result;\n}\nfunction locateNonHydratedAsyncRoot(instance) {\n const subComponent = instance.subTree.component;\n if (subComponent) {\n if (subComponent.asyncDep && !subComponent.asyncResolved) {\n return subComponent;\n } else {\n return locateNonHydratedAsyncRoot(subComponent);\n }\n }\n}\nfunction invalidateMount(hooks) {\n if (hooks) {\n for (let i = 0; i < hooks.length; i++)\n hooks[i].flags |= 8;\n }\n}\nfunction resolveAsyncComponentPlaceholder(anchorVnode) {\n if (anchorVnode.placeholder) {\n return anchorVnode.placeholder;\n }\n const instance = anchorVnode.component;\n if (instance) {\n return resolveAsyncComponentPlaceholder(instance.subTree);\n }\n return null;\n}\n\nconst isSuspense = (type) => type.__isSuspense;\nlet suspenseId = 0;\nconst SuspenseImpl = {\n name: \"Suspense\",\n // In order to make Suspense tree-shakable, we need to avoid importing it\n // directly in the renderer. The renderer checks for the __isSuspense flag\n // on a vnode's type and calls the `process` method, passing in renderer\n // internals.\n __isSuspense: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) {\n if (n1 == null) {\n mountSuspense(\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n } else {\n if (parentSuspense && parentSuspense.deps > 0 && !n1.suspense.isInFallback) {\n n2.suspense = n1.suspense;\n n2.suspense.vnode = n2;\n n2.el = n1.el;\n return;\n }\n patchSuspense(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n }\n },\n hydrate: hydrateSuspense,\n normalize: normalizeSuspenseChildren\n};\nconst Suspense = SuspenseImpl ;\nfunction triggerEvent(vnode, name) {\n const eventListener = vnode.props && vnode.props[name];\n if (isFunction(eventListener)) {\n eventListener();\n }\n}\nfunction mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) {\n const {\n p: patch,\n o: { createElement }\n } = rendererInternals;\n const hiddenContainer = createElement(\"div\");\n const suspense = vnode.suspense = createSuspenseBoundary(\n vnode,\n parentSuspense,\n parentComponent,\n container,\n hiddenContainer,\n anchor,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n patch(\n null,\n suspense.pendingBranch = vnode.ssContent,\n hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds\n );\n if (suspense.deps > 0) {\n triggerEvent(vnode, \"onPending\");\n triggerEvent(vnode, \"onFallback\");\n patch(\n null,\n vnode.ssFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds\n );\n setActiveBranch(suspense, vnode.ssFallback);\n } else {\n suspense.resolve(false, true);\n }\n}\nfunction patchSuspense(n1, n2, container, anchor, parentComponent, namespace, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) {\n const suspense = n2.suspense = n1.suspense;\n suspense.vnode = n2;\n n2.el = n1.el;\n const newBranch = n2.ssContent;\n const newFallback = n2.ssFallback;\n const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense;\n if (pendingBranch) {\n suspense.pendingBranch = newBranch;\n if (isSameVNodeType(pendingBranch, newBranch)) {\n patch(\n pendingBranch,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else if (isInFallback) {\n if (!isHydrating) {\n patch(\n activeBranch,\n newFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newFallback);\n }\n }\n } else {\n suspense.pendingId = suspenseId++;\n if (isHydrating) {\n suspense.isHydrating = false;\n suspense.activeBranch = pendingBranch;\n } else {\n unmount(pendingBranch, parentComponent, suspense);\n }\n suspense.deps = 0;\n suspense.effects.length = 0;\n suspense.hiddenContainer = createElement(\"div\");\n if (isInFallback) {\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else {\n patch(\n activeBranch,\n newFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newFallback);\n }\n } else if (activeBranch && isSameVNodeType(activeBranch, newBranch)) {\n patch(\n activeBranch,\n newBranch,\n container,\n anchor,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n suspense.resolve(true);\n } else {\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n }\n }\n }\n } else {\n if (activeBranch && isSameVNodeType(activeBranch, newBranch)) {\n patch(\n activeBranch,\n newBranch,\n container,\n anchor,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newBranch);\n } else {\n triggerEvent(n2, \"onPending\");\n suspense.pendingBranch = newBranch;\n if (newBranch.shapeFlag & 512) {\n suspense.pendingId = newBranch.component.suspenseId;\n } else {\n suspense.pendingId = suspenseId++;\n }\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else {\n const { timeout, pendingId } = suspense;\n if (timeout > 0) {\n setTimeout(() => {\n if (suspense.pendingId === pendingId) {\n suspense.fallback(newFallback);\n }\n }, timeout);\n } else if (timeout === 0) {\n suspense.fallback(newFallback);\n }\n }\n }\n }\n}\nlet hasWarned = false;\nfunction createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, namespace, slotScopeIds, optimized, rendererInternals, isHydrating = false) {\n if (!!(process.env.NODE_ENV !== \"production\") && true && !hasWarned) {\n hasWarned = true;\n console[console.info ? \"info\" : \"log\"](\n `<Suspense> is an experimental feature and its API will likely change.`\n );\n }\n const {\n p: patch,\n m: move,\n um: unmount,\n n: next,\n o: { parentNode, remove }\n } = rendererInternals;\n let parentSuspenseId;\n const isSuspensible = isVNodeSuspensible(vnode);\n if (isSuspensible) {\n if (parentSuspense && parentSuspense.pendingBranch) {\n parentSuspenseId = parentSuspense.pendingId;\n parentSuspense.deps++;\n }\n }\n const timeout = vnode.props ? toNumber(vnode.props.timeout) : void 0;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n assertNumber(timeout, `Suspense timeout`);\n }\n const initialAnchor = anchor;\n const suspense = {\n vnode,\n parent: parentSuspense,\n parentComponent,\n namespace,\n container,\n hiddenContainer,\n deps: 0,\n pendingId: suspenseId++,\n timeout: typeof timeout === \"number\" ? timeout : -1,\n activeBranch: null,\n pendingBranch: null,\n isInFallback: !isHydrating,\n isHydrating,\n isUnmounted: false,\n effects: [],\n resolve(resume = false, sync = false) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!resume && !suspense.pendingBranch) {\n throw new Error(\n `suspense.resolve() is called without a pending branch.`\n );\n }\n if (suspense.isUnmounted) {\n throw new Error(\n `suspense.resolve() is called on an already unmounted suspense boundary.`\n );\n }\n }\n const {\n vnode: vnode2,\n activeBranch,\n pendingBranch,\n pendingId,\n effects,\n parentComponent: parentComponent2,\n container: container2,\n isInFallback\n } = suspense;\n let delayEnter = false;\n if (suspense.isHydrating) {\n suspense.isHydrating = false;\n } else if (!resume) {\n delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === \"out-in\";\n if (delayEnter) {\n activeBranch.transition.afterLeave = () => {\n if (pendingId === suspense.pendingId) {\n move(\n pendingBranch,\n container2,\n anchor === initialAnchor ? next(activeBranch) : anchor,\n 0\n );\n queuePostFlushCb(effects);\n if (isInFallback && vnode2.ssFallback) {\n vnode2.ssFallback.el = null;\n }\n }\n };\n }\n if (activeBranch) {\n if (parentNode(activeBranch.el) === container2) {\n anchor = next(activeBranch);\n }\n unmount(activeBranch, parentComponent2, suspense, true);\n if (!delayEnter && isInFallback && vnode2.ssFallback) {\n queuePostRenderEffect(() => vnode2.ssFallback.el = null, suspense);\n }\n }\n if (!delayEnter) {\n move(pendingBranch, container2, anchor, 0);\n }\n }\n setActiveBranch(suspense, pendingBranch);\n suspense.pendingBranch = null;\n suspense.isInFallback = false;\n let parent = suspense.parent;\n let hasUnresolvedAncestor = false;\n while (parent) {\n if (parent.pendingBranch) {\n parent.effects.push(...effects);\n hasUnresolvedAncestor = true;\n break;\n }\n parent = parent.parent;\n }\n if (!hasUnresolvedAncestor && !delayEnter) {\n queuePostFlushCb(effects);\n }\n suspense.effects = [];\n if (isSuspensible) {\n if (parentSuspense && parentSuspense.pendingBranch && parentSuspenseId === parentSuspense.pendingId) {\n parentSuspense.deps--;\n if (parentSuspense.deps === 0 && !sync) {\n parentSuspense.resolve();\n }\n }\n }\n triggerEvent(vnode2, \"onResolve\");\n },\n fallback(fallbackVNode) {\n if (!suspense.pendingBranch) {\n return;\n }\n const { vnode: vnode2, activeBranch, parentComponent: parentComponent2, container: container2, namespace: namespace2 } = suspense;\n triggerEvent(vnode2, \"onFallback\");\n const anchor2 = next(activeBranch);\n const mountFallback = () => {\n if (!suspense.isInFallback) {\n return;\n }\n patch(\n null,\n fallbackVNode,\n container2,\n anchor2,\n parentComponent2,\n null,\n // fallback tree will not have suspense context\n namespace2,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, fallbackVNode);\n };\n const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === \"out-in\";\n if (delayEnter) {\n activeBranch.transition.afterLeave = mountFallback;\n }\n suspense.isInFallback = true;\n unmount(\n activeBranch,\n parentComponent2,\n null,\n // no suspense so unmount hooks fire now\n true\n // shouldRemove\n );\n if (!delayEnter) {\n mountFallback();\n }\n },\n move(container2, anchor2, type) {\n suspense.activeBranch && move(suspense.activeBranch, container2, anchor2, type);\n suspense.container = container2;\n },\n next() {\n return suspense.activeBranch && next(suspense.activeBranch);\n },\n registerDep(instance, setupRenderEffect, optimized2) {\n const isInPendingSuspense = !!suspense.pendingBranch;\n if (isInPendingSuspense) {\n suspense.deps++;\n }\n const hydratedEl = instance.vnode.el;\n instance.asyncDep.catch((err) => {\n handleError(err, instance, 0);\n }).then((asyncSetupResult) => {\n if (instance.isUnmounted || suspense.isUnmounted || suspense.pendingId !== instance.suspenseId) {\n return;\n }\n instance.asyncResolved = true;\n const { vnode: vnode2 } = instance;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(vnode2);\n }\n handleSetupResult(instance, asyncSetupResult, false);\n if (hydratedEl) {\n vnode2.el = hydratedEl;\n }\n const placeholder = !hydratedEl && instance.subTree.el;\n setupRenderEffect(\n instance,\n vnode2,\n // component may have been moved before resolve.\n // if this is not a hydration, instance.subTree will be the comment\n // placeholder.\n parentNode(hydratedEl || instance.subTree.el),\n // anchor will not be used if this is hydration, so only need to\n // consider the comment placeholder case.\n hydratedEl ? null : next(instance.subTree),\n suspense,\n namespace,\n optimized2\n );\n if (placeholder) {\n vnode2.placeholder = null;\n remove(placeholder);\n }\n updateHOCHostEl(instance, vnode2.el);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n }\n if (isInPendingSuspense && --suspense.deps === 0) {\n suspense.resolve();\n }\n });\n },\n unmount(parentSuspense2, doRemove) {\n suspense.isUnmounted = true;\n if (suspense.activeBranch) {\n unmount(\n suspense.activeBranch,\n parentComponent,\n parentSuspense2,\n doRemove\n );\n }\n if (suspense.pendingBranch) {\n unmount(\n suspense.pendingBranch,\n parentComponent,\n parentSuspense2,\n doRemove\n );\n }\n }\n };\n return suspense;\n}\nfunction hydrateSuspense(node, vnode, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals, hydrateNode) {\n const suspense = vnode.suspense = createSuspenseBoundary(\n vnode,\n parentSuspense,\n parentComponent,\n node.parentNode,\n // eslint-disable-next-line no-restricted-globals\n document.createElement(\"div\"),\n null,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals,\n true\n );\n const result = hydrateNode(\n node,\n suspense.pendingBranch = vnode.ssContent,\n parentComponent,\n suspense,\n slotScopeIds,\n optimized\n );\n if (suspense.deps === 0) {\n suspense.resolve(false, true);\n }\n return result;\n}\nfunction normalizeSuspenseChildren(vnode) {\n const { shapeFlag, children } = vnode;\n const isSlotChildren = shapeFlag & 32;\n vnode.ssContent = normalizeSuspenseSlot(\n isSlotChildren ? children.default : children\n );\n vnode.ssFallback = isSlotChildren ? normalizeSuspenseSlot(children.fallback) : createVNode(Comment);\n}\nfunction normalizeSuspenseSlot(s) {\n let block;\n if (isFunction(s)) {\n const trackBlock = isBlockTreeEnabled && s._c;\n if (trackBlock) {\n s._d = false;\n openBlock();\n }\n s = s();\n if (trackBlock) {\n s._d = true;\n block = currentBlock;\n closeBlock();\n }\n }\n if (isArray(s)) {\n const singleChild = filterSingleRoot(s);\n if (!!(process.env.NODE_ENV !== \"production\") && !singleChild && s.filter((child) => child !== NULL_DYNAMIC_COMPONENT).length > 0) {\n warn$1(`<Suspense> slots expect a single root node.`);\n }\n s = singleChild;\n }\n s = normalizeVNode(s);\n if (block && !s.dynamicChildren) {\n s.dynamicChildren = block.filter((c) => c !== s);\n }\n return s;\n}\nfunction queueEffectWithSuspense(fn, suspense) {\n if (suspense && suspense.pendingBranch) {\n if (isArray(fn)) {\n suspense.effects.push(...fn);\n } else {\n suspense.effects.push(fn);\n }\n } else {\n queuePostFlushCb(fn);\n }\n}\nfunction setActiveBranch(suspense, branch) {\n suspense.activeBranch = branch;\n const { vnode, parentComponent } = suspense;\n let el = branch.el;\n while (!el && branch.component) {\n branch = branch.component.subTree;\n el = branch.el;\n }\n vnode.el = el;\n if (parentComponent && parentComponent.subTree === vnode) {\n parentComponent.vnode.el = el;\n updateHOCHostEl(parentComponent, el);\n }\n}\nfunction isVNodeSuspensible(vnode) {\n const suspensible = vnode.props && vnode.props.suspensible;\n return suspensible != null && suspensible !== false;\n}\n\nconst Fragment = /* @__PURE__ */ Symbol.for(\"v-fgt\");\nconst Text = /* @__PURE__ */ Symbol.for(\"v-txt\");\nconst Comment = /* @__PURE__ */ Symbol.for(\"v-cmt\");\nconst Static = /* @__PURE__ */ Symbol.for(\"v-stc\");\nconst blockStack = [];\nlet currentBlock = null;\nfunction openBlock(disableTracking = false) {\n blockStack.push(currentBlock = disableTracking ? null : []);\n}\nfunction closeBlock() {\n blockStack.pop();\n currentBlock = blockStack[blockStack.length - 1] || null;\n}\nlet isBlockTreeEnabled = 1;\nfunction setBlockTracking(value, inVOnce = false) {\n isBlockTreeEnabled += value;\n if (value < 0 && currentBlock && inVOnce) {\n currentBlock.hasOnce = true;\n }\n}\nfunction setupBlock(vnode) {\n vnode.dynamicChildren = isBlockTreeEnabled > 0 ? currentBlock || EMPTY_ARR : null;\n closeBlock();\n if (isBlockTreeEnabled > 0 && currentBlock) {\n currentBlock.push(vnode);\n }\n return vnode;\n}\nfunction createElementBlock(type, props, children, patchFlag, dynamicProps, shapeFlag) {\n return setupBlock(\n createBaseVNode(\n type,\n props,\n children,\n patchFlag,\n dynamicProps,\n shapeFlag,\n true\n )\n );\n}\nfunction createBlock(type, props, children, patchFlag, dynamicProps) {\n return setupBlock(\n createVNode(\n type,\n props,\n children,\n patchFlag,\n dynamicProps,\n true\n )\n );\n}\nfunction isVNode(value) {\n return value ? value.__v_isVNode === true : false;\n}\nfunction isSameVNodeType(n1, n2) {\n if (!!(process.env.NODE_ENV !== \"production\") && n2.shapeFlag & 6 && n1.component) {\n const dirtyInstances = hmrDirtyComponents.get(n2.type);\n if (dirtyInstances && dirtyInstances.has(n1.component)) {\n n1.shapeFlag &= -257;\n n2.shapeFlag &= -513;\n return false;\n }\n }\n return n1.type === n2.type && n1.key === n2.key;\n}\nlet vnodeArgsTransformer;\nfunction transformVNodeArgs(transformer) {\n vnodeArgsTransformer = transformer;\n}\nconst createVNodeWithArgsTransform = (...args) => {\n return _createVNode(\n ...vnodeArgsTransformer ? vnodeArgsTransformer(args, currentRenderingInstance) : args\n );\n};\nconst normalizeKey = ({ key }) => key != null ? key : null;\nconst normalizeRef = ({\n ref,\n ref_key,\n ref_for\n}) => {\n if (typeof ref === \"number\") {\n ref = \"\" + ref;\n }\n return ref != null ? isString(ref) || isRef(ref) || isFunction(ref) ? { i: currentRenderingInstance, r: ref, k: ref_key, f: !!ref_for } : ref : null;\n};\nfunction createBaseVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, shapeFlag = type === Fragment ? 0 : 1, isBlockNode = false, needFullChildrenNormalization = false) {\n const vnode = {\n __v_isVNode: true,\n __v_skip: true,\n type,\n props,\n key: props && normalizeKey(props),\n ref: props && normalizeRef(props),\n scopeId: currentScopeId,\n slotScopeIds: null,\n children,\n component: null,\n suspense: null,\n ssContent: null,\n ssFallback: null,\n dirs: null,\n transition: null,\n el: null,\n anchor: null,\n target: null,\n targetStart: null,\n targetAnchor: null,\n staticCount: 0,\n shapeFlag,\n patchFlag,\n dynamicProps,\n dynamicChildren: null,\n appContext: null,\n ctx: currentRenderingInstance\n };\n if (needFullChildrenNormalization) {\n normalizeChildren(vnode, children);\n if (shapeFlag & 128) {\n type.normalize(vnode);\n }\n } else if (children) {\n vnode.shapeFlag |= isString(children) ? 8 : 16;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && vnode.key !== vnode.key) {\n warn$1(`VNode created with invalid key (NaN). VNode type:`, vnode.type);\n }\n if (isBlockTreeEnabled > 0 && // avoid a block node from tracking itself\n !isBlockNode && // has current parent block\n currentBlock && // presence of a patch flag indicates this node needs patching on updates.\n // component nodes also should always be patched, because even if the\n // component doesn't need to update, it needs to persist the instance on to\n // the next vnode so that it can be properly unmounted later.\n (vnode.patchFlag > 0 || shapeFlag & 6) && // the EVENTS flag is only for hydration and if it is the only flag, the\n // vnode should not be considered dynamic due to handler caching.\n vnode.patchFlag !== 32) {\n currentBlock.push(vnode);\n }\n return vnode;\n}\nconst createVNode = !!(process.env.NODE_ENV !== \"production\") ? createVNodeWithArgsTransform : _createVNode;\nfunction _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) {\n if (!type || type === NULL_DYNAMIC_COMPONENT) {\n if (!!(process.env.NODE_ENV !== \"production\") && !type) {\n warn$1(`Invalid vnode type when creating vnode: ${type}.`);\n }\n type = Comment;\n }\n if (isVNode(type)) {\n const cloned = cloneVNode(\n type,\n props,\n true\n /* mergeRef: true */\n );\n if (children) {\n normalizeChildren(cloned, children);\n }\n if (isBlockTreeEnabled > 0 && !isBlockNode && currentBlock) {\n if (cloned.shapeFlag & 6) {\n currentBlock[currentBlock.indexOf(type)] = cloned;\n } else {\n currentBlock.push(cloned);\n }\n }\n cloned.patchFlag = -2;\n return cloned;\n }\n if (isClassComponent(type)) {\n type = type.__vccOpts;\n }\n if (props) {\n props = guardReactiveProps(props);\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (isObject(style)) {\n if (isProxy(style) && !isArray(style)) {\n style = extend({}, style);\n }\n props.style = normalizeStyle(style);\n }\n }\n const shapeFlag = isString(type) ? 1 : isSuspense(type) ? 128 : isTeleport(type) ? 64 : isObject(type) ? 4 : isFunction(type) ? 2 : 0;\n if (!!(process.env.NODE_ENV !== \"production\") && shapeFlag & 4 && isProxy(type)) {\n type = toRaw(type);\n warn$1(\n `Vue received a Component that was made a reactive object. This can lead to unnecessary performance overhead and should be avoided by marking the component with \\`markRaw\\` or using \\`shallowRef\\` instead of \\`ref\\`.`,\n `\nComponent that was made reactive: `,\n type\n );\n }\n return createBaseVNode(\n type,\n props,\n children,\n patchFlag,\n dynamicProps,\n shapeFlag,\n isBlockNode,\n true\n );\n}\nfunction guardReactiveProps(props) {\n if (!props) return null;\n return isProxy(props) || isInternalObject(props) ? extend({}, props) : props;\n}\nfunction cloneVNode(vnode, extraProps, mergeRef = false, cloneTransition = false) {\n const { props, ref, patchFlag, children, transition } = vnode;\n const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props;\n const cloned = {\n __v_isVNode: true,\n __v_skip: true,\n type: vnode.type,\n props: mergedProps,\n key: mergedProps && normalizeKey(mergedProps),\n ref: extraProps && extraProps.ref ? (\n // #2078 in the case of <component :is=\"vnode\" ref=\"extra\"/>\n // if the vnode itself already has a ref, cloneVNode will need to merge\n // the refs so the single vnode can be set on multiple refs\n mergeRef && ref ? isArray(ref) ? ref.concat(normalizeRef(extraProps)) : [ref, normalizeRef(extraProps)] : normalizeRef(extraProps)\n ) : ref,\n scopeId: vnode.scopeId,\n slotScopeIds: vnode.slotScopeIds,\n children: !!(process.env.NODE_ENV !== \"production\") && patchFlag === -1 && isArray(children) ? children.map(deepCloneVNode) : children,\n target: vnode.target,\n targetStart: vnode.targetStart,\n targetAnchor: vnode.targetAnchor,\n staticCount: vnode.staticCount,\n shapeFlag: vnode.shapeFlag,\n // if the vnode is cloned with extra props, we can no longer assume its\n // existing patch flag to be reliable and need to add the FULL_PROPS flag.\n // note: preserve flag for fragments since they use the flag for children\n // fast paths only.\n patchFlag: extraProps && vnode.type !== Fragment ? patchFlag === -1 ? 16 : patchFlag | 16 : patchFlag,\n dynamicProps: vnode.dynamicProps,\n dynamicChildren: vnode.dynamicChildren,\n appContext: vnode.appContext,\n dirs: vnode.dirs,\n transition,\n // These should technically only be non-null on mounted VNodes. However,\n // they *should* be copied for kept-alive vnodes. So we just always copy\n // them since them being non-null during a mount doesn't affect the logic as\n // they will simply be overwritten.\n component: vnode.component,\n suspense: vnode.suspense,\n ssContent: vnode.ssContent && cloneVNode(vnode.ssContent),\n ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback),\n placeholder: vnode.placeholder,\n el: vnode.el,\n anchor: vnode.anchor,\n ctx: vnode.ctx,\n ce: vnode.ce\n };\n if (transition && cloneTransition) {\n setTransitionHooks(\n cloned,\n transition.clone(cloned)\n );\n }\n return cloned;\n}\nfunction deepCloneVNode(vnode) {\n const cloned = cloneVNode(vnode);\n if (isArray(vnode.children)) {\n cloned.children = vnode.children.map(deepCloneVNode);\n }\n return cloned;\n}\nfunction createTextVNode(text = \" \", flag = 0) {\n return createVNode(Text, null, text, flag);\n}\nfunction createStaticVNode(content, numberOfNodes) {\n const vnode = createVNode(Static, null, content);\n vnode.staticCount = numberOfNodes;\n return vnode;\n}\nfunction createCommentVNode(text = \"\", asBlock = false) {\n return asBlock ? (openBlock(), createBlock(Comment, null, text)) : createVNode(Comment, null, text);\n}\nfunction normalizeVNode(child) {\n if (child == null || typeof child === \"boolean\") {\n return createVNode(Comment);\n } else if (isArray(child)) {\n return createVNode(\n Fragment,\n null,\n // #3666, avoid reference pollution when reusing vnode\n child.slice()\n );\n } else if (isVNode(child)) {\n return cloneIfMounted(child);\n } else {\n return createVNode(Text, null, String(child));\n }\n}\nfunction cloneIfMounted(child) {\n return child.el === null && child.patchFlag !== -1 || child.memo ? child : cloneVNode(child);\n}\nfunction normalizeChildren(vnode, children) {\n let type = 0;\n const { shapeFlag } = vnode;\n if (children == null) {\n children = null;\n } else if (isArray(children)) {\n type = 16;\n } else if (typeof children === \"object\") {\n if (shapeFlag & (1 | 64)) {\n const slot = children.default;\n if (slot) {\n slot._c && (slot._d = false);\n normalizeChildren(vnode, slot());\n slot._c && (slot._d = true);\n }\n return;\n } else {\n type = 32;\n const slotFlag = children._;\n if (!slotFlag && !isInternalObject(children)) {\n children._ctx = currentRenderingInstance;\n } else if (slotFlag === 3 && currentRenderingInstance) {\n if (currentRenderingInstance.slots._ === 1) {\n children._ = 1;\n } else {\n children._ = 2;\n vnode.patchFlag |= 1024;\n }\n }\n }\n } else if (isFunction(children)) {\n children = { default: children, _ctx: currentRenderingInstance };\n type = 32;\n } else {\n children = String(children);\n if (shapeFlag & 64) {\n type = 16;\n children = [createTextVNode(children)];\n } else {\n type = 8;\n }\n }\n vnode.children = children;\n vnode.shapeFlag |= type;\n}\nfunction mergeProps(...args) {\n const ret = {};\n for (let i = 0; i < args.length; i++) {\n const toMerge = args[i];\n for (const key in toMerge) {\n if (key === \"class\") {\n if (ret.class !== toMerge.class) {\n ret.class = normalizeClass([ret.class, toMerge.class]);\n }\n } else if (key === \"style\") {\n ret.style = normalizeStyle([ret.style, toMerge.style]);\n } else if (isOn(key)) {\n const existing = ret[key];\n const incoming = toMerge[key];\n if (incoming && existing !== incoming && !(isArray(existing) && existing.includes(incoming))) {\n ret[key] = existing ? [].concat(existing, incoming) : incoming;\n }\n } else if (key !== \"\") {\n ret[key] = toMerge[key];\n }\n }\n }\n return ret;\n}\nfunction invokeVNodeHook(hook, instance, vnode, prevVNode = null) {\n callWithAsyncErrorHandling(hook, instance, 7, [\n vnode,\n prevVNode\n ]);\n}\n\nconst emptyAppContext = createAppContext();\nlet uid = 0;\nfunction createComponentInstance(vnode, parent, suspense) {\n const type = vnode.type;\n const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;\n const instance = {\n uid: uid++,\n vnode,\n type,\n parent,\n appContext,\n root: null,\n // to be immediately set\n next: null,\n subTree: null,\n // will be set synchronously right after creation\n effect: null,\n update: null,\n // will be set synchronously right after creation\n job: null,\n scope: new EffectScope(\n true\n /* detached */\n ),\n render: null,\n proxy: null,\n exposed: null,\n exposeProxy: null,\n withProxy: null,\n provides: parent ? parent.provides : Object.create(appContext.provides),\n ids: parent ? parent.ids : [\"\", 0, 0],\n accessCache: null,\n renderCache: [],\n // local resolved assets\n components: null,\n directives: null,\n // resolved props and emits options\n propsOptions: normalizePropsOptions(type, appContext),\n emitsOptions: normalizeEmitsOptions(type, appContext),\n // emit\n emit: null,\n // to be set immediately\n emitted: null,\n // props default value\n propsDefaults: EMPTY_OBJ,\n // inheritAttrs\n inheritAttrs: type.inheritAttrs,\n // state\n ctx: EMPTY_OBJ,\n data: EMPTY_OBJ,\n props: EMPTY_OBJ,\n attrs: EMPTY_OBJ,\n slots: EMPTY_OBJ,\n refs: EMPTY_OBJ,\n setupState: EMPTY_OBJ,\n setupContext: null,\n // suspense related\n suspense,\n suspenseId: suspense ? suspense.pendingId : 0,\n asyncDep: null,\n asyncResolved: false,\n // lifecycle hooks\n // not using enums here because it results in computed properties\n isMounted: false,\n isUnmounted: false,\n isDeactivated: false,\n bc: null,\n c: null,\n bm: null,\n m: null,\n bu: null,\n u: null,\n um: null,\n bum: null,\n da: null,\n a: null,\n rtg: null,\n rtc: null,\n ec: null,\n sp: null\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n instance.ctx = createDevRenderContext(instance);\n } else {\n instance.ctx = { _: instance };\n }\n instance.root = parent ? parent.root : instance;\n instance.emit = emit.bind(null, instance);\n if (vnode.ce) {\n vnode.ce(instance);\n }\n return instance;\n}\nlet currentInstance = null;\nconst getCurrentInstance = () => currentInstance || currentRenderingInstance;\nlet internalSetCurrentInstance;\nlet setInSSRSetupState;\n{\n const g = getGlobalThis();\n const registerGlobalSetter = (key, setter) => {\n let setters;\n if (!(setters = g[key])) setters = g[key] = [];\n setters.push(setter);\n return (v) => {\n if (setters.length > 1) setters.forEach((set) => set(v));\n else setters[0](v);\n };\n };\n internalSetCurrentInstance = registerGlobalSetter(\n `__VUE_INSTANCE_SETTERS__`,\n (v) => currentInstance = v\n );\n setInSSRSetupState = registerGlobalSetter(\n `__VUE_SSR_SETTERS__`,\n (v) => isInSSRComponentSetup = v\n );\n}\nconst setCurrentInstance = (instance) => {\n const prev = currentInstance;\n internalSetCurrentInstance(instance);\n instance.scope.on();\n return () => {\n instance.scope.off();\n internalSetCurrentInstance(prev);\n };\n};\nconst unsetCurrentInstance = () => {\n currentInstance && currentInstance.scope.off();\n internalSetCurrentInstance(null);\n};\nconst isBuiltInTag = /* @__PURE__ */ makeMap(\"slot,component\");\nfunction validateComponentName(name, { isNativeTag }) {\n if (isBuiltInTag(name) || isNativeTag(name)) {\n warn$1(\n \"Do not use built-in or reserved HTML elements as component id: \" + name\n );\n }\n}\nfunction isStatefulComponent(instance) {\n return instance.vnode.shapeFlag & 4;\n}\nlet isInSSRComponentSetup = false;\nfunction setupComponent(instance, isSSR = false, optimized = false) {\n isSSR && setInSSRSetupState(isSSR);\n const { props, children } = instance.vnode;\n const isStateful = isStatefulComponent(instance);\n initProps(instance, props, isStateful, isSSR);\n initSlots(instance, children, optimized || isSSR);\n const setupResult = isStateful ? setupStatefulComponent(instance, isSSR) : void 0;\n isSSR && setInSSRSetupState(false);\n return setupResult;\n}\nfunction setupStatefulComponent(instance, isSSR) {\n const Component = instance.type;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (Component.name) {\n validateComponentName(Component.name, instance.appContext.config);\n }\n if (Component.components) {\n const names = Object.keys(Component.components);\n for (let i = 0; i < names.length; i++) {\n validateComponentName(names[i], instance.appContext.config);\n }\n }\n if (Component.directives) {\n const names = Object.keys(Component.directives);\n for (let i = 0; i < names.length; i++) {\n validateDirectiveName(names[i]);\n }\n }\n if (Component.compilerOptions && isRuntimeOnly()) {\n warn$1(\n `\"compilerOptions\" is only supported when using a build of Vue that includes the runtime compiler. Since you are using a runtime-only build, the options should be passed via your build tool config instead.`\n );\n }\n }\n instance.accessCache = /* @__PURE__ */ Object.create(null);\n instance.proxy = new Proxy(instance.ctx, PublicInstanceProxyHandlers);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n exposePropsOnRenderContext(instance);\n }\n const { setup } = Component;\n if (setup) {\n pauseTracking();\n const setupContext = instance.setupContext = setup.length > 1 ? createSetupContext(instance) : null;\n const reset = setCurrentInstance(instance);\n const setupResult = callWithErrorHandling(\n setup,\n instance,\n 0,\n [\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(instance.props) : instance.props,\n setupContext\n ]\n );\n const isAsyncSetup = isPromise(setupResult);\n resetTracking();\n reset();\n if ((isAsyncSetup || instance.sp) && !isAsyncWrapper(instance)) {\n markAsyncBoundary(instance);\n }\n if (isAsyncSetup) {\n setupResult.then(unsetCurrentInstance, unsetCurrentInstance);\n if (isSSR) {\n return setupResult.then((resolvedResult) => {\n handleSetupResult(instance, resolvedResult, isSSR);\n }).catch((e) => {\n handleError(e, instance, 0);\n });\n } else {\n instance.asyncDep = setupResult;\n if (!!(process.env.NODE_ENV !== \"production\") && !instance.suspense) {\n const name = formatComponentName(instance, Component);\n warn$1(\n `Component <${name}>: setup function returned a promise, but no <Suspense> boundary was found in the parent component tree. A component with async setup() must be nested in a <Suspense> in order to be rendered.`\n );\n }\n }\n } else {\n handleSetupResult(instance, setupResult, isSSR);\n }\n } else {\n finishComponentSetup(instance, isSSR);\n }\n}\nfunction handleSetupResult(instance, setupResult, isSSR) {\n if (isFunction(setupResult)) {\n if (instance.type.__ssrInlineRender) {\n instance.ssrRender = setupResult;\n } else {\n instance.render = setupResult;\n }\n } else if (isObject(setupResult)) {\n if (!!(process.env.NODE_ENV !== \"production\") && isVNode(setupResult)) {\n warn$1(\n `setup() should not return VNodes directly - return a render function instead.`\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n instance.devtoolsRawSetupState = setupResult;\n }\n instance.setupState = proxyRefs(setupResult);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n exposeSetupStateOnRenderContext(instance);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && setupResult !== void 0) {\n warn$1(\n `setup() should return an object. Received: ${setupResult === null ? \"null\" : typeof setupResult}`\n );\n }\n finishComponentSetup(instance, isSSR);\n}\nlet compile;\nlet installWithProxy;\nfunction registerRuntimeCompiler(_compile) {\n compile = _compile;\n installWithProxy = (i) => {\n if (i.render._rc) {\n i.withProxy = new Proxy(i.ctx, RuntimeCompiledPublicInstanceProxyHandlers);\n }\n };\n}\nconst isRuntimeOnly = () => !compile;\nfunction finishComponentSetup(instance, isSSR, skipOptions) {\n const Component = instance.type;\n if (!instance.render) {\n if (!isSSR && compile && !Component.render) {\n const template = Component.template || __VUE_OPTIONS_API__ && resolveMergedOptions(instance).template;\n if (template) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `compile`);\n }\n const { isCustomElement, compilerOptions } = instance.appContext.config;\n const { delimiters, compilerOptions: componentCompilerOptions } = Component;\n const finalCompilerOptions = extend(\n extend(\n {\n isCustomElement,\n delimiters\n },\n compilerOptions\n ),\n componentCompilerOptions\n );\n Component.render = compile(template, finalCompilerOptions);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `compile`);\n }\n }\n }\n instance.render = Component.render || NOOP;\n if (installWithProxy) {\n installWithProxy(instance);\n }\n }\n if (__VUE_OPTIONS_API__ && true) {\n const reset = setCurrentInstance(instance);\n pauseTracking();\n try {\n applyOptions(instance);\n } finally {\n resetTracking();\n reset();\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && !Component.render && instance.render === NOOP && !isSSR) {\n if (!compile && Component.template) {\n warn$1(\n `Component provided template option but runtime compilation is not supported in this build of Vue.` + (` Configure your bundler to alias \"vue\" to \"vue/dist/vue.esm-bundler.js\".` )\n );\n } else {\n warn$1(`Component is missing template or render function: `, Component);\n }\n }\n}\nconst attrsProxyHandlers = !!(process.env.NODE_ENV !== \"production\") ? {\n get(target, key) {\n markAttrsAccessed();\n track(target, \"get\", \"\");\n return target[key];\n },\n set() {\n warn$1(`setupContext.attrs is readonly.`);\n return false;\n },\n deleteProperty() {\n warn$1(`setupContext.attrs is readonly.`);\n return false;\n }\n} : {\n get(target, key) {\n track(target, \"get\", \"\");\n return target[key];\n }\n};\nfunction getSlotsProxy(instance) {\n return new Proxy(instance.slots, {\n get(target, key) {\n track(instance, \"get\", \"$slots\");\n return target[key];\n }\n });\n}\nfunction createSetupContext(instance) {\n const expose = (exposed) => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (instance.exposed) {\n warn$1(`expose() should be called only once per setup().`);\n }\n if (exposed != null) {\n let exposedType = typeof exposed;\n if (exposedType === \"object\") {\n if (isArray(exposed)) {\n exposedType = \"array\";\n } else if (isRef(exposed)) {\n exposedType = \"ref\";\n }\n }\n if (exposedType !== \"object\") {\n warn$1(\n `expose() should be passed a plain object, received ${exposedType}.`\n );\n }\n }\n }\n instance.exposed = exposed || {};\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n let attrsProxy;\n let slotsProxy;\n return Object.freeze({\n get attrs() {\n return attrsProxy || (attrsProxy = new Proxy(instance.attrs, attrsProxyHandlers));\n },\n get slots() {\n return slotsProxy || (slotsProxy = getSlotsProxy(instance));\n },\n get emit() {\n return (event, ...args) => instance.emit(event, ...args);\n },\n expose\n });\n } else {\n return {\n attrs: new Proxy(instance.attrs, attrsProxyHandlers),\n slots: instance.slots,\n emit: instance.emit,\n expose\n };\n }\n}\nfunction getComponentPublicInstance(instance) {\n if (instance.exposed) {\n return instance.exposeProxy || (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), {\n get(target, key) {\n if (key in target) {\n return target[key];\n } else if (key in publicPropertiesMap) {\n return publicPropertiesMap[key](instance);\n }\n },\n has(target, key) {\n return key in target || key in publicPropertiesMap;\n }\n }));\n } else {\n return instance.proxy;\n }\n}\nconst classifyRE = /(?:^|[-_])\\w/g;\nconst classify = (str) => str.replace(classifyRE, (c) => c.toUpperCase()).replace(/[-_]/g, \"\");\nfunction getComponentName(Component, includeInferred = true) {\n return isFunction(Component) ? Component.displayName || Component.name : Component.name || includeInferred && Component.__name;\n}\nfunction formatComponentName(instance, Component, isRoot = false) {\n let name = getComponentName(Component);\n if (!name && Component.__file) {\n const match = Component.__file.match(/([^/\\\\]+)\\.\\w+$/);\n if (match) {\n name = match[1];\n }\n }\n if (!name && instance) {\n const inferFromRegistry = (registry) => {\n for (const key in registry) {\n if (registry[key] === Component) {\n return key;\n }\n }\n };\n name = inferFromRegistry(instance.components) || instance.parent && inferFromRegistry(\n instance.parent.type.components\n ) || inferFromRegistry(instance.appContext.components);\n }\n return name ? classify(name) : isRoot ? `App` : `Anonymous`;\n}\nfunction isClassComponent(value) {\n return isFunction(value) && \"__vccOpts\" in value;\n}\n\nconst computed = (getterOrOptions, debugOptions) => {\n const c = computed$1(getterOrOptions, debugOptions, isInSSRComponentSetup);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const i = getCurrentInstance();\n if (i && i.appContext.config.warnRecursiveComputed) {\n c._warnRecursive = true;\n }\n }\n return c;\n};\n\nfunction h(type, propsOrChildren, children) {\n try {\n setBlockTracking(-1);\n const l = arguments.length;\n if (l === 2) {\n if (isObject(propsOrChildren) && !isArray(propsOrChildren)) {\n if (isVNode(propsOrChildren)) {\n return createVNode(type, null, [propsOrChildren]);\n }\n return createVNode(type, propsOrChildren);\n } else {\n return createVNode(type, null, propsOrChildren);\n }\n } else {\n if (l > 3) {\n children = Array.prototype.slice.call(arguments, 2);\n } else if (l === 3 && isVNode(children)) {\n children = [children];\n }\n return createVNode(type, propsOrChildren, children);\n }\n } finally {\n setBlockTracking(1);\n }\n}\n\nfunction initCustomFormatter() {\n if (!!!(process.env.NODE_ENV !== \"production\") || typeof window === \"undefined\") {\n return;\n }\n const vueStyle = { style: \"color:#3ba776\" };\n const numberStyle = { style: \"color:#1677ff\" };\n const stringStyle = { style: \"color:#f5222d\" };\n const keywordStyle = { style: \"color:#eb2f96\" };\n const formatter = {\n __vue_custom_formatter: true,\n header(obj) {\n if (!isObject(obj)) {\n return null;\n }\n if (obj.__isVue) {\n return [\"div\", vueStyle, `VueInstance`];\n } else if (isRef(obj)) {\n pauseTracking();\n const value = obj.value;\n resetTracking();\n return [\n \"div\",\n {},\n [\"span\", vueStyle, genRefFlag(obj)],\n \"<\",\n formatValue(value),\n `>`\n ];\n } else if (isReactive(obj)) {\n return [\n \"div\",\n {},\n [\"span\", vueStyle, isShallow(obj) ? \"ShallowReactive\" : \"Reactive\"],\n \"<\",\n formatValue(obj),\n `>${isReadonly(obj) ? ` (readonly)` : ``}`\n ];\n } else if (isReadonly(obj)) {\n return [\n \"div\",\n {},\n [\"span\", vueStyle, isShallow(obj) ? \"ShallowReadonly\" : \"Readonly\"],\n \"<\",\n formatValue(obj),\n \">\"\n ];\n }\n return null;\n },\n hasBody(obj) {\n return obj && obj.__isVue;\n },\n body(obj) {\n if (obj && obj.__isVue) {\n return [\n \"div\",\n {},\n ...formatInstance(obj.$)\n ];\n }\n }\n };\n function formatInstance(instance) {\n const blocks = [];\n if (instance.type.props && instance.props) {\n blocks.push(createInstanceBlock(\"props\", toRaw(instance.props)));\n }\n if (instance.setupState !== EMPTY_OBJ) {\n blocks.push(createInstanceBlock(\"setup\", instance.setupState));\n }\n if (instance.data !== EMPTY_OBJ) {\n blocks.push(createInstanceBlock(\"data\", toRaw(instance.data)));\n }\n const computed = extractKeys(instance, \"computed\");\n if (computed) {\n blocks.push(createInstanceBlock(\"computed\", computed));\n }\n const injected = extractKeys(instance, \"inject\");\n if (injected) {\n blocks.push(createInstanceBlock(\"injected\", injected));\n }\n blocks.push([\n \"div\",\n {},\n [\n \"span\",\n {\n style: keywordStyle.style + \";opacity:0.66\"\n },\n \"$ (internal): \"\n ],\n [\"object\", { object: instance }]\n ]);\n return blocks;\n }\n function createInstanceBlock(type, target) {\n target = extend({}, target);\n if (!Object.keys(target).length) {\n return [\"span\", {}];\n }\n return [\n \"div\",\n { style: \"line-height:1.25em;margin-bottom:0.6em\" },\n [\n \"div\",\n {\n style: \"color:#476582\"\n },\n type\n ],\n [\n \"div\",\n {\n style: \"padding-left:1.25em\"\n },\n ...Object.keys(target).map((key) => {\n return [\n \"div\",\n {},\n [\"span\", keywordStyle, key + \": \"],\n formatValue(target[key], false)\n ];\n })\n ]\n ];\n }\n function formatValue(v, asRaw = true) {\n if (typeof v === \"number\") {\n return [\"span\", numberStyle, v];\n } else if (typeof v === \"string\") {\n return [\"span\", stringStyle, JSON.stringify(v)];\n } else if (typeof v === \"boolean\") {\n return [\"span\", keywordStyle, v];\n } else if (isObject(v)) {\n return [\"object\", { object: asRaw ? toRaw(v) : v }];\n } else {\n return [\"span\", stringStyle, String(v)];\n }\n }\n function extractKeys(instance, type) {\n const Comp = instance.type;\n if (isFunction(Comp)) {\n return;\n }\n const extracted = {};\n for (const key in instance.ctx) {\n if (isKeyOfType(Comp, key, type)) {\n extracted[key] = instance.ctx[key];\n }\n }\n return extracted;\n }\n function isKeyOfType(Comp, key, type) {\n const opts = Comp[type];\n if (isArray(opts) && opts.includes(key) || isObject(opts) && key in opts) {\n return true;\n }\n if (Comp.extends && isKeyOfType(Comp.extends, key, type)) {\n return true;\n }\n if (Comp.mixins && Comp.mixins.some((m) => isKeyOfType(m, key, type))) {\n return true;\n }\n }\n function genRefFlag(v) {\n if (isShallow(v)) {\n return `ShallowRef`;\n }\n if (v.effect) {\n return `ComputedRef`;\n }\n return `Ref`;\n }\n if (window.devtoolsFormatters) {\n window.devtoolsFormatters.push(formatter);\n } else {\n window.devtoolsFormatters = [formatter];\n }\n}\n\nfunction withMemo(memo, render, cache, index) {\n const cached = cache[index];\n if (cached && isMemoSame(cached, memo)) {\n return cached;\n }\n const ret = render();\n ret.memo = memo.slice();\n ret.cacheIndex = index;\n return cache[index] = ret;\n}\nfunction isMemoSame(cached, memo) {\n const prev = cached.memo;\n if (prev.length != memo.length) {\n return false;\n }\n for (let i = 0; i < prev.length; i++) {\n if (hasChanged(prev[i], memo[i])) {\n return false;\n }\n }\n if (isBlockTreeEnabled > 0 && currentBlock) {\n currentBlock.push(cached);\n }\n return true;\n}\n\nconst version = \"3.5.27\";\nconst warn = !!(process.env.NODE_ENV !== \"production\") ? warn$1 : NOOP;\nconst ErrorTypeStrings = ErrorTypeStrings$1 ;\nconst devtools = !!(process.env.NODE_ENV !== \"production\") || true ? devtools$1 : void 0;\nconst setDevtoolsHook = !!(process.env.NODE_ENV !== \"production\") || true ? setDevtoolsHook$1 : NOOP;\nconst _ssrUtils = {\n createComponentInstance,\n setupComponent,\n renderComponentRoot,\n setCurrentRenderingInstance,\n isVNode: isVNode,\n normalizeVNode,\n getComponentPublicInstance,\n ensureValidVNode,\n pushWarningContext,\n popWarningContext\n};\nconst ssrUtils = _ssrUtils ;\nconst resolveFilter = null;\nconst compatUtils = null;\nconst DeprecationTypes = null;\n\nexport { BaseTransition, BaseTransitionPropsValidators, Comment, DeprecationTypes, ErrorCodes, ErrorTypeStrings, Fragment, KeepAlive, Static, Suspense, Teleport, Text, assertNumber, callWithAsyncErrorHandling, callWithErrorHandling, cloneVNode, compatUtils, computed, createBlock, createCommentVNode, createElementBlock, createBaseVNode as createElementVNode, createHydrationRenderer, createPropsRestProxy, createRenderer, createSlots, createStaticVNode, createTextVNode, createVNode, defineAsyncComponent, defineComponent, defineEmits, defineExpose, defineModel, defineOptions, defineProps, defineSlots, devtools, getCurrentInstance, getTransitionRawChildren, guardReactiveProps, h, handleError, hasInjectionContext, hydrateOnIdle, hydrateOnInteraction, hydrateOnMediaQuery, hydrateOnVisible, initCustomFormatter, inject, isMemoSame, isRuntimeOnly, isVNode, mergeDefaults, mergeModels, mergeProps, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onServerPrefetch, onUnmounted, onUpdated, openBlock, popScopeId, provide, pushScopeId, queuePostFlushCb, registerRuntimeCompiler, renderList, renderSlot, resolveComponent, resolveDirective, resolveDynamicComponent, resolveFilter, resolveTransitionHooks, setBlockTracking, setDevtoolsHook, setTransitionHooks, ssrContextKey, ssrUtils, toHandlers, transformVNodeArgs, useAttrs, useId, useModel, useSSRContext, useSlots, useTemplateRef, useTransitionState, version, warn, watch, watchEffect, watchPostEffect, watchSyncEffect, withAsyncContext, withCtx, withDefaults, withDirectives, withMemo, withScopeId };\n","/**\n* @vue/runtime-dom v3.5.27\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { warn, BaseTransitionPropsValidators, h, BaseTransition, assertNumber, getCurrentInstance, onBeforeUpdate, queuePostFlushCb, onMounted, watch, onUnmounted, Fragment, Static, camelize, callWithAsyncErrorHandling, defineComponent, nextTick, unref, createVNode, useTransitionState, onUpdated, toRaw, getTransitionRawChildren, setTransitionHooks, resolveTransitionHooks, Text, createRenderer, createHydrationRenderer, isRuntimeOnly } from '@vue/runtime-core';\nexport * from '@vue/runtime-core';\nimport { extend, isObject, toNumber, isArray, NOOP, normalizeCssVarValue, isString, hyphenate, capitalize, isSpecialBooleanAttr, includeBooleanAttr, isSymbol, isFunction, isOn, isModelListener, camelize as camelize$1, isPlainObject, hasOwn, EMPTY_OBJ, looseToNumber, looseIndexOf, isSet, looseEqual, invokeArrayFns, isHTMLTag, isSVGTag, isMathMLTag } from '@vue/shared';\n\nlet policy = void 0;\nconst tt = typeof window !== \"undefined\" && window.trustedTypes;\nif (tt) {\n try {\n policy = /* @__PURE__ */ tt.createPolicy(\"vue\", {\n createHTML: (val) => val\n });\n } catch (e) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Error creating trusted types policy: ${e}`);\n }\n}\nconst unsafeToTrustedHTML = policy ? (val) => policy.createHTML(val) : (val) => val;\nconst svgNS = \"http://www.w3.org/2000/svg\";\nconst mathmlNS = \"http://www.w3.org/1998/Math/MathML\";\nconst doc = typeof document !== \"undefined\" ? document : null;\nconst templateContainer = doc && /* @__PURE__ */ doc.createElement(\"template\");\nconst nodeOps = {\n insert: (child, parent, anchor) => {\n parent.insertBefore(child, anchor || null);\n },\n remove: (child) => {\n const parent = child.parentNode;\n if (parent) {\n parent.removeChild(child);\n }\n },\n createElement: (tag, namespace, is, props) => {\n const el = namespace === \"svg\" ? doc.createElementNS(svgNS, tag) : namespace === \"mathml\" ? doc.createElementNS(mathmlNS, tag) : is ? doc.createElement(tag, { is }) : doc.createElement(tag);\n if (tag === \"select\" && props && props.multiple != null) {\n el.setAttribute(\"multiple\", props.multiple);\n }\n return el;\n },\n createText: (text) => doc.createTextNode(text),\n createComment: (text) => doc.createComment(text),\n setText: (node, text) => {\n node.nodeValue = text;\n },\n setElementText: (el, text) => {\n el.textContent = text;\n },\n parentNode: (node) => node.parentNode,\n nextSibling: (node) => node.nextSibling,\n querySelector: (selector) => doc.querySelector(selector),\n setScopeId(el, id) {\n el.setAttribute(id, \"\");\n },\n // __UNSAFE__\n // Reason: innerHTML.\n // Static content here can only come from compiled templates.\n // As long as the user only uses trusted templates, this is safe.\n insertStaticContent(content, parent, anchor, namespace, start, end) {\n const before = anchor ? anchor.previousSibling : parent.lastChild;\n if (start && (start === end || start.nextSibling)) {\n while (true) {\n parent.insertBefore(start.cloneNode(true), anchor);\n if (start === end || !(start = start.nextSibling)) break;\n }\n } else {\n templateContainer.innerHTML = unsafeToTrustedHTML(\n namespace === \"svg\" ? `<svg>${content}</svg>` : namespace === \"mathml\" ? `<math>${content}</math>` : content\n );\n const template = templateContainer.content;\n if (namespace === \"svg\" || namespace === \"mathml\") {\n const wrapper = template.firstChild;\n while (wrapper.firstChild) {\n template.appendChild(wrapper.firstChild);\n }\n template.removeChild(wrapper);\n }\n parent.insertBefore(template, anchor);\n }\n return [\n // first\n before ? before.nextSibling : parent.firstChild,\n // last\n anchor ? anchor.previousSibling : parent.lastChild\n ];\n }\n};\n\nconst TRANSITION = \"transition\";\nconst ANIMATION = \"animation\";\nconst vtcKey = /* @__PURE__ */ Symbol(\"_vtc\");\nconst DOMTransitionPropsValidators = {\n name: String,\n type: String,\n css: {\n type: Boolean,\n default: true\n },\n duration: [String, Number, Object],\n enterFromClass: String,\n enterActiveClass: String,\n enterToClass: String,\n appearFromClass: String,\n appearActiveClass: String,\n appearToClass: String,\n leaveFromClass: String,\n leaveActiveClass: String,\n leaveToClass: String\n};\nconst TransitionPropsValidators = /* @__PURE__ */ extend(\n {},\n BaseTransitionPropsValidators,\n DOMTransitionPropsValidators\n);\nconst decorate$1 = (t) => {\n t.displayName = \"Transition\";\n t.props = TransitionPropsValidators;\n return t;\n};\nconst Transition = /* @__PURE__ */ decorate$1(\n (props, { slots }) => h(BaseTransition, resolveTransitionProps(props), slots)\n);\nconst callHook = (hook, args = []) => {\n if (isArray(hook)) {\n hook.forEach((h2) => h2(...args));\n } else if (hook) {\n hook(...args);\n }\n};\nconst hasExplicitCallback = (hook) => {\n return hook ? isArray(hook) ? hook.some((h2) => h2.length > 1) : hook.length > 1 : false;\n};\nfunction resolveTransitionProps(rawProps) {\n const baseProps = {};\n for (const key in rawProps) {\n if (!(key in DOMTransitionPropsValidators)) {\n baseProps[key] = rawProps[key];\n }\n }\n if (rawProps.css === false) {\n return baseProps;\n }\n const {\n name = \"v\",\n type,\n duration,\n enterFromClass = `${name}-enter-from`,\n enterActiveClass = `${name}-enter-active`,\n enterToClass = `${name}-enter-to`,\n appearFromClass = enterFromClass,\n appearActiveClass = enterActiveClass,\n appearToClass = enterToClass,\n leaveFromClass = `${name}-leave-from`,\n leaveActiveClass = `${name}-leave-active`,\n leaveToClass = `${name}-leave-to`\n } = rawProps;\n const durations = normalizeDuration(duration);\n const enterDuration = durations && durations[0];\n const leaveDuration = durations && durations[1];\n const {\n onBeforeEnter,\n onEnter,\n onEnterCancelled,\n onLeave,\n onLeaveCancelled,\n onBeforeAppear = onBeforeEnter,\n onAppear = onEnter,\n onAppearCancelled = onEnterCancelled\n } = baseProps;\n const finishEnter = (el, isAppear, done, isCancelled) => {\n el._enterCancelled = isCancelled;\n removeTransitionClass(el, isAppear ? appearToClass : enterToClass);\n removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass);\n done && done();\n };\n const finishLeave = (el, done) => {\n el._isLeaving = false;\n removeTransitionClass(el, leaveFromClass);\n removeTransitionClass(el, leaveToClass);\n removeTransitionClass(el, leaveActiveClass);\n done && done();\n };\n const makeEnterHook = (isAppear) => {\n return (el, done) => {\n const hook = isAppear ? onAppear : onEnter;\n const resolve = () => finishEnter(el, isAppear, done);\n callHook(hook, [el, resolve]);\n nextFrame(() => {\n removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);\n addTransitionClass(el, isAppear ? appearToClass : enterToClass);\n if (!hasExplicitCallback(hook)) {\n whenTransitionEnds(el, type, enterDuration, resolve);\n }\n });\n };\n };\n return extend(baseProps, {\n onBeforeEnter(el) {\n callHook(onBeforeEnter, [el]);\n addTransitionClass(el, enterFromClass);\n addTransitionClass(el, enterActiveClass);\n },\n onBeforeAppear(el) {\n callHook(onBeforeAppear, [el]);\n addTransitionClass(el, appearFromClass);\n addTransitionClass(el, appearActiveClass);\n },\n onEnter: makeEnterHook(false),\n onAppear: makeEnterHook(true),\n onLeave(el, done) {\n el._isLeaving = true;\n const resolve = () => finishLeave(el, done);\n addTransitionClass(el, leaveFromClass);\n if (!el._enterCancelled) {\n forceReflow(el);\n addTransitionClass(el, leaveActiveClass);\n } else {\n addTransitionClass(el, leaveActiveClass);\n forceReflow(el);\n }\n nextFrame(() => {\n if (!el._isLeaving) {\n return;\n }\n removeTransitionClass(el, leaveFromClass);\n addTransitionClass(el, leaveToClass);\n if (!hasExplicitCallback(onLeave)) {\n whenTransitionEnds(el, type, leaveDuration, resolve);\n }\n });\n callHook(onLeave, [el, resolve]);\n },\n onEnterCancelled(el) {\n finishEnter(el, false, void 0, true);\n callHook(onEnterCancelled, [el]);\n },\n onAppearCancelled(el) {\n finishEnter(el, true, void 0, true);\n callHook(onAppearCancelled, [el]);\n },\n onLeaveCancelled(el) {\n finishLeave(el);\n callHook(onLeaveCancelled, [el]);\n }\n });\n}\nfunction normalizeDuration(duration) {\n if (duration == null) {\n return null;\n } else if (isObject(duration)) {\n return [NumberOf(duration.enter), NumberOf(duration.leave)];\n } else {\n const n = NumberOf(duration);\n return [n, n];\n }\n}\nfunction NumberOf(val) {\n const res = toNumber(val);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n assertNumber(res, \"<transition> explicit duration\");\n }\n return res;\n}\nfunction addTransitionClass(el, cls) {\n cls.split(/\\s+/).forEach((c) => c && el.classList.add(c));\n (el[vtcKey] || (el[vtcKey] = /* @__PURE__ */ new Set())).add(cls);\n}\nfunction removeTransitionClass(el, cls) {\n cls.split(/\\s+/).forEach((c) => c && el.classList.remove(c));\n const _vtc = el[vtcKey];\n if (_vtc) {\n _vtc.delete(cls);\n if (!_vtc.size) {\n el[vtcKey] = void 0;\n }\n }\n}\nfunction nextFrame(cb) {\n requestAnimationFrame(() => {\n requestAnimationFrame(cb);\n });\n}\nlet endId = 0;\nfunction whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {\n const id = el._endId = ++endId;\n const resolveIfNotStale = () => {\n if (id === el._endId) {\n resolve();\n }\n };\n if (explicitTimeout != null) {\n return setTimeout(resolveIfNotStale, explicitTimeout);\n }\n const { type, timeout, propCount } = getTransitionInfo(el, expectedType);\n if (!type) {\n return resolve();\n }\n const endEvent = type + \"end\";\n let ended = 0;\n const end = () => {\n el.removeEventListener(endEvent, onEnd);\n resolveIfNotStale();\n };\n const onEnd = (e) => {\n if (e.target === el && ++ended >= propCount) {\n end();\n }\n };\n setTimeout(() => {\n if (ended < propCount) {\n end();\n }\n }, timeout + 1);\n el.addEventListener(endEvent, onEnd);\n}\nfunction getTransitionInfo(el, expectedType) {\n const styles = window.getComputedStyle(el);\n const getStyleProperties = (key) => (styles[key] || \"\").split(\", \");\n const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);\n const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);\n const transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n const animationDelays = getStyleProperties(`${ANIMATION}Delay`);\n const animationDurations = getStyleProperties(`${ANIMATION}Duration`);\n const animationTimeout = getTimeout(animationDelays, animationDurations);\n let type = null;\n let timeout = 0;\n let propCount = 0;\n if (expectedType === TRANSITION) {\n if (transitionTimeout > 0) {\n type = TRANSITION;\n timeout = transitionTimeout;\n propCount = transitionDurations.length;\n }\n } else if (expectedType === ANIMATION) {\n if (animationTimeout > 0) {\n type = ANIMATION;\n timeout = animationTimeout;\n propCount = animationDurations.length;\n }\n } else {\n timeout = Math.max(transitionTimeout, animationTimeout);\n type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null;\n propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0;\n }\n const hasTransform = type === TRANSITION && /\\b(?:transform|all)(?:,|$)/.test(\n getStyleProperties(`${TRANSITION}Property`).toString()\n );\n return {\n type,\n timeout,\n propCount,\n hasTransform\n };\n}\nfunction getTimeout(delays, durations) {\n while (delays.length < durations.length) {\n delays = delays.concat(delays);\n }\n return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i])));\n}\nfunction toMs(s) {\n if (s === \"auto\") return 0;\n return Number(s.slice(0, -1).replace(\",\", \".\")) * 1e3;\n}\nfunction forceReflow(el) {\n const targetDocument = el ? el.ownerDocument : document;\n return targetDocument.body.offsetHeight;\n}\n\nfunction patchClass(el, value, isSVG) {\n const transitionClasses = el[vtcKey];\n if (transitionClasses) {\n value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(\" \");\n }\n if (value == null) {\n el.removeAttribute(\"class\");\n } else if (isSVG) {\n el.setAttribute(\"class\", value);\n } else {\n el.className = value;\n }\n}\n\nconst vShowOriginalDisplay = /* @__PURE__ */ Symbol(\"_vod\");\nconst vShowHidden = /* @__PURE__ */ Symbol(\"_vsh\");\nconst vShow = {\n // used for prop mismatch check during hydration\n name: \"show\",\n beforeMount(el, { value }, { transition }) {\n el[vShowOriginalDisplay] = el.style.display === \"none\" ? \"\" : el.style.display;\n if (transition && value) {\n transition.beforeEnter(el);\n } else {\n setDisplay(el, value);\n }\n },\n mounted(el, { value }, { transition }) {\n if (transition && value) {\n transition.enter(el);\n }\n },\n updated(el, { value, oldValue }, { transition }) {\n if (!value === !oldValue) return;\n if (transition) {\n if (value) {\n transition.beforeEnter(el);\n setDisplay(el, true);\n transition.enter(el);\n } else {\n transition.leave(el, () => {\n setDisplay(el, false);\n });\n }\n } else {\n setDisplay(el, value);\n }\n },\n beforeUnmount(el, { value }) {\n setDisplay(el, value);\n }\n};\nfunction setDisplay(el, value) {\n el.style.display = value ? el[vShowOriginalDisplay] : \"none\";\n el[vShowHidden] = !value;\n}\nfunction initVShowForSSR() {\n vShow.getSSRProps = ({ value }) => {\n if (!value) {\n return { style: { display: \"none\" } };\n }\n };\n}\n\nconst CSS_VAR_TEXT = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? \"CSS_VAR_TEXT\" : \"\");\nfunction useCssVars(getter) {\n const instance = getCurrentInstance();\n if (!instance) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`useCssVars is called without current active component instance.`);\n return;\n }\n const updateTeleports = instance.ut = (vars = getter(instance.proxy)) => {\n Array.from(\n document.querySelectorAll(`[data-v-owner=\"${instance.uid}\"]`)\n ).forEach((node) => setVarsOnNode(node, vars));\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n instance.getCssVars = () => getter(instance.proxy);\n }\n const setVars = () => {\n const vars = getter(instance.proxy);\n if (instance.ce) {\n setVarsOnNode(instance.ce, vars);\n } else {\n setVarsOnVNode(instance.subTree, vars);\n }\n updateTeleports(vars);\n };\n onBeforeUpdate(() => {\n queuePostFlushCb(setVars);\n });\n onMounted(() => {\n watch(setVars, NOOP, { flush: \"post\" });\n const ob = new MutationObserver(setVars);\n ob.observe(instance.subTree.el.parentNode, { childList: true });\n onUnmounted(() => ob.disconnect());\n });\n}\nfunction setVarsOnVNode(vnode, vars) {\n if (vnode.shapeFlag & 128) {\n const suspense = vnode.suspense;\n vnode = suspense.activeBranch;\n if (suspense.pendingBranch && !suspense.isHydrating) {\n suspense.effects.push(() => {\n setVarsOnVNode(suspense.activeBranch, vars);\n });\n }\n }\n while (vnode.component) {\n vnode = vnode.component.subTree;\n }\n if (vnode.shapeFlag & 1 && vnode.el) {\n setVarsOnNode(vnode.el, vars);\n } else if (vnode.type === Fragment) {\n vnode.children.forEach((c) => setVarsOnVNode(c, vars));\n } else if (vnode.type === Static) {\n let { el, anchor } = vnode;\n while (el) {\n setVarsOnNode(el, vars);\n if (el === anchor) break;\n el = el.nextSibling;\n }\n }\n}\nfunction setVarsOnNode(el, vars) {\n if (el.nodeType === 1) {\n const style = el.style;\n let cssText = \"\";\n for (const key in vars) {\n const value = normalizeCssVarValue(vars[key]);\n style.setProperty(`--${key}`, value);\n cssText += `--${key}: ${value};`;\n }\n style[CSS_VAR_TEXT] = cssText;\n }\n}\n\nconst displayRE = /(?:^|;)\\s*display\\s*:/;\nfunction patchStyle(el, prev, next) {\n const style = el.style;\n const isCssString = isString(next);\n let hasControlledDisplay = false;\n if (next && !isCssString) {\n if (prev) {\n if (!isString(prev)) {\n for (const key in prev) {\n if (next[key] == null) {\n setStyle(style, key, \"\");\n }\n }\n } else {\n for (const prevStyle of prev.split(\";\")) {\n const key = prevStyle.slice(0, prevStyle.indexOf(\":\")).trim();\n if (next[key] == null) {\n setStyle(style, key, \"\");\n }\n }\n }\n }\n for (const key in next) {\n if (key === \"display\") {\n hasControlledDisplay = true;\n }\n setStyle(style, key, next[key]);\n }\n } else {\n if (isCssString) {\n if (prev !== next) {\n const cssVarText = style[CSS_VAR_TEXT];\n if (cssVarText) {\n next += \";\" + cssVarText;\n }\n style.cssText = next;\n hasControlledDisplay = displayRE.test(next);\n }\n } else if (prev) {\n el.removeAttribute(\"style\");\n }\n }\n if (vShowOriginalDisplay in el) {\n el[vShowOriginalDisplay] = hasControlledDisplay ? style.display : \"\";\n if (el[vShowHidden]) {\n style.display = \"none\";\n }\n }\n}\nconst semicolonRE = /[^\\\\];\\s*$/;\nconst importantRE = /\\s*!important$/;\nfunction setStyle(style, name, val) {\n if (isArray(val)) {\n val.forEach((v) => setStyle(style, name, v));\n } else {\n if (val == null) val = \"\";\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (semicolonRE.test(val)) {\n warn(\n `Unexpected semicolon at the end of '${name}' style value: '${val}'`\n );\n }\n }\n if (name.startsWith(\"--\")) {\n style.setProperty(name, val);\n } else {\n const prefixed = autoPrefix(style, name);\n if (importantRE.test(val)) {\n style.setProperty(\n hyphenate(prefixed),\n val.replace(importantRE, \"\"),\n \"important\"\n );\n } else {\n style[prefixed] = val;\n }\n }\n }\n}\nconst prefixes = [\"Webkit\", \"Moz\", \"ms\"];\nconst prefixCache = {};\nfunction autoPrefix(style, rawName) {\n const cached = prefixCache[rawName];\n if (cached) {\n return cached;\n }\n let name = camelize(rawName);\n if (name !== \"filter\" && name in style) {\n return prefixCache[rawName] = name;\n }\n name = capitalize(name);\n for (let i = 0; i < prefixes.length; i++) {\n const prefixed = prefixes[i] + name;\n if (prefixed in style) {\n return prefixCache[rawName] = prefixed;\n }\n }\n return rawName;\n}\n\nconst xlinkNS = \"http://www.w3.org/1999/xlink\";\nfunction patchAttr(el, key, value, isSVG, instance, isBoolean = isSpecialBooleanAttr(key)) {\n if (isSVG && key.startsWith(\"xlink:\")) {\n if (value == null) {\n el.removeAttributeNS(xlinkNS, key.slice(6, key.length));\n } else {\n el.setAttributeNS(xlinkNS, key, value);\n }\n } else {\n if (value == null || isBoolean && !includeBooleanAttr(value)) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(\n key,\n isBoolean ? \"\" : isSymbol(value) ? String(value) : value\n );\n }\n }\n}\n\nfunction patchDOMProp(el, key, value, parentComponent, attrName) {\n if (key === \"innerHTML\" || key === \"textContent\") {\n if (value != null) {\n el[key] = key === \"innerHTML\" ? unsafeToTrustedHTML(value) : value;\n }\n return;\n }\n const tag = el.tagName;\n if (key === \"value\" && tag !== \"PROGRESS\" && // custom elements may use _value internally\n !tag.includes(\"-\")) {\n const oldValue = tag === \"OPTION\" ? el.getAttribute(\"value\") || \"\" : el.value;\n const newValue = value == null ? (\n // #11647: value should be set as empty string for null and undefined,\n // but <input type=\"checkbox\"> should be set as 'on'.\n el.type === \"checkbox\" ? \"on\" : \"\"\n ) : String(value);\n if (oldValue !== newValue || !(\"_value\" in el)) {\n el.value = newValue;\n }\n if (value == null) {\n el.removeAttribute(key);\n }\n el._value = value;\n return;\n }\n let needRemove = false;\n if (value === \"\" || value == null) {\n const type = typeof el[key];\n if (type === \"boolean\") {\n value = includeBooleanAttr(value);\n } else if (value == null && type === \"string\") {\n value = \"\";\n needRemove = true;\n } else if (type === \"number\") {\n value = 0;\n needRemove = true;\n }\n }\n try {\n el[key] = value;\n } catch (e) {\n if (!!(process.env.NODE_ENV !== \"production\") && !needRemove) {\n warn(\n `Failed setting prop \"${key}\" on <${tag.toLowerCase()}>: value ${value} is invalid.`,\n e\n );\n }\n }\n needRemove && el.removeAttribute(attrName || key);\n}\n\nfunction addEventListener(el, event, handler, options) {\n el.addEventListener(event, handler, options);\n}\nfunction removeEventListener(el, event, handler, options) {\n el.removeEventListener(event, handler, options);\n}\nconst veiKey = /* @__PURE__ */ Symbol(\"_vei\");\nfunction patchEvent(el, rawName, prevValue, nextValue, instance = null) {\n const invokers = el[veiKey] || (el[veiKey] = {});\n const existingInvoker = invokers[rawName];\n if (nextValue && existingInvoker) {\n existingInvoker.value = !!(process.env.NODE_ENV !== \"production\") ? sanitizeEventValue(nextValue, rawName) : nextValue;\n } else {\n const [name, options] = parseName(rawName);\n if (nextValue) {\n const invoker = invokers[rawName] = createInvoker(\n !!(process.env.NODE_ENV !== \"production\") ? sanitizeEventValue(nextValue, rawName) : nextValue,\n instance\n );\n addEventListener(el, name, invoker, options);\n } else if (existingInvoker) {\n removeEventListener(el, name, existingInvoker, options);\n invokers[rawName] = void 0;\n }\n }\n}\nconst optionsModifierRE = /(?:Once|Passive|Capture)$/;\nfunction parseName(name) {\n let options;\n if (optionsModifierRE.test(name)) {\n options = {};\n let m;\n while (m = name.match(optionsModifierRE)) {\n name = name.slice(0, name.length - m[0].length);\n options[m[0].toLowerCase()] = true;\n }\n }\n const event = name[2] === \":\" ? name.slice(3) : hyphenate(name.slice(2));\n return [event, options];\n}\nlet cachedNow = 0;\nconst p = /* @__PURE__ */ Promise.resolve();\nconst getNow = () => cachedNow || (p.then(() => cachedNow = 0), cachedNow = Date.now());\nfunction createInvoker(initialValue, instance) {\n const invoker = (e) => {\n if (!e._vts) {\n e._vts = Date.now();\n } else if (e._vts <= invoker.attached) {\n return;\n }\n callWithAsyncErrorHandling(\n patchStopImmediatePropagation(e, invoker.value),\n instance,\n 5,\n [e]\n );\n };\n invoker.value = initialValue;\n invoker.attached = getNow();\n return invoker;\n}\nfunction sanitizeEventValue(value, propName) {\n if (isFunction(value) || isArray(value)) {\n return value;\n }\n warn(\n `Wrong type passed as event handler to ${propName} - did you forget @ or : in front of your prop?\nExpected function or array of functions, received type ${typeof value}.`\n );\n return NOOP;\n}\nfunction patchStopImmediatePropagation(e, value) {\n if (isArray(value)) {\n const originalStop = e.stopImmediatePropagation;\n e.stopImmediatePropagation = () => {\n originalStop.call(e);\n e._stopped = true;\n };\n return value.map(\n (fn) => (e2) => !e2._stopped && fn && fn(e2)\n );\n } else {\n return value;\n }\n}\n\nconst isNativeOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // lowercase letter\nkey.charCodeAt(2) > 96 && key.charCodeAt(2) < 123;\nconst patchProp = (el, key, prevValue, nextValue, namespace, parentComponent) => {\n const isSVG = namespace === \"svg\";\n if (key === \"class\") {\n patchClass(el, nextValue, isSVG);\n } else if (key === \"style\") {\n patchStyle(el, prevValue, nextValue);\n } else if (isOn(key)) {\n if (!isModelListener(key)) {\n patchEvent(el, key, prevValue, nextValue, parentComponent);\n }\n } else if (key[0] === \".\" ? (key = key.slice(1), true) : key[0] === \"^\" ? (key = key.slice(1), false) : shouldSetAsProp(el, key, nextValue, isSVG)) {\n patchDOMProp(el, key, nextValue);\n if (!el.tagName.includes(\"-\") && (key === \"value\" || key === \"checked\" || key === \"selected\")) {\n patchAttr(el, key, nextValue, isSVG, parentComponent, key !== \"value\");\n }\n } else if (\n // #11081 force set props for possible async custom element\n el._isVueCE && (/[A-Z]/.test(key) || !isString(nextValue))\n ) {\n patchDOMProp(el, camelize$1(key), nextValue, parentComponent, key);\n } else {\n if (key === \"true-value\") {\n el._trueValue = nextValue;\n } else if (key === \"false-value\") {\n el._falseValue = nextValue;\n }\n patchAttr(el, key, nextValue, isSVG);\n }\n};\nfunction shouldSetAsProp(el, key, value, isSVG) {\n if (isSVG) {\n if (key === \"innerHTML\" || key === \"textContent\") {\n return true;\n }\n if (key in el && isNativeOn(key) && isFunction(value)) {\n return true;\n }\n return false;\n }\n if (key === \"spellcheck\" || key === \"draggable\" || key === \"translate\" || key === \"autocorrect\") {\n return false;\n }\n if (key === \"sandbox\" && el.tagName === \"IFRAME\") {\n return false;\n }\n if (key === \"form\") {\n return false;\n }\n if (key === \"list\" && el.tagName === \"INPUT\") {\n return false;\n }\n if (key === \"type\" && el.tagName === \"TEXTAREA\") {\n return false;\n }\n if (key === \"width\" || key === \"height\") {\n const tag = el.tagName;\n if (tag === \"IMG\" || tag === \"VIDEO\" || tag === \"CANVAS\" || tag === \"SOURCE\") {\n return false;\n }\n }\n if (isNativeOn(key) && isString(value)) {\n return false;\n }\n return key in el;\n}\n\nconst REMOVAL = {};\n// @__NO_SIDE_EFFECTS__\nfunction defineCustomElement(options, extraOptions, _createApp) {\n let Comp = defineComponent(options, extraOptions);\n if (isPlainObject(Comp)) Comp = extend({}, Comp, extraOptions);\n class VueCustomElement extends VueElement {\n constructor(initialProps) {\n super(Comp, initialProps, _createApp);\n }\n }\n VueCustomElement.def = Comp;\n return VueCustomElement;\n}\nconst defineSSRCustomElement = (/* @__NO_SIDE_EFFECTS__ */ (options, extraOptions) => {\n return /* @__PURE__ */ defineCustomElement(options, extraOptions, createSSRApp);\n});\nconst BaseClass = typeof HTMLElement !== \"undefined\" ? HTMLElement : class {\n};\nclass VueElement extends BaseClass {\n constructor(_def, _props = {}, _createApp = createApp) {\n super();\n this._def = _def;\n this._props = _props;\n this._createApp = _createApp;\n this._isVueCE = true;\n /**\n * @internal\n */\n this._instance = null;\n /**\n * @internal\n */\n this._app = null;\n /**\n * @internal\n */\n this._nonce = this._def.nonce;\n this._connected = false;\n this._resolved = false;\n this._patching = false;\n this._dirty = false;\n this._numberProps = null;\n this._styleChildren = /* @__PURE__ */ new WeakSet();\n this._ob = null;\n if (this.shadowRoot && _createApp !== createApp) {\n this._root = this.shadowRoot;\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && this.shadowRoot) {\n warn(\n `Custom element has pre-rendered declarative shadow root but is not defined as hydratable. Use \\`defineSSRCustomElement\\`.`\n );\n }\n if (_def.shadowRoot !== false) {\n this.attachShadow(\n extend({}, _def.shadowRootOptions, {\n mode: \"open\"\n })\n );\n this._root = this.shadowRoot;\n } else {\n this._root = this;\n }\n }\n }\n connectedCallback() {\n if (!this.isConnected) return;\n if (!this.shadowRoot && !this._resolved) {\n this._parseSlots();\n }\n this._connected = true;\n let parent = this;\n while (parent = parent && (parent.parentNode || parent.host)) {\n if (parent instanceof VueElement) {\n this._parent = parent;\n break;\n }\n }\n if (!this._instance) {\n if (this._resolved) {\n this._mount(this._def);\n } else {\n if (parent && parent._pendingResolve) {\n this._pendingResolve = parent._pendingResolve.then(() => {\n this._pendingResolve = void 0;\n this._resolveDef();\n });\n } else {\n this._resolveDef();\n }\n }\n }\n }\n _setParent(parent = this._parent) {\n if (parent) {\n this._instance.parent = parent._instance;\n this._inheritParentContext(parent);\n }\n }\n _inheritParentContext(parent = this._parent) {\n if (parent && this._app) {\n Object.setPrototypeOf(\n this._app._context.provides,\n parent._instance.provides\n );\n }\n }\n disconnectedCallback() {\n this._connected = false;\n nextTick(() => {\n if (!this._connected) {\n if (this._ob) {\n this._ob.disconnect();\n this._ob = null;\n }\n this._app && this._app.unmount();\n if (this._instance) this._instance.ce = void 0;\n this._app = this._instance = null;\n if (this._teleportTargets) {\n this._teleportTargets.clear();\n this._teleportTargets = void 0;\n }\n }\n });\n }\n _processMutations(mutations) {\n for (const m of mutations) {\n this._setAttr(m.attributeName);\n }\n }\n /**\n * resolve inner component definition (handle possible async component)\n */\n _resolveDef() {\n if (this._pendingResolve) {\n return;\n }\n for (let i = 0; i < this.attributes.length; i++) {\n this._setAttr(this.attributes[i].name);\n }\n this._ob = new MutationObserver(this._processMutations.bind(this));\n this._ob.observe(this, { attributes: true });\n const resolve = (def, isAsync = false) => {\n this._resolved = true;\n this._pendingResolve = void 0;\n const { props, styles } = def;\n let numberProps;\n if (props && !isArray(props)) {\n for (const key in props) {\n const opt = props[key];\n if (opt === Number || opt && opt.type === Number) {\n if (key in this._props) {\n this._props[key] = toNumber(this._props[key]);\n }\n (numberProps || (numberProps = /* @__PURE__ */ Object.create(null)))[camelize$1(key)] = true;\n }\n }\n }\n this._numberProps = numberProps;\n this._resolveProps(def);\n if (this.shadowRoot) {\n this._applyStyles(styles);\n } else if (!!(process.env.NODE_ENV !== \"production\") && styles) {\n warn(\n \"Custom element style injection is not supported when using shadowRoot: false\"\n );\n }\n this._mount(def);\n };\n const asyncDef = this._def.__asyncLoader;\n if (asyncDef) {\n this._pendingResolve = asyncDef().then((def) => {\n def.configureApp = this._def.configureApp;\n resolve(this._def = def, true);\n });\n } else {\n resolve(this._def);\n }\n }\n _mount(def) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) && !def.name) {\n def.name = \"VueElement\";\n }\n this._app = this._createApp(def);\n this._inheritParentContext();\n if (def.configureApp) {\n def.configureApp(this._app);\n }\n this._app._ceVNode = this._createVNode();\n this._app.mount(this._root);\n const exposed = this._instance && this._instance.exposed;\n if (!exposed) return;\n for (const key in exposed) {\n if (!hasOwn(this, key)) {\n Object.defineProperty(this, key, {\n // unwrap ref to be consistent with public instance behavior\n get: () => unref(exposed[key])\n });\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(`Exposed property \"${key}\" already exists on custom element.`);\n }\n }\n }\n _resolveProps(def) {\n const { props } = def;\n const declaredPropKeys = isArray(props) ? props : Object.keys(props || {});\n for (const key of Object.keys(this)) {\n if (key[0] !== \"_\" && declaredPropKeys.includes(key)) {\n this._setProp(key, this[key]);\n }\n }\n for (const key of declaredPropKeys.map(camelize$1)) {\n Object.defineProperty(this, key, {\n get() {\n return this._getProp(key);\n },\n set(val) {\n this._setProp(key, val, true, !this._patching);\n }\n });\n }\n }\n _setAttr(key) {\n if (key.startsWith(\"data-v-\")) return;\n const has = this.hasAttribute(key);\n let value = has ? this.getAttribute(key) : REMOVAL;\n const camelKey = camelize$1(key);\n if (has && this._numberProps && this._numberProps[camelKey]) {\n value = toNumber(value);\n }\n this._setProp(camelKey, value, false, true);\n }\n /**\n * @internal\n */\n _getProp(key) {\n return this._props[key];\n }\n /**\n * @internal\n */\n _setProp(key, val, shouldReflect = true, shouldUpdate = false) {\n if (val !== this._props[key]) {\n this._dirty = true;\n if (val === REMOVAL) {\n delete this._props[key];\n } else {\n this._props[key] = val;\n if (key === \"key\" && this._app) {\n this._app._ceVNode.key = val;\n }\n }\n if (shouldUpdate && this._instance) {\n this._update();\n }\n if (shouldReflect) {\n const ob = this._ob;\n if (ob) {\n this._processMutations(ob.takeRecords());\n ob.disconnect();\n }\n if (val === true) {\n this.setAttribute(hyphenate(key), \"\");\n } else if (typeof val === \"string\" || typeof val === \"number\") {\n this.setAttribute(hyphenate(key), val + \"\");\n } else if (!val) {\n this.removeAttribute(hyphenate(key));\n }\n ob && ob.observe(this, { attributes: true });\n }\n }\n }\n _update() {\n const vnode = this._createVNode();\n if (this._app) vnode.appContext = this._app._context;\n render(vnode, this._root);\n }\n _createVNode() {\n const baseProps = {};\n if (!this.shadowRoot) {\n baseProps.onVnodeMounted = baseProps.onVnodeUpdated = this._renderSlots.bind(this);\n }\n const vnode = createVNode(this._def, extend(baseProps, this._props));\n if (!this._instance) {\n vnode.ce = (instance) => {\n this._instance = instance;\n instance.ce = this;\n instance.isCE = true;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n instance.ceReload = (newStyles) => {\n if (this._styles) {\n this._styles.forEach((s) => this._root.removeChild(s));\n this._styles.length = 0;\n }\n this._applyStyles(newStyles);\n this._instance = null;\n this._update();\n };\n }\n const dispatch = (event, args) => {\n this.dispatchEvent(\n new CustomEvent(\n event,\n isPlainObject(args[0]) ? extend({ detail: args }, args[0]) : { detail: args }\n )\n );\n };\n instance.emit = (event, ...args) => {\n dispatch(event, args);\n if (hyphenate(event) !== event) {\n dispatch(hyphenate(event), args);\n }\n };\n this._setParent();\n };\n }\n return vnode;\n }\n _applyStyles(styles, owner) {\n if (!styles) return;\n if (owner) {\n if (owner === this._def || this._styleChildren.has(owner)) {\n return;\n }\n this._styleChildren.add(owner);\n }\n const nonce = this._nonce;\n for (let i = styles.length - 1; i >= 0; i--) {\n const s = document.createElement(\"style\");\n if (nonce) s.setAttribute(\"nonce\", nonce);\n s.textContent = styles[i];\n this.shadowRoot.prepend(s);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (owner) {\n if (owner.__hmrId) {\n if (!this._childStyles) this._childStyles = /* @__PURE__ */ new Map();\n let entry = this._childStyles.get(owner.__hmrId);\n if (!entry) {\n this._childStyles.set(owner.__hmrId, entry = []);\n }\n entry.push(s);\n }\n } else {\n (this._styles || (this._styles = [])).push(s);\n }\n }\n }\n }\n /**\n * Only called when shadowRoot is false\n */\n _parseSlots() {\n const slots = this._slots = {};\n let n;\n while (n = this.firstChild) {\n const slotName = n.nodeType === 1 && n.getAttribute(\"slot\") || \"default\";\n (slots[slotName] || (slots[slotName] = [])).push(n);\n this.removeChild(n);\n }\n }\n /**\n * Only called when shadowRoot is false\n */\n _renderSlots() {\n const outlets = this._getSlots();\n const scopeId = this._instance.type.__scopeId;\n for (let i = 0; i < outlets.length; i++) {\n const o = outlets[i];\n const slotName = o.getAttribute(\"name\") || \"default\";\n const content = this._slots[slotName];\n const parent = o.parentNode;\n if (content) {\n for (const n of content) {\n if (scopeId && n.nodeType === 1) {\n const id = scopeId + \"-s\";\n const walker = document.createTreeWalker(n, 1);\n n.setAttribute(id, \"\");\n let child;\n while (child = walker.nextNode()) {\n child.setAttribute(id, \"\");\n }\n }\n parent.insertBefore(n, o);\n }\n } else {\n while (o.firstChild) parent.insertBefore(o.firstChild, o);\n }\n parent.removeChild(o);\n }\n }\n /**\n * @internal\n */\n _getSlots() {\n const roots = [this];\n if (this._teleportTargets) {\n roots.push(...this._teleportTargets);\n }\n const slots = /* @__PURE__ */ new Set();\n for (const root of roots) {\n const found = root.querySelectorAll(\"slot\");\n for (let i = 0; i < found.length; i++) {\n slots.add(found[i]);\n }\n }\n return Array.from(slots);\n }\n /**\n * @internal\n */\n _injectChildStyle(comp) {\n this._applyStyles(comp.styles, comp);\n }\n /**\n * @internal\n */\n _beginPatch() {\n this._patching = true;\n this._dirty = false;\n }\n /**\n * @internal\n */\n _endPatch() {\n this._patching = false;\n if (this._dirty && this._instance) {\n this._update();\n }\n }\n /**\n * @internal\n */\n _removeChildStyle(comp) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this._styleChildren.delete(comp);\n if (this._childStyles && comp.__hmrId) {\n const oldStyles = this._childStyles.get(comp.__hmrId);\n if (oldStyles) {\n oldStyles.forEach((s) => this._root.removeChild(s));\n oldStyles.length = 0;\n }\n }\n }\n }\n}\nfunction useHost(caller) {\n const instance = getCurrentInstance();\n const el = instance && instance.ce;\n if (el) {\n return el;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!instance) {\n warn(\n `${caller || \"useHost\"} called without an active component instance.`\n );\n } else {\n warn(\n `${caller || \"useHost\"} can only be used in components defined via defineCustomElement.`\n );\n }\n }\n return null;\n}\nfunction useShadowRoot() {\n const el = !!(process.env.NODE_ENV !== \"production\") ? useHost(\"useShadowRoot\") : useHost();\n return el && el.shadowRoot;\n}\n\nfunction useCssModule(name = \"$style\") {\n {\n const instance = getCurrentInstance();\n if (!instance) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`useCssModule must be called inside setup()`);\n return EMPTY_OBJ;\n }\n const modules = instance.type.__cssModules;\n if (!modules) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Current instance does not have CSS modules injected.`);\n return EMPTY_OBJ;\n }\n const mod = modules[name];\n if (!mod) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Current instance does not have CSS module named \"${name}\".`);\n return EMPTY_OBJ;\n }\n return mod;\n }\n}\n\nconst positionMap = /* @__PURE__ */ new WeakMap();\nconst newPositionMap = /* @__PURE__ */ new WeakMap();\nconst moveCbKey = /* @__PURE__ */ Symbol(\"_moveCb\");\nconst enterCbKey = /* @__PURE__ */ Symbol(\"_enterCb\");\nconst decorate = (t) => {\n delete t.props.mode;\n return t;\n};\nconst TransitionGroupImpl = /* @__PURE__ */ decorate({\n name: \"TransitionGroup\",\n props: /* @__PURE__ */ extend({}, TransitionPropsValidators, {\n tag: String,\n moveClass: String\n }),\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n let prevChildren;\n let children;\n onUpdated(() => {\n if (!prevChildren.length) {\n return;\n }\n const moveClass = props.moveClass || `${props.name || \"v\"}-move`;\n if (!hasCSSTransform(\n prevChildren[0].el,\n instance.vnode.el,\n moveClass\n )) {\n prevChildren = [];\n return;\n }\n prevChildren.forEach(callPendingCbs);\n prevChildren.forEach(recordPosition);\n const movedChildren = prevChildren.filter(applyTranslation);\n forceReflow(instance.vnode.el);\n movedChildren.forEach((c) => {\n const el = c.el;\n const style = el.style;\n addTransitionClass(el, moveClass);\n style.transform = style.webkitTransform = style.transitionDuration = \"\";\n const cb = el[moveCbKey] = (e) => {\n if (e && e.target !== el) {\n return;\n }\n if (!e || e.propertyName.endsWith(\"transform\")) {\n el.removeEventListener(\"transitionend\", cb);\n el[moveCbKey] = null;\n removeTransitionClass(el, moveClass);\n }\n };\n el.addEventListener(\"transitionend\", cb);\n });\n prevChildren = [];\n });\n return () => {\n const rawProps = toRaw(props);\n const cssTransitionProps = resolveTransitionProps(rawProps);\n let tag = rawProps.tag || Fragment;\n prevChildren = [];\n if (children) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.el && child.el instanceof Element) {\n prevChildren.push(child);\n setTransitionHooks(\n child,\n resolveTransitionHooks(\n child,\n cssTransitionProps,\n state,\n instance\n )\n );\n positionMap.set(child, {\n left: child.el.offsetLeft,\n top: child.el.offsetTop\n });\n }\n }\n }\n children = slots.default ? getTransitionRawChildren(slots.default()) : [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.key != null) {\n setTransitionHooks(\n child,\n resolveTransitionHooks(child, cssTransitionProps, state, instance)\n );\n } else if (!!(process.env.NODE_ENV !== \"production\") && child.type !== Text) {\n warn(`<TransitionGroup> children must be keyed.`);\n }\n }\n return createVNode(tag, null, children);\n };\n }\n});\nconst TransitionGroup = TransitionGroupImpl;\nfunction callPendingCbs(c) {\n const el = c.el;\n if (el[moveCbKey]) {\n el[moveCbKey]();\n }\n if (el[enterCbKey]) {\n el[enterCbKey]();\n }\n}\nfunction recordPosition(c) {\n newPositionMap.set(c, {\n left: c.el.offsetLeft,\n top: c.el.offsetTop\n });\n}\nfunction applyTranslation(c) {\n const oldPos = positionMap.get(c);\n const newPos = newPositionMap.get(c);\n const dx = oldPos.left - newPos.left;\n const dy = oldPos.top - newPos.top;\n if (dx || dy) {\n const s = c.el.style;\n s.transform = s.webkitTransform = `translate(${dx}px,${dy}px)`;\n s.transitionDuration = \"0s\";\n return c;\n }\n}\nfunction hasCSSTransform(el, root, moveClass) {\n const clone = el.cloneNode();\n const _vtc = el[vtcKey];\n if (_vtc) {\n _vtc.forEach((cls) => {\n cls.split(/\\s+/).forEach((c) => c && clone.classList.remove(c));\n });\n }\n moveClass.split(/\\s+/).forEach((c) => c && clone.classList.add(c));\n clone.style.display = \"none\";\n const container = root.nodeType === 1 ? root : root.parentNode;\n container.appendChild(clone);\n const { hasTransform } = getTransitionInfo(clone);\n container.removeChild(clone);\n return hasTransform;\n}\n\nconst getModelAssigner = (vnode) => {\n const fn = vnode.props[\"onUpdate:modelValue\"] || false;\n return isArray(fn) ? (value) => invokeArrayFns(fn, value) : fn;\n};\nfunction onCompositionStart(e) {\n e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n const target = e.target;\n if (target.composing) {\n target.composing = false;\n target.dispatchEvent(new Event(\"input\"));\n }\n}\nconst assignKey = /* @__PURE__ */ Symbol(\"_assign\");\nfunction castValue(value, trim, number) {\n if (trim) value = value.trim();\n if (number) value = looseToNumber(value);\n return value;\n}\nconst vModelText = {\n created(el, { modifiers: { lazy, trim, number } }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n const castToNumber = number || vnode.props && vnode.props.type === \"number\";\n addEventListener(el, lazy ? \"change\" : \"input\", (e) => {\n if (e.target.composing) return;\n el[assignKey](castValue(el.value, trim, castToNumber));\n });\n if (trim || castToNumber) {\n addEventListener(el, \"change\", () => {\n el.value = castValue(el.value, trim, castToNumber);\n });\n }\n if (!lazy) {\n addEventListener(el, \"compositionstart\", onCompositionStart);\n addEventListener(el, \"compositionend\", onCompositionEnd);\n addEventListener(el, \"change\", onCompositionEnd);\n }\n },\n // set value on mounted so it's after min/max for type=\"range\"\n mounted(el, { value }) {\n el.value = value == null ? \"\" : value;\n },\n beforeUpdate(el, { value, oldValue, modifiers: { lazy, trim, number } }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n if (el.composing) return;\n const elValue = (number || el.type === \"number\") && !/^0\\d/.test(el.value) ? looseToNumber(el.value) : el.value;\n const newValue = value == null ? \"\" : value;\n if (elValue === newValue) {\n return;\n }\n if (document.activeElement === el && el.type !== \"range\") {\n if (lazy && value === oldValue) {\n return;\n }\n if (trim && el.value.trim() === newValue) {\n return;\n }\n }\n el.value = newValue;\n }\n};\nconst vModelCheckbox = {\n // #4096 array checkboxes need to be deep traversed\n deep: true,\n created(el, _, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n addEventListener(el, \"change\", () => {\n const modelValue = el._modelValue;\n const elementValue = getValue(el);\n const checked = el.checked;\n const assign = el[assignKey];\n if (isArray(modelValue)) {\n const index = looseIndexOf(modelValue, elementValue);\n const found = index !== -1;\n if (checked && !found) {\n assign(modelValue.concat(elementValue));\n } else if (!checked && found) {\n const filtered = [...modelValue];\n filtered.splice(index, 1);\n assign(filtered);\n }\n } else if (isSet(modelValue)) {\n const cloned = new Set(modelValue);\n if (checked) {\n cloned.add(elementValue);\n } else {\n cloned.delete(elementValue);\n }\n assign(cloned);\n } else {\n assign(getCheckboxValue(el, checked));\n }\n });\n },\n // set initial checked on mount to wait for true-value/false-value\n mounted: setChecked,\n beforeUpdate(el, binding, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n setChecked(el, binding, vnode);\n }\n};\nfunction setChecked(el, { value, oldValue }, vnode) {\n el._modelValue = value;\n let checked;\n if (isArray(value)) {\n checked = looseIndexOf(value, vnode.props.value) > -1;\n } else if (isSet(value)) {\n checked = value.has(vnode.props.value);\n } else {\n if (value === oldValue) return;\n checked = looseEqual(value, getCheckboxValue(el, true));\n }\n if (el.checked !== checked) {\n el.checked = checked;\n }\n}\nconst vModelRadio = {\n created(el, { value }, vnode) {\n el.checked = looseEqual(value, vnode.props.value);\n el[assignKey] = getModelAssigner(vnode);\n addEventListener(el, \"change\", () => {\n el[assignKey](getValue(el));\n });\n },\n beforeUpdate(el, { value, oldValue }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n if (value !== oldValue) {\n el.checked = looseEqual(value, vnode.props.value);\n }\n }\n};\nconst vModelSelect = {\n // <select multiple> value need to be deep traversed\n deep: true,\n created(el, { value, modifiers: { number } }, vnode) {\n const isSetModel = isSet(value);\n addEventListener(el, \"change\", () => {\n const selectedVal = Array.prototype.filter.call(el.options, (o) => o.selected).map(\n (o) => number ? looseToNumber(getValue(o)) : getValue(o)\n );\n el[assignKey](\n el.multiple ? isSetModel ? new Set(selectedVal) : selectedVal : selectedVal[0]\n );\n el._assigning = true;\n nextTick(() => {\n el._assigning = false;\n });\n });\n el[assignKey] = getModelAssigner(vnode);\n },\n // set value in mounted & updated because <select> relies on its children\n // <option>s.\n mounted(el, { value }) {\n setSelected(el, value);\n },\n beforeUpdate(el, _binding, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n },\n updated(el, { value }) {\n if (!el._assigning) {\n setSelected(el, value);\n }\n }\n};\nfunction setSelected(el, value) {\n const isMultiple = el.multiple;\n const isArrayValue = isArray(value);\n if (isMultiple && !isArrayValue && !isSet(value)) {\n !!(process.env.NODE_ENV !== \"production\") && warn(\n `<select multiple v-model> expects an Array or Set value for its binding, but got ${Object.prototype.toString.call(value).slice(8, -1)}.`\n );\n return;\n }\n for (let i = 0, l = el.options.length; i < l; i++) {\n const option = el.options[i];\n const optionValue = getValue(option);\n if (isMultiple) {\n if (isArrayValue) {\n const optionType = typeof optionValue;\n if (optionType === \"string\" || optionType === \"number\") {\n option.selected = value.some((v) => String(v) === String(optionValue));\n } else {\n option.selected = looseIndexOf(value, optionValue) > -1;\n }\n } else {\n option.selected = value.has(optionValue);\n }\n } else if (looseEqual(getValue(option), value)) {\n if (el.selectedIndex !== i) el.selectedIndex = i;\n return;\n }\n }\n if (!isMultiple && el.selectedIndex !== -1) {\n el.selectedIndex = -1;\n }\n}\nfunction getValue(el) {\n return \"_value\" in el ? el._value : el.value;\n}\nfunction getCheckboxValue(el, checked) {\n const key = checked ? \"_trueValue\" : \"_falseValue\";\n return key in el ? el[key] : checked;\n}\nconst vModelDynamic = {\n created(el, binding, vnode) {\n callModelHook(el, binding, vnode, null, \"created\");\n },\n mounted(el, binding, vnode) {\n callModelHook(el, binding, vnode, null, \"mounted\");\n },\n beforeUpdate(el, binding, vnode, prevVNode) {\n callModelHook(el, binding, vnode, prevVNode, \"beforeUpdate\");\n },\n updated(el, binding, vnode, prevVNode) {\n callModelHook(el, binding, vnode, prevVNode, \"updated\");\n }\n};\nfunction resolveDynamicModel(tagName, type) {\n switch (tagName) {\n case \"SELECT\":\n return vModelSelect;\n case \"TEXTAREA\":\n return vModelText;\n default:\n switch (type) {\n case \"checkbox\":\n return vModelCheckbox;\n case \"radio\":\n return vModelRadio;\n default:\n return vModelText;\n }\n }\n}\nfunction callModelHook(el, binding, vnode, prevVNode, hook) {\n const modelToUse = resolveDynamicModel(\n el.tagName,\n vnode.props && vnode.props.type\n );\n const fn = modelToUse[hook];\n fn && fn(el, binding, vnode, prevVNode);\n}\nfunction initVModelForSSR() {\n vModelText.getSSRProps = ({ value }) => ({ value });\n vModelRadio.getSSRProps = ({ value }, vnode) => {\n if (vnode.props && looseEqual(vnode.props.value, value)) {\n return { checked: true };\n }\n };\n vModelCheckbox.getSSRProps = ({ value }, vnode) => {\n if (isArray(value)) {\n if (vnode.props && looseIndexOf(value, vnode.props.value) > -1) {\n return { checked: true };\n }\n } else if (isSet(value)) {\n if (vnode.props && value.has(vnode.props.value)) {\n return { checked: true };\n }\n } else if (value) {\n return { checked: true };\n }\n };\n vModelDynamic.getSSRProps = (binding, vnode) => {\n if (typeof vnode.type !== \"string\") {\n return;\n }\n const modelToUse = resolveDynamicModel(\n // resolveDynamicModel expects an uppercase tag name, but vnode.type is lowercase\n vnode.type.toUpperCase(),\n vnode.props && vnode.props.type\n );\n if (modelToUse.getSSRProps) {\n return modelToUse.getSSRProps(binding, vnode);\n }\n };\n}\n\nconst systemModifiers = [\"ctrl\", \"shift\", \"alt\", \"meta\"];\nconst modifierGuards = {\n stop: (e) => e.stopPropagation(),\n prevent: (e) => e.preventDefault(),\n self: (e) => e.target !== e.currentTarget,\n ctrl: (e) => !e.ctrlKey,\n shift: (e) => !e.shiftKey,\n alt: (e) => !e.altKey,\n meta: (e) => !e.metaKey,\n left: (e) => \"button\" in e && e.button !== 0,\n middle: (e) => \"button\" in e && e.button !== 1,\n right: (e) => \"button\" in e && e.button !== 2,\n exact: (e, modifiers) => systemModifiers.some((m) => e[`${m}Key`] && !modifiers.includes(m))\n};\nconst withModifiers = (fn, modifiers) => {\n const cache = fn._withMods || (fn._withMods = {});\n const cacheKey = modifiers.join(\".\");\n return cache[cacheKey] || (cache[cacheKey] = ((event, ...args) => {\n for (let i = 0; i < modifiers.length; i++) {\n const guard = modifierGuards[modifiers[i]];\n if (guard && guard(event, modifiers)) return;\n }\n return fn(event, ...args);\n }));\n};\nconst keyNames = {\n esc: \"escape\",\n space: \" \",\n up: \"arrow-up\",\n left: \"arrow-left\",\n right: \"arrow-right\",\n down: \"arrow-down\",\n delete: \"backspace\"\n};\nconst withKeys = (fn, modifiers) => {\n const cache = fn._withKeys || (fn._withKeys = {});\n const cacheKey = modifiers.join(\".\");\n return cache[cacheKey] || (cache[cacheKey] = ((event) => {\n if (!(\"key\" in event)) {\n return;\n }\n const eventKey = hyphenate(event.key);\n if (modifiers.some(\n (k) => k === eventKey || keyNames[k] === eventKey\n )) {\n return fn(event);\n }\n }));\n};\n\nconst rendererOptions = /* @__PURE__ */ extend({ patchProp }, nodeOps);\nlet renderer;\nlet enabledHydration = false;\nfunction ensureRenderer() {\n return renderer || (renderer = createRenderer(rendererOptions));\n}\nfunction ensureHydrationRenderer() {\n renderer = enabledHydration ? renderer : createHydrationRenderer(rendererOptions);\n enabledHydration = true;\n return renderer;\n}\nconst render = ((...args) => {\n ensureRenderer().render(...args);\n});\nconst hydrate = ((...args) => {\n ensureHydrationRenderer().hydrate(...args);\n});\nconst createApp = ((...args) => {\n const app = ensureRenderer().createApp(...args);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n injectNativeTagCheck(app);\n injectCompilerOptionsCheck(app);\n }\n const { mount } = app;\n app.mount = (containerOrSelector) => {\n const container = normalizeContainer(containerOrSelector);\n if (!container) return;\n const component = app._component;\n if (!isFunction(component) && !component.render && !component.template) {\n component.template = container.innerHTML;\n }\n if (container.nodeType === 1) {\n container.textContent = \"\";\n }\n const proxy = mount(container, false, resolveRootNamespace(container));\n if (container instanceof Element) {\n container.removeAttribute(\"v-cloak\");\n container.setAttribute(\"data-v-app\", \"\");\n }\n return proxy;\n };\n return app;\n});\nconst createSSRApp = ((...args) => {\n const app = ensureHydrationRenderer().createApp(...args);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n injectNativeTagCheck(app);\n injectCompilerOptionsCheck(app);\n }\n const { mount } = app;\n app.mount = (containerOrSelector) => {\n const container = normalizeContainer(containerOrSelector);\n if (container) {\n return mount(container, true, resolveRootNamespace(container));\n }\n };\n return app;\n});\nfunction resolveRootNamespace(container) {\n if (container instanceof SVGElement) {\n return \"svg\";\n }\n if (typeof MathMLElement === \"function\" && container instanceof MathMLElement) {\n return \"mathml\";\n }\n}\nfunction injectNativeTagCheck(app) {\n Object.defineProperty(app.config, \"isNativeTag\", {\n value: (tag) => isHTMLTag(tag) || isSVGTag(tag) || isMathMLTag(tag),\n writable: false\n });\n}\nfunction injectCompilerOptionsCheck(app) {\n if (isRuntimeOnly()) {\n const isCustomElement = app.config.isCustomElement;\n Object.defineProperty(app.config, \"isCustomElement\", {\n get() {\n return isCustomElement;\n },\n set() {\n warn(\n `The \\`isCustomElement\\` config option is deprecated. Use \\`compilerOptions.isCustomElement\\` instead.`\n );\n }\n });\n const compilerOptions = app.config.compilerOptions;\n const msg = `The \\`compilerOptions\\` config option is only respected when using a build of Vue.js that includes the runtime compiler (aka \"full build\"). Since you are using the runtime-only build, \\`compilerOptions\\` must be passed to \\`@vue/compiler-dom\\` in the build setup instead.\n- For vue-loader: pass it via vue-loader's \\`compilerOptions\\` loader option.\n- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader\n- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-sfc`;\n Object.defineProperty(app.config, \"compilerOptions\", {\n get() {\n warn(msg);\n return compilerOptions;\n },\n set() {\n warn(msg);\n }\n });\n }\n}\nfunction normalizeContainer(container) {\n if (isString(container)) {\n const res = document.querySelector(container);\n if (!!(process.env.NODE_ENV !== \"production\") && !res) {\n warn(\n `Failed to mount app: mount target selector \"${container}\" returned null.`\n );\n }\n return res;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && window.ShadowRoot && container instanceof window.ShadowRoot && container.mode === \"closed\") {\n warn(\n `mounting on a ShadowRoot with \\`{mode: \"closed\"}\\` may lead to unpredictable bugs`\n );\n }\n return container;\n}\nlet ssrDirectiveInitialized = false;\nconst initDirectivesForSSR = () => {\n if (!ssrDirectiveInitialized) {\n ssrDirectiveInitialized = true;\n initVModelForSSR();\n initVShowForSSR();\n }\n} ;\n\nexport { Transition, TransitionGroup, VueElement, createApp, createSSRApp, defineCustomElement, defineSSRCustomElement, hydrate, initDirectivesForSSR, nodeOps, patchProp, render, useCssModule, useCssVars, useHost, useShadowRoot, vModelCheckbox, vModelDynamic, vModelRadio, vModelSelect, vModelText, vShow, withKeys, withModifiers };\n","/**\n* vue v3.5.27\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { initCustomFormatter, warn } from '@vue/runtime-dom';\nexport * from '@vue/runtime-dom';\n\nfunction initDev() {\n {\n initCustomFormatter();\n }\n}\n\nif (!!(process.env.NODE_ENV !== \"production\")) {\n initDev();\n}\nconst compile = () => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Runtime compilation is not supported in this build of Vue.` + (` Configure your bundler to alias \"vue\" to \"vue/dist/vue.esm-bundler.js\".` )\n );\n }\n};\n\nexport { compile };\n","import { Plugin, PluginKey, TextSelection } from \"@milkdown/prose/state\";\nimport { $ctx, $prose } from \"@milkdown/utils\";\nimport { computePosition, flip, offset } from \"@floating-ui/dom\";\nimport { posToDOMRect, findParentNode } from \"@milkdown/prose\";\nimport { debounce } from \"lodash-es\";\nfunction slashFactory(id) {\n const slashSpec = $ctx(\n {},\n `${id}_SLASH_SPEC`\n );\n const slashPlugin = $prose((ctx) => {\n const spec = ctx.get(slashSpec.key);\n return new Plugin({\n key: new PluginKey(`${id}_SLASH`),\n ...spec\n });\n });\n const result = [slashSpec, slashPlugin];\n result.key = slashSpec.key;\n result.pluginKey = slashPlugin.key;\n slashSpec.meta = {\n package: \"@milkdown/plugin-slash\",\n displayName: `Ctx<slashSpec>|${id}`\n };\n slashPlugin.meta = {\n package: \"@milkdown/plugin-slash\",\n displayName: `Prose<slash>|${id}`\n };\n return result;\n}\nclass SlashProvider {\n constructor(options) {\n this.#initialized = false;\n this.onShow = () => {\n };\n this.onHide = () => {\n };\n this.#onUpdate = (view, prevState) => {\n const { state, composing } = view;\n const { selection, doc } = state;\n const { ranges } = selection;\n const from = Math.min(...ranges.map((range) => range.$from.pos));\n const to = Math.max(...ranges.map((range) => range.$to.pos));\n const isSame = prevState && prevState.doc.eq(doc) && prevState.selection.eq(selection);\n if (!this.#initialized) {\n const root = this.#root ?? view.dom.parentElement ?? document.body;\n root.appendChild(this.element);\n this.#initialized = true;\n }\n if (composing || isSame) return;\n if (!this.#shouldShow(view, prevState)) {\n this.hide();\n return;\n }\n const virtualEl = {\n getBoundingClientRect: () => posToDOMRect(view, from, to)\n };\n computePosition(virtualEl, this.element, {\n placement: \"bottom-start\",\n middleware: [flip(), offset(this.#offset), ...this.#middleware],\n ...this.#floatingUIOptions\n }).then(({ x, y }) => {\n Object.assign(this.element.style, {\n left: `${x}px`,\n top: `${y}px`\n });\n }).catch(console.error);\n this.show();\n };\n this.update = (view, prevState) => {\n this.#updater(view, prevState);\n };\n this.getContent = (view, matchNode = (node) => node.type.name === \"paragraph\") => {\n const { selection } = view.state;\n const { empty, $from } = selection;\n const isTextBlock = view.state.selection instanceof TextSelection;\n if (typeof document === \"undefined\") return;\n const isSlashChildren = this.element.contains(document.activeElement);\n const notHasFocus = !view.hasFocus() && !isSlashChildren;\n const isReadonly = !view.editable;\n const paragraph = findParentNode(matchNode)(view.state.selection);\n const isNotInParagraph = !paragraph;\n if (notHasFocus || isReadonly || !empty || !isTextBlock || isNotInParagraph)\n return;\n return $from.parent.textBetween(\n Math.max(0, $from.parentOffset - 500),\n $from.parentOffset,\n void 0,\n \"\"\n );\n };\n this.destroy = () => {\n this.#updater.cancel();\n };\n this.show = () => {\n this.element.dataset.show = \"true\";\n this.onShow();\n };\n this.hide = () => {\n this.element.dataset.show = \"false\";\n this.onHide();\n };\n this.element = options.content;\n this.#debounce = options.debounce ?? 200;\n this.#shouldShow = options.shouldShow ?? this.#_shouldShow;\n this.#trigger = options.trigger ?? \"/\";\n this.#offset = options.offset;\n this.#middleware = options.middleware ?? [];\n this.#floatingUIOptions = options.floatingUIOptions ?? {};\n this.#root = options.root;\n this.#updater = debounce(this.#onUpdate, this.#debounce);\n }\n #initialized;\n /// @internal\n #middleware;\n /// @internal\n #floatingUIOptions;\n /// @internal\n #root;\n /// @internal\n #debounce;\n /// @internal\n #trigger;\n /// @internal\n #shouldShow;\n /// @internal\n #updater;\n /// The offset to get the block. Default is 0.\n #offset;\n #onUpdate;\n /// @internal\n #_shouldShow(view) {\n const currentTextBlockContent = this.getContent(view);\n if (!currentTextBlockContent) return false;\n const target = currentTextBlockContent.at(-1);\n if (!target) return false;\n return Array.isArray(this.#trigger) ? this.#trigger.includes(target) : this.#trigger === target;\n }\n}\nexport {\n SlashProvider,\n slashFactory\n};\n//# sourceMappingURL=index.js.map\n","import clsx from 'clsx';\nimport DOMPurify from 'dompurify';\nimport { h } from 'vue';\n\nfunction Icon({ icon, class: className, onClick }) {\n return /* @__PURE__ */ h(\n \"span\",\n {\n class: clsx(\"milkdown-icon\", className),\n onPointerdown: onClick,\n innerHTML: icon ? DOMPurify.sanitize(icon.trim()) : void 0\n }\n );\n}\nIcon.props = {\n icon: {\n type: String,\n required: false\n },\n class: {\n type: String,\n required: false\n },\n onClick: {\n type: Function,\n required: false\n }\n};\n\nexport { Icon };\n//# sourceMappingURL=index.js.map\n","import { $ctx, $remark, $nodeSchema, $view } from '@milkdown/utils';\nimport { visit } from 'unist-util-visit';\nimport { expectDomTypeError } from '@milkdown/exception';\nimport DOMPurify from 'dompurify';\nimport { h, defineComponent, ref, Fragment, createApp, watchEffect } from 'vue';\nimport clsx from 'clsx';\nimport { customAlphabet } from 'nanoid';\n\nvar __defProp$2 = Object.defineProperty;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n if (__getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(b)) {\n if (__propIsEnum$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n }\n return a;\n};\nfunction withMeta(plugin, meta) {\n Object.assign(plugin, {\n meta: __spreadValues$2({\n package: \"@milkdown/components\"\n }, meta)\n });\n return plugin;\n}\n\nconst defaultImageBlockConfig = {\n imageIcon: \"\\u{1F30C}\",\n captionIcon: \"\\u{1F4AC}\",\n uploadButton: \"Upload file\",\n confirmButton: \"Confirm \\u23CE\",\n uploadPlaceholderText: \"or paste the image link ...\",\n captionPlaceholderText: \"Image caption\",\n onUpload: (file) => Promise.resolve(URL.createObjectURL(file))\n};\nconst imageBlockConfig = $ctx(\n defaultImageBlockConfig,\n \"imageBlockConfigCtx\"\n);\nwithMeta(imageBlockConfig, {\n displayName: \"Config<image-block>\",\n group: \"ImageBlock\"\n});\n\nfunction visitImage(ast) {\n return visit(\n ast,\n \"paragraph\",\n (node, index, parent) => {\n var _a, _b;\n if (((_a = node.children) == null ? void 0 : _a.length) !== 1) return;\n const firstChild = (_b = node.children) == null ? void 0 : _b[0];\n if (!firstChild || firstChild.type !== \"image\") return;\n const { url, alt, title } = firstChild;\n const newNode = {\n type: \"image-block\",\n url,\n alt,\n title\n };\n parent.children.splice(index, 1, newNode);\n }\n );\n}\nconst remarkImageBlockPlugin = $remark(\n \"remark-image-block\",\n () => () => visitImage\n);\nwithMeta(remarkImageBlockPlugin.plugin, {\n displayName: \"Remark<remarkImageBlock>\",\n group: \"ImageBlock\"\n});\nwithMeta(remarkImageBlockPlugin.options, {\n displayName: \"RemarkConfig<remarkImageBlock>\",\n group: \"ImageBlock\"\n});\n\nvar __defProp$1 = Object.defineProperty;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n if (__getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(b)) {\n if (__propIsEnum$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n }\n return a;\n};\nconst IMAGE_DATA_TYPE = \"image-block\";\nconst imageBlockSchema = $nodeSchema(\"image-block\", () => {\n return {\n inline: false,\n group: \"block\",\n selectable: true,\n draggable: true,\n isolating: true,\n marks: \"\",\n atom: true,\n priority: 100,\n attrs: {\n src: { default: \"\", validate: \"string\" },\n caption: { default: \"\", validate: \"string\" },\n ratio: { default: 1, validate: \"number\" }\n },\n parseDOM: [\n {\n tag: `img[data-type=\"${IMAGE_DATA_TYPE}\"]`,\n getAttrs: (dom) => {\n var _a;\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom);\n return {\n src: dom.getAttribute(\"src\") || \"\",\n caption: dom.getAttribute(\"caption\") || \"\",\n ratio: Number((_a = dom.getAttribute(\"ratio\")) != null ? _a : 1)\n };\n }\n }\n ],\n toDOM: (node) => [\"img\", __spreadValues$1({ \"data-type\": IMAGE_DATA_TYPE }, node.attrs)],\n parseMarkdown: {\n match: ({ type }) => type === \"image-block\",\n runner: (state, node, type) => {\n const src = node.url;\n const caption = node.title;\n let ratio = Number(node.alt || 1);\n if (Number.isNaN(ratio) || ratio === 0) ratio = 1;\n state.addNode(type, {\n src,\n caption,\n ratio\n });\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === \"image-block\",\n runner: (state, node) => {\n state.openNode(\"paragraph\");\n state.addNode(\"image\", void 0, void 0, {\n title: node.attrs.caption,\n url: node.attrs.src,\n alt: `${Number.parseFloat(node.attrs.ratio).toFixed(2)}`\n });\n state.closeNode();\n }\n }\n };\n});\nwithMeta(imageBlockSchema.node, {\n displayName: \"NodeSchema<image-block>\",\n group: \"ImageBlock\"\n});\n\nfunction Icon({ icon, class: className, onClick }) {\n return /* @__PURE__ */ h(\n \"span\",\n {\n class: clsx(\"milkdown-icon\", className),\n onPointerdown: onClick,\n innerHTML: icon ? DOMPurify.sanitize(icon.trim()) : void 0\n }\n );\n}\nIcon.props = {\n icon: {\n type: String,\n required: false\n },\n class: {\n type: String,\n required: false\n },\n onClick: {\n type: Function,\n required: false\n }\n};\n\nconst nanoid = customAlphabet(\"abcdefg\", 8);\nconst ImageInput = defineComponent({\n props: {\n src: {\n type: Object,\n required: true\n },\n selected: {\n type: Object,\n required: true\n },\n readonly: {\n type: Object,\n required: true\n },\n setLink: {\n type: Function,\n required: true\n },\n imageIcon: {\n type: String,\n required: false\n },\n uploadButton: {\n type: String,\n required: false\n },\n confirmButton: {\n type: String,\n required: false\n },\n uploadPlaceholderText: {\n type: String,\n required: false\n },\n onUpload: {\n type: Function,\n required: true\n }\n },\n setup({\n readonly,\n src,\n setLink,\n onUpload,\n imageIcon,\n uploadButton,\n confirmButton,\n uploadPlaceholderText,\n className\n }) {\n var _a, _b;\n const focusLinkInput = ref(false);\n const linkInputRef = ref();\n const currentLink = ref((_a = src.value) != null ? _a : \"\");\n const uuid = ref(nanoid());\n const hidePlaceholder = ref(((_b = src.value) == null ? void 0 : _b.length) !== 0);\n const onEditLink = (e) => {\n const target = e.target;\n const value = target.value;\n hidePlaceholder.value = value.length !== 0;\n currentLink.value = value;\n };\n const onKeydown = (e) => {\n var _a2, _b2;\n if (e.key === \"Enter\") {\n setLink((_b2 = (_a2 = linkInputRef.value) == null ? void 0 : _a2.value) != null ? _b2 : \"\");\n }\n };\n const onConfirmLinkInput = () => {\n var _a2, _b2;\n setLink((_b2 = (_a2 = linkInputRef.value) == null ? void 0 : _a2.value) != null ? _b2 : \"\");\n };\n const onUploadFile = (e) => {\n var _a2;\n const file = (_a2 = e.target.files) == null ? void 0 : _a2[0];\n if (!file) return;\n onUpload(file).then((url) => {\n if (!url) return;\n setLink(url);\n hidePlaceholder.value = true;\n }).catch((err) => {\n console.error(\"An error occurred while uploading image\");\n console.error(err);\n });\n };\n return () => {\n return /* @__PURE__ */ h(\"div\", { class: clsx(\"image-edit\", className) }, /* @__PURE__ */ h(Icon, { icon: imageIcon, class: \"image-icon\" }), /* @__PURE__ */ h(\"div\", { class: clsx(\"link-importer\", focusLinkInput.value && \"focus\") }, /* @__PURE__ */ h(\n \"input\",\n {\n ref: linkInputRef,\n draggable: \"true\",\n onDragstart: (e) => {\n e.preventDefault();\n e.stopPropagation();\n },\n disabled: readonly.value,\n class: \"link-input-area\",\n value: currentLink.value,\n onInput: onEditLink,\n onKeydown,\n onFocus: () => focusLinkInput.value = true,\n onBlur: () => focusLinkInput.value = false\n }\n ), !hidePlaceholder.value && /* @__PURE__ */ h(\"div\", { class: \"placeholder\" }, /* @__PURE__ */ h(\n \"input\",\n {\n disabled: readonly.value,\n class: \"hidden\",\n id: uuid.value,\n type: \"file\",\n accept: \"image/*\",\n onChange: onUploadFile\n }\n ), /* @__PURE__ */ h(\"label\", { class: \"uploader\", for: uuid.value }, /* @__PURE__ */ h(Icon, { icon: uploadButton })), /* @__PURE__ */ h(\"span\", { class: \"text\", onClick: () => {\n var _a2;\n return (_a2 = linkInputRef.value) == null ? void 0 : _a2.focus();\n } }, uploadPlaceholderText))), currentLink.value && /* @__PURE__ */ h(\"div\", { class: \"confirm\", onClick: () => onConfirmLinkInput() }, /* @__PURE__ */ h(Icon, { icon: confirmButton })));\n };\n }\n});\n\nconst ImageViewer = defineComponent({\n props: {\n src: {\n type: Object,\n required: true\n },\n caption: {\n type: Object,\n required: true\n },\n ratio: {\n type: Object,\n required: true\n },\n selected: {\n type: Object,\n required: true\n },\n readonly: {\n type: Object,\n required: true\n },\n setAttr: {\n type: Function,\n required: true\n },\n config: {\n type: Object,\n required: true\n }\n },\n setup({ src, caption, ratio, readonly, setAttr, config }) {\n var _a;\n const imageRef = ref();\n const resizeHandle = ref();\n const showCaption = ref(Boolean((_a = caption.value) == null ? void 0 : _a.length));\n const timer = ref(0);\n const onImageLoad = () => {\n var _a2;\n const image = imageRef.value;\n if (!image) return;\n const host = image.closest(\".milkdown-image-block\");\n if (!host) return;\n const maxWidth = host.getBoundingClientRect().width;\n if (!maxWidth) return;\n const height = image.height;\n const width = image.width;\n const transformedHeight = width < maxWidth ? height : maxWidth * (height / width);\n const h2 = (transformedHeight * ((_a2 = ratio.value) != null ? _a2 : 1)).toFixed(2);\n image.dataset.origin = transformedHeight.toFixed(2);\n image.dataset.height = h2;\n image.style.height = `${h2}px`;\n };\n const onToggleCaption = (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (readonly.value) return;\n showCaption.value = !showCaption.value;\n };\n const onInputCaption = (e) => {\n const target = e.target;\n const value = target.value;\n if (timer.value) window.clearTimeout(timer.value);\n timer.value = window.setTimeout(() => {\n setAttr(\"caption\", value);\n }, 1e3);\n };\n const onBlurCaption = (e) => {\n const target = e.target;\n const value = target.value;\n if (timer.value) {\n window.clearTimeout(timer.value);\n timer.value = 0;\n }\n setAttr(\"caption\", value);\n };\n const onResizeHandlePointerMove = (e) => {\n e.preventDefault();\n const image = imageRef.value;\n if (!image) return;\n const top = image.getBoundingClientRect().top;\n const height = e.clientY - top;\n const h2 = Number(height < 100 ? 100 : height).toFixed(2);\n image.dataset.height = h2;\n image.style.height = `${h2}px`;\n };\n const onResizeHandlePointerUp = () => {\n window.removeEventListener(\"pointermove\", onResizeHandlePointerMove);\n window.removeEventListener(\"pointerup\", onResizeHandlePointerUp);\n const image = imageRef.value;\n if (!image) return;\n const originHeight = Number(image.dataset.origin);\n const currentHeight = Number(image.dataset.height);\n const ratio2 = Number.parseFloat(\n Number(currentHeight / originHeight).toFixed(2)\n );\n if (Number.isNaN(ratio2)) return;\n setAttr(\"ratio\", ratio2);\n };\n const onResizeHandlePointerDown = (e) => {\n if (readonly.value) return;\n e.preventDefault();\n e.stopPropagation();\n window.addEventListener(\"pointermove\", onResizeHandlePointerMove);\n window.addEventListener(\"pointerup\", onResizeHandlePointerUp);\n };\n return () => {\n return /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h(\"div\", { class: \"image-wrapper\" }, /* @__PURE__ */ h(\"div\", { class: \"operation\" }, /* @__PURE__ */ h(\"div\", { class: \"operation-item\", onPointerdown: onToggleCaption }, /* @__PURE__ */ h(Icon, { icon: config.captionIcon }))), /* @__PURE__ */ h(\n \"img\",\n {\n ref: imageRef,\n \"data-type\": IMAGE_DATA_TYPE,\n onLoad: onImageLoad,\n src: src.value,\n alt: caption.value\n }\n ), /* @__PURE__ */ h(\n \"div\",\n {\n ref: resizeHandle,\n class: \"image-resize-handle\",\n onPointerdown: onResizeHandlePointerDown\n }\n )), showCaption.value && /* @__PURE__ */ h(\n \"input\",\n {\n draggable: \"true\",\n onDragstart: (e) => {\n e.preventDefault();\n e.stopPropagation();\n },\n class: \"caption-input\",\n placeholder: config == null ? void 0 : config.captionPlaceholderText,\n onInput: onInputCaption,\n onBlur: onBlurCaption,\n value: caption.value\n }\n ));\n };\n }\n});\n\nvar __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nconst MilkdownImageBlock = defineComponent({\n props: {\n src: {\n type: Object,\n required: true\n },\n caption: {\n type: Object,\n required: true\n },\n ratio: {\n type: Object,\n required: true\n },\n selected: {\n type: Object,\n required: true\n },\n readonly: {\n type: Object,\n required: true\n },\n setAttr: {\n type: Function,\n required: true\n },\n config: {\n type: Object,\n required: true\n }\n },\n setup(props) {\n const { src } = props;\n return () => {\n var _a;\n if (!((_a = src.value) == null ? void 0 : _a.length)) {\n return /* @__PURE__ */ h(\n ImageInput,\n {\n src: props.src,\n selected: props.selected,\n readonly: props.readonly,\n setLink: (link) => props.setAttr(\"src\", link),\n imageIcon: props.config.imageIcon,\n uploadButton: props.config.uploadButton,\n confirmButton: props.config.confirmButton,\n uploadPlaceholderText: props.config.uploadPlaceholderText,\n onUpload: props.config.onUpload\n }\n );\n }\n return /* @__PURE__ */ h(ImageViewer, __spreadValues({}, props));\n };\n }\n});\n\nconst imageBlockView = $view(\n imageBlockSchema.node,\n (ctx) => {\n return (initialNode, view, getPos) => {\n const src = ref(initialNode.attrs.src);\n const caption = ref(initialNode.attrs.caption);\n const ratio = ref(initialNode.attrs.ratio);\n const selected = ref(false);\n const readonly = ref(!view.editable);\n const setAttr = (attr, value) => {\n if (!view.editable) return;\n const pos = getPos();\n if (pos == null) return;\n view.dispatch(\n view.state.tr.setNodeAttribute(\n pos,\n attr,\n attr === \"src\" ? DOMPurify.sanitize(value) : value\n )\n );\n };\n const config = ctx.get(imageBlockConfig.key);\n const app = createApp(MilkdownImageBlock, {\n src,\n caption,\n ratio,\n selected,\n readonly,\n setAttr,\n config\n });\n const dom = document.createElement(\"div\");\n dom.className = \"milkdown-image-block\";\n const disposeSelectedWatcher = watchEffect(() => {\n const isSelected = selected.value;\n if (isSelected) {\n dom.classList.add(\"selected\");\n } else {\n dom.classList.remove(\"selected\");\n }\n });\n const proxyDomURL = config.proxyDomURL;\n const bindAttrs = (node) => {\n if (!proxyDomURL) {\n src.value = node.attrs.src;\n } else {\n const proxiedURL = proxyDomURL(node.attrs.src);\n if (typeof proxiedURL === \"string\") {\n src.value = proxiedURL;\n } else {\n proxiedURL.then((url) => {\n src.value = url;\n }).catch(console.error);\n }\n }\n ratio.value = node.attrs.ratio;\n caption.value = node.attrs.caption;\n readonly.value = !view.editable;\n };\n bindAttrs(initialNode);\n app.mount(dom);\n return {\n dom,\n update: (updatedNode) => {\n if (updatedNode.type !== initialNode.type) return false;\n bindAttrs(updatedNode);\n return true;\n },\n stopEvent: (e) => {\n if (e.target instanceof HTMLInputElement) return true;\n return false;\n },\n selectNode: () => {\n selected.value = true;\n },\n deselectNode: () => {\n selected.value = false;\n },\n destroy: () => {\n disposeSelectedWatcher();\n app.unmount();\n dom.remove();\n }\n };\n };\n }\n);\nwithMeta(imageBlockView, {\n displayName: \"NodeView<image-block>\",\n group: \"ImageBlock\"\n});\n\nconst imageBlockComponent = [\n remarkImageBlockPlugin,\n imageBlockSchema,\n imageBlockView,\n imageBlockConfig\n].flat();\n\nexport { IMAGE_DATA_TYPE, defaultImageBlockConfig, imageBlockComponent, imageBlockConfig, imageBlockSchema, imageBlockView, remarkImageBlockPlugin };\n//# sourceMappingURL=index.js.map\n","import { blockConfig, block, BlockProvider } from '@milkdown/kit/plugin/block';\nimport { createSlice } from '@milkdown/kit/ctx';\nimport { commandsCtx, editorViewCtx } from '@milkdown/kit/core';\nimport { paragraphSchema, clearTextInCurrentBlockCommand, setBlockTypeCommand, headingSchema, blockquoteSchema, wrapInBlockTypeCommand, hrSchema, addBlockTypeCommand, bulletListSchema, orderedListSchema, listItemSchema, codeBlockSchema, selectTextNearPosCommand } from '@milkdown/kit/preset/commonmark';\nimport { findParent } from '@milkdown/kit/prose';\nimport { TextSelection } from '@milkdown/kit/prose/state';\nimport { defineComponent, ref, computed, watch, watchEffect, onUnmounted, h, createApp, Fragment } from 'vue';\nimport { slashFactory, SlashProvider } from '@milkdown/kit/plugin/slash';\nimport { $ctx } from '@milkdown/kit/utils';\nimport { Icon } from '@milkdown/kit/component';\nimport { imageBlockSchema } from '@milkdown/kit/component/image-block';\nimport { createTable } from '@milkdown/kit/preset/gfm';\n\ncreateSlice([], \"FeaturesCtx\");\ncreateSlice({}, \"CrepeCtx\");\nfunction useCrepeFeatures(ctx) {\n return ctx.use(\"FeaturesCtx\");\n}\nfunction crepeFeatureConfig(feature) {\n return (ctx) => {\n useCrepeFeatures(ctx).update((features) => {\n if (features.includes(feature)) {\n return features;\n }\n return [...features, feature];\n });\n };\n}\n\nvar CrepeFeature = /* @__PURE__ */ ((CrepeFeature2) => {\n CrepeFeature2[\"CodeMirror\"] = \"code-mirror\";\n CrepeFeature2[\"ListItem\"] = \"list-item\";\n CrepeFeature2[\"LinkTooltip\"] = \"link-tooltip\";\n CrepeFeature2[\"Cursor\"] = \"cursor\";\n CrepeFeature2[\"ImageBlock\"] = \"image-block\";\n CrepeFeature2[\"BlockEdit\"] = \"block-edit\";\n CrepeFeature2[\"Toolbar\"] = \"toolbar\";\n CrepeFeature2[\"Placeholder\"] = \"placeholder\";\n CrepeFeature2[\"Table\"] = \"table\";\n CrepeFeature2[\"Latex\"] = \"latex\";\n return CrepeFeature2;\n})(CrepeFeature || {});\n\nconst bulletListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8070)\">\n <path\n d=\"M4 10.5C3.17 10.5 2.5 11.17 2.5 12C2.5 12.83 3.17 13.5 4 13.5C4.83 13.5 5.5 12.83 5.5 12C5.5 11.17 4.83 10.5 4 10.5ZM4 4.5C3.17 4.5 2.5 5.17 2.5 6C2.5 6.83 3.17 7.5 4 7.5C4.83 7.5 5.5 6.83 5.5 6C5.5 5.17 4.83 4.5 4 4.5ZM4 16.5C3.17 16.5 2.5 17.18 2.5 18C2.5 18.82 3.18 19.5 4 19.5C4.82 19.5 5.5 18.82 5.5 18C5.5 17.18 4.83 16.5 4 16.5ZM8 19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17H8C7.45 17 7 17.45 7 18C7 18.55 7.45 19 8 19ZM8 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11H8C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13ZM7 6C7 6.55 7.45 7 8 7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H8C7.45 5 7 5.45 7 6Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8070\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst codeIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8081)\">\n <path\n d=\"M9.4 16.6L4.8 12L9.4 7.4L8 6L2 12L8 18L9.4 16.6ZM14.6 16.6L19.2 12L14.6 7.4L16 6L22 12L16 18L14.6 16.6Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8081\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst dividerIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7900)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M19 13H5C4.45 13 4 12.55 4 12C4 11.45 4.45 11 5 11H19C19.55 11 20 11.45 20 12C20 12.55 19.55 13 19 13Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7900\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst h1Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5553)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM12 17H14V7H10V9H12V17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5553\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst h2Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5559)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15H11V13H13C14.1 13 15 12.11 15 11V9C15 7.89 14.1 7 13 7H9V9H13V11H11C9.9 11 9 11.89 9 13V17H15V15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5559\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst h3Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5565)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15V13.5C15 12.67 14.33 12 13.5 12C14.33 12 15 11.33 15 10.5V9C15 7.89 14.1 7 13 7H9V9H13V11H11V13H13V15H9V17H13C14.1 17 15 16.11 15 15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5565\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst h4Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7757)\">\n <path\n d=\"M19.04 3H5.04004C3.94004 3 3.04004 3.9 3.04004 5V19C3.04004 20.1 3.94004 21 5.04004 21H19.04C20.14 21 21.04 20.1 21.04 19V5C21.04 3.9 20.14 3 19.04 3ZM19.04 19H5.04004V5H19.04V19ZM13.04 17H15.04V7H13.04V11H11.04V7H9.04004V13H13.04V17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7757\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst h5Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7760)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15V13C15 11.89 14.1 11 13 11H11V9H15V7H9V13H13V15H9V17H13C14.1 17 15 16.11 15 15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7760\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst h6Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7763)\">\n <path\n d=\"M11 17H13C14.1 17 15 16.11 15 15V13C15 11.89 14.1 11 13 11H11V9H15V7H11C9.9 7 9 7.89 9 9V15C9 16.11 9.9 17 11 17ZM11 13H13V15H11V13ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7763\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst imageIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8075)\">\n <path\n d=\"M19 5V19H5V5H19ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM14.14 11.86L11.14 15.73L9 13.14L6 17H18L14.14 11.86Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8075\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst menuIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_971_7680)\">\n <path\n d=\"M11 18C11 19.1 10.1 20 9 20C7.9 20 7 19.1 7 18C7 16.9 7.9 16 9 16C10.1 16 11 16.9 11 18ZM9 10C7.9 10 7 10.9 7 12C7 13.1 7.9 14 9 14C10.1 14 11 13.1 11 12C11 10.9 10.1 10 9 10ZM9 4C7.9 4 7 4.9 7 6C7 7.1 7.9 8 9 8C10.1 8 11 7.1 11 6C11 4.9 10.1 4 9 4ZM15 8C16.1 8 17 7.1 17 6C17 4.9 16.1 4 15 4C13.9 4 13 4.9 13 6C13 7.1 13.9 8 15 8ZM15 10C13.9 10 13 10.9 13 12C13 13.1 13.9 14 15 14C16.1 14 17 13.1 17 12C17 10.9 16.1 10 15 10ZM15 16C13.9 16 13 16.9 13 18C13 19.1 13.9 20 15 20C16.1 20 17 19.1 17 18C17 16.9 16.1 16 15 16Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_971_7680\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst orderedListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8067)\">\n <path\n d=\"M8 7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H8C7.45 5 7 5.45 7 6C7 6.55 7.45 7 8 7ZM20 17H8C7.45 17 7 17.45 7 18C7 18.55 7.45 19 8 19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17ZM20 11H8C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11ZM4.5 16H2.5C2.22 16 2 16.22 2 16.5C2 16.78 2.22 17 2.5 17H4V17.5H3.5C3.22 17.5 3 17.72 3 18C3 18.28 3.22 18.5 3.5 18.5H4V19H2.5C2.22 19 2 19.22 2 19.5C2 19.78 2.22 20 2.5 20H4.5C4.78 20 5 19.78 5 19.5V16.5C5 16.22 4.78 16 4.5 16ZM2.5 5H3V7.5C3 7.78 3.22 8 3.5 8C3.78 8 4 7.78 4 7.5V4.5C4 4.22 3.78 4 3.5 4H2.5C2.22 4 2 4.22 2 4.5C2 4.78 2.22 5 2.5 5ZM4.5 10H2.5C2.22 10 2 10.22 2 10.5C2 10.78 2.22 11 2.5 11H3.8L2.12 12.96C2.04 13.05 2 13.17 2 13.28V13.5C2 13.78 2.22 14 2.5 14H4.5C4.78 14 5 13.78 5 13.5C5 13.22 4.78 13 4.5 13H3.2L4.88 11.04C4.96 10.95 5 10.83 5 10.72V10.5C5 10.22 4.78 10 4.5 10Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8067\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst plusIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_971_7676)\">\n <path\n d=\"M18 13H13V18C13 18.55 12.55 19 12 19C11.45 19 11 18.55 11 18V13H6C5.45 13 5 12.55 5 12C5 11.45 5.45 11 6 11H11V6C11 5.45 11.45 5 12 5C12.55 5 13 5.45 13 6V11H18C18.55 11 19 11.45 19 12C19 12.55 18.55 13 18 13Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_971_7676\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst quoteIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7897)\">\n <path\n d=\"M7.17 17C7.68 17 8.15 16.71 8.37 16.26L9.79 13.42C9.93 13.14 10 12.84 10 12.53V8C10 7.45 9.55 7 9 7H5C4.45 7 4 7.45 4 8V12C4 12.55 4.45 13 5 13H7L5.97 15.06C5.52 15.95 6.17 17 7.17 17ZM17.17 17C17.68 17 18.15 16.71 18.37 16.26L19.79 13.42C19.93 13.14 20 12.84 20 12.53V8C20 7.45 19.55 7 19 7H15C14.45 7 14 7.45 14 8V12C14 12.55 14.45 13 15 13H17L15.97 15.06C15.52 15.95 16.17 17 17.17 17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7897\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst tableIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8078)\">\n <path\n d=\"M20 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H20C21.1 21 22 20.1 22 19V5C22 3.9 21.1 3 20 3ZM20 5V8H5V5H20ZM15 19H10V10H15V19ZM5 10H8V19H5V10ZM17 19V10H20V19H17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8078\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst textIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5547)\">\n <path\n d=\"M5 5.5C5 6.33 5.67 7 6.5 7H10.5V17.5C10.5 18.33 11.17 19 12 19C12.83 19 13.5 18.33 13.5 17.5V7H17.5C18.33 7 19 6.33 19 5.5C19 4.67 18.33 4 17.5 4H6.5C5.67 4 5 4.67 5 5.5Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5547\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst todoListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M5.66936 16.3389L9.39244 12.6158C9.54115 12.4671 9.71679 12.3937 9.91936 12.3957C10.1219 12.3976 10.2975 12.4761 10.4463 12.6312C10.5847 12.7823 10.654 12.9585 10.654 13.1599C10.654 13.3613 10.5847 13.5363 10.4463 13.6851L6.32704 17.8197C6.14627 18.0004 5.93538 18.0908 5.69436 18.0908C5.45333 18.0908 5.24243 18.0004 5.06166 17.8197L3.01744 15.7754C2.87899 15.637 2.81136 15.4629 2.81456 15.2533C2.81776 15.0437 2.88859 14.8697 3.02706 14.7312C3.16551 14.5928 3.34008 14.5235 3.55076 14.5235C3.76144 14.5235 3.93494 14.5928 4.07126 14.7312L5.66936 16.3389ZM5.66936 8.72359L9.39244 5.00049C9.54115 4.85177 9.71679 4.77838 9.91936 4.78031C10.1219 4.78223 10.2975 4.86075 10.4463 5.01586C10.5847 5.16691 10.654 5.34314 10.654 5.54454C10.654 5.74592 10.5847 5.92097 10.4463 6.06969L6.32704 10.2043C6.14627 10.3851 5.93538 10.4755 5.69436 10.4755C5.45333 10.4755 5.24243 10.3851 5.06166 10.2043L3.01744 8.16009C2.87899 8.02162 2.81136 7.84759 2.81456 7.63799C2.81776 7.42837 2.88859 7.25433 3.02706 7.11586C3.16551 6.97741 3.34008 6.90819 3.55076 6.90819C3.76144 6.90819 3.93494 6.97741 4.07126 7.11586L5.66936 8.72359ZM13.7597 16.5581C13.5472 16.5581 13.3691 16.4862 13.2253 16.3424C13.0816 16.1986 13.0097 16.0204 13.0097 15.8078C13.0097 15.5952 13.0816 15.4171 13.2253 15.2735C13.3691 15.13 13.5472 15.0582 13.7597 15.0582H20.7597C20.9722 15.0582 21.1503 15.1301 21.2941 15.2739C21.4378 15.4177 21.5097 15.5959 21.5097 15.8085C21.5097 16.0211 21.4378 16.1992 21.2941 16.3427C21.1503 16.4863 20.9722 16.5581 20.7597 16.5581H13.7597ZM13.7597 8.94276C13.5472 8.94276 13.3691 8.87085 13.2253 8.72704C13.0816 8.58324 13.0097 8.40504 13.0097 8.19244C13.0097 7.97985 13.0816 7.80177 13.2253 7.65819C13.3691 7.5146 13.5472 7.44281 13.7597 7.44281H20.7597C20.9722 7.44281 21.1503 7.51471 21.2941 7.65851C21.4378 7.80233 21.5097 7.98053 21.5097 8.19311C21.5097 8.40571 21.4378 8.5838 21.2941 8.72739C21.1503 8.87097 20.9722 8.94276 20.7597 8.94276H13.7597Z\"\n />\n </svg>\n`;\n\nconst functionsIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M7 19v-.808L13.096 12L7 5.808V5h10v1.25H9.102L14.727 12l-5.625 5.77H17V19z\"\n />\n </svg>\n`;\n\nfunction isInCodeBlock(selection) {\n const type = selection.$from.parent.type;\n return type.name === \"code_block\";\n}\nfunction isInList(selection) {\n var _a;\n const type = (_a = selection.$from.node(selection.$from.depth - 1)) == null ? void 0 : _a.type;\n return (type == null ? void 0 : type.name) === \"list_item\";\n}\n\nvar __typeError$2 = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck$2 = (obj, member, msg) => member.has(obj) || __typeError$2(\"Cannot \" + msg);\nvar __privateGet$2 = (obj, member, getter) => (__accessCheck$2(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd$2 = (obj, member, value) => member.has(obj) ? __typeError$2(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet$2 = (obj, member, value, setter) => (__accessCheck$2(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _groups, _getGroupInstance;\nclass GroupBuilder {\n constructor() {\n __privateAdd$2(this, _groups, []);\n this.clear = () => {\n __privateSet$2(this, _groups, []);\n return this;\n };\n __privateAdd$2(this, _getGroupInstance, (group) => {\n const groupInstance = {\n group,\n addItem: (key, item) => {\n const data = { ...item, key };\n group.items.push(data);\n return groupInstance;\n },\n clear: () => {\n group.items = [];\n return groupInstance;\n }\n };\n return groupInstance;\n });\n this.addGroup = (key, label) => {\n const items = [];\n const group = {\n key,\n label,\n items\n };\n __privateGet$2(this, _groups).push(group);\n return __privateGet$2(this, _getGroupInstance).call(this, group);\n };\n this.getGroup = (key) => {\n const group = __privateGet$2(this, _groups).find((group2) => group2.key === key);\n if (!group) throw new Error(`Group with key ${key} not found`);\n return __privateGet$2(this, _getGroupInstance).call(this, group);\n };\n this.build = () => {\n return __privateGet$2(this, _groups);\n };\n }\n}\n_groups = new WeakMap();\n_getGroupInstance = new WeakMap();\n\nfunction getGroups(filter, config, ctx) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$, _aa, _ba, _ca, _da, _ea, _fa, _ga, _ha, _ia, _ja, _ka, _la, _ma, _na, _oa, _pa, _qa, _ra, _sa, _ta, _ua, _va, _wa, _xa, _ya, _za, _Aa, _Ba, _Ca, _Da, _Ea, _Fa, _Ga, _Ha, _Ia, _Ja, _Ka, _La, _Ma, _Na, _Oa, _Pa, _Qa, _Ra, _Sa, _Ta, _Ua, _Va, _Wa, _Xa, _Ya, _Za, __a, _$a, _ab, _bb, _cb, _db, _eb, _fb, _gb, _hb, _ib, _jb, _kb;\n const flags = ctx && useCrepeFeatures(ctx).get();\n const isLatexEnabled = flags == null ? void 0 : flags.includes(CrepeFeature.Latex);\n const isImageBlockEnabled = flags == null ? void 0 : flags.includes(CrepeFeature.ImageBlock);\n const isTableEnabled = flags == null ? void 0 : flags.includes(CrepeFeature.Table);\n const groupBuilder = new GroupBuilder();\n if ((config == null ? void 0 : config.textGroup) !== null) {\n const textGroup = groupBuilder.addGroup(\n \"text\",\n (_b = (_a = config == null ? void 0 : config.textGroup) == null ? void 0 : _a.label) != null ? _b : \"Text\"\n );\n if (((_c = config == null ? void 0 : config.textGroup) == null ? void 0 : _c.text) !== null) {\n textGroup.addItem(\"text\", {\n label: (_f = (_e = (_d = config == null ? void 0 : config.textGroup) == null ? void 0 : _d.text) == null ? void 0 : _e.label) != null ? _f : \"Text\",\n icon: (_i = (_h = (_g = config == null ? void 0 : config.textGroup) == null ? void 0 : _g.text) == null ? void 0 : _h.icon) != null ? _i : textIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const paragraph = paragraphSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(setBlockTypeCommand.key, {\n nodeType: paragraph\n });\n }\n });\n }\n if (((_j = config == null ? void 0 : config.textGroup) == null ? void 0 : _j.h1) !== null) {\n textGroup.addItem(\"h1\", {\n label: (_m = (_l = (_k = config == null ? void 0 : config.textGroup) == null ? void 0 : _k.h1) == null ? void 0 : _l.label) != null ? _m : \"Heading 1\",\n icon: (_p = (_o = (_n = config == null ? void 0 : config.textGroup) == null ? void 0 : _n.h1) == null ? void 0 : _o.icon) != null ? _p : h1Icon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const heading = headingSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 1\n }\n });\n }\n });\n }\n if (((_q = config == null ? void 0 : config.textGroup) == null ? void 0 : _q.h2) !== null) {\n textGroup.addItem(\"h2\", {\n label: (_t = (_s = (_r = config == null ? void 0 : config.textGroup) == null ? void 0 : _r.h2) == null ? void 0 : _s.label) != null ? _t : \"Heading 2\",\n icon: (_w = (_v = (_u = config == null ? void 0 : config.textGroup) == null ? void 0 : _u.h2) == null ? void 0 : _v.icon) != null ? _w : h2Icon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const heading = headingSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 2\n }\n });\n }\n });\n }\n if (((_x = config == null ? void 0 : config.textGroup) == null ? void 0 : _x.h3) !== null) {\n textGroup.addItem(\"h3\", {\n label: (_A = (_z = (_y = config == null ? void 0 : config.textGroup) == null ? void 0 : _y.h3) == null ? void 0 : _z.label) != null ? _A : \"Heading 3\",\n icon: (_D = (_C = (_B = config == null ? void 0 : config.textGroup) == null ? void 0 : _B.h3) == null ? void 0 : _C.icon) != null ? _D : h3Icon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const heading = headingSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 3\n }\n });\n }\n });\n }\n if (((_E = config == null ? void 0 : config.textGroup) == null ? void 0 : _E.h4) !== null) {\n textGroup.addItem(\"h4\", {\n label: (_H = (_G = (_F = config == null ? void 0 : config.textGroup) == null ? void 0 : _F.h4) == null ? void 0 : _G.label) != null ? _H : \"Heading 4\",\n icon: (_K = (_J = (_I = config == null ? void 0 : config.textGroup) == null ? void 0 : _I.h4) == null ? void 0 : _J.icon) != null ? _K : h4Icon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const heading = headingSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 4\n }\n });\n }\n });\n }\n if (((_L = config == null ? void 0 : config.textGroup) == null ? void 0 : _L.h5) !== null) {\n textGroup.addItem(\"h5\", {\n label: (_O = (_N = (_M = config == null ? void 0 : config.textGroup) == null ? void 0 : _M.h5) == null ? void 0 : _N.label) != null ? _O : \"Heading 5\",\n icon: (_R = (_Q = (_P = config == null ? void 0 : config.textGroup) == null ? void 0 : _P.h5) == null ? void 0 : _Q.icon) != null ? _R : h5Icon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const heading = headingSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 5\n }\n });\n }\n });\n }\n if (((_S = config == null ? void 0 : config.textGroup) == null ? void 0 : _S.h6) !== null) {\n textGroup.addItem(\"h6\", {\n label: (_V = (_U = (_T = config == null ? void 0 : config.textGroup) == null ? void 0 : _T.h6) == null ? void 0 : _U.label) != null ? _V : \"Heading 6\",\n icon: (_Y = (_X = (_W = config == null ? void 0 : config.textGroup) == null ? void 0 : _W.h6) == null ? void 0 : _X.icon) != null ? _Y : h6Icon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const heading = headingSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 6\n }\n });\n }\n });\n }\n if (((_Z = config == null ? void 0 : config.textGroup) == null ? void 0 : _Z.quote) !== null) {\n textGroup.addItem(\"quote\", {\n label: (_aa = (_$ = (__ = config == null ? void 0 : config.textGroup) == null ? void 0 : __.quote) == null ? void 0 : _$.label) != null ? _aa : \"Quote\",\n icon: (_da = (_ca = (_ba = config == null ? void 0 : config.textGroup) == null ? void 0 : _ba.quote) == null ? void 0 : _ca.icon) != null ? _da : quoteIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const blockquote = blockquoteSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: blockquote\n });\n }\n });\n }\n if (((_ea = config == null ? void 0 : config.textGroup) == null ? void 0 : _ea.divider) !== null) {\n textGroup.addItem(\"divider\", {\n label: (_ha = (_ga = (_fa = config == null ? void 0 : config.textGroup) == null ? void 0 : _fa.divider) == null ? void 0 : _ga.label) != null ? _ha : \"Divider\",\n icon: (_ka = (_ja = (_ia = config == null ? void 0 : config.textGroup) == null ? void 0 : _ia.divider) == null ? void 0 : _ja.icon) != null ? _ka : dividerIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const hr = hrSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(addBlockTypeCommand.key, {\n nodeType: hr\n });\n }\n });\n }\n }\n if ((config == null ? void 0 : config.listGroup) !== null) {\n const listGroup = groupBuilder.addGroup(\n \"list\",\n (_ma = (_la = config == null ? void 0 : config.listGroup) == null ? void 0 : _la.label) != null ? _ma : \"List\"\n );\n if (((_na = config == null ? void 0 : config.listGroup) == null ? void 0 : _na.bulletList) !== null) {\n listGroup.addItem(\"bullet-list\", {\n label: (_qa = (_pa = (_oa = config == null ? void 0 : config.listGroup) == null ? void 0 : _oa.bulletList) == null ? void 0 : _pa.label) != null ? _qa : \"Bullet List\",\n icon: (_ta = (_sa = (_ra = config == null ? void 0 : config.listGroup) == null ? void 0 : _ra.bulletList) == null ? void 0 : _sa.icon) != null ? _ta : bulletListIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const bulletList = bulletListSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: bulletList\n });\n }\n });\n }\n if (((_ua = config == null ? void 0 : config.listGroup) == null ? void 0 : _ua.orderedList) !== null) {\n listGroup.addItem(\"ordered-list\", {\n label: (_xa = (_wa = (_va = config == null ? void 0 : config.listGroup) == null ? void 0 : _va.orderedList) == null ? void 0 : _wa.label) != null ? _xa : \"Ordered List\",\n icon: (_Aa = (_za = (_ya = config == null ? void 0 : config.listGroup) == null ? void 0 : _ya.orderedList) == null ? void 0 : _za.icon) != null ? _Aa : orderedListIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const orderedList = orderedListSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: orderedList\n });\n }\n });\n }\n if (((_Ba = config == null ? void 0 : config.listGroup) == null ? void 0 : _Ba.taskList) !== null) {\n listGroup.addItem(\"task-list\", {\n label: (_Ea = (_Da = (_Ca = config == null ? void 0 : config.listGroup) == null ? void 0 : _Ca.taskList) == null ? void 0 : _Da.label) != null ? _Ea : \"Task List\",\n icon: (_Ha = (_Ga = (_Fa = config == null ? void 0 : config.listGroup) == null ? void 0 : _Fa.taskList) == null ? void 0 : _Ga.icon) != null ? _Ha : todoListIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const listItem = listItemSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: listItem,\n attrs: { checked: false }\n });\n }\n });\n }\n }\n if ((config == null ? void 0 : config.advancedGroup) !== null) {\n const advancedGroup = groupBuilder.addGroup(\n \"advanced\",\n (_Ja = (_Ia = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _Ia.label) != null ? _Ja : \"Advanced\"\n );\n if (((_Ka = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _Ka.image) !== null && isImageBlockEnabled) {\n advancedGroup.addItem(\"image\", {\n label: (_Na = (_Ma = (_La = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _La.image) == null ? void 0 : _Ma.label) != null ? _Na : \"Image\",\n icon: (_Qa = (_Pa = (_Oa = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _Oa.image) == null ? void 0 : _Pa.icon) != null ? _Qa : imageIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const imageBlock = imageBlockSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(addBlockTypeCommand.key, {\n nodeType: imageBlock\n });\n }\n });\n }\n if (((_Ra = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _Ra.codeBlock) !== null) {\n advancedGroup.addItem(\"code\", {\n label: (_Ua = (_Ta = (_Sa = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _Sa.codeBlock) == null ? void 0 : _Ta.label) != null ? _Ua : \"Code\",\n icon: (_Xa = (_Wa = (_Va = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _Va.codeBlock) == null ? void 0 : _Wa.icon) != null ? _Xa : codeIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const codeBlock = codeBlockSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(setBlockTypeCommand.key, {\n nodeType: codeBlock\n });\n }\n });\n }\n if (((_Ya = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _Ya.table) !== null && isTableEnabled) {\n advancedGroup.addItem(\"table\", {\n label: (_$a = (__a = (_Za = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _Za.table) == null ? void 0 : __a.label) != null ? _$a : \"Table\",\n icon: (_cb = (_bb = (_ab = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _ab.table) == null ? void 0 : _bb.icon) != null ? _cb : tableIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const view = ctx2.get(editorViewCtx);\n commands.call(clearTextInCurrentBlockCommand.key);\n const { from } = view.state.selection;\n commands.call(addBlockTypeCommand.key, {\n nodeType: createTable(ctx2, 3, 3)\n });\n commands.call(selectTextNearPosCommand.key, {\n pos: from\n });\n }\n });\n }\n if (((_db = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _db.math) !== null && isLatexEnabled) {\n advancedGroup.addItem(\"math\", {\n label: (_gb = (_fb = (_eb = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _eb.math) == null ? void 0 : _fb.label) != null ? _gb : \"Math\",\n icon: (_jb = (_ib = (_hb = config == null ? void 0 : config.advancedGroup) == null ? void 0 : _hb.math) == null ? void 0 : _ib.icon) != null ? _jb : functionsIcon,\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n const codeBlock = codeBlockSchema.type(ctx2);\n commands.call(clearTextInCurrentBlockCommand.key);\n commands.call(addBlockTypeCommand.key, {\n nodeType: codeBlock,\n attrs: { language: \"LaTex\" }\n });\n }\n });\n }\n }\n (_kb = config == null ? void 0 : config.buildMenu) == null ? void 0 : _kb.call(config, groupBuilder);\n let groups = groupBuilder.build();\n if (filter) {\n groups = groups.map((group) => {\n const items2 = group.items.filter(\n (item) => item.label.toLowerCase().includes(filter.toLowerCase())\n );\n return {\n ...group,\n items: items2\n };\n }).filter((group) => group.items.length > 0);\n }\n const items = groups.flatMap((groups2) => groups2.items);\n items.forEach((item, index) => {\n Object.assign(item, { index });\n });\n groups.reduce((acc, group) => {\n const end = acc + group.items.length;\n Object.assign(group, {\n range: [acc, end]\n });\n return end;\n }, 0);\n return {\n groups,\n size: items.length\n };\n}\n\nconst Menu = defineComponent({\n props: {\n ctx: {\n type: Object,\n required: true\n },\n show: {\n type: Object,\n required: true\n },\n filter: {\n type: Object,\n required: true\n },\n hide: {\n type: Function,\n required: true\n },\n config: {\n type: Object,\n required: false\n }\n },\n setup({ ctx, show, filter, hide, config }) {\n const host = ref();\n const groupInfo = computed(() => getGroups(filter.value, config, ctx));\n const hoverIndex = ref(0);\n const prevMousePosition = ref({ x: -999, y: -999 });\n const onPointerMove = (e) => {\n const { x, y } = e;\n prevMousePosition.value = { x, y };\n };\n watch([groupInfo, show], () => {\n const { size } = groupInfo.value;\n if (size === 0 && show.value) hide();\n else if (hoverIndex.value >= size) hoverIndex.value = 0;\n });\n const onHover = (index, after) => {\n const prevHoverIndex = hoverIndex.value;\n const next = typeof index === \"function\" ? index(prevHoverIndex) : index;\n after == null ? void 0 : after(next);\n hoverIndex.value = next;\n };\n const scrollToIndex = (index) => {\n var _a, _b;\n const target = (_a = host.value) == null ? void 0 : _a.querySelector(\n `[data-index=\"${index}\"]`\n );\n const scrollRoot = (_b = host.value) == null ? void 0 : _b.querySelector(\".menu-groups\");\n if (!target || !scrollRoot) return;\n scrollRoot.scrollTop = target.offsetTop - scrollRoot.offsetTop;\n };\n const runByIndex = (index) => {\n const item = groupInfo.value.groups.flatMap((group) => group.items).at(index);\n if (item && ctx) item.onRun(ctx);\n hide();\n };\n const onKeydown = (e) => {\n const { size, groups } = groupInfo.value;\n if (e.key === \"Escape\") {\n e.preventDefault();\n hide == null ? void 0 : hide();\n return;\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n return onHover(\n (index) => index < size - 1 ? index + 1 : index,\n scrollToIndex\n );\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n return onHover(\n (index) => index <= 0 ? index : index - 1,\n scrollToIndex\n );\n }\n if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n return onHover((index) => {\n const group = groups.find(\n (group2) => group2.range[0] <= index && group2.range[1] > index\n );\n if (!group) return index;\n const prevGroup = groups[groups.indexOf(group) - 1];\n if (!prevGroup) return index;\n return prevGroup.range[1] - 1;\n }, scrollToIndex);\n }\n if (e.key === \"ArrowRight\") {\n e.preventDefault();\n return onHover((index) => {\n const group = groups.find(\n (group2) => group2.range[0] <= index && group2.range[1] > index\n );\n if (!group) return index;\n const nextGroup = groups[groups.indexOf(group) + 1];\n if (!nextGroup) return index;\n return nextGroup.range[0];\n }, scrollToIndex);\n }\n if (e.key === \"Enter\") {\n e.preventDefault();\n runByIndex(hoverIndex.value);\n }\n };\n const getOnPointerEnter = (index) => (e) => {\n const prevPos = prevMousePosition.value;\n if (!prevPos) return;\n const { x, y } = e;\n if (x === prevPos.x && y === prevPos.y) return;\n onHover(index);\n };\n watchEffect(() => {\n const isShown = show.value;\n if (isShown) {\n window.addEventListener(\"keydown\", onKeydown, { capture: true });\n } else {\n window.removeEventListener(\"keydown\", onKeydown, { capture: true });\n }\n });\n onUnmounted(() => {\n window.removeEventListener(\"keydown\", onKeydown, { capture: true });\n });\n return () => {\n return /* @__PURE__ */ h(\"div\", { ref: host, onPointerdown: (e) => e.preventDefault() }, /* @__PURE__ */ h(\"nav\", { class: \"tab-group\" }, /* @__PURE__ */ h(\"ul\", null, groupInfo.value.groups.map((group) => /* @__PURE__ */ h(\n \"li\",\n {\n key: group.key,\n onPointerdown: () => onHover(group.range[0], scrollToIndex),\n class: hoverIndex.value >= group.range[0] && hoverIndex.value < group.range[1] ? \"selected\" : \"\"\n },\n group.label\n )))), /* @__PURE__ */ h(\"div\", { class: \"menu-groups\", onPointermove: onPointerMove }, groupInfo.value.groups.map((group) => /* @__PURE__ */ h(\"div\", { key: group.key, class: \"menu-group\" }, /* @__PURE__ */ h(\"h6\", null, group.label), /* @__PURE__ */ h(\"ul\", null, group.items.map((item) => /* @__PURE__ */ h(\n \"li\",\n {\n key: item.key,\n \"data-index\": item.index,\n class: hoverIndex.value === item.index ? \"hover\" : \"\",\n onPointerenter: getOnPointerEnter(item.index),\n onPointerdown: () => {\n var _a, _b;\n (_b = (_a = host.value) == null ? void 0 : _a.querySelector(`[data-index=\"${item.index}\"]`)) == null ? void 0 : _b.classList.add(\"active\");\n },\n onPointerup: () => {\n var _a, _b;\n (_b = (_a = host.value) == null ? void 0 : _a.querySelector(`[data-index=\"${item.index}\"]`)) == null ? void 0 : _b.classList.remove(\"active\");\n runByIndex(item.index);\n }\n },\n /* @__PURE__ */ h(Icon, { icon: item.icon }),\n /* @__PURE__ */ h(\"span\", null, item.label)\n )))))));\n };\n }\n});\n\nvar __typeError$1 = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck$1 = (obj, member, msg) => member.has(obj) || __typeError$1(\"Cannot \" + msg);\nvar __privateGet$1 = (obj, member, getter) => (__accessCheck$1(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd$1 = (obj, member, value) => member.has(obj) ? __typeError$1(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet$1 = (obj, member, value, setter) => (__accessCheck$1(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _content$1, _app$1, _filter, _slashProvider, _programmaticallyPos;\nconst menu = slashFactory(\"CREPE_MENU\");\nconst menuAPI = $ctx(\n {\n show: () => {\n },\n hide: () => {\n }\n },\n \"menuAPICtx\"\n);\nfunction configureMenu(ctx, config) {\n ctx.set(menu.key, {\n view: (view) => new MenuView(ctx, view, config)\n });\n}\nclass MenuView {\n constructor(ctx, view, config) {\n __privateAdd$1(this, _content$1);\n __privateAdd$1(this, _app$1);\n __privateAdd$1(this, _filter);\n __privateAdd$1(this, _slashProvider);\n __privateAdd$1(this, _programmaticallyPos, null);\n this.update = (view) => {\n __privateGet$1(this, _slashProvider).update(view);\n };\n this.show = (pos) => {\n __privateSet$1(this, _programmaticallyPos, pos);\n __privateGet$1(this, _filter).value = \"\";\n __privateGet$1(this, _slashProvider).show();\n };\n this.hide = () => {\n __privateSet$1(this, _programmaticallyPos, null);\n __privateGet$1(this, _slashProvider).hide();\n };\n this.destroy = () => {\n __privateGet$1(this, _slashProvider).destroy();\n __privateGet$1(this, _app$1).unmount();\n __privateGet$1(this, _content$1).remove();\n };\n const content = document.createElement(\"div\");\n content.classList.add(\"milkdown-slash-menu\");\n const show = ref(false);\n const filter = ref(\"\");\n __privateSet$1(this, _filter, filter);\n const hide = this.hide;\n const app = createApp(Menu, {\n ctx,\n config,\n show,\n filter,\n hide\n });\n __privateSet$1(this, _app$1, app);\n app.mount(content);\n __privateSet$1(this, _content$1, content);\n const self = this;\n __privateSet$1(this, _slashProvider, new SlashProvider({\n content: __privateGet$1(this, _content$1),\n debounce: 20,\n shouldShow(view2) {\n if (isInCodeBlock(view2.state.selection) || isInList(view2.state.selection))\n return false;\n const currentText = this.getContent(\n view2,\n (node) => [\"paragraph\", \"heading\"].includes(node.type.name)\n );\n if (currentText == null) return false;\n if (!isSelectionAtEndOfNode(view2.state.selection)) {\n return false;\n }\n const pos = __privateGet$1(self, _programmaticallyPos);\n filter.value = currentText.startsWith(\"/\") ? currentText.slice(1) : currentText;\n if (typeof pos === \"number\") {\n const maxSize = view2.state.doc.nodeSize - 2;\n const validPos = Math.min(pos, maxSize);\n if (view2.state.doc.resolve(validPos).node() !== view2.state.doc.resolve(view2.state.selection.from).node()) {\n __privateSet$1(self, _programmaticallyPos, null);\n return false;\n }\n return true;\n }\n if (!currentText.startsWith(\"/\")) return false;\n return true;\n },\n offset: 10\n }));\n __privateGet$1(this, _slashProvider).onShow = () => {\n show.value = true;\n };\n __privateGet$1(this, _slashProvider).onHide = () => {\n show.value = false;\n };\n this.update(view);\n ctx.set(menuAPI.key, {\n show: (pos) => this.show(pos),\n hide: () => this.hide()\n });\n }\n}\n_content$1 = new WeakMap();\n_app$1 = new WeakMap();\n_filter = new WeakMap();\n_slashProvider = new WeakMap();\n_programmaticallyPos = new WeakMap();\nfunction isSelectionAtEndOfNode(selection) {\n if (!(selection instanceof TextSelection)) return false;\n const { $head } = selection;\n const parent = $head.parent;\n const offset = $head.parentOffset;\n return offset === parent.content.size;\n}\n\nconst BlockHandle = defineComponent({\n props: {\n onAdd: {\n type: Function,\n required: true\n },\n addIcon: {\n type: String,\n required: true\n },\n handleIcon: {\n type: String,\n required: true\n }\n },\n setup(props) {\n const addButton = ref();\n return () => {\n return /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h(\n \"div\",\n {\n ref: addButton,\n class: \"operation-item\",\n onPointerdown: (e) => {\n var _a;\n e.preventDefault();\n e.stopPropagation();\n (_a = addButton.value) == null ? void 0 : _a.classList.add(\"active\");\n },\n onPointerup: (e) => {\n var _a;\n e.preventDefault();\n e.stopPropagation();\n (_a = addButton.value) == null ? void 0 : _a.classList.remove(\"active\");\n props.onAdd();\n }\n },\n /* @__PURE__ */ h(Icon, { icon: props.addIcon })\n ), /* @__PURE__ */ h(\"div\", { class: \"operation-item\" }, /* @__PURE__ */ h(Icon, { icon: props.handleIcon })));\n };\n }\n});\n\nvar __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _content, _provider, _app, _ctx;\nclass BlockHandleView {\n constructor(ctx, config) {\n __privateAdd(this, _content);\n __privateAdd(this, _provider);\n __privateAdd(this, _app);\n __privateAdd(this, _ctx);\n this.update = () => {\n __privateGet(this, _provider).update();\n };\n this.destroy = () => {\n __privateGet(this, _provider).destroy();\n __privateGet(this, _content).remove();\n __privateGet(this, _app).unmount();\n };\n this.onAdd = () => {\n const ctx = __privateGet(this, _ctx);\n const view = ctx.get(editorViewCtx);\n if (!view.hasFocus()) view.focus();\n const { state, dispatch } = view;\n const active = __privateGet(this, _provider).active;\n if (!active) return;\n const $pos = active.$pos;\n const pos = $pos.pos + active.node.nodeSize;\n let tr = state.tr.insert(pos, paragraphSchema.type(ctx).create());\n tr = tr.setSelection(TextSelection.near(tr.doc.resolve(pos)));\n dispatch(tr.scrollIntoView());\n __privateGet(this, _provider).hide();\n ctx.get(menuAPI.key).show(tr.selection.from);\n };\n var _a, _b, _c;\n __privateSet(this, _ctx, ctx);\n const content = document.createElement(\"div\");\n content.classList.add(\"milkdown-block-handle\");\n const app = createApp(BlockHandle, {\n onAdd: this.onAdd,\n addIcon: (_a = config == null ? void 0 : config.handleAddIcon) != null ? _a : plusIcon,\n handleIcon: (_b = config == null ? void 0 : config.handleDragIcon) != null ? _b : menuIcon\n });\n app.mount(content);\n __privateSet(this, _app, app);\n __privateSet(this, _content, content);\n const blockProviderOptions = (_c = config == null ? void 0 : config.blockHandle) != null ? _c : {};\n __privateSet(this, _provider, new BlockProvider({\n ctx,\n content,\n getOffset: () => 16,\n getPlacement: ({ active, blockDom }) => {\n if (active.node.type.name === \"heading\") return \"left\";\n let totalDescendant = 0;\n active.node.descendants((node) => {\n totalDescendant += node.childCount;\n });\n const dom = active.el;\n const domRect = dom.getBoundingClientRect();\n const handleRect = blockDom.getBoundingClientRect();\n const style = window.getComputedStyle(dom);\n const paddingTop = Number.parseInt(style.paddingTop, 10) || 0;\n const paddingBottom = Number.parseInt(style.paddingBottom, 10) || 0;\n const height = domRect.height - paddingTop - paddingBottom;\n const handleHeight = handleRect.height;\n return totalDescendant > 2 || handleHeight < height ? \"left-start\" : \"left\";\n },\n ...blockProviderOptions\n }));\n this.update();\n }\n}\n_content = new WeakMap();\n_provider = new WeakMap();\n_app = new WeakMap();\n_ctx = new WeakMap();\nfunction configureBlockHandle(ctx, config) {\n ctx.set(blockConfig.key, {\n filterNodes: (pos) => {\n const filter = findParent(\n (node) => [\"table\", \"blockquote\", \"math_inline\"].includes(node.type.name)\n )(pos);\n if (filter) return false;\n return true;\n }\n });\n ctx.set(block.key, {\n view: () => new BlockHandleView(ctx, config)\n });\n}\n\nconst blockEdit = (editor, config) => {\n editor.config(crepeFeatureConfig(CrepeFeature.BlockEdit)).config((ctx) => configureBlockHandle(ctx, config)).config((ctx) => configureMenu(ctx, config)).use(menuAPI).use(block).use(menu);\n};\n\nexport { blockEdit };\n//# sourceMappingURL=index.js.map\n","import { computePosition, flip, offset, shift, autoUpdate } from \"@floating-ui/dom\";\nimport { posToDOMRect } from \"@milkdown/prose\";\nimport { TextSelection, Plugin, PluginKey } from \"@milkdown/prose/state\";\nimport { throttle } from \"lodash-es\";\nimport { $ctx, $prose } from \"@milkdown/utils\";\nclass TooltipProvider {\n constructor(options) {\n this.#initialized = false;\n this.onShow = () => {\n };\n this.onHide = () => {\n };\n this.#updatePosition = (reference) => {\n computePosition(reference, this.element, {\n placement: this.#floatingUIOptions.placement ?? \"top\",\n middleware: [\n flip(),\n offset(this.#offset),\n shift(this.#shift),\n ...this.#middleware\n ],\n ...this.#floatingUIOptions\n }).then(({ x, y }) => {\n Object.assign(this.element.style, {\n left: `${x}px`,\n top: `${y}px`\n });\n }).catch(console.error);\n };\n this.#shouldAutoUpdate = (editorView) => {\n return this.#root !== editorView.dom.parentElement;\n };\n this.#onUpdate = (view, prevState) => {\n const { state, composing } = view;\n const { selection, doc } = state;\n const { ranges } = selection;\n const from = Math.min(...ranges.map((range) => range.$from.pos));\n const to = Math.max(...ranges.map((range) => range.$to.pos));\n const isSame = prevState && prevState.doc.eq(doc) && prevState.selection.eq(selection);\n if (!this.#initialized) {\n const root = this.#root ?? view.dom.parentElement ?? document.body;\n root.appendChild(this.element);\n this.#initialized = true;\n }\n if (composing || isSame) return;\n this.#cleanupAutoUpdate?.();\n this.#cleanupAutoUpdate = void 0;\n if (!this.#shouldShow(view, prevState)) {\n this.hide();\n return;\n }\n const virtualEl = {\n getBoundingClientRect: () => posToDOMRect(view, from, to),\n contextElement: view.dom\n };\n if (this.#shouldAutoUpdate(view)) {\n this.#cleanupAutoUpdate = autoUpdate(\n virtualEl,\n this.element,\n () => this.#updatePosition(virtualEl)\n );\n } else {\n this.#updatePosition(virtualEl);\n }\n this.show();\n };\n this.update = (view, prevState) => {\n this.#updater(view, prevState);\n };\n this.destroy = () => {\n this.#cleanupAutoUpdate?.();\n this.#updater.cancel();\n };\n this.show = (virtualElement, editorView) => {\n this.element.dataset.show = \"true\";\n if (virtualElement) {\n this.#cleanupAutoUpdate?.();\n this.#cleanupAutoUpdate = void 0;\n const reference = { ...virtualElement, contextElement: editorView?.dom };\n if (editorView && this.#shouldAutoUpdate(editorView)) {\n this.#cleanupAutoUpdate = autoUpdate(\n reference,\n this.element,\n () => this.#updatePosition(reference)\n );\n } else {\n this.#updatePosition(reference);\n }\n }\n this.onShow();\n };\n this.hide = () => {\n if (this.element.dataset.show === \"false\") return;\n this.element.dataset.show = \"false\";\n this.onHide();\n };\n this.element = options.content;\n this.#debounce = options.debounce ?? 200;\n this.#shouldShow = options.shouldShow ?? this.#_shouldShow;\n this.#offset = options.offset;\n this.#shift = options.shift;\n this.#middleware = options.middleware ?? [];\n this.#floatingUIOptions = options.floatingUIOptions ?? {};\n this.#root = options.root;\n this.element.dataset.show = \"false\";\n this.#updater = throttle(this.#onUpdate, this.#debounce);\n }\n /// @internal\n #debounce;\n /// @internal\n #shouldShow;\n /// @internal\n #middleware;\n /// @internal\n #floatingUIOptions;\n /// @internal\n #root;\n #initialized;\n /// @internal\n #cleanupAutoUpdate;\n /// @internal\n #offset;\n /// @internal\n #shift;\n /// @internal\n #updater;\n #updatePosition;\n #shouldAutoUpdate;\n #onUpdate;\n /// @internal\n #_shouldShow(view) {\n const { doc, selection } = view.state;\n const { empty, from, to } = selection;\n const isEmptyTextBlock = !doc.textBetween(from, to).length && view.state.selection instanceof TextSelection;\n const isTooltipChildren = this.element.contains(document.activeElement);\n const notHasFocus = !view.hasFocus() && !isTooltipChildren;\n const isReadonly = !view.editable;\n if (notHasFocus || empty || isEmptyTextBlock || isReadonly) return false;\n return true;\n }\n}\nfunction tooltipFactory(id) {\n const tooltipSpec = $ctx(\n {},\n `${id}_TOOLTIP_SPEC`\n );\n const tooltipPlugin = $prose((ctx) => {\n const spec = ctx.get(tooltipSpec.key);\n return new Plugin({\n key: new PluginKey(`${id}_TOOLTIP`),\n ...spec\n });\n });\n const result = [tooltipSpec, tooltipPlugin];\n result.key = tooltipSpec.key;\n result.pluginKey = tooltipPlugin.key;\n tooltipSpec.meta = {\n package: \"@milkdown/plugin-tooltip\",\n displayName: `Ctx<tooltipSpec>|${id}`\n };\n tooltipPlugin.meta = {\n package: \"@milkdown/plugin-tooltip\",\n displayName: `Prose<tooltip>|${id}`\n };\n return result;\n}\nexport {\n TooltipProvider,\n tooltipFactory\n};\n//# sourceMappingURL=index.js.map\n","import { linkSchema } from '@milkdown/preset-commonmark';\nimport { $ctx, $command } from '@milkdown/utils';\nimport { tooltipFactory, TooltipProvider } from '@milkdown/plugin-tooltip';\nimport { editorViewCtx } from '@milkdown/core';\nimport { posToDOMRect } from '@milkdown/prose';\nimport { TextSelection } from '@milkdown/prose/state';\nimport DOMPurify from 'dompurify';\nimport { h, defineComponent, ref, watch, createApp } from 'vue';\nimport clsx from 'clsx';\nimport { debounce } from 'lodash-es';\n\nvar __defProp$3 = Object.defineProperty;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n if (__getOwnPropSymbols$3)\n for (var prop of __getOwnPropSymbols$3(b)) {\n if (__propIsEnum$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n }\n return a;\n};\nfunction withMeta(plugin, meta) {\n Object.assign(plugin, {\n meta: __spreadValues$3({\n package: \"@milkdown/components\"\n }, meta)\n });\n return plugin;\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n if (__getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(b)) {\n if (__propIsEnum$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n }\n return a;\n};\nconst defaultState = {\n mode: \"preview\"\n};\nconst linkTooltipState = $ctx(__spreadValues$2({}, defaultState), \"linkTooltipStateCtx\");\nwithMeta(linkTooltipState, {\n displayName: \"State<link-tooltip>\",\n group: \"LinkTooltip\"\n});\nconst defaultAPI = {\n addLink: () => {\n },\n editLink: () => {\n },\n removeLink: () => {\n }\n};\nconst linkTooltipAPI = $ctx(__spreadValues$2({}, defaultAPI), \"linkTooltipAPICtx\");\nwithMeta(linkTooltipState, {\n displayName: \"API<link-tooltip>\",\n group: \"LinkTooltip\"\n});\nconst defaultConfig = {\n linkIcon: \"\\u{1F517}\",\n editButton: \"\\u270E\",\n removeButton: \"\\u232B\",\n confirmButton: \"Confirm \\u23CE\",\n onCopyLink: () => {\n },\n inputPlaceholder: \"Paste link...\"\n};\nconst linkTooltipConfig = $ctx(\n __spreadValues$2({}, defaultConfig),\n \"linkTooltipConfigCtx\"\n);\nwithMeta(linkTooltipState, {\n displayName: \"Config<link-tooltip>\",\n group: \"LinkTooltip\"\n});\n\nconst toggleLinkCommand = $command(\"ToggleLink\", (ctx) => {\n return () => (state) => {\n const { doc, selection } = state;\n const mark = linkSchema.type(ctx);\n const hasLink = doc.rangeHasMark(selection.from, selection.to, mark);\n if (hasLink) {\n ctx.get(linkTooltipAPI.key).removeLink(selection.from, selection.to);\n return true;\n }\n ctx.get(linkTooltipAPI.key).addLink(selection.from, selection.to);\n return true;\n };\n});\n\nconst linkPreviewTooltip = tooltipFactory(\"LINK_PREVIEW\");\nwithMeta(linkPreviewTooltip[0], {\n displayName: \"PreviewTooltipSpec<link-tooltip>\",\n group: \"LinkTooltip\"\n});\nwithMeta(linkPreviewTooltip[1], {\n displayName: \"PreviewTooltipPlugin<link-tooltip>\",\n group: \"LinkTooltip\"\n});\nconst linkEditTooltip = tooltipFactory(\"LINK_EDIT\");\nwithMeta(linkEditTooltip[0], {\n displayName: \"EditTooltipSpec<link-tooltip>\",\n group: \"LinkTooltip\"\n});\nwithMeta(linkEditTooltip[1], {\n displayName: \"EditTooltipPlugin<link-tooltip>\",\n group: \"LinkTooltip\"\n});\n\nfunction Icon({ icon, class: className, onClick }) {\n return /* @__PURE__ */ h(\n \"span\",\n {\n class: clsx(\"milkdown-icon\", className),\n onPointerdown: onClick,\n innerHTML: icon ? DOMPurify.sanitize(icon.trim()) : void 0\n }\n );\n}\nIcon.props = {\n icon: {\n type: String,\n required: false\n },\n class: {\n type: String,\n required: false\n },\n onClick: {\n type: Function,\n required: false\n }\n};\n\nconst EditLink = defineComponent({\n props: {\n config: {\n type: Object,\n required: true\n },\n src: {\n type: Object,\n required: true\n },\n onConfirm: {\n type: Function,\n required: true\n },\n onCancel: {\n type: Function,\n required: true\n }\n },\n setup({ config, src, onConfirm, onCancel }) {\n const link = ref(src);\n watch(src, (value) => {\n link.value = value;\n });\n const onConfirmEdit = () => {\n onConfirm(link.value);\n };\n const onKeydown = (e) => {\n e.stopPropagation();\n if (e.key === \"Enter\") {\n e.preventDefault();\n onConfirmEdit();\n }\n if (e.key === \"Escape\") {\n e.preventDefault();\n onCancel();\n }\n };\n return () => {\n return /* @__PURE__ */ h(\"div\", { class: \"link-edit\" }, /* @__PURE__ */ h(\n \"input\",\n {\n class: \"input-area\",\n placeholder: config.value.inputPlaceholder,\n onKeydown,\n onInput: (e) => {\n link.value = e.target.value;\n },\n value: link.value\n }\n ), link.value ? /* @__PURE__ */ h(\n Icon,\n {\n class: \"button confirm\",\n icon: config.value.confirmButton,\n onClick: onConfirmEdit\n }\n ) : null);\n };\n }\n});\n\nvar __defProp$1 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __typeError$1 = (msg) => {\n throw TypeError(msg);\n};\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n if (__getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(b)) {\n if (__propIsEnum$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nvar __accessCheck$1 = (obj, member, msg) => member.has(obj) || __typeError$1(\"Cannot \" + msg);\nvar __privateGet$1 = (obj, member, getter) => (__accessCheck$1(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd$1 = (obj, member, value) => member.has(obj) ? __typeError$1(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet$1 = (obj, member, value, setter) => (__accessCheck$1(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _content$1, _provider$1, _data, _app$1, _config$1, _src$1, _reset, _confirmEdit, _enterEditMode;\nconst defaultData = {\n from: -1,\n to: -1,\n mark: null\n};\nclass LinkEditTooltip {\n constructor(ctx, view) {\n this.ctx = ctx;\n __privateAdd$1(this, _content$1);\n __privateAdd$1(this, _provider$1);\n __privateAdd$1(this, _data, __spreadValues$1({}, defaultData));\n __privateAdd$1(this, _app$1);\n __privateAdd$1(this, _config$1);\n __privateAdd$1(this, _src$1, ref(\"\"));\n __privateAdd$1(this, _reset, () => {\n __privateGet$1(this, _provider$1).hide();\n this.ctx.update(linkTooltipState.key, (state) => __spreadProps$1(__spreadValues$1({}, state), {\n mode: \"preview\"\n }));\n __privateSet$1(this, _data, __spreadValues$1({}, defaultData));\n });\n __privateAdd$1(this, _confirmEdit, (href) => {\n const view = this.ctx.get(editorViewCtx);\n const { from, to, mark } = __privateGet$1(this, _data);\n const type = linkSchema.type(this.ctx);\n const link = DOMPurify.sanitize(href);\n if (mark && mark.attrs.href === link) {\n __privateGet$1(this, _reset).call(this);\n return;\n }\n const tr = view.state.tr;\n if (mark) tr.removeMark(from, to, mark);\n tr.addMark(from, to, type.create({ href: link }));\n view.dispatch(tr);\n __privateGet$1(this, _reset).call(this);\n });\n __privateAdd$1(this, _enterEditMode, (value, from, to) => {\n const config = this.ctx.get(linkTooltipConfig.key);\n __privateGet$1(this, _config$1).value = config;\n __privateGet$1(this, _src$1).value = value;\n this.ctx.update(linkTooltipState.key, (state) => __spreadProps$1(__spreadValues$1({}, state), {\n mode: \"edit\"\n }));\n const view = this.ctx.get(editorViewCtx);\n view.dispatch(\n view.state.tr.setSelection(TextSelection.create(view.state.doc, from, to))\n );\n __privateGet$1(this, _provider$1).show(\n { getBoundingClientRect: () => posToDOMRect(view, from, to) },\n view\n );\n requestAnimationFrame(() => {\n var _a;\n (_a = __privateGet$1(this, _content$1).querySelector(\"input\")) == null ? void 0 : _a.focus();\n });\n });\n this.update = (view) => {\n const { state } = view;\n const { selection } = state;\n if (!(selection instanceof TextSelection)) return;\n const { from, to } = selection;\n if (from === __privateGet$1(this, _data).from && to === __privateGet$1(this, _data).to) return;\n __privateGet$1(this, _reset).call(this);\n };\n this.destroy = () => {\n __privateGet$1(this, _app$1).unmount();\n __privateGet$1(this, _provider$1).destroy();\n __privateGet$1(this, _content$1).remove();\n };\n this.addLink = (from, to) => {\n __privateSet$1(this, _data, {\n from,\n to,\n mark: null\n });\n __privateGet$1(this, _enterEditMode).call(this, \"\", from, to);\n };\n this.editLink = (mark, from, to) => {\n __privateSet$1(this, _data, {\n from,\n to,\n mark\n });\n __privateGet$1(this, _enterEditMode).call(this, mark.attrs.href, from, to);\n };\n this.removeLink = (from, to) => {\n const view = this.ctx.get(editorViewCtx);\n const tr = view.state.tr;\n tr.removeMark(from, to, linkSchema.type(this.ctx));\n view.dispatch(tr);\n __privateGet$1(this, _reset).call(this);\n };\n __privateSet$1(this, _config$1, ref(this.ctx.get(linkTooltipConfig.key)));\n const content = document.createElement(\"div\");\n content.className = \"milkdown-link-edit\";\n const app = createApp(EditLink, {\n config: __privateGet$1(this, _config$1),\n src: __privateGet$1(this, _src$1),\n onConfirm: __privateGet$1(this, _confirmEdit),\n onCancel: __privateGet$1(this, _reset)\n });\n app.mount(content);\n __privateSet$1(this, _app$1, app);\n __privateSet$1(this, _content$1, content);\n __privateSet$1(this, _provider$1, new TooltipProvider({\n content,\n debounce: 0,\n shouldShow: () => false\n }));\n __privateGet$1(this, _provider$1).onHide = () => {\n requestAnimationFrame(() => {\n view.dom.focus({ preventScroll: true });\n });\n };\n __privateGet$1(this, _provider$1).update(view);\n }\n}\n_content$1 = new WeakMap();\n_provider$1 = new WeakMap();\n_data = new WeakMap();\n_app$1 = new WeakMap();\n_config$1 = new WeakMap();\n_src$1 = new WeakMap();\n_reset = new WeakMap();\n_confirmEdit = new WeakMap();\n_enterEditMode = new WeakMap();\n\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction configureLinkEditTooltip(ctx) {\n let linkEditTooltipView;\n ctx.update(linkTooltipAPI.key, (api) => __spreadProps(__spreadValues({}, api), {\n addLink: (from, to) => {\n linkEditTooltipView == null ? void 0 : linkEditTooltipView.addLink(from, to);\n },\n editLink: (mark, from, to) => {\n linkEditTooltipView == null ? void 0 : linkEditTooltipView.editLink(mark, from, to);\n },\n removeLink: (from, to) => {\n linkEditTooltipView == null ? void 0 : linkEditTooltipView.removeLink(from, to);\n }\n }));\n ctx.set(linkEditTooltip.key, {\n view: (view) => {\n linkEditTooltipView = new LinkEditTooltip(ctx, view);\n return linkEditTooltipView;\n }\n });\n}\n\nfunction findMarkPosition(mark, node, doc, from, to) {\n let markPos = { start: -1, end: -1 };\n doc.nodesBetween(from, to, (n, pos) => {\n if (markPos.start > -1) return false;\n if (markPos.start === -1 && mark.isInSet(n.marks) && node === n) {\n markPos = {\n start: pos,\n end: pos + Math.max(n.textContent.length, 1)\n };\n }\n return void 0;\n });\n return markPos;\n}\nfunction shouldShowPreviewWhenHover(ctx, view, event) {\n const $pos = view.posAtCoords({ left: event.clientX, top: event.clientY });\n if (!$pos) return;\n const { pos } = $pos;\n const node = view.state.doc.nodeAt(pos);\n if (!node) return;\n const mark = node.marks.find(\n (mark2) => mark2.type === linkSchema.mark.type(ctx)\n );\n if (!mark) return;\n const key = linkPreviewTooltip.pluginKey();\n if (!key) return;\n return { show: true, pos, node, mark };\n}\n\nconst PreviewLink = defineComponent({\n props: {\n config: {\n type: Object,\n required: true\n },\n src: {\n type: Object,\n required: true\n },\n onEdit: {\n type: Object,\n required: true\n },\n onRemove: {\n type: Object,\n required: true\n }\n },\n setup({ config, src, onEdit, onRemove }) {\n const onClickEditButton = (e) => {\n e.preventDefault();\n e.stopPropagation();\n onEdit.value();\n };\n const onClickRemoveButton = (e) => {\n e.preventDefault();\n e.stopPropagation();\n onRemove.value();\n };\n const onClickPreview = (e) => {\n e.preventDefault();\n const link = src.value;\n if (navigator.clipboard && link) {\n navigator.clipboard.writeText(link).then(() => {\n config.value.onCopyLink(link);\n }).catch((e2) => console.error(e2));\n }\n };\n return () => {\n return /* @__PURE__ */ h(\"div\", { class: \"link-preview\" }, /* @__PURE__ */ h(\n Icon,\n {\n class: \"button link-icon\",\n icon: config.value.linkIcon,\n onClick: onClickPreview\n }\n ), /* @__PURE__ */ h(\"a\", { href: src.value, target: \"_blank\", class: \"link-display\" }, src.value), /* @__PURE__ */ h(\n Icon,\n {\n class: \"button link-edit-button\",\n icon: config.value.editButton,\n onClick: onClickEditButton\n }\n ), /* @__PURE__ */ h(\n Icon,\n {\n class: \"button link-remove-button\",\n icon: config.value.removeButton,\n onClick: onClickRemoveButton\n }\n ));\n };\n }\n});\n\nvar __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _content, _provider, _slice, _config, _src, _onEdit, _onRemove, _app, _editorView, _hovering, _onStateChange, _onMouseEnter, _onMouseLeave, _hide;\nclass LinkPreviewTooltip {\n constructor(ctx, view) {\n this.ctx = ctx;\n __privateAdd(this, _content);\n __privateAdd(this, _provider);\n __privateAdd(this, _slice, this.ctx.use(linkTooltipState.key));\n __privateAdd(this, _config);\n __privateAdd(this, _src, ref(\"\"));\n __privateAdd(this, _onEdit, ref(() => {\n }));\n __privateAdd(this, _onRemove, ref(() => {\n }));\n __privateAdd(this, _app);\n __privateAdd(this, _editorView);\n __privateAdd(this, _hovering, false);\n __privateAdd(this, _onStateChange, ({ mode }) => {\n if (mode === \"edit\") __privateGet(this, _hide).call(this);\n });\n __privateAdd(this, _onMouseEnter, () => {\n __privateSet(this, _hovering, true);\n });\n __privateAdd(this, _onMouseLeave, () => {\n __privateSet(this, _hovering, false);\n });\n __privateAdd(this, _hide, () => {\n __privateGet(this, _provider).hide();\n __privateGet(this, _provider).element.removeEventListener(\"mouseenter\", __privateGet(this, _onMouseEnter));\n __privateGet(this, _provider).element.removeEventListener(\"mouseleave\", __privateGet(this, _onMouseLeave));\n });\n this.show = (mark, from, to, rect) => {\n __privateGet(this, _config).value = this.ctx.get(linkTooltipConfig.key);\n __privateGet(this, _src).value = mark.attrs.href;\n __privateGet(this, _onEdit).value = () => {\n this.ctx.get(linkTooltipAPI.key).editLink(mark, from, to);\n };\n __privateGet(this, _onRemove).value = () => {\n this.ctx.get(linkTooltipAPI.key).removeLink(from, to);\n __privateGet(this, _hide).call(this);\n };\n __privateGet(this, _provider).show({ getBoundingClientRect: () => rect }, __privateGet(this, _editorView));\n __privateGet(this, _provider).element.addEventListener(\"mouseenter\", __privateGet(this, _onMouseEnter));\n __privateGet(this, _provider).element.addEventListener(\"mouseleave\", __privateGet(this, _onMouseLeave));\n };\n this.hide = () => {\n if (__privateGet(this, _hovering)) return;\n __privateGet(this, _hide).call(this);\n };\n this.update = () => {\n };\n this.destroy = () => {\n __privateGet(this, _app).unmount();\n __privateGet(this, _slice).off(__privateGet(this, _onStateChange));\n __privateGet(this, _provider).destroy();\n __privateGet(this, _content).remove();\n };\n __privateSet(this, _editorView, view);\n __privateSet(this, _config, ref(this.ctx.get(linkTooltipConfig.key)));\n __privateSet(this, _app, createApp(PreviewLink, {\n config: __privateGet(this, _config),\n src: __privateGet(this, _src),\n onEdit: __privateGet(this, _onEdit),\n onRemove: __privateGet(this, _onRemove)\n }));\n __privateSet(this, _content, document.createElement(\"div\"));\n __privateGet(this, _content).className = \"milkdown-link-preview\";\n __privateGet(this, _app).mount(__privateGet(this, _content));\n __privateSet(this, _provider, new TooltipProvider({\n debounce: 0,\n content: __privateGet(this, _content),\n shouldShow: () => false\n }));\n __privateGet(this, _provider).update(view);\n __privateSet(this, _slice, ctx.use(linkTooltipState.key));\n __privateGet(this, _slice).on(__privateGet(this, _onStateChange));\n }\n}\n_content = new WeakMap();\n_provider = new WeakMap();\n_slice = new WeakMap();\n_config = new WeakMap();\n_src = new WeakMap();\n_onEdit = new WeakMap();\n_onRemove = new WeakMap();\n_app = new WeakMap();\n_editorView = new WeakMap();\n_hovering = new WeakMap();\n_onStateChange = new WeakMap();\n_onMouseEnter = new WeakMap();\n_onMouseLeave = new WeakMap();\n_hide = new WeakMap();\n\nfunction configureLinkPreviewTooltip(ctx) {\n let linkPreviewTooltipView;\n const DELAY = 50;\n const onMouseMove = debounce((view, event) => {\n if (!linkPreviewTooltipView) return;\n if (!view.hasFocus()) return;\n const state = ctx.get(linkTooltipState.key);\n if (state.mode === \"edit\") return;\n const result = shouldShowPreviewWhenHover(ctx, view, event);\n if (result) {\n const position = view.state.doc.resolve(result.pos);\n const markPosition = findMarkPosition(\n result.mark,\n result.node,\n view.state.doc,\n position.before(),\n position.after()\n );\n const from = markPosition.start;\n const to = markPosition.end;\n linkPreviewTooltipView.show(\n result.mark,\n from,\n to,\n posToDOMRect(view, from, to)\n );\n return;\n }\n linkPreviewTooltipView.hide();\n }, DELAY);\n const onMouseLeave = () => {\n setTimeout(() => {\n linkPreviewTooltipView == null ? void 0 : linkPreviewTooltipView.hide();\n }, DELAY);\n };\n ctx.set(linkPreviewTooltip.key, {\n props: {\n handleDOMEvents: {\n mousemove: onMouseMove,\n mouseleave: onMouseLeave\n }\n },\n view: (view) => {\n linkPreviewTooltipView = new LinkPreviewTooltip(ctx, view);\n return linkPreviewTooltipView;\n }\n });\n}\n\nfunction configureLinkTooltip(ctx) {\n configureLinkPreviewTooltip(ctx);\n configureLinkEditTooltip(ctx);\n}\n\nconst linkTooltipPlugin = [\n linkTooltipState,\n linkTooltipAPI,\n linkTooltipConfig,\n linkPreviewTooltip,\n linkEditTooltip,\n toggleLinkCommand\n].flat();\n\nexport { configureLinkTooltip, linkEditTooltip, linkPreviewTooltip, linkTooltipAPI, linkTooltipConfig, linkTooltipPlugin, linkTooltipState, toggleLinkCommand };\n//# sourceMappingURL=index.js.map\n","/**\n * Lexing or parsing positional information for error reporting.\n * This object is immutable.\n */\nclass SourceLocation {\n // The + prefix indicates that these fields aren't writeable\n // Lexer holding the input string.\n // Start offset, zero-based inclusive.\n // End offset, zero-based exclusive.\n constructor(lexer, start, end) {\n this.lexer = void 0;\n this.start = void 0;\n this.end = void 0;\n this.lexer = lexer;\n this.start = start;\n this.end = end;\n }\n /**\n * Merges two `SourceLocation`s from location providers, given they are\n * provided in order of appearance.\n * - Returns the first one's location if only the first is provided.\n * - Returns a merged range of the first and the last if both are provided\n * and their lexers match.\n * - Otherwise, returns null.\n */\n\n\n static range(first, second) {\n if (!second) {\n return first && first.loc;\n } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) {\n return null;\n } else {\n return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end);\n }\n }\n\n}\n\n/**\n * Interface required to break circular dependency between Token, Lexer, and\n * ParseError.\n */\n\n/**\n * The resulting token returned from `lex`.\n *\n * It consists of the token text plus some position information.\n * The position information is essentially a range in an input string,\n * but instead of referencing the bare input string, we refer to the lexer.\n * That way it is possible to attach extra metadata to the input string,\n * like for example a file name or similar.\n *\n * The position information is optional, so it is OK to construct synthetic\n * tokens if appropriate. Not providing available position information may\n * lead to degraded error reporting, though.\n */\nclass Token {\n // don't expand the token\n // used in \\noexpand\n constructor(text, // the text of this token\n loc) {\n this.text = void 0;\n this.loc = void 0;\n this.noexpand = void 0;\n this.treatAsRelax = void 0;\n this.text = text;\n this.loc = loc;\n }\n /**\n * Given a pair of tokens (this and endToken), compute a `Token` encompassing\n * the whole input range enclosed by these two.\n */\n\n\n range(endToken, // last token of the range, inclusive\n text // the text of the newly constructed token\n ) {\n return new Token(text, SourceLocation.range(this, endToken));\n }\n\n}\n\n/**\n * This is the ParseError class, which is the main error thrown by KaTeX\n * functions when something has gone wrong. This is used to distinguish internal\n * errors from errors in the expression that the user provided.\n *\n * If possible, a caller should provide a Token or ParseNode with information\n * about where in the source string the problem occurred.\n */\nclass ParseError {\n // Error start position based on passed-in Token or ParseNode.\n // Length of affected text based on passed-in Token or ParseNode.\n // The underlying error message without any context added.\n constructor(message, // The error message\n token // An object providing position information\n ) {\n this.name = void 0;\n this.position = void 0;\n this.length = void 0;\n this.rawMessage = void 0;\n var error = \"KaTeX parse error: \" + message;\n var start;\n var end;\n var loc = token && token.loc;\n\n if (loc && loc.start <= loc.end) {\n // If we have the input and a position, make the error a bit fancier\n // Get the input\n var input = loc.lexer.input; // Prepend some information\n\n start = loc.start;\n end = loc.end;\n\n if (start === input.length) {\n error += \" at end of input: \";\n } else {\n error += \" at position \" + (start + 1) + \": \";\n } // Underline token in question using combining underscores\n\n\n var underlined = input.slice(start, end).replace(/[^]/g, \"$&\\u0332\"); // Extract some context from the input and add it to the error\n\n var left;\n\n if (start > 15) {\n left = \"…\" + input.slice(start - 15, start);\n } else {\n left = input.slice(0, start);\n }\n\n var right;\n\n if (end + 15 < input.length) {\n right = input.slice(end, end + 15) + \"…\";\n } else {\n right = input.slice(end);\n }\n\n error += left + underlined + right;\n } // Some hackery to make ParseError a prototype of Error\n // See http://stackoverflow.com/a/8460753\n // $FlowFixMe\n\n\n var self = new Error(error);\n self.name = \"ParseError\"; // $FlowFixMe\n\n self.__proto__ = ParseError.prototype;\n self.position = start;\n\n if (start != null && end != null) {\n self.length = end - start;\n }\n\n self.rawMessage = message;\n return self;\n }\n\n} // $FlowFixMe More hackery\n\n\nParseError.prototype.__proto__ = Error.prototype;\n\n/**\n * This file contains a list of utility functions which are useful in other\n * files.\n */\n\n/**\n * Provide a default value if a setting is undefined\n * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022.\n */\nvar deflt = function deflt(setting, defaultIfUndefined) {\n return setting === undefined ? defaultIfUndefined : setting;\n}; // hyphenate and escape adapted from Facebook's React under Apache 2 license\n\n\nvar uppercase = /([A-Z])/g;\n\nvar hyphenate = function hyphenate(str) {\n return str.replace(uppercase, \"-$1\").toLowerCase();\n};\n\nvar ESCAPE_LOOKUP = {\n \"&\": \"&\",\n \">\": \">\",\n \"<\": \"<\",\n \"\\\"\": \""\",\n \"'\": \"'\"\n};\nvar ESCAPE_REGEX = /[&><\"']/g;\n/**\n * Escapes text to prevent scripting attacks.\n */\n\nfunction escape(text) {\n return String(text).replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]);\n}\n/**\n * Sometimes we want to pull out the innermost element of a group. In most\n * cases, this will just be the group itself, but when ordgroups and colors have\n * a single element, we want to pull that out.\n */\n\n\nvar getBaseElem = function getBaseElem(group) {\n if (group.type === \"ordgroup\") {\n if (group.body.length === 1) {\n return getBaseElem(group.body[0]);\n } else {\n return group;\n }\n } else if (group.type === \"color\") {\n if (group.body.length === 1) {\n return getBaseElem(group.body[0]);\n } else {\n return group;\n }\n } else if (group.type === \"font\") {\n return getBaseElem(group.body);\n } else {\n return group;\n }\n};\n/**\n * TeXbook algorithms often reference \"character boxes\", which are simply groups\n * with a single character in them. To decide if something is a character box,\n * we find its innermost group, and see if it is a single character.\n */\n\n\nvar isCharacterBox = function isCharacterBox(group) {\n var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters\n\n return baseElem.type === \"mathord\" || baseElem.type === \"textord\" || baseElem.type === \"atom\";\n};\n\nvar assert = function assert(value) {\n if (!value) {\n throw new Error('Expected non-null, but got ' + String(value));\n }\n\n return value;\n};\n/**\n * Return the protocol of a URL, or \"_relative\" if the URL does not specify a\n * protocol (and thus is relative), or `null` if URL has invalid protocol\n * (so should be outright rejected).\n */\n\nvar protocolFromUrl = function protocolFromUrl(url) {\n // Check for possible leading protocol.\n // https://url.spec.whatwg.org/#url-parsing strips leading whitespace\n // (U+20) or C0 control (U+00-U+1F) characters.\n // eslint-disable-next-line no-control-regex\n var protocol = /^[\\x00-\\x20]*([^\\\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(url);\n\n if (!protocol) {\n return \"_relative\";\n } // Reject weird colons\n\n\n if (protocol[2] !== \":\") {\n return null;\n } // Reject invalid characters in scheme according to\n // https://datatracker.ietf.org/doc/html/rfc3986#section-3.1\n\n\n if (!/^[a-zA-Z][a-zA-Z0-9+\\-.]*$/.test(protocol[1])) {\n return null;\n } // Lowercase the protocol\n\n\n return protocol[1].toLowerCase();\n};\nvar utils = {\n deflt,\n escape,\n hyphenate,\n getBaseElem,\n isCharacterBox,\n protocolFromUrl\n};\n\n/* eslint no-console:0 */\n// TODO: automatically generate documentation\n// TODO: check all properties on Settings exist\n// TODO: check the type of a property on Settings matches\nvar SETTINGS_SCHEMA = {\n displayMode: {\n type: \"boolean\",\n description: \"Render math in display mode, which puts the math in \" + \"display style (so \\\\int and \\\\sum are large, for example), and \" + \"centers the math on the page on its own line.\",\n cli: \"-d, --display-mode\"\n },\n output: {\n type: {\n enum: [\"htmlAndMathml\", \"html\", \"mathml\"]\n },\n description: \"Determines the markup language of the output.\",\n cli: \"-F, --format <type>\"\n },\n leqno: {\n type: \"boolean\",\n description: \"Render display math in leqno style (left-justified tags).\"\n },\n fleqn: {\n type: \"boolean\",\n description: \"Render display math flush left.\"\n },\n throwOnError: {\n type: \"boolean\",\n default: true,\n cli: \"-t, --no-throw-on-error\",\n cliDescription: \"Render errors (in the color given by --error-color) ins\" + \"tead of throwing a ParseError exception when encountering an error.\"\n },\n errorColor: {\n type: \"string\",\n default: \"#cc0000\",\n cli: \"-c, --error-color <color>\",\n cliDescription: \"A color string given in the format 'rgb' or 'rrggbb' \" + \"(no #). This option determines the color of errors rendered by the \" + \"-t option.\",\n cliProcessor: color => \"#\" + color\n },\n macros: {\n type: \"object\",\n cli: \"-m, --macro <def>\",\n cliDescription: \"Define custom macro of the form '\\\\foo:expansion' (use \" + \"multiple -m arguments for multiple macros).\",\n cliDefault: [],\n cliProcessor: (def, defs) => {\n defs.push(def);\n return defs;\n }\n },\n minRuleThickness: {\n type: \"number\",\n description: \"Specifies a minimum thickness, in ems, for fraction lines,\" + \" `\\\\sqrt` top lines, `{array}` vertical lines, `\\\\hline`, \" + \"`\\\\hdashline`, `\\\\underline`, `\\\\overline`, and the borders of \" + \"`\\\\fbox`, `\\\\boxed`, and `\\\\fcolorbox`.\",\n processor: t => Math.max(0, t),\n cli: \"--min-rule-thickness <size>\",\n cliProcessor: parseFloat\n },\n colorIsTextColor: {\n type: \"boolean\",\n description: \"Makes \\\\color behave like LaTeX's 2-argument \\\\textcolor, \" + \"instead of LaTeX's one-argument \\\\color mode change.\",\n cli: \"-b, --color-is-text-color\"\n },\n strict: {\n type: [{\n enum: [\"warn\", \"ignore\", \"error\"]\n }, \"boolean\", \"function\"],\n description: \"Turn on strict / LaTeX faithfulness mode, which throws an \" + \"error if the input uses features that are not supported by LaTeX.\",\n cli: \"-S, --strict\",\n cliDefault: false\n },\n trust: {\n type: [\"boolean\", \"function\"],\n description: \"Trust the input, enabling all HTML features such as \\\\url.\",\n cli: \"-T, --trust\"\n },\n maxSize: {\n type: \"number\",\n default: Infinity,\n description: \"If non-zero, all user-specified sizes, e.g. in \" + \"\\\\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, \" + \"elements and spaces can be arbitrarily large\",\n processor: s => Math.max(0, s),\n cli: \"-s, --max-size <n>\",\n cliProcessor: parseInt\n },\n maxExpand: {\n type: \"number\",\n default: 1000,\n description: \"Limit the number of macro expansions to the specified \" + \"number, to prevent e.g. infinite macro loops. If set to Infinity, \" + \"the macro expander will try to fully expand as in LaTeX.\",\n processor: n => Math.max(0, n),\n cli: \"-e, --max-expand <n>\",\n cliProcessor: n => n === \"Infinity\" ? Infinity : parseInt(n)\n },\n globalGroup: {\n type: \"boolean\",\n cli: false\n }\n};\n\nfunction getDefaultValue(schema) {\n if (schema.default) {\n return schema.default;\n }\n\n var type = schema.type;\n var defaultType = Array.isArray(type) ? type[0] : type;\n\n if (typeof defaultType !== 'string') {\n return defaultType.enum[0];\n }\n\n switch (defaultType) {\n case 'boolean':\n return false;\n\n case 'string':\n return '';\n\n case 'number':\n return 0;\n\n case 'object':\n return {};\n }\n}\n/**\n * The main Settings object\n *\n * The current options stored are:\n * - displayMode: Whether the expression should be typeset as inline math\n * (false, the default), meaning that the math starts in\n * \\textstyle and is placed in an inline-block); or as display\n * math (true), meaning that the math starts in \\displaystyle\n * and is placed in a block with vertical margin.\n */\n\n\nclass Settings {\n constructor(options) {\n this.displayMode = void 0;\n this.output = void 0;\n this.leqno = void 0;\n this.fleqn = void 0;\n this.throwOnError = void 0;\n this.errorColor = void 0;\n this.macros = void 0;\n this.minRuleThickness = void 0;\n this.colorIsTextColor = void 0;\n this.strict = void 0;\n this.trust = void 0;\n this.maxSize = void 0;\n this.maxExpand = void 0;\n this.globalGroup = void 0;\n // allow null options\n options = options || {};\n\n for (var prop in SETTINGS_SCHEMA) {\n if (SETTINGS_SCHEMA.hasOwnProperty(prop)) {\n // $FlowFixMe\n var schema = SETTINGS_SCHEMA[prop]; // TODO: validate options\n // $FlowFixMe\n\n this[prop] = options[prop] !== undefined ? schema.processor ? schema.processor(options[prop]) : options[prop] : getDefaultValue(schema);\n }\n }\n }\n /**\n * Report nonstrict (non-LaTeX-compatible) input.\n * Can safely not be called if `this.strict` is false in JavaScript.\n */\n\n\n reportNonstrict(errorCode, errorMsg, token) {\n var strict = this.strict;\n\n if (typeof strict === \"function\") {\n // Allow return value of strict function to be boolean or string\n // (or null/undefined, meaning no further processing).\n strict = strict(errorCode, errorMsg, token);\n }\n\n if (!strict || strict === \"ignore\") {\n return;\n } else if (strict === true || strict === \"error\") {\n throw new ParseError(\"LaTeX-incompatible input and strict mode is set to 'error': \" + (errorMsg + \" [\" + errorCode + \"]\"), token);\n } else if (strict === \"warn\") {\n typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to 'warn': \" + (errorMsg + \" [\" + errorCode + \"]\"));\n } else {\n // won't happen in type-safe code\n typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to \" + (\"unrecognized '\" + strict + \"': \" + errorMsg + \" [\" + errorCode + \"]\"));\n }\n }\n /**\n * Check whether to apply strict (LaTeX-adhering) behavior for unusual\n * input (like `\\\\`). Unlike `nonstrict`, will not throw an error;\n * instead, \"error\" translates to a return value of `true`, while \"ignore\"\n * translates to a return value of `false`. May still print a warning:\n * \"warn\" prints a warning and returns `false`.\n * This is for the second category of `errorCode`s listed in the README.\n */\n\n\n useStrictBehavior(errorCode, errorMsg, token) {\n var strict = this.strict;\n\n if (typeof strict === \"function\") {\n // Allow return value of strict function to be boolean or string\n // (or null/undefined, meaning no further processing).\n // But catch any exceptions thrown by function, treating them\n // like \"error\".\n try {\n strict = strict(errorCode, errorMsg, token);\n } catch (error) {\n strict = \"error\";\n }\n }\n\n if (!strict || strict === \"ignore\") {\n return false;\n } else if (strict === true || strict === \"error\") {\n return true;\n } else if (strict === \"warn\") {\n typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to 'warn': \" + (errorMsg + \" [\" + errorCode + \"]\"));\n return false;\n } else {\n // won't happen in type-safe code\n typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to \" + (\"unrecognized '\" + strict + \"': \" + errorMsg + \" [\" + errorCode + \"]\"));\n return false;\n }\n }\n /**\n * Check whether to test potentially dangerous input, and return\n * `true` (trusted) or `false` (untrusted). The sole argument `context`\n * should be an object with `command` field specifying the relevant LaTeX\n * command (as a string starting with `\\`), and any other arguments, etc.\n * If `context` has a `url` field, a `protocol` field will automatically\n * get added by this function (changing the specified object).\n */\n\n\n isTrusted(context) {\n if (context.url && !context.protocol) {\n var protocol = utils.protocolFromUrl(context.url);\n\n if (protocol == null) {\n return false;\n }\n\n context.protocol = protocol;\n }\n\n var trust = typeof this.trust === \"function\" ? this.trust(context) : this.trust;\n return Boolean(trust);\n }\n\n}\n\n/**\n * This file contains information and classes for the various kinds of styles\n * used in TeX. It provides a generic `Style` class, which holds information\n * about a specific style. It then provides instances of all the different kinds\n * of styles possible, and provides functions to move between them and get\n * information about them.\n */\n\n/**\n * The main style class. Contains a unique id for the style, a size (which is\n * the same for cramped and uncramped version of a style), and a cramped flag.\n */\nclass Style {\n constructor(id, size, cramped) {\n this.id = void 0;\n this.size = void 0;\n this.cramped = void 0;\n this.id = id;\n this.size = size;\n this.cramped = cramped;\n }\n /**\n * Get the style of a superscript given a base in the current style.\n */\n\n\n sup() {\n return styles[sup[this.id]];\n }\n /**\n * Get the style of a subscript given a base in the current style.\n */\n\n\n sub() {\n return styles[sub[this.id]];\n }\n /**\n * Get the style of a fraction numerator given the fraction in the current\n * style.\n */\n\n\n fracNum() {\n return styles[fracNum[this.id]];\n }\n /**\n * Get the style of a fraction denominator given the fraction in the current\n * style.\n */\n\n\n fracDen() {\n return styles[fracDen[this.id]];\n }\n /**\n * Get the cramped version of a style (in particular, cramping a cramped style\n * doesn't change the style).\n */\n\n\n cramp() {\n return styles[cramp[this.id]];\n }\n /**\n * Get a text or display version of this style.\n */\n\n\n text() {\n return styles[text$1[this.id]];\n }\n /**\n * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle)\n */\n\n\n isTight() {\n return this.size >= 2;\n }\n\n} // Export an interface for type checking, but don't expose the implementation.\n// This way, no more styles can be generated.\n\n\n// IDs of the different styles\nvar D = 0;\nvar Dc = 1;\nvar T = 2;\nvar Tc = 3;\nvar S = 4;\nvar Sc = 5;\nvar SS = 6;\nvar SSc = 7; // Instances of the different styles\n\nvar styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another\n\nvar sup = [S, Sc, S, Sc, SS, SSc, SS, SSc];\nvar sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc];\nvar fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc];\nvar fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc];\nvar cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc];\nvar text$1 = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles.\n\nvar Style$1 = {\n DISPLAY: styles[D],\n TEXT: styles[T],\n SCRIPT: styles[S],\n SCRIPTSCRIPT: styles[SS]\n};\n\n/*\n * This file defines the Unicode scripts and script families that we\n * support. To add new scripts or families, just add a new entry to the\n * scriptData array below. Adding scripts to the scriptData array allows\n * characters from that script to appear in \\text{} environments.\n */\n\n/**\n * Each script or script family has a name and an array of blocks.\n * Each block is an array of two numbers which specify the start and\n * end points (inclusive) of a block of Unicode codepoints.\n */\n\n/**\n * Unicode block data for the families of scripts we support in \\text{}.\n * Scripts only need to appear here if they do not have font metrics.\n */\nvar scriptData = [{\n // Latin characters beyond the Latin-1 characters we have metrics for.\n // Needed for Czech, Hungarian and Turkish text, for example.\n name: 'latin',\n blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B\n [0x0300, 0x036f] // Combining Diacritical marks\n ]\n}, {\n // The Cyrillic script used by Russian and related languages.\n // A Cyrillic subset used to be supported as explicitly defined\n // symbols in symbols.js\n name: 'cyrillic',\n blocks: [[0x0400, 0x04ff]]\n}, {\n // Armenian\n name: 'armenian',\n blocks: [[0x0530, 0x058F]]\n}, {\n // The Brahmic scripts of South and Southeast Asia\n // Devanagari (0900–097F)\n // Bengali (0980–09FF)\n // Gurmukhi (0A00–0A7F)\n // Gujarati (0A80–0AFF)\n // Oriya (0B00–0B7F)\n // Tamil (0B80–0BFF)\n // Telugu (0C00–0C7F)\n // Kannada (0C80–0CFF)\n // Malayalam (0D00–0D7F)\n // Sinhala (0D80–0DFF)\n // Thai (0E00–0E7F)\n // Lao (0E80–0EFF)\n // Tibetan (0F00–0FFF)\n // Myanmar (1000–109F)\n name: 'brahmic',\n blocks: [[0x0900, 0x109F]]\n}, {\n name: 'georgian',\n blocks: [[0x10A0, 0x10ff]]\n}, {\n // Chinese and Japanese.\n // The \"k\" in cjk is for Korean, but we've separated Korean out\n name: \"cjk\",\n blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana\n [0x4E00, 0x9FAF], // CJK ideograms\n [0xFF00, 0xFF60] // Fullwidth punctuation\n // TODO: add halfwidth Katakana and Romanji glyphs\n ]\n}, {\n // Korean\n name: 'hangul',\n blocks: [[0xAC00, 0xD7AF]]\n}];\n/**\n * Given a codepoint, return the name of the script or script family\n * it is from, or null if it is not part of a known block\n */\n\nfunction scriptFromCodepoint(codepoint) {\n for (var i = 0; i < scriptData.length; i++) {\n var script = scriptData[i];\n\n for (var _i = 0; _i < script.blocks.length; _i++) {\n var block = script.blocks[_i];\n\n if (codepoint >= block[0] && codepoint <= block[1]) {\n return script.name;\n }\n }\n }\n\n return null;\n}\n/**\n * A flattened version of all the supported blocks in a single array.\n * This is an optimization to make supportedCodepoint() fast.\n */\n\nvar allBlocks = [];\nscriptData.forEach(s => s.blocks.forEach(b => allBlocks.push(...b)));\n/**\n * Given a codepoint, return true if it falls within one of the\n * scripts or script families defined above and false otherwise.\n *\n * Micro benchmarks shows that this is faster than\n * /[\\u3000-\\u30FF\\u4E00-\\u9FAF\\uFF00-\\uFF60\\uAC00-\\uD7AF\\u0900-\\u109F]/.test()\n * in Firefox, Chrome and Node.\n */\n\nfunction supportedCodepoint(codepoint) {\n for (var i = 0; i < allBlocks.length; i += 2) {\n if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * This file provides support to domTree.js and delimiter.js.\n * It's a storehouse of path geometry for SVG images.\n */\n// In all paths below, the viewBox-to-em scale is 1000:1.\nvar hLinePad = 80; // padding above a sqrt vinculum. Prevents image cropping.\n// The vinculum of a \\sqrt can be made thicker by a KaTeX rendering option.\n// Think of variable extraVinculum as two detours in the SVG path.\n// The detour begins at the lower left of the area labeled extraVinculum below.\n// The detour proceeds one extraVinculum distance up and slightly to the right,\n// displacing the radiused corner between surd and vinculum. The radius is\n// traversed as usual, then the detour resumes. It goes right, to the end of\n// the very long vinculum, then down one extraVinculum distance,\n// after which it resumes regular path geometry for the radical.\n\n/* vinculum\n /\n /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraVinculum\n / █████████████████████←0.04em (40 unit) std vinculum thickness\n / /\n / /\n / /\\\n / / surd\n*/\n\nvar sqrtMain = function sqrtMain(extraVinculum, hLinePad) {\n // sqrtMain path geometry is from glyph U221A in the font KaTeX Main\n return \"M95,\" + (622 + extraVinculum + hLinePad) + \"\\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\\nc69,-144,104.5,-217.7,106.5,-221\\nl\" + extraVinculum / 2.075 + \" -\" + extraVinculum + \"\\nc5.3,-9.3,12,-14,20,-14\\nH400000v\" + (40 + extraVinculum) + \"H845.2724\\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\\nM\" + (834 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize1 = function sqrtSize1(extraVinculum, hLinePad) {\n // size1 is from glyph U221A in the font KaTeX_Size1-Regular\n return \"M263,\" + (601 + extraVinculum + hLinePad) + \"c0.7,0,18,39.7,52,119\\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\\nc340,-704.7,510.7,-1060.3,512,-1067\\nl\" + extraVinculum / 2.084 + \" -\" + extraVinculum + \"\\nc4.7,-7.3,11,-11,19,-11\\nH40000v\" + (40 + extraVinculum) + \"H1012.3\\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\\nM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize2 = function sqrtSize2(extraVinculum, hLinePad) {\n // size2 is from glyph U221A in the font KaTeX_Size2-Regular\n return \"M983 \" + (10 + extraVinculum + hLinePad) + \"\\nl\" + extraVinculum / 3.13 + \" -\" + extraVinculum + \"\\nc4,-6.7,10,-10,18,-10 H400000v\" + (40 + extraVinculum) + \"\\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\\nM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize3 = function sqrtSize3(extraVinculum, hLinePad) {\n // size3 is from glyph U221A in the font KaTeX_Size3-Regular\n return \"M424,\" + (2398 + extraVinculum + hLinePad) + \"\\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\\nl\" + extraVinculum / 4.223 + \" -\" + extraVinculum + \"c4,-6.7,10,-10,18,-10 H400000\\nv\" + (40 + extraVinculum) + \"H1014.6\\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\\nc-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2z M\" + (1001 + extraVinculum) + \" \" + hLinePad + \"\\nh400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize4 = function sqrtSize4(extraVinculum, hLinePad) {\n // size4 is from glyph U221A in the font KaTeX_Size4-Regular\n return \"M473,\" + (2713 + extraVinculum + hLinePad) + \"\\nc339.3,-1799.3,509.3,-2700,510,-2702 l\" + extraVinculum / 5.298 + \" -\" + extraVinculum + \"\\nc3.3,-7.3,9.3,-11,18,-11 H400000v\" + (40 + extraVinculum) + \"H1017.7\\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\\n606zM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"H1017.7z\";\n};\n\nvar phasePath = function phasePath(y) {\n var x = y / 2; // x coordinate at top of angle\n\n return \"M400000 \" + y + \" H0 L\" + x + \" 0 l65 45 L145 \" + (y - 80) + \" H400000z\";\n};\n\nvar sqrtTall = function sqrtTall(extraVinculum, hLinePad, viewBoxHeight) {\n // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular\n // One path edge has a variable length. It runs vertically from the vinculum\n // to a point near (14 units) the bottom of the surd. The vinculum\n // is normally 40 units thick. So the length of the line in question is:\n var vertSegment = viewBoxHeight - 54 - hLinePad - extraVinculum;\n return \"M702 \" + (extraVinculum + hLinePad) + \"H400000\" + (40 + extraVinculum) + \"\\nH742v\" + vertSegment + \"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\\n219 661 l218 661zM702 \" + hLinePad + \"H400000v\" + (40 + extraVinculum) + \"H742z\";\n};\n\nvar sqrtPath = function sqrtPath(size, extraVinculum, viewBoxHeight) {\n extraVinculum = 1000 * extraVinculum; // Convert from document ems to viewBox.\n\n var path = \"\";\n\n switch (size) {\n case \"sqrtMain\":\n path = sqrtMain(extraVinculum, hLinePad);\n break;\n\n case \"sqrtSize1\":\n path = sqrtSize1(extraVinculum, hLinePad);\n break;\n\n case \"sqrtSize2\":\n path = sqrtSize2(extraVinculum, hLinePad);\n break;\n\n case \"sqrtSize3\":\n path = sqrtSize3(extraVinculum, hLinePad);\n break;\n\n case \"sqrtSize4\":\n path = sqrtSize4(extraVinculum, hLinePad);\n break;\n\n case \"sqrtTall\":\n path = sqrtTall(extraVinculum, hLinePad, viewBoxHeight);\n }\n\n return path;\n};\nvar innerPath = function innerPath(name, height) {\n // The inner part of stretchy tall delimiters\n switch (name) {\n case \"\\u239c\":\n return \"M291 0 H417 V\" + height + \" H291z M291 0 H417 V\" + height + \" H291z\";\n\n case \"\\u2223\":\n return \"M145 0 H188 V\" + height + \" H145z M145 0 H188 V\" + height + \" H145z\";\n\n case \"\\u2225\":\n return \"M145 0 H188 V\" + height + \" H145z M145 0 H188 V\" + height + \" H145z\" + (\"M367 0 H410 V\" + height + \" H367z M367 0 H410 V\" + height + \" H367z\");\n\n case \"\\u239f\":\n return \"M457 0 H583 V\" + height + \" H457z M457 0 H583 V\" + height + \" H457z\";\n\n case \"\\u23a2\":\n return \"M319 0 H403 V\" + height + \" H319z M319 0 H403 V\" + height + \" H319z\";\n\n case \"\\u23a5\":\n return \"M263 0 H347 V\" + height + \" H263z M263 0 H347 V\" + height + \" H263z\";\n\n case \"\\u23aa\":\n return \"M384 0 H504 V\" + height + \" H384z M384 0 H504 V\" + height + \" H384z\";\n\n case \"\\u23d0\":\n return \"M312 0 H355 V\" + height + \" H312z M312 0 H355 V\" + height + \" H312z\";\n\n case \"\\u2016\":\n return \"M257 0 H300 V\" + height + \" H257z M257 0 H300 V\" + height + \" H257z\" + (\"M478 0 H521 V\" + height + \" H478z M478 0 H521 V\" + height + \" H478z\");\n\n default:\n return \"\";\n }\n};\nvar path = {\n // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main\n doubleleftarrow: \"M262 157\\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\\nm8 0v40h399730v-40zm0 194v40h399730v-40z\",\n // doublerightarrow is from glyph U+21D2 in font KaTeX Main\n doublerightarrow: \"M399738 392l\\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z\",\n // leftarrow is from glyph U+2190 in font KaTeX Main\n leftarrow: \"M400000 241H110l3-3c68.7-52.7 113.7-120\\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\\n l-3-3h399890zM100 241v40h399900v-40z\",\n // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular\n leftbrace: \"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z\",\n leftbraceunder: \"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z\",\n // overgroup is from the MnSymbol package (public domain)\n leftgroup: \"M400000 80\\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\\n 435 0h399565z\",\n leftgroupunder: \"M400000 262\\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\\n 435 219h399565z\",\n // Harpoons are from glyph U+21BD in font KaTeX Main\n leftharpoon: \"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z\",\n leftharpoonplus: \"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\\nm0 0v40h400000v-40z\",\n leftharpoondown: \"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z\",\n leftharpoondownplus: \"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z\",\n // hook is from glyph U+21A9 in font KaTeX Main\n lefthook: \"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\\n 71.5 23h399859zM103 281v-40h399897v40z\",\n leftlinesegment: \"M40 281 V428 H0 V94 H40 V241 H400000 v40z\\nM40 281 V428 H0 V94 H40 V241 H400000 v40z\",\n leftmapsto: \"M40 281 V448H0V74H40V241H400000v40z\\nM40 281 V448H0V74H40V241H400000v40z\",\n // tofrom is from glyph U+21C4 in font KaTeX AMS Regular\n leftToFrom: \"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z\",\n longequal: \"M0 50 h400000 v40H0z m0 194h40000v40H0z\\nM0 50 h400000 v40H0z m0 194h40000v40H0z\",\n midbrace: \"M200428 334\\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z\",\n midbraceunder: \"M199572 214\\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z\",\n oiintSize1: \"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z\",\n oiintSize2: \"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\\nc0 110 84 276 504 276s502.4-166 502.4-276z\",\n oiiintSize1: \"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z\",\n oiiintSize2: \"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z\",\n rightarrow: \"M0 241v40h399891c-47.3 35.3-84 78-110 128\\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n 151.7 139 205zm0 0v40h399900v-40z\",\n rightbrace: \"M400000 542l\\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z\",\n rightbraceunder: \"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z\",\n rightgroup: \"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\\n 3-1 3-3v-38c-76-158-257-219-435-219H0z\",\n rightgroupunder: \"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z\",\n rightharpoon: \"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\\n 69.2 92 94.5zm0 0v40h399900v-40z\",\n rightharpoonplus: \"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z\",\n rightharpoondown: \"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z\",\n rightharpoondownplus: \"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\\nm0-194v40h400000v-40zm0 0v40h400000v-40z\",\n righthook: \"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z\",\n rightlinesegment: \"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z\",\n rightToFrom: \"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z\",\n // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular\n twoheadleftarrow: \"M0 167c68 40\\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z\",\n twoheadrightarrow: \"M400000 167\\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z\",\n // tilde1 is a modified version of a glyph from the MnSymbol package\n tilde1: \"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\\n-68.267.847-113-73.952-191-73.952z\",\n // ditto tilde2, tilde3, & tilde4\n tilde2: \"M344 55.266c-142 0-300.638 81.316-311.5 86.418\\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z\",\n tilde3: \"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\\n -338 0-409-156.573-744-156.573z\",\n tilde4: \"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\\n -175.236-744-175.236z\",\n // vec is from glyph U+20D7 in font KaTeX Main\n vec: \"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\\nc-16-25.333-24-45-24-59z\",\n // widehat1 is a modified version of a glyph from the MnSymbol package\n widehat1: \"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z\",\n // ditto widehat2, widehat3, & widehat4\n widehat2: \"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n widehat3: \"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n widehat4: \"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n // widecheck paths are all inverted versions of widehat\n widecheck1: \"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z\",\n widecheck2: \"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n widecheck3: \"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n widecheck4: \"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n // The next ten paths support reaction arrows from the mhchem package.\n // Arrows for \\ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX\n // baraboveleftarrow is mostly from glyph U+2190 in font KaTeX Main\n baraboveleftarrow: \"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z\",\n // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main\n rightarrowabovebar: \"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z\",\n // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end.\n // Ref from mhchem.sty: \\rlap{\\raisebox{-.22ex}{$\\kern0.5em\n baraboveshortleftharpoon: \"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z\",\n rightharpoonaboveshortbar: \"M0,241 l0,40c399126,0,399993,0,399993,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z\",\n shortbaraboveleftharpoon: \"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z\",\n shortrightharpoonabovebar: \"M53,241l0,40c398570,0,399437,0,399437,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z\"\n};\nvar tallDelim = function tallDelim(label, midHeight) {\n switch (label) {\n case \"lbrack\":\n return \"M403 1759 V84 H666 V0 H319 V1759 v\" + midHeight + \" v1759 h347 v-84\\nH403z M403 1759 V0 H319 V1759 v\" + midHeight + \" v1759 h84z\";\n\n case \"rbrack\":\n return \"M347 1759 V0 H0 V84 H263 V1759 v\" + midHeight + \" v1759 H0 v84 H347z\\nM347 1759 V0 H263 V1759 v\" + midHeight + \" v1759 h84z\";\n\n case \"vert\":\n return \"M145 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v\" + midHeight + \" v585 h43z\";\n\n case \"doublevert\":\n return \"M145 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v\" + midHeight + \" v585 h43z\\nM367 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v\" + midHeight + \" v585 h43z\";\n\n case \"lfloor\":\n return \"M319 602 V0 H403 V602 v\" + midHeight + \" v1715 h263 v84 H319z\\nMM319 602 V0 H403 V602 v\" + midHeight + \" v1715 H319z\";\n\n case \"rfloor\":\n return \"M319 602 V0 H403 V602 v\" + midHeight + \" v1799 H0 v-84 H319z\\nMM319 602 V0 H403 V602 v\" + midHeight + \" v1715 H319z\";\n\n case \"lceil\":\n return \"M403 1759 V84 H666 V0 H319 V1759 v\" + midHeight + \" v602 h84z\\nM403 1759 V0 H319 V1759 v\" + midHeight + \" v602 h84z\";\n\n case \"rceil\":\n return \"M347 1759 V0 H0 V84 H263 V1759 v\" + midHeight + \" v602 h84z\\nM347 1759 V0 h-84 V1759 v\" + midHeight + \" v602 h84z\";\n\n case \"lparen\":\n return \"M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\\n-36,557 l0,\" + (midHeight + 84) + \"c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\\nl0,-\" + (midHeight + 92) + \"c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z\";\n\n case \"rparen\":\n return \"M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,\" + (midHeight + 9) + \"\\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\\nl0,-\" + (midHeight + 144) + \"c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z\";\n\n default:\n // We should not ever get here.\n throw new Error(\"Unknown stretchy delimiter.\");\n }\n};\n\n// To ensure that all nodes have compatible signatures for these methods.\n\n/**\n * This node represents a document fragment, which contains elements, but when\n * placed into the DOM doesn't have any representation itself. It only contains\n * children and doesn't have any DOM node properties.\n */\nclass DocumentFragment {\n // Never used; needed for satisfying interface.\n constructor(children) {\n this.children = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n this.children = children;\n this.classes = [];\n this.height = 0;\n this.depth = 0;\n this.maxFontSize = 0;\n this.style = {};\n }\n\n hasClass(className) {\n return this.classes.includes(className);\n }\n /** Convert the fragment into a node. */\n\n\n toNode() {\n var frag = document.createDocumentFragment();\n\n for (var i = 0; i < this.children.length; i++) {\n frag.appendChild(this.children[i].toNode());\n }\n\n return frag;\n }\n /** Convert the fragment into HTML markup. */\n\n\n toMarkup() {\n var markup = \"\"; // Simply concatenate the markup for the children together.\n\n for (var i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n return markup;\n }\n /**\n * Converts the math node into a string, similar to innerText. Applies to\n * MathDomNode's only.\n */\n\n\n toText() {\n // To avoid this, we would subclass documentFragment separately for\n // MathML, but polyfills for subclassing is expensive per PR 1469.\n // $FlowFixMe: Only works for ChildType = MathDomNode.\n var toText = child => child.toText();\n\n return this.children.map(toText).join(\"\");\n }\n\n}\n\n// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY.\nvar fontMetricsData = {\n \"AMS-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"65\": [0, 0.68889, 0, 0, 0.72222],\n \"66\": [0, 0.68889, 0, 0, 0.66667],\n \"67\": [0, 0.68889, 0, 0, 0.72222],\n \"68\": [0, 0.68889, 0, 0, 0.72222],\n \"69\": [0, 0.68889, 0, 0, 0.66667],\n \"70\": [0, 0.68889, 0, 0, 0.61111],\n \"71\": [0, 0.68889, 0, 0, 0.77778],\n \"72\": [0, 0.68889, 0, 0, 0.77778],\n \"73\": [0, 0.68889, 0, 0, 0.38889],\n \"74\": [0.16667, 0.68889, 0, 0, 0.5],\n \"75\": [0, 0.68889, 0, 0, 0.77778],\n \"76\": [0, 0.68889, 0, 0, 0.66667],\n \"77\": [0, 0.68889, 0, 0, 0.94445],\n \"78\": [0, 0.68889, 0, 0, 0.72222],\n \"79\": [0.16667, 0.68889, 0, 0, 0.77778],\n \"80\": [0, 0.68889, 0, 0, 0.61111],\n \"81\": [0.16667, 0.68889, 0, 0, 0.77778],\n \"82\": [0, 0.68889, 0, 0, 0.72222],\n \"83\": [0, 0.68889, 0, 0, 0.55556],\n \"84\": [0, 0.68889, 0, 0, 0.66667],\n \"85\": [0, 0.68889, 0, 0, 0.72222],\n \"86\": [0, 0.68889, 0, 0, 0.72222],\n \"87\": [0, 0.68889, 0, 0, 1.0],\n \"88\": [0, 0.68889, 0, 0, 0.72222],\n \"89\": [0, 0.68889, 0, 0, 0.72222],\n \"90\": [0, 0.68889, 0, 0, 0.66667],\n \"107\": [0, 0.68889, 0, 0, 0.55556],\n \"160\": [0, 0, 0, 0, 0.25],\n \"165\": [0, 0.675, 0.025, 0, 0.75],\n \"174\": [0.15559, 0.69224, 0, 0, 0.94666],\n \"240\": [0, 0.68889, 0, 0, 0.55556],\n \"295\": [0, 0.68889, 0, 0, 0.54028],\n \"710\": [0, 0.825, 0, 0, 2.33334],\n \"732\": [0, 0.9, 0, 0, 2.33334],\n \"770\": [0, 0.825, 0, 0, 2.33334],\n \"771\": [0, 0.9, 0, 0, 2.33334],\n \"989\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"1008\": [0, 0.43056, 0.04028, 0, 0.66667],\n \"8245\": [0, 0.54986, 0, 0, 0.275],\n \"8463\": [0, 0.68889, 0, 0, 0.54028],\n \"8487\": [0, 0.68889, 0, 0, 0.72222],\n \"8498\": [0, 0.68889, 0, 0, 0.55556],\n \"8502\": [0, 0.68889, 0, 0, 0.66667],\n \"8503\": [0, 0.68889, 0, 0, 0.44445],\n \"8504\": [0, 0.68889, 0, 0, 0.66667],\n \"8513\": [0, 0.68889, 0, 0, 0.63889],\n \"8592\": [-0.03598, 0.46402, 0, 0, 0.5],\n \"8594\": [-0.03598, 0.46402, 0, 0, 0.5],\n \"8602\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8603\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8606\": [0.01354, 0.52239, 0, 0, 1.0],\n \"8608\": [0.01354, 0.52239, 0, 0, 1.0],\n \"8610\": [0.01354, 0.52239, 0, 0, 1.11111],\n \"8611\": [0.01354, 0.52239, 0, 0, 1.11111],\n \"8619\": [0, 0.54986, 0, 0, 1.0],\n \"8620\": [0, 0.54986, 0, 0, 1.0],\n \"8621\": [-0.13313, 0.37788, 0, 0, 1.38889],\n \"8622\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8624\": [0, 0.69224, 0, 0, 0.5],\n \"8625\": [0, 0.69224, 0, 0, 0.5],\n \"8630\": [0, 0.43056, 0, 0, 1.0],\n \"8631\": [0, 0.43056, 0, 0, 1.0],\n \"8634\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8635\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8638\": [0.19444, 0.69224, 0, 0, 0.41667],\n \"8639\": [0.19444, 0.69224, 0, 0, 0.41667],\n \"8642\": [0.19444, 0.69224, 0, 0, 0.41667],\n \"8643\": [0.19444, 0.69224, 0, 0, 0.41667],\n \"8644\": [0.1808, 0.675, 0, 0, 1.0],\n \"8646\": [0.1808, 0.675, 0, 0, 1.0],\n \"8647\": [0.1808, 0.675, 0, 0, 1.0],\n \"8648\": [0.19444, 0.69224, 0, 0, 0.83334],\n \"8649\": [0.1808, 0.675, 0, 0, 1.0],\n \"8650\": [0.19444, 0.69224, 0, 0, 0.83334],\n \"8651\": [0.01354, 0.52239, 0, 0, 1.0],\n \"8652\": [0.01354, 0.52239, 0, 0, 1.0],\n \"8653\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8654\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8655\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8666\": [0.13667, 0.63667, 0, 0, 1.0],\n \"8667\": [0.13667, 0.63667, 0, 0, 1.0],\n \"8669\": [-0.13313, 0.37788, 0, 0, 1.0],\n \"8672\": [-0.064, 0.437, 0, 0, 1.334],\n \"8674\": [-0.064, 0.437, 0, 0, 1.334],\n \"8705\": [0, 0.825, 0, 0, 0.5],\n \"8708\": [0, 0.68889, 0, 0, 0.55556],\n \"8709\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8717\": [0, 0.43056, 0, 0, 0.42917],\n \"8722\": [-0.03598, 0.46402, 0, 0, 0.5],\n \"8724\": [0.08198, 0.69224, 0, 0, 0.77778],\n \"8726\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8733\": [0, 0.69224, 0, 0, 0.77778],\n \"8736\": [0, 0.69224, 0, 0, 0.72222],\n \"8737\": [0, 0.69224, 0, 0, 0.72222],\n \"8738\": [0.03517, 0.52239, 0, 0, 0.72222],\n \"8739\": [0.08167, 0.58167, 0, 0, 0.22222],\n \"8740\": [0.25142, 0.74111, 0, 0, 0.27778],\n \"8741\": [0.08167, 0.58167, 0, 0, 0.38889],\n \"8742\": [0.25142, 0.74111, 0, 0, 0.5],\n \"8756\": [0, 0.69224, 0, 0, 0.66667],\n \"8757\": [0, 0.69224, 0, 0, 0.66667],\n \"8764\": [-0.13313, 0.36687, 0, 0, 0.77778],\n \"8765\": [-0.13313, 0.37788, 0, 0, 0.77778],\n \"8769\": [-0.13313, 0.36687, 0, 0, 0.77778],\n \"8770\": [-0.03625, 0.46375, 0, 0, 0.77778],\n \"8774\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8776\": [-0.01688, 0.48312, 0, 0, 0.77778],\n \"8778\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8782\": [0.06062, 0.54986, 0, 0, 0.77778],\n \"8783\": [0.06062, 0.54986, 0, 0, 0.77778],\n \"8785\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8786\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8787\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8790\": [0, 0.69224, 0, 0, 0.77778],\n \"8791\": [0.22958, 0.72958, 0, 0, 0.77778],\n \"8796\": [0.08198, 0.91667, 0, 0, 0.77778],\n \"8806\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"8807\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"8808\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"8809\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"8812\": [0.25583, 0.75583, 0, 0, 0.5],\n \"8814\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8815\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8816\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8817\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8818\": [0.22958, 0.72958, 0, 0, 0.77778],\n \"8819\": [0.22958, 0.72958, 0, 0, 0.77778],\n \"8822\": [0.1808, 0.675, 0, 0, 0.77778],\n \"8823\": [0.1808, 0.675, 0, 0, 0.77778],\n \"8828\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8829\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8830\": [0.22958, 0.72958, 0, 0, 0.77778],\n \"8831\": [0.22958, 0.72958, 0, 0, 0.77778],\n \"8832\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8833\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8840\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8841\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8842\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8843\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8847\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8848\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8858\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8859\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8861\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8862\": [0, 0.675, 0, 0, 0.77778],\n \"8863\": [0, 0.675, 0, 0, 0.77778],\n \"8864\": [0, 0.675, 0, 0, 0.77778],\n \"8865\": [0, 0.675, 0, 0, 0.77778],\n \"8872\": [0, 0.69224, 0, 0, 0.61111],\n \"8873\": [0, 0.69224, 0, 0, 0.72222],\n \"8874\": [0, 0.69224, 0, 0, 0.88889],\n \"8876\": [0, 0.68889, 0, 0, 0.61111],\n \"8877\": [0, 0.68889, 0, 0, 0.61111],\n \"8878\": [0, 0.68889, 0, 0, 0.72222],\n \"8879\": [0, 0.68889, 0, 0, 0.72222],\n \"8882\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8883\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8884\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8885\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8888\": [0, 0.54986, 0, 0, 1.11111],\n \"8890\": [0.19444, 0.43056, 0, 0, 0.55556],\n \"8891\": [0.19444, 0.69224, 0, 0, 0.61111],\n \"8892\": [0.19444, 0.69224, 0, 0, 0.61111],\n \"8901\": [0, 0.54986, 0, 0, 0.27778],\n \"8903\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8905\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8906\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8907\": [0, 0.69224, 0, 0, 0.77778],\n \"8908\": [0, 0.69224, 0, 0, 0.77778],\n \"8909\": [-0.03598, 0.46402, 0, 0, 0.77778],\n \"8910\": [0, 0.54986, 0, 0, 0.76042],\n \"8911\": [0, 0.54986, 0, 0, 0.76042],\n \"8912\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8913\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8914\": [0, 0.54986, 0, 0, 0.66667],\n \"8915\": [0, 0.54986, 0, 0, 0.66667],\n \"8916\": [0, 0.69224, 0, 0, 0.66667],\n \"8918\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8919\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8920\": [0.03517, 0.54986, 0, 0, 1.33334],\n \"8921\": [0.03517, 0.54986, 0, 0, 1.33334],\n \"8922\": [0.38569, 0.88569, 0, 0, 0.77778],\n \"8923\": [0.38569, 0.88569, 0, 0, 0.77778],\n \"8926\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8927\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8928\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8929\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8934\": [0.23222, 0.74111, 0, 0, 0.77778],\n \"8935\": [0.23222, 0.74111, 0, 0, 0.77778],\n \"8936\": [0.23222, 0.74111, 0, 0, 0.77778],\n \"8937\": [0.23222, 0.74111, 0, 0, 0.77778],\n \"8938\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8939\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8940\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8941\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8994\": [0.19444, 0.69224, 0, 0, 0.77778],\n \"8995\": [0.19444, 0.69224, 0, 0, 0.77778],\n \"9416\": [0.15559, 0.69224, 0, 0, 0.90222],\n \"9484\": [0, 0.69224, 0, 0, 0.5],\n \"9488\": [0, 0.69224, 0, 0, 0.5],\n \"9492\": [0, 0.37788, 0, 0, 0.5],\n \"9496\": [0, 0.37788, 0, 0, 0.5],\n \"9585\": [0.19444, 0.68889, 0, 0, 0.88889],\n \"9586\": [0.19444, 0.74111, 0, 0, 0.88889],\n \"9632\": [0, 0.675, 0, 0, 0.77778],\n \"9633\": [0, 0.675, 0, 0, 0.77778],\n \"9650\": [0, 0.54986, 0, 0, 0.72222],\n \"9651\": [0, 0.54986, 0, 0, 0.72222],\n \"9654\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"9660\": [0, 0.54986, 0, 0, 0.72222],\n \"9661\": [0, 0.54986, 0, 0, 0.72222],\n \"9664\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"9674\": [0.11111, 0.69224, 0, 0, 0.66667],\n \"9733\": [0.19444, 0.69224, 0, 0, 0.94445],\n \"10003\": [0, 0.69224, 0, 0, 0.83334],\n \"10016\": [0, 0.69224, 0, 0, 0.83334],\n \"10731\": [0.11111, 0.69224, 0, 0, 0.66667],\n \"10846\": [0.19444, 0.75583, 0, 0, 0.61111],\n \"10877\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"10878\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"10885\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"10886\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"10887\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"10888\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"10889\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10890\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10891\": [0.48256, 0.98256, 0, 0, 0.77778],\n \"10892\": [0.48256, 0.98256, 0, 0, 0.77778],\n \"10901\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"10902\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"10933\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"10934\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"10935\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10936\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10937\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10938\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10949\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"10950\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"10955\": [0.28481, 0.79383, 0, 0, 0.77778],\n \"10956\": [0.28481, 0.79383, 0, 0, 0.77778],\n \"57350\": [0.08167, 0.58167, 0, 0, 0.22222],\n \"57351\": [0.08167, 0.58167, 0, 0, 0.38889],\n \"57352\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"57353\": [0, 0.43056, 0.04028, 0, 0.66667],\n \"57356\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57357\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57358\": [0.41951, 0.91951, 0, 0, 0.77778],\n \"57359\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"57360\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"57361\": [0.41951, 0.91951, 0, 0, 0.77778],\n \"57366\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57367\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57368\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57369\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57370\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"57371\": [0.13597, 0.63597, 0, 0, 0.77778]\n },\n \"Caligraphic-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"65\": [0, 0.68333, 0, 0.19445, 0.79847],\n \"66\": [0, 0.68333, 0.03041, 0.13889, 0.65681],\n \"67\": [0, 0.68333, 0.05834, 0.13889, 0.52653],\n \"68\": [0, 0.68333, 0.02778, 0.08334, 0.77139],\n \"69\": [0, 0.68333, 0.08944, 0.11111, 0.52778],\n \"70\": [0, 0.68333, 0.09931, 0.11111, 0.71875],\n \"71\": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487],\n \"72\": [0, 0.68333, 0.00965, 0.11111, 0.84452],\n \"73\": [0, 0.68333, 0.07382, 0, 0.54452],\n \"74\": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778],\n \"75\": [0, 0.68333, 0.01445, 0.05556, 0.76195],\n \"76\": [0, 0.68333, 0, 0.13889, 0.68972],\n \"77\": [0, 0.68333, 0, 0.13889, 1.2009],\n \"78\": [0, 0.68333, 0.14736, 0.08334, 0.82049],\n \"79\": [0, 0.68333, 0.02778, 0.11111, 0.79611],\n \"80\": [0, 0.68333, 0.08222, 0.08334, 0.69556],\n \"81\": [0.09722, 0.68333, 0, 0.11111, 0.81667],\n \"82\": [0, 0.68333, 0, 0.08334, 0.8475],\n \"83\": [0, 0.68333, 0.075, 0.13889, 0.60556],\n \"84\": [0, 0.68333, 0.25417, 0, 0.54464],\n \"85\": [0, 0.68333, 0.09931, 0.08334, 0.62583],\n \"86\": [0, 0.68333, 0.08222, 0, 0.61278],\n \"87\": [0, 0.68333, 0.08222, 0.08334, 0.98778],\n \"88\": [0, 0.68333, 0.14643, 0.13889, 0.7133],\n \"89\": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834],\n \"90\": [0, 0.68333, 0.07944, 0.13889, 0.72473],\n \"160\": [0, 0, 0, 0, 0.25]\n },\n \"Fraktur-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69141, 0, 0, 0.29574],\n \"34\": [0, 0.69141, 0, 0, 0.21471],\n \"38\": [0, 0.69141, 0, 0, 0.73786],\n \"39\": [0, 0.69141, 0, 0, 0.21201],\n \"40\": [0.24982, 0.74947, 0, 0, 0.38865],\n \"41\": [0.24982, 0.74947, 0, 0, 0.38865],\n \"42\": [0, 0.62119, 0, 0, 0.27764],\n \"43\": [0.08319, 0.58283, 0, 0, 0.75623],\n \"44\": [0, 0.10803, 0, 0, 0.27764],\n \"45\": [0.08319, 0.58283, 0, 0, 0.75623],\n \"46\": [0, 0.10803, 0, 0, 0.27764],\n \"47\": [0.24982, 0.74947, 0, 0, 0.50181],\n \"48\": [0, 0.47534, 0, 0, 0.50181],\n \"49\": [0, 0.47534, 0, 0, 0.50181],\n \"50\": [0, 0.47534, 0, 0, 0.50181],\n \"51\": [0.18906, 0.47534, 0, 0, 0.50181],\n \"52\": [0.18906, 0.47534, 0, 0, 0.50181],\n \"53\": [0.18906, 0.47534, 0, 0, 0.50181],\n \"54\": [0, 0.69141, 0, 0, 0.50181],\n \"55\": [0.18906, 0.47534, 0, 0, 0.50181],\n \"56\": [0, 0.69141, 0, 0, 0.50181],\n \"57\": [0.18906, 0.47534, 0, 0, 0.50181],\n \"58\": [0, 0.47534, 0, 0, 0.21606],\n \"59\": [0.12604, 0.47534, 0, 0, 0.21606],\n \"61\": [-0.13099, 0.36866, 0, 0, 0.75623],\n \"63\": [0, 0.69141, 0, 0, 0.36245],\n \"65\": [0, 0.69141, 0, 0, 0.7176],\n \"66\": [0, 0.69141, 0, 0, 0.88397],\n \"67\": [0, 0.69141, 0, 0, 0.61254],\n \"68\": [0, 0.69141, 0, 0, 0.83158],\n \"69\": [0, 0.69141, 0, 0, 0.66278],\n \"70\": [0.12604, 0.69141, 0, 0, 0.61119],\n \"71\": [0, 0.69141, 0, 0, 0.78539],\n \"72\": [0.06302, 0.69141, 0, 0, 0.7203],\n \"73\": [0, 0.69141, 0, 0, 0.55448],\n \"74\": [0.12604, 0.69141, 0, 0, 0.55231],\n \"75\": [0, 0.69141, 0, 0, 0.66845],\n \"76\": [0, 0.69141, 0, 0, 0.66602],\n \"77\": [0, 0.69141, 0, 0, 1.04953],\n \"78\": [0, 0.69141, 0, 0, 0.83212],\n \"79\": [0, 0.69141, 0, 0, 0.82699],\n \"80\": [0.18906, 0.69141, 0, 0, 0.82753],\n \"81\": [0.03781, 0.69141, 0, 0, 0.82699],\n \"82\": [0, 0.69141, 0, 0, 0.82807],\n \"83\": [0, 0.69141, 0, 0, 0.82861],\n \"84\": [0, 0.69141, 0, 0, 0.66899],\n \"85\": [0, 0.69141, 0, 0, 0.64576],\n \"86\": [0, 0.69141, 0, 0, 0.83131],\n \"87\": [0, 0.69141, 0, 0, 1.04602],\n \"88\": [0, 0.69141, 0, 0, 0.71922],\n \"89\": [0.18906, 0.69141, 0, 0, 0.83293],\n \"90\": [0.12604, 0.69141, 0, 0, 0.60201],\n \"91\": [0.24982, 0.74947, 0, 0, 0.27764],\n \"93\": [0.24982, 0.74947, 0, 0, 0.27764],\n \"94\": [0, 0.69141, 0, 0, 0.49965],\n \"97\": [0, 0.47534, 0, 0, 0.50046],\n \"98\": [0, 0.69141, 0, 0, 0.51315],\n \"99\": [0, 0.47534, 0, 0, 0.38946],\n \"100\": [0, 0.62119, 0, 0, 0.49857],\n \"101\": [0, 0.47534, 0, 0, 0.40053],\n \"102\": [0.18906, 0.69141, 0, 0, 0.32626],\n \"103\": [0.18906, 0.47534, 0, 0, 0.5037],\n \"104\": [0.18906, 0.69141, 0, 0, 0.52126],\n \"105\": [0, 0.69141, 0, 0, 0.27899],\n \"106\": [0, 0.69141, 0, 0, 0.28088],\n \"107\": [0, 0.69141, 0, 0, 0.38946],\n \"108\": [0, 0.69141, 0, 0, 0.27953],\n \"109\": [0, 0.47534, 0, 0, 0.76676],\n \"110\": [0, 0.47534, 0, 0, 0.52666],\n \"111\": [0, 0.47534, 0, 0, 0.48885],\n \"112\": [0.18906, 0.52396, 0, 0, 0.50046],\n \"113\": [0.18906, 0.47534, 0, 0, 0.48912],\n \"114\": [0, 0.47534, 0, 0, 0.38919],\n \"115\": [0, 0.47534, 0, 0, 0.44266],\n \"116\": [0, 0.62119, 0, 0, 0.33301],\n \"117\": [0, 0.47534, 0, 0, 0.5172],\n \"118\": [0, 0.52396, 0, 0, 0.5118],\n \"119\": [0, 0.52396, 0, 0, 0.77351],\n \"120\": [0.18906, 0.47534, 0, 0, 0.38865],\n \"121\": [0.18906, 0.47534, 0, 0, 0.49884],\n \"122\": [0.18906, 0.47534, 0, 0, 0.39054],\n \"160\": [0, 0, 0, 0, 0.25],\n \"8216\": [0, 0.69141, 0, 0, 0.21471],\n \"8217\": [0, 0.69141, 0, 0, 0.21471],\n \"58112\": [0, 0.62119, 0, 0, 0.49749],\n \"58113\": [0, 0.62119, 0, 0, 0.4983],\n \"58114\": [0.18906, 0.69141, 0, 0, 0.33328],\n \"58115\": [0.18906, 0.69141, 0, 0, 0.32923],\n \"58116\": [0.18906, 0.47534, 0, 0, 0.50343],\n \"58117\": [0, 0.69141, 0, 0, 0.33301],\n \"58118\": [0, 0.62119, 0, 0, 0.33409],\n \"58119\": [0, 0.47534, 0, 0, 0.50073]\n },\n \"Main-Bold\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0, 0, 0.35],\n \"34\": [0, 0.69444, 0, 0, 0.60278],\n \"35\": [0.19444, 0.69444, 0, 0, 0.95833],\n \"36\": [0.05556, 0.75, 0, 0, 0.575],\n \"37\": [0.05556, 0.75, 0, 0, 0.95833],\n \"38\": [0, 0.69444, 0, 0, 0.89444],\n \"39\": [0, 0.69444, 0, 0, 0.31944],\n \"40\": [0.25, 0.75, 0, 0, 0.44722],\n \"41\": [0.25, 0.75, 0, 0, 0.44722],\n \"42\": [0, 0.75, 0, 0, 0.575],\n \"43\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"44\": [0.19444, 0.15556, 0, 0, 0.31944],\n \"45\": [0, 0.44444, 0, 0, 0.38333],\n \"46\": [0, 0.15556, 0, 0, 0.31944],\n \"47\": [0.25, 0.75, 0, 0, 0.575],\n \"48\": [0, 0.64444, 0, 0, 0.575],\n \"49\": [0, 0.64444, 0, 0, 0.575],\n \"50\": [0, 0.64444, 0, 0, 0.575],\n \"51\": [0, 0.64444, 0, 0, 0.575],\n \"52\": [0, 0.64444, 0, 0, 0.575],\n \"53\": [0, 0.64444, 0, 0, 0.575],\n \"54\": [0, 0.64444, 0, 0, 0.575],\n \"55\": [0, 0.64444, 0, 0, 0.575],\n \"56\": [0, 0.64444, 0, 0, 0.575],\n \"57\": [0, 0.64444, 0, 0, 0.575],\n \"58\": [0, 0.44444, 0, 0, 0.31944],\n \"59\": [0.19444, 0.44444, 0, 0, 0.31944],\n \"60\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"61\": [-0.10889, 0.39111, 0, 0, 0.89444],\n \"62\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"63\": [0, 0.69444, 0, 0, 0.54305],\n \"64\": [0, 0.69444, 0, 0, 0.89444],\n \"65\": [0, 0.68611, 0, 0, 0.86944],\n \"66\": [0, 0.68611, 0, 0, 0.81805],\n \"67\": [0, 0.68611, 0, 0, 0.83055],\n \"68\": [0, 0.68611, 0, 0, 0.88194],\n \"69\": [0, 0.68611, 0, 0, 0.75555],\n \"70\": [0, 0.68611, 0, 0, 0.72361],\n \"71\": [0, 0.68611, 0, 0, 0.90416],\n \"72\": [0, 0.68611, 0, 0, 0.9],\n \"73\": [0, 0.68611, 0, 0, 0.43611],\n \"74\": [0, 0.68611, 0, 0, 0.59444],\n \"75\": [0, 0.68611, 0, 0, 0.90138],\n \"76\": [0, 0.68611, 0, 0, 0.69166],\n \"77\": [0, 0.68611, 0, 0, 1.09166],\n \"78\": [0, 0.68611, 0, 0, 0.9],\n \"79\": [0, 0.68611, 0, 0, 0.86388],\n \"80\": [0, 0.68611, 0, 0, 0.78611],\n \"81\": [0.19444, 0.68611, 0, 0, 0.86388],\n \"82\": [0, 0.68611, 0, 0, 0.8625],\n \"83\": [0, 0.68611, 0, 0, 0.63889],\n \"84\": [0, 0.68611, 0, 0, 0.8],\n \"85\": [0, 0.68611, 0, 0, 0.88472],\n \"86\": [0, 0.68611, 0.01597, 0, 0.86944],\n \"87\": [0, 0.68611, 0.01597, 0, 1.18888],\n \"88\": [0, 0.68611, 0, 0, 0.86944],\n \"89\": [0, 0.68611, 0.02875, 0, 0.86944],\n \"90\": [0, 0.68611, 0, 0, 0.70277],\n \"91\": [0.25, 0.75, 0, 0, 0.31944],\n \"92\": [0.25, 0.75, 0, 0, 0.575],\n \"93\": [0.25, 0.75, 0, 0, 0.31944],\n \"94\": [0, 0.69444, 0, 0, 0.575],\n \"95\": [0.31, 0.13444, 0.03194, 0, 0.575],\n \"97\": [0, 0.44444, 0, 0, 0.55902],\n \"98\": [0, 0.69444, 0, 0, 0.63889],\n \"99\": [0, 0.44444, 0, 0, 0.51111],\n \"100\": [0, 0.69444, 0, 0, 0.63889],\n \"101\": [0, 0.44444, 0, 0, 0.52708],\n \"102\": [0, 0.69444, 0.10903, 0, 0.35139],\n \"103\": [0.19444, 0.44444, 0.01597, 0, 0.575],\n \"104\": [0, 0.69444, 0, 0, 0.63889],\n \"105\": [0, 0.69444, 0, 0, 0.31944],\n \"106\": [0.19444, 0.69444, 0, 0, 0.35139],\n \"107\": [0, 0.69444, 0, 0, 0.60694],\n \"108\": [0, 0.69444, 0, 0, 0.31944],\n \"109\": [0, 0.44444, 0, 0, 0.95833],\n \"110\": [0, 0.44444, 0, 0, 0.63889],\n \"111\": [0, 0.44444, 0, 0, 0.575],\n \"112\": [0.19444, 0.44444, 0, 0, 0.63889],\n \"113\": [0.19444, 0.44444, 0, 0, 0.60694],\n \"114\": [0, 0.44444, 0, 0, 0.47361],\n \"115\": [0, 0.44444, 0, 0, 0.45361],\n \"116\": [0, 0.63492, 0, 0, 0.44722],\n \"117\": [0, 0.44444, 0, 0, 0.63889],\n \"118\": [0, 0.44444, 0.01597, 0, 0.60694],\n \"119\": [0, 0.44444, 0.01597, 0, 0.83055],\n \"120\": [0, 0.44444, 0, 0, 0.60694],\n \"121\": [0.19444, 0.44444, 0.01597, 0, 0.60694],\n \"122\": [0, 0.44444, 0, 0, 0.51111],\n \"123\": [0.25, 0.75, 0, 0, 0.575],\n \"124\": [0.25, 0.75, 0, 0, 0.31944],\n \"125\": [0.25, 0.75, 0, 0, 0.575],\n \"126\": [0.35, 0.34444, 0, 0, 0.575],\n \"160\": [0, 0, 0, 0, 0.25],\n \"163\": [0, 0.69444, 0, 0, 0.86853],\n \"168\": [0, 0.69444, 0, 0, 0.575],\n \"172\": [0, 0.44444, 0, 0, 0.76666],\n \"176\": [0, 0.69444, 0, 0, 0.86944],\n \"177\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"184\": [0.17014, 0, 0, 0, 0.51111],\n \"198\": [0, 0.68611, 0, 0, 1.04166],\n \"215\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"216\": [0.04861, 0.73472, 0, 0, 0.89444],\n \"223\": [0, 0.69444, 0, 0, 0.59722],\n \"230\": [0, 0.44444, 0, 0, 0.83055],\n \"247\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"248\": [0.09722, 0.54167, 0, 0, 0.575],\n \"305\": [0, 0.44444, 0, 0, 0.31944],\n \"338\": [0, 0.68611, 0, 0, 1.16944],\n \"339\": [0, 0.44444, 0, 0, 0.89444],\n \"567\": [0.19444, 0.44444, 0, 0, 0.35139],\n \"710\": [0, 0.69444, 0, 0, 0.575],\n \"711\": [0, 0.63194, 0, 0, 0.575],\n \"713\": [0, 0.59611, 0, 0, 0.575],\n \"714\": [0, 0.69444, 0, 0, 0.575],\n \"715\": [0, 0.69444, 0, 0, 0.575],\n \"728\": [0, 0.69444, 0, 0, 0.575],\n \"729\": [0, 0.69444, 0, 0, 0.31944],\n \"730\": [0, 0.69444, 0, 0, 0.86944],\n \"732\": [0, 0.69444, 0, 0, 0.575],\n \"733\": [0, 0.69444, 0, 0, 0.575],\n \"915\": [0, 0.68611, 0, 0, 0.69166],\n \"916\": [0, 0.68611, 0, 0, 0.95833],\n \"920\": [0, 0.68611, 0, 0, 0.89444],\n \"923\": [0, 0.68611, 0, 0, 0.80555],\n \"926\": [0, 0.68611, 0, 0, 0.76666],\n \"928\": [0, 0.68611, 0, 0, 0.9],\n \"931\": [0, 0.68611, 0, 0, 0.83055],\n \"933\": [0, 0.68611, 0, 0, 0.89444],\n \"934\": [0, 0.68611, 0, 0, 0.83055],\n \"936\": [0, 0.68611, 0, 0, 0.89444],\n \"937\": [0, 0.68611, 0, 0, 0.83055],\n \"8211\": [0, 0.44444, 0.03194, 0, 0.575],\n \"8212\": [0, 0.44444, 0.03194, 0, 1.14999],\n \"8216\": [0, 0.69444, 0, 0, 0.31944],\n \"8217\": [0, 0.69444, 0, 0, 0.31944],\n \"8220\": [0, 0.69444, 0, 0, 0.60278],\n \"8221\": [0, 0.69444, 0, 0, 0.60278],\n \"8224\": [0.19444, 0.69444, 0, 0, 0.51111],\n \"8225\": [0.19444, 0.69444, 0, 0, 0.51111],\n \"8242\": [0, 0.55556, 0, 0, 0.34444],\n \"8407\": [0, 0.72444, 0.15486, 0, 0.575],\n \"8463\": [0, 0.69444, 0, 0, 0.66759],\n \"8465\": [0, 0.69444, 0, 0, 0.83055],\n \"8467\": [0, 0.69444, 0, 0, 0.47361],\n \"8472\": [0.19444, 0.44444, 0, 0, 0.74027],\n \"8476\": [0, 0.69444, 0, 0, 0.83055],\n \"8501\": [0, 0.69444, 0, 0, 0.70277],\n \"8592\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8593\": [0.19444, 0.69444, 0, 0, 0.575],\n \"8594\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8595\": [0.19444, 0.69444, 0, 0, 0.575],\n \"8596\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8597\": [0.25, 0.75, 0, 0, 0.575],\n \"8598\": [0.19444, 0.69444, 0, 0, 1.14999],\n \"8599\": [0.19444, 0.69444, 0, 0, 1.14999],\n \"8600\": [0.19444, 0.69444, 0, 0, 1.14999],\n \"8601\": [0.19444, 0.69444, 0, 0, 1.14999],\n \"8636\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8637\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8640\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8641\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8656\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8657\": [0.19444, 0.69444, 0, 0, 0.70277],\n \"8658\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8659\": [0.19444, 0.69444, 0, 0, 0.70277],\n \"8660\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8661\": [0.25, 0.75, 0, 0, 0.70277],\n \"8704\": [0, 0.69444, 0, 0, 0.63889],\n \"8706\": [0, 0.69444, 0.06389, 0, 0.62847],\n \"8707\": [0, 0.69444, 0, 0, 0.63889],\n \"8709\": [0.05556, 0.75, 0, 0, 0.575],\n \"8711\": [0, 0.68611, 0, 0, 0.95833],\n \"8712\": [0.08556, 0.58556, 0, 0, 0.76666],\n \"8715\": [0.08556, 0.58556, 0, 0, 0.76666],\n \"8722\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8723\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8725\": [0.25, 0.75, 0, 0, 0.575],\n \"8726\": [0.25, 0.75, 0, 0, 0.575],\n \"8727\": [-0.02778, 0.47222, 0, 0, 0.575],\n \"8728\": [-0.02639, 0.47361, 0, 0, 0.575],\n \"8729\": [-0.02639, 0.47361, 0, 0, 0.575],\n \"8730\": [0.18, 0.82, 0, 0, 0.95833],\n \"8733\": [0, 0.44444, 0, 0, 0.89444],\n \"8734\": [0, 0.44444, 0, 0, 1.14999],\n \"8736\": [0, 0.69224, 0, 0, 0.72222],\n \"8739\": [0.25, 0.75, 0, 0, 0.31944],\n \"8741\": [0.25, 0.75, 0, 0, 0.575],\n \"8743\": [0, 0.55556, 0, 0, 0.76666],\n \"8744\": [0, 0.55556, 0, 0, 0.76666],\n \"8745\": [0, 0.55556, 0, 0, 0.76666],\n \"8746\": [0, 0.55556, 0, 0, 0.76666],\n \"8747\": [0.19444, 0.69444, 0.12778, 0, 0.56875],\n \"8764\": [-0.10889, 0.39111, 0, 0, 0.89444],\n \"8768\": [0.19444, 0.69444, 0, 0, 0.31944],\n \"8771\": [0.00222, 0.50222, 0, 0, 0.89444],\n \"8773\": [0.027, 0.638, 0, 0, 0.894],\n \"8776\": [0.02444, 0.52444, 0, 0, 0.89444],\n \"8781\": [0.00222, 0.50222, 0, 0, 0.89444],\n \"8801\": [0.00222, 0.50222, 0, 0, 0.89444],\n \"8804\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8805\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8810\": [0.08556, 0.58556, 0, 0, 1.14999],\n \"8811\": [0.08556, 0.58556, 0, 0, 1.14999],\n \"8826\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"8827\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"8834\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"8835\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"8838\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8839\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8846\": [0, 0.55556, 0, 0, 0.76666],\n \"8849\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8850\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8851\": [0, 0.55556, 0, 0, 0.76666],\n \"8852\": [0, 0.55556, 0, 0, 0.76666],\n \"8853\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8854\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8855\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8856\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8857\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8866\": [0, 0.69444, 0, 0, 0.70277],\n \"8867\": [0, 0.69444, 0, 0, 0.70277],\n \"8868\": [0, 0.69444, 0, 0, 0.89444],\n \"8869\": [0, 0.69444, 0, 0, 0.89444],\n \"8900\": [-0.02639, 0.47361, 0, 0, 0.575],\n \"8901\": [-0.02639, 0.47361, 0, 0, 0.31944],\n \"8902\": [-0.02778, 0.47222, 0, 0, 0.575],\n \"8968\": [0.25, 0.75, 0, 0, 0.51111],\n \"8969\": [0.25, 0.75, 0, 0, 0.51111],\n \"8970\": [0.25, 0.75, 0, 0, 0.51111],\n \"8971\": [0.25, 0.75, 0, 0, 0.51111],\n \"8994\": [-0.13889, 0.36111, 0, 0, 1.14999],\n \"8995\": [-0.13889, 0.36111, 0, 0, 1.14999],\n \"9651\": [0.19444, 0.69444, 0, 0, 1.02222],\n \"9657\": [-0.02778, 0.47222, 0, 0, 0.575],\n \"9661\": [0.19444, 0.69444, 0, 0, 1.02222],\n \"9667\": [-0.02778, 0.47222, 0, 0, 0.575],\n \"9711\": [0.19444, 0.69444, 0, 0, 1.14999],\n \"9824\": [0.12963, 0.69444, 0, 0, 0.89444],\n \"9825\": [0.12963, 0.69444, 0, 0, 0.89444],\n \"9826\": [0.12963, 0.69444, 0, 0, 0.89444],\n \"9827\": [0.12963, 0.69444, 0, 0, 0.89444],\n \"9837\": [0, 0.75, 0, 0, 0.44722],\n \"9838\": [0.19444, 0.69444, 0, 0, 0.44722],\n \"9839\": [0.19444, 0.69444, 0, 0, 0.44722],\n \"10216\": [0.25, 0.75, 0, 0, 0.44722],\n \"10217\": [0.25, 0.75, 0, 0, 0.44722],\n \"10815\": [0, 0.68611, 0, 0, 0.9],\n \"10927\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"10928\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"57376\": [0.19444, 0.69444, 0, 0, 0]\n },\n \"Main-BoldItalic\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0.11417, 0, 0.38611],\n \"34\": [0, 0.69444, 0.07939, 0, 0.62055],\n \"35\": [0.19444, 0.69444, 0.06833, 0, 0.94444],\n \"37\": [0.05556, 0.75, 0.12861, 0, 0.94444],\n \"38\": [0, 0.69444, 0.08528, 0, 0.88555],\n \"39\": [0, 0.69444, 0.12945, 0, 0.35555],\n \"40\": [0.25, 0.75, 0.15806, 0, 0.47333],\n \"41\": [0.25, 0.75, 0.03306, 0, 0.47333],\n \"42\": [0, 0.75, 0.14333, 0, 0.59111],\n \"43\": [0.10333, 0.60333, 0.03306, 0, 0.88555],\n \"44\": [0.19444, 0.14722, 0, 0, 0.35555],\n \"45\": [0, 0.44444, 0.02611, 0, 0.41444],\n \"46\": [0, 0.14722, 0, 0, 0.35555],\n \"47\": [0.25, 0.75, 0.15806, 0, 0.59111],\n \"48\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"49\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"50\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"51\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"52\": [0.19444, 0.64444, 0.13167, 0, 0.59111],\n \"53\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"54\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"55\": [0.19444, 0.64444, 0.13167, 0, 0.59111],\n \"56\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"57\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"58\": [0, 0.44444, 0.06695, 0, 0.35555],\n \"59\": [0.19444, 0.44444, 0.06695, 0, 0.35555],\n \"61\": [-0.10889, 0.39111, 0.06833, 0, 0.88555],\n \"63\": [0, 0.69444, 0.11472, 0, 0.59111],\n \"64\": [0, 0.69444, 0.09208, 0, 0.88555],\n \"65\": [0, 0.68611, 0, 0, 0.86555],\n \"66\": [0, 0.68611, 0.0992, 0, 0.81666],\n \"67\": [0, 0.68611, 0.14208, 0, 0.82666],\n \"68\": [0, 0.68611, 0.09062, 0, 0.87555],\n \"69\": [0, 0.68611, 0.11431, 0, 0.75666],\n \"70\": [0, 0.68611, 0.12903, 0, 0.72722],\n \"71\": [0, 0.68611, 0.07347, 0, 0.89527],\n \"72\": [0, 0.68611, 0.17208, 0, 0.8961],\n \"73\": [0, 0.68611, 0.15681, 0, 0.47166],\n \"74\": [0, 0.68611, 0.145, 0, 0.61055],\n \"75\": [0, 0.68611, 0.14208, 0, 0.89499],\n \"76\": [0, 0.68611, 0, 0, 0.69777],\n \"77\": [0, 0.68611, 0.17208, 0, 1.07277],\n \"78\": [0, 0.68611, 0.17208, 0, 0.8961],\n \"79\": [0, 0.68611, 0.09062, 0, 0.85499],\n \"80\": [0, 0.68611, 0.0992, 0, 0.78721],\n \"81\": [0.19444, 0.68611, 0.09062, 0, 0.85499],\n \"82\": [0, 0.68611, 0.02559, 0, 0.85944],\n \"83\": [0, 0.68611, 0.11264, 0, 0.64999],\n \"84\": [0, 0.68611, 0.12903, 0, 0.7961],\n \"85\": [0, 0.68611, 0.17208, 0, 0.88083],\n \"86\": [0, 0.68611, 0.18625, 0, 0.86555],\n \"87\": [0, 0.68611, 0.18625, 0, 1.15999],\n \"88\": [0, 0.68611, 0.15681, 0, 0.86555],\n \"89\": [0, 0.68611, 0.19803, 0, 0.86555],\n \"90\": [0, 0.68611, 0.14208, 0, 0.70888],\n \"91\": [0.25, 0.75, 0.1875, 0, 0.35611],\n \"93\": [0.25, 0.75, 0.09972, 0, 0.35611],\n \"94\": [0, 0.69444, 0.06709, 0, 0.59111],\n \"95\": [0.31, 0.13444, 0.09811, 0, 0.59111],\n \"97\": [0, 0.44444, 0.09426, 0, 0.59111],\n \"98\": [0, 0.69444, 0.07861, 0, 0.53222],\n \"99\": [0, 0.44444, 0.05222, 0, 0.53222],\n \"100\": [0, 0.69444, 0.10861, 0, 0.59111],\n \"101\": [0, 0.44444, 0.085, 0, 0.53222],\n \"102\": [0.19444, 0.69444, 0.21778, 0, 0.4],\n \"103\": [0.19444, 0.44444, 0.105, 0, 0.53222],\n \"104\": [0, 0.69444, 0.09426, 0, 0.59111],\n \"105\": [0, 0.69326, 0.11387, 0, 0.35555],\n \"106\": [0.19444, 0.69326, 0.1672, 0, 0.35555],\n \"107\": [0, 0.69444, 0.11111, 0, 0.53222],\n \"108\": [0, 0.69444, 0.10861, 0, 0.29666],\n \"109\": [0, 0.44444, 0.09426, 0, 0.94444],\n \"110\": [0, 0.44444, 0.09426, 0, 0.64999],\n \"111\": [0, 0.44444, 0.07861, 0, 0.59111],\n \"112\": [0.19444, 0.44444, 0.07861, 0, 0.59111],\n \"113\": [0.19444, 0.44444, 0.105, 0, 0.53222],\n \"114\": [0, 0.44444, 0.11111, 0, 0.50167],\n \"115\": [0, 0.44444, 0.08167, 0, 0.48694],\n \"116\": [0, 0.63492, 0.09639, 0, 0.385],\n \"117\": [0, 0.44444, 0.09426, 0, 0.62055],\n \"118\": [0, 0.44444, 0.11111, 0, 0.53222],\n \"119\": [0, 0.44444, 0.11111, 0, 0.76777],\n \"120\": [0, 0.44444, 0.12583, 0, 0.56055],\n \"121\": [0.19444, 0.44444, 0.105, 0, 0.56166],\n \"122\": [0, 0.44444, 0.13889, 0, 0.49055],\n \"126\": [0.35, 0.34444, 0.11472, 0, 0.59111],\n \"160\": [0, 0, 0, 0, 0.25],\n \"168\": [0, 0.69444, 0.11473, 0, 0.59111],\n \"176\": [0, 0.69444, 0, 0, 0.94888],\n \"184\": [0.17014, 0, 0, 0, 0.53222],\n \"198\": [0, 0.68611, 0.11431, 0, 1.02277],\n \"216\": [0.04861, 0.73472, 0.09062, 0, 0.88555],\n \"223\": [0.19444, 0.69444, 0.09736, 0, 0.665],\n \"230\": [0, 0.44444, 0.085, 0, 0.82666],\n \"248\": [0.09722, 0.54167, 0.09458, 0, 0.59111],\n \"305\": [0, 0.44444, 0.09426, 0, 0.35555],\n \"338\": [0, 0.68611, 0.11431, 0, 1.14054],\n \"339\": [0, 0.44444, 0.085, 0, 0.82666],\n \"567\": [0.19444, 0.44444, 0.04611, 0, 0.385],\n \"710\": [0, 0.69444, 0.06709, 0, 0.59111],\n \"711\": [0, 0.63194, 0.08271, 0, 0.59111],\n \"713\": [0, 0.59444, 0.10444, 0, 0.59111],\n \"714\": [0, 0.69444, 0.08528, 0, 0.59111],\n \"715\": [0, 0.69444, 0, 0, 0.59111],\n \"728\": [0, 0.69444, 0.10333, 0, 0.59111],\n \"729\": [0, 0.69444, 0.12945, 0, 0.35555],\n \"730\": [0, 0.69444, 0, 0, 0.94888],\n \"732\": [0, 0.69444, 0.11472, 0, 0.59111],\n \"733\": [0, 0.69444, 0.11472, 0, 0.59111],\n \"915\": [0, 0.68611, 0.12903, 0, 0.69777],\n \"916\": [0, 0.68611, 0, 0, 0.94444],\n \"920\": [0, 0.68611, 0.09062, 0, 0.88555],\n \"923\": [0, 0.68611, 0, 0, 0.80666],\n \"926\": [0, 0.68611, 0.15092, 0, 0.76777],\n \"928\": [0, 0.68611, 0.17208, 0, 0.8961],\n \"931\": [0, 0.68611, 0.11431, 0, 0.82666],\n \"933\": [0, 0.68611, 0.10778, 0, 0.88555],\n \"934\": [0, 0.68611, 0.05632, 0, 0.82666],\n \"936\": [0, 0.68611, 0.10778, 0, 0.88555],\n \"937\": [0, 0.68611, 0.0992, 0, 0.82666],\n \"8211\": [0, 0.44444, 0.09811, 0, 0.59111],\n \"8212\": [0, 0.44444, 0.09811, 0, 1.18221],\n \"8216\": [0, 0.69444, 0.12945, 0, 0.35555],\n \"8217\": [0, 0.69444, 0.12945, 0, 0.35555],\n \"8220\": [0, 0.69444, 0.16772, 0, 0.62055],\n \"8221\": [0, 0.69444, 0.07939, 0, 0.62055]\n },\n \"Main-Italic\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0.12417, 0, 0.30667],\n \"34\": [0, 0.69444, 0.06961, 0, 0.51444],\n \"35\": [0.19444, 0.69444, 0.06616, 0, 0.81777],\n \"37\": [0.05556, 0.75, 0.13639, 0, 0.81777],\n \"38\": [0, 0.69444, 0.09694, 0, 0.76666],\n \"39\": [0, 0.69444, 0.12417, 0, 0.30667],\n \"40\": [0.25, 0.75, 0.16194, 0, 0.40889],\n \"41\": [0.25, 0.75, 0.03694, 0, 0.40889],\n \"42\": [0, 0.75, 0.14917, 0, 0.51111],\n \"43\": [0.05667, 0.56167, 0.03694, 0, 0.76666],\n \"44\": [0.19444, 0.10556, 0, 0, 0.30667],\n \"45\": [0, 0.43056, 0.02826, 0, 0.35778],\n \"46\": [0, 0.10556, 0, 0, 0.30667],\n \"47\": [0.25, 0.75, 0.16194, 0, 0.51111],\n \"48\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"49\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"50\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"51\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"52\": [0.19444, 0.64444, 0.13556, 0, 0.51111],\n \"53\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"54\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"55\": [0.19444, 0.64444, 0.13556, 0, 0.51111],\n \"56\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"57\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"58\": [0, 0.43056, 0.0582, 0, 0.30667],\n \"59\": [0.19444, 0.43056, 0.0582, 0, 0.30667],\n \"61\": [-0.13313, 0.36687, 0.06616, 0, 0.76666],\n \"63\": [0, 0.69444, 0.1225, 0, 0.51111],\n \"64\": [0, 0.69444, 0.09597, 0, 0.76666],\n \"65\": [0, 0.68333, 0, 0, 0.74333],\n \"66\": [0, 0.68333, 0.10257, 0, 0.70389],\n \"67\": [0, 0.68333, 0.14528, 0, 0.71555],\n \"68\": [0, 0.68333, 0.09403, 0, 0.755],\n \"69\": [0, 0.68333, 0.12028, 0, 0.67833],\n \"70\": [0, 0.68333, 0.13305, 0, 0.65277],\n \"71\": [0, 0.68333, 0.08722, 0, 0.77361],\n \"72\": [0, 0.68333, 0.16389, 0, 0.74333],\n \"73\": [0, 0.68333, 0.15806, 0, 0.38555],\n \"74\": [0, 0.68333, 0.14028, 0, 0.525],\n \"75\": [0, 0.68333, 0.14528, 0, 0.76888],\n \"76\": [0, 0.68333, 0, 0, 0.62722],\n \"77\": [0, 0.68333, 0.16389, 0, 0.89666],\n \"78\": [0, 0.68333, 0.16389, 0, 0.74333],\n \"79\": [0, 0.68333, 0.09403, 0, 0.76666],\n \"80\": [0, 0.68333, 0.10257, 0, 0.67833],\n \"81\": [0.19444, 0.68333, 0.09403, 0, 0.76666],\n \"82\": [0, 0.68333, 0.03868, 0, 0.72944],\n \"83\": [0, 0.68333, 0.11972, 0, 0.56222],\n \"84\": [0, 0.68333, 0.13305, 0, 0.71555],\n \"85\": [0, 0.68333, 0.16389, 0, 0.74333],\n \"86\": [0, 0.68333, 0.18361, 0, 0.74333],\n \"87\": [0, 0.68333, 0.18361, 0, 0.99888],\n \"88\": [0, 0.68333, 0.15806, 0, 0.74333],\n \"89\": [0, 0.68333, 0.19383, 0, 0.74333],\n \"90\": [0, 0.68333, 0.14528, 0, 0.61333],\n \"91\": [0.25, 0.75, 0.1875, 0, 0.30667],\n \"93\": [0.25, 0.75, 0.10528, 0, 0.30667],\n \"94\": [0, 0.69444, 0.06646, 0, 0.51111],\n \"95\": [0.31, 0.12056, 0.09208, 0, 0.51111],\n \"97\": [0, 0.43056, 0.07671, 0, 0.51111],\n \"98\": [0, 0.69444, 0.06312, 0, 0.46],\n \"99\": [0, 0.43056, 0.05653, 0, 0.46],\n \"100\": [0, 0.69444, 0.10333, 0, 0.51111],\n \"101\": [0, 0.43056, 0.07514, 0, 0.46],\n \"102\": [0.19444, 0.69444, 0.21194, 0, 0.30667],\n \"103\": [0.19444, 0.43056, 0.08847, 0, 0.46],\n \"104\": [0, 0.69444, 0.07671, 0, 0.51111],\n \"105\": [0, 0.65536, 0.1019, 0, 0.30667],\n \"106\": [0.19444, 0.65536, 0.14467, 0, 0.30667],\n \"107\": [0, 0.69444, 0.10764, 0, 0.46],\n \"108\": [0, 0.69444, 0.10333, 0, 0.25555],\n \"109\": [0, 0.43056, 0.07671, 0, 0.81777],\n \"110\": [0, 0.43056, 0.07671, 0, 0.56222],\n \"111\": [0, 0.43056, 0.06312, 0, 0.51111],\n \"112\": [0.19444, 0.43056, 0.06312, 0, 0.51111],\n \"113\": [0.19444, 0.43056, 0.08847, 0, 0.46],\n \"114\": [0, 0.43056, 0.10764, 0, 0.42166],\n \"115\": [0, 0.43056, 0.08208, 0, 0.40889],\n \"116\": [0, 0.61508, 0.09486, 0, 0.33222],\n \"117\": [0, 0.43056, 0.07671, 0, 0.53666],\n \"118\": [0, 0.43056, 0.10764, 0, 0.46],\n \"119\": [0, 0.43056, 0.10764, 0, 0.66444],\n \"120\": [0, 0.43056, 0.12042, 0, 0.46389],\n \"121\": [0.19444, 0.43056, 0.08847, 0, 0.48555],\n \"122\": [0, 0.43056, 0.12292, 0, 0.40889],\n \"126\": [0.35, 0.31786, 0.11585, 0, 0.51111],\n \"160\": [0, 0, 0, 0, 0.25],\n \"168\": [0, 0.66786, 0.10474, 0, 0.51111],\n \"176\": [0, 0.69444, 0, 0, 0.83129],\n \"184\": [0.17014, 0, 0, 0, 0.46],\n \"198\": [0, 0.68333, 0.12028, 0, 0.88277],\n \"216\": [0.04861, 0.73194, 0.09403, 0, 0.76666],\n \"223\": [0.19444, 0.69444, 0.10514, 0, 0.53666],\n \"230\": [0, 0.43056, 0.07514, 0, 0.71555],\n \"248\": [0.09722, 0.52778, 0.09194, 0, 0.51111],\n \"338\": [0, 0.68333, 0.12028, 0, 0.98499],\n \"339\": [0, 0.43056, 0.07514, 0, 0.71555],\n \"710\": [0, 0.69444, 0.06646, 0, 0.51111],\n \"711\": [0, 0.62847, 0.08295, 0, 0.51111],\n \"713\": [0, 0.56167, 0.10333, 0, 0.51111],\n \"714\": [0, 0.69444, 0.09694, 0, 0.51111],\n \"715\": [0, 0.69444, 0, 0, 0.51111],\n \"728\": [0, 0.69444, 0.10806, 0, 0.51111],\n \"729\": [0, 0.66786, 0.11752, 0, 0.30667],\n \"730\": [0, 0.69444, 0, 0, 0.83129],\n \"732\": [0, 0.66786, 0.11585, 0, 0.51111],\n \"733\": [0, 0.69444, 0.1225, 0, 0.51111],\n \"915\": [0, 0.68333, 0.13305, 0, 0.62722],\n \"916\": [0, 0.68333, 0, 0, 0.81777],\n \"920\": [0, 0.68333, 0.09403, 0, 0.76666],\n \"923\": [0, 0.68333, 0, 0, 0.69222],\n \"926\": [0, 0.68333, 0.15294, 0, 0.66444],\n \"928\": [0, 0.68333, 0.16389, 0, 0.74333],\n \"931\": [0, 0.68333, 0.12028, 0, 0.71555],\n \"933\": [0, 0.68333, 0.11111, 0, 0.76666],\n \"934\": [0, 0.68333, 0.05986, 0, 0.71555],\n \"936\": [0, 0.68333, 0.11111, 0, 0.76666],\n \"937\": [0, 0.68333, 0.10257, 0, 0.71555],\n \"8211\": [0, 0.43056, 0.09208, 0, 0.51111],\n \"8212\": [0, 0.43056, 0.09208, 0, 1.02222],\n \"8216\": [0, 0.69444, 0.12417, 0, 0.30667],\n \"8217\": [0, 0.69444, 0.12417, 0, 0.30667],\n \"8220\": [0, 0.69444, 0.1685, 0, 0.51444],\n \"8221\": [0, 0.69444, 0.06961, 0, 0.51444],\n \"8463\": [0, 0.68889, 0, 0, 0.54028]\n },\n \"Main-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0, 0, 0.27778],\n \"34\": [0, 0.69444, 0, 0, 0.5],\n \"35\": [0.19444, 0.69444, 0, 0, 0.83334],\n \"36\": [0.05556, 0.75, 0, 0, 0.5],\n \"37\": [0.05556, 0.75, 0, 0, 0.83334],\n \"38\": [0, 0.69444, 0, 0, 0.77778],\n \"39\": [0, 0.69444, 0, 0, 0.27778],\n \"40\": [0.25, 0.75, 0, 0, 0.38889],\n \"41\": [0.25, 0.75, 0, 0, 0.38889],\n \"42\": [0, 0.75, 0, 0, 0.5],\n \"43\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"44\": [0.19444, 0.10556, 0, 0, 0.27778],\n \"45\": [0, 0.43056, 0, 0, 0.33333],\n \"46\": [0, 0.10556, 0, 0, 0.27778],\n \"47\": [0.25, 0.75, 0, 0, 0.5],\n \"48\": [0, 0.64444, 0, 0, 0.5],\n \"49\": [0, 0.64444, 0, 0, 0.5],\n \"50\": [0, 0.64444, 0, 0, 0.5],\n \"51\": [0, 0.64444, 0, 0, 0.5],\n \"52\": [0, 0.64444, 0, 0, 0.5],\n \"53\": [0, 0.64444, 0, 0, 0.5],\n \"54\": [0, 0.64444, 0, 0, 0.5],\n \"55\": [0, 0.64444, 0, 0, 0.5],\n \"56\": [0, 0.64444, 0, 0, 0.5],\n \"57\": [0, 0.64444, 0, 0, 0.5],\n \"58\": [0, 0.43056, 0, 0, 0.27778],\n \"59\": [0.19444, 0.43056, 0, 0, 0.27778],\n \"60\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"61\": [-0.13313, 0.36687, 0, 0, 0.77778],\n \"62\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"63\": [0, 0.69444, 0, 0, 0.47222],\n \"64\": [0, 0.69444, 0, 0, 0.77778],\n \"65\": [0, 0.68333, 0, 0, 0.75],\n \"66\": [0, 0.68333, 0, 0, 0.70834],\n \"67\": [0, 0.68333, 0, 0, 0.72222],\n \"68\": [0, 0.68333, 0, 0, 0.76389],\n \"69\": [0, 0.68333, 0, 0, 0.68056],\n \"70\": [0, 0.68333, 0, 0, 0.65278],\n \"71\": [0, 0.68333, 0, 0, 0.78472],\n \"72\": [0, 0.68333, 0, 0, 0.75],\n \"73\": [0, 0.68333, 0, 0, 0.36111],\n \"74\": [0, 0.68333, 0, 0, 0.51389],\n \"75\": [0, 0.68333, 0, 0, 0.77778],\n \"76\": [0, 0.68333, 0, 0, 0.625],\n \"77\": [0, 0.68333, 0, 0, 0.91667],\n \"78\": [0, 0.68333, 0, 0, 0.75],\n \"79\": [0, 0.68333, 0, 0, 0.77778],\n \"80\": [0, 0.68333, 0, 0, 0.68056],\n \"81\": [0.19444, 0.68333, 0, 0, 0.77778],\n \"82\": [0, 0.68333, 0, 0, 0.73611],\n \"83\": [0, 0.68333, 0, 0, 0.55556],\n \"84\": [0, 0.68333, 0, 0, 0.72222],\n \"85\": [0, 0.68333, 0, 0, 0.75],\n \"86\": [0, 0.68333, 0.01389, 0, 0.75],\n \"87\": [0, 0.68333, 0.01389, 0, 1.02778],\n \"88\": [0, 0.68333, 0, 0, 0.75],\n \"89\": [0, 0.68333, 0.025, 0, 0.75],\n \"90\": [0, 0.68333, 0, 0, 0.61111],\n \"91\": [0.25, 0.75, 0, 0, 0.27778],\n \"92\": [0.25, 0.75, 0, 0, 0.5],\n \"93\": [0.25, 0.75, 0, 0, 0.27778],\n \"94\": [0, 0.69444, 0, 0, 0.5],\n \"95\": [0.31, 0.12056, 0.02778, 0, 0.5],\n \"97\": [0, 0.43056, 0, 0, 0.5],\n \"98\": [0, 0.69444, 0, 0, 0.55556],\n \"99\": [0, 0.43056, 0, 0, 0.44445],\n \"100\": [0, 0.69444, 0, 0, 0.55556],\n \"101\": [0, 0.43056, 0, 0, 0.44445],\n \"102\": [0, 0.69444, 0.07778, 0, 0.30556],\n \"103\": [0.19444, 0.43056, 0.01389, 0, 0.5],\n \"104\": [0, 0.69444, 0, 0, 0.55556],\n \"105\": [0, 0.66786, 0, 0, 0.27778],\n \"106\": [0.19444, 0.66786, 0, 0, 0.30556],\n \"107\": [0, 0.69444, 0, 0, 0.52778],\n \"108\": [0, 0.69444, 0, 0, 0.27778],\n \"109\": [0, 0.43056, 0, 0, 0.83334],\n \"110\": [0, 0.43056, 0, 0, 0.55556],\n \"111\": [0, 0.43056, 0, 0, 0.5],\n \"112\": [0.19444, 0.43056, 0, 0, 0.55556],\n \"113\": [0.19444, 0.43056, 0, 0, 0.52778],\n \"114\": [0, 0.43056, 0, 0, 0.39167],\n \"115\": [0, 0.43056, 0, 0, 0.39445],\n \"116\": [0, 0.61508, 0, 0, 0.38889],\n \"117\": [0, 0.43056, 0, 0, 0.55556],\n \"118\": [0, 0.43056, 0.01389, 0, 0.52778],\n \"119\": [0, 0.43056, 0.01389, 0, 0.72222],\n \"120\": [0, 0.43056, 0, 0, 0.52778],\n \"121\": [0.19444, 0.43056, 0.01389, 0, 0.52778],\n \"122\": [0, 0.43056, 0, 0, 0.44445],\n \"123\": [0.25, 0.75, 0, 0, 0.5],\n \"124\": [0.25, 0.75, 0, 0, 0.27778],\n \"125\": [0.25, 0.75, 0, 0, 0.5],\n \"126\": [0.35, 0.31786, 0, 0, 0.5],\n \"160\": [0, 0, 0, 0, 0.25],\n \"163\": [0, 0.69444, 0, 0, 0.76909],\n \"167\": [0.19444, 0.69444, 0, 0, 0.44445],\n \"168\": [0, 0.66786, 0, 0, 0.5],\n \"172\": [0, 0.43056, 0, 0, 0.66667],\n \"176\": [0, 0.69444, 0, 0, 0.75],\n \"177\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"182\": [0.19444, 0.69444, 0, 0, 0.61111],\n \"184\": [0.17014, 0, 0, 0, 0.44445],\n \"198\": [0, 0.68333, 0, 0, 0.90278],\n \"215\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"216\": [0.04861, 0.73194, 0, 0, 0.77778],\n \"223\": [0, 0.69444, 0, 0, 0.5],\n \"230\": [0, 0.43056, 0, 0, 0.72222],\n \"247\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"248\": [0.09722, 0.52778, 0, 0, 0.5],\n \"305\": [0, 0.43056, 0, 0, 0.27778],\n \"338\": [0, 0.68333, 0, 0, 1.01389],\n \"339\": [0, 0.43056, 0, 0, 0.77778],\n \"567\": [0.19444, 0.43056, 0, 0, 0.30556],\n \"710\": [0, 0.69444, 0, 0, 0.5],\n \"711\": [0, 0.62847, 0, 0, 0.5],\n \"713\": [0, 0.56778, 0, 0, 0.5],\n \"714\": [0, 0.69444, 0, 0, 0.5],\n \"715\": [0, 0.69444, 0, 0, 0.5],\n \"728\": [0, 0.69444, 0, 0, 0.5],\n \"729\": [0, 0.66786, 0, 0, 0.27778],\n \"730\": [0, 0.69444, 0, 0, 0.75],\n \"732\": [0, 0.66786, 0, 0, 0.5],\n \"733\": [0, 0.69444, 0, 0, 0.5],\n \"915\": [0, 0.68333, 0, 0, 0.625],\n \"916\": [0, 0.68333, 0, 0, 0.83334],\n \"920\": [0, 0.68333, 0, 0, 0.77778],\n \"923\": [0, 0.68333, 0, 0, 0.69445],\n \"926\": [0, 0.68333, 0, 0, 0.66667],\n \"928\": [0, 0.68333, 0, 0, 0.75],\n \"931\": [0, 0.68333, 0, 0, 0.72222],\n \"933\": [0, 0.68333, 0, 0, 0.77778],\n \"934\": [0, 0.68333, 0, 0, 0.72222],\n \"936\": [0, 0.68333, 0, 0, 0.77778],\n \"937\": [0, 0.68333, 0, 0, 0.72222],\n \"8211\": [0, 0.43056, 0.02778, 0, 0.5],\n \"8212\": [0, 0.43056, 0.02778, 0, 1.0],\n \"8216\": [0, 0.69444, 0, 0, 0.27778],\n \"8217\": [0, 0.69444, 0, 0, 0.27778],\n \"8220\": [0, 0.69444, 0, 0, 0.5],\n \"8221\": [0, 0.69444, 0, 0, 0.5],\n \"8224\": [0.19444, 0.69444, 0, 0, 0.44445],\n \"8225\": [0.19444, 0.69444, 0, 0, 0.44445],\n \"8230\": [0, 0.123, 0, 0, 1.172],\n \"8242\": [0, 0.55556, 0, 0, 0.275],\n \"8407\": [0, 0.71444, 0.15382, 0, 0.5],\n \"8463\": [0, 0.68889, 0, 0, 0.54028],\n \"8465\": [0, 0.69444, 0, 0, 0.72222],\n \"8467\": [0, 0.69444, 0, 0.11111, 0.41667],\n \"8472\": [0.19444, 0.43056, 0, 0.11111, 0.63646],\n \"8476\": [0, 0.69444, 0, 0, 0.72222],\n \"8501\": [0, 0.69444, 0, 0, 0.61111],\n \"8592\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8593\": [0.19444, 0.69444, 0, 0, 0.5],\n \"8594\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8595\": [0.19444, 0.69444, 0, 0, 0.5],\n \"8596\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8597\": [0.25, 0.75, 0, 0, 0.5],\n \"8598\": [0.19444, 0.69444, 0, 0, 1.0],\n \"8599\": [0.19444, 0.69444, 0, 0, 1.0],\n \"8600\": [0.19444, 0.69444, 0, 0, 1.0],\n \"8601\": [0.19444, 0.69444, 0, 0, 1.0],\n \"8614\": [0.011, 0.511, 0, 0, 1.0],\n \"8617\": [0.011, 0.511, 0, 0, 1.126],\n \"8618\": [0.011, 0.511, 0, 0, 1.126],\n \"8636\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8637\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8640\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8641\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8652\": [0.011, 0.671, 0, 0, 1.0],\n \"8656\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8657\": [0.19444, 0.69444, 0, 0, 0.61111],\n \"8658\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8659\": [0.19444, 0.69444, 0, 0, 0.61111],\n \"8660\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8661\": [0.25, 0.75, 0, 0, 0.61111],\n \"8704\": [0, 0.69444, 0, 0, 0.55556],\n \"8706\": [0, 0.69444, 0.05556, 0.08334, 0.5309],\n \"8707\": [0, 0.69444, 0, 0, 0.55556],\n \"8709\": [0.05556, 0.75, 0, 0, 0.5],\n \"8711\": [0, 0.68333, 0, 0, 0.83334],\n \"8712\": [0.0391, 0.5391, 0, 0, 0.66667],\n \"8715\": [0.0391, 0.5391, 0, 0, 0.66667],\n \"8722\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8723\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8725\": [0.25, 0.75, 0, 0, 0.5],\n \"8726\": [0.25, 0.75, 0, 0, 0.5],\n \"8727\": [-0.03472, 0.46528, 0, 0, 0.5],\n \"8728\": [-0.05555, 0.44445, 0, 0, 0.5],\n \"8729\": [-0.05555, 0.44445, 0, 0, 0.5],\n \"8730\": [0.2, 0.8, 0, 0, 0.83334],\n \"8733\": [0, 0.43056, 0, 0, 0.77778],\n \"8734\": [0, 0.43056, 0, 0, 1.0],\n \"8736\": [0, 0.69224, 0, 0, 0.72222],\n \"8739\": [0.25, 0.75, 0, 0, 0.27778],\n \"8741\": [0.25, 0.75, 0, 0, 0.5],\n \"8743\": [0, 0.55556, 0, 0, 0.66667],\n \"8744\": [0, 0.55556, 0, 0, 0.66667],\n \"8745\": [0, 0.55556, 0, 0, 0.66667],\n \"8746\": [0, 0.55556, 0, 0, 0.66667],\n \"8747\": [0.19444, 0.69444, 0.11111, 0, 0.41667],\n \"8764\": [-0.13313, 0.36687, 0, 0, 0.77778],\n \"8768\": [0.19444, 0.69444, 0, 0, 0.27778],\n \"8771\": [-0.03625, 0.46375, 0, 0, 0.77778],\n \"8773\": [-0.022, 0.589, 0, 0, 0.778],\n \"8776\": [-0.01688, 0.48312, 0, 0, 0.77778],\n \"8781\": [-0.03625, 0.46375, 0, 0, 0.77778],\n \"8784\": [-0.133, 0.673, 0, 0, 0.778],\n \"8801\": [-0.03625, 0.46375, 0, 0, 0.77778],\n \"8804\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8805\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8810\": [0.0391, 0.5391, 0, 0, 1.0],\n \"8811\": [0.0391, 0.5391, 0, 0, 1.0],\n \"8826\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8827\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8834\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8835\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8838\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8839\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8846\": [0, 0.55556, 0, 0, 0.66667],\n \"8849\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8850\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8851\": [0, 0.55556, 0, 0, 0.66667],\n \"8852\": [0, 0.55556, 0, 0, 0.66667],\n \"8853\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8854\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8855\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8856\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8857\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8866\": [0, 0.69444, 0, 0, 0.61111],\n \"8867\": [0, 0.69444, 0, 0, 0.61111],\n \"8868\": [0, 0.69444, 0, 0, 0.77778],\n \"8869\": [0, 0.69444, 0, 0, 0.77778],\n \"8872\": [0.249, 0.75, 0, 0, 0.867],\n \"8900\": [-0.05555, 0.44445, 0, 0, 0.5],\n \"8901\": [-0.05555, 0.44445, 0, 0, 0.27778],\n \"8902\": [-0.03472, 0.46528, 0, 0, 0.5],\n \"8904\": [0.005, 0.505, 0, 0, 0.9],\n \"8942\": [0.03, 0.903, 0, 0, 0.278],\n \"8943\": [-0.19, 0.313, 0, 0, 1.172],\n \"8945\": [-0.1, 0.823, 0, 0, 1.282],\n \"8968\": [0.25, 0.75, 0, 0, 0.44445],\n \"8969\": [0.25, 0.75, 0, 0, 0.44445],\n \"8970\": [0.25, 0.75, 0, 0, 0.44445],\n \"8971\": [0.25, 0.75, 0, 0, 0.44445],\n \"8994\": [-0.14236, 0.35764, 0, 0, 1.0],\n \"8995\": [-0.14236, 0.35764, 0, 0, 1.0],\n \"9136\": [0.244, 0.744, 0, 0, 0.412],\n \"9137\": [0.244, 0.745, 0, 0, 0.412],\n \"9651\": [0.19444, 0.69444, 0, 0, 0.88889],\n \"9657\": [-0.03472, 0.46528, 0, 0, 0.5],\n \"9661\": [0.19444, 0.69444, 0, 0, 0.88889],\n \"9667\": [-0.03472, 0.46528, 0, 0, 0.5],\n \"9711\": [0.19444, 0.69444, 0, 0, 1.0],\n \"9824\": [0.12963, 0.69444, 0, 0, 0.77778],\n \"9825\": [0.12963, 0.69444, 0, 0, 0.77778],\n \"9826\": [0.12963, 0.69444, 0, 0, 0.77778],\n \"9827\": [0.12963, 0.69444, 0, 0, 0.77778],\n \"9837\": [0, 0.75, 0, 0, 0.38889],\n \"9838\": [0.19444, 0.69444, 0, 0, 0.38889],\n \"9839\": [0.19444, 0.69444, 0, 0, 0.38889],\n \"10216\": [0.25, 0.75, 0, 0, 0.38889],\n \"10217\": [0.25, 0.75, 0, 0, 0.38889],\n \"10222\": [0.244, 0.744, 0, 0, 0.412],\n \"10223\": [0.244, 0.745, 0, 0, 0.412],\n \"10229\": [0.011, 0.511, 0, 0, 1.609],\n \"10230\": [0.011, 0.511, 0, 0, 1.638],\n \"10231\": [0.011, 0.511, 0, 0, 1.859],\n \"10232\": [0.024, 0.525, 0, 0, 1.609],\n \"10233\": [0.024, 0.525, 0, 0, 1.638],\n \"10234\": [0.024, 0.525, 0, 0, 1.858],\n \"10236\": [0.011, 0.511, 0, 0, 1.638],\n \"10815\": [0, 0.68333, 0, 0, 0.75],\n \"10927\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"10928\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"57376\": [0.19444, 0.69444, 0, 0, 0]\n },\n \"Math-BoldItalic\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"48\": [0, 0.44444, 0, 0, 0.575],\n \"49\": [0, 0.44444, 0, 0, 0.575],\n \"50\": [0, 0.44444, 0, 0, 0.575],\n \"51\": [0.19444, 0.44444, 0, 0, 0.575],\n \"52\": [0.19444, 0.44444, 0, 0, 0.575],\n \"53\": [0.19444, 0.44444, 0, 0, 0.575],\n \"54\": [0, 0.64444, 0, 0, 0.575],\n \"55\": [0.19444, 0.44444, 0, 0, 0.575],\n \"56\": [0, 0.64444, 0, 0, 0.575],\n \"57\": [0.19444, 0.44444, 0, 0, 0.575],\n \"65\": [0, 0.68611, 0, 0, 0.86944],\n \"66\": [0, 0.68611, 0.04835, 0, 0.8664],\n \"67\": [0, 0.68611, 0.06979, 0, 0.81694],\n \"68\": [0, 0.68611, 0.03194, 0, 0.93812],\n \"69\": [0, 0.68611, 0.05451, 0, 0.81007],\n \"70\": [0, 0.68611, 0.15972, 0, 0.68889],\n \"71\": [0, 0.68611, 0, 0, 0.88673],\n \"72\": [0, 0.68611, 0.08229, 0, 0.98229],\n \"73\": [0, 0.68611, 0.07778, 0, 0.51111],\n \"74\": [0, 0.68611, 0.10069, 0, 0.63125],\n \"75\": [0, 0.68611, 0.06979, 0, 0.97118],\n \"76\": [0, 0.68611, 0, 0, 0.75555],\n \"77\": [0, 0.68611, 0.11424, 0, 1.14201],\n \"78\": [0, 0.68611, 0.11424, 0, 0.95034],\n \"79\": [0, 0.68611, 0.03194, 0, 0.83666],\n \"80\": [0, 0.68611, 0.15972, 0, 0.72309],\n \"81\": [0.19444, 0.68611, 0, 0, 0.86861],\n \"82\": [0, 0.68611, 0.00421, 0, 0.87235],\n \"83\": [0, 0.68611, 0.05382, 0, 0.69271],\n \"84\": [0, 0.68611, 0.15972, 0, 0.63663],\n \"85\": [0, 0.68611, 0.11424, 0, 0.80027],\n \"86\": [0, 0.68611, 0.25555, 0, 0.67778],\n \"87\": [0, 0.68611, 0.15972, 0, 1.09305],\n \"88\": [0, 0.68611, 0.07778, 0, 0.94722],\n \"89\": [0, 0.68611, 0.25555, 0, 0.67458],\n \"90\": [0, 0.68611, 0.06979, 0, 0.77257],\n \"97\": [0, 0.44444, 0, 0, 0.63287],\n \"98\": [0, 0.69444, 0, 0, 0.52083],\n \"99\": [0, 0.44444, 0, 0, 0.51342],\n \"100\": [0, 0.69444, 0, 0, 0.60972],\n \"101\": [0, 0.44444, 0, 0, 0.55361],\n \"102\": [0.19444, 0.69444, 0.11042, 0, 0.56806],\n \"103\": [0.19444, 0.44444, 0.03704, 0, 0.5449],\n \"104\": [0, 0.69444, 0, 0, 0.66759],\n \"105\": [0, 0.69326, 0, 0, 0.4048],\n \"106\": [0.19444, 0.69326, 0.0622, 0, 0.47083],\n \"107\": [0, 0.69444, 0.01852, 0, 0.6037],\n \"108\": [0, 0.69444, 0.0088, 0, 0.34815],\n \"109\": [0, 0.44444, 0, 0, 1.0324],\n \"110\": [0, 0.44444, 0, 0, 0.71296],\n \"111\": [0, 0.44444, 0, 0, 0.58472],\n \"112\": [0.19444, 0.44444, 0, 0, 0.60092],\n \"113\": [0.19444, 0.44444, 0.03704, 0, 0.54213],\n \"114\": [0, 0.44444, 0.03194, 0, 0.5287],\n \"115\": [0, 0.44444, 0, 0, 0.53125],\n \"116\": [0, 0.63492, 0, 0, 0.41528],\n \"117\": [0, 0.44444, 0, 0, 0.68102],\n \"118\": [0, 0.44444, 0.03704, 0, 0.56666],\n \"119\": [0, 0.44444, 0.02778, 0, 0.83148],\n \"120\": [0, 0.44444, 0, 0, 0.65903],\n \"121\": [0.19444, 0.44444, 0.03704, 0, 0.59028],\n \"122\": [0, 0.44444, 0.04213, 0, 0.55509],\n \"160\": [0, 0, 0, 0, 0.25],\n \"915\": [0, 0.68611, 0.15972, 0, 0.65694],\n \"916\": [0, 0.68611, 0, 0, 0.95833],\n \"920\": [0, 0.68611, 0.03194, 0, 0.86722],\n \"923\": [0, 0.68611, 0, 0, 0.80555],\n \"926\": [0, 0.68611, 0.07458, 0, 0.84125],\n \"928\": [0, 0.68611, 0.08229, 0, 0.98229],\n \"931\": [0, 0.68611, 0.05451, 0, 0.88507],\n \"933\": [0, 0.68611, 0.15972, 0, 0.67083],\n \"934\": [0, 0.68611, 0, 0, 0.76666],\n \"936\": [0, 0.68611, 0.11653, 0, 0.71402],\n \"937\": [0, 0.68611, 0.04835, 0, 0.8789],\n \"945\": [0, 0.44444, 0, 0, 0.76064],\n \"946\": [0.19444, 0.69444, 0.03403, 0, 0.65972],\n \"947\": [0.19444, 0.44444, 0.06389, 0, 0.59003],\n \"948\": [0, 0.69444, 0.03819, 0, 0.52222],\n \"949\": [0, 0.44444, 0, 0, 0.52882],\n \"950\": [0.19444, 0.69444, 0.06215, 0, 0.50833],\n \"951\": [0.19444, 0.44444, 0.03704, 0, 0.6],\n \"952\": [0, 0.69444, 0.03194, 0, 0.5618],\n \"953\": [0, 0.44444, 0, 0, 0.41204],\n \"954\": [0, 0.44444, 0, 0, 0.66759],\n \"955\": [0, 0.69444, 0, 0, 0.67083],\n \"956\": [0.19444, 0.44444, 0, 0, 0.70787],\n \"957\": [0, 0.44444, 0.06898, 0, 0.57685],\n \"958\": [0.19444, 0.69444, 0.03021, 0, 0.50833],\n \"959\": [0, 0.44444, 0, 0, 0.58472],\n \"960\": [0, 0.44444, 0.03704, 0, 0.68241],\n \"961\": [0.19444, 0.44444, 0, 0, 0.6118],\n \"962\": [0.09722, 0.44444, 0.07917, 0, 0.42361],\n \"963\": [0, 0.44444, 0.03704, 0, 0.68588],\n \"964\": [0, 0.44444, 0.13472, 0, 0.52083],\n \"965\": [0, 0.44444, 0.03704, 0, 0.63055],\n \"966\": [0.19444, 0.44444, 0, 0, 0.74722],\n \"967\": [0.19444, 0.44444, 0, 0, 0.71805],\n \"968\": [0.19444, 0.69444, 0.03704, 0, 0.75833],\n \"969\": [0, 0.44444, 0.03704, 0, 0.71782],\n \"977\": [0, 0.69444, 0, 0, 0.69155],\n \"981\": [0.19444, 0.69444, 0, 0, 0.7125],\n \"982\": [0, 0.44444, 0.03194, 0, 0.975],\n \"1009\": [0.19444, 0.44444, 0, 0, 0.6118],\n \"1013\": [0, 0.44444, 0, 0, 0.48333],\n \"57649\": [0, 0.44444, 0, 0, 0.39352],\n \"57911\": [0.19444, 0.44444, 0, 0, 0.43889]\n },\n \"Math-Italic\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"48\": [0, 0.43056, 0, 0, 0.5],\n \"49\": [0, 0.43056, 0, 0, 0.5],\n \"50\": [0, 0.43056, 0, 0, 0.5],\n \"51\": [0.19444, 0.43056, 0, 0, 0.5],\n \"52\": [0.19444, 0.43056, 0, 0, 0.5],\n \"53\": [0.19444, 0.43056, 0, 0, 0.5],\n \"54\": [0, 0.64444, 0, 0, 0.5],\n \"55\": [0.19444, 0.43056, 0, 0, 0.5],\n \"56\": [0, 0.64444, 0, 0, 0.5],\n \"57\": [0.19444, 0.43056, 0, 0, 0.5],\n \"65\": [0, 0.68333, 0, 0.13889, 0.75],\n \"66\": [0, 0.68333, 0.05017, 0.08334, 0.75851],\n \"67\": [0, 0.68333, 0.07153, 0.08334, 0.71472],\n \"68\": [0, 0.68333, 0.02778, 0.05556, 0.82792],\n \"69\": [0, 0.68333, 0.05764, 0.08334, 0.7382],\n \"70\": [0, 0.68333, 0.13889, 0.08334, 0.64306],\n \"71\": [0, 0.68333, 0, 0.08334, 0.78625],\n \"72\": [0, 0.68333, 0.08125, 0.05556, 0.83125],\n \"73\": [0, 0.68333, 0.07847, 0.11111, 0.43958],\n \"74\": [0, 0.68333, 0.09618, 0.16667, 0.55451],\n \"75\": [0, 0.68333, 0.07153, 0.05556, 0.84931],\n \"76\": [0, 0.68333, 0, 0.02778, 0.68056],\n \"77\": [0, 0.68333, 0.10903, 0.08334, 0.97014],\n \"78\": [0, 0.68333, 0.10903, 0.08334, 0.80347],\n \"79\": [0, 0.68333, 0.02778, 0.08334, 0.76278],\n \"80\": [0, 0.68333, 0.13889, 0.08334, 0.64201],\n \"81\": [0.19444, 0.68333, 0, 0.08334, 0.79056],\n \"82\": [0, 0.68333, 0.00773, 0.08334, 0.75929],\n \"83\": [0, 0.68333, 0.05764, 0.08334, 0.6132],\n \"84\": [0, 0.68333, 0.13889, 0.08334, 0.58438],\n \"85\": [0, 0.68333, 0.10903, 0.02778, 0.68278],\n \"86\": [0, 0.68333, 0.22222, 0, 0.58333],\n \"87\": [0, 0.68333, 0.13889, 0, 0.94445],\n \"88\": [0, 0.68333, 0.07847, 0.08334, 0.82847],\n \"89\": [0, 0.68333, 0.22222, 0, 0.58056],\n \"90\": [0, 0.68333, 0.07153, 0.08334, 0.68264],\n \"97\": [0, 0.43056, 0, 0, 0.52859],\n \"98\": [0, 0.69444, 0, 0, 0.42917],\n \"99\": [0, 0.43056, 0, 0.05556, 0.43276],\n \"100\": [0, 0.69444, 0, 0.16667, 0.52049],\n \"101\": [0, 0.43056, 0, 0.05556, 0.46563],\n \"102\": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],\n \"103\": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],\n \"104\": [0, 0.69444, 0, 0, 0.57616],\n \"105\": [0, 0.65952, 0, 0, 0.34451],\n \"106\": [0.19444, 0.65952, 0.05724, 0, 0.41181],\n \"107\": [0, 0.69444, 0.03148, 0, 0.5206],\n \"108\": [0, 0.69444, 0.01968, 0.08334, 0.29838],\n \"109\": [0, 0.43056, 0, 0, 0.87801],\n \"110\": [0, 0.43056, 0, 0, 0.60023],\n \"111\": [0, 0.43056, 0, 0.05556, 0.48472],\n \"112\": [0.19444, 0.43056, 0, 0.08334, 0.50313],\n \"113\": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],\n \"114\": [0, 0.43056, 0.02778, 0.05556, 0.45116],\n \"115\": [0, 0.43056, 0, 0.05556, 0.46875],\n \"116\": [0, 0.61508, 0, 0.08334, 0.36111],\n \"117\": [0, 0.43056, 0, 0.02778, 0.57246],\n \"118\": [0, 0.43056, 0.03588, 0.02778, 0.48472],\n \"119\": [0, 0.43056, 0.02691, 0.08334, 0.71592],\n \"120\": [0, 0.43056, 0, 0.02778, 0.57153],\n \"121\": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],\n \"122\": [0, 0.43056, 0.04398, 0.05556, 0.46505],\n \"160\": [0, 0, 0, 0, 0.25],\n \"915\": [0, 0.68333, 0.13889, 0.08334, 0.61528],\n \"916\": [0, 0.68333, 0, 0.16667, 0.83334],\n \"920\": [0, 0.68333, 0.02778, 0.08334, 0.76278],\n \"923\": [0, 0.68333, 0, 0.16667, 0.69445],\n \"926\": [0, 0.68333, 0.07569, 0.08334, 0.74236],\n \"928\": [0, 0.68333, 0.08125, 0.05556, 0.83125],\n \"931\": [0, 0.68333, 0.05764, 0.08334, 0.77986],\n \"933\": [0, 0.68333, 0.13889, 0.05556, 0.58333],\n \"934\": [0, 0.68333, 0, 0.08334, 0.66667],\n \"936\": [0, 0.68333, 0.11, 0.05556, 0.61222],\n \"937\": [0, 0.68333, 0.05017, 0.08334, 0.7724],\n \"945\": [0, 0.43056, 0.0037, 0.02778, 0.6397],\n \"946\": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],\n \"947\": [0.19444, 0.43056, 0.05556, 0, 0.51773],\n \"948\": [0, 0.69444, 0.03785, 0.05556, 0.44444],\n \"949\": [0, 0.43056, 0, 0.08334, 0.46632],\n \"950\": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],\n \"951\": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],\n \"952\": [0, 0.69444, 0.02778, 0.08334, 0.46944],\n \"953\": [0, 0.43056, 0, 0.05556, 0.35394],\n \"954\": [0, 0.43056, 0, 0, 0.57616],\n \"955\": [0, 0.69444, 0, 0, 0.58334],\n \"956\": [0.19444, 0.43056, 0, 0.02778, 0.60255],\n \"957\": [0, 0.43056, 0.06366, 0.02778, 0.49398],\n \"958\": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],\n \"959\": [0, 0.43056, 0, 0.05556, 0.48472],\n \"960\": [0, 0.43056, 0.03588, 0, 0.57003],\n \"961\": [0.19444, 0.43056, 0, 0.08334, 0.51702],\n \"962\": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],\n \"963\": [0, 0.43056, 0.03588, 0, 0.57141],\n \"964\": [0, 0.43056, 0.1132, 0.02778, 0.43715],\n \"965\": [0, 0.43056, 0.03588, 0.02778, 0.54028],\n \"966\": [0.19444, 0.43056, 0, 0.08334, 0.65417],\n \"967\": [0.19444, 0.43056, 0, 0.05556, 0.62569],\n \"968\": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],\n \"969\": [0, 0.43056, 0.03588, 0, 0.62245],\n \"977\": [0, 0.69444, 0, 0.08334, 0.59144],\n \"981\": [0.19444, 0.69444, 0, 0.08334, 0.59583],\n \"982\": [0, 0.43056, 0.02778, 0, 0.82813],\n \"1009\": [0.19444, 0.43056, 0, 0.08334, 0.51702],\n \"1013\": [0, 0.43056, 0, 0.05556, 0.4059],\n \"57649\": [0, 0.43056, 0, 0.02778, 0.32246],\n \"57911\": [0.19444, 0.43056, 0, 0.08334, 0.38403]\n },\n \"SansSerif-Bold\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0, 0, 0.36667],\n \"34\": [0, 0.69444, 0, 0, 0.55834],\n \"35\": [0.19444, 0.69444, 0, 0, 0.91667],\n \"36\": [0.05556, 0.75, 0, 0, 0.55],\n \"37\": [0.05556, 0.75, 0, 0, 1.02912],\n \"38\": [0, 0.69444, 0, 0, 0.83056],\n \"39\": [0, 0.69444, 0, 0, 0.30556],\n \"40\": [0.25, 0.75, 0, 0, 0.42778],\n \"41\": [0.25, 0.75, 0, 0, 0.42778],\n \"42\": [0, 0.75, 0, 0, 0.55],\n \"43\": [0.11667, 0.61667, 0, 0, 0.85556],\n \"44\": [0.10556, 0.13056, 0, 0, 0.30556],\n \"45\": [0, 0.45833, 0, 0, 0.36667],\n \"46\": [0, 0.13056, 0, 0, 0.30556],\n \"47\": [0.25, 0.75, 0, 0, 0.55],\n \"48\": [0, 0.69444, 0, 0, 0.55],\n \"49\": [0, 0.69444, 0, 0, 0.55],\n \"50\": [0, 0.69444, 0, 0, 0.55],\n \"51\": [0, 0.69444, 0, 0, 0.55],\n \"52\": [0, 0.69444, 0, 0, 0.55],\n \"53\": [0, 0.69444, 0, 0, 0.55],\n \"54\": [0, 0.69444, 0, 0, 0.55],\n \"55\": [0, 0.69444, 0, 0, 0.55],\n \"56\": [0, 0.69444, 0, 0, 0.55],\n \"57\": [0, 0.69444, 0, 0, 0.55],\n \"58\": [0, 0.45833, 0, 0, 0.30556],\n \"59\": [0.10556, 0.45833, 0, 0, 0.30556],\n \"61\": [-0.09375, 0.40625, 0, 0, 0.85556],\n \"63\": [0, 0.69444, 0, 0, 0.51945],\n \"64\": [0, 0.69444, 0, 0, 0.73334],\n \"65\": [0, 0.69444, 0, 0, 0.73334],\n \"66\": [0, 0.69444, 0, 0, 0.73334],\n \"67\": [0, 0.69444, 0, 0, 0.70278],\n \"68\": [0, 0.69444, 0, 0, 0.79445],\n \"69\": [0, 0.69444, 0, 0, 0.64167],\n \"70\": [0, 0.69444, 0, 0, 0.61111],\n \"71\": [0, 0.69444, 0, 0, 0.73334],\n \"72\": [0, 0.69444, 0, 0, 0.79445],\n \"73\": [0, 0.69444, 0, 0, 0.33056],\n \"74\": [0, 0.69444, 0, 0, 0.51945],\n \"75\": [0, 0.69444, 0, 0, 0.76389],\n \"76\": [0, 0.69444, 0, 0, 0.58056],\n \"77\": [0, 0.69444, 0, 0, 0.97778],\n \"78\": [0, 0.69444, 0, 0, 0.79445],\n \"79\": [0, 0.69444, 0, 0, 0.79445],\n \"80\": [0, 0.69444, 0, 0, 0.70278],\n \"81\": [0.10556, 0.69444, 0, 0, 0.79445],\n \"82\": [0, 0.69444, 0, 0, 0.70278],\n \"83\": [0, 0.69444, 0, 0, 0.61111],\n \"84\": [0, 0.69444, 0, 0, 0.73334],\n \"85\": [0, 0.69444, 0, 0, 0.76389],\n \"86\": [0, 0.69444, 0.01528, 0, 0.73334],\n \"87\": [0, 0.69444, 0.01528, 0, 1.03889],\n \"88\": [0, 0.69444, 0, 0, 0.73334],\n \"89\": [0, 0.69444, 0.0275, 0, 0.73334],\n \"90\": [0, 0.69444, 0, 0, 0.67223],\n \"91\": [0.25, 0.75, 0, 0, 0.34306],\n \"93\": [0.25, 0.75, 0, 0, 0.34306],\n \"94\": [0, 0.69444, 0, 0, 0.55],\n \"95\": [0.35, 0.10833, 0.03056, 0, 0.55],\n \"97\": [0, 0.45833, 0, 0, 0.525],\n \"98\": [0, 0.69444, 0, 0, 0.56111],\n \"99\": [0, 0.45833, 0, 0, 0.48889],\n \"100\": [0, 0.69444, 0, 0, 0.56111],\n \"101\": [0, 0.45833, 0, 0, 0.51111],\n \"102\": [0, 0.69444, 0.07639, 0, 0.33611],\n \"103\": [0.19444, 0.45833, 0.01528, 0, 0.55],\n \"104\": [0, 0.69444, 0, 0, 0.56111],\n \"105\": [0, 0.69444, 0, 0, 0.25556],\n \"106\": [0.19444, 0.69444, 0, 0, 0.28611],\n \"107\": [0, 0.69444, 0, 0, 0.53056],\n \"108\": [0, 0.69444, 0, 0, 0.25556],\n \"109\": [0, 0.45833, 0, 0, 0.86667],\n \"110\": [0, 0.45833, 0, 0, 0.56111],\n \"111\": [0, 0.45833, 0, 0, 0.55],\n \"112\": [0.19444, 0.45833, 0, 0, 0.56111],\n \"113\": [0.19444, 0.45833, 0, 0, 0.56111],\n \"114\": [0, 0.45833, 0.01528, 0, 0.37222],\n \"115\": [0, 0.45833, 0, 0, 0.42167],\n \"116\": [0, 0.58929, 0, 0, 0.40417],\n \"117\": [0, 0.45833, 0, 0, 0.56111],\n \"118\": [0, 0.45833, 0.01528, 0, 0.5],\n \"119\": [0, 0.45833, 0.01528, 0, 0.74445],\n \"120\": [0, 0.45833, 0, 0, 0.5],\n \"121\": [0.19444, 0.45833, 0.01528, 0, 0.5],\n \"122\": [0, 0.45833, 0, 0, 0.47639],\n \"126\": [0.35, 0.34444, 0, 0, 0.55],\n \"160\": [0, 0, 0, 0, 0.25],\n \"168\": [0, 0.69444, 0, 0, 0.55],\n \"176\": [0, 0.69444, 0, 0, 0.73334],\n \"180\": [0, 0.69444, 0, 0, 0.55],\n \"184\": [0.17014, 0, 0, 0, 0.48889],\n \"305\": [0, 0.45833, 0, 0, 0.25556],\n \"567\": [0.19444, 0.45833, 0, 0, 0.28611],\n \"710\": [0, 0.69444, 0, 0, 0.55],\n \"711\": [0, 0.63542, 0, 0, 0.55],\n \"713\": [0, 0.63778, 0, 0, 0.55],\n \"728\": [0, 0.69444, 0, 0, 0.55],\n \"729\": [0, 0.69444, 0, 0, 0.30556],\n \"730\": [0, 0.69444, 0, 0, 0.73334],\n \"732\": [0, 0.69444, 0, 0, 0.55],\n \"733\": [0, 0.69444, 0, 0, 0.55],\n \"915\": [0, 0.69444, 0, 0, 0.58056],\n \"916\": [0, 0.69444, 0, 0, 0.91667],\n \"920\": [0, 0.69444, 0, 0, 0.85556],\n \"923\": [0, 0.69444, 0, 0, 0.67223],\n \"926\": [0, 0.69444, 0, 0, 0.73334],\n \"928\": [0, 0.69444, 0, 0, 0.79445],\n \"931\": [0, 0.69444, 0, 0, 0.79445],\n \"933\": [0, 0.69444, 0, 0, 0.85556],\n \"934\": [0, 0.69444, 0, 0, 0.79445],\n \"936\": [0, 0.69444, 0, 0, 0.85556],\n \"937\": [0, 0.69444, 0, 0, 0.79445],\n \"8211\": [0, 0.45833, 0.03056, 0, 0.55],\n \"8212\": [0, 0.45833, 0.03056, 0, 1.10001],\n \"8216\": [0, 0.69444, 0, 0, 0.30556],\n \"8217\": [0, 0.69444, 0, 0, 0.30556],\n \"8220\": [0, 0.69444, 0, 0, 0.55834],\n \"8221\": [0, 0.69444, 0, 0, 0.55834]\n },\n \"SansSerif-Italic\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0.05733, 0, 0.31945],\n \"34\": [0, 0.69444, 0.00316, 0, 0.5],\n \"35\": [0.19444, 0.69444, 0.05087, 0, 0.83334],\n \"36\": [0.05556, 0.75, 0.11156, 0, 0.5],\n \"37\": [0.05556, 0.75, 0.03126, 0, 0.83334],\n \"38\": [0, 0.69444, 0.03058, 0, 0.75834],\n \"39\": [0, 0.69444, 0.07816, 0, 0.27778],\n \"40\": [0.25, 0.75, 0.13164, 0, 0.38889],\n \"41\": [0.25, 0.75, 0.02536, 0, 0.38889],\n \"42\": [0, 0.75, 0.11775, 0, 0.5],\n \"43\": [0.08333, 0.58333, 0.02536, 0, 0.77778],\n \"44\": [0.125, 0.08333, 0, 0, 0.27778],\n \"45\": [0, 0.44444, 0.01946, 0, 0.33333],\n \"46\": [0, 0.08333, 0, 0, 0.27778],\n \"47\": [0.25, 0.75, 0.13164, 0, 0.5],\n \"48\": [0, 0.65556, 0.11156, 0, 0.5],\n \"49\": [0, 0.65556, 0.11156, 0, 0.5],\n \"50\": [0, 0.65556, 0.11156, 0, 0.5],\n \"51\": [0, 0.65556, 0.11156, 0, 0.5],\n \"52\": [0, 0.65556, 0.11156, 0, 0.5],\n \"53\": [0, 0.65556, 0.11156, 0, 0.5],\n \"54\": [0, 0.65556, 0.11156, 0, 0.5],\n \"55\": [0, 0.65556, 0.11156, 0, 0.5],\n \"56\": [0, 0.65556, 0.11156, 0, 0.5],\n \"57\": [0, 0.65556, 0.11156, 0, 0.5],\n \"58\": [0, 0.44444, 0.02502, 0, 0.27778],\n \"59\": [0.125, 0.44444, 0.02502, 0, 0.27778],\n \"61\": [-0.13, 0.37, 0.05087, 0, 0.77778],\n \"63\": [0, 0.69444, 0.11809, 0, 0.47222],\n \"64\": [0, 0.69444, 0.07555, 0, 0.66667],\n \"65\": [0, 0.69444, 0, 0, 0.66667],\n \"66\": [0, 0.69444, 0.08293, 0, 0.66667],\n \"67\": [0, 0.69444, 0.11983, 0, 0.63889],\n \"68\": [0, 0.69444, 0.07555, 0, 0.72223],\n \"69\": [0, 0.69444, 0.11983, 0, 0.59722],\n \"70\": [0, 0.69444, 0.13372, 0, 0.56945],\n \"71\": [0, 0.69444, 0.11983, 0, 0.66667],\n \"72\": [0, 0.69444, 0.08094, 0, 0.70834],\n \"73\": [0, 0.69444, 0.13372, 0, 0.27778],\n \"74\": [0, 0.69444, 0.08094, 0, 0.47222],\n \"75\": [0, 0.69444, 0.11983, 0, 0.69445],\n \"76\": [0, 0.69444, 0, 0, 0.54167],\n \"77\": [0, 0.69444, 0.08094, 0, 0.875],\n \"78\": [0, 0.69444, 0.08094, 0, 0.70834],\n \"79\": [0, 0.69444, 0.07555, 0, 0.73611],\n \"80\": [0, 0.69444, 0.08293, 0, 0.63889],\n \"81\": [0.125, 0.69444, 0.07555, 0, 0.73611],\n \"82\": [0, 0.69444, 0.08293, 0, 0.64584],\n \"83\": [0, 0.69444, 0.09205, 0, 0.55556],\n \"84\": [0, 0.69444, 0.13372, 0, 0.68056],\n \"85\": [0, 0.69444, 0.08094, 0, 0.6875],\n \"86\": [0, 0.69444, 0.1615, 0, 0.66667],\n \"87\": [0, 0.69444, 0.1615, 0, 0.94445],\n \"88\": [0, 0.69444, 0.13372, 0, 0.66667],\n \"89\": [0, 0.69444, 0.17261, 0, 0.66667],\n \"90\": [0, 0.69444, 0.11983, 0, 0.61111],\n \"91\": [0.25, 0.75, 0.15942, 0, 0.28889],\n \"93\": [0.25, 0.75, 0.08719, 0, 0.28889],\n \"94\": [0, 0.69444, 0.0799, 0, 0.5],\n \"95\": [0.35, 0.09444, 0.08616, 0, 0.5],\n \"97\": [0, 0.44444, 0.00981, 0, 0.48056],\n \"98\": [0, 0.69444, 0.03057, 0, 0.51667],\n \"99\": [0, 0.44444, 0.08336, 0, 0.44445],\n \"100\": [0, 0.69444, 0.09483, 0, 0.51667],\n \"101\": [0, 0.44444, 0.06778, 0, 0.44445],\n \"102\": [0, 0.69444, 0.21705, 0, 0.30556],\n \"103\": [0.19444, 0.44444, 0.10836, 0, 0.5],\n \"104\": [0, 0.69444, 0.01778, 0, 0.51667],\n \"105\": [0, 0.67937, 0.09718, 0, 0.23889],\n \"106\": [0.19444, 0.67937, 0.09162, 0, 0.26667],\n \"107\": [0, 0.69444, 0.08336, 0, 0.48889],\n \"108\": [0, 0.69444, 0.09483, 0, 0.23889],\n \"109\": [0, 0.44444, 0.01778, 0, 0.79445],\n \"110\": [0, 0.44444, 0.01778, 0, 0.51667],\n \"111\": [0, 0.44444, 0.06613, 0, 0.5],\n \"112\": [0.19444, 0.44444, 0.0389, 0, 0.51667],\n \"113\": [0.19444, 0.44444, 0.04169, 0, 0.51667],\n \"114\": [0, 0.44444, 0.10836, 0, 0.34167],\n \"115\": [0, 0.44444, 0.0778, 0, 0.38333],\n \"116\": [0, 0.57143, 0.07225, 0, 0.36111],\n \"117\": [0, 0.44444, 0.04169, 0, 0.51667],\n \"118\": [0, 0.44444, 0.10836, 0, 0.46111],\n \"119\": [0, 0.44444, 0.10836, 0, 0.68334],\n \"120\": [0, 0.44444, 0.09169, 0, 0.46111],\n \"121\": [0.19444, 0.44444, 0.10836, 0, 0.46111],\n \"122\": [0, 0.44444, 0.08752, 0, 0.43472],\n \"126\": [0.35, 0.32659, 0.08826, 0, 0.5],\n \"160\": [0, 0, 0, 0, 0.25],\n \"168\": [0, 0.67937, 0.06385, 0, 0.5],\n \"176\": [0, 0.69444, 0, 0, 0.73752],\n \"184\": [0.17014, 0, 0, 0, 0.44445],\n \"305\": [0, 0.44444, 0.04169, 0, 0.23889],\n \"567\": [0.19444, 0.44444, 0.04169, 0, 0.26667],\n \"710\": [0, 0.69444, 0.0799, 0, 0.5],\n \"711\": [0, 0.63194, 0.08432, 0, 0.5],\n \"713\": [0, 0.60889, 0.08776, 0, 0.5],\n \"714\": [0, 0.69444, 0.09205, 0, 0.5],\n \"715\": [0, 0.69444, 0, 0, 0.5],\n \"728\": [0, 0.69444, 0.09483, 0, 0.5],\n \"729\": [0, 0.67937, 0.07774, 0, 0.27778],\n \"730\": [0, 0.69444, 0, 0, 0.73752],\n \"732\": [0, 0.67659, 0.08826, 0, 0.5],\n \"733\": [0, 0.69444, 0.09205, 0, 0.5],\n \"915\": [0, 0.69444, 0.13372, 0, 0.54167],\n \"916\": [0, 0.69444, 0, 0, 0.83334],\n \"920\": [0, 0.69444, 0.07555, 0, 0.77778],\n \"923\": [0, 0.69444, 0, 0, 0.61111],\n \"926\": [0, 0.69444, 0.12816, 0, 0.66667],\n \"928\": [0, 0.69444, 0.08094, 0, 0.70834],\n \"931\": [0, 0.69444, 0.11983, 0, 0.72222],\n \"933\": [0, 0.69444, 0.09031, 0, 0.77778],\n \"934\": [0, 0.69444, 0.04603, 0, 0.72222],\n \"936\": [0, 0.69444, 0.09031, 0, 0.77778],\n \"937\": [0, 0.69444, 0.08293, 0, 0.72222],\n \"8211\": [0, 0.44444, 0.08616, 0, 0.5],\n \"8212\": [0, 0.44444, 0.08616, 0, 1.0],\n \"8216\": [0, 0.69444, 0.07816, 0, 0.27778],\n \"8217\": [0, 0.69444, 0.07816, 0, 0.27778],\n \"8220\": [0, 0.69444, 0.14205, 0, 0.5],\n \"8221\": [0, 0.69444, 0.00316, 0, 0.5]\n },\n \"SansSerif-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0, 0, 0.31945],\n \"34\": [0, 0.69444, 0, 0, 0.5],\n \"35\": [0.19444, 0.69444, 0, 0, 0.83334],\n \"36\": [0.05556, 0.75, 0, 0, 0.5],\n \"37\": [0.05556, 0.75, 0, 0, 0.83334],\n \"38\": [0, 0.69444, 0, 0, 0.75834],\n \"39\": [0, 0.69444, 0, 0, 0.27778],\n \"40\": [0.25, 0.75, 0, 0, 0.38889],\n \"41\": [0.25, 0.75, 0, 0, 0.38889],\n \"42\": [0, 0.75, 0, 0, 0.5],\n \"43\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"44\": [0.125, 0.08333, 0, 0, 0.27778],\n \"45\": [0, 0.44444, 0, 0, 0.33333],\n \"46\": [0, 0.08333, 0, 0, 0.27778],\n \"47\": [0.25, 0.75, 0, 0, 0.5],\n \"48\": [0, 0.65556, 0, 0, 0.5],\n \"49\": [0, 0.65556, 0, 0, 0.5],\n \"50\": [0, 0.65556, 0, 0, 0.5],\n \"51\": [0, 0.65556, 0, 0, 0.5],\n \"52\": [0, 0.65556, 0, 0, 0.5],\n \"53\": [0, 0.65556, 0, 0, 0.5],\n \"54\": [0, 0.65556, 0, 0, 0.5],\n \"55\": [0, 0.65556, 0, 0, 0.5],\n \"56\": [0, 0.65556, 0, 0, 0.5],\n \"57\": [0, 0.65556, 0, 0, 0.5],\n \"58\": [0, 0.44444, 0, 0, 0.27778],\n \"59\": [0.125, 0.44444, 0, 0, 0.27778],\n \"61\": [-0.13, 0.37, 0, 0, 0.77778],\n \"63\": [0, 0.69444, 0, 0, 0.47222],\n \"64\": [0, 0.69444, 0, 0, 0.66667],\n \"65\": [0, 0.69444, 0, 0, 0.66667],\n \"66\": [0, 0.69444, 0, 0, 0.66667],\n \"67\": [0, 0.69444, 0, 0, 0.63889],\n \"68\": [0, 0.69444, 0, 0, 0.72223],\n \"69\": [0, 0.69444, 0, 0, 0.59722],\n \"70\": [0, 0.69444, 0, 0, 0.56945],\n \"71\": [0, 0.69444, 0, 0, 0.66667],\n \"72\": [0, 0.69444, 0, 0, 0.70834],\n \"73\": [0, 0.69444, 0, 0, 0.27778],\n \"74\": [0, 0.69444, 0, 0, 0.47222],\n \"75\": [0, 0.69444, 0, 0, 0.69445],\n \"76\": [0, 0.69444, 0, 0, 0.54167],\n \"77\": [0, 0.69444, 0, 0, 0.875],\n \"78\": [0, 0.69444, 0, 0, 0.70834],\n \"79\": [0, 0.69444, 0, 0, 0.73611],\n \"80\": [0, 0.69444, 0, 0, 0.63889],\n \"81\": [0.125, 0.69444, 0, 0, 0.73611],\n \"82\": [0, 0.69444, 0, 0, 0.64584],\n \"83\": [0, 0.69444, 0, 0, 0.55556],\n \"84\": [0, 0.69444, 0, 0, 0.68056],\n \"85\": [0, 0.69444, 0, 0, 0.6875],\n \"86\": [0, 0.69444, 0.01389, 0, 0.66667],\n \"87\": [0, 0.69444, 0.01389, 0, 0.94445],\n \"88\": [0, 0.69444, 0, 0, 0.66667],\n \"89\": [0, 0.69444, 0.025, 0, 0.66667],\n \"90\": [0, 0.69444, 0, 0, 0.61111],\n \"91\": [0.25, 0.75, 0, 0, 0.28889],\n \"93\": [0.25, 0.75, 0, 0, 0.28889],\n \"94\": [0, 0.69444, 0, 0, 0.5],\n \"95\": [0.35, 0.09444, 0.02778, 0, 0.5],\n \"97\": [0, 0.44444, 0, 0, 0.48056],\n \"98\": [0, 0.69444, 0, 0, 0.51667],\n \"99\": [0, 0.44444, 0, 0, 0.44445],\n \"100\": [0, 0.69444, 0, 0, 0.51667],\n \"101\": [0, 0.44444, 0, 0, 0.44445],\n \"102\": [0, 0.69444, 0.06944, 0, 0.30556],\n \"103\": [0.19444, 0.44444, 0.01389, 0, 0.5],\n \"104\": [0, 0.69444, 0, 0, 0.51667],\n \"105\": [0, 0.67937, 0, 0, 0.23889],\n \"106\": [0.19444, 0.67937, 0, 0, 0.26667],\n \"107\": [0, 0.69444, 0, 0, 0.48889],\n \"108\": [0, 0.69444, 0, 0, 0.23889],\n \"109\": [0, 0.44444, 0, 0, 0.79445],\n \"110\": [0, 0.44444, 0, 0, 0.51667],\n \"111\": [0, 0.44444, 0, 0, 0.5],\n \"112\": [0.19444, 0.44444, 0, 0, 0.51667],\n \"113\": [0.19444, 0.44444, 0, 0, 0.51667],\n \"114\": [0, 0.44444, 0.01389, 0, 0.34167],\n \"115\": [0, 0.44444, 0, 0, 0.38333],\n \"116\": [0, 0.57143, 0, 0, 0.36111],\n \"117\": [0, 0.44444, 0, 0, 0.51667],\n \"118\": [0, 0.44444, 0.01389, 0, 0.46111],\n \"119\": [0, 0.44444, 0.01389, 0, 0.68334],\n \"120\": [0, 0.44444, 0, 0, 0.46111],\n \"121\": [0.19444, 0.44444, 0.01389, 0, 0.46111],\n \"122\": [0, 0.44444, 0, 0, 0.43472],\n \"126\": [0.35, 0.32659, 0, 0, 0.5],\n \"160\": [0, 0, 0, 0, 0.25],\n \"168\": [0, 0.67937, 0, 0, 0.5],\n \"176\": [0, 0.69444, 0, 0, 0.66667],\n \"184\": [0.17014, 0, 0, 0, 0.44445],\n \"305\": [0, 0.44444, 0, 0, 0.23889],\n \"567\": [0.19444, 0.44444, 0, 0, 0.26667],\n \"710\": [0, 0.69444, 0, 0, 0.5],\n \"711\": [0, 0.63194, 0, 0, 0.5],\n \"713\": [0, 0.60889, 0, 0, 0.5],\n \"714\": [0, 0.69444, 0, 0, 0.5],\n \"715\": [0, 0.69444, 0, 0, 0.5],\n \"728\": [0, 0.69444, 0, 0, 0.5],\n \"729\": [0, 0.67937, 0, 0, 0.27778],\n \"730\": [0, 0.69444, 0, 0, 0.66667],\n \"732\": [0, 0.67659, 0, 0, 0.5],\n \"733\": [0, 0.69444, 0, 0, 0.5],\n \"915\": [0, 0.69444, 0, 0, 0.54167],\n \"916\": [0, 0.69444, 0, 0, 0.83334],\n \"920\": [0, 0.69444, 0, 0, 0.77778],\n \"923\": [0, 0.69444, 0, 0, 0.61111],\n \"926\": [0, 0.69444, 0, 0, 0.66667],\n \"928\": [0, 0.69444, 0, 0, 0.70834],\n \"931\": [0, 0.69444, 0, 0, 0.72222],\n \"933\": [0, 0.69444, 0, 0, 0.77778],\n \"934\": [0, 0.69444, 0, 0, 0.72222],\n \"936\": [0, 0.69444, 0, 0, 0.77778],\n \"937\": [0, 0.69444, 0, 0, 0.72222],\n \"8211\": [0, 0.44444, 0.02778, 0, 0.5],\n \"8212\": [0, 0.44444, 0.02778, 0, 1.0],\n \"8216\": [0, 0.69444, 0, 0, 0.27778],\n \"8217\": [0, 0.69444, 0, 0, 0.27778],\n \"8220\": [0, 0.69444, 0, 0, 0.5],\n \"8221\": [0, 0.69444, 0, 0, 0.5]\n },\n \"Script-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"65\": [0, 0.7, 0.22925, 0, 0.80253],\n \"66\": [0, 0.7, 0.04087, 0, 0.90757],\n \"67\": [0, 0.7, 0.1689, 0, 0.66619],\n \"68\": [0, 0.7, 0.09371, 0, 0.77443],\n \"69\": [0, 0.7, 0.18583, 0, 0.56162],\n \"70\": [0, 0.7, 0.13634, 0, 0.89544],\n \"71\": [0, 0.7, 0.17322, 0, 0.60961],\n \"72\": [0, 0.7, 0.29694, 0, 0.96919],\n \"73\": [0, 0.7, 0.19189, 0, 0.80907],\n \"74\": [0.27778, 0.7, 0.19189, 0, 1.05159],\n \"75\": [0, 0.7, 0.31259, 0, 0.91364],\n \"76\": [0, 0.7, 0.19189, 0, 0.87373],\n \"77\": [0, 0.7, 0.15981, 0, 1.08031],\n \"78\": [0, 0.7, 0.3525, 0, 0.9015],\n \"79\": [0, 0.7, 0.08078, 0, 0.73787],\n \"80\": [0, 0.7, 0.08078, 0, 1.01262],\n \"81\": [0, 0.7, 0.03305, 0, 0.88282],\n \"82\": [0, 0.7, 0.06259, 0, 0.85],\n \"83\": [0, 0.7, 0.19189, 0, 0.86767],\n \"84\": [0, 0.7, 0.29087, 0, 0.74697],\n \"85\": [0, 0.7, 0.25815, 0, 0.79996],\n \"86\": [0, 0.7, 0.27523, 0, 0.62204],\n \"87\": [0, 0.7, 0.27523, 0, 0.80532],\n \"88\": [0, 0.7, 0.26006, 0, 0.94445],\n \"89\": [0, 0.7, 0.2939, 0, 0.70961],\n \"90\": [0, 0.7, 0.24037, 0, 0.8212],\n \"160\": [0, 0, 0, 0, 0.25]\n },\n \"Size1-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"40\": [0.35001, 0.85, 0, 0, 0.45834],\n \"41\": [0.35001, 0.85, 0, 0, 0.45834],\n \"47\": [0.35001, 0.85, 0, 0, 0.57778],\n \"91\": [0.35001, 0.85, 0, 0, 0.41667],\n \"92\": [0.35001, 0.85, 0, 0, 0.57778],\n \"93\": [0.35001, 0.85, 0, 0, 0.41667],\n \"123\": [0.35001, 0.85, 0, 0, 0.58334],\n \"125\": [0.35001, 0.85, 0, 0, 0.58334],\n \"160\": [0, 0, 0, 0, 0.25],\n \"710\": [0, 0.72222, 0, 0, 0.55556],\n \"732\": [0, 0.72222, 0, 0, 0.55556],\n \"770\": [0, 0.72222, 0, 0, 0.55556],\n \"771\": [0, 0.72222, 0, 0, 0.55556],\n \"8214\": [-0.00099, 0.601, 0, 0, 0.77778],\n \"8593\": [1e-05, 0.6, 0, 0, 0.66667],\n \"8595\": [1e-05, 0.6, 0, 0, 0.66667],\n \"8657\": [1e-05, 0.6, 0, 0, 0.77778],\n \"8659\": [1e-05, 0.6, 0, 0, 0.77778],\n \"8719\": [0.25001, 0.75, 0, 0, 0.94445],\n \"8720\": [0.25001, 0.75, 0, 0, 0.94445],\n \"8721\": [0.25001, 0.75, 0, 0, 1.05556],\n \"8730\": [0.35001, 0.85, 0, 0, 1.0],\n \"8739\": [-0.00599, 0.606, 0, 0, 0.33333],\n \"8741\": [-0.00599, 0.606, 0, 0, 0.55556],\n \"8747\": [0.30612, 0.805, 0.19445, 0, 0.47222],\n \"8748\": [0.306, 0.805, 0.19445, 0, 0.47222],\n \"8749\": [0.306, 0.805, 0.19445, 0, 0.47222],\n \"8750\": [0.30612, 0.805, 0.19445, 0, 0.47222],\n \"8896\": [0.25001, 0.75, 0, 0, 0.83334],\n \"8897\": [0.25001, 0.75, 0, 0, 0.83334],\n \"8898\": [0.25001, 0.75, 0, 0, 0.83334],\n \"8899\": [0.25001, 0.75, 0, 0, 0.83334],\n \"8968\": [0.35001, 0.85, 0, 0, 0.47222],\n \"8969\": [0.35001, 0.85, 0, 0, 0.47222],\n \"8970\": [0.35001, 0.85, 0, 0, 0.47222],\n \"8971\": [0.35001, 0.85, 0, 0, 0.47222],\n \"9168\": [-0.00099, 0.601, 0, 0, 0.66667],\n \"10216\": [0.35001, 0.85, 0, 0, 0.47222],\n \"10217\": [0.35001, 0.85, 0, 0, 0.47222],\n \"10752\": [0.25001, 0.75, 0, 0, 1.11111],\n \"10753\": [0.25001, 0.75, 0, 0, 1.11111],\n \"10754\": [0.25001, 0.75, 0, 0, 1.11111],\n \"10756\": [0.25001, 0.75, 0, 0, 0.83334],\n \"10758\": [0.25001, 0.75, 0, 0, 0.83334]\n },\n \"Size2-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"40\": [0.65002, 1.15, 0, 0, 0.59722],\n \"41\": [0.65002, 1.15, 0, 0, 0.59722],\n \"47\": [0.65002, 1.15, 0, 0, 0.81111],\n \"91\": [0.65002, 1.15, 0, 0, 0.47222],\n \"92\": [0.65002, 1.15, 0, 0, 0.81111],\n \"93\": [0.65002, 1.15, 0, 0, 0.47222],\n \"123\": [0.65002, 1.15, 0, 0, 0.66667],\n \"125\": [0.65002, 1.15, 0, 0, 0.66667],\n \"160\": [0, 0, 0, 0, 0.25],\n \"710\": [0, 0.75, 0, 0, 1.0],\n \"732\": [0, 0.75, 0, 0, 1.0],\n \"770\": [0, 0.75, 0, 0, 1.0],\n \"771\": [0, 0.75, 0, 0, 1.0],\n \"8719\": [0.55001, 1.05, 0, 0, 1.27778],\n \"8720\": [0.55001, 1.05, 0, 0, 1.27778],\n \"8721\": [0.55001, 1.05, 0, 0, 1.44445],\n \"8730\": [0.65002, 1.15, 0, 0, 1.0],\n \"8747\": [0.86225, 1.36, 0.44445, 0, 0.55556],\n \"8748\": [0.862, 1.36, 0.44445, 0, 0.55556],\n \"8749\": [0.862, 1.36, 0.44445, 0, 0.55556],\n \"8750\": [0.86225, 1.36, 0.44445, 0, 0.55556],\n \"8896\": [0.55001, 1.05, 0, 0, 1.11111],\n \"8897\": [0.55001, 1.05, 0, 0, 1.11111],\n \"8898\": [0.55001, 1.05, 0, 0, 1.11111],\n \"8899\": [0.55001, 1.05, 0, 0, 1.11111],\n \"8968\": [0.65002, 1.15, 0, 0, 0.52778],\n \"8969\": [0.65002, 1.15, 0, 0, 0.52778],\n \"8970\": [0.65002, 1.15, 0, 0, 0.52778],\n \"8971\": [0.65002, 1.15, 0, 0, 0.52778],\n \"10216\": [0.65002, 1.15, 0, 0, 0.61111],\n \"10217\": [0.65002, 1.15, 0, 0, 0.61111],\n \"10752\": [0.55001, 1.05, 0, 0, 1.51112],\n \"10753\": [0.55001, 1.05, 0, 0, 1.51112],\n \"10754\": [0.55001, 1.05, 0, 0, 1.51112],\n \"10756\": [0.55001, 1.05, 0, 0, 1.11111],\n \"10758\": [0.55001, 1.05, 0, 0, 1.11111]\n },\n \"Size3-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"40\": [0.95003, 1.45, 0, 0, 0.73611],\n \"41\": [0.95003, 1.45, 0, 0, 0.73611],\n \"47\": [0.95003, 1.45, 0, 0, 1.04445],\n \"91\": [0.95003, 1.45, 0, 0, 0.52778],\n \"92\": [0.95003, 1.45, 0, 0, 1.04445],\n \"93\": [0.95003, 1.45, 0, 0, 0.52778],\n \"123\": [0.95003, 1.45, 0, 0, 0.75],\n \"125\": [0.95003, 1.45, 0, 0, 0.75],\n \"160\": [0, 0, 0, 0, 0.25],\n \"710\": [0, 0.75, 0, 0, 1.44445],\n \"732\": [0, 0.75, 0, 0, 1.44445],\n \"770\": [0, 0.75, 0, 0, 1.44445],\n \"771\": [0, 0.75, 0, 0, 1.44445],\n \"8730\": [0.95003, 1.45, 0, 0, 1.0],\n \"8968\": [0.95003, 1.45, 0, 0, 0.58334],\n \"8969\": [0.95003, 1.45, 0, 0, 0.58334],\n \"8970\": [0.95003, 1.45, 0, 0, 0.58334],\n \"8971\": [0.95003, 1.45, 0, 0, 0.58334],\n \"10216\": [0.95003, 1.45, 0, 0, 0.75],\n \"10217\": [0.95003, 1.45, 0, 0, 0.75]\n },\n \"Size4-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"40\": [1.25003, 1.75, 0, 0, 0.79167],\n \"41\": [1.25003, 1.75, 0, 0, 0.79167],\n \"47\": [1.25003, 1.75, 0, 0, 1.27778],\n \"91\": [1.25003, 1.75, 0, 0, 0.58334],\n \"92\": [1.25003, 1.75, 0, 0, 1.27778],\n \"93\": [1.25003, 1.75, 0, 0, 0.58334],\n \"123\": [1.25003, 1.75, 0, 0, 0.80556],\n \"125\": [1.25003, 1.75, 0, 0, 0.80556],\n \"160\": [0, 0, 0, 0, 0.25],\n \"710\": [0, 0.825, 0, 0, 1.8889],\n \"732\": [0, 0.825, 0, 0, 1.8889],\n \"770\": [0, 0.825, 0, 0, 1.8889],\n \"771\": [0, 0.825, 0, 0, 1.8889],\n \"8730\": [1.25003, 1.75, 0, 0, 1.0],\n \"8968\": [1.25003, 1.75, 0, 0, 0.63889],\n \"8969\": [1.25003, 1.75, 0, 0, 0.63889],\n \"8970\": [1.25003, 1.75, 0, 0, 0.63889],\n \"8971\": [1.25003, 1.75, 0, 0, 0.63889],\n \"9115\": [0.64502, 1.155, 0, 0, 0.875],\n \"9116\": [1e-05, 0.6, 0, 0, 0.875],\n \"9117\": [0.64502, 1.155, 0, 0, 0.875],\n \"9118\": [0.64502, 1.155, 0, 0, 0.875],\n \"9119\": [1e-05, 0.6, 0, 0, 0.875],\n \"9120\": [0.64502, 1.155, 0, 0, 0.875],\n \"9121\": [0.64502, 1.155, 0, 0, 0.66667],\n \"9122\": [-0.00099, 0.601, 0, 0, 0.66667],\n \"9123\": [0.64502, 1.155, 0, 0, 0.66667],\n \"9124\": [0.64502, 1.155, 0, 0, 0.66667],\n \"9125\": [-0.00099, 0.601, 0, 0, 0.66667],\n \"9126\": [0.64502, 1.155, 0, 0, 0.66667],\n \"9127\": [1e-05, 0.9, 0, 0, 0.88889],\n \"9128\": [0.65002, 1.15, 0, 0, 0.88889],\n \"9129\": [0.90001, 0, 0, 0, 0.88889],\n \"9130\": [0, 0.3, 0, 0, 0.88889],\n \"9131\": [1e-05, 0.9, 0, 0, 0.88889],\n \"9132\": [0.65002, 1.15, 0, 0, 0.88889],\n \"9133\": [0.90001, 0, 0, 0, 0.88889],\n \"9143\": [0.88502, 0.915, 0, 0, 1.05556],\n \"10216\": [1.25003, 1.75, 0, 0, 0.80556],\n \"10217\": [1.25003, 1.75, 0, 0, 0.80556],\n \"57344\": [-0.00499, 0.605, 0, 0, 1.05556],\n \"57345\": [-0.00499, 0.605, 0, 0, 1.05556],\n \"57680\": [0, 0.12, 0, 0, 0.45],\n \"57681\": [0, 0.12, 0, 0, 0.45],\n \"57682\": [0, 0.12, 0, 0, 0.45],\n \"57683\": [0, 0.12, 0, 0, 0.45]\n },\n \"Typewriter-Regular\": {\n \"32\": [0, 0, 0, 0, 0.525],\n \"33\": [0, 0.61111, 0, 0, 0.525],\n \"34\": [0, 0.61111, 0, 0, 0.525],\n \"35\": [0, 0.61111, 0, 0, 0.525],\n \"36\": [0.08333, 0.69444, 0, 0, 0.525],\n \"37\": [0.08333, 0.69444, 0, 0, 0.525],\n \"38\": [0, 0.61111, 0, 0, 0.525],\n \"39\": [0, 0.61111, 0, 0, 0.525],\n \"40\": [0.08333, 0.69444, 0, 0, 0.525],\n \"41\": [0.08333, 0.69444, 0, 0, 0.525],\n \"42\": [0, 0.52083, 0, 0, 0.525],\n \"43\": [-0.08056, 0.53055, 0, 0, 0.525],\n \"44\": [0.13889, 0.125, 0, 0, 0.525],\n \"45\": [-0.08056, 0.53055, 0, 0, 0.525],\n \"46\": [0, 0.125, 0, 0, 0.525],\n \"47\": [0.08333, 0.69444, 0, 0, 0.525],\n \"48\": [0, 0.61111, 0, 0, 0.525],\n \"49\": [0, 0.61111, 0, 0, 0.525],\n \"50\": [0, 0.61111, 0, 0, 0.525],\n \"51\": [0, 0.61111, 0, 0, 0.525],\n \"52\": [0, 0.61111, 0, 0, 0.525],\n \"53\": [0, 0.61111, 0, 0, 0.525],\n \"54\": [0, 0.61111, 0, 0, 0.525],\n \"55\": [0, 0.61111, 0, 0, 0.525],\n \"56\": [0, 0.61111, 0, 0, 0.525],\n \"57\": [0, 0.61111, 0, 0, 0.525],\n \"58\": [0, 0.43056, 0, 0, 0.525],\n \"59\": [0.13889, 0.43056, 0, 0, 0.525],\n \"60\": [-0.05556, 0.55556, 0, 0, 0.525],\n \"61\": [-0.19549, 0.41562, 0, 0, 0.525],\n \"62\": [-0.05556, 0.55556, 0, 0, 0.525],\n \"63\": [0, 0.61111, 0, 0, 0.525],\n \"64\": [0, 0.61111, 0, 0, 0.525],\n \"65\": [0, 0.61111, 0, 0, 0.525],\n \"66\": [0, 0.61111, 0, 0, 0.525],\n \"67\": [0, 0.61111, 0, 0, 0.525],\n \"68\": [0, 0.61111, 0, 0, 0.525],\n \"69\": [0, 0.61111, 0, 0, 0.525],\n \"70\": [0, 0.61111, 0, 0, 0.525],\n \"71\": [0, 0.61111, 0, 0, 0.525],\n \"72\": [0, 0.61111, 0, 0, 0.525],\n \"73\": [0, 0.61111, 0, 0, 0.525],\n \"74\": [0, 0.61111, 0, 0, 0.525],\n \"75\": [0, 0.61111, 0, 0, 0.525],\n \"76\": [0, 0.61111, 0, 0, 0.525],\n \"77\": [0, 0.61111, 0, 0, 0.525],\n \"78\": [0, 0.61111, 0, 0, 0.525],\n \"79\": [0, 0.61111, 0, 0, 0.525],\n \"80\": [0, 0.61111, 0, 0, 0.525],\n \"81\": [0.13889, 0.61111, 0, 0, 0.525],\n \"82\": [0, 0.61111, 0, 0, 0.525],\n \"83\": [0, 0.61111, 0, 0, 0.525],\n \"84\": [0, 0.61111, 0, 0, 0.525],\n \"85\": [0, 0.61111, 0, 0, 0.525],\n \"86\": [0, 0.61111, 0, 0, 0.525],\n \"87\": [0, 0.61111, 0, 0, 0.525],\n \"88\": [0, 0.61111, 0, 0, 0.525],\n \"89\": [0, 0.61111, 0, 0, 0.525],\n \"90\": [0, 0.61111, 0, 0, 0.525],\n \"91\": [0.08333, 0.69444, 0, 0, 0.525],\n \"92\": [0.08333, 0.69444, 0, 0, 0.525],\n \"93\": [0.08333, 0.69444, 0, 0, 0.525],\n \"94\": [0, 0.61111, 0, 0, 0.525],\n \"95\": [0.09514, 0, 0, 0, 0.525],\n \"96\": [0, 0.61111, 0, 0, 0.525],\n \"97\": [0, 0.43056, 0, 0, 0.525],\n \"98\": [0, 0.61111, 0, 0, 0.525],\n \"99\": [0, 0.43056, 0, 0, 0.525],\n \"100\": [0, 0.61111, 0, 0, 0.525],\n \"101\": [0, 0.43056, 0, 0, 0.525],\n \"102\": [0, 0.61111, 0, 0, 0.525],\n \"103\": [0.22222, 0.43056, 0, 0, 0.525],\n \"104\": [0, 0.61111, 0, 0, 0.525],\n \"105\": [0, 0.61111, 0, 0, 0.525],\n \"106\": [0.22222, 0.61111, 0, 0, 0.525],\n \"107\": [0, 0.61111, 0, 0, 0.525],\n \"108\": [0, 0.61111, 0, 0, 0.525],\n \"109\": [0, 0.43056, 0, 0, 0.525],\n \"110\": [0, 0.43056, 0, 0, 0.525],\n \"111\": [0, 0.43056, 0, 0, 0.525],\n \"112\": [0.22222, 0.43056, 0, 0, 0.525],\n \"113\": [0.22222, 0.43056, 0, 0, 0.525],\n \"114\": [0, 0.43056, 0, 0, 0.525],\n \"115\": [0, 0.43056, 0, 0, 0.525],\n \"116\": [0, 0.55358, 0, 0, 0.525],\n \"117\": [0, 0.43056, 0, 0, 0.525],\n \"118\": [0, 0.43056, 0, 0, 0.525],\n \"119\": [0, 0.43056, 0, 0, 0.525],\n \"120\": [0, 0.43056, 0, 0, 0.525],\n \"121\": [0.22222, 0.43056, 0, 0, 0.525],\n \"122\": [0, 0.43056, 0, 0, 0.525],\n \"123\": [0.08333, 0.69444, 0, 0, 0.525],\n \"124\": [0.08333, 0.69444, 0, 0, 0.525],\n \"125\": [0.08333, 0.69444, 0, 0, 0.525],\n \"126\": [0, 0.61111, 0, 0, 0.525],\n \"127\": [0, 0.61111, 0, 0, 0.525],\n \"160\": [0, 0, 0, 0, 0.525],\n \"176\": [0, 0.61111, 0, 0, 0.525],\n \"184\": [0.19445, 0, 0, 0, 0.525],\n \"305\": [0, 0.43056, 0, 0, 0.525],\n \"567\": [0.22222, 0.43056, 0, 0, 0.525],\n \"711\": [0, 0.56597, 0, 0, 0.525],\n \"713\": [0, 0.56555, 0, 0, 0.525],\n \"714\": [0, 0.61111, 0, 0, 0.525],\n \"715\": [0, 0.61111, 0, 0, 0.525],\n \"728\": [0, 0.61111, 0, 0, 0.525],\n \"730\": [0, 0.61111, 0, 0, 0.525],\n \"770\": [0, 0.61111, 0, 0, 0.525],\n \"771\": [0, 0.61111, 0, 0, 0.525],\n \"776\": [0, 0.61111, 0, 0, 0.525],\n \"915\": [0, 0.61111, 0, 0, 0.525],\n \"916\": [0, 0.61111, 0, 0, 0.525],\n \"920\": [0, 0.61111, 0, 0, 0.525],\n \"923\": [0, 0.61111, 0, 0, 0.525],\n \"926\": [0, 0.61111, 0, 0, 0.525],\n \"928\": [0, 0.61111, 0, 0, 0.525],\n \"931\": [0, 0.61111, 0, 0, 0.525],\n \"933\": [0, 0.61111, 0, 0, 0.525],\n \"934\": [0, 0.61111, 0, 0, 0.525],\n \"936\": [0, 0.61111, 0, 0, 0.525],\n \"937\": [0, 0.61111, 0, 0, 0.525],\n \"8216\": [0, 0.61111, 0, 0, 0.525],\n \"8217\": [0, 0.61111, 0, 0, 0.525],\n \"8242\": [0, 0.61111, 0, 0, 0.525],\n \"9251\": [0.11111, 0.21944, 0, 0, 0.525]\n }\n};\n\n/**\n * This file contains metrics regarding fonts and individual symbols. The sigma\n * and xi variables, as well as the metricMap map contain data extracted from\n * TeX, TeX font metrics, and the TTF files. These data are then exposed via the\n * `metrics` variable and the getCharacterMetrics function.\n */\n// In TeX, there are actually three sets of dimensions, one for each of\n// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4:\n// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are\n// provided in the arrays below, in that order.\n//\n// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respectively.\n// This was determined by running the following script:\n//\n// latex -interaction=nonstopmode \\\n// '\\documentclass{article}\\usepackage{amsmath}\\begin{document}' \\\n// '$a$ \\expandafter\\show\\the\\textfont2' \\\n// '\\expandafter\\show\\the\\scriptfont2' \\\n// '\\expandafter\\show\\the\\scriptscriptfont2' \\\n// '\\stop'\n//\n// The metrics themselves were retrieved using the following commands:\n//\n// tftopl cmsy10\n// tftopl cmsy7\n// tftopl cmsy5\n//\n// The output of each of these commands is quite lengthy. The only part we\n// care about is the FONTDIMEN section. Each value is measured in EMs.\nvar sigmasAndXis = {\n slant: [0.250, 0.250, 0.250],\n // sigma1\n space: [0.000, 0.000, 0.000],\n // sigma2\n stretch: [0.000, 0.000, 0.000],\n // sigma3\n shrink: [0.000, 0.000, 0.000],\n // sigma4\n xHeight: [0.431, 0.431, 0.431],\n // sigma5\n quad: [1.000, 1.171, 1.472],\n // sigma6\n extraSpace: [0.000, 0.000, 0.000],\n // sigma7\n num1: [0.677, 0.732, 0.925],\n // sigma8\n num2: [0.394, 0.384, 0.387],\n // sigma9\n num3: [0.444, 0.471, 0.504],\n // sigma10\n denom1: [0.686, 0.752, 1.025],\n // sigma11\n denom2: [0.345, 0.344, 0.532],\n // sigma12\n sup1: [0.413, 0.503, 0.504],\n // sigma13\n sup2: [0.363, 0.431, 0.404],\n // sigma14\n sup3: [0.289, 0.286, 0.294],\n // sigma15\n sub1: [0.150, 0.143, 0.200],\n // sigma16\n sub2: [0.247, 0.286, 0.400],\n // sigma17\n supDrop: [0.386, 0.353, 0.494],\n // sigma18\n subDrop: [0.050, 0.071, 0.100],\n // sigma19\n delim1: [2.390, 1.700, 1.980],\n // sigma20\n delim2: [1.010, 1.157, 1.420],\n // sigma21\n axisHeight: [0.250, 0.250, 0.250],\n // sigma22\n // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;\n // they correspond to the font parameters of the extension fonts (family 3).\n // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to\n // match cmex7, we'd use cmex7.tfm values for script and scriptscript\n // values.\n defaultRuleThickness: [0.04, 0.049, 0.049],\n // xi8; cmex7: 0.049\n bigOpSpacing1: [0.111, 0.111, 0.111],\n // xi9\n bigOpSpacing2: [0.166, 0.166, 0.166],\n // xi10\n bigOpSpacing3: [0.2, 0.2, 0.2],\n // xi11\n bigOpSpacing4: [0.6, 0.611, 0.611],\n // xi12; cmex7: 0.611\n bigOpSpacing5: [0.1, 0.143, 0.143],\n // xi13; cmex7: 0.143\n // The \\sqrt rule width is taken from the height of the surd character.\n // Since we use the same font at all sizes, this thickness doesn't scale.\n sqrtRuleThickness: [0.04, 0.04, 0.04],\n // This value determines how large a pt is, for metrics which are defined\n // in terms of pts.\n // This value is also used in katex.scss; if you change it make sure the\n // values match.\n ptPerEm: [10.0, 10.0, 10.0],\n // The space between adjacent `|` columns in an array definition. From\n // `\\showthe\\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.\n doubleRuleSep: [0.2, 0.2, 0.2],\n // The width of separator lines in {array} environments. From\n // `\\showthe\\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm.\n arrayRuleWidth: [0.04, 0.04, 0.04],\n // Two values from LaTeX source2e:\n fboxsep: [0.3, 0.3, 0.3],\n // 3 pt / ptPerEm\n fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm\n\n}; // This map contains a mapping from font name and character code to character\n// should have Latin-1 and Cyrillic characters, but may not depending on the\n// operating system. The metrics do not account for extra height from the\n// accents. In the case of Cyrillic characters which have both ascenders and\n// descenders we prefer approximations with ascenders, primarily to prevent\n// the fraction bar or root line from intersecting the glyph.\n// TODO(kevinb) allow union of multiple glyph metrics for better accuracy.\n\nvar extraCharacterMap = {\n // Latin-1\n 'Å': 'A',\n 'Ð': 'D',\n 'Þ': 'o',\n 'å': 'a',\n 'ð': 'd',\n 'þ': 'o',\n // Cyrillic\n 'А': 'A',\n 'Б': 'B',\n 'В': 'B',\n 'Г': 'F',\n 'Д': 'A',\n 'Е': 'E',\n 'Ж': 'K',\n 'З': '3',\n 'И': 'N',\n 'Й': 'N',\n 'К': 'K',\n 'Л': 'N',\n 'М': 'M',\n 'Н': 'H',\n 'О': 'O',\n 'П': 'N',\n 'Р': 'P',\n 'С': 'C',\n 'Т': 'T',\n 'У': 'y',\n 'Ф': 'O',\n 'Х': 'X',\n 'Ц': 'U',\n 'Ч': 'h',\n 'Ш': 'W',\n 'Щ': 'W',\n 'Ъ': 'B',\n 'Ы': 'X',\n 'Ь': 'B',\n 'Э': '3',\n 'Ю': 'X',\n 'Я': 'R',\n 'а': 'a',\n 'б': 'b',\n 'в': 'a',\n 'г': 'r',\n 'д': 'y',\n 'е': 'e',\n 'ж': 'm',\n 'з': 'e',\n 'и': 'n',\n 'й': 'n',\n 'к': 'n',\n 'л': 'n',\n 'м': 'm',\n 'н': 'n',\n 'о': 'o',\n 'п': 'n',\n 'р': 'p',\n 'с': 'c',\n 'т': 'o',\n 'у': 'y',\n 'ф': 'b',\n 'х': 'x',\n 'ц': 'n',\n 'ч': 'n',\n 'ш': 'w',\n 'щ': 'w',\n 'ъ': 'a',\n 'ы': 'm',\n 'ь': 'a',\n 'э': 'e',\n 'ю': 'm',\n 'я': 'r'\n};\n\n/**\n * This function adds new font metrics to default metricMap\n * It can also override existing metrics\n */\nfunction setFontMetrics(fontName, metrics) {\n fontMetricsData[fontName] = metrics;\n}\n/**\n * This function is a convenience function for looking up information in the\n * metricMap table. It takes a character as a string, and a font.\n *\n * Note: the `width` property may be undefined if fontMetricsData.js wasn't\n * built using `Make extended_metrics`.\n */\n\nfunction getCharacterMetrics(character, font, mode) {\n if (!fontMetricsData[font]) {\n throw new Error(\"Font metrics not found for font: \" + font + \".\");\n }\n\n var ch = character.charCodeAt(0);\n var metrics = fontMetricsData[font][ch];\n\n if (!metrics && character[0] in extraCharacterMap) {\n ch = extraCharacterMap[character[0]].charCodeAt(0);\n metrics = fontMetricsData[font][ch];\n }\n\n if (!metrics && mode === 'text') {\n // We don't typically have font metrics for Asian scripts.\n // But since we support them in text mode, we need to return\n // some sort of metrics.\n // So if the character is in a script we support but we\n // don't have metrics for it, just use the metrics for\n // the Latin capital letter M. This is close enough because\n // we (currently) only care about the height of the glyph\n // not its width.\n if (supportedCodepoint(ch)) {\n metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M'\n }\n }\n\n if (metrics) {\n return {\n depth: metrics[0],\n height: metrics[1],\n italic: metrics[2],\n skew: metrics[3],\n width: metrics[4]\n };\n }\n}\nvar fontMetricsBySizeIndex = {};\n/**\n * Get the font metrics for a given size.\n */\n\nfunction getGlobalMetrics(size) {\n var sizeIndex;\n\n if (size >= 5) {\n sizeIndex = 0;\n } else if (size >= 3) {\n sizeIndex = 1;\n } else {\n sizeIndex = 2;\n }\n\n if (!fontMetricsBySizeIndex[sizeIndex]) {\n var metrics = fontMetricsBySizeIndex[sizeIndex] = {\n cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18\n };\n\n for (var key in sigmasAndXis) {\n if (sigmasAndXis.hasOwnProperty(key)) {\n metrics[key] = sigmasAndXis[key][sizeIndex];\n }\n }\n }\n\n return fontMetricsBySizeIndex[sizeIndex];\n}\n\n/**\n * This file contains information about the options that the Parser carries\n * around with it while parsing. Data is held in an `Options` object, and when\n * recursing, a new `Options` object can be created with the `.with*` and\n * `.reset` functions.\n */\nvar sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize].\n// The size mappings are taken from TeX with \\normalsize=10pt.\n[1, 1, 1], // size1: [5, 5, 5] \\tiny\n[2, 1, 1], // size2: [6, 5, 5]\n[3, 1, 1], // size3: [7, 5, 5] \\scriptsize\n[4, 2, 1], // size4: [8, 6, 5] \\footnotesize\n[5, 2, 1], // size5: [9, 6, 5] \\small\n[6, 3, 1], // size6: [10, 7, 5] \\normalsize\n[7, 4, 2], // size7: [12, 8, 6] \\large\n[8, 6, 3], // size8: [14.4, 10, 7] \\Large\n[9, 7, 6], // size9: [17.28, 12, 10] \\LARGE\n[10, 8, 7], // size10: [20.74, 14.4, 12] \\huge\n[11, 10, 9] // size11: [24.88, 20.74, 17.28] \\HUGE\n];\nvar sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if\n// you change size indexes, change that function.\n0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488];\n\nvar sizeAtStyle = function sizeAtStyle(size, style) {\n return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];\n}; // In these types, \"\" (empty string) means \"no change\".\n\n\n/**\n * This is the main options class. It contains the current style, size, color,\n * and font.\n *\n * Options objects should not be modified. To create a new Options with\n * different properties, call a `.having*` method.\n */\nclass Options {\n // A font family applies to a group of fonts (i.e. SansSerif), while a font\n // represents a specific font (i.e. SansSerif Bold).\n // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm\n\n /**\n * The base size index.\n */\n constructor(data) {\n this.style = void 0;\n this.color = void 0;\n this.size = void 0;\n this.textSize = void 0;\n this.phantom = void 0;\n this.font = void 0;\n this.fontFamily = void 0;\n this.fontWeight = void 0;\n this.fontShape = void 0;\n this.sizeMultiplier = void 0;\n this.maxSize = void 0;\n this.minRuleThickness = void 0;\n this._fontMetrics = void 0;\n this.style = data.style;\n this.color = data.color;\n this.size = data.size || Options.BASESIZE;\n this.textSize = data.textSize || this.size;\n this.phantom = !!data.phantom;\n this.font = data.font || \"\";\n this.fontFamily = data.fontFamily || \"\";\n this.fontWeight = data.fontWeight || '';\n this.fontShape = data.fontShape || '';\n this.sizeMultiplier = sizeMultipliers[this.size - 1];\n this.maxSize = data.maxSize;\n this.minRuleThickness = data.minRuleThickness;\n this._fontMetrics = undefined;\n }\n /**\n * Returns a new options object with the same properties as \"this\". Properties\n * from \"extension\" will be copied to the new options object.\n */\n\n\n extend(extension) {\n var data = {\n style: this.style,\n size: this.size,\n textSize: this.textSize,\n color: this.color,\n phantom: this.phantom,\n font: this.font,\n fontFamily: this.fontFamily,\n fontWeight: this.fontWeight,\n fontShape: this.fontShape,\n maxSize: this.maxSize,\n minRuleThickness: this.minRuleThickness\n };\n\n for (var key in extension) {\n if (extension.hasOwnProperty(key)) {\n data[key] = extension[key];\n }\n }\n\n return new Options(data);\n }\n /**\n * Return an options object with the given style. If `this.style === style`,\n * returns `this`.\n */\n\n\n havingStyle(style) {\n if (this.style === style) {\n return this;\n } else {\n return this.extend({\n style: style,\n size: sizeAtStyle(this.textSize, style)\n });\n }\n }\n /**\n * Return an options object with a cramped version of the current style. If\n * the current style is cramped, returns `this`.\n */\n\n\n havingCrampedStyle() {\n return this.havingStyle(this.style.cramp());\n }\n /**\n * Return an options object with the given size and in at least `\\textstyle`.\n * Returns `this` if appropriate.\n */\n\n\n havingSize(size) {\n if (this.size === size && this.textSize === size) {\n return this;\n } else {\n return this.extend({\n style: this.style.text(),\n size: size,\n textSize: size,\n sizeMultiplier: sizeMultipliers[size - 1]\n });\n }\n }\n /**\n * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,\n * changes to at least `\\textstyle`.\n */\n\n\n havingBaseStyle(style) {\n style = style || this.style.text();\n var wantSize = sizeAtStyle(Options.BASESIZE, style);\n\n if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) {\n return this;\n } else {\n return this.extend({\n style: style,\n size: wantSize\n });\n }\n }\n /**\n * Remove the effect of sizing changes such as \\Huge.\n * Keep the effect of the current style, such as \\scriptstyle.\n */\n\n\n havingBaseSizing() {\n var size;\n\n switch (this.style.id) {\n case 4:\n case 5:\n size = 3; // normalsize in scriptstyle\n\n break;\n\n case 6:\n case 7:\n size = 1; // normalsize in scriptscriptstyle\n\n break;\n\n default:\n size = 6;\n // normalsize in textstyle or displaystyle\n }\n\n return this.extend({\n style: this.style.text(),\n size: size\n });\n }\n /**\n * Create a new options object with the given color.\n */\n\n\n withColor(color) {\n return this.extend({\n color: color\n });\n }\n /**\n * Create a new options object with \"phantom\" set to true.\n */\n\n\n withPhantom() {\n return this.extend({\n phantom: true\n });\n }\n /**\n * Creates a new options object with the given math font or old text font.\n * @type {[type]}\n */\n\n\n withFont(font) {\n return this.extend({\n font\n });\n }\n /**\n * Create a new options objects with the given fontFamily.\n */\n\n\n withTextFontFamily(fontFamily) {\n return this.extend({\n fontFamily,\n font: \"\"\n });\n }\n /**\n * Creates a new options object with the given font weight\n */\n\n\n withTextFontWeight(fontWeight) {\n return this.extend({\n fontWeight,\n font: \"\"\n });\n }\n /**\n * Creates a new options object with the given font weight\n */\n\n\n withTextFontShape(fontShape) {\n return this.extend({\n fontShape,\n font: \"\"\n });\n }\n /**\n * Return the CSS sizing classes required to switch from enclosing options\n * `oldOptions` to `this`. Returns an array of classes.\n */\n\n\n sizingClasses(oldOptions) {\n if (oldOptions.size !== this.size) {\n return [\"sizing\", \"reset-size\" + oldOptions.size, \"size\" + this.size];\n } else {\n return [];\n }\n }\n /**\n * Return the CSS sizing classes required to switch to the base size. Like\n * `this.havingSize(BASESIZE).sizingClasses(this)`.\n */\n\n\n baseSizingClasses() {\n if (this.size !== Options.BASESIZE) {\n return [\"sizing\", \"reset-size\" + this.size, \"size\" + Options.BASESIZE];\n } else {\n return [];\n }\n }\n /**\n * Return the font metrics for this size.\n */\n\n\n fontMetrics() {\n if (!this._fontMetrics) {\n this._fontMetrics = getGlobalMetrics(this.size);\n }\n\n return this._fontMetrics;\n }\n /**\n * Gets the CSS color of the current options object\n */\n\n\n getColor() {\n if (this.phantom) {\n return \"transparent\";\n } else {\n return this.color;\n }\n }\n\n}\n\nOptions.BASESIZE = 6;\n\n/**\n * This file does conversion between units. In particular, it provides\n * calculateSize to convert other units into ems.\n */\n// Thus, multiplying a length by this number converts the length from units\n// into pts. Dividing the result by ptPerEm gives the number of ems\n// *assuming* a font size of ptPerEm (normal size, normal style).\n\nvar ptPerUnit = {\n // https://en.wikibooks.org/wiki/LaTeX/Lengths and\n // https://tex.stackexchange.com/a/8263\n \"pt\": 1,\n // TeX point\n \"mm\": 7227 / 2540,\n // millimeter\n \"cm\": 7227 / 254,\n // centimeter\n \"in\": 72.27,\n // inch\n \"bp\": 803 / 800,\n // big (PostScript) points\n \"pc\": 12,\n // pica\n \"dd\": 1238 / 1157,\n // didot\n \"cc\": 14856 / 1157,\n // cicero (12 didot)\n \"nd\": 685 / 642,\n // new didot\n \"nc\": 1370 / 107,\n // new cicero (12 new didot)\n \"sp\": 1 / 65536,\n // scaled point (TeX's internal smallest unit)\n // https://tex.stackexchange.com/a/41371\n \"px\": 803 / 800 // \\pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX\n\n}; // Dictionary of relative units, for fast validity testing.\n\nvar relativeUnit = {\n \"ex\": true,\n \"em\": true,\n \"mu\": true\n};\n\n/**\n * Determine whether the specified unit (either a string defining the unit\n * or a \"size\" parse node containing a unit field) is valid.\n */\nvar validUnit = function validUnit(unit) {\n if (typeof unit !== \"string\") {\n unit = unit.unit;\n }\n\n return unit in ptPerUnit || unit in relativeUnit || unit === \"ex\";\n};\n/*\n * Convert a \"size\" parse node (with numeric \"number\" and string \"unit\" fields,\n * as parsed by functions.js argType \"size\") into a CSS em value for the\n * current style/scale. `options` gives the current options.\n */\n\nvar calculateSize = function calculateSize(sizeValue, options) {\n var scale;\n\n if (sizeValue.unit in ptPerUnit) {\n // Absolute units\n scale = ptPerUnit[sizeValue.unit] // Convert unit to pt\n / options.fontMetrics().ptPerEm // Convert pt to CSS em\n / options.sizeMultiplier; // Unscale to make absolute units\n } else if (sizeValue.unit === \"mu\") {\n // `mu` units scale with scriptstyle/scriptscriptstyle.\n scale = options.fontMetrics().cssEmPerMu;\n } else {\n // Other relative units always refer to the *textstyle* font\n // in the current size.\n var unitOptions;\n\n if (options.style.isTight()) {\n // isTight() means current style is script/scriptscript.\n unitOptions = options.havingStyle(options.style.text());\n } else {\n unitOptions = options;\n } // TODO: In TeX these units are relative to the quad of the current\n // *text* font, e.g. cmr10. KaTeX instead uses values from the\n // comparably-sized *Computer Modern symbol* font. At 10pt, these\n // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641;\n // cmr5=1.361133, cmsy5=1.472241. Consider $\\scriptsize a\\kern1emb$.\n // TeX \\showlists shows a kern of 1.13889 * fontsize;\n // KaTeX shows a kern of 1.171 * fontsize.\n\n\n if (sizeValue.unit === \"ex\") {\n scale = unitOptions.fontMetrics().xHeight;\n } else if (sizeValue.unit === \"em\") {\n scale = unitOptions.fontMetrics().quad;\n } else {\n throw new ParseError(\"Invalid unit: '\" + sizeValue.unit + \"'\");\n }\n\n if (unitOptions !== options) {\n scale *= unitOptions.sizeMultiplier / options.sizeMultiplier;\n }\n }\n\n return Math.min(sizeValue.number * scale, options.maxSize);\n};\n/**\n * Round `n` to 4 decimal places, or to the nearest 1/10,000th em. See\n * https://github.com/KaTeX/KaTeX/pull/2460.\n */\n\nvar makeEm = function makeEm(n) {\n return +n.toFixed(4) + \"em\";\n};\n\n/**\n * These objects store the data about the DOM nodes we create, as well as some\n * extra data. They can then be transformed into real DOM nodes with the\n * `toNode` function or HTML markup using `toMarkup`. They are useful for both\n * storing extra properties on the nodes, as well as providing a way to easily\n * work with the DOM.\n *\n * Similar functions for working with MathML nodes exist in mathMLTree.js.\n *\n * TODO: refactor `span` and `anchor` into common superclass when\n * target environments support class inheritance\n */\n\n/**\n * Create an HTML className based on a list of classes. In addition to joining\n * with spaces, we also remove empty classes.\n */\nvar createClass = function createClass(classes) {\n return classes.filter(cls => cls).join(\" \");\n};\n\nvar initNode = function initNode(classes, options, style) {\n this.classes = classes || [];\n this.attributes = {};\n this.height = 0;\n this.depth = 0;\n this.maxFontSize = 0;\n this.style = style || {};\n\n if (options) {\n if (options.style.isTight()) {\n this.classes.push(\"mtight\");\n }\n\n var color = options.getColor();\n\n if (color) {\n this.style.color = color;\n }\n }\n};\n/**\n * Convert into an HTML node\n */\n\n\nvar toNode = function toNode(tagName) {\n var node = document.createElement(tagName); // Apply the class\n\n node.className = createClass(this.classes); // Apply inline styles\n\n for (var style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n // $FlowFixMe Flow doesn't seem to understand span.style's type.\n node.style[style] = this.style[style];\n }\n } // Apply attributes\n\n\n for (var attr in this.attributes) {\n if (this.attributes.hasOwnProperty(attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n } // Append the children, also as HTML nodes\n\n\n for (var i = 0; i < this.children.length; i++) {\n node.appendChild(this.children[i].toNode());\n }\n\n return node;\n};\n/**\n * https://w3c.github.io/html-reference/syntax.html#syntax-attributes\n *\n * > Attribute Names must consist of one or more characters\n * other than the space characters, U+0000 NULL,\n * '\"', \"'\", \">\", \"/\", \"=\", the control characters,\n * and any characters that are not defined by Unicode.\n */\n\n\nvar invalidAttributeNameRegex = /[\\s\"'>/=\\x00-\\x1f]/;\n/**\n * Convert into an HTML markup string\n */\n\nvar toMarkup = function toMarkup(tagName) {\n var markup = \"<\" + tagName; // Add the class\n\n if (this.classes.length) {\n markup += \" class=\\\"\" + utils.escape(createClass(this.classes)) + \"\\\"\";\n }\n\n var styles = \"\"; // Add the styles, after hyphenation\n\n for (var style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n }\n }\n\n if (styles) {\n markup += \" style=\\\"\" + utils.escape(styles) + \"\\\"\";\n } // Add the attributes\n\n\n for (var attr in this.attributes) {\n if (this.attributes.hasOwnProperty(attr)) {\n if (invalidAttributeNameRegex.test(attr)) {\n throw new ParseError(\"Invalid attribute name '\" + attr + \"'\");\n }\n\n markup += \" \" + attr + \"=\\\"\" + utils.escape(this.attributes[attr]) + \"\\\"\";\n }\n }\n\n markup += \">\"; // Add the markup of the children, also as markup\n\n for (var i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n markup += \"</\" + tagName + \">\";\n return markup;\n}; // Making the type below exact with all optional fields doesn't work due to\n// - https://github.com/facebook/flow/issues/4582\n// - https://github.com/facebook/flow/issues/5688\n// However, since *all* fields are optional, $Shape<> works as suggested in 5688\n// above.\n// This type does not include all CSS properties. Additional properties should\n// be added as needed.\n\n\n/**\n * This node represents a span node, with a className, a list of children, and\n * an inline style. It also contains information about its height, depth, and\n * maxFontSize.\n *\n * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan\n * otherwise. This typesafety is important when HTML builders access a span's\n * children.\n */\nclass Span {\n constructor(classes, children, options, style) {\n this.children = void 0;\n this.attributes = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.width = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n initNode.call(this, classes, options, style);\n this.children = children || [];\n }\n /**\n * Sets an arbitrary attribute on the span. Warning: use this wisely. Not\n * all browsers support attributes the same, and having too many custom\n * attributes is probably bad.\n */\n\n\n setAttribute(attribute, value) {\n this.attributes[attribute] = value;\n }\n\n hasClass(className) {\n return this.classes.includes(className);\n }\n\n toNode() {\n return toNode.call(this, \"span\");\n }\n\n toMarkup() {\n return toMarkup.call(this, \"span\");\n }\n\n}\n/**\n * This node represents an anchor (<a>) element with a hyperlink. See `span`\n * for further details.\n */\n\nclass Anchor {\n constructor(href, classes, children, options) {\n this.children = void 0;\n this.attributes = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n initNode.call(this, classes, options);\n this.children = children || [];\n this.setAttribute('href', href);\n }\n\n setAttribute(attribute, value) {\n this.attributes[attribute] = value;\n }\n\n hasClass(className) {\n return this.classes.includes(className);\n }\n\n toNode() {\n return toNode.call(this, \"a\");\n }\n\n toMarkup() {\n return toMarkup.call(this, \"a\");\n }\n\n}\n/**\n * This node represents an image embed (<img>) element.\n */\n\nclass Img {\n constructor(src, alt, style) {\n this.src = void 0;\n this.alt = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n this.alt = alt;\n this.src = src;\n this.classes = [\"mord\"];\n this.style = style;\n }\n\n hasClass(className) {\n return this.classes.includes(className);\n }\n\n toNode() {\n var node = document.createElement(\"img\");\n node.src = this.src;\n node.alt = this.alt;\n node.className = \"mord\"; // Apply inline styles\n\n for (var style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n // $FlowFixMe\n node.style[style] = this.style[style];\n }\n }\n\n return node;\n }\n\n toMarkup() {\n var markup = \"<img src=\\\"\" + utils.escape(this.src) + \"\\\"\" + (\" alt=\\\"\" + utils.escape(this.alt) + \"\\\"\"); // Add the styles, after hyphenation\n\n var styles = \"\";\n\n for (var style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n }\n }\n\n if (styles) {\n markup += \" style=\\\"\" + utils.escape(styles) + \"\\\"\";\n }\n\n markup += \"'/>\";\n return markup;\n }\n\n}\nvar iCombinations = {\n 'î': '\\u0131\\u0302',\n 'ï': '\\u0131\\u0308',\n 'í': '\\u0131\\u0301',\n // 'ī': '\\u0131\\u0304', // enable when we add Extended Latin\n 'ì': '\\u0131\\u0300'\n};\n/**\n * A symbol node contains information about a single symbol. It either renders\n * to a single text node, or a span with a single text node in it, depending on\n * whether it has CSS classes, styles, or needs italic correction.\n */\n\nclass SymbolNode {\n constructor(text, height, depth, italic, skew, width, classes, style) {\n this.text = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.italic = void 0;\n this.skew = void 0;\n this.width = void 0;\n this.maxFontSize = void 0;\n this.classes = void 0;\n this.style = void 0;\n this.text = text;\n this.height = height || 0;\n this.depth = depth || 0;\n this.italic = italic || 0;\n this.skew = skew || 0;\n this.width = width || 0;\n this.classes = classes || [];\n this.style = style || {};\n this.maxFontSize = 0; // Mark text from non-Latin scripts with specific classes so that we\n // can specify which fonts to use. This allows us to render these\n // characters with a serif font in situations where the browser would\n // either default to a sans serif or render a placeholder character.\n // We use CSS class names like cjk_fallback, hangul_fallback and\n // brahmic_fallback. See ./unicodeScripts.js for the set of possible\n // script names\n\n var script = scriptFromCodepoint(this.text.charCodeAt(0));\n\n if (script) {\n this.classes.push(script + \"_fallback\");\n }\n\n if (/[îïíì]/.test(this.text)) {\n // add ī when we add Extended Latin\n this.text = iCombinations[this.text];\n }\n }\n\n hasClass(className) {\n return this.classes.includes(className);\n }\n /**\n * Creates a text node or span from a symbol node. Note that a span is only\n * created if it is needed.\n */\n\n\n toNode() {\n var node = document.createTextNode(this.text);\n var span = null;\n\n if (this.italic > 0) {\n span = document.createElement(\"span\");\n span.style.marginRight = makeEm(this.italic);\n }\n\n if (this.classes.length > 0) {\n span = span || document.createElement(\"span\");\n span.className = createClass(this.classes);\n }\n\n for (var style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n span = span || document.createElement(\"span\"); // $FlowFixMe Flow doesn't seem to understand span.style's type.\n\n span.style[style] = this.style[style];\n }\n }\n\n if (span) {\n span.appendChild(node);\n return span;\n } else {\n return node;\n }\n }\n /**\n * Creates markup for a symbol node.\n */\n\n\n toMarkup() {\n // TODO(alpert): More duplication than I'd like from\n // span.prototype.toMarkup and symbolNode.prototype.toNode...\n var needsSpan = false;\n var markup = \"<span\";\n\n if (this.classes.length) {\n needsSpan = true;\n markup += \" class=\\\"\";\n markup += utils.escape(createClass(this.classes));\n markup += \"\\\"\";\n }\n\n var styles = \"\";\n\n if (this.italic > 0) {\n styles += \"margin-right:\" + this.italic + \"em;\";\n }\n\n for (var style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n }\n }\n\n if (styles) {\n needsSpan = true;\n markup += \" style=\\\"\" + utils.escape(styles) + \"\\\"\";\n }\n\n var escaped = utils.escape(this.text);\n\n if (needsSpan) {\n markup += \">\";\n markup += escaped;\n markup += \"</span>\";\n return markup;\n } else {\n return escaped;\n }\n }\n\n}\n/**\n * SVG nodes are used to render stretchy wide elements.\n */\n\nclass SvgNode {\n constructor(children, attributes) {\n this.children = void 0;\n this.attributes = void 0;\n this.children = children || [];\n this.attributes = attributes || {};\n }\n\n toNode() {\n var svgNS = \"http://www.w3.org/2000/svg\";\n var node = document.createElementNS(svgNS, \"svg\"); // Apply attributes\n\n for (var attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n }\n\n for (var i = 0; i < this.children.length; i++) {\n node.appendChild(this.children[i].toNode());\n }\n\n return node;\n }\n\n toMarkup() {\n var markup = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\"\"; // Apply attributes\n\n for (var attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n markup += \" \" + attr + \"=\\\"\" + utils.escape(this.attributes[attr]) + \"\\\"\";\n }\n }\n\n markup += \">\";\n\n for (var i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n markup += \"</svg>\";\n return markup;\n }\n\n}\nclass PathNode {\n constructor(pathName, alternate) {\n this.pathName = void 0;\n this.alternate = void 0;\n this.pathName = pathName;\n this.alternate = alternate; // Used only for \\sqrt, \\phase, & tall delims\n }\n\n toNode() {\n var svgNS = \"http://www.w3.org/2000/svg\";\n var node = document.createElementNS(svgNS, \"path\");\n\n if (this.alternate) {\n node.setAttribute(\"d\", this.alternate);\n } else {\n node.setAttribute(\"d\", path[this.pathName]);\n }\n\n return node;\n }\n\n toMarkup() {\n if (this.alternate) {\n return \"<path d=\\\"\" + utils.escape(this.alternate) + \"\\\"/>\";\n } else {\n return \"<path d=\\\"\" + utils.escape(path[this.pathName]) + \"\\\"/>\";\n }\n }\n\n}\nclass LineNode {\n constructor(attributes) {\n this.attributes = void 0;\n this.attributes = attributes || {};\n }\n\n toNode() {\n var svgNS = \"http://www.w3.org/2000/svg\";\n var node = document.createElementNS(svgNS, \"line\"); // Apply attributes\n\n for (var attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n }\n\n return node;\n }\n\n toMarkup() {\n var markup = \"<line\";\n\n for (var attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n markup += \" \" + attr + \"=\\\"\" + utils.escape(this.attributes[attr]) + \"\\\"\";\n }\n }\n\n markup += \"/>\";\n return markup;\n }\n\n}\nfunction assertSymbolDomNode(group) {\n if (group instanceof SymbolNode) {\n return group;\n } else {\n throw new Error(\"Expected symbolNode but got \" + String(group) + \".\");\n }\n}\nfunction assertSpan(group) {\n if (group instanceof Span) {\n return group;\n } else {\n throw new Error(\"Expected span<HtmlDomNode> but got \" + String(group) + \".\");\n }\n}\n\n/**\n * This file holds a list of all no-argument functions and single-character\n * symbols (like 'a' or ';').\n *\n * For each of the symbols, there are three properties they can have:\n * - font (required): the font to be used for this symbol. Either \"main\" (the\n normal font), or \"ams\" (the ams fonts).\n * - group (required): the ParseNode group type the symbol should have (i.e.\n \"textord\", \"mathord\", etc).\n See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types\n * - replace: the character that this symbol or function should be\n * replaced with (i.e. \"\\phi\" has a replace value of \"\\u03d5\", the phi\n * character in the main font).\n *\n * The outermost map in the table indicates what mode the symbols should be\n * accepted in (e.g. \"math\" or \"text\").\n */\n// Some of these have a \"-token\" suffix since these are also used as `ParseNode`\n// types for raw text tokens, and we want to avoid conflicts with higher-level\n// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by\n// looking up the `symbols` map.\nvar ATOMS = {\n \"bin\": 1,\n \"close\": 1,\n \"inner\": 1,\n \"open\": 1,\n \"punct\": 1,\n \"rel\": 1\n};\nvar NON_ATOMS = {\n \"accent-token\": 1,\n \"mathord\": 1,\n \"op-token\": 1,\n \"spacing\": 1,\n \"textord\": 1\n};\nvar symbols = {\n \"math\": {},\n \"text\": {}\n};\n/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */\n\nfunction defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) {\n symbols[mode][name] = {\n font,\n group,\n replace\n };\n\n if (acceptUnicodeChar && replace) {\n symbols[mode][replace] = symbols[mode][name];\n }\n} // Some abbreviations for commonly used strings.\n// This helps minify the code, and also spotting typos using jshint.\n// modes:\n\nvar math = \"math\";\nvar text = \"text\"; // fonts:\n\nvar main = \"main\";\nvar ams = \"ams\"; // groups:\n\nvar accent = \"accent-token\";\nvar bin = \"bin\";\nvar close = \"close\";\nvar inner = \"inner\";\nvar mathord = \"mathord\";\nvar op = \"op-token\";\nvar open = \"open\";\nvar punct = \"punct\";\nvar rel = \"rel\";\nvar spacing = \"spacing\";\nvar textord = \"textord\"; // Now comes the symbol table\n// Relation Symbols\n\ndefineSymbol(math, main, rel, \"\\u2261\", \"\\\\equiv\", true);\ndefineSymbol(math, main, rel, \"\\u227a\", \"\\\\prec\", true);\ndefineSymbol(math, main, rel, \"\\u227b\", \"\\\\succ\", true);\ndefineSymbol(math, main, rel, \"\\u223c\", \"\\\\sim\", true);\ndefineSymbol(math, main, rel, \"\\u22a5\", \"\\\\perp\");\ndefineSymbol(math, main, rel, \"\\u2aaf\", \"\\\\preceq\", true);\ndefineSymbol(math, main, rel, \"\\u2ab0\", \"\\\\succeq\", true);\ndefineSymbol(math, main, rel, \"\\u2243\", \"\\\\simeq\", true);\ndefineSymbol(math, main, rel, \"\\u2223\", \"\\\\mid\", true);\ndefineSymbol(math, main, rel, \"\\u226a\", \"\\\\ll\", true);\ndefineSymbol(math, main, rel, \"\\u226b\", \"\\\\gg\", true);\ndefineSymbol(math, main, rel, \"\\u224d\", \"\\\\asymp\", true);\ndefineSymbol(math, main, rel, \"\\u2225\", \"\\\\parallel\");\ndefineSymbol(math, main, rel, \"\\u22c8\", \"\\\\bowtie\", true);\ndefineSymbol(math, main, rel, \"\\u2323\", \"\\\\smile\", true);\ndefineSymbol(math, main, rel, \"\\u2291\", \"\\\\sqsubseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2292\", \"\\\\sqsupseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2250\", \"\\\\doteq\", true);\ndefineSymbol(math, main, rel, \"\\u2322\", \"\\\\frown\", true);\ndefineSymbol(math, main, rel, \"\\u220b\", \"\\\\ni\", true);\ndefineSymbol(math, main, rel, \"\\u221d\", \"\\\\propto\", true);\ndefineSymbol(math, main, rel, \"\\u22a2\", \"\\\\vdash\", true);\ndefineSymbol(math, main, rel, \"\\u22a3\", \"\\\\dashv\", true);\ndefineSymbol(math, main, rel, \"\\u220b\", \"\\\\owns\"); // Punctuation\n\ndefineSymbol(math, main, punct, \"\\u002e\", \"\\\\ldotp\");\ndefineSymbol(math, main, punct, \"\\u22c5\", \"\\\\cdotp\"); // Misc Symbols\n\ndefineSymbol(math, main, textord, \"\\u0023\", \"\\\\#\");\ndefineSymbol(text, main, textord, \"\\u0023\", \"\\\\#\");\ndefineSymbol(math, main, textord, \"\\u0026\", \"\\\\&\");\ndefineSymbol(text, main, textord, \"\\u0026\", \"\\\\&\");\ndefineSymbol(math, main, textord, \"\\u2135\", \"\\\\aleph\", true);\ndefineSymbol(math, main, textord, \"\\u2200\", \"\\\\forall\", true);\ndefineSymbol(math, main, textord, \"\\u210f\", \"\\\\hbar\", true);\ndefineSymbol(math, main, textord, \"\\u2203\", \"\\\\exists\", true);\ndefineSymbol(math, main, textord, \"\\u2207\", \"\\\\nabla\", true);\ndefineSymbol(math, main, textord, \"\\u266d\", \"\\\\flat\", true);\ndefineSymbol(math, main, textord, \"\\u2113\", \"\\\\ell\", true);\ndefineSymbol(math, main, textord, \"\\u266e\", \"\\\\natural\", true);\ndefineSymbol(math, main, textord, \"\\u2663\", \"\\\\clubsuit\", true);\ndefineSymbol(math, main, textord, \"\\u2118\", \"\\\\wp\", true);\ndefineSymbol(math, main, textord, \"\\u266f\", \"\\\\sharp\", true);\ndefineSymbol(math, main, textord, \"\\u2662\", \"\\\\diamondsuit\", true);\ndefineSymbol(math, main, textord, \"\\u211c\", \"\\\\Re\", true);\ndefineSymbol(math, main, textord, \"\\u2661\", \"\\\\heartsuit\", true);\ndefineSymbol(math, main, textord, \"\\u2111\", \"\\\\Im\", true);\ndefineSymbol(math, main, textord, \"\\u2660\", \"\\\\spadesuit\", true);\ndefineSymbol(math, main, textord, \"\\u00a7\", \"\\\\S\", true);\ndefineSymbol(text, main, textord, \"\\u00a7\", \"\\\\S\");\ndefineSymbol(math, main, textord, \"\\u00b6\", \"\\\\P\", true);\ndefineSymbol(text, main, textord, \"\\u00b6\", \"\\\\P\"); // Math and Text\n\ndefineSymbol(math, main, textord, \"\\u2020\", \"\\\\dag\");\ndefineSymbol(text, main, textord, \"\\u2020\", \"\\\\dag\");\ndefineSymbol(text, main, textord, \"\\u2020\", \"\\\\textdagger\");\ndefineSymbol(math, main, textord, \"\\u2021\", \"\\\\ddag\");\ndefineSymbol(text, main, textord, \"\\u2021\", \"\\\\ddag\");\ndefineSymbol(text, main, textord, \"\\u2021\", \"\\\\textdaggerdbl\"); // Large Delimiters\n\ndefineSymbol(math, main, close, \"\\u23b1\", \"\\\\rmoustache\", true);\ndefineSymbol(math, main, open, \"\\u23b0\", \"\\\\lmoustache\", true);\ndefineSymbol(math, main, close, \"\\u27ef\", \"\\\\rgroup\", true);\ndefineSymbol(math, main, open, \"\\u27ee\", \"\\\\lgroup\", true); // Binary Operators\n\ndefineSymbol(math, main, bin, \"\\u2213\", \"\\\\mp\", true);\ndefineSymbol(math, main, bin, \"\\u2296\", \"\\\\ominus\", true);\ndefineSymbol(math, main, bin, \"\\u228e\", \"\\\\uplus\", true);\ndefineSymbol(math, main, bin, \"\\u2293\", \"\\\\sqcap\", true);\ndefineSymbol(math, main, bin, \"\\u2217\", \"\\\\ast\");\ndefineSymbol(math, main, bin, \"\\u2294\", \"\\\\sqcup\", true);\ndefineSymbol(math, main, bin, \"\\u25ef\", \"\\\\bigcirc\", true);\ndefineSymbol(math, main, bin, \"\\u2219\", \"\\\\bullet\", true);\ndefineSymbol(math, main, bin, \"\\u2021\", \"\\\\ddagger\");\ndefineSymbol(math, main, bin, \"\\u2240\", \"\\\\wr\", true);\ndefineSymbol(math, main, bin, \"\\u2a3f\", \"\\\\amalg\");\ndefineSymbol(math, main, bin, \"\\u0026\", \"\\\\And\"); // from amsmath\n// Arrow Symbols\n\ndefineSymbol(math, main, rel, \"\\u27f5\", \"\\\\longleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d0\", \"\\\\Leftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f8\", \"\\\\Longleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f6\", \"\\\\longrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d2\", \"\\\\Rightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f9\", \"\\\\Longrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2194\", \"\\\\leftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f7\", \"\\\\longleftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d4\", \"\\\\Leftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27fa\", \"\\\\Longleftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21a6\", \"\\\\mapsto\", true);\ndefineSymbol(math, main, rel, \"\\u27fc\", \"\\\\longmapsto\", true);\ndefineSymbol(math, main, rel, \"\\u2197\", \"\\\\nearrow\", true);\ndefineSymbol(math, main, rel, \"\\u21a9\", \"\\\\hookleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21aa\", \"\\\\hookrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2198\", \"\\\\searrow\", true);\ndefineSymbol(math, main, rel, \"\\u21bc\", \"\\\\leftharpoonup\", true);\ndefineSymbol(math, main, rel, \"\\u21c0\", \"\\\\rightharpoonup\", true);\ndefineSymbol(math, main, rel, \"\\u2199\", \"\\\\swarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21bd\", \"\\\\leftharpoondown\", true);\ndefineSymbol(math, main, rel, \"\\u21c1\", \"\\\\rightharpoondown\", true);\ndefineSymbol(math, main, rel, \"\\u2196\", \"\\\\nwarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21cc\", \"\\\\rightleftharpoons\", true); // AMS Negated Binary Relations\n\ndefineSymbol(math, ams, rel, \"\\u226e\", \"\\\\nless\", true); // Symbol names preceded by \"@\" each have a corresponding macro.\n\ndefineSymbol(math, ams, rel, \"\\ue010\", \"\\\\@nleqslant\");\ndefineSymbol(math, ams, rel, \"\\ue011\", \"\\\\@nleqq\");\ndefineSymbol(math, ams, rel, \"\\u2a87\", \"\\\\lneq\", true);\ndefineSymbol(math, ams, rel, \"\\u2268\", \"\\\\lneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue00c\", \"\\\\@lvertneqq\");\ndefineSymbol(math, ams, rel, \"\\u22e6\", \"\\\\lnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a89\", \"\\\\lnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2280\", \"\\\\nprec\", true); // unicode-math maps \\u22e0 to \\npreccurlyeq. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u22e0\", \"\\\\npreceq\", true);\ndefineSymbol(math, ams, rel, \"\\u22e8\", \"\\\\precnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab9\", \"\\\\precnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2241\", \"\\\\nsim\", true);\ndefineSymbol(math, ams, rel, \"\\ue006\", \"\\\\@nshortmid\");\ndefineSymbol(math, ams, rel, \"\\u2224\", \"\\\\nmid\", true);\ndefineSymbol(math, ams, rel, \"\\u22ac\", \"\\\\nvdash\", true);\ndefineSymbol(math, ams, rel, \"\\u22ad\", \"\\\\nvDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22ea\", \"\\\\ntriangleleft\");\ndefineSymbol(math, ams, rel, \"\\u22ec\", \"\\\\ntrianglelefteq\", true);\ndefineSymbol(math, ams, rel, \"\\u228a\", \"\\\\subsetneq\", true);\ndefineSymbol(math, ams, rel, \"\\ue01a\", \"\\\\@varsubsetneq\");\ndefineSymbol(math, ams, rel, \"\\u2acb\", \"\\\\subsetneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue017\", \"\\\\@varsubsetneqq\");\ndefineSymbol(math, ams, rel, \"\\u226f\", \"\\\\ngtr\", true);\ndefineSymbol(math, ams, rel, \"\\ue00f\", \"\\\\@ngeqslant\");\ndefineSymbol(math, ams, rel, \"\\ue00e\", \"\\\\@ngeqq\");\ndefineSymbol(math, ams, rel, \"\\u2a88\", \"\\\\gneq\", true);\ndefineSymbol(math, ams, rel, \"\\u2269\", \"\\\\gneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue00d\", \"\\\\@gvertneqq\");\ndefineSymbol(math, ams, rel, \"\\u22e7\", \"\\\\gnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8a\", \"\\\\gnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2281\", \"\\\\nsucc\", true); // unicode-math maps \\u22e1 to \\nsucccurlyeq. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u22e1\", \"\\\\nsucceq\", true);\ndefineSymbol(math, ams, rel, \"\\u22e9\", \"\\\\succnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2aba\", \"\\\\succnapprox\", true); // unicode-math maps \\u2246 to \\simneqq. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u2246\", \"\\\\ncong\", true);\ndefineSymbol(math, ams, rel, \"\\ue007\", \"\\\\@nshortparallel\");\ndefineSymbol(math, ams, rel, \"\\u2226\", \"\\\\nparallel\", true);\ndefineSymbol(math, ams, rel, \"\\u22af\", \"\\\\nVDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22eb\", \"\\\\ntriangleright\");\ndefineSymbol(math, ams, rel, \"\\u22ed\", \"\\\\ntrianglerighteq\", true);\ndefineSymbol(math, ams, rel, \"\\ue018\", \"\\\\@nsupseteqq\");\ndefineSymbol(math, ams, rel, \"\\u228b\", \"\\\\supsetneq\", true);\ndefineSymbol(math, ams, rel, \"\\ue01b\", \"\\\\@varsupsetneq\");\ndefineSymbol(math, ams, rel, \"\\u2acc\", \"\\\\supsetneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue019\", \"\\\\@varsupsetneqq\");\ndefineSymbol(math, ams, rel, \"\\u22ae\", \"\\\\nVdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab5\", \"\\\\precneqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab6\", \"\\\\succneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue016\", \"\\\\@nsubseteqq\");\ndefineSymbol(math, ams, bin, \"\\u22b4\", \"\\\\unlhd\");\ndefineSymbol(math, ams, bin, \"\\u22b5\", \"\\\\unrhd\"); // AMS Negated Arrows\n\ndefineSymbol(math, ams, rel, \"\\u219a\", \"\\\\nleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u219b\", \"\\\\nrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21cd\", \"\\\\nLeftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21cf\", \"\\\\nRightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21ae\", \"\\\\nleftrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21ce\", \"\\\\nLeftrightarrow\", true); // AMS Misc\n\ndefineSymbol(math, ams, rel, \"\\u25b3\", \"\\\\vartriangle\");\ndefineSymbol(math, ams, textord, \"\\u210f\", \"\\\\hslash\");\ndefineSymbol(math, ams, textord, \"\\u25bd\", \"\\\\triangledown\");\ndefineSymbol(math, ams, textord, \"\\u25ca\", \"\\\\lozenge\");\ndefineSymbol(math, ams, textord, \"\\u24c8\", \"\\\\circledS\");\ndefineSymbol(math, ams, textord, \"\\u00ae\", \"\\\\circledR\");\ndefineSymbol(text, ams, textord, \"\\u00ae\", \"\\\\circledR\");\ndefineSymbol(math, ams, textord, \"\\u2221\", \"\\\\measuredangle\", true);\ndefineSymbol(math, ams, textord, \"\\u2204\", \"\\\\nexists\");\ndefineSymbol(math, ams, textord, \"\\u2127\", \"\\\\mho\");\ndefineSymbol(math, ams, textord, \"\\u2132\", \"\\\\Finv\", true);\ndefineSymbol(math, ams, textord, \"\\u2141\", \"\\\\Game\", true);\ndefineSymbol(math, ams, textord, \"\\u2035\", \"\\\\backprime\");\ndefineSymbol(math, ams, textord, \"\\u25b2\", \"\\\\blacktriangle\");\ndefineSymbol(math, ams, textord, \"\\u25bc\", \"\\\\blacktriangledown\");\ndefineSymbol(math, ams, textord, \"\\u25a0\", \"\\\\blacksquare\");\ndefineSymbol(math, ams, textord, \"\\u29eb\", \"\\\\blacklozenge\");\ndefineSymbol(math, ams, textord, \"\\u2605\", \"\\\\bigstar\");\ndefineSymbol(math, ams, textord, \"\\u2222\", \"\\\\sphericalangle\", true);\ndefineSymbol(math, ams, textord, \"\\u2201\", \"\\\\complement\", true); // unicode-math maps U+F0 to \\matheth. We map to AMS function \\eth\n\ndefineSymbol(math, ams, textord, \"\\u00f0\", \"\\\\eth\", true);\ndefineSymbol(text, main, textord, \"\\u00f0\", \"\\u00f0\");\ndefineSymbol(math, ams, textord, \"\\u2571\", \"\\\\diagup\");\ndefineSymbol(math, ams, textord, \"\\u2572\", \"\\\\diagdown\");\ndefineSymbol(math, ams, textord, \"\\u25a1\", \"\\\\square\");\ndefineSymbol(math, ams, textord, \"\\u25a1\", \"\\\\Box\");\ndefineSymbol(math, ams, textord, \"\\u25ca\", \"\\\\Diamond\"); // unicode-math maps U+A5 to \\mathyen. We map to AMS function \\yen\n\ndefineSymbol(math, ams, textord, \"\\u00a5\", \"\\\\yen\", true);\ndefineSymbol(text, ams, textord, \"\\u00a5\", \"\\\\yen\", true);\ndefineSymbol(math, ams, textord, \"\\u2713\", \"\\\\checkmark\", true);\ndefineSymbol(text, ams, textord, \"\\u2713\", \"\\\\checkmark\"); // AMS Hebrew\n\ndefineSymbol(math, ams, textord, \"\\u2136\", \"\\\\beth\", true);\ndefineSymbol(math, ams, textord, \"\\u2138\", \"\\\\daleth\", true);\ndefineSymbol(math, ams, textord, \"\\u2137\", \"\\\\gimel\", true); // AMS Greek\n\ndefineSymbol(math, ams, textord, \"\\u03dd\", \"\\\\digamma\", true);\ndefineSymbol(math, ams, textord, \"\\u03f0\", \"\\\\varkappa\"); // AMS Delimiters\n\ndefineSymbol(math, ams, open, \"\\u250c\", \"\\\\@ulcorner\", true);\ndefineSymbol(math, ams, close, \"\\u2510\", \"\\\\@urcorner\", true);\ndefineSymbol(math, ams, open, \"\\u2514\", \"\\\\@llcorner\", true);\ndefineSymbol(math, ams, close, \"\\u2518\", \"\\\\@lrcorner\", true); // AMS Binary Relations\n\ndefineSymbol(math, ams, rel, \"\\u2266\", \"\\\\leqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2a7d\", \"\\\\leqslant\", true);\ndefineSymbol(math, ams, rel, \"\\u2a95\", \"\\\\eqslantless\", true);\ndefineSymbol(math, ams, rel, \"\\u2272\", \"\\\\lesssim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a85\", \"\\\\lessapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u224a\", \"\\\\approxeq\", true);\ndefineSymbol(math, ams, bin, \"\\u22d6\", \"\\\\lessdot\");\ndefineSymbol(math, ams, rel, \"\\u22d8\", \"\\\\lll\", true);\ndefineSymbol(math, ams, rel, \"\\u2276\", \"\\\\lessgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u22da\", \"\\\\lesseqgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8b\", \"\\\\lesseqqgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2251\", \"\\\\doteqdot\");\ndefineSymbol(math, ams, rel, \"\\u2253\", \"\\\\risingdotseq\", true);\ndefineSymbol(math, ams, rel, \"\\u2252\", \"\\\\fallingdotseq\", true);\ndefineSymbol(math, ams, rel, \"\\u223d\", \"\\\\backsim\", true);\ndefineSymbol(math, ams, rel, \"\\u22cd\", \"\\\\backsimeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2ac5\", \"\\\\subseteqq\", true);\ndefineSymbol(math, ams, rel, \"\\u22d0\", \"\\\\Subset\", true);\ndefineSymbol(math, ams, rel, \"\\u228f\", \"\\\\sqsubset\", true);\ndefineSymbol(math, ams, rel, \"\\u227c\", \"\\\\preccurlyeq\", true);\ndefineSymbol(math, ams, rel, \"\\u22de\", \"\\\\curlyeqprec\", true);\ndefineSymbol(math, ams, rel, \"\\u227e\", \"\\\\precsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab7\", \"\\\\precapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u22b2\", \"\\\\vartriangleleft\");\ndefineSymbol(math, ams, rel, \"\\u22b4\", \"\\\\trianglelefteq\");\ndefineSymbol(math, ams, rel, \"\\u22a8\", \"\\\\vDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22aa\", \"\\\\Vvdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2323\", \"\\\\smallsmile\");\ndefineSymbol(math, ams, rel, \"\\u2322\", \"\\\\smallfrown\");\ndefineSymbol(math, ams, rel, \"\\u224f\", \"\\\\bumpeq\", true);\ndefineSymbol(math, ams, rel, \"\\u224e\", \"\\\\Bumpeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2267\", \"\\\\geqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2a7e\", \"\\\\geqslant\", true);\ndefineSymbol(math, ams, rel, \"\\u2a96\", \"\\\\eqslantgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2273\", \"\\\\gtrsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a86\", \"\\\\gtrapprox\", true);\ndefineSymbol(math, ams, bin, \"\\u22d7\", \"\\\\gtrdot\");\ndefineSymbol(math, ams, rel, \"\\u22d9\", \"\\\\ggg\", true);\ndefineSymbol(math, ams, rel, \"\\u2277\", \"\\\\gtrless\", true);\ndefineSymbol(math, ams, rel, \"\\u22db\", \"\\\\gtreqless\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8c\", \"\\\\gtreqqless\", true);\ndefineSymbol(math, ams, rel, \"\\u2256\", \"\\\\eqcirc\", true);\ndefineSymbol(math, ams, rel, \"\\u2257\", \"\\\\circeq\", true);\ndefineSymbol(math, ams, rel, \"\\u225c\", \"\\\\triangleq\", true);\ndefineSymbol(math, ams, rel, \"\\u223c\", \"\\\\thicksim\");\ndefineSymbol(math, ams, rel, \"\\u2248\", \"\\\\thickapprox\");\ndefineSymbol(math, ams, rel, \"\\u2ac6\", \"\\\\supseteqq\", true);\ndefineSymbol(math, ams, rel, \"\\u22d1\", \"\\\\Supset\", true);\ndefineSymbol(math, ams, rel, \"\\u2290\", \"\\\\sqsupset\", true);\ndefineSymbol(math, ams, rel, \"\\u227d\", \"\\\\succcurlyeq\", true);\ndefineSymbol(math, ams, rel, \"\\u22df\", \"\\\\curlyeqsucc\", true);\ndefineSymbol(math, ams, rel, \"\\u227f\", \"\\\\succsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab8\", \"\\\\succapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u22b3\", \"\\\\vartriangleright\");\ndefineSymbol(math, ams, rel, \"\\u22b5\", \"\\\\trianglerighteq\");\ndefineSymbol(math, ams, rel, \"\\u22a9\", \"\\\\Vdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2223\", \"\\\\shortmid\");\ndefineSymbol(math, ams, rel, \"\\u2225\", \"\\\\shortparallel\");\ndefineSymbol(math, ams, rel, \"\\u226c\", \"\\\\between\", true);\ndefineSymbol(math, ams, rel, \"\\u22d4\", \"\\\\pitchfork\", true);\ndefineSymbol(math, ams, rel, \"\\u221d\", \"\\\\varpropto\");\ndefineSymbol(math, ams, rel, \"\\u25c0\", \"\\\\blacktriangleleft\"); // unicode-math says that \\therefore is a mathord atom.\n// We kept the amssymb atom type, which is rel.\n\ndefineSymbol(math, ams, rel, \"\\u2234\", \"\\\\therefore\", true);\ndefineSymbol(math, ams, rel, \"\\u220d\", \"\\\\backepsilon\");\ndefineSymbol(math, ams, rel, \"\\u25b6\", \"\\\\blacktriangleright\"); // unicode-math says that \\because is a mathord atom.\n// We kept the amssymb atom type, which is rel.\n\ndefineSymbol(math, ams, rel, \"\\u2235\", \"\\\\because\", true);\ndefineSymbol(math, ams, rel, \"\\u22d8\", \"\\\\llless\");\ndefineSymbol(math, ams, rel, \"\\u22d9\", \"\\\\gggtr\");\ndefineSymbol(math, ams, bin, \"\\u22b2\", \"\\\\lhd\");\ndefineSymbol(math, ams, bin, \"\\u22b3\", \"\\\\rhd\");\ndefineSymbol(math, ams, rel, \"\\u2242\", \"\\\\eqsim\", true);\ndefineSymbol(math, main, rel, \"\\u22c8\", \"\\\\Join\");\ndefineSymbol(math, ams, rel, \"\\u2251\", \"\\\\Doteq\", true); // AMS Binary Operators\n\ndefineSymbol(math, ams, bin, \"\\u2214\", \"\\\\dotplus\", true);\ndefineSymbol(math, ams, bin, \"\\u2216\", \"\\\\smallsetminus\");\ndefineSymbol(math, ams, bin, \"\\u22d2\", \"\\\\Cap\", true);\ndefineSymbol(math, ams, bin, \"\\u22d3\", \"\\\\Cup\", true);\ndefineSymbol(math, ams, bin, \"\\u2a5e\", \"\\\\doublebarwedge\", true);\ndefineSymbol(math, ams, bin, \"\\u229f\", \"\\\\boxminus\", true);\ndefineSymbol(math, ams, bin, \"\\u229e\", \"\\\\boxplus\", true);\ndefineSymbol(math, ams, bin, \"\\u22c7\", \"\\\\divideontimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22c9\", \"\\\\ltimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22ca\", \"\\\\rtimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cb\", \"\\\\leftthreetimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cc\", \"\\\\rightthreetimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cf\", \"\\\\curlywedge\", true);\ndefineSymbol(math, ams, bin, \"\\u22ce\", \"\\\\curlyvee\", true);\ndefineSymbol(math, ams, bin, \"\\u229d\", \"\\\\circleddash\", true);\ndefineSymbol(math, ams, bin, \"\\u229b\", \"\\\\circledast\", true);\ndefineSymbol(math, ams, bin, \"\\u22c5\", \"\\\\centerdot\");\ndefineSymbol(math, ams, bin, \"\\u22ba\", \"\\\\intercal\", true);\ndefineSymbol(math, ams, bin, \"\\u22d2\", \"\\\\doublecap\");\ndefineSymbol(math, ams, bin, \"\\u22d3\", \"\\\\doublecup\");\ndefineSymbol(math, ams, bin, \"\\u22a0\", \"\\\\boxtimes\", true); // AMS Arrows\n// Note: unicode-math maps \\u21e2 to their own function \\rightdasharrow.\n// We'll map it to AMS function \\dashrightarrow. It produces the same atom.\n\ndefineSymbol(math, ams, rel, \"\\u21e2\", \"\\\\dashrightarrow\", true); // unicode-math maps \\u21e0 to \\leftdasharrow. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u21e0\", \"\\\\dashleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21c7\", \"\\\\leftleftarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21c6\", \"\\\\leftrightarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21da\", \"\\\\Lleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u219e\", \"\\\\twoheadleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21a2\", \"\\\\leftarrowtail\", true);\ndefineSymbol(math, ams, rel, \"\\u21ab\", \"\\\\looparrowleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21cb\", \"\\\\leftrightharpoons\", true);\ndefineSymbol(math, ams, rel, \"\\u21b6\", \"\\\\curvearrowleft\", true); // unicode-math maps \\u21ba to \\acwopencirclearrow. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u21ba\", \"\\\\circlearrowleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21b0\", \"\\\\Lsh\", true);\ndefineSymbol(math, ams, rel, \"\\u21c8\", \"\\\\upuparrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21bf\", \"\\\\upharpoonleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21c3\", \"\\\\downharpoonleft\", true);\ndefineSymbol(math, main, rel, \"\\u22b6\", \"\\\\origof\", true); // not in font\n\ndefineSymbol(math, main, rel, \"\\u22b7\", \"\\\\imageof\", true); // not in font\n\ndefineSymbol(math, ams, rel, \"\\u22b8\", \"\\\\multimap\", true);\ndefineSymbol(math, ams, rel, \"\\u21ad\", \"\\\\leftrightsquigarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21c9\", \"\\\\rightrightarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21c4\", \"\\\\rightleftarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21a0\", \"\\\\twoheadrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21a3\", \"\\\\rightarrowtail\", true);\ndefineSymbol(math, ams, rel, \"\\u21ac\", \"\\\\looparrowright\", true);\ndefineSymbol(math, ams, rel, \"\\u21b7\", \"\\\\curvearrowright\", true); // unicode-math maps \\u21bb to \\cwopencirclearrow. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u21bb\", \"\\\\circlearrowright\", true);\ndefineSymbol(math, ams, rel, \"\\u21b1\", \"\\\\Rsh\", true);\ndefineSymbol(math, ams, rel, \"\\u21ca\", \"\\\\downdownarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21be\", \"\\\\upharpoonright\", true);\ndefineSymbol(math, ams, rel, \"\\u21c2\", \"\\\\downharpoonright\", true);\ndefineSymbol(math, ams, rel, \"\\u21dd\", \"\\\\rightsquigarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21dd\", \"\\\\leadsto\");\ndefineSymbol(math, ams, rel, \"\\u21db\", \"\\\\Rrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21be\", \"\\\\restriction\");\ndefineSymbol(math, main, textord, \"\\u2018\", \"`\");\ndefineSymbol(math, main, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, main, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, main, textord, \"$\", \"\\\\textdollar\");\ndefineSymbol(math, main, textord, \"%\", \"\\\\%\");\ndefineSymbol(text, main, textord, \"%\", \"\\\\%\");\ndefineSymbol(math, main, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, main, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, main, textord, \"_\", \"\\\\textunderscore\");\ndefineSymbol(math, main, textord, \"\\u2220\", \"\\\\angle\", true);\ndefineSymbol(math, main, textord, \"\\u221e\", \"\\\\infty\", true);\ndefineSymbol(math, main, textord, \"\\u2032\", \"\\\\prime\");\ndefineSymbol(math, main, textord, \"\\u25b3\", \"\\\\triangle\");\ndefineSymbol(math, main, textord, \"\\u0393\", \"\\\\Gamma\", true);\ndefineSymbol(math, main, textord, \"\\u0394\", \"\\\\Delta\", true);\ndefineSymbol(math, main, textord, \"\\u0398\", \"\\\\Theta\", true);\ndefineSymbol(math, main, textord, \"\\u039b\", \"\\\\Lambda\", true);\ndefineSymbol(math, main, textord, \"\\u039e\", \"\\\\Xi\", true);\ndefineSymbol(math, main, textord, \"\\u03a0\", \"\\\\Pi\", true);\ndefineSymbol(math, main, textord, \"\\u03a3\", \"\\\\Sigma\", true);\ndefineSymbol(math, main, textord, \"\\u03a5\", \"\\\\Upsilon\", true);\ndefineSymbol(math, main, textord, \"\\u03a6\", \"\\\\Phi\", true);\ndefineSymbol(math, main, textord, \"\\u03a8\", \"\\\\Psi\", true);\ndefineSymbol(math, main, textord, \"\\u03a9\", \"\\\\Omega\", true);\ndefineSymbol(math, main, textord, \"A\", \"\\u0391\");\ndefineSymbol(math, main, textord, \"B\", \"\\u0392\");\ndefineSymbol(math, main, textord, \"E\", \"\\u0395\");\ndefineSymbol(math, main, textord, \"Z\", \"\\u0396\");\ndefineSymbol(math, main, textord, \"H\", \"\\u0397\");\ndefineSymbol(math, main, textord, \"I\", \"\\u0399\");\ndefineSymbol(math, main, textord, \"K\", \"\\u039A\");\ndefineSymbol(math, main, textord, \"M\", \"\\u039C\");\ndefineSymbol(math, main, textord, \"N\", \"\\u039D\");\ndefineSymbol(math, main, textord, \"O\", \"\\u039F\");\ndefineSymbol(math, main, textord, \"P\", \"\\u03A1\");\ndefineSymbol(math, main, textord, \"T\", \"\\u03A4\");\ndefineSymbol(math, main, textord, \"X\", \"\\u03A7\");\ndefineSymbol(math, main, textord, \"\\u00ac\", \"\\\\neg\", true);\ndefineSymbol(math, main, textord, \"\\u00ac\", \"\\\\lnot\");\ndefineSymbol(math, main, textord, \"\\u22a4\", \"\\\\top\");\ndefineSymbol(math, main, textord, \"\\u22a5\", \"\\\\bot\");\ndefineSymbol(math, main, textord, \"\\u2205\", \"\\\\emptyset\");\ndefineSymbol(math, ams, textord, \"\\u2205\", \"\\\\varnothing\");\ndefineSymbol(math, main, mathord, \"\\u03b1\", \"\\\\alpha\", true);\ndefineSymbol(math, main, mathord, \"\\u03b2\", \"\\\\beta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b3\", \"\\\\gamma\", true);\ndefineSymbol(math, main, mathord, \"\\u03b4\", \"\\\\delta\", true);\ndefineSymbol(math, main, mathord, \"\\u03f5\", \"\\\\epsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03b6\", \"\\\\zeta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b7\", \"\\\\eta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b8\", \"\\\\theta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b9\", \"\\\\iota\", true);\ndefineSymbol(math, main, mathord, \"\\u03ba\", \"\\\\kappa\", true);\ndefineSymbol(math, main, mathord, \"\\u03bb\", \"\\\\lambda\", true);\ndefineSymbol(math, main, mathord, \"\\u03bc\", \"\\\\mu\", true);\ndefineSymbol(math, main, mathord, \"\\u03bd\", \"\\\\nu\", true);\ndefineSymbol(math, main, mathord, \"\\u03be\", \"\\\\xi\", true);\ndefineSymbol(math, main, mathord, \"\\u03bf\", \"\\\\omicron\", true);\ndefineSymbol(math, main, mathord, \"\\u03c0\", \"\\\\pi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c1\", \"\\\\rho\", true);\ndefineSymbol(math, main, mathord, \"\\u03c3\", \"\\\\sigma\", true);\ndefineSymbol(math, main, mathord, \"\\u03c4\", \"\\\\tau\", true);\ndefineSymbol(math, main, mathord, \"\\u03c5\", \"\\\\upsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03d5\", \"\\\\phi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c7\", \"\\\\chi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c8\", \"\\\\psi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c9\", \"\\\\omega\", true);\ndefineSymbol(math, main, mathord, \"\\u03b5\", \"\\\\varepsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03d1\", \"\\\\vartheta\", true);\ndefineSymbol(math, main, mathord, \"\\u03d6\", \"\\\\varpi\", true);\ndefineSymbol(math, main, mathord, \"\\u03f1\", \"\\\\varrho\", true);\ndefineSymbol(math, main, mathord, \"\\u03c2\", \"\\\\varsigma\", true);\ndefineSymbol(math, main, mathord, \"\\u03c6\", \"\\\\varphi\", true);\ndefineSymbol(math, main, bin, \"\\u2217\", \"*\", true);\ndefineSymbol(math, main, bin, \"+\", \"+\");\ndefineSymbol(math, main, bin, \"\\u2212\", \"-\", true);\ndefineSymbol(math, main, bin, \"\\u22c5\", \"\\\\cdot\", true);\ndefineSymbol(math, main, bin, \"\\u2218\", \"\\\\circ\", true);\ndefineSymbol(math, main, bin, \"\\u00f7\", \"\\\\div\", true);\ndefineSymbol(math, main, bin, \"\\u00b1\", \"\\\\pm\", true);\ndefineSymbol(math, main, bin, \"\\u00d7\", \"\\\\times\", true);\ndefineSymbol(math, main, bin, \"\\u2229\", \"\\\\cap\", true);\ndefineSymbol(math, main, bin, \"\\u222a\", \"\\\\cup\", true);\ndefineSymbol(math, main, bin, \"\\u2216\", \"\\\\setminus\", true);\ndefineSymbol(math, main, bin, \"\\u2227\", \"\\\\land\");\ndefineSymbol(math, main, bin, \"\\u2228\", \"\\\\lor\");\ndefineSymbol(math, main, bin, \"\\u2227\", \"\\\\wedge\", true);\ndefineSymbol(math, main, bin, \"\\u2228\", \"\\\\vee\", true);\ndefineSymbol(math, main, textord, \"\\u221a\", \"\\\\surd\");\ndefineSymbol(math, main, open, \"\\u27e8\", \"\\\\langle\", true);\ndefineSymbol(math, main, open, \"\\u2223\", \"\\\\lvert\");\ndefineSymbol(math, main, open, \"\\u2225\", \"\\\\lVert\");\ndefineSymbol(math, main, close, \"?\", \"?\");\ndefineSymbol(math, main, close, \"!\", \"!\");\ndefineSymbol(math, main, close, \"\\u27e9\", \"\\\\rangle\", true);\ndefineSymbol(math, main, close, \"\\u2223\", \"\\\\rvert\");\ndefineSymbol(math, main, close, \"\\u2225\", \"\\\\rVert\");\ndefineSymbol(math, main, rel, \"=\", \"=\");\ndefineSymbol(math, main, rel, \":\", \":\");\ndefineSymbol(math, main, rel, \"\\u2248\", \"\\\\approx\", true);\ndefineSymbol(math, main, rel, \"\\u2245\", \"\\\\cong\", true);\ndefineSymbol(math, main, rel, \"\\u2265\", \"\\\\ge\");\ndefineSymbol(math, main, rel, \"\\u2265\", \"\\\\geq\", true);\ndefineSymbol(math, main, rel, \"\\u2190\", \"\\\\gets\");\ndefineSymbol(math, main, rel, \">\", \"\\\\gt\", true);\ndefineSymbol(math, main, rel, \"\\u2208\", \"\\\\in\", true);\ndefineSymbol(math, main, rel, \"\\ue020\", \"\\\\@not\");\ndefineSymbol(math, main, rel, \"\\u2282\", \"\\\\subset\", true);\ndefineSymbol(math, main, rel, \"\\u2283\", \"\\\\supset\", true);\ndefineSymbol(math, main, rel, \"\\u2286\", \"\\\\subseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2287\", \"\\\\supseteq\", true);\ndefineSymbol(math, ams, rel, \"\\u2288\", \"\\\\nsubseteq\", true);\ndefineSymbol(math, ams, rel, \"\\u2289\", \"\\\\nsupseteq\", true);\ndefineSymbol(math, main, rel, \"\\u22a8\", \"\\\\models\");\ndefineSymbol(math, main, rel, \"\\u2190\", \"\\\\leftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2264\", \"\\\\le\");\ndefineSymbol(math, main, rel, \"\\u2264\", \"\\\\leq\", true);\ndefineSymbol(math, main, rel, \"<\", \"\\\\lt\", true);\ndefineSymbol(math, main, rel, \"\\u2192\", \"\\\\rightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2192\", \"\\\\to\");\ndefineSymbol(math, ams, rel, \"\\u2271\", \"\\\\ngeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2270\", \"\\\\nleq\", true);\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\ \");\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\space\"); // Ref: LaTeX Source 2e: \\DeclareRobustCommand{\\nobreakspace}{%\n\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\nobreakspace\");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\ \");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \" \");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\space\");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\nobreakspace\");\ndefineSymbol(math, main, spacing, null, \"\\\\nobreak\");\ndefineSymbol(math, main, spacing, null, \"\\\\allowbreak\");\ndefineSymbol(math, main, punct, \",\", \",\");\ndefineSymbol(math, main, punct, \";\", \";\");\ndefineSymbol(math, ams, bin, \"\\u22bc\", \"\\\\barwedge\", true);\ndefineSymbol(math, ams, bin, \"\\u22bb\", \"\\\\veebar\", true);\ndefineSymbol(math, main, bin, \"\\u2299\", \"\\\\odot\", true);\ndefineSymbol(math, main, bin, \"\\u2295\", \"\\\\oplus\", true);\ndefineSymbol(math, main, bin, \"\\u2297\", \"\\\\otimes\", true);\ndefineSymbol(math, main, textord, \"\\u2202\", \"\\\\partial\", true);\ndefineSymbol(math, main, bin, \"\\u2298\", \"\\\\oslash\", true);\ndefineSymbol(math, ams, bin, \"\\u229a\", \"\\\\circledcirc\", true);\ndefineSymbol(math, ams, bin, \"\\u22a1\", \"\\\\boxdot\", true);\ndefineSymbol(math, main, bin, \"\\u25b3\", \"\\\\bigtriangleup\");\ndefineSymbol(math, main, bin, \"\\u25bd\", \"\\\\bigtriangledown\");\ndefineSymbol(math, main, bin, \"\\u2020\", \"\\\\dagger\");\ndefineSymbol(math, main, bin, \"\\u22c4\", \"\\\\diamond\");\ndefineSymbol(math, main, bin, \"\\u22c6\", \"\\\\star\");\ndefineSymbol(math, main, bin, \"\\u25c3\", \"\\\\triangleleft\");\ndefineSymbol(math, main, bin, \"\\u25b9\", \"\\\\triangleright\");\ndefineSymbol(math, main, open, \"{\", \"\\\\{\");\ndefineSymbol(text, main, textord, \"{\", \"\\\\{\");\ndefineSymbol(text, main, textord, \"{\", \"\\\\textbraceleft\");\ndefineSymbol(math, main, close, \"}\", \"\\\\}\");\ndefineSymbol(text, main, textord, \"}\", \"\\\\}\");\ndefineSymbol(text, main, textord, \"}\", \"\\\\textbraceright\");\ndefineSymbol(math, main, open, \"{\", \"\\\\lbrace\");\ndefineSymbol(math, main, close, \"}\", \"\\\\rbrace\");\ndefineSymbol(math, main, open, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(text, main, textord, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(math, main, close, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(text, main, textord, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(math, main, open, \"(\", \"\\\\lparen\", true);\ndefineSymbol(math, main, close, \")\", \"\\\\rparen\", true);\ndefineSymbol(text, main, textord, \"<\", \"\\\\textless\", true); // in T1 fontenc\n\ndefineSymbol(text, main, textord, \">\", \"\\\\textgreater\", true); // in T1 fontenc\n\ndefineSymbol(math, main, open, \"\\u230a\", \"\\\\lfloor\", true);\ndefineSymbol(math, main, close, \"\\u230b\", \"\\\\rfloor\", true);\ndefineSymbol(math, main, open, \"\\u2308\", \"\\\\lceil\", true);\ndefineSymbol(math, main, close, \"\\u2309\", \"\\\\rceil\", true);\ndefineSymbol(math, main, textord, \"\\\\\", \"\\\\backslash\");\ndefineSymbol(math, main, textord, \"\\u2223\", \"|\");\ndefineSymbol(math, main, textord, \"\\u2223\", \"\\\\vert\");\ndefineSymbol(text, main, textord, \"|\", \"\\\\textbar\", true); // in T1 fontenc\n\ndefineSymbol(math, main, textord, \"\\u2225\", \"\\\\|\");\ndefineSymbol(math, main, textord, \"\\u2225\", \"\\\\Vert\");\ndefineSymbol(text, main, textord, \"\\u2225\", \"\\\\textbardbl\");\ndefineSymbol(text, main, textord, \"~\", \"\\\\textasciitilde\");\ndefineSymbol(text, main, textord, \"\\\\\", \"\\\\textbackslash\");\ndefineSymbol(text, main, textord, \"^\", \"\\\\textasciicircum\");\ndefineSymbol(math, main, rel, \"\\u2191\", \"\\\\uparrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d1\", \"\\\\Uparrow\", true);\ndefineSymbol(math, main, rel, \"\\u2193\", \"\\\\downarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d3\", \"\\\\Downarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2195\", \"\\\\updownarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d5\", \"\\\\Updownarrow\", true);\ndefineSymbol(math, main, op, \"\\u2210\", \"\\\\coprod\");\ndefineSymbol(math, main, op, \"\\u22c1\", \"\\\\bigvee\");\ndefineSymbol(math, main, op, \"\\u22c0\", \"\\\\bigwedge\");\ndefineSymbol(math, main, op, \"\\u2a04\", \"\\\\biguplus\");\ndefineSymbol(math, main, op, \"\\u22c2\", \"\\\\bigcap\");\ndefineSymbol(math, main, op, \"\\u22c3\", \"\\\\bigcup\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\int\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\intop\");\ndefineSymbol(math, main, op, \"\\u222c\", \"\\\\iint\");\ndefineSymbol(math, main, op, \"\\u222d\", \"\\\\iiint\");\ndefineSymbol(math, main, op, \"\\u220f\", \"\\\\prod\");\ndefineSymbol(math, main, op, \"\\u2211\", \"\\\\sum\");\ndefineSymbol(math, main, op, \"\\u2a02\", \"\\\\bigotimes\");\ndefineSymbol(math, main, op, \"\\u2a01\", \"\\\\bigoplus\");\ndefineSymbol(math, main, op, \"\\u2a00\", \"\\\\bigodot\");\ndefineSymbol(math, main, op, \"\\u222e\", \"\\\\oint\");\ndefineSymbol(math, main, op, \"\\u222f\", \"\\\\oiint\");\ndefineSymbol(math, main, op, \"\\u2230\", \"\\\\oiiint\");\ndefineSymbol(math, main, op, \"\\u2a06\", \"\\\\bigsqcup\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\smallint\");\ndefineSymbol(text, main, inner, \"\\u2026\", \"\\\\textellipsis\");\ndefineSymbol(math, main, inner, \"\\u2026\", \"\\\\mathellipsis\");\ndefineSymbol(text, main, inner, \"\\u2026\", \"\\\\ldots\", true);\ndefineSymbol(math, main, inner, \"\\u2026\", \"\\\\ldots\", true);\ndefineSymbol(math, main, inner, \"\\u22ef\", \"\\\\@cdots\", true);\ndefineSymbol(math, main, inner, \"\\u22f1\", \"\\\\ddots\", true); // \\vdots is a macro that uses one of these two symbols (with made-up names):\n\ndefineSymbol(math, main, textord, \"\\u22ee\", \"\\\\varvdots\");\ndefineSymbol(text, main, textord, \"\\u22ee\", \"\\\\varvdots\");\ndefineSymbol(math, main, accent, \"\\u02ca\", \"\\\\acute\");\ndefineSymbol(math, main, accent, \"\\u02cb\", \"\\\\grave\");\ndefineSymbol(math, main, accent, \"\\u00a8\", \"\\\\ddot\");\ndefineSymbol(math, main, accent, \"\\u007e\", \"\\\\tilde\");\ndefineSymbol(math, main, accent, \"\\u02c9\", \"\\\\bar\");\ndefineSymbol(math, main, accent, \"\\u02d8\", \"\\\\breve\");\ndefineSymbol(math, main, accent, \"\\u02c7\", \"\\\\check\");\ndefineSymbol(math, main, accent, \"\\u005e\", \"\\\\hat\");\ndefineSymbol(math, main, accent, \"\\u20d7\", \"\\\\vec\");\ndefineSymbol(math, main, accent, \"\\u02d9\", \"\\\\dot\");\ndefineSymbol(math, main, accent, \"\\u02da\", \"\\\\mathring\"); // \\imath and \\jmath should be invariant to \\mathrm, \\mathbf, etc., so use PUA\n\ndefineSymbol(math, main, mathord, \"\\ue131\", \"\\\\@imath\");\ndefineSymbol(math, main, mathord, \"\\ue237\", \"\\\\@jmath\");\ndefineSymbol(math, main, textord, \"\\u0131\", \"\\u0131\");\ndefineSymbol(math, main, textord, \"\\u0237\", \"\\u0237\");\ndefineSymbol(text, main, textord, \"\\u0131\", \"\\\\i\", true);\ndefineSymbol(text, main, textord, \"\\u0237\", \"\\\\j\", true);\ndefineSymbol(text, main, textord, \"\\u00df\", \"\\\\ss\", true);\ndefineSymbol(text, main, textord, \"\\u00e6\", \"\\\\ae\", true);\ndefineSymbol(text, main, textord, \"\\u0153\", \"\\\\oe\", true);\ndefineSymbol(text, main, textord, \"\\u00f8\", \"\\\\o\", true);\ndefineSymbol(text, main, textord, \"\\u00c6\", \"\\\\AE\", true);\ndefineSymbol(text, main, textord, \"\\u0152\", \"\\\\OE\", true);\ndefineSymbol(text, main, textord, \"\\u00d8\", \"\\\\O\", true);\ndefineSymbol(text, main, accent, \"\\u02ca\", \"\\\\'\"); // acute\n\ndefineSymbol(text, main, accent, \"\\u02cb\", \"\\\\`\"); // grave\n\ndefineSymbol(text, main, accent, \"\\u02c6\", \"\\\\^\"); // circumflex\n\ndefineSymbol(text, main, accent, \"\\u02dc\", \"\\\\~\"); // tilde\n\ndefineSymbol(text, main, accent, \"\\u02c9\", \"\\\\=\"); // macron\n\ndefineSymbol(text, main, accent, \"\\u02d8\", \"\\\\u\"); // breve\n\ndefineSymbol(text, main, accent, \"\\u02d9\", \"\\\\.\"); // dot above\n\ndefineSymbol(text, main, accent, \"\\u00b8\", \"\\\\c\"); // cedilla\n\ndefineSymbol(text, main, accent, \"\\u02da\", \"\\\\r\"); // ring above\n\ndefineSymbol(text, main, accent, \"\\u02c7\", \"\\\\v\"); // caron\n\ndefineSymbol(text, main, accent, \"\\u00a8\", '\\\\\"'); // diaeresis\n\ndefineSymbol(text, main, accent, \"\\u02dd\", \"\\\\H\"); // double acute\n\ndefineSymbol(text, main, accent, \"\\u25ef\", \"\\\\textcircled\"); // \\bigcirc glyph\n// These ligatures are detected and created in Parser.js's `formLigatures`.\n\nvar ligatures = {\n \"--\": true,\n \"---\": true,\n \"``\": true,\n \"''\": true\n};\ndefineSymbol(text, main, textord, \"\\u2013\", \"--\", true);\ndefineSymbol(text, main, textord, \"\\u2013\", \"\\\\textendash\");\ndefineSymbol(text, main, textord, \"\\u2014\", \"---\", true);\ndefineSymbol(text, main, textord, \"\\u2014\", \"\\\\textemdash\");\ndefineSymbol(text, main, textord, \"\\u2018\", \"`\", true);\ndefineSymbol(text, main, textord, \"\\u2018\", \"\\\\textquoteleft\");\ndefineSymbol(text, main, textord, \"\\u2019\", \"'\", true);\ndefineSymbol(text, main, textord, \"\\u2019\", \"\\\\textquoteright\");\ndefineSymbol(text, main, textord, \"\\u201c\", \"``\", true);\ndefineSymbol(text, main, textord, \"\\u201c\", \"\\\\textquotedblleft\");\ndefineSymbol(text, main, textord, \"\\u201d\", \"''\", true);\ndefineSymbol(text, main, textord, \"\\u201d\", \"\\\\textquotedblright\"); // \\degree from gensymb package\n\ndefineSymbol(math, main, textord, \"\\u00b0\", \"\\\\degree\", true);\ndefineSymbol(text, main, textord, \"\\u00b0\", \"\\\\degree\"); // \\textdegree from inputenc package\n\ndefineSymbol(text, main, textord, \"\\u00b0\", \"\\\\textdegree\", true); // TODO: In LaTeX, \\pounds can generate a different character in text and math\n// mode, but among our fonts, only Main-Regular defines this character \"163\".\n\ndefineSymbol(math, main, textord, \"\\u00a3\", \"\\\\pounds\");\ndefineSymbol(math, main, textord, \"\\u00a3\", \"\\\\mathsterling\", true);\ndefineSymbol(text, main, textord, \"\\u00a3\", \"\\\\pounds\");\ndefineSymbol(text, main, textord, \"\\u00a3\", \"\\\\textsterling\", true);\ndefineSymbol(math, ams, textord, \"\\u2720\", \"\\\\maltese\");\ndefineSymbol(text, ams, textord, \"\\u2720\", \"\\\\maltese\"); // There are lots of symbols which are the same, so we add them in afterwards.\n// All of these are textords in math mode\n\nvar mathTextSymbols = \"0123456789/@.\\\"\";\n\nfor (var i = 0; i < mathTextSymbols.length; i++) {\n var ch = mathTextSymbols.charAt(i);\n defineSymbol(math, main, textord, ch, ch);\n} // All of these are textords in text mode\n\n\nvar textSymbols = \"0123456789!@*()-=+\\\";:?/.,\";\n\nfor (var _i = 0; _i < textSymbols.length; _i++) {\n var _ch = textSymbols.charAt(_i);\n\n defineSymbol(text, main, textord, _ch, _ch);\n} // All of these are textords in text mode, and mathords in math mode\n\n\nvar letters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\nfor (var _i2 = 0; _i2 < letters.length; _i2++) {\n var _ch2 = letters.charAt(_i2);\n\n defineSymbol(math, main, mathord, _ch2, _ch2);\n defineSymbol(text, main, textord, _ch2, _ch2);\n} // Blackboard bold and script letters in Unicode range\n\n\ndefineSymbol(math, ams, textord, \"C\", \"\\u2102\"); // blackboard bold\n\ndefineSymbol(text, ams, textord, \"C\", \"\\u2102\");\ndefineSymbol(math, ams, textord, \"H\", \"\\u210D\");\ndefineSymbol(text, ams, textord, \"H\", \"\\u210D\");\ndefineSymbol(math, ams, textord, \"N\", \"\\u2115\");\ndefineSymbol(text, ams, textord, \"N\", \"\\u2115\");\ndefineSymbol(math, ams, textord, \"P\", \"\\u2119\");\ndefineSymbol(text, ams, textord, \"P\", \"\\u2119\");\ndefineSymbol(math, ams, textord, \"Q\", \"\\u211A\");\ndefineSymbol(text, ams, textord, \"Q\", \"\\u211A\");\ndefineSymbol(math, ams, textord, \"R\", \"\\u211D\");\ndefineSymbol(text, ams, textord, \"R\", \"\\u211D\");\ndefineSymbol(math, ams, textord, \"Z\", \"\\u2124\");\ndefineSymbol(text, ams, textord, \"Z\", \"\\u2124\");\ndefineSymbol(math, main, mathord, \"h\", \"\\u210E\"); // italic h, Planck constant\n\ndefineSymbol(text, main, mathord, \"h\", \"\\u210E\"); // The next loop loads wide (surrogate pair) characters.\n// We support some letters in the Unicode range U+1D400 to U+1D7FF,\n// Mathematical Alphanumeric Symbols.\n// Some editors do not deal well with wide characters. So don't write the\n// string into this file. Instead, create the string from the surrogate pair.\n\nvar wideChar = \"\";\n\nfor (var _i3 = 0; _i3 < letters.length; _i3++) {\n var _ch3 = letters.charAt(_i3); // The hex numbers in the next line are a surrogate pair.\n // 0xD835 is the high surrogate for all letters in the range we support.\n // 0xDC00 is the low surrogate for bold A.\n\n\n wideChar = String.fromCharCode(0xD835, 0xDC00 + _i3); // A-Z a-z bold\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDC34 + _i3); // A-Z a-z italic\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDC68 + _i3); // A-Z a-z bold italic\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDD04 + _i3); // A-Z a-z Fraktur\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDD6C + _i3); // A-Z a-z bold Fraktur\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDDA0 + _i3); // A-Z a-z sans-serif\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDDD4 + _i3); // A-Z a-z sans bold\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDE08 + _i3); // A-Z a-z sans italic\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDE70 + _i3); // A-Z a-z monospace\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n\n if (_i3 < 26) {\n // KaTeX fonts have only capital letters for blackboard bold and script.\n // See exception for k below.\n wideChar = String.fromCharCode(0xD835, 0xDD38 + _i3); // A-Z double struck\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDC9C + _i3); // A-Z script\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n } // TODO: Add bold script when it is supported by a KaTeX font.\n\n} // \"k\" is the only double struck lower case letter in the KaTeX fonts.\n\n\nwideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck\n\ndefineSymbol(math, main, mathord, \"k\", wideChar);\ndefineSymbol(text, main, textord, \"k\", wideChar); // Next, some wide character numerals\n\nfor (var _i4 = 0; _i4 < 10; _i4++) {\n var _ch4 = _i4.toString();\n\n wideChar = String.fromCharCode(0xD835, 0xDFCE + _i4); // 0-9 bold\n\n defineSymbol(math, main, mathord, _ch4, wideChar);\n defineSymbol(text, main, textord, _ch4, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDFE2 + _i4); // 0-9 sans serif\n\n defineSymbol(math, main, mathord, _ch4, wideChar);\n defineSymbol(text, main, textord, _ch4, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDFEC + _i4); // 0-9 bold sans\n\n defineSymbol(math, main, mathord, _ch4, wideChar);\n defineSymbol(text, main, textord, _ch4, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDFF6 + _i4); // 0-9 monospace\n\n defineSymbol(math, main, mathord, _ch4, wideChar);\n defineSymbol(text, main, textord, _ch4, wideChar);\n} // We add these Latin-1 letters as symbols for backwards-compatibility,\n// but they are not actually in the font, nor are they supported by the\n// Unicode accent mechanism, so they fall back to Times font and look ugly.\n// TODO(edemaine): Fix this.\n\n\nvar extraLatin = \"\\u00d0\\u00de\\u00fe\";\n\nfor (var _i5 = 0; _i5 < extraLatin.length; _i5++) {\n var _ch5 = extraLatin.charAt(_i5);\n\n defineSymbol(math, main, mathord, _ch5, _ch5);\n defineSymbol(text, main, textord, _ch5, _ch5);\n}\n\n/**\n * This file provides support for Unicode range U+1D400 to U+1D7FF,\n * Mathematical Alphanumeric Symbols.\n *\n * Function wideCharacterFont takes a wide character as input and returns\n * the font information necessary to render it properly.\n */\n/**\n * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf\n * That document sorts characters into groups by font type, say bold or italic.\n *\n * In the arrays below, each subarray consists three elements:\n * * The CSS class of that group when in math mode.\n * * The CSS class of that group when in text mode.\n * * The font name, so that KaTeX can get font metrics.\n */\n\nvar wideLatinLetterData = [[\"mathbf\", \"textbf\", \"Main-Bold\"], // A-Z bold upright\n[\"mathbf\", \"textbf\", \"Main-Bold\"], // a-z bold upright\n[\"mathnormal\", \"textit\", \"Math-Italic\"], // A-Z italic\n[\"mathnormal\", \"textit\", \"Math-Italic\"], // a-z italic\n[\"boldsymbol\", \"boldsymbol\", \"Main-BoldItalic\"], // A-Z bold italic\n[\"boldsymbol\", \"boldsymbol\", \"Main-BoldItalic\"], // a-z bold italic\n// Map fancy A-Z letters to script, not calligraphic.\n// This aligns with unicode-math and math fonts (except Cambria Math).\n[\"mathscr\", \"textscr\", \"Script-Regular\"], // A-Z script\n[\"\", \"\", \"\"], // a-z script. No font\n[\"\", \"\", \"\"], // A-Z bold script. No font\n[\"\", \"\", \"\"], // a-z bold script. No font\n[\"mathfrak\", \"textfrak\", \"Fraktur-Regular\"], // A-Z Fraktur\n[\"mathfrak\", \"textfrak\", \"Fraktur-Regular\"], // a-z Fraktur\n[\"mathbb\", \"textbb\", \"AMS-Regular\"], // A-Z double-struck\n[\"mathbb\", \"textbb\", \"AMS-Regular\"], // k double-struck\n// Note that we are using a bold font, but font metrics for regular Fraktur.\n[\"mathboldfrak\", \"textboldfrak\", \"Fraktur-Regular\"], // A-Z bold Fraktur\n[\"mathboldfrak\", \"textboldfrak\", \"Fraktur-Regular\"], // a-z bold Fraktur\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"], // A-Z sans-serif\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"], // a-z sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"], // A-Z bold sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"], // a-z bold sans-serif\n[\"mathitsf\", \"textitsf\", \"SansSerif-Italic\"], // A-Z italic sans-serif\n[\"mathitsf\", \"textitsf\", \"SansSerif-Italic\"], // a-z italic sans-serif\n[\"\", \"\", \"\"], // A-Z bold italic sans. No font\n[\"\", \"\", \"\"], // a-z bold italic sans. No font\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"], // A-Z monospace\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"] // a-z monospace\n];\nvar wideNumeralData = [[\"mathbf\", \"textbf\", \"Main-Bold\"], // 0-9 bold\n[\"\", \"\", \"\"], // 0-9 double-struck. No KaTeX font.\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"], // 0-9 sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"], // 0-9 bold sans-serif\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"] // 0-9 monospace\n];\nvar wideCharacterFont = function wideCharacterFont(wideChar, mode) {\n // IE doesn't support codePointAt(). So work with the surrogate pair.\n var H = wideChar.charCodeAt(0); // high surrogate\n\n var L = wideChar.charCodeAt(1); // low surrogate\n\n var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000;\n var j = mode === \"math\" ? 0 : 1; // column index for CSS class.\n\n if (0x1D400 <= codePoint && codePoint < 0x1D6A4) {\n // wideLatinLetterData contains exactly 26 chars on each row.\n // So we can calculate the relevant row. No traverse necessary.\n var i = Math.floor((codePoint - 0x1D400) / 26);\n return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]];\n } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) {\n // Numerals, ten per row.\n var _i = Math.floor((codePoint - 0x1D7CE) / 10);\n\n return [wideNumeralData[_i][2], wideNumeralData[_i][j]];\n } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) {\n // dotless i or j\n return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]];\n } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) {\n // Greek letters. Not supported, yet.\n return [\"\", \"\"];\n } else {\n // We don't support any wide characters outside 1D400–1D7FF.\n throw new ParseError(\"Unsupported character: \" + wideChar);\n }\n};\n\n/* eslint no-console:0 */\n\n/**\n * Looks up the given symbol in fontMetrics, after applying any symbol\n * replacements defined in symbol.js\n */\nvar lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this.\nfontName, mode) {\n // Replace the value with its replaced value from symbol.js\n if (symbols[mode][value] && symbols[mode][value].replace) {\n value = symbols[mode][value].replace;\n }\n\n return {\n value: value,\n metrics: getCharacterMetrics(value, fontName, mode)\n };\n};\n/**\n * Makes a symbolNode after translation via the list of symbols in symbols.js.\n * Correctly pulls out metrics for the character, and optionally takes a list of\n * classes to be attached to the node.\n *\n * TODO: make argument order closer to makeSpan\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n * TODO(#953): Make `options` mandatory and always pass it in.\n */\n\n\nvar makeSymbol = function makeSymbol(value, fontName, mode, options, classes) {\n var lookup = lookupSymbol(value, fontName, mode);\n var metrics = lookup.metrics;\n value = lookup.value;\n var symbolNode;\n\n if (metrics) {\n var italic = metrics.italic;\n\n if (mode === \"text\" || options && options.font === \"mathit\") {\n italic = 0;\n }\n\n symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes);\n } else {\n // TODO(emily): Figure out a good way to only print this in development\n typeof console !== \"undefined\" && console.warn(\"No character metrics \" + (\"for '\" + value + \"' in style '\" + fontName + \"' and mode '\" + mode + \"'\"));\n symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes);\n }\n\n if (options) {\n symbolNode.maxFontSize = options.sizeMultiplier;\n\n if (options.style.isTight()) {\n symbolNode.classes.push(\"mtight\");\n }\n\n var color = options.getColor();\n\n if (color) {\n symbolNode.style.color = color;\n }\n }\n\n return symbolNode;\n};\n/**\n * Makes a symbol in Main-Regular or AMS-Regular.\n * Used for rel, bin, open, close, inner, and punct.\n */\n\n\nvar mathsym = function mathsym(value, mode, options, classes) {\n if (classes === void 0) {\n classes = [];\n }\n\n // Decide what font to render the symbol in by its entry in the symbols\n // table.\n // Have a special case for when the value = \\ because the \\ is used as a\n // textord in unsupported command errors but cannot be parsed as a regular\n // text ordinal and is therefore not present as a symbol in the symbols\n // table for text, as well as a special case for boldsymbol because it\n // can be used for bold + and -\n if (options.font === \"boldsymbol\" && lookupSymbol(value, \"Main-Bold\", mode).metrics) {\n return makeSymbol(value, \"Main-Bold\", mode, options, classes.concat([\"mathbf\"]));\n } else if (value === \"\\\\\" || symbols[mode][value].font === \"main\") {\n return makeSymbol(value, \"Main-Regular\", mode, options, classes);\n } else {\n return makeSymbol(value, \"AMS-Regular\", mode, options, classes.concat([\"amsrm\"]));\n }\n};\n/**\n * Determines which of the two font names (Main-Bold and Math-BoldItalic) and\n * corresponding style tags (mathbf or boldsymbol) to use for font \"boldsymbol\",\n * depending on the symbol. Use this function instead of fontMap for font\n * \"boldsymbol\".\n */\n\n\nvar boldsymbol = function boldsymbol(value, mode, options, classes, type) {\n if (type !== \"textord\" && lookupSymbol(value, \"Math-BoldItalic\", mode).metrics) {\n return {\n fontName: \"Math-BoldItalic\",\n fontClass: \"boldsymbol\"\n };\n } else {\n // Some glyphs do not exist in Math-BoldItalic so we need to use\n // Main-Bold instead.\n return {\n fontName: \"Main-Bold\",\n fontClass: \"mathbf\"\n };\n }\n};\n/**\n * Makes either a mathord or textord in the correct font and color.\n */\n\n\nvar makeOrd = function makeOrd(group, options, type) {\n var mode = group.mode;\n var text = group.text;\n var classes = [\"mord\"]; // Math mode or Old font (i.e. \\rm)\n\n var isFont = mode === \"math\" || mode === \"text\" && options.font;\n var fontOrFamily = isFont ? options.font : options.fontFamily;\n var wideFontName = \"\";\n var wideFontClass = \"\";\n\n if (text.charCodeAt(0) === 0xD835) {\n [wideFontName, wideFontClass] = wideCharacterFont(text, mode);\n }\n\n if (wideFontName.length > 0) {\n // surrogate pairs get special treatment\n return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass));\n } else if (fontOrFamily) {\n var fontName;\n var fontClasses;\n\n if (fontOrFamily === \"boldsymbol\") {\n var fontData = boldsymbol(text, mode, options, classes, type);\n fontName = fontData.fontName;\n fontClasses = [fontData.fontClass];\n } else if (isFont) {\n fontName = fontMap[fontOrFamily].fontName;\n fontClasses = [fontOrFamily];\n } else {\n fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape);\n fontClasses = [fontOrFamily, options.fontWeight, options.fontShape];\n }\n\n if (lookupSymbol(text, fontName, mode).metrics) {\n return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses));\n } else if (ligatures.hasOwnProperty(text) && fontName.slice(0, 10) === \"Typewriter\") {\n // Deconstruct ligatures in monospace fonts (\\texttt, \\tt).\n var parts = [];\n\n for (var i = 0; i < text.length; i++) {\n parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses)));\n }\n\n return makeFragment(parts);\n }\n } // Makes a symbol in the default font for mathords and textords.\n\n\n if (type === \"mathord\") {\n return makeSymbol(text, \"Math-Italic\", mode, options, classes.concat([\"mathnormal\"]));\n } else if (type === \"textord\") {\n var font = symbols[mode][text] && symbols[mode][text].font;\n\n if (font === \"ams\") {\n var _fontName = retrieveTextFontName(\"amsrm\", options.fontWeight, options.fontShape);\n\n return makeSymbol(text, _fontName, mode, options, classes.concat(\"amsrm\", options.fontWeight, options.fontShape));\n } else if (font === \"main\" || !font) {\n var _fontName2 = retrieveTextFontName(\"textrm\", options.fontWeight, options.fontShape);\n\n return makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape));\n } else {\n // fonts added by plugins\n var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class\n\n\n return makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape));\n }\n } else {\n throw new Error(\"unexpected type: \" + type + \" in makeOrd\");\n }\n};\n/**\n * Returns true if subsequent symbolNodes have the same classes, skew, maxFont,\n * and styles.\n */\n\n\nvar canCombine = (prev, next) => {\n if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) {\n return false;\n } // If prev and next both are just \"mbin\"s or \"mord\"s we don't combine them\n // so that the proper spacing can be preserved.\n\n\n if (prev.classes.length === 1) {\n var cls = prev.classes[0];\n\n if (cls === \"mbin\" || cls === \"mord\") {\n return false;\n }\n }\n\n for (var style in prev.style) {\n if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) {\n return false;\n }\n }\n\n for (var _style in next.style) {\n if (next.style.hasOwnProperty(_style) && prev.style[_style] !== next.style[_style]) {\n return false;\n }\n }\n\n return true;\n};\n/**\n * Combine consecutive domTree.symbolNodes into a single symbolNode.\n * Note: this function mutates the argument.\n */\n\n\nvar tryCombineChars = chars => {\n for (var i = 0; i < chars.length - 1; i++) {\n var prev = chars[i];\n var next = chars[i + 1];\n\n if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) {\n prev.text += next.text;\n prev.height = Math.max(prev.height, next.height);\n prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use\n // it to add padding to the right of the span created from\n // the combined characters.\n\n prev.italic = next.italic;\n chars.splice(i + 1, 1);\n i--;\n }\n }\n\n return chars;\n};\n/**\n * Calculate the height, depth, and maxFontSize of an element based on its\n * children.\n */\n\n\nvar sizeElementFromChildren = function sizeElementFromChildren(elem) {\n var height = 0;\n var depth = 0;\n var maxFontSize = 0;\n\n for (var i = 0; i < elem.children.length; i++) {\n var child = elem.children[i];\n\n if (child.height > height) {\n height = child.height;\n }\n\n if (child.depth > depth) {\n depth = child.depth;\n }\n\n if (child.maxFontSize > maxFontSize) {\n maxFontSize = child.maxFontSize;\n }\n }\n\n elem.height = height;\n elem.depth = depth;\n elem.maxFontSize = maxFontSize;\n};\n/**\n * Makes a span with the given list of classes, list of children, and options.\n *\n * TODO(#953): Ensure that `options` is always provided (currently some call\n * sites don't pass it) and make the type below mandatory.\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n */\n\n\nvar makeSpan$2 = function makeSpan(classes, children, options, style) {\n var span = new Span(classes, children, options, style);\n sizeElementFromChildren(span);\n return span;\n}; // SVG one is simpler -- doesn't require height, depth, max-font setting.\n// This is also a separate method for typesafety.\n\n\nvar makeSvgSpan = (classes, children, options, style) => new Span(classes, children, options, style);\n\nvar makeLineSpan = function makeLineSpan(className, options, thickness) {\n var line = makeSpan$2([className], [], options);\n line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n line.style.borderBottomWidth = makeEm(line.height);\n line.maxFontSize = 1.0;\n return line;\n};\n/**\n * Makes an anchor with the given href, list of classes, list of children,\n * and options.\n */\n\n\nvar makeAnchor = function makeAnchor(href, classes, children, options) {\n var anchor = new Anchor(href, classes, children, options);\n sizeElementFromChildren(anchor);\n return anchor;\n};\n/**\n * Makes a document fragment with the given list of children.\n */\n\n\nvar makeFragment = function makeFragment(children) {\n var fragment = new DocumentFragment(children);\n sizeElementFromChildren(fragment);\n return fragment;\n};\n/**\n * Wraps group in a span if it's a document fragment, allowing to apply classes\n * and styles\n */\n\n\nvar wrapFragment = function wrapFragment(group, options) {\n if (group instanceof DocumentFragment) {\n return makeSpan$2([], [group], options);\n }\n\n return group;\n}; // These are exact object types to catch typos in the names of the optional fields.\n\n\n// Computes the updated `children` list and the overall depth.\n//\n// This helper function for makeVList makes it easier to enforce type safety by\n// allowing early exits (returns) in the logic.\nvar getVListChildrenAndDepth = function getVListChildrenAndDepth(params) {\n if (params.positionType === \"individualShift\") {\n var oldChildren = params.children;\n var children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be\n // shifted to the correct specified shift\n\n var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth;\n\n var currPos = _depth;\n\n for (var i = 1; i < oldChildren.length; i++) {\n var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth;\n var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth);\n currPos = currPos + diff;\n children.push({\n type: \"kern\",\n size\n });\n children.push(oldChildren[i]);\n }\n\n return {\n children,\n depth: _depth\n };\n }\n\n var depth;\n\n if (params.positionType === \"top\") {\n // We always start at the bottom, so calculate the bottom by adding up\n // all the sizes\n var bottom = params.positionData;\n\n for (var _i = 0; _i < params.children.length; _i++) {\n var child = params.children[_i];\n bottom -= child.type === \"kern\" ? child.size : child.elem.height + child.elem.depth;\n }\n\n depth = bottom;\n } else if (params.positionType === \"bottom\") {\n depth = -params.positionData;\n } else {\n var firstChild = params.children[0];\n\n if (firstChild.type !== \"elem\") {\n throw new Error('First child must have type \"elem\".');\n }\n\n if (params.positionType === \"shift\") {\n depth = -firstChild.elem.depth - params.positionData;\n } else if (params.positionType === \"firstBaseline\") {\n depth = -firstChild.elem.depth;\n } else {\n throw new Error(\"Invalid positionType \" + params.positionType + \".\");\n }\n }\n\n return {\n children: params.children,\n depth\n };\n};\n/**\n * Makes a vertical list by stacking elements and kerns on top of each other.\n * Allows for many different ways of specifying the positioning method.\n *\n * See VListParam documentation above.\n */\n\n\nvar makeVList = function makeVList(params, options) {\n var {\n children,\n depth\n } = getVListChildrenAndDepth(params); // Create a strut that is taller than any list item. The strut is added to\n // each item, where it will determine the item's baseline. Since it has\n // `overflow:hidden`, the strut's top edge will sit on the item's line box's\n // top edge and the strut's bottom edge will sit on the item's baseline,\n // with no additional line-height spacing. This allows the item baseline to\n // be positioned precisely without worrying about font ascent and\n // line-height.\n\n var pstrutSize = 0;\n\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n\n if (child.type === \"elem\") {\n var elem = child.elem;\n pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height);\n }\n }\n\n pstrutSize += 2;\n var pstrut = makeSpan$2([\"pstrut\"], []);\n pstrut.style.height = makeEm(pstrutSize); // Create a new list of actual children at the correct offsets\n\n var realChildren = [];\n var minPos = depth;\n var maxPos = depth;\n var currPos = depth;\n\n for (var _i2 = 0; _i2 < children.length; _i2++) {\n var _child = children[_i2];\n\n if (_child.type === \"kern\") {\n currPos += _child.size;\n } else {\n var _elem = _child.elem;\n var classes = _child.wrapperClasses || [];\n var style = _child.wrapperStyle || {};\n var childWrap = makeSpan$2(classes, [pstrut, _elem], undefined, style);\n childWrap.style.top = makeEm(-pstrutSize - currPos - _elem.depth);\n\n if (_child.marginLeft) {\n childWrap.style.marginLeft = _child.marginLeft;\n }\n\n if (_child.marginRight) {\n childWrap.style.marginRight = _child.marginRight;\n }\n\n realChildren.push(childWrap);\n currPos += _elem.height + _elem.depth;\n }\n\n minPos = Math.min(minPos, currPos);\n maxPos = Math.max(maxPos, currPos);\n } // The vlist contents go in a table-cell with `vertical-align:bottom`.\n // This cell's bottom edge will determine the containing table's baseline\n // without overly expanding the containing line-box.\n\n\n var vlist = makeSpan$2([\"vlist\"], realChildren);\n vlist.style.height = makeEm(maxPos); // A second row is used if necessary to represent the vlist's depth.\n\n var rows;\n\n if (minPos < 0) {\n // We will define depth in an empty span with display: table-cell.\n // It should render with the height that we define. But Chrome, in\n // contenteditable mode only, treats that span as if it contains some\n // text content. And that min-height over-rides our desired height.\n // So we put another empty span inside the depth strut span.\n var emptySpan = makeSpan$2([], []);\n var depthStrut = makeSpan$2([\"vlist\"], [emptySpan]);\n depthStrut.style.height = makeEm(-minPos); // Safari wants the first row to have inline content; otherwise it\n // puts the bottom of the *second* row on the baseline.\n\n var topStrut = makeSpan$2([\"vlist-s\"], [new SymbolNode(\"\\u200b\")]);\n rows = [makeSpan$2([\"vlist-r\"], [vlist, topStrut]), makeSpan$2([\"vlist-r\"], [depthStrut])];\n } else {\n rows = [makeSpan$2([\"vlist-r\"], [vlist])];\n }\n\n var vtable = makeSpan$2([\"vlist-t\"], rows);\n\n if (rows.length === 2) {\n vtable.classes.push(\"vlist-t2\");\n }\n\n vtable.height = maxPos;\n vtable.depth = -minPos;\n return vtable;\n}; // Glue is a concept from TeX which is a flexible space between elements in\n// either a vertical or horizontal list. In KaTeX, at least for now, it's\n// static space between elements in a horizontal layout.\n\n\nvar makeGlue = (measurement, options) => {\n // Make an empty span for the space\n var rule = makeSpan$2([\"mspace\"], [], options);\n var size = calculateSize(measurement, options);\n rule.style.marginRight = makeEm(size);\n return rule;\n}; // Takes font options, and returns the appropriate fontLookup name\n\n\nvar retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) {\n var baseFontName = \"\";\n\n switch (fontFamily) {\n case \"amsrm\":\n baseFontName = \"AMS\";\n break;\n\n case \"textrm\":\n baseFontName = \"Main\";\n break;\n\n case \"textsf\":\n baseFontName = \"SansSerif\";\n break;\n\n case \"texttt\":\n baseFontName = \"Typewriter\";\n break;\n\n default:\n baseFontName = fontFamily;\n // use fonts added by a plugin\n }\n\n var fontStylesName;\n\n if (fontWeight === \"textbf\" && fontShape === \"textit\") {\n fontStylesName = \"BoldItalic\";\n } else if (fontWeight === \"textbf\") {\n fontStylesName = \"Bold\";\n } else if (fontWeight === \"textit\") {\n fontStylesName = \"Italic\";\n } else {\n fontStylesName = \"Regular\";\n }\n\n return baseFontName + \"-\" + fontStylesName;\n};\n/**\n * Maps TeX font commands to objects containing:\n * - variant: string used for \"mathvariant\" attribute in buildMathML.js\n * - fontName: the \"style\" parameter to fontMetrics.getCharacterMetrics\n */\n// A map between tex font commands an MathML mathvariant attribute values\n\n\nvar fontMap = {\n // styles\n \"mathbf\": {\n variant: \"bold\",\n fontName: \"Main-Bold\"\n },\n \"mathrm\": {\n variant: \"normal\",\n fontName: \"Main-Regular\"\n },\n \"textit\": {\n variant: \"italic\",\n fontName: \"Main-Italic\"\n },\n \"mathit\": {\n variant: \"italic\",\n fontName: \"Main-Italic\"\n },\n \"mathnormal\": {\n variant: \"italic\",\n fontName: \"Math-Italic\"\n },\n \"mathsfit\": {\n variant: \"sans-serif-italic\",\n fontName: \"SansSerif-Italic\"\n },\n // \"boldsymbol\" is missing because they require the use of multiple fonts:\n // Math-BoldItalic and Main-Bold. This is handled by a special case in\n // makeOrd which ends up calling boldsymbol.\n // families\n \"mathbb\": {\n variant: \"double-struck\",\n fontName: \"AMS-Regular\"\n },\n \"mathcal\": {\n variant: \"script\",\n fontName: \"Caligraphic-Regular\"\n },\n \"mathfrak\": {\n variant: \"fraktur\",\n fontName: \"Fraktur-Regular\"\n },\n \"mathscr\": {\n variant: \"script\",\n fontName: \"Script-Regular\"\n },\n \"mathsf\": {\n variant: \"sans-serif\",\n fontName: \"SansSerif-Regular\"\n },\n \"mathtt\": {\n variant: \"monospace\",\n fontName: \"Typewriter-Regular\"\n }\n};\nvar svgData = {\n // path, width, height\n vec: [\"vec\", 0.471, 0.714],\n // values from the font glyph\n oiintSize1: [\"oiintSize1\", 0.957, 0.499],\n // oval to overlay the integrand\n oiintSize2: [\"oiintSize2\", 1.472, 0.659],\n oiiintSize1: [\"oiiintSize1\", 1.304, 0.499],\n oiiintSize2: [\"oiiintSize2\", 1.98, 0.659]\n};\n\nvar staticSvg = function staticSvg(value, options) {\n // Create a span with inline SVG for the element.\n var [pathName, width, height] = svgData[value];\n var path = new PathNode(pathName);\n var svgNode = new SvgNode([path], {\n \"width\": makeEm(width),\n \"height\": makeEm(height),\n // Override CSS rule `.katex svg { width: 100% }`\n \"style\": \"width:\" + makeEm(width),\n \"viewBox\": \"0 0 \" + 1000 * width + \" \" + 1000 * height,\n \"preserveAspectRatio\": \"xMinYMin\"\n });\n var span = makeSvgSpan([\"overlay\"], [svgNode], options);\n span.height = height;\n span.style.height = makeEm(height);\n span.style.width = makeEm(width);\n return span;\n};\n\nvar buildCommon = {\n fontMap,\n makeSymbol,\n mathsym,\n makeSpan: makeSpan$2,\n makeSvgSpan,\n makeLineSpan,\n makeAnchor,\n makeFragment,\n wrapFragment,\n makeVList,\n makeOrd,\n makeGlue,\n staticSvg,\n svgData,\n tryCombineChars\n};\n\n/**\n * Describes spaces between different classes of atoms.\n */\nvar thinspace = {\n number: 3,\n unit: \"mu\"\n};\nvar mediumspace = {\n number: 4,\n unit: \"mu\"\n};\nvar thickspace = {\n number: 5,\n unit: \"mu\"\n}; // Making the type below exact with all optional fields doesn't work due to\n// - https://github.com/facebook/flow/issues/4582\n// - https://github.com/facebook/flow/issues/5688\n// However, since *all* fields are optional, $Shape<> works as suggested in 5688\n// above.\n\n// Spacing relationships for display and text styles\nvar spacings = {\n mord: {\n mop: thinspace,\n mbin: mediumspace,\n mrel: thickspace,\n minner: thinspace\n },\n mop: {\n mord: thinspace,\n mop: thinspace,\n mrel: thickspace,\n minner: thinspace\n },\n mbin: {\n mord: mediumspace,\n mop: mediumspace,\n mopen: mediumspace,\n minner: mediumspace\n },\n mrel: {\n mord: thickspace,\n mop: thickspace,\n mopen: thickspace,\n minner: thickspace\n },\n mopen: {},\n mclose: {\n mop: thinspace,\n mbin: mediumspace,\n mrel: thickspace,\n minner: thinspace\n },\n mpunct: {\n mord: thinspace,\n mop: thinspace,\n mrel: thickspace,\n mopen: thinspace,\n mclose: thinspace,\n mpunct: thinspace,\n minner: thinspace\n },\n minner: {\n mord: thinspace,\n mop: thinspace,\n mbin: mediumspace,\n mrel: thickspace,\n mopen: thinspace,\n mpunct: thinspace,\n minner: thinspace\n }\n}; // Spacing relationships for script and scriptscript styles\n\nvar tightSpacings = {\n mord: {\n mop: thinspace\n },\n mop: {\n mord: thinspace,\n mop: thinspace\n },\n mbin: {},\n mrel: {},\n mopen: {},\n mclose: {\n mop: thinspace\n },\n mpunct: {},\n minner: {\n mop: thinspace\n }\n};\n\n/** Context provided to function handlers for error messages. */\n// Note: reverse the order of the return type union will cause a flow error.\n// See https://github.com/facebook/flow/issues/3663.\n// More general version of `HtmlBuilder` for nodes (e.g. \\sum, accent types)\n// whose presence impacts super/subscripting. In this case, ParseNode<\"supsub\">\n// delegates its HTML building to the HtmlBuilder corresponding to these nodes.\n\n/**\n * Final function spec for use at parse time.\n * This is almost identical to `FunctionPropSpec`, except it\n * 1. includes the function handler, and\n * 2. requires all arguments except argTypes.\n * It is generated by `defineFunction()` below.\n */\n\n/**\n * All registered functions.\n * `functions.js` just exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary.\n */\nvar _functions = {};\n/**\n * All HTML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */\n\nvar _htmlGroupBuilders = {};\n/**\n * All MathML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */\n\nvar _mathmlGroupBuilders = {};\nfunction defineFunction(_ref) {\n var {\n type,\n names,\n props,\n handler,\n htmlBuilder,\n mathmlBuilder\n } = _ref;\n // Set default values of functions\n var data = {\n type,\n numArgs: props.numArgs,\n argTypes: props.argTypes,\n allowedInArgument: !!props.allowedInArgument,\n allowedInText: !!props.allowedInText,\n allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath,\n numOptionalArgs: props.numOptionalArgs || 0,\n infix: !!props.infix,\n primitive: !!props.primitive,\n handler: handler\n };\n\n for (var i = 0; i < names.length; ++i) {\n _functions[names[i]] = data;\n }\n\n if (type) {\n if (htmlBuilder) {\n _htmlGroupBuilders[type] = htmlBuilder;\n }\n\n if (mathmlBuilder) {\n _mathmlGroupBuilders[type] = mathmlBuilder;\n }\n }\n}\n/**\n * Use this to register only the HTML and MathML builders for a function (e.g.\n * if the function's ParseNode is generated in Parser.js rather than via a\n * stand-alone handler provided to `defineFunction`).\n */\n\nfunction defineFunctionBuilders(_ref2) {\n var {\n type,\n htmlBuilder,\n mathmlBuilder\n } = _ref2;\n defineFunction({\n type,\n names: [],\n props: {\n numArgs: 0\n },\n\n handler() {\n throw new Error('Should never be called.');\n },\n\n htmlBuilder,\n mathmlBuilder\n });\n}\nvar normalizeArgument = function normalizeArgument(arg) {\n return arg.type === \"ordgroup\" && arg.body.length === 1 ? arg.body[0] : arg;\n}; // Since the corresponding buildHTML/buildMathML function expects a\n// list of elements, we normalize for different kinds of arguments\n\nvar ordargument = function ordargument(arg) {\n return arg.type === \"ordgroup\" ? arg.body : [arg];\n};\n\n/**\n * This file does the main work of building a domTree structure from a parse\n * tree. The entry point is the `buildHTML` function, which takes a parse tree.\n * Then, the buildExpression, buildGroup, and various groupBuilders functions\n * are called, to produce a final HTML tree.\n */\nvar makeSpan$1 = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`)\n// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6,\n// and the text before Rule 19.\n\nvar binLeftCanceller = [\"leftmost\", \"mbin\", \"mopen\", \"mrel\", \"mop\", \"mpunct\"];\nvar binRightCanceller = [\"rightmost\", \"mrel\", \"mclose\", \"mpunct\"];\nvar styleMap$1 = {\n \"display\": Style$1.DISPLAY,\n \"text\": Style$1.TEXT,\n \"script\": Style$1.SCRIPT,\n \"scriptscript\": Style$1.SCRIPTSCRIPT\n};\nvar DomEnum = {\n mord: \"mord\",\n mop: \"mop\",\n mbin: \"mbin\",\n mrel: \"mrel\",\n mopen: \"mopen\",\n mclose: \"mclose\",\n mpunct: \"mpunct\",\n minner: \"minner\"\n};\n\n/**\n * Take a list of nodes, build them in order, and return a list of the built\n * nodes. documentFragments are flattened into their contents, so the\n * returned list contains no fragments. `isRealGroup` is true if `expression`\n * is a real group (no atoms will be added on either side), as opposed to\n * a partial group (e.g. one created by \\color). `surrounding` is an array\n * consisting type of nodes that will be added to the left and right.\n */\nvar buildExpression$1 = function buildExpression(expression, options, isRealGroup, surrounding) {\n if (surrounding === void 0) {\n surrounding = [null, null];\n }\n\n // Parse expressions into `groups`.\n var groups = [];\n\n for (var i = 0; i < expression.length; i++) {\n var output = buildGroup$1(expression[i], options);\n\n if (output instanceof DocumentFragment) {\n var children = output.children;\n groups.push(...children);\n } else {\n groups.push(output);\n }\n } // Combine consecutive domTree.symbolNodes into a single symbolNode.\n\n\n buildCommon.tryCombineChars(groups); // If `expression` is a partial group, let the parent handle spacings\n // to avoid processing groups multiple times.\n\n if (!isRealGroup) {\n return groups;\n }\n\n var glueOptions = options;\n\n if (expression.length === 1) {\n var node = expression[0];\n\n if (node.type === \"sizing\") {\n glueOptions = options.havingSize(node.size);\n } else if (node.type === \"styling\") {\n glueOptions = options.havingStyle(styleMap$1[node.style]);\n }\n } // Dummy spans for determining spacings between surrounding atoms.\n // If `expression` has no atoms on the left or right, class \"leftmost\"\n // or \"rightmost\", respectively, is used to indicate it.\n\n\n var dummyPrev = makeSpan$1([surrounding[0] || \"leftmost\"], [], options);\n var dummyNext = makeSpan$1([surrounding[1] || \"rightmost\"], [], options); // TODO: These code assumes that a node's math class is the first element\n // of its `classes` array. A later cleanup should ensure this, for\n // instance by changing the signature of `makeSpan`.\n // Before determining what spaces to insert, perform bin cancellation.\n // Binary operators change to ordinary symbols in some contexts.\n\n var isRoot = isRealGroup === \"root\";\n traverseNonSpaceNodes(groups, (node, prev) => {\n var prevType = prev.classes[0];\n var type = node.classes[0];\n\n if (prevType === \"mbin\" && binRightCanceller.includes(type)) {\n prev.classes[0] = \"mord\";\n } else if (type === \"mbin\" && binLeftCanceller.includes(prevType)) {\n node.classes[0] = \"mord\";\n }\n }, {\n node: dummyPrev\n }, dummyNext, isRoot);\n traverseNonSpaceNodes(groups, (node, prev) => {\n var prevType = getTypeOfDomTree(prev);\n var type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style.\n\n var space = prevType && type ? node.hasClass(\"mtight\") ? tightSpacings[prevType][type] : spacings[prevType][type] : null;\n\n if (space) {\n // Insert glue (spacing) after the `prev`.\n return buildCommon.makeGlue(space, glueOptions);\n }\n }, {\n node: dummyPrev\n }, dummyNext, isRoot);\n return groups;\n}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and\n// previous node as arguments, optionally returning a node to insert after the\n// previous node. `prev` is an object with the previous node and `insertAfter`\n// function to insert after it. `next` is a node that will be added to the right.\n// Used for bin cancellation and inserting spacings.\n\nvar traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next, isRoot) {\n if (next) {\n // temporarily append the right node, if exists\n nodes.push(next);\n }\n\n var i = 0;\n\n for (; i < nodes.length; i++) {\n var node = nodes[i];\n var partialGroup = checkPartialGroup(node);\n\n if (partialGroup) {\n // Recursive DFS\n // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array\n traverseNonSpaceNodes(partialGroup.children, callback, prev, null, isRoot);\n continue;\n } // Ignore explicit spaces (e.g., \\;, \\,) when determining what implicit\n // spacing should go between atoms of different classes\n\n\n var nonspace = !node.hasClass(\"mspace\");\n\n if (nonspace) {\n var result = callback(node, prev.node);\n\n if (result) {\n if (prev.insertAfter) {\n prev.insertAfter(result);\n } else {\n // insert at front\n nodes.unshift(result);\n i++;\n }\n }\n }\n\n if (nonspace) {\n prev.node = node;\n } else if (isRoot && node.hasClass(\"newline\")) {\n prev.node = makeSpan$1([\"leftmost\"]); // treat like beginning of line\n }\n\n prev.insertAfter = (index => n => {\n nodes.splice(index + 1, 0, n);\n i++;\n })(i);\n }\n\n if (next) {\n nodes.pop();\n }\n}; // Check if given node is a partial group, i.e., does not affect spacing around.\n\n\nvar checkPartialGroup = function checkPartialGroup(node) {\n if (node instanceof DocumentFragment || node instanceof Anchor || node instanceof Span && node.hasClass(\"enclosing\")) {\n return node;\n }\n\n return null;\n}; // Return the outermost node of a domTree.\n\n\nvar getOutermostNode = function getOutermostNode(node, side) {\n var partialGroup = checkPartialGroup(node);\n\n if (partialGroup) {\n var children = partialGroup.children;\n\n if (children.length) {\n if (side === \"right\") {\n return getOutermostNode(children[children.length - 1], \"right\");\n } else if (side === \"left\") {\n return getOutermostNode(children[0], \"left\");\n }\n }\n }\n\n return node;\n}; // Return math atom class (mclass) of a domTree.\n// If `side` is given, it will get the type of the outermost node at given side.\n\n\nvar getTypeOfDomTree = function getTypeOfDomTree(node, side) {\n if (!node) {\n return null;\n }\n\n if (side) {\n node = getOutermostNode(node, side);\n } // This makes a lot of assumptions as to where the type of atom\n // appears. We should do a better job of enforcing this.\n\n\n return DomEnum[node.classes[0]] || null;\n};\nvar makeNullDelimiter = function makeNullDelimiter(options, classes) {\n var moreClasses = [\"nulldelimiter\"].concat(options.baseSizingClasses());\n return makeSpan$1(classes.concat(moreClasses));\n};\n/**\n * buildGroup is the function that takes a group and calls the correct groupType\n * function for it. It also handles the interaction of size and style changes\n * between parents and children.\n */\n\nvar buildGroup$1 = function buildGroup(group, options, baseOptions) {\n if (!group) {\n return makeSpan$1();\n }\n\n if (_htmlGroupBuilders[group.type]) {\n // Call the groupBuilders function\n // $FlowFixMe\n var groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account\n // for that size difference.\n\n if (baseOptions && options.size !== baseOptions.size) {\n groupNode = makeSpan$1(options.sizingClasses(baseOptions), [groupNode], options);\n var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;\n groupNode.height *= multiplier;\n groupNode.depth *= multiplier;\n }\n\n return groupNode;\n } else {\n throw new ParseError(\"Got group of unknown type: '\" + group.type + \"'\");\n }\n};\n/**\n * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`)\n * into an unbreakable HTML node of class .base, with proper struts to\n * guarantee correct vertical extent. `buildHTML` calls this repeatedly to\n * make up the entire expression as a sequence of unbreakable units.\n */\n\nfunction buildHTMLUnbreakable(children, options) {\n // Compute height and depth of this chunk.\n var body = makeSpan$1([\"base\"], children, options); // Add strut, which ensures that the top of the HTML element falls at\n // the height of the expression, and the bottom of the HTML element\n // falls at the depth of the expression.\n\n var strut = makeSpan$1([\"strut\"]);\n strut.style.height = makeEm(body.height + body.depth);\n\n if (body.depth) {\n strut.style.verticalAlign = makeEm(-body.depth);\n }\n\n body.children.unshift(strut);\n return body;\n}\n/**\n * Take an entire parse tree, and build it into an appropriate set of HTML\n * nodes.\n */\n\n\nfunction buildHTML(tree, options) {\n // Strip off outer tag wrapper for processing below.\n var tag = null;\n\n if (tree.length === 1 && tree[0].type === \"tag\") {\n tag = tree[0].tag;\n tree = tree[0].body;\n } // Build the expression contained in the tree\n\n\n var expression = buildExpression$1(tree, options, \"root\");\n var eqnNum;\n\n if (expression.length === 2 && expression[1].hasClass(\"tag\")) {\n // An environment with automatic equation numbers, e.g. {gather}.\n eqnNum = expression.pop();\n }\n\n var children = []; // Create one base node for each chunk between potential line breaks.\n // The TeXBook [p.173] says \"A formula will be broken only after a\n // relation symbol like $=$ or $<$ or $\\rightarrow$, or after a binary\n // operation symbol like $+$ or $-$ or $\\times$, where the relation or\n // binary operation is on the ``outer level'' of the formula (i.e., not\n // enclosed in {...} and not part of an \\over construction).\"\n\n var parts = [];\n\n for (var i = 0; i < expression.length; i++) {\n parts.push(expression[i]);\n\n if (expression[i].hasClass(\"mbin\") || expression[i].hasClass(\"mrel\") || expression[i].hasClass(\"allowbreak\")) {\n // Put any post-operator glue on same line as operator.\n // Watch for \\nobreak along the way, and stop at \\newline.\n var nobreak = false;\n\n while (i < expression.length - 1 && expression[i + 1].hasClass(\"mspace\") && !expression[i + 1].hasClass(\"newline\")) {\n i++;\n parts.push(expression[i]);\n\n if (expression[i].hasClass(\"nobreak\")) {\n nobreak = true;\n }\n } // Don't allow break if \\nobreak among the post-operator glue.\n\n\n if (!nobreak) {\n children.push(buildHTMLUnbreakable(parts, options));\n parts = [];\n }\n } else if (expression[i].hasClass(\"newline\")) {\n // Write the line except the newline\n parts.pop();\n\n if (parts.length > 0) {\n children.push(buildHTMLUnbreakable(parts, options));\n parts = [];\n } // Put the newline at the top level\n\n\n children.push(expression[i]);\n }\n }\n\n if (parts.length > 0) {\n children.push(buildHTMLUnbreakable(parts, options));\n } // Now, if there was a tag, build it too and append it as a final child.\n\n\n var tagChild;\n\n if (tag) {\n tagChild = buildHTMLUnbreakable(buildExpression$1(tag, options, true));\n tagChild.classes = [\"tag\"];\n children.push(tagChild);\n } else if (eqnNum) {\n children.push(eqnNum);\n }\n\n var htmlNode = makeSpan$1([\"katex-html\"], children);\n htmlNode.setAttribute(\"aria-hidden\", \"true\"); // Adjust the strut of the tag to be the maximum height of all children\n // (the height of the enclosing htmlNode) for proper vertical alignment.\n\n if (tagChild) {\n var strut = tagChild.children[0];\n strut.style.height = makeEm(htmlNode.height + htmlNode.depth);\n\n if (htmlNode.depth) {\n strut.style.verticalAlign = makeEm(-htmlNode.depth);\n }\n }\n\n return htmlNode;\n}\n\n/**\n * These objects store data about MathML nodes. This is the MathML equivalent\n * of the types in domTree.js. Since MathML handles its own rendering, and\n * since we're mainly using MathML to improve accessibility, we don't manage\n * any of the styling state that the plain DOM nodes do.\n *\n * The `toNode` and `toMarkup` functions work similarly to how they do in\n * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.\n */\nfunction newDocumentFragment(children) {\n return new DocumentFragment(children);\n}\n/**\n * This node represents a general purpose MathML node of any type. The\n * constructor requires the type of node to create (for example, `\"mo\"` or\n * `\"mspace\"`, corresponding to `<mo>` and `<mspace>` tags).\n */\n\nclass MathNode {\n constructor(type, children, classes) {\n this.type = void 0;\n this.attributes = void 0;\n this.children = void 0;\n this.classes = void 0;\n this.type = type;\n this.attributes = {};\n this.children = children || [];\n this.classes = classes || [];\n }\n /**\n * Sets an attribute on a MathML node. MathML depends on attributes to convey a\n * semantic content, so this is used heavily.\n */\n\n\n setAttribute(name, value) {\n this.attributes[name] = value;\n }\n /**\n * Gets an attribute on a MathML node.\n */\n\n\n getAttribute(name) {\n return this.attributes[name];\n }\n /**\n * Converts the math node into a MathML-namespaced DOM element.\n */\n\n\n toNode() {\n var node = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", this.type);\n\n for (var attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n }\n\n if (this.classes.length > 0) {\n node.className = createClass(this.classes);\n }\n\n for (var i = 0; i < this.children.length; i++) {\n // Combine multiple TextNodes into one TextNode, to prevent\n // screen readers from reading each as a separate word [#3995]\n if (this.children[i] instanceof TextNode && this.children[i + 1] instanceof TextNode) {\n var text = this.children[i].toText() + this.children[++i].toText();\n\n while (this.children[i + 1] instanceof TextNode) {\n text += this.children[++i].toText();\n }\n\n node.appendChild(new TextNode(text).toNode());\n } else {\n node.appendChild(this.children[i].toNode());\n }\n }\n\n return node;\n }\n /**\n * Converts the math node into an HTML markup string.\n */\n\n\n toMarkup() {\n var markup = \"<\" + this.type; // Add the attributes\n\n for (var attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n markup += \" \" + attr + \"=\\\"\";\n markup += utils.escape(this.attributes[attr]);\n markup += \"\\\"\";\n }\n }\n\n if (this.classes.length > 0) {\n markup += \" class =\\\"\" + utils.escape(createClass(this.classes)) + \"\\\"\";\n }\n\n markup += \">\";\n\n for (var i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n markup += \"</\" + this.type + \">\";\n return markup;\n }\n /**\n * Converts the math node into a string, similar to innerText, but escaped.\n */\n\n\n toText() {\n return this.children.map(child => child.toText()).join(\"\");\n }\n\n}\n/**\n * This node represents a piece of text.\n */\n\nclass TextNode {\n constructor(text) {\n this.text = void 0;\n this.text = text;\n }\n /**\n * Converts the text node into a DOM text node.\n */\n\n\n toNode() {\n return document.createTextNode(this.text);\n }\n /**\n * Converts the text node into escaped HTML markup\n * (representing the text itself).\n */\n\n\n toMarkup() {\n return utils.escape(this.toText());\n }\n /**\n * Converts the text node into a string\n * (representing the text itself).\n */\n\n\n toText() {\n return this.text;\n }\n\n}\n/**\n * This node represents a space, but may render as <mspace.../> or as text,\n * depending on the width.\n */\n\nclass SpaceNode {\n /**\n * Create a Space node with width given in CSS ems.\n */\n constructor(width) {\n this.width = void 0;\n this.character = void 0;\n this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html\n // for a table of space-like characters. We use Unicode\n // representations instead of &LongNames; as it's not clear how to\n // make the latter via document.createTextNode.\n\n if (width >= 0.05555 && width <= 0.05556) {\n this.character = \"\\u200a\"; //  \n } else if (width >= 0.1666 && width <= 0.1667) {\n this.character = \"\\u2009\"; //  \n } else if (width >= 0.2222 && width <= 0.2223) {\n this.character = \"\\u2005\"; //  \n } else if (width >= 0.2777 && width <= 0.2778) {\n this.character = \"\\u2005\\u200a\"; //   \n } else if (width >= -0.05556 && width <= -0.05555) {\n this.character = \"\\u200a\\u2063\"; // ​\n } else if (width >= -0.1667 && width <= -0.1666) {\n this.character = \"\\u2009\\u2063\"; // ​\n } else if (width >= -0.2223 && width <= -0.2222) {\n this.character = \"\\u205f\\u2063\"; // ​\n } else if (width >= -0.2778 && width <= -0.2777) {\n this.character = \"\\u2005\\u2063\"; // ​\n } else {\n this.character = null;\n }\n }\n /**\n * Converts the math node into a MathML-namespaced DOM element.\n */\n\n\n toNode() {\n if (this.character) {\n return document.createTextNode(this.character);\n } else {\n var node = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"mspace\");\n node.setAttribute(\"width\", makeEm(this.width));\n return node;\n }\n }\n /**\n * Converts the math node into an HTML markup string.\n */\n\n\n toMarkup() {\n if (this.character) {\n return \"<mtext>\" + this.character + \"</mtext>\";\n } else {\n return \"<mspace width=\\\"\" + makeEm(this.width) + \"\\\"/>\";\n }\n }\n /**\n * Converts the math node into a string, similar to innerText.\n */\n\n\n toText() {\n if (this.character) {\n return this.character;\n } else {\n return \" \";\n }\n }\n\n}\n\nvar mathMLTree = {\n MathNode,\n TextNode,\n SpaceNode,\n newDocumentFragment\n};\n\n/**\n * This file converts a parse tree into a corresponding MathML tree. The main\n * entry point is the `buildMathML` function, which takes a parse tree from the\n * parser.\n */\n\n/**\n * Takes a symbol and converts it into a MathML text node after performing\n * optional replacement from symbols.js.\n */\nvar makeText = function makeText(text, mode, options) {\n if (symbols[mode][text] && symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.slice(4, 6) === \"tt\" || options.font && options.font.slice(4, 6) === \"tt\"))) {\n text = symbols[mode][text].replace;\n }\n\n return new mathMLTree.TextNode(text);\n};\n/**\n * Wrap the given array of nodes in an <mrow> node if needed, i.e.,\n * unless the array has length 1. Always returns a single node.\n */\n\nvar makeRow = function makeRow(body) {\n if (body.length === 1) {\n return body[0];\n } else {\n return new mathMLTree.MathNode(\"mrow\", body);\n }\n};\n/**\n * Returns the math variant as a string or null if none is required.\n */\n\nvar getVariant = function getVariant(group, options) {\n // Handle \\text... font specifiers as best we can.\n // MathML has a limited list of allowable mathvariant specifiers; see\n // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt\n if (options.fontFamily === \"texttt\") {\n return \"monospace\";\n } else if (options.fontFamily === \"textsf\") {\n if (options.fontShape === \"textit\" && options.fontWeight === \"textbf\") {\n return \"sans-serif-bold-italic\";\n } else if (options.fontShape === \"textit\") {\n return \"sans-serif-italic\";\n } else if (options.fontWeight === \"textbf\") {\n return \"bold-sans-serif\";\n } else {\n return \"sans-serif\";\n }\n } else if (options.fontShape === \"textit\" && options.fontWeight === \"textbf\") {\n return \"bold-italic\";\n } else if (options.fontShape === \"textit\") {\n return \"italic\";\n } else if (options.fontWeight === \"textbf\") {\n return \"bold\";\n }\n\n var font = options.font;\n\n if (!font || font === \"mathnormal\") {\n return null;\n }\n\n var mode = group.mode;\n\n if (font === \"mathit\") {\n return \"italic\";\n } else if (font === \"boldsymbol\") {\n return group.type === \"textord\" ? \"bold\" : \"bold-italic\";\n } else if (font === \"mathbf\") {\n return \"bold\";\n } else if (font === \"mathbb\") {\n return \"double-struck\";\n } else if (font === \"mathsfit\") {\n return \"sans-serif-italic\";\n } else if (font === \"mathfrak\") {\n return \"fraktur\";\n } else if (font === \"mathscr\" || font === \"mathcal\") {\n // MathML makes no distinction between script and calligraphic\n return \"script\";\n } else if (font === \"mathsf\") {\n return \"sans-serif\";\n } else if (font === \"mathtt\") {\n return \"monospace\";\n }\n\n var text = group.text;\n\n if ([\"\\\\imath\", \"\\\\jmath\"].includes(text)) {\n return null;\n }\n\n if (symbols[mode][text] && symbols[mode][text].replace) {\n text = symbols[mode][text].replace;\n }\n\n var fontName = buildCommon.fontMap[font].fontName;\n\n if (getCharacterMetrics(text, fontName, mode)) {\n return buildCommon.fontMap[font].variant;\n }\n\n return null;\n};\n/**\n * Check for <mi>.</mi> which is how a dot renders in MathML,\n * or <mo separator=\"true\" lspace=\"0em\" rspace=\"0em\">,</mo>\n * which is how a braced comma {,} renders in MathML\n */\n\nfunction isNumberPunctuation(group) {\n if (!group) {\n return false;\n }\n\n if (group.type === 'mi' && group.children.length === 1) {\n var child = group.children[0];\n return child instanceof TextNode && child.text === '.';\n } else if (group.type === 'mo' && group.children.length === 1 && group.getAttribute('separator') === 'true' && group.getAttribute('lspace') === '0em' && group.getAttribute('rspace') === '0em') {\n var _child = group.children[0];\n return _child instanceof TextNode && _child.text === ',';\n } else {\n return false;\n }\n}\n/**\n * Takes a list of nodes, builds them, and returns a list of the generated\n * MathML nodes. Also combine consecutive <mtext> outputs into a single\n * <mtext> tag.\n */\n\n\nvar buildExpression = function buildExpression(expression, options, isOrdgroup) {\n if (expression.length === 1) {\n var group = buildGroup(expression[0], options);\n\n if (isOrdgroup && group instanceof MathNode && group.type === \"mo\") {\n // When TeX writers want to suppress spacing on an operator,\n // they often put the operator by itself inside braces.\n group.setAttribute(\"lspace\", \"0em\");\n group.setAttribute(\"rspace\", \"0em\");\n }\n\n return [group];\n }\n\n var groups = [];\n var lastGroup;\n\n for (var i = 0; i < expression.length; i++) {\n var _group = buildGroup(expression[i], options);\n\n if (_group instanceof MathNode && lastGroup instanceof MathNode) {\n // Concatenate adjacent <mtext>s\n if (_group.type === 'mtext' && lastGroup.type === 'mtext' && _group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) {\n lastGroup.children.push(..._group.children);\n continue; // Concatenate adjacent <mn>s\n } else if (_group.type === 'mn' && lastGroup.type === 'mn') {\n lastGroup.children.push(..._group.children);\n continue; // Concatenate <mn>...</mn> followed by <mi>.</mi>\n } else if (isNumberPunctuation(_group) && lastGroup.type === 'mn') {\n lastGroup.children.push(..._group.children);\n continue; // Concatenate <mi>.</mi> followed by <mn>...</mn>\n } else if (_group.type === 'mn' && isNumberPunctuation(lastGroup)) {\n _group.children = [...lastGroup.children, ..._group.children];\n groups.pop(); // Put preceding <mn>...</mn> or <mi>.</mi> inside base of\n // <msup><mn>...base...</mn>...exponent...</msup> (or <msub>)\n } else if ((_group.type === 'msup' || _group.type === 'msub') && _group.children.length >= 1 && (lastGroup.type === 'mn' || isNumberPunctuation(lastGroup))) {\n var base = _group.children[0];\n\n if (base instanceof MathNode && base.type === 'mn') {\n base.children = [...lastGroup.children, ...base.children];\n groups.pop();\n } // \\not\n\n } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) {\n var lastChild = lastGroup.children[0];\n\n if (lastChild instanceof TextNode && lastChild.text === '\\u0338' && (_group.type === 'mo' || _group.type === 'mi' || _group.type === 'mn')) {\n var child = _group.children[0];\n\n if (child instanceof TextNode && child.text.length > 0) {\n // Overlay with combining character long solidus\n child.text = child.text.slice(0, 1) + \"\\u0338\" + child.text.slice(1);\n groups.pop();\n }\n }\n }\n }\n\n groups.push(_group);\n lastGroup = _group;\n }\n\n return groups;\n};\n/**\n * Equivalent to buildExpression, but wraps the elements in an <mrow>\n * if there's more than one. Returns a single node instead of an array.\n */\n\nvar buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) {\n return makeRow(buildExpression(expression, options, isOrdgroup));\n};\n/**\n * Takes a group from the parser and calls the appropriate groupBuilders function\n * on it to produce a MathML node.\n */\n\nvar buildGroup = function buildGroup(group, options) {\n if (!group) {\n return new mathMLTree.MathNode(\"mrow\");\n }\n\n if (_mathmlGroupBuilders[group.type]) {\n // Call the groupBuilders function\n // $FlowFixMe\n var result = _mathmlGroupBuilders[group.type](group, options); // $FlowFixMe\n\n return result;\n } else {\n throw new ParseError(\"Got group of unknown type: '\" + group.type + \"'\");\n }\n};\n/**\n * Takes a full parse tree and settings and builds a MathML representation of\n * it. In particular, we put the elements from building the parse tree into a\n * <semantics> tag so we can also include that TeX source as an annotation.\n *\n * Note that we actually return a domTree element with a `<math>` inside it so\n * we can do appropriate styling.\n */\n\nfunction buildMathML(tree, texExpression, options, isDisplayMode, forMathmlOnly) {\n var expression = buildExpression(tree, options); // TODO: Make a pass thru the MathML similar to buildHTML.traverseNonSpaceNodes\n // and add spacing nodes. This is necessary only adjacent to math operators\n // like \\sin or \\lim or to subsup elements that contain math operators.\n // MathML takes care of the other spacing issues.\n // Wrap up the expression in an mrow so it is presented in the semantics\n // tag correctly, unless it's a single <mrow> or <mtable>.\n\n var wrapper;\n\n if (expression.length === 1 && expression[0] instanceof MathNode && [\"mrow\", \"mtable\"].includes(expression[0].type)) {\n wrapper = expression[0];\n } else {\n wrapper = new mathMLTree.MathNode(\"mrow\", expression);\n } // Build a TeX annotation of the source\n\n\n var annotation = new mathMLTree.MathNode(\"annotation\", [new mathMLTree.TextNode(texExpression)]);\n annotation.setAttribute(\"encoding\", \"application/x-tex\");\n var semantics = new mathMLTree.MathNode(\"semantics\", [wrapper, annotation]);\n var math = new mathMLTree.MathNode(\"math\", [semantics]);\n math.setAttribute(\"xmlns\", \"http://www.w3.org/1998/Math/MathML\");\n\n if (isDisplayMode) {\n math.setAttribute(\"display\", \"block\");\n } // You can't style <math> nodes, so we wrap the node in a span.\n // NOTE: The span class is not typed to have <math> nodes as children, and\n // we don't want to make the children type more generic since the children\n // of span are expected to have more fields in `buildHtml` contexts.\n\n\n var wrapperClass = forMathmlOnly ? \"katex\" : \"katex-mathml\"; // $FlowFixMe\n\n return buildCommon.makeSpan([wrapperClass], [math]);\n}\n\nvar optionsFromSettings = function optionsFromSettings(settings) {\n return new Options({\n style: settings.displayMode ? Style$1.DISPLAY : Style$1.TEXT,\n maxSize: settings.maxSize,\n minRuleThickness: settings.minRuleThickness\n });\n};\n\nvar displayWrap = function displayWrap(node, settings) {\n if (settings.displayMode) {\n var classes = [\"katex-display\"];\n\n if (settings.leqno) {\n classes.push(\"leqno\");\n }\n\n if (settings.fleqn) {\n classes.push(\"fleqn\");\n }\n\n node = buildCommon.makeSpan(classes, [node]);\n }\n\n return node;\n};\n\nvar buildTree = function buildTree(tree, expression, settings) {\n var options = optionsFromSettings(settings);\n var katexNode;\n\n if (settings.output === \"mathml\") {\n return buildMathML(tree, expression, options, settings.displayMode, true);\n } else if (settings.output === \"html\") {\n var htmlNode = buildHTML(tree, options);\n katexNode = buildCommon.makeSpan([\"katex\"], [htmlNode]);\n } else {\n var mathMLNode = buildMathML(tree, expression, options, settings.displayMode, false);\n\n var _htmlNode = buildHTML(tree, options);\n\n katexNode = buildCommon.makeSpan([\"katex\"], [mathMLNode, _htmlNode]);\n }\n\n return displayWrap(katexNode, settings);\n};\nvar buildHTMLTree = function buildHTMLTree(tree, expression, settings) {\n var options = optionsFromSettings(settings);\n var htmlNode = buildHTML(tree, options);\n var katexNode = buildCommon.makeSpan([\"katex\"], [htmlNode]);\n return displayWrap(katexNode, settings);\n};\n\n/**\n * This file provides support to buildMathML.js and buildHTML.js\n * for stretchy wide elements rendered from SVG files\n * and other CSS trickery.\n */\nvar stretchyCodePoint = {\n widehat: \"^\",\n widecheck: \"ˇ\",\n widetilde: \"~\",\n utilde: \"~\",\n overleftarrow: \"\\u2190\",\n underleftarrow: \"\\u2190\",\n xleftarrow: \"\\u2190\",\n overrightarrow: \"\\u2192\",\n underrightarrow: \"\\u2192\",\n xrightarrow: \"\\u2192\",\n underbrace: \"\\u23df\",\n overbrace: \"\\u23de\",\n overgroup: \"\\u23e0\",\n undergroup: \"\\u23e1\",\n overleftrightarrow: \"\\u2194\",\n underleftrightarrow: \"\\u2194\",\n xleftrightarrow: \"\\u2194\",\n Overrightarrow: \"\\u21d2\",\n xRightarrow: \"\\u21d2\",\n overleftharpoon: \"\\u21bc\",\n xleftharpoonup: \"\\u21bc\",\n overrightharpoon: \"\\u21c0\",\n xrightharpoonup: \"\\u21c0\",\n xLeftarrow: \"\\u21d0\",\n xLeftrightarrow: \"\\u21d4\",\n xhookleftarrow: \"\\u21a9\",\n xhookrightarrow: \"\\u21aa\",\n xmapsto: \"\\u21a6\",\n xrightharpoondown: \"\\u21c1\",\n xleftharpoondown: \"\\u21bd\",\n xrightleftharpoons: \"\\u21cc\",\n xleftrightharpoons: \"\\u21cb\",\n xtwoheadleftarrow: \"\\u219e\",\n xtwoheadrightarrow: \"\\u21a0\",\n xlongequal: \"=\",\n xtofrom: \"\\u21c4\",\n xrightleftarrows: \"\\u21c4\",\n xrightequilibrium: \"\\u21cc\",\n // Not a perfect match.\n xleftequilibrium: \"\\u21cb\",\n // None better available.\n \"\\\\cdrightarrow\": \"\\u2192\",\n \"\\\\cdleftarrow\": \"\\u2190\",\n \"\\\\cdlongequal\": \"=\"\n};\n\nvar mathMLnode = function mathMLnode(label) {\n var node = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(stretchyCodePoint[label.replace(/^\\\\/, '')])]);\n node.setAttribute(\"stretchy\", \"true\");\n return node;\n}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts.\n// Copyright (c) 2009-2010, Design Science, Inc. (<www.mathjax.org>)\n// Copyright (c) 2014-2017 Khan Academy (<www.khanacademy.org>)\n// Licensed under the SIL Open Font License, Version 1.1.\n// See \\nhttp://scripts.sil.org/OFL\n// Very Long SVGs\n// Many of the KaTeX stretchy wide elements use a long SVG image and an\n// overflow: hidden tactic to achieve a stretchy image while avoiding\n// distortion of arrowheads or brace corners.\n// The SVG typically contains a very long (400 em) arrow.\n// The SVG is in a container span that has overflow: hidden, so the span\n// acts like a window that exposes only part of the SVG.\n// The SVG always has a longer, thinner aspect ratio than the container span.\n// After the SVG fills 100% of the height of the container span,\n// there is a long arrow shaft left over. That left-over shaft is not shown.\n// Instead, it is sliced off because the span's CSS has overflow: hidden.\n// Thus, the reader sees an arrow that matches the subject matter width\n// without distortion.\n// Some functions, such as \\cancel, need to vary their aspect ratio. These\n// functions do not get the overflow SVG treatment.\n// Second Brush Stroke\n// Low resolution monitors struggle to display images in fine detail.\n// So browsers apply anti-aliasing. A long straight arrow shaft therefore\n// will sometimes appear as if it has a blurred edge.\n// To mitigate this, these SVG files contain a second \"brush-stroke\" on the\n// arrow shafts. That is, a second long thin rectangular SVG path has been\n// written directly on top of each arrow shaft. This reinforcement causes\n// some of the screen pixels to display as black instead of the anti-aliased\n// gray pixel that a single path would generate. So we get arrow shafts\n// whose edges appear to be sharper.\n// In the katexImagesData object just below, the dimensions all\n// correspond to path geometry inside the relevant SVG.\n// For example, \\overrightarrow uses the same arrowhead as glyph U+2192\n// from the KaTeX Main font. The scaling factor is 1000.\n// That is, inside the font, that arrowhead is 522 units tall, which\n// corresponds to 0.522 em inside the document.\n\n\nvar katexImagesData = {\n // path(s), minWidth, height, align\n overrightarrow: [[\"rightarrow\"], 0.888, 522, \"xMaxYMin\"],\n overleftarrow: [[\"leftarrow\"], 0.888, 522, \"xMinYMin\"],\n underrightarrow: [[\"rightarrow\"], 0.888, 522, \"xMaxYMin\"],\n underleftarrow: [[\"leftarrow\"], 0.888, 522, \"xMinYMin\"],\n xrightarrow: [[\"rightarrow\"], 1.469, 522, \"xMaxYMin\"],\n \"\\\\cdrightarrow\": [[\"rightarrow\"], 3.0, 522, \"xMaxYMin\"],\n // CD minwwidth2.5pc\n xleftarrow: [[\"leftarrow\"], 1.469, 522, \"xMinYMin\"],\n \"\\\\cdleftarrow\": [[\"leftarrow\"], 3.0, 522, \"xMinYMin\"],\n Overrightarrow: [[\"doublerightarrow\"], 0.888, 560, \"xMaxYMin\"],\n xRightarrow: [[\"doublerightarrow\"], 1.526, 560, \"xMaxYMin\"],\n xLeftarrow: [[\"doubleleftarrow\"], 1.526, 560, \"xMinYMin\"],\n overleftharpoon: [[\"leftharpoon\"], 0.888, 522, \"xMinYMin\"],\n xleftharpoonup: [[\"leftharpoon\"], 0.888, 522, \"xMinYMin\"],\n xleftharpoondown: [[\"leftharpoondown\"], 0.888, 522, \"xMinYMin\"],\n overrightharpoon: [[\"rightharpoon\"], 0.888, 522, \"xMaxYMin\"],\n xrightharpoonup: [[\"rightharpoon\"], 0.888, 522, \"xMaxYMin\"],\n xrightharpoondown: [[\"rightharpoondown\"], 0.888, 522, \"xMaxYMin\"],\n xlongequal: [[\"longequal\"], 0.888, 334, \"xMinYMin\"],\n \"\\\\cdlongequal\": [[\"longequal\"], 3.0, 334, \"xMinYMin\"],\n xtwoheadleftarrow: [[\"twoheadleftarrow\"], 0.888, 334, \"xMinYMin\"],\n xtwoheadrightarrow: [[\"twoheadrightarrow\"], 0.888, 334, \"xMaxYMin\"],\n overleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 0.888, 522],\n overbrace: [[\"leftbrace\", \"midbrace\", \"rightbrace\"], 1.6, 548],\n underbrace: [[\"leftbraceunder\", \"midbraceunder\", \"rightbraceunder\"], 1.6, 548],\n underleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 0.888, 522],\n xleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 1.75, 522],\n xLeftrightarrow: [[\"doubleleftarrow\", \"doublerightarrow\"], 1.75, 560],\n xrightleftharpoons: [[\"leftharpoondownplus\", \"rightharpoonplus\"], 1.75, 716],\n xleftrightharpoons: [[\"leftharpoonplus\", \"rightharpoondownplus\"], 1.75, 716],\n xhookleftarrow: [[\"leftarrow\", \"righthook\"], 1.08, 522],\n xhookrightarrow: [[\"lefthook\", \"rightarrow\"], 1.08, 522],\n overlinesegment: [[\"leftlinesegment\", \"rightlinesegment\"], 0.888, 522],\n underlinesegment: [[\"leftlinesegment\", \"rightlinesegment\"], 0.888, 522],\n overgroup: [[\"leftgroup\", \"rightgroup\"], 0.888, 342],\n undergroup: [[\"leftgroupunder\", \"rightgroupunder\"], 0.888, 342],\n xmapsto: [[\"leftmapsto\", \"rightarrow\"], 1.5, 522],\n xtofrom: [[\"leftToFrom\", \"rightToFrom\"], 1.75, 528],\n // The next three arrows are from the mhchem package.\n // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the\n // document as \\xrightarrow or \\xrightleftharpoons. Those have\n // min-length = 1.75em, so we set min-length on these next three to match.\n xrightleftarrows: [[\"baraboveleftarrow\", \"rightarrowabovebar\"], 1.75, 901],\n xrightequilibrium: [[\"baraboveshortleftharpoon\", \"rightharpoonaboveshortbar\"], 1.75, 716],\n xleftequilibrium: [[\"shortbaraboveleftharpoon\", \"shortrightharpoonabovebar\"], 1.75, 716]\n};\n\nvar groupLength = function groupLength(arg) {\n if (arg.type === \"ordgroup\") {\n return arg.body.length;\n } else {\n return 1;\n }\n};\n\nvar svgSpan = function svgSpan(group, options) {\n // Create a span with inline SVG for the element.\n function buildSvgSpan_() {\n var viewBoxWidth = 400000; // default\n\n var label = group.label.slice(1);\n\n if ([\"widehat\", \"widecheck\", \"widetilde\", \"utilde\"].includes(label)) {\n // Each type in the `if` statement corresponds to one of the ParseNode\n // types below. This narrowing is required to access `grp.base`.\n // $FlowFixMe\n var grp = group; // There are four SVG images available for each function.\n // Choose a taller image when there are more characters.\n\n var numChars = groupLength(grp.base);\n var viewBoxHeight;\n var pathName;\n\n var _height;\n\n if (numChars > 5) {\n if (label === \"widehat\" || label === \"widecheck\") {\n viewBoxHeight = 420;\n viewBoxWidth = 2364;\n _height = 0.42;\n pathName = label + \"4\";\n } else {\n viewBoxHeight = 312;\n viewBoxWidth = 2340;\n _height = 0.34;\n pathName = \"tilde4\";\n }\n } else {\n var imgIndex = [1, 1, 2, 2, 3, 3][numChars];\n\n if (label === \"widehat\" || label === \"widecheck\") {\n viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex];\n viewBoxHeight = [0, 239, 300, 360, 420][imgIndex];\n _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex];\n pathName = label + imgIndex;\n } else {\n viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex];\n viewBoxHeight = [0, 260, 286, 306, 312][imgIndex];\n _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex];\n pathName = \"tilde\" + imgIndex;\n }\n }\n\n var path = new PathNode(pathName);\n var svgNode = new SvgNode([path], {\n \"width\": \"100%\",\n \"height\": makeEm(_height),\n \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + viewBoxHeight,\n \"preserveAspectRatio\": \"none\"\n });\n return {\n span: buildCommon.makeSvgSpan([], [svgNode], options),\n minWidth: 0,\n height: _height\n };\n } else {\n var spans = [];\n var data = katexImagesData[label];\n var [paths, _minWidth, _viewBoxHeight] = data;\n\n var _height2 = _viewBoxHeight / 1000;\n\n var numSvgChildren = paths.length;\n var widthClasses;\n var aligns;\n\n if (numSvgChildren === 1) {\n // $FlowFixMe: All these cases must be of the 4-tuple type.\n var align1 = data[3];\n widthClasses = [\"hide-tail\"];\n aligns = [align1];\n } else if (numSvgChildren === 2) {\n widthClasses = [\"halfarrow-left\", \"halfarrow-right\"];\n aligns = [\"xMinYMin\", \"xMaxYMin\"];\n } else if (numSvgChildren === 3) {\n widthClasses = [\"brace-left\", \"brace-center\", \"brace-right\"];\n aligns = [\"xMinYMin\", \"xMidYMin\", \"xMaxYMin\"];\n } else {\n throw new Error(\"Correct katexImagesData or update code here to support\\n \" + numSvgChildren + \" children.\");\n }\n\n for (var i = 0; i < numSvgChildren; i++) {\n var _path = new PathNode(paths[i]);\n\n var _svgNode = new SvgNode([_path], {\n \"width\": \"400em\",\n \"height\": makeEm(_height2),\n \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + _viewBoxHeight,\n \"preserveAspectRatio\": aligns[i] + \" slice\"\n });\n\n var _span = buildCommon.makeSvgSpan([widthClasses[i]], [_svgNode], options);\n\n if (numSvgChildren === 1) {\n return {\n span: _span,\n minWidth: _minWidth,\n height: _height2\n };\n } else {\n _span.style.height = makeEm(_height2);\n spans.push(_span);\n }\n }\n\n return {\n span: buildCommon.makeSpan([\"stretchy\"], spans, options),\n minWidth: _minWidth,\n height: _height2\n };\n }\n } // buildSvgSpan_()\n\n\n var {\n span,\n minWidth,\n height\n } = buildSvgSpan_(); // Note that we are returning span.depth = 0.\n // Any adjustments relative to the baseline must be done in buildHTML.\n\n span.height = height;\n span.style.height = makeEm(height);\n\n if (minWidth > 0) {\n span.style.minWidth = makeEm(minWidth);\n }\n\n return span;\n};\n\nvar encloseSpan = function encloseSpan(inner, label, topPad, bottomPad, options) {\n // Return an image span for \\cancel, \\bcancel, \\xcancel, \\fbox, or \\angl\n var img;\n var totalHeight = inner.height + inner.depth + topPad + bottomPad;\n\n if (/fbox|color|angl/.test(label)) {\n img = buildCommon.makeSpan([\"stretchy\", label], [], options);\n\n if (label === \"fbox\") {\n var color = options.color && options.getColor();\n\n if (color) {\n img.style.borderColor = color;\n }\n }\n } else {\n // \\cancel, \\bcancel, or \\xcancel\n // Since \\cancel's SVG is inline and it omits the viewBox attribute,\n // its stroke-width will not vary with span area.\n var lines = [];\n\n if (/^[bx]cancel$/.test(label)) {\n lines.push(new LineNode({\n \"x1\": \"0\",\n \"y1\": \"0\",\n \"x2\": \"100%\",\n \"y2\": \"100%\",\n \"stroke-width\": \"0.046em\"\n }));\n }\n\n if (/^x?cancel$/.test(label)) {\n lines.push(new LineNode({\n \"x1\": \"0\",\n \"y1\": \"100%\",\n \"x2\": \"100%\",\n \"y2\": \"0\",\n \"stroke-width\": \"0.046em\"\n }));\n }\n\n var svgNode = new SvgNode(lines, {\n \"width\": \"100%\",\n \"height\": makeEm(totalHeight)\n });\n img = buildCommon.makeSvgSpan([], [svgNode], options);\n }\n\n img.height = totalHeight;\n img.style.height = makeEm(totalHeight);\n return img;\n};\n\nvar stretchy = {\n encloseSpan,\n mathMLnode,\n svgSpan\n};\n\n/**\n * Asserts that the node is of the given type and returns it with stricter\n * typing. Throws if the node's type does not match.\n */\nfunction assertNodeType(node, type) {\n if (!node || node.type !== type) {\n throw new Error(\"Expected node of type \" + type + \", but got \" + (node ? \"node of type \" + node.type : String(node)));\n } // $FlowFixMe, >=0.125\n\n\n return node;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */\n\nfunction assertSymbolNodeType(node) {\n var typedNode = checkSymbolNodeType(node);\n\n if (!typedNode) {\n throw new Error(\"Expected node of symbol group type, but got \" + (node ? \"node of type \" + node.type : String(node)));\n }\n\n return typedNode;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */\n\nfunction checkSymbolNodeType(node) {\n if (node && (node.type === \"atom\" || NON_ATOMS.hasOwnProperty(node.type))) {\n // $FlowFixMe\n return node;\n }\n\n return null;\n}\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only \"accent\", but\n// also \"supsub\" since an accent can affect super/subscripting.\nvar htmlBuilder$a = (grp, options) => {\n // Accents are handled in the TeXbook pg. 443, rule 12.\n var base;\n var group;\n var supSubGroup;\n\n if (grp && grp.type === \"supsub\") {\n // If our base is a character box, and we have superscripts and\n // subscripts, the supsub will defer to us. In particular, we want\n // to attach the superscripts and subscripts to the inner body (so\n // that the position of the superscripts and subscripts won't be\n // affected by the height of the accent). We accomplish this by\n // sticking the base of the accent into the base of the supsub, and\n // rendering that, while keeping track of where the accent is.\n // The real accent group is the base of the supsub group\n group = assertNodeType(grp.base, \"accent\"); // The character box is the base of the accent group\n\n base = group.base; // Stick the character box into the base of the supsub group\n\n grp.base = base; // Rerender the supsub group with its new base, and store that\n // result.\n\n supSubGroup = assertSpan(buildGroup$1(grp, options)); // reset original base\n\n grp.base = group;\n } else {\n group = assertNodeType(grp, \"accent\");\n base = group.base;\n } // Build the base group\n\n\n var body = buildGroup$1(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character?\n\n var mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line \"If the\n // nucleus is not a single character, let s = 0; otherwise set s to the\n // kern amount for the nucleus followed by the \\skewchar of its font.\"\n // Note that our skew metrics are just the kern between each character\n // and the skewchar.\n\n var skew = 0;\n\n if (mustShift) {\n // If the base is a character box, then we want the skew of the\n // innermost character. To do that, we find the innermost character:\n var baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it\n\n var baseGroup = buildGroup$1(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol.\n\n skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we\n // removed with getBaseElem might contain things like \\color which\n // we can't get rid of.\n // TODO(emily): Find a better way to get the skew\n }\n\n var accentBelow = group.label === \"\\\\c\"; // calculate the amount of space between the body and the accent\n\n var clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options.fontMetrics().xHeight); // Build the accent\n\n var accentBody;\n\n if (!group.isStretchy) {\n var accent;\n var width;\n\n if (group.label === \"\\\\vec\") {\n // Before version 0.9, \\vec used the combining font glyph U+20D7.\n // But browsers, especially Safari, are not consistent in how they\n // render combining characters when not preceded by a character.\n // So now we use an SVG.\n // If Safari reforms, we should consider reverting to the glyph.\n accent = buildCommon.staticSvg(\"vec\", options);\n width = buildCommon.svgData.vec[1];\n } else {\n accent = buildCommon.makeOrd({\n mode: group.mode,\n text: group.label\n }, options, \"textord\");\n accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to\n // shift the accent over to a place we don't want.\n\n accent.italic = 0;\n width = accent.width;\n\n if (accentBelow) {\n clearance += accent.depth;\n }\n }\n\n accentBody = buildCommon.makeSpan([\"accent-body\"], [accent]); // \"Full\" accents expand the width of the resulting symbol to be\n // at least the width of the accent, and overlap directly onto the\n // character without any vertical offset.\n\n var accentFull = group.label === \"\\\\textcircled\";\n\n if (accentFull) {\n accentBody.classes.push('accent-full');\n clearance = body.height;\n } // Shift the accent over by the skew.\n\n\n var left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }`\n // so that the accent doesn't contribute to the bounding box.\n // We need to shift the character by its width (effectively half\n // its width) to compensate.\n\n if (!accentFull) {\n left -= width / 2;\n }\n\n accentBody.style.left = makeEm(left); // \\textcircled uses the \\bigcirc glyph, so it needs some\n // vertical adjustment to match LaTeX.\n\n if (group.label === \"\\\\textcircled\") {\n accentBody.style.top = \".2em\";\n }\n\n accentBody = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: body\n }, {\n type: \"kern\",\n size: -clearance\n }, {\n type: \"elem\",\n elem: accentBody\n }]\n }, options);\n } else {\n accentBody = stretchy.svgSpan(group, options);\n accentBody = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: body\n }, {\n type: \"elem\",\n elem: accentBody,\n wrapperClasses: [\"svg-align\"],\n wrapperStyle: skew > 0 ? {\n width: \"calc(100% - \" + makeEm(2 * skew) + \")\",\n marginLeft: makeEm(2 * skew)\n } : undefined\n }]\n }, options);\n }\n\n var accentWrap = buildCommon.makeSpan([\"mord\", \"accent\"], [accentBody], options);\n\n if (supSubGroup) {\n // Here, we replace the \"base\" child of the supsub with our newly\n // generated accent.\n supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the\n // accent, we manually recalculate height.\n\n supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not.\n\n supSubGroup.classes[0] = \"mord\";\n return supSubGroup;\n } else {\n return accentWrap;\n }\n};\n\nvar mathmlBuilder$9 = (group, options) => {\n var accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode(\"mo\", [makeText(group.label, group.mode)]);\n var node = new mathMLTree.MathNode(\"mover\", [buildGroup(group.base, options), accentNode]);\n node.setAttribute(\"accent\", \"true\");\n return node;\n};\n\nvar NON_STRETCHY_ACCENT_REGEX = new RegExp([\"\\\\acute\", \"\\\\grave\", \"\\\\ddot\", \"\\\\tilde\", \"\\\\bar\", \"\\\\breve\", \"\\\\check\", \"\\\\hat\", \"\\\\vec\", \"\\\\dot\", \"\\\\mathring\"].map(accent => \"\\\\\" + accent).join(\"|\")); // Accents\n\ndefineFunction({\n type: \"accent\",\n names: [\"\\\\acute\", \"\\\\grave\", \"\\\\ddot\", \"\\\\tilde\", \"\\\\bar\", \"\\\\breve\", \"\\\\check\", \"\\\\hat\", \"\\\\vec\", \"\\\\dot\", \"\\\\mathring\", \"\\\\widecheck\", \"\\\\widehat\", \"\\\\widetilde\", \"\\\\overrightarrow\", \"\\\\overleftarrow\", \"\\\\Overrightarrow\", \"\\\\overleftrightarrow\", \"\\\\overgroup\", \"\\\\overlinesegment\", \"\\\\overleftharpoon\", \"\\\\overrightharpoon\"],\n props: {\n numArgs: 1\n },\n handler: (context, args) => {\n var base = normalizeArgument(args[0]);\n var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName);\n var isShifty = !isStretchy || context.funcName === \"\\\\widehat\" || context.funcName === \"\\\\widetilde\" || context.funcName === \"\\\\widecheck\";\n return {\n type: \"accent\",\n mode: context.parser.mode,\n label: context.funcName,\n isStretchy: isStretchy,\n isShifty: isShifty,\n base: base\n };\n },\n htmlBuilder: htmlBuilder$a,\n mathmlBuilder: mathmlBuilder$9\n}); // Text-mode accents\n\ndefineFunction({\n type: \"accent\",\n names: [\"\\\\'\", \"\\\\`\", \"\\\\^\", \"\\\\~\", \"\\\\=\", \"\\\\u\", \"\\\\.\", '\\\\\"', \"\\\\c\", \"\\\\r\", \"\\\\H\", \"\\\\v\", \"\\\\textcircled\"],\n props: {\n numArgs: 1,\n allowedInText: true,\n allowedInMath: true,\n // unless in strict mode\n argTypes: [\"primitive\"]\n },\n handler: (context, args) => {\n var base = args[0];\n var mode = context.parser.mode;\n\n if (mode === \"math\") {\n context.parser.settings.reportNonstrict(\"mathVsTextAccents\", \"LaTeX's accent \" + context.funcName + \" works only in text mode\");\n mode = \"text\";\n }\n\n return {\n type: \"accent\",\n mode: mode,\n label: context.funcName,\n isStretchy: false,\n isShifty: true,\n base: base\n };\n },\n htmlBuilder: htmlBuilder$a,\n mathmlBuilder: mathmlBuilder$9\n});\n\n// Horizontal overlap functions\ndefineFunction({\n type: \"accentUnder\",\n names: [\"\\\\underleftarrow\", \"\\\\underrightarrow\", \"\\\\underleftrightarrow\", \"\\\\undergroup\", \"\\\\underlinesegment\", \"\\\\utilde\"],\n props: {\n numArgs: 1\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var base = args[0];\n return {\n type: \"accentUnder\",\n mode: parser.mode,\n label: funcName,\n base: base\n };\n },\n htmlBuilder: (group, options) => {\n // Treat under accents much like underlines.\n var innerGroup = buildGroup$1(group.base, options);\n var accentBody = stretchy.svgSpan(group, options);\n var kern = group.label === \"\\\\utilde\" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns\n\n var vlist = buildCommon.makeVList({\n positionType: \"top\",\n positionData: innerGroup.height,\n children: [{\n type: \"elem\",\n elem: accentBody,\n wrapperClasses: [\"svg-align\"]\n }, {\n type: \"kern\",\n size: kern\n }, {\n type: \"elem\",\n elem: innerGroup\n }]\n }, options);\n return buildCommon.makeSpan([\"mord\", \"accentunder\"], [vlist], options);\n },\n mathmlBuilder: (group, options) => {\n var accentNode = stretchy.mathMLnode(group.label);\n var node = new mathMLTree.MathNode(\"munder\", [buildGroup(group.base, options), accentNode]);\n node.setAttribute(\"accentunder\", \"true\");\n return node;\n }\n});\n\n// Helper function\nvar paddedNode = group => {\n var node = new mathMLTree.MathNode(\"mpadded\", group ? [group] : []);\n node.setAttribute(\"width\", \"+0.6em\");\n node.setAttribute(\"lspace\", \"0.3em\");\n return node;\n}; // Stretchy arrows with an optional argument\n\n\ndefineFunction({\n type: \"xArrow\",\n names: [\"\\\\xleftarrow\", \"\\\\xrightarrow\", \"\\\\xLeftarrow\", \"\\\\xRightarrow\", \"\\\\xleftrightarrow\", \"\\\\xLeftrightarrow\", \"\\\\xhookleftarrow\", \"\\\\xhookrightarrow\", \"\\\\xmapsto\", \"\\\\xrightharpoondown\", \"\\\\xrightharpoonup\", \"\\\\xleftharpoondown\", \"\\\\xleftharpoonup\", \"\\\\xrightleftharpoons\", \"\\\\xleftrightharpoons\", \"\\\\xlongequal\", \"\\\\xtwoheadrightarrow\", \"\\\\xtwoheadleftarrow\", \"\\\\xtofrom\", // The next 3 functions are here to support the mhchem extension.\n // Direct use of these functions is discouraged and may break someday.\n \"\\\\xrightleftarrows\", \"\\\\xrightequilibrium\", \"\\\\xleftequilibrium\", // The next 3 functions are here only to support the {CD} environment.\n \"\\\\\\\\cdrightarrow\", \"\\\\\\\\cdleftarrow\", \"\\\\\\\\cdlongequal\"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1\n },\n\n handler(_ref, args, optArgs) {\n var {\n parser,\n funcName\n } = _ref;\n return {\n type: \"xArrow\",\n mode: parser.mode,\n label: funcName,\n body: args[0],\n below: optArgs[0]\n };\n },\n\n // Flow is unable to correctly infer the type of `group`, even though it's\n // unambiguously determined from the passed-in `type` above.\n htmlBuilder(group, options) {\n var style = options.style; // Build the argument groups in the appropriate style.\n // Ref: amsmath.dtx: \\hbox{$\\scriptstyle\\mkern#3mu{#6}\\mkern#4mu$}%\n // Some groups can return document fragments. Handle those by wrapping\n // them in a span.\n\n var newOptions = options.havingStyle(style.sup());\n var upperGroup = buildCommon.wrapFragment(buildGroup$1(group.body, newOptions, options), options);\n var arrowPrefix = group.label.slice(0, 2) === \"\\\\x\" ? \"x\" : \"cd\";\n upperGroup.classes.push(arrowPrefix + \"-arrow-pad\");\n var lowerGroup;\n\n if (group.below) {\n // Build the lower group\n newOptions = options.havingStyle(style.sub());\n lowerGroup = buildCommon.wrapFragment(buildGroup$1(group.below, newOptions, options), options);\n lowerGroup.classes.push(arrowPrefix + \"-arrow-pad\");\n }\n\n var arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0.\n // The point we want on the math axis is at 0.5 * arrowBody.height.\n\n var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\\if0#2\\else\\mkern#2mu\\fi\n\n var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu\n\n if (upperGroup.depth > 0.25 || group.label === \"\\\\xleftequilibrium\") {\n upperShift -= upperGroup.depth; // shift up if depth encroaches\n } // Generate the vlist\n\n\n var vlist;\n\n if (lowerGroup) {\n var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111;\n vlist = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [{\n type: \"elem\",\n elem: upperGroup,\n shift: upperShift\n }, {\n type: \"elem\",\n elem: arrowBody,\n shift: arrowShift\n }, {\n type: \"elem\",\n elem: lowerGroup,\n shift: lowerShift\n }]\n }, options);\n } else {\n vlist = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [{\n type: \"elem\",\n elem: upperGroup,\n shift: upperShift\n }, {\n type: \"elem\",\n elem: arrowBody,\n shift: arrowShift\n }]\n }, options);\n } // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n\n\n vlist.children[0].children[0].children[1].classes.push(\"svg-align\");\n return buildCommon.makeSpan([\"mrel\", \"x-arrow\"], [vlist], options);\n },\n\n mathmlBuilder(group, options) {\n var arrowNode = stretchy.mathMLnode(group.label);\n arrowNode.setAttribute(\"minsize\", group.label.charAt(0) === \"x\" ? \"1.75em\" : \"3.0em\");\n var node;\n\n if (group.body) {\n var upperNode = paddedNode(buildGroup(group.body, options));\n\n if (group.below) {\n var lowerNode = paddedNode(buildGroup(group.below, options));\n node = new mathMLTree.MathNode(\"munderover\", [arrowNode, lowerNode, upperNode]);\n } else {\n node = new mathMLTree.MathNode(\"mover\", [arrowNode, upperNode]);\n }\n } else if (group.below) {\n var _lowerNode = paddedNode(buildGroup(group.below, options));\n\n node = new mathMLTree.MathNode(\"munder\", [arrowNode, _lowerNode]);\n } else {\n // This should never happen.\n // Parser.js throws an error if there is no argument.\n node = paddedNode();\n node = new mathMLTree.MathNode(\"mover\", [arrowNode, node]);\n }\n\n return node;\n }\n\n});\n\nvar makeSpan = buildCommon.makeSpan;\n\nfunction htmlBuilder$9(group, options) {\n var elements = buildExpression$1(group.body, options, true);\n return makeSpan([group.mclass], elements, options);\n}\n\nfunction mathmlBuilder$8(group, options) {\n var node;\n var inner = buildExpression(group.body, options);\n\n if (group.mclass === \"minner\") {\n node = new mathMLTree.MathNode(\"mpadded\", inner);\n } else if (group.mclass === \"mord\") {\n if (group.isCharacterBox) {\n node = inner[0];\n node.type = \"mi\";\n } else {\n node = new mathMLTree.MathNode(\"mi\", inner);\n }\n } else {\n if (group.isCharacterBox) {\n node = inner[0];\n node.type = \"mo\";\n } else {\n node = new mathMLTree.MathNode(\"mo\", inner);\n } // Set spacing based on what is the most likely adjacent atom type.\n // See TeXbook p170.\n\n\n if (group.mclass === \"mbin\") {\n node.attributes.lspace = \"0.22em\"; // medium space\n\n node.attributes.rspace = \"0.22em\";\n } else if (group.mclass === \"mpunct\") {\n node.attributes.lspace = \"0em\";\n node.attributes.rspace = \"0.17em\"; // thinspace\n } else if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n node.attributes.lspace = \"0em\";\n node.attributes.rspace = \"0em\";\n } else if (group.mclass === \"minner\") {\n node.attributes.lspace = \"0.0556em\"; // 1 mu is the most likely option\n\n node.attributes.width = \"+0.1111em\";\n } // MathML <mo> default space is 5/18 em, so <mrel> needs no action.\n // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo\n\n }\n\n return node;\n} // Math class commands except \\mathop\n\n\ndefineFunction({\n type: \"mclass\",\n names: [\"\\\\mathord\", \"\\\\mathbin\", \"\\\\mathrel\", \"\\\\mathopen\", \"\\\\mathclose\", \"\\\\mathpunct\", \"\\\\mathinner\"],\n props: {\n numArgs: 1,\n primitive: true\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n var body = args[0];\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass: \"m\" + funcName.slice(5),\n // TODO(kevinb): don't prefix with 'm'\n body: ordargument(body),\n isCharacterBox: utils.isCharacterBox(body)\n };\n },\n\n htmlBuilder: htmlBuilder$9,\n mathmlBuilder: mathmlBuilder$8\n});\nvar binrelClass = arg => {\n // \\binrel@ spacing varies with (bin|rel|ord) of the atom in the argument.\n // (by rendering separately and with {}s before and after, and measuring\n // the change in spacing). We'll do roughly the same by detecting the\n // atom type directly.\n var atom = arg.type === \"ordgroup\" && arg.body.length ? arg.body[0] : arg;\n\n if (atom.type === \"atom\" && (atom.family === \"bin\" || atom.family === \"rel\")) {\n return \"m\" + atom.family;\n } else {\n return \"mord\";\n }\n}; // \\@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord.\n// This is equivalent to \\binrel@{x}\\binrel@@{y} in AMSTeX.\n\ndefineFunction({\n type: \"mclass\",\n names: [\"\\\\@binrel\"],\n props: {\n numArgs: 2\n },\n\n handler(_ref2, args) {\n var {\n parser\n } = _ref2;\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass: binrelClass(args[0]),\n body: ordargument(args[1]),\n isCharacterBox: utils.isCharacterBox(args[1])\n };\n }\n\n}); // Build a relation or stacked op by placing one symbol on top of another\n\ndefineFunction({\n type: \"mclass\",\n names: [\"\\\\stackrel\", \"\\\\overset\", \"\\\\underset\"],\n props: {\n numArgs: 2\n },\n\n handler(_ref3, args) {\n var {\n parser,\n funcName\n } = _ref3;\n var baseArg = args[1];\n var shiftedArg = args[0];\n var mclass;\n\n if (funcName !== \"\\\\stackrel\") {\n // LaTeX applies \\binrel spacing to \\overset and \\underset.\n mclass = binrelClass(baseArg);\n } else {\n mclass = \"mrel\"; // for \\stackrel\n }\n\n var baseOp = {\n type: \"op\",\n mode: baseArg.mode,\n limits: true,\n alwaysHandleSupSub: true,\n parentIsSupSub: false,\n symbol: false,\n suppressBaseShift: funcName !== \"\\\\stackrel\",\n body: ordargument(baseArg)\n };\n var supsub = {\n type: \"supsub\",\n mode: shiftedArg.mode,\n base: baseOp,\n sup: funcName === \"\\\\underset\" ? null : shiftedArg,\n sub: funcName === \"\\\\underset\" ? shiftedArg : null\n };\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass,\n body: [supsub],\n isCharacterBox: utils.isCharacterBox(supsub)\n };\n },\n\n htmlBuilder: htmlBuilder$9,\n mathmlBuilder: mathmlBuilder$8\n});\n\n// \\pmb is a simulation of bold font.\n// The version of \\pmb in ambsy.sty works by typesetting three copies\n// with small offsets. We use CSS text-shadow.\n// It's a hack. Not as good as a real bold font. Better than nothing.\ndefineFunction({\n type: \"pmb\",\n names: [\"\\\\pmb\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n return {\n type: \"pmb\",\n mode: parser.mode,\n mclass: binrelClass(args[0]),\n body: ordargument(args[0])\n };\n },\n\n htmlBuilder(group, options) {\n var elements = buildExpression$1(group.body, options, true);\n var node = buildCommon.makeSpan([group.mclass], elements, options);\n node.style.textShadow = \"0.02em 0.01em 0.04px\";\n return node;\n },\n\n mathmlBuilder(group, style) {\n var inner = buildExpression(group.body, style); // Wrap with an <mstyle> element.\n\n var node = new mathMLTree.MathNode(\"mstyle\", inner);\n node.setAttribute(\"style\", \"text-shadow: 0.02em 0.01em 0.04px\");\n return node;\n }\n\n});\n\nvar cdArrowFunctionName = {\n \">\": \"\\\\\\\\cdrightarrow\",\n \"<\": \"\\\\\\\\cdleftarrow\",\n \"=\": \"\\\\\\\\cdlongequal\",\n \"A\": \"\\\\uparrow\",\n \"V\": \"\\\\downarrow\",\n \"|\": \"\\\\Vert\",\n \".\": \"no arrow\"\n};\n\nvar newCell = () => {\n // Create an empty cell, to be filled below with parse nodes.\n // The parseTree from this module must be constructed like the\n // one created by parseArray(), so an empty CD cell must\n // be a ParseNode<\"styling\">. And CD is always displaystyle.\n // So these values are fixed and flow can do implicit typing.\n return {\n type: \"styling\",\n body: [],\n mode: \"math\",\n style: \"display\"\n };\n};\n\nvar isStartOfArrow = node => {\n return node.type === \"textord\" && node.text === \"@\";\n};\n\nvar isLabelEnd = (node, endChar) => {\n return (node.type === \"mathord\" || node.type === \"atom\") && node.text === endChar;\n};\n\nfunction cdArrow(arrowChar, labels, parser) {\n // Return a parse tree of an arrow and its labels.\n // This acts in a way similar to a macro expansion.\n var funcName = cdArrowFunctionName[arrowChar];\n\n switch (funcName) {\n case \"\\\\\\\\cdrightarrow\":\n case \"\\\\\\\\cdleftarrow\":\n return parser.callFunction(funcName, [labels[0]], [labels[1]]);\n\n case \"\\\\uparrow\":\n case \"\\\\downarrow\":\n {\n var leftLabel = parser.callFunction(\"\\\\\\\\cdleft\", [labels[0]], []);\n var bareArrow = {\n type: \"atom\",\n text: funcName,\n mode: \"math\",\n family: \"rel\"\n };\n var sizedArrow = parser.callFunction(\"\\\\Big\", [bareArrow], []);\n var rightLabel = parser.callFunction(\"\\\\\\\\cdright\", [labels[1]], []);\n var arrowGroup = {\n type: \"ordgroup\",\n mode: \"math\",\n body: [leftLabel, sizedArrow, rightLabel]\n };\n return parser.callFunction(\"\\\\\\\\cdparent\", [arrowGroup], []);\n }\n\n case \"\\\\\\\\cdlongequal\":\n return parser.callFunction(\"\\\\\\\\cdlongequal\", [], []);\n\n case \"\\\\Vert\":\n {\n var arrow = {\n type: \"textord\",\n text: \"\\\\Vert\",\n mode: \"math\"\n };\n return parser.callFunction(\"\\\\Big\", [arrow], []);\n }\n\n default:\n return {\n type: \"textord\",\n text: \" \",\n mode: \"math\"\n };\n }\n}\n\nfunction parseCD(parser) {\n // Get the array's parse nodes with \\\\ temporarily mapped to \\cr.\n var parsedRows = [];\n parser.gullet.beginGroup();\n parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n parser.gullet.beginGroup();\n\n while (true) {\n // eslint-disable-line no-constant-condition\n // Get the parse nodes for the next row.\n parsedRows.push(parser.parseExpression(false, \"\\\\\\\\\"));\n parser.gullet.endGroup();\n parser.gullet.beginGroup();\n var next = parser.fetch().text;\n\n if (next === \"&\" || next === \"\\\\\\\\\") {\n parser.consume();\n } else if (next === \"\\\\end\") {\n if (parsedRows[parsedRows.length - 1].length === 0) {\n parsedRows.pop(); // final row ended in \\\\\n }\n\n break;\n } else {\n throw new ParseError(\"Expected \\\\\\\\ or \\\\cr or \\\\end\", parser.nextToken);\n }\n }\n\n var row = [];\n var body = [row]; // Loop thru the parse nodes. Collect them into cells and arrows.\n\n for (var i = 0; i < parsedRows.length; i++) {\n // Start a new row.\n var rowNodes = parsedRows[i]; // Create the first cell.\n\n var cell = newCell();\n\n for (var j = 0; j < rowNodes.length; j++) {\n if (!isStartOfArrow(rowNodes[j])) {\n // If a parseNode is not an arrow, it goes into a cell.\n cell.body.push(rowNodes[j]);\n } else {\n // Parse node j is an \"@\", the start of an arrow.\n // Before starting on the arrow, push the cell into `row`.\n row.push(cell); // Now collect parseNodes into an arrow.\n // The character after \"@\" defines the arrow type.\n\n j += 1;\n var arrowChar = assertSymbolNodeType(rowNodes[j]).text; // Create two empty label nodes. We may or may not use them.\n\n var labels = new Array(2);\n labels[0] = {\n type: \"ordgroup\",\n mode: \"math\",\n body: []\n };\n labels[1] = {\n type: \"ordgroup\",\n mode: \"math\",\n body: []\n }; // Process the arrow.\n\n if (\"=|.\".indexOf(arrowChar) > -1) ; else if (\"<>AV\".indexOf(arrowChar) > -1) {\n // Four arrows, `@>>>`, `@<<<`, `@AAA`, and `@VVV`, each take\n // two optional labels. E.g. the right-point arrow syntax is\n // really: @>{optional label}>{optional label}>\n // Collect parseNodes into labels.\n for (var labelNum = 0; labelNum < 2; labelNum++) {\n var inLabel = true;\n\n for (var k = j + 1; k < rowNodes.length; k++) {\n if (isLabelEnd(rowNodes[k], arrowChar)) {\n inLabel = false;\n j = k;\n break;\n }\n\n if (isStartOfArrow(rowNodes[k])) {\n throw new ParseError(\"Missing a \" + arrowChar + \" character to complete a CD arrow.\", rowNodes[k]);\n }\n\n labels[labelNum].body.push(rowNodes[k]);\n }\n\n if (inLabel) {\n // isLabelEnd never returned a true.\n throw new ParseError(\"Missing a \" + arrowChar + \" character to complete a CD arrow.\", rowNodes[j]);\n }\n }\n } else {\n throw new ParseError(\"Expected one of \\\"<>AV=|.\\\" after @\", rowNodes[j]);\n } // Now join the arrow to its labels.\n\n\n var arrow = cdArrow(arrowChar, labels, parser); // Wrap the arrow in ParseNode<\"styling\">.\n // This is done to match parseArray() behavior.\n\n var wrappedArrow = {\n type: \"styling\",\n body: [arrow],\n mode: \"math\",\n style: \"display\" // CD is always displaystyle.\n\n };\n row.push(wrappedArrow); // In CD's syntax, cells are implicit. That is, everything that\n // is not an arrow gets collected into a cell. So create an empty\n // cell now. It will collect upcoming parseNodes.\n\n cell = newCell();\n }\n }\n\n if (i % 2 === 0) {\n // Even-numbered rows consist of: cell, arrow, cell, arrow, ... cell\n // The last cell is not yet pushed into `row`, so:\n row.push(cell);\n } else {\n // Odd-numbered rows consist of: vert arrow, empty cell, ... vert arrow\n // Remove the empty cell that was placed at the beginning of `row`.\n row.shift();\n }\n\n row = [];\n body.push(row);\n } // End row group\n\n\n parser.gullet.endGroup(); // End array group defining \\\\\n\n parser.gullet.endGroup(); // define column separation.\n\n var cols = new Array(body[0].length).fill({\n type: \"align\",\n align: \"c\",\n pregap: 0.25,\n // CD package sets \\enskip between columns.\n postgap: 0.25 // So pre and post each get half an \\enskip, i.e. 0.25em.\n\n });\n return {\n type: \"array\",\n mode: \"math\",\n body,\n arraystretch: 1,\n addJot: true,\n rowGaps: [null],\n cols,\n colSeparationType: \"CD\",\n hLinesBeforeRow: new Array(body.length + 1).fill([])\n };\n} // The functions below are not available for general use.\n// They are here only for internal use by the {CD} environment in placing labels\n// next to vertical arrows.\n// We don't need any such functions for horizontal arrows because we can reuse\n// the functionality that already exists for extensible arrows.\n\ndefineFunction({\n type: \"cdlabel\",\n names: [\"\\\\\\\\cdleft\", \"\\\\\\\\cdright\"],\n props: {\n numArgs: 1\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n return {\n type: \"cdlabel\",\n mode: parser.mode,\n side: funcName.slice(4),\n label: args[0]\n };\n },\n\n htmlBuilder(group, options) {\n var newOptions = options.havingStyle(options.style.sup());\n var label = buildCommon.wrapFragment(buildGroup$1(group.label, newOptions, options), options);\n label.classes.push(\"cd-label-\" + group.side);\n label.style.bottom = makeEm(0.8 - label.depth); // Zero out label height & depth, so vertical align of arrow is set\n // by the arrow height, not by the label.\n\n label.height = 0;\n label.depth = 0;\n return label;\n },\n\n mathmlBuilder(group, options) {\n var label = new mathMLTree.MathNode(\"mrow\", [buildGroup(group.label, options)]);\n label = new mathMLTree.MathNode(\"mpadded\", [label]);\n label.setAttribute(\"width\", \"0\");\n\n if (group.side === \"left\") {\n label.setAttribute(\"lspace\", \"-1width\");\n } // We have to guess at vertical alignment. We know the arrow is 1.8em tall,\n // But we don't know the height or depth of the label.\n\n\n label.setAttribute(\"voffset\", \"0.7em\");\n label = new mathMLTree.MathNode(\"mstyle\", [label]);\n label.setAttribute(\"displaystyle\", \"false\");\n label.setAttribute(\"scriptlevel\", \"1\");\n return label;\n }\n\n});\ndefineFunction({\n type: \"cdlabelparent\",\n names: [\"\\\\\\\\cdparent\"],\n props: {\n numArgs: 1\n },\n\n handler(_ref2, args) {\n var {\n parser\n } = _ref2;\n return {\n type: \"cdlabelparent\",\n mode: parser.mode,\n fragment: args[0]\n };\n },\n\n htmlBuilder(group, options) {\n // Wrap the vertical arrow and its labels.\n // The parent gets position: relative. The child gets position: absolute.\n // So CSS can locate the label correctly.\n var parent = buildCommon.wrapFragment(buildGroup$1(group.fragment, options), options);\n parent.classes.push(\"cd-vert-arrow\");\n return parent;\n },\n\n mathmlBuilder(group, options) {\n return new mathMLTree.MathNode(\"mrow\", [buildGroup(group.fragment, options)]);\n }\n\n});\n\n// {123} and converts into symbol with code 123. It is used by the *macro*\n// \\char defined in macros.js.\n\ndefineFunction({\n type: \"textord\",\n names: [\"\\\\@char\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n var arg = assertNodeType(args[0], \"ordgroup\");\n var group = arg.body;\n var number = \"\";\n\n for (var i = 0; i < group.length; i++) {\n var node = assertNodeType(group[i], \"textord\");\n number += node.text;\n }\n\n var code = parseInt(number);\n var text;\n\n if (isNaN(code)) {\n throw new ParseError(\"\\\\@char has non-numeric argument \" + number); // If we drop IE support, the following code could be replaced with\n // text = String.fromCodePoint(code)\n } else if (code < 0 || code >= 0x10ffff) {\n throw new ParseError(\"\\\\@char with invalid code point \" + number);\n } else if (code <= 0xffff) {\n text = String.fromCharCode(code);\n } else {\n // Astral code point; split into surrogate halves\n code -= 0x10000;\n text = String.fromCharCode((code >> 10) + 0xd800, (code & 0x3ff) + 0xdc00);\n }\n\n return {\n type: \"textord\",\n mode: parser.mode,\n text: text\n };\n }\n\n});\n\nvar htmlBuilder$8 = (group, options) => {\n var elements = buildExpression$1(group.body, options.withColor(group.color), false); // \\color isn't supposed to affect the type of the elements it contains.\n // To accomplish this, we wrap the results in a fragment, so the inner\n // elements will be able to directly interact with their neighbors. For\n // example, `\\color{red}{2 +} 3` has the same spacing as `2 + 3`\n\n return buildCommon.makeFragment(elements);\n};\n\nvar mathmlBuilder$7 = (group, options) => {\n var inner = buildExpression(group.body, options.withColor(group.color));\n var node = new mathMLTree.MathNode(\"mstyle\", inner);\n node.setAttribute(\"mathcolor\", group.color);\n return node;\n};\n\ndefineFunction({\n type: \"color\",\n names: [\"\\\\textcolor\"],\n props: {\n numArgs: 2,\n allowedInText: true,\n argTypes: [\"color\", \"original\"]\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n var color = assertNodeType(args[0], \"color-token\").color;\n var body = args[1];\n return {\n type: \"color\",\n mode: parser.mode,\n color,\n body: ordargument(body)\n };\n },\n\n htmlBuilder: htmlBuilder$8,\n mathmlBuilder: mathmlBuilder$7\n});\ndefineFunction({\n type: \"color\",\n names: [\"\\\\color\"],\n props: {\n numArgs: 1,\n allowedInText: true,\n argTypes: [\"color\"]\n },\n\n handler(_ref2, args) {\n var {\n parser,\n breakOnTokenText\n } = _ref2;\n var color = assertNodeType(args[0], \"color-token\").color; // Set macro \\current@color in current namespace to store the current\n // color, mimicking the behavior of color.sty.\n // This is currently used just to correctly color a \\right\n // that follows a \\color command.\n\n parser.gullet.macros.set(\"\\\\current@color\", color); // Parse out the implicit body that should be colored.\n\n var body = parser.parseExpression(true, breakOnTokenText);\n return {\n type: \"color\",\n mode: parser.mode,\n color,\n body\n };\n },\n\n htmlBuilder: htmlBuilder$8,\n mathmlBuilder: mathmlBuilder$7\n});\n\n// Row breaks within tabular environments, and line breaks at top level\n\ndefineFunction({\n type: \"cr\",\n names: [\"\\\\\\\\\"],\n props: {\n numArgs: 0,\n numOptionalArgs: 0,\n allowedInText: true\n },\n\n handler(_ref, args, optArgs) {\n var {\n parser\n } = _ref;\n var size = parser.gullet.future().text === \"[\" ? parser.parseSizeGroup(true) : null;\n var newLine = !parser.settings.displayMode || !parser.settings.useStrictBehavior(\"newLineInDisplayMode\", \"In LaTeX, \\\\\\\\ or \\\\newline \" + \"does nothing in display mode\");\n return {\n type: \"cr\",\n mode: parser.mode,\n newLine,\n size: size && assertNodeType(size, \"size\").value\n };\n },\n\n // The following builders are called only at the top level,\n // not within tabular/array environments.\n htmlBuilder(group, options) {\n var span = buildCommon.makeSpan([\"mspace\"], [], options);\n\n if (group.newLine) {\n span.classes.push(\"newline\");\n\n if (group.size) {\n span.style.marginTop = makeEm(calculateSize(group.size, options));\n }\n }\n\n return span;\n },\n\n mathmlBuilder(group, options) {\n var node = new mathMLTree.MathNode(\"mspace\");\n\n if (group.newLine) {\n node.setAttribute(\"linebreak\", \"newline\");\n\n if (group.size) {\n node.setAttribute(\"height\", makeEm(calculateSize(group.size, options)));\n }\n }\n\n return node;\n }\n\n});\n\nvar globalMap = {\n \"\\\\global\": \"\\\\global\",\n \"\\\\long\": \"\\\\\\\\globallong\",\n \"\\\\\\\\globallong\": \"\\\\\\\\globallong\",\n \"\\\\def\": \"\\\\gdef\",\n \"\\\\gdef\": \"\\\\gdef\",\n \"\\\\edef\": \"\\\\xdef\",\n \"\\\\xdef\": \"\\\\xdef\",\n \"\\\\let\": \"\\\\\\\\globallet\",\n \"\\\\futurelet\": \"\\\\\\\\globalfuture\"\n};\n\nvar checkControlSequence = tok => {\n var name = tok.text;\n\n if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n throw new ParseError(\"Expected a control sequence\", tok);\n }\n\n return name;\n};\n\nvar getRHS = parser => {\n var tok = parser.gullet.popToken();\n\n if (tok.text === \"=\") {\n // consume optional equals\n tok = parser.gullet.popToken();\n\n if (tok.text === \" \") {\n // consume one optional space\n tok = parser.gullet.popToken();\n }\n }\n\n return tok;\n};\n\nvar letCommand = (parser, name, tok, global) => {\n var macro = parser.gullet.macros.get(tok.text);\n\n if (macro == null) {\n // don't expand it later even if a macro with the same name is defined\n // e.g., \\let\\foo=\\frac \\def\\frac{\\relax} \\frac12\n tok.noexpand = true;\n macro = {\n tokens: [tok],\n numArgs: 0,\n // reproduce the same behavior in expansion\n unexpandable: !parser.gullet.isExpandable(tok.text)\n };\n }\n\n parser.gullet.macros.set(name, macro, global);\n}; // <assignment> -> <non-macro assignment>|<macro assignment>\n// <non-macro assignment> -> <simple assignment>|\\global<non-macro assignment>\n// <macro assignment> -> <definition>|<prefix><macro assignment>\n// <prefix> -> \\global|\\long|\\outer\n\n\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\global\", \"\\\\long\", \"\\\\\\\\globallong\" // can’t be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n\n handler(_ref) {\n var {\n parser,\n funcName\n } = _ref;\n parser.consumeSpaces();\n var token = parser.fetch();\n\n if (globalMap[token.text]) {\n // KaTeX doesn't have \\par, so ignore \\long\n if (funcName === \"\\\\global\" || funcName === \"\\\\\\\\globallong\") {\n token.text = globalMap[token.text];\n }\n\n return assertNodeType(parser.parseFunction(), \"internal\");\n }\n\n throw new ParseError(\"Invalid token after macro prefix\", token);\n }\n\n}); // Basic support for macro definitions: \\def, \\gdef, \\edef, \\xdef\n// <definition> -> <def><control sequence><definition text>\n// <def> -> \\def|\\gdef|\\edef|\\xdef\n// <definition text> -> <parameter text><left brace><balanced text><right brace>\n\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\def\", \"\\\\gdef\", \"\\\\edef\", \"\\\\xdef\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref2) {\n var {\n parser,\n funcName\n } = _ref2;\n var tok = parser.gullet.popToken();\n var name = tok.text;\n\n if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n throw new ParseError(\"Expected a control sequence\", tok);\n }\n\n var numArgs = 0;\n var insert;\n var delimiters = [[]]; // <parameter text> contains no braces\n\n while (parser.gullet.future().text !== \"{\") {\n tok = parser.gullet.popToken();\n\n if (tok.text === \"#\") {\n // If the very last character of the <parameter text> is #, so that\n // this # is immediately followed by {, TeX will behave as if the {\n // had been inserted at the right end of both the parameter text\n // and the replacement text.\n if (parser.gullet.future().text === \"{\") {\n insert = parser.gullet.future();\n delimiters[numArgs].push(\"{\");\n break;\n } // A parameter, the first appearance of # must be followed by 1,\n // the next by 2, and so on; up to nine #’s are allowed\n\n\n tok = parser.gullet.popToken();\n\n if (!/^[1-9]$/.test(tok.text)) {\n throw new ParseError(\"Invalid argument number \\\"\" + tok.text + \"\\\"\");\n }\n\n if (parseInt(tok.text) !== numArgs + 1) {\n throw new ParseError(\"Argument number \\\"\" + tok.text + \"\\\" out of order\");\n }\n\n numArgs++;\n delimiters.push([]);\n } else if (tok.text === \"EOF\") {\n throw new ParseError(\"Expected a macro definition\");\n } else {\n delimiters[numArgs].push(tok.text);\n }\n } // replacement text, enclosed in '{' and '}' and properly nested\n\n\n var {\n tokens\n } = parser.gullet.consumeArg();\n\n if (insert) {\n tokens.unshift(insert);\n }\n\n if (funcName === \"\\\\edef\" || funcName === \"\\\\xdef\") {\n tokens = parser.gullet.expandTokens(tokens);\n tokens.reverse(); // to fit in with stack order\n } // Final arg is the expansion of the macro\n\n\n parser.gullet.macros.set(name, {\n tokens,\n numArgs,\n delimiters\n }, funcName === globalMap[funcName]);\n return {\n type: \"internal\",\n mode: parser.mode\n };\n }\n\n}); // <simple assignment> -> <let assignment>\n// <let assignment> -> \\futurelet<control sequence><token><token>\n// | \\let<control sequence><equals><one optional space><token>\n// <equals> -> <optional spaces>|<optional spaces>=\n\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\let\", \"\\\\\\\\globallet\" // can’t be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref3) {\n var {\n parser,\n funcName\n } = _ref3;\n var name = checkControlSequence(parser.gullet.popToken());\n parser.gullet.consumeSpaces();\n var tok = getRHS(parser);\n letCommand(parser, name, tok, funcName === \"\\\\\\\\globallet\");\n return {\n type: \"internal\",\n mode: parser.mode\n };\n }\n\n}); // ref: https://www.tug.org/TUGboat/tb09-3/tb22bechtolsheim.pdf\n\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\futurelet\", \"\\\\\\\\globalfuture\" // can’t be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref4) {\n var {\n parser,\n funcName\n } = _ref4;\n var name = checkControlSequence(parser.gullet.popToken());\n var middle = parser.gullet.popToken();\n var tok = parser.gullet.popToken();\n letCommand(parser, name, tok, funcName === \"\\\\\\\\globalfuture\");\n parser.gullet.pushToken(tok);\n parser.gullet.pushToken(middle);\n return {\n type: \"internal\",\n mode: parser.mode\n };\n }\n\n});\n\n/**\n * This file deals with creating delimiters of various sizes. The TeXbook\n * discusses these routines on page 441-442, in the \"Another subroutine sets box\n * x to a specified variable delimiter\" paragraph.\n *\n * There are three main routines here. `makeSmallDelim` makes a delimiter in the\n * normal font, but in either text, script, or scriptscript style.\n * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1,\n * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of\n * smaller pieces that are stacked on top of one another.\n *\n * The functions take a parameter `center`, which determines if the delimiter\n * should be centered around the axis.\n *\n * Then, there are three exposed functions. `sizedDelim` makes a delimiter in\n * one of the given sizes. This is used for things like `\\bigl`.\n * `customSizedDelim` makes a delimiter with a given total height+depth. It is\n * called in places like `\\sqrt`. `leftRightDelim` makes an appropriate\n * delimiter which surrounds an expression of a given height an depth. It is\n * used in `\\left` and `\\right`.\n */\n\n/**\n * Get the metrics for a given symbol and font, after transformation (i.e.\n * after following replacement from symbols.js)\n */\nvar getMetrics = function getMetrics(symbol, font, mode) {\n var replace = symbols.math[symbol] && symbols.math[symbol].replace;\n var metrics = getCharacterMetrics(replace || symbol, font, mode);\n\n if (!metrics) {\n throw new Error(\"Unsupported symbol \" + symbol + \" and font size \" + font + \".\");\n }\n\n return metrics;\n};\n/**\n * Puts a delimiter span in a given style, and adds appropriate height, depth,\n * and maxFontSizes.\n */\n\n\nvar styleWrap = function styleWrap(delim, toStyle, options, classes) {\n var newOptions = options.havingBaseStyle(toStyle);\n var span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options);\n var delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier;\n span.height *= delimSizeMultiplier;\n span.depth *= delimSizeMultiplier;\n span.maxFontSize = newOptions.sizeMultiplier;\n return span;\n};\n\nvar centerSpan = function centerSpan(span, options, style) {\n var newOptions = options.havingBaseStyle(style);\n var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight;\n span.classes.push(\"delimcenter\");\n span.style.top = makeEm(shift);\n span.height -= shift;\n span.depth += shift;\n};\n/**\n * Makes a small delimiter. This is a delimiter that comes in the Main-Regular\n * font, but is restyled to either be in textstyle, scriptstyle, or\n * scriptscriptstyle.\n */\n\n\nvar makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) {\n var text = buildCommon.makeSymbol(delim, \"Main-Regular\", mode, options);\n var span = styleWrap(text, style, options, classes);\n\n if (center) {\n centerSpan(span, options, style);\n }\n\n return span;\n};\n/**\n * Builds a symbol in the given font size (note size is an integer)\n */\n\n\nvar mathrmSize = function mathrmSize(value, size, mode, options) {\n return buildCommon.makeSymbol(value, \"Size\" + size + \"-Regular\", mode, options);\n};\n/**\n * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,\n * Size3, or Size4 fonts. It is always rendered in textstyle.\n */\n\n\nvar makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) {\n var inner = mathrmSize(delim, size, mode, options);\n var span = styleWrap(buildCommon.makeSpan([\"delimsizing\", \"size\" + size], [inner], options), Style$1.TEXT, options, classes);\n\n if (center) {\n centerSpan(span, options, Style$1.TEXT);\n }\n\n return span;\n};\n/**\n * Make a span from a font glyph with the given offset and in the given font.\n * This is used in makeStackedDelim to make the stacking pieces for the delimiter.\n */\n\n\nvar makeGlyphSpan = function makeGlyphSpan(symbol, font, mode) {\n var sizeClass; // Apply the correct CSS class to choose the right font.\n\n if (font === \"Size1-Regular\") {\n sizeClass = \"delim-size1\";\n } else\n /* if (font === \"Size4-Regular\") */\n {\n sizeClass = \"delim-size4\";\n }\n\n var corner = buildCommon.makeSpan([\"delimsizinginner\", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element\n // in the appropriate tag that VList uses.\n\n return {\n type: \"elem\",\n elem: corner\n };\n};\n\nvar makeInner = function makeInner(ch, height, options) {\n // Create a span with inline SVG for the inner part of a tall stacked delimiter.\n var width = fontMetricsData['Size4-Regular'][ch.charCodeAt(0)] ? fontMetricsData['Size4-Regular'][ch.charCodeAt(0)][4] : fontMetricsData['Size1-Regular'][ch.charCodeAt(0)][4];\n var path = new PathNode(\"inner\", innerPath(ch, Math.round(1000 * height)));\n var svgNode = new SvgNode([path], {\n \"width\": makeEm(width),\n \"height\": makeEm(height),\n // Override CSS rule `.katex svg { width: 100% }`\n \"style\": \"width:\" + makeEm(width),\n \"viewBox\": \"0 0 \" + 1000 * width + \" \" + Math.round(1000 * height),\n \"preserveAspectRatio\": \"xMinYMin\"\n });\n var span = buildCommon.makeSvgSpan([], [svgNode], options);\n span.height = height;\n span.style.height = makeEm(height);\n span.style.width = makeEm(width);\n return {\n type: \"elem\",\n elem: span\n };\n}; // Helpers for makeStackedDelim\n\n\nvar lapInEms = 0.008;\nvar lap = {\n type: \"kern\",\n size: -1 * lapInEms\n};\nvar verts = [\"|\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\vert\"];\nvar doubleVerts = [\"\\\\|\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\Vert\"];\n/**\n * Make a stacked delimiter out of a given delimiter, with the total height at\n * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.\n */\n\nvar makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) {\n // There are four parts, the top, an optional middle, a repeated part, and a\n // bottom.\n var top;\n var middle;\n var repeat;\n var bottom;\n var svgLabel = \"\";\n var viewBoxWidth = 0;\n top = repeat = bottom = delim;\n middle = null; // Also keep track of what font the delimiters are in\n\n var font = \"Size1-Regular\"; // We set the parts and font based on the symbol. Note that we use\n // '\\u23d0' instead of '|' and '\\u2016' instead of '\\\\|' for the\n // repeats of the arrows\n\n if (delim === \"\\\\uparrow\") {\n repeat = bottom = \"\\u23d0\";\n } else if (delim === \"\\\\Uparrow\") {\n repeat = bottom = \"\\u2016\";\n } else if (delim === \"\\\\downarrow\") {\n top = repeat = \"\\u23d0\";\n } else if (delim === \"\\\\Downarrow\") {\n top = repeat = \"\\u2016\";\n } else if (delim === \"\\\\updownarrow\") {\n top = \"\\\\uparrow\";\n repeat = \"\\u23d0\";\n bottom = \"\\\\downarrow\";\n } else if (delim === \"\\\\Updownarrow\") {\n top = \"\\\\Uparrow\";\n repeat = \"\\u2016\";\n bottom = \"\\\\Downarrow\";\n } else if (verts.includes(delim)) {\n repeat = \"\\u2223\";\n svgLabel = \"vert\";\n viewBoxWidth = 333;\n } else if (doubleVerts.includes(delim)) {\n repeat = \"\\u2225\";\n svgLabel = \"doublevert\";\n viewBoxWidth = 556;\n } else if (delim === \"[\" || delim === \"\\\\lbrack\") {\n top = \"\\u23a1\";\n repeat = \"\\u23a2\";\n bottom = \"\\u23a3\";\n font = \"Size4-Regular\";\n svgLabel = \"lbrack\";\n viewBoxWidth = 667;\n } else if (delim === \"]\" || delim === \"\\\\rbrack\") {\n top = \"\\u23a4\";\n repeat = \"\\u23a5\";\n bottom = \"\\u23a6\";\n font = \"Size4-Regular\";\n svgLabel = \"rbrack\";\n viewBoxWidth = 667;\n } else if (delim === \"\\\\lfloor\" || delim === \"\\u230a\") {\n repeat = top = \"\\u23a2\";\n bottom = \"\\u23a3\";\n font = \"Size4-Regular\";\n svgLabel = \"lfloor\";\n viewBoxWidth = 667;\n } else if (delim === \"\\\\lceil\" || delim === \"\\u2308\") {\n top = \"\\u23a1\";\n repeat = bottom = \"\\u23a2\";\n font = \"Size4-Regular\";\n svgLabel = \"lceil\";\n viewBoxWidth = 667;\n } else if (delim === \"\\\\rfloor\" || delim === \"\\u230b\") {\n repeat = top = \"\\u23a5\";\n bottom = \"\\u23a6\";\n font = \"Size4-Regular\";\n svgLabel = \"rfloor\";\n viewBoxWidth = 667;\n } else if (delim === \"\\\\rceil\" || delim === \"\\u2309\") {\n top = \"\\u23a4\";\n repeat = bottom = \"\\u23a5\";\n font = \"Size4-Regular\";\n svgLabel = \"rceil\";\n viewBoxWidth = 667;\n } else if (delim === \"(\" || delim === \"\\\\lparen\") {\n top = \"\\u239b\";\n repeat = \"\\u239c\";\n bottom = \"\\u239d\";\n font = \"Size4-Regular\";\n svgLabel = \"lparen\";\n viewBoxWidth = 875;\n } else if (delim === \")\" || delim === \"\\\\rparen\") {\n top = \"\\u239e\";\n repeat = \"\\u239f\";\n bottom = \"\\u23a0\";\n font = \"Size4-Regular\";\n svgLabel = \"rparen\";\n viewBoxWidth = 875;\n } else if (delim === \"\\\\{\" || delim === \"\\\\lbrace\") {\n top = \"\\u23a7\";\n middle = \"\\u23a8\";\n bottom = \"\\u23a9\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\}\" || delim === \"\\\\rbrace\") {\n top = \"\\u23ab\";\n middle = \"\\u23ac\";\n bottom = \"\\u23ad\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\lgroup\" || delim === \"\\u27ee\") {\n top = \"\\u23a7\";\n bottom = \"\\u23a9\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\rgroup\" || delim === \"\\u27ef\") {\n top = \"\\u23ab\";\n bottom = \"\\u23ad\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\lmoustache\" || delim === \"\\u23b0\") {\n top = \"\\u23a7\";\n bottom = \"\\u23ad\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\rmoustache\" || delim === \"\\u23b1\") {\n top = \"\\u23ab\";\n bottom = \"\\u23a9\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } // Get the metrics of the four sections\n\n\n var topMetrics = getMetrics(top, font, mode);\n var topHeightTotal = topMetrics.height + topMetrics.depth;\n var repeatMetrics = getMetrics(repeat, font, mode);\n var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;\n var bottomMetrics = getMetrics(bottom, font, mode);\n var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;\n var middleHeightTotal = 0;\n var middleFactor = 1;\n\n if (middle !== null) {\n var middleMetrics = getMetrics(middle, font, mode);\n middleHeightTotal = middleMetrics.height + middleMetrics.depth;\n middleFactor = 2; // repeat symmetrically above and below middle\n } // Calculate the minimal height that the delimiter can have.\n // It is at least the size of the top, bottom, and optional middle combined.\n\n\n var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need\n\n var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols\n\n var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note\n // that in this context, \"center\" means that the delimiter should be\n // centered around the axis in the current style, while normally it is\n // centered around the axis in textstyle.\n\n var axisHeight = options.fontMetrics().axisHeight;\n\n if (center) {\n axisHeight *= options.sizeMultiplier;\n } // Calculate the depth\n\n\n var depth = realHeightTotal / 2 - axisHeight; // Now, we start building the pieces that will go into the vlist\n // Keep a list of the pieces of the stacked delimiter\n\n var stack = [];\n\n if (svgLabel.length > 0) {\n // Instead of stacking glyphs, create a single SVG.\n // This evades browser problems with imprecise positioning of spans.\n var midHeight = realHeightTotal - topHeightTotal - bottomHeightTotal;\n var viewBoxHeight = Math.round(realHeightTotal * 1000);\n var pathStr = tallDelim(svgLabel, Math.round(midHeight * 1000));\n var path = new PathNode(svgLabel, pathStr);\n var width = (viewBoxWidth / 1000).toFixed(3) + \"em\";\n var height = (viewBoxHeight / 1000).toFixed(3) + \"em\";\n var svg = new SvgNode([path], {\n \"width\": width,\n \"height\": height,\n \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + viewBoxHeight\n });\n var wrapper = buildCommon.makeSvgSpan([], [svg], options);\n wrapper.height = viewBoxHeight / 1000;\n wrapper.style.width = width;\n wrapper.style.height = height;\n stack.push({\n type: \"elem\",\n elem: wrapper\n });\n } else {\n // Stack glyphs\n // Start by adding the bottom symbol\n stack.push(makeGlyphSpan(bottom, font, mode));\n stack.push(lap); // overlap\n\n if (middle === null) {\n // The middle section will be an SVG. Make it an extra 0.016em tall.\n // We'll overlap by 0.008em at top and bottom.\n var innerHeight = realHeightTotal - topHeightTotal - bottomHeightTotal + 2 * lapInEms;\n stack.push(makeInner(repeat, innerHeight, options));\n } else {\n // When there is a middle bit, we need the middle part and two repeated\n // sections\n var _innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms;\n\n stack.push(makeInner(repeat, _innerHeight, options)); // Now insert the middle of the brace.\n\n stack.push(lap);\n stack.push(makeGlyphSpan(middle, font, mode));\n stack.push(lap);\n stack.push(makeInner(repeat, _innerHeight, options));\n } // Add the top symbol\n\n\n stack.push(lap);\n stack.push(makeGlyphSpan(top, font, mode));\n } // Finally, build the vlist\n\n\n var newOptions = options.havingBaseStyle(Style$1.TEXT);\n var inner = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: depth,\n children: stack\n }, newOptions);\n return styleWrap(buildCommon.makeSpan([\"delimsizing\", \"mult\"], [inner], newOptions), Style$1.TEXT, options, classes);\n}; // All surds have 0.08em padding above the vinculum inside the SVG.\n// That keeps browser span height rounding error from pinching the line.\n\n\nvar vbPad = 80; // padding above the surd, measured inside the viewBox.\n\nvar emPad = 0.08; // padding, in ems, measured in the document.\n\nvar sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraVinculum, options) {\n var path = sqrtPath(sqrtName, extraVinculum, viewBoxHeight);\n var pathNode = new PathNode(sqrtName, path);\n var svg = new SvgNode([pathNode], {\n // Note: 1000:1 ratio of viewBox to document em width.\n \"width\": \"400em\",\n \"height\": makeEm(height),\n \"viewBox\": \"0 0 400000 \" + viewBoxHeight,\n \"preserveAspectRatio\": \"xMinYMin slice\"\n });\n return buildCommon.makeSvgSpan([\"hide-tail\"], [svg], options);\n};\n/**\n * Make a sqrt image of the given height,\n */\n\n\nvar makeSqrtImage = function makeSqrtImage(height, options) {\n // Define a newOptions that removes the effect of size changes such as \\Huge.\n // We don't pick different a height surd for \\Huge. For it, we scale up.\n var newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds.\n\n var delim = traverseSequence(\"\\\\surd\", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions);\n var sizeMultiplier = newOptions.sizeMultiplier; // default\n // The standard sqrt SVGs each have a 0.04em thick vinculum.\n // If Settings.minRuleThickness is larger than that, we add extraVinculum.\n\n var extraVinculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol.\n\n var span;\n var spanHeight = 0;\n var texHeight = 0;\n var viewBoxHeight = 0;\n var advanceWidth; // We create viewBoxes with 80 units of \"padding\" above each surd.\n // Then browser rounding error on the parent span height will not\n // encroach on the ink of the vinculum. But that padding is not\n // included in the TeX-like `height` used for calculation of\n // vertical alignment. So texHeight = span.height < span.style.height.\n\n if (delim.type === \"small\") {\n // Get an SVG that is derived from glyph U+221A in font KaTeX-Main.\n // 1000 unit normal glyph height.\n viewBoxHeight = 1000 + 1000 * extraVinculum + vbPad;\n\n if (height < 1.0) {\n sizeMultiplier = 1.0; // mimic a \\textfont radical\n } else if (height < 1.4) {\n sizeMultiplier = 0.7; // mimic a \\scriptfont radical\n }\n\n spanHeight = (1.0 + extraVinculum + emPad) / sizeMultiplier;\n texHeight = (1.00 + extraVinculum) / sizeMultiplier;\n span = sqrtSvg(\"sqrtMain\", spanHeight, viewBoxHeight, extraVinculum, options);\n span.style.minWidth = \"0.853em\";\n advanceWidth = 0.833 / sizeMultiplier; // from the font.\n } else if (delim.type === \"large\") {\n // These SVGs come from fonts: KaTeX_Size1, _Size2, etc.\n viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size];\n texHeight = (sizeToMaxHeight[delim.size] + extraVinculum) / sizeMultiplier;\n spanHeight = (sizeToMaxHeight[delim.size] + extraVinculum + emPad) / sizeMultiplier;\n span = sqrtSvg(\"sqrtSize\" + delim.size, spanHeight, viewBoxHeight, extraVinculum, options);\n span.style.minWidth = \"1.02em\";\n advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font.\n } else {\n // Tall sqrt. In TeX, this would be stacked using multiple glyphs.\n // We'll use a single SVG to accomplish the same thing.\n spanHeight = height + extraVinculum + emPad;\n texHeight = height + extraVinculum;\n viewBoxHeight = Math.floor(1000 * height + extraVinculum) + vbPad;\n span = sqrtSvg(\"sqrtTall\", spanHeight, viewBoxHeight, extraVinculum, options);\n span.style.minWidth = \"0.742em\";\n advanceWidth = 1.056;\n }\n\n span.height = texHeight;\n span.style.height = makeEm(spanHeight);\n return {\n span,\n advanceWidth,\n // Calculate the actual line width.\n // This actually should depend on the chosen font -- e.g. \\boldmath\n // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and\n // have thicker rules.\n ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraVinculum) * sizeMultiplier\n };\n}; // There are three kinds of delimiters, delimiters that stack when they become\n// too large\n\n\nvar stackLargeDelimiters = [\"(\", \"\\\\lparen\", \")\", \"\\\\rparen\", \"[\", \"\\\\lbrack\", \"]\", \"\\\\rbrack\", \"\\\\{\", \"\\\\lbrace\", \"\\\\}\", \"\\\\rbrace\", \"\\\\lfloor\", \"\\\\rfloor\", \"\\u230a\", \"\\u230b\", \"\\\\lceil\", \"\\\\rceil\", \"\\u2308\", \"\\u2309\", \"\\\\surd\"]; // delimiters that always stack\n\nvar stackAlwaysDelimiters = [\"\\\\uparrow\", \"\\\\downarrow\", \"\\\\updownarrow\", \"\\\\Uparrow\", \"\\\\Downarrow\", \"\\\\Updownarrow\", \"|\", \"\\\\|\", \"\\\\vert\", \"\\\\Vert\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\lgroup\", \"\\\\rgroup\", \"\\u27ee\", \"\\u27ef\", \"\\\\lmoustache\", \"\\\\rmoustache\", \"\\u23b0\", \"\\u23b1\"]; // and delimiters that never stack\n\nvar stackNeverDelimiters = [\"<\", \">\", \"\\\\langle\", \"\\\\rangle\", \"/\", \"\\\\backslash\", \"\\\\lt\", \"\\\\gt\"]; // Metrics of the different sizes. Found by looking at TeX's output of\n// $\\bigl| // \\Bigl| \\biggl| \\Biggl| \\showlists$\n// Used to create stacked delimiters of appropriate sizes in makeSizedDelim.\n\nvar sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0];\n/**\n * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4.\n */\n\nvar makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) {\n // < and > turn into \\langle and \\rangle in delimiters\n if (delim === \"<\" || delim === \"\\\\lt\" || delim === \"\\u27e8\") {\n delim = \"\\\\langle\";\n } else if (delim === \">\" || delim === \"\\\\gt\" || delim === \"\\u27e9\") {\n delim = \"\\\\rangle\";\n } // Sized delimiters are never centered.\n\n\n if (stackLargeDelimiters.includes(delim) || stackNeverDelimiters.includes(delim)) {\n return makeLargeDelim(delim, size, false, options, mode, classes);\n } else if (stackAlwaysDelimiters.includes(delim)) {\n return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes);\n } else {\n throw new ParseError(\"Illegal delimiter: '\" + delim + \"'\");\n }\n};\n/**\n * There are three different sequences of delimiter sizes that the delimiters\n * follow depending on the kind of delimiter. This is used when creating custom\n * sized delimiters to decide whether to create a small, large, or stacked\n * delimiter.\n *\n * In real TeX, these sequences aren't explicitly defined, but are instead\n * defined inside the font metrics. Since there are only three sequences that\n * are possible for the delimiters that TeX defines, it is easier to just encode\n * them explicitly here.\n */\n\n\n// Delimiters that never stack try small delimiters and large delimiters only\nvar stackNeverDelimiterSequence = [{\n type: \"small\",\n style: Style$1.SCRIPTSCRIPT\n}, {\n type: \"small\",\n style: Style$1.SCRIPT\n}, {\n type: \"small\",\n style: Style$1.TEXT\n}, {\n type: \"large\",\n size: 1\n}, {\n type: \"large\",\n size: 2\n}, {\n type: \"large\",\n size: 3\n}, {\n type: \"large\",\n size: 4\n}]; // Delimiters that always stack try the small delimiters first, then stack\n\nvar stackAlwaysDelimiterSequence = [{\n type: \"small\",\n style: Style$1.SCRIPTSCRIPT\n}, {\n type: \"small\",\n style: Style$1.SCRIPT\n}, {\n type: \"small\",\n style: Style$1.TEXT\n}, {\n type: \"stack\"\n}]; // Delimiters that stack when large try the small and then large delimiters, and\n// stack afterwards\n\nvar stackLargeDelimiterSequence = [{\n type: \"small\",\n style: Style$1.SCRIPTSCRIPT\n}, {\n type: \"small\",\n style: Style$1.SCRIPT\n}, {\n type: \"small\",\n style: Style$1.TEXT\n}, {\n type: \"large\",\n size: 1\n}, {\n type: \"large\",\n size: 2\n}, {\n type: \"large\",\n size: 3\n}, {\n type: \"large\",\n size: 4\n}, {\n type: \"stack\"\n}];\n/**\n * Get the font used in a delimiter based on what kind of delimiter it is.\n * TODO(#963) Use more specific font family return type once that is introduced.\n */\n\nvar delimTypeToFont = function delimTypeToFont(type) {\n if (type.type === \"small\") {\n return \"Main-Regular\";\n } else if (type.type === \"large\") {\n return \"Size\" + type.size + \"-Regular\";\n } else if (type.type === \"stack\") {\n return \"Size4-Regular\";\n } else {\n throw new Error(\"Add support for delim type '\" + type.type + \"' here.\");\n }\n};\n/**\n * Traverse a sequence of types of delimiters to decide what kind of delimiter\n * should be used to create a delimiter of the given height+depth.\n */\n\n\nvar traverseSequence = function traverseSequence(delim, height, sequence, options) {\n // Here, we choose the index we should start at in the sequences. In smaller\n // sizes (which correspond to larger numbers in style.size) we start earlier\n // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts\n // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2\n var start = Math.min(2, 3 - options.style.size);\n\n for (var i = start; i < sequence.length; i++) {\n if (sequence[i].type === \"stack\") {\n // This is always the last delimiter, so we just break the loop now.\n break;\n }\n\n var metrics = getMetrics(delim, delimTypeToFont(sequence[i]), \"math\");\n var heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we\n // account for the style change size.\n\n if (sequence[i].type === \"small\") {\n var newOptions = options.havingBaseStyle(sequence[i].style);\n heightDepth *= newOptions.sizeMultiplier;\n } // Check if the delimiter at this size works for the given height.\n\n\n if (heightDepth > height) {\n return sequence[i];\n }\n } // If we reached the end of the sequence, return the last sequence element.\n\n\n return sequence[sequence.length - 1];\n};\n/**\n * Make a delimiter of a given height+depth, with optional centering. Here, we\n * traverse the sequences, and create a delimiter that the sequence tells us to.\n */\n\n\nvar makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) {\n if (delim === \"<\" || delim === \"\\\\lt\" || delim === \"\\u27e8\") {\n delim = \"\\\\langle\";\n } else if (delim === \">\" || delim === \"\\\\gt\" || delim === \"\\u27e9\") {\n delim = \"\\\\rangle\";\n } // Decide what sequence to use\n\n\n var sequence;\n\n if (stackNeverDelimiters.includes(delim)) {\n sequence = stackNeverDelimiterSequence;\n } else if (stackLargeDelimiters.includes(delim)) {\n sequence = stackLargeDelimiterSequence;\n } else {\n sequence = stackAlwaysDelimiterSequence;\n } // Look through the sequence\n\n\n var delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs.\n // Depending on the sequence element we decided on, call the\n // appropriate function.\n\n if (delimType.type === \"small\") {\n return makeSmallDelim(delim, delimType.style, center, options, mode, classes);\n } else if (delimType.type === \"large\") {\n return makeLargeDelim(delim, delimType.size, center, options, mode, classes);\n } else\n /* if (delimType.type === \"stack\") */\n {\n return makeStackedDelim(delim, height, center, options, mode, classes);\n }\n};\n/**\n * Make a delimiter for use with `\\left` and `\\right`, given a height and depth\n * of an expression that the delimiters surround.\n */\n\n\nvar makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) {\n // We always center \\left/\\right delimiters, so the axis is always shifted\n var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right\n\n var delimiterFactor = 901;\n var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm;\n var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight);\n var totalHeight = Math.max( // In real TeX, calculations are done using integral values which are\n // 65536 per pt, or 655360 per em. So, the division here truncates in\n // TeX but doesn't here, producing different results. If we wanted to\n // exactly match TeX's calculation, we could do\n // Math.floor(655360 * maxDistFromAxis / 500) *\n // delimiterFactor / 655360\n // (To see the difference, compare\n // x^{x^{\\left(\\rule{0.1em}{0.68em}\\right)}}\n // in TeX and KaTeX)\n maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total\n // height\n\n return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes);\n};\n\nvar delimiter = {\n sqrtImage: makeSqrtImage,\n sizedDelim: makeSizedDelim,\n sizeToMaxHeight: sizeToMaxHeight,\n customSizedDelim: makeCustomSizedDelim,\n leftRightDelim: makeLeftRightDelim\n};\n\n// Extra data needed for the delimiter handler down below\nvar delimiterSizes = {\n \"\\\\bigl\": {\n mclass: \"mopen\",\n size: 1\n },\n \"\\\\Bigl\": {\n mclass: \"mopen\",\n size: 2\n },\n \"\\\\biggl\": {\n mclass: \"mopen\",\n size: 3\n },\n \"\\\\Biggl\": {\n mclass: \"mopen\",\n size: 4\n },\n \"\\\\bigr\": {\n mclass: \"mclose\",\n size: 1\n },\n \"\\\\Bigr\": {\n mclass: \"mclose\",\n size: 2\n },\n \"\\\\biggr\": {\n mclass: \"mclose\",\n size: 3\n },\n \"\\\\Biggr\": {\n mclass: \"mclose\",\n size: 4\n },\n \"\\\\bigm\": {\n mclass: \"mrel\",\n size: 1\n },\n \"\\\\Bigm\": {\n mclass: \"mrel\",\n size: 2\n },\n \"\\\\biggm\": {\n mclass: \"mrel\",\n size: 3\n },\n \"\\\\Biggm\": {\n mclass: \"mrel\",\n size: 4\n },\n \"\\\\big\": {\n mclass: \"mord\",\n size: 1\n },\n \"\\\\Big\": {\n mclass: \"mord\",\n size: 2\n },\n \"\\\\bigg\": {\n mclass: \"mord\",\n size: 3\n },\n \"\\\\Bigg\": {\n mclass: \"mord\",\n size: 4\n }\n};\nvar delimiters = [\"(\", \"\\\\lparen\", \")\", \"\\\\rparen\", \"[\", \"\\\\lbrack\", \"]\", \"\\\\rbrack\", \"\\\\{\", \"\\\\lbrace\", \"\\\\}\", \"\\\\rbrace\", \"\\\\lfloor\", \"\\\\rfloor\", \"\\u230a\", \"\\u230b\", \"\\\\lceil\", \"\\\\rceil\", \"\\u2308\", \"\\u2309\", \"<\", \">\", \"\\\\langle\", \"\\u27e8\", \"\\\\rangle\", \"\\u27e9\", \"\\\\lt\", \"\\\\gt\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\lgroup\", \"\\\\rgroup\", \"\\u27ee\", \"\\u27ef\", \"\\\\lmoustache\", \"\\\\rmoustache\", \"\\u23b0\", \"\\u23b1\", \"/\", \"\\\\backslash\", \"|\", \"\\\\vert\", \"\\\\|\", \"\\\\Vert\", \"\\\\uparrow\", \"\\\\Uparrow\", \"\\\\downarrow\", \"\\\\Downarrow\", \"\\\\updownarrow\", \"\\\\Updownarrow\", \".\"];\n\n// Delimiter functions\nfunction checkDelimiter(delim, context) {\n var symDelim = checkSymbolNodeType(delim);\n\n if (symDelim && delimiters.includes(symDelim.text)) {\n return symDelim;\n } else if (symDelim) {\n throw new ParseError(\"Invalid delimiter '\" + symDelim.text + \"' after '\" + context.funcName + \"'\", delim);\n } else {\n throw new ParseError(\"Invalid delimiter type '\" + delim.type + \"'\", delim);\n }\n}\n\ndefineFunction({\n type: \"delimsizing\",\n names: [\"\\\\bigl\", \"\\\\Bigl\", \"\\\\biggl\", \"\\\\Biggl\", \"\\\\bigr\", \"\\\\Bigr\", \"\\\\biggr\", \"\\\\Biggr\", \"\\\\bigm\", \"\\\\Bigm\", \"\\\\biggm\", \"\\\\Biggm\", \"\\\\big\", \"\\\\Big\", \"\\\\bigg\", \"\\\\Bigg\"],\n props: {\n numArgs: 1,\n argTypes: [\"primitive\"]\n },\n handler: (context, args) => {\n var delim = checkDelimiter(args[0], context);\n return {\n type: \"delimsizing\",\n mode: context.parser.mode,\n size: delimiterSizes[context.funcName].size,\n mclass: delimiterSizes[context.funcName].mclass,\n delim: delim.text\n };\n },\n htmlBuilder: (group, options) => {\n if (group.delim === \".\") {\n // Empty delimiters still count as elements, even though they don't\n // show anything.\n return buildCommon.makeSpan([group.mclass]);\n } // Use delimiter.sizedDelim to generate the delimiter.\n\n\n return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]);\n },\n mathmlBuilder: group => {\n var children = [];\n\n if (group.delim !== \".\") {\n children.push(makeText(group.delim, group.mode));\n }\n\n var node = new mathMLTree.MathNode(\"mo\", children);\n\n if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n // Only some of the delimsizing functions act as fences, and they\n // return \"mopen\" or \"mclose\" mclass.\n node.setAttribute(\"fence\", \"true\");\n } else {\n // Explicitly disable fencing if it's not a fence, to override the\n // defaults.\n node.setAttribute(\"fence\", \"false\");\n }\n\n node.setAttribute(\"stretchy\", \"true\");\n var size = makeEm(delimiter.sizeToMaxHeight[group.size]);\n node.setAttribute(\"minsize\", size);\n node.setAttribute(\"maxsize\", size);\n return node;\n }\n});\n\nfunction assertParsed(group) {\n if (!group.body) {\n throw new Error(\"Bug: The leftright ParseNode wasn't fully parsed.\");\n }\n}\n\ndefineFunction({\n type: \"leftright-right\",\n names: [\"\\\\right\"],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (context, args) => {\n // \\left case below triggers parsing of \\right in\n // `const right = parser.parseFunction();`\n // uses this return value.\n var color = context.parser.gullet.macros.get(\"\\\\current@color\");\n\n if (color && typeof color !== \"string\") {\n throw new ParseError(\"\\\\current@color set to non-string in \\\\right\");\n }\n\n return {\n type: \"leftright-right\",\n mode: context.parser.mode,\n delim: checkDelimiter(args[0], context).text,\n color // undefined if not set via \\color\n\n };\n }\n});\ndefineFunction({\n type: \"leftright\",\n names: [\"\\\\left\"],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (context, args) => {\n var delim = checkDelimiter(args[0], context);\n var parser = context.parser; // Parse out the implicit body\n\n ++parser.leftrightDepth; // parseExpression stops before '\\\\right'\n\n var body = parser.parseExpression(false);\n --parser.leftrightDepth; // Check the next token\n\n parser.expect(\"\\\\right\", false);\n var right = assertNodeType(parser.parseFunction(), \"leftright-right\");\n return {\n type: \"leftright\",\n mode: parser.mode,\n body,\n left: delim.text,\n right: right.delim,\n rightColor: right.color\n };\n },\n htmlBuilder: (group, options) => {\n assertParsed(group); // Build the inner expression\n\n var inner = buildExpression$1(group.body, options, true, [\"mopen\", \"mclose\"]);\n var innerHeight = 0;\n var innerDepth = 0;\n var hadMiddle = false; // Calculate its height and depth\n\n for (var i = 0; i < inner.length; i++) {\n // Property `isMiddle` not defined on `span`. See comment in\n // \"middle\"'s htmlBuilder.\n // $FlowFixMe\n if (inner[i].isMiddle) {\n hadMiddle = true;\n } else {\n innerHeight = Math.max(inner[i].height, innerHeight);\n innerDepth = Math.max(inner[i].depth, innerDepth);\n }\n } // The size of delimiters is the same, regardless of what style we are\n // in. Thus, to correctly calculate the size of delimiter we need around\n // a group, we scale down the inner size based on the size.\n\n\n innerHeight *= options.sizeMultiplier;\n innerDepth *= options.sizeMultiplier;\n var leftDelim;\n\n if (group.left === \".\") {\n // Empty delimiters in \\left and \\right make null delimiter spaces.\n leftDelim = makeNullDelimiter(options, [\"mopen\"]);\n } else {\n // Otherwise, use leftRightDelim to generate the correct sized\n // delimiter.\n leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, [\"mopen\"]);\n } // Add it to the beginning of the expression\n\n\n inner.unshift(leftDelim); // Handle middle delimiters\n\n if (hadMiddle) {\n for (var _i = 1; _i < inner.length; _i++) {\n var middleDelim = inner[_i]; // Property `isMiddle` not defined on `span`. See comment in\n // \"middle\"'s htmlBuilder.\n // $FlowFixMe\n\n var isMiddle = middleDelim.isMiddle;\n\n if (isMiddle) {\n // Apply the options that were active when \\middle was called\n inner[_i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []);\n }\n }\n }\n\n var rightDelim; // Same for the right delimiter, but using color specified by \\color\n\n if (group.right === \".\") {\n rightDelim = makeNullDelimiter(options, [\"mclose\"]);\n } else {\n var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options;\n rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, [\"mclose\"]);\n } // Add it to the end of the expression.\n\n\n inner.push(rightDelim);\n return buildCommon.makeSpan([\"minner\"], inner, options);\n },\n mathmlBuilder: (group, options) => {\n assertParsed(group);\n var inner = buildExpression(group.body, options);\n\n if (group.left !== \".\") {\n var leftNode = new mathMLTree.MathNode(\"mo\", [makeText(group.left, group.mode)]);\n leftNode.setAttribute(\"fence\", \"true\");\n inner.unshift(leftNode);\n }\n\n if (group.right !== \".\") {\n var rightNode = new mathMLTree.MathNode(\"mo\", [makeText(group.right, group.mode)]);\n rightNode.setAttribute(\"fence\", \"true\");\n\n if (group.rightColor) {\n rightNode.setAttribute(\"mathcolor\", group.rightColor);\n }\n\n inner.push(rightNode);\n }\n\n return makeRow(inner);\n }\n});\ndefineFunction({\n type: \"middle\",\n names: [\"\\\\middle\"],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (context, args) => {\n var delim = checkDelimiter(args[0], context);\n\n if (!context.parser.leftrightDepth) {\n throw new ParseError(\"\\\\middle without preceding \\\\left\", delim);\n }\n\n return {\n type: \"middle\",\n mode: context.parser.mode,\n delim: delim.text\n };\n },\n htmlBuilder: (group, options) => {\n var middleDelim;\n\n if (group.delim === \".\") {\n middleDelim = makeNullDelimiter(options, []);\n } else {\n middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []);\n var isMiddle = {\n delim: group.delim,\n options\n }; // Property `isMiddle` not defined on `span`. It is only used in\n // this file above.\n // TODO: Fix this violation of the `span` type and possibly rename\n // things since `isMiddle` sounds like a boolean, but is a struct.\n // $FlowFixMe\n\n middleDelim.isMiddle = isMiddle;\n }\n\n return middleDelim;\n },\n mathmlBuilder: (group, options) => {\n // A Firefox \\middle will stretch a character vertically only if it\n // is in the fence part of the operator dictionary at:\n // https://www.w3.org/TR/MathML3/appendixc.html.\n // So we need to avoid U+2223 and use plain \"|\" instead.\n var textNode = group.delim === \"\\\\vert\" || group.delim === \"|\" ? makeText(\"|\", \"text\") : makeText(group.delim, group.mode);\n var middleNode = new mathMLTree.MathNode(\"mo\", [textNode]);\n middleNode.setAttribute(\"fence\", \"true\"); // MathML gives 5/18em spacing to each <mo> element.\n // \\middle should get delimiter spacing instead.\n\n middleNode.setAttribute(\"lspace\", \"0.05em\");\n middleNode.setAttribute(\"rspace\", \"0.05em\");\n return middleNode;\n }\n});\n\nvar htmlBuilder$7 = (group, options) => {\n // \\cancel, \\bcancel, \\xcancel, \\sout, \\fbox, \\colorbox, \\fcolorbox, \\phase\n // Some groups can return document fragments. Handle those by wrapping\n // them in a span.\n var inner = buildCommon.wrapFragment(buildGroup$1(group.body, options), options);\n var label = group.label.slice(1);\n var scale = options.sizeMultiplier;\n var img;\n var imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different\n // depending on whether the subject is wider than it is tall, or vice versa.\n // We don't know the width of a group, so as a proxy, we test if\n // the subject is a single character. This captures most of the\n // subjects that should get the \"tall\" treatment.\n\n var isSingleChar = utils.isCharacterBox(group.body);\n\n if (label === \"sout\") {\n img = buildCommon.makeSpan([\"stretchy\", \"sout\"]);\n img.height = options.fontMetrics().defaultRuleThickness / scale;\n imgShift = -0.5 * options.fontMetrics().xHeight;\n } else if (label === \"phase\") {\n // Set a couple of dimensions from the steinmetz package.\n var lineWeight = calculateSize({\n number: 0.6,\n unit: \"pt\"\n }, options);\n var clearance = calculateSize({\n number: 0.35,\n unit: \"ex\"\n }, options); // Prevent size changes like \\Huge from affecting line thickness\n\n var newOptions = options.havingBaseSizing();\n scale = scale / newOptions.sizeMultiplier;\n var angleHeight = inner.height + inner.depth + lineWeight + clearance; // Reserve a left pad for the angle.\n\n inner.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight); // Create an SVG\n\n var viewBoxHeight = Math.floor(1000 * angleHeight * scale);\n var path = phasePath(viewBoxHeight);\n var svgNode = new SvgNode([new PathNode(\"phase\", path)], {\n \"width\": \"400em\",\n \"height\": makeEm(viewBoxHeight / 1000),\n \"viewBox\": \"0 0 400000 \" + viewBoxHeight,\n \"preserveAspectRatio\": \"xMinYMin slice\"\n }); // Wrap it in a span with overflow: hidden.\n\n img = buildCommon.makeSvgSpan([\"hide-tail\"], [svgNode], options);\n img.style.height = makeEm(angleHeight);\n imgShift = inner.depth + lineWeight + clearance;\n } else {\n // Add horizontal padding\n if (/cancel/.test(label)) {\n if (!isSingleChar) {\n inner.classes.push(\"cancel-pad\");\n }\n } else if (label === \"angl\") {\n inner.classes.push(\"anglpad\");\n } else {\n inner.classes.push(\"boxpad\");\n } // Add vertical padding\n\n\n var topPad = 0;\n var bottomPad = 0;\n var ruleThickness = 0; // ref: cancel package: \\advance\\totalheight2\\p@ % \"+2\"\n\n if (/box/.test(label)) {\n ruleThickness = Math.max(options.fontMetrics().fboxrule, // default\n options.minRuleThickness // User override.\n );\n topPad = options.fontMetrics().fboxsep + (label === \"colorbox\" ? 0 : ruleThickness);\n bottomPad = topPad;\n } else if (label === \"angl\") {\n ruleThickness = Math.max(options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n topPad = 4 * ruleThickness; // gap = 3 × line, plus the line itself.\n\n bottomPad = Math.max(0, 0.25 - inner.depth);\n } else {\n topPad = isSingleChar ? 0.2 : 0;\n bottomPad = topPad;\n }\n\n img = stretchy.encloseSpan(inner, label, topPad, bottomPad, options);\n\n if (/fbox|boxed|fcolorbox/.test(label)) {\n img.style.borderStyle = \"solid\";\n img.style.borderWidth = makeEm(ruleThickness);\n } else if (label === \"angl\" && ruleThickness !== 0.049) {\n img.style.borderTopWidth = makeEm(ruleThickness);\n img.style.borderRightWidth = makeEm(ruleThickness);\n }\n\n imgShift = inner.depth + bottomPad;\n\n if (group.backgroundColor) {\n img.style.backgroundColor = group.backgroundColor;\n\n if (group.borderColor) {\n img.style.borderColor = group.borderColor;\n }\n }\n }\n\n var vlist;\n\n if (group.backgroundColor) {\n vlist = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [// Put the color background behind inner;\n {\n type: \"elem\",\n elem: img,\n shift: imgShift\n }, {\n type: \"elem\",\n elem: inner,\n shift: 0\n }]\n }, options);\n } else {\n var classes = /cancel|phase/.test(label) ? [\"svg-align\"] : [];\n vlist = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [// Write the \\cancel stroke on top of inner.\n {\n type: \"elem\",\n elem: inner,\n shift: 0\n }, {\n type: \"elem\",\n elem: img,\n shift: imgShift,\n wrapperClasses: classes\n }]\n }, options);\n }\n\n if (/cancel/.test(label)) {\n // The cancel package documentation says that cancel lines add their height\n // to the expression, but tests show that isn't how it actually works.\n vlist.height = inner.height;\n vlist.depth = inner.depth;\n }\n\n if (/cancel/.test(label) && !isSingleChar) {\n // cancel does not create horiz space for its line extension.\n return buildCommon.makeSpan([\"mord\", \"cancel-lap\"], [vlist], options);\n } else {\n return buildCommon.makeSpan([\"mord\"], [vlist], options);\n }\n};\n\nvar mathmlBuilder$6 = (group, options) => {\n var fboxsep = 0;\n var node = new mathMLTree.MathNode(group.label.indexOf(\"colorbox\") > -1 ? \"mpadded\" : \"menclose\", [buildGroup(group.body, options)]);\n\n switch (group.label) {\n case \"\\\\cancel\":\n node.setAttribute(\"notation\", \"updiagonalstrike\");\n break;\n\n case \"\\\\bcancel\":\n node.setAttribute(\"notation\", \"downdiagonalstrike\");\n break;\n\n case \"\\\\phase\":\n node.setAttribute(\"notation\", \"phasorangle\");\n break;\n\n case \"\\\\sout\":\n node.setAttribute(\"notation\", \"horizontalstrike\");\n break;\n\n case \"\\\\fbox\":\n node.setAttribute(\"notation\", \"box\");\n break;\n\n case \"\\\\angl\":\n node.setAttribute(\"notation\", \"actuarial\");\n break;\n\n case \"\\\\fcolorbox\":\n case \"\\\\colorbox\":\n // <menclose> doesn't have a good notation option. So use <mpadded>\n // instead. Set some attributes that come included with <menclose>.\n fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm;\n node.setAttribute(\"width\", \"+\" + 2 * fboxsep + \"pt\");\n node.setAttribute(\"height\", \"+\" + 2 * fboxsep + \"pt\");\n node.setAttribute(\"lspace\", fboxsep + \"pt\"); //\n\n node.setAttribute(\"voffset\", fboxsep + \"pt\");\n\n if (group.label === \"\\\\fcolorbox\") {\n var thk = Math.max(options.fontMetrics().fboxrule, // default\n options.minRuleThickness // user override\n );\n node.setAttribute(\"style\", \"border: \" + thk + \"em solid \" + String(group.borderColor));\n }\n\n break;\n\n case \"\\\\xcancel\":\n node.setAttribute(\"notation\", \"updiagonalstrike downdiagonalstrike\");\n break;\n }\n\n if (group.backgroundColor) {\n node.setAttribute(\"mathbackground\", group.backgroundColor);\n }\n\n return node;\n};\n\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\colorbox\"],\n props: {\n numArgs: 2,\n allowedInText: true,\n argTypes: [\"color\", \"text\"]\n },\n\n handler(_ref, args, optArgs) {\n var {\n parser,\n funcName\n } = _ref;\n var color = assertNodeType(args[0], \"color-token\").color;\n var body = args[1];\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: funcName,\n backgroundColor: color,\n body\n };\n },\n\n htmlBuilder: htmlBuilder$7,\n mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\fcolorbox\"],\n props: {\n numArgs: 3,\n allowedInText: true,\n argTypes: [\"color\", \"color\", \"text\"]\n },\n\n handler(_ref2, args, optArgs) {\n var {\n parser,\n funcName\n } = _ref2;\n var borderColor = assertNodeType(args[0], \"color-token\").color;\n var backgroundColor = assertNodeType(args[1], \"color-token\").color;\n var body = args[2];\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: funcName,\n backgroundColor,\n borderColor,\n body\n };\n },\n\n htmlBuilder: htmlBuilder$7,\n mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\fbox\"],\n props: {\n numArgs: 1,\n argTypes: [\"hbox\"],\n allowedInText: true\n },\n\n handler(_ref3, args) {\n var {\n parser\n } = _ref3;\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: \"\\\\fbox\",\n body: args[0]\n };\n }\n\n});\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\cancel\", \"\\\\bcancel\", \"\\\\xcancel\", \"\\\\sout\", \"\\\\phase\"],\n props: {\n numArgs: 1\n },\n\n handler(_ref4, args) {\n var {\n parser,\n funcName\n } = _ref4;\n var body = args[0];\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: funcName,\n body\n };\n },\n\n htmlBuilder: htmlBuilder$7,\n mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\angl\"],\n props: {\n numArgs: 1,\n argTypes: [\"hbox\"],\n allowedInText: false\n },\n\n handler(_ref5, args) {\n var {\n parser\n } = _ref5;\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: \"\\\\angl\",\n body: args[0]\n };\n }\n\n});\n\n/**\n * All registered environments.\n * `environments.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `environments.js`.\n */\nvar _environments = {};\nfunction defineEnvironment(_ref) {\n var {\n type,\n names,\n props,\n handler,\n htmlBuilder,\n mathmlBuilder\n } = _ref;\n // Set default values of environments.\n var data = {\n type,\n numArgs: props.numArgs || 0,\n allowedInText: false,\n numOptionalArgs: 0,\n handler\n };\n\n for (var i = 0; i < names.length; ++i) {\n // TODO: The value type of _environments should be a type union of all\n // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is\n // an existential type.\n _environments[names[i]] = data;\n }\n\n if (htmlBuilder) {\n _htmlGroupBuilders[type] = htmlBuilder;\n }\n\n if (mathmlBuilder) {\n _mathmlGroupBuilders[type] = mathmlBuilder;\n }\n}\n\n/**\n * All registered global/built-in macros.\n * `macros.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `macros.js`.\n */\nvar _macros = {}; // This function might one day accept an additional argument and do more things.\n\nfunction defineMacro(name, body) {\n _macros[name] = body;\n}\n\n// Helper functions\nfunction getHLines(parser) {\n // Return an array. The array length = number of hlines.\n // Each element in the array tells if the line is dashed.\n var hlineInfo = [];\n parser.consumeSpaces();\n var nxt = parser.fetch().text;\n\n if (nxt === \"\\\\relax\") {\n // \\relax is an artifact of the \\cr macro below\n parser.consume();\n parser.consumeSpaces();\n nxt = parser.fetch().text;\n }\n\n while (nxt === \"\\\\hline\" || nxt === \"\\\\hdashline\") {\n parser.consume();\n hlineInfo.push(nxt === \"\\\\hdashline\");\n parser.consumeSpaces();\n nxt = parser.fetch().text;\n }\n\n return hlineInfo;\n}\n\nvar validateAmsEnvironmentContext = context => {\n var settings = context.parser.settings;\n\n if (!settings.displayMode) {\n throw new ParseError(\"{\" + context.envName + \"} can be used only in\" + \" display mode.\");\n }\n}; // autoTag (an argument to parseArray) can be one of three values:\n// * undefined: Regular (not-top-level) array; no tags on each row\n// * true: Automatic equation numbering, overridable by \\tag\n// * false: Tags allowed on each row, but no automatic numbering\n// This function *doesn't* work with the \"split\" environment name.\n\n\nfunction getAutoTag(name) {\n if (name.indexOf(\"ed\") === -1) {\n return name.indexOf(\"*\") === -1;\n } // return undefined;\n\n}\n/**\n * Parse the body of the environment, with rows delimited by \\\\ and\n * columns delimited by &, and create a nested list in row-major order\n * with one group per cell. If given an optional argument style\n * (\"text\", \"display\", etc.), then each cell is cast into that style.\n */\n\n\nfunction parseArray(parser, _ref, style) {\n var {\n hskipBeforeAndAfter,\n addJot,\n cols,\n arraystretch,\n colSeparationType,\n autoTag,\n singleRow,\n emptySingleRow,\n maxNumCols,\n leqno\n } = _ref;\n parser.gullet.beginGroup();\n\n if (!singleRow) {\n // \\cr is equivalent to \\\\ without the optional size argument (see below)\n // TODO: provide helpful error when \\cr is used outside array environment\n parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n } // Get current arraystretch if it's not set by the environment\n\n\n if (!arraystretch) {\n var stretch = parser.gullet.expandMacroAsText(\"\\\\arraystretch\");\n\n if (stretch == null) {\n // Default \\arraystretch from lttab.dtx\n arraystretch = 1;\n } else {\n arraystretch = parseFloat(stretch);\n\n if (!arraystretch || arraystretch < 0) {\n throw new ParseError(\"Invalid \\\\arraystretch: \" + stretch);\n }\n }\n } // Start group for first cell\n\n\n parser.gullet.beginGroup();\n var row = [];\n var body = [row];\n var rowGaps = [];\n var hLinesBeforeRow = [];\n var tags = autoTag != null ? [] : undefined; // amsmath uses \\global\\@eqnswtrue and \\global\\@eqnswfalse to represent\n // whether this row should have an equation number. Simulate this with\n // a \\@eqnsw macro set to 1 or 0.\n\n function beginRow() {\n if (autoTag) {\n parser.gullet.macros.set(\"\\\\@eqnsw\", \"1\", true);\n }\n }\n\n function endRow() {\n if (tags) {\n if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n tags.push(parser.subparse([new Token(\"\\\\df@tag\")]));\n parser.gullet.macros.set(\"\\\\df@tag\", undefined, true);\n } else {\n tags.push(Boolean(autoTag) && parser.gullet.macros.get(\"\\\\@eqnsw\") === \"1\");\n }\n }\n }\n\n beginRow(); // Test for \\hline at the top of the array.\n\n hLinesBeforeRow.push(getHLines(parser));\n\n while (true) {\n // eslint-disable-line no-constant-condition\n // Parse each cell in its own group (namespace)\n var cell = parser.parseExpression(false, singleRow ? \"\\\\end\" : \"\\\\\\\\\");\n parser.gullet.endGroup();\n parser.gullet.beginGroup();\n cell = {\n type: \"ordgroup\",\n mode: parser.mode,\n body: cell\n };\n\n if (style) {\n cell = {\n type: \"styling\",\n mode: parser.mode,\n style,\n body: [cell]\n };\n }\n\n row.push(cell);\n var next = parser.fetch().text;\n\n if (next === \"&\") {\n if (maxNumCols && row.length === maxNumCols) {\n if (singleRow || colSeparationType) {\n // {equation} or {split}\n throw new ParseError(\"Too many tab characters: &\", parser.nextToken);\n } else {\n // {array} environment\n parser.settings.reportNonstrict(\"textEnv\", \"Too few columns \" + \"specified in the {array} column argument.\");\n }\n }\n\n parser.consume();\n } else if (next === \"\\\\end\") {\n endRow(); // Arrays terminate newlines with `\\crcr` which consumes a `\\cr` if\n // the last line is empty. However, AMS environments keep the\n // empty row if it's the only one.\n // NOTE: Currently, `cell` is the last item added into `row`.\n\n if (row.length === 1 && cell.type === \"styling\" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) {\n body.pop();\n }\n\n if (hLinesBeforeRow.length < body.length + 1) {\n hLinesBeforeRow.push([]);\n }\n\n break;\n } else if (next === \"\\\\\\\\\") {\n parser.consume();\n var size = void 0; // \\def\\Let@{\\let\\\\\\math@cr}\n // \\def\\math@cr{...\\math@cr@}\n // \\def\\math@cr@{\\new@ifnextchar[\\math@cr@@{\\math@cr@@[\\z@]}}\n // \\def\\math@cr@@[#1]{...\\math@cr@@@...}\n // \\def\\math@cr@@@{\\cr}\n\n if (parser.gullet.future().text !== \" \") {\n size = parser.parseSizeGroup(true);\n }\n\n rowGaps.push(size ? size.value : null);\n endRow(); // check for \\hline(s) following the row separator\n\n hLinesBeforeRow.push(getHLines(parser));\n row = [];\n body.push(row);\n beginRow();\n } else {\n throw new ParseError(\"Expected & or \\\\\\\\ or \\\\cr or \\\\end\", parser.nextToken);\n }\n } // End cell group\n\n\n parser.gullet.endGroup(); // End array group defining \\cr\n\n parser.gullet.endGroup();\n return {\n type: \"array\",\n mode: parser.mode,\n addJot,\n arraystretch,\n body,\n cols,\n rowGaps,\n hskipBeforeAndAfter,\n hLinesBeforeRow,\n colSeparationType,\n tags,\n leqno\n };\n} // Decides on a style for cells in an array according to whether the given\n// environment name starts with the letter 'd'.\n\n\nfunction dCellStyle(envName) {\n if (envName.slice(0, 1) === \"d\") {\n return \"display\";\n } else {\n return \"text\";\n }\n}\n\nvar htmlBuilder$6 = function htmlBuilder(group, options) {\n var r;\n var c;\n var nr = group.body.length;\n var hLinesBeforeRow = group.hLinesBeforeRow;\n var nc = 0;\n var body = new Array(nr);\n var hlines = [];\n var ruleThickness = Math.max( // From LaTeX \\showthe\\arrayrulewidth. Equals 0.04 em.\n options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override.\n ); // Horizontal spacing\n\n var pt = 1 / options.fontMetrics().ptPerEm;\n var arraycolsep = 5 * pt; // default value, i.e. \\arraycolsep in article.cls\n\n if (group.colSeparationType && group.colSeparationType === \"small\") {\n // We're in a {smallmatrix}. Default column space is \\thickspace,\n // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}.\n // But that needs adjustment because LaTeX applies \\scriptstyle to the\n // entire array, including the colspace, but this function applies\n // \\scriptstyle only inside each element.\n var localMultiplier = options.havingStyle(Style$1.SCRIPT).sizeMultiplier;\n arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier);\n } // Vertical spacing\n\n\n var baselineskip = group.colSeparationType === \"CD\" ? calculateSize({\n number: 3,\n unit: \"ex\"\n }, options) : 12 * pt; // see size10.clo\n // Default \\jot from ltmath.dtx\n // TODO(edemaine): allow overriding \\jot via \\setlength (#687)\n\n var jot = 3 * pt;\n var arrayskip = group.arraystretch * baselineskip;\n var arstrutHeight = 0.7 * arrayskip; // \\strutbox in ltfsstrc.dtx and\n\n var arstrutDepth = 0.3 * arrayskip; // \\@arstrutbox in lttab.dtx\n\n var totalHeight = 0; // Set a position for \\hline(s) at the top of the array, if any.\n\n function setHLinePos(hlinesInGap) {\n for (var i = 0; i < hlinesInGap.length; ++i) {\n if (i > 0) {\n totalHeight += 0.25;\n }\n\n hlines.push({\n pos: totalHeight,\n isDashed: hlinesInGap[i]\n });\n }\n }\n\n setHLinePos(hLinesBeforeRow[0]);\n\n for (r = 0; r < group.body.length; ++r) {\n var inrow = group.body[r];\n var height = arstrutHeight; // \\@array adds an \\@arstrut\n\n var depth = arstrutDepth; // to each tow (via the template)\n\n if (nc < inrow.length) {\n nc = inrow.length;\n }\n\n var outrow = new Array(inrow.length);\n\n for (c = 0; c < inrow.length; ++c) {\n var elt = buildGroup$1(inrow[c], options);\n\n if (depth < elt.depth) {\n depth = elt.depth;\n }\n\n if (height < elt.height) {\n height = elt.height;\n }\n\n outrow[c] = elt;\n }\n\n var rowGap = group.rowGaps[r];\n var gap = 0;\n\n if (rowGap) {\n gap = calculateSize(rowGap, options);\n\n if (gap > 0) {\n // \\@argarraycr\n gap += arstrutDepth;\n\n if (depth < gap) {\n depth = gap; // \\@xargarraycr\n }\n\n gap = 0;\n }\n } // In AMS multiline environments such as aligned and gathered, rows\n // correspond to lines that have additional \\jot added to the\n // \\baselineskip via \\openup.\n\n\n if (group.addJot) {\n depth += jot;\n }\n\n outrow.height = height;\n outrow.depth = depth;\n totalHeight += height;\n outrow.pos = totalHeight;\n totalHeight += depth + gap; // \\@yargarraycr\n\n body[r] = outrow; // Set a position for \\hline(s), if any.\n\n setHLinePos(hLinesBeforeRow[r + 1]);\n }\n\n var offset = totalHeight / 2 + options.fontMetrics().axisHeight;\n var colDescriptions = group.cols || [];\n var cols = [];\n var colSep;\n var colDescrNum;\n var tagSpans = [];\n\n if (group.tags && group.tags.some(tag => tag)) {\n // An environment with manual tags and/or automatic equation numbers.\n // Create node(s), the latter of which trigger CSS counter increment.\n for (r = 0; r < nr; ++r) {\n var rw = body[r];\n var shift = rw.pos - offset;\n var tag = group.tags[r];\n var tagSpan = void 0;\n\n if (tag === true) {\n // automatic numbering\n tagSpan = buildCommon.makeSpan([\"eqn-num\"], [], options);\n } else if (tag === false) {\n // \\nonumber/\\notag or starred environment\n tagSpan = buildCommon.makeSpan([], [], options);\n } else {\n // manual \\tag\n tagSpan = buildCommon.makeSpan([], buildExpression$1(tag, options, true), options);\n }\n\n tagSpan.depth = rw.depth;\n tagSpan.height = rw.height;\n tagSpans.push({\n type: \"elem\",\n elem: tagSpan,\n shift\n });\n }\n }\n\n for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column\n // descriptions, so trailing separators don't get lost.\n c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) {\n var colDescr = colDescriptions[colDescrNum] || {};\n var firstSeparator = true;\n\n while (colDescr.type === \"separator\") {\n // If there is more than one separator in a row, add a space\n // between them.\n if (!firstSeparator) {\n colSep = buildCommon.makeSpan([\"arraycolsep\"], []);\n colSep.style.width = makeEm(options.fontMetrics().doubleRuleSep);\n cols.push(colSep);\n }\n\n if (colDescr.separator === \"|\" || colDescr.separator === \":\") {\n var lineType = colDescr.separator === \"|\" ? \"solid\" : \"dashed\";\n var separator = buildCommon.makeSpan([\"vertical-separator\"], [], options);\n separator.style.height = makeEm(totalHeight);\n separator.style.borderRightWidth = makeEm(ruleThickness);\n separator.style.borderRightStyle = lineType;\n separator.style.margin = \"0 \" + makeEm(-ruleThickness / 2);\n\n var _shift = totalHeight - offset;\n\n if (_shift) {\n separator.style.verticalAlign = makeEm(-_shift);\n }\n\n cols.push(separator);\n } else {\n throw new ParseError(\"Invalid separator type: \" + colDescr.separator);\n }\n\n colDescrNum++;\n colDescr = colDescriptions[colDescrNum] || {};\n firstSeparator = false;\n }\n\n if (c >= nc) {\n continue;\n }\n\n var sepwidth = void 0;\n\n if (c > 0 || group.hskipBeforeAndAfter) {\n sepwidth = utils.deflt(colDescr.pregap, arraycolsep);\n\n if (sepwidth !== 0) {\n colSep = buildCommon.makeSpan([\"arraycolsep\"], []);\n colSep.style.width = makeEm(sepwidth);\n cols.push(colSep);\n }\n }\n\n var col = [];\n\n for (r = 0; r < nr; ++r) {\n var row = body[r];\n var elem = row[c];\n\n if (!elem) {\n continue;\n }\n\n var _shift2 = row.pos - offset;\n\n elem.depth = row.depth;\n elem.height = row.height;\n col.push({\n type: \"elem\",\n elem: elem,\n shift: _shift2\n });\n }\n\n col = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: col\n }, options);\n col = buildCommon.makeSpan([\"col-align-\" + (colDescr.align || \"c\")], [col]);\n cols.push(col);\n\n if (c < nc - 1 || group.hskipBeforeAndAfter) {\n sepwidth = utils.deflt(colDescr.postgap, arraycolsep);\n\n if (sepwidth !== 0) {\n colSep = buildCommon.makeSpan([\"arraycolsep\"], []);\n colSep.style.width = makeEm(sepwidth);\n cols.push(colSep);\n }\n }\n }\n\n body = buildCommon.makeSpan([\"mtable\"], cols); // Add \\hline(s), if any.\n\n if (hlines.length > 0) {\n var line = buildCommon.makeLineSpan(\"hline\", options, ruleThickness);\n var dashes = buildCommon.makeLineSpan(\"hdashline\", options, ruleThickness);\n var vListElems = [{\n type: \"elem\",\n elem: body,\n shift: 0\n }];\n\n while (hlines.length > 0) {\n var hline = hlines.pop();\n var lineShift = hline.pos - offset;\n\n if (hline.isDashed) {\n vListElems.push({\n type: \"elem\",\n elem: dashes,\n shift: lineShift\n });\n } else {\n vListElems.push({\n type: \"elem\",\n elem: line,\n shift: lineShift\n });\n }\n }\n\n body = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: vListElems\n }, options);\n }\n\n if (tagSpans.length === 0) {\n return buildCommon.makeSpan([\"mord\"], [body], options);\n } else {\n var eqnNumCol = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: tagSpans\n }, options);\n eqnNumCol = buildCommon.makeSpan([\"tag\"], [eqnNumCol], options);\n return buildCommon.makeFragment([body, eqnNumCol]);\n }\n};\n\nvar alignMap = {\n c: \"center \",\n l: \"left \",\n r: \"right \"\n};\n\nvar mathmlBuilder$5 = function mathmlBuilder(group, options) {\n var tbl = [];\n var glue = new mathMLTree.MathNode(\"mtd\", [], [\"mtr-glue\"]);\n var tag = new mathMLTree.MathNode(\"mtd\", [], [\"mml-eqn-num\"]);\n\n for (var i = 0; i < group.body.length; i++) {\n var rw = group.body[i];\n var row = [];\n\n for (var j = 0; j < rw.length; j++) {\n row.push(new mathMLTree.MathNode(\"mtd\", [buildGroup(rw[j], options)]));\n }\n\n if (group.tags && group.tags[i]) {\n row.unshift(glue);\n row.push(glue);\n\n if (group.leqno) {\n row.unshift(tag);\n } else {\n row.push(tag);\n }\n }\n\n tbl.push(new mathMLTree.MathNode(\"mtr\", row));\n }\n\n var table = new mathMLTree.MathNode(\"mtable\", tbl); // Set column alignment, row spacing, column spacing, and\n // array lines by setting attributes on the table element.\n // Set the row spacing. In MathML, we specify a gap distance.\n // We do not use rowGap[] because MathML automatically increases\n // cell height with the height/depth of the element content.\n // LaTeX \\arraystretch multiplies the row baseline-to-baseline distance.\n // We simulate this by adding (arraystretch - 1)em to the gap. This\n // does a reasonable job of adjusting arrays containing 1 em tall content.\n // The 0.16 and 0.09 values are found empirically. They produce an array\n // similar to LaTeX and in which content does not interfere with \\hlines.\n\n var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray}\n : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0);\n table.setAttribute(\"rowspacing\", makeEm(gap)); // MathML table lines go only between cells.\n // To place a line on an edge we'll use <menclose>, if necessary.\n\n var menclose = \"\";\n var align = \"\";\n\n if (group.cols && group.cols.length > 0) {\n // Find column alignment, column spacing, and vertical lines.\n var cols = group.cols;\n var columnLines = \"\";\n var prevTypeWasAlign = false;\n var iStart = 0;\n var iEnd = cols.length;\n\n if (cols[0].type === \"separator\") {\n menclose += \"top \";\n iStart = 1;\n }\n\n if (cols[cols.length - 1].type === \"separator\") {\n menclose += \"bottom \";\n iEnd -= 1;\n }\n\n for (var _i = iStart; _i < iEnd; _i++) {\n if (cols[_i].type === \"align\") {\n align += alignMap[cols[_i].align];\n\n if (prevTypeWasAlign) {\n columnLines += \"none \";\n }\n\n prevTypeWasAlign = true;\n } else if (cols[_i].type === \"separator\") {\n // MathML accepts only single lines between cells.\n // So we read only the first of consecutive separators.\n if (prevTypeWasAlign) {\n columnLines += cols[_i].separator === \"|\" ? \"solid \" : \"dashed \";\n prevTypeWasAlign = false;\n }\n }\n }\n\n table.setAttribute(\"columnalign\", align.trim());\n\n if (/[sd]/.test(columnLines)) {\n table.setAttribute(\"columnlines\", columnLines.trim());\n }\n } // Set column spacing.\n\n\n if (group.colSeparationType === \"align\") {\n var _cols = group.cols || [];\n\n var spacing = \"\";\n\n for (var _i2 = 1; _i2 < _cols.length; _i2++) {\n spacing += _i2 % 2 ? \"0em \" : \"1em \";\n }\n\n table.setAttribute(\"columnspacing\", spacing.trim());\n } else if (group.colSeparationType === \"alignat\" || group.colSeparationType === \"gather\") {\n table.setAttribute(\"columnspacing\", \"0em\");\n } else if (group.colSeparationType === \"small\") {\n table.setAttribute(\"columnspacing\", \"0.2778em\");\n } else if (group.colSeparationType === \"CD\") {\n table.setAttribute(\"columnspacing\", \"0.5em\");\n } else {\n table.setAttribute(\"columnspacing\", \"1em\");\n } // Address \\hline and \\hdashline\n\n\n var rowLines = \"\";\n var hlines = group.hLinesBeforeRow;\n menclose += hlines[0].length > 0 ? \"left \" : \"\";\n menclose += hlines[hlines.length - 1].length > 0 ? \"right \" : \"\";\n\n for (var _i3 = 1; _i3 < hlines.length - 1; _i3++) {\n rowLines += hlines[_i3].length === 0 ? \"none \" // MathML accepts only a single line between rows. Read one element.\n : hlines[_i3][0] ? \"dashed \" : \"solid \";\n }\n\n if (/[sd]/.test(rowLines)) {\n table.setAttribute(\"rowlines\", rowLines.trim());\n }\n\n if (menclose !== \"\") {\n table = new mathMLTree.MathNode(\"menclose\", [table]);\n table.setAttribute(\"notation\", menclose.trim());\n }\n\n if (group.arraystretch && group.arraystretch < 1) {\n // A small array. Wrap in scriptstyle so row gap is not too large.\n table = new mathMLTree.MathNode(\"mstyle\", [table]);\n table.setAttribute(\"scriptlevel\", \"1\");\n }\n\n return table;\n}; // Convenience function for align, align*, aligned, alignat, alignat*, alignedat.\n\n\nvar alignedHandler = function alignedHandler(context, args) {\n if (context.envName.indexOf(\"ed\") === -1) {\n validateAmsEnvironmentContext(context);\n }\n\n var cols = [];\n var separationType = context.envName.indexOf(\"at\") > -1 ? \"alignat\" : \"align\";\n var isSplit = context.envName === \"split\";\n var res = parseArray(context.parser, {\n cols,\n addJot: true,\n autoTag: isSplit ? undefined : getAutoTag(context.envName),\n emptySingleRow: true,\n colSeparationType: separationType,\n maxNumCols: isSplit ? 2 : undefined,\n leqno: context.parser.settings.leqno\n }, \"display\"); // Determining number of columns.\n // 1. If the first argument is given, we use it as a number of columns,\n // and makes sure that each row doesn't exceed that number.\n // 2. Otherwise, just count number of columns = maximum number\n // of cells in each row (\"aligned\" mode -- isAligned will be true).\n //\n // At the same time, prepend empty group {} at beginning of every second\n // cell in each row (starting with second cell) so that operators become\n // binary. This behavior is implemented in amsmath's \\start@aligned.\n\n var numMaths;\n var numCols = 0;\n var emptyGroup = {\n type: \"ordgroup\",\n mode: context.mode,\n body: []\n };\n\n if (args[0] && args[0].type === \"ordgroup\") {\n var arg0 = \"\";\n\n for (var i = 0; i < args[0].body.length; i++) {\n var textord = assertNodeType(args[0].body[i], \"textord\");\n arg0 += textord.text;\n }\n\n numMaths = Number(arg0);\n numCols = numMaths * 2;\n }\n\n var isAligned = !numCols;\n res.body.forEach(function (row) {\n for (var _i4 = 1; _i4 < row.length; _i4 += 2) {\n // Modify ordgroup node within styling node\n var styling = assertNodeType(row[_i4], \"styling\");\n var ordgroup = assertNodeType(styling.body[0], \"ordgroup\");\n ordgroup.body.unshift(emptyGroup);\n }\n\n if (!isAligned) {\n // Case 1\n var curMaths = row.length / 2;\n\n if (numMaths < curMaths) {\n throw new ParseError(\"Too many math in a row: \" + (\"expected \" + numMaths + \", but got \" + curMaths), row[0]);\n }\n } else if (numCols < row.length) {\n // Case 2\n numCols = row.length;\n }\n }); // Adjusting alignment.\n // In aligned mode, we add one \\qquad between columns;\n // otherwise we add nothing.\n\n for (var _i5 = 0; _i5 < numCols; ++_i5) {\n var align = \"r\";\n var pregap = 0;\n\n if (_i5 % 2 === 1) {\n align = \"l\";\n } else if (_i5 > 0 && isAligned) {\n // \"aligned\" mode.\n pregap = 1; // add one \\quad\n }\n\n cols[_i5] = {\n type: \"align\",\n align: align,\n pregap: pregap,\n postgap: 0\n };\n }\n\n res.colSeparationType = isAligned ? \"align\" : \"alignat\";\n return res;\n}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation\n// is part of the source2e.pdf file of LaTeX2e source documentation.\n// {darray} is an {array} environment where cells are set in \\displaystyle,\n// as defined in nccmath.sty.\n\n\ndefineEnvironment({\n type: \"array\",\n names: [\"array\", \"darray\"],\n props: {\n numArgs: 1\n },\n\n handler(context, args) {\n // Since no types are specified above, the two possibilities are\n // - The argument is wrapped in {} or [], in which case Parser's\n // parseGroup() returns an \"ordgroup\" wrapping some symbol node.\n // - The argument is a bare symbol node.\n var symNode = checkSymbolNodeType(args[0]);\n var colalign = symNode ? [args[0]] : assertNodeType(args[0], \"ordgroup\").body;\n var cols = colalign.map(function (nde) {\n var node = assertSymbolNodeType(nde);\n var ca = node.text;\n\n if (\"lcr\".indexOf(ca) !== -1) {\n return {\n type: \"align\",\n align: ca\n };\n } else if (ca === \"|\") {\n return {\n type: \"separator\",\n separator: \"|\"\n };\n } else if (ca === \":\") {\n return {\n type: \"separator\",\n separator: \":\"\n };\n }\n\n throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n });\n var res = {\n cols,\n hskipBeforeAndAfter: true,\n // \\@preamble in lttab.dtx\n maxNumCols: cols.length\n };\n return parseArray(context.parser, res, dCellStyle(context.envName));\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // The matrix environments of amsmath builds on the array environment\n// of LaTeX, which is discussed above.\n// The mathtools package adds starred versions of the same environments.\n// These have an optional argument to choose left|center|right justification.\n\ndefineEnvironment({\n type: \"array\",\n names: [\"matrix\", \"pmatrix\", \"bmatrix\", \"Bmatrix\", \"vmatrix\", \"Vmatrix\", \"matrix*\", \"pmatrix*\", \"bmatrix*\", \"Bmatrix*\", \"vmatrix*\", \"Vmatrix*\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n var delimiters = {\n \"matrix\": null,\n \"pmatrix\": [\"(\", \")\"],\n \"bmatrix\": [\"[\", \"]\"],\n \"Bmatrix\": [\"\\\\{\", \"\\\\}\"],\n \"vmatrix\": [\"|\", \"|\"],\n \"Vmatrix\": [\"\\\\Vert\", \"\\\\Vert\"]\n }[context.envName.replace(\"*\", \"\")]; // \\hskip -\\arraycolsep in amsmath\n\n var colAlign = \"c\";\n var payload = {\n hskipBeforeAndAfter: false,\n cols: [{\n type: \"align\",\n align: colAlign\n }]\n };\n\n if (context.envName.charAt(context.envName.length - 1) === \"*\") {\n // It's one of the mathtools starred functions.\n // Parse the optional alignment argument.\n var parser = context.parser;\n parser.consumeSpaces();\n\n if (parser.fetch().text === \"[\") {\n parser.consume();\n parser.consumeSpaces();\n colAlign = parser.fetch().text;\n\n if (\"lcr\".indexOf(colAlign) === -1) {\n throw new ParseError(\"Expected l or c or r\", parser.nextToken);\n }\n\n parser.consume();\n parser.consumeSpaces();\n parser.expect(\"]\");\n parser.consume();\n payload.cols = [{\n type: \"align\",\n align: colAlign\n }];\n }\n }\n\n var res = parseArray(context.parser, payload, dCellStyle(context.envName)); // Populate cols with the correct number of column alignment specs.\n\n var numCols = Math.max(0, ...res.body.map(row => row.length));\n res.cols = new Array(numCols).fill({\n type: \"align\",\n align: colAlign\n });\n return delimiters ? {\n type: \"leftright\",\n mode: context.mode,\n body: [res],\n left: delimiters[0],\n right: delimiters[1],\n rightColor: undefined // \\right uninfluenced by \\color in array\n\n } : res;\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n type: \"array\",\n names: [\"smallmatrix\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n var payload = {\n arraystretch: 0.5\n };\n var res = parseArray(context.parser, payload, \"script\");\n res.colSeparationType = \"small\";\n return res;\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n type: \"array\",\n names: [\"subarray\"],\n props: {\n numArgs: 1\n },\n\n handler(context, args) {\n // Parsing of {subarray} is similar to {array}\n var symNode = checkSymbolNodeType(args[0]);\n var colalign = symNode ? [args[0]] : assertNodeType(args[0], \"ordgroup\").body;\n var cols = colalign.map(function (nde) {\n var node = assertSymbolNodeType(nde);\n var ca = node.text; // {subarray} only recognizes \"l\" & \"c\"\n\n if (\"lc\".indexOf(ca) !== -1) {\n return {\n type: \"align\",\n align: ca\n };\n }\n\n throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n });\n\n if (cols.length > 1) {\n throw new ParseError(\"{subarray} can contain only one column\");\n }\n\n var res = {\n cols,\n hskipBeforeAndAfter: false,\n arraystretch: 0.5\n };\n res = parseArray(context.parser, res, \"script\");\n\n if (res.body.length > 0 && res.body[0].length > 1) {\n throw new ParseError(\"{subarray} can contain only one column\");\n }\n\n return res;\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // A cases environment (in amsmath.sty) is almost equivalent to\n// \\def\\arraystretch{1.2}%\n// \\left\\{\\begin{array}{@{}l@{\\quad}l@{}} … \\end{array}\\right.\n// {dcases} is a {cases} environment where cells are set in \\displaystyle,\n// as defined in mathtools.sty.\n// {rcases} is another mathtools environment. It's brace is on the right side.\n\ndefineEnvironment({\n type: \"array\",\n names: [\"cases\", \"dcases\", \"rcases\", \"drcases\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n var payload = {\n arraystretch: 1.2,\n cols: [{\n type: \"align\",\n align: \"l\",\n pregap: 0,\n // TODO(kevinb) get the current style.\n // For now we use the metrics for TEXT style which is what we were\n // doing before. Before attempting to get the current style we\n // should look at TeX's behavior especially for \\over and matrices.\n postgap: 1.0\n /* 1em quad */\n\n }, {\n type: \"align\",\n align: \"l\",\n pregap: 0,\n postgap: 0\n }]\n };\n var res = parseArray(context.parser, payload, dCellStyle(context.envName));\n return {\n type: \"leftright\",\n mode: context.mode,\n body: [res],\n left: context.envName.indexOf(\"r\") > -1 ? \".\" : \"\\\\{\",\n right: context.envName.indexOf(\"r\") > -1 ? \"\\\\}\" : \".\",\n rightColor: undefined\n };\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // In the align environment, one uses ampersands, &, to specify number of\n// columns in each row, and to locate spacing between each column.\n// align gets automatic numbering. align* and aligned do not.\n// The alignedat environment can be used in math mode.\n// Note that we assume \\nomallineskiplimit to be zero,\n// so that \\strut@ is the same as \\strut.\n\ndefineEnvironment({\n type: \"array\",\n names: [\"align\", \"align*\", \"aligned\", \"split\"],\n props: {\n numArgs: 0\n },\n handler: alignedHandler,\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // A gathered environment is like an array environment with one centered\n// column, but where rows are considered lines so get \\jot line spacing\n// and contents are set in \\displaystyle.\n\ndefineEnvironment({\n type: \"array\",\n names: [\"gathered\", \"gather\", \"gather*\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n if ([\"gather\", \"gather*\"].includes(context.envName)) {\n validateAmsEnvironmentContext(context);\n }\n\n var res = {\n cols: [{\n type: \"align\",\n align: \"c\"\n }],\n addJot: true,\n colSeparationType: \"gather\",\n autoTag: getAutoTag(context.envName),\n emptySingleRow: true,\n leqno: context.parser.settings.leqno\n };\n return parseArray(context.parser, res, \"display\");\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // alignat environment is like an align environment, but one must explicitly\n// specify maximum number of columns in each row, and can adjust spacing between\n// each columns.\n\ndefineEnvironment({\n type: \"array\",\n names: [\"alignat\", \"alignat*\", \"alignedat\"],\n props: {\n numArgs: 1\n },\n handler: alignedHandler,\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n type: \"array\",\n names: [\"equation\", \"equation*\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n validateAmsEnvironmentContext(context);\n var res = {\n autoTag: getAutoTag(context.envName),\n emptySingleRow: true,\n singleRow: true,\n maxNumCols: 1,\n leqno: context.parser.settings.leqno\n };\n return parseArray(context.parser, res, \"display\");\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n type: \"array\",\n names: [\"CD\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n validateAmsEnvironmentContext(context);\n return parseCD(context.parser);\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineMacro(\"\\\\nonumber\", \"\\\\gdef\\\\@eqnsw{0}\");\ndefineMacro(\"\\\\notag\", \"\\\\nonumber\"); // Catch \\hline outside array environment\n\ndefineFunction({\n type: \"text\",\n // Doesn't matter what this is.\n names: [\"\\\\hline\", \"\\\\hdashline\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: true\n },\n\n handler(context, args) {\n throw new ParseError(context.funcName + \" valid only within array environment\");\n }\n\n});\n\nvar environments = _environments;\n\n// defineEnvironment definitions.\n\ndefineFunction({\n type: \"environment\",\n names: [\"\\\\begin\", \"\\\\end\"],\n props: {\n numArgs: 1,\n argTypes: [\"text\"]\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n var nameGroup = args[0];\n\n if (nameGroup.type !== \"ordgroup\") {\n throw new ParseError(\"Invalid environment name\", nameGroup);\n }\n\n var envName = \"\";\n\n for (var i = 0; i < nameGroup.body.length; ++i) {\n envName += assertNodeType(nameGroup.body[i], \"textord\").text;\n }\n\n if (funcName === \"\\\\begin\") {\n // begin...end is similar to left...right\n if (!environments.hasOwnProperty(envName)) {\n throw new ParseError(\"No such environment: \" + envName, nameGroup);\n } // Build the environment object. Arguments and other information will\n // be made available to the begin and end methods using properties.\n\n\n var env = environments[envName];\n var {\n args: _args,\n optArgs\n } = parser.parseArguments(\"\\\\begin{\" + envName + \"}\", env);\n var context = {\n mode: parser.mode,\n envName,\n parser\n };\n var result = env.handler(context, _args, optArgs);\n parser.expect(\"\\\\end\", false);\n var endNameToken = parser.nextToken;\n var end = assertNodeType(parser.parseFunction(), \"environment\");\n\n if (end.name !== envName) {\n throw new ParseError(\"Mismatch: \\\\begin{\" + envName + \"} matched by \\\\end{\" + end.name + \"}\", endNameToken);\n } // $FlowFixMe, \"environment\" handler returns an environment ParseNode\n\n\n return result;\n }\n\n return {\n type: \"environment\",\n mode: parser.mode,\n name: envName,\n nameGroup\n };\n }\n\n});\n\n// TODO(kevinb): implement \\\\sl and \\\\sc\n\nvar htmlBuilder$5 = (group, options) => {\n var font = group.font;\n var newOptions = options.withFont(font);\n return buildGroup$1(group.body, newOptions);\n};\n\nvar mathmlBuilder$4 = (group, options) => {\n var font = group.font;\n var newOptions = options.withFont(font);\n return buildGroup(group.body, newOptions);\n};\n\nvar fontAliases = {\n \"\\\\Bbb\": \"\\\\mathbb\",\n \"\\\\bold\": \"\\\\mathbf\",\n \"\\\\frak\": \"\\\\mathfrak\",\n \"\\\\bm\": \"\\\\boldsymbol\"\n};\ndefineFunction({\n type: \"font\",\n names: [// styles, except \\boldsymbol defined below\n \"\\\\mathrm\", \"\\\\mathit\", \"\\\\mathbf\", \"\\\\mathnormal\", \"\\\\mathsfit\", // families\n \"\\\\mathbb\", \"\\\\mathcal\", \"\\\\mathfrak\", \"\\\\mathscr\", \"\\\\mathsf\", \"\\\\mathtt\", // aliases, except \\bm defined below\n \"\\\\Bbb\", \"\\\\bold\", \"\\\\frak\"],\n props: {\n numArgs: 1,\n allowedInArgument: true\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var body = normalizeArgument(args[0]);\n var func = funcName;\n\n if (func in fontAliases) {\n func = fontAliases[func];\n }\n\n return {\n type: \"font\",\n mode: parser.mode,\n font: func.slice(1),\n body\n };\n },\n htmlBuilder: htmlBuilder$5,\n mathmlBuilder: mathmlBuilder$4\n});\ndefineFunction({\n type: \"mclass\",\n names: [\"\\\\boldsymbol\", \"\\\\bm\"],\n props: {\n numArgs: 1\n },\n handler: (_ref2, args) => {\n var {\n parser\n } = _ref2;\n var body = args[0];\n var isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \\boldsymbol uses \\binrel spacing to inherit the\n // argument's bin|rel|ord status\n\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass: binrelClass(body),\n body: [{\n type: \"font\",\n mode: parser.mode,\n font: \"boldsymbol\",\n body\n }],\n isCharacterBox: isCharacterBox\n };\n }\n}); // Old font changing functions\n\ndefineFunction({\n type: \"font\",\n names: [\"\\\\rm\", \"\\\\sf\", \"\\\\tt\", \"\\\\bf\", \"\\\\it\", \"\\\\cal\"],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n handler: (_ref3, args) => {\n var {\n parser,\n funcName,\n breakOnTokenText\n } = _ref3;\n var {\n mode\n } = parser;\n var body = parser.parseExpression(true, breakOnTokenText);\n var style = \"math\" + funcName.slice(1);\n return {\n type: \"font\",\n mode: mode,\n font: style,\n body: {\n type: \"ordgroup\",\n mode: parser.mode,\n body\n }\n };\n },\n htmlBuilder: htmlBuilder$5,\n mathmlBuilder: mathmlBuilder$4\n});\n\nvar adjustStyle = (size, originalStyle) => {\n // Figure out what style this fraction should be in based on the\n // function used\n var style = originalStyle;\n\n if (size === \"display\") {\n // Get display style as a default.\n // If incoming style is sub/sup, use style.text() to get correct size.\n style = style.id >= Style$1.SCRIPT.id ? style.text() : Style$1.DISPLAY;\n } else if (size === \"text\" && style.size === Style$1.DISPLAY.size) {\n // We're in a \\tfrac but incoming style is displaystyle, so:\n style = Style$1.TEXT;\n } else if (size === \"script\") {\n style = Style$1.SCRIPT;\n } else if (size === \"scriptscript\") {\n style = Style$1.SCRIPTSCRIPT;\n }\n\n return style;\n};\n\nvar htmlBuilder$4 = (group, options) => {\n // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).\n var style = adjustStyle(group.size, options.style);\n var nstyle = style.fracNum();\n var dstyle = style.fracDen();\n var newOptions;\n newOptions = options.havingStyle(nstyle);\n var numerm = buildGroup$1(group.numer, newOptions, options);\n\n if (group.continued) {\n // \\cfrac inserts a \\strut into the numerator.\n // Get \\strut dimensions from TeXbook page 353.\n var hStrut = 8.5 / options.fontMetrics().ptPerEm;\n var dStrut = 3.5 / options.fontMetrics().ptPerEm;\n numerm.height = numerm.height < hStrut ? hStrut : numerm.height;\n numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth;\n }\n\n newOptions = options.havingStyle(dstyle);\n var denomm = buildGroup$1(group.denom, newOptions, options);\n var rule;\n var ruleWidth;\n var ruleSpacing;\n\n if (group.hasBarLine) {\n if (group.barSize) {\n ruleWidth = calculateSize(group.barSize, options);\n rule = buildCommon.makeLineSpan(\"frac-line\", options, ruleWidth);\n } else {\n rule = buildCommon.makeLineSpan(\"frac-line\", options);\n }\n\n ruleWidth = rule.height;\n ruleSpacing = rule.height;\n } else {\n rule = null;\n ruleWidth = 0;\n ruleSpacing = options.fontMetrics().defaultRuleThickness;\n } // Rule 15b\n\n\n var numShift;\n var clearance;\n var denomShift;\n\n if (style.size === Style$1.DISPLAY.size || group.size === \"display\") {\n numShift = options.fontMetrics().num1;\n\n if (ruleWidth > 0) {\n clearance = 3 * ruleSpacing;\n } else {\n clearance = 7 * ruleSpacing;\n }\n\n denomShift = options.fontMetrics().denom1;\n } else {\n if (ruleWidth > 0) {\n numShift = options.fontMetrics().num2;\n clearance = ruleSpacing;\n } else {\n numShift = options.fontMetrics().num3;\n clearance = 3 * ruleSpacing;\n }\n\n denomShift = options.fontMetrics().denom2;\n }\n\n var frac;\n\n if (!rule) {\n // Rule 15c\n var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift);\n\n if (candidateClearance < clearance) {\n numShift += 0.5 * (clearance - candidateClearance);\n denomShift += 0.5 * (clearance - candidateClearance);\n }\n\n frac = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [{\n type: \"elem\",\n elem: denomm,\n shift: denomShift\n }, {\n type: \"elem\",\n elem: numerm,\n shift: -numShift\n }]\n }, options);\n } else {\n // Rule 15d\n var axisHeight = options.fontMetrics().axisHeight;\n\n if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) {\n numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth));\n }\n\n if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) {\n denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift));\n }\n\n var midShift = -(axisHeight - 0.5 * ruleWidth);\n frac = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [{\n type: \"elem\",\n elem: denomm,\n shift: denomShift\n }, {\n type: \"elem\",\n elem: rule,\n shift: midShift\n }, {\n type: \"elem\",\n elem: numerm,\n shift: -numShift\n }]\n }, options);\n } // Since we manually change the style sometimes (with \\dfrac or \\tfrac),\n // account for the possible size change here.\n\n\n newOptions = options.havingStyle(style);\n frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier;\n frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e\n\n var delimSize;\n\n if (style.size === Style$1.DISPLAY.size) {\n delimSize = options.fontMetrics().delim1;\n } else if (style.size === Style$1.SCRIPTSCRIPT.size) {\n delimSize = options.havingStyle(Style$1.SCRIPT).fontMetrics().delim2;\n } else {\n delimSize = options.fontMetrics().delim2;\n }\n\n var leftDelim;\n var rightDelim;\n\n if (group.leftDelim == null) {\n leftDelim = makeNullDelimiter(options, [\"mopen\"]);\n } else {\n leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, [\"mopen\"]);\n }\n\n if (group.continued) {\n rightDelim = buildCommon.makeSpan([]); // zero width for \\cfrac\n } else if (group.rightDelim == null) {\n rightDelim = makeNullDelimiter(options, [\"mclose\"]);\n } else {\n rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, [\"mclose\"]);\n }\n\n return buildCommon.makeSpan([\"mord\"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan([\"mfrac\"], [frac]), rightDelim], options);\n};\n\nvar mathmlBuilder$3 = (group, options) => {\n var node = new mathMLTree.MathNode(\"mfrac\", [buildGroup(group.numer, options), buildGroup(group.denom, options)]);\n\n if (!group.hasBarLine) {\n node.setAttribute(\"linethickness\", \"0px\");\n } else if (group.barSize) {\n var ruleWidth = calculateSize(group.barSize, options);\n node.setAttribute(\"linethickness\", makeEm(ruleWidth));\n }\n\n var style = adjustStyle(group.size, options.style);\n\n if (style.size !== options.style.size) {\n node = new mathMLTree.MathNode(\"mstyle\", [node]);\n var isDisplay = style.size === Style$1.DISPLAY.size ? \"true\" : \"false\";\n node.setAttribute(\"displaystyle\", isDisplay);\n node.setAttribute(\"scriptlevel\", \"0\");\n }\n\n if (group.leftDelim != null || group.rightDelim != null) {\n var withDelims = [];\n\n if (group.leftDelim != null) {\n var leftOp = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(group.leftDelim.replace(\"\\\\\", \"\"))]);\n leftOp.setAttribute(\"fence\", \"true\");\n withDelims.push(leftOp);\n }\n\n withDelims.push(node);\n\n if (group.rightDelim != null) {\n var rightOp = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(group.rightDelim.replace(\"\\\\\", \"\"))]);\n rightOp.setAttribute(\"fence\", \"true\");\n withDelims.push(rightOp);\n }\n\n return makeRow(withDelims);\n }\n\n return node;\n};\n\ndefineFunction({\n type: \"genfrac\",\n names: [\"\\\\dfrac\", \"\\\\frac\", \"\\\\tfrac\", \"\\\\dbinom\", \"\\\\binom\", \"\\\\tbinom\", \"\\\\\\\\atopfrac\", // can’t be entered directly\n \"\\\\\\\\bracefrac\", \"\\\\\\\\brackfrac\" // ditto\n ],\n props: {\n numArgs: 2,\n allowedInArgument: true\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var numer = args[0];\n var denom = args[1];\n var hasBarLine;\n var leftDelim = null;\n var rightDelim = null;\n var size = \"auto\";\n\n switch (funcName) {\n case \"\\\\dfrac\":\n case \"\\\\frac\":\n case \"\\\\tfrac\":\n hasBarLine = true;\n break;\n\n case \"\\\\\\\\atopfrac\":\n hasBarLine = false;\n break;\n\n case \"\\\\dbinom\":\n case \"\\\\binom\":\n case \"\\\\tbinom\":\n hasBarLine = false;\n leftDelim = \"(\";\n rightDelim = \")\";\n break;\n\n case \"\\\\\\\\bracefrac\":\n hasBarLine = false;\n leftDelim = \"\\\\{\";\n rightDelim = \"\\\\}\";\n break;\n\n case \"\\\\\\\\brackfrac\":\n hasBarLine = false;\n leftDelim = \"[\";\n rightDelim = \"]\";\n break;\n\n default:\n throw new Error(\"Unrecognized genfrac command\");\n }\n\n switch (funcName) {\n case \"\\\\dfrac\":\n case \"\\\\dbinom\":\n size = \"display\";\n break;\n\n case \"\\\\tfrac\":\n case \"\\\\tbinom\":\n size = \"text\";\n break;\n }\n\n return {\n type: \"genfrac\",\n mode: parser.mode,\n continued: false,\n numer,\n denom,\n hasBarLine,\n leftDelim,\n rightDelim,\n size,\n barSize: null\n };\n },\n htmlBuilder: htmlBuilder$4,\n mathmlBuilder: mathmlBuilder$3\n});\ndefineFunction({\n type: \"genfrac\",\n names: [\"\\\\cfrac\"],\n props: {\n numArgs: 2\n },\n handler: (_ref2, args) => {\n var {\n parser,\n funcName\n } = _ref2;\n var numer = args[0];\n var denom = args[1];\n return {\n type: \"genfrac\",\n mode: parser.mode,\n continued: true,\n numer,\n denom,\n hasBarLine: true,\n leftDelim: null,\n rightDelim: null,\n size: \"display\",\n barSize: null\n };\n }\n}); // Infix generalized fractions -- these are not rendered directly, but replaced\n// immediately by one of the variants above.\n\ndefineFunction({\n type: \"infix\",\n names: [\"\\\\over\", \"\\\\choose\", \"\\\\atop\", \"\\\\brace\", \"\\\\brack\"],\n props: {\n numArgs: 0,\n infix: true\n },\n\n handler(_ref3) {\n var {\n parser,\n funcName,\n token\n } = _ref3;\n var replaceWith;\n\n switch (funcName) {\n case \"\\\\over\":\n replaceWith = \"\\\\frac\";\n break;\n\n case \"\\\\choose\":\n replaceWith = \"\\\\binom\";\n break;\n\n case \"\\\\atop\":\n replaceWith = \"\\\\\\\\atopfrac\";\n break;\n\n case \"\\\\brace\":\n replaceWith = \"\\\\\\\\bracefrac\";\n break;\n\n case \"\\\\brack\":\n replaceWith = \"\\\\\\\\brackfrac\";\n break;\n\n default:\n throw new Error(\"Unrecognized infix genfrac command\");\n }\n\n return {\n type: \"infix\",\n mode: parser.mode,\n replaceWith,\n token\n };\n }\n\n});\nvar stylArray = [\"display\", \"text\", \"script\", \"scriptscript\"];\n\nvar delimFromValue = function delimFromValue(delimString) {\n var delim = null;\n\n if (delimString.length > 0) {\n delim = delimString;\n delim = delim === \".\" ? null : delim;\n }\n\n return delim;\n};\n\ndefineFunction({\n type: \"genfrac\",\n names: [\"\\\\genfrac\"],\n props: {\n numArgs: 6,\n allowedInArgument: true,\n argTypes: [\"math\", \"math\", \"size\", \"text\", \"math\", \"math\"]\n },\n\n handler(_ref4, args) {\n var {\n parser\n } = _ref4;\n var numer = args[4];\n var denom = args[5]; // Look into the parse nodes to get the desired delimiters.\n\n var leftNode = normalizeArgument(args[0]);\n var leftDelim = leftNode.type === \"atom\" && leftNode.family === \"open\" ? delimFromValue(leftNode.text) : null;\n var rightNode = normalizeArgument(args[1]);\n var rightDelim = rightNode.type === \"atom\" && rightNode.family === \"close\" ? delimFromValue(rightNode.text) : null;\n var barNode = assertNodeType(args[2], \"size\");\n var hasBarLine;\n var barSize = null;\n\n if (barNode.isBlank) {\n // \\genfrac acts differently than \\above.\n // \\genfrac treats an empty size group as a signal to use a\n // standard bar size. \\above would see size = 0 and omit the bar.\n hasBarLine = true;\n } else {\n barSize = barNode.value;\n hasBarLine = barSize.number > 0;\n } // Find out if we want displaystyle, textstyle, etc.\n\n\n var size = \"auto\";\n var styl = args[3];\n\n if (styl.type === \"ordgroup\") {\n if (styl.body.length > 0) {\n var textOrd = assertNodeType(styl.body[0], \"textord\");\n size = stylArray[Number(textOrd.text)];\n }\n } else {\n styl = assertNodeType(styl, \"textord\");\n size = stylArray[Number(styl.text)];\n }\n\n return {\n type: \"genfrac\",\n mode: parser.mode,\n numer,\n denom,\n continued: false,\n hasBarLine,\n barSize,\n leftDelim,\n rightDelim,\n size\n };\n },\n\n htmlBuilder: htmlBuilder$4,\n mathmlBuilder: mathmlBuilder$3\n}); // \\above is an infix fraction that also defines a fraction bar size.\n\ndefineFunction({\n type: \"infix\",\n names: [\"\\\\above\"],\n props: {\n numArgs: 1,\n argTypes: [\"size\"],\n infix: true\n },\n\n handler(_ref5, args) {\n var {\n parser,\n funcName,\n token\n } = _ref5;\n return {\n type: \"infix\",\n mode: parser.mode,\n replaceWith: \"\\\\\\\\abovefrac\",\n size: assertNodeType(args[0], \"size\").value,\n token\n };\n }\n\n});\ndefineFunction({\n type: \"genfrac\",\n names: [\"\\\\\\\\abovefrac\"],\n props: {\n numArgs: 3,\n argTypes: [\"math\", \"size\", \"math\"]\n },\n handler: (_ref6, args) => {\n var {\n parser,\n funcName\n } = _ref6;\n var numer = args[0];\n var barSize = assert(assertNodeType(args[1], \"infix\").size);\n var denom = args[2];\n var hasBarLine = barSize.number > 0;\n return {\n type: \"genfrac\",\n mode: parser.mode,\n numer,\n denom,\n continued: false,\n hasBarLine,\n barSize,\n leftDelim: null,\n rightDelim: null,\n size: \"auto\"\n };\n },\n htmlBuilder: htmlBuilder$4,\n mathmlBuilder: mathmlBuilder$3\n});\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only \"horizBrace\", but\n// also \"supsub\" since an over/underbrace can affect super/subscripting.\nvar htmlBuilder$3 = (grp, options) => {\n var style = options.style; // Pull out the `ParseNode<\"horizBrace\">` if `grp` is a \"supsub\" node.\n\n var supSubGroup;\n var group;\n\n if (grp.type === \"supsub\") {\n // Ref: LaTeX source2e: }}}}\\limits}\n // i.e. LaTeX treats the brace similar to an op and passes it\n // with \\limits, so we need to assign supsub style.\n supSubGroup = grp.sup ? buildGroup$1(grp.sup, options.havingStyle(style.sup()), options) : buildGroup$1(grp.sub, options.havingStyle(style.sub()), options);\n group = assertNodeType(grp.base, \"horizBrace\");\n } else {\n group = assertNodeType(grp, \"horizBrace\");\n } // Build the base group\n\n\n var body = buildGroup$1(group.base, options.havingBaseStyle(Style$1.DISPLAY)); // Create the stretchy element\n\n var braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns ┏━━━━━━━━┓\n // This first vlist contains the content and the brace: equation\n\n var vlist;\n\n if (group.isOver) {\n vlist = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: body\n }, {\n type: \"kern\",\n size: 0.1\n }, {\n type: \"elem\",\n elem: braceBody\n }]\n }, options); // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n\n vlist.children[0].children[0].children[1].classes.push(\"svg-align\");\n } else {\n vlist = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: body.depth + 0.1 + braceBody.height,\n children: [{\n type: \"elem\",\n elem: braceBody\n }, {\n type: \"kern\",\n size: 0.1\n }, {\n type: \"elem\",\n elem: body\n }]\n }, options); // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n\n vlist.children[0].children[0].children[0].classes.push(\"svg-align\");\n }\n\n if (supSubGroup) {\n // To write the supsub, wrap the first vlist in another vlist:\n // They can't all go in the same vlist, because the note might be\n // wider than the equation. We want the equation to control the\n // brace width.\n // note long note long note\n // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓\n // equation eqn eqn\n var vSpan = buildCommon.makeSpan([\"mord\", group.isOver ? \"mover\" : \"munder\"], [vlist], options);\n\n if (group.isOver) {\n vlist = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: vSpan\n }, {\n type: \"kern\",\n size: 0.2\n }, {\n type: \"elem\",\n elem: supSubGroup\n }]\n }, options);\n } else {\n vlist = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth,\n children: [{\n type: \"elem\",\n elem: supSubGroup\n }, {\n type: \"kern\",\n size: 0.2\n }, {\n type: \"elem\",\n elem: vSpan\n }]\n }, options);\n }\n }\n\n return buildCommon.makeSpan([\"mord\", group.isOver ? \"mover\" : \"munder\"], [vlist], options);\n};\n\nvar mathmlBuilder$2 = (group, options) => {\n var accentNode = stretchy.mathMLnode(group.label);\n return new mathMLTree.MathNode(group.isOver ? \"mover\" : \"munder\", [buildGroup(group.base, options), accentNode]);\n}; // Horizontal stretchy braces\n\n\ndefineFunction({\n type: \"horizBrace\",\n names: [\"\\\\overbrace\", \"\\\\underbrace\"],\n props: {\n numArgs: 1\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n return {\n type: \"horizBrace\",\n mode: parser.mode,\n label: funcName,\n isOver: /^\\\\over/.test(funcName),\n base: args[0]\n };\n },\n\n htmlBuilder: htmlBuilder$3,\n mathmlBuilder: mathmlBuilder$2\n});\n\ndefineFunction({\n type: \"href\",\n names: [\"\\\\href\"],\n props: {\n numArgs: 2,\n argTypes: [\"url\", \"original\"],\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n parser\n } = _ref;\n var body = args[1];\n var href = assertNodeType(args[0], \"url\").url;\n\n if (!parser.settings.isTrusted({\n command: \"\\\\href\",\n url: href\n })) {\n return parser.formatUnsupportedCmd(\"\\\\href\");\n }\n\n return {\n type: \"href\",\n mode: parser.mode,\n href,\n body: ordargument(body)\n };\n },\n htmlBuilder: (group, options) => {\n var elements = buildExpression$1(group.body, options, false);\n return buildCommon.makeAnchor(group.href, [], elements, options);\n },\n mathmlBuilder: (group, options) => {\n var math = buildExpressionRow(group.body, options);\n\n if (!(math instanceof MathNode)) {\n math = new MathNode(\"mrow\", [math]);\n }\n\n math.setAttribute(\"href\", group.href);\n return math;\n }\n});\ndefineFunction({\n type: \"href\",\n names: [\"\\\\url\"],\n props: {\n numArgs: 1,\n argTypes: [\"url\"],\n allowedInText: true\n },\n handler: (_ref2, args) => {\n var {\n parser\n } = _ref2;\n var href = assertNodeType(args[0], \"url\").url;\n\n if (!parser.settings.isTrusted({\n command: \"\\\\url\",\n url: href\n })) {\n return parser.formatUnsupportedCmd(\"\\\\url\");\n }\n\n var chars = [];\n\n for (var i = 0; i < href.length; i++) {\n var c = href[i];\n\n if (c === \"~\") {\n c = \"\\\\textasciitilde\";\n }\n\n chars.push({\n type: \"textord\",\n mode: \"text\",\n text: c\n });\n }\n\n var body = {\n type: \"text\",\n mode: parser.mode,\n font: \"\\\\texttt\",\n body: chars\n };\n return {\n type: \"href\",\n mode: parser.mode,\n href,\n body: ordargument(body)\n };\n }\n});\n\n// In LaTeX, \\vcenter can act only on a box, as in\n// \\vcenter{\\hbox{$\\frac{a+b}{\\dfrac{c}{d}}$}}\n// This function by itself doesn't do anything but prevent a soft line break.\n\ndefineFunction({\n type: \"hbox\",\n names: [\"\\\\hbox\"],\n props: {\n numArgs: 1,\n argTypes: [\"text\"],\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n return {\n type: \"hbox\",\n mode: parser.mode,\n body: ordargument(args[0])\n };\n },\n\n htmlBuilder(group, options) {\n var elements = buildExpression$1(group.body, options, false);\n return buildCommon.makeFragment(elements);\n },\n\n mathmlBuilder(group, options) {\n return new mathMLTree.MathNode(\"mrow\", buildExpression(group.body, options));\n }\n\n});\n\ndefineFunction({\n type: \"html\",\n names: [\"\\\\htmlClass\", \"\\\\htmlId\", \"\\\\htmlStyle\", \"\\\\htmlData\"],\n props: {\n numArgs: 2,\n argTypes: [\"raw\", \"original\"],\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName,\n token\n } = _ref;\n var value = assertNodeType(args[0], \"raw\").string;\n var body = args[1];\n\n if (parser.settings.strict) {\n parser.settings.reportNonstrict(\"htmlExtension\", \"HTML extension is disabled on strict mode\");\n }\n\n var trustContext;\n var attributes = {};\n\n switch (funcName) {\n case \"\\\\htmlClass\":\n attributes.class = value;\n trustContext = {\n command: \"\\\\htmlClass\",\n class: value\n };\n break;\n\n case \"\\\\htmlId\":\n attributes.id = value;\n trustContext = {\n command: \"\\\\htmlId\",\n id: value\n };\n break;\n\n case \"\\\\htmlStyle\":\n attributes.style = value;\n trustContext = {\n command: \"\\\\htmlStyle\",\n style: value\n };\n break;\n\n case \"\\\\htmlData\":\n {\n var data = value.split(\",\");\n\n for (var i = 0; i < data.length; i++) {\n var item = data[i];\n var firstEquals = item.indexOf(\"=\");\n\n if (firstEquals < 0) {\n throw new ParseError(\"\\\\htmlData key/value '\" + item + \"'\" + \" missing equals sign\");\n }\n\n var key = item.slice(0, firstEquals);\n\n var _value = item.slice(firstEquals + 1);\n\n attributes[\"data-\" + key.trim()] = _value;\n }\n\n trustContext = {\n command: \"\\\\htmlData\",\n attributes\n };\n break;\n }\n\n default:\n throw new Error(\"Unrecognized html command\");\n }\n\n if (!parser.settings.isTrusted(trustContext)) {\n return parser.formatUnsupportedCmd(funcName);\n }\n\n return {\n type: \"html\",\n mode: parser.mode,\n attributes,\n body: ordargument(body)\n };\n },\n htmlBuilder: (group, options) => {\n var elements = buildExpression$1(group.body, options, false);\n var classes = [\"enclosing\"];\n\n if (group.attributes.class) {\n classes.push(...group.attributes.class.trim().split(/\\s+/));\n }\n\n var span = buildCommon.makeSpan(classes, elements, options);\n\n for (var attr in group.attributes) {\n if (attr !== \"class\" && group.attributes.hasOwnProperty(attr)) {\n span.setAttribute(attr, group.attributes[attr]);\n }\n }\n\n return span;\n },\n mathmlBuilder: (group, options) => {\n return buildExpressionRow(group.body, options);\n }\n});\n\ndefineFunction({\n type: \"htmlmathml\",\n names: [\"\\\\html@mathml\"],\n props: {\n numArgs: 2,\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n parser\n } = _ref;\n return {\n type: \"htmlmathml\",\n mode: parser.mode,\n html: ordargument(args[0]),\n mathml: ordargument(args[1])\n };\n },\n htmlBuilder: (group, options) => {\n var elements = buildExpression$1(group.html, options, false);\n return buildCommon.makeFragment(elements);\n },\n mathmlBuilder: (group, options) => {\n return buildExpressionRow(group.mathml, options);\n }\n});\n\nvar sizeData = function sizeData(str) {\n if (/^[-+]? *(\\d+(\\.\\d*)?|\\.\\d+)$/.test(str)) {\n // str is a number with no unit specified.\n // default unit is bp, per graphix package.\n return {\n number: +str,\n unit: \"bp\"\n };\n } else {\n var match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(str);\n\n if (!match) {\n throw new ParseError(\"Invalid size: '\" + str + \"' in \\\\includegraphics\");\n }\n\n var data = {\n number: +(match[1] + match[2]),\n // sign + magnitude, cast to number\n unit: match[3]\n };\n\n if (!validUnit(data)) {\n throw new ParseError(\"Invalid unit: '\" + data.unit + \"' in \\\\includegraphics.\");\n }\n\n return data;\n }\n};\n\ndefineFunction({\n type: \"includegraphics\",\n names: [\"\\\\includegraphics\"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1,\n argTypes: [\"raw\", \"url\"],\n allowedInText: false\n },\n handler: (_ref, args, optArgs) => {\n var {\n parser\n } = _ref;\n var width = {\n number: 0,\n unit: \"em\"\n };\n var height = {\n number: 0.9,\n unit: \"em\"\n }; // sorta character sized.\n\n var totalheight = {\n number: 0,\n unit: \"em\"\n };\n var alt = \"\";\n\n if (optArgs[0]) {\n var attributeStr = assertNodeType(optArgs[0], \"raw\").string; // Parser.js does not parse key/value pairs. We get a string.\n\n var attributes = attributeStr.split(\",\");\n\n for (var i = 0; i < attributes.length; i++) {\n var keyVal = attributes[i].split(\"=\");\n\n if (keyVal.length === 2) {\n var str = keyVal[1].trim();\n\n switch (keyVal[0].trim()) {\n case \"alt\":\n alt = str;\n break;\n\n case \"width\":\n width = sizeData(str);\n break;\n\n case \"height\":\n height = sizeData(str);\n break;\n\n case \"totalheight\":\n totalheight = sizeData(str);\n break;\n\n default:\n throw new ParseError(\"Invalid key: '\" + keyVal[0] + \"' in \\\\includegraphics.\");\n }\n }\n }\n }\n\n var src = assertNodeType(args[0], \"url\").url;\n\n if (alt === \"\") {\n // No alt given. Use the file name. Strip away the path.\n alt = src;\n alt = alt.replace(/^.*[\\\\/]/, '');\n alt = alt.substring(0, alt.lastIndexOf('.'));\n }\n\n if (!parser.settings.isTrusted({\n command: \"\\\\includegraphics\",\n url: src\n })) {\n return parser.formatUnsupportedCmd(\"\\\\includegraphics\");\n }\n\n return {\n type: \"includegraphics\",\n mode: parser.mode,\n alt: alt,\n width: width,\n height: height,\n totalheight: totalheight,\n src: src\n };\n },\n htmlBuilder: (group, options) => {\n var height = calculateSize(group.height, options);\n var depth = 0;\n\n if (group.totalheight.number > 0) {\n depth = calculateSize(group.totalheight, options) - height;\n }\n\n var width = 0;\n\n if (group.width.number > 0) {\n width = calculateSize(group.width, options);\n }\n\n var style = {\n height: makeEm(height + depth)\n };\n\n if (width > 0) {\n style.width = makeEm(width);\n }\n\n if (depth > 0) {\n style.verticalAlign = makeEm(-depth);\n }\n\n var node = new Img(group.src, group.alt, style);\n node.height = height;\n node.depth = depth;\n return node;\n },\n mathmlBuilder: (group, options) => {\n var node = new mathMLTree.MathNode(\"mglyph\", []);\n node.setAttribute(\"alt\", group.alt);\n var height = calculateSize(group.height, options);\n var depth = 0;\n\n if (group.totalheight.number > 0) {\n depth = calculateSize(group.totalheight, options) - height;\n node.setAttribute(\"valign\", makeEm(-depth));\n }\n\n node.setAttribute(\"height\", makeEm(height + depth));\n\n if (group.width.number > 0) {\n var width = calculateSize(group.width, options);\n node.setAttribute(\"width\", makeEm(width));\n }\n\n node.setAttribute(\"src\", group.src);\n return node;\n }\n});\n\n// Horizontal spacing commands\n\ndefineFunction({\n type: \"kern\",\n names: [\"\\\\kern\", \"\\\\mkern\", \"\\\\hskip\", \"\\\\mskip\"],\n props: {\n numArgs: 1,\n argTypes: [\"size\"],\n primitive: true,\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n var size = assertNodeType(args[0], \"size\");\n\n if (parser.settings.strict) {\n var mathFunction = funcName[1] === 'm'; // \\mkern, \\mskip\n\n var muUnit = size.value.unit === 'mu';\n\n if (mathFunction) {\n if (!muUnit) {\n parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" supports only mu units, \" + (\"not \" + size.value.unit + \" units\"));\n }\n\n if (parser.mode !== \"math\") {\n parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" works only in math mode\");\n }\n } else {\n // !mathFunction\n if (muUnit) {\n parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" doesn't support mu units\");\n }\n }\n }\n\n return {\n type: \"kern\",\n mode: parser.mode,\n dimension: size.value\n };\n },\n\n htmlBuilder(group, options) {\n return buildCommon.makeGlue(group.dimension, options);\n },\n\n mathmlBuilder(group, options) {\n var dimension = calculateSize(group.dimension, options);\n return new mathMLTree.SpaceNode(dimension);\n }\n\n});\n\n// Horizontal overlap functions\ndefineFunction({\n type: \"lap\",\n names: [\"\\\\mathllap\", \"\\\\mathrlap\", \"\\\\mathclap\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var body = args[0];\n return {\n type: \"lap\",\n mode: parser.mode,\n alignment: funcName.slice(5),\n body\n };\n },\n htmlBuilder: (group, options) => {\n // mathllap, mathrlap, mathclap\n var inner;\n\n if (group.alignment === \"clap\") {\n // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/\n inner = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span\n\n inner = buildCommon.makeSpan([\"inner\"], [inner], options);\n } else {\n inner = buildCommon.makeSpan([\"inner\"], [buildGroup$1(group.body, options)]);\n }\n\n var fix = buildCommon.makeSpan([\"fix\"], []);\n var node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the\n // two items involved in the lap.\n // Next, use a strut to set the height of the HTML bounding box.\n // Otherwise, a tall argument may be misplaced.\n // This code resolved issue #1153\n\n var strut = buildCommon.makeSpan([\"strut\"]);\n strut.style.height = makeEm(node.height + node.depth);\n\n if (node.depth) {\n strut.style.verticalAlign = makeEm(-node.depth);\n }\n\n node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall.\n // This code resolves issue #1234\n\n node = buildCommon.makeSpan([\"thinbox\"], [node], options);\n return buildCommon.makeSpan([\"mord\", \"vbox\"], [node], options);\n },\n mathmlBuilder: (group, options) => {\n // mathllap, mathrlap, mathclap\n var node = new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n\n if (group.alignment !== \"rlap\") {\n var offset = group.alignment === \"llap\" ? \"-1\" : \"-0.5\";\n node.setAttribute(\"lspace\", offset + \"width\");\n }\n\n node.setAttribute(\"width\", \"0px\");\n return node;\n }\n});\n\ndefineFunction({\n type: \"styling\",\n names: [\"\\\\(\", \"$\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: false\n },\n\n handler(_ref, args) {\n var {\n funcName,\n parser\n } = _ref;\n var outerMode = parser.mode;\n parser.switchMode(\"math\");\n var close = funcName === \"\\\\(\" ? \"\\\\)\" : \"$\";\n var body = parser.parseExpression(false, close);\n parser.expect(close);\n parser.switchMode(outerMode);\n return {\n type: \"styling\",\n mode: parser.mode,\n style: \"text\",\n body\n };\n }\n\n}); // Check for extra closing math delimiters\n\ndefineFunction({\n type: \"text\",\n // Doesn't matter what this is.\n names: [\"\\\\)\", \"\\\\]\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: false\n },\n\n handler(context, args) {\n throw new ParseError(\"Mismatched \" + context.funcName);\n }\n\n});\n\nvar chooseMathStyle = (group, options) => {\n switch (options.style.size) {\n case Style$1.DISPLAY.size:\n return group.display;\n\n case Style$1.TEXT.size:\n return group.text;\n\n case Style$1.SCRIPT.size:\n return group.script;\n\n case Style$1.SCRIPTSCRIPT.size:\n return group.scriptscript;\n\n default:\n return group.text;\n }\n};\n\ndefineFunction({\n type: \"mathchoice\",\n names: [\"\\\\mathchoice\"],\n props: {\n numArgs: 4,\n primitive: true\n },\n handler: (_ref, args) => {\n var {\n parser\n } = _ref;\n return {\n type: \"mathchoice\",\n mode: parser.mode,\n display: ordargument(args[0]),\n text: ordargument(args[1]),\n script: ordargument(args[2]),\n scriptscript: ordargument(args[3])\n };\n },\n htmlBuilder: (group, options) => {\n var body = chooseMathStyle(group, options);\n var elements = buildExpression$1(body, options, false);\n return buildCommon.makeFragment(elements);\n },\n mathmlBuilder: (group, options) => {\n var body = chooseMathStyle(group, options);\n return buildExpressionRow(body, options);\n }\n});\n\nvar assembleSupSub = (base, supGroup, subGroup, options, style, slant, baseShift) => {\n base = buildCommon.makeSpan([], [base]);\n var subIsSingleCharacter = subGroup && utils.isCharacterBox(subGroup);\n var sub;\n var sup; // We manually have to handle the superscripts and subscripts. This,\n // aside from the kern calculations, is copied from supsub.\n\n if (supGroup) {\n var elem = buildGroup$1(supGroup, options.havingStyle(style.sup()), options);\n sup = {\n elem,\n kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth)\n };\n }\n\n if (subGroup) {\n var _elem = buildGroup$1(subGroup, options.havingStyle(style.sub()), options);\n\n sub = {\n elem: _elem,\n kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height)\n };\n } // Build the final group as a vlist of the possible subscript, base,\n // and possible superscript.\n\n\n var finalGroup;\n\n if (sup && sub) {\n var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift;\n finalGroup = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: bottom,\n children: [{\n type: \"kern\",\n size: options.fontMetrics().bigOpSpacing5\n }, {\n type: \"elem\",\n elem: sub.elem,\n marginLeft: makeEm(-slant)\n }, {\n type: \"kern\",\n size: sub.kern\n }, {\n type: \"elem\",\n elem: base\n }, {\n type: \"kern\",\n size: sup.kern\n }, {\n type: \"elem\",\n elem: sup.elem,\n marginLeft: makeEm(slant)\n }, {\n type: \"kern\",\n size: options.fontMetrics().bigOpSpacing5\n }]\n }, options);\n } else if (sub) {\n var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note\n // that we are supposed to shift the limits by 1/2 of the slant,\n // but since we are centering the limits adding a full slant of\n // margin will shift by 1/2 that.\n\n finalGroup = buildCommon.makeVList({\n positionType: \"top\",\n positionData: top,\n children: [{\n type: \"kern\",\n size: options.fontMetrics().bigOpSpacing5\n }, {\n type: \"elem\",\n elem: sub.elem,\n marginLeft: makeEm(-slant)\n }, {\n type: \"kern\",\n size: sub.kern\n }, {\n type: \"elem\",\n elem: base\n }]\n }, options);\n } else if (sup) {\n var _bottom = base.depth + baseShift;\n\n finalGroup = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: _bottom,\n children: [{\n type: \"elem\",\n elem: base\n }, {\n type: \"kern\",\n size: sup.kern\n }, {\n type: \"elem\",\n elem: sup.elem,\n marginLeft: makeEm(slant)\n }, {\n type: \"kern\",\n size: options.fontMetrics().bigOpSpacing5\n }]\n }, options);\n } else {\n // This case probably shouldn't occur (this would mean the\n // supsub was sending us a group with no superscript or\n // subscript) but be safe.\n return base;\n }\n\n var parts = [finalGroup];\n\n if (sub && slant !== 0 && !subIsSingleCharacter) {\n // A negative margin-left was applied to the lower limit.\n // Avoid an overlap by placing a spacer on the left on the group.\n var spacer = buildCommon.makeSpan([\"mspace\"], [], options);\n spacer.style.marginRight = makeEm(slant);\n parts.unshift(spacer);\n }\n\n return buildCommon.makeSpan([\"mop\", \"op-limits\"], parts, options);\n};\n\n// Limits, symbols\n// Most operators have a large successor symbol, but these don't.\nvar noSuccessor = [\"\\\\smallint\"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only \"op\", but also\n// \"supsub\" since some of them (like \\int) can affect super/subscripting.\n\nvar htmlBuilder$2 = (grp, options) => {\n // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n var supGroup;\n var subGroup;\n var hasLimits = false;\n var group;\n\n if (grp.type === \"supsub\") {\n // If we have limits, supsub will pass us its group to handle. Pull\n // out the superscript and subscript and set the group to the op in\n // its base.\n supGroup = grp.sup;\n subGroup = grp.sub;\n group = assertNodeType(grp.base, \"op\");\n hasLimits = true;\n } else {\n group = assertNodeType(grp, \"op\");\n }\n\n var style = options.style;\n var large = false;\n\n if (style.size === Style$1.DISPLAY.size && group.symbol && !noSuccessor.includes(group.name)) {\n // Most symbol operators get larger in displaystyle (rule 13)\n large = true;\n }\n\n var base;\n\n if (group.symbol) {\n // If this is a symbol, create the symbol.\n var fontName = large ? \"Size2-Regular\" : \"Size1-Regular\";\n var stash = \"\";\n\n if (group.name === \"\\\\oiint\" || group.name === \"\\\\oiiint\") {\n // No font glyphs yet, so use a glyph w/o the oval.\n // TODO: When font glyphs are available, delete this code.\n stash = group.name.slice(1);\n group.name = stash === \"oiint\" ? \"\\\\iint\" : \"\\\\iiint\";\n }\n\n base = buildCommon.makeSymbol(group.name, fontName, \"math\", options, [\"mop\", \"op-symbol\", large ? \"large-op\" : \"small-op\"]);\n\n if (stash.length > 0) {\n // We're in \\oiint or \\oiiint. Overlay the oval.\n // TODO: When font glyphs are available, delete this code.\n var italic = base.italic;\n var oval = buildCommon.staticSvg(stash + \"Size\" + (large ? \"2\" : \"1\"), options);\n base = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [{\n type: \"elem\",\n elem: base,\n shift: 0\n }, {\n type: \"elem\",\n elem: oval,\n shift: large ? 0.08 : 0\n }]\n }, options);\n group.name = \"\\\\\" + stash;\n base.classes.unshift(\"mop\"); // $FlowFixMe\n\n base.italic = italic;\n }\n } else if (group.body) {\n // If this is a list, compose that list.\n var inner = buildExpression$1(group.body, options, true);\n\n if (inner.length === 1 && inner[0] instanceof SymbolNode) {\n base = inner[0];\n base.classes[0] = \"mop\"; // replace old mclass\n } else {\n base = buildCommon.makeSpan([\"mop\"], inner, options);\n }\n } else {\n // Otherwise, this is a text operator. Build the text from the\n // operator's name.\n var output = [];\n\n for (var i = 1; i < group.name.length; i++) {\n output.push(buildCommon.mathsym(group.name[i], group.mode, options));\n }\n\n base = buildCommon.makeSpan([\"mop\"], output, options);\n } // If content of op is a single symbol, shift it vertically.\n\n\n var baseShift = 0;\n var slant = 0;\n\n if ((base instanceof SymbolNode || group.name === \"\\\\oiint\" || group.name === \"\\\\oiiint\") && !group.suppressBaseShift) {\n // We suppress the shift of the base of \\overset and \\underset. Otherwise,\n // shift the symbol so its center lies on the axis (rule 13). It\n // appears that our fonts have the centers of the symbols already\n // almost on the axis, so these numbers are very small. Note we\n // don't actually apply this here, but instead it is used either in\n // the vlist creation or separately when there are no limits.\n baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction.\n // $FlowFixMe\n\n slant = base.italic;\n }\n\n if (hasLimits) {\n return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift);\n } else {\n if (baseShift) {\n base.style.position = \"relative\";\n base.style.top = makeEm(baseShift);\n }\n\n return base;\n }\n};\n\nvar mathmlBuilder$1 = (group, options) => {\n var node;\n\n if (group.symbol) {\n // This is a symbol. Just add the symbol.\n node = new MathNode(\"mo\", [makeText(group.name, group.mode)]);\n\n if (noSuccessor.includes(group.name)) {\n node.setAttribute(\"largeop\", \"false\");\n }\n } else if (group.body) {\n // This is an operator with children. Add them.\n node = new MathNode(\"mo\", buildExpression(group.body, options));\n } else {\n // This is a text operator. Add all of the characters from the\n // operator's name.\n node = new MathNode(\"mi\", [new TextNode(group.name.slice(1))]); // Append an <mo>⁡</mo>.\n // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4\n\n var operator = new MathNode(\"mo\", [makeText(\"\\u2061\", \"text\")]);\n\n if (group.parentIsSupSub) {\n node = new MathNode(\"mrow\", [node, operator]);\n } else {\n node = newDocumentFragment([node, operator]);\n }\n }\n\n return node;\n};\n\nvar singleCharBigOps = {\n \"\\u220F\": \"\\\\prod\",\n \"\\u2210\": \"\\\\coprod\",\n \"\\u2211\": \"\\\\sum\",\n \"\\u22c0\": \"\\\\bigwedge\",\n \"\\u22c1\": \"\\\\bigvee\",\n \"\\u22c2\": \"\\\\bigcap\",\n \"\\u22c3\": \"\\\\bigcup\",\n \"\\u2a00\": \"\\\\bigodot\",\n \"\\u2a01\": \"\\\\bigoplus\",\n \"\\u2a02\": \"\\\\bigotimes\",\n \"\\u2a04\": \"\\\\biguplus\",\n \"\\u2a06\": \"\\\\bigsqcup\"\n};\ndefineFunction({\n type: \"op\",\n names: [\"\\\\coprod\", \"\\\\bigvee\", \"\\\\bigwedge\", \"\\\\biguplus\", \"\\\\bigcap\", \"\\\\bigcup\", \"\\\\intop\", \"\\\\prod\", \"\\\\sum\", \"\\\\bigotimes\", \"\\\\bigoplus\", \"\\\\bigodot\", \"\\\\bigsqcup\", \"\\\\smallint\", \"\\u220F\", \"\\u2210\", \"\\u2211\", \"\\u22c0\", \"\\u22c1\", \"\\u22c2\", \"\\u22c3\", \"\\u2a00\", \"\\u2a01\", \"\\u2a02\", \"\\u2a04\", \"\\u2a06\"],\n props: {\n numArgs: 0\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var fName = funcName;\n\n if (fName.length === 1) {\n fName = singleCharBigOps[fName];\n }\n\n return {\n type: \"op\",\n mode: parser.mode,\n limits: true,\n parentIsSupSub: false,\n symbol: true,\n name: fName\n };\n },\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n}); // Note: calling defineFunction with a type that's already been defined only\n// works because the same htmlBuilder and mathmlBuilder are being used.\n\ndefineFunction({\n type: \"op\",\n names: [\"\\\\mathop\"],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (_ref2, args) => {\n var {\n parser\n } = _ref2;\n var body = args[0];\n return {\n type: \"op\",\n mode: parser.mode,\n limits: false,\n parentIsSupSub: false,\n symbol: false,\n body: ordargument(body)\n };\n },\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n}); // There are 2 flags for operators; whether they produce limits in\n// displaystyle, and whether they are symbols and should grow in\n// displaystyle. These four groups cover the four possible choices.\n\nvar singleCharIntegrals = {\n \"\\u222b\": \"\\\\int\",\n \"\\u222c\": \"\\\\iint\",\n \"\\u222d\": \"\\\\iiint\",\n \"\\u222e\": \"\\\\oint\",\n \"\\u222f\": \"\\\\oiint\",\n \"\\u2230\": \"\\\\oiiint\"\n}; // No limits, not symbols\n\ndefineFunction({\n type: \"op\",\n names: [\"\\\\arcsin\", \"\\\\arccos\", \"\\\\arctan\", \"\\\\arctg\", \"\\\\arcctg\", \"\\\\arg\", \"\\\\ch\", \"\\\\cos\", \"\\\\cosec\", \"\\\\cosh\", \"\\\\cot\", \"\\\\cotg\", \"\\\\coth\", \"\\\\csc\", \"\\\\ctg\", \"\\\\cth\", \"\\\\deg\", \"\\\\dim\", \"\\\\exp\", \"\\\\hom\", \"\\\\ker\", \"\\\\lg\", \"\\\\ln\", \"\\\\log\", \"\\\\sec\", \"\\\\sin\", \"\\\\sinh\", \"\\\\sh\", \"\\\\tan\", \"\\\\tanh\", \"\\\\tg\", \"\\\\th\"],\n props: {\n numArgs: 0\n },\n\n handler(_ref3) {\n var {\n parser,\n funcName\n } = _ref3;\n return {\n type: \"op\",\n mode: parser.mode,\n limits: false,\n parentIsSupSub: false,\n symbol: false,\n name: funcName\n };\n },\n\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n}); // Limits, not symbols\n\ndefineFunction({\n type: \"op\",\n names: [\"\\\\det\", \"\\\\gcd\", \"\\\\inf\", \"\\\\lim\", \"\\\\max\", \"\\\\min\", \"\\\\Pr\", \"\\\\sup\"],\n props: {\n numArgs: 0\n },\n\n handler(_ref4) {\n var {\n parser,\n funcName\n } = _ref4;\n return {\n type: \"op\",\n mode: parser.mode,\n limits: true,\n parentIsSupSub: false,\n symbol: false,\n name: funcName\n };\n },\n\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n}); // No limits, symbols\n\ndefineFunction({\n type: \"op\",\n names: [\"\\\\int\", \"\\\\iint\", \"\\\\iiint\", \"\\\\oint\", \"\\\\oiint\", \"\\\\oiiint\", \"\\u222b\", \"\\u222c\", \"\\u222d\", \"\\u222e\", \"\\u222f\", \"\\u2230\"],\n props: {\n numArgs: 0,\n allowedInArgument: true\n },\n\n handler(_ref5) {\n var {\n parser,\n funcName\n } = _ref5;\n var fName = funcName;\n\n if (fName.length === 1) {\n fName = singleCharIntegrals[fName];\n }\n\n return {\n type: \"op\",\n mode: parser.mode,\n limits: false,\n parentIsSupSub: false,\n symbol: true,\n name: fName\n };\n },\n\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n});\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only\n// \"operatorname\", but also \"supsub\" since \\operatorname* can\n// affect super/subscripting.\nvar htmlBuilder$1 = (grp, options) => {\n // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n var supGroup;\n var subGroup;\n var hasLimits = false;\n var group;\n\n if (grp.type === \"supsub\") {\n // If we have limits, supsub will pass us its group to handle. Pull\n // out the superscript and subscript and set the group to the op in\n // its base.\n supGroup = grp.sup;\n subGroup = grp.sub;\n group = assertNodeType(grp.base, \"operatorname\");\n hasLimits = true;\n } else {\n group = assertNodeType(grp, \"operatorname\");\n }\n\n var base;\n\n if (group.body.length > 0) {\n var body = group.body.map(child => {\n // $FlowFixMe: Check if the node has a string `text` property.\n var childText = child.text;\n\n if (typeof childText === \"string\") {\n return {\n type: \"textord\",\n mode: child.mode,\n text: childText\n };\n } else {\n return child;\n }\n }); // Consolidate function names into symbol characters.\n\n var expression = buildExpression$1(body, options.withFont(\"mathrm\"), true);\n\n for (var i = 0; i < expression.length; i++) {\n var child = expression[i];\n\n if (child instanceof SymbolNode) {\n // Per amsopn package,\n // change minus to hyphen and \\ast to asterisk\n child.text = child.text.replace(/\\u2212/, \"-\").replace(/\\u2217/, \"*\");\n }\n }\n\n base = buildCommon.makeSpan([\"mop\"], expression, options);\n } else {\n base = buildCommon.makeSpan([\"mop\"], [], options);\n }\n\n if (hasLimits) {\n return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0);\n } else {\n return base;\n }\n};\n\nvar mathmlBuilder = (group, options) => {\n // The steps taken here are similar to the html version.\n var expression = buildExpression(group.body, options.withFont(\"mathrm\")); // Is expression a string or has it something like a fraction?\n\n var isAllString = true; // default\n\n for (var i = 0; i < expression.length; i++) {\n var node = expression[i];\n\n if (node instanceof mathMLTree.SpaceNode) ; else if (node instanceof mathMLTree.MathNode) {\n switch (node.type) {\n case \"mi\":\n case \"mn\":\n case \"ms\":\n case \"mspace\":\n case \"mtext\":\n break;\n // Do nothing yet.\n\n case \"mo\":\n {\n var child = node.children[0];\n\n if (node.children.length === 1 && child instanceof mathMLTree.TextNode) {\n child.text = child.text.replace(/\\u2212/, \"-\").replace(/\\u2217/, \"*\");\n } else {\n isAllString = false;\n }\n\n break;\n }\n\n default:\n isAllString = false;\n }\n } else {\n isAllString = false;\n }\n }\n\n if (isAllString) {\n // Write a single TextNode instead of multiple nested tags.\n var word = expression.map(node => node.toText()).join(\"\");\n expression = [new mathMLTree.TextNode(word)];\n }\n\n var identifier = new mathMLTree.MathNode(\"mi\", expression);\n identifier.setAttribute(\"mathvariant\", \"normal\"); // \\u2061 is the same as ⁡\n // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp\n\n var operator = new mathMLTree.MathNode(\"mo\", [makeText(\"\\u2061\", \"text\")]);\n\n if (group.parentIsSupSub) {\n return new mathMLTree.MathNode(\"mrow\", [identifier, operator]);\n } else {\n return mathMLTree.newDocumentFragment([identifier, operator]);\n }\n}; // \\operatorname\n// amsopn.dtx: \\mathop{#1\\kern\\z@\\operator@font#3}\\newmcodes@\n\n\ndefineFunction({\n type: \"operatorname\",\n names: [\"\\\\operatorname@\", \"\\\\operatornamewithlimits\"],\n props: {\n numArgs: 1\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var body = args[0];\n return {\n type: \"operatorname\",\n mode: parser.mode,\n body: ordargument(body),\n alwaysHandleSupSub: funcName === \"\\\\operatornamewithlimits\",\n limits: false,\n parentIsSupSub: false\n };\n },\n htmlBuilder: htmlBuilder$1,\n mathmlBuilder\n});\ndefineMacro(\"\\\\operatorname\", \"\\\\@ifstar\\\\operatornamewithlimits\\\\operatorname@\");\n\ndefineFunctionBuilders({\n type: \"ordgroup\",\n\n htmlBuilder(group, options) {\n if (group.semisimple) {\n return buildCommon.makeFragment(buildExpression$1(group.body, options, false));\n }\n\n return buildCommon.makeSpan([\"mord\"], buildExpression$1(group.body, options, true), options);\n },\n\n mathmlBuilder(group, options) {\n return buildExpressionRow(group.body, options, true);\n }\n\n});\n\ndefineFunction({\n type: \"overline\",\n names: [\"\\\\overline\"],\n props: {\n numArgs: 1\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n var body = args[0];\n return {\n type: \"overline\",\n mode: parser.mode,\n body\n };\n },\n\n htmlBuilder(group, options) {\n // Overlines are handled in the TeXbook pg 443, Rule 9.\n // Build the inner group in the cramped style.\n var innerGroup = buildGroup$1(group.body, options.havingCrampedStyle()); // Create the line above the body\n\n var line = buildCommon.makeLineSpan(\"overline-line\", options); // Generate the vlist, with the appropriate kerns\n\n var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n var vlist = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: innerGroup\n }, {\n type: \"kern\",\n size: 3 * defaultRuleThickness\n }, {\n type: \"elem\",\n elem: line\n }, {\n type: \"kern\",\n size: defaultRuleThickness\n }]\n }, options);\n return buildCommon.makeSpan([\"mord\", \"overline\"], [vlist], options);\n },\n\n mathmlBuilder(group, options) {\n var operator = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(\"\\u203e\")]);\n operator.setAttribute(\"stretchy\", \"true\");\n var node = new mathMLTree.MathNode(\"mover\", [buildGroup(group.body, options), operator]);\n node.setAttribute(\"accent\", \"true\");\n return node;\n }\n\n});\n\ndefineFunction({\n type: \"phantom\",\n names: [\"\\\\phantom\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n parser\n } = _ref;\n var body = args[0];\n return {\n type: \"phantom\",\n mode: parser.mode,\n body: ordargument(body)\n };\n },\n htmlBuilder: (group, options) => {\n var elements = buildExpression$1(group.body, options.withPhantom(), false); // \\phantom isn't supposed to affect the elements it contains.\n // See \"color\" for more details.\n\n return buildCommon.makeFragment(elements);\n },\n mathmlBuilder: (group, options) => {\n var inner = buildExpression(group.body, options);\n return new mathMLTree.MathNode(\"mphantom\", inner);\n }\n});\ndefineFunction({\n type: \"hphantom\",\n names: [\"\\\\hphantom\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref2, args) => {\n var {\n parser\n } = _ref2;\n var body = args[0];\n return {\n type: \"hphantom\",\n mode: parser.mode,\n body\n };\n },\n htmlBuilder: (group, options) => {\n var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options.withPhantom())]);\n node.height = 0;\n node.depth = 0;\n\n if (node.children) {\n for (var i = 0; i < node.children.length; i++) {\n node.children[i].height = 0;\n node.children[i].depth = 0;\n }\n } // See smash for comment re: use of makeVList\n\n\n node = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: node\n }]\n }, options); // For spacing, TeX treats \\smash as a math group (same spacing as ord).\n\n return buildCommon.makeSpan([\"mord\"], [node], options);\n },\n mathmlBuilder: (group, options) => {\n var inner = buildExpression(ordargument(group.body), options);\n var phantom = new mathMLTree.MathNode(\"mphantom\", inner);\n var node = new mathMLTree.MathNode(\"mpadded\", [phantom]);\n node.setAttribute(\"height\", \"0px\");\n node.setAttribute(\"depth\", \"0px\");\n return node;\n }\n});\ndefineFunction({\n type: \"vphantom\",\n names: [\"\\\\vphantom\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref3, args) => {\n var {\n parser\n } = _ref3;\n var body = args[0];\n return {\n type: \"vphantom\",\n mode: parser.mode,\n body\n };\n },\n htmlBuilder: (group, options) => {\n var inner = buildCommon.makeSpan([\"inner\"], [buildGroup$1(group.body, options.withPhantom())]);\n var fix = buildCommon.makeSpan([\"fix\"], []);\n return buildCommon.makeSpan([\"mord\", \"rlap\"], [inner, fix], options);\n },\n mathmlBuilder: (group, options) => {\n var inner = buildExpression(ordargument(group.body), options);\n var phantom = new mathMLTree.MathNode(\"mphantom\", inner);\n var node = new mathMLTree.MathNode(\"mpadded\", [phantom]);\n node.setAttribute(\"width\", \"0px\");\n return node;\n }\n});\n\ndefineFunction({\n type: \"raisebox\",\n names: [\"\\\\raisebox\"],\n props: {\n numArgs: 2,\n argTypes: [\"size\", \"hbox\"],\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n var amount = assertNodeType(args[0], \"size\").value;\n var body = args[1];\n return {\n type: \"raisebox\",\n mode: parser.mode,\n dy: amount,\n body\n };\n },\n\n htmlBuilder(group, options) {\n var body = buildGroup$1(group.body, options);\n var dy = calculateSize(group.dy, options);\n return buildCommon.makeVList({\n positionType: \"shift\",\n positionData: -dy,\n children: [{\n type: \"elem\",\n elem: body\n }]\n }, options);\n },\n\n mathmlBuilder(group, options) {\n var node = new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n var dy = group.dy.number + group.dy.unit;\n node.setAttribute(\"voffset\", dy);\n return node;\n }\n\n});\n\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\relax\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInArgument: true\n },\n\n handler(_ref) {\n var {\n parser\n } = _ref;\n return {\n type: \"internal\",\n mode: parser.mode\n };\n }\n\n});\n\ndefineFunction({\n type: \"rule\",\n names: [\"\\\\rule\"],\n props: {\n numArgs: 2,\n numOptionalArgs: 1,\n allowedInText: true,\n allowedInMath: true,\n argTypes: [\"size\", \"size\", \"size\"]\n },\n\n handler(_ref, args, optArgs) {\n var {\n parser\n } = _ref;\n var shift = optArgs[0];\n var width = assertNodeType(args[0], \"size\");\n var height = assertNodeType(args[1], \"size\");\n return {\n type: \"rule\",\n mode: parser.mode,\n shift: shift && assertNodeType(shift, \"size\").value,\n width: width.value,\n height: height.value\n };\n },\n\n htmlBuilder(group, options) {\n // Make an empty span for the rule\n var rule = buildCommon.makeSpan([\"mord\", \"rule\"], [], options); // Calculate the shift, width, and height of the rule, and account for units\n\n var width = calculateSize(group.width, options);\n var height = calculateSize(group.height, options);\n var shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size\n\n rule.style.borderRightWidth = makeEm(width);\n rule.style.borderTopWidth = makeEm(height);\n rule.style.bottom = makeEm(shift); // Record the height and width\n\n rule.width = width;\n rule.height = height + shift;\n rule.depth = -shift; // Font size is the number large enough that the browser will\n // reserve at least `absHeight` space above the baseline.\n // The 1.125 factor was empirically determined\n\n rule.maxFontSize = height * 1.125 * options.sizeMultiplier;\n return rule;\n },\n\n mathmlBuilder(group, options) {\n var width = calculateSize(group.width, options);\n var height = calculateSize(group.height, options);\n var shift = group.shift ? calculateSize(group.shift, options) : 0;\n var color = options.color && options.getColor() || \"black\";\n var rule = new mathMLTree.MathNode(\"mspace\");\n rule.setAttribute(\"mathbackground\", color);\n rule.setAttribute(\"width\", makeEm(width));\n rule.setAttribute(\"height\", makeEm(height));\n var wrapper = new mathMLTree.MathNode(\"mpadded\", [rule]);\n\n if (shift >= 0) {\n wrapper.setAttribute(\"height\", makeEm(shift));\n } else {\n wrapper.setAttribute(\"height\", makeEm(shift));\n wrapper.setAttribute(\"depth\", makeEm(-shift));\n }\n\n wrapper.setAttribute(\"voffset\", makeEm(shift));\n return wrapper;\n }\n\n});\n\nfunction sizingGroup(value, options, baseOptions) {\n var inner = buildExpression$1(value, options, false);\n var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize\n // manually. Handle nested size changes.\n\n for (var i = 0; i < inner.length; i++) {\n var pos = inner[i].classes.indexOf(\"sizing\");\n\n if (pos < 0) {\n Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions));\n } else if (inner[i].classes[pos + 1] === \"reset-size\" + options.size) {\n // This is a nested size change: e.g., inner[i] is the \"b\" in\n // `\\Huge a \\small b`. Override the old size (the `reset-` class)\n // but not the new size.\n inner[i].classes[pos + 1] = \"reset-size\" + baseOptions.size;\n }\n\n inner[i].height *= multiplier;\n inner[i].depth *= multiplier;\n }\n\n return buildCommon.makeFragment(inner);\n}\nvar sizeFuncs = [\"\\\\tiny\", \"\\\\sixptsize\", \"\\\\scriptsize\", \"\\\\footnotesize\", \"\\\\small\", \"\\\\normalsize\", \"\\\\large\", \"\\\\Large\", \"\\\\LARGE\", \"\\\\huge\", \"\\\\Huge\"];\nvar htmlBuilder = (group, options) => {\n // Handle sizing operators like \\Huge. Real TeX doesn't actually allow\n // these functions inside of math expressions, so we do some special\n // handling.\n var newOptions = options.havingSize(group.size);\n return sizingGroup(group.body, newOptions, options);\n};\ndefineFunction({\n type: \"sizing\",\n names: sizeFuncs,\n props: {\n numArgs: 0,\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n breakOnTokenText,\n funcName,\n parser\n } = _ref;\n var body = parser.parseExpression(false, breakOnTokenText);\n return {\n type: \"sizing\",\n mode: parser.mode,\n // Figure out what size to use based on the list of functions above\n size: sizeFuncs.indexOf(funcName) + 1,\n body\n };\n },\n htmlBuilder,\n mathmlBuilder: (group, options) => {\n var newOptions = options.havingSize(group.size);\n var inner = buildExpression(group.body, newOptions);\n var node = new mathMLTree.MathNode(\"mstyle\", inner); // TODO(emily): This doesn't produce the correct size for nested size\n // changes, because we don't keep state of what style we're currently\n // in, so we can't reset the size to normal before changing it. Now\n // that we're passing an options parameter we should be able to fix\n // this.\n\n node.setAttribute(\"mathsize\", makeEm(newOptions.sizeMultiplier));\n return node;\n }\n});\n\n// smash, with optional [tb], as in AMS\ndefineFunction({\n type: \"smash\",\n names: [\"\\\\smash\"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1,\n allowedInText: true\n },\n handler: (_ref, args, optArgs) => {\n var {\n parser\n } = _ref;\n var smashHeight = false;\n var smashDepth = false;\n var tbArg = optArgs[0] && assertNodeType(optArgs[0], \"ordgroup\");\n\n if (tbArg) {\n // Optional [tb] argument is engaged.\n // ref: amsmath: \\renewcommand{\\smash}[1][tb]{%\n // def\\mb@t{\\ht}\\def\\mb@b{\\dp}\\def\\mb@tb{\\ht\\z@\\z@\\dp}%\n var letter = \"\";\n\n for (var i = 0; i < tbArg.body.length; ++i) {\n var node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property.\n\n letter = node.text;\n\n if (letter === \"t\") {\n smashHeight = true;\n } else if (letter === \"b\") {\n smashDepth = true;\n } else {\n smashHeight = false;\n smashDepth = false;\n break;\n }\n }\n } else {\n smashHeight = true;\n smashDepth = true;\n }\n\n var body = args[0];\n return {\n type: \"smash\",\n mode: parser.mode,\n body,\n smashHeight,\n smashDepth\n };\n },\n htmlBuilder: (group, options) => {\n var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]);\n\n if (!group.smashHeight && !group.smashDepth) {\n return node;\n }\n\n if (group.smashHeight) {\n node.height = 0; // In order to influence makeVList, we have to reset the children.\n\n if (node.children) {\n for (var i = 0; i < node.children.length; i++) {\n node.children[i].height = 0;\n }\n }\n }\n\n if (group.smashDepth) {\n node.depth = 0;\n\n if (node.children) {\n for (var _i = 0; _i < node.children.length; _i++) {\n node.children[_i].depth = 0;\n }\n }\n } // At this point, we've reset the TeX-like height and depth values.\n // But the span still has an HTML line height.\n // makeVList applies \"display: table-cell\", which prevents the browser\n // from acting on that line height. So we'll call makeVList now.\n\n\n var smashedNode = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: node\n }]\n }, options); // For spacing, TeX treats \\hphantom as a math group (same spacing as ord).\n\n return buildCommon.makeSpan([\"mord\"], [smashedNode], options);\n },\n mathmlBuilder: (group, options) => {\n var node = new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n\n if (group.smashHeight) {\n node.setAttribute(\"height\", \"0px\");\n }\n\n if (group.smashDepth) {\n node.setAttribute(\"depth\", \"0px\");\n }\n\n return node;\n }\n});\n\ndefineFunction({\n type: \"sqrt\",\n names: [\"\\\\sqrt\"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1\n },\n\n handler(_ref, args, optArgs) {\n var {\n parser\n } = _ref;\n var index = optArgs[0];\n var body = args[0];\n return {\n type: \"sqrt\",\n mode: parser.mode,\n body,\n index\n };\n },\n\n htmlBuilder(group, options) {\n // Square roots are handled in the TeXbook pg. 443, Rule 11.\n // First, we do the same steps as in overline to build the inner group\n // and line\n var inner = buildGroup$1(group.body, options.havingCrampedStyle());\n\n if (inner.height === 0) {\n // Render a small surd.\n inner.height = options.fontMetrics().xHeight;\n } // Some groups can return document fragments. Handle those by wrapping\n // them in a span.\n\n\n inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \\surd delimiter\n\n var metrics = options.fontMetrics();\n var theta = metrics.defaultRuleThickness;\n var phi = theta;\n\n if (options.style.id < Style$1.TEXT.id) {\n phi = options.fontMetrics().xHeight;\n } // Calculate the clearance between the body and line\n\n\n var lineClearance = theta + phi / 4;\n var minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size\n\n var {\n span: img,\n ruleWidth,\n advanceWidth\n } = delimiter.sqrtImage(minDelimiterHeight, options);\n var delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size\n\n if (delimDepth > inner.height + inner.depth + lineClearance) {\n lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2;\n } // Shift the sqrt image\n\n\n var imgShift = img.height - inner.height - lineClearance - ruleWidth;\n inner.style.paddingLeft = makeEm(advanceWidth); // Overlay the image and the argument.\n\n var body = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: inner,\n wrapperClasses: [\"svg-align\"]\n }, {\n type: \"kern\",\n size: -(inner.height + imgShift)\n }, {\n type: \"elem\",\n elem: img\n }, {\n type: \"kern\",\n size: ruleWidth\n }]\n }, options);\n\n if (!group.index) {\n return buildCommon.makeSpan([\"mord\", \"sqrt\"], [body], options);\n } else {\n // Handle the optional root index\n // The index is always in scriptscript style\n var newOptions = options.havingStyle(Style$1.SCRIPTSCRIPT);\n var rootm = buildGroup$1(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX\n // source, in the definition of `\\r@@t`.\n\n var toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly\n\n var rootVList = buildCommon.makeVList({\n positionType: \"shift\",\n positionData: -toShift,\n children: [{\n type: \"elem\",\n elem: rootm\n }]\n }, options); // Add a class surrounding it so we can add on the appropriate\n // kerning\n\n var rootVListWrap = buildCommon.makeSpan([\"root\"], [rootVList]);\n return buildCommon.makeSpan([\"mord\", \"sqrt\"], [rootVListWrap, body], options);\n }\n },\n\n mathmlBuilder(group, options) {\n var {\n body,\n index\n } = group;\n return index ? new mathMLTree.MathNode(\"mroot\", [buildGroup(body, options), buildGroup(index, options)]) : new mathMLTree.MathNode(\"msqrt\", [buildGroup(body, options)]);\n }\n\n});\n\nvar styleMap = {\n \"display\": Style$1.DISPLAY,\n \"text\": Style$1.TEXT,\n \"script\": Style$1.SCRIPT,\n \"scriptscript\": Style$1.SCRIPTSCRIPT\n};\ndefineFunction({\n type: \"styling\",\n names: [\"\\\\displaystyle\", \"\\\\textstyle\", \"\\\\scriptstyle\", \"\\\\scriptscriptstyle\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref, args) {\n var {\n breakOnTokenText,\n funcName,\n parser\n } = _ref;\n // parse out the implicit body\n var body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g.\n // here and in buildHTML and de-dupe the enumeration of all the styles).\n // $FlowFixMe: The names above exactly match the styles.\n\n var style = funcName.slice(1, funcName.length - 5);\n return {\n type: \"styling\",\n mode: parser.mode,\n // Figure out what style to use by pulling out the style from\n // the function name\n style,\n body\n };\n },\n\n htmlBuilder(group, options) {\n // Style changes are handled in the TeXbook on pg. 442, Rule 3.\n var newStyle = styleMap[group.style];\n var newOptions = options.havingStyle(newStyle).withFont('');\n return sizingGroup(group.body, newOptions, options);\n },\n\n mathmlBuilder(group, options) {\n // Figure out what style we're changing to.\n var newStyle = styleMap[group.style];\n var newOptions = options.havingStyle(newStyle);\n var inner = buildExpression(group.body, newOptions);\n var node = new mathMLTree.MathNode(\"mstyle\", inner);\n var styleAttributes = {\n \"display\": [\"0\", \"true\"],\n \"text\": [\"0\", \"false\"],\n \"script\": [\"1\", \"false\"],\n \"scriptscript\": [\"2\", \"false\"]\n };\n var attr = styleAttributes[group.style];\n node.setAttribute(\"scriptlevel\", attr[0]);\n node.setAttribute(\"displaystyle\", attr[1]);\n return node;\n }\n\n});\n\n/**\n * Sometimes, groups perform special rules when they have superscripts or\n * subscripts attached to them. This function lets the `supsub` group know that\n * Sometimes, groups perform special rules when they have superscripts or\n * its inner element should handle the superscripts and subscripts instead of\n * handling them itself.\n */\nvar htmlBuilderDelegate = function htmlBuilderDelegate(group, options) {\n var base = group.base;\n\n if (!base) {\n return null;\n } else if (base.type === \"op\") {\n // Operators handle supsubs differently when they have limits\n // (e.g. `\\displaystyle\\sum_2^3`)\n var delegate = base.limits && (options.style.size === Style$1.DISPLAY.size || base.alwaysHandleSupSub);\n return delegate ? htmlBuilder$2 : null;\n } else if (base.type === \"operatorname\") {\n var _delegate = base.alwaysHandleSupSub && (options.style.size === Style$1.DISPLAY.size || base.limits);\n\n return _delegate ? htmlBuilder$1 : null;\n } else if (base.type === \"accent\") {\n return utils.isCharacterBox(base.base) ? htmlBuilder$a : null;\n } else if (base.type === \"horizBrace\") {\n var isSup = !group.sub;\n return isSup === base.isOver ? htmlBuilder$3 : null;\n } else {\n return null;\n }\n}; // Super scripts and subscripts, whose precise placement can depend on other\n// functions that precede them.\n\n\ndefineFunctionBuilders({\n type: \"supsub\",\n\n htmlBuilder(group, options) {\n // Superscript and subscripts are handled in the TeXbook on page\n // 445-446, rules 18(a-f).\n // Here is where we defer to the inner group if it should handle\n // superscripts and subscripts itself.\n var builderDelegate = htmlBuilderDelegate(group, options);\n\n if (builderDelegate) {\n return builderDelegate(group, options);\n }\n\n var {\n base: valueBase,\n sup: valueSup,\n sub: valueSub\n } = group;\n var base = buildGroup$1(valueBase, options);\n var supm;\n var subm;\n var metrics = options.fontMetrics(); // Rule 18a\n\n var supShift = 0;\n var subShift = 0;\n var isCharacterBox = valueBase && utils.isCharacterBox(valueBase);\n\n if (valueSup) {\n var newOptions = options.havingStyle(options.style.sup());\n supm = buildGroup$1(valueSup, newOptions, options);\n\n if (!isCharacterBox) {\n supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier;\n }\n }\n\n if (valueSub) {\n var _newOptions = options.havingStyle(options.style.sub());\n\n subm = buildGroup$1(valueSub, _newOptions, options);\n\n if (!isCharacterBox) {\n subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options.sizeMultiplier;\n }\n } // Rule 18c\n\n\n var minSupShift;\n\n if (options.style === Style$1.DISPLAY) {\n minSupShift = metrics.sup1;\n } else if (options.style.cramped) {\n minSupShift = metrics.sup3;\n } else {\n minSupShift = metrics.sup2;\n } // scriptspace is a font-size-independent size, so scale it\n // appropriately for use as the marginRight.\n\n\n var multiplier = options.sizeMultiplier;\n var marginRight = makeEm(0.5 / metrics.ptPerEm / multiplier);\n var marginLeft = null;\n\n if (subm) {\n // Subscripts shouldn't be shifted by the base's italic correction.\n // Account for that by shifting the subscript back the appropriate\n // amount. Note we only do this when the base is a single symbol.\n var isOiint = group.base && group.base.type === \"op\" && group.base.name && (group.base.name === \"\\\\oiint\" || group.base.name === \"\\\\oiiint\");\n\n if (base instanceof SymbolNode || isOiint) {\n // $FlowFixMe\n marginLeft = makeEm(-base.italic);\n }\n }\n\n var supsub;\n\n if (supm && subm) {\n supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n subShift = Math.max(subShift, metrics.sub2);\n var ruleWidth = metrics.defaultRuleThickness; // Rule 18e\n\n var maxWidth = 4 * ruleWidth;\n\n if (supShift - supm.depth - (subm.height - subShift) < maxWidth) {\n subShift = maxWidth - (supShift - supm.depth) + subm.height;\n var psi = 0.8 * metrics.xHeight - (supShift - supm.depth);\n\n if (psi > 0) {\n supShift += psi;\n subShift -= psi;\n }\n }\n\n var vlistElem = [{\n type: \"elem\",\n elem: subm,\n shift: subShift,\n marginRight,\n marginLeft\n }, {\n type: \"elem\",\n elem: supm,\n shift: -supShift,\n marginRight\n }];\n supsub = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: vlistElem\n }, options);\n } else if (subm) {\n // Rule 18b\n subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight);\n var _vlistElem = [{\n type: \"elem\",\n elem: subm,\n marginLeft,\n marginRight\n }];\n supsub = buildCommon.makeVList({\n positionType: \"shift\",\n positionData: subShift,\n children: _vlistElem\n }, options);\n } else if (supm) {\n // Rule 18c, d\n supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n supsub = buildCommon.makeVList({\n positionType: \"shift\",\n positionData: -supShift,\n children: [{\n type: \"elem\",\n elem: supm,\n marginRight\n }]\n }, options);\n } else {\n throw new Error(\"supsub must have either sup or sub.\");\n } // Wrap the supsub vlist in a span.msupsub to reset text-align.\n\n\n var mclass = getTypeOfDomTree(base, \"right\") || \"mord\";\n return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan([\"msupsub\"], [supsub])], options);\n },\n\n mathmlBuilder(group, options) {\n // Is the inner group a relevant horizontal brace?\n var isBrace = false;\n var isOver;\n var isSup;\n\n if (group.base && group.base.type === \"horizBrace\") {\n isSup = !!group.sup;\n\n if (isSup === group.base.isOver) {\n isBrace = true;\n isOver = group.base.isOver;\n }\n }\n\n if (group.base && (group.base.type === \"op\" || group.base.type === \"operatorname\")) {\n group.base.parentIsSupSub = true;\n }\n\n var children = [buildGroup(group.base, options)];\n\n if (group.sub) {\n children.push(buildGroup(group.sub, options));\n }\n\n if (group.sup) {\n children.push(buildGroup(group.sup, options));\n }\n\n var nodeType;\n\n if (isBrace) {\n nodeType = isOver ? \"mover\" : \"munder\";\n } else if (!group.sub) {\n var base = group.base;\n\n if (base && base.type === \"op\" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) {\n nodeType = \"mover\";\n } else if (base && base.type === \"operatorname\" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) {\n nodeType = \"mover\";\n } else {\n nodeType = \"msup\";\n }\n } else if (!group.sup) {\n var _base = group.base;\n\n if (_base && _base.type === \"op\" && _base.limits && (options.style === Style$1.DISPLAY || _base.alwaysHandleSupSub)) {\n nodeType = \"munder\";\n } else if (_base && _base.type === \"operatorname\" && _base.alwaysHandleSupSub && (_base.limits || options.style === Style$1.DISPLAY)) {\n nodeType = \"munder\";\n } else {\n nodeType = \"msub\";\n }\n } else {\n var _base2 = group.base;\n\n if (_base2 && _base2.type === \"op\" && _base2.limits && options.style === Style$1.DISPLAY) {\n nodeType = \"munderover\";\n } else if (_base2 && _base2.type === \"operatorname\" && _base2.alwaysHandleSupSub && (options.style === Style$1.DISPLAY || _base2.limits)) {\n nodeType = \"munderover\";\n } else {\n nodeType = \"msubsup\";\n }\n }\n\n return new mathMLTree.MathNode(nodeType, children);\n }\n\n});\n\ndefineFunctionBuilders({\n type: \"atom\",\n\n htmlBuilder(group, options) {\n return buildCommon.mathsym(group.text, group.mode, options, [\"m\" + group.family]);\n },\n\n mathmlBuilder(group, options) {\n var node = new mathMLTree.MathNode(\"mo\", [makeText(group.text, group.mode)]);\n\n if (group.family === \"bin\") {\n var variant = getVariant(group, options);\n\n if (variant === \"bold-italic\") {\n node.setAttribute(\"mathvariant\", variant);\n }\n } else if (group.family === \"punct\") {\n node.setAttribute(\"separator\", \"true\");\n } else if (group.family === \"open\" || group.family === \"close\") {\n // Delims built here should not stretch vertically.\n // See delimsizing.js for stretchy delims.\n node.setAttribute(\"stretchy\", \"false\");\n }\n\n return node;\n }\n\n});\n\n// \"mathord\" and \"textord\" ParseNodes created in Parser.js from symbol Groups in\n// src/symbols.js.\nvar defaultVariant = {\n \"mi\": \"italic\",\n \"mn\": \"normal\",\n \"mtext\": \"normal\"\n};\ndefineFunctionBuilders({\n type: \"mathord\",\n\n htmlBuilder(group, options) {\n return buildCommon.makeOrd(group, options, \"mathord\");\n },\n\n mathmlBuilder(group, options) {\n var node = new mathMLTree.MathNode(\"mi\", [makeText(group.text, group.mode, options)]);\n var variant = getVariant(group, options) || \"italic\";\n\n if (variant !== defaultVariant[node.type]) {\n node.setAttribute(\"mathvariant\", variant);\n }\n\n return node;\n }\n\n});\ndefineFunctionBuilders({\n type: \"textord\",\n\n htmlBuilder(group, options) {\n return buildCommon.makeOrd(group, options, \"textord\");\n },\n\n mathmlBuilder(group, options) {\n var text = makeText(group.text, group.mode, options);\n var variant = getVariant(group, options) || \"normal\";\n var node;\n\n if (group.mode === 'text') {\n node = new mathMLTree.MathNode(\"mtext\", [text]);\n } else if (/[0-9]/.test(group.text)) {\n node = new mathMLTree.MathNode(\"mn\", [text]);\n } else if (group.text === \"\\\\prime\") {\n node = new mathMLTree.MathNode(\"mo\", [text]);\n } else {\n node = new mathMLTree.MathNode(\"mi\", [text]);\n }\n\n if (variant !== defaultVariant[node.type]) {\n node.setAttribute(\"mathvariant\", variant);\n }\n\n return node;\n }\n\n});\n\nvar cssSpace = {\n \"\\\\nobreak\": \"nobreak\",\n \"\\\\allowbreak\": \"allowbreak\"\n}; // A lookup table to determine whether a spacing function/symbol should be\n// treated like a regular space character. If a symbol or command is a key\n// in this table, then it should be a regular space character. Furthermore,\n// the associated value may have a `className` specifying an extra CSS class\n// to add to the created `span`.\n\nvar regularSpace = {\n \" \": {},\n \"\\\\ \": {},\n \"~\": {\n className: \"nobreak\"\n },\n \"\\\\space\": {},\n \"\\\\nobreakspace\": {\n className: \"nobreak\"\n }\n}; // ParseNode<\"spacing\"> created in Parser.js from the \"spacing\" symbol Groups in\n// src/symbols.js.\n\ndefineFunctionBuilders({\n type: \"spacing\",\n\n htmlBuilder(group, options) {\n if (regularSpace.hasOwnProperty(group.text)) {\n var className = regularSpace[group.text].className || \"\"; // Spaces are generated by adding an actual space. Each of these\n // things has an entry in the symbols table, so these will be turned\n // into appropriate outputs.\n\n if (group.mode === \"text\") {\n var ord = buildCommon.makeOrd(group, options, \"textord\");\n ord.classes.push(className);\n return ord;\n } else {\n return buildCommon.makeSpan([\"mspace\", className], [buildCommon.mathsym(group.text, group.mode, options)], options);\n }\n } else if (cssSpace.hasOwnProperty(group.text)) {\n // Spaces based on just a CSS class.\n return buildCommon.makeSpan([\"mspace\", cssSpace[group.text]], [], options);\n } else {\n throw new ParseError(\"Unknown type of space \\\"\" + group.text + \"\\\"\");\n }\n },\n\n mathmlBuilder(group, options) {\n var node;\n\n if (regularSpace.hasOwnProperty(group.text)) {\n node = new mathMLTree.MathNode(\"mtext\", [new mathMLTree.TextNode(\"\\u00a0\")]);\n } else if (cssSpace.hasOwnProperty(group.text)) {\n // CSS-based MathML spaces (\\nobreak, \\allowbreak) are ignored\n return new mathMLTree.MathNode(\"mspace\");\n } else {\n throw new ParseError(\"Unknown type of space \\\"\" + group.text + \"\\\"\");\n }\n\n return node;\n }\n\n});\n\nvar pad = () => {\n var padNode = new mathMLTree.MathNode(\"mtd\", []);\n padNode.setAttribute(\"width\", \"50%\");\n return padNode;\n};\n\ndefineFunctionBuilders({\n type: \"tag\",\n\n mathmlBuilder(group, options) {\n var table = new mathMLTree.MathNode(\"mtable\", [new mathMLTree.MathNode(\"mtr\", [pad(), new mathMLTree.MathNode(\"mtd\", [buildExpressionRow(group.body, options)]), pad(), new mathMLTree.MathNode(\"mtd\", [buildExpressionRow(group.tag, options)])])]);\n table.setAttribute(\"width\", \"100%\");\n return table; // TODO: Left-aligned tags.\n // Currently, the group and options passed here do not contain\n // enough info to set tag alignment. `leqno` is in Settings but it is\n // not passed to Options. On the HTML side, leqno is\n // set by a CSS class applied in buildTree.js. That would have worked\n // in MathML if browsers supported <mlabeledtr>. Since they don't, we\n // need to rewrite the way this function is called.\n }\n\n});\n\nvar textFontFamilies = {\n \"\\\\text\": undefined,\n \"\\\\textrm\": \"textrm\",\n \"\\\\textsf\": \"textsf\",\n \"\\\\texttt\": \"texttt\",\n \"\\\\textnormal\": \"textrm\"\n};\nvar textFontWeights = {\n \"\\\\textbf\": \"textbf\",\n \"\\\\textmd\": \"textmd\"\n};\nvar textFontShapes = {\n \"\\\\textit\": \"textit\",\n \"\\\\textup\": \"textup\"\n};\n\nvar optionsWithFont = (group, options) => {\n var font = group.font; // Checks if the argument is a font family or a font style.\n\n if (!font) {\n return options;\n } else if (textFontFamilies[font]) {\n return options.withTextFontFamily(textFontFamilies[font]);\n } else if (textFontWeights[font]) {\n return options.withTextFontWeight(textFontWeights[font]);\n } else if (font === \"\\\\emph\") {\n return options.fontShape === \"textit\" ? options.withTextFontShape(\"textup\") : options.withTextFontShape(\"textit\");\n }\n\n return options.withTextFontShape(textFontShapes[font]);\n};\n\ndefineFunction({\n type: \"text\",\n names: [// Font families\n \"\\\\text\", \"\\\\textrm\", \"\\\\textsf\", \"\\\\texttt\", \"\\\\textnormal\", // Font weights\n \"\\\\textbf\", \"\\\\textmd\", // Font Shapes\n \"\\\\textit\", \"\\\\textup\", \"\\\\emph\"],\n props: {\n numArgs: 1,\n argTypes: [\"text\"],\n allowedInArgument: true,\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n var body = args[0];\n return {\n type: \"text\",\n mode: parser.mode,\n body: ordargument(body),\n font: funcName\n };\n },\n\n htmlBuilder(group, options) {\n var newOptions = optionsWithFont(group, options);\n var inner = buildExpression$1(group.body, newOptions, true);\n return buildCommon.makeSpan([\"mord\", \"text\"], inner, newOptions);\n },\n\n mathmlBuilder(group, options) {\n var newOptions = optionsWithFont(group, options);\n return buildExpressionRow(group.body, newOptions);\n }\n\n});\n\ndefineFunction({\n type: \"underline\",\n names: [\"\\\\underline\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n return {\n type: \"underline\",\n mode: parser.mode,\n body: args[0]\n };\n },\n\n htmlBuilder(group, options) {\n // Underlines are handled in the TeXbook pg 443, Rule 10.\n // Build the inner group.\n var innerGroup = buildGroup$1(group.body, options); // Create the line to go below the body\n\n var line = buildCommon.makeLineSpan(\"underline-line\", options); // Generate the vlist, with the appropriate kerns\n\n var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n var vlist = buildCommon.makeVList({\n positionType: \"top\",\n positionData: innerGroup.height,\n children: [{\n type: \"kern\",\n size: defaultRuleThickness\n }, {\n type: \"elem\",\n elem: line\n }, {\n type: \"kern\",\n size: 3 * defaultRuleThickness\n }, {\n type: \"elem\",\n elem: innerGroup\n }]\n }, options);\n return buildCommon.makeSpan([\"mord\", \"underline\"], [vlist], options);\n },\n\n mathmlBuilder(group, options) {\n var operator = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(\"\\u203e\")]);\n operator.setAttribute(\"stretchy\", \"true\");\n var node = new mathMLTree.MathNode(\"munder\", [buildGroup(group.body, options), operator]);\n node.setAttribute(\"accentunder\", \"true\");\n return node;\n }\n\n});\n\ndefineFunction({\n type: \"vcenter\",\n names: [\"\\\\vcenter\"],\n props: {\n numArgs: 1,\n argTypes: [\"original\"],\n // In LaTeX, \\vcenter can act only on a box.\n allowedInText: false\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n return {\n type: \"vcenter\",\n mode: parser.mode,\n body: args[0]\n };\n },\n\n htmlBuilder(group, options) {\n var body = buildGroup$1(group.body, options);\n var axisHeight = options.fontMetrics().axisHeight;\n var dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight));\n return buildCommon.makeVList({\n positionType: \"shift\",\n positionData: dy,\n children: [{\n type: \"elem\",\n elem: body\n }]\n }, options);\n },\n\n mathmlBuilder(group, options) {\n // There is no way to do this in MathML.\n // Write a class as a breadcrumb in case some post-processor wants\n // to perform a vcenter adjustment.\n return new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)], [\"vcenter\"]);\n }\n\n});\n\ndefineFunction({\n type: \"verb\",\n names: [\"\\\\verb\"],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n\n handler(context, args, optArgs) {\n // \\verb and \\verb* are dealt with directly in Parser.js.\n // If we end up here, it's because of a failure to match the two delimiters\n // in the regex in Lexer.js. LaTeX raises the following error when \\verb is\n // terminated by end of line (or file).\n throw new ParseError(\"\\\\verb ended by end of line instead of matching delimiter\");\n },\n\n htmlBuilder(group, options) {\n var text = makeVerb(group);\n var body = []; // \\verb enters text mode and therefore is sized like \\textstyle\n\n var newOptions = options.havingStyle(options.style.text());\n\n for (var i = 0; i < text.length; i++) {\n var c = text[i];\n\n if (c === '~') {\n c = '\\\\textasciitilde';\n }\n\n body.push(buildCommon.makeSymbol(c, \"Typewriter-Regular\", group.mode, newOptions, [\"mord\", \"texttt\"]));\n }\n\n return buildCommon.makeSpan([\"mord\", \"text\"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions);\n },\n\n mathmlBuilder(group, options) {\n var text = new mathMLTree.TextNode(makeVerb(group));\n var node = new mathMLTree.MathNode(\"mtext\", [text]);\n node.setAttribute(\"mathvariant\", \"monospace\");\n return node;\n }\n\n});\n/**\n * Converts verb group into body string.\n *\n * \\verb* replaces each space with an open box \\u2423\n * \\verb replaces each space with a no-break space \\xA0\n */\n\nvar makeVerb = group => group.body.replace(/ /g, group.star ? '\\u2423' : '\\xA0');\n\n/** Include this to ensure that all functions are defined. */\nvar functions = _functions;\n\n/**\n * The Lexer class handles tokenizing the input in various ways. Since our\n * parser expects us to be able to backtrack, the lexer allows lexing from any\n * given starting point.\n *\n * Its main exposed function is the `lex` function, which takes a position to\n * lex from and a type of token to lex. It defers to the appropriate `_innerLex`\n * function.\n *\n * The various `_innerLex` functions perform the actual lexing of different\n * kinds.\n */\n\n/* The following tokenRegex\n * - matches typical whitespace (but not NBSP etc.) using its first group\n * - does not match any control character \\x00-\\x1f except whitespace\n * - does not match a bare backslash\n * - matches any ASCII character except those just mentioned\n * - does not match the BMP private use area \\uE000-\\uF8FF\n * - does not match bare surrogate code units\n * - matches any BMP character except for those just described\n * - matches any valid Unicode surrogate pair\n * - matches a backslash followed by one or more whitespace characters\n * - matches a backslash followed by one or more letters then whitespace\n * - matches a backslash followed by any BMP character\n * Capturing groups:\n * [1] regular whitespace\n * [2] backslash followed by whitespace\n * [3] anything else, which may include:\n * [4] left character of \\verb*\n * [5] left character of \\verb\n * [6] backslash followed by word, excluding any trailing whitespace\n * Just because the Lexer matches something doesn't mean it's valid input:\n * If there is no matching function or symbol definition, the Parser will\n * still reject the input.\n */\nvar spaceRegexString = \"[ \\r\\n\\t]\";\nvar controlWordRegexString = \"\\\\\\\\[a-zA-Z@]+\";\nvar controlSymbolRegexString = \"\\\\\\\\[^\\uD800-\\uDFFF]\";\nvar controlWordWhitespaceRegexString = \"(\" + controlWordRegexString + \")\" + spaceRegexString + \"*\";\nvar controlSpaceRegexString = \"\\\\\\\\(\\n|[ \\r\\t]+\\n?)[ \\r\\t]*\";\nvar combiningDiacriticalMarkString = \"[\\u0300-\\u036f]\";\nvar combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + \"+$\");\nvar tokenRegexString = \"(\" + spaceRegexString + \"+)|\" + ( // whitespace\ncontrolSpaceRegexString + \"|\") + // \\whitespace\n\"([!-\\\\[\\\\]-\\u2027\\u202A-\\uD7FF\\uF900-\\uFFFF]\" + ( // single codepoint\ncombiningDiacriticalMarkString + \"*\") + // ...plus accents\n\"|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]\" + ( // surrogate pair\ncombiningDiacriticalMarkString + \"*\") + // ...plus accents\n\"|\\\\\\\\verb\\\\*([^]).*?\\\\4\" + // \\verb*\n\"|\\\\\\\\verb([^*a-zA-Z]).*?\\\\5\" + ( // \\verb unstarred\n\"|\" + controlWordWhitespaceRegexString) + ( // \\macroName + spaces\n\"|\" + controlSymbolRegexString + \")\"); // \\\\, \\', etc.\n\n/** Main Lexer class */\n\nclass Lexer {\n // Category codes. The lexer only supports comment characters (14) for now.\n // MacroExpander additionally distinguishes active (13).\n constructor(input, settings) {\n this.input = void 0;\n this.settings = void 0;\n this.tokenRegex = void 0;\n this.catcodes = void 0;\n // Separate accents from characters\n this.input = input;\n this.settings = settings;\n this.tokenRegex = new RegExp(tokenRegexString, 'g');\n this.catcodes = {\n \"%\": 14,\n // comment character\n \"~\": 13 // active character\n\n };\n }\n\n setCatcode(char, code) {\n this.catcodes[char] = code;\n }\n /**\n * This function lexes a single token.\n */\n\n\n lex() {\n var input = this.input;\n var pos = this.tokenRegex.lastIndex;\n\n if (pos === input.length) {\n return new Token(\"EOF\", new SourceLocation(this, pos, pos));\n }\n\n var match = this.tokenRegex.exec(input);\n\n if (match === null || match.index !== pos) {\n throw new ParseError(\"Unexpected character: '\" + input[pos] + \"'\", new Token(input[pos], new SourceLocation(this, pos, pos + 1)));\n }\n\n var text = match[6] || match[3] || (match[2] ? \"\\\\ \" : \" \");\n\n if (this.catcodes[text] === 14) {\n // comment character\n var nlIndex = input.indexOf('\\n', this.tokenRegex.lastIndex);\n\n if (nlIndex === -1) {\n this.tokenRegex.lastIndex = input.length; // EOF\n\n this.settings.reportNonstrict(\"commentAtEnd\", \"% comment has no terminating newline; LaTeX would \" + \"fail because of commenting the end of math mode (e.g. $)\");\n } else {\n this.tokenRegex.lastIndex = nlIndex + 1;\n }\n\n return this.lex();\n }\n\n return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex));\n }\n\n}\n\n/**\n * A `Namespace` refers to a space of nameable things like macros or lengths,\n * which can be `set` either globally or local to a nested group, using an\n * undo stack similar to how TeX implements this functionality.\n * Performance-wise, `get` and local `set` take constant time, while global\n * `set` takes time proportional to the depth of group nesting.\n */\nclass Namespace {\n /**\n * Both arguments are optional. The first argument is an object of\n * built-in mappings which never change. The second argument is an object\n * of initial (global-level) mappings, which will constantly change\n * according to any global/top-level `set`s done.\n */\n constructor(builtins, globalMacros) {\n if (builtins === void 0) {\n builtins = {};\n }\n\n if (globalMacros === void 0) {\n globalMacros = {};\n }\n\n this.current = void 0;\n this.builtins = void 0;\n this.undefStack = void 0;\n this.current = globalMacros;\n this.builtins = builtins;\n this.undefStack = [];\n }\n /**\n * Start a new nested group, affecting future local `set`s.\n */\n\n\n beginGroup() {\n this.undefStack.push({});\n }\n /**\n * End current nested group, restoring values before the group began.\n */\n\n\n endGroup() {\n if (this.undefStack.length === 0) {\n throw new ParseError(\"Unbalanced namespace destruction: attempt \" + \"to pop global namespace; please report this as a bug\");\n }\n\n var undefs = this.undefStack.pop();\n\n for (var undef in undefs) {\n if (undefs.hasOwnProperty(undef)) {\n if (undefs[undef] == null) {\n delete this.current[undef];\n } else {\n this.current[undef] = undefs[undef];\n }\n }\n }\n }\n /**\n * Ends all currently nested groups (if any), restoring values before the\n * groups began. Useful in case of an error in the middle of parsing.\n */\n\n\n endGroups() {\n while (this.undefStack.length > 0) {\n this.endGroup();\n }\n }\n /**\n * Detect whether `name` has a definition. Equivalent to\n * `get(name) != null`.\n */\n\n\n has(name) {\n return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name);\n }\n /**\n * Get the current value of a name, or `undefined` if there is no value.\n *\n * Note: Do not use `if (namespace.get(...))` to detect whether a macro\n * is defined, as the definition may be the empty string which evaluates\n * to `false` in JavaScript. Use `if (namespace.get(...) != null)` or\n * `if (namespace.has(...))`.\n */\n\n\n get(name) {\n if (this.current.hasOwnProperty(name)) {\n return this.current[name];\n } else {\n return this.builtins[name];\n }\n }\n /**\n * Set the current value of a name, and optionally set it globally too.\n * Local set() sets the current value and (when appropriate) adds an undo\n * operation to the undo stack. Global set() may change the undo\n * operation at every level, so takes time linear in their number.\n * A value of undefined means to delete existing definitions.\n */\n\n\n set(name, value, global) {\n if (global === void 0) {\n global = false;\n }\n\n if (global) {\n // Global set is equivalent to setting in all groups. Simulate this\n // by destroying any undos currently scheduled for this name,\n // and adding an undo with the *new* value (in case it later gets\n // locally reset within this environment).\n for (var i = 0; i < this.undefStack.length; i++) {\n delete this.undefStack[i][name];\n }\n\n if (this.undefStack.length > 0) {\n this.undefStack[this.undefStack.length - 1][name] = value;\n }\n } else {\n // Undo this set at end of this group (possibly to `undefined`),\n // unless an undo is already in place, in which case that older\n // value is the correct one.\n var top = this.undefStack[this.undefStack.length - 1];\n\n if (top && !top.hasOwnProperty(name)) {\n top[name] = this.current[name];\n }\n }\n\n if (value == null) {\n delete this.current[name];\n } else {\n this.current[name] = value;\n }\n }\n\n}\n\n/**\n * Predefined macros for KaTeX.\n * This can be used to define some commands in terms of others.\n */\nvar macros = _macros;\n// macro tools\n\ndefineMacro(\"\\\\noexpand\", function (context) {\n // The expansion is the token itself; but that token is interpreted\n // as if its meaning were ‘\\relax’ if it is a control sequence that\n // would ordinarily be expanded by TeX’s expansion rules.\n var t = context.popToken();\n\n if (context.isExpandable(t.text)) {\n t.noexpand = true;\n t.treatAsRelax = true;\n }\n\n return {\n tokens: [t],\n numArgs: 0\n };\n});\ndefineMacro(\"\\\\expandafter\", function (context) {\n // TeX first reads the token that comes immediately after \\expandafter,\n // without expanding it; let’s call this token t. Then TeX reads the\n // token that comes after t (and possibly more tokens, if that token\n // has an argument), replacing it by its expansion. Finally TeX puts\n // t back in front of that expansion.\n var t = context.popToken();\n context.expandOnce(true); // expand only an expandable token\n\n return {\n tokens: [t],\n numArgs: 0\n };\n}); // LaTeX's \\@firstoftwo{#1}{#2} expands to #1, skipping #2\n// TeX source: \\long\\def\\@firstoftwo#1#2{#1}\n\ndefineMacro(\"\\\\@firstoftwo\", function (context) {\n var args = context.consumeArgs(2);\n return {\n tokens: args[0],\n numArgs: 0\n };\n}); // LaTeX's \\@secondoftwo{#1}{#2} expands to #2, skipping #1\n// TeX source: \\long\\def\\@secondoftwo#1#2{#2}\n\ndefineMacro(\"\\\\@secondoftwo\", function (context) {\n var args = context.consumeArgs(2);\n return {\n tokens: args[1],\n numArgs: 0\n };\n}); // LaTeX's \\@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded)\n// symbol that isn't a space, consuming any spaces but not consuming the\n// first nonspace character. If that nonspace character matches #1, then\n// the macro expands to #2; otherwise, it expands to #3.\n\ndefineMacro(\"\\\\@ifnextchar\", function (context) {\n var args = context.consumeArgs(3); // symbol, if, else\n\n context.consumeSpaces();\n var nextToken = context.future();\n\n if (args[0].length === 1 && args[0][0].text === nextToken.text) {\n return {\n tokens: args[1],\n numArgs: 0\n };\n } else {\n return {\n tokens: args[2],\n numArgs: 0\n };\n }\n}); // LaTeX's \\@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol.\n// If it is `*`, then it consumes the symbol, and the macro expands to #1;\n// otherwise, the macro expands to #2 (without consuming the symbol).\n// TeX source: \\def\\@ifstar#1{\\@ifnextchar *{\\@firstoftwo{#1}}}\n\ndefineMacro(\"\\\\@ifstar\", \"\\\\@ifnextchar *{\\\\@firstoftwo{#1}}\"); // LaTeX's \\TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode\n\ndefineMacro(\"\\\\TextOrMath\", function (context) {\n var args = context.consumeArgs(2);\n\n if (context.mode === 'text') {\n return {\n tokens: args[0],\n numArgs: 0\n };\n } else {\n return {\n tokens: args[1],\n numArgs: 0\n };\n }\n}); // Lookup table for parsing numbers in base 8 through 16\n\nvar digitToNumber = {\n \"0\": 0,\n \"1\": 1,\n \"2\": 2,\n \"3\": 3,\n \"4\": 4,\n \"5\": 5,\n \"6\": 6,\n \"7\": 7,\n \"8\": 8,\n \"9\": 9,\n \"a\": 10,\n \"A\": 10,\n \"b\": 11,\n \"B\": 11,\n \"c\": 12,\n \"C\": 12,\n \"d\": 13,\n \"D\": 13,\n \"e\": 14,\n \"E\": 14,\n \"f\": 15,\n \"F\": 15\n}; // TeX \\char makes a literal character (catcode 12) using the following forms:\n// (see The TeXBook, p. 43)\n// \\char123 -- decimal\n// \\char'123 -- octal\n// \\char\"123 -- hex\n// \\char`x -- character that can be written (i.e. isn't active)\n// \\char`\\x -- character that cannot be written (e.g. %)\n// These all refer to characters from the font, so we turn them into special\n// calls to a function \\@char dealt with in the Parser.\n\ndefineMacro(\"\\\\char\", function (context) {\n var token = context.popToken();\n var base;\n var number = '';\n\n if (token.text === \"'\") {\n base = 8;\n token = context.popToken();\n } else if (token.text === '\"') {\n base = 16;\n token = context.popToken();\n } else if (token.text === \"`\") {\n token = context.popToken();\n\n if (token.text[0] === \"\\\\\") {\n number = token.text.charCodeAt(1);\n } else if (token.text === \"EOF\") {\n throw new ParseError(\"\\\\char` missing argument\");\n } else {\n number = token.text.charCodeAt(0);\n }\n } else {\n base = 10;\n }\n\n if (base) {\n // Parse a number in the given base, starting with first `token`.\n number = digitToNumber[token.text];\n\n if (number == null || number >= base) {\n throw new ParseError(\"Invalid base-\" + base + \" digit \" + token.text);\n }\n\n var digit;\n\n while ((digit = digitToNumber[context.future().text]) != null && digit < base) {\n number *= base;\n number += digit;\n context.popToken();\n }\n }\n\n return \"\\\\@char{\" + number + \"}\";\n}); // \\newcommand{\\macro}[args]{definition}\n// \\renewcommand{\\macro}[args]{definition}\n// TODO: Optional arguments: \\newcommand{\\macro}[args][default]{definition}\n\nvar newcommand = (context, existsOK, nonexistsOK, skipIfExists) => {\n var arg = context.consumeArg().tokens;\n\n if (arg.length !== 1) {\n throw new ParseError(\"\\\\newcommand's first argument must be a macro name\");\n }\n\n var name = arg[0].text;\n var exists = context.isDefined(name);\n\n if (exists && !existsOK) {\n throw new ParseError(\"\\\\newcommand{\" + name + \"} attempting to redefine \" + (name + \"; use \\\\renewcommand\"));\n }\n\n if (!exists && !nonexistsOK) {\n throw new ParseError(\"\\\\renewcommand{\" + name + \"} when command \" + name + \" \" + \"does not yet exist; use \\\\newcommand\");\n }\n\n var numArgs = 0;\n arg = context.consumeArg().tokens;\n\n if (arg.length === 1 && arg[0].text === \"[\") {\n var argText = '';\n var token = context.expandNextToken();\n\n while (token.text !== \"]\" && token.text !== \"EOF\") {\n // TODO: Should properly expand arg, e.g., ignore {}s\n argText += token.text;\n token = context.expandNextToken();\n }\n\n if (!argText.match(/^\\s*[0-9]+\\s*$/)) {\n throw new ParseError(\"Invalid number of arguments: \" + argText);\n }\n\n numArgs = parseInt(argText);\n arg = context.consumeArg().tokens;\n }\n\n if (!(exists && skipIfExists)) {\n // Final arg is the expansion of the macro\n context.macros.set(name, {\n tokens: arg,\n numArgs\n });\n }\n\n return '';\n};\n\ndefineMacro(\"\\\\newcommand\", context => newcommand(context, false, true, false));\ndefineMacro(\"\\\\renewcommand\", context => newcommand(context, true, false, false));\ndefineMacro(\"\\\\providecommand\", context => newcommand(context, true, true, true)); // terminal (console) tools\n\ndefineMacro(\"\\\\message\", context => {\n var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console\n\n console.log(arg.reverse().map(token => token.text).join(\"\"));\n return '';\n});\ndefineMacro(\"\\\\errmessage\", context => {\n var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console\n\n console.error(arg.reverse().map(token => token.text).join(\"\"));\n return '';\n});\ndefineMacro(\"\\\\show\", context => {\n var tok = context.popToken();\n var name = tok.text; // eslint-disable-next-line no-console\n\n console.log(tok, context.macros.get(name), functions[name], symbols.math[name], symbols.text[name]);\n return '';\n}); //////////////////////////////////////////////////////////////////////\n// Grouping\n// \\let\\bgroup={ \\let\\egroup=}\n\ndefineMacro(\"\\\\bgroup\", \"{\");\ndefineMacro(\"\\\\egroup\", \"}\"); // Symbols from latex.ltx:\n// \\def~{\\nobreakspace{}}\n// \\def\\lq{`}\n// \\def\\rq{'}\n// \\def \\aa {\\r a}\n// \\def \\AA {\\r A}\n\ndefineMacro(\"~\", \"\\\\nobreakspace\");\ndefineMacro(\"\\\\lq\", \"`\");\ndefineMacro(\"\\\\rq\", \"'\");\ndefineMacro(\"\\\\aa\", \"\\\\r a\");\ndefineMacro(\"\\\\AA\", \"\\\\r A\"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML.\n// \\DeclareTextCommandDefault{\\textcopyright}{\\textcircled{c}}\n// \\DeclareTextCommandDefault{\\textregistered}{\\textcircled{%\n// \\check@mathfonts\\fontsize\\sf@size\\z@\\math@fontsfalse\\selectfont R}}\n// \\DeclareRobustCommand{\\copyright}{%\n// \\ifmmode{\\nfss@text{\\textcopyright}}\\else\\textcopyright\\fi}\n\ndefineMacro(\"\\\\textcopyright\", \"\\\\html@mathml{\\\\textcircled{c}}{\\\\char`©}\");\ndefineMacro(\"\\\\copyright\", \"\\\\TextOrMath{\\\\textcopyright}{\\\\text{\\\\textcopyright}}\");\ndefineMacro(\"\\\\textregistered\", \"\\\\html@mathml{\\\\textcircled{\\\\scriptsize R}}{\\\\char`®}\"); // Characters omitted from Unicode range 1D400–1D7FF\n\ndefineMacro(\"\\u212C\", \"\\\\mathscr{B}\"); // script\n\ndefineMacro(\"\\u2130\", \"\\\\mathscr{E}\");\ndefineMacro(\"\\u2131\", \"\\\\mathscr{F}\");\ndefineMacro(\"\\u210B\", \"\\\\mathscr{H}\");\ndefineMacro(\"\\u2110\", \"\\\\mathscr{I}\");\ndefineMacro(\"\\u2112\", \"\\\\mathscr{L}\");\ndefineMacro(\"\\u2133\", \"\\\\mathscr{M}\");\ndefineMacro(\"\\u211B\", \"\\\\mathscr{R}\");\ndefineMacro(\"\\u212D\", \"\\\\mathfrak{C}\"); // Fraktur\n\ndefineMacro(\"\\u210C\", \"\\\\mathfrak{H}\");\ndefineMacro(\"\\u2128\", \"\\\\mathfrak{Z}\"); // Define \\Bbbk with a macro that works in both HTML and MathML.\n\ndefineMacro(\"\\\\Bbbk\", \"\\\\Bbb{k}\"); // Unicode middle dot\n// The KaTeX fonts do not contain U+00B7. Instead, \\cdotp displays\n// the dot at U+22C5 and gives it punct spacing.\n\ndefineMacro(\"\\u00b7\", \"\\\\cdotp\"); // \\llap and \\rlap render their contents in text mode\n\ndefineMacro(\"\\\\llap\", \"\\\\mathllap{\\\\textrm{#1}}\");\ndefineMacro(\"\\\\rlap\", \"\\\\mathrlap{\\\\textrm{#1}}\");\ndefineMacro(\"\\\\clap\", \"\\\\mathclap{\\\\textrm{#1}}\"); // \\mathstrut from the TeXbook, p 360\n\ndefineMacro(\"\\\\mathstrut\", \"\\\\vphantom{(}\"); // \\underbar from TeXbook p 353\n\ndefineMacro(\"\\\\underbar\", \"\\\\underline{\\\\text{#1}}\"); // \\not is defined by base/fontmath.ltx via\n// \\DeclareMathSymbol{\\not}{\\mathrel}{symbols}{\"36}\n// It's thus treated like a \\mathrel, but defined by a symbol that has zero\n// width but extends to the right. We use \\rlap to get that spacing.\n// For MathML we write U+0338 here. buildMathML.js will then do the overlay.\n\ndefineMacro(\"\\\\not\", '\\\\html@mathml{\\\\mathrel{\\\\mathrlap\\\\@not}}{\\\\char\"338}'); // Negated symbols from base/fontmath.ltx:\n// \\def\\neq{\\not=} \\let\\ne=\\neq\n// \\DeclareRobustCommand\n// \\notin{\\mathrel{\\m@th\\mathpalette\\c@ncel\\in}}\n// \\def\\c@ncel#1#2{\\m@th\\ooalign{$\\hfil#1\\mkern1mu/\\hfil$\\crcr$#1#2$}}\n\ndefineMacro(\"\\\\neq\", \"\\\\html@mathml{\\\\mathrel{\\\\not=}}{\\\\mathrel{\\\\char`≠}}\");\ndefineMacro(\"\\\\ne\", \"\\\\neq\");\ndefineMacro(\"\\u2260\", \"\\\\neq\");\ndefineMacro(\"\\\\notin\", \"\\\\html@mathml{\\\\mathrel{{\\\\in}\\\\mathllap{/\\\\mskip1mu}}}\" + \"{\\\\mathrel{\\\\char`∉}}\");\ndefineMacro(\"\\u2209\", \"\\\\notin\"); // Unicode stacked relations\n\ndefineMacro(\"\\u2258\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\kern{-1em}\\\\raisebox{0.4em}{$\\\\scriptsize\\\\frown$}}\" + \"}{\\\\mathrel{\\\\char`\\u2258}}\");\ndefineMacro(\"\\u2259\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\wedge}{=}}{\\\\mathrel{\\\\char`\\u2258}}\");\ndefineMacro(\"\\u225A\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\vee}{=}}{\\\\mathrel{\\\\char`\\u225A}}\");\ndefineMacro(\"\\u225B\", \"\\\\html@mathml{\\\\stackrel{\\\\scriptsize\\\\star}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225B}}\");\ndefineMacro(\"\\u225D\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{def}}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225D}}\");\ndefineMacro(\"\\u225E\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{m}}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225E}}\");\ndefineMacro(\"\\u225F\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny?}{=}}{\\\\mathrel{\\\\char`\\u225F}}\"); // Misc Unicode\n\ndefineMacro(\"\\u27C2\", \"\\\\perp\");\ndefineMacro(\"\\u203C\", \"\\\\mathclose{!\\\\mkern-0.8mu!}\");\ndefineMacro(\"\\u220C\", \"\\\\notni\");\ndefineMacro(\"\\u231C\", \"\\\\ulcorner\");\ndefineMacro(\"\\u231D\", \"\\\\urcorner\");\ndefineMacro(\"\\u231E\", \"\\\\llcorner\");\ndefineMacro(\"\\u231F\", \"\\\\lrcorner\");\ndefineMacro(\"\\u00A9\", \"\\\\copyright\");\ndefineMacro(\"\\u00AE\", \"\\\\textregistered\");\ndefineMacro(\"\\uFE0F\", \"\\\\textregistered\"); // The KaTeX fonts have corners at codepoints that don't match Unicode.\n// For MathML purposes, use the Unicode code point.\n\ndefineMacro(\"\\\\ulcorner\", \"\\\\html@mathml{\\\\@ulcorner}{\\\\mathop{\\\\char\\\"231c}}\");\ndefineMacro(\"\\\\urcorner\", \"\\\\html@mathml{\\\\@urcorner}{\\\\mathop{\\\\char\\\"231d}}\");\ndefineMacro(\"\\\\llcorner\", \"\\\\html@mathml{\\\\@llcorner}{\\\\mathop{\\\\char\\\"231e}}\");\ndefineMacro(\"\\\\lrcorner\", \"\\\\html@mathml{\\\\@lrcorner}{\\\\mathop{\\\\char\\\"231f}}\"); //////////////////////////////////////////////////////////////////////\n// LaTeX_2ε\n// \\vdots{\\vbox{\\baselineskip4\\p@ \\lineskiplimit\\z@\n// \\kern6\\p@\\hbox{.}\\hbox{.}\\hbox{.}}}\n// We'll call \\varvdots, which gets a glyph from symbols.js.\n// The zero-width rule gets us an equivalent to the vertical 6pt kern.\n\ndefineMacro(\"\\\\vdots\", \"{\\\\varvdots\\\\rule{0pt}{15pt}}\");\ndefineMacro(\"\\u22ee\", \"\\\\vdots\"); //////////////////////////////////////////////////////////////////////\n// amsmath.sty\n// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf\n// Italic Greek capital letters. AMS defines these with \\DeclareMathSymbol,\n// but they are equivalent to \\mathit{\\Letter}.\n\ndefineMacro(\"\\\\varGamma\", \"\\\\mathit{\\\\Gamma}\");\ndefineMacro(\"\\\\varDelta\", \"\\\\mathit{\\\\Delta}\");\ndefineMacro(\"\\\\varTheta\", \"\\\\mathit{\\\\Theta}\");\ndefineMacro(\"\\\\varLambda\", \"\\\\mathit{\\\\Lambda}\");\ndefineMacro(\"\\\\varXi\", \"\\\\mathit{\\\\Xi}\");\ndefineMacro(\"\\\\varPi\", \"\\\\mathit{\\\\Pi}\");\ndefineMacro(\"\\\\varSigma\", \"\\\\mathit{\\\\Sigma}\");\ndefineMacro(\"\\\\varUpsilon\", \"\\\\mathit{\\\\Upsilon}\");\ndefineMacro(\"\\\\varPhi\", \"\\\\mathit{\\\\Phi}\");\ndefineMacro(\"\\\\varPsi\", \"\\\\mathit{\\\\Psi}\");\ndefineMacro(\"\\\\varOmega\", \"\\\\mathit{\\\\Omega}\"); //\\newcommand{\\substack}[1]{\\subarray{c}#1\\endsubarray}\n\ndefineMacro(\"\\\\substack\", \"\\\\begin{subarray}{c}#1\\\\end{subarray}\"); // \\renewcommand{\\colon}{\\nobreak\\mskip2mu\\mathpunct{}\\nonscript\n// \\mkern-\\thinmuskip{:}\\mskip6muplus1mu\\relax}\n\ndefineMacro(\"\\\\colon\", \"\\\\nobreak\\\\mskip2mu\\\\mathpunct{}\" + \"\\\\mathchoice{\\\\mkern-3mu}{\\\\mkern-3mu}{}{}{:}\\\\mskip6mu\\\\relax\"); // \\newcommand{\\boxed}[1]{\\fbox{\\m@th$\\displaystyle#1$}}\n\ndefineMacro(\"\\\\boxed\", \"\\\\fbox{$\\\\displaystyle{#1}$}\"); // \\def\\iff{\\DOTSB\\;\\Longleftrightarrow\\;}\n// \\def\\implies{\\DOTSB\\;\\Longrightarrow\\;}\n// \\def\\impliedby{\\DOTSB\\;\\Longleftarrow\\;}\n\ndefineMacro(\"\\\\iff\", \"\\\\DOTSB\\\\;\\\\Longleftrightarrow\\\\;\");\ndefineMacro(\"\\\\implies\", \"\\\\DOTSB\\\\;\\\\Longrightarrow\\\\;\");\ndefineMacro(\"\\\\impliedby\", \"\\\\DOTSB\\\\;\\\\Longleftarrow\\\\;\"); // \\def\\dddot#1{{\\mathop{#1}\\limits^{\\vbox to-1.4\\ex@{\\kern-\\tw@\\ex@\n// \\hbox{\\normalfont ...}\\vss}}}}\n// We use \\overset which avoids the vertical shift of \\mathop.\n\ndefineMacro(\"\\\\dddot\", \"{\\\\overset{\\\\raisebox{-0.1ex}{\\\\normalsize ...}}{#1}}\");\ndefineMacro(\"\\\\ddddot\", \"{\\\\overset{\\\\raisebox{-0.1ex}{\\\\normalsize ....}}{#1}}\"); // AMSMath's automatic \\dots, based on \\mdots@@ macro.\n\nvar dotsByToken = {\n ',': '\\\\dotsc',\n '\\\\not': '\\\\dotsb',\n // \\keybin@ checks for the following:\n '+': '\\\\dotsb',\n '=': '\\\\dotsb',\n '<': '\\\\dotsb',\n '>': '\\\\dotsb',\n '-': '\\\\dotsb',\n '*': '\\\\dotsb',\n ':': '\\\\dotsb',\n // Symbols whose definition starts with \\DOTSB:\n '\\\\DOTSB': '\\\\dotsb',\n '\\\\coprod': '\\\\dotsb',\n '\\\\bigvee': '\\\\dotsb',\n '\\\\bigwedge': '\\\\dotsb',\n '\\\\biguplus': '\\\\dotsb',\n '\\\\bigcap': '\\\\dotsb',\n '\\\\bigcup': '\\\\dotsb',\n '\\\\prod': '\\\\dotsb',\n '\\\\sum': '\\\\dotsb',\n '\\\\bigotimes': '\\\\dotsb',\n '\\\\bigoplus': '\\\\dotsb',\n '\\\\bigodot': '\\\\dotsb',\n '\\\\bigsqcup': '\\\\dotsb',\n '\\\\And': '\\\\dotsb',\n '\\\\longrightarrow': '\\\\dotsb',\n '\\\\Longrightarrow': '\\\\dotsb',\n '\\\\longleftarrow': '\\\\dotsb',\n '\\\\Longleftarrow': '\\\\dotsb',\n '\\\\longleftrightarrow': '\\\\dotsb',\n '\\\\Longleftrightarrow': '\\\\dotsb',\n '\\\\mapsto': '\\\\dotsb',\n '\\\\longmapsto': '\\\\dotsb',\n '\\\\hookrightarrow': '\\\\dotsb',\n '\\\\doteq': '\\\\dotsb',\n // Symbols whose definition starts with \\mathbin:\n '\\\\mathbin': '\\\\dotsb',\n // Symbols whose definition starts with \\mathrel:\n '\\\\mathrel': '\\\\dotsb',\n '\\\\relbar': '\\\\dotsb',\n '\\\\Relbar': '\\\\dotsb',\n '\\\\xrightarrow': '\\\\dotsb',\n '\\\\xleftarrow': '\\\\dotsb',\n // Symbols whose definition starts with \\DOTSI:\n '\\\\DOTSI': '\\\\dotsi',\n '\\\\int': '\\\\dotsi',\n '\\\\oint': '\\\\dotsi',\n '\\\\iint': '\\\\dotsi',\n '\\\\iiint': '\\\\dotsi',\n '\\\\iiiint': '\\\\dotsi',\n '\\\\idotsint': '\\\\dotsi',\n // Symbols whose definition starts with \\DOTSX:\n '\\\\DOTSX': '\\\\dotsx'\n};\ndefineMacro(\"\\\\dots\", function (context) {\n // TODO: If used in text mode, should expand to \\textellipsis.\n // However, in KaTeX, \\textellipsis and \\ldots behave the same\n // (in text mode), and it's unlikely we'd see any of the math commands\n // that affect the behavior of \\dots when in text mode. So fine for now\n // (until we support \\ifmmode ... \\else ... \\fi).\n var thedots = '\\\\dotso';\n var next = context.expandAfterFuture().text;\n\n if (next in dotsByToken) {\n thedots = dotsByToken[next];\n } else if (next.slice(0, 4) === '\\\\not') {\n thedots = '\\\\dotsb';\n } else if (next in symbols.math) {\n if (['bin', 'rel'].includes(symbols.math[next].group)) {\n thedots = '\\\\dotsb';\n }\n }\n\n return thedots;\n});\nvar spaceAfterDots = {\n // \\rightdelim@ checks for the following:\n ')': true,\n ']': true,\n '\\\\rbrack': true,\n '\\\\}': true,\n '\\\\rbrace': true,\n '\\\\rangle': true,\n '\\\\rceil': true,\n '\\\\rfloor': true,\n '\\\\rgroup': true,\n '\\\\rmoustache': true,\n '\\\\right': true,\n '\\\\bigr': true,\n '\\\\biggr': true,\n '\\\\Bigr': true,\n '\\\\Biggr': true,\n // \\extra@ also tests for the following:\n '$': true,\n // \\extrap@ checks for the following:\n ';': true,\n '.': true,\n ',': true\n};\ndefineMacro(\"\\\\dotso\", function (context) {\n var next = context.future().text;\n\n if (next in spaceAfterDots) {\n return \"\\\\ldots\\\\,\";\n } else {\n return \"\\\\ldots\";\n }\n});\ndefineMacro(\"\\\\dotsc\", function (context) {\n var next = context.future().text; // \\dotsc uses \\extra@ but not \\extrap@, instead specially checking for\n // ';' and '.', but doesn't check for ','.\n\n if (next in spaceAfterDots && next !== ',') {\n return \"\\\\ldots\\\\,\";\n } else {\n return \"\\\\ldots\";\n }\n});\ndefineMacro(\"\\\\cdots\", function (context) {\n var next = context.future().text;\n\n if (next in spaceAfterDots) {\n return \"\\\\@cdots\\\\,\";\n } else {\n return \"\\\\@cdots\";\n }\n});\ndefineMacro(\"\\\\dotsb\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsm\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsi\", \"\\\\!\\\\cdots\"); // amsmath doesn't actually define \\dotsx, but \\dots followed by a macro\n// starting with \\DOTSX implies \\dotso, and then \\extra@ detects this case\n// and forces the added `\\,`.\n\ndefineMacro(\"\\\\dotsx\", \"\\\\ldots\\\\,\"); // \\let\\DOTSI\\relax\n// \\let\\DOTSB\\relax\n// \\let\\DOTSX\\relax\n\ndefineMacro(\"\\\\DOTSI\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSB\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSX\", \"\\\\relax\"); // Spacing, based on amsmath.sty's override of LaTeX defaults\n// \\DeclareRobustCommand{\\tmspace}[3]{%\n// \\ifmmode\\mskip#1#2\\else\\kern#1#3\\fi\\relax}\n\ndefineMacro(\"\\\\tmspace\", \"\\\\TextOrMath{\\\\kern#1#3}{\\\\mskip#1#2}\\\\relax\"); // \\renewcommand{\\,}{\\tmspace+\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\n\ndefineMacro(\"\\\\,\", \"\\\\tmspace+{3mu}{.1667em}\"); // \\let\\thinspace\\,\n\ndefineMacro(\"\\\\thinspace\", \"\\\\,\"); // \\def\\>{\\mskip\\medmuskip}\n// \\renewcommand{\\:}{\\tmspace+\\medmuskip{.2222em}}\n// TODO: \\> and math mode of \\: should use \\medmuskip = 4mu plus 2mu minus 4mu\n\ndefineMacro(\"\\\\>\", \"\\\\mskip{4mu}\");\ndefineMacro(\"\\\\:\", \"\\\\tmspace+{4mu}{.2222em}\"); // \\let\\medspace\\:\n\ndefineMacro(\"\\\\medspace\", \"\\\\:\"); // \\renewcommand{\\;}{\\tmspace+\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip = 5mu plus 5mu\n\ndefineMacro(\"\\\\;\", \"\\\\tmspace+{5mu}{.2777em}\"); // \\let\\thickspace\\;\n\ndefineMacro(\"\\\\thickspace\", \"\\\\;\"); // \\renewcommand{\\!}{\\tmspace-\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\n\ndefineMacro(\"\\\\!\", \"\\\\tmspace-{3mu}{.1667em}\"); // \\let\\negthinspace\\!\n\ndefineMacro(\"\\\\negthinspace\", \"\\\\!\"); // \\newcommand{\\negmedspace}{\\tmspace-\\medmuskip{.2222em}}\n// TODO: math mode should use \\medmuskip\n\ndefineMacro(\"\\\\negmedspace\", \"\\\\tmspace-{4mu}{.2222em}\"); // \\newcommand{\\negthickspace}{\\tmspace-\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip\n\ndefineMacro(\"\\\\negthickspace\", \"\\\\tmspace-{5mu}{.277em}\"); // \\def\\enspace{\\kern.5em }\n\ndefineMacro(\"\\\\enspace\", \"\\\\kern.5em \"); // \\def\\enskip{\\hskip.5em\\relax}\n\ndefineMacro(\"\\\\enskip\", \"\\\\hskip.5em\\\\relax\"); // \\def\\quad{\\hskip1em\\relax}\n\ndefineMacro(\"\\\\quad\", \"\\\\hskip1em\\\\relax\"); // \\def\\qquad{\\hskip2em\\relax}\n\ndefineMacro(\"\\\\qquad\", \"\\\\hskip2em\\\\relax\"); // \\tag@in@display form of \\tag\n\ndefineMacro(\"\\\\tag\", \"\\\\@ifstar\\\\tag@literal\\\\tag@paren\");\ndefineMacro(\"\\\\tag@paren\", \"\\\\tag@literal{({#1})}\");\ndefineMacro(\"\\\\tag@literal\", context => {\n if (context.macros.get(\"\\\\df@tag\")) {\n throw new ParseError(\"Multiple \\\\tag\");\n }\n\n return \"\\\\gdef\\\\df@tag{\\\\text{#1}}\";\n}); // \\renewcommand{\\bmod}{\\nonscript\\mskip-\\medmuskip\\mkern5mu\\mathbin\n// {\\operator@font mod}\\penalty900\n// \\mkern5mu\\nonscript\\mskip-\\medmuskip}\n// \\newcommand{\\pod}[1]{\\allowbreak\n// \\if@display\\mkern18mu\\else\\mkern8mu\\fi(#1)}\n// \\renewcommand{\\pmod}[1]{\\pod{{\\operator@font mod}\\mkern6mu#1}}\n// \\newcommand{\\mod}[1]{\\allowbreak\\if@display\\mkern18mu\n// \\else\\mkern12mu\\fi{\\operator@font mod}\\,\\,#1}\n// TODO: math mode should use \\medmuskip = 4mu plus 2mu minus 4mu\n\ndefineMacro(\"\\\\bmod\", \"\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}\" + \"\\\\mathbin{\\\\rm mod}\" + \"\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}\");\ndefineMacro(\"\\\\pod\", \"\\\\allowbreak\" + \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern8mu}{\\\\mkern8mu}{\\\\mkern8mu}(#1)\");\ndefineMacro(\"\\\\pmod\", \"\\\\pod{{\\\\rm mod}\\\\mkern6mu#1}\");\ndefineMacro(\"\\\\mod\", \"\\\\allowbreak\" + \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern12mu}{\\\\mkern12mu}{\\\\mkern12mu}\" + \"{\\\\rm mod}\\\\,\\\\,#1\"); //////////////////////////////////////////////////////////////////////\n// LaTeX source2e\n// \\expandafter\\let\\expandafter\\@normalcr\n// \\csname\\expandafter\\@gobble\\string\\\\ \\endcsname\n// \\DeclareRobustCommand\\newline{\\@normalcr\\relax}\n\ndefineMacro(\"\\\\newline\", \"\\\\\\\\\\\\relax\"); // \\def\\TeX{T\\kern-.1667em\\lower.5ex\\hbox{E}\\kern-.125emX\\@}\n// TODO: Doesn't normally work in math mode because \\@ fails. KaTeX doesn't\n// support \\@ yet, so that's omitted, and we add \\text so that the result\n// doesn't look funny in math mode.\n\ndefineMacro(\"\\\\TeX\", \"\\\\textrm{\\\\html@mathml{\" + \"T\\\\kern-.1667em\\\\raisebox{-.5ex}{E}\\\\kern-.125emX\" + \"}{TeX}}\"); // \\DeclareRobustCommand{\\LaTeX}{L\\kern-.36em%\n// {\\sbox\\z@ T%\n// \\vbox to\\ht\\z@{\\hbox{\\check@mathfonts\n// \\fontsize\\sf@size\\z@\n// \\math@fontsfalse\\selectfont\n// A}%\n// \\vss}%\n// }%\n// \\kern-.15em%\n// \\TeX}\n// This code aligns the top of the A with the T (from the perspective of TeX's\n// boxes, though visually the A appears to extend above slightly).\n// We compute the corresponding \\raisebox when A is rendered in \\normalsize\n// \\scriptstyle, which has a scale factor of 0.7 (see Options.js).\n\nvar latexRaiseA = makeEm(fontMetricsData['Main-Regular'][\"T\".charCodeAt(0)][1] - 0.7 * fontMetricsData['Main-Regular'][\"A\".charCodeAt(0)][1]);\ndefineMacro(\"\\\\LaTeX\", \"\\\\textrm{\\\\html@mathml{\" + (\"L\\\\kern-.36em\\\\raisebox{\" + latexRaiseA + \"}{\\\\scriptstyle A}\") + \"\\\\kern-.15em\\\\TeX}{LaTeX}}\"); // New KaTeX logo based on tweaking LaTeX logo\n\ndefineMacro(\"\\\\KaTeX\", \"\\\\textrm{\\\\html@mathml{\" + (\"K\\\\kern-.17em\\\\raisebox{\" + latexRaiseA + \"}{\\\\scriptstyle A}\") + \"\\\\kern-.15em\\\\TeX}{KaTeX}}\"); // \\DeclareRobustCommand\\hspace{\\@ifstar\\@hspacer\\@hspace}\n// \\def\\@hspace#1{\\hskip #1\\relax}\n// \\def\\@hspacer#1{\\vrule \\@width\\z@\\nobreak\n// \\hskip #1\\hskip \\z@skip}\n\ndefineMacro(\"\\\\hspace\", \"\\\\@ifstar\\\\@hspacer\\\\@hspace\");\ndefineMacro(\"\\\\@hspace\", \"\\\\hskip #1\\\\relax\");\ndefineMacro(\"\\\\@hspacer\", \"\\\\rule{0pt}{0pt}\\\\hskip #1\\\\relax\"); //////////////////////////////////////////////////////////////////////\n// mathtools.sty\n//\\providecommand\\ordinarycolon{:}\n\ndefineMacro(\"\\\\ordinarycolon\", \":\"); //\\def\\vcentcolon{\\mathrel{\\mathop\\ordinarycolon}}\n//TODO(edemaine): Not yet centered. Fix via \\raisebox or #726\n\ndefineMacro(\"\\\\vcentcolon\", \"\\\\mathrel{\\\\mathop\\\\ordinarycolon}\"); // \\providecommand*\\dblcolon{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}\n\ndefineMacro(\"\\\\dblcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-.9mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2237}}\"); // \\providecommand*\\coloneqq{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}\n\ndefineMacro(\"\\\\coloneqq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}=}}\" + \"{\\\\mathop{\\\\char\\\"2254}}\"); // ≔\n// \\providecommand*\\Coloneqq{\\dblcolon\\mathrel{\\mkern-1.2mu}=}\n\ndefineMacro(\"\\\\Coloneqq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}=}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"3d}}\"); // \\providecommand*\\coloneq{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\n\ndefineMacro(\"\\\\coloneq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"2212}}\"); // \\providecommand*\\Coloneq{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\n\ndefineMacro(\"\\\\Coloneq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"2212}}\"); // \\providecommand*\\eqqcolon{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}\n\ndefineMacro(\"\\\\eqqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2255}}\"); // ≕\n// \\providecommand*\\Eqqcolon{=\\mathrel{\\mkern-1.2mu}\\dblcolon}\n\ndefineMacro(\"\\\\Eqqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}\" + \"{\\\\mathop{\\\\char\\\"3d\\\\char\\\"2237}}\"); // \\providecommand*\\eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}\n\ndefineMacro(\"\\\\eqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2239}}\"); // \\providecommand*\\Eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}\n\ndefineMacro(\"\\\\Eqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}\" + \"{\\\\mathop{\\\\char\\\"2212\\\\char\\\"2237}}\"); // \\providecommand*\\colonapprox{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}\n\ndefineMacro(\"\\\\colonapprox\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"2248}}\"); // \\providecommand*\\Colonapprox{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}\n\ndefineMacro(\"\\\\Colonapprox\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"2248}}\"); // \\providecommand*\\colonsim{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}\n\ndefineMacro(\"\\\\colonsim\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"223c}}\"); // \\providecommand*\\Colonsim{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}\n\ndefineMacro(\"\\\\Colonsim\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"223c}}\"); // Some Unicode characters are implemented with macros to mathtools functions.\n\ndefineMacro(\"\\u2237\", \"\\\\dblcolon\"); // ::\n\ndefineMacro(\"\\u2239\", \"\\\\eqcolon\"); // -:\n\ndefineMacro(\"\\u2254\", \"\\\\coloneqq\"); // :=\n\ndefineMacro(\"\\u2255\", \"\\\\eqqcolon\"); // =:\n\ndefineMacro(\"\\u2A74\", \"\\\\Coloneqq\"); // ::=\n//////////////////////////////////////////////////////////////////////\n// colonequals.sty\n// Alternate names for mathtools's macros:\n\ndefineMacro(\"\\\\ratio\", \"\\\\vcentcolon\");\ndefineMacro(\"\\\\coloncolon\", \"\\\\dblcolon\");\ndefineMacro(\"\\\\colonequals\", \"\\\\coloneqq\");\ndefineMacro(\"\\\\coloncolonequals\", \"\\\\Coloneqq\");\ndefineMacro(\"\\\\equalscolon\", \"\\\\eqqcolon\");\ndefineMacro(\"\\\\equalscoloncolon\", \"\\\\Eqqcolon\");\ndefineMacro(\"\\\\colonminus\", \"\\\\coloneq\");\ndefineMacro(\"\\\\coloncolonminus\", \"\\\\Coloneq\");\ndefineMacro(\"\\\\minuscolon\", \"\\\\eqcolon\");\ndefineMacro(\"\\\\minuscoloncolon\", \"\\\\Eqcolon\"); // \\colonapprox name is same in mathtools and colonequals.\n\ndefineMacro(\"\\\\coloncolonapprox\", \"\\\\Colonapprox\"); // \\colonsim name is same in mathtools and colonequals.\n\ndefineMacro(\"\\\\coloncolonsim\", \"\\\\Colonsim\"); // Additional macros, implemented by analogy with mathtools definitions:\n\ndefineMacro(\"\\\\simcolon\", \"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\");\ndefineMacro(\"\\\\simcoloncolon\", \"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\");\ndefineMacro(\"\\\\approxcolon\", \"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\");\ndefineMacro(\"\\\\approxcoloncolon\", \"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\"); // Present in newtxmath, pxfonts and txfonts\n\ndefineMacro(\"\\\\notni\", \"\\\\html@mathml{\\\\not\\\\ni}{\\\\mathrel{\\\\char`\\u220C}}\");\ndefineMacro(\"\\\\limsup\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,sup}\");\ndefineMacro(\"\\\\liminf\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,inf}\"); //////////////////////////////////////////////////////////////////////\n// From amsopn.sty\n\ndefineMacro(\"\\\\injlim\", \"\\\\DOTSB\\\\operatorname*{inj\\\\,lim}\");\ndefineMacro(\"\\\\projlim\", \"\\\\DOTSB\\\\operatorname*{proj\\\\,lim}\");\ndefineMacro(\"\\\\varlimsup\", \"\\\\DOTSB\\\\operatorname*{\\\\overline{lim}}\");\ndefineMacro(\"\\\\varliminf\", \"\\\\DOTSB\\\\operatorname*{\\\\underline{lim}}\");\ndefineMacro(\"\\\\varinjlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underrightarrow{lim}}\");\ndefineMacro(\"\\\\varprojlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underleftarrow{lim}}\"); //////////////////////////////////////////////////////////////////////\n// MathML alternates for KaTeX glyphs in the Unicode private area\n\ndefineMacro(\"\\\\gvertneqq\", \"\\\\html@mathml{\\\\@gvertneqq}{\\u2269}\");\ndefineMacro(\"\\\\lvertneqq\", \"\\\\html@mathml{\\\\@lvertneqq}{\\u2268}\");\ndefineMacro(\"\\\\ngeqq\", \"\\\\html@mathml{\\\\@ngeqq}{\\u2271}\");\ndefineMacro(\"\\\\ngeqslant\", \"\\\\html@mathml{\\\\@ngeqslant}{\\u2271}\");\ndefineMacro(\"\\\\nleqq\", \"\\\\html@mathml{\\\\@nleqq}{\\u2270}\");\ndefineMacro(\"\\\\nleqslant\", \"\\\\html@mathml{\\\\@nleqslant}{\\u2270}\");\ndefineMacro(\"\\\\nshortmid\", \"\\\\html@mathml{\\\\@nshortmid}{∤}\");\ndefineMacro(\"\\\\nshortparallel\", \"\\\\html@mathml{\\\\@nshortparallel}{∦}\");\ndefineMacro(\"\\\\nsubseteqq\", \"\\\\html@mathml{\\\\@nsubseteqq}{\\u2288}\");\ndefineMacro(\"\\\\nsupseteqq\", \"\\\\html@mathml{\\\\@nsupseteqq}{\\u2289}\");\ndefineMacro(\"\\\\varsubsetneq\", \"\\\\html@mathml{\\\\@varsubsetneq}{⊊}\");\ndefineMacro(\"\\\\varsubsetneqq\", \"\\\\html@mathml{\\\\@varsubsetneqq}{⫋}\");\ndefineMacro(\"\\\\varsupsetneq\", \"\\\\html@mathml{\\\\@varsupsetneq}{⊋}\");\ndefineMacro(\"\\\\varsupsetneqq\", \"\\\\html@mathml{\\\\@varsupsetneqq}{⫌}\");\ndefineMacro(\"\\\\imath\", \"\\\\html@mathml{\\\\@imath}{\\u0131}\");\ndefineMacro(\"\\\\jmath\", \"\\\\html@mathml{\\\\@jmath}{\\u0237}\"); //////////////////////////////////////////////////////////////////////\n// stmaryrd and semantic\n// The stmaryrd and semantic packages render the next four items by calling a\n// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros.\n\ndefineMacro(\"\\\\llbracket\", \"\\\\html@mathml{\" + \"\\\\mathopen{[\\\\mkern-3.2mu[}}\" + \"{\\\\mathopen{\\\\char`\\u27e6}}\");\ndefineMacro(\"\\\\rrbracket\", \"\\\\html@mathml{\" + \"\\\\mathclose{]\\\\mkern-3.2mu]}}\" + \"{\\\\mathclose{\\\\char`\\u27e7}}\");\ndefineMacro(\"\\u27e6\", \"\\\\llbracket\"); // blackboard bold [\n\ndefineMacro(\"\\u27e7\", \"\\\\rrbracket\"); // blackboard bold ]\n\ndefineMacro(\"\\\\lBrace\", \"\\\\html@mathml{\" + \"\\\\mathopen{\\\\{\\\\mkern-3.2mu[}}\" + \"{\\\\mathopen{\\\\char`\\u2983}}\");\ndefineMacro(\"\\\\rBrace\", \"\\\\html@mathml{\" + \"\\\\mathclose{]\\\\mkern-3.2mu\\\\}}}\" + \"{\\\\mathclose{\\\\char`\\u2984}}\");\ndefineMacro(\"\\u2983\", \"\\\\lBrace\"); // blackboard bold {\n\ndefineMacro(\"\\u2984\", \"\\\\rBrace\"); // blackboard bold }\n// TODO: Create variable sized versions of the last two items. I believe that\n// will require new font glyphs.\n// The stmaryrd function `\\minuso` provides a \"Plimsoll\" symbol that\n// superimposes the characters \\circ and \\mathminus. Used in chemistry.\n\ndefineMacro(\"\\\\minuso\", \"\\\\mathbin{\\\\html@mathml{\" + \"{\\\\mathrlap{\\\\mathchoice{\\\\kern{0.145em}}{\\\\kern{0.145em}}\" + \"{\\\\kern{0.1015em}}{\\\\kern{0.0725em}}\\\\circ}{-}}}\" + \"{\\\\char`⦵}}\");\ndefineMacro(\"⦵\", \"\\\\minuso\"); //////////////////////////////////////////////////////////////////////\n// texvc.sty\n// The texvc package contains macros available in mediawiki pages.\n// We omit the functions deprecated at\n// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax\n// We also omit texvc's \\O, which conflicts with \\text{\\O}\n\ndefineMacro(\"\\\\darr\", \"\\\\downarrow\");\ndefineMacro(\"\\\\dArr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\Darr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\lang\", \"\\\\langle\");\ndefineMacro(\"\\\\rang\", \"\\\\rangle\");\ndefineMacro(\"\\\\uarr\", \"\\\\uparrow\");\ndefineMacro(\"\\\\uArr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\Uarr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\N\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\R\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Z\", \"\\\\mathbb{Z}\");\ndefineMacro(\"\\\\alef\", \"\\\\aleph\");\ndefineMacro(\"\\\\alefsym\", \"\\\\aleph\");\ndefineMacro(\"\\\\Alpha\", \"\\\\mathrm{A}\");\ndefineMacro(\"\\\\Beta\", \"\\\\mathrm{B}\");\ndefineMacro(\"\\\\bull\", \"\\\\bullet\");\ndefineMacro(\"\\\\Chi\", \"\\\\mathrm{X}\");\ndefineMacro(\"\\\\clubs\", \"\\\\clubsuit\");\ndefineMacro(\"\\\\cnums\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Complex\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Dagger\", \"\\\\ddagger\");\ndefineMacro(\"\\\\diamonds\", \"\\\\diamondsuit\");\ndefineMacro(\"\\\\empty\", \"\\\\emptyset\");\ndefineMacro(\"\\\\Epsilon\", \"\\\\mathrm{E}\");\ndefineMacro(\"\\\\Eta\", \"\\\\mathrm{H}\");\ndefineMacro(\"\\\\exist\", \"\\\\exists\");\ndefineMacro(\"\\\\harr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\hArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Harr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\hearts\", \"\\\\heartsuit\");\ndefineMacro(\"\\\\image\", \"\\\\Im\");\ndefineMacro(\"\\\\infin\", \"\\\\infty\");\ndefineMacro(\"\\\\Iota\", \"\\\\mathrm{I}\");\ndefineMacro(\"\\\\isin\", \"\\\\in\");\ndefineMacro(\"\\\\Kappa\", \"\\\\mathrm{K}\");\ndefineMacro(\"\\\\larr\", \"\\\\leftarrow\");\ndefineMacro(\"\\\\lArr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\Larr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\lrarr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\lrArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Lrarr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Mu\", \"\\\\mathrm{M}\");\ndefineMacro(\"\\\\natnums\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\Nu\", \"\\\\mathrm{N}\");\ndefineMacro(\"\\\\Omicron\", \"\\\\mathrm{O}\");\ndefineMacro(\"\\\\plusmn\", \"\\\\pm\");\ndefineMacro(\"\\\\rarr\", \"\\\\rightarrow\");\ndefineMacro(\"\\\\rArr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\Rarr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\real\", \"\\\\Re\");\ndefineMacro(\"\\\\reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Rho\", \"\\\\mathrm{P}\");\ndefineMacro(\"\\\\sdot\", \"\\\\cdot\");\ndefineMacro(\"\\\\sect\", \"\\\\S\");\ndefineMacro(\"\\\\spades\", \"\\\\spadesuit\");\ndefineMacro(\"\\\\sub\", \"\\\\subset\");\ndefineMacro(\"\\\\sube\", \"\\\\subseteq\");\ndefineMacro(\"\\\\supe\", \"\\\\supseteq\");\ndefineMacro(\"\\\\Tau\", \"\\\\mathrm{T}\");\ndefineMacro(\"\\\\thetasym\", \"\\\\vartheta\"); // TODO: defineMacro(\"\\\\varcoppa\", \"\\\\\\mbox{\\\\coppa}\");\n\ndefineMacro(\"\\\\weierp\", \"\\\\wp\");\ndefineMacro(\"\\\\Zeta\", \"\\\\mathrm{Z}\"); //////////////////////////////////////////////////////////////////////\n// statmath.sty\n// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf\n\ndefineMacro(\"\\\\argmin\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,min}\");\ndefineMacro(\"\\\\argmax\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,max}\");\ndefineMacro(\"\\\\plim\", \"\\\\DOTSB\\\\mathop{\\\\operatorname{plim}}\\\\limits\"); //////////////////////////////////////////////////////////////////////\n// braket.sty\n// http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/braket/braket.pdf\n\ndefineMacro(\"\\\\bra\", \"\\\\mathinner{\\\\langle{#1}|}\");\ndefineMacro(\"\\\\ket\", \"\\\\mathinner{|{#1}\\\\rangle}\");\ndefineMacro(\"\\\\braket\", \"\\\\mathinner{\\\\langle{#1}\\\\rangle}\");\ndefineMacro(\"\\\\Bra\", \"\\\\left\\\\langle#1\\\\right|\");\ndefineMacro(\"\\\\Ket\", \"\\\\left|#1\\\\right\\\\rangle\");\n\nvar braketHelper = one => context => {\n var left = context.consumeArg().tokens;\n var middle = context.consumeArg().tokens;\n var middleDouble = context.consumeArg().tokens;\n var right = context.consumeArg().tokens;\n var oldMiddle = context.macros.get(\"|\");\n var oldMiddleDouble = context.macros.get(\"\\\\|\");\n context.macros.beginGroup();\n\n var midMacro = double => context => {\n if (one) {\n // Only modify the first instance of | or \\|\n context.macros.set(\"|\", oldMiddle);\n\n if (middleDouble.length) {\n context.macros.set(\"\\\\|\", oldMiddleDouble);\n }\n }\n\n var doubled = double;\n\n if (!double && middleDouble.length) {\n // Mimic \\@ifnextchar\n var nextToken = context.future();\n\n if (nextToken.text === \"|\") {\n context.popToken();\n doubled = true;\n }\n }\n\n return {\n tokens: doubled ? middleDouble : middle,\n numArgs: 0\n };\n };\n\n context.macros.set(\"|\", midMacro(false));\n\n if (middleDouble.length) {\n context.macros.set(\"\\\\|\", midMacro(true));\n }\n\n var arg = context.consumeArg().tokens;\n var expanded = context.expandTokens([...right, ...arg, ...left // reversed\n ]);\n context.macros.endGroup();\n return {\n tokens: expanded.reverse(),\n numArgs: 0\n };\n};\n\ndefineMacro(\"\\\\bra@ket\", braketHelper(false));\ndefineMacro(\"\\\\bra@set\", braketHelper(true));\ndefineMacro(\"\\\\Braket\", \"\\\\bra@ket{\\\\left\\\\langle}\" + \"{\\\\,\\\\middle\\\\vert\\\\,}{\\\\,\\\\middle\\\\vert\\\\,}{\\\\right\\\\rangle}\");\ndefineMacro(\"\\\\Set\", \"\\\\bra@set{\\\\left\\\\{\\\\:}\" + \"{\\\\;\\\\middle\\\\vert\\\\;}{\\\\;\\\\middle\\\\Vert\\\\;}{\\\\:\\\\right\\\\}}\");\ndefineMacro(\"\\\\set\", \"\\\\bra@set{\\\\{\\\\,}{\\\\mid}{}{\\\\,\\\\}}\"); // has no support for special || or \\|\n//////////////////////////////////////////////////////////////////////\n// actuarialangle.dtx\n\ndefineMacro(\"\\\\angln\", \"{\\\\angl n}\"); // Custom Khan Academy colors, should be moved to an optional package\n\ndefineMacro(\"\\\\blue\", \"\\\\textcolor{##6495ed}{#1}\");\ndefineMacro(\"\\\\orange\", \"\\\\textcolor{##ffa500}{#1}\");\ndefineMacro(\"\\\\pink\", \"\\\\textcolor{##ff00af}{#1}\");\ndefineMacro(\"\\\\red\", \"\\\\textcolor{##df0030}{#1}\");\ndefineMacro(\"\\\\green\", \"\\\\textcolor{##28ae7b}{#1}\");\ndefineMacro(\"\\\\gray\", \"\\\\textcolor{gray}{#1}\");\ndefineMacro(\"\\\\purple\", \"\\\\textcolor{##9d38bd}{#1}\");\ndefineMacro(\"\\\\blueA\", \"\\\\textcolor{##ccfaff}{#1}\");\ndefineMacro(\"\\\\blueB\", \"\\\\textcolor{##80f6ff}{#1}\");\ndefineMacro(\"\\\\blueC\", \"\\\\textcolor{##63d9ea}{#1}\");\ndefineMacro(\"\\\\blueD\", \"\\\\textcolor{##11accd}{#1}\");\ndefineMacro(\"\\\\blueE\", \"\\\\textcolor{##0c7f99}{#1}\");\ndefineMacro(\"\\\\tealA\", \"\\\\textcolor{##94fff5}{#1}\");\ndefineMacro(\"\\\\tealB\", \"\\\\textcolor{##26edd5}{#1}\");\ndefineMacro(\"\\\\tealC\", \"\\\\textcolor{##01d1c1}{#1}\");\ndefineMacro(\"\\\\tealD\", \"\\\\textcolor{##01a995}{#1}\");\ndefineMacro(\"\\\\tealE\", \"\\\\textcolor{##208170}{#1}\");\ndefineMacro(\"\\\\greenA\", \"\\\\textcolor{##b6ffb0}{#1}\");\ndefineMacro(\"\\\\greenB\", \"\\\\textcolor{##8af281}{#1}\");\ndefineMacro(\"\\\\greenC\", \"\\\\textcolor{##74cf70}{#1}\");\ndefineMacro(\"\\\\greenD\", \"\\\\textcolor{##1fab54}{#1}\");\ndefineMacro(\"\\\\greenE\", \"\\\\textcolor{##0d923f}{#1}\");\ndefineMacro(\"\\\\goldA\", \"\\\\textcolor{##ffd0a9}{#1}\");\ndefineMacro(\"\\\\goldB\", \"\\\\textcolor{##ffbb71}{#1}\");\ndefineMacro(\"\\\\goldC\", \"\\\\textcolor{##ff9c39}{#1}\");\ndefineMacro(\"\\\\goldD\", \"\\\\textcolor{##e07d10}{#1}\");\ndefineMacro(\"\\\\goldE\", \"\\\\textcolor{##a75a05}{#1}\");\ndefineMacro(\"\\\\redA\", \"\\\\textcolor{##fca9a9}{#1}\");\ndefineMacro(\"\\\\redB\", \"\\\\textcolor{##ff8482}{#1}\");\ndefineMacro(\"\\\\redC\", \"\\\\textcolor{##f9685d}{#1}\");\ndefineMacro(\"\\\\redD\", \"\\\\textcolor{##e84d39}{#1}\");\ndefineMacro(\"\\\\redE\", \"\\\\textcolor{##bc2612}{#1}\");\ndefineMacro(\"\\\\maroonA\", \"\\\\textcolor{##ffbde0}{#1}\");\ndefineMacro(\"\\\\maroonB\", \"\\\\textcolor{##ff92c6}{#1}\");\ndefineMacro(\"\\\\maroonC\", \"\\\\textcolor{##ed5fa6}{#1}\");\ndefineMacro(\"\\\\maroonD\", \"\\\\textcolor{##ca337c}{#1}\");\ndefineMacro(\"\\\\maroonE\", \"\\\\textcolor{##9e034e}{#1}\");\ndefineMacro(\"\\\\purpleA\", \"\\\\textcolor{##ddd7ff}{#1}\");\ndefineMacro(\"\\\\purpleB\", \"\\\\textcolor{##c6b9fc}{#1}\");\ndefineMacro(\"\\\\purpleC\", \"\\\\textcolor{##aa87ff}{#1}\");\ndefineMacro(\"\\\\purpleD\", \"\\\\textcolor{##7854ab}{#1}\");\ndefineMacro(\"\\\\purpleE\", \"\\\\textcolor{##543b78}{#1}\");\ndefineMacro(\"\\\\mintA\", \"\\\\textcolor{##f5f9e8}{#1}\");\ndefineMacro(\"\\\\mintB\", \"\\\\textcolor{##edf2df}{#1}\");\ndefineMacro(\"\\\\mintC\", \"\\\\textcolor{##e0e5cc}{#1}\");\ndefineMacro(\"\\\\grayA\", \"\\\\textcolor{##f6f7f7}{#1}\");\ndefineMacro(\"\\\\grayB\", \"\\\\textcolor{##f0f1f2}{#1}\");\ndefineMacro(\"\\\\grayC\", \"\\\\textcolor{##e3e5e6}{#1}\");\ndefineMacro(\"\\\\grayD\", \"\\\\textcolor{##d6d8da}{#1}\");\ndefineMacro(\"\\\\grayE\", \"\\\\textcolor{##babec2}{#1}\");\ndefineMacro(\"\\\\grayF\", \"\\\\textcolor{##888d93}{#1}\");\ndefineMacro(\"\\\\grayG\", \"\\\\textcolor{##626569}{#1}\");\ndefineMacro(\"\\\\grayH\", \"\\\\textcolor{##3b3e40}{#1}\");\ndefineMacro(\"\\\\grayI\", \"\\\\textcolor{##21242c}{#1}\");\ndefineMacro(\"\\\\kaBlue\", \"\\\\textcolor{##314453}{#1}\");\ndefineMacro(\"\\\\kaGreen\", \"\\\\textcolor{##71B307}{#1}\");\n\n/**\n * This file contains the “gullet” where macros are expanded\n * until only non-macro tokens remain.\n */\n// List of commands that act like macros but aren't defined as a macro,\n// function, or symbol. Used in `isDefined`.\nvar implicitCommands = {\n \"^\": true,\n // Parser.js\n \"_\": true,\n // Parser.js\n \"\\\\limits\": true,\n // Parser.js\n \"\\\\nolimits\": true // Parser.js\n\n};\nclass MacroExpander {\n constructor(input, settings, mode) {\n this.settings = void 0;\n this.expansionCount = void 0;\n this.lexer = void 0;\n this.macros = void 0;\n this.stack = void 0;\n this.mode = void 0;\n this.settings = settings;\n this.expansionCount = 0;\n this.feed(input); // Make new global namespace\n\n this.macros = new Namespace(macros, settings.macros);\n this.mode = mode;\n this.stack = []; // contains tokens in REVERSE order\n }\n /**\n * Feed a new input string to the same MacroExpander\n * (with existing macros etc.).\n */\n\n\n feed(input) {\n this.lexer = new Lexer(input, this.settings);\n }\n /**\n * Switches between \"text\" and \"math\" modes.\n */\n\n\n switchMode(newMode) {\n this.mode = newMode;\n }\n /**\n * Start a new group nesting within all namespaces.\n */\n\n\n beginGroup() {\n this.macros.beginGroup();\n }\n /**\n * End current group nesting within all namespaces.\n */\n\n\n endGroup() {\n this.macros.endGroup();\n }\n /**\n * Ends all currently nested groups (if any), restoring values before the\n * groups began. Useful in case of an error in the middle of parsing.\n */\n\n\n endGroups() {\n this.macros.endGroups();\n }\n /**\n * Returns the topmost token on the stack, without expanding it.\n * Similar in behavior to TeX's `\\futurelet`.\n */\n\n\n future() {\n if (this.stack.length === 0) {\n this.pushToken(this.lexer.lex());\n }\n\n return this.stack[this.stack.length - 1];\n }\n /**\n * Remove and return the next unexpanded token.\n */\n\n\n popToken() {\n this.future(); // ensure non-empty stack\n\n return this.stack.pop();\n }\n /**\n * Add a given token to the token stack. In particular, this get be used\n * to put back a token returned from one of the other methods.\n */\n\n\n pushToken(token) {\n this.stack.push(token);\n }\n /**\n * Append an array of tokens to the token stack.\n */\n\n\n pushTokens(tokens) {\n this.stack.push(...tokens);\n }\n /**\n * Find an macro argument without expanding tokens and append the array of\n * tokens to the token stack. Uses Token as a container for the result.\n */\n\n\n scanArgument(isOptional) {\n var start;\n var end;\n var tokens;\n\n if (isOptional) {\n this.consumeSpaces(); // \\@ifnextchar gobbles any space following it\n\n if (this.future().text !== \"[\") {\n return null;\n }\n\n start = this.popToken(); // don't include [ in tokens\n\n ({\n tokens,\n end\n } = this.consumeArg([\"]\"]));\n } else {\n ({\n tokens,\n start,\n end\n } = this.consumeArg());\n } // indicate the end of an argument\n\n\n this.pushToken(new Token(\"EOF\", end.loc));\n this.pushTokens(tokens);\n return new Token(\"\", SourceLocation.range(start, end));\n }\n /**\n * Consume all following space tokens, without expansion.\n */\n\n\n consumeSpaces() {\n for (;;) {\n var token = this.future();\n\n if (token.text === \" \") {\n this.stack.pop();\n } else {\n break;\n }\n }\n }\n /**\n * Consume an argument from the token stream, and return the resulting array\n * of tokens and start/end token.\n */\n\n\n consumeArg(delims) {\n // The argument for a delimited parameter is the shortest (possibly\n // empty) sequence of tokens with properly nested {...} groups that is\n // followed ... by this particular list of non-parameter tokens.\n // The argument for an undelimited parameter is the next nonblank\n // token, unless that token is ‘{’, when the argument will be the\n // entire {...} group that follows.\n var tokens = [];\n var isDelimited = delims && delims.length > 0;\n\n if (!isDelimited) {\n // Ignore spaces between arguments. As the TeXbook says:\n // \"After you have said ‘\\def\\row#1#2{...}’, you are allowed to\n // put spaces between the arguments (e.g., ‘\\row x n’), because\n // TeX doesn’t use single spaces as undelimited arguments.\"\n this.consumeSpaces();\n }\n\n var start = this.future();\n var tok;\n var depth = 0;\n var match = 0;\n\n do {\n tok = this.popToken();\n tokens.push(tok);\n\n if (tok.text === \"{\") {\n ++depth;\n } else if (tok.text === \"}\") {\n --depth;\n\n if (depth === -1) {\n throw new ParseError(\"Extra }\", tok);\n }\n } else if (tok.text === \"EOF\") {\n throw new ParseError(\"Unexpected end of input in a macro argument\" + \", expected '\" + (delims && isDelimited ? delims[match] : \"}\") + \"'\", tok);\n }\n\n if (delims && isDelimited) {\n if ((depth === 0 || depth === 1 && delims[match] === \"{\") && tok.text === delims[match]) {\n ++match;\n\n if (match === delims.length) {\n // don't include delims in tokens\n tokens.splice(-match, match);\n break;\n }\n } else {\n match = 0;\n }\n }\n } while (depth !== 0 || isDelimited); // If the argument found ... has the form ‘{<nested tokens>}’,\n // ... the outermost braces enclosing the argument are removed\n\n\n if (start.text === \"{\" && tokens[tokens.length - 1].text === \"}\") {\n tokens.pop();\n tokens.shift();\n }\n\n tokens.reverse(); // to fit in with stack order\n\n return {\n tokens,\n start,\n end: tok\n };\n }\n /**\n * Consume the specified number of (delimited) arguments from the token\n * stream and return the resulting array of arguments.\n */\n\n\n consumeArgs(numArgs, delimiters) {\n if (delimiters) {\n if (delimiters.length !== numArgs + 1) {\n throw new ParseError(\"The length of delimiters doesn't match the number of args!\");\n }\n\n var delims = delimiters[0];\n\n for (var i = 0; i < delims.length; i++) {\n var tok = this.popToken();\n\n if (delims[i] !== tok.text) {\n throw new ParseError(\"Use of the macro doesn't match its definition\", tok);\n }\n }\n }\n\n var args = [];\n\n for (var _i = 0; _i < numArgs; _i++) {\n args.push(this.consumeArg(delimiters && delimiters[_i + 1]).tokens);\n }\n\n return args;\n }\n /**\n * Increment `expansionCount` by the specified amount.\n * Throw an error if it exceeds `maxExpand`.\n */\n\n\n countExpansion(amount) {\n this.expansionCount += amount;\n\n if (this.expansionCount > this.settings.maxExpand) {\n throw new ParseError(\"Too many expansions: infinite loop or \" + \"need to increase maxExpand setting\");\n }\n }\n /**\n * Expand the next token only once if possible.\n *\n * If the token is expanded, the resulting tokens will be pushed onto\n * the stack in reverse order, and the number of such tokens will be\n * returned. This number might be zero or positive.\n *\n * If not, the return value is `false`, and the next token remains at the\n * top of the stack.\n *\n * In either case, the next token will be on the top of the stack,\n * or the stack will be empty (in case of empty expansion\n * and no other tokens).\n *\n * Used to implement `expandAfterFuture` and `expandNextToken`.\n *\n * If expandableOnly, only expandable tokens are expanded and\n * an undefined control sequence results in an error.\n */\n\n\n expandOnce(expandableOnly) {\n var topToken = this.popToken();\n var name = topToken.text;\n var expansion = !topToken.noexpand ? this._getExpansion(name) : null;\n\n if (expansion == null || expandableOnly && expansion.unexpandable) {\n if (expandableOnly && expansion == null && name[0] === \"\\\\\" && !this.isDefined(name)) {\n throw new ParseError(\"Undefined control sequence: \" + name);\n }\n\n this.pushToken(topToken);\n return false;\n }\n\n this.countExpansion(1);\n var tokens = expansion.tokens;\n var args = this.consumeArgs(expansion.numArgs, expansion.delimiters);\n\n if (expansion.numArgs) {\n // paste arguments in place of the placeholders\n tokens = tokens.slice(); // make a shallow copy\n\n for (var i = tokens.length - 1; i >= 0; --i) {\n var tok = tokens[i];\n\n if (tok.text === \"#\") {\n if (i === 0) {\n throw new ParseError(\"Incomplete placeholder at end of macro body\", tok);\n }\n\n tok = tokens[--i]; // next token on stack\n\n if (tok.text === \"#\") {\n // ## → #\n tokens.splice(i + 1, 1); // drop first #\n } else if (/^[1-9]$/.test(tok.text)) {\n // replace the placeholder with the indicated argument\n tokens.splice(i, 2, ...args[+tok.text - 1]);\n } else {\n throw new ParseError(\"Not a valid argument number\", tok);\n }\n }\n }\n } // Concatenate expansion onto top of stack.\n\n\n this.pushTokens(tokens);\n return tokens.length;\n }\n /**\n * Expand the next token only once (if possible), and return the resulting\n * top token on the stack (without removing anything from the stack).\n * Similar in behavior to TeX's `\\expandafter\\futurelet`.\n * Equivalent to expandOnce() followed by future().\n */\n\n\n expandAfterFuture() {\n this.expandOnce();\n return this.future();\n }\n /**\n * Recursively expand first token, then return first non-expandable token.\n */\n\n\n expandNextToken() {\n for (;;) {\n if (this.expandOnce() === false) {\n // fully expanded\n var token = this.stack.pop(); // the token after \\noexpand is interpreted as if its meaning\n // were ‘\\relax’\n\n if (token.treatAsRelax) {\n token.text = \"\\\\relax\";\n }\n\n return token;\n }\n } // Flow unable to figure out that this pathway is impossible.\n // https://github.com/facebook/flow/issues/4808\n\n\n throw new Error(); // eslint-disable-line no-unreachable\n }\n /**\n * Fully expand the given macro name and return the resulting list of\n * tokens, or return `undefined` if no such macro is defined.\n */\n\n\n expandMacro(name) {\n return this.macros.has(name) ? this.expandTokens([new Token(name)]) : undefined;\n }\n /**\n * Fully expand the given token stream and return the resulting list of\n * tokens. Note that the input tokens are in reverse order, but the\n * output tokens are in forward order.\n */\n\n\n expandTokens(tokens) {\n var output = [];\n var oldStackLength = this.stack.length;\n this.pushTokens(tokens);\n\n while (this.stack.length > oldStackLength) {\n // Expand only expandable tokens\n if (this.expandOnce(true) === false) {\n // fully expanded\n var token = this.stack.pop();\n\n if (token.treatAsRelax) {\n // the expansion of \\noexpand is the token itself\n token.noexpand = false;\n token.treatAsRelax = false;\n }\n\n output.push(token);\n }\n } // Count all of these tokens as additional expansions, to prevent\n // exponential blowup from linearly many \\edef's.\n\n\n this.countExpansion(output.length);\n return output;\n }\n /**\n * Fully expand the given macro name and return the result as a string,\n * or return `undefined` if no such macro is defined.\n */\n\n\n expandMacroAsText(name) {\n var tokens = this.expandMacro(name);\n\n if (tokens) {\n return tokens.map(token => token.text).join(\"\");\n } else {\n return tokens;\n }\n }\n /**\n * Returns the expanded macro as a reversed array of tokens and a macro\n * argument count. Or returns `null` if no such macro.\n */\n\n\n _getExpansion(name) {\n var definition = this.macros.get(name);\n\n if (definition == null) {\n // mainly checking for undefined here\n return definition;\n } // If a single character has an associated catcode other than 13\n // (active character), then don't expand it.\n\n\n if (name.length === 1) {\n var catcode = this.lexer.catcodes[name];\n\n if (catcode != null && catcode !== 13) {\n return;\n }\n }\n\n var expansion = typeof definition === \"function\" ? definition(this) : definition;\n\n if (typeof expansion === \"string\") {\n var numArgs = 0;\n\n if (expansion.indexOf(\"#\") !== -1) {\n var stripped = expansion.replace(/##/g, \"\");\n\n while (stripped.indexOf(\"#\" + (numArgs + 1)) !== -1) {\n ++numArgs;\n }\n }\n\n var bodyLexer = new Lexer(expansion, this.settings);\n var tokens = [];\n var tok = bodyLexer.lex();\n\n while (tok.text !== \"EOF\") {\n tokens.push(tok);\n tok = bodyLexer.lex();\n }\n\n tokens.reverse(); // to fit in with stack using push and pop\n\n var expanded = {\n tokens,\n numArgs\n };\n return expanded;\n }\n\n return expansion;\n }\n /**\n * Determine whether a command is currently \"defined\" (has some\n * functionality), meaning that it's a macro (in the current group),\n * a function, a symbol, or one of the special commands listed in\n * `implicitCommands`.\n */\n\n\n isDefined(name) {\n return this.macros.has(name) || functions.hasOwnProperty(name) || symbols.math.hasOwnProperty(name) || symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name);\n }\n /**\n * Determine whether a command is expandable.\n */\n\n\n isExpandable(name) {\n var macro = this.macros.get(name);\n return macro != null ? typeof macro === \"string\" || typeof macro === \"function\" || !macro.unexpandable : functions.hasOwnProperty(name) && !functions[name].primitive;\n }\n\n}\n\n// Helpers for Parser.js handling of Unicode (sub|super)script characters.\nvar unicodeSubRegEx = /^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/;\nvar uSubsAndSups = Object.freeze({\n '₊': '+',\n '₋': '-',\n '₌': '=',\n '₍': '(',\n '₎': ')',\n '₀': '0',\n '₁': '1',\n '₂': '2',\n '₃': '3',\n '₄': '4',\n '₅': '5',\n '₆': '6',\n '₇': '7',\n '₈': '8',\n '₉': '9',\n '\\u2090': 'a',\n '\\u2091': 'e',\n '\\u2095': 'h',\n '\\u1D62': 'i',\n '\\u2C7C': 'j',\n '\\u2096': 'k',\n '\\u2097': 'l',\n '\\u2098': 'm',\n '\\u2099': 'n',\n '\\u2092': 'o',\n '\\u209A': 'p',\n '\\u1D63': 'r',\n '\\u209B': 's',\n '\\u209C': 't',\n '\\u1D64': 'u',\n '\\u1D65': 'v',\n '\\u2093': 'x',\n '\\u1D66': 'β',\n '\\u1D67': 'γ',\n '\\u1D68': 'ρ',\n '\\u1D69': '\\u03d5',\n '\\u1D6A': 'χ',\n '⁺': '+',\n '⁻': '-',\n '⁼': '=',\n '⁽': '(',\n '⁾': ')',\n '⁰': '0',\n '¹': '1',\n '²': '2',\n '³': '3',\n '⁴': '4',\n '⁵': '5',\n '⁶': '6',\n '⁷': '7',\n '⁸': '8',\n '⁹': '9',\n '\\u1D2C': 'A',\n '\\u1D2E': 'B',\n '\\u1D30': 'D',\n '\\u1D31': 'E',\n '\\u1D33': 'G',\n '\\u1D34': 'H',\n '\\u1D35': 'I',\n '\\u1D36': 'J',\n '\\u1D37': 'K',\n '\\u1D38': 'L',\n '\\u1D39': 'M',\n '\\u1D3A': 'N',\n '\\u1D3C': 'O',\n '\\u1D3E': 'P',\n '\\u1D3F': 'R',\n '\\u1D40': 'T',\n '\\u1D41': 'U',\n '\\u2C7D': 'V',\n '\\u1D42': 'W',\n '\\u1D43': 'a',\n '\\u1D47': 'b',\n '\\u1D9C': 'c',\n '\\u1D48': 'd',\n '\\u1D49': 'e',\n '\\u1DA0': 'f',\n '\\u1D4D': 'g',\n '\\u02B0': 'h',\n '\\u2071': 'i',\n '\\u02B2': 'j',\n '\\u1D4F': 'k',\n '\\u02E1': 'l',\n '\\u1D50': 'm',\n '\\u207F': 'n',\n '\\u1D52': 'o',\n '\\u1D56': 'p',\n '\\u02B3': 'r',\n '\\u02E2': 's',\n '\\u1D57': 't',\n '\\u1D58': 'u',\n '\\u1D5B': 'v',\n '\\u02B7': 'w',\n '\\u02E3': 'x',\n '\\u02B8': 'y',\n '\\u1DBB': 'z',\n '\\u1D5D': 'β',\n '\\u1D5E': 'γ',\n '\\u1D5F': 'δ',\n '\\u1D60': '\\u03d5',\n '\\u1D61': 'χ',\n '\\u1DBF': 'θ'\n});\n\n/* eslint no-constant-condition:0 */\n\nvar unicodeAccents = {\n \"́\": {\n \"text\": \"\\\\'\",\n \"math\": \"\\\\acute\"\n },\n \"̀\": {\n \"text\": \"\\\\`\",\n \"math\": \"\\\\grave\"\n },\n \"̈\": {\n \"text\": \"\\\\\\\"\",\n \"math\": \"\\\\ddot\"\n },\n \"̃\": {\n \"text\": \"\\\\~\",\n \"math\": \"\\\\tilde\"\n },\n \"̄\": {\n \"text\": \"\\\\=\",\n \"math\": \"\\\\bar\"\n },\n \"̆\": {\n \"text\": \"\\\\u\",\n \"math\": \"\\\\breve\"\n },\n \"̌\": {\n \"text\": \"\\\\v\",\n \"math\": \"\\\\check\"\n },\n \"̂\": {\n \"text\": \"\\\\^\",\n \"math\": \"\\\\hat\"\n },\n \"̇\": {\n \"text\": \"\\\\.\",\n \"math\": \"\\\\dot\"\n },\n \"̊\": {\n \"text\": \"\\\\r\",\n \"math\": \"\\\\mathring\"\n },\n \"̋\": {\n \"text\": \"\\\\H\"\n },\n \"̧\": {\n \"text\": \"\\\\c\"\n }\n};\nvar unicodeSymbols = {\n \"á\": \"á\",\n \"à\": \"à\",\n \"ä\": \"ä\",\n \"ǟ\": \"ǟ\",\n \"ã\": \"ã\",\n \"ā\": \"ā\",\n \"ă\": \"ă\",\n \"ắ\": \"ắ\",\n \"ằ\": \"ằ\",\n \"ẵ\": \"ẵ\",\n \"ǎ\": \"ǎ\",\n \"â\": \"â\",\n \"ấ\": \"ấ\",\n \"ầ\": \"ầ\",\n \"ẫ\": \"ẫ\",\n \"ȧ\": \"ȧ\",\n \"ǡ\": \"ǡ\",\n \"å\": \"å\",\n \"ǻ\": \"ǻ\",\n \"ḃ\": \"ḃ\",\n \"ć\": \"ć\",\n \"ḉ\": \"ḉ\",\n \"č\": \"č\",\n \"ĉ\": \"ĉ\",\n \"ċ\": \"ċ\",\n \"ç\": \"ç\",\n \"ď\": \"ď\",\n \"ḋ\": \"ḋ\",\n \"ḑ\": \"ḑ\",\n \"é\": \"é\",\n \"è\": \"è\",\n \"ë\": \"ë\",\n \"ẽ\": \"ẽ\",\n \"ē\": \"ē\",\n \"ḗ\": \"ḗ\",\n \"ḕ\": \"ḕ\",\n \"ĕ\": \"ĕ\",\n \"ḝ\": \"ḝ\",\n \"ě\": \"ě\",\n \"ê\": \"ê\",\n \"ế\": \"ế\",\n \"ề\": \"ề\",\n \"ễ\": \"ễ\",\n \"ė\": \"ė\",\n \"ȩ\": \"ȩ\",\n \"ḟ\": \"ḟ\",\n \"ǵ\": \"ǵ\",\n \"ḡ\": \"ḡ\",\n \"ğ\": \"ğ\",\n \"ǧ\": \"ǧ\",\n \"ĝ\": \"ĝ\",\n \"ġ\": \"ġ\",\n \"ģ\": \"ģ\",\n \"ḧ\": \"ḧ\",\n \"ȟ\": \"ȟ\",\n \"ĥ\": \"ĥ\",\n \"ḣ\": \"ḣ\",\n \"ḩ\": \"ḩ\",\n \"í\": \"í\",\n \"ì\": \"ì\",\n \"ï\": \"ï\",\n \"ḯ\": \"ḯ\",\n \"ĩ\": \"ĩ\",\n \"ī\": \"ī\",\n \"ĭ\": \"ĭ\",\n \"ǐ\": \"ǐ\",\n \"î\": \"î\",\n \"ǰ\": \"ǰ\",\n \"ĵ\": \"ĵ\",\n \"ḱ\": \"ḱ\",\n \"ǩ\": \"ǩ\",\n \"ķ\": \"ķ\",\n \"ĺ\": \"ĺ\",\n \"ľ\": \"ľ\",\n \"ļ\": \"ļ\",\n \"ḿ\": \"ḿ\",\n \"ṁ\": \"ṁ\",\n \"ń\": \"ń\",\n \"ǹ\": \"ǹ\",\n \"ñ\": \"ñ\",\n \"ň\": \"ň\",\n \"ṅ\": \"ṅ\",\n \"ņ\": \"ņ\",\n \"ó\": \"ó\",\n \"ò\": \"ò\",\n \"ö\": \"ö\",\n \"ȫ\": \"ȫ\",\n \"õ\": \"õ\",\n \"ṍ\": \"ṍ\",\n \"ṏ\": \"ṏ\",\n \"ȭ\": \"ȭ\",\n \"ō\": \"ō\",\n \"ṓ\": \"ṓ\",\n \"ṑ\": \"ṑ\",\n \"ŏ\": \"ŏ\",\n \"ǒ\": \"ǒ\",\n \"ô\": \"ô\",\n \"ố\": \"ố\",\n \"ồ\": \"ồ\",\n \"ỗ\": \"ỗ\",\n \"ȯ\": \"ȯ\",\n \"ȱ\": \"ȱ\",\n \"ő\": \"ő\",\n \"ṕ\": \"ṕ\",\n \"ṗ\": \"ṗ\",\n \"ŕ\": \"ŕ\",\n \"ř\": \"ř\",\n \"ṙ\": \"ṙ\",\n \"ŗ\": \"ŗ\",\n \"ś\": \"ś\",\n \"ṥ\": \"ṥ\",\n \"š\": \"š\",\n \"ṧ\": \"ṧ\",\n \"ŝ\": \"ŝ\",\n \"ṡ\": \"ṡ\",\n \"ş\": \"ş\",\n \"ẗ\": \"ẗ\",\n \"ť\": \"ť\",\n \"ṫ\": \"ṫ\",\n \"ţ\": \"ţ\",\n \"ú\": \"ú\",\n \"ù\": \"ù\",\n \"ü\": \"ü\",\n \"ǘ\": \"ǘ\",\n \"ǜ\": \"ǜ\",\n \"ǖ\": \"ǖ\",\n \"ǚ\": \"ǚ\",\n \"ũ\": \"ũ\",\n \"ṹ\": \"ṹ\",\n \"ū\": \"ū\",\n \"ṻ\": \"ṻ\",\n \"ŭ\": \"ŭ\",\n \"ǔ\": \"ǔ\",\n \"û\": \"û\",\n \"ů\": \"ů\",\n \"ű\": \"ű\",\n \"ṽ\": \"ṽ\",\n \"ẃ\": \"ẃ\",\n \"ẁ\": \"ẁ\",\n \"ẅ\": \"ẅ\",\n \"ŵ\": \"ŵ\",\n \"ẇ\": \"ẇ\",\n \"ẘ\": \"ẘ\",\n \"ẍ\": \"ẍ\",\n \"ẋ\": \"ẋ\",\n \"ý\": \"ý\",\n \"ỳ\": \"ỳ\",\n \"ÿ\": \"ÿ\",\n \"ỹ\": \"ỹ\",\n \"ȳ\": \"ȳ\",\n \"ŷ\": \"ŷ\",\n \"ẏ\": \"ẏ\",\n \"ẙ\": \"ẙ\",\n \"ź\": \"ź\",\n \"ž\": \"ž\",\n \"ẑ\": \"ẑ\",\n \"ż\": \"ż\",\n \"Á\": \"Á\",\n \"À\": \"À\",\n \"Ä\": \"Ä\",\n \"Ǟ\": \"Ǟ\",\n \"Ã\": \"Ã\",\n \"Ā\": \"Ā\",\n \"Ă\": \"Ă\",\n \"Ắ\": \"Ắ\",\n \"Ằ\": \"Ằ\",\n \"Ẵ\": \"Ẵ\",\n \"Ǎ\": \"Ǎ\",\n \"Â\": \"Â\",\n \"Ấ\": \"Ấ\",\n \"Ầ\": \"Ầ\",\n \"Ẫ\": \"Ẫ\",\n \"Ȧ\": \"Ȧ\",\n \"Ǡ\": \"Ǡ\",\n \"Å\": \"Å\",\n \"Ǻ\": \"Ǻ\",\n \"Ḃ\": \"Ḃ\",\n \"Ć\": \"Ć\",\n \"Ḉ\": \"Ḉ\",\n \"Č\": \"Č\",\n \"Ĉ\": \"Ĉ\",\n \"Ċ\": \"Ċ\",\n \"Ç\": \"Ç\",\n \"Ď\": \"Ď\",\n \"Ḋ\": \"Ḋ\",\n \"Ḑ\": \"Ḑ\",\n \"É\": \"É\",\n \"È\": \"È\",\n \"Ë\": \"Ë\",\n \"Ẽ\": \"Ẽ\",\n \"Ē\": \"Ē\",\n \"Ḗ\": \"Ḗ\",\n \"Ḕ\": \"Ḕ\",\n \"Ĕ\": \"Ĕ\",\n \"Ḝ\": \"Ḝ\",\n \"Ě\": \"Ě\",\n \"Ê\": \"Ê\",\n \"Ế\": \"Ế\",\n \"Ề\": \"Ề\",\n \"Ễ\": \"Ễ\",\n \"Ė\": \"Ė\",\n \"Ȩ\": \"Ȩ\",\n \"Ḟ\": \"Ḟ\",\n \"Ǵ\": \"Ǵ\",\n \"Ḡ\": \"Ḡ\",\n \"Ğ\": \"Ğ\",\n \"Ǧ\": \"Ǧ\",\n \"Ĝ\": \"Ĝ\",\n \"Ġ\": \"Ġ\",\n \"Ģ\": \"Ģ\",\n \"Ḧ\": \"Ḧ\",\n \"Ȟ\": \"Ȟ\",\n \"Ĥ\": \"Ĥ\",\n \"Ḣ\": \"Ḣ\",\n \"Ḩ\": \"Ḩ\",\n \"Í\": \"Í\",\n \"Ì\": \"Ì\",\n \"Ï\": \"Ï\",\n \"Ḯ\": \"Ḯ\",\n \"Ĩ\": \"Ĩ\",\n \"Ī\": \"Ī\",\n \"Ĭ\": \"Ĭ\",\n \"Ǐ\": \"Ǐ\",\n \"Î\": \"Î\",\n \"İ\": \"İ\",\n \"Ĵ\": \"Ĵ\",\n \"Ḱ\": \"Ḱ\",\n \"Ǩ\": \"Ǩ\",\n \"Ķ\": \"Ķ\",\n \"Ĺ\": \"Ĺ\",\n \"Ľ\": \"Ľ\",\n \"Ļ\": \"Ļ\",\n \"Ḿ\": \"Ḿ\",\n \"Ṁ\": \"Ṁ\",\n \"Ń\": \"Ń\",\n \"Ǹ\": \"Ǹ\",\n \"Ñ\": \"Ñ\",\n \"Ň\": \"Ň\",\n \"Ṅ\": \"Ṅ\",\n \"Ņ\": \"Ņ\",\n \"Ó\": \"Ó\",\n \"Ò\": \"Ò\",\n \"Ö\": \"Ö\",\n \"Ȫ\": \"Ȫ\",\n \"Õ\": \"Õ\",\n \"Ṍ\": \"Ṍ\",\n \"Ṏ\": \"Ṏ\",\n \"Ȭ\": \"Ȭ\",\n \"Ō\": \"Ō\",\n \"Ṓ\": \"Ṓ\",\n \"Ṑ\": \"Ṑ\",\n \"Ŏ\": \"Ŏ\",\n \"Ǒ\": \"Ǒ\",\n \"Ô\": \"Ô\",\n \"Ố\": \"Ố\",\n \"Ồ\": \"Ồ\",\n \"Ỗ\": \"Ỗ\",\n \"Ȯ\": \"Ȯ\",\n \"Ȱ\": \"Ȱ\",\n \"Ő\": \"Ő\",\n \"Ṕ\": \"Ṕ\",\n \"Ṗ\": \"Ṗ\",\n \"Ŕ\": \"Ŕ\",\n \"Ř\": \"Ř\",\n \"Ṙ\": \"Ṙ\",\n \"Ŗ\": \"Ŗ\",\n \"Ś\": \"Ś\",\n \"Ṥ\": \"Ṥ\",\n \"Š\": \"Š\",\n \"Ṧ\": \"Ṧ\",\n \"Ŝ\": \"Ŝ\",\n \"Ṡ\": \"Ṡ\",\n \"Ş\": \"Ş\",\n \"Ť\": \"Ť\",\n \"Ṫ\": \"Ṫ\",\n \"Ţ\": \"Ţ\",\n \"Ú\": \"Ú\",\n \"Ù\": \"Ù\",\n \"Ü\": \"Ü\",\n \"Ǘ\": \"Ǘ\",\n \"Ǜ\": \"Ǜ\",\n \"Ǖ\": \"Ǖ\",\n \"Ǚ\": \"Ǚ\",\n \"Ũ\": \"Ũ\",\n \"Ṹ\": \"Ṹ\",\n \"Ū\": \"Ū\",\n \"Ṻ\": \"Ṻ\",\n \"Ŭ\": \"Ŭ\",\n \"Ǔ\": \"Ǔ\",\n \"Û\": \"Û\",\n \"Ů\": \"Ů\",\n \"Ű\": \"Ű\",\n \"Ṽ\": \"Ṽ\",\n \"Ẃ\": \"Ẃ\",\n \"Ẁ\": \"Ẁ\",\n \"Ẅ\": \"Ẅ\",\n \"Ŵ\": \"Ŵ\",\n \"Ẇ\": \"Ẇ\",\n \"Ẍ\": \"Ẍ\",\n \"Ẋ\": \"Ẋ\",\n \"Ý\": \"Ý\",\n \"Ỳ\": \"Ỳ\",\n \"Ÿ\": \"Ÿ\",\n \"Ỹ\": \"Ỹ\",\n \"Ȳ\": \"Ȳ\",\n \"Ŷ\": \"Ŷ\",\n \"Ẏ\": \"Ẏ\",\n \"Ź\": \"Ź\",\n \"Ž\": \"Ž\",\n \"Ẑ\": \"Ẑ\",\n \"Ż\": \"Ż\",\n \"ά\": \"ά\",\n \"ὰ\": \"ὰ\",\n \"ᾱ\": \"ᾱ\",\n \"ᾰ\": \"ᾰ\",\n \"έ\": \"έ\",\n \"ὲ\": \"ὲ\",\n \"ή\": \"ή\",\n \"ὴ\": \"ὴ\",\n \"ί\": \"ί\",\n \"ὶ\": \"ὶ\",\n \"ϊ\": \"ϊ\",\n \"ΐ\": \"ΐ\",\n \"ῒ\": \"ῒ\",\n \"ῑ\": \"ῑ\",\n \"ῐ\": \"ῐ\",\n \"ό\": \"ό\",\n \"ὸ\": \"ὸ\",\n \"ύ\": \"ύ\",\n \"ὺ\": \"ὺ\",\n \"ϋ\": \"ϋ\",\n \"ΰ\": \"ΰ\",\n \"ῢ\": \"ῢ\",\n \"ῡ\": \"ῡ\",\n \"ῠ\": \"ῠ\",\n \"ώ\": \"ώ\",\n \"ὼ\": \"ὼ\",\n \"Ύ\": \"Ύ\",\n \"Ὺ\": \"Ὺ\",\n \"Ϋ\": \"Ϋ\",\n \"Ῡ\": \"Ῡ\",\n \"Ῠ\": \"Ῠ\",\n \"Ώ\": \"Ώ\",\n \"Ὼ\": \"Ὼ\"\n};\n\n/**\n * This file contains the parser used to parse out a TeX expression from the\n * input. Since TeX isn't context-free, standard parsers don't work particularly\n * well.\n *\n * The strategy of this parser is as such:\n *\n * The main functions (the `.parse...` ones) take a position in the current\n * parse string to parse tokens from. The lexer (found in Lexer.js, stored at\n * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When\n * individual tokens are needed at a position, the lexer is called to pull out a\n * token, which is then used.\n *\n * The parser has a property called \"mode\" indicating the mode that\n * the parser is currently in. Currently it has to be one of \"math\" or\n * \"text\", which denotes whether the current environment is a math-y\n * one or a text-y one (e.g. inside \\text). Currently, this serves to\n * limit the functions which can be used in text mode.\n *\n * The main functions then return an object which contains the useful data that\n * was parsed at its given point, and a new position at the end of the parsed\n * data. The main functions can call each other and continue the parsing by\n * using the returned position as a new starting point.\n *\n * There are also extra `.handle...` functions, which pull out some reused\n * functionality into self-contained functions.\n *\n * The functions return ParseNodes.\n */\nclass Parser {\n constructor(input, settings) {\n this.mode = void 0;\n this.gullet = void 0;\n this.settings = void 0;\n this.leftrightDepth = void 0;\n this.nextToken = void 0;\n // Start in math mode\n this.mode = \"math\"; // Create a new macro expander (gullet) and (indirectly via that) also a\n // new lexer (mouth) for this parser (stomach, in the language of TeX)\n\n this.gullet = new MacroExpander(input, settings, this.mode); // Store the settings for use in parsing\n\n this.settings = settings; // Count leftright depth (for \\middle errors)\n\n this.leftrightDepth = 0;\n }\n /**\n * Checks a result to make sure it has the right type, and throws an\n * appropriate error otherwise.\n */\n\n\n expect(text, consume) {\n if (consume === void 0) {\n consume = true;\n }\n\n if (this.fetch().text !== text) {\n throw new ParseError(\"Expected '\" + text + \"', got '\" + this.fetch().text + \"'\", this.fetch());\n }\n\n if (consume) {\n this.consume();\n }\n }\n /**\n * Discards the current lookahead token, considering it consumed.\n */\n\n\n consume() {\n this.nextToken = null;\n }\n /**\n * Return the current lookahead token, or if there isn't one (at the\n * beginning, or if the previous lookahead token was consume()d),\n * fetch the next token as the new lookahead token and return it.\n */\n\n\n fetch() {\n if (this.nextToken == null) {\n this.nextToken = this.gullet.expandNextToken();\n }\n\n return this.nextToken;\n }\n /**\n * Switches between \"text\" and \"math\" modes.\n */\n\n\n switchMode(newMode) {\n this.mode = newMode;\n this.gullet.switchMode(newMode);\n }\n /**\n * Main parsing function, which parses an entire input.\n */\n\n\n parse() {\n if (!this.settings.globalGroup) {\n // Create a group namespace for the math expression.\n // (LaTeX creates a new group for every $...$, $$...$$, \\[...\\].)\n this.gullet.beginGroup();\n } // Use old \\color behavior (same as LaTeX's \\textcolor) if requested.\n // We do this within the group for the math expression, so it doesn't\n // pollute settings.macros.\n\n\n if (this.settings.colorIsTextColor) {\n this.gullet.macros.set(\"\\\\color\", \"\\\\textcolor\");\n }\n\n try {\n // Try to parse the input\n var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end\n\n this.expect(\"EOF\"); // End the group namespace for the expression\n\n if (!this.settings.globalGroup) {\n this.gullet.endGroup();\n }\n\n return parse; // Close any leftover groups in case of a parse error.\n } finally {\n this.gullet.endGroups();\n }\n }\n /**\n * Fully parse a separate sequence of tokens as a separate job.\n * Tokens should be specified in reverse order, as in a MacroDefinition.\n */\n\n\n subparse(tokens) {\n // Save the next token from the current job.\n var oldToken = this.nextToken;\n this.consume(); // Run the new job, terminating it with an excess '}'\n\n this.gullet.pushToken(new Token(\"}\"));\n this.gullet.pushTokens(tokens);\n var parse = this.parseExpression(false);\n this.expect(\"}\"); // Restore the next token from the current job.\n\n this.nextToken = oldToken;\n return parse;\n }\n\n /**\n * Parses an \"expression\", which is a list of atoms.\n *\n * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This\n * happens when functions have higher precedence han infix\n * nodes in implicit parses.\n *\n * `breakOnTokenText`: The text of the token that the expression should end\n * with, or `null` if something else should end the\n * expression.\n */\n parseExpression(breakOnInfix, breakOnTokenText) {\n var body = []; // Keep adding atoms to the body until we can't parse any more atoms (either\n // we reached the end, a }, or a \\right)\n\n while (true) {\n // Ignore spaces in math mode\n if (this.mode === \"math\") {\n this.consumeSpaces();\n }\n\n var lex = this.fetch();\n\n if (Parser.endOfExpression.indexOf(lex.text) !== -1) {\n break;\n }\n\n if (breakOnTokenText && lex.text === breakOnTokenText) {\n break;\n }\n\n if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) {\n break;\n }\n\n var atom = this.parseAtom(breakOnTokenText);\n\n if (!atom) {\n break;\n } else if (atom.type === \"internal\") {\n // Internal nodes do not appear in parse tree\n continue;\n }\n\n body.push(atom);\n }\n\n if (this.mode === \"text\") {\n this.formLigatures(body);\n }\n\n return this.handleInfixNodes(body);\n }\n /**\n * Rewrites infix operators such as \\over with corresponding commands such\n * as \\frac.\n *\n * There can only be one infix operator per group. If there's more than one\n * then the expression is ambiguous. This can be resolved by adding {}.\n */\n\n\n handleInfixNodes(body) {\n var overIndex = -1;\n var funcName;\n\n for (var i = 0; i < body.length; i++) {\n if (body[i].type === \"infix\") {\n if (overIndex !== -1) {\n throw new ParseError(\"only one infix operator per group\", body[i].token);\n }\n\n overIndex = i;\n funcName = body[i].replaceWith;\n }\n }\n\n if (overIndex !== -1 && funcName) {\n var numerNode;\n var denomNode;\n var numerBody = body.slice(0, overIndex);\n var denomBody = body.slice(overIndex + 1);\n\n if (numerBody.length === 1 && numerBody[0].type === \"ordgroup\") {\n numerNode = numerBody[0];\n } else {\n numerNode = {\n type: \"ordgroup\",\n mode: this.mode,\n body: numerBody\n };\n }\n\n if (denomBody.length === 1 && denomBody[0].type === \"ordgroup\") {\n denomNode = denomBody[0];\n } else {\n denomNode = {\n type: \"ordgroup\",\n mode: this.mode,\n body: denomBody\n };\n }\n\n var node;\n\n if (funcName === \"\\\\\\\\abovefrac\") {\n node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []);\n } else {\n node = this.callFunction(funcName, [numerNode, denomNode], []);\n }\n\n return [node];\n } else {\n return body;\n }\n }\n /**\n * Handle a subscript or superscript with nice errors.\n */\n\n\n handleSupSubscript(name // For error reporting.\n ) {\n var symbolToken = this.fetch();\n var symbol = symbolToken.text;\n this.consume();\n this.consumeSpaces(); // ignore spaces before sup/subscript argument\n // Skip over allowed internal nodes such as \\relax\n\n var group;\n\n do {\n var _group;\n\n group = this.parseGroup(name);\n } while (((_group = group) == null ? void 0 : _group.type) === \"internal\");\n\n if (!group) {\n throw new ParseError(\"Expected group after '\" + symbol + \"'\", symbolToken);\n }\n\n return group;\n }\n /**\n * Converts the textual input of an unsupported command into a text node\n * contained within a color node whose color is determined by errorColor\n */\n\n\n formatUnsupportedCmd(text) {\n var textordArray = [];\n\n for (var i = 0; i < text.length; i++) {\n textordArray.push({\n type: \"textord\",\n mode: \"text\",\n text: text[i]\n });\n }\n\n var textNode = {\n type: \"text\",\n mode: this.mode,\n body: textordArray\n };\n var colorNode = {\n type: \"color\",\n mode: this.mode,\n color: this.settings.errorColor,\n body: [textNode]\n };\n return colorNode;\n }\n /**\n * Parses a group with optional super/subscripts.\n */\n\n\n parseAtom(breakOnTokenText) {\n // The body of an atom is an implicit group, so that things like\n // \\left(x\\right)^2 work correctly.\n var base = this.parseGroup(\"atom\", breakOnTokenText); // Internal nodes (e.g. \\relax) cannot support super/subscripts.\n // Instead we will pick up super/subscripts with blank base next round.\n\n if ((base == null ? void 0 : base.type) === \"internal\") {\n return base;\n } // In text mode, we don't have superscripts or subscripts\n\n\n if (this.mode === \"text\") {\n return base;\n } // Note that base may be empty (i.e. null) at this point.\n\n\n var superscript;\n var subscript;\n\n while (true) {\n // Guaranteed in math mode, so eat any spaces first.\n this.consumeSpaces(); // Lex the first token\n\n var lex = this.fetch();\n\n if (lex.text === \"\\\\limits\" || lex.text === \"\\\\nolimits\") {\n // We got a limit control\n if (base && base.type === \"op\") {\n var limits = lex.text === \"\\\\limits\";\n base.limits = limits;\n base.alwaysHandleSupSub = true;\n } else if (base && base.type === \"operatorname\") {\n if (base.alwaysHandleSupSub) {\n base.limits = lex.text === \"\\\\limits\";\n }\n } else {\n throw new ParseError(\"Limit controls must follow a math operator\", lex);\n }\n\n this.consume();\n } else if (lex.text === \"^\") {\n // We got a superscript start\n if (superscript) {\n throw new ParseError(\"Double superscript\", lex);\n }\n\n superscript = this.handleSupSubscript(\"superscript\");\n } else if (lex.text === \"_\") {\n // We got a subscript start\n if (subscript) {\n throw new ParseError(\"Double subscript\", lex);\n }\n\n subscript = this.handleSupSubscript(\"subscript\");\n } else if (lex.text === \"'\") {\n // We got a prime\n if (superscript) {\n throw new ParseError(\"Double superscript\", lex);\n }\n\n var prime = {\n type: \"textord\",\n mode: this.mode,\n text: \"\\\\prime\"\n }; // Many primes can be grouped together, so we handle this here\n\n var primes = [prime];\n this.consume(); // Keep lexing tokens until we get something that's not a prime\n\n while (this.fetch().text === \"'\") {\n // For each one, add another prime to the list\n primes.push(prime);\n this.consume();\n } // If there's a superscript following the primes, combine that\n // superscript in with the primes.\n\n\n if (this.fetch().text === \"^\") {\n primes.push(this.handleSupSubscript(\"superscript\"));\n } // Put everything into an ordgroup as the superscript\n\n\n superscript = {\n type: \"ordgroup\",\n mode: this.mode,\n body: primes\n };\n } else if (uSubsAndSups[lex.text]) {\n // A Unicode subscript or superscript character.\n // We treat these similarly to the unicode-math package.\n // So we render a string of Unicode (sub|super)scripts the\n // same as a (sub|super)script of regular characters.\n var isSub = unicodeSubRegEx.test(lex.text);\n var subsupTokens = [];\n subsupTokens.push(new Token(uSubsAndSups[lex.text]));\n this.consume(); // Continue fetching tokens to fill out the string.\n\n while (true) {\n var token = this.fetch().text;\n\n if (!uSubsAndSups[token]) {\n break;\n }\n\n if (unicodeSubRegEx.test(token) !== isSub) {\n break;\n }\n\n subsupTokens.unshift(new Token(uSubsAndSups[token]));\n this.consume();\n } // Now create a (sub|super)script.\n\n\n var body = this.subparse(subsupTokens);\n\n if (isSub) {\n subscript = {\n type: \"ordgroup\",\n mode: \"math\",\n body\n };\n } else {\n superscript = {\n type: \"ordgroup\",\n mode: \"math\",\n body\n };\n }\n } else {\n // If it wasn't ^, _, or ', stop parsing super/subscripts\n break;\n }\n } // Base must be set if superscript or subscript are set per logic above,\n // but need to check here for type check to pass.\n\n\n if (superscript || subscript) {\n // If we got either a superscript or subscript, create a supsub\n return {\n type: \"supsub\",\n mode: this.mode,\n base: base,\n sup: superscript,\n sub: subscript\n };\n } else {\n // Otherwise return the original body\n return base;\n }\n }\n /**\n * Parses an entire function, including its base and all of its arguments.\n */\n\n\n parseFunction(breakOnTokenText, name // For determining its context\n ) {\n var token = this.fetch();\n var func = token.text;\n var funcData = functions[func];\n\n if (!funcData) {\n return null;\n }\n\n this.consume(); // consume command token\n\n if (name && name !== \"atom\" && !funcData.allowedInArgument) {\n throw new ParseError(\"Got function '\" + func + \"' with no arguments\" + (name ? \" as \" + name : \"\"), token);\n } else if (this.mode === \"text\" && !funcData.allowedInText) {\n throw new ParseError(\"Can't use function '\" + func + \"' in text mode\", token);\n } else if (this.mode === \"math\" && funcData.allowedInMath === false) {\n throw new ParseError(\"Can't use function '\" + func + \"' in math mode\", token);\n }\n\n var {\n args,\n optArgs\n } = this.parseArguments(func, funcData);\n return this.callFunction(func, args, optArgs, token, breakOnTokenText);\n }\n /**\n * Call a function handler with a suitable context and arguments.\n */\n\n\n callFunction(name, args, optArgs, token, breakOnTokenText) {\n var context = {\n funcName: name,\n parser: this,\n token,\n breakOnTokenText\n };\n var func = functions[name];\n\n if (func && func.handler) {\n return func.handler(context, args, optArgs);\n } else {\n throw new ParseError(\"No function handler for \" + name);\n }\n }\n /**\n * Parses the arguments of a function or environment\n */\n\n\n parseArguments(func, // Should look like \"\\name\" or \"\\begin{name}\".\n funcData) {\n var totalArgs = funcData.numArgs + funcData.numOptionalArgs;\n\n if (totalArgs === 0) {\n return {\n args: [],\n optArgs: []\n };\n }\n\n var args = [];\n var optArgs = [];\n\n for (var i = 0; i < totalArgs; i++) {\n var argType = funcData.argTypes && funcData.argTypes[i];\n var isOptional = i < funcData.numOptionalArgs;\n\n if (funcData.primitive && argType == null || // \\sqrt expands into primitive if optional argument doesn't exist\n funcData.type === \"sqrt\" && i === 1 && optArgs[0] == null) {\n argType = \"primitive\";\n }\n\n var arg = this.parseGroupOfType(\"argument to '\" + func + \"'\", argType, isOptional);\n\n if (isOptional) {\n optArgs.push(arg);\n } else if (arg != null) {\n args.push(arg);\n } else {\n // should be unreachable\n throw new ParseError(\"Null argument, please report this as a bug\");\n }\n }\n\n return {\n args,\n optArgs\n };\n }\n /**\n * Parses a group when the mode is changing.\n */\n\n\n parseGroupOfType(name, type, optional) {\n switch (type) {\n case \"color\":\n return this.parseColorGroup(optional);\n\n case \"size\":\n return this.parseSizeGroup(optional);\n\n case \"url\":\n return this.parseUrlGroup(optional);\n\n case \"math\":\n case \"text\":\n return this.parseArgumentGroup(optional, type);\n\n case \"hbox\":\n {\n // hbox argument type wraps the argument in the equivalent of\n // \\hbox, which is like \\text but switching to \\textstyle size.\n var group = this.parseArgumentGroup(optional, \"text\");\n return group != null ? {\n type: \"styling\",\n mode: group.mode,\n body: [group],\n style: \"text\" // simulate \\textstyle\n\n } : null;\n }\n\n case \"raw\":\n {\n var token = this.parseStringGroup(\"raw\", optional);\n return token != null ? {\n type: \"raw\",\n mode: \"text\",\n string: token.text\n } : null;\n }\n\n case \"primitive\":\n {\n if (optional) {\n throw new ParseError(\"A primitive argument cannot be optional\");\n }\n\n var _group2 = this.parseGroup(name);\n\n if (_group2 == null) {\n throw new ParseError(\"Expected group as \" + name, this.fetch());\n }\n\n return _group2;\n }\n\n case \"original\":\n case null:\n case undefined:\n return this.parseArgumentGroup(optional);\n\n default:\n throw new ParseError(\"Unknown group type as \" + name, this.fetch());\n }\n }\n /**\n * Discard any space tokens, fetching the next non-space token.\n */\n\n\n consumeSpaces() {\n while (this.fetch().text === \" \") {\n this.consume();\n }\n }\n /**\n * Parses a group, essentially returning the string formed by the\n * brace-enclosed tokens plus some position information.\n */\n\n\n parseStringGroup(modeName, // Used to describe the mode in error messages.\n optional) {\n var argToken = this.gullet.scanArgument(optional);\n\n if (argToken == null) {\n return null;\n }\n\n var str = \"\";\n var nextToken;\n\n while ((nextToken = this.fetch()).text !== \"EOF\") {\n str += nextToken.text;\n this.consume();\n }\n\n this.consume(); // consume the end of the argument\n\n argToken.text = str;\n return argToken;\n }\n /**\n * Parses a regex-delimited group: the largest sequence of tokens\n * whose concatenated strings match `regex`. Returns the string\n * formed by the tokens plus some position information.\n */\n\n\n parseRegexGroup(regex, modeName // Used to describe the mode in error messages.\n ) {\n var firstToken = this.fetch();\n var lastToken = firstToken;\n var str = \"\";\n var nextToken;\n\n while ((nextToken = this.fetch()).text !== \"EOF\" && regex.test(str + nextToken.text)) {\n lastToken = nextToken;\n str += lastToken.text;\n this.consume();\n }\n\n if (str === \"\") {\n throw new ParseError(\"Invalid \" + modeName + \": '\" + firstToken.text + \"'\", firstToken);\n }\n\n return firstToken.range(lastToken, str);\n }\n /**\n * Parses a color description.\n */\n\n\n parseColorGroup(optional) {\n var res = this.parseStringGroup(\"color\", optional);\n\n if (res == null) {\n return null;\n }\n\n var match = /^(#[a-f0-9]{3,4}|#[a-f0-9]{6}|#[a-f0-9]{8}|[a-f0-9]{6}|[a-z]+)$/i.exec(res.text);\n\n if (!match) {\n throw new ParseError(\"Invalid color: '\" + res.text + \"'\", res);\n }\n\n var color = match[0];\n\n if (/^[0-9a-f]{6}$/i.test(color)) {\n // We allow a 6-digit HTML color spec without a leading \"#\".\n // This follows the xcolor package's HTML color model.\n // Predefined color names are all missed by this RegEx pattern.\n color = \"#\" + color;\n }\n\n return {\n type: \"color-token\",\n mode: this.mode,\n color\n };\n }\n /**\n * Parses a size specification, consisting of magnitude and unit.\n */\n\n\n parseSizeGroup(optional) {\n var res;\n var isBlank = false; // don't expand before parseStringGroup\n\n this.gullet.consumeSpaces();\n\n if (!optional && this.gullet.future().text !== \"{\") {\n res = this.parseRegexGroup(/^[-+]? *(?:$|\\d+|\\d+\\.\\d*|\\.\\d*) *[a-z]{0,2} *$/, \"size\");\n } else {\n res = this.parseStringGroup(\"size\", optional);\n }\n\n if (!res) {\n return null;\n }\n\n if (!optional && res.text.length === 0) {\n // Because we've tested for what is !optional, this block won't\n // affect \\kern, \\hspace, etc. It will capture the mandatory arguments\n // to \\genfrac and \\above.\n res.text = \"0pt\"; // Enable \\above{}\n\n isBlank = true; // This is here specifically for \\genfrac\n }\n\n var match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(res.text);\n\n if (!match) {\n throw new ParseError(\"Invalid size: '\" + res.text + \"'\", res);\n }\n\n var data = {\n number: +(match[1] + match[2]),\n // sign + magnitude, cast to number\n unit: match[3]\n };\n\n if (!validUnit(data)) {\n throw new ParseError(\"Invalid unit: '\" + data.unit + \"'\", res);\n }\n\n return {\n type: \"size\",\n mode: this.mode,\n value: data,\n isBlank\n };\n }\n /**\n * Parses an URL, checking escaped letters and allowed protocols,\n * and setting the catcode of % as an active character (as in \\hyperref).\n */\n\n\n parseUrlGroup(optional) {\n this.gullet.lexer.setCatcode(\"%\", 13); // active character\n\n this.gullet.lexer.setCatcode(\"~\", 12); // other character\n\n var res = this.parseStringGroup(\"url\", optional);\n this.gullet.lexer.setCatcode(\"%\", 14); // comment character\n\n this.gullet.lexer.setCatcode(\"~\", 13); // active character\n\n if (res == null) {\n return null;\n } // hyperref package allows backslashes alone in href, but doesn't\n // generate valid links in such cases; we interpret this as\n // \"undefined\" behaviour, and keep them as-is. Some browser will\n // replace backslashes with forward slashes.\n\n\n var url = res.text.replace(/\\\\([#$%&~_^{}])/g, '$1');\n return {\n type: \"url\",\n mode: this.mode,\n url\n };\n }\n /**\n * Parses an argument with the mode specified.\n */\n\n\n parseArgumentGroup(optional, mode) {\n var argToken = this.gullet.scanArgument(optional);\n\n if (argToken == null) {\n return null;\n }\n\n var outerMode = this.mode;\n\n if (mode) {\n // Switch to specified mode\n this.switchMode(mode);\n }\n\n this.gullet.beginGroup();\n var expression = this.parseExpression(false, \"EOF\"); // TODO: find an alternative way to denote the end\n\n this.expect(\"EOF\"); // expect the end of the argument\n\n this.gullet.endGroup();\n var result = {\n type: \"ordgroup\",\n mode: this.mode,\n loc: argToken.loc,\n body: expression\n };\n\n if (mode) {\n // Switch mode back\n this.switchMode(outerMode);\n }\n\n return result;\n }\n /**\n * Parses an ordinary group, which is either a single nucleus (like \"x\")\n * or an expression in braces (like \"{x+y}\") or an implicit group, a group\n * that starts at the current position, and ends right before a higher explicit\n * group ends, or at EOF.\n */\n\n\n parseGroup(name, // For error reporting.\n breakOnTokenText) {\n var firstToken = this.fetch();\n var text = firstToken.text;\n var result; // Try to parse an open brace or \\begingroup\n\n if (text === \"{\" || text === \"\\\\begingroup\") {\n this.consume();\n var groupEnd = text === \"{\" ? \"}\" : \"\\\\endgroup\";\n this.gullet.beginGroup(); // If we get a brace, parse an expression\n\n var expression = this.parseExpression(false, groupEnd);\n var lastToken = this.fetch();\n this.expect(groupEnd); // Check that we got a matching closing brace\n\n this.gullet.endGroup();\n result = {\n type: \"ordgroup\",\n mode: this.mode,\n loc: SourceLocation.range(firstToken, lastToken),\n body: expression,\n // A group formed by \\begingroup...\\endgroup is a semi-simple group\n // which doesn't affect spacing in math mode, i.e., is transparent.\n // https://tex.stackexchange.com/questions/1930/when-should-one-\n // use-begingroup-instead-of-bgroup\n semisimple: text === \"\\\\begingroup\" || undefined\n };\n } else {\n // If there exists a function with this name, parse the function.\n // Otherwise, just return a nucleus\n result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol();\n\n if (result == null && text[0] === \"\\\\\" && !implicitCommands.hasOwnProperty(text)) {\n if (this.settings.throwOnError) {\n throw new ParseError(\"Undefined control sequence: \" + text, firstToken);\n }\n\n result = this.formatUnsupportedCmd(text);\n this.consume();\n }\n }\n\n return result;\n }\n /**\n * Form ligature-like combinations of characters for text mode.\n * This includes inputs like \"--\", \"---\", \"``\" and \"''\".\n * The result will simply replace multiple textord nodes with a single\n * character in each value by a single textord node having multiple\n * characters in its value. The representation is still ASCII source.\n * The group will be modified in place.\n */\n\n\n formLigatures(group) {\n var n = group.length - 1;\n\n for (var i = 0; i < n; ++i) {\n var a = group[i]; // $FlowFixMe: Not every node type has a `text` property.\n\n var v = a.text;\n\n if (v === \"-\" && group[i + 1].text === \"-\") {\n if (i + 1 < n && group[i + 2].text === \"-\") {\n group.splice(i, 3, {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(a, group[i + 2]),\n text: \"---\"\n });\n n -= 2;\n } else {\n group.splice(i, 2, {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(a, group[i + 1]),\n text: \"--\"\n });\n n -= 1;\n }\n }\n\n if ((v === \"'\" || v === \"`\") && group[i + 1].text === v) {\n group.splice(i, 2, {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(a, group[i + 1]),\n text: v + v\n });\n n -= 1;\n }\n }\n }\n /**\n * Parse a single symbol out of the string. Here, we handle single character\n * symbols and special functions like \\verb.\n */\n\n\n parseSymbol() {\n var nucleus = this.fetch();\n var text = nucleus.text;\n\n if (/^\\\\verb[^a-zA-Z]/.test(text)) {\n this.consume();\n var arg = text.slice(5);\n var star = arg.charAt(0) === \"*\";\n\n if (star) {\n arg = arg.slice(1);\n } // Lexer's tokenRegex is constructed to always have matching\n // first/last characters.\n\n\n if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) {\n throw new ParseError(\"\\\\verb assertion failed --\\n please report what input caused this bug\");\n }\n\n arg = arg.slice(1, -1); // remove first and last char\n\n return {\n type: \"verb\",\n mode: \"text\",\n body: arg,\n star\n };\n } // At this point, we should have a symbol, possibly with accents.\n // First expand any accented base symbol according to unicodeSymbols.\n\n\n if (unicodeSymbols.hasOwnProperty(text[0]) && !symbols[this.mode][text[0]]) {\n // This behavior is not strict (XeTeX-compatible) in math mode.\n if (this.settings.strict && this.mode === \"math\") {\n this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Accented Unicode text character \\\"\" + text[0] + \"\\\" used in \" + \"math mode\", nucleus);\n }\n\n text = unicodeSymbols[text[0]] + text.slice(1);\n } // Strip off any combining characters\n\n\n var match = combiningDiacriticalMarksEndRegex.exec(text);\n\n if (match) {\n text = text.substring(0, match.index);\n\n if (text === 'i') {\n text = '\\u0131'; // dotless i, in math and text mode\n } else if (text === 'j') {\n text = '\\u0237'; // dotless j, in math and text mode\n }\n } // Recognize base symbol\n\n\n var symbol;\n\n if (symbols[this.mode][text]) {\n if (this.settings.strict && this.mode === 'math' && extraLatin.indexOf(text) >= 0) {\n this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Latin-1/Unicode text character \\\"\" + text[0] + \"\\\" used in \" + \"math mode\", nucleus);\n }\n\n var group = symbols[this.mode][text].group;\n var loc = SourceLocation.range(nucleus);\n var s;\n\n if (ATOMS.hasOwnProperty(group)) {\n // $FlowFixMe\n var family = group;\n s = {\n type: \"atom\",\n mode: this.mode,\n family,\n loc,\n text\n };\n } else {\n // $FlowFixMe\n s = {\n type: group,\n mode: this.mode,\n loc,\n text\n };\n } // $FlowFixMe\n\n\n symbol = s;\n } else if (text.charCodeAt(0) >= 0x80) {\n // no symbol for e.g. ^\n if (this.settings.strict) {\n if (!supportedCodepoint(text.charCodeAt(0))) {\n this.settings.reportNonstrict(\"unknownSymbol\", \"Unrecognized Unicode character \\\"\" + text[0] + \"\\\"\" + (\" (\" + text.charCodeAt(0) + \")\"), nucleus);\n } else if (this.mode === \"math\") {\n this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Unicode text character \\\"\" + text[0] + \"\\\" used in math mode\", nucleus);\n }\n } // All nonmathematical Unicode characters are rendered as if they\n // are in text mode (wrapped in \\text) because that's what it\n // takes to render them in LaTeX. Setting `mode: this.mode` is\n // another natural choice (the user requested math mode), but\n // this makes it more difficult for getCharacterMetrics() to\n // distinguish Unicode characters without metrics and those for\n // which we want to simulate the letter M.\n\n\n symbol = {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(nucleus),\n text\n };\n } else {\n return null; // EOF, ^, _, {, }, etc.\n }\n\n this.consume(); // Transform combining characters into accents\n\n if (match) {\n for (var i = 0; i < match[0].length; i++) {\n var accent = match[0][i];\n\n if (!unicodeAccents[accent]) {\n throw new ParseError(\"Unknown accent ' \" + accent + \"'\", nucleus);\n }\n\n var command = unicodeAccents[accent][this.mode] || unicodeAccents[accent].text;\n\n if (!command) {\n throw new ParseError(\"Accent \" + accent + \" unsupported in \" + this.mode + \" mode\", nucleus);\n }\n\n symbol = {\n type: \"accent\",\n mode: this.mode,\n loc: SourceLocation.range(nucleus),\n label: command,\n isStretchy: false,\n isShifty: true,\n // $FlowFixMe\n base: symbol\n };\n }\n } // $FlowFixMe\n\n\n return symbol;\n }\n\n}\nParser.endOfExpression = [\"}\", \"\\\\endgroup\", \"\\\\end\", \"\\\\right\", \"&\"];\n\n/**\n * Provides a single function for parsing an expression using a Parser\n * TODO(emily): Remove this\n */\n\n/**\n * Parses an expression using a Parser, then returns the parsed result.\n */\nvar parseTree = function parseTree(toParse, settings) {\n if (!(typeof toParse === 'string' || toParse instanceof String)) {\n throw new TypeError('KaTeX can only parse string typed expression');\n }\n\n var parser = new Parser(toParse, settings); // Blank out any \\df@tag to avoid spurious \"Duplicate \\tag\" errors\n\n delete parser.gullet.macros.current[\"\\\\df@tag\"];\n var tree = parser.parse(); // Prevent a color definition from persisting between calls to katex.render().\n\n delete parser.gullet.macros.current[\"\\\\current@color\"];\n delete parser.gullet.macros.current[\"\\\\color\"]; // If the input used \\tag, it will set the \\df@tag macro to the tag.\n // In this case, we separately parse the tag and wrap the tree.\n\n if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n if (!settings.displayMode) {\n throw new ParseError(\"\\\\tag works only in display equations\");\n }\n\n tree = [{\n type: \"tag\",\n mode: \"text\",\n body: tree,\n tag: parser.subparse([new Token(\"\\\\df@tag\")])\n }];\n }\n\n return tree;\n};\n\n/* eslint no-console:0 */\n\n/**\n * Parse and build an expression, and place that expression in the DOM node\n * given.\n */\nvar render = function render(expression, baseNode, options) {\n baseNode.textContent = \"\";\n var node = renderToDomTree(expression, options).toNode();\n baseNode.appendChild(node);\n}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and\n// disable rendering.\n\n\nif (typeof document !== \"undefined\") {\n if (document.compatMode !== \"CSS1Compat\") {\n typeof console !== \"undefined\" && console.warn(\"Warning: KaTeX doesn't work in quirks mode. Make sure your \" + \"website has a suitable doctype.\");\n\n render = function render() {\n throw new ParseError(\"KaTeX doesn't work in quirks mode.\");\n };\n }\n}\n/**\n * Parse and build an expression, and return the markup for that.\n */\n\n\nvar renderToString = function renderToString(expression, options) {\n var markup = renderToDomTree(expression, options).toMarkup();\n return markup;\n};\n/**\n * Parse an expression and return the parse tree.\n */\n\n\nvar generateParseTree = function generateParseTree(expression, options) {\n var settings = new Settings(options);\n return parseTree(expression, settings);\n};\n/**\n * If the given error is a KaTeX ParseError and options.throwOnError is false,\n * renders the invalid LaTeX as a span with hover title giving the KaTeX\n * error message. Otherwise, simply throws the error.\n */\n\n\nvar renderError = function renderError(error, expression, options) {\n if (options.throwOnError || !(error instanceof ParseError)) {\n throw error;\n }\n\n var node = buildCommon.makeSpan([\"katex-error\"], [new SymbolNode(expression)]);\n node.setAttribute(\"title\", error.toString());\n node.setAttribute(\"style\", \"color:\" + options.errorColor);\n return node;\n};\n/**\n * Generates and returns the katex build tree. This is used for advanced\n * use cases (like rendering to custom output).\n */\n\n\nvar renderToDomTree = function renderToDomTree(expression, options) {\n var settings = new Settings(options);\n\n try {\n var tree = parseTree(expression, settings);\n return buildTree(tree, expression, settings);\n } catch (error) {\n return renderError(error, expression, settings);\n }\n};\n/**\n * Generates and returns the katex build tree, with just HTML (no MathML).\n * This is used for advanced use cases (like rendering to custom output).\n */\n\n\nvar renderToHTMLTree = function renderToHTMLTree(expression, options) {\n var settings = new Settings(options);\n\n try {\n var tree = parseTree(expression, settings);\n return buildHTMLTree(tree, expression, settings);\n } catch (error) {\n return renderError(error, expression, settings);\n }\n};\n\nvar version = \"0.16.27\";\nvar __domTree = {\n Span,\n Anchor,\n SymbolNode,\n SvgNode,\n PathNode,\n LineNode\n}; // ESM exports\n\nvar katex = {\n /**\n * Current KaTeX version\n */\n version,\n\n /**\n * Renders the given LaTeX into an HTML+MathML combination, and adds\n * it as a child to the specified DOM node.\n */\n render,\n\n /**\n * Renders the given LaTeX into an HTML+MathML combination string,\n * for sending to the client.\n */\n renderToString,\n\n /**\n * KaTeX error, usually during parsing.\n */\n ParseError,\n\n /**\n * The schema of Settings\n */\n SETTINGS_SCHEMA,\n\n /**\n * Parses the given LaTeX into KaTeX's internal parse tree structure,\n * without rendering to HTML or MathML.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __parse: generateParseTree,\n\n /**\n * Renders the given LaTeX into an HTML+MathML internal DOM tree\n * representation, without flattening that representation to a string.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __renderToDomTree: renderToDomTree,\n\n /**\n * Renders the given LaTeX into an HTML internal DOM tree representation,\n * without MathML and without flattening that representation to a string.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __renderToHTMLTree: renderToHTMLTree,\n\n /**\n * extends internal font metrics object with a new object\n * each key in the new object represents a font name\n */\n __setFontMetrics: setFontMetrics,\n\n /**\n * adds a new symbol to builtin symbols table\n */\n __defineSymbol: defineSymbol,\n\n /**\n * adds a new function to builtin function list,\n * which directly produce parse tree elements\n * and have their own html/mathml builders\n */\n __defineFunction: defineFunction,\n\n /**\n * adds a new macro to builtin macro list\n */\n __defineMacro: defineMacro,\n\n /**\n * Expose the dom tree node types, which can be useful for type checking nodes.\n *\n * NOTE: These methods are not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __domTree\n};\n\nexport { ParseError, SETTINGS_SCHEMA, defineFunction as __defineFunction, defineMacro as __defineMacro, defineSymbol as __defineSymbol, __domTree, generateParseTree as __parse, renderToDomTree as __renderToDomTree, renderToHTMLTree as __renderToHTMLTree, setFontMetrics as __setFontMetrics, katex as default, render, renderToString, version };\n","import { tooltipFactory, TooltipProvider } from '@milkdown/kit/plugin/tooltip';\nimport { NodeSelection, TextSelection } from '@milkdown/kit/prose/state';\nimport { defineComponent, computed, h, Fragment, ref, shallowRef, createApp } from 'vue';\nimport { createSlice } from '@milkdown/kit/ctx';\nimport { Icon } from '@milkdown/kit/component';\nimport { commandsCtx, editorCtx, EditorStatus } from '@milkdown/kit/core';\nimport clsx from 'clsx';\nimport { toggleLinkCommand } from '@milkdown/kit/component/link-tooltip';\nimport { toggleStrongCommand, isMarkSelectedCommand, strongSchema, toggleEmphasisCommand, emphasisSchema, toggleInlineCodeCommand, inlineCodeSchema, isNodeSelectedCommand, linkSchema } from '@milkdown/kit/preset/commonmark';\nimport { toggleStrikethroughCommand, strikethroughSchema } from '@milkdown/kit/preset/gfm';\nimport { findNodeInSelection } from '@milkdown/kit/prose';\nimport { $nodeSchema, $command } from '@milkdown/kit/utils';\nimport katex from 'katex';\n\ncreateSlice([], \"FeaturesCtx\");\ncreateSlice({}, \"CrepeCtx\");\nfunction useCrepeFeatures(ctx) {\n return ctx.use(\"FeaturesCtx\");\n}\nfunction crepeFeatureConfig(feature) {\n return (ctx) => {\n useCrepeFeatures(ctx).update((features) => {\n if (features.includes(feature)) {\n return features;\n }\n return [...features, feature];\n });\n };\n}\n\nvar CrepeFeature = /* @__PURE__ */ ((CrepeFeature2) => {\n CrepeFeature2[\"CodeMirror\"] = \"code-mirror\";\n CrepeFeature2[\"ListItem\"] = \"list-item\";\n CrepeFeature2[\"LinkTooltip\"] = \"link-tooltip\";\n CrepeFeature2[\"Cursor\"] = \"cursor\";\n CrepeFeature2[\"ImageBlock\"] = \"image-block\";\n CrepeFeature2[\"BlockEdit\"] = \"block-edit\";\n CrepeFeature2[\"Toolbar\"] = \"toolbar\";\n CrepeFeature2[\"Placeholder\"] = \"placeholder\";\n CrepeFeature2[\"Table\"] = \"table\";\n CrepeFeature2[\"Latex\"] = \"latex\";\n return CrepeFeature2;\n})(CrepeFeature || {});\n\nconst boldIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M8.85758 18.625C8.4358 18.625 8.07715 18.4772 7.78163 18.1817C7.48613 17.8862 7.33838 17.5275 7.33838 17.1058V6.8942C7.33838 6.47242 7.48613 6.11377 7.78163 5.81825C8.07715 5.52275 8.4358 5.375 8.85758 5.375H12.1999C13.2191 5.375 14.1406 5.69231 14.9643 6.32693C15.788 6.96154 16.1999 7.81603 16.1999 8.89038C16.1999 9.63779 16.0194 10.2471 15.6585 10.7183C15.2976 11.1894 14.9088 11.5314 14.4922 11.7442C15.005 11.9211 15.4947 12.2708 15.9614 12.7933C16.428 13.3157 16.6614 14.0192 16.6614 14.9038C16.6614 16.182 16.1902 17.1217 15.2479 17.723C14.3056 18.3243 13.3563 18.625 12.3999 18.625H8.85758ZM9.4883 16.6327H12.3191C13.1063 16.6327 13.6627 16.4141 13.9884 15.9769C14.314 15.5397 14.4768 15.1205 14.4768 14.7192C14.4768 14.3179 14.314 13.8987 13.9884 13.4615C13.6627 13.0243 13.0909 12.8057 12.273 12.8057H9.4883V16.6327ZM9.4883 10.875H12.0826C12.6903 10.875 13.172 10.7013 13.5278 10.3539C13.8836 10.0064 14.0615 9.59037 14.0615 9.10575C14.0615 8.59035 13.8733 8.16918 13.497 7.84225C13.1207 7.51533 12.6595 7.35188 12.1133 7.35188H9.4883V10.875Z\"\n />\n </svg>\n`;\n\nconst codeIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8081)\">\n <path\n d=\"M9.4 16.6L4.8 12L9.4 7.4L8 6L2 12L8 18L9.4 16.6ZM14.6 16.6L19.2 12L14.6 7.4L16 6L22 12L16 18L14.6 16.6Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8081\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`;\n\nconst italicIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M6.29811 18.625C6.04505 18.625 5.83115 18.5375 5.65641 18.3626C5.48166 18.1877 5.39429 17.9736 5.39429 17.7203C5.39429 17.467 5.48166 17.2532 5.65641 17.0788C5.83115 16.9045 6.04505 16.8173 6.29811 16.8173H9.21159L12.452 7.18265H9.53851C9.28545 7.18265 9.07155 7.0952 8.89681 6.9203C8.72206 6.7454 8.63469 6.5313 8.63469 6.278C8.63469 6.02472 8.72206 5.81089 8.89681 5.63652C9.07155 5.46217 9.28545 5.375 9.53851 5.375H16.8847C17.1377 5.375 17.3516 5.46245 17.5264 5.63735C17.7011 5.81225 17.7885 6.02634 17.7885 6.27962C17.7885 6.53293 17.7011 6.74676 17.5264 6.92113C17.3516 7.09548 17.1377 7.18265 16.8847 7.18265H14.2789L11.0385 16.8173H13.6443C13.8973 16.8173 14.1112 16.9048 14.286 17.0797C14.4607 17.2546 14.5481 17.4687 14.5481 17.722C14.5481 17.9752 14.4607 18.1891 14.286 18.3634C14.1112 18.5378 13.8973 18.625 13.6443 18.625H6.29811Z\"\n />\n </svg>\n`;\n\nconst linkIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M17.0385 19.5003V16.5388H14.0769V15.0388H17.0385V12.0773H18.5384V15.0388H21.5V16.5388H18.5384V19.5003H17.0385ZM10.8077 16.5388H7.03845C5.78282 16.5388 4.7125 16.0963 3.8275 15.2114C2.9425 14.3266 2.5 13.2564 2.5 12.0009C2.5 10.7454 2.9425 9.67504 3.8275 8.78979C4.7125 7.90454 5.78282 7.46191 7.03845 7.46191H10.8077V8.96186H7.03845C6.1987 8.96186 5.48235 9.25834 4.8894 9.85129C4.29645 10.4442 3.99998 11.1606 3.99998 12.0003C3.99998 12.8401 4.29645 13.5564 4.8894 14.1494C5.48235 14.7423 6.1987 15.0388 7.03845 15.0388H10.8077V16.5388ZM8.25 12.7503V11.2504H15.75V12.7503H8.25ZM21.5 12.0003H20C20 11.1606 19.7035 10.4442 19.1106 9.85129C18.5176 9.25834 17.8013 8.96186 16.9615 8.96186H13.1923V7.46191H16.9615C18.2171 7.46191 19.2875 7.90441 20.1725 8.78939C21.0575 9.67439 21.5 10.7447 21.5 12.0003Z\"\n />\n </svg>\n`;\n\nconst strikethroughIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M3.25 13.7404C3.0375 13.7404 2.85938 13.6684 2.71563 13.5246C2.57188 13.3808 2.5 13.2026 2.5 12.99C2.5 12.7774 2.57188 12.5993 2.71563 12.4558C2.85938 12.3122 3.0375 12.2404 3.25 12.2404H20.75C20.9625 12.2404 21.1406 12.3123 21.2843 12.4561C21.4281 12.5999 21.5 12.7781 21.5 12.9907C21.5 13.2033 21.4281 13.3814 21.2843 13.525C21.1406 13.6686 20.9625 13.7404 20.75 13.7404H3.25ZM10.9423 10.2596V6.62495H6.5673C6.2735 6.62495 6.02377 6.52201 5.8181 6.31613C5.61245 6.11026 5.50963 5.86027 5.50963 5.56615C5.50963 5.27205 5.61245 5.02083 5.8181 4.8125C6.02377 4.60417 6.2735 4.5 6.5673 4.5H17.4423C17.7361 4.5 17.9858 4.60294 18.1915 4.80883C18.3971 5.01471 18.5 5.2647 18.5 5.5588C18.5 5.85292 18.3971 6.10413 18.1915 6.31245C17.9858 6.52078 17.7361 6.62495 17.4423 6.62495H13.0673V10.2596H10.9423ZM10.9423 15.7211H13.0673V18.4423C13.0673 18.7361 12.9643 18.9858 12.7584 19.1915C12.5526 19.3971 12.3026 19.5 12.0085 19.5C11.7144 19.5 11.4631 19.3962 11.2548 19.1887C11.0465 18.9811 10.9423 18.7291 10.9423 18.4327V15.7211Z\"\n />\n </svg>\n`;\n\nconst functionsIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M7 19v-.808L13.096 12L7 5.808V5h10v1.25H9.102L14.727 12l-5.625 5.77H17V19z\"\n />\n </svg>\n`;\n\nvar __typeError$1 = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck$1 = (obj, member, msg) => member.has(obj) || __typeError$1(\"Cannot \" + msg);\nvar __privateGet$1 = (obj, member, getter) => (__accessCheck$1(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd$1 = (obj, member, value) => member.has(obj) ? __typeError$1(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet$1 = (obj, member, value, setter) => (__accessCheck$1(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _groups, _getGroupInstance;\nclass GroupBuilder {\n constructor() {\n __privateAdd$1(this, _groups, []);\n this.clear = () => {\n __privateSet$1(this, _groups, []);\n return this;\n };\n __privateAdd$1(this, _getGroupInstance, (group) => {\n const groupInstance = {\n group,\n addItem: (key, item) => {\n const data = { ...item, key };\n group.items.push(data);\n return groupInstance;\n },\n clear: () => {\n group.items = [];\n return groupInstance;\n }\n };\n return groupInstance;\n });\n this.addGroup = (key, label) => {\n const items = [];\n const group = {\n key,\n label,\n items\n };\n __privateGet$1(this, _groups).push(group);\n return __privateGet$1(this, _getGroupInstance).call(this, group);\n };\n this.getGroup = (key) => {\n const group = __privateGet$1(this, _groups).find((group2) => group2.key === key);\n if (!group) throw new Error(`Group with key ${key} not found`);\n return __privateGet$1(this, _getGroupInstance).call(this, group);\n };\n this.build = () => {\n return __privateGet$1(this, _groups);\n };\n }\n}\n_groups = new WeakMap();\n_getGroupInstance = new WeakMap();\n\nconst mathInlineId = \"math_inline\";\nconst mathInlineSchema = $nodeSchema(mathInlineId, () => ({\n group: \"inline\",\n inline: true,\n draggable: true,\n atom: true,\n attrs: {\n value: {\n default: \"\"\n }\n },\n parseDOM: [\n {\n tag: `span[data-type=\"${mathInlineId}\"]`,\n getAttrs: (dom) => {\n var _a;\n return {\n value: (_a = dom.dataset.value) != null ? _a : \"\"\n };\n }\n }\n ],\n toDOM: (node) => {\n const code = node.attrs.value;\n const dom = document.createElement(\"span\");\n dom.dataset.type = mathInlineId;\n dom.dataset.value = code;\n katex.render(code, dom, {\n throwOnError: false\n });\n return dom;\n },\n parseMarkdown: {\n match: (node) => node.type === \"inlineMath\",\n runner: (state, node, type) => {\n state.addNode(type, { value: node.value });\n }\n },\n toMarkdown: {\n match: (node) => node.type.name === mathInlineId,\n runner: (state, node) => {\n state.addNode(\"inlineMath\", void 0, node.attrs.value);\n }\n }\n}));\n\nconst toggleLatexCommand = $command(\"ToggleLatex\", (ctx) => {\n return () => (state, dispatch) => {\n const {\n hasNode: hasLatex,\n pos: latexPos,\n target: latexNode\n } = findNodeInSelection(state, mathInlineSchema.type(ctx));\n const { selection, doc, tr } = state;\n if (!hasLatex) {\n const text = doc.textBetween(selection.from, selection.to);\n let _tr2 = tr.replaceSelectionWith(\n mathInlineSchema.type(ctx).create({\n value: text\n })\n );\n if (dispatch) {\n dispatch(\n _tr2.setSelection(NodeSelection.create(_tr2.doc, selection.from))\n );\n }\n return true;\n }\n const { from, to } = selection;\n if (!latexNode || latexPos < 0) return false;\n let _tr = tr.delete(latexPos, latexPos + 1);\n const content = latexNode.attrs.value;\n _tr = _tr.insertText(content, latexPos);\n if (dispatch) {\n dispatch(\n _tr.setSelection(\n TextSelection.create(_tr.doc, from, to + content.length - 1)\n )\n );\n }\n return true;\n };\n});\n\nfunction getGroups(config, ctx) {\n var _a, _b, _c, _d, _e, _f, _g;\n const groupBuilder = new GroupBuilder();\n groupBuilder.addGroup(\"formatting\", \"Formatting\").addItem(\"bold\", {\n icon: (_a = config == null ? void 0 : config.boldIcon) != null ? _a : boldIcon,\n active: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n return commands.call(isMarkSelectedCommand.key, strongSchema.type(ctx2));\n },\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n commands.call(toggleStrongCommand.key);\n }\n }).addItem(\"italic\", {\n icon: (_b = config == null ? void 0 : config.italicIcon) != null ? _b : italicIcon,\n active: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n return commands.call(\n isMarkSelectedCommand.key,\n emphasisSchema.type(ctx2)\n );\n },\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n commands.call(toggleEmphasisCommand.key);\n }\n }).addItem(\"strikethrough\", {\n icon: (_c = config == null ? void 0 : config.strikethroughIcon) != null ? _c : strikethroughIcon,\n active: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n return commands.call(\n isMarkSelectedCommand.key,\n strikethroughSchema.type(ctx2)\n );\n },\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n commands.call(toggleStrikethroughCommand.key);\n }\n });\n const functionGroup = groupBuilder.addGroup(\"function\", \"Function\");\n functionGroup.addItem(\"code\", {\n icon: (_d = config == null ? void 0 : config.codeIcon) != null ? _d : codeIcon,\n active: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n return commands.call(\n isMarkSelectedCommand.key,\n inlineCodeSchema.type(ctx2)\n );\n },\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n commands.call(toggleInlineCodeCommand.key);\n }\n });\n const flags = ctx && useCrepeFeatures(ctx).get();\n const isLatexEnabled = flags == null ? void 0 : flags.includes(CrepeFeature.Latex);\n if (isLatexEnabled) {\n functionGroup.addItem(\"latex\", {\n icon: (_e = config == null ? void 0 : config.latexIcon) != null ? _e : functionsIcon,\n active: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n return commands.call(\n isNodeSelectedCommand.key,\n mathInlineSchema.type(ctx2)\n );\n },\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n commands.call(toggleLatexCommand.key);\n }\n });\n }\n functionGroup.addItem(\"link\", {\n icon: (_f = config == null ? void 0 : config.linkIcon) != null ? _f : linkIcon,\n active: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n return commands.call(isMarkSelectedCommand.key, linkSchema.type(ctx2));\n },\n onRun: (ctx2) => {\n const commands = ctx2.get(commandsCtx);\n commands.call(toggleLinkCommand.key);\n }\n });\n (_g = config == null ? void 0 : config.buildToolbar) == null ? void 0 : _g.call(config, groupBuilder);\n return groupBuilder.build();\n}\n\nconst Toolbar = defineComponent({\n props: {\n ctx: {\n type: Object,\n required: true\n },\n hide: {\n type: Function,\n required: true\n },\n show: {\n type: Object,\n required: true\n },\n selection: {\n type: Object,\n required: true\n },\n config: {\n type: Object,\n required: false\n }\n },\n setup(props) {\n const { ctx, config } = props;\n const onClick = (fn) => (e) => {\n e.preventDefault();\n ctx && fn(ctx);\n };\n function checkActive(checker) {\n props.selection.value;\n const status = ctx.get(editorCtx).status;\n if (status !== EditorStatus.Created) return false;\n return checker(ctx);\n }\n const groupInfo = computed(() => getGroups(config, ctx));\n return () => {\n return /* @__PURE__ */ h(Fragment, null, groupInfo.value.map((group) => {\n return group.items.map((item) => {\n return /* @__PURE__ */ h(\n \"button\",\n {\n type: \"button\",\n class: clsx(\n \"toolbar-item\",\n ctx && checkActive(item.active) && \"active\"\n ),\n onPointerdown: onClick(item.onRun)\n },\n /* @__PURE__ */ h(Icon, { icon: item.icon })\n );\n });\n }).reduce((acc, curr, index) => {\n if (index === 0) {\n acc.push(...curr);\n } else {\n acc.push(/* @__PURE__ */ h(\"div\", { class: \"divider\" }), ...curr);\n }\n return acc;\n }, []));\n };\n }\n});\n\nvar __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _tooltipProvider, _content, _app, _selection, _show;\nconst toolbarTooltip = tooltipFactory(\"CREPE_TOOLBAR\");\nclass ToolbarView {\n constructor(ctx, view, config) {\n __privateAdd(this, _tooltipProvider);\n __privateAdd(this, _content);\n __privateAdd(this, _app);\n __privateAdd(this, _selection);\n __privateAdd(this, _show, ref(false));\n this.update = (view, prevState) => {\n __privateGet(this, _tooltipProvider).update(view, prevState);\n __privateGet(this, _selection).value = view.state.selection;\n };\n this.destroy = () => {\n __privateGet(this, _tooltipProvider).destroy();\n __privateGet(this, _app).unmount();\n __privateGet(this, _content).remove();\n };\n this.hide = () => {\n __privateGet(this, _tooltipProvider).hide();\n };\n const content = document.createElement(\"div\");\n content.className = \"milkdown-toolbar\";\n __privateSet(this, _selection, shallowRef(view.state.selection));\n const app = createApp(Toolbar, {\n ctx,\n hide: this.hide,\n config,\n selection: __privateGet(this, _selection),\n show: __privateGet(this, _show)\n });\n app.mount(content);\n __privateSet(this, _content, content);\n __privateSet(this, _app, app);\n __privateSet(this, _tooltipProvider, new TooltipProvider({\n content: __privateGet(this, _content),\n debounce: 20,\n offset: 10,\n shouldShow(view2) {\n const { doc, selection } = view2.state;\n const { empty, from, to } = selection;\n const isEmptyTextBlock = !doc.textBetween(from, to).length && selection instanceof TextSelection;\n const isNotTextBlock = !(selection instanceof TextSelection);\n const activeElement = view2.dom.getRootNode().activeElement;\n const isTooltipChildren = content.contains(activeElement);\n const notHasFocus = !view2.hasFocus() && !isTooltipChildren;\n const isReadonly = !view2.editable;\n if (notHasFocus || isNotTextBlock || empty || isEmptyTextBlock || isReadonly)\n return false;\n return true;\n }\n }));\n __privateGet(this, _tooltipProvider).onShow = () => {\n __privateGet(this, _show).value = true;\n };\n __privateGet(this, _tooltipProvider).onHide = () => {\n __privateGet(this, _show).value = false;\n };\n this.update(view);\n }\n}\n_tooltipProvider = new WeakMap();\n_content = new WeakMap();\n_app = new WeakMap();\n_selection = new WeakMap();\n_show = new WeakMap();\nconst toolbar = (editor, config) => {\n editor.config(crepeFeatureConfig(CrepeFeature.Toolbar)).config((ctx) => {\n ctx.set(toolbarTooltip.key, {\n view: (view) => new ToolbarView(ctx, view, config)\n });\n }).use(toolbarTooltip);\n};\n\nexport { toolbar };\n//# sourceMappingURL=index.js.map\n","import React, { useEffect, useRef } from 'react';\r\nimport { CrepeBuilder } from '@milkdown/crepe/builder';\r\nimport { blockEdit } from '@milkdown/crepe/feature/block-edit';\r\nimport { toolbar } from '@milkdown/crepe/feature/toolbar';\r\n\r\nimport '@milkdown/crepe/theme/common/prosemirror.css';\r\nimport '@milkdown/crepe/theme/common/reset.css';\r\nimport '@milkdown/crepe/theme/common/block-edit.css';\r\nimport '@milkdown/crepe/theme/common/toolbar.css';\r\nimport '@milkdown/crepe/theme/common/image-block.css';\r\n\r\nimport '@milkdown/crepe/theme/common/style.css';\r\nimport '@milkdown/crepe/theme/frame.css';\r\n\r\ninterface MilkdownEditorInternalProps {\r\n value: string;\r\n onChange: (value: string) => void;\r\n className?: string;\r\n}\r\n\r\nconst MilkdownEditorInternal: React.FC<MilkdownEditorInternalProps> = ({\r\n value,\r\n onChange,\r\n className\r\n}) => {\r\n const ref = useRef<HTMLDivElement>(null);\r\n const builderRef = useRef<CrepeBuilder | null>(null);\r\n const editorReady = useRef(false);\r\n const debounceTimer = useRef<NodeJS.Timeout>();\r\n const isUpdatingFromOutside = useRef(false);\r\n const lastEmittedValue = useRef<string>(value);\r\n\r\n // Memoize onChange to prevent effect re-runs\r\n const onChangeRef = useRef(onChange);\r\n useEffect(() => {\r\n onChangeRef.current = onChange;\r\n }, [onChange]);\r\n\r\n // Effect for editor setup and mutation observer\r\n useEffect(() => {\r\n if (!ref.current) return;\r\n\r\n editorReady.current = false;\r\n\r\n // Create builder with basic config\r\n const builder = new CrepeBuilder({\r\n root: ref.current,\r\n defaultValue: value || '',\r\n });\r\n\r\n // Add features manually\r\n builder\r\n .addFeature(blockEdit)\r\n .addFeature(toolbar);\r\n\r\n // Create the editor and wait for it to be ready\r\n builder.create().then(() => {\r\n editorReady.current = true;\r\n builderRef.current = builder;\r\n lastEmittedValue.current = value; // Initialize with current value\r\n });\r\n\r\n // Listen to updates via mutation observer\r\n const handleUpdate = () => {\r\n if (isUpdatingFromOutside.current || !editorReady.current) return;\r\n\r\n clearTimeout(debounceTimer.current);\r\n debounceTimer.current = setTimeout(() => {\r\n if (!builderRef.current || !editorReady.current) return;\r\n\r\n try {\r\n const markdown = builderRef.current.getMarkdown();\r\n\r\n // Only call onChange if content actually changed\r\n if (markdown !== lastEmittedValue.current) {\r\n lastEmittedValue.current = markdown;\r\n onChangeRef.current(markdown);\r\n }\r\n } catch (error) {\r\n console.error('Error getting markdown:', error);\r\n }\r\n }, 300);\r\n };\r\n\r\n const observer = new MutationObserver(handleUpdate);\r\n\r\n observer.observe(ref.current, {\r\n childList: true,\r\n subtree: true,\r\n characterData: true,\r\n });\r\n\r\n return () => {\r\n observer.disconnect();\r\n if (debounceTimer.current) {\r\n clearTimeout(debounceTimer.current);\r\n }\r\n editorReady.current = false;\r\n builderRef.current?.destroy();\r\n builderRef.current = null;\r\n };\r\n }, []); // Only run once on mount\r\n\r\n // Effect for handling external value changes\r\n useEffect(() => {\r\n if (!builderRef.current || !editorReady.current) return;\r\n\r\n try {\r\n const editorContent = builderRef.current.getMarkdown();\r\n\r\n // Only update if value is different from both editor and last emitted value\r\n if (value !== editorContent && value !== lastEmittedValue.current) {\r\n isUpdatingFromOutside.current = true;\r\n\r\n // Note: Builder doesn't have setMarkdown, need to use internal methods or recreate if drastic\r\n // But for Crepe, we might need a way to set content. \r\n // Just updating the ref is not enough if the editor doesn't update.\r\n // However, the original code didn't actually implementing 'setMarkdown' logic for Crepe properly \r\n // beyond setting isUpdatingFromOutside to true... \r\n // Wait, looking at original code:\r\n // \"Note: Builder doesn't have setMarkdown, need to recreate or use editor directly\"\r\n // It seems the original code FAILED to actually update the editor content visually?\r\n // Ah, lines 186-206 in original file.\r\n // It sets isUpdatingFromOutside = true, updates lastEmittedValue.\r\n // But it DOES NOT actually update the editor content. This looks like a bug in the original code?\r\n // Or maybe Crepe updates automatically? No.\r\n // Let's keep strict parity with original code first.\r\n\r\n lastEmittedValue.current = value;\r\n\r\n // Allow DOM to update\r\n setTimeout(() => {\r\n isUpdatingFromOutside.current = false;\r\n }, 150);\r\n }\r\n } catch (error) {\r\n console.error('Error syncing external value:', error);\r\n }\r\n }, [value]);\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={`milkdown-editor p-3 min-h-[120px] prose prose-sm max-w-none dark:prose-invert ${className || ''}`}\r\n />\r\n );\r\n};\r\n\r\nexport default MilkdownEditorInternal;\r\n","const ParseErrorCode = {\n LoadFail: 0,\n BadSignature: 1,\n BadTimestamp: 2,\n BadSettingValue: 3,\n BadFormat: 4,\n UnknownSetting: 5\n};\nclass ParseError extends Error {\n code;\n line;\n constructor(init) {\n super(init.reason);\n this.code = init.code;\n this.line = init.line;\n }\n}\n\nconst LINE_TERMINATOR_RE = /\\r?\\n|\\r/gm;\nclass TextLineTransformStream {\n writable;\n readable;\n constructor(encoding) {\n const transformer = new TextStreamLineIterator(encoding);\n this.writable = new WritableStream({\n write(chunk) {\n transformer.transform(chunk);\n },\n close() {\n transformer.close();\n }\n });\n this.readable = new ReadableStream({\n start(controller) {\n transformer.onLine = (line) => controller.enqueue(line);\n transformer.onClose = () => controller.close();\n }\n });\n }\n}\nclass TextStreamLineIterator {\n a = \"\";\n b;\n onLine;\n onClose;\n constructor(encoding) {\n this.b = new TextDecoder(encoding);\n }\n transform(chunk) {\n this.a += this.b.decode(chunk, { stream: true });\n const lines = this.a.split(LINE_TERMINATOR_RE);\n this.a = lines.pop() || \"\";\n for (let i = 0; i < lines.length; i++)\n this.onLine(lines[i].trim());\n }\n close() {\n if (this.a)\n this.onLine(this.a.trim());\n this.a = \"\";\n this.onClose();\n }\n}\n\nasync function parseText(text, options) {\n const stream = new ReadableStream({\n start(controller) {\n const lines = text.split(LINE_TERMINATOR_RE);\n for (const line of lines)\n controller.enqueue(line);\n controller.close();\n }\n });\n return parseTextStream(stream, options);\n}\nasync function parseTextStream(stream, options) {\n const type = options?.type ?? \"vtt\";\n let factory;\n if (typeof type === \"string\") {\n switch (type) {\n case \"srt\":\n factory = (await import('./srt-parser.js')).default;\n break;\n case \"ssa\":\n case \"ass\":\n factory = (await import('./ssa-parser.js')).default;\n break;\n default:\n factory = (await Promise.resolve().then(function () { return vttParser; })).default;\n }\n } else {\n factory = type;\n }\n let result;\n const reader = stream.getReader(), parser = factory(), errors = !!options?.strict || !!options?.errors;\n await parser.init({\n strict: false,\n ...options,\n errors,\n type,\n cancel() {\n reader.cancel();\n result = parser.done(true);\n }\n });\n let i = 1;\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n parser.parse(\"\", i);\n result = parser.done(false);\n break;\n }\n parser.parse(value, i);\n i++;\n }\n return result;\n}\n\nasync function parseResponse(response, options) {\n const res = await response;\n if (!res.ok || !res.body) {\n let error;\n return {\n metadata: {},\n cues: [],\n regions: [],\n errors: [error]\n };\n }\n const contentType = res.headers.get(\"content-type\") || \"\", type = contentType.match(/text\\/(.*?)(?:;|$)/)?.[1], encoding = contentType.match(/charset=(.*?)(?:;|$)/)?.[1];\n return parseByteStream(res.body, { type, encoding, ...options });\n}\nasync function parseByteStream(stream, { encoding = \"utf-8\", ...options } = {}) {\n const textStream = stream.pipeThrough(new TextLineTransformStream(encoding));\n return parseTextStream(textStream, options);\n}\n\nclass TextCue extends EventTarget {\n /**\n * A string that identifies the cue.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue/id}\n */\n id = \"\";\n /**\n * A `double` that represents the video time that the cue will start being displayed, in seconds.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue/startTime}\n */\n startTime;\n /**\n * A `double` that represents the video time that the cue will stop being displayed, in seconds.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue/endTime}\n */\n endTime;\n /**\n * Returns a string with the contents of the cue.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/text}\n */\n text;\n /**\n * A `boolean` for whether the video will pause when this cue stops being displayed.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue/pauseOnExit}\n */\n pauseOnExit = false;\n constructor(startTime, endTime, text) {\n super();\n this.startTime = startTime;\n this.endTime = endTime;\n this.text = text;\n }\n addEventListener(type, listener, options) {\n super.addEventListener(type, listener, options);\n }\n removeEventListener(type, listener, options) {\n super.removeEventListener(type, listener, options);\n }\n}\n\nconst IS_SERVER = typeof document === \"undefined\";\n\nconst CueBase = IS_SERVER ? TextCue : window.VTTCue;\nclass VTTCue extends CueBase {\n /**\n * A `VTTRegion` object describing the video's sub-region that the cue will be drawn onto,\n * or `null` if none is assigned.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/region}\n */\n region = null;\n /**\n * The cue writing direction.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/vertical}\n */\n vertical = \"\";\n /**\n * Returns `true` if the `VTTCue.line` attribute is an integer number of lines or a percentage\n * of the video size.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/snapToLines}\n */\n snapToLines = true;\n /**\n * Returns the line positioning of the cue. This can be the string `'auto'` or a number whose\n * interpretation depends on the value of `VTTCue.snapToLines`.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/line}\n */\n line = \"auto\";\n /**\n * Returns an enum representing the alignment of the `VTTCue.line`.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/lineAlign}\n */\n lineAlign = \"start\";\n /**\n * Returns the indentation of the cue within the line. This can be the string `'auto'` or a\n * number representing the percentage of the `VTTCue.region`, or the video size if `VTTCue`.region`\n * is `null`.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/position}\n */\n position = \"auto\";\n /**\n * Returns an enum representing the alignment of the cue. This is used to determine what\n * the `VTTCue.position` is anchored to. The default is `'auto'`.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/positionAlign}\n */\n positionAlign = \"auto\";\n /**\n * Returns a double representing the size of the cue, as a percentage of the video size.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/size}\n */\n size = 100;\n /**\n * Returns an enum representing the alignment of all the lines of text within the cue box.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/align}\n */\n align = \"center\";\n /**\n * Additional styles associated with the cue.\n */\n style;\n}\n\nclass VTTRegion {\n /**\n * A string that identifies the region.\n */\n id = \"\";\n /**\n * A `double` representing the width of the region, as a percentage of the video.\n */\n width = 100;\n /**\n * A `double` representing the height of the region, in number of lines.\n */\n lines = 3;\n /**\n * A `double` representing the region anchor X offset, as a percentage of the region.\n */\n regionAnchorX = 0;\n /**\n * A `double` representing the region anchor Y offset, as a percentage of the region.\n */\n regionAnchorY = 100;\n /**\n * A `double` representing the viewport anchor X offset, as a percentage of the video.\n */\n viewportAnchorX = 0;\n /**\n * A `double` representing the viewport anchor Y offset, as a percentage of the video.\n */\n viewportAnchorY = 100;\n /**\n * An enum representing how adding new cues will move existing cues.\n */\n scroll = \"\";\n}\n\nconst COMMA$1 = \",\", PERCENT_SIGN$1 = \"%\";\nfunction toNumber(text) {\n const num = parseInt(text, 10);\n return !Number.isNaN(num) ? num : null;\n}\nfunction toPercentage(text) {\n const num = parseInt(text.replace(PERCENT_SIGN$1, \"\"), 10);\n return !Number.isNaN(num) && num >= 0 && num <= 100 ? num : null;\n}\nfunction toCoords(text) {\n if (!text.includes(COMMA$1))\n return null;\n const [x, y] = text.split(COMMA$1).map(toPercentage);\n return x !== null && y !== null ? [x, y] : null;\n}\nfunction toFloat(text) {\n const num = parseFloat(text);\n return !Number.isNaN(num) ? num : null;\n}\n\nconst HEADER_MAGIC = \"WEBVTT\", COMMA = \",\", PERCENT_SIGN = \"%\", SETTING_SEP_RE = /[:=]/, SETTING_LINE_RE = /^[\\s\\t]*(region|vertical|line|position|size|align)[:=]/, NOTE_BLOCK_START = \"NOTE\", REGION_BLOCK_START = \"REGION\", REGION_BLOCK_START_RE = /^REGION:?[\\s\\t]+/, SPACE_RE = /[\\s\\t]+/, TIMESTAMP_SEP = \"-->\", TIMESTAMP_SEP_RE = /[\\s\\t]*-->[\\s\\t]+/, ALIGN_RE = /start|center|end|left|right/, LINE_ALIGN_RE = /start|center|end/, POS_ALIGN_RE = /line-(?:left|right)|center|auto/, TIMESTAMP_RE = /^(?:(\\d{1,2}):)?(\\d{2}):(\\d{2})(?:\\.(\\d{1,3}))?$/;\nvar VTTBlock = /* @__PURE__ */ ((VTTBlock2) => {\n VTTBlock2[VTTBlock2[\"None\"] = 0] = \"None\";\n VTTBlock2[VTTBlock2[\"Header\"] = 1] = \"Header\";\n VTTBlock2[VTTBlock2[\"Cue\"] = 2] = \"Cue\";\n VTTBlock2[VTTBlock2[\"Region\"] = 3] = \"Region\";\n VTTBlock2[VTTBlock2[\"Note\"] = 4] = \"Note\";\n return VTTBlock2;\n})(VTTBlock || {});\nclass VTTParser {\n h;\n e = 0;\n i = {};\n j = {};\n l = [];\n c = null;\n d = null;\n m = [];\n f;\n n = \"\";\n async init(init) {\n this.h = init;\n if (init.strict)\n this.e = 1;\n if (init.errors)\n this.f = (await import('./errors.js')).ParseErrorBuilder;\n }\n parse(line, lineCount) {\n if (line === \"\") {\n if (this.c) {\n this.l.push(this.c);\n this.h.onCue?.(this.c);\n this.c = null;\n } else if (this.d) {\n this.j[this.d.id] = this.d;\n this.h.onRegion?.(this.d);\n this.d = null;\n } else if (this.e === 1) {\n this.k(line, lineCount);\n this.h.onHeaderMetadata?.(this.i);\n }\n this.e = 0;\n } else if (this.e) {\n switch (this.e) {\n case 1:\n this.k(line, lineCount);\n break;\n case 2:\n if (this.c) {\n const hasText = this.c.text.length > 0;\n if (!hasText && SETTING_LINE_RE.test(line)) {\n this.o(line.split(SPACE_RE), lineCount);\n } else {\n this.c.text += (hasText ? \"\\n\" : \"\") + line;\n }\n }\n break;\n case 3:\n this.p(line.split(SPACE_RE), lineCount);\n break;\n }\n } else if (line.startsWith(NOTE_BLOCK_START)) {\n this.e = 4;\n } else if (line.startsWith(REGION_BLOCK_START)) {\n this.e = 3;\n this.d = new VTTRegion();\n this.p(line.replace(REGION_BLOCK_START_RE, \"\").split(SPACE_RE), lineCount);\n } else if (line.includes(TIMESTAMP_SEP)) {\n const result = this.q(line, lineCount);\n if (result) {\n this.c = new VTTCue(result[0], result[1], \"\");\n this.c.id = this.n;\n this.o(result[2], lineCount);\n }\n this.e = 2;\n } else if (lineCount === 1) {\n this.k(line, lineCount);\n }\n this.n = line;\n }\n done() {\n return {\n metadata: this.i,\n cues: this.l,\n regions: Object.values(this.j),\n errors: this.m\n };\n }\n k(line, lineCount) {\n if (lineCount > 1) {\n if (SETTING_SEP_RE.test(line)) {\n const [key, value] = line.split(SETTING_SEP_RE);\n if (key)\n this.i[key] = (value || \"\").replace(SPACE_RE, \"\");\n }\n } else if (line.startsWith(HEADER_MAGIC)) {\n this.e = 1;\n } else {\n this.g(this.f?.r());\n }\n }\n q(line, lineCount) {\n const [startTimeText, trailingText = \"\"] = line.split(TIMESTAMP_SEP_RE), [endTimeText, ...settingsText] = trailingText.split(SPACE_RE), startTime = parseVTTTimestamp(startTimeText), endTime = parseVTTTimestamp(endTimeText);\n if (startTime !== null && endTime !== null && endTime > startTime) {\n return [startTime, endTime, settingsText];\n } else {\n if (startTime === null) {\n this.g(this.f?.s(startTimeText, lineCount));\n }\n if (endTime === null) {\n this.g(this.f?.t(endTimeText, lineCount));\n }\n if (startTime != null && endTime !== null && endTime > startTime) {\n this.g(this.f?.u(startTime, endTime, lineCount));\n }\n }\n }\n /**\n * @see {@link https://www.w3.org/TR/webvtt1/#region-settings-parsing}\n */\n p(settings, line) {\n let badValue;\n for (let i = 0; i < settings.length; i++) {\n if (SETTING_SEP_RE.test(settings[i])) {\n badValue = false;\n const [name, value] = settings[i].split(SETTING_SEP_RE);\n switch (name) {\n case \"id\":\n this.d.id = value;\n break;\n case \"width\":\n const width = toPercentage(value);\n if (width !== null)\n this.d.width = width;\n else\n badValue = true;\n break;\n case \"lines\":\n const lines = toNumber(value);\n if (lines !== null)\n this.d.lines = lines;\n else\n badValue = true;\n break;\n case \"regionanchor\":\n const region = toCoords(value);\n if (region !== null) {\n this.d.regionAnchorX = region[0];\n this.d.regionAnchorY = region[1];\n } else\n badValue = true;\n break;\n case \"viewportanchor\":\n const viewport = toCoords(value);\n if (viewport !== null) {\n this.d.viewportAnchorX = viewport[0];\n this.d.viewportAnchorY = viewport[1];\n } else\n badValue = true;\n break;\n case \"scroll\":\n if (value === \"up\")\n this.d.scroll = \"up\";\n else\n badValue = true;\n break;\n default:\n this.g(this.f?.v(name, value, line));\n }\n if (badValue) {\n this.g(this.f?.w(name, value, line));\n }\n }\n }\n }\n /**\n * @see {@link https://www.w3.org/TR/webvtt1/#cue-timings-and-settings-parsing}\n */\n o(settings, line) {\n let badValue;\n for (let i = 0; i < settings.length; i++) {\n badValue = false;\n if (SETTING_SEP_RE.test(settings[i])) {\n const [name, value] = settings[i].split(SETTING_SEP_RE);\n switch (name) {\n case \"region\":\n const region = this.j[value];\n if (region)\n this.c.region = region;\n break;\n case \"vertical\":\n if (value === \"lr\" || value === \"rl\") {\n this.c.vertical = value;\n this.c.region = null;\n } else\n badValue = true;\n break;\n case \"line\":\n const [linePos, lineAlign] = value.split(COMMA);\n if (linePos.includes(PERCENT_SIGN)) {\n const percentage = toPercentage(linePos);\n if (percentage !== null) {\n this.c.line = percentage;\n this.c.snapToLines = false;\n } else\n badValue = true;\n } else {\n const number = toFloat(linePos);\n if (number !== null)\n this.c.line = number;\n else\n badValue = true;\n }\n if (LINE_ALIGN_RE.test(lineAlign)) {\n this.c.lineAlign = lineAlign;\n } else if (lineAlign) {\n badValue = true;\n }\n if (this.c.line !== \"auto\")\n this.c.region = null;\n break;\n case \"position\":\n const [colPos, colAlign] = value.split(COMMA), position = toPercentage(colPos);\n if (position !== null)\n this.c.position = position;\n else\n badValue = true;\n if (colAlign && POS_ALIGN_RE.test(colAlign)) {\n this.c.positionAlign = colAlign;\n } else if (colAlign) {\n badValue = true;\n }\n break;\n case \"size\":\n const size = toPercentage(value);\n if (size !== null) {\n this.c.size = size;\n if (size < 100)\n this.c.region = null;\n } else {\n badValue = true;\n }\n break;\n case \"align\":\n if (ALIGN_RE.test(value)) {\n this.c.align = value;\n } else {\n badValue = true;\n }\n break;\n default:\n this.g(this.f?.x(name, value, line));\n }\n if (badValue) {\n this.g(this.f?.y(name, value, line));\n }\n }\n }\n }\n g(error) {\n if (!error)\n return;\n this.m.push(error);\n if (this.h.strict) {\n this.h.cancel();\n throw error;\n } else {\n this.h.onError?.(error);\n }\n }\n}\nfunction parseVTTTimestamp(timestamp) {\n const match = timestamp.match(TIMESTAMP_RE);\n if (!match)\n return null;\n const hours = match[1] ? parseInt(match[1], 10) : 0, minutes = parseInt(match[2], 10), seconds = parseInt(match[3], 10), milliseconds = match[4] ? parseInt(match[4].padEnd(3, \"0\"), 10) : 0, total = hours * 3600 + minutes * 60 + seconds + milliseconds / 1e3;\n if (hours < 0 || minutes < 0 || seconds < 0 || milliseconds < 0 || minutes > 59 || seconds > 59) {\n return null;\n }\n return total;\n}\nfunction createVTTParser() {\n return new VTTParser();\n}\n\nvar vttParser = /*#__PURE__*/Object.freeze({\n __proto__: null,\n VTTBlock: VTTBlock,\n VTTParser: VTTParser,\n default: createVTTParser,\n parseVTTTimestamp: parseVTTTimestamp\n});\n\nconst DIGIT_RE = /[0-9]/, MULTI_SPACE_RE = /[\\s\\t]+/, TAG_NAME = {\n c: \"span\",\n i: \"i\",\n b: \"b\",\n u: \"u\",\n ruby: \"ruby\",\n rt: \"rt\",\n v: \"span\",\n lang: \"span\",\n timestamp: \"span\"\n}, HTML_ENTITIES = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n \""\": '\"',\n \"'\": \"'\",\n \" \": \"\\xA0\",\n \"‎\": \"\\u200E\",\n \"‏\": \"\\u200F\"\n}, HTML_ENTITY_RE = /&(?:amp|lt|gt|quot|#(0+)?39|nbsp|lrm|rlm);/g, COLORS = /* @__PURE__ */ new Set([\n \"white\",\n \"lime\",\n \"cyan\",\n \"red\",\n \"yellow\",\n \"magenta\",\n \"blue\",\n \"black\"\n]), BLOCK_TYPES = /* @__PURE__ */ new Set(Object.keys(TAG_NAME));\nfunction tokenizeVTTCue(cue) {\n let buffer = \"\", mode = 1, result = [], stack = [], node;\n for (let i = 0; i < cue.text.length; i++) {\n const char = cue.text[i];\n switch (mode) {\n case 1:\n if (char === \"<\") {\n addText();\n mode = 2;\n } else {\n buffer += char;\n }\n break;\n case 2:\n switch (char) {\n case \"\\n\":\n case \"\t\":\n case \" \":\n addNode();\n mode = 4;\n break;\n case \".\":\n addNode();\n mode = 3;\n break;\n case \"/\":\n mode = 5;\n break;\n case \">\":\n addNode();\n mode = 1;\n break;\n default:\n if (!buffer && DIGIT_RE.test(char))\n mode = 6;\n buffer += char;\n break;\n }\n break;\n case 3:\n switch (char) {\n case \"\t\":\n case \" \":\n case \"\\n\":\n addClass();\n if (node)\n node.class?.trim();\n mode = 4;\n break;\n case \".\":\n addClass();\n break;\n case \">\":\n addClass();\n if (node)\n node.class?.trim();\n mode = 1;\n break;\n default:\n buffer += char;\n }\n break;\n case 4:\n if (char === \">\") {\n buffer = buffer.replace(MULTI_SPACE_RE, \" \");\n if (node?.type === \"v\")\n node.voice = replaceHTMLEntities(buffer);\n else if (node?.type === \"lang\")\n node.lang = replaceHTMLEntities(buffer);\n buffer = \"\";\n mode = 1;\n } else {\n buffer += char;\n }\n break;\n case 5:\n if (char === \">\") {\n buffer = \"\";\n node = stack.pop();\n mode = 1;\n }\n break;\n case 6:\n if (char === \">\") {\n const time = parseVTTTimestamp(buffer);\n if (time !== null && time >= cue.startTime && time <= cue.endTime) {\n buffer = \"timestamp\";\n addNode();\n node.time = time;\n }\n buffer = \"\";\n mode = 1;\n } else {\n buffer += char;\n }\n break;\n }\n }\n function addNode() {\n if (BLOCK_TYPES.has(buffer)) {\n const parent = node;\n node = createBlockNode(buffer);\n if (parent) {\n if (stack[stack.length - 1] !== parent)\n stack.push(parent);\n parent.children.push(node);\n } else\n result.push(node);\n }\n buffer = \"\";\n mode = 1;\n }\n function addClass() {\n if (node && buffer) {\n const color = buffer.replace(\"bg_\", \"\");\n if (COLORS.has(color)) {\n node[buffer.startsWith(\"bg_\") ? \"bgColor\" : \"color\"] = color;\n } else {\n node.class = !node.class ? buffer : node.class + \" \" + buffer;\n }\n }\n buffer = \"\";\n }\n function addText() {\n if (!buffer)\n return;\n const text = { type: \"text\", data: replaceHTMLEntities(buffer) };\n node ? node.children.push(text) : result.push(text);\n buffer = \"\";\n }\n if (mode === 1)\n addText();\n return result;\n}\nfunction createBlockNode(type) {\n return {\n tagName: TAG_NAME[type],\n type,\n children: []\n };\n}\nfunction replaceHTMLEntities(text) {\n return text.replace(HTML_ENTITY_RE, (entity) => HTML_ENTITIES[entity] || \"'\");\n}\n\nfunction setCSSVar(el, name, value) {\n el.style.setProperty(`--${name}`, value + \"\");\n}\nfunction setDataAttr(el, name, value = true) {\n el.setAttribute(`data-${name}`, value === true ? \"\" : value + \"\");\n}\nfunction setPartAttr(el, name) {\n el.setAttribute(\"data-part\", name);\n}\nfunction getLineHeight(el) {\n return parseFloat(getComputedStyle(el).lineHeight) || 0;\n}\n\nfunction createVTTCueTemplate(cue) {\n if (IS_SERVER) {\n throw Error(\n \"[media-captions] called `createVTTCueTemplate` on the server - use `renderVTTCueString`\"\n );\n }\n const template = document.createElement(\"template\");\n template.innerHTML = renderVTTCueString(cue);\n return { cue, content: template.content };\n}\nfunction renderVTTCueString(cue, currentTime = 0) {\n return renderVTTTokensString(tokenizeVTTCue(cue), currentTime);\n}\nfunction renderVTTTokensString(tokens, currentTime = 0) {\n let attrs, result = \"\";\n for (const token of tokens) {\n if (token.type === \"text\") {\n result += token.data;\n } else {\n const isTimestamp = token.type === \"timestamp\";\n attrs = {};\n attrs.class = token.class;\n attrs.title = token.type === \"v\" && token.voice;\n attrs.lang = token.type === \"lang\" && token.lang;\n attrs[\"data-part\"] = token.type === \"v\" && \"voice\";\n if (isTimestamp) {\n attrs[\"data-part\"] = \"timed\";\n attrs[\"data-time\"] = token.time;\n attrs[\"data-future\"] = token.time > currentTime;\n attrs[\"data-past\"] = token.time < currentTime;\n }\n attrs.style = `${token.color ? `color: ${token.color};` : \"\"}${token.bgColor ? `background-color: ${token.bgColor};` : \"\"}`;\n const attributes = Object.entries(attrs).filter((v) => v[1]).map((v) => `${v[0]}=\"${v[1] === true ? \"\" : v[1]}\"`).join(\" \");\n result += `<${token.tagName}${attributes ? \" \" + attributes : \"\"}>${renderVTTTokensString(\n token.children\n )}</${token.tagName}>`;\n }\n }\n return result;\n}\nfunction updateTimedVTTCueNodes(root, currentTime) {\n if (IS_SERVER)\n return;\n for (const el of root.querySelectorAll('[data-part=\"timed\"]')) {\n const time = Number(el.getAttribute(\"data-time\"));\n if (Number.isNaN(time))\n continue;\n if (time > currentTime)\n setDataAttr(el, \"future\");\n else\n el.removeAttribute(\"data-future\");\n if (time < currentTime)\n setDataAttr(el, \"past\");\n else\n el.removeAttribute(\"data-past\");\n }\n}\n\nfunction debounce(fn, delay) {\n let timeout = null, args;\n function run() {\n clear();\n fn(...args);\n args = void 0;\n }\n function clear() {\n clearTimeout(timeout);\n timeout = null;\n }\n function debounce2() {\n args = [].slice.call(arguments);\n clear();\n timeout = setTimeout(run, delay);\n }\n return debounce2;\n}\n\nconst STARTING_BOX = Symbol(0);\nfunction createBox(box) {\n if (box instanceof HTMLElement) {\n return {\n top: box.offsetTop,\n width: box.clientWidth,\n height: box.clientHeight,\n left: box.offsetLeft,\n right: box.offsetLeft + box.clientWidth,\n bottom: box.offsetTop + box.clientHeight\n };\n }\n return { ...box };\n}\nfunction moveBox(box, axis, delta) {\n switch (axis) {\n case \"+x\":\n box.left += delta;\n box.right += delta;\n break;\n case \"-x\":\n box.left -= delta;\n box.right -= delta;\n break;\n case \"+y\":\n box.top += delta;\n box.bottom += delta;\n break;\n case \"-y\":\n box.top -= delta;\n box.bottom -= delta;\n break;\n }\n}\nfunction isBoxCollision(a, b) {\n return a.left <= b.right && a.right >= b.left && a.top <= b.bottom && a.bottom >= b.top;\n}\nfunction isAnyBoxCollision(box, boxes) {\n for (let i = 0; i < boxes.length; i++)\n if (isBoxCollision(box, boxes[i]))\n return boxes[i];\n return null;\n}\nfunction isWithinBox(container, box) {\n return box.top >= 0 && box.bottom <= container.height && box.left >= 0 && box.right <= container.width;\n}\nfunction isBoxOutOfBounds(container, box, axis) {\n switch (axis) {\n case \"+x\":\n return box.left < 0;\n case \"-x\":\n return box.right > container.width;\n case \"+y\":\n return box.top < 0;\n case \"-y\":\n return box.bottom > container.height;\n }\n}\nfunction calcBoxIntersectPercentage(container, box) {\n const x = Math.max(0, Math.min(container.width, box.right) - Math.max(0, box.left)), y = Math.max(0, Math.min(container.height, box.bottom) - Math.max(0, box.top)), intersectArea = x * y;\n return intersectArea / (container.height * container.width);\n}\nfunction createCSSBox(container, box) {\n return {\n top: box.top / container.height,\n left: box.left / container.width,\n right: (container.width - box.right) / container.width,\n bottom: (container.height - box.bottom) / container.height\n };\n}\nfunction resolveRelativeBox(container, box) {\n box.top = box.top * container.height;\n box.left = box.left * container.width;\n box.right = container.width - box.right * container.width;\n box.bottom = container.height - box.bottom * container.height;\n return box;\n}\nconst BOX_SIDES = [\"top\", \"left\", \"right\", \"bottom\"];\nfunction setBoxCSSVars(el, container, box, prefix) {\n const cssBox = createCSSBox(container, box);\n for (const side of BOX_SIDES) {\n setCSSVar(el, `${prefix}-${side}`, cssBox[side] * 100 + \"%\");\n }\n}\nfunction avoidBoxCollisions(container, box, boxes, axis) {\n let percentage = 1, positionedBox, startBox = { ...box };\n for (let i = 0; i < axis.length; i++) {\n while (isBoxOutOfBounds(container, box, axis[i]) || isWithinBox(container, box) && isAnyBoxCollision(box, boxes)) {\n moveBox(box, axis[i], 1);\n }\n if (isWithinBox(container, box))\n return box;\n const intersection = calcBoxIntersectPercentage(container, box);\n if (percentage > intersection) {\n positionedBox = { ...box };\n percentage = intersection;\n }\n box = { ...startBox };\n }\n return positionedBox || startBox;\n}\n\nconst POSITION_OVERRIDE = Symbol(0);\nfunction positionCue(container, cue, displayEl, boxes) {\n let cueEl = displayEl.firstElementChild, line = computeCueLine(cue), displayBox, axis = [];\n if (!displayEl[STARTING_BOX]) {\n displayEl[STARTING_BOX] = createStartingBox(container, displayEl);\n }\n displayBox = resolveRelativeBox(container, { ...displayEl[STARTING_BOX] });\n if (displayEl[POSITION_OVERRIDE]) {\n axis = [displayEl[POSITION_OVERRIDE] === \"top\" ? \"+y\" : \"-y\", \"+x\", \"-x\"];\n } else if (cue.snapToLines) {\n let size;\n switch (cue.vertical) {\n case \"\":\n axis = [\"+y\", \"-y\"];\n size = \"height\";\n break;\n case \"rl\":\n axis = [\"+x\", \"-x\"];\n size = \"width\";\n break;\n case \"lr\":\n axis = [\"-x\", \"+x\"];\n size = \"width\";\n break;\n }\n let step = getLineHeight(cueEl), position = step * Math.round(line), maxPosition = container[size] + step, initialAxis = axis[0];\n if (Math.abs(position) > maxPosition) {\n position = position < 0 ? -1 : 1;\n position *= Math.ceil(maxPosition / step) * step;\n }\n if (line < 0) {\n position += cue.vertical === \"\" ? container.height : container.width;\n axis = axis.reverse();\n }\n moveBox(displayBox, initialAxis, position);\n } else {\n const isHorizontal = cue.vertical === \"\", posAxis = isHorizontal ? \"+y\" : \"+x\", size = isHorizontal ? displayBox.height : displayBox.width;\n moveBox(\n displayBox,\n posAxis,\n (isHorizontal ? container.height : container.width) * line / 100\n );\n moveBox(\n displayBox,\n posAxis,\n cue.lineAlign === \"center\" ? size / 2 : cue.lineAlign === \"end\" ? size : 0\n );\n axis = isHorizontal ? [\"-y\", \"+y\", \"-x\", \"+x\"] : [\"-x\", \"+x\", \"-y\", \"+y\"];\n }\n displayBox = avoidBoxCollisions(container, displayBox, boxes, axis);\n setBoxCSSVars(displayEl, container, displayBox, \"cue\");\n return displayBox;\n}\nfunction createStartingBox(container, cueEl) {\n const box = createBox(cueEl), pos = getStyledPositions(cueEl);\n cueEl[POSITION_OVERRIDE] = false;\n if (pos.top) {\n box.top = pos.top;\n box.bottom = pos.top + box.height;\n cueEl[POSITION_OVERRIDE] = \"top\";\n }\n if (pos.bottom) {\n const bottom = container.height - pos.bottom;\n box.top = bottom - box.height;\n box.bottom = bottom;\n cueEl[POSITION_OVERRIDE] = \"bottom\";\n }\n if (pos.left)\n box.left = pos.left;\n if (pos.right)\n box.right = container.width - pos.right;\n return createCSSBox(container, box);\n}\nfunction getStyledPositions(el) {\n const positions = {};\n for (const side of BOX_SIDES) {\n positions[side] = parseFloat(el.style.getPropertyValue(`--cue-${side}`));\n }\n return positions;\n}\nfunction computeCueLine(cue) {\n if (cue.line === \"auto\") {\n if (!cue.snapToLines) {\n return 100;\n } else {\n return -1;\n }\n }\n return cue.line;\n}\nfunction computeCuePosition(cue) {\n if (cue.position === \"auto\") {\n switch (cue.align) {\n case \"start\":\n case \"left\":\n return 0;\n case \"right\":\n case \"end\":\n return 100;\n default:\n return 50;\n }\n }\n return cue.position;\n}\nfunction computeCuePositionAlignment(cue, dir) {\n if (cue.positionAlign === \"auto\") {\n switch (cue.align) {\n case \"start\":\n return dir === \"ltr\" ? \"line-left\" : \"line-right\";\n case \"end\":\n return dir === \"ltr\" ? \"line-right\" : \"line-left\";\n case \"center\":\n return \"center\";\n default:\n return `line-${cue.align}`;\n }\n }\n return cue.positionAlign;\n}\n\nconst REGION_AXIS = [\"-y\", \"+y\", \"-x\", \"+x\"];\nfunction positionRegion(container, region, regionEl, boxes) {\n let cues = Array.from(regionEl.querySelectorAll('[data-part=\"cue-display\"]')), height = 0, limit = Math.max(0, cues.length - region.lines);\n for (let i = cues.length - 1; i >= limit; i--) {\n height += cues[i].offsetHeight;\n }\n setCSSVar(regionEl, \"region-height\", height + \"px\");\n if (!regionEl[STARTING_BOX]) {\n regionEl[STARTING_BOX] = createCSSBox(container, createBox(regionEl));\n }\n let box = { ...regionEl[STARTING_BOX] };\n box = resolveRelativeBox(container, box);\n box.width = regionEl.clientWidth;\n box.height = height;\n box.right = box.left + box.width;\n box.bottom = box.top + height;\n box = avoidBoxCollisions(container, box, boxes, REGION_AXIS);\n setBoxCSSVars(regionEl, container, box, \"region\");\n return box;\n}\n\nclass CaptionsRenderer {\n overlay;\n z;\n A = 0;\n C = \"ltr\";\n B = [];\n D = false;\n E;\n j = /* @__PURE__ */ new Map();\n l = /* @__PURE__ */ new Map();\n /* Text direction. */\n get dir() {\n return this.C;\n }\n set dir(dir) {\n this.C = dir;\n setDataAttr(this.overlay, \"dir\", dir);\n }\n get currentTime() {\n return this.A;\n }\n set currentTime(time) {\n this.A = time;\n this.update();\n }\n constructor(overlay, init) {\n this.overlay = overlay;\n this.dir = init?.dir ?? \"ltr\";\n overlay.setAttribute(\"translate\", \"yes\");\n overlay.setAttribute(\"aria-live\", \"off\");\n overlay.setAttribute(\"aria-atomic\", \"true\");\n setPartAttr(overlay, \"captions\");\n this.G();\n this.E = new ResizeObserver(this.I.bind(this));\n this.E.observe(overlay);\n }\n changeTrack({ regions, cues }) {\n this.reset();\n this.J(regions);\n for (const cue of cues)\n this.l.set(cue, null);\n this.update();\n }\n addCue(cue) {\n this.l.set(cue, null);\n this.update();\n }\n removeCue(cue) {\n this.l.delete(cue);\n this.update();\n }\n update(forceUpdate = false) {\n this.H(forceUpdate);\n }\n reset() {\n this.l.clear();\n this.j.clear();\n this.B = [];\n this.overlay.textContent = \"\";\n }\n destroy() {\n this.reset();\n this.E.disconnect();\n }\n I() {\n this.D = true;\n this.K();\n }\n K = debounce(() => {\n this.D = false;\n this.G();\n for (const el of this.j.values()) {\n el[STARTING_BOX] = null;\n }\n for (const el of this.l.values()) {\n if (el)\n el[STARTING_BOX] = null;\n }\n this.H(true);\n }, 50);\n G() {\n this.z = createBox(this.overlay);\n setCSSVar(this.overlay, \"overlay-width\", this.z.width + \"px\");\n setCSSVar(this.overlay, \"overlay-height\", this.z.height + \"px\");\n }\n H(forceUpdate = false) {\n if (!this.l.size || this.D)\n return;\n let cue, activeCues = [...this.l.keys()].filter((cue2) => this.A >= cue2.startTime && this.A <= cue2.endTime).sort(\n (cueA, cueB) => cueA.startTime !== cueB.startTime ? cueA.startTime - cueB.startTime : cueA.endTime - cueB.endTime\n ), activeRegions = activeCues.map((cue2) => cue2.region);\n for (let i = 0; i < this.B.length; i++) {\n cue = this.B[i];\n if (activeCues[i] === cue)\n continue;\n if (cue.region && !activeRegions.includes(cue.region)) {\n const regionEl = this.j.get(cue.region.id);\n if (regionEl) {\n regionEl.removeAttribute(\"data-active\");\n forceUpdate = true;\n }\n }\n const cueEl = this.l.get(cue);\n if (cueEl) {\n cueEl.remove();\n forceUpdate = true;\n }\n }\n for (let i = 0; i < activeCues.length; i++) {\n cue = activeCues[i];\n let cueEl = this.l.get(cue);\n if (!cueEl)\n this.l.set(cue, cueEl = this.L(cue));\n const regionEl = this.F(cue) && this.j.get(cue.region.id);\n if (regionEl && !regionEl.hasAttribute(\"data-active\")) {\n requestAnimationFrame(() => setDataAttr(regionEl, \"active\"));\n forceUpdate = true;\n }\n if (!cueEl.isConnected) {\n (regionEl || this.overlay).append(cueEl);\n forceUpdate = true;\n }\n }\n if (forceUpdate) {\n const boxes = [], seen = /* @__PURE__ */ new Set();\n for (let i = activeCues.length - 1; i >= 0; i--) {\n cue = activeCues[i];\n if (seen.has(cue.region || cue))\n continue;\n const isRegion = this.F(cue), el = isRegion ? this.j.get(cue.region.id) : this.l.get(cue);\n if (isRegion) {\n boxes.push(positionRegion(this.z, cue.region, el, boxes));\n } else {\n boxes.push(positionCue(this.z, cue, el, boxes));\n }\n seen.add(isRegion ? cue.region : cue);\n }\n }\n updateTimedVTTCueNodes(this.overlay, this.A);\n this.B = activeCues;\n }\n J(regions) {\n if (!regions)\n return;\n for (const region of regions) {\n const el = this.M(region);\n this.j.set(region.id, el);\n this.overlay.append(el);\n }\n }\n M(region) {\n const el = document.createElement(\"div\");\n setPartAttr(el, \"region\");\n setDataAttr(el, \"id\", region.id);\n setDataAttr(el, \"scroll\", region.scroll);\n setCSSVar(el, \"region-width\", region.width + \"%\");\n setCSSVar(el, \"region-anchor-x\", region.regionAnchorX);\n setCSSVar(el, \"region-anchor-y\", region.regionAnchorY);\n setCSSVar(el, \"region-viewport-anchor-x\", region.viewportAnchorX);\n setCSSVar(el, \"region-viewport-anchor-y\", region.viewportAnchorY);\n setCSSVar(el, \"region-lines\", region.lines);\n return el;\n }\n L(cue) {\n const display = document.createElement(\"div\"), position = computeCuePosition(cue), positionAlignment = computeCuePositionAlignment(cue, this.C);\n setPartAttr(display, \"cue-display\");\n if (cue.vertical !== \"\")\n setDataAttr(display, \"vertical\");\n setCSSVar(display, \"cue-text-align\", cue.align);\n if (cue.style) {\n for (const prop of Object.keys(cue.style)) {\n display.style.setProperty(prop, cue.style[prop]);\n }\n }\n if (!this.F(cue)) {\n setCSSVar(\n display,\n \"cue-writing-mode\",\n cue.vertical === \"\" ? \"horizontal-tb\" : cue.vertical === \"lr\" ? \"vertical-lr\" : \"vertical-rl\"\n );\n if (!cue.style?.[\"--cue-width\"]) {\n let maxSize = position;\n if (positionAlignment === \"line-left\") {\n maxSize = 100 - position;\n } else if (positionAlignment === \"center\" && position <= 50) {\n maxSize = position * 2;\n } else if (positionAlignment === \"center\" && position > 50) {\n maxSize = (100 - position) * 2;\n }\n const size = cue.size < maxSize ? cue.size : maxSize;\n if (cue.vertical === \"\")\n setCSSVar(display, \"cue-width\", size + \"%\");\n else\n setCSSVar(display, \"cue-height\", size + \"%\");\n }\n } else {\n setCSSVar(\n display,\n \"cue-offset\",\n `${position - (positionAlignment === \"line-right\" ? 100 : positionAlignment === \"center\" ? 50 : 0)}%`\n );\n }\n const el = document.createElement(\"div\");\n setPartAttr(el, \"cue\");\n if (cue.id)\n setDataAttr(el, \"id\", cue.id);\n el.innerHTML = renderVTTCueString(cue);\n display.append(el);\n return display;\n }\n F(cue) {\n return cue.region && cue.size === 100 && cue.vertical === \"\" && cue.line === \"auto\";\n }\n}\n\nexport { CaptionsRenderer as C, ParseError as P, TextCue as T, VTTParser as V, VTTBlock as a, VTTCue as b, ParseErrorCode as c, parseResponse as d, parseByteStream as e, parseText as f, parseTextStream as g, VTTRegion as h, createVTTCueTemplate as i, renderVTTTokensString as j, parseVTTTimestamp as p, renderVTTCueString as r, tokenizeVTTCue as t, updateTimedVTTCueNodes as u };\n","\"use client\"\n\nimport { scoped } from './vidstack-CZgUA94N.js';\nimport { HTMLMediaProvider, HTMLAirPlayAdapter } from './vidstack-D5Pzx_k5.js';\nimport 'react';\nimport '@floating-ui/dom';\n\nclass AudioProvider extends HTMLMediaProvider {\n $$PROVIDER_TYPE = \"AUDIO\";\n get type() {\n return \"audio\";\n }\n airPlay;\n constructor(audio, ctx) {\n super(audio, ctx);\n scoped(() => {\n this.airPlay = new HTMLAirPlayAdapter(this.media, ctx);\n }, this.scope);\n }\n setup() {\n super.setup();\n if (this.type === \"audio\") this.ctx.notify(\"provider-setup\", this);\n }\n /**\n * The native HTML `<audio>` element.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement}\n */\n get audio() {\n return this.media;\n }\n}\n\nexport { AudioProvider };\n","\"use client\"\n\nimport { peek, listenEvent, effect, DOMEvent, camelToKebabCase, isString, isUndefined, isFunction } from './vidstack-CZgUA94N.js';\nimport { QualitySymbol, RAFLoop, TextTrack, TextTrackSymbol, ListSymbol, IS_CHROME, coerceToError, loadScript, VideoProvider, isHLSSupported, preconnect } from './vidstack-D5Pzx_k5.js';\nimport 'react';\nimport '@floating-ui/dom';\n\nconst toDOMEventType = (type) => camelToKebabCase(type);\nclass HLSController {\n #video;\n #ctx;\n #instance = null;\n #stopLiveSync = null;\n config = {};\n #callbacks = /* @__PURE__ */ new Set();\n get instance() {\n return this.#instance;\n }\n constructor(video, ctx) {\n this.#video = video;\n this.#ctx = ctx;\n }\n setup(ctor) {\n const { streamType } = this.#ctx.$state;\n const isLive = peek(streamType).includes(\"live\"), isLiveLowLatency = peek(streamType).includes(\"ll-\");\n this.#instance = new ctor({\n lowLatencyMode: isLiveLowLatency,\n backBufferLength: isLiveLowLatency ? 4 : isLive ? 8 : void 0,\n renderTextTracksNatively: false,\n ...this.config\n });\n const dispatcher = this.#dispatchHLSEvent.bind(this);\n for (const event of Object.values(ctor.Events)) this.#instance.on(event, dispatcher);\n this.#instance.on(ctor.Events.ERROR, this.#onError.bind(this));\n for (const callback of this.#callbacks) callback(this.#instance);\n this.#ctx.player.dispatch(\"hls-instance\", {\n detail: this.#instance\n });\n this.#instance.attachMedia(this.#video);\n this.#instance.on(ctor.Events.AUDIO_TRACK_SWITCHED, this.#onAudioSwitch.bind(this));\n this.#instance.on(ctor.Events.LEVEL_SWITCHED, this.#onLevelSwitched.bind(this));\n this.#instance.on(ctor.Events.LEVEL_LOADED, this.#onLevelLoaded.bind(this));\n this.#instance.on(ctor.Events.LEVEL_UPDATED, this.#onLevelUpdated.bind(this));\n this.#instance.on(ctor.Events.NON_NATIVE_TEXT_TRACKS_FOUND, this.#onTracksFound.bind(this));\n this.#instance.on(ctor.Events.CUES_PARSED, this.#onCuesParsed.bind(this));\n this.#ctx.qualities[QualitySymbol.enableAuto] = this.#enableAutoQuality.bind(this);\n listenEvent(this.#ctx.qualities, \"change\", this.#onUserQualityChange.bind(this));\n listenEvent(this.#ctx.audioTracks, \"change\", this.#onUserAudioChange.bind(this));\n this.#stopLiveSync = effect(this.#liveSync.bind(this));\n }\n #createDOMEvent(type, data) {\n return new DOMEvent(toDOMEventType(type), { detail: data });\n }\n #liveSync() {\n if (!this.#ctx.$state.live()) return;\n const raf = new RAFLoop(this.#liveSyncPosition.bind(this));\n raf.start();\n return raf.stop.bind(raf);\n }\n #liveSyncPosition() {\n this.#ctx.$state.liveSyncPosition.set(this.#instance?.liveSyncPosition ?? Infinity);\n }\n #dispatchHLSEvent(type, data) {\n this.#ctx.player?.dispatch(this.#createDOMEvent(type, data));\n }\n #onTracksFound(eventType, data) {\n const event = this.#createDOMEvent(eventType, data);\n let currentTrack = -1;\n for (let i = 0; i < data.tracks.length; i++) {\n const nonNativeTrack = data.tracks[i], init = nonNativeTrack.subtitleTrack ?? nonNativeTrack.closedCaptions, track = new TextTrack({\n id: `hls-${nonNativeTrack.kind}-${i}`,\n src: init?.url,\n label: nonNativeTrack.label,\n language: init?.lang,\n kind: nonNativeTrack.kind,\n default: nonNativeTrack.default\n });\n track[TextTrackSymbol.readyState] = 2;\n track[TextTrackSymbol.onModeChange] = () => {\n if (track.mode === \"showing\") {\n this.#instance.subtitleTrack = i;\n currentTrack = i;\n } else if (currentTrack === i) {\n this.#instance.subtitleTrack = -1;\n currentTrack = -1;\n }\n };\n this.#ctx.textTracks.add(track, event);\n }\n }\n #onCuesParsed(eventType, data) {\n const index = this.#instance?.subtitleTrack, track = this.#ctx.textTracks.getById(`hls-${data.type}-${index}`);\n if (!track) return;\n const event = this.#createDOMEvent(eventType, data);\n for (const cue of data.cues) {\n cue.positionAlign = \"auto\";\n track.addCue(cue, event);\n }\n }\n #onAudioSwitch(eventType, data) {\n const track = this.#ctx.audioTracks[data.id];\n if (track) {\n const trigger = this.#createDOMEvent(eventType, data);\n this.#ctx.audioTracks[ListSymbol.select](track, true, trigger);\n }\n }\n #onLevelSwitched(eventType, data) {\n const quality = this.#ctx.qualities[data.level];\n if (quality) {\n const trigger = this.#createDOMEvent(eventType, data);\n this.#ctx.qualities[ListSymbol.select](quality, true, trigger);\n }\n }\n #onLevelUpdated(eventType, data) {\n if (data.details.totalduration > 0) {\n this.#ctx.$state.inferredLiveDVRWindow.set(data.details.totalduration);\n }\n }\n #onLevelLoaded(eventType, data) {\n if (this.#ctx.$state.canPlay()) return;\n const { type, live, totalduration: duration, targetduration } = data.details, trigger = this.#createDOMEvent(eventType, data);\n this.#ctx.notify(\n \"stream-type-change\",\n live ? type === \"EVENT\" && Number.isFinite(duration) && targetduration >= 10 ? \"live:dvr\" : \"live\" : \"on-demand\",\n trigger\n );\n this.#ctx.notify(\"duration-change\", duration, trigger);\n const media = this.#instance.media;\n if (this.#instance.currentLevel === -1) {\n this.#ctx.qualities[QualitySymbol.setAuto](true, trigger);\n }\n for (const remoteTrack of this.#instance.audioTracks) {\n const localTrack = {\n id: remoteTrack.id.toString(),\n label: remoteTrack.name,\n language: remoteTrack.lang || \"\",\n kind: \"main\"\n };\n this.#ctx.audioTracks[ListSymbol.add](localTrack, trigger);\n }\n for (const level of this.#instance.levels) {\n const videoQuality = {\n id: level.id?.toString() ?? level.height + \"p\",\n width: level.width,\n height: level.height,\n codec: level.codecSet,\n bitrate: level.bitrate\n };\n this.#ctx.qualities[ListSymbol.add](videoQuality, trigger);\n }\n media.dispatchEvent(new DOMEvent(\"canplay\", { trigger }));\n }\n #onError(eventType, data) {\n if (data.fatal) {\n switch (data.type) {\n case \"mediaError\":\n this.#instance?.recoverMediaError();\n break;\n default:\n this.#onFatalError(data.error);\n break;\n }\n }\n }\n #onFatalError(error) {\n this.#ctx.notify(\"error\", {\n message: error.message,\n code: 1,\n error\n });\n }\n #enableAutoQuality() {\n if (this.#instance) this.#instance.currentLevel = -1;\n }\n #onUserQualityChange() {\n const { qualities } = this.#ctx;\n if (!this.#instance || qualities.auto) return;\n this.#instance[qualities.switch + \"Level\"] = qualities.selectedIndex;\n if (IS_CHROME) {\n this.#video.currentTime = this.#video.currentTime;\n }\n }\n #onUserAudioChange() {\n const { audioTracks } = this.#ctx;\n if (this.#instance && this.#instance.audioTrack !== audioTracks.selectedIndex) {\n this.#instance.audioTrack = audioTracks.selectedIndex;\n }\n }\n onInstance(callback) {\n this.#callbacks.add(callback);\n return () => this.#callbacks.delete(callback);\n }\n loadSource(src) {\n if (!isString(src.src)) return;\n this.#instance?.loadSource(src.src);\n }\n destroy() {\n this.#instance?.destroy();\n this.#instance = null;\n this.#stopLiveSync?.();\n this.#stopLiveSync = null;\n }\n}\n\nclass HLSLibLoader {\n #lib;\n #ctx;\n #callback;\n constructor(lib, ctx, callback) {\n this.#lib = lib;\n this.#ctx = ctx;\n this.#callback = callback;\n this.#startLoading();\n }\n async #startLoading() {\n const callbacks = {\n onLoadStart: this.#onLoadStart.bind(this),\n onLoaded: this.#onLoaded.bind(this),\n onLoadError: this.#onLoadError.bind(this)\n };\n let ctor = await loadHLSScript(this.#lib, callbacks);\n if (isUndefined(ctor) && !isString(this.#lib)) ctor = await importHLS(this.#lib, callbacks);\n if (!ctor) return null;\n if (!ctor.isSupported()) {\n const message = \"[vidstack] `hls.js` is not supported in this environment\";\n this.#ctx.player.dispatch(new DOMEvent(\"hls-unsupported\"));\n this.#ctx.notify(\"error\", { message, code: 4 });\n return null;\n }\n return ctor;\n }\n #onLoadStart() {\n this.#ctx.player.dispatch(new DOMEvent(\"hls-lib-load-start\"));\n }\n #onLoaded(ctor) {\n this.#ctx.player.dispatch(\n new DOMEvent(\"hls-lib-loaded\", {\n detail: ctor\n })\n );\n this.#callback(ctor);\n }\n #onLoadError(e) {\n const error = coerceToError(e);\n this.#ctx.player.dispatch(\n new DOMEvent(\"hls-lib-load-error\", {\n detail: error\n })\n );\n this.#ctx.notify(\"error\", {\n message: error.message,\n code: 4,\n error\n });\n }\n}\nasync function importHLS(loader, callbacks = {}) {\n if (isUndefined(loader)) return void 0;\n callbacks.onLoadStart?.();\n if (loader.prototype && loader.prototype !== Function) {\n callbacks.onLoaded?.(loader);\n return loader;\n }\n try {\n const ctor = (await loader())?.default;\n if (ctor && !!ctor.isSupported) {\n callbacks.onLoaded?.(ctor);\n } else {\n throw Error(\n false ? \"[vidstack] failed importing `hls.js`. Dynamic import returned invalid constructor.\" : \"\"\n );\n }\n return ctor;\n } catch (err) {\n callbacks.onLoadError?.(err);\n }\n return void 0;\n}\nasync function loadHLSScript(src, callbacks = {}) {\n if (!isString(src)) return void 0;\n callbacks.onLoadStart?.();\n try {\n await loadScript(src);\n if (!isFunction(window.Hls)) {\n throw Error(\n false ? \"[vidstack] failed loading `hls.js`. Could not find a valid `Hls` constructor on window\" : \"\"\n );\n }\n const ctor = window.Hls;\n callbacks.onLoaded?.(ctor);\n return ctor;\n } catch (err) {\n callbacks.onLoadError?.(err);\n }\n return void 0;\n}\n\nconst JS_DELIVR_CDN = \"https://cdn.jsdelivr.net\";\nclass HLSProvider extends VideoProvider {\n $$PROVIDER_TYPE = \"HLS\";\n #ctor = null;\n #controller = new HLSController(this.video, this.ctx);\n /**\n * The `hls.js` constructor.\n */\n get ctor() {\n return this.#ctor;\n }\n /**\n * The current `hls.js` instance.\n */\n get instance() {\n return this.#controller.instance;\n }\n /**\n * Whether `hls.js` is supported in this environment.\n */\n static supported = isHLSSupported();\n get type() {\n return \"hls\";\n }\n get canLiveSync() {\n return true;\n }\n #library = `${JS_DELIVR_CDN}/npm/hls.js@^1.5.0/dist/hls${\".min.js\"}`;\n /**\n * The `hls.js` configuration object.\n *\n * @see {@link https://github.com/video-dev/hls.js/blob/master/docs/API.md#fine-tuning}\n */\n get config() {\n return this.#controller.config;\n }\n set config(config) {\n this.#controller.config = config;\n }\n /**\n * The `hls.js` constructor (supports dynamic imports) or a URL of where it can be found.\n *\n * @defaultValue `https://cdn.jsdelivr.net/npm/hls.js@^1.0.0/dist/hls.min.js`\n */\n get library() {\n return this.#library;\n }\n set library(library) {\n this.#library = library;\n }\n preconnect() {\n if (!isString(this.#library)) return;\n preconnect(this.#library);\n }\n setup() {\n super.setup();\n new HLSLibLoader(this.#library, this.ctx, (ctor) => {\n this.#ctor = ctor;\n this.#controller.setup(ctor);\n this.ctx.notify(\"provider-setup\", this);\n const src = peek(this.ctx.$state.source);\n if (src) this.loadSource(src);\n });\n }\n async loadSource(src, preload) {\n if (!isString(src.src)) {\n this.removeSource();\n return;\n }\n this.media.preload = preload || \"\";\n this.appendSource(src, \"application/x-mpegurl\");\n this.#controller.loadSource(src);\n this.currentSrc = src;\n }\n /**\n * The given callback is invoked when a new `hls.js` instance is created and right before it's\n * attached to media.\n */\n onInstance(callback) {\n const instance = this.#controller.instance;\n if (instance) callback(instance);\n return this.#controller.onInstance(callback);\n }\n destroy() {\n this.#controller.destroy();\n }\n}\n\nexport { HLSProvider };\n","\"use client\"\n\nimport { appendParamsToURL, IS_SERVER } from './vidstack-D5Pzx_k5.js';\nimport { signal, listenEvent, effect, peek, isString } from './vidstack-CZgUA94N.js';\n\nclass EmbedProvider {\n #iframe;\n src = signal(\"\");\n /**\n * Defines which referrer is sent when fetching the resource.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy}\n */\n referrerPolicy = null;\n get iframe() {\n return this.#iframe;\n }\n constructor(iframe) {\n this.#iframe = iframe;\n iframe.setAttribute(\"frameBorder\", \"0\");\n iframe.setAttribute(\"aria-hidden\", \"true\");\n iframe.setAttribute(\n \"allow\",\n \"autoplay; fullscreen; encrypted-media; picture-in-picture; accelerometer; gyroscope\"\n );\n if (this.referrerPolicy !== null) {\n iframe.setAttribute(\"referrerpolicy\", this.referrerPolicy);\n }\n }\n setup() {\n listenEvent(window, \"message\", this.#onWindowMessage.bind(this));\n listenEvent(this.#iframe, \"load\", this.onLoad.bind(this));\n effect(this.#watchSrc.bind(this));\n }\n #watchSrc() {\n const src = this.src();\n if (!src.length) {\n this.#iframe.setAttribute(\"src\", \"\");\n return;\n }\n const params = peek(() => this.buildParams());\n this.#iframe.setAttribute(\"src\", appendParamsToURL(src, params));\n }\n postMessage(message, target) {\n if (IS_SERVER) return;\n this.#iframe.contentWindow?.postMessage(JSON.stringify(message), target ?? \"*\");\n }\n #onWindowMessage(event) {\n const origin = this.getOrigin(), isOriginMatch = (event.source === null || event.source === this.#iframe?.contentWindow) && (!isString(origin) || origin === event.origin);\n if (!isOriginMatch) return;\n try {\n const message = JSON.parse(event.data);\n if (message) this.onMessage(message, event);\n return;\n } catch (e) {\n }\n if (event.data) this.onMessage(event.data, event);\n }\n}\n\nexport { EmbedProvider };\n","\"use client\"\n\nconst videoIdRE = /(?:https:\\/\\/)?(?:player\\.)?vimeo(?:\\.com)?\\/(?:video\\/)?(\\d+)(?:(?:\\?hash=|\\?h=|\\/)(.*))?/;\nconst infoCache = /* @__PURE__ */ new Map();\nconst pendingFetch = /* @__PURE__ */ new Map();\nfunction resolveVimeoVideoId(src) {\n const matches = src.match(videoIdRE);\n return { videoId: matches?.[1], hash: matches?.[2] };\n}\nasync function getVimeoVideoInfo(videoId, abort, videoHash) {\n if (infoCache.has(videoId)) return infoCache.get(videoId);\n if (pendingFetch.has(videoId)) return pendingFetch.get(videoId);\n let oembedSrc = `https://vimeo.com/api/oembed.json?url=https://player.vimeo.com/video/${videoId}`;\n if (videoHash) {\n oembedSrc = oembedSrc.concat(`?h=${videoHash}`);\n }\n const promise = window.fetch(oembedSrc, {\n mode: \"cors\",\n signal: abort.signal\n }).then((response) => response.json()).then((data) => {\n const thumnailRegex = /vimeocdn.com\\/video\\/(.*)?_/, thumbnailId = data?.thumbnail_url?.match(thumnailRegex)?.[1], poster = thumbnailId ? `https://i.vimeocdn.com/video/${thumbnailId}_1920x1080.webp` : \"\", info = {\n title: data?.title ?? \"\",\n duration: data?.duration ?? 0,\n poster,\n pro: data.account_type !== \"basic\"\n };\n infoCache.set(videoId, info);\n return info;\n }).finally(() => pendingFetch.delete(videoId));\n pendingFetch.set(videoId, promise);\n return promise;\n}\n\nexport { getVimeoVideoInfo, resolveVimeoVideoId };\n","\"use client\"\n\nimport { createScope, signal, effect, peek, isString, deferredPromise, listenEvent, isArray } from './vidstack-CZgUA94N.js';\nimport { TimeRange, RAFLoop, preconnect, ListSymbol, TextTrack, QualitySymbol } from './vidstack-D5Pzx_k5.js';\nimport { EmbedProvider } from './vidstack-FldwQc2Q.js';\nimport { resolveVimeoVideoId, getVimeoVideoInfo } from './vidstack-krOAtKMi.js';\nimport 'react';\nimport '@floating-ui/dom';\n\nconst trackedVimeoEvents = [\n \"bufferend\",\n \"bufferstart\",\n // 'cuechange',\n \"durationchange\",\n \"ended\",\n \"enterpictureinpicture\",\n \"error\",\n \"fullscreenchange\",\n \"leavepictureinpicture\",\n \"loaded\",\n // 'loadeddata',\n // 'loadedmetadata',\n // 'loadstart',\n \"playProgress\",\n \"loadProgress\",\n \"pause\",\n \"play\",\n \"playbackratechange\",\n // 'progress',\n \"qualitychange\",\n \"seeked\",\n \"seeking\",\n // 'texttrackchange',\n \"timeupdate\",\n \"volumechange\",\n \"waiting\"\n // 'adstarted',\n // 'adcompleted',\n // 'aderror',\n // 'adskipped',\n // 'adallcompleted',\n // 'adclicked',\n // 'chapterchange',\n // 'chromecastconnected',\n // 'remoteplaybackavailabilitychange',\n // 'remoteplaybackconnecting',\n // 'remoteplaybackconnect',\n // 'remoteplaybackdisconnect',\n // 'liveeventended',\n // 'liveeventstarted',\n // 'livestreamoffline',\n // 'livestreamonline',\n];\n\nclass VimeoProvider extends EmbedProvider {\n $$PROVIDER_TYPE = \"VIMEO\";\n scope = createScope();\n fullscreen;\n #ctx;\n #videoId = signal(\"\");\n #pro = signal(false);\n #hash = null;\n #currentSrc = null;\n #fullscreenActive = false;\n #seekableRange = new TimeRange(0, 0);\n #timeRAF = new RAFLoop(this.#onAnimationFrame.bind(this));\n #currentCue = null;\n #chaptersTrack = null;\n #promises = /* @__PURE__ */ new Map();\n #videoInfoPromise = null;\n constructor(iframe, ctx) {\n super(iframe);\n this.#ctx = ctx;\n const self = this;\n this.fullscreen = {\n get active() {\n return self.#fullscreenActive;\n },\n supported: true,\n enter: () => this.#remote(\"requestFullscreen\"),\n exit: () => this.#remote(\"exitFullscreen\")\n };\n }\n /**\n * Whether tracking session data should be enabled on the embed, including cookies and analytics.\n * This is turned off by default to be GDPR-compliant.\n *\n * @defaultValue `false`\n */\n cookies = false;\n title = true;\n byline = true;\n portrait = true;\n color = \"00ADEF\";\n get type() {\n return \"vimeo\";\n }\n get currentSrc() {\n return this.#currentSrc;\n }\n get videoId() {\n return this.#videoId();\n }\n get hash() {\n return this.#hash;\n }\n get isPro() {\n return this.#pro();\n }\n preconnect() {\n preconnect(this.getOrigin());\n }\n setup() {\n super.setup();\n effect(this.#watchVideoId.bind(this));\n effect(this.#watchVideoInfo.bind(this));\n effect(this.#watchPro.bind(this));\n this.#ctx.notify(\"provider-setup\", this);\n }\n destroy() {\n this.#reset();\n this.fullscreen = void 0;\n const message = \"provider destroyed\";\n for (const promises of this.#promises.values()) {\n for (const { reject } of promises) reject(message);\n }\n this.#promises.clear();\n this.#remote(\"destroy\");\n }\n async play() {\n return this.#remote(\"play\");\n }\n async pause() {\n return this.#remote(\"pause\");\n }\n setMuted(muted) {\n this.#remote(\"setMuted\", muted);\n }\n setCurrentTime(time) {\n this.#remote(\"seekTo\", time);\n this.#ctx.notify(\"seeking\", time);\n }\n setVolume(volume) {\n this.#remote(\"setVolume\", volume);\n this.#remote(\"setMuted\", peek(this.#ctx.$state.muted));\n }\n setPlaybackRate(rate) {\n this.#remote(\"setPlaybackRate\", rate);\n }\n async loadSource(src) {\n if (!isString(src.src)) {\n this.#currentSrc = null;\n this.#hash = null;\n this.#videoId.set(\"\");\n return;\n }\n const { videoId, hash } = resolveVimeoVideoId(src.src);\n this.#videoId.set(videoId ?? \"\");\n this.#hash = hash ?? null;\n this.#currentSrc = src;\n }\n #watchVideoId() {\n this.#reset();\n const videoId = this.#videoId();\n if (!videoId) {\n this.src.set(\"\");\n return;\n }\n this.src.set(`${this.getOrigin()}/video/${videoId}`);\n this.#ctx.notify(\"load-start\");\n }\n #watchVideoInfo() {\n const videoId = this.#videoId();\n if (!videoId) return;\n const promise = deferredPromise(), abort = new AbortController();\n this.#videoInfoPromise = promise;\n getVimeoVideoInfo(videoId, abort, this.#hash).then((info) => {\n promise.resolve(info);\n }).catch((e) => {\n promise.reject();\n });\n return () => {\n promise.reject();\n abort.abort();\n };\n }\n #watchPro() {\n const isPro = this.#pro(), { $state, qualities } = this.#ctx;\n $state.canSetPlaybackRate.set(isPro);\n qualities[ListSymbol.setReadonly](!isPro);\n if (isPro) {\n return listenEvent(qualities, \"change\", () => {\n if (qualities.auto) return;\n const id = qualities.selected?.id;\n if (id) this.#remote(\"setQuality\", id);\n });\n }\n }\n getOrigin() {\n return \"https://player.vimeo.com\";\n }\n buildParams() {\n const { keyDisabled } = this.#ctx.$props, { playsInline, nativeControls } = this.#ctx.$state, showControls = nativeControls();\n return {\n title: this.title,\n byline: this.byline,\n color: this.color,\n portrait: this.portrait,\n controls: showControls,\n h: this.hash,\n keyboard: showControls && !keyDisabled(),\n transparent: true,\n playsinline: playsInline(),\n dnt: !this.cookies\n };\n }\n #onAnimationFrame() {\n this.#remote(\"getCurrentTime\");\n }\n // Embed will sometimes dispatch 0 at end of playback.\n #preventTimeUpdates = false;\n #onTimeUpdate(time, trigger) {\n if (this.#preventTimeUpdates && time === 0) return;\n const { realCurrentTime, paused, bufferedEnd, seekableEnd, live } = this.#ctx.$state;\n if (realCurrentTime() === time) return;\n const prevTime = realCurrentTime();\n this.#ctx.notify(\"time-change\", time, trigger);\n if (Math.abs(prevTime - time) > 1.5) {\n this.#ctx.notify(\"seeking\", time, trigger);\n if (!paused() && bufferedEnd() < time) {\n this.#ctx.notify(\"waiting\", void 0, trigger);\n }\n }\n if (!live() && seekableEnd() - time < 0.01) {\n this.#ctx.notify(\"end\", void 0, trigger);\n this.#preventTimeUpdates = true;\n setTimeout(() => {\n this.#preventTimeUpdates = false;\n }, 500);\n }\n }\n #onSeeked(time, trigger) {\n this.#ctx.notify(\"seeked\", time, trigger);\n }\n #onLoaded(trigger) {\n const videoId = this.#videoId();\n this.#videoInfoPromise?.promise.then((info) => {\n if (!info) return;\n const { title, poster, duration, pro } = info;\n this.#pro.set(pro);\n this.#ctx.notify(\"title-change\", title, trigger);\n this.#ctx.notify(\"poster-change\", poster, trigger);\n this.#ctx.notify(\"duration-change\", duration, trigger);\n this.#onReady(duration, trigger);\n }).catch(() => {\n if (videoId !== this.#videoId()) return;\n this.#remote(\"getVideoTitle\");\n this.#remote(\"getDuration\");\n });\n }\n #onReady(duration, trigger) {\n const { nativeControls } = this.#ctx.$state, showEmbedControls = nativeControls();\n this.#seekableRange = new TimeRange(0, duration);\n const detail = {\n buffered: new TimeRange(0, 0),\n seekable: this.#seekableRange,\n duration\n };\n this.#ctx.delegate.ready(detail, trigger);\n if (!showEmbedControls) {\n this.#remote(\"_hideOverlay\");\n }\n this.#remote(\"getQualities\");\n this.#remote(\"getChapters\");\n }\n #onMethod(method, data, trigger) {\n switch (method) {\n case \"getVideoTitle\":\n const videoTitle = data;\n this.#ctx.notify(\"title-change\", videoTitle, trigger);\n break;\n case \"getDuration\":\n const duration = data;\n if (!this.#ctx.$state.canPlay()) {\n this.#onReady(duration, trigger);\n } else {\n this.#ctx.notify(\"duration-change\", duration, trigger);\n }\n break;\n case \"getCurrentTime\":\n this.#onTimeUpdate(data, trigger);\n break;\n case \"getBuffered\":\n if (isArray(data) && data.length) {\n this.#onLoadProgress(data[data.length - 1][1], trigger);\n }\n break;\n case \"setMuted\":\n this.#onVolumeChange(peek(this.#ctx.$state.volume), data, trigger);\n break;\n // case 'getTextTracks':\n // this.#onTextTracksChange(data as VimeoTextTrack[], trigger);\n // break;\n case \"getChapters\":\n this.#onChaptersChange(data);\n break;\n case \"getQualities\":\n this.#onQualitiesChange(data, trigger);\n break;\n }\n this.#getPromise(method)?.resolve();\n }\n #attachListeners() {\n for (const type of trackedVimeoEvents) {\n this.#remote(\"addEventListener\", type);\n }\n }\n #onPause(trigger) {\n this.#timeRAF.stop();\n this.#ctx.notify(\"pause\", void 0, trigger);\n }\n #onPlay(trigger) {\n this.#timeRAF.start();\n this.#ctx.notify(\"play\", void 0, trigger);\n }\n #onPlayProgress(trigger) {\n const { paused } = this.#ctx.$state;\n if (!paused() && !this.#preventTimeUpdates) {\n this.#ctx.notify(\"playing\", void 0, trigger);\n }\n }\n #onLoadProgress(buffered, trigger) {\n const detail = {\n buffered: new TimeRange(0, buffered),\n seekable: this.#seekableRange\n };\n this.#ctx.notify(\"progress\", detail, trigger);\n }\n #onBufferStart(trigger) {\n this.#ctx.notify(\"waiting\", void 0, trigger);\n }\n #onBufferEnd(trigger) {\n const { paused } = this.#ctx.$state;\n if (!paused()) this.#ctx.notify(\"playing\", void 0, trigger);\n }\n #onWaiting(trigger) {\n const { paused } = this.#ctx.$state;\n if (paused()) {\n this.#ctx.notify(\"play\", void 0, trigger);\n }\n this.#ctx.notify(\"waiting\", void 0, trigger);\n }\n #onVolumeChange(volume, muted, trigger) {\n const detail = { volume, muted };\n this.#ctx.notify(\"volume-change\", detail, trigger);\n }\n // #onTextTrackChange(track: VimeoTextTrack, trigger: Event) {\n // const textTrack = this.#ctx.textTracks.toArray().find((t) => t.language === track.language);\n // if (textTrack) textTrack.mode = track.mode;\n // }\n // #onTextTracksChange(tracks: VimeoTextTrack[], trigger: Event) {\n // for (const init of tracks) {\n // const textTrack = new TextTrack({\n // ...init,\n // label: init.label.replace('auto-generated', 'auto'),\n // });\n // textTrack[TextTrackSymbol.readyState] = 2;\n // this.#ctx.textTracks.add(textTrack, trigger);\n // textTrack.setMode(init.mode, trigger);\n // }\n // }\n // #onCueChange(cue: VimeoTextCue, trigger: Event) {\n // const { textTracks, $state } = this.#ctx,\n // { currentTime } = $state,\n // track = textTracks.selected;\n // if (this.#currentCue) track?.removeCue(this.#currentCue, trigger);\n // this.#currentCue = new window.VTTCue(currentTime(), Number.MAX_SAFE_INTEGER, cue.text);\n // track?.addCue(this.#currentCue, trigger);\n // }\n #onChaptersChange(chapters) {\n this.#removeChapters();\n if (!chapters.length) return;\n const track = new TextTrack({\n kind: \"chapters\",\n default: true\n }), { seekableEnd } = this.#ctx.$state;\n for (let i = 0; i < chapters.length; i++) {\n const chapter = chapters[i], nextChapter = chapters[i + 1];\n track.addCue(\n new window.VTTCue(\n chapter.startTime,\n nextChapter?.startTime ?? seekableEnd(),\n chapter.title\n )\n );\n }\n this.#chaptersTrack = track;\n this.#ctx.textTracks.add(track);\n }\n #removeChapters() {\n if (!this.#chaptersTrack) return;\n this.#ctx.textTracks.remove(this.#chaptersTrack);\n this.#chaptersTrack = null;\n }\n #onQualitiesChange(qualities, trigger) {\n this.#ctx.qualities[QualitySymbol.enableAuto] = qualities.some((q) => q.id === \"auto\") ? () => this.#remote(\"setQuality\", \"auto\") : void 0;\n for (const quality of qualities) {\n if (quality.id === \"auto\") continue;\n const height = +quality.id.slice(0, -1);\n if (isNaN(height)) continue;\n this.#ctx.qualities[ListSymbol.add](\n {\n id: quality.id,\n width: height * (16 / 9),\n height,\n codec: \"avc1,h.264\",\n bitrate: -1\n },\n trigger\n );\n }\n this.#onQualityChange(\n qualities.find((q) => q.active),\n trigger\n );\n }\n #onQualityChange({ id } = {}, trigger) {\n if (!id) return;\n const isAuto = id === \"auto\", newQuality = this.#ctx.qualities.getById(id);\n if (isAuto) {\n this.#ctx.qualities[QualitySymbol.setAuto](isAuto, trigger);\n this.#ctx.qualities[ListSymbol.select](void 0, true, trigger);\n } else {\n this.#ctx.qualities[ListSymbol.select](newQuality ?? void 0, true, trigger);\n }\n }\n #onEvent(event, payload, trigger) {\n switch (event) {\n case \"ready\":\n this.#attachListeners();\n break;\n case \"loaded\":\n this.#onLoaded(trigger);\n break;\n case \"play\":\n this.#onPlay(trigger);\n break;\n case \"playProgress\":\n this.#onPlayProgress(trigger);\n break;\n case \"pause\":\n this.#onPause(trigger);\n break;\n case \"loadProgress\":\n this.#onLoadProgress(payload.seconds, trigger);\n break;\n case \"waiting\":\n this.#onWaiting(trigger);\n break;\n case \"bufferstart\":\n this.#onBufferStart(trigger);\n break;\n case \"bufferend\":\n this.#onBufferEnd(trigger);\n break;\n case \"volumechange\":\n this.#onVolumeChange(payload.volume, peek(this.#ctx.$state.muted), trigger);\n break;\n case \"durationchange\":\n this.#seekableRange = new TimeRange(0, payload.duration);\n this.#ctx.notify(\"duration-change\", payload.duration, trigger);\n break;\n case \"playbackratechange\":\n this.#ctx.notify(\"rate-change\", payload.playbackRate, trigger);\n break;\n case \"qualitychange\":\n this.#onQualityChange(payload, trigger);\n break;\n case \"fullscreenchange\":\n this.#fullscreenActive = payload.fullscreen;\n this.#ctx.notify(\"fullscreen-change\", payload.fullscreen, trigger);\n break;\n case \"enterpictureinpicture\":\n this.#ctx.notify(\"picture-in-picture-change\", true, trigger);\n break;\n case \"leavepictureinpicture\":\n this.#ctx.notify(\"picture-in-picture-change\", false, trigger);\n break;\n case \"ended\":\n this.#ctx.notify(\"end\", void 0, trigger);\n break;\n case \"error\":\n this.#onError(payload, trigger);\n break;\n case \"seek\":\n case \"seeked\":\n this.#onSeeked(payload.seconds, trigger);\n break;\n }\n }\n #onError(error, trigger) {\n const { message, method } = error;\n if (method === \"setPlaybackRate\") {\n this.#pro.set(false);\n }\n if (method) {\n this.#getPromise(method)?.reject(message);\n }\n }\n onMessage(message, event) {\n if (message.event) {\n this.#onEvent(message.event, message.data, event);\n } else if (message.method) {\n this.#onMethod(message.method, message.value, event);\n }\n }\n onLoad() {\n }\n async #remote(command, arg) {\n let promise = deferredPromise(), promises = this.#promises.get(command);\n if (!promises) this.#promises.set(command, promises = []);\n promises.push(promise);\n this.postMessage({\n method: command,\n value: arg\n });\n return promise.promise;\n }\n #reset() {\n this.#timeRAF.stop();\n this.#seekableRange = new TimeRange(0, 0);\n this.#videoInfoPromise = null;\n this.#currentCue = null;\n this.#pro.set(false);\n this.#removeChapters();\n }\n #getPromise(command) {\n return this.#promises.get(command)?.shift();\n }\n}\n\nexport { VimeoProvider };\n","\"use client\"\n\nconst videoIdRE = /(?:youtu\\.be|youtube|youtube\\.com|youtube-nocookie\\.com)(?:\\/shorts)?\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=|)((?:\\w|-){11})/;\nconst posterCache = /* @__PURE__ */ new Map();\nconst pendingFetch = /* @__PURE__ */ new Map();\nfunction resolveYouTubeVideoId(src) {\n return src.match(videoIdRE)?.[1];\n}\nasync function findYouTubePoster(videoId, abort) {\n if (posterCache.has(videoId)) return posterCache.get(videoId);\n if (pendingFetch.has(videoId)) return pendingFetch.get(videoId);\n const pending = new Promise(async (resolve) => {\n const sizes = [\"maxresdefault\", \"sddefault\", \"hqdefault\"];\n for (const size of sizes) {\n for (const webp of [true, false]) {\n const url = resolveYouTubePosterURL(videoId, size, webp), response = await fetch(url, {\n mode: \"no-cors\",\n signal: abort.signal\n });\n if (response.status < 400) {\n posterCache.set(videoId, url);\n resolve(url);\n return;\n }\n }\n }\n }).catch(() => \"\").finally(() => pendingFetch.delete(videoId));\n pendingFetch.set(videoId, pending);\n return pending;\n}\nfunction resolveYouTubePosterURL(videoId, size, webp) {\n const type = webp ? \"webp\" : \"jpg\";\n return `https://i.ytimg.com/${webp ? \"vi_webp\" : \"vi\"}/${videoId}/${size}.${type}`;\n}\n\nexport { findYouTubePoster, resolveYouTubeVideoId };\n","\"use client\"\n\nimport { createScope, signal, effect, isString, deferredPromise, isObject, isNumber, isBoolean } from './vidstack-CZgUA94N.js';\nimport { preconnect, TimeRange } from './vidstack-D5Pzx_k5.js';\nimport { EmbedProvider } from './vidstack-FldwQc2Q.js';\nimport { resolveYouTubeVideoId } from './vidstack-Dm1xEU9Q.js';\nimport 'react';\nimport '@floating-ui/dom';\n\nconst YouTubePlayerState = {\n Ended: 0,\n Playing: 1,\n Paused: 2,\n Buffering: 3,\n Cued: 5\n};\n\nclass YouTubeProvider extends EmbedProvider {\n $$PROVIDER_TYPE = \"YOUTUBE\";\n scope = createScope();\n #ctx;\n #videoId = signal(\"\");\n #state = -1;\n #currentSrc = null;\n #seekingTimer = -1;\n #invalidPlay = false;\n #promises = /* @__PURE__ */ new Map();\n constructor(iframe, ctx) {\n super(iframe);\n this.#ctx = ctx;\n }\n /**\n * Sets the player's interface language. The parameter value is an ISO 639-1 two-letter\n * language code or a fully specified locale. For example, fr and fr-ca are both valid values.\n * Other language input codes, such as IETF language tags (BCP 47) might also be handled properly.\n *\n * The interface language is used for tooltips in the player and also affects the default caption\n * track. Note that YouTube might select a different caption track language for a particular\n * user based on the user's individual language preferences and the availability of caption tracks.\n *\n * @defaultValue 'en'\n */\n language = \"en\";\n color = \"red\";\n /**\n * Whether cookies should be enabled on the embed. This is turned off by default to be\n * GDPR-compliant.\n *\n * @defaultValue `false`\n */\n cookies = false;\n get currentSrc() {\n return this.#currentSrc;\n }\n get type() {\n return \"youtube\";\n }\n get videoId() {\n return this.#videoId();\n }\n preconnect() {\n preconnect(this.getOrigin());\n }\n setup() {\n super.setup();\n effect(this.#watchVideoId.bind(this));\n this.#ctx.notify(\"provider-setup\", this);\n }\n destroy() {\n this.#reset();\n const message = \"provider destroyed\";\n for (const promises of this.#promises.values()) {\n for (const { reject } of promises) reject(message);\n }\n this.#promises.clear();\n }\n async play() {\n return this.#remote(\"playVideo\");\n }\n #playFail(message) {\n this.#getPromise(\"playVideo\")?.reject(message);\n }\n async pause() {\n return this.#remote(\"pauseVideo\");\n }\n #pauseFail(message) {\n this.#getPromise(\"pauseVideo\")?.reject(message);\n }\n setMuted(muted) {\n if (muted) this.#remote(\"mute\");\n else this.#remote(\"unMute\");\n }\n setCurrentTime(time) {\n this.#remote(\"seekTo\", time);\n this.#ctx.notify(\"seeking\", time);\n }\n setVolume(volume) {\n this.#remote(\"setVolume\", volume * 100);\n }\n setPlaybackRate(rate) {\n this.#remote(\"setPlaybackRate\", rate);\n }\n async loadSource(src) {\n if (!isString(src.src)) {\n this.#currentSrc = null;\n this.#videoId.set(\"\");\n return;\n }\n const videoId = resolveYouTubeVideoId(src.src);\n this.#videoId.set(videoId ?? \"\");\n this.#currentSrc = src;\n }\n getOrigin() {\n return !this.cookies ? \"https://www.youtube-nocookie.com\" : \"https://www.youtube.com\";\n }\n #watchVideoId() {\n this.#reset();\n const videoId = this.#videoId();\n if (!videoId) {\n this.src.set(\"\");\n return;\n }\n this.src.set(`${this.getOrigin()}/embed/${videoId}`);\n this.#ctx.notify(\"load-start\");\n }\n buildParams() {\n const { keyDisabled } = this.#ctx.$props, { muted, playsInline, nativeControls } = this.#ctx.$state, showControls = nativeControls();\n return {\n rel: 0,\n autoplay: 0,\n cc_lang_pref: this.language,\n cc_load_policy: showControls ? 1 : void 0,\n color: this.color,\n controls: showControls ? 1 : 0,\n disablekb: !showControls || keyDisabled() ? 1 : 0,\n enablejsapi: 1,\n fs: 1,\n hl: this.language,\n iv_load_policy: showControls ? 1 : 3,\n mute: muted() ? 1 : 0,\n playsinline: playsInline() ? 1 : 0\n };\n }\n #remote(command, arg) {\n let promise = deferredPromise(), promises = this.#promises.get(command);\n if (!promises) this.#promises.set(command, promises = []);\n promises.push(promise);\n this.postMessage({\n event: \"command\",\n func: command,\n args: arg ? [arg] : void 0\n });\n return promise.promise;\n }\n onLoad() {\n window.setTimeout(() => this.postMessage({ event: \"listening\" }), 100);\n }\n #onReady(trigger) {\n this.#ctx.notify(\"loaded-metadata\");\n this.#ctx.notify(\"loaded-data\");\n this.#ctx.delegate.ready(void 0, trigger);\n }\n #onPause(trigger) {\n this.#getPromise(\"pauseVideo\")?.resolve();\n this.#ctx.notify(\"pause\", void 0, trigger);\n }\n #onTimeUpdate(time, trigger) {\n const { duration, realCurrentTime } = this.#ctx.$state, hasEnded = this.#state === YouTubePlayerState.Ended, boundTime = hasEnded ? duration() : time;\n this.#ctx.notify(\"time-change\", boundTime, trigger);\n if (!hasEnded && Math.abs(boundTime - realCurrentTime()) > 1) {\n this.#ctx.notify(\"seeking\", boundTime, trigger);\n }\n }\n #onProgress(buffered, seekable, trigger) {\n const detail = {\n buffered: new TimeRange(0, buffered),\n seekable\n };\n this.#ctx.notify(\"progress\", detail, trigger);\n const { seeking, realCurrentTime } = this.#ctx.$state;\n if (seeking() && buffered > realCurrentTime()) {\n this.#onSeeked(trigger);\n }\n }\n #onSeeked(trigger) {\n const { paused, realCurrentTime } = this.#ctx.$state;\n window.clearTimeout(this.#seekingTimer);\n this.#seekingTimer = window.setTimeout(\n () => {\n this.#ctx.notify(\"seeked\", realCurrentTime(), trigger);\n this.#seekingTimer = -1;\n },\n paused() ? 100 : 0\n );\n }\n #onEnded(trigger) {\n const { seeking } = this.#ctx.$state;\n if (seeking()) this.#onSeeked(trigger);\n this.#ctx.notify(\"pause\", void 0, trigger);\n this.#ctx.notify(\"end\", void 0, trigger);\n }\n #onStateChange(state, trigger) {\n const { paused, seeking } = this.#ctx.$state, isPlaying = state === YouTubePlayerState.Playing, isBuffering = state === YouTubePlayerState.Buffering, isPendingPlay = this.#isPending(\"playVideo\"), isPlay = paused() && (isBuffering || isPlaying);\n if (isBuffering) this.#ctx.notify(\"waiting\", void 0, trigger);\n if (seeking() && isPlaying) {\n this.#onSeeked(trigger);\n }\n if (this.#invalidPlay && isPlaying) {\n this.pause();\n this.#invalidPlay = false;\n this.setMuted(this.#ctx.$state.muted());\n return;\n }\n if (!isPendingPlay && isPlay) {\n this.#invalidPlay = true;\n this.setMuted(true);\n return;\n }\n if (isPlay) {\n this.#getPromise(\"playVideo\")?.resolve();\n this.#ctx.notify(\"play\", void 0, trigger);\n }\n switch (state) {\n case YouTubePlayerState.Cued:\n this.#onReady(trigger);\n break;\n case YouTubePlayerState.Playing:\n this.#ctx.notify(\"playing\", void 0, trigger);\n break;\n case YouTubePlayerState.Paused:\n this.#onPause(trigger);\n break;\n case YouTubePlayerState.Ended:\n this.#onEnded(trigger);\n break;\n }\n this.#state = state;\n }\n onMessage({ info }, event) {\n if (!info) return;\n const { title, intrinsicDuration, playbackRate } = this.#ctx.$state;\n if (isObject(info.videoData) && info.videoData.title !== title()) {\n this.#ctx.notify(\"title-change\", info.videoData.title, event);\n }\n if (isNumber(info.duration) && info.duration !== intrinsicDuration()) {\n if (isNumber(info.videoLoadedFraction)) {\n const buffered = info.progressState?.loaded ?? info.videoLoadedFraction * info.duration, seekable = new TimeRange(0, info.duration);\n this.#onProgress(buffered, seekable, event);\n }\n this.#ctx.notify(\"duration-change\", info.duration, event);\n }\n if (isNumber(info.playbackRate) && info.playbackRate !== playbackRate()) {\n this.#ctx.notify(\"rate-change\", info.playbackRate, event);\n }\n if (info.progressState) {\n const { current, seekableStart, seekableEnd, loaded, duration } = info.progressState;\n this.#onTimeUpdate(current, event);\n this.#onProgress(loaded, new TimeRange(seekableStart, seekableEnd), event);\n if (duration !== intrinsicDuration()) {\n this.#ctx.notify(\"duration-change\", duration, event);\n }\n }\n if (isNumber(info.volume) && isBoolean(info.muted) && !this.#invalidPlay) {\n const detail = {\n muted: info.muted,\n volume: info.volume / 100\n };\n this.#ctx.notify(\"volume-change\", detail, event);\n }\n if (isNumber(info.playerState) && info.playerState !== this.#state) {\n this.#onStateChange(info.playerState, event);\n }\n }\n #reset() {\n this.#state = -1;\n this.#seekingTimer = -1;\n this.#invalidPlay = false;\n }\n #getPromise(command) {\n return this.#promises.get(command)?.shift();\n }\n #isPending(command) {\n return Boolean(this.#promises.get(command)?.length);\n }\n}\n\nexport { YouTubeProvider };\n","\"use client\"\n\nimport { IS_CHROME, canGoogleCastSrc, IS_IOS, IS_SERVER, loadScript } from './vidstack-D5Pzx_k5.js';\nimport { listenEvent, peek } from './vidstack-CZgUA94N.js';\n\nfunction getCastFrameworkURL() {\n return \"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1\";\n}\nfunction hasLoadedCastFramework() {\n return !!window.cast?.framework;\n}\nfunction isCastAvailable() {\n return !!window.chrome?.cast?.isAvailable;\n}\nfunction isCastConnected() {\n return getCastContext().getCastState() === cast.framework.CastState.CONNECTED;\n}\nfunction getCastContext() {\n return window.cast.framework.CastContext.getInstance();\n}\nfunction getCastSession() {\n return getCastContext().getCurrentSession();\n}\nfunction getCastSessionMedia() {\n return getCastSession()?.getSessionObj().media[0];\n}\nfunction hasActiveCastSession(src) {\n const contentId = getCastSessionMedia()?.media.contentId;\n return contentId === src?.src;\n}\nfunction getDefaultCastOptions() {\n return {\n language: \"en-US\",\n autoJoinPolicy: chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED,\n receiverApplicationId: chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,\n resumeSavedSession: true,\n androidReceiverCompatible: true\n };\n}\nfunction getCastErrorMessage(code) {\n const defaultMessage = `Google Cast Error Code: ${code}`;\n return defaultMessage;\n}\nfunction listenCastContextEvent(type, handler) {\n return listenEvent(getCastContext(), type, handler);\n}\n\nclass GoogleCastLoader {\n name = \"google-cast\";\n target;\n #player;\n /**\n * @see {@link https://developers.google.com/cast/docs/reference/web_sender/cast.framework.CastContext}\n */\n get cast() {\n return getCastContext();\n }\n mediaType() {\n return \"video\";\n }\n canPlay(src) {\n return IS_CHROME && !IS_IOS && canGoogleCastSrc(src);\n }\n async prompt(ctx) {\n let loadEvent, openEvent, errorEvent;\n try {\n loadEvent = await this.#loadCastFramework(ctx);\n if (!this.#player) {\n this.#player = new cast.framework.RemotePlayer();\n new cast.framework.RemotePlayerController(this.#player);\n }\n openEvent = ctx.player.createEvent(\"google-cast-prompt-open\", {\n trigger: loadEvent\n });\n ctx.player.dispatchEvent(openEvent);\n this.#notifyRemoteStateChange(ctx, \"connecting\", openEvent);\n await this.#showPrompt(peek(ctx.$props.googleCast));\n ctx.$state.remotePlaybackInfo.set({\n deviceName: getCastSession()?.getCastDevice().friendlyName\n });\n if (isCastConnected()) this.#notifyRemoteStateChange(ctx, \"connected\", openEvent);\n } catch (code) {\n const error = code instanceof Error ? code : this.#createError(\n (code + \"\").toUpperCase(),\n \"Prompt failed.\"\n );\n errorEvent = ctx.player.createEvent(\"google-cast-prompt-error\", {\n detail: error,\n trigger: openEvent ?? loadEvent,\n cancelable: true\n });\n ctx.player.dispatch(errorEvent);\n this.#notifyRemoteStateChange(\n ctx,\n isCastConnected() ? \"connected\" : \"disconnected\",\n errorEvent\n );\n throw error;\n } finally {\n ctx.player.dispatch(\"google-cast-prompt-close\", {\n trigger: errorEvent ?? openEvent ?? loadEvent\n });\n }\n }\n async load(ctx) {\n if (IS_SERVER) {\n throw Error(\"[vidstack] can not load google cast provider server-side\");\n }\n if (!this.#player) {\n throw Error(\"[vidstack] google cast player was not initialized\");\n }\n return new (await import('./vidstack-BeT6vBOi.js')).GoogleCastProvider(this.#player, ctx);\n }\n async #loadCastFramework(ctx) {\n if (hasLoadedCastFramework()) return;\n const loadStartEvent = ctx.player.createEvent(\"google-cast-load-start\");\n ctx.player.dispatch(loadStartEvent);\n await loadScript(getCastFrameworkURL());\n await customElements.whenDefined(\"google-cast-launcher\");\n const loadedEvent = ctx.player.createEvent(\"google-cast-loaded\", { trigger: loadStartEvent });\n ctx.player.dispatch(loadedEvent);\n if (!isCastAvailable()) {\n throw this.#createError(\"CAST_NOT_AVAILABLE\", \"Google Cast not available on this platform.\");\n }\n return loadedEvent;\n }\n async #showPrompt(options) {\n this.#setOptions(options);\n const errorCode = await this.cast.requestSession();\n if (errorCode) {\n throw this.#createError(\n errorCode.toUpperCase(),\n getCastErrorMessage(errorCode)\n );\n }\n }\n #setOptions(options) {\n this.cast?.setOptions({\n ...getDefaultCastOptions(),\n ...options\n });\n }\n #notifyRemoteStateChange(ctx, state, trigger) {\n const detail = { type: \"google-cast\", state };\n ctx.notify(\"remote-playback-change\", detail, trigger);\n }\n #createError(code, message) {\n const error = Error(message);\n error.code = code;\n return error;\n }\n}\n\nvar loader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n GoogleCastLoader: GoogleCastLoader\n});\n\nexport { getCastContext, getCastErrorMessage, getCastSession, getCastSessionMedia, hasActiveCastSession, listenCastContextEvent, loader };\n","import { V as VTTParser, a as VTTBlock, b as VTTCue } from './index.js';\n\nconst MILLISECOND_SEP_RE = /,/g, TIMESTAMP_SEP = \"-->\";\nclass SRTParser extends VTTParser {\n parse(line, lineCount) {\n if (line === \"\") {\n if (this.c) {\n this.l.push(this.c);\n this.h.onCue?.(this.c);\n this.c = null;\n }\n this.e = VTTBlock.None;\n } else if (this.e === VTTBlock.Cue) {\n this.c.text += (this.c.text ? \"\\n\" : \"\") + line;\n } else if (line.includes(TIMESTAMP_SEP)) {\n const result = this.q(line, lineCount);\n if (result) {\n this.c = new VTTCue(result[0], result[1], result[2].join(\" \"));\n this.c.id = this.n;\n this.e = VTTBlock.Cue;\n }\n }\n this.n = line;\n }\n q(line, lineCount) {\n return super.q(line.replace(MILLISECOND_SEP_RE, \".\"), lineCount);\n }\n}\nfunction createSRTParser() {\n return new SRTParser();\n}\n\nexport { SRTParser, createSRTParser as default };\n","import { b as VTTCue, p as parseVTTTimestamp } from './index.js';\n\nconst FORMAT_START_RE = /^Format:[\\s\\t]*/, STYLE_START_RE = /^Style:[\\s\\t]*/, DIALOGUE_START_RE = /^Dialogue:[\\s\\t]*/, FORMAT_SPLIT_RE = /[\\s\\t]*,[\\s\\t]*/, STYLE_FUNCTION_RE = /\\{[^}]+\\}/g, NEW_LINE_RE = /\\\\N/g, STYLES_SECTION_START_RE = /^\\[(.*)[\\s\\t]?Styles\\]$/, EVENTS_SECTION_START_RE = /^\\[(.*)[\\s\\t]?Events\\]$/;\nclass SSAParser {\n h;\n O = 0;\n c = null;\n l = [];\n m = [];\n N = null;\n f;\n P = {};\n async init(init) {\n this.h = init;\n if (init.errors)\n this.f = (await import('./errors.js')).ParseErrorBuilder;\n }\n parse(line, lineCount) {\n if (this.O) {\n switch (this.O) {\n case 1:\n if (line === \"\") {\n this.O = 0;\n } else if (STYLE_START_RE.test(line)) {\n if (this.N) {\n const styles = line.replace(STYLE_START_RE, \"\").split(FORMAT_SPLIT_RE);\n this.S(styles);\n } else {\n this.g(this.f?.T(\"Style\", lineCount));\n }\n } else if (FORMAT_START_RE.test(line)) {\n this.N = line.replace(FORMAT_START_RE, \"\").split(FORMAT_SPLIT_RE);\n } else if (EVENTS_SECTION_START_RE.test(line)) {\n this.N = null;\n this.O = 2;\n }\n break;\n case 2:\n if (line === \"\") {\n this.Q();\n } else if (DIALOGUE_START_RE.test(line)) {\n this.Q();\n if (this.N) {\n const dialogue = line.replace(DIALOGUE_START_RE, \"\").split(FORMAT_SPLIT_RE), cue = this.U(dialogue, lineCount);\n if (cue)\n this.c = cue;\n } else {\n this.g(this.f?.T(\"Dialogue\", lineCount));\n }\n } else if (this.c) {\n this.c.text += \"\\n\" + line.replace(STYLE_FUNCTION_RE, \"\").replace(NEW_LINE_RE, \"\\n\");\n } else if (FORMAT_START_RE.test(line)) {\n this.N = line.replace(FORMAT_START_RE, \"\").split(FORMAT_SPLIT_RE);\n } else if (STYLES_SECTION_START_RE.test(line)) {\n this.N = null;\n this.O = 1;\n } else if (EVENTS_SECTION_START_RE.test(line)) {\n this.N = null;\n }\n }\n } else if (line === \"\") ; else if (STYLES_SECTION_START_RE.test(line)) {\n this.N = null;\n this.O = 1;\n } else if (EVENTS_SECTION_START_RE.test(line)) {\n this.N = null;\n this.O = 2;\n }\n }\n done() {\n return {\n metadata: {},\n cues: this.l,\n regions: [],\n errors: this.m\n };\n }\n Q() {\n if (!this.c)\n return;\n this.l.push(this.c);\n this.h.onCue?.(this.c);\n this.c = null;\n }\n S(values) {\n let name = \"Default\", styles = {}, outlineX, align = \"center\", vertical = \"bottom\", marginV, outlineY = 1.2, outlineColor, bgColor, borderStyle = 3, transform = [];\n for (let i = 0; i < this.N.length; i++) {\n const field = this.N[i], value = values[i];\n switch (field) {\n case \"Name\":\n name = value;\n break;\n case \"Fontname\":\n styles[\"font-family\"] = value;\n break;\n case \"Fontsize\":\n styles[\"font-size\"] = `calc(${value} / var(--overlay-height))`;\n break;\n case \"PrimaryColour\":\n const color = parseColor(value);\n if (color)\n styles[\"--cue-color\"] = color;\n break;\n case \"BorderStyle\":\n borderStyle = parseInt(value, 10);\n break;\n case \"BackColour\":\n bgColor = parseColor(value);\n break;\n case \"OutlineColour\":\n const _outlineColor = parseColor(value);\n if (_outlineColor)\n outlineColor = _outlineColor;\n break;\n case \"Bold\":\n if (parseInt(value))\n styles[\"font-weight\"] = \"bold\";\n break;\n case \"Italic\":\n if (parseInt(value))\n styles[\"font-style\"] = \"italic\";\n break;\n case \"Underline\":\n if (parseInt(value))\n styles[\"text-decoration\"] = \"underline\";\n break;\n case \"StrikeOut\":\n if (parseInt(value))\n styles[\"text-decoration\"] = \"line-through\";\n break;\n case \"Spacing\":\n styles[\"letter-spacing\"] = value + \"px\";\n break;\n case \"AlphaLevel\":\n styles[\"opacity\"] = parseFloat(value);\n break;\n case \"ScaleX\":\n transform.push(`scaleX(${parseFloat(value) / 100})`);\n break;\n case \"ScaleY\":\n transform.push(`scaleY(${parseFloat(value) / 100})`);\n break;\n case \"Angle\":\n transform.push(`rotate(${value}deg)`);\n break;\n case \"Shadow\":\n outlineY = parseInt(value, 10) * 1.2;\n break;\n case \"MarginL\":\n styles[\"--cue-width\"] = \"auto\";\n styles[\"--cue-left\"] = parseFloat(value) + \"px\";\n break;\n case \"MarginR\":\n styles[\"--cue-width\"] = \"auto\";\n styles[\"--cue-right\"] = parseFloat(value) + \"px\";\n break;\n case \"MarginV\":\n marginV = parseFloat(value);\n break;\n case \"Outline\":\n outlineX = parseInt(value, 10);\n break;\n case \"Alignment\":\n const alignment = parseInt(value, 10);\n if (alignment >= 4)\n vertical = alignment >= 7 ? \"top\" : \"center\";\n switch (alignment % 3) {\n case 1:\n align = \"start\";\n break;\n case 2:\n align = \"center\";\n break;\n case 3:\n align = \"end\";\n break;\n }\n }\n }\n styles.R = vertical;\n styles[\"--cue-white-space\"] = \"normal\";\n styles[\"--cue-line-height\"] = \"normal\";\n styles[\"--cue-text-align\"] = align;\n if (vertical === \"center\") {\n styles[`--cue-top`] = \"50%\";\n transform.push(\"translateY(-50%)\");\n } else {\n styles[`--cue-${vertical}`] = (marginV || 0) + \"px\";\n }\n if (borderStyle === 1) {\n styles[\"--cue-padding-y\"] = \"0\";\n }\n if (borderStyle === 1 || bgColor) {\n styles[\"--cue-bg-color\"] = borderStyle === 1 ? \"none\" : bgColor;\n }\n if (borderStyle === 3 && outlineColor) {\n styles[\"--cue-outline\"] = `${outlineX}px solid ${outlineColor}`;\n }\n if (borderStyle === 1 && typeof outlineX === \"number\") {\n const color = bgColor ?? \"#000\";\n styles[\"--cue-text-shadow\"] = [\n outlineColor && buildTextShadow(outlineX * 1.2, outlineY * 1.2, outlineColor),\n outlineColor ? buildTextShadow(outlineX * (outlineX / 2), outlineY * (outlineX / 2), color) : buildTextShadow(outlineX, outlineY, color)\n ].filter(Boolean).join(\", \");\n }\n if (transform.length)\n styles[\"--cue-transform\"] = transform.join(\" \");\n this.P[name] = styles;\n }\n U(values, lineCount) {\n const fields = this.V(values);\n const timestamp = this.q(fields.Start, fields.End, lineCount);\n if (!timestamp)\n return;\n const cue = new VTTCue(timestamp[0], timestamp[1], \"\"), styles = { ...this.P[fields.Style] || {} }, voice = fields.Name ? `<v ${fields.Name}>` : \"\";\n const vertical = styles.R, marginLeft = fields.MarginL && parseFloat(fields.MarginL), marginRight = fields.MarginR && parseFloat(fields.MarginR), marginV = fields.MarginV && parseFloat(fields.MarginV);\n if (marginLeft) {\n styles[\"--cue-width\"] = \"auto\";\n styles[\"--cue-left\"] = marginLeft + \"px\";\n }\n if (marginRight) {\n styles[\"--cue-width\"] = \"auto\";\n styles[\"--cue-right\"] = marginRight + \"px\";\n }\n if (marginV && vertical !== \"center\") {\n styles[`--cue-${vertical}`] = marginV + \"px\";\n }\n cue.text = voice + values.slice(this.N.length - 1).join(\", \").replace(STYLE_FUNCTION_RE, \"\").replace(NEW_LINE_RE, \"\\n\");\n delete styles.R;\n if (Object.keys(styles).length)\n cue.style = styles;\n return cue;\n }\n V(values) {\n const fields = {};\n for (let i = 0; i < this.N.length; i++) {\n fields[this.N[i]] = values[i];\n }\n return fields;\n }\n q(startTimeText, endTimeText, lineCount) {\n const startTime = parseVTTTimestamp(startTimeText), endTime = parseVTTTimestamp(endTimeText);\n if (startTime !== null && endTime !== null && endTime > startTime) {\n return [startTime, endTime];\n } else {\n if (startTime === null) {\n this.g(this.f?.s(startTimeText, lineCount));\n }\n if (endTime === null) {\n this.g(this.f?.t(endTimeText, lineCount));\n }\n if (startTime != null && endTime !== null && endTime > startTime) {\n this.g(this.f?.u(startTime, endTime, lineCount));\n }\n }\n }\n g(error) {\n if (!error)\n return;\n this.m.push(error);\n if (this.h.strict) {\n this.h.cancel();\n throw error;\n } else {\n this.h.onError?.(error);\n }\n }\n}\nfunction parseColor(color) {\n const abgr = parseInt(color.replace(\"&H\", \"\"), 16);\n if (abgr >= 0) {\n const a = abgr >> 24 & 255 ^ 255;\n const alpha = a / 255;\n const b = abgr >> 16 & 255;\n const g = abgr >> 8 & 255;\n const r = abgr & 255;\n return \"rgba(\" + [r, g, b, alpha].join(\",\") + \")\";\n }\n return null;\n}\nfunction buildTextShadow(x, y, color) {\n const noOfShadows = Math.ceil(2 * Math.PI * x);\n let textShadow = \"\";\n for (let i = 0; i < noOfShadows; i++) {\n const theta = 2 * Math.PI * i / noOfShadows;\n textShadow += x * Math.cos(theta) + \"px \" + y * Math.sin(theta) + \"px 0 \" + color + (i == noOfShadows - 1 ? \"\" : \",\");\n }\n return textShadow;\n}\nfunction createSSAParser() {\n return new SSAParser();\n}\n\nexport { SSAParser, createSSAParser as default };\n","import { P as ParseError, c as ParseErrorCode } from './index.js';\n\nconst ParseErrorBuilder = {\n r() {\n return new ParseError({\n code: ParseErrorCode.BadSignature,\n reason: \"missing WEBVTT file header\",\n line: 1\n });\n },\n s(startTime, line) {\n return new ParseError({\n code: ParseErrorCode.BadTimestamp,\n reason: `cue start timestamp \\`${startTime}\\` is invalid on line ${line}`,\n line\n });\n },\n t(endTime, line) {\n return new ParseError({\n code: ParseErrorCode.BadTimestamp,\n reason: `cue end timestamp \\`${endTime}\\` is invalid on line ${line}`,\n line\n });\n },\n u(startTime, endTime, line) {\n return new ParseError({\n code: ParseErrorCode.BadTimestamp,\n reason: `cue end timestamp \\`${endTime}\\` is greater than start \\`${startTime}\\` on line ${line}`,\n line\n });\n },\n y(name, value, line) {\n return new ParseError({\n code: ParseErrorCode.BadSettingValue,\n reason: `invalid value for cue setting \\`${name}\\` on line ${line} (value: ${value})`,\n line\n });\n },\n x(name, value, line) {\n return new ParseError({\n code: ParseErrorCode.UnknownSetting,\n reason: `unknown cue setting \\`${name}\\` on line ${line} (value: ${value})`,\n line\n });\n },\n w(name, value, line) {\n return new ParseError({\n code: ParseErrorCode.BadSettingValue,\n reason: `invalid value for region setting \\`${name}\\` on line ${line} (value: ${value})`,\n line\n });\n },\n v(name, value, line) {\n return new ParseError({\n code: ParseErrorCode.UnknownSetting,\n reason: `unknown region setting \\`${name}\\` on line ${line} (value: ${value})`,\n line\n });\n },\n // SSA-specific errors\n T(type, line) {\n return new ParseError({\n code: ParseErrorCode.BadFormat,\n reason: `format missing for \\`${type}\\` block on line ${line}`,\n line\n });\n }\n};\n\nexport { ParseErrorBuilder };\n","\"use client\"\n\nimport { listenEvent, effect, untrack, createScope, keysOf, onDispose, DOMEvent, peek } from './vidstack-CZgUA94N.js';\nimport { ListSymbol, TimeRange, RAFLoop } from './vidstack-D5Pzx_k5.js';\nimport { getCastSessionMedia, getCastContext, getCastSession, hasActiveCastSession, listenCastContextEvent, getCastErrorMessage } from './vidstack-CQQ1xKSy.js';\nimport 'react';\nimport '@floating-ui/dom';\n\nclass GoogleCastMediaInfoBuilder {\n #info;\n constructor(src) {\n this.#info = new chrome.cast.media.MediaInfo(src.src, src.type);\n }\n build() {\n return this.#info;\n }\n setStreamType(streamType) {\n if (streamType.includes(\"live\")) {\n this.#info.streamType = chrome.cast.media.StreamType.LIVE;\n } else {\n this.#info.streamType = chrome.cast.media.StreamType.BUFFERED;\n }\n return this;\n }\n setTracks(tracks) {\n this.#info.tracks = tracks.map(this.#buildCastTrack);\n return this;\n }\n setMetadata(title, poster) {\n this.#info.metadata = new chrome.cast.media.GenericMediaMetadata();\n this.#info.metadata.title = title;\n this.#info.metadata.images = [{ url: poster }];\n return this;\n }\n #buildCastTrack(track, trackId) {\n const castTrack = new chrome.cast.media.Track(trackId, chrome.cast.media.TrackType.TEXT);\n castTrack.name = track.label;\n castTrack.trackContentId = track.src;\n castTrack.trackContentType = \"text/vtt\";\n castTrack.language = track.language;\n castTrack.subtype = track.kind.toUpperCase();\n return castTrack;\n }\n}\n\nclass GoogleCastTracksManager {\n #cast;\n #ctx;\n #onNewLocalTracks;\n constructor(cast, ctx, onNewLocalTracks) {\n this.#cast = cast;\n this.#ctx = ctx;\n this.#onNewLocalTracks = onNewLocalTracks;\n }\n setup() {\n const syncRemoteActiveIds = this.syncRemoteActiveIds.bind(this);\n listenEvent(this.#ctx.audioTracks, \"change\", syncRemoteActiveIds);\n listenEvent(this.#ctx.textTracks, \"mode-change\", syncRemoteActiveIds);\n effect(this.#syncLocalTracks.bind(this));\n }\n getLocalTextTracks() {\n return this.#ctx.$state.textTracks().filter((track) => track.src && track.type === \"vtt\");\n }\n #getLocalAudioTracks() {\n return this.#ctx.$state.audioTracks();\n }\n #getRemoteTracks(type) {\n const tracks = this.#cast.mediaInfo?.tracks ?? [];\n return type ? tracks.filter((track) => track.type === type) : tracks;\n }\n #getRemoteActiveIds() {\n const activeIds = [], activeLocalAudioTrack = this.#getLocalAudioTracks().find((track) => track.selected), activeLocalTextTracks = this.getLocalTextTracks().filter((track) => track.mode === \"showing\");\n if (activeLocalAudioTrack) {\n const remoteAudioTracks = this.#getRemoteTracks(chrome.cast.media.TrackType.AUDIO), remoteAudioTrack = this.#findRemoteTrack(remoteAudioTracks, activeLocalAudioTrack);\n if (remoteAudioTrack) activeIds.push(remoteAudioTrack.trackId);\n }\n if (activeLocalTextTracks?.length) {\n const remoteTextTracks = this.#getRemoteTracks(chrome.cast.media.TrackType.TEXT);\n if (remoteTextTracks.length) {\n for (const localTrack of activeLocalTextTracks) {\n const remoteTextTrack = this.#findRemoteTrack(remoteTextTracks, localTrack);\n if (remoteTextTrack) activeIds.push(remoteTextTrack.trackId);\n }\n }\n }\n return activeIds;\n }\n #syncLocalTracks() {\n const localTextTracks = this.getLocalTextTracks();\n if (!this.#cast.isMediaLoaded) return;\n const remoteTextTracks = this.#getRemoteTracks(chrome.cast.media.TrackType.TEXT);\n for (const localTrack of localTextTracks) {\n const hasRemoteTrack = this.#findRemoteTrack(remoteTextTracks, localTrack);\n if (!hasRemoteTrack) {\n untrack(() => this.#onNewLocalTracks?.());\n break;\n }\n }\n }\n syncRemoteTracks(event) {\n if (!this.#cast.isMediaLoaded) return;\n const localAudioTracks = this.#getLocalAudioTracks(), localTextTracks = this.getLocalTextTracks(), remoteAudioTracks = this.#getRemoteTracks(chrome.cast.media.TrackType.AUDIO), remoteTextTracks = this.#getRemoteTracks(chrome.cast.media.TrackType.TEXT);\n for (const remoteAudioTrack of remoteAudioTracks) {\n const hasLocalTrack = this.#findLocalTrack(localAudioTracks, remoteAudioTrack);\n if (hasLocalTrack) continue;\n const localAudioTrack = {\n id: remoteAudioTrack.trackId.toString(),\n label: remoteAudioTrack.name,\n language: remoteAudioTrack.language,\n kind: remoteAudioTrack.subtype ?? \"main\",\n selected: false\n };\n this.#ctx.audioTracks[ListSymbol.add](localAudioTrack, event);\n }\n for (const remoteTextTrack of remoteTextTracks) {\n const hasLocalTrack = this.#findLocalTrack(localTextTracks, remoteTextTrack);\n if (hasLocalTrack) continue;\n const localTextTrack = {\n id: remoteTextTrack.trackId.toString(),\n src: remoteTextTrack.trackContentId,\n label: remoteTextTrack.name,\n language: remoteTextTrack.language,\n kind: remoteTextTrack.subtype.toLowerCase()\n };\n this.#ctx.textTracks.add(localTextTrack, event);\n }\n }\n syncRemoteActiveIds(event) {\n if (!this.#cast.isMediaLoaded) return;\n const activeIds = this.#getRemoteActiveIds(), editRequest = new chrome.cast.media.EditTracksInfoRequest(activeIds);\n this.#editTracksInfo(editRequest).catch((error) => {\n });\n }\n #editTracksInfo(request) {\n const media = getCastSessionMedia();\n return new Promise((resolve, reject) => media?.editTracksInfo(request, resolve, reject));\n }\n #findLocalTrack(localTracks, remoteTrack) {\n return localTracks.find((localTrack) => this.#isMatch(localTrack, remoteTrack));\n }\n #findRemoteTrack(remoteTracks, localTrack) {\n return remoteTracks.find((remoteTrack) => this.#isMatch(localTrack, remoteTrack));\n }\n // Note: we can't rely on id matching because they will differ between local/remote. A local\n // track id might not even exist.\n #isMatch(localTrack, remoteTrack) {\n return remoteTrack.name === localTrack.label && remoteTrack.language === localTrack.language && remoteTrack.subtype.toLowerCase() === localTrack.kind.toLowerCase();\n }\n}\n\nclass GoogleCastProvider {\n $$PROVIDER_TYPE = \"GOOGLE_CAST\";\n scope = createScope();\n #player;\n #ctx;\n #tracks;\n #currentSrc = null;\n #state = \"disconnected\";\n #currentTime = 0;\n #played = 0;\n #seekableRange = new TimeRange(0, 0);\n #timeRAF = new RAFLoop(this.#onAnimationFrame.bind(this));\n #playerEventHandlers;\n #reloadInfo = null;\n #isIdle = false;\n constructor(player, ctx) {\n this.#player = player;\n this.#ctx = ctx;\n this.#tracks = new GoogleCastTracksManager(player, ctx, this.#onNewLocalTracks.bind(this));\n }\n get type() {\n return \"google-cast\";\n }\n get currentSrc() {\n return this.#currentSrc;\n }\n /**\n * The Google Cast remote player.\n *\n * @see {@link https://developers.google.com/cast/docs/reference/web_sender/cast.framework.RemotePlayer}\n */\n get player() {\n return this.#player;\n }\n /**\n * @see {@link https://developers.google.com/cast/docs/reference/web_sender/cast.framework.CastContext}\n */\n get cast() {\n return getCastContext();\n }\n /**\n * @see {@link https://developers.google.com/cast/docs/reference/web_sender/cast.framework.CastSession}\n */\n get session() {\n return getCastSession();\n }\n /**\n * @see {@link https://developers.google.com/cast/docs/reference/web_sender/chrome.cast.media.Media}\n */\n get media() {\n return getCastSessionMedia();\n }\n /**\n * Whether the current Google Cast session belongs to this provider.\n */\n get hasActiveSession() {\n return hasActiveCastSession(this.#currentSrc);\n }\n setup() {\n this.#attachCastContextEventListeners();\n this.#attachCastPlayerEventListeners();\n this.#tracks.setup();\n this.#ctx.notify(\"provider-setup\", this);\n }\n #attachCastContextEventListeners() {\n listenCastContextEvent(\n cast.framework.CastContextEventType.CAST_STATE_CHANGED,\n this.#onCastStateChange.bind(this)\n );\n }\n #attachCastPlayerEventListeners() {\n const Event2 = cast.framework.RemotePlayerEventType, handlers = {\n [Event2.IS_CONNECTED_CHANGED]: this.#onCastStateChange,\n [Event2.IS_MEDIA_LOADED_CHANGED]: this.#onMediaLoadedChange,\n [Event2.CAN_CONTROL_VOLUME_CHANGED]: this.#onCanControlVolumeChange,\n [Event2.CAN_SEEK_CHANGED]: this.#onCanSeekChange,\n [Event2.DURATION_CHANGED]: this.#onDurationChange,\n [Event2.IS_MUTED_CHANGED]: this.#onVolumeChange,\n [Event2.VOLUME_LEVEL_CHANGED]: this.#onVolumeChange,\n [Event2.IS_PAUSED_CHANGED]: this.#onPausedChange,\n [Event2.LIVE_SEEKABLE_RANGE_CHANGED]: this.#onProgress,\n [Event2.PLAYER_STATE_CHANGED]: this.#onPlayerStateChange\n };\n this.#playerEventHandlers = handlers;\n const handler = this.#onRemotePlayerEvent.bind(this);\n for (const type of keysOf(handlers)) {\n this.#player.controller.addEventListener(type, handler);\n }\n onDispose(() => {\n for (const type of keysOf(handlers)) {\n this.#player.controller.removeEventListener(type, handler);\n }\n });\n }\n async play() {\n if (!this.#player.isPaused && !this.#isIdle) return;\n if (this.#isIdle) {\n await this.#reload(false, 0);\n return;\n }\n this.#player.controller?.playOrPause();\n }\n async pause() {\n if (this.#player.isPaused) return;\n this.#player.controller?.playOrPause();\n }\n getMediaStatus(request) {\n return new Promise((resolve, reject) => {\n this.media?.getStatus(request, resolve, reject);\n });\n }\n setMuted(muted) {\n const hasChanged = muted && !this.#player.isMuted || !muted && this.#player.isMuted;\n if (hasChanged) this.#player.controller?.muteOrUnmute();\n }\n setCurrentTime(time) {\n this.#player.currentTime = time;\n this.#ctx.notify(\"seeking\", time);\n this.#player.controller?.seek();\n }\n setVolume(volume) {\n this.#player.volumeLevel = volume;\n this.#player.controller?.setVolumeLevel();\n }\n async loadSource(src) {\n if (this.#reloadInfo?.src !== src) this.#reloadInfo = null;\n if (hasActiveCastSession(src)) {\n this.#resumeSession();\n this.#currentSrc = src;\n return;\n }\n this.#ctx.notify(\"load-start\");\n const loadRequest = this.#buildLoadRequest(src), errorCode = await this.session.loadMedia(loadRequest);\n if (errorCode) {\n this.#currentSrc = null;\n this.#ctx.notify(\"error\", Error(getCastErrorMessage(errorCode)));\n return;\n }\n this.#currentSrc = src;\n }\n destroy() {\n this.#reset();\n this.#endSession();\n }\n #reset() {\n if (!this.#reloadInfo) {\n this.#played = 0;\n this.#seekableRange = new TimeRange(0, 0);\n }\n this.#timeRAF.stop();\n this.#currentTime = 0;\n this.#reloadInfo = null;\n }\n #resumeSession() {\n const resumeSessionEvent = new DOMEvent(\"resume-session\", { detail: this.session });\n this.#onMediaLoadedChange(resumeSessionEvent);\n const { muted, volume, savedState } = this.#ctx.$state, localState = savedState();\n this.setCurrentTime(Math.max(this.#player.currentTime, localState?.currentTime ?? 0));\n this.setMuted(muted());\n this.setVolume(volume());\n if (localState?.paused === false) this.play();\n }\n #endSession() {\n this.cast.endCurrentSession(true);\n const { remotePlaybackLoader } = this.#ctx.$state;\n remotePlaybackLoader.set(null);\n }\n #disconnectFromReceiver() {\n const { savedState } = this.#ctx.$state;\n savedState.set({\n paused: this.#player.isPaused,\n currentTime: this.#player.currentTime\n });\n this.#endSession();\n }\n #onAnimationFrame() {\n this.#onCurrentTimeChange();\n }\n #onRemotePlayerEvent(event) {\n this.#playerEventHandlers[event.type].call(this, event);\n }\n #onCastStateChange(data) {\n const castState = this.cast.getCastState(), state = castState === cast.framework.CastState.CONNECTED ? \"connected\" : castState === cast.framework.CastState.CONNECTING ? \"connecting\" : \"disconnected\";\n if (this.#state === state) return;\n const detail = { type: \"google-cast\", state }, trigger = this.#createEvent(data);\n this.#state = state;\n this.#ctx.notify(\"remote-playback-change\", detail, trigger);\n if (state === \"disconnected\") {\n this.#disconnectFromReceiver();\n }\n }\n #onMediaLoadedChange(event) {\n const hasLoaded = !!this.#player.isMediaLoaded;\n if (!hasLoaded) return;\n const src = peek(this.#ctx.$state.source);\n Promise.resolve().then(() => {\n if (src !== peek(this.#ctx.$state.source) || !this.#player.isMediaLoaded) return;\n this.#reset();\n const duration = this.#player.duration;\n this.#seekableRange = new TimeRange(0, duration);\n const detail = {\n provider: this,\n duration,\n buffered: new TimeRange(0, 0),\n seekable: this.#getSeekableRange()\n }, trigger = this.#createEvent(event);\n this.#ctx.notify(\"loaded-metadata\", void 0, trigger);\n this.#ctx.notify(\"loaded-data\", void 0, trigger);\n this.#ctx.notify(\"can-play\", detail, trigger);\n this.#onCanControlVolumeChange();\n this.#onCanSeekChange(event);\n const { volume, muted } = this.#ctx.$state;\n this.setVolume(volume());\n this.setMuted(muted());\n this.#timeRAF.start();\n this.#tracks.syncRemoteTracks(trigger);\n this.#tracks.syncRemoteActiveIds(trigger);\n });\n }\n #onCanControlVolumeChange() {\n this.#ctx.$state.canSetVolume.set(this.#player.canControlVolume);\n }\n #onCanSeekChange(event) {\n const trigger = this.#createEvent(event);\n this.#ctx.notify(\"stream-type-change\", this.#getStreamType(), trigger);\n }\n #getStreamType() {\n const streamType = this.#player.mediaInfo?.streamType;\n return streamType === chrome.cast.media.StreamType.LIVE ? this.#player.canSeek ? \"live:dvr\" : \"live\" : \"on-demand\";\n }\n #onCurrentTimeChange() {\n if (this.#reloadInfo) return;\n const currentTime = this.#player.currentTime;\n if (currentTime === this.#currentTime) return;\n this.#ctx.notify(\"time-change\", currentTime);\n if (currentTime > this.#played) {\n this.#played = currentTime;\n this.#onProgress();\n }\n if (this.#ctx.$state.seeking()) {\n this.#ctx.notify(\"seeked\", currentTime);\n }\n this.#currentTime = currentTime;\n }\n #onDurationChange(event) {\n if (!this.#player.isMediaLoaded || this.#reloadInfo) return;\n const duration = this.#player.duration, trigger = this.#createEvent(event);\n this.#seekableRange = new TimeRange(0, duration);\n this.#ctx.notify(\"duration-change\", duration, trigger);\n }\n #onVolumeChange(event) {\n if (!this.#player.isMediaLoaded) return;\n const detail = {\n muted: this.#player.isMuted,\n volume: this.#player.volumeLevel\n }, trigger = this.#createEvent(event);\n this.#ctx.notify(\"volume-change\", detail, trigger);\n }\n #onPausedChange(event) {\n const trigger = this.#createEvent(event);\n if (this.#player.isPaused) {\n this.#ctx.notify(\"pause\", void 0, trigger);\n } else {\n this.#ctx.notify(\"play\", void 0, trigger);\n }\n }\n #onProgress(event) {\n const detail = {\n seekable: this.#getSeekableRange(),\n buffered: new TimeRange(0, this.#played)\n }, trigger = event ? this.#createEvent(event) : void 0;\n this.#ctx.notify(\"progress\", detail, trigger);\n }\n #onPlayerStateChange(event) {\n const state = this.#player.playerState, PlayerState = chrome.cast.media.PlayerState;\n this.#isIdle = state === PlayerState.IDLE;\n if (state === PlayerState.PAUSED) return;\n const trigger = this.#createEvent(event);\n switch (state) {\n case PlayerState.PLAYING:\n this.#ctx.notify(\"playing\", void 0, trigger);\n break;\n case PlayerState.BUFFERING:\n this.#ctx.notify(\"waiting\", void 0, trigger);\n break;\n case PlayerState.IDLE:\n this.#timeRAF.stop();\n this.#ctx.notify(\"pause\");\n this.#ctx.notify(\"end\");\n break;\n }\n }\n #getSeekableRange() {\n return this.#player.liveSeekableRange ? new TimeRange(this.#player.liveSeekableRange.start, this.#player.liveSeekableRange.end) : this.#seekableRange;\n }\n #createEvent(detail) {\n return detail instanceof Event ? detail : new DOMEvent(detail.type, { detail });\n }\n #buildMediaInfo(src) {\n const { streamType, title, poster } = this.#ctx.$state;\n return new GoogleCastMediaInfoBuilder(src).setMetadata(title(), poster()).setStreamType(streamType()).setTracks(this.#tracks.getLocalTextTracks()).build();\n }\n #buildLoadRequest(src) {\n const mediaInfo = this.#buildMediaInfo(src), request = new chrome.cast.media.LoadRequest(mediaInfo), savedState = this.#ctx.$state.savedState();\n request.autoplay = (this.#reloadInfo?.paused ?? savedState?.paused) === false;\n request.currentTime = this.#reloadInfo?.time ?? savedState?.currentTime ?? 0;\n return request;\n }\n async #reload(paused, time) {\n const src = peek(this.#ctx.$state.source);\n this.#reloadInfo = { src, paused, time };\n await this.loadSource(src);\n }\n #onNewLocalTracks() {\n this.#reload(this.#player.isPaused, this.#player.currentTime).catch((error) => {\n });\n }\n}\n\nexport { GoogleCastProvider };\n"],"names":["f","require$$0","k","l","m","n","p","q","c","a","g","b","e","h","reactJsxRuntime_production_min","React","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_OFFSCREEN_TYPE","MAYBE_ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","maybeIterator","ReactSharedInternals","error","format","_len2","args","_key2","printWarning","level","ReactDebugCurrentFrame","stack","argsWithFormat","item","enableScopeAPI","enableCacheElement","enableTransitionTracing","enableLegacyHidden","enableDebugTracing","REACT_MODULE_REFERENCE","isValidElementType","type","getWrappedName","outerType","innerType","wrapperName","displayName","functionName","getContextName","getComponentNameFromType","context","provider","outerName","lazyComponent","payload","init","assign","disabledDepth","prevLog","prevInfo","prevWarn","prevError","prevGroup","prevGroupCollapsed","prevGroupEnd","disabledLog","disableLogs","props","reenableLogs","ReactCurrentDispatcher","prefix","describeBuiltInComponentFrame","name","source","ownerFn","x","match","reentry","componentFrameCache","PossiblyWeakMap","describeNativeComponentFrame","fn","construct","frame","control","previousPrepareStackTrace","previousDispatcher","Fake","sample","sampleLines","controlLines","s","_frame","syntheticFrame","describeFunctionComponentFrame","shouldConstruct","Component","prototype","describeUnknownElementTypeFrameInDEV","hasOwnProperty","loggedTypeFailures","setCurrentlyValidatingElement","element","owner","checkPropTypes","typeSpecs","values","location","componentName","has","typeSpecName","error$1","err","ex","isArrayImpl","isArray","typeName","value","hasToStringTag","willCoercionThrow","testStringCoercion","checkKeyStringCoercion","ReactCurrentOwner","RESERVED_PROPS","specialPropKeyWarningShown","specialPropRefWarningShown","hasValidRef","config","getter","hasValidKey","warnIfStringRefCannotBeAutoConverted","self","defineKeyPropWarningGetter","warnAboutAccessingKey","defineRefPropWarningGetter","warnAboutAccessingRef","ReactElement","key","ref","jsxDEV","maybeKey","propName","defaultProps","ReactCurrentOwner$1","ReactDebugCurrentFrame$1","setCurrentlyValidatingElement$1","propTypesMisspellWarningShown","isValidElement","object","getDeclarationErrorAddendum","getSourceInfoErrorAddendum","ownerHasKeyUseWarning","getCurrentComponentErrorInfo","parentType","info","parentName","validateExplicitKey","currentComponentErrorInfo","childOwner","validateChildKeys","node","i","child","iteratorFn","iterator","step","validatePropTypes","propTypes","_name","validateFragmentProps","fragment","keys","didWarnAboutKeySpread","jsxWithValidation","isStaticChildren","validType","sourceInfo","typeString","children","beforeExample","afterExample","jsxWithValidationStatic","jsxWithValidationDynamic","jsx","jsxs","reactJsxRuntime_development","jsxRuntimeModule","require$$1","requestCache","useResponsiveImage","src","responsiveSizes","formats","enabled","apiUrl","data","setData","useState","loading","setLoading","setError","useEffect","isMounted","cacheKey","requestPromise","formData","response","txt","result","ResponsiveImage","sizes","className","imgClassName","alt","onDataLoaded","rootMargin","onLoad","onError","providedData","isInView","setIsInView","imgLoaded","setImgLoaded","imgRef","observer","entry","hookResult","_a","index","supabase","createClient","fetchWithDeduplication","fetcher","promise","fetchSelectedVersions","rootIds","client","defaultSupabase","idsString","fetchFeedPostsPaginated","sourceId","isOrgContext","orgSlug","page","pageSize","start","end","query","postsData","postsError","pagesData","pageQuery","pages","pagesError","pageImageIds","pageIdToImageId","content","containers","firstPageKey","container","photoWidget","w","picId","pageImages","pics","postCandidates","post","validPics","cover","selectedVersions","transformedPosts","coverPic","settings","rootId","selected","v","sum","transformedPages","displayImage","requiredPicId","foundUrl","virtualPic","allItems","mapFeedPostsToMediaItems","posts","sortBy","newest","current","newestDate","augmentFeedPosts","pic","setRef","composeRefs","refs","hasCleanup","cleanups","cleanup","useComposedRefs","use","isPromiseLike","isLazyComponent","createSlot","ownerName","SlotClone","createSlotClone","Slot2","forwardedRef","slotProps","childrenArray","slottable","isSlottable","newElement","newChildren","Slot","childrenRef","getElementRef","props2","mergeProps","SLOTTABLE_IDENTIFIER","childProps","overrideProps","slotPropValue","childPropValue","mayWarn","_b","r","t","o","clsx","falsyToString","cx","cva","base","_config_compoundVariants","variants","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","acc","param","getCompoundVariantClassNames","cvClass","cvClassName","compoundVariantOptions","CLASS_PART_SEPARATOR","createClassGroupUtils","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","validator","arbitraryPropertyRegex","arbitraryPropertyClassName","property","theme","getPrefixedClassGroupEntries","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","path","currentClassPartObject","pathPart","func","classGroupEntries","prefixedClassGroup","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","createParseClassName","separator","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","modifier","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","classGroupsInConflict","classNames","originalClassName","variantModifier","modifierId","classId","conflictGroups","group","twJoin","argument","resolvedValue","string","toValue","mix","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isLength","isNumber","isArbitraryLength","getIsArbitraryValue","isLengthOnly","isArbitraryNumber","isInteger","isPercent","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","label","testValue","twMerge","colors","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","invert","gap","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","getNumberWithAutoAndArbitrary","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumberAndArbitrary","cn","inputs","buttonVariants","Button","size","asChild","Comp","AuthContext","createContext","useAuth","useContext","L","T","G","E","d","be","Re","Te","Oe","I","we","F","ie","oe","ye","j","Pe","Q","Se","$e","U","_e","ae","Le","K","re","Me","ze","Ae","Ee","le","Ie","D","W","ue","Ce","pe","Be","qe","ve","ce","De","He","he","Ze","Ge","Ne","Fe","je","Qe","Ue","Ke","de","ke","We","se","X","Xe","N","Je","C","M","Ve","ge","J","V","z","fe","me","Ye","y","__publicField","u","R","O","H","ee","te","ne","xe","Z","A","Y","_c","_d","P","$","S","B","_","entries","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","apply","thisArg","_len","_key","Func","arrayForEach","unapply","arrayLastIndexOf","arrayPop","arrayPush","arraySplice","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","objectHasOwnProperty","regExpTest","typeErrorCreate","unconstruct","_len3","_key3","_len4","_key4","addToSet","set","array","transformCaseFunc","lcElement","cleanArray","clone","newObject","lookupGetter","prop","desc","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","text","html","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","EXPRESSIONS","NODE_TYPE","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","suffix","ATTR_NAME","policyName","scriptUrl","_createHooksMap","createDOMPurify","window","DOMPurify","root","document","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","NamedNodeMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","remove","getNextSibling","getChildNodes","getParentNode","template","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","FORBID_TAGS","FORBID_ATTR","EXTRA_ELEMENT_HANDLING","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","_parseConfig","cfg","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","parent","tagName","parentTagName","_forceRemove","_removeAttribute","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","body","_createNodeIterator","_isClobbered","_isNode","_executeHooks","currentNode","hook","_sanitizeElements","_isBasicCustomElement","parentNode","childNodes","childCount","childClone","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","attributes","hookEvent","attr","namespaceURI","attrValue","initValue","_sanitizeShadowDOM","shadowNode","shadowIterator","importedNode","returnNode","nodeIterator","serializedHTML","tag","entryPoint","hookFunction","purify","util","assertIs","_arg","assertNever","_x","items","obj","validKeys","filtered","arr","checker","val","joinValues","objectUtil","first","second","ZodParsedType","getParsedType","ZodIssueCode","ZodError","issues","sub","subs","actualProto","_mapper","mapper","issue","fieldErrors","processError","curr","el","formErrors","firstEl","errorMap","_ctx","message","overrideErrorMap","defaultErrorMap","getErrorMap","makeIssue","params","errorMaps","issueData","fullPath","fullIssue","errorMessage","maps","map","addIssueToContext","ctx","overrideMap","ParseStatus","status","results","arrayValue","INVALID","pairs","syncPairs","pair","finalObject","DIRTY","OK","isAborted","isDirty","isValid","isAsync","errorUtil","ParseInputLazyPath","handleResult","processCreateParams","invalid_type_error","required_error","description","iss","ZodType","input","maybeAsyncResult","check","getIssueProperties","refinementData","refinement","ZodEffects","ZodFirstPartyTypeKind","def","ZodOptional","ZodNullable","ZodArray","ZodPromise","option","ZodUnion","incoming","ZodIntersection","transform","defaultValueFunc","ZodDefault","ZodBranded","catchValueFunc","ZodCatch","This","target","ZodPipeline","ZodReadonly","cuidRegex","cuid2Regex","ulidRegex","uuidRegex","nanoidRegex","jwtRegex","durationRegex","emailRegex","_emojiRegex","emojiRegex","ipv4Regex","ipv4CidrRegex","ipv6Regex","ipv6CidrRegex","base64Regex","base64urlRegex","dateRegexSource","dateRegex","timeRegexSource","secondsRegexSource","secondsQuantifier","timeRegex","datetimeRegex","regex","opts","isValidIP","ip","version","isValidJWT","jwt","alg","header","base64","decoded","isValidCidr","ZodString","tooBig","tooSmall","validation","options","minLength","maxLength","len","ch","min","max","floatSafeRemainder","valDecCount","stepDecCount","decCount","valInt","stepInt","ZodNumber","kind","inclusive","ZodBigInt","ZodBoolean","ZodDate","minDate","maxDate","ZodSymbol","ZodUndefined","ZodNull","ZodAny","ZodUnknown","ZodNever","ZodVoid","schema","deepPartialify","ZodObject","newShape","fieldSchema","ZodTuple","shape","shapeKeys","extraKeys","keyValidator","unknownKeys","catchall","defaultError","augmentation","merging","mask","newField","createZodEnum","handleResults","unionErrors","childCtx","types","mergeValues","aType","bType","bKeys","sharedKeys","newObj","sharedValue","newArray","itemA","itemB","handleParsed","parsedLeft","parsedRight","merged","left","right","itemIndex","rest","schemas","ZodMap","keyType","valueType","finalMap","ZodSet","finalizeSet","elements","parsedSet","minSize","maxSize","ZodLazy","ZodLiteral","ZodEnum","expectedValues","enumValues","newDef","opt","ZodNativeEnum","nativeEnumValues","promisified","effect","checkCtx","arg","processed","executeRefinement","inner","preprocess","newCtx","ZodNaN","inResult","stringType","booleanType","objectType","tagSchema","z.string","parseHashtagContent","hashtagRegex","part","HashtagText","onTagClick","navigate","useNavigate","handleTagClick","segments","segment","_self","Prism","lang","uniqueId","plainTextGrammar","encode","tokens","Token","deepClone","visited","id","language","scripts","defaultActivation","no","redef","inside","before","insert","grammar","ret","token","newToken","old","DFS","callback","objId","propertyType","async","env","code","insertHighlightedCode","highlightedCode","worker","evt","tokenList","LinkedList","addAfter","matchGrammar","toArray","callbacks","alias","matchedStr","stringify","aliases","matchPattern","pattern","pos","lookbehind","lookbehindLength","startNode","startPos","rematch","patterns","patternObj","greedy","flags","str","removeCount","from","to","matchStr","after","reach","removeFrom","removeRange","wrapped","nestedRematch","head","tail","list","next","newNode","count","immediateClose","script","highlightAutomaticallyCallback","readyState","module","global","includedCdataInside","attrName","markup","LOADING_MESSAGE","FAILURE_MESSAGE","FAILURE_EMPTY_MESSAGE","EXTENSIONS","STATUS_ATTR","STATUS_LOADING","STATUS_LOADED","STATUS_FAILED","SELECTOR","loadFile","success","xhr","parseRange","range","comma","pre","extension","autoloader","lines","logged","typeInside","envVars","commandAfterHeredoc","insideString","toBeCopied","MarkdownRenderer","containerRef","contentAnalysis","useMemo","hasHashtags","hasMarkdownLinks","hasMarkdownSyntax","htmlContent","decodedContent","marked","rawHtml","formatUrlDisplay","url","displayUrl","parts","domain","processedHtml","href","attrs","displayText","composeEventHandlers","originalEventHandler","ourEventHandler","checkForDefaultPrevented","event","createContext2","rootComponentName","defaultContext","Context","Provider","useContext2","consumerName","createContextScope","scopeName","createContextScopeDeps","defaultContexts","createContext3","BaseContext","scope","createScope","scopeContexts","contexts","composeContextScopes","scopes","baseScope","scopeHooks","createScope2","overrideScopes","nextScopes","nextScopes2","useScope","currentScope","useLayoutEffect2","useReactId","useId","deterministicId","setId","useLayoutEffect","reactId","useInsertionEffect","useControllableState","defaultProp","onChange","caller","uncontrolledProp","setUncontrolledProp","onChangeRef","useUncontrolledState","isControlled","isControlledRef","wasControlled","setValue","nextValue","value2","isFunction","prevValueRef","NODES","Primitive","primitive","primitiveProps","dispatchDiscreteCustomEvent","ReactDOM","useCallbackRef","callbackRef","useEscapeKeydown","onEscapeKeyDownProp","ownerDocument","onEscapeKeyDown","handleKeyDown","DISMISSABLE_LAYER_NAME","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableLayerContext","DismissableLayer","disableOutsidePointerEvents","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","layerProps","setNode","force","composedRefs","node2","layers","highestLayerWithOutsidePointerEventsDisabled","highestLayerWithOutsidePointerEventsDisabledIndex","isBodyPointerEventsDisabled","isPointerEventsEnabled","pointerDownOutside","usePointerDownOutside","isPointerDownOnBranch","branch","focusOutside","useFocusOutside","dispatchUpdate","handleUpdate","BRANCH_NAME","DismissableLayerBranch","handlePointerDownOutside","isPointerInsideReactTreeRef","handleClickRef","handlePointerDown","handleAndDispatchPointerDownOutsideEvent2","handleAndDispatchCustomEvent","eventDetail","timerId","handleFocusOutside","isFocusInsideReactTreeRef","handleFocus","handler","detail","discrete","AUTOFOCUS_ON_MOUNT","AUTOFOCUS_ON_UNMOUNT","EVENT_OPTIONS","FOCUS_SCOPE_NAME","FocusScope","loop","trapped","onMountAutoFocusProp","onUnmountAutoFocusProp","scopeProps","setContainer","onMountAutoFocus","onUnmountAutoFocus","lastFocusedElementRef","focusScope","handleFocusIn2","focus","handleFocusOut2","relatedTarget","handleMutations2","mutations","mutation","mutationObserver","focusScopesStack","previouslyFocusedElement","mountEvent","focusFirst","removeLinks","getTabbableCandidates","unmountEvent","isTabKey","focusedElement","container2","last","getTabbableEdges","candidates","select","candidate","findVisible","nodes","walker","isHiddenInput","isHidden","upTo","isSelectableInput","createFocusScopesStack","activeFocusScope","arrayRemove","updatedArray","PORTAL_NAME","Portal","containerProp","portalProps","mounted","setMounted","useStateMachine","initialState","machine","state","Presence","present","presence","usePresence","React2","stylesRef","prevPresentRef","prevAnimationNameRef","send","currentAnimationName","getAnimationName","styles","wasPresent","prevAnimationName","timeoutId","ownerWindow","handleAnimationEnd","isCurrentAnimation","currentFillMode","handleAnimationStart","useFocusGuards","edgeGuards","createFocusGuard","__assign","__rest","__spreadArray","pack","ar","zeroRightClassName","fullWidthClassName","noScrollbarsClassName","removedBarSizeVariable","assignRef","initialValue","useIsomorphicLayoutEffect","currentValues","useMergeRefs","defaultValue","newValue","oldValue","prevRefs_1","nextRefs_1","current_1","ItoI","innerCreateMedium","defaults","middleware","buffer","assigned","medium","cb","cbs","pendingQueue","executeQueue","cycle","filter","createSidecarMedium","SideCar","sideCar","Target","exportSidecar","exported","effectCar","nothing","RemoveScroll","parentRef","setCallbacks","forwardProps","removeScrollBar","shards","noRelative","noIsolation","inert","allowPinchZoom","Container","gapMode","containerProps","getNonce","makeStyleTag","nonce","injectStyles","css","insertStyleTag","stylesheetSingleton","counter","stylesheet","style","styleHookSingleton","sheet","isDynamic","styleSingleton","useStyle","Sheet","dynamic","zeroGap","parse","getOffset","cs","top","getGapWidth","offsets","documentWidth","windowWidth","Style","lockAttribute","getStyles","allowRelative","important","getCurrentUseCounter","useLockAttribute","newCounter","RemoveScrollBar","noImportant","passiveSupported","nonPassive","alwaysContainsScroll","elementCanBeScrolled","overflow","elementCouldBeVScrolled","elementCouldBeHScrolled","locationCouldBeScrolled","axis","isScrollable","elementCouldBeScrolled","getScrollVariables","scrollHeight","clientHeight","getVScrollVariables","scrollTop","getHScrollVariables","scrollLeft","scrollWidth","clientWidth","getDirectionFactor","direction","handleScroll","endTarget","sourceDelta","noOverscroll","directionFactor","delta","targetInLock","shouldCancelScroll","isDeltaPositive","availableScroll","availableScrollTop","position","scroll_1","capacity","elementScroll","parent_1","getTouchXY","getDeltaXY","extractRef","deltaCompare","generateStyle","idCounter","lockStack","RemoveScrollSideCar","shouldPreventQueue","touchStartRef","activeAxis","lastProps","allow_1","shouldCancelEvent","touch","touchStart","deltaX","deltaY","currentAxis","moveDirection","selection","anchorNode","isTouchingSelection","canBeScrolledInMainDirection","cancelingAxis","shouldPrevent","_event","sourceEvent","shardNodes","shouldStop","shouldCancel","should","getOutermostShadowParent","scrollTouchStart","scrollWheel","scrollTouchMove","inst","shadowParent","ReactRemoveScroll","getDefaultParent","originalTarget","sampleTarget","counterMap","uncontrolledNodes","markerMap","lockCount","unwrapHost","correctTargets","targets","correctedTarget","applyAttributeToOthers","markerName","controlAttribute","markerCounter","hiddenNodes","elementsToKeep","elementsToStop","keep","deep","alreadyHidden","counterValue","markerValue","hideOthers","activeParentNode","DIALOG_NAME","createDialogContext","createDialogScope","DialogProvider","useDialogContext","Dialog","__scopeDialog","openProp","defaultOpen","onOpenChange","modal","triggerRef","contentRef","open","setOpen","prevOpen","TRIGGER_NAME","DialogTrigger","triggerProps","composedTriggerRef","getState","PortalProvider","usePortalContext","DialogPortal","forceMount","PortalPrimitive","OVERLAY_NAME","DialogOverlay","portalContext","overlayProps","DialogOverlayImpl","CONTENT_NAME","DialogContent","contentProps","DialogContentModal","DialogContentNonModal","DialogContentImpl","originalEvent","ctrlLeftClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","trapFocus","onOpenAutoFocus","onCloseAutoFocus","Fragment","TitleWarning","DescriptionWarning","TITLE_NAME","DialogTitle","titleProps","DESCRIPTION_NAME","DialogDescription","descriptionProps","CLOSE_NAME","DialogClose","closeProps","TITLE_WARNING_NAME","WarningProvider","useWarningContext","titleId","titleWarningContext","MESSAGE","DESCRIPTION_WARNING_NAME","descriptionId","describedById","Root","Trigger","Overlay","Content","Title","Description","Close","DialogPrimitive.Root","DialogPrimitive.Portal","DialogPrimitive.Overlay","DialogPrimitive.Content","DialogPrimitive.Close","DialogHeader","DialogPrimitive.Title","DialogPrimitive.Description","Input","isCheckBoxInput","isDateObject","isNullOrUndefined","isObjectType","isObject","getEventValue","getNodeParentName","isNameInFieldArray","names","isPlainObject","tempObject","prototypeCopy","isWeb","cloneObject","isFileListInstance","copy","isKey","isUndefined","compact","stringToPath","get","isBoolean","tempPath","length","lastIndex","objValue","EVENTS","VALIDATION_MODE","INPUT_VALIDATION_RULES","HookFormControlContext","useFormControlContext","getProxyFormState","formState","localProxyFormState","isRoot","useFormState","formControl","disabled","exact","updateFormState","_localProxyFormState","isString","generateWatchOutput","_names","formValues","isGlobal","fieldName","isPrimitive","deepEqual","object1","object2","_internal_visited","keys1","keys2","val1","val2","useWatch","compute","_defaultValue","_compute","_computeFormValues","_prevControl","_prevName","updateValue","getCurrentOutput","refreshValue","computedFormValues","controlChanged","prevName","computedOutput","nameChanged","useController","shouldUnregister","isArrayField","defaultValueMemo","_props","_previousNameRef","_registerProps","fieldState","onBlur","elm","field","_shouldUnregisterField","previousName","updateMounted","Controller","HookFormContext","useFormContext","FormProvider","watch","getValues","getFieldState","clearErrors","trigger","resetField","reset","handleSubmit","unregister","register","setFocus","subscribe","appendErrors","validateAllFieldCriteria","errors","convertToArrayPayload","createSubject","_observers","extractFormValues","fieldsState","fieldValue","nestedFieldsState","isEmptyObject","isFileInput","isHTMLElement","isMultipleSelect","isRadioInput","isRadioOrCheckbox","live","baseGet","updatePath","isEmptyArray","unset","paths","childObject","objectHasFunction","isTraversable","markFieldsDirty","fields","getDirtyFields","dirtyFieldsFromValues","formValue","defaultResult","validResult","getCheckboxValue","getFieldValueAs","valueAsNumber","valueAsDate","setValueAs","defaultReturn","getRadioValue","previous","getFieldValue","_f","getResolverOptions","fieldsNames","_fields","criteriaMode","shouldUseNativeValidation","isRegex","getRuleValue","rule","getValidationModes","mode","ASYNC_FUNCTION","hasPromiseValidation","fieldReference","validateFunction","hasValidation","isWatched","isBlurEvent","watchName","iterateFieldsByAction","action","abortEarly","currentField","schemaErrorLookup","foundError","shouldRenderFormState","formStateData","_proxyFormState","shouldSubscribeByName","signalName","currentName","skipValidation","isTouched","isSubmitted","reValidateMode","unsetEmptyArray","updateFieldArrayRootError","fieldArrayErrors","getValidateError","getValueAndMessage","validationData","validateField","disabledFieldNames","isFieldArray","required","validate","mount","inputValue","inputRef","setCustomValidity","isRadio","isCheckBox","isEmpty","appendErrorsCurry","getMinMaxMessage","exceedMax","maxLengthMessage","minLengthMessage","maxType","minType","exceedMin","maxOutput","minOutput","valueNumber","valueDate","convertTimeToDate","time","isTime","isWeek","maxLengthOutput","minLengthOutput","patternValue","validateError","validationResult","defaultOptions","createFormControl","_options","_formState","_defaultValues","_formValues","_state","delayErrorCallback","timer","defaultProxyFormState","_proxySubscribeFormState","_subjects","shouldDisplayAllAssociatedErrors","debounce","wait","_setValid","shouldUpdateValid","_runSchema","_updateIsValidating","executeBuiltInValidation","isValidating","_setFieldArray","method","shouldSetValues","shouldUpdateFieldsAndState","fieldValues","touchedFields","_getDirty","updateErrors","_setErrors","updateValidAndValue","shouldSkipSetValueAs","setFieldValue","updateTouchAndDirty","shouldDirty","shouldRender","shouldUpdateField","isPreviousDirty","output","isCurrentFieldPristine","isPreviousFieldTouched","shouldRenderByError","previousFieldError","updatedFormState","executeSchemaAndUpdateState","shouldOnlyCheckValid","isFieldArrayRoot","isPromiseFunction","fieldError","_removeUnmounted","_getWatch","_getFieldArray","optionRef","checkboxRef","radioRef","setValues","fieldKey","cloneValue","isFieldValueUpdated","_updateIsFieldValueUpdated","validationModeBeforeSubmit","validationModeAfterSubmit","shouldSkipValidation","watched","previousErrorLookupResult","errorLookupResult","_focusInput","fieldNames","inputName","currentError","currentRef","restOfErrorTree","_subscribe","_setFormState","_setDisabledField","disabledStateChanged","disabledIsDefined","fieldRef","radioOrCheckbox","_focusError","_disableForm","onValid","onInvalid","onValidError","_reset","keepStateOptions","updatedValues","cloneUpdatedValues","isEmptyResetValues","fieldsToCheck","existingValue","form","methods","useForm","_formControl","_values","NAME","Label","labelVariants","LabelPrimitive.Root","Form","FormFieldContext","FormField","useFormField","fieldContext","itemContext","FormItemContext","FormItem","FormLabel","formItemId","FormControl","formDescriptionId","formMessageId","FormDescription","FormMessage","createCollection","PROVIDER_NAME","createCollectionContext","createCollectionScope","CollectionProviderImpl","useCollectionContext","CollectionProvider","itemMap","COLLECTION_SLOT_NAME","CollectionSlotImpl","CollectionSlot","ITEM_SLOT_NAME","ITEM_DATA_ATTR","CollectionItemSlotImpl","CollectionItemSlot","itemData","useCollection","collectionNode","orderedNodes","DirectionContext","useDirection","localDir","globalDir","ENTRY_FOCUS","GROUP_NAME","Collection","createRovingFocusGroupContext","createRovingFocusGroupScope","RovingFocusProvider","useRovingFocusContext","RovingFocusGroup","RovingFocusGroupImpl","__scopeRovingFocusGroup","orientation","dir","currentTabStopIdProp","defaultCurrentTabStopId","onCurrentTabStopIdChange","onEntryFocus","preventScrollOnEntryFocus","groupProps","currentTabStopId","setCurrentTabStopId","isTabbingBackOut","setIsTabbingBackOut","handleEntryFocus","getItems","isClickFocusRef","focusableItemsCount","setFocusableItemsCount","tabStopId","prevCount","isKeyboardFocus","entryFocusEvent","activeItem","currentItem","candidateNodes","ITEM_NAME","RovingFocusGroupItem","focusable","active","itemProps","autoId","isCurrentTabStop","onFocusableItemAdd","onFocusableItemRemove","focusIntent","getFocusIntent","currentIndex","wrapArray","MAP_KEY_TO_FOCUS_INTENT","getDirectionAwareKey","preventScroll","PREVIOUSLY_FOCUSED_ELEMENT","startIndex","Item","TABS_NAME","createTabsContext","useRovingFocusGroupScope","TabsProvider","useTabsContext","Tabs","__scopeTabs","valueProp","onValueChange","activationMode","tabsProps","TAB_LIST_NAME","TabsList","listProps","rovingFocusGroupScope","RovingFocusGroup.Root","TabsTrigger","triggerId","makeTriggerId","contentId","makeContentId","isSelected","RovingFocusGroup.Item","isAutomaticActivation","TabsContent","isMountAnimationPreventedRef","rAF","baseId","Root2","List","TabsPrimitive.Root","TabsPrimitive.List","TabsPrimitive.Trigger","TabsPrimitive.Content","usePrevious","useSize","setSize","resizeObserver","width","height","borderSizeEntry","borderSize","SWITCH_NAME","createSwitchContext","SwitchProvider","useSwitchContext","Switch","__scopeSwitch","checkedProp","defaultChecked","onCheckedChange","switchProps","button","setButton","hasConsumerStoppedPropagationRef","isFormControl","checked","setChecked","prevChecked","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","BUBBLE_INPUT_NAME","bubbles","controlSize","inputProto","Thumb","SwitchPrimitives.Root","SwitchPrimitives.Thumb","CHECKBOX_NAME","createCheckboxContext","CheckboxProviderImpl","useCheckboxContext","CheckboxProvider","__scopeCheckbox","internal_do_not_use_render","setControl","bubbleInput","setBubbleInput","isIndeterminate","CheckboxTrigger","onKeyDown","onClick","checkboxProps","initialCheckedStateRef","Checkbox","CheckboxBubbleInput","INDICATOR_NAME","CheckboxIndicator","indicatorProps","defaultCheckedRef","CheckboxPrimitive.Root","CheckboxPrimitive.Indicator","Check","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","badgeVariants","Badge","DEFAULT_LANG","translationCache","loadingPromises","translationsLoaded","listeners","notify","loadTranslations","__variableDynamicImportRuntimeHelper","translations","existingCache","getCookie","setCookie","days","expires","getCurrentLangInternal","cookieLang","langParam","browserLangs","shortLang","getCurrentLang","textKey","langToUse","forceUpdate","currentLang","translatedString","getTranslationCache","downloadTranslations","isLoaded","sortedTranslations","jsonString","blob","link","getTranslationStatus","langCode","ImagePickerDialog","isOpen","onClose","onSelect","onMultiSelect","onMultiSelectPictures","currentValue","multiple","user","pictures","setPictures","allTags","setAllTags","collections","setCollections","searchQuery","setSearchQuery","selectedTags","setSelectedTags","selectedCollections","setSelectedCollections","selectedIds","setSelectedIds","selectedId","setSelectedId","fetchPictures","fetchTags","fetchCollections","tagsSet","filteredPictures","matchesSearch","matchesTags","finalPictures","setFinalPictures","pictureIdsInCollections","cp","handleSelect","selectedPictures","toggleSelection","prev","pid","Search","Tag","FolderOpen","collection","ImageIcon","picture","MediaCard","MilkdownEditorInternal","MarkdownEditor","placeholder","activeTab","setActiveTab","imagePickerOpen","setImagePickerOpen","pendingImageResolveRef","useRef","useCallback","_file","resolve","handleImageSelect","pictureId","imageUrl","resolveFunc","handleRawChange","prevProps","nextProps","createSlottable","Slottable2","Fragment2","ROOT_NAME","createAlertDialogContext","useDialogScope","AlertDialog","__scopeAlertDialog","alertDialogProps","dialogScope","AlertDialogTrigger","DialogPrimitive.Trigger","AlertDialogPortal","AlertDialogOverlay","AlertDialogContentProvider","useAlertDialogContentContext","Slottable","AlertDialogContent","cancelRef","DialogPrimitive.WarningProvider","AlertDialogTitle","AlertDialogDescription","ACTION_NAME","AlertDialogAction","actionProps","CANCEL_NAME","AlertDialogCancel","cancelProps","Portal2","Overlay2","Content2","Action","Cancel","Title2","Description2","AlertDialogPrimitive.Root","AlertDialogPrimitive.Portal","AlertDialogPrimitive.Overlay","AlertDialogPrimitive.Content","AlertDialogHeader","AlertDialogFooter","AlertDialogPrimitive.Title","AlertDialogPrimitive.Description","AlertDialogPrimitive.Action","AlertDialogPrimitive.Cancel","VersionSelector","currentPictureId","onVersionSelect","versions","setVersions","updating","setUpdating","toggling","setToggling","showDeleteDialog","setShowDeleteDialog","versionToDelete","setVersionToDelete","isDeleting","setIsDeleting","loadVersions","currentPicture","rootParentId","allVersions","versionsError","toast","handleVersionSelect","versionId","selectError","prevVersions","handleToggleVisibility","currentVisibility","handleDeleteClick","confirmDelete","allUserPictures","loadError","findDescendants","parentId","descendants","descendantsToDelete","allToDelete","urlParts","fileName","bucketPath","dbError","deletedIds","totalDeleted","Eye","EyeOff","Trash2","__classPrivateFieldSet","receiver","__classPrivateFieldGet","uuid4","crypto","u8","randomByte","isAbortError","castToError","OpenAIError","APIError","headers","msg","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","cause","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isAbsoluteURL","isReadonlyArray","maybeObj","isEmptyObj","_k","hasOwn","isObj","validatePositiveInteger","safeJSON","sleep","ms","VERSION","isRunningInBrowser","getDetectedPlatform","getPlatformProperties","detectedPlatform","normalizePlatform","normalizeArch","browserInfo","getBrowserInfo","browserPatterns","major","minor","patch","arch","platform","_platformHeaders","getPlatformHeaders","getDefaultFetch","makeReadableStream","ReadableStream","ReadableStreamFrom","iterable","iter","controller","done","ReadableStreamToAsyncIterable","stream","reader","cancelPromise","CancelReadableStream","FallbackEncoder","default_format","default_formatter","formatters","RFC1738","hex_table","limit","_defaultEncoder","charset","_kind","$0","out","is_buffer","maybe_map","mapped","array_prefix_generators","push_to_array","value_or_array","toISOString","date","is_non_nullish_primitive","sentinel","inner_stringify","generateArrayPrefix","commaRoundTrip","allowEmptyArrays","strictNullHandling","skipNulls","encodeDotInKeys","encoder","sort","allowDots","serializeDate","formatter","encodeValuesOnly","sideChannel","tmp_sc","find_flag","key_value","obj_keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","normalize_stringify_options","arrayFormat","joined","concatBytes","buffers","encodeUTF8_","encodeUTF8","decodeUTF8_","decodeUTF8","bytes","decoder","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","patternIndex","findNewlineIndex","endIndex","line","findDoubleNewlineIndex","levelNumbers","parseLogLevel","maybeLevel","sourceName","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","_Stream_client","Stream","consumed","sse","_iterSSEMessages","readableStream","iterLines","lineDecoder","teeIterator","queue","ctrl","sseDecoder","SSEDecoder","sseChunk","iterSSEChunks","newData","fieldname","partition","delimiter","defaultParseResponse","requestLogID","retryOfRequestLogID","startTime","contentType","mediaType","json","addRequestID","_APIPromise_client","APIPromise","responsePromise","parseResponse","onfulfilled","onrejected","onfinally","_AbstractPage_client","AbstractPage","nextOptions","PagePromise","request","Page","CursorPage","ConversationCursorPage","cursor","checkFileSupport","process","isOldNode","makeFile","fileBits","getName","isAsyncIterable","maybeMultipartFormRequestOptions","fetch","hasUploadableValue","createForm","multipartFormRequestOptions","supportsFormDataMap","supportsFormData","fetchObject","cached","FetchResponse","addFormValue","isNamedBlob","isUploadable","isBlobLike","isFileLike","isResponseLike","toFile","getBytes","constructor","propsForError","APIResource","encodeURIPath","EMPTY","pathEncoder","statics","postPath","invalidSegments","previousValue","encoded","pathOnly","invalidSegmentPattern","lastEnd","underline","spaces","arrows","completionID","isChatCompletionFunctionTool","tool","isAutoParsableResponseFormat","response_format","isAutoParsableTool","maybeParseChatCompletion","completion","hasAutoParseableInput","choice","assertToolCallsAreChatCompletionFunctionToolCalls","parseChatCompletion","choices","toolCall","parseToolCall","parseResponseFormat","inputTool","shouldParseToolCall","toolCalls","validateInputTools","tools","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","EventStream","reject","executor","listener","openAIError","isRunnableFunctionWithParse","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","chatCompletion","emit","tool_call","finalMessage","finalContent","finalFunctionCall","finalFunctionCallResult","signal","role","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","functionsByName","tool_call_id","parsed","rawContent","total","usage","ChatCompletionRunner","runner","STR","NUM","ARR","OBJ","NULL","BOOL","NAN","INFINITY","MINUS_INFINITY","INF","SPECIAL","ATOM","COLLECTION","ALL","Allow","PartialJSON","MalformedJSON","parseJSON","allowPartial","_parseJSON","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","parseNum","escape","partialParse","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","chatId","choiceSnapshot","_g","_h","_i","_j","_l","toolCallDelta","toolCallSnapshot","_m","_n","_o","toolCallIndex","responseFormat","snapshot","finalizeChatCompletion","finish_reason","logprobs","other","refusal","function_call","tool_calls","pushQueue","readQueue","created","model","system_fingerprint","choiceRest","messageRest","toolRest","fnRest","ChatCompletionStreamingRunner","MessagesAPI.Messages","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","row","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Transcriptions","Translations","Audio","TranscriptionsAPI.Transcriptions","TranslationsAPI.Translations","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","TranscriptionSessions","SessionsAPI.Sessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","Sessions","sessionID","threadID","ChatKit","ThreadsAPI.Threads","Threads","messageID","thread_id","stepID","run_id","runID","toFloat32Array","base64Str","buf","binaryStr","readEnv","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","runId","runs","run","thread","threadId","deltaValue","accValue","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","currentContent","accumulatedRunStep","accumulated","contentElement","StepsAPI.Steps","include","sleepInterval","headerInterval","headerIntervalMs","Runs","Steps","RunsAPI.Runs","Beta","RealtimeAPI.Realtime","ChatKitAPI.ChatKit","AssistantsAPI.Assistants","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","FilesAPI.Files","conversationID","itemID","conversation_id","Conversations","ItemsAPI.Items","Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","OutputItems","outputItemID","eval_id","OutputItemsAPI.OutputItems","evalID","Evals","pollInterval","maxWait","TERMINAL_STATES","file","Methods","Alpha","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","permissionID","fine_tuned_model_checkpoint","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","CheckpointsAPI.Checkpoints","FineTuning","MethodsAPI.Methods","JobsAPI.Jobs","AlphaAPI.Alpha","GraderModels","GraderModelsAPI.GraderModels","Images","Models","Moderations","Calls","callID","ClientSecrets","ClientSecretsAPI.ClientSecrets","CallsAPI.Calls","maybeParseResponse","parseTextFormat","addOutputText","getInputToolByName","input_tools","rsp","texts","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","starting_after","maybeEmit","parsedResponse","finalizeResponse","InputItems","responseID","InputTokens","Responses","InputItemsAPI.InputItems","InputTokensAPI.InputTokens","Parts","uploadID","Uploads","PartsAPI.Parts","allSettledWithThrow","promises","rejected","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","files","fileIds","configuredConcurrency","concurrencyLimit","fileIterator","allFileIds","processFiles","fileObj","workers","fileResponse","fileInfo","VectorStores","FileBatchesAPI.FileBatches","Videos","videoID","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","Webhooks","secret","tolerance","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","signatures","decodedSecret","signedPayload","signature","signatureBytes","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","OpenAI","baseURL","apiKey","organization","project","webhookSecret","API.Completions","API.Chat","API.Embeddings","API.Files","API.Images","API.Audio","API.Moderations","API.Models","API.FineTuning","API.Graders","API.VectorStores","API.Webhooks","API.Beta","API.Batches","API.Uploads","API.Responses","API.Realtime","API.Conversations","API.Evals","API.Containers","API.Videos","Errors.OpenAIError","defaultLogLevel","Shims.getDefaultFetch","Opts.FallbackEncoder","qs.stringify","Errors.APIError","defaultBaseURL","defaultQuery","remainingRetries","optionsInput","retriesRemaining","maxRetries","req","timeout","retryLogStr","Errors.APIUserAbortError","headersTime","retryMessage","isTimeout","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","specialHeaders","responseInfo","shouldRetry","Shims.CancelReadableStream","errText","errJSON","errMessage","Pagination.PagePromise","isReadableBody","fetchOptions","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","retryAfterHeader","timeoutSeconds","numRetries","sleepSeconds","jitter","inputOptions","retryCount","bodyHeaders","reqHeaders","idempotencyHeaders","rawHeaders","Shims.ReadableStreamFrom","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","Uploads.toFile","UploadsAPIUploads","SchemaType","ExecutableCodeLanguage","Outcome","POSSIBLE_ROLES","HarmCategory","HarmBlockThreshold","HarmProbability","BlockReason","FinishReason","TaskType","FunctionCallingMode","DynamicRetrievalMode","GoogleGenerativeAIError","GoogleGenerativeAIResponseError","GoogleGenerativeAIFetchError","statusText","errorDetails","GoogleGenerativeAIRequestInputError","GoogleGenerativeAIAbortError","DEFAULT_BASE_URL","DEFAULT_API_VERSION","PACKAGE_VERSION","PACKAGE_LOG_HEADER","Task","RequestUrl","task","requestOptions","apiVersion","getClientHeaders","clientHeaders","getHeaders","customHeaders","headerName","headerValue","constructModelRequest","buildFetchOptions","makeModelRequest","fetchFn","makeRequest","handleResponseError","handleResponseNotOk","addHelpers","hadBadFinishReason","formatBlockErrorMessage","getText","getFunctionCalls","textStrings","functionCalls","badFinishReasons","firstCandidate","__await","__asyncGenerator","_arguments","generator","verb","resume","settle","fulfill","responseLineRE","processStream","inputStream","responseStream","getResponseStream","stream1","stream2","generateResponseSequence","getResponsePromise","allResponses","aggregateResponses","currentText","pump","responses","lastResponse","aggregatedResponse","candidateIndex","newPart","generateContentStream","generateContent","responseJson","formatSystemInstruction","formatNewContent","newParts","partOrString","assignRoleToPartsAndValidateSendMessageRequest","userContent","functionContent","hasUserContent","hasFunctionContent","formatCountTokensInput","modelParams","formattedGenerateContentRequest","containsGenerateContentRequest","formatGenerateContentInput","formattedRequest","formatEmbedContentInput","VALID_PART_FIELDS","VALID_PARTS_PER_ROLE","validateChatHistory","history","prevContent","currContent","countFields","validParts","isValidResponse","SILENT_ERROR","ChatSession","_requestOptions","generateContentRequest","chatSessionRequestOptions","finalResult","responseContent","blockErrorMessage","streamPromise","_ignored","streamResult","countTokens","singleRequestOptions","embedContent","batchEmbedContents","requestsWithModel","GenerativeModel","formattedParams","generativeModelRequestOptions","startChatParams","batchEmbedContentRequest","GoogleGenerativeAI","cachedContent","disallowedDuplicates","modelParamsComp","cachedContentComp","modelParamsFromCache","getGoogleApiKey","secretData","createGoogleGenAIClient","getMimeType","filename","ext","fileToBase64","editImage","prompt","imageFiles","aspectRatio","resolution","enableSearchGrounding","ai","genModel","imageParts","base64Data","textPart","promptParts","generationConfig","imageData","aiText","binaryString","consoleLogger","getOpenAIApiKey","createOpenAIClient","withOpenAI","operation","fallback","getImageMimeType","analyzeImages","imageContents","outputText","title","titleLineIndex","lowerLine","fallbackError","transcribeAudio","audioFile","transcribedText","AI_IMAGE_ANALYSIS_PROMPT","FEED_PAGE_SIZE","DEFAULT_QUICK_ACTIONS","editSchema","z.object","z.boolean","EditImageModal","currentTitle","currentDescription","currentVisible","onUpdateSuccess","isGenerating","setIsGenerating","isRecording","setIsRecording","isTranscribing","setIsTranscribing","mediaRecorderRef","audioChunksRef","loadingCollections","setLoadingCollections","zodResolver","fetchPictureCollections","collectionIds","handleToggleCollection","collectionId","newSet","onSubmit","handleClose","handleMagicGenerate","handleMicrophone","mediaRecorder","audioBlob","trimmed","newDescription","track","Edit3","Bookmark","GitBranch","Sparkles","Loader2","MicOff","Mic","roundNumber","num","decimal","checkIsNumber","handleCallback","easeOut","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","animations","handleCancelAnimationFrame","animation","handleCancelAnimation","contextInstance","handleSetupAnimation","animationName","animationTime","lastStep","frameTime","animationProgress","animationType","isValidTargetState","targetState","positionX","positionY","animate","setTransformState","scaleDiff","positionXDiff","positionYDiff","newScale","newPositionX","newPositionY","getComponentsSizes","wrapperComponent","contentComponent","wrapperWidth","wrapperHeight","contentWidth","contentHeight","newContentWidth","newContentHeight","newDiffWidth","newDiffHeight","getBounds","diffWidth","diffHeight","centerZoomedOut","scaleWidthFactor","scaleHeightFactor","minPositionX","maxPositionX","minPositionY","maxPositionY","calculateBounds","bounds","boundLimiter","minBound","maxBound","isActive","handleCalculateBounds","getMouseBoundedPosition","limitToBounds","paddingValueX","paddingValueY","paddingX","paddingY","handleCalculateZoomPositions","mouseX","mouseY","scaleDifference","calculatedPositionX","calculatedPositionY","newPositions","checkZoomBounds","zoom","minScale","maxScale","zoomPadding","enablePadding","scalePadding","minScaleWithPadding","isPanningStartAllowed","excluded","isInitialized","targetIsShadowDom","isWrapperChild","isAllowed","isExcluded","isExcludedNode","isPanningAllowed","isPanning","setup","handlePanningSetup","handleTouchPanningSetup","touches","oneFingerTouch","handlePanToBounds","xChanged","yChanged","mousePosX","mousePosY","handleNewPosition","getPanningClientPosition","clientX","clientY","startCoords","transformState","panning","lockAxisX","lockAxisY","getPaddingValue","disablePadding","isVelocityCalculationAllowed","velocityAnimation","disabledVelocity","isVelocityAllowed","velocity","getVelocityMoveTime","equalToMove","sensitivity","getVelocityPosition","newPosition","startPosition","currentPosition","isLocked","minPosition","maxPosition","minTarget","maxTarget","calculatedPosition","getSizeMultiplier","defaultMultiplier","handleCalculateVelocity","lastMousePosition","velocityTime","now","sizeMultiplier","distanceX","distanceY","velocityX","velocityY","interval","speed","handleVelocityPanning","alignmentAnimation","zoomAnimation","sizeX","sizeY","velocityAlignmentTime","alignAnimationTime","moveAnimationTime","finalAnimationTime","maxTargetX","minTargetX","maxTargetY","minTargetY","startState","alignAnimation","alignStep","customStep","currentPositionX","currentPositionY","handlePanningStart","handleAlignToBounds","customAnimationTime","isDisabled","handlePanning","handlePanningEnd","velocityDisabled","wrapperRect","contentRect","isZoomed","shouldAnimate","handleZoomToPoint","handleAlignToScaleBounds","mousePositionX","mousePositionY","initialSetup","baseClasses","createState","createSetup","newSetup","validValue","validParameter","dataType","handleCalculateButtonZoom","smooth","targetScale","handleZoomToViewCenter","resetTransformations","onResetTransformation","initialTransformation","newBounds","boundedPositions","newState","wrapper","offset","wrapperOffset","contentOffset","xOff","yOff","calculateZoomToNode","customZoom","nodeRect","nodeOffset","nodeLeft","nodeTop","nodeWidth","nodeHeight","scaleX","scaleY","offsetX","offsetY","zoomIn","zoomOut","setTransform","resetTransform","centerView","getCenterPosition","zoomToElement","getControls","getContext","makePassiveEventOption","matchPrefix","exclude","cancelTimeout","getTransformStyles","centerPositionX","centerPositionY","mergeRefs","isWheelAllowed","wheelDisabled","touchPadDisabled","getDeltaY","getDelta","customDelta","getMousePosition","handleCalculateWheelZoom","disable","getTarget","paddingEnabled","handleWheelZoomStop","previousWheelEvent","isPinchStartAllowed","isPinchAllowed","pinchStartDistance","calculateTouchMidPoint","firstPointX","firstPointY","secondPointX","secondPointY","getTouchDistance","calculatePinchZoom","currentDistance","pinchStartScale","touchProportion","wheelStopEventTime","wheelAnimationTime","handleWheelStart","onWheelStart","onZoomStart","handleWheelZoom","onWheel","onZoom","wheel","smoothStep","zoomStep","mousePosition","isPaddingDisabled","isLimitedToBounds","handleWheelStop","onWheelStop","onZoomStop","hasStoppedZooming","getTouchCenter","totalX","totalY","handlePinchStart","distance","center","handlePinchZoom","midPoint","panX","panY","finalX","finalY","handlePinchStop","pinchMidpoint","handleDoubleClickStop","handleDoubleClickResetMode","getDoubleClickScale","handleDoubleClick","doubleClickStopEventTimer","isDoubleClickAllowed","ZoomPanPinch","_this","newProps","passive","currentDocument","currentWindow","isCentered","centerOnInit","hasTarget","entries_1","currentWidth","currentHeight","keysPressed","onPanningStart","onPanning","onPanningStop","onPinchingStart","onPinching","onPinchingStop","isDoubleTap","isPanningAction","isPinchAction","onTransformed","ctx_1","getContent","TransformWrapper","instance","useImperativeHandle","localRef","styleInject","insertAt","css_248z","TransformComponent","wrapperClass","contentClass","wrapperStyle","contentStyle","wrapperProps","cleanupWindowEvents","wrapperRef","Textarea","RADIO_NAME","createRadioContext","createRadioScope","RadioProvider","useRadioContext","Radio","__scopeRadio","onCheck","radioProps","RadioBubbleInput","RadioIndicator","ARROW_KEYS","RADIO_GROUP_NAME","createRadioGroupContext","createContextScope2","useRadioScope","RadioGroupProvider","useRadioGroupContext","RadioGroup","__scopeRadioGroup","jsx2","Primitive2","RadioGroupItem","radioScope","useComposedRefs2","isArrowKeyPressedRef","handleKeyUp","composeEventHandlers2","INDICATOR_NAME2","RadioGroupIndicator","Item2","Indicator","RadioGroupPrimitive.Root","RadioGroupPrimitive.Item","RadioGroupPrimitive.Indicator","Circle","PublishDialog","onPublish","originalTitle","originalImageId","isPublishing","editingPostId","publishOption","setPublishOption","setTitle","setDescription","loadCollections","toggleCollection","RefreshCw","Upload","sides","round","floor","createCoords","oppositeSideMap","oppositeAlignmentMap","clamp","evaluate","getSide","placement","getAlignment","getOppositeAxis","getAxisLength","yAxisSides","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","lrPlacement","rlPlacement","tbPlacement","btPlacement","getSideList","side","isStart","getOppositeAxisPlacements","flipAlignment","expandPaddingObject","getPaddingObject","rectToClientRect","rect","computeCoordsFromPlacement","_ref","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","computePosition","strategy","validMiddleware","statefulPlacement","middlewareData","resetCount","nextX","nextY","detectOverflow","_await$platform$isEle","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","shouldAddOffset","alignmentOffset","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","placements","overflows","overflowsData","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","resetPlacement","_overflowsData$filter2","currentSideAxis","getSideOffsets","isAnySideFullyClipped","hide","originSides","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","limitShift","rawOffset","computedOffset","limitMin","limitMax","_middlewareData$offse2","isOriginSide","_state$middlewareData","_state$middlewareData2","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","xMin","xMax","yMin","yMax","nextDimensions","hasWindow","getNodeName","isNode","getWindow","_node$ownerDocument","getDocumentElement","isElement","isShadowRoot","invalidOverflowDisplayValues","isOverflowElement","overflowX","overflowY","display","getComputedStyle","tableElements","isTableElement","topLayerSelectors","isTopLayer","selector","transformProperties","willChangeValues","containValues","isContainingBlock","elementOrCss","webkit","isWebKit","getContainingBlock","isLastTraversableNode","lastTraversableNodeNames","getNodeScroll","getNearestOverflowAncestor","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","getComputedStyle$1","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","getWindowScrollBarX","leftScroll","getHTMLOffset","documentElement","scroll","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","SCROLLBAR_MAX","getViewportRect","visualViewport","visualViewportBased","windowScrollbarX","bodyStyles","bodyMarginInline","clippingStableScrollbarWidth","absoluteOrFixed","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","rectsAreEqual","observeMove","onMove","io","_io","refresh","skip","threshold","elementRectForRootMargin","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","ratio","autoUpdate","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset$1","shift$1","flip$1","size$1","hide$1","arrow$1","limitShift$1","mergedOptions","platformWithCache","computePosition$1","isClient","getDPR","roundByDPR","dpr","useLatestRef","useFloating","externalReference","externalFloating","whileElementsMounted","latestMiddleware","setLatestMiddleware","_reference","_setReference","_floating","_setFloating","setReference","referenceRef","setFloating","floatingRef","floatingEl","dataRef","hasWhileElementsMounted","whileElementsMountedRef","platformRef","openRef","fullData","isMountedRef","floatingStyles","initialStyles","isRef","arrow$2","deps","Arrow","arrowProps","POPPER_NAME","createPopperContext","createPopperScope","PopperProvider","usePopperContext","Popper","__scopePopper","anchor","setAnchor","ANCHOR_NAME","PopperAnchor","virtualRef","anchorProps","anchorRef","previousAnchor","PopperContentProvider","useContentContext","PopperContent","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPaddingProp","sticky","hideWhenDetached","updatePositionStrategy","onPlaced","setContent","setArrow","arrowSize","arrowWidth","arrowHeight","desiredPlacement","collisionPadding","hasExplicitBoundaries","isNotNull","isPositioned","anchorWidth","anchorHeight","floatingUIarrow","transformOrigin","placedSide","placedAlign","getSideAndAlignFromPlacement","handlePlaced","arrowX","arrowY","cannotCenterArrow","contentZIndex","setContentZIndex","ARROW_NAME","OPPOSITE_SIDE","PopperArrow","contentContext","baseSide","ArrowPrimitive.Root","isArrowHidden","noArrowAlign","arrowXCenter","arrowYCenter","Anchor","SELECTION_KEYS","FIRST_KEYS","LAST_KEYS","FIRST_LAST_KEYS","SUB_OPEN_KEYS","SUB_CLOSE_KEYS","MENU_NAME","createMenuContext","createMenuScope","usePopperScope","MenuProvider","useMenuContext","MenuRootProvider","useMenuRootContext","Menu","__scopeMenu","popperScope","isUsingKeyboardRef","handleOpenChange","handlePointer","PopperPrimitive.Root","MenuAnchor","PopperPrimitive.Anchor","MenuPortal","MenuContentProvider","useMenuContentContext","MenuContent","rootContext","MenuRootContentModal","MenuRootContentNonModal","MenuContentImpl","disableOutsideScroll","currentItemId","setCurrentItemId","timerRef","searchRef","pointerGraceTimerRef","pointerGraceIntentRef","pointerDirRef","lastPointerXRef","ScrollLockWrapper","scrollLockWrapperProps","handleTypeaheadSearch","search","currentMatch","nextMatch","getNextMatch","newItem","updateSearch","isPointerMovingToSubmenu","isPointerInGraceArea","intent","PopperPrimitive.Content","getOpenState","isKeyDownInside","isModifierKey","isCharacterKey","whenMouse","pointerXHasChanged","newDir","MenuGroup","LABEL_NAME","MenuLabel","labelProps","ITEM_SELECT","MenuItem","isPointerDownRef","menuItem","itemSelectEvent","MenuItemImpl","isTypingAhead","textValue","isFocused","setIsFocused","textContent","setTextContent","CHECKBOX_ITEM_NAME","MenuCheckboxItem","checkboxItemProps","ItemIndicatorProvider","getCheckedState","MenuRadioGroup","handleValueChange","RADIO_ITEM_NAME","MenuRadioItem","radioItemProps","ITEM_INDICATOR_NAME","useItemIndicatorContext","MenuItemIndicator","itemIndicatorProps","indicatorContext","SEPARATOR_NAME","MenuSeparator","separatorProps","MenuArrow","PopperPrimitive.Arrow","SUB_NAME","MenuSubProvider","useMenuSubContext","SUB_TRIGGER_NAME","MenuSubTrigger","subContext","openTimerRef","onPointerGraceIntentChange","clearOpenTimer","pointerGraceTimer","rightSide","bleed","contentNearEdge","contentFarEdge","SUB_CONTENT_NAME","MenuSubContent","subContentProps","isCloseKey","normalizedSearch","char","currentMatchIndex","wrappedValues","isPointInPolygon","point","polygon","ii","jj","xi","yi","xj","yj","area","cursorPos","Root3","Anchor2","Group","CheckboxItem","RadioItem","ItemIndicator","Separator","Arrow2","SubTrigger","SubContent","DROPDOWN_MENU_NAME","createDropdownMenuContext","useMenuScope","DropdownMenuProvider","useDropdownMenuContext","DropdownMenu","__scopeDropdownMenu","menuScope","MenuPrimitive.Root","DropdownMenuTrigger","MenuPrimitive.Anchor","DropdownMenuPortal","MenuPrimitive.Portal","DropdownMenuContent","MenuPrimitive.Content","isRightClick","DropdownMenuGroup","MenuPrimitive.Group","DropdownMenuLabel","MenuPrimitive.Label","DropdownMenuItem","MenuPrimitive.Item","DropdownMenuCheckboxItem","MenuPrimitive.CheckboxItem","DropdownMenuRadioGroup","radioGroupProps","MenuPrimitive.RadioGroup","DropdownMenuRadioItem","MenuPrimitive.RadioItem","DropdownMenuItemIndicator","MenuPrimitive.ItemIndicator","DropdownMenuSeparator","MenuPrimitive.Separator","DropdownMenuArrow","MenuPrimitive.Arrow","DropdownMenuSubTrigger","subTriggerProps","MenuPrimitive.SubTrigger","DropdownMenuSubContent","MenuPrimitive.SubContent","Label2","CheckboxItem2","RadioItem2","ItemIndicator2","Separator2","SubTrigger2","SubContent2","DropdownMenuPrimitive.Root","DropdownMenuPrimitive.Trigger","DropdownMenuPrimitive.SubTrigger","ChevronRight","DropdownMenuPrimitive.SubContent","DropdownMenuPrimitive.Portal","DropdownMenuPrimitive.Content","DropdownMenuPrimitive.Item","DropdownMenuPrimitive.CheckboxItem","DropdownMenuPrimitive.ItemIndicator","DropdownMenuPrimitive.RadioItem","DropdownMenuPrimitive.Label","DropdownMenuPrimitive.Separator","StylePresetSelector","presets","activeId","preset","ImageLightbox","imageTitle","onPromptSubmit","showPrompt","showPublish","generatedImageUrl","totalCount","onNavigate","onPreload","showWizardFeatures","promptTemplates","onApplyTemplate","onSaveTemplate","onDeleteTemplate","onOptimizePrompt","isOptimizing","onMicrophoneToggle","showQuickPublish","onQuickPublish","externalPrompt","onPromptChange","promptHistory","historyIndex","onNavigateHistory","onManualPromptEdit","onOpenInWizard","quickActions","lightboxLoaded","setLightboxLoaded","setIsPanning","setScale","internalPrompt","setInternalPrompt","showPublishDialog","setShowPublishDialog","showPromptField","setShowPromptField","showInfoPopup","setShowInfoPopup","tapTimeoutRef","swipeStartRef","isSwipingRef","isPanningRef","lightboxPrompt","setLightboxPrompt","isTypingInInput","handleSwipeStart","handleSwipeEnd","deltaTime","handlePromptSubmit","handlePublishClick","handlePublish","History","historyPrompt","reverseIndex","actualIndex","ArrowUp","FileText","Plus","Wand2","Save","ArrowDown","createStoreImpl","setState","partial","replace","nextState","previousState","api","createStore","identity","useStore","slice","createImpl","useBoundStore","createJSONStorage","getStorage","storage","str2","toThenable","onFulfilled","_onRejected","_onFulfilled","onRejected","persist","baseOptions","persistedState","currentState","hasHydrated","hydrationVersion","hydrationListeners","finishHydrationListeners","setItem","savedSetState","configResult","stateFromStorage","hydrate","currentVersion","_a2","postRehydrationCallback","deserializedStorageValue","migration","migrationResult","migrated","migratedState","newOptions","preloadImageHelper","img","useNavigationStore","limitedHistory","newHistory","previousData","image","returnPath","selectNavigationData","selectWizardImage","selectWizardReturnPath","useWizardContext","wizardInitialImage","wizardReturnPath","setWizardImage","clearWizardImage","creationWizardOpen","creationWizardMode","setCreationWizardOpen","MagicWizardButton","explicitPostId","explicitPictureId","handleClick","urlPath","postMatch","realPictureId","pictureIdMatch","downloadImage","downloadFromDataUri","defaultFilename","extractFilenameFromUrl","downloadFromUrl","dataUri","pathname","generateFilename","PostNavigationContext","usePostNavigation","formatDate","dateStr","diff","hours","isLikelyFilename","is","objectIs","useDebugValue","useSyncExternalStore$2","getSnapshot","_useState","checkIfSnapshotChanged","latestGetSnapshot","useSyncExternalStore$1","shim","useSyncExternalStoreShim_production","didWarnOld18Alpha","didWarnUncachedGetSnapshot","cachedValue","useSyncExternalStoreShim_development","shimModule","useIsHydrated","useSyncExternalStore","AVATAR_NAME","createAvatarContext","AvatarProvider","useAvatarContext","Avatar","__scopeAvatar","avatarProps","imageLoadingStatus","setImageLoadingStatus","IMAGE_NAME","AvatarImage","onLoadingStatusChange","imageProps","useImageLoadingStatus","handleLoadingStatusChange","FALLBACK_NAME","AvatarFallback","delayMs","fallbackProps","canRender","setCanRender","resolveLoadingStatus","referrerPolicy","crossOrigin","isHydrated","imageRef","loadingStatus","setLoadingStatus","updateStatus","handleLoad","handleError","Image","Fallback","AvatarPrimitive.Root","AvatarPrimitive.Image","AvatarPrimitive.Fallback","ProfilesContext","useProfiles","UserAvatarBlock","userId","avatarUrl","createdAt","showDate","hoverStyle","textSize","profiles","fetchProfile","profile","effectiveAvatarUrl","effectiveDisplayName","nameClass","dateClass","UserIcon","PhotoCard","author","authorId","likes","comments","isLiked","onLike","onDelete","isVid","onEdit","authorAvatarUrl","showContent","responsive","navigationData","setNavigationData","preloadImage","localIsLiked","setLocalIsLiked","localLikes","setLocalLikes","showEditModal","setShowEditModal","showLightbox","setShowLightbox","setIsPublishing","setGeneratedImageUrl","versionCount","setVersionCount","isOwner","handleLike","handleDelete","fetchError","deleteError","userIdFromUrl","storageError","handleDownload","handleLightboxOpen","handleNavigate","newIndex","newPost","handlePreload","targetIndex","targetPost","uint8Array","imageBlob","dataUrl","newTitle","currentImageUrl","uploadError","uploadData","publicUrl","handleCardClick","Heart","MessageCircle","Layers","Download","Maximize","Share2","IS_SERVER","SCOPE","scheduledEffects","runningEffects","currentObserver","currentObservers","currentObserversIndex","effects","NOOP","STATE_CLEAN","STATE_CHECK","STATE_DIRTY","STATE_DISPOSED","flushEffects","runEffects","runTop","updateCheck","dispose","peek","untrack","tick","getScope","scoped","run2","setContext","onDispose","disposable","isFunction$1","disposeNode","emptyDisposal","removeSourceObservers","callable","compute2","prevScope","prevObserver","error2","read","write","ScopeNode","ScopeProto","ComputeNode","ComputeProto","isNotEqual","createComputation","prevObservers","prevObserversIndex","updateObservers","swap","signal2","isReadSignal","computed","effect$1","effect2","effectResult","isWriteSignal","isNull","isNil","serverEffect","EVENT","DOM_EVENT","DOMEvent","EventTriggers","isDOMEvent","returnValue","EventsTarget","listenEvent","EventsController","__privateAdd","_target","_controller","__privateSet","__privateGet","anySignal","reason","signals","onAbort","isPointerEvent","isTouchEvent","isMouseEvent","isKeyboardEvent","wasEnterKeyPressed","isKeyboardClick","isDOMNode","setAttribute","host","setStyle","toggleClass","unwrapDeep","provide","provideContext","hasProvidedValue","hasProvidedContext","PROPS","METHODS","ON_DISPATCH","EMPTY_PROPS","Instance","Component2","_Instance_instances","_setupCallbacks","_attachCallbacks","_connectCallbacks","_destroyCallbacks","stateFactory","prop2","createInstanceProps","__privateMethod","attachAttrs_fn","attachStyles_fn","setAttr_fn","setStyle_fn","$props","currentInstance","createComponent","component","ViewController","$$","vars","propertyKey","descriptor","State","record","_descriptors","store","camelToKebabCase","kebabToCamelCase","kebabToPascalCase","kebabToTitleCase","uppercaseFirstChar","ReactScopeContext","WithScope","useReactScope","useReactContext","createClientComponent","forwardComponent","forwardRef","parentScopeRef","scopeRef","stateRef","state2","createInternalState","initComponent","onAttach","attachToHost","detachFromHost","onRefChange","state3","renderProps","prevPropNames","newPropNames","AttachEffect","eventTypeToCallbackName","onDispatch","callbackProp","isAttr","delimeter","escapeDelimeter","iDelimeter","isAmpersand","SETUP","classSplitRE","parseClassAttr","classes","styleSplitRE","stylesDelimeterRE","parseStyleAttr","MaverickServerElement","ServerAttributes","ServerStyle","ServerClassList","_tokens","attrsToProps","createServerComponent","ServerComponent","useStateContext","useSignal","scheduleReactUpdate","ariaBool","keysOf","deferredPromise","res","rej","waitTimeout","delay","animationFrameThrottle","lastArgs","throttle","requestIdleCallback","waitIdlePeriod","deadline","createReactComponent","moz","document$1","vendor","fscreen","functionThrottle","throttledFn","leading","trailing","cancel","flush","call","throttleWrapper","callNow","functionDebounce","callFirst","debouncedFn","clear","debounceWrapper","t2","e2","n2","o2","t3","t4","l2","r2","e3","r3","i2","s2","d2","h2","a2","g2","p2","W2","T2","B2","F2","V2","Icon$0","Icon$5","Icon$8","Icon$11","Icon$13","Icon$16","Icon$19","Icon$22","Icon$24","chromecast","Icon$26","Icon$27","Icon$31","Icon$33","Icon$34","Icon$35","Icon$39","Icon$40","Icon$53","Icon$54","Icon$56","Icon$59","Icon$60","Icon$61","Icon$62","Icon$63","Icon$74","Icon$77","Icon$81","Icon$88","Icon$104","Icon$105","isVideoQualitySrc","UA","IS_IOS","IS_IPHONE","IS_CHROME","IS_SAFARI","canOrientScreen","canRotateScreen","canPlayAudioType","audio","canPlayVideoType","video","canPlayHLSNatively","canUsePictureInPicture","canUseVideoPresentation","canChangeVolume","getMediaSource","getSourceBuffer","isHLSSupported","MediaSource","isTypeSupported","SourceBuffer","isSourceBufferValid","isDASHSupported","TimeRange","_ranges","getTimeRangesStart","getTimeRangesEnd","normalizeTimeIntervals","intervals","normalized","updateTimeIntervals","AUDIO_EXTENSIONS","AUDIO_TYPES","VIDEO_EXTENSIONS","VIDEO_TYPES","HLS_VIDEO_EXTENSIONS","DASH_VIDEO_EXTENSIONS","HLS_VIDEO_TYPES","DASH_VIDEO_TYPES","isAudioSrc","isVideoSrc","isHLSSrc","isDASHSrc","canGoogleCastSrc","isMediaStream","appendParamsToURL","baseUrl","preconnect","rel","exists","pendingRequests","loadScript","getRequestCredentials","getDownloadFile","download","isValidFileDownload","CROSS_ORIGIN","READY_STATE","UPDATE_ACTIVE_CUES","CAN_LOAD","ON_MODE_CHANGE","NATIVE","NATIVE_HLS","TextTrackSymbol","isCueActive","cue","watchActiveTextTrack","tracks","currentTrack","onModeChange","kinds","track2","off","TextTrack","_TextTrack_instances","_canLoad","_currentTime","_mode","_metadata","_regions","_cues","_activeCues","parseContent_fn","activeCuesChanged_fn","load_fn","currentTime","activeCues","changed","prod","parseText","VTTCue","VTTRegion","parseJSON_fn","ready_fn","cues","regions","metadata","error_fn","native","loadEvent","parseJSONCaptionsFile","captionRE","isTrackCaptionKind","Cue","Region","region","content2","mediaState","RESET_ON_SRC_QUALITY_CHANGE","RESET_ON_SRC_CHANGE","softResetMediaState","$media","isSourceQualityChange","boundTime","clippedTime","isEnd","mediaContext","useMediaContext","MediaRemoteControl","_MediaRemoteControl_instances","_player","_prevTrackIndex","_logger","player","dispatchRequest_fn","lockType","duration","endTime","volume","rate","gain","prefersLoop","noPlayerWarning_fn","LocalMediaStorage","_data","muted","ended","quality","mediaId","playerId","savedData","savedTime","ADD","REMOVE","RESET","SELECT","READONLY","SET_READONLY","ON_RESET","ON_REMOVE","ON_USER_SELECT","ListSymbol","readonly","SELECTED","SelectList","AudioTrackList","decimalPlaces","getNumberOfDecimalPlaces","clampNumber","isEventInside","rafJobs","processJobs","job","scheduleRafJob","setAttributeIfEmpty","setARIALabel","$label","updateAriaDescription","isElementVisible","checkVisibility","observeVisibility","isElementParent","test","onPress","isTouchPinchEvent","requestScopedAnimationFrame","autoPlacement","offsetVarName","xOffset","yOffset","floatingPlacement","isTop","negateX","negateY","hasFlipped","hasAnimation","NativeTextRenderer","_NativeTextRenderer_instances","_display","_video","_track","_tracks","onChange_fn","attachTrack_fn","createTrackElement_fn","isDefault","isSupported","copyCues_fn","isShowing","TextRenderers","media","_TextRenderers_instances","_textTracks","_renderers","_media","_nativeDisplay","_nativeRenderer","_customRenderer","textTracks","watchControls_fn","detach_fn","onAddTrack_fn","onRemoveTrack_fn","update_fn","renderer","addNativeTrack_fn","nativeControls","removeNativeTrack_fn","customRenderer","TextTrackList","_TextTrackList_instances","_defaults","_storage","_preferredLang","_selectTracks","showCaptions","preferredTrack","defaultTrack","kind2","isCaptionsKind","saveCaptionsTrack_fn","_pendingRemoval","_onTrackModeChangeBind","onTrackModeChange_fn","saveLang_fn","isTrack","SET_AUTO","ENABLE_AUTO","QualitySymbol","VideoQualityList","_auto","auto","sortVideoQualities","qualities","compareVideoQualityAsc","isHTMLAudioElement","isHTMLVideoElement","isHTMLMediaElement","MediaPlayerController","MEDIA_KEY_SHORTCUTS","MODIFIER_KEYS","BUTTON_SELECTORS","IGNORE_SELECTORS","MediaKeyboardController","_MediaKeyboardController_instances","_seekTotal","_timeSlider","onTargetChange_fn","keyDisabled","keyTarget","$active","activePlayer","onKeyUp_fn","onKeyDown_fn","onPreventVideoKeys_fn","focusedEl","getMatchingMethod_fn","forwardTimeKeyboardEvent_fn","volumeSlider","isNumberPress","modifierKeyPressed","seeking_fn","playbackRate","keyShortcuts","method2","combinations","replaceSymbolKeys","combo","modifierKeys","modKey","modKeyProp","calcSeekAmount_fn","seekBy","forward","SYMBOL_KEY_MAP","ARIAKeyShortcuts","shortcut","_shortcut","ariaKeys","shortcuts","MediaControls","_MediaControls_instances","_idleTimer","_pausedTracking","_hideOnMouseLeave","_isMouseOutside","_focusedItem","_canIdle","canIdle","hideControlsOnMouseLeave","clearIdleTimer_fn","changeVisibility_fn","init_fn","viewType","watchMouse_fn","watchPaused_fn","onPlay","onPlay_fn","onPause","onPause_fn","onEnd","onEnd_fn","started","pointer","paused","events","shouldHideOnMouseLeave","onStopIdle_fn","onMouseEnter_fn","onMouseLeave_fn","autoPlayError","onStopIdle","isTouch","eventTypes","eventType","visible","CAN_FULLSCREEN","FullscreenController","_FullscreenController_instances","_listening","_active","onError_fn","onDisconnect_fn","isFullscreen","assertFullscreenAPI","_ScreenOrientationController","_ScreenOrientationController_instances","_type","getScreenOrientation_fn","_locked","_currentLock","onOrientationChange_fn","assertScreenOrientationAPI_fn","ScreenOrientationController","AudioProviderLoader","vidstackR_ot4AhB","VideoProviderLoader","provider$1","_HLSProviderLoader","vidstackBN7_0WI_","HLSProviderLoader","audioContext","gainNodes","elAudioSources","getOrCreateAudioCtx","createGainNode","audioCtx","gainNode","createElementSource","destroyGainNode","idx","freeAudioCtxWhenAllResourcesFreed","destroyElementSource","AudioGain","_AudioGain_instances","_onChange","_gainNode","_srcAudioNode","currGain","destroyGainNode_fn","destroySrcNode_fn","PAGE_EVENTS","PageVisibility","_PageVisibility_instances","determinePageState","_visibility","_safariBeforeUnloadTimeout","handlePageEvent","handlePageEvent_fn","RAFLoop","_RAFLoop_instances","_id","_callback","loop_fn","HTMLMediaEvents","_HTMLMediaEvents_instances","_provider","_waiting","_attachedLoadStart","_attachedCanPlay","_timeRAF","onAnimationFrame_fn","_pageVisibility","_events","_lastSeenTime","_seekedTo","_devHandlers","_handleDevEvent","attachInitialListeners_fn","attachTimeUpdate_fn","onDispose_fn","media_get","newTime","updateCurrentTime_fn","attachEventListener_fn","onLoadStart_fn","onAbort_fn","onEmptied_fn","onVolumeChange_fn","attachLoadStartListeners_fn","onLoadedData_fn","onLoadedMetadata_fn","onCanPlay_fn","onCanPlayThrough_fn","onDurationChange_fn","onProgress_fn","onStalled_fn","onSuspend_fn","onRateChange_fn","attachCanPlayListeners_fn","onPlaying_fn","onSeeked_fn","onSeeking_fn","onEnded_fn","onWaiting_fn","onDevEvent_fn","event2","getCanPlayDetail_fn","isPaused","isPageHidden","onTimeUpdate_fn","NativeAudioTracks","_NativeAudioTracks_instances","nativeTracks_get","onAddNativeTrack_fn","onRemoveNativeTrack_fn","onChangeNativeTrack_fn","onChangeTrack_fn","nativeTrack","audioTrack","enabledTrack","getEnabledNativeTrack_fn","HTMLMediaProvider","_HTMLMediaProvider_instances","inline","preload","appendMediaFragment_fn","defaultType","prevSource","clipStartTime","clipEndTime","HTMLRemotePlaybackAdapter","_HTMLRemotePlaybackAdapter_instances","_supported","setup_fn","available","watchSupported_fn","onStateChange","onStateChange_fn","remoteEvents","HTMLAirPlayAdapter","NativeHLSTextTracks","_NativeHLSTextTracks_instances","findTextTrackElement","onCueChange","VideoPictureInPicture","_VideoPictureInPicture_instances","onEnter_fn","onExit_fn","VideoPresentation","_VideoPresentation_instances","onModeChange_fn","prevMode","FullscreenPresentationAdapter","presentation","_presentation","PIPPresentationAdapter","VideoProvider","getLangName","toDOMEventType","DASHController","_DASHController_instances","_instance","_callbacks","_stopLiveSync","_currentTrack","_cueTracker","_retryLoadingTimer","ctor","dispatcher","dispatchDASHEvent_fn","onFragmentLoadStart_fn","onFragmentLoadComplete_fn","onManifestLoaded_fn","onQualityChange_fn","onTextTracksAdded_fn","onTrackChange_fn","enableAutoQuality_fn","onUserQualityChange_fn","onUserAudioChange_fn","liveSync_fn","reset_fn","createDOMEvent_fn","raf","liveSyncPosition_fn","onTextFragmentLoaded_fn","nativeTextTracks","textTrackInfo","nativeTextTrack","newMediaInfo","mediaPresentationDuration","videoQualities","supportedVideoMimeType","type2","videoQuality","audioTracks","supportedAudioMimeType","bitrate","label2","localTrack","onNetworkError_fn","onFatalError_fn","clearRetryTimer_fn","switchAutoBitrate_fn","selectedTrack","coerceToError","assert","condition","DASHLibLoader","lib","_DASHLibLoader_instances","_lib","startLoading_fn","onLoaded_fn","onLoadError_fn","loadDASHScript","importDASH","loader","isDASHConstructor","isDASHNamespace","JS_DELIVR_CDN","DASHProvider","_ctor","_library","library","_DASHProviderLoader","DASHProviderLoader","VimeoProviderLoader","connections","vidstackBqgQkvb4","abort","resolveVimeoVideoId","getVimeoVideoInfo","vidstackKrOAtKMi","videoId","hash","YouTubeProviderLoader","vidstackDHmfHold","findYouTubePoster","resolveYouTubeVideoId","vidstackDm1xEU9Q","padNumberWithZeroes","expectedLength","actualLength","padLength","parseTime","minutes","seconds","fraction","formatTime","padHrs","padMins","showHrs","showMs","paddedHours","paddedMinutes","paddedSeconds","paddedMs","formatSpokenTime","spokenParts","MEDIA_ATTRIBUTES","mediaAttributes","mediaPlayerProps","MediaLoadController","load","MediaPlayerDelegate","handle","_MediaPlayerDelegate_instances","_handle","autoPlay","canPlay","seekable","buffered","remotePlaybackInfo","playsInline","savedState","savedPlaybackTime","savedPausedState","storageTime","shouldAutoPlay","audioGain","prefQuality","currentQuality","currentScore","score","attemptAutoplay_fn","autoPlaying","attemptEvent","Queue","_queue","RequestQueue","_RequestQueue_instances","_serving","_pending","flush_fn","release_fn","$ariaBool","prefersReducedMotion","MediaRequestManager","stateMgr","_MediaRequestManager_instances","_stateMgr","_request","_fullscreen","_orientation","_$provider","_providerQueue","_wasPIPActive","_googleCastLoader","onFullscreenChange_fn","handleRequest","handleRequest_fn","attachLoadPlayListener_fn","watchProvider_fn","watchControlsDelayChange_fn","watchAudioGainSupport_fn","watchAirPlaySupport_fn","watchGoogleCastSupport_fn","watchFullscreenSupport_fn","watchPiPSupport_fn","destroyEvent","pictureInPicture","fullscreen","handleLoadPlayStrategy_fn","isAutoPlaying","throwIfNotReadyForPlayback","throwIfAutoplayingWithReducedMotion","errorEvent","canSetAudioGain","liveEdge","canSeek","liveSyncPosition","seekableEnd","userBehindLiveEdge","adapter","getFullscreenAdapter_fn","throwIfFullscreenNotSupported","throwIfPIPNotSupported_fn","canGoogleCast","$module","vidstackCQQ1xKSy","isConnecting","providedDuration","onFullscreenError_fn","onPictureInPictureError_fn","canSetPlaybackRate","seekTime","boundedTime","newVolume","canLoad","supported","canAirPlay","canFullscreen","canPictureInPicture","logError_fn","autoplaying","MediaRequestContext","TRACKED_EVENT","MediaStateManager","_MediaStateManager_instances","_trackedEvents","_clipEnded","_playedIntervals","_playedInterval","_firingWaiting","_waitingTrigger","_isPlayingOnDisconnect","_stopQualityResizeEffect","seeking","realCurrentTime","satisfyRequest_fn","_fireWaiting","waiting","playing","watchCanSetVolume_fn","addTextTrackListeners_fn","addQualityListeners_fn","addAudioTrackListeners_fn","resumePlaybackOnConnect_fn","pausePlaybackOnDisconnect_fn","stopWatchingQualityResize_fn","prevProvider","newProvider","resetMediaState_fn","resetTracking_fn","sourceChangeEvent","providedViewType","currentViewType","streamType","inferredStreamType","remotePlaybackState","remotePlaybackType","isConnected","requestEvent","prevSources","newSources","onSourceQualitiesChange_fn","canLoadEvent","abortEvent","loadStartEvent","loadedMetadata","onCanPlayDetail_fn","intrinsicDuration","onEndPrecisionChange_fn","newBuffered","newSeekable","newBufferedEnd","hasBufferedLengthChanged","hasBufferedEndChanged","newSeekableEnd","hasSeekableLengthChanged","hasSeekableEndChanged","resetPlaybackIfNeeded_fn","waitingEvent","playEvent","seekedEvent","played","updatePlayed_fn","saveTime_fn","seekingEvent","stopWaiting_fn","origin","isPiP","onTextTracksChange_fn","onTextTrackModeChange_fn","onQualitiesChange_fn","onAutoQualityChange_fn","onCanSetQualityChange_fn","onAudioTracksChange_fn","onAudioTrackChange_fn","textTrack","isAuto","watchQualityResize_fn","mediaWidth","mediaHeight","selectedQuality","minScore","canSetVolume","isGoogleCastConnected","added","removed","prevSrc","seekableStart","shouldReset","MediaStateSync","_MediaStateSync_instances","watchMetadata_fn","watchAutoplay_fn","watchClipStartTime_fn","watchClipEndTime_fn","watchCrossOrigin_fn","watchDuration_fn","watchLive_fn","watchLiveEdge_fn","watchLiveTolerance_fn","watchLoop_fn","watchPlaysInline_fn","watchPoster_fn","watchProvidedTypes_fn","watchTitle_fn","providedProps","poster","$state","watchLogLevel_fn","artist","artwork","controls","actions","NavigatorMediaSession","_NavigatorMediaSession_instances","onMetadataChange_fn","onPlaybackStateChange_fn","handleAction","handleAction_fn","$keyboard","FocusVisibleController","_FocusVisibleController_instances","_focused","updateFocusAttr","onPointerEnter_fn","onPointerLeave_fn","onFocus_fn","onBlur_fn","updateHoverAttr","isHovering","_MediaPlayer_instances","_requestMgr","_skipTitleUpdate","setupMediaAttributes_fn","watchCanPlay_fn","watchMuted_fn","watchVolume_fn","watchCurrentTime_fn","watchPlaybackRate_fn","watchStorage_fn","watchOrientation_fn","onFindPlayer_fn","pointerQuery","onPointerChange_fn","resize","onResize_fn","provider_get","props_get","queuePausedUpdate_fn","queueMutedUpdate_fn","queueCurrentTimeUpdate_fn","queueVolumeUpdate_fn","queuePlaybackRateUpdate_fn","providedTitle","isLive","typeText","$attrs","queryList","clampedVolume","queuePlaysInlineUpdate_fn","storageValue","computeMediaId_fn","mediaplayer__proto","MediaPlayer","resolveStreamTypeFromDASHManifest","manifestSrc","requestInit","manifest","resolveStreamTypeFromHLSManifest","renditionURI","resolveHLSRenditionURI","resolveTargetDuration","sourceTypes","SourceSelection","domSources","customLoaders","_SourceSelection_instances","_initialize","_loaders","_domSources","_loader","DASH_LOADER","HLS_LOADER","VIDEO_LOADER","AUDIO_LOADER","YOUTUBE_LOADER","VIMEO_LOADER","EMBED_LOADERS","remoteLoader","loaders","normalizeSrc","loader2","loader3","notifySourceChange_fn","notifyLoaderChange_fn","onSourcesChange_fn","onSourceChange_fn","onSetup_fn","onLoadSource_fn","onLoadPoster_fn","sources","currentSource","newSource","findNewSource_fn","credentials","sources2","newSource2","newLoader","triggerEvent","sourceQuality","isSameSrc","preferNativeHLS","providedPoster","canLoadPoster","src2","inferType","Tracks","domTracks","_Tracks_instances","_domTracks","_prevTracks","onTracksChange_fn","newTracks","oldTrack","newTrack","_MediaProvider_instances","_sources","_loadRafId","onMutation_fn","runLoader_fn","destroyProvider_fn","$provider","mediaprovider__proto","MediaProvider","_MediaAnnouncer_instances","_initializing","_startedSeekingAt","_seekTimer","busy","watchCaptions_fn","watchFullscreen_fn","watchPiP_fn","watchSeeking_fn","watchLabel_fn","setLabel_fn","translate_fn","isSeeking","isForward","spokenTime","word","Controls","_Controls_instances","watchProps_fn","isShowing_fn","hideControls_fn","hideDelay","hideOnMouseLeave","controlsVisible","ControlsGroup","delegate","_Popper_instances","_delegate","_showTimerId","_hideRafId","_stopAnimationEndListener","watchTrigger_fn","cancelShowing_fn","onHide","stop","show","tooltipContext","Tooltip","_Tooltip_instances","_trigger","_content","_showing","showDelay","onShowingChange_fn","attachTrigger_fn","detachTrigger_fn","attachContent_fn","detachContent_fn","tooltipName","TooltipTrigger","_TooltipTrigger_instances","attach_fn","tooltip","getButton_fn","TooltipContent","_TooltipContent_instances","watchPlacement_fn","showing","mainOffset","getTrigger_fn","ToggleButtonController","_ToggleButtonController_instances","isARIAPressed_fn","onMaybePress_fn","onInteraction_fn","ariaBool$1","onPressed_fn","_pressed","togglebutton__proto","ToggleButton","_p","_AirPlayButton_instances","isPressed_fn","onPress_fn","isAirPlayConnected","getState_fn","getDefaultLabel_fn","_q","_GoogleCastButton_instances","_r","_PlayButton_instances","remote","_s","_CaptionButton_instances","isHidden_fn","hasCaptions","_t","_FullscreenButton_instances","isSupported_fn","_u","_MuteButton_instances","$volume","_v","_PIPButton_instances","_w","_SeekButton_instances","seekTo","_LiveButton_instances","sliderState","calcRate","IntersectionObserverController","_IntersectionObserverController_instances","_init","_observer","sliderContext","sliderObserverContext","getClampedValue","getValueFromRate","boundRate","fill","stepRatio","steps","SliderKeyDirection","SliderEventsController","_SliderEventsController_instances","_touch","_touchStartValue","_lastDownKey","_repeatedKeys","_onDocumentPointerMove","updatePointerValue_fn","getPointerValue_fn","attachEventListeners_fn","attachPointerListeners_fn","watchSwipeGesture_fn","onTouchStart_fn","onTouchMove_fn","xDiff","yDiff","isDragging","onStartDragging_fn","hidden","onPointerMove_fn","onPointerDown_fn","onDocumentPointerUp_fn","onDocumentTouchMove_fn","updateValue_fn","dragging","clampedValue","pointerValue","thumbPositionRate","trackBottom","trackHeight","trackLeft","trackWidth","onStopDragging_fn","jumpValue","calcJumpValue_fn","calcNewKeyValue_fn","shiftKey","shiftKeyMultiplier","keyStep","modifiedStep","sliderValueFormatContext","SliderController","_SliderController_instances","_isVisible","_isIntersecting","_updateSliderVars","fillPercent","pointerPercent","watchValue_fn","watchStep_fn","watchDisabled_fn","setupAttrs_fn","onIntersectionChange_fn","watchCSSVars_fn","watchHidden_fn","pointing","getARIADisabled_fn","Slider","_Slider_instances","getARIAValueNow_fn","getARIAValueText_fn","watchMinMax_fn","pending","_ThumbnailsLoader","_ThumbnailsLoader_instances","_src","_crossOrigin","onLoadCues_fn","firstKey","currentKey","processVTTCues_fn","processStoryboard_fn","images","processImages_fn","resolveBaseUrl_fn","resolveURL_fn","board","tileWidth","tileHeight","tile","resolveData_fn","hashProps","hashValues","ThumbnailsLoader","_y","_Thumbnail_instances","_styleResets","isLoading_fn","hasError_fn","watchImg_fn","onFindActiveThumbnail_fn","resize_fn","crossOriginProp","crossOriginState","mediaCrossOrigin","resetStyles_fn","activeThumbnail","activeIndex","activeImage","rootEl","imgEl","thumbnail","maxWidth","maxHeight","minWidth","minHeight","elWidth","elHeight","minRatio","maxRatio","style_fn","SliderThumbnail","Thumbnail","_slider","SliderVideo","_SliderVideo_instances","watchVideo_fn","watchSrc_fn","onSrcChange_fn","onUpdateTime_fn","pointerRate","slidervideo__proto","SliderValue","_format","_text","$format","padHours","padMinutes","showHours","sliderValue","percent","slidervalue__proto","SliderPreview","_updatePlacement","noClamp","updateSliderPreviewPlacement","preview","widthHalf","leftClamp","rightClamp","heightHalf","topClamp","bottomClamp","VolumeSlider","_VolumeSlider_instances","_throttleVolumeChange","isDisabled_fn","getARIAValueMax_fn","onDragValueChange_fn","onValueChange_fn","mediaVolume","AudioGainSlider","_AudioGainSlider_instances","watchAudioGain_fn","onAudioGainChange_fn","SpeedSlider","_SpeedSlider_instances","_throttledSpeedChange","onPlaybackRateChange_fn","roundValue_fn","QualitySlider","_QualitySlider_instances","_sortedQualities","_throttledQualityChange","watchMax_fn","watchQuality_fn","canSetQuality","$supported","bitrateText","$qualities","TimeSlider","_TimeSlider_instances","_dispatchSeeking","_chapter","_playingBeforeDragStart","noSwipeGesture","getValue_fn","getStep_fn","getKeyStep_fn","onDragStart_fn","onDragEnd_fn","formatValue_fn","formatTime_fn","hasChapters_fn","calcBufferedPercent_fn","watchSeekingThrottle_fn","watchPreviewing_fn","bufferedEnd","seek_fn","pauseWhileDragging","percentToTime_fn","timeToPercent_fn","SliderChapters","_SliderChapters_instances","_sliderState","_updateScope","_titleRef","_refs","_$track","_$cues","_activeIndex","_activePointerIndex","_bufferedIndex","_updateBufferedPercent","bufferedPercent","getEndTime_fn","calcPercent_fn","_bufferedPercent","calcMediaBufferedPercent_fn","_onCuesChange","fillGaps_fn","setTrack_fn","watchSource_fn","watch_fn","watchUpdates_fn","watchContainerWidths_fn","watchFillPercent_fn","watchPointerPercent_fn","watchBufferedPercent_fn","remainingWidth","isLiveEdge","prevActiveIndex","currentChapter","currentActiveIndex","findActiveChapterIndex_fn","updateFillPercents_fn","updateFillPercent_fn","chapterPercent","cueStartTime","cueEndTime","startRatio","startPercent","endPercent","chapters","firstCue","currentCue","nextCue","timeDiff","lastCue","endTime2","onCuesChange","watchMediaDuration_fn","findChapterTitleRef_fn","onChapterTitleChange_fn","findParentSlider_fn","slider","sliderchapters__proto","menuContext","scrollIntoView","scrolls","el2","scrollIntoCenter","FOCUSABLE_ELEMENTS_SELECTOR","VALID_KEYS","MenuFocusController","_MenuFocusController_instances","_index","_el","_elements","getFocusableElements_fn","findActiveIndex_fn","focusAt_fn","validateKeyEvent_fn","nextIndex_fn","focusableElements","__defProp","__getOwnPropDesc","__decorateClass","decorators","decorator","idCount","_z","_Menu_instances","_menuId","_menuButtonId","_expanded","_disabled","_parentMenu","_submenus","_menuObserver","_popper","_focus","_isSliderActive","_isTriggerDisabled","_transitionCallbacks","_wasKeyboardExpand","_removeSubmenuBind","removeSubmenu_fn","_isSubmenuOpen","_onSubmenuOpenBind","onSubmenuOpen_fn","_onSubmenuCloseBind","onSubmenuClose_fn","_onResize","_isTransitionActive","closeTarget","getCloseTarget_fn","onExpandedChange_fn","currentIdCount","observeSliders_fn","disable_fn","attachMenuButton_fn","attachMenuItems_fn","attachObserver_fn","disableMenuButton_fn","addSubmenu_fn","watchExpanded_fn","sliderActiveTimer","parentSliderObserver","expanded","isExpanded_fn","updateMenuItemsHidden_fn","onPointerUp_fn","onWindowPointerUp_fn","isMenuItem","isARIADisabled","watchAttrs","onTransition","onResizeTransition_fn","isExpanded","toggleMediaControls_fn","updateFocus_fn","menu","MenuButton","_MenuButton_instances","_menu","_hintEl","watchHintEl_fn","hintEl","menubutton__proto","menuPortalContext","MenuItems","_MenuItems_instances","portal","hide_fn","radioControllerContext","RadioGroupController","_RadioGroupController_instances","_group","_value","_onChangeBind","radio","addRadio_fn","removeRadio_fn","currentRadio","findRadio_fn","newRadio","_RadioGroup_instances","radiogroup__proto","_Radio_instances","_checked","check_fn","addToGroup_fn","onSelect_fn","radio__proto","_A","_Gesture_instances","_presses","_pressTimerId","attachListener_fn","acceptEvent_fn","inBounds_fn","handleEvent_fn","__privateWrapper","isTopLayer_fn","performAction_fn","inBounds","gestures","willTriggerEvent","CaptionsTextRenderer","_CaptionsTextRenderer_instances","_renderer","changeTrack_fn","_B","_Captions_instances","_hideExampleTimer","watchViewType_fn","iOSControls","setupAudioView_fn","setupVideoView_fn","listenToFontStyleChanges_fn","onCueChange_fn","onUpdateTimedNodes_fn","removeExample_fn","renderVTTCueString","displayEl","createCueDisplayElement_fn","cueEl","createCueElement_fn","updateTimedVTTCueNodes","CaptionsRenderer","textRenderer","watchTextDirection_fn","watchMediaTime_fn","onFontStyleChange_fn","hideExample_fn","showExample_fn","_C","_Poster_instances","_prevSrc","watchAlt_fn","onPreconnect_fn","onLoad_fn","defaultPoster","inferredPoster","_D","_Time_instances","_invert","watchTime_fn","shouldInvert_fn","watchRole_fn","watchToggle_fn","onToggle_fn","timeText","getSeconds_fn","$duration","shouldInvert","formattedTime","toggle","MediaPlayerInstance","MediaProviderInstance","MediaAnnouncerInstance","MediaAnnouncer","ControlsInstance","ControlsGroupInstance","ToggleButtonInstance","CaptionButtonInstance","CaptionButton","FullscreenButtonInstance","FullscreenButton","LiveButtonInstance","LiveButton","MuteButtonInstance","MuteButton","PIPButtonInstance","PIPButton","PlayButtonInstance","PlayButton","AirPlayButtonInstance","AirPlayButton","GoogleCastButtonInstance","GoogleCastButton","SeekButtonInstance","SeekButton","TooltipInstance","TooltipTriggerInstance","TooltipContentInstance","SliderInstance","TimeSliderInstance","VolumeSliderInstance","AudioGainSliderInstance","SpeedSliderInstance","QualitySliderInstance","SliderThumbnailInstance","SliderValueInstance","SliderVideoInstance","SliderPreviewInstance","SliderChaptersInstance","MenuInstance","MenuButtonInstance","MenuItemsInstance","MenuItemInstance","RadioGroupInstance","RadioInstance","CaptionsInstance","Captions","GestureInstance","Gesture","PosterInstance","Poster","ThumbnailInstance","TimeInstance","Time","primitives","isRemotionProvider","isRemotionSrc","sliderStateRecord","initialSliderStore","useSliderState","mediaStateRecord","initialMediaStore","useMediaState","AirPlayButtonBridge","PlayButtonBridge","CaptionButtonBridge","FullscreenButtonBridge","MuteButtonBridge","PIPButtonBridge","SeekButtonBridge","LiveButtonBridge","sliderCallbacks","SliderValueBridge","SliderBridge","Root$5","Track","TrackFill","PreviewBridge","Preview","Value","$text","$min","$max","$step","VolumeSliderBridge","Root$4","createVTTCue","ThumbnailBridge","Root$3","Img","$src","$crossOrigin","TimeSliderContext","TimeSliderBridge","Root$2","$chapters","SliderChaptersBridge","Chapters","ChapterTracks","$cues","emptyCue","ChapterTitle","Progress","SliderThumbnailBridge","ThumbnailRoot","VideoBridge","Video","$canLoad","RadioGroupBridge","Root$1","ItemBridge$1","Item$1","MenuBridge","ButtonBridge","shouldPortal","createPortal","ItemsBridge","ItemBridge","GestureBridge","TimeBridge","TimeText","$timeText","useMediaPlayer","useAudioOptions","$audioTracks","getTrackValue$1","useCaptionOptions","$textTracks","captionTracks","getTrackValue","MediaAnnouncerBridge","ControlsBridge","ControlsGroupBridge","TooltipBridge","TriggerBridge","ContentBridge","GoogleCastButtonBridge","QualitySliderBridge","AudioGainSliderBridge","SpeedSliderBridge","$title","useActiveTextCues","setActiveCues","useActiveTextTrack","setTrack","useChapterTitle","$track","defaultText","$chapterTitle","CaptionsBridge","createSignal","createComputed","createEffect","useScoped","useTextCues","setCues","useChapterOptions","$startTime","$endTime","stopProgressEffect","progress","useResizeObserver","useTransitionActive","setIsActive","useMouseEnter","isMouseEnter","setIsMouseEnter","useFocusIn","isFocusIn","setIsFocusIn","useActive","prevMouseEnter","useColorSchemePreference","colorScheme","setColorScheme","useLayoutName","RemotionThumbnail","RemotionSliderThumbnail","DefaultLayoutContext","useDefaultLayoutContext","useDefaultLayoutWord","i18n","useColorSchemeClass","systemColorPreference","createDefaultMediaLayout","smLayoutWhen","renderLayout","Layout","disableTimeSlider","hideQualityBitrate","icons","menuContainer","menuGroup","noAudioGain","audioGains","noGestures","noKeyboardAnimations","noModal","noScrubGesture","playbackRates","seekStep","showMenuDelay","showTooltipDelay","sliderChaptersMinWidth","slots","smallLayoutWhen","thumbnails","$load","$viewType","$streamType","$smallWhen","userPrefersAnnouncements","userPrefersKeyboardAnimations","isMatch","isSmallLayout","isForcedLayout","isLoadLayout","colorSchemeClass","layoutEl","useDefaultAudioLayoutSlots","useDefaultVideoLayoutSlots","slot","slot2","capitalizedName","DefaultAnnouncer","DefaultTooltip","DefaultPlayButton","Icons","playText","pauseText","$paused","$ended","DefaultMuteButton","muteText","unmuteText","$muted","DefaultCaptionButton","captionsText","onText","offText","isOn","DefaultPIPButton","pipText","enterText","exitText","$pip","DefaultFullscreenButton","fullscreenText","$fullscreen","DefaultSeekButton","backward","seekForwardText","seekBackwardText","DefaultAirPlayButton","airPlayText","stateText","Icon","DefaultGoogleCastButton","googleCastText","DefaultLiveButton","$live","liveText","DefaultDownloadButton","downloadText","DefaultCaptions","exampleText","DefaultControlsSpacer","useParentDialogEl","$layoutEl","DefaultChaptersMenu","portalClass","chaptersText","$offset","$RemotionThumbnail","setIsOpen","dialogEl","onOpen","flushSync","startTimeText","durationText","setProgressVar","FONT_COLOR_OPTION","FONT_FAMILY_OPTION","FONT_SIZE_OPTION","FONT_OPACITY_OPTION","FONT_TEXT_SHADOW_OPTION","FONT_DEFAULTS","FONT_SIGNALS","onFontReset","hexToRgb","hex","isWatchingVars","players","updateFontCssVars","useMediaContext$1","$value","varName","storageKey","isDefaultVarValue","varValue","getCssVarValue","player2","fontVariant","getFontFamilyCSSVarValue","percentToRatio","getTextShadowCssVarValue","DefaultMenuSection","DefaultMenuButton","hint","DefaultMenuItem","DefaultMenuRadioGroup","createRadioOptions","DefaultMenuSliderItem","UpIcon","DownIcon","isMin","isMax","hasTitle","DefaultSliderParts","DefaultSliderSteps","DefaultFontMenu","$hasCaptions","fontSectionLabel","textSectionLabel","textBgSectionLabel","displayBgSectionLabel","DefaultFontFamilyMenu","DefaultFontSizeSlider","DefaultTextColorInput","DefaultTextShadowMenu","DefaultTextOpacitySlider","DefaultTextBgInput","DefaultTextBgOpacitySlider","DefaultDisplayBgInput","DefaultDisplayBgOpacitySlider","DefaultResetMenuItem","DefaultFontSetting","$currentValue","translatedLabel","onColorChange2","onSliderValueChange2","upIcon","downIcon","DefaultFontRadioGroup","radioOptions","resetText","DefaultMenuCheckbox","isChecked","setIsChecked","savedValue","checked2","toggledCheck","onActive","DefaultAccessibilityMenu","DefaultAnnouncementsMenuCheckbox","DefaultKeyboardAnimationsMenuCheckbox","DefaultAudioMenu","$canSetAudioGain","hasGainSlider","DefaultAudioTracksMenu","DefaultAudioBoostMenuSection","$audioGain","$disabled","useGainMin","useGainMax","DefaultAudioGainSlider","useGainStep","DefaultCaptionMenu","DefaultPlaybackMenu","DefaultLoopMenuCheckbox","DefaultSpeedMenuSection","DefaultQualityMenuSection","DefaultAutoQualityMenuCheckbox","$autoQuality","$canSetQuality","$quality","autoText","sortedQualities","DefaultQualitySlider","Root$7","$playbackRate","$canSetPlaybackRate","normalText","useSpeedMin","useSpeedMax","DefaultSpeedSlider","rates","useSpeedStep","Root$6","DefaultSettingsMenu","settingsText","DefaultVolumePopup","$pointer","$canSetVolume","setRootEl","isRootActive","muteButton","DefaultVolumeSlider","Root$8","DefaultTimeSlider","setInstance","setWidth","$RemotionSliderThumbnail","onResize","Root$9","DefaultTimeGroup","DefaultTimeInfo","DefaultTimeInvert","AudioLayout","Root$a","DefaultAudioTitle","DefaultAudioMenus","isTextOverflowing","setIsTextOverflowing","isContinued","chapterTitle","$isContinued","isTransitionActive","isOverflowing","AudioTitle","DefaultKeyboardDisplay","setVisible","setIcon","setCount","$lastKeyboardAction","actionDataAttr","$$text","Icon2","getIcon","getVolumeText","DefaultTitle","$started","ChapterTitle$1","MediaLayout","VideoLayout","DefaultVideoLayout","DefaultVideoLoadLayout","DefaultBufferingIndicator","DefaultVideoSmallLayout","DefaultVideoLargeLayout","baseSlots","DefaultVideoGestures","DefaultVideoKeyboardDisplay","DefaultVideoMenus","DefaultVideoStartDuration","Root$b","Track$1","TrackFill$1","$userPrefersKeyboardAnimations","restProps","createIcon","DefaultLayoutIcon","defaultLayoutIcons","EditVideoModal","fetchVideoCollections","handleCollectionToggle","newSelected","updateError","collectionInserts","collectionError","transcription","currentDesc","MEDIA_TYPES","normalizeMediaType","isVideoType","detectMediaType","meta","DEFAULT_AUDIO_GAINS","AudioGainRadioGroup","_AudioGainRadioGroup_instances","gains","watchHintText_fn","watchControllerDisabled_fn","normalLabel","audiogainradiogroup__proto","MediaPlayerBridge","MediaProviderBridge","iframeProps","mediaProps","reactLoaders","Loader","MediaOutlet","$$provider","$$providerSetup","$sources","$nativeControls","$poster","$loader","$providerSetup","$remoteInfo","$mediaType","isAudioView","isYouTubeEmbed","isVimeoEmbed","isEmbed","isRemotion","isGoogleCast","googleCastIconPaths","setGoogleCastIconPaths","hasMounted","setHasMounted","vidstackCZgUA94N","mod","ToggleButtonBridge","PosterBridge","PosterImg","$alt","$hidden","Text","activeCue","setActiveCue","VideoCard","videoUrl","thumbnailUrl","maxResolution","showPlayButton","created_at","useLocation","isPlaying","setIsPlaying","processingStatus","setProcessingStatus","setProgress","videoMeta","setVideoMeta","isInternalVideo","posterUrl","playbackUrl","urlObj","jobId","eventSource","sseUrl","handleCancelProcessing","handleStopVideo","handlePlayClick","getYouTubeVideoId","regExp","getTikTokVideoId","PageCard","tikTokId","ytId","isExternalVideo","Play","normalizedType","updateCurrentIndex","OrganizationContext","useOrganization","FeedCacheContext","useFeedCache","useFeedData","supabaseClient","getCache","saveCache","setPosts","setPage","hasMore","setHasMore","isFetchingMore","setIsFetchingMore","fetchProfiles","mountedWithCache","currentCache","loadFeed","currentPage","isLoadMore","fetchedPosts","db.fetchFeedPostsPaginated","augmentedPosts","db.augmentFeedPosts","postsWithUpdatedCovers","updatePostCovers","combined","sortFeedPosts","userIds","loadMore","nextPage","newCover","sorted","likesA","likesB","latestPicDateA","MediaGrid","customPictures","customLoading","navigationSource","navigationSourceId","onFilesDrop","showVideos","mediaItems","setMediaItems","userLikes","setUserLikes","setIsDragging","dragLeaveTimeoutRef","feedPosts","feedLoading","observerTarget","finalMedia","db.mapFeedPostsToMediaItems","navData","hasRestoredScroll","lastScrollY","fetchMediaFromPicturesTable","fetchUserLikes","targetIds","likesData","handleMediaClick","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleEditPost","postId","toastId","wizardImages","hasItems","UploadCloud","itemType","isVideo","ErrorCode","ErrorCode2","MilkdownError","functionReplacer","docTypeError","contextNotFound","timerNotFound","ctxCallOutOfScope","createNodeInParserFail","nodeType","heading","serialize","headingMessage","attrsMessage","contentMessage","messages","stackOverFlow","parserMatchError","serializerMatchError","getAtomFromSchemaFail","expectDomTypeError","callCommandBeforeEditorView","missingNodeInSchema","missingMarkInSchema","Slice$1","_E","_watchers","_emit","watcher","updater","SliceType","Slice","createSlice","Inspector","clock","_meta","_container","_clock","_injectedSlices","_consumedSlices","_recordedTimers","_waitTimers","_getSlice","_getTimer","timerType","sliceType","_Ctx","_inspector","meta2","Ctx","Clock","Timer","_promise","_listener","_eventUniqId","_status","_removeListener","_waitTimeout","ifTimeout","TimerType","createTimer","OrderedMap","found","newKey","place","without","findDiffStart","childA","childB","findDiffEnd","posA","posB","iA","iB","same","Fragment$1","nodeStart","blockSeparator","leafText","nodeText","otherPos","retIndex","curPos","cur","compareDeep","Mark","placed","mark","marks","ReplaceError","openStart","openEnd","insertInto","openIsolating","indexTo","offsetTo","dist","$from","$to","replaceOuter","depth","close","prepareSliceForReplace","replaceThreeWay","replaceTwoWay","checkJoin","main","joinable","$before","$after","addNode","addRange","$start","$end","$along","extra","ResolvedPos","parentOffset","dOff","tmp","pred","NodeRange","rem","resolveCache","elt","ResolveCache","resolveCacheSize","emptyAttrs","Node$1","includeParents","wrapMarks","replacement","one","two","TextNode","ContentMatch","validEnd","nodeTypes","TokenStream","parseExpr","dfa","nfa","checkForDeadEnds","frag","toEnd","seen","finished","tp","scan","tok","exprs","parseExprSeq","parseExprSubscript","parseExprAtom","parseExprRange","resolveName","connect","compile","edge","term","edges","cmp","nullFrom","labeled","explore","states","work","dead","defaultAttrs","computeAttrs","built","given","checkAttrs","initAttrs","Attribute","NodeType$1","NodeType","spec","matched","markType","topType","validateType","MarkType","rank","Schema","instanceSpec","contentExprCache","contentExpr","markExpr","gatherMarks","excl","ok","isTagRule","isStyleRule","rules","matchedStyles","dom","ParseContext","priority","blockTags","ignoreTags","listTags","OPT_PRESERVE_WS","OPT_PRESERVE_WS_FULL","OPT_OPEN_LEFT","wsOptionsFor","preserveWhitespace","NodeContext","solid","wrap","parser","topNode","topContext","topOptions","preserveWS","nodeBefore","domNodeBefore","matchAfter","outerWS","ruleID","normalizeList","sync","oldNeedsBlock","innerMarks","continueAfter","startIn","contentDOM","cautious","route","penalty","block","nodeMarks","markMayApply","applyMarks","textNode","useRoot","minDepth","$context","deflt","prevItem","DOMSerializer","rendered","add","markDOM","renderSpec","toDOM","structure","xmlNS","blockArraysIn","gatherToDOM","suspiciousAttributeCache","suspiciousAttributes","suspiciousAttributesInner","suspicious","innerContent","emptyOptions","toString","includeImageAlt","includeHtml","all","decodeNamedCharacterReference","characterReference","character","splice","chunkStart","parameters","push","combineExtensions","extensions","syntaxExtension","constructs","existing","decodeNumericCharacterReference","normalizeIdentifier","asciiAlpha","regexCheck","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","factorySpace","initializeContent","contentStart","afterContentStartConstruct","paragraphInitial","lineStart","initializeDocument","containerConstruct","tokenizeContainer","continued","childFlow","childToken","lineStartOffset","documentContinue","checkNewContainers","closeFlow","indexBeforeExits","indexBeforeFlow","exitContainers","documentContinued","flowStart","thereIsANewContainer","thereIsNoNewContainer","containerContinue","flowContinue","writeToChild","endOfFile","nok","classifyCharacter","resolveAll","called","attention","resolveAllAttention","tokenizeAttention","openingSequence","closingSequence","nextEvents","movePoint","attentionMarkers","marker","autolink","tokenizeAutolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","blankLine","tokenizeBlankLine","blockQuote","tokenizeBlockQuoteContinuation","exit","tokenizeBlockQuoteStart","contStart","contBefore","characterEscape","tokenizeCharacterEscape","tokenizeCharacterReference","numeric","nonLazyContinuation","tokenizeNonLazyContinuation","codeFenced","tokenizeCodeFenced","closeStart","tokenizeCloseStart","initialPrefix","sizeOpen","beforeSequenceOpen","sequenceOpen","infoBefore","atNonLazyBreak","metaBefore","contentBefore","beforeContentChunk","contentChunk","startBefore","beforeSequenceClose","sequenceClose","sequenceCloseAfter","codeIndented","tokenizeCodeIndented","furtherStart","tokenizeFurtherStart","afterPrefix","atBreak","codeText","resolveCodeText","tokenizeCodeText","tailExitIndex","headEnterIndex","enter","between","SpliceBuffer","initial","deleteCount","chunkedPush","subtokenize","eventsArray","jumps","lineIndex","otherIndex","otherEvent","subevents","more","subcontent","eventIndex","startPositions","tokenizer","childEvents","gaps","adjust","breaks","resolveContent","tokenizeContent","continuationConstruct","tokenizeContinuation","chunkInside","contentEnd","contentContinue","startLookahead","prefixed","factoryDestination","literalType","literalMarkerType","rawType","balance","enclosedBefore","raw","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","begin","factoryWhitespace","definition","tokenizeDefinition","titleBefore","tokenizeTitleBefore","identifier","labelAfter","markerAfter","destinationBefore","destinationAfter","afterWhitespace","beforeMarker","titleAfter","titleAfterOptionalWhitespace","hardBreakEscape","tokenizeHardBreakEscape","headingAtx","resolveHeadingAtx","tokenizeHeadingAtx","sequenceFurther","htmlBlockNames","htmlRawNames","htmlFlow","resolveToHtmlFlow","tokenizeHtmlFlow","blankLineBefore","tokenizeBlankLineBefore","nonLazyContinuationStart","tokenizeNonLazyContinuationStart","closingTag","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","commentOpenInside","cdataOpenInside","continuation","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationAfter","continuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","htmlText","tokenizeHtmlText","returnState","instruction","tagOpen","declaration","commentEnd","comment","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelEnd","resolveAllLabelEnd","resolveToLabelEnd","tokenizeLabelEnd","resourceConstruct","tokenizeResource","referenceFullConstruct","tokenizeReferenceFull","referenceCollapsedConstruct","tokenizeReferenceCollapsed","newEvents","labelStart","defined","labelEndNok","labelEndOk","referenceNotFull","resourceStart","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFull","referenceFullAfter","referenceFullMissing","referenceCollapsedStart","referenceCollapsedOpen","labelStartImage","tokenizeLabelStartImage","labelStartLink","tokenizeLabelStartLink","lineEnding","tokenizeLineEnding","thematicBreak","tokenizeThematicBreak","sequence","tokenizeListContinuation","tokenizeListEnd","tokenizeListStart","listItemPrefixWhitespaceConstruct","tokenizeListItemPrefixWhitespace","indentConstruct","tokenizeIndent","initialSize","atMarker","onBlank","endOfPrefix","otherPrefix","notBlank","notInCurrentItem","setextUnderline","resolveToSetextUnderline","tokenizeSetextUnderline","paragraph","flow","initializeFlow","atBlankEnding","afterConstruct","resolver","createResolver","initializeFactory","resolveAllLineSuffixes","initializeText","notText","extraResolver","resolveAllText","chunks","bufferIndex","tabs","resolveText","createTokenizer","initialize","columnStart","resolveAllConstructs","constructFactory","onsuccessfulconstruct","onsuccessfulcheck","consume","defineSkip","sliceSerialize","sliceStream","addResult","expandTabs","serializeChunks","sliceChunks","_bufferIndex","column","accountForPotentialSkip","chunkIndex","go","onreturn","bogusState","listOfConstructs","constructIndex","currentConstruct","handleListOfConstructs","handleMapOfConstructs","handleConstruct","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","restore","startBufferIndex","endBufferIndex","view","atTab","defaultConstructs","creator","postprocess","atCarriageReturn","preprocessor","encoding","endPosition","characterEscapeOrReference","decodeString","decode","$1","$2","stringifyPosition","own","fromMarkdown","compiler","opener","onenterdata","codeFlow","emphasis","hardBreak","listItem","onenterlistitemvalue","onenterlistordered","onenterreference","strong","closer","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","onexitdata","onexitcharacterreferencemarker","onexitcharacterreferencevalue","onexitcharacterreference","onexitcodefenced","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","onexitlabeltext","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","onexitresource","onexitsetextheading","onexitsetextheadinglinesequence","onexitsetextheadingtext","configure","tree","listStack","prepareList","defaultOnError","containerBalance","listSpread","firstBlankLineIndex","tailIndex","tailEvent","and","errorHandler","onExitError","siblings","referenceType","remarkParse","zwitch","handlers","blockquote","tracker","blank","patternInScope","listInScope","none","_1","longestStreak","substring","expected","formatCodeAsIndented","checkFence","subexit","checkQuote","quote","checkEmphasis","encodeCharacterReference","encodeInfo","outside","outsideKind","insideKind","emphasisPeek","betweenHead","betweenTail","convert","castFactory","anyFactory","propertiesFactory","typeFactory","tests","checks","any","checkAsRecord","nodeAsRecord","testFunction","looksLikeANode","color","empty","CONTINUE","EXIT","SKIP","visitParents","visitor","reverse","factory","parents","visit","subresult","grandparents","toResult","nodeAsParent","testOrVisitor","visitorOrReverse","maybeReverse","overload","formatHeadingAsSetext","literalWithBreak","htmlPeek","imagePeek","imageReference","imageReferencePeek","inlineCode","inlineCodePeek","expression","formatLinkAsAutolink","linkPeek","linkReference","linkReferencePeek","checkBullet","checkBulletOther","bullet","bulletOther","checkBulletOrdered","checkRule","bulletCurrent","useDifferentMarker","firstListItem","checkListItemIndent","listItemIndent","phrasing","checkStrong","strongPeek","checkRuleRepetition","repetition","join","joinDefaults","fullPhrasingSpans","unsafe","association","compilePattern","containerPhrasing","indexStack","encodeAfter","encodingInfo","containerFlow","eol","indentLines","safe","positions","infos","numerical","escapeBackslashes","whole","lineShift","move","toMarkdown","containerPhrasingBound","containerFlowBound","safeBound","joinDefinition","invalid","unknown","remarkStringify","bail","toStr","defineProperty","gOPD","hasOwnConstructor","hasIsPrototypeOf","setProperty","getProperty","extend","copyIsArray","trough","fns","pipeline","middlewareIndex","middelware","fnExpectsCallback","exception","then","VFileMessage","causeOrReason","optionsOrParentOrPlace","legacyCause","minpath","basename","dirname","extname","assertPath","seenNonSlash","firstNonSlashEnd","extnameIndex","unmatchedSlash","startPart","startDot","preDotState","normalize","absolute","normalizeString","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","minproc","cwd","isUrl","fileUrlOrPath","urlToPath","getPathFromURLPosix","third","order","VFile","isUint8Array","assertNonEmpty","assertPart","stem","CallableInstance","proto","Processor","destination","attacher","assertUnfrozen","transformer","realFile","vfile","assertParser","assertCompiler","parseTree","realDone","compileTree","compileResult","looksLikeAValue","complete","assertDone","assertNode","transformers","outputTree","resultingTree","attachers","namespace","addPlugin","addList","addPreset","plugin","plugins","thing","entryIndex","primary","currentPrimary","isPlainObj","unified","frozen","asyncName","looksLikeAVFile","__typeError","__accessCheck","member","setter","_marks","_hasText","_maybeMerge","_matchTarget","_runNode","_closeNodeAndPush","_addNodeAndPush","_marks2","_matchTarget2","_runProseNode","_runProseMark","_runNode2","_searchType","_maybeMergeChildren","_createMarkdownNode","_moveSpaces","_closeNodeAndPush2","_addNodeAndPush2","_openMark","_closeMark","StackElement","Stack","ParserStackElement","_ParserState","topElement","prevNode","currNode","remark","markdown","ParserState","_SerializerStackElement","SerializerStackElement","isFragment","_SerializerState","getPriority","searchNode","firstChild","nextChildren","currChildren","currRest","prevChildren","prevRest","onPush","startSpaces","endSpaces","findIndex","lastChild","trim","SerializerState","lower16","factor16","makeRecover","recoverIndex","recoverOffset","DEL_BEFORE","DEL_AFTER","DEL_ACROSS","DEL_SIDE","MapResult","delInfo","recover","StepMap","ranges","inverted","assoc","simple","oldIndex","oldSize","newSize","del","oldStart","newStart","Mapping","mirror","mirrors","mapping","startSize","mirr","totalSize","inverse","corr","stepsByID","Step","stepClass","StepResult","failed","mapFragment","AddMarkStep","oldSlice","RemoveMarkStep","AddNodeMarkStep","updated","RemoveNodeMarkStep","ReplaceStep","contentBetween","ReplaceAroundStep","gapFrom","gapTo","inserted","addMark","tr","removing","adding","removeMark","toRemove","clearIncompatible","clearNewlines","replSteps","allowed","newline","canCut","liftTarget","contentAfter","lift","gapStart","gapEnd","splitting","findWrapping","innerRange","around","findWrappingOutside","findWrappingInside","withAttrs","outer","innerMatch","wrappers","setBlockType","mapFrom","attrsHere","canChangeType","convertNewlines","supportLinebreak","replaceLinebreaks","startM","endM","replaceNewlines","$pos","setNodeMarkup","canSplit","typesAfter","overrideChild","baseType","split","typeAfter","canJoin","canAppendWithSubstitutedLinebreaks","linebreakReplacement","beforeType","$full","insertPoint","dropPoint","pass","bias","insertPos","fits","wrapping","replaceStep","fitsTrivially","Fitter","unplaced","fit","moveInline","placedSize","startDepth","sliceDepth","contentAt","frontierDepth","inject","openAtEnd","dropFromFragment","taken","openEndCount","closeNodeStart","addToFragment","contentAfterFits","dropInner","invalidMarks","definesContent","replaceRange","targetDepths","coveredDepths","preferredTarget","preferredTargetIndex","leftNodes","preferredDepth","leftNode","openDepth","targetDepth","expand","closeFragment","startSteps","oldOpen","newOpen","replaceRangeWith","deleteRange","covered","AttrStep","DocAttrStep","TransformError","Transform","classesById","Selection","$anchor","$head","SelectionRange","lastNode","lastParent","selectionToInsertionEnd","textOnly","TextSelection","findSelectionIn","AllSelection","cls","selectionClass","warnedAboutTextSelection","checkTextSelection","TextBookmark","dPos","NodeSelection","deleted","NodeBookmark","sel","AllBookmark","startLen","_from","_to","_newFrom","newTo","UPDATED_SEL","UPDATED_MARKS","UPDATED_SCROLL","Transaction","inheritMarks","bind","FieldDesc","baseFields","_old","Configuration","EditorState","ignore","rootTr","trs","haveNew","oldState","newInstance","$config","pluginFields","bindProps","Plugin","createKey","PluginKey","deleteSelection","dispatch","atBlockStart","$cursor","joinBackward","$cut","findCutBefore","deleteBarrier","textblockAt","delStep","joinTextblockBackward","joinTextblocksAround","beforeText","beforePos","afterText","afterPos","only","selectNodeBackward","atBlockEnd","joinForward","findCutAfter","selectNodeForward","newlineInCode","defaultBlockAt","exitCode","above","createParagraphNear","liftEmptyBlock","splitBlockAs","splitNode","splitDepth","atEnd","atStart","splitPos","can","$first","splitBlock","selectAll","joinMaybeClear","conn","isolated","canDelAfter","$joinAt","selAfter","at","afterDepth","selectTextblockSide","selectTextblockStart","selectTextblockEnd","wrapIn","applicable","markApplies","enterAtoms","toggleMark","spaceStart","spaceEnd","chainCommands","commands","backspace","pcBaseKeymap","macBaseKeymap","baseKeymap","InputRule","stringHandler","cutOff","undoInputRule","undoable","toUndo","wrappingInputRule","regexp","getAttrs","joinPredicate","textblockTypeInputRule","nav","agent","ie_edge","ie_upto10","ie_11up","ie_version","gecko","gecko_version","_chrome","chrome","chrome_version","safari","ios","mac","android","webkit_version","browser","textBefore","_matcher","matcher","customInputRulesKey","customInputRules","stored","markRule","matchLength","fullMatch","initialStoredMarks","markEnd","captured","textStart","textEnd","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","__spreadProps","minMax","posToDOMRect","maxPos","resolvedFrom","resolvedEnd","bottom","cloneTr","equalNodeType","isTextOnlySlice","_node","findParent","predicate","findParentNodeType","getNodeFromSchema","findParentNodeClosestToPos","findParentNode","findSelectedNodeOfType","findNodeInSelection","hasNode","keyName","ignoreKey","windows","normalizeKeyName","keymap","bindings","keydownHandler","baseName","direct","fromCode","domIndex","reusedRange","textRange","clearReusedRange","isEquivalentPosition","targetNode","targetOff","scanFor","atomElements","nodeSize","hasBlockDesc","textNodeBefore$1","textNodeAfter$1","isOnEdge","selectionCollapsed","domSel","keyEvent","keyCode","deepActiveElement","caretFromPoint","windowRect","vp","scrollRectIntoView","startDOM","scrollThreshold","scrollMargin","atTop","bounding","moveX","moveY","startX","startY","dX","dY","storeScrollPos","refDOM","refTop","localRect","scrollStack","resetScrollPos","newRefTop","restoreScrollStack","dTop","preventScrollSupported","focusPreventScroll","findOffsetInNode","closest","dxClosest","coordsClosest","rowBot","rowTop","firstBelow","coordsBelow","childIndex","dx","findOffsetInText","singleRect","inRect","targetKludge","posFromElement","posFromCaret","outsideBlock","sawBlock","elementFromPoint","box","startI","posAtCoords","caret","nonZero","BIDI","coordsAtPos","atom","supportEmptyRange","rectBefore","rectAfter","flattenV","takeSide","flattenH","withFlushedState","viewState","endOfTextblockVertical","nearest","boxes","maybeRTL","endOfTextblockHorizontal","oldNode","oldOff","anchorOffset","oldBidiLevel","parentDOM","newOff","cachedState","cachedDir","endOfTextblock","NOT_DIRTY","CHILD_DIRTY","CONTENT_DIRTY","NODE_DIRTY","ViewDesc","widget","outerDeco","innerDeco","nodeName","domBefore","domAfter","onlyNodes","nodeDOM","TrailingHackViewDesc","WidgetViewDesc","fromOffset","toOffset","childBase","anchorDOM","headDOM","selRange","brKludge","domSelExtended","startInside","endInside","CompositionViewDesc","textDOM","mut","MarkViewDesc","custom","replaceNodes","NodeViewDesc","descObj","applyOuterDeco","CustomNodeViewDesc","TextViewDesc","sameOuterDeco","composition","localComposition","compositionInChild","ViewTreeUpdater","iterDeco","insideNode","compIndex","renderDescs","iosHacks","textPos","findTextInFragment","needsWrap","oldDOM","patchOuterDeco","computeOuterDeco","docViewDesc","docView","descs","written","childDOM","rm","OuterDecoLevel","noDeco","outerDOM","prevComputed","curComputed","curDOM","deco","patchAttributes","prevList","curList","lock","preMatch","parentIndex","maxKeep","scanTo","markDesc","targetDesc","domNode","nextDOM","locked","hack","parentDesc","curDesc","descI","fI","compareSide","onWidget","onNode","locals","decoIndex","restNode","widgets","cutAt","oldCSS","childStart","selectionFromDOM","nearestDesc","inWidget","nearestDescNode","selectionBetween","editorOwnsSelection","hasSelection","selectionToDOM","syncNodeSelection","curSel","selectCursorWrapper","resetEditableFrom","resetEditableTo","brokenSelectBetweenUneditable","temporarilyEditableNear","resetEditable","removeClassOnSelectionChange","setEditable","clearNodeSelection","hasFocusAndSelection","anchorInRightPlace","moveSelectionBlock","$side","selectHorizontally","mods","$newHead","nodePos","nodeLen","isIgnorable","skipIgnoredNodes","skipIgnoredNodesBefore","skipIgnoredNodesAfter","moveNode","moveOffset","isBlockNode","setSelFocus","textNodeAfter","textNodeBefore","findDirection","mid","selectVertically","beyond","stopNativeHorizontalDelete","nextNode","switchEditable","safariDownArrowBug","focusNode","focusOffset","getMods","captureKeyDown","serializeForClipboard","serializer","detachedDoc","wrapMap","parseFromClipboard","plainText","inCode","asText","readHTML","restoreReplacedSpaces","contextNode","sliceData","inlineParents","addContext","closeSlice","normalizeSiblings","lastWrap","inLast","addToSibling","closeRight","withWrappers","sibling","closeRange","_detachedDoc","_policy","maybeWrapTrusted","metas","firstTag","editHandlers","passiveHandlers","InputState","initInput","eventBelongsToView","runCustomHandler","ensureListeners","setSelectionOrigin","destroyInput","currentHandlers","dispatchEvent","inOrNearComposition","eventCoords","isNear","click","dy","runHandlerOnContext","updateSelection","selectClickedLeaf","selectClickedNode","selectedNode","selectAt","handleSingleClick","selectNode","handleTripleClick","defaultTripleClick","forceDOMFlush","endComposition","selectNodeModifier","flushed","MouseDown","targetPos","timeoutComposition","selectionBeforeUneditable","scheduleComposeEnd","clearComposition","timestampFromCustomEvent","findCompositionNode","textAfter","descAfter","lastChanged","descBefore","restarting","captureCopy","brokenClipboardAPI","cut","sliceSingleNode","capturePaste","plain","doPaste","preferPlain","singleNode","clipboardData","uris","Dragging","dragCopyModifier","dragMoves","moves","mouseDown","draggedSlice","eventPos","$mouse","beforeInsert","domChangeCount","compareObjs","WidgetType","noSpec","span","oldOffset","Decoration","InlineType","DecorationSet","local","decorations","buildTree","childOff","newLocal","mapChildren","byPos","childNode","childOffset","baseOffset","takeSpansForNode","moveSpans","withoutNulls","dec","localSet","DecorationGroup","removeOverlap","members","mappedDecos","oldChildren","moved","oldEnd","newEnd","dSize","mustRebuild","fromLocal","toLocal","mapAndGatherRemainingDecorations","spans","gather","hasNulls","localStart","subtree","working","insertAhead","viewDecorations","observeOptions","useCharData","SelectionState","DOMObserver","handleDOMChange","take","newSel","typeOver","brs","br","blockParent","readSel","checkCSS","fixUpBadSafariComposition","previousSibling","nextSibling","cssChecked","cssCheckWarned","rangeToSelectionRange","currentAnchor","safariShadowSelectionRange","addedNodes","nextCell","parseBetween","from_","to_","find","startDoc","ruleFromNode","isInline","readDOMChange","compositionID","shared","compare","preferredPos","preferredSide","change","findDiff","resolveSelection","$fromA","inlineChange","looksLikeBackspace","chFrom","chTo","mkTr","markChange","isMarkChange","parsedSel","curMarks","prevMarks","$newStart","$newEnd","skipClosingAndOpening","$next","fromEnd","mayOpen","endA","endB","isSurrogatePair","EditorView","checkStateComponent","getEditable","updateCursorWrapper","buildNodeViews","computeDocDeco","redraw","updateSel","pluginsChanged","nodeViews","changedNodeViews","updateDoc","oldScrollPos","forceSelUpdate","selectionContextChanged","chromeKludge","prevState","pluginView","movedPos","dispatchTransaction","sel1","sel2","nA","nB","withMeta","remarkHandlers","editorViewCtx","editorStateCtx","initTimerCtx","editorCtx","inputRulesCtx","prosePluginsCtx","remarkPluginsCtx","nodeViewCtx","markViewCtx","remarkCtx","remarkStringifyOptionsCtx","ConfigReady","InitReady","editor","SchemaReady","schemaTimerCtx","schemaCtx","nodesCtx","marksCtx","extendPriority","processor","plug","key2","schema2","CommandManager","commands2","chains","chained","command","pipe","cmd","createCmdKey","commandsCtx","commandsTimerCtx","CommandsReady","overrideBaseKeymap","keymap2","handleBackspace","KeymapManager","_keymap","keymaps","keymapItem","sortedItems","keymapCtx","keymapTimerCtx","KeymapReady","km","ParserReady","outOfScope$1","parserCtx","parserTimerCtx","SerializerReady","serializerTimerCtx","outOfScope","serializerCtx","defaultValueCtx","editorStateOptionsCtx","editorStateTimerCtx","EditorStateReady","getDoc","parser2","key$1","editorState","optionsOverride","prosePlugins","disposeBaseKeymap","_tr","_oldState","keymap$1","pasteRulesCtx","pasteRulesTimerCtx","PasteRulesReady","pasteRule","EditorViewReady","editorViewTimerCtx","editorViewOptionsCtx","rootCtx","rootDOMCtx","rootAttrsCtx","createViewContainer","prepareViewDom","editorView","xs","editorView2","markViews","view2","isPlainText","EditorStatus","EditorStatus2","_Editor","_enableInspector","_configureList","_onStatusChange","_usrPluginStore","_sysPluginStore","_loadInternal","_prepare","_cleanup","_cleanupInternal","_setStatus","_loadPluginInStore","configPlugin","internalPlugins","enable","_plugins","clearPlugins","Editor","random","customRandom","alphabet","defaultSize","getRandom","customAlphabet","$command","cmdKey","$inputRule","inputRule","ir","irs","$pasteRule","pr","prs","$mark","markSchema","ns","$node","nodeSchema","$prose","prose","prosePlugin","ps","$shortcut","$view","$ctx","$nodeSchema","schemaCtx2","nextSchema","$markSchema","$useKeymap","userKeymap","shortcuts2","keymapDef","keymapTuple","targetKeys","targetKey","$nodeAttr","$markAttr","$remark","initialOptions","remarkPlugin","rp","getMarkdown","isPureText","clipboard","editable","vscodeData","codeBlock","domParser","slice2","GOOD_LEAF_SIZE","RopeSequence","Append","Leaf","prototypeAccessors","leftLen","max_empty_items","Branch","eventCount","preserveItems","remap","remaining","addBefore","histOptions","newItems","oldItems","lastItem","DEPTH_OVERFLOW","cutOffEvents","mirrorPos","rebasedTransform","rebasedCount","rebasedItems","newUntil","iRebased","newMaps","upto","cutPoint","mirrorOffset","HistoryState","undone","prevRanges","prevTime","prevComposition","applyTransaction","historyTr","historyKey","rebased","closeHistoryKey","appended","mustPreserveItems","rangesFor","newGroup","isAdjacentTo","mapRanges","adjacent","histTransaction","redo","pop","newHist","cachedPreserveItems","cachedPreserveItemsPlugins","hist","inputType","undo","buildCommand","undoCommand","redoCommand","historyProviderConfig","historyProviderPlugin","history$1","historyKeymap","updateIndent","indentConfig","indentPlugin","indent","freeGlobal","freeSelf","Symbol","objectProto","nativeObjectToString","symToStringTag","getRawTag","isOwn","unmasked","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","reWhitespace","trimmedEndIndex","reTrimStart","baseTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","isBinary","FUNC_ERROR_TEXT","nativeMax","nativeMin","lastThis","lastCallTime","lastInvokeTime","maxing","invokeFunc","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","debounced","isInvoking","ListenerManager","listenerCtx","listener2","prevDoc","prevMarkdown","prevSelection","currentSelection","trailingConfig","trailingPlugin","trailingPluginKey","shouldAppend","getNode","__","shouldInsertNodeAtEnd","splitListItem","itemAttrs","grandParent","depthBefore","depthAfter","nextType","liftListItem","liftToOuterList","liftOutOfList","endOfList","indexBefore","sinkListItem","nestedBefore","definitions","clean","remarkInlineLinks","serializeText","contentArr","emphasisAttr","emphasisSchema","toggleEmphasisCommand","emphasisStarInputRule","emphasisUnderscoreInputRule","emphasisKeymap","strongAttr","strongSchema","toggleStrongCommand","strongInputRule","strongKeymap","inlineCodeAttr","inlineCodeSchema","toggleInlineCodeCommand","inlineCodeInputRule","inlineCodeKeymap","linkAttr","linkSchema","toggleLinkCommand","updateLinkCommand","linkMark","docSchema","visitEmptyLine","ast","remarkPreserveEmptyLinePlugin","paragraphAttr","paragraphSchema","shouldPreserveEmptyLine","shouldPreserveEmptyLine2","turnIntoTextCommand","paragraphKeymap","headingIndex","defaultHeadingIdGenerator","headingIdGenerator","headingAttr","headingSchema","getId","wrapInHeadingInputRule","wrapInHeadingCommand","downgradeHeadingCommand","headingKeymap","blockquoteAttr","blockquoteSchema","wrapInBlockquoteInputRule","wrapInBlockquoteCommand","blockquoteKeymap","codeBlockAttr","codeBlockSchema","languageAttrs","createCodeBlockInputRule","createCodeBlockCommand","updateCodeBlockLanguageCommand","codeBlockKeymap","imageAttr","imageSchema","insertImageCommand","updateImageCommand","nodeWithPos","newAttrs","insertImageInputRule","hardbreakAttr","hardbreakSchema","insertHardbreakCommand","hardbreakKeymap","hrAttr","hrSchema","insertHrInputRule","insertHrCommand","bulletListAttr","bulletListSchema","ordered","spread","wrapInBulletListInputRule","wrapInBulletListCommand","bulletListKeymap","orderedListAttr","orderedListSchema","wrapInOrderedListInputRule","wrapInOrderedListCommand","orderedListKeymap","listItemAttr","listItemSchema","listType","sinkListItemCommand","liftListItemCommand","splitListItemCommand","liftFirstListItem","liftFirstListItemCommand","listItemKeymap","textSchema","htmlAttr","htmlSchema","inputRules","markInputRules","isMarkSelectedCommand","isNodeSelectedCommand","clearTextInCurrentBlockCommand","setBlockTypeCommand","wrapInBlockTypeCommand","blockRange","addBlockTypeCommand","selectTextNearPosCommand","remarkAddOrderInListPlugin","remarkLineBreak","remarkInlineLinkPlugin","isParent","isHTML","flatMapWithDepth","nthChild","BLOCK_CONTAINER_TYPES","remarkHtmlTransformer","remarkMarker","getMarker","inlineNodesCursorPlugin","inlineNodesCursorPluginKey","inlineNodesCursorPlugin2","leftDec","rightDec","hardbreakClearMarkPlugin","hardbreakFilterNodes","hardbreakFilterPlugin","notIn","isInsertHr","curDepth","canApply","syncHeadingIdPlugin","headingIdPluginKey","updateId","idMap","syncListOrderPlugin","syncOrderLabel","transactions","tr2","orderedListType","bulletListType","listItemType","handleNodeItem","expectedLabel","needDispatch","pos2","_parent","index2","commonmark","readFromCache","addToCache","cachePos","TableMap","problems","leftA","rightA","topA","bottomA","leftB","rightB","topB","bottomB","col","table","rowStart","rowEnd","rowEndIndex","computeMap","findWidth","mapPos","colWidths","rowNode","cellNode","colspan","rowspan","colwidth","colW","widthIndex","expectedPos","missing","tableMap","badWidths","findBadColWidths","hasRowSpan","rowWidth","prevRow","cell","colWidth","freshColWidth","getCellAttrs","extraAttrs","widthAttr","widths","setCellAttrs","validateColwidth","tableNodes","cellAttrs","tableNodeTypes","tableEditingKey","cellAround","isInTable","selectionCell","$cell","cellNear","pointsAtCell","moveCellForward","inSameTable","$cellA","$cellB","tableStart","removeColSpan","addColSpan","columnIsHeader","headerCell","CellSelection","$anchorCell","$headCell","cells","tableChanged","rows","rowContent","cellRect","extraLeft","extraRight","anchorTop","headTop","anchorBottom","headBottom","anchorRect","headRect","anchorLeft","headLeft","anchorRight","headRight","anchorCell","headCell","CellBookmark","drawCellSelection","isCellBoundarySelection","afterFrom","beforeTo","isTextSelectionAcrossCells","fromCellBoundaryNode","toCellBoundaryNode","normalizeSelection","allowTableNodeSelection","lastCell","fixTablesKey","changedDescendants","curSize","fixTables","fixTable","tablePos","mustAdd","prob","convertTableNodeToArrayOfRows","tableNode","rowCount","colCount$1","rowIndex","colIndex","cellIndex","cellPos","topCellIndex","leftCellIndex","convertArrayOfRowsToTableNode","arrayOfNodes","newRows","oldRow","newCells","oldCell","newCell","newRow","moveRowInArrayOfRows","indexesOrigin","indexesTarget","directionOverride","rowsExtracted","positionOffset","findTable","getCellsInColumn","columnIndex","getCellsInRow","getSelectionRangeInColumn","startColIndex","endColIndex","maybeEndIndex","indexes","maybeCells","firstSelectedColumnCells","firstRowCells","columnCells","getSelectionRangeInRow","startRowIndex","endRowIndex","firstSelectedRowCells","firstColumnCells","rowCells","transpose","moveColumn","moveColParams","_getSelectionRangeInC","_getSelectionRangeInC2","originIndex","indexesOriginColumn","indexesTargetColumn","newTable","moveTableColumn$1","$lastCell","firstCell","$firstCell","moveRow","moveRowParams","_getSelectionRangeInR","_getSelectionRangeInR2","indexesOriginRow","indexesTargetRow","moveTableRow$1","selectedRect","addColumn","refColumn","addColumnBefore","addColumnAfter","removeColumn","mapStart","deleteColumn","removeRow","rowPos","nextRow","newPos","deleteRow","setCellAttr","deprecated_toggleHeader","isHeaderEnabledByType","cellPositions","toggleHeader","isHeaderRowEnabled","isHeaderColumnEnabled","selectionStartsAt","cellsRect","newType","relativeCellPos","findNextCell","goToNextCell","deleteTable","deleteCellSelection","baseContent","moveTableRow","moveTableColumn","pastedCells","fitSlice","ensureRectangular","clipCells","newWidth","newHeight","growTable","emptyHead","start$1","emptyRow","isolateHorizontal","cellTop","cellLeft","isolateVertical","updatePos","insertCells","recomp","shiftArrow","maybeSetSelection","atEndOfCell","cellSel","handlePaste","handleMouseDown$1","startEvent","_cellUnderMouse","startDOMCell","domInCell","setCellSelection","cellUnderMouse","$anchor$1","starting","dirStr","mousePos","TableView","defaultCellMinWidth","updateColumnsOnResize","colgroup","overrideCol","overrideValue","totalWidth","fixedWidth","hasWidth","cssWidth","col$1","_nextDOM$parentNode","columnResizingPluginKey","columnResizing","handleWidth","cellMinWidth","View","lastColumnResizable","_plugin$spec","tableName","ResizeState","pluginState","handleMouseMove","handleMouseLeave","handleMouseDown","handleDecorations","activeHandle","domCellAround","edgeCell","updateHandle","_view$dom$ownerDocume","currentColWidth","finish","event$1","pluginState$1","updateColumnWidth","draggedWidth","dragged","displayColumnWidth","domWidth","resizeMinWidth","mapIndex","zeroes","_columnResizingPlugin","tableEditing","isComposing","createDecorations","createSpan","imeSpan","ccount","escapeStringRegexp","findAndReplace","ignored","toPairs","pairIndex","grandparent","matchObject","tupleOrList","tuple","toExpression","toFunction","inConstruct","notInConstruct","gfmAutolinkLiteralFromMarkdown","transformGfmAutolinkLiterals","enterLiteralAutolink","enterLiteralAutolinkValue","exitLiteralAutolink","exitLiteralAutolinkEmail","exitLiteralAutolinkHttp","exitLiteralAutolinkWww","gfmAutolinkLiteralToMarkdown","findUrl","findEmail","protocol","isCorrectDomain","splitUrl","atext","trailExec","trail","closingParenIndex","openingParens","closingParens","email","footnoteReference","footnoteReferencePeek","enterFootnoteCallString","enterFootnoteCall","enterFootnoteDefinitionLabelString","enterFootnoteDefinition","exitFootnoteCallString","exitFootnoteCall","exitFootnoteDefinitionLabelString","exitFootnoteDefinition","gfmFootnoteFromMarkdown","gfmFootnoteToMarkdown","firstLineBlank","footnoteDefinition","mapAll","mapExceptFirst","constructsWithoutStrikethrough","peekDelete","gfmStrikethroughFromMarkdown","enterStrikethrough","exitStrikethrough","gfmStrikethroughToMarkdown","defaultStringLength","markdownTable","stringLength","alignments","cellMatrix","sizeMatrix","longestCellByColumn","mostCellsPerRow","toAlignment","gfmTableFromMarkdown","enterTable","enterCell","enterRow","exitCodeText","exitTable","gfmTableToMarkdown","alignDelimiters","inlineCodeWithTable","handleTable","handleTableCell","handleTableRow","serializeData","handleTableAsData","handleTableRowAsData","matrix","defaultHandlers","gfmTaskListItemFromMarkdown","exitCheck","exitParagraphWithTaskListItem","gfmTaskListItemToMarkdown","listItemWithTaskListItem","firstParaghraph","checkable","checkbox","gfmFromMarkdown","gfmToMarkdown","wwwPrefix","tokenizeWwwPrefix","tokenizeDomain","tokenizePath","tokenizeTrail","emailDomainDotTrail","tokenizeEmailDomainDotTrail","wwwAutolink","tokenizeWwwAutolink","previousWww","protocolAutolink","tokenizeProtocolAutolink","previousProtocol","emailAutolink","tokenizeEmailAutolink","previousEmail","gfmAutolinkLiteral","dot","gfmAtext","previousUnbalanced","emailDomain","emailDomainAfter","emailDomainDot","wwwStart","wwwAfter","protocolStart","protocolPrefixInside","protocolSlashesInside","afterProtocol","protocolAfter","wwwPrefixInside","wwwPrefixAfter","underscoreInLastSegment","underscoreInLastLastSegment","domainInside","domainAfter","domainAtPunctuation","sizeClose","pathInside","pathAtPunctuation","trailCharacterReferenceStart","trailBracketAfter","trailCharacterReferenceInside","gfmFootnote","tokenizeDefinitionStart","tokenizeDefinitionContinuation","gfmFootnoteDefinitionEnd","tokenizeGfmFootnoteCall","tokenizePotentialGfmFootnoteCall","resolveToPotentialGfmFootnoteCall","callStart","callData","callEscape","labelAtMarker","whitespaceAfter","gfmStrikethrough","single","tokenizeStrikethrough","resolveAllStrikethrough","strikethrough","insideSpan","EditMap","addImplementation","vecs","editMap","gfmTableAlign","inDelimiterRow","alignIndex","gfmTable","tokenizeTable","resolveTable","sizeB","bodyRowStart","headRowBefore","headRowStart","headRowBreak","headDelimiterStart","headRowData","headRowEscape","headDelimiterBefore","headDelimiterValueBefore","headDelimiterCellBefore","headDelimiterNok","headDelimiterLeftAlignmentAfter","headDelimiterCellAfter","headDelimiterFiller","headDelimiterRightAlignmentAfter","bodyRowBreak","bodyRowData","bodyRowEscape","inFirstCellAwaitingPipe","rowKind","afterHeadAwaitingFirstBodyRow","lastTableEnd","currentTable","currentBody","currentCell","flushTableEnd","flushCell","previousCell","groupName","valueName","getPoint","relatedStart","relatedEnd","valueToken","tableBody","exits","related","tasklistCheck","tokenizeTasklistCheck","gfmTaskListItem","spaceThenNonSpace","gfm","remarkGfm","micromarkExtensions","fromMarkdownExtensions","toMarkdownExtensions","strikethroughAttr","strikethroughSchema","toggleStrikethroughCommand","strikethroughInputRule","strikethroughKeymap","originalSchema","tableSchema","firstLine","tableHeaderRowSchema","tableRowSchema","tableCellSchema","tableHeaderSchema","createTable","rowsCount","colsCount","headerCells","selectLine","isRowSelection","createCellSelection","selectRow","selectCol","addRowWithAlignment","headerCol","getAllCellsInTable","selectTable","goToPrevTableCellCommand","goToNextTableCellCommand","insertTableCommand","moveRowCommand","moveColCommand","selectRowCommand","selectColCommand","selectTableCommand","deleteSelectedCellsCommand","isRow","isCol","addColBeforeCommand","addColAfterCommand","addRowBeforeCommand","addRowAfterCommand","setAlignCommand","insertTableInputRule","tablePasteRule","_view","_offset","headerRow","tableCells","newHeaderRow","tableKeymap","id$1","markdownId","footnoteDefinitionSchema","footnoteReferenceSchema","extendListItemSchemaForTask","baseSchema","wrapInTaskListInputRule","finPos","pasteRules","autoInsertSpanPlugin","columnResizingPlugin","tableEditingPlugin","remarkGFMPlugin","remarkGFM","pluginKey","getChildIndex","keepTableAlignPlugin","tableRow","tableHeaderRow","currentAlign","FeaturesCtx","CrepeCtx","_editor","_rootElement","_editable","CrepeBuilder","feature","blockConfig","selectRootNodeByDom","filterNodes","needLookup","checkDepth","ancestorPos","filterResult","BlockService","_BlockService_instances","_createSelection","_activeSelection","_activeDOMRect","_dragging","_notify","_hide","_show","_handleMouseDown","_handleMouseUp","_handleDragStart","_handleDragEnd","_mousemoveCallback","_dragEnd","view_get","nodeSelection","activeEl","filterNodes_get","hasHorizontalScrollbar","rootRect","totalHeight","blockService","blockServiceInstance","blockSpec","blockPlugin","milkdownPluginBlockKey","service","BlockProvider","_BlockProvider_instances","_element","_service","_activeNode","_root","_initialized","_middleware","_floatingUIOptions","_getOffset","_getPosition","_getPlacement","editorDom","deriveContext","virtualEl","offsetOption","offsetExt","makeMap","EMPTY_OBJ","EMPTY_ARR","NO","isModelListener","isMap","toTypeString","isSet","isPromise","toRawType","isIntegerKey","isReservedProp","isBuiltInDirective","cacheStringFunction","camelizeRE","camelize","hyphenateRE","hyphenate","capitalize","toHandlerKey","hasChanged","invokeArrayFns","writable","looseToNumber","_globalThis","getGlobalThis","normalizeStyle","parseStringStyle","listDelimiterRE","propertyDelimiterRE","styleCommentRE","cssText","normalizeClass","HTML_TAGS","SVG_TAGS","MATH_TAGS","isHTMLTag","isSVGTag","isMathMLTag","isSpecialBooleanAttr","includeBooleanAttr","warn","activeEffectScope","EffectScope","detached","currentEffectScope","fromParent","getCurrentScope","activeSub","pausedQueueEffects","ReactiveEffect","cleanupEffect","prepareDeps","prevEffect","prevShouldTrack","shouldTrack","cleanupDeps","removeSub","batchDepth","batchedSub","batchedComputed","isComputed","startBatch","endBatch","removeDep","refreshComputed","globalVersion","dep","prevSub","soft","nextSub","prevDep","nextDep","trackStack","pauseTracking","resetTracking","Link","Dep","debugInfo","addSub","currentTail","targetMap","ITERATE_KEY","MAP_KEY_ITERATE_KEY","ARRAY_ITERATE_KEY","depsMap","oldTarget","targetIsArray","isArrayIndex","newLength","reactiveReadArray","toRaw","isShallow","toReactive","shallowReadArray","toWrapped","isReadonly","toReadonly","isReactive","arrayInstrumentations","searchProxy","noTracking","reduce","comparer","wrapValue","arrayProto","wrappedRetFn","methodFn","result2","wrappedFn","isProxy","isNonTrackableKeys","builtInSymbols","BaseReactiveHandler","_isReadonly","_isShallow","isReadonly2","isShallow2","shallowReadonlyMap","readonlyMap","shallowReactiveMap","reactiveMap","reactive","MutableReactiveHandler","isArrayWithIntegerKey","isOldValueReadonly","hadKey","ReadonlyReactiveHandler","mutableHandlers","readonlyHandlers","shallowReactiveHandlers","shallowReadonlyHandlers","toShallow","getProto","createIterableMethod","rawTarget","targetIsMap","isPair","isKeyOnly","innerIterator","createReadonlyMethod","createInstrumentations","shallow","instrumentations","rawKey","observed","checkIdentityKeys","hadItems","createInstrumentationGetter","mutableCollectionHandlers","shallowCollectionHandlers","readonlyCollectionHandlers","shallowReadonlyCollectionHandlers","targetTypeMap","getTargetType","createReactiveObject","shallowReactive","shallowReadonly","baseHandlers","collectionHandlers","proxyMap","targetType","existingProxy","proxy","markRaw","createRef","shallowRef","RefImpl","useDirectValue","unref","ref2","shallowUnwrapHandlers","proxyRefs","objectWithRefs","ComputedRefImpl","isSSR","getterOrOptions","debugOptions","cRef","INITIAL_WATCHER_VALUE","cleanupMap","activeWatcher","onWatcherCleanup","cleanupFn","failSilently","immediate","once","scheduler","augmentJob","warnInvalidSource","reactiveGetter","source2","traverse","boundCleanup","forceTrigger","isMultiSource","currentEffect","baseGetter","watchHandle","_cb","immediateFirstRun","currentWatcher","cleanup2","pushWarningContext","vnode","popWarningContext","isWarning","warn$1","appWarnHandler","trace","getComponentTrace","callWithErrorHandling","formatComponentName","warnArgs","formatTrace","currentVNode","normalizedStack","parentInstance","logs","formatTraceEntry","recurseCount","postfix","formatProps","formatProp","ErrorTypeStrings$1","callWithAsyncErrorHandling","throwInDev","contextVNode","throwUnhandledErrorInProduction","exposedInstance","errorInfo","errorCapturedHooks","logError","throwInProd","flushIndex","pendingPostFlushCbs","activePostFlushCbs","postFlushIndex","resolvedPromise","currentFlushPromise","RECURSION_LIMIT","nextTick","findInsertionIndex","middle","middleJob","middleJobId","queueJob","lastJob","queueFlush","flushJobs","queuePostFlushCb","flushPreFlushCbs","checkRecursiveUpdates","flushPostFlushCbs","deduped","getComponentName","isHmrUpdating","hmrDirtyComponents","tryWrap","createRecord","rerender","reload","registerHMR","unregisterHMR","initialDef","normalizeClassComponent","isClassComponent","newRender","newComp","updateComponentDef","instances","oldComp","dirtyInstances","devtools$1","devtoolsNotInstalled","emit$1","setDevtoolsHook$1","newHook","devtoolsInitApp","app","Comment","Static","devtoolsUnmountApp","devtoolsComponentAdded","createDevtoolsComponentHook","devtoolsComponentUpdated","_devtoolsComponentRemoved","devtoolsComponentRemoved","devtoolsPerfStart","createDevtoolsPerformanceHook","devtoolsPerfEnd","devtoolsComponentEmit","currentRenderingInstance","currentScopeId","setCurrentRenderingInstance","withCtx","isNonScopedSlot","renderFnWithContext","prevInstance","validateDirectiveName","invokeDirectiveHook","prevVNode","oldBindings","binding","provides","parentProvides","treatDefaultAsFactory","getCurrentInstance","currentApp","ssrContextKey","useSSRContext","watchEffect","doWatch","baseWatchOptions","runsImmediately","ssrCleanup","isInSSRComponentSetup","watchStopHandle","isPre","queuePostRenderEffect","isFirstRun","watch$1","instanceWatch","publicThis","createPathGetter","setCurrentInstance","TeleportEndKey","isTeleport","leaveCbKey","setTransitionHooks","defineComponent","extraOptions","markAsyncBoundary","knownTemplateRefs","pendingSetRefMap","rawRef","oldRawRef","parentSuspense","isUnmount","isAsyncWrapper","refValue","getComponentPublicInstance","oldRef","setupState","rawSetupState","canSetSetupRef","canSetRef","invalidatePendingSetRef","oldRawRefAtom","_isString","_isRef","doSet","newVal","pendingSetRef","isKeepAlive","onActivated","registerKeepAliveHook","onDeactivated","wrappedHook","injectHook","injectToKeepAliveRoot","keepAliveRoot","injected","onUnmounted","prepend","apiName","createHook","lifecycle","onBeforeMount","onMounted","onBeforeUpdate","onUpdated","onBeforeUnmount","onServerPrefetch","onRenderTriggered","onRenderTracked","onErrorCaptured","NULL_DYNAMIC_COMPONENT","getPublicInstance","isStatefulComponent","publicPropertiesMap","resolveMergedOptions","isReservedPrefix","hasSetupBinding","PublicInstanceProxyHandlers","accessCache","appContext","shouldCacheAccess","publicGetter","cssModule","globalProperties","markAttrsAccessed","cssModules","createDevRenderContext","exposePropsOnRenderContext","propsOptions","exposeSetupStateOnRenderContext","normalizePropsOrEmits","createDuplicateChecker","applyOptions","callHook","dataOptions","computedOptions","watchOptions","provideOptions","injectOptions","beforeMount","beforeUpdate","activated","deactivated","beforeDestroy","beforeUnmount","destroyed","unmounted","render","renderTracked","renderTriggered","errorCaptured","serverPrefetch","expose","inheritAttrs","components","directives","filters","checkDuplicateProperties","resolveInjections","methodHandler","createWatcher","registerLifecycleHook","_hook","exposed","normalizeInject","mixins","extendsOptions","globalMixins","optionMergeStrategies","resolved","mergeOptions","strats","asMixin","strat","internalOptionMergeStrats","mergeDataFn","mergeEmitsOrPropsOptions","mergeObjectOptions","mergeAsArray","mergeWatchOptions","mergeInject","createAppContext","uid$1","createAppAPI","rootComponent","rootProps","installedPlugins","pluginCleanupFns","mixin","validateComponentName","directive","rootContainer","isHydrate","createVNode","cloned","cloneVNode","lastApp","getModelModifiers","modelName","rawArgs","emitsOptions","lowerCaseEvent","handlerName","onceHandler","mixinEmitsCache","normalizeEmitsOptions","comp","hasExtends","extendEmits","raw2","normalizedFromExtend","isEmitListener","accessedAttrs","renderComponentRoot","withProxy","renderCache","fallthroughAttrs","proxyToUse","thisProxy","normalizeVNode","render2","getFunctionalFallthrough","setRoot","getChildRoot","shapeFlag","filterModelListeners","allAttrs","eventAttrs","isElementRoot","rawChildren","dynamicChildren","childRoot","filterSingleRoot","dynamicIndex","updatedRoot","recurse","singleRoot","isVNode","shouldUpdateComponent","nextVNode","optimized","patchFlag","emits","hasPropsChanged","dynamicProps","nextKeys","updateHOCHostEl","internalObjectProto","createInternalObject","isInternalObject","initProps","rawProps","isStateful","setFullProps","validateProps","isInHmrContext","updateProps","rawPrevProps","rawCurrentProps","hasAttrsChanged","propsToUpdate","camelizedKey","resolvePropValue","kebabKey","needCastKeys","rawCastValues","camelKey","castValues","isAbsent","hasDefault","propsDefaults","mixinPropsCache","normalizePropsOptions","extendProps","normalizedKey","validatePropName","propType","shouldCast","shouldCastTrue","getType","resolvedValues","camelizePropsKey","validateProp","skipCheck","expectedTypes","valid","expectedType","assertType","getInvalidTypeMessage","isSimpleType","receivedType","expectedValue","styleValue","receivedValue","isExplicable","elem","isInternalKey","normalizeSlotValue","normalizeSlot","rawSlot","normalizeObjectSlots","rawSlots","normalizeVNodeSlots","assignSlots","initSlots","updateSlots","needDeletionCheck","deletionComparisonTarget","perf","startMeasure","endMeasure","startTag","endTag","measureName","initFeatureFlags","needWarn","multi","queueEffectWithSuspense","createRenderer","baseCreateRenderer","createHydrationFns","hostInsert","hostRemove","hostPatchProp","hostCreateElement","hostCreateText","hostCreateComment","hostSetText","hostSetElementText","hostParentNode","hostNextSibling","hostSetScopeId","hostInsertStaticContent","n1","parentComponent","slotScopeIds","isSameVNodeType","getNextHostNode","unmount","processText","processCommentNode","mountStaticNode","patchStaticNode","processFragment","processElement","processComponent","internals","newChild","oldChild","removeStaticNode","moveStaticNode","mountElement","customElement","patchElement","vnodeHook","transition","dirs","mountChildren","resolveChildrenNamespace","setScopeId","invokeVNodeHook","needCallTransitionHooks","needTransition","scopeId","subTree","isSuspense","parentVNode","cloneIfMounted","oldProps","toggleRecurse","patchBlockChildren","traverseStaticChildren","patchChildren","patchProps","fallbackContainer","oldVNode","newVNode","fragmentStartAnchor","fragmentEndAnchor","fragmentSlotScopeIds","mountComponent","updateComponent","initialVNode","createComponentInstance","setupComponent","setupRenderEffect","updateComponentPreRender","componentUpdateFn","bu","nonHydratedAsyncRoot","locateNonHydratedAsyncRoot","originNext","nextTree","prevTree","bm","isAsyncWrapperVNode","scopedInitialVNode","c1","prevShapeFlag","c2","patchKeyedChildren","patchUnkeyedChildren","unmountChildren","oldLength","commonLength","nextChild","parentAnchor","e1","nextPos","s1","keyToNewIndexMap","patched","toBePatched","maxNewIndexSoFar","newIndexToOldIndexMap","prevChild","increasingNewIndexSequence","getSequence","anchorVNode","resolveAsyncComponentPlaceholder","moveType","leave","delayLeave","afterLeave","remove2","performLeave","doRemove","cacheIndex","shouldInvokeDirs","shouldInvokeVnodeHook","unmountComponent","removeFragment","performRemove","bum","um","invalidateMount","teleportEnd","isFlushing","currentNamespace","ch1","ch2","arrI","subComponent","anchorVnode","suspense","setBlockTracking","inVOnce","createVNodeWithArgsTransform","_createVNode","normalizeKey","normalizeRef","ref_key","ref_for","createBaseVNode","needFullChildrenNormalization","normalizeChildren","guardReactiveProps","klass","extraProps","mergeRef","cloneTransition","mergedProps","deepCloneVNode","createTextVNode","flag","slotFlag","toMerge","emptyAppContext","uid","internalSetCurrentInstance","setInSSRSetupState","registerGlobalSetter","setters","unsetCurrentInstance","isBuiltInTag","isNativeTag","setupResult","setupStatefulComponent","isRuntimeOnly","setupContext","createSetupContext","isAsyncSetup","resolvedResult","handleSetupResult","finishComponentSetup","skipOptions","attrsProxyHandlers","getSlotsProxy","exposedType","attrsProxy","slotsProxy","classifyRE","classify","includeInferred","inferFromRegistry","registry","computed$1","propsOrChildren","initCustomFormatter","vueStyle","numberStyle","stringStyle","keywordStyle","genRefFlag","formatValue","formatInstance","blocks","createInstanceBlock","extractKeys","asRaw","extracted","isKeyOfType","policy","tt","unsafeToTrustedHTML","svgNS","mathmlNS","templateContainer","nodeOps","vtcKey","patchClass","isSVG","transitionClasses","vShowOriginalDisplay","vShowHidden","CSS_VAR_TEXT","displayRE","patchStyle","isCssString","hasControlledDisplay","prevStyle","cssVarText","semicolonRE","importantRE","autoPrefix","prefixes","prefixCache","rawName","xlinkNS","patchAttr","patchDOMProp","needRemove","addEventListener","removeEventListener","veiKey","patchEvent","prevValue","invokers","existingInvoker","sanitizeEventValue","parseName","invoker","createInvoker","optionsModifierRE","cachedNow","getNow","patchStopImmediatePropagation","originalStop","isNativeOn","patchProp","shouldSetAsProp","camelize$1","rendererOptions","ensureRenderer","createApp","injectNativeTagCheck","injectCompilerOptionsCheck","containerOrSelector","normalizeContainer","resolveRootNamespace","isCustomElement","compilerOptions","initDev","slashFactory","slashSpec","slashPlugin","SlashProvider","_SlashProvider_instances","_debounce","_shouldShow","_updater","_onUpdate","composing","isSame","matchNode","isTextBlock","isSlashChildren","notHasFocus","isNotInParagraph","_shouldShow_fn","currentTextBlockContent","icon","__defProp$2","__getOwnPropSymbols$2","__hasOwnProp$2","__propIsEnum$2","__defNormalProp$2","__spreadValues$2","imageBlockConfig","visitImage","remarkImageBlockPlugin","__defProp$1","__getOwnPropSymbols$1","__hasOwnProp$1","__propIsEnum$1","__defNormalProp$1","__spreadValues$1","IMAGE_DATA_TYPE","imageBlockSchema","caption","nanoid","ImageInput","setLink","onUpload","imageIcon","uploadButton","confirmButton","uploadPlaceholderText","focusLinkInput","linkInputRef","currentLink","uuid","hidePlaceholder","onEditLink","onKeydown","_b2","onConfirmLinkInput","onUploadFile","ImageViewer","setAttr","resizeHandle","showCaption","onImageLoad","transformedHeight","onToggleCaption","onInputCaption","onBlurCaption","onResizeHandlePointerMove","onResizeHandlePointerUp","originHeight","ratio2","onResizeHandlePointerDown","MilkdownImageBlock","imageBlockView","initialNode","getPos","disposeSelectedWatcher","proxyDomURL","bindAttrs","proxiedURL","updatedNode","useCrepeFeatures","crepeFeatureConfig","features","CrepeFeature","CrepeFeature2","bulletListIcon","codeIcon","dividerIcon","h1Icon","h2Icon","h3Icon","h4Icon","h5Icon","h6Icon","menuIcon","orderedListIcon","plusIcon","quoteIcon","tableIcon","textIcon","todoListIcon","functionsIcon","isInCodeBlock","isInList","__typeError$2","__accessCheck$2","__privateGet$2","__privateAdd$2","__privateSet$2","_groups","_getGroupInstance","GroupBuilder$1","groupInstance","group2","getGroups","_F","_G","_H","_I","_J","_K","_L","_M","_N","_O","_P","_Q","_R","_S","_T","_U","_V","_W","_X","_Y","_Z","_$","_aa","_ba","_ca","_da","_ea","_fa","_ga","_ha","_ia","_ja","_ka","_la","_ma","_na","_oa","_pa","_qa","_ra","_sa","_ta","_ua","_va","_wa","_xa","_ya","_za","_Aa","_Ba","_Ca","_Da","_Ea","_Fa","_Ga","_Ha","_Ia","_Ja","_Ka","_La","_Ma","_Na","_Oa","_Pa","_Qa","_Ra","_Sa","_Ta","_Ua","_Va","_Wa","_Xa","_Ya","_Za","__a","_$a","_ab","_bb","_db","_eb","_fb","_gb","_hb","_ib","_jb","_kb","isLatexEnabled","isImageBlockEnabled","isTableEnabled","groupBuilder","GroupBuilder","textGroup","ctx2","hr","listGroup","bulletList","orderedList","advancedGroup","imageBlock","groups","items2","groups2","groupInfo","hoverIndex","prevMousePosition","onPointerMove","onHover","prevHoverIndex","scrollToIndex","scrollRoot","runByIndex","nextGroup","getOnPointerEnter","prevPos","__typeError$1","__accessCheck$1","__privateGet$1","__privateAdd$1","__privateSet$1","_content$1","_app$1","_filter","_slashProvider","_programmaticallyPos","menuAPI","configureMenu","MenuView","isSelectionAtEndOfNode","validPos","BlockHandle","addButton","_app","BlockHandleView","blockProviderOptions","blockDom","totalDescendant","domRect","handleRect","paddingTop","paddingBottom","handleHeight","configureBlockHandle","blockEdit","TooltipProvider","_TooltipProvider_instances","_cleanupAutoUpdate","_shift","_updatePosition","_shouldAutoUpdate","virtualElement","isEmptyTextBlock","isTooltipChildren","tooltipFactory","tooltipSpec","tooltipPlugin","__defProp$3","__getOwnPropSymbols$3","__hasOwnProp$3","__propIsEnum$3","__defNormalProp$3","__spreadValues$3","linkTooltipState","linkTooltipAPI","linkPreviewTooltip","linkEditTooltip","SourceLocation","lexer","loc","endToken","ParseError$1","ParseError","underlined","setting","defaultIfUndefined","uppercase","ESCAPE_LOOKUP","ESCAPE_REGEX","getBaseElem","isCharacterBox","baseElem","protocolFromUrl","utils","SETTINGS_SCHEMA","defs","getDefaultValue","Settings","errorCode","errorMsg","strict","trust","cramped","sup","fracNum","fracDen","cramp","text$1","Dc","Tc","Sc","SS","SSc","Style$1","scriptData","scriptFromCodepoint","codepoint","allBlocks","supportedCodepoint","hLinePad","sqrtMain","extraVinculum","sqrtSize1","sqrtSize2","sqrtSize3","sqrtSize4","phasePath","sqrtTall","viewBoxHeight","vertSegment","sqrtPath","innerPath","tallDelim","midHeight","toText","fontMetricsData","sigmasAndXis","extraCharacterMap","setFontMetrics","fontName","metrics","getCharacterMetrics","font","fontMetricsBySizeIndex","getGlobalMetrics","sizeIndex","sizeStyleMap","sizeMultipliers","sizeAtStyle","Options","wantSize","fontFamily","fontWeight","fontShape","oldOptions","ptPerUnit","relativeUnit","validUnit","unit","calculateSize","sizeValue","unitOptions","makeEm","createClass","initNode","toNode","invalidAttributeNameRegex","toMarkup","Span","attribute","iCombinations","SymbolNode","italic","needsSpan","escaped","SvgNode","PathNode","pathName","alternate","LineNode","assertSymbolDomNode","assertSpan","ATOMS","NON_ATOMS","symbols","defineSymbol","acceptUnicodeChar","math","ams","accent","bin","mathord","op","punct","textord","ligatures","mathTextSymbols","textSymbols","_ch","letters","_i2","_ch2","wideChar","_i3","_ch3","_i4","_ch4","extraLatin","_i5","_ch5","wideLatinLetterData","wideNumeralData","wideCharacterFont","codePoint","lookupSymbol","makeSymbol","lookup","symbolNode","mathsym","boldsymbol","makeOrd","isFont","fontOrFamily","wideFontName","wideFontClass","fontClasses","fontData","fontMap","retrieveTextFontName","makeFragment","_fontName","_fontName2","_fontName3","canCombine","_style","tryCombineChars","chars","sizeElementFromChildren","maxFontSize","makeSpan$2","makeSvgSpan","makeLineSpan","thickness","makeAnchor","wrapFragment","getVListChildrenAndDepth","_depth","currPos","makeVList","pstrutSize","pstrut","realChildren","minPos","_child","_elem","childWrap","vlist","emptySpan","depthStrut","topStrut","vtable","makeGlue","measurement","baseFontName","fontStylesName","svgData","staticSvg","svgNode","buildCommon","thinspace","mediumspace","thickspace","spacings","tightSpacings","_functions","_htmlGroupBuilders","_mathmlGroupBuilders","defineFunction","htmlBuilder","mathmlBuilder","defineFunctionBuilders","_ref2","normalizeArgument","ordargument","makeSpan$1","binLeftCanceller","binRightCanceller","styleMap$1","DomEnum","buildExpression$1","isRealGroup","surrounding","buildGroup$1","glueOptions","dummyPrev","dummyNext","traverseNonSpaceNodes","prevType","getTypeOfDomTree","partialGroup","checkPartialGroup","nonspace","getOutermostNode","makeNullDelimiter","moreClasses","groupNode","multiplier","buildHTMLUnbreakable","strut","buildHTML","eqnNum","nobreak","tagChild","htmlNode","newDocumentFragment","MathNode","SpaceNode","mathMLTree","makeText","makeRow","getVariant","isNumberPunctuation","buildExpression","isOrdgroup","buildGroup","lastGroup","buildExpressionRow","buildMathML","texExpression","isDisplayMode","forMathmlOnly","annotation","semantics","optionsFromSettings","displayWrap","katexNode","mathMLNode","_htmlNode","buildHTMLTree","stretchyCodePoint","mathMLnode","katexImagesData","groupLength","svgSpan","buildSvgSpan_","viewBoxWidth","grp","numChars","_height","imgIndex","_minWidth","_viewBoxHeight","_height2","numSvgChildren","widthClasses","aligns","align1","_path","_svgNode","_span","encloseSpan","topPad","bottomPad","stretchy","assertNodeType","assertSymbolNodeType","typedNode","checkSymbolNodeType","htmlBuilder$a","supSubGroup","mustShift","baseChar","baseGroup","accentBelow","clearance","accentBody","accentFull","accentWrap","mathmlBuilder$9","accentNode","NON_STRETCHY_ACCENT_REGEX","isStretchy","isShifty","funcName","innerGroup","kern","paddedNode","optArgs","upperGroup","arrowPrefix","lowerGroup","arrowBody","arrowShift","upperShift","lowerShift","arrowNode","upperNode","lowerNode","_lowerNode","makeSpan","htmlBuilder$9","mathmlBuilder$8","binrelClass","_ref3","baseArg","shiftedArg","mclass","baseOp","supsub","cdArrowFunctionName","isStartOfArrow","isLabelEnd","endChar","cdArrow","arrowChar","labels","leftLabel","bareArrow","sizedArrow","rightLabel","arrowGroup","parseCD","parsedRows","rowNodes","labelNum","inLabel","wrappedArrow","cols","number","htmlBuilder$8","mathmlBuilder$7","breakOnTokenText","newLine","globalMap","checkControlSequence","getRHS","letCommand","macro","numArgs","delimiters","_ref4","getMetrics","symbol","styleWrap","delim","toStyle","delimSizeMultiplier","centerSpan","makeSmallDelim","mathrmSize","makeLargeDelim","makeGlyphSpan","sizeClass","corner","makeInner","lapInEms","lap","verts","doubleVerts","makeStackedDelim","heightTotal","repeat","svgLabel","topMetrics","topHeightTotal","repeatMetrics","repeatHeightTotal","bottomMetrics","bottomHeightTotal","middleHeightTotal","middleFactor","middleMetrics","repeatCount","realHeightTotal","axisHeight","pathStr","innerHeight","_innerHeight","vbPad","emPad","sqrtSvg","sqrtName","pathNode","makeSqrtImage","traverseSequence","stackLargeDelimiterSequence","spanHeight","texHeight","advanceWidth","sizeToMaxHeight","stackLargeDelimiters","stackAlwaysDelimiters","stackNeverDelimiters","makeSizedDelim","stackNeverDelimiterSequence","stackAlwaysDelimiterSequence","delimTypeToFont","heightDepth","makeCustomSizedDelim","delimType","makeLeftRightDelim","delimiterFactor","delimiterExtend","maxDistFromAxis","delimiterSizes","checkDelimiter","symDelim","assertParsed","innerDepth","hadMiddle","leftDelim","middleDelim","isMiddle","rightDelim","colorOptions","rightNode","middleNode","htmlBuilder$7","imgShift","isSingleChar","lineWeight","angleHeight","ruleThickness","mathmlBuilder$6","fboxsep","thk","backgroundColor","_ref5","_environments","defineEnvironment","_macros","defineMacro","getHLines","hlineInfo","nxt","validateAmsEnvironmentContext","getAutoTag","parseArray","hskipBeforeAndAfter","addJot","arraystretch","colSeparationType","autoTag","singleRow","emptySingleRow","maxNumCols","leqno","stretch","rowGaps","hLinesBeforeRow","tags","beginRow","endRow","dCellStyle","envName","htmlBuilder$6","nr","nc","hlines","pt","arraycolsep","localMultiplier","baselineskip","jot","arrayskip","arstrutHeight","arstrutDepth","setHLinePos","hlinesInGap","inrow","outrow","rowGap","colDescriptions","colSep","colDescrNum","tagSpans","rw","tagSpan","colDescr","firstSeparator","lineType","sepwidth","_shift2","dashes","vListElems","hline","eqnNumCol","alignMap","mathmlBuilder$5","tbl","glue","menclose","columnLines","prevTypeWasAlign","iStart","iEnd","_cols","rowLines","alignedHandler","separationType","isSplit","numMaths","numCols","emptyGroup","arg0","isAligned","styling","ordgroup","curMaths","pregap","symNode","colalign","nde","ca","colAlign","environments","nameGroup","_args","endNameToken","htmlBuilder$5","mathmlBuilder$4","fontAliases","adjustStyle","originalStyle","htmlBuilder$4","nstyle","dstyle","numerm","hStrut","dStrut","denomm","ruleWidth","ruleSpacing","numShift","denomShift","frac","midShift","candidateClearance","delimSize","mathmlBuilder$3","isDisplay","withDelims","leftOp","rightOp","numer","denom","hasBarLine","replaceWith","stylArray","delimFromValue","delimString","barNode","barSize","styl","textOrd","_ref6","htmlBuilder$3","braceBody","vSpan","mathmlBuilder$2","trustContext","firstEquals","sizeData","totalheight","attributeStr","keyVal","mathFunction","muUnit","dimension","fix","outerMode","chooseMathStyle","assembleSupSub","supGroup","subGroup","slant","baseShift","subIsSingleCharacter","finalGroup","_bottom","spacer","noSuccessor","htmlBuilder$2","hasLimits","large","stash","oval","mathmlBuilder$1","operator","singleCharBigOps","fName","singleCharIntegrals","htmlBuilder$1","childText","isAllString","defaultRuleThickness","phantom","amount","sizingGroup","sizeFuncs","smashHeight","smashDepth","tbArg","letter","smashedNode","theta","phi","lineClearance","minDelimiterHeight","delimDepth","rootm","toShift","rootVList","rootVListWrap","styleMap","newStyle","styleAttributes","htmlBuilderDelegate","isSup","builderDelegate","valueBase","valueSup","valueSub","supm","subm","supShift","subShift","_newOptions","minSupShift","marginRight","marginLeft","isOiint","psi","vlistElem","_vlistElem","isBrace","isOver","_base2","_base","defaultVariant","cssSpace","regularSpace","ord","pad","padNode","textFontFamilies","textFontWeights","textFontShapes","optionsWithFont","makeVerb","functions","spaceRegexString","controlWordRegexString","controlSymbolRegexString","controlWordWhitespaceRegexString","controlSpaceRegexString","combiningDiacriticalMarkString","combiningDiacriticalMarksEndRegex","tokenRegexString","Lexer","nlIndex","Namespace","builtins","globalMacros","undefs","undef","macros","nextToken","digitToNumber","digit","newcommand","existsOK","nonexistsOK","skipIfExists","argText","dotsByToken","thedots","spaceAfterDots","latexRaiseA","braketHelper","middleDouble","oldMiddle","oldMiddleDouble","midMacro","double","doubled","implicitCommands","MacroExpander","newMode","isOptional","delims","isDelimited","expandableOnly","topToken","expansion","oldStackLength","catcode","stripped","bodyLexer","unicodeSubRegEx","uSubsAndSups","unicodeAccents","unicodeSymbols","Parser","oldToken","breakOnInfix","lex","overIndex","numerNode","denomNode","numerBody","denomBody","symbolToken","textordArray","colorNode","superscript","subscript","limits","prime","primes","isSub","subsupTokens","funcData","totalArgs","argType","optional","_group2","modeName","argToken","firstToken","lastToken","isBlank","groupEnd","nucleus","star","family","toParse","baseNode","renderToDomTree","renderToString","generateParseTree","renderError","renderToHTMLTree","__domTree","katex","boldIcon","italicIcon","linkIcon","strikethroughIcon","mathInlineId","mathInlineSchema","toggleLatexCommand","hasLatex","latexPos","latexNode","_tr2","functionGroup","Toolbar","checkActive","_tooltipProvider","_selection","toolbarTooltip","ToolbarView","isNotTextBlock","activeElement","toolbar","builderRef","editorReady","debounceTimer","isUpdatingFromOutside","lastEmittedValue","builder","editorContent","ParseErrorCode","LINE_TERMINATOR_RE","TextLineTransformStream","TextStreamLineIterator","parseTextStream","srtParser","ssaParser","vttParser","parseByteStream","textStream","TextCue","CueBase","COMMA$1","PERCENT_SIGN$1","toPercentage","toCoords","toFloat","HEADER_MAGIC","COMMA","PERCENT_SIGN","SETTING_SEP_RE","SETTING_LINE_RE","NOTE_BLOCK_START","REGION_BLOCK_START","REGION_BLOCK_START_RE","SPACE_RE","TIMESTAMP_SEP","TIMESTAMP_SEP_RE","ALIGN_RE","LINE_ALIGN_RE","POS_ALIGN_RE","TIMESTAMP_RE","VTTBlock","VTTBlock2","VTTParser","lineCount","hasText","trailingText","endTimeText","parseVTTTimestamp","badValue","viewport","linePos","lineAlign","percentage","colPos","milliseconds","createVTTParser","DIGIT_RE","MULTI_SPACE_RE","TAG_NAME","HTML_ENTITIES","HTML_ENTITY_RE","COLORS","BLOCK_TYPES","tokenizeVTTCue","addText","addClass","replaceHTMLEntities","createBlockNode","entity","setCSSVar","setDataAttr","setPartAttr","getLineHeight","createVTTCueTemplate","renderVTTTokensString","isTimestamp","debounce2","STARTING_BOX","createBox","moveBox","isBoxCollision","isAnyBoxCollision","isWithinBox","isBoxOutOfBounds","calcBoxIntersectPercentage","createCSSBox","resolveRelativeBox","BOX_SIDES","setBoxCSSVars","cssBox","avoidBoxCollisions","positionedBox","startBox","intersection","POSITION_OVERRIDE","positionCue","computeCueLine","displayBox","createStartingBox","initialAxis","isHorizontal","posAxis","getStyledPositions","computeCuePosition","computeCuePositionAlignment","REGION_AXIS","positionRegion","regionEl","overlay","cue2","cueA","cueB","activeRegions","isRegion","positionAlignment","AudioProvider","HLSController","_HLSController_instances","isLiveLowLatency","dispatchHLSEvent_fn","onAudioSwitch_fn","onLevelSwitched_fn","onLevelLoaded_fn","onLevelUpdated_fn","onTracksFound_fn","onCuesParsed_fn","nonNativeTrack","targetduration","remoteTrack","HLSLibLoader","_HLSLibLoader_instances","loadHLSScript","importHLS","HLSProvider","EmbedProvider","iframe","_EmbedProvider_instances","_iframe","onWindowMessage_fn","videoIdRE","infoCache","pendingFetch","videoHash","oembedSrc","thumnailRegex","thumbnailId","trackedVimeoEvents","VimeoProvider","_VimeoProvider_instances","_videoId","_pro","_hash","_currentSrc","_fullscreenActive","_seekableRange","_currentCue","_chaptersTrack","_promises","_videoInfoPromise","_preventTimeUpdates","remote_fn","watchVideoId_fn","watchVideoInfo_fn","watchPro_fn","showControls","onEvent_fn","onMethod_fn","isPro","pro","onReady_fn","showEmbedControls","videoTitle","onLoadProgress_fn","onChaptersChange_fn","getPromise_fn","attachListeners_fn","onPlayProgress_fn","onBufferStart_fn","onBufferEnd_fn","removeChapters_fn","chapter","nextChapter","newQuality","posterCache","webp","resolveYouTubePosterURL","YouTubePlayerState","YouTubeProvider","_YouTubeProvider_instances","_seekingTimer","_invalidPlay","loaded","playFail_fn","pauseFail_fn","hasEnded","isBuffering","isPendingPlay","isPending_fn","isPlay","getCastFrameworkURL","hasLoadedCastFramework","isCastAvailable","isCastConnected","getCastContext","getCastSession","getCastSessionMedia","hasActiveCastSession","getDefaultCastOptions","getCastErrorMessage","listenCastContextEvent","GoogleCastLoader","_GoogleCastLoader_instances","openEvent","loadCastFramework_fn","notifyRemoteStateChange_fn","showPrompt_fn","createError_fn","vidstackBeT6vBOi","loadedEvent","setOptions_fn","MILLISECOND_SEP_RE","SRTParser","createSRTParser","FORMAT_START_RE","STYLE_START_RE","DIALOGUE_START_RE","FORMAT_SPLIT_RE","STYLE_FUNCTION_RE","NEW_LINE_RE","STYLES_SECTION_START_RE","EVENTS_SECTION_START_RE","SSAParser","dialogue","outlineX","vertical","marginV","outlineY","outlineColor","bgColor","borderStyle","parseColor","_outlineColor","buildTextShadow","voice","abgr","alpha","noOfShadows","textShadow","createSSAParser","GoogleCastMediaInfoBuilder","_GoogleCastMediaInfoBuilder_instances","_info","buildCastTrack_fn","trackId","castTrack","GoogleCastTracksManager","cast","onNewLocalTracks","_GoogleCastTracksManager_instances","_cast","_onNewLocalTracks","syncRemoteActiveIds","syncLocalTracks_fn","localAudioTracks","getLocalAudioTracks_fn","localTextTracks","remoteAudioTracks","getRemoteTracks_fn","remoteTextTracks","remoteAudioTrack","findLocalTrack_fn","localAudioTrack","remoteTextTrack","localTextTrack","activeIds","getRemoteActiveIds_fn","editRequest","editTracksInfo_fn","activeLocalAudioTrack","activeLocalTextTracks","findRemoteTrack_fn","localTracks","isMatch_fn","remoteTracks","GoogleCastProvider","_GoogleCastProvider_instances","_played","_playerEventHandlers","_reloadInfo","_isIdle","onNewLocalTracks_fn","attachCastContextEventListeners_fn","attachCastPlayerEventListeners_fn","reload_fn","resumeSession_fn","loadRequest","buildLoadRequest_fn","endSession_fn","onCastStateChange_fn","Event2","onMediaLoadedChange_fn","onCanControlVolumeChange_fn","onCanSeekChange_fn","onPausedChange_fn","onPlayerStateChange_fn","onRemotePlayerEvent_fn","resumeSessionEvent","localState","remotePlaybackLoader","disconnectFromReceiver_fn","onCurrentTimeChange_fn","castState","createEvent_fn","getSeekableRange_fn","getStreamType_fn","PlayerState","buildMediaInfo_fn","mediaInfo"],"mappings":"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,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,EAAG,KAAO,EAAG,EAAG,MAAO,EAChC,KAAQ,CAAC,EAAG,KAAO,EAAG,EAAG,MAAO,EAChC,KAAQ,CAAC,EAAG,KAAO,EAAG,EAAG,MAAO,EAChC,KAAQ,CAAC,EAAG,KAAO,EAAG,EAAG,MAAO,EAChC,KAAQ,CAAC,EAAG,OAAS,EAAG,EAAG,MAAO,EAClC,KAAQ,CAAC,EAAG,OAAS,EAAG,EAAG,MAAO,EAClC,KAAQ,CAAC,EAAG,OAAS,EAAG,EAAG,MAAO,EAClC,KAAQ,CAAC,EAAG,OAAS,EAAG,EAAG,MAAO,EAClC,KAAQ,CAAC,EAAG,OAAS,EAAG,EAAG,MAAO,EAClC,KAAQ,CAAC,EAAG,OAAS,EAAG,EAAG,MAAO,EAClC,KAAQ,CAAC,EAAG,OAAS,EAAG,EAAG,MAAO,EAClC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACxC,KAAQ,CAAC,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AO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,EAAG,OAAS,OAAS,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MAAS,CAAC,OAAS,OAAS,EAAG,EAAG,MAAO,EACzC,MA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AAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACpC,GAAM,CAAC,QAAU,OAAS,EAAG,EAAG,IAAK,EACrC,GAAM,CAAC,QAAU,OAAS,EAAG,EAAG,IAAK,EACrC,GAAM,CAAC,QAAU,OAAS,EAAG,EAAG,IAAK,EACrC,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACpC,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACpC,GAAM,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACpC,GAAM,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACpC,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,OAAS,EAAG,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACrC,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACrC,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACrC,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACrC,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACrC,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACrC,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACrC,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACrC,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,EACzB,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,OAAS,EAAG,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACrC,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAA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KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,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","x_google_ignoreList":[0,1,2,7,8,9,10,11,15,16,17,18,19,20,21,22,23,26,27,28,29,30,31,32,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,73,74,75,78,79,80,81,82,84,85,86,88,91,92,97,98,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,205,207,210,211,212,213,214,215,216,217,218,219,223,224,225,232,233,234,235,236,237,238,243,244,245,246,247,248,249,250,251,254,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,464,465,466,467,468,469,470,471,472,473,474,475,476]} \ No newline at end of file diff --git a/packages/ui/dist-lib/prod-DTLJXtPo.js b/packages/ui/dist-lib/prod-DTLJXtPo.js new file mode 100644 index 00000000..aaff109c --- /dev/null +++ b/packages/ui/dist-lib/prod-DTLJXtPo.js @@ -0,0 +1,995 @@ +var U = Object.defineProperty; +var tt = (i, t, e) => t in i ? U(i, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : i[t] = e; +var h = (i, t, e) => tt(i, typeof t != "symbol" ? t + "" : t, e); +const et = { + LoadFail: 0, + BadSignature: 1, + BadTimestamp: 2, + BadSettingValue: 3, + BadFormat: 4, + UnknownSetting: 5 +}; +class it extends Error { + constructor(e) { + super(e.reason); + h(this, "code"); + h(this, "line"); + this.code = e.code, this.line = e.line; + } +} +const j = /\r?\n|\r/gm; +class st { + constructor(t) { + h(this, "writable"); + h(this, "readable"); + const e = new rt(t); + this.writable = new WritableStream({ + write(s) { + e.transform(s); + }, + close() { + e.close(); + } + }), this.readable = new ReadableStream({ + start(s) { + e.onLine = (n) => s.enqueue(n), e.onClose = () => s.close(); + } + }); + } +} +class rt { + constructor(t) { + h(this, "a", ""); + h(this, "b"); + h(this, "onLine"); + h(this, "onClose"); + this.b = new TextDecoder(t); + } + transform(t) { + this.a += this.b.decode(t, { stream: !0 }); + const e = this.a.split(j); + this.a = e.pop() || ""; + for (let s = 0; s < e.length; s++) + this.onLine(e[s].trim()); + } + close() { + this.a && this.onLine(this.a.trim()), this.a = "", this.onClose(); + } +} +async function nt(i, t) { + const e = new ReadableStream({ + start(s) { + const n = i.split(j); + for (const r of n) + s.enqueue(r); + s.close(); + } + }); + return C(e, t); +} +async function C(i, t) { + const e = (t == null ? void 0 : t.type) ?? "vtt"; + let s; + if (typeof e == "string") + switch (e) { + case "srt": + s = (await import("./srt-parser-CWqahKwO.js")).default; + break; + case "ssa": + case "ass": + s = (await import("./ssa-parser-BqjjKy4M.js")).default; + break; + default: + s = (await Promise.resolve().then(function() { + return St; + })).default; + } + else + s = e; + let n; + const r = i.getReader(), l = s(), a = !!(t != null && t.strict) || !!(t != null && t.errors); + await l.init({ + strict: !1, + ...t, + errors: a, + type: e, + cancel() { + r.cancel(), n = l.done(!0); + } + }); + let o = 1; + for (; ; ) { + const { value: c, done: f } = await r.read(); + if (f) { + l.parse("", o), n = l.done(!1); + break; + } + l.parse(c, o), o++; + } + return n; +} +async function at(i, t) { + var l, a; + const e = await i; + if (!e.ok || !e.body) + return { + metadata: {}, + cues: [], + regions: [], + errors: [void 0] + }; + const s = e.headers.get("content-type") || "", n = (l = s.match(/text\/(.*?)(?:;|$)/)) == null ? void 0 : l[1], r = (a = s.match(/charset=(.*?)(?:;|$)/)) == null ? void 0 : a[1]; + return G(e.body, { type: n, encoding: r, ...t }); +} +async function G(i, { encoding: t = "utf-8", ...e } = {}) { + const s = i.pipeThrough(new st(t)); + return C(s, e); +} +class H extends EventTarget { + constructor(e, s, n) { + super(); + /** + * A string that identifies the cue. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue/id} + */ + h(this, "id", ""); + /** + * A `double` that represents the video time that the cue will start being displayed, in seconds. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue/startTime} + */ + h(this, "startTime"); + /** + * A `double` that represents the video time that the cue will stop being displayed, in seconds. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue/endTime} + */ + h(this, "endTime"); + /** + * Returns a string with the contents of the cue. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/text} + */ + h(this, "text"); + /** + * A `boolean` for whether the video will pause when this cue stops being displayed. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue/pauseOnExit} + */ + h(this, "pauseOnExit", !1); + this.startTime = e, this.endTime = s, this.text = n; + } + addEventListener(e, s, n) { + super.addEventListener(e, s, n); + } + removeEventListener(e, s, n) { + super.removeEventListener(e, s, n); + } +} +const R = typeof document > "u", lt = R ? H : window.VTTCue; +class V extends lt { + constructor() { + super(...arguments); + /** + * A `VTTRegion` object describing the video's sub-region that the cue will be drawn onto, + * or `null` if none is assigned. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/region} + */ + h(this, "region", null); + /** + * The cue writing direction. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/vertical} + */ + h(this, "vertical", ""); + /** + * Returns `true` if the `VTTCue.line` attribute is an integer number of lines or a percentage + * of the video size. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/snapToLines} + */ + h(this, "snapToLines", !0); + /** + * Returns the line positioning of the cue. This can be the string `'auto'` or a number whose + * interpretation depends on the value of `VTTCue.snapToLines`. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/line} + */ + h(this, "line", "auto"); + /** + * Returns an enum representing the alignment of the `VTTCue.line`. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/lineAlign} + */ + h(this, "lineAlign", "start"); + /** + * Returns the indentation of the cue within the line. This can be the string `'auto'` or a + * number representing the percentage of the `VTTCue.region`, or the video size if `VTTCue`.region` + * is `null`. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/position} + */ + h(this, "position", "auto"); + /** + * Returns an enum representing the alignment of the cue. This is used to determine what + * the `VTTCue.position` is anchored to. The default is `'auto'`. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/positionAlign} + */ + h(this, "positionAlign", "auto"); + /** + * Returns a double representing the size of the cue, as a percentage of the video size. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/size} + */ + h(this, "size", 100); + /** + * Returns an enum representing the alignment of all the lines of text within the cue box. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/align} + */ + h(this, "align", "center"); + /** + * Additional styles associated with the cue. + */ + h(this, "style"); + } +} +class F { + constructor() { + /** + * A string that identifies the region. + */ + h(this, "id", ""); + /** + * A `double` representing the width of the region, as a percentage of the video. + */ + h(this, "width", 100); + /** + * A `double` representing the height of the region, in number of lines. + */ + h(this, "lines", 3); + /** + * A `double` representing the region anchor X offset, as a percentage of the region. + */ + h(this, "regionAnchorX", 0); + /** + * A `double` representing the region anchor Y offset, as a percentage of the region. + */ + h(this, "regionAnchorY", 100); + /** + * A `double` representing the viewport anchor X offset, as a percentage of the video. + */ + h(this, "viewportAnchorX", 0); + /** + * A `double` representing the viewport anchor Y offset, as a percentage of the video. + */ + h(this, "viewportAnchorY", 100); + /** + * An enum representing how adding new cues will move existing cues. + */ + h(this, "scroll", ""); + } +} +const O = ",", ot = "%"; +function ht(i) { + const t = parseInt(i, 10); + return Number.isNaN(t) ? null : t; +} +function b(i) { + const t = parseInt(i.replace(ot, ""), 10); + return !Number.isNaN(t) && t >= 0 && t <= 100 ? t : null; +} +function B(i) { + if (!i.includes(O)) + return null; + const [t, e] = i.split(O).map(b); + return t !== null && e !== null ? [t, e] : null; +} +function ct(i) { + const t = parseFloat(i); + return Number.isNaN(t) ? null : t; +} +const ut = "WEBVTT", z = ",", ft = "%", w = /[:=]/, dt = /^[\s\t]*(region|vertical|line|position|size|align)[:=]/, pt = "NOTE", gt = "REGION", mt = /^REGION:?[\s\t]+/, y = /[\s\t]+/, Tt = "-->", wt = /[\s\t]*-->[\s\t]+/, vt = /start|center|end|left|right/, yt = /start|center|end/, bt = /line-(?:left|right)|center|auto/, At = /^(?:(\d{1,2}):)?(\d{2}):(\d{2})(?:\.(\d{1,3}))?$/; +var D = /* @__PURE__ */ ((i) => (i[i.None = 0] = "None", i[i.Header = 1] = "Header", i[i.Cue = 2] = "Cue", i[i.Region = 3] = "Region", i[i.Note = 4] = "Note", i))(D || {}); +class W { + constructor() { + h(this, "h"); + h(this, "e", 0); + h(this, "i", {}); + h(this, "j", {}); + h(this, "l", []); + h(this, "c", null); + h(this, "d", null); + h(this, "m", []); + h(this, "f"); + h(this, "n", ""); + } + async init(t) { + this.h = t, t.strict && (this.e = 1), t.errors && (this.f = (await import("./errors-DCJKAXTz.js")).ParseErrorBuilder); + } + parse(t, e) { + var s, n, r, l, a, o; + if (t === "") + this.c ? (this.l.push(this.c), (n = (s = this.h).onCue) == null || n.call(s, this.c), this.c = null) : this.d ? (this.j[this.d.id] = this.d, (l = (r = this.h).onRegion) == null || l.call(r, this.d), this.d = null) : this.e === 1 && (this.k(t, e), (o = (a = this.h).onHeaderMetadata) == null || o.call(a, this.i)), this.e = 0; + else if (this.e) + switch (this.e) { + case 1: + this.k(t, e); + break; + case 2: + if (this.c) { + const c = this.c.text.length > 0; + !c && dt.test(t) ? this.o(t.split(y), e) : this.c.text += (c ? ` +` : "") + t; + } + break; + case 3: + this.p(t.split(y), e); + break; + } + else if (t.startsWith(pt)) + this.e = 4; + else if (t.startsWith(gt)) + this.e = 3, this.d = new F(), this.p(t.replace(mt, "").split(y), e); + else if (t.includes(Tt)) { + const c = this.q(t, e); + c && (this.c = new V(c[0], c[1], ""), this.c.id = this.n, this.o(c[2], e)), this.e = 2; + } else e === 1 && this.k(t, e); + this.n = t; + } + done() { + return { + metadata: this.i, + cues: this.l, + regions: Object.values(this.j), + errors: this.m + }; + } + k(t, e) { + var s; + if (e > 1) { + if (w.test(t)) { + const [n, r] = t.split(w); + n && (this.i[n] = (r || "").replace(y, "")); + } + } else t.startsWith(ut) ? this.e = 1 : this.g((s = this.f) == null ? void 0 : s.r()); + } + q(t, e) { + var c, f, u; + const [s, n = ""] = t.split(wt), [r, ...l] = n.split(y), a = E(s), o = E(r); + if (a !== null && o !== null && o > a) + return [a, o, l]; + a === null && this.g((c = this.f) == null ? void 0 : c.s(s, e)), o === null && this.g((f = this.f) == null ? void 0 : f.t(r, e)), a != null && o !== null && o > a && this.g((u = this.f) == null ? void 0 : u.u(a, o, e)); + } + /** + * @see {@link https://www.w3.org/TR/webvtt1/#region-settings-parsing} + */ + p(t, e) { + var n, r; + let s; + for (let l = 0; l < t.length; l++) + if (w.test(t[l])) { + s = !1; + const [a, o] = t[l].split(w); + switch (a) { + case "id": + this.d.id = o; + break; + case "width": + const c = b(o); + c !== null ? this.d.width = c : s = !0; + break; + case "lines": + const f = ht(o); + f !== null ? this.d.lines = f : s = !0; + break; + case "regionanchor": + const u = B(o); + u !== null ? (this.d.regionAnchorX = u[0], this.d.regionAnchorY = u[1]) : s = !0; + break; + case "viewportanchor": + const d = B(o); + d !== null ? (this.d.viewportAnchorX = d[0], this.d.viewportAnchorY = d[1]) : s = !0; + break; + case "scroll": + o === "up" ? this.d.scroll = "up" : s = !0; + break; + default: + this.g((n = this.f) == null ? void 0 : n.v(a, o, e)); + } + s && this.g((r = this.f) == null ? void 0 : r.w(a, o, e)); + } + } + /** + * @see {@link https://www.w3.org/TR/webvtt1/#cue-timings-and-settings-parsing} + */ + o(t, e) { + var n, r; + let s; + for (let l = 0; l < t.length; l++) + if (s = !1, w.test(t[l])) { + const [a, o] = t[l].split(w); + switch (a) { + case "region": + const c = this.j[o]; + c && (this.c.region = c); + break; + case "vertical": + o === "lr" || o === "rl" ? (this.c.vertical = o, this.c.region = null) : s = !0; + break; + case "line": + const [f, u] = o.split(z); + if (f.includes(ft)) { + const v = b(f); + v !== null ? (this.c.line = v, this.c.snapToLines = !1) : s = !0; + } else { + const v = ct(f); + v !== null ? this.c.line = v : s = !0; + } + yt.test(u) ? this.c.lineAlign = u : u && (s = !0), this.c.line !== "auto" && (this.c.region = null); + break; + case "position": + const [d, g] = o.split(z), P = b(d); + P !== null ? this.c.position = P : s = !0, g && bt.test(g) ? this.c.positionAlign = g : g && (s = !0); + break; + case "size": + const N = b(o); + N !== null ? (this.c.size = N, N < 100 && (this.c.region = null)) : s = !0; + break; + case "align": + vt.test(o) ? this.c.align = o : s = !0; + break; + default: + this.g((n = this.f) == null ? void 0 : n.x(a, o, e)); + } + s && this.g((r = this.f) == null ? void 0 : r.y(a, o, e)); + } + } + g(t) { + var e, s; + if (t) { + if (this.m.push(t), this.h.strict) + throw this.h.cancel(), t; + (s = (e = this.h).onError) == null || s.call(e, t); + } + } +} +function E(i) { + const t = i.match(At); + if (!t) + return null; + const e = t[1] ? parseInt(t[1], 10) : 0, s = parseInt(t[2], 10), n = parseInt(t[3], 10), r = t[4] ? parseInt(t[4].padEnd(3, "0"), 10) : 0, l = e * 3600 + s * 60 + n + r / 1e3; + return e < 0 || s < 0 || n < 0 || r < 0 || s > 59 || n > 59 ? null : l; +} +function Et() { + return new W(); +} +var St = /* @__PURE__ */ Object.freeze({ + __proto__: null, + VTTBlock: D, + VTTParser: W, + default: Et, + parseVTTTimestamp: E +}); +const kt = /[0-9]/, Nt = /[\s\t]+/, q = { + c: "span", + i: "i", + b: "b", + u: "u", + ruby: "ruby", + rt: "rt", + v: "span", + lang: "span", + timestamp: "span" +}, _t = { + "&": "&", + "<": "<", + ">": ">", + """: '"', + "'": "'", + " ": " ", + "‎": "‎", + "‏": "‏" +}, Ct = /&(?:amp|lt|gt|quot|#(0+)?39|nbsp|lrm|rlm);/g, Rt = /* @__PURE__ */ new Set([ + "white", + "lime", + "cyan", + "red", + "yellow", + "magenta", + "blue", + "black" +]), It = /* @__PURE__ */ new Set(Object.keys(q)); +function X(i) { + var c, f; + let t = "", e = 1, s = [], n = [], r; + for (let u = 0; u < i.text.length; u++) { + const d = i.text[u]; + switch (e) { + case 1: + d === "<" ? (o(), e = 2) : t += d; + break; + case 2: + switch (d) { + case ` +`: + case " ": + case " ": + l(), e = 4; + break; + case ".": + l(), e = 3; + break; + case "/": + e = 5; + break; + case ">": + l(), e = 1; + break; + default: + !t && kt.test(d) && (e = 6), t += d; + break; + } + break; + case 3: + switch (d) { + case " ": + case " ": + case ` +`: + a(), r && ((c = r.class) == null || c.trim()), e = 4; + break; + case ".": + a(); + break; + case ">": + a(), r && ((f = r.class) == null || f.trim()), e = 1; + break; + default: + t += d; + } + break; + case 4: + d === ">" ? (t = t.replace(Nt, " "), (r == null ? void 0 : r.type) === "v" ? r.voice = _(t) : (r == null ? void 0 : r.type) === "lang" && (r.lang = _(t)), t = "", e = 1) : t += d; + break; + case 5: + d === ">" && (t = "", r = n.pop(), e = 1); + break; + case 6: + if (d === ">") { + const g = E(t); + g !== null && g >= i.startTime && g <= i.endTime && (t = "timestamp", l(), r.time = g), t = "", e = 1; + } else + t += d; + break; + } + } + function l() { + if (It.has(t)) { + const u = r; + r = Lt(t), u ? (n[n.length - 1] !== u && n.push(u), u.children.push(r)) : s.push(r); + } + t = "", e = 1; + } + function a() { + if (r && t) { + const u = t.replace("bg_", ""); + Rt.has(u) ? r[t.startsWith("bg_") ? "bgColor" : "color"] = u : r.class = r.class ? r.class + " " + t : t; + } + t = ""; + } + function o() { + if (!t) + return; + const u = { type: "text", data: _(t) }; + r ? r.children.push(u) : s.push(u), t = ""; + } + return e === 1 && o(), s; +} +function Lt(i) { + return { + tagName: q[i], + type: i, + children: [] + }; +} +function _(i) { + return i.replace(Ct, (t) => _t[t] || "'"); +} +function p(i, t, e) { + i.style.setProperty(`--${t}`, e + ""); +} +function m(i, t, e = !0) { + i.setAttribute(`data-${t}`, e === !0 ? "" : e + ""); +} +function S(i, t) { + i.setAttribute("data-part", t); +} +function Mt(i) { + return parseFloat(getComputedStyle(i).lineHeight) || 0; +} +function xt(i) { + if (R) + throw Error( + "[media-captions] called `createVTTCueTemplate` on the server - use `renderVTTCueString`" + ); + const t = document.createElement("template"); + return t.innerHTML = I(i), { cue: i, content: t.content }; +} +function I(i, t = 0) { + return L(X(i), t); +} +function L(i, t = 0) { + let e, s = ""; + for (const n of i) + if (n.type === "text") + s += n.data; + else { + const r = n.type === "timestamp"; + e = {}, e.class = n.class, e.title = n.type === "v" && n.voice, e.lang = n.type === "lang" && n.lang, e["data-part"] = n.type === "v" && "voice", r && (e["data-part"] = "timed", e["data-time"] = n.time, e["data-future"] = n.time > t, e["data-past"] = n.time < t), e.style = `${n.color ? `color: ${n.color};` : ""}${n.bgColor ? `background-color: ${n.bgColor};` : ""}`; + const l = Object.entries(e).filter((a) => a[1]).map((a) => `${a[0]}="${a[1] === !0 ? "" : a[1]}"`).join(" "); + s += `<${n.tagName}${l ? " " + l : ""}>${L( + n.children + )}</${n.tagName}>`; + } + return s; +} +function Y(i, t) { + if (!R) + for (const e of i.querySelectorAll('[data-part="timed"]')) { + const s = Number(e.getAttribute("data-time")); + Number.isNaN(s) || (s > t ? m(e, "future") : e.removeAttribute("data-future"), s < t ? m(e, "past") : e.removeAttribute("data-past")); + } +} +function Pt(i, t) { + let e = null, s; + function n() { + r(), i(...s), s = void 0; + } + function r() { + clearTimeout(e), e = null; + } + function l() { + s = [].slice.call(arguments), r(), e = setTimeout(n, t); + } + return l; +} +const T = Symbol(0); +function M(i) { + return i instanceof HTMLElement ? { + top: i.offsetTop, + width: i.clientWidth, + height: i.clientHeight, + left: i.offsetLeft, + right: i.offsetLeft + i.clientWidth, + bottom: i.offsetTop + i.clientHeight + } : { ...i }; +} +function k(i, t, e) { + switch (t) { + case "+x": + i.left += e, i.right += e; + break; + case "-x": + i.left -= e, i.right -= e; + break; + case "+y": + i.top += e, i.bottom += e; + break; + case "-y": + i.top -= e, i.bottom -= e; + break; + } +} +function Ot(i, t) { + return i.left <= t.right && i.right >= t.left && i.top <= t.bottom && i.bottom >= t.top; +} +function Bt(i, t) { + for (let e = 0; e < t.length; e++) + if (Ot(i, t[e])) + return t[e]; + return null; +} +function $(i, t) { + return t.top >= 0 && t.bottom <= i.height && t.left >= 0 && t.right <= i.width; +} +function zt(i, t, e) { + switch (e) { + case "+x": + return t.left < 0; + case "-x": + return t.right > i.width; + case "+y": + return t.top < 0; + case "-y": + return t.bottom > i.height; + } +} +function $t(i, t) { + const e = Math.max(0, Math.min(i.width, t.right) - Math.max(0, t.left)), s = Math.max(0, Math.min(i.height, t.bottom) - Math.max(0, t.top)); + return e * s / (i.height * i.width); +} +function x(i, t) { + return { + top: t.top / i.height, + left: t.left / i.width, + right: (i.width - t.right) / i.width, + bottom: (i.height - t.bottom) / i.height + }; +} +function K(i, t) { + return t.top = t.top * i.height, t.left = t.left * i.width, t.right = i.width - t.right * i.width, t.bottom = i.height - t.bottom * i.height, t; +} +const J = ["top", "left", "right", "bottom"]; +function Q(i, t, e, s) { + const n = x(t, e); + for (const r of J) + p(i, `${s}-${r}`, n[r] * 100 + "%"); +} +function Z(i, t, e, s) { + let n = 1, r, l = { ...t }; + for (let a = 0; a < s.length; a++) { + for (; zt(i, t, s[a]) || $(i, t) && Bt(t, e); ) + k(t, s[a], 1); + if ($(i, t)) + return t; + const o = $t(i, t); + n > o && (r = { ...t }, n = o), t = { ...l }; + } + return r || l; +} +const A = Symbol(0); +function jt(i, t, e, s) { + let n = e.firstElementChild, r = Vt(t), l, a = []; + if (e[T] || (e[T] = Gt(i, e)), l = K(i, { ...e[T] }), e[A]) + a = [e[A] === "top" ? "+y" : "-y", "+x", "-x"]; + else if (t.snapToLines) { + let o; + switch (t.vertical) { + case "": + a = ["+y", "-y"], o = "height"; + break; + case "rl": + a = ["+x", "-x"], o = "width"; + break; + case "lr": + a = ["-x", "+x"], o = "width"; + break; + } + let c = Mt(n), f = c * Math.round(r), u = i[o] + c, d = a[0]; + Math.abs(f) > u && (f = f < 0 ? -1 : 1, f *= Math.ceil(u / c) * c), r < 0 && (f += t.vertical === "" ? i.height : i.width, a = a.reverse()), k(l, d, f); + } else { + const o = t.vertical === "", c = o ? "+y" : "+x", f = o ? l.height : l.width; + k( + l, + c, + (o ? i.height : i.width) * r / 100 + ), k( + l, + c, + t.lineAlign === "center" ? f / 2 : t.lineAlign === "end" ? f : 0 + ), a = o ? ["-y", "+y", "-x", "+x"] : ["-x", "+x", "-y", "+y"]; + } + return l = Z(i, l, s, a), Q(e, i, l, "cue"), l; +} +function Gt(i, t) { + const e = M(t), s = Ht(t); + if (t[A] = !1, s.top && (e.top = s.top, e.bottom = s.top + e.height, t[A] = "top"), s.bottom) { + const n = i.height - s.bottom; + e.top = n - e.height, e.bottom = n, t[A] = "bottom"; + } + return s.left && (e.left = s.left), s.right && (e.right = i.width - s.right), x(i, e); +} +function Ht(i) { + const t = {}; + for (const e of J) + t[e] = parseFloat(i.style.getPropertyValue(`--cue-${e}`)); + return t; +} +function Vt(i) { + return i.line === "auto" ? i.snapToLines ? -1 : 100 : i.line; +} +function Ft(i) { + if (i.position === "auto") + switch (i.align) { + case "start": + case "left": + return 0; + case "right": + case "end": + return 100; + default: + return 50; + } + return i.position; +} +function Dt(i, t) { + if (i.positionAlign === "auto") + switch (i.align) { + case "start": + return t === "ltr" ? "line-left" : "line-right"; + case "end": + return t === "ltr" ? "line-right" : "line-left"; + case "center": + return "center"; + default: + return `line-${i.align}`; + } + return i.positionAlign; +} +const Wt = ["-y", "+y", "-x", "+x"]; +function qt(i, t, e, s) { + let n = Array.from(e.querySelectorAll('[data-part="cue-display"]')), r = 0, l = Math.max(0, n.length - t.lines); + for (let o = n.length - 1; o >= l; o--) + r += n[o].offsetHeight; + p(e, "region-height", r + "px"), e[T] || (e[T] = x(i, M(e))); + let a = { ...e[T] }; + return a = K(i, a), a.width = e.clientWidth, a.height = r, a.right = a.left + a.width, a.bottom = a.top + r, a = Z(i, a, s, Wt), Q(e, i, a, "region"), a; +} +class Xt { + constructor(t, e) { + h(this, "overlay"); + h(this, "z"); + h(this, "A", 0); + h(this, "C", "ltr"); + h(this, "B", []); + h(this, "D", !1); + h(this, "E"); + h(this, "j", /* @__PURE__ */ new Map()); + h(this, "l", /* @__PURE__ */ new Map()); + h(this, "K", Pt(() => { + this.D = !1, this.G(); + for (const t of this.j.values()) + t[T] = null; + for (const t of this.l.values()) + t && (t[T] = null); + this.H(!0); + }, 50)); + this.overlay = t, this.dir = (e == null ? void 0 : e.dir) ?? "ltr", t.setAttribute("translate", "yes"), t.setAttribute("aria-live", "off"), t.setAttribute("aria-atomic", "true"), S(t, "captions"), this.G(), this.E = new ResizeObserver(this.I.bind(this)), this.E.observe(t); + } + /* Text direction. */ + get dir() { + return this.C; + } + set dir(t) { + this.C = t, m(this.overlay, "dir", t); + } + get currentTime() { + return this.A; + } + set currentTime(t) { + this.A = t, this.update(); + } + changeTrack({ regions: t, cues: e }) { + this.reset(), this.J(t); + for (const s of e) + this.l.set(s, null); + this.update(); + } + addCue(t) { + this.l.set(t, null), this.update(); + } + removeCue(t) { + this.l.delete(t), this.update(); + } + update(t = !1) { + this.H(t); + } + reset() { + this.l.clear(), this.j.clear(), this.B = [], this.overlay.textContent = ""; + } + destroy() { + this.reset(), this.E.disconnect(); + } + I() { + this.D = !0, this.K(); + } + G() { + this.z = M(this.overlay), p(this.overlay, "overlay-width", this.z.width + "px"), p(this.overlay, "overlay-height", this.z.height + "px"); + } + H(t = !1) { + if (!this.l.size || this.D) + return; + let e, s = [...this.l.keys()].filter((r) => this.A >= r.startTime && this.A <= r.endTime).sort( + (r, l) => r.startTime !== l.startTime ? r.startTime - l.startTime : r.endTime - l.endTime + ), n = s.map((r) => r.region); + for (let r = 0; r < this.B.length; r++) { + if (e = this.B[r], s[r] === e) + continue; + if (e.region && !n.includes(e.region)) { + const a = this.j.get(e.region.id); + a && (a.removeAttribute("data-active"), t = !0); + } + const l = this.l.get(e); + l && (l.remove(), t = !0); + } + for (let r = 0; r < s.length; r++) { + e = s[r]; + let l = this.l.get(e); + l || this.l.set(e, l = this.L(e)); + const a = this.F(e) && this.j.get(e.region.id); + a && !a.hasAttribute("data-active") && (requestAnimationFrame(() => m(a, "active")), t = !0), l.isConnected || ((a || this.overlay).append(l), t = !0); + } + if (t) { + const r = [], l = /* @__PURE__ */ new Set(); + for (let a = s.length - 1; a >= 0; a--) { + if (e = s[a], l.has(e.region || e)) + continue; + const o = this.F(e), c = o ? this.j.get(e.region.id) : this.l.get(e); + o ? r.push(qt(this.z, e.region, c, r)) : r.push(jt(this.z, e, c, r)), l.add(o ? e.region : e); + } + } + Y(this.overlay, this.A), this.B = s; + } + J(t) { + if (t) + for (const e of t) { + const s = this.M(e); + this.j.set(e.id, s), this.overlay.append(s); + } + } + M(t) { + const e = document.createElement("div"); + return S(e, "region"), m(e, "id", t.id), m(e, "scroll", t.scroll), p(e, "region-width", t.width + "%"), p(e, "region-anchor-x", t.regionAnchorX), p(e, "region-anchor-y", t.regionAnchorY), p(e, "region-viewport-anchor-x", t.viewportAnchorX), p(e, "region-viewport-anchor-y", t.viewportAnchorY), p(e, "region-lines", t.lines), e; + } + L(t) { + var l; + const e = document.createElement("div"), s = Ft(t), n = Dt(t, this.C); + if (S(e, "cue-display"), t.vertical !== "" && m(e, "vertical"), p(e, "cue-text-align", t.align), t.style) + for (const a of Object.keys(t.style)) + e.style.setProperty(a, t.style[a]); + if (this.F(t)) + p( + e, + "cue-offset", + `${s - (n === "line-right" ? 100 : n === "center" ? 50 : 0)}%` + ); + else if (p( + e, + "cue-writing-mode", + t.vertical === "" ? "horizontal-tb" : t.vertical === "lr" ? "vertical-lr" : "vertical-rl" + ), !((l = t.style) != null && l["--cue-width"])) { + let a = s; + n === "line-left" ? a = 100 - s : n === "center" && s <= 50 ? a = s * 2 : n === "center" && s > 50 && (a = (100 - s) * 2); + const o = t.size < a ? t.size : a; + t.vertical === "" ? p(e, "cue-width", o + "%") : p(e, "cue-height", o + "%"); + } + const r = document.createElement("div"); + return S(r, "cue"), t.id && m(r, "id", t.id), r.innerHTML = I(t), e.append(r), e; + } + F(t) { + return t.region && t.size === 100 && t.vertical === "" && t.line === "auto"; + } +} +const Kt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + CaptionsRenderer: Xt, + ParseError: it, + ParseErrorCode: et, + TextCue: H, + VTTCue: V, + VTTRegion: F, + createVTTCueTemplate: xt, + parseByteStream: G, + parseResponse: at, + parseText: nt, + parseTextStream: C, + parseVTTTimestamp: E, + renderVTTCueString: I, + renderVTTTokensString: L, + tokenizeVTTCue: X, + updateTimedVTTCueNodes: Y +}, Symbol.toStringTag, { value: "Module" })); +export { + it as P, + W as V, + D as a, + V as b, + et as c, + Kt as d, + E as p +}; +//# sourceMappingURL=prod-DTLJXtPo.js.map diff --git a/packages/ui/dist-lib/prod-DTLJXtPo.js.map b/packages/ui/dist-lib/prod-DTLJXtPo.js.map new file mode 100644 index 00000000..5954ea6f --- /dev/null +++ b/packages/ui/dist-lib/prod-DTLJXtPo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"prod-DTLJXtPo.js","sources":["../node_modules/media-captions/dist/prod/index.js"],"sourcesContent":["const ParseErrorCode = {\n LoadFail: 0,\n BadSignature: 1,\n BadTimestamp: 2,\n BadSettingValue: 3,\n BadFormat: 4,\n UnknownSetting: 5\n};\nclass ParseError extends Error {\n code;\n line;\n constructor(init) {\n super(init.reason);\n this.code = init.code;\n this.line = init.line;\n }\n}\n\nconst LINE_TERMINATOR_RE = /\\r?\\n|\\r/gm;\nclass TextLineTransformStream {\n writable;\n readable;\n constructor(encoding) {\n const transformer = new TextStreamLineIterator(encoding);\n this.writable = new WritableStream({\n write(chunk) {\n transformer.transform(chunk);\n },\n close() {\n transformer.close();\n }\n });\n this.readable = new ReadableStream({\n start(controller) {\n transformer.onLine = (line) => controller.enqueue(line);\n transformer.onClose = () => controller.close();\n }\n });\n }\n}\nclass TextStreamLineIterator {\n a = \"\";\n b;\n onLine;\n onClose;\n constructor(encoding) {\n this.b = new TextDecoder(encoding);\n }\n transform(chunk) {\n this.a += this.b.decode(chunk, { stream: true });\n const lines = this.a.split(LINE_TERMINATOR_RE);\n this.a = lines.pop() || \"\";\n for (let i = 0; i < lines.length; i++)\n this.onLine(lines[i].trim());\n }\n close() {\n if (this.a)\n this.onLine(this.a.trim());\n this.a = \"\";\n this.onClose();\n }\n}\n\nasync function parseText(text, options) {\n const stream = new ReadableStream({\n start(controller) {\n const lines = text.split(LINE_TERMINATOR_RE);\n for (const line of lines)\n controller.enqueue(line);\n controller.close();\n }\n });\n return parseTextStream(stream, options);\n}\nasync function parseTextStream(stream, options) {\n const type = options?.type ?? \"vtt\";\n let factory;\n if (typeof type === \"string\") {\n switch (type) {\n case \"srt\":\n factory = (await import('./srt-parser.js')).default;\n break;\n case \"ssa\":\n case \"ass\":\n factory = (await import('./ssa-parser.js')).default;\n break;\n default:\n factory = (await Promise.resolve().then(function () { return vttParser; })).default;\n }\n } else {\n factory = type;\n }\n let result;\n const reader = stream.getReader(), parser = factory(), errors = !!options?.strict || !!options?.errors;\n await parser.init({\n strict: false,\n ...options,\n errors,\n type,\n cancel() {\n reader.cancel();\n result = parser.done(true);\n }\n });\n let i = 1;\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n parser.parse(\"\", i);\n result = parser.done(false);\n break;\n }\n parser.parse(value, i);\n i++;\n }\n return result;\n}\n\nasync function parseResponse(response, options) {\n const res = await response;\n if (!res.ok || !res.body) {\n let error;\n return {\n metadata: {},\n cues: [],\n regions: [],\n errors: [error]\n };\n }\n const contentType = res.headers.get(\"content-type\") || \"\", type = contentType.match(/text\\/(.*?)(?:;|$)/)?.[1], encoding = contentType.match(/charset=(.*?)(?:;|$)/)?.[1];\n return parseByteStream(res.body, { type, encoding, ...options });\n}\nasync function parseByteStream(stream, { encoding = \"utf-8\", ...options } = {}) {\n const textStream = stream.pipeThrough(new TextLineTransformStream(encoding));\n return parseTextStream(textStream, options);\n}\n\nclass TextCue extends EventTarget {\n /**\n * A string that identifies the cue.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue/id}\n */\n id = \"\";\n /**\n * A `double` that represents the video time that the cue will start being displayed, in seconds.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue/startTime}\n */\n startTime;\n /**\n * A `double` that represents the video time that the cue will stop being displayed, in seconds.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue/endTime}\n */\n endTime;\n /**\n * Returns a string with the contents of the cue.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/text}\n */\n text;\n /**\n * A `boolean` for whether the video will pause when this cue stops being displayed.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue/pauseOnExit}\n */\n pauseOnExit = false;\n constructor(startTime, endTime, text) {\n super();\n this.startTime = startTime;\n this.endTime = endTime;\n this.text = text;\n }\n addEventListener(type, listener, options) {\n super.addEventListener(type, listener, options);\n }\n removeEventListener(type, listener, options) {\n super.removeEventListener(type, listener, options);\n }\n}\n\nconst IS_SERVER = typeof document === \"undefined\";\n\nconst CueBase = IS_SERVER ? TextCue : window.VTTCue;\nclass VTTCue extends CueBase {\n /**\n * A `VTTRegion` object describing the video's sub-region that the cue will be drawn onto,\n * or `null` if none is assigned.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/region}\n */\n region = null;\n /**\n * The cue writing direction.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/vertical}\n */\n vertical = \"\";\n /**\n * Returns `true` if the `VTTCue.line` attribute is an integer number of lines or a percentage\n * of the video size.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/snapToLines}\n */\n snapToLines = true;\n /**\n * Returns the line positioning of the cue. This can be the string `'auto'` or a number whose\n * interpretation depends on the value of `VTTCue.snapToLines`.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/line}\n */\n line = \"auto\";\n /**\n * Returns an enum representing the alignment of the `VTTCue.line`.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/lineAlign}\n */\n lineAlign = \"start\";\n /**\n * Returns the indentation of the cue within the line. This can be the string `'auto'` or a\n * number representing the percentage of the `VTTCue.region`, or the video size if `VTTCue`.region`\n * is `null`.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/position}\n */\n position = \"auto\";\n /**\n * Returns an enum representing the alignment of the cue. This is used to determine what\n * the `VTTCue.position` is anchored to. The default is `'auto'`.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/positionAlign}\n */\n positionAlign = \"auto\";\n /**\n * Returns a double representing the size of the cue, as a percentage of the video size.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/size}\n */\n size = 100;\n /**\n * Returns an enum representing the alignment of all the lines of text within the cue box.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue/align}\n */\n align = \"center\";\n /**\n * Additional styles associated with the cue.\n */\n style;\n}\n\nclass VTTRegion {\n /**\n * A string that identifies the region.\n */\n id = \"\";\n /**\n * A `double` representing the width of the region, as a percentage of the video.\n */\n width = 100;\n /**\n * A `double` representing the height of the region, in number of lines.\n */\n lines = 3;\n /**\n * A `double` representing the region anchor X offset, as a percentage of the region.\n */\n regionAnchorX = 0;\n /**\n * A `double` representing the region anchor Y offset, as a percentage of the region.\n */\n regionAnchorY = 100;\n /**\n * A `double` representing the viewport anchor X offset, as a percentage of the video.\n */\n viewportAnchorX = 0;\n /**\n * A `double` representing the viewport anchor Y offset, as a percentage of the video.\n */\n viewportAnchorY = 100;\n /**\n * An enum representing how adding new cues will move existing cues.\n */\n scroll = \"\";\n}\n\nconst COMMA$1 = \",\", PERCENT_SIGN$1 = \"%\";\nfunction toNumber(text) {\n const num = parseInt(text, 10);\n return !Number.isNaN(num) ? num : null;\n}\nfunction toPercentage(text) {\n const num = parseInt(text.replace(PERCENT_SIGN$1, \"\"), 10);\n return !Number.isNaN(num) && num >= 0 && num <= 100 ? num : null;\n}\nfunction toCoords(text) {\n if (!text.includes(COMMA$1))\n return null;\n const [x, y] = text.split(COMMA$1).map(toPercentage);\n return x !== null && y !== null ? [x, y] : null;\n}\nfunction toFloat(text) {\n const num = parseFloat(text);\n return !Number.isNaN(num) ? num : null;\n}\n\nconst HEADER_MAGIC = \"WEBVTT\", COMMA = \",\", PERCENT_SIGN = \"%\", SETTING_SEP_RE = /[:=]/, SETTING_LINE_RE = /^[\\s\\t]*(region|vertical|line|position|size|align)[:=]/, NOTE_BLOCK_START = \"NOTE\", REGION_BLOCK_START = \"REGION\", REGION_BLOCK_START_RE = /^REGION:?[\\s\\t]+/, SPACE_RE = /[\\s\\t]+/, TIMESTAMP_SEP = \"-->\", TIMESTAMP_SEP_RE = /[\\s\\t]*-->[\\s\\t]+/, ALIGN_RE = /start|center|end|left|right/, LINE_ALIGN_RE = /start|center|end/, POS_ALIGN_RE = /line-(?:left|right)|center|auto/, TIMESTAMP_RE = /^(?:(\\d{1,2}):)?(\\d{2}):(\\d{2})(?:\\.(\\d{1,3}))?$/;\nvar VTTBlock = /* @__PURE__ */ ((VTTBlock2) => {\n VTTBlock2[VTTBlock2[\"None\"] = 0] = \"None\";\n VTTBlock2[VTTBlock2[\"Header\"] = 1] = \"Header\";\n VTTBlock2[VTTBlock2[\"Cue\"] = 2] = \"Cue\";\n VTTBlock2[VTTBlock2[\"Region\"] = 3] = \"Region\";\n VTTBlock2[VTTBlock2[\"Note\"] = 4] = \"Note\";\n return VTTBlock2;\n})(VTTBlock || {});\nclass VTTParser {\n h;\n e = 0;\n i = {};\n j = {};\n l = [];\n c = null;\n d = null;\n m = [];\n f;\n n = \"\";\n async init(init) {\n this.h = init;\n if (init.strict)\n this.e = 1;\n if (init.errors)\n this.f = (await import('./errors.js')).ParseErrorBuilder;\n }\n parse(line, lineCount) {\n if (line === \"\") {\n if (this.c) {\n this.l.push(this.c);\n this.h.onCue?.(this.c);\n this.c = null;\n } else if (this.d) {\n this.j[this.d.id] = this.d;\n this.h.onRegion?.(this.d);\n this.d = null;\n } else if (this.e === 1) {\n this.k(line, lineCount);\n this.h.onHeaderMetadata?.(this.i);\n }\n this.e = 0;\n } else if (this.e) {\n switch (this.e) {\n case 1:\n this.k(line, lineCount);\n break;\n case 2:\n if (this.c) {\n const hasText = this.c.text.length > 0;\n if (!hasText && SETTING_LINE_RE.test(line)) {\n this.o(line.split(SPACE_RE), lineCount);\n } else {\n this.c.text += (hasText ? \"\\n\" : \"\") + line;\n }\n }\n break;\n case 3:\n this.p(line.split(SPACE_RE), lineCount);\n break;\n }\n } else if (line.startsWith(NOTE_BLOCK_START)) {\n this.e = 4;\n } else if (line.startsWith(REGION_BLOCK_START)) {\n this.e = 3;\n this.d = new VTTRegion();\n this.p(line.replace(REGION_BLOCK_START_RE, \"\").split(SPACE_RE), lineCount);\n } else if (line.includes(TIMESTAMP_SEP)) {\n const result = this.q(line, lineCount);\n if (result) {\n this.c = new VTTCue(result[0], result[1], \"\");\n this.c.id = this.n;\n this.o(result[2], lineCount);\n }\n this.e = 2;\n } else if (lineCount === 1) {\n this.k(line, lineCount);\n }\n this.n = line;\n }\n done() {\n return {\n metadata: this.i,\n cues: this.l,\n regions: Object.values(this.j),\n errors: this.m\n };\n }\n k(line, lineCount) {\n if (lineCount > 1) {\n if (SETTING_SEP_RE.test(line)) {\n const [key, value] = line.split(SETTING_SEP_RE);\n if (key)\n this.i[key] = (value || \"\").replace(SPACE_RE, \"\");\n }\n } else if (line.startsWith(HEADER_MAGIC)) {\n this.e = 1;\n } else {\n this.g(this.f?.r());\n }\n }\n q(line, lineCount) {\n const [startTimeText, trailingText = \"\"] = line.split(TIMESTAMP_SEP_RE), [endTimeText, ...settingsText] = trailingText.split(SPACE_RE), startTime = parseVTTTimestamp(startTimeText), endTime = parseVTTTimestamp(endTimeText);\n if (startTime !== null && endTime !== null && endTime > startTime) {\n return [startTime, endTime, settingsText];\n } else {\n if (startTime === null) {\n this.g(this.f?.s(startTimeText, lineCount));\n }\n if (endTime === null) {\n this.g(this.f?.t(endTimeText, lineCount));\n }\n if (startTime != null && endTime !== null && endTime > startTime) {\n this.g(this.f?.u(startTime, endTime, lineCount));\n }\n }\n }\n /**\n * @see {@link https://www.w3.org/TR/webvtt1/#region-settings-parsing}\n */\n p(settings, line) {\n let badValue;\n for (let i = 0; i < settings.length; i++) {\n if (SETTING_SEP_RE.test(settings[i])) {\n badValue = false;\n const [name, value] = settings[i].split(SETTING_SEP_RE);\n switch (name) {\n case \"id\":\n this.d.id = value;\n break;\n case \"width\":\n const width = toPercentage(value);\n if (width !== null)\n this.d.width = width;\n else\n badValue = true;\n break;\n case \"lines\":\n const lines = toNumber(value);\n if (lines !== null)\n this.d.lines = lines;\n else\n badValue = true;\n break;\n case \"regionanchor\":\n const region = toCoords(value);\n if (region !== null) {\n this.d.regionAnchorX = region[0];\n this.d.regionAnchorY = region[1];\n } else\n badValue = true;\n break;\n case \"viewportanchor\":\n const viewport = toCoords(value);\n if (viewport !== null) {\n this.d.viewportAnchorX = viewport[0];\n this.d.viewportAnchorY = viewport[1];\n } else\n badValue = true;\n break;\n case \"scroll\":\n if (value === \"up\")\n this.d.scroll = \"up\";\n else\n badValue = true;\n break;\n default:\n this.g(this.f?.v(name, value, line));\n }\n if (badValue) {\n this.g(this.f?.w(name, value, line));\n }\n }\n }\n }\n /**\n * @see {@link https://www.w3.org/TR/webvtt1/#cue-timings-and-settings-parsing}\n */\n o(settings, line) {\n let badValue;\n for (let i = 0; i < settings.length; i++) {\n badValue = false;\n if (SETTING_SEP_RE.test(settings[i])) {\n const [name, value] = settings[i].split(SETTING_SEP_RE);\n switch (name) {\n case \"region\":\n const region = this.j[value];\n if (region)\n this.c.region = region;\n break;\n case \"vertical\":\n if (value === \"lr\" || value === \"rl\") {\n this.c.vertical = value;\n this.c.region = null;\n } else\n badValue = true;\n break;\n case \"line\":\n const [linePos, lineAlign] = value.split(COMMA);\n if (linePos.includes(PERCENT_SIGN)) {\n const percentage = toPercentage(linePos);\n if (percentage !== null) {\n this.c.line = percentage;\n this.c.snapToLines = false;\n } else\n badValue = true;\n } else {\n const number = toFloat(linePos);\n if (number !== null)\n this.c.line = number;\n else\n badValue = true;\n }\n if (LINE_ALIGN_RE.test(lineAlign)) {\n this.c.lineAlign = lineAlign;\n } else if (lineAlign) {\n badValue = true;\n }\n if (this.c.line !== \"auto\")\n this.c.region = null;\n break;\n case \"position\":\n const [colPos, colAlign] = value.split(COMMA), position = toPercentage(colPos);\n if (position !== null)\n this.c.position = position;\n else\n badValue = true;\n if (colAlign && POS_ALIGN_RE.test(colAlign)) {\n this.c.positionAlign = colAlign;\n } else if (colAlign) {\n badValue = true;\n }\n break;\n case \"size\":\n const size = toPercentage(value);\n if (size !== null) {\n this.c.size = size;\n if (size < 100)\n this.c.region = null;\n } else {\n badValue = true;\n }\n break;\n case \"align\":\n if (ALIGN_RE.test(value)) {\n this.c.align = value;\n } else {\n badValue = true;\n }\n break;\n default:\n this.g(this.f?.x(name, value, line));\n }\n if (badValue) {\n this.g(this.f?.y(name, value, line));\n }\n }\n }\n }\n g(error) {\n if (!error)\n return;\n this.m.push(error);\n if (this.h.strict) {\n this.h.cancel();\n throw error;\n } else {\n this.h.onError?.(error);\n }\n }\n}\nfunction parseVTTTimestamp(timestamp) {\n const match = timestamp.match(TIMESTAMP_RE);\n if (!match)\n return null;\n const hours = match[1] ? parseInt(match[1], 10) : 0, minutes = parseInt(match[2], 10), seconds = parseInt(match[3], 10), milliseconds = match[4] ? parseInt(match[4].padEnd(3, \"0\"), 10) : 0, total = hours * 3600 + minutes * 60 + seconds + milliseconds / 1e3;\n if (hours < 0 || minutes < 0 || seconds < 0 || milliseconds < 0 || minutes > 59 || seconds > 59) {\n return null;\n }\n return total;\n}\nfunction createVTTParser() {\n return new VTTParser();\n}\n\nvar vttParser = /*#__PURE__*/Object.freeze({\n __proto__: null,\n VTTBlock: VTTBlock,\n VTTParser: VTTParser,\n default: createVTTParser,\n parseVTTTimestamp: parseVTTTimestamp\n});\n\nconst DIGIT_RE = /[0-9]/, MULTI_SPACE_RE = /[\\s\\t]+/, TAG_NAME = {\n c: \"span\",\n i: \"i\",\n b: \"b\",\n u: \"u\",\n ruby: \"ruby\",\n rt: \"rt\",\n v: \"span\",\n lang: \"span\",\n timestamp: \"span\"\n}, HTML_ENTITIES = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n \""\": '\"',\n \"'\": \"'\",\n \" \": \"\\xA0\",\n \"‎\": \"\\u200E\",\n \"‏\": \"\\u200F\"\n}, HTML_ENTITY_RE = /&(?:amp|lt|gt|quot|#(0+)?39|nbsp|lrm|rlm);/g, COLORS = /* @__PURE__ */ new Set([\n \"white\",\n \"lime\",\n \"cyan\",\n \"red\",\n \"yellow\",\n \"magenta\",\n \"blue\",\n \"black\"\n]), BLOCK_TYPES = /* @__PURE__ */ new Set(Object.keys(TAG_NAME));\nfunction tokenizeVTTCue(cue) {\n let buffer = \"\", mode = 1, result = [], stack = [], node;\n for (let i = 0; i < cue.text.length; i++) {\n const char = cue.text[i];\n switch (mode) {\n case 1:\n if (char === \"<\") {\n addText();\n mode = 2;\n } else {\n buffer += char;\n }\n break;\n case 2:\n switch (char) {\n case \"\\n\":\n case \"\t\":\n case \" \":\n addNode();\n mode = 4;\n break;\n case \".\":\n addNode();\n mode = 3;\n break;\n case \"/\":\n mode = 5;\n break;\n case \">\":\n addNode();\n mode = 1;\n break;\n default:\n if (!buffer && DIGIT_RE.test(char))\n mode = 6;\n buffer += char;\n break;\n }\n break;\n case 3:\n switch (char) {\n case \"\t\":\n case \" \":\n case \"\\n\":\n addClass();\n if (node)\n node.class?.trim();\n mode = 4;\n break;\n case \".\":\n addClass();\n break;\n case \">\":\n addClass();\n if (node)\n node.class?.trim();\n mode = 1;\n break;\n default:\n buffer += char;\n }\n break;\n case 4:\n if (char === \">\") {\n buffer = buffer.replace(MULTI_SPACE_RE, \" \");\n if (node?.type === \"v\")\n node.voice = replaceHTMLEntities(buffer);\n else if (node?.type === \"lang\")\n node.lang = replaceHTMLEntities(buffer);\n buffer = \"\";\n mode = 1;\n } else {\n buffer += char;\n }\n break;\n case 5:\n if (char === \">\") {\n buffer = \"\";\n node = stack.pop();\n mode = 1;\n }\n break;\n case 6:\n if (char === \">\") {\n const time = parseVTTTimestamp(buffer);\n if (time !== null && time >= cue.startTime && time <= cue.endTime) {\n buffer = \"timestamp\";\n addNode();\n node.time = time;\n }\n buffer = \"\";\n mode = 1;\n } else {\n buffer += char;\n }\n break;\n }\n }\n function addNode() {\n if (BLOCK_TYPES.has(buffer)) {\n const parent = node;\n node = createBlockNode(buffer);\n if (parent) {\n if (stack[stack.length - 1] !== parent)\n stack.push(parent);\n parent.children.push(node);\n } else\n result.push(node);\n }\n buffer = \"\";\n mode = 1;\n }\n function addClass() {\n if (node && buffer) {\n const color = buffer.replace(\"bg_\", \"\");\n if (COLORS.has(color)) {\n node[buffer.startsWith(\"bg_\") ? \"bgColor\" : \"color\"] = color;\n } else {\n node.class = !node.class ? buffer : node.class + \" \" + buffer;\n }\n }\n buffer = \"\";\n }\n function addText() {\n if (!buffer)\n return;\n const text = { type: \"text\", data: replaceHTMLEntities(buffer) };\n node ? node.children.push(text) : result.push(text);\n buffer = \"\";\n }\n if (mode === 1)\n addText();\n return result;\n}\nfunction createBlockNode(type) {\n return {\n tagName: TAG_NAME[type],\n type,\n children: []\n };\n}\nfunction replaceHTMLEntities(text) {\n return text.replace(HTML_ENTITY_RE, (entity) => HTML_ENTITIES[entity] || \"'\");\n}\n\nfunction setCSSVar(el, name, value) {\n el.style.setProperty(`--${name}`, value + \"\");\n}\nfunction setDataAttr(el, name, value = true) {\n el.setAttribute(`data-${name}`, value === true ? \"\" : value + \"\");\n}\nfunction setPartAttr(el, name) {\n el.setAttribute(\"data-part\", name);\n}\nfunction getLineHeight(el) {\n return parseFloat(getComputedStyle(el).lineHeight) || 0;\n}\n\nfunction createVTTCueTemplate(cue) {\n if (IS_SERVER) {\n throw Error(\n \"[media-captions] called `createVTTCueTemplate` on the server - use `renderVTTCueString`\"\n );\n }\n const template = document.createElement(\"template\");\n template.innerHTML = renderVTTCueString(cue);\n return { cue, content: template.content };\n}\nfunction renderVTTCueString(cue, currentTime = 0) {\n return renderVTTTokensString(tokenizeVTTCue(cue), currentTime);\n}\nfunction renderVTTTokensString(tokens, currentTime = 0) {\n let attrs, result = \"\";\n for (const token of tokens) {\n if (token.type === \"text\") {\n result += token.data;\n } else {\n const isTimestamp = token.type === \"timestamp\";\n attrs = {};\n attrs.class = token.class;\n attrs.title = token.type === \"v\" && token.voice;\n attrs.lang = token.type === \"lang\" && token.lang;\n attrs[\"data-part\"] = token.type === \"v\" && \"voice\";\n if (isTimestamp) {\n attrs[\"data-part\"] = \"timed\";\n attrs[\"data-time\"] = token.time;\n attrs[\"data-future\"] = token.time > currentTime;\n attrs[\"data-past\"] = token.time < currentTime;\n }\n attrs.style = `${token.color ? `color: ${token.color};` : \"\"}${token.bgColor ? `background-color: ${token.bgColor};` : \"\"}`;\n const attributes = Object.entries(attrs).filter((v) => v[1]).map((v) => `${v[0]}=\"${v[1] === true ? \"\" : v[1]}\"`).join(\" \");\n result += `<${token.tagName}${attributes ? \" \" + attributes : \"\"}>${renderVTTTokensString(\n token.children\n )}</${token.tagName}>`;\n }\n }\n return result;\n}\nfunction updateTimedVTTCueNodes(root, currentTime) {\n if (IS_SERVER)\n return;\n for (const el of root.querySelectorAll('[data-part=\"timed\"]')) {\n const time = Number(el.getAttribute(\"data-time\"));\n if (Number.isNaN(time))\n continue;\n if (time > currentTime)\n setDataAttr(el, \"future\");\n else\n el.removeAttribute(\"data-future\");\n if (time < currentTime)\n setDataAttr(el, \"past\");\n else\n el.removeAttribute(\"data-past\");\n }\n}\n\nfunction debounce(fn, delay) {\n let timeout = null, args;\n function run() {\n clear();\n fn(...args);\n args = void 0;\n }\n function clear() {\n clearTimeout(timeout);\n timeout = null;\n }\n function debounce2() {\n args = [].slice.call(arguments);\n clear();\n timeout = setTimeout(run, delay);\n }\n return debounce2;\n}\n\nconst STARTING_BOX = Symbol(0);\nfunction createBox(box) {\n if (box instanceof HTMLElement) {\n return {\n top: box.offsetTop,\n width: box.clientWidth,\n height: box.clientHeight,\n left: box.offsetLeft,\n right: box.offsetLeft + box.clientWidth,\n bottom: box.offsetTop + box.clientHeight\n };\n }\n return { ...box };\n}\nfunction moveBox(box, axis, delta) {\n switch (axis) {\n case \"+x\":\n box.left += delta;\n box.right += delta;\n break;\n case \"-x\":\n box.left -= delta;\n box.right -= delta;\n break;\n case \"+y\":\n box.top += delta;\n box.bottom += delta;\n break;\n case \"-y\":\n box.top -= delta;\n box.bottom -= delta;\n break;\n }\n}\nfunction isBoxCollision(a, b) {\n return a.left <= b.right && a.right >= b.left && a.top <= b.bottom && a.bottom >= b.top;\n}\nfunction isAnyBoxCollision(box, boxes) {\n for (let i = 0; i < boxes.length; i++)\n if (isBoxCollision(box, boxes[i]))\n return boxes[i];\n return null;\n}\nfunction isWithinBox(container, box) {\n return box.top >= 0 && box.bottom <= container.height && box.left >= 0 && box.right <= container.width;\n}\nfunction isBoxOutOfBounds(container, box, axis) {\n switch (axis) {\n case \"+x\":\n return box.left < 0;\n case \"-x\":\n return box.right > container.width;\n case \"+y\":\n return box.top < 0;\n case \"-y\":\n return box.bottom > container.height;\n }\n}\nfunction calcBoxIntersectPercentage(container, box) {\n const x = Math.max(0, Math.min(container.width, box.right) - Math.max(0, box.left)), y = Math.max(0, Math.min(container.height, box.bottom) - Math.max(0, box.top)), intersectArea = x * y;\n return intersectArea / (container.height * container.width);\n}\nfunction createCSSBox(container, box) {\n return {\n top: box.top / container.height,\n left: box.left / container.width,\n right: (container.width - box.right) / container.width,\n bottom: (container.height - box.bottom) / container.height\n };\n}\nfunction resolveRelativeBox(container, box) {\n box.top = box.top * container.height;\n box.left = box.left * container.width;\n box.right = container.width - box.right * container.width;\n box.bottom = container.height - box.bottom * container.height;\n return box;\n}\nconst BOX_SIDES = [\"top\", \"left\", \"right\", \"bottom\"];\nfunction setBoxCSSVars(el, container, box, prefix) {\n const cssBox = createCSSBox(container, box);\n for (const side of BOX_SIDES) {\n setCSSVar(el, `${prefix}-${side}`, cssBox[side] * 100 + \"%\");\n }\n}\nfunction avoidBoxCollisions(container, box, boxes, axis) {\n let percentage = 1, positionedBox, startBox = { ...box };\n for (let i = 0; i < axis.length; i++) {\n while (isBoxOutOfBounds(container, box, axis[i]) || isWithinBox(container, box) && isAnyBoxCollision(box, boxes)) {\n moveBox(box, axis[i], 1);\n }\n if (isWithinBox(container, box))\n return box;\n const intersection = calcBoxIntersectPercentage(container, box);\n if (percentage > intersection) {\n positionedBox = { ...box };\n percentage = intersection;\n }\n box = { ...startBox };\n }\n return positionedBox || startBox;\n}\n\nconst POSITION_OVERRIDE = Symbol(0);\nfunction positionCue(container, cue, displayEl, boxes) {\n let cueEl = displayEl.firstElementChild, line = computeCueLine(cue), displayBox, axis = [];\n if (!displayEl[STARTING_BOX]) {\n displayEl[STARTING_BOX] = createStartingBox(container, displayEl);\n }\n displayBox = resolveRelativeBox(container, { ...displayEl[STARTING_BOX] });\n if (displayEl[POSITION_OVERRIDE]) {\n axis = [displayEl[POSITION_OVERRIDE] === \"top\" ? \"+y\" : \"-y\", \"+x\", \"-x\"];\n } else if (cue.snapToLines) {\n let size;\n switch (cue.vertical) {\n case \"\":\n axis = [\"+y\", \"-y\"];\n size = \"height\";\n break;\n case \"rl\":\n axis = [\"+x\", \"-x\"];\n size = \"width\";\n break;\n case \"lr\":\n axis = [\"-x\", \"+x\"];\n size = \"width\";\n break;\n }\n let step = getLineHeight(cueEl), position = step * Math.round(line), maxPosition = container[size] + step, initialAxis = axis[0];\n if (Math.abs(position) > maxPosition) {\n position = position < 0 ? -1 : 1;\n position *= Math.ceil(maxPosition / step) * step;\n }\n if (line < 0) {\n position += cue.vertical === \"\" ? container.height : container.width;\n axis = axis.reverse();\n }\n moveBox(displayBox, initialAxis, position);\n } else {\n const isHorizontal = cue.vertical === \"\", posAxis = isHorizontal ? \"+y\" : \"+x\", size = isHorizontal ? displayBox.height : displayBox.width;\n moveBox(\n displayBox,\n posAxis,\n (isHorizontal ? container.height : container.width) * line / 100\n );\n moveBox(\n displayBox,\n posAxis,\n cue.lineAlign === \"center\" ? size / 2 : cue.lineAlign === \"end\" ? size : 0\n );\n axis = isHorizontal ? [\"-y\", \"+y\", \"-x\", \"+x\"] : [\"-x\", \"+x\", \"-y\", \"+y\"];\n }\n displayBox = avoidBoxCollisions(container, displayBox, boxes, axis);\n setBoxCSSVars(displayEl, container, displayBox, \"cue\");\n return displayBox;\n}\nfunction createStartingBox(container, cueEl) {\n const box = createBox(cueEl), pos = getStyledPositions(cueEl);\n cueEl[POSITION_OVERRIDE] = false;\n if (pos.top) {\n box.top = pos.top;\n box.bottom = pos.top + box.height;\n cueEl[POSITION_OVERRIDE] = \"top\";\n }\n if (pos.bottom) {\n const bottom = container.height - pos.bottom;\n box.top = bottom - box.height;\n box.bottom = bottom;\n cueEl[POSITION_OVERRIDE] = \"bottom\";\n }\n if (pos.left)\n box.left = pos.left;\n if (pos.right)\n box.right = container.width - pos.right;\n return createCSSBox(container, box);\n}\nfunction getStyledPositions(el) {\n const positions = {};\n for (const side of BOX_SIDES) {\n positions[side] = parseFloat(el.style.getPropertyValue(`--cue-${side}`));\n }\n return positions;\n}\nfunction computeCueLine(cue) {\n if (cue.line === \"auto\") {\n if (!cue.snapToLines) {\n return 100;\n } else {\n return -1;\n }\n }\n return cue.line;\n}\nfunction computeCuePosition(cue) {\n if (cue.position === \"auto\") {\n switch (cue.align) {\n case \"start\":\n case \"left\":\n return 0;\n case \"right\":\n case \"end\":\n return 100;\n default:\n return 50;\n }\n }\n return cue.position;\n}\nfunction computeCuePositionAlignment(cue, dir) {\n if (cue.positionAlign === \"auto\") {\n switch (cue.align) {\n case \"start\":\n return dir === \"ltr\" ? \"line-left\" : \"line-right\";\n case \"end\":\n return dir === \"ltr\" ? \"line-right\" : \"line-left\";\n case \"center\":\n return \"center\";\n default:\n return `line-${cue.align}`;\n }\n }\n return cue.positionAlign;\n}\n\nconst REGION_AXIS = [\"-y\", \"+y\", \"-x\", \"+x\"];\nfunction positionRegion(container, region, regionEl, boxes) {\n let cues = Array.from(regionEl.querySelectorAll('[data-part=\"cue-display\"]')), height = 0, limit = Math.max(0, cues.length - region.lines);\n for (let i = cues.length - 1; i >= limit; i--) {\n height += cues[i].offsetHeight;\n }\n setCSSVar(regionEl, \"region-height\", height + \"px\");\n if (!regionEl[STARTING_BOX]) {\n regionEl[STARTING_BOX] = createCSSBox(container, createBox(regionEl));\n }\n let box = { ...regionEl[STARTING_BOX] };\n box = resolveRelativeBox(container, box);\n box.width = regionEl.clientWidth;\n box.height = height;\n box.right = box.left + box.width;\n box.bottom = box.top + height;\n box = avoidBoxCollisions(container, box, boxes, REGION_AXIS);\n setBoxCSSVars(regionEl, container, box, \"region\");\n return box;\n}\n\nclass CaptionsRenderer {\n overlay;\n z;\n A = 0;\n C = \"ltr\";\n B = [];\n D = false;\n E;\n j = /* @__PURE__ */ new Map();\n l = /* @__PURE__ */ new Map();\n /* Text direction. */\n get dir() {\n return this.C;\n }\n set dir(dir) {\n this.C = dir;\n setDataAttr(this.overlay, \"dir\", dir);\n }\n get currentTime() {\n return this.A;\n }\n set currentTime(time) {\n this.A = time;\n this.update();\n }\n constructor(overlay, init) {\n this.overlay = overlay;\n this.dir = init?.dir ?? \"ltr\";\n overlay.setAttribute(\"translate\", \"yes\");\n overlay.setAttribute(\"aria-live\", \"off\");\n overlay.setAttribute(\"aria-atomic\", \"true\");\n setPartAttr(overlay, \"captions\");\n this.G();\n this.E = new ResizeObserver(this.I.bind(this));\n this.E.observe(overlay);\n }\n changeTrack({ regions, cues }) {\n this.reset();\n this.J(regions);\n for (const cue of cues)\n this.l.set(cue, null);\n this.update();\n }\n addCue(cue) {\n this.l.set(cue, null);\n this.update();\n }\n removeCue(cue) {\n this.l.delete(cue);\n this.update();\n }\n update(forceUpdate = false) {\n this.H(forceUpdate);\n }\n reset() {\n this.l.clear();\n this.j.clear();\n this.B = [];\n this.overlay.textContent = \"\";\n }\n destroy() {\n this.reset();\n this.E.disconnect();\n }\n I() {\n this.D = true;\n this.K();\n }\n K = debounce(() => {\n this.D = false;\n this.G();\n for (const el of this.j.values()) {\n el[STARTING_BOX] = null;\n }\n for (const el of this.l.values()) {\n if (el)\n el[STARTING_BOX] = null;\n }\n this.H(true);\n }, 50);\n G() {\n this.z = createBox(this.overlay);\n setCSSVar(this.overlay, \"overlay-width\", this.z.width + \"px\");\n setCSSVar(this.overlay, \"overlay-height\", this.z.height + \"px\");\n }\n H(forceUpdate = false) {\n if (!this.l.size || this.D)\n return;\n let cue, activeCues = [...this.l.keys()].filter((cue2) => this.A >= cue2.startTime && this.A <= cue2.endTime).sort(\n (cueA, cueB) => cueA.startTime !== cueB.startTime ? cueA.startTime - cueB.startTime : cueA.endTime - cueB.endTime\n ), activeRegions = activeCues.map((cue2) => cue2.region);\n for (let i = 0; i < this.B.length; i++) {\n cue = this.B[i];\n if (activeCues[i] === cue)\n continue;\n if (cue.region && !activeRegions.includes(cue.region)) {\n const regionEl = this.j.get(cue.region.id);\n if (regionEl) {\n regionEl.removeAttribute(\"data-active\");\n forceUpdate = true;\n }\n }\n const cueEl = this.l.get(cue);\n if (cueEl) {\n cueEl.remove();\n forceUpdate = true;\n }\n }\n for (let i = 0; i < activeCues.length; i++) {\n cue = activeCues[i];\n let cueEl = this.l.get(cue);\n if (!cueEl)\n this.l.set(cue, cueEl = this.L(cue));\n const regionEl = this.F(cue) && this.j.get(cue.region.id);\n if (regionEl && !regionEl.hasAttribute(\"data-active\")) {\n requestAnimationFrame(() => setDataAttr(regionEl, \"active\"));\n forceUpdate = true;\n }\n if (!cueEl.isConnected) {\n (regionEl || this.overlay).append(cueEl);\n forceUpdate = true;\n }\n }\n if (forceUpdate) {\n const boxes = [], seen = /* @__PURE__ */ new Set();\n for (let i = activeCues.length - 1; i >= 0; i--) {\n cue = activeCues[i];\n if (seen.has(cue.region || cue))\n continue;\n const isRegion = this.F(cue), el = isRegion ? this.j.get(cue.region.id) : this.l.get(cue);\n if (isRegion) {\n boxes.push(positionRegion(this.z, cue.region, el, boxes));\n } else {\n boxes.push(positionCue(this.z, cue, el, boxes));\n }\n seen.add(isRegion ? cue.region : cue);\n }\n }\n updateTimedVTTCueNodes(this.overlay, this.A);\n this.B = activeCues;\n }\n J(regions) {\n if (!regions)\n return;\n for (const region of regions) {\n const el = this.M(region);\n this.j.set(region.id, el);\n this.overlay.append(el);\n }\n }\n M(region) {\n const el = document.createElement(\"div\");\n setPartAttr(el, \"region\");\n setDataAttr(el, \"id\", region.id);\n setDataAttr(el, \"scroll\", region.scroll);\n setCSSVar(el, \"region-width\", region.width + \"%\");\n setCSSVar(el, \"region-anchor-x\", region.regionAnchorX);\n setCSSVar(el, \"region-anchor-y\", region.regionAnchorY);\n setCSSVar(el, \"region-viewport-anchor-x\", region.viewportAnchorX);\n setCSSVar(el, \"region-viewport-anchor-y\", region.viewportAnchorY);\n setCSSVar(el, \"region-lines\", region.lines);\n return el;\n }\n L(cue) {\n const display = document.createElement(\"div\"), position = computeCuePosition(cue), positionAlignment = computeCuePositionAlignment(cue, this.C);\n setPartAttr(display, \"cue-display\");\n if (cue.vertical !== \"\")\n setDataAttr(display, \"vertical\");\n setCSSVar(display, \"cue-text-align\", cue.align);\n if (cue.style) {\n for (const prop of Object.keys(cue.style)) {\n display.style.setProperty(prop, cue.style[prop]);\n }\n }\n if (!this.F(cue)) {\n setCSSVar(\n display,\n \"cue-writing-mode\",\n cue.vertical === \"\" ? \"horizontal-tb\" : cue.vertical === \"lr\" ? \"vertical-lr\" : \"vertical-rl\"\n );\n if (!cue.style?.[\"--cue-width\"]) {\n let maxSize = position;\n if (positionAlignment === \"line-left\") {\n maxSize = 100 - position;\n } else if (positionAlignment === \"center\" && position <= 50) {\n maxSize = position * 2;\n } else if (positionAlignment === \"center\" && position > 50) {\n maxSize = (100 - position) * 2;\n }\n const size = cue.size < maxSize ? cue.size : maxSize;\n if (cue.vertical === \"\")\n setCSSVar(display, \"cue-width\", size + \"%\");\n else\n setCSSVar(display, \"cue-height\", size + \"%\");\n }\n } else {\n setCSSVar(\n display,\n \"cue-offset\",\n `${position - (positionAlignment === \"line-right\" ? 100 : positionAlignment === \"center\" ? 50 : 0)}%`\n );\n }\n const el = document.createElement(\"div\");\n setPartAttr(el, \"cue\");\n if (cue.id)\n setDataAttr(el, \"id\", cue.id);\n el.innerHTML = renderVTTCueString(cue);\n display.append(el);\n return display;\n }\n F(cue) {\n return cue.region && cue.size === 100 && cue.vertical === \"\" && cue.line === \"auto\";\n }\n}\n\nexport { CaptionsRenderer as C, ParseError as P, TextCue as T, VTTParser as V, VTTBlock as a, VTTCue as b, ParseErrorCode as c, parseResponse as d, parseByteStream as e, parseText as f, parseTextStream as g, VTTRegion as h, createVTTCueTemplate as i, renderVTTTokensString as j, parseVTTTimestamp as p, renderVTTCueString as r, tokenizeVTTCue as t, updateTimedVTTCueNodes as u };\n"],"names":["ParseErrorCode","ParseError","init","__publicField","LINE_TERMINATOR_RE","TextLineTransformStream","encoding","transformer","TextStreamLineIterator","chunk","controller","line","lines","i","parseText","text","options","stream","parseTextStream","type","factory","vttParser","result","reader","parser","errors","value","done","parseResponse","response","_a","_b","res","contentType","parseByteStream","textStream","TextCue","startTime","endTime","listener","IS_SERVER","CueBase","VTTCue","VTTRegion","COMMA$1","PERCENT_SIGN$1","toNumber","num","toPercentage","toCoords","x","y","toFloat","HEADER_MAGIC","COMMA","PERCENT_SIGN","SETTING_SEP_RE","SETTING_LINE_RE","NOTE_BLOCK_START","REGION_BLOCK_START","REGION_BLOCK_START_RE","SPACE_RE","TIMESTAMP_SEP","TIMESTAMP_SEP_RE","ALIGN_RE","LINE_ALIGN_RE","POS_ALIGN_RE","TIMESTAMP_RE","VTTBlock","VTTBlock2","VTTParser","lineCount","_c","_d","_e","_f","hasText","key","startTimeText","trailingText","endTimeText","settingsText","parseVTTTimestamp","settings","badValue","name","width","region","viewport","linePos","lineAlign","percentage","number","colPos","colAlign","position","size","error","timestamp","match","hours","minutes","seconds","milliseconds","total","createVTTParser","DIGIT_RE","MULTI_SPACE_RE","TAG_NAME","HTML_ENTITIES","HTML_ENTITY_RE","COLORS","BLOCK_TYPES","tokenizeVTTCue","cue","buffer","mode","stack","node","char","addText","addNode","addClass","replaceHTMLEntities","time","parent","createBlockNode","color","entity","setCSSVar","el","setDataAttr","setPartAttr","getLineHeight","createVTTCueTemplate","template","renderVTTCueString","currentTime","renderVTTTokensString","tokens","attrs","token","isTimestamp","attributes","v","updateTimedVTTCueNodes","root","debounce","fn","delay","timeout","args","run","clear","debounce2","STARTING_BOX","createBox","box","moveBox","axis","delta","isBoxCollision","a","b","isAnyBoxCollision","boxes","isWithinBox","container","isBoxOutOfBounds","calcBoxIntersectPercentage","createCSSBox","resolveRelativeBox","BOX_SIDES","setBoxCSSVars","prefix","cssBox","side","avoidBoxCollisions","positionedBox","startBox","intersection","POSITION_OVERRIDE","positionCue","displayEl","cueEl","computeCueLine","displayBox","createStartingBox","step","maxPosition","initialAxis","isHorizontal","posAxis","pos","getStyledPositions","bottom","positions","computeCuePosition","computeCuePositionAlignment","dir","REGION_AXIS","positionRegion","regionEl","cues","height","limit","CaptionsRenderer","overlay","regions","forceUpdate","activeCues","cue2","cueA","cueB","activeRegions","seen","isRegion","display","positionAlignment","prop","maxSize"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/packages/ui/dist-lib/srt-parser-CWqahKwO.js b/packages/ui/dist-lib/srt-parser-CWqahKwO.js new file mode 100644 index 00000000..2a9bca3a --- /dev/null +++ b/packages/ui/dist-lib/srt-parser-CWqahKwO.js @@ -0,0 +1,28 @@ +import { V as c, a as i, b as a } from "./prod-DTLJXtPo.js"; +const n = /,/g, u = "-->"; +class o extends c { + parse(s, e) { + var h, r; + if (s === "") + this.c && (this.l.push(this.c), (r = (h = this.h).onCue) == null || r.call(h, this.c), this.c = null), this.e = i.None; + else if (this.e === i.Cue) + this.c.text += (this.c.text ? ` +` : "") + s; + else if (s.includes(u)) { + const t = this.q(s, e); + t && (this.c = new a(t[0], t[1], t[2].join(" ")), this.c.id = this.n, this.e = i.Cue); + } + this.n = s; + } + q(s, e) { + return super.q(s.replace(n, "."), e); + } +} +function l() { + return new o(); +} +export { + o as SRTParser, + l as default +}; +//# sourceMappingURL=srt-parser-CWqahKwO.js.map diff --git a/packages/ui/dist-lib/srt-parser-CWqahKwO.js.map b/packages/ui/dist-lib/srt-parser-CWqahKwO.js.map new file mode 100644 index 00000000..65086c21 --- /dev/null +++ b/packages/ui/dist-lib/srt-parser-CWqahKwO.js.map @@ -0,0 +1 @@ +{"version":3,"file":"srt-parser-CWqahKwO.js","sources":["../node_modules/media-captions/dist/prod/srt-parser.js"],"sourcesContent":["import { V as VTTParser, a as VTTBlock, b as VTTCue } from './index.js';\n\nconst MILLISECOND_SEP_RE = /,/g, TIMESTAMP_SEP = \"-->\";\nclass SRTParser extends VTTParser {\n parse(line, lineCount) {\n if (line === \"\") {\n if (this.c) {\n this.l.push(this.c);\n this.h.onCue?.(this.c);\n this.c = null;\n }\n this.e = VTTBlock.None;\n } else if (this.e === VTTBlock.Cue) {\n this.c.text += (this.c.text ? \"\\n\" : \"\") + line;\n } else if (line.includes(TIMESTAMP_SEP)) {\n const result = this.q(line, lineCount);\n if (result) {\n this.c = new VTTCue(result[0], result[1], result[2].join(\" \"));\n this.c.id = this.n;\n this.e = VTTBlock.Cue;\n }\n }\n this.n = line;\n }\n q(line, lineCount) {\n return super.q(line.replace(MILLISECOND_SEP_RE, \".\"), lineCount);\n }\n}\nfunction createSRTParser() {\n return new SRTParser();\n}\n\nexport { SRTParser, createSRTParser as default };\n"],"names":["MILLISECOND_SEP_RE","TIMESTAMP_SEP","SRTParser","VTTParser","line","lineCount","_b","_a","VTTBlock","result","VTTCue","createSRTParser"],"mappings":";AAEA,MAAMA,IAAqB,MAAMC,IAAgB;AACjD,MAAMC,UAAkBC,EAAU;AAAA,EAChC,MAAMC,GAAMC,GAAW;;AACrB,QAAID,MAAS;AACX,MAAI,KAAK,MACP,KAAK,EAAE,KAAK,KAAK,CAAC,IAClBE,KAAAC,IAAA,KAAK,GAAE,UAAP,QAAAD,EAAA,KAAAC,GAAe,KAAK,IACpB,KAAK,IAAI,OAEX,KAAK,IAAIC,EAAS;AAAA,aACT,KAAK,MAAMA,EAAS;AAC7B,WAAK,EAAE,SAAS,KAAK,EAAE,OAAO;AAAA,IAAO,MAAMJ;AAAA,aAClCA,EAAK,SAASH,CAAa,GAAG;AACvC,YAAMQ,IAAS,KAAK,EAAEL,GAAMC,CAAS;AACrC,MAAII,MACF,KAAK,IAAI,IAAIC,EAAOD,EAAO,CAAC,GAAGA,EAAO,CAAC,GAAGA,EAAO,CAAC,EAAE,KAAK,GAAG,CAAC,GAC7D,KAAK,EAAE,KAAK,KAAK,GACjB,KAAK,IAAID,EAAS;AAAA,IAEtB;AACA,SAAK,IAAIJ;AAAA,EACX;AAAA,EACA,EAAEA,GAAMC,GAAW;AACjB,WAAO,MAAM,EAAED,EAAK,QAAQJ,GAAoB,GAAG,GAAGK,CAAS;AAAA,EACjE;AACF;AACA,SAASM,IAAkB;AACzB,SAAO,IAAIT,EAAS;AACtB;","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/packages/ui/dist-lib/ssa-parser-BqjjKy4M.js b/packages/ui/dist-lib/ssa-parser-BqjjKy4M.js new file mode 100644 index 00000000..4f219ce0 --- /dev/null +++ b/packages/ui/dist-lib/ssa-parser-BqjjKy4M.js @@ -0,0 +1,210 @@ +var F = Object.defineProperty; +var A = (c, t, s) => t in c ? F(c, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : c[t] = s; +var u = (c, t, s) => A(c, typeof t != "symbol" ? t + "" : t, s); +import { b as L, p as y } from "./prod-DTLJXtPo.js"; +const S = /^Format:[\s\t]*/, O = /^Style:[\s\t]*/, _ = /^Dialogue:[\s\t]*/, d = /[\s\t]*,[\s\t]*/, w = /\{[^}]+\}/g, I = /\\N/g, x = /^\[(.*)[\s\t]?Styles\]$/, k = /^\[(.*)[\s\t]?Events\]$/; +class $ { + constructor() { + u(this, "h"); + u(this, "O", 0); + u(this, "c", null); + u(this, "l", []); + u(this, "m", []); + u(this, "N", null); + u(this, "f"); + u(this, "P", {}); + } + async init(t) { + this.h = t, t.errors && (this.f = (await import("./errors-DCJKAXTz.js")).ParseErrorBuilder); + } + parse(t, s) { + var e, a; + if (this.O) + switch (this.O) { + case 1: + if (t === "") + this.O = 0; + else if (O.test(t)) + if (this.N) { + const i = t.replace(O, "").split(d); + this.S(i); + } else + this.g((e = this.f) == null ? void 0 : e.T("Style", s)); + else S.test(t) ? this.N = t.replace(S, "").split(d) : k.test(t) && (this.N = null, this.O = 2); + break; + case 2: + if (t === "") + this.Q(); + else if (_.test(t)) + if (this.Q(), this.N) { + const i = t.replace(_, "").split(d), r = this.U(i, s); + r && (this.c = r); + } else + this.g((a = this.f) == null ? void 0 : a.T("Dialogue", s)); + else this.c ? this.c.text += ` +` + t.replace(w, "").replace(I, ` +`) : S.test(t) ? this.N = t.replace(S, "").split(d) : x.test(t) ? (this.N = null, this.O = 1) : k.test(t) && (this.N = null); + } + else t === "" || (x.test(t) ? (this.N = null, this.O = 1) : k.test(t) && (this.N = null, this.O = 2)); + } + done() { + return { + metadata: {}, + cues: this.l, + regions: [], + errors: this.m + }; + } + Q() { + var t, s; + this.c && (this.l.push(this.c), (s = (t = this.h).onCue) == null || s.call(t, this.c), this.c = null); + } + S(t) { + let s = "Default", e = {}, a, i = "center", r = "bottom", f, n = 1.2, o, p, h = 3, b = []; + for (let g = 0; g < this.N.length; g++) { + const M = this.N[g], l = t[g]; + switch (M) { + case "Name": + s = l; + break; + case "Fontname": + e["font-family"] = l; + break; + case "Fontsize": + e["font-size"] = `calc(${l} / var(--overlay-height))`; + break; + case "PrimaryColour": + const E = N(l); + E && (e["--cue-color"] = E); + break; + case "BorderStyle": + h = parseInt(l, 10); + break; + case "BackColour": + p = N(l); + break; + case "OutlineColour": + const R = N(l); + R && (o = R); + break; + case "Bold": + parseInt(l) && (e["font-weight"] = "bold"); + break; + case "Italic": + parseInt(l) && (e["font-style"] = "italic"); + break; + case "Underline": + parseInt(l) && (e["text-decoration"] = "underline"); + break; + case "StrikeOut": + parseInt(l) && (e["text-decoration"] = "line-through"); + break; + case "Spacing": + e["letter-spacing"] = l + "px"; + break; + case "AlphaLevel": + e.opacity = parseFloat(l); + break; + case "ScaleX": + b.push(`scaleX(${parseFloat(l) / 100})`); + break; + case "ScaleY": + b.push(`scaleY(${parseFloat(l) / 100})`); + break; + case "Angle": + b.push(`rotate(${l}deg)`); + break; + case "Shadow": + n = parseInt(l, 10) * 1.2; + break; + case "MarginL": + e["--cue-width"] = "auto", e["--cue-left"] = parseFloat(l) + "px"; + break; + case "MarginR": + e["--cue-width"] = "auto", e["--cue-right"] = parseFloat(l) + "px"; + break; + case "MarginV": + f = parseFloat(l); + break; + case "Outline": + a = parseInt(l, 10); + break; + case "Alignment": + const m = parseInt(l, 10); + switch (m >= 4 && (r = m >= 7 ? "top" : "center"), m % 3) { + case 1: + i = "start"; + break; + case 2: + i = "center"; + break; + case 3: + i = "end"; + break; + } + } + } + if (e.R = r, e["--cue-white-space"] = "normal", e["--cue-line-height"] = "normal", e["--cue-text-align"] = i, r === "center" ? (e["--cue-top"] = "50%", b.push("translateY(-50%)")) : e[`--cue-${r}`] = (f || 0) + "px", h === 1 && (e["--cue-padding-y"] = "0"), (h === 1 || p) && (e["--cue-bg-color"] = h === 1 ? "none" : p), h === 3 && o && (e["--cue-outline"] = `${a}px solid ${o}`), h === 1 && typeof a == "number") { + const g = p ?? "#000"; + e["--cue-text-shadow"] = [ + o && T(a * 1.2, n * 1.2, o), + o ? T(a * (a / 2), n * (a / 2), g) : T(a, n, g) + ].filter(Boolean).join(", "); + } + b.length && (e["--cue-transform"] = b.join(" ")), this.P[s] = e; + } + U(t, s) { + const e = this.V(t), a = this.q(e.Start, e.End, s); + if (!a) + return; + const i = new L(a[0], a[1], ""), r = { ...this.P[e.Style] || {} }, f = e.Name ? `<v ${e.Name}>` : "", n = r.R, o = e.MarginL && parseFloat(e.MarginL), p = e.MarginR && parseFloat(e.MarginR), h = e.MarginV && parseFloat(e.MarginV); + return o && (r["--cue-width"] = "auto", r["--cue-left"] = o + "px"), p && (r["--cue-width"] = "auto", r["--cue-right"] = p + "px"), h && n !== "center" && (r[`--cue-${n}`] = h + "px"), i.text = f + t.slice(this.N.length - 1).join(", ").replace(w, "").replace(I, ` +`), delete r.R, Object.keys(r).length && (i.style = r), i; + } + V(t) { + const s = {}; + for (let e = 0; e < this.N.length; e++) + s[this.N[e]] = t[e]; + return s; + } + q(t, s, e) { + var r, f, n; + const a = y(t), i = y(s); + if (a !== null && i !== null && i > a) + return [a, i]; + a === null && this.g((r = this.f) == null ? void 0 : r.s(t, e)), i === null && this.g((f = this.f) == null ? void 0 : f.t(s, e)), a != null && i !== null && i > a && this.g((n = this.f) == null ? void 0 : n.u(a, i, e)); + } + g(t) { + var s, e; + if (t) { + if (this.m.push(t), this.h.strict) + throw this.h.cancel(), t; + (e = (s = this.h).onError) == null || e.call(s, t); + } + } +} +function N(c) { + const t = parseInt(c.replace("&H", ""), 16); + if (t >= 0) { + const e = (t >> 24 & 255 ^ 255) / 255, a = t >> 16 & 255, i = t >> 8 & 255; + return "rgba(" + [t & 255, i, a, e].join(",") + ")"; + } + return null; +} +function T(c, t, s) { + const e = Math.ceil(2 * Math.PI * c); + let a = ""; + for (let i = 0; i < e; i++) { + const r = 2 * Math.PI * i / e; + a += c * Math.cos(r) + "px " + t * Math.sin(r) + "px 0 " + s + (i == e - 1 ? "" : ","); + } + return a; +} +function v() { + return new $(); +} +export { + $ as SSAParser, + v as default +}; +//# sourceMappingURL=ssa-parser-BqjjKy4M.js.map diff --git a/packages/ui/dist-lib/ssa-parser-BqjjKy4M.js.map b/packages/ui/dist-lib/ssa-parser-BqjjKy4M.js.map new file mode 100644 index 00000000..5c0313dd --- /dev/null +++ b/packages/ui/dist-lib/ssa-parser-BqjjKy4M.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ssa-parser-BqjjKy4M.js","sources":["../node_modules/media-captions/dist/prod/ssa-parser.js"],"sourcesContent":["import { b as VTTCue, p as parseVTTTimestamp } from './index.js';\n\nconst FORMAT_START_RE = /^Format:[\\s\\t]*/, STYLE_START_RE = /^Style:[\\s\\t]*/, DIALOGUE_START_RE = /^Dialogue:[\\s\\t]*/, FORMAT_SPLIT_RE = /[\\s\\t]*,[\\s\\t]*/, STYLE_FUNCTION_RE = /\\{[^}]+\\}/g, NEW_LINE_RE = /\\\\N/g, STYLES_SECTION_START_RE = /^\\[(.*)[\\s\\t]?Styles\\]$/, EVENTS_SECTION_START_RE = /^\\[(.*)[\\s\\t]?Events\\]$/;\nclass SSAParser {\n h;\n O = 0;\n c = null;\n l = [];\n m = [];\n N = null;\n f;\n P = {};\n async init(init) {\n this.h = init;\n if (init.errors)\n this.f = (await import('./errors.js')).ParseErrorBuilder;\n }\n parse(line, lineCount) {\n if (this.O) {\n switch (this.O) {\n case 1:\n if (line === \"\") {\n this.O = 0;\n } else if (STYLE_START_RE.test(line)) {\n if (this.N) {\n const styles = line.replace(STYLE_START_RE, \"\").split(FORMAT_SPLIT_RE);\n this.S(styles);\n } else {\n this.g(this.f?.T(\"Style\", lineCount));\n }\n } else if (FORMAT_START_RE.test(line)) {\n this.N = line.replace(FORMAT_START_RE, \"\").split(FORMAT_SPLIT_RE);\n } else if (EVENTS_SECTION_START_RE.test(line)) {\n this.N = null;\n this.O = 2;\n }\n break;\n case 2:\n if (line === \"\") {\n this.Q();\n } else if (DIALOGUE_START_RE.test(line)) {\n this.Q();\n if (this.N) {\n const dialogue = line.replace(DIALOGUE_START_RE, \"\").split(FORMAT_SPLIT_RE), cue = this.U(dialogue, lineCount);\n if (cue)\n this.c = cue;\n } else {\n this.g(this.f?.T(\"Dialogue\", lineCount));\n }\n } else if (this.c) {\n this.c.text += \"\\n\" + line.replace(STYLE_FUNCTION_RE, \"\").replace(NEW_LINE_RE, \"\\n\");\n } else if (FORMAT_START_RE.test(line)) {\n this.N = line.replace(FORMAT_START_RE, \"\").split(FORMAT_SPLIT_RE);\n } else if (STYLES_SECTION_START_RE.test(line)) {\n this.N = null;\n this.O = 1;\n } else if (EVENTS_SECTION_START_RE.test(line)) {\n this.N = null;\n }\n }\n } else if (line === \"\") ; else if (STYLES_SECTION_START_RE.test(line)) {\n this.N = null;\n this.O = 1;\n } else if (EVENTS_SECTION_START_RE.test(line)) {\n this.N = null;\n this.O = 2;\n }\n }\n done() {\n return {\n metadata: {},\n cues: this.l,\n regions: [],\n errors: this.m\n };\n }\n Q() {\n if (!this.c)\n return;\n this.l.push(this.c);\n this.h.onCue?.(this.c);\n this.c = null;\n }\n S(values) {\n let name = \"Default\", styles = {}, outlineX, align = \"center\", vertical = \"bottom\", marginV, outlineY = 1.2, outlineColor, bgColor, borderStyle = 3, transform = [];\n for (let i = 0; i < this.N.length; i++) {\n const field = this.N[i], value = values[i];\n switch (field) {\n case \"Name\":\n name = value;\n break;\n case \"Fontname\":\n styles[\"font-family\"] = value;\n break;\n case \"Fontsize\":\n styles[\"font-size\"] = `calc(${value} / var(--overlay-height))`;\n break;\n case \"PrimaryColour\":\n const color = parseColor(value);\n if (color)\n styles[\"--cue-color\"] = color;\n break;\n case \"BorderStyle\":\n borderStyle = parseInt(value, 10);\n break;\n case \"BackColour\":\n bgColor = parseColor(value);\n break;\n case \"OutlineColour\":\n const _outlineColor = parseColor(value);\n if (_outlineColor)\n outlineColor = _outlineColor;\n break;\n case \"Bold\":\n if (parseInt(value))\n styles[\"font-weight\"] = \"bold\";\n break;\n case \"Italic\":\n if (parseInt(value))\n styles[\"font-style\"] = \"italic\";\n break;\n case \"Underline\":\n if (parseInt(value))\n styles[\"text-decoration\"] = \"underline\";\n break;\n case \"StrikeOut\":\n if (parseInt(value))\n styles[\"text-decoration\"] = \"line-through\";\n break;\n case \"Spacing\":\n styles[\"letter-spacing\"] = value + \"px\";\n break;\n case \"AlphaLevel\":\n styles[\"opacity\"] = parseFloat(value);\n break;\n case \"ScaleX\":\n transform.push(`scaleX(${parseFloat(value) / 100})`);\n break;\n case \"ScaleY\":\n transform.push(`scaleY(${parseFloat(value) / 100})`);\n break;\n case \"Angle\":\n transform.push(`rotate(${value}deg)`);\n break;\n case \"Shadow\":\n outlineY = parseInt(value, 10) * 1.2;\n break;\n case \"MarginL\":\n styles[\"--cue-width\"] = \"auto\";\n styles[\"--cue-left\"] = parseFloat(value) + \"px\";\n break;\n case \"MarginR\":\n styles[\"--cue-width\"] = \"auto\";\n styles[\"--cue-right\"] = parseFloat(value) + \"px\";\n break;\n case \"MarginV\":\n marginV = parseFloat(value);\n break;\n case \"Outline\":\n outlineX = parseInt(value, 10);\n break;\n case \"Alignment\":\n const alignment = parseInt(value, 10);\n if (alignment >= 4)\n vertical = alignment >= 7 ? \"top\" : \"center\";\n switch (alignment % 3) {\n case 1:\n align = \"start\";\n break;\n case 2:\n align = \"center\";\n break;\n case 3:\n align = \"end\";\n break;\n }\n }\n }\n styles.R = vertical;\n styles[\"--cue-white-space\"] = \"normal\";\n styles[\"--cue-line-height\"] = \"normal\";\n styles[\"--cue-text-align\"] = align;\n if (vertical === \"center\") {\n styles[`--cue-top`] = \"50%\";\n transform.push(\"translateY(-50%)\");\n } else {\n styles[`--cue-${vertical}`] = (marginV || 0) + \"px\";\n }\n if (borderStyle === 1) {\n styles[\"--cue-padding-y\"] = \"0\";\n }\n if (borderStyle === 1 || bgColor) {\n styles[\"--cue-bg-color\"] = borderStyle === 1 ? \"none\" : bgColor;\n }\n if (borderStyle === 3 && outlineColor) {\n styles[\"--cue-outline\"] = `${outlineX}px solid ${outlineColor}`;\n }\n if (borderStyle === 1 && typeof outlineX === \"number\") {\n const color = bgColor ?? \"#000\";\n styles[\"--cue-text-shadow\"] = [\n outlineColor && buildTextShadow(outlineX * 1.2, outlineY * 1.2, outlineColor),\n outlineColor ? buildTextShadow(outlineX * (outlineX / 2), outlineY * (outlineX / 2), color) : buildTextShadow(outlineX, outlineY, color)\n ].filter(Boolean).join(\", \");\n }\n if (transform.length)\n styles[\"--cue-transform\"] = transform.join(\" \");\n this.P[name] = styles;\n }\n U(values, lineCount) {\n const fields = this.V(values);\n const timestamp = this.q(fields.Start, fields.End, lineCount);\n if (!timestamp)\n return;\n const cue = new VTTCue(timestamp[0], timestamp[1], \"\"), styles = { ...this.P[fields.Style] || {} }, voice = fields.Name ? `<v ${fields.Name}>` : \"\";\n const vertical = styles.R, marginLeft = fields.MarginL && parseFloat(fields.MarginL), marginRight = fields.MarginR && parseFloat(fields.MarginR), marginV = fields.MarginV && parseFloat(fields.MarginV);\n if (marginLeft) {\n styles[\"--cue-width\"] = \"auto\";\n styles[\"--cue-left\"] = marginLeft + \"px\";\n }\n if (marginRight) {\n styles[\"--cue-width\"] = \"auto\";\n styles[\"--cue-right\"] = marginRight + \"px\";\n }\n if (marginV && vertical !== \"center\") {\n styles[`--cue-${vertical}`] = marginV + \"px\";\n }\n cue.text = voice + values.slice(this.N.length - 1).join(\", \").replace(STYLE_FUNCTION_RE, \"\").replace(NEW_LINE_RE, \"\\n\");\n delete styles.R;\n if (Object.keys(styles).length)\n cue.style = styles;\n return cue;\n }\n V(values) {\n const fields = {};\n for (let i = 0; i < this.N.length; i++) {\n fields[this.N[i]] = values[i];\n }\n return fields;\n }\n q(startTimeText, endTimeText, lineCount) {\n const startTime = parseVTTTimestamp(startTimeText), endTime = parseVTTTimestamp(endTimeText);\n if (startTime !== null && endTime !== null && endTime > startTime) {\n return [startTime, endTime];\n } else {\n if (startTime === null) {\n this.g(this.f?.s(startTimeText, lineCount));\n }\n if (endTime === null) {\n this.g(this.f?.t(endTimeText, lineCount));\n }\n if (startTime != null && endTime !== null && endTime > startTime) {\n this.g(this.f?.u(startTime, endTime, lineCount));\n }\n }\n }\n g(error) {\n if (!error)\n return;\n this.m.push(error);\n if (this.h.strict) {\n this.h.cancel();\n throw error;\n } else {\n this.h.onError?.(error);\n }\n }\n}\nfunction parseColor(color) {\n const abgr = parseInt(color.replace(\"&H\", \"\"), 16);\n if (abgr >= 0) {\n const a = abgr >> 24 & 255 ^ 255;\n const alpha = a / 255;\n const b = abgr >> 16 & 255;\n const g = abgr >> 8 & 255;\n const r = abgr & 255;\n return \"rgba(\" + [r, g, b, alpha].join(\",\") + \")\";\n }\n return null;\n}\nfunction buildTextShadow(x, y, color) {\n const noOfShadows = Math.ceil(2 * Math.PI * x);\n let textShadow = \"\";\n for (let i = 0; i < noOfShadows; i++) {\n const theta = 2 * Math.PI * i / noOfShadows;\n textShadow += x * Math.cos(theta) + \"px \" + y * Math.sin(theta) + \"px 0 \" + color + (i == noOfShadows - 1 ? \"\" : \",\");\n }\n return textShadow;\n}\nfunction createSSAParser() {\n return new SSAParser();\n}\n\nexport { SSAParser, createSSAParser as default };\n"],"names":["FORMAT_START_RE","STYLE_START_RE","DIALOGUE_START_RE","FORMAT_SPLIT_RE","STYLE_FUNCTION_RE","NEW_LINE_RE","STYLES_SECTION_START_RE","EVENTS_SECTION_START_RE","SSAParser","__publicField","init","line","lineCount","styles","_a","dialogue","cue","_b","values","name","outlineX","align","vertical","marginV","outlineY","outlineColor","bgColor","borderStyle","transform","i","field","value","color","parseColor","_outlineColor","alignment","buildTextShadow","fields","timestamp","VTTCue","voice","marginLeft","marginRight","startTimeText","endTimeText","startTime","parseVTTTimestamp","endTime","_c","error","abgr","alpha","b","g","x","y","noOfShadows","textShadow","theta","createSSAParser"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/packages/ui/dist-lib/stores/navigationStore.d.ts b/packages/ui/dist-lib/stores/navigationStore.d.ts new file mode 100644 index 00000000..7cb77792 --- /dev/null +++ b/packages/ui/dist-lib/stores/navigationStore.d.ts @@ -0,0 +1,65 @@ +export interface NavigationPost { + id: string; + title: string; + image_url: string; + user_id: string; +} +export interface NavigationData { + posts: NavigationPost[]; + currentIndex: number; + source: 'home' | 'collection' | 'tag' | 'search' | 'user' | 'photogrid'; + sourceId?: string; +} +export interface NavigationHistory { + path: string; + data: NavigationData; + timestamp: number; +} +export interface WizardInitialImage { + id: string; + src: string; + title: string; + realDatabaseId?: string; + selected: boolean; +} +interface NavigationStore { + navigationData: NavigationData | null; + history: NavigationHistory[]; + wizardInitialImage: WizardInitialImage | null; + wizardReturnPath: string | null; + creationWizardOpen: boolean; + creationWizardMode: 'default' | 'page'; + setNavigationData: (data: NavigationData | null) => void; + updateCurrentIndex: (index: number) => void; + pushHistory: (path: string, data: NavigationData) => void; + popHistory: () => NavigationHistory | null; + clearHistory: () => void; + canGoBack: () => boolean; + setWizardImage: (image: WizardInitialImage | null, returnPath?: string) => void; + clearWizardImage: () => void; + setCreationWizardOpen: (open: boolean, mode?: 'default' | 'page') => void; + preloadImage: (url: string) => void; + reset: () => void; +} +export declare const useNavigationStore: import('zustand').UseBoundStore<Omit<import('zustand').StoreApi<NavigationStore>, "setState" | "persist"> & { + setState(partial: NavigationStore | Partial<NavigationStore> | ((state: NavigationStore) => NavigationStore | Partial<NavigationStore>), replace?: false): unknown; + setState(state: NavigationStore | ((state: NavigationStore) => NavigationStore), replace: true): unknown; + persist: { + setOptions: (options: Partial<import('zustand/middleware').PersistOptions<NavigationStore, unknown, unknown>>) => void; + clearStorage: () => void; + rehydrate: () => Promise<void> | void; + hasHydrated: () => boolean; + onHydrate: (fn: (state: NavigationStore) => void) => () => void; + onFinishHydration: (fn: (state: NavigationStore) => void) => () => void; + getOptions: () => Partial<import('zustand/middleware').PersistOptions<NavigationStore, unknown, unknown>>; + }; +}>; +export declare const selectNavigationData: (state: NavigationStore) => NavigationData; +export declare const selectCurrentIndex: (state: NavigationStore) => number; +export declare const selectPosts: (state: NavigationStore) => NavigationPost[]; +export declare const selectCanGoBack: (state: NavigationStore) => boolean; +export declare const selectWizardImage: (state: NavigationStore) => WizardInitialImage; +export declare const selectWizardReturnPath: (state: NavigationStore) => string; +export declare const selectCreationWizardOpen: (state: NavigationStore) => boolean; +export declare const selectCreationWizardMode: (state: NavigationStore) => "page" | "default"; +export {}; diff --git a/packages/ui/dist-lib/style.css b/packages/ui/dist-lib/style.css new file mode 100644 index 00000000..21a8d2d9 --- /dev/null +++ b/packages/ui/dist-lib/style.css @@ -0,0 +1 @@ +:root{--prism-bg: #ffffff;--prism-text: black;--prism-comment: #708090;--prism-punctuation: #999;--prism-tag: #905;--prism-attr-value: #690;--prism-operator: #9a6e3a;--prism-keyword: #07a;--prism-function: #dd4a68;--prism-number: #905;--prism-class-name: #dd4a68;--prism-regex: #e90;--prism-variable: #e90;--prism-header: #999}html.dark{--prism-bg: #2d2d2d;--prism-text: #ccc;--prism-comment: #999;--prism-punctuation: #ccc;--prism-tag: #e2777a;--prism-attr-value: #7ec699;--prism-operator: #67cdcc;--prism-keyword: #cc99cd;--prism-function: #6196cc;--prism-number: #f08d49;--prism-class-name: #f8c555;--prism-regex: #7ec699;--prism-variable: #f8c555;--prism-header: #ccc}code[class*=language-],pre[class*=language-]{color:var(--prism-text);background:none;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em;background:var(--prism-bg)}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal;background:var(--prism-bg)}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:var(--prism-comment)}.token.punctuation{color:var(--prism-punctuation)}.token.namespace{opacity:.7}.token.property,.token.tag,.token.constant,.token.symbol,.token.deleted{color:var(--prism-tag)}.token.boolean,.token.number{color:var(--prism-number)}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{color:var(--prism-attr-value)}.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string{color:var(--prism-operator)}.token.atrule,.token.attr-value,.token.keyword{color:var(--prism-keyword)}.token.function,.token.class-name{color:var(--prism-function)}.token.regex,.token.important,.token.variable{color:var(--prism-regex)}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}html.dark .token.operator,html.dark .token.entity,html.dark .token.url{color:var(--prism-operator)}html.dark .token.string,html.dark .token.char,html.dark .token.attr-value{color:var(--prism-attr-value)}[data-media-player]{width:100%;display:inline-flex;align-items:center;position:relative;contain:style;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none}[data-media-player] *{box-sizing:border-box}:where([data-media-player][data-view-type=video]){aspect-ratio:16 / 9}[data-media-player]:focus,[data-media-player]:focus-visible{outline:none}[data-media-player][data-view-type=video][data-started]:not([data-controls]){pointer-events:auto;cursor:none}[data-media-player] slot{display:contents}[data-media-provider]{display:flex;position:relative;box-sizing:border-box;align-items:center;border-radius:inherit;width:100%;aspect-ratio:inherit;overflow:hidden}[data-media-player]:not([data-view-type=audio]) [data-media-provider],[data-media-player][data-fullscreen] [data-media-provider]{height:100%}[data-media-player][data-view-type=audio] [data-media-provider]{display:contents;background-color:unset}[data-media-provider] audio{width:100%}:where(video:not([width]):not([height]),iframe:not([width]):not([height])){width:100%;aspect-ratio:16 / 9}:where([data-media-provider] video),:where([data-media-provider] iframe){aspect-ratio:inherit;display:inline-block;height:auto;-o-object-fit:contain;object-fit:contain;touch-action:manipulation;border-radius:inherit;width:100%}[data-media-provider] iframe{height:100%}[data-media-player][data-view-type=audio] video,[data-media-player][data-view-type=audio] iframe{display:none}[data-media-player][data-fullscreen] video{height:100%}[data-media-provider] iframe:not([src]){display:none}iframe.vds-youtube[data-no-controls]{height:1000%}.vds-blocker{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:auto;aspect-ratio:inherit;pointer-events:auto;border-radius:inherit;z-index:1}[data-ended] .vds-blocker{background-color:#000}.vds-icon:focus{outline:none}.vds-google-cast{width:100%;height:100%;display:flex;align-items:center;justify-content:center;flex-direction:column;color:#dedede;font-family:sans-serif;font-weight:500}.vds-google-cast svg{--size: max(18%, 40px);width:var(--size);height:var(--size);margin-bottom:8px}.vds-google-cast-info{font-size:calc(var(--media-height) / 100 * 6)}:where(.vds-buffering-indicator){position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;pointer-events:none;z-index:1}:where(.vds-buffering-indicator) :where(.vds-buffering-icon,.vds-buffering-spinner){opacity:0;pointer-events:none;transition:var(--media-buffering-transition, opacity .2s ease)}:where(.vds-buffering-indicator) :where(.vds-buffering-icon,svg.vds-buffering-spinner,.vds-buffering-spinner svg){width:var(--media-buffering-size, 96px);height:var(--media-buffering-size, 96px)}:where(.vds-buffering-indicator) :where(.vds-buffering-track,circle[data-part=track]){color:var(--media-buffering-track-color, #f5f5f5);opacity:var(--media-buffering-track-opacity, .25);stroke-width:var(--media-buffering-track-width, 8)}:where(.vds-buffering-indicator) :where(.vds-buffering-track-fill,circle[data-part=track-fill]){color:var(--media-buffering-track-fill-color, var(--media-brand));opacity:var(--media-buffering-track-fill-opacity, .75);stroke-width:var(--media-buffering-track-fill-width, 9);stroke-dasharray:100;stroke-dashoffset:var(--media-buffering-track-fill-offset, 50)}:where([data-buffering]) :where(.vds-buffering-icon,.vds-buffering-spinner){opacity:1;animation:var(--media-buffering-animation, vds-buffering-spin 1s linear infinite)}@keyframes vds-buffering-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion){:where([data-buffering]) :where(.vds-buffering-icon,.vds-buffering-spinner){animation-duration:8s}}:where(.vds-button){position:relative;display:inline-flex;justify-content:center;align-items:center;-moz-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;outline:none;border:none;border-radius:var(--media-button-border-radius, 8px);width:var(--media-button-size, 40px);height:var(--media-button-size, 40px);transition:transform .2s ease-out;contain:layout style;cursor:pointer;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation;flex-shrink:0}.vds-button{border:var(--media-button-border);color:var(--media-button-color, var(--media-controls-color, #f5f5f5));padding:var(--media-button-padding, 0px)}:where([data-fullscreen] .vds-button){width:var(--media-fullscreen-button-size, 42px);height:var(--media-fullscreen-button-size, 42px)}@media screen and (max-width: 599px){:where([data-fullscreen] .vds-button){width:var(--media-sm-fullscreen-button-size, 42px);height:var(--media-sm-fullscreen-button-size, 42px)}}:where(.vds-button .vds-icon){width:var(--media-button-icon-size, 80%);height:var(--media-button-icon-size, 80%);border-radius:var(--media-button-border-radius, 8px)}:where(.vds-menu-button .vds-icon){display:flex!important}:where(.vds-button[aria-hidden=true]){display:none!important}@media (hover: hover) and (pointer: fine){.vds-button:hover{background-color:var(--media-button-hover-bg, rgb(255 255 255 / .2));transform:var(--media-button-hover-transform, scale(1.05));transition:var(--media-button-hover-transition, transform .2s ease-in)}.vds-button[aria-expanded=true]{transform:unset}}@media (pointer: coarse){.vds-button:hover{border-radius:var(--media-button-touch-hover-border-radius, 100%);background-color:var(--media-button-touch-hover-bg, rgb(255 255 255 / .2))}}:where(.vds-button:focus){outline:none}:where(.vds-button[data-focus],.vds-button:focus-visible){box-shadow:var(--media-focus-ring)}:where(.vds-live-button){min-width:auto;min-height:auto;width:var(--media-live-button-width, 40px);height:var(--media-live-button-height, 40px);padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;outline:none;border:none}:where(.vds-live-button-text){font-family:var(--media-font-family, sans-serif);font-size:var(--media-live-button-font-size, 12px);font-weight:var(--media-live-button-font-weight, 600);letter-spacing:var(--media-live-button-letter-spacing, 1.5px);transition:color .3s ease}.vds-live-button-text{background-color:var(--media-live-button-bg, #8a8a8a);border-radius:var(--media-live-button-border-radius, 2px);color:var(--media-live-button-color, #161616);padding:var(--media-live-button-padding, 1px 4px)}:where(.vds-live-button[data-focus] .vds-live-button-text){box-shadow:var(--media-focus-ring)}:where(.vds-live-button[data-edge]){cursor:unset}.vds-live-button[data-edge] .vds-live-button-text{background-color:var(--media-live-button-edge-bg, #dc2626);color:var(--media-live-button-edge-color, #f5f5f5)}@media (pointer: fine){:where(.vds-live-button:hover){background-color:unset}}.vds-button:not([data-paused]) .vds-play-icon,.vds-button[data-ended] .vds-play-icon,.vds-button[data-paused] .vds-pause-icon,.vds-button[data-ended] .vds-pause-icon,.vds-button:not([data-ended]) .vds-replay-icon,.vds-button[data-active] .vds-pip-enter-icon,.vds-button:not([data-active]) .vds-pip-exit-icon,.vds-button[data-active] .vds-fs-enter-icon,.vds-button:not([data-active]) .vds-fs-exit-icon,.vds-button:not([data-active]) .vds-cc-on-icon,.vds-button[data-active] .vds-cc-off-icon,.vds-button:not([data-muted]) .vds-mute-icon,.vds-button:not([data-state=low]) .vds-volume-low-icon,.vds-button:not([data-state=high]) .vds-volume-high-icon{display:none}:where(.vds-captions){--overlay-padding: var(--media-captions-padding, 1%);--cue-color: var(--media-user-text-color, var(--media-cue-color, white));--cue-bg-color: var(--media-user-text-bg, var(--media-cue-bg, rgba(0, 0, 0, .7)));--cue-default-font-size: var(--media-cue-font-size, calc(var(--overlay-height) / 100 * 4.5));--cue-font-size: calc(var(--cue-default-font-size) * var(--media-user-font-size, 1));--cue-line-height: var(--media-cue-line-height, calc(var(--cue-font-size) * 1.2));--cue-padding-x: var(--media-cue-padding-x, calc(var(--cue-font-size) * .6));--cue-padding-y: var(--media-cue-padding-x, calc(var(--cue-font-size) * .4));--cue-padding: var(--cue-padding-y) var(--cue-padding-x);position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;contain:layout style;margin:var(--overlay-padding);font-size:var(--cue-font-size);font-family:var(--media-user-font-family, sans-serif);box-sizing:border-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;word-spacing:normal;word-break:break-word}:where([data-fullscreen][data-orientation=portrait] .vds-captions){--cue-default-font-size: var(--media-cue-font-size, calc(var(--overlay-width) / 100 * 4.5))}:where([data-view-type=audio] .vds-captions){position:relative;margin:0}:where(.vds-captions[aria-hidden=true]){opacity:0;visibility:hidden}.vds-captions[data-example]{opacity:1!important;visibility:visible!important}:where([data-view-type=video] .vds-captions [data-part=cue-display][data-example]){--cue-text-align: center;--cue-width: 100%;--cue-top: 90%;--cue-left: 0%}:where([data-view-type=audio] .vds-captions [data-part=cue-display]){--cue-width: 100%;position:relative!important}:where(.vds-captions [data-part=cue-display]){position:absolute;direction:ltr;overflow:visible;contain:content;top:var(--cue-top);left:var(--cue-left);right:var(--cue-right);bottom:var(--cue-bottom);width:var(--cue-width, auto);height:var(--cue-height, auto);box-sizing:border-box;transform:var(--cue-transform);text-align:var(--cue-text-align);writing-mode:var(--cue-writing-mode, unset);white-space:pre-line;unicode-bidi:plaintext;min-width:-moz-min-content;min-width:min-content;min-height:-moz-min-content;min-height:min-content;background-color:var(--media-user-display-bg, var(--media-cue-display-bg));border-radius:var(--media-cue-display-border-radius)}.vds-captions [data-part=cue-display]{padding:var(--media-cue-display-padding)}:where(.vds-captions[data-dir=rtl] [data-part=cue-display]){direction:rtl}:where(.vds-captions [data-part=cue]){display:inline-block;contain:content;font-variant:var(--media-user-font-variant);border:var(--media-cue-border, unset);border-radius:var(--media-cue-border-radius, 2px);-webkit-backdrop-filter:var(--media-cue-backdrop, blur(8px));backdrop-filter:var(--media-cue-backdrop, blur(8px));line-height:var(--cue-line-height);box-sizing:border-box;box-shadow:var(--media-cue-box-shadow, var(--cue-box-shadow));white-space:var(--cue-white-space, pre-wrap);outline:var(--cue-outline);text-shadow:var(--media-user-text-shadow, var(--cue-text-shadow))}.vds-captions [data-part=cue]{background-color:var(--cue-bg-color);color:var(--cue-color);padding:var(--cue-padding)}:where(.vds-captions [data-part=cue-display][data-vertical] [data-part=cue]){--cue-padding: var(--cue-padding-x) var(--cue-padding-y)}:where(.vds-captions [data-part=region]){--anchor-x-percent: calc(var(--region-anchor-x) / 100);--anchor-x: calc(var(--region-width) * var(--anchor-x-percent));--anchor-y-percent: calc(var(--region-anchor-y) / 100);--anchor-y: calc(var(--region-height) * var(--anchor-y-percent));--vp-anchor-x: calc(var(--region-viewport-anchor-x) * 1%);--vp-anchor-y-percent: calc(var(--region-viewport-anchor-y) / 100);--vp-anchor-y: calc(var(--overlay-height) * var(--vp-anchor-y-percent));position:absolute;display:inline-flex;flex-flow:column;justify-content:flex-start;width:var(--region-width);height:var(--region-height);min-height:0px;max-height:var(--region-height);writing-mode:horizontal-tb;top:var(--region-top, calc(var(--vp-anchor-y) - var(--anchor-y)));left:var(--region-left, calc(var(--vp-anchor-x) - var(--anchor-x)));right:var(--region-right);bottom:var(--region-bottom);overflow:hidden;overflow-wrap:break-word;box-sizing:border-box}:where(.vds-captions [data-part=region][data-scroll=up]){justify-content:end}:where(.vds-captions [data-part=region][data-active][data-scroll=up]){transition:top .433s}:where(.vds-captions [data-part=region]>[data-part=cue-display]){position:relative;width:auto;left:var(--cue-offset);height:var(--cue-height, auto);text-align:var(--cue-text-align);unicode-bidi:plaintext;margin-top:2px}:where(.vds-captions [data-part=region] [data-part=cue]){position:relative;border-radius:0}:where(.vds-chapter-title){--color: var(--media-chapter-title-color, rgba(255 255 255 / .64));display:inline-block;font-family:var(--media-font-family, sans-serif);font-size:var(--media-chapter-title-font-size, 16px);font-weight:var(--media-chapter-title-font-weight, 400);color:var(--color);flex:1 1 0%;padding-inline:6px;overflow:hidden;text-align:start;white-space:nowrap;text-overflow:ellipsis}.vds-chapter-title:before{content:var(--media-chapter-title-separator, "•");display:inline-block;margin-right:var(--media-chapter-title-separator-gap, 6px);color:var(--media-chapter-title-separator-color, var(--color))}.vds-chapter-title:empty:before{content:"";margin:0}:where(.vds-controls),:where(.vds-controls-group){position:relative;display:inline-block;width:100%;box-sizing:border-box}:where([data-view-type=audio] .vds-controls){display:inline-block;max-width:100%}:where([data-view-type=video] .vds-controls){display:flex;position:absolute;flex-direction:column;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:10;opacity:0;visibility:hidden;pointer-events:none;padding:var(--media-controls-padding, 0px);transition:var(--media-controls-out-transition, opacity .2s ease-out)}:where([data-view-type=video] .vds-controls[data-visible]){opacity:1;visibility:visible;transition:var(--media-controls-in-transition, opacity .2s ease-in)}:where(.vds-controls-spacer){flex:1 1 0%;pointer-events:none}:where(.vds-gestures){display:contents}:where(.vds-gesture){position:absolute;display:block;contain:content;z-index:0;opacity:0;visibility:hidden;pointer-events:none!important}:where(.vds-icon svg){display:block;width:100%;height:100%;vertical-align:middle}:where(.vds-kb-action.hidden){opacity:0}:where(.vds-kb-text-wrapper){text-align:center;position:absolute;left:0;right:0;top:var(--media-kb-text-top, 10%);z-index:20;pointer-events:none}:where(.vds-kb-text){display:inline-block;font-size:var(--media-kb-text-size, 150%);font-family:var(--media-font-family, sans-serif);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);border-radius:var(--media-kb-border-radius, 2.5px);pointer-events:none}.vds-kb-text{color:var(--media-kb-text-color, var(--default-color));background-color:var(--media-kb-text-bg, var(--default-bg));padding:var(--media-kb-text-padding, 10px 20px)}.light .vds-kb-text{--default-color: #1a1a1a;--default-bg: rgb(240 240 240 / .6)}.dark .vds-kb-text{--default-color: #f5f5f5;--default-bg: rgb(10 10 10 / .6)}:where(.vds-kb-text:empty){display:none}:where(.vds-kb-bezel){--size: var(--media-kb-bezel-size, 52px);position:absolute;left:50%;top:45%;display:flex;flex-direction:column;align-items:center;justify-content:center;width:var(--size);height:var(--size);margin-left:calc(-1 * calc(var(--size) / 2));margin-right:calc(-1 * calc(var(--size) / 2));z-index:20;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background-color:var(--media-kb-bezel-bg, var(--default-bg));animation:var(--media-kb-bezel-animation, vds-bezel-fade .35s linear 1 normal forwards);border-radius:var(--media-kb-bezel-border-radius, calc(var(--size) / 2));pointer-events:none}.vds-kb-bezel:not(:has(svg)){display:none!important}.light .vds-kb-bezel{--default-bg: rgb(255 255 255 / .6)}.dark .vds-kb-bezel{--default-bg: rgb(10 10 10 / .6)}@media (prefers-reduced-motion){:where(.vds-kb-bezel){animation:none}}:where(.vds-kb-bezel:has(slot:empty)){opacity:0}:where(.vds-kb-action[data-action=seek-forward] .vds-kb-bezel){top:45%;left:unset;right:10%}:where(.vds-kb-action[data-action=seek-backward] .vds-kb-bezel){top:45%;left:10%}:where(.vds-kb-icon){--size: var(--media-kb-icon-size, 38px);width:var(--size);height:var(--size)}.vds-kb-icon{color:var(--media-kb-icon-color, var(--default-color))}.light .vds-kb-icon{--default-color: #1a1a1a}.dark .vds-kb-icon{--default-color: #f5f5f5}@keyframes vds-bezel-fade{0%{opacity:1}to{opacity:0;transform:scale(2)}}:where(.vds-menu-items){--color-inverse: var(--media-menu-color-inverse, var(--default-inverse));--color-gray-50: var(--media-menu-color-gray-50, var(--default-gray-50));--color-gray-100: var(--media-menu-color-gray-100, var(--default-gray-100));--color-gray-200: var(--media-menu-color-gray-200, var(--default-gray-200));--color-gray-300: var(--media-menu-color-gray-300, var(--default-gray-300));--color-gray-400: var(--media-menu-color-gray-400, var(--default-gray-400));--text-color: var(--media-menu-text-color, var(--default-text));--text-secondary-color: var(--media-menu-text-secondary-color, var(--default-text-secondary));--root-border: var(--media-menu-border, var(--default-root-border))}.light .vds-menu-items{--default-inverse: black;--default-gray-50: rgb(80 80 80 / .15);--default-gray-100: rgb(80 80 80 / .45);--default-gray-200: rgb(235 235 235 / .6);--default-gray-300: rgb(238 238 238);--default-gray-400: rgb(250 250 250);--default-text: #1a1a1a;--default-text-secondary: #6b6b6b;--default-root-border: 1px solid rgb(10 10 10 / .1)}.dark .vds-menu-items{--default-inverse: white;--default-gray-50: rgb(245 245 245 / .1);--default-gray-100: rgb(245 245 245 / .45);--default-gray-200: rgb(10 10 10 / .6);--default-gray-300: rgb(27 27 27);--default-gray-400: rgb(10 10 10);--default-text: #f5f5f5;--default-text-secondary: #8a8a8a;--default-root-border: 1px solid rgb(255 255 255 / .1)}:where(.vds-menu-items){--font-family: var(--media-font-family, sans-serif);--font-size: var(--media-menu-font-size, 14px);--font-weight: var(--media-menu-font-weight, 500);--root-bg: var(--media-menu-bg, var(--color-gray-400));--root-padding: var(--media-menu-padding, 12px);--root-border-radius: var(--media-menu-border-radius, 4px);--divider: var(--media-menu-divider, 1px solid var(--color-gray-50));--section-bg: var(--media-menu-section-bg, var(--color-gray-300));--section-border: var(--media-menu-section-border);--section-divider: var(--media-menu-section-divider, var(--divider));--top-bar-bg: var(--media-menu-top-bar-bg, var(--color-gray-200));--top-bar-divider: var(--media-menu-divider, transparent);--text-hint-color: var(--media-menu-hint-color, var(--text-secondary-color));--chapter-divider: var(--media-chapters-divider, var(--divider));--chapter-active-bg: var(--media-chapters-item-active-bg, var(--color-gray-50));--chapter-active-border-left: var(--media-chapters-item-active-border-left);--chapter-progress-bg: var(--media-chapters-progress-bg, var(--color-inverse));--chapter-time-font-size: var(--media-chapters-time-font-size, 12px);--chapter-time-font-weight: var(--media-chapters-time-font-weight, 500);--chapter-time-gap: var(--media-chapters-time-gap, 6px);--chapter-duration-bg: var(--media-chapters-duration-bg);--item-border: var(--media-menu-item-border, 0);--item-bg: var(--media-menu-item-bg, transparent);--item-hover-bg: var(--media-menu-item-hover-bg, var(--color-gray-50));--item-icon-size: var(--media-menu-item-icon-size, 18px);--item-padding: var(--media-menu-item-padding, 10px);--item-min-height: var(--media-menu-item-height, 40px);--item-border-radius: var(--media-menu-item-border-radius, 2px);--scrollbar-track-bg: var(--media-menu-scrollbar-track-bg, transparent);--scrollbar-thumb-bg: var(--media-menu-scrollbar-thumb-bg, var(--color-gray-50));--webkit-scrollbar-bg: var(--color-gray-400);--webkit-scrollbar-track-bg: var(--media-menu-scrollbar-track-bg, var(--color-gray-50));--checkbox-bg: var(--media-menu-checkbox-bg, var(--color-gray-100));--checkbox-active-bg: var(--media-menu-checkbox-bg-active, #1ba13f);--checkbox-handle-bg: var(--media-menu-checkbox-handle-bg, #f5f5f5);--checkbox-handle-border: var(--media-menu-checkbox-handle-border);--radio-icon-color: var(--media-menu-radio-icon-color, var(--text-color))}:where(.vds-menu[data-root] media-menu[data-root]){display:contents}:where(.vds-menu){font-family:var(--font-family);font-size:var(--font-size);font-weight:var(--font-weight)}:where(.vds-menu[data-disabled][data-root]){display:none}:where(.vds-menu[data-submenu]){display:inline-block}:where(.vds-menu-items:focus){outline:none}:where(.vds-menu-item:focus,.vds-radio:focus){outline:none}:where(.vds-menu-item:focus-visible,.vds-menu-item[data-focus],.vds-radio:focus-visible,.vds-radio[data-focus]){outline:none;box-shadow:var(--media-focus-ring)}:where(.vds-menu[data-open] .vds-tooltip-content){display:none!important}.vds-menu-items [data-hidden]{display:none!important}@media (prefers-reduced-motion: no-preference){:where(.vds-menu-items){scroll-behavior:smooth}}:where(.vds-menu-items){box-sizing:border-box;min-width:var(--media-menu-min-width, 280px);scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb-bg) var(--scrollbar-track-bg);transform:translateZ(0)}:where(.vds-menu-items)::-webkit-scrollbar{background-color:var(--webkit-scrollbar-bg);border-radius:var(--root-border-radius);height:6px;width:5px}:where(.vds-menu-items)::-webkit-scrollbar-track{background-color:var(--webkit-scrollbar-track-bg);border-radius:4px}:where(.vds-menu-items)::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-bg);border-radius:4px}:where(.vds-menu-items)::-webkit-scrollbar-corner{background-color:var(--scrollbar-thumb-bg)}:where(.vds-menu-button){outline:none;box-sizing:border-box}:where(.vds-menu-button .vds-rotate-icon){transition:transform .2s ease-out}:where(.vds-menu-button[aria-expanded=true] .vds-rotate-icon){transform:rotate(var(--media-menu-icon-rotate-deg, 90deg));transition:transform .2s ease-in}:where(.vds-menu-button){display:inline-flex;align-items:center;justify-content:center}@media (prefers-reduced-motion){:where(.vds-menu-button .vds-rotate-icon){transition:unset}}:where(.vds-menu-items){display:flex;align-items:center;flex-direction:column;font-family:var(--font-family);font-size:var(--font-size);font-weight:var(--font-weight);transition:height .35s ease}@media (prefers-reduced-motion){:where(.vds-menu-items){transition:unset}}:where(.vds-menu-items[data-root]){background-color:var(--root-bg);border-radius:var(--root-border-radius);box-shadow:var(--media-menu-box-shadow);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);height:var(--menu-height, auto);will-change:width,height;overflow-y:auto;overscroll-behavior:contain;opacity:0;z-index:9999999;box-sizing:border-box;max-height:var(--media-menu-max-height, 250px);filter:var( --media-menu-filter, drop-shadow(0 4px 3px rgb(0 0 0 / .07)) drop-shadow(0 2px 2px rgb(0 0 0 / .06)) )}.vds-menu-items[data-root]{border:var(--root-border);padding:var(--root-padding)}:where([data-view-type=video]) :where(.vds-menu-items[data-root]){max-height:var(--media-menu-video-max-height, calc(var(--player-height) * .7))}:where(.vds-menu-items[data-transition=height]){--scrollbar-thumb-bg: rgba(0, 0, 0, 0);pointer-events:none;overflow:hidden}.vds-menu-button[aria-disabled=true],.vds-menu-item[aria-disabled=true],.vds-menu-item[data-disabled]{display:none}:where(.vds-menu-items[data-root]){--enter-transform: translateY(0px);--exit-transform: translateY(12px)}:where(.vds-menu-items[data-root]:not([data-placement])){--enter-transform: translateY(-24px)}:where(.vds-menu-items[data-root][aria-hidden=true]){animation:var(--media-menu-exit-animation, vds-menu-exit .2s ease-out)}:where(.vds-menu-items[data-root][aria-hidden=false]){animation:var(--media-menu-enter-animation, vds-menu-enter .3s ease-out);animation-fill-mode:forwards}:where(.vds-menu-items[data-placement~=bottom]){--enter-transform: translateY(0);--exit-transform: translateY(-12px)}@keyframes vds-menu-enter{0%{opacity:0;transform:var(--exit-transform)}to{opacity:1;transform:var(--enter-transform)}}@keyframes vds-menu-exit{0%{opacity:1;transform:var(--enter-transform)}to{opacity:0;transform:var(--exit-transform)}}@media (prefers-reduced-motion){:where(.vds-menu-items){animation:none;opacity:1}}:where(media-menu-portal){display:contents}:where(.vds-menu-items[data-root]:not([data-placement])){position:fixed;left:16px;right:16px;top:unset;bottom:0;max-height:var(--media-sm-menu-portrait-max-height, 40vh);max-height:var(--media-sm-menu-portrait-max-height, 40dvh);max-width:480px;margin:0 auto}@media (orientation: landscape) and (pointer: coarse){:where(.vds-menu-items[data-root]:not([data-placement])){max-height:var(--media-sm-menu-landscape-max-height, min(70vh, 400px));max-height:var(--media-sm-menu-landscape-max-height, min(70dvh, 400px))}}:where(.vds-menu[data-submenu] .vds-menu-button){display:flex;align-items:center;justify-content:flex-start}:where(.vds-menu-items[data-submenu]){width:100%}:where(.vds-menu[aria-hidden=true]),:where(.vds-menu-items[data-submenu][aria-hidden=true]){display:none}:where(.vds-menu-item,.vds-radio){position:relative;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-moz-user-select:none;user-select:none;display:flex;align-items:center;justify-content:left;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;border-radius:var(--item-border-radius);box-sizing:border-box;min-height:var(--item-min-height);font-size:var(--font-size);outline:none}.vds-menu-item,.vds-radio{color:var(--text-color);background-color:var(--item-bg);padding:var(--item-padding)}.vds-menu-item:focus-visible,.vds-menu-item[data-focus],.vds-radio:focus-visible,.vds-radio[data-focus]{cursor:pointer;background-color:var(--item-hover-bg)}@media (hover: hover) and (pointer: fine){.vds-menu-item[role]:hover,.vds-radio:hover{cursor:pointer;background-color:var(--item-hover-bg)}}:where(.vds-menu-items[data-submenu]){align-items:flex-start;justify-content:center;flex-direction:column}:where(.vds-menu-item[aria-expanded=true]){font-weight:700;border-radius:0;border-top-left-radius:var(--item-border-radius);border-top-right-radius:var(--item-border-radius)}.vds-menu-item[aria-expanded=true]{border-bottom:var(--top-bar-divider)}:where(.vds-menu-item[aria-expanded=true]){position:sticky;top:calc(-1 * var(--root-padding));left:0;width:100%;z-index:10;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);margin-bottom:4px}.vds-menu-item[aria-expanded=true]{background-color:var(--top-bar-bg)}:where(.vds-menu-item-label){flex:1 0 0%;text-align:start}:where(.vds-menu-item .vds-icon,.vds-radio .vds-icon){--size: var(--item-icon-size);width:var(--size);height:var(--size);margin-right:var(--media-menu-item-icon-spacing, 6px)}:where(.vds-menu-open-icon,.vds-menu-close-icon){--size: var(--media-menu-arrow-icon-size, 18px);width:var(--size);height:var(--size)}:where(.vds-menu-item-hint,.vds-menu-open-icon,.vds-radio-hint){color:var(--text-hint-color);font-size:var(--media-menu-hint-font-size, 13px);font-weight:var(--media-menu-hint-font-weight, 400)}:where(.vds-menu-items .vds-menu-open-icon){margin-right:0}:where(.vds-menu-items) :where(.vds-menu-item-hint,.vds-menu-open-icon){margin-left:auto}:where(.vds-menu-items) :where(.vds-menu-item-hint+.vds-menu-open-icon),:where(.vds-menu-item-hint+media-icon .vds-menu-open-icon),:where(.vds-menu-item-hint+slot>.vds-menu-open-icon){margin-left:2px}:where(.vds-menu-item[aria-hidden=true]),:where(.vds-menu-item[aria-expanded=true] .vds-menu-open-icon){display:none!important}:where(.vds-menu-items) :where(.vds-menu-item[aria-disabled=true],.vds-menu-item[data-disabled]) :where(.vds-menu-open-icon){opacity:0}:where(.vds-menu-close-icon),:where(.vds-menu-item[aria-expanded=true]>.vds-icon){display:none!important}:where(.vds-menu-item[aria-expanded=true] .vds-menu-close-icon){display:inline!important;margin-left:calc(-1 * var(--item-padding) / 2)}:where(.vds-menu-checkbox){--checkbox-width: var(--media-menu-checkbox-width, 40px);--checkbox-height: var(--media-menu-checkbox-height, 18px);--checkbox-top: calc((var(--checkbox-height) - var(--checkbox-diameter)) / 2);--checkbox-diameter: var( --media-menu-checkbox-handle-diameter, calc(var(--checkbox-height) - 2px) );--checkbox-gap: var(--media-menu-checkbox-gap, 2.5px);position:relative;display:inline-block;width:var(--checkbox-width);height:var(--checkbox-height);border-radius:calc(var(--checkbox-height) / 2);transition:.3s all ease-in-out;box-sizing:border-box;cursor:pointer;pointer-events:auto}.vds-menu-checkbox{background-color:var(--checkbox-bg)}:where(.vds-menu-checkbox:focus-visible){outline:none;box-shadow:var(--media-focus-ring)}.vds-menu-checkbox[aria-checked=true]{background-color:var(--checkbox-active-bg)}:where(.vds-menu-checkbox):after{content:"";display:inline-block;width:var(--checkbox-diameter);height:var(--checkbox-diameter);border-radius:calc(var(--checkbox-diameter) / 2);position:absolute;top:var(--checkbox-top);transform:translate(var(--checkbox-gap));transition:.3s all ease-in-out;border:var(--checkbox-handle-border);box-sizing:border-box}.vds-menu-checkbox:after{background-color:var(--checkbox-handle-bg)}:where(.vds-menu-checkbox[aria-checked=true]):after{transform:translate(calc(var(--checkbox-width) - var(--checkbox-diameter) - var(--checkbox-gap)))}@media (prefers-reduced-motion: no-preference){:where(.vds-menu-checkbox[data-active]):after{width:calc(var(--checkbox-width) - calc(var(--checkbox-gap) * 2))}}:where(.vds-menu-checkbox[aria-checked=true][data-active]):after{transform:translate(var(--checkbox-gap))}:where(.vds-menu-items .vds-slider){--media-slider-track-bg: var(--media-menu-slider-track-bg, var(--color-gray-50));--media-slider-track-fill-bg: var(--media-menu-slider-track-fill-bg, var(--color-inverse));--media-slider-height: var(--media-menu-slider-height, 32px);--track-focus-height: var(--track-height) !important}:where(.vds-menu-items .vds-slider-thumb){opacity:1!important}:where(.vds-menu-slider-item.group){flex-direction:column}:where(.vds-menu-slider-title){margin-top:4px}:where(.vds-menu-slider-body){width:100%;display:flex;align-items:center;margin-top:6px}:where(.vds-menu-slider-item .vds-icon){margin:0;color:var(--text-hint-color)}:where(.vds-menu-slider-item[data-min] .vds-icon.down,.vds-menu-slider-item[data-max] .vds-icon.up){color:var(--text-color);animation:.6s ease-in-out vds-slider-icon;transition:all 1.2s ease}@keyframes vds-slider-icon{0%{transform:scale(1)}50%{transform:scale(1.25)}to{transform:scale(1)}}:where(.vds-menu-items .vds-slider-track-fill){transition:opacity .3s ease}:where(.vds-menu-items .vds-slider[data-active] .vds-slider-track-fill){opacity:0}:where(.vds-radio-group){box-sizing:border-box;width:100%;display:flex;flex-direction:column}.vds-radio{cursor:pointer;contain:content;padding-left:calc(var(--item-icon-size) + var(--item-padding))}.vds-radio[aria-checked=true]{padding-left:0}.vds-radio .vds-icon{display:none;color:var(--radio-icon-color)}.vds-radio[aria-checked=true] .vds-icon{display:inline-block;margin-left:6px}:where(.vds-radio-hint){margin-left:auto}.vds-color-picker{width:32px;height:32px;border:0;background-color:transparent;outline:none}.vds-color-picker::-webkit-color-swatch{border-radius:2px}.vds-color-picker::-moz-color-swatch{border-radius:2px}.vds-color-picker:focus-visible::-webkit-color-swatch{box-shadow:var(--media-focus-ring)}.vds-color-picker:focus-visible::-moz-color-swatch{box-shadow:var(--media-focus-ring)}:where(.vds-menu-section){width:100%}:where(.vds-menu-item+.vds-menu-section){margin-top:8px}:where(.vds-menu-section+.vds-menu-section){margin-top:24px}:where(.vds-menu-section:first-child){margin-top:8px}:where(.vds-menu-section:last-child){margin-bottom:8px}:where(.vds-menu-section-title),:where(.vds-menu-slider-title){width:100%;display:flex;align-items:center;justify-content:space-between;color:var(--text-secondary-color);font-size:var(--media-menu-section-header-font-size, 12px);font-weight:var(--media-menu-section-header-font-weight, 500);padding-inline:2px}:where(.vds-menu-section-body){width:100%}:where(.vds-menu-section-title+.vds-menu-section-body){margin-top:var(--media-menu-section-gap, 8px)}.vds-menu-section-body{background-color:var(--section-bg);border:var(--section-border);border-radius:var(--media-menu-section-border-radius, 2px)}:where(.vds-menu-section:not([data-open]) .vds-menu-item:not(:last-child)){border-bottom:var(--section-divider)}:where(.vds-menu-section-body .vds-menu:last-child>.vds-menu-item){border-bottom:unset}.vds-menu-section[data-open],.vds-menu-section[data-open]>.vds-menu-section-body{display:contents!important;background-color:transparent!important}.vds-menu-section[data-open]>.vds-menu-section-title,.vds-menu-section[data-open]>.vds-menu-section-body>:not([data-open]){display:none}:where(.vds-chapters-menu-items){min-width:var(--media-chapters-min-width, var(--media-menu-min-width, 220px))}.vds-chapters-menu-items{padding:var(--media-chapters-padding, 0)}:where(.vds-menu-items:has(.vds-chapters-radio-group[data-thumbnails])){min-width:var(--media-chapters-with-thumbnails-min-width, 300px)}:where(.vds-chapter-radio){border-radius:0}.vds-chapter-radio{border-bottom:var(--chapter-divider);padding:var(--item-padding)}.vds-chapter-radio[aria-checked=true]{padding-left:var(--item-padding)}:where(.vds-chapter-radio:last-child){border-bottom:0}.vds-chapter-radio[aria-checked=true]{background-color:var(--chapter-active-bg);border-left:var(--chapter-active-border-left)}:where(.vds-chapter-radio[aria-checked=true]):after{content:" ";width:var(--progress);height:var(--media-chapters-progress-height, 4px);position:absolute;bottom:0;left:0}.vds-chapter-radio[aria-checked=true]:after{border-radius:var(--media-chapters-progress-border-radius, 0);background-color:var(--chapter-progress-bg)}.vds-chapters-radio-group :where(.vds-thumbnail){margin-right:var(--media-chapters-thumbnail-gap, 12px);flex-shrink:0;min-width:var(--media-chapters-thumbnail-min-width, 100px);min-height:var(--media-chapters-thumbnail-min-height, 56px);max-width:var(--media-chapters-thumbnail-max-width, 120px);max-height:var(--media-chapters-thumbnail-max-height, 68px)}.vds-chapters-radio-group .vds-thumbnail{border:var(--media-chapters-thumbnail-border, 0)}:where(.vds-chapters-radio-group .vds-chapter-radio-label){color:var(--text-secondary-color);font-size:var(--font-size);font-weight:var(--font-weight);white-space:nowrap}:where(.vds-chapter-radio[aria-checked=true] .vds-chapter-radio-label){color:var(--text-color)}:where(.vds-chapters-radio-group .vds-chapter-radio-start-time){display:inline-block;letter-spacing:var(--media-chapters-start-time-letter-spacing, .4px);border-radius:var(--media-chapters-start-time-border-radius, 2px);font-size:var(--chapter-time-font-size);font-weight:var(--chapter-time-font-weight);margin-top:var(--chapter-time-gap)}.vds-chapters-radio-group .vds-chapter-radio-start-time{color:var(--text-secondary-color);background-color:var(--section-bg);padding:var(--media-chapters-start-time-padding, 1px 4px)}:where(.vds-chapters-radio-group .vds-chapter-radio-duration){color:var(--text-hint-color);font-size:var(--chapter-time-font-size);font-weight:var(--chapter-time-font-weight);margin-top:var(--chapter-time-gap)}.vds-chapters-radio-group .vds-chapter-radio-duration{background-color:var(--chapter-duration-bg);border-radius:var(--media-chapters-duration-border-radius, 2px)}.vds-chapters-radio-group:not([data-thumbnails]) :where(.vds-thumbnail,media-thumbnail){display:none}:where(.vds-chapter-radio-content){display:flex;align-items:flex-start;flex-direction:column}:where(.vds-chapters-radio-group:not([data-thumbnails]) .vds-chapter-radio-content){width:100%;flex-direction:row;display:flex;flex-wrap:wrap;align-items:center}:where(.vds-chapters-radio-group:not([data-thumbnails]) .vds-chapter-radio-start-time){margin-top:0;margin-left:auto}:where(.vds-chapters-radio-group:not([data-thumbnails]) .vds-chapter-radio-duration){margin-top:4px;flex-basis:100%}.vds-menu-items[data-keyboard] .vds-chapters-radio-group:focus-within{padding:var(--media-chapters-focus-padding, 4px)}:where(.vds-poster){display:block;contain:content;position:absolute;top:50%;transform:translateY(-50%);left:0;opacity:0;width:100%;height:100%;z-index:1;border:0;pointer-events:none;box-sizing:border-box;transition:opacity .2s ease-out;background-color:var(--media-poster-bg, black)}:where(.vds-poster img){-o-object-fit:inherit;object-fit:inherit;-o-object-position:inherit;object-position:inherit;pointer-events:none;-moz-user-select:none;user-select:none;-webkit-user-select:none;box-sizing:border-box}.vds-poster :where(img){border:0;width:100%;height:100%;-o-object-fit:contain;object-fit:contain}:where(.vds-poster[data-hidden]){display:none}:where(.vds-poster[data-visible]){opacity:1}.vds-poster:not(:defined),.vds-poster img:not([src]){display:none}:where(.vds-slider){--width: var(--media-slider-width, 100%);--height: var(--media-slider-height, 48px);--thumb-size: var(--media-slider-thumb-size, 15px);--thumb-focus-size: var(--media-slider-focused-thumb-size, calc(var(--thumb-size) * 1.1));--track-width: var(--media-slider-track-width, 100%);--track-height: var(--media-slider-track-height, 5px);--track-focus-width: var(--media-slider-focused-track-width, var(--track-width));--track-focus-height: var(--media-slider-focused-track-height, calc(var(--track-height) * 1.25));display:inline-flex;align-items:center;width:var(--width);height:var(--height);margin:0 calc(var(--thumb-size) / 2);position:relative;contain:layout style;outline:none;pointer-events:auto;cursor:pointer;-moz-user-select:none;user-select:none;touch-action:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent}:where(.vds-slider[aria-hidden=true]){display:none!important}:where(.vds-slider[aria-disabled=true]){cursor:unset}:where(.vds-slider:focus){outline:none}:where(.vds-slider:not([data-chapters])[data-focus],.vds-slider:not([data-chapters]):focus-visible) :where(.vds-slider-track){box-shadow:var(--media-focus-ring)}:where(.vds-slider .vds-slider-track){z-index:0;position:absolute;width:var(--track-width);height:var(--track-height);top:50%;left:0;border-radius:var(--media-slider-track-border-radius, 2px);transform:translateY(-50%) translateZ(0);background-color:var(--media-slider-track-bg, rgb(255 255 255 / .3));contain:strict}:where(.vds-slider[data-focus],.vds-slider:focus-visible) :where(.vds-slider-track){outline-offset:var(--thumb-size)}:where(.vds-slider:not([data-chapters])[data-active] .vds-slider-track){width:var(--track-focus-width);height:var(--track-focus-height)}:where(.vds-slider .vds-slider-track-fill){z-index:2;background-color:var(--media-slider-track-fill-bg, var(--media-brand));width:var(--slider-fill, 0%);will-change:width}:where(.vds-slider .vds-slider-thumb){position:absolute;top:50%;left:var(--slider-fill);opacity:0;contain:layout size style;width:var(--thumb-size);height:var(--thumb-size);border:var(--media-slider-thumb-border, 1px solid #cacaca);border-radius:var(--media-slider-thumb-border-radius, 9999px);background-color:var(--media-slider-thumb-bg, #fff);transform:translate(-50%,-50%) translateZ(0);transition:opacity .15s ease-in;pointer-events:none;will-change:left;z-index:2}:where(.vds-slider[data-dragging],.vds-slider[data-focus],.vds-slider:focus-visible) :where(.vds-slider-thumb){box-shadow:var(--media-slider-focused-thumb-shadow, 0 0 0 4px hsla(0, 0%, 100%, .4))}:where(.vds-slider[data-active] .vds-slider-thumb){opacity:1;transition:var(--media-slider-thumb-transition, opacity .2s ease-in, box-shadow .2s ease)}:where(.vds-slider[data-dragging] .vds-slider-thumb){width:var(--thumb-focus-size);height:var(--thumb-focus-size)}:where(.vds-slider-value){display:inline-block;contain:content;font-size:14px;font-family:var(--media-font-family, sans-serif)}:where(.vds-slider-thumbnail){display:block;contain:content;box-sizing:border-box}:where(.vds-slider-video){background-color:#000;box-sizing:border-box;contain:content;display:inline-block;border:var(--media-thumbnail-border, 1px solid white)}:where(.vds-slider-video video){display:block;height:auto;width:156px}:where(.vds-slider-video[data-loading]){opacity:0}:where(.vds-slider-video[data-hidden],.vds-slider-video[data-hidden] video){display:none;width:0px}:where(.vds-slider .vds-slider-preview){display:flex;flex-direction:column;align-items:center;opacity:0;background-color:var(--media-slider-preview-bg);border-radius:var(--media-slider-preview-border-radius, 2px);pointer-events:none;transition:opacity .2s ease-out;will-change:left,opacity;contain:layout paint style}:where(.vds-slider-preview[data-visible]){opacity:1;transition:opacity .2s ease-in}.vds-slider-value{background-color:var(--media-slider-value-bg, black);border-radius:var(--media-slider-value-border-radius, 2px);border:var(--media-slider-value-border);color:var(--media-slider-value-color, white);padding:var(--media-slider-value-padding, 1px 10px)}:where(.vds-slider-video:not([data-hidden])+.vds-slider-chapter-title,.vds-slider-thumbnail:not([data-hidden])+.vds-slider-chapter-title){margin-top:var(--media-slider-chapter-title-gap, 6px)}:where(.vds-slider-video:not([data-hidden])+.vds-slider-value,.vds-slider-thumbnail:not([data-hidden])+.vds-slider-value,.vds-slider-chapter-title+.vds-slider-value){margin-top:var(--media-slider-value-gap, 2px)}:where(.vds-slider[aria-orientation=vertical]){--width: var(--media-slider-width, 48px);--height: var(--media-slider-height, 100%);--track-width: var(--media-slider-track-width, 4px);--track-height: var(--media-slider-track-height, 100%);--track-focus-width: var(--media-slider-focused-track-width, calc(var(--track-width) * 1.25));--track-focus-height: var(--media-slider-focused-track-height, var(--track-height));margin:calc(var(--thumb-size) / 2) 0}:where(.vds-slider[aria-orientation=vertical] .vds-slider-track){top:unset;bottom:0;left:50%;transform:translate(-50%) translateZ(0)}:where(.vds-slider[aria-orientation=vertical] .vds-slider-track-fill){width:var(--track-width);height:var(--slider-fill);will-change:height;transform:translate(-50%) translateZ(0)}:where(.vds-slider[aria-orientation=vertical] .vds-slider-progress){top:unset;bottom:0;width:var(--track-width);height:var(--slider-progress, 0%);will-change:height}:where(.vds-slider[aria-orientation=vertical] .vds-slider-thumb){top:unset;bottom:var(--slider-fill);left:50%;will-change:bottom;transform:translate(-50%,50%) translateZ(0)}:where(.vds-slider[aria-orientation=vertical] .vds-slider-preview){will-change:bottom,opacity}:where([data-live] .vds-time-slider .vds-slider-track-fill){background-color:var(--media-slider-track-fill-live-bg, #dc2626)}:where(.vds-time-slider .vds-slider-progress){z-index:1;left:0;width:var(--slider-progress, 0%);will-change:width;background-color:var(--media-slider-track-progress-bg, rgb(255 255 255 / .5))}:where([data-media-player]:not([data-can-play]) .vds-time-slider .vds-slider-value){display:none}:where(.vds-slider-steps){display:flex;align-items:center;justify-content:space-between;width:100%;height:100%;position:absolute;top:0;left:0}:where(.vds-slider-step){width:var(--media-slider-step-width, 2.5px);height:calc(var(--track-height) + 1px);background-color:var(--media-slider-step-color, rgb(124, 124, 124));opacity:0;transition:opacity .3s ease}:where(.vds-slider[data-active] .vds-slider-step){opacity:1}:where(.vds-time-slider .vds-slider-chapters){position:relative;display:flex;align-items:center;width:100%;height:100%;contain:layout style;border-radius:var(--media-slider-track-border-radius, 1px)}:where(.vds-slider[data-focus],.vds-slider:focus-visible) :where(.vds-slider-chapters){box-shadow:var(--media-focus-ring);height:var(--track-height)}:where(.vds-time-slider .vds-slider-chapter){margin-right:2px}:where(.vds-time-slider .vds-slider-chapter:last-child){margin-right:0}:where(.vds-time-slider .vds-slider-chapter){position:relative;display:flex;align-items:center;width:100%;height:100%;will-change:height,transform;contain:layout style;border-radius:var(--media-slider-track-border-radius, 1px)}:where(.vds-time-slider .vds-slider-chapter .vds-slider-track-fill){width:var(--chapter-fill, 0%);will-change:width}:where(.vds-time-slider .vds-slider-chapter .vds-slider-progress){width:var(--chapter-progress, 0%);will-change:width}@media (hover: hover) and (pointer: fine){:where(.vds-time-slider:hover .vds-slider-chapters){contain:strict}:where(.vds-time-slider .vds-slider-chapter:hover:not(:only-of-type)){transform:var(--media-slider-chapter-hover-transform, scaleY(2));transition:var( --media-slider-chapter-hover-transition, transform .1s cubic-bezier(.4, 0, 1, 1) )}}:where(.vds-time-slider .vds-slider-chapter-title){font-family:var(--media-font-family, sans-serif);font-size:var(--media-slider-chapter-title-font-size, 14px);color:var(--media-slider-chapter-title-color, #f5f5f5);background-color:var(--media-slider-chapter-title-bg)}:where(.vds-thumbnail){--min-width: var(--media-thumbnail-min-width, 140px);--max-width: var(--media-thumbnail-max-width, 180px);--aspect-ratio: var(--media-thumbnail-aspect-ratio, var(--thumbnail-aspect-ratio));display:block;width:var(--thumbnail-width);height:var(--thumbnail-height);background-color:var(--media-thumbnail-bg, black);contain:strict;overflow:hidden;box-sizing:border-box;min-width:var(--min-width);min-height:var(--media-thumbnail-min-height, calc(var(--min-width) / var(--aspect-ratio)));max-width:var(--max-width);max-height:var(--media-thumbnail-max-height, calc(var(--max-width) / var(--aspect-ratio)))}.vds-thumbnail{border:var(--media-thumbnail-border, 1px solid white)}:where(.vds-thumbnail img){min-width:unset!important;max-width:unset!important;will-change:width,height,transform}:where(.vds-thumbnail[data-loading] img){opacity:0}:where(.vds-thumbnail[aria-hidden=true]){display:none!important}:where(.vds-time-group){display:flex;align-items:center}.vds-time-divider{margin:0 var(--media-time-divider-gap, 2.5px);color:var(--media-time-divider-color, #e0e0e0)}:where(.vds-time){display:inline-block;contain:content;font-size:var(--media-time-font-size, 15px);font-weight:var(--media-time-font-weight, 400);font-family:var(--media-font-family, sans-serif);border-radius:var(--media-time-border-radius, 2px);letter-spacing:var(--media-time-letter-spacing, .025em)}.vds-time{outline:0;color:var(--media-time-color, var(--default-color));background-color:var(--media-time-bg);border:var(--media-time-border);padding:var(--media-time-padding, 2px)}:where(.vds-time:focus-visible){box-shadow:var(--media-focus-ring)}.light .vds-time{--default-color: rgb(10 10 10)}.dark .vds-time{--default-color: #f5f5f5}:where(.vds-tooltip,media-tooltip){display:contents}:where(.vds-tooltip-content){display:inline-block;box-sizing:border-box;font-family:var(--media-font-family, sans-serif);font-size:var(--media-tooltip-font-size, 13px);font-weight:var(--media-tooltip-font-weight, 500);opacity:0;pointer-events:none;white-space:nowrap;z-index:10;will-change:transform,opacity}.vds-tooltip-content{border-radius:var(--media-tooltip-border-radius, 2px);background-color:var(--media-tooltip-bg-color, var(--default-bg));border:var(--media-tooltip-border, var(--default-border));color:var(--media-tooltip-color, var(--default-color));padding:var(--media-tooltip-padding, 2px 8px)}.light .vds-tooltip-content{--default-color: #1a1a1a;--default-bg: white;--default-border: 1px solid rgb(0 0 0 / .2)}.dark .vds-tooltip-content{--default-color: #f5f5f5;--default-bg: black;--default-border: 1px solid rgb(255 255 255 / .1)}:where(.vds-menu .vds-menu-button[role=button][data-pressed] .vds-tooltip-content){opacity:0;display:none}:where(.vds-tooltip-content){--enter-transform: translateY(0px) scale(1);--exit-transform: translateY(12px) scale(.8)}:where(.vds-tooltip-content:not([data-visible])){animation:var(--media-tooltip-exit-animation, vds-tooltip-exit .2s ease-out)}:where(.vds-tooltip-content[data-visible]){animation:var(--media-tooltip-enter-animation, vds-tooltip-enter .2s ease-in);animation-fill-mode:forwards}:where(.vds-tooltip-content[data-placement~=bottom]){--enter-transform: translateY(0) scale(1);--exit-transform: translateY(-12px) scale(.8)}:where(.vds-tooltip-content[data-placement~=left]){--enter-transform: translateX(0) scale(1);--exit-transform: translateX(12px) scale(.8)}:where(.vds-tooltip-content[data-placement~=right]){--enter-transform: translateX(0) scale(1);--exit-transform: translateX(-12px) scale(.8)}@keyframes vds-tooltip-enter{0%{opacity:0;transform:var(--exit-transform)}to{opacity:1;transform:var(--enter-transform)}}@keyframes vds-tooltip-exit{0%{opacity:1;transform:var(--enter-transform)}to{opacity:0;transform:var(--exit-transform)}}@media (prefers-reduced-motion){:where(.vds-tooltip-content){animation:none}:where(.vds-tooltip-content[data-visible]){opacity:1}}[data-media-player]:not([data-paused]) .vds-play-tooltip-text,[data-media-player][data-paused] .vds-pause-tooltip-text,[data-media-player][data-pip] .vds-pip-enter-tooltip-text,[data-media-player]:not([data-pip]) .vds-pip-exit-tooltip-text,[data-media-player][data-fullscreen] .vds-fs-enter-tooltip-text,[data-media-player]:not([data-fullscreen]) .vds-fs-exit-tooltip-text,[data-media-player]:not([data-captions]) .vds-cc-on-tooltip-text,[data-media-player][data-captions] .vds-cc-off-tooltip-text,[data-media-player]:not([data-muted]) .vds-mute-tooltip-text,[data-media-player][data-muted] .vds-unmute-tooltip-text{display:none}[data-media-player] .vds-video-layout:not([data-match]){display:none!important}[data-media-player][data-layout=video]{background-color:var(--video-bg, black)}[data-media-player][data-layout=video]:not([data-fullscreen]){border-radius:var(--video-border-radius, 6px);border:var(--video-border, 1px solid rgb(255 255 255 / .1))}:where(.vds-video-layout){--media-brand: var(--video-brand, #f5f5f5);--media-font-family: var(--video-font-family, sans-serif);--media-controls-color: var(--video-controls-color, #f5f5f5);--media-tooltip-y-offset: 6px;--media-menu-y-offset: 6px;--media-focus-ring-color: var(--video-focus-ring-color, rgb(78 156 246));--media-focus-ring: var(--video-focus-ring, 0 0 0 3px var(--media-focus-ring-color));color:var(--video-controls-color, #f5f5f5);display:contents}:where([data-media-player][data-focus]:not([data-playing]) .vds-video-layout .vds-controls){border-radius:var(--video-border-radius, 6px);box-shadow:var(--media-focus-ring)}:where(.vds-video-layout .vds-controls[data-visible]){border-radius:var(--video-border-radius, 6px);background-image:linear-gradient(to top,rgb(0 0 0 / .6),10%,transparent,95%,rgb(0 0 0 / .3))}.vds-video-layout .vds-controls-group{align-items:center;display:flex;pointer-events:auto;z-index:0;padding:4px 6px}.vds-video-layout .vds-controls-group:first-child{z-index:50}.vds-video-layout .vds-controls-group:nth-last-child(2){padding:0 12px;z-index:11;margin-bottom:-16px}.vds-video-layout:not([data-sm]) .vds-controls-group:last-child{--media-menu-y-offset: 26px;--media-tooltip-y-offset: 26px;--media-slider-preview-offset: 26px;z-index:10}:where(.vds-video-layout .vds-button){margin-right:2.5px}:where(.vds-video-layout[data-sm] .vds-chapter-title){font-size:var(--video-sm-chapter-title-font-size, 15px)}:where([data-fullscreen] .vds-video-layout .vds-chapter-title){font-size:var(--video-fullscreen-chapter-title-font-size, 16px)}:where(.vds-video-layout:not([data-sm]) .vds-mute-button){margin-left:-2.5px;margin-right:-5px}:where(.vds-video-layout[data-sm]){--media-button-size: var(--video-sm-button-size, 36px)}:where(.vds-video-layout .vds-time-slider){--media-slider-height: 45px;flex-grow:0}:where(.vds-video-layout .vds-slider-thumbnail){--media-thumbnail-border: var(--video-slider-thumbnail-border, 1px solid #f5f5f5);border-radius:var(--video-slider-thumbnail-border-radius, 2px)}.vds-video-layout .vds-time-slider .vds-slider-value{background-color:var(--video-time-bg, unset);text-shadow:-1px -1px 0 #333333,1px -1px 0 #333333,-1px 1px 0 #333333,1px 1px 0 #333333}:where(.vds-video-layout[data-sm] .vds-time){text-shadow:unset}:where(.vds-video-layout[data-lg] .vds-volume){--gap: var(--video-volume-gap, 10px);display:contents}:where(.vds-video-layout[data-lg] .vds-volume-popup){display:contents}:where(.vds-video-layout[data-lg] .vds-volume-slider){margin:0;max-width:0;transition:all .15s ease}:where(.vds-video-layout[data-lg] .vds-volume[data-active] .vds-volume-slider),:where(.vds-video-layout[data-lg] .vds-volume:has([data-active]) .vds-volume-slider){margin-left:var(--gap);opacity:1;visibility:visible;max-width:var(--video-volume-slider-max-width, 72px)}.vds-video-layout[data-lg] .vds-volume-slider:after{content:"";position:fixed;top:0;left:calc(-1 * var(--gap));width:var(--gap);height:100%;z-index:1;pointer-events:auto}:where(.vds-video-layout[data-sm] .vds-volume){--media-slider-height: var(--video-volume-height, 96px);--media-slider-preview-offset: calc(-200% - 6px) ;--gap: var(--video-volume-gap, 10px);position:relative;display:flex;align-items:center;justify-content:center}:where(.vds-video-layout[data-sm] .vds-volume-popup){display:block;position:absolute;top:calc(100% + var(--gap));left:50%;opacity:0;transform:translate(-50%);transition:opacity .15s ease-out,visibility .15s ease-out;border-radius:var(--video-volume-border-radius, 8px);filter:var(--media-volume-filter, drop-shadow(0 1px 1px rgb(0 0 0 / .05)));visibility:hidden}.vds-video-layout[data-sm] .vds-mute-button:after{content:"";position:fixed;bottom:calc(-1 * var(--gap));right:0;width:100%;height:var(--gap);z-index:1;pointer-events:auto}.vds-video-layout .vds-volume-popup{background-color:var(--video-volume-bg, var(--media-menu-bg, var(--default-bg)));border:var(--video-volume-border, var(--default-border))}.light .vds-video-layout .vds-volume-popup,.vds-video-layout.light .vds-volume-popup{--default-bg: rgb(250 250 250);--default-border: 1px solid rgb(10 10 10 / .1)}.dark .vds-video-layout .vds-volume-popup,.vds-video-layout.dark .vds-volume-popup{--default-bg: rgb(10 10 10);--default-border: 1px solid rgb(255 255 255 / .1)}:where(.vds-video-layout[data-sm] .vds-volume[data-active] .vds-volume-popup),:where(.vds-video-layout[data-sm] .vds-volume:has([data-active]) .vds-volume-popup){transition:opacity .15s ease-in,visibility .15s ease-in;opacity:1;visibility:visible}:where(.vds-video-layout[data-sm] .vds-volume[data-active] .vds-tooltip-content){display:none!important}:where(.vds-video-layout .vds-time[data-type=current]){margin-right:2px}:where(.vds-video-layout .vds-time[data-type=current][remainder]){margin-left:2px}.vds-video-layout .vds-time{--default-color: #f5f5f5 !important}:where([data-preview] .vds-video-layout .vds-captions){opacity:0}:where(.vds-video-layout .vds-captions){z-index:10;transition:var(--video-captions-transition, bottom .3s ease-in-out)}@media (min-width: 980px){:where([data-fullscreen] .vds-video-layout .vds-captions){bottom:var(--video-lg-fullscreen-captions-offset, 54px)}}:where([data-media-player][data-controls] .vds-video-layout .vds-captions){bottom:var(--video-captions-offset, 78px)}:where([data-media-player][data-controls] .vds-video-layout[data-sm] .vds-captions){bottom:var(--video-sm-captions-offset, 48px)}:where(.vds-video-layout .vds-time-slider .vds-slider-chapter-title){width:100%;text-align:center;text-shadow:-1px -1px 0 #212121,1px -1px 0 #212121,-1px 1px 0 #212121,1px 1px 0 #212121}:where(.vds-video-layout .vds-gesture){top:0;left:0;width:100%;height:100%;z-index:0}:where(.vds-video-layout .vds-gesture[action="seek:-10"]){width:var(--video-gesture-seek-width, 20%);z-index:1}:where(.vds-video-layout .vds-gesture[action="seek:10"]){left:unset;right:0;width:var(--video-gesture-seek-width, 20%);z-index:1}@media (pointer: coarse){:where(.vds-video-layout .vds-gesture[action="toggle:paused"]){display:none}}@media not (pointer: coarse){:where([data-media-player] .vds-video-layout .vds-gesture[action="toggle:controls"]){display:none}}:where(.vds-video-layout .vds-live-button){margin-left:12px}:where(.vds-video-layout:not([data-sm]) .vds-time-group){margin-left:10px}:where(.vds-video-layout[data-sm] .vds-time){font-size:var(--video-sm-time-font-size, 14px)}:where([data-fullscreen] .vds-video-layout .vds-time){font-size:var(--video-fullscreen-time-font-size, 16px)}:where(.vds-video-layout .vds-load-container){position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:none;align-items:center;justify-content:center;pointer-events:none;z-index:99}:where([data-media-player][data-load=play]:not([data-started]) .vds-video-layout[data-match] .vds-load-container){display:flex}:where(.vds-video-layout .vds-load-container .vds-play-button){--size: var(--video-load-button-size, 56px);--color: var(--video-load-button-color, rgb(0 0 0 / .8));--bg-color: var(--video-load-button-bg, var(--media-brand));--media-button-hover-transform: 0;--media-button-border: var(--video-load-button-border, var(--color));--media-button-hover-bg: var(--video-load-button-bg, var(--media-brand));width:var(--size);height:var(--size);pointer-events:auto;margin-bottom:2px;overflow:hidden}.vds-video-layout .vds-load-container .vds-play-button{border-radius:var(--video-load-button-border-radius, 100%);color:var(--color);background-color:var(--bg-color)}:where(.vds-video-layout[data-sm] .vds-load-container .vds-play-button){--size: var(--video-sm-load-button-size, 48px);--media-button-hover-transform: translateY(0%);width:var(--size);height:var(--size);transform:translateY(0)}:where(.vds-video-layout[data-sm] .vds-controls-group:nth-last-child(2)){pointer-events:none}:where(.vds-video-layout[data-sm] .vds-controls-group:last-child){z-index:2;margin-top:-2.5px;margin-bottom:-6px}:where([data-fullscreen] .vds-video-layout[data-sm] .vds-controls-group:last-child){margin-bottom:0}.vds-video-layout[data-sm] .vds-controls-group{padding:2px}:where(.vds-video-layout[data-sm]) :where(.vds-button,.vds-slider:not(.vds-time-slider),.vds-time,.vds-time-divider,.vds-chapter-title){transition:opacity .15s ease}:where([data-media-player]:not([data-started]) .vds-video-layout[data-sm]) :where(.vds-button .vds-slider,.vds-time-group){opacity:0;visibility:hidden}:where(.vds-video-layout[data-sm] .vds-time-slider){transition:transform .1s linear}@media (pointer: coarse){:where([data-preview] .vds-video-layout:not([data-no-scrub-gesture])) :where(.vds-button,.vds-slider:not(.vds-time-slider),.vds-time,.vds-chapter-title,.vds-time-divider,.vds-captions,.vds-live-button){opacity:0}:where([data-preview] .vds-video-layout:not([data-no-scrub-gesture]) .vds-time-slider){--track-height: var(--video-sm-slider-focus-track-height, 12px);transform:translateY(-6px);transition:transform .1s linear}}:where(.vds-video-layout[data-sm] .vds-controls .vds-play-button){--size: var(--video-sm-play-button-size, 45px);--media-button-hover-transform: translateY(25%);width:var(--size);height:var(--size);transform:translateY(25%);border-radius:100%;pointer-events:auto;margin-bottom:2px;overflow:hidden}.vds-video-layout[data-sm] .vds-controls .vds-play-button{background-color:var(--video-sm-play-button-bg, rgba(0 0 0 / .6))}:where([data-media-player]:not([data-started]) .vds-video-layout[data-sm] .vds-controls-group:not(:nth-child(3))){opacity:0;visibility:hidden}:where(.vds-video-layout[data-sm] .vds-buffering-indicator){--media-buffering-size: 64px;transform:translate(-2px,-4px)}:where(.vds-video-layout .vds-start-duration .vds-time){position:absolute;right:8px;bottom:8px;margin-right:8px;margin-bottom:8px;z-index:10}.vds-video-layout .vds-start-duration .vds-time{padding:var(--video-sm-start-duration-padding, 3px 6px);color:var(--video-sm-start-duration-color, var(--video-controls-color));background-color:var(--video-sm-start-duration-bg, rgba(0 0 0 / .64))}:where([data-started] .vds-video-layout .vds-start-duration .vds-time){display:none}:where([data-media-player]:not([data-can-play]) .vds-video-layout .vds-start-duration .vds-time){opacity:0}:where(.vds-video-layout[data-sm] .vds-time[data-type=current]){margin-left:8px}:where([data-fullscreen] .vds-video-layout .vds-controls-group:nth-last-child(2)){margin-bottom:-16px}@media (orientation: portrait){:where([data-fullscreen] .vds-video-layout .vds-captions){bottom:30lvh;bottom:10dvh}}@media (orientation: landscape){:where([data-fullscreen] .vds-video-layout .vds-controls-group:nth-last-child(2)){margin-bottom:-12px}}.ProseMirror{position:relative;word-wrap:break-word;white-space:pre-wrap;white-space:break-spaces;font-variant-ligatures:none;font-feature-settings:"liga" 0}.ProseMirror pre{white-space:pre-wrap}.ProseMirror li{position:relative}.ProseMirror-hideselection *::selection{background:transparent}.ProseMirror-hideselection *::-moz-selection{background:transparent}.ProseMirror-hideselection{caret-color:transparent}.ProseMirror [draggable][contenteditable=false]{-webkit-user-select:text;-moz-user-select:text;user-select:text}.ProseMirror-selectednode{outline:2px solid #8cf}li.ProseMirror-selectednode{outline:none}li.ProseMirror-selectednode:after{content:"";position:absolute;left:-32px;right:-2px;top:-2px;bottom:-2px;border:2px solid #8cf;pointer-events:none}img.ProseMirror-separator{display:inline!important;border:none!important;margin:0!important}.milkdown{position:relative}.milkdown *{margin:0;padding:0;box-sizing:border-box}.milkdown button,.milkdown input{border:none;background:none;box-shadow:none}.milkdown button:focus,.milkdown input:focus{outline:none}.milkdown :focus-visible{outline:none}.milkdown{font-family:var(--crepe-font-default);color:var(--crepe-color-on-background);background:var(--crepe-color-background)}.milkdown .milkdown-icon{display:inline-flex;align-items:center;justify-content:center}.milkdown .ProseMirror-focused{outline:none}.milkdown .ProseMirror{padding:60px 120px}.milkdown .ProseMirror *::-moz-selection{background:var(--crepe-color-selected)}.milkdown .ProseMirror *::selection{background:var(--crepe-color-selected)}.milkdown .ProseMirror li.ProseMirror-selectednode{background:var(--crepe-color-selected);outline:none}.milkdown .ProseMirror li.ProseMirror-selectednode ::-moz-selection{background:transparent}.milkdown .ProseMirror li.ProseMirror-selectednode ::selection{background:transparent}.milkdown .ProseMirror li.ProseMirror-selectednode::-moz-selection{background:transparent}.milkdown .ProseMirror li.ProseMirror-selectednode::selection{background:transparent}.milkdown .ProseMirror li.ProseMirror-selectednode:after{all:unset}.milkdown .ProseMirror .ProseMirror-selectednode{background:var(--crepe-color-selected);outline:none;background:color-mix(in srgb,var(--crepe-color-selected),transparent 60%)}.milkdown .ProseMirror .ProseMirror-selectednode ::-moz-selection{background:transparent}.milkdown .ProseMirror .ProseMirror-selectednode ::selection{background:transparent}.milkdown .ProseMirror .ProseMirror-selectednode::-moz-selection{background:transparent}.milkdown .ProseMirror .ProseMirror-selectednode::selection{background:transparent}.milkdown .ProseMirror[data-dragging=true]::-moz-selection,.milkdown .ProseMirror[data-dragging=true] *::-moz-selection{background:transparent}.milkdown .ProseMirror[data-dragging=true] .ProseMirror-selectednode,.milkdown .ProseMirror[data-dragging=true]::selection,.milkdown .ProseMirror[data-dragging=true] *::selection{background:transparent}.milkdown .ProseMirror[data-dragging=true] input::-moz-selection{background:var(--crepe-color-selected)}.milkdown .ProseMirror[data-dragging=true] input::selection{background:var(--crepe-color-selected)}.milkdown .ProseMirror img{vertical-align:bottom;max-width:100%}.milkdown .ProseMirror img.ProseMirror-selectednode{background:none;outline:2px solid var(--crepe-color-primary)}.milkdown .ProseMirror h1,.milkdown .ProseMirror h2,.milkdown .ProseMirror h3,.milkdown .ProseMirror h4,.milkdown .ProseMirror h5,.milkdown .ProseMirror h6{font-family:var(--crepe-font-title);font-weight:400;padding:2px 0}.milkdown .ProseMirror h1{font-size:42px;line-height:50px;margin-top:32px}.milkdown .ProseMirror h2{font-size:36px;line-height:44px;margin-top:28px}.milkdown .ProseMirror h3{font-size:32px;line-height:40px;margin-top:24px}.milkdown .ProseMirror h4{font-size:28px;line-height:36px;margin-top:20px}.milkdown .ProseMirror h5{font-size:24px;line-height:32px;margin-top:16px}.milkdown .ProseMirror h6{font-size:18px;font-weight:700;line-height:28px;margin-top:16px}.milkdown .ProseMirror p{font-size:16px;line-height:24px;padding:4px 0}.milkdown .ProseMirror code{color:var(--crepe-color-inline-code);background:color-mix(in srgb,var(--crepe-color-inline-area),transparent 40%);font-family:var(--crepe-font-code);padding:0 2px;border-radius:4px;font-size:87.5%;display:inline-block;line-height:1.4286}.milkdown .ProseMirror a{color:var(--crepe-color-primary);text-decoration:underline}.milkdown .ProseMirror pre{background:color-mix(in srgb,var(--crepe-color-inline-area),transparent 40%);padding:10px;border-radius:4px}.milkdown .ProseMirror pre code{padding:0;background:transparent}.milkdown .ProseMirror blockquote{position:relative;padding-left:40px;padding-top:0;padding-bottom:0;box-sizing:content-box;margin:4px 0}.milkdown .ProseMirror blockquote:before{content:"";width:4px;left:0;top:4px;bottom:4px;position:absolute;background:var(--crepe-color-selected);border-radius:100px}.milkdown .ProseMirror blockquote hr{margin-bottom:16px}.milkdown .ProseMirror hr{border:none;background-color:color-mix(in srgb,var(--crepe-color-outline),transparent 80%);background-clip:content-box;padding:6px 0;height:13px;position:relative}.milkdown .ProseMirror hr.ProseMirror-selectednode{outline:none;background-color:color-mix(in srgb,var(--crepe-color-outline),transparent 20%);background-clip:content-box}.milkdown .ProseMirror hr.ProseMirror-selectednode:before{content:"";position:absolute;left:0;top:0;bottom:0;right:0;background-color:color-mix(in srgb,var(--crepe-color-outline),transparent 80%);pointer-events:none}.milkdown .ProseMirror ul,.milkdown .ProseMirror ol{padding:0}.milkdown .milkdown-block-handle[data-show=false]{opacity:0;pointer-events:none}.milkdown .milkdown-block-handle{transition:all .2s;position:absolute;cursor:pointer;display:flex;justify-content:center;align-items:center;gap:2px}.milkdown .milkdown-block-handle .operation-item{border-radius:4px;width:32px;height:32px;padding:4px}.milkdown .milkdown-block-handle .operation-item svg{width:24px;height:24px;fill:var(--crepe-color-outline)}.milkdown .milkdown-block-handle .operation-item:hover{background:var(--crepe-color-hover)}.milkdown .milkdown-block-handle .operation-item.active{background:var(--crepe-color-selected)}.milkdown .milkdown-slash-menu[data-show=false]{display:none}.milkdown .milkdown-slash-menu{position:absolute;z-index:10;display:block;font-family:var(--crepe-font-default);color:var(--crepe-color-on-surface);background:var(--crepe-color-surface);border-radius:12px;box-shadow:var(--crepe-shadow-1)}.milkdown .milkdown-slash-menu ul{list-style-type:none}.milkdown .milkdown-slash-menu ul li{cursor:pointer;border-radius:8px}.milkdown .milkdown-slash-menu .tab-group{border-bottom:1px solid color-mix(in srgb,var(--crepe-color-outline),transparent 80%);padding:12px 12px 0}.milkdown .milkdown-slash-menu .tab-group ul{padding:8px 10px;display:flex;gap:10px;flex-wrap:nowrap}.milkdown .milkdown-slash-menu .tab-group ul li{padding:6px 10px;font-size:14px;font-style:normal;font-weight:600;line-height:20px}.milkdown .milkdown-slash-menu .tab-group ul li:hover{background:var(--crepe-color-hover)}.milkdown .milkdown-slash-menu .tab-group ul li.selected{background:var(--crepe-color-selected)}.milkdown .milkdown-slash-menu .menu-groups{padding:0 12px 12px;max-height:420px;overflow:auto;overscroll-behavior:contain;scroll-behavior:smooth}.milkdown .milkdown-slash-menu .menu-groups .menu-group h6{font-size:14px;font-style:normal;font-weight:600;line-height:20px;padding:14px 10px;text-transform:uppercase;color:color-mix(in srgb,var(--crepe-color-on-surface),transparent 40%)}.milkdown .milkdown-slash-menu .menu-groups .menu-group li{min-width:220px;display:flex;justify-content:flex-start;align-items:center;gap:16px;padding:14px 10px}.milkdown .milkdown-slash-menu .menu-groups .menu-group li.hover{background:var(--crepe-color-hover)}.milkdown .milkdown-slash-menu .menu-groups .menu-group li.active{background:var(--crepe-color-selected)}.milkdown .milkdown-slash-menu .menu-groups .menu-group li svg{width:24px;height:24px;color:var(--crepe-color-outline);fill:var(--crepe-color-outline)}.milkdown .milkdown-slash-menu .menu-groups .menu-group li>span{font-size:14px;font-style:normal;font-weight:600;line-height:20px}.milkdown .milkdown-slash-menu .menu-groups .menu-group+.menu-group:before{content:"";display:block;height:1px;background:color-mix(in srgb,var(--crepe-color-outline),transparent 80%);margin:0 10px}.milkdown .milkdown-code-block{display:block;position:relative;padding:8px 20px 20px;background:var(--crepe-color-surface);margin:4px 0}.milkdown .milkdown-code-block .language-picker{padding-top:10px;width:-moz-max-content;width:max-content;position:absolute;z-index:999}.milkdown .milkdown-code-block .hidden{display:none!important}.milkdown .milkdown-code-block.selected{outline:1px solid var(--crepe-color-primary)}.milkdown .milkdown-code-block .cm-editor{outline:none!important;background:var(--crepe-color-surface)}.milkdown .milkdown-code-block .cm-gutters{border-right:none;background:var(--crepe-color-surface)}.milkdown .milkdown-code-block .cm-panel{font-family:var(--crepe-font-default);background:var(--crepe-color-surface);color:var(--crepe-color-on-surface)}.milkdown .milkdown-code-block .cm-panel input{caret-color:var(--crepe-color-outline);border-radius:4px;background:var(--crepe-color-surface-low)}.milkdown .milkdown-code-block .cm-panel>button{text-transform:capitalize;background:var(--crepe-color-surface-low);color:var(--crepe-color-on-surface-variant);border:1px solid var(--crepe-color-outline);font-weight:600;cursor:pointer;border-radius:4px}.milkdown .milkdown-code-block .cm-panel>button:hover{background:var(--crepe-color-hover)}.milkdown .milkdown-code-block .cm-panel>label{display:inline-flex;align-items:center;text-transform:capitalize}.milkdown .milkdown-code-block .cm-panel>label input[type=checkbox]{border-radius:4px;cursor:pointer;-moz-appearance:none;appearance:none;-webkit-appearance:none;background:var(--crepe-color-surface-low);width:1.15em;height:1.15em;border:1px solid var(--crepe-color-outline);display:grid;place-content:center}.milkdown .milkdown-code-block .cm-panel>label input[type=checkbox]:before{content:"";transform-origin:bottom left;width:.65em;height:.65em;transform:scale(0);transition:.12s transform ease-in-out;box-shadow:inset 1em 1em var(--crepe-color-outline);clip-path:polygon(14% 44%,0 65%,50% 100%,100% 16%,80% 0%,43% 62%)}.milkdown .milkdown-code-block .cm-panel>label input[type=checkbox]:checked:before{transform:scale(1)}.milkdown .milkdown-code-block .tools{display:flex;justify-content:space-between;align-items:center}.milkdown .milkdown-code-block .tools input{caret-color:var(--crepe-color-outline)}.milkdown .milkdown-code-block .tools .tools-button-group{display:flex;gap:2px}.milkdown .milkdown-code-block .tools .tools-button-group button{background:var(--crepe-color-secondary);color:var(--crepe-color-on-surface-variant);padding:4px 10px;opacity:0;cursor:pointer;border-radius:4px;font-size:12px;line-height:16px;font-weight:600;font-family:var(--crepe-font-default);transition:opacity .2s ease-in-out;display:flex;align-items:center;justify-content:center;gap:4px}.milkdown .milkdown-code-block .tools .tools-button-group button svg{width:14px;height:14px;fill:var(--crepe-color-on-surface-variant)}.milkdown .milkdown-code-block .tools .tools-button-group button:first-child{border-top-left-radius:100px;border-bottom-left-radius:100px}.milkdown .milkdown-code-block .tools .tools-button-group button:last-child{border-top-right-radius:100px;border-bottom-right-radius:100px}.milkdown .milkdown-code-block .tools .language-button{display:flex;align-items:center;font-family:var(--crepe-font-default);gap:6px;padding:2px 4px 2px 8px;background:var(--crepe-color-surface-low);color:var(--crepe-color-on-surface-variant);border-radius:4px;font-size:12px;font-weight:600;line-height:16px;margin-bottom:8px;opacity:0;cursor:pointer;transition:opacity .2s ease-in-out}.milkdown .milkdown-code-block .tools .language-button:hover{background:var(--crepe-color-hover)}.milkdown .milkdown-code-block .tools .language-button .expand-icon{transition:transform .2s ease-in-out;width:18px;height:18px;display:flex;justify-content:center;align-items:center}.milkdown .milkdown-code-block .tools .language-button .expand-icon svg{width:14px;height:14px;color:var(--crepe-color-outline)}.milkdown .milkdown-code-block .tools .language-button[data-expanded=true] .expand-icon{transform:rotate(180deg)}.milkdown .milkdown-code-block .tools .language-button .expand-icon svg:focus,.milkdown .milkdown-code-block .tools .language-button .expand-icon:focus-visible{outline:none}.milkdown .milkdown-code-block:hover .language-button{opacity:1}.milkdown .milkdown-code-block:hover .tools-button-group>button{opacity:1}.milkdown .milkdown-code-block .list-wrapper{background:var(--crepe-color-surface-low);border-radius:12px;box-shadow:var(--crepe-shadow-1);width:240px;padding-top:12px}.milkdown .milkdown-code-block .language-list{height:410px;overflow-y:auto;overscroll-behavior:contain;margin:0;padding:0}.milkdown .milkdown-code-block .language-list-item{cursor:pointer;margin:0;display:flex;align-items:center;gap:8px;padding:4px 22px;font-size:14px;font-weight:600;line-height:20px}.milkdown .milkdown-code-block .language-list-item:hover{background:var(--crepe-color-hover)}.milkdown .milkdown-code-block .language-list-item:focus-visible{outline:none;background:var(--crepe-color-hover)}.milkdown .milkdown-code-block .language-list-item .leading,.milkdown .milkdown-code-block .language-list-item .leading svg{width:24px;height:24px}.milkdown .milkdown-code-block .language-list-item.no-result{cursor:default;opacity:.6}.milkdown .milkdown-code-block .language-list-item.no-result:hover{background:transparent}.milkdown .milkdown-code-block .search-box{display:flex;align-items:center;margin:0 12px 8px;background:transparent;border-radius:4px;outline:1px solid var(--crepe-color-primary);gap:8px;padding:6px 10px}.milkdown .milkdown-code-block .search-box:has(input:focus){outline:2px solid var(--crepe-color-primary)}.milkdown .milkdown-code-block .search-box .search-input{width:100%;color:var(--crepe-color-on-surface)}.milkdown .milkdown-code-block .search-box .search-icon{display:none}.milkdown .milkdown-code-block .search-box .clear-icon{cursor:pointer;width:20px;height:20px}.milkdown .milkdown-code-block .search-box .clear-icon svg{width:20px;height:20px;color:var(--crepe-color-primary);fill:var(--crepe-color-primary)}.milkdown .milkdown-code-block .search-box .clear-icon:hover{background:var(--crepe-color-hover)}.milkdown .milkdown-code-block .search-box input{font-family:var(--crepe-font-default);font-size:14px;line-height:20px;background:transparent}.milkdown .milkdown-code-block .search-box input:focus{outline:none}.milkdown .milkdown-code-block .preview-panel .preview-divider{height:1px;opacity:.2;background:var(--crepe-color-outline);margin:6px 0}.milkdown .milkdown-code-block .preview-panel .preview-label{margin:6px 0;font-size:12px;color:color-mix(in srgb,var(--crepe-color-on-surface),transparent 40%);font-weight:600;text-transform:uppercase;font-family:var(--crepe-font-default)}.milkdown .milkdown-code-block .preview-panel .preview{text-align:center;overflow-x:auto}.ProseMirror-gapcursor{display:none;pointer-events:none;position:absolute}.ProseMirror-gapcursor:after{content:"";display:block;position:absolute;top:-2px;width:20px;border-top:1px solid black;animation:ProseMirror-cursor-blink 1.1s steps(2,start) infinite}@keyframes ProseMirror-cursor-blink{to{visibility:hidden}}.ProseMirror-focused .ProseMirror-gapcursor{display:block}.ProseMirror.virtual-cursor-enabled{caret-color:transparent}.ProseMirror-focused{--prosemirror-virtual-cursor-color: red}.ProseMirror .prosemirror-virtual-cursor{position:absolute;cursor:text;pointer-events:none;transform:translate(-1px);-moz-user-select:none;user-select:none;-webkit-user-select:none;border-left:2px solid var(--prosemirror-virtual-cursor-color)}.ProseMirror .prosemirror-virtual-cursor-left{width:1ch;transform:translate(calc(-1ch - 1px));border-bottom:2px solid var(--prosemirror-virtual-cursor-color);border-right:2px solid var(--prosemirror-virtual-cursor-color);border-left:none}.ProseMirror .prosemirror-virtual-cursor-right{width:1ch;border-bottom:2px solid var(--prosemirror-virtual-cursor-color);border-left:2px solid var(--prosemirror-virtual-cursor-color);border-right:none}.ProseMirror-focused .prosemirror-virtual-cursor-animation{animation:prosemirror-virtual-cursor-blink 1s linear infinite;animation-delay:.5s}@keyframes prosemirror-virtual-cursor-blink{0%{opacity:1}50%{opacity:0}to{opacity:1}}.milkdown .crepe-drop-cursor{background-color:color-mix(in srgb,var(--crepe-color-outline),transparent 50%);opacity:.5;transition:all .2s;pointer-events:none}.milkdown .ProseMirror-gapcursor:after{box-sizing:border-box;border-top:1px solid var(--crepe-color-on-background)}.milkdown .ProseMirror-focused{--prosemirror-virtual-cursor-color: var(--crepe-color-outline)}.milkdown .milkdown-image-inline{outline:none;display:inline-flex;vertical-align:text-bottom}.milkdown .milkdown-image-inline input{background:transparent;outline:none;border:0;caret-color:var(--crepe-color-outline)}.milkdown .milkdown-image-inline>.empty-image-inline{display:inline-flex}.milkdown .milkdown-image-inline>.empty-image-inline .confirm{cursor:pointer}.milkdown .milkdown-image-inline>.empty-image-inline .link-importer{position:relative;flex:1}.milkdown .milkdown-image-inline>.empty-image-inline .link-importer>.link-input-area{width:208px;color:var(--crepe-color-on-background);display:flex}.milkdown .milkdown-image-inline>.empty-image-inline .link-importer .placeholder{position:absolute;top:0;left:0;bottom:0;display:flex;align-items:center;cursor:text}.milkdown .milkdown-image-inline>.empty-image-inline .link-importer .placeholder .uploader{cursor:pointer;display:flex}.milkdown .milkdown-image-inline .hidden{display:none!important}.milkdown .milkdown-image-inline.empty.selected{background:none;outline:none}.milkdown .milkdown-image-inline.empty.selected .empty-image-inline{box-shadow:var(--crepe-shadow-1)}.milkdown .milkdown-image-inline.selected{background:none;outline:1px solid var(--crepe-color-primary)}.milkdown .milkdown-image-inline.selected :not(input)::-moz-selection{background:transparent}.milkdown .milkdown-image-inline.selected :not(input)::selection{background:transparent}.milkdown .milkdown-image-inline .empty-image-inline{align-items:center;padding:4px 10px;gap:10px;background:var(--crepe-color-surface);font-family:var(--crepe-font-default);border-radius:8px;font-size:16px}.milkdown .milkdown-image-inline .empty-image-inline .image-icon svg{width:18px;height:18px;fill:var(--crepe-color-outline)}.milkdown .milkdown-image-inline .empty-image-inline .image-icon{padding:3px;width:24px;height:24px}.milkdown .milkdown-image-inline .empty-image-inline .link-importer{height:24px}.milkdown .milkdown-image-inline .empty-image-inline .link-importer .placeholder{color:color-mix(in srgb,var(--crepe-color-on-background),transparent 60%)}.milkdown .milkdown-image-inline .empty-image-inline .link-importer .placeholder :not(input)::-moz-selection{background:transparent}.milkdown .milkdown-image-inline .empty-image-inline .link-importer .placeholder :not(input)::selection{background:transparent}.milkdown .milkdown-image-inline .empty-image-inline .link-importer .link-input-area{line-height:24px}.milkdown .milkdown-image-inline .empty-image-inline .link-importer .placeholder .uploader{gap:8px;color:var(--crepe-color-primary);justify-content:center;transition:color .2s;font-family:var(--crepe-font-default)}.milkdown .milkdown-image-inline .empty-image-inline .link-importer.focus .placeholder .uploader{color:unset}.milkdown .milkdown-image-inline .empty-image-inline .link-importer .placeholder .uploader:hover{color:var(--crepe-color-primary)}.milkdown .milkdown-image-inline .empty-image-inline .link-importer .placeholder .text{margin-left:8px}.milkdown .milkdown-image-inline .empty-image-inline .confirm svg{width:18px;height:18px}.milkdown .milkdown-image-inline .empty-image-inline .confirm{display:flex;width:24px;height:24px;padding:3px;border-radius:8px;color:var(--crepe-color-primary)}.milkdown .milkdown-image-inline .empty-image-inline .confirm:hover{background:var(--crepe-color-hover)}.milkdown .milkdown-image-block{outline:none;margin:4px 0;display:block}.milkdown .milkdown-image-block>.image-wrapper{position:relative;width:-moz-fit-content;width:fit-content;margin:0 auto;min-width:100px}.milkdown .milkdown-image-block>.image-wrapper .operation{position:absolute;display:flex}.milkdown .milkdown-image-block>.image-wrapper .operation>.operation-item{cursor:pointer}.milkdown .milkdown-image-block>.image-wrapper img{max-width:100%;min-height:100px;display:block;-o-object-fit:cover;object-fit:cover}.milkdown .milkdown-image-block>.image-wrapper>.image-resize-handle{position:absolute;left:50%;transform:translate(-50%)}.milkdown .milkdown-image-block>.image-wrapper>.image-resize-handle:hover{cursor:row-resize}.milkdown .milkdown-image-block input{background:transparent;outline:none;border:0;caret-color:var(--crepe-color-outline)}.milkdown .milkdown-image-block>.caption-input{display:block;width:100%;text-align:center;color:var(--crepe-color-on-background)}.milkdown .milkdown-image-block>.image-edit{display:flex}.milkdown .milkdown-image-block>.image-edit .confirm{cursor:pointer}.milkdown .milkdown-image-block>.image-edit .link-importer{position:relative;flex:1}.milkdown .milkdown-image-block>.image-edit .link-importer>.link-input-area{width:100%}.milkdown .milkdown-image-block>.image-edit .link-importer .placeholder{position:absolute;top:0;left:0;bottom:0;display:flex;align-items:center;cursor:text}.milkdown .milkdown-image-block>.image-edit .link-importer .placeholder .uploader{cursor:pointer;display:flex}.milkdown .milkdown-image-block .hidden{display:none!important}.milkdown .milkdown-image-block.selected>.image-edit:not(:has(input:focus)){position:relative}.milkdown .milkdown-image-block.selected>.image-edit:not(:has(input:focus)):before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:color-mix(in srgb,var(--crepe-color-selected),transparent 60%);pointer-events:none}.milkdown .milkdown-image-block.selected>.image-wrapper{position:relative}.milkdown .milkdown-image-block.selected>.image-wrapper:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:color-mix(in srgb,var(--crepe-color-selected),transparent 60%)}.milkdown .milkdown-image-block.selected :not(input)::-moz-selection{background:transparent}.milkdown .milkdown-image-block.selected :not(input)::selection{background:transparent}.milkdown .milkdown-image-block .image-wrapper{display:flex;justify-content:center;align-items:center}.milkdown .milkdown-image-block .image-wrapper .operation{gap:12px;right:12px;top:12px;opacity:0;transition:all .2s}.milkdown .milkdown-image-block:hover>.image-wrapper .operation{opacity:1}.milkdown .milkdown-image-block .image-wrapper .operation>.operation-item{color:var(--crepe-color-on-inverse);padding:4px;background:var(--crepe-color-inverse);opacity:.6;border-radius:50%;width:32px;height:32px}.milkdown .milkdown-image-block .image-wrapper .operation>.operation-item svg{width:24px;height:24px}.milkdown .milkdown-image-block .image-wrapper .image-resize-handle{height:4px;bottom:-2px;max-width:160px;width:100%;background:var(--crepe-color-outline);opacity:0;transition:all .2s;border-radius:4px}.milkdown .milkdown-image-block:hover>.image-wrapper .image-resize-handle{opacity:1}.milkdown .milkdown-image-block .caption-input{margin:4px auto;font-family:var(--crepe-font-default)}.milkdown .milkdown-image-block .image-edit{align-items:center;padding:16px 24px;gap:16px;background:var(--crepe-color-surface);height:56px}.milkdown .milkdown-image-block .image-edit .image-icon{color:var(--crepe-color-outline)}.milkdown .milkdown-image-block .image-edit .image-icon svg{width:24px;height:24px;display:flex;justify-content:center;align-items:center;fill:var(--crepe-color-outline)}.milkdown .milkdown-image-block .image-edit .link-importer .placeholder{color:color-mix(in srgb,var(--crepe-color-on-background),transparent 60%)}.milkdown .milkdown-image-block .image-edit .link-importer .placeholder :not(input)::-moz-selection{background:transparent}.milkdown .milkdown-image-block .image-edit .link-importer .placeholder :not(input)::selection{background:transparent}.milkdown .milkdown-image-block .image-edit .link-importer .link-input-area{line-height:24px;color:var(--crepe-color-on-background)}.milkdown .milkdown-image-block .image-edit .link-importer .placeholder .uploader{gap:8px;color:var(--crepe-color-primary);justify-content:center;transition:color .2s;font-weight:600}.milkdown .milkdown-image-block .image-edit .link-importer.focus .placeholder .uploader{color:unset}.milkdown .milkdown-image-block .image-edit .link-importer .placeholder .uploader:hover{color:var(--crepe-color-primary)}.milkdown .milkdown-image-block .image-edit .link-importer .placeholder .text{margin-left:8px}.milkdown .milkdown-image-block .image-edit .confirm{background:var(--crepe-color-secondary);color:var(--crepe-color-on-secondary);line-height:40px;padding:0 24px;border-radius:100px;font-size:14px;font-weight:600}.milkdown .milkdown-image-block .image-edit .confirm:hover{background:linear-gradient(0deg,#1d192b14,#1d192b14),var(--crepe-color-secondary)}.milkdown .milkdown-link-preview{position:absolute;z-index:10}.milkdown .milkdown-link-preview[data-show=false]{display:none}.milkdown .milkdown-link-preview>.link-preview{height:32px;display:flex;justify-content:center;padding:4px 10px;background:var(--crepe-color-surface);gap:10px;border-radius:8px;cursor:pointer;box-shadow:var(--crepe-shadow-1)}.milkdown .milkdown-link-preview>.link-preview>.link-display{text-decoration:none;color:unset}.milkdown .milkdown-link-preview>.link-preview>.link-display:hover:before{display:block}.milkdown .milkdown-link-preview>.link-preview>.link-icon>svg{width:18px;height:18px;color:var(--crepe-color-outline);fill:var(--crepe-color-outline)}.milkdown .milkdown-link-preview>.link-preview>.link-icon{border-radius:8px;padding:3px;line-height:24px}.milkdown .milkdown-link-preview>.link-preview>.link-icon:hover{background:var(--crepe-color-hover)}.milkdown .milkdown-link-preview>.link-preview>.link-display{width:240px;line-height:24px;overflow:hidden;text-overflow:ellipsis;font-size:14px;white-space:nowrap}.milkdown .milkdown-link-preview>.link-preview>.link-display:hover{text-decoration:underline}.milkdown .milkdown-link-preview>.link-preview>.button>svg{width:18px;height:18px;color:var(--crepe-color-outline);fill:var(--crepe-color-outline)}.milkdown .milkdown-link-preview>.link-preview>.button{padding:3px;border-radius:8px;line-height:24px}.milkdown .milkdown-link-preview>.link-preview>.button:hover{background:var(--crepe-color-hover)}.milkdown .milkdown-link-edit{position:absolute;z-index:10}.milkdown .milkdown-link-edit[data-show=false]{display:none}.milkdown .milkdown-link-edit>.link-edit{height:32px;display:flex;justify-content:center;padding:4px 10px 4px 20px;background:var(--crepe-color-surface);gap:8px;border-radius:8px;box-shadow:var(--crepe-shadow-1)}.milkdown .milkdown-link-edit>.link-edit>.input-area{outline:none;background:transparent;width:200px;font-size:14px;color:var(--crepe-color-on-background)}.milkdown .milkdown-link-edit>.link-edit>.button>svg{width:18px;height:18px;color:var(--crepe-color-outline);fill:var(--crepe-color-outline)}.milkdown .milkdown-link-edit>.link-edit>.button{padding:3px;cursor:pointer;border-radius:8px;font-size:12px;line-height:24px}.milkdown .milkdown-link-edit>.link-edit>.button:hover{background:var(--crepe-color-hover)}.milkdown .milkdown-link-edit>.link-edit>.button.hidden{visibility:hidden}.milkdown .milkdown-list-item-block{display:block;padding:0}.milkdown .milkdown-list-item-block>.list-item{display:flex;align-items:flex-start}.milkdown .milkdown-list-item-block>.list-item>.children{min-width:0;flex:1}.milkdown .milkdown-list-item-block li{gap:10px}.milkdown .milkdown-list-item-block li .label-wrapper{color:var(--crepe-color-outline)}.milkdown .milkdown-list-item-block li .label-wrapper svg{fill:var(--crepe-color-outline)}.milkdown .milkdown-list-item-block li .label-wrapper{height:32px;width:24px;display:flex;justify-content:center;align-items:center}.milkdown .milkdown-list-item-block li .label-wrapper .label{height:32px;padding:4px 0;width:24px;text-align:right}.milkdown .milkdown-list-item-block li .label-wrapper .checked,.milkdown .milkdown-list-item-block li .label-wrapper .unchecked{cursor:pointer}.milkdown .milkdown-list-item-block li .label-wrapper .readonly{cursor:not-allowed}.milkdown .crepe-placeholder:before{position:absolute;color:color-mix(in srgb,var(--crepe-color-on-background),transparent 60%);pointer-events:none;height:0;content:attr(data-placeholder)}.milkdown:has(.milkdown-link-preview[data-show=true]) .milkdown-toolbar,.milkdown:has(.milkdown-link-edit[data-show=true]) .milkdown-toolbar{display:none}.milkdown .milkdown-toolbar[data-show=false]{display:none}.milkdown .milkdown-toolbar{z-index:10;position:absolute;display:flex;background:var(--crepe-color-surface);box-shadow:var(--crepe-shadow-1);border-radius:8px;overflow:hidden}.milkdown .milkdown-toolbar .divider{width:1px;background:color-mix(in srgb,var(--crepe-color-outline),transparent 80%);height:24px;margin:10px}.milkdown .milkdown-toolbar .toolbar-item{width:32px;height:32px;margin:6px;padding:4px;cursor:pointer;border-radius:4px}.milkdown .milkdown-toolbar .toolbar-item:hover{background:var(--crepe-color-hover)}.milkdown .milkdown-toolbar .toolbar-item:active{background:var(--crepe-color-selected)}.milkdown .milkdown-toolbar .toolbar-item svg{height:24px;width:24px;color:var(--crepe-color-outline);fill:var(--crepe-color-outline)}.milkdown .milkdown-toolbar .toolbar-item.active svg{color:var(--crepe-color-primary);fill:var(--crepe-color-primary)}.ProseMirror .tableWrapper{overflow-x:auto}.ProseMirror table{border-collapse:collapse;table-layout:fixed;width:100%;overflow:hidden}.ProseMirror td,.ProseMirror th{vertical-align:top;box-sizing:border-box;position:relative}.ProseMirror td:not([data-colwidth]):not(.column-resize-dragging),.ProseMirror th:not([data-colwidth]):not(.column-resize-dragging){min-width:var(--default-cell-min-width)}.ProseMirror .column-resize-handle{position:absolute;right:-2px;top:0;bottom:0;width:4px;z-index:20;background-color:#adf;pointer-events:none}.ProseMirror.resize-cursor{cursor:ew-resize;cursor:col-resize}.ProseMirror .selectedCell:after{z-index:2;position:absolute;content:"";left:0;right:0;top:0;bottom:0;background:#c8c8ff66;pointer-events:none}.milkdown .milkdown-table-block{display:block;margin:4px 0}.milkdown .milkdown-table-block th,.milkdown .milkdown-table-block td{border:1px solid color-mix(in srgb,var(--crepe-color-outline),transparent 80%);padding:4px 16px}.milkdown .milkdown-table-block th .ProseMirror-selectednode,.milkdown .milkdown-table-block td .ProseMirror-selectednode{background-color:transparent!important}.milkdown .milkdown-table-block th:has(.ProseMirror-selectednode),.milkdown .milkdown-table-block td:has(.ProseMirror-selectednode){outline:1px solid var(--crepe-color-primary);outline-offset:-1px}.milkdown .milkdown-table-block .selectedCell:after{background-color:var(--crepe-color-selected);opacity:.4}.milkdown .milkdown-table-block .selectedCell ::-moz-selection{background:transparent}.milkdown .milkdown-table-block .selectedCell ::selection{background:transparent}.milkdown .milkdown-table-block .drag-preview{background-color:var(--crepe-color-surface);opacity:.4;position:absolute;z-index:100;display:flex;flex-direction:column;outline:1px solid var(--crepe-color-primary);outline-offset:-1px}.milkdown .milkdown-table-block .drag-preview[data-show=false]{display:none}.milkdown .milkdown-table-block .drag-preview th:has(.ProseMirror-selectednode),.milkdown .milkdown-table-block .drag-preview td:has(.ProseMirror-selectednode){outline:none}.milkdown .milkdown-table-block .handle{position:absolute;font-size:14px;transition:opacity ease-in-out .2s}.milkdown .milkdown-table-block .handle[data-show=false]{opacity:0}.milkdown .milkdown-table-block svg{fill:var(--crepe-color-outline)}.milkdown .milkdown-table-block .cell-handle{z-index:50;left:-999px;top:-999px;cursor:grab;background-color:var(--crepe-color-surface);color:var(--crepe-color-outline);border-radius:100px;box-shadow:var(--crepe-shadow-1);transition:background-color .2s ease-in-out}.milkdown .milkdown-table-block .cell-handle:hover{background-color:var(--crepe-color-hover)}.milkdown .milkdown-table-block .cell-handle:has(.button-group:hover){background-color:var(--crepe-color-surface)}.milkdown .milkdown-table-block .cell-handle[data-role=col-drag-handle]{transform:translateY(50%);padding:0 6px;width:28px;height:16px}.milkdown .milkdown-table-block .cell-handle[data-role=row-drag-handle]{transform:translate(50%);padding:6px 0;width:16px;height:28px}.milkdown .milkdown-table-block .cell-handle .button-group{position:absolute;transform:translate(-50%);left:50%;top:-52px;display:flex;background-color:var(--crepe-color-surface);border-radius:8px;box-shadow:var(--crepe-shadow-1)}.milkdown .milkdown-table-block .cell-handle .button-group:after{content:"";position:absolute;bottom:-8px;height:8px;background-color:transparent;width:100%}.milkdown .milkdown-table-block .cell-handle .button-group[data-show=false]{display:none}.milkdown .milkdown-table-block .cell-handle .button-group button{cursor:pointer;margin:6px;padding:4px;display:flex;justify-content:center;align-items:center;border-radius:4px}.milkdown .milkdown-table-block .cell-handle .button-group button svg{width:24px;height:24px}.milkdown .milkdown-table-block .cell-handle .button-group button:hover{border-radius:8px;background-color:var(--crepe-color-hover)}.milkdown .milkdown-table-block .cell-handle .button-group button:active{background:var(--crepe-color-selected)}.milkdown .milkdown-table-block .cell-handle:hover{opacity:1}.milkdown .milkdown-table-block .line-handle{z-index:20;background-color:var(--crepe-color-primary)}.milkdown .milkdown-table-block .line-handle:hover{opacity:1}.milkdown .milkdown-table-block .line-handle .add-button{cursor:pointer;background-color:var(--crepe-color-surface);color:var(--crepe-color-outline);border-radius:100px;box-shadow:var(--crepe-shadow-1);transition:background-color .2s ease-in-out}.milkdown .milkdown-table-block .line-handle .add-button svg{width:16px;height:16px}.milkdown .milkdown-table-block .line-handle .add-button:hover{background-color:var(--crepe-color-hover)}.milkdown .milkdown-table-block .line-handle .add-button:active{background:var(--crepe-color-selected)}.milkdown .milkdown-table-block .line-handle[data-role=x-line-drag-handle]{height:1px;z-index:2}.milkdown .milkdown-table-block .line-handle[data-role=x-line-drag-handle] .add-button{position:absolute;transform:translate(-50%) translateY(-50%);padding:6px 0;width:16px;height:28px}.milkdown .milkdown-table-block .line-handle[data-role=y-line-drag-handle]{width:1px;z-index:1}.milkdown .milkdown-table-block .line-handle[data-role=y-line-drag-handle] .add-button{position:absolute;transform:translateY(-50%) translate(-50%);padding:0 6px;width:28px;height:16px}.milkdown .milkdown-table-block .line-handle[data-display-type=indicator] .add-button,.milkdown .milkdown-table-block.readonly .handle{display:none}@font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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ADIAMAAxADAAIABEAGUAcwBpAGcAbgAgAFMAYwBpAGUAbgBjAGUALAAgAEkAbgBjAC4ACgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEANAAtADIAMAAxADgAIABLAGgAYQBuACAAQQBjAGEAZABlAG0AeQBLAGEAVABlAFgAXwBBAE0AUwBSAGUAZwB1AGwAYQByAEYAbwBuAHQARgBvAHIAZwBlACAAMgAuADAAIAA6ACAASwBhAFQAZQBYAF8AQQBNAFMALQBSAGUAZwB1AGwAYQByAEsAYQBUAGUAWABfAEEATQBTAC0AUgBlAGcAdQBsAGEAcgBWAGUAcgBzAGkAbwBuACAAMQAuADEAOwAgAHQAdABmAGEAdQB0AG8AaABpAG4AdAAgACgAdgAxAC4AOAAuADMAKQBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOQAtADIAMAAxADAALAAgAEQAZQBzAGkAZwBuACAAUwBjAGkAZQBuAGMAZQAsACAASQBuAGMALgAgACgAPAB3AHcAdwAuAG0AYQB0AGgAagBhAHgALgBvAHIAZwA+ACkACgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEANAAtADIAMAAxADgAIABLAGgAYQBuACAAQQBjAGEAZABlAG0AeQAgACgAPAB3AHcAdwAuAGsAaABhAG4AYQBjAGEAZABlAG0AeQAuAG8AcgBnAD4AKQAsAAoAdwBpAHQAaAAgAFIAZQBzAGUAcgB2AGUAZAAgAEYAbwBuAHQAIABOAGEAbQBlACAASwBhAFQAZQBYAF8AQQBNAFMALgAKAAoAVABoAGkAcwAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABpAHMAIABsAGkAYwBlAG4AcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAFMASQBMACAATwBwAGUAbgAgAEYAbwBuAHQAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMQAuADEALgAKAFQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAYQB2AGEAaQBsAGEAYgBsAGUAIAB3AGkAdABoACAAYQAgAEYAQQBRACAAYQB0ADoACgBoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAAIAAAAAAAD/gwAyAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAAAEAAgADACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQBOAQIAlgCKAOoBAwDYANkBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkA7wE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoApwFLAUwBTQFOAU8BUAFRAVIBUwFUAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwF4AXkBegF7AXwBfQF+AX8BgAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswC5AbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4HdW5pMDBBMARoYmFyB3VuaTAzMDIJdGlsZGVjb21iB3VuaTAzREQHdW5pMDNGMAd1bmkyMDM1B3VuaTIxMEYHdW5pMjEyNwd1bmkyMTMyB3VuaTIxMzYHdW5pMjEzNwd1bmkyMTM4B3VuaTIxNDEJYXJyb3dsZWZ0CmFycm93cmlnaHQHdW5pMjE5QQd1bmkyMTlCB3VuaTIxOUUHdW5pMjFBMAd1bmkyMUEyB3VuaTIxQTMHdW5pMjFBQgd1bmkyMUFDB3VuaTIxQUQHdW5pMjFBRQd1bmkyMUIwB3VuaTIxQjEHdW5pMjFCNgd1bmkyMUI3B3VuaTIxQkEHdW5pMjFCQgd1bmkyMUJFB3VuaTIxQkYHdW5pMjFDMgd1bmkyMUMzB3VuaTIxQzQHdW5pMjFDNgd1bmkyMUM3B3VuaTIxQzgHdW5pMjFDOQd1bmkyMUNBB3VuaTIxQ0IHdW5pMjFDQwd1bmkyMUNEB3VuaTIxQ0UHdW5pMjFDRgd1bmkyMURBB3VuaTIxREIHdW5pMjFERAd1bmkyMUUwB3VuaTIxRTIHdW5pMjIwMQd1bmkyMjA0CGVtcHR5c2V0B3VuaTIyMEQHdW5pMjIxNAd1bmkyMjE2DHByb3BvcnRpb25hbAVhbmdsZQd1bmkyMjIxB3VuaTIyMjIHdW5pMjIyMwd1bmkyMjI0B3VuaTIyMjUHdW5pMjIyNgl0aGVyZWZvcmUHdW5pMjIzNQdzaW1pbGFyB3VuaTIyM0QHdW5pMjI0MQd1bmkyMjQyB3VuaTIyNDYHdW5pMjI0QQd1bmkyMjRFB3VuaTIyNEYHdW5pMjI1MQd1bmkyMjUyB3VuaTIyNTMHdW5pMjI1Ngd1bmkyMjU3B3VuaTIyNUMHdW5pMjI2Ngd1bmkyMjY3B3VuaTIyNjgHdW5pMjI2OQd1bmkyMjZDB3VuaTIyNkUHdW5pMjI2Rgd1bmkyMjcwB3VuaTIyNzEHdW5pMjI3Mgd1bmkyMjczB3VuaTIyNzYHdW5pMjI3Nwd1bmkyMjdDB3VuaTIyN0QHdW5pMjI3RQd1bmkyMjdGB3VuaTIyODAHdW5pMjI4MQd1bmkyMjg4B3VuaTIyODkHdW5pMjI4QQd1bmkyMjhCB3VuaTIyOEYHdW5pMjI5MAd1bmkyMjlBB3VuaTIyOUIHdW5pMjI5RAd1bmkyMjlFB3VuaTIyOUYHdW5pMjJBMAd1bmkyMkExB3VuaTIyQTgHdW5pMjJBOQd1bmkyMkFBB3VuaTIyQUMHdW5pMjJBRAd1bmkyMkFFB3VuaTIyQUYHdW5pMjJCMgd1bmkyMkIzB3VuaTIyQjQHdW5pMjJCNQd1bmkyMkI4B3VuaTIyQkEHdW5pMjJCQgd1bmkyMkJDB2RvdG1hdGgHdW5pMjJDNwd1bmkyMkM5B3VuaTIyQ0EHdW5pMjJDQgd1bmkyMkNDB3VuaTIyQ0QHdW5pMjJDRQd1bmkyMkNGB3VuaTIyRDAHdW5pMjJEMQd1bmkyMkQyB3VuaTIyRDMHdW5pMjJENAd1bmkyMkQ2B3VuaTIyRDcHdW5pMjJEOAd1bmkyMkQ5B3VuaTIyREEHdW5pMjJEQgd1bmkyMkRFB3VuaTIyREYHdW5pMjJFMAd1bmkyMkUxB3VuaTIyRTYHdW5pMjJFNwd1bmkyMkU4B3VuaTIyRTkHdW5pMjJFQQd1bmkyMkVCB3VuaTIyRUMHdW5pMjJFRAd1bmkyMzIyB3VuaTIzMjMHdW5pMjRDOAhTRjAxMDAwMAhTRjAzMDAwMAhTRjAyMDAwMAhTRjA0MDAwMAd1bmkyNTcxB3VuaTI1NzIJZmlsbGVkYm94BkgyMjA3Mwd0cmlhZ3VwB3VuaTI1QjMHdW5pMjVCNgd0cmlhZ2RuB3VuaTI1QkQHdW5pMjVDMAd1bmkyNjA1B3VuaTI3MTMHdW5pMjcyMAd1bmkyOUVCB3VuaTJBNUUHdW5pMkE3RAd1bmkyQTdFB3VuaTJBODUHdW5pMkE4Ngd1bmkyQTg3B3VuaTJBODgHdW5pMkE4OQd1bmkyQThBB3VuaTJBOEIHdW5pMkE4Qwd1bmkyQTk1B3VuaTJBOTYHdW5pMkFCNQd1bmkyQUI2B3VuaTJBQjcHdW5pMkFCOAd1bmkyQUI5B3VuaTJBQkEHdW5pMkFDNQd1bmkyQUM2B3VuaTJBQ0IHdW5pMkFDQwd1bmlFMDA2B3VuaUUwMDcHdW5pRTAwOAd1bmlFMDA5B3VuaUUwMEMHdW5pRTAwRAd1bmlFMDBFB3VuaUUwMEYHdW5pRTAxMAd1bmlFMDExB3VuaUUwMTYHdW5pRTAxNwd1bmlFMDE4B3VuaUUwMTkHdW5pRTAxQQd1bmlFMDFCAAAAAAEAAf//AA8=) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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I0KxDABCsAtDKyCwYFBYILBAUVizBCAFIBuzBCYFGllCQiMgR7AGQ7ACYiCwAFBYsEBgWWawAWNgILABKyCKimEgsARDYGQjsAVDYWRQWLAEQ2EbsAVDYFmwAyWwAmIgsABQWLBAYFlmsAFjYbACJUZhOCMgPCM4GyEgIEYjR7ABKyNhOCFZsTABFCstsEcssQA6Ky6xMAEUKy2wSCyxADsrISMgIDywBiNCIzixMAEUK7AGQy6wMCstsEkssAAVIEewACNCsgABARUUEy6wNiotsEossAAVIEewACNCsgABARUUEy6wNiotsEsssQABFBOwNyotsEwssDkqLbBNLLAAFkUjIC4gRoojYTixMAEUKy2wTiywCiNCsE0rLbBPLLIAAEYrLbBQLLIAAUYrLbBRLLIBAEYrLbBSLLIBAUYrLbBTLLIAAEcrLbBULLIAAUcrLbBVLLIBAEcrLbBWLLIBAUcrLbBXLLMAAABDKy2wWCyzAAEAQystsFksswEAAEMrLbBaLLMBAQBDKy2wWyyzAAABQystsFwsswABAUMrLbBdLLMBAAFDKy2wXiyzAQEBQystsF8ssgAARSstsGAssgABRSstsGEssgEARSstsGIssgEBRSstsGMssgAASCstsGQssgABSCstsGUssgEASCstsGYssgEBSCstsGcsswAAAEQrLbBoLLMAAQBEKy2waSyzAQAARCstsGosswEBAEQrLbBrLLMAAAFEKy2wbCyzAAEBRCstsG0sswEAAUQrLbBuLLMBAQFEKy2wbyyxADwrLrEwARQrLbBwLLEAPCuwQCstsHEssQA8K7BBKy2wciywABaxADwrsEIrLbBzLLEBPCuwQCstsHQssQE8K7BBKy2wdSywABaxATwrsEIrLbB2LLEAPSsusTABFCstsHcssQA9K7BAKy2weCyxAD0rsEErLbB5LLEAPSuwQistsHossQE9K7BAKy2weyyxAT0rsEErLbB8LLEBPSuwQistsH0ssQA+Ky6xMAEUKy2wfiyxAD4rsEArLbB/LLEAPiuwQSstsIAssQA+K7BCKy2wgSyxAT4rsEArLbCCLLEBPiuwQSstsIMssQE+K7BCKy2whCyxAD8rLrEwARQrLbCFLLEAPyuwQCstsIYssQA/K7BBKy2whyyxAD8rsEIrLbCILLEBPyuwQCstsIkssQE/K7BBKy2wiiyxAT8rsEIrLbCLLLILAANFUFiwBhuyBAIDRVgjIRshWVlCK7AIZbADJFB4sQUBFUVYMFktAEu4AMhSWLEBAY5ZsAG5CAAIAGNwsQAHQrIAAQAqsQAHQrMMBAEKKrEAB0KzEgIBCiqxAAhCugNAAAEACyqxAAlCugBAAAEACyq5AAMAAESxJAGIUViwQIhYuQADAGREsSgBiFFYuAgAiFi5AAMAAERZG7EnAYhRWLoIgAABBECIY1RYuQADAABEWVlZWVmzDgQBDiq4Af+FsASNsQIARLMFZAYAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAGUAZQK//+8CFQAAAr//7wIVAAAAAAAJAHIAAwABBAkAAACiAAAAAwABBAkAAQAiAKIAAwABBAkAAgAIAMQAAwABBAkAAwBMAMwAAwABBAkABAAsARgAAwABBAkABQBCAUQAAwABBAkABgAsARgAAwABBAkADQJyAYYAAwABBAkADgA0A/gAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAwADkALQAyADAAMQAwACAARABlAHMAaQBnAG4AIABTAGMAaQBlAG4AYwBlACwAIABJAG4AYwAuAAoAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAxADQALQAyADAAMQA4ACAASwBoAGEAbgAgAEEAYwBhAGQAZQBtAHkASwBhAFQAZQBYAF8AQwBhAGwAaQBnAHIAYQBwAGgAaQBjAEIAbwBsAGQARgBvAG4AdABGAG8AcgBnAGUAIAAyAC4AMAAgADoAIABLAGEAVABlAFgAXwBDAGEAbABpAGcAcgBhAHAAaABpAGMALQBCAG8AbABkAEsAYQBUAGUAWABfAEMAYQBsAGkAZwByAGEAcABoAGkAYwAtAEIAbwBsAGQAVgBlAHIAcwBpAG8AbgAgADEALgAxADsAIAB0AHQAZgBhAHUAdABvAGgAaQBuAHQAIAAoAHYAMQAuADgALgAzACkAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAwADkALQAyADAAMQAwACwAIABEAGUAcwBpAGcAbgAgAFMAYwBpAGUAbgBjAGUALAAgAEkAbgBjAC4AIAAoADwAdwB3AHcALgBtAGEAdABoAGoAYQB4AC4AbwByAGcAPgApAAoAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAxADQALQAyADAAMQA4ACAASwBoAGEAbgAgAEEAYwBhAGQAZQBtAHkAIAAoADwAdwB3AHcALgBrAGgAYQBuAGEAYwBhAGQAZQBtAHkALgBvAHIAZwA+ACkALAAKAHcAaQB0AGgAIABSAGUAcwBlAHIAdgBlAGQAIABGAG8AbgB0ACAATgBhAG0AZQAgAEsAYQBUAGUAWABfAEMAYQBsAGkAZwByAGEAcABoAGkAYwAuAAoACgBUAGgAaQBzACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAgAGkAcwAgAGwAaQBjAGUAbgBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAUwBJAEwAIABPAHAAZQBuACAARgBvAG4AdAAgAEwAaQBjAGUAbgBzAGUALAAgAFYAZQByAHMAaQBvAG4AIAAxAC4AMQAuAAoAVABoAGkAcwAgAGwAaQBjAGUAbgBzAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAHcAaQB0AGgAIABhACAARgBBAFEAIABhAHQAOgAKAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATABoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAAAACAAAAAAAA/4MAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAABAAIAAwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0BAgd1bmkwMEEwAAEAAf//AA8=) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAB3oAA4AAAAAMDgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAUBAAAAFEAAABgRT1pkWNtYXAAABRYAAAANAAAAEQAiwEsY3Z0IAAAG9gAAAAaAAAALApXAH1mcGdtAAAUjAAABrsAAA4MYi77e2dhc3AAAB3gAAAACAAAAAgAAAAQZ2x5ZgAAAUQAABGQAAAZbto6EhxoZWFkAAATNAAAADYAAAA2Y3ZDa2hoZWEAABPkAAAAHwAAACQHxQMiaG10eAAAE2wAAAB2AAAAfE2XAudsb2NhAAAS9AAAAEAAAABAWUtfkm1heHAAABLUAAAAHwAAACAAyQ6cbmFtZQAAG/QAAAGjAAAEsGWnhAJwb3N0AAAdmAAAAEgAAABoOcqzP3ByZXAAABtIAAAAjQAAAKdkQq2ceNpdWAVYG8vazsjOums82bhDFClQWiiUuty6357THpf+x6+7u7u7u7u7u7u7S/lnExK4fWYrazCvfO98syEYaoZCoU9AO4RCbCjU0lt6oaVnmk8732xC+7+/boI30mcSq59DLfiN0Hxob4h7687FWRc2K712t9V0HafV7HXp6LWa3U6716UXWdtyHZcePXpiE7Y/Mn4h3x+dTGFwns/RE/pfBdot+noiKQsIlmwe53Y++0adYyHkWq6BZEZWGEP0VQ1gqRS1DctXMK8QCB78YDmjnuhlurCMibjlXqwjA0n4YCXWNe0Y1K771g99yGJOS2mPfdFzd89MiCzRFHruKoR4xJ9qmBABs23ct/O37R+bsR/2CNG3AMahEAglV38FnwE/GLotRN48nQTNCvADcIPR6bQpDp8l6yOA01t7oNvptem1/gv0tBWQYBHWovf6jNlW/x3Wdfr/XeOmz5xL2Rz+/HzGJ2BcTirVIrcrmmDtTa7Vaun6WF5x84pcVzkOCHVvLAogMKKqkSTnWB4JUFMhf/q+XPiciyDv1vfKcm9B9F5y1oztbCoQT7qsUt68u1VkjFp1M+ODQ6Ju86oK45FImVWUEkOUXV7m5FN7c0dV1WVZ6Bw7/8F3sSrGSKD8GhYzDhGUyEUOCRcMsFvQBSGX7FYJYxyYTKaXb5VRU+H0rFKul+ckTW1HIogyKq3+HNqU0UnKqE0oo7lmgL6PPWBqyNWAniErfbrblIrgmm316emCH6pW85nLWxo79cLJzsMXCQ+dnZAtyLGwxooYip7ChKON2s5uY/+elZbceLUoRLfuy008bGrLM850F1gA0CzWysvhMIc57FRLuuKaduHO6686fvMuK0Edb4RC8DJ8dagT2k4dv3kiIlHHm4HGVF4600BUZyglHWsg5mDXbHe6mbFMhiLoH0yezr7/HNsauifHCwBA5w3XxRPO2Rvb9+ZTj37kq5JHdmFWs8IidzqMEASbt8sAA7EGT2lP+T9ZzexWcneeeVqcAd/mCMAELl5kgZmcvcsvPfriBZcBEBNRMTls/QEgAF2cKUNqhnD68AGonv70R3zU2P00z1YjVIsEdXebarFItZjhAUWWH5i1OTIoZT+41GkH1PfruTkCOxKiNZRwoOD396Ryj9qOTOawyXrimK6x3IFjKblSnPPURDUf25tVds3s6wpNS9Naz9u1eM6u3gquLS40q73dLCjJSjSnhEVWUJXaghcbi0eQJCgJBOTkYd+rT+3WEiLnLBxcmshVzy8EVWqs/gDNUJUOUBwTclClg2lTJFOw22xRhVwruNSl9ZRhB/O3WsH1gfMy61YbQGgGrwwjbRa2M0AupjRG298CkUpnW/rrXBltCmtA0C+eA5yZkOA99/AACeK4KeG3oKWyu5Ah9p4UFpN5kWEMX+UxtnMHGlAg2+DVvoilZBEDALhIpKSKkAEYpHafzANIMK/rUZG8YS5RY8FmjuXFNMJiVmCIf/Cd7xLLUUgRV1cfCQ/DD4QOUcSTdqCcNZztUI5gZIKgDfC0KJjB/Q5hNwBdi6K+hQk7ZG2oN2GfsLyU96d8LDITnhIp1xdviRR2bNKoFFlOnF7iXD2bNhhmeb9hLFUn5fgr7qiNldlingE9O5VVZSUOwZkd491dGMzuvcrN7+Uzek4UTj9z561xFsVFJhCWSRiFg1WCcFuG1d61tdbtr09IgA17mIsetxOCqBrjIiINP/PMwxS7vvoFlKFqXwhcqwVq08mulV8/KIbm7WtMT4NjSIkCbWtI1HrudLo9WpeZUYZ3emsc5AOauv2CBtV6d8pluVSGFyENi6cdH1dYXo3dcSdrb+XEqmnyE5WCCCDIcRkiRnO26N6yYJGikEP6TTey0axF5LqhWdk8W8/KGMYsM+HhLNySKVQUPoF4Vk/O7fMVWZ+/5SDwVt4rqREgIu/Jz33Med6WUJYxxSgDFd4qt6FWEW5+EsLAO36mx2phqXfq/i4EgMFQiAo8ANqjQ2D1RzS9HrRWF5utIGsDWAP0g5INjpHnaez2BqNHCSWZ4ao2XPKa9InWwCjs6CYLVq7DAEBGSOQMJO5rWYWXfQixcjRl7jA90/MdK5FHm+WCgzY5AseI8ayJvQvTp2BrT+7pQsNg5+ZU143H1USZWwQUAyeJcSQxnD8tMQAAzIpymIVedeLhRzcdL2EKUsCeKkaxyPI7ih4GhJV9AoHZmbntUvFQjaceaaw+Ei1T5Nsocg8EHulPfSD4+nJNjzWNh36wN9RRrzdCSR/rX4JL1o238ZDrOKbSacZTHGfVK3dOm3Znj6l6iaQF4a6ZXGIuBpXSwc3Cwop7IssAxk7ELYazyi+Fr4Q8RthIymNPPXS/rDfXaS/xqJ7PpppWGEEZCpyzacEuHyHtl39jjgfEPSoR+pM1P7V0VQj2E/s7NLFzodN0PTq6rABIsY0q/soWpLCh/2Do5cESGsDuZ3k/4tYTY603o4kxygYnkBuIAtSIFK2MJQDXsVgBCq1KVpaxFdUG7QZ4rigATSKo+uIxW3ZTZ3KiVJ7mSco0sHn/vTJqN4p7GZCqvHdHNRlPJ+D7oZKcuHDxBQ/ZDfUEz4DYg591v3P7WF4ZNha38bwqq0C8ZsyypezS+RcbTCaluyrHT+wC2s7JT04iDmYK7YcmdJiMRRJU8xTl5vGUm51U87lsPxcGOTayqktzwe2bfIh41I9Spkbp1x/DNdC2BpyCv+NeTGmUInFdd1gS6R0/0VBkjovmwgrUrt2kugkvc7RbUwWtaajJbM6uV9OVwxeghGcs6lC9oamQZWLcNrl809ItC+WGyAPPg7LjGp4ApbFDMsKMqyLAaxFeSWYP73v9kfnaIR60FF2KepLuUIyx1c/hW+CHQ9dTjPca+LovozuU0hxhY6FtBRdH5yOwHcoLNTdLNtZAX/hCcGVjUQQUuM6w4QXPMwmDGb+tqDYDd5v3/IGGNyMxMlsjWCCcE1Fs2cnFGSGiyggCLg0Z4vAv350+xmLCcWwpopVlOTvZKebSiIv0CExwLMOYBYnLLM6HiWDA92OExOS73zSen9xlPxjEswC7hrq5dvmfD10yZKxJsiGKJgGqXExE2SjznPfyhESEDx3IHsaIlRd2jb2gN/GMpz56rseDuMqx1QQtagIY9yNvfFNKMGkq/pTuYr6M7P7aWQ5RDl0/oORKsAFtA2bd4HRoiX6IrOeCbRXawS8YUNZ30nCnM5OaMCSOArfzCmun94Ux5oqmipjxxW6bsZK5esNtH4IakrkYb3SzUcwYRUoyAGyBJqVUrxfreQ4y6almI9z0PaMmDaAo537+/RSneCyyX/fWpxzl99z90Jc8xGvzQFAqCR4ZCs/3HvClL8oAQAigGiPGytnr77zbBij5qpc/oeZRH02t/grxtFYWKAd8wAFobtyEDAJxQ6H07wz9NOzFr1wfuvDwkWOe/4ZbFhYna3PbgNRYfnTUxkRHfHz/jRI41Nw20Z0+79rbd9qeXknyYjJtccnW3ust+MG7z+9YueGtpbATv9+xFH9x3/0P6gwQGUI3Oi+7yKceM5+LxO+7srBw9AZJr6xYYhwKFNfkCQMOOsCPw+/SvN8V9EMy2NijB8tW02m2Rm36aM2j9wZY6B4rM1oQAuyGOQs7eXo6OEZ9OkxU8pUEvGMmD/mOF5593h4Hw2gxfPC2mJmdeWQcRo6URKFms6J8kw8wgmjYvW/s1gE3XRpnla3zcbs9iwiGQswAZGE6lx5LT4i/+/slTYsAQAiTBiZQ2XwMADBs4ynWW1fvi0yq3XGKdYsfaDdI9XWBev3d9hVN3lBflh1mxZUp2N9rrm1f1iwPX3z++Ildix5Xy8/VxlzFAlLsQe1q6uzh3gv2JZJbO2eAfL+j8wsyWj6zxbVZhvMLCtKun9LcfKVx9YlxXzZUKybkDrfbhdaRWAm84Ow9uxZPxjN7ajlbBDIvJQpa7Z7bbl6+t8Jk5p+YEq5/86aqS5CX1h2F9yWGH98lIE7IpQiWBMXiEQCSaIWPdA8GulMfL8JXhS5SLhriRt0DdP+7N1uPyWH/MwQ+GH5nFvaaGzzh2/+7pBpm5wpL6Hftb+4/ePhirobk2XTFaUGkR0u6lzCSmpSqGYnFk9G4iPNJPZ0M65YGo3kXm2j+qAT9ztNcCBNnHGawpIp3RpgrzdI7bilqODYpq8uzflh2MRPefNbNqJpaxKKc3u4SwLfie3dHdaSIYQMAwK1McWbdyQBF/es/emKwtqIIyIIcN3LQgDXaF34odJCydrAwrP5hLQ/Q50cbvnUOR44asKdCYvcJHbwxGKM9PPjl3DGGEeN5A2JF2eYfCzO5aG97ZhJJzWjkugfePmdXKy2HUSMMIsDsXPXAggyNa5fdcQFCPpa7ZwnDD9TGZccU41iCgqx6mmRu1+VyJhzxE/U5WZluh/Xt+6PZmWoFiTzjiEjU3LC3ZX84abCb276RqxHT4IqZ+jyBFLe/+h40Dz8b6lHcJgDrnVMfuY3WMPYhzMIARb9bGtXIsJjgz8YiuqZNx9wL526J5MyOKKtc1oJTkxjy8N43yKqF2Jolc2o0eWtP/DV8tc8rlukTBsDL8yd35A0sMsr+Ze5XP+KgDDFTNBlWThJGy+arW9gg0VZ/v/oT+Eb46v4q1Wb6zu60hxW7cfM9bFZpha8Z3Vr/4jbYkreDq1dG+1ovGNa3Tm3qRNXMjCpksq6//OY5R45joW7xmCWc1ppxMOaEhKoxJy3DCTcQueW6xUlN0blsQTTn6iovqo4VhwuSl0m1M9uKex81lfYrbWfsF/ctZ/czWhgibCULd//lwKLKYkZRknniOUuvBJh90mKFii3M1dPlLU+4ppGwNFG2gjwPr34aPomin6DoSzBA317PsNawRoOabQ/b1AHEkUzDb2fhseh05agAAYia1z3BwrWU4ahYqnex88Sd5086BEiQV6eSJV3V4F2aXzxwec8FXnb002/eLEqJCvTsJg/xQluMPfh1R47sFWCYKJXXzXz6cE1g+jP9KBboTA/TmW7635n2ZtGA6NFXPTrcDey3NyRzYL61DCYsRKNVtdOuQ4piPH62EjEAJLxIbjg6jyBgapaEGGdRBSjRuxTFyahkq4RoUhuGP3CjpxKAuEkDIfysHzu8QjhZlxNTRRXeZaQu7b31/H0goMLxT3z2TRwiHKPFCbvjh38ysL/rRadlLZ5r1nhIvIOG9pLLl5+sCgqz/LOvrxBy+ZuX/xwFrmqET991auLUwbFArXYohAqUg2uCr6RcUFeD6Y9AU33c5gBNX7LWKG/634iHq5YzMinNkTocLmrB04MPNevmHTSsGbDgF00gnZtKmI7A8gACUHuSBMPqdDwcNbX08iPDnMDIBYZLZkUOiOnmiq0mLRLslAF7vxs5GEMcYsUxNxwrRbIzj61xnBCDIoRXF6CEUamp6cXY/QSbkNjJKJZTWNJK6WjCc2LTB1UGHL/LmOCSkOVzVo7VVnYIhJ8tHthuYzlLFRX0aDqaL0UijUNR8ODerAhg/5vyLfBTlK1lylZlY2W7jm4Re8hTfy3euHRv7M66o1a1Q58d7mAOGFZr4WDzEITFRzfEcU1WTImwqXCViz3xup1PKGLOMfzxqIfU7SKp7NMINo57JYGPwRVZtDqLt13+hbzM1577BF8b10nYzhNoZbYlUtf/+vrdFwgg0nzRrTgLBAB+C13Vzm+t/nqbxQA+WFNyoRBcXfNAKegoWwMD9zL9NaHX6v+/X5KjrnGQWwOTuPR//a+j1qBTW+vRKKyNG7fulbuZwCMtJfLSR3tjDTHL3ZW6ylPCpa27YrmMwMYTUVPn/QfMApOtLS7YdlUx7ePnI0pDglldgEJZ9+5/K5PZdOFgy04LpBEhkgKN1Nxxwe9dfbGRiNiC5D72oR4gnKvi9HVJDQiim7RNG4psTmosMUDkAbCBEb7hQgxAhyAtCgBDGATcu89hIHCoWjLTLOShNFHcY0JBFKT/B7cQyZN42mNgZGBgkGcoY2BiAAIwKcHQCySl+HhAAgAX5wF0AAAAABIAEgASABIAiwE0AYsB+gJeAtcDVQPqBGcE0wVhBdMGdQb3B18H1QhbCPYJcgnICkcKnAseC7UMIAy3DLcAAQAAAAEAAL2P45NfDzz1AA8D6AAAAAAAAAAAAAAAAAAAAAD/4v9xBHEDFQAAAAgAAgAAAAAAAHjaDYonAoEBFMd/3tNsyd6SPZIz2LrmAt9NdFknuYIkaYqVZft7+7940QbwDMAwmiEjS7ISwq9KVMLGD/ZnVHVARPL/i6xpyMv0LTnvhpR2/3dN0ZMdUW3h6Njyc9s8BXH+D1kQ1xNx2dOVFVk5UuYFLhwcF7gAAHjaY2BkYGAW/V/IEMWy8f+jfw9YCoEiqEAeAKZdBu0AeNpjYGLawDiBgZWBgamLaQ8DA0MPhGZ8wGDIyMSABBoYGN4LMLx5C+MHpLmmMDgwKDAsYFb4b8EQxSzK0K/AwNAfxwySZVoNJBQYGAH/OA9wAAAAeNpjYGBgAmJmIBYBkoxgmoXBAEhzACFIToEhimHB//9gliOI9f/x/8P/64BqoQAA6/MLsXjarFbXettMDh2quVeVFKaAmcjrNYeK090Lx7Q23fX7yK2kJed+9yrPwH0ZUOl3+2gLkJJ7+ZtVMIMywDnA0EKhAMW+7wUAb36I0e03WNr9q4/PTJwOwo8Q7/uYq0c/+0W/aLXkgWlZKAIUWm50hCF06DpoKITwo4M5JS1pOZhX0P6cr1SFq7GsIQzdJFfRblLPa8zpvU+Aw5IWOmpjYetTJ5fL0TFoHd6xWNsZrRruHaCldDtlo0w2iWLLPww6NYM9HSwozNtY1T7nw5rWXQcT2oD/28LC1F8708aI9loeljzfwnw92PmbT85m7ANubZFqjbxxjldzQQBJ5k0VTZOquwOcZfssedKpPhAbcQQ4uOWHpAG2DfLqBa9ehGYYBIFJbOGwbqHY8VG8YWeL9uYbvMere2+iH+OixR4/iuIgCNpRgIYdBF0EAbQJj3QDB4sKqIJCPSJMfXrLxz7pYr90qQMUEjpYSukmJqCd9B24wEaGa2bl8zf5eS0szlhk1BBDTLmS2WKdGNr2wy0z2gl8GVgB4NquTzaTeOmV4mCfwgFtd0Qua3M/baUrAYV0I8wdfESjRQmwb8bBAQVc7SjBKogD4BNwLQzYJdxIqx1UnYFRoT13xjoanCF1epCGs1MMW5KeoIfgxTKCdpdsYXJDEExcOyKMWiujjSzFyCXh+JCiBEVdFDSqUkCfR4ZF3qMsprSCGRriMZXkch62ow0HxxW5AuCYfs0H0II6hOO826HdeNqvCUWrlBQgDlqUGSd0CHEIOEG0OTip3uz5SaG9ETzEkUP5ycGyerPtv9nNlKZF+nKqr6hETOp9P5mcpBZGLk7YAUPK1d1kjL/G6QuNmgRCsuUnTB/hdeMYOO34jCUprLc2MzuF0CfVBISkSfU3SXu6WZe0MBGiLIkvjWKlYxhG2q2qEonIeXs+TkoXPByVLo5IYsqF8PvNm4aYEGXhui4zUCGbESWVfhv/a5sPiK4aYazaDt5QicHyJvHN8pZK8ixvq6TA0lRJkeUdlZRY3lVJH8t7KulneV8lAyxtJXv8YykkpiU00PgH3xYH1Qlj7cj478zonDBOHRn/kxlBCRyzL8VJoL5mUBnnSXwW4QOq6wHhYykJH8uHhI9lnfCxnCJ8LP9E+FhOEz6WfyZ8LGcIH8uGgqV0YB8pSnszBM0laG4pSWzwzM4qfGTjI7qPjxVAEy7ppozmJD/Yr/QwGf2TXouT0ZLHE4ePZ5KiUfX82SBF+TSj50qfZwqep5U/V6Lr453PiYZNtVysF7Uvgv82VuRc8syoMtYXxAc0L6kfhY7mHHypGjeWHJy7zhUN3SL3eWqRqNWhAU0Ukm/LqzhuyqaMwD8gPtCQbmfOMKoVYnhBUVl4g9wKdXqnbsmwcHFI24dxQwIsxXTm4mk3aGTnYUm6PW/AkJ8pa9v+5wIUwfxcmCreDlxXAg5qiGUaITdDLOmz1zUEoif7r1TQYVtiUUdtMhd0ZNI65Cfd2ZhIAnlPyU3qsaQMm4STRJolhIuSSM4iyRKSxGI9os9ZJzqRi6hzEXn67j5Jj3MFDi71uADSFqe6XMglomm5ZyLMqX1TNjkpd3GlZ0vBZEyj2PMbsCQtkzQ9JR161Aos1Wn36uRvl6yJF017t1uSR371RCW6166Qf+Cchdxr8ZqS0GAWN/GG9rfMncCHpaCRzBoV28H1U9Ydc+uU1b0w9qoIrXDBvirhhsJFO6baeMYI1KWu1NAGzlKEx5DT+ZzKmI9wWLoZdB5QCUvQkHPd8zdVMliouxTyW0a6+UdNMWOKCN2SpEfViXmxgm6dTZWIBbvHyl9ot2hbssuLnDtNwSuioJpd+47gG15u4Au65a8v0b+h44xKGV/S+q3CeRLvmEWP6IbNWEY9tt4rHmj8f891kRY7FARQ+NYTdAlMmRFWgLu7Nm6Nuzbuvpi2DVKnKmT233wn7gPKoagQQqdiWCFgJCpIAKMKAWM0XYpxGjBBAyZpwFRUDCG0qaZVYkpFRfFpMyoxzdIJmqMzzdOZFuhMi6yzQ7GkELDMOsGKQsAqTbdijQakacA6DdhgfaFdtakS0xbrM22rxLRDJ2iXzrRHZ9qnMx3oMa5PTuChjXLNyiNni/KYg26jVh2dRHmJm1PozZk1EjfnOnNDstQLRj5HBvocl9DzK11OHFxDD26gB7faNibLu2Pk+T30/AF6/qhzxsET9OAZevCibVOyvFdGnr9Bz9+h5x86Zxx8Qg++oAffUaHSvmxzJVWFf3/+duhPkz4GU601ubJ07m/1cOb3ZV37A0STAUQAeNo1ybENwjAQheF3iQEDKAUtLRIoU0TRdVQgCqdOBmAEGiQ3MIsPN44nYCvAWFz1vf9wCHidjBA9OkejhkZ/EczaJwh1gl8pWmSti590G8sGhOXX8zYie0QJsGzJHo1rrEl7YNmnHTRyAHcb2aUU9RWkGtuf/490vlJU1YHeN6fuUoD9ZJiC+QOZiyrSAAAAeNpjwAZSgNCVwZXp4P9XTKIMDDAaAFF8BtkAAHjaYmBg4GQoYmBmYGThBLIXATGEzcigBORB2EwMfAxHIGwgGcRwCcpmYTBiVIGyWRmcGMOgbDYkcV6mIsYZUDYfgwkLoFWySI4gimGo1nOK3oWZmZk5u9QwM98+bxRmLH/Qd8uyy+6Q1lRUSW2yppVUSjUF6lZUPdyjGsZmNGA0wg60rriq5hZ4ncFM4ylwx9WPZ8d4UF8qozf+qDyNbw9O2KorsMKKoZgnfg98Dr7WDZph5axXAZWISMM9VRxPnS9h/JvkLajmu4I/7nyDrn6W/bXewEvFX0Rc8qq4T9RCzhENsudANSwBp85ddHThvjMNs6bZY+r54Vz6fzCZjs68mrZBOhxWDf0Md4u3e6ZF8vzfBF9mzN6zwi84zzP3KwQz7boCd7bqfjY4Y3juJww6RCGP9+up+p/Ezv2qvlA5AyVATc+uo2aGNegerOp95jo45loCVxd39I72uY/IBPeF8v4LBabwwZ8x+KKyl3kDhdVgp/1vRTjxPetP2BlXdGJc0yxazAorgYewKmrMkHcNPMhG67HjQzoifv83MbfN8rvYAHjabMEFAYRAAACwvbd4dwMOt3QEhwJslsA4COYcsLC0cnVz9/D08vbx9fMXiSWCVCZXKFVqjVanXyx300rzMg0MHA0AXdgI8AABAAH//wAP) format("woff"),url(data:font/ttf;base64,AAEAAAAOAIAAAwBgT1MvMkU9aZEAABuUAAAAYGNtYXAAiwEsAAAb9AAAAERjdnQgClcAfQAAKuwAAAAsZnBnbWIu+3sAABw4AAAODGdhc3AAAAAQAAAwMAAAAAhnbHlm2joSHAAAAOwAABluaGVhZGN2Q2sAABq8AAAANmhoZWEHxQMiAAAbcAAAACRobXR4TZcC5wAAGvQAAAB8bG9jYVlLX5IAABp8AAAAQG1heHAAyQ6cAAAaXAAAACBuYW1lZaeEAgAAKxgAAASwcG9zdDnKsz8AAC/IAAAAaHByZXBkQq2cAAAqRAAAAKcAAgAyAAAAyAIVAAMABwAAMxEzESczESMylmQyMgIV/esyAbEAAgAe/84DMwLYAEEAUAAItUxFPhcCMis3NDYzMhcWFjMyNzY3Njc3MzI2NTQ3NjYzMgcVFBcWFxcWFzc2MzIVBgcGBwYHBiMiJyYnJicmJzUjJwcGBwYjIiYlJic1BwYHDgIVMzc3Mx4fDQoDAikVCQQlTJtuEQgHAgIIMxcSAw0FDQ4FEgsiDxABBAwpGxUSFCIOBAkOBgIBg4MNIw9cNyM2AioEBgtCVQcWDQEMCsErHDYTFRwCEGva4SICBwQIECAQjaKdTj04CwcGEA4ECBAXDgYGGAYiOi8TAgMBEzQSfTX2ScY9FYaICyIUAQQEAAABAB//6gKYAsEAdQAGszsfATIrASI1NDc2NzY3Njc2NTU0JyYnIgcGBwYHBgcGBwYHBgYjIiY3NDc2NzY3NjY1NzQHBgciNTQ3NjY3NjM2MzIVFAYHFDc2NzYzMhcWFRQHBgcGBwcXFhYVFAcGBgcGIyInJjc2NjMyFxYzMjc2NTU0JyYnJiMiBgExDR8OLCgITRseBxU8FxQzMxERMCYOFyYODS4PCAgBCi4YMBsBAgESGw8SHwZiBwkDCgIQDwIJX30IGWIXAwIJFy5QDQ03RAsYpGETHEwyDgIEORcHDipATjMoBRItLEAFIgFWCxEVCQ8PAh0aGioHDg4pBQYOTRgjXZU3P1kPDxcHBwIWWmTBugcPBAQDCg0BDBIUBTECAwIMBmgIAwpnEgFOChEKCiUfNiwGBRJTOR8hSHINAzIOCBEkDiouKj8MEA80GhoDAAEADP/nAhUCwQA5AAazFQYBMislMhUUBwYGIyInJjU0NzY3NjY3NjM2MxYVFAcGBwYGBwYjIicmNzY3NjU0JiMiBwYHBhUUFjMyNzY2AeEPFDKZSEIvTBEnXTWHRQYJAhZMAgcnDRwZEAcLBAILGA4FGRsvLUw2L1JPSjMNL6sLChtDUSU4hjpCmGA2RAcBAQM+BBAqSBkZCAQIBBYsKREOFxMVJ3hsZVtwTRQeAAIAEgAAAv4CqwA1AEkACLVAOBoMAjIrEyImNzQ2NjU2NjczNjMyFhcWFRQHBgcGBwYHIicmNTQ3Nj8CNhM0NTYjMCMjBgYHBgYHBgYFJiYjIhUUBwYHBzM2NzY3NjU1NCUJCgEBAhawax0eFmFuNGMJIIuJqh9YTQQHEBQZCwhfGQMDAgFASQ0BBAELLQJeEJR0DQ8jTg4leGCWHQUB2wgGAQQGAkVoBwETHz55IimLaGcXBQECBAYLDhMIBBTwAQMBAhcEIyoCCgIQGSFXUwIPX8vEIgMvTpYYFQ8aAAEAHv/qAjQCwQBFAAazPQkBMisTJjU0NzY2NzI2MzIXFhUUBwYGIyI1NDc2NTQjIgcGFRQXFhcyFRQHBgcGBwYHBhUUFjMyNzY2MzIVFAcGBiMiJjU0NzY3308gJYpJAxMFVxMHGAswERAHCFNaIA0rKD8YDx4sJhxQJA5NPVE2CjIUEBAznk1FYhUscgFqKEQyLDdOBwEpDQ4bJQ4ZCwcKDw4tRBgcMB0aAwwKDh4DAQ0fVyIYLjpOEB4LCBZEVEc4JSxkRAAAAQAS/+ADPQKrAFMABrM4DQEyKwEGIyI1NDc2Njc6AjYyMxYXFhcUBiMiNTYnJicjBxQHBgcGBxQzMxYXFgcGBiMiJyMHBgcGBgcGIyInJjU0NzY3MhYXFhcWMzI3Njc2Nz4CNCMBDSggEAUQUjMBGis1RiHXCCoDPBkQAQoRaGIBCBMeDAJ7ewkBAwoLMRMMBLQDRyoXRCMGFU8gBAsfJgsFBRIiDwkEBBUlUy8CCgZGAmYiCwQMHygEAQEBCBoaKQ8LAgUBBAEgTl0mAQIGBAkRERsLBrA/Hi0HAUAIBwkLIQMECyQKBQYiVLm6CyobAgABACz/iQJXAsAAVgAGszkVATIrExQWMzI3Njc2NzY2MzIVFAcGBwYHBiMmJyYnNDc2NzMXFjMzMjc2NzY1BgcGBwYjIicmNTQ3NjY3NjMyFxYWFxYVFAYHBiMiNTQ3NjY3NjU0IyIHBgYHkEhHJiI6IgQLBTgYDhoqLkVxGidLPBABDR8kCAs7RwgXESQhEgUFSFISEkcsOQ0dqHctMCoHKCYFATcVICQPDQ4dAgFgSzE2TQQBPlBlFyZQCSMRJQsKX5lMch0HAx0LBQoOHgMFHhInVCwGAwQ0DQIsN2otM3avHgwBBxkYBAgbWxUeCgsPEjELAwYvIiOZVwABABH/0AMjAqsAZwAGsz0QATIrATQjIgYHBgcGByImNzY3NjYzMhcWFRQHBgcUMzM3NjY3NjY3MhUUBwYHBgcOAhUUMzI3Njc2NzYVFAcGBiMiJyY1NTY3BgcHIwcGBwYHBgYjIjU3Njc2NTQjIiYnJjU0Njc2PwI2ASwuNjoXBwggIwkLAgQWLJZbMQ4HCQ8cd3gHFUMICywTEwk4KycLAQIBJQgjBgsbJRULF3FEFAYoCiUDEW9uBxskFAYNLhIQFCQmBy4kDQQCHBQTHhgEJAJCIycrDgkeAwkHER8/USIODRFBcVQBGEq9DA8aAQsDGJOdjGQJFQwDJAUTCxsFAg4JFCo0AhArCnCSAwQBGFtgNwcQGQw3Xn8XAgEBBQQCChsKCQEBEIsAAf/iAAACggKrAFMABrNAFAEyKyU2NzY1Mjc2NzY3MhUUBwYGBwYGByInJjU0NzY3MjYzNjc2NzY3Njc3IyIGBiMGBwYHBgcGByI1NDc2NzY3MjI2MzMWFRQGBwYHIwYHBgcGBwYHBwFKawQBAQIFCh4lEgMLUTMUJ6bCAwcNGyATSxMYExgiFhQeJgNADScWAzwWCggFCx0kEwQYZzteAjNPJZcKLxIHPz8PFxcdHQ8eKghFAQIBAQgMCx0DDAUIIjsMBQEBAQQHCw0ZBwIYLDiHWTxbKQQBAQUKBBgPCxsECwcJSygYBAEGBw0iBgIBEzU9dXMoVi0JAAEAL/+JA0gCqwBGAAazGAEBMisBNjMzFhUUBwYGIyIHBgcGBwYHBgcGBgcGIyImJyY1NDc2NzYVFAcGFRQWMzI3Njc2NzY2NzcjBgcGBwYHBgcGIyI3Njc2NgJHFG51CQIINRYTDjUyHSAICBQuK3g7ExU1TxMPGB4fFAICTT0lHj8cAg4pVEAKREoXXCQFAQUVHh0UBQgUKqUCqQIJBAMEEh8NMJVWfiQYPzU0RwkDLiYkIDIUGQMCDQIKCBY8RBUqWAY0p9g/CQEGF1kMBhMPGBAiIEdlAAIAHv/qAtwCwQAlAF8ACLVZSA4BAjIrATYzMhUUBwYHBgcGBwYGIyImNzQ3Njc2NzYnBwYHIjU0NzY2NzYFIiY3NTQmIyIHBgYHBgYVFBcWFhcWMzI2NzY2MzIVFAcGBiMiJyYnJiYnNCY1NDc2Njc2MxYWFRQGAQsKAhAGDBsrMB4BCDUUBwoCCjMrJA0NBBQbEBIfBmIHCQGdCwoBEAwGAyyjMBUNFyBgJQsMKjsJBiATEgQTf1ANAzQvKFAFASArvUssHx0hHgK/Ag4fOGdooIROAhEeCQUBHIOafmJRBwkOAQwSFAUxAgN1CQkPDQ8BC2kwFBUMJEdkoxIFIyARFw8ICThNARBMOck5AwgCIyc0hR4RAh8cGh4AAQAg/+oCjwLBAEwABrM/JAEyKwE0NjU0IyIHBgcGBwYHBgcHFzIXFhczNjc2NzYzMhUUBwYGBwYjIicmJyYnJwcGBiMiNTQ3NjY3Njc2NzY3MjYzMhcWFRUUBgcGBiMiAfcENxwOLykaHRERFgcGGjdbXC8ODQgIGyUZDgIQajwPFx4YI1k2LQ8KEDISDx8kJRUuLCErV2cCDAQ9FAYHDREvEA8CBwUcCEYNKm9HcUQqLwsJARgYAg0WFxIYCgIMMFYNAwQFFw8DAQkQGgkOHyRXUa9YQS1WCQEzDhEMGxgMERYAAQAc/84EcQLDAGwABrNVAQEyKwE2FxYWFxYXFhcWMzI2NzYTNjc2MzIVFAcGBwIVFBcWMzI3NjMyFRQHBgcGBwYjIicmJyY1NDY1Njc3BwYGBwYHBgYHBiMiJicmJyYmJycGBwYHBgcGIyImJyY1NDc2MzIXFhcWNzY3Njc2NzYBnhMGBQQFIjQODxUFAk4Te/AeAwUFDAUNBy0GBAoGCBYaDhUNFiUdBQoaDw0DAgEIIQIFBhYJp04hWgcEBggIBykaECoNDSQ5NSglIQMIGjcGAh4IBwUFEycMCCNFQRkGChICvwQDAwsfu7IxJjlNFYMBHSQBBBcSD0At/vmFRxINBBAMDRILCxMGAQ8NKB4bBxsFnL0JBgYaCsJTJFcEAwcNRE0woDc4mJWLPzcJAR0PCAcsHgcGFQYBBRfEsbIgChMAAf/l/84D0wMVAFYABrMqAAEyKxciJjU0Njc2MzIXFhcWNzY3Njc2NzY2MzIVFhcWFxYXFzc2NzY2NzY3MjYzMhYVFAcGIwYHBgcGBwYHBhUUJzQHBhUGBiMiJicmJicmJycVBgcGBwYHBj0gOBIMCAcEBhUmDgcVIVEZBAQIKBMPAwUxRTY0BRQfJS4vFzRWAhADDQgcCRI2JBsEBRIoNzYBAQEHJxYKCAwuLiguJggCBSE6Mi8ZMiIYEi0MBwYVBgEFDmLn3yAIDhgHAxWutZRZCU96haSEGDQJAQoOKx4JAxIOCQk3gNLRDQEBAgIBAg8cBhJKYWx4ehUBAx+qp5AtGAABADr/6gMJAsEARAAGswkAATIrATIWFRQHBgYHBiMiJyYmNTQ3Njc2NzY3NjMyFRQHBgcGBgcGFRQXFjMyNzY2NzY1NCYjIgYHBgcGBwYHIjU0NzY3Njc2AldYWhgisHFERTktP0YBDC9IixsVBAYRAwkdUm4MAVYyRjg2O2QXFUlMFRgRKx8JCx8hFAgfM1BsFALBemRLSm21KRkWHX5aIAloUX9UEQUBCwUGEREwpmgJIIxBJRodfUpERFltDBErShQLHQIKBhJKOVwSAgAAAQAS/8cC3QKrAE0ABrM5DQEyKxMiJjc0NjY1NjY3MjI2MhYyMxYXFhUUBwYHBgcGBgciJyY1NDY2NzY2NzY1NCcmIyMHBgcGBwYGBwYmNTQ3EhM+AjUmBwYGBwYGBwYGJQkKAQECFrBrAh4rJiseAnc9JgIJNRgZPp5PFgQCGygZVHUcEyQ9iR0CGlgpCwotFQcLDW8iAQQDAgNASQ0BBAELLQHbCAYBBAYCRWgHAQEIOykxBw5DQR0VND4DBgQCChwSAQZEOyUhMCE4C+73cxAQGgEBBgYFIQETAQ8HJhwBAQEEIyoCCgIQGQABAHL/fQMTAsEAWwAGs0IiATIrATQmIyIHBgcGFRQXFjMyNzY3MhUGBwYGIyInJjU0NzY2NzYzMhcWFRQHBgYHBgcHFhcWMzI2NzY3NjMyFRQHBgYHBiMiJyYnJicmIyI1NDc2PwI2NzY3NjY3NgKjZFtcTUUYCC0mPy0wFw4UAQwcgjQsIGFXN6BRHh9DNWABDX5ZQUQNA0hgQhcVBwUIIicOAxBsOhAXJisvZlwxIg0SDxQcCiVXNDQnM1gcKQGgYXtNRV0dI08tJRULAQ0JDB4nEC17dXBIYw4FI0GRIApsszwsFwYDGCERFg4JIgwFCTFNCgMICiUgBgQMCg4UCQMBAQwLFBlYNlQAAQAS/+oDRQKqAGgABrMvCwEyKxMiJjc0NjY1NjY3NjMzMhYXFhUUBwYHBgcGBxYXFhcWFxYzMjY2NzY3MhUUBwYHBiMiJyYnJicmJyYnIjU+AjcyNjc2Njc2NTQnJiMiFQYHBgcGBwYGIyImNzQ3EhM1BwYGBwYGBwYGJQkKAQECEXlSMlJUV2glLQMNPiErFjMCAxEbKREYHhIfEAwgLRIeRV0bHQsEJh8RIR8ZERQQAhsmFwQTA0FZDAIiNZYXAgIeYBYFCDUUBwoCC3gaBUBJDQEEAQstAdsIBgEEBgI3WxQODxkcOQ0PSD4iGQ0XBAUZQGEXIw8QDygECw0hSRcGAQkzHVBOGxEDDgsZEgEBAQhKOggTLhYjAQ4P9fg3CxEeCQUDGgEkASUIAQQjKgIKAhAZAAEAEv/qAoICwgBUAAazVCcBMisBMhYVFAcGBwYHIjU0NzY1NCcmJiMiBwYVFBcWFxYXFhUUBwYHBgcGIyInJjU0NzY3MhUUBwYPAgYVFhcWMzI3NjU0JyYnJicmJyY1NDc2NzY2NzYB6T9aBQULHSYSAgQODkYiWhkFJRs3SSM5AwwyGxprgXY/FSwrMxYFDxoFAwYBEzVlgScNAhJqSBcxCgICCRwle0cEAsAtMQ0WEwsdBAwCCg0PGBAME0kRDSojGRoiHi4/DQ47NBkRSVIbJD0sKwMLCQUWCwMLEBcZGEJSGR8SB0A0IhIlLQYTEggoIy5BBgIAAQAi/7wDQQLNADcABrMTAQEyKwE2MzIVFAcGBgcGByIVAwYHBgcGIyI1NDc2Nz4CNzY2NyMiBwYGFRQHBgYHBiMiNTQ3NjY3NjMC5jAaERAQOxwXZ2JxGiUTNQsNDwgkFAI6OQQCCQJjbQ0PFAMHLRQNCA8bH3I3C+sCqyIJDhQTIgYFAQL+QV1LJhIECwUOUkgI6uIIAg0CBAUoEwUHDR8GBRAkJixCBwIAAAH/7//kArECqwBWAAazNAUBMisTIjU0NzYzMhUUBwYHBgcGFRQWMzI3NjY3Njc2NzY2NzIXFgcGBwYHBgcUFhc3NjMyFQYHBiMiJjU0NzQGBwYHBgcGIyInJiY1NDc2NzY3NjU0JiMiBwYZEUM6PDUbDyM9DwojJBciSLM/Fg0dBAouFAkEBwYIEDM9FgQECAoeDxAFXRQSFhkvAwZxa0U5EA4RCCQnCxM/Lg8JCw8WFB0CRAwYIyA0I0YoUIo6ISIrNBYw6H0qJFIFEBkCAwQUHyd69FNFDwcEBQ4OHyYGGBZHqQEEB5JFKwoCAgo/LiEqQpBpLx4UEAsNFAAAAQAZ/8sCkgKrADgABrMpAgEyKxM0NjMyFxYVFAcGBjM2NzY2NzY1NCYnIjU0Njc2MxYWFRQHBgcGBwYHBiMiNTQ3NjY1NCcmJyYjIhkwGzsrWQoCAQEbE2uQFAQtIBIWDwQMLjYEFpFMZF0WBgEMAgkPOh8pEQ8QAnkQIihT/k9nCQ0WEV+zQAsMHisCGBUyCQIERDQLHIOuWFhQCgIZBg4rrj3LVy0KBQABABn/xQQKAqsAVwAGszwCATIrEzQ2MzIXFhUUBzc+Azc2NzY1NCcmNzY2MzIXFhcWFxc3Njc2NzY1NCYjIjQ2NzYzMhcWFRQHBgMGBwYnJicmJyYjBgcCAwYHIjU0NzY3NjU0LgIjIhkxHWErGhIBAgYJCwZtWUEDAgEFLRQMAwUWRQ8BAx43cxsEHxsMFQ8GBhAMNAIZwG4YDwYBAwg5EgMDBJrjFgkOBggNEQ0eOigPAnkSIHNQcmR8AgEJCw8JkZtvCAMGCAUQHQYHS+HyEgQiTaJfDRAdJTItCQIGGFQSEKT+/pMPCg4FSObXSgYG/tn+8xsBFw8SGV95XjheVDAAAAEANAAAAycCqwBpAAazOwgBMisBBgciNTQ3NjYzMhcWFxYXFhYVFzI3Njc2NTQnIjU0NjMyFhUUBwYHBgcHFRQXFhcWMzI3NjcyFgcGBwYjIicmJicmNS4CIyIHBgcGFRQzMhYVFgcGBiMiJjU0NzY3Njc2NSYnJicmJiMBRCIoEwEMYjoeExYKBwkBAgEBLZIMAhkPOx0ZGxMQIUiJGQgKBQ0nBQgfJAsIAQshMkoVDx8UBgEBBQQBB35uCAIcAwgDBwswFxkcKRokPY0tCAgKHAILAgJmJwIMBAMpMhARKBx+ChUGBhxdGwQNIAQMECkhGx4YFhw7VA8FAVt5EjgIHwIHCSUUJQcQSksKBgk+KFNJFQQNJAYDBgoRGyEbJikaGi9WGwGDNz4LAQIAAQAf/3ECygKrAEgABrMrBQEyKxMiNTQ3NjMyFxYRFAYVMjc2NzY1NCcmIyI1NDY3NjMyFxYVFAcGBgcGBgcGIyInJiY1NDYyFxYXFjc2NzY1NjU0JyYnJicnBwZTEhQzRFQyVgICKIsvCzEQDQ4TDAYHIBksCByRa0yQKAQIFhIiMRsYAw9JCwYrURAGBBJbGCkKCRwCSg0LFDVFdf7oDUgJLZ2QIhAxEQYZFSYGAhQjRh4gbOtsTmcGAQYMQSgXKxZEBgEBCUILBCZkQyzrRhQFAQkZAAEAJQAAAv8CqwBpAAazKQABMiszIjU0NzY3NyMnJjU0NzczNzY3NyMmJyYjIgYHBgcGByI1NDY3NjY3MjYzMhcWFxc2NzIUBwYHBxQzFhcWFRQGByInJjU0JycHBgcHFzIXFhczNjc2Njc2MzIVFAcGBwYHBiMiJyYjIgcGMw4apYsYMC8LJAh5IGUYDhkpQ00cJSMKBx0eGxMRCSKAPgETBy1FRBUVLA4TFVtkGg4vDAIkEQoCCioRGH9yBSM8Z1QzFSEKBi8aBgwOAhIgP1sKIjdmaC8eGhUKDBeNhRgBBggXDwQhax8QAQoLFx8VExUCCwclDC9HBQELCQEBFQESGW1nHAECFgYDEBsBAQUGBQMBF3piBAEKCAMsKRMhBwIJAgw4KE8TAgoLCgwAAAABAAAAHwB2AAIAAAAAAAIAAAAYAI0AAAAaDgwAAAAAAAAAEgASABIAEgCLATQBiwH6Al4C1wNVA+oEZwTTBWEF0wZ1BvcHXwfVCFsI9glyCcgKRwqcCx4LtQwgDLcMtwABAAAAAQAAvY/jk18PPPUADwPoAAAAAAAAAAAAAAAAAAAAAP/i/3EEcQMVAAAACAACAAAAAAAAAPoAMgAAAAABTQAAAPoAAAMeAB4CkQAfAg8ADAMDABICEAAeAs8AEgJTACwDTQARAiH/4gKmAC8C+gAeArIAIASxABwDNP/lAxwAOgK4ABIDMQByA1AAEgJeABICIQAiAnL/7wJlABkD3AAZAskANAKcAB8C1QAlAPoAAAABAAADFf9xAFoEsf/i/uAEcQABAAAAAAAAAAAAAAAAAAAAHwACArABkAAFAAACigK8AAAAjAKKArwAAAHgADEBAgAAAAAAAAAAAAAAAIAAAO8QAOztAAAAAAAAAABQZkVkAEAAIACgAyD/OABaAxUAjyAAAI9eAwAAAAACqwAAACAAAQAAAAIAAAADAAAAFAADAAEAAAAUAAQAMAAAAAgACAACAAAAIABaAKD//wAAACAAQQCg////4//D/34AAQAAAAAAAAAAsAAsILAAVVhFWSAgS7gADlFLsAZTWliwNBuwKFlgZiCKVViwAiVhuQgACABjYyNiGyEhsABZsABDI0SyAAEAQ2BCLbABLLAgYGYtsAIsIyEjIS2wAywgZLMDFBUAQkOwE0MgYGBCsQIUQ0KxJQNDsAJDVHggsAwjsAJDQ2FksARQeLICAgJDYEKwIWUcIbACQ0OyDhUBQhwgsAJDI0KyEwETQ2BCI7AAUFhlWbIWAQJDYEItsAQssAMrsBVDWCMhIyGwFkNDI7AAUFhlWRsgZCCwwFCwBCZasigBDUNFY0WwBkVYIbADJVlSW1ghIyEbilggsFBQWCGwQFkbILA4UFghsDhZWSCxAQ1DRWNFYWSwKFBYIbEBDUNFY0UgsDBQWCGwMFkbILDAUFggZiCKimEgsApQWGAbILAgUFghsApgGyCwNlBYIbA2YBtgWVlZG7ACJbAMQ2OwAFJYsABLsApQWCGwDEMbS7AeUFghsB5LYbgQAGOwDENjuAUAYllZZGFZsAErWVkjsABQWGVZWSBksBZDI0JZLbAFLCBFILAEJWFkILAHQ1BYsAcjQrAII0IbISFZsAFgLbAGLCMhIyGwAysgZLEHYkIgsAgjQrAGRVgbsQENQ0VjsQENQ7ABYEVjsAUqISCwCEMgiiCKsAErsTAFJbAEJlFYYFAbYVJZWCNZIVkgsEBTWLABKxshsEBZI7AAUFhlWS2wByywCUMrsgACAENgQi2wCCywCSNCIyCwACNCYbACYmawAWOwAWCwByotsAksICBFILAOQ2O4BABiILAAUFiwQGBZZrABY2BEsAFgLbAKLLIJDgBDRUIqIbIAAQBDYEItsAsssABDI0SyAAEAQ2BCLbAMLCAgRSCwASsjsABDsAQlYCBFiiNhIGQgsCBQWCGwABuwMFBYsCAbsEBZWSOwAFBYZVmwAyUjYUREsAFgLbANLCAgRSCwASsjsABDsAQlYCBFiiNhIGSwJFBYsAAbsEBZI7AAUFhlWbADJSNhRESwAWAtsA4sILAAI0KzDQwAA0VQWCEbIyFZKiEtsA8ssQICRbBkYUQtsBAssAFgICCwD0NKsABQWCCwDyNCWbAQQ0qwAFJYILAQI0JZLbARLCCwEGJmsAFjILgEAGOKI2GwEUNgIIpgILARI0IjLbASLEtUWLEEZERZJLANZSN4LbATLEtRWEtTWLEEZERZGyFZJLATZSN4LbAULLEAEkNVWLESEkOwAWFCsBErWbAAQ7ACJUKxDwIlQrEQAiVCsAEWIyCwAyVQWLEBAENgsAQlQoqKIIojYbAQKiEjsAFhIIojYbAQKiEbsQEAQ2CwAiVCsAIlYbAQKiFZsA9DR7AQQ0dgsAJiILAAUFiwQGBZZrABYyCwDkNjuAQAYiCwAFBYsEBgWWawAWNgsQAAEyNEsAFDsAA+sgEBAUNgQi2wFSwAsQACRVRYsBIjQiBFsA4jQrANI7ABYEIgYLcYGAEAEQATAEJCQopgILAUI0KwAWGxFAgrsIsrGyJZLbAWLLEAFSstsBcssQEVKy2wGCyxAhUrLbAZLLEDFSstsBossQQVKy2wGyyxBRUrLbAcLLEGFSstsB0ssQcVKy2wHiyxCBUrLbAfLLEJFSstsCssIyCwEGJmsAFjsAZgS1RYIyAusAFdGyEhWS2wLCwjILAQYmawAWOwFmBLVFgjIC6wAXEbISFZLbAtLCMgsBBiZrABY7AmYEtUWCMgLrABchshIVktsCAsALAPK7EAAkVUWLASI0IgRbAOI0KwDSOwAWBCIGCwAWG1GBgBABEAQkKKYLEUCCuwiysbIlktsCEssQAgKy2wIiyxASArLbAjLLECICstsCQssQMgKy2wJSyxBCArLbAmLLEFICstsCcssQYgKy2wKCyxByArLbApLLEIICstsCossQkgKy2wLiwgPLABYC2wLywgYLAYYCBDI7ABYEOwAiVhsAFgsC4qIS2wMCywLyuwLyotsDEsICBHICCwDkNjuAQAYiCwAFBYsEBgWWawAWNgI2E4IyCKVVggRyAgsA5DY7gEAGIgsABQWLBAYFlmsAFjYCNhOBshWS2wMiwAsQACRVRYsQ4GRUKwARawMSqxBQEVRVgwWRsiWS2wMywAsA8rsQACRVRYsQ4GRUKwARawMSqxBQEVRVgwWRsiWS2wNCwgNbABYC2wNSwAsQ4GRUKwAUVjuAQAYiCwAFBYsEBgWWawAWOwASuwDkNjuAQAYiCwAFBYsEBgWWawAWOwASuwABa0AAAAAABEPiM4sTQBFSohLbA2LCA8IEcgsA5DY7gEAGIgsABQWLBAYFlmsAFjYLAAQ2E4LbA3LC4XPC2wOCwgPCBHILAOQ2O4BABiILAAUFiwQGBZZrABY2CwAENhsAFDYzgtsDkssQIAFiUgLiBHsAAjQrACJUmKikcjRyNhIFhiGyFZsAEjQrI4AQEVFCotsDossAAWsBcjQrAEJbAEJUcjRyNhsQwAQrALQytlii4jICA8ijgtsDsssAAWsBcjQrAEJbAEJSAuRyNHI2EgsAYjQrEMAEKwC0MrILBgUFggsEBRWLMEIAUgG7MEJgUaWUJCIyCwCkMgiiNHI0cjYSNGYLAGQ7ACYiCwAFBYsEBgWWawAWNgILABKyCKimEgsARDYGQjsAVDYWRQWLAEQ2EbsAVDYFmwAyWwAmIgsABQWLBAYFlmsAFjYSMgILAEJiNGYTgbI7AKQ0awAiWwCkNHI0cjYWAgsAZDsAJiILAAUFiwQGBZZrABY2AjILABKyOwBkNgsAErsAUlYbAFJbACYiCwAFBYsEBgWWawAWOwBCZhILAEJWBkI7ADJWBkUFghGyMhWSMgILAEJiNGYThZLbA8LLAAFrAXI0IgICCwBSYgLkcjRyNhIzw4LbA9LLAAFrAXI0IgsAojQiAgIEYjR7ABKyNhOC2wPiywABawFyNCsAMlsAIlRyNHI2GwAFRYLiA8IyEbsAIlsAIlRyNHI2EgsAUlsAQlRyNHI2GwBiWwBSVJsAIlYbkIAAgAY2MjIFhiGyFZY7gEAGIgsABQWLBAYFlmsAFjYCMuIyAgPIo4IyFZLbA/LLAAFrAXI0IgsApDIC5HI0cjYSBgsCBgZrACYiCwAFBYsEBgWWawAWMjICA8ijgtsEAsIyAuRrACJUawF0NYUBtSWVggPFkusTABFCstsEEsIyAuRrACJUawF0NYUhtQWVggPFkusTABFCstsEIsIyAuRrACJUawF0NYUBtSWVggPFkjIC5GsAIlRrAXQ1hSG1BZWCA8WS6xMAEUKy2wQyywOisjIC5GsAIlRrAXQ1hQG1JZWCA8WS6xMAEUKy2wRCywOyuKICA8sAYjQoo4IyAuRrACJUawF0NYUBtSWVggPFkusTABFCuwBkMusDArLbBFLLAAFrAEJbAEJiAgIEYjR2GwDCNCLkcjRyNhsAtDKyMgPCAuIzixMAEUKy2wRiyxCgQlQrAAFrAEJbAEJSAuRyNHI2EgsAYjQrEMAEKwC0MrILBgUFggsEBRWLMEIAUgG7MEJgUaWUJCIyBHsAZDsAJiILAAUFiwQGBZZrABY2AgsAErIIqKYSCwBENgZCOwBUNhZFBYsARDYRuwBUNgWbADJbACYiCwAFBYsEBgWWawAWNhsAIlRmE4IyA8IzgbISAgRiNHsAErI2E4IVmxMAEUKy2wRyyxADorLrEwARQrLbBILLEAOyshIyAgPLAGI0IjOLEwARQrsAZDLrAwKy2wSSywABUgR7AAI0KyAAEBFRQTLrA2Ki2wSiywABUgR7AAI0KyAAEBFRQTLrA2Ki2wSyyxAAEUE7A3Ki2wTCywOSotsE0ssAAWRSMgLiBGiiNhOLEwARQrLbBOLLAKI0KwTSstsE8ssgAARistsFAssgABRistsFEssgEARistsFIssgEBRistsFMssgAARystsFQssgABRystsFUssgEARystsFYssgEBRystsFcsswAAAEMrLbBYLLMAAQBDKy2wWSyzAQAAQystsFosswEBAEMrLbBbLLMAAAFDKy2wXCyzAAEBQystsF0sswEAAUMrLbBeLLMBAQFDKy2wXyyyAABFKy2wYCyyAAFFKy2wYSyyAQBFKy2wYiyyAQFFKy2wYyyyAABIKy2wZCyyAAFIKy2wZSyyAQBIKy2wZiyyAQFIKy2wZyyzAAAARCstsGgsswABAEQrLbBpLLMBAABEKy2waiyzAQEARCstsGssswAAAUQrLbBsLLMAAQFEKy2wbSyzAQABRCstsG4sswEBAUQrLbBvLLEAPCsusTABFCstsHAssQA8K7BAKy2wcSyxADwrsEErLbByLLAAFrEAPCuwQistsHMssQE8K7BAKy2wdCyxATwrsEErLbB1LLAAFrEBPCuwQistsHYssQA9Ky6xMAEUKy2wdyyxAD0rsEArLbB4LLEAPSuwQSstsHkssQA9K7BCKy2weiyxAT0rsEArLbB7LLEBPSuwQSstsHwssQE9K7BCKy2wfSyxAD4rLrEwARQrLbB+LLEAPiuwQCstsH8ssQA+K7BBKy2wgCyxAD4rsEIrLbCBLLEBPiuwQCstsIIssQE+K7BBKy2wgyyxAT4rsEIrLbCELLEAPysusTABFCstsIUssQA/K7BAKy2whiyxAD8rsEErLbCHLLEAPyuwQistsIgssQE/K7BAKy2wiSyxAT8rsEErLbCKLLEBPyuwQistsIsssgsAA0VQWLAGG7IEAgNFWCMhGyFZWUIrsAhlsAMkUHixBQEVRVgwWS0AS7gAyFJYsQEBjlmwAbkIAAgAY3CxAAdCsgABACqxAAdCswwEAQoqsQAHQrMSAgEKKrEACEK6A0AAAQALKrEACUK6AEAAAQALKrkAAwAARLEkAYhRWLBAiFi5AAMAZESxKAGIUVi4CACIWLkAAwAARFkbsScBiFFYugiAAAEEQIhjVFi5AAMAAERZWVlZWbMOBAEOKrgB/4WwBI2xAgBEswVkBgBERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAGQARQBFAsH/6gIVAAACwf/qAhUAAAAAAAkAcgADAAEECQAAAKIAAAADAAEECQABACIAogADAAEECQACAA4AxAADAAEECQADAFIA0gADAAEECQAEADIBJAADAAEECQAFAEIBVgADAAEECQAGADIBJAADAAEECQANAnIBmAADAAEECQAOADQECgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOQAtADIAMAAxADAAIABEAGUAcwBpAGcAbgAgAFMAYwBpAGUAbgBjAGUALAAgAEkAbgBjAC4ACgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEANAAtADIAMAAxADgAIABLAGgAYQBuACAAQQBjAGEAZABlAG0AeQBLAGEAVABlAFgAXwBDAGEAbABpAGcAcgBhAHAAaABpAGMAUgBlAGcAdQBsAGEAcgBGAG8AbgB0AEYAbwByAGcAZQAgADIALgAwACAAOgAgAEsAYQBUAGUAWABfAEMAYQBsAGkAZwByAGEAcABoAGkAYwAtAFIAZQBnAHUAbABhAHIASwBhAFQAZQBYAF8AQwBhAGwAaQBnAHIAYQBwAGgAaQBjAC0AUgBlAGcAdQBsAGEAcgBWAGUAcgBzAGkAbwBuACAAMQAuADEAOwAgAHQAdABmAGEAdQB0AG8AaABpAG4AdAAgACgAdgAxAC4AOAAuADMAKQBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOQAtADIAMAAxADAALAAgAEQAZQBzAGkAZwBuACAAUwBjAGkAZQBuAGMAZQAsACAASQBuAGMALgAgACgAPAB3AHcAdwAuAG0AYQB0AGgAagBhAHgALgBvAHIAZwA+ACkACgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEANAAtADIAMAAxADgAIABLAGgAYQBuACAAQQBjAGEAZABlAG0AeQAgACgAPAB3AHcAdwAuAGsAaABhAG4AYQBjAGEAZABlAG0AeQAuAG8AcgBnAD4AKQAsAAoAdwBpAHQAaAAgAFIAZQBzAGUAcgB2AGUAZAAgAEYAbwBuAHQAIABOAGEAbQBlACAASwBhAFQAZQBYAF8AQwBhAGwAaQBnAHIAYQBwAGgAaQBjAC4ACgAKAFQAaABpAHMAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAaQBzACAAbABpAGMAZQBuAHMAZQBkACAAdQBuAGQAZQByACAAdABoAGUAIABTAEkATAAgAE8AcABlAG4AIABGAG8AbgB0ACAATABpAGMAZQBuAHMAZQAsACAAVgBlAHIAcwBpAG8AbgAgADEALgAxAC4ACgBUAGgAaQBzACAAbABpAGMAZQBuAHMAZQAgAGEAdgBhAGkAbABhAGIAbABlACAAdwBpAHQAaAAgAGEAIABGAEEAUQAgAGEAdAA6AAoAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATAACAAAAAAAA/4MAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAABAAIAAwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0BAgd1bmkwMEEwAAEAAf//AA8=) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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AEYAbwBuAHQAIABOAGEAbQBlACAASwBhAFQAZQBYAF8ARgByAGEAawB0AHUAcgAuAAoACgBUAGgAaQBzACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAgAGkAcwAgAGwAaQBjAGUAbgBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAUwBJAEwAIABPAHAAZQBuACAARgBvAG4AdAAgAEwAaQBjAGUAbgBzAGUALAAgAFYAZQByAHMAaQBvAG4AIAAxAC4AMQAuAAoAVABoAGkAcwAgAGwAaQBjAGUAbgBzAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAHcAaQB0AGgAIABhACAARgBBAFEAIABhAHQAOgAKAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATABoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAAAACAAAAAAAA/4MAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAF8AAAABAAIAAwAEAAUACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAgACIAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4AQABBAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQECALYAtwEDAQQBBQEGAQcBCAEJB3VuaTAwQTAHdW5pRTMwMQd1bmlFMzAyB3VuaUUzMDMHdW5pRTMwNAd1bmlFMzA1B3VuaUUzMDgHdW5pRTMwOQABAAH//wAP) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAACw0AA4AAAAATMwAACveAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAfAg8CZwMEQgK5xDSdgE2AiQDgwALgUIABCAFiRAHgioMgScb/EBVR3PYOMDMhnYKxf8fFtiSIaHn8uBqZxlbyxkM3OXUlIyppAnE69Ca2oSKP4dSyqmpMJxDueUGUqabk+3eX3cv5AYffV4uA/vPU2237MaD8coRkswO0DY76qiSlGoFpAxMkApJARPFqOm0F26t63RdfmRsX35t/RWLD/1Hnfa+JENk4hC6QadITnrIW2maD7el623h+WINfX/vJjIRFtBIlijDLjITY9gpoJaVBRKqtvt/32Zf1a5X7Xp3E4iNYSEjTkZEb1fNDs9557DnZF3g7R/8QhMT8JiAR0ZfxKq7V37Xf9RpLgCq8NVfIPuACj5S4gKmOdI/lBsfDVvmjt6mJ7dsoF65eQiHrYAeUN++5a9tzsArs8yE7Ele0z3EZPfgTw9NSdcBz+fu+/Gx3ZZAIs8081rwz3Pv/rBO2PaQsyLt6b0czulxWbz+b2lK54+kK+taUHrlpdIE0BCyO3s678ysztbIRTt7TcV52nVb7R3QyVXFtbAUXAv3ykV2v5J0VBpNWC0AVUQNSAAMox2QCmAAoQ0GmuW1LAuixhwXiyjo5N91maj0OlNVOSkhxoABE+ix/aYNAYBmdzZCAKB39QwAWNu4f8g3y0CB+tKLAb+Q8ONPXpqqsyQLKgh+ajBBF0rVzUAEgA0nMACA/K3PARAoLhQGNCtxSDUGrt2iI+mDBYkUK1WuRr15Dkxn17XZVsFlgyda1EmPTq/j81L/7G/7m/66Z/qr/qKnv5U1EoCoaVVEwCGgX/tsHc7VVre6cDbqhL+w8nvmyZSALzYRosM72HuHUG++WuyuI39yfyj/8gjm6b2edA81PldaAz+AkssFSOlMCALa5U8IBtasQ3BQdskXRgJTQkByzni2UDJ+0C7B+LFOMA2MpTSDuKwXrMVKZ9BppvRQfmEvNlxPUSWPTRFI4KjFwHv7W4pY2LxI5PFAREvqJIqj47yKMsKmQvXy1yIXq0xqCdQ9q2ccl+o3S/kq/654f9mglyhw2Jx/+CTkq1SaIQ/RLtWFC1aIo42H/lD+t1aQpE5nbQEmm3gf7SedyMB+wBwma8BHC7zaU60aKuCmv3mS3rmpJnaIOyXdi2SpgELEDiTPI2KykRAKKCEITzOCxoqFZga6GaW1gEoI1ekqoXC9NjY0hhhtKiPIs+ZWrxSUkbY8dVLe/n2S8EV3AJHPrKuotCqWRQvh8sYSU+RENdpVCA2ocK0A8zbSvRUzTMB+oRRs/Af0mYQ2KrICwuy1WbsT6b5QkLwsMjLhyuu9SRSVeZSJWdXxg4zSeDJNVRYFd4sh3FGS96pvdZcL1PyiKl3ruHRbEtx9ZnmmDbEmiaM/C6i4QTYxy3NpzYJvWuprxVpWdQgHnrXWeHSnQrgoBoF0eDCN9uuaEbhd8JG7QUOeKnXX1KU7kR7yXoVHR/mtCtWGuK6Pw4/Wi6+yzMNquK6jIHtmDz8c40qXUHDGEB5+6ZPh8yJQNfBCDHOZG++cwC0ALTGB+868E/0QbvK/OnvKHWkebu0wlRBiGtMvOYHD3UVFrVfGZ9V48oAeCLgMInBekND5OYsQeGzzo4VvhhLYZmAZqBhyt+lKA7xgKDDG0IDCowZVH05O8C/W5yREDI9oLUQiMKEUM5RhjqpYoBpWUB2rqIE11MQ6auFK5wQchECo5fCjZYpAb0tGXdacjmmMw9+XnTUOwz8PWxsBpsLaLKheH0lVYiV0oA1dUOiBQh8UBqAwBIURKOSgsAUKY9DMHBTHLVr4HNJCJU1YybMkFdmcubkCWMTLGO0nLkG0WzmkaU43OL9XL8YUBWi75ZD2dm/Nu1pYjrwiUWIfi63mjpOqF8zsgl7g79hDUK1nD1iCAlHlwTTiK9RFqze84Xclsvhh2QfFtGtFEijzxyjEAaKxOMThCykQa0OFR/AsxQsUJQn0lkxuP/97YI+bkj1XpbcfZopDoWh4NcQxgBjJEhf+0kfX92a6hsG13/nciOL88O8KTmZSpPQmqGZkJOG2sBReXtlLoS1txd3cUhVTbudJUt6Te5C846AyaZkreS2fpp0IuoyhMM1WtRZPFTFX7spKWinTjCfzTrqhipTc+WwlJKG262jDuKLcZ84nluIpKztWQmRdsFPOo+V0BUBDzrZTQij1Zim5SnK8YWg8S0AKGTtA5iahbDsX0E1qoVvVL/DZRhSzVtOOXQTFIxZU19ba/4Fp8WVFzkdDxizy17zA00avMfedU9bwVk+7l2CKqFRZ/YS2oqpiKZbIFxKueS5/df2qqqz/WkHVcne7BI5jXu8KOIm8vRGm7WB++ILqSjFCMYfWCcQsNTP981OYZhxA4tTgwbkU8QaI/wZedgamWtWR/Y3Y5TKxjBSz28e8oTRrZmlBi5514niNGvpcU7dZmrfEphJHwAszSn5RYJkbQ92m/dFVeZl7BQ+qxXFAqdfA0Q96syfECVNEO3mvUibeIq7jeFPJe4cCuEnwHnMR0hQAHYcZgvAMm6RClgJg4+Q7uCRAGcENEfKGAfihsEAYEw4xBEcYgmMMYQkwrHEKdpyBHedgZ4UgPMcluHAFLlyDizfoYBVqwRbqYBUagC00BFtoBLbQGGyhCdgWTeHJqR/5rCsOsYTnINnC9foKlLFsxyCIVhGE1hEgymYOoaphG6awC1Nz3wIKHWIYh44RoFME6DyHMKVwCTO4hhncwgzu0Qo9IkB9BPQJjRxeYQ7vMIdPmMM3WqFfBOgfQWYt//Bv/N4+fqjrhWjxtWWttIhZg96A71Tq7+yAMGhA3Ry1chs0beziJ7gXQPQmqC9hAlsJCmXxhjlakzWAdXGsIl0lwq1DpXJkXR5AF25VW05eX1cSXzdQIfr5HYW0DPOowzSD0Zlur1nXTNmeXhlqbU132k7amfRIKYNmIQeVN4O9Z6/N55WZ8sjc0OJ+z/ri9m6y8n3AGrM59XZ8+DRxpU6pJj3N3nRlrL033WHk4+1Za94Rvl/vtfOuqLv7Yjya7H859Pyx7vFHpvoX9OJ8V298vUsxxNcuLr/yzVCdWg1WCPzlAC5DeSrS9MLHBnCoSZShLTkS+HfSzri9b2ppnfBMEe8z7eKYfEZt19lBLmTEIV1dxbmklf6ean1NdTYtkDkCBhOITn25lY0VChjrQ3ysByc9bz8a4FNkGMzA4SZH4itT/T7Lx1j/ylS8xk5hk5u4DLGRGcNHBg9W2o+UH5fOearuUAvt21f2uAvejdOu3LnhwHebvvOVU1/9Tut3v3pWdZg4CtNwylQdEb/8Xuv3zVDd6IBwp/wnh/JXS0Dv700wcEw3TgfHCMiVF24IofImgwB4nmqJ49h6Fs5oZBDxy/AdhZs4uwSwOcCBaFSKDmb/XI4odlijTrXWulQjJEiZfrtWl2t+oCBdh3pW6tuzTSTYDIqJmzjwgoYYEQH4Thil17AbAu17je/VGQbt+onjq537pBT5gAB5Q4xgxp5y1fz8/HgIhQBF/weimL6w8h2u+wo2LjvQU0ttct1dNT8zu1c/P4mrI5CfjZ6ZmOFXPPBzn9e5bh/uI0gZ4Xv4esTYlNPXYmj6f5uN/9vlh8oqju2ahmOJ6+sb++33Wr8PoZg2djT3lrKevFk3col1xA05HPucY13b60v60w1A5OLFOP9qiHG5IHWhULtlnXpehhUGhmM9PF5Ol/N3wrKqDImhjRfHEeFVtnAUbWUCZzLvySuXPw8b/uviJocmdvqUdB1nxXIymh5+H8Ad03V6dKLoXCIhgWZeIV7G19Lls8iZYiM1AnBcM7T6qeCU6LSbXI3dHqoTiVNefyLThTRPe9Q5pSxeji8qSMsrwQGqW3tzVIE5whLIdsqZbUzGa0txJJ3OxxtX/8W03tU2OEK8blJV3SucXqmYHP7rdURbwelMjCFWHa1qB4JHGuGQAGXxfB5WpcusM4552mZvAV5tvjJBeKBmF4cK/h5NI42wl+/EmCzirhqdmjii5R6jhzS3+VgrQqChU+65LFyJ+gXOzW0jf4S0uLjhLqNwzDIuzT9ELq8j6v2tywu7Nj6+Q/V8riyaOjfMmY+d+xwdCl6ofHp9nFqfNEdxGSKAjkhjQtolXFAmTerVfOvR4TvU+C3zFpmo1DaiUkwlLviPsgDty9RCigAOxE3qfOFPld69ukWXsxW7Pjuqx7xGk8vCH/TJ7JxHPuvYfWe5BmH7RTKjcUJHq1yisrTVwNOWOzAwkBPBvwUUscd0fZnqsaKiPU1jAQ/mDTYIeHON02lqfnDQdB1owQZyTGIyPb5axW6r82gsn5i3186nTvSUCND9S1mId0mwBdoT8d5HOp220DjWiB2dTvfXCbSAcI6P5h9NFdaYlv5DOvVyvtN1TOWVrA6Ps8BavzDlo91K4HkEjIX47GUt12ILAwoZFDPWYLt8mDezcjI0MmBpKyVCepfQXjlP8548z9H0EtPVZOR37o5Nq+UGisjX977j8c7Jo5NayOb+7HZ04ULBHtbHq0PwUGO8Nx/PW1I2zajdk12SiMU1G6fdVeplk90juU2C68sCkV3tTgh/iZOvW2gUScw5Xz2FurWFVKqc4Yqyenlxj2q30RPbFW2C0aY9BoqWKq6IPam/TnJm7gN3jcBX6LyenE9SUejZ5fG9YQMTYVE5tWpSl4enqU65IPhQz8GCahQcJn4TEonoHdgVzUi23snVNaqdquqM2DS/1JbBjmzCJzkxX1ieb+bqalLezCscymaLIa5rBNZu85SijYxMELavdEfB9jjhIqQ7a0UPAZGLupX1AlghqNFWI9wRkBEuf6d68/VyIcSwa57YoPXtUgF5DilSP1hMWGbu5oFkrJh8NCI/Fu0CFiJfLyC8To42YGymdvOX8pgTQNnjcWHPZ/p2m8mlZNX+ZCw7D6KWPtcRJAi3Mm25XF0OIvWeaT9kSOZH7TzNHeLAsGw2FHDZGsefmFRGDKHI+xdtPgI/JN8/NMlyfjRRZaiVT+YvSFLlWJCFfMbDIo20oKwLEiQ74yc7in8+Tvz1+btI5yRzaWIezdbWr9ah1sz33HvbrmA/cUv4LHt8Q63XLe1wNqwbIPqEcUt8vOEo4dEmtB6vUfjtLy9va3/M9YtZNRhDn8fGvb4fBKld27pAFS+woO4J8Ri9KTwGu7DtXRf7u8anqZdNzI3LNNQyoP8GB/ibPW7y8bJLcOZaOO3f6Ym185wJZrtnooV1Vze6AMliZMvRzEOlNIFtertPnUdk03f97QwvcUHgUTxr/xfCJbTRG+Q0VR1OZ+OMFw0wbwbKZpEsCZDnydsJ31BR+MY35+mE4cjZb7whJf9Y9TJw+KF2rQeH8+LNbB/UfDHtlIFhFmY8iGs+8j7m9rCrYikaRm3e1+/2zyrBaLMk5VR/goyB9dFRnBaNJfyw+Ukd4EE+/xCknEFuSHNWXeR+MK4NMN49b19q7/t6aXJvMMtE2uqTvMoa1605CuHjy6qAoBzT7ZG0hctiHC55VPP55qXQ1dcHQXEFHHwWbNJK33aZyEWQPLH0YTVmpU3qFn+vzyuqXB4Lj7SqIinSzOsXscVWIz0V4sY9T3b/uPq8lBPi3SegAsO2S4tq0uG2QFPmVT/WB5+y9bzqFiiG3ZHz1m07jBa2JfiT3KV43ZIcAbYtz4ckEowcDFRyKTx7MQh9Hz3Rrj0f98sFYL241P6ZMWesvxv98/K22BfnO4gLaBNB1Yfxcp59MfcsCLRlIeian/ZYgVE+KB/fuIvMy/rpIZQjp51W0J6BareRigHk4ULB8cPQcykoMsceZLPYRX1dr8J30DRCoDeBlru1eGQLDO6mdAsgKF+FibYX/CaddajGEWeaepwF2CKNkyYu3zARHSeooJjYp+xZsNaD4QwaDpcz2YvBhi3HFR+DzVtBH4qoPkvn7iU+fdH+AGOD/fj96bhLsjTXit+wJUQO+nhqP0/SkyjhWUZCQZVbofRsFIe0NMcphWc7OE+6+5F94sEPby5ez5cXB2WHGvupLyYcgtyR0EHe2t/zMhiXMsgw9WPZFZUEqnWi7rSDrMBCnLRSHJADSl54GuKJstKSES6XVsqVFBNnYMbhVfi4Pch4ofKdwYsI1SxFXe5VxDfupn1QA9SemRz6OiIbSaeScyB3KxGwoP7ivq6+6JQEBuv1GIREQRrTPnBhpm0Ue24Fla55eUNVP4wiIbmY9/+RUrOl5OPZh5CqKYWG3/3iHXq0PLbCxKOf4+Kb6IGBszrpUfgZWyYIBdKpc13mhjK9zfXTvwy9xINza54y13uXzoQhODSE58DmpxA2Wgb5Kv/yDOZlnOKj/x10EAn0jmGEZSrbU8jXfa+Pj3cjhV9iMXk0iHvwKXGL2RqyXev5GzM9lVkK5Oy29sS3PQslXGjMu6PrwJamYlbNuvUiIHxPUtGK6R3K7loMFj5kW+Ov9ae5hj3LUW6ddyIwVJt2aRP5ov1bIl2TVqpNv6gdsYjF90I0jYkxydFrjuJt08QlYn8vXo14ZAjfCurNtOnTX2/JuMXNS23hMGChAU5iNZOH5IdmNpVb9qGnsYvzFLQbR2luIN8FBzTpvfnKCgHVuh8MsgS0W7jMtHjQGtd4zLAzVUCZOZK4mZTh2MHoLwInZE32Hz8xfQI5ACXpGjKTAdFAGEzkS+xxLQwpXcOSauRBcT9KeJ66wymUiXBujDHruQztBSuKKcco0QIC5UXUnf4ZTZQ/YcvMqXlJbn+r0lMc6GudiVts4YRpf4kr2eGWX1fY7unCBqZj74JF1cEcw6yaH2X3bxz/SLuycwUrunn98i3WqYS52V031+Vv3nJ1ty77KJNzPc41Y6ovk19g4AkBIk9IKGI9CeYeYjoQ4WXEOLl1zVJqs+LdcVr2hHBLObSGuJAdNlrA2CvZz8pOGmEhzBxWRB6waI4y/VSWX9jyvmgVJb1RY3CBe59XLCJ8fN0ahnRdOx25Wt6naCqu+2b9lefaiHvPjvPANdQip1E7nJ/fps0bAns+VFvieez37eF2MrU7S2wcl0m0YfD5Hza3bQJ9jMLWxx944JtveZiRxffVTPHoQRD+o58+uCzQtOtcMpQaj9Ys3Pm4Vz3fXTXPNncq2DaKUn2yA1uzFgUl9tGcTihhFIx3p0H1r41Ye+T91m7bc1sbYZg+8AvXNqZlA7+5btvakBAQNUPaTa0Jr+odZeyZ5+3DYgMERfoXCf71oczfFvM2bl/U5HQqHllEumCyzWOLVbYjKhCiD/fP4/GV8Rx+1qOQ36m3F+qawflfWmFHYzXQ1G+UhdWLyH7uE6CjV8EQnPly1/W/QT9u7jrUkTcZQRgZd2H5T9ZAW33AX90xX+U27HzCoA5kMr4ya6SsiM72g29fmsy8zQ8DPmdtHHKuMeFstEaaKqs3Tqb0PrXKkxVVN1aet1iG5o9QNSfID+aNbi6pjpmlH6MUb75Jws4f/N2dO37hdi/E5uPHYmjwy+pr+pTR7EsXjG6h3b6zGTftNqXto53FyXVDGX9L0i/dF/rVNuCrsyaDHu4V3MLmHeYbIqfSYLM872Qm3ZjWlki1szSGSM2tqhXFhvLtiJOT2veO9/c3N09zVrpcT2+e0cUDK0LoVzT1+eX2zpIyFC365wiXtnShtKPbpwhm/fiznvQqZR2OfeoLClNTLeQIbZtQb7u2t21D/PiWqA66MCPL/Vapmflml5oxxbCWnxLZ5coSj5TPEEgeWOVP5JqH/ZYip6NI9tHdtz0DNMFh1Iayi4dzT82+8EXEzoM3jjc8Unf9tbM2BG+mK4QJCv5Ow4ZeGDf91rbStqjq9qPeaGaK57WecMw73uFJd7pVNpOSeFX7FVVhs//96I9c3Lm133dkU6X55Mn+QpO7Ne1qBlnsohc9Eotfe2W+a3UV0gd6vHMyA0Xq4hxiopflmVd8b8ECBnaLqpKrFcViaWWVtaalI5NjO4UPMy0caxu93y9/7niiLFRf7VRXt8bry+aNXr4l+37fiP8ZtDPtFVSL5uwK0ySnBpPmd4JiY3HU5Oquc+WUIywYTGJ2t1hlyK4qzH8MzTjBcImmzxujpkU2NP+Vcq7e5HDxbz2/Cpg1UbkjHKIGqKhkRPO2BYOx+BrN3pgm635DaYFmazIR8F9oUMXiVrBX8+jgfhY1OcqKbCnzVHGGVLK7yPOd96cAmy2ZPLbX452Bd3qWRSP/r9W5Ol3UCKNnc3Ikf8P+s+WMhGhtQWmhPjjrHluRuUWnkf757B5sCnyqP/9VOmst3WZrKcU/g7ZKTw4is3i05p30WdrX0HwBfyGPXAZYNETxQZc2FmfVJIuOy7dFIpHwhXplPGVz82ft9nprTxKZI3QP/Q/y/WCvZGxw1aunVnPoyHiv31x3bKK5uDBeQgItFGb90/1IKBtiC5oMrC1CGj7KKH0Hyi911pUzRK5tb4qL56PXP15VidImai+PuS0p/q5HqGTzWELRamw0Ctj711kS94NkweTMpDwHnKo7v6ufZn9loX2wNrWr7VexZVzdGomcT+XUxss84tnel7t9ah6rU3X3ad+l2spyaIjHiF2Ymm3fteSKuWMcovb3inJmWLs3HE4k0vEaW+FAWVe0grktYXsb1ds5u6BgUAgoX5Y869PVnqrGbJtJtndJvP2tASHX+ew8Sxk391W3Spl519T0yqqnbeDm/nsntux4b04XX99iAMpyQ7fL21U6x2FkN1RNqRrGB2U5IHr/ebetSvXXti8WfIqrN27EqPr9bZbcHiOfqjo8Gvy4Z7eIZ515R8H/eOysMI+8iYOjOYOVyscqzAUawmpR36lMpk/VgLL9cjfbkeg28exGm5EjnaUNl659tSMoVo51XffFHHr5eO7eRmN+pLAo/1MDllzgD1keithqrfJ7Zmxiddjxy66UcbCGKkGN1Rz3QrjEUxQ7zopgqe4L4nFdKb43d/iqA0/PuakNBscaeBFboQXzroJ+8aU8usn8ipBSI0sfXpjhV+CrOWrEn7Y2h8uZDlhKSxcuD9M5M88Lpdit4RUWrnvF0VpkW3eWs6L7FGrwlUekmry6ebr0E8Fyjjgv8hz0Wc/bC66+jadv4t+dZfNqD2uzxUr3+qroggECzIrkV1JGuLhnyPBepuGSpqDKUsjaV+rYJqE3ZbBTlQ1VtnfAI4W3q/UaBzdc22HXcVEHn2BmTRJ//fn/lV1TkZtkyiB1Q3fhQuC0iej59eEL+Fev+ZgefQjvlO0r3z5v2xeMrN7f33W18ekrRlgtsKiNzuUX9n3hBGiHEucO1bvOkZNbJSLpw/NlHfnCh8tOTpIDpEBKWZ1YadcWsLMvCZ6i5VjL5t/bV0vHvNCBRt6kakXAxbBInhcOWIXg0azvKyNRtcp46LEtUirLTFh7M3CB68Xb3lJto29oL18OHGuMKrbkP3NaRP3IQbXws8OOcUKyZJMqco28bEjL/O52QQVupYnNbd21KSE61Fd/R5hx8mu6uND/UYzF0qZoNXg+EoNy6QxKd9UYaR+OsxTd2PcCwo5oVOvdtIjpo5Rv++qBqJdvaZDdwpcYZ38qFyPEoJq1SHaQ+jIw8PmLx9BGf/1cj12vFjTsFXFUxs/I1fEQl+8iiPIDOmWc2mQOCrpue+ngrn+XQVRu1l2lFSe6Ixam14pos1/EvFA/86jDoiqRzF9ZY5Xps61s/EjwWsjB4XqG5KGR9S6saUjZgomujJd52JZ3+5hoKOq1/3deb0NQts7uioJPff1RKjbhanUK69r4l08SQ3UCBaCdEmPYb80QnC0+4qR0QBmkqAqTRU1cy/CBG1xm0U7tovNTK/B2hGDjMeu7qRCXa5o8RRHNyx4sa+GB52uea1/sSc+09oeeYKmeRrokdtJRbdpdZsfUY4gk6xI6YaB7NDfhMF9BnhlhR9lII2l5pnwQDq0kZ94R5XF+J43r/XfmZpptHOXD858ikWKKIunSqbaNLJwXuCPK9eRSE608w49HrI9GUOF/3vk/n6Phci6rpOagq8RrHZnjXCqxT3g8ooJJ95aururkGdHRh57l7n9jgxgzw6NiNC7Q6J+amxft21tX696/OdOwQPRzpNDiLxLt4csVY9IcSwVYv/x8XadXYlxll2u95imnrWBjljD2wcts7uBEA60uk/azwyVJXRHH/9Ss3CzXxni2im79C5Lc4pt0W3Iqx7FvWl0poTrO+tmsc4OYxlyFGXxtZO7CI3zNgXIZ497GYHLJs/ZyUeayStE6tHgqWmqRRM/rcn/O9IrXFzElydCloP0t9Ibx5MNTbG+BFvkWPoB1Qhjcm7QNneDYN7Wug8xQbZGeM1R2mcFjY8Zth9xRfodNiIfs3LljeA/yJWRvm0kVfV5KmCa9V5AwyFl7GEpR5NXBKI4HllYbO8u19obzZY4KxeaHkOroMmfGKaxpJ/tfxYJYHargt5vnqB02cXFxHGaRLuGkjc7dvAM2gW4VJyLGTogq0RhmpTxe6Y7Z7TtfDBjX7Fzqg3SAHFRYtDS75JnCWMX1nJTkbZeaI+qycCnyKEztKZMSNktz1/28c9Cs3FcqdwufhR6AVdw6ki1/9E1BhdUAM3m1igi5tgBSHV3uzNh5X1xlozxm1kVDGD9hy34v9OkZehwCgxQOLzUVBF5fQcTOBi1Fpx8bihgnfRfcn9ZCcvAxfq29SJdzjz4nqcJbgp0E965Ts/f2G2hm21aT8Wen89jQcfcaZ2VXsVdhKQ+BjWuTsUlXi4tf2+Gi73ZjIsXq7Ewq73t0xOD5OxULTKFLo6Ecr+gjqwMzdFWRu4dorVB9unk5u6qooZ88n6FnwQ5YmgdqsjoMvJypDZCieOEk5fVHHyMlDsVFhSZYdE4S9xp/m/SAV4znXm5qL8v+mps9F42yq2wNpIUY0i8XmRg/nGJ4XTF0ut3yF6NfbfvLPB4c7klNGJ+SKV9gkpXP+ctL+DiD9B2hzqOXhynVmmi116nbCtJfH8YRhnHMLmNTZhQceqriGc00GbuY6U8zwEdf//Gg8/1Pv/2qC3Slzo3vfZ1bOkxNneg4w7YKhwiZ1hp8yUhd97yeXJcb+MuUYIsoXnGuXGGy4LNQK+MjcRzkzbmsFgceiksnPNoKSYE2b4xavzTSmBPx7Ma7Ds+Aa2Aknx78MFDFYcJ/qua5Cp93cf9AtdacHmUX2+Ge4uTjR1qvv24ILN1u5WVb5xZ1qCvMXRYZuLH7qfUNFZtyFQWIudGqn8Ufal4oFoOR7z99h4pO6gJLrFjLms0tNMGH72dXKzL4c+ul7gC6AYz0HMx87tSvXeksxPvYtvx3IEKBWxZM2IJ5QTfLUxL3V4WKU6/9CIGyUe/Ww97tpC3O1lXLWEnUJ1sAb/J7N4rdT63KOGJtmpqNfJvGoKU6dfVOXf8VkLhUFHY6E7BKcQuhyaquLzjjIDrlsZ7JLCBKp9o5C2v6HbYRXE1rRGT+tcHaFA0GbaJBafZac29oOaphiLibk6xy5mOuP/73ZV4XPGUTs9ErYXLhC/CrJl/Ik5/CPH9uC6LxIsM7WA3HDAhrTEBPT7dvm5sONjufYqeKoh0hkN33DrNZsgRp61PlXGulqJqaKw0mryReDws4J9ffXbMSEXt8zwbU8RxrqM77W+JdA7UH1hId2VecABGil77qqG/c8jtiFx++YM+XfW8cQtX1vMddkeqsr+VOO5aW/QN6YOaVPkjSPvywSex0VI6Fn8xlt8ZSDR9NXQGgA5c/OPxbjrNUKbh9hGnJR8HP/msp5DQuTkIuX7yaFdq4qFPvRW547AxiLozkB4+PjDfdXCqvyr8fUysL+8cafn5Se2Fh57gW41ulVCHGHrw6cmg7xHrpCwLpQcz11tqv1pld2wNZb76Kzr4SCNvzgm3l7bDIruNPz6klQ8HzczZ0kW8jYwHYQsiGxJoVCOjgzefHe/Mj4xEfPL7tSEUO7D1q+1DcEz97rrUQlh4Wv92ShP7SDR7Jriy6eYA84c9NO30GBz6gH6DVj/nx4O8XiU21toFahbRioTFS5ECdOBnMOYZ6qlK2/exnn9+v/nhsTX4+DCoJBz+jZYlnMAxhyvmyKxvuKl46Z0XnOsUAcOI3bY9p4xIlIvTrn0+htl0K555EvtxrK2i3ROpUOfPoDX2lReWTdu0wpevba1fmm6uKN8ObLyfZ5StNUCZqemF3XObIxp7DHTtJFwheWfCazGVKKCmb2jZ8k+odQwETpQ1PZmpn18Hn/5hXMPKfTOZ71KGpCvh08uxJA12IxlKk0ioTAGN3Nhop6JYidyIR29FSpZ4msGcaavxtiP/0JcIfyTjw+uKZk63ZWPt4NzQFXP9RGL9IJ5sawy8An6R+d58Bj3zcgmtdiZxQ4Afq7YV5cxte+9hX0JQWnjnQ8rLStYFPheIjd+dU/1WGxWCnWLUZbbUZZg0HoCGw4RYTlsSsI4uDwY8f0Bgfi9a3bl+BsHRwqZlnrs49cwH0Bd6BvgBVQbvoHJETU6XMX/BF54eog73rWj/+r7WJUag8YSbDnmquVFr4yLqwo8Ktz0KvM+vxwFqJ8a7H89eJqRpNqQY3D+adIQgVTjS5BAEKiCj5LEiCuAVyZVbIpS77Svbsf6jnR7oT5VCrGbkKgP3tFPIscH8HzUD6Tri1/Q/TGxqFSw5H3+9jlzM1t55rjOa7RN+i4ULoG3FLoaPMCib+h7hB3BhVBPiXaF2HO2c9pq52M7d9w9Do7qqv/ycKx+BJH9qKyXxFo1v1dAY+T/uGx/P3cYwVFDZNDuSnjQtPeKs3RqP/foJ1WflMDodBrTCedrlc+haDjvZzVdzNil8NuhKr/hlMHWXxXHoZh9NtKUUNU399iMaX4OiGtJQhsV/5dCYvImKA7tWPKBKFl0J8XXEVgy3FZenTQnpecAg89ZjEE0A35ObK4x+5bLdKm5HZ4YD7yY9yJKvrRcksiXu5tgldKAYjsk0WNRGV1PmXGYC7z2O5NYWL+I6CE1bfSxp1T98yJedef1cl5b898QJV7iFZl61gxOvKT3CKGrENJyJmILyT5Ai/JMwuY5vK24dealtGbnqKnrdtdVHtd0FkUpPv6VBzuw0oEfD+GG6COKddqnA3NRSh+J6EVPPNkNvmut/8ZPYSjry04oM8a6vVIz8jNq3TD14CzhkXrEZoW10OWf2BqWS+SfuVTkofvLI43IDjwkmDJG+z7QWChWCXD7IqZmRZK6jkD8I93gxyUQoV4KQbSuumgeP1dy9k4FC7CFzVUBNDjBwth2qfADN/0v2t3tqHCS88kwkjdtzKn6TpR/ugQE1ksr0uBKH/k/zdneGHcw7jI+1DlOYPYPcJ4ItA4uMWwtAIckKFH6jf5HP1j22Z8RuW9pcHdRML4n005SXV/hY9rAeod35NwiChUH3ONBELB0TB405reTEbDcupywgAsl8HA1GIgIJFKBggBB0FQn3TJBwCgIpiQCFAhRgcHken4gQBuE4V89ikZhy8z+NquZiGAGA4RcghY9qnyTh0MRrK0SAcSoQ4tlNeZmOkT0hG3GVCDYQRBieUgmelIEdU4i9Ti/RirLDIukYbVARNTNVIYUA65NbgRYQQLie4yGfO7mhmodxpE4eOFBIpy3VqDhUNCDbpynNheZbtaR2PiqDwLH6tOJsAU+QYRc5SZHgFCSoIOIITiyQbBcEyVSWgQRQURIggAjaHQR5opiJ6Pp4jE3CZaOXAcKd5LBJM3uayqRRl1AoqjFIOgGJIggehXiGAmWldThbguGwaSeFThRT9rJAAIaBITVXw6Ujbmp9Dj6LjIQYRSAjpChQ8QgdMxyAAAnh6XC8NTPw/JZb804mwOwAACxb6N42Dzt743yO/bgKAAgXIqara65Ya2Z6mvke6S2u30SPbVTNkCz3qF2RZyjWgUt9b+gRYZYW5V9946Dj1p7mIVDr+/G0EsAVzOIEhSFjADAaQn1jzGbBNiw9evf10Utd74mGQrloUDxWya4d4NcMOZNb6oB+UCqcU/XPtRardBCNbttviDsXO9hJgQ+v0r1Rh7cOslX1rKMcd6Wj1frc/FuxKwYZuNPSezZ/AXr2rggDxrODKH6xs4ogDLw+4hQZ8YSCE1fezAjNM6ZqFLCJAyV3XH5xo5q6T/hHzdN+IH7sQAKoAwDCAQC4WY/KHWSb6IZlTgGvATIX837zI73pTFi9uZtwHTanFSgA3f9FBQjF2KVgzALWY1kGWM4kDagut32NBRjROOAQ4FYLt0KlQBM+cCuPx1qlwqmSdimBN2Zrg4Kn46szip0pgHO4p9eozpl+HNu0GCSg0UwpLL++xi6ivVJd7Cti0GJCgcxKKaAgttJnTXJ27V7dOA6N+ko4RCqnXydOqwWKlZbLTY4xXgWh+QgOH/uB0GTSENLzTNkm7gfY7aO8XbLChIbQRMK7BTs2sSmXrUO9XlTiNa7yflFCvpaNhtFjSwZ22OukQWr3a99gcGviwKC1kt6WBMgibKndPlNklRh6ORo80Wu06RccoDVHfkjLKcJWDjXWJrpXelcLT3GyP6EDHBfTyAVLpMO/KEIT1jAIBaT3Vh5Iwz8aIEr72gAoakdBKR3bojwnEaLfgzQTCAGRgiGeQcAE23qLCcvOhDOqTKFW/tk8N5FbBC1ODrzK4I5A2DLyDWbJJ98CK5PA0rLQIdWhBmmECpWXaF6j2kQOaA6ipdDBwDYbp3XQ/+rWCHHySCaj6Rmd7em2N/1PjdQUOAQ0DCwePgIiEjIIqCw0dAxMLWzYOLh4BEQkpGTkFJZUcudQ0tGx7o+kZGJnkK1CoiFmxEqXKVLCwsXNwcnHz8PLxCwiqEhIWERUTVy0hKaVGrbpAgcc8HhgEDkFAQAgSgoKgIRjk0Pn/x8csRWNi8uxYRBfRRwwRY8QUyT9YAeB9hzfCCU+Q9fsX6N/NAi48kGuPGQGq8/wnEwXBbIfFal/U2gdeAQKbETqM/b4HDGB76NPkXgKXk987UQbn8k4HtmRcel9Nj/aeB30xyOie/RDtJ3W9SxsFIaje0ezl/bjuoU7/k5KZAGwb) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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IEewACNCsgABARUUEy6wNiotsEossAAVIEewACNCsgABARUUEy6wNiotsEsssQABFBOwNyotsEwssDkqLbBNLLAAFkUjIC4gRoojYTixMAEUKy2wTiywCiNCsE0rLbBPLLIAAEYrLbBQLLIAAUYrLbBRLLIBAEYrLbBSLLIBAUYrLbBTLLIAAEcrLbBULLIAAUcrLbBVLLIBAEcrLbBWLLIBAUcrLbBXLLMAAABDKy2wWCyzAAEAQystsFksswEAAEMrLbBaLLMBAQBDKy2wWyyzAAABQystsFwsswABAUMrLbBdLLMBAAFDKy2wXiyzAQEBQystsF8ssgAARSstsGAssgABRSstsGEssgEARSstsGIssgEBRSstsGMssgAASCstsGQssgABSCstsGUssgEASCstsGYssgEBSCstsGcsswAAAEQrLbBoLLMAAQBEKy2waSyzAQAARCstsGosswEBAEQrLbBrLLMAAAFEKy2wbCyzAAEBRCstsG0sswEAAUQrLbBuLLMBAQFEKy2wbyyxADwrLrEwARQrLbBwLLEAPCuwQCstsHEssQA8K7BBKy2wciywABaxADwrsEIrLbBzLLEBPCuwQCstsHQssQE8K7BBKy2wdSywABaxATwrsEIrLbB2LLEAPSsusTABFCstsHcssQA9K7BAKy2weCyxAD0rsEErLbB5LLEAPSuwQistsHossQE9K7BAKy2weyyxAT0rsEErLbB8LLEBPSuwQistsH0ssQA+Ky6xMAEUKy2wfiyxAD4rsEArLbB/LLEAPiuwQSstsIAssQA+K7BCKy2wgSyxAT4rsEArLbCCLLEBPiuwQSstsIMssQE+K7BCKy2whCyxAD8rLrEwARQrLbCFLLEAPyuwQCstsIYssQA/K7BBKy2whyyxAD8rsEIrLbCILLEBPyuwQCstsIkssQE/K7BBKy2wiiyxAT8rsEIrLbCLLLILAANFUFiwBhuyBAIDRVgjIRshWVlCK7AIZbADJFB4sQUBFUVYMFktAEu4AMhSWLEBAY5ZsAG5CAAIAGNwsQAHQrIZAQAqsQAHQrMMCAEKKrEAB0KzFgYBCiqxAAhCugNAAAEACyqxAAlCugBAAAEACyq5AAMAAESxJAGIUViwQIhYuQADAGREsSgBiFFYuAgAiFi5AAMAAERZG7EnAYhRWLoIgAABBECIY1RY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) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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WWO4BABiILAAUFiwQGBZZrABY2AjLiMgIDyKOCMhWS2wPyywABawFyNCILAKQyAuRyNHI2EgYLAgYGawAmIgsABQWLBAYFlmsAFjIyAgPIo4LbBALCMgLkawAiVGsBdDWFAbUllYIDxZLrEwARQrLbBBLCMgLkawAiVGsBdDWFIbUFlYIDxZLrEwARQrLbBCLCMgLkawAiVGsBdDWFAbUllYIDxZIyAuRrACJUawF0NYUhtQWVggPFkusTABFCstsEMssDorIyAuRrACJUawF0NYUBtSWVggPFkusTABFCstsEQssDsriiAgPLAGI0KKOCMgLkawAiVGsBdDWFAbUllYIDxZLrEwARQrsAZDLrAwKy2wRSywABawBCWwBCYgICBGI0dhsAwjQi5HI0cjYbALQysjIDwgLiM4sTABFCstsEYssQoEJUKwABawBCWwBCUgLkcjRyNhILAGI0KxDABCsAtDKyCwYFBYILBAUVizBCAFIBuzBCYFGllCQiMgR7AGQ7ACYiCwAFBYsEBgWWawAWNgILABKyCKimEgsARDYGQjsAVDYWRQWLAEQ2EbsAVDYFmwAyWwAmIgsABQWLBAYFlmsAFjYbACJUZhOCMgPCM4GyEgIEYjR7ABKyNhOCFZsTABFCstsEcssQA6Ky6xMAEUKy2wSCyxADsrISMgIDywBiNCIzixMAEUK7AGQy6wMCstsEkssAAVIEewACNCsgABARUUEy6wNiotsEossAAVIEewACNCsgABARUUEy6wNiotsEsssQABFBOwNyotsEwssDkqLbBNLLAAFkUjIC4gRoojYTixMAEUKy2wTiywCiNCsE0rLbBPLLIAAEYrLbBQLLIAAUYrLbBRLLIBAEYrLbBSLLIBAUYrLbBTLLIAAEcrLbBULLIAAUcrLbBVLLIBAEcrLbBWLLIBAUcrLbBXLLMAAABDKy2wWCyzAAEAQystsFksswEAAEMrLbBaLLMBAQBDKy2wWyyzAAABQystsFwsswABAUMrLbBdLLMBAAFDKy2wXiyzAQEBQystsF8ssgAARSstsGAssgABRSstsGEssgEARSstsGIssgEBRSstsGMssgAASCstsGQssgABSCstsGUssgEASCstsGYssgEBSCstsGcsswAAAEQrLbBoLLMAAQBEKy2waSyzAQAARCstsGosswEBAEQrLbBrLLMAAAFEKy2wbCyzAAEBRCstsG0sswEAAUQrLbBuLLMBAQFEKy2wbyyxADwrLrEwARQrLbBwLLEAPCuwQCstsHEssQA8K7BBKy2wciywABaxADwrsEIrLbBzLLEBPCuwQCstsHQssQE8K7BBKy2wdSywABaxATwrsEIrLbB2LLEAPSsusTABFCstsHcssQA9K7BAKy2weCyxAD0rsEErLbB5LLEAPSuwQistsHossQE9K7BAKy2weyyxAT0rsEErLbB8LLEBPSuwQistsH0ssQA+Ky6xMAEUKy2wfiyxAD4rsEArLbB/LLEAPiuwQSstsIAssQA+K7BCKy2wgSyxAT4rsEArLbCCLLEBPiuwQSstsIMssQE+K7BCKy2whCyxAD8rLrEwARQrLbCFLLEAPyuwQCstsIYssQA/K7BBKy2whyyxAD8rsEIrLbCILLEBPyuwQCstsIkssQE/K7BBKy2wiiyxAT8rsEIrLbCLLLILAANFUFiwBhuyBAIDRVgjIRshWVlCK7AIZbADJFB4sQUBFUVYMFktAEu4AMhSWLEBAY5ZsAG5CAAIAGNwsQAHQrMoAAIAKrEAB0K1GwgPBAIKKrEAB0K1JQYVAgIKKrEACUK7BwAEAAACAAsqsQALQrsAQABAAAIACyq5AAMAAESxJAGIUViwQIhYuQADAGREsSgBiFFYuAgAiFi5AAMAAERZG7EnAYhRWLoIgAABBECIY1RYuQADAABEWVlZWVm1HQgRBAIOKrgB/4WwBI2xAgBEswVkBgBERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAYABgAGAKoAAACFQAAArj/9gIVAAAAjwCPADQANAKuAAACtgG8AAD/PgIVAAACt//1ArcBxf/6/zgCFQAAAAAAAAAJAHIAAwABBAkAAACiAAAAAwABBAkAAQAUAKIAAwABBAkAAgAIALYAAwABBAkAAwA+AL4AAwABBAkABAAeAPwAAwABBAkABQBCARoAAwABBAkABgAeAPwAAwABBAkADQJkAVwAAwABBAkADgA0A8AAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAwADkALQAyADAAMQAwACAARABlAHMAaQBnAG4AIABTAGMAaQBlAG4AYwBlACwAIABJAG4AYwAuAAoAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAxADQALQAyADAAMQA4ACAASwBoAGEAbgAgAEEAYwBhAGQAZQBtAHkASwBhAFQAZQBYAF8ATQBhAGkAbgBCAG8AbABkAEYAbwBuAHQARgBvAHIAZwBlACAAMgAuADAAIAA6ACAASwBhAFQAZQBYAF8ATQBhAGkAbgAtAEIAbwBsAGQASwBhAFQAZQBYAF8ATQBhAGkAbgAtAEIAbwBsAGQAVgBlAHIAcwBpAG8AbgAgADEALgAxADsAIAB0AHQAZgBhAHUAdABvAGgAaQBuAHQAIAAoAHYAMQAuADgALgAzACkAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAwADkALQAyADAAMQAwACwAIABEAGUAcwBpAGcAbgAgAFMAYwBpAGUAbgBjAGUALAAgAEkAbgBjAC4AIAAoADwAdwB3AHcALgBtAGEAdABoAGoAYQB4AC4AbwByAGcAPgApAAoAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAxADQALQAyADAAMQA4ACAASwBoAGEAbgAgAEEAYwBhAGQAZQBtAHkAIAAoADwAdwB3AHcALgBrAGgAYQBuAGEAYwBhAGQAZQBtAHkALgBvAHIAZwA+ACkALAAKAHcAaQB0AGgAIABSAGUAcwBlAHIAdgBlAGQAIABGAG8AbgB0ACAATgBhAG0AZQAgAEsAYQBUAGUAWABfAE0AYQBpAG4ALgAKAAoAVABoAGkAcwAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABpAHMAIABsAGkAYwBlAG4AcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAFMASQBMACAATwBwAGUAbgAgAEYAbwBuAHQAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMQAuADEALgAKAFQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAYQB2AGEAaQBsAGEAYgBsAGUAIAB3AGkAdABoACAAYQAgAEYAQQBRACAAYQB0ADoACgBoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAAAAAgAAAAAAAP+DADIAAAAAAAAAAAAAAAAAAAAAAAAAAAEYAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEBAgCFAI4ApACDAJMA3gCQAPAAkQCJAKAAuAChANcAsACxAQMA2ADhAQQBBQEGANsA3ADdANkA3wEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETARQBFQEWARcBGACyALMAtgC3ALQAtQCCAMIAqwEZARoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwEoASkBKgErASwBLQEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQCYAToBOwE8AT0BPgDvAT8BQAFBAUIBQwFEAKUBRQCSAUYBRwFIAUkBSgFLAUwAnAFNAU4BTwFQAKcBUQFSAVMAlACVAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZAHdW5pMDBBMAd1bmkwMjM3B3VuaTAyQzkHdW5pMDJDQQd1bmkwMkNCBUdhbW1hB3VuaTAzOTQFVGhldGEGTGFtYmRhAlhpAlBpBVNpZ21hB1Vwc2lsb24DUGhpA1BzaQd1bmkwM0E5B3VuaTIwMDIHdW5pMjAwMwd1bmkyMDA0B3VuaTIwMDUHdW5pMjAwNgd1bmkyMDA5B3VuaTIwMEEGbWludXRlB3VuaTIwRDcHdW5pMjEwRghJZnJha3R1cgd1bmkyMTEzC3dlaWVyc3RyYXNzCFJmcmFrdHVyBWFsZXBoCWFycm93bGVmdAdhcnJvd3VwCmFycm93cmlnaHQJYXJyb3dkb3duCWFycm93Ym90aAlhcnJvd3VwZG4HdW5pMjE5Ngd1bmkyMTk3B3VuaTIxOTgHdW5pMjE5OQd1bmkyMUE2B3VuaTIxQTkHdW5pMjFBQQd1bmkyMUJDB3VuaTIxQkQHdW5pMjFDMAd1bmkyMUMxB3VuaTIxQ0MMYXJyb3dkYmxsZWZ0CmFycm93ZGJsdXANYXJyb3dkYmxyaWdodAxhcnJvd2RibGRvd24MYXJyb3dkYmxib3RoB3VuaTIxRDUJdW5pdmVyc2FsC2V4aXN0ZW50aWFsCGVtcHR5c2V0CGdyYWRpZW50B2VsZW1lbnQIc3VjaHRoYXQHdW5pMjIxMwd1bmkyMjE1B3VuaTIyMTYMYXN0ZXJpc2ttYXRoB3VuaTIyMTgHdW5pMjIxOQxwcm9wb3J0aW9uYWwFYW5nbGUHdW5pMjIyMwd1bmkyMjI1CmxvZ2ljYWxhbmQJbG9naWNhbG9yDGludGVyc2VjdGlvbgV1bmlvbgdzaW1pbGFyB3VuaTIyNDAHdW5pMjI0Mwljb25ncnVlbnQHdW5pMjI0RAd1bmkyMjUwC2VxdWl2YWxlbmNlB3VuaTIyNkEHdW5pMjI2Qgd1bmkyMjdBB3VuaTIyN0IMcHJvcGVyc3Vic2V0DnByb3BlcnN1cGVyc2V0DHJlZmxleHN1YnNldA5yZWZsZXhzdXBlcnNldAd1bmkyMjhFB3VuaTIyOTEHdW5pMjI5Mgd1bmkyMjkzB3VuaTIyOTQKY2lyY2xlcGx1cwd1bmkyMjk2DmNpcmNsZW11bHRpcGx5B3VuaTIyOTgHdW5pMjI5OQd1bmkyMkEyB3VuaTIyQTMHdW5pMjJBNA1wZXJwZW5kaWN1bGFyB3VuaTIyQTgHdW5pMjJDNAdkb3RtYXRoB3VuaTIyQzYHdW5pMjJDOAd1bmkyMkVFB3VuaTIyRUYHdW5pMjJGMQd1bmkyMzA4B3VuaTIzMDkHdW5pMjMwQQd1bmkyMzBCB3VuaTIzMjIHdW5pMjMyMwd1bmkyNUIzB3VuaTI1QjkHdW5pMjVCRAd1bmkyNUMzB3VuaTI1RUYFc3BhZGUHdW5pMjY2MQd1bmkyNjYyBGNsdWIHdW5pMjY2RAd1bmkyNjZFB3VuaTI2NkYHdW5pMjdFOAd1bmkyN0U5B3VuaTI3RjUHdW5pMjdGNgd1bmkyN0Y3B3VuaTI3RjgHdW5pMjdGOQd1bmkyN0ZBB3VuaTI3RkMHdW5pMkEzRgd1bmkyQUFGB3VuaTJBQjAHdW5pRTAyMAAAAAABAAH//wAP) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(data:font/woff2;base64,d09GMgABAAAAAEGMAA4AAAAAgVAAAEEzAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgjwIWgmcDBEICoHLfIGeJgE2AiQDhAYLggYABCAFiQwHgw0MgTIbemgV45gpbgcqQkK+YBQ1gZGyjqKEklaJ/v+YQEXG2h2afRxVJR4RCiyI3mjbqFujaBp7YJh+7AgSfzkTpf44Ho/HWy3qvgLbS7vqlV31c4Nc/b36nNwzdjBGP0V/h1SkTEqqCJZg6QiNfZI7QNPZ3SW5XPwkueRivVySJrU0lyYVjdWoJ01daCk1WkppqWBSoNjsWVd8gsn4wcwepvDDN4ep+/Fr6Zv5sIBHexfeAw7zhlmhUCkJH1K6FS5GFmSNC8/Xj72eu/smUYD+K52JhbYOgIQGdI5BGdIV+mU/P0D/A/jDbn5wAKzwfNpMLqqEFfjKD3u0ATrYkEwJ+xySgtJ5z0Xtot6uetrD/PhNS+lXuiu+0Zt4nIyvdjKztXsOwjLIVrou5YBchuQ3+bU9odaLCS+Sl0G2dvmz9Auk4lxj/egXhoB8y1/bnOKVWWZC9iSv6R5isnvwp4empCsBUcdSYdXohP+XzjRXKekCpZV2yyldtrZf+z2lzb/O39z+zJcZ1vAWgbBFAq7gUrew2Wa/eGBS3j1Ete07mdyMYbNfz5FAjTr8n6pl+z9IJVyiLkt35xBCH0s3nSt3LoE/BIiZAbTkgNwFAVG7BPf2kaA2ELygVDDZj5JDimWMIjdKckihd1HH1q5ad4W7+lyUjUfWUkusgFjYClnnAIiEJXYAfAVG2cr2VauIh6RnLbllwqotfnrbvX2OkOo1usYLWiXsMf+7v1fzkTW5u7YunlGIjGUQMsn+65jLULXbcnbOsRtjA+YIkAARSLYvAOV/PYsH0HO6FQA2fnzwNzYQ9HNPAL5d9+C/P07xlcwWwI1e6Dj0TKyqfvcZB2w5wwEA/qqDAIB2W5nn4PIoabTITYNnTf+nhkcrS5GmWr1lxu110FFnveya2z7zG7EJVkK9Um/U/+tmz/bufrgf6739RO/vQ4ssTdG6f/8FgGaWJkOtRhwMvOyX67W6Vjd6+zPu64OLDK2itf8vev5zz1133HbLR8474Un77LbGpFELOeCP9bi9Zm3/lheeMSq0Jx53vXnNQNpVTYnlErSzhN/mt1kJGNXg3FBPz9/qdF6M/hTN+DZf1Mzr5EMM+gWch2EUeX8C//g9+vZnYHyDxnOaS3v+BHv+byYTDzPdNdaCa5DooAMhSd5BIC5zB0OtWoeANPti8cyS75OhpOQLL/Z9qbYTmF8Xgmsw+7lBXi06bnGSPMXmkq3s7Pyl5dVLknao7zKSaU1TcBT2YhcJtwiyQwQ5BjBmILIOuNBII3xM4Gr5Z9cQLxnOhuj9YNktj9NfATpNe6UcXT3xZaWYNtann6MUVc8NDW0VjLY2LIaB8HGBzKV9rinYPFVE3CRsQ5uEySDF2HsA7LicgZMAdufc3h2jtd5072k+CdMMcOpEpXv+BU2OUJDlAcTfBBHVR4eCDAXpuREMTgKGeUzzxtqRRnHocBsAkRRj4qWW+uua7tPnAC6ujhrb15+c0sZ/PyXKcLeKzDshTUyexqDRRmH5NoAwvFhduZjDABZ7HTjOYF7bMq8Cyj7Dkzn0tQcYYxdaELKdPmcnMt33mEe4XKLy02B8JRudtYBk6O/agQNO/0ByXZQqhda3Ij3JsC3XqLJgK3RF5DzxBssBCxDOcAdtvCre8SUqU4ihE/CpR9/+vjcHsT4J1qiNd60jQOHWOo+8uiOEc0SGAd+dwEwS85GwgCcylAtSPmFQrionMj205UqKSdpbJaMD9KppvP8aivwexOt4jS4qkDm9E95/WZaMdZnME2ZRkO5/c9JxC1Q9qYh9Sth9CVYYboCWVRC+ixK+NNJ9+6zt1sOx1THbdE0zsBnY5sJIwDGhNKsDojVKDA8twCkdQASLHQmtf2s5LBW8/jWQNi9DfPN4Bhcv6biwuozU0qkl7z0DkP22oVqyU21eYuNadEQoyPUcedIIChpDhyagU5PQpSno1jT0aAb0aib0adZaG8r/RHR5/zWoVND7xWIs4/21c1H253kH5mrZ309bjCXWws/TUD1ckurzD4sYYwkVy6hYQcUqKtZQsY6KDVRsomILtTEIqQcsDHUmCkX6Wop+TOksFIMpWxxG0wn35Rk7RiAyFjFjzRt6ZR8dIIz3MJpfxMXvrSfcNEbGRUluGO5HL92x8IwOaYxDnhCvTWBJvZJ9lyEUVIZXx4gOoLcMXuhGGZecr5+WSUgtY/oBSPCvyDGF6lztmD60DnHWv3EGhVN0QyobgvLF0nzbPh/alWQJu+amu9F8Ny2UO31Xd84CROTPkvQvdtjVi5tWcdjbawdNpG6nxQuYK0uFdwZtHhwKt7eUjcvXYV/qemxiktc7o7/Rtm1KW7YIdJRwT56vIt3s8g+lfSRToyjmZnXkh5tcpBvdQJtqVmFfkHWUN4wLbY4eWL5NJ280yUSo4toQKRqB8hwGo4bI3AnNuYjWjbTH1ZnomOeCS7Wisgq03nibW/Cxm52RpFZJxJXFJtabPNNG5RnOQiW1WlNYCqHlyQNK2m+73r665KM4NNktsYQN+fElIiuMl0hPOAP7bMc4WIbyiEUjZGXnGSZmGoPUsSrDku01ma4wn5qJ/6u2HrZIcAJmo0WTa2Au2nhjS7EIttOHmkKzYngCbF0cUXoKZOZlMu7K0Xe2rWWVWirdwDe/gWJ3qv4YLx7SX8U4iX2UfKLb2MfWumFsulRspAmba5jtscK3bsZWsTq1vCmEALfd3HmvOlzgzqn6/OT4RdnZvIsCyp5iKq/vgZkP7J9CNFSdk1Frs6UOMKBL8G9KOwx0RBsWTQ1g6YC2FuFAcFNzSYGnA/paOgPsEyExGGYA0XWAcSYigWmkpRq0TIOWaxCFS1zXShpDpQPWWkQDwS2tJQWdDthrkQMtXNNGtobpOsA5E7koUrhmANt1gHsm5w8UYhGUZ6GEWrIXauIOOhuh7jwvHiDwziDzzQD+E4TiqChZjprl0hTboVs7iBkgzcDzOSewZAXWrMCWFdgtBWMGmDPwJeck7qzEk5V4sxKfpeDPAMOfZ6jxgn/nxfaHR290siXWg1pjY/Q9zAaxO1ncrSe4igDRnAJ6YUoOHLjIeQCzAsDyFfr+cgDnMqggoTWXuDepvdj0BNgeuaJ6mMo3FmbDt4XPBaMwHsXyGGYopPgMPJR2PwwJaCCBP9uQD9NKNZqFQidBYmsIKkxbEk5hMgJXORa1LyhxkT6THHcQqAzVikT50lKZD3HJpAVWqvnQ2DCa4l2RPFSmoNJwFyOqV9YFA5lDM83pYWEaqUMRqWY9CpOk3CEPStPF6d0py6uV8mw8TpGekVOZXt9YVR0uFuNKyyqRU4oOJ0klLCpL76ZYucyjoTGFikFxZThB+FWIUh2bZY2OqckO1aLEULtUqqG0Wo1GxBNxy0QclzaWxfME0FOgHJNCU3iBpuRhEAScvzFzHj7PX6DVrjxLdXjCF8+a3NoI/nQioFMpryv+pqE6YpEX2QXHx+EdsKEFkw3Nj+8x91UMq6YxOD+xhRz3d7CuNZkdyh2suNQsqXuycNGOxv3Td0WCTwDLJvjquKxQUE7ZdiwZclR8iDGU5B/kybl263/+M30j/+2sL0mivqvb07TgiD0TNRSYhNSuSDtwqUxIK/2BkdNkL8wQg34xxoziu2pS9BOb+w3O/jT1iU/dwtomJcJWM5n+i4LjdoQlTb+aahTXYrlaEe0pgQsOeiEIDalESz4w4DyXoII/XZ0uAGlIiCXrHNUFxRSWl+gU9O0w95vicfD9kBaAdZV51+IcBEyH7N/6ygeeZtKnGRDWJEfkvUILRjM1IMziuyP8CaPuhcrQR0sNxvaklZZIqSxwzFtDAn86GQSeRkZnlKOQ1hlZAx4b3rw9JbQfUzNLnT9PjVtHc5ZgGqKQ53FXpp+nWsRIs8at/ZYiFmKp0BcukBWuQXJKhjiO6Bc2qzK6NZLTA/EUiMkpcRjYRCIYAPGdrOBJQtg17YeYm+UMTaMLGSafInQOoh6yVKQU7uLaRbIfnj4E+g/q9pBG/n/IA5IFA8s+Rvhnt2lxnqNx55VzDYUDdZp5V7tb0maRePoURAtgd7zVZFKz8Z9gAhmZ+xmAhWYp9BBygL0upzjz5zT0oEcB/A4SFX9P9u/6wZPYMuToZfNjgjscQ02vFOTrL62/2SqBwpRjzQI2sWr6duW655qMScSm9tfCZJ+BZyXHUBifFGeOh4lEW3/cWrNvXzE3omcItawMijfepnY1k3VLj2s0hSuSPONCjMhjTdY2Du7LVZ3CXN1bUmgBReRuxQcn3Gp736VsERznKQiNPM9xkYDuQKymqNehbukEkzFKouL0NLYzZt7j0z+DbZ/KJ4qL66qxOfugrq5x8v53Zk0CwcWY9wiNjpJ1akBWaPUKx9PEuRgR1jTHrszJla9vE1tIXBwKbeHA+pOjymz1SJtyYLtlpEZeXHVb0bamlrL/I+mgYVjQibYUuMnx1td+j8JWN52D/pTqHEWgUs7dinyvfzU5xaS/JhNNLHJ/JM5olHO+lRXmDWsZasZQVx1ph9c41qqqSUt5PcXovwuEbfsr5/DiNSDAdep+YvTxtGQpJitf0UMx45c2kt8cL/35zjppa6s9htWywKzc/QS1v+MzLGHnAxF8gq2+ZW7z5xL6Wlm1o51yeUu9HZrsqGCNyd6bFFTHdF0LLfI2swGh3eQN2ccwx+RNO5GWEFlj1ahqKHZ15R4GHMn36E+MgX8XMsbIcig3U0HoIW+3qXPQ0WkWPr+domNnXq8el3PoRkuojmXgHbjR+gREkFkczyK/lyP4oqCLpIbdkjQeG8wcfdMzTG5M7QAOu79eaoLfQGUrNtvX7b6V3YjgqJI8zkMqrdtOl2sg6lMyxcTUOUJ399nl3uDKC3LH2V2OqTFk2AqUx55y6Tm3m9Y5rOMdVfN2HE8K+Ns4HnrMe+UVtXd3NMYVpLGho6ly8Pd/OgmqvCILwmieCI7ITGzJ6E3/7ZhfvBgavsTsjobWkKjm16aBVVS3sEGRsHiAvCKDyJv1nZzWzJN2kDt0qkqhH1pLdwdMIw4HZv9K7jmTytfqfhNb0kQ62vAnS9xMwaVEScodxfdX4ekT5dwwRCiS5RtjR0DTiIgA/5gEe1k7Ct2Z9g78PY/e4R3FxWAimJigEBopeIML5JHPvd2oLvuD2IuY0JQ54IWlqLGWn7cUoBlEWtunWuUw8yZ1WN/aio7Sp+Cg43CbdOP+ans4Bzq0xsenpk64fRgIGfk9L1NIQugJsJsp4BfFnooSDUHgMPZvydgtfpCloxmxgw6wz3z8RofL7PcICpVWfQKsQz7mgcPRxw3S9WaDo/d0jvCZJ+8bkvdDYv0SRzOiyArVKV78b+JaHNUJw2eQHwarblsowMPQ8eLBAba2LZ31yuS+rYBEsFkKctDuSkGLYjyfLR6ZgwCtdMCzJy6/IOd+cVT0feJJisma1gT1tvXOUHjy/x5QpkpypaL7lIzEs3yLpNbhdOwNTVNrK06MBOT2Qb/msXbDLhuvvNT8V40ZMrCkwfeaQCORA80+zKpRl1PPHjxConNwC/DYhi8t4APv8H+UGWtnuVyFxqzgoN4Y6ieSvP9J8ob+Ldvz8os5r93b9h9QetLsAZv2Hrbutw7yiyGmV4cgxWcvROjU0CBeyvCOpTgVKu5ABWyY3lQP7bchhHFpd6RCVJ+793ZtXjmb2alBl4h3HGYeDybpRckucM/gSCLUKFkJ/iBeWcRi5gc40a/YlTOl1xddCBaYrDTOyXRIMDaYtyZnObq8Eypvftp2oq3DCdFTDKuGY8MkgZuqY6Km/zyTpzDmDbaFEgfDWoU81eslKqB8Caxkbqmmakk2Z59UtE6hU5PHq6F1MrbwENyDhe1eyTVuqQrfR/Po1YpYyjHiGuuKFP+GLkAji0QBeJTQNVvUoVK5QESw2pDfeLMm98wMeLJQELEpTkwoR2y/mlrkUjjgOggfrhp12LsYS2dmFkbDzma6zhs8futvdOkRbTfrFG4zu62mww8EviJRzc52EBSRzcjpo2yyFdXTFPQfrCTrJNzokDwFq39Tg9PyrZgE+osSTyzc1jsPeW/htaGzi8Lm8FOZJJ6RcwzqVqEyOL3vwLGC5zxvcR1hH6e9MT5MjTsVPzQlJg0jx3Ku+Ukloz3G8FdhVmNQUp0BevpUsXV4TqH/R5bvWdz/wzwMR2mauehbMlQLchDQFYqFTo6HVVaxs3NRQVFap9gsPVH9jrIlSklHPQ0rHEhrFwPCwJ1A5x4+9J856J/tyBef/8Ko0HHgvG/UKG0Uet/zhsIqSU2WrSL8Wq1yuMBYtoMk0rA36RFHemmblTzVr2UZIf4F/gJF33nOFEsAV+jmZI9QHmPJbnpvGG4XS2kBL14go690fh/PvpQ0I07neCYkb7GPaXvbvVFFon5aaijEuAMDgzy1WLYUbzGSccDwVpGMFi2souvjUkdxUGTMN9EaiIQlqUvHxqBd8WM46Q2uZ6aKcei3Dh2K1jnZWBFWzTKxY1QcXz1GMpAVPl9GTQPjYIdmgMl2moGAJm07SdTY8w+ctlPiPO8aFK3pmgQW75Wv3rt9XDJNXHwuulqVe/v1icRZP48/6h12FHHz66bXvOW+QboINblXCbl+9OAaDaCbMA8qiu1vjV2RPt64c3CTyb6RT6QtdI3ionEcxphwDqVP76/07WA+rh3bnqdJCMZQkJFBErGJrZX1S0Lhyvt9hrSNgltPXjBrdljJuXdkFy/9Dfyr8n0LdrnsTohZbiTM9SXTzID0xzDO5NY24lLT/ymFNC2YjJnISadFgLsvwprs2mw1nkfPBJdKTVf3IrsHr9R6BnflJql71RMuK3T9KwlJng8U0z7LQvA4DAK8onMMni+wBUmjkFIWxi3DlCSAehiOgsK5M3lhwyrHHgYZpwkVvTI1q18t08cdtmzKccbVJn4xkZJzug0Pv6PsiJf17cdX25C42OxpMKWgmWxPt64BtghXsovI5znGjat1l23XEqMXEyco1M2wUmRHoQWRGuZRFm0dJew1uh0qp9NQSQiKMtPm15Ic29/0TqmN+bBB5fMBbnr5vFpiuq65QQJ43yaZu2+wqz32qG+BQoL2rvJts6DBmZZBlOhJ4nT684enYgi2fneI8JqjLe070wparRFQLq1pKiU4ruiM6v6R1Zp5w3fttkwGZCdpxkQ0XINUHL84rqpmb3GCsqzBfDwH0QPP4qYb5knknqT0rDjau1BiamkRRMyxyrAv6ci8Hq+Fxl+yM/+pZonJiEv4EyZznslzdjv5P7kunkdQsZkWsW5C7Cl2N06WqyZpCGc+QZogrcESRdWAVBMPiXJdrQKXy0kHYPdc6kPTTXQf4pZLtTfMZSy11qX7gyK1UzqwTqy7r6oW+G7FdfdeVw/ShczRdFk+BgoNXZKElWmXTan5nZz0W+HzqsPOsCC8V6V6DX64Euc+z/d8FHa2aOYpCXHjThxsBNvd2sdkbylOOfYxXiIiFduOctYomE3mInV0W1YXOuWZYOqaMrTc2Z44P3GCL+DrRHv+vp1NsbbIHfWJfdKZN3LqkeRpmgoG2TAeJgjhtQNkp7OB0MafkGTlHKZGaIw+UU9K5ebNGtHjxWOPTjJ0RzQpraD3XWEcpju5skiINehbYzzZnnOGS7t3m1l39oVx1RSpOXugcdFJJhtHgoEfNGg/lbsQYIEgzfTttBody7V+mCN95iDxt17390gb3jvLTjuVJeyuXnmqzpn9VSAdlxnnATs21W58lwYyx2zzRXhY5BMlzfvAu/imx4gBb3Qsc+wTX6eN/dh4unOGyW7KusbqAo2rH0vZTa5anB2Qg+5+V1NQUHifDBeY3FfBFvdzPNAx74tR0tYlwm7Li2xt5TG4Tolyq3S4l236Bt7Hqr/pmMAb4OtkDufM+O1b85Z798j1ODJyzcujbaF7oOpf0I4UExBOma48qdkcu173bqkrQz8wtz+OiFQWhkFo7Qd+/GMXmsYRZ58hv8U61fHBEpZaBXfUrWY9ZZmqpajH7m70hzbLymCV+3gcQmk7WufY1tCFKdEeP69Xz/CA0L+/TkzFEH15P78XcQQk0gJZqmd6bKxKFVh47JbgYUKMeZMZSqrQhpnivhwNlvIzMMFPJcm/wzaxFUfyPqQoNKmvHmVrGC9UlaMrehl0tYRwcpT02f0dzESI2YjNfPAic6L/MTDZ3bJBW8q/Gy/xIP54LNutrPzCiNHST4odbobtYauGr2LqBkKDxUYac83O9ZYiG1kZmeskUkhZxX8TteMZuZrir70MW5j4m/IU81qjRNv3BHx66CCrEdljK5lKT9+5vmrxeKqtWYWR2J1/mrt+gq6d1WAaUnsFQ6x4J5xhqZS/KSM2MasrJ6vKOeZ7cntAYEuNMU38wXEqn/0+vlxY6dXIb+gd74lV2Jc7nVzF7jn59gcV5D9nZfCkj21Z6WMoMIJ+Pfc5zc58V93MB2vOqA8nd9nMz+aH1ptPa0/xC2S+752+egss9UcH4JzyKSChKwLkrN2+l0IRWxU+OeR+y2eFnhWFNBUYZ1l4MMMvHxbrkLdExFlxj+9Ocv1gyVdJl6/iKO+yu2DlK21D7o/IxRj9gk5eA1nccnJYOa2uaGr1Roz63aAe6vPfOsGp0rIot+rVXlfnVRLjpOgXPm5PvegWoLfO/jANp7d+c7TTymgcs+mmGmbJhHXJ3anmZdoAVFZrJjda2e5LNDYtc2xaVPU7Flv3QwgoNvZK9Xmd0AtEjmT4UOa31kpuATOTzGM8fRn4689S42P8Tk1/V5FdF+7A5wK0jFST/y+U+wkUaYEVmAWyKUxAww1fWt1VQXqeOp30s+fJwDxKwyjhu9dOqVpsHHHWOyvKDZS5bAXGeIM7j9E4A/S9+TDbHoyS8UcdutLjXq5Ju39TNqCYe7x6qZIa3sFmqOH3bZYG+2grbcBBf8aJUUgXkfE4XGbSNgvsKeV0KkBW33aL6jHn7NhPSloneapUKnAm/rIt3ZI0qe0IPNMy9fcd1WJUqSnXC58+FfLe4hDrlU6M0CgEyrrUMkypRHlwu5XeIzUi3h7lWk+2xmgMAlx8WCulrOmWWLM72enII8IbXIlmkdctv23KrdHHS6P0HxTcfxCNMwwWi/eGP63EOkW5i1uXVnO+g4dixzBMIScGH9uKWBnImO8kq19IDkhDOPYHdwogKxDuYpIJb1mFFGrKjXOmESqKCsKnVCVtuWevEbyHiJzM52wHpcQLtBA7wqfe5KJMIdPVYPsFMk/2BJx0s2A78thZT74OTpa/ULQ2/57rtYAduEPv/iUswH4OqORf3vBfGq/uHYqdimbWccwBLHzZ0KiBKXLTFE5MkhqslM+Lm+JktqwG7TQNoitMYWUay6smzZSGx755FFETelYXdSbSkGHJy6goXfoFD36uksvDoOvVGdrKis/eHEsk3n4oHyOzJ4CJvC1pg973Ycn3EiScWfknuP83VRcVBki5ggzUN0QURxaDixedxmF8IqLw1aSu6peO9ZdwxWFSgbnatyK1F7ycGQDyNqcNeJv6eWJQjPTiLulXqX1FQPGKCg1AoxC9usfBYPB79q+/60hxVWJ6ZnK5NcvV1IC6xbqbjqysruHCwM0dQsl3YoHc9ebX78NiXIyYzBan0QYNPx6ec3MWFLL5kb6SmfKIkFEN09bk3oeLCD+D7Fv21idYrrz8k4Wg3Zu4gM6yLSxVzOHy4lp5ly3aMlhnvrYXvNOTJn1XRAT0it5aymvURP9CdcgDEufUadWfSub5MznGC+DC8QKx4XzYkkvDu44UZPcVKFfIA9qlkZRarFgsL+3uK0FYLNYTu0qFJZVL1KoHSupMThPvtfsq05RKVbeKQpl+A6xbvyM67CsaBTCyQpciZfc8vfhyZjcjyuYrU+U5PtZRfsQ3TFMPVDTKhE+tl8ukkV/k2DSbbcOh2+tBA3vEQH+/TgLRkGqwFISQ9XvVsryc0xzATIIAHJaOm1w6svvvMWRng1dXVQH7vpJqJOjA0WDXIc+s9uCTzGhZ1GoZahgUS9+Pcg/M2X8naoLrk6rLYfyeiJIOPNTRd645+SNXbc0TmxuvXcHfTZMfrC9bfs/8iGF11+r48jH4pzUGf/hNYEUMuH73MmZYSl4JJ0/Te8pAjaGadMMKrEkGQ46xlsFPXjno9ogmk9XIPeFEniPFJXBupQQVw8bNF58pRP73Zg+wh8NbYMa3YKJYUbYR2jYDdCgIZWD3bsC8wzQTMQ73Z1jXWXPKlP4bhf1rz/J5ZvSM32HK+pJ/Wqhn4R6RqX983DMt4OF5CQPLgXH6BTF8Wu/Ti6zLv3z3uPG+S/kBvOZrCS0RmHJNAwewYYm8t7tLbpo+ZFwPM+iZE1q+eMS2pPCtczKsqS5Un6LutDyeU1hc+dKE6brR7GXvuCP26Zb6Fig0nyy5igmXxqywnY8+gfy6Q4HC2UyWBoDaPNNC+aS/aWamK7wRxJU4bzkeh3ri47ueAT/9zw+4P4imZKy5M3elQO9yX4S/qTScNyQnLYj35Km79JbeWdXGBMV3/yTrcl4GbxzqU8Q1waRxg/V/sREIqtJkOQv+bmw96JZIr3aEzQNY+5vnU6ep4kk5wd+dUFOq95me68l33pzFqxXZuVjxL+6o5KIxhUSOso2vvinifwELtno5UqNEoajOjIPDHmGG6LjbGzplbkRaMzuXQcQoFzWxO4AlBba8b1blVDP+kcapFCLqjEX1gFR/2V4C4kRfci2TxAxjC/7UKSCzOxxtViD7vKwpVrH742cOPkc63OWJ/towTChbIxU93GkxruSJazDFxkNwyWXlYYVA5pZBwzU8Y2bMTvH/nuMjuudK399XUT726OqtsOK6AiljpvdxO6v0xZeecIHMmn6r7Q256RH9sJ3HYfEK/DKP/1PYFfErUeNucKAThmW+ghyP7lqkWkJpC9b2gfA3IYOFJz4mVJSRlcpImyb+209GpjCcXcWHS0tx/8SLXy3IyaMUXCjY4kkzH+5tX2VmoA8/B0ua5mMLa4sXaBfipWN9Feh7BPz5A/uXOR7eTx6mb60v0WKSLwCXvBLneKP4bCz9LOrTdjA7t/hUCemVvqhBCpP0MKHI5kc3dApkI82Q+wOlTOVZtsRmuGBSeB4l21HyOMmPfmptwg15pbImFYFhrFAuFrnbXaM5UyRlaBJwne0J7SADAR06V9bs6WVOpXT3W2dLlzo+j/cwDxkonTPLDF196l5pUePrhqgXuBp0znHq8P2jdq4d/nbxj9acKHyRvHy2t3lBXeIZjVYjcucF3fTSUKo6hOcOt5Sn3P/tIldUcjLo1x5MOgTd4TSApD+Dh+QlxD5q5DaPfpU8GKhKLE5+hCPEEgu8nCHor2R7QPi/46o/VTFrArgh8DPGZFpLBvRdS87E+xs0eRVR2XZvigdONjeMKR/SC4Rdxorw1nUrQ/iOsCS/nfXCyoR+9dtKvXjfG1S7sl4R6VD9viSmGw89jPxJaUPa6M3FAXCGow3oLOe7qUh1Z0a/PXPdus7iLVFvJ0vSs29fczeuWlYh1qsvPcrHBHwNhLyR3xGZbV+QiyUh3rz94wsKIr2g/FMpW0t6RpuzEM53cMbmLelRRAN3OPsk7h+TgRDI5ckj6ol4BpoQiFRsM7pooEzhlhQsiNnzWZRhYzmw+K/FpPprJsLFL/ylA6AN31BUVv61iZu83NTf3mwYzpa8Eb3W56Mbe6Tv3Z6cjv3ZaDI0y5prA6pJy2Tflma8IgdM+JAIsHmJwSNNHXw5u3de7pz611mb//R38ZHHmR1FSUWVgTxmu3aoPuV0UYuhjCMn0a1COP0PvTh7olWdG77oqWa/0/gN4Bh3hx/TJWt2mPcgdykceXSHdQa0KTM/+vgTfzyFQSuy++nivNzvGjxNEdwMxy4idkcAG+hhjtCiMD0npRfkRkSwsyLecpwZKG5oNNaB+g7xmCrCv2DsaMVR5HQaL1Ppx6CKxw9oqIm9dg3Yu5XsFbuOLsh1PJBw6eLGx8tIW6FMrF2rLs616XOEd+8Cd59Inj2/2F9jS0JB7bB+GMrNBSaDuLZqTpUS35n+38Cz9Ep6JQBVVABzMZ5Wod1zJy81lLK9bGGGflIRjCuqKy4P5WRBUZAVMgNxUDGP65XpRPirdaVz43UinBrY3qgoH4+Jf04RtOc6C+eamyQDxuRsjc05Ns4aRAoJNwPATVtVUnGJmdAhsC6K0THsEcibV3rb+UMjXfZTuumjZybJlZeOAb3tJgAsD6pu4m5sQxbgn4HLUnY+xG6SJ45xFeURq6IrNXJAxKxWeZAzHnCtEYCiYwzzFlze4e8JYeqGqUMmItmVImGlwLL21ev1qemuDyEQTX7+K/cOEpHNRnA9AoYYIKlQma9LTj4LQBxIdzjyyGHIlw30Vohe+slaR0TiLrpPiJDsSqGg43cTMR1vUykW3jY3uz8owCazSlQHHhIAKMbmNyVsu6SFEzgc/bBuWFlsvYn5PTuUJAV2w82VV4hQIwpHdClUr5tm9EsXSt0Z6VByMhDO3++uDEa2gYQCRawZiSUGloWnI3KSercV5vkfGyulGeKhjsUJD+VX8huEaERDoXjS4t0OU7jtpb8WK6neMSyzXBc2pSiLK2woDFku/z/h8rHEJJsd8jtXOpvRo5+K0DOlxjBO3Bugnw9/DwPPMoEt1jWCtlJqn2W1g9ol4MTkV45JpadZVooU7aAlvAkklC/4/f4TitGNcGZmYXizJFZoS1McNwhNTEZ35iDh6ZLwM6oI1MksAnk2S+ygrh1UChF3OldRirWzcjAiu0CrpRWUc8zvqRN++Hl9iU71XCRqAACov03B6YXeA18hRz6GwNQ0sRYUfcPll/b+vGjbBHpTyo9fho2hXlDlm86rq/79gtl2CI5rejL5exE8nOX17cLY01u76nKHa8Ft9dgkbdiBKB+DZlF7Vc2M/VMRP8K3Cze+6xp3rgDAlqK/kvZgMecATXMDWfswpmgD843BHSFu25xNOlB1sPRqwzQXOrTqyCpePypLKAt6yyWEqywN6XpBjeoyiYwM87QkPRCw2KYf62cVQrWcU/1XwvQfkN4zXIqmczN8+8NYuZ/wYxwVujE2Ts9FQmH3mL9M4PIX5/41YcFBdGQUfV6qlGsP5xgvkzeDZlPtcURXKcGXXWvev7kXaJtSkGyLglPgAGA3NwOaTSFDLi4YZ2+XYAFQrysAJUEymLi1qudw/aW4G8+CdUu5UD+oOm4qC5aVGJAxs2H6fFCqwD3WQiHpAf3grhoc8rKUzolHjnwq9uOwkqPdJRs8Aw+gI5tXDKUqFlg2vH5uu4iInmkTD4x3OV+kukf3l0dXRl/mbl+tetEr+wzRt1DVg60m27tXT4VTBxvCEoamVHWqZlJW2y7kpMVot156dSaLW5V+hqdQq6SB1b0N4qulQKm6p+KrtDSaSNnVPzOz0NKU1vfU9dgGL+COPKDpTfBP8zdZsewvSeVNAPkWQw7CHHbm66jqLGwSZ0eSrQrk+GmmYnnmU00Zsr80qAfWPFVvnQZBDri/jyw+VUfcyvEX+FUvFhNJJTu0QmZ1HSHPN5VZpryx1vjH3xNw3niCySRiDnuJ//2nOUa5UUmG008bhJrdsudeA7xo72KC9n4UFnff5q7Wf7qjOV2AT3NdVqFn+e3UIEuq40J8xY4vLm7VXOgVf/uvG4Ofcrs4UNovgO4UbeZGUP7dvBrrdgOpYWOLZBl2yFH4imX1iQ3rbRLlxTikLTq+JJSSeAxdx6BvJATizV+aGspiU1hJ1W/D4CUDopRyXR8S2UKC4A/DPBqeGHb6UzZrEHYGzcSy0M/LIheav2e3rDF+RkqaN6yGwH1feCX8ZtClXmw/WF6eRxsoncuZ7pDnZ6ql8GtqjJj0B7KzgalpZr3M48dMQLvrc2fdmqMl5hBF/69K+bkf4VklVis7K+IY/89V9BtIBTstgJhhTaw6NdyPPjDO9E1Bq98X8SOgaCJzkq+ZBh3schB+E+1e3VCjtGkdb9ovR3ZPnB8kfmbQyMq7qYn1RMwGT8MKAQReFV1lysphjqPLA2WiZQbYDlDbLKmtf3wUTvnhaTmOTcb3SR1Z3DhooslvOrlXR2+3ApYkS4K14WUBOmnZhl5tpupAG0ZMruWDxaIICHY9AWf3LbmQN2JyHKOyctxxHXQBqFF7QLiBG98PGU0sBICjVxtUtSCpRME4T9ARMYO08Vv5bUhbZE5cee3eZDU2mYN4HbUI8CrQyNRlAGXnhHv2oOcsm1eHMtQYNy0ju99dnJ91yW3YhyZ716Bpe5gnLSedo1+gvRQ6mcgzPSTg/fn0L4rwp8rEbqhAfLQ4bpXKx3ReLg/WcMA5Dw9pOC4NLXMNvWVBdAayC8q/hkz5AG5xLJkcnIxb61ofGRVtmBcSk6ES9FibuhVUyjF+pH8e4ImQBggCk3YDYM4PnhwOWDKnzM7yQqmczD6YqALpUmAmJ1ZGJn826UAf2TLmih/Lj45apTGOdSheDZpNDSAclLeDlvZedG4HXCyaZdzk2Jr5enSkd6WAFwWlYfHFM8jd9o0BoPLJYURvjBp/mPTVF4Hv/A5CLFfYAB6X0mZHpVgxqM290mCYF4EDO/Hkcm7IsOnAhnmqg+oAoCoDz+syDwvr9vkD332HlTz+o9DnjjhPQjawL1eSW68tL11NKdhZETcowInpX/7OAABXsh5/kNSrlh2FiniVQSpfng8NisSUPyjgeO/Arb+/KOCNfL70HuAPTIC3QP/JmSjT1m25xq3h4YJEurGXeOBlX8+C22uEzzEhG+Z/WpeD0Koij8hl+IcjDMUd6qObp5nBJZDLav6aQbgo3Bipetnz0/ti8lXPH38U52E+P6+qLL+UDeQNTotYg1MbRFE0xnaI5NOrTVs0XBksl6jIilA7JqTYZvThF7RnqxoJT9eqoe6ml1OLCfobbBPqlwcYnHvSmri/bJflcUTEzysPLcCNCa4PY5/jgr2XhOJe676T4lDDDr4Ut0G6Uf3IJ5GFFaG8sB5659LkqpralARdYvA8QUXssitCyyhV/ZN/K7Xhr3OJIqIQub008oStkeNOvsCDn/Vz+ReyvLsL2tPecOMyukdVu2VpOyLN+uOXpumqUfWAtNbwGd3b2/s+wrJRt4771rS70yvFx4hIYzOobFA2yEbJ6b2XzZEkMX9rLhffc0p3lxWVNGelybcwthZoCmKbkjuY/E21LckFrF3m1S5Qf9KtVx/+7DL5J8Xc6tQ2kuE7ez9B7lD3VfTaNpBrp7a36/bwtsjKaqkZAEpM7KDUJw51pOx1Kvq/iaqo9/wb0jHvMAPVGh+wMNEYQFtjAiol5HFP/dj3ev3KCfrkfbL6zws9W4nY+xbjVbhFPhvbG14idWhWf/U11pH2IipLyG+5gpKvKpGkr5I+Bsqm08oeK3DxXsZVfyr12dx7+ojzVxVHRqc1NyntiyddCZ/A2Je8rULTv7e0A/Igcrye+oX0iieU3Iy/cibiCePhXIE44dOykEmBIvQkPQkaDGa/ryAhWZSwK3o4WyZBcGzPPU+rnN/ONJxr/bW0LDHWzVpln6f8B7awqrdJbe7qrfBAsH3pp7ZsjYg5NalEpFYoZtn4eIsUYRCuui5tpYoabpwsIaLIh84R7J0oCOGBYMxo7Cg4x8JPmtr0ldQKgAkfom7Xf0tTDyjdHYPyb/SadIFYP/I9Jwlysn1CgaB7QhiybnFYUr2HTFI8D8u8Zn8p8e9Sb9dOOr7nHmW8baRuqsOP4UaQNswmW1s2JSBL+YrX5DvnCvNx48Vesl+GxBmZjo+zm3IC7MZpjuq+yrD7Zx6fbxjVnmXuc4/3EDYlJl7DFyGtCCnbtss3JIdVGVjxAab6s+OcY3xndnwsXMRnbh7FaXkAy157OAS/5qPEyFLo36YIrp0R8pUHca6VXpqFz0mNT372ggpTd8pDqNcNSsYW5PrwW8Mw8QJsmE9lx+5Ew0+r3PgC6Eq8AXUZPrxwjMysuS69Gi9O9jpuF5iGAsVCqli5/wzBF/vBchBMCIt+AlN+TOkG3Vb5dTkM0WsN60AbSinIooSqCt1oN+rZDrXmU4q/ZrJ5j/khSKpK5mwdJCdeNTUoEPDEddq0LjrcOx2oiGiYwskejZrpUVatWtIo+V51UD1d1g9NWbY0pyBv4xvUaJ0qsceuFIQ1/2aLrEey+FFrAOMMpNGyWHvh+lyQ8l3pZVWFV4gwVcp3K/GCr55eCKKHq32YDP76AuOGkmQrvB5eUmCsqu6fSvHVkg5FXPhtHBmeF8M1Ez+HkCbxJ5FF5aFCuQlrn17fJmQNbPeilQtF8CEessG2Oltjqm7fhk4w8ob69qut5cqGss6r8bpfXoMtj5qJ8EvmMCJlb3nFkLcNG0OtrDPWCf4jKdeyVZjUP7zkk9QYn+lWn8L8rkl1X8X+Gseo0vKbjPRq07bC5hGF3HAb7HTijYiaDVZS3vsQWoGz6ifCo27FZi0qzMZ19MM0uZ7QvtmpTUlcIRTvaY+3LMx7N4M6EjvyHzr8up4xXzVRN9WJ8H2+Mys+UsJsYNZBEeIGkL82y+txlrIxWA62wOitVqrOkWJmLRRgx8bTgrK2mCjjFnolR4PIqsTfv3zqv/I8fFAspthmYdjOmEyPfBccx98z7YqfcUoliGqcPLvLGyHcUfhidH6mADrKidj+tFJKfB4WvPCUOs1OTRx4isfJ0ihqMLdVeV4F5MaAGgGlvXF2t4VOL5ETwp5VpzFrG8cegT99kTZaTf82PErl5rbOrdcfWGkmMplqAybiEwQ2vvLszppo278Riqt0uTyXyUxBX3oo8oBdHG2Z0eoJeKxfy9MbvRFs7BNJ4XlJowbfruQN3yQeXWcgMg0VGmAy2+dbUQg+pWcoyXVYVW+A4qq5+QmnIttjOUCJVWrXh2RijY/iVTkfTvyc1JKmLWHYr0e+2V9DVlSKYv95C96TnCFR08/oRtWtRiUOrj6sJpNGo9MGceShwVCaoj5/l7TyQmubM+YLW/jLZtV9lf3D2Uv2sHxeUU5PoWQx5Rq6t/Rk+vuyBV3HVCWGapztC3v4e6ZSY6/BTn5usdsbH79FeW7zq9M5vlUndg3kDNUHntiN1owwm3uJggNxyaOS/7LArdut+mBtvN/oazq9CDdeMqoeKOm2YS6WassqusFRgBBtuAW/vO9iBD6XmVDBwiPKzdlTpM6VnT37jNPTWZ6/s4GDrRAgd6+sxUOOrSpksLwxr1H180/q2HvTElHTa4MJk6TOlbX50tq1blf+ziLIztkLu7moO9MlRnmiXnAOwTy/wOYP+HEI/9y5R359FzzKm+ImSXVnX+XxD1+sktuEX/XJwiLfl2lefh2WVBvbTVSDxjQUrmbeophhk9qhZsrD1Q5k5JEOn6GX97dOYn0hJyIu11KF0ie5HJ6RKXH3wnu51ke6IxFpthqJPnoKaQY5PpDT9LSd2Baeg3Z1Rrwn1hlp3eKNb9dM9FMY9yXMj7KxNnYWzkqjUPmkv4l252u8oFiOgnGeHTOXd6GHiAO4kvSuFKCT5oBBq3lRwNXcgizb5OoyIyIpgs2eh88WOcIm6UkQIpNqjz3wNLMKkl3J96HDErFYPJzl7ZOQv8B2jXZQOwhArNsr5s65D2izVmEhatz2TfjufREckblfFwVph7R94MasgcyB2Xo7SIJgYnX+mHDzUNgk4nhnZUn2aAbhYY+srerNXVfs03HfyuVCLBe7FG9VPM4FGTDOh3ndfTQiGsrscpY81lov8ety8nTuguC++18IeMa5joCv0u36wdgV1oDWB1O3rJnHcsN76C2ty64BGG0bDeWrlH3qxOEBZZO6S7g8GBEheeHS9NexPOU0wElIajDWlT8wZJocU+Q355ZzUQiGAZXTHHlEI1B2z6SWp1dkyBWF2dCVv71UuPp6T1mO/QUznRxG7MKZn6WYuJWW+PiiFZYfgCTdo6PPQbX3UbcDUxVoZGlxMok/3fiqHblIBHZF/v8wZanL4ZrfLpjPL25NyuD43f7snFnXnvopbgOs0N/waj02v+HtOlx9bmqZuRV0CIsTBVG3oopu/i0EmIcc8vsmPI0ujRnt0/5zpNWRkXp4+OI7PFCzqpzU/sqkWH0rvow+wZndVaJf2ifMiwnBvFdeFsGvnHroQoCAxd1bH+oSf49HdJ8AqhazXGG6kAeWdgHrhjm5YYl4+8ZN7U24mOjr/VD3xOMzWubik9og6RPl8PUIBGJLtm1u/MbMgZSwSvP16cgSPF9mxoSbH2dZRwEnXw5T3jBpvqMnFqFeux3yZAOzPvHk+5aabu5IIi0/VuEt/wOeAa7w/IhufPuKZbgyD+1MrU6ueKaji28KK/ts7zxw2dusDOuDdyozdNpPfYjHyk9W1Jo2RwOBpHv33fuj3zyzIutvpZrPxsLfQUFxelZ2iWE16s/of/M3Z7xffcd2KeqZ3AykiN+ayrDDvuTGvFBlHkFIm/tmy+SrG8w/+CT38hK7m7TuOlxzhskdF8ehtrN6bnFBiecG+OcGp9wKYPvlijK80Cjnvh5hvbuM8FrXK95Q/alWyIsU+sbUBknO2IFMoWCodIXc9xbPfIwJ4Qe//nvP7sh1RXN4XMTK+lZMvrTQ/lKiqS3r8wZJ1C5z2DuM6k9S2835r8of3rwlRtPY9Xfuam57PMiZjOcJs/DtHH7ogw8GTzfPnh4IDAdxJ8V53sByYcjwgUC0N+A5dqythOj9wizqgvKG0vSxb1P+B4PT3heWwxwFPrWsNQaOGqBkGvk3I2b3V4AiHPrHsaYUmCrx9JfHXYSD68N2hnt/X/JU6iophfLzyYaSCw2KWib7NQOuYtai0jVCDqBTFWFuvflKMi2gm/XMsWt9MEWRUWB2UjLINuytY0idUsUMt1XbGxs3jvgRyDt0Ev6jO7cqmP5RKIdIpGTj94d+vBTPmSg4yPes46pBMCqybRjOav4sLHyJx7vC1xoayokD+3j8WXT5KL2qw/TzY5kHk9JVHXn2zJrg4j1vvgG8hbw376NKq8a9N+dzMghPxLbPLs53risnC7fZcWWeYnr+jZlduZ7SX4rF6ScL7bYeAT1Wh+hazow48rzs5Obcav3F0iQBQ8DW7RyQhFIcfjUeWCnkWObkVQoBHnilmPeX8ZELE9EiUJ15ZWIPDMaxO3rvEBOO9sHQFKvV7CHINOEjgkc4Rr1gOMsLZRgHEaIaNDG9QbbBDKWTEzOgen0BvS8mNCc0zToodDgMGL77qXAdD+E+f/NVoJ9tNJ+Mbmaj2WkRz3GYMA9QFKhUsJA0B/uBJRXvr/vouFQQAa5eE20PeuXUCxKOdd4YEqDyn4QcJfVnRp5VKtIwqOTezXjWRJ1RiXPiz+HEtF7Pzos4xmNk9oBEQJWF/I0yIez98HkAcudO/weKgsJpBzLBF/pS+P6tIXbnefh2B9u/2d64O8+Vk2O67j2dWecFgwlQbiq+g9MTyl2XuxbmEcwjY7uXgYa+pcCJXP7Bnbq8Zm+JQiwZJiBh2QMjMR1uYedFPGKPF2QqDxTvmAcHo+5Z+OE7KSOxWSeSt7PqiRa++I2akPsDOyzUFTdh0tWggZy011353uf0Z8QbnszcqpxwGEWS0M3YjH/OUa2cI3jeFmZjYDoYBm0xgyCJazcMGel5sW/CbWlUO9g3U4A0pbzhlqpvfbQrvwY5ynvhIpSc1Mt3pGgcp3tBSnWPCGh6xomohSRpb3DG1OgxH2kl9/gzT/gMTUL+iStccDvOG1Waw0N7e009khktj4K6pboRALqbir+wQqV7G8v5+Lsm2M7h6pZ+eQ0sFb/zcpdSXn1WKFDvHONwLl++2oNZcokYelW3XHUZlxJr/XdsKXR5omD2tG5BYj8E3K2FBllJ2W+kjIz9RbKK6gRZ9ym2KDpsqa1YVfF7SXKSZ1qiC+xdE/d+wpVPNDNSsxupr5aAFT0g7F8f6KqP3NZEQM3yqmtss6c+v9fnF8GCJ7jISlZBhfLJJWEcY4BwiH8iMHRx1xbzwlCof+G5vo3FsvwMckFc/lv5xZy7Vg5IXxrkJIwWTHtZUvGehGOpTk2V2xc8DHyIxX25G6z5TVr/wzZ1N9wo7LvxTYAUIXnwEKfFUT/qWT1z4os+ug/05SWX7hk+x+eF3uF9H5MnvsvJR6U1Tcyfl1ERGhISfqdbIKT13vltdP4BuuBTBq0QYEfUqQhaysvkL/V2uYXGsrm9vig73aVBuI9L29aF4/UTUh646TIwI9WztToO6CIoI75BAJjTy4wcAXQZoMcgUq10LSCjQcvu+Gh6waXYdCYzKc6q4nPUUpozUtc4RaGCjpZ1eHaLTMRdLsm3C5drQ1bNUo4/Cth0Jj87JT5KwtlUqhl/2Raplaom6VYvk+hqUOaZeqRUTzbqWki3S3QlIEmKkZlEXC55M2Kk6TO1FVkJeuE26mh0oetZKt0E6ASgY4DeJtE9gK4H9DAIEfuzLuWAgNhwXY6i1CiKO6WWVt5S5GeWo8JJiV5sijKcOte+WeynL+NDlhxGBLLoSyct3U+oFAK2zKhkUBzMSZBmcbqTEcH1OEJncZ0CXK24zwPopSaZLv11USDjZ1kuRaDYqBGBWJIhtLRpNQOnz+T6M1w2VBDVo5X4iQpzvMkSIH0my5PqoMAGRYMWy6M9TuuTFGanx2Hw68SoGJJyIq8DA2nm49BnTbDABwoEdBFQ1ssL18VJY7WUAzm9i7VqREoB0GlXl6ZYKXq+RcqZBihvWNOTDPU21Rbq9ASgwoqlKnzWUT67QIJT0cZb71kVAyCAj/0Xlxww1MtSf0ZknC8Af2a5+dFL2ZHdMp+Cx2f9DgCCwcK4G9W6m/FYE5ZSRb8uTjq00QVwH/7YF7xvuhZ5to8aC/s/2UM2pcVHuW5OtLRV5H8S97TK8pgq4gOSh2nsxuVe0MREHMKVuA57xDicbOs9ZEzya7TffDfJaZa7U/JHdEuvn7+j+pCnV3iiJ7hzjbOaJd1z7jovBpRPhO5ye5vgyaD6O6r1Klvrme7z/27ywVjrfeIe9YxX6iX1aVHxBPOvKgp+naZFuU6v1Wy1ZWZ+q7jrzrP5mMU/lU+YnQilfbRU64MsGiFWbc4vnM2fC2VSqBa1HLlcaICzARwq97FURNya1JKKXBo4rfb+17baOFd75s+dIiCVHHf1scSp+3pTJuenNBei4z8TDC0kmtO85HdxqgBcMwglJ3EfVYK3rS1yGkAFP9UU9TX+sSIZ+XUSg35uGY+ZTIvnZe2qRb71bFo8aspDuCx5ciqb1gH9qhi6KfCEcywMC+fy5mNJ1txjWeT0Y4Udbz5WaoV8rLIa97iufqxXj5n6SX3j/RmfxXqN6NepXYdBNKtmEVR1sF9RkpgtZ7Gb5tdqAMp7LARNha28OfLoiswdvXs2QuQ7WE5M5Hkc2YiKnmqjFmwtMiIvx9JHVqhXwDt1y2uxbkvu+ODOu6uLzbJ4z52ydr92rY6kjfY7T0YjrcTM+9QrCsjLWLKfkcziKssWeErGBzVvQ75EhYt1YFgcyCEQTwzvyTgRArymoueEE6UafmvZLNKoqh0WUm0pG0f/JekipBrk0OsC7Wqc9Tvm0Rj90EkrogX8Ij75UCRxbUGflFao0aLh0lC6RbYzlncP2PFghm18eMd+jwYw8Rhr3oArvkTKFueSpiNbrau58lVYpBfaj7w7HwGiR0kF10ZsuNs2rdGQD7w7QhNV9TIiGx2GHiWmqaNkQnEM5L2ax17RgGbReK81tLQ5P9bN8Wd/rCJZ8m18iH6J/07nsDL1x6Xs/zLtL8lksTlcHl8ghMER5BRISioUNQ0tHT0aw8jELJyFVYRIUaLFsIlNs/+tDnGcXOIlSJQkWYpUadK5eXj5ZcqSLUeuBfLkK1CoSLESAUGlQsqUq1CpSrUatRoD4d20W2Zstc5ej/vQUcfCwW93wyVFGv/ccNN1t8MnkyyyySGXPPIpoDCY40447YyTTi0vudNpH/bYs1tH4xJu8CXNeLq9vOzzixY1Fn6CsSQnr/Ra62AjnH9+UVNLI1RxHSq+zgteb+/4+qF7A53di3s4xdc6OcVn/ogjPUnIe49Xj/0Yge/Hj9JvP5907xj4u68agLSM+77pMmWS7fldVa2oWLD7yXjYBBDnmIfoLri5D/wADvhfVGjt0Yqjy2uv5vCoNcKzJjClA+Ljml/1+QXnzQng4B1/KK0hffVTPSY2IL/1nv59tLHpRa3pV6plCVjbAw==) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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AAEECQAOADQD5gBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOQAtADIAMAAxADAAIABEAGUAcwBpAGcAbgAgAFMAYwBpAGUAbgBjAGUALAAgAEkAbgBjAC4ACgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEANAAtADIAMAAxADgAIABLAGgAYQBuACAAQQBjAGEAZABlAG0AeQBLAGEAVABlAFgAXwBNAGEAaQBuAEIAbwBsAGQAIABJAHQAYQBsAGkAYwBGAG8AbgB0AEYAbwByAGcAZQAgADIALgAwACAAOgAgAEsAYQBUAGUAWABfAE0AYQBpAG4ALQBCAG8AbABkAEkAdABhAGwAaQBjAEsAYQBUAGUAWABfAE0AYQBpAG4ALQBCAG8AbABkAEkAdABhAGwAaQBjAFYAZQByAHMAaQBvAG4AIAAxAC4AMQA7ACAAdAB0AGYAYQB1AHQAbwBoAGkAbgB0ACAAKAB2ADEALgA4AC4AMwApAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABjACkAIAAyADAAMAA5AC0AMgAwADEAMAAsACAARABlAHMAaQBnAG4AIABTAGMAaQBlAG4AYwBlACwAIABJAG4AYwAuACAAKAA8AHcAdwB3AC4AbQBhAHQAaABqAGEAeAAuAG8AcgBnAD4AKQAKAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABjACkAIAAyADAAMQA0AC0AMgAwADEAOAAgAEsAaABhAG4AIABBAGMAYQBkAGUAbQB5ACAAKAA8AHcAdwB3AC4AawBoAGEAbgBhAGMAYQBkAGUAbQB5AC4AbwByAGcAPgApACwACgB3AGkAdABoACAAUgBlAHMAZQByAHYAZQBkACAARgBvAG4AdAAgAE4AYQBtAGUAIABLAGEAVABlAFgAXwBNAGEAaQBuAC4ACgAKAFQAaABpAHMAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAaQBzACAAbABpAGMAZQBuAHMAZQBkACAAdQBuAGQAZQByACAAdABoAGUAIABTAEkATAAgAE8AcABlAG4AIABGAG8AbgB0ACAATABpAGMAZQBuAHMAZQAsACAAVgBlAHIAcwBpAG8AbgAgADEALgAxAC4ACgBUAGgAaQBzACAAbABpAGMAZQBuAHMAZQAgAGEAdgBhAGkAbABhAGIAbABlACAAdwBpAHQAaAAgAGEAIABGAEEAUQAgAGEAdAA6AAoAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATAACAAAAAAAA/4MAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAIIAAAABAAIAAwAEAAUABgAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AIAAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4AQABBAEIARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAGEBAgCOAIMA3gCQAJEAiQCgAKEA1wCwALEBAwDYAOEBBAEFAQYA2wDcAN0A2QDfAQcBCAEJAQoBCwEMAQ0BDgEPARABEQCyALMAtgC3ALQAtQd1bmkwMEEwB3VuaTAyMzcHdW5pMDJDOQd1bmkwMkNBB3VuaTAyQ0IFR2FtbWEHdW5pMDM5NAVUaGV0YQZMYW1iZGECWGkCUGkFU2lnbWEHVXBzaWxvbgNQaGkDUHNpB3VuaTAzQTkAAAAAAQAB//8ADw==) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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WFAbUllYIDxZIyAuRrACJUawF0NYUhtQWVggPFkusTABFCstsEMssDorIyAuRrACJUawF0NYUBtSWVggPFkusTABFCstsEQssDsriiAgPLAGI0KKOCMgLkawAiVGsBdDWFAbUllYIDxZLrEwARQrsAZDLrAwKy2wRSywABawBCWwBCYgICBGI0dhsAwjQi5HI0cjYbALQysjIDwgLiM4sTABFCstsEYssQoEJUKwABawBCWwBCUgLkcjRyNhILAGI0KxDABCsAtDKyCwYFBYILBAUVizBCAFIBuzBCYFGllCQiMgR7AGQ7ACYiCwAFBYsEBgWWawAWNgILABKyCKimEgsARDYGQjsAVDYWRQWLAEQ2EbsAVDYFmwAyWwAmIgsABQWLBAYFlmsAFjYbACJUZhOCMgPCM4GyEgIEYjR7ABKyNhOCFZsTABFCstsEcssQA6Ky6xMAEUKy2wSCyxADsrISMgIDywBiNCIzixMAEUK7AGQy6wMCstsEkssAAVIEewACNCsgABARUUEy6wNiotsEossAAVIEewACNCsgABARUUEy6wNiotsEsssQABFBOwNyotsEwssDkqLbBNLLAAFkUjIC4gRoojYTixMAEUKy2wTiywCiNCsE0rLbBPLLIAAEYrLbBQLLIAAUYrLbBRLLIBAEYrLbBSLLIBAUYrLbBTLLIAAEcrLbBULLIAAUcrLbBVLLIBAEcrLbBWLLIBAUcrLbBXLLMAAABDKy2wWCyzAAEAQystsFksswEAAEMrLbBaLLMBAQBDKy2wWyyzAAABQystsFwsswABAUMrLbBdLLMBAAFDKy2wXiyzAQEBQystsF8ssgAARSstsGAssgABRSstsGEssgEARSstsGIssgEBRSstsGMssgAASCstsGQssgABSCstsGUssgEASCstsGYssgEBSCstsGcsswAAAEQrLbBoLLMAAQBEKy2waSyzAQAARCstsGosswEBAEQrLbBrLLMAAAFEKy2wbCyzAAEBRCstsG0sswEAAUQrLbBuLLMBAQFEKy2wbyyxADwrLrEwARQrLbBwLLEAPCuwQCstsHEssQA8K7BBKy2wciywABaxADwrsEIrLbBzLLEBPCuwQCstsHQssQE8K7BBKy2wdSywABaxATwrsEIrLbB2LLEAPSsusTABFCstsHcssQA9K7BAKy2weCyxAD0rsEErLbB5LLEAPSuwQistsHossQE9K7BAKy2weyyxAT0rsEErLbB8LLEBPSuwQistsH0ssQA+Ky6xMAEUKy2wfiyxAD4rsEArLbB/LLEAPiuwQSstsIAssQA+K7BCKy2wgSyxAT4rsEArLbCCLLEBPiuwQSstsIMssQE+K7BCKy2whCyxAD8rLrEwARQrLbCFLLEAPyuwQCstsIYssQA/K7BBKy2whyyxAD8rsEIrLbCILLEBPyuwQCstsIkssQE/K7BBKy2wiiyxAT8rsEIrLbCLLLILAANFUFiwBhuyBAIDRVgjIRshWVlCK7AIZbADJFB4sQUBFUVYMFktAEu4AMhSWLEBAY5ZsAG5CAAIAGNwsQAHQrMoAAIAKrEAB0K1GwgPBAIKKrEAB0K1JQYVAgIKKrEACUK7BwAEAAACAAsqsQALQrsAQABAAAIACyq5AAMAAESxJAGIUViwQIhYuQADAGREsSgBiFFYuAgAiFi5AAMAAERZG7EnAYhRWLoIgAABBECIY1RYuQADAABEWVlZWVm1HQgRBAIOKrgB/4WwBI2xAgBEswVkBgBERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAYABgAGALAAAACFQAAAsH/6gIVAAAAVABUACUAJQKr//YCtgG6//b/PgIVAAACtv/qArYBuv/1/zMCFQAAAAAAAAAJAHIAAwABBAkAAACiAAAAAwABBAkAAQAUAKIAAwABBAkAAgAMALYAAwABBAkAAwBCAMIAAwABBAkABAAiAQQAAwABBAkABQBCASYAAwABBAkABgAiAQQAAwABBAkADQJkAWgAAwABBAkADgA0A8wAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAwADkALQAyADAAMQAwACAARABlAHMAaQBnAG4AIABTAGMAaQBlAG4AYwBlACwAIABJAG4AYwAuAAoAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAxADQALQAyADAAMQA4ACAASwBoAGEAbgAgAEEAYwBhAGQAZQBtAHkASwBhAFQAZQBYAF8ATQBhAGkAbgBJAHQAYQBsAGkAYwBGAG8AbgB0AEYAbwByAGcAZQAgADIALgAwACAAOgAgAEsAYQBUAGUAWABfAE0AYQBpAG4ALQBJAHQAYQBsAGkAYwBLAGEAVABlAFgAXwBNAGEAaQBuAC0ASQB0AGEAbABpAGMAVgBlAHIAcwBpAG8AbgAgADEALgAxADsAIAB0AHQAZgBhAHUAdABvAGgAaQBuAHQAIAAoAHYAMQAuADgALgAzACkAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAwADkALQAyADAAMQAwACwAIABEAGUAcwBpAGcAbgAgAFMAYwBpAGUAbgBjAGUALAAgAEkAbgBjAC4AIAAoADwAdwB3AHcALgBtAGEAdABoAGoAYQB4AC4AbwByAGcAPgApAAoAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAxADQALQAyADAAMQA4ACAASwBoAGEAbgAgAEEAYwBhAGQAZQBtAHkAIAAoADwAdwB3AHcALgBrAGgAYQBuAGEAYwBhAGQAZQBtAHkALgBvAHIAZwA+ACkALAAKAHcAaQB0AGgAIABSAGUAcwBlAHIAdgBlAGQAIABGAG8AbgB0ACAATgBhAG0AZQAgAEsAYQBUAGUAWABfAE0AYQBpAG4ALgAKAAoAVABoAGkAcwAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABpAHMAIABsAGkAYwBlAG4AcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAFMASQBMACAATwBwAGUAbgAgAEYAbwBuAHQAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMQAuADEALgAKAFQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAYQB2AGEAaQBsAGEAYgBsAGUAIAB3AGkAdABoACAAYQAgAEYAQQBRACAAYQB0ADoACgBoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAAAAAgAAAAAAAP+DADIAAAAAAAAAAAAAAAAAAAAAAAAAAACDAAAAAQACAAMABAAFAAYACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeACAAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AEAAQQBCAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBhAQIAjgCDAN4AkACRAIkAoAChANcAsACxAQMA2ADhAQQBBQEGANsA3ADdANkA3wEHAQgBCQEKAQsBDAENAQ4BDwEQAREAsgCzALYAtwC0ALUBEgd1bmkwMEEwB3VuaTAyMzcHdW5pMDJDOQd1bmkwMkNBB3VuaTAyQ0IFR2FtbWEHdW5pMDM5NAVUaGV0YQZMYW1iZGECWGkCUGkFU2lnbWEHVXBzaWxvbgNQaGkDUHNpB3VuaTAzQTkHdW5pMjEwRgAAAQAB//8ADw==) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAHg0AA4AAAAA0UwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAABo5AAAAFMAAABgRb9KOWNtYXAAAGk4AAACGgAAA1Qm3+dAY3Z0IAAAcqgAAAA6AAAAWgJtGTdmcGdtAABrVAAABrwAAA4MYi79fGdhc3AAAHgsAAAACAAAAAgAAAAQZ2x5ZgAAAUQAAGK0AACqlqcfRnpoZWFkAABmVAAAADYAAAA2ZFdDXGhoZWEAAGjEAAAAIAAAACQJGAcOaG10eAAAZowAAAI2AAAEdNAmOPlsb2NhAABkGAAAAjsAAAI+wFuVa21heHAAAGP4AAAAIAAAACABzw7QbmFtZQAAcuQAAAGfAAAEeF+rfZBwb3N0AAB0hAAAA6YAAAdFVTctEXByZXAAAHIQAAAAmAAAALJlwgKGeNqsuwVg49aWP6xzr3RFlmzJgpjZjp3EyZjDOMkEp5OhDkOZmZn2ldulch99y4X99uHSY+xj5mUqLDN0PP8rKQ6UFtuOR9KVdM/5Hfrdc1UGMRWGYb6ITAYzPMNUtapWqGqZymNnVyrIPPVaBX6D3rPCAPMF9BXGz8QY4cNWQEKo0hOsNaoVyzQQTzLpQh4FLXriHddrjZVMqCvXDUjTEXSPh5IRJVjUUAb9vJlOWXx7GgsCho+deg0lIlm/2E3UaJKhM6XhJrgafYQJMVU6UzHsZ5yZ0vlas9GsZejL83VnWtudiifVtx2ZZ4O+SRa0YCiTCmftQNSI+V96i2twk0F8Uwd8ciYcyuSTfaONYsz/FpeobK3TY1iksu1mjlDZDu6t8C4KzSqVwJnZQCa/dmyZ7okHSIbnjTXBMlQ0T1S93tx6Qv+ib6KqZPJczXum2myp/1AqsqxPR7vgY/SISEQ5Az7gl8jRY4Z59ZVE8v9D5/LmG9TA7xrmVVcG4MfOffQPHFL4Z58mok7a32eRcyTycvuHGPGKj8NLy4CJ7N0h8QrkENp0yCt+jt7BEaC/Swz1lObpL8Lvor9mlphDzDmM9NETRw6ujIdxpadpUHVNy7JtrZDO5wt51xcoJtV61bQt+i8FpGOrZj1fKLhXKTSEd57M1DPOQ9SmjYoVrGXS9G7TcO6wq3Y+kzbNRqOWf3/cJspYH8sCJ+IzS8bYgJVHZWW1L4qBjQXtRNxmY2ey/mK4OLAwGJFwmRzNJzBwsVJ8ErHBTLlawgShYRFD72j1d6wkLlRYABMQAmNPqWfssC0L5TIowz2DGhe0EraVADQjw79jWY8er89daEr9ZX2oPKFzQTsNS9fyynB3YdwHCG7Ed98tzx/fzjAs9ZgvYoHi1GTmmYPMpYwyIZ13eN/K1GBOZSs9sDleXA+iilYoWGMc9SCe8ZyDYhFsNDLufRSvvIuJA0m1Su+t14KdZzsvC+bXYLM3boJxpZBrJDJnLDR9XCExt48M8UcGEYcw5rDog1OnBJYXZAQ/ufAKaI5OT1F4lgzT1oM+xdANNhjs/wZ9lFQLBe89H3MGDYmTc0R2RtEdlZ4zB1tW8+adl4soMa4A+BeQgFgAVXr9PzjWJxCMYce7fyUUBwx1w7Amrp0y9GD/iZNt387LRNQc3n/AeQEohmEPTkx3NQMo2H/yhONvpdOvou/T/LPAHGYupv52wbHdSyMcptFH8fG098Kep55HAWzWa/lMpl61qPZVM0N4FTmx5rgRvdRoUmekXkjRXIe46aBGMXMfr1HECnlsWC54+Xw/onh+plAr1v1iqqRFZpXCeYqQ2x4shDhRv3BVIf6VMAh+sqPMA0rz5VK+hbu5nRO7l33yzjOXLgzzu96D+UzeZoXdEmDxm63eiTEhcUbUL2mxLjh0zuHdtSIWF6vxTGNeOXF7QNp2bVLQgmWMy1wWlJB085AIKEXy9awgDi/iUVGcODzZm5fPgCthtLw45xf3N5GIVW20LYwvlzmUuKg/rmuxOgPMCtzEfMfNqeSDfgbeKZ9eu54hs2maIf2RN2XIeP94zUmH9L1HTxNYpt7dRd+rAn0vZ2Sc8NWclzdozFfctwZsC5Z1hTc/FCtfwOtY8RH56aflvxOJ/gvQuvGcZ48TPyaYlX/h1KO/IDNAswuBPH1vxJEXHHmblWqVmk5zZSS8IzWdIeBkihGW43zr7/b5eJCefloC9FdAX9/+4k1nvdt5PSuA733o6vf5QHAkn4AJ+CCdYYzOUDM9RFwvyBfcvx1HKTScPG7zY8g5p4rwloeSE4a27WaxQtNxrLP9phy8+h4sWarMXgEqGIpqgGqNx7GsWtK9B8qyN8LzEFT9QW+IwJO2XxXF5jgWApZMCNoNj8m65nssULaBENkKCFNFW1SDAXdscVHWAt4gdnRonX4RfQvNMSbVQSNUh0atmaq7waClLINPaSRd0FItFXpAEhUeSn5/+3t8mG9/96/C/GOPKfRM6BLa31NVKDlecnqM+RZzg+slMnLf5xWytSpVyFN86mnneCUVzmeQOqyyOIBBHiPAKWo4U8lObAsGDkyoAZbzjR/yYeLIKTMfBJN5ncH0veB4X7OeMmWQPjg/78xK2ccXmJsYhY7yzmg17WVDryg8EM5EHDQj2WyXleRYlk0b4YyrPYGPUQv66XOi4yPQqFoWb3SSJgOPc4rgg/YvckSifx9GfyqBj+de3y5JsiDhjzGIKZx+Fb6CnmIMZhut51lLAaeee3m4o7eXnHN5J6PyhptU3RxC/dvJq3maHY63Tsw3I8FcT7RR6rmq3hMCiO2JWwEEiA1YkVIxYgVYehJA87sq4dLun356dShsXrD69JEbxpNJe2oXmbKO52dHrXjcGp3NH7emyK4pB7nd9Oc5Kl+K6tjlYJNyMjtNa06N0KhEznHDiTVq8qA1jEx4r/bwg5ovPKQJAUTKg8HgnpauIIMHfyUVpskEg4w4rEMZZyQFk/Z329/xl525KvTnU3SuJp0rznUigmKxDgXP2868bvLkzZQbLh4GGUcUYrjOQi6NJi9Z2neFgjLRvdmJ4aVnJZawUne0/RCC3ZckprePDWURi7lQIgUvZMM7zjuyqPuHqqX5xGgLODDkQYw/ioMGRkduKBxamjpQY3kOZbtCjtVpHYCX0JPMKpUyQtalbHZMRsXYoBOuz675MJXeS+ZOYu9HnmrUhvTUFd8Z9567LZI4OOwfH5jS8HyT45AwuqdebG2fOleXcuFoNmzxjdlmVJvwl0sYERSN95YzZriSZyWMMWtEUvD1dGRwmbdSo5I2fMRAAEg7Mlzb15Vp9ZutTDZipznUV0/NGMeShA46+ZAj+0cnLTWCRJYFQGmrK0X9M0pt8n30i0yGKVD/zGUNBm34gAd+PVV3CWfV1midc5mSXTULGrbha+pV16tiokcSWGifevxJhII6OXwYOGFb7AM/voQ6A7BIQLVK+S9eBkTatXK1qHI8lL8NK20nUpkKRdvxie0U7ZG0E7kulJmMbXlgdsDzooT+V21UveCoVkzTuVwwO8XZvckNpou6UmmTx/6x0lwiGAnnV7pZXtYQAoKQPjkzNylwwq6bEyFpcCRoTe+97ch4b1AtJL+XCtlJLlkayR06L5ua4TFhn4uvyi1EwlFWV04Q9HyZ067deejujM/sH6XLCeT6yxepBn3MFEWw1Z8JUQQhX6BCm7bHGxy/WXNwV8QOF3NEdpzLdlV04971mFFUy8M1Vvdsfz8IxdlyJj8iIM5X6akHuoL+w3uXZhrjQ3OxgRiO9ubsbT5pIFWN+AUBHbDwyOR9rEKVOrPqS+i2MVzrk1msf/iei9/flx9rhOLRUN/LWXvbJQfS8VLeHGoGAoNDTj2kWvwZ+gWmQu0QZR2vpwynVq1Sc1v01yM3bnYyyTqfobc4grv/mpkmBAKGEV+864YZf95ANYkFYBN6V4z1rxgT5SMviixPWATd8CV00UWIlVS2cMSsRvGue4tzakwUta5UzF96173JA+MEGUZEQ5hm9B4nHim+eWaQWaG8bGGk3hPhXV7mSrE5f7gh1nEET0RKQfKFdXxt28mpYLgMzXUul/A6zz6/rR6w9jZnzvYB8i8hHlALLV534KahEPLvIl1fbHXz4Xo2lOWGh6CLNNr/um+wOK1pGWFRTYmCb9wQYGdydrAn1tecaxHdEqYGgGqbRyMHdl11MFu1haUGq36wZ0SArJ3sCXG5PPhJT/tHw8vpSDjWkxK2iSbhSHE4vO5VTzMDzCz1qpFKMY7clQ/PG25t8CJzszvRctYpKq6FahSXTTSdPjOGHIXzL5gaq7J2OsgPpApcceGMViyUyNd2sLop7Cr3jGTOaowv1+3YOZKej5gKx23Lx3q6ZIErHDejGEAECfkqrft5YWZ7dqY2tJCv8Qghfe/+Bx480RofvjwK/4wi1ujCTHe+P9kcTa+kYzT/I68O07W+wkSoTqbKe+vuzbUYv01l7lo/gsbmKt3+0paajVyG8SV3jjydoyvwFnMgJy97/rLGOMZQhvDpjdn2psKTrNqg5BGB3CcBRhBko2+Y+S9rmSuixq4JMcCySmucGAEMbkU9/QP0ERRl7A7H4WiQZwuuPzJrZIewPGehj4hq+0ePPMoLaFTlRR5W23/wC6iLDxL//TPbOUnmQPcTgUDhvpXTxOkNMPegb8FljMTYDn6KgLzeQMp5J5fKm/QwjulxKt9S0S1+tf3p9qcDAXQz8Bj7T92lOgt0XpEF4D7o54DDPEvPN8vs8DLFkVl3MGJt26LCclzGjaUcZa7Zwh6R8JB/9BGeR+3fb/8h0TELyX+9/N72H7IIVMWR3ODQffcinSPcvdfWJ+/lHNs3GYD3ok/R/DJBZR+shkREZ1nLI5VGdWN5YBodTuSEqlM/vfLvRfbWBtDd5cRIoY9Oxd7T7W8epROzWKZ2AL9hxXSpZ6CVC2K2OLbRGkIxe0cmzMHOWHy8NH24Kx/1IeBQ78hEsZQMJrJKXzYaBJCLdvvA5raR05n5J/Q9qgFdY1MN6GpqzsnzhorWFs2kE4trnRq7Qxjs9UJW2BSO3iKxWbXWi8KmJTodzW3c60Z7s17Io2+J1kBmexgAINospmLDC7nyfhI8s4m7QogF4ATdL+UzAwdHRkdGlo8p9i37jNToo9v4YYnwCzfcujyzdK4PPnCboC05R6j9Zdkv4XIjk+6XfbUUISk4MjA3k60AS2eI+exLlldq8xrsJgCievUjSpAP/9TxhWO9sVj+8fOq5d03BNikjSVOjPSm8z9zQkr9zBd8QI+OW+/FIF84vbtSw2pL+orUogg6zbev0hV2lRmhCA41VSc2qxtcQ9cdlkF1122PY2Q6XJSCV8h0KmTVDFK43d7Vaf3EAR/v32HA+ecBDogGC5/swqxci4v+y+/wS8psV9crhoFJweKeiFlGpXrOuQ5DLWCoQxUEIHDq83OElaBML+tox9zwMOFYRSvDof0Tw489TiMaOxwJPYCeY7JUbqcC7Zis9cQ5rwIVqHiWK+4aA+xk4DXm3GgCrT/pdD5N0hnHu81q07FmoxGk1wuZTR2Uxl1SsJh66SWlkR6yfatT0uw5CiDl5Hble99LFYMS3FwvQYiGYBgpGO/eI2GeFCrhkf5zzgaEyNFtJb2nii6VWCgDEg1KCaLVvQEsrIwQ3RaG90iIDlBVP9s/IwAAz95yCyBASN3efm3wDBnue8DhzERd8FZ+r6GnqLeP04xgOCwYbJNs9lQqr0thXC+33SCmhxqfoaObCm6n0DbRzxHu4r2xbC58+ZM6gPbU5ckg8uEuab6hxCMsEKoNSRMQV1rBxPmzO/OJq+bmL/ZxBID4D95Pw8T6lZvFdEq68VdtQmGp+wo5+lT7ZULk1euD/OzOX75hdnjmgrlQkCdOxonQn89Sq4WZOvW2nrjBoQ2LWW6MbbXThpG0ANWpIzlV5k7XMM91WyfvUSleD1+svPSSaxER2al4ynLsAUgS9k8uZld6W71rRgDO/KVLjbJx2ft0D3o07uLefrn951hEyIhNfuCcW/IxB+8QlfZB9CvMPMV7moOOpCnTts1MfQNT14NcWlOvanSAXt7qRJ3lE0G8mXIVu92RHo2oajcg3/SqNHS2IGJoTPqjBuruRkbUP9kAwKRcPagOTWqqyEI3FNCpjzoqooscVdirr2ZZrB/dzgECCd14A3BCsWS0XzZKRYGDn3qX4znA95VzIyGEMW7/h0v9pY5mJ6lmU1Sz5ps0K3NUr3XFxrCnVhlTpbwk2ckCm1Tpo6qwxOe3U1b42EAPwQC1Uj4lO9rIqXypBkIgKucivvCDtwXlN2iRSJdDkQDHcZhFd9wGrJFLm+2XzXTOYOH226kyUN6QvUV7gn9Ao+AAlb0UdaLA8Qr6X8ORy/Vx01t0FP4HseE5WN25kqnDp7rulXKSnAwgQZWyPCKYVS1NCU4MVHKx/1rMLO64rH9OwgEhMBwGDQPVxceedy6R/JovGQ3w/1kEvfjMynIpLVVqMuByx3bfQc+5q7NuDjbix2t5Et7xsTdc0iwvdXdsplFLb1zaMKOstTVqHJMHiG055831k6DU/hPYcu6FlmehG2/8x42TU1/fOAb/u+7dOKN6mFSZ3VSPopPNvC5HstPkaGgBtzI7OiQdHdL8RgqomrAj0P7XgGwVIj4OIc4XKVhyAIStV5yaggUMNlhYcE/c8/ar7VfccxdLyui/SWWYpjK0sp2Vrtcx9iJ3BDVq9RGUr9U6TlF1fGSTtwU8ap9ZIwsHItmYiZHc6FLFWIEDIEF9NOqzHpW6rZSOqJBFAUC6fI6EcGOHANnfyMS7kiwg1cDiUBESlZGldKhe7k2HBV6icrouo6K2JYyvInGsl5MS2Y4f/CGV/YQj+1Y/6MSB7SaeWiHtyr05TAgV2uiUdCp9Pr2prNPIURHP03B4OxexuhoI4Gd+BiEURTy1p3alEOUFywdEXezlPvBjIql6yRSQP2FkxRtNWShjeWU/p4aVMhaG38J1NPTM0w8/wmLB4sFTmc1yz6P2R0W/IDl5m3p/mJDA9XexasjXd+woK2/4kovFLMWin2JR7GCxsQ/gNnrwWgFxl590N6n6pnws67f/nO6L5ORoQHAmJLNz4eGWjLFhoC506m+2+jpwAi0aL2OnPmsr81zIQBxun8bcmky0hODrqExO9YhvkomyUN1seOnobaJzBNULiCfpAjaJYZjBzbyL8pS7HWEvvIDlvrlvZ1zl2AsuXA/RAA0Ltwq+wrJJ9lUA37wmKueerwjajB+vCc+d+hH88bfPSHNvDtL48sLxYPDUYxQwdIGuH5zd0f77LOuMsnGyOfvUqVYBN2o35NIyrp/Z7jbgZvwp+BrhnVTMFDRXG9gQipXGIl/H6Lm9e4PTmqCfda4iavM+wKzqx6R9Oeeo4M2Psk40/AelSL/gHNFrmfYP2j9ArLNpJbRfb5+iojLIrRDfQp+isg5QlpGPaMhdFWyuBd56wOOI2GP1nfzvNTcdYv/Z+8P2hU8GudWEtXhc1C45aMWn/Oh0Md+dq2+XuPO2jVtkpjbFmbD38e+w2vuuCJXedWE2MCbCDi2zerUOYV0PX7QYHfz2ahHUiTN/eTD6ZIcFXU4xzLucu1aMcmiTd2xhq2+KQchTjDd4q9fL9MjQ73ySX75OQch3fNw65+iWMIMzw82RsC+kg4rx3DKZbiprfIgcnBYsUxjcrXBw/XUbQYUSluzwooceAjI131+lzkxxHUc/oLjWmX3M2ZRzH96/a67XRzk3560Zt8K61lsz3aDzrvOdZSQ1Ak8KNe9eu7FpJdYxQ6FWzzfT9Hh9oQZ33/9pUKe32AKps6UhReFiffkKBpHjod5DgsVQVPVLpTvrOc3ORYiva7beOMgrkw1Nn7qoiwW814yEzVQkIhvWdx5PiZfv22S0Af3aPdtSBMJCpZBWOH3uhIRC4eERP/IdzFXE4KBPCO99/yN79irQp1pnPvvZfTpGiJ9IBM2oJGIpOOBYmHrgT6iFz2DOphY+vLuymefaG2uTTnfMNXqHLjbXe9dkjZzk+1FmvWBnNrtCmnQcoeF6gusIv/7bQSz1ZY6psHcIcQhhYYcGBvCmxiqcIhuYV3xCJhQI/7yNgIjFsDQ1BV76uPW2tfxxvrT/gD8PCsZDizsimrzmLhiQGBzYzcmtPUEAAIy7p9ib2WyaINnolnlOyg7LhFwo32xGCgKCu+7alFx+fyTvuNTddysRrdSdXOtw/iP1qF00m8ynnPprrVvc/Yhg0w65kzE90mY6G4Gev3gfCWzu/RfyvIpcAujuEB8gVx0rxPr7Mo/B0NJYubt75zZ/0ORkFntMTadH2p5cvjadTkh75rjB+YPzUvjCKQ6xlo4EngDS/4TwB84JF6Z65nw5MM6ZHjlqG2kpmOADHAvkrwjRbi0GpuvpwQBnBJF1wdzqFX40xAGXCAGQa65DnJM5adFGL9Cu/ijVNeV1c50+vkkl91YTHuNJO0RHW2PZG4zIIUR0dKOzmwUdnQV6NyA+pOXNVsSWMQhathFXzPZvm0q8kdUEwLId6Zd6QkkBQTf8DiUMhLg/rHEiZsocFlH7tfZfyh1+JIMBJhIxdYfIRQZLPI7kZvxhKnftLfmmsVFYqUabB+mY6fgnWYv6whtYJitm+ia0wMiKzNLkLyrf8HI/sKDdvHdy5HILYDO5/MofhiZzPVjeNWF/5Xc7JeAL8f47dQRnXJEYukX8toN08PQr6EdU4gFnhfBmNuCmGL2qb/1WIM0byGVyVNLClbKei4nqpddbslmW2Q/Bc6UQJ2on98mEX7D+CLAQQFjDgC6WOU84CWPUNuAbfNB0zotw6r1AEEGOPPrpV/HfUXlWOzUTNiThCep8R1VQkRfxiAK1VbS1DxRcL9l03QxSJdxLuEs/f9lHlAFLwPjkccRpOkbPgLUyiFhDY+FLmMhqXhNLe6/1y0o5IC0tjk9aRCpHBfXCG0xJmXv8YRQYlNFzjhtYAuHbX2t/B3E8gldg4h8/xPJAAF3PSsCWESoLmLCv/dVnvormiVcx9HYBPmAgNurxapv6+veoxsc2uL2XtrwsRRXsQRtqEN7t/dcbha1m8gy1Ne9V3MxQ4FXsDTtjoCpXn/QJ2oEk+54PYL2hGqL/spstmdNK6DoE5xPFnxBE757VNJ6d+ioWooUEvekmWyZaaUcuh5Hkt/xTAElLcJtR5B8BgYX9jnI0TH7nfSArmhckGXzBeYDan8QiAXeYx1cODmKk2hn7bAy8aqGyu//NoD+mGEy8BQZ12jjcggHhPQNT7d4AAd9pJJiIBG6/labnYQGfdz5WB0xDDFxO1dQH8N59SyuoLIryye1Z3r87AscOI6z6+y3HNWXu/AtfeBGrrp/60aOP3H4XYDHmGpLtg/c+df4FrKO0k4+pzANU5jKVOYLB/davnnLpCEMqjuTrnQyatJz+eb2h6/UOfcpsl+G7hGLzIIoOHhAnZxTCd0Pg7/4OY/Sx335UWVqUWQN+R/xKhJoE8KkXEYDYGozMiwKi7QkBEKeoLPRBNwA3u6PLQFSma2mf/TTd8ec73xG4W570z7X3nTjx7/jl7tfP7/b6AsT9Nk3tfBkQrDl1g1nbeWJaQZmwcNgnyAS3fwH9OCjxr0/zoiSx+GPO8xad5z1r82D3ebftUdWs++47gT7f/XpXN36C3nc50uEu9BHGcKLZva9Jazk1FHVLt56TQqHZ+PiwcCfhFbZRbyoRXkCKImXRLYPCzYgXVDRQ7pe7eIICquSu5ZjTn4Z/OP0XG99KmLQwwD+M5XLut5Gn/wn+Cj5J+347KZtYmCzwnT59Z6fNqZprLW3HON6KtFD3moMblLfq7jXRvEHvt2sdtuXRswfKcUFZaU2d8HMAHFEVQroBiQOpUIHHOrttsraqCgU7PXOhSqRKbtr6OcDovrw8kOkeFBFsS1qqHomPDKiZEydToqr6erKFbj6ay4RYbLLF3mww2F+w/QlipQOpvOCPWe8fAnGHEUqXBzI81dKgvXyJ4lpkxhxW3GO4OynONoRpVNdIQGcjzUkAyI8yblWkAVMDdzeCcqTNDN5ifw5hwLi5qvvnjiHlqr3LTV5CPAecYQC2Uzo0u/jZEuHi/Yo+kRMEn89Ez8mPP4FomKs3nBkM7Lps2PlySUQiQAn62KCCbLv9F3hI+Dt+gFpXtjITC7lxakPXSu+BT7q7tb0JakPGs9Dm5pIrGtWI6tEhwo4NPVpDL8JVvXGKvxi2q7H+RHF7KFgKIKKoJFQ5VOk7ywCQLliGALnDosEZt2w/h4BN9l+62j8qmYMCS3Cwe4ddvY7U+JXLJZgRVdvzH2RTZLuZFkW2WvI7yIKDrBbwsmvaabh2JPI+DKMAetBu7Fd6uyPQ68FK4UM/z/LC4PxsY0yFm/ctDLkXF/tmtuVDWinRn5kIshTO9jfaX8OGgsoSNPmB/uYBIXLizm3nnr8G5nPj2fDs2GXFVD7l9oijazhmmX4qbbmYMqm0OYNPbUbQ3St8wxaNxTvl0XFqswrv4dt/bmTP7IkZMiaKgYO7R4KhwYNB38U7WenQsVVxkldrKYN87Z943r+QX0gaSZlIrFib5uTVoWzu8G0SXDR1iY1hIDno7seF6c/VlKu23vhVjhd29KDeXLOlS0Zd62fyVExXItNby7n1StMvOakKAbkkwNwcoMDqKGhcZiBajuqsqHQVJAKXXQysIPUkaF5W0fvfV56alpozPKBS2o5Gbd1CiC3GjcWp8nvf735tWaa5I3a6An8Gn2PmaW/0SudrycN7lgYAU1s76KzlwWatWe8szDpu2Nn92rRVXehkjabzVyfV2PxatqDO4TLV4BopfdMHUjDfOxiKG4EkhzhguS5DQCgV6T8+UJXDoja+p+sKAyH11pXV0TEVJfyanI31Rsyl/mrv/58uJ7s5jH1TsRKHX7Ga1di0YthYaOX0VFLPDfIInuxNhANGXOUBAQAb4BDCxYFiYXvU0DMaAQBOOyYEdVIdTsS3EX8x5hdIol4u9DZLhUQ+fHOjlYoEZrTRVDTQfj8dE/OmLNoFnmVpjuOU9FqnI06jZg+1t45gLRdpa5FqW8OosyynTTOXmnnrV8OgYBiWYZpbbmnWnVZirV6r5emvF1oRjibRsdWbfABCSQ4IyucVISDUAYBPJPvSGbJx3fMWL+poSP3W4hX83bcjt6YH0L3vEpKxdKYOmUaXPxU2eeIOqIIYzW+rDkdyu6eaSXDDjSrleDKtqM8yCtPr7scTZ89v6yYu7+q6hXmtf/lDBb9rffN2B/sowpwatQX5yCHdk5IVqjJ6dtNO7V/L7bslDlyZ0COPSYYrx+mXTleZH7lyVN5ZDkLWPx6vOKNraaCT/N+7Ls1O7ilgATj/aqtvJl5OdMWJTywJCNhw2nijSO2f9PvLo/1FO56wQwaH/fM+eIYYMjjSAWPQn9PoIy6HLazb37TXqsvWRvAaF7W27I141dajcG/whVqtMYKcvnLHFbxaNTLCEpMTlQt52xeUgFO29y/cxquZhEx8iycVge9i8VHwqWHPL+TPylv94i/+vNEgoqCvdY25wjgLvyUGXW9AGs9z90uK3RpCb+8eXp7jqd49VG/fht8H1lTIvL0OUe5nEfYk0w+ffKPLfq79mXecl8YbrsJvM7fSeaMINmo/ze1uk+g/jzximFFkmeZ/PzapLjQ08/VOYLI/jTBA46wTFurC1Zlb3jlC/6uRC78ud+dhGc9zcTzwzgH8n0d2psdIzNm2B18nX1H8dlP8zDfi5wL3fwfLVb7/id7sJY7K/13NHEbwz/B9yggM93vIpOVnne+uNv/vD52NPtjcQqy4H31Gr94VEPdPzHK+A+N2LG4vHgUjEopHWjIKJudv5JTvHbpLQhOzZxmR8SMBQoI3AO/zRXfp5WPdo/9fctIedbnpGJIotmPMEpVgejy5wU1tT4pNYhT+C+HOpXlzo8/lBb8wumxJs0eRtDwaT87UhLdEMjZXK86V0o2xHpaiGg7zvUi9cX8wMHnUlnr5vfs7IcaH0r199a70wtC2mBdiscm/2ZFrnbX9QgGoRimqkU016maGqUaNvmjQYVneaqGDrG1Xms2NyN+oAkFKs/KdnOclY7hmZLl1MJScrZfycX66SCAQyL1BAxyfwT40Uoy1eojmJ9tT20ZGelv3Xxw2/l9zfwEe2XHlD8P3nKpbdbkZ1Go1St1iakk9mpE0GmYGD9pje9AMEyf2OGiOYwhvwMmG6Qv8s2vYtcMchxe8WQgzZzfOktXzVdW96mk5A1l6nnfaVl/oe+vUqVOnTp1zflXg1o1qtfG9xncC+nE/7NrrAK4YWb38SgchvD7QyFcJmmXks/eMhCvDpGlxCbH2PWRNkW6mrTRbwx+Hx6vzqvcBJLHBSjZezfV2GIiJsNHNwLe/zKap1hTlVYVOO96V7MgmIzYFZAav7KlWs25HMsp0Aymcq4cWhWV7DD6hIkJLMoJ+kElUC2wvKT9czvrFd2DWqjtBXC74KKjCqIpi++7QClQXjRxAs39wMrE0Crs2TvUbJmO29F9S9FydGNHyzKXRcCaSXxRfbsN9NN6dC5muKX7BsgymBseWuTSdMC0nt4pF16zt5CbTLbZlNoFAnUq+trkjGjMot638DLVv9BBDBrcZu50x5eH6PWzCY1qnqFkqmDsrkzfZMi0NciCl08D3gtzXfdddAMwr91vQrdvjfROzOmwxuzKDuCf02OCDzy+GqmsMYXAMxrtHl9T4ffd0kY5hP277tNJ1UzLed0YSRGG+NMruFjSvsFZF0S3TnGBOHIT9lVZ7LRIAvSSyzBZb0JzZ+AevoLy3GivNrhZ3AHRr1BYi8PBjrD1qZrdBYaR/JByOqcnNh/88mOWsqll8aIy/5OqMEfZbPiZa/hn4oPKreIEHsOni8f1/WB3EanmhQ2giwDPBdr2vczItvO5RvA31eEx/GdCQk04z66JLQoZXJbVafioTFioBcZB00cYHdNOEE7ploO+e9ITXfcufGuH4oGqtp/FjgprNcqR1JTUl6WdTyqiFBBVbIAtSKcgCR6rySs5gvV5d4JeETw/vw57ejrjB3e0rmc7AJkPhm2g0RmF4cJeli4OX8HB7ktnb9gnqK/39YEfNMjOJWYoza/0Bj8OLw8ZpTX/uLSwSQ1UD3tf4oMHh7jt/UuUG3Bj4XTEEL3oBzY9mj0Yy1FSXtMD3RkUNL5ZjoQYLMtoCcks+wYpipcfmvQbVhYFjP0aj+uBCL2SVzXtPEokvhHaut5m3pkiHBhcvQTPKclneuaJ/nBmdS422dqAOUqpzd/dGk/GRQiiZ5h0YnlmGoSURZu0+EDWJndwG04SGLJTgryKdmdq8DU2C0k2n22SPUSpRboY5+E0a4cm8VSGJXXvQd1IyuBa2SzBfU+bGlMwtk1n8KcGDZBBU8nuk5MNCN2wiNnYuAJ2yvYd7s2GbUu6GvFxnLLJ2Ax8wQ9zedXHEMIeODPano4SZG+sZIaYx3HlxqDqhh3vGl3ckvAxFpMxZVOt79HFFbOS0BjfcYIZjqnJl/ObPk1MOjFRTGij0w8sF3SMybk59H2Tdd0Jy1kSjBInwMhJS9RWiVi/Px0Z6LYCdDCKRFYXbhmfSffEEx3g8DB/8ICGAoOPiFZE2L827geMbiMEsB9KpA31/BsTIZLeGgcETwAB10wWEowR0FkptNQVty04z+DD+SuVNdfp5xEEsamxcKjZpTynoSeAplZ/Rpr9HkSePeGCPJWV2OHyYRTde7SIABWdlj82Y3bPSoQCARrp/L6ZYnBH0FnXFmQ7WNdeaoFsrezwkP3ZZbYK/NFHYawPkB1iGDeSdzE338EKinwNzXEJIRyjm3vUStrlc2cBecpeb7URCRD2ee5orX6cp6qFrUjZK1YhCQEX+JMMVbOzfPfgR/MgNPTPRUu/F4vcd6LdJTQ1NUaVyk3LgUj1Ffcrz8EJZfx9dN4S+tVlZRi1z6xUeAbBW98vKVlfZul/ZiettQ6fGyBoLAKJHi5G65ApYa0YMiv/gsoma2fit0Tkmatqfc9uf81JR0zHu2qy3oN9z946sbRZHrLvvZoUeplBUT8GfwozW0fTTCoKU7NdTqSbIS7oNqxJ3fH8ylRjoS5cz3PPixZgXSfX1B2c5GPai0Q7u2JCumnz+sCRt0z1Clz6OX9SOqAzkK46usQJsuKh3ExIuChpT4FSfSYm4kgg5ynOPigu1ZDOC1urcqjT1btP/IieYEuFR4SX5GsHaOUf2XH3wWDG5aGq2gvkkW9c745HB/n5mAjkY1y3KOKM6GFZ/PhcJ0bZ+i+qhNEYvnm4bae9IDS4zY0MhHc0No9EkUgRsT8yyerKUGCq3w8ZoHLZv8Z7XZW+cOlFOlxD4kZXD/GEEhiQPZEekO5QIO4ats3aHAx8u2tRAY3JnOBR1B13scAxiddZkE1+xiz2diYTJkCk5t0rop5vw48KnfUhwbvfWPoJ+Xw+wIwGipV5pAYOr6614El/MfJRmkAzRBJ9LsUv5nil1Q0XVVm1elOpeFnaTsUg6S8sTtpkpDXfXliS8oaqzJqlftKwrn+9eeHdFfkjcXBfXX13sXxox8r3rkSBgeck+ozfXnoml09GcgaPEWtY7uDaWGuoq5obWxtnAVDw6ezDsLe561i/yxb6l8geDU/HX4YrRbX02kOUje/oApGV+CfbCq4RXxNYygi+pSIAomHfhSQ+e7zAOeHRJsS1dLLa1FT7ZHgMDUxKmVcbDyXI5mSqzSClepFBKpUsFGSPR9uLlcNhHXSpMgUQqpHzI1rjAjKLHDZdbJjRsWJHhxPqt6155paDqlZiDQ/ikFtFKgqr2qKWomje9m2GG1GiADgtQ1clXGWOdGzOMZdZUJww41pXJ62ndhbak7eBdHdW6G4259UqOeqHZWE5mxqXaOyxbU7Rq+A2B+ctJm5IHtPqobxky96Gu6m9F3PABr8gc0wIf8Sr+SnyFuNr4G5jN8Fe/mlpW102vlEjYXxtpQ3xDROUgLMXVwt9REeXEWDDejArPzui83i4rRK36K7rwWOB1rt+5HyLZ8kDy3pBNSyXxutXif+TZ4a3XhCh89cBLDDAcm+MzH/M8skz+/fKXwIntWy1LvfX0ANx0+mdaZh5DnZIW8zxoqsyFqVILDJLyV3fSuDsY6bx72NVJ+aI2ayASWjOSYDzZn41WKHQBpM1Ip6X7+fzkChHBu0i7TLTTof2ehgvwo9G6TPONy5yDQdLM8R1tpi6XAze1RCa1JC03vdx+hMtP+C9XPZS6DLToZXsdbqxro4+ydTiS7TaiAyum1xkmge71w6S7mwyv7wZiGhuWrhtJWxS6sYKNmEqFfG2XGdN1MtSm/4mZ0mFkeMVKQgYrBoaigxR+BHT5imEXwRIOg8KszAqeLdx8Ci3A0PCq2UwzsdkTCdBXtNVDXjQziFd5oL/sbpDRw1dqJt4EP1eZge0IMpKgZLXaNGsCi1BpkiA3uIkdFSoHb3JMvbTp+IkrCCWGiyL2evwYQcdARq44cXxTSTcdelz8ox2GUxC/O47qJpO/Y+oRFBc3FRyDGsdPnDhuqEyqz+DX8UfCxpnRNglP/brlS2odVHrqJTlSyzczg1ocC6Lzj/m0tmSwcdm2vgFbH4uGq9WSJk+Umx6H9VjBMCJASZh1QHJLgumx112RyO7dsQgK2ax5JAIqpWrfVbNTRri24rLZ5Zn8m968a5RD49MFd3C8djCL9wHP1XTdYqzNGoT49hvz3b1t178lQmt7EjAwYB54ublc5VCtbae9nZu2vWfXVQNzDdLYAos22g05jeJtI10ayAgfPBVkbndJ9H39WfGTiXoLdpDxIKmnVG1qeVlR+fN5Uz3AkKkTNbaSSLksk1lv2+/4k/bNm4Gie2Dx5EVxe9mgObnusjXLk6wtFm1LkHZOUl2cLSl2m0x3hutCeroGOAAhxGaR+cjLus026ENLaj2ZjrFNUb1w85aNJ+h4yItn0rF2G4GDLqIRPS9YXCTMdhmQlYt2JPW+Mm/8Y+OfABRapUtYCY8KD9ZWMSO5TrT31Uf2be/xSGsUVzS1L3cpNh/qCiDeyaZjibVgKJVHIMhcLylRVVzranrAaiLaq48Jy7Q6zptTFRXmddaN5eMb+tKb+rfsB0IbPzyYzxbGHKQkQxhzJjsz6f2zPHNoya6B9JLpK9M5AL27g6famR5mDIBAGN6fXFIpFTgeO9b4iQloL73Mo/2lsbV+ILgtj+54R/dVu6JInXt6nMGqRQnRI9XFjrHG6Owb7ehc3NNr0kTZKAxxBKJyyTCUStLVpfKUA8hy7zW6mOV5QIe6bS8/PO1nIP6j6DdtmqsltLLgYz4dD5uo+o1iYWAV0LG6GhhSC67CTCU3FiGVwkiUNP7Dw1vF+HD7v525Bt/Id48YXqEybDyV4Uba+HTzXCGOTr8WnhJlDwqP2QZR9oqpxbWkKltMRcREWKZMJ884ceR0vjqmnKyt1htvQb7W68jj8pFmiuOBWQyH0IzwPEnRmRcdrPespMQ0CVmu69X+auHQxGAPYRCv2qxtczle2nfT/0PT1ePZE228jcJ7rkHkJg1nvXGSoKsPXPLixElAnSHCDUj1/MHausUjEzEgFRImsKZ71+Heh25rfBGBMeCHC/X9faKm4MeH4C/VyGspa//80aDCOWJA8MGzxn201SIf6pvC8tuv3SDGqOMH09JmBoZcuUNaAuPqE+ST1tSgJUrzVxdqAahM1FqQN6UAeRN0nxkUnifw8yRbvJWKdEFDFZ78smmXxjPHdp+KQZBdGu4dKtnmZz+T7UYAu5ieWZpeTy0CUyugmpN4lo5uWDEFxDJWb9uQ74oDYHdDT0xQF3fdeOn6TNtIqs0gxABPDU0AyO3Zg28PlOSMaXEEUEMbBe7Qy/JpB8DCUzej3jMi8TsjPTredTdagF62/CJiMiDw3DjYf37q5BMZIx5bX3z4z0vrNBXxfRp/LfRKTfhEdwiZ3LZ+6fhwhrTGy5s6xGcrb4ntzvPWz65Q6MZWn65QH5LVTXWCv+SNH9xqRMUwT6Sm0CNbl7SntvazZYdnxndEAL1jW5zNkylHB0pn92/f2zjQNdQ95dqxjmLfcOcAdPEZGop6sxF2/NjvDe68JYM7fb1QW8ZiK8yd5foVRjpnbTphDMTDnLIt13WXR7uKK5evz+Q6h6++ZuzqBKCe3JL0UNPAjx8KOe1skdMLRwsnzhcjhA+ePy74f5T/cwMCvBhvV6uauMHKN8naDEpQnHzxDUm4FquTYaAhsmJVroKXF5cmiqaeZCMjyXb5hlVYgA/g5jMZRDFh5q2CE1gYVB6xJ+Hf4R58XAuL+4a8D8ESL7xaqY0pAP5BoTdArCjkQW2CRvHxTCTswcxiz4MVa1hCvOMK8Y4qPu7XXPFb6dd4DmVmt3pVtXJFNhKyK71dAJTS0JoNIHp+pN2G4foIqmve4hnwxNsOIIHX4iPKAg6ZoCK/Afqq1gJrFCfx5EuM2cHS4rDXRacG4+3Z+OAU7QJ82+BMZzGX0u3JPWHOw3smbR0k8mILdmmfxYfULIdp8OyY8n1nkMcPLVyFDsKYg3969iwHLjzLgch/b5oD2g4cFxjsN/5veCnw/nN6KW6BBrwdn9A8fx2/kI/AD3Dv5WYCTevpV2NZivuhNETtj5w5xCfaIqZBXxgBvNtKtx43UTjv1vplhvOzUIWB4g6sk0jsXDjCiOdJtetuuW6bYSGcDzUIhkOPzSCapPHTxs8WoARRE0JPovglUeOEqHEkxBSuWVRNq08EaYG8Okak4VTTYQeh6ZROYIf+2t8vWnnq96gjPkY5p3NrxeF+Ar+//t5npCXXgi0Z02aFxp0Y75VrYpwPXzI//PBWkLmfHEDkpE/8L5a/S5wLb9L4mpOkDq45ErYMd/NkoVA7kBtpT+z79+7/7O7+z3NBT/oJ2DftGFq1rLrpypQzObrjjks3LtnVeO6bSyXxn9QIUuBfjV/WJqWPHMDPEvJ9etEcHU2O1lrB3hWUgwOPN1McmgBxmNWjBD1O8PLDlFKD2ixM243QFSJ52l0Lr4Dk6nQKWTWtG5HLttnMXRGCj+OnDWTY+ETjo0wn6Hu0YxT+9vs33ECoG5WnejfgMbkGnELLvENLCYtvWnC82tmWtijx8+fHCgnZt0vK7VNQfqKSnEkXFVOLCVKpCOoDvheCiUOtJn43BBz7gXcb3Gts9rjRfaAbxrq7G196MfB4nBNmZeGlWYsRcQYc5mL3MwD5B2OTRNfJZAz/7S9qNfFf45n46zgOZB0GhABzsgMoLjSxUu9WUZ9Ia384OyQzEjsbJBMfvzD+UvUJheX6xplkeZwW8dTvnjmXbT4hKHo9vk+1eZKCjPgynigWqknhz1AxgYpSM8ViYG35MTKF6EpyEmCZx6S5Jd6TxsZ3G98igISEw7Mdp15wCnQCBchnu72lu6q3nTiennA9Sp6eS0zPpCs2QPe/kl8SSpEyPRZdW3zZ+z7gxSj6ttChbSZ9oLgxFpVgbCDRdPcBYiAJspJln1srqK6pkULN4ZvzplSzuwXGt1ySqInMTj4bSyGjagF65Ijleibw9ZPx+A0VAthWH1qWzxSHeThGYLw8lh915jVQrPG3MYUN9GwaPcqi5XHsNKge5dOb9dzDIfBuqA+5kc2DNtVBh1ylNPbC6Nve0tRKoBuv+kDhkShUlBYRNXqdwgbu1C4RMn1w15ZN3ZqQ6WIrleWWcG+QvztIFqJiZfO1IMb4fG1BJsZH1A9S807RcgS9aOPvo0EtEEJrZ3ZHACK7Z9aGAJnuhEKypoLGeRSkt+lUWyjUdmqT53Oh8eDKVTqx4ovGn161YmraRT2o215AozS8nsWibP1wyUDYqxMKZ+q+F63VI9lCqX1ktYV7FVdg9+r1FtSYt/qb9to1K9Y4CI0vN1vbx7VuycnWbmlq/5MaHT8bJ7jyDQTKt6bcmoz7H8Gls8mBYu8qUwfilvt42bGATLTnTTgbLwD05H4dLKfM+/spMVjKdsVzA69y50Wkhbl/x8G1YY4lCUU0e9OLXziRMclTTy3kylNP2QNvW5zuNZFiGyPpttqS7pekcWCgVWz2Zb9fa0vL3tsvOPMOMW86JDizVHKmXpX2USoesEWIB1ZbwO6tC9qpHNSAN+OCY5IlranhgUHjj1HBY+VNoTB2A+UGJe5Ev9nmdcyGLSN5/yXMDN23bzJqWOHZajii90+4lHBD+vVC4QPrU4imkS9Y/Fhv79GJPLMKecPkf4m7dyHqujcQ0lEH0j6aGjg20VXItW+42oBNo8vbc4WuiWPT+a4wAR310ICn64i7diPo1OoY7b7k0npv+31j8V0jm0ud9Usv6R7JuVxlz2v/Bv8CHWds33GVPf9vXV3BXfLjZ98lPw7uzsIpYSs+ptac9HBet5xhS8C/eE3aR58ttVUSYXQGMozZllwwMxzPlOCxts5qfiDmbZzMIbUtStSqmaX/sxU4UXsRnIJv4GPBOho9HZ60U7XzUH7uW8DKolIhaKlUJJb59dkuwtdHOwWWLsMXVrR81qv/X17TWXn9u+EO/ISKjhdVy4zKuZYsToCzmyyT/vB57drsLeOin7TQmFJ9bnzi23aYM7AtiLT1JqNt6Vi6u6QTXXejhGUZibq6OCt1p+WtZG97GMCyHfyEZdrxzrWzHToxnFRnyjV5OTtTf/wrvYz1fuXx+ky2zE03FY2kHRP1jtm1nfGchoL+mqJ/lfYiwdvLV3dK3kZH512kE8217BTuehBlskZLkpQKRapIbVCLHPr5quNh9Q4uYgJn4QIrnZUDtZqKfj+83XYArYQxEI2lDdOKtHUZCQvBsZOVZHCrKx3JpmPRgeDGdofTgCkBvyh3xK/Pdhk/MZStT0eA6OgmY5LZNuoE0Fla70i2tSU76lPqpu1lYklX3XKX1rONY0MdS7ozkomKu5nuJern8mLA2eCqphG5HhpdpdYlbdd6xMhczso10ciz1yctnvusZYU0eFfL4VlXND3XsQbC+9YDDIfVjN3UoDlfQ86kHEbrE5/NVBDejzSduVb3cLgzpVu8sRUpNymHT1rCwIdGD+qnv49flOhTojwiLdhj7hGJJPeBCkq2L0+7nq7rVt5mdl8BdCRIKBrO0Pve57p4qpIwHJ2GuuLcNhlLCvqAomXGukEuGS5oHhb+qD7R4y/WNBkD9xOKKhUpSSqszfzINy97mDizyGwimPiLK+K8JS6jxJSzEM5fi9brKvy2L7zNiGYTDIhuwAPgpA8cCIU/AfHY9Mb6cmIORsGwsyOeRH5QZ6QQa6uOWkMuGYkaK2q8VNDdvJOaLRRLnRjCmmnlTEsHRiMx2zL3i+paFt26EaYnxlKh2gtGkp41XbOpZ/atiZhDXeGsWEsxtQS97SKzwmkPOzaw5z8fQVe98vf4sMKI3CE4EKgHVTvVU2TKRAv0p7pw4QHfeBVXJZy+snAwnveLDpIg6lFXHE3WcigNm2ZARHbDIEaaEm+r37xz84aJJWHPzo8YDoLJdMLbDvV39y4aa0+ks/HexQZMjs6aum5tvDlM8bDLcajg0kKMV4o2A7froDk9ZSVrxUlz0bDFdIOnLK8CHYvai329HdVJm1Gj0m8ba0rV2nrKLfjP7SfHujbErGjcIMCY4w7H46umXIu7K/p5Yu1QL7cdvndV5B3UbitiaLYtZRbbM+FEe/uaMKDe3jbAewmzIwhAhW+up8MyhwqRaMhIlMrpiGesKkbG+my1fh0//Qu4Dz+hVlnXOkeTPmOrJcVeP+FiIhjyRltGE8Zb1vWsxwIcnLzm5+zAXiMc2TW9J0FgmuoWs3qKkKpsGh5CwRsHseP/Z8QQKeqJRGXQLLWlGE3n8/3RUJxf2a4fj1nhLXeGljiGYVULDGyyeO+bblxvwYDRlvHe9biZwFB/zEt2Fas8j9kSmMtXf3A1hXCbeds9SVGrFae78XqB4tkiIria6Grxpsu6KS5BwmiAeFdJEoELZz7PiDUxcy0LOQs8JPhv870PVS7vwBXJfLK3WkmFS8VkcdnNgzJnwurT7XUj1NjQxTounjKow9BMZRI5fuiesVpHcu/ugVpbR/cQVtKN05GUpSeKOqxAxJiJVyecREdPde/SQtcgDx3Z3I0Gzzp1qy2z+CoDLtt8PNK1aN8HHTRch5KejiPVynvqCaN83RX7+iLmQHXJaS3bjvZUwXXwIiR8aony53QLv8uTwp9zn/YmTavHfVdEyxJ+876VRIvnV8Wwx5pzKKX7ZrApDVF/ziR7ZICvVt4PHm9ZEVYucid8M6y5FravfOv+wCeRXjExz6gpjgZB5RfqBneLmw0dGUn15zoL7VkGdGM2b6SNqB1iAMi7SibW0hu7iiniuXTdrSRGXcT7UL83DjYWjEKZsDRB3E3AmygkO1BnV4MZGSl19y0NATVsIxKnhniGhD4bwW3bwnumczlnabn3Sl0nVE8Nbat+7kOFXmdtrZgq5gZyRuYVQwVTp1ZvqJhOlY323mqHEVlTjra1dZOQQ+Ui89B4Ggnq6zj5YoKF9e5OXiyHiE5hE0IyVM/rEUYOX84X76ocHCvVexDRMqnBKI17BEPwmen1faBXOLmxvgi9dFswk+vDR7XnCl04Kg0IkIpqvDqIsjWkCOdoKod+MwQrOrCmQpz3uI5XVCgtuNi6xrNSdEqWm/OYM42906KdBliU5MGMhcJtugGkW2cm8fSY5VES0rkOYNsIgFnE8GTIjRjMoJ3kursyOnQAy+ej/UW93htCIBgu5TiPpZkzbEN4uMCBCqyqO9JvizU2049GLB4NdSaXOkRn7pRhmcSlYSsfjybdFDI7Holy03lPJA5GeCbblh1KmeJRcuqVWZ0uviZMU53l7nBHWQeg6NqEoBOLRsPl/nI8N7MziuFF1bzudYS6lN36NPkQnNa6NU2L86LPpjP5zNJ54+8j4Tv3i+RDoTlKjhVYwlELwh5ZEyLRNUeigECowRIsd4LgM8DSBtlyKkls3eLWuhuyTHdp9oZ1xKEGQZskn7tDrT0fOb0Uvo+Py1XDY0LvyGWUJpq5jqm4aBy1kMloUhzGE3E/dVhlz8ie0W4B6shx03UuMJcARq7aIE51BIuZJ5dxnuF8cPMovClGdUoQEeI3b7MJDwHjuPnGGCAiEbfipHCpNVfyPPyWtbqSUthvnysVTZOr4StGCClQ/bllVUEVF1KCIlOd5tZU2wyIOxyJkTy60jRXHk1yitxJsPxVc0Qslj++QSh9CrZuxhMrTqRImKROrEjELF1w5PlbFT8mBT8e0caFphYcjzMWZ34epDhMsKBRRD6CcH4LyIHvrYqEFSInosaabwY82XBVBIG4DNzrNrXyBJnrCK5sGd7dZErsxs3IGYQ4uNtuji9gClwL11IbvLmSYkyLvCwXJxMTTbGoVM/PnrPL1QTYhDm+zLzpSiVTZ+XdZWcTOPitRX1J2vr8JDkHT88mhExJXuM38H1CtUvPJnm10XPKnrp9lqYRt8/eOK2CuuFaj1BCTQSMXL2+pVlUi6Ramw5NSigJXdMq0L40/+JMw53cHKXEUtJ8MrpQmlE22LOb2CI0tunkQrnHRiDzHaenyYfwa9KXqObU/vRtbCII+rbu4VAtJVPamTwImVfqL34+RuLmcDs16Oy6QmTlIpeSeGTVjni4M4X3NeBlADKTiTaes+kHgwP6Ihs2xpm35eJVkxbqHArELptxwu0+G/X7G43n6EgNFxHu3fT9gQE7Fz6218+vmyZf9OkENf9QBKo283W6okqZrZyxlt1vhLyWg3bC1aLgRatCxekZixlI24dVwXU6OPCDTY3nUIaGA6Lg0y+DVFc4vmNVBP9CVK3TIhlmEnty1cVbPBaPXHQik+YDA98XjyC6BkVdPHKfjqIGfl/pFJQ+KvI7NOqToMgcrVS1ZnoY5Kic6wY2dlADX5yUHYmHmM/CrhS87LQoB2yDEQr3jr5iy84uQKjb3Gc6GsyamS6GVi36xyYTBc8pEsNDbDxn9OVbdnYChKzciYsiAd9tYrIM8WPGHYLaDwlqZ4TOa3GWxGdIXWu2PjBWU/earT+/dD8L/ADVDln6IkTo2rnlFaNwN1fMhMbJxn2Y6lTMjBPqLloZKSybpBZQQ7D/flHLvcfi8RBA584tLx+FlxLFUCoeu18yVNWybJMMUuA6WrIJWvXRmJDaIJPzj1HX0pFRkhbZJAkbFuAPzqu7s2BFLYD32FZ8esP5lfiG6bhlVV76voA2OginpTaXvrQLD67KKg9UKR3cOflHjLRTmdCS3kxmEu47vOJCI65eiCZL3QSj8VbqapoWDVZLD7I1/hgGluq7JtsyqvQLDXyT0HN4RTyKQfHn55+iTPuRatO0sMwFIVIlyzJVdonikyBnhgG17p4CSk09jIQNHyfEDYV+xAyD8W2vBOKAnIHftpUYaaMpJ56WknLiZ3P5k54z6K06MHJ5KPTMv+h5vrGTEQw7TF96h0VBM5h4i97ON18aoYx6r9rKmbQSAjqTgmjFK/WZzyCWLYx/FhfvmLopDgbhzzzkecSrbU/p8Dtbd+/b6ICuh6WVUrlhxpXvC2iM+1ZHoG79VRYmlI1BLuf2vVM6c2SVU9trz/yzsCo49+iuV7i6qO7S6ysa+nXFNwu6Bs9JGZydCeeieO72czEHX/WHdWlcezaGqRr+RFDmSku+a6G1qQofmwgQC0EqSbDovThUUZpijkjz8yGrVtbjNqfrH+gdtBizjj40yHQ3qpdrFl4e8hqPNR6zRlZSVh+z8EHghLzO5dbEKtkTzFesTjhEt3SSue2AjWASZ9WEpdbLN6o5guluA3SiogB5gWhdIWyxpZqW8qgEq0WC0W98ns6xGQwWWEw21wgmEXkQEYcqTkR+AJRQnRg2OBNLXYac2ntuawdEpCg4dNsem0qjbHbMAdPxdLOSQ8x0mfBnwAhBF0ZhxB7NG9x1GOt7y+UolT9ELn9Ln/SFcKMwYje+2viKG8GXOSPLqT457DQea+H0qPKcFavzBlqyuZhiS28WIiG+iz6yplpVWwtcLrmc4Bz1re8oZCMRwWTKnLhk8txDXhjvm2fx3I1h2K8YLO0xwt+8yuN6WM/cvt8kBvXZG9Lnuas3OfuYlAKQOw4F42KwfiHzsx6kBzwwoWLivvoWZwoBFJmAlzsmOGOzPkP3vjgrSsy+eK/Py6UTDhDOw4SA2SXZWTG5mFyJFci+ao8UfFb2P3RU1qnf52J+1IYRGKWc6pwK+fkLd2SZ4OWIg/eF/BWTfkw+i56IGO9ttXvjMpEhYG0OW5ep9JD7rB2TqyMFci6jac1MRL1aZJwrsfYzxqFPZ26EZsef/h2hg1k9yRmlK+8oxm07Xrx3hlLGk3p2/HdPL7xrWfHiS3HAnPtCedqyxksm1s3SuDiCOZc63Fi2HIDSRSscagEy8zWrY4yGKYttfNBkCBZ1zvmDfqPcyZiItYnYm/iWfMg3foMrCNVWa3sEH2ZIIP0pfzuzKo+k/GiQ7+DgfmMGH8mOpkUs7TN/khf0k0izbaGEBHVi8Nwd2x3kemRmGcDS2YjO0Zmut+VHUzzMU6OZjskpeTu6qsZ5bVVU3p6aPPjcrgLBfNEwgm/8F2IQEtl+Z5GjG0XgmYnXNP76NWNZDhh1kbcNJkrT09Ho9HRHZigd/CY3oOMefSAX/CY9tHtZdTGlE2Vzbp8ZHOE7BT804UXqVzlngj2R+YT/okwTVUpMUwzQQKSVxKKOYemkvx+G+6yUq3vRxjNEj+ukMQcPNX5z9yl8i+Fy8pyTN7YvKYCJUTq3m3BO8V2NBkDjIVjm7xiDE/ik6DkblZXeGpltccw9O2mo3kxol1ZbKjgWn0Qzwv3FWBsNrau1cafIdlyeHNu37bLx1e1Jjiy1YeXyWCoXXx4h8S3t2cpsrKfryW26PbwuHk9GDzts01AsFoVnElHLnVjn6hC699iS7Q9v39DVUyib7YX0sZUzLuWplfaOiRvLdmeWF9u7vngiDMOV0kVri5eAu6k4PRkgdOB3+IgcT30cUURC2nw0ThOT8xaLoP21r3se3Nm4W/x9XuMWfHWGG3zuuG6CBOHk1R+NaNXTH4YvEarVhLzuVfIaGNl84cZsTXdcgIZoWup8rNpEi4leHBO8Js0Vn8eVn4jHCWygBjWYnKzYttMW6a7EchOrOksO1W1GmbxqZOOVXKZ3dLavYPQ60dGutAe0bUes335hpq+7lE0SiBEOO/ExNx9yCVjhUtXJVC96x5t29+VGQhTccIUSedVo79/9pgd3rCn2RPtJjAyXXnxdYobfVYPc7OvKcx/P5Dv2X85nEsN3jzs2wcb3Ve7a6W+TKL5PZbmr0eCMZOoy4Slaiw7q+Pd64/1EH9RJ4/14b8PAf4f/wLdTQijOraVSEB/bDKA3ADXZVjvFbjJrMCstDB8/FqCbuK/DAzzV/FoE6laQzrbzLTdCYSx9ecg9fm1mwxVRBk+EQo2VLHrluvZrj7uhS69OH7g3qv/Hc9/kAHctE0CPXboq7aKRNtBNrzwcZmDaLqehF1yUCva1WS0oGVZ1CzRSnDejkfUgTUFlgio5CoAOAue7Y740Pfb6w/zopYqmQiGRWpVkjZWeB0+w6BXrJVloiBK9F1yUXp06+BJDEGaboBueHZ7YLkgTEidIW3W5IA1MyR3tR/gIeBpXlpxixU4PVwmAwOO/VFAANULvw2/A77R8IO1N+NmZzXHGm2KPzw8gaPKvzgyHYeNvAizaX6k3Nn4tiHjlTV06s+mrX+2D0Rbsb6j9l3c2bF0DUfsvrn44q5WFCfN1GUmJicKaq5glRN8JeuEC4GXVP1A+csZ40B1nsBVK9UM3DQa6MVefam9nzE1Y+CI2uM+MhgxKTroxL9RyC7pWdSwfTPs3IXdnOGYChJ3ICxkVORkknbFwGpP9phdKIO68M+yGQq66GY/JmxApefmk499WexvV4Ql4QnPlOuwK89Uka+F6fONj8MTJzTsnJ67fJv5cWR0fqCxf3j081L3837ddP7Vo67brphaNZDLDW7YOi79bt2jQ8u5nvbn1TWeeFk+sPb2I7CIFSQsI6z5BiHyMcMU/X3fFRuVWO2S5YcFPf05DJvnkMj26bBUg4fr74StfJZwUbM4aHY0MJ/DOoQijYzVAq3EnvBc+pHvBbkjfEPnwo9pq1cuDsUR++xmbTc+6QvcryodoEOyon4kzNZ0Eiw5vP7IzlOZ9Vy0xytQIR60dM5klg/1t7Qkkmeia5eV+AND57heUiiNLu1YuSRi7p8Ra2dOeZ9PBJX+3957DsYqzbq1eRfQu7zb1PbNJF2tsLLMCAA3n5aH0DWvWXY3hS+W9XQ6CdalG/PmQqEdVm1DyOJ/m15rlxwPzvWX7Pn20uSmlrCOUWgAfvk2ztW3P9O4tlU6Pr9reVy3mFm/curQ9v3tT6xX87OzmrcvrI0vq+YKxuTG+bOPigWRybGyxPF895cCqsWXT+aGYdXkxbKdu2rj5OQmz9Xzy20eWrb+iUNnb3WMdgnWHl09d7hlFdbrTwiAq8gZ8WGvz51Rq9Go6bDzkoBeT+PrQ3BNh5LiIoW66FFbfs6zxz2CB7cZdzl1kFt5LpGtJh61vWt94EswFqH7tvHh+1G4/zeBa8cuwVhb8VUwNKz4KRkbCisuCzZEwn/C5G75DD1sMkTkGAwqfYY6pAwWKVKk2/I5o72cmqM0Ab4Vr4buGpYujxssbGYaU2ZR8UfNX+8bLcbe0vcCPwEVVuE7NY6se4WrfrrFoFGa4aTCxeDhGmUEo3XNjbunl3e2GzLqLori8hXNo/FPjKRbVdcP+FODK+/9p33TU0PUogx4ot5bWMV/DZDQlLAo1BYwjqvEUsa6HHPMPCgA9rsviV0aj9qcajZa3N54SoD7OAcrQ01pKj+L5+Ji0kuX/wcI9wTxzDOW8o5mSuifDgYKZr9y8dvvtxXaqxk208vkrFr9wTYlBwvtqfuROD6Ha2Ts6VevpYV/+QshdBfFVQ8VSVewvpj/5+Zayu9W8LBEstc1Z06b0p2miKZubE07gFttUZXc9f/XmO0sZHcC0xCX07tqlyua4O9QsvW9kerQyyL/0Bdf96lesFZv8oufzp/4OvyRtwJQfbQ22QZTlBJ/WdZnkgh0qfNr8lCr1bHc2GWEmcUOeFYq4kXQiu043+1Nu80Y4apvh9Ei01N5Z7b8+KaAf0QxBtMAyWLr0wTuvf+sld4RgoKOj9ZZp9pVeO/fP+6rtZEq1UbBHX03yaR5OeyYFI7AmA9tc5UI1l2MQhOOnPWqMd+WyRjY5uHEi3VsdWBE2CToeGJuXWHbMyUwUcvJ6f6m9bMK1xWh8dEs0ZIRXDHltY5W2Qr5o8/WXmUhYLtMurrXFVnU6EV963q99C9doXWq8Dhz2LfHPwBPeVMuCZcvXUauvx6S98WR7cema+ZNEFheFLl+Xjgxt2tSTcbf1xkFQeGx1OjK4eUNvcEGNi52CF1/T+rRxnxutvBAHASuCVRiCLayk+QyBh6tYEQxZPh6PWaV8ZdVsKZ+jE1skN3autEo9Hckx/9JmaszdEsZbwmqPw68VZg9GuBsaH/GcdRO54trLTTfsdIuztRN2vHE8pHPXMbjU/VoSv4GbRFvNaBv+W+0FZ9188b/YinM3n3WzRtz0RzZu480uN5zWXR1l9Xy7RPD/+9qIdmmT/6pqQeWeVbdm1nOwrBVT/PjjnxDVnqm1txe78qvL3kA3j41WR2SlqTnZF4+gQ/tG8fn9PUxcH2SGkaXORbN/3I/h+/nJbWHTswcTVpsJbfmxjpyT7J91DUjDJnmlY8KK/awQDi9af44fZQz5I8mVYS0suPITYVsvldq6Sb5SLB7hLUyKnQlnlJoMUCpGTheXO+Fb7nbaUt5dtzhhGwhy3Hfx2pmlay/eZ6P5lVWL166+eF/IDju33OWl2px7n9v8FXyPeZdHECOXW45BdIoc1uZTqfxaU480Pp9M5te6puFY8ifRy878RGXzS/2Cb1F7gKqefDYBhAU5gufYC3RzM0nwrNuCwutbcwRlyUFvNrWI1h6UrEqLBzMU3ryiSgzP3RmW37KwZud8Qoqqy/WPq3nJB+b7IoqZ2k34CN6qZWVcHYJJAKM8maJ+fnhXZ1VtyK+1KIfXMWLa/r6p190NBUqirPGdxreQy1hi/9zHQ7hCFPu4h7egG1b7qMrtSJkexbvvQd2RsxQ+J7S+T0QLFSmtGOTUUfqsPVC7KmdqvsPkBnRBDhZuhjr3Ew7Nok8w9557YMGeqKf5XG9QqLKkP0I+hItUfrVGfRu/U1RWmWr1pO/vBi11nlv4QsfQTVPsrtFAQgh26pQQj5G500gA6ue52R22qf7a+yn1qA59CKB7BiONHzd+COzct1Qc4aOC6rqYzb6nOf/z/SaUBzpiVE7nauKj/lz4q3mwFEUMtOv/4J31KLM8jFBCsfHru+/iRozB8pfMgP8PofXfeS4Gdz47dxo4jLS+8667/zfeieW4zhvf1pn40NeuW0djButaU4IL/LsGUoQZLY++Zt36/8qjynPzlJD/dqlZ9HigBUtK3pSjJIi/MBV0UR98JB7Ww6899b0qtSxaXbHpN7uqBppO1Bja8LGDLFV5XoFH0uk7pkYo8iRH4OljQ9MhhyS2LDpQTSOPTF2t8CY7gpKloevbJvP4fOULbqKTWpA5oxP4VsOxafXVh/49qYfjfpGZ0vOKRpQyC43qrt9uWGklwbMtmyOJj70vnfaLNUNLrimFkkSPTQ8dS3OAwGv1SNNr1boqj6SjmSqmyv5Dr1UsXx1NvyHkvvndEeDbrnEBrI31Yke886VvdkOve4gfeV2s1W1FAOJXbzXaM8bSS7MhpoNyW4H1ooOp+f2YHxa0DFzIbxUYa4o5ymkVlKWcVsYbXxcQVCjUN1iI1oZ6OatIQkOW9sKDrS4rAmB42ctmwtFYeCagCkwNtZ2BVhyUmL7Yf4038+6rP5ZHcQ9HxJDxVdj3RzGrsdp3mQW6+2FB5THt2nNxbcliYWvWzsK2eSrPwr4z/RX/oPviefv1lQmAP2A8BPXD43/YAPpZ2D+X9yuILTOwtf+FORgoafFTSFQosibqWW4i1McvPEdr7AqH34pS+VN4qzp0PYp/xMyt8TnTNu1t26nN9MSybWbS3LaN2jbdti2QqS/irYEtEQScI8G4WiWkOcZeTB3cJDj2JI6JAfXDuglWGHeLw3d5eJVDpXfTkUMp2hBrjIb05lg+G0htWMu0xAz8aGakeKaAWQ83c8Pgcx/2wlibe9IL4UX+6/fLRcnm/tYiMkgJv5ubaFoKoE2LIg6K1ogKbcG48oCoEtRx8Qi3HQs4R2oRedgYDnkQhg7ImlSU9HlxgrmFb6lV5r0oxcjEqHyRvsmhyp0CX5M+ZLtxmjryFW5o7ruYFyz5vG6CpunCgni/sAnXaEktL6RjRFssOfrs5aqVFtcjftJrossH20aKECn6OE4YL0bUtOa1x15y35FD6Lzg4uHRbWvXXmoDhKBH7+nfeLmB6+wHL/eAQLjx+cav5THCksZvCHiXPwg/vOyyY7cnveOv7gh1dt21ly/mJ2+HMEZzd2wzjCsecLHxm8bnIawOwTBEuNB9QCMt1Je14XNTLr8DEGoxMR4QfS568VJBWziXTR24zcZ1c4/arzjKM+386CvORuStkiA9du8RY9gwrnzABRB0tXK1pPULzbf0nLR1BY5AMUxV9KpaBVDGzceqMogr0pD1UYl1Zjx5Vtb+YsNV2dSukU8cupRYja8cKlXW9o9fAivW9o8dOiTOGn9/zVb6ktnZF605G+07JvXIyCcuPYTm3YdKJ8av3dY3fkj9OSROf72SvGjZshet0RZwuarVLlAT318tAdoVolafUN7481B/2T0jMXrxDV8l1sOn3rf24uu/Cp2rzkFt/A3X7l2fO3jDV9Cc+917Tl27TRxCe98CCoe12QtQ2BxuWrzIZKy5H4r6/VnJVUJxfMVsW/a61dmZdnFkxiZW/lMlAw4t9vSVRhP8bIS/FPXEji3Hly6a3efp6rCzc/3kusYvcv0UaG9RrH/uac0s9Ee00LxWUMm3SrddIvWA5dgcPhIKNVZIfYCvCYPX+DzP8NZnw0FUpOg/rF6zJhyGJ+TDSq+skXoV6uLhueNSrdSDp/8K36iFgqdVmc2HVYjob+TDeFI+bKSNuTdICg5rLc+KKnQGaUAB4fhXYtYmyu5VhPcV0obQ4nhYlvwGzfcCkz7h2y22eoGDCWlprJwYHasFc9Kmb3h+LgoA0JyNzjuMGw+qeSi8EYJpaONBDTVLE3EK+JkW09r8GXsyWKdMCYVQAamqkM+JfzY5/RYSgt+i3NT/kVCK//jkRz5y8NAh+BGl4qphiPvyKjMM/R9/+pGPHDp4UNZis/ZR7XMwKWMs9XOg6z7aOhmWzxAtBL+Fn2uDvkU0VpOpDTLYLh3rhPNUnM2HDOS0dd56rX0jB9SmuY/rYC6lumnQvQcsXuxavbqryC3Y3z2yD8EEyOAnkXLn01Bw9DzKqgx8mHEsVlevrhaRM/qBRHqAAjiyb2dO/yc5Af+uMaWntM5wicZpKqUwXFidX9ZFjC+igwRR/xlUB7q4XwrXJjrJMmy8Gy7CHsNBhm//Qgc88XUDAYHpOgMENL7+pnz+M+8UNx2jURv50PEwAMJFo/Dg5/Cz0B1CuORkBK55HiDa8C0bEZ53IBa94RBg6DfZo9Nm4zr4rMI8nv6e9jlyV4B51FIL+E3OedbaFumzHOVa22eh6wIeXNh2RLY3XQWT8zTU/9fQlh+9INwyoOAO7TC9ldTnKYgtKAXOc/bJC1CAT7QW1fjrc59poH3gNIN3qMiMFvPX51IrkCqt8QHqXHWVtNYOHVJq41sORZZm+MwWD8L+DnbgimcjmqYrLRNgvtViCODKZw4dIo5DrrnaIj8Xz5APIXNthgZfWHKqEmjJ+fI/6lCpbQ4dkqVf9R/UIZ8Pg/fMFlX8wpJjfhpIqRKUHJn4T5ujffWedsshhw5Z+Cvx4IRuAliGy5B8KKy03c3kQ3C7lgla3l/tItmStlwscLbRcK2+tXe8Y/jUyROzlmuYzp2N3zX+5U7nZpeZ7vL65UyfnT7kmsyNfuQjUV+L3inee0rLN9GYyUIT/95ca85XWZbpWNPfAOvr044dBTqZOnp/bXbZ6ANHU5MU4KjhhLbu27c1DBjV0Z6O7+6wrI7d8WkbVdzdgSP4E61XlCNe7SfX8xbvfV1upCLPlK8kpW6zXwNUBjeZNhIg+yJqpqLvnOVxYuyJIbzgRBada0+uXb6xgraDADM3eA9Wp3NgnbxN33SykxDTpVMn/TFOlf9TmbleV1H7LCZZMp5QAShenl8SWVAwhZUJgXZQ5/JTGxWfmvqdIAcAwgcNEt8zkCYQnHIKSNHcPFCZAxc3d6f7MknHpPjipdQ1ycDe4VF2pHoDGreme/0bL5olBkFAq7JhzcqTGkqqyBR+WUhWcmHMUzRELFYdg5KWIFPeXEeYEDiBGOX0Lx4bbzwMjUfiLjdtyuQy7Yzq2Hhv430u4OG5N4KGUsfCN4WOTWslwfemIvVbt6lhu+b1aWZea35JzgE+N69L4SVNzQk/VUryuRy5QYyTSnH++oymRG3qdA+Zgt8JOU/Ne1sTZD6UWK3oxbgIvk+F8PveY39JqEfpBx41KD45dwWsR1gP3zNN7jJRifciIQjLYZdreDD3RjzcUpuoigwr1EZgX3WqeqE/hMA35XAAT36RmqYOD+pS+Xf7A4UVwptOEj2pkx8TDDXW+uOApvyZPaKvP6l1qJwtvyMsNOSa64bA2EJccmDSyw9ctXx659St74xguvKu64YW9WUvel1teQhS5Vfji7/2OrNnqOc570zoTvpF+9dsTobfceWmEOLDyWTv1x9Itm9Yf+Nbso4eunzDpc+3K5vXXPH6xrF3/SoGdu6xW8s9kyOXvb6Sw+gdh26LK3l+gbB+/k5KTle8uWlIIu7THGg1dSWIDDURSgsWisG/WrZybDVHMajadDm19dRoW9dyKxwtRitEd3dv2D7KDMu2R7fvqQxw+NKxW3pKBqXGho1R3eSI3NIjGzcYNJcqMS+7+KpyZuU1yze+xLPSL9m4aXL5SqYpH8C3BK1fEuP8TolzVGmRZ2KficAX0+SzIjUYPhSD1UdR3kS8qx/Pb1DCS9+a3NWGJLZliDqLujaAdU16bWdFunmobccrnWvT11gwMpCPHuvtur43kokQDKUivVt7V79woq/bpCHbJOayQdZmUopfmhkhevciBtlF97MYXn8qs7pzcjBGSWZwsnN15tT1GGObrxKPx96+cdXsNdV0qZPq+Vy6umni4P6P9HRPpm1vZKMFoGp+saj5U0K7DmkaSP2aI82U2iBcE+g/CNJG57NG4QaX6ZxTA258v+c9fAvN0Jve4bim2VG641IXOl5zkuA1r41Gg28U0k4tFiLfeYsbdd/zO9P85UO2y+M803nf4+nGZa/8O6p/5VWRSPAtd5EQEvQr/Fttl+xLzTUvg3ZRS0bV1ZVmW/lk81SqeSXZ3LHmbKIHS+maoYnBWhinBqOpkRJSBJ1ZRaOEzpZpFu7Nb48hunXdskHcK43l0j0jycSm2vAKvUUel1YHKz07w5HVR0NcvAPAdpJFp7YsY85cZEKk+6g9bK8f0pMpAPESL35odqy/f1F/D3+WkAbeKNgoRuGU1iklUSIMg7WUgx2FiEjtiM1vQiCXOdloG2b3otoqGyD55bDrMgD6/ybahk0dNvRk8Fes8UXWvnyUpTPm6x+wGdwCp5A3dl6SjBi9t71tw/4pUeqy00VYid8Rur0gbUcfcueXnYqo9PsSk5hrIdmCivWEIdphQ6yhDWbY03X8SvbDAHDxSOchRvqQUGY2ftjbw+a6XP7kjqvXwLveWY15qnZF2IR/pR3UDku0ZSohK6Xipyr5nPEED45lQazqA1HqC8+aZpuovXTNpdTcVEZNgxeqEy4tmMiEqBYnGA5Rmb0IO3sJ2K6uy2YOGYA6N92Ww/kfgRtC1BFIjPpPi6OlHaWlOy/RdyLR2cqVjDKCkdpsIfRSRKoDRsaWIjKju+QQQvR3vbPl5Ogx9eu2zZcVQsePuYDpLZdx/0XveidPwWbbTTU+LBgP2jWnmeDPr2TOaH0ekoZjUVnrUQW2+5N9+2nUZOTRRwnhhEAU9//Hr37JoxaHb1nwLa5TiPJfKu3LIIm/Un40Ie9+qk4clQYbq//izGuYFaHz72iUrEaJW/4b3h/YQzJmscD8WGgA8Q70Ex3gSNPmaDGBlDHy23kT48ZnGz4P3N79ym26NEN8C0j7Df5UxutiC80auSug3wWURTZvkj3LFlrUtHIAgRaFWWZQNPZGyLwVhP8wb9F0LcqS8HW36UvrGytADYdO35i457Zn2T8BYkt/2sdqx4rJC6O136EvC4X+42Pnx5CBZ1wQq60iJ0+zyH8JEb3T05efDxj2Hx+9MCJa1Znbotw1ss4XLvXCLPn389LEL8Ss8xN8YT4KXA6LoKssEeU2+aNRUKVqEwkFUfpb5VX5z6nzYKHopwMvDDb+tomIen/gdLkwHgrmEVEB1YM+bqveChSqlsq6sr4vDDBaFNbtM5AhAGh8SiQrePS758YZ/Wfee90Z5BCAHjo/zMi3TH/CLUFpUrtIcriV0ib7LkjthZoEonrHwro83mTwBP3MeWq05Nzt9f4zFQ2O/vI8lT1f+wW6gkX+x7hYfdV5e8vj/z1cbFbT8Ov4PoUhEgWqldflrpC1eW9wsRD4GeRMIRKWVmuQFJ30lylKNB+LFIP7lWkck7f8+/h1I57oMwHMvkQakWHj/Y0PiC9Mi6uIwdVw1yVte+IuVb9FKMvrcYM54V3Ld4Udhq9ijm7LdIgfEZsRL0oBaNQjzGaQgiST1yIMwfDk75jcbhIKkGO27jDD1AH01shqt4x8dAVCdcGgOw3cuyL4bhsyzP2bTSvOE3+f+9MAXrA1ZYX9ePdZY/FGWMTif9YaT1W09WqjZ2LyVEnEeYPyWkBdEJxv/OjUoRAa9jnD83N/HpAH16o4Pduw+HjYSp0jUN/w5jESLzvdgy9QM32Juksp3Eogqxruwyg3G8OU8hh14XH8FBOHlv7MKSQRg2fIxdr/H9HjaLgAAQAAAR4AqgAFAAAAAAACAAAAGACNAAAAHg4MAAAAAHjaXMEDEBQAAACwt23btm0r27Zt27Zt27Zt27ZObQAAgPRvHDAOyAIuB5VAr8BccBLcGXwVAoEYIH5IFUg3yDEoGFoeegyGhTWHnYLz4JMQYIQV0R4xB3ESCUTWRoFRNVCX0C70KPR3TFXMVWwA2xt7E1cftxLPxjfDbyMwCcuJIeJGEoXUjLSOrCOvpKAoZSkNKQMpUyn7KeeoCepC6jtahjaR9og+kv6NEWSMZGKYCeZDVjnWeNYPdiX2Jo6MU52znvON25z7kpfhTeZ959P4Lflz+HMEAcFRwWchXVgQ9hXuED4RtRFtFzvF6yWVJROlWKlXeltWSzZVtl/2QPZBzpQH5M3kg+V75O8VSkULxRQlQFlWuUr5WVVOtV2dUV/S1PtvW00fzWrNda1R20N7QzdEd1L3Rq/SLzbUMhw1VjAZTVfMLHN982zzG0sFy02rxTrIetPmtg2yXbRL7Xl7J/ss+z4HydHQccBJdTZ3vnZ1dq12C91J9zH3B4/H098z0XPE89gL97bwTvOu9z7yZX1bfY983/1Of0v/HP+tAD/QLrA78CWYDm4JxULzQrfDxHDZ8PDwo8jZKDFaik6M3oiZYrPjyLgr3ig+NL4igUtUTuxKkpJtk6OTq5Inkk9T/FQ+1Si1Ig1Nx9MD00fSjzKIjCwTy7TOzM/cz1qztbKTswez73O53Ny8MN8i/6ggKVQsPCxii7pig+Kq4ouSujSm9HPvgp2Dj4eIhvSE3ArVCvUGADfwv3YAAAEAAAABAADeUPQBXw889QAPA+gAAAAAAAAAAAAAAAAAAAAA/in+8AcLA4cAAAAIAAIAAAAAAAB42l2TAYRUURSG/3ff1LILuzvbZHbf1DZKNa2sQfdRMdsqhQpvEVJYlkIqlLIIu0oKVKAgkFCAQIAgAQsCBBRYkJBU3z/e4xl8/nP/+86595y5o9/qS1JyXiJW0tKF5Ke66ZJyNFrTcfWG/qauQMQf4OX2yJsoc3I4CAX0oQdZLY5wBIa1DDUKyK3JV0XHYVvz4ZOysEX8R3PhrdrhqdrplLzXTq5pVwisx/FvoS/Use9cvp0b6jfyFhSpsd970Gw0NI3uhomwqsj5d3xntIXeBEGXvJnko1VdNEv6msXvsG4nLeL+v89hUjOOmU3bvvt0Hv6+5BF7j9FNTXsPr8k9ptEJx67J90vk37VC4bmniS6xd5r11fBSOfrMvfiu+OvpQ82ztue9GWoeKONseJdfOsO64/uV/dwG1/sC1+Ey310M28mkz4T7nh89HHWd8EHznNvzvKh9DC+ieakLnk/6vXon8KakwPPeD7SlQfkWHoDnF03jOV5Te6S/h0OmxbCF/1pjYV3LxIfcI/mRnCk0t9bWHcemihtrADU/N1VMvb017VrDghSa6qHDd+q+6XcF/AZXwH7FAKLhu7Pec23fu/zdNsiLdejH79f71jqLkJcUprpreW4xqq5XxgPik8b5o3huhhhgVb7bePkbpOmGZh17/juCNvkt3kOr0mp+ySvlENN7Ok7eLHrC6nuO9JL5/w9Lpd4A57+DuPMcrGllbFmOc+J87JSskXeVuScVevIfKc7UVwAAeNpjYGRgYG7/94Ehit35n+b/fezcQBEUwCgDAJ0+BjJ42mNgYlzDOIGBlYGBqYtpDwMDQw+EZnzAYMjIxIAEGhgY3gswvHkL4wekuaYwODAoPFBgVvhvwRDF3M4ooMDA0B/HDNS9i2k1UIkCAyMAD8oQegB42mzPU4BdMRAG4Nlka9ttMueitm2bL7Vt27Zt27Ztt2eyRm2e2zQ1B////AEAM8/NJzbp97X9eXHT52EwRIXK0AgGwmJYBqthPWyBnbAbTsJtUBAG7/xy+NVi+dgpdo7dZTafzmfzeXwhX8yX8ZV8jYgqYorEIoVII6TwiJzilownE8hEMrlMLfPIOXKlXCsPyCPyvLyBgByjYHSMhYkwJaZFgRa6MRMWxuJYCstgeayC1bEJtsB22A+H4SiciHNwBa7Gk3gan+JzK5ZlWVvc29x73Afcx9xPPc08nbyR3qfeD14nY7GMmwOE1kYloMlXzSqj2fxdc+ur5q3R1DSak+wMu83u82m/aVbw1YKJGCKRSC5SC/EfzWSjWSP3y8NGc9lomNFEM5qEmATTfNd4/9E0x7bYF4fiSKOZgkuN5rjRPDGa6BZam3/TNPZ08EZ4n3hff9Vs+qLRwTpIH9GH9H69R+/UW/UWvVxP1xP1aN1bF9fiUxHfJt9G31LfEueRE+mEO6FOiBPkBDoBAaMDRgYMDOgX0CegV0C3gNbquJqgxqtxapQartqrhCqq8qeX9JzCKYT20h7aTbtoB22ijbSe1tEaWk2raBZNp6k0hSbROBpDfagXdaMW1IgaUD2qQ1WoEmWnbBSTYtgvbdv+vMDbAbe9b3vcdr4tcWvFrfk31W8q35S7KXvt9rUchb/AdDeMAACxywxqAAB42qxW13rbTA4dqrlXlRSmgJnI6zWHitPdC8e0Nt31+8itpCXnfvcqz8B9GVDpd/toC5CSe/mbVTCDMsA5wNBCoQDFvu8FAG9+iNHtN1ja/auPz0ycDsKPEO/7mKtHP/tFv2i15IFpWSgCFFpudIQhdOg6aCiE8KODOSUtaTmYV9D+nK9UhauxrCEM3SRX0W5Sz2vM6b1PgMOSFjpqY2HrUyeXy9ExaB3esVjbGa0a7h2gpXQ7ZaNMNoliyz8MOjWDPR0sKMzbWNU+58Oa1l0HE9qA/9vCwtRfO9PGiPZaHpY838J8Pdj5m0/OZuwDbm2Rao28cY5Xc0EASeZNFU2TqrsDnGX7LHnSqT4QG3EEOLjlh6QBtg3y6gWvXoRmGASBSWzhsG6h2PFRvGFni/bmG7zHq3tvoh/josUeP4riIAjaUYCGHQRdBAG0CY90AweLCqiCQj0iTH16y8c+6WK/dKkDFBI6WErpJiagnfQduMBGhmtm5fM35kKvhcUZi4waYogpVzJbrBND2364ZUY7gS8DKwBc2/XJZhIvvVIc7FM4oO2OyGVt7qetdCWgkG6EuYOPaLSoEOybcXBAAVc7SrAK4gD4BFwLA3YJN9JqB1VnYFRoz52xjgZnSJ0epOHsFMOWpCfoIXixjKDdJVuY3BAEE9eOCKPWymgjSzFySTg+pChBURcFjaoU0OeRYZH3KIsprWCGhnhMJbmch+1ow8FxRa4AOKZf8wG0oA7hOO92aDee9mtC0SolBYiDFmXGCR1CHAJOEG0OTqo3e35SaG8ED3HkUH5ysKzebPtvdjOlaZG+nOorKhGTet9PJic1GpGLE3bAkHJ1Nxnjr3H6QqMmgZBs+QnTR3jdOAZOOz5jSQrrrc3MTiH0STUBIWlS/U3Snm7WJS1MhChL4kujWOkYhpF2q6pEInLeno+T0gUPR6WLI5JGzoXw+82bhpgQZeG6LjNQIZsRJZV+G/9rmw+IrhphrNoO3lCJwfIm8c3ylkryLG+rpMDSVEmR5R2VlFjeVUkfy3sq6Wd5XyUDLG0le/xjKSSmJTTQ+AffFgfVCWPtyPjvzOicME4dGf+TGUEJHLMvxUmgvmZQGedJfBbhA6rrAeFjKQkfy4eEj2Wd8LGcInws/0T4WE4TPpZ/JnwsZwgfy4aCpXRgHylKezMELWmruaUkscEzO6vwkY2P6D4+VgBNuKSbMpqT/GC/0sNk9E96LU5GSx5PHD6eSYpG1fNngxTl04yeK32eKXieVv5cia6Pdz4nGjbVcrFe1L4I/ttYkXPJM6PKWF8QH9C8pH4UOppz8KVq3FhycO46VzR0i9znqUWiVocGNFFIvi2v4rgpmzIC/4D4QEO6nTnDqFaI4QVFZeENcivU6Z26JcPCxSFtH8YNCbAU05mLp92gkZ2HJen2vAFDfqasbfufC1AE83Nhqng7cF0JOKghlmmE3AyxpM9e1xCInuy/UkGHbYlFHbXJXNCRSeuQn3RnYyIJ5D0lN6nHkjJsEk4SaZYQLkoiOYskS0gSi/WIPmed6EQuos5F5Om7+yQ9zkWDsNTjAkhbnOpyIZeIpuWeiTCn9k3Z5KTcxZWeLQWTMY1iz2/AkrRM0vSUdOhRK7BUp92rk79dsiZeNO3dbkke+dUTleheu0L+gXMWcq/Fa0pCg1ncxBva3zJ3Ah+WgkYya1To3q6fsu6YW6es7oWxV0VohQv2VQk3FC7aMdXGM0agLnWlhjZwliI8hpzO51TGfITD0s2g84BKWIKGnOuev6mSwULdpZDfMtLNP2qKGVNE6JYkPapOzIsVdOtsqkQs2D1W/kK7RduSXV7k3GkKXhEF1ezadwTf8HIDX9Atf32J/g0dZ1TK+JLWbxXOk3jHLHpEN2zGMuqx9V7xQOP/e66LtNihIIDCt56gS2DKjLAC3N21cWvctXH3xbRtkDpVIbP/5jtxH1AORYUQOhXDCgEjUUECGFUIGKPpUozTgAkaMEkDpqJiCKFNNa0SUyoqik+bUYlplk7QHJ1pns60QGdaZJ0diiWFgGXWCVYUAlZpuhVrNCBNA9ZpwAbrC+2qTZWYtlifaVslph06Qbt0pj060z6d6UCPcX1yAg9tlGtWHjlblMccdBu16ugkykvcnEJvzqyRuDnXmRuSpV4w8jky0Oe4hJ5f6XLi4Bp6cAM9uNW2MVneHSPP76HnD9DzR50zDp6gB8/Qgxdtm5LlvTLy/A16/g49/9A54+ATevAFPfiOCpX2ZZsrqSr8+/O3Q3+a9DGYaq3JlaVzf6uHM78v69ofY0wBR3jaYvDewXACUKM0HDgQhtE31hqXxWmZNBH9BcQ4zxSQDmKjljF7C0Yfn5p9g6KOA50KRIhQhwaEqvUPGsUYOe/iPUvLKf7hX+kES9VIAItrSLkypRqhfO2YBWAAYnxT60ZfL6/7MdeI8R9zX0QqgAzejb9YCsUxKLa8Vtu5EZfzKT6y9F3Rp84LnT0YNIjFaTwIuQChwiuQeNpjwA0kIJBpBQMDkygQH/z/CkQzJAGhGoMa02qg2DbG9QwM/+3A8tv+vwLyD/z/+t8YxAcAhV4PtQAAeNpiYGDgZChiYGZgZOEEshcBMYTNyCAC5EHYTAx8DNsgbCDpwnAEymZhUGHkgLJZGZwYdaBsNiRxXqYUxjwom4/BhPkSA6BVskiuGIxhsNbvFNmVmZmZubvOY2bM7fuNyowTsOyR5T9y1lRWRSFTs0oro4YCdSuuHuKohrlmNGA0whMwL6m6uSWyM5hZKiViUv1UdowHFflKGb3xR+VpantwolZdgRVVAsUi/Xvgc/C1bnQAzsI5JU+rqQJ5TZsqU2s41qgnPWHQ553leU9h4KXGtziXZDXx9Z4XcO5BnjlQgysFp0ksK+Nuf69aZk3zjKnnh273f99v68yr7WsQ36JqoJ8jdsjtixbV8497eTkxf8+KPue8mNyvCMyszxXY2br9bCkJP3jYIugQhSLV9zc3qAjXuV2uv+g7A6VAbW+L/ntGgYhfsOr3s5rghKcHPk/S3TvaJx7hDtwXyvsvFPD9g39h8MXJXswlj6rFk/XfFONN7ZkjUU9c0YlxQ7NosR2uCniIq44aWyNvgAd50Hr0eEhH9O//pucWEqGwaQB42mzB06EQAABA0Xufbdu2rZ6t7FGybdt23w2ROUFNEL87hwD++bWFBv7DHEACCCSIYEIIJYxwIogkimhiiCWOeBJIJIlkUkgljXQyyCSLbHLIJY98CiikiGJKKKWMciqopIpqaqiljnoaaKSJZlpopY12Ouiki2566KWPfgYYZIhhRhhljHEmmGSKaWaYZY55FlhkKctYzgpWsorVrGEt61jPBjYawDa2s5+rbOEIO/nMQX5wiF1c5CWXeMNDHhnIW74ZZLAhfOAjn3jHF0MNM9wII40y2hhjjTPeBBNNMtkUU03jMU94zgue8ozNvOKO6WaYaZbZ5phrnvkWWGiRxZZYapnlVlhpldXWWGud9TbYaJPNtthqm+2ctMNOu+y2h+/22me/Ay5xkGsOcdhhRxx1zHEnnOSsU0474yw3nHPeBY5yzMXfBMGDkQMAAACwy5D/tW3btjtwE3/+BQSFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTS1tHV09fQNDI2MTUzNzC0sraxtbO3sHRydnF1c3dw9PL28fXx/PdHVlts6FAbgc9qG4Vkcsy6NZcZbxd6TaI0MFQy8fRPrnwn42yBcXtheeF7mTfpB4iwYzGA+e827jk9ZwMLZjzMZPv/Au2PLX/wRL76I2Xdxugz4OWohh/7ll7N4+UULNyFjV33P82EAQxjBGDKYzTvRW0MuLZPJg1cv394ofmuscoVDsLknQUobxbVefkNzxiWN5xVXariXdGMWU2TH9aQSp7NxzXa47110HAwm2LHt3eoshglMIXNmMWQwc+YFLJ2FBw+w2Lrdj/J6uvVTYsfdUzid8XnU9ZjPyfWkbp0yWl28I6W53NCD0IZ6I7hcUjeaR01meVK8FZfigiR1F5faNmdz5mZawD8EMILxlmtDSujbjpsziilk21EN46CMGHouZ7w/SXItP4DRWg4n0XDJ+3aFcFBb0RtSmprrzJntL8+FFp2QXLl5oQeDVTP0J2WpN6iUzsjb0F8r7rikvsGucQZzZ5LBfDooKW2Pmsz+Kbk+yGwV3Uh6QA8Jem5+WjnZAfowgOG6EaqRNEqrUYr3rtRZacQoH1FOIXNmPgxguBtJjdS3orGSK1QxqwgX7WCuLwJ5DNGvKlg768Nk4KWQwQzmTt+HgTP3oJsf5QFksHQWqFf1TI+8pSmL4wP0XzXSHpGUsIL1ZFKlkMEKol9HMIYJTCGDGSwms6B2ZtBdqfJ87x/y1uZbAAAAAQAB//8ADw==) format("woff"),url(data:font/ttf;base64,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BiNCIzixMAEUK7AGQy6wMCstsEkssAAVIEewACNCsgABARUUEy6wNiotsEossAAVIEewACNCsgABARUUEy6wNiotsEsssQABFBOwNyotsEwssDkqLbBNLLAAFkUjIC4gRoojYTixMAEUKy2wTiywCiNCsE0rLbBPLLIAAEYrLbBQLLIAAUYrLbBRLLIBAEYrLbBSLLIBAUYrLbBTLLIAAEcrLbBULLIAAUcrLbBVLLIBAEcrLbBWLLIBAUcrLbBXLLMAAABDKy2wWCyzAAEAQystsFksswEAAEMrLbBaLLMBAQBDKy2wWyyzAAABQystsFwsswABAUMrLbBdLLMBAAFDKy2wXiyzAQEBQystsF8ssgAARSstsGAssgABRSstsGEssgEARSstsGIssgEBRSstsGMssgAASCstsGQssgABSCstsGUssgEASCstsGYssgEBSCstsGcsswAAAEQrLbBoLLMAAQBEKy2waSyzAQAARCstsGosswEBAEQrLbBrLLMAAAFEKy2wbCyzAAEBRCstsG0sswEAAUQrLbBuLLMBAQFEKy2wbyyxADwrLrEwARQrLbBwLLEAPCuwQCstsHEssQA8K7BBKy2wciywABaxADwrsEIrLbBzLLEBPCuwQCstsHQssQE8K7BBKy2wdSywABaxATwrsEIrLbB2LLEAPSsusTABFCstsHcssQA9K7BAKy2weCyxAD0rsEErLbB5LLEAPSuwQistsHossQE9K7BAKy2weyyxAT0rsEErLbB8LLEBPSuwQistsH0ssQA+Ky6xMAEUKy2wfiyxAD4rsEArLbB/LLEAPiuwQSstsIAssQA+K7BCKy2wgSyxAT4rsEArLbCCLLEBPiuwQSstsIMssQE+K7BCKy2whCyxAD8rLrEwARQrLbCFLLEAPyuwQCstsIYssQA/K7BBKy2whyyxAD8rsEIrLbCILLEBPyuwQCstsIkssQE/K7BBKy2wiiyxAT8rsEIrLbCLLLILAANFUFiwBhuyBAIDRVgjIRshWVlCK7AIZbADJFB4sQUBFUVYMFktAEu4AMhSWLEBAY5ZsAG5CAAIAGNwsQAHQrMoAAIAKrEAB0K1GwgPBAIKKrEAB0K1JQYVAgIKKrEACUK7BwAEAAACAAsqsQALQrsAQABAAAIACyq5AAMAAESxJAGIUViwQIhYuQADAGREsSgBiFFYuAgAiFi5AAMAAERZG7EnAYhRWLoIgAABBECIY1RYuQADAABEWVlZWVm1HQgRBAIOKrgB/4WwBI2xAgBEswVkBgBERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAYABgAGAKoAAACFQAAAsH/6gIVAAAAYgBiACYAJgKrAAACtgGvAAD/PgIVAAACtv/qArYBwP/1/zMCFQAAAAAAAAAJAHIAAwABBAkAAACiAAAAAwABBAkAAQAUAKIAAwABBAkAAgAOALYAAwABBAkAAwBEAMQAAwABBAkABAAkAQgAAwABBAkABQBCASwAAwABBAkABgAkAQgAAwABBAkADQJkAW4AAwABBAkADgA0A9IAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAwADkALQAyADAAMQAwACAARABlAHMAaQBnAG4AIABTAGMAaQBlAG4AYwBlACwAIABJAG4AYwAuAAoAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAxADQALQAyADAAMQA4ACAASwBoAGEAbgAgAEEAYwBhAGQAZQBtAHkASwBhAFQAZQBYAF8ATQBhAGkAbgBSAGUAZwB1AGwAYQByAEYAbwBuAHQARgBvAHIAZwBlACAAMgAuADAAIAA6ACAASwBhAFQAZQBYAF8ATQBhAGkAbgAtAFIAZQBnAHUAbABhAHIASwBhAFQAZQBYAF8ATQBhAGkAbgAtAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAxADsAIAB0AHQAZgBhAHUAdABvAGgAaQBuAHQAIAAoAHYAMQAuADgALgAzACkAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAwADkALQAyADAAMQAwACwAIABEAGUAcwBpAGcAbgAgAFMAYwBpAGUAbgBjAGUALAAgAEkAbgBjAC4AIAAoADwAdwB3AHcALgBtAGEAdABoAGoAYQB4AC4AbwByAGcAPgApAAoAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAxADQALQAyADAAMQA4ACAASwBoAGEAbgAgAEEAYwBhAGQAZQBtAHkAIAAoADwAdwB3AHcALgBrAGgAYQBuAGEAYwBhAGQAZQBtAHkALgBvAHIAZwA+ACkALAAKAHcAaQB0AGgAIABSAGUAcwBlAHIAdgBlAGQAIABGAG8AbgB0ACAATgBhAG0AZQAgAEsAYQBUAGUAWABfAE0AYQBpAG4ALgAKAAoAVABoAGkAcwAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABpAHMAIABsAGkAYwBlAG4AcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAFMASQBMACAATwBwAGUAbgAgAEYAbwBuAHQAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMQAuADEALgAKAFQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAYQB2AGEAaQBsAGEAYgBsAGUAIAB3AGkAdABoACAAYQAgAEYAQQBRACAAYQB0ADoACgBoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAAIAAAAAAAD/gwAyAAAAAAAAAAAAAAAAAAAAAAAAAAABHgAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAQIAhQCGAI4ApACDAJMAiADeAJAA8ACRAIkAoAC4AKEA1wCwALEBAwDYAOEBBAEFAQYA2wDcAN0A2QDfAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYALIAswC2ALcAtAC1AIIAwgCrARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwATEBMgEzATQBNQE2ATcBOAE5AJgBOgE7ATwBPQE+AO8BPwFAAUEBQgFDAUQApQFFAJIBRgFHAUgBSQFKAUsBTACcAU0BTgFPAVAApwFRAVIBUwCUAJUBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8BYAFhAWIBYwFkAWUBZgFnAWgBaQFqAWsBbAFtAW4BbwFwAXEBcgFzAXQBdQF2AXcBeAF5AXoBewF8AX0BfgF/AYABgQGCAYMBhAGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkAGRAZIBkwGUB3VuaTAwQTAHdW5pMDIzNwd1bmkwMkM5B3VuaTAyQ0EHdW5pMDJDQgVHYW1tYQd1bmkwMzk0BVRoZXRhBkxhbWJkYQJYaQJQaQVTaWdtYQdVcHNpbG9uA1BoaQNQc2kHdW5pMDNBOQd1bmkyMDAyB3VuaTIwMDMHdW5pMjAwNAd1bmkyMDA1B3VuaTIwMDYHdW5pMjAwOQd1bmkyMDBBBm1pbnV0ZQd1bmkyMEQ3B3VuaTIxMEYISWZyYWt0dXIHdW5pMjExMwt3ZWllcnN0cmFzcwhSZnJha3R1cgVhbGVwaAlhcnJvd2xlZnQHYXJyb3d1cAphcnJvd3JpZ2h0CWFycm93ZG93bglhcnJvd2JvdGgJYXJyb3d1cGRuB3VuaTIxOTYHdW5pMjE5Nwd1bmkyMTk4B3VuaTIxOTkHdW5pMjFBNgd1bmkyMUE5B3VuaTIxQUEHdW5pMjFCQwd1bmkyMUJEB3VuaTIxQzAHdW5pMjFDMQd1bmkyMUNDDGFycm93ZGJsbGVmdAphcnJvd2RibHVwDWFycm93ZGJscmlnaHQMYXJyb3dkYmxkb3duDGFycm93ZGJsYm90aAd1bmkyMUQ1CXVuaXZlcnNhbAtleGlzdGVudGlhbAhlbXB0eXNldAhncmFkaWVudAdlbGVtZW50CHN1Y2h0aGF0B3VuaTIyMTMHdW5pMjIxNQd1bmkyMjE2DGFzdGVyaXNrbWF0aAd1bmkyMjE4B3VuaTIyMTkMcHJvcG9ydGlvbmFsBWFuZ2xlB3VuaTIyMjMHdW5pMjIyNQpsb2dpY2FsYW5kCWxvZ2ljYWxvcgxpbnRlcnNlY3Rpb24FdW5pb24Hc2ltaWxhcgd1bmkyMjQwB3VuaTIyNDMJY29uZ3J1ZW50B3VuaTIyNEQHdW5pMjI1MAtlcXVpdmFsZW5jZQd1bmkyMjZBB3VuaTIyNkIHdW5pMjI3QQd1bmkyMjdCDHByb3BlcnN1YnNldA5wcm9wZXJzdXBlcnNldAxyZWZsZXhzdWJzZXQOcmVmbGV4c3VwZXJzZXQHdW5pMjI4RQd1bmkyMjkxB3VuaTIyOTIHdW5pMjI5Mwd1bmkyMjk0CmNpcmNsZXBsdXMHdW5pMjI5Ng5jaXJjbGVtdWx0aXBseQd1bmkyMjk4B3VuaTIyOTkHdW5pMjJBMgd1bmkyMkEzB3VuaTIyQTQNcGVycGVuZGljdWxhcgd1bmkyMkE4B3VuaTIyQzQHZG90bWF0aAd1bmkyMkM2B3VuaTIyQzgHdW5pMjJFRQd1bmkyMkVGB3VuaTIyRjEHdW5pMjMwOAd1bmkyMzA5B3VuaTIzMEEHdW5pMjMwQgd1bmkyMzIyB3VuaTIzMjMHdW5pMjNCMAd1bmkyM0IxB3VuaTI1QjMHdW5pMjVCOQd1bmkyNUJEB3VuaTI1QzMHdW5pMjVFRgVzcGFkZQd1bmkyNjYxB3VuaTI2NjIEY2x1Ygd1bmkyNjZEB3VuaTI2NkUHdW5pMjY2Rgd1bmkyN0U4B3VuaTI3RTkHdW5pMjdFRQd1bmkyN0VGB3VuaTI3RjUHdW5pMjdGNgd1bmkyN0Y3B3VuaTI3RjgHdW5pMjdGOQd1bmkyN0ZBB3VuaTI3RkMHdW5pMkEzRgd1bmkyQUFGB3VuaTJBQjAHdW5pRTAyMAAAAAABAAH//wAP) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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AGUALAAgAEkAbgBjAC4ACgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEANAAtADIAMAAxADgAIABLAGgAYQBuACAAQQBjAGEAZABlAG0AeQBLAGEAVABlAFgAXwBNAGEAdABoAEIAbwBsAGQAIABJAHQAYQBsAGkAYwBGAG8AbgB0AEYAbwByAGcAZQAgADIALgAwACAAOgAgAEsAYQBUAGUAWABfAE0AYQB0AGgALQBCAG8AbABkAEkAdABhAGwAaQBjAEsAYQBUAGUAWABfAE0AYQB0AGgALQBCAG8AbABkAEkAdABhAGwAaQBjAFYAZQByAHMAaQBvAG4AIAAxAC4AMQA7ACAAdAB0AGYAYQB1AHQAbwBoAGkAbgB0ACAAKAB2ADEALgA4AC4AMwApAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABjACkAIAAyADAAMAA5AC0AMgAwADEAMAAsACAARABlAHMAaQBnAG4AIABTAGMAaQBlAG4AYwBlACwAIABJAG4AYwAuACAAKAA8AHcAdwB3AC4AbQBhAHQAaABqAGEAeAAuAG8AcgBnAD4AKQAKAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABjACkAIAAyADAAMQA0AC0AMgAwADEAOAAgAEsAaABhAG4AIABBAGMAYQBkAGUAbQB5ACAAKAA8AHcAdwB3AC4AawBoAGEAbgBhAGMAYQBkAGUAbQB5AC4AbwByAGcAPgApACwACgB3AGkAdABoACAAUgBlAHMAZQByAHYAZQBkACAARgBvAG4AdAAgAE4AYQBtAGUAIABLAGEAVABlAFgAXwBNAGEAdABoAC4ACgAKAFQAaABpAHMAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAaQBzACAAbABpAGMAZQBuAHMAZQBkACAAdQBuAGQAZQByACAAdABoAGUAIABTAEkATAAgAE8AcABlAG4AIABGAG8AbgB0ACAATABpAGMAZQBuAHMAZQAsACAAVgBlAHIAcwBpAG8AbgAgADEALgAxAC4ACgBUAGgAaQBzACAAbABpAGMAZQBuAHMAZQAgAGEAdgBhAGkAbABhAGIAbABlACAAdwBpAHQAaAAgAGEAIABGAEEAUQAgAGEAdAA6AAoAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATAACAAAAAAAA/4MAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAG4AAAABAAIAAwATABQAFQAWABcAGAAZABoAGwAcACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0BAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwAmwEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsB3VuaTAwQTAFR2FtbWEHdW5pMDM5NAVUaGV0YQZMYW1iZGECWGkCUGkFU2lnbWEHVXBzaWxvbgNQaGkDUHNpB3VuaTAzQTkFYWxwaGEEYmV0YQVnYW1tYQVkZWx0YQdlcHNpbG9uBHpldGEDZXRhBXRoZXRhBGlvdGEFa2FwcGEGbGFtYmRhB3VuaTAzQkMCbnUCeGkHb21pY3JvbgNyaG8Gc2lnbWExBXNpZ21hA3RhdQd1cHNpbG9uA3BoaQNjaGkDcHNpBW9tZWdhBnRoZXRhMQRwaGkxBm9tZWdhMQd1bmkwM0YxB3VuaTAzRjUHdW5pRTEzMQd1bmlFMjM3AAAAAAEAAf//AA8=) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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AMIAAwABBAkABAAiAQQAAwABBAkABQBCASYAAwABBAkABgAiAQQAAwABBAkADQJkAWgAAwABBAkADgA0A8wAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAwADkALQAyADAAMQAwACAARABlAHMAaQBnAG4AIABTAGMAaQBlAG4AYwBlACwAIABJAG4AYwAuAAoAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAxADQALQAyADAAMQA4ACAASwBoAGEAbgAgAEEAYwBhAGQAZQBtAHkASwBhAFQAZQBYAF8ATQBhAHQAaABJAHQAYQBsAGkAYwBGAG8AbgB0AEYAbwByAGcAZQAgADIALgAwACAAOgAgAEsAYQBUAGUAWABfAE0AYQB0AGgALQBJAHQAYQBsAGkAYwBLAGEAVABlAFgAXwBNAGEAdABoAC0ASQB0AGEAbABpAGMAVgBlAHIAcwBpAG8AbgAgADEALgAxADsAIAB0AHQAZgBhAHUAdABvAGgAaQBuAHQAIAAoAHYAMQAuADgALgAzACkAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAwADkALQAyADAAMQAwACwAIABEAGUAcwBpAGcAbgAgAFMAYwBpAGUAbgBjAGUALAAgAEkAbgBjAC4AIAAoADwAdwB3AHcALgBtAGEAdABoAGoAYQB4AC4AbwByAGcAPgApAAoAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAxADQALQAyADAAMQA4ACAASwBoAGEAbgAgAEEAYwBhAGQAZQBtAHkAIAAoADwAdwB3AHcALgBrAGgAYQBuAGEAYwBhAGQAZQBtAHkALgBvAHIAZwA+ACkALAAKAHcAaQB0AGgAIABSAGUAcwBlAHIAdgBlAGQAIABGAG8AbgB0ACAATgBhAG0AZQAgAEsAYQBUAGUAWABfAE0AYQB0AGgALgAKAAoAVABoAGkAcwAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABpAHMAIABsAGkAYwBlAG4AcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAFMASQBMACAATwBwAGUAbgAgAEYAbwBuAHQAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMQAuADEALgAKAFQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAYQB2AGEAaQBsAGEAYgBsAGUAIAB3AGkAdABoACAAYQAgAEYAQQBRACAAYQB0ADoACgBoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAAAAAgAAAAAAAP+DADIAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAAAQACAAMAEwAUABUAFgAXABgAGQAaABsAHAAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0ARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAJsBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAd1bmkwMEEwBUdhbW1hB3VuaTAzOTQFVGhldGEGTGFtYmRhAlhpAlBpBVNpZ21hB1Vwc2lsb24DUGhpA1BzaQd1bmkwM0E5BWFscGhhBGJldGEFZ2FtbWEFZGVsdGEHZXBzaWxvbgR6ZXRhA2V0YQV0aGV0YQRpb3RhBWthcHBhBmxhbWJkYQd1bmkwM0JDAm51AnhpB29taWNyb24DcmhvBnNpZ21hMQVzaWdtYQN0YXUHdXBzaWxvbgNwaGkDY2hpA3BzaQVvbWVnYQZ0aGV0YTEEcGhpMQZvbWVnYTEHdW5pMDNGMQd1bmkwM0Y1B3VuaUUxMzEHdW5pRTIzNwAAAAABAAH//wAP) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,d09GRgABAAAAADhIAA4AAAAAX7gAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAs9AAAAFYAAABgRt+RvGNtYXAAAC1MAAAAuAAAAQx7wyGGY3Z0IAAANVgAAAA6AAAAWgMLGdhmcGdtAAAuBAAABrwAAA4MYi79fGdhc3AAADhAAAAACAAAAAgAAAAQZ2x5ZgAAAUQAACkMAABE3Djz6PdoZWFkAAAraAAAADYAAAA2YydC2WhoZWEAACzUAAAAHwAAACQHTwOgaG10eAAAK6AAAAE0AAAB6hKhHFxsb2NhAAAqcAAAAPgAAAD4KH46gW1heHAAACpQAAAAIAAAACABLg6abmFtZQAANZQAAAGdAAAEjmNLfodwb3N0AAA3NAAAAQkAAAFv3QP6/HByZXAAADTAAAAAmAAAALJlwgKGeNrNvAWcG9e1Pz7n4pB4RlrBSlppJS2D0F702huv7TXbiR1OHMdBO+gwvKZuXqiUlLkPyxTmYvh9ysx5UEpT5lj+3zuwELv9//j3q2xldDWee+73Hviec66qIKWqKMpTyFawwhWlFqlFKrVIsfqmvdUqsg//rAofF/ccUBRQ0H1KRCkp6r2dMaagan8snkCcsUK5Il6NeqtZw81qIp6IW5xxVhSjFTH4J4pMioObgxhzRvHMCDmBxChCLEoH+m0GiKL7OGvXOAWg5CdPRy2MDn8LIRplO1mMIFBj/f0spggpSvAQ/JOQokMZFVKUMiaWUjRrzVotnrCdSQuOJK16sVJp/bUvypjAzAwm4gJlchhFY6EQ+/mxBtFHGRD8ytYKQAxhNDSIgB06ekjKNnlkCu8Ssp2rXCZku/j8gkQoUXBwacp53flr06jhX7aaQsRq3BZwMc6t2tEDCXnNi2IB9pJrVlzyWGcAGsUCZ8yqtVo/jHYU1CglW7Z0pdnJp1j2xReLiz+XSlhPRZMFHiN0/fp8Hw1Z4kYeEzdupen8KadYFvxQXFx/fZf3nRoVd66Tn6C6bj1AZf0669OpCL8iORUKITCynTqGteuwe/WKm2hCfHmwYyYYQpfexWMLH7DemQmIGwG7V96X7mPkB4Qw4DsQrBUaOHrkKfgxelFZq2xXdin6/bt2bF03YmKxy2W5ZIlPrSEwsm2pZwmLuztbKZSLFVuMuCCJvxKjSqMoVbPuoCq/q9UidQmUbYnraqzZqFd+NH96LdubDWFaHKazE1HQVBUzc2gEMYTywVzHcW8LpwQgMcRPXhOGKGCV6s1ZExDwQCQWJLCrXIZ86LLNZzVyAV0vV1TQSgalI1VVL2kAb9VZOL5m76OdWMuqELX08IBByDmIacNhBO+cCkTy2Viw/S9Wa7hTUajQo6fwEwIBXckoI8qMskUJrTI3rJlulDsTIRVotR+sYkFgURWLEiuNi5W05ErKxQJjdsxVDWVBkRTOSu7NEhtXe2JlDwTnX8K/3H3fO1GY3vs8sW2NFwpcs20yHO1gCOWYGY0kdXL4eWrAKe+EKFk9sDYfSA6suu95czWnlK82Kep++pkHwvBMLF/oJOHTTwuTbCF/+M5kxNAI+gI3E9FQgB2uUfVpcVfn4I27h+PhTjBHuiKrZiJdI9HREbHzw0d+igE9J3Z+t3K22PkzT94y16uInQd3HZwLeROJZsvdzHjCWYswb2f9CZt5mlARwwXPH7WmUEteNcUNBWfBdlyMijWLG3C5Iobcf9+Ck9efH8xdHS12D2r7BhlSYaQSFCLuNQCysdzYgGEyY7zeEV43R8O7Tt1yYYQ1Qt08rBGWO2t9WO3siTLgw/GYHWLpVaWsHVa1Ys1Ez521IZlftSVAB4cG1d1virKATpna9ZpzTDCoRbULGA4jvYLUPjw3GUvNVUNxqjMU2Lrp+Es1tKteabbCgFlXVy6fGVJxO7hmIj6eHaYoiBVQtsJDyvOOP2R3mxj+hi/c9t/q3cRTtxzhcEBoYFo8NYjEU6nFpTMvS0TdCVxFssOJOBzg67V3FFS18A4NoLvIjdPj6vXGi4TzQy+O3jn6y5s4aJgGD35m8oz2594WVEBoOINTvOcHwJW65oWNEPL3LhKW/12Du4v+44udBkaBa68NoBeQ6jz8xUMcECGIRt4CY7Di7RHMxfPXQAmeF8/fKJ7fg+Tz644x2Bazm9JrOgpVYFwaBCuWhc5Y8lsXsVa92WCcSSVyjMxVoJpQuESlLGT7eiHeUUlZHaWIkSl1wKVweUcpY0RKA6myGqhEGDrWd4A4DqDHYp0Zi8LlEIsXAlDO5ALdUArkMmUIFHrFMMsFUDag/ZUbuNoZGFMc/G7HKXSeUhDrS3Kxvla91SVkdU3c7vIChb+ghow3k13QjdRc1kDQLbz8nXciozOrozvv7PpzKvy617Nslr3+da5/9j+BKTXsyJuU55U7FzWs9d+lYbcfK1aCYioPwShElIjUAOepjvSu92bOY80UufzULI9EeOepl9PUfxU4AmKm0iYBxBUpmaI4koXFM5ginyGE8tTHEfLbmBA8U49gBFK0Owk+hDGAYCAzDFwcmRNrYuIJmnxC4hi+c180AQh2IRk8gbY/SMw/pyIMM3wXEfGO4vBLl5CojP/9R34Kf0bPKkmlIeJ/b9pUkPRdWSzVzndOddcZNRPCWTsWJBQv7rmwZqvuuHFQp3Y3OnUgxdatt7SKBDq6Ersvt4q9lkEQoKAVS3bErKC4pOjZ0uTefevCo/Tq2fPPn72ajoYv+Ptq98ClmaHEXH5fYlY9YcaKxayZE9TZxNmF4+WqNyoA3xR+tihWnZbWUbJ4V1loSbNVa9SLTtx0DL3lhc1IpBaHb6bbD4Q1HjsZZabiUZSg8bOqIY3wAYZ2pvtzBg/GoxH11782ovEuAwEZDQIkWfur7a+GxZwDYuIXxZxjYs7hqJgT6hIAHxXxcqdyQHdwqVW9kG0vcsmGIxLsaPbrbCZJdRpXSR4Rdfo1I0Mzm0eSM33kokOZ1SzHPHr5+KMxFcg7ZjMZ+O6KWTBOiGQ0WiE8eF04dXB+djK3opvsJSCZZjbnUE1md+bVf1o3XJVIDYkd/YOQeqWQOhVaKrVUe5+qeV6ksJRoVGWEGcYNoYbyD0wlu202XjDMdAqMTRfv27/HvPyGyy/cGYcQEEpCa3c3Kx3l4T5GCIxBZwmle/Jg9gXKJUb1TSeddNYk7bn2koMrQgQfT7hex42piXEVAVvPgPFVQvtyQgWZiAQjSktoX220oCO5s6wo3YCPs3QFBY+rRwWWAuRq1YVZ+A2xmkqjwjhPIGZ3pxCNkUqPZOoHD1IJ6LcMphNshmP6GpVxAqlu+xswsTE4/+lirNkScDuUvdWU76UyhX8xOAKKNT7yL5+Pxf71Pe94XQoEqiWB6otC0hUC1RwDyewqEQFcfnG3pdA1F0sx4jkZV0FqEtqKuw3740SNCMAc6cTb3rMQi7Pk6Y2xw3vWVPJxprHw6qGxAje6GjktDCnVgr0Wl/tN0xnxho6bJRgaYwd/O1MK4mYhVBqa3LwznlsZ4QJOb///TSkrKwWmoz26tGhaGEIuEU1UJekoOLyL28sUmGFHQpdnNl12BonZ06sWy/8HsSfTnFAtV1w5y3lhw6ah7nRI7+jaUqG2aaRSanAsH7QIi7fOvWrL2t6/RBBKn8KARjecZ2grBssnbpkfKHT2FuGfgAa2jK7uXgXhxLmrRgZdnf2dkPl+pV/GBsen+bmCEFkI6u5/3Us0fBMTImOhK18ze9LA950YhduyszzPXFzJiL6n7wmxqQhrj6t2yQh3RYxb/rTXAsdypuTOAxKKkk4G9V+0v1iJKtjD7lklqwwpqwSbaw73FiyEvVjsb7Sc3d1iR0QRX0uCmbnIubQWiwAswHPgtLNk8pyzBo33r4kGEEV4INn9H/95PsMw1IB0qpIOWsHkUENna0c7ECel9EqdA1JDacTOOBvsj+2u6AQQQCQ7tOH552/sQQhC6+Z7c4iy0tBYXz5Yax8/NL3OjsV77XXpdD4g9nvBBwyKVaj3rhjWwM04qzG5BA9O31NKiVutgjvsmFmz2WhSV3jJXj2iXr5s4uynEuSi2VNnR0JRRosGJpR3D0zmLIaB9M4NFgt1XQXQAUcSK00eCBRtsw7IRG9stV9qTjy/q9ZpBLi62sA8P5hd28PHwpH1A93zWiJEdhmR4c7t+xNJzNJXxc2m0AvkRkt4RgkoWbEOK6ghuQ4meJ3rtURExy+Ln89jcoi58RITvjyYwjQibKYRxojg9udfFlmRZA3ebGUxWypyrNn+Go9YNu3rj0Uqlk3+1F/JxpXTcAreLJhGSkgQCxBFSiAVv6sri8TWUTcSd7ls6bSuLIVNsMnQjfzhvV3RgPy0URAlmDUnNMRUQegC/2V2huLYzWfdORR4Gn1KrHFMzFHtyYSQFyPcFXleyw9qFpOx1YtixyqUQNXq2jYcUClB+fT6HeccqG+LImDBSo/JgNvro/uPrpwMdycaUYJ2YzVYmduxsWdqvVEq6IBYTzW1Y3us/epj1lEmj/wOvRt9UhlW1gjJJ0YDXEYLEQP84kK45LqGhKflnv9NlKW3izi22cJeMLSczNrVbPQWrs7t6ez/+AOwNlE1zuvvMEOQfOwb5dor8kyPFdT4D/dfs34yeL7OOjoSHECrBKL5alW/QCNUXR3j930MttoQWl2srjwwZj7wozNWbAGUMVH716+6LUXhRmR11PXN+tqoqkavvDTh7HWfePuEiCjdSlWsZqTPALkPLsDRRSutVLqko1tID0UEjMmLijPGa1UokteQhI6/GsX1Bo0bJBxu/6GA9CgbLIeY9hViPLRe4IjULO8x9uxB9yBELXL41Zrl+Ek+MorOQlGGAFEe0NGlxGqv/NamIFPNntPi1+UVrJyigMBd5mslpS68YrXcmWYyx225MVBms447XoiEQsKiLf2KZBS4Vp3CLeEh5eCV4gYLv/ldha1nbJwIvrVv8Iz8Ry7m62Zrs8nBRu1K2te3MhNHzRV88zyQBLoxqgJQY/fGyfkAzh/aONIMErQZ4FHM6/3l7nYWabHudHOlDvANBRwN+XuhIUMijlAZR6inFU7VJYRcTGXok8rgJNqtpiO9DH/wr/fcB5vt1fO1FBgmpphqI0MdvftP33NgYs0gZgQhYgBoEF2x0bj347AjakQ0zidXEaz2GfyaX15rdyGCASFK8D5C9VxMQQ563xHoWUpB7HMyoSrIR85nMiRi+ahFak0v1ZdISUwzpeijFmTveE34XTeq82vntmeuipIFcFC6/eg73xcCCUrbApY41DN02aWKAmJeBe1AdyuTAouOsGTMVWnW1doyerqcwxRYQdhRuVB0tm8ZtQGb/jaqGhSizDHl738vpoqdhA9R17aBmhob37QhmeKHXuVzm1cdugYDi7K8z1PRdVHVYTKdWRplAAD/KD8lO8QbuteTui6kHpA8KyGkhqNF+evCI6VNPd5HY+JKClqvuYK+Y1FQNIE/ujjtTTcdWzhPn+4SvnJUZgBISNMMu1TZYszTJl+ZWlVBU4eR8DhOgIi4PmnywXsuOSMImGITE0rCpbmV+/ectX8kjUolBggnd12ICUb0givufj/svWdIpRAuRIRChbrz1714nVqvARsaxhQIbv8SYTTq7+xj6D5HyzNu/cSN5E4e7dI851NYCuFR6K5F2E5hFqpXJRyQk0xpn+Oe/Yv2D33U0NtdPNh14n8+Uz58i39126233uYhJ6USaZryeyFVVNZflksV9mc+fmHmo+YQz118luQvHxTP6pL5O0gt8J4UEY9yjdgls9KKZdFFhKEyGa1K+UHbu23PpiDoOjbM/JpsH5ER5x5H5PYf27/jazf1MKo2x7ERbSUsChwoi/q4PipmbUkW6uWYzlyowPlyrfPQTkgP4lID8X0Qcw5x9Gh05QqmGl9BwyNOzOuT+of6+yQXhdcXNvaAESITY0EEzU3zmTQYOBHmCGlQHh465WQPBde4aVi9+dbXFtZXQMUQ1ICh5vyGdLp9B/XljQt5ZUUqojkWHk8cS85IRODzUyukSav41OMxdWEbkoeu1MMyi6SLk0qcXmz/ApA3B75CzDEr5uhavquSS1ZdbfOHFhUuEuEMM++jG8cKdniJBuK5jYEI1/auR3Onh9VwYNNa6mnhZkcdozd3ghoW/ZcIN3et1QEklj0VT2MYj4Tbv/t0HOPYp9pdYZUtV00QL2Nd+/0bQXwl7o3/7KEaOtL+s69iizZUE+vqXL6uaCJRjYSXG1HR6RYNIbGKyLJVrNrN4kHth1RdFF2CPD/VoYVUfuXFoKJlgiNsBdr5gAUI2MtMinBTO/wbZLUPLwqqIGXqyE/RtwWXjyl9In7k7SCRnDAsvflC7alLileSrsil7K5duKWZKRhAHYzd9c8holXbLxx6byoEf468fc1OUw/ZA72N3rXRCgE4Ac604M235xpzQ3+4dP+Kjz02P91/yp76XCZd6Fy5n5bMuoIc1F4hUEu4/bRkDCMPOd8JL/HOUO5HCyRAYvWmdxbufjB52k7f9uHU3Mr+ifETUt3ZmAMO0PxD93cSuOgi3wpK4d+remN0ZMRF4k3oO04NaF4yplJkEYl8RE7rEhCvZCVr6gVW9JFxgXG6KeWGQ9urVQFgNUsSiXhrASfYvtHK8HkcnV1DuaGaLEF4RXVAe6F0w5kDWWrOTIZCaCWOaFpnoMw1DavYxHFm2S6G7Vs+eHIyRvcRFuYINNAttRuQgPSlS3ZN3DRXWrfVwCcCYSEOGFQSop1oZMXBCzx0X+NUQyZk1tbMUhddnyb4GPMs9kuOrmUtAV3xeJakEQJzxu1UIfLh+D9VgufGo6RvdTpKscoiQyt0jrduPlVuRW1UbMXt3cNs47q5jXzIVdPwBaXKZcMqg/mDw3ldqCajAJiT17/ullu9zYH3nDHAAZ4BcCqbo0JPS+g5x1OMRh1vJLm1fMk3P61YDJ5FJ3h6u+JXo5x6VHMaubYHI+dCoE+frA50Hm/Ayokbx7bXIgvRNFg4rnHuFLmczp103cGe4q5NMfcrquoT88V9J0RIb5QGjVB07HQa3Fcft5Kce+E12J2dr9mQQfFr1l10GQsMGH7g1VbGNLGaHkURMeNjDg/pcKv9XfnFzKIsZC0uegIcKTK/TCHz0DUYeqDiODS1gPvtjdnMgtJnshvtfmwbKkLA0Ed9wpEEkS20f+VjG4YwAo0ZLJt1Y5NA9z1CN/qEPKWXxXzx103iBcKLg7btp6hevJfhB9TxqUujBJzAVFMpZQDQ1f59hXmBOKz+5FdkbOTExC9/rIYpkj48Zm+69sf6Vx7pvFDIkVYAfUrIUZTcw8XFndDpckmh/AIYkt5AwIEa9QHSaJKEiTcfrxN05hYwE3RoEEefR0byjSkDPe9E5zj99q8HzQR0fBvZ0i9a/PBtKKaqMYSu4JbEoENRsGQYG/zKNwhdQmhJQRZVynLViyOy6OULKJKqliehP5Kw/QH8fAzmd3HDYpNrDFMl1TkOgdUjzLTx+BizDPSvFq4VsG2SkU1Yne8h4s7xacPUSG2OJU4MUz1Byug+Pczb/9F+PCt2nrGg+mkI1Aise+kxw6KAaIyhg8SSfs5SH2h/raDHpiH/5oC8mYbUJ9q/HWGXwbbpgLhZrrckdPA+sd7jxHoHTdkriNXdAo3nEsQft7nYXEJCkBV13aC0uyEiO4suJMWysMcXLjyAUIjQYMTWQwXDCPC/O65XxwZnq6ajBJ9z1p8RRNauDaqbQ4moqSKkaT3hDZwaN4fysA1eexdmKMQBCP/E3okQ1gAZBqfs9bej9scJIqYBVD0YL6QjppgmOJm6jBNiGNjdPfRZsZqqWE23pzlxL1tPNGV9wV2HV2YLIbGT3Duk0XAdSAVPT/FExLioBACp+PnMTPNGE4eJeu2NoEVqgxGVY/SKVyCE7gVALGa+f4IiQLS/8C4W0hAAiTEWuOfhG663GCCVa/Ta6x57lGAedjorQsJzhYR1IWFFl/pFirKs4GuM3+jhvNuF3v28pHAm6CC8vX3YDqZCwCz88xeoGkKA4MMn7IJYhxrAxGIOP/j9H9xv0Ec+hNbhZCEtjQ9CKo7lGf7ttdcQEMoi0xCKnGGryMjvf+10ORlMie5Pp5DR8u3P80rFiH/pKr/gMOeRE0/TIhG1nMuV1UhEO223y7LQC4jKthR96Qn3v5KH4A+4PLhDzMHFHBm/zxWrL+dCnjOvReRlR4p8ws+4TjzVm6yLpNCni9yhNy+dwKLUmw6PIS5mOA8l4RG/A0wk0gUmPKisSS5izWWVGmJwgmzQ6hSfi1CzgeBsxvRiN2xHZ60H0Dm7CRDAjaqmA8xK6ZUjd6LSkZ8sdunso7p0KfLbz6yQTbrWZ35LU6vdJl065TbpkJIT1ehvwLdFHJ4WcXiyUY4tqZAxp0BaF7x/2dmEIdRoyIe79blWjTcnEWf+mQ2YSVd2ThtYxxpgRNGWPY/FQBLGgaSVYB3H909unRhYc15Q2ONFMdTNAg1oDFWmDKTu0DFFGBCUb9be/CaHJ6pWNJIfOHmmfzwYZ++xOhNdSBtX9ZEoFrI3j/weGU5O0CNkL3UG3Op/5Vi5i7iyrdKSgxgcZqabPEaHB50UYbDfiRna5I73tT+Vq0za4UBsIj+g96foshTlymtYz89/dTDXm9u+LV9JSc8lEHxaICgz1AHidkq91ljCsSDmxP4gdk8ySAlkMhd3Q1bp8yjB19f6KVY5ZjScq/UnizEDR7KRmD4/Y4KJQIXo/Ekv/PgHUbBilLG+smyyp2OhRG9Pdmp1UB0Woul4N6FqQUGOPH8RqBScE1iVYgxk5ZAt6dEk5H+P0vJKtdXwe55CVNg7ufbE4fr2/snjVuqIRcluP3MeHCKp7QPlbM9wR4iyYk+tNX7du1ZkuvlVB9XwMpbP0z3l3yU6won4bGpmSsiWPfJ7+AF8S+S6/UK2vu4sQg5ei2btgrQcI8FpXcHsWvbrkX71X1P0ttuS0Uz/9jlGTQQcwltPuv6VsIaWhzo7UvonfvQfIUg8VmYId88ErQbBAp4dmPLS1fdWB2PxCSJtp1O8XY8+5XS5RgzHuzj9VemWm17jxZGpXPFmX5RyacuzWOhEYctgnXeAykKkrygdjIr1zr5BA0G2qEcielenJCGDAzEVtB54rx1FA2PJAxqAhuloFTOkdubY1KTrNz7wAY8YffBDioKVyJEqisNXlXHn3I1+//EbZiYGwOnTCIFaXmBx+1wV3yO6thj3/PiCI3OPSoi3uNP/LBbEfXjJ+STxknb/hd1Nsz7OMWEMaVhPTGVW1U9f20BldvI+dX5jgF24Izp6+ZoNxSwLWLz3X05IJIfL8f6BVs/ubJyZK/iu7bQDBt6fZynApLuLcYR1rbzqxP5iwiS9AQSgDo9EEzNrOMoWNlTGTSPVWexSB5L9zZWVwVqz/Vy2S0tGUqaZUsE7TdAQby+h+5z6VJ/pRYNlYUmsTfx1M8NjljCemt6zdo46zmhokDgckSWSvXWXIy56AlkhuHlLa1p759vcvDWsvv3dNBqol+krblhetIiyW2UPSlGUL4ieXkoZlCcLskGnl5GlVtxyM0Upm9vOreGjS0X3Ih1xwAgTa79FEBghVU0H5heE8ZUH3Q8cGFKpYG2dmqnrJhVJBYb2H/1axuV+Mo2OPHikpvxYyBRz+s1DeQOkTEuaGn6fEcfdxHWRUUtQfUrtOvkzXlY4Q/SKvnTFcLEcGFUpBQYQe9X6qWAUMLoXSaY/Jf76Fy+9ZFvq2JN/kHgyzBA7zuq66XfazXnO8QyiCoj4o8AvZUXq6OqL8N+LXJtzobDuRaFQdA+UMbakZjUtcCt1O9s7vtoM8JUtpuN3bdmtorCqJY2uVBCtmmIJJlHtLsTUhWzgXz84NqVihGmAk7fDBVcZmEUoGLBrJ42zifElNbum2O+n/3/qf82jtu/Y9T+h13hY2PecrGwxn+Uklim3XKPvhtjfHhPq7oH2ufED+5N4/Nx1a9mCfgOA1j+SsfHfGKHxvgEnGN60fV7d2VrF3/U2T9x3vZvmCqmsYwTHHoC3hg3ZaE4uWCx8xeGYqYCLkl+6bXo85f/ffhu+PB3B0dXDTTtH/pYBw72eAIlOo8+Mda78WzasICUvqt5MRCRDyTl9UOpyCKn0rrpV6kNYYrwQmJoQ/fX5F0UGtSfejHS7lJ4O6WbYFt2+sGm8cOU1KnT84IXfdlcG7OBodn68FbLtUEtx2MoUMuBrSt7xEeWuDtVlK0dvnRP8vFiDC9xOeP65DGuOqy7u0sAgtZk2vpHE1lf63pKZLPWyTPdoKlE2Bvbs8b3U8QIOlmVlgtCKsVc+maXwyo7f0VRPadNxmxSHLUzBX4T2lZW6kGqg0kGQx2B8orBYjF48o+JexTzG12oMoWLpbmSQNaN6RB3tp4tMIcqQ2pwd6t33s52WNTxUDoQ67Re+HoFhzfSYePvL7a/4O7T3HD4QG4Fp8+/nKr39X4iGA561wV4hY7fQo3x4uR6J/XBlle5qmd40abzXIXU8tqoMJma6pjc3UvCt0deUzoyeG6TA9zHAK3vp/gsWbdPhK3fAtxyO0Cc1uOXUeQQGS0s8iyTPK0jKnVt+3ij+rZky3klH15R7d43P9KvIYXvBXKs/m+7iG1sbLo33nbLFPbzMSNfM9oGMCREUmq+Lf2FamLusz0jZoXhaJ4HgztaNcdqrUnlMmRW7hayWkPUg2uTIOurER0HQZYOmsaRSsozDCLFk6cwJCEEkJXY2d3XKQtFkFJiF+nrkVo6uUCMRdYXw8maonNWJqmkYa3jjibURTuAyO5mI1uuea6tWXRJz7t91hk2c5IBKOUYRQaUVjdzfXSLkrAt++hI84+TGYenvZEFXapSEdamsnr1NI4H0cu8Kb0nZoDbPml6rEynm0KDjr4jaZ/N6GMktlrrnaeFANBnSJlDfsPXhd3me/p8/qpkoOKbfcavPWNuXSx2Ue54Sb98U8slqWIE4GaE/vfzjN0GqHrNaMIvKEE6ZjJQqxDYl7zL68lRP0N5wOMDQZC5nJMjUNEkYAbO7lIS7eQBk4Wdubt264s3nmjZFVGdIe/bMPU5FyO7pveyKXV4lCH1eyDMu5FH9StDSQpBE71iFoHgi5meYYglu2QQ9HIPzsW6zSRkZWUeGAM52EDXBevuYrePzLZwfyKtr1SliVEcDZL5cQXoHKcEzepi1r2SWU74xzzx/pR4Yuvo05lavGNxCYyqY6fbvCz/T0mm1/QK8+jZiU3Dlhx8K+VfJHNWVXyqg7ea9TEZwp34dxG6Xv+AVFyp+/UeCnciihLMAeCBCXt/Tsx1pAT1QHla1UGkAIU0P8LLKdcGlQwDbNsOGeYSCeCSXDiCjN7UeuN6CZwyT8gdhtLoPBwMMY2vlLMaBsG1MGRwDYLH/5Ny9ACedRjALMTAg1MzvxYQ52cKRmqMVMpbp/iqk3S+yJP90kSe0X++xbDnqwg9PxDbtBGvzSDi1juohni1XbM3QTj01gvv6qG2E+0sApBnAAvOywDxKft7GtTmDhE6lGmV21ixmvvJ1NaABIB7puOTMCgOz8cEK86poOfH2kJCyLCuWmpTSE25J7xjZ7okXX24pGJj/GEiwSBrDRsq5yeA/PhFIWyn60Y/QFEWhDXAVYrpwlIAEkkmbo/a3AMVS3RwhtWRrKHamnP0k5Ql4GnY7p56Jr6kLxxCcvXWOYjkq6aEFn2YwXQ0Gc6VMMEGAyRPkhLDxwY54IuMOwW6VNTdjNWP16QwQUa3BNaoWt/o0VUawk9EOeFbwXNvJKSsp0zv/VROTi2W6s7pMN7Fgyf4pwKI86kWro3ECRni0N8w1ghB7zgiRkWEWYQgTlUd6R8KmoLSBEIRpIsYBUaaRERIaiMeZ405icaZyioBaQp4HUQo+6nDDTiFP2vblcVPKRdzjXv4lhh+J7sYBUk33bFML9VzPA535XDbTVUTXjUEwNjAVEu+DRnEkGEp0hATOX0NJeAbd556KBomzXC1nfu/OCYkwBrNrVATvxFDICEzNbUgScwgQdAsAUB69CmG5a7cfWQVTR37sPC0k/Z2PkoeRPBJWvv1UigtFzHJcD7F6jeB72GudNh5eH0kUCWDis2J45r+TFcNHj0peFHCzF/GskpQK5LOOmZo44T+xmMAceFkyYmqMUdaZK+oyVYGnjso9utIGkKiljsvU5H9zte4c+C08jF6v5BaeLZiLv3V+YVUwm2pzDMVFww6i7gwaZWcDajQROhfzAMJc03Vd4wihufUQ4OqNAIBuYgYDkKfH0Qh8E71h8dQ9OKcGiwunBuFLmBD82P5dyDkp+Dh6A8EnYAyICCfEwDm5j3rga163nSqOpIuK66iGb78Cc/hg/7bK/KbStko8oEE4tnE+FgbNRPeV5hKGkTiuommUICL+UE2TT1+Hdio/ldmy3Fv59FiWW/HFRNmN959HHDFEAAFm0QtjDCEWpg2RAks2QQnjGo1qYcZDLG7TEEPSF/wGpeAn/3229/v/Pts7CXWDyPz+V/s4dN/LfdzQ6iU+7gBKwlOOxVfEurpTYYYcXtJYaIWwEBIytI4eOhAEJjwBq/QiVOzG9P6XfUbd5nWIYFAJW30cIECYvXxg8fzF3UpW5nKebS/GlKO7hLIHDje4iUDUwkMdO/rKC+dg3rJ49ihoAGr/sv3LxYxsQlHwbuc8zJD054Ww3EPws0UlIZveBdbHyiL5FwRXaTQTQcStWrUh3TxcT9eNxY2QARBHUdPobc6u27F5x7rZZq9hRhEkQiezTSfTe+6GseNTTi+OR+jhNwVsCiACMLoIdbwq+LHnTAA49Oi0EEWeScBJ0evlwicMi/pbKRVSqVN/C3flI+JvyamlLWbicdysHpXYCp2eggvg4vZd7TvhwGWnb71ADe+q5yKJUwh5YeEQ1xXuFeyEq9q3tt948qteedudBgxlBsYuvO02ON1hqn39/lmK/j63h9Er9kaeW5GMNezEg9YYjtf8s5WLDUO3X+gI5Z+vBG6YhWwhDkkdP6ixSH8Dd+hkcJvO6msNFKTGSHeQaQ9iHd0rAeKH7zKCnCJ5+XZI7NLGHjocp0HEBI5BA+3ntjxZLuT5CPqY0JWmslMgtqE1kA8rWPrScsElfB7TX2wzc7GndDE2ezK692Fhvi8/z9dVKlfcc1HoMvsLqz4fD4RNDRBItctAevH8WzuJv/ZVH+CvfqDKKeXA7PgTxfzX41pg4Yxf+7vt7zkHdoV+9spWoMrKZS8ydZdYlMFNznWxW8IPFDNtsBRt/xghYPIO7/xuqczEXIsn1+5W8kujobPeyNKjQ13LbQaV6bEPqPlGw9qfaz/hawBYEGv/vP2Cbz1uX+873m83iiF5MqH7KOAcei1ydm8Tlu1BseSmNbAajksaYbYAz7+1P5/G6MrLgzecgjhISff4ILOI2X7dI6q19jr3AGSXIw7PaIy++lYUvnUf1rozy44b4s9rISO9Q8g7JUwsiZ51soNBDou/InZVwe33emzEDQ/HqIIJ8ys3fAvcHTIqoycGk+HjilET4WiPPdh99kTFCJ2ZAsjayUiRgA8qAIC2Aus1DCmk8mCsUakbKLS+UBOpd188Nl1pxII8aMesSPFg8DMPejg/d/GZwDR8VQAqdtDxER7qY8o6ZbvQ+E0bJ8a7QGr8ksRbZNsLQLOXNxHK5YXQVxWLFxuDwgs/UBGvlrgrIilIHU5Co8MSegyEoy9l0Njk1YgTwHJRoyNiUQTpYhxWinEdEWAcSLS3GIsPq9AObOQDQwzQvY4ulcsAyY+F7dNnVgUBymVvfZUeMfxxNbNnSg739ETbHTDAw6snp4slE8FndsZQ+yuB4SFtratxOCXWvlXs4JRzitVLLxZey1Yq3rxXo+nusv8SHry1rGXnv9BnE8VMSsUMgGXerpfZwkpDn8sQMYjVFJih0TGzqHMAGhyIcDFqSZyiDAGbCFEAbg4TdGmos0uDYGLDdOH9fYRXKt6Ke3pR8TO5lesTQdCLsRBn0RX5nfOZTbngj37k1Qz+/Uc4c1pyfmd+1gDnDJDY8x+LuLBNrLscdJmit1ly+e5yF37GU1s4F9S15Fd0R/+Gzqc/br3vjhN3anp/ORBM0Wuuikk5YkLgnshWq14KrsR5GHjd9vpYzl7RimyN9JAYcy1S3BxRUdzI1TnagQ5u2tld7Dt159BIfxeTi83l5X1Qnh2xd221Yl8dyZ6/ZnKyb/36rmU/tAuyaH06v/ZAU+86ft7pNiu/RCWYW+w2R/5/us2QWd5udp9B5sUzgjKP9p+R90725eUDSJCmUvTwnw7/2XsA4oWifFdA2QYPO7+mjvvcNlZpLOsMOL9XYXwXE+Fu4ecomGACD7NDrdbCT1AIPoSI8r/p99lIuU3wfFXK6dR6OxNi7K/KWjv28OuOWsJ5/02LOnrk/+X/V47/DyaL/+QAAQAAAHsAdAAFAAAAAAACAAAAGACNAAAAIA4MAAAAAAAAABIAEgASABIAVQCjAUYBxwJDAt0DCAM4A2gD2AQOBDkEWwR8BKME9wUxBYwF4gY3BowG5gcqB44H8ggpCGoInAj5CWAJtQoKClQKkArrCzILfQvIC+4MKQyBDLMNHw10DboN+Q5pDsgPLw93D7sP+RBxENgRKRF7Ea0R3hIMEi0SixLOExYTZBOqE/4UghTQFRoVchXIFe4WWxatFuIXLRd/F7wYEhhmGLYY/hleGcEaFBpTGo4ajhrWGwcbLhtTG3kbtRvjHBYcOBxnHJQcxR0AHUEddh2+Hg8eVx7aHxUfbR/QIE4gyiFDIWUhhCGtIdgiICJuAAEAAAABAACoidghXw889QAPA+gAAAAAAAAAAAAAAAAAAAAA/7n/BgRLAu4AAAAIAAIAAAAAAAB42kyQJVSFQRCF7+zi7u7uDgl3d4eEu/dApfI6iUQ/50/0iCbokKHg3EFf+M7dHZ/BM8oAQHoAPFM3sWGKkGldqDFZKPXwRI2tQ7GUoV9O0EfU3mTHUaM2xgeo0qb2fNJNCkgRSSaZ+nZH4xWtYbzJrYI8Mm1OUWPjqPtkltCnf+nCiPFm/ittLZi254R2UsucP2VOKXNyNI4a7xGMGGomiTFHnHkMfSSGcywTmEDOWIoquUcmNVM+kCT9SKQvlP9KAedN+nBMOOoEqLKzqFQ7/Sma95Wzx/xj5h0igv8KeUScuUMMVUmUG70DJvEMUKfMMhzqNXseaE2t/zPP4s/99D7tnPlB88jG184uVNtx1HKPXPqKfvavUZvuT62hlupeHt0Aa3wuEBw3egxdDKoAUn5O33jaY2BkYGB695+NIYrF5//O/5dZvIEiqKAKAKNnBvUAeNpjYGLczbSHgZWBgakLSDMw9EBoxgcMhoxMDEDAwQABDQwM7wUY3rxlgIKANNcUBgcGBQVZZoX/FgxRTO8YfikwMPTHMQN1n2LaBlSiwMAIACraEWUAAHjaZE9DXsZBGH6+eTtBdrPNtcm4R65bxBPUJtu2uc62fYg0/57m923SawOAsiyWva10ubUHXq1OgbZWIFKRjmzkowQV6MQgJjGLRVe8SlTralNdqVuplUZpkXbplB7plyHtrQN0CAlA295M5KLwX++a7b1QN1Lzo7dPBrWX9tfBJJ/5xEc+8J43XOEsxzjMAcZ+RjitTotT5VSac3NijsyB2Te7ZsdsPxQ95D/kuj/4GpkAAGc7UaR42qxW13rbTA4dqrlXlRSmgJnI6zWHitPdC8e0Nt31+8itpCXnfvcqz8B9GVDpd/toC5CSe/mbVTCDMsA5wNBCoQDFvu8FAG9+iNHtN1ja/auPz0ycDsKPEO/7mKtHP/tFv2i15IFpWSgCFFpudIQhdOg6aCiE8KODOSUtaTmYV9D+nK9UhauxrCEM3SRX0W5Sz2vM6b1PgMOSFjpqY2HrUyeXy9ExaB3esVjbGa0a7h2gpXQ7ZaNMNoliyz8MOjWDPR0sKMzbWNU+58Oa1l0HE9qA/9vCwtRfO9PGiPZaHpY838J8Pdj5m0/OZuwDbm2Rao28cY5Xc0EASeZNFU2TqrsDnGX7LHnSqT4QG3EEOLjlh6QBtg3y6gWvXoRmGASBSWzhsG6h2PFRvGFni/bmG7zHq3tvoh/josUeP4riIAjaUYCGHQRdBAG0CY90AweLCqiCQj0iTH16y8c+6WK/dKkDFBI6WErpJiagnfQduMBGhmtm5fM35kKvhcUZi4waYogpVzJbrBND2364ZUY7gS8DKwBc2/XJZhIvvVIc7FM4oO2OyGVt7qetdCWgkG6EuYOPaLSoEOybcXBAAVc7SrAK4gD4BFwLA3YJN9JqB1VnYFRoz52xjgZnSJ0epOHsFMOWpCfoIXixjKDdJVuY3BAEE9eOCKPWymgjSzFySTg+pChBURcFjaoU0OeRYZH3KIsprWCGhnhMJbmch+1ow8FxRa4AOKZf8wG0oA7hOO92aDee9mtC0SolBYiDFmXGCR1CHAJOEG0OTqo3e35SaG8ED3HkUH5ysKzebPtvdjOlaZG+nOorKhGTet9PJic1GpGLE3bAkHJ1Nxnjr3H6QqMmgZBs+QnTR3jdOAZOOz5jSQrrrc3MTiH0STUBIWlS/U3Snm7WJS1MhChL4kujWOkYhpF2q6pEInLeno+T0gUPR6WLI5JGzoXw+82bhpgQZeG6LjNQIZsRJZV+G/9rmw+IrhphrNoO3lCJwfIm8c3ylkryLG+rpMDSVEmR5R2VlFjeVUkfy3sq6Wd5XyUDLG0le/xjKSSmJTTQ+AffFgfVCWPtyPjvzOicME4dGf+TGUEJHLMvxUmgvmZQGedJfBbhA6rrAeFjKQkfy4eEj2Wd8LGcInws/0T4WE4TPpZ/JnwsZwgfy4aCpXRgHylKezMELWmruaUkscEzO6vwkY2P6D4+VgBNuKSbMpqT/GC/0sNk9E96LU5GSx5PHD6eSYpG1fNngxTl04yeK32eKXieVv5cia6Pdz4nGjbVcrFe1L4I/ttYkXPJM6PKWF8QH9C8pH4UOppz8KVq3FhycO46VzR0i9znqUWiVocGNFFIvi2v4rgpmzIC/4D4QEO6nTnDqFaI4QVFZeENcivU6Z26JcPCxSFtH8YNCbAU05mLp92gkZ2HJen2vAFDfqasbfufC1AE83Nhqng7cF0JOKghlmmE3AyxpM9e1xCInuy/UkGHbYlFHbXJXNCRSeuQn3RnYyIJ5D0lN6nHkjJsEk4SaZYQLkoiOYskS0gSi/WIPmed6EQuos5F5Om7+yQ9zkWDsNTjAkhbnOpyIZeIpuWeiTCn9k3Z5KTcxZWeLQWTMY1iz2/AkrRM0vSUdOhRK7BUp92rk79dsiZeNO3dbkke+dUTleheu0L+gXMWcq/Fa0pCg1ncxBva3zJ3Ah+WgkYya1To3q6fsu6YW6es7oWxV0VohQv2VQk3FC7aMdXGM0agLnWlhjZwliI8hpzO51TGfITD0s2g84BKWIKGnOuev6mSwULdpZDfMtLNP2qKGVNE6JYkPapOzIsVdOtsqkQs2D1W/kK7RduSXV7k3GkKXhEF1ezadwTf8HIDX9Atf32J/g0dZ1TK+JLWbxXOk3jHLHpEN2zGMuqx9V7xQOP/e66LtNihIIDCt56gS2DKjLAC3N21cWvctXH3xbRtkDpVIbP/5jtxH1AORYUQOhXDCgEjUUECGFUIGKPpUozTgAkaMEkDpqJiCKFNNa0SUyoqik+bUYlplk7QHJ1pns60QGdaZJ0diiWFgGXWCVYUAlZpuhVrNCBNA9ZpwAbrC+2qTZWYtlifaVslph06Qbt0pj060z6d6UCPcX1yAg9tlGtWHjlblMccdBu16ugkykvcnEJvzqyRuDnXmRuSpV4w8jky0Oe4hJ5f6XLi4Bp6cAM9uNW2MVneHSPP76HnD9DzR50zDp6gB8/Qgxdtm5LlvTLy/A16/g49/9A54+ATevAFPfiOCpX2ZZsrqSr8+/O3Q3+a9DGYaq3JlaVzf6uHM78v69ofY0wBR3jaYvDewXACUKM0HDgQhtE31hqXxWmZNBH9BcQ4zxSQDmKjljF7C0Yfn5p9g6KOA50KRIhQhwaEqvUPGsUYOe/iPUvLKf7hX+kES9VIAItrSLkypRqhfO2YBWAAYnxT60ZfL6/7MdeI8R9zX0QqgAzejb9YCsUxKLa8Vtu5EZfzKT6y9F3Rp84LnT0YNIjFaTwIuQChwiuQeNpjwA0kIJBpMwMDkygQn/n/CkQzTAfCKIYopm1AsW2MpxgY/tuB5Q8C5Q8y3vr/7b8xiA8ArVMQ9AAAeNpiYGDgZChiYGZgZOEEshcBMYTNyCAH5EHYTAwcDAcgbCDpwXACymZh0GAUgLJZGZwYLaBsNiRxXqY8xioom4/BhPkFoFW6WHobCII4/jv7KfYWNoSZmTm5pTbymqksQ76nD8zBFWYx9Px71CPXzC3sWRrqG1hJ9qsckBzV1nbGkbjqaEuuK+rQziTPVIaKmUpxWHInrpsavyR3HN+RT0vuGchBvaKSdRVTe+7Jnitee+NZKGrPlOD2XDU30XXT3Mwqzkt9JVya0fNZ6ReUIzvO7+pexrPaMHyTjqaOc5KVlZ5sbWVuYGgmvt0mVKc1HXPgD5M//PvZB+e8baxNU9nKwEj2TlPk46ID/3FGXzqOhUr+QvO582ENW8PoK3mqqCPPjaIr7aaZPJRNlV9OsKmh4XnkXX9BeGauZ2UrWwYpFCaGKiU44WptphvEFJ2VqL7jvuSRhWL2Bfn+F4TD0g/+iuYXnX3pm2Qb2dBE9tYknu2ykcPxiidxvXJWI+a0snBWS0utigwWVmrNcJ/s0m555Kb7f1PzAQ9atQAAAAB42mzBY0IkYAAA0PeNPWvbxuxm27brHP2c33WXfJPMk9QFek8EuC4ruc0qgoiomLiEpJS0jKycvIKiO+66574HHnrksSeeeua5F1565Y133vvgo08+++Krb7774adffvvjr5J//qtQqUq1GrXq1GvQqFmLVu06dOrSrUevPv0GDBoybMSoMeMmTJoybcasOfMWrISIdWVrzh2EqENXIebEqTNHLkI8JEIypEI6ZEI25EI+FELRpi279mzbSd6sNC/TwMDRAEwbGZtDaGdLVvfE3NxEMM/Y0oQ1JCO1JJHNJzE3KSWRKSKTKSCTNTgzHaggtKA4Myc/jzkgI5M5oDgTosHREgC22zqlAAAAAAEAAf//AA8=) format("woff"),url(data:font/ttf;base64,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ACAAMQAuADEAOwAgAHQAdABmAGEAdQB0AG8AaABpAG4AdAAgACgAdgAxAC4AOAAuADMAKQBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOQAtADIAMAAxADAALAAgAEQAZQBzAGkAZwBuACAAUwBjAGkAZQBuAGMAZQAsACAASQBuAGMALgAgACgAPAB3AHcAdwAuAG0AYQB0AGgAagBhAHgALgBvAHIAZwA+ACkACgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEANAAtADIAMAAxADgAIABLAGgAYQBuACAAQQBjAGEAZABlAG0AeQAgACgAPAB3AHcAdwAuAGsAaABhAG4AYQBjAGEAZABlAG0AeQAuAG8AcgBnAD4AKQAsAAoAdwBpAHQAaAAgAFIAZQBzAGUAcgB2AGUAZAAgAEYAbwBuAHQAIABOAGEAbQBlACAASwBhAFQAZQBYAF8AUwBhAG4AcwBTAGUAcgBpAGYALgAKAAoAVABoAGkAcwAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABpAHMAIABsAGkAYwBlAG4AcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAFMASQBMACAATwBwAGUAbgAgAEYAbwBuAHQAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMQAuADEALgAKAFQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAYQB2AGEAaQBsAGEAYgBsAGUAIAB3AGkAdABoACAAYQAgAEYAQQBRACAAYQB0ADoACgBoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAAAAAgAAAAAAAP+DADIAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AIAAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4AQABBAEIARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAGEBAgCOAIMAjQDeANcBAwDYAOEBBADbANwA3QDZAN8BBQEGAQcBCAEJAQoBCwEMAQ0BDgEPALIAswC2ALcAtAC1B3VuaTAwQTAHdW5pMDIzNwd1bmkwMkM5BUdhbW1hB3VuaTAzOTQFVGhldGEGTGFtYmRhAlhpAlBpBVNpZ21hB1Vwc2lsb24DUGhpA1BzaQd1bmkwM0E5AAABAAH//wAP) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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Ki2wTCywOSotsE0ssAAWRSMgLiBGiiNhOLEwARQrLbBOLLAKI0KwTSstsE8ssgAARistsFAssgABRistsFEssgEARistsFIssgEBRistsFMssgAARystsFQssgABRystsFUssgEARystsFYssgEBRystsFcsswAAAEMrLbBYLLMAAQBDKy2wWSyzAQAAQystsFosswEBAEMrLbBbLLMAAAFDKy2wXCyzAAEBQystsF0sswEAAUMrLbBeLLMBAQFDKy2wXyyyAABFKy2wYCyyAAFFKy2wYSyyAQBFKy2wYiyyAQFFKy2wYyyyAABIKy2wZCyyAAFIKy2wZSyyAQBIKy2wZiyyAQFIKy2wZyyzAAAARCstsGgsswABAEQrLbBpLLMBAABEKy2waiyzAQEARCstsGssswAAAUQrLbBsLLMAAQFEKy2wbSyzAQABRCstsG4sswEBAUQrLbBvLLEAPCsusTABFCstsHAssQA8K7BAKy2wcSyxADwrsEErLbByLLAAFrEAPCuwQistsHMssQE8K7BAKy2wdCyxATwrsEErLbB1LLAAFrEBPCuwQistsHYssQA9Ky6xMAEUKy2wdyyxAD0rsEArLbB4LLEAPSuwQSstsHkssQA9K7BCKy2weiyxAT0rsEArLbB7LLEBPSuwQSstsHwssQE9K7BCKy2wfSyxAD4rLrEwARQrLbB+LLEAPiuwQCstsH8ssQA+K7BBKy2wgCyxAD4rsEIrLbCBLLEBPiuwQCstsIIssQE+K7BBKy2wgyyxAT4rsEIrLbCELLEAPysusTABFCstsIUssQA/K7BAKy2whiyxAD8rsEErLbCHLLEAPyuwQistsIgssQE/K7BAKy2wiSyxAT8rsEErLbCKLLEBPyuwQistsIsssgsAA0VQWLAGG7IEAgNFWCMhGyFZWUIrsAhlsAMkUHixBQEVRVgwWS0AS7gAyFJYsQEBjlmwAbkIAAgAY3CxAAdCsygAAgAqsQAHQrUbCA8EAgoqsQAHQrUlBhUCAgoqsQAJQrsHAAQAAAIACyqxAAtCuwBAAEAAAgALKrkAAwAARLEkAYhRWLBAiFi5AAMAZESxKAGIUVi4CACIWLkAAwAARFkbsScBiFFYugiAAAEEQIhjVFi5AAMAAERZWVlZWbUdCBEEAg4quAH/hbAEjbECAESzBWQGAEREAAAAAAAA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) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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ADAAMAA5AC0AMgAwADEAMAAgAEQAZQBzAGkAZwBuACAAUwBjAGkAZQBuAGMAZQAsACAASQBuAGMALgAKAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABjACkAIAAyADAAMQA0AC0AMgAwADEAOAAgAEsAaABhAG4AIABBAGMAYQBkAGUAbQB5AEsAYQBUAGUAWABfAFMAYQBuAHMAUwBlAHIAaQBmAFIAZQBnAHUAbABhAHIARgBvAG4AdABGAG8AcgBnAGUAIAAyAC4AMAAgADoAIABLAGEAVABlAFgAXwBTAGEAbgBzAFMAZQByAGkAZgAtAFIAZQBnAHUAbABhAHIASwBhAFQAZQBYAF8AUwBhAG4AcwBTAGUAcgBpAGYALQBSAGUAZwB1AGwAYQByAFYAZQByAHMAaQBvAG4AIAAxAC4AMQA7ACAAdAB0AGYAYQB1AHQAbwBoAGkAbgB0ACAAKAB2ADEALgA4AC4AMwApAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABjACkAIAAyADAAMAA5AC0AMgAwADEAMAAsACAARABlAHMAaQBnAG4AIABTAGMAaQBlAG4AYwBlACwAIABJAG4AYwAuACAAKAA8AHcAdwB3AC4AbQBhAHQAaABqAGEAeAAuAG8AcgBnAD4AKQAKAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABjACkAIAAyADAAMQA0AC0AMgAwADEAOAAgAEsAaABhAG4AIABBAGMAYQBkAGUAbQB5ACAAKAA8AHcAdwB3AC4AawBoAGEAbgBhAGMAYQBkAGUAbQB5AC4AbwByAGcAPgApACwACgB3AGkAdABoACAAUgBlAHMAZQByAHYAZQBkACAARgBvAG4AdAAgAE4AYQBtAGUAIABLAGEAVABlAFgAXwBTAGEAbgBzAFMAZQByAGkAZgAuAAoACgBUAGgAaQBzACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAgAGkAcwAgAGwAaQBjAGUAbgBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAUwBJAEwAIABPAHAAZQBuACAARgBvAG4AdAAgAEwAaQBjAGUAbgBzAGUALAAgAFYAZQByAHMAaQBvAG4AIAAxAC4AMQAuAAoAVABoAGkAcwAgAGwAaQBjAGUAbgBzAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAHcAaQB0AGgAIABhACAARgBBAFEAIABhAHQAOgAKAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATABoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAAgAAAAAAAP+DADIAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AIAAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4AQABBAEIARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAGEBAgCOAIMA3gDXAQMA2ADhAQQBBQEGANsA3ADdANkA3wEHAQgBCQEKAQsBDAENAQ4BDwEQAREAsgCzALYAtwC0ALUHdW5pMDBBMAd1bmkwMjM3B3VuaTAyQzkHdW5pMDJDQQd1bmkwMkNCBUdhbW1hB3VuaTAzOTQFVGhldGEGTGFtYmRhAlhpAlBpBVNpZ21hB1Vwc2lsb24DUGhpA1BzaQd1bmkwM0E5AAAAAAEAAf//AA8=) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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WVlZsxAEAQ4quAH/hbAEjbECAESzBWQGAEREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4ALgA7ABoAJAAkAtb/8AIVAAAC1v/vAhUAAAAAAAkAcgADAAEECQAAAKIAAAADAAEECQABABgAogADAAEECQACAA4AugADAAEECQADAEgAyAADAAEECQAEACgBEAADAAEECQAFAEIBOAADAAEECQAGACgBEAADAAEECQANAmgBegADAAEECQAOADQD4gBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOQAtADIAMAAxADAAIABEAGUAcwBpAGcAbgAgAFMAYwBpAGUAbgBjAGUALAAgAEkAbgBjAC4ACgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEANAAtADIAMAAxADgAIABLAGgAYQBuACAAQQBjAGEAZABlAG0AeQBLAGEAVABlAFgAXwBTAGMAcgBpAHAAdABSAGUAZwB1AGwAYQByAEYAbwBuAHQARgBvAHIAZwBlACAAMgAuADAAIAA6ACAASwBhAFQAZQBYAF8AUwBjAHIAaQBwAHQALQBSAGUAZwB1AGwAYQByAEsAYQBUAGUAWABfAFMAYwByAGkAcAB0AC0AUgBlAGcAdQBsAGEAcgBWAGUAcgBzAGkAbwBuACAAMQAuADEAOwAgAHQAdABmAGEAdQB0AG8AaABpAG4AdAAgACgAdgAxAC4AOAAuADMAKQBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOQAtADIAMAAxADAALAAgAEQAZQBzAGkAZwBuACAAUwBjAGkAZQBuAGMAZQAsACAASQBuAGMALgAgACgAPAB3AHcAdwAuAG0AYQB0AGgAagBhAHgALgBvAHIAZwA+ACkACgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEANAAtADIAMAAxADgAIABLAGgAYQBuACAAQQBjAGEAZABlAG0AeQAgACgAPAB3AHcAdwAuAGsAaABhAG4AYQBjAGEAZABlAG0AeQAuAG8AcgBnAD4AKQAsAAoAdwBpAHQAaAAgAFIAZQBzAGUAcgB2AGUAZAAgAEYAbwBuAHQAIABOAGEAbQBlACAASwBhAFQAZQBYAF8AUwBjAHIAaQBwAHQALgAKAAoAVABoAGkAcwAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABpAHMAIABsAGkAYwBlAG4AcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAFMASQBMACAATwBwAGUAbgAgAEYAbwBuAHQAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMQAuADEALgAKAFQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAYQB2AGEAaQBsAGEAYgBsAGUAIAB3AGkAdABoACAAYQAgAEYAQQBRACAAYQB0ADoACgBoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAAIAAAAAAAD/gwAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAEAAgADACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQECB3VuaTAwQTAAAQAB//8ADw==) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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LbBWLLIBAUcrLbBXLLMAAABDKy2wWCyzAAEAQystsFksswEAAEMrLbBaLLMBAQBDKy2wWyyzAAABQystsFwsswABAUMrLbBdLLMBAAFDKy2wXiyzAQEBQystsF8ssgAARSstsGAssgABRSstsGEssgEARSstsGIssgEBRSstsGMssgAASCstsGQssgABSCstsGUssgEASCstsGYssgEBSCstsGcsswAAAEQrLbBoLLMAAQBEKy2waSyzAQAARCstsGosswEBAEQrLbBrLLMAAAFEKy2wbCyzAAEBRCstsG0sswEAAUQrLbBuLLMBAQFEKy2wbyyxADwrLrEwARQrLbBwLLEAPCuwQCstsHEssQA8K7BBKy2wciywABaxADwrsEIrLbBzLLEBPCuwQCstsHQssQE8K7BBKy2wdSywABaxATwrsEIrLbB2LLEAPSsusTABFCstsHcssQA9K7BAKy2weCyxAD0rsEErLbB5LLEAPSuwQistsHossQE9K7BAKy2weyyxAT0rsEErLbB8LLEBPSuwQistsH0ssQA+Ky6xMAEUKy2wfiyxAD4rsEArLbB/LLEAPiuwQSstsIAssQA+K7BCKy2wgSyxAT4rsEArLbCCLLEBPiuwQSstsIMssQE+K7BCKy2whCyxAD8rLrEwARQrLbCFLLEAPyuwQCstsIYssQA/K7BBKy2whyyxAD8rsEIrLbCILLEBPyuwQCstsIkssQE/K7BBKy2wiiyxAT8rsEIrLbCLLLILAANFUFiwBhuyBAIDRVgjIRshWVlCK7AIZbADJFB4sQUBFUVYMFktAEu4AMhSWLEBAY5ZsAG5CAAIAGNwsQAHQrEAACqxAAdCsQAKKrEAB0KxAAoqsQAHQrkAAAALKrEAB0K5AAAACyq5AAMAAESxJAGIUViwQIhYuQADAGREsSgBiFFYuAgAiFi5AAMAAERZG7EnAYhRWLoIgAABBECIY1RYuQADAABEWVlZWVmxAA4quAH/hbAEjbECAESzBWQGAEREAAAAAAAAAAAAAAAAAAAAAAAAAAkAcgADAAEECQAAAKIAAAADAAEECQABABYAogADAAEECQACAA4AuAADAAEECQADAEYAxgADAAEECQAEACYBDAADAAEECQAFAEIBMgADAAEECQAGACYBDAADAAEECQANAmYBdAADAAEECQAOADQD2gBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOQAtADIAMAAxADAAIABEAGUAcwBpAGcAbgAgAFMAYwBpAGUAbgBjAGUALAAgAEkAbgBjAC4ACgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEANAAtADIAMAAxADgAIABLAGgAYQBuACAAQQBjAGEAZABlAG0AeQBLAGEAVABlAFgAXwBTAGkAegBlADEAUgBlAGcAdQBsAGEAcgBGAG8AbgB0AEYAbwByAGcAZQAgADIALgAwACAAOgAgAEsAYQBUAGUAWABfAFMAaQB6AGUAMQAtAFIAZQBnAHUAbABhAHIASwBhAFQAZQBYAF8AUwBpAHoAZQAxAC0AUgBlAGcAdQBsAGEAcgBWAGUAcgBzAGkAbwBuACAAMQAuADEAOwAgAHQAdABmAGEAdQB0AG8AaABpAG4AdAAgACgAdgAxAC4AOAAuADMAKQBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOQAtADIAMAAxADAALAAgAEQAZQBzAGkAZwBuACAAUwBjAGkAZQBuAGMAZQAsACAASQBuAGMALgAgACgAPAB3AHcAdwAuAG0AYQB0AGgAagBhAHgALgBvAHIAZwA+ACkACgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEANAAtADIAMAAxADgAIABLAGgAYQBuACAAQQBjAGEAZABlAG0AeQAgACgAPAB3AHcAdwAuAGsAaABhAG4AYQBjAGEAZABlAG0AeQAuAG8AcgBnAD4AKQAsAAoAdwBpAHQAaAAgAFIAZQBzAGUAcgB2AGUAZAAgAEYAbwBuAHQAIABOAGEAbQBlACAASwBhAFQAZQBYAF8AUwBpAHoAZQAxAC4ACgAKAFQAaABpAHMAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAaQBzACAAbABpAGMAZQBuAHMAZQBkACAAdQBuAGQAZQByACAAdABoAGUAIABTAEkATAAgAE8AcABlAG4AIABGAG8AbgB0ACAATABpAGMAZQBuAHMAZQAsACAAVgBlAHIAcwBpAG8AbgAgADEALgAxAC4ACgBUAGgAaQBzACAAbABpAGMAZQBuAHMAZQAgAGEAdgBhAGkAbABhAGIAbABlACAAdwBpAHQAaAAgAGEAIABGAEEAUQAgAGEAdAA6AAoAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATAACAAAAAAAA/4MAMgAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAABAAIAAwALAAwAEgA+AD8AQABeAGABAgDYANkBAwEEAQUBBgEHAQgBCQCaAQoAmQClAQsBDACcAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8HdW5pMDBBMAd1bmkwMzAyCXRpbGRlY29tYgd1bmkyMDE2B2Fycm93dXAJYXJyb3dkb3duCmFycm93ZGJsdXAMYXJyb3dkYmxkb3duB3VuaTIyMTAHdW5pMjIyMwd1bmkyMjI1B3VuaTIyMkMHdW5pMjIyRAd1bmkyMjJFB3VuaTIyQzAHdW5pMjJDMQd1bmkyMkMyB3VuaTIyQzMHdW5pMjMwOAd1bmkyMzA5B3VuaTIzMEEHdW5pMjMwQgd1bmkyM0QwB3VuaTI3RTgHdW5pMjdFOQd1bmkyQTAwB3VuaTJBMDEHdW5pMkEwMgd1bmkyQTA0B3VuaTJBMDYAAAABAAH//wAP) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,d09GRgABAAAAABgsAA4AAAAALPQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAANvAAAAE4AAABgRWGV9WNtYXAAAA4MAAAAjwAAAMSeiMFIY3Z0IAAAFdQAAAAKAAAADgAAAABmcGdtAAAOnAAABrwAAA4MYi75emdhc3AAABgkAAAACAAAAAgAAAAQZ2x5ZgAAAUQAAAs4AAAVDoUizsVoZWFkAAAM8AAAADYAAAA2YvJC12hoZWEAAA2cAAAAHwAAACQJfAF+aG10eAAADSgAAAByAAAAnnbtAc1sb2NhAAAMnAAAAFIAAABSWUVUE21heHAAAAx8AAAAHQAAACAAuw7LbmFtZQAAFeAAAAGgAAAEgF/TfrJwb3N0AAAXgAAAAKEAAAEkcKacbHByZXAAABVYAAAAegAAAJx+tju2eNrlVwV828iz1uwKbNmSLVvgxI4xlR1uLMsu85WZmR+Ue4xlenTM/2NmTHvMzMzMzAyR+lZW0kuOGX/CpZlvvpnf7CyFqDxFUbchhcIUR1GGZEhZQ8rkj1iYzyPFejMPF1FAbbX2RM30aipCUSBzGV3P6mahFCoZqiJzLIekIKiomY39+1E1hcLEB2OsEE8+ArJgrcXslC+PuPK5Z68GYxuLaTGVs5+zwbrOflQkcjPWnnAikVtJUeFC0TBUVXMkIi6T1s1iiZKCmKjKeAShTbIgcuAH+ZFk3E/v4qEd2c8/c7V99zbaAyJk0QCwIF2TdGR3I5g/ILIFIpugpUpFBy3FsaNVtD/GkmrtijGZo/rYRzGPVP7zHObJuucIplvJOo6skwwlQ57nXt1KGOA44/M5BplRbJMsOmxk0lmdyupFI6+pFPpACxKhuwIEfH4Wo/2tAyM8zT7B+AI8/ryGrA1ae1Kftkk3CdHkCb766lZ6hPHZ5wZ7EpmxJ5GeITPGEOmcIz2r601IL38LxRK5+qKCST5muWEYmiKzHLkCSFbIx3k4TlM12XkUjbzJpSoowwqCvyVBAwBiuPQinqb5RWmOQQA0KDPrenp8Ios9emJIgHRh0JYYLO8/Jk5+AQWGJHQPtlaxdN/dpNp7P/BFApMMzEU82JgUqPC9X939GBHDqO4VKmJFgcEBLT+Ef7+27wEiwNQBFRizffYAEA/oW/ueb0heC2BG6GDrcNf/eRerIrdjdg0jNsnu1wmLQh9UKhLDQ+V3qZR1qXFfjXhPJiAIfRrHhRngzDrTi7E3WTnFB0x4XGMfQRBZmvbThbE8API31tU0+by7NIS9DinAjy2QMZpeHGAYNVEapr73OjeoVBehGb/A0AG5/3Tu9ffUYaWEyrCi14tppI0zBHjcn++fiIdpunlILCnV3vMBZ4zTEI29FAXbv0QmfgvTVIg00rSDP1+sLtGa7Niiw0dgRzDyoYcAUvAR40Nw8xfoik0ZPGSK70zAmeIgwhKFFuBX0TtUE5Fh5NUyN0becT4xX9U0jiXCXBoyaYcm4n89m3UmQFcpt1O2fmZXvz56bO+umEUIM57qKVtGNTXHzNlNnbvH9uqP3vb5AykWVSkRx+8ebzBU1yBw4c5dOVmhoDWMTIr+Ttts/4+wrTWCFmzf/vNss4b+drZR3ew+9M34EqoLwaUahpIyCaqSlJLCHVq6gypjphQCjU6HN/N2kF9ViW0f7Pj3VVToJZ7en9+g2rdPKhZHeulLrVOt09zfBbG4L1AsTqQ6aMySxnfowFLqmzq/3PUrPfAe0QPwcYcW0dpJFVF+Kn1ZB70luw+zlOjtTlHhYiqlxZGWcQnvktIoTeVANpIO3+QyCPtMspz8HQdR2QKBA9lCL4ymo+k9hGQA57iaaSvvarbvt5/ywL0IwHrvQTgr/d/DD52gyDncq4d1hnU6cUomvbk/8DDg4O72J4C3oi2JkWlGHF8YJGDwWVtYRFunA+JC1fOjDeypxwBCHKKzuaOHQROCabeOhmUBx08rrD1wK8kgMWKKk0CcBJ/JEPC4HChOgghplQg/SvtD2HohxEl+xJgnBUJJb6giV104vXaifRK9Gx+iPx9Z4hj5KlQfUrKeULy5tpd1zUHAYR22Oyy1nowvZMZSfQhLMucEqVpmJBTug0tEsepGPSEmq++IVXIh3J64sgVn2hkmosOVgmiYsbrpm1Wt0UikEkYfHI9qSRNjHgdCDEqmUrl4xdy1SbVLfUO/hr7IGbWidSLGMgjGF+s/QyFUMXH8pnFqZEBzLJ2M1Ik09iAevDOm33nIMdaTlr1m4MoefQd1jaWSFHLQM9eV0a/6hfiZP8Z4FPz9eYv8XL6xwzd3VRvfV/1yxv9J7oLWv4Snf3mEuPlkKrWMWtc5QpzM6hbY5McohZye73ObiDi3bGZZLsOhTi4EUiw5E0mfU1RpeSKzSyHrLHJug7SJ7I6OZkR6VJfGxuSygbx3cm2DkTWw59vYj6RpnoGRemNjYjmZOr6hwfjKhx6uMoyY6vrG/n6WlUergHAFNK5BgPwidsZof2TgLAF18lhsiqz3HDhh3ODmfmw9rP2vwwcUvPBNMne9M9Ijxug9Bo+bMLC5P1tvH3HM4YNcXvG5ibUzGFUdm9f6aVMMQZQ21m0eSoztPUqMr5/BsMF/Hxps2/PoBNnzqkhDLhcYCGUpro3eIlVyy3lNpRNRJS6iO+4EewkW4nIVYLgR+RMxEcHNCOwV4XgUo8FoOPpyBR2tkjnay6h0RQR/8TKHO2qK7ahwKa0svuwwR6V7fihFlYRAw/4cHAmBKiUKyO6JhFhVANm9MeCN4USl58stCn0YqoyHOcx98TKOVGJG4Tto2UY1koZbRTt3OEgcTyJBl4IkYtrCQNrRWQ4s5FEL/oNXDp8nMgCAY+koDcC/dOqwwcv/1wNAR9MxTAYiB63F2yA4qXT8tKoJ9lq7Oy1pqkTDVXAtf/DDlbmtK3m7vz2IllSN9N4Kt/lu3HORi6xv2f6uTnXhmE2WBQm2tsiTguRT7kTtFX57LY+D3VA0JMVcPMMHL+uIx5cdceiSPesTk4/rMVchyPGBQQePPcju344HroWrHDxBxu5ud/NNH3ngMIPxT+i7eEvVBFgLt1JtZ73tpHpgnLMeKamk5yDxlnvSq6fc0xo0tY2bKSkjBSFhlM9q7EPfWG84J0WjvPzzeqPzamc0ZbYa9vPW2exD5KjnrF5p7YkEMl5BUSUzHCpHBadgp8QNhxW1zAVeefGxUW9ACKCW3BxVbWkB0RfwRY/9SIQLYLed5ADP2WPmv1Qs2qPssZwvIO8EuzmyJxHdzhlVI7rTOhEfLiDUdkwlwjGheyUfhJaWi1sQERnk4NJt2y4FztozyHNwIbQAnAtbOV4SwB5ijxDt4fYQECgKkzq1L3M+ibUqqpdzboMOxzbXhQR1tZu+SkVmR5pyDnUdavuiWSBwoFA0VLKwnLB0dGy8sadvw+Knlg3X+x123G3VKzMt9usjSePwE2CKz2hSL9q8X8/4mKEfnRCqisnL5/378bX1p63e037VzFUbRjbV5EEkqYKY/48nDjttt5VX7LuhkmEi9x7hNjYNBlrbZcmpM+eesP9+p4gI8Q1Npy9esesZII0cYm3LGSifzeWzVSxFMR2srCGV8RBq0g9ZGpYypAc5hqZAz2SlVNI0dZ3cxEzSUBRiqOosh0IqJbkskOv7jH4P1esXtyYYCMPBIZqFMLlA2G/BOvtV+237bed/4aZz0QFOg10yi9BR4We+jwHrUJSlvTn7s2vjfkDVCKzHASEPXvX4iDlf/gfKtjcWSqiLM8bXE4b6Dol3ZqSJ6kuNpeb/CN+7zldUTSuVCoQHHdwO2VljFEEnnHEqlGPCJBOwnk1TilwW6QbKD8VE2O85Y1PNlCU33HBDzXr7+XW2xeaSSv0YvjJCr8cxL0xdfMM6wG5nxbJjXgd7VSG495FyN/mIfYPG94cLCHNj9FQi+0Y6NtO6fD3gXgVjxa7H7x+uzqxDq/xkaL1ttfXVtT577Ov2foB0fpSIkDiK1ynUIf8t+BkZENwhRXF4dkgmo4RVRW6fZ5qZdPnPLBBZhmEWfkLShJswGaFh0VIc1KJCgjOURcAEYlUiA4sUg0sIUS2Ily76GcnVPtFZQtYCjkoJgYPFk2PeykpvbPJi4ISEFMVEa8f90XTYcXmQUu2cKDGkxmhWlhWFGJzqomfNXkjvRRcLBbObix1XO+Y5mxaXYGzTLsY9O3YD63+s/0W7oz0IUFWS5SGz91x18OaDV+05e4gsJzjCR7RzJ/X/dz02UXjaY2BkYGDQYNjLwMoAAkxgshdE8PGASAAeIAGVAAAAAAAAEgASABIAEgA+AGwAiACZALcAyAE+Aa8BrwHRAh0CPwKLAsQDAANfA5MD8gSqBbsGegavBuIHLwd+B44HngetB70H6wgYCIsJFAmvCj8KhwAAAAEAAAABAABUSAbEXw889QAPA+gAAAAAAAAAAAAAAAAAAAAA/BP8oge8BVAAAAAIAAIAAAAAAAB42mP4xWDEAASMvgwMQDYDUyjDFiBWZtZmsGC8wfAASJsBaQGm2QzlIAxSw/zi/2/mFyBdf4SBWILlH4MFCLMuYTAHiucz6TCYs9gwmLNZMJiD2eGomEmA4QEQC8DpZIYCIA5lfc5gAcMgdQzmAKo5IRMAAHjaY2BkYGAN+LOIIYrN4o/wvxr2PUARVKAOAJIYBgEAeNpjYGIuZpzAwMrAwNTFtIeBgaEHQjM+YDBkZGJAAg0MDO8FGN68hfED0lxTGBwYFLTYmBX+WzBEsQYwxykwMPTHMcO1KDAwAgDZxg4mAAB42mNgYGACYmYgFgGSjGCahWEDkNZgUACyOICkJoM+QyxDNUMtwwKmY0x3mJmVBJWklPSUDitzq7/UYtJi0WL7/5+BAahSA6gyGkklkxI/UKW20gFlDvUXWgwQlf8f/7/z//r/Nf/7//f9z/nr/tfoL+89pru/7r66G3lX9IblNeVrStcUgW4hEgAA/kkuDwB42qxW13rbTA4dqrlXlRSmgJnI6zWHitPdC8e0Nt31+8itpCXnfvcqz8B9GVDpd/toC5CSe/mbVTCDMsA5wNBCoQDFvu8FAG9+iNHtN1ja/auPz0ycDsKPEO/7mKtHP/tFv2i15IFpWSgCFFpudIQhdOg6aCiE8KODOSUtaTmYV9D+nK9UhauxrCEM3SRX0W5Sz2vM6b1PgMOSFjpqY2HrUyeXy9ExaB3esVjbGa0a7h2gpXQ7ZaNMNoliyz8MOjWDPR0sKMzbWNU+58Oa1l0HE9qA/9vCwtRfO9PGiPZaHpY838J8Pdj5m0/OZuwDbm2Rao28cY5Xc0EASeZNFU2TqrsDnGX7LHnSqT4QG3EEOLjlh6QBtg3y6gWvXoRmGASBSWzhsG6h2PFRvGFni/bmG7zHq3tvoh/josUeP4riIAjaUYCGHQRdBAG0CY90AweLCqiCQj0iTH16y8c+6WK/dKkDFBI6WErpJiagnfQduMBGhmtm5fM3itBrYXHGIqOGGGLKlcwW68TQth9umdFO4MvACgDXdn2ymcRLrxQH+xQOaLsjclmb+2krXQkopBth7uAjGi0qBPtmHBxQwNWOEqyCOAA+AdfCgF3CjbTaQdUZGBXac2eso8EZUqcHaTg7xbAl6Ql6CF4sI2h3yRYmNwTBxLUjwqi1MtrIUoxcEo4PKUpQ1EVBoyoF9HlkWOQ9ymJKK5ihIR5TSS7nYTvacHBckSsAjunXfAAtqEM4zrsd2o2n/ZpQtEpJAeKgRZlxQocQh4ATRJuDk+rNnp8U2hvBQxw5lJ8cLKs32/6b3UxpWqQvp/qKSsSk3veTyUmNRuTihB0wpFzdTcb4a5y+0KhJICRbfsL0EV43joHTjs9YksJ6azOzUwh9Uk1ASJpUf5O0p5t1SQsTIcqS+NIoVjqGYaTdqiqRiJy35+OkdMHDUeniiEQRuhB+v3nTEBOiLFzXZQYqZDOipNJv439t8wHRVSOMVdvBGyoxWN4kvlneUkme5W2VFFiaKimyvKOSEsu7KuljeU8l/Szvq2SApa1kj38shcS0hAYa/+Db4qA6YawdGf+dGZ0Txqkj438yIyiBY/alOAnU1wwq4zyJzyJ8QHU9IHwsJeFj+ZDwsawTPpZThI/lnwgfy2nCx/LPhI/lDOFj2VCwlA7sI0Vpb4agJW01t5QkNnhmZxU+svER3cfHCqAJl3RTRnOSH+xXepiM/kmvxcloyeOJw8czSdGoev5skKJ8mtFzpc8zBc/Typ8r0fXxzudEw6ZaLtaL2hfBfxsrci55ZlQZ6wviA5qX1I9CR3MOvlSNG0sOzl3nioZukfs8tUjU6tCAJgrJt+VVHDdlU0bgHxAfaEi3M2cY1QoxvKCoLLxBboU6vVO3ZFi4OKTtw7ghAZZiOnPxtBs0svOwJN2eN2DIz5S1bf9zAYpgfi5MFW8HrisBBzXEMo2QmyGW9NnrGgLRk/1XKuiwLbGoozaZCzoyaR3yk+5sTCSBvKfkJvVYUoZNwkkizRLCRUkkZ5FkCUlisR7R56wTnchF1LmIPH13n6THuQIHl3pcAGmLU10u5BLRtNwzEebUvimbnJS7uNKzpWAyplHs+Q1YkpZJmp6SDj1qBZbqtHt18rdL1sSLpr3bLckjv3qiEt1rV8g/cM5C7rV4TUloMIubeEP7W+ZO4MNS0EhmjYrt4Pop6465dcrqXhh7VYRWuGBflXBD4aIdU208YwTqUldqaANnKcJjyOl8TmXMRzgs3Qw6D6iEJWjIue75myoZLNRdCvktI938o6aYMUWEbknSo+rEvFhBt86mSsSC3WPlL7RbtC3Z5UXOnabgFVFQza59R/ANLzfwBd3y15fo39BxRqWML2n9VuE8iXfMokd0w2Ysox5b7xUPNP6/57pIix0KAih86wm6BKbMCCvA3V0bt8ZdG3dfTNsGqVMVMvtvvhP3AeVQVAihUzGsEDASFSSAUYWAMZouxTgNmKABkzRgKiqGENpU0yoxpaKi+LQZlZhm6QTN0Znm6UwLdKZF1tmhWFIIWGadYEUhYJWmW7FGA9I0YJ0GbLC+0K7aVIlpi/WZtlVi2qETtEtn2qMz7dOZDvQY1ycn8NBGuWblkbNFecxBt1Grjk6ivMTNKfTmzBqJm3OduSFZ6gUjnyMDfY5L6PmVLicOrqEHN9CDW20bk+XdMfL8Hnr+AD1/1Dnj4Al68Aw9eNG2KVneKyPP36Dn79DzD50zDj6hB1/Qg++oUGlftrmSqsK/P3879KdJH4Op1ppcWTr3t3o48/uyrv0BJdoBQXjaY/DewXAiKGIjI2Nf5AbGnRwMHAzJBRsZ2J02MjBoQWguFHonAwMDNxJrJwMzA4PLRhXGjsCIDQ4dESB+istGDRB/BwcDUACsIFJ6ozpIaBdHAwMji0NHcghMAgQ2MvBp7WD837qBpXcjE4PLZtYUNgYXFwCUHCoHAAB42mNAAQAADgABAAB42q2SBWpsQRREz7gP/nF4yHd3d3eLoWHc3Wc5s4qsIIvIalJcOu5C26G5XdWv+gExugTwBWPiGTj2cYGZYz9pVjDW/IlVx0Eu+ZKOQ7zz3XMc3raf8hd9fcdpHgTWeE+LNhO5VihRpo/HFXJc1XqPO2pPuWl0V8PjAwV6VtvE4z85cUGc03xDO1+NbxE/UvkuDzaVn2jvu2oypvqWnCgvxYbOfxfPiZdYll+Fqfge/zSXGFAnI4dP8mrSt7Wr/YJ53LIbP9PYX+PmTpVjVi1Q0KwMzNPjLrc0nov6akXVDLS2KKui6b56aFVPNO5z9YSZ3zh+6qbzgpG1W0ovQ1/6Va1jbrlsXnH1HF9np2PNVWW21+xwvkFclRW7l2fJ9izPoea8dtxLin6R0enCga+nf0xtznLu7Tj5X1QUjey9pOAq6lpzllvPuQ3EefP37EYFO/2VH1p/07ba7co/digo+f3/Bg272b6+HhmGGhX7n7Katbctk4w5vuWvcZ9n0tL7qLXFt9V65Ozd2vTFtzSktZnybX7r/I/TnFkHvU6xs3jabcq1oQJAEATQme/u0gLhCe5aBu7uFdAEltITNINvyMm+NVwBALCbwODScQDgYesaz3jBF8KIIIoMcrzCGhte8wZz3mKGFZa84z0f+MgnPvOFr3zjOz/4yS9+84e//OP//bhTVyqmTlplHkf1Vqlc7LYLx44xWp01CTEpps4mlKhFI9qTVnlFnxgT4yc9Ka94nseUErVoRKfo3gOGgDnuAAAAAAEAAf//AA8=) format("woff"),url(data:font/ttf;base64,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) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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AKIAAwABBAkAAgAOALgAAwABBAkAAwBGAMYAAwABBAkABAAmAQwAAwABBAkABQBCATIAAwABBAkABgAmAQwAAwABBAkADQJmAXQAAwABBAkADgA0A9oAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAwADkALQAyADAAMQAwACAARABlAHMAaQBnAG4AIABTAGMAaQBlAG4AYwBlACwAIABJAG4AYwAuAAoAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAxADQALQAyADAAMQA4ACAASwBoAGEAbgAgAEEAYwBhAGQAZQBtAHkASwBhAFQAZQBYAF8AUwBpAHoAZQAzAFIAZQBnAHUAbABhAHIARgBvAG4AdABGAG8AcgBnAGUAIAAyAC4AMAAgADoAIABLAGEAVABlAFgAXwBTAGkAegBlADMALQBSAGUAZwB1AGwAYQByAEsAYQBUAGUAWABfAFMAaQB6AGUAMwAtAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAxADsAIAB0AHQAZgBhAHUAdABvAGgAaQBuAHQAIAAoAHYAMQAuADgALgAzACkAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAwADkALQAyADAAMQAwACwAIABEAGUAcwBpAGcAbgAgAFMAYwBpAGUAbgBjAGUALAAgAEkAbgBjAC4AIAAoADwAdwB3AHcALgBtAGEAdABoAGoAYQB4AC4AbwByAGcAPgApAAoAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAxADQALQAyADAAMQA4ACAASwBoAGEAbgAgAEEAYwBhAGQAZQBtAHkAIAAoADwAdwB3AHcALgBrAGgAYQBuAGEAYwBhAGQAZQBtAHkALgBvAHIAZwA+ACkALAAKAHcAaQB0AGgAIABSAGUAcwBlAHIAdgBlAGQAIABGAG8AbgB0ACAATgBhAG0AZQAgAEsAYQBUAGUAWABfAFMAaQB6AGUAMwAuAAoACgBUAGgAaQBzACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAgAGkAcwAgAGwAaQBjAGUAbgBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAUwBJAEwAIABPAHAAZQBuACAARgBvAG4AdAAgAEwAaQBjAGUAbgBzAGUALAAgAFYAZQByAHMAaQBvAG4AIAAxAC4AMQAuAAoAVABoAGkAcwAgAGwAaQBjAGUAbgBzAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAHcAaQB0AGgAIABhACAARgBBAFEAIABhAHQAOgAKAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATABoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAAgAAAAAAAP+DADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAQACAAMACwAMABIAPgA/AEAAXgBgAQIA2ADZAQMBBAClAQUBBgEHAQgBCQEKB3VuaTAwQTAHdW5pMDMwMgl0aWxkZWNvbWIHdW5pMjMwOAd1bmkyMzA5B3VuaTIzMEEHdW5pMjMwQgd1bmkyN0U4B3VuaTI3RTkAAQAB//8ADw==) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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ILAKI0IgICBGI0ewASsjYTgtsD4ssAAWsBcjQrADJbACJUcjRyNhsABUWC4gPCMhG7ACJbACJUcjRyNhILAFJbAEJUcjRyNhsAYlsAUlSbACJWG5CAAIAGNjIyBYYhshWWO4BABiILAAUFiwQGBZZrABY2AjLiMgIDyKOCMhWS2wPyywABawFyNCILAKQyAuRyNHI2EgYLAgYGawAmIgsABQWLBAYFlmsAFjIyAgPIo4LbBALCMgLkawAiVGsBdDWFAbUllYIDxZLrEwARQrLbBBLCMgLkawAiVGsBdDWFIbUFlYIDxZLrEwARQrLbBCLCMgLkawAiVGsBdDWFAbUllYIDxZIyAuRrACJUawF0NYUhtQWVggPFkusTABFCstsEMssDorIyAuRrACJUawF0NYUBtSWVggPFkusTABFCstsEQssDsriiAgPLAGI0KKOCMgLkawAiVGsBdDWFAbUllYIDxZLrEwARQrsAZDLrAwKy2wRSywABawBCWwBCYgICBGI0dhsAwjQi5HI0cjYbALQysjIDwgLiM4sTABFCstsEYssQoEJUKwABawBCWwBCUgLkcjRyNhILAGI0KxDABCsAtDKyCwYFBYILBAUVizBCAFIBuzBCYFGllCQiMgR7AGQ7ACYiCwAFBYsEBgWWawAWNgILABKyCKimEgsARDYGQjsAVDYWRQWLAEQ2EbsAVDYFmwAyWwAmIgsABQWLBAYFlmsAFjYbACJUZhOCMgPCM4GyEgIEYjR7ABKyNhOCFZsTABFCstsEcssQA6Ky6xMAEUKy2wSCyxADsrISMgIDywBiNCIzixMAEUK7AGQy6wMCstsEkssAAVIEewACNCsgABARUUEy6wNiotsEossAAVIEewACNCsgABARUUEy6wNiotsEsssQABFBOwNyotsEwssDkqLbBNLLAAFkUjIC4gRoojYTixMAEUKy2wTiywCiNCsE0rLbBPLLIAAEYrLbBQLLIAAUYrLbBRLLIBAEYrLbBSLLIBAUYrLbBTLLIAAEcrLbBULLIAAUcrLbBVLLIBAEcrLbBWLLIBAUcrLbBXLLMAAABDKy2wWCyzAAEAQystsFksswEAAEMrLbBaLLMBAQBDKy2wWyyzAAABQystsFwsswABAUMrLbBdLLMBAAFDKy2wXiyzAQEBQystsF8ssgAARSstsGAssgABRSstsGEssgEARSstsGIssgEBRSstsGMssgAASCstsGQssgABSCstsGUssgEASCstsGYssgEBSCstsGcsswAAAEQrLbBoLLMAAQBEKy2waSyzAQAARCstsGosswEBAEQrLbBrLLMAAAFEKy2wbCyzAAEBRCstsG0sswEAAUQrLbBuLLMBAQFEKy2wbyyxADwrLrEwARQrLbBwLLEAPCuwQCstsHEssQA8K7BBKy2wciywABaxADwrsEIrLbBzLLEBPCuwQCstsHQssQE8K7BBKy2wdSywABaxATwrsEIrLbB2LLEAPSsusTABFCstsHcssQA9K7BAKy2weCyxAD0rsEErLbB5LLEAPSuwQistsHossQE9K7BAKy2weyyxAT0rsEErLbB8LLEBPSuwQistsH0ssQA+Ky6xMAEUKy2wfiyxAD4rsEArLbB/LLEAPiuwQSstsIAssQA+K7BCKy2wgSyxAT4rsEArLbCCLLEBPiuwQSstsIMssQE+K7BCKy2whCyxAD8rLrEwARQrLbCFLLEAPyuwQCstsIYssQA/K7BBKy2whyyxAD8rsEIrLbCILLEBPyuwQCstsIkssQE/K7BBKy2wiiyxAT8rsEIrLbCLLLILAANFUFiwBhuyBAIDRVgjIRshWVlCK7AIZbADJFB4sQUBFUVYMFktAEu4AMhSWLEBAY5ZsAG5CAAIAGNwsQAHQrEAACqxAAdCsQAKKrEAB0KxAAoqsQAHQrkAAAALKrEAB0K5AAAACyq5AAMAAESxJAGIUViwQIhYuQADAGREsSgBiFFYuAgAiFi5AAMAAERZG7EnAYhRWLoIgAABBECIY1RYuQADAABEWVlZWVmxAA4quAH/hbAEjbECAESzBWQGAEREAAAAAAAAAAAAAAAAAAAAAAAAAAkAcgADAAEECQAAAKIAAAADAAEECQABABYAogADAAEECQACAA4AuAADAAEECQADAEYAxgADAAEECQAEACYBDAADAAEECQAFAEIBMgADAAEECQAGACYBDAADAAEECQANAmYBdAADAAEECQAOADQD2gBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOQAtADIAMAAxADAAIABEAGUAcwBpAGcAbgAgAFMAYwBpAGUAbgBjAGUALAAgAEkAbgBjAC4ACgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEANAAtADIAMAAxADgAIABLAGgAYQBuACAAQQBjAGEAZABlAG0AeQBLAGEAVABlAFgAXwBTAGkAegBlADQAUgBlAGcAdQBsAGEAcgBGAG8AbgB0AEYAbwByAGcAZQAgADIALgAwACAAOgAgAEsAYQBUAGUAWABfAFMAaQB6AGUANAAtAFIAZQBnAHUAbABhAHIASwBhAFQAZQBYAF8AUwBpAHoAZQA0AC0AUgBlAGcAdQBsAGEAcgBWAGUAcgBzAGkAbwBuACAAMQAuADEAOwAgAHQAdABmAGEAdQB0AG8AaABpAG4AdAAgACgAdgAxAC4AOAAuADMAKQBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOQAtADIAMAAxADAALAAgAEQAZQBzAGkAZwBuACAAUwBjAGkAZQBuAGMAZQAsACAASQBuAGMALgAgACgAPAB3AHcAdwAuAG0AYQB0AGgAagBhAHgALgBvAHIAZwA+ACkACgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEANAAtADIAMAAxADgAIABLAGgAYQBuACAAQQBjAGEAZABlAG0AeQAgACgAPAB3AHcAdwAuAGsAaABhAG4AYQBjAGEAZABlAG0AeQAuAG8AcgBnAD4AKQAsAAoAdwBpAHQAaAAgAFIAZQBzAGUAcgB2AGUAZAAgAEYAbwBuAHQAIABOAGEAbQBlACAASwBhAFQAZQBYAF8AUwBpAHoAZQA0AC4ACgAKAFQAaABpAHMAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAaQBzACAAbABpAGMAZQBuAHMAZQBkACAAdQBuAGQAZQByACAAdABoAGUAIABTAEkATAAgAE8AcABlAG4AIABGAG8AbgB0ACAATABpAGMAZQBuAHMAZQAsACAAVgBlAHIAcwBpAG8AbgAgADEALgAxAC4ACgBUAGgAaQBzACAAbABpAGMAZQBuAHMAZQAgAGEAdgBhAGkAbABhAGIAbABlACAAdwBpAHQAaAAgAGEAIABGAEEAUQAgAGEAdAA6AAoAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATAACAAAAAAAA/4MAMgAAAAAAAAAAAAAAAAAAAAAAAAAAADMAAAABAAIAAwALAAwAEgA+AD8AQABeAGABAgDYANkBAwEEAKUBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUHdW5pMDBBMAd1bmkwMzAyCXRpbGRlY29tYgd1bmkyMzA4B3VuaTIzMDkHdW5pMjMwQQd1bmkyMzBCB3VuaTIzOUIHdW5pMjM5Qwd1bmkyMzlEB3VuaTIzOUUHdW5pMjM5Rgd1bmkyM0EwB3VuaTIzQTEHdW5pMjNBMgd1bmkyM0EzB3VuaTIzQTQHdW5pMjNBNQd1bmkyM0E2B3VuaTIzQTcHdW5pMjNBOAd1bmkyM0E5B3VuaTIzQUEHdW5pMjNBQgd1bmkyM0FDB3VuaTIzQUQHdW5pMjNCNwd1bmkyN0U4B3VuaTI3RTkHdW5pRTAwMAd1bmlFMDAxB3VuaUUxNTAHdW5pRTE1MQd1bmlFMTUyB3VuaUUxNTMHdW5pRTE1NAAAAAEAAf//AA8=) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,AAEAAAAOAIAAAwBgT1MvMkVLjcEAAFT4AAAAYGNtYXCCRhu6AABVWAAAANxjdnQgAmQXfgAAZPQAAABaZnBnbWIu/XwAAFY0AAAODGdhc3AAAAAQAABrnAAAAAhnbHlmWsGnNAAAAOwAAFF8aGVhZGE4QrYAAFOQAAAANmhoZWEFKAEZAABU1AAAACRobXR4FF4PAAAAU8gAAAEMbG9jYTfxI+IAAFKIAAABBm1heHABNQ6iAABSaAAAACBuYW1lZd+DQAAAZVAAAASocG9zdK4hCEoAAGn4AAABpHByZXBlwgKGAABkQAAAALIAAgAyAAAAyAIVAAMABwAAMxEzESczESMylmQyMgIV/esyAbEAAgDOAAABQAJuAA4AGgAItRQPCgICMisSNDYzFhYUBwcGBiImJycTFhYVFAYjIiY1NDbOIRoXHwUGBhEuEAYGNhgfIBoZHyECHDIgAR8ylLAOCAcPsP7rAh4ZGiAfGRsgAAACAHoBTQGSAm8AEgAlAAi1HhULAgIyKxM0NjIWFRQHBgYHBiMiJyYmJyY3NDYyFhUUBwYGBwYjIicmJicmeh4qHwcGAwgIFBMICAMGB7EeKh8HBgMICBQTCAgDBgcCPxQcGxUNYlsZBwgIBxlbYQ4UHBsVDWJbGQcICAcZW2EAAAIAJAAAAekCYwBtAHsACLV2b1QaAjIrNzQ+AzczNTY2NTQjJyY1NDc2MzM2NzY3NjIXFxQGFRQzMzY3Njc2MzIWFxQGFRQzMhcWFRQHByMVBgYVFDMzHgcVFAcGIyMVDgIHBiMiJic0NzQjIxUOAgcGIyImJzQ3NCInJiU0IyMVBgYVFDMzNTY2JAIHAwwBRgERLCwZFwYvLwQECgIJLAkEDzQzBAQKAgoVDRQCDxscBhgaIyIBESssAQcCBgMEAgEYBi8uAQcKAwoVDRQCEDM0AQcKAwoVDRQCEDgGFwEfMzQBETM0ARHGBgoHAwgBAwOJAQIBDBYaBwIfJUYFExMMD20FAh8lRgUTEwwPbQUCAggZFA4BAwOJAQIBBAIFAgYFBgQZCAICAUFGBhMTDBtoAQIBQUYGExMMG2gBAgfNAgMDiQECAwOJAAMAOv+uAdICtgBMAFgAYgAKt15cTk1CHAMyKwEUBiMiJjU0NycmJycVFxcWFxYVFAcGBwcVFAcGIyInJzUnJicmJjQzMhYVFAcWFxc1JyYnJiY1NDc2Njc2NzU0NzYzFhcWFRUzFhcWBjQjBgYHBhUUFxYzFzQmJxUUMzI3NgHSHBoWHA4EETEGAQpaKxY2LEEDCQgVHgcBCxITNz4zFh4PFzMDCxkcMDZVAw0CIB8DCRwTCAkDeiEI8gEYLwgHNhYKpDAnAQcUOwHFGx4dFxQRByELAl1cAxVJJixHMykNARsiCggWHBwCAggTVnIfFhAVNwcB0QIFDRdOLVM2AQcBDgUdGwYSAQgKIRsTXBptqAQiEg0QLRoMxiEyDWBgCx4ABQAj/60B6QK2ABIAIAA0AEYAVQAPQAxRSkI5KiEcFg4FBTIrEzQ2NzI2MxYXFhUUBgcGIyInJjcmIyYHBhUUFxY3NjU0AyImNTQ3NgA3NjMyFhUUBwYABwY3NDY3NjMyFxYVFAYHBiMiJyY3NCcmIyIHBhQXFjMyNzYjJyQBCwMbFSUlHggMHhUlXgQBAgIODwICDhAOFQEBARYCChQPFQEB/uoDCaonJAMIHBUoJCAHDBwUKGcOAQEGBwICBwcBAQ0CMC9NCQECFidHL0gKAxcodAgCAxMiLQoCAxMiHv1fFQ4FAgQCwwUTFQ4FAgX9PgYShTFKCQEVJkouSAwCFCZKKA4BGgkoCRoBEQAAAwAc//UB6gJuAEoAWgBoAAq3ZV1WTjgCAzIrEzQ2MzIXFhYVFAcGBwcWFzY3Njc3NCciJyY1NDY3MzIXFhQHBiMjBwYHBxcWMzI2NTQzMhYVBgcGIycnBwYjIiYnJjU0NzY3NycmNzQnJyIjIgcGFRQXNzY3NgMmJyIGBwYVFBcWNzY3YDw3EhYdIiIVIxAMMQcXHgMKAQEEAggOODYGEhIGGRoQMhsHCCQiCwwkFA8FNhAVaQ0LMzwnPA4KFQkkHAMXkxkDAwIcDQIMCS4IARomGQIXAw0aChMgHAHORVsKDkoyNTEgIxEkSQ02UAceAQEGBRETDAcDBzgHAyuIMQwJKRwQHxIUThsINAwLNTAsIR0wJxIjHAxHUDoNAS0JGi40CTAkBP6wOTEZBBYpPQ8EBAojAAEArwEfAV0CYwAaAAazDAIBMisSNDYzMhcWFhUUBgcGIyYmNTQ3NjY3NSIGIyLNIBoMDxsgPTEPCgodFSAqAwEHAhcCETIgBQs+Kz9mHQkBHAsSDRBCKw4BAAEApv+uAbUCtgAgAAazEAEBMisFFCMiJyYnJiY1NDc2NzY3NjMyFRQHBgcGBwYVFBcWFxYBtSYPBA0ZU11aJjAbCwQPJgIEEYsXAh0rZA81HQIFFD6/bJt5MSQUBQIdBAYKC169FBlTSHJACgAAAQBX/64BZgK2AB4ABrMRBAEyKxMmJjU0MzIXFhcWFhUUBwYHBiMiJjQ2NzY3NjU0JyZtDQknDwMLHFNcTDFIExAVEgkNghwGKyoCewgLCh4CBBU+v2yOcUgxDBIWCwhboyArY1lVAAABAEQAWgHIAggAbgAGszcAATIrEjIWFxQHFBQGFBUVFDMyNjY3NjMyFhUUBwYGBxceAjMWFRQGIyInLgIjIhUVFBQWFBUWFQYGIyImJzQ3NDQ2NDU1NCMiBgYHBiMiJjU0NzY2NycuAiMmNTQ2MzIXHgIzMjU1NDQmNDUmNTb1IBcCAQEBAiwxBAoGEBgPBGEBMQwZDwEPFxAJCAwxIwMBAQECFw8QFgIBAQECLDEECgYQGA8DYAMxDBkPAQ8XEAkIDDEjAwEBAQICCBMOHR0IEQ0LAwMBGR4CBBcSFQsCNQEaBg4JDBQSFwQGHRYBAwMLDREIHR0PExQOHR0IEQ0LAwMBGR4CBBcSFgoBNQIaBg4JDBQSFwQGHRYBAwMLDREIHR0OAAABACYAUQHnAhMAHwAGsxIBATIrJQYjIicnNSMiJyY0NzYzMzU3NjMyFxUzMhcWFAcGIyMBKRIRFQ0BUFAGFxcGUFABDRURElBQBhgYBlBQaxoaUlICBzQHAlJSGhqkAggyCAIAAQCs/3UBYQCMABkABrMNBQEyKyEiJjU0NjMyFhUUBgcGIyImJyY3Njc2NzY3AQkhJyUeKTRGNQkGCxwCAg4BDSEUBQ4lIR8nOy1AWhIDGwsRCgEFCxgFHQAAAQA5AQ8B1AFVAAcABrMGAgEyKxI0NyEWFAchOR0BYB4e/qABGDQJCjIKAAABAMEAAQFMAIwACwAGswgCATIrNzQ2MzIWFRQGIyImwSYbIConHyAlRh4oJiAfJiUAAAEAOv+tAdICtgATAAazCQABMisXIiY1NDc2ADc2MzIWFRQHBgAHBl4QFAICAUoHChYOFQIB/rYIC1MVDgQIBQKyDhUVDgMIBf1ODxUAAAIAKv/2AeICbQAUACYACLUbFQwBAjIrEzYzMhcWFxYVFAYHBiInJicmNTQ2FwYGFRQXFjMyNzY2NTQmJyYjqyktGgY5LFxvUgYqBjcuXEaIN0MkKjoJBTlBPzMODQJRHAELL16iebIQAQELL16iYZgJC4ZQZElSAQyZWU2EDgIAAQBjAAEBwgJvACcABrMaDgEyKxMiJic1NDY3NjM2NzY3NhYXFhcRMzIXFhUUByEmNDc2MzM1NCMGBwaJEg4GDhQOBD4mCw0EEgQKCDY1BhIW/tMXEgY1NgEDBCkBqAoNDhUQAgIPTxUEAgICBRH99wMHHBoLCTgHA8HAAgMdAAABADQAAQHYAm4AOwAGsyQHATIrEyImNTQ2NzYzMzIWFxYVFAcGBgcGFRQzMzU0NjIXFhYVFAcGByEmJjU0NzY2NzY3NjU0JiMiBwcWFRQGaRgdRTMkJwNMcxUKJBM1OHtlZhIwCQcCAgYO/okNCQIEzxc8FhFaQzceAgsbAZceGTZLEg1MPx0hPTYeNC5gBQELEhIJBw4gJAUNBgUOEhAFBq0SNisfIzlFLgUREhgcAAEALP/1Ad8CbgBRAAazHQkBMisTIiY1NjY3NjM2MxYXFhUUBwYHBxYXFhcWFRQHBgYjIiYnJjU0NjMyFhUUBxYzMjc2NTQmJyYjIicmNTQ3NjY3Njc2NTQnJiMiBwYHBhUWFRQGfRcdBFU/BggCGHYwFAIMOQsqBjEMAQINeVRYdAkCHRYVIAkkVVokCUQvBSkjBRMJBQ4hNRQ6ERw+Nx0BAgIGHwG+IBo0OAgBAQVLICAMEkMsCBgFKDgGEhgIRFtDOAwGFx4dFwoUJEcTGC88BQECBx0UCQYDAgQKHjwWESESAQEBARIJFR4AAgAdAAEB7wJwADEANwAItTMyFgACMis3JiY1NDc2NzYzMzUjJyYnJjU3NhI3NjMyFjMzFhcRMzIXFhQHBiMjFTMyFxYXFhUUBycRBgYHF+sNCQIGCQYmKIODEAUCAQffBA0MAhYKKA8HLCoGEhIGKiwoJgYJBgMWlyGDIWIBBQ4SEAUJBQNcAQYNBRkaCwFhBQsBBw/+mwMINggDXAMFCQcOHAnzATY0zjMBAAEANP/2AdgCYwBMAAazOxwBMis3MjY1NCYnJiMiBwYHIyInJicmNTQ3NjczOgI2MjIzMx4HFRQHByMVMjc2MzIXFhYVFAcGBiMiJyY0NjMyFhUUBwYUFhcW9ThWMSUMEEwoBwwSEgULBAEBBg8FBBAVHB4kEZsBBwIFAgMBARZ+fQEKKzonIjVGAQp8XIYvDB4WFR8IAhAFI0FDOS9BCQMxCgUCBwoEnp0EDgUBAQUCBAMGBQgEGgsBrAUVDxRlQg4GS2ZeHTAeHBYSCwQCEAQVAAIALf/1Ad8CbgAzAEcACLU8NCsBAjIrEzYzMhYVFAYjIicmNTQ2NTQmIyIHBgYHBgcVNzYzMhcWFxYXFhUUBgcGBwYjIicmJjU0NhciBgcUFxYXFjMyNjc2NTQmJyYmtkFIO0wcGAwEJAYdCQ8ULkwSCQELQE0SEDcoMwwCHB8tNxofEQdjX0qWM08DGBwxCRMiJhcjERYVJQJDKzo2GBwBDSYFDwYEBgULTjYkBQQIKQIKKDNCEhYuPh8tDgYBDqeCXo3SOS4qLjYNAhIXJTUfJxYVEAABACz/9gHgAnMAKwAGsxcAATIrFyI1NDc2NzY3IxUUBwYjIicmJyY1NDc2MzIXIRYXFhUUBgcGBwYHFBQGFQbMKgYadCgI5gkIGRQECwUCAgcjGgsBTREDAgUQIBOcBgEHCjIsLcCcMggLEgkIAgUMBSwtBBUQDAgHCw8KDyAYu/EGDAgBIAAAAwAt//YB3wJtACsANQBEAAq3PTYzLhkCAzIrEzQ2MzIXFhYVFAYHBgcHFhcWFhcWFRQHBgYiJicmNTQ3NjY3JyYmJyYnJiYlNCYiBhUUFjI2AzI2NTQnJiYjIgYVFBcWOnZOJAhIYD8sAgMEAwYvPwkBAg12qHYNAgEKQzMCAQQCCAwpLgFERmJITFhMeDlNBQtGLzlOCSMBzEBhAQtaOyxDDwEBAgICEkEoBhIXCERaWkQIFxIGKkITAQEBAQIHEz8hJDQyJigyMv6gQi4MESUwRC4WE0cAAgAu//UB3wJuACwAQgAItTkuGQ0CMisBBiMiJicmJyY1NDY3NjMyFxYVFAcGBwYHBiMiJyY1NDYzMhYVFAcWMzI3NjcDJiMiBwYVFBcWFhcWMzI2NzY3NCcmAYg6Yis4HDIMARgdQWRSOE0CEU8vOBwhUCccHRcYHAYLJTIiSRIyISgmGksJCSkTFRsqQw8IAQIMAQMxGRsyQwcZMT0dSDpOthUWfkwtEAkpHCsXHR4WCg8LHDVuAQEhDiZPHxUUKQgJJx4OFQ8JQAAAAgDBAAEBTAGvAAsAFwAItRQOCAICMisTNDYzMhYVFAYjIiYRNDYzMhYVFAYjIibBJhsgKicfICUmGyAqJx8gJQFpHigmIB8mJv78HigmIB8mJQAAAgCv/3UBUQGvAAsAIwAItRcQCAICMisTNDYzMhYVFAYjIiYTJjU0NjMyFhUUBwYjIicmNDY3Njc2NSbBJhsgKicfICU3NyUdJyc5JxsLDg4KDiERBwQBaR4oJiAfJib+tws6Hyc8L043Jw4PGgoHESEOAwEAAAEAOQA3AdQCLQAZAAazDwIBMislFAYjIicmJCcmNDc2JDc2MzIWFRQHBgUFFgHUFg0GCAb+qwQLCwQBUwUICA4WDAL+2AEqDFoPFAMD1wQLHgsD1wMEFA8ODAK8vgwAAAIAJgDDAecBoQAIABQACLUOCQYCAjIrEzQ3IRYUByEmFyY1NDc2MzMWFRQHJh0Bhh4a/nMaHR0YBMbFGh4BfhoJCjIJCaIJGhkJAQ8UGQoAAQA5ADcB1AItABgABrMLAAEyKzciJjQ3NiUlJjU0NjMyFxYEFxYUBwYEBwZbDRULAgEo/tYLEw4IBwYBVQQMDAT+qwYHNxQeCwK8vgsPEBMDA9cEDBwMBNcDAwACAD4AAAHOAmkAKgA1AAi1My0SAgIyKxM0NjMyFxYVFAcGBwYHBgcVBgYjIiYnNTQ3Njc2NzY0JyYjIgcWFRQGIiYTNDYzFhYVFAYiJj5uUXI2KScKE08TAgEIEBcWDgkFF3oPCQICFmZFFwcdLh2AIRoYHyA0HgHtPEAtITEwIQgLKzwJHx4PCAcOHiMUXT8IDQUQBSUXDg0VHx7+ZhkgAh4ZGiAgAAACACz/+gHhAmkANQBHAAi1RDowBAIyKxM0Njc2MzIXFhUUBwYjIiYnJjU0NjMyFyYnJiMiBhUUFhcWMzI3NjMyFxYVFAcGBwYjIicmJiQ0JicmIyIHBgYVFBYXFjI3NiyIZwYNFxWHPCgxM0oOClY/HBIOBxkcU2paSAgVNiUMGxYEEw00SQ8XDgVniwFuIxsFCg4IGh8jGwQYBBwBMnuwCwEGI/92PChONSEoT3oKFAUSj11UhQ8CIgoCBxQNDDQMAwELrlNWRgoCBA1EKStGCgICCwAAAgAcAAEB8AJvAD0ATAAItUdANAYCMislMhYVFAcGIyMmNTQ3NjY3NzU0JycjBwYVBjMyMxYWFxYVFAcjIicmNTQ2MzI1NjYSNzY3NjIXFhcWEhYXFAM0JyIVFAcGBxQyNSYnJgHGGRESBE9OFgIGCxMPBweQBwcBAwILEwsGAhVPTwQSERkTATc5AwUSBjgFFAQDOTcBrAEBGxgEcAQYG0wQFhsIAgceDwQLBwEBAQIgHx8gAgIBBwsEDx0IAggbFhACAfwBBAgPBwICBw8I/vz8AQIBuwcBBxyKewoCAgp7iQAAAwARAAEB4gJjAC0AOgBLAAq3Qj8yLxYAAzIrNyYmNTQ3Njc2MzMRIyInJicmNTQ2NzYzFhcwFxYWFxYVFAYHBxYWFRQHBgYHBwMmIyMVMzY3NjY1NCYTJiYnJiMjFTMyMzY3Njc2NicNCQIGCQYVFxcVBgoFAgkNAYuNDAciOA8RMioLM0kKD0MtCxkHREI+PgciLCY7AjAhBUlFRwkPNg0BAx0jAQUOEhAFCQUDAcsDBQoEEBIOBQEBAwIJLR4hIilGEgUKVjcdGis7CQICFAKzAQIJMyEeLv6gKDoFAcwBBQEBCjAAAAEAKP/1AeQCbgA0AAazBwABMisFIiY1NDY3NjMyFxc2NzY2MzIXFhUUBwYGIyInJjU0JyYjIgcGFRQXFjMyNjU0NjMyFhUGBgEZbIV9XBAIPjMKBQUKDg4WCAICBBAUGQgJEx83NS1JPTA/LTsUFhgSBHQLw3l7tAwCJgYHCRIKEwVaWwUMBwkHCxsmPS1HfHFGOUIuEg0PFkxrAAIAEAABAeUCYwAcACgACLUkIRAAAjIrNyY1NDc2MzMRIyInJjU0NzYzFhcWFxYVFAcGBwcTNCYnJiMjETM3NjYmFhAHExQUEggQFgF/fglDL0ZHMEEKbUw5BjMwNDU8SQEHHhgLAwHLAwsYHgcBAQIPP1yKiVY8DgIBLFmGCgH+NQEOegAAAQATAAEB9gJjAFEABrNDBwEyKxM0NzM6AjYyMjMzFhcWFAcGBwYjIicmJjU1IxUzNTQ2MzIXFhcWFAcGBwYjIicmNTUjFTM1NDc2NzYyFxYXFhQHBgchJjU0Njc2MzMRIyInJhMWBgYVHCYoMBfPEQMCAgULBBQZCAcC33USGBIGCwUCAgULBBQZCAl19QIFCwYkBgsFAgIGDv5JFgYLBhcYGBcGEQI9HgcBDQcFeAUMBQIIBw0fIrQQFxIDBQwFjAUMBQIICRcQyyorBQwFAwMFDAWIBQ0GCB0QDQYDAcsDCgAAAQAWAAEB6gJjAEkABrM7BwEyKxM0NzM6AjYyMjMzFhcWFAcGBwYjIicmJjU1IxUzNTQ2MzIXFhcWFAcGBwYjIicmNTUjFTMeAhUUBgcjJjU0Njc2MzMRIyInJhYWBgYVHSYoMRjTEQMCAgULBBQZCAcC43kSGBIGCwUCAgULBBQZCAl5RgoGBgkNzRYGCwYYGhoYBhECPR4HAQ0HBXgFDAUCCAcNHyK/EBcSAwUMBYwFDAUCCAkXEMAGBA8NEg4FCB0QDQYDAcsDCgAAAQAm//UB8AJuAEoABrMNAQEyKyUGIyImJyY1NDc2Njc2MzIXFzI3NjYzMhcWFRQHBgYjIicmJyYnJiMiBwYGFRQWFxYzMjc2NTQjJyYmNDY3MxYVFAYHIxUGBiMiJgFsJ0FGdRcMDBZlQBAIOS8GAQgKDQ4WCAICBBAUGQgIAgMOGzEIBTxNOzEUFisaFh0dDQkJDaoWEBMMBw4VFw0cJ3NdMzo5M1VwCQIlBA8QChMFWlsFDAcIBxIhHjkBC41VT4EZCjMuIQEBBQ0mDAcNGRQQAq8OCAsAAQAQAAEB/AJjAFwABrMTAAEyKzcmJjU0NzY3NjMzESMiJyY1NDc2MzMeAhUUBwYHBiMjFTM1IyInJicmNTQ2NzMeAhUUBwYHBiMjETMyFxYXFhUUBgcjJiY1NDc2NzYzMzUjFTMyFxYXFhUUBgcnDQkCBQkIExUVEwgRFAVUUwoGBgMFCQgTFcIVFAcJBQIJDakKBgYDBQkIExUVFAcJBQMJDakNCQIFCQcUFcIVFAcJBQMJDQEFDRMRBAkFAwHLAwgZHwcCBgQPDQ8GCQUDs7MDBQkEERMMBwYEDw0PBgkFA/41AwUJBg8SDgUFDRMRBAkFA8zMAwUJBg8SDgUAAAEASAABAcQCYwAoAAazEQABMis3JiY1NDc2MzMRIyInJjU0NzYzMx4FFRQHBiMjETMyFxYVFAYHXw0KEgY9Pz89BhIVBKemAgkDBQECEgY9Pz89BhIJDQEGDhEbCAMBywMIGx4HAQIGAgYGCgYbCAP+NQMIGxIMBwAAAQA5//UB3wJjADIABrMaBwEyKxI0NzM6AjYyMjMzHgIVFAcGIyMVFAYHBgYjIiYnJjU0NjMyFhUUBxYzMjc2NjU1IyfKFgQDDBAVFhsNcwkHBhEIFhgBBRFePkZZCwIcFxUeBCEoPhwFATIyAh88BwEGBg8LGAsDz6g2DS46LyoGEBkdHRcJDg4pCTCmzgEAAQASAAEB7wJjAFAABrMQAAEyKzcmNTQ3NjMzESMiJyY1NDc2MzMWFRQHBiMjFRQUPwImJjU0NzYzMx4CFRQHBiMjBwcWHwIWFxYVFAcjJiY1NDY3LwIGBxUzMhcWFRQHKRcRBxMUFBMHERcBTEsVEAgSFAFZVxEOEgZGRwkHBhEHFBVFRiMqThITBREWgA0JDRMiPBw2GxQSCBAVAQceGAsDAcsDCxgdCAEMGhgLA3JNJAFxcAUOFBsIAwYGDwsYCwNZWT9NjAEBAgsYHAkFDRMVDwM8bjFGInQDCxgdCAABABkAAAHoAmMAMgAGsxwBATIrEzYzMhcWFAcGIyMRMzU0NzY3NjIXFhcWFAcGBwcjIiYmJyYmNDY3NjMzESMiJyYmNDc2LAVpZwYSEgYjJdsCBQwFJAUMBQICBg7QbzorBgUHAwMHCSAZGSAJBwMCBwJhAgMINggD/jUqKwYMBQICBQwGiAUNBgEBAgQHCCAIBwcBywcHCCAFDAABAAwAAQIAAmMAVQAGsyoGATIrEyYmNTQ3NjMyFhcWFxYVFBcyNTQ3Njc2NzYzMhcWFRQGByMRMxYWFRQHBiMiJyY1NDY3MzU0JwYHBgcGIicmJyYnBhUVMxYWFRQHBiMiJyY1NDY3MxEyFhAUBTY9FAYEJikBATgWBQULCz41BhIQFg8PFhASBEJDBBIQFg8BByElBgw8DAYlIQcBDxYQEgRCQwQSEBYPAhcCDxUdBwIMDAd/jBQEAQQbuUgMCgcGAwgbFQ8C/jUCDxUbCAICCBsVDwLi0gcqb4EJGBgJgW8qB9LiAg8VGwgCAggbFQ8CAcsAAQAUAAAB+AJjAEwABrM3EwEyKzcmJjU0NzY3NjMzESMiJyY1NDc2MhcWFxYXEhcXESMiJyYnJjU0NjczHgIVFAcGBwYjIxEGBwYjIicmJyYnAicnETMyFxYXFhUUBgcrDQkCBQkHFBUVFAcRFAV4BRYKAht7CwMVEwgJBQIIDpwKBgYDBQkHFBUICgYaHgQYCQcWegwDFRMICQUDCQ0BBQ0TEQQJBQMBywMIGR8HAgIEGAlL/p0vCwHDAwUJBBETDAcGBA8NDwYJBQP+AhEFAwEFGRRAAWExC/48AwUJBg8SDgUAAgA4//YB1AJtABIAKgAItSEWDAECMisTNjMzMhYXFhUUBwYGIiYnJjU0BSYmJyIGBwYVFBcWFhcWMzI2NzY1NCcmZiVlDkdHGi4uGEeCRxguATMMKilMLAYCCwcbHRgYNDIJCwUFAkwhCxYt7e4tFQwMFS3u7R4TDAItUhRjei0eHAYEHCgtenMhLAACABMAAQHgAmMALgA7AAi1NjQUAAIyKzcmNTQ2NzYzMxEjIicmNTQ3MzIyNjIzMhYyMxYXFhUUBwYGBwYjIxUzMhcWFRQHEzQmJyYnIxUzNjc2NikWBgsGFxgYFwYRFggIGyApEh1CKwFMMycCC1dCBkVCGBcHERauNykGPTw8PQYpNwEIHRANBgMBywMKGR4HAQEHQjRAEQ5AVgkBmgMLGBwJAaQqPAoBAeUBAQo8AAIAOP92AdQCbQAiAEkACLU8IxQCAjIrBRQHIyYnJicnIyYnJicuAjU0NzYzMzIWFxYVFRQHBgcXFic0JjU0NzYzMhcWFhcXMjc+AjU0JyYmJyYiBw4CFRQXFhYXFjMBxg1ABwcCHB0yQRg8FQ0NAi4lZQ5HRxouFQ4nHh68Jw8CIB4EARUKCwIDDAwCAgQSFxx0Fw4OAgIEEhceLXYLCQIHAjo6AQULKhpdR0TtLSELFi3tGJ46KxE7O7EBTgcPBAEDASgTFAUQSz48TBw+MwsLFw5MQD5OGj8zCwwAAAIAEP/1AgoCYwBQAF8ACLVVUzkTAjIrNyYmNTQ3Njc2MzMRIyInJjU0NzYzMhcWFhcWFRQHBgcHFRYWFxYXFhcWFxYzMjY2NzY3NjIXFhcUBiMiJyY1JycmJyYjIxUzMhcWFxYVFAYHEyYnIxUzNjc2Njc2NTQmJw0JAgUJCBMVFRMIERQFa3gaL0YOBxYRGwgBBQEYCgYBAQIEEAUEAQIFCgYkBhACMSddEQIBAw4vBS0qFRQHCQUDCQ00CCwrKywIHCwJBzMBBQ0TEQQJBQMBywMIGR8HAgYMPisUHC4jHhMHAQEFAhkeEz06CRsRGQULBAMDBxQuQWgINTcIKAoBwAMFCQYPEg4FAhMCAb8BAgUhFQ8TJDIAAAEANP/1AdgCbwBWAAazPhkBMis3FjMyNzY0JyYnJiYnJiY1NDc2MzIXFzY3NjMyFxYUBwYHBiInJjU0JyYjIgYHBhUUFxYXFhcWFxYWFQYGBwYjIicmFQ4EIyInJjU1NDY3NjMyFxaIB40qGCkoEA0EgQQ5TEw2L1MwCw8NBgYZBwICAgUIMggJBxhcJzcKAhAJEw9PRwg3RANcQgcRYzoEAQgECQwIFggCAwYJGRgICahmEx5kHgsEAh4BDlY9VDQfIQciBgIUBaYFBgQJCQcKDRNQJh8ICxgWDgsKEhEDE1tBR14JASYEAgISBgoEEwVSKCYPBgkJCAABABoAAQHyAmMAOQAGszcaATIrNjQ2NzMRIxUUBgcGIyInJicmNTc2NzM6AjYyMjMzFhcWFAcGBwYjIicmJjU1IxEzHgIVFAYHIyaBCQ1FbgIHCBkUBAsFAgEIDgYGFh0mKTEY1BEDAgIFCwQUGQgHAm5GCgYGCQ3fDRMmDAcByyIfDQcIAgUMBT0+EQQBDQcFeAUMBQIIBw0fIv41BgQPDRIOBQUAAf/9//UCEAJjAEYABrMQAAEyKwEeAhUUBwYjIxUUBwYGBwYjIiYnJjU1IyInJjU0NzYzMx4CFRQHBiMjFRQVFhcXFhYXFjI3NjY3NjY3NSMiJyY1NDY2NwH6CQcGEQgWGAEGRzYfIElyBwEYFwYRFgFbWQkHBhEHFxgBBAEILh0GIAYdLggEAQEYFwYRBQcKAmMGBg8LGAsDq68HP2IUDG5TB6+rAwoZHgcBBgYPCxgLA7AaKnIPAyIxCAICCDEiECGXsAMKGQ0OBgUAAQAT//kB+QJjAEIABrMtGwEyKxMUBiMjHgIXFhcXNTY1Njc+AjcjIiY1NDY3Mx4DFRQHBgYjIwMCBwYHBiInJicmAwMjIiYnJjU0NzYzMx4C2Q8XDwINEQU5AwEBAzkEEg0CDxYPCA6aBwUHAgIGDRMSPz8CBw4FPgUOBwI/PhMTDQYCFgFNTAoGBgI9Fw8FN0oT9SsKBAMDKvQSSzkFDxcTDAcEBAkMCQ8EDAf+//79BQ4FAgIFDgUBAwEBBwwEDx4HAQYEDwABAAz/+QIAAmMAVwAGsxMGATIrASImNTQ3NjIXFhUUByMDBgYHBgcjIicmJyYnJjU0IwYVFAcGBwYHBiMjJicmJicDIyY1NDc2MzIXFhUUBiMjFRYXFhcVNzY3Njc2MhcWFxYXFzU2NzY3NQF9GhESBn4GEh4IIxwIBg8CFRUFDAgDCSYBASYJAwgMBRUVAg8GCBwjCB4VBEA9BhIRGhUNEw0FAQMTDwUMRgwFDxMDAQUNEw0CFw8XGwgDAwgbIwP+/dU1BwkBAgUNByqwJQgBCCauKgcNBQIBCQc11QEDAyMeBwEDCBsXDwRFuGtLDBI/XUsNFRUNS10/EgxLa7hFBAABABwAAQHvAmMAWQAGsxYAATIrNyY1NDY3NjMzNzY3NicnIyInJjU0NzYzMx4DFRQHIhQWFxc2NzcjJjU0NjczMhcWFRQGIyMHBxQfAjIXFhQHBiMjJjU0NzcmJicnBwYGFRYzFhYVFAYHMhYGCwYWFzo1BwE1NhcVCBEUBU1NBwUHAh0IGw4OCw4ZCSAJDk1MBhISGxcyMT9AFxYGEhIETk4WHgkBJhMTEhIjBAYSDgkNAQgdEA0GA3twDQNoaAMIGR8HAgQECQwJIwMCNRoaGB02AyMRDQgDCBsXD2hoBHp8AQMINggCBx4jAwEBTycnJydPAQECEBQRDgYAAAEAFAABAfkCYwBKAAazFgABMis3JiY1NDc2NzYzMzUmJicjIicmNTQ3NjMzHgIVFAciFRYXFhUUMjU0Nzc0IyYmNTQ2NjczFhYVFAcGIyMGBgcVMzIXFhcWFRQGB7INCQIFCQcUFRZZFxYVBxAWAU5NCQcGIAkEBkgCRgwJEg0FBwqcDAoRBxUWF1kWFRMICQUDCQ0BBQ0TEQQJBQOpMMExAwsYHgcBBgYPCyIEAQoLoBUDAxaaGgECEBQNDgYFBw4RGAsDMcEwqQMFCQYPEg4FAAEAMAABAeECYwA/AAazHgABMis3JiY1NDc2ADc3IxUUBgcGIyInJicmNTc2NzM6AjYyMjMzHgQVFAcGAAcHMzU0NzY3NjIXFhcWFRQHBgdHDgkCAQEqBQzeAgcIGRQECwUCAQgOBQUTGSIjKxW4AgsCBgECAf7WBQzvAgULBiQGCwUCAgYOAQYNExAFBQG+BhIiHw0HCAIFDAU9PhEEAQIHAwgLCBAFBf5CBhIsLAUMBQMDBQwFRUYFDQYAAQDW/64B4wK2AB8ABrMIAAEyKxcmJxEQNzY3NjMzHgcVFAcGIyMRMzIXFhQH7RAHAgUNBW9vAQcCBQIDAQESBlBRUVAGEhZSBBQBawFsBA8EAgEFAgQDBgUIBBwHA/2PAwg2CgAAAQA6/60B0gK2ABMABrMMAgEyKxM0NjMyFxYAFxYVFAYjIicmACcmOhMQFQsHAUoCAhQOFwoI/rYBAgKTDhUVDv1OBQgEDRYVDwKyBQgAAQAp/64BNgK2ABYABrMPAAEyKxcmNDc2MzMRIyInJjU0NzYzMxYXEQYHQBcSBlBRUVAGEhQFb28SBAURUgk4BwMCcQMHHB0HAgkQ/SkSBgABAGAByQGsAmMAIAAGsw8BATIrEzYzFhceAhcWFRQHBgcGJyYnJwYGIwYnJicmNTQ3Njb9AwgHSBAnEwEKCQkKDgsBODgBbwELDgoJCQoDigJhAgEkCBUKAQYQChARBQcGAR8fAT4GBwUREAoQBgJHAAABADn/oQHU/+cABwAGswYCATIrFjQ3IRYUByE5HQFgHh7+oFY0CQoyCgABALABZQFeAqkAHQAGsw0CATIrARQGIyInJiY1NDc2NzYzFhcWFRQHBgYHFTI2MzIWAUAjGA8LGyBEHBoECAwPDRUgKgMBBwIXIwGeGh8FCz8rXUQcCwIBDw4KEg0QQisOASEAAgAw//oCDAG3ADkARwAItUI7IQYCMisTIiY1NDc2MzIXFhYXFhUVFjMWFxYVFAcGIyImJyYmJwcGIyImNTQ+Ajc2MzM1NCYnJiMiByMGBwYXNSMGBwYVFBYzMjY3Nn4WHhUfVTkIO1cIASkGHgcJEgQkLCgQAwcBCj1PQ1orSU0sKg8FLSMJIiMEBgQDDr0IgTkVNiYtQgkCATIfFh0UHwEKRjQFb20FAQgKExsIAggPAwgBBiRXPCM1HxIEAwUZKAcBARYHG4MkAyUOER4oIxwGAAACAAT/+gHsAmMAKgA4AAi1NS0TAAIyKwUiJwYHBiMiJyYnAxEjJyY1NDc2MzIXFhcWFRU3NjMyFxYXFhUUBwYHBgY3NCYjIgYHBxUWFjMyNgElQzQDBwgZFAQMBQEfHxcXAT47BgsFAgk3SDMvOBYHAQofHFNGRTkiOg4EEC8qNE8GLBYHCAIGDgEAAQABBx4dCAEDBQwFX18GIyIsTRsmHARAKicu3TtXJRsHeyw1UwAAAQBC//oB0gG4AC8ABrMKAAEyKwUiJjU0NzY3NjM2MzIWFxYVFAYjIiY1NSciJiMiBwYGFRQWMzI3NjYzMhcWFRQHBgEjWoc1OFcEBwISOEAUFR4WFR8KARsJFw4zQGJAMxIGDxUTBBMKLgZ+YFBBQgsBAQwTFR0WHx4VBQEBAgtOOj9SNA8JAgcUCxRcAAIAH//6AggCYwAmADgACLUzKSEOAjIrNzQ2MzIXFzUjJyY1NDc2MzIXFhcRMxYVFAcjIicmNTUHBiMiJyYmNxQWMzI3NjY3NSYnJiMiBwYGH3BXPjIJHx8XFwE+OwYKCD8WFj4/BBIJNkEnITZCVEUzRCQDCAERPQwRCwUwQdhZhCAGiAEHHh0IAQMFEf4CDRkcCQIIFwkHKhAZbEg6V0gGEwN4MhIDAQhQAAACADD/+gHQAbgAKAAyAAi1LSkeAQIyKxM3MjMWFhcWFRQGBwcjFxYWMzI3Njc2MhcWFRQHBgYjIiYnJjU0Njc2FyYmJyYjIgcGB/gKCgZVYQcBCgyamQMPWjw7FAULBiQGEgsVWzhLehoOQjgjrAklJQYYMScaCwG3AQJoVwcMEQ4HAQovPTgLBQMDCBMKFSoxUUMiKT5tHBGpKy4JAScaIgABACMAAQG1AmkAOwAGsy0JATIrEzY2NzM1NDc2NjMWFxYVFAYjIiYnNSMGBwYVFTMyFxYUBwYjIxEzMhcWFRQGByEmJjU0NzYzMxEjIicmKwEJDW4GD14+LRYRHRUSHQIKNQ4BQ0EGEhIGQUM7OgYSCQ3+vw4JEgY6Ozc2BhIBixELCB4nEis4AxgTFxUcFhAEBSoEHh0DBzgHA/7pAwgbEgwHBg0SGwgDARcDCAADAB3/GwH9AboAQgBNAGEACrdYT0tFMwgDMisTNDYzMhcXNzYzMhYVFAYjIicmIwYjBgcWFRQGIyInJwYVFBYzNhcyMhYzFhcWFhUUBgcGIyInJjU0NzcnJjU0NycmJTQmIyIGFRQWMjYHJiMiBgcGFRQXFjMyNjc2NTQnJjxkSS0mDQkuKyMvGxQbDwMCAQQHFBdiSyklCQQSDwcFAQ8fFEgaQE9oRxkhf0UlOQUEERMGFwEFMyglMDFOMQEIcCIaDxceNks2YAkCEBUBEkReEwcGGiAdFB0aBwEBCCMuQmAQBQoIERsBAgEBBAxEPD5MCwRDJi9BMwQIHSUYKgsmKigwMiYnMDDwAQcPFx0XFCElHAYFFxIYAAABAAQAAQIIAmMARAAGsyULATIrNzQ3MxEjJyY1NDc2MzIXFhcWFRQzMjY3NjMyFxYXFBUVMxYVFAcjJiY1NDc2NzYzMzU0JyYmIyIHBg8CFTMWFRQHIyYEFz4fHxcXAT47BgsFAgIOQg4JHGQXBQE/Fha+DQkCBgkGFBYBAxwfNyUNBwIBPxYW0RcmGwsBywEHHh0IAQMFDAVhXyYCAlkTUh0Teg0ZHAkFDhIQBQkFA3B0BRwYLRIYCl5eDRkcCQcAAAIASAABAc4CZAALACgACLUmFwgCAjIrEzQ2MzIWFRQGIyImAzQ2NzMRIycmNDc2MzMWFxYVFTMyFxYVFAYHISbKIhgWIyIXGSGCCQ2LQkEWFgFhXxEDAj08BhIJDf6mFgIvFx4fFRYfH/4MEQ4HARcBBzwHAQ0HBaWlAwgbEgwHBwACADD/HAF4AmQACgA4AAi1MCQHAgIyKwE0NjMyFhQGIyImAzIWFRUXMzI3Njc2NjU1IycmNTQ3MzoCNjIyMzMWFxYVFAcGBiMmJicmJzQ2AQUiGBYjIhYZIqEXHQghGgcvDQUBSkkWFgMDCw4TFBgMZxEDAgUSYE0yOhAHARwCLxceHyogH/2LHxYGAQIPNA82pMwBCB0eBwENBwXm8xVCSgIWGw8OGSAAAAEADQABAfsCYwBTAAazSR8BMisBIiY1NDc2MzMeAxUUBwcjBgYHFhcXMx4DFRQHIyY1NDY3NycmJicnBwcVMzIXFhQHBiMiJyY0NzYzMxEjIicmNTQ3Njc2MzIXFhcXFRc2NwETGhESBmdpBwUHAhUhIRJGETwKQDsHBQcCFawWDxMMMAsZBgYjIiEgBhISBGZnBBISBiAhISAGEgIICwQ5NgYLBAMBOz4BYw8XGwgDBAQJDAkdCAERQxFQDVUEBAkMCR0IBx4UEQEBPw4iCAghID8DCDYIAgIINggDAcsDCBsPBQ0EAQMECwSwsDw6AAEAMwABAdoCYwAhAAazFQcBMisTNDczOgI2MjIzMxYXETMeAhUUByEmNTQ2NjczESMnJjMWAwMLDhMUGAxnEgSUCQcGFv6FFgUHCpNKSRYCPR4HAQkQ/gIGBg8LHAkIHQ0OBgUBywEIAAAB//QAAQIYAbQAWQAGsxoFATIrNxYWFRQHIyY1NDY3MxEjJicmNTQ3MzIXFhc2MzIXNzYzMhcWFxYXFTMWFhUUByMmJjU0NzM1NCYnJiMiBgcGFRUzFhYVFAcjJiY1NDczNTQmJyYjIgYHBhUVhRcQFYwXEBgRERIFERcpKAYNBTMhOBkGKT0lFhcHAQERFxAVdw0JHAcCBgkRIScEAREXEBV3DQkcBwIGCREhJwQBTAIOFh0IBx4VDwIBFwECCxgbCwMGER8uBSkZFzIEg38CDhYdCAUOEiMDc2UpDQ85KAZdWQIOFh0IBQ4SIwNzZSkNDzkoBl1ZAAEABAABAggBtAA+AAazFwoBMisTNDczMhcWFRczNjMyFxYXFBUVMxYVFAcjJiY1NDc2NzYzMzU0JyYmIyIHBg8CFTMWFRQHIyY1NDczESMnJgQXPjwGEgEBPD9sFwUBPxYWvg0JAgUKBhQWAQMcHzclDQcCAT8WFtEXFz4fHxcBiRsLAwgVBSpZE1IdE3oNGRwJBQ4SEAQKBQNwdAUcGC0SGApeXg0ZHAkHHhsLARcBBwACADT/+gHYAbgAFgAkAAi1HxkNAQIyKxM2MzIXFhcWFRQHBgcGIyInJicmNDc2BTQmIyIGFRQWMzI2NzZ0Q04xKGUTAhkxahAOOzRQEQICDAFCSDc1SEY4HTYOHQF5PxUzdhASOi5hEwIiNGYQJBBMZTlSVDc9XiEXLAAAAgAE/yMB7AG1ACwAOgAItTcvIgoCMisTNDczMhcWFRU3NjIWFxYVFAcGBwYjIicmJiMiFRUzFhUUByMmNTQ3MxEjJyYFNCYjIgYHBxUWFjMyNgQXPjwGEgk3iF4SBwEKHzxjGx4FLgkBPxYW0RcXPh8fFwGVRTkiOg4EEC8qNE8BiRsLAwcUBQYjWkEbJhwEQCpVCgIfW1wNGRwJBx4bCwH1AQeUO1clGwd7LDVTAAACACL/IwIhAbUAKgA7AAi1Ny0YBQIyKzc0NjcyNjMyFxc1NDYzMhYXETMyFxYUBwYiJyY0NzYzMzU0IgcGIyImJyY3FBYzMjc2NzY1NScmIyMGBiJtTwIOBEU1CBIYFQ8GISAGEhIE2gQSEgYgIQIIOkRPbQ0BU1A1Dwg8HgkBH1YJNkrXW3kJASkGCxISCg/90gMINggCAgg2CANfXgYrbU4IGj5TAg09ER0XMGEHTgAAAQAYAAEB5wG1ADMABrMmCwEyKxMeBRQWFRU2MzIXFhUUBiMiJicnBgcGBgcGFRUzMhcWFRQHISY1NDczESMnJjU0N88CBwIFAgMBRGE/GAYcFRMaBAErFScyBQFAPwYSFf7IFxdiMTEXFwGvAQYBBQMGBwkGEkQrDgwVHhYTAwULE0gtBkE+AwgbHQgHHhoMARcBBx4aDAABAEj/+gHKAbgAUQAGszsQATIrJTI1NCcmJyYnJjU0NzY3MjYzFhcXMjc2MzIXFhUUBwYGIyImJyYnJiMiBwYVFBcWFxYXFhcWFRUUBwYGIyInJiMGBwYiJyY1NDY3NjMyFxYXFgEEfCEXSEYVXR8nVwIcCTsbCQEHChAWCAICBBAUFxIBARMTMTUfGg0YL2AeUhECBQ9fSEcvCAEDAwwsCAICBwkZFQgGBxdGOxcRDAsMCCBJKx8oCAEDCwMHChMFMjEFDAcMExUICw8MFA0JEAcQCR4/CBEIChQuMxsFBQYVEwU9NRIHCQYEEEMAAQAZ//oBwAIqADoABrMaBQEyKyUyFhUUBiMiJyYnJjU1IyInJjU2NjczNTc2NjMyFxYXFhUVMx4HFRQHByMVFBcWMzI3Njc2AZcZEGNDOiUjBgExLwYSAQkNYQEHEBQQBgsFArABBwIFAgMBARZYWAEHOjsLAQkItg0VQVklIz4GcWwDCB0RCwgyMw0JAwUMBTExAQUCBAMGBQgEGgsBam0FQU8SBwgAAQAE//sCCAGvADcABrMXCQEyKyUUByMiJyYnBwYjIicmJjU1IycmNTQ3NjMyFxYXFxUXFjMyNzY2NTUjJyY1NDczMhcWFxYVFTMWAggWPj8EDQUJMUJsFwUCHx8XFwE+OwYLBAMBCD5LGQUCHx8XFz48BgsFAj8WJhwJAgYRBRpIDydqgAEHHh0IAQMECwSbmh4xCx1ZawEHHhsLAwUMBaWlDQABABj//AH0Aa8ANQAGswwAATIrARYVFAcHIwcGBwYHByIiIycmJyYnJyMnJjU0NzYzMx4CFRQHBiMjFxc2NzcjIicmNTQ2NjcB3hYWGho0NgIJFAoKDgoKFAkCNjQaGRcUBVNTCQcGEQgTFS0tFRgtFRQGEQUHCgGvDRkcCQGlpgQSBQEBBRIEpqUBBx0eBwIGBg8LGAsDi4s+TYsDChkNDgYFAAEAEP/8AfwBrwBhAAazRwYBMisTIiY1NDc2MzIXFhQHBiMiFRYXFhUVNjc2NzY3NjczMhcWFxYXFhUUMzU0NjU2NzY1NCMiJyY0NzYyFxYVFAYjBxQGBgcGBwYjIicmJyYmNTQHBhUGBgcGBiMnJicnJiY1JjYWEBUEVFEGEhIGICEEBR8BAQMWCAIEFxMSBwwIBAYYAQEDHAchIAYSEgamBhIQFg8cHQIGDAgTFgYVBgkWAQEBGAgHFRsYEgYPDxwHAWMRFR4HAQMINggDARoguhUFAQsgUBoDCA4DBAwHFVQkCAICBgMsqigDAQMINggDAwgbFREBAaWoBAsGAwIHERliGAcHAwQdZg0OCAEJC1VWpQEBAAABAB0AAQHvAa8AYQAGsykJATIrExc3NCMmNTQ3NjMzHgcVFAcGIyMHBhUiFh8CMhcWFxYVFAcjJjU0NjcyNSYnJwcHFjMWFhUUByMmJjU0NjY3Mzc2NSYnJyMiJyYnJjU0Njc2MzMeAxUUByLRMzAHHhIGUVMBBwIFAgMBARIGICEwMQEeGjciIAYJBgMWqhYNEwssDgcfHwUHEw4Vqg0JBgYKQjY1FxsyIiAGCgUCCQ0BU1IHBQcCHAcBYkREAQMjGwgDAQUCBAMGBQgEHAcDQUECKCJIAQMFCQcOHAkIHRQQAgFCFAowMAECDxUdCAUOEg0PBAZJSQEeJEIDBQoEEBIOBQEEBAkMCSMDAAABABr/HAH0Aa8AVQAGs0ELATIrNzQmJicjJyY1NDc2MzMeAhUUBwYHBiMHFRcWFhcWFxU3Njc0IyInJjU0NzMeBxUUBwYjIgcGAgcGBwYjIiY1NDYzMhYVFSMHBhYzNjc2NuwzQxAbGhcXAVRTCgYGAwUJBxISAgIJBEUGAwtDFRMIEBaoAQcCBQIDAQESBhgaAQWKAihIFRYjMB0WFR4SAgMCBzQZBBkBAYawKwEHHh0IAQYEDw0PBgkFAwEBBgYXCrkiBQs5ygEDCxgcCgEFAgQDBgUIBBwHAwIQ/lYFZRkIMyYXHRsVAwUHAgU8CUwAAAEAIgABAdsBrwBEAAazIQABMis3JiY1NDQ+Azc2NjcjFRQHBiMiJyYnJjU3NjczOgI2MjIzMx4FFRQOAgcGBgczNTQ3NjMyFxYXFhUUBwYHOA4IAQECAwIX/RbQCQgZFAQLBQIBCA4GBRMaISQsFbwCCQMFAgEBAQYCIf4L4wkJGBIGCwUCAgYOAQUOFQcHBQQCBQIX7RYVHAkIAgUMBTAwEQQBAgUDBgYLBwoKAwcDIe4LGyEKCQMFDAU0NQUNBgAAAQAy/60B2wK2AD8ABrMnBgEyKwUyFhUUBwYjJicmLwI1JyYnJiYnJicmNTQ3Njc2Njc2Nzc1NzY3NzIzMhcWFAcGIyIHBxQHBgcHFxYXFhUXFgGuGxITBSAoHWsUAgEDD0sENgIKBQICBQoCNgRLDwMBFJoLDAggCAkJCBxuDwECCygICCgLAgENBw8XHQcCAQQQRQplZgUfCQEDAQMKBRIRBQoDAQMBCR8GZWZbBwEJCSgJCR9lYwYuGAUGGC0IYmQgAAEA5P+uASkCtgAJAAazBwEBMisTNjMyFxEHBiIn5A0VERIECSwMApwaGv0rBhMZAAEAMf+tAdsCtgBHAAazJAEBMisTNjMWFxYWFxYUFxYXMhYWFxYVFAcGBw4CIwYHBhQHBwYHBgciJicmNTQ3NjMyNzc1NDc2NzcmJyYnJjU1JyYjIicmNTQ3NkUEIScdOj4JAQEMUAMdGgISAwUKAhodA04OAQECFGscKBwNBwkJCBxsDwMCCygIBAQoCwIDD2wcCAkJBgK0AgEECS0oIociJQkCAgEGHRAHCgMBAgIJJCKHIgpFEAQBAgcJFRQICRsFZGIILRgGAgMYLgZjZQQbCQgUFQkGAAEAVwB0AbUBBQAjAAazEwEBMisTNjMyFxYzMjc2MzMyFxYVBgcGByInJiMiBwYjIyInJjU2NzbRCgUjHA0EDzAQDQQKDg0BF0ErKhoNBA8wEAwECw4NARc9AQMCKRMrEA4ODgsXQQMpEysQDg4OCxc7AAIAaAIHAaUCZAAMAB0ACLUZFAkCAjIrEzQ2MzIXFhUUBiMjIjc0NjcyNjM2MxYWFRQjIyImaBwXFAUlHRYHN8sXEAIFAQEMGB44BxYdAjUWGAELIhQaLhEZAwEBARgWLhsAAgBoAgcBpQJkAAwAHQAItRkUCQICMisTNDYzMhcWFRQGIyMiNzQ2NzI2MzYzFhYVFCMjIiZoHBcUBSUdFgc3yxcQAgUBAQwYHjgHFh0CNRYYAQsiFBouERkDAQEBGBYuGwACALUB8wFXAmsADQAYAAi1Ew4JAgIyKxM0NjMyFxYVFAYjIicmFzI2NTQmIyIGFBa1MiAnGBEyICgXEVEQGBgOEBoaAi4cIRgREhwhGRELEA4MEBAaEAAAAQCb/ywBsgAyACsABrMaAAEyKxcuAjU0NzY2NzY3NjU0JicuAzU0NzY3NjMyFxYfAhYXFhUUBwYHBiOyCgcGCQcOJD4fJSUaCgsIBgEDEAUTDwgQAQELOBUIAhZvHDnUBQUPDRQIBwIBAQcIERATAgEDBwwhIwMPBQIDChYLBBIrEBkRCEUMBAAAAQBIAAEBzgGvABwABrMaCwEyKzc0NjczESMnJjQ3NjMzFhcWFRUzMhcWFRQGByEmSAkNi0JBFhYBYV8RAwI9PAYSCQ3+phYmEQ4HARcBBzwHAQ0HBaWlAwgbEgwHBwAAAQAw/xwBeAGvAC0ABrMlGQEyKxcyFhUVFzMyNzY3NjY1NSMnJjU0NzM6AjYyMjMzFhcWFRQHBgYjJiYnJic0NmQXHQghGgcvDQUBSkkWFgMDCw4TFBgMZxEDAgUSYE0yOhAHARxbHxYGAQIPNA82pMwBCB0eBwENBwXm8xVCSgIWGw8OGSAAAAEAYAHJAawCYwAgAAazDwEBMisTNjMWFx4CFxYVFAcGBwYnJicnBgYjBicmJyY1NDc2Nv0DCAdIECcTAQoJCQoOCwE4OAFvAQsOCgkJCgOKAmECASQIFQoBBhAKEBEFBwYBHx8BPgYHBREQChAGAkcAAAEAYgHBAaoCQQAYAAazEQEBMisTNjMyFxc3NjMyFxYWFRQHBgYiJicmNTQ2cgoJBz48PDwHDQcEDQ8JgxKHBQ8MAjcKGBcXFwgDHgoWBQQtLgMFFgkeAAABAEkB9AHDAkEADgAGswYAATIrEyYmJzQ3NjMzHgIVFAdgDAoBFAWmpQkGBxYB9AUOESEGAgcFEAscCgABAMIB5QGYAmMAEwAGswkAATIrEyImNTQ3NjcyNjMWFhUUBgcGBwbkDxMPCYkBCQMSFgwJA0pIAeUkEBMHBikBAhgQCxYDAxYXAAEAdAHlAUoCYwASAAazDAUBMisTNDY3MjYzFhcWFRQGIyInJicmdBIOAQgDlgUPEw8KSEoDFQI5DxYEASsFBxMQJBcWAwoAAAEATwH4Ab4CYwAcAAazBQABMisBMhUGBwYrAiImJyY1NDYzFhcWFxYyNzY3Njc2AZgmAiMlWxMOPz8ZEhMUGwYDDRKaEg0DBQoGAmMiJRISChUTGRIOAw8EAgQEAgQMAwMAAQA5/6EB1P/nAAcABrMGAgEyKxY0NyEWFAchOR0BYB4e/qBWNAkKMgoAAgC1AfMBVwJrAA0AGAAItRMOCQICMisTNDYzMhcWFRQGIyInJhcyNjU0JiMiBhQWtTIgJxgRMiAoFxFREBgYDhAaGgIuHCEYERIcIRkRCxAODBAQGhAAAAEAVwHSAbUCYwAjAAazEwEBMisTNjMyFxYzMjc2MzMyFxYVBgcGByInJiMiBwYjIyInJjU2NzbRCgUjHA0EDzAQDQQKDg0BF0ErKhoNBA8wEAwECw4NARc9AmECKRMrEA4ODgsXQQMpEysQDg4OCxc7AAEAMf+tAdsCtgBHAAazJAEBMisTNjMWFxYWFxYUFxYXMhYWFxYVFAcGBw4CIwYHBhQHBwYHBgciJicmNTQ3NjMyNzc1NDc2NzcmJyYnJjU1JyYjIicmNTQ3NkUEIScdOj4JAQEMUAMdGgISAwUKAhodA04OAQECFGscKBwNBwkJCBxsDwMCCygIBAQoCwIDD2wcCAkJBgK0AgEECS0oIociJQkCAgEGHRAHCgMBAgIJJCKHIgpFEAQBAgcJFRQICRsFZGIILRgGAgMYLgZjZQQbCQgUFQkGAAEAGQAAAegCYwAwAAazGwEBMisTNjMzFhcWFAcGBwYjIicmJjU1IxEzMhcWFAcGIyImJyYmNDY3NjMzESMiJyYmNDc2LAXR0BEDAgIFCwQUGQgHAtslIwYSEgZmVhsHBwMDBwkgGRkgCQcDAgcCYQINBwV4BQwFAggHDR8i/jUDCDYIAwIFBwggCAcHAcsHBwggBQwAAAIAIwAAAekCbwAYACcACLUjHRADAjIrEzMyNjMzHgMXFhIVFAcGICcmNTQSNzYXJiY1JjEHFAcGBzMmJyboBQUPBx0CCgYHAQOnEAL+XgIQpwMJNQEDAQEyRQT4AShAAm4BAQcEBgQE/c0PCggBAQgKDwIzBA9zBA8BBQMPsPEJAozXAAMAOP/2AdQCbQASACsATwAKt0AuHxQMAQMyKxM2MzMyFhcWFRQHBgYiJicmNTQFJiIHDgIVFBceAjMyPgI3NjU0JyYmBzY2MxYXFhUUMjU0NzYzMhYXFQYGIyInJjU0IhUUBwYjIiYnZiVlDkdHGi4uGEeCRxguARkcdBcODgICBBIuNCctGQgDAgIEErUFExQUCQkCCQgYFQ0IBw4VGAgJAgkIGBUPBQJMIQsWLe3uLRUMDBUt7u0JCxcOTEA+Tho/MxYMJCwsGk5MHD4zpw0JAQgHBwICBwcIBw5kDggIBwcCAgcHCAgOAAEAHgABAe8CbwBDAAazEgABMis3JjU0Njc2MzI1NhISNzY3MzI2MzMWFxYSEhUWMzIXFhUUByMmNTQ3NjcyNTQmJicmNTQnIhUUBw4CFRQzFhcWFRQHNBYGCwYREgE4OQMIEgUFEAceFQQCOjgBEhAIERagFwkHGRMMEgQ1AQE1BBIMExkHCRYBCB0QDQYDAgEBAQEFBQ8FAQ4HBP77/v4BAgMLGBwJCRwTCggBAgE0UhH7JwYBBiX+EVI0AQIBCAoTGwoAAAMAIQABAesCYwAqAEoAZQAKt1xLNS0NAAMyKwEeAxQWFBQVFAYHBiInJjU1IRUUBwYjIicmJyY1NDc2NzM6AjYyMjMDFAcjJicmNDc2NzMWFRUzNTQ3MxYXFhQHBgcjJjU1IwcWFhUVITU0NjIXFhYVFAcGByEmJyY1NDc2NgHRAwgDBQMCBwgyCAn+5gkIGRQECwUCAwcNBgUVGyUmLxdHFyYRBAICBBEmF4oXJhEEAgIEESYXinQXEQEiEjAJBwICBg7+Yw4GAwEGEAJjAgYCBQQGCwsKHA0HCAgJEAgIEAkIAgUMBSEgBg4DAf6yEwsIDAVcBQwICxMFBRMLCAwFXAUMCAsTBaMBDhULCxISCQcNHyIFDQYFDAYiJAQNCAAAAQAQAAEB/AJjAEMABrMTAAEyKzcmJjU0NzY3NjMzESMiJyY1NDc2MzMeAhUUBwYHBiMjETMyFxYXFhUUBgcjJiY1NDc2NzYzMxEjETMyFxYXFhUUBgcnDQkCBQkIExUVEwgRFAXf3goGBgMFCQgTFRUUBwkFAwkNqQ0JAgUJBxQVwhUUBwkFAwkNAQUNExEECQUDAcsDCBkfBwIGBA8NDwYJBQP+NQMFCQYPEg4FBQ0TEQQJBQMBy/41AwUJBg8SDgUAAAEAKAABAeQCYwA9AAazMgcBMisTNjczOgI2MjIzMxYXFhQHBgcGIyInJiY1NSMXFhYXFgcHMzU0Njc2MzIXFhcWFAcGByEmNTQ3NjY1NCYmKAIVBQYUHCMnLhbGEQMCAgULBBQZCAcC9yAgQwIGBX7vAgcJGBIGCwUCAgYO/nEWAgKWmQICPxsIAQ0HBXgFDAUCCAcNHyI0NGwEDQzYIh4OBwkDBQwFegUNBgkVCAUC/AUE9wYAAQAmAAEB5gJuAD0ABrMnCwEyKxM0NjczMhYXNjY3NjMyFhUUBwYjIiYnJiYjIgcGBwYHFTMeAhUUByMmNTQ2NjczNSY1JicmIgcGBwYGIiYmPC0JNS8KAQUBF0kzRhEFExkPAgIQFAkGIAkEATYJBwYWvxYFBwo1AggkBhIFFQMBEDIQAe4xRghEPQQUBmRMNBgJAg0XIB8DD1sjr6MGBg8LHAkIHQ0OBgWjrwR4EQMCDDEXDQ0AAAMAKQABAeMCYwBPAF4AbAAKt2RgXFEwBgMyKxI0NzMyMjYyMzMeAxUUBwcjFTMXMhYzFhYXFhUUBwYGByIGByMjFTMeAxUUByMmNTQ2NzM1IyMmJiMmJicmNTQ3NjY3MjYzNzM1IycXNSMiBgcGFRQXFhcWMzI3JiMiFRQzMjY2NTQnJosWBQYUGCEPZAcFBwIVHh4CAgIFAjhfDQICDV45AgUCAgI8BwUHAhXLFgkNOwICAgQCOV8NAgINXzkCBAICAh4dOwITOQkJBxE4CgQCZAoEAgISOhIHEQIfPAcBBAQJDAkdCAFeAQEIPSgJDxAIKT0IAQFeBAQJDAkdCAceEQ4HXgEBCDwqCBAPCSk8CAEBXgHmOhkKCwwKChoKA3IDOjsZFA0KChoAAAEAJQABAecCYwBdAAazRRUBMisTMhYXFBYVFhYXFjMyNTUjJyY1NDc2MzMeAhUUBwcjFRQzMjc2Njc0NjU2NjMWFxYVFAYHBgcGBwYHBiMjFTMeAhUUByMmNTQ2NjczNSMiJyYnJicmJycmJjU2Nk0kIQYCAhIYEQQBGxoWFgFgXgkHBhYbGwEDEhgSAgIGISQXCAkNDwQBAxQgTwkFAjYJBwYWvxYFBwo1AgUJTyAUAwIBAREMAg8B2x4iAhsKLTIQCo6OAQgdHgcBBgYPCxwJAY6OChAxLgobAiIeAQgJFBIQBQ8UPiZEFANgBgYPCxwJCB0NDgYFYAMURCY+GQMHBRAUFQ8AAAEAIAABAewCbgBbAAazIAIBMisTNDYzMhcWFhUUBwYHBgcGFRQzMzU0MzIXFhYVFAcGBwYjIyYnJjU0NjY3Njc2NTQmJyYjIgYHBhUUFxYXHgIXFAcGBwYjIyYnJzQ3NjMyFRUzMjU0JyYnJicmKH9bGRtJZQQIKxsKChQTJBEJBwICBQsESUkOBgIQERIcCglAMQwNNUgKAwkKHBIQEAICBQsESUkQBgECCRkjFBMKChsxBQEBlFmBBQ9zURgXNGI+HiEGAgskCQcOICQFDAUCBQwEER9HLixFJyQeN0sJAj8wDREeJCdFLStEIREFDAUCBhAlJgUUJAsCBiEePnE9BwAAAQCwAWUBXgKpAB0ABrMNAgEyKwEUBiMiJyYmNTQ3Njc2MxYXFhUUBwYGBxUyNjMyFgFAIxgPCxsgRBwaBAgMDw0VICoDAQcCFyMBnhofBQs/K11EHAsCAQ8OChINEEIrDgEhAAEArwEfAV0CYwAaAAazDAIBMisSNDYzMhcWFhUUBgcGIyYmNTQ3NjY3NSIGIyLNIBoMDxsgPTEPCgodFSAqAwEHAhcCETIgBQs+Kz9mHQkBHAsSDRBCKw4BAAEA0wFOATkCbwAVAAazDgIBMisTNDYzMhcWFRQHBgYHBgYiJicmJicm0x0WHxAEBgYDBQcIIAgHBQMGBgI8Fh0dCA0MYFsYBwcCAgcHGFtUAAABACz/dQHgAPgALgAABQYHISYnJzU8AjY2NDY0Njc2MzIXFjIWFBUVITU8AjY0NjQ3NzYyFxcWFxQVAeAIDf53DwYBAQECAwEJDQsJBAEDAUABAwICCRgJAgUBdhEEBw6qVxIZFQwLBQQBAgEJCQQTICTm5hIYFAsIBQECAgkJAgQsESEAAAEAAACCAHwABQAAAAAAAgAAABgAjQAAACAODAAAAAAAAAASABIAEgASAEMAgwEoAbkCQALbAwgDPwNzBAYEOARlBHsElAS7BPsFOwWTBgkGXwbIBzMHdwfjCEkIcwiuCN4JBgk0CYgJ8wplCtkLJwtqC9wMQgyuDS4Naw2zDiMOcQ7rD10Pow/7EGoQ9xF0EccSLRKRExITkRP6FFgUixSyFNoVExUoFVoVxBYdFmQWuhcLF2IX7xhQGJEY5hleGZMaDxpoGqYa/htXG6McGhxuHMAdEh2eHiUenh7/H2EfeR/lIB4gTyBPIIAgrCDxISEhZSGeIcoh6CINIjEiYiJ3IqMi3CNII5Mj1SRKJK0lPiWgJfsmVybtJ3En8yglKFIoeyi+AAAAAQAAAAEAAJq59PJfDzz1AA8D6AAAAAAAAAAAAAAAAAAAAAD/9P8bAiECtgAAAAgAAgAAAAAAAAD6ADIAAAAAAU0AAAINAAAAzgB6ACQAOgAjABwArwCmAFcARAAmAKwAOQDBADoAKgBjADQALAAdADQALQAsAC0ALgDBAK8AOQAmADkAPgAsABwAEQAoABAAEwAWACYAEABIADkAEgAZAAwAFAA4ABMAOAAQADQAGv/9ABMADAAcABQAMADWADoAKQBgADkAsAAwAAQAQgAfADAAIwAdAAQASAAwAA0AM//0AAQANAAEACIAGABIABkABAAYABAAHQAaACIAMgDkADEAVwBoAAAAaAC1AJsASAAwAGAAYgBJAMIAdABPADkAtQBXADEAGQAjADgAHgAhABAAKAAmACkAJQAgALAArwDTACwAAQAAArb/GwBaAg3/9P/sAiEAAQAAAAAAAAAAAAAAAAAAAAQAAgINAZAABQAAAooCvAAAAIwCigK8AAAB4AAxAQIAAAAAAAAAAAAAAACAAADvEADs7QAAAAAAAAAAUGZFZABAACAkIwMg/zgAWgK2AOUgAACPXgMAAAGvAmMAAAAgAAEAAAACAAAAAwAAABQAAwABAAAAFAAEAMgAAAAuACAABAAOAH8AoACoALAAuAExAjcCxwLLAtoC3QOUA5gDmwOeA6ADowOmA6kgGSAyJCP//wAAACAAoACoALAAuAExAjcCxgLJAtgC3AOTA5gDmwOeA6ADowOlA6ggGCAyJCP////j/8P/vP+1/67/Nv4x/aP9ov2W/ZX84Pzd/Nv82fzY/Nb81fzU4GbgTtxeAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAsILAAVVhFWSAgS7gADlFLsAZTWliwNBuwKFlgZiCKVViwAiVhuQgACABjYyNiGyEhsABZsABDI0SyAAEAQ2BCLbABLLAgYGYtsAIsIyEjIS2wAywgZLMDFBUAQkOwE0MgYGBCsQIUQ0KxJQNDsAJDVHggsAwjsAJDQ2FksARQeLICAgJDYEKwIWUcIbACQ0OyDhUBQhwgsAJDI0KyEwETQ2BCI7AAUFhlWbIWAQJDYEItsAQssAMrsBVDWCMhIyGwFkNDI7AAUFhlWRsgZCCwwFCwBCZasigBDUNFY0WwBkVYIbADJVlSW1ghIyEbilggsFBQWCGwQFkbILA4UFghsDhZWSCxAQ1DRWNFYWSwKFBYIbEBDUNFY0UgsDBQWCGwMFkbILDAUFggZiCKimEgsApQWGAbILAgUFghsApgGyCwNlBYIbA2YBtgWVlZG7ACJbAMQ2OwAFJYsABLsApQWCGwDEMbS7AeUFghsB5LYbgQAGOwDENjuAUAYllZZGFZsAErWVkjsABQWGVZWSBksBZDI0JZLbAFLCBFILAEJWFkILAHQ1BYsAcjQrAII0IbISFZsAFgLbAGLCMhIyGwAysgZLEHYkIgsAgjQrAGRVgbsQENQ0VjsQENQ7ACYEVjsAUqISCwCEMgiiCKsAErsTAFJbAEJlFYYFAbYVJZWCNZIVkgsEBTWLABKxshsEBZI7AAUFhlWS2wByywCUMrsgACAENgQi2wCCywCSNCIyCwACNCYbACYmawAWOwAWCwByotsAksICBFILAOQ2O4BABiILAAUFiwQGBZZrABY2BEsAFgLbAKLLIJDgBDRUIqIbIAAQBDYEItsAsssABDI0SyAAEAQ2BCLbAMLCAgRSCwASsjsABDsAQlYCBFiiNhIGQgsCBQWCGwABuwMFBYsCAbsEBZWSOwAFBYZVmwAyUjYUREsAFgLbANLCAgRSCwASsjsABDsAQlYCBFiiNhIGSwJFBYsAAbsEBZI7AAUFhlWbADJSNhRESwAWAtsA4sILAAI0KzDQwAA0VQWCEbIyFZKiEtsA8ssQICRbBkYUQtsBAssAFgICCwD0NKsABQWCCwDyNCWbAQQ0qwAFJYILAQI0JZLbARLCCwEGJmsAFjILgEAGOKI2GwEUNgIIpgILARI0IjLbASLEtUWLEEZERZJLANZSN4LbATLEtRWEtTWLEEZERZGyFZJLATZSN4LbAULLEAEkNVWLESEkOwAWFCsBErWbAAQ7ACJUKxDwIlQrEQAiVCsAEWIyCwAyVQWLEBAENgsAQlQoqKIIojYbAQKiEjsAFhIIojYbAQKiEbsQEAQ2CwAiVCsAIlYbAQKiFZsA9DR7AQQ0dgsAJiILAAUFiwQGBZZrABYyCwDkNjuAQAYiCwAFBYsEBgWWawAWNgsQAAEyNEsAFDsAA+sgEBAUNgQi2wFSwAsQACRVRYsBIjQiBFsA4jQrANI7ACYEIgYLcYGAEAEQATAEJCQopgILAUI0KwAWGxFAgrsIsrGyJZLbAWLLEAFSstsBcssQEVKy2wGCyxAhUrLbAZLLEDFSstsBossQQVKy2wGyyxBRUrLbAcLLEGFSstsB0ssQcVKy2wHiyxCBUrLbAfLLEJFSstsCssIyCwEGJmsAFjsAZgS1RYIyAusAFdGyEhWS2wLCwjILAQYmawAWOwFmBLVFgjIC6wAXEbISFZLbAtLCMgsBBiZrABY7AmYEtUWCMgLrABchshIVktsCAsALAPK7EAAkVUWLASI0IgRbAOI0KwDSOwAmBCIGCwAWG1GBgBABEAQkKKYLEUCCuwiysbIlktsCEssQAgKy2wIiyxASArLbAjLLECICstsCQssQMgKy2wJSyxBCArLbAmLLEFICstsCcssQYgKy2wKCyxByArLbApLLEIICstsCossQkgKy2wLiwgPLABYC2wLywgYLAYYCBDI7ABYEOwAiVhsAFgsC4qIS2wMCywLyuwLyotsDEsICBHICCwDkNjuAQAYiCwAFBYsEBgWWawAWNgI2E4IyCKVVggRyAgsA5DY7gEAGIgsABQWLBAYFlmsAFjYCNhOBshWS2wMiwAsQACRVRYsQ4GRUKwARawMSqxBQEVRVgwWRsiWS2wMywAsA8rsQACRVRYsQ4GRUKwARawMSqxBQEVRVgwWRsiWS2wNCwgNbABYC2wNSwAsQ4GRUKwAUVjuAQAYiCwAFBYsEBgWWawAWOwASuwDkNjuAQAYiCwAFBYsEBgWWawAWOwASuwABa0AAAAAABEPiM4sTQBFSohLbA2LCA8IEcgsA5DY7gEAGIgsABQWLBAYFlmsAFjYLAAQ2E4LbA3LC4XPC2wOCwgPCBHILAOQ2O4BABiILAAUFiwQGBZZrABY2CwAENhsAFDYzgtsDkssQIAFiUgLiBHsAAjQrACJUmKikcjRyNhIFhiGyFZsAEjQrI4AQEVFCotsDossAAWsBcjQrAEJbAEJUcjRyNhsQwAQrALQytlii4jICA8ijgtsDsssAAWsBcjQrAEJbAEJSAuRyNHI2EgsAYjQrEMAEKwC0MrILBgUFggsEBRWLMEIAUgG7MEJgUaWUJCIyCwCkMgiiNHI0cjYSNGYLAGQ7ACYiCwAFBYsEBgWWawAWNgILABKyCKimEgsARDYGQjsAVDYWRQWLAEQ2EbsAVDYFmwAyWwAmIgsABQWLBAYFlmsAFjYSMgILAEJiNGYTgbI7AKQ0awAiWwCkNHI0cjYWAgsAZDsAJiILAAUFiwQGBZZrABY2AjILABKyOwBkNgsAErsAUlYbAFJbACYiCwAFBYsEBgWWawAWOwBCZhILAEJWBkI7ADJWBkUFghGyMhWSMgILAEJiNGYThZLbA8LLAAFrAXI0IgICCwBSYgLkcjRyNhIzw4LbA9LLAAFrAXI0IgsAojQiAgIEYjR7ABKyNhOC2wPiywABawFyNCsAMlsAIlRyNHI2GwAFRYLiA8IyEbsAIlsAIlRyNHI2EgsAUlsAQlRyNHI2GwBiWwBSVJsAIlYbkIAAgAY2MjIFhiGyFZY7gEAGIgsABQWLBAYFlmsAFjYCMuIyAgPIo4IyFZLbA/LLAAFrAXI0IgsApDIC5HI0cjYSBgsCBgZrACYiCwAFBYsEBgWWawAWMjICA8ijgtsEAsIyAuRrACJUawF0NYUBtSWVggPFkusTABFCstsEEsIyAuRrACJUawF0NYUhtQWVggPFkusTABFCstsEIsIyAuRrACJUawF0NYUBtSWVggPFkjIC5GsAIlRrAXQ1hSG1BZWCA8WS6xMAEUKy2wQyywOisjIC5GsAIlRrAXQ1hQG1JZWCA8WS6xMAEUKy2wRCywOyuKICA8sAYjQoo4IyAuRrACJUawF0NYUBtSWVggPFkusTABFCuwBkMusDArLbBFLLAAFrAEJbAEJiAgIEYjR2GwDCNCLkcjRyNhsAtDKyMgPCAuIzixMAEUKy2wRiyxCgQlQrAAFrAEJbAEJSAuRyNHI2EgsAYjQrEMAEKwC0MrILBgUFggsEBRWLMEIAUgG7MEJgUaWUJCIyBHsAZDsAJiILAAUFiwQGBZZrABY2AgsAErIIqKYSCwBENgZCOwBUNhZFBYsARDYRuwBUNgWbADJbACYiCwAFBYsEBgWWawAWNhsAIlRmE4IyA8IzgbISAgRiNHsAErI2E4IVmxMAEUKy2wRyyxADorLrEwARQrLbBILLEAOyshIyAgPLAGI0IjOLEwARQrsAZDLrAwKy2wSSywABUgR7AAI0KyAAEBFRQTLrA2Ki2wSiywABUgR7AAI0KyAAEBFRQTLrA2Ki2wSyyxAAEUE7A3Ki2wTCywOSotsE0ssAAWRSMgLiBGiiNhOLEwARQrLbBOLLAKI0KwTSstsE8ssgAARistsFAssgABRistsFEssgEARistsFIssgEBRistsFMssgAARystsFQssgABRystsFUssgEARystsFYssgEBRystsFcsswAAAEMrLbBYLLMAAQBDKy2wWSyzAQAAQystsFosswEBAEMrLbBbLLMAAAFDKy2wXCyzAAEBQystsF0sswEAAUMrLbBeLLMBAQFDKy2wXyyyAABFKy2wYCyyAAFFKy2wYSyyAQBFKy2wYiyyAQFFKy2wYyyyAABIKy2wZCyyAAFIKy2wZSyyAQBIKy2wZiyyAQFIKy2wZyyzAAAARCstsGgsswABAEQrLbBpLLMBAABEKy2waiyzAQEARCstsGssswAAAUQrLbBsLLMAAQFEKy2wbSyzAQABRCstsG4sswEBAUQrLbBvLLEAPCsusTABFCstsHAssQA8K7BAKy2wcSyxADwrsEErLbByLLAAFrEAPCuwQistsHMssQE8K7BAKy2wdCyxATwrsEErLbB1LLAAFrEBPCuwQistsHYssQA9Ky6xMAEUKy2wdyyxAD0rsEArLbB4LLEAPSuwQSstsHkssQA9K7BCKy2weiyxAT0rsEArLbB7LLEBPSuwQSstsHwssQE9K7BCKy2wfSyxAD4rLrEwARQrLbB+LLEAPiuwQCstsH8ssQA+K7BBKy2wgCyxAD4rsEIrLbCBLLEBPiuwQCstsIIssQE+K7BBKy2wgyyxAT4rsEIrLbCELLEAPysusTABFCstsIUssQA/K7BAKy2whiyxAD8rsEErLbCHLLEAPyuwQistsIgssQE/K7BAKy2wiSyxAT8rsEErLbCKLLEBPyuwQistsIsssgsAA0VQWLAGG7IEAgNFWCMhGyFZWUIrsAhlsAMkUHixBQEVRVgwWS0AS7gAyFJYsQEBjlmwAbkIAAgAY3CxAAdCsygAAgAqsQAHQrUbCA8EAgoqsQAHQrUlBhUCAgoqsQAJQrsHAAQAAAIACyqxAAtCuwBAAEAAAgALKrkAAwAARLEkAYhRWLBAiFi5AAMAZESxKAGIUVi4CACIWLkAAwAARFkbsScBiFFYugiAAAEEQIhjVFi5AAMAAERZWVlZWbUdCBEEAg4quAH/hbAEjbECAESzBWQGAEREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYABgAGAAYAmMAAQIVAAACbv/2AhUAAABUAFQATABMAmMAAQJjAa8AAf8jAhUAAAJk//UCZAG4//r/HAIVAAAAAAAAAAkAcgADAAEECQAAAKIAAAADAAEECQABACAAogADAAEECQACAA4AwgADAAEECQADAFAA0AADAAEECQAEADABIAADAAEECQAFAEIBUAADAAEECQAGADABIAADAAEECQANAnABkgADAAEECQAOADQEAgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOQAtADIAMAAxADAAIABEAGUAcwBpAGcAbgAgAFMAYwBpAGUAbgBjAGUALAAgAEkAbgBjAC4ACgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEANAAtADIAMAAxADgAIABLAGgAYQBuACAAQQBjAGEAZABlAG0AeQBLAGEAVABlAFgAXwBUAHkAcABlAHcAcgBpAHQAZQByAFIAZQBnAHUAbABhAHIARgBvAG4AdABGAG8AcgBnAGUAIAAyAC4AMAAgADoAIABLAGEAVABlAFgAXwBUAHkAcABlAHcAcgBpAHQAZQByAC0AUgBlAGcAdQBsAGEAcgBLAGEAVABlAFgAXwBUAHkAcABlAHcAcgBpAHQAZQByAC0AUgBlAGcAdQBsAGEAcgBWAGUAcgBzAGkAbwBuACAAMQAuADEAOwAgAHQAdABmAGEAdQB0AG8AaABpAG4AdAAgACgAdgAxAC4AOAAuADMAKQBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOQAtADIAMAAxADAALAAgAEQAZQBzAGkAZwBuACAAUwBjAGkAZQBuAGMAZQAsACAASQBuAGMALgAgACgAPAB3AHcAdwAuAG0AYQB0AGgAagBhAHgALgBvAHIAZwA+ACkACgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEANAAtADIAMAAxADgAIABLAGgAYQBuACAAQQBjAGEAZABlAG0AeQAgACgAPAB3AHcAdwAuAGsAaABhAG4AYQBjAGEAZABlAG0AeQAuAG8AcgBnAD4AKQAsAAoAdwBpAHQAaAAgAFIAZQBzAGUAcgB2AGUAZAAgAEYAbwBuAHQAIABOAGEAbQBlACAASwBhAFQAZQBYAF8AVAB5AHAAZQB3AHIAaQB0AGUAcgAuAAoACgBUAGgAaQBzACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAgAGkAcwAgAGwAaQBjAGUAbgBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAUwBJAEwAIABPAHAAZQBuACAARgBvAG4AdAAgAEwAaQBjAGUAbgBzAGUALAAgAFYAZQByAHMAaQBvAG4AIAAxAC4AMQAuAAoAVABoAGkAcwAgAGwAaQBjAGUAbgBzAGUAIABhAHYAYQBpAGwAYQBiAGwAZQAgAHcAaQB0AGgAIABhACAARgBBAFEAIABhAHQAOgAKAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATABoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAAgAAAAAAAP+DADIAAAAAAAAAAAAAAAAAAAAAAAAAAACCAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQECAQMAjgCDAN4A1wEEANgA4QEFAQYBBwDbANwA3QDZAN8BCAEJAQoBCwEMAQ0BDgEPARABEQESALYAtwETARQHdW5pMDA3Rgd1bmkwMEEwB3VuaTAyMzcHdW5pMDJDOQd1bmkwMkNBB3VuaTAyQ0IFR2FtbWEHdW5pMDM5NAVUaGV0YQZMYW1iZGECWGkCUGkFU2lnbWEHVXBzaWxvbgNQaGkDUHNpB3VuaTAzQTkGbWludXRlB3VuaTI0MjMAAQAB//8ADw==) format("truetype")}.katex{font: 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.27"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}.milkdown span[data-type=math_inline]{padding:0 4px;display:inline-block;vertical-align:bottom;color:var(--crepe-color-primary)}.milkdown .milkdown-latex-inline-edit[data-show=false]{display:none}.milkdown .milkdown-latex-inline-edit{position:absolute;background:var(--crepe-color-surface);box-shadow:var(--crepe-shadow-1);border-radius:8px;padding:2px 6px 2px 12px}.milkdown .milkdown-latex-inline-edit .container{display:flex;gap:6px;align-items:flex-start}.milkdown .milkdown-latex-inline-edit .container button{width:24px;height:24px;cursor:pointer;border-radius:8px}.milkdown .milkdown-latex-inline-edit .container button:hover{background:var(--crepe-color-hover)}.milkdown .milkdown-latex-inline-edit .ProseMirror{padding:0;min-width:174px;max-width:294px;font-family:var(--crepe-font-code)}.milkdown{--crepe-color-background: #ffffff;--crepe-color-on-background: #000000;--crepe-color-surface: #f7f7f7;--crepe-color-surface-low: #ededed;--crepe-color-on-surface: #1c1c1c;--crepe-color-on-surface-variant: #4d4d4d;--crepe-color-outline: #a8a8a8;--crepe-color-primary: #333333;--crepe-color-secondary: #cfcfcf;--crepe-color-on-secondary: #000000;--crepe-color-inverse: #f0f0f0;--crepe-color-on-inverse: #1a1a1a;--crepe-color-inline-code: #ba1a1a;--crepe-color-error: #ba1a1a;--crepe-color-hover: #e0e0e0;--crepe-color-selected: #d5d5d5;--crepe-color-inline-area: #cacaca;--crepe-font-title: "Noto Serif", Cambria, "Times New Roman", Times, serif;--crepe-font-default: "Noto Sans", Arial, Helvetica, sans-serif;--crepe-font-code: "Space Mono", Fira Code, Menlo, Monaco, "Courier New", Courier, monospace;--crepe-shadow-1: 0px 1px 3px 1px rgba(0, 0, 0, .15), 0px 1px 2px 0px rgba(0, 0, 0, .3);--crepe-shadow-2: 0px 2px 6px 2px rgba(0, 0, 0, .15), 0px 1px 2px 0px rgba(0, 0, 0, .3)} diff --git a/packages/ui/dist-lib/utils/collectionUtils.d.ts b/packages/ui/dist-lib/utils/collectionUtils.d.ts new file mode 100644 index 00000000..88d78555 --- /dev/null +++ b/packages/ui/dist-lib/utils/collectionUtils.d.ts @@ -0,0 +1,10 @@ +/** + * Filters out pictures that are only in private collections. + * Pictures that are: + * - Not in any collection: SHOWN + * - In at least one public collection: SHOWN + * - Only in private collections: HIDDEN + */ +export declare function filterPrivateCollectionPictures<T extends { + id: string; +}>(pictures: T[]): Promise<T[]>; diff --git a/packages/ui/dist-lib/utils/downloadUtils.d.ts b/packages/ui/dist-lib/utils/downloadUtils.d.ts new file mode 100644 index 00000000..2e0a0564 --- /dev/null +++ b/packages/ui/dist-lib/utils/downloadUtils.d.ts @@ -0,0 +1,8 @@ +/** + * Download an image from a URL or data URI + */ +export declare const downloadImage: (imageUrl: string, filename?: string) => Promise<void>; +/** + * Generate a filename based on title and timestamp + */ +export declare const generateFilename: (title?: string, extension?: string) => string; diff --git a/packages/ui/dist-lib/utils/mediaUtils.d.ts b/packages/ui/dist-lib/utils/mediaUtils.d.ts new file mode 100644 index 00000000..1912c2bd --- /dev/null +++ b/packages/ui/dist-lib/utils/mediaUtils.d.ts @@ -0,0 +1,46 @@ +export interface MediaItem { + id: string; + type: 'picture' | 'video' | 'page-external'; + title: string; + description: string | null; + url: string; + thumbnail_url: string | null; + likes_count: number; + created_at: string; + user_id: string; + comments_count: number; + meta?: any; +} +interface FetchMediaOptions { + organizationId?: string | null; + includePrivate?: boolean; + limit?: number; + userId?: string; + tag?: string; +} +/** + * Fetches and merges pictures and videos from the database + * Returns a unified array of media items sorted by created_at + */ +export declare function fetchMediaItems(options?: FetchMediaOptions): Promise<MediaItem[]>; +/** + * Fetches user likes for all media (both pictures and videos) + * Note: Videos are also stored in the pictures table with type='mux-video' + */ +export declare function fetchUserMediaLikes(userId: string): Promise<{ + pictureLikes: Set<string>; + videoLikes: Set<string>; +}>; +/** + * Checks if a given URL is a TikTok URL + */ +export declare function isTikTokUrl(url: string | null | undefined): boolean; +/** + * Extracts YouTube Video ID from various URL formats + */ +export declare function getYouTubeVideoId(url: string | null | undefined): string | null; +/** + * Extracts TikTok Video ID + */ +export declare function getTikTokVideoId(url: string | null | undefined): string | null; +export {}; diff --git a/packages/ui/dist-lib/utils/tagUtils.d.ts b/packages/ui/dist-lib/utils/tagUtils.d.ts new file mode 100644 index 00000000..2541ffd7 --- /dev/null +++ b/packages/ui/dist-lib/utils/tagUtils.d.ts @@ -0,0 +1,22 @@ +import { z } from 'zod'; +export declare const tagSchema: z.ZodString; +/** + * Extract hashtags from text content + * @param content - Text content to parse + * @returns Array of unique tags (without # symbol) + */ +export declare function extractHashtags(content: string): string[]; +/** + * Parse content into segments with hashtag information + * @param content - Text content with hashtags + * @returns Array of segments with type and content + */ +export interface ContentSegment { + type: 'text' | 'hashtag'; + content: string; +} +export declare function parseHashtagContent(content: string): ContentSegment[]; +/** + * Clean and normalize tag for URL usage + */ +export declare function normalizeTag(tag: string): string; diff --git a/packages/ui/dist-lib/utils/textUtils.d.ts b/packages/ui/dist-lib/utils/textUtils.d.ts new file mode 100644 index 00000000..96906a9f --- /dev/null +++ b/packages/ui/dist-lib/utils/textUtils.d.ts @@ -0,0 +1,10 @@ +/** + * Formats a date string to a relative time (e.g. "5m ago", "2h ago", "3d ago") + * if less than 7 days, otherwise returns a short date (e.g. "Oct 24"). + */ +export declare const formatDate: (dateStr?: string) => string; +/** + * Checks if a title string looks like a filename. + * Used to hide titles that aren't meaningful user descriptions. + */ +export declare const isLikelyFilename: (title: string) => boolean; diff --git a/packages/ui/dist-lib/vidstack-BN7_0WI--BfSbBAjt.js b/packages/ui/dist-lib/vidstack-BN7_0WI--BfSbBAjt.js new file mode 100644 index 00000000..a94372e5 --- /dev/null +++ b/packages/ui/dist-lib/vidstack-BN7_0WI--BfSbBAjt.js @@ -0,0 +1,324 @@ +var rt = Object.defineProperty; +var V = (n) => { + throw TypeError(n); +}; +var ot = (n, t, i) => t in n ? rt(n, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : n[t] = i; +var _ = (n, t, i) => ot(n, typeof t != "symbol" ? t + "" : t, i), R = (n, t, i) => t.has(n) || V("Cannot " + i); +var e = (n, t, i) => (R(n, t, "read from private field"), i ? i.call(n) : t.get(n)), p = (n, t, i) => t.has(n) ? V("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(n) : t.set(n, i), f = (n, t, i, s) => (R(n, t, "write to private field"), s ? s.call(n, i) : t.set(n, i), i), a = (n, t, i) => (R(n, t, "access private method"), i); +import { V as ht, i as at, h as I, k as dt, l as O, Q as q, m as N, n as ut, D as x, q as ct, R as lt, T as pt, r as k, L as $, I as ft, t as M, u as vt, v as yt, w as gt } from "./lib-export-CI8auKfP.js"; +import "react"; +const Lt = (n) => ct(n); +var T, h, o, D, C, r, E, U, j, F, Q, K, W, B, J, X, Y, z, G, Z, tt; +class St { + constructor(t, i) { + p(this, r); + p(this, T); + p(this, h); + p(this, o, null); + p(this, D, null); + _(this, "config", {}); + p(this, C, /* @__PURE__ */ new Set()); + f(this, T, t), f(this, h, i); + } + get instance() { + return e(this, o); + } + setup(t) { + const { streamType: i } = e(this, h).$state, s = O(i).includes("live"), c = O(i).includes("ll-"); + f(this, o, new t({ + lowLatencyMode: c, + backBufferLength: c ? 4 : s ? 8 : void 0, + renderTextTracksNatively: !1, + ...this.config + })); + const u = a(this, r, F).bind(this); + for (const l of Object.values(t.Events)) e(this, o).on(l, u); + e(this, o).on(t.Events.ERROR, a(this, r, Y).bind(this)); + for (const l of e(this, C)) l(e(this, o)); + e(this, h).player.dispatch("hls-instance", { + detail: e(this, o) + }), e(this, o).attachMedia(e(this, T)), e(this, o).on(t.Events.AUDIO_TRACK_SWITCHED, a(this, r, W).bind(this)), e(this, o).on(t.Events.LEVEL_SWITCHED, a(this, r, B).bind(this)), e(this, o).on(t.Events.LEVEL_LOADED, a(this, r, X).bind(this)), e(this, o).on(t.Events.LEVEL_UPDATED, a(this, r, J).bind(this)), e(this, o).on(t.Events.NON_NATIVE_TEXT_TRACKS_FOUND, a(this, r, Q).bind(this)), e(this, o).on(t.Events.CUES_PARSED, a(this, r, K).bind(this)), e(this, h).qualities[q.enableAuto] = a(this, r, G).bind(this), N(e(this, h).qualities, "change", a(this, r, Z).bind(this)), N(e(this, h).audioTracks, "change", a(this, r, tt).bind(this)), f(this, D, ut(a(this, r, U).bind(this))); + } + onInstance(t) { + return e(this, C).add(t), () => e(this, C).delete(t); + } + loadSource(t) { + var i; + I(t.src) && ((i = e(this, o)) == null || i.loadSource(t.src)); + } + destroy() { + var t, i; + (t = e(this, o)) == null || t.destroy(), f(this, o, null), (i = e(this, D)) == null || i.call(this), f(this, D, null); + } +} +T = new WeakMap(), h = new WeakMap(), o = new WeakMap(), D = new WeakMap(), C = new WeakMap(), r = new WeakSet(), E = function(t, i) { + return new x(Lt(t), { detail: i }); +}, U = function() { + if (!e(this, h).$state.live()) return; + const t = new lt(a(this, r, j).bind(this)); + return t.start(), t.stop.bind(t); +}, j = function() { + var t; + e(this, h).$state.liveSyncPosition.set(((t = e(this, o)) == null ? void 0 : t.liveSyncPosition) ?? 1 / 0); +}, F = function(t, i) { + var s; + (s = e(this, h).player) == null || s.dispatch(a(this, r, E).call(this, t, i)); +}, Q = function(t, i) { + const s = a(this, r, E).call(this, t, i); + let c = -1; + for (let u = 0; u < i.tracks.length; u++) { + const l = i.tracks[u], d = l.subtitleTrack ?? l.closedCaptions, w = new pt({ + id: `hls-${l.kind}-${u}`, + src: d == null ? void 0 : d.url, + label: l.label, + language: d == null ? void 0 : d.lang, + kind: l.kind, + default: l.default + }); + w[k.readyState] = 2, w[k.onModeChange] = () => { + w.mode === "showing" ? (e(this, o).subtitleTrack = u, c = u) : c === u && (e(this, o).subtitleTrack = -1, c = -1); + }, e(this, h).textTracks.add(w, s); + } +}, K = function(t, i) { + var l; + const s = (l = e(this, o)) == null ? void 0 : l.subtitleTrack, c = e(this, h).textTracks.getById(`hls-${i.type}-${s}`); + if (!c) return; + const u = a(this, r, E).call(this, t, i); + for (const d of i.cues) + d.positionAlign = "auto", c.addCue(d, u); +}, W = function(t, i) { + const s = e(this, h).audioTracks[i.id]; + if (s) { + const c = a(this, r, E).call(this, t, i); + e(this, h).audioTracks[$.select](s, !0, c); + } +}, B = function(t, i) { + const s = e(this, h).qualities[i.level]; + if (s) { + const c = a(this, r, E).call(this, t, i); + e(this, h).qualities[$.select](s, !0, c); + } +}, J = function(t, i) { + i.details.totalduration > 0 && e(this, h).$state.inferredLiveDVRWindow.set(i.details.totalduration); +}, X = function(t, i) { + var P; + if (e(this, h).$state.canPlay()) return; + const { type: s, live: c, totalduration: u, targetduration: l } = i.details, d = a(this, r, E).call(this, t, i); + e(this, h).notify( + "stream-type-change", + c ? s === "EVENT" && Number.isFinite(u) && l >= 10 ? "live:dvr" : "live" : "on-demand", + d + ), e(this, h).notify("duration-change", u, d); + const w = e(this, o).media; + e(this, o).currentLevel === -1 && e(this, h).qualities[q.setAuto](!0, d); + for (const y of e(this, o).audioTracks) { + const H = { + id: y.id.toString(), + label: y.name, + language: y.lang || "", + kind: "main" + }; + e(this, h).audioTracks[$.add](H, d); + } + for (const y of e(this, o).levels) { + const H = { + id: ((P = y.id) == null ? void 0 : P.toString()) ?? y.height + "p", + width: y.width, + height: y.height, + codec: y.codecSet, + bitrate: y.bitrate + }; + e(this, h).qualities[$.add](H, d); + } + w.dispatchEvent(new x("canplay", { trigger: d })); +}, Y = function(t, i) { + var s; + if (i.fatal) + switch (i.type) { + case "mediaError": + (s = e(this, o)) == null || s.recoverMediaError(); + break; + default: + a(this, r, z).call(this, i.error); + break; + } +}, z = function(t) { + e(this, h).notify("error", { + message: t.message, + code: 1, + error: t + }); +}, G = function() { + e(this, o) && (e(this, o).currentLevel = -1); +}, Z = function() { + const { qualities: t } = e(this, h); + !e(this, o) || t.auto || (e(this, o)[t.switch + "Level"] = t.selectedIndex, ft && (e(this, T).currentTime = e(this, T).currentTime)); +}, tt = function() { + const { audioTracks: t } = e(this, h); + e(this, o) && e(this, o).audioTrack !== t.selectedIndex && (e(this, o).audioTrack = t.selectedIndex); +}; +var m, g, b, L, it, et, st, nt; +class Et { + constructor(t, i, s) { + p(this, L); + p(this, m); + p(this, g); + p(this, b); + f(this, m, t), f(this, g, i), f(this, b, s), a(this, L, it).call(this); + } +} +m = new WeakMap(), g = new WeakMap(), b = new WeakMap(), L = new WeakSet(), it = async function() { + const t = { + onLoadStart: a(this, L, et).bind(this), + onLoaded: a(this, L, st).bind(this), + onLoadError: a(this, L, nt).bind(this) + }; + let i = await mt(e(this, m), t); + if (M(i) && !I(e(this, m)) && (i = await Tt(e(this, m), t)), !i) return null; + if (!i.isSupported()) { + const s = "[vidstack] `hls.js` is not supported in this environment"; + return e(this, g).player.dispatch(new x("hls-unsupported")), e(this, g).notify("error", { message: s, code: 4 }), null; + } + return i; +}, et = function() { + e(this, g).player.dispatch(new x("hls-lib-load-start")); +}, st = function(t) { + e(this, g).player.dispatch( + new x("hls-lib-loaded", { + detail: t + }) + ), e(this, b).call(this, t); +}, nt = function(t) { + const i = vt(t); + e(this, g).player.dispatch( + new x("hls-lib-load-error", { + detail: i + }) + ), e(this, g).notify("error", { + message: i.message, + code: 4, + error: i + }); +}; +async function Tt(n, t = {}) { + var i, s, c, u, l; + if (!M(n)) { + if ((i = t.onLoadStart) == null || i.call(t), n.prototype && n.prototype !== Function) + return (s = t.onLoaded) == null || s.call(t, n), n; + try { + const d = (c = await n()) == null ? void 0 : c.default; + if (d && d.isSupported) + (u = t.onLoaded) == null || u.call(t, d); + else + throw Error( + "" + ); + return d; + } catch (d) { + (l = t.onLoadError) == null || l.call(t, d); + } + } +} +async function mt(n, t = {}) { + var i, s, c; + if (I(n)) { + (i = t.onLoadStart) == null || i.call(t); + try { + if (await yt(n), !gt(window.Hls)) + throw Error( + "" + ); + const u = window.Hls; + return (s = t.onLoaded) == null || s.call(t, u), u; + } catch (u) { + (c = t.onLoadError) == null || c.call(t, u); + } + } +} +const wt = "https://cdn.jsdelivr.net"; +var A, v, S; +class xt extends ht { + constructor() { + super(...arguments); + _(this, "$$PROVIDER_TYPE", "HLS"); + p(this, A, null); + p(this, v, new St(this.video, this.ctx)); + p(this, S, `${wt}/npm/hls.js@^1.5.0/dist/hls.min.js`); + } + /** + * The `hls.js` constructor. + */ + get ctor() { + return e(this, A); + } + /** + * The current `hls.js` instance. + */ + get instance() { + return e(this, v).instance; + } + get type() { + return "hls"; + } + get canLiveSync() { + return !0; + } + /** + * The `hls.js` configuration object. + * + * @see {@link https://github.com/video-dev/hls.js/blob/master/docs/API.md#fine-tuning} + */ + get config() { + return e(this, v).config; + } + set config(i) { + e(this, v).config = i; + } + /** + * The `hls.js` constructor (supports dynamic imports) or a URL of where it can be found. + * + * @defaultValue `https://cdn.jsdelivr.net/npm/hls.js@^1.0.0/dist/hls.min.js` + */ + get library() { + return e(this, S); + } + set library(i) { + f(this, S, i); + } + preconnect() { + I(e(this, S)) && dt(e(this, S)); + } + setup() { + super.setup(), new Et(e(this, S), this.ctx, (i) => { + f(this, A, i), e(this, v).setup(i), this.ctx.notify("provider-setup", this); + const s = O(this.ctx.$state.source); + s && this.loadSource(s); + }); + } + async loadSource(i, s) { + if (!I(i.src)) { + this.removeSource(); + return; + } + this.media.preload = s || "", this.appendSource(i, "application/x-mpegurl"), e(this, v).loadSource(i), this.currentSrc = i; + } + /** + * The given callback is invoked when a new `hls.js` instance is created and right before it's + * attached to media. + */ + onInstance(i) { + const s = e(this, v).instance; + return s && i(s), e(this, v).onInstance(i); + } + destroy() { + e(this, v).destroy(); + } +} +A = new WeakMap(), v = new WeakMap(), S = new WeakMap(), /** + * Whether `hls.js` is supported in this environment. + */ +_(xt, "supported", at()); +export { + xt as HLSProvider +}; +//# sourceMappingURL=vidstack-BN7_0WI--BfSbBAjt.js.map diff --git a/packages/ui/dist-lib/vidstack-BN7_0WI--BfSbBAjt.js.map b/packages/ui/dist-lib/vidstack-BN7_0WI--BfSbBAjt.js.map new file mode 100644 index 00000000..2457a0b2 --- /dev/null +++ b/packages/ui/dist-lib/vidstack-BN7_0WI--BfSbBAjt.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vidstack-BN7_0WI--BfSbBAjt.js","sources":["../node_modules/@vidstack/react/prod/chunks/vidstack-BN7_0WI-.js"],"sourcesContent":["\"use client\"\n\nimport { peek, listenEvent, effect, DOMEvent, camelToKebabCase, isString, isUndefined, isFunction } from './vidstack-CZgUA94N.js';\nimport { QualitySymbol, RAFLoop, TextTrack, TextTrackSymbol, ListSymbol, IS_CHROME, coerceToError, loadScript, VideoProvider, isHLSSupported, preconnect } from './vidstack-D5Pzx_k5.js';\nimport 'react';\nimport '@floating-ui/dom';\n\nconst toDOMEventType = (type) => camelToKebabCase(type);\nclass HLSController {\n #video;\n #ctx;\n #instance = null;\n #stopLiveSync = null;\n config = {};\n #callbacks = /* @__PURE__ */ new Set();\n get instance() {\n return this.#instance;\n }\n constructor(video, ctx) {\n this.#video = video;\n this.#ctx = ctx;\n }\n setup(ctor) {\n const { streamType } = this.#ctx.$state;\n const isLive = peek(streamType).includes(\"live\"), isLiveLowLatency = peek(streamType).includes(\"ll-\");\n this.#instance = new ctor({\n lowLatencyMode: isLiveLowLatency,\n backBufferLength: isLiveLowLatency ? 4 : isLive ? 8 : void 0,\n renderTextTracksNatively: false,\n ...this.config\n });\n const dispatcher = this.#dispatchHLSEvent.bind(this);\n for (const event of Object.values(ctor.Events)) this.#instance.on(event, dispatcher);\n this.#instance.on(ctor.Events.ERROR, this.#onError.bind(this));\n for (const callback of this.#callbacks) callback(this.#instance);\n this.#ctx.player.dispatch(\"hls-instance\", {\n detail: this.#instance\n });\n this.#instance.attachMedia(this.#video);\n this.#instance.on(ctor.Events.AUDIO_TRACK_SWITCHED, this.#onAudioSwitch.bind(this));\n this.#instance.on(ctor.Events.LEVEL_SWITCHED, this.#onLevelSwitched.bind(this));\n this.#instance.on(ctor.Events.LEVEL_LOADED, this.#onLevelLoaded.bind(this));\n this.#instance.on(ctor.Events.LEVEL_UPDATED, this.#onLevelUpdated.bind(this));\n this.#instance.on(ctor.Events.NON_NATIVE_TEXT_TRACKS_FOUND, this.#onTracksFound.bind(this));\n this.#instance.on(ctor.Events.CUES_PARSED, this.#onCuesParsed.bind(this));\n this.#ctx.qualities[QualitySymbol.enableAuto] = this.#enableAutoQuality.bind(this);\n listenEvent(this.#ctx.qualities, \"change\", this.#onUserQualityChange.bind(this));\n listenEvent(this.#ctx.audioTracks, \"change\", this.#onUserAudioChange.bind(this));\n this.#stopLiveSync = effect(this.#liveSync.bind(this));\n }\n #createDOMEvent(type, data) {\n return new DOMEvent(toDOMEventType(type), { detail: data });\n }\n #liveSync() {\n if (!this.#ctx.$state.live()) return;\n const raf = new RAFLoop(this.#liveSyncPosition.bind(this));\n raf.start();\n return raf.stop.bind(raf);\n }\n #liveSyncPosition() {\n this.#ctx.$state.liveSyncPosition.set(this.#instance?.liveSyncPosition ?? Infinity);\n }\n #dispatchHLSEvent(type, data) {\n this.#ctx.player?.dispatch(this.#createDOMEvent(type, data));\n }\n #onTracksFound(eventType, data) {\n const event = this.#createDOMEvent(eventType, data);\n let currentTrack = -1;\n for (let i = 0; i < data.tracks.length; i++) {\n const nonNativeTrack = data.tracks[i], init = nonNativeTrack.subtitleTrack ?? nonNativeTrack.closedCaptions, track = new TextTrack({\n id: `hls-${nonNativeTrack.kind}-${i}`,\n src: init?.url,\n label: nonNativeTrack.label,\n language: init?.lang,\n kind: nonNativeTrack.kind,\n default: nonNativeTrack.default\n });\n track[TextTrackSymbol.readyState] = 2;\n track[TextTrackSymbol.onModeChange] = () => {\n if (track.mode === \"showing\") {\n this.#instance.subtitleTrack = i;\n currentTrack = i;\n } else if (currentTrack === i) {\n this.#instance.subtitleTrack = -1;\n currentTrack = -1;\n }\n };\n this.#ctx.textTracks.add(track, event);\n }\n }\n #onCuesParsed(eventType, data) {\n const index = this.#instance?.subtitleTrack, track = this.#ctx.textTracks.getById(`hls-${data.type}-${index}`);\n if (!track) return;\n const event = this.#createDOMEvent(eventType, data);\n for (const cue of data.cues) {\n cue.positionAlign = \"auto\";\n track.addCue(cue, event);\n }\n }\n #onAudioSwitch(eventType, data) {\n const track = this.#ctx.audioTracks[data.id];\n if (track) {\n const trigger = this.#createDOMEvent(eventType, data);\n this.#ctx.audioTracks[ListSymbol.select](track, true, trigger);\n }\n }\n #onLevelSwitched(eventType, data) {\n const quality = this.#ctx.qualities[data.level];\n if (quality) {\n const trigger = this.#createDOMEvent(eventType, data);\n this.#ctx.qualities[ListSymbol.select](quality, true, trigger);\n }\n }\n #onLevelUpdated(eventType, data) {\n if (data.details.totalduration > 0) {\n this.#ctx.$state.inferredLiveDVRWindow.set(data.details.totalduration);\n }\n }\n #onLevelLoaded(eventType, data) {\n if (this.#ctx.$state.canPlay()) return;\n const { type, live, totalduration: duration, targetduration } = data.details, trigger = this.#createDOMEvent(eventType, data);\n this.#ctx.notify(\n \"stream-type-change\",\n live ? type === \"EVENT\" && Number.isFinite(duration) && targetduration >= 10 ? \"live:dvr\" : \"live\" : \"on-demand\",\n trigger\n );\n this.#ctx.notify(\"duration-change\", duration, trigger);\n const media = this.#instance.media;\n if (this.#instance.currentLevel === -1) {\n this.#ctx.qualities[QualitySymbol.setAuto](true, trigger);\n }\n for (const remoteTrack of this.#instance.audioTracks) {\n const localTrack = {\n id: remoteTrack.id.toString(),\n label: remoteTrack.name,\n language: remoteTrack.lang || \"\",\n kind: \"main\"\n };\n this.#ctx.audioTracks[ListSymbol.add](localTrack, trigger);\n }\n for (const level of this.#instance.levels) {\n const videoQuality = {\n id: level.id?.toString() ?? level.height + \"p\",\n width: level.width,\n height: level.height,\n codec: level.codecSet,\n bitrate: level.bitrate\n };\n this.#ctx.qualities[ListSymbol.add](videoQuality, trigger);\n }\n media.dispatchEvent(new DOMEvent(\"canplay\", { trigger }));\n }\n #onError(eventType, data) {\n if (data.fatal) {\n switch (data.type) {\n case \"mediaError\":\n this.#instance?.recoverMediaError();\n break;\n default:\n this.#onFatalError(data.error);\n break;\n }\n }\n }\n #onFatalError(error) {\n this.#ctx.notify(\"error\", {\n message: error.message,\n code: 1,\n error\n });\n }\n #enableAutoQuality() {\n if (this.#instance) this.#instance.currentLevel = -1;\n }\n #onUserQualityChange() {\n const { qualities } = this.#ctx;\n if (!this.#instance || qualities.auto) return;\n this.#instance[qualities.switch + \"Level\"] = qualities.selectedIndex;\n if (IS_CHROME) {\n this.#video.currentTime = this.#video.currentTime;\n }\n }\n #onUserAudioChange() {\n const { audioTracks } = this.#ctx;\n if (this.#instance && this.#instance.audioTrack !== audioTracks.selectedIndex) {\n this.#instance.audioTrack = audioTracks.selectedIndex;\n }\n }\n onInstance(callback) {\n this.#callbacks.add(callback);\n return () => this.#callbacks.delete(callback);\n }\n loadSource(src) {\n if (!isString(src.src)) return;\n this.#instance?.loadSource(src.src);\n }\n destroy() {\n this.#instance?.destroy();\n this.#instance = null;\n this.#stopLiveSync?.();\n this.#stopLiveSync = null;\n }\n}\n\nclass HLSLibLoader {\n #lib;\n #ctx;\n #callback;\n constructor(lib, ctx, callback) {\n this.#lib = lib;\n this.#ctx = ctx;\n this.#callback = callback;\n this.#startLoading();\n }\n async #startLoading() {\n const callbacks = {\n onLoadStart: this.#onLoadStart.bind(this),\n onLoaded: this.#onLoaded.bind(this),\n onLoadError: this.#onLoadError.bind(this)\n };\n let ctor = await loadHLSScript(this.#lib, callbacks);\n if (isUndefined(ctor) && !isString(this.#lib)) ctor = await importHLS(this.#lib, callbacks);\n if (!ctor) return null;\n if (!ctor.isSupported()) {\n const message = \"[vidstack] `hls.js` is not supported in this environment\";\n this.#ctx.player.dispatch(new DOMEvent(\"hls-unsupported\"));\n this.#ctx.notify(\"error\", { message, code: 4 });\n return null;\n }\n return ctor;\n }\n #onLoadStart() {\n this.#ctx.player.dispatch(new DOMEvent(\"hls-lib-load-start\"));\n }\n #onLoaded(ctor) {\n this.#ctx.player.dispatch(\n new DOMEvent(\"hls-lib-loaded\", {\n detail: ctor\n })\n );\n this.#callback(ctor);\n }\n #onLoadError(e) {\n const error = coerceToError(e);\n this.#ctx.player.dispatch(\n new DOMEvent(\"hls-lib-load-error\", {\n detail: error\n })\n );\n this.#ctx.notify(\"error\", {\n message: error.message,\n code: 4,\n error\n });\n }\n}\nasync function importHLS(loader, callbacks = {}) {\n if (isUndefined(loader)) return void 0;\n callbacks.onLoadStart?.();\n if (loader.prototype && loader.prototype !== Function) {\n callbacks.onLoaded?.(loader);\n return loader;\n }\n try {\n const ctor = (await loader())?.default;\n if (ctor && !!ctor.isSupported) {\n callbacks.onLoaded?.(ctor);\n } else {\n throw Error(\n false ? \"[vidstack] failed importing `hls.js`. Dynamic import returned invalid constructor.\" : \"\"\n );\n }\n return ctor;\n } catch (err) {\n callbacks.onLoadError?.(err);\n }\n return void 0;\n}\nasync function loadHLSScript(src, callbacks = {}) {\n if (!isString(src)) return void 0;\n callbacks.onLoadStart?.();\n try {\n await loadScript(src);\n if (!isFunction(window.Hls)) {\n throw Error(\n false ? \"[vidstack] failed loading `hls.js`. Could not find a valid `Hls` constructor on window\" : \"\"\n );\n }\n const ctor = window.Hls;\n callbacks.onLoaded?.(ctor);\n return ctor;\n } catch (err) {\n callbacks.onLoadError?.(err);\n }\n return void 0;\n}\n\nconst JS_DELIVR_CDN = \"https://cdn.jsdelivr.net\";\nclass HLSProvider extends VideoProvider {\n $$PROVIDER_TYPE = \"HLS\";\n #ctor = null;\n #controller = new HLSController(this.video, this.ctx);\n /**\n * The `hls.js` constructor.\n */\n get ctor() {\n return this.#ctor;\n }\n /**\n * The current `hls.js` instance.\n */\n get instance() {\n return this.#controller.instance;\n }\n /**\n * Whether `hls.js` is supported in this environment.\n */\n static supported = isHLSSupported();\n get type() {\n return \"hls\";\n }\n get canLiveSync() {\n return true;\n }\n #library = `${JS_DELIVR_CDN}/npm/hls.js@^1.5.0/dist/hls${\".min.js\"}`;\n /**\n * The `hls.js` configuration object.\n *\n * @see {@link https://github.com/video-dev/hls.js/blob/master/docs/API.md#fine-tuning}\n */\n get config() {\n return this.#controller.config;\n }\n set config(config) {\n this.#controller.config = config;\n }\n /**\n * The `hls.js` constructor (supports dynamic imports) or a URL of where it can be found.\n *\n * @defaultValue `https://cdn.jsdelivr.net/npm/hls.js@^1.0.0/dist/hls.min.js`\n */\n get library() {\n return this.#library;\n }\n set library(library) {\n this.#library = library;\n }\n preconnect() {\n if (!isString(this.#library)) return;\n preconnect(this.#library);\n }\n setup() {\n super.setup();\n new HLSLibLoader(this.#library, this.ctx, (ctor) => {\n this.#ctor = ctor;\n this.#controller.setup(ctor);\n this.ctx.notify(\"provider-setup\", this);\n const src = peek(this.ctx.$state.source);\n if (src) this.loadSource(src);\n });\n }\n async loadSource(src, preload) {\n if (!isString(src.src)) {\n this.removeSource();\n return;\n }\n this.media.preload = preload || \"\";\n this.appendSource(src, \"application/x-mpegurl\");\n this.#controller.loadSource(src);\n this.currentSrc = src;\n }\n /**\n * The given callback is invoked when a new `hls.js` instance is created and right before it's\n * attached to media.\n */\n onInstance(callback) {\n const instance = this.#controller.instance;\n if (instance) callback(instance);\n return this.#controller.onInstance(callback);\n }\n destroy() {\n this.#controller.destroy();\n }\n}\n\nexport { HLSProvider };\n"],"names":["toDOMEventType","type","camelToKebabCase","HLSController","video","ctx","__privateAdd","_HLSController_instances","_video","_ctx","_instance","_stopLiveSync","__publicField","_callbacks","__privateSet","__privateGet","ctor","streamType","isLive","peek","isLiveLowLatency","dispatcher","__privateMethod","dispatchHLSEvent_fn","event","onError_fn","callback","onAudioSwitch_fn","onLevelSwitched_fn","onLevelLoaded_fn","onLevelUpdated_fn","onTracksFound_fn","onCuesParsed_fn","QualitySymbol","enableAutoQuality_fn","listenEvent","onUserQualityChange_fn","onUserAudioChange_fn","effect","liveSync_fn","src","isString","_a","_b","createDOMEvent_fn","data","DOMEvent","raf","RAFLoop","liveSyncPosition_fn","eventType","currentTrack","i","nonNativeTrack","init","track","TextTrack","TextTrackSymbol","index","cue","trigger","ListSymbol","quality","live","duration","targetduration","media","remoteTrack","localTrack","level","videoQuality","onFatalError_fn","error","qualities","IS_CHROME","audioTracks","HLSLibLoader","lib","_HLSLibLoader_instances","_lib","_callback","startLoading_fn","callbacks","onLoadStart_fn","onLoaded_fn","onLoadError_fn","loadHLSScript","isUndefined","importHLS","message","e","coerceToError","loader","_c","_d","err","_e","loadScript","isFunction","JS_DELIVR_CDN","HLSProvider","VideoProvider","_ctor","_controller","_library","config","library","preconnect","preload","instance","isHLSSupported"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/packages/ui/dist-lib/vidstack-BeT6vBOi-DhlHLgwc.js b/packages/ui/dist-lib/vidstack-BeT6vBOi-DhlHLgwc.js new file mode 100644 index 00000000..bb65e856 --- /dev/null +++ b/packages/ui/dist-lib/vidstack-BeT6vBOi-DhlHLgwc.js @@ -0,0 +1,378 @@ +var Lt = Object.defineProperty; +var W = (d) => { + throw TypeError(d); +}; +var vt = (d, t, s) => t in d ? Lt(d, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : d[t] = s; +var G = (d, t, s) => vt(d, typeof t != "symbol" ? t + "" : t, s), O = (d, t, s) => t.has(d) || W("Cannot " + s); +var e = (d, t, s) => (O(d, t, "read from private field"), s ? s.call(d) : t.get(d)), T = (d, t, s) => t.has(d) ? W("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(d) : t.set(d, s), l = (d, t, s, i) => (O(d, t, "write to private field"), i ? i.call(d, s) : t.set(d, s), s), r = (d, t, s) => (O(d, t, "access private method"), s); +import { x as St, z as L, R as At, N as Z, O as It, D as tt, l as V, m as et, n as Rt, P as bt, L as wt } from "./lib-export-CI8auKfP.js"; +import { getCastContext as Mt, getCastSession as Dt, getCastSessionMedia as it, hasActiveCastSession as st, listenCastContextEvent as Nt, getCastErrorMessage as Pt } from "./vidstack-CQQ1xKSy-CZZk6e1l.js"; +import "react"; +var g, _, at; +class _t { + constructor(t) { + T(this, _); + T(this, g); + l(this, g, new chrome.cast.media.MediaInfo(t.src, t.type)); + } + build() { + return e(this, g); + } + setStreamType(t) { + return t.includes("live") ? e(this, g).streamType = chrome.cast.media.StreamType.LIVE : e(this, g).streamType = chrome.cast.media.StreamType.BUFFERED, this; + } + setTracks(t) { + return e(this, g).tracks = t.map(r(this, _, at)), this; + } + setMetadata(t, s) { + return e(this, g).metadata = new chrome.cast.media.GenericMediaMetadata(), e(this, g).metadata.title = t, e(this, g).metadata.images = [{ url: s }], this; + } +} +g = new WeakMap(), _ = new WeakSet(), at = function(t, s) { + const i = new chrome.cast.media.Track(s, chrome.cast.media.TrackType.TEXT); + return i.name = t.label, i.trackContentId = t.src, i.trackContentType = "text/vtt", i.language = t.language, i.subtype = t.kind.toUpperCase(), i; +}; +var p, k, M, c, $, A, rt, nt, ot, H, P, U; +class xt { + constructor(t, s, i) { + T(this, c); + T(this, p); + T(this, k); + T(this, M); + l(this, p, t), l(this, k, s), l(this, M, i); + } + setup() { + const t = this.syncRemoteActiveIds.bind(this); + et(e(this, k).audioTracks, "change", t), et(e(this, k).textTracks, "mode-change", t), Rt(r(this, c, nt).bind(this)); + } + getLocalTextTracks() { + return e(this, k).$state.textTracks().filter((t) => t.src && t.type === "vtt"); + } + syncRemoteTracks(t) { + if (!e(this, p).isMediaLoaded) return; + const s = r(this, c, $).call(this), i = this.getLocalTextTracks(), n = r(this, c, A).call(this, chrome.cast.media.TrackType.AUDIO), m = r(this, c, A).call(this, chrome.cast.media.TrackType.TEXT); + for (const u of n) { + if (r(this, c, H).call(this, s, u)) continue; + const w = { + id: u.trackId.toString(), + label: u.name, + language: u.language, + kind: u.subtype ?? "main", + selected: !1 + }; + e(this, k).audioTracks[wt.add](w, t); + } + for (const u of m) { + if (r(this, c, H).call(this, i, u)) continue; + const w = { + id: u.trackId.toString(), + src: u.trackContentId, + label: u.name, + language: u.language, + kind: u.subtype.toLowerCase() + }; + e(this, k).textTracks.add(w, t); + } + } + syncRemoteActiveIds(t) { + if (!e(this, p).isMediaLoaded) return; + const s = r(this, c, rt).call(this), i = new chrome.cast.media.EditTracksInfoRequest(s); + r(this, c, ot).call(this, i).catch((n) => { + }); + } +} +p = new WeakMap(), k = new WeakMap(), M = new WeakMap(), c = new WeakSet(), $ = function() { + return e(this, k).$state.audioTracks(); +}, A = function(t) { + var i; + const s = ((i = e(this, p).mediaInfo) == null ? void 0 : i.tracks) ?? []; + return t ? s.filter((n) => n.type === t) : s; +}, rt = function() { + const t = [], s = r(this, c, $).call(this).find((n) => n.selected), i = this.getLocalTextTracks().filter((n) => n.mode === "showing"); + if (s) { + const n = r(this, c, A).call(this, chrome.cast.media.TrackType.AUDIO), m = r(this, c, P).call(this, n, s); + m && t.push(m.trackId); + } + if (i != null && i.length) { + const n = r(this, c, A).call(this, chrome.cast.media.TrackType.TEXT); + if (n.length) + for (const m of i) { + const u = r(this, c, P).call(this, n, m); + u && t.push(u.trackId); + } + } + return t; +}, nt = function() { + const t = this.getLocalTextTracks(); + if (!e(this, p).isMediaLoaded) return; + const s = r(this, c, A).call(this, chrome.cast.media.TrackType.TEXT); + for (const i of t) + if (!r(this, c, P).call(this, s, i)) { + bt(() => { + var m; + return (m = e(this, M)) == null ? void 0 : m.call(this); + }); + break; + } +}, ot = function(t) { + const s = it(); + return new Promise((i, n) => s == null ? void 0 : s.editTracksInfo(t, i, n)); +}, H = function(t, s) { + return t.find((i) => r(this, c, U).call(this, i, s)); +}, P = function(t, s) { + return t.find((i) => r(this, c, U).call(this, s, i)); +}, // Note: we can't rely on id matching because they will differ between local/remote. A local +// track id might not even exist. +U = function(t, s) { + return s.name === t.label && s.language === t.language && s.subtype.toLowerCase() === t.kind.toLowerCase(); +}; +var o, h, C, E, D, I, v, S, R, N, f, b, a, ht, ct, F, dt, q, ut, lt, mt, B, X, Y, K, Tt, ft, gt, z, kt, j, yt, J, y, pt, Ct, Q, Et; +class Ht { + constructor(t, s) { + T(this, a); + G(this, "$$PROVIDER_TYPE", "GOOGLE_CAST"); + G(this, "scope", St()); + T(this, o); + T(this, h); + T(this, C); + T(this, E, null); + T(this, D, "disconnected"); + T(this, I, 0); + T(this, v, 0); + T(this, S, new L(0, 0)); + T(this, R, new At(r(this, a, lt).bind(this))); + T(this, N); + T(this, f, null); + T(this, b, !1); + l(this, o, t), l(this, h, s), l(this, C, new xt(t, s, r(this, a, Et).bind(this))); + } + get type() { + return "google-cast"; + } + get currentSrc() { + return e(this, E); + } + /** + * The Google Cast remote player. + * + * @see {@link https://developers.google.com/cast/docs/reference/web_sender/cast.framework.RemotePlayer} + */ + get player() { + return e(this, o); + } + /** + * @see {@link https://developers.google.com/cast/docs/reference/web_sender/cast.framework.CastContext} + */ + get cast() { + return Mt(); + } + /** + * @see {@link https://developers.google.com/cast/docs/reference/web_sender/cast.framework.CastSession} + */ + get session() { + return Dt(); + } + /** + * @see {@link https://developers.google.com/cast/docs/reference/web_sender/chrome.cast.media.Media} + */ + get media() { + return it(); + } + /** + * Whether the current Google Cast session belongs to this provider. + */ + get hasActiveSession() { + return st(e(this, E)); + } + setup() { + r(this, a, ht).call(this), r(this, a, ct).call(this), e(this, C).setup(), e(this, h).notify("provider-setup", this); + } + async play() { + var t; + if (!(!e(this, o).isPaused && !e(this, b))) { + if (e(this, b)) { + await r(this, a, Q).call(this, !1, 0); + return; + } + (t = e(this, o).controller) == null || t.playOrPause(); + } + } + async pause() { + var t; + e(this, o).isPaused || (t = e(this, o).controller) == null || t.playOrPause(); + } + getMediaStatus(t) { + return new Promise((s, i) => { + var n; + (n = this.media) == null || n.getStatus(t, s, i); + }); + } + setMuted(t) { + var i; + (t && !e(this, o).isMuted || !t && e(this, o).isMuted) && ((i = e(this, o).controller) == null || i.muteOrUnmute()); + } + setCurrentTime(t) { + var s; + e(this, o).currentTime = t, e(this, h).notify("seeking", t), (s = e(this, o).controller) == null || s.seek(); + } + setVolume(t) { + var s; + e(this, o).volumeLevel = t, (s = e(this, o).controller) == null || s.setVolumeLevel(); + } + async loadSource(t) { + var n; + if (((n = e(this, f)) == null ? void 0 : n.src) !== t && l(this, f, null), st(t)) { + r(this, a, dt).call(this), l(this, E, t); + return; + } + e(this, h).notify("load-start"); + const s = r(this, a, Ct).call(this, t), i = await this.session.loadMedia(s); + if (i) { + l(this, E, null), e(this, h).notify("error", Error(Pt(i))); + return; + } + l(this, E, t); + } + destroy() { + r(this, a, F).call(this), r(this, a, q).call(this); + } +} +o = new WeakMap(), h = new WeakMap(), C = new WeakMap(), E = new WeakMap(), D = new WeakMap(), I = new WeakMap(), v = new WeakMap(), S = new WeakMap(), R = new WeakMap(), N = new WeakMap(), f = new WeakMap(), b = new WeakMap(), a = new WeakSet(), ht = function() { + Nt( + cast.framework.CastContextEventType.CAST_STATE_CHANGED, + r(this, a, B).bind(this) + ); +}, ct = function() { + const t = cast.framework.RemotePlayerEventType, s = { + [t.IS_CONNECTED_CHANGED]: r(this, a, B), + [t.IS_MEDIA_LOADED_CHANGED]: r(this, a, X), + [t.CAN_CONTROL_VOLUME_CHANGED]: r(this, a, Y), + [t.CAN_SEEK_CHANGED]: r(this, a, K), + [t.DURATION_CHANGED]: r(this, a, gt), + [t.IS_MUTED_CHANGED]: r(this, a, z), + [t.VOLUME_LEVEL_CHANGED]: r(this, a, z), + [t.IS_PAUSED_CHANGED]: r(this, a, kt), + [t.LIVE_SEEKABLE_RANGE_CHANGED]: r(this, a, j), + [t.PLAYER_STATE_CHANGED]: r(this, a, yt) + }; + l(this, N, s); + const i = r(this, a, mt).bind(this); + for (const n of Z(s)) + e(this, o).controller.addEventListener(n, i); + It(() => { + for (const n of Z(s)) + e(this, o).controller.removeEventListener(n, i); + }); +}, F = function() { + e(this, f) || (l(this, v, 0), l(this, S, new L(0, 0))), e(this, R).stop(), l(this, I, 0), l(this, f, null); +}, dt = function() { + const t = new tt("resume-session", { detail: this.session }); + r(this, a, X).call(this, t); + const { muted: s, volume: i, savedState: n } = e(this, h).$state, m = n(); + this.setCurrentTime(Math.max(e(this, o).currentTime, (m == null ? void 0 : m.currentTime) ?? 0)), this.setMuted(s()), this.setVolume(i()), (m == null ? void 0 : m.paused) === !1 && this.play(); +}, q = function() { + this.cast.endCurrentSession(!0); + const { remotePlaybackLoader: t } = e(this, h).$state; + t.set(null); +}, ut = function() { + const { savedState: t } = e(this, h).$state; + t.set({ + paused: e(this, o).isPaused, + currentTime: e(this, o).currentTime + }), r(this, a, q).call(this); +}, lt = function() { + r(this, a, ft).call(this); +}, mt = function(t) { + e(this, N)[t.type].call(this, t); +}, B = function(t) { + const s = this.cast.getCastState(), i = s === cast.framework.CastState.CONNECTED ? "connected" : s === cast.framework.CastState.CONNECTING ? "connecting" : "disconnected"; + if (e(this, D) === i) return; + const n = { type: "google-cast", state: i }, m = r(this, a, y).call(this, t); + l(this, D, i), e(this, h).notify("remote-playback-change", n, m), i === "disconnected" && r(this, a, ut).call(this); +}, X = function(t) { + if (!!!e(this, o).isMediaLoaded) return; + const i = V(e(this, h).$state.source); + Promise.resolve().then(() => { + if (i !== V(e(this, h).$state.source) || !e(this, o).isMediaLoaded) return; + r(this, a, F).call(this); + const n = e(this, o).duration; + l(this, S, new L(0, n)); + const m = { + provider: this, + duration: n, + buffered: new L(0, 0), + seekable: r(this, a, J).call(this) + }, u = r(this, a, y).call(this, t); + e(this, h).notify("loaded-metadata", void 0, u), e(this, h).notify("loaded-data", void 0, u), e(this, h).notify("can-play", m, u), r(this, a, Y).call(this), r(this, a, K).call(this, t); + const { volume: x, muted: w } = e(this, h).$state; + this.setVolume(x()), this.setMuted(w()), e(this, R).start(), e(this, C).syncRemoteTracks(u), e(this, C).syncRemoteActiveIds(u); + }); +}, Y = function() { + e(this, h).$state.canSetVolume.set(e(this, o).canControlVolume); +}, K = function(t) { + const s = r(this, a, y).call(this, t); + e(this, h).notify("stream-type-change", r(this, a, Tt).call(this), s); +}, Tt = function() { + var s; + return ((s = e(this, o).mediaInfo) == null ? void 0 : s.streamType) === chrome.cast.media.StreamType.LIVE ? e(this, o).canSeek ? "live:dvr" : "live" : "on-demand"; +}, ft = function() { + if (e(this, f)) return; + const t = e(this, o).currentTime; + t !== e(this, I) && (e(this, h).notify("time-change", t), t > e(this, v) && (l(this, v, t), r(this, a, j).call(this)), e(this, h).$state.seeking() && e(this, h).notify("seeked", t), l(this, I, t)); +}, gt = function(t) { + if (!e(this, o).isMediaLoaded || e(this, f)) return; + const s = e(this, o).duration, i = r(this, a, y).call(this, t); + l(this, S, new L(0, s)), e(this, h).notify("duration-change", s, i); +}, z = function(t) { + if (!e(this, o).isMediaLoaded) return; + const s = { + muted: e(this, o).isMuted, + volume: e(this, o).volumeLevel + }, i = r(this, a, y).call(this, t); + e(this, h).notify("volume-change", s, i); +}, kt = function(t) { + const s = r(this, a, y).call(this, t); + e(this, o).isPaused ? e(this, h).notify("pause", void 0, s) : e(this, h).notify("play", void 0, s); +}, j = function(t) { + const s = { + seekable: r(this, a, J).call(this), + buffered: new L(0, e(this, v)) + }, i = t ? r(this, a, y).call(this, t) : void 0; + e(this, h).notify("progress", s, i); +}, yt = function(t) { + const s = e(this, o).playerState, i = chrome.cast.media.PlayerState; + if (l(this, b, s === i.IDLE), s === i.PAUSED) return; + const n = r(this, a, y).call(this, t); + switch (s) { + case i.PLAYING: + e(this, h).notify("playing", void 0, n); + break; + case i.BUFFERING: + e(this, h).notify("waiting", void 0, n); + break; + case i.IDLE: + e(this, R).stop(), e(this, h).notify("pause"), e(this, h).notify("end"); + break; + } +}, J = function() { + return e(this, o).liveSeekableRange ? new L(e(this, o).liveSeekableRange.start, e(this, o).liveSeekableRange.end) : e(this, S); +}, y = function(t) { + return t instanceof Event ? t : new tt(t.type, { detail: t }); +}, pt = function(t) { + const { streamType: s, title: i, poster: n } = e(this, h).$state; + return new _t(t).setMetadata(i(), n()).setStreamType(s()).setTracks(e(this, C).getLocalTextTracks()).build(); +}, Ct = function(t) { + var m, u; + const s = r(this, a, pt).call(this, t), i = new chrome.cast.media.LoadRequest(s), n = e(this, h).$state.savedState(); + return i.autoplay = (((m = e(this, f)) == null ? void 0 : m.paused) ?? (n == null ? void 0 : n.paused)) === !1, i.currentTime = ((u = e(this, f)) == null ? void 0 : u.time) ?? (n == null ? void 0 : n.currentTime) ?? 0, i; +}, Q = async function(t, s) { + const i = V(e(this, h).$state.source); + l(this, f, { src: i, paused: t, time: s }), await this.loadSource(i); +}, Et = function() { + r(this, a, Q).call(this, e(this, o).isPaused, e(this, o).currentTime).catch((t) => { + }); +}; +export { + Ht as GoogleCastProvider +}; +//# sourceMappingURL=vidstack-BeT6vBOi-DhlHLgwc.js.map diff --git a/packages/ui/dist-lib/vidstack-BeT6vBOi-DhlHLgwc.js.map b/packages/ui/dist-lib/vidstack-BeT6vBOi-DhlHLgwc.js.map new file mode 100644 index 00000000..2e158392 --- /dev/null +++ b/packages/ui/dist-lib/vidstack-BeT6vBOi-DhlHLgwc.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vidstack-BeT6vBOi-DhlHLgwc.js","sources":["../node_modules/@vidstack/react/prod/chunks/vidstack-BeT6vBOi.js"],"sourcesContent":["\"use client\"\n\nimport { listenEvent, effect, untrack, createScope, keysOf, onDispose, DOMEvent, peek } from './vidstack-CZgUA94N.js';\nimport { ListSymbol, TimeRange, RAFLoop } from './vidstack-D5Pzx_k5.js';\nimport { getCastSessionMedia, getCastContext, getCastSession, hasActiveCastSession, listenCastContextEvent, getCastErrorMessage } from './vidstack-CQQ1xKSy.js';\nimport 'react';\nimport '@floating-ui/dom';\n\nclass GoogleCastMediaInfoBuilder {\n #info;\n constructor(src) {\n this.#info = new chrome.cast.media.MediaInfo(src.src, src.type);\n }\n build() {\n return this.#info;\n }\n setStreamType(streamType) {\n if (streamType.includes(\"live\")) {\n this.#info.streamType = chrome.cast.media.StreamType.LIVE;\n } else {\n this.#info.streamType = chrome.cast.media.StreamType.BUFFERED;\n }\n return this;\n }\n setTracks(tracks) {\n this.#info.tracks = tracks.map(this.#buildCastTrack);\n return this;\n }\n setMetadata(title, poster) {\n this.#info.metadata = new chrome.cast.media.GenericMediaMetadata();\n this.#info.metadata.title = title;\n this.#info.metadata.images = [{ url: poster }];\n return this;\n }\n #buildCastTrack(track, trackId) {\n const castTrack = new chrome.cast.media.Track(trackId, chrome.cast.media.TrackType.TEXT);\n castTrack.name = track.label;\n castTrack.trackContentId = track.src;\n castTrack.trackContentType = \"text/vtt\";\n castTrack.language = track.language;\n castTrack.subtype = track.kind.toUpperCase();\n return castTrack;\n }\n}\n\nclass GoogleCastTracksManager {\n #cast;\n #ctx;\n #onNewLocalTracks;\n constructor(cast, ctx, onNewLocalTracks) {\n this.#cast = cast;\n this.#ctx = ctx;\n this.#onNewLocalTracks = onNewLocalTracks;\n }\n setup() {\n const syncRemoteActiveIds = this.syncRemoteActiveIds.bind(this);\n listenEvent(this.#ctx.audioTracks, \"change\", syncRemoteActiveIds);\n listenEvent(this.#ctx.textTracks, \"mode-change\", syncRemoteActiveIds);\n effect(this.#syncLocalTracks.bind(this));\n }\n getLocalTextTracks() {\n return this.#ctx.$state.textTracks().filter((track) => track.src && track.type === \"vtt\");\n }\n #getLocalAudioTracks() {\n return this.#ctx.$state.audioTracks();\n }\n #getRemoteTracks(type) {\n const tracks = this.#cast.mediaInfo?.tracks ?? [];\n return type ? tracks.filter((track) => track.type === type) : tracks;\n }\n #getRemoteActiveIds() {\n const activeIds = [], activeLocalAudioTrack = this.#getLocalAudioTracks().find((track) => track.selected), activeLocalTextTracks = this.getLocalTextTracks().filter((track) => track.mode === \"showing\");\n if (activeLocalAudioTrack) {\n const remoteAudioTracks = this.#getRemoteTracks(chrome.cast.media.TrackType.AUDIO), remoteAudioTrack = this.#findRemoteTrack(remoteAudioTracks, activeLocalAudioTrack);\n if (remoteAudioTrack) activeIds.push(remoteAudioTrack.trackId);\n }\n if (activeLocalTextTracks?.length) {\n const remoteTextTracks = this.#getRemoteTracks(chrome.cast.media.TrackType.TEXT);\n if (remoteTextTracks.length) {\n for (const localTrack of activeLocalTextTracks) {\n const remoteTextTrack = this.#findRemoteTrack(remoteTextTracks, localTrack);\n if (remoteTextTrack) activeIds.push(remoteTextTrack.trackId);\n }\n }\n }\n return activeIds;\n }\n #syncLocalTracks() {\n const localTextTracks = this.getLocalTextTracks();\n if (!this.#cast.isMediaLoaded) return;\n const remoteTextTracks = this.#getRemoteTracks(chrome.cast.media.TrackType.TEXT);\n for (const localTrack of localTextTracks) {\n const hasRemoteTrack = this.#findRemoteTrack(remoteTextTracks, localTrack);\n if (!hasRemoteTrack) {\n untrack(() => this.#onNewLocalTracks?.());\n break;\n }\n }\n }\n syncRemoteTracks(event) {\n if (!this.#cast.isMediaLoaded) return;\n const localAudioTracks = this.#getLocalAudioTracks(), localTextTracks = this.getLocalTextTracks(), remoteAudioTracks = this.#getRemoteTracks(chrome.cast.media.TrackType.AUDIO), remoteTextTracks = this.#getRemoteTracks(chrome.cast.media.TrackType.TEXT);\n for (const remoteAudioTrack of remoteAudioTracks) {\n const hasLocalTrack = this.#findLocalTrack(localAudioTracks, remoteAudioTrack);\n if (hasLocalTrack) continue;\n const localAudioTrack = {\n id: remoteAudioTrack.trackId.toString(),\n label: remoteAudioTrack.name,\n language: remoteAudioTrack.language,\n kind: remoteAudioTrack.subtype ?? \"main\",\n selected: false\n };\n this.#ctx.audioTracks[ListSymbol.add](localAudioTrack, event);\n }\n for (const remoteTextTrack of remoteTextTracks) {\n const hasLocalTrack = this.#findLocalTrack(localTextTracks, remoteTextTrack);\n if (hasLocalTrack) continue;\n const localTextTrack = {\n id: remoteTextTrack.trackId.toString(),\n src: remoteTextTrack.trackContentId,\n label: remoteTextTrack.name,\n language: remoteTextTrack.language,\n kind: remoteTextTrack.subtype.toLowerCase()\n };\n this.#ctx.textTracks.add(localTextTrack, event);\n }\n }\n syncRemoteActiveIds(event) {\n if (!this.#cast.isMediaLoaded) return;\n const activeIds = this.#getRemoteActiveIds(), editRequest = new chrome.cast.media.EditTracksInfoRequest(activeIds);\n this.#editTracksInfo(editRequest).catch((error) => {\n });\n }\n #editTracksInfo(request) {\n const media = getCastSessionMedia();\n return new Promise((resolve, reject) => media?.editTracksInfo(request, resolve, reject));\n }\n #findLocalTrack(localTracks, remoteTrack) {\n return localTracks.find((localTrack) => this.#isMatch(localTrack, remoteTrack));\n }\n #findRemoteTrack(remoteTracks, localTrack) {\n return remoteTracks.find((remoteTrack) => this.#isMatch(localTrack, remoteTrack));\n }\n // Note: we can't rely on id matching because they will differ between local/remote. A local\n // track id might not even exist.\n #isMatch(localTrack, remoteTrack) {\n return remoteTrack.name === localTrack.label && remoteTrack.language === localTrack.language && remoteTrack.subtype.toLowerCase() === localTrack.kind.toLowerCase();\n }\n}\n\nclass GoogleCastProvider {\n $$PROVIDER_TYPE = \"GOOGLE_CAST\";\n scope = createScope();\n #player;\n #ctx;\n #tracks;\n #currentSrc = null;\n #state = \"disconnected\";\n #currentTime = 0;\n #played = 0;\n #seekableRange = new TimeRange(0, 0);\n #timeRAF = new RAFLoop(this.#onAnimationFrame.bind(this));\n #playerEventHandlers;\n #reloadInfo = null;\n #isIdle = false;\n constructor(player, ctx) {\n this.#player = player;\n this.#ctx = ctx;\n this.#tracks = new GoogleCastTracksManager(player, ctx, this.#onNewLocalTracks.bind(this));\n }\n get type() {\n return \"google-cast\";\n }\n get currentSrc() {\n return this.#currentSrc;\n }\n /**\n * The Google Cast remote player.\n *\n * @see {@link https://developers.google.com/cast/docs/reference/web_sender/cast.framework.RemotePlayer}\n */\n get player() {\n return this.#player;\n }\n /**\n * @see {@link https://developers.google.com/cast/docs/reference/web_sender/cast.framework.CastContext}\n */\n get cast() {\n return getCastContext();\n }\n /**\n * @see {@link https://developers.google.com/cast/docs/reference/web_sender/cast.framework.CastSession}\n */\n get session() {\n return getCastSession();\n }\n /**\n * @see {@link https://developers.google.com/cast/docs/reference/web_sender/chrome.cast.media.Media}\n */\n get media() {\n return getCastSessionMedia();\n }\n /**\n * Whether the current Google Cast session belongs to this provider.\n */\n get hasActiveSession() {\n return hasActiveCastSession(this.#currentSrc);\n }\n setup() {\n this.#attachCastContextEventListeners();\n this.#attachCastPlayerEventListeners();\n this.#tracks.setup();\n this.#ctx.notify(\"provider-setup\", this);\n }\n #attachCastContextEventListeners() {\n listenCastContextEvent(\n cast.framework.CastContextEventType.CAST_STATE_CHANGED,\n this.#onCastStateChange.bind(this)\n );\n }\n #attachCastPlayerEventListeners() {\n const Event2 = cast.framework.RemotePlayerEventType, handlers = {\n [Event2.IS_CONNECTED_CHANGED]: this.#onCastStateChange,\n [Event2.IS_MEDIA_LOADED_CHANGED]: this.#onMediaLoadedChange,\n [Event2.CAN_CONTROL_VOLUME_CHANGED]: this.#onCanControlVolumeChange,\n [Event2.CAN_SEEK_CHANGED]: this.#onCanSeekChange,\n [Event2.DURATION_CHANGED]: this.#onDurationChange,\n [Event2.IS_MUTED_CHANGED]: this.#onVolumeChange,\n [Event2.VOLUME_LEVEL_CHANGED]: this.#onVolumeChange,\n [Event2.IS_PAUSED_CHANGED]: this.#onPausedChange,\n [Event2.LIVE_SEEKABLE_RANGE_CHANGED]: this.#onProgress,\n [Event2.PLAYER_STATE_CHANGED]: this.#onPlayerStateChange\n };\n this.#playerEventHandlers = handlers;\n const handler = this.#onRemotePlayerEvent.bind(this);\n for (const type of keysOf(handlers)) {\n this.#player.controller.addEventListener(type, handler);\n }\n onDispose(() => {\n for (const type of keysOf(handlers)) {\n this.#player.controller.removeEventListener(type, handler);\n }\n });\n }\n async play() {\n if (!this.#player.isPaused && !this.#isIdle) return;\n if (this.#isIdle) {\n await this.#reload(false, 0);\n return;\n }\n this.#player.controller?.playOrPause();\n }\n async pause() {\n if (this.#player.isPaused) return;\n this.#player.controller?.playOrPause();\n }\n getMediaStatus(request) {\n return new Promise((resolve, reject) => {\n this.media?.getStatus(request, resolve, reject);\n });\n }\n setMuted(muted) {\n const hasChanged = muted && !this.#player.isMuted || !muted && this.#player.isMuted;\n if (hasChanged) this.#player.controller?.muteOrUnmute();\n }\n setCurrentTime(time) {\n this.#player.currentTime = time;\n this.#ctx.notify(\"seeking\", time);\n this.#player.controller?.seek();\n }\n setVolume(volume) {\n this.#player.volumeLevel = volume;\n this.#player.controller?.setVolumeLevel();\n }\n async loadSource(src) {\n if (this.#reloadInfo?.src !== src) this.#reloadInfo = null;\n if (hasActiveCastSession(src)) {\n this.#resumeSession();\n this.#currentSrc = src;\n return;\n }\n this.#ctx.notify(\"load-start\");\n const loadRequest = this.#buildLoadRequest(src), errorCode = await this.session.loadMedia(loadRequest);\n if (errorCode) {\n this.#currentSrc = null;\n this.#ctx.notify(\"error\", Error(getCastErrorMessage(errorCode)));\n return;\n }\n this.#currentSrc = src;\n }\n destroy() {\n this.#reset();\n this.#endSession();\n }\n #reset() {\n if (!this.#reloadInfo) {\n this.#played = 0;\n this.#seekableRange = new TimeRange(0, 0);\n }\n this.#timeRAF.stop();\n this.#currentTime = 0;\n this.#reloadInfo = null;\n }\n #resumeSession() {\n const resumeSessionEvent = new DOMEvent(\"resume-session\", { detail: this.session });\n this.#onMediaLoadedChange(resumeSessionEvent);\n const { muted, volume, savedState } = this.#ctx.$state, localState = savedState();\n this.setCurrentTime(Math.max(this.#player.currentTime, localState?.currentTime ?? 0));\n this.setMuted(muted());\n this.setVolume(volume());\n if (localState?.paused === false) this.play();\n }\n #endSession() {\n this.cast.endCurrentSession(true);\n const { remotePlaybackLoader } = this.#ctx.$state;\n remotePlaybackLoader.set(null);\n }\n #disconnectFromReceiver() {\n const { savedState } = this.#ctx.$state;\n savedState.set({\n paused: this.#player.isPaused,\n currentTime: this.#player.currentTime\n });\n this.#endSession();\n }\n #onAnimationFrame() {\n this.#onCurrentTimeChange();\n }\n #onRemotePlayerEvent(event) {\n this.#playerEventHandlers[event.type].call(this, event);\n }\n #onCastStateChange(data) {\n const castState = this.cast.getCastState(), state = castState === cast.framework.CastState.CONNECTED ? \"connected\" : castState === cast.framework.CastState.CONNECTING ? \"connecting\" : \"disconnected\";\n if (this.#state === state) return;\n const detail = { type: \"google-cast\", state }, trigger = this.#createEvent(data);\n this.#state = state;\n this.#ctx.notify(\"remote-playback-change\", detail, trigger);\n if (state === \"disconnected\") {\n this.#disconnectFromReceiver();\n }\n }\n #onMediaLoadedChange(event) {\n const hasLoaded = !!this.#player.isMediaLoaded;\n if (!hasLoaded) return;\n const src = peek(this.#ctx.$state.source);\n Promise.resolve().then(() => {\n if (src !== peek(this.#ctx.$state.source) || !this.#player.isMediaLoaded) return;\n this.#reset();\n const duration = this.#player.duration;\n this.#seekableRange = new TimeRange(0, duration);\n const detail = {\n provider: this,\n duration,\n buffered: new TimeRange(0, 0),\n seekable: this.#getSeekableRange()\n }, trigger = this.#createEvent(event);\n this.#ctx.notify(\"loaded-metadata\", void 0, trigger);\n this.#ctx.notify(\"loaded-data\", void 0, trigger);\n this.#ctx.notify(\"can-play\", detail, trigger);\n this.#onCanControlVolumeChange();\n this.#onCanSeekChange(event);\n const { volume, muted } = this.#ctx.$state;\n this.setVolume(volume());\n this.setMuted(muted());\n this.#timeRAF.start();\n this.#tracks.syncRemoteTracks(trigger);\n this.#tracks.syncRemoteActiveIds(trigger);\n });\n }\n #onCanControlVolumeChange() {\n this.#ctx.$state.canSetVolume.set(this.#player.canControlVolume);\n }\n #onCanSeekChange(event) {\n const trigger = this.#createEvent(event);\n this.#ctx.notify(\"stream-type-change\", this.#getStreamType(), trigger);\n }\n #getStreamType() {\n const streamType = this.#player.mediaInfo?.streamType;\n return streamType === chrome.cast.media.StreamType.LIVE ? this.#player.canSeek ? \"live:dvr\" : \"live\" : \"on-demand\";\n }\n #onCurrentTimeChange() {\n if (this.#reloadInfo) return;\n const currentTime = this.#player.currentTime;\n if (currentTime === this.#currentTime) return;\n this.#ctx.notify(\"time-change\", currentTime);\n if (currentTime > this.#played) {\n this.#played = currentTime;\n this.#onProgress();\n }\n if (this.#ctx.$state.seeking()) {\n this.#ctx.notify(\"seeked\", currentTime);\n }\n this.#currentTime = currentTime;\n }\n #onDurationChange(event) {\n if (!this.#player.isMediaLoaded || this.#reloadInfo) return;\n const duration = this.#player.duration, trigger = this.#createEvent(event);\n this.#seekableRange = new TimeRange(0, duration);\n this.#ctx.notify(\"duration-change\", duration, trigger);\n }\n #onVolumeChange(event) {\n if (!this.#player.isMediaLoaded) return;\n const detail = {\n muted: this.#player.isMuted,\n volume: this.#player.volumeLevel\n }, trigger = this.#createEvent(event);\n this.#ctx.notify(\"volume-change\", detail, trigger);\n }\n #onPausedChange(event) {\n const trigger = this.#createEvent(event);\n if (this.#player.isPaused) {\n this.#ctx.notify(\"pause\", void 0, trigger);\n } else {\n this.#ctx.notify(\"play\", void 0, trigger);\n }\n }\n #onProgress(event) {\n const detail = {\n seekable: this.#getSeekableRange(),\n buffered: new TimeRange(0, this.#played)\n }, trigger = event ? this.#createEvent(event) : void 0;\n this.#ctx.notify(\"progress\", detail, trigger);\n }\n #onPlayerStateChange(event) {\n const state = this.#player.playerState, PlayerState = chrome.cast.media.PlayerState;\n this.#isIdle = state === PlayerState.IDLE;\n if (state === PlayerState.PAUSED) return;\n const trigger = this.#createEvent(event);\n switch (state) {\n case PlayerState.PLAYING:\n this.#ctx.notify(\"playing\", void 0, trigger);\n break;\n case PlayerState.BUFFERING:\n this.#ctx.notify(\"waiting\", void 0, trigger);\n break;\n case PlayerState.IDLE:\n this.#timeRAF.stop();\n this.#ctx.notify(\"pause\");\n this.#ctx.notify(\"end\");\n break;\n }\n }\n #getSeekableRange() {\n return this.#player.liveSeekableRange ? new TimeRange(this.#player.liveSeekableRange.start, this.#player.liveSeekableRange.end) : this.#seekableRange;\n }\n #createEvent(detail) {\n return detail instanceof Event ? detail : new DOMEvent(detail.type, { detail });\n }\n #buildMediaInfo(src) {\n const { streamType, title, poster } = this.#ctx.$state;\n return new GoogleCastMediaInfoBuilder(src).setMetadata(title(), poster()).setStreamType(streamType()).setTracks(this.#tracks.getLocalTextTracks()).build();\n }\n #buildLoadRequest(src) {\n const mediaInfo = this.#buildMediaInfo(src), request = new chrome.cast.media.LoadRequest(mediaInfo), savedState = this.#ctx.$state.savedState();\n request.autoplay = (this.#reloadInfo?.paused ?? savedState?.paused) === false;\n request.currentTime = this.#reloadInfo?.time ?? savedState?.currentTime ?? 0;\n return request;\n }\n async #reload(paused, time) {\n const src = peek(this.#ctx.$state.source);\n this.#reloadInfo = { src, paused, time };\n await this.loadSource(src);\n }\n #onNewLocalTracks() {\n this.#reload(this.#player.isPaused, this.#player.currentTime).catch((error) => {\n });\n }\n}\n\nexport { GoogleCastProvider };\n"],"names":["GoogleCastMediaInfoBuilder","src","__privateAdd","_GoogleCastMediaInfoBuilder_instances","_info","__privateSet","__privateGet","streamType","tracks","__privateMethod","buildCastTrack_fn","title","poster","track","trackId","castTrack","GoogleCastTracksManager","cast","ctx","onNewLocalTracks","_GoogleCastTracksManager_instances","_cast","_ctx","_onNewLocalTracks","syncRemoteActiveIds","listenEvent","effect","syncLocalTracks_fn","event","localAudioTracks","getLocalAudioTracks_fn","localTextTracks","remoteAudioTracks","getRemoteTracks_fn","remoteTextTracks","remoteAudioTrack","findLocalTrack_fn","localAudioTrack","ListSymbol","remoteTextTrack","localTextTrack","activeIds","getRemoteActiveIds_fn","editRequest","editTracksInfo_fn","error","type","_a","activeLocalAudioTrack","activeLocalTextTracks","findRemoteTrack_fn","localTrack","untrack","request","media","getCastSessionMedia","resolve","reject","localTracks","remoteTrack","isMatch_fn","remoteTracks","GoogleCastProvider","player","_GoogleCastProvider_instances","__publicField","createScope","_player","_tracks","_currentSrc","_state","_currentTime","_played","_seekableRange","TimeRange","_timeRAF","RAFLoop","onAnimationFrame_fn","_playerEventHandlers","_reloadInfo","_isIdle","onNewLocalTracks_fn","getCastContext","getCastSession","hasActiveCastSession","attachCastContextEventListeners_fn","attachCastPlayerEventListeners_fn","reload_fn","muted","time","volume","resumeSession_fn","loadRequest","buildLoadRequest_fn","errorCode","getCastErrorMessage","reset_fn","endSession_fn","listenCastContextEvent","onCastStateChange_fn","Event2","handlers","onMediaLoadedChange_fn","onCanControlVolumeChange_fn","onCanSeekChange_fn","onDurationChange_fn","onVolumeChange_fn","onPausedChange_fn","onProgress_fn","onPlayerStateChange_fn","handler","onRemotePlayerEvent_fn","keysOf","onDispose","resumeSessionEvent","DOMEvent","savedState","localState","remotePlaybackLoader","disconnectFromReceiver_fn","onCurrentTimeChange_fn","data","castState","state","detail","trigger","createEvent_fn","peek","duration","getSeekableRange_fn","getStreamType_fn","currentTime","PlayerState","buildMediaInfo_fn","mediaInfo","_b","paused"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/packages/ui/dist-lib/vidstack-BqgQkvb4-BAUzB5A8.js b/packages/ui/dist-lib/vidstack-BqgQkvb4-BAUzB5A8.js new file mode 100644 index 00000000..83099411 --- /dev/null +++ b/packages/ui/dist-lib/vidstack-BqgQkvb4-BAUzB5A8.js @@ -0,0 +1,435 @@ +var ue = Object.defineProperty; +var N = (r) => { + throw TypeError(r); +}; +var de = (r, c, e) => c in r ? ue(r, c, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[c] = e; +var b = (r, c, e) => de(r, typeof c != "symbol" ? c + "" : c, e), S = (r, c, e) => c.has(r) || N("Cannot " + e); +var t = (r, c, e) => (S(r, c, "read from private field"), e ? e.call(r) : c.get(r)), f = (r, c, e) => c.has(r) ? N("Cannot add the same private member more than once") : c instanceof WeakSet ? c.add(r) : c.set(r, e), u = (r, c, e, i) => (S(r, c, "write to private field"), i ? i.call(r, e) : c.set(r, e), e), o = (r, c, e) => (S(r, c, "access private method"), e); +import { x as fe, y as U, z as C, R as pe, k as ye, n as q, l as Q, h as be, A as _, L as R, m as ke, B as ve, T as me, Q as z } from "./lib-export-CI8auKfP.js"; +import { E as we } from "./vidstack-FldwQc2Q-PD3aMpLc.js"; +import { resolveVimeoVideoId as Pe, getVimeoVideoInfo as Te } from "./vidstack-krOAtKMi-B4IZWKdc.js"; +import "react"; +const Ce = [ + "bufferend", + "bufferstart", + // 'cuechange', + "durationchange", + "ended", + "enterpictureinpicture", + "error", + "fullscreenchange", + "leavepictureinpicture", + "loaded", + // 'loadeddata', + // 'loadedmetadata', + // 'loadstart', + "playProgress", + "loadProgress", + "pause", + "play", + "playbackratechange", + // 'progress', + "qualitychange", + "seeked", + "seeking", + // 'texttrackchange', + "timeupdate", + "volumechange", + "waiting" + // 'adstarted', + // 'adcompleted', + // 'aderror', + // 'adskipped', + // 'adallcompleted', + // 'adclicked', + // 'chapterchange', + // 'chromecastconnected', + // 'remoteplaybackavailabilitychange', + // 'remoteplaybackconnecting', + // 'remoteplaybackconnect', + // 'remoteplaybackdisconnect', + // 'liveeventended', + // 'liveeventstarted', + // 'livestreamoffline', + // 'livestreamonline', +]; +var a, y, k, w, g, V, v, $, A, P, m, E, s, W, Y, G, H, T, J, K, X, x, Z, ee, te, se, ie, L, ne, ae, oe, F, he, O, re, B, ce, le, l, D, j; +class Re extends we { + constructor(e, i) { + super(e); + f(this, s); + b(this, "$$PROVIDER_TYPE", "VIMEO"); + b(this, "scope", fe()); + b(this, "fullscreen"); + f(this, a); + f(this, y, U("")); + f(this, k, U(!1)); + f(this, w, null); + f(this, g, null); + f(this, V, !1); + f(this, v, new C(0, 0)); + f(this, $, new pe(o(this, s, H).bind(this))); + f(this, A, null); + f(this, P, null); + f(this, m, /* @__PURE__ */ new Map()); + f(this, E, null); + /** + * Whether tracking session data should be enabled on the embed, including cookies and analytics. + * This is turned off by default to be GDPR-compliant. + * + * @defaultValue `false` + */ + b(this, "cookies", !1); + b(this, "title", !0); + b(this, "byline", !0); + b(this, "portrait", !0); + b(this, "color", "00ADEF"); + // Embed will sometimes dispatch 0 at end of playback. + f(this, T, !1); + u(this, a, i); + const n = this; + this.fullscreen = { + get active() { + return t(n, V); + }, + supported: !0, + enter: () => o(this, s, l).call(this, "requestFullscreen"), + exit: () => o(this, s, l).call(this, "exitFullscreen") + }; + } + get type() { + return "vimeo"; + } + get currentSrc() { + return t(this, g); + } + get videoId() { + return t(this, y).call(this); + } + get hash() { + return t(this, w); + } + get isPro() { + return t(this, k).call(this); + } + preconnect() { + ye(this.getOrigin()); + } + setup() { + super.setup(), q(o(this, s, W).bind(this)), q(o(this, s, Y).bind(this)), q(o(this, s, G).bind(this)), t(this, a).notify("provider-setup", this); + } + destroy() { + o(this, s, D).call(this), this.fullscreen = void 0; + const e = "provider destroyed"; + for (const i of t(this, m).values()) + for (const { reject: n } of i) n(e); + t(this, m).clear(), o(this, s, l).call(this, "destroy"); + } + async play() { + return o(this, s, l).call(this, "play"); + } + async pause() { + return o(this, s, l).call(this, "pause"); + } + setMuted(e) { + o(this, s, l).call(this, "setMuted", e); + } + setCurrentTime(e) { + o(this, s, l).call(this, "seekTo", e), t(this, a).notify("seeking", e); + } + setVolume(e) { + o(this, s, l).call(this, "setVolume", e), o(this, s, l).call(this, "setMuted", Q(t(this, a).$state.muted)); + } + setPlaybackRate(e) { + o(this, s, l).call(this, "setPlaybackRate", e); + } + async loadSource(e) { + if (!be(e.src)) { + u(this, g, null), u(this, w, null), t(this, y).set(""); + return; + } + const { videoId: i, hash: n } = Pe(e.src); + t(this, y).set(i ?? ""), u(this, w, n ?? null), u(this, g, e); + } + getOrigin() { + return "https://player.vimeo.com"; + } + buildParams() { + const { keyDisabled: e } = t(this, a).$props, { playsInline: i, nativeControls: n } = t(this, a).$state, h = n(); + return { + title: this.title, + byline: this.byline, + color: this.color, + portrait: this.portrait, + controls: h, + h: this.hash, + keyboard: h && !e(), + transparent: !0, + playsinline: i(), + dnt: !this.cookies + }; + } + onMessage(e, i) { + e.event ? o(this, s, ce).call(this, e.event, e.data, i) : e.method && o(this, s, Z).call(this, e.method, e.value, i); + } + onLoad() { + } +} +a = new WeakMap(), y = new WeakMap(), k = new WeakMap(), w = new WeakMap(), g = new WeakMap(), V = new WeakMap(), v = new WeakMap(), $ = new WeakMap(), A = new WeakMap(), P = new WeakMap(), m = new WeakMap(), E = new WeakMap(), s = new WeakSet(), W = function() { + o(this, s, D).call(this); + const e = t(this, y).call(this); + if (!e) { + this.src.set(""); + return; + } + this.src.set(`${this.getOrigin()}/video/${e}`), t(this, a).notify("load-start"); +}, Y = function() { + const e = t(this, y).call(this); + if (!e) return; + const i = _(), n = new AbortController(); + return u(this, E, i), Te(e, n, t(this, w)).then((h) => { + i.resolve(h); + }).catch((h) => { + i.reject(); + }), () => { + i.reject(), n.abort(); + }; +}, G = function() { + const e = t(this, k).call(this), { $state: i, qualities: n } = t(this, a); + if (i.canSetPlaybackRate.set(e), n[R.setReadonly](!e), e) + return ke(n, "change", () => { + var d; + if (n.auto) return; + const h = (d = n.selected) == null ? void 0 : d.id; + h && o(this, s, l).call(this, "setQuality", h); + }); +}, H = function() { + o(this, s, l).call(this, "getCurrentTime"); +}, T = new WeakMap(), J = function(e, i) { + if (t(this, T) && e === 0) return; + const { realCurrentTime: n, paused: h, bufferedEnd: d, seekableEnd: p, live: I } = t(this, a).$state; + if (n() === e) return; + const M = n(); + t(this, a).notify("time-change", e, i), Math.abs(M - e) > 1.5 && (t(this, a).notify("seeking", e, i), !h() && d() < e && t(this, a).notify("waiting", void 0, i)), !I() && p() - e < 0.01 && (t(this, a).notify("end", void 0, i), u(this, T, !0), setTimeout(() => { + u(this, T, !1); + }, 500)); +}, K = function(e, i) { + t(this, a).notify("seeked", e, i); +}, X = function(e) { + var n; + const i = t(this, y).call(this); + (n = t(this, E)) == null || n.promise.then((h) => { + if (!h) return; + const { title: d, poster: p, duration: I, pro: M } = h; + t(this, k).set(M), t(this, a).notify("title-change", d, e), t(this, a).notify("poster-change", p, e), t(this, a).notify("duration-change", I, e), o(this, s, x).call(this, I, e); + }).catch(() => { + i === t(this, y).call(this) && (o(this, s, l).call(this, "getVideoTitle"), o(this, s, l).call(this, "getDuration")); + }); +}, x = function(e, i) { + const { nativeControls: n } = t(this, a).$state, h = n(); + u(this, v, new C(0, e)); + const d = { + buffered: new C(0, 0), + seekable: t(this, v), + duration: e + }; + t(this, a).delegate.ready(d, i), h || o(this, s, l).call(this, "_hideOverlay"), o(this, s, l).call(this, "getQualities"), o(this, s, l).call(this, "getChapters"); +}, Z = function(e, i, n) { + var h; + switch (e) { + case "getVideoTitle": + const d = i; + t(this, a).notify("title-change", d, n); + break; + case "getDuration": + const p = i; + t(this, a).$state.canPlay() ? t(this, a).notify("duration-change", p, n) : o(this, s, x).call(this, p, n); + break; + case "getCurrentTime": + o(this, s, J).call(this, i, n); + break; + case "getBuffered": + ve(i) && i.length && o(this, s, L).call(this, i[i.length - 1][1], n); + break; + case "setMuted": + o(this, s, F).call(this, Q(t(this, a).$state.volume), i, n); + break; + case "getChapters": + o(this, s, he).call(this, i); + break; + case "getQualities": + o(this, s, re).call(this, i, n); + break; + } + (h = o(this, s, j).call(this, e)) == null || h.resolve(); +}, ee = function() { + for (const e of Ce) + o(this, s, l).call(this, "addEventListener", e); +}, te = function(e) { + t(this, $).stop(), t(this, a).notify("pause", void 0, e); +}, se = function(e) { + t(this, $).start(), t(this, a).notify("play", void 0, e); +}, ie = function(e) { + const { paused: i } = t(this, a).$state; + !i() && !t(this, T) && t(this, a).notify("playing", void 0, e); +}, L = function(e, i) { + const n = { + buffered: new C(0, e), + seekable: t(this, v) + }; + t(this, a).notify("progress", n, i); +}, ne = function(e) { + t(this, a).notify("waiting", void 0, e); +}, ae = function(e) { + const { paused: i } = t(this, a).$state; + i() || t(this, a).notify("playing", void 0, e); +}, oe = function(e) { + const { paused: i } = t(this, a).$state; + i() && t(this, a).notify("play", void 0, e), t(this, a).notify("waiting", void 0, e); +}, F = function(e, i, n) { + const h = { volume: e, muted: i }; + t(this, a).notify("volume-change", h, n); +}, // #onTextTrackChange(track: VimeoTextTrack, trigger: Event) { +// const textTrack = this.#ctx.textTracks.toArray().find((t) => t.language === track.language); +// if (textTrack) textTrack.mode = track.mode; +// } +// #onTextTracksChange(tracks: VimeoTextTrack[], trigger: Event) { +// for (const init of tracks) { +// const textTrack = new TextTrack({ +// ...init, +// label: init.label.replace('auto-generated', 'auto'), +// }); +// textTrack[TextTrackSymbol.readyState] = 2; +// this.#ctx.textTracks.add(textTrack, trigger); +// textTrack.setMode(init.mode, trigger); +// } +// } +// #onCueChange(cue: VimeoTextCue, trigger: Event) { +// const { textTracks, $state } = this.#ctx, +// { currentTime } = $state, +// track = textTracks.selected; +// if (this.#currentCue) track?.removeCue(this.#currentCue, trigger); +// this.#currentCue = new window.VTTCue(currentTime(), Number.MAX_SAFE_INTEGER, cue.text); +// track?.addCue(this.#currentCue, trigger); +// } +he = function(e) { + if (o(this, s, O).call(this), !e.length) return; + const i = new me({ + kind: "chapters", + default: !0 + }), { seekableEnd: n } = t(this, a).$state; + for (let h = 0; h < e.length; h++) { + const d = e[h], p = e[h + 1]; + i.addCue( + new window.VTTCue( + d.startTime, + (p == null ? void 0 : p.startTime) ?? n(), + d.title + ) + ); + } + u(this, P, i), t(this, a).textTracks.add(i); +}, O = function() { + t(this, P) && (t(this, a).textTracks.remove(t(this, P)), u(this, P, null)); +}, re = function(e, i) { + t(this, a).qualities[z.enableAuto] = e.some((n) => n.id === "auto") ? () => o(this, s, l).call(this, "setQuality", "auto") : void 0; + for (const n of e) { + if (n.id === "auto") continue; + const h = +n.id.slice(0, -1); + isNaN(h) || t(this, a).qualities[R.add]( + { + id: n.id, + width: h * (16 / 9), + height: h, + codec: "avc1,h.264", + bitrate: -1 + }, + i + ); + } + o(this, s, B).call(this, e.find((n) => n.active), i); +}, B = function({ id: e } = {}, i) { + if (!e) return; + const n = e === "auto", h = t(this, a).qualities.getById(e); + n ? (t(this, a).qualities[z.setAuto](n, i), t(this, a).qualities[R.select](void 0, !0, i)) : t(this, a).qualities[R.select](h ?? void 0, !0, i); +}, ce = function(e, i, n) { + switch (e) { + case "ready": + o(this, s, ee).call(this); + break; + case "loaded": + o(this, s, X).call(this, n); + break; + case "play": + o(this, s, se).call(this, n); + break; + case "playProgress": + o(this, s, ie).call(this, n); + break; + case "pause": + o(this, s, te).call(this, n); + break; + case "loadProgress": + o(this, s, L).call(this, i.seconds, n); + break; + case "waiting": + o(this, s, oe).call(this, n); + break; + case "bufferstart": + o(this, s, ne).call(this, n); + break; + case "bufferend": + o(this, s, ae).call(this, n); + break; + case "volumechange": + o(this, s, F).call(this, i.volume, Q(t(this, a).$state.muted), n); + break; + case "durationchange": + u(this, v, new C(0, i.duration)), t(this, a).notify("duration-change", i.duration, n); + break; + case "playbackratechange": + t(this, a).notify("rate-change", i.playbackRate, n); + break; + case "qualitychange": + o(this, s, B).call(this, i, n); + break; + case "fullscreenchange": + u(this, V, i.fullscreen), t(this, a).notify("fullscreen-change", i.fullscreen, n); + break; + case "enterpictureinpicture": + t(this, a).notify("picture-in-picture-change", !0, n); + break; + case "leavepictureinpicture": + t(this, a).notify("picture-in-picture-change", !1, n); + break; + case "ended": + t(this, a).notify("end", void 0, n); + break; + case "error": + o(this, s, le).call(this, i, n); + break; + case "seek": + case "seeked": + o(this, s, K).call(this, i.seconds, n); + break; + } +}, le = function(e, i) { + var d; + const { message: n, method: h } = e; + h === "setPlaybackRate" && t(this, k).set(!1), h && ((d = o(this, s, j).call(this, h)) == null || d.reject(n)); +}, l = async function(e, i) { + let n = _(), h = t(this, m).get(e); + return h || t(this, m).set(e, h = []), h.push(n), this.postMessage({ + method: e, + value: i + }), n.promise; +}, D = function() { + t(this, $).stop(), u(this, v, new C(0, 0)), u(this, E, null), u(this, A, null), t(this, k).set(!1), o(this, s, O).call(this); +}, j = function(e) { + var i; + return (i = t(this, m).get(e)) == null ? void 0 : i.shift(); +}; +export { + Re as VimeoProvider +}; +//# sourceMappingURL=vidstack-BqgQkvb4-BAUzB5A8.js.map diff --git a/packages/ui/dist-lib/vidstack-BqgQkvb4-BAUzB5A8.js.map b/packages/ui/dist-lib/vidstack-BqgQkvb4-BAUzB5A8.js.map new file mode 100644 index 00000000..fc2e19bb --- /dev/null +++ b/packages/ui/dist-lib/vidstack-BqgQkvb4-BAUzB5A8.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vidstack-BqgQkvb4-BAUzB5A8.js","sources":["../node_modules/@vidstack/react/prod/chunks/vidstack-BqgQkvb4.js"],"sourcesContent":["\"use client\"\n\nimport { createScope, signal, effect, peek, isString, deferredPromise, listenEvent, isArray } from './vidstack-CZgUA94N.js';\nimport { TimeRange, RAFLoop, preconnect, ListSymbol, TextTrack, QualitySymbol } from './vidstack-D5Pzx_k5.js';\nimport { EmbedProvider } from './vidstack-FldwQc2Q.js';\nimport { resolveVimeoVideoId, getVimeoVideoInfo } from './vidstack-krOAtKMi.js';\nimport 'react';\nimport '@floating-ui/dom';\n\nconst trackedVimeoEvents = [\n \"bufferend\",\n \"bufferstart\",\n // 'cuechange',\n \"durationchange\",\n \"ended\",\n \"enterpictureinpicture\",\n \"error\",\n \"fullscreenchange\",\n \"leavepictureinpicture\",\n \"loaded\",\n // 'loadeddata',\n // 'loadedmetadata',\n // 'loadstart',\n \"playProgress\",\n \"loadProgress\",\n \"pause\",\n \"play\",\n \"playbackratechange\",\n // 'progress',\n \"qualitychange\",\n \"seeked\",\n \"seeking\",\n // 'texttrackchange',\n \"timeupdate\",\n \"volumechange\",\n \"waiting\"\n // 'adstarted',\n // 'adcompleted',\n // 'aderror',\n // 'adskipped',\n // 'adallcompleted',\n // 'adclicked',\n // 'chapterchange',\n // 'chromecastconnected',\n // 'remoteplaybackavailabilitychange',\n // 'remoteplaybackconnecting',\n // 'remoteplaybackconnect',\n // 'remoteplaybackdisconnect',\n // 'liveeventended',\n // 'liveeventstarted',\n // 'livestreamoffline',\n // 'livestreamonline',\n];\n\nclass VimeoProvider extends EmbedProvider {\n $$PROVIDER_TYPE = \"VIMEO\";\n scope = createScope();\n fullscreen;\n #ctx;\n #videoId = signal(\"\");\n #pro = signal(false);\n #hash = null;\n #currentSrc = null;\n #fullscreenActive = false;\n #seekableRange = new TimeRange(0, 0);\n #timeRAF = new RAFLoop(this.#onAnimationFrame.bind(this));\n #currentCue = null;\n #chaptersTrack = null;\n #promises = /* @__PURE__ */ new Map();\n #videoInfoPromise = null;\n constructor(iframe, ctx) {\n super(iframe);\n this.#ctx = ctx;\n const self = this;\n this.fullscreen = {\n get active() {\n return self.#fullscreenActive;\n },\n supported: true,\n enter: () => this.#remote(\"requestFullscreen\"),\n exit: () => this.#remote(\"exitFullscreen\")\n };\n }\n /**\n * Whether tracking session data should be enabled on the embed, including cookies and analytics.\n * This is turned off by default to be GDPR-compliant.\n *\n * @defaultValue `false`\n */\n cookies = false;\n title = true;\n byline = true;\n portrait = true;\n color = \"00ADEF\";\n get type() {\n return \"vimeo\";\n }\n get currentSrc() {\n return this.#currentSrc;\n }\n get videoId() {\n return this.#videoId();\n }\n get hash() {\n return this.#hash;\n }\n get isPro() {\n return this.#pro();\n }\n preconnect() {\n preconnect(this.getOrigin());\n }\n setup() {\n super.setup();\n effect(this.#watchVideoId.bind(this));\n effect(this.#watchVideoInfo.bind(this));\n effect(this.#watchPro.bind(this));\n this.#ctx.notify(\"provider-setup\", this);\n }\n destroy() {\n this.#reset();\n this.fullscreen = void 0;\n const message = \"provider destroyed\";\n for (const promises of this.#promises.values()) {\n for (const { reject } of promises) reject(message);\n }\n this.#promises.clear();\n this.#remote(\"destroy\");\n }\n async play() {\n return this.#remote(\"play\");\n }\n async pause() {\n return this.#remote(\"pause\");\n }\n setMuted(muted) {\n this.#remote(\"setMuted\", muted);\n }\n setCurrentTime(time) {\n this.#remote(\"seekTo\", time);\n this.#ctx.notify(\"seeking\", time);\n }\n setVolume(volume) {\n this.#remote(\"setVolume\", volume);\n this.#remote(\"setMuted\", peek(this.#ctx.$state.muted));\n }\n setPlaybackRate(rate) {\n this.#remote(\"setPlaybackRate\", rate);\n }\n async loadSource(src) {\n if (!isString(src.src)) {\n this.#currentSrc = null;\n this.#hash = null;\n this.#videoId.set(\"\");\n return;\n }\n const { videoId, hash } = resolveVimeoVideoId(src.src);\n this.#videoId.set(videoId ?? \"\");\n this.#hash = hash ?? null;\n this.#currentSrc = src;\n }\n #watchVideoId() {\n this.#reset();\n const videoId = this.#videoId();\n if (!videoId) {\n this.src.set(\"\");\n return;\n }\n this.src.set(`${this.getOrigin()}/video/${videoId}`);\n this.#ctx.notify(\"load-start\");\n }\n #watchVideoInfo() {\n const videoId = this.#videoId();\n if (!videoId) return;\n const promise = deferredPromise(), abort = new AbortController();\n this.#videoInfoPromise = promise;\n getVimeoVideoInfo(videoId, abort, this.#hash).then((info) => {\n promise.resolve(info);\n }).catch((e) => {\n promise.reject();\n });\n return () => {\n promise.reject();\n abort.abort();\n };\n }\n #watchPro() {\n const isPro = this.#pro(), { $state, qualities } = this.#ctx;\n $state.canSetPlaybackRate.set(isPro);\n qualities[ListSymbol.setReadonly](!isPro);\n if (isPro) {\n return listenEvent(qualities, \"change\", () => {\n if (qualities.auto) return;\n const id = qualities.selected?.id;\n if (id) this.#remote(\"setQuality\", id);\n });\n }\n }\n getOrigin() {\n return \"https://player.vimeo.com\";\n }\n buildParams() {\n const { keyDisabled } = this.#ctx.$props, { playsInline, nativeControls } = this.#ctx.$state, showControls = nativeControls();\n return {\n title: this.title,\n byline: this.byline,\n color: this.color,\n portrait: this.portrait,\n controls: showControls,\n h: this.hash,\n keyboard: showControls && !keyDisabled(),\n transparent: true,\n playsinline: playsInline(),\n dnt: !this.cookies\n };\n }\n #onAnimationFrame() {\n this.#remote(\"getCurrentTime\");\n }\n // Embed will sometimes dispatch 0 at end of playback.\n #preventTimeUpdates = false;\n #onTimeUpdate(time, trigger) {\n if (this.#preventTimeUpdates && time === 0) return;\n const { realCurrentTime, paused, bufferedEnd, seekableEnd, live } = this.#ctx.$state;\n if (realCurrentTime() === time) return;\n const prevTime = realCurrentTime();\n this.#ctx.notify(\"time-change\", time, trigger);\n if (Math.abs(prevTime - time) > 1.5) {\n this.#ctx.notify(\"seeking\", time, trigger);\n if (!paused() && bufferedEnd() < time) {\n this.#ctx.notify(\"waiting\", void 0, trigger);\n }\n }\n if (!live() && seekableEnd() - time < 0.01) {\n this.#ctx.notify(\"end\", void 0, trigger);\n this.#preventTimeUpdates = true;\n setTimeout(() => {\n this.#preventTimeUpdates = false;\n }, 500);\n }\n }\n #onSeeked(time, trigger) {\n this.#ctx.notify(\"seeked\", time, trigger);\n }\n #onLoaded(trigger) {\n const videoId = this.#videoId();\n this.#videoInfoPromise?.promise.then((info) => {\n if (!info) return;\n const { title, poster, duration, pro } = info;\n this.#pro.set(pro);\n this.#ctx.notify(\"title-change\", title, trigger);\n this.#ctx.notify(\"poster-change\", poster, trigger);\n this.#ctx.notify(\"duration-change\", duration, trigger);\n this.#onReady(duration, trigger);\n }).catch(() => {\n if (videoId !== this.#videoId()) return;\n this.#remote(\"getVideoTitle\");\n this.#remote(\"getDuration\");\n });\n }\n #onReady(duration, trigger) {\n const { nativeControls } = this.#ctx.$state, showEmbedControls = nativeControls();\n this.#seekableRange = new TimeRange(0, duration);\n const detail = {\n buffered: new TimeRange(0, 0),\n seekable: this.#seekableRange,\n duration\n };\n this.#ctx.delegate.ready(detail, trigger);\n if (!showEmbedControls) {\n this.#remote(\"_hideOverlay\");\n }\n this.#remote(\"getQualities\");\n this.#remote(\"getChapters\");\n }\n #onMethod(method, data, trigger) {\n switch (method) {\n case \"getVideoTitle\":\n const videoTitle = data;\n this.#ctx.notify(\"title-change\", videoTitle, trigger);\n break;\n case \"getDuration\":\n const duration = data;\n if (!this.#ctx.$state.canPlay()) {\n this.#onReady(duration, trigger);\n } else {\n this.#ctx.notify(\"duration-change\", duration, trigger);\n }\n break;\n case \"getCurrentTime\":\n this.#onTimeUpdate(data, trigger);\n break;\n case \"getBuffered\":\n if (isArray(data) && data.length) {\n this.#onLoadProgress(data[data.length - 1][1], trigger);\n }\n break;\n case \"setMuted\":\n this.#onVolumeChange(peek(this.#ctx.$state.volume), data, trigger);\n break;\n // case 'getTextTracks':\n // this.#onTextTracksChange(data as VimeoTextTrack[], trigger);\n // break;\n case \"getChapters\":\n this.#onChaptersChange(data);\n break;\n case \"getQualities\":\n this.#onQualitiesChange(data, trigger);\n break;\n }\n this.#getPromise(method)?.resolve();\n }\n #attachListeners() {\n for (const type of trackedVimeoEvents) {\n this.#remote(\"addEventListener\", type);\n }\n }\n #onPause(trigger) {\n this.#timeRAF.stop();\n this.#ctx.notify(\"pause\", void 0, trigger);\n }\n #onPlay(trigger) {\n this.#timeRAF.start();\n this.#ctx.notify(\"play\", void 0, trigger);\n }\n #onPlayProgress(trigger) {\n const { paused } = this.#ctx.$state;\n if (!paused() && !this.#preventTimeUpdates) {\n this.#ctx.notify(\"playing\", void 0, trigger);\n }\n }\n #onLoadProgress(buffered, trigger) {\n const detail = {\n buffered: new TimeRange(0, buffered),\n seekable: this.#seekableRange\n };\n this.#ctx.notify(\"progress\", detail, trigger);\n }\n #onBufferStart(trigger) {\n this.#ctx.notify(\"waiting\", void 0, trigger);\n }\n #onBufferEnd(trigger) {\n const { paused } = this.#ctx.$state;\n if (!paused()) this.#ctx.notify(\"playing\", void 0, trigger);\n }\n #onWaiting(trigger) {\n const { paused } = this.#ctx.$state;\n if (paused()) {\n this.#ctx.notify(\"play\", void 0, trigger);\n }\n this.#ctx.notify(\"waiting\", void 0, trigger);\n }\n #onVolumeChange(volume, muted, trigger) {\n const detail = { volume, muted };\n this.#ctx.notify(\"volume-change\", detail, trigger);\n }\n // #onTextTrackChange(track: VimeoTextTrack, trigger: Event) {\n // const textTrack = this.#ctx.textTracks.toArray().find((t) => t.language === track.language);\n // if (textTrack) textTrack.mode = track.mode;\n // }\n // #onTextTracksChange(tracks: VimeoTextTrack[], trigger: Event) {\n // for (const init of tracks) {\n // const textTrack = new TextTrack({\n // ...init,\n // label: init.label.replace('auto-generated', 'auto'),\n // });\n // textTrack[TextTrackSymbol.readyState] = 2;\n // this.#ctx.textTracks.add(textTrack, trigger);\n // textTrack.setMode(init.mode, trigger);\n // }\n // }\n // #onCueChange(cue: VimeoTextCue, trigger: Event) {\n // const { textTracks, $state } = this.#ctx,\n // { currentTime } = $state,\n // track = textTracks.selected;\n // if (this.#currentCue) track?.removeCue(this.#currentCue, trigger);\n // this.#currentCue = new window.VTTCue(currentTime(), Number.MAX_SAFE_INTEGER, cue.text);\n // track?.addCue(this.#currentCue, trigger);\n // }\n #onChaptersChange(chapters) {\n this.#removeChapters();\n if (!chapters.length) return;\n const track = new TextTrack({\n kind: \"chapters\",\n default: true\n }), { seekableEnd } = this.#ctx.$state;\n for (let i = 0; i < chapters.length; i++) {\n const chapter = chapters[i], nextChapter = chapters[i + 1];\n track.addCue(\n new window.VTTCue(\n chapter.startTime,\n nextChapter?.startTime ?? seekableEnd(),\n chapter.title\n )\n );\n }\n this.#chaptersTrack = track;\n this.#ctx.textTracks.add(track);\n }\n #removeChapters() {\n if (!this.#chaptersTrack) return;\n this.#ctx.textTracks.remove(this.#chaptersTrack);\n this.#chaptersTrack = null;\n }\n #onQualitiesChange(qualities, trigger) {\n this.#ctx.qualities[QualitySymbol.enableAuto] = qualities.some((q) => q.id === \"auto\") ? () => this.#remote(\"setQuality\", \"auto\") : void 0;\n for (const quality of qualities) {\n if (quality.id === \"auto\") continue;\n const height = +quality.id.slice(0, -1);\n if (isNaN(height)) continue;\n this.#ctx.qualities[ListSymbol.add](\n {\n id: quality.id,\n width: height * (16 / 9),\n height,\n codec: \"avc1,h.264\",\n bitrate: -1\n },\n trigger\n );\n }\n this.#onQualityChange(\n qualities.find((q) => q.active),\n trigger\n );\n }\n #onQualityChange({ id } = {}, trigger) {\n if (!id) return;\n const isAuto = id === \"auto\", newQuality = this.#ctx.qualities.getById(id);\n if (isAuto) {\n this.#ctx.qualities[QualitySymbol.setAuto](isAuto, trigger);\n this.#ctx.qualities[ListSymbol.select](void 0, true, trigger);\n } else {\n this.#ctx.qualities[ListSymbol.select](newQuality ?? void 0, true, trigger);\n }\n }\n #onEvent(event, payload, trigger) {\n switch (event) {\n case \"ready\":\n this.#attachListeners();\n break;\n case \"loaded\":\n this.#onLoaded(trigger);\n break;\n case \"play\":\n this.#onPlay(trigger);\n break;\n case \"playProgress\":\n this.#onPlayProgress(trigger);\n break;\n case \"pause\":\n this.#onPause(trigger);\n break;\n case \"loadProgress\":\n this.#onLoadProgress(payload.seconds, trigger);\n break;\n case \"waiting\":\n this.#onWaiting(trigger);\n break;\n case \"bufferstart\":\n this.#onBufferStart(trigger);\n break;\n case \"bufferend\":\n this.#onBufferEnd(trigger);\n break;\n case \"volumechange\":\n this.#onVolumeChange(payload.volume, peek(this.#ctx.$state.muted), trigger);\n break;\n case \"durationchange\":\n this.#seekableRange = new TimeRange(0, payload.duration);\n this.#ctx.notify(\"duration-change\", payload.duration, trigger);\n break;\n case \"playbackratechange\":\n this.#ctx.notify(\"rate-change\", payload.playbackRate, trigger);\n break;\n case \"qualitychange\":\n this.#onQualityChange(payload, trigger);\n break;\n case \"fullscreenchange\":\n this.#fullscreenActive = payload.fullscreen;\n this.#ctx.notify(\"fullscreen-change\", payload.fullscreen, trigger);\n break;\n case \"enterpictureinpicture\":\n this.#ctx.notify(\"picture-in-picture-change\", true, trigger);\n break;\n case \"leavepictureinpicture\":\n this.#ctx.notify(\"picture-in-picture-change\", false, trigger);\n break;\n case \"ended\":\n this.#ctx.notify(\"end\", void 0, trigger);\n break;\n case \"error\":\n this.#onError(payload, trigger);\n break;\n case \"seek\":\n case \"seeked\":\n this.#onSeeked(payload.seconds, trigger);\n break;\n }\n }\n #onError(error, trigger) {\n const { message, method } = error;\n if (method === \"setPlaybackRate\") {\n this.#pro.set(false);\n }\n if (method) {\n this.#getPromise(method)?.reject(message);\n }\n }\n onMessage(message, event) {\n if (message.event) {\n this.#onEvent(message.event, message.data, event);\n } else if (message.method) {\n this.#onMethod(message.method, message.value, event);\n }\n }\n onLoad() {\n }\n async #remote(command, arg) {\n let promise = deferredPromise(), promises = this.#promises.get(command);\n if (!promises) this.#promises.set(command, promises = []);\n promises.push(promise);\n this.postMessage({\n method: command,\n value: arg\n });\n return promise.promise;\n }\n #reset() {\n this.#timeRAF.stop();\n this.#seekableRange = new TimeRange(0, 0);\n this.#videoInfoPromise = null;\n this.#currentCue = null;\n this.#pro.set(false);\n this.#removeChapters();\n }\n #getPromise(command) {\n return this.#promises.get(command)?.shift();\n }\n}\n\nexport { VimeoProvider };\n"],"names":["trackedVimeoEvents","VimeoProvider","EmbedProvider","iframe","ctx","__privateAdd","_VimeoProvider_instances","__publicField","createScope","_ctx","_videoId","signal","_pro","_hash","_currentSrc","_fullscreenActive","_seekableRange","TimeRange","_timeRAF","RAFLoop","__privateMethod","onAnimationFrame_fn","_currentCue","_chaptersTrack","_promises","_videoInfoPromise","_preventTimeUpdates","__privateSet","self","__privateGet","remote_fn","preconnect","effect","watchVideoId_fn","watchVideoInfo_fn","watchPro_fn","reset_fn","message","promises","reject","muted","time","volume","peek","rate","src","isString","videoId","hash","resolveVimeoVideoId","keyDisabled","playsInline","nativeControls","showControls","event","onEvent_fn","onMethod_fn","promise","deferredPromise","abort","getVimeoVideoInfo","info","e","isPro","$state","qualities","ListSymbol","listenEvent","id","_a","onTimeUpdate_fn","trigger","realCurrentTime","paused","bufferedEnd","seekableEnd","live","prevTime","onSeeked_fn","onLoaded_fn","title","poster","duration","pro","onReady_fn","showEmbedControls","detail","method","data","videoTitle","isArray","onLoadProgress_fn","onVolumeChange_fn","onChaptersChange_fn","onQualitiesChange_fn","getPromise_fn","attachListeners_fn","type","onPause_fn","onPlay_fn","onPlayProgress_fn","buffered","onBufferStart_fn","onBufferEnd_fn","onWaiting_fn","chapters","removeChapters_fn","track","TextTrack","i","chapter","nextChapter","QualitySymbol","q","quality","height","onQualityChange_fn","isAuto","newQuality","payload","onError_fn","error","command","arg"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/packages/ui/dist-lib/vidstack-CQQ1xKSy-CZZk6e1l.js b/packages/ui/dist-lib/vidstack-CQQ1xKSy-CZZk6e1l.js new file mode 100644 index 00000000..b1dd1a9e --- /dev/null +++ b/packages/ui/dist-lib/vidstack-CQQ1xKSy-CZZk6e1l.js @@ -0,0 +1,141 @@ +var k = Object.defineProperty; +var w = (t) => { + throw TypeError(t); +}; +var A = (t, e, a) => e in t ? k(t, e, { enumerable: !0, configurable: !0, writable: !0, value: a }) : t[e] = a; +var u = (t, e, a) => A(t, typeof e != "symbol" ? e + "" : e, a), C = (t, e, a) => e.has(t) || w("Cannot " + a); +var c = (t, e, a) => (C(t, e, "read from private field"), a ? a.call(t) : e.get(t)), m = (t, e, a) => e.has(t) ? w("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(t) : e.set(t, a), E = (t, e, a, o) => (C(t, e, "write to private field"), o ? o.call(t, a) : e.set(t, a), a), s = (t, e, a) => (C(t, e, "access private method"), a); +import { m as P, I as O, K as R, M as b, l as D, J as G, v as L } from "./lib-export-CI8auKfP.js"; +function M() { + return "https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1"; +} +function N() { + var t; + return !!((t = window.cast) != null && t.framework); +} +function F() { + var t, e; + return !!((e = (t = window.chrome) == null ? void 0 : t.cast) != null && e.isAvailable); +} +function v() { + return g().getCastState() === cast.framework.CastState.CONNECTED; +} +function g() { + return window.cast.framework.CastContext.getInstance(); +} +function y() { + return g().getCurrentSession(); +} +function T() { + var t; + return (t = y()) == null ? void 0 : t.getSessionObj().media[0]; +} +function z(t) { + var a; + return ((a = T()) == null ? void 0 : a.media.contentId) === (t == null ? void 0 : t.src); +} +function U() { + return { + language: "en-US", + autoJoinPolicy: chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED, + receiverApplicationId: chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID, + resumeSavedSession: !0, + androidReceiverCompatible: !0 + }; +} +function j(t) { + return `Google Cast Error Code: ${t}`; +} +function q(t, e) { + return P(g(), t, e); +} +var n, r, S, I, _, l, d; +class J { + constructor() { + m(this, r); + u(this, "name", "google-cast"); + u(this, "target"); + m(this, n); + } + /** + * @see {@link https://developers.google.com/cast/docs/reference/web_sender/cast.framework.CastContext} + */ + get cast() { + return g(); + } + mediaType() { + return "video"; + } + canPlay(e) { + return O && !b && R(e); + } + async prompt(e) { + var h; + let a, o, i; + try { + a = await s(this, r, S).call(this, e), c(this, n) || (E(this, n, new cast.framework.RemotePlayer()), new cast.framework.RemotePlayerController(c(this, n))), o = e.player.createEvent("google-cast-prompt-open", { + trigger: a + }), e.player.dispatchEvent(o), s(this, r, l).call(this, e, "connecting", o), await s(this, r, I).call(this, D(e.$props.googleCast)), e.$state.remotePlaybackInfo.set({ + deviceName: (h = y()) == null ? void 0 : h.getCastDevice().friendlyName + }), v() && s(this, r, l).call(this, e, "connected", o); + } catch (p) { + const f = p instanceof Error ? p : s(this, r, d).call(this, (p + "").toUpperCase(), "Prompt failed."); + throw i = e.player.createEvent("google-cast-prompt-error", { + detail: f, + trigger: o ?? a, + cancelable: !0 + }), e.player.dispatch(i), s(this, r, l).call(this, e, v() ? "connected" : "disconnected", i), f; + } finally { + e.player.dispatch("google-cast-prompt-close", { + trigger: i ?? o ?? a + }); + } + } + async load(e) { + if (G) + throw Error("[vidstack] can not load google cast provider server-side"); + if (!c(this, n)) + throw Error("[vidstack] google cast player was not initialized"); + return new (await import("./vidstack-BeT6vBOi-DhlHLgwc.js")).GoogleCastProvider(c(this, n), e); + } +} +n = new WeakMap(), r = new WeakSet(), S = async function(e) { + if (N()) return; + const a = e.player.createEvent("google-cast-load-start"); + e.player.dispatch(a), await L(M()), await customElements.whenDefined("google-cast-launcher"); + const o = e.player.createEvent("google-cast-loaded", { trigger: a }); + if (e.player.dispatch(o), !F()) + throw s(this, r, d).call(this, "CAST_NOT_AVAILABLE", "Google Cast not available on this platform."); + return o; +}, I = async function(e) { + s(this, r, _).call(this, e); + const a = await this.cast.requestSession(); + if (a) + throw s(this, r, d).call(this, a.toUpperCase(), j(a)); +}, _ = function(e) { + var a; + (a = this.cast) == null || a.setOptions({ + ...U(), + ...e + }); +}, l = function(e, a, o) { + const i = { type: "google-cast", state: a }; + e.notify("remote-playback-change", i, o); +}, d = function(e, a) { + const o = Error(a); + return o.code = e, o; +}; +var B = /* @__PURE__ */ Object.freeze({ + __proto__: null, + GoogleCastLoader: J +}); +export { + g as getCastContext, + j as getCastErrorMessage, + y as getCastSession, + T as getCastSessionMedia, + z as hasActiveCastSession, + q as listenCastContextEvent, + B as loader +}; +//# sourceMappingURL=vidstack-CQQ1xKSy-CZZk6e1l.js.map diff --git a/packages/ui/dist-lib/vidstack-CQQ1xKSy-CZZk6e1l.js.map b/packages/ui/dist-lib/vidstack-CQQ1xKSy-CZZk6e1l.js.map new file mode 100644 index 00000000..8e94ab1c --- /dev/null +++ b/packages/ui/dist-lib/vidstack-CQQ1xKSy-CZZk6e1l.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vidstack-CQQ1xKSy-CZZk6e1l.js","sources":["../node_modules/@vidstack/react/prod/chunks/vidstack-CQQ1xKSy.js"],"sourcesContent":["\"use client\"\n\nimport { IS_CHROME, canGoogleCastSrc, IS_IOS, IS_SERVER, loadScript } from './vidstack-D5Pzx_k5.js';\nimport { listenEvent, peek } from './vidstack-CZgUA94N.js';\n\nfunction getCastFrameworkURL() {\n return \"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1\";\n}\nfunction hasLoadedCastFramework() {\n return !!window.cast?.framework;\n}\nfunction isCastAvailable() {\n return !!window.chrome?.cast?.isAvailable;\n}\nfunction isCastConnected() {\n return getCastContext().getCastState() === cast.framework.CastState.CONNECTED;\n}\nfunction getCastContext() {\n return window.cast.framework.CastContext.getInstance();\n}\nfunction getCastSession() {\n return getCastContext().getCurrentSession();\n}\nfunction getCastSessionMedia() {\n return getCastSession()?.getSessionObj().media[0];\n}\nfunction hasActiveCastSession(src) {\n const contentId = getCastSessionMedia()?.media.contentId;\n return contentId === src?.src;\n}\nfunction getDefaultCastOptions() {\n return {\n language: \"en-US\",\n autoJoinPolicy: chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED,\n receiverApplicationId: chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,\n resumeSavedSession: true,\n androidReceiverCompatible: true\n };\n}\nfunction getCastErrorMessage(code) {\n const defaultMessage = `Google Cast Error Code: ${code}`;\n return defaultMessage;\n}\nfunction listenCastContextEvent(type, handler) {\n return listenEvent(getCastContext(), type, handler);\n}\n\nclass GoogleCastLoader {\n name = \"google-cast\";\n target;\n #player;\n /**\n * @see {@link https://developers.google.com/cast/docs/reference/web_sender/cast.framework.CastContext}\n */\n get cast() {\n return getCastContext();\n }\n mediaType() {\n return \"video\";\n }\n canPlay(src) {\n return IS_CHROME && !IS_IOS && canGoogleCastSrc(src);\n }\n async prompt(ctx) {\n let loadEvent, openEvent, errorEvent;\n try {\n loadEvent = await this.#loadCastFramework(ctx);\n if (!this.#player) {\n this.#player = new cast.framework.RemotePlayer();\n new cast.framework.RemotePlayerController(this.#player);\n }\n openEvent = ctx.player.createEvent(\"google-cast-prompt-open\", {\n trigger: loadEvent\n });\n ctx.player.dispatchEvent(openEvent);\n this.#notifyRemoteStateChange(ctx, \"connecting\", openEvent);\n await this.#showPrompt(peek(ctx.$props.googleCast));\n ctx.$state.remotePlaybackInfo.set({\n deviceName: getCastSession()?.getCastDevice().friendlyName\n });\n if (isCastConnected()) this.#notifyRemoteStateChange(ctx, \"connected\", openEvent);\n } catch (code) {\n const error = code instanceof Error ? code : this.#createError(\n (code + \"\").toUpperCase(),\n \"Prompt failed.\"\n );\n errorEvent = ctx.player.createEvent(\"google-cast-prompt-error\", {\n detail: error,\n trigger: openEvent ?? loadEvent,\n cancelable: true\n });\n ctx.player.dispatch(errorEvent);\n this.#notifyRemoteStateChange(\n ctx,\n isCastConnected() ? \"connected\" : \"disconnected\",\n errorEvent\n );\n throw error;\n } finally {\n ctx.player.dispatch(\"google-cast-prompt-close\", {\n trigger: errorEvent ?? openEvent ?? loadEvent\n });\n }\n }\n async load(ctx) {\n if (IS_SERVER) {\n throw Error(\"[vidstack] can not load google cast provider server-side\");\n }\n if (!this.#player) {\n throw Error(\"[vidstack] google cast player was not initialized\");\n }\n return new (await import('./vidstack-BeT6vBOi.js')).GoogleCastProvider(this.#player, ctx);\n }\n async #loadCastFramework(ctx) {\n if (hasLoadedCastFramework()) return;\n const loadStartEvent = ctx.player.createEvent(\"google-cast-load-start\");\n ctx.player.dispatch(loadStartEvent);\n await loadScript(getCastFrameworkURL());\n await customElements.whenDefined(\"google-cast-launcher\");\n const loadedEvent = ctx.player.createEvent(\"google-cast-loaded\", { trigger: loadStartEvent });\n ctx.player.dispatch(loadedEvent);\n if (!isCastAvailable()) {\n throw this.#createError(\"CAST_NOT_AVAILABLE\", \"Google Cast not available on this platform.\");\n }\n return loadedEvent;\n }\n async #showPrompt(options) {\n this.#setOptions(options);\n const errorCode = await this.cast.requestSession();\n if (errorCode) {\n throw this.#createError(\n errorCode.toUpperCase(),\n getCastErrorMessage(errorCode)\n );\n }\n }\n #setOptions(options) {\n this.cast?.setOptions({\n ...getDefaultCastOptions(),\n ...options\n });\n }\n #notifyRemoteStateChange(ctx, state, trigger) {\n const detail = { type: \"google-cast\", state };\n ctx.notify(\"remote-playback-change\", detail, trigger);\n }\n #createError(code, message) {\n const error = Error(message);\n error.code = code;\n return error;\n }\n}\n\nvar loader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n GoogleCastLoader: GoogleCastLoader\n});\n\nexport { getCastContext, getCastErrorMessage, getCastSession, getCastSessionMedia, hasActiveCastSession, listenCastContextEvent, loader };\n"],"names":["getCastFrameworkURL","hasLoadedCastFramework","_a","isCastAvailable","_b","isCastConnected","getCastContext","getCastSession","getCastSessionMedia","hasActiveCastSession","src","getDefaultCastOptions","getCastErrorMessage","code","listenCastContextEvent","type","handler","listenEvent","GoogleCastLoader","__privateAdd","_GoogleCastLoader_instances","__publicField","_player","IS_CHROME","IS_IOS","canGoogleCastSrc","ctx","loadEvent","openEvent","errorEvent","__privateMethod","loadCastFramework_fn","__privateGet","__privateSet","notifyRemoteStateChange_fn","showPrompt_fn","peek","error","createError_fn","IS_SERVER","loadStartEvent","loadScript","loadedEvent","options","setOptions_fn","errorCode","state","trigger","detail","message","loader"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/packages/ui/dist-lib/vidstack-DHmfHold-D561ZrLq.js b/packages/ui/dist-lib/vidstack-DHmfHold-D561ZrLq.js new file mode 100644 index 00000000..3c3e51fd --- /dev/null +++ b/packages/ui/dist-lib/vidstack-DHmfHold-D561ZrLq.js @@ -0,0 +1,238 @@ +var A = Object.defineProperty; +var D = (r) => { + throw TypeError(r); +}; +var N = (r, n, e) => n in r ? A(r, n, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[n] = e; +var T = (r, n, e) => N(r, typeof n != "symbol" ? n + "" : n, e), R = (r, n, e) => n.has(r) || D("Cannot " + e); +var s = (r, n, e) => (R(r, n, "read from private field"), e ? e.call(r) : n.get(r)), p = (r, n, e) => n.has(r) ? D("Cannot add the same private member more than once") : n instanceof WeakSet ? n.add(r) : n.set(r, e), l = (r, n, e, t) => (R(r, n, "write to private field"), t ? t.call(r, e) : n.set(r, e), e), o = (r, n, e) => (R(r, n, "access private method"), e); +import { x as q, y as G, k as H, n as J, h as K, A as Q, z as M, C as W, E as $, F as X } from "./lib-export-CI8auKfP.js"; +import { E as Z } from "./vidstack-FldwQc2Q-PD3aMpLc.js"; +import { resolveYouTubeVideoId as ee } from "./vidstack-Dm1xEU9Q-qSXq3AI-.js"; +import "react"; +const b = { + Ended: 0, + Playing: 1, + Paused: 2, + Buffering: 3, + Cued: 5 +}; +var a, k, v, S, P, f, y, i, te, se, O, m, j, F, Y, I, C, x, L, _, E, U; +class de extends Z { + constructor(e, t) { + super(e); + p(this, i); + T(this, "$$PROVIDER_TYPE", "YOUTUBE"); + T(this, "scope", q()); + p(this, a); + p(this, k, G("")); + p(this, v, -1); + p(this, S, null); + p(this, P, -1); + p(this, f, !1); + p(this, y, /* @__PURE__ */ new Map()); + /** + * Sets the player's interface language. The parameter value is an ISO 639-1 two-letter + * language code or a fully specified locale. For example, fr and fr-ca are both valid values. + * Other language input codes, such as IETF language tags (BCP 47) might also be handled properly. + * + * The interface language is used for tooltips in the player and also affects the default caption + * track. Note that YouTube might select a different caption track language for a particular + * user based on the user's individual language preferences and the availability of caption tracks. + * + * @defaultValue 'en' + */ + T(this, "language", "en"); + T(this, "color", "red"); + /** + * Whether cookies should be enabled on the embed. This is turned off by default to be + * GDPR-compliant. + * + * @defaultValue `false` + */ + T(this, "cookies", !1); + l(this, a, t); + } + get currentSrc() { + return s(this, S); + } + get type() { + return "youtube"; + } + get videoId() { + return s(this, k).call(this); + } + preconnect() { + H(this.getOrigin()); + } + setup() { + super.setup(), J(o(this, i, O).bind(this)), s(this, a).notify("provider-setup", this); + } + destroy() { + o(this, i, _).call(this); + const e = "provider destroyed"; + for (const t of s(this, y).values()) + for (const { reject: d } of t) d(e); + s(this, y).clear(); + } + async play() { + return o(this, i, m).call(this, "playVideo"); + } + async pause() { + return o(this, i, m).call(this, "pauseVideo"); + } + setMuted(e) { + e ? o(this, i, m).call(this, "mute") : o(this, i, m).call(this, "unMute"); + } + setCurrentTime(e) { + o(this, i, m).call(this, "seekTo", e), s(this, a).notify("seeking", e); + } + setVolume(e) { + o(this, i, m).call(this, "setVolume", e * 100); + } + setPlaybackRate(e) { + o(this, i, m).call(this, "setPlaybackRate", e); + } + async loadSource(e) { + if (!K(e.src)) { + l(this, S, null), s(this, k).set(""); + return; + } + const t = ee(e.src); + s(this, k).set(t ?? ""), l(this, S, e); + } + getOrigin() { + return this.cookies ? "https://www.youtube.com" : "https://www.youtube-nocookie.com"; + } + buildParams() { + const { keyDisabled: e } = s(this, a).$props, { muted: t, playsInline: d, nativeControls: u } = s(this, a).$state, h = u(); + return { + rel: 0, + autoplay: 0, + cc_lang_pref: this.language, + cc_load_policy: h ? 1 : void 0, + color: this.color, + controls: h ? 1 : 0, + disablekb: !h || e() ? 1 : 0, + enablejsapi: 1, + fs: 1, + hl: this.language, + iv_load_policy: h ? 1 : 3, + mute: t() ? 1 : 0, + playsinline: d() ? 1 : 0 + }; + } + onLoad() { + window.setTimeout(() => this.postMessage({ event: "listening" }), 100); + } + onMessage({ info: e }, t) { + var c; + if (!e) return; + const { title: d, intrinsicDuration: u, playbackRate: h } = s(this, a).$state; + if (W(e.videoData) && e.videoData.title !== d() && s(this, a).notify("title-change", e.videoData.title, t), $(e.duration) && e.duration !== u()) { + if ($(e.videoLoadedFraction)) { + const g = ((c = e.progressState) == null ? void 0 : c.loaded) ?? e.videoLoadedFraction * e.duration, w = new M(0, e.duration); + o(this, i, I).call(this, g, w, t); + } + s(this, a).notify("duration-change", e.duration, t); + } + if ($(e.playbackRate) && e.playbackRate !== h() && s(this, a).notify("rate-change", e.playbackRate, t), e.progressState) { + const { current: g, seekableStart: w, seekableEnd: V, loaded: z, duration: B } = e.progressState; + o(this, i, Y).call(this, g, t), o(this, i, I).call(this, z, new M(w, V), t), B !== u() && s(this, a).notify("duration-change", B, t); + } + if ($(e.volume) && X(e.muted) && !s(this, f)) { + const g = { + muted: e.muted, + volume: e.volume / 100 + }; + s(this, a).notify("volume-change", g, t); + } + $(e.playerState) && e.playerState !== s(this, v) && o(this, i, L).call(this, e.playerState, t); + } +} +a = new WeakMap(), k = new WeakMap(), v = new WeakMap(), S = new WeakMap(), P = new WeakMap(), f = new WeakMap(), y = new WeakMap(), i = new WeakSet(), te = function(e) { + var t; + (t = o(this, i, E).call(this, "playVideo")) == null || t.reject(e); +}, se = function(e) { + var t; + (t = o(this, i, E).call(this, "pauseVideo")) == null || t.reject(e); +}, O = function() { + o(this, i, _).call(this); + const e = s(this, k).call(this); + if (!e) { + this.src.set(""); + return; + } + this.src.set(`${this.getOrigin()}/embed/${e}`), s(this, a).notify("load-start"); +}, m = function(e, t) { + let d = Q(), u = s(this, y).get(e); + return u || s(this, y).set(e, u = []), u.push(d), this.postMessage({ + event: "command", + func: e, + args: t ? [t] : void 0 + }), d.promise; +}, j = function(e) { + s(this, a).notify("loaded-metadata"), s(this, a).notify("loaded-data"), s(this, a).delegate.ready(void 0, e); +}, F = function(e) { + var t; + (t = o(this, i, E).call(this, "pauseVideo")) == null || t.resolve(), s(this, a).notify("pause", void 0, e); +}, Y = function(e, t) { + const { duration: d, realCurrentTime: u } = s(this, a).$state, h = s(this, v) === b.Ended, c = h ? d() : e; + s(this, a).notify("time-change", c, t), !h && Math.abs(c - u()) > 1 && s(this, a).notify("seeking", c, t); +}, I = function(e, t, d) { + const u = { + buffered: new M(0, e), + seekable: t + }; + s(this, a).notify("progress", u, d); + const { seeking: h, realCurrentTime: c } = s(this, a).$state; + h() && e > c() && o(this, i, C).call(this, d); +}, C = function(e) { + const { paused: t, realCurrentTime: d } = s(this, a).$state; + window.clearTimeout(s(this, P)), l(this, P, window.setTimeout( + () => { + s(this, a).notify("seeked", d(), e), l(this, P, -1); + }, + t() ? 100 : 0 + )); +}, x = function(e) { + const { seeking: t } = s(this, a).$state; + t() && o(this, i, C).call(this, e), s(this, a).notify("pause", void 0, e), s(this, a).notify("end", void 0, e); +}, L = function(e, t) { + var V; + const { paused: d, seeking: u } = s(this, a).$state, h = e === b.Playing, c = e === b.Buffering, g = o(this, i, U).call(this, "playVideo"), w = d() && (c || h); + if (c && s(this, a).notify("waiting", void 0, t), u() && h && o(this, i, C).call(this, t), s(this, f) && h) { + this.pause(), l(this, f, !1), this.setMuted(s(this, a).$state.muted()); + return; + } + if (!g && w) { + l(this, f, !0), this.setMuted(!0); + return; + } + switch (w && ((V = o(this, i, E).call(this, "playVideo")) == null || V.resolve(), s(this, a).notify("play", void 0, t)), e) { + case b.Cued: + o(this, i, j).call(this, t); + break; + case b.Playing: + s(this, a).notify("playing", void 0, t); + break; + case b.Paused: + o(this, i, F).call(this, t); + break; + case b.Ended: + o(this, i, x).call(this, t); + break; + } + l(this, v, e); +}, _ = function() { + l(this, v, -1), l(this, P, -1), l(this, f, !1); +}, E = function(e) { + var t; + return (t = s(this, y).get(e)) == null ? void 0 : t.shift(); +}, U = function(e) { + var t; + return !!((t = s(this, y).get(e)) != null && t.length); +}; +export { + de as YouTubeProvider +}; +//# sourceMappingURL=vidstack-DHmfHold-D561ZrLq.js.map diff --git a/packages/ui/dist-lib/vidstack-DHmfHold-D561ZrLq.js.map b/packages/ui/dist-lib/vidstack-DHmfHold-D561ZrLq.js.map new file mode 100644 index 00000000..4eeef3d7 --- /dev/null +++ b/packages/ui/dist-lib/vidstack-DHmfHold-D561ZrLq.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vidstack-DHmfHold-D561ZrLq.js","sources":["../node_modules/@vidstack/react/prod/chunks/vidstack-DHmfHold.js"],"sourcesContent":["\"use client\"\n\nimport { createScope, signal, effect, isString, deferredPromise, isObject, isNumber, isBoolean } from './vidstack-CZgUA94N.js';\nimport { preconnect, TimeRange } from './vidstack-D5Pzx_k5.js';\nimport { EmbedProvider } from './vidstack-FldwQc2Q.js';\nimport { resolveYouTubeVideoId } from './vidstack-Dm1xEU9Q.js';\nimport 'react';\nimport '@floating-ui/dom';\n\nconst YouTubePlayerState = {\n Ended: 0,\n Playing: 1,\n Paused: 2,\n Buffering: 3,\n Cued: 5\n};\n\nclass YouTubeProvider extends EmbedProvider {\n $$PROVIDER_TYPE = \"YOUTUBE\";\n scope = createScope();\n #ctx;\n #videoId = signal(\"\");\n #state = -1;\n #currentSrc = null;\n #seekingTimer = -1;\n #invalidPlay = false;\n #promises = /* @__PURE__ */ new Map();\n constructor(iframe, ctx) {\n super(iframe);\n this.#ctx = ctx;\n }\n /**\n * Sets the player's interface language. The parameter value is an ISO 639-1 two-letter\n * language code or a fully specified locale. For example, fr and fr-ca are both valid values.\n * Other language input codes, such as IETF language tags (BCP 47) might also be handled properly.\n *\n * The interface language is used for tooltips in the player and also affects the default caption\n * track. Note that YouTube might select a different caption track language for a particular\n * user based on the user's individual language preferences and the availability of caption tracks.\n *\n * @defaultValue 'en'\n */\n language = \"en\";\n color = \"red\";\n /**\n * Whether cookies should be enabled on the embed. This is turned off by default to be\n * GDPR-compliant.\n *\n * @defaultValue `false`\n */\n cookies = false;\n get currentSrc() {\n return this.#currentSrc;\n }\n get type() {\n return \"youtube\";\n }\n get videoId() {\n return this.#videoId();\n }\n preconnect() {\n preconnect(this.getOrigin());\n }\n setup() {\n super.setup();\n effect(this.#watchVideoId.bind(this));\n this.#ctx.notify(\"provider-setup\", this);\n }\n destroy() {\n this.#reset();\n const message = \"provider destroyed\";\n for (const promises of this.#promises.values()) {\n for (const { reject } of promises) reject(message);\n }\n this.#promises.clear();\n }\n async play() {\n return this.#remote(\"playVideo\");\n }\n #playFail(message) {\n this.#getPromise(\"playVideo\")?.reject(message);\n }\n async pause() {\n return this.#remote(\"pauseVideo\");\n }\n #pauseFail(message) {\n this.#getPromise(\"pauseVideo\")?.reject(message);\n }\n setMuted(muted) {\n if (muted) this.#remote(\"mute\");\n else this.#remote(\"unMute\");\n }\n setCurrentTime(time) {\n this.#remote(\"seekTo\", time);\n this.#ctx.notify(\"seeking\", time);\n }\n setVolume(volume) {\n this.#remote(\"setVolume\", volume * 100);\n }\n setPlaybackRate(rate) {\n this.#remote(\"setPlaybackRate\", rate);\n }\n async loadSource(src) {\n if (!isString(src.src)) {\n this.#currentSrc = null;\n this.#videoId.set(\"\");\n return;\n }\n const videoId = resolveYouTubeVideoId(src.src);\n this.#videoId.set(videoId ?? \"\");\n this.#currentSrc = src;\n }\n getOrigin() {\n return !this.cookies ? \"https://www.youtube-nocookie.com\" : \"https://www.youtube.com\";\n }\n #watchVideoId() {\n this.#reset();\n const videoId = this.#videoId();\n if (!videoId) {\n this.src.set(\"\");\n return;\n }\n this.src.set(`${this.getOrigin()}/embed/${videoId}`);\n this.#ctx.notify(\"load-start\");\n }\n buildParams() {\n const { keyDisabled } = this.#ctx.$props, { muted, playsInline, nativeControls } = this.#ctx.$state, showControls = nativeControls();\n return {\n rel: 0,\n autoplay: 0,\n cc_lang_pref: this.language,\n cc_load_policy: showControls ? 1 : void 0,\n color: this.color,\n controls: showControls ? 1 : 0,\n disablekb: !showControls || keyDisabled() ? 1 : 0,\n enablejsapi: 1,\n fs: 1,\n hl: this.language,\n iv_load_policy: showControls ? 1 : 3,\n mute: muted() ? 1 : 0,\n playsinline: playsInline() ? 1 : 0\n };\n }\n #remote(command, arg) {\n let promise = deferredPromise(), promises = this.#promises.get(command);\n if (!promises) this.#promises.set(command, promises = []);\n promises.push(promise);\n this.postMessage({\n event: \"command\",\n func: command,\n args: arg ? [arg] : void 0\n });\n return promise.promise;\n }\n onLoad() {\n window.setTimeout(() => this.postMessage({ event: \"listening\" }), 100);\n }\n #onReady(trigger) {\n this.#ctx.notify(\"loaded-metadata\");\n this.#ctx.notify(\"loaded-data\");\n this.#ctx.delegate.ready(void 0, trigger);\n }\n #onPause(trigger) {\n this.#getPromise(\"pauseVideo\")?.resolve();\n this.#ctx.notify(\"pause\", void 0, trigger);\n }\n #onTimeUpdate(time, trigger) {\n const { duration, realCurrentTime } = this.#ctx.$state, hasEnded = this.#state === YouTubePlayerState.Ended, boundTime = hasEnded ? duration() : time;\n this.#ctx.notify(\"time-change\", boundTime, trigger);\n if (!hasEnded && Math.abs(boundTime - realCurrentTime()) > 1) {\n this.#ctx.notify(\"seeking\", boundTime, trigger);\n }\n }\n #onProgress(buffered, seekable, trigger) {\n const detail = {\n buffered: new TimeRange(0, buffered),\n seekable\n };\n this.#ctx.notify(\"progress\", detail, trigger);\n const { seeking, realCurrentTime } = this.#ctx.$state;\n if (seeking() && buffered > realCurrentTime()) {\n this.#onSeeked(trigger);\n }\n }\n #onSeeked(trigger) {\n const { paused, realCurrentTime } = this.#ctx.$state;\n window.clearTimeout(this.#seekingTimer);\n this.#seekingTimer = window.setTimeout(\n () => {\n this.#ctx.notify(\"seeked\", realCurrentTime(), trigger);\n this.#seekingTimer = -1;\n },\n paused() ? 100 : 0\n );\n }\n #onEnded(trigger) {\n const { seeking } = this.#ctx.$state;\n if (seeking()) this.#onSeeked(trigger);\n this.#ctx.notify(\"pause\", void 0, trigger);\n this.#ctx.notify(\"end\", void 0, trigger);\n }\n #onStateChange(state, trigger) {\n const { paused, seeking } = this.#ctx.$state, isPlaying = state === YouTubePlayerState.Playing, isBuffering = state === YouTubePlayerState.Buffering, isPendingPlay = this.#isPending(\"playVideo\"), isPlay = paused() && (isBuffering || isPlaying);\n if (isBuffering) this.#ctx.notify(\"waiting\", void 0, trigger);\n if (seeking() && isPlaying) {\n this.#onSeeked(trigger);\n }\n if (this.#invalidPlay && isPlaying) {\n this.pause();\n this.#invalidPlay = false;\n this.setMuted(this.#ctx.$state.muted());\n return;\n }\n if (!isPendingPlay && isPlay) {\n this.#invalidPlay = true;\n this.setMuted(true);\n return;\n }\n if (isPlay) {\n this.#getPromise(\"playVideo\")?.resolve();\n this.#ctx.notify(\"play\", void 0, trigger);\n }\n switch (state) {\n case YouTubePlayerState.Cued:\n this.#onReady(trigger);\n break;\n case YouTubePlayerState.Playing:\n this.#ctx.notify(\"playing\", void 0, trigger);\n break;\n case YouTubePlayerState.Paused:\n this.#onPause(trigger);\n break;\n case YouTubePlayerState.Ended:\n this.#onEnded(trigger);\n break;\n }\n this.#state = state;\n }\n onMessage({ info }, event) {\n if (!info) return;\n const { title, intrinsicDuration, playbackRate } = this.#ctx.$state;\n if (isObject(info.videoData) && info.videoData.title !== title()) {\n this.#ctx.notify(\"title-change\", info.videoData.title, event);\n }\n if (isNumber(info.duration) && info.duration !== intrinsicDuration()) {\n if (isNumber(info.videoLoadedFraction)) {\n const buffered = info.progressState?.loaded ?? info.videoLoadedFraction * info.duration, seekable = new TimeRange(0, info.duration);\n this.#onProgress(buffered, seekable, event);\n }\n this.#ctx.notify(\"duration-change\", info.duration, event);\n }\n if (isNumber(info.playbackRate) && info.playbackRate !== playbackRate()) {\n this.#ctx.notify(\"rate-change\", info.playbackRate, event);\n }\n if (info.progressState) {\n const { current, seekableStart, seekableEnd, loaded, duration } = info.progressState;\n this.#onTimeUpdate(current, event);\n this.#onProgress(loaded, new TimeRange(seekableStart, seekableEnd), event);\n if (duration !== intrinsicDuration()) {\n this.#ctx.notify(\"duration-change\", duration, event);\n }\n }\n if (isNumber(info.volume) && isBoolean(info.muted) && !this.#invalidPlay) {\n const detail = {\n muted: info.muted,\n volume: info.volume / 100\n };\n this.#ctx.notify(\"volume-change\", detail, event);\n }\n if (isNumber(info.playerState) && info.playerState !== this.#state) {\n this.#onStateChange(info.playerState, event);\n }\n }\n #reset() {\n this.#state = -1;\n this.#seekingTimer = -1;\n this.#invalidPlay = false;\n }\n #getPromise(command) {\n return this.#promises.get(command)?.shift();\n }\n #isPending(command) {\n return Boolean(this.#promises.get(command)?.length);\n }\n}\n\nexport { YouTubeProvider };\n"],"names":["YouTubePlayerState","YouTubeProvider","EmbedProvider","iframe","ctx","__privateAdd","_YouTubeProvider_instances","__publicField","createScope","_ctx","_videoId","signal","_state","_currentSrc","_seekingTimer","_invalidPlay","_promises","__privateSet","__privateGet","preconnect","effect","__privateMethod","watchVideoId_fn","reset_fn","message","promises","reject","remote_fn","muted","time","volume","rate","src","isString","videoId","resolveYouTubeVideoId","keyDisabled","playsInline","nativeControls","showControls","info","event","title","intrinsicDuration","playbackRate","isObject","isNumber","buffered","_a","seekable","TimeRange","onProgress_fn","current","seekableStart","seekableEnd","loaded","duration","onTimeUpdate_fn","isBoolean","detail","onStateChange_fn","playFail_fn","getPromise_fn","pauseFail_fn","command","arg","promise","deferredPromise","onReady_fn","trigger","onPause_fn","realCurrentTime","hasEnded","boundTime","seeking","onSeeked_fn","paused","onEnded_fn","state","isPlaying","isBuffering","isPendingPlay","isPending_fn","isPlay"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/packages/ui/dist-lib/vidstack-Dm1xEU9Q-qSXq3AI-.js b/packages/ui/dist-lib/vidstack-Dm1xEU9Q-qSXq3AI-.js new file mode 100644 index 00000000..019dde28 --- /dev/null +++ b/packages/ui/dist-lib/vidstack-Dm1xEU9Q-qSXq3AI-.js @@ -0,0 +1,32 @@ +const i = /(?:youtu\.be|youtube|youtube\.com|youtube-nocookie\.com)(?:\/shorts)?\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=|)((?:\w|-){11})/, u = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map(); +function l(e) { + var t; + return (t = e.match(i)) == null ? void 0 : t[1]; +} +async function b(e, t) { + if (u.has(e)) return u.get(e); + if (n.has(e)) return n.get(e); + const s = new Promise(async (r) => { + const c = ["maxresdefault", "sddefault", "hqdefault"]; + for (const a of c) + for (const f of [!0, !1]) { + const o = p(e, a, f); + if ((await fetch(o, { + mode: "no-cors", + signal: t.signal + })).status < 400) { + u.set(e, o), r(o); + return; + } + } + }).catch(() => "").finally(() => n.delete(e)); + return n.set(e, s), s; +} +function p(e, t, s) { + return `https://i.ytimg.com/${s ? "vi_webp" : "vi"}/${e}/${t}.${s ? "webp" : "jpg"}`; +} +export { + b as findYouTubePoster, + l as resolveYouTubeVideoId +}; +//# sourceMappingURL=vidstack-Dm1xEU9Q-qSXq3AI-.js.map diff --git a/packages/ui/dist-lib/vidstack-Dm1xEU9Q-qSXq3AI-.js.map b/packages/ui/dist-lib/vidstack-Dm1xEU9Q-qSXq3AI-.js.map new file mode 100644 index 00000000..09c399e4 --- /dev/null +++ b/packages/ui/dist-lib/vidstack-Dm1xEU9Q-qSXq3AI-.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vidstack-Dm1xEU9Q-qSXq3AI-.js","sources":["../node_modules/@vidstack/react/prod/chunks/vidstack-Dm1xEU9Q.js"],"sourcesContent":["\"use client\"\n\nconst videoIdRE = /(?:youtu\\.be|youtube|youtube\\.com|youtube-nocookie\\.com)(?:\\/shorts)?\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=|)((?:\\w|-){11})/;\nconst posterCache = /* @__PURE__ */ new Map();\nconst pendingFetch = /* @__PURE__ */ new Map();\nfunction resolveYouTubeVideoId(src) {\n return src.match(videoIdRE)?.[1];\n}\nasync function findYouTubePoster(videoId, abort) {\n if (posterCache.has(videoId)) return posterCache.get(videoId);\n if (pendingFetch.has(videoId)) return pendingFetch.get(videoId);\n const pending = new Promise(async (resolve) => {\n const sizes = [\"maxresdefault\", \"sddefault\", \"hqdefault\"];\n for (const size of sizes) {\n for (const webp of [true, false]) {\n const url = resolveYouTubePosterURL(videoId, size, webp), response = await fetch(url, {\n mode: \"no-cors\",\n signal: abort.signal\n });\n if (response.status < 400) {\n posterCache.set(videoId, url);\n resolve(url);\n return;\n }\n }\n }\n }).catch(() => \"\").finally(() => pendingFetch.delete(videoId));\n pendingFetch.set(videoId, pending);\n return pending;\n}\nfunction resolveYouTubePosterURL(videoId, size, webp) {\n const type = webp ? \"webp\" : \"jpg\";\n return `https://i.ytimg.com/${webp ? \"vi_webp\" : \"vi\"}/${videoId}/${size}.${type}`;\n}\n\nexport { findYouTubePoster, resolveYouTubeVideoId };\n"],"names":["videoIdRE","posterCache","pendingFetch","resolveYouTubeVideoId","src","_a","findYouTubePoster","videoId","abort","pending","resolve","sizes","size","webp","url","resolveYouTubePosterURL"],"mappings":"AAEA,MAAMA,IAAY,gIACZC,IAA8B,oBAAI,IAAG,GACrCC,IAA+B,oBAAI,IAAG;AAC5C,SAASC,EAAsBC,GAAK;AAHpC,MAAAC;AAIE,UAAOA,IAAAD,EAAI,MAAMJ,CAAS,MAAnB,gBAAAK,EAAuB;AAChC;AACA,eAAeC,EAAkBC,GAASC,GAAO;AAC/C,MAAIP,EAAY,IAAIM,CAAO,EAAG,QAAON,EAAY,IAAIM,CAAO;AAC5D,MAAIL,EAAa,IAAIK,CAAO,EAAG,QAAOL,EAAa,IAAIK,CAAO;AAC9D,QAAME,IAAU,IAAI,QAAQ,OAAOC,MAAY;AAC7C,UAAMC,IAAQ,CAAC,iBAAiB,aAAa,WAAW;AACxD,eAAWC,KAAQD;AACjB,iBAAWE,KAAQ,CAAC,IAAM,EAAK,GAAG;AAChC,cAAMC,IAAMC,EAAwBR,GAASK,GAAMC,CAAI;AAIvD,aAJqE,MAAM,MAAMC,GAAK;AAAA,UACpF,MAAM;AAAA,UACN,QAAQN,EAAM;AAAA,QACxB,CAAS,GACY,SAAS,KAAK;AACzB,UAAAP,EAAY,IAAIM,GAASO,CAAG,GAC5BJ,EAAQI,CAAG;AACX;AAAA,QACF;AAAA,MACF;AAAA,EAEJ,CAAC,EAAE,MAAM,MAAM,EAAE,EAAE,QAAQ,MAAMZ,EAAa,OAAOK,CAAO,CAAC;AAC7D,SAAAL,EAAa,IAAIK,GAASE,CAAO,GAC1BA;AACT;AACA,SAASM,EAAwBR,GAASK,GAAMC,GAAM;AAEpD,SAAO,uBAAuBA,IAAO,YAAY,IAAI,IAAIN,CAAO,IAAIK,CAAI,IAD3DC,IAAO,SAAS,KACmD;AAClF;","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/packages/ui/dist-lib/vidstack-FldwQc2Q-PD3aMpLc.js b/packages/ui/dist-lib/vidstack-FldwQc2Q-PD3aMpLc.js new file mode 100644 index 00000000..c93d29e7 --- /dev/null +++ b/packages/ui/dist-lib/vidstack-FldwQc2Q-PD3aMpLc.js @@ -0,0 +1,61 @@ +var y = Object.defineProperty; +var g = (s) => { + throw TypeError(s); +}; +var w = (s, t, r) => t in s ? y(s, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : s[t] = r; +var c = (s, t, r) => w(s, typeof t != "symbol" ? t + "" : t, r), h = (s, t, r) => t.has(s) || g("Cannot " + r); +var e = (s, t, r) => (h(s, t, "read from private field"), r ? r.call(s) : t.get(s)), u = (s, t, r) => t.has(s) ? g("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(s) : t.set(s, r), p = (s, t, r, a) => (h(s, t, "write to private field"), a ? a.call(s, r) : t.set(s, r), r), l = (s, t, r) => (h(s, t, "access private method"), r); +import { y as M, m as f, n as A, l as P, G as S, J as E, h as O } from "./lib-export-CI8auKfP.js"; +var i, o, b, m; +class W { + constructor(t) { + u(this, o); + u(this, i); + c(this, "src", M("")); + /** + * Defines which referrer is sent when fetching the resource. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy} + */ + c(this, "referrerPolicy", null); + p(this, i, t), t.setAttribute("frameBorder", "0"), t.setAttribute("aria-hidden", "true"), t.setAttribute( + "allow", + "autoplay; fullscreen; encrypted-media; picture-in-picture; accelerometer; gyroscope" + ), this.referrerPolicy !== null && t.setAttribute("referrerpolicy", this.referrerPolicy); + } + get iframe() { + return e(this, i); + } + setup() { + f(window, "message", l(this, o, m).bind(this)), f(e(this, i), "load", this.onLoad.bind(this)), A(l(this, o, b).bind(this)); + } + postMessage(t, r) { + var a; + E || (a = e(this, i).contentWindow) == null || a.postMessage(JSON.stringify(t), r ?? "*"); + } +} +i = new WeakMap(), o = new WeakSet(), b = function() { + const t = this.src(); + if (!t.length) { + e(this, i).setAttribute("src", ""); + return; + } + const r = P(() => this.buildParams()); + e(this, i).setAttribute("src", S(t, r)); +}, m = function(t) { + var d; + const r = this.getOrigin(); + if ((t.source === null || t.source === ((d = e(this, i)) == null ? void 0 : d.contentWindow)) && (!O(r) || r === t.origin)) { + try { + const n = JSON.parse(t.data); + n && this.onMessage(n, t); + return; + } catch { + } + t.data && this.onMessage(t.data, t); + } +}; +export { + W as E +}; +//# sourceMappingURL=vidstack-FldwQc2Q-PD3aMpLc.js.map diff --git a/packages/ui/dist-lib/vidstack-FldwQc2Q-PD3aMpLc.js.map b/packages/ui/dist-lib/vidstack-FldwQc2Q-PD3aMpLc.js.map new file mode 100644 index 00000000..d45eb998 --- /dev/null +++ b/packages/ui/dist-lib/vidstack-FldwQc2Q-PD3aMpLc.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vidstack-FldwQc2Q-PD3aMpLc.js","sources":["../node_modules/@vidstack/react/prod/chunks/vidstack-FldwQc2Q.js"],"sourcesContent":["\"use client\"\n\nimport { appendParamsToURL, IS_SERVER } from './vidstack-D5Pzx_k5.js';\nimport { signal, listenEvent, effect, peek, isString } from './vidstack-CZgUA94N.js';\n\nclass EmbedProvider {\n #iframe;\n src = signal(\"\");\n /**\n * Defines which referrer is sent when fetching the resource.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy}\n */\n referrerPolicy = null;\n get iframe() {\n return this.#iframe;\n }\n constructor(iframe) {\n this.#iframe = iframe;\n iframe.setAttribute(\"frameBorder\", \"0\");\n iframe.setAttribute(\"aria-hidden\", \"true\");\n iframe.setAttribute(\n \"allow\",\n \"autoplay; fullscreen; encrypted-media; picture-in-picture; accelerometer; gyroscope\"\n );\n if (this.referrerPolicy !== null) {\n iframe.setAttribute(\"referrerpolicy\", this.referrerPolicy);\n }\n }\n setup() {\n listenEvent(window, \"message\", this.#onWindowMessage.bind(this));\n listenEvent(this.#iframe, \"load\", this.onLoad.bind(this));\n effect(this.#watchSrc.bind(this));\n }\n #watchSrc() {\n const src = this.src();\n if (!src.length) {\n this.#iframe.setAttribute(\"src\", \"\");\n return;\n }\n const params = peek(() => this.buildParams());\n this.#iframe.setAttribute(\"src\", appendParamsToURL(src, params));\n }\n postMessage(message, target) {\n if (IS_SERVER) return;\n this.#iframe.contentWindow?.postMessage(JSON.stringify(message), target ?? \"*\");\n }\n #onWindowMessage(event) {\n const origin = this.getOrigin(), isOriginMatch = (event.source === null || event.source === this.#iframe?.contentWindow) && (!isString(origin) || origin === event.origin);\n if (!isOriginMatch) return;\n try {\n const message = JSON.parse(event.data);\n if (message) this.onMessage(message, event);\n return;\n } catch (e) {\n }\n if (event.data) this.onMessage(event.data, event);\n }\n}\n\nexport { EmbedProvider };\n"],"names":["EmbedProvider","iframe","__privateAdd","_EmbedProvider_instances","_iframe","__publicField","signal","__privateSet","__privateGet","listenEvent","__privateMethod","onWindowMessage_fn","effect","watchSrc_fn","message","target","IS_SERVER","_a","src","params","peek","appendParamsToURL","event","origin","isString"],"mappings":";;;;;;;;;AAKA,MAAMA,EAAc;AAAA,EAYlB,YAAYC,GAAQ;AAZtB,IAAAC,EAAA,MAAAC;AACE,IAAAD,EAAA,MAAAE;AACA,IAAAC,EAAA,aAAMC,EAAO,EAAE;AAMf;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAD,EAAA,wBAAiB;AAKf,IAAAE,EAAA,MAAKH,GAAUH,IACfA,EAAO,aAAa,eAAe,GAAG,GACtCA,EAAO,aAAa,eAAe,MAAM,GACzCA,EAAO;AAAA,MACL;AAAA,MACA;AAAA,IACN,GACQ,KAAK,mBAAmB,QAC1BA,EAAO,aAAa,kBAAkB,KAAK,cAAc;AAAA,EAE7D;AAAA,EAdA,IAAI,SAAS;AACX,WAAOO,EAAA,MAAKJ;AAAA,EACd;AAAA,EAaA,QAAQ;AACN,IAAAK,EAAY,QAAQ,WAAWC,EAAA,MAAKP,GAAAQ,GAAiB,KAAK,IAAI,CAAC,GAC/DF,EAAYD,EAAA,MAAKJ,IAAS,QAAQ,KAAK,OAAO,KAAK,IAAI,CAAC,GACxDQ,EAAOF,EAAA,MAAKP,GAAAU,GAAU,KAAK,IAAI,CAAC;AAAA,EAClC;AAAA,EAUA,YAAYC,GAASC,GAAQ;;AAC3B,IAAIC,MACJC,IAAAT,EAAA,MAAKJ,GAAQ,kBAAb,QAAAa,EAA4B,YAAY,KAAK,UAAUH,CAAO,GAAGC,KAAU;AAAA,EAC7E;AAYF;AApDEX,IAAA,eADFD,IAAA,eA6BEU,IAAS,WAAG;AACV,QAAMK,IAAM,KAAK,IAAG;AACpB,MAAI,CAACA,EAAI,QAAQ;AACf,IAAAV,EAAA,MAAKJ,GAAQ,aAAa,OAAO,EAAE;AACnC;AAAA,EACF;AACA,QAAMe,IAASC,EAAK,MAAM,KAAK,YAAW,CAAE;AAC5C,EAAAZ,EAAA,MAAKJ,GAAQ,aAAa,OAAOiB,EAAkBH,GAAKC,CAAM,CAAC;AACjE,GAKAR,IAAgB,SAACW,GAAO;;AACtB,QAAMC,IAAS,KAAK,UAAS;AAC7B,OADkDD,EAAM,WAAW,QAAQA,EAAM,aAAWL,IAAAT,EAAA,MAAKJ,OAAL,gBAAAa,EAAc,oBAAmB,CAACO,EAASD,CAAM,KAAKA,MAAWD,EAAM,SAEnK;AAAA,QAAI;AACF,YAAMR,IAAU,KAAK,MAAMQ,EAAM,IAAI;AACrC,MAAIR,KAAS,KAAK,UAAUA,GAASQ,CAAK;AAC1C;AAAA,IACF,QAAY;AAAA,IACZ;AACA,IAAIA,EAAM,QAAM,KAAK,UAAUA,EAAM,MAAMA,CAAK;AAAA;AAClD;","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/packages/ui/dist-lib/vidstack-R_ot4AhB-HEsIT7bU.js b/packages/ui/dist-lib/vidstack-R_ot4AhB-HEsIT7bU.js new file mode 100644 index 00000000..cbcf8a46 --- /dev/null +++ b/packages/ui/dist-lib/vidstack-R_ot4AhB-HEsIT7bU.js @@ -0,0 +1,33 @@ +var a = Object.defineProperty; +var o = (i, e, t) => e in i ? a(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t; +var r = (i, e, t) => o(i, typeof e != "symbol" ? e + "" : e, t); +import { H as d, d as p, e as u } from "./lib-export-CI8auKfP.js"; +import "react"; +class y extends d { + constructor(t, s) { + super(t, s); + r(this, "$$PROVIDER_TYPE", "AUDIO"); + r(this, "airPlay"); + p(() => { + this.airPlay = new u(this.media, s); + }, this.scope); + } + get type() { + return "audio"; + } + setup() { + super.setup(), this.type === "audio" && this.ctx.notify("provider-setup", this); + } + /** + * The native HTML `<audio>` element. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement} + */ + get audio() { + return this.media; + } +} +export { + y as AudioProvider +}; +//# sourceMappingURL=vidstack-R_ot4AhB-HEsIT7bU.js.map diff --git a/packages/ui/dist-lib/vidstack-R_ot4AhB-HEsIT7bU.js.map b/packages/ui/dist-lib/vidstack-R_ot4AhB-HEsIT7bU.js.map new file mode 100644 index 00000000..48026edd --- /dev/null +++ b/packages/ui/dist-lib/vidstack-R_ot4AhB-HEsIT7bU.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vidstack-R_ot4AhB-HEsIT7bU.js","sources":["../node_modules/@vidstack/react/prod/chunks/vidstack-R_ot4AhB.js"],"sourcesContent":["\"use client\"\n\nimport { scoped } from './vidstack-CZgUA94N.js';\nimport { HTMLMediaProvider, HTMLAirPlayAdapter } from './vidstack-D5Pzx_k5.js';\nimport 'react';\nimport '@floating-ui/dom';\n\nclass AudioProvider extends HTMLMediaProvider {\n $$PROVIDER_TYPE = \"AUDIO\";\n get type() {\n return \"audio\";\n }\n airPlay;\n constructor(audio, ctx) {\n super(audio, ctx);\n scoped(() => {\n this.airPlay = new HTMLAirPlayAdapter(this.media, ctx);\n }, this.scope);\n }\n setup() {\n super.setup();\n if (this.type === \"audio\") this.ctx.notify(\"provider-setup\", this);\n }\n /**\n * The native HTML `<audio>` element.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement}\n */\n get audio() {\n return this.media;\n }\n}\n\nexport { AudioProvider };\n"],"names":["AudioProvider","HTMLMediaProvider","audio","ctx","__publicField","scoped","HTMLAirPlayAdapter"],"mappings":";;;;;AAOA,MAAMA,UAAsBC,EAAkB;AAAA,EAM5C,YAAYC,GAAOC,GAAK;AACtB,UAAMD,GAAOC,CAAG;AANlB,IAAAC,EAAA,yBAAkB;AAIlB,IAAAA,EAAA;AAGE,IAAAC,EAAO,MAAM;AACX,WAAK,UAAU,IAAIC,EAAmB,KAAK,OAAOH,CAAG;AAAA,IACvD,GAAG,KAAK,KAAK;AAAA,EACf;AAAA,EATA,IAAI,OAAO;AACT,WAAO;AAAA,EACT;AAAA,EAQA,QAAQ;AACN,UAAM,MAAK,GACP,KAAK,SAAS,WAAS,KAAK,IAAI,OAAO,kBAAkB,IAAI;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AACF;","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/packages/ui/dist-lib/vidstack-krOAtKMi-B4IZWKdc.js b/packages/ui/dist-lib/vidstack-krOAtKMi-B4IZWKdc.js new file mode 100644 index 00000000..747d67a4 --- /dev/null +++ b/packages/ui/dist-lib/vidstack-krOAtKMi-B4IZWKdc.js @@ -0,0 +1,30 @@ +const g = /(?:https:\/\/)?(?:player\.)?vimeo(?:\.com)?\/(?:video\/)?(\d+)(?:(?:\?hash=|\?h=|\/)(.*))?/, c = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map(); +function b(n) { + const o = n.match(g); + return { videoId: o == null ? void 0 : o[1], hash: o == null ? void 0 : o[2] }; +} +async function w(n, o, r) { + if (c.has(n)) return c.get(n); + if (i.has(n)) return i.get(n); + let t = `https://vimeo.com/api/oembed.json?url=https://player.vimeo.com/video/${n}`; + r && (t = t.concat(`?h=${r}`)); + const s = window.fetch(t, { + mode: "cors", + signal: o.signal + }).then((e) => e.json()).then((e) => { + var l, p; + const u = /vimeocdn.com\/video\/(.*)?_/, h = (p = (l = e == null ? void 0 : e.thumbnail_url) == null ? void 0 : l.match(u)) == null ? void 0 : p[1], f = h ? `https://i.vimeocdn.com/video/${h}_1920x1080.webp` : "", m = { + title: (e == null ? void 0 : e.title) ?? "", + duration: (e == null ? void 0 : e.duration) ?? 0, + poster: f, + pro: e.account_type !== "basic" + }; + return c.set(n, m), m; + }).finally(() => i.delete(n)); + return i.set(n, s), s; +} +export { + w as getVimeoVideoInfo, + b as resolveVimeoVideoId +}; +//# sourceMappingURL=vidstack-krOAtKMi-B4IZWKdc.js.map diff --git a/packages/ui/dist-lib/vidstack-krOAtKMi-B4IZWKdc.js.map b/packages/ui/dist-lib/vidstack-krOAtKMi-B4IZWKdc.js.map new file mode 100644 index 00000000..16bc063e --- /dev/null +++ b/packages/ui/dist-lib/vidstack-krOAtKMi-B4IZWKdc.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vidstack-krOAtKMi-B4IZWKdc.js","sources":["../node_modules/@vidstack/react/prod/chunks/vidstack-krOAtKMi.js"],"sourcesContent":["\"use client\"\n\nconst videoIdRE = /(?:https:\\/\\/)?(?:player\\.)?vimeo(?:\\.com)?\\/(?:video\\/)?(\\d+)(?:(?:\\?hash=|\\?h=|\\/)(.*))?/;\nconst infoCache = /* @__PURE__ */ new Map();\nconst pendingFetch = /* @__PURE__ */ new Map();\nfunction resolveVimeoVideoId(src) {\n const matches = src.match(videoIdRE);\n return { videoId: matches?.[1], hash: matches?.[2] };\n}\nasync function getVimeoVideoInfo(videoId, abort, videoHash) {\n if (infoCache.has(videoId)) return infoCache.get(videoId);\n if (pendingFetch.has(videoId)) return pendingFetch.get(videoId);\n let oembedSrc = `https://vimeo.com/api/oembed.json?url=https://player.vimeo.com/video/${videoId}`;\n if (videoHash) {\n oembedSrc = oembedSrc.concat(`?h=${videoHash}`);\n }\n const promise = window.fetch(oembedSrc, {\n mode: \"cors\",\n signal: abort.signal\n }).then((response) => response.json()).then((data) => {\n const thumnailRegex = /vimeocdn.com\\/video\\/(.*)?_/, thumbnailId = data?.thumbnail_url?.match(thumnailRegex)?.[1], poster = thumbnailId ? `https://i.vimeocdn.com/video/${thumbnailId}_1920x1080.webp` : \"\", info = {\n title: data?.title ?? \"\",\n duration: data?.duration ?? 0,\n poster,\n pro: data.account_type !== \"basic\"\n };\n infoCache.set(videoId, info);\n return info;\n }).finally(() => pendingFetch.delete(videoId));\n pendingFetch.set(videoId, promise);\n return promise;\n}\n\nexport { getVimeoVideoInfo, resolveVimeoVideoId };\n"],"names":["videoIdRE","infoCache","pendingFetch","resolveVimeoVideoId","src","matches","getVimeoVideoInfo","videoId","abort","videoHash","oembedSrc","promise","response","data","_a","_b","thumnailRegex","thumbnailId","poster","info"],"mappings":"AAEA,MAAMA,IAAY,8FACZC,IAA4B,oBAAI,IAAG,GACnCC,IAA+B,oBAAI,IAAG;AAC5C,SAASC,EAAoBC,GAAK;AAChC,QAAMC,IAAUD,EAAI,MAAMJ,CAAS;AACnC,SAAO,EAAE,SAASK,KAAA,gBAAAA,EAAU,IAAI,MAAMA,KAAA,gBAAAA,EAAU,GAAE;AACpD;AACA,eAAeC,EAAkBC,GAASC,GAAOC,GAAW;AAC1D,MAAIR,EAAU,IAAIM,CAAO,EAAG,QAAON,EAAU,IAAIM,CAAO;AACxD,MAAIL,EAAa,IAAIK,CAAO,EAAG,QAAOL,EAAa,IAAIK,CAAO;AAC9D,MAAIG,IAAY,wEAAwEH,CAAO;AAC/F,EAAIE,MACFC,IAAYA,EAAU,OAAO,MAAMD,CAAS,EAAE;AAEhD,QAAME,IAAU,OAAO,MAAMD,GAAW;AAAA,IACtC,MAAM;AAAA,IACN,QAAQF,EAAM;AAAA,EAClB,CAAG,EAAE,KAAK,CAACI,MAAaA,EAAS,MAAM,EAAE,KAAK,CAACC,MAAS;AAjBxD,QAAAC,GAAAC;AAkBI,UAAMC,IAAgB,+BAA+BC,KAAcF,KAAAD,IAAAD,KAAA,gBAAAA,EAAM,kBAAN,gBAAAC,EAAqB,MAAME,OAA3B,gBAAAD,EAA4C,IAAIG,IAASD,IAAc,gCAAgCA,CAAW,oBAAoB,IAAIE,IAAO;AAAA,MAClN,QAAON,KAAA,gBAAAA,EAAM,UAAS;AAAA,MACtB,WAAUA,KAAA,gBAAAA,EAAM,aAAY;AAAA,MAC5B,QAAAK;AAAA,MACA,KAAKL,EAAK,iBAAiB;AAAA,IACjC;AACI,WAAAZ,EAAU,IAAIM,GAASY,CAAI,GACpBA;AAAA,EACT,CAAC,EAAE,QAAQ,MAAMjB,EAAa,OAAOK,CAAO,CAAC;AAC7C,SAAAL,EAAa,IAAIK,GAASI,CAAO,GAC1BA;AACT;","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/packages/ui/src/constants.ts b/packages/ui/src/constants.ts new file mode 100644 index 00000000..ef1d86d9 --- /dev/null +++ b/packages/ui/src/constants.ts @@ -0,0 +1,107 @@ +export const ENABLE_ZOOM = true; + +export enum TauriCommand { + SUBMIT_PROMPT = 'submit_prompt', + LOG_ERROR = 'log_error_to_console', + RESOLVE_PATH = 'resolve_path_relative_to_home', + ADD_DEBUG_MESSAGE = 'add_debug_message', + SEND_IPC_MESSAGE = 'send_ipc_message', + REQUEST_CONFIG = 'request_config_from_images', + GENERATE_IMAGE = 'generate_image_via_backend', + REQUEST_FILE_DELETION = 'request_file_deletion', +} + +export enum TauriEvent { + CONFIG_RECEIVED = 'config-received', + IMAGE_RECEIVED = 'image-received', + GENERATION_ERROR = 'generation-error', + GENERATION_COMPLETE = 'generation-complete', + FILE_DELETED_SUCCESSFULLY = 'file-deleted-successfully', + FILE_DELETION_ERROR = 'file-deletion-error', +} + +export const QUICK_STYLES = [ + 'cartoon style', + 'photorealistic', + 'noir style', + 'product mockup', + 'watercolor painting', + 'digital art', + 'minimalist design', + 'vintage poster', + 'cyberpunk aesthetic' +] as const; + +export const QUICK_ACTIONS = [ + { + name: 'Remove Background', + prompt: 'remove the background, make it transparent', + iconName: 'Eraser' + }, + { + name: 'Cleanup', + prompt: 'clean up and enhance the image, remove noise and artifacts', + iconName: 'Sparkles' + }, + { + name: 'Crop Foreground', + prompt: 'crop to focus on the main subject, remove unnecessary background', + iconName: 'Crop' + }, + { + name: 'Improve Colors', + prompt: 'enhance colors, improve saturation and contrast', + iconName: 'Palette' + }, + { + name: 'Product Presentation', + prompt: 'professional product photography style, clean background, studio lighting', + iconName: 'Package' + } +] as const; + +// AI Image Analysis Prompt +export const AI_IMAGE_ANALYSIS_PROMPT = + "Analyze this image and provide: 1) A creative, engaging title (max 50 characters), and 2) A detailed description. Format your response with 'Title: [your title]' on the first line, followed by the description on the next lines." as const; + +// Photo Grid Image Dimensions +export const PHOTO_GRID_THUMBNAIL_WIDTH = 600; +export const PHOTO_GRID_IMAGE_FORMAT = 'jpg' as const; // 'jpg' | 'png' + +// Feed Configuration +export const FEED_PAGE_SIZE = 30; +export const FEED_API_ENDPOINT = '/api/feed'; + +// Split Prompts Configuration +export const MAX_SPLIT_PROMPTS = 10; + +/** + * Split a prompt into multiple lines for sequential generation + * @param prompt The full prompt text + * @param maxLines Maximum number of lines to accept (default: 10) + * @returns Array of prompt lines, trimmed and filtered for empty lines + */ +export const splitPromptByLines = (prompt: string, maxLines: number = MAX_SPLIT_PROMPTS): string[] => { + return prompt + .split('\n') + .map(line => line.trim()) + .map(line => line.replace(/^[-•*]\s*/, '')) // Remove leading bullets/dashes + .filter(line => line.length > 0) + .slice(0, maxLines); +}; + +// Default Quick Actions for ImageWizard +export interface QuickAction { + id: string; + name: string; + prompt: string; + icon: string; +} + +export const DEFAULT_QUICK_ACTIONS: QuickAction[] = [ + { id: '1', name: "Enhance", prompt: "Enhance and improve this image", icon: "✨" }, + { id: '2', name: "Make Artistic", prompt: "Transform this into a beautiful artistic painting", icon: "🎨" }, + { id: '3', name: "Cyberpunk Style", prompt: "Transform this into cyberpunk style with neon colors", icon: "🌆" }, + { id: '4', name: "Fantasy", prompt: "Transform this into a fantasy art style", icon: "🧙‍♂️" }, + { id: '5', name: "Portrait", prompt: "Transform this into a professional portrait", icon: "👤" }, +]; \ No newline at end of file diff --git a/packages/ui/src/i18n.tsx b/packages/ui/src/i18n.tsx new file mode 100644 index 00000000..4521eb10 --- /dev/null +++ b/packages/ui/src/i18n.tsx @@ -0,0 +1,246 @@ +import React, { useState, useEffect, ReactNode, useMemo } from 'react'; +// import { translations as generatedTranslations } from '../src/translations'; // Generated translations + +// --- Language Configuration --- +type LangCode = 'en' | 'fr' | 'sw' | 'de' | 'es' | 'it' | 'ja' | 'ko' | 'pt' | 'ru' | 'tr' | 'zh' | 'nl'; +const DEFAULT_LANG: LangCode = 'en'; + +export const supportedLanguages = [ + { code: 'en', name: 'English' }, + { code: 'fr', name: 'Français' }, + { code: 'sw', name: 'Kiswahili' }, + { code: 'de', name: 'Deutsch' }, + { code: 'es', name: 'Español' }, + { code: 'nl', name: 'Nederlands' } +]; + +// --- Caching and Loading --- +const translationCache: { [lang: string]: Record<string, string> } = {}; +const loadingPromises: { [lang: string]: Promise<Record<string, string>> } = {}; +const translationsLoaded: { [lang: string]: boolean } = {}; + +// --- Pub/Sub for updates --- +let listeners: (() => void)[] = []; +const subscribe = (callback: () => void) => { + listeners.push(callback); + return () => { + listeners = listeners.filter(l => l !== callback); + }; +}; +const notify = () => { + listeners.forEach(l => l()); +}; + +const loadTranslations = (lang: LangCode): Promise<Record<string, string>> => { + if (translationsLoaded[lang]) { + return Promise.resolve(translationCache[lang] || {}); + } + + return loadingPromises[lang] || (() => { + const promise = import(`./i18n/${lang}.json`) + .then(module => { + const translations = module.default; + // Merge with existing auto-collected keys, but prioritize loaded translations + const existingCache = translationCache[lang] || {}; + translationCache[lang] = { ...existingCache, ...translations }; + translationsLoaded[lang] = true; + delete loadingPromises[lang]; + notify(); // Notify components to re-render with new translations + return translationCache[lang]; + }) + .catch(error => { + console.warn(`Could not load translations for language: ${lang}`, error); + // Don't mark as loaded if it failed, but keep auto-collected keys + delete loadingPromises[lang]; + notify(); // Still notify to update state + return translationCache[lang] || {}; + }); + + loadingPromises[lang] = promise; + return promise; + })(); +}; + +// Helper to get cookie value +const getCookie = (name: string): string | null => { + if (typeof document === 'undefined') return null; + const value = `; ${document.cookie}`; + const parts = value.split(`; ${name}=`); + if (parts.length === 2) return parts.pop()?.split(';').shift() || null; + return null; +}; + +// Helper to set cookie value +const setCookie = (name: string, value: string, days: number = 365) => { + if (typeof document === 'undefined') return; + const expires = new Date(); + expires.setTime(expires.getTime() + days * 24 * 60 * 60 * 1000); + document.cookie = `${name}=${value};expires=${expires.toUTCString()};path=/;SameSite=Lax`; +}; + +const getCurrentLangInternal = (): LangCode => { + if (typeof window !== 'undefined') { + // 1. Check cookie first + const cookieLang = getCookie('lang') as LangCode; + if (cookieLang && cookieLang.length === 2) { + return cookieLang; + } + + // 2. Check URL parameter (for backward compatibility) + const params = new URLSearchParams(window.location.search); + const langParam = params.get('lang') as LangCode; + if (langParam && langParam.length === 2) { + // Save to cookie for future visits + setCookie('lang', langParam); + return langParam; + } + + // 3. Fallback to browser language + const browserLangs = navigator.languages || [navigator.language]; + for (const lang of browserLangs) { + const shortLang = lang.split('-')[0] as LangCode; + if (shortLang && shortLang.length === 2) { + return shortLang; + } + } + } + return DEFAULT_LANG; +}; +export const getCurrentLang = getCurrentLangInternal; + +// Function to change language and save to cookie +export const setLanguage = (langCode: LangCode) => { + setCookie('lang', langCode); + // Reload to apply new language + if (typeof window !== 'undefined') { + window.location.reload(); + } +}; + + +// Helper function to get a translated string directly (SYNC) +export const translate = (textKey: string, langParam?: LangCode): string => { + const langToUse = langParam || getCurrentLangInternal(); + + // 1. Try loaded translations for current language + if (translationsLoaded[langToUse] && translationCache[langToUse] && translationCache[langToUse][textKey] !== undefined) { + return translationCache[langToUse][textKey]; + } + + // 2. If not found and lang is not default, try loaded translations for default language + if (langToUse !== DEFAULT_LANG && translationsLoaded[DEFAULT_LANG] && translationCache[DEFAULT_LANG] && translationCache[DEFAULT_LANG][textKey] !== undefined) { + return translationCache[DEFAULT_LANG][textKey]; + } + + // 3. Auto-populate cache with key for dictionary building (only if not already loaded) + if (!translationCache[langToUse]) { + translationCache[langToUse] = {}; + } + if (translationCache[langToUse][textKey] === undefined) { + translationCache[langToUse][textKey] = textKey; // Store key as value for now + } + + // 4. Ultimate fallback: return the key itself + return textKey; +}; + +interface TProps { + children: ReactNode; +} + +const T: React.FC<TProps> = ({ children }) => { + const [, forceUpdate] = useState(0); + + useEffect(() => { + return subscribe(() => { + forceUpdate(c => c + 1); + }); + }, []); + + const currentLang = getCurrentLangInternal(); + useEffect(() => { + loadTranslations(currentLang); + }, [currentLang]); + + const textKey = useMemo(() => { + if (typeof children === 'string') return children; + if (React.isValidElement(children) && typeof children.props.children === 'string') { + return children.props.children; + } + return null; + }, [children]); + + if (!textKey) { + return <>{children}</>; + } + + const translatedString = translate(textKey, currentLang); + + if (React.isValidElement(children) && typeof children.props.children === 'string') { + return React.cloneElement(children, {}, translatedString); + } + return <>{translatedString}</>; +}; + +export const getTranslationCache = (lang?: LangCode): Record<string, string> | Record<string, Record<string, string>> => { + if (lang) { + return translationCache[lang] || {}; + } + return translationCache; +}; + +// Helper function to download collected translations as JSON file +export const downloadTranslations = (lang: LangCode = 'en') => { + const translations = translationCache[lang] || {}; + const isLoaded = translationsLoaded[lang]; + + const sortedTranslations = Object.keys(translations) + .sort() + .reduce((result, key) => { + result[key] = translations[key]; + return result; + }, {} as Record<string, string>); + + const jsonString = JSON.stringify(sortedTranslations, null, 2); + const blob = new Blob([jsonString], { type: 'application/json' }); + const url = URL.createObjectURL(blob); + + const link = document.createElement('a'); + link.href = url; + link.download = `${lang}.json`; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + URL.revokeObjectURL(url); + + console.log(`Downloaded ${Object.keys(sortedTranslations).length} translation keys for language: ${lang} (${isLoaded ? 'loaded from file' : 'auto-collected'})`); +}; + +// Helper function to check translation loading status +export const getTranslationStatus = (lang?: LangCode) => { + if (lang) { + return { + loaded: translationsLoaded[lang] || false, + keysCount: Object.keys(translationCache[lang] || {}).length + }; + } + + const status: Record<string, { loaded: boolean; keysCount: number }> = {}; + for (const langCode of Object.keys(translationCache)) { + status[langCode] = { + loaded: translationsLoaded[langCode] || false, + keysCount: Object.keys(translationCache[langCode] || {}).length + }; + } + return status; +}; + +if (typeof window !== 'undefined') { + (window as any).getTranslationCache = getTranslationCache; + (window as any).translate = translate; + (window as any).getCurrentLang = getCurrentLang; + (window as any).downloadTranslations = downloadTranslations; + (window as any).getTranslationStatus = getTranslationStatus; +} + +export { T }; diff --git a/packages/ui/src/image-api.ts b/packages/ui/src/image-api.ts new file mode 100644 index 00000000..d2c04241 --- /dev/null +++ b/packages/ui/src/image-api.ts @@ -0,0 +1,471 @@ +import { GoogleGenerativeAI, Part, GenerationConfig } from "@google/generative-ai"; +import { supabase } from "@/integrations/supabase/client"; + +// Simple logger for user feedback (safety messages) +const logger = { + debug: (message: string, data?: any) => console.debug(`[DEBUG] ${message}`, data), + info: (message: string, data?: any) => console.info(`[INFO] ${message}`, data), + warn: (message: string, data?: any) => console.warn(`[WARN] ${message}`, data), + error: (message: string, data?: any) => console.error(`[ERROR] ${message}`, data), +}; + +export interface ImageGenerationRequest { + prompt: string; + width?: number; + height?: number; + model?: string; +} + +export interface ImageGenerationResponse { + success: boolean; + imagePath?: string; + imageUrl?: string; + text?: string; // Add text field for AI descriptions + error?: string; +} + +export interface ImageEditRequest { + imagePath: string; + prompt: string; + action: string; +} + +interface ImageResult { + imageData: ArrayBuffer; + text?: string; +} + +// Get user's Google API key from user_secrets +export const getGoogleApiKey = async (): Promise<string | null> => { + try { + const { data: { user } } = await supabase.auth.getUser(); + if (!user) { + logger.error('No authenticated user found'); + return null; + } + + const { data: secretData, error } = await supabase + .from('user_secrets') + .select('settings') + .eq('user_id', user.id) + .maybeSingle(); + + if (error) { + logger.error('Error fetching user secrets:', error); + return null; + } + + const settings = secretData?.settings as { api_keys?: Record<string, string> } | null; + const apiKey = settings?.api_keys?.google_api_key; + + if (!apiKey) { + logger.error('No Google API key found in user secrets. Please add your Google API key in your profile settings.'); + return null; + } + + return apiKey; + } catch (error) { + logger.error('Error getting Google API key:', error); + return null; + } +}; + + +// Create Google GenAI client +const createGoogleGenAIClient = async (apiKey?: string) => { + const key = apiKey || await getGoogleApiKey(); + + if (!key) { + logger.error('No Google API key found. Please provide an API key or set it in your profile.'); + return null; + } + + return new GoogleGenerativeAI(key); +}; + +// Helper to get MIME type from file extension +const getMimeType = (filename: string): string => { + const ext = filename.split('.').pop()?.toLowerCase(); + const mimeTypes: { [key: string]: string } = { + 'png': 'image/png', + 'jpg': 'image/jpeg', + 'jpeg': 'image/jpeg', + 'webp': 'image/webp', + 'gif': 'image/gif' + }; + return mimeTypes[ext || ''] || 'image/png'; +}; + +// Helper to convert File to base64 +const fileToBase64 = (file: File): Promise<string> => { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.readAsDataURL(file); + reader.onload = () => { + const result = reader.result as string; + // Remove data URL prefix to get just the base64 string + const base64 = result.split(',')[1]; + resolve(base64); + }; + reader.onerror = error => reject(error); + }); +}; + +export const createImage = async ( + prompt: string, + model: string = 'gemini-3-pro-image-preview', + apiKey?: string, + aspectRatio?: string, + resolution?: string, + enableSearchGrounding?: boolean +): Promise<ImageResult | null> => { + const ai = await createGoogleGenAIClient(apiKey); + if (!ai) { + return null; + } + + const genModel = ai.getGenerativeModel({ + model, + // @ts-ignore - tools is not in the version of the SDK used, but are supported by the API + tools: enableSearchGrounding ? [{ 'google_search': {} }] : undefined, + }); + + const generationConfig: GenerationConfig = {}; + if (model === 'gemini-3-pro-image-preview' && (aspectRatio || resolution)) { + // @ts-ignore - imageConfig and imageSize are not in the version of the SDK used, but are supported by the API + generationConfig.imageConfig = {}; + if (aspectRatio) { + // @ts-ignore + generationConfig.imageConfig.aspectRatio = aspectRatio; + } + if (resolution) { + // @ts-ignore + generationConfig.imageConfig.imageSize = resolution; + } + } + + try { + let result; + if (Object.keys(generationConfig).length > 0) { + // @ts-ignore + result = await genModel.generateContent(prompt, generationConfig); + } else { + result = await genModel.generateContent(prompt); + } + + const response = result.response; + logger.debug('Google AI API response structure:', { + hasResponse: !!response, + hasCandidates: !!response?.candidates, + candidatesLength: response?.candidates?.length, + }); + + if (!response || !response.candidates || response.candidates.length === 0) { + logger.error('Invalid API response structure - no candidates found'); + throw new Error('No candidates returned from Google AI API. The content may have been blocked due to safety filters or other restrictions.'); + } + + const candidate = response.candidates[0]; + + // Check for safety filter rejections first + if (candidate.finishReason && candidate.finishReason !== 'STOP') { + const finishReasonMessages: { [key: string]: string } = { + 'SAFETY': 'Content blocked by safety filters. The prompt contains content that violates Google AI safety policies.', + 'RECITATION': 'Content blocked due to recitation concerns. The generated content may be too similar to existing copyrighted material.', + 'OTHER': 'Content generation stopped for other safety or policy reasons.' + }; + + const message = finishReasonMessages[candidate.finishReason] || + `Content generation stopped. Reason: ${candidate.finishReason}`; + + logger.error('Google AI blocked content due to safety filters:', { + finishReason: candidate.finishReason, + rejectionMessage: message, + }); + throw new Error(`Request blocked by Google AI: ${message}`); + } + + if (!candidate.content || !candidate.content.parts) { + logger.error('Invalid candidate structure - no content parts found'); + throw new Error('Invalid response structure from Google AI API - no content parts found.'); + } + + const parts = candidate.content.parts; + + let imageData: ArrayBuffer | null = null; + let aiText: string | null = null; + + // Extract both image data and text from all parts + for (const part of parts) { + if ('inlineData' in part && part.inlineData) { + // Convert base64 to ArrayBuffer + const binaryString = atob(part.inlineData.data); + const bytes = new Uint8Array(binaryString.length); + for (let i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + imageData = bytes.buffer; + } else if ('text' in part && part.text) { + // Collect text descriptions + if (!aiText) { + aiText = part.text.trim(); + } else { + aiText += ' ' + part.text.trim(); + } + } + } + + if (imageData) { + logger.info('Successfully found image data in response', { + hasText: !!aiText, + textPreview: aiText?.substring(0, 100) + }); + return { imageData, text: aiText || undefined }; + } + + // Only if no image data found, check for text responses to provide helpful error + if (aiText) { + logger.info('Google AI returned text response instead of image:', { + textResponse: aiText, + finishReason: candidate.finishReason + }); + throw new Error(`Google AI returned text instead of image: ${aiText}`); + } + + logger.warn('No image data found in API response parts'); + throw new Error('No image data found in API response. The model may not have generated an image.'); + + } catch (error: any) { + logger.error('Google AI API error in createImage:', { + error: error.message, + prompt: prompt.substring(0, 100) + '...' + }); + throw error; + } +}; + +export const editImage = async ( + prompt: string, + imageFiles: File[], + model: string = 'gemini-3-pro-image-preview', + apiKey?: string, + aspectRatio?: string, + resolution?: string, + enableSearchGrounding?: boolean +): Promise<ImageResult | null> => { + const ai = await createGoogleGenAIClient(apiKey); + if (!ai) { + return null; + } + + const genModel = ai.getGenerativeModel({ + model, + // @ts-ignore + tools: enableSearchGrounding ? [{ 'google_search': {} }] : undefined, + }); + + try { + const imageParts: Part[] = await Promise.all(imageFiles.map(async (file) => { + const base64Data = await fileToBase64(file); + const mimeType = getMimeType(file.name); + return { + inlineData: { + mimeType, + data: base64Data, + }, + }; + })); + + const textPart: Part = { text: prompt }; + const promptParts = [...imageParts, textPart]; + + const generationConfig: GenerationConfig = {}; + if (model === 'gemini-3-pro-image-preview' && (aspectRatio || resolution)) { + // @ts-ignore + generationConfig.imageConfig = {}; + if (aspectRatio) { + // @ts-ignore + generationConfig.imageConfig.aspectRatio = aspectRatio; + } + if (resolution) { + // @ts-ignore + generationConfig.imageConfig.imageSize = resolution; + } + } + + let result; + if (Object.keys(generationConfig).length > 0) { + // @ts-ignore + result = await genModel.generateContent(promptParts, generationConfig); + } else { + result = await genModel.generateContent(promptParts); + } + + const response = result.response; + logger.debug('Google AI API response structure (editImage):', { + hasResponse: !!response, + hasCandidates: !!response?.candidates, + candidatesLength: response?.candidates?.length, + }); + + if (!response || !response.candidates || response.candidates.length === 0) { + logger.error('Invalid API response structure - no candidates found (editImage)'); + throw new Error('No candidates returned from Google AI API. The content may have been blocked due to safety filters or other restrictions.'); + } + + const candidate = response.candidates[0]; + + // Check for safety filter rejections first + if (candidate.finishReason && candidate.finishReason !== 'STOP') { + const finishReasonMessages: { [key: string]: string } = { + 'SAFETY': 'Content blocked by safety filters. The prompt contains content that violates Google AI safety policies.', + 'RECITATION': 'Content blocked due to recitation concerns. The generated content may be too similar to existing copyrighted material.', + 'OTHER': 'Content generation stopped for other safety or policy reasons.' + }; + + const message = finishReasonMessages[candidate.finishReason] || + `Content generation stopped. Reason: ${candidate.finishReason}`; + + logger.error('Google AI blocked image edit due to safety filters:', { + finishReason: candidate.finishReason, + rejectionMessage: message, + }); + throw new Error(`Request blocked by Google AI: ${message}`); + } + + if (!candidate.content || !candidate.content.parts) { + logger.error('Invalid candidate structure - no content parts found (editImage)'); + throw new Error('Invalid response structure from Google AI API - no content parts found.'); + } + + const parts = candidate.content.parts; + + let imageData: ArrayBuffer | null = null; + let aiText: string | null = null; + + // Extract both image data and text from all parts + for (const part of parts) { + if ('inlineData' in part && part.inlineData) { + // Convert base64 to ArrayBuffer + const binaryString = atob(part.inlineData.data); + const bytes = new Uint8Array(binaryString.length); + for (let i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + imageData = bytes.buffer; + } else if ('text' in part && part.text) { + // Collect text descriptions + if (!aiText) { + aiText = part.text.trim(); + } else { + aiText += ' ' + part.text.trim(); + } + } + } + + if (imageData) { + logger.info('Successfully found image data in editImage response', { + hasText: !!aiText, + textPreview: aiText?.substring(0, 100) + }); + return { imageData, text: aiText || undefined }; + } + + // Only if no image data found, check for text responses to provide helpful error + if (aiText) { + logger.info('Google AI returned text response instead of image (editImage):', { + textResponse: aiText, + finishReason: candidate.finishReason + }); + throw new Error(`Google AI returned text instead of image: ${aiText}`); + } + + logger.warn('No image data found in API response parts (editImage)'); + throw new Error('No image data found in API response. The model may not have generated an image.'); + + } catch (error: any) { + logger.error('Google AI API error in editImage:', { + error: error.message, + prompt: prompt.substring(0, 100) + '...', + imageCount: imageFiles.length, + }); + throw error; + } +}; + +export const imageApi = { + // Generate new image from text prompt + generateImage: async (request: ImageGenerationRequest): Promise<ImageGenerationResponse> => { + console.log('🎨 Generate image:', request); + + try { + const imageBuffer = await createImage(request.prompt, request.model); + if (!imageBuffer) { + return { + success: false, + error: 'Failed to generate image - no Google API key found' + }; + } + + // Convert ArrayBuffer to blob URL for display + const uint8Array = new Uint8Array(imageBuffer.imageData); + const blob = new Blob([uint8Array], { type: 'image/png' }); + const imageUrl = URL.createObjectURL(blob); + + return { + success: true, + imagePath: `generated_${Date.now()}.png`, + imageUrl, + text: imageBuffer.text + }; + } catch (error: any) { + logger.error('Image generation failed:', error); + return { + success: false, + error: error.message || 'Failed to generate image' + }; + } + }, + + // Edit existing image with prompt + editImage: async (request: ImageEditRequest): Promise<ImageGenerationResponse> => { + console.log('✏️ Edit image:', request); + + try { + // For now, we'll need to get the image file from the path + // This would need to be adapted based on how images are stored + console.warn('Image editing requires File objects - this needs to be called with actual File objects'); + + return { + success: false, + error: 'Image editing requires File objects - please use the editImage function directly' + }; + } catch (error: any) { + logger.error('Image editing failed:', error); + return { + success: false, + error: error.message || 'Failed to edit image' + }; + } + }, + + // Upload image file + uploadImage: async (file: File): Promise<{ success: boolean; path?: string; error?: string }> => { + console.log('📤 Upload image:', file.name); + + return { + success: true, + path: `uploaded_${Date.now()}_${file.name}` + }; + }, + + // Get image from URL + downloadImage: async (url: string): Promise<{ success: boolean; path?: string; error?: string }> => { + console.log('📥 Download image from URL:', url); + + return { + success: true, + path: `downloaded_${Date.now()}.png` + }; + } +}; \ No newline at end of file diff --git a/packages/ui/src/integrations/supabase/auth.ts b/packages/ui/src/integrations/supabase/auth.ts new file mode 100644 index 00000000..5c80a98a --- /dev/null +++ b/packages/ui/src/integrations/supabase/auth.ts @@ -0,0 +1,15 @@ +import { supabase } from './client'; + +/** + * Retrieves the currently authenticated Supabase user. + * @returns The user object or null if not authenticated. + * @throws Throws an error if the user session cannot be retrieved. + */ +export const getSupabaseAuthUser = async () => { + const { data, error } = await supabase.auth.getUser(); + if (error) { + console.error('Error getting Supabase auth user:', error); + throw new Error('Could not retrieve user session.'); + } + return data.user; +}; diff --git a/packages/ui/src/integrations/supabase/client.ts b/packages/ui/src/integrations/supabase/client.ts new file mode 100644 index 00000000..1da5bd6e --- /dev/null +++ b/packages/ui/src/integrations/supabase/client.ts @@ -0,0 +1,17 @@ +// This file is automatically generated. Do not edit it directly. +import { createClient } from '@supabase/supabase-js'; +import type { Database } from './types'; + +const SUPABASE_URL = "https://ytoadlpbdguriiccjnip.supabase.co"; +const SUPABASE_PUBLISHABLE_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inl0b2FkbHBiZGd1cmlpY2NqbmlwIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTg5NjU5OTAsImV4cCI6MjA3NDU0MTk5MH0.mXt594NQ2QsJQ_F-HqsSlBsLQ5EUB4iFxXtPE7zyaX8"; + +// Import the supabase client like this: +// import { supabase } from "@/integrations/supabase/client"; + +export const supabase = createClient<Database>(SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY, { + auth: { + storage: localStorage, + persistSession: true, + autoRefreshToken: true, + } +}); \ No newline at end of file diff --git a/packages/ui/src/integrations/supabase/types.ts b/packages/ui/src/integrations/supabase/types.ts new file mode 100644 index 00000000..99621c68 --- /dev/null +++ b/packages/ui/src/integrations/supabase/types.ts @@ -0,0 +1,1107 @@ +export type Json = + | string + | number + | boolean + | null + | { [key: string]: Json | undefined } + | Json[] + +export type Database = { + // Allows to automatically instantiate createClient with right options + // instead of createClient<Database, { PostgrestVersion: 'XX' }>(URL, KEY) + __InternalSupabase: { + PostgrestVersion: "13.0.5" + } + graphql_public: { + Tables: { + [_ in never]: never + } + Views: { + [_ in never]: never + } + Functions: { + graphql: { + Args: { + extensions?: Json + operationName?: string + query?: string + variables?: Json + } + Returns: Json + } + } + Enums: { + [_ in never]: never + } + CompositeTypes: { + [_ in never]: never + } + } + public: { + Tables: { + collection_pictures: { + Row: { + added_at: string + collection_id: string + id: string + picture_id: string + } + Insert: { + added_at?: string + collection_id: string + id?: string + picture_id: string + } + Update: { + added_at?: string + collection_id?: string + id?: string + picture_id?: string + } + Relationships: [ + { + foreignKeyName: "collection_pictures_collection_id_fkey" + columns: ["collection_id"] + isOneToOne: false + referencedRelation: "collections" + referencedColumns: ["id"] + }, + { + foreignKeyName: "collection_pictures_picture_id_fkey" + columns: ["picture_id"] + isOneToOne: false + referencedRelation: "pictures" + referencedColumns: ["id"] + }, + ] + } + collection_posts: { + Row: { + collection_id: string + created_at: string + id: string + post_id: string + } + Insert: { + collection_id: string + created_at?: string + id?: string + post_id: string + } + Update: { + collection_id?: string + created_at?: string + id?: string + post_id?: string + } + Relationships: [ + { + foreignKeyName: "collection_posts_collection_id_fkey" + columns: ["collection_id"] + isOneToOne: false + referencedRelation: "collections" + referencedColumns: ["id"] + }, + { + foreignKeyName: "collection_posts_post_id_fkey" + columns: ["post_id"] + isOneToOne: false + referencedRelation: "posts" + referencedColumns: ["id"] + }, + ] + } + collections: { + Row: { + content: Json | null + created_at: string + description: string | null + id: string + is_public: boolean + layout: Json | null + name: string + slug: string + updated_at: string + user_id: string + } + Insert: { + content?: Json | null + created_at?: string + description?: string | null + id?: string + is_public?: boolean + layout?: Json | null + name: string + slug: string + updated_at?: string + user_id: string + } + Update: { + content?: Json | null + created_at?: string + description?: string | null + id?: string + is_public?: boolean + layout?: Json | null + name?: string + slug?: string + updated_at?: string + user_id?: string + } + Relationships: [] + } + comment_likes: { + Row: { + comment_id: string + created_at: string + id: string + user_id: string + } + Insert: { + comment_id: string + created_at?: string + id?: string + user_id: string + } + Update: { + comment_id?: string + created_at?: string + id?: string + user_id?: string + } + Relationships: [] + } + comments: { + Row: { + content: string + created_at: string + id: string + likes_count: number | null + parent_comment_id: string | null + picture_id: string + updated_at: string + user_id: string + } + Insert: { + content: string + created_at?: string + id?: string + likes_count?: number | null + parent_comment_id?: string | null + picture_id: string + updated_at?: string + user_id: string + } + Update: { + content?: string + created_at?: string + id?: string + likes_count?: number | null + parent_comment_id?: string | null + picture_id?: string + updated_at?: string + user_id?: string + } + Relationships: [ + { + foreignKeyName: "comments_parent_fk" + columns: ["parent_comment_id"] + isOneToOne: false + referencedRelation: "comments" + referencedColumns: ["id"] + }, + ] + } + context_definitions: { + Row: { + created_at: string | null + default_filters: Json + default_templates: Json + description: string | null + display_name: string + icon: string | null + id: string + is_active: boolean | null + name: string + updated_at: string | null + } + Insert: { + created_at?: string | null + default_filters?: Json + default_templates?: Json + description?: string | null + display_name: string + icon?: string | null + id?: string + is_active?: boolean | null + name: string + updated_at?: string | null + } + Update: { + created_at?: string | null + default_filters?: Json + default_templates?: Json + description?: string | null + display_name?: string + icon?: string | null + id?: string + is_active?: boolean | null + name?: string + updated_at?: string | null + } + Relationships: [] + } + filter_usage_logs: { + Row: { + context: string + created_at: string | null + error_message: string | null + filters_applied: string[] | null + id: string + input_length: number + model: string + output_length: number + processing_time_ms: number + provider: string + success: boolean + template_id: string | null + user_id: string | null + } + Insert: { + context: string + created_at?: string | null + error_message?: string | null + filters_applied?: string[] | null + id?: string + input_length: number + model: string + output_length: number + processing_time_ms: number + provider: string + success: boolean + template_id?: string | null + user_id?: string | null + } + Update: { + context?: string + created_at?: string | null + error_message?: string | null + filters_applied?: string[] | null + id?: string + input_length?: number + model?: string + output_length?: number + processing_time_ms?: number + provider?: string + success?: boolean + template_id?: string | null + user_id?: string | null + } + Relationships: [ + { + foreignKeyName: "filter_usage_logs_template_id_fkey" + columns: ["template_id"] + isOneToOne: false + referencedRelation: "user_templates" + referencedColumns: ["id"] + }, + ] + } + likes: { + Row: { + created_at: string + id: string + picture_id: string + user_id: string + } + Insert: { + created_at?: string + id?: string + picture_id: string + user_id: string + } + Update: { + created_at?: string + id?: string + picture_id?: string + user_id?: string + } + Relationships: [] + } + organizations: { + Row: { + created_at: string + id: string + name: string + slug: string + updated_at: string + } + Insert: { + created_at?: string + id?: string + name: string + slug: string + updated_at?: string + } + Update: { + created_at?: string + id?: string + name?: string + slug?: string + updated_at?: string + } + Relationships: [] + } + page_collaborators: { + Row: { + created_at: string + id: string + page_id: string + role: Database["public"]["Enums"]["collaborator_role"] + user_id: string + } + Insert: { + created_at?: string + id?: string + page_id: string + role?: Database["public"]["Enums"]["collaborator_role"] + user_id: string + } + Update: { + created_at?: string + id?: string + page_id?: string + role?: Database["public"]["Enums"]["collaborator_role"] + user_id?: string + } + Relationships: [ + { + foreignKeyName: "page_collaborators_page_id_fkey" + columns: ["page_id"] + isOneToOne: false + referencedRelation: "pages" + referencedColumns: ["id"] + }, + ] + } + pages: { + Row: { + content: Json | null + created_at: string + id: string + is_public: boolean + owner: string + parent: string | null + slug: string + tags: string[] | null + title: string + type: string | null + updated_at: string + visible: boolean + } + Insert: { + content?: Json | null + created_at?: string + id?: string + is_public?: boolean + owner: string + parent?: string | null + slug: string + tags?: string[] | null + title: string + type?: string | null + updated_at?: string + visible?: boolean + } + Update: { + content?: Json | null + created_at?: string + id?: string + is_public?: boolean + owner?: string + parent?: string | null + slug?: string + tags?: string[] | null + title?: string + type?: string | null + updated_at?: string + visible?: boolean + } + Relationships: [ + { + foreignKeyName: "pages_parent_fkey" + columns: ["parent"] + isOneToOne: false + referencedRelation: "pages" + referencedColumns: ["id"] + }, + ] + } + pictures: { + Row: { + created_at: string + description: string | null + flags: string[] | null + id: string + image_url: string + is_selected: boolean + likes_count: number | null + meta: Json | null + organization_id: string | null + parent_id: string | null + position: number | null + post_id: string | null + tags: string[] | null + thumbnail_url: string | null + title: string + type: string | null + updated_at: string + user_id: string + visible: boolean + } + Insert: { + created_at?: string + description?: string | null + flags?: string[] | null + id?: string + image_url: string + is_selected?: boolean + likes_count?: number | null + meta?: Json | null + organization_id?: string | null + parent_id?: string | null + position?: number | null + post_id?: string | null + tags?: string[] | null + thumbnail_url?: string | null + title: string + type?: string | null + updated_at?: string + user_id: string + visible?: boolean + } + Update: { + created_at?: string + description?: string | null + flags?: string[] | null + id?: string + image_url?: string + is_selected?: boolean + likes_count?: number | null + meta?: Json | null + organization_id?: string | null + parent_id?: string | null + position?: number | null + post_id?: string | null + tags?: string[] | null + thumbnail_url?: string | null + title?: string + type?: string | null + updated_at?: string + user_id?: string + visible?: boolean + } + Relationships: [ + { + foreignKeyName: "pictures_organization_id_fkey" + columns: ["organization_id"] + isOneToOne: false + referencedRelation: "organizations" + referencedColumns: ["id"] + }, + { + foreignKeyName: "pictures_parent_id_fkey" + columns: ["parent_id"] + isOneToOne: false + referencedRelation: "pictures" + referencedColumns: ["id"] + }, + { + foreignKeyName: "pictures_post_id_fkey" + columns: ["post_id"] + isOneToOne: false + referencedRelation: "posts" + referencedColumns: ["id"] + }, + ] + } + posts: { + Row: { + created_at: string | null + description: string | null + id: string + meta: Json | null + settings: Json | null + title: string + updated_at: string | null + user_id: string + } + Insert: { + created_at?: string | null + description?: string | null + id?: string + meta?: Json | null + settings?: Json | null + title: string + updated_at?: string | null + user_id: string + } + Update: { + created_at?: string | null + description?: string | null + id?: string + meta?: Json | null + settings?: Json | null + title?: string + updated_at?: string | null + user_id?: string + } + Relationships: [] + } + profiles: { + Row: { + aimlapi_api_key: string | null + avatar_url: string | null + bio: string | null + bria_api_key: string | null + created_at: string + display_name: string | null + google_api_key: string | null + huggingface_api_key: string | null + id: string + openai_api_key: string | null + pages: Json | null + replicate_api_key: string | null + settings: Json | null + updated_at: string + user_id: string + username: string | null + } + Insert: { + aimlapi_api_key?: string | null + avatar_url?: string | null + bio?: string | null + bria_api_key?: string | null + created_at?: string + display_name?: string | null + google_api_key?: string | null + huggingface_api_key?: string | null + id?: string + openai_api_key?: string | null + pages?: Json | null + replicate_api_key?: string | null + settings?: Json | null + updated_at?: string + user_id: string + username?: string | null + } + Update: { + aimlapi_api_key?: string | null + avatar_url?: string | null + bio?: string | null + bria_api_key?: string | null + created_at?: string + display_name?: string | null + google_api_key?: string | null + huggingface_api_key?: string | null + id?: string + openai_api_key?: string | null + pages?: Json | null + replicate_api_key?: string | null + settings?: Json | null + updated_at?: string + user_id?: string + username?: string | null + } + Relationships: [] + } + provider_configs: { + Row: { + base_url: string + created_at: string | null + display_name: string + id: string + is_active: boolean | null + models: Json + name: string + rate_limits: Json | null + settings: Json | null + updated_at: string | null + user_id: string | null + } + Insert: { + base_url: string + created_at?: string | null + display_name: string + id?: string + is_active?: boolean | null + models?: Json + name: string + rate_limits?: Json | null + settings?: Json | null + updated_at?: string | null + user_id?: string | null + } + Update: { + base_url?: string + created_at?: string | null + display_name?: string + id?: string + is_active?: boolean | null + models?: Json + name?: string + rate_limits?: Json | null + settings?: Json | null + updated_at?: string | null + user_id?: string | null + } + Relationships: [] + } + role_permissions: { + Row: { + created_at: string + id: string + permission: Database["public"]["Enums"]["app_permission"] + role: Database["public"]["Enums"]["app_role"] + } + Insert: { + created_at?: string + id?: string + permission: Database["public"]["Enums"]["app_permission"] + role: Database["public"]["Enums"]["app_role"] + } + Update: { + created_at?: string + id?: string + permission?: Database["public"]["Enums"]["app_permission"] + role?: Database["public"]["Enums"]["app_role"] + } + Relationships: [] + } + user_filter_configs: { + Row: { + context: string + created_at: string | null + custom_filters: Json | null + default_templates: string[] | null + id: string + is_default: boolean | null + model: string + provider: string + updated_at: string | null + user_id: string | null + variables: Json | null + } + Insert: { + context: string + created_at?: string | null + custom_filters?: Json | null + default_templates?: string[] | null + id?: string + is_default?: boolean | null + model?: string + provider?: string + updated_at?: string | null + user_id?: string | null + variables?: Json | null + } + Update: { + context?: string + created_at?: string | null + custom_filters?: Json | null + default_templates?: string[] | null + id?: string + is_default?: boolean | null + model?: string + provider?: string + updated_at?: string | null + user_id?: string | null + variables?: Json | null + } + Relationships: [] + } + user_organizations: { + Row: { + created_at: string + id: string + organization_id: string + role: string + updated_at: string + user_id: string + } + Insert: { + created_at?: string + id?: string + organization_id: string + role?: string + updated_at?: string + user_id: string + } + Update: { + created_at?: string + id?: string + organization_id?: string + role?: string + updated_at?: string + user_id?: string + } + Relationships: [ + { + foreignKeyName: "user_organizations_organization_id_fkey" + columns: ["organization_id"] + isOneToOne: false + referencedRelation: "organizations" + referencedColumns: ["id"] + }, + ] + } + user_roles: { + Row: { + created_at: string + id: string + organization_id: string | null + role: Database["public"]["Enums"]["app_role"] + updated_at: string + user_id: string + } + Insert: { + created_at?: string + id?: string + organization_id?: string | null + role: Database["public"]["Enums"]["app_role"] + updated_at?: string + user_id: string + } + Update: { + created_at?: string + id?: string + organization_id?: string | null + role?: Database["public"]["Enums"]["app_role"] + updated_at?: string + user_id?: string + } + Relationships: [ + { + foreignKeyName: "user_roles_user_id_fkey" + columns: ["user_id"] + isOneToOne: false + referencedRelation: "profiles" + referencedColumns: ["user_id"] + }, + ] + } + user_secrets: { + Row: { + aimlapi_api_key: string | null + bria_api_key: string | null + created_at: string + google_api_key: string | null + huggingface_api_key: string | null + is_admin: boolean | null + openai_api_key: string | null + replicate_api_key: string | null + settings: Json | null + updated_at: string + user_id: string + } + Insert: { + aimlapi_api_key?: string | null + bria_api_key?: string | null + created_at?: string + google_api_key?: string | null + huggingface_api_key?: string | null + is_admin?: boolean | null + openai_api_key?: string | null + replicate_api_key?: string | null + settings?: Json | null + updated_at?: string + user_id: string + } + Update: { + aimlapi_api_key?: string | null + bria_api_key?: string | null + created_at?: string + google_api_key?: string | null + huggingface_api_key?: string | null + is_admin?: boolean | null + openai_api_key?: string | null + replicate_api_key?: string | null + settings?: Json | null + updated_at?: string + user_id?: string + } + Relationships: [] + } + user_templates: { + Row: { + context: string + created_at: string | null + description: string | null + filters: string[] | null + format: string | null + id: string + is_public: boolean | null + model: string + name: string + prompt: string + provider: string + updated_at: string | null + usage_count: number | null + user_id: string | null + } + Insert: { + context: string + created_at?: string | null + description?: string | null + filters?: string[] | null + format?: string | null + id?: string + is_public?: boolean | null + model?: string + name: string + prompt: string + provider?: string + updated_at?: string | null + usage_count?: number | null + user_id?: string | null + } + Update: { + context?: string + created_at?: string | null + description?: string | null + filters?: string[] | null + format?: string | null + id?: string + is_public?: boolean | null + model?: string + name?: string + prompt?: string + provider?: string + updated_at?: string | null + usage_count?: number | null + user_id?: string | null + } + Relationships: [] + } + wizard_sessions: { + Row: { + created_at: string + generated_image_url: string | null + id: string + input_images: string[] | null + prompt: string + status: string + updated_at: string + user_id: string + } + Insert: { + created_at?: string + generated_image_url?: string | null + id?: string + input_images?: string[] | null + prompt?: string + status?: string + updated_at?: string + user_id: string + } + Update: { + created_at?: string + generated_image_url?: string | null + id?: string + input_images?: string[] | null + prompt?: string + status?: string + updated_at?: string + user_id?: string + } + Relationships: [] + } + } + Views: { + [_ in never]: never + } + Functions: { + authorize: { + Args: { + _role: Database["public"]["Enums"]["app_role"] + _user_id: string + } + Returns: boolean + } + has_permission: { + Args: { + _permission: Database["public"]["Enums"]["app_permission"] + _user_id: string + } + Returns: boolean + } + is_page_collaborator: { Args: { _page_id: string }; Returns: boolean } + is_page_owner: { Args: { _page_id: string }; Returns: boolean } + } + Enums: { + app_permission: + | "pictures.read" + | "pictures.create" + | "pictures.update" + | "pictures.delete" + | "collections.read" + | "collections.create" + | "collections.update" + | "collections.delete" + | "comments.read" + | "comments.create" + | "comments.update" + | "comments.delete" + | "organization.manage" + app_role: "owner" | "admin" | "member" | "viewer" + collaborator_role: "viewer" | "editor" | "owner" + } + CompositeTypes: { + [_ in never]: never + } + } +} + +type DatabaseWithoutInternals = Omit<Database, "__InternalSupabase"> + +type DefaultSchema = DatabaseWithoutInternals[Extract<keyof Database, "public">] + +export type Tables< + DefaultSchemaTableNameOrOptions extends + | keyof (DefaultSchema["Tables"] & DefaultSchema["Views"]) + | { schema: keyof DatabaseWithoutInternals }, + TableName extends DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals + } + ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"]) + : never = never, +> = DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"])[TableName] extends { + Row: infer R + } + ? R + : never + : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema["Tables"] & + DefaultSchema["Views"]) + ? (DefaultSchema["Tables"] & + DefaultSchema["Views"])[DefaultSchemaTableNameOrOptions] extends { + Row: infer R + } + ? R + : never + : never + +export type TablesInsert< + DefaultSchemaTableNameOrOptions extends + | keyof DefaultSchema["Tables"] + | { schema: keyof DatabaseWithoutInternals }, + TableName extends DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] + : never = never, +> = DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { + Insert: infer I + } + ? I + : never + : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] + ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { + Insert: infer I + } + ? I + : never + : never + +export type TablesUpdate< + DefaultSchemaTableNameOrOptions extends + | keyof DefaultSchema["Tables"] + | { schema: keyof DatabaseWithoutInternals }, + TableName extends DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] + : never = never, +> = DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { + Update: infer U + } + ? U + : never + : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] + ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { + Update: infer U + } + ? U + : never + : never + +export type Enums< + DefaultSchemaEnumNameOrOptions extends + | keyof DefaultSchema["Enums"] + | { schema: keyof DatabaseWithoutInternals }, + EnumName extends DefaultSchemaEnumNameOrOptions extends { + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"] + : never = never, +> = DefaultSchemaEnumNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][EnumName] + : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema["Enums"] + ? DefaultSchema["Enums"][DefaultSchemaEnumNameOrOptions] + : never + +export type CompositeTypes< + PublicCompositeTypeNameOrOptions extends + | keyof DefaultSchema["CompositeTypes"] + | { schema: keyof DatabaseWithoutInternals }, + CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"] + : never = never, +> = PublicCompositeTypeNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName] + : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"] + ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] + : never + +export const Constants = { + graphql_public: { + Enums: {}, + }, + public: { + Enums: { + app_permission: [ + "pictures.read", + "pictures.create", + "pictures.update", + "pictures.delete", + "collections.read", + "collections.create", + "collections.update", + "collections.delete", + "comments.read", + "comments.create", + "comments.update", + "comments.delete", + "organization.manage", + ], + app_role: ["owner", "admin", "member", "viewer"], + collaborator_role: ["viewer", "editor", "owner"], + }, + }, +} as const diff --git a/packages/ui/src/integrations/supabase/types.ts.bak b/packages/ui/src/integrations/supabase/types.ts.bak new file mode 100644 index 00000000..cb202f13 --- /dev/null +++ b/packages/ui/src/integrations/supabase/types.ts.bak @@ -0,0 +1,973 @@ +export type Json = + | string + | number + | boolean + | null + | { [key: string]: Json | undefined } + | Json[] + +export type Database = { + // Allows to automatically instantiate createClient with right options + // instead of createClient<Database, { PostgrestVersion: 'XX' }>(URL, KEY) + __InternalSupabase: { + PostgrestVersion: "13.0.5" + } + public: { + Tables: { + collection_pictures: { + Row: { + added_at: string + collection_id: string + id: string + picture_id: string + } + Insert: { + added_at?: string + collection_id: string + id?: string + picture_id: string + } + Update: { + added_at?: string + collection_id?: string + id?: string + picture_id?: string + } + Relationships: [ + { + foreignKeyName: "collection_pictures_collection_id_fkey" + columns: ["collection_id"] + isOneToOne: false + referencedRelation: "collections" + referencedColumns: ["id"] + }, + { + foreignKeyName: "collection_pictures_picture_id_fkey" + columns: ["picture_id"] + isOneToOne: false + referencedRelation: "pictures" + referencedColumns: ["id"] + }, + ] + } + collections: { + Row: { + content: Json | null + created_at: string + description: string | null + id: string + is_public: boolean + layout: Json | null + name: string + slug: string + updated_at: string + user_id: string + } + Insert: { + content?: Json | null + created_at?: string + description?: string | null + id?: string + is_public?: boolean + layout?: Json | null + name: string + slug: string + updated_at?: string + user_id: string + } + Update: { + content?: Json | null + created_at?: string + description?: string | null + id?: string + is_public?: boolean + layout?: Json | null + name?: string + slug?: string + updated_at?: string + user_id?: string + } + Relationships: [] + } + comment_likes: { + Row: { + comment_id: string + created_at: string + id: string + user_id: string + } + Insert: { + comment_id: string + created_at?: string + id?: string + user_id: string + } + Update: { + comment_id?: string + created_at?: string + id?: string + user_id?: string + } + Relationships: [] + } + comments: { + Row: { + content: string + created_at: string + id: string + likes_count: number | null + parent_comment_id: string | null + picture_id: string + updated_at: string + user_id: string + } + Insert: { + content: string + created_at?: string + id?: string + likes_count?: number | null + parent_comment_id?: string | null + picture_id: string + updated_at?: string + user_id: string + } + Update: { + content?: string + created_at?: string + id?: string + likes_count?: number | null + parent_comment_id?: string | null + picture_id?: string + updated_at?: string + user_id?: string + } + Relationships: [ + { + foreignKeyName: "comments_parent_fk" + columns: ["parent_comment_id"] + isOneToOne: false + referencedRelation: "comments" + referencedColumns: ["id"] + }, + ] + } + context_definitions: { + Row: { + created_at: string | null + default_filters: Json + default_templates: Json + description: string | null + display_name: string + icon: string | null + id: string + is_active: boolean | null + name: string + updated_at: string | null + } + Insert: { + created_at?: string | null + default_filters?: Json + default_templates?: Json + description?: string | null + display_name: string + icon?: string | null + id?: string + is_active?: boolean | null + name: string + updated_at?: string | null + } + Update: { + created_at?: string | null + default_filters?: Json + default_templates?: Json + description?: string | null + display_name?: string + icon?: string | null + id?: string + is_active?: boolean | null + name?: string + updated_at?: string | null + } + Relationships: [] + } + filter_usage_logs: { + Row: { + context: string + created_at: string | null + error_message: string | null + filters_applied: string[] | null + id: string + input_length: number + model: string + output_length: number + processing_time_ms: number + provider: string + success: boolean + template_id: string | null + user_id: string | null + } + Insert: { + context: string + created_at?: string | null + error_message?: string | null + filters_applied?: string[] | null + id?: string + input_length: number + model: string + output_length: number + processing_time_ms: number + provider: string + success: boolean + template_id?: string | null + user_id?: string | null + } + Update: { + context?: string + created_at?: string | null + error_message?: string | null + filters_applied?: string[] | null + id?: string + input_length?: number + model?: string + output_length?: number + processing_time_ms?: number + provider?: string + success?: boolean + template_id?: string | null + user_id?: string | null + } + Relationships: [ + { + foreignKeyName: "filter_usage_logs_template_id_fkey" + columns: ["template_id"] + isOneToOne: false + referencedRelation: "user_templates" + referencedColumns: ["id"] + }, + ] + } + likes: { + Row: { + created_at: string + id: string + picture_id: string + user_id: string + } + Insert: { + created_at?: string + id?: string + picture_id: string + user_id: string + } + Update: { + created_at?: string + id?: string + picture_id?: string + user_id?: string + } + Relationships: [] + } + organizations: { + Row: { + created_at: string + id: string + name: string + slug: string + updated_at: string + } + Insert: { + created_at?: string + id?: string + name: string + slug: string + updated_at?: string + } + Update: { + created_at?: string + id?: string + name?: string + slug?: string + updated_at?: string + } + Relationships: [] + } + pages: { + Row: { + content: Json | null + created_at: string + id: string + is_public: boolean + owner: string + parent: string | null + slug: string + tags: string[] | null + title: string + type: string | null + updated_at: string + visible: boolean + } + Insert: { + content?: Json | null + created_at?: string + id?: string + is_public?: boolean + owner: string + parent?: string | null + slug: string + tags?: string[] | null + title: string + type?: string | null + updated_at?: string + visible?: boolean + } + Update: { + content?: Json | null + created_at?: string + id?: string + is_public?: boolean + owner?: string + parent?: string | null + slug?: string + tags?: string[] | null + title?: string + type?: string | null + updated_at?: string + visible?: boolean + } + Relationships: [ + { + foreignKeyName: "pages_parent_fkey" + columns: ["parent"] + isOneToOne: false + referencedRelation: "pages" + referencedColumns: ["id"] + }, + ] + } + pictures: { + Row: { + created_at: string + description: string | null + flags: string[] | null + id: string + image_url: string + is_selected: boolean + likes_count: number | null + meta: Json | null + organization_id: string | null + parent_id: string | null + tags: string[] | null + thumbnail_url: string | null + title: string + updated_at: string + user_id: string + visible: boolean + } + Insert: { + created_at?: string + description?: string | null + flags?: string[] | null + id?: string + image_url: string + is_selected?: boolean + likes_count?: number | null + meta?: Json | null + organization_id?: string | null + parent_id?: string | null + tags?: string[] | null + thumbnail_url?: string | null + title: string + updated_at?: string + user_id: string + visible?: boolean + } + Update: { + created_at?: string + description?: string | null + flags?: string[] | null + id?: string + image_url?: string + is_selected?: boolean + likes_count?: number | null + meta?: Json | null + organization_id?: string | null + parent_id?: string | null + tags?: string[] | null + thumbnail_url?: string | null + title?: string + updated_at?: string + user_id?: string + visible?: boolean + } + Relationships: [ + { + foreignKeyName: "pictures_organization_id_fkey" + columns: ["organization_id"] + isOneToOne: false + referencedRelation: "organizations" + referencedColumns: ["id"] + }, + { + foreignKeyName: "pictures_parent_id_fkey" + columns: ["parent_id"] + isOneToOne: false + referencedRelation: "pictures" + referencedColumns: ["id"] + }, + ] + } + profiles: { + Row: { + aimlapi_api_key: string | null + avatar_url: string | null + bio: string | null + bria_api_key: string | null + created_at: string + display_name: string | null + google_api_key: string | null + huggingface_api_key: string | null + id: string + openai_api_key: string | null + pages: Json | null + replicate_api_key: string | null + settings: Json | null + updated_at: string + user_id: string + username: string | null + } + Insert: { + aimlapi_api_key?: string | null + avatar_url?: string | null + bio?: string | null + bria_api_key?: string | null + created_at?: string + display_name?: string | null + google_api_key?: string | null + huggingface_api_key?: string | null + id?: string + openai_api_key?: string | null + pages?: Json | null + replicate_api_key?: string | null + settings?: Json | null + updated_at?: string + user_id: string + username?: string | null + } + Update: { + aimlapi_api_key?: string | null + avatar_url?: string | null + bio?: string | null + bria_api_key?: string | null + created_at?: string + display_name?: string | null + google_api_key?: string | null + huggingface_api_key?: string | null + id?: string + openai_api_key?: string | null + pages?: Json | null + replicate_api_key?: string | null + settings?: Json | null + updated_at?: string + user_id?: string + username?: string | null + } + Relationships: [] + } + provider_configs: { + Row: { + base_url: string + created_at: string | null + display_name: string + id: string + is_active: boolean | null + models: Json + name: string + rate_limits: Json | null + settings: Json | null + updated_at: string | null + user_id: string | null + } + Insert: { + base_url: string + created_at?: string | null + display_name: string + id?: string + is_active?: boolean | null + models?: Json + name: string + rate_limits?: Json | null + settings?: Json | null + updated_at?: string | null + user_id?: string | null + } + Update: { + base_url?: string + created_at?: string | null + display_name?: string + id?: string + is_active?: boolean | null + models?: Json + name?: string + rate_limits?: Json | null + settings?: Json | null + updated_at?: string | null + user_id?: string | null + } + Relationships: [] + } + role_permissions: { + Row: { + created_at: string + id: string + permission: Database["public"]["Enums"]["app_permission"] + role: Database["public"]["Enums"]["app_role"] + } + Insert: { + created_at?: string + id?: string + permission: Database["public"]["Enums"]["app_permission"] + role: Database["public"]["Enums"]["app_role"] + } + Update: { + created_at?: string + id?: string + permission?: Database["public"]["Enums"]["app_permission"] + role?: Database["public"]["Enums"]["app_role"] + } + Relationships: [] + } + user_filter_configs: { + Row: { + context: string + created_at: string | null + custom_filters: Json | null + default_templates: string[] | null + id: string + is_default: boolean | null + model: string + provider: string + updated_at: string | null + user_id: string | null + variables: Json | null + } + Insert: { + context: string + created_at?: string | null + custom_filters?: Json | null + default_templates?: string[] | null + id?: string + is_default?: boolean | null + model?: string + provider?: string + updated_at?: string | null + user_id?: string | null + variables?: Json | null + } + Update: { + context?: string + created_at?: string | null + custom_filters?: Json | null + default_templates?: string[] | null + id?: string + is_default?: boolean | null + model?: string + provider?: string + updated_at?: string | null + user_id?: string | null + variables?: Json | null + } + Relationships: [] + } + user_organizations: { + Row: { + created_at: string + id: string + organization_id: string + role: string + updated_at: string + user_id: string + } + Insert: { + created_at?: string + id?: string + organization_id: string + role?: string + updated_at?: string + user_id: string + } + Update: { + created_at?: string + id?: string + organization_id?: string + role?: string + updated_at?: string + user_id?: string + } + Relationships: [ + { + foreignKeyName: "user_organizations_organization_id_fkey" + columns: ["organization_id"] + isOneToOne: false + referencedRelation: "organizations" + referencedColumns: ["id"] + }, + ] + } + user_roles: { + Row: { + created_at: string + id: string + organization_id: string | null + role: Database["public"]["Enums"]["app_role"] + updated_at: string + user_id: string + } + Insert: { + created_at?: string + id?: string + organization_id?: string | null + role: Database["public"]["Enums"]["app_role"] + updated_at?: string + user_id: string + } + Update: { + created_at?: string + id?: string + organization_id?: string | null + role?: Database["public"]["Enums"]["app_role"] + updated_at?: string + user_id?: string + } + Relationships: [ + { + foreignKeyName: "user_roles_user_id_fkey" + columns: ["user_id"] + isOneToOne: false + referencedRelation: "profiles" + referencedColumns: ["user_id"] + }, + ] + } + user_templates: { + Row: { + context: string + created_at: string | null + description: string | null + filters: string[] | null + format: string | null + id: string + is_public: boolean | null + model: string + name: string + prompt: string + provider: string + updated_at: string | null + usage_count: number | null + user_id: string | null + } + Insert: { + context: string + created_at?: string | null + description?: string | null + filters?: string[] | null + format?: string | null + id?: string + is_public?: boolean | null + model?: string + name: string + prompt: string + provider?: string + updated_at?: string | null + usage_count?: number | null + user_id?: string | null + } + Update: { + context?: string + created_at?: string | null + description?: string | null + filters?: string[] | null + format?: string | null + id?: string + is_public?: boolean | null + model?: string + name?: string + prompt?: string + provider?: string + updated_at?: string | null + usage_count?: number | null + user_id?: string | null + } + Relationships: [] + } + videos: { + Row: { + created_at: string + description: string | null + flags: string[] | null + id: string + is_selected: boolean + likes_count: number | null + meta: Json | null + organization_id: string | null + parent_id: string | null + tags: string[] | null + thumbnail_url: string | null + title: string + updated_at: string + user_id: string + video_url: string + visible: boolean + } + Insert: { + created_at?: string + description?: string | null + flags?: string[] | null + id?: string + is_selected?: boolean + likes_count?: number | null + meta?: Json | null + organization_id?: string | null + parent_id?: string | null + tags?: string[] | null + thumbnail_url?: string | null + title: string + updated_at?: string + user_id: string + video_url: string + visible?: boolean + } + Update: { + created_at?: string + description?: string | null + flags?: string[] | null + id?: string + is_selected?: boolean + likes_count?: number | null + meta?: Json | null + organization_id?: string | null + parent_id?: string | null + tags?: string[] | null + thumbnail_url?: string | null + title?: string + updated_at?: string + user_id?: string + video_url?: string + visible?: boolean + } + Relationships: [] + } + wizard_sessions: { + Row: { + created_at: string + generated_image_url: string | null + id: string + input_images: string[] | null + prompt: string + status: string + updated_at: string + user_id: string + } + Insert: { + created_at?: string + generated_image_url?: string | null + id?: string + input_images?: string[] | null + prompt?: string + status?: string + updated_at?: string + user_id: string + } + Update: { + created_at?: string + generated_image_url?: string | null + id?: string + input_images?: string[] | null + prompt?: string + status?: string + updated_at?: string + user_id?: string + } + Relationships: [] + } + } + Views: { + [_ in never]: never + } + Functions: { + authorize: { + Args: { + _role: Database["public"]["Enums"]["app_role"] + _user_id: string + } + Returns: boolean + } + has_permission: { + Args: { + _permission: Database["public"]["Enums"]["app_permission"] + _user_id: string + } + Returns: boolean + } + } + Enums: { + app_permission: + | "pictures.read" + | "pictures.create" + | "pictures.update" + | "pictures.delete" + | "collections.read" + | "collections.create" + | "collections.update" + | "collections.delete" + | "comments.read" + | "comments.create" + | "comments.update" + | "comments.delete" + | "organization.manage" + app_role: "owner" | "admin" | "member" | "viewer" + } + CompositeTypes: { + [_ in never]: never + } + } +} + +type DatabaseWithoutInternals = Omit<Database, "__InternalSupabase"> + +type DefaultSchema = DatabaseWithoutInternals[Extract<keyof Database, "public">] + +export type Tables< + DefaultSchemaTableNameOrOptions extends + | keyof (DefaultSchema["Tables"] & DefaultSchema["Views"]) + | { schema: keyof DatabaseWithoutInternals }, + TableName extends DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals + } + ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"]) + : never = never, +> = DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"])[TableName] extends { + Row: infer R + } + ? R + : never + : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema["Tables"] & + DefaultSchema["Views"]) + ? (DefaultSchema["Tables"] & + DefaultSchema["Views"])[DefaultSchemaTableNameOrOptions] extends { + Row: infer R + } + ? R + : never + : never + +export type TablesInsert< + DefaultSchemaTableNameOrOptions extends + | keyof DefaultSchema["Tables"] + | { schema: keyof DatabaseWithoutInternals }, + TableName extends DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] + : never = never, +> = DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { + Insert: infer I + } + ? I + : never + : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] + ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { + Insert: infer I + } + ? I + : never + : never + +export type TablesUpdate< + DefaultSchemaTableNameOrOptions extends + | keyof DefaultSchema["Tables"] + | { schema: keyof DatabaseWithoutInternals }, + TableName extends DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] + : never = never, +> = DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { + Update: infer U + } + ? U + : never + : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] + ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { + Update: infer U + } + ? U + : never + : never + +export type Enums< + DefaultSchemaEnumNameOrOptions extends + | keyof DefaultSchema["Enums"] + | { schema: keyof DatabaseWithoutInternals }, + EnumName extends DefaultSchemaEnumNameOrOptions extends { + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"] + : never = never, +> = DefaultSchemaEnumNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][EnumName] + : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema["Enums"] + ? DefaultSchema["Enums"][DefaultSchemaEnumNameOrOptions] + : never + +export type CompositeTypes< + PublicCompositeTypeNameOrOptions extends + | keyof DefaultSchema["CompositeTypes"] + | { schema: keyof DatabaseWithoutInternals }, + CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"] + : never = never, +> = PublicCompositeTypeNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName] + : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"] + ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] + : never + +export const Constants = { + public: { + Enums: { + app_permission: [ + "pictures.read", + "pictures.create", + "pictures.update", + "pictures.delete", + "collections.read", + "collections.create", + "collections.update", + "collections.delete", + "comments.read", + "comments.create", + "comments.update", + "comments.delete", + "organization.manage", + ], + app_role: ["owner", "admin", "member", "viewer"], + }, + }, +} as const diff --git a/packages/ui/src/lib-export.ts b/packages/ui/src/lib-export.ts new file mode 100644 index 00000000..3a05aa16 --- /dev/null +++ b/packages/ui/src/lib-export.ts @@ -0,0 +1,6 @@ +export { default as ResponsiveImage } from './components/ResponsiveImage'; +export type { ResponsiveData } from './components/ResponsiveImage'; + +export { default as PhotoGrid } from './components/PhotoGrid'; +// Also export MediaGrid as alias if needed, but default is PhotoGrid +export { MediaGrid } from './components/PhotoGrid'; diff --git a/packages/ui/src/pages/AdminPage.tsx b/packages/ui/src/pages/AdminPage.tsx new file mode 100644 index 00000000..02f1baad --- /dev/null +++ b/packages/ui/src/pages/AdminPage.tsx @@ -0,0 +1,56 @@ +import { useState } from "react"; +import UserManager from "@/components/admin/UserManager"; +import { useAuth } from "@/hooks/useAuth"; +import { Navigate } from "react-router-dom"; +import { T } from "@/i18n"; +import { SidebarProvider } from "@/components/ui/sidebar"; +import { AdminSidebar, AdminActiveSection } from "@/components/admin/AdminSidebar"; + +const AdminPage = () => { + const { user, loading, roles } = useAuth(); + const [activeSection, setActiveSection] = useState<AdminActiveSection>('users'); + + if (loading) { + return <div className="min-h-screen bg-background flex items-center justify-center"> + <div className="text-muted-foreground"><T>Loading...</T></div> + </div>; + } + + if (!user) { + return <Navigate to="/auth" replace />; + } + + if (!roles.includes('admin')) { + return <Navigate to="/" replace />; + } + + return ( + <SidebarProvider> + <div className="min-h-screen flex w-full bg-background pt-14"> + <AdminSidebar activeSection={activeSection} onSectionChange={setActiveSection} /> + <main className="flex-1 p-8 overflow-auto"> + <div className="max-w-7xl mx-auto"> + {activeSection === 'users' && <UserManagerSection />} + {activeSection === 'dashboard' && <DashboardSection />} + </div> + </main> + </div> + </SidebarProvider> + ); +}; + +const UserManagerSection = () => ( + <div> + <h1 className="text-2xl font-bold mb-4">User Management</h1> + <UserManager /> + </div> +); + +const DashboardSection = () => ( + <div> + <h1 className="text-2xl font-bold mb-4">Dashboard</h1> + <p>Welcome to the admin dashboard. More features coming soon!</p> + </div> +); + +export default AdminPage; diff --git a/packages/ui/src/pages/Auth.tsx b/packages/ui/src/pages/Auth.tsx new file mode 100644 index 00000000..23021487 --- /dev/null +++ b/packages/ui/src/pages/Auth.tsx @@ -0,0 +1,210 @@ +import { useState, useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { Button } from '@/components/ui/button'; +import { Input } from '@/components/ui/input'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; +import { useAuth } from '@/hooks/useAuth'; +import { useOrganization } from '@/contexts/OrganizationContext'; +import { supabase } from '@/integrations/supabase/client'; +import { useToast } from '@/hooks/use-toast'; +import { Github, Mail } from 'lucide-react'; + +const Auth = () => { + const [isSignUp, setIsSignUp] = useState(false); + const [formData, setFormData] = useState({ + email: '', + password: '', + username: '', + displayName: '' + }); + const { user, signUp, signIn, signInWithGithub, signInWithGoogle } = useAuth(); + const { orgSlug, isOrgContext } = useOrganization(); + const { toast } = useToast(); + const navigate = useNavigate(); + + useEffect(() => { + if (user) { + navigate('/'); + } + }, [user, navigate]); + + const handleInputChange = (field: string) => (e: React.ChangeEvent<HTMLInputElement>) => { + setFormData(prev => ({ + ...prev, + [field]: e.target.value + })); + }; + + const handleSignUp = async (e: React.FormEvent) => { + e.preventDefault(); + if (!formData.email || !formData.password || !formData.username || !formData.displayName) { + toast({ + variant: 'destructive', + title: 'Missing Information', + description: 'Please fill in all fields' + }); + return; + } + + const { data } = await signUp(formData.email, formData.password, formData.username, formData.displayName); + + // If signing up from an organization context, add user to that organization + if (data?.user && isOrgContext && orgSlug) { + try { + // Get organization ID from slug + const { data: org, error: orgError } = await supabase + .from('organizations') + .select('id') + .eq('slug', orgSlug) + .single(); + + if (orgError) throw orgError; + + if (org) { + // Add user to organization + const { error: memberError } = await supabase + .from('user_organizations') + .insert({ + user_id: data.user.id, + organization_id: org.id, + role: 'member' + }); + + if (memberError) throw memberError; + + toast({ + title: 'Welcome!', + description: `You've been added to the organization.` + }); + } + } catch (error) { + console.error('Error adding user to organization:', error); + } + } + }; + + const handleSignIn = async (e: React.FormEvent) => { + e.preventDefault(); + if (!formData.email || !formData.password) { + toast({ + variant: 'destructive', + title: 'Missing Information', + description: 'Please fill in email and password' + }); + return; + } + await signIn(formData.email, formData.password); + }; + + return ( + <div className="min-h-screen bg-gradient-to-br from-background via-secondary/20 to-accent/20 flex items-center justify-center p-4"> + <Card className="w-full max-w-md glass-morphism border-white/20"> + <CardHeader className="text-center"> + <CardTitle className="text-2xl font-bold bg-gradient-primary bg-clip-text text-transparent"> + {isSignUp ? 'Create Account' : 'Welcome Back'} + </CardTitle> + <CardDescription> + {isSignUp ? 'Join our photo sharing community' : 'Sign in to your account'} + </CardDescription> + </CardHeader> + <CardContent> + <form onSubmit={isSignUp ? handleSignUp : handleSignIn} className="space-y-4"> + <div className="space-y-2"> + <label className="text-sm font-medium">Email</label> + <Input + type="email" + placeholder="Enter your email" + value={formData.email} + onChange={handleInputChange('email')} + required + /> + </div> + + {isSignUp && ( + <> + <div className="space-y-2"> + <label className="text-sm font-medium">Username</label> + <Input + placeholder="Choose a username" + value={formData.username} + onChange={handleInputChange('username')} + required + /> + </div> + <div className="space-y-2"> + <label className="text-sm font-medium">Display Name</label> + <Input + placeholder="Your display name" + value={formData.displayName} + onChange={handleInputChange('displayName')} + required + /> + </div> + </> + )} + + <div className="space-y-2"> + <label className="text-sm font-medium">Password</label> + <Input + type="password" + placeholder={isSignUp ? "Create a password" : "Enter your password"} + value={formData.password} + onChange={handleInputChange('password')} + required + /> + </div> + + <Button type="submit" className="w-full"> + {isSignUp ? 'Create Account' : 'Sign In'} + </Button> + </form> + + <div className="relative my-6"> + <div className="absolute inset-0 flex items-center"> + <span className="w-full border-t" /> + </div> + <div className="relative flex justify-center text-xs uppercase"> + <span className="bg-background px-2 text-muted-foreground"> + Or continue with + </span> + </div> + </div> + + <div className="grid grid-cols-2 gap-4"> + <Button + type="button" + variant="outline" + onClick={signInWithGithub} + > + <Github className="mr-2 h-4 w-4" /> + GitHub + </Button> + <Button + type="button" + variant="outline" + onClick={signInWithGoogle} + > + <Mail className="mr-2 h-4 w-4" /> + Google + </Button> + </div> + + <div className="mt-6 text-center"> + <Button + variant="ghost" + onClick={() => setIsSignUp(!isSignUp)} + className="text-sm" + > + {isSignUp + ? 'Already have an account? Sign in' + : "Don't have an account? Sign up" + } + </Button> + </div> + </CardContent> + </Card> + </div> + ); +}; + +export default Auth; \ No newline at end of file diff --git a/packages/ui/src/pages/CacheTest.tsx b/packages/ui/src/pages/CacheTest.tsx new file mode 100644 index 00000000..cca0d96b --- /dev/null +++ b/packages/ui/src/pages/CacheTest.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { useParams } from 'react-router-dom'; +import { useQuery } from '@supabase-cache-helpers/postgrest-swr'; +import { supabase } from '@/integrations/supabase/client'; + +const CacheTest = () => { + const { id } = useParams(); + + const { data, error, isLoading } = useQuery( + id ? supabase.from('posts').select('*').eq('id', id).single() : null + ); + + if (isLoading) return <div data-testid="loading">Loading...</div>; + if (error) return <div data-testid="error">Error: {error.message}</div>; + if (!data) return <div data-testid="not-found">Not Found</div>; + + return ( + <div className="p-4"> + <h1 data-testid="post-title">{data.title}</h1> + <p data-testid="post-id">{data.id}</p> + <pre data-testid="raw-data">{JSON.stringify(data, null, 2)}</pre> + </div> + ); +}; + +export default CacheTest; diff --git a/packages/ui/src/pages/Collections.tsx b/packages/ui/src/pages/Collections.tsx new file mode 100644 index 00000000..deacaf28 --- /dev/null +++ b/packages/ui/src/pages/Collections.tsx @@ -0,0 +1,689 @@ +import React, { useState, useEffect } from 'react'; +import { useParams, Link, useNavigate } from 'react-router-dom'; +import { supabase } from '@/integrations/supabase/client'; +import { useAuth } from '@/hooks/useAuth'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { Button } from '@/components/ui/button'; +import PhotoGrid from '@/components/PhotoGrid'; +import ImageWizard from '@/components/ImageWizard'; +import { Share2, Edit3, Trash2, ArrowLeft, Wand2 } from 'lucide-react'; +import { useToast } from '@/hooks/use-toast'; +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from '@/components/ui/dialog'; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, +} from '@/components/ui/alert-dialog'; +import { Input } from '@/components/ui/input'; +import { Textarea } from '@/components/ui/textarea'; +import { Label } from '@/components/ui/label'; +import { Switch } from '@/components/ui/switch'; +import { Progress } from '@/components/ui/progress'; +import { GenericCanvas } from '@/components/hmi/GenericCanvas'; + +interface Collection { + id: string; + name: string; + description: string; + slug: string; + user_id: string; + is_public: boolean; + created_at: string; +} + +interface Picture { + id: string; + title: string; + description: string; + image_url: string; + thumbnail_url: string; + user_id: string; + created_at: string; + likes_count: number; + comments: { count: number }[]; +} + +const Collections = () => { + const { userId, slug } = useParams(); + const { user } = useAuth(); + const navigate = useNavigate(); + const { toast } = useToast(); + const [collection, setCollection] = useState<Collection | null>(null); + const [pictures, setPictures] = useState<Picture[]>([]); + const [loading, setLoading] = useState(true); + const [wizardOpen, setWizardOpen] = useState(false); + const [editDialogOpen, setEditDialogOpen] = useState(false); + const [deleteDialogOpen, setDeleteDialogOpen] = useState(false); + const [editForm, setEditForm] = useState({ + name: '', + description: '', + is_public: true + }); + const [isSaving, setIsSaving] = useState(false); + const [isDeleting, setIsDeleting] = useState(false); + const [isLayoutEditMode, setIsLayoutEditMode] = useState(false); + + const isOwner = user?.id === userId; + + interface UploadingFile { + id: string; + file: File; + preview: string; + progress: number; + status: 'pending' | 'uploading' | 'processing' | 'complete' | 'error'; + error?: string; + } + const [uploadingFiles, setUploadingFiles] = useState<UploadingFile[]>([]); + const uploadingFilesRef = React.useRef<UploadingFile[]>([]); + uploadingFilesRef.current = uploadingFiles; + + useEffect(() => { + return () => { + uploadingFilesRef.current.forEach(f => URL.revokeObjectURL(f.preview)); + } + }, []); + + useEffect(() => { + const completedCount = uploadingFiles.filter(f => f.status === 'complete').length; + const errorCount = uploadingFiles.filter(f => f.status === 'error').length; + const totalProcessed = completedCount + errorCount; + + if (uploadingFiles.length > 0 && totalProcessed === uploadingFiles.length) { + if (completedCount > 0) { + toast({ + title: "Upload complete", + description: `${completedCount} of ${uploadingFiles.length} files added to the collection.` + }); + fetchCollection(); + } + if (errorCount > 0) { + toast({ + title: "Upload error", + description: `${errorCount} files failed to upload.`, + variant: "destructive" + }); + } + + setTimeout(() => { + setUploadingFiles([]); + }, 5000); + } + }, [uploadingFiles]); + + + const uploadAndProcessFiles = (filesToUpload: UploadingFile[]) => { + filesToUpload.forEach(async (fileToUpload) => { + try { + if (!user || !collection) return; + + setUploadingFiles(prev => prev.map(f => f.id === fileToUpload.id ? { ...f, status: 'uploading', progress: 10 } : f)); + + const filePath = `${user.id}/${collection.id}/${Date.now()}_${fileToUpload.file.name.replace(/[^a-zA-Z0-9.\-_]/g, '')}`; + const { error: uploadError } = await supabase.storage + .from('pictures') + .upload(filePath, fileToUpload.file, { + cacheControl: '3600', + upsert: false, + }); + + if (uploadError) throw uploadError; + + setUploadingFiles(prev => prev.map(f => f.id === fileToUpload.id ? { ...f, progress: 90, status: 'processing' } : f)); + + const { data: { publicUrl } } = supabase.storage.from('pictures').getPublicUrl(filePath); + + if (!publicUrl) throw new Error('Could not get public URL'); + + const { data: newPicture, error: insertPictureError } = await supabase + .from('pictures') + .insert({ + user_id: user.id, + image_url: publicUrl, + thumbnail_url: publicUrl, + title: '', + description: '', + }) + .select() + .single(); + + if (insertPictureError) throw insertPictureError; + + const { error: insertCollectionPictureError } = await supabase + .from('collection_pictures') + .insert({ + collection_id: collection.id, + picture_id: newPicture.id, + }); + + if (insertCollectionPictureError) throw insertCollectionPictureError; + + setUploadingFiles(prev => prev.map(f => f.id === fileToUpload.id ? { ...f, status: 'complete', progress: 100 } : f)); + + } catch (error: any) { + console.error('Error uploading file:', error); + setUploadingFiles(prev => prev.map(f => f.id === fileToUpload.id ? { ...f, status: 'error', error: error.message, progress: 100 } : f)); + } + }); + }; + + const handleFileUpload = (files: File[]) => { + if (!isOwner) return; + + const imageFiles = files.filter(f => f.type.startsWith('image/')); + if (imageFiles.length === 0) return; + + const newFiles: UploadingFile[] = imageFiles.map(file => ({ + id: `${file.name}-${file.lastModified}-${Math.random()}`, + file, + preview: URL.createObjectURL(file), + progress: 0, + status: 'pending', + })); + + setUploadingFiles(prev => [...prev, ...newFiles]); + + uploadAndProcessFiles(newFiles); + }; + + useEffect(() => { + if (userId && slug) { + fetchCollection(); + } + }, [userId, slug]); + + const fetchCollection = async () => { + try { + setLoading(true); + + // Fetch collection + const { data: collectionData, error: collectionError } = await supabase + .from('collections') + .select('*') + .eq('user_id', userId) + .eq('slug', slug) + .single(); + + if (collectionError) { + console.error('Error fetching collection:', collectionError); + return; + } + + setCollection(collectionData); + + // Fetch pictures in collection + const { data: picturesData, error: picturesError } = await supabase + .from('collection_pictures') + .select(` + pictures:picture_id ( + id, + title, + description, + image_url, + thumbnail_url, + user_id, + created_at, + likes_count + ) + `) + .eq('collection_id', collectionData.id); + + if (picturesError) { + console.error('Error fetching pictures:', picturesError); + return; + } + + const flattenedPictures = picturesData + .map(item => item.pictures) + .filter(Boolean) as Picture[]; + + // Add comment counts for each picture + const picturesWithCommentCounts = await Promise.all( + flattenedPictures.map(async (picture) => { + const { count } = await supabase + .from('comments') + .select('*', { count: 'exact', head: true }) + .eq('picture_id', picture.id); + + return { ...picture, comments: [{ count: count || 0 }] }; + }) + ); + + setPictures(picturesWithCommentCounts); + } catch (error) { + console.error('Error:', error); + } finally { + setLoading(false); + } + }; + + const handleShare = async () => { + const url = window.location.href; + try { + await navigator.clipboard.writeText(url); + toast({ + title: "Link copied!", + description: "Collection link copied to clipboard" + }); + } catch (error) { + toast({ + title: "Error", + description: "Failed to copy link", + variant: "destructive" + }); + } + }; + + const handleWizardPublish = async (imageUrl: string, prompt: string) => { + if (!collection || !user) return; + + try { + // Find the picture that was just published by URL + const { data: picture, error: findError } = await supabase + .from('pictures') + .select('id') + .eq('image_url', imageUrl) + .eq('user_id', user.id) + .order('created_at', { ascending: false }) + .limit(1) + .single(); + + if (findError || !picture) { + console.error('Error finding published picture:', findError); + return; + } + + // Add the picture to this collection + const { error: addError } = await supabase + .from('collection_pictures') + .insert({ + collection_id: collection.id, + picture_id: picture.id + }); + + if (addError) { + console.error('Error adding to collection:', addError); + toast({ + title: "Error", + description: "Failed to add image to collection", + variant: "destructive" + }); + return; + } + + toast({ + title: "Success!", + description: "Image added to collection" + }); + + // Refresh the collection to show the new image + fetchCollection(); + } catch (error) { + console.error('Error in wizard publish handler:', error); + } + }; + + const handleOpenEditDialog = () => { + if (!collection) return; + setEditForm({ + name: collection.name, + description: collection.description || '', + is_public: collection.is_public + }); + setEditDialogOpen(true); + }; + + const handleSaveEdit = async () => { + if (!collection || !user || !editForm.name.trim()) return; + + setIsSaving(true); + try { + const newSlug = editForm.name + .toLowerCase() + .trim() + .replace(/[^\w\s-]/g, '') + .replace(/[\s_-]+/g, '-') + .replace(/^-+|-+$/g, ''); + + const { error } = await supabase + .from('collections') + .update({ + name: editForm.name.trim(), + description: editForm.description.trim() || null, + is_public: editForm.is_public, + slug: newSlug + }) + .eq('id', collection.id) + .eq('user_id', user.id); + + if (error) throw error; + + toast({ + title: "Success!", + description: "Collection updated" + }); + + setEditDialogOpen(false); + + // Navigate to new slug if it changed + if (newSlug !== slug) { + navigate(`/collections/${userId}/${newSlug}`); + } else { + fetchCollection(); + } + } catch (error) { + console.error('Error updating collection:', error); + toast({ + title: "Error", + description: "Failed to update collection", + variant: "destructive" + }); + } finally { + setIsSaving(false); + } + }; + + const handleDeleteCollection = async () => { + if (!collection || !user) return; + + setIsDeleting(true); + try { + // First delete all collection_pictures entries + const { error: deletePicturesError } = await supabase + .from('collection_pictures') + .delete() + .eq('collection_id', collection.id); + + if (deletePicturesError) throw deletePicturesError; + + // Then delete the collection itself + const { error: deleteError } = await supabase + .from('collections') + .delete() + .eq('id', collection.id) + .eq('user_id', user.id); + + if (deleteError) throw deleteError; + + toast({ + title: "Success!", + description: "Collection deleted" + }); + + // Navigate back to user's collections page + navigate(`/user/${userId}/collections`); + } catch (error) { + console.error('Error deleting collection:', error); + toast({ + title: "Error", + description: "Failed to delete collection", + variant: "destructive" + }); + } finally { + setIsDeleting(false); + setDeleteDialogOpen(false); + } + }; + + if (loading) { + return ( + <div className="min-h-screen bg-background flex items-center justify-center"> + <div className="text-lg">Loading collection...</div> + </div> + ); + } + + if (!collection) { + return ( + <div className="min-h-screen bg-background flex items-center justify-center"> + <div className="text-center"> + <h2 className="text-2xl font-bold mb-4">Collection not found</h2> + <p className="text-muted-foreground">This collection doesn't exist or is private.</p> + </div> + </div> + ); + } + + return ( + <div className="min-h-screen bg-background"> + <div className="container mx-auto px-4 py-8 max-w-6xl"> + {/* Header */} + <div className="flex items-center gap-4 mb-6"> + <Button variant="ghost" size="sm" asChild> + <Link to={`/user/${userId}`}> + <ArrowLeft className="h-4 w-4 mr-2" /> + Back to Profile + </Link> + </Button> + </div> + + {/* Collection Info */} + <Card className="mb-8"> + <CardContent className="p-6"> + <div className="flex flex-col md:flex-row justify-between items-start gap-4 mb-4"> + <div> + <h1 className="text-3xl font-bold mb-2">{collection.name}</h1> + {collection.description && ( + <p className="text-muted-foreground text-lg mb-4"> + {collection.description} + </p> + )} + <div className="flex items-center gap-4 text-sm text-muted-foreground"> + <span>{pictures.length} {pictures.length === 1 ? 'photo' : 'photos'}</span> + <span>Created {new Date(collection.created_at).toLocaleDateString()}</span> + <span className="flex items-center gap-1"> + {collection.is_public ? 'Public' : 'Private'} + </span> + </div> + </div> + + <div className="flex gap-2 flex-wrap"> + {isOwner && ( + <Button + variant="default" + size="sm" + onClick={() => setWizardOpen(true)} + className="bg-gradient-primary hover:opacity-90" + > + <Wand2 className="h-4 w-4 mr-2" /> + Wizard + </Button> + )} + <Button variant="outline" size="sm" onClick={handleShare}> + <Share2 className="h-4 w-4 mr-2" /> + Share + </Button> + {isOwner && ( + <> + <Button variant="outline" size="sm" onClick={handleOpenEditDialog}> + <Edit3 className="h-4 w-4 mr-2" /> + Settings + </Button> + <Button + variant={isLayoutEditMode ? 'default' : 'outline'} + size="sm" + onClick={() => setIsLayoutEditMode(!isLayoutEditMode)} + > + <Edit3 className="h-4 w-4 mr-2" /> + {isLayoutEditMode ? 'Done' : 'Edit Layout'} + </Button> + <Button variant="destructive" size="sm" onClick={() => setDeleteDialogOpen(true)}> + <Trash2 className="h-4 w-4 mr-2" /> + Delete + </Button> + </> + )} + </div> + </div> + </CardContent> + </Card> + + {/* Upload Progress */} + {uploadingFiles.length > 0 && ( + <Card className="mb-8"> + <CardHeader> + <CardTitle>Uploading {uploadingFiles.length} {uploadingFiles.length === 1 ? 'image' : 'images'}...</CardTitle> + </CardHeader> + <CardContent> + <div className="grid grid-cols-2 sm:grid-cols-4 md:grid-cols-6 lg:grid-cols-8 gap-4"> + {uploadingFiles.map(upload => ( + <div key={upload.id} className="relative group"> + <div className="aspect-square rounded-lg overflow-hidden bg-muted"> + <img + src={upload.preview} + alt={upload.file.name} + className="w-full h-full object-cover" + /> + </div> + <div + className="absolute inset-0 bg-black/50 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity" + > + <p className="text-white text-xs text-center p-1 truncate">{upload.file.name}</p> + </div> + + {upload.status !== 'pending' && ( + <Progress value={upload.progress} className="w-full h-1 mt-1" /> + )} + {upload.status === 'error' && ( + <div className="text-xs text-red-500 mt-1 truncate" title={upload.error}> + Upload failed + </div> + )} + </div> + ))} + </div> + </CardContent> + </Card> + )} + + <GenericCanvas + pageId={`collection-${collection.id}-before`} + pageName={`${collection.name} - Before Content`} + isEditMode={isLayoutEditMode} + showControls={isLayoutEditMode} + /> + + {/* Images Grid */} + <PhotoGrid + customPictures={pictures} + customLoading={loading} + navigationSource="collection" + navigationSourceId={collection?.id} + isOwner={isOwner} + onFilesDrop={handleFileUpload} + /> + + <GenericCanvas + pageId={`collection-${collection.id}-after`} + pageName={`${collection.name} - After Content`} + isEditMode={isLayoutEditMode} + showControls={isLayoutEditMode} + /> + </div> + + {/* Image Wizard Modal */} + {wizardOpen && ( + <ImageWizard + isOpen={wizardOpen} + onClose={() => setWizardOpen(false)} + onPublish={handleWizardPublish} + /> + )} + + {/* Edit Collection Dialog */} + <Dialog open={editDialogOpen} onOpenChange={setEditDialogOpen}> + <DialogContent className="max-w-md"> + <DialogHeader> + <DialogTitle>Edit Collection</DialogTitle> + <DialogDescription> + Update your collection details + </DialogDescription> + </DialogHeader> + + <div className="space-y-4 py-4"> + <div className="space-y-2"> + <Label htmlFor="edit-name">Collection Name</Label> + <Input + id="edit-name" + value={editForm.name} + onChange={(e) => setEditForm(prev => ({ ...prev, name: e.target.value }))} + placeholder="e.g. Summer 2024" + maxLength={100} + /> + </div> + + <div className="space-y-2"> + <Label htmlFor="edit-description">Description</Label> + <Textarea + id="edit-description" + value={editForm.description} + onChange={(e) => setEditForm(prev => ({ ...prev, description: e.target.value }))} + placeholder="Describe what this collection is about..." + rows={4} + maxLength={500} + /> + </div> + + <div className="flex items-center justify-between space-x-2 p-4 border rounded-lg"> + <div className="space-y-0.5"> + <Label htmlFor="edit-public">Public Collection</Label> + <p className="text-sm text-muted-foreground"> + Anyone can view this collection + </p> + </div> + <Switch + id="edit-public" + checked={editForm.is_public} + onCheckedChange={(checked) => setEditForm(prev => ({ ...prev, is_public: checked }))} + /> + </div> + </div> + + <DialogFooter> + <Button variant="outline" onClick={() => setEditDialogOpen(false)}> + Cancel + </Button> + <Button onClick={handleSaveEdit} disabled={isSaving || !editForm.name.trim()}> + {isSaving ? 'Saving...' : 'Save Changes'} + </Button> + </DialogFooter> + </DialogContent> + </Dialog> + + {/* Delete Collection Confirmation */} + <AlertDialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}> + <AlertDialogContent> + <AlertDialogHeader> + <AlertDialogTitle>Delete Collection</AlertDialogTitle> + <AlertDialogDescription> + Are you sure you want to delete "{collection?.name}"? This will remove the collection but not the photos in it. This action cannot be undone. + </AlertDialogDescription> + </AlertDialogHeader> + <AlertDialogFooter> + <AlertDialogCancel disabled={isDeleting}>Cancel</AlertDialogCancel> + <AlertDialogAction + onClick={handleDeleteCollection} + disabled={isDeleting} + className="bg-destructive text-destructive-foreground hover:bg-destructive/90" + > + {isDeleting ? 'Deleting...' : 'Delete Collection'} + </AlertDialogAction> + </AlertDialogFooter> + </AlertDialogContent> + </AlertDialog> + </div> + ); +}; + +export default Collections; \ No newline at end of file diff --git a/packages/ui/src/pages/Index.tsx b/packages/ui/src/pages/Index.tsx new file mode 100644 index 00000000..13ab0ed1 --- /dev/null +++ b/packages/ui/src/pages/Index.tsx @@ -0,0 +1,106 @@ +import PhotoGrid from "@/components/PhotoGrid"; +import GalleryLarge from "@/components/GalleryLarge"; +import MobileFeed from "@/components/feed/MobileFeed"; +import { useMediaRefresh } from "@/contexts/MediaRefreshContext"; +import { useIsMobile } from "@/hooks/use-mobile"; +import { useState, useEffect } from "react"; +import { LayoutGrid, GalleryVerticalEnd, TrendingUp, Clock, List } from "lucide-react"; +import { ListLayout } from "@/components/ListLayout"; +import { ToggleGroup, ToggleGroupItem } from "@/components/ui/toggle-group"; +import type { FeedSortOption } from "@/hooks/useFeedData"; + +const Index = () => { + + const { refreshKey } = useMediaRefresh(); + const isMobile = useIsMobile(); + const [viewMode, setViewMode] = useState<'grid' | 'large' | 'list'>(() => { + return (localStorage.getItem('feedViewMode') as 'grid' | 'large' | 'list') || 'grid'; + }); + + useEffect(() => { + localStorage.setItem('feedViewMode', viewMode); + }, [viewMode]); + const [sortBy, setSortBy] = useState<FeedSortOption>('latest'); + + return ( + <div className="bg-background"> + <div className="md:py-2"> + <div className="text-center"> + </div> + <div> + <div> + {/* Mobile Feed View */} + {isMobile ? ( + <div className="md:hidden"> + <div className="flex justify-between items-center px-4 mb-4 pt-2"> + <ToggleGroup type="single" value={sortBy} onValueChange={(v) => v && setSortBy(v as FeedSortOption)}> + <ToggleGroupItem value="latest" aria-label="Latest Posts" size="sm"> + <Clock className="h-4 w-4 mr-2" /> + Latest + </ToggleGroupItem> + <ToggleGroupItem value="top" aria-label="Top Posts" size="sm"> + <TrendingUp className="h-4 w-4 mr-2" /> + Top + </ToggleGroupItem> + </ToggleGroup> + + <ToggleGroup type="single" value={viewMode === 'list' ? 'list' : 'grid'} onValueChange={(v) => v && setViewMode(v as any)}> + <ToggleGroupItem value="grid" aria-label="Card View" size="sm"> + <LayoutGrid className="h-4 w-4" /> + </ToggleGroupItem> + <ToggleGroupItem value="list" aria-label="List View" size="sm"> + <List className="h-4 w-4" /> + </ToggleGroupItem> + </ToggleGroup> + </div> + {viewMode === 'list' ? ( + <ListLayout key={refreshKey} sortBy={sortBy} navigationSource="home" /> + ) : ( + <MobileFeed source="home" sortBy={sortBy} onNavigate={(id) => window.location.href = `/post/${id}`} /> + )} + </div> + ) : ( + /* Desktop/Tablet Grid View */ + <div className="hidden md:block"> + <div className="flex justify-between px-4 mb-4"> + <ToggleGroup type="single" value={sortBy} onValueChange={(v) => v && setSortBy(v as FeedSortOption)}> + <ToggleGroupItem value="latest" aria-label="Latest Posts"> + <Clock className="h-4 w-4 mr-2" /> + Latest + </ToggleGroupItem> + <ToggleGroupItem value="top" aria-label="Top Posts"> + <TrendingUp className="h-4 w-4 mr-2" /> + Top + </ToggleGroupItem> + </ToggleGroup> + + <ToggleGroup type="single" value={viewMode} onValueChange={(v) => v && setViewMode(v as any)}> + <ToggleGroupItem value="grid" aria-label="Grid View"> + <LayoutGrid className="h-4 w-4" /> + </ToggleGroupItem> + <ToggleGroupItem value="large" aria-label="Large View"> + <GalleryVerticalEnd className="h-4 w-4" /> + </ToggleGroupItem> + <ToggleGroupItem value="list" aria-label="List View"> + <List className="h-4 w-4" /> + </ToggleGroupItem> + </ToggleGroup> + </div> + + {viewMode === 'grid' ? ( + <PhotoGrid key={refreshKey} sortBy={sortBy} showVideos={true} /> + ) : viewMode === 'large' ? ( + <GalleryLarge key={refreshKey} sortBy={sortBy} /> + ) : ( + <ListLayout key={refreshKey} sortBy={sortBy} /> + )} + </div> + )} + </div> + </div> + </div> + </div> + ); +}; + +export default Index; diff --git a/packages/ui/src/pages/NewCollection.tsx b/packages/ui/src/pages/NewCollection.tsx new file mode 100644 index 00000000..ff41addb --- /dev/null +++ b/packages/ui/src/pages/NewCollection.tsx @@ -0,0 +1,179 @@ +import { useState } from "react"; +import { useNavigate } from "react-router-dom"; +import { supabase } from "@/integrations/supabase/client"; +import { useAuth } from "@/hooks/useAuth"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Input } from "@/components/ui/input"; +import { Textarea } from "@/components/ui/textarea"; +import { Switch } from "@/components/ui/switch"; +import { Label } from "@/components/ui/label"; +import { ArrowLeft } from "lucide-react"; +import { toast } from "sonner"; + +const NewCollection = () => { + const navigate = useNavigate(); + const { user } = useAuth(); + const [name, setName] = useState(""); + const [description, setDescription] = useState(""); + const [isPublic, setIsPublic] = useState(true); + const [isCreating, setIsCreating] = useState(false); + + const generateSlug = (text: string) => { + return text + .toLowerCase() + .trim() + .replace(/[^\w\s-]/g, '') + .replace(/[\s_-]+/g, '-') + .replace(/^-+|-+$/g, ''); + }; + + const handleCreate = async (e: React.FormEvent) => { + e.preventDefault(); + + if (!user) { + toast.error("You must be logged in to create a collection"); + navigate("/auth"); + return; + } + + if (!name.trim()) { + toast.error("Please enter a collection name"); + return; + } + + setIsCreating(true); + + try { + const slug = generateSlug(name); + + // Check if slug already exists for this user + const { data: existing } = await supabase + .from('collections') + .select('id') + .eq('user_id', user.id) + .eq('slug', slug) + .single(); + + if (existing) { + toast.error("You already have a collection with this name"); + setIsCreating(false); + return; + } + + // Create the collection + const { data, error } = await supabase + .from('collections') + .insert({ + user_id: user.id, + name: name.trim(), + description: description.trim() || null, + slug: slug, + is_public: isPublic + }) + .select() + .single(); + + if (error) throw error; + + toast.success("Collection created successfully!"); + navigate(`/collections/${user.id}/${slug}`); + } catch (error) { + console.error('Error creating collection:', error); + toast.error("Failed to create collection"); + } finally { + setIsCreating(false); + } + }; + + return ( + <div className="min-h-screen bg-background pt-14"> + <div className="container mx-auto px-4 py-8 max-w-2xl"> + {/* Header */} + <div className="flex items-center gap-4 mb-8"> + <Button variant="ghost" size="sm" onClick={() => navigate(-1)}> + <ArrowLeft className="h-4 w-4 mr-2" /> + Back + </Button> + </div> + + {/* Form */} + <Card> + <CardHeader> + <CardTitle>Create New Collection</CardTitle> + <CardDescription> + Organize your photos into collections that you can share with others + </CardDescription> + </CardHeader> + <CardContent> + <form onSubmit={handleCreate} className="space-y-6"> + {/* Collection Name */} + <div className="space-y-2"> + <Label htmlFor="name">Collection Name *</Label> + <Input + id="name" + value={name} + onChange={(e) => setName(e.target.value)} + placeholder="e.g. Summer 2024, Nature Photography" + required + maxLength={100} + /> + </div> + + {/* Description */} + <div className="space-y-2"> + <Label htmlFor="description">Description (Optional)</Label> + <Textarea + id="description" + value={description} + onChange={(e) => setDescription(e.target.value)} + placeholder="Describe what this collection is about..." + rows={4} + maxLength={500} + /> + </div> + + {/* Privacy Setting */} + <div className="flex items-center justify-between space-x-2 p-4 border rounded-lg"> + <div className="space-y-0.5"> + <Label htmlFor="public">Public Collection</Label> + <p className="text-sm text-muted-foreground"> + Anyone can view this collection + </p> + </div> + <Switch + id="public" + checked={isPublic} + onCheckedChange={setIsPublic} + /> + </div> + + {/* Submit Button */} + <div className="flex gap-4"> + <Button + type="button" + variant="outline" + onClick={() => navigate(-1)} + className="flex-1" + > + Cancel + </Button> + <Button + type="submit" + disabled={isCreating || !name.trim()} + className="flex-1" + > + {isCreating ? "Creating..." : "Create Collection"} + </Button> + </div> + </form> + </CardContent> + </Card> + </div> + </div> + ); +}; + +export default NewCollection; + + diff --git a/packages/ui/src/pages/NewPage.tsx b/packages/ui/src/pages/NewPage.tsx new file mode 100644 index 00000000..840280dd --- /dev/null +++ b/packages/ui/src/pages/NewPage.tsx @@ -0,0 +1,303 @@ +import { useState } from "react"; +import { useNavigate, useParams } from "react-router-dom"; +import { supabase } from "@/integrations/supabase/client"; +import { useAuth } from "@/hooks/useAuth"; +import { toast } from "sonner"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Textarea } from "@/components/ui/textarea"; +import { Switch } from "@/components/ui/switch"; +import { ArrowLeft, FileText } from "lucide-react"; +import { T, translate } from "@/i18n"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; + +const NewPage = () => { + const navigate = useNavigate(); + const { user } = useAuth(); + const { orgSlug } = useParams<{ orgSlug?: string }>(); + + const [title, setTitle] = useState(""); + const [slug, setSlug] = useState(""); + const [type, setType] = useState<string>("page"); + const [tags, setTags] = useState(""); + const [isPublic, setIsPublic] = useState(true); + const [visible, setVisible] = useState(true); + const [autoGenerateSlug, setAutoGenerateSlug] = useState(true); + const [creating, setCreating] = useState(false); + + const generateSlug = (text: string) => { + return text + .toLowerCase() + .trim() + .replace(/[^\w\s-]/g, '') + .replace(/\s+/g, '-') + .replace(/-+/g, '-'); + }; + + const handleTitleChange = (value: string) => { + setTitle(value); + if (autoGenerateSlug) { + setSlug(generateSlug(value)); + } + }; + + const handleCreatePage = async () => { + if (!user) { + toast.error(translate('Please sign in to create a page')); + return; + } + + if (!title.trim()) { + toast.error(translate('Please enter a page title')); + return; + } + + if (!slug.trim()) { + toast.error(translate('Please enter a page slug')); + return; + } + + try { + setCreating(true); + + // Check if slug already exists for this user + const { data: existingPage } = await supabase + .from('pages') + .select('id') + .eq('owner', user.id) + .eq('slug', slug) + .maybeSingle(); + + if (existingPage) { + toast.error(translate('A page with this slug already exists')); + setCreating(false); + return; + } + + // Parse tags + const tagArray = tags + .split(',') + .map(tag => tag.trim()) + .filter(tag => tag.length > 0); + + // Create the page + const { data: newPage, error } = await supabase + .from('pages') + .insert([{ + title: title.trim(), + slug: slug.trim(), + owner: user.id, + type: type || null, + tags: tagArray.length > 0 ? tagArray : null, + is_public: isPublic, + visible: visible, + content: null, // Will be edited later + }]) + .select() + .single(); + + if (error) throw error; + + toast.success(translate('Page created successfully!')); + + // Navigate to the new page + const pageUrl = orgSlug + ? `/org/${orgSlug}/user/${user.id}/pages/${newPage.slug}` + : `/user/${user.id}/pages/${newPage.slug}`; + + navigate(pageUrl); + } catch (error) { + console.error('Error creating page:', error); + toast.error(translate('Failed to create page')); + } finally { + setCreating(false); + } + }; + + const handleCancel = () => { + const backUrl = orgSlug + ? `/org/${orgSlug}/user/${user?.id}` + : `/user/${user?.id}`; + navigate(backUrl); + }; + + return ( + <div className="min-h-screen bg-background pt-14"> + <div className="container mx-auto px-4 py-8 max-w-2xl"> + {/* Header */} + <div className="flex items-center justify-between mb-8"> + <Button variant="ghost" size="sm" onClick={handleCancel}> + <ArrowLeft className="h-4 w-4 mr-2" /> + <T>Back</T> + </Button> + </div> + + {/* Form Card */} + <Card> + <CardHeader> + <div className="flex items-center gap-3"> + <div className="w-12 h-12 bg-gradient-primary rounded-lg flex items-center justify-center"> + <FileText className="h-6 w-6 text-white" /> + </div> + <div> + <CardTitle><T>Create New Page</T></CardTitle> + <CardDescription> + <T>Add a new page to your profile</T> + </CardDescription> + </div> + </div> + </CardHeader> + <CardContent className="space-y-6"> + {/* Title */} + <div className="space-y-2"> + <Label htmlFor="title"> + <T>Page Title</T> <span className="text-destructive">*</span> + </Label> + <Input + id="title" + placeholder={translate('Enter page title...')} + value={title} + onChange={(e) => handleTitleChange(e.target.value)} + /> + </div> + + {/* Slug */} + <div className="space-y-2"> + <div className="flex items-center justify-between"> + <Label htmlFor="slug"> + <T>URL Slug</T> <span className="text-destructive">*</span> + </Label> + <div className="flex items-center gap-2"> + <Switch + checked={autoGenerateSlug} + onCheckedChange={setAutoGenerateSlug} + /> + <span className="text-xs text-muted-foreground"> + <T>Auto-generate</T> + </span> + </div> + </div> + <Input + id="slug" + placeholder={translate('page-url-slug')} + value={slug} + onChange={(e) => setSlug(e.target.value)} + disabled={autoGenerateSlug} + /> + <p className="text-xs text-muted-foreground"> + <T>URL:</T> /user/{user?.id}/pages/<span className="text-primary">{slug || 'slug'}</span> + </p> + </div> + + {/* Type */} + <div className="space-y-2"> + <Label htmlFor="type"> + <T>Page Type</T> + </Label> + <Select value={type} onValueChange={setType}> + <SelectTrigger id="type"> + <SelectValue /> + </SelectTrigger> + <SelectContent> + <SelectItem value="page"><T>Page</T></SelectItem> + <SelectItem value="article"><T>Article</T></SelectItem> + <SelectItem value="portfolio"><T>Portfolio</T></SelectItem> + <SelectItem value="blog"><T>Blog</T></SelectItem> + <SelectItem value="documentation"><T>Documentation</T></SelectItem> + <SelectItem value="custom"><T>Custom</T></SelectItem> + </SelectContent> + </Select> + </div> + + {/* Tags */} + <div className="space-y-2"> + <Label htmlFor="tags"> + <T>Tags</T> + </Label> + <Input + id="tags" + placeholder={translate('tag1, tag2, tag3...')} + value={tags} + onChange={(e) => setTags(e.target.value)} + /> + <p className="text-xs text-muted-foreground"> + <T>Separate tags with commas</T> + </p> + </div> + + {/* Visibility Settings */} + <div className="space-y-4 pt-4 border-t"> + <h4 className="font-medium text-sm"><T>Visibility Settings</T></h4> + + <div className="flex items-center justify-between"> + <div className="space-y-0.5"> + <Label htmlFor="public"> + <T>Public Page</T> + </Label> + <p className="text-xs text-muted-foreground"> + <T>Anyone can view this page</T> + </p> + </div> + <Switch + id="public" + checked={isPublic} + onCheckedChange={setIsPublic} + /> + </div> + + <div className="flex items-center justify-between"> + <div className="space-y-0.5"> + <Label htmlFor="visible"> + <T>Visible on Profile</T> + </Label> + <p className="text-xs text-muted-foreground"> + <T>Show this page on your profile</T> + </p> + </div> + <Switch + id="visible" + checked={visible} + onCheckedChange={setVisible} + /> + </div> + </div> + + {/* Actions */} + <div className="flex gap-3 pt-4"> + <Button + onClick={handleCreatePage} + disabled={creating || !title.trim() || !slug.trim()} + className="flex-1" + > + {creating ? <T>Creating...</T> : <T>Create Page</T>} + </Button> + <Button + variant="outline" + onClick={handleCancel} + disabled={creating} + > + <T>Cancel</T> + </Button> + </div> + </CardContent> + </Card> + </div> + </div> + ); +}; + +export default NewPage; diff --git a/packages/ui/src/pages/NewPost.tsx b/packages/ui/src/pages/NewPost.tsx new file mode 100644 index 00000000..5a414ef5 --- /dev/null +++ b/packages/ui/src/pages/NewPost.tsx @@ -0,0 +1,94 @@ +import React from "react"; +import { useAuth } from "@/hooks/useAuth"; +import { useNavigate, Navigate } from "react-router-dom"; +import { CreationWizardPopup } from "@/components/CreationWizardPopup"; + +const NewPost = () => { + const { user, loading } = useAuth(); + const navigate = useNavigate(); + const [sharedImages, setSharedImages] = React.useState<any[]>([]); + const [sharedTitle, setSharedTitle] = React.useState(""); + const [sharedText, setSharedText] = React.useState(""); + const [debugLogs, setDebugLogs] = React.useState<string[]>([]); + + const addLog = (msg: string) => { + console.log(msg); + setDebugLogs(prev => [...prev, new Date().toISOString().split('T')[1].split('.')[0] + ': ' + msg]); + }; + + React.useEffect(() => { + const checkShared = async () => { + const params = new URLSearchParams(window.location.search); + if (params.get('shared') === 'true') { + try { + // Dynamic import to avoid SSR/build issues if any, though likely fine as is + const { get, del } = await import('idb-keyval'); + const data = await get('share-target'); + + if (data) { + console.log("Found shared data:", data); + const { files, title, text, url, items } = data; // Destructure items + + let newImages = []; + + // Handle virtual items (pre-processed in GlobalDragDrop) + if (items && items.length > 0) { + newImages = [...newImages, ...items]; + } + + // Handle raw files (legacy share target) + if (files && files.length > 0) { + const fileImages = Array.from(files).map((f: any) => ({ + id: `shared-${Date.now()}-${Math.random()}`, + file: f, + src: URL.createObjectURL(f), + title: f.name, + selected: true, + isGenerated: false, + type: f.type.startsWith('video/') ? 'video' : 'image' + })); + newImages = [...newImages, ...fileImages]; + } + + if (newImages.length > 0) { + setSharedImages(newImages); + } + + if (title) setSharedTitle(title); + + let description = text || ""; + if (url) description += (description ? "\n\n" : "") + url; + setSharedText(description); + + // Clean up + await del('share-target'); + } + } catch (err) { + console.error("Error reading shared data:", err); + } + } + }; + checkShared(); + }, []); + + if (loading) { + return <div className="min-h-screen bg-background pt-14 flex items-center justify-center">Loading...</div>; + } + + if (!user) { + return <Navigate to="/auth" replace />; + } + + return ( + <div className="min-h-screen bg-background pt-14"> + {/* Show CreationWizardPopup with shared images */} + <CreationWizardPopup + isOpen={true} + onClose={() => navigate('/')} + preloadedImages={sharedImages} + /> + </div> + ); +}; + +export default NewPost; \ No newline at end of file diff --git a/packages/ui/src/pages/NotFound.tsx b/packages/ui/src/pages/NotFound.tsx new file mode 100644 index 00000000..f9cf7c5a --- /dev/null +++ b/packages/ui/src/pages/NotFound.tsx @@ -0,0 +1,24 @@ +import { useLocation } from "react-router-dom"; +import { useEffect } from "react"; + +const NotFound = () => { + const location = useLocation(); + + useEffect(() => { + console.error("404 Error: User attempted to access non-existent route:", location.pathname); + }, [location.pathname]); + + return ( + <div className="flex min-h-screen items-center justify-center bg-gray-100"> + <div className="text-center"> + <h1 className="mb-4 text-4xl font-bold">404</h1> + <p className="mb-4 text-xl text-gray-600">Oops! Page not found</p> + <a href="/" className="text-blue-500 underline hover:text-blue-700"> + Return to Home + </a> + </div> + </div> + ); +}; + +export default NotFound; diff --git a/packages/ui/src/pages/Organizations.tsx b/packages/ui/src/pages/Organizations.tsx new file mode 100644 index 00000000..8d68194e --- /dev/null +++ b/packages/ui/src/pages/Organizations.tsx @@ -0,0 +1,297 @@ +import { useState } from "react"; +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { supabase } from "@/integrations/supabase/client"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; +import { Pencil, Trash2, Plus, Users } from "lucide-react"; +import { toast } from "sonner"; +import { Textarea } from "@/components/ui/textarea"; + +interface Organization { + id: string; + name: string; + slug: string; + created_at: string; + updated_at: string; +} + +export default function Organizations() { + const [isCreateOpen, setIsCreateOpen] = useState(false); + const [isEditOpen, setIsEditOpen] = useState(false); + const [selectedOrg, setSelectedOrg] = useState<Organization | null>(null); + const [newOrgName, setNewOrgName] = useState(""); + const [newOrgSlug, setNewOrgSlug] = useState(""); + const queryClient = useQueryClient(); + + // Fetch organizations + const { data: organizations, isLoading } = useQuery({ + queryKey: ["organizations"], + queryFn: async () => { + const { data, error } = await supabase + .from("organizations") + .select("*") + .order("created_at", { ascending: false }); + + if (error) throw error; + return data as Organization[]; + }, + }); + + // Create organization mutation + const createMutation = useMutation({ + mutationFn: async (org: { name: string; slug: string }) => { + const { data, error } = await supabase + .from("organizations") + .insert([org]) + .select() + .single(); + + if (error) throw error; + return data; + }, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["organizations"] }); + toast.success("Organization created successfully"); + setIsCreateOpen(false); + setNewOrgName(""); + setNewOrgSlug(""); + }, + onError: (error: Error) => { + toast.error(`Failed to create organization: ${error.message}`); + }, + }); + + // Update organization mutation + const updateMutation = useMutation({ + mutationFn: async (org: { id: string; name: string; slug: string }) => { + const { data, error } = await supabase + .from("organizations") + .update({ name: org.name, slug: org.slug }) + .eq("id", org.id) + .select() + .single(); + + if (error) throw error; + return data; + }, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["organizations"] }); + toast.success("Organization updated successfully"); + setIsEditOpen(false); + setSelectedOrg(null); + }, + onError: (error: Error) => { + toast.error(`Failed to update organization: ${error.message}`); + }, + }); + + // Delete organization mutation + const deleteMutation = useMutation({ + mutationFn: async (id: string) => { + const { error } = await supabase + .from("organizations") + .delete() + .eq("id", id); + + if (error) throw error; + }, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["organizations"] }); + toast.success("Organization deleted successfully"); + }, + onError: (error: Error) => { + toast.error(`Failed to delete organization: ${error.message}`); + }, + }); + + const handleCreate = () => { + if (!newOrgName || !newOrgSlug) { + toast.error("Please fill in all fields"); + return; + } + createMutation.mutate({ name: newOrgName, slug: newOrgSlug }); + }; + + const handleEdit = () => { + if (!selectedOrg) return; + updateMutation.mutate(selectedOrg); + }; + + const handleDelete = (id: string) => { + if (confirm("Are you sure you want to delete this organization?")) { + deleteMutation.mutate(id); + } + }; + + if (isLoading) { + return ( + <div className="container mx-auto py-8"> + <p className="text-muted-foreground">Loading organizations...</p> + </div> + ); + } + + return ( + <div className="container mx-auto py-8 space-y-6"> + <div className="flex items-center justify-between"> + <div> + <h1 className="text-3xl font-bold">Organizations</h1> + <p className="text-muted-foreground mt-1"> + Manage your organizations and their members + </p> + </div> + <Dialog open={isCreateOpen} onOpenChange={setIsCreateOpen}> + <DialogTrigger asChild> + <Button> + <Plus className="mr-2 h-4 w-4" /> + New Organization + </Button> + </DialogTrigger> + <DialogContent> + <DialogHeader> + <DialogTitle>Create Organization</DialogTitle> + <DialogDescription> + Add a new organization to manage + </DialogDescription> + </DialogHeader> + <div className="space-y-4 py-4"> + <div className="space-y-2"> + <Label htmlFor="name">Organization Name</Label> + <Input + id="name" + value={newOrgName} + onChange={(e) => setNewOrgName(e.target.value)} + placeholder="Acme Inc" + /> + </div> + <div className="space-y-2"> + <Label htmlFor="slug">Slug</Label> + <Input + id="slug" + value={newOrgSlug} + onChange={(e) => setNewOrgSlug(e.target.value)} + placeholder="acme-inc" + /> + </div> + </div> + <DialogFooter> + <Button variant="outline" onClick={() => setIsCreateOpen(false)}> + Cancel + </Button> + <Button onClick={handleCreate} disabled={createMutation.isPending}> + {createMutation.isPending ? "Creating..." : "Create"} + </Button> + </DialogFooter> + </DialogContent> + </Dialog> + </div> + + <Card> + <CardHeader> + <CardTitle>Your Organizations</CardTitle> + <CardDescription> + Organizations you are an administrator of + </CardDescription> + </CardHeader> + <CardContent> + {!organizations || organizations.length === 0 ? ( + <p className="text-muted-foreground text-center py-8"> + No organizations yet. Create your first one! + </p> + ) : ( + <Table> + <TableHeader> + <TableRow> + <TableHead>Name</TableHead> + <TableHead>Slug</TableHead> + <TableHead>Created</TableHead> + <TableHead className="text-right">Actions</TableHead> + </TableRow> + </TableHeader> + <TableBody> + {organizations.map((org) => ( + <TableRow key={org.id}> + <TableCell className="font-medium">{org.name}</TableCell> + <TableCell className="text-muted-foreground">{org.slug}</TableCell> + <TableCell className="text-muted-foreground"> + {new Date(org.created_at).toLocaleDateString()} + </TableCell> + <TableCell className="text-right"> + <div className="flex justify-end gap-2"> + <Button + variant="ghost" + size="icon" + onClick={() => { + setSelectedOrg(org); + setIsEditOpen(true); + }} + > + <Pencil className="h-4 w-4" /> + </Button> + <Button + variant="ghost" + size="icon" + onClick={() => handleDelete(org.id)} + > + <Trash2 className="h-4 w-4" /> + </Button> + </div> + </TableCell> + </TableRow> + ))} + </TableBody> + </Table> + )} + </CardContent> + </Card> + + {/* Edit Dialog */} + <Dialog open={isEditOpen} onOpenChange={setIsEditOpen}> + <DialogContent> + <DialogHeader> + <DialogTitle>Edit Organization</DialogTitle> + <DialogDescription> + Update organization details + </DialogDescription> + </DialogHeader> + {selectedOrg && ( + <div className="space-y-4 py-4"> + <div className="space-y-2"> + <Label htmlFor="edit-name">Organization Name</Label> + <Input + id="edit-name" + value={selectedOrg.name} + onChange={(e) => + setSelectedOrg({ ...selectedOrg, name: e.target.value }) + } + /> + </div> + <div className="space-y-2"> + <Label htmlFor="edit-slug">Slug</Label> + <Input + id="edit-slug" + value={selectedOrg.slug} + onChange={(e) => + setSelectedOrg({ ...selectedOrg, slug: e.target.value }) + } + /> + </div> + </div> + )} + <DialogFooter> + <Button variant="outline" onClick={() => setIsEditOpen(false)}> + Cancel + </Button> + <Button onClick={handleEdit} disabled={updateMutation.isPending}> + {updateMutation.isPending ? "Saving..." : "Save Changes"} + </Button> + </DialogFooter> + </DialogContent> + </Dialog> + </div> + ); +} diff --git a/packages/ui/src/pages/PlaygroundEditor.tsx b/packages/ui/src/pages/PlaygroundEditor.tsx new file mode 100644 index 00000000..d7e9fd61 --- /dev/null +++ b/packages/ui/src/pages/PlaygroundEditor.tsx @@ -0,0 +1,188 @@ +/** + * Playground for testing markdown editor insert/append/replace modes + */ + +import React, { useState, useRef } from 'react'; +import { Button } from '@/components/ui/button'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { Textarea } from '@/components/ui/textarea'; +import { Badge } from '@/components/ui/badge'; +import MarkdownEditor from '@/components/MarkdownEditorEx'; +import { toast } from 'sonner'; + +const PlaygroundEditor: React.FC = () => { + const [content, setContent] = useState('# Test Document\n\nThis is the first paragraph.\n\nThis is the second paragraph.'); + const [selectedText, setSelectedText] = useState(''); + const [fakePrompt, setFakePrompt] = useState('**NEW CONTENT**'); + const [applicationMode, setApplicationMode] = useState<'replace' | 'insert' | 'append'>('insert'); + const editorRef = useRef<any>(null); + const insertTransactionRef = useRef<{ text: string, onComplete: () => void } | null>(null); + + const applyModification = (mode: 'replace' | 'insert' | 'append', generatedText: string) => { + if (!editorRef.current) { + toast.error('Editor ref not available'); + return; + } + + const { getMarkdown, setMarkdown, insertMarkdown } = editorRef.current; + + switch (mode) { + case 'replace': + if (selectedText) { + const newContent = getMarkdown().replace(selectedText, generatedText); + setMarkdown(newContent); + toast.success('Selection replaced!'); + } else { + toast.warning('Select text to replace.'); + } + break; + + case 'append': { + const currentContent = getMarkdown(); + const newContent = currentContent ? `${currentContent}\n\n---\n\n${generatedText}` : generatedText; + setMarkdown(newContent); + toast.success('Content appended!'); + break; + } + + case 'insert': { + // 1. Set up the transaction + insertTransactionRef.current = { + text: generatedText, + onComplete: () => { + toast.success('Content inserted at cursor!'); + } + }; + + // 2. Fire the async action + insertMarkdown(`\n${generatedText}\n`); + + break; + } + } + }; + + const handleContentChange = (newContent: string) => { + setContent(newContent); + + // Check if an insert transaction is pending and if it's now complete + if (insertTransactionRef.current && newContent.includes(insertTransactionRef.current.text)) { + insertTransactionRef.current.onComplete(); + insertTransactionRef.current = null; // Clear the transaction + } + }; + + return ( + <div className="container mx-auto py-8 space-y-6"> + <Card> + <CardHeader> + <CardTitle>Markdown Editor Playground</CardTitle> + </CardHeader> + <CardContent className="space-y-4"> + {/* Mode Selection */} + <div className="space-y-2"> + <div className="flex items-center justify-between"> + <h3 className="text-sm font-semibold">Application Mode</h3> + <div className="flex gap-2"> + <Badge variant={applicationMode === 'replace' ? 'default' : 'outline'}> + Replace {selectedText ? `(${selectedText.length} chars)` : '(no selection)'} + </Badge> + <Badge variant={applicationMode === 'insert' ? 'default' : 'outline'}> + Insert + </Badge> + <Badge variant={applicationMode === 'append' ? 'default' : 'outline'}> + Append + </Badge> + </div> + </div> + <div className="grid grid-cols-3 gap-2"> + <Button + variant={applicationMode === 'replace' ? 'default' : 'outline'} + onClick={() => setApplicationMode('replace')} + disabled={!selectedText} + > + Replace + </Button> + <Button + variant={applicationMode === 'insert' ? 'default' : 'outline'} + onClick={() => setApplicationMode('insert')} + > + Insert + </Button> + <Button + variant={applicationMode === 'append' ? 'default' : 'outline'} + onClick={() => setApplicationMode('append')} + > + Append + </Button> + </div> + </div> + + {/* Fake Prompt Input */} + <div className="space-y-2"> + <label className="text-sm font-semibold">Fake Generated Content</label> + <Textarea + value={fakePrompt} + onChange={(e) => setFakePrompt(e.target.value)} + placeholder="Enter test content to insert..." + rows={2} + /> + </div> + + {/* Generate Button */} + <Button onClick={() => applyModification(applicationMode, fakePrompt)} className="w-full" size="lg"> + Apply ({applicationMode}) + </Button> + + {/* Editor */} + <div className="space-y-2"> + <div className="flex items-center justify-between"> + <label className="text-sm font-semibold">Markdown Editor</label> + <div className="text-xs text-muted-foreground"> + Content length: {content.length} | Selection: {selectedText.length} chars + </div> + </div> + <MarkdownEditor + value={content} + onChange={handleContentChange} + placeholder="Start typing..." + onSelectionChange={setSelectedText} + editorRef={editorRef} + /> + </div> + + {/* Debug Info */} + <Card className="bg-muted/30"> + <CardContent className="p-4 space-y-2"> + <h4 className="text-xs font-semibold">Debug Info</h4> + <div className="text-xs font-mono space-y-1"> + <div>Editor Ref: {editorRef.current ? '✅ Available' : '❌ Not set'}</div> + <div>insertMarkdown: {editorRef.current?.insertMarkdown ? '✅ Available' : '❌ Not available'}</div> + <div>getMarkdown: {editorRef.current?.getMarkdown ? '✅ Available' : '❌ Not available'}</div> + <div>Selected Text: {selectedText.length > 0 ? `"${selectedText.substring(0, 50)}..."` : 'None'}</div> + </div> + </CardContent> + </Card> + + {/* Instructions */} + <Card className="bg-blue-50 dark:bg-blue-950/20 border-blue-200 dark:border-blue-800"> + <CardContent className="p-4 space-y-2"> + <h4 className="text-sm font-semibold text-blue-700 dark:text-blue-300">How to Test</h4> + <ol className="text-xs text-blue-600 dark:text-blue-400 space-y-1 list-decimal list-inside"> + <li><strong>Replace</strong>: Select text in editor, click Apply</li> + <li><strong>Insert</strong>: Click anywhere in editor (cursor position), click Apply</li> + <li><strong>Append</strong>: Just click Apply (adds at end with separator)</li> + </ol> + <div className="text-xs text-blue-600 dark:text-blue-400 mt-3"> + 💡 Check the browser console for detailed logs + </div> + </CardContent> + </Card> + </CardContent> + </Card> + </div> + ); +}; + +export default PlaygroundEditor; + diff --git a/packages/ui/src/pages/PlaygroundEditorLLM.tsx b/packages/ui/src/pages/PlaygroundEditorLLM.tsx new file mode 100644 index 00000000..a4f5512d --- /dev/null +++ b/packages/ui/src/pages/PlaygroundEditorLLM.tsx @@ -0,0 +1,614 @@ +/** + * Playground for testing AITextGenerator with real LLM integration + */ + +import React, { useState, useRef, useCallback, useEffect } from 'react'; +import { Button } from '@/components/ui/button'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { Badge } from '@/components/ui/badge'; +import MarkdownEditor from '@/components/MarkdownEditorEx'; +import AITextGenerator from '@/components/AITextGenerator'; +import { getUserSecrets } from '@/components/ImageWizard/db'; +import { useAuth } from '@/hooks/useAuth'; +import { generateText, transcribeAudio, runTools } from '@/lib/openai'; +import { supabase } from '@/integrations/supabase/client'; +import { createMarkdownToolPreset } from '@/lib/markdownImageTools'; +import { toast } from 'sonner'; +import { translate } from '@/i18n'; +import OpenAI from 'openai'; +import SimpleLogViewer from '@/components/SimpleLogViewer'; + +const PlaygroundEditorLLM: React.FC = () => { + const { user } = useAuth(); + const [content, setContent] = useState('# Test Document\n\nClick in the editor to place your cursor.\n\nThen use AI to generate content at that position.'); + const [selectedText, setSelectedText] = useState(''); + + // AI Text Generator state + const [prompt, setPrompt] = useState(''); + const [promptHistory, setPromptHistory] = useState<string[]>([]); + const [historyIndex, setHistoryIndex] = useState(-1); + const [selectedProvider, setSelectedProvider] = useState('openai'); + const [selectedModel, setSelectedModel] = useState('gpt-5'); + const [imageToolsEnabled, setImageToolsEnabled] = useState(false); + const [contextMode, setContextMode] = useState<'clear' | 'selection' | 'all'>('all'); + const [applicationMode, setApplicationMode] = useState<'replace' | 'insert' | 'append'>('append'); + const [templates, setTemplates] = useState<Array<{ name: string; template: string }>>([]); + const [streamMode, setStreamMode] = useState(false); + + // Generation state + const [isGenerating, setIsGenerating] = useState(false); + const [isOptimizing, setIsOptimizing] = useState(false); + const [isRecording, setIsRecording] = useState(false); + const [isTranscribing, setIsTranscribing] = useState(false); + const [streamLogs, setStreamLogs] = useState<any[]>([]); + + const editorRef = useRef<any>(null); + const abortControllerRef = useRef<AbortController | null>(null); + const mediaRecorderRef = useRef<MediaRecorder | null>(null); + const audioChunksRef = useRef<Blob[]>([]); + const lastSelectionRef = useRef<{ isAtStart: boolean } | null>(null); + const insertTransactionRef = useRef<{ text: string, onComplete: () => void } | null>(null); + + const handleContentChange = useCallback((newContent: string) => { + setContent(newContent); + + // Check if an insert transaction is pending and if it's now complete + if (insertTransactionRef.current && newContent.includes(insertTransactionRef.current.text)) { + insertTransactionRef.current.onComplete(); + insertTransactionRef.current = null; // Clear the transaction + } + }, []); + + const handleSelectionChange = useCallback((newSelectedText: string) => { + setSelectedText(newSelectedText); + + // Simple check to see if cursor is at the start of the document + const selection = window.getSelection(); + if (selection && selection.rangeCount > 0) { + const range = selection.getRangeAt(0); + // Collapsed means no text is selected (it's a cursor) + // startOffset === 0 means the cursor is at the beginning of its container node + if (range.collapsed && range.startOffset === 0) { + // A simple heuristic: if the selection is collapsed at offset 0, + // and there's no selected text, we assume it's at the start. + // This is not perfect but good enough for this use case. + if (newSelectedText.trim() === '') { + lastSelectionRef.current = { isAtStart: true }; + return; + } + } + } + lastSelectionRef.current = { isAtStart: false }; + + }, []); + + const addToHistory = useCallback((text: string) => { + if (text.trim()) { + setPromptHistory(prev => [text, ...prev.slice(0, 49)]); + setHistoryIndex(-1); + } + }, []); + + const navigateHistory = useCallback((direction: 'up' | 'down') => { + if (direction === 'up' && historyIndex < promptHistory.length - 1) { + const newIndex = historyIndex + 1; + setHistoryIndex(newIndex); + setPrompt(promptHistory[newIndex]); + } else if (direction === 'down') { + if (historyIndex > 0) { + const newIndex = historyIndex - 1; + setHistoryIndex(newIndex); + setPrompt(promptHistory[newIndex]); + } else { + setHistoryIndex(-1); + setPrompt(''); + } + } + }, [historyIndex, promptHistory]); + + const getProviderApiKey = useCallback(async (provider: string): Promise<string | null> => { + if (!user) return null; + + // Use centralized user secrets for OpenAI + if (provider === 'openai') { + try { + const secrets = await getUserSecrets(user.id); + if (secrets && secrets.openai_api_key) { + return secrets.openai_api_key; + } + } catch (error) { + console.error('Error fetching user secrets:', error); + } + } + + try { + const { data: userProvider, error } = await supabase + .from('provider_configs') + .select('settings') + .eq('user_id', user.id) + .eq('name', provider) + .eq('is_active', true) + .single(); + + if (error || !userProvider) { + if (provider !== 'openai') { + // console.warn(\`No provider configuration found for \${provider}\`); + } + return null; // Return null silently to avoid spamming logs if just missing + } + const settings = userProvider.settings as any; + return settings?.apiKey || null; + } catch (error) { + console.error(`Error fetching API key for ${provider}:`, error); + return null; + } + }, [user]); + + const generateWithProvider = useCallback(async ( + prompt: string, + provider: string, + model: string, + signal?: AbortSignal, + onChunk?: (chunk: string) => void + ): Promise<string | null> => { + try { + switch (provider) { + case 'openai': + const openaiKey = await getProviderApiKey('openai'); + return await generateText(prompt, model, openaiKey || undefined, signal, onChunk); + + case 'openrouter': + const openrouterKey = await getProviderApiKey('openrouter'); + if (!openrouterKey) { + throw new Error('No OpenRouter API key found'); + } + + const client = new OpenAI({ + apiKey: openrouterKey, + baseURL: 'https://openrouter.ai/api/v1', + dangerouslyAllowBrowser: true, + defaultHeaders: { + 'HTTP-Referer': window.location.origin, + 'X-Title': 'PM-Pics Playground' + } + }); + + // Streaming for OpenRouter + if (onChunk) { + const stream = await client.chat.completions.create({ + model: model, + messages: [{ role: "user", content: prompt }], + stream: true, + }, { signal }); + + let fullContent = ''; + for await (const chunk of stream) { + const delta = chunk.choices[0]?.delta?.content || ''; + if (delta) { + fullContent += delta; + onChunk(delta); + } + } + return fullContent; + } + + const response = await client.chat.completions.create({ + model: model, + messages: [{ role: "user", content: prompt }] + }, { signal }); + + return response.choices[0]?.message?.content || null; + + default: + throw new Error(`Provider ${provider} not supported`); + } + } catch (error: any) { + if (error.name === 'AbortError' || error.message?.includes('aborted')) { + return null; + } + throw error; + } + }, [getProviderApiKey]); + + const handleGenerate = useCallback(async () => { + if (!editorRef.current) { + toast.error('Editor is not ready yet, please wait a moment.'); + return; + } + + if (!prompt.trim()) { + toast.error('Please enter a prompt'); + return; + } + + if (!user) { + toast.error('Please sign in to use AI features'); + return; + } + + if (streamMode) { + setStreamLogs([]); + } + + console.log('[Playground] Generate started', { + applicationMode, + contextMode, + hasSelection: !!selectedText, + contentLength: content.length, + editorRefAvailable: !!editorRef.current, + }); + + abortControllerRef.current = new AbortController(); + const signal = abortControllerRef.current.signal; + setIsGenerating(true); + addToHistory(prompt); + + try { + // Build context prompt + let contextPrompt = ''; + switch (contextMode) { + case 'clear': + contextPrompt = `${prompt}\n\nReturn ONLY raw markdown.`; + break; + case 'selection': + if (selectedText?.trim()) { + contextPrompt = `CONTEXT:\n\`\`\`\n${selectedText}\n\`\`\`\n\nREQUEST: ${prompt}\n\nReturn ONLY raw markdown.`; + } else { + contextPrompt = `${prompt}\n\nReturn ONLY raw markdown.`; + } + break; + case 'all': + if (content?.trim()) { + contextPrompt = `CONTEXT:\n\`\`\`\n${content}\n\`\`\`\n\nREQUEST: ${prompt}\n\nReturn ONLY raw markdown.`; + } else { + contextPrompt = `${prompt}\n\nReturn ONLY raw markdown.`; + } + break; + } + + let generatedText: string | null = null; + + if (imageToolsEnabled) { + const openaiKey = await getProviderApiKey('openai'); + const toolPreset = createMarkdownToolPreset(user.id, selectedModel); + + const onLog = (log: any) => { + if (streamMode) { + setStreamLogs(prev => [...prev, log]); + } + }; + + const result = await runTools({ + prompt: contextPrompt, + preset: toolPreset, + model: selectedProvider === 'openai' ? selectedModel : 'gpt-4o-mini', + apiKey: openaiKey || undefined, + onMessage: (message) => onLog({ type: 'message', data: message }), + onToolCall: (toolCall) => onLog({ type: 'tool_call', data: toolCall }), + onContent: (content) => onLog({ type: 'content_chunk', data: content }), + }); + generatedText = result.success ? result.content || null : null; + } else { + if (streamMode) { + generatedText = await generateWithProvider( + contextPrompt, + selectedProvider, + selectedModel, + signal, + (chunk) => { + setStreamLogs(prev => { + const lastLog = prev[prev.length - 1]; + // Coalesce content chunks for cleaner logging + if (lastLog && lastLog.type === 'content_chunk') { + return [...prev.slice(0, -1), { ...lastLog, data: lastLog.data + chunk }]; + } + return [...prev, { type: 'content_chunk', data: chunk }]; + }); + } + ); + } else { + generatedText = await generateWithProvider(contextPrompt, selectedProvider, selectedModel, signal); + } + } + + if (signal.aborted) return; + + if (generatedText) { + generatedText = generatedText + .replace(/^```markdown\s*\n/i, '') + .replace(/^```\s*\n/, '') + .replace(/\n```\s*$/i, '') + .trim(); + + console.log('[Playground] Generated text', { length: generatedText.length }); + + // This check is now redundant because of the guard clause, but safe to keep. + if (!editorRef.current) { + toast.error('Editor not ready'); + setIsGenerating(false); // Ensure we reset state + return; + } + + const { getMarkdown, setMarkdown, insertMarkdown } = editorRef.current; + + switch (applicationMode) { + case 'replace': + if (selectedText && selectedText.trim()) { + const newContent = getMarkdown().replace(selectedText, generatedText); + setMarkdown(newContent); + toast.success('Selection replaced!'); + setSelectedText(''); + } else { + toast.warning('Select text to replace.'); + } + break; + + case 'append': { + const currentContent = getMarkdown(); + const newContent = currentContent ? `${currentContent}\n\n---\n\n${generatedText}` : generatedText; + setMarkdown(newContent); + toast.success('Content appended!'); + break; + } + + case 'insert': { + if (insertMarkdown) { + insertTransactionRef.current = { + text: generatedText, + onComplete: () => toast.success('Content inserted at cursor!') + }; + insertMarkdown(`\n${generatedText}\n`); + setPrompt(''); + return; // Return because handleContentChange will finalize + } + // Fallback + const newContent = getMarkdown() ? `${getMarkdown()}\n${generatedText}` : generatedText; + setMarkdown(newContent); + toast.success('Content added!'); + break; + } + } + + setPrompt(''); + } else { + toast.error('No content generated'); + } + } catch (error: any) { + if (error.name === 'AbortError' || error.message?.includes('aborted')) { + return; + } + console.error('[Playground] Generation error:', error); + toast.error('Error: ' + error.message); + } finally { + abortControllerRef.current = null; + setIsGenerating(false); + } + }, [ + prompt, user, applicationMode, contextMode, selectedText, content, imageToolsEnabled, + selectedProvider, selectedModel, addToHistory, generateWithProvider, getProviderApiKey, streamMode + ]); + + const handleOptimize = useCallback(async () => { + if (!prompt.trim()) { + toast.error('Please enter a prompt to optimize'); + return; + } + + setIsOptimizing(true); + try { + const optimizationPrompt = `Optimize this prompt for better results:\n\n"${prompt}"\n\nReturn ONLY the optimized prompt.`; + const optimized = await generateWithProvider(optimizationPrompt, selectedProvider, selectedModel); + if (optimized) { + setPrompt(optimized.trim()); + toast.success('Prompt optimized!'); + } + } catch (error: any) { + console.error('Optimization error:', error); + toast.error('Error optimizing prompt'); + } finally { + setIsOptimizing(false); + } + }, [prompt, selectedProvider, selectedModel, generateWithProvider]); + + const handleCancel = useCallback(() => { + if (abortControllerRef.current) { + abortControllerRef.current.abort(); + abortControllerRef.current = null; + setIsGenerating(false); + toast.info('Generation cancelled'); + } + }, []); + + const handleMicrophoneToggle = useCallback(async () => { + if (isRecording) { + if (mediaRecorderRef.current?.state === 'recording') { + mediaRecorderRef.current.stop(); + } + return; + } + + try { + const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + const mediaRecorder = new MediaRecorder(stream); + mediaRecorderRef.current = mediaRecorder; + audioChunksRef.current = []; + + mediaRecorder.ondataavailable = (event) => { + if (event.data.size > 0) { + audioChunksRef.current.push(event.data); + } + }; + + mediaRecorder.onstop = async () => { + setIsRecording(false); + setIsTranscribing(true); + + const audioBlob = new Blob(audioChunksRef.current, { type: 'audio/webm' }); + const audioFile = new File([audioBlob], 'recording.webm', { type: 'audio/webm' }); + + try { + const transcription = await transcribeAudio(audioFile, 'whisper-1'); + if (transcription) { + setPrompt(prev => prev ? `${prev} ${transcription}` : transcription); + toast.success('Audio transcribed!'); + } else { + toast.error('Failed to transcribe audio'); + } + } catch (error: any) { + console.error('Transcription error:', error); + toast.error('Error transcribing audio'); + } finally { + setIsTranscribing(false); + stream.getTracks().forEach(track => track.stop()); + } + }; + + mediaRecorder.start(); + setIsRecording(true); + toast.info('Recording... Click again to stop'); + } catch (error: any) { + console.error('Microphone error:', error); + toast.error('Could not access microphone'); + setIsRecording(false); + } + }, [isRecording]); + + const handleSaveTemplate = useCallback(() => { + if (!prompt.trim()) { + toast.error('Please enter a prompt to save'); + return; + } + + const name = window.prompt('Enter template name:'); + if (name) { + setTemplates(prev => [...prev, { name, template: prompt }]); + toast.success('Template saved!'); + } + }, [prompt]); + + const handleDeleteTemplate = useCallback((index: number) => { + setTemplates(prev => prev.filter((_, i) => i !== index)); + toast.success('Template deleted'); + }, []); + + const handleApplyTemplate = useCallback((template: string) => { + setPrompt(template); + toast.success('Template applied'); + }, []); + + return ( + <div className="container mx-auto py-8 space-y-6"> + <Card> + <CardHeader> + <div className="flex items-center justify-between"> + <CardTitle>AITextGenerator Playground</CardTitle> + <div className="flex gap-2"> + <Badge variant="outline">Mode: {applicationMode}</Badge> + <Badge variant="outline">Context: {contextMode}</Badge> + </div> + </div> + </CardHeader> + <CardContent className="space-y-4"> + {/* Editor */} + <div className="space-y-2"> + <div className="flex items-center justify-between"> + <label className="text-sm font-semibold">Markdown Editor</label> + <div className="text-xs text-muted-foreground"> + Content: {content.length} chars | Selection: {selectedText.length} chars + </div> + </div> + <MarkdownEditor + value={content} + onChange={handleContentChange} + placeholder="Start typing..." + onSelectionChange={handleSelectionChange} + editorRef={editorRef} + /> + </div> + + {/* AITextGenerator Component */} + <div className="border-t pt-4"> + <AITextGenerator + prompt={prompt} + onPromptChange={(newPrompt) => { + setPrompt(newPrompt); + if (historyIndex !== -1) setHistoryIndex(-1); + }} + provider={selectedProvider} + model={selectedModel} + onProviderChange={setSelectedProvider} + onModelChange={setSelectedModel} + imageToolsEnabled={imageToolsEnabled} + onImageToolsChange={setImageToolsEnabled} + contextMode={contextMode} + onContextModeChange={setContextMode} + hasSelection={!!selectedText && selectedText.trim().length > 0} + hasContent={!!content && content.trim().length > 0} + applicationMode={applicationMode} + onApplicationModeChange={setApplicationMode} + streamMode={streamMode} + onStreamModeChange={setStreamMode} + templates={templates} + onApplyTemplate={handleApplyTemplate} + onSaveTemplate={handleSaveTemplate} + onDeleteTemplate={handleDeleteTemplate} + onGenerate={handleGenerate} + onOptimize={handleOptimize} + onCancel={handleCancel} + isGenerating={isGenerating} + isOptimizing={isOptimizing} + onMicrophoneToggle={handleMicrophoneToggle} + isRecording={isRecording} + isTranscribing={isTranscribing} + promptHistory={promptHistory} + historyIndex={historyIndex} + onNavigateHistory={navigateHistory} + /> + </div> + + {streamMode && <SimpleLogViewer logs={streamLogs} className="mt-4" />} + + {/* Debug Panel */} + <Card className="bg-muted/30"> + <CardContent className="p-4 space-y-2"> + <h4 className="text-xs font-semibold">Debug Info</h4> + <div className="text-xs font-mono space-y-1"> + <div>User: {user ? '✅ Signed in' : '❌ Not signed in'}</div> + <div>Editor Ref: {editorRef.current ? '✅ Available' : '❌ Not set'}</div> + <div>insertMarkdown: {editorRef.current?.insertMarkdown ? '✅ Available' : '❌ Not available'}</div> + <div>getMarkdown: {editorRef.current?.getMarkdown ? '✅ Available' : '❌ Not available'}</div> + <div>Selected Text: {selectedText.length > 0 ? `"${selectedText.substring(0, 50)}..."` : 'None'}</div> + <div>Application Mode: {applicationMode}</div> + <div>Context Mode: {contextMode}</div> + </div> + </CardContent> + </Card> + + {/* Instructions */} + <Card className="bg-blue-50 dark:bg-blue-950/20 border-blue-200 dark:border-blue-800"> + <CardContent className="p-4 space-y-2"> + <h4 className="text-sm font-semibold text-blue-700 dark:text-blue-300">How to Test</h4> + <ol className="text-xs text-blue-600 dark:text-blue-400 space-y-1 list-decimal list-inside"> + <li><strong>Sign in first</strong> to access AI providers</li> + <li><strong>Configure providers</strong> at /settings/providers if needed</li> + <li><strong>Select provider/model</strong> from Settings panel</li> + <li><strong>Choose context mode</strong>: Clear, Selection, or All</li> + <li><strong>Choose application mode</strong>: Replace, Insert, or Append</li> + <li><strong>Enter prompt</strong> and click Generate</li> + <li><strong>Watch console</strong> for detailed logs</li> + </ol> + <div className="text-xs text-blue-600 dark:text-blue-400 mt-3 space-y-1"> + <div>💡 <strong>Replace</strong>: Select text in editor first</div> + <div>💡 <strong>Insert</strong>: Click in editor to place cursor</div> + <div>💡 <strong>Append</strong>: Adds at end with --- separator</div> + </div> + </CardContent> + </Card> + </CardContent> + </Card> + </div> + ); +}; + +export default PlaygroundEditorLLM; + diff --git a/packages/ui/src/pages/PlaygroundImageEditor.tsx b/packages/ui/src/pages/PlaygroundImageEditor.tsx new file mode 100644 index 00000000..9ab68b81 --- /dev/null +++ b/packages/ui/src/pages/PlaygroundImageEditor.tsx @@ -0,0 +1,498 @@ + +import React, { useState, useRef, useEffect } from 'react'; +import { Button } from '@/components/ui/button'; +import { Card } from '@/components/ui/card'; +import { ImagePickerDialog } from '@/components/widgets/ImagePickerDialog'; +import { RotateCw, RotateCcw, Crop as CropIcon, Download, Sliders, Image as ImageIcon, X, Check, Save } from 'lucide-react'; +import { supabase } from '@/integrations/supabase/client'; +import { useAuth } from '@/hooks/useAuth'; +import { useToast } from '@/components/ui/use-toast'; +import { cn } from '@/lib/utils'; +import { Slider } from '@/components/ui/slider'; +import { uploadImage } from '@/lib/uploadUtils'; + +const PlaygroundImageEditor = () => { + const [pickerOpen, setPickerOpen] = useState(false); + const [sourceImage, setSourceImage] = useState<string | null>(null); + const [previewUrl, setPreviewUrl] = useState<string | null>(null); + const [selectedPictureId, setSelectedPictureId] = useState<string | null>(null); + const [loading, setLoading] = useState(false); + const { toast } = useToast(); + const { user } = useAuth(); + + const containerRef = useRef<HTMLDivElement>(null); + const imageRef = useRef<HTMLImageElement>(null); + + // Edit State + const [mode, setMode] = useState<'view' | 'crop'>('view'); + + // Pending Transformations (applied on Save/Download or incrementally?) + // For "playground" usually we want immediate feedback, but for crop we need a "mode". + // Let's accumulate operations. + + // Actually, to keep it simple and robust: + // 1. Source Image is the "Base". + // 2. We apply operations to get "Preview". + // 3. IF we crop, we are defining a rectangle relative to the CURRENT Preview? Or always original? + // Standard editors usually work on the "current visual state". + // But sending "chain of ops" is cleaner for backend. + // Let's try: Maintain a list of operations. + // BUT: Cropping visually on a rotated image is hard math-wise if we just pile ops. + // Easier: "Apply" an operation => It becomes the new "Source" (conceptually or physically). + // Server returns new image -> That becomes new source. + // This avoids complex client-side coordinate mapping through rotations. + + const handleSelectImage = async (pictureId: string) => { + setLoading(true); + setPickerOpen(false); + try { + const { data, error } = await supabase + .from('pictures') + .select('*') + .eq('id', pictureId) + .single(); + + if (error) throw error; + + setSelectedPictureId(pictureId); + setSourceImage(data.image_url); + setPreviewUrl(data.image_url); + setMode('view'); + } catch (err: any) { + toast({ + title: "Error loading image", + description: err.message, + variant: "destructive" + }); + } finally { + setLoading(false); + } + }; + + const executeOperation = async (ops: any[]) => { + if (!previewUrl) return; // Use previewUrl as source for next step? Or always keep original source? + // If we want to support "Undo", we should keep original + ops list. + // If we want "Apply and Commit", we replace source. + // Let's go with "Commit immediately" for this simple playground to avoid state hell. + // So: Current Preview -> Apply Op -> New Preview. + + setLoading(true); + try { + // Fetch current preview as blob to send as base + const response = await fetch(previewUrl); + const blob = await response.blob(); + const file = new File([blob], "source.jpg", { type: blob.type }); + + const formData = new FormData(); + formData.append('file', file); + formData.append('operations', JSON.stringify(ops)); + + const serverUrl = import.meta.env.VITE_SERVER_IMAGE_API_URL || 'http://192.168.1.11:3333'; + const res = await fetch(`${serverUrl}/api/images/transform`, { + method: 'POST', + body: formData + }); + + if (!res.ok) throw new Error(await res.text()); + + const resultBlob = await res.blob(); + const resultUrl = URL.createObjectURL(resultBlob); + + // Update state + setPreviewUrl(resultUrl); + setSourceImage(resultUrl); // Commit functionality + + toast({ title: "Applied" }); + + } catch (err: any) { + toast({ + title: "Operation failed", + description: err.message, + variant: "destructive" + }); + } finally { + setLoading(false); + } + }; + + const handleRotate = (angle: number) => { + executeOperation([{ type: 'rotate', angle }]); + }; + + const handleSave = async () => { + if (!previewUrl || !selectedPictureId || !user) return; + setLoading(true); + + try { + // 1. Get blob and convert to File + const response = await fetch(previewUrl); + const blob = await response.blob(); + const file = new File([blob], "edited.jpg", { type: "image/jpeg" }); + + // 2. Upload using shared utility (handles RLS paths and proxy resizing) + const { publicUrl } = await uploadImage(file, user.id); + + // 3. Update Database Record + const { error: dbError } = await supabase + .from('pictures') + .update({ + image_url: publicUrl, + updated_at: new Date().toISOString() + }) + .eq('id', selectedPictureId); + + if (dbError) throw dbError; + + setSourceImage(publicUrl); + toast({ title: "Image Saved", description: "Source image updated successfully." }); + + } catch (err: any) { + console.error(err); + toast({ + title: "Save failed", + description: err.message, + variant: "destructive" + }); + } finally { + setLoading(false); + } + }; + + // --- Visual Cropper State --- + const [cropRect, setCropRect] = useState<{ x: number, y: number, w: number, h: number } | null>(null); + const [isDragging, setIsDragging] = useState(false); + const [dragStart, setDragStart] = useState<{ x: number, y: number } | null>(null); + const [dragAction, setDragAction] = useState<'move' | 'nw' | 'ne' | 'sw' | 'se' | 'create' | null>(null); + const [aspectRatio, setAspectRatio] = useState<number | null>(null); // null = Free + + const PRESETS = [ + { label: 'Free', value: null }, + { label: 'Original', value: 'original' }, + { label: 'Square', value: 1 }, + { label: '9:16', value: 9 / 16 }, + { label: '16:9', value: 16 / 9 }, + { label: '4:5', value: 4 / 5 }, + { label: '5:4', value: 5 / 4 }, + { label: '3:4', value: 3 / 4 }, + { label: '4:3', value: 4 / 3 }, + ]; + + // Initialize crop rect when entering crop mode + useEffect(() => { + if (mode === 'crop' && imageRef.current) { + const { width, height } = imageRef.current.getBoundingClientRect(); + const w = width * 0.8; + const h = height * 0.8; + setCropRect({ + x: (width - w) / 2, + y: (height - h) / 2, + w, h + }); + } + }, [mode]); + + const getMousePos = (e: React.MouseEvent | MouseEvent) => { + if (!imageRef.current) return { x: 0, y: 0 }; + const rect = imageRef.current.getBoundingClientRect(); + return { + x: e.clientX - rect.left, + y: e.clientY - rect.top + }; + }; + + const handleMouseDown = (e: React.MouseEvent) => { + if (mode !== 'crop' || !cropRect) return; + e.preventDefault(); + const { x, y } = getMousePos(e); + + // Check handles first (simplified: corners) + const handleSize = 20; + const r = cropRect; + + // Hit testing + if (Math.abs(x - r.x) < handleSize && Math.abs(y - r.y) < handleSize) setDragAction('nw'); + else if (Math.abs(x - (r.x + r.w)) < handleSize && Math.abs(y - r.y) < handleSize) setDragAction('ne'); + else if (Math.abs(x - r.x) < handleSize && Math.abs(y - (r.y + r.h)) < handleSize) setDragAction('sw'); + else if (Math.abs(x - (r.x + r.w)) < handleSize && Math.abs(y - (r.y + r.h)) < handleSize) setDragAction('se'); + else if (x > r.x && x < r.x + r.w && y > r.y && y < r.y + r.h) setDragAction('move'); + else setDragAction('create'); // Click outside to create new? Or just ignore? Let's ignore for now to keep it simple. + + setIsDragging(true); + setDragStart({ x, y }); + }; + + const handleMouseMove = (e: React.MouseEvent) => { + if (!isDragging || !dragStart || !cropRect || !imageRef.current) return; + const { x, y } = getMousePos(e); + const dx = x - dragStart.x; + const dy = y - dragStart.y; + + const imgW = imageRef.current.offsetWidth; + const imgH = imageRef.current.offsetHeight; + + setCropRect(prev => { + if (!prev) return null; + let next = { ...prev }; + + if (dragAction === 'move') { + next.x = Math.max(0, Math.min(imgW - next.w, prev.x + dx)); + next.y = Math.max(0, Math.min(imgH - next.h, prev.y + dy)); + } else { + // Resize logic with aspect ratio + let newW = next.w; + let newH = next.h; + let newX = next.x; + let newY = next.y; + + if (dragAction === 'se') { + newW = Math.max(20, prev.w + dx); + newH = Math.max(20, prev.h + dy); + } else if (dragAction === 'sw') { + newW = prev.w - dx; + newX = Math.min(prev.x + prev.w - 20, prev.x + dx); + newH = Math.max(20, prev.h + dy); + } else if (dragAction === 'ne') { + newW = Math.max(20, prev.w + dx); + newH = prev.h - dy; + newY = Math.min(prev.y + prev.h - 20, prev.y + dy); + } else if (dragAction === 'nw') { + newW = prev.w - dx; + newX = Math.min(prev.x + prev.w - 20, prev.x + dx); + newH = prev.h - dy; + newY = Math.min(prev.y + prev.h - 20, prev.y + dy); + } + + // Apply Ratio + if (aspectRatio !== null) { + if (dragAction === 'se' || dragAction === 'sw') { + newH = newW / aspectRatio; + } else { + newW = newH * aspectRatio; + if (dragAction === 'nw' || dragAction === 'sw') newX = prev.x + prev.w - newW; + } + // This simple logic might drift; usually you lock one axis based on dominance + // Better: Always drive by Width for horizontalish moves? + // Let's stick to simple: if dragging corner, calculate H from W (or vice versa) + // For SE/SW (bottom handles), let X/Width drive Height. + // For NE/NW (top handles), let Y/Height drive Width (or X/Width drive Y/Height?) + // Let's enforce: Width determines Height for all. + newH = newW / aspectRatio; + + if (dragAction === 'nw') { + newY = prev.y + prev.h - newH; + newX = prev.x + prev.w - newW; + } else if (dragAction === 'ne') { + newY = prev.y + prev.h - newH; + } + } + + next.w = Math.max(20, newW); + next.h = Math.max(20, newH); + next.x = newX; + next.y = newY; + } + + return next; + }); + + setDragStart({ x, y }); + }; + + const handleMouseUp = () => { + setIsDragging(false); + setDragAction(null); + }; + + const applyCrop = () => { + if (!cropRect || !imageRef.current) return; + + // Calculate actual crop relative to natural image size + // Visual Rect -> Percentage -> Natural Size + const displayRect = imageRef.current.getBoundingClientRect(); + const scaleX = imageRef.current.naturalWidth / displayRect.width; + const scaleY = imageRef.current.naturalHeight / displayRect.height; + + let realX = Math.round(cropRect.x * scaleX); + let realY = Math.round(cropRect.y * scaleY); + let realW = Math.round(cropRect.w * scaleX); + let realH = Math.round(cropRect.h * scaleY); + + // Clamp values to ensure they are within bounds and non-negative + // Sharp throws error if x/y are negative or if box is outside image + realX = Math.max(0, realX); + realY = Math.max(0, realY); + realW = Math.max(1, Math.min(realW, imageRef.current.naturalWidth - realX)); + realH = Math.max(1, Math.min(realH, imageRef.current.naturalHeight - realY)); + + const realCrop = { + x: realX, + y: realY, + width: realW, + height: realH + }; + + executeOperation([{ type: 'crop', ...realCrop }]); + setMode('view'); + }; + + const downloadImage = () => { + if (previewUrl) { + const a = document.createElement('a'); + a.href = previewUrl; + a.download = 'edited-image.jpg'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + } + }; + + return ( + <div className="flex flex-col h-[calc(100vh-4rem)] bg-background relative overflow-hidden"> + + {/* Workspace */} + <div + className="flex-1 flex items-center justify-center p-8 bg-zinc-950/50 relative select-none" + onMouseMove={handleMouseMove} + onMouseUp={handleMouseUp} + onMouseLeave={handleMouseUp} + > + {previewUrl ? ( + <div className="relative group"> + <img + ref={imageRef} + src={previewUrl} + alt="Work" + className="max-h-[80vh] max-w-full object-contain pointer-events-none" + draggable={false} + onDragStart={(e) => e.preventDefault()} + /> + + {/* Crop Overlay */} + {mode === 'crop' && cropRect && ( + <div + className="absolute border-2 border-white shadow-[0_0_0_9999px_rgba(0,0,0,0.5)] cursor-move" + style={{ + left: cropRect.x, + top: cropRect.y, + width: cropRect.w, + height: cropRect.h + }} + onMouseDown={handleMouseDown} + > + {/* Crop Handles */} + <div className="absolute -top-1 -left-1 w-3 h-3 bg-white border border-black cursor-nw-resize" /> + <div className="absolute -top-1 -right-1 w-3 h-3 bg-white border border-black cursor-ne-resize" /> + <div className="absolute -bottom-1 -left-1 w-3 h-3 bg-white border border-black cursor-sw-resize" /> + <div className="absolute -bottom-1 -right-1 w-3 h-3 bg-white border border-black cursor-se-resize" /> + + {/* Grid Lines (3x3) */} + <div className="absolute top-1/3 left-0 right-0 h-px bg-white/30 pointer-events-none" /> + <div className="absolute top-2/3 left-0 right-0 h-px bg-white/30 pointer-events-none" /> + <div className="absolute left-1/3 top-0 bottom-0 w-px bg-white/30 pointer-events-none" /> + <div className="absolute left-2/3 top-0 bottom-0 w-px bg-white/30 pointer-events-none" /> + </div> + )} + </div> + ) : ( + <div className="text-muted-foreground flex flex-col items-center"> + <ImageIcon className="w-16 h-16 mb-4 opacity-20" /> + <p>Select an image to start editing</p> + <Button variant="outline" className="mt-4" onClick={() => setPickerOpen(true)}> + Open Library + </Button> + </div> + )} + </div> + + {/* Floating Toolbar */} + {previewUrl && ( + <div className="absolute bottom-8 left-1/2 -translate-x-1/2 z-10 flex flex-col gap-2 items-center w-full max-w-2xl px-4"> + {mode === 'crop' && ( + <div className="bg-background/80 backdrop-blur-md border rounded-full shadow-xl px-2 py-1 flex items-center gap-1 overflow-x-auto max-w-full scrollbar-hide"> + {PRESETS.map(p => ( + <Button + key={p.label} + variant={aspectRatio === (p.value === 'original' ? (imageRef.current ? imageRef.current.width / imageRef.current.height : null) : p.value) ? "secondary" : "ghost"} + size="sm" + onClick={() => { + if (p.value === 'original' && imageRef.current) { + setAspectRatio(imageRef.current.width / imageRef.current.height); + } else { + setAspectRatio(p.value as number | null); + } + // Reset rect to match new ratio? Or just enforce on next drag? + // Usually better to snap immediately. + if (cropRect && imageRef.current) { + const ratio = p.value === 'original' ? (imageRef.current.width / imageRef.current.height) : p.value as number; + if (ratio) { + const newH = cropRect.w / ratio; + setCropRect({ ...cropRect, h: newH }); + } + } + }} + className="text-xs h-8 px-2 whitespace-nowrap" + > + {p.label} + </Button> + ))} + </div> + )} + + <div className="bg-background/80 backdrop-blur-md border rounded-full shadow-xl px-4 py-2 flex items-center gap-2"> + + {mode === 'view' ? ( + <> + <Button variant="ghost" size="icon" onClick={() => setPickerOpen(true)} title="Change Image"> + <ImageIcon className="w-5 h-5" /> + </Button> + <div className="w-px h-6 bg-border mx-1" /> + <Button variant="ghost" size="icon" onClick={() => setMode('crop')} title="Crop"> + <CropIcon className="w-5 h-5" /> + </Button> + <Button variant="ghost" size="icon" onClick={() => handleRotate(-90)} title="Rotate CCW"> + <RotateCcw className="w-5 h-5" /> + </Button> + <Button variant="ghost" size="icon" onClick={() => handleRotate(90)} title="Rotate CW"> + <RotateCw className="w-5 h-5" /> + </Button> + <div className="w-px h-6 bg-border mx-1" /> + <Button variant="ghost" size="icon" onClick={handleSave} disabled={!selectedPictureId} title="Save (Overwrite)"> + <Save className="w-5 h-5" /> + </Button> + <Button variant="ghost" size="icon" onClick={downloadImage} title="Download"> + <Download className="w-5 h-5" /> + </Button> + </> + ) : ( + // Crop Mode Toolbar + <> + <Button variant="ghost" size="icon" onClick={() => setMode('view')} className="text-muted-foreground"> + <X className="w-5 h-5" /> + </Button> + <span className="text-sm font-medium px-2">Crop Mode</span> + <Button variant="default" size="icon" className="rounded-full" onClick={applyCrop}> + <Check className="w-5 h-5" /> + </Button> + </> + )} + + </div> + </div> + )} + + {loading && ( + <div className="absolute inset-0 bg-background/50 flex items-center justify-center z-50 backdrop-blur-sm"> + <div className="animate-spin rounded-full h-8 w-8 border-b-2 border-primary"></div> + </div> + )} + + <ImagePickerDialog + isOpen={pickerOpen} + onClose={() => setPickerOpen(false)} + onSelect={handleSelectImage} + /> + </div> + ); +}; + +export default PlaygroundImageEditor; diff --git a/packages/ui/src/pages/PlaygroundImages.tsx b/packages/ui/src/pages/PlaygroundImages.tsx new file mode 100644 index 00000000..4fbe99ec --- /dev/null +++ b/packages/ui/src/pages/PlaygroundImages.tsx @@ -0,0 +1,320 @@ +import React, { useState, useRef } from 'react'; +import ResponsiveImage, { ResponsiveData } from '@/components/ResponsiveImage'; +import { BackgroundImage } from '@/components/BackgroundImage'; +import { Button } from '@/components/ui/button'; +import { Input } from '@/components/ui/input'; +import { Label } from '@/components/ui/label'; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from '@/components/ui/card'; +import { Slider } from '@/components/ui/slider'; +import { Maximize2, Minimize2 } from 'lucide-react'; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; + +const PlaygroundImages = () => { + const [urlInput, setUrlInput] = useState(''); + const [selectedFile, setSelectedFile] = useState<File | null>(null); + const [activeImage, setActiveImage] = useState<string | File | null>(null); + const [sizesInput, setSizesInput] = useState('[180, 640, 1024]'); + const [formatsInput, setFormatsInput] = useState('["avif", "webp"]'); + const [sizesAttrInput, setSizesAttrInput] = useState('100vw'); + const [loadedSrc, setLoadedSrc] = useState<string>(''); + const [containerWidth, setContainerWidth] = useState<number>(100); + const [isFullscreen, setIsFullscreen] = useState(false); + const [refreshKey, setRefreshKey] = useState(0); + const [imageData, setImageData] = useState<ResponsiveData | null>(null); + const [selectedRegularUrl, setSelectedRegularUrl] = useState<string>(''); + const [isBodyBackground, setIsBodyBackground] = useState(false); + const stylesRef = useRef<HTMLStyleElement | null>(null); + const containerRef = useRef<HTMLDivElement>(null); + + const handleUrlSubmit = (e: React.FormEvent) => { + e.preventDefault(); + if (urlInput) { + setActiveImage(urlInput); + setSelectedFile(null); + setRefreshKey(prev => prev + 1); + } + }; + + const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => { + const file = e.target.files?.[0]; + if (file) { + setSelectedFile(file); + setActiveImage(file); + setUrlInput(''); + } + }; + + const getSizes = () => { + try { + return JSON.parse(sizesInput); + } catch { + return undefined; + } + }; + + const getFormats = () => { + try { + return JSON.parse(formatsInput); + } catch { + return undefined; + } + }; + + const toggleFullscreen = async () => { + if (!containerRef.current) return; + + if (!document.fullscreenElement) { + try { + await containerRef.current.requestFullscreen(); + setIsFullscreen(true); + } catch (err) { + console.error("Error attempting to enable fullscreen:", err); + } + } else { + if (document.exitFullscreen) { + await document.exitFullscreen(); + setIsFullscreen(false); + } + } + }; + + // Listen for fullscreen change events (ESC key) + React.useEffect(() => { + const handleFullscreenChange = () => { + setIsFullscreen(!!document.fullscreenElement); + }; + document.addEventListener('fullscreenchange', handleFullscreenChange); + return () => document.removeEventListener('fullscreenchange', handleFullscreenChange); + }, []); + + return ( + <div className="container mx-auto py-8 space-y-8"> + <Card> + <CardHeader> + <CardTitle>Responsive Image Playground</CardTitle> + <CardDescription>Test the responsive image service with URLs or local file uploads.</CardDescription> + </CardHeader> + <CardContent className="space-y-6"> + <div className="grid grid-cols-1 gap-6"> + <div className="space-y-4"> + <div className="space-y-2"> + <Label htmlFor="url-input">Image URL</Label> + <form onSubmit={handleUrlSubmit} className="flex gap-2"> + <Input + id="url-input" + placeholder="https://example.com/image.jpg" + value={urlInput} + onChange={(e) => setUrlInput(e.target.value)} + /> + <Button type="submit">Load</Button> + </form> + </div> + <div className="relative"> + <div className="absolute inset-0 flex items-center"> + <span className="w-full border-t" /> + </div> + <div className="relative flex justify-center text-xs uppercase"> + <span className="bg-background px-2 text-muted-foreground">Or</span> + </div> + </div> + <div className="space-y-2"> + <Label htmlFor="file-upload">Upload File</Label> + <Input + id="file-upload" + type="file" + accept="image/*" + onChange={handleFileChange} + /> + </div> + + <div className="space-y-2"> + <Label htmlFor="sizes-config">Sizes (JSON array)</Label> + <Input + id="sizes-config" + value={sizesInput} + onChange={(e) => setSizesInput(e.target.value)} + /> + </div> + <div className="space-y-2"> + <Label htmlFor="formats-config">Formats (JSON array)</Label> + <Input + id="formats-config" + value={formatsInput} + onChange={(e) => setFormatsInput(e.target.value)} + /> + </div> + + <div className="space-y-2"> + <Label htmlFor="sizes-attr">Sizes Attribute (CSS Media)</Label> + <Input + id="sizes-attr" + value={sizesAttrInput} + onChange={(e) => setSizesAttrInput(e.target.value)} + placeholder="(max-width: 600px) 100vw, 50vw" + /> + </div> + + <div className="space-y-2 pt-4 border-t flex items-end gap-4"> + <div className="flex-1"> + <Label>Container Width: {containerWidth}%</Label> + <Slider + value={[containerWidth]} + onValueChange={(vals) => setContainerWidth(vals[0])} + min={10} + max={100} + step={1} + disabled={isFullscreen} + /> + </div> + <Button + variant="outline" + size="icon" + onClick={toggleFullscreen} + title="Toggle Fullscreen" + > + {isFullscreen ? <Minimize2 className="h-4 w-4" /> : <Maximize2 className="h-4 w-4" />} + </Button> + </div> + </div> + + <div className="flex flex-col items-center justify-center border rounded-lg p-4 bg-muted/20 min-h-[300px]"> + {activeImage ? ( + <div className="w-full h-full flex flex-col items-center"> + <div className="flex justify-between w-full mb-2"> + <p className="text-sm font-medium text-muted-foreground">Result:</p> + </div> + + <div + ref={containerRef} + className={`transition - all duration - 200 ease -in -out border - 2 border - dashed border - primary / 20 rounded - lg p - 1 ${isFullscreen ? 'bg-black flex items-center justify-center border-none p-0' : ''} `} + style={{ width: isFullscreen ? '100%' : `${containerWidth}% `, height: isFullscreen ? '100vh' : 'auto' }} + > + <ResponsiveImage + key={refreshKey} + src={activeImage} + alt="Playground test" + className={`rounded shadow - md block ${isFullscreen ? 'max-h-screen w-auto max-w-full' : 'w-full h-auto'} `} + responsiveSizes={getSizes()} + formats={getFormats()} + sizes={sizesAttrInput} + onLoad={(e) => { + const img = e.target as HTMLImageElement; + setLoadedSrc(img.currentSrc); + }} + onDataLoaded={setImageData} + /> + </div> + + <div className="text-xs text-muted-foreground mt-4 space-y-2 text-center w-full"> + <p>Adjust width slider to test responsiveness.</p> + {loadedSrc && ( + <div className="p-2 bg-muted rounded border break-all text-left"> + <span className="font-bold block mb-1">Currently loaded:</span> + <span className="font-mono text-[10px]">{loadedSrc}</span> + </div> + )} + </div> + </div> + ) : ( + <div className="text-muted-foreground">Select an image to preview</div> + )} + </div> + </div> + + {imageData && ( + <Card> + <CardHeader> + <CardTitle>Regular Image Tag Preview</CardTitle> + <CardDescription>Preview a specific fixed-width version using a standard <img> tag.</CardDescription> + </CardHeader> + <CardContent className="space-y-4"> + <div className="flex gap-4 items-end"> + <div className="space-y-2 flex-1"> + <Label>Select Variant</Label> + <Select onValueChange={setSelectedRegularUrl}> + <SelectTrigger> + <SelectValue placeholder="Select a version..." /> + </SelectTrigger> + <SelectContent> + {imageData.sources.flatMap(s => + s.srcset.split(', ').map(part => { + const [url, width] = part.split(' '); + const key = `${s.type} - ${width || 'original'} `; + return { key, url, label: `${key} (${url.split('/').pop()?.slice(0, 8)}...)` }; + }) + ).map((item) => ( + <SelectItem key={item.key} value={item.url}> + {item.label} + </SelectItem> + ))} + </SelectContent> + </Select> + </div> + </div> + {selectedRegularUrl && ( + <div className="border rounded-lg p-4 bg-muted/20 flex flex-col items-center"> + <img src={selectedRegularUrl} alt="Regular preview" className="max-w-full h-auto rounded shadow-sm" /> + <div className="mt-2 p-2 bg-muted rounded border text-xs break-all w-full"> + <code><img src="{selectedRegularUrl}" /></code> + </div> + </div> + )} + </CardContent> + </Card> + )} + + <Card> + <CardHeader> + <CardTitle>BackgroundImage Component</CardTitle> + <CardDescription>Responsive background image with AVIF/WebP support via CSS.</CardDescription> + </CardHeader> + <CardContent> + <div className="border rounded-lg p-4 bg-muted/20"> + <p className="mb-4 text-sm text-muted-foreground">Resize the browser window or inspect elements to verify format switching (requires html class injection).</p> + {activeImage && ( + <BackgroundImage + src={activeImage} + className="w-full h-[400px] rounded-lg shadow-inner flex items-center justify-center text-white font-bold text-2xl drop-shadow-md border bg-gray-200" + sizes={sizesAttrInput} + responsiveSizes={getSizes()} + formats={getFormats()} + > + Background Content + </BackgroundImage> + )} + <div className="mt-4 flex justify-end"> + <Button + variant={isBodyBackground ? "destructive" : "secondary"} + onClick={() => setIsBodyBackground(!isBodyBackground)} + disabled={!activeImage} + > + {isBodyBackground ? "Remove Body Background" : "Set as Page Background"} + </Button> + </div> + {!activeImage && <p className="text-muted-foreground">Select an image above to test.</p>} + </div> + </CardContent> + </Card> + </CardContent> + </Card> + + {isBodyBackground && activeImage && ( + <BackgroundImage + src={activeImage} + className="fixed inset-0 z-[-1] min-h-screen w-full" + sizes="100vw" + responsiveSizes={getSizes()} + formats={getFormats()} + /> + )} + </div> + ); +}; + +export default PlaygroundImages; diff --git a/packages/ui/src/pages/Post.tsx b/packages/ui/src/pages/Post.tsx new file mode 100644 index 00000000..db6153e3 --- /dev/null +++ b/packages/ui/src/pages/Post.tsx @@ -0,0 +1,1109 @@ +import { useState, useEffect, useRef, Suspense, lazy } from "react"; +import { useParams, useNavigate, useLocation, useSearchParams } from "react-router-dom"; +import { useAuth } from "@/hooks/useAuth"; +import { Image as ImageIcon, Wand2, ArrowUp, ArrowDown, Plus, Save, X, Edit3, Heart, MessageCircle, Maximize, User, Download, Share2, ArrowLeft, Trash2, Map, MoreVertical, FileText, LayoutGrid, StretchHorizontal, Youtube, Music } from 'lucide-react'; +import { Button } from "@/components/ui/button"; +import { toast } from "sonner"; +import { usePostNavigation } from "@/hooks/usePostNavigation"; +import { useWizardContext } from "@/hooks/useWizardContext"; +import { T, translate } from "@/i18n"; +import { isVideoType } from "@/lib/mediaRegistry"; +import { getYouTubeId, getTikTokId, updateMediaPositions, getVideoUrlWithResolution } from "./Post/utils"; +import { YouTubeDialog } from "./Post/components/YouTubeDialog"; +import { TikTokDialog } from "./Post/components/TikTokDialog"; +import { ArticleRenderer } from "./Post/renderers/ArticleRenderer"; +import UserPage from "@/pages/UserPage"; +import { ThumbsRenderer } from "./Post/renderers/ThumbsRenderer"; +import { CompactRenderer } from "./Post/renderers/CompactRenderer"; +import { usePostActions } from "./Post/usePostActions"; +import { exportMarkdown, downloadMediaItem } from "./Post/PostActions"; +import { DeleteDialog } from "./Post/components/DeleteDialogs"; +import '@vidstack/react/player/styles/default/theme.css'; +import '@vidstack/react/player/styles/default/layouts/video.css'; + +// New Modules +import { PostMediaItem as MediaItem, PostItem, UserProfile } from "./Post/types"; +import * as db from "./Post/db"; +import { ImageFile, MediaType } from "@/types"; +import { uploadInternalVideo } from "@/utils/uploadUtils"; + + +// Heavy Components - Lazy Loaded +const ImagePickerDialog = lazy(() => import("@/components/widgets/ImagePickerDialog").then(module => ({ default: module.ImagePickerDialog }))); +const ImageWizard = lazy(() => import("@/components/ImageWizard")); +const EditImageModal = lazy(() => import("@/components/EditImageModal")); +const EditVideoModal = lazy(() => import("@/components/EditVideoModal")); +const SmartLightbox = lazy(() => import("./Post/components/SmartLightbox")); + +interface PostProps { + postId?: string; + embedded?: boolean; + className?: string; +} + +const Post = ({ postId: propPostId, embedded = false, className }: PostProps) => { + const { id: paramId } = useParams<{ id: string }>(); + const id = propPostId || paramId; + const [searchParams, setSearchParams] = useSearchParams(); + const navigate = useNavigate(); + + const { user } = useAuth(); + const { navigationData, setNavigationData, preloadImage } = usePostNavigation(); + const { setWizardImage } = useWizardContext(); + + // ... state ... + const [post, setPost] = useState<PostItem | null>(null); + const [mediaItems, setMediaItems] = useState<MediaItem[]>([]); + const [mediaItem, setMediaItem] = useState<MediaItem | null>(null); // Current displaying item + + // ... other state ... + const [isLiked, setIsLiked] = useState(false); + const [likesCount, setLikesCount] = useState(0); + const [loading, setLoading] = useState(true); + const [showEditModal, setShowEditModal] = useState(false); + const [lastTap, setLastTap] = useState(0); + const [showLightbox, setShowLightbox] = useState(false); + const [isPublishing, setIsPublishing] = useState(false); + const [versionImages, setVersionImages] = useState<ImageFile[]>([]); + // Don't calculate currentImageIndex here yet, wait for render or use memo + const [authorProfile, setAuthorProfile] = useState<UserProfile | null>(null); + + const [youTubeUrl, setYouTubeUrl] = useState(''); + const [tikTokUrl, setTikTokUrl] = useState(''); + + // NOTE: llm hook removed from here, now inside SmartLightbox + + const isVideo = isVideoType(mediaItem?.type); + + // Initialize viewMode from URL parameter + const [viewMode, setViewMode] = useState<'compact' | 'article' | 'thumbs'>(() => { + const viewParam = searchParams.get('view'); + if (viewParam === 'article' || viewParam === 'compact' || viewParam === 'thumbs') { + return viewParam; + } + return 'compact'; + }); + + + + // Render Page Content if it's an internal page + + + // Calculate index safely + const currentImageIndex = mediaItems.findIndex(item => item.id === mediaItem?.id); + + // Sync state to URL + // Sync state to URL + useEffect(() => { + // Only update view parameter + const newParams = new URLSearchParams(searchParams); + + // Always sync view mode + newParams.set('view', viewMode); + + // Remove selected if it exists (cleanup) or just ignore it + newParams.delete('selected'); + + const currentView = searchParams.get('view'); + if (currentView !== viewMode) { + setSearchParams(newParams, { replace: true }); + } + }, [viewMode]); + + + // Sync URL to state (on mount / params change) + useEffect(() => { + const viewParam = searchParams.get('view'); + + if (viewParam === 'article' || viewParam === 'compact' || viewParam === 'thumbs') { + setViewMode(viewParam as any); + } + }, [searchParams]); + + const [removedItemIds, setRemovedItemIds] = useState<Set<string>>(new Set()); + + // Inline Editor State + const [isEditMode, setIsEditMode] = useState(false); + const [localPost, setLocalPost] = useState<{ title: string; description: string } | null>(null); + const [localMediaItems, setLocalMediaItems] = useState<any[]>([]); + const [showGalleryPicker, setShowGalleryPicker] = useState(false); + const [showAIWizard, setShowAIWizard] = useState(false); + const insertIndexRef = useRef<number>(0); + + const isOwner = user?.id === mediaItem?.user_id; + + const videoPosterUrl = (isVideo && mediaItem?.thumbnail_url) + ? (mediaItem.image_url.includes('/api/videos/') + ? mediaItem.thumbnail_url + : `${mediaItem.thumbnail_url}?width=1280&height=720&fit_mode=preserve&time=0`) + : undefined; + + const videoPlaybackUrl = (isVideo && mediaItem?.image_url) ? getVideoUrlWithResolution(mediaItem.image_url) : undefined; + + useEffect(() => { + const savedMode = localStorage.getItem('postViewMode'); + if (savedMode === 'compact' || savedMode === 'article' || savedMode === 'thumbs') { + setViewMode(savedMode as any); + } else if (post?.settings?.display) { + setViewMode(post.settings.display); + } + }, [post]); + + const handleViewMode = (mode: 'compact' | 'article' | 'thumbs') => { + setViewMode(mode); + // LocalStorage backup removed to favor URL matching + // localStorage.setItem('postViewMode', mode); + }; + + const handleRemoveFromPost = (index: number) => { + const itemToRemove = localMediaItems[index]; + if (!itemToRemove) return; + setRemovedItemIds(prev => new Set(prev).add(itemToRemove.id)); + const newItems = [...localMediaItems]; + newItems.splice(index, 1); + updateMediaPositions(newItems, setLocalMediaItems, setMediaItems); + toast.success(translate("Removed from post")); + }; + + const handleInlineUpload = async (files: File[], insertIndex: number) => { + if (!files.length || !user?.id) return; + toast.info(`Uploading ${files.length} images...`); + + const newItems = [...localMediaItems]; + const newUploads: any[] = []; + + for (const file of files) { + try { + if (file.type.startsWith('video')) { + // Handle video upload via internal API + const uploadData = await uploadInternalVideo(file, user.id); + + // Fetch the created picture record to get the correct URL and details + const picture = await db.fetchPictureById(uploadData.dbId); + if (!picture) throw new Error('Failed to retrieve uploaded video details'); + + const newItem = { + id: picture.id, + title: picture.title, + description: picture.description || '', + image_url: picture.image_url, + thumbnail_url: picture.thumbnail_url, + user_id: user.id, + post_id: post?.id, + type: picture.type || 'video', + created_at: picture.created_at, + position: 0, + meta: picture.meta + }; + newUploads.push(newItem); + + } else { + // Handle regular image upload to storage + const publicUrl = await db.uploadFileToStorage(user.id, file); + + const newItem = { + id: crypto.randomUUID(), + title: file.name.split('.')[0], + description: '', + image_url: publicUrl, + user_id: user.id, + post_id: post?.id, + type: 'image', + created_at: new Date().toISOString(), + position: 0 + }; + newUploads.push(newItem); + } + } catch (error) { + console.error('Error uploading file:', error); + toast.error(`Failed to upload ${file.name}`); + } + } + + if (newUploads.length > 0) { + newItems.splice(insertIndex, 0, ...newUploads); + const reordered = newItems.map((item, idx) => ({ ...item, position: idx })); + setLocalMediaItems(reordered); + toast.success(`Added ${newUploads.length} images`); + } + }; + + const openGalleryPicker = (index: number) => { + insertIndexRef.current = index; + setShowGalleryPicker(true); + }; + + const openAIWizard = (index: number) => { + insertIndexRef.current = index; + setWizardImage(null); + setShowAIWizard(true); + }; + + const handleAIWizardPublish = async (newImages: ImageFile[]) => { + if (!newImages?.length) return; + const newItems = newImages.map(img => ({ + id: crypto.randomUUID(), + title: img.title || 'AI Generated', + description: (img as any).aiText || '', + image_url: img.src, + thumbnail_url: img.src, + user_id: user?.id, + post_id: post?.id, + type: 'image', + created_at: new Date().toISOString(), + position: 0 + })); + const currentItems = [...localMediaItems]; + currentItems.splice(insertIndexRef.current, 0, ...newItems); + const reordered = currentItems.map((item, idx) => ({ ...item, position: idx })); + setLocalMediaItems(reordered); + setShowAIWizard(false); + toast.success(`Added ${newItems.length} AI generated image(s)`); + }; + + const handleGallerySelect = async (pictureId: string) => { + setShowGalleryPicker(false); + toast.info("Adding image from gallery..."); + try { + const picture = await db.fetchPictureById(pictureId); + if (!picture) return; + + const newItem = { + id: crypto.randomUUID(), + title: picture.title, + description: picture.description || '', + image_url: picture.image_url, + thumbnail_url: picture.thumbnail_url, + user_id: user?.id, + post_id: post?.id, + type: picture.type || 'image', + created_at: new Date().toISOString(), + position: 0, + meta: picture.meta + }; + const newItems = [...localMediaItems]; + newItems.splice(insertIndexRef.current, 0, newItem); + const reordered = newItems.map((item, idx) => ({ ...item, position: idx })); + setLocalMediaItems(reordered); + toast.success("Image added from gallery"); + } catch (error) { + console.error("Error adding from gallery:", error); + toast.error("Failed to add image"); + } + }; + + const toggleEditMode = () => { + if (!isEditMode) { + setLocalPost({ + title: post?.title || mediaItem?.title || '', + description: post?.description || mediaItem?.description || '', + }); + const itemsWithPos = mediaItems.map((item, idx) => ({ + ...item, + position: item.position ?? idx + })).sort((a, b) => (a.position ?? 0) - (b.position ?? 0)); + setLocalMediaItems(itemsWithPos); + } + setIsEditMode(!isEditMode); + }; + + const handleSaveChanges = async () => { + if (!localPost || !post) return; + toast.promise( + async () => { + await db.updatePostDetails(post.id, { + title: localPost.title, + description: localPost.description, + }); + + if (removedItemIds.size > 0) { + await db.unlinkPictures(Array.from(removedItemIds)); + } + + const updates = localMediaItems.map((item, index) => ({ + id: item.id, + title: item.title, + description: item.description, + position: index, + updated_at: new Date().toISOString(), + user_id: user?.id || item.user_id, + post_id: post.id, + image_url: item.image_url, + type: item.type || 'image', + thumbnail_url: item.thumbnail_url + })); + + await db.upsertPictures(updates); + + setRemovedItemIds(new Set()); + setTimeout(() => window.location.reload(), 500); + }, + { + loading: 'Saving changes...', + success: 'Changes saved successfully!', + error: 'Failed to save changes', + } + ); + }; + + const moveItem = (index: number, direction: 'up' | 'down') => { + const newItems = [...localMediaItems]; + if (direction === 'up' && index > 0) { + [newItems[index], newItems[index - 1]] = [newItems[index - 1], newItems[index]]; + } else if (direction === 'down' && index < newItems.length - 1) { + [newItems[index], newItems[index + 1]] = [newItems[index + 1], newItems[index]]; + } + const reordered = newItems.map((item, idx) => ({ ...item, position: idx })); + setLocalMediaItems(reordered); + }; + + const handlePrevImage = () => { + if (currentImageIndex > 0) { + const newIndex = currentImageIndex - 1; + setMediaItem(mediaItems[newIndex]); + setLikesCount(mediaItems[newIndex].likes_count || 0); + } + }; + + const handleNextImage = () => { + if (currentImageIndex < mediaItems.length - 1) { + const newIndex = currentImageIndex + 1; + setMediaItem(mediaItems[newIndex]); + setLikesCount(mediaItems[newIndex].likes_count || 0); + } + }; + + const handleNavigate = (direction: 'prev' | 'next') => { + // Note: Lightbox navigation check removed here as it's now handled in SmartLightbox or via lack of prompt + if (!navigationData || !navigationData.posts.length) { + toast.error(translate('Navigation not available - please return to the feed to browse between posts')); + return; + } + const newIndex = direction === 'next' ? navigationData.currentIndex + 1 : navigationData.currentIndex - 1; + if (newIndex >= 0 && newIndex < navigationData.posts.length) { + const newPost = navigationData.posts[newIndex]; + setNavigationData({ ...navigationData, currentIndex: newIndex }); + navigate(`/post/${newPost.id}`); + } else { + toast.info(`No ${direction === 'next' ? 'next' : 'previous'} post available`); + } + }; + + const loadVersions = async () => { + if (!mediaItem || isVideo) return; + try { + const allImages = await db.fetchVersions(mediaItem, user?.id) as any[]; + const parentImage = allImages.find(img => !img.parent_id) || mediaItem; + const imageFiles: ImageFile[] = allImages.map(img => ({ + path: img.id, + src: img.image_url, + selected: img.id === mediaItem.id, + isGenerated: !!img.parent_id, + title: img.title || parentImage.title, + description: img.description || parentImage.description + })); + setVersionImages(imageFiles); + } catch (error) { + console.error('Error loading versions:', error); + } + }; + + const fetchAuthorProfile = async () => { + if (!mediaItem?.user_id) return; + try { + const profile = await db.fetchAuthorProfile(mediaItem.user_id); + if (profile) setAuthorProfile(profile); + } catch (error) { + console.error('Error fetching author profile:', error); + } + }; + + useEffect(() => { + if (id) { + fetchMedia(); + } + }, [id, user]); + + useEffect(() => { + if (mediaItem) { + loadVersions(); + fetchAuthorProfile(); + checkIfLiked(mediaItem.id); + } + }, [mediaItem, user]); + + useEffect(() => { + window.scrollTo({ top: 0, behavior: 'instant' }); + }, []); + + useEffect(() => { + const handleKeyPress = (e: KeyboardEvent) => { + const activeElement = document.activeElement; + const isInputFocused = activeElement && ( + activeElement.tagName === 'INPUT' || + activeElement.tagName === 'TEXTAREA' || + activeElement.getAttribute('contenteditable') === 'true' || + activeElement.getAttribute('role') === 'textbox' + ); + if (isInputFocused) return; + + if (e.key === 'ArrowLeft') { + e.preventDefault(); + if (currentImageIndex > 0) handlePrevImage(); + else handleNavigate('prev'); + } else if (e.key === 'ArrowRight') { + e.preventDefault(); + if (currentImageIndex < mediaItems.length - 1) handleNextImage(); + else handleNavigate('next'); + } + }; + window.addEventListener('keydown', handleKeyPress); + return () => window.removeEventListener('keydown', handleKeyPress); + }, [navigationData, showLightbox, currentImageIndex, mediaItems]); + + + const fetchMedia = async () => { + const resolveVersions = async (items: any[]) => { + if (!items.length) return items; + try { + const rootIds = items.map((i: any) => i.parent_id || i.id); + const allVersions = await db.fetchRelatedVersions(rootIds); + + // Map root ID to position to preserve order + const rootPositionMap = new globalThis.Map(); + items.forEach((i: any) => { + const rootId = i.parent_id || i.id; + rootPositionMap.set(rootId, i.position); + }); + + // Use allVersions as the source of truth + let augmentedVersions = (allVersions || []).map((v: any) => { + const rootId = v.parent_id || v.id; + const pos = rootPositionMap.get(rootId); + return { + ...v, + position: pos !== undefined ? pos : 9999, // default to end if unknown + type: v.type as MediaType, + renderKey: v.id + }; + }); + + // Fallback + if (!augmentedVersions || augmentedVersions.length === 0) { + augmentedVersions = items; + } + + // Sort by position matching the original items, then by created_at for versions + augmentedVersions.sort((a: any, b: any) => { + const posDiff = (a.position || 0) - (b.position || 0); + if (posDiff !== 0) return posDiff; + return new Date(a.created_at).getTime() - new Date(b.created_at).getTime(); + }); + + // Deduplicate + const seenIds = new Set(); + return augmentedVersions.filter((item: any) => { + if (seenIds.has(item.id)) return false; + seenIds.add(item.id); + return true; + }); + } catch (e) { + console.error("Error resolving versions", e); + return items; + } + }; + + try { + const postData = await db.fetchPostById(id!); + if (postData) { + let items = (postData.pictures as any[]).map((p: any) => ({ + ...p, + type: p.type as MediaType, + renderKey: p.id + })).sort((a, b) => (a.position || 0) - (b.position || 0)); + + items = await resolveVersions(items); + items = items.filter((item: any) => item.visible || user?.id === item.user_id); + + if (user) { + try { + const likedIds = await db.fetchUserLikesForPictures(user.id, items.map((i: any) => i.id)); + items = items.map((item: any) => ({ + ...item, + is_liked: likedIds.includes(item.id) + })); + } catch (e) { + console.error("Error fetching likes", e); + } + } + + setPost({ ...postData, pictures: items }); + if (items.length === 0 && (postData.settings as any)?.link) { + // Create virtual picture for Link Post + const settings = (postData.settings as any); + items.push({ + id: postData.id, + title: postData.title, + description: postData.description, + image_url: settings.image_url || `https://picsum.photos/seed/800/600`, // Fallback + thumbnail_url: settings.thumbnail_url || null, + user_id: postData.user_id, + type: 'page-external', + created_at: postData.created_at, + position: 0, + renderKey: postData.id, + meta: { url: settings.link }, + likes_count: 0, // Could fetch real likes on post container if supported + visible: true + }); + } + + if (items.length > 0) { + setMediaItems(items); + setMediaItem(items[0]); + setLikesCount(items[0].likes_count || 0); + } else { + toast.error('This post has no media'); + } + return; + } + + const pictureData = await db.fetchPictureById(id!); + if (pictureData) { + if (pictureData.post_id) { + const fullPostData = await db.fetchFullPost(pictureData.post_id); + if (fullPostData) { + let items = (fullPostData.pictures as any[]).map((p: any) => ({ + ...p, + type: p.type as MediaType, + renderKey: p.id + })).sort((a, b) => (a.position || 0) - (b.position || 0)); + + items = await resolveVersions(items); + items = items.filter((item: any) => item.visible || user?.id === item.user_id); + + setPost({ ...fullPostData, pictures: items }); + setMediaItems(items); + + // Check if requested ID is in the resolved list + const initialIndex = items.findIndex((p: any) => p.id === id); + + if (initialIndex >= 0) { + setMediaItem(items[initialIndex]); + setLikesCount(items[initialIndex].likes_count || 0); + } else { + // Requested ID might have been swapped out. + // Try to find if it was part of a family that is now represented by a selected version + const rootId = pictureData.parent_id || pictureData.id; + const swappedIndex = items.findIndex((p: any) => (p.parent_id || p.id) === rootId); + + if (swappedIndex >= 0) { + setMediaItem(items[swappedIndex]); + setLikesCount(items[swappedIndex].likes_count || 0); + } else { + setMediaItem(items[0]); + setLikesCount(items[0].likes_count || 0); + } + } + } + return; + } + + const pseudoPost: PostItem = { + id: pictureData.post_id || pictureData.id, + title: pictureData.title || 'Untitled', + description: pictureData.description, + user_id: pictureData.user_id, + created_at: pictureData.created_at, + updated_at: pictureData.created_at, + pictures: [{ ...pictureData, type: pictureData.type as MediaType }], + isPseudo: true + }; + setPost(pseudoPost); + setMediaItems(pseudoPost.pictures!); + setMediaItem(pseudoPost.pictures![0]); + setLikesCount(pictureData.likes_count || 0); + return; + } + + // 3. Try fetching as a Page (for page-intern items) + try { + const pageData = await db.fetchPageById(id!); + if (pageData) { + const pseudoPost: PostItem = { + id: pageData.id, + title: pageData.title, + description: null, + user_id: pageData.owner, + created_at: pageData.created_at, + updated_at: pageData.created_at, + pictures: [], + isPseudo: true, + type: 'page-intern', + meta: { slug: pageData.slug } + }; + setPost(pseudoPost); + setLoading(false); + return; + } + } catch (e) { + console.error("Error fetching page:", e); + } + + toast.error(translate('Content not found')); + navigate('/'); + } catch (error) { + console.error('Error fetching content:', error); + toast.error(translate('Failed to load content')); + navigate('/'); + } finally { + setLoading(false); + } + }; + + const actions = usePostActions({ + post, + mediaItems, + setMediaItems, + mediaItem, + user, + fetchMedia + }); + + const handleYouTubeAdd = async () => { + const videoId = getYouTubeId(youTubeUrl); + if (!videoId) { + toast.error(translate("Invalid YouTube URL")); + return; + } + const embedUrl = `https://www.youtube.com/embed/${videoId}`; + const thumbnailUrl = `https://img.youtube.com/vi/${videoId}/maxresdefault.jpg`; + const newVideoItem: any = { + id: crypto.randomUUID(), + type: 'youtube', + image_url: embedUrl, + thumbnail_url: thumbnailUrl, + title: 'YouTube Video', + description: '', + user_id: user?.id || '', + created_at: new Date().toISOString(), + likes_count: 0 + }; + if (insertIndexRef.current !== -1) { + const newItems = [...localMediaItems]; + newItems.splice(insertIndexRef.current, 0, newVideoItem); + updateMediaPositions(newItems, setLocalMediaItems, setMediaItems); + } else { + updateMediaPositions([...localMediaItems, newVideoItem], setLocalMediaItems, setMediaItems); + } + setYouTubeUrl(''); + actions.setShowYouTubeDialog(false); + toast.success(translate("YouTube video added")); + }; + + const handleTikTokAdd = async () => { + const videoId = getTikTokId(tikTokUrl); + if (!videoId) { + toast.error(translate("Invalid TikTok URL")); + return; + } + const embedUrl = `https://www.tiktok.com/embed/v2/${videoId}`; + const thumbnailUrl = `https://sf16-scmcdn-sg.ibytedtos.com/goofy/tiktok/web/node/_next/static/images/logo-dark-e95da587b6efa1520dcd11f4b45c0cf6.svg`; + const newVideoItem: any = { + id: crypto.randomUUID(), + type: 'tiktok', + image_url: embedUrl, + thumbnail_url: thumbnailUrl, + title: 'TikTok Video', + description: '', + user_id: user?.id || '', + created_at: new Date().toISOString(), + likes_count: 0 + }; + if (insertIndexRef.current !== -1) { + const newItems = [...localMediaItems]; + newItems.splice(insertIndexRef.current, 0, newVideoItem); + updateMediaPositions(newItems, setLocalMediaItems, setMediaItems); + } else { + updateMediaPositions([...localMediaItems, newVideoItem], setLocalMediaItems, setMediaItems); + } + setTikTokUrl(''); + actions.setShowTikTokDialog(false); + toast.success(translate("TikTok video added")); + }; + + const checkIfLiked = async (targetId?: string) => { + if (!user || !targetId) return; + try { + const liked = await db.checkLikeStatus(user.id, targetId); + setIsLiked(liked); + } catch (error) { + console.error('Error checking like status:', error); + } + }; + + const handleLike = async () => { + if (!user || !mediaItem) { + toast.error(translate('Please sign in to like this')); + return; + } + try { + const isNowLiked = await db.toggleLike(user.id, mediaItem.id, isLiked); + setIsLiked(isNowLiked); + setLikesCount(prev => isNowLiked ? prev + 1 : prev - 1); + + setMediaItems(prevItems => prevItems.map(item => { + if (item.id === mediaItem.id) { + return { + ...item, + is_liked: isNowLiked, + likes_count: (item.likes_count || 0) + (isNowLiked ? 1 : -1) + }; + } + return item; + })); + } catch (error) { + console.error('Error toggling like:', error); + toast.error(translate('Failed to update like')); + } + }; + + const handleDownload = async () => { + await downloadMediaItem(mediaItem, isVideo); + }; + + const handlePublish = async (option: 'overwrite' | 'new' | 'version', imageUrl: string, newTitle: string, description?: string, parentId?: string, collectionIds?: string[]) => { + if (!mediaItem || isVideo || !user) { + toast.error(translate('Please sign in to publish images')); + return; + } + setIsPublishing(true); + try { + const response = await fetch(imageUrl); + const blob = await response.blob(); + + if (option === 'overwrite') { + const currentImageUrl = mediaItem.image_url; + if (currentImageUrl.includes('supabase.co/storage/')) { + const urlParts = currentImageUrl.split('/'); + const fileName = urlParts[urlParts.length - 1]; + const bucketPath = `${mediaItem.user_id}/${fileName}`; + await db.updateStorageFile(bucketPath, blob); + toast.success(translate('Image updated successfully!')); + fetchMedia(); + } else { + toast.error(translate('Cannot overwrite this image')); + return; + } + } else if (option === 'version') { + const publicUrl = await db.uploadFileToStorage(user.id, blob, `${user.id}/${Date.now()}-version.png`); + const pictureData = await db.createPicture({ + title: newTitle?.trim() || null, + description: description || `Generated from: ${mediaItem.title}`, + image_url: publicUrl, + user_id: user.id, + parent_id: parentId || mediaItem.id, + is_selected: false, + visible: false + }); + if (collectionIds && collectionIds.length > 0 && pictureData) { + await db.addCollectionPictures(collectionIds.map(collectionId => ({ collection_id: collectionId, picture_id: pictureData.id }))); + } + toast.success(translate('Version saved successfully!')); + loadVersions(); + } else { + const publicUrl = await db.uploadFileToStorage(user.id, blob, `${user.id}/${Date.now()}-generated.png`); + const pictureData = await db.createPicture({ + title: newTitle?.trim() || null, + description: description || `Generated from: ${mediaItem.title}`, + image_url: publicUrl, + user_id: user.id + }); + if (collectionIds && collectionIds.length > 0 && pictureData) { + await db.addCollectionPictures(collectionIds.map(collectionId => ({ collection_id: collectionId, picture_id: pictureData.id }))); + } + toast.success(translate('Image published to gallery!')); + } + setShowLightbox(false); + // llm state cleared by component + + } catch (error) { + console.error('Error publishing image:', error); + toast.error(translate('Failed to publish image')); + } finally { + setIsPublishing(false); + } + }; + + const handleOpenInWizard = (imageUrl?: string) => { + if (!mediaItem || isVideo) return; + const imageToEdit = imageUrl || mediaItem.image_url; + const imageData = { + id: mediaItem.id, + src: imageToEdit, + title: mediaItem.title, + realDatabaseId: mediaItem.id, + selected: true + }; + setWizardImage(imageData, window.location.pathname); + setShowLightbox(false); + navigate('/wizard'); + }; + + const handleEditPicture = () => { + if (!mediaItem) return; + setShowEditModal(true); + }; + + const handleEditPost = () => { + if (!post || !mediaItems.length) return; + const wizardImages = mediaItems.map(item => { + const isVideo = item.type === 'mux-video'; + const meta = item.meta as any || {}; + return { + id: item.id, + path: item.id, + src: isVideo ? (item.thumbnail_url || item.image_url) : item.image_url, + title: item.title, + description: item.description || '', + selected: false, + realDatabaseId: item.id, + type: isVideo ? 'video' : 'image', + uploadStatus: isVideo ? 'ready' : undefined, + muxUploadId: isVideo ? meta.mux_upload_id : undefined, + muxAssetId: isVideo ? meta.mux_asset_id : undefined, + muxPlaybackId: isVideo ? meta.mux_playback_id : undefined, + }; + }); + navigate('/wizard', { + state: { + mode: 'post', + initialImages: wizardImages, + postTitle: post.title, + postDescription: post.description, + editingPostId: post.id + } + }); + }; + + const rendererProps = { + post, authorProfile, mediaItems, localMediaItems, mediaItem: mediaItem!, + user, isOwner: !!isOwner, isEditMode, isLiked, likesCount, + localPost, setLocalPost, setLocalMediaItems, + + onEditModeToggle: toggleEditMode, + onEditPost: handleEditPost, + onViewModeChange: handleViewMode, + onExportMarkdown: () => exportMarkdown(post, mediaItem!, mediaItems, authorProfile), + onSaveChanges: handleSaveChanges, + onDeletePost: () => actions.setShowDeletePostDialog(true), + onDeletePicture: () => actions.setShowDeletePictureDialog(true), + onLike: handleLike, + onUnlinkImage: actions.handleUnlinkImage, + onRemoveFromPost: handleRemoveFromPost, + onEditPicture: handleEditPicture, + onGalleryPickerOpen: openGalleryPicker, + onYouTubeAdd: () => actions.setShowYouTubeDialog(true), + onTikTokAdd: () => actions.setShowTikTokDialog(true), + onAIWizardOpen: openAIWizard, + onInlineUpload: handleInlineUpload, + onMoveItem: moveItem, + onMediaSelect: setMediaItem, + onExpand: (item: MediaItem) => { setMediaItem(item); setShowLightbox(true); }, + onDownload: handleDownload, + + currentImageIndex, + videoPlaybackUrl, + videoPosterUrl, + versionImages, + + handlePrevImage, + handleNavigate, + navigationData, + embedded + }; + + // Render Page Content if it's an internal page + if (post?.type === 'page-intern' && post.meta?.slug) { + return ( + <UserPage + userId={post.user_id} + slug={post.meta.slug} + embedded + /> + ); + } + + if (loading) { + return ( + <div className={embedded ? "flex items-center justify-center p-8" : "min-h-screen bg-background flex items-center justify-center"}> + <div className="text-muted-foreground"><T>Loading...</T></div> + </div> + ); + } + + if (!mediaItem) { + return ( + <div className={embedded ? "flex items-center justify-center p-8" : "min-h-screen bg-background flex items-center justify-center"}> + <div className="text-center space-y-4"> + <div className="text-muted-foreground text-lg"><T>Content not found</T></div> + {!embedded && <Button onClick={() => navigate('/')} variant="outline"><T>Go Home</T></Button>} + </div> + </div> + ); + } + + const containerClassName = embedded + ? `flex flex-col bg-background h-full ${className || ''}` + : "bg-background flex flex-col"; + + return ( + <div className={containerClassName}> + <div className={embedded ? "w-full" : "w-full max-w-[1600px] mx-auto"}> + + {viewMode === 'article' ? ( + <ArticleRenderer {...rendererProps} mediaItem={mediaItem} /> + ) : viewMode === 'thumbs' ? ( + <ThumbsRenderer {...rendererProps} /> + ) : ( + <CompactRenderer {...rendererProps} mediaItem={mediaItem} /> + )} + </div> + + <Suspense fallback={<div className="hidden">Loading editor...</div>}> + {showEditModal && !isVideo && ( + <EditImageModal + open={showEditModal} + onOpenChange={setShowEditModal} + pictureId={mediaItem.id} + currentTitle={mediaItem.title} + currentDescription={mediaItem.description} + currentVisible={(mediaItem as any).visible ?? true} + imageUrl={mediaItem.image_url} + onUpdateSuccess={() => { + setShowEditModal(false); + fetchMedia(); + }} + /> + )} + + {showEditModal && isVideo && ( + <EditVideoModal + open={showEditModal} + onOpenChange={setShowEditModal} + videoId={mediaItem.id} + currentTitle={mediaItem.title} + currentDescription={mediaItem.description} + currentVisible={(mediaItem as any).visible ?? true} + onUpdateSuccess={() => { + setShowEditModal(false); + fetchMedia(); + }} + /> + )} + </Suspense> + + { + !isVideo && showLightbox && ( + <Suspense fallback={<div className="fixed inset-0 z-[100] bg-background/50 backdrop-blur-sm flex items-center justify-center">Loading Lightbox...</div>}> + <SmartLightbox + isOpen={showLightbox} + onClose={() => setShowLightbox(false)} + mediaItem={mediaItem} + user={user} + isVideo={false} + onPublish={handlePublish} + onNavigate={handleNavigate} + onOpenInWizard={() => handleOpenInWizard()} // SmartLightbox handles the argument if needed, or we adapt + currentIndex={navigationData?.currentIndex} + totalCount={navigationData?.posts.length} + /> + </Suspense> + ) + } + + {/* Dialogs */} + <YouTubeDialog + open={actions.showYouTubeDialog} + onOpenChange={actions.setShowYouTubeDialog} + url={youTubeUrl} + onUrlChange={setYouTubeUrl} + onConfirm={handleYouTubeAdd} + /> + + <TikTokDialog + open={actions.showTikTokDialog} + onOpenChange={actions.setShowTikTokDialog} + url={tikTokUrl} + onUrlChange={setTikTokUrl} + onConfirm={handleTikTokAdd} + /> + + <DeleteDialog + open={actions.showDeletePostDialog} + onOpenChange={actions.setShowDeletePostDialog} + onConfirm={actions.handleDeletePost} + title="Delete Post" + description="Are you sure you want to delete this post? This action cannot be undone." + /> + + <DeleteDialog + open={actions.showDeletePictureDialog} + onOpenChange={actions.setShowDeletePictureDialog} + onConfirm={actions.handleDeletePicture} + title="Delete Picture" + description="Are you sure you want to delete this picture? This action cannot be undone." + /> + + <Suspense fallback={null}> + {showEditModal && mediaItem && ( + <EditImageModal + open={showEditModal} + onOpenChange={setShowEditModal} + pictureId={mediaItem.id} + currentTitle={mediaItem.title} + currentDescription={mediaItem.description || null} + currentVisible={true} // Defaulting to true as visible prop might be on backend or handled otherwise + imageUrl={mediaItem.image_url} + onUpdateSuccess={() => { + fetchMedia(); + setShowEditModal(false); + }} + /> + )} + + <ImagePickerDialog + isOpen={showGalleryPicker} + onClose={() => setShowGalleryPicker(false)} + onSelect={handleGallerySelect} + /> + + {showAIWizard && ( + <div className="fixed inset-0 z-[9999] bg-background/95 backdrop-blur-sm flex items-center justify-center p-4"> + <div className="w-full h-full max-w-[1600px] bg-background border rounded-xl overflow-hidden shadow-2xl relative"> + <Button + variant="ghost" + size="icon" + className="absolute top-4 right-4 z-50" + onClick={() => setShowAIWizard(false)} + > + <X className="h-6 w-6" /> + </Button> + <ImageWizard + key="inline-wizard" + isOpen={true} + onClose={() => setShowAIWizard(false)} + mode="default" + initialPostTitle={post?.title || ""} + initialPostDescription={post?.description || ""} + onPublish={handleAIWizardPublish as any} + /> + </div> + </div> + )} + </Suspense> + </div> + ); +}; + +export default Post; diff --git a/packages/ui/src/pages/Post/PostActions.ts b/packages/ui/src/pages/Post/PostActions.ts new file mode 100644 index 00000000..6fe04411 --- /dev/null +++ b/packages/ui/src/pages/Post/PostActions.ts @@ -0,0 +1,87 @@ +import { toast } from "sonner"; +import { translate } from "@/i18n"; +import { generateFilename, downloadImage } from "@/utils/downloadUtils"; +import { MediaItem } from "@/types"; + + +interface PostData { + title?: string; + description?: string; + created_at: string; +} + +interface AuthorProfile { + display_name: string | null; + username: string | null; +} + +export const exportMarkdown = ( + post: PostData | null, + mediaItem: MediaItem | null, + mediaItems: MediaItem[], + authorProfile: AuthorProfile | null +) => { + if (!post && !mediaItem) return; + + const title = post?.title || mediaItem?.title || 'Untitled'; + const description = post?.description || mediaItem?.description || ''; + const dateStr = post?.created_at || mediaItem?.created_at || new Date().toISOString(); + const date = new Date(dateStr).toLocaleDateString(); + + // Author Details + const authorName = authorProfile?.display_name || 'Unknown Author'; + const authorUsername = authorProfile?.username ? `@${authorProfile.username}` : ''; + const authorLine = authorUsername ? `${authorName} (${authorUsername})` : authorName; + + let mdContent = `# ${title}\n\n`; + mdContent += `**Author:** ${authorLine}\n`; + mdContent += `**Date:** ${date}\n\n`; + if (description) { + mdContent += `${description}\n\n`; + } + + mdContent += `---\n\n`; + + mediaItems.forEach((item) => { + const itemTitle = item.title || ''; + const itemDesc = item.description || ''; + + if (itemTitle && itemTitle !== title) { + mdContent += `## ${itemTitle}\n\n`; + } + + // Use original image URL or a standard one + mdContent += `![${itemTitle || 'Image'}](${item.image_url})\n\n`; + + if (itemDesc && itemDesc !== description) { + mdContent += `${itemDesc}\n\n`; + } + + mdContent += `---\n\n`; + }); + + // Trigger download + const blob = new Blob([mdContent], { type: 'text/markdown' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `${generateFilename(title)}.md`; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + + toast.success(translate('Markdown exported successfully')); +}; + +export const downloadMediaItem = async (mediaItem: MediaItem | null, isVideo: boolean) => { + if (!mediaItem || isVideo) return; // Only download images for now + try { + const filename = generateFilename(mediaItem.title || 'download'); + await downloadImage(mediaItem.image_url, filename); + toast.success(translate('Image downloaded successfully')); + } catch (error) { + console.error('Error downloading image:', error); + toast.error(translate('Failed to download image')); + } +}; diff --git a/packages/ui/src/pages/Post/components/DeleteDialogs.tsx b/packages/ui/src/pages/Post/components/DeleteDialogs.tsx new file mode 100644 index 00000000..28770c54 --- /dev/null +++ b/packages/ui/src/pages/Post/components/DeleteDialogs.tsx @@ -0,0 +1,49 @@ +import React from 'react'; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, +} from "@/components/ui/alert-dialog"; +import { T } from "@/i18n"; + +interface DeleteDialogProps { + open: boolean; + onOpenChange: (open: boolean) => void; + onConfirm: () => void; + title: string; + description: string; + confirmText?: string; +} + +export const DeleteDialog: React.FC<DeleteDialogProps> = ({ + open, + onOpenChange, + onConfirm, + title, + description, + confirmText = "Delete" +}) => { + return ( + <AlertDialog open={open} onOpenChange={onOpenChange}> + <AlertDialogContent> + <AlertDialogHeader> + <AlertDialogTitle><T>{title}</T></AlertDialogTitle> + <AlertDialogDescription> + <T>{description}</T> + </AlertDialogDescription> + </AlertDialogHeader> + <AlertDialogFooter> + <AlertDialogCancel><T>Cancel</T></AlertDialogCancel> + <AlertDialogAction onClick={onConfirm} className="bg-destructive text-destructive-foreground hover:bg-destructive/90"> + <T>{confirmText}</T> + </AlertDialogAction> + </AlertDialogFooter> + </AlertDialogContent> + </AlertDialog> + ); +}; diff --git a/packages/ui/src/pages/Post/components/ExportDropdown.tsx b/packages/ui/src/pages/Post/components/ExportDropdown.tsx new file mode 100644 index 00000000..ab42211d --- /dev/null +++ b/packages/ui/src/pages/Post/components/ExportDropdown.tsx @@ -0,0 +1,242 @@ +import React, { useState } from "react"; +import { FileText, Download, Code, Mail, Archive, MoreVertical, Share2, Link } from 'lucide-react'; +import { Button } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, + DropdownMenuSeparator, + DropdownMenuLabel +} from "@/components/ui/dropdown-menu"; +import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from "@/components/ui/dialog"; +import { toast } from "sonner"; +import { generateOfflineZip } from "@/utils/zipGenerator"; +import { T } from "@/i18n"; + +import { PostItem, UserProfile } from "../types"; +import { Picture } from "@/types-server"; + +interface ExportDropdownProps { + post: PostItem | null; + mediaItems: Picture[]; + authorProfile: UserProfile | null; + onExportMarkdown?: () => void; + className?: string; +} + +export const ExportDropdown: React.FC<ExportDropdownProps> = ({ + post, + mediaItems, + authorProfile, + onExportMarkdown, + className +}) => { + const [isZipping, setIsZipping] = useState(false); + const [isGeneratingPdf, setIsGeneratingPdf] = useState(false); + const [isEmbedDialogOpen, setIsEmbedDialogOpen] = useState(false); + const [isEmailDialogOpen, setIsEmailDialogOpen] = useState(false); + const [emailHtml, setEmailHtml] = useState(''); + + const baseUrl = import.meta.env.VITE_SERVER_IMAGE_API_URL || window.location.origin; + const embedUrl = `${baseUrl}/embed/${post?.id}`; + const embedCode = `<iframe src="${embedUrl}" width="100%" height="600" frameborder="0"></iframe>`; + + const loadEmailHtml = async () => { + if (!post?.id) { + console.error('No post ID available'); + setEmailHtml('Error: Post data missing'); + return; + } + try { + const res = await fetch(`${baseUrl}/api/render/email/${post.id}`); + if (!res.ok) { + const text = await res.text(); + throw new Error(text || res.statusText); + } + const html = await res.text(); + setEmailHtml(html); + } catch (e) { + console.error("Failed to load email html", e); + toast.error("Failed to load email template"); + setEmailHtml('Error loading template. Please try again later.'); + } + }; + + const handleExportPdf = async () => { + if (!post?.id) return; + setIsGeneratingPdf(true); + toast.info("Downloading PDF..."); + try { + const link = document.createElement('a'); + link.href = `${baseUrl}/api/render/pdf/${post.id}`; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } catch (e) { + console.error(e); + toast.error("Failed to download PDF"); + } finally { + setIsGeneratingPdf(false); + } + }; + + const handleDownloadZip = async () => { + if (!post) return; + setIsZipping(true); + toast.info("Generating ZIP..."); + try { + await generateOfflineZip( + post, + mediaItems, + authorProfile?.display_name || 'Author' + ); + toast.success("ZIP downloaded!"); + } catch (e) { + console.error(e); + toast.error("Failed to generate ZIP"); + } finally { + setIsZipping(false); + } + }; + + const handleCopyLink = async () => { + if (!post) return; + const url = window.location.href; + const title = post.title || 'PolyMech Post'; + const text = post.description || ''; + + if (navigator.share && navigator.canShare({ url, title, text })) { + try { + await navigator.share({ url, title, text }); + return; + } catch (e) { + // Ignore abort errors + if ((e as Error).name !== 'AbortError') console.error('Share failed', e); + } + } + + // Fallback to clipboard + try { + await navigator.clipboard.writeText(url); + toast.success("Link copied to clipboard"); + } catch (e) { + console.error('Clipboard failed', e); + toast.error("Failed to copy link"); + } + }; + + return ( + <div className={className}> + <Dialog open={isEmbedDialogOpen} onOpenChange={setIsEmbedDialogOpen}> + <DialogContent> + <DialogHeader> + <DialogTitle>Embed Post</DialogTitle> + <DialogDescription> + Copy the code below to embed this post on your website. + </DialogDescription> + </DialogHeader> + <div className="space-y-4"> + <div className="p-4 bg-muted rounded-md relative group"> + <code className="text-sm break-all font-mono">{embedCode}</code> + <Button + size="sm" + variant="secondary" + className="absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity" + onClick={() => { + navigator.clipboard.writeText(embedCode); + toast.success("Copied to clipboard"); + }} + > + Copy + </Button> + </div> + <div className="text-xs text-muted-foreground"> + Preview: + <div className="mt-2 border rounded overflow-hidden aspect-video relative"> + <iframe src={embedUrl} width="100%" height="100%" frameBorder="0" className="absolute inset-0" /> + </div> + </div> + </div> + </DialogContent> + </Dialog> + + <Dialog open={isEmailDialogOpen} onOpenChange={setIsEmailDialogOpen}> + <DialogContent> + <DialogHeader> + <DialogTitle>Export as Email</DialogTitle> + <DialogDescription> + Copy the HTML below to use in your email marketing tool. + </DialogDescription> + </DialogHeader> + <div className="space-y-4"> + <div className="p-4 bg-muted rounded-md relative group h-64 overflow-y-auto"> + <code className="text-xs break-all font-mono whitespace-pre-wrap">{emailHtml || 'Loading...'}</code> + <Button + size="sm" + variant="secondary" + className="absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity" + onClick={() => { + navigator.clipboard.writeText(emailHtml); + toast.success("Copied to clipboard"); + }} + > + Copy + </Button> + </div> + </div> + </DialogContent> + </Dialog> + + <DropdownMenu> + <DropdownMenuTrigger asChild> + <Button variant="ghost" size="sm" className="h-8 gap-2 px-2 text-muted-foreground hover:text-primary"> + <Share2 className="h-4 w-4" /> + <span className="hidden lg:inline">Share</span> + </Button> + </DropdownMenuTrigger> + <DropdownMenuContent align="end"> + <DropdownMenuLabel>Share & Export</DropdownMenuLabel> + <DropdownMenuSeparator /> + + <DropdownMenuItem onClick={handleCopyLink}> + <Link className="h-4 w-4 mr-2" /> + <span>Copy Link</span> + </DropdownMenuItem> + + {onExportMarkdown && ( + <DropdownMenuItem onClick={onExportMarkdown}> + <FileText className="h-4 w-4 mr-2" /> + <span>Export Markdown</span> + </DropdownMenuItem> + )} + + <DropdownMenuItem onClick={handleExportPdf} disabled={isGeneratingPdf}> + <FileText className="h-4 w-4 mr-2" /> + <span>{isGeneratingPdf ? 'Generating PDF...' : 'Export PDF'}</span> + </DropdownMenuItem> + + <DropdownMenuItem onClick={handleDownloadZip} disabled={isZipping}> + <Archive className="h-4 w-4 mr-2" /> + <span>{isZipping ? 'Zipping...' : 'Download ZIP'}</span> + </DropdownMenuItem> + + <DropdownMenuSeparator /> + + <DropdownMenuItem onClick={() => setIsEmbedDialogOpen(true)}> + <Code className="h-4 w-4 mr-2" /> + <span>Embed</span> + </DropdownMenuItem> + + <DropdownMenuItem onClick={() => { + setIsEmailDialogOpen(true); + loadEmailHtml(); + }}> + <Mail className="h-4 w-4 mr-2" /> + <span>Export as Email</span> + </DropdownMenuItem> + </DropdownMenuContent> + </DropdownMenu> + </div> + ); +}; diff --git a/packages/ui/src/pages/Post/components/SmartLightbox.tsx b/packages/ui/src/pages/Post/components/SmartLightbox.tsx new file mode 100644 index 00000000..9f161aa3 --- /dev/null +++ b/packages/ui/src/pages/Post/components/SmartLightbox.tsx @@ -0,0 +1,113 @@ +import React, { useMemo } from 'react'; +import ImageLightbox from "@/components/ImageLightbox"; +import { usePostLLM } from "../llm"; +import { PostMediaItem } from "../types"; +import { User } from "@supabase/supabase-js"; + +interface SmartLightboxProps { + isOpen: boolean; + onClose: () => void; + imageUrl?: string; + imageTitle?: string; + mediaItem: PostMediaItem; + user: User | null; + isVideo: boolean; + + // Navigation / Parent Actions + onPublish: (option: 'overwrite' | 'new' | 'version', imageUrl: string, newTitle: string, description?: string, parentId?: string, collectionIds?: string[]) => Promise<void>; + onNavigate: (direction: 'prev' | 'next') => void; + onOpenInWizard: () => void; + currentIndex?: number; + totalCount?: number; +} + +const SmartLightbox: React.FC<SmartLightboxProps> = ({ + isOpen, + onClose, + imageUrl, + imageTitle, + mediaItem, + user, + isVideo, + onPublish, + onNavigate, + onOpenInWizard, + currentIndex, + totalCount +}) => { + // Only initialize this heavy hook when the component is loaded + const llm = usePostLLM(user, mediaItem); + + // Provide a bridge for the onClose to also clear LLM state + const handleClose = () => { + onClose(); + llm.setGeneratedImageUrl(null); + llm.setLightboxPrompt(''); + }; + + const handlePublishBridge = async (option: 'overwrite' | 'new' | 'version', imgUrl: string, newTitle: string, description?: string, parentId?: string, collectionIds?: string[]) => { + await onPublish(option, imgUrl, newTitle, description, parentId, collectionIds); + // Clean up internal state after publish + llm.setGeneratedImageUrl(null); + }; + + // Quick publish wrapper + const handleQuickPublishBridge = async () => { + if (!llm.generatedImageUrl || !mediaItem || isVideo || !user) return; + await onPublish('version', llm.generatedImageUrl, mediaItem.title, llm.lightboxPrompt.trim(), mediaItem.id, []); + llm.setGeneratedImageUrl(null); + }; + + return ( + <ImageLightbox + isOpen={isOpen} + onClose={handleClose} + imageUrl={imageUrl || mediaItem.image_url} + imageTitle={imageTitle || mediaItem.title} + + // LLM / AI Props + onPromptSubmit={(p) => llm.handlePromptSubmit(p, isVideo)} + onPublish={handlePublishBridge} + isGenerating={llm.isGenerating} + isPublishing={false} // We don't have isPublishing passed down easily, assumes fast publish or parent handles blocking if needed, or we could add a prop. + showPrompt={true} + showPublish={!!llm.generatedImageUrl} + generatedImageUrl={llm.generatedImageUrl || undefined} + + // Navigation + currentIndex={currentIndex} + totalCount={totalCount} + onNavigate={onNavigate} + originalImageId={mediaItem.id} + + // Wizard features + showWizardFeatures={true} + promptTemplates={llm.promptTemplates} + onApplyTemplate={llm.handleApplyTemplate} + onSaveTemplate={llm.handleSaveTemplate} + onDeleteTemplate={llm.handleDeleteTemplate} + onOptimizePrompt={llm.handleOptimizePrompt} + isOptimizing={llm.isOptimizingPrompt} + onMicrophoneToggle={llm.handleMicrophone} + isRecording={llm.isRecording} + isTranscribing={llm.isTranscribing} + + showQuickPublish={!!llm.generatedImageUrl && llm.lightboxPrompt.trim().length > 0} + onQuickPublish={handleQuickPublishBridge} + + prompt={llm.lightboxPrompt} + onPromptChange={llm.setLightboxPrompt} + + // Prompt history + promptHistory={llm.promptHistory} + historyIndex={llm.historyIndex} + onNavigateHistory={llm.navigatePromptHistory} + onManualPromptEdit={() => llm.setHistoryIndex(-1)} + + // Wizard navigation + onOpenInWizard={onOpenInWizard} + /> + ); +}; + +export default SmartLightbox; diff --git a/packages/ui/src/pages/Post/components/TikTokDialog.tsx b/packages/ui/src/pages/Post/components/TikTokDialog.tsx new file mode 100644 index 00000000..42377b91 --- /dev/null +++ b/packages/ui/src/pages/Post/components/TikTokDialog.tsx @@ -0,0 +1,65 @@ + +import React from 'react'; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, +} from "@/components/ui/alert-dialog"; +import { T } from "@/i18n"; + +interface TikTokDialogProps { + open: boolean; + onOpenChange: (open: boolean) => void; + url: string; + onUrlChange: (url: string) => void; + onConfirm: () => void; +} + +export const TikTokDialog: React.FC<TikTokDialogProps> = ({ + open, + onOpenChange, + url, + onUrlChange, + onConfirm +}) => { + return ( + <AlertDialog open={open} onOpenChange={onOpenChange}> + <AlertDialogContent> + <AlertDialogHeader> + <AlertDialogTitle><T>Add TikTok Video</T></AlertDialogTitle> + <AlertDialogDescription> + <T>Paste the TikTok video URL below to add it to your post.</T> + <div className="text-xs text-muted-foreground mt-2"> + Example: https://www.tiktok.com/@user/video/1234567890 + </div> + </AlertDialogDescription> + <div className="py-4"> + <Input + placeholder="https://www.tiktok.com/@user/video/..." + value={url} + onChange={(e) => onUrlChange(e.target.value)} + onKeyDown={(e) => { + if (e.key === 'Enter') { + e.preventDefault(); + onConfirm(); + } + }} + autoFocus + /> + </div> + </AlertDialogHeader> + <AlertDialogFooter> + <AlertDialogCancel onClick={() => onOpenChange(false)}><T>Cancel</T></AlertDialogCancel> + <AlertDialogAction onClick={onConfirm} disabled={!url}><T>Add Video</T></AlertDialogAction> + </AlertDialogFooter> + </AlertDialogContent> + </AlertDialog> + ); +}; diff --git a/packages/ui/src/pages/Post/components/TikTokEmbed.tsx b/packages/ui/src/pages/Post/components/TikTokEmbed.tsx new file mode 100644 index 00000000..1f988102 --- /dev/null +++ b/packages/ui/src/pages/Post/components/TikTokEmbed.tsx @@ -0,0 +1,64 @@ + +import React, { useEffect } from 'react'; +import { getTikTokId } from '../utils'; + +interface TikTokEmbedProps { + url: string; +} + +declare global { + interface Window { + tiktok?: { + embed?: { + check: () => void; + }; + }; + } +} + +export const TikTokEmbed: React.FC<TikTokEmbedProps> = ({ url }) => { + const videoId = getTikTokId(url); + + useEffect(() => { + // Load TikTok script if not already present + const SCRIPT_ID = 'tiktok-embed-script'; + let script = document.getElementById(SCRIPT_ID) as HTMLScriptElement; + + if (!script) { + script = document.createElement('script'); + script.id = SCRIPT_ID; + script.src = 'https://www.tiktok.com/embed.js'; + script.async = true; + document.body.appendChild(script); + } else { + // If script exists, re-check for new embeds + if (window.tiktok?.embed) { + window.tiktok.embed.check(); + } + } + + // Cleanup not really needed for script, but we might want to handle unmount quirks + }, [url]); + + if (!videoId) { + return <div className="p-4 text-red-500">Invalid TikTok URL</div>; + } + + return ( + <div className="flex justify-center w-full"> + <blockquote + className="tiktok-embed" + cite={url} + data-video-id={videoId} + data-embed-from="oembed" + style={{ maxWidth: '605px', minWidth: '325px', width: '100%', margin: '0 0' }} + > + <section> + <a target="_blank" href={url} rel="noreferrer"> + {url} + </a> + </section> + </blockquote> + </div> + ); +}; diff --git a/packages/ui/src/pages/Post/components/YouTubeDialog.tsx b/packages/ui/src/pages/Post/components/YouTubeDialog.tsx new file mode 100644 index 00000000..f1e3b645 --- /dev/null +++ b/packages/ui/src/pages/Post/components/YouTubeDialog.tsx @@ -0,0 +1,61 @@ + +import React from 'react'; +import { Input } from "@/components/ui/input"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, +} from "@/components/ui/alert-dialog"; +import { T } from "@/i18n"; + +interface YouTubeDialogProps { + open: boolean; + onOpenChange: (open: boolean) => void; + url: string; + onUrlChange: (url: string) => void; + onConfirm: () => void; +} + +export const YouTubeDialog: React.FC<YouTubeDialogProps> = ({ + open, + onOpenChange, + url, + onUrlChange, + onConfirm +}) => { + return ( + <AlertDialog open={open} onOpenChange={onOpenChange}> + <AlertDialogContent> + <AlertDialogHeader> + <AlertDialogTitle><T>Add YouTube Video</T></AlertDialogTitle> + <AlertDialogDescription> + <T>Paste the YouTube video URL below to add it to your post.</T> + </AlertDialogDescription> + <div className="py-4"> + <Input + placeholder="https://www.youtube.com/watch?v=..." + value={url} + onChange={(e) => onUrlChange(e.target.value)} + onKeyDown={(e) => { + if (e.key === 'Enter') { + e.preventDefault(); + onConfirm(); + } + }} + autoFocus + /> + </div> + </AlertDialogHeader> + <AlertDialogFooter> + <AlertDialogCancel onClick={() => onOpenChange(false)}><T>Cancel</T></AlertDialogCancel> + <AlertDialogAction onClick={onConfirm} disabled={!url}><T>Add Video</T></AlertDialogAction> + </AlertDialogFooter> + </AlertDialogContent> + </AlertDialog> + ); +}; diff --git a/packages/ui/src/pages/Post/db.ts b/packages/ui/src/pages/Post/db.ts new file mode 100644 index 00000000..4521e55a --- /dev/null +++ b/packages/ui/src/pages/Post/db.ts @@ -0,0 +1 @@ +export * from '@/lib/db'; diff --git a/packages/ui/src/pages/Post/llm.tsx b/packages/ui/src/pages/Post/llm.tsx new file mode 100644 index 00000000..010d20ce --- /dev/null +++ b/packages/ui/src/pages/Post/llm.tsx @@ -0,0 +1,283 @@ +import { useState, useEffect, useRef } from "react"; +import { toast } from "sonner"; +import { translate } from "@/i18n"; +import { transcribeAudio } from "@/lib/openai"; +import { editImage } from "@/image-api"; +import { PostMediaItem } from "./types"; +import { getUserSettings, updateUserSettings, getUserOpenAIKey } from "./db"; + +export const usePostLLM = (user: any, mediaItem: PostMediaItem | null) => { + const [promptTemplates, setPromptTemplates] = useState<any[]>([]); + const [promptHistory, setPromptHistory] = useState<any[]>([]); + const [historyIndex, setHistoryIndex] = useState(0); + const [lightboxPrompt, setLightboxPrompt] = useState(''); + const [isOptimizingPrompt, setIsOptimizingPrompt] = useState(false); + const [isRecording, setIsRecording] = useState(false); + const [isTranscribing, setIsTranscribing] = useState(false); + const [isGenerating, setIsGenerating] = useState(false); + const [generatedImageUrl, setGeneratedImageUrl] = useState<string | null>(null); + + const mediaRecorderRef = useRef<MediaRecorder | null>(null); + const audioChunksRef = useRef<Blob[]>([]); + + const loadPromptTemplates = async () => { + if (!user) return; + try { + const settings = await getUserSettings(user.id); + setPromptTemplates(settings.promptTemplates || []); + } catch (error) { + console.error('Error loading prompt templates:', error); + } + }; + + const loadPromptHistory = async () => { + if (!user) return; + try { + const settings = await getUserSettings(user.id); + setPromptHistory(settings.promptHistory || []); + } catch (error) { + console.error('Error loading prompt history:', error); + } + }; + + const savePromptTemplates = async (templates: Array<{ name: string; template: string }>) => { + if (!user) return; + try { + const settings = await getUserSettings(user.id); + await updateUserSettings(user.id, { ...settings, promptTemplates: templates }); + setPromptTemplates(templates); + } catch (error) { + console.error('Error saving prompt templates:', error); + throw error; + } + }; + + const addToPromptHistory = async (promptText: string) => { + if (!user || !promptText.trim()) return; + try { + const settings = await getUserSettings(user.id); + const existingHistory = settings.promptHistory || []; + const newHistory = [promptText, ...existingHistory.filter((p: string) => p !== promptText)].slice(0, 50); + + await updateUserSettings(user.id, { ...settings, promptHistory: newHistory }); + setPromptHistory(newHistory); + setHistoryIndex(-1); + } catch (error) { + console.error('Error saving prompt history:', error); + } + }; + + useEffect(() => { + if (user) { + loadPromptTemplates(); + loadPromptHistory(); + } + }, [user]); + + // Actions + const handleOptimizePrompt = async () => { + if (!lightboxPrompt.trim()) { + toast.error(translate('Please enter a prompt first')); + return; + } + setIsOptimizingPrompt(true); + try { + const apiKey = await getUserOpenAIKey(user.id); + + if (!apiKey) { + toast.error(translate('OpenAI API key not configured. Please add it in your profile settings.')); + return; + } + + const response = await fetch('https://api.openai.com/v1/chat/completions', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${apiKey}`, + }, + body: JSON.stringify({ + model: 'gpt-4o-mini', + messages: [ + { + role: 'system', + content: 'You are a helpful assistant that optimizes image generation prompts. Make them more detailed, specific, and effective while keeping the core intent. Return only the optimized prompt without explanations.', + }, + { + role: 'user', + content: `Optimize this image generation prompt: "${lightboxPrompt}"`, + }, + ] + }), + }); + + const data = await response.json(); + const optimizedPrompt = data.choices?.[0]?.message?.content?.trim(); + if (optimizedPrompt) { + setLightboxPrompt(optimizedPrompt); + toast.success(translate('Prompt optimized!')); + } + } catch (error) { + console.error('Error optimizing prompt:', error); + toast.error(translate('Failed to optimize prompt')); + } finally { + setIsOptimizingPrompt(false); + } + }; + + const handleMicrophone = async () => { + if (isRecording) { + if (mediaRecorderRef.current && mediaRecorderRef.current.state === 'recording') { + mediaRecorderRef.current.stop(); + } + setIsRecording(false); + } else { + try { + const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + const mediaRecorder = new MediaRecorder(stream); + mediaRecorderRef.current = mediaRecorder; + audioChunksRef.current = []; + + mediaRecorder.ondataavailable = (event) => { + if (event.data.size > 0) audioChunksRef.current.push(event.data); + }; + + mediaRecorder.onstop = async () => { + const audioBlob = new Blob(audioChunksRef.current, { type: 'audio/webm' }); + stream.getTracks().forEach(track => track.stop()); + setIsTranscribing(true); + try { + const apiKey = await getUserOpenAIKey(user.id); + if (!apiKey) { + toast.error(translate('OpenAI API key not configured')); + return; + } + + const audioFile = new File([audioBlob], 'recording.webm', { type: 'audio/webm' }); + const transcription = await transcribeAudio(audioFile, apiKey); + if (transcription) { + setLightboxPrompt(transcription); + toast.success(translate('Voice transcribed successfully!')); + } + } catch (error) { + console.error('Error transcribing audio:', error); + toast.error(translate('Failed to transcribe audio')); + } finally { + setIsTranscribing(false); + } + }; + + mediaRecorder.start(); + setIsRecording(true); + toast.info(translate('Recording... Click again to stop')); + } catch (error) { + console.error('Error starting recording:', error); + toast.error(translate('Failed to start recording. Please check microphone permissions.')); + } + } + }; + + const handlePromptSubmit = async (prompt: string, isVideo: boolean) => { + if (!prompt.trim() || !mediaItem || isVideo) { + toast.error(translate('Please enter a prompt')); + return; + } + await addToPromptHistory(prompt.trim()); + setIsGenerating(true); + try { + const response = await fetch(mediaItem.image_url); + const blob = await response.blob(); + const file = new File([blob], mediaItem.title || 'image.png', { type: blob.type || 'image/png' }); + const result = await editImage(prompt, [file]); + + if (result) { + const uint8Array = new Uint8Array(result.imageData); + const imageBlob = new Blob([uint8Array], { type: 'image/png' }); + const reader = new FileReader(); + reader.onload = () => { + const dataUrl = reader.result as string; + setGeneratedImageUrl(dataUrl); + toast.success(translate('Image generated successfully!')); + }; + reader.readAsDataURL(imageBlob); + } + } catch (error) { + console.error('Error generating image:', error); + toast.error(translate('Failed to generate image. Please check your Google API key.')); + } finally { + setIsGenerating(false); + } + }; + + // Prompt Template Handlers + const handleApplyTemplate = (template: string) => { + setLightboxPrompt(template); + }; + + const handleSaveTemplate = async () => { + if (!lightboxPrompt.trim()) { + toast.error(translate('Please enter a prompt first')); + return; + } + const templateName = window.prompt(translate('Enter a name for this template:')); + if (!templateName) return; + try { + const newTemplates = [...promptTemplates, { name: templateName.trim(), template: lightboxPrompt }]; + await savePromptTemplates(newTemplates); + toast.success(translate('Template saved successfully!')); + } catch (error) { + console.error('Error saving template:', error); + toast.error(translate('Failed to save template')); + } + }; + + const handleDeleteTemplate = async (index: number) => { + try { + const newTemplates = promptTemplates.filter((_, i) => i !== index); + await savePromptTemplates(newTemplates); + toast.success(translate('Template deleted successfully!')); + } catch (error) { + console.error('Error deleting template:', error); + toast.error(translate('Failed to delete template')); + } + }; + + // History Navigation + const navigatePromptHistory = (direction: 'up' | 'down') => { + if (promptHistory.length === 0) return; + let newIndex = historyIndex; + if (direction === 'up') { + newIndex = Math.min(historyIndex + 1, promptHistory.length - 1); + } else { + newIndex = Math.max(historyIndex - 1, -1); + } + setHistoryIndex(newIndex); + if (newIndex >= 0) { + setLightboxPrompt(promptHistory[newIndex]); + } else { + setLightboxPrompt(''); + } + }; + + return { + promptTemplates, + promptHistory, + historyIndex, + lightboxPrompt, + setLightboxPrompt, + isOptimizingPrompt, + isRecording, + isTranscribing, + isGenerating, + generatedImageUrl, + setGeneratedImageUrl, + handleOptimizePrompt, + handleMicrophone, + handlePromptSubmit, + handleApplyTemplate, + handleSaveTemplate, + handleDeleteTemplate, + navigatePromptHistory, + setHistoryIndex, + addToPromptHistory + }; +}; diff --git a/packages/ui/src/pages/Post/renderers/ArticleRenderer.tsx b/packages/ui/src/pages/Post/renderers/ArticleRenderer.tsx new file mode 100644 index 00000000..a5bcac25 --- /dev/null +++ b/packages/ui/src/pages/Post/renderers/ArticleRenderer.tsx @@ -0,0 +1,648 @@ +import React, { useState, useEffect } from 'react'; +import { supabase } from "@/integrations/supabase/client"; +import { Link, useNavigate } from "react-router-dom"; +import { User as UserIcon, LayoutGrid, StretchHorizontal, FileText, Save, X, Edit3, MoreVertical, Trash2, ArrowUp, ArrowDown, Heart, MessageCircle, Maximize, ImageIcon, Youtube, Music, Wand2, Map, Brush, Mail, Archive } from 'lucide-react'; +import { useOrganization } from "@/contexts/OrganizationContext"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Textarea } from "@/components/ui/textarea"; +import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; +import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from "@/components/ui/dialog"; +import { Code } from "lucide-react"; +import { T, translate } from "@/i18n"; +import MarkdownRenderer from "@/components/MarkdownRenderer"; +import Comments from "@/components/Comments"; +import MagicWizardButton from "@/components/MagicWizardButton"; +import { InlineDropZone } from "@/components/InlineDropZone"; +import { MediaPlayer, MediaProvider } from '@vidstack/react'; +import { defaultLayoutIcons, DefaultVideoLayout } from '@vidstack/react/player/layouts/default'; +import { PostRendererProps } from '../types'; +import { isVideoType, normalizeMediaType } from "@/lib/mediaRegistry"; +import { getVideoUrlWithResolution } from "../utils"; +import ResponsiveImage from "@/components/ResponsiveImage"; +import { generateOfflineZip } from "@/utils/zipGenerator"; +import { toast } from "sonner"; +// Lazy load ImageEditor +const ImageEditor = React.lazy(() => import("@/components/ImageEditor").then(module => ({ default: module.ImageEditor }))); + +const CommentCountButton = ({ pictureId, isOpen, onClick }: { pictureId: string, isOpen: boolean, onClick: () => void }) => { + const [count, setCount] = useState<number | null>(null); + + useEffect(() => { + const fetchCount = async () => { + const { count } = await supabase + .from('comments') + .select('*', { count: 'exact', head: true }) + .eq('picture_id', pictureId); + setCount(count); + }; + fetchCount(); + }, [pictureId]); + + return ( + <Button + variant="ghost" + size="sm" + title={translate('Comment')} + onClick={onClick} + className={isOpen ? "text-primary bg-accent/50" : ""} + > + <MessageCircle className="h-4 w-4 sm:mr-2" /> + <span className="hidden sm:inline">Comment {count !== null ? `(${count})` : ''}</span> + </Button> + ); +}; + +export const ArticleRenderer: React.FC<PostRendererProps> = (props) => { + const { + post, authorProfile, mediaItems, localMediaItems, mediaItem, + isOwner, isEditMode, isLiked, likesCount, localPost, + setLocalPost, setLocalMediaItems, + onEditModeToggle, onEditPost, onViewModeChange, onExportMarkdown, onSaveChanges, + onDeletePost, onDeletePicture, onLike, onUnlinkImage, onRemoveFromPost, onEditPicture, + onGalleryPickerOpen, onYouTubeAdd, onTikTokAdd, onAIWizardOpen, onInlineUpload, onMoveItem, + onMediaSelect, onExpand, onDownload + } = props; + + const currentItems = isEditMode ? localMediaItems : mediaItems; + const [openCommentIds, setOpenCommentIds] = useState<Set<string>>(new Set()); + const [editingImageId, setEditingImageId] = useState<string | null>(null); + const [cacheBustKeys, setCacheBustKeys] = React.useState<Record<string, number>>({}); + const [isEmbedDialogOpen, setIsEmbedDialogOpen] = useState(false); + const [isEmailDialogOpen, setIsEmailDialogOpen] = useState(false); + const [isZipping, setIsZipping] = useState(false); + const navigate = useNavigate(); + const { orgSlug } = useOrganization(); + + const baseUrl = import.meta.env.VITE_SERVER_IMAGE_API_URL || window.location.origin; + const embedUrl = `${baseUrl}/embed/${post?.id || mediaItem.id}`; + const embedCode = `<iframe src="${embedUrl}" width="100%" height="600" frameborder="0"></iframe>`; + const [emailHtml, setEmailHtml] = useState(''); + const [isGeneratingPdf, setIsGeneratingPdf] = useState(false); + + const loadEmailHtml = async () => { + if (!post?.id) return; + try { + const res = await fetch(`${baseUrl}/api/render/email/${post.id}`); + if (res.ok) { + const html = await res.text(); + setEmailHtml(html); + } + } catch (e) { + console.error("Failed to load email html", e); + } + }; + + useEffect(() => { + if (mediaItem && !isEditMode) { + const element = document.getElementById(`media-item-${mediaItem.id}`); + if (element) { + element.scrollIntoView({ behavior: 'smooth', block: 'center' }); + } + } + }, [mediaItem?.id, isEditMode]); + + return ( + <div className="container mx-auto px-4 py-8 max-w-3xl"> + {/* Header */} + <div className="mb-8 border-b pb-8"> + <div className="flex items-center justify-between mb-6"> + <Link + to={`/user/${mediaItem.user_id}`} + className="flex items-center gap-3 group" + > + <div className="w-12 h-12 bg-gradient-primary rounded-full flex items-center justify-center overflow-hidden"> + {authorProfile?.avatar_url ? ( + <ResponsiveImage + src={authorProfile.avatar_url} + alt="Avatar" + imgClassName="w-full h-full object-cover" + sizes="50px" + loading="lazy" + /> + ) : ( + <UserIcon className="h-6 w-6 text-white" /> + )} + </div> + <div> + <div className="font-semibold text-lg group-hover:underline"> + {authorProfile?.display_name || `User ${mediaItem.user_id.slice(0, 8)}`} + </div> + <div className="text-sm text-muted-foreground mr-4"> + {new Date(post?.created_at || mediaItem.created_at).toLocaleDateString(undefined, { + year: 'numeric', + month: 'long', + day: 'numeric' + })} + </div> + </div> + </Link> + + {/* Actions */} + <div className="flex items-center gap-2"> + <div className="flex items-center bg-muted/50 rounded-lg p-1 mr-2 border"> + <Button + variant="ghost" + size="sm" + className="h-8 w-8 p-0" + onClick={() => onViewModeChange('compact')} + title="Compact View" + > + <LayoutGrid className="h-4 w-4" /> + </Button> + <Button + variant="secondary" + size="sm" + className="h-8 w-8 p-0" + title="Article View" + > + <StretchHorizontal className="h-4 w-4" /> + </Button> + </div> + + <Button variant="outline" size="sm" onClick={onExportMarkdown} title={translate('Export to Markdown')}> + <FileText className="h-4 w-4 sm:mr-2" /> + <span className="hidden sm:inline"><T>Export MD</T></span> + </Button> + + <Button variant="outline" size="sm" onClick={() => setIsEmbedDialogOpen(true)} title={translate('Embed')}> + <Code className="h-4 w-4 sm:mr-2" /> + <span className="hidden sm:inline"><T>Embed</T></span> + </Button> + + <Button variant="outline" size="sm" onClick={() => setIsEmailDialogOpen(true)} title={translate('As Email')}> + <Mail className="h-4 w-4 sm:mr-2" /> + <span className="hidden sm:inline"><T>As Email</T></span> + </Button> + + <Button + variant="outline" + size="sm" + onClick={async () => { + if (!post?.id) return; + setIsGeneratingPdf(true); + toast.info("Downloading PDF..."); + try { + // Trigger download via link + const link = document.createElement('a'); + link.href = `${baseUrl}/api/render/pdf/${post.id}`; + link.download = `${post.title || 'export'}.pdf`; // Optional, server sets disposition + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + toast.success("Download started!"); + } catch (e) { + console.error(e); + toast.error("Failed to download PDF"); + } finally { + setIsGeneratingPdf(false); + } + }} + disabled={isGeneratingPdf} + title={translate('Export PDF')} + > + <span className="hidden sm:inline"><T>{isGeneratingPdf ? 'Generating...' : 'Export PDF'}</T></span> + </Button> + + <Button + variant="outline" + size="sm" + onClick={async () => { + setIsZipping(true); + toast.info("Generating ZIP... this may take a moment."); + try { + await generateOfflineZip(post || localPost, currentItems, authorProfile?.display_name || 'Author'); + toast.success("ZIP downloaded!"); + } catch (e) { + console.error(e); + toast.error("Failed to generate ZIP"); + } finally { + setIsZipping(false); + } + }} + disabled={isZipping} + title={translate('Download ZIP')} + > + <Archive className={`h-4 w-4 sm:mr-2 ${isZipping ? 'animate-pulse' : ''}`} /> + <span className="hidden sm:inline"><T>{isZipping ? 'Zipping...' : 'Download ZIP'}</T></span> + </Button> + + {/* Owner Actions */} + {isOwner && ( + <> + <div className="h-6 w-px bg-border mx-1" /> + + {isEditMode ? ( + <div className="flex items-center gap-2"> + <Button size="sm" variant="default" onClick={onSaveChanges} className="gap-2" title={translate('Save')}> + <Save className="h-4 w-4" /> + <span className="hidden sm:inline"><T>Save</T></span> + </Button> + <Button size="sm" variant="ghost" onClick={onEditModeToggle} className="gap-2" title={translate('Cancel')}> + <X className="h-4 w-4" /> + <span className="hidden sm:inline"><T>Cancel</T></span> + </Button> + </div> + ) : ( + <> + <Button variant="outline" size="sm" onClick={onEditModeToggle} className={isEditMode ? "bg-accent" : ""} title={translate('Edit Mode')}> + <Edit3 className="h-4 w-4 sm:mr-2" /> + <span className="hidden sm:inline"><T>Edit Mode</T></span> + </Button> + <DropdownMenu> + <DropdownMenuTrigger asChild> + <Button variant="ghost" size="icon"> + <MoreVertical className="h-4 w-4" /> + </Button> + </DropdownMenuTrigger> + <DropdownMenuContent align="end"> + <DropdownMenuItem onClick={onEditPost} className=""> + <Edit3 className="mr-2 h-4 w-4" /> + <span><T>Edit Meta Wizard</T></span> + </DropdownMenuItem> + <DropdownMenuItem onClick={onDeletePost} className="text-destructive"> + <Trash2 className="mr-2 h-4 w-4" /> + <span><T>Delete Post</T></span> + </DropdownMenuItem> + </DropdownMenuContent> + </DropdownMenu> + </> + )} + </> + )} + </div> + </div> + + {/* Title & Description */} + {isEditMode ? ( + <div className="space-y-4 mb-8 p-4 border rounded-lg bg-muted/30"> + <Input + value={localPost?.title || ''} + onChange={(e) => setLocalPost((prev: any) => ({ ...(prev || { description: '' }), title: e.target.value }))} + className="text-4xl font-bold tracking-tight h-auto py-2 bg-background" + placeholder="Post Title" + /> + <Textarea + value={localPost?.description || ''} + onChange={(e) => setLocalPost((prev: any) => ({ ...(prev || { title: '' }), description: e.target.value }))} + className="text-lg bg-background" + placeholder="Post Description (Markdown supported)" + rows={4} + /> + </div> + ) : ( + <> + <h1 className="text-4xl font-bold tracking-tight mb-4">{post?.title || mediaItem.title}</h1> + {(post?.description || (!post?.title && mediaItem.description)) && ( + <div className="prose prose-lg dark:prose-invert max-w-none text-muted-foreground"> + <MarkdownRenderer content={post?.description || mediaItem.description || ''} /> + </div> + )} + </> + )} + + {/* Tagline / Subtitle if any */} + {post?.title && post.title !== mediaItem.title && mediaItem.title && ( + <div className="mt-4 text-xl font-medium text-muted-foreground"> + {mediaItem.title} + </div> + )} + </div> + + {/* Media Content - Stacked */} + <div className="space-y-12"> + {currentItems.map((item, index) => { + const itemIsVideo = isVideoType(normalizeMediaType(item.type)); + const itemVideoUrl = (itemIsVideo && item.image_url) ? getVideoUrlWithResolution(item.image_url) : undefined; + + return ( + <div key={item.id} id={`media-item-${item.id}`} className="space-y-4 relative"> + {/* Reorder Controls - Desktop Sidebar */} + {isEditMode && ( + <div className="absolute -left-12 top-0 flex flex-col gap-1 z-10 hidden lg:flex"> + <Button size="icon" variant="outline" onClick={() => onMoveItem(index, 'up')} disabled={index === 0}> + <ArrowUp className="h-4 w-4" /> + </Button> + <Button size="icon" variant="outline" onClick={() => onMoveItem(index, 'down')} disabled={index === currentItems.length - 1}> + <ArrowDown className="h-4 w-4" /> + </Button> + </div> + )} + + <div className="overflow-hidden rounded-xl border bg-muted/30 shadow-sm relative group"> + {/* Mobile Reorder Overlay */} + {isEditMode && ( + <div className="absolute top-2 right-2 z-20 flex gap-2 lg:hidden"> + <Button size="icon" variant="secondary" onClick={() => onMoveItem(index, 'up')} disabled={index === 0} className="h-8 w-8"> + <ArrowUp className="h-4 w-4" /> + </Button> + <Button size="icon" variant="secondary" onClick={() => onMoveItem(index, 'down')} disabled={index === currentItems.length - 1} className="h-8 w-8"> + <ArrowDown className="h-4 w-4" /> + </Button> + </div> + )} + + {itemIsVideo ? ( + item.type === 'tiktok' ? ( + <div className="aspect-[9/16] max-h-[80vh] mx-auto bg-black flex justify-center"> + <iframe + src={item.image_url} + className="w-full h-full border-0" + allow="encrypted-media;" + title={item.title} + ></iframe> + </div> + ) : ( + <div className="aspect-video"> + <MediaPlayer + title={item.title} + src={itemVideoUrl} + poster={item.thumbnail_url} + className="w-full h-full" + controls + playsInline + > + <MediaProvider /> + <DefaultVideoLayout icons={defaultLayoutIcons} /> + </MediaPlayer> + </div> + ) + ) : ( + <ResponsiveImage + src={`${item.image_url}${cacheBustKeys[item.id] ? `?v=${cacheBustKeys[item.id]}` : ''}`} + alt={item.title} + imgClassName="w-full h-auto object-cover cursor-pointer" + sizes="(max-width: 768px) 100vw, (max-width: 1200px) 80vw, 1200px" + loading="lazy" + onClick={() => { + if (!isEditMode) { + onMediaSelect(item); + onExpand(item); + } + }} + /> + )} + </div> + + {editingImageId === item.id && ( + <div className="fixed inset-0 z-50 bg-background flex flex-col"> + <React.Suspense fallback={<div className="flex items-center justify-center h-full"><div className="animate-spin rounded-full h-8 w-8 border-b-2 border-primary"></div></div>}> + <ImageEditor + imageUrl={item.image_url} + pictureId={item.id} + onClose={() => setEditingImageId(null)} + onSave={() => { + setCacheBustKeys(prev => ({ ...prev, [item.id]: Date.now() })); + setEditingImageId(null); + onLike(); // Trigger refresh + }} + /> + </React.Suspense> + </div> + )} + + {/* Inline Inputs for Caption */} + {isEditMode ? ( + <div className="px-1 border-l-2 border-primary/20 pl-4 py-1 space-y-2"> + <Input + value={item.title || ''} + onChange={(e) => { + const newItems = [...localMediaItems]; + newItems[index] = { ...newItems[index], title: e.target.value }; + setLocalMediaItems(newItems); + }} + placeholder="Image Title" + className="font-semibold text-lg" + /> + <Textarea + value={item.description || ''} + onChange={(e) => { + const newItems = [...localMediaItems]; + newItems[index] = { ...newItems[index], description: e.target.value }; + setLocalMediaItems(newItems); + }} + placeholder="Image Description" + className="" + rows={2} + /> + </div> + ) : ( + /* Item Description / Caption (View Mode) */ + (item.description || item.title) && (item.description !== post?.description) && ( + <div className="px-1 border-l-2 border-primary/20 pl-4 py-1"> + {item.title && item.title !== post?.title && ( + <h3 className="font-semibold text-lg mb-1">{item.title}</h3> + )} + {item.description && ( + <MarkdownRenderer + content={item.description} + className="prose text-foreground/80 italic" + /> + )} + </div> + ) + )} + + {/* Edit Mode Actions */} + {isEditMode && ( + <div className="flex items-center gap-4 text-sm text-muted-foreground mt-2"> + <Button variant="destructive" size="sm" onClick={() => onRemoveFromPost(index)}> + <Trash2 className="h-4 w-4 mr-2" /> + <T>Remove</T> + </Button> + </div> + )} + + {/* User Interactions per image (View Mode Only) */} + {!isEditMode && ( + <div className="flex flex-col gap-4"> + <div className="flex items-center gap-2 sm:gap-4 text-sm text-muted-foreground overflow-x-auto scrollbar-hide w-full p-1"> + <Button variant="ghost" size="sm" onClick={() => { onMediaSelect(item); onLike(); }} className={item.id === mediaItem?.id && isLiked ? "text-red-500" : ""} title={translate('Like')}> + <Heart className="h-4 w-4 mr-2" fill={item.id === mediaItem?.id && isLiked ? "currentColor" : "none"} /> + {item.likes_count} + </Button> + <CommentCountButton + pictureId={item.id} + isOpen={openCommentIds.has(item.id)} + onClick={() => { + const newSet = new Set(openCommentIds); + if (newSet.has(item.id)) { + newSet.delete(item.id); + } else { + newSet.add(item.id); + } + setOpenCommentIds(newSet); + }} + /> + + {!itemIsVideo && ( + <> + <MagicWizardButton + imageUrl={item.image_url} + imageTitle={item.title} + variant="ghost" + size="sm" + editingPostId={post?.isPseudo ? null : post?.id} + pictureId={item.id} + > + <span className="hidden sm:inline">AI Wizard</span> + </MagicWizardButton> + <Button variant="ghost" size="sm" onClick={() => navigate((orgSlug ? `/org/${orgSlug}` : '') + `/version-map/${item.parent_id || item.id}`)} title="View version map"> + <Map className="h-4 w-4 sm:mr-2" /> + <span className="hidden sm:inline">Map</span> + </Button> + </> + )} + <Button variant="ghost" size="sm" onClick={() => { onMediaSelect(item); onExpand(item); }} title={translate('Expand')}> + <Maximize className="h-4 w-4 sm:mr-2" /> + <span className="hidden sm:inline">Expand</span> + </Button> + + {isOwner && !itemIsVideo && ( + <Button + variant="ghost" + size="sm" + onClick={() => setEditingImageId(item.id)} + className="gap-2" + title={translate('Paint / Edit')} + > + <Brush className="h-4 w-4 sm:mr-2" /> + <span className="hidden sm:inline"><T>Paint</T></span> + </Button> + )} + + {isOwner && ( + <> + <Button + variant="ghost" + size="sm" + onClick={() => { + onMediaSelect(item); + setTimeout(() => onEditPicture(), 0); + }} + className="text-muted-foreground hover:text-primary" + title={translate('Edit')} + > + <Edit3 className="h-4 w-4 sm:mr-2" /> + <span className="hidden sm:inline"><T>Edit</T></span> + </Button> + <Button + variant="ghost" + size="sm" + onClick={() => onUnlinkImage(item)} + className="text-muted-foreground hover:text-destructive" + title={translate('Remove from post')} + > + <Trash2 className="h-4 w-4 sm:mr-2" /> + <span className="hidden sm:inline"><T>Remove</T></span> + </Button> + </> + )} + </div> + + + + {/* Inline Comments */} + {openCommentIds.has(item.id) && ( + <div className="pt-4 border-t animate-in slide-in-from-top-2 fade-in duration-200"> + <Comments pictureId={item.id} /> + </div> + )} + </div> + )} + + {/* Insert Media Drop Zone */} + {isEditMode && ( + <div className="flex flex-col gap-2"> + <InlineDropZone + index={index} + onDrop={(files) => onInlineUpload(files, index + 1)} + /> + <div className="flex gap-2 justify-center"> + <Button variant="outline" size="sm" onClick={() => onGalleryPickerOpen(index + 1)}> + <ImageIcon className="h-4 w-4 mr-2" /> + <T>From Gallery</T> + </Button> + <Button variant="outline" size="sm" onClick={onYouTubeAdd}> + <Youtube className="h-4 w-4 mr-2 text-red-600" /> + <T>YouTube</T> + </Button> + <Button variant="outline" size="sm" onClick={onTikTokAdd}> + <Music className="h-4 w-4 mr-2 text-pink-500" /> + <T>TikTok</T> + </Button> + <Button variant="outline" size="sm" onClick={(e) => { + e.preventDefault(); + e.stopPropagation(); + onAIWizardOpen(index + 1); + }}> + <Wand2 className="h-4 w-4 mr-2" /> + <T>AI Wizard</T> + </Button> + </div> + </div> + )} + </div> + ); + })} + </div> + + <Dialog open={isEmbedDialogOpen} onOpenChange={setIsEmbedDialogOpen}> + <DialogContent> + <DialogHeader> + <DialogTitle>Embed Post</DialogTitle> + <DialogDescription> + Copy the code below to embed this post on your website. + </DialogDescription> + </DialogHeader> + <div className="space-y-4"> + <div className="p-4 bg-muted rounded-md relative group"> + <code className="text-sm break-all font-mono">{embedCode}</code> + <Button + size="sm" + variant="secondary" + className="absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity" + onClick={() => navigator.clipboard.writeText(embedCode)} + > + Copy + </Button> + </div> + <div className="text-xs text-muted-foreground"> + Preview: + <div className="mt-2 border rounded overflow-hidden aspect-video relative"> + <iframe src={embedUrl} width="100%" height="100%" frameBorder="0" className="absolute inset-0" /> + </div> + </div> + </div> + </DialogContent> + </Dialog> + + <Dialog open={isEmailDialogOpen} onOpenChange={(open) => { + setIsEmailDialogOpen(open); + if (open) loadEmailHtml(); + }}> + <DialogContent> + <DialogHeader> + <DialogTitle>Export as Email</DialogTitle> + <DialogDescription> + Copy the HTML below to use in your email marketing tool. + </DialogDescription> + </DialogHeader> + <div className="space-y-4"> + <div className="p-4 bg-muted rounded-md relative group h-64 overflow-y-auto"> + <code className="text-xs break-all font-mono whitespace-pre-wrap">{emailHtml || 'Loading...'}</code> + <Button + size="sm" + variant="secondary" + className="absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity" + onClick={() => navigator.clipboard.writeText(emailHtml)} + > + Copy + </Button> + </div> + </div> + </DialogContent> + </Dialog> + </div> + ); +}; diff --git a/packages/ui/src/pages/Post/renderers/CompactRenderer.tsx b/packages/ui/src/pages/Post/renderers/CompactRenderer.tsx new file mode 100644 index 00000000..fdd195a6 --- /dev/null +++ b/packages/ui/src/pages/Post/renderers/CompactRenderer.tsx @@ -0,0 +1,200 @@ +import React, { useRef, useState, useEffect } from "react"; +import { useNavigate } from "react-router-dom"; +import { useOrganization } from "@/contexts/OrganizationContext"; +import { PostRendererProps } from '../types'; +import { useMediaQuery } from "@/hooks/use-media-query"; +import { isVideoType, normalizeMediaType, detectMediaType } from "@/lib/mediaRegistry"; + +// Extracted Components +import { CompactFilmStrip } from "./components/CompactFilmStrip"; +import { MobileGroupedFeed } from "./components/MobileGroupedFeed"; +import { CompactPostHeader } from "./components/CompactPostHeader"; +import { CompactMediaViewer } from "./components/CompactMediaViewer"; +import { CompactMediaDetails } from "./components/CompactMediaDetails"; + +// Lazy load ImageEditor +const ImageEditor = React.lazy(() => import("@/components/ImageEditor").then(module => ({ default: module.ImageEditor }))); + +export const CompactRenderer: React.FC<PostRendererProps> = (props) => { + const { + post, authorProfile, mediaItems, mediaItem, + isOwner, isLiked, likesCount, + onEditPost, onViewModeChange, onExportMarkdown, + onDeletePost, onDeletePicture, onLike, onEditPicture, + onMediaSelect, onExpand, onDownload, + currentImageIndex, videoPlaybackUrl, videoPosterUrl, + versionImages, handlePrevImage, handleNavigate, navigationData, + isEditMode, localPost, setLocalPost, localMediaItems, setLocalMediaItems, onMoveItem, + onEditModeToggle, onSaveChanges, onGalleryPickerOpen + } = props; + + const [expandedComments, setExpandedComments] = React.useState<Record<string, boolean>>({}); + const [expandedDescriptions, setExpandedDescriptions] = React.useState<Record<string, boolean>>({}); + const [showImageEditor, setShowImageEditor] = React.useState(false); + const [cacheBustKeys, setCacheBustKeys] = React.useState<Record<string, number>>({}); + + const navigate = useNavigate(); + const { orgSlug } = useOrganization(); + + const isDesktop = useMediaQuery("(min-width: 1024px)"); + const showDesktopLayout = isDesktop; + + const effectiveType = mediaItem.type || detectMediaType(mediaItem.image_url); + const isVideo = isVideoType(normalizeMediaType(effectiveType)); + + return ( + <div className={props.className || ""}> + {/* Mobile Header - Controls and Info at Top */} + <div className="lg:hidden landscape:hidden py-4 bg-card "> + <CompactPostHeader + isEditMode={!!isEditMode} + post={post} + localPost={localPost} + setLocalPost={setLocalPost!} + mediaItem={mediaItem} + authorProfile={authorProfile!} + isOwner={!!isOwner} + onViewModeChange={onViewModeChange!} + onExportMarkdown={onExportMarkdown!} + onSaveChanges={onSaveChanges!} + onEditModeToggle={onEditModeToggle!} + onEditPost={onEditPost!} + onDeletePicture={onDeletePicture!} + onDeletePost={onDeletePost!} + mediaItems={mediaItems} + localMediaItems={localMediaItems} + /> + </div> + + {/* Desktop layout: Media on left, content on right */} + <div className="overflow-hidden group lg:h-full"> + <div className="grid grid-cols-1 lg:grid-cols-2 h-full"> + {/* Left Column - Media */} + <div className={`${isVideo ? 'aspect-video' : 'aspect-square'} lg:aspect-auto bg-background border flex flex-col relative lg:h-full`}> + + {/* Row 1: Top Spacer */} + <div className="hidden lg:block h-[50px]"></div> + + {/* Row 2: Main Media Container - DESKTOP ONLY */} + <div className="hidden lg:block flex-1 relative w-full min-h-0 group"> + <CompactMediaViewer + mediaItem={mediaItem} + isVideo={isVideo} + showDesktopLayout={!!showDesktopLayout} + mediaItems={mediaItems} + currentImageIndex={currentImageIndex} + navigationData={navigationData} + handleNavigate={handleNavigate!} + onMediaSelect={onMediaSelect} + onExpand={onExpand} + cacheBustKeys={cacheBustKeys} + navigate={navigate} + isOwner={!!isOwner} + videoPlaybackUrl={videoPlaybackUrl} + videoPosterUrl={videoPosterUrl} + /> + </div> + + {/* Row 3: Filmstrip (Media Items) */} + <CompactFilmStrip + mediaItems={mediaItems} + localMediaItems={localMediaItems} + setLocalMediaItems={setLocalMediaItems} + isEditMode={!!isEditMode} + mediaItem={mediaItem} + onMediaSelect={onMediaSelect} + isOwner={!!isOwner} + onDeletePicture={onDeletePicture!} + onGalleryPickerOpen={onGalleryPickerOpen!} + cacheBustKeys={cacheBustKeys} + /> + + {/* Mobile View - Grouped Feed - Hidden on Desktop */} + <MobileGroupedFeed + mediaItems={mediaItems} + isOwner={!!isOwner} + isLiked={!!isLiked} + onMediaSelect={onMediaSelect} + onLike={onLike} + onDeletePicture={onDeletePicture!} + onGalleryPickerOpen={onGalleryPickerOpen!} + onExpand={onExpand} + onEditPicture={onEditPicture!} + onDownload={onDownload!} + setShowImageEditor={setShowImageEditor} + post={post} + orgSlug={orgSlug} + expandedComments={expandedComments} + setExpandedComments={setExpandedComments} + expandedDescriptions={expandedDescriptions} + setExpandedDescriptions={setExpandedDescriptions} + cacheBustKeys={cacheBustKeys} + /> + </div> + + {/* Right Column - Content */} + <div className="hidden lg:flex landscape:flex flex-col lg:h-full landscape:h-full lg:overflow-y-auto landscape:overflow-y-auto scrollbar-custom"> + <div className="hidden lg:block landscape:block"> + <CompactPostHeader + isEditMode={!!isEditMode} + post={post} + localPost={localPost} + setLocalPost={setLocalPost!} + mediaItem={mediaItem} + authorProfile={authorProfile!} + isOwner={!!isOwner} + onViewModeChange={onViewModeChange!} + onExportMarkdown={onExportMarkdown!} + onSaveChanges={onSaveChanges!} + onEditModeToggle={onEditModeToggle!} + onEditPost={onEditPost!} + onDeletePicture={onDeletePicture!} + onDeletePost={onDeletePost!} + mediaItems={mediaItems} + localMediaItems={localMediaItems} + /> + </div> + + <CompactMediaDetails + isEditMode={!!isEditMode} + localMediaItems={localMediaItems} + setLocalMediaItems={setLocalMediaItems} + mediaItem={mediaItem} + versionImages={versionImages} // @ts-ignore or fix upstream + isLiked={!!isLiked} + likesCount={likesCount} + onLike={onLike} + onExpand={onExpand} + isOwner={!!isOwner} + setShowImageEditor={setShowImageEditor} + onDeletePicture={onDeletePicture!} + onAddAfter={() => onGalleryPickerOpen!(currentImageIndex + 1)} + onEditPicture={onEditPicture!} + onDownload={onDownload!} + isVideo={isVideo} + post={post} + orgSlug={orgSlug} + embedded={!!props.embedded} + /> + </div> + </div> + </div> + {showImageEditor && ( + <div className="fixed inset-0 z-[100] bg-background"> + <React.Suspense fallback={<div className="flex items-center justify-center h-full"><div className="animate-spin rounded-full h-8 w-8 border-b-2 border-primary"></div></div>}> + <ImageEditor + imageUrl={mediaItem.image_url} + pictureId={mediaItem.id} + onClose={() => setShowImageEditor(false)} + onSave={() => { + setCacheBustKeys(prev => ({ ...prev, [mediaItem.id]: Date.now() })); + setShowImageEditor(false); + onLike(); + }} + /> + </React.Suspense> + </div> + )} + </div> + ); +} diff --git a/packages/ui/src/pages/Post/renderers/EmbedRenderer.tsx b/packages/ui/src/pages/Post/renderers/EmbedRenderer.tsx new file mode 100644 index 00000000..0dbb8387 --- /dev/null +++ b/packages/ui/src/pages/Post/renderers/EmbedRenderer.tsx @@ -0,0 +1,146 @@ +import React from 'react'; +import { Heart, Maximize, Share2, Grid } from 'lucide-react'; +import { Button } from "@/components/ui/button"; +import { T } from "@/i18n"; +import MarkdownRenderer from "@/components/MarkdownRenderer"; +import { MediaType } from "@/types"; +import { isVideoType, detectMediaType, normalizeMediaType } from "@/lib/mediaRegistry"; +import { getVideoUrlWithResolution } from "../utils"; +import ResponsiveImage from "@/components/ResponsiveImage"; +import { MediaPlayer, MediaProvider } from '@vidstack/react'; +import { defaultLayoutIcons, DefaultVideoLayout } from '@vidstack/react/player/layouts/default'; +import '@vidstack/react/player/styles/default/theme.css'; +import { PostRendererProps } from '../types'; + +export const EmbedRenderer: React.FC<PostRendererProps> = (props) => { + const { + post, mediaItems, mediaItem, + likesCount, isLiked, + onExpand + } = props; + + const [currentMediaId, setCurrentMediaId] = React.useState<string>(mediaItem?.id || (mediaItems[0]?.id)); + + const currentItem = mediaItems.find(i => i.id === currentMediaId) || mediaItems[0]; + + if (!currentItem) return <div className="text-center p-4">No content</div>; + + const effectiveType = currentItem.type || detectMediaType(currentItem.image_url); + const isVideo = isVideoType(normalizeMediaType(effectiveType)); + const videoUrl = (isVideo && currentItem.image_url) ? getVideoUrlWithResolution(currentItem.image_url) : undefined; + + return ( + <div className="flex flex-col h-full bg-background relative group"> + + {/* Main Media Area */} + <div className="flex-1 relative overflow-hidden bg-black/5 flex items-center justify-center"> + {isVideo ? ( + currentItem.type === 'tiktok' ? ( + <div className="h-full aspect-[9/16] mx-auto bg-black"> + <iframe + src={currentItem.image_url} + className="w-full h-full border-0" + allow="encrypted-media;" + title={currentItem.title} + ></iframe> + </div> + ) : ( + <div className="w-full h-full"> + <MediaPlayer + title={currentItem.title} + src={videoUrl} + poster={currentItem.thumbnail_url} + controls + className="w-full h-full" + > + <MediaProvider /> + <DefaultVideoLayout icons={defaultLayoutIcons} /> + </MediaPlayer> + </div> + ) + ) : ( + <ResponsiveImage + src={currentItem.image_url} + alt={currentItem.title} + imgClassName="w-full h-full object-contain cursor-pointer" + sizes="(max-width: 1024px) 100vw, 1200px" + loading="eager" + data={currentItem.responsive} + onClick={() => onExpand(currentItem)} // Triggers open in new tab + /> + )} + + {/* Embed Overlay Brand/Link - visible on hover over media */} + <div className="absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity bg-black/60 rounded-full p-2 backdrop-blur-md"> + <Button + size="icon" + variant="ghost" + onClick={() => onExpand(currentItem)} + className="text-white hover:text-white/80 h-8 w-8" + title="Open in PhotoShare" + > + <Maximize className="h-4 w-4" /> + </Button> + </div> + </div> + + {/* Filmstrip (only if multiple items) */} + {mediaItems.length > 1 && ( + <div + ref={(el) => { + if (el) { + el.addEventListener('wheel', (e) => { + if (e.deltaY !== 0) { + e.preventDefault(); + el.scrollLeft += e.deltaY; + } + }, { passive: false }); + } + }} + className="h-20 bg-muted/30 border-t flex items-center p-2 gap-2 overflow-x-auto scrollbar-hide shrink-0" + > + {mediaItems.map((item) => ( + <div + key={item.id} + className={`relative h-16 w-16 shrink-0 rounded overflow-hidden cursor-pointer border-2 transition-all ${item.id === currentItem.id ? 'border-primary' : 'border-transparent hover:border-primary/50' + }`} + onClick={() => setCurrentMediaId(item.id)} + > + <ResponsiveImage + src={item.thumbnail_url || item.image_url} + alt={item.title} + imgClassName="w-full h-full object-cover" + sizes="64px" + data={item.responsive} + /> + </div> + ))} + </div> + )} + + {/* Footer / Meta */} + <div className="p-3 bg-background border-t shrink-0 flex items-center justify-between"> + <div className="flex flex-col overflow-hidden mr-4 gap-0.5"> + <h3 className="font-semibold text-sm truncate" title={post?.title}>{post?.title || "Untitled"}</h3> + + {currentItem.title && currentItem.title !== post?.title && ( + <div className="text-xs font-medium truncate opacity-90" title={currentItem.title}>{currentItem.title}</div> + )} + + {(currentItem.description || post?.description) && ( + <p className="text-xs text-muted-foreground truncate" title={currentItem.description || post?.description}> + {currentItem.description || post?.description} + </p> + )} + </div> + + <div className="flex items-center gap-2 text-muted-foreground shrink-0"> + <div className="flex items-center gap-1 text-xs font-medium"> + <Heart className="h-3 w-3" fill={likesCount > 0 ? "currentColor" : "none"} /> + <span>{likesCount}</span> + </div> + </div> + </div> + </div> + ); +}; diff --git a/packages/ui/src/pages/Post/renderers/ThumbsRenderer.tsx b/packages/ui/src/pages/Post/renderers/ThumbsRenderer.tsx new file mode 100644 index 00000000..742dc2a7 --- /dev/null +++ b/packages/ui/src/pages/Post/renderers/ThumbsRenderer.tsx @@ -0,0 +1,106 @@ +import React from 'react'; +import { PostRendererProps } from '../types'; +import MediaCard from "@/components/MediaCard"; +import { normalizeMediaType, isVideoType } from "@/lib/mediaRegistry"; + +import { PHOTO_GRID_THUMBNAIL_WIDTH, PHOTO_GRID_IMAGE_FORMAT } from "@/constants"; +import { Button } from "@/components/ui/button"; +import { LayoutGrid, StretchHorizontal, Grid, FileText, ArrowLeft } from 'lucide-react'; +import { Link } from "react-router-dom"; + +export const ThumbsRenderer: React.FC<PostRendererProps> = (props) => { + const { + mediaItems, + onMediaSelect, + onViewModeChange, + onExportMarkdown, + post, + authorProfile + } = props; + + // Use a similar grid layout as PhotoGrid + return ( + <div className="py-4 space-y-4"> + {/* Header / Controls */} + <div className="flex items-center justify-between bg-card p-3 rounded-lg border shadow-sm"> + <div className="flex items-center space-x-3"> + <Button variant="ghost" size="sm" onClick={() => window.history.back()}> + <ArrowLeft className="h-5 w-5 mr-1" /> + Back + </Button> + <h1 className="text-lg font-semibold truncate max-w-[200px] md:max-w-md"> + {post?.title || 'Gallery'} + </h1> + </div> + + <div className="flex items-center gap-1"> + <div className="flex items-center bg-muted/50 rounded-lg p-1 mr-2 border"> + <Button + variant="secondary" + size="sm" + className="h-8 w-8 p-0 text-muted-foreground" + onClick={() => onViewModeChange('thumbs')} + title="Thumbs View" + > + <Grid className="h-4 w-4" /> + </Button> + <Button + variant="ghost" + size="sm" + className="h-8 w-8 p-0" + onClick={() => onViewModeChange('compact')} + title="Compact View" + > + <LayoutGrid className="h-4 w-4" /> + </Button> + <Button + variant="ghost" + size="sm" + className="h-8 w-8 p-0 text-muted-foreground" + onClick={() => onViewModeChange('article')} + title="Article View" + > + <StretchHorizontal className="h-4 w-4" /> + </Button> + </div> + </div> + </div> + + {/* Grid Content */} + <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4"> + {mediaItems.map((item) => { + const itemType = normalizeMediaType(item.type); + const isVideo = isVideoType(itemType); + + // Logic from PhotoGrid for display URLs + const displayUrl = item.image_url; + + return ( + <div key={item.renderKey || item.id} className="relative group"> + <MediaCard + id={item.id} + pictureId={item.id} // In this context item.id is the picture id + url={displayUrl} + thumbnailUrl={item.thumbnail_url} + title={item.title || `Image ${item.position + 1}`} + author={authorProfile?.display_name || 'Unknown'} + authorId={item.user_id} + likes={item.likes_count || 0} + comments={0} // We don't have per-picture comment counts easily available here yet without extra queries + description={item.description} + type={itemType} + meta={item.meta} + onClick={() => { + onMediaSelect(item); + onViewModeChange('compact'); + }} + // Pass no-ops for actions we might not want in this view or implement later + onLike={() => props.onLike()} + /> + </div> + ); + })} + </div> + </div> + ); +}; diff --git a/packages/ui/src/pages/Post/renderers/components/CompactActionToolbar.tsx b/packages/ui/src/pages/Post/renderers/components/CompactActionToolbar.tsx new file mode 100644 index 00000000..31e6e054 --- /dev/null +++ b/packages/ui/src/pages/Post/renderers/components/CompactActionToolbar.tsx @@ -0,0 +1,305 @@ +import React from "react"; +import { Link, useNavigate } from "react-router-dom"; +import { Heart, MessageCircle, Maximize, Share2, Brush, Trash2, Plus, Map, Edit3, Download, MoreVertical, FilePlus } from 'lucide-react'; +import { Button } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; +import MagicWizardButton from "@/components/MagicWizardButton"; +import { T, translate } from "@/i18n"; +import { PostMediaItem } from "../../types"; +import { useWizardContext } from "@/hooks/useWizardContext"; + +interface CompactActionToolbarProps { + item: PostMediaItem; + isLiked: boolean; + onLike: () => void; + isCommentsOpen: boolean; + onToggleComments: () => void; + isVideo: boolean; + onExpand: (item: PostMediaItem) => void; + isOwner: boolean; + setShowImageEditor: (show: boolean) => void; + onDeletePicture: () => void; + onAddAfter: () => void; + onEditPicture: () => void; + onDownload: () => void; + post?: any; // For MagicWizardButton + orgSlug?: string; + className?: string; + buttonSize?: "default" | "sm" | "lg" | "icon"; + embedded?: boolean; +} + +export const CompactActionToolbar: React.FC<CompactActionToolbarProps> = ({ + item, + isLiked, + onLike, + isCommentsOpen, + onToggleComments, + isVideo, + onExpand, + isOwner, + setShowImageEditor, + onDeletePicture, + onAddAfter, + onEditPicture, + onDownload, + post, + orgSlug, + className, + buttonSize = "default", + embedded +}) => { + const navigate = useNavigate(); + + // In embedded mode (like List View), we want to use the collapsed menu even on desktop + // because the width is constrained. + const showFullToolbar = !embedded; + const { setWizardImage, setCreationWizardOpen } = useWizardContext(); + + const handleCreatePage = (e: React.MouseEvent) => { + e.stopPropagation(); + + // Set the image for the wizard + setWizardImage({ + id: item.id, + src: item.image_url, + title: item.title, + realDatabaseId: item.id, + selected: true + }); + + // Open the global creation wizard in page mode + setCreationWizardOpen(true, 'page'); + }; + + return ( + <div className={`flex items-center justify-between ${className}`}> + {/* Always Visible: Engagement Group */} + <div className="flex items-center gap-1"> + <Button + variant="ghost" + size={buttonSize} + onClick={() => { onLike(); }} + className={isLiked ? "text-red-500 hover:text-red-600 hover:bg-red-50 dark:hover:bg-red-950/30" : "text-pink-500/70 hover:text-pink-600 hover:bg-pink-50 dark:hover:bg-pink-950/30"} + title="Like" + > + <Heart className="h-5 w-5" fill={isLiked ? "currentColor" : "none"} /> + </Button> + <Button + variant="ghost" + size={buttonSize} + onClick={onToggleComments} + className={isCommentsOpen ? "text-blue-600 hover:text-blue-700 hover:bg-blue-50 dark:hover:bg-blue-950/30" : "text-blue-500/70 hover:text-blue-600 hover:bg-blue-50 dark:hover:bg-blue-950/30"} + title="Comments" + > + <MessageCircle className="h-5 w-5" /> + </Button> + <Button + variant="ghost" + size={buttonSize} + className="text-indigo-500/70 hover:text-indigo-600 hover:bg-indigo-50 dark:hover:bg-indigo-950/30" + title="Share" + > + <Share2 className="h-5 w-5" /> + </Button> + </div> + + {/* Right Side Actions */} + <div className="flex items-center gap-1"> + + {/* Desktop: Full Toolbar (Hidden on Mobile OR Embedded) */} + <div className={`${showFullToolbar ? 'hidden lg:flex' : 'hidden'} items-center gap-1`}> + {/* Separator */} + <div className="h-4 w-px bg-border mx-1" /> + + {/* Group 2: View / Download */} + <Button + variant="ghost" + size={buttonSize} + onClick={onDownload} + className="text-emerald-500/70 hover:text-emerald-600 hover:bg-emerald-50 dark:hover:bg-emerald-950/30" + title="Download" + > + <Download className="h-5 w-5" /> + </Button> + {!isVideo && ( + <Button + variant="ghost" + size={buttonSize} + onClick={() => onExpand(item)} + className="text-sky-500/70 hover:text-sky-600 hover:bg-sky-50 dark:hover:bg-sky-950/30" + title="Fullscreen" + > + <Maximize className="h-5 w-5" /> + </Button> + )} + + {/* Group 3: Tools/Owner */} + {((!isVideo) || isOwner) && ( + <> + <div className="h-4 w-px bg-border mx-1" /> + {!isVideo && ( + <> + <MagicWizardButton + imageUrl={item.image_url} + imageTitle={item.title} + variant="ghost" + size={buttonSize === 'icon' ? 'sm' : 'default'} + editingPostId={post?.isPseudo ? null : post?.id} + pictureId={item.id} + // MagicWizardButton implementation handles its own styles, usually purple/magic color. + /> + <Button + variant="ghost" + size={buttonSize} + onClick={() => navigate((orgSlug ? `/org/${orgSlug}` : '') + `/version-map/${item.parent_id || item.id}`)} + className="text-amber-500/70 hover:text-amber-600 hover:bg-amber-50 dark:hover:bg-amber-950/30" + title="View version map" + > + <Map className="h-5 w-5" /> + </Button> + </> + )} + + {!isVideo && ( + <Button + variant="ghost" + size={buttonSize} + onClick={handleCreatePage} + className="text-pink-500/70 hover:text-pink-600 hover:bg-pink-50 dark:hover:bg-pink-950/30" + title="Create Page from Image" + > + <FilePlus className="h-5 w-5" /> + </Button> + )} + + {isOwner && ( + <> + {!isVideo && ( + <Button + variant="ghost" + size={buttonSize} + onClick={(e) => { + e.stopPropagation(); + setShowImageEditor(true); + }} + className="text-violet-500/70 hover:text-violet-600 hover:bg-violet-50 dark:hover:bg-violet-950/30" + title="Paint / Edit" + > + <Brush className="h-5 w-5" /> + </Button> + )} + {!isVideo && ( + <Button + variant="ghost" + size={buttonSize} + onClick={onEditPicture} + className="text-blue-500/70 hover:text-blue-600 hover:bg-blue-50 dark:hover:bg-blue-950/30" + title={translate('Edit')} + > + <Edit3 className="h-5 w-5" /> + </Button> + )} + <Button + variant="ghost" + size={buttonSize} + onClick={onDeletePicture} + className="text-destructive/70 hover:text-destructive hover:bg-destructive/10" + title="Remove picture" + > + <Trash2 className="h-5 w-5" /> + </Button> + <Button + variant="ghost" + size={buttonSize} + onClick={onAddAfter} + className="text-green-600/70 hover:text-green-700 hover:bg-green-50 dark:hover:bg-green-950/30" + title="Add picture after" + > + <Plus className="h-5 w-5" /> + </Button> + </> + )} + </> + )} + </div> + + {/* Mobile: Overflow Menu (Visible on Mobile OR if Embedded) */} + <div className={`${showFullToolbar ? 'lg:hidden' : ''}`}> + <DropdownMenu> + <DropdownMenuTrigger asChild> + <Button variant="ghost" size={buttonSize} className="text-muted-foreground"> + <MoreVertical className="h-5 w-5" /> + </Button> + </DropdownMenuTrigger> + <DropdownMenuContent align="end" className="w-56"> + <DropdownMenuItem onClick={onDownload} className="text-emerald-600 focus:text-emerald-700"> + <Download className="mr-2 h-4 w-4" /> <span>Download</span> + </DropdownMenuItem> + {!isVideo && ( + <DropdownMenuItem onClick={() => onExpand(item)} className="text-sky-600 focus:text-sky-700"> + <Maximize className="mr-2 h-4 w-4" /> <span>Fullscreen</span> + </DropdownMenuItem> + )} + + {/* Tools Section */} + {((!isVideo) || isOwner) && ( + <> + <div className="h-px bg-border my-1" /> + {!isVideo && ( + <> + <div className="px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 cursor-default flex items-center"> + <div className="flex-1 -ml-2"> + <MagicWizardButton + imageUrl={item.image_url} + imageTitle={item.title} + variant="ghost" + size="sm" + editingPostId={post?.isPseudo ? null : post?.id} + pictureId={item.id} + className="w-full justify-start font-normal h-8 px-2" + /> + </div> + </div> + <DropdownMenuItem onClick={() => navigate((orgSlug ? `/org/${orgSlug}` : '') + `/version-map/${item.parent_id || item.id}`)} className="text-amber-600 focus:text-amber-700"> + <Map className="mr-2 h-4 w-4" /> <span>Version Map</span> + </DropdownMenuItem> + </> + )} + <DropdownMenuItem onClick={handleCreatePage} className="text-pink-600 focus:text-pink-700"> + <FilePlus className="mr-2 h-4 w-4" /> <span>Create Page</span> + </DropdownMenuItem> + {isOwner && ( + <> + {!isVideo && ( + <DropdownMenuItem onClick={(e) => { e.stopPropagation(); setShowImageEditor(true); }} className="text-violet-600 focus:text-violet-700"> + <Brush className="mr-2 h-4 w-4" /> <span>Paint / Edit</span> + </DropdownMenuItem> + )} + {!isVideo && ( + <DropdownMenuItem onClick={onEditPicture} className="text-blue-600 focus:text-blue-700"> + <Edit3 className="mr-2 h-4 w-4" /> <span>Edit Metadata</span> + </DropdownMenuItem> + )} + <DropdownMenuItem onClick={onAddAfter} className="text-green-600 focus:text-green-700"> + <Plus className="mr-2 h-4 w-4" /> <span>Add Picture</span> + </DropdownMenuItem> + <DropdownMenuItem onClick={onDeletePicture} className="text-destructive focus:text-destructive"> + <Trash2 className="mr-2 h-4 w-4" /> <span>Delete Picture</span> + </DropdownMenuItem> + </> + )} + </> + )} + </DropdownMenuContent> + </DropdownMenu> + </div> + </div> + </div> + ); +}; diff --git a/packages/ui/src/pages/Post/renderers/components/CompactFilmStrip.tsx b/packages/ui/src/pages/Post/renderers/components/CompactFilmStrip.tsx new file mode 100644 index 00000000..89e2136f --- /dev/null +++ b/packages/ui/src/pages/Post/renderers/components/CompactFilmStrip.tsx @@ -0,0 +1,277 @@ +import React, { useRef, useEffect, useState } from "react"; +import { Trash2, Plus, Layers, ChevronUp, ChevronDown } from 'lucide-react'; +import { Button } from "@/components/ui/button"; +import { T } from "@/i18n"; +import ResponsiveImage from "@/components/ResponsiveImage"; +import { isVideoType, normalizeMediaType, detectMediaType } from "@/lib/mediaRegistry"; +import { PostMediaItem } from "../../types"; + +interface CompactFilmStripProps { + mediaItems: PostMediaItem[]; + localMediaItems?: PostMediaItem[]; + setLocalMediaItems?: (items: PostMediaItem[]) => void; + isEditMode: boolean; + mediaItem: PostMediaItem; // Current selected item + onMediaSelect: (item: PostMediaItem) => void; + isOwner: boolean; + onDeletePicture: () => void; + onGalleryPickerOpen: (index: number) => void; + cacheBustKeys: Record<string, number>; +} + +export const CompactFilmStrip: React.FC<CompactFilmStripProps> = ({ + mediaItems, + localMediaItems, + setLocalMediaItems, + isEditMode, + mediaItem, + onMediaSelect, + isOwner, + onDeletePicture, + onGalleryPickerOpen, + cacheBustKeys +}) => { + const scrollContainerRef = useRef<HTMLDivElement>(null); + const [draggedIndex, setDraggedIndex] = useState<number | null>(null); + + // Wheel scroll support for horizontal scrolling + useEffect(() => { + const container = scrollContainerRef.current; + if (container) { + const handleWheel = (e: WheelEvent) => { + if (e.deltaY !== 0) { + e.preventDefault(); + container.scrollLeft += e.deltaY; + } + }; + container.addEventListener('wheel', handleWheel, { passive: false }); + return () => container.removeEventListener('wheel', handleWheel); + } + }, []); + + const handleDragStart = (e: React.DragEvent, index: number) => { + e.stopPropagation(); + e.nativeEvent.stopImmediatePropagation(); + setDraggedIndex(index); + e.dataTransfer.effectAllowed = "move"; + e.dataTransfer.setData('polymech/internal', 'true'); + }; + + const handleDragOver = (e: React.DragEvent, index: number) => { + e.preventDefault(); + e.stopPropagation(); + e.nativeEvent.stopImmediatePropagation(); + e.dataTransfer.dropEffect = "move"; + }; + + const handleDrop = (e: React.DragEvent, dropIndex: number) => { + e.preventDefault(); + e.stopPropagation(); + e.nativeEvent.stopImmediatePropagation(); + if (draggedIndex === null || draggedIndex === dropIndex) return; + + const newItems = [...(localMediaItems || [])]; + const [movedItem] = newItems.splice(draggedIndex, 1); + newItems.splice(dropIndex, 0, movedItem); + + const reordered = newItems.map((item, idx) => ({ ...item, position: idx })); + + if (setLocalMediaItems) { + setLocalMediaItems(reordered); + } + + setDraggedIndex(null); + }; + + const itemsToRender = isEditMode ? (localMediaItems || []) : mediaItems; + + // Group items for filmstrip display + // We want to show only ONE item per version group. + // If the currently selected mediaItem belongs to a group, show THAT item as the representative. + // Otherwise show the first one (or cover). + const groupedItems: PostMediaItem[] = React.useMemo(() => { + if (isEditMode) return itemsToRender; + + const groups = new Map<string, PostMediaItem[]>(); + itemsToRender.forEach(item => { + const rootId = item.parent_id || item.id; + if (!groups.has(rootId)) { + groups.set(rootId, []); + } + groups.get(rootId)?.push(item); + }); + + // Convert groups to representative items + const representatives: PostMediaItem[] = []; + groups.forEach((groupItems) => { + // Check if current mediaItem is in this group + const activeInGroup = groupItems.find(i => i.id === mediaItem?.id); + if (activeInGroup) { + representatives.push(activeInGroup); + } else { + // Determine cover/default + // Logic: Sort by position or created_at + groupItems.sort((a, b) => (a.position || 0) - (b.position || 0)); + // Filter visible only? Ideally yes, unless isOwner + const visible = groupItems.filter(i => isOwner || i.visible !== false); + if (visible.length > 0) { + representatives.push(visible[0]); + } else if (isOwner && groupItems.length > 0) { + representatives.push(groupItems[0]); // Owner sees hidden + } + } + }); + + // Sort representatives by the position of their group (using the first item in group as ref) + // Or simply preserve the order they appeared (insertion order in Map preserves this roughly if sorted input) + // Let's assume input `mediaItems` is sorted by position. + return representatives; + }, [itemsToRender, mediaItem?.id, isEditMode, isOwner]); + + if (groupedItems.length <= 1) { + return <div className="hidden lg:block landscape:block h-[50px]"></div>; + } + + return ( + <div className="bg-muted/80 backdrop-blur-sm p-2 landscape:p-1 lg:landscape:p-2 border-t flex-shrink-0 landscape:h-20 lg:landscape:h-44 hidden lg:block landscape:block"> + <div className="flex items-center justify-between mb-1 landscape:hidden lg:landscape:flex"> + <span className="text-foreground text-xs font-medium"><T>Gallery</T> ({groupedItems.length})</span> + </div> + <div className="flex gap-3 overflow-x-auto scrollbar-hide landscape:h-16 lg:landscape:h-36" ref={scrollContainerRef}> + {groupedItems.map((item, index) => ( + <div + key={item.renderKey || item.id} + draggable={isEditMode} + onDragStart={(e) => isEditMode && handleDragStart(e, index)} + onDragOver={(e) => isEditMode && handleDragOver(e, index)} + onDrop={(e) => isEditMode && handleDrop(e, index)} + className={`relative landscape:mx-1 landscape:py-0 lg:landscape:m-2 flex-shrink-0 landscape:w-16 landscape:h-16 lg:landscape:w-32 lg:landscape:h-32 overflow-hidden cursor-pointer border-2 transition-all ${item.id === mediaItem?.id + ? 'shadow-lg scale-105' + : 'hover:scale-102' + }`} + onClick={() => { + onMediaSelect(item); + }} + > + {(() => { + const rootId = item.parent_id || item.id; + // Search in the FULL list (itemsToRender) to find all versions for this group + const versions = itemsToRender.filter(v => + (v.id === rootId || v.parent_id === rootId) && (isOwner || v.visible) + ); + const versionCount = versions.length; // Calculate versionCount here + + // Sort versions to determine current index (critical for prev/next logic) + versions.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime()); + const currentIndex = versions.findIndex(v => v.id === item.id); + + + // Only show badge if NOT active item (active item gets controls) + if (versionCount > 1 && item.id !== mediaItem?.id) { + return ( + <div className="absolute top-1 left-1 z-20 bg-black/50 text-white text-[10px] px-1.5 py-0.5 rounded-md backdrop-blur-sm flex items-center gap-1"> + <Layers className="w-3 h-3" /> + <span>{versionCount}</span> + </div> + ); + } + + // Show controls IF active item has versions + if (versionCount > 1 && item.id === mediaItem?.id) { + return ( + <div className="absolute left-0 top-0 bottom-0 w-6 flex flex-col justify-between items-center bg-black/40 z-30 py-1 backdrop-blur-[1px]"> + <Button + variant="ghost" + size="icon" + className="h-5 w-5 text-white/80 hover:text-white hover:bg-white/20 rounded-sm p-0.5" + onClick={(e) => { + e.stopPropagation(); + const prevIndex = (currentIndex - 1 + versionCount) % versionCount; + onMediaSelect(versions[prevIndex]); + }} + title="Previous Version" + > + <ChevronUp className="w-4 h-4" /> + </Button> + + <div className="text-[9px] font-bold text-white/90 font-mono shadow-sm"> + v{currentIndex + 1} + </div> + + <Button + variant="ghost" + size="icon" + className="h-5 w-5 text-white/80 hover:text-white hover:bg-white/20 rounded-sm p-0.5" + onClick={(e) => { + e.stopPropagation(); + const nextIndex = (currentIndex + 1) % versionCount; + onMediaSelect(versions[nextIndex]); + }} + title="Next Version" + > + <ChevronDown className="w-4 h-4" /> + </Button> + </div> + ); + } + + return null; + })()} + <ResponsiveImage + src={`${item.thumbnail_url || item.image_url}${cacheBustKeys[item.id] ? `?v=${cacheBustKeys[item.id]}` : ''}`} + alt={`Item ${index + 1}`} + imgClassName="w-full h-full object-cover" + sizes="150px" + loading="lazy" + /> + {isVideoType(normalizeMediaType(item.type || detectMediaType(item.image_url))) && ( + <div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2"> + <div className="w-6 h-6 bg-black/50 rounded-full flex items-center justify-center"> + <svg className="w-3 h-3 text-white" fill="currentColor" viewBox="0 0 24 24"><path d="M8 5v14l11-7z" /></svg> + </div> + </div> + )} + {item.id === mediaItem?.id && ( + <div className="absolute inset-0 ring-2 ring-primary ring-inset flex items-center justify-center group-hover:bg-black/10 transition-colors"> + {/* Actions only visible on hover */} + <div className="absolute top-1 right-1 flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity z-30"> + {isOwner && ( + <> + <Button + variant="destructive" + size="icon" + className="h-6 w-6 rounded-full" + onClick={(e) => { + e.stopPropagation(); + onMediaSelect(item); + onDeletePicture(); + }} + title="Remove picture" + > + <Trash2 className="h-3 w-3" /> + </Button> + <Button + variant="secondary" + size="icon" + className="h-6 w-6 rounded-full" + onClick={(e) => { + e.stopPropagation(); + onMediaSelect(item); + onGalleryPickerOpen(index + 1); + }} + title="Add picture after" + > + <Plus className="h-3 w-3" /> + </Button> + </> + )} + </div> + {/* Removed "Current" text badge */} + </div> + )} + </div> + ))} + </div> + </div> + ); +}; diff --git a/packages/ui/src/pages/Post/renderers/components/CompactMediaDetails.tsx b/packages/ui/src/pages/Post/renderers/components/CompactMediaDetails.tsx new file mode 100644 index 00000000..ffa883b2 --- /dev/null +++ b/packages/ui/src/pages/Post/renderers/components/CompactMediaDetails.tsx @@ -0,0 +1,147 @@ +import React from "react"; +import { Input } from "@/components/ui/input"; +import { Textarea } from "@/components/ui/textarea"; +import MarkdownRenderer from "@/components/MarkdownRenderer"; +import Comments from "@/components/Comments"; +import { ExternalLink } from "lucide-react"; +import { CompactActionToolbar } from "./CompactActionToolbar"; +import { PostMediaItem } from "../../types"; + +interface CompactMediaDetailsProps { + isEditMode: boolean; + localMediaItems?: PostMediaItem[]; + setLocalMediaItems?: (items: PostMediaItem[]) => void; + mediaItem: PostMediaItem; + versionImages: any[]; // Adjust type if possible + isLiked: boolean; + likesCount: number; + onLike: () => void; + onExpand: (item: PostMediaItem) => void; + isOwner: boolean; + setShowImageEditor: (show: boolean) => void; + onDeletePicture: () => void; + onAddAfter: () => void; + onEditPicture: () => void; + onDownload: () => void; + isVideo: boolean; + post?: any; + orgSlug?: string; + embedded?: boolean; +} + +export const CompactMediaDetails: React.FC<CompactMediaDetailsProps> = ({ + isEditMode, + localMediaItems, + setLocalMediaItems, + mediaItem, + versionImages, + isLiked, + likesCount, + onLike, + onExpand, + isOwner, + setShowImageEditor, + onDeletePicture, + onAddAfter, + onEditPicture, + onDownload, + isVideo, + post, + orgSlug, + embedded +}) => { + // Media Title/Desc Logic + return ( + <> + {isEditMode ? ( + <div className="px-3 pb-2 space-y-2"> + <Input + value={localMediaItems?.find(i => i.id === mediaItem.id)?.title || ''} + onChange={(e) => { + if (!setLocalMediaItems || !localMediaItems) return; + const newItems = localMediaItems.map(item => + item.id === mediaItem.id ? { ...item, title: e.target.value } : item + ); + setLocalMediaItems(newItems); + }} + className="font-semibold" + placeholder="Image Title" + /> + <Textarea + value={localMediaItems?.find(i => i.id === mediaItem.id)?.description || ''} + onChange={(e) => { + if (!setLocalMediaItems || !localMediaItems) return; + const newItems = localMediaItems.map(item => + item.id === mediaItem.id ? { ...item, description: e.target.value } : item + ); + setLocalMediaItems(newItems); + }} + className="text-sm" + placeholder="Image Description" + /> + </div> + ) : ( + <> + {(mediaItem.title || (versionImages.find(v => v.path === mediaItem.id)?.title)) && ( + <div className="px-3 pb-2"> + <h1 className="text-base font-semibold">{mediaItem.title}</h1> + </div> + )} + <div className="p-3"> + {mediaItem.description && <MarkdownRenderer content={mediaItem.description} className="prose-sm text-sm" />} + </div> + </> + )} + + {/* External Link for Link Posts */} + {(mediaItem.type === 'page-external' || (mediaItem.meta as any)?.url) && ( + <div className="px-3 pb-2"> + <a + href={(mediaItem.meta as any)?.url || '#'} + target="_blank" + rel="noopener noreferrer" + className="flex items-center gap-2 text-sm text-blue-500 dark:text-blue-400 hover:scale-[1.01] active:scale-[0.99] transition-transform bg-blue-50/50 dark:bg-blue-900/20 p-2 rounded-md border border-blue-100 dark:border-blue-800 max-w-full" + onClick={(e) => e.stopPropagation()} + title={(mediaItem.meta as any)?.url} + > + <ExternalLink className="h-4 w-4 flex-shrink-0" /> + <span className="truncate hover:underline">{(mediaItem.meta as any)?.url}</span> + </a> + </div> + )} + + {/* Actions Footer */} + <div className="p-3 border-t"> + <CompactActionToolbar + item={mediaItem} + isLiked={isLiked} + onLike={onLike} + isCommentsOpen={false} // Always show comments below, so toggle logic might not differ, or we don't need button to toggle? + // Original code: <Button ... onClick={() => {}} ><MessageCircle /></Button> (No toggle logic in desktop view, implies comments always visible or button just scrolls?) + // Line 834: <Button variant="ghost" size="default"><MessageCircle className="h-6 w-6" /></Button> (No onClick) + // Line 903: <Comments pictureId={mediaItem.id} /> (Always rendered) + // So button is just visual or potentially scroll to comments. + onToggleComments={() => { }} + isVideo={isVideo} + onExpand={onExpand} + isOwner={isOwner} + setShowImageEditor={setShowImageEditor} + onDeletePicture={onDeletePicture} + onAddAfter={onAddAfter} + onEditPicture={onEditPicture} + onDownload={onDownload} + post={post} + orgSlug={orgSlug} + className="mb-2" + embedded={embedded} + /> + + {likesCount > 0 && <div className="text-sm font-semibold px-2">{likesCount} likes</div>} + </div> + + <div className="px-3 pb-3 pt-3 border-t"> + <Comments pictureId={mediaItem.id} /> + </div> + </> + ); +}; diff --git a/packages/ui/src/pages/Post/renderers/components/CompactMediaViewer.tsx b/packages/ui/src/pages/Post/renderers/components/CompactMediaViewer.tsx new file mode 100644 index 00000000..0261e0f7 --- /dev/null +++ b/packages/ui/src/pages/Post/renderers/components/CompactMediaViewer.tsx @@ -0,0 +1,266 @@ +import React, { useRef, useEffect } from "react"; +import { Button } from "@/components/ui/button"; +import { ArrowLeft } from 'lucide-react'; +import { MediaPlayer, MediaProvider, type MediaPlayerInstance } from '@vidstack/react'; +import { defaultLayoutIcons, DefaultVideoLayout } from '@vidstack/react/player/layouts/default'; +import '@vidstack/react/player/styles/default/theme.css'; +import ResponsiveImage from "@/components/ResponsiveImage"; +import { PostMediaItem } from "../../types"; +import { getTikTokVideoId, getYouTubeVideoId, isTikTokUrl } from "@/utils/mediaUtils"; +import { Play } from 'lucide-react'; + +interface CompactMediaViewerProps { + mediaItem: PostMediaItem; + isVideo: boolean; + showDesktopLayout: boolean; + mediaItems: PostMediaItem[]; + currentImageIndex: number; + navigationData: any; + handleNavigate: (direction: 'next' | 'prev') => void; + onMediaSelect: (item: PostMediaItem) => void; + onExpand: (item: PostMediaItem) => void; + cacheBustKeys: Record<string, number>; + navigate: (path: any) => void; // React Router navigate + isOwner: boolean; + videoPlaybackUrl?: string; + videoPosterUrl?: string; +} + +export const CompactMediaViewer: React.FC<CompactMediaViewerProps> = ({ + mediaItem, + isVideo, + showDesktopLayout, + mediaItems, + currentImageIndex, + navigationData, + handleNavigate, + onMediaSelect, + onExpand, + cacheBustKeys, + navigate, + isOwner, + videoPlaybackUrl, + videoPosterUrl +}) => { + const playerRef = useRef<MediaPlayerInstance>(null); + const [externalVideoState, setExternalVideoState] = React.useState<Record<string, boolean>>({}); + + // Cleanup video player + useEffect(() => { + // Stop any background videos + window.dispatchEvent(new CustomEvent('stop-video', { detail: { sourceId: 'compact-media-viewer' } })); + + return () => { + playerRef.current?.pause(); + }; + }, []); + + // Version Control Logic + const getVersionsForCurrentItem = () => { + if (!mediaItem) return []; + const rootId = mediaItem.parent_id || mediaItem.id; + const visibleVersions = mediaItems.filter(item => { + const isGroupMatch = (item.id === rootId) || (item.parent_id === rootId); + if (!isGroupMatch) return false; + if (!isOwner && !item.visible) return false; + return true; + }); + return visibleVersions.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime()); + }; + + const currentVersions = getVersionsForCurrentItem(); + const currentVersionIndex = currentVersions.findIndex(v => v.id === mediaItem.id); + + const handleVersionSwitch = (direction: 'next' | 'prev') => { + if (currentVersions.length <= 1) return; + let newIndex = direction === 'next' ? currentVersionIndex + 1 : currentVersionIndex - 1; + if (newIndex >= currentVersions.length) newIndex = 0; + if (newIndex < 0) newIndex = currentVersions.length - 1; + + const nextVersion = currentVersions[newIndex]; + if (nextVersion) { + onMediaSelect(nextVersion); + } + }; + + // Keyboard navigation for versions + useEffect(() => { + if (!showDesktopLayout) return; + + const handleKeyDown = (e: KeyboardEvent) => { + if (['INPUT', 'TEXTAREA'].includes((e.target as HTMLElement).tagName)) return; + if (e.key === 'ArrowUp') { + e.preventDefault(); + handleVersionSwitch('prev'); + } else if (e.key === 'ArrowDown') { + e.preventDefault(); + handleVersionSwitch('next'); + } + }; + + window.addEventListener('keydown', handleKeyDown); + return () => window.removeEventListener('keydown', handleKeyDown); + }, [showDesktopLayout, currentVersions, currentVersionIndex, mediaItem]); + + + return ( + <div className="absolute inset-0 flex items-center justify-center"> + {/* Mobile Landscape Back Button Overlay */} + <div className="absolute top-4 left-4 z-50 lg:hidden landscape:block hidden"> + <Button + variant="secondary" + size="icon" + className="rounded-full bg-black/50 text-white hover:bg-black/70 backdrop-blur-sm" + onClick={() => { + playerRef.current?.pause(); + navigate(-1); + }} + > + <ArrowLeft className="h-6 w-6" /> + </Button> + </div> + + {showDesktopLayout ? ( + isVideo ? ( + mediaItem.type === 'tiktok' ? ( + <div className="w-full h-full bg-black flex justify-center"> + <iframe + src={mediaItem.image_url} + className="h-full aspect-[9/16] border-0" + allow="encrypted-media;" + title={mediaItem.title} + ></iframe> + </div> + ) : ( + <div className="w-full h-full"> + <MediaPlayer + ref={playerRef} + title={mediaItem.title} + src={videoPlaybackUrl} + poster={videoPosterUrl} + load="idle" + posterLoad="eager" + controls + className="w-full h-full" + > + <MediaProvider /> + <DefaultVideoLayout icons={defaultLayoutIcons} /> + </MediaPlayer> + </div> + ) + ) : ( + (() => { + if (mediaItem.type === 'page-external') { + const url = (mediaItem.meta as any)?.url || mediaItem.image_url; + const ytId = getYouTubeVideoId(url); + + if (ytId) { + return ( + <div className="w-full h-full bg-black flex justify-center"> + <iframe + src={`https://www.youtube.com/embed/${ytId}`} + className="w-full h-full border-0" + allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" + allowFullScreen + title={mediaItem.title} + ></iframe> + </div> + ); + } + + if (isTikTokUrl(url)) { + const tikTokId = getTikTokVideoId(url); + const isPlaying = showDesktopLayout && externalVideoState[mediaItem.id]; + + if (isPlaying && tikTokId) { + return ( + <div className="w-full h-full bg-black flex justify-center"> + <iframe + src={`https://www.tiktok.com/embed/v2/${tikTokId}`} + className="h-full aspect-[9/16] border-0" + allow="encrypted-media;" + title={mediaItem.title} + ></iframe> + </div> + ); + } + + return ( + <div className="relative w-full h-full group" onClick={() => { + if (tikTokId) { + setExternalVideoState(prev => ({ ...prev, [mediaItem.id]: true })); + } else { + window.open(url, '_blank') + } + }}> + <ResponsiveImage + src={`${mediaItem.image_url}${cacheBustKeys[mediaItem.id] ? `?v=${cacheBustKeys[mediaItem.id]}` : ''}`} + alt={mediaItem.title} + imgClassName="w-full h-full object-contain cursor-pointer select-none opacity-80 group-hover:opacity-60 transition-opacity" + sizes="(max-width: 1024px) 100vw, 1200px" + /> + <div className="absolute inset-0 flex items-center justify-center pointer-events-none"> + <div className="bg-black/50 rounded-full p-4 group-hover:bg-black/70 transition-colors"> + <Play className="w-12 h-12 text-white fill-white" /> + </div> + </div> + </div> + ); + } + } + + return ( + <ResponsiveImage + src={`${mediaItem.image_url}${cacheBustKeys[mediaItem.id] ? `?v=${cacheBustKeys[mediaItem.id]}` : ''}`} + alt={mediaItem.title} + imgClassName="w-full h-full object-contain cursor-pointer select-none" + onClick={() => onExpand(mediaItem)} + title="Double-tap to view fullscreen" + sizes="(max-width: 1024px) 100vw, 1200px" + /> + ); + })() + ) + ) : null} + + + + {/* Navigation arrows */} + {(currentImageIndex > 0 || (navigationData && navigationData.currentIndex > 0)) && ( + <button + onClick={(e) => { + e.stopPropagation(); + if (currentImageIndex > 0) { + onMediaSelect(mediaItems[currentImageIndex - 1]); + } else { + handleNavigate('prev'); + } + }} + className="absolute left-4 top-1/2 -translate-y-1/2 w-10 h-10 bg-background/80 hover:bg-background/90 text-foreground border rounded-full flex items-center justify-center transition-all z-30 backdrop-blur-sm shadow-md" + title={currentImageIndex > 0 ? "Previous image" : "Previous post"} + > + <svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"> + <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15 19l-7-7 7-7" /> + </svg> + </button> + )} + + <button + onClick={(e) => { + e.stopPropagation(); + if (currentImageIndex < mediaItems.length - 1) { + onMediaSelect(mediaItems[currentImageIndex + 1]); + } else { + handleNavigate('next'); + } + }} + className="absolute right-4 top-1/2 -translate-y-1/2 w-10 h-10 bg-background/80 hover:bg-background/90 text-foreground border rounded-full flex items-center justify-center transition-all z-30 backdrop-blur-sm shadow-md" + title="Next" + > + <svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"> + <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5l7 7-7 7" /> + </svg> + </button> + </div> + ); +}; diff --git a/packages/ui/src/pages/Post/renderers/components/CompactPostHeader.tsx b/packages/ui/src/pages/Post/renderers/components/CompactPostHeader.tsx new file mode 100644 index 00000000..e92756b6 --- /dev/null +++ b/packages/ui/src/pages/Post/renderers/components/CompactPostHeader.tsx @@ -0,0 +1,165 @@ +import React from "react"; +import { Link } from "react-router-dom"; +import { LayoutGrid, StretchHorizontal, Edit3, MoreVertical, Trash2, Save, X, Grid } from 'lucide-react'; +import { Button } from "@/components/ui/button"; +import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; +import { Input } from "@/components/ui/input"; +import { Textarea } from "@/components/ui/textarea"; +import { T } from "@/i18n"; +import MarkdownRenderer from "@/components/MarkdownRenderer"; +import UserAvatarBlock from "@/components/UserAvatarBlock"; +import { ExportDropdown } from "../../components/ExportDropdown"; +import { PostRendererProps } from '../../types'; +import { PostMediaItem, UserProfile } from "../../types"; + +interface CompactPostHeaderProps { + isEditMode: boolean; + post: any; + localPost: any; + setLocalPost: (post: any) => void; + mediaItem: PostMediaItem; + authorProfile: UserProfile; + isOwner: boolean; + onViewModeChange: (mode: 'thumbs' | 'compact' | 'article') => void; + onExportMarkdown: (type: 'hugo' | 'obsidian' | 'raw') => void; + onSaveChanges: () => void; + onEditModeToggle: () => void; + onEditPost: () => void; + onDeletePicture: () => void; + onDeletePost: () => void; + mediaItems: PostMediaItem[]; + localMediaItems?: PostMediaItem[]; +} + +export const CompactPostHeader: React.FC<CompactPostHeaderProps> = ({ + isEditMode, + post, + localPost, + setLocalPost, + mediaItem, + authorProfile, + isOwner, + onViewModeChange, + onExportMarkdown, + onSaveChanges, + onEditModeToggle, + onEditPost, + onDeletePicture, + onDeletePost, + mediaItems, + localMediaItems +}) => { + return ( + <> + {/* Post Title & Description */} + {isEditMode && !post?.isPseudo ? ( + <div className="p-3 border-b space-y-2"> + <Input + value={localPost?.title || ''} + onChange={(e) => setLocalPost && setLocalPost({ ...localPost!, title: e.target.value })} + className="font-bold text-lg" + placeholder="Post Title" + /> + <Textarea + value={localPost?.description || ''} + onChange={(e) => setLocalPost && setLocalPost({ ...localPost!, description: e.target.value })} + className="text-sm" + placeholder="Post Description" + /> + </div> + ) : ( + post && (post.description || (post.title && post.title !== mediaItem?.title)) && ( + <div className="p-3 border-b"> + {post.title && post.title !== mediaItem?.title && (<h1 className="text-lg font-bold mb-1">{post.title}</h1>)} + {post.description && <MarkdownRenderer content={post.description} className="prose-sm text-sm text-foreground/90 mb-2" />} + </div> + ) + )} + + <div className="p-3 border-b"> + <div className="flex items-center justify-between"> + <div className="flex items-center space-x-3"> + <UserAvatarBlock + userId={mediaItem.user_id} + avatarUrl={authorProfile?.avatar_url} + displayName={authorProfile?.display_name} + createdAt={mediaItem.created_at} + className="w-8 h-8" + /> + </div> + + <div className="flex items-center gap-1"> + <div className="flex items-center bg-muted/50 rounded-lg p-1 mr-2 border"> + <Button + variant="ghost" + size="sm" + className="h-8 w-8 p-0 text-muted-foreground" + onClick={() => onViewModeChange('thumbs')} + title="Thumbs View" + > + <Grid className="h-4 w-4" /> + </Button> + <Button + variant="ghost" + size="sm" + className="h-8 w-8 p-0" + onClick={() => onViewModeChange('compact')} + title="Compact View" + > + <LayoutGrid className="h-4 w-4" /> + </Button> + <Button + variant="secondary" + size="sm" + className="h-8 w-8 p-0 text-muted-foreground" + onClick={() => onViewModeChange('article')} + title="Article View" + > + <StretchHorizontal className="h-4 w-4" /> + </Button> + </div> + + <ExportDropdown + post={isEditMode ? localPost || null : post || null} + mediaItems={isEditMode ? (localMediaItems as any) || [] : mediaItems} + authorProfile={authorProfile} + onExportMarkdown={() => onExportMarkdown('raw')} + className="mr-1" + /> + + {isOwner && ( + <> + {isEditMode ? ( + <> + <Button variant="ghost" size="sm" onClick={onSaveChanges} className="h-8 w-8 p-0 text-green-600 hover:text-green-700" title="Save changes"> + <Save className="h-4 w-4" /> + </Button> + <Button variant="ghost" size="sm" onClick={onEditModeToggle} className="h-8 w-8 p-0 text-muted-foreground hover:text-destructive" title="Cancel edit"> + <X className="h-4 w-4" /> + </Button> + </> + ) : ( + <Button variant="ghost" size="sm" onClick={onEditModeToggle} className="h-8 w-8 p-0 text-muted-foreground hover:text-primary" title="Inline Edit"> + <Edit3 className="h-4 w-4" /> + </Button> + )} + <DropdownMenu> + <DropdownMenuTrigger asChild> + <Button variant="ghost" size="sm" className="h-8 w-8 p-0 text-muted-foreground hover:text-destructive"> + <MoreVertical className="h-4 w-4" /> + </Button> + </DropdownMenuTrigger> + <DropdownMenuContent align="end"> + <DropdownMenuItem onClick={onEditPost}><Edit3 className="mr-2 h-4 w-4" /><span>Edit Post Wizard</span></DropdownMenuItem> + <DropdownMenuItem onClick={onDeletePicture} className="text-destructive"><Trash2 className="mr-2 h-4 w-4" /><span>Delete this picture</span></DropdownMenuItem> + <DropdownMenuItem onClick={onDeletePost} className="text-destructive"><Trash2 className="mr-2 h-4 w-4" /><span>Delete whole post</span></DropdownMenuItem> + </DropdownMenuContent> + </DropdownMenu> + </> + )} + </div> + </div> + </div > + </> + ); +}; diff --git a/packages/ui/src/pages/Post/renderers/components/MobileGroupItem.tsx b/packages/ui/src/pages/Post/renderers/components/MobileGroupItem.tsx new file mode 100644 index 00000000..f9acf2fe --- /dev/null +++ b/packages/ui/src/pages/Post/renderers/components/MobileGroupItem.tsx @@ -0,0 +1,288 @@ +import React, { useState } from "react"; +import { PostMediaItem } from "../../types"; +import { FeedCarousel } from '@/components/feed/FeedCarousel'; +import { CompactActionToolbar } from "./CompactActionToolbar"; +import Comments from "@/components/Comments"; +import MarkdownRenderer from "@/components/MarkdownRenderer"; +import { formatDate, isLikelyFilename } from "@/utils/textUtils"; +import { isVideoType, detectMediaType, normalizeMediaType } from "@/lib/mediaRegistry"; +import { getVideoUrlWithResolution } from "../../utils"; +import { getTikTokVideoId, getYouTubeVideoId, isTikTokUrl } from "@/utils/mediaUtils"; +import { MediaPlayer, MediaProvider } from '@vidstack/react'; +import { defaultLayoutIcons, DefaultVideoLayout } from '@vidstack/react/player/layouts/default'; +import '@vidstack/react/player/styles/default/theme.css'; +import ResponsiveImage from "@/components/ResponsiveImage"; +import { Button } from "@/components/ui/button"; +import { Maximize, ExternalLink, Play } from 'lucide-react'; + +interface MobileGroupItemProps { + group: PostMediaItem[]; + mediaItems: PostMediaItem[]; // Full list for global index calc + isOwner: boolean; + isLiked: boolean; // Post level or check individual item? Usually item.is_liked + onMediaSelect: (item: PostMediaItem) => void; + onLike: () => void; + onDeletePicture: () => void; + onGalleryPickerOpen: (index: number) => void; + onExpand: (item: PostMediaItem) => void; + onEditPicture: () => void; + onDownload: () => void; + setShowImageEditor: (show: boolean) => void; + post?: any; + orgSlug?: string; + expandedComments: Record<string, boolean>; + setExpandedComments: React.Dispatch<React.SetStateAction<Record<string, boolean>>>; + expandedDescriptions: Record<string, boolean>; + setExpandedDescriptions: React.Dispatch<React.SetStateAction<Record<string, boolean>>>; + cacheBustKeys: Record<string, number>; +} + +export const MobileGroupItem: React.FC<MobileGroupItemProps> = ({ + group, + mediaItems, + isOwner, + isLiked, // Note: We should probably rely on item.is_liked + onMediaSelect, + onLike, + onDeletePicture, + onGalleryPickerOpen, + onExpand, + onEditPicture, + onDownload, + setShowImageEditor, + post, + orgSlug, + expandedComments, + setExpandedComments, + expandedDescriptions, + setExpandedDescriptions, + cacheBustKeys +}) => { + const [currentIndex, setCurrentIndex] = useState(0); + const [externalVideoState, setExternalVideoState] = useState<Record<string, boolean>>({}); + const item = group[currentIndex] || group[0]; + + if (!item) return null; + + const hasVersions = group.length > 1; + const itemEffectiveType = item.type || detectMediaType(item.image_url); + const itemIsVideo = isVideoType(normalizeMediaType(itemEffectiveType)); + const itemVideoUrl = (itemIsVideo && item.image_url) ? getVideoUrlWithResolution(item.image_url) : undefined; + + // Calculate aspect ratio for FeedCarousel overlay + let aspectRatio = 1; + if (item.type === 'tiktok') { + aspectRatio = 9 / 16; + } else if (itemIsVideo) { + aspectRatio = 16 / 9; + } + + const isCommentsOpen = expandedComments[item.id]; + + // Global index for "Add After" + const globalIndex = mediaItems.findIndex(i => i.id === item.id); + + return ( + <div className="flex flex-col border-b last:border-0 pb-4 last:pb-0"> + {/* Media Display */} + <div className={`relative w-full bg-black mb-2 ${item.type === 'tiktok' + ? 'aspect-[9/16]' + : (itemIsVideo ? 'aspect-video' : 'aspect-square') + }`}> + + {hasVersions ? ( + <FeedCarousel + items={group} + onIndexChanged={setCurrentIndex} + className="w-full h-full" + showContent={false} + onItemClick={(id) => { + const clicked = group.find(i => i.id === id); + if (clicked) { + onMediaSelect(clicked); + if (!isVideoType(normalizeMediaType(clicked.type || detectMediaType(clicked.image_url)))) { + onExpand(clicked); + } + } + }} + /> + ) : ( + // Single Item Render + <> + {itemIsVideo ? ( + item.type === 'tiktok' ? ( + <div className="w-full h-full flex justify-center bg-black"> + <iframe src={item.image_url} className="h-full aspect-[9/16] border-0" allow="encrypted-media;"></iframe> + </div> + ) : ( + <MediaPlayer + title={item.title} + src={itemVideoUrl} + poster={item.thumbnail_url} + className="w-full h-full" + > + <MediaProvider /> + <DefaultVideoLayout icons={defaultLayoutIcons} /> + </MediaPlayer> + ) + ) : ( + <ResponsiveImage + src={`${item.image_url}${cacheBustKeys[item.id] ? `?v=${cacheBustKeys[item.id]}` : ''}`} + alt={item.title} + imgClassName="w-full h-full object-contain" + sizes="(max-width: 768px) 100vw, 600px" + loading="lazy" + onClick={() => { + onMediaSelect(item); + onExpand(item); + }} + /> + )} + + {(item.type === 'page-external' && ( + (getYouTubeVideoId((item.meta as any)?.url || item.image_url)) ? ( + <div className="w-full h-full bg-black flex justify-center absolute inset-0 z-20"> + <iframe + src={`https://www.youtube.com/embed/${getYouTubeVideoId((item.meta as any)?.url || item.image_url)}`} + className="w-full h-full border-0" + allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" + allowFullScreen + title={item.title} + ></iframe> + </div> + ) : (isTikTokUrl((item.meta as any)?.url || item.image_url) ? ( + (() => { + const url = (item.meta as any)?.url || item.image_url; + const tikTokId = getTikTokVideoId(url); + const isPlaying = externalVideoState[item.id]; + + if (isPlaying && tikTokId) { + return ( + <div className="absolute inset-0 z-20 w-full h-full bg-black flex justify-center"> + <iframe + src={`https://www.tiktok.com/embed/v2/${tikTokId}`} + className="h-full aspect-[9/16] border-0" + allow="encrypted-media;" + title={item.title} + ></iframe> + </div> + ); + } + + return ( + <div className="absolute inset-0 z-20 flex items-center justify-center cursor-pointer group" onClick={() => { + if (tikTokId) { + setExternalVideoState(prev => ({ ...prev, [item.id]: true })); + } else { + window.open(url, '_blank') + } + }}> + <div className="bg-black/50 rounded-full p-3 group-hover:bg-black/70 transition-colors backdrop-blur-sm"> + <Play className="w-8 h-8 text-white fill-white" /> + </div> + </div> + ); + })() + ) : null) + ))} + + {!itemIsVideo && ( + <div className="absolute bottom-4 right-4 z-10"> + <Button + onClick={() => { + onMediaSelect(item); + onExpand(item); + }} + size="default" + variant="ghost" + className="bg-background/80 hover:bg-background/90 border backdrop-blur-sm" + > + <Maximize className="h-5 w-5" /> + </Button> + </div> + )} + </> + )} + + {/* Index Indicator if Version Group */} + {hasVersions && ( + <div className="absolute top-4 right-4 z-10 bg-black/50 text-white px-2 py-1 rounded text-xs backdrop-blur-sm"> + v{currentIndex + 1} / {group.length} + </div> + )} + {/* Global Index Indicator? Maybe irrelevant for grouped feed, or show group index? */} + </div> + + {/* Actions Toolbar */} + <div className="px-3 flex flex-col gap-2"> + <CompactActionToolbar + item={item} + isLiked={item.is_liked || false} + onLike={onLike} + isCommentsOpen={!!isCommentsOpen} + onToggleComments={() => setExpandedComments(prev => ({ ...prev, [item.id]: !prev[item.id] }))} + isVideo={itemIsVideo} + onExpand={onExpand} + isOwner={isOwner} + setShowImageEditor={setShowImageEditor} + onDeletePicture={onDeletePicture} + onAddAfter={() => onGalleryPickerOpen(globalIndex + 1)} + onEditPicture={onEditPicture} + onDownload={onDownload} + post={post} + orgSlug={orgSlug} + buttonSize="icon" + /> + + {(item.likes_count || 0) > 0 && <div className="font-semibold text-sm px-2 mb-2">{item.likes_count} likes</div>} + + {(item.title || item.description) && ( + <div className="px-2 pb-2 space-y-1"> + {item.title && !isLikelyFilename(item.title) && <div className="font-semibold text-sm">{item.title}</div>} + {item.description && ( + <div className="text-sm text-foreground/90"> + <div className={expandedDescriptions[item.id] ? "" : "line-clamp-2"}> + <MarkdownRenderer content={item.description} className="prose-sm dark:prose-invert" /> + </div> + {item.description.length > 100 && !expandedDescriptions[item.id] && ( + <button + onClick={() => setExpandedDescriptions(prev => ({ ...prev, [item.id]: true }))} + className="text-muted-foreground text-xs mt-1 font-medium hover:text-foreground" + > + more + </button> + )} + </div> + )} + <div className="text-xs text-muted-foreground pt-1"> + {formatDate(item.created_at)} + </div> + </div> + )} + + {/* External Link */} + {(item.type === 'page-external' || (item.meta as any)?.url) && ( + <div className="px-3 pb-2"> + <a + href={(item.meta as any)?.url || '#'} + target="_blank" + rel="noopener noreferrer" + className="flex items-center gap-2 text-sm text-blue-500 hover:scale-[1.01] active:scale-[0.99] transition-transform bg-blue-50/50 p-2 rounded-md border border-blue-100 max-w-full" + onClick={(e) => e.stopPropagation()} + title={(item.meta as any)?.url} + > + <ExternalLink className="h-4 w-4 flex-shrink-0" /> + <span className="truncate hover:underline">{(item.meta as any)?.url}</span> + </a> + </div> + )} + + {isCommentsOpen && ( + <div className="mt-2 pl-2 border-l-2"> + <Comments pictureId={item.id} /> + </div> + )} + </div> + </div> + ); +}; diff --git a/packages/ui/src/pages/Post/renderers/components/MobileGroupedFeed.tsx b/packages/ui/src/pages/Post/renderers/components/MobileGroupedFeed.tsx new file mode 100644 index 00000000..d15ffcdc --- /dev/null +++ b/packages/ui/src/pages/Post/renderers/components/MobileGroupedFeed.tsx @@ -0,0 +1,66 @@ +import React from "react"; +import { PostMediaItem } from "../../types"; +import { MobileGroupItem } from "./MobileGroupItem"; + +interface MobileGroupedFeedProps { + mediaItems: PostMediaItem[]; + isOwner: boolean; + isLiked: boolean; // Or accessible fn + onMediaSelect: (item: PostMediaItem) => void; + onLike: () => void; + onDeletePicture: () => void; + onGalleryPickerOpen: (index: number) => void; + onExpand: (item: PostMediaItem) => void; + onEditPicture: () => void; + onDownload: () => void; + setShowImageEditor: (show: boolean) => void; + post?: any; + orgSlug?: string; + expandedComments: Record<string, boolean>; + setExpandedComments: React.Dispatch<React.SetStateAction<Record<string, boolean>>>; + expandedDescriptions: Record<string, boolean>; + setExpandedDescriptions: React.Dispatch<React.SetStateAction<Record<string, boolean>>>; + cacheBustKeys: Record<string, number>; +} + +export const MobileGroupedFeed: React.FC<MobileGroupedFeedProps> = ({ + mediaItems, + ...props +}) => { + // Grouping Logic + const groups: PostMediaItem[][] = []; + const processedIds = new Set<string>(); + + mediaItems.forEach(item => { + if (processedIds.has(item.id)) return; + + const rootId = item.parent_id || item.id; + + // Find all items in the list that belong to this group + // Note: This relies on mediaItems containing all versions. + const group = mediaItems.filter(i => (i.id === rootId || i.parent_id === rootId)); + + // Sort by created_at to ensure consistent version ordering mechanism + // Or respect input order if they are adjacent? + // Let's sort by created_at for versions logic consistency. + group.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime()); + + if (group.length > 0) { + groups.push(group); + group.forEach(i => processedIds.add(i.id)); + } + }); + + return ( + <div className="lg:hidden flex flex-col gap-6 bg-background pb-4"> + {groups.map((group, index) => ( + <MobileGroupItem + key={group[0]?.id || index} + group={group} + mediaItems={mediaItems} + {...props} + /> + ))} + </div> + ); +}; diff --git a/packages/ui/src/pages/Post/types.ts b/packages/ui/src/pages/Post/types.ts new file mode 100644 index 00000000..72a407b1 --- /dev/null +++ b/packages/ui/src/pages/Post/types.ts @@ -0,0 +1,94 @@ +import { User } from '@supabase/supabase-js'; +import { ImageFile, MediaType, MediaItem as GlobalMediaItem } from "@/types"; + +// Local Media Item definition extensions +// We extend GlobalMediaItem to ensure compatibility with shared components/utils +export interface PostMediaItem extends GlobalMediaItem { + post_id: string | null; + position: number; + renderKey?: string; + // likes_count in Global is number | null. Locally we prefer number (default 0). + // We can keep it compliant or override if we are careful. + // Let's keep it compatible by not overriding unless necessary. + is_liked?: boolean; +} + +export interface PostItem { + id: string; + title: string; + description: string | null; + user_id: string; + created_at: string; + updated_at: string; + pictures?: PostMediaItem[]; + settings?: any; + isPseudo?: boolean; + type?: string; + meta?: any; +} + +export interface UserProfile { + user_id: string; + avatar_url: string | null; + display_name: string | null; + username: string | null; +} + +export interface PostRendererProps { + post: PostItem | null; + authorProfile: any; + mediaItems: PostMediaItem[]; + localMediaItems: PostMediaItem[]; // For edit mode + mediaItem: PostMediaItem; // Current selected item + + // User Context + user: User | null; + isOwner: boolean; + isEditMode: boolean; + isLiked: boolean; + likesCount: number; + + // State + localPost: any; + setLocalPost: React.Dispatch<React.SetStateAction<any>>; + setLocalMediaItems: React.Dispatch<React.SetStateAction<PostMediaItem[]>>; + + // Handlers + onEditModeToggle: () => void; + onEditPost: () => void; + onViewModeChange: (mode: 'compact' | 'article' | 'thumbs') => void; + onExportMarkdown: () => void; + onSaveChanges: () => void; + onDeletePost: () => void; // Opens dialog + onDeletePicture: () => void; // Opens dialog + + // Media Actions + onLike: () => void; + onUnlinkImage: (item: PostMediaItem) => void; + onRemoveFromPost: (index: number) => void; + onEditPicture: () => void; + onGalleryPickerOpen: (index: number) => void; + onYouTubeAdd: () => void; + onTikTokAdd: () => void; + onAIWizardOpen: (index: number) => void; + onInlineUpload: (files: File[], index: number) => Promise<void>; + onMoveItem: (index: number, direction: 'up' | 'down') => void; + onMediaSelect: (item: PostMediaItem) => void; + onExpand: (item: PostMediaItem) => void; + onDownload: () => void; + + // Comparison helpers + currentImageIndex: number; + + // Mux/Video helpers + videoPlaybackUrl?: string; // Optional, computed in parent + videoPosterUrl?: string; // Optional, computed in parent + + // For compact view + versionImages: ImageFile[]; + handlePrevImage: () => void; + handleNavigate: (direction: 'prev' | 'next') => void; + navigationData?: any; + embedded?: boolean; + className?: string; +} diff --git a/packages/ui/src/pages/Post/usePostActions.ts b/packages/ui/src/pages/Post/usePostActions.ts new file mode 100644 index 00000000..ea764766 --- /dev/null +++ b/packages/ui/src/pages/Post/usePostActions.ts @@ -0,0 +1,171 @@ +import { useState } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { toast } from "sonner"; +import { supabase } from "@/integrations/supabase/client"; +import { MediaItem, PostItem, User } from "@/types"; +import { translate } from "@/i18n"; +import { updateMediaPositions } from "./utils"; + +interface UsePostActionsProps { + post: PostItem | null; + mediaItems: MediaItem[]; + setMediaItems: React.Dispatch<React.SetStateAction<MediaItem[]>>; + mediaItem: MediaItem | null; // Current item + user: User | null; + fetchMedia: () => void; +} + +export const usePostActions = ({ + post, + mediaItems, + setMediaItems, + mediaItem, + user, + fetchMedia +}: UsePostActionsProps) => { + const navigate = useNavigate(); + + // Dialog States + const [showDeletePostDialog, setShowDeletePostDialog] = useState(false); + const [showDeletePictureDialog, setShowDeletePictureDialog] = useState(false); + const [showYouTubeDialog, setShowYouTubeDialog] = useState(false); + const [showTikTokDialog, setShowTikTokDialog] = useState(false); + const [showGalleryPicker, setShowGalleryPicker] = useState(false); + const [showAIWizard, setShowAIWizard] = useState(false); + + // --- Actions --- + + const handleDeletePost = async () => { + if (!post) return; + try { + const { error } = await supabase + .from('posts') + .delete() + .eq('id', post.id); + + if (error) throw error; + + toast.success(translate('Post deleted')); + navigate('/'); + } catch (error) { + console.error('Error deleting post:', error); + toast.error(translate('Failed to delete post')); + } finally { + setShowDeletePostDialog(false); + } + }; + + const handleDeletePicture = async () => { + if (!mediaItem) return; + try { + const mediaUrl = mediaItem.image_url; + const { error } = await supabase + .from('pictures') + .delete() + .eq('id', mediaItem.id); + + if (error) throw error; + + // Delete from storage if hosted on Supabase + if (mediaUrl.includes('supabase.co/storage/')) { + const urlParts = mediaUrl.split('/'); + const fileName = urlParts[urlParts.length - 1]; + const bucketPath = `${mediaItem.user_id}/${fileName}`; + const { error: storageError } = await supabase.storage + .from('pictures') + .remove([bucketPath]); + + if (storageError) { + console.error("Error deleting file from storage:", storageError); + } + } + + toast.success(translate('Picture deleted')); + + // Navigate or refresh + // If it was the only item, maybe delete post? Or just refresh + // If it's part of a post, fetchMedia will handle updating list + if (mediaItems.length <= 1 && post) { + // If it was the last picture of a post, maybe redirect to home or refresh? + // Existing logic just refreshed or navigated. + // We'll mimic fetching. + navigate(`/`); // Fallback if post is empty? check existing logic + } else { + // Navigate to another item? + // Post.tsx handled this by fetchMedia and effect probably. + fetchMedia(); + } + + } catch (error) { + console.error('Error deleting picture:', error); + toast.error(translate('Failed to delete picture')); + } finally { + setShowDeletePictureDialog(false); + } + }; + + const handleUnlinkImage = async (item: MediaItem) => { + try { + // Optimistic update + const newItems = mediaItems.filter(i => i.id !== item.id); + setMediaItems(newItems); + + const { error } = await supabase + .from('pictures') + .update({ + post_id: null, + position: -1 // Reset position + }) + .eq('id', item.id); + + if (error) throw error; + + toast.success(translate('Image removed from post')); + + // Re-index remaining items + await updateMediaPositions(newItems, setMediaItems, setMediaItems); // Using same setter for both generic/local here if not editing + } catch (error) { + console.error('Error unlinking image:', error); + toast.error(translate('Failed to remove image')); + fetchMedia(); // Revert on error + } + }; + + const handleLike = async (itemToLike: MediaItem = mediaItem!) => { + if (!user || !itemToLike) return; + + // Check if already liked check needs to be done in UI or here? + // Post.tsx used `isLiked` state. + // Refactoring `isLiked` inside hook is hard because it depends on `mediaItem` changing. + // So we'll just expose the toggle function and let Post.tsx manage `isLiked` state? + // Or move `isLiked` state here? `isLiked` depends on `userLikes` (list). + // Let's keep `handleLike` simple: toggle the like in DB. + // BUT Post.tsx logic for `handleLike` has optimistic updates on `mediaItems`. + + // SIMPLIFIED: Just call the Supabase toggle RPC or insert/delete. + // Current implementation in Post.tsx uses simple insert/delete and updates local state. + + // I'll leave `handleLike` in Post.tsx for now because it's tightly coupled with `userLikes` state array. + // Moving it requires moving `userLikes` state too. + // I will skip moving `handleLike` for now to reduce risk, as per "reduce complexity" - moving coupled state might increase it or require a larger refactor (context). + // The user asked to move "delete actions, etc". I moved deletes. + return; + }; + + + return { + // States + showDeletePostDialog, setShowDeletePostDialog, + showDeletePictureDialog, setShowDeletePictureDialog, + showYouTubeDialog, setShowYouTubeDialog, + showTikTokDialog, setShowTikTokDialog, + showGalleryPicker, setShowGalleryPicker, + showAIWizard, setShowAIWizard, + + // Actions + handleDeletePost, + handleDeletePicture, + handleUnlinkImage, + // handleLike // Kept in Post.tsx for now due to state coupling + }; +}; diff --git a/packages/ui/src/pages/Post/utils.ts b/packages/ui/src/pages/Post/utils.ts new file mode 100644 index 00000000..0fbb02f3 --- /dev/null +++ b/packages/ui/src/pages/Post/utils.ts @@ -0,0 +1,47 @@ +import { MediaItem, MuxResolution } from "@/types"; + +export const getYouTubeId = (url: string) => { + const regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/; + const match = url.match(regExp); + return (match && match[2].length === 11) ? match[2] : null; +}; + +export const getTikTokId = (url: string) => { + try { + const urlObj = new URL(url); + // Standard https://www.tiktok.com/@user/video/VIDEO_ID + if (urlObj.hostname.includes('tiktok.com') && urlObj.pathname.includes('/video/')) { + const parts = urlObj.pathname.split('/video/'); + if (parts.length > 1) { + return parts[1].split(/[?#]/)[0]; // Remove query params or hash + } + } + } catch { + return null; + } + return null; +}; + +export const updateMediaPositions = <T extends { position?: number }>(items: T[], setLocalMediaItems: (items: any[]) => void, setMediaItems: (items: any[]) => void) => { + const reordered = items.map((item, idx) => ({ ...item, position: idx })); + setLocalMediaItems(reordered); + setMediaItems(reordered); +}; + +// Add max_resolution query parameter to video URL for bandwidth optimization +// Use 720p for detail page (higher quality than grid view) +// See: https://www.mux.com/docs/guides/control-playback-resolution +export const getVideoUrlWithResolution = (url: string, maxResolution: MuxResolution = '720p') => { + // Skip for internal videos + if (url.includes('/api/videos/')) return url; + + try { + const urlObj = new URL(url); + urlObj.searchParams.set('max_resolution', maxResolution); + return urlObj.toString(); + } catch { + // If URL parsing fails, append as query string + const separator = url.includes('?') ? '&' : '?'; + return `${url}${separator}max_resolution=${maxResolution}`; + } +}; diff --git a/packages/ui/src/pages/Profile.tsx b/packages/ui/src/pages/Profile.tsx new file mode 100644 index 00000000..63d5ba66 --- /dev/null +++ b/packages/ui/src/pages/Profile.tsx @@ -0,0 +1,761 @@ +import { useState, useEffect } from "react"; +import { supabase } from "@/integrations/supabase/client"; +import { useAuth } from "@/hooks/useAuth"; +import ImageGallery from "@/components/ImageGallery"; +import { ImageFile } from "@/types"; +import { toast } from "sonner"; +import { Navigate, Link, useNavigate } from "react-router-dom"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Textarea } from "@/components/ui/textarea"; +import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"; +import { User, Images, Save, Camera, Upload, Check, Building2, Key, Globe } from "lucide-react"; +import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; +import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; +import { T, translate, getCurrentLang, supportedLanguages, setLanguage } from "@/i18n"; +import { uploadImage } from '@/lib/uploadUtils'; +import { getUserSecrets, updateUserSecrets } from '@/components/ImageWizard/db'; +import { + Sidebar, + SidebarContent, + SidebarGroup, + SidebarGroupContent, + SidebarGroupLabel, + SidebarMenu, + SidebarMenuButton, + SidebarMenuItem, + SidebarProvider, + useSidebar +} from "@/components/ui/sidebar"; + +type ActiveSection = 'general' | 'organizations' | 'api-keys' | 'gallery'; + +const Profile = () => { + const { user, loading } = useAuth(); + const navigate = useNavigate(); + const [images, setImages] = useState<ImageFile[]>([]); + const [currentIndex, setCurrentIndex] = useState(0); + const [fetchingImages, setFetchingImages] = useState(true); + const [activeSection, setActiveSection] = useState<ActiveSection>('general'); + + // Profile data state + const [profile, setProfile] = useState({ + username: '', + display_name: '', + bio: '', + avatar_url: '', + settings: {} + }); + const [secrets, setSecrets] = useState<Record<string, string>>({}); + const [email, setEmail] = useState(''); + const [updatingProfile, setUpdatingProfile] = useState(false); + const [avatarDialogOpen, setAvatarDialogOpen] = useState(false); + const [uploadingAvatar, setUploadingAvatar] = useState(false); + const [selectedLanguage, setSelectedLanguage] = useState(getCurrentLang()); + const [userOrganizations, setUserOrganizations] = useState<Array<{ + id: string; + role: string; + organization: { + id: string; + name: string; + slug: string; + }; + }>>([]); + const [loadingOrgs, setLoadingOrgs] = useState(false); + + useEffect(() => { + if (user) { + fetchUserImages(); + fetchProfile(); + fetchUserOrganizations(); + setEmail(user.email || ''); + } + }, [user]); + + const fetchUserOrganizations = async () => { + if (!user) return; + + setLoadingOrgs(true); + try { + const { data, error } = await supabase + .from('user_organizations') + .select(` + id, + role, + organization:organizations ( + id, + name, + slug + ) + `) + .eq('user_id', user.id) + .order('created_at', { ascending: false }); + + if (error) throw error; + setUserOrganizations(data || []); + } catch (error) { + console.error('Error fetching user organizations:', error); + toast.error(translate('Failed to load organizations')); + } finally { + setLoadingOrgs(false); + } + }; + + const fetchProfile = async () => { + try { + const { data, error } = await supabase + .from('profiles') + .select('username, display_name, bio, avatar_url, settings') + .eq('user_id', user?.id) + .single(); + + if (error && error.code !== 'PGRST116') { + throw error; + } + + if (data) { + setProfile({ + username: data.username || '', + display_name: data.display_name || '', + bio: data.bio || '', + avatar_url: data.avatar_url || '', + settings: data.settings || {} + }); + + // Fetch secrets + const fetchedSecrets = await getUserSecrets(user.id); + if (fetchedSecrets) { + setSecrets(fetchedSecrets); + } + } + } catch (error) { + console.error('Error fetching profile:', error); + toast.error(translate('Failed to load profile data')); + } + }; + + const handleProfileUpdate = async () => { + if (!user) return; + + setUpdatingProfile(true); + try { + // Update profile in database + const { error: profileError } = await supabase + .from('profiles') + .upsert({ + user_id: user.id, + username: profile.username || null, + display_name: profile.display_name || null, + bio: profile.bio || null, + avatar_url: profile.avatar_url || null, + settings: profile.settings || {} + }, { + onConflict: 'user_id' + }); + + if (profileError) throw profileError; + + // Update secrets + await updateUserSecrets(user.id, secrets); + + // Update email if changed + if (email !== user.email && email.trim()) { + const { error: emailError } = await supabase.auth.updateUser({ + email: email + }); + + if (emailError) throw emailError; + } + + toast.success(translate('Profile updated successfully')); + } catch (error) { + console.error('Error updating profile:', error); + toast.error(translate('Failed to update profile')); + } finally { + setUpdatingProfile(false); + } + }; + + const handleAvatarUpload = async (event: React.ChangeEvent<HTMLInputElement>) => { + const file = event.target.files?.[0]; + if (!file || !user) return; + + // Validate file type + if (!file.type.startsWith('image/')) { + toast.error(translate('Please select an image file')); + return; + } + + // Validate file size (max 5MB) + if (file.size > 5 * 1024 * 1024) { + toast.error(translate('Image must be less than 5MB')); + return; + } + + setUploadingAvatar(true); + try { + // Upload to storage (direct or via proxy) + const { publicUrl } = await uploadImage(file, user.id); + + // Update profile with new avatar URL + setProfile(prev => ({ ...prev, avatar_url: publicUrl })); + setAvatarDialogOpen(false); + toast.success(translate('Avatar updated successfully')); + } catch (error) { + console.error('Error uploading avatar:', error); + toast.error(translate('Failed to upload avatar')); + } finally { + setUploadingAvatar(false); + } + }; + + const handleSelectFromGallery = (imageUrl: string) => { + setProfile(prev => ({ ...prev, avatar_url: imageUrl })); + setAvatarDialogOpen(false); + toast.success(translate('Avatar updated successfully')); + }; + + const fetchUserImages = async () => { + try { + const { data: pictures, error } = await supabase + .from('pictures') + .select('*') + .eq('user_id', user?.id) + .eq('is_selected', true) + .order('created_at', { ascending: false }); + + if (error) throw error; + + const imageFiles: ImageFile[] = pictures?.map(picture => ({ + path: picture.title, + src: picture.image_url, + isGenerated: false, + selected: false + })) || []; + + setImages(imageFiles); + } catch (error) { + console.error('Error fetching user images:', error); + toast.error(translate('Failed to load your images')); + } finally { + setFetchingImages(false); + } + }; + + const handleImageDelete = async (imagePath: string) => { + try { + // Find the image to delete + const imageToDelete = images.find(img => img.path === imagePath); + if (!imageToDelete) return; + + // Get the picture from the database using the title and user_id + const { data: picture, error: fetchError } = await supabase + .from('pictures') + .select('*') + .eq('title', imagePath) + .eq('user_id', user?.id) + .single(); + + if (fetchError) { + console.error('Error finding picture:', fetchError); + toast.error(translate('Failed to find image to delete')); + return; + } + + // Delete from storage first + const fileName = picture.image_url.split('/').pop(); + if (fileName) { + const { error: storageError } = await supabase.storage + .from('pictures') + .remove([`${user?.id}/${fileName}`]); + + if (storageError) { + console.error('Error deleting from storage:', storageError); + } + } + + // Delete from database + const { error: dbError } = await supabase + .from('pictures') + .delete() + .eq('id', picture.id); + + if (dbError) { + console.error('Error deleting from database:', dbError); + toast.error(translate('Failed to delete image')); + return; + } + + // Update local state + setImages(prevImages => prevImages.filter(img => img.path !== imagePath)); + toast.success(translate('Image deleted successfully')); + } catch (error) { + console.error('Error deleting image:', error); + toast.error(translate('Failed to delete image')); + } + }; + + if (loading) { + return ( + <div className="min-h-screen bg-background flex items-center justify-center"> + <div className="text-muted-foreground">Loading...</div> + </div> + ); + } + + if (!user) { + return <Navigate to="/auth" replace />; + } + + return ( + <SidebarProvider> + <div className="min-h-screen flex w-full bg-background pt-14"> + <ProfileSidebar activeSection={activeSection} onSectionChange={setActiveSection} /> + + <main className="flex-1 p-8 overflow-auto"> + <div className="max-w-4xl mx-auto"> + <div className="mb-8"> + <h1 className="text-4xl font-bold mb-2"> + <span className="bg-gradient-primary bg-clip-text text-transparent"> + <T>Profile Settings</T> + </span> + </h1> + <p className="text-muted-foreground text-lg"> + <T>Manage your account settings and preferences</T> + </p> + </div> + + {activeSection === 'general' && ( + <Card> + <CardHeader> + <CardTitle><T>General Settings</T></CardTitle> + </CardHeader> + <CardContent className="space-y-4"> + {/* Avatar Section */} + <div className="flex flex-col items-center space-y-4 pb-6 border-b"> + <Avatar className="h-32 w-32"> + <AvatarImage src={profile.avatar_url} alt={translate("Profile picture")} /> + <AvatarFallback className="bg-gradient-primary text-white text-4xl"> + <User className="h-16 w-16" /> + </AvatarFallback> + </Avatar> + + <Dialog open={avatarDialogOpen} onOpenChange={setAvatarDialogOpen}> + <DialogTrigger asChild> + <Button variant="outline" size="sm"> + <Camera className="h-4 w-4 mr-2" /> + <T>Change Avatar</T> + </Button> + </DialogTrigger> + <DialogContent className="max-w-2xl"> + <DialogHeader> + <DialogTitle><T>Choose Avatar</T></DialogTitle> + </DialogHeader> + + <div className="space-y-6"> + {/* Upload New Image */} + <div className="space-y-3"> + <h4 className="font-medium">Upload New Image</h4> + <div className="flex items-center gap-2"> + <Button + variant="outline" + asChild + disabled={uploadingAvatar} + > + <label htmlFor="avatar-upload" className="cursor-pointer"> + <Upload className="h-4 w-4 mr-2" /> + {uploadingAvatar ? 'Uploading...' : 'Choose File'} + <input + id="avatar-upload" + type="file" + accept="image/*" + onChange={handleAvatarUpload} + className="hidden" + /> + </label> + </Button> + <span className="text-sm text-muted-foreground"> + Max 5MB, JPG/PNG/WebP + </span> + </div> + </div> + + {/* Select from Gallery */} + {images.length > 0 && ( + <div className="space-y-3"> + <h4 className="font-medium">Select from Gallery</h4> + <div className="grid grid-cols-4 gap-3 max-h-64 overflow-y-auto"> + {images.map((image) => ( + <button + key={image.path} + onClick={() => handleSelectFromGallery(image.src)} + className="relative aspect-square rounded-lg overflow-hidden bg-muted hover:ring-2 hover:ring-primary transition-all group" + > + <img + src={image.src} + alt={image.path} + className="w-full h-full object-cover" + /> + <div className="absolute inset-0 bg-black/40 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center"> + <Check className="h-6 w-6 text-white" /> + </div> + </button> + ))} + </div> + </div> + )} + </div> + </DialogContent> + </Dialog> + </div> + + {/* Profile Form Fields */} + <div className="grid gap-4 md:grid-cols-2"> + <div className="space-y-2"> + <Label htmlFor="email"><T>Email</T></Label> + <Input + id="email" + type="email" + value={email} + onChange={(e) => setEmail(e.target.value)} + placeholder={translate("your.email@example.com")} + /> + </div> + <div className="space-y-2"> + <Label htmlFor="username"><T>Username</T></Label> + <Input + id="username" + value={profile.username} + onChange={(e) => setProfile(prev => ({ ...prev, username: e.target.value }))} + placeholder={translate("Enter username")} + /> + </div> + </div> + + <div className="space-y-2"> + <Label htmlFor="display_name"><T>Display Name</T></Label> + <Input + id="display_name" + value={profile.display_name} + onChange={(e) => setProfile(prev => ({ ...prev, display_name: e.target.value }))} + placeholder={translate("Enter display name")} + /> + </div> + + <div className="space-y-2"> + <Label htmlFor="bio"><T>Bio</T></Label> + <Textarea + id="bio" + value={profile.bio} + onChange={(e) => setProfile(prev => ({ ...prev, bio: e.target.value }))} + placeholder={translate("Tell us about yourself...")} + rows={3} + /> + </div> + + <div className="space-y-2"> + <Label htmlFor="language" className="flex items-center gap-2"> + <Globe className="h-4 w-4" /> + <T>Language</T> + </Label> + <Select + value={selectedLanguage} + onValueChange={(value) => setSelectedLanguage(value as any)} + > + <SelectTrigger id="language"> + <SelectValue /> + </SelectTrigger> + <SelectContent> + {supportedLanguages.map((lang) => ( + <SelectItem key={lang.code} value={lang.code}> + {lang.name} + </SelectItem> + ))} + </SelectContent> + </Select> + <p className="text-sm text-muted-foreground"> + <T>Your preferred language for the interface</T> + </p> + </div> + + <Button + onClick={() => { + handleProfileUpdate(); + // Apply language change if it changed + if (selectedLanguage !== getCurrentLang()) { + setLanguage(selectedLanguage as any); + } + }} + disabled={updatingProfile} + className="w-full" + > + <Save className="mr-2 h-4 w-4" /> + <T>{updatingProfile ? 'Saving...' : 'Save Changes'}</T> + </Button> + </CardContent> + </Card> + )} + + {activeSection === 'organizations' && ( + <Card> + <CardHeader> + <div className="flex items-center justify-between"> + <CardTitle>My Organizations</CardTitle> + <Button size="sm" onClick={() => navigate('/organizations')}> + <Building2 className="mr-2 h-4 w-4" /> + Manage Organizations + </Button> + </div> + </CardHeader> + <CardContent> + {loadingOrgs ? ( + <div className="flex items-center justify-center py-8"> + <div className="text-muted-foreground">Loading organizations...</div> + </div> + ) : userOrganizations.length === 0 ? ( + <div className="text-center py-8"> + <Building2 className="h-12 w-12 mx-auto text-muted-foreground mb-3" /> + <p className="text-muted-foreground mb-4">You're not part of any organizations yet</p> + <Button onClick={() => navigate('/organizations')}> + Browse Organizations + </Button> + </div> + ) : ( + <div className="space-y-3"> + {userOrganizations.map((userOrg) => ( + <div + key={userOrg.id} + className="flex items-center justify-between p-4 border rounded-lg hover:bg-muted/50 transition-colors" + > + <div className="flex items-center gap-3"> + <div className="w-10 h-10 rounded-full bg-gradient-primary flex items-center justify-center"> + <Building2 className="h-5 w-5 text-white" /> + </div> + <div> + <Link + to={`/org/${userOrg.organization.slug}`} + className="font-medium hover:text-primary transition-colors" + > + {userOrg.organization.name} + </Link> + <p className="text-sm text-muted-foreground"> + /{userOrg.organization.slug} + </p> + </div> + </div> + <div className="flex items-center gap-2"> + <span className="text-sm px-3 py-1 rounded-full bg-primary/10 text-primary font-medium"> + {userOrg.role} + </span> + <Button + variant="outline" + size="sm" + onClick={() => navigate(`/org/${userOrg.organization.slug}`)} + > + View + </Button> + </div> + </div> + ))} + </div> + )} + </CardContent> + </Card> + )} + + {activeSection === 'api-keys' && ( + <Card> + <CardHeader> + <CardTitle><T>API Keys</T></CardTitle> + </CardHeader> + <CardContent className="space-y-4"> + <div className="space-y-2"> + <Label htmlFor="google_api_key"><T>Google API Key</T></Label> + <Input + id="google_api_key" + type="password" + value={secrets.google_api_key || ''} + onChange={(e) => setSecrets(prev => ({ ...prev, google_api_key: e.target.value }))} + placeholder={translate("Enter your Google API key")} + /> + <p className="text-sm text-muted-foreground"> + <T>For Google services (stored securely)</T> + </p> + </div> + + <div className="space-y-2"> + <Label htmlFor="openai_api_key"><T>OpenAI API Key</T></Label> + <Input + id="openai_api_key" + type="password" + value={secrets.openai_api_key || ''} + onChange={(e) => setSecrets(prev => ({ ...prev, openai_api_key: e.target.value }))} + placeholder={translate("Enter your OpenAI API key")} + /> + <p className="text-sm text-muted-foreground"> + <T>For AI image generation (stored securely)</T> + </p> + </div> + + <div className="space-y-2"> + <Label htmlFor="replicate_api_key"><T>Replicate API Key</T></Label> + <Input + id="replicate_api_key" + type="password" + value={secrets.replicate_api_key || ''} + onChange={(e) => setSecrets(prev => ({ ...prev, replicate_api_key: e.target.value }))} + placeholder={translate("Enter your Replicate API key")} + /> + <p className="text-sm text-muted-foreground"> + <T>For Replicate AI models (stored securely)</T> + </p> + </div> + + <div className="space-y-2"> + <Label htmlFor="bria_api_key"><T>Bria API Key</T></Label> + <Input + id="bria_api_key" + type="password" + value={secrets.bria_api_key || ''} + onChange={(e) => setSecrets(prev => ({ ...prev, bria_api_key: e.target.value }))} + placeholder={translate("Enter your Bria API key")} + /> + <p className="text-sm text-muted-foreground"> + <T>For Bria AI services (stored securely)</T> + </p> + </div> + + <div className="space-y-2"> + <Label htmlFor="huggingface_api_key"><T>HuggingFace API Key</T></Label> + <Input + id="huggingface_api_key" + type="password" + value={secrets.huggingface_api_key || ''} + onChange={(e) => setSecrets(prev => ({ ...prev, huggingface_api_key: e.target.value }))} + placeholder={translate("Enter your HuggingFace API key")} + /> + <p className="text-sm text-muted-foreground"> + <T>For HuggingFace models (stored securely)</T> + </p> + </div> + + <div className="space-y-2"> + <Label htmlFor="aimlapi_api_key"><T>AIMLAPI API Key</T></Label> + <Input + id="aimlapi_api_key" + type="password" + value={secrets.aimlapi_api_key || ''} + onChange={(e) => setSecrets(prev => ({ ...prev, aimlapi_api_key: e.target.value }))} + placeholder={translate("Enter your AIMLAPI API key")} + /> + <p className="text-sm text-muted-foreground"> + <T>For AIMLAPI services (stored securely)</T> + </p> + </div> + + <Button + onClick={handleProfileUpdate} + disabled={updatingProfile} + className="w-full" + > + <Save className="mr-2 h-4 w-4" /> + <T>{updatingProfile ? 'Saving...' : 'Save API Keys'}</T> + </Button> + </CardContent> + </Card> + )} + + {activeSection === 'gallery' && ( + <Card> + <CardHeader> + <CardTitle>My Gallery</CardTitle> + </CardHeader> + <CardContent> + {fetchingImages ? ( + <div className="flex items-center justify-center py-16"> + <div className="text-muted-foreground">Loading your images...</div> + </div> + ) : ( + <ImageGallery + images={images} + currentIndex={currentIndex} + setCurrentIndex={setCurrentIndex} + onImageDelete={handleImageDelete} + showSelection={false} + onDoubleClick={(imagePath) => { + navigate(`/post/${imagePath}`); + }} + /> + )} + </CardContent> + </Card> + )} + </div> + </main> + </div> + </SidebarProvider> + ); +}; + +const ProfileSidebar = ({ + activeSection, + onSectionChange +}: { + activeSection: ActiveSection; + onSectionChange: (section: ActiveSection) => void; +}) => { + const { state } = useSidebar(); + const navigate = useNavigate(); + const isCollapsed = state === "collapsed"; + + const menuItems = [ + { id: 'general' as ActiveSection, label: translate('General'), icon: User }, + { id: 'organizations' as ActiveSection, label: translate('Organizations'), icon: Building2 }, + { id: 'api-keys' as ActiveSection, label: translate('API Keys'), icon: Key }, + ]; + + return ( + <Sidebar collapsible="icon"> + <SidebarContent> + <SidebarGroup> + <SidebarGroupLabel><T>Profile</T></SidebarGroupLabel> + <SidebarGroupContent> + <SidebarMenu> + {menuItems.map((item) => ( + <SidebarMenuItem key={item.id}> + <SidebarMenuButton + onClick={() => onSectionChange(item.id)} + className={activeSection === item.id ? "bg-muted text-primary font-medium" : "hover:bg-muted/50"} + > + <item.icon className="h-4 w-4" /> + {!isCollapsed && <span>{item.label}</span>} + </SidebarMenuButton> + </SidebarMenuItem> + ))} + </SidebarMenu> + </SidebarGroupContent> + </SidebarGroup> + + <SidebarGroup className="mt-auto"> + <SidebarGroupContent> + <SidebarMenu> + <SidebarMenuItem> + <SidebarMenuButton + onClick={() => onSectionChange('gallery')} + className={activeSection === 'gallery' ? "bg-muted text-primary font-medium" : "hover:bg-muted/50"} + > + <Images className="h-4 w-4" /> + {!isCollapsed && <span><T>Gallery</T></span>} + </SidebarMenuButton> + </SidebarMenuItem> + </SidebarMenu> + </SidebarGroupContent> + </SidebarGroup> + </SidebarContent> + </Sidebar> + ); +}; + +export default Profile; \ No newline at end of file diff --git a/packages/ui/src/pages/ProviderSettings.tsx b/packages/ui/src/pages/ProviderSettings.tsx new file mode 100644 index 00000000..00051559 --- /dev/null +++ b/packages/ui/src/pages/ProviderSettings.tsx @@ -0,0 +1,35 @@ +/** + * Provider Settings Page + * Full page for managing AI provider configurations + */ + +import React from 'react'; +import { ProviderManagement } from '@/components/filters/ProviderManagement'; +import { Card } from '@/components/ui/card'; +import { T } from '@/i18n'; + +const ProviderSettings: React.FC = () => { + return ( + <div className="min-h-screen bg-background"> + + <main className="container mx-auto px-4 py-8 max-w-7xl"> + <div className="space-y-6"> + {/* Page Header */} + <div className="space-y-2"> + <h1 className="text-3xl font-bold tracking-tight"> + <T>Provider Settings</T> + </h1> + <p className="text-muted-foreground"> + <T>Configure AI service providers for content generation and filtering</T> + </p> + </div> + + {/* Provider Management Component */} + <ProviderManagement /> + </div> + </main> + </div> + ); +}; + +export default ProviderSettings; diff --git a/packages/ui/src/pages/SearchResults.tsx b/packages/ui/src/pages/SearchResults.tsx new file mode 100644 index 00000000..ea971388 --- /dev/null +++ b/packages/ui/src/pages/SearchResults.tsx @@ -0,0 +1,622 @@ +import { useState, useEffect } from "react"; +import { useSearchParams, useNavigate, Link } from "react-router-dom"; +import { supabase } from "@/integrations/supabase/client"; +import { useAuth } from "@/hooks/useAuth"; +import { usePostNavigation } from "@/contexts/PostNavigationContext"; +import { toast } from "sonner"; +import { Button } from "@/components/ui/button"; +import { ArrowLeft, Search, Hash, User, Image as ImageIcon, Calendar, Users } from "lucide-react"; +import { ThemeToggle } from "@/components/ThemeToggle"; +import PhotoCard from "@/components/PhotoCard"; +import { normalizeTag } from "@/utils/tagUtils"; +import { filterPrivateCollectionPictures } from "@/utils/collectionUtils"; + +interface Picture { + id: string; + title: string; + description: string | null; + image_url: string; + likes_count: number; + created_at: string; + user_id: string; + tags: string[] | null; + comments: { count: number }[]; +} + +interface UserResult { + user_id: string; + username: string | null; + display_name: string | null; + bio: string | null; + avatar_url: string | null; +} + +interface Collection { + id: string; + name: string; + description: string | null; + slug: string; + is_public: boolean; + user_id: string; + created_at: string; + picture_count?: number; +} + +type SearchTab = 'all' | 'pictures' | 'users' | 'collections' | 'tags'; + +const SearchResults = () => { + const [searchParams] = useSearchParams(); + const navigate = useNavigate(); + const { user } = useAuth(); + const { setNavigationData } = usePostNavigation(); + const [pictures, setPictures] = useState<Picture[]>([]); + const [users, setUsers] = useState<UserResult[]>([]); + const [collections, setCollections] = useState<Collection[]>([]); + const [tags, setTags] = useState<string[]>([]); + const [userLikes, setUserLikes] = useState<Set<string>>(new Set()); + const [loading, setLoading] = useState(true); + const [activeTab, setActiveTab] = useState<SearchTab>('all'); + + const query = searchParams.get('q') || ''; + + useEffect(() => { + if (query.trim()) { + performSearch(); + if (user) { + fetchUserLikes(); + } + } else { + setLoading(false); + } + }, [query, user]); + + const performSearch = async () => { + try { + setLoading(true); + + // Search pictures by title and description + const { data: picturesData, error: picturesError } = await supabase + .from('pictures') + .select('*') + .or(`title.ilike.%${query}%,description.ilike.%${query}%`) + .order('created_at', { ascending: false }) + .limit(20); + + if (picturesError) throw picturesError; + + // Filter out pictures that are only in private collections + const publicPictures = await filterPrivateCollectionPictures(picturesData || []); + + // Get comment counts for pictures + const picturesWithCommentCounts = await Promise.all( + publicPictures.map(async (picture) => { + const { count } = await supabase + .from('comments') + .select('*', { count: 'exact', head: true }) + .eq('picture_id', picture.id); + + return { ...picture, comments: [{ count: count || 0 }] }; + }) + ); + + setPictures(picturesWithCommentCounts); + + // Set up navigation data for lightbox + setNavigationData({ + posts: picturesWithCommentCounts.map(p => ({ + id: p.id, + title: p.title, + image_url: p.image_url, + user_id: p.user_id + })), + currentIndex: 0, + source: 'search', + sourceId: query + }); + + // Search users by username and display name + const { data: usersData, error: usersError } = await supabase + .from('profiles') + .select('user_id, username, display_name, bio, avatar_url') + .or(`username.ilike.%${query}%,display_name.ilike.%${query}%`) + .order('created_at', { ascending: false }) + .limit(20); + + if (usersError) throw usersError; + setUsers(usersData || []); + + // Search collections by name and description + const { data: collectionsData, error: collectionsError } = await supabase + .from('collections') + .select('*') + .eq('is_public', true) + .or(`name.ilike.%${query}%,description.ilike.%${query}%`) + .order('created_at', { ascending: false }) + .limit(20); + + if (collectionsError) throw collectionsError; + + // Get picture counts for collections + const collectionsWithCounts = await Promise.all( + (collectionsData || []).map(async (collection) => { + const { count } = await supabase + .from('collection_pictures') + .select('*', { count: 'exact', head: true }) + .eq('collection_id', collection.id); + + return { ...collection, picture_count: count || 0 }; + }) + ); + + setCollections(collectionsWithCounts); + + // Search for tags (if query looks like a hashtag or could be a tag) + const normalizedQuery = normalizeTag(query.replace('#', '')); + if (normalizedQuery) { + const { data: tagPictures } = await supabase + .from('pictures') + .select('tags') + .not('tags', 'is', null); + + const foundTags = new Set<string>(); + tagPictures?.forEach(picture => { + picture.tags?.forEach(tag => { + if (tag.toLowerCase().includes(normalizedQuery.toLowerCase())) { + foundTags.add(tag); + } + }); + }); + setTags(Array.from(foundTags).slice(0, 10)); + } else { + setTags([]); + } + + } catch (error) { + console.error('Error performing search:', error); + toast.error('Failed to perform search'); + } finally { + setLoading(false); + } + }; + + const fetchUserLikes = async () => { + if (!user) return; + + try { + const { data, error } = await supabase + .from('likes') + .select('picture_id') + .eq('user_id', user.id); + + if (error) throw error; + setUserLikes(new Set(data.map(like => like.picture_id))); + } catch (error) { + console.error('Error fetching user likes:', error); + } + }; + + const handleImageClick = (pictureId: string) => { + navigate(`/post/${pictureId}`); + }; + + const getTotalResults = () => { + return pictures.length + users.length + collections.length + tags.length; + }; + + const getTabContent = () => { + switch (activeTab) { + case 'pictures': + return ( + <div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6"> + {pictures.map((picture) => ( + <PhotoCard + key={picture.id} + pictureId={picture.id} + image={picture.image_url} + title={picture.title} + author={`User ${picture.user_id.slice(0, 8)}`} + authorId={picture.user_id} + likes={picture.likes_count} + comments={picture.comments[0]?.count || 0} + isLiked={userLikes.has(picture.id)} + description={picture.description} + onClick={handleImageClick} + onLike={fetchUserLikes} + onDelete={performSearch} + /> + ))} + </div> + ); + + case 'users': + return ( + <div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-6"> + {users.map((user) => ( + <Link + key={user.user_id} + to={`/user/${user.user_id}`} + className="group" + > + <div className="bg-card rounded-xl border p-6 hover:shadow-glow transition-all duration-300 hover:scale-[1.02]"> + <div className="flex items-center gap-4"> + <div className="w-12 h-12 bg-gradient-primary rounded-full flex items-center justify-center"> + {user.avatar_url ? ( + <img + src={user.avatar_url} + alt={user.display_name || 'User avatar'} + className="w-full h-full rounded-full object-cover" + /> + ) : ( + <User className="h-6 w-6 text-white" /> + )} + </div> + <div className="flex-1 min-w-0"> + <h3 className="font-semibold text-sm group-hover:text-primary transition-colors"> + {user.display_name || `User ${user.user_id.slice(0, 8)}`} + </h3> + {user.username && ( + <p className="text-xs text-muted-foreground">@{user.username}</p> + )} + {user.bio && ( + <p className="text-xs text-muted-foreground mt-1 line-clamp-2"> + {user.bio} + </p> + )} + </div> + </div> + </div> + </Link> + ))} + </div> + ); + + case 'collections': + return ( + <div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-6"> + {collections.map((collection) => ( + <Link + key={collection.id} + to={`/collections/${collection.user_id}/${collection.slug}`} + className="group" + > + <div className="bg-card rounded-xl border p-6 hover:shadow-glow transition-all duration-300 hover:scale-[1.02]"> + <div className="w-12 h-12 bg-gradient-primary rounded-full flex items-center justify-center mb-4 group-hover:scale-110 transition-transform"> + <Calendar className="h-6 w-6 text-white" /> + </div> + <h3 className="font-semibold text-lg group-hover:text-primary transition-colors mb-2"> + {collection.name} + </h3> + {collection.description && ( + <p className="text-sm text-muted-foreground mb-3 line-clamp-2"> + {collection.description} + </p> + )} + <div className="flex items-center justify-between text-xs text-muted-foreground"> + <span>{collection.picture_count} photos</span> + <span>{new Date(collection.created_at).toLocaleDateString()}</span> + </div> + </div> + </Link> + ))} + </div> + ); + + case 'tags': + return ( + <div className="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-4"> + {tags.map((tag) => ( + <Link + key={tag} + to={`/tags/${tag}`} + className="group" + > + <div className="bg-card rounded-xl border p-4 hover:shadow-glow transition-all duration-300 hover:scale-[1.02] text-center"> + <Hash className="h-8 w-8 mx-auto mb-2 text-primary group-hover:scale-110 transition-transform" /> + <span className="text-sm font-medium group-hover:text-primary transition-colors"> + {tag} + </span> + </div> + </Link> + ))} + </div> + ); + + default: // 'all' + return ( + <div className="space-y-8"> + {/* Pictures Section */} + {pictures.length > 0 && ( + <div> + <div className="flex items-center justify-between mb-4"> + <h3 className="text-lg font-semibold">Pictures ({pictures.length})</h3> + <Button + variant="ghost" + size="sm" + onClick={() => setActiveTab('pictures')} + > + View all + </Button> + </div> + <div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6"> + {pictures.slice(0, 4).map((picture) => ( + <PhotoCard + key={picture.id} + pictureId={picture.id} + image={picture.image_url} + title={picture.title} + author={`User ${picture.user_id.slice(0, 8)}`} + authorId={picture.user_id} + likes={picture.likes_count} + comments={picture.comments[0]?.count || 0} + isLiked={userLikes.has(picture.id)} + description={picture.description} + onClick={handleImageClick} + onLike={fetchUserLikes} + onDelete={performSearch} + /> + ))} + </div> + </div> + )} + + {/* Users Section */} + {users.length > 0 && ( + <div> + <div className="flex items-center justify-between mb-4"> + <h3 className="text-lg font-semibold">Users ({users.length})</h3> + <Button + variant="ghost" + size="sm" + onClick={() => setActiveTab('users')} + > + View all + </Button> + </div> + <div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-6"> + {users.slice(0, 3).map((user) => ( + <Link + key={user.user_id} + to={`/user/${user.user_id}`} + className="group" + > + <div className="bg-card rounded-xl border p-6 hover:shadow-glow transition-all duration-300 hover:scale-[1.02]"> + <div className="flex items-center gap-4"> + <div className="w-12 h-12 bg-gradient-primary rounded-full flex items-center justify-center"> + {user.avatar_url ? ( + <img + src={user.avatar_url} + alt={user.display_name || 'User avatar'} + className="w-full h-full rounded-full object-cover" + /> + ) : ( + <User className="h-6 w-6 text-white" /> + )} + </div> + <div className="flex-1 min-w-0"> + <h3 className="font-semibold text-sm group-hover:text-primary transition-colors"> + {user.display_name || `User ${user.user_id.slice(0, 8)}`} + </h3> + {user.username && ( + <p className="text-xs text-muted-foreground">@{user.username}</p> + )} + </div> + </div> + </div> + </Link> + ))} + </div> + </div> + )} + + {/* Collections Section */} + {collections.length > 0 && ( + <div> + <div className="flex items-center justify-between mb-4"> + <h3 className="text-lg font-semibold">Collections ({collections.length})</h3> + <Button + variant="ghost" + size="sm" + onClick={() => setActiveTab('collections')} + > + View all + </Button> + </div> + <div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-6"> + {collections.slice(0, 3).map((collection) => ( + <Link + key={collection.id} + to={`/collections/${collection.user_id}/${collection.slug}`} + className="group" + > + <div className="bg-card rounded-xl border p-6 hover:shadow-glow transition-all duration-300 hover:scale-[1.02]"> + <div className="w-12 h-12 bg-gradient-primary rounded-full flex items-center justify-center mb-4 group-hover:scale-110 transition-transform"> + <Calendar className="h-6 w-6 text-white" /> + </div> + <h3 className="font-semibold text-lg group-hover:text-primary transition-colors mb-2"> + {collection.name} + </h3> + <div className="text-xs text-muted-foreground"> + {collection.picture_count} photos + </div> + </div> + </Link> + ))} + </div> + </div> + )} + + {/* Tags Section */} + {tags.length > 0 && ( + <div> + <div className="flex items-center justify-between mb-4"> + <h3 className="text-lg font-semibold">Tags ({tags.length})</h3> + <Button + variant="ghost" + size="sm" + onClick={() => setActiveTab('tags')} + > + View all + </Button> + </div> + <div className="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-4"> + {tags.slice(0, 6).map((tag) => ( + <Link + key={tag} + to={`/tags/${tag}`} + className="group" + > + <div className="bg-card rounded-xl border p-4 hover:shadow-glow transition-all duration-300 hover:scale-[1.02] text-center"> + <Hash className="h-8 w-8 mx-auto mb-2 text-primary group-hover:scale-110 transition-transform" /> + <span className="text-sm font-medium group-hover:text-primary transition-colors"> + {tag} + </span> + </div> + </Link> + ))} + </div> + </div> + )} + </div> + ); + } + }; + + if (loading) { + return ( + <div className="min-h-screen bg-background flex items-center justify-center"> + <div className="text-muted-foreground">Searching...</div> + </div> + ); + } + + if (!query.trim()) { + return ( + <div className="min-h-screen bg-background pt-14"> + <div className="container mx-auto px-4 py-8 max-w-6xl"> + <div className="text-center py-16"> + <Search className="h-16 w-16 mx-auto mb-4 text-muted-foreground" /> + <h3 className="text-xl font-semibold mb-2">Enter a search term</h3> + <p className="text-muted-foreground"> + Search for pictures, users, collections, or hashtags + </p> + </div> + </div> + </div> + ); + } + + const totalResults = getTotalResults(); + + return ( + <div className="min-h-screen bg-background pt-14"> + <div className="container mx-auto px-4 py-8 max-w-6xl"> + {/* Header */} + <div className="flex items-center justify-between mb-8"> + <Button variant="ghost" size="sm" onClick={() => navigate(-1)}> + <ArrowLeft className="h-4 w-4 mr-2" /> + Back + </Button> + <ThemeToggle /> + </div> + + {/* Search Header */} + <div className="mb-8"> + <div className="flex items-center gap-2 mb-4"> + <Search className="h-6 w-6 text-primary" /> + <h1 className="text-2xl font-bold"> + Search results for "{query}" + </h1> + </div> + <p className="text-muted-foreground"> + {totalResults} {totalResults === 1 ? 'result' : 'results'} found + </p> + </div> + + {/* Tabs */} + {totalResults > 0 && ( + <div className="flex justify-center mb-8"> + <div className="flex bg-muted rounded-lg p-1 overflow-x-auto"> + <button + onClick={() => setActiveTab('all')} + className={`flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors whitespace-nowrap ${ + activeTab === 'all' + ? 'bg-background text-foreground shadow-sm' + : 'text-muted-foreground hover:text-foreground' + }`} + > + All ({totalResults}) + </button> + {pictures.length > 0 && ( + <button + onClick={() => setActiveTab('pictures')} + className={`flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors whitespace-nowrap ${ + activeTab === 'pictures' + ? 'bg-background text-foreground shadow-sm' + : 'text-muted-foreground hover:text-foreground' + }`} + > + <ImageIcon className="h-4 w-4" /> + Pictures ({pictures.length}) + </button> + )} + {users.length > 0 && ( + <button + onClick={() => setActiveTab('users')} + className={`flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors whitespace-nowrap ${ + activeTab === 'users' + ? 'bg-background text-foreground shadow-sm' + : 'text-muted-foreground hover:text-foreground' + }`} + > + <Users className="h-4 w-4" /> + Users ({users.length}) + </button> + )} + {collections.length > 0 && ( + <button + onClick={() => setActiveTab('collections')} + className={`flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors whitespace-nowrap ${ + activeTab === 'collections' + ? 'bg-background text-foreground shadow-sm' + : 'text-muted-foreground hover:text-foreground' + }`} + > + <Calendar className="h-4 w-4" /> + Collections ({collections.length}) + </button> + )} + {tags.length > 0 && ( + <button + onClick={() => setActiveTab('tags')} + className={`flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors whitespace-nowrap ${ + activeTab === 'tags' + ? 'bg-background text-foreground shadow-sm' + : 'text-muted-foreground hover:text-foreground' + }`} + > + <Hash className="h-4 w-4" /> + Tags ({tags.length}) + </button> + )} + </div> + </div> + )} + + {/* Content */} + {totalResults === 0 ? ( + <div className="text-center py-16"> + <Search className="h-16 w-16 mx-auto mb-4 text-muted-foreground" /> + <h3 className="text-xl font-semibold mb-2">No results found</h3> + <p className="text-muted-foreground"> + Try searching with different keywords + </p> + </div> + ) : ( + getTabContent() + )} + </div> + </div> + ); +}; + +export default SearchResults; \ No newline at end of file diff --git a/packages/ui/src/pages/TagPage.tsx b/packages/ui/src/pages/TagPage.tsx new file mode 100644 index 00000000..0e146044 --- /dev/null +++ b/packages/ui/src/pages/TagPage.tsx @@ -0,0 +1,286 @@ +import { useState, useEffect } from "react"; +import { useParams, useNavigate, Link } from "react-router-dom"; +import { supabase } from "@/integrations/supabase/client"; +import { useAuth } from "@/hooks/useAuth"; +import { usePostNavigation } from "@/contexts/PostNavigationContext"; +import { toast } from "sonner"; +import { Button } from "@/components/ui/button"; +import { ArrowLeft, Hash, Image as ImageIcon, MessageCircle } from "lucide-react"; +import { ThemeToggle } from "@/components/ThemeToggle"; +import PhotoGrid from "@/components/PhotoGrid"; +import { normalizeTag } from "@/utils/tagUtils"; +import { filterPrivateCollectionPictures } from "@/utils/collectionUtils"; + +interface Picture { + id: string; + title: string; + description: string | null; + image_url: string; + likes_count: number; + created_at: string; + user_id: string; + tags: string[] | null; + comments: { count: number }[]; +} + +interface Comment { + id: string; + content: string; + created_at: string; + user_id: string; + picture_id: string; + likes_count: number; + picture: { + title: string; + image_url: string; + }; +} + +const TagPage = () => { + const { tag } = useParams<{ tag: string }>(); + const navigate = useNavigate(); + const { user } = useAuth(); + const { setNavigationData } = usePostNavigation(); + const [pictures, setPictures] = useState<Picture[]>([]); + const [comments, setComments] = useState<Comment[]>([]); + const [userLikes, setUserLikes] = useState<Set<string>>(new Set()); + const [loading, setLoading] = useState(true); + const [activeTab, setActiveTab] = useState<'posts' | 'comments'>('posts'); + + const normalizedTag = tag ? normalizeTag(tag) : ''; + + useEffect(() => { + if (normalizedTag) { + fetchTaggedContent(); + if (user) { + fetchUserLikes(); + } + } + }, [normalizedTag, user]); + + const fetchTaggedContent = async () => { + try { + setLoading(true); + + // Fetch pictures with tag in tags array or description + const { data: picturesData, error: picturesError } = await supabase + .from('pictures') + .select('*') + .or(`tags.cs.{${normalizedTag}},tags.cs.{"${normalizedTag}"},description.ilike.%#${normalizedTag}%,title.ilike.%#${normalizedTag}%`) + .order('created_at', { ascending: false }); + + if (picturesError) throw picturesError; + + // Filter out pictures that are only in private collections + const publicPictures = await filterPrivateCollectionPictures(picturesData || []); + + // Get comment counts for each picture + const picturesWithCommentCounts = await Promise.all( + publicPictures.map(async (picture) => { + const { count } = await supabase + .from('comments') + .select('*', { count: 'exact', head: true }) + .eq('picture_id', picture.id); + + return { ...picture, comments: [{ count: count || 0 }] }; + }) + ); + + setPictures(picturesWithCommentCounts); + + // Set up navigation data for lightbox + setNavigationData({ + posts: picturesWithCommentCounts.map(p => ({ + id: p.id, + title: p.title, + image_url: p.image_url, + user_id: p.user_id + })), + currentIndex: 0, + source: 'tag', + sourceId: normalizedTag + }); + + // Fetch comments containing the hashtag with their associated pictures + const { data: commentsData, error: commentsError } = await supabase + .from('comments') + .select('*') + .ilike('content', `%#${normalizedTag}%`) + .order('created_at', { ascending: false }); + + if (commentsError) throw commentsError; + + // Get picture details for each comment + const commentsWithPictures = await Promise.all( + (commentsData || []).map(async (comment) => { + const { data: picture } = await supabase + .from('pictures') + .select('title, image_url') + .eq('id', comment.picture_id) + .single(); + + return { + ...comment, + picture: picture || { title: 'Unknown', image_url: '' } + }; + }) + ); + + setComments(commentsWithPictures); + + } catch (error) { + console.error('Error fetching tagged content:', error); + toast.error('Failed to load tagged content'); + } finally { + setLoading(false); + } + }; + + const fetchUserLikes = async () => { + if (!user) return; + + try { + const { data, error } = await supabase + .from('likes') + .select('picture_id') + .eq('user_id', user.id); + + if (error) throw error; + setUserLikes(new Set(data.map(like => like.picture_id))); + } catch (error) { + console.error('Error fetching user likes:', error); + } + }; + + const handleImageClick = (pictureId: string) => { + navigate(`/post/${pictureId}`); + }; + + if (loading) { + return ( + <div className="min-h-screen bg-background flex items-center justify-center"> + <div className="text-muted-foreground">Loading #{tag}...</div> + </div> + ); + } + + const totalCount = pictures.length + comments.length; + + return ( + <div className="min-h-screen bg-background pt-14"> + <div className="container mx-auto px-4 py-8 max-w-6xl"> + {/* Header */} + <div className="flex items-center justify-between mb-8"> + <Button variant="ghost" size="sm" onClick={() => navigate(-1)}> + <ArrowLeft className="h-4 w-4 mr-2" /> + Back + </Button> + <ThemeToggle /> + </div> + + {/* Tag Header */} + <div className="text-center mb-8"> + <div className="flex items-center justify-center gap-2 mb-4"> + <Hash className="h-8 w-8 text-primary" /> + <h1 className="text-4xl font-bold"> + <span className="bg-gradient-primary bg-clip-text text-transparent"> + {tag} + </span> + </h1> + </div> + <p className="text-muted-foreground text-lg"> + {totalCount} {totalCount === 1 ? 'result' : 'results'} found + </p> + </div> + + {/* Tabs */} + <div className="flex justify-center mb-8"> + <div className="flex bg-muted rounded-lg p-1"> + <button + onClick={() => setActiveTab('posts')} + className={`flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors ${ + activeTab === 'posts' + ? 'bg-background text-foreground shadow-sm' + : 'text-muted-foreground hover:text-foreground' + }`} + > + <ImageIcon className="h-4 w-4" /> + Posts ({pictures.length}) + </button> + <button + onClick={() => setActiveTab('comments')} + className={`flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors ${ + activeTab === 'comments' + ? 'bg-background text-foreground shadow-sm' + : 'text-muted-foreground hover:text-foreground' + }`} + > + <MessageCircle className="h-4 w-4" /> + Comments ({comments.length}) + </button> + </div> + </div> + + {/* Content */} + {activeTab === 'posts' ? ( + <PhotoGrid + customPictures={pictures} + customLoading={loading} + navigationSource="tag" + navigationSourceId={normalizedTag} + /> + ) : ( + <div className="space-y-4"> + {comments.length === 0 ? ( + <div className="text-center py-16"> + <MessageCircle className="h-16 w-16 mx-auto mb-4 text-muted-foreground" /> + <h3 className="text-xl font-semibold mb-2">No comments found</h3> + <p className="text-muted-foreground"> + No comments contain the hashtag #{tag} + </p> + </div> + ) : ( + <div className="grid grid-cols-1 md:grid-cols-2 gap-4"> + {comments.map((comment) => ( + <Link + key={comment.id} + to={`/post/${comment.picture_id}`} + className="group" + > + <div className="bg-card rounded-xl border p-4 hover:shadow-glow transition-all duration-300 hover:scale-[1.02]"> + <div className="flex gap-3"> + <img + src={comment.picture.image_url} + alt={comment.picture.title} + className="w-12 h-12 rounded-lg object-cover" + /> + <div className="flex-1 min-w-0"> + <div className="flex items-center gap-2 mb-2"> + <span className="text-sm font-medium"> + User {comment.user_id.slice(0, 8)} + </span> + <span className="text-xs text-muted-foreground"> + {new Date(comment.created_at).toLocaleDateString()} + </span> + </div> + <p className="text-sm text-muted-foreground line-clamp-2 group-hover:text-foreground transition-colors"> + {comment.content} + </p> + <div className="text-xs text-muted-foreground mt-2"> + on "{comment.picture.title}" + </div> + </div> + </div> + </div> + </Link> + ))} + </div> + )} + </div> + )} + </div> + </div> + ); +}; + +export default TagPage; \ No newline at end of file diff --git a/packages/ui/src/pages/UserCollections.tsx b/packages/ui/src/pages/UserCollections.tsx new file mode 100644 index 00000000..c70580c3 --- /dev/null +++ b/packages/ui/src/pages/UserCollections.tsx @@ -0,0 +1,267 @@ +import { useState, useEffect } from "react"; +import { useParams, useNavigate, Link } from "react-router-dom"; +import { supabase } from "@/integrations/supabase/client"; +import { useAuth } from "@/hooks/useAuth"; +import { toast } from "sonner"; +import { Button } from "@/components/ui/button"; +import { ArrowLeft, User, Calendar, Plus, Lock, Globe } from "lucide-react"; +import { ThemeToggle } from "@/components/ThemeToggle"; + +interface UserProfile { + id: string; + username: string | null; + display_name: string | null; + bio: string | null; + avatar_url: string | null; + created_at: string; +} + +interface Collection { + id: string; + name: string; + description: string | null; + slug: string; + is_public: boolean; + created_at: string; + picture_count?: number; +} + +const UserCollections = () => { + const { userId } = useParams<{ userId: string }>(); + const navigate = useNavigate(); + const { user: currentUser } = useAuth(); + const [userProfile, setUserProfile] = useState<UserProfile | null>(null); + const [collections, setCollections] = useState<Collection[]>([]); + const [loading, setLoading] = useState(true); + + const isOwnProfile = currentUser?.id === userId; + + useEffect(() => { + if (userId) { + fetchUserProfile(); + fetchCollections(); + } + }, [userId]); + + const fetchUserProfile = async () => { + try { + const { data: profile, error: profileError } = await supabase + .from('profiles') + .select('*') + .eq('user_id', userId) + .maybeSingle(); + + if (profileError && profileError.code !== 'PGRST116') { + throw profileError; + } + + if (!profile) { + setUserProfile({ + id: userId!, + username: null, + display_name: `User ${userId!.slice(0, 8)}`, + bio: null, + avatar_url: null, + created_at: new Date().toISOString(), + }); + } else { + setUserProfile({ + id: profile.user_id, + username: profile.username, + display_name: profile.display_name || `User ${userId!.slice(0, 8)}`, + bio: profile.bio, + avatar_url: profile.avatar_url, + created_at: profile.created_at, + }); + } + } catch (error) { + console.error('Error fetching user profile:', error); + toast.error('Failed to load user profile'); + navigate('/'); + } + }; + + const fetchCollections = async () => { + try { + let query = supabase + .from('collections') + .select('*'); + + // If viewing own profile, show all collections; otherwise only public ones + if (isOwnProfile) { + query = query.eq('user_id', userId); + } else { + query = query.eq('user_id', userId).eq('is_public', true); + } + + const { data: collectionsData, error } = await query.order('created_at', { ascending: false }); + + if (error) throw error; + + // Get picture count for each collection + const collectionsWithCounts = await Promise.all( + (collectionsData || []).map(async (collection) => { + const { count } = await supabase + .from('collection_pictures') + .select('*', { count: 'exact', head: true }) + .eq('collection_id', collection.id); + + return { ...collection, picture_count: count || 0 }; + }) + ); + + setCollections(collectionsWithCounts); + } catch (error) { + console.error('Error fetching collections:', error); + toast.error('Failed to load collections'); + } finally { + setLoading(false); + } + }; + + if (loading) { + return ( + <div className="min-h-screen bg-background flex items-center justify-center"> + <div className="text-muted-foreground">Loading collections...</div> + </div> + ); + } + + if (!userProfile) { + return ( + <div className="min-h-screen bg-background flex items-center justify-center"> + <div className="text-center"> + <div className="text-muted-foreground mb-4">User not found</div> + <Link to="/"> + <Button>Back to Home</Button> + </Link> + </div> + </div> + ); + } + + return ( + <div className="min-h-screen bg-background pt-14"> + <div className="container mx-auto px-4 py-8 max-w-4xl"> + {/* Header */} + <div className="flex items-center justify-between mb-8"> + <Button variant="ghost" size="sm" onClick={() => navigate(`/user/${userId}`)}> + <ArrowLeft className="h-4 w-4 mr-2" /> + Back to profile + </Button> + <ThemeToggle /> + </div> + + {/* Profile Summary */} + <div className="flex items-center gap-4 mb-8 p-4 bg-card rounded-xl border"> + <div className="w-16 h-16 bg-gradient-primary rounded-full flex items-center justify-center"> + {userProfile.avatar_url ? ( + <img + src={userProfile.avatar_url} + alt={userProfile.display_name || 'User avatar'} + className="w-full h-full rounded-full object-cover" + /> + ) : ( + <User className="h-8 w-8 text-white" /> + )} + </div> + <div> + <h1 className="text-xl font-semibold"> + {userProfile.display_name}'s Collections + </h1> + <p className="text-muted-foreground text-sm"> + {collections.length} {collections.length === 1 ? 'collection' : 'collections'} + </p> + </div> + {isOwnProfile && ( + <Button + onClick={() => navigate('/collections/new')} + className="ml-auto" + size="sm" + > + <Plus className="h-4 w-4 mr-2" /> + New Collection + </Button> + )} + </div> + + {/* Collections Grid */} + {collections.length === 0 ? ( + <div className="text-center py-16"> + <div className="w-16 h-16 mx-auto mb-4 rounded-full border-2 border-muted flex items-center justify-center"> + <Calendar className="h-8 w-8 text-muted-foreground" /> + </div> + <h3 className="text-xl font-light mb-2"> + {isOwnProfile ? "No Collections Yet" : "No Public Collections"} + </h3> + <p className="text-muted-foreground text-sm mb-6"> + {isOwnProfile + ? "Create your first collection to organize your photos." + : `${userProfile.display_name} hasn't shared any public collections yet.`} + </p> + {isOwnProfile && ( + <Button onClick={() => navigate('/collections/new')}> + <Plus className="h-4 w-4 mr-2" /> + Create Collection + </Button> + )} + </div> + ) : ( + <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6"> + {collections.map((collection) => ( + <Link + key={collection.id} + to={`/collections/${userId}/${collection.slug}`} + className="group" + > + <div className="bg-card rounded-xl border p-6 hover:shadow-glow transition-all duration-300 hover:scale-[1.02]"> + {/* Collection Icon */} + <div className="w-16 h-16 bg-gradient-primary rounded-full flex items-center justify-center mb-4 group-hover:scale-110 transition-transform"> + <Calendar className="h-8 w-8 text-white" /> + </div> + + {/* Collection Info */} + <div className="space-y-2"> + <div className="flex items-center justify-between"> + <h3 className="font-semibold text-lg group-hover:text-primary transition-colors"> + {collection.name} + </h3> + <div className="flex items-center gap-1"> + {collection.is_public ? ( + <div title="Public"> + <Globe className="h-4 w-4 text-green-500" /> + </div> + ) : ( + <div title="Private"> + <Lock className="h-4 w-4 text-orange-500" /> + </div> + )} + </div> + </div> + + {collection.description && ( + <p className="text-muted-foreground text-sm line-clamp-2"> + {collection.description} + </p> + )} + + <div className="flex items-center justify-between text-xs text-muted-foreground pt-2"> + <span> + {collection.picture_count} {collection.picture_count === 1 ? 'photo' : 'photos'} + </span> + <span> + {new Date(collection.created_at).toLocaleDateString()} + </span> + </div> + </div> + </div> + </Link> + ))} + </div> + )} + </div> + </div> + ); +}; + +export default UserCollections; \ No newline at end of file diff --git a/packages/ui/src/pages/UserPage.tsx b/packages/ui/src/pages/UserPage.tsx new file mode 100644 index 00000000..4828a0b7 --- /dev/null +++ b/packages/ui/src/pages/UserPage.tsx @@ -0,0 +1,649 @@ +import { useState, useEffect } from "react"; +import { useParams, useNavigate, Link } from "react-router-dom"; +import { supabase } from "@/integrations/supabase/client"; +import { useAuth } from "@/hooks/useAuth"; +import { toast } from "sonner"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { ArrowLeft, FileText, Calendar, Eye, EyeOff, Edit, Edit3, Check, X, Plus } from "lucide-react"; +import { ThemeToggle } from "@/components/ThemeToggle"; +import { T, translate } from "@/i18n"; +import { Badge } from "@/components/ui/badge"; +import { GenericCanvas } from "@/components/hmi/GenericCanvas"; + +interface Page { + id: string; + title: string; + slug: string; + content: any; + owner: string; + parent: string | null; + type: string | null; + tags: string[] | null; + is_public: boolean; + visible: boolean; + created_at: string; + updated_at: string; +} + +interface UserProfile { + id: string; + username: string | null; + display_name: string | null; + avatar_url: string | null; +} + +interface UserPageProps { + userId?: string; + slug?: string; + embedded?: boolean; +} + +const UserPage = ({ userId: propUserId, slug: propSlug, embedded = false }: UserPageProps) => { + const { userId: paramUserId, slug: paramSlug, orgSlug } = useParams<{ userId: string; slug: string; orgSlug?: string }>(); + const navigate = useNavigate(); + const { user: currentUser } = useAuth(); + + const userId = propUserId || paramUserId; + const slug = propSlug || paramSlug; + + const [page, setPage] = useState<Page | null>(null); + const [userProfile, setUserProfile] = useState<UserProfile | null>(null); + const [loading, setLoading] = useState(true); + const [isEditMode, setIsEditMode] = useState(false); + + // Inline editing states + const [editingTitle, setEditingTitle] = useState(false); + const [editingSlug, setEditingSlug] = useState(false); + const [editingTags, setEditingTags] = useState(false); + const [titleValue, setTitleValue] = useState(""); + const [slugValue, setSlugValue] = useState(""); + const [tagsValue, setTagsValue] = useState(""); + const [slugError, setSlugError] = useState<string | null>(null); + const [savingField, setSavingField] = useState<string | null>(null); + + const isOwner = currentUser?.id === userId; + + useEffect(() => { + if (userId && slug) { + fetchPage(); + fetchUserProfile(); + } + }, [userId, slug]); + + const fetchPage = async () => { + try { + setLoading(true); + + let query = supabase + .from('pages') + .select('*') + .eq('slug', slug) + .eq('owner', userId); + + // If not owner, only show public and visible pages + if (!isOwner) { + query = query.eq('is_public', true).eq('visible', true); + } + + const { data, error } = await query.maybeSingle(); + + if (error) throw error; + + if (!data) { + toast.error(translate('Page not found or you do not have access')); + navigate(orgSlug ? `/org/${orgSlug}/user/${userId}` : `/user/${userId}`); + return; + } + + setPage(data); + } catch (error) { + console.error('Error fetching page:', error); + toast.error(translate('Failed to load page')); + navigate(orgSlug ? `/org/${orgSlug}/user/${userId}` : `/user/${userId}`); + } finally { + setLoading(false); + } + }; + + const fetchUserProfile = async () => { + try { + const { data: profile } = await supabase + .from('profiles') + .select('user_id, username, display_name, avatar_url') + .eq('user_id', userId) + .maybeSingle(); + + if (profile) { + setUserProfile({ + id: profile.user_id, + username: profile.username, + display_name: profile.display_name, + avatar_url: profile.avatar_url, + }); + } + } catch (error) { + console.error('Error fetching user profile:', error); + } + }; + + const handleToggleVisibility = async () => { + if (!page || !isOwner) return; + + try { + const { error } = await supabase + .from('pages') + .update({ visible: !page.visible }) + .eq('id', page.id) + .eq('owner', currentUser?.id); + + if (error) throw error; + + setPage({ ...page, visible: !page.visible }); + toast.success(translate(page.visible ? 'Page hidden' : 'Page made visible')); + } catch (error) { + console.error('Error toggling visibility:', error); + toast.error(translate('Failed to update page visibility')); + } + }; + + const handleTogglePublic = async () => { + if (!page || !isOwner) return; + + try { + const { error } = await supabase + .from('pages') + .update({ is_public: !page.is_public }) + .eq('id', page.id) + .eq('owner', currentUser?.id); + + if (error) throw error; + + setPage({ ...page, is_public: !page.is_public }); + toast.success(translate(page.is_public ? 'Page made private' : 'Page made public')); + } catch (error) { + console.error('Error toggling public status:', error); + toast.error(translate('Failed to update page status')); + } + }; + + const checkSlugCollision = async (newSlug: string): Promise<boolean> => { + if (newSlug === page?.slug) return false; // Same slug, no collision + + try { + const { data, error } = await supabase + .from('pages') + .select('id') + .eq('slug', newSlug) + .eq('owner', userId) + .maybeSingle(); + + if (error) throw error; + return !!data; // Returns true if slug already exists + } catch (error) { + console.error('Error checking slug collision:', error); + return false; + } + }; + + const handleSaveTitle = async () => { + if (!page || !titleValue.trim()) { + toast.error(translate('Title cannot be empty')); + return; + } + + setSavingField('title'); + try { + const { error } = await supabase + .from('pages') + .update({ title: titleValue.trim(), updated_at: new Date().toISOString() }) + .eq('id', page.id) + .eq('owner', currentUser?.id); + + if (error) throw error; + + setPage({ ...page, title: titleValue.trim() }); + setEditingTitle(false); + toast.success(translate('Title updated')); + } catch (error) { + console.error('Error updating title:', error); + toast.error(translate('Failed to update title')); + } finally { + setSavingField(null); + } + }; + + const handleSaveSlug = async () => { + if (!page || !slugValue.trim()) { + toast.error(translate('Slug cannot be empty')); + return; + } + + // Validate slug format (lowercase, hyphens, alphanumeric) + const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/; + if (!slugRegex.test(slugValue)) { + setSlugError('Slug must be lowercase, alphanumeric, and use hyphens only'); + return; + } + + setSavingField('slug'); + setSlugError(null); + + // Check for collisions + const hasCollision = await checkSlugCollision(slugValue); + if (hasCollision) { + setSlugError('This slug is already used by another page'); + setSavingField(null); + return; + } + + try { + const { error } = await supabase + .from('pages') + .update({ slug: slugValue.trim(), updated_at: new Date().toISOString() }) + .eq('id', page.id) + .eq('owner', currentUser?.id); + + if (error) throw error; + + setPage({ ...page, slug: slugValue.trim() }); + setEditingSlug(false); + toast.success(translate('Slug updated')); + + // Update URL to reflect new slug + const newPath = orgSlug + ? `/org/${orgSlug}/user/${userId}/pages/${slugValue}` + : `/user/${userId}/pages/${slugValue}`; + navigate(newPath, { replace: true }); + } catch (error) { + console.error('Error updating slug:', error); + toast.error(translate('Failed to update slug')); + } finally { + setSavingField(null); + } + }; + + const handleSaveTags = async () => { + if (!page) return; + + setSavingField('tags'); + try { + // Parse tags from comma-separated string + const newTags = tagsValue + .split(',') + .map(tag => tag.trim()) + .filter(tag => tag.length > 0); + + const { error } = await supabase + .from('pages') + .update({ tags: newTags.length > 0 ? newTags : null, updated_at: new Date().toISOString() }) + .eq('id', page.id) + .eq('owner', currentUser?.id); + + if (error) throw error; + + setPage({ ...page, tags: newTags.length > 0 ? newTags : null }); + setEditingTags(false); + toast.success(translate('Tags updated')); + } catch (error) { + console.error('Error updating tags:', error); + toast.error(translate('Failed to update tags')); + } finally { + setSavingField(null); + } + }; + + const handleStartEditTitle = () => { + setTitleValue(page?.title || ''); + setEditingTitle(true); + }; + + const handleStartEditSlug = () => { + setSlugValue(page?.slug || ''); + setSlugError(null); + setEditingSlug(true); + }; + + const handleStartEditTags = () => { + setTagsValue(page?.tags?.join(', ') || ''); + setEditingTags(true); + }; + + if (loading) { + return ( + <div className="min-h-screen bg-background flex items-center justify-center"> + <div className="text-muted-foreground"><T>Loading page...</T></div> + </div> + ); + } + + if (!page) { + return ( + <div className="min-h-screen bg-background flex items-center justify-center"> + <div className="text-center"> + <div className="text-muted-foreground mb-4"><T>Page not found</T></div> + <Link to={orgSlug ? `/org/${orgSlug}/user/${userId}` : `/user/${userId}`}> + <Button><T>Back to Profile</T></Button> + </Link> + </div> + </div> + ); + } + + return ( + <div className={`${embedded ? 'h-full' : 'min-h-screen'} bg-background p-2`}> + <div className={embedded ? "w-full h-full overflow-y-auto scrollbar-custom p-4" : "w-full md:container md:mx-auto md:py-8"}> + {/* Header */} + {!embedded && ( + <div className="flex items-center justify-between mb-8"> + <Button + variant="ghost" + size="sm" + onClick={() => navigate(orgSlug ? `/org/${orgSlug}/user/${userId}` : `/user/${userId}`)} + > + <ArrowLeft className="h-4 w-4 md:mr-2" /> + <span className="hidden md:inline"><T>Back to profile</T></span> + </Button> + <div className="flex items-center gap-2"> + {isOwner && ( + <> + <Button + variant="outline" + size="sm" + onClick={handleToggleVisibility} + > + {page.visible ? ( + <> + <Eye className="h-4 w-4 md:mr-2" /> + <span className="hidden md:inline"><T>Visible</T></span> + </> + ) : ( + <> + <EyeOff className="h-4 w-4 md:mr-2" /> + <span className="hidden md:inline"><T>Hidden</T></span> + </> + )} + </Button> + <Button + variant="outline" + size="sm" + onClick={handleTogglePublic} + > + <span className="hidden md:inline"><T>{page.is_public ? 'Public' : 'Private'}</T></span> + <span className="md:hidden"><T>{page.is_public ? 'Pub' : 'Priv'}</T></span> + </Button> + <Button + variant={isEditMode ? "default" : "outline"} + size="sm" + onClick={() => setIsEditMode(!isEditMode)} + className={isEditMode ? "bg-primary text-white" : ""} + > + {isEditMode ? ( + <> + <Eye className="h-4 w-4 md:mr-2" /> + <span className="hidden md:inline"><T>View</T></span> + </> + ) : ( + <> + <Edit3 className="h-4 w-4 md:mr-2" /> + <span className="hidden md:inline"><T>Edit</T></span> + </> + )} + </Button> + </> + )} + </div> + </div> + )} + + {/* Page Header */} + <div className="mb-8"> + <div className="flex items-start gap-4 mb-4"> + <div className="w-16 h-16 bg-gradient-primary rounded-lg flex items-center justify-center flex-shrink-0"> + <FileText className="h-8 w-8 text-white" /> + </div> + <div className="flex-1"> + {/* Editable Title */} + {editingTitle && isOwner && isEditMode ? ( + <div className="flex items-center gap-2 mb-2"> + <Input + value={titleValue} + onChange={(e) => setTitleValue(e.target.value)} + className="text-3xl font-bold h-12" + placeholder="Page title..." + onKeyDown={(e) => { + if (e.key === 'Enter') handleSaveTitle(); + if (e.key === 'Escape') setEditingTitle(false); + }} + autoFocus + disabled={savingField === 'title'} + /> + <Button + size="sm" + variant="ghost" + onClick={handleSaveTitle} + disabled={savingField === 'title'} + > + <Check className="h-4 w-4" /> + </Button> + <Button + size="sm" + variant="ghost" + onClick={() => setEditingTitle(false)} + disabled={savingField === 'title'} + > + <X className="h-4 w-4" /> + </Button> + </div> + ) : ( + <h1 + className={`text-3xl font-bold mb-2 ${isOwner && isEditMode ? 'cursor-pointer hover:text-primary transition-colors' : '' + }`} + onClick={() => isOwner && isEditMode && handleStartEditTitle()} + title={isOwner && isEditMode ? 'Click to edit title' : ''} + > + {page.title} + </h1> + )} + + <div className="flex items-center gap-4 text-sm text-muted-foreground"> + {userProfile && ( + <Link + to={orgSlug ? `/org/${orgSlug}/user/${userId}` : `/user/${userId}`} + className="hover:text-primary transition-colors" + > + {userProfile.display_name || userProfile.username || `User ${userId?.slice(0, 8)}`} + </Link> + )} + <div className="flex items-center gap-1"> + <Calendar className="h-4 w-4" /> + {new Date(page.created_at).toLocaleDateString('en-US', { + year: 'numeric', + month: 'long', + day: 'numeric' + })} + </div> + </div> + </div> + </div> + + {/* Tags and Type */} + <div className="space-y-3"> + <div className="flex items-center gap-2 flex-wrap"> + {page.type && ( + <Badge variant="outline">{page.type}</Badge> + )} + {!page.visible && isOwner && ( + <Badge variant="destructive" className="flex items-center gap-1"> + <EyeOff className="h-3 w-3" /> + <T>Hidden</T> + </Badge> + )} + {!page.is_public && ( + <Badge variant="secondary" className="bg-blue-500/10 text-blue-500"> + <T>Private</T> + </Badge> + )} + </div> + + {/* Editable Tags */} + {editingTags && isOwner && isEditMode ? ( + <div className="flex items-start gap-2"> + <div className="flex-1"> + <Input + value={tagsValue} + onChange={(e) => setTagsValue(e.target.value)} + className="text-sm" + placeholder="tag1, tag2, tag3..." + onKeyDown={(e) => { + if (e.key === 'Enter') handleSaveTags(); + if (e.key === 'Escape') setEditingTags(false); + }} + autoFocus + disabled={savingField === 'tags'} + /> + <p className="text-xs text-muted-foreground mt-1"> + Separate tags with commas + </p> + </div> + <Button + size="sm" + variant="ghost" + onClick={handleSaveTags} + disabled={savingField === 'tags'} + > + <Check className="h-4 w-4" /> + </Button> + <Button + size="sm" + variant="ghost" + onClick={() => setEditingTags(false)} + disabled={savingField === 'tags'} + > + <X className="h-4 w-4" /> + </Button> + </div> + ) : ( + <div className="flex items-center gap-2 flex-wrap"> + {page.tags && page.tags.map((tag, index) => ( + <Badge + key={index} + variant="secondary" + className={isOwner && isEditMode ? 'cursor-pointer hover:bg-secondary/80' : ''} + onClick={() => isOwner && isEditMode && handleStartEditTags()} + > + #{tag} + </Badge> + ))} + {isOwner && isEditMode && ( + <Button + size="sm" + variant="ghost" + onClick={handleStartEditTags} + className="h-6 px-2" + > + <Plus className="h-3 w-3 mr-1" /> + <T>{page.tags && page.tags.length > 0 ? 'Edit tags' : 'Add tags'}</T> + </Button> + )} + </div> + )} + + {/* Editable Slug */} + {isOwner && isEditMode && ( + <div className="mt-2"> + {editingSlug ? ( + <div className="flex items-start gap-2"> + <div className="flex-1"> + <Input + value={slugValue} + onChange={(e) => { + setSlugValue(e.target.value.toLowerCase().replace(/[^a-z0-9-]/g, '-')); + setSlugError(null); + }} + className="text-sm font-mono" + placeholder="page-slug" + onKeyDown={(e) => { + if (e.key === 'Enter') handleSaveSlug(); + if (e.key === 'Escape') setEditingSlug(false); + }} + autoFocus + disabled={savingField === 'slug'} + /> + {slugError && ( + <p className="text-xs text-destructive mt-1">{slugError}</p> + )} + <p className="text-xs text-muted-foreground mt-1"> + URL: /user/{userId}/pages/<span className="font-semibold">{slugValue || page.slug}</span> + </p> + </div> + <Button + size="sm" + variant="ghost" + onClick={handleSaveSlug} + disabled={savingField === 'slug'} + > + <Check className="h-4 w-4" /> + </Button> + <Button + size="sm" + variant="ghost" + onClick={() => setEditingSlug(false)} + disabled={savingField === 'slug'} + > + <X className="h-4 w-4" /> + </Button> + </div> + ) : ( + <div + className="inline-flex items-center gap-2 text-sm text-muted-foreground cursor-pointer hover:text-foreground transition-colors" + onClick={handleStartEditSlug} + > + <span>Slug:</span> + <code className="bg-muted px-2 py-0.5 rounded text-xs font-mono">{page.slug}</code> + <Edit className="h-3 w-3" /> + </div> + )} + </div> + )} + </div> + </div> + {/* Page Content - Widget Canvas */} + + <div className="max-w-none"> + <GenericCanvas + pageId={`page-${page.id}`} + pageName={page.title} + isEditMode={isEditMode && isOwner} + showControls={isEditMode && isOwner} + /> + </div> + + {/* Footer */} + <div className="mt-8 pt-8 border-t text-sm text-muted-foreground"> + <div className="flex items-center justify-between"> + <div> + <T>Last updated:</T> {new Date(page.updated_at).toLocaleDateString('en-US', { + year: 'numeric', + month: 'long', + day: 'numeric', + hour: '2-digit', + minute: '2-digit' + })} + </div> + {page.parent && ( + <Link + to={`/pages/${page.parent}`} + className="text-primary hover:underline" + > + <T>View parent page</T> + </Link> + )} + </div> + </div> + </div> + </div> + ); +}; + +export default UserPage; diff --git a/packages/ui/src/pages/UserProfile.tsx b/packages/ui/src/pages/UserProfile.tsx new file mode 100644 index 00000000..73b7ae13 --- /dev/null +++ b/packages/ui/src/pages/UserProfile.tsx @@ -0,0 +1,505 @@ +import { useState, useEffect } from "react"; +import { useParams, useNavigate, Link } from "react-router-dom"; +import { supabase } from "@/integrations/supabase/client"; +import { useAuth } from "@/hooks/useAuth"; +import PhotoGrid from "@/components/PhotoGrid"; +import PageManager from "@/components/PageManager"; +import { toast } from "sonner"; +import { Button } from "@/components/ui/button"; +import { ArrowLeft, User, Image as ImageIcon, Plus, Camera, EyeOff } from "lucide-react"; +import { ThemeToggle } from "@/components/ThemeToggle"; +import UserPictures from "@/components/UserPictures"; +import { T, translate } from "@/i18n"; +import { normalizeMediaType } from "@/lib/mediaRegistry"; + +interface UserProfile { + id: string; + username: string | null; + display_name: string | null; + bio: string | null; + avatar_url: string | null; + created_at: string; +} + +interface Collection { + id: string; + name: string; + description: string | null; + slug: string; + is_public: boolean; + created_at: string; +} + +interface Organization { + id: string; + name: string; + slug: string; + role: string; +} + +const UserProfile = () => { + const { userId, orgSlug } = useParams<{ userId: string; orgSlug?: string }>(); + const navigate = useNavigate(); + const { user: currentUser } = useAuth(); + const [userProfile, setUserProfile] = useState<UserProfile | null>(null); + + // Post states + const [publicPosts, setPublicPosts] = useState<any[]>([]); + const [hiddenPosts, setHiddenPosts] = useState<any[]>([]); + + const [collections, setCollections] = useState<Collection[]>([]); + const [organizations, setOrganizations] = useState<Organization[]>([]); + const [loading, setLoading] = useState(true); + const [activeTab, setActiveTab] = useState<'posts' | 'hidden' | 'pictures'>('posts'); + + const isOwnProfile = currentUser?.id === userId; + + useEffect(() => { + if (userId) { + fetchUserProfile(); + fetchUserPosts(); + fetchUserCollections(); + fetchUserOrganizations(); + } + }, [userId, currentUser]); + + const fetchUserProfile = async () => { + try { + const { data: profile, error: profileError } = await supabase + .from('profiles') + .select('*') + .eq('user_id', userId) + .maybeSingle(); + + if (profileError && profileError.code !== 'PGRST116') { + throw profileError; + } + + if (!profile) { + setUserProfile({ + id: userId!, + username: null, + display_name: `User ${userId!.slice(0, 8)}`, + bio: null, + avatar_url: null, + created_at: new Date().toISOString(), + }); + } else { + setUserProfile({ + id: profile.user_id, + username: profile.username, + display_name: profile.display_name || `User ${userId!.slice(0, 8)}`, + bio: profile.bio, + avatar_url: profile.avatar_url, + created_at: profile.created_at, + }); + } + } catch (error) { + console.error('Error fetching user profile:', error); + toast.error(translate('Failed to load user profile')); + navigate('/'); + } + }; + + const fetchUserCollections = async () => { + try { + const { data, error } = await supabase + .from('collections') + .select('*') + .eq('user_id', userId) + .order('created_at', { ascending: false }); + + if (error) throw error; + setCollections(data || []); + } catch (error) { + console.error('Error fetching user collections:', error); + } + }; + + const fetchUserOrganizations = async () => { + try { + const { data, error } = await supabase + .from('user_organizations') + .select(` + role, + organizations ( + id, + name, + slug + ) + `) + .eq('user_id', userId); + + if (error) throw error; + + const orgs = data?.map(item => ({ + id: (item.organizations as any).id, + name: (item.organizations as any).name, + slug: (item.organizations as any).slug, + role: item.role + })) || []; + + setOrganizations(orgs); + } catch (error) { + console.error('Error fetching user organizations:', error); + } + }; + + const fetchUserPosts = async () => { + try { + setLoading(true); + + let query = supabase + .from('posts') + .select(` + *, + pictures ( + id, + image_url, + thumbnail_url, + type, + meta, + description, + likes_count, + visible, + is_selected + ) + `) + .eq('user_id', userId) + .order('created_at', { ascending: false }); + + const { data: posts, error } = await query; + + if (error) throw error; + + // Transform posts for Grid + const transformedPosts = (posts || []).map((post: any) => { + // Find main picture (first one) + const mainPicture = post.pictures?.[0]; + + return { + id: post.id, + title: post.title, + description: post.description, + // Use thumbnail_url if available (videos), else image_url + image_url: mainPicture?.thumbnail_url || mainPicture?.image_url || '', + thumbnail_url: mainPicture?.thumbnail_url || mainPicture?.image_url || null, + type: normalizeMediaType(mainPicture?.type), + meta: mainPicture?.meta, + likes_count: 0, // aggregate likes count if needed, or just 0 for now + created_at: post.created_at, + user_id: post.user_id, + comments: [{ count: 0 }], // placeholder + settings: post.settings + }; + }).filter(p => p.image_url); // Filter out posts without media for now + + // Separate into Public/Listed vs Private (Hidden) + const publicAndListed = transformedPosts.filter(p => !p.settings?.visibility || p.settings.visibility !== 'private'); + const privateHidden = transformedPosts.filter(p => p.settings?.visibility === 'private'); + + setPublicPosts(publicAndListed); + setHiddenPosts(privateHidden); + + } catch (error) { + console.error('Error fetching user posts:', error); + toast.error(translate('Failed to load user posts')); + } finally { + setLoading(false); + } + }; + + if (loading) { + return ( + <div className="min-h-screen bg-background flex items-center justify-center"> + <div className="text-muted-foreground"><T>Loading profile...</T></div> + </div> + ); + } + + if (!userProfile) { + return ( + <div className="min-h-screen bg-background flex items-center justify-center"> + <div className="text-center"> + <div className="text-muted-foreground mb-4"><T>User not found</T></div> + <Link to="/"> + <Button><T>Back to Home</T></Button> + </Link> + </div> + </div> + ); + } + + return ( + <div className="min-h-screen bg-background pt-14"> + <div className="container mx-auto px-0 md:px-4 py-8 max-w-4xl"> + {/* Header */} + <div className="flex items-center justify-between mb-8"> + <Button variant="ghost" size="sm" onClick={() => navigate('/')}> + <ArrowLeft className="h-4 w-4 mr-2" /> + <T>Back to feed</T> + </Button> + <ThemeToggle /> + </div> + + {/* Instagram-style Profile Layout */} + <div className="space-y-8"> + {/* Profile Header - Instagram Style */} + <div className="flex flex-col md:flex-row gap-8 items-start"> + {/* Profile Picture */} + <div className="flex-shrink-0 mx-auto md:mx-0"> + <div className="w-32 h-32 md:w-40 md:h-40 bg-gradient-primary rounded-full flex items-center justify-center"> + {userProfile.avatar_url ? ( + <img + src={userProfile.avatar_url} + alt={userProfile.display_name || 'User avatar'} + className="w-full h-full rounded-full object-cover" + /> + ) : ( + <User className="h-16 w-16 md:h-20 md:w-20 text-white" /> + )} + </div> + </div> + + {/* Profile Info */} + <div className="flex-1 text-center md:text-left"> + <div className="flex flex-col md:flex-row md:items-center gap-4 mb-6"> + <h1 className="text-xl md:text-2xl font-light"> + {userProfile.username || userProfile.display_name?.replace(/\s+/g, '').toLowerCase() || `user${userId?.slice(0, 8)}`} + </h1> + + {isOwnProfile ? ( + <div className="flex gap-2 justify-center md:justify-start"> + <Link to="/profile"> + <Button variant="outline" size="sm" className="text-sm"> + <T>Edit Profile</T> + </Button> + </Link> + <Button + size="sm" + className="bg-primary hover:bg-primary/90 text-white" + onClick={() => navigate('/new')} + > + <Camera className="h-4 w-4 mr-2" /> + <T>Create Post</T> + </Button> + </div> + ) : ( + <div className="flex gap-2 justify-center md:justify-start"> + <Button size="sm" className="bg-blue-500 hover:bg-blue-600 text-white"> + <T>Follow</T> + </Button> + <Button variant="outline" size="sm"> + <T>Message</T> + </Button> + </div> + )} + </div> + + {/* Stats */} + <div className="flex justify-center md:justify-start gap-8 mb-6"> + <div className="text-center"> + <div className="font-semibold text-lg">{publicPosts.length + (isOwnProfile ? hiddenPosts.length : 0)}</div> + <div className="text-sm text-muted-foreground"><T>posts</T></div> + </div> + <div className="text-center"> + <div className="font-semibold text-lg">0</div> + <div className="text-sm text-muted-foreground"><T>followers</T></div> + </div> + <div className="text-center"> + <div className="font-semibold text-lg">0</div> + <div className="text-sm text-muted-foreground"><T>following</T></div> + </div> + </div> + + {/* Bio */} + <div className="space-y-1 max-w-md mx-auto md:mx-0"> + <div className="font-semibold">{userProfile.display_name}</div> + {userProfile.bio && ( + <div className="text-sm text-muted-foreground whitespace-pre-wrap">{userProfile.bio}</div> + )} + <div className="text-xs text-muted-foreground"> + <T>Joined</T> {new Date(userProfile.created_at).toLocaleDateString('en-US', { + month: 'long', + year: 'numeric' + })} + </div> + </div> + </div> + </div> + + {/* Highlights Section - Collections */} + <div className="border-t pt-6"> + <div className="flex gap-4 overflow-x-auto pb-2"> + {/* View All Collections Link */} + <Link + to={`/user/${userId}/collections`} + className="flex flex-col items-center gap-2 min-w-0 group" + > + <div className="w-16 h-16 rounded-full border-2 border-primary bg-gradient-primary flex items-center justify-center group-hover:scale-105 transition-transform"> + <ImageIcon className="h-6 w-6 text-white" /> + </div> + <span className="text-xs text-center group-hover:text-primary transition-colors"> + <T>Collections</T> ({collections.length}) + </span> + </Link> + + {/* New Collection Button - Only for own profile */} + {isOwnProfile && ( + <button + onClick={() => navigate('/collections/new')} + className="flex flex-col items-center gap-2 min-w-0 group" + > + <div className="w-16 h-16 rounded-full border-2 border-dashed border-muted-foreground/30 flex items-center justify-center bg-muted/50 group-hover:border-primary/50 group-hover:bg-primary/10 transition-colors"> + <Plus className="h-6 w-6 text-muted-foreground group-hover:text-primary" /> + </div> + <span className="text-xs text-muted-foreground group-hover:text-primary"><T>New</T></span> + </button> + )} + + {/* Recent Collections Preview */} + {collections.slice(0, 3).map((collection) => ( + <Link + key={collection.id} + to={`/collections/${userId}/${collection.slug}`} + className="flex flex-col items-center gap-2 min-w-0 group" + > + <div className="w-16 h-16 rounded-full border-2 border-primary/30 bg-gradient-to-br from-primary/20 to-primary/10 flex items-center justify-center group-hover:scale-105 transition-transform"> + <ImageIcon className="h-6 w-6 text-primary" /> + </div> + <span className="text-xs text-center max-w-[64px] truncate group-hover:text-primary transition-colors"> + {collection.name} + </span> + </Link> + ))} + + {/* Empty state when no collections and not own profile */} + {collections.length === 0 && !isOwnProfile && ( + <div className="flex flex-col items-center gap-2 min-w-0"> + <div className="w-16 h-16 rounded-full border-2 border-muted flex items-center justify-center bg-muted/50"> + <ImageIcon className="h-6 w-6 text-muted-foreground" /> + </div> + <span className="text-xs text-muted-foreground"><T>No collections</T></span> + </div> + )} + </div> + </div> + + {/* Organizations Section */} + {organizations.length > 0 && ( + <div className="border-t pt-6"> + <h3 className="text-sm font-semibold mb-4 px-4 md:px-0"><T>Organizations</T></h3> + <div className="flex gap-4 overflow-x-auto pb-2 px-4 md:px-0"> + {organizations.map((org) => ( + <Link + key={org.id} + to={`/org/${org.slug}`} + className="flex flex-col items-center gap-2 min-w-0 group" + > + <div className="w-16 h-16 rounded-full border-2 border-primary/30 bg-gradient-to-br from-primary/20 to-primary/10 flex items-center justify-center group-hover:scale-105 transition-transform"> + <span className="text-lg font-semibold text-primary"> + {org.name.charAt(0).toUpperCase()} + </span> + </div> + <div className="text-center"> + <span className="text-xs font-medium group-hover:text-primary transition-colors block max-w-[80px] truncate"> + {org.name} + </span> + <span className="text-[10px] text-muted-foreground capitalize"> + {org.role} + </span> + </div> + </Link> + ))} + </div> + </div> + )} + + {/* Pages Section */} + <div className="border-t p-2"> + <PageManager userId={userId!} isOwnProfile={isOwnProfile} orgSlug={orgSlug} /> + </div> + + {/* Tab Navigation */} + <div className="border-t"> + <div className="flex justify-center"> + <div className="flex"> + <button + onClick={() => setActiveTab('posts')} + className={`flex items-center gap-1 px-6 py-3 text-sm font-medium ${activeTab === 'posts' + ? 'border-t-2 border-foreground' + : 'border-t-2 border-transparent text-muted-foreground hover:text-foreground' + }`} + > + <div className="w-3 h-3 grid grid-cols-3 gap-0.5"> + {[...Array(9)].map((_, i) => ( + <div key={i} className="w-1 h-1 bg-current rounded-sm" /> + ))} + </div> + <span className="hidden md:inline"><T>POSTS</T></span> + </button> + + {/* Hidden tab - only visible for own profile */} + {isOwnProfile && ( + <button + onClick={() => setActiveTab('hidden')} + className={`flex items-center gap-1 px-6 py-3 text-sm font-medium ${activeTab === 'hidden' + ? 'border-t-2 border-foreground' + : 'border-t-2 border-transparent text-muted-foreground hover:text-foreground' + }`} + > + <EyeOff className="w-3 h-3" /> + <span className="hidden md:inline"><T>HIDDEN</T></span> + </button> + )} + + {/* Pictures tab - all pictures */} + <button + onClick={() => setActiveTab('pictures')} + className={`flex items-center gap-1 px-6 py-3 text-sm font-medium ${activeTab === 'pictures' + ? 'border-t-2 border-foreground' + : 'border-t-2 border-transparent text-muted-foreground hover:text-foreground' + }`} + > + <ImageIcon className="w-3 h-3" /> + <span className="hidden md:inline"><T>PICTURES</T></span> + </button> + </div> + </div> + </div> + + {/* Photos Grid - Using PhotoGrid with customPictures */} + <div> + <PhotoGrid + customPictures={activeTab === 'posts' ? publicPosts : hiddenPosts} + customLoading={loading} + isOwner={isOwnProfile} + navigationSource="user" + navigationSourceId={userId} + /> + {isOwnProfile && activeTab === 'posts' && publicPosts.length === 0 && !loading && ( + <div className="text-center mt-8"> + <Button + className="bg-primary hover:bg-primary/90 text-white" + onClick={() => navigate('/new')} + > + <Camera className="h-4 w-4 mr-2" /> + <T>Create Your First Post</T> + </Button> + </div> + )} + </div> + + {/* UserPictures Component */} + {activeTab === 'pictures' && ( + <div className="mt-4"> + <UserPictures userId={userId!} isOwner={isOwnProfile} /> + </div> + )} + </div> + </div> + </div> + ); +}; + +export default UserProfile; \ No newline at end of file diff --git a/packages/ui/src/pages/VersionMap.tsx b/packages/ui/src/pages/VersionMap.tsx new file mode 100644 index 00000000..96bc139d --- /dev/null +++ b/packages/ui/src/pages/VersionMap.tsx @@ -0,0 +1,642 @@ +import { useState, useEffect, useCallback } from "react"; +import { useParams, useNavigate } from "react-router-dom"; +import { ReactFlow, Node, Edge, Background, Controls, MiniMap, useNodesState, useEdgesState, NodeProps, EdgeProps, getBezierPath, BaseEdge, EdgeLabelRenderer, Handle, Position } from "@xyflow/react"; +import { supabase } from "@/integrations/supabase/client"; +import { Button } from "@/components/ui/button"; +import { ArrowLeft, Wand2, Trash2, Edit3, Check } from "lucide-react"; +import { toast } from "sonner"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, +} from "@/components/ui/alert-dialog"; + +import "@xyflow/react/dist/style.css"; + +const ENABLE_GRAPH_DEBUG = false; + +interface Picture { + id: string; + title: string; + description: string | null; + image_url: string; + created_at: string; + user_id: string; + parent_id: string | null; + is_selected: boolean; +} + +interface VersionNodeData { + id: string; + image_url: string; + title: string; + created_at: string; + isGenerated: boolean; + isCurrent: boolean; + isSelected: boolean; + onDelete?: (id: string, e: React.MouseEvent) => void; + onEdit?: (id: string, e: React.MouseEvent) => void; +} + +// Custom pipe edge component +function PipeEdge(props: EdgeProps) { + const { id, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition } = props; + + const [edgePath] = getBezierPath({ + sourceX, + sourceY, + sourcePosition, + targetX, + targetY, + targetPosition, + }); + + return ( + <> + {/* Base pipe (thickest, darkest) */} + <BaseEdge + id={id} + path={edgePath} + style={{ + stroke: '#475569', + strokeWidth: 12, + strokeLinecap: 'round', + }} + /> + {/* Middle pipe layer */} + <BaseEdge + id={`${id}-middle`} + path={edgePath} + style={{ + stroke: '#64748b', + strokeWidth: 8, + strokeLinecap: 'round', + }} + /> + {/* Top pipe highlight */} + <BaseEdge + id={`${id}-highlight`} + path={edgePath} + style={{ + stroke: '#94a3b8', + strokeWidth: 4, + strokeLinecap: 'round', + }} + /> + </> + ); +} + +// Custom node component for version thumbnails +function VersionNode({ data }: { data: VersionNodeData }) { + const navigate = useNavigate(); + + const handleWizardClick = (e: React.MouseEvent) => { + e.stopPropagation(); // Prevent navigation to post + + // Store the image data in sessionStorage for the wizard using the same format as MagicWizardButton + // The current image should be the parent of any new versions created + const imageData = { + id: data.id, + src: data.image_url, + title: data.title, + selected: true, + isGenerated: false, + realDatabaseId: data.id, // The current image ID - this will be the parent + parentForNewVersions: data.id // Explicitly set this image as parent for new versions + }; + + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] Storing image data for wizard (current image as parent):', imageData); + sessionStorage.setItem('wizardInitialImage', JSON.stringify(imageData)); + + // Navigate to wizard + navigate('/wizard'); + }; + + return ( + <div className="relative group"> + {/* React Flow Handles for connections */} + {/* Every node needs a target handle (except root) */} + <Handle + type="target" + position={Position.Top} + id="top" + style={{ background: '#64748b', width: 8, height: 8 }} + /> + + {/* Every node needs a source handle for potential children */} + <Handle + type="source" + position={Position.Bottom} + id="bottom" + style={{ + background: '#64748b', + width: 8, + height: 8, + left: '25%' // Position pipe handle to the left + }} + /> + + {/* Wizard Handle - Bottom side */} + <Handle + type="source" + position={Position.Bottom} + id="wizard" + style={{ + background: '#8b5cf6', + width: 12, + height: 12, + borderRadius: '50%', + border: '2px solid white', + left: '75%', // Position it to the right of center + zIndex: 10, + bottom: '-8px' // Move it further out to avoid clipping + }} + onClick={handleWizardClick} + /> + + {/* Pipe connectors - visual only */} + {data.isGenerated && ( + <div className="absolute -top-3 left-1/2 transform -translate-x-1/2 w-5 h-5 bg-slate-600 rounded-full border-2 border-slate-400 shadow-md"></div> + )} + {!data.isGenerated && ( + <div className="absolute -bottom-3 left-1/2 transform -translate-x-1/2 w-5 h-5 bg-slate-600 rounded-full border-2 border-slate-400 shadow-md"></div> + )} + + {/* Action buttons - appear on hover */} + <div className="absolute top-1 left-1 opacity-0 group-hover:opacity-100 transition-opacity z-20 flex gap-1"> + <Button + size="sm" + onClick={(e) => data.onEdit?.(data.id, e)} + className="w-5 h-5 p-0 bg-blue-600 hover:bg-blue-700 rounded-full shadow-lg" + title="Edit version" + > + <Edit3 className="w-2.5 h-2.5 text-white" /> + </Button> + <Button + size="sm" + onClick={(e) => data.onDelete?.(data.id, e)} + className="w-5 h-5 p-0 bg-red-600 hover:bg-red-700 rounded-full shadow-lg" + title="Delete version" + > + <Trash2 className="w-2.5 h-2.5 text-white" /> + </Button> + </div> + + {/* Wizard button - appears on hover */} + <div className="absolute -bottom-3 right-1 opacity-0 group-hover:opacity-100 transition-opacity z-20"> + <Button + size="sm" + onClick={handleWizardClick} + className="w-6 h-6 p-0 bg-primary hover:bg-primary/80 rounded-full shadow-lg" + title="Open AI Wizard with this image" + > + <Wand2 className="w-3 h-3 text-white" /> + </Button> + </div> + + <div + className={`bg-card border-2 ${data.isSelected ? 'border-primary ring-2 ring-primary/20' : 'border-border'} rounded-lg p-2 cursor-pointer hover:border-primary transition-colors shadow-lg relative`} + onClick={() => navigate(`/post/${data.id}`)} + style={{ width: 120, height: 120 }} + > + {data.isCurrent && ( + <div className="absolute top-1 right-1 bg-green-600 text-white text-[10px] px-1 py-0.5 rounded font-medium leading-none z-10 shadow-sm"> + Current + </div> + )} + + {/* Selected indicator - top left corner */} + {data.isSelected && ( + <div className="absolute top-1 left-1 bg-primary text-primary-foreground text-[10px] px-1 py-0.5 rounded font-medium leading-none flex items-center z-10 shadow-sm"> + <Check className="w-2.5 h-2.5 mr-0.5" /> + Selected + </div> + )} + + <img + src={data.image_url} + alt={data.title} + className="w-full h-16 object-cover rounded mb-1" + /> + <div className="text-xs font-medium truncate">{data.title}</div> + <div className="text-xs text-muted-foreground flex items-center justify-between"> + <span className="text-[10px] opacity-70"> + {new Date(data.created_at).toLocaleDateString('en-US', { + month: 'numeric', + day: 'numeric' + })} + </span> + <Wand2 className="w-3 h-3 text-muted-foreground opacity-50 group-hover:opacity-100 transition-opacity" /> + </div> + </div> + </div> + ); +} + +const nodeTypes = { + version: VersionNode, +}; + +const edgeTypes = { + pipe: PipeEdge, +}; + +const VersionMap = () => { + const { id } = useParams<{ id: string }>(); + const navigate = useNavigate(); + const [loading, setLoading] = useState(true); + const [versions, setVersions] = useState<Picture[]>([]); + const [nodes, setNodes, onNodesChange] = useNodesState([]); + const [edges, setEdges, onEdgesChange] = useEdgesState([]); + const [allUserPictures, setAllUserPictures] = useState<Picture[]>([]); + const [showDeleteDialog, setShowDeleteDialog] = useState(false); + const [versionToDelete, setVersionToDelete] = useState<Picture | null>(null); + const [descendantsToDelete, setDescendantsToDelete] = useState<Picture[]>([]); + + useEffect(() => { + if (id) { + fetchVersions(); + } + }, [id]); + + const fetchVersions = async () => { + if (!id) { + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] No ID provided'); + return; + } + + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] Fetching versions for ID:', id); + + try { + // First get the current picture to determine the parent + const { data: currentPicture, error: currentError } = await supabase + .from('pictures') + .select('*') + .eq('id', id) + .single(); + + if (currentError) throw currentError; + + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] Current picture:', currentPicture); + + // Fast approach: Get ALL pictures for this user, then filter in memory + // This is much faster than multiple recursive queries + const { data: allUserPictures, error } = await supabase + .from('pictures') + .select('*') + .eq('user_id', currentPicture.user_id) + .order('created_at', { ascending: true }); + + if (error) throw error; + + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] Fetched all user pictures:', allUserPictures?.length); + + // Find the complete version tree in memory + const findVersionTree = (pictures: Picture[], startId: string): Picture[] => { + const pictureMap = new Map(pictures.map(p => [p.id, p])); + const result: Picture[] = []; + const visited = new Set<string>(); + + // Find the root by walking up + let rootId = startId; + let current = pictureMap.get(startId); + while (current?.parent_id && pictureMap.has(current.parent_id)) { + rootId = current.parent_id; + current = pictureMap.get(current.parent_id); + } + + // Collect all descendants of the root + const collectDescendants = (nodeId: string) => { + if (visited.has(nodeId)) return; + + const node = pictureMap.get(nodeId); + if (!node) return; + + visited.add(nodeId); + result.push(node); + + // Find all children + pictures + .filter(p => p.parent_id === nodeId) + .forEach(child => collectDescendants(child.id)); + }; + + collectDescendants(rootId); + return result; + }; + + const versionsData = findVersionTree(allUserPictures || [], currentPicture.id); + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] Version tree found:', versionsData.length, 'versions'); + + setVersions(versionsData || []); + setAllUserPictures(allUserPictures || []); + createNodesAndEdges(versionsData || [], id); + } catch (error) { + console.error('🔧 [VersionMap] Error fetching versions:', error); + toast.error('Failed to load version map'); + } finally { + setLoading(false); + } + }; + + const handleDeleteVersion = (versionId: string, e: React.MouseEvent) => { + e.stopPropagation(); + + const version = versions.find(v => v.id === versionId); + if (!version) return; + + // Find all descendants that will be deleted + const findDescendants = (parentId: string): Picture[] => { + const descendants: Picture[] = []; + const children = allUserPictures.filter(p => p.parent_id === parentId); + + children.forEach(child => { + descendants.push(child); + descendants.push(...findDescendants(child.id)); + }); + + return descendants; + }; + + const descendants = findDescendants(versionId); + + setVersionToDelete(version); + setDescendantsToDelete(descendants); + setShowDeleteDialog(true); + }; + + const confirmDelete = async () => { + if (!versionToDelete) return; + + try { + // Delete all descendants first, then the parent + const allToDelete = [versionToDelete, ...descendantsToDelete]; + + for (const item of allToDelete) { + // Delete from storage + if (item.image_url?.includes('supabase.co/storage/')) { + const urlParts = item.image_url.split('/'); + const fileName = urlParts[urlParts.length - 1]; + const bucketPath = `${item.user_id}/${fileName}`; + + await supabase.storage + .from('pictures') + .remove([bucketPath]); + } + } + + // Delete from database (cascade will handle relationships) + const { error } = await supabase + .from('pictures') + .delete() + .in('id', allToDelete.map(item => item.id)); + + if (error) throw error; + + const totalDeleted = allToDelete.length; + toast.success(`Deleted ${totalDeleted} version${totalDeleted === 1 ? '' : 's'} successfully`); + + // If we deleted the current version, navigate back + if (versionToDelete.id === id) { + navigate('/'); + } else { + // Refresh the version map + fetchVersions(); + } + + setShowDeleteDialog(false); + setVersionToDelete(null); + setDescendantsToDelete([]); + } catch (error) { + console.error('Error deleting version:', error); + toast.error('Failed to delete version'); + } + }; + + const handleEditVersion = (versionId: string, e: React.MouseEvent) => { + e.stopPropagation(); + navigate(`/post/${versionId}`); + }; + + const createNodesAndEdges = (versionsData: Picture[], currentId: string) => { + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] createNodesAndEdges called with:', { + versionsCount: versionsData.length, + currentId, + versionsData + }); + + const nodes: Node[] = []; + const edges: Edge[] = []; + + if (versionsData.length === 0) { + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] No versions data - returning empty nodes/edges'); + setNodes([]); + setEdges([]); + return; + } + + // Build a tree structure to handle multi-level hierarchies + type EnrichedPicture = Picture & { children: EnrichedPicture[], level: number }; + + const buildTree = (versions: Picture[]): { + nodeMap: Map<string, EnrichedPicture>, + roots: EnrichedPicture[] + } => { + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] Building tree from versions:', versions); + const nodeMap = new Map<string, EnrichedPicture>(); + + // Initialize all nodes + versions.forEach(version => { + nodeMap.set(version.id, { ...version, children: [] as EnrichedPicture[], level: 0 }); + }); + + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] Initialized nodeMap with', nodeMap.size, 'nodes'); + + // Build parent-child relationships and calculate levels + const roots: EnrichedPicture[] = []; + + versions.forEach(version => { + const node = nodeMap.get(version.id)!; + + if (version.parent_id) { + const parent = nodeMap.get(version.parent_id); + if (parent) { + parent.children.push(node); + node.level = parent.level + 1; + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] Added child', version.id, 'to parent', version.parent_id, 'at level', node.level); + } else { + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] Parent not found for', version.id, 'parent_id:', version.parent_id); + } + } else { + roots.push(node); + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] Added root node:', version.id); + } + }); + + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] Tree built - roots:', roots.length, 'total nodes:', nodeMap.size); + return { nodeMap, roots }; + }; + + const { nodeMap, roots } = buildTree(versionsData); + + // Position nodes using a tree layout algorithm + const positionNode = (node: EnrichedPicture, x: number, y: number) => { + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] Positioning node:', node.id, 'at', { x, y }, 'level:', node.level); + + // Create the node + nodes.push({ + id: node.id, + type: 'version', + position: { x, y }, + data: { + ...node, + isGenerated: !!node.parent_id, + isCurrent: node.id === currentId, + isSelected: node.is_selected, + onDelete: handleDeleteVersion, + onEdit: handleEditVersion, + }, + }); + + // Position children + if (node.children.length > 0) { + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] Node', node.id, 'has', node.children.length, 'children'); + const childSpacing = 180; + const totalWidth = (node.children.length - 1) * childSpacing; + const startX = x - totalWidth / 2; + + node.children.forEach((child, index) => { + const childX = startX + (index * childSpacing); + const childY = y + 180; // Vertical spacing between levels + + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] Creating edge from', node.id, 'to', child.id); + + // Create edge from parent to child + edges.push({ + id: `${node.id}-${child.id}`, + source: node.id, + sourceHandle: 'bottom', + target: child.id, + targetHandle: 'top', + type: 'default', + style: { + stroke: '#475569', + strokeWidth: 10, + strokeLinecap: 'round', + filter: 'drop-shadow(0 2px 4px rgba(0,0,0,0.2))' + }, + }); + + // Recursively position child and its descendants + positionNode(child, childX, childY); + }); + } + }; + + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] Starting to position', roots.length, 'root nodes'); + + // Position root nodes and their trees + const rootSpacing = 250; + const totalRootWidth = (roots.length - 1) * rootSpacing; + const startX = -totalRootWidth / 2; + + roots.forEach((root, index) => { + const rootX = startX + (index * rootSpacing); + if (ENABLE_GRAPH_DEBUG) console.log('🔧 [VersionMap] Positioning root', root.id, 'at x:', rootX); + positionNode(root, rootX, 0); + }); + + if (ENABLE_GRAPH_DEBUG) { + console.log('🔧 [VersionMap] Final result - nodes:', nodes.length, 'edges:', edges.length); + console.log('🔧 [VersionMap] Nodes:', nodes); + console.log('🔧 [VersionMap] Edges:', edges); + } + + setNodes(nodes); + setEdges(edges); + }; + + if (loading) { + return ( + <div className="min-h-screen bg-background pt-8 flex items-center justify-center"> + <div className="text-muted-foreground">Loading version map...</div> + </div> + ); + } + + return ( + <div className="min-h-screen bg-background pt-8"> + <div className="p-4"> + <Button + variant="ghost" + size="sm" + onClick={() => navigate(-1)} + className="mb-4" + > + <ArrowLeft className="h-4 w-4 mr-2" /> + Back + </Button> + + <h1 className="text-2xl font-bold mb-4">Version Map</h1> + + <div className="h-[80vh] border rounded-lg"> + <ReactFlow + nodes={nodes} + edges={edges} + onNodesChange={onNodesChange} + onEdgesChange={onEdgesChange} + nodeTypes={nodeTypes} + fitView + fitViewOptions={{ padding: 0.2 }} + > + <Background /> + <Controls /> + <MiniMap /> + </ReactFlow> + </div> + </div> + + {/* Delete Confirmation Dialog */} + <AlertDialog open={showDeleteDialog} onOpenChange={setShowDeleteDialog}> + <AlertDialogContent> + <AlertDialogHeader> + <AlertDialogTitle>Delete Version</AlertDialogTitle> + <AlertDialogDescription> + Are you sure you want to delete "{versionToDelete?.title}"? + {descendantsToDelete.length > 0 && ( + <> + <br /><br /> + This will also delete {descendantsToDelete.length} child version{descendantsToDelete.length === 1 ? '' : 's'}: + <ul className="mt-2 ml-4 list-disc"> + {descendantsToDelete.map(d => ( + <li key={d.id}>{d.title}</li> + ))} + </ul> + </> + )} + <br /><br /> + This action cannot be undone. + </AlertDialogDescription> + </AlertDialogHeader> + <AlertDialogFooter> + <AlertDialogCancel>Cancel</AlertDialogCancel> + <AlertDialogAction + onClick={confirmDelete} + className="bg-destructive text-destructive-foreground hover:bg-destructive/90" + > + Delete {versionToDelete && descendantsToDelete.length > 0 ? `${1 + descendantsToDelete.length} versions` : 'version'} + </AlertDialogAction> + </AlertDialogFooter> + </AlertDialogContent> + </AlertDialog> + </div> + ); +}; + +export default VersionMap; diff --git a/packages/ui/src/pages/VideoFeedPlayground.tsx b/packages/ui/src/pages/VideoFeedPlayground.tsx new file mode 100644 index 00000000..2e28c2ba --- /dev/null +++ b/packages/ui/src/pages/VideoFeedPlayground.tsx @@ -0,0 +1,563 @@ +/** + * Video Feed Playground + * TikTok-style infinite scroll video player using our database videos + */ + +import React, { useEffect, useState, useCallback, useRef } from 'react'; +import { useNavigate, useParams } from 'react-router-dom'; +import { VideoFeed } from '@/player/components/VideoFeed'; +import { VideoItem } from '@/player/types'; +import { fetchMediaItems, MediaItem } from '@/utils/mediaUtils'; +import { supabase } from '@/integrations/supabase/client'; +import { Button } from '@/components/ui/button'; +import { ArrowLeft } from 'lucide-react'; +import { useAuth } from '@/hooks/useAuth'; +import { toast } from "sonner"; +import { usePostNavigation } from '@/hooks/usePostNavigation'; + +// Mock data generators for TikTok features we don't have +const SAMPLE_AVATARS = [ + 'https://images.unsplash.com/photo-1535713875002-d1d0cf377fde?w=100&h=100&fit=crop&crop=face', + 'https://images.unsplash.com/photo-1494790108755-2616b612b47c?w=100&h=100&fit=crop&crop=face', + 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=100&h=100&fit=crop&crop=face', + 'https://images.unsplash.com/photo-1517841905240-472988babdf9?w=100&h=100&fit=crop&crop=face', + 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=100&h=100&fit=crop&crop=face' +]; + +const SAMPLE_MUSIC = [ + { + id: 'music_1', + title: 'Original Sound', + playUrl: '', + coverMedium: SAMPLE_AVATARS[0], + authorName: 'Original Audio' + }, + { + id: 'music_2', + title: 'Trending Sound', + playUrl: '', + coverMedium: SAMPLE_AVATARS[1], + authorName: 'Popular Track' + } +]; + +/** + * Transform our MediaItem to TikTok's VideoItem format + */ +const transformMediaToVideoItem = (media: MediaItem, userProfiles: Record<string, any>): VideoItem => { + const userProfile = userProfiles[media.user_id] || {}; + const isVideo = media.type === 'video'; + + // Extract hashtags from description + const hashtags = media.description?.match(/#\w+/g) || []; + + // Get display name with fallback priority: display_name > username > 'User' + const displayName = userProfile.display_name + || userProfile.username + || `User ${media.user_id.slice(0, 8)}`; + + const uniqueId = userProfile.username + || media.user_id.slice(0, 8); + + return { + id: media.id, + author: { + nickname: displayName, + uniqueId: uniqueId, + id: media.user_id, + secUid: `sec_${media.user_id}`, + // Use actual avatar or fallback to a consistent default based on user_id + avatarThumb: userProfile.avatar_url || SAMPLE_AVATARS[parseInt(media.user_id.slice(-2), 16) % SAMPLE_AVATARS.length], + verified: false + }, + video: { + width: isVideo ? (media.meta?.width || 720) : 720, + height: isVideo ? (media.meta?.height || 1280) : 1280, + duration: isVideo ? (media.meta?.duration || 30) : 30, + ratio: '9:16', + playAddr: media.url, // This will now correctly be either image_url or video_url + downloadAddr: media.url, + cover: media.thumbnail_url || media.url, + dynamicCover: media.thumbnail_url || media.url + }, + stats: { + diggCount: media.likes_count || 0, // Real likes count + playCount: Math.floor(Math.random() * 10000) + (media.likes_count * 10), // Mock, but proportional + shareCount: Math.floor(media.comments_count / 2) + Math.floor(Math.random() * 50), // Mock, but proportional + commentCount: media.comments_count || 0, // Real comments count + collectCount: Math.floor(media.likes_count / 5) + Math.floor(Math.random() * 10) // Mock, but proportional + }, + desc: media.description || media.title || 'Check out this content! ' + hashtags.slice(0, 3).join(' '), + createTime: new Date(media.created_at).getTime(), + isPinnedItem: false, + // Mock data for TikTok features we don't support yet + music: SAMPLE_MUSIC[Math.floor(Math.random() * SAMPLE_MUSIC.length)], + challenges: hashtags.slice(0, 2).map((tag, idx) => ({ + id: `challenge_${idx}`, + title: tag.replace('#', ''), + desc: `Join the ${tag} challenge` + })), + effectStickers: [] // No effects for now + }; +}; + +export default function VideoFeedPlayground() { + const navigate = useNavigate(); + const { user } = useAuth(); + const { id } = useParams<{ id?: string }>(); + const { navigationData, setNavigationData } = usePostNavigation(); + const [videos, setVideos] = useState<VideoItem[]>([]); + const [loading, setLoading] = useState(true); + const [hasMore, setHasMore] = useState(true); + const [currentPage, setCurrentPage] = useState(0); + const [userProfiles, setUserProfiles] = useState<Record<string, any>>({}); + const [likedVideos, setLikedVideos] = useState<Set<string>>(new Set()); + const [error, setError] = useState<string | null>(null); + + // Use a ref to hold the latest userProfiles to avoid stale state in callbacks + const userProfilesRef = useRef(userProfiles); + userProfilesRef.current = userProfiles; + + const VIDEOS_PER_PAGE = 10; + + /** + * Fetch user profiles for video authors + * This function now only fetches and returns new profiles, and updates state separately. + */ + const fetchUserProfiles = useCallback(async (userIds: string[]) => { + try { + // Filter out user IDs that are already in our cache + const uniqueUserIds = [...new Set(userIds)].filter(id => !userProfilesRef.current[id]); + if (uniqueUserIds.length === 0) return {}; + + const { data, error } = await supabase + .from('profiles') + .select('user_id, avatar_url, display_name, username') + .in('user_id', uniqueUserIds); + + if (error && error.code !== 'PGRST116') { + throw error; + } + + const profileMap: Record<string, any> = {}; + data?.forEach(profile => { + profileMap[profile.user_id] = profile; + }); + + return profileMap; + } catch (err) { + console.error('Error fetching user profiles:', err); + return {}; + } + }, []); + + /** + * Check which videos the current user has liked + */ + const checkLikedVideos = useCallback(async (videoIds: string[]) => { + if (!user) return; + try { + const { data, error } = await supabase + .from('likes') + .select('picture_id') + .in('picture_id', videoIds) + .eq('user_id', user.id); + + if (error) throw error; + + const likedIds = new Set(data.map(like => like.picture_id)); + setLikedVideos(prev => new Set([...prev, ...likedIds])); + } catch (err) { + console.error('Error checking liked videos:', err); + } + }, [user]); + + /** + * Load initial videos + */ + const loadInitialVideos = useCallback(async () => { + try { + setLoading(true); + setError(null); + + // If navigation data is available from PhotoGrid, use it + if (navigationData && navigationData.source === 'photogrid' && navigationData.posts.length > 0) { + const videoPosts = navigationData.posts.filter(p => p.type === 'video' || p.type === 'mux-video' || p.type === 'video-intern'); + const userIds = videoPosts.map(p => p.user_id); + const newProfiles = await fetchUserProfiles(userIds); + setUserProfiles(prev => ({ ...prev, ...newProfiles })); + + const allProfiles = { ...userProfilesRef.current, ...newProfiles }; + const transformed = videoPosts.map(post => { + // Adapt the post object from PostNavigationData to the MediaItem format + // The key difference is mapping `image_url` to `url`. + const mediaItem: MediaItem = { + ...post, + url: post.image_url, + type: post.type as 'video', + comments_count: post.comments_count || 0, + }; + return transformMediaToVideoItem(mediaItem, allProfiles); + }); + + // Find the index of the video specified by the URL ID + const startIndex = id ? transformed.findIndex(v => v.id === id) : 0; + + // Reorder the videos to start with the selected one + if (startIndex > 0) { + const reordered = [ + ...transformed.slice(startIndex), + ...transformed.slice(0, startIndex) + ]; + setVideos(reordered); + } else { + setVideos(transformed); + } + + await checkLikedVideos(transformed.map(v => v.id)); + setHasMore(false); // No infinite scroll when coming from a grid + setLoading(false); + return; + } + + // Fallback to fetching from DB if no navigation data + let initialMediaItems: MediaItem[] = []; + + // If an ID is present in the URL, fetch that video first + if (id) { + const { data, error } = await supabase + .from('pictures') + .select('*') + .eq('id', id) + .single(); + + if (error) { + console.error('Error fetching specific video:', error); + setError('Could not load the requested video.'); + // Continue to load the regular feed + } else if (data) { + // Manually construct a partial MediaItem to ensure the URL is correctly assigned + const isMuxVideo = data.type === 'mux-video'; + const isLegacyVideo = data.type === 'video'; + + let url = data.image_url; + if (isMuxVideo && data.meta?.mux_playback_id) { + url = `https://stream.mux.com/${data.meta.mux_playback_id}.m3u8`; + } else if (isLegacyVideo) { + url = data.video_url; + } + + initialMediaItems.push({ + ...data, + url: url, + } as MediaItem); + } + } + + // Fetch more media items to fill the page + const mediaItems = await fetchMediaItems({ + limit: VIDEOS_PER_PAGE, + includePrivate: false, + // Exclude the video we might have already fetched + excludeIds: initialMediaItems.map(item => item.id) + }); + + // Combine the specific video with the rest of the feed + const allMediaItems = [...initialMediaItems, ...mediaItems.filter(item => !initialMediaItems.find(i => i.id === item.id))]; + + // Filter to only videos + const videoItems = allMediaItems.filter(item => item.type === 'video'); + + if (videoItems.length === 0) { + setError('No videos found. Please upload some videos to test the player.'); + setLoading(false); + return; + } + + // Fetch user profiles and update state + const userIds = videoItems.map(v => v.user_id); + const newProfiles = await fetchUserProfiles(userIds); + setUserProfiles(prev => ({ ...prev, ...newProfiles })); + + // Check for liked status + await checkLikedVideos(videoItems.map(v => v.id)); + + // Use the latest profiles for transformation + const allProfiles = { ...userProfilesRef.current, ...newProfiles }; + const transformedVideos = videoItems.map(item => + transformMediaToVideoItem(item, allProfiles) + ); + + setVideos(transformedVideos); + setHasMore(videoItems.length >= VIDEOS_PER_PAGE); + setCurrentPage(1); + + // Set initial URL to the first video if not already on a specific video URL + if (transformedVideos.length > 0 && !id) { + navigate(`/video-feed/${transformedVideos[0].id}`, { replace: true }); + } + } catch (err) { + console.error('Error loading videos:', err); + setError('Failed to load videos. Please try again.'); + } finally { + setLoading(false); + } + }, [id, navigationData, fetchUserProfiles, checkLikedVideos, navigate]); + + /** + * Load more videos for infinite scroll + */ + const loadMoreVideos = useCallback(async () => { + if (loading || !hasMore) return; + + try { + setLoading(true); + + const mediaItems = await fetchMediaItems({ + limit: VIDEOS_PER_PAGE, + includePrivate: false, + offset: currentPage * VIDEOS_PER_PAGE + }); + + const videoItems = mediaItems.filter(item => item.type === 'video'); + + if (videoItems.length < VIDEOS_PER_PAGE) { + setHasMore(false); + } + + // Fetch user profiles for new videos + const userIds = videoItems.map(v => v.user_id); + const newProfiles = await fetchUserProfiles(userIds); + setUserProfiles(prev => ({ ...prev, ...newProfiles })); + + // Check for liked status + await checkLikedVideos(videoItems.map(v => v.id)); + + // Transform to TikTok format + const allProfiles = { ...userProfilesRef.current, ...newProfiles }; + const transformedVideos = videoItems.map(item => + transformMediaToVideoItem(item, allProfiles) + ); + + setVideos(prev => { + const existingIds = new Set(prev.map(v => v.id)); + const newVideos = transformedVideos.filter(v => !existingIds.has(v.id)); + return [...prev, ...newVideos]; + }); + setCurrentPage(prev => prev + 1); + } catch (err) { + console.error('Error loading more videos:', err); + } finally { + setLoading(false); + } + }, [loading, hasMore, currentPage, fetchUserProfiles, checkLikedVideos]); + + // Load initial videos on mount + useEffect(() => { + // Only fetch videos if the list is empty. This prevents re-fetching when the URL + // changes due to scrolling in the feed. The `id` from `useParams` is still respected + // by `loadInitialVideos` on the first load. + if (videos.length === 0) { + loadInitialVideos(); + } + }, [loadInitialVideos, videos.length, navigationData]); + + // Clear navigation data on unmount + useEffect(() => { + return () => { + if (navigationData && navigationData.source === 'photogrid') { + setNavigationData(null); + } + }; + }, [navigationData, setNavigationData]); + + /** + * Handle video interactions + */ + const handleLike = useCallback(async (videoId: string) => { + if (!user) { + toast.error('Please sign in to like videos'); + return; + } + + const isLiked = likedVideos.has(videoId); + + if (isLiked) { + // UNLIKE LOGIC + try { + const { error } = await supabase + .from('likes') + .delete() + .eq('user_id', user.id) + .eq('picture_id', videoId); + + if (error) throw error; + + // Update state on success + setLikedVideos(prev => { + const newLiked = new Set(prev); + newLiked.delete(videoId); + return newLiked; + }); + setVideos(prevVideos => { + const newVideos = [...prevVideos]; + const videoIndex = newVideos.findIndex(v => v.id === videoId); + if (videoIndex !== -1) { + newVideos[videoIndex].stats.diggCount = Math.max(0, newVideos[videoIndex].stats.diggCount - 1); + } + return newVideos; + }); + + } catch (error) { + console.error('Error unliking video:', error); + toast.error('Failed to unlike video.'); + } + } else { + // LIKE LOGIC + try { + const { error } = await supabase + .from('likes') + .insert([{ user_id: user.id, picture_id: videoId }]); + + if (error) throw error; + + // Update state on success + setLikedVideos(prev => { + const newLiked = new Set(prev); + newLiked.add(videoId); + return newLiked; + }); + setVideos(prevVideos => { + const newVideos = [...prevVideos]; + const videoIndex = newVideos.findIndex(v => v.id === videoId); + if (videoIndex !== -1) { + newVideos[videoIndex].stats.diggCount++; + } + return newVideos; + }); + + } catch (error) { + if ((error as any).code === '23505') { + // This case means client state is out of sync with DB. + // The video is already liked in DB. Just update client state. + console.warn('Like already exists in DB, syncing client state.'); + setLikedVideos(prev => { + const newLiked = new Set(prev); + newLiked.add(videoId); + return newLiked; + }); + } else { + console.error('Error liking video:', error); + toast.error('Failed to like video.'); + } + } + } + }, [user, likedVideos]); + + const handleComment = (videoId: string) => { + console.log('Comment on video:', videoId); + // This is handled by the VideoFeed component now + }; + + const handleShare = (videoId: string) => { + const videoUrl = `${window.location.origin}/video/${videoId}`; + navigator.clipboard?.writeText(videoUrl).then(() => { + console.log('Video URL copied:', videoUrl); + }); + }; + + const handleFollow = (userId: string) => { + console.log('Follow user:', userId); + // TODO: Implement follow functionality + }; + + const handleAvatarClick = (userId: string) => { + if (userId) { + navigate(`/user/${userId}`); + } + }; + + const handleVideoChange = useCallback((index: number) => { + if (videos && videos[index]) { + const videoId = videos[index].id; + // Update URL without navigating away. `replace: true` avoids polluting browser history. + navigate(`/video-feed/${videoId}`, { replace: true }); + } + }, [navigate, videos]); + + if (error && videos.length === 0) { + return ( + <div className="min-h-screen bg-black flex flex-col items-center justify-center text-white p-4"> + <div className="max-w-md w-full text-center"> + <h1 className="text-2xl font-bold mb-4">Video Feed Playground</h1> + <div className="bg-red-900/20 border border-red-500 rounded-lg p-6 mb-6"> + <p className="text-red-200">{error}</p> + </div> + <div className="space-y-4"> + <Button + onClick={() => navigate('/new')} + className="w-full" + > + Upload a Video + </Button> + <Button + onClick={() => navigate('/')} + variant="outline" + className="w-full" + > + <ArrowLeft className="mr-2 h-4 w-4" /> + Back to Home + </Button> + </div> + </div> + </div> + ); + } + + if (loading && videos.length === 0) { + return ( + <div className="min-h-screen bg-black flex items-center justify-center"> + <div className="text-white text-center"> + <div className="animate-spin rounded-full h-12 w-12 border-b-2 border-white mx-auto mb-4"></div> + <p>Loading videos...</p> + </div> + </div> + ); + } + + return ( + <div className="relative h-screen w-full overflow-hidden bg-black"> + {/* Back button overlay */} + <div className="absolute top-4 left-4 z-50"> + <Button + onClick={() => navigate('/')} + variant="ghost" + size="icon" + className="bg-black/50 hover:bg-black/70 text-white rounded-full" + > + <ArrowLeft className="h-5 w-5" /> + </Button> + </div> + + + {/* Video Feed */} + <VideoFeed + videos={videos} + likedVideos={likedVideos} + onLoadMore={loadMoreVideos} + hasMore={hasMore} + loading={loading} + autoplay={true} + muted={true} + onVideoChange={handleVideoChange} + onLike={handleLike} + onComment={handleComment} + onShare={handleShare} + onFollow={handleFollow} + onAvatarClick={handleAvatarClick} + /> + + </div> + ); +} + diff --git a/packages/ui/src/pages/VideoGenPlayground.tsx b/packages/ui/src/pages/VideoGenPlayground.tsx new file mode 100644 index 00000000..3bee0f9e --- /dev/null +++ b/packages/ui/src/pages/VideoGenPlayground.tsx @@ -0,0 +1,298 @@ +import React, { useState, useRef } from "react"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Textarea } from "@/components/ui/textarea"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Alert, AlertDescription } from "@/components/ui/alert"; +import VideoCard from "@/components/VideoCard"; +import { toast } from "sonner"; +import { useAuth } from "@/hooks/useAuth"; +import { Loader2, AlertCircle, CheckCircle2, Image as ImageIcon, Upload } from "lucide-react"; +// Import from updated video-router +import { generateVideo, AVAILABLE_VIDEO_MODELS, VideoGenerationOptions } from "@/lib/video-router"; +import { ImagePickerDialog } from "@/components/widgets/ImagePickerDialog"; +import { supabase } from "@/integrations/supabase/client"; +import { VideoSettingsControls } from "@/components/video/VideoSettingsControls"; + +const VideoGenPlayground = () => { + const { user } = useAuth(); + const [prompt, setPrompt] = useState(""); + const [isGenerating, setIsGenerating] = useState(false); + const [generatedVideoUrl, setGeneratedVideoUrl] = useState<string | null>(null); + const [referenceImages, setReferenceImages] = useState<{ url: string, file?: File }[]>([]); + const [showImagePicker, setShowImagePicker] = useState(false); + + // New state for model and options + const [selectedModel, setSelectedModel] = useState<string>(() => { + return localStorage.getItem('video-gen-model') || AVAILABLE_VIDEO_MODELS[0].modelName; + }); + + const [videoOptions, setVideoOptions] = useState<VideoGenerationOptions>(() => { + const saved = localStorage.getItem('video-gen-options'); + return saved ? JSON.parse(saved) : {}; + }); + + // Persist settings + React.useEffect(() => { + localStorage.setItem('video-gen-model', selectedModel); + }, [selectedModel]); + + React.useEffect(() => { + localStorage.setItem('video-gen-options', JSON.stringify(videoOptions)); + }, [videoOptions]); + + const fileInputRef = useRef<HTMLInputElement>(null); + + const handleGenerate = async () => { + if (!prompt) { + toast.error("Please enter a prompt"); + return; + } + + setIsGenerating(true); + setGeneratedVideoUrl(null); + + try { + const imageInputs = []; + + for (const img of referenceImages) { + let base64 = ''; + let mimeType = ''; + + if (img.file) { + base64 = await new Promise<string>((resolve) => { + const reader = new FileReader(); + reader.onload = (e) => resolve((e.target?.result as string).split(',')[1]); + reader.readAsDataURL(img.file!); + }); + mimeType = img.file.type; + } else if (img.url) { + try { + const res = await fetch(img.url); + const blob = await res.blob(); + base64 = await new Promise<string>((resolve) => { + const reader = new FileReader(); + reader.onload = (e) => resolve((e.target?.result as string).split(',')[1]); + reader.readAsDataURL(blob); + }); + mimeType = blob.type; + } catch (e) { + console.error("Failed to fetch image from URL", e); + // Continue? or fail? + } + } + + if (base64) { + console.log(`[VideoGenPlayground] Image ${img.url} processed. Base64 length: ${base64.length}`); + imageInputs.push({ imageBytes: base64, mimeType }); + } else { + console.warn(`[VideoGenPlayground] Failed to get base64 for image ${img.url}`); + } + } + + toast.info(`Starting video generation with ${selectedModel}... This may take a minute.`); + + const result = await generateVideo(prompt, imageInputs.length > 0 ? imageInputs : undefined, selectedModel, videoOptions); + + if (result.videoUrl) { + setGeneratedVideoUrl(result.videoUrl); + toast.success("Video generated successfully!"); + } + + } catch (error: any) { + console.error("Video generation error:", error); + toast.error(`Generation failed: ${error.message}`); + } finally { + setIsGenerating(false); + } + }; + + const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => { + if (e.target.files && e.target.files[0]) { + if (referenceImages.length >= 3) { + toast.error("Max 3 reference images allowed"); + return; + } + const file = e.target.files[0]; + setReferenceImages(prev => [...prev, { url: URL.createObjectURL(file), file }]); + } + }; + + const handleImageSelect = async (pictureId: string) => { + setShowImagePicker(false); + if (referenceImages.length >= 3) { + toast.error("Max 3 reference images allowed"); + return; + } + + const { data, error } = await supabase + .from('pictures') + .select('image_url') + .eq('id', pictureId) + .single(); + + if (data) { + setReferenceImages(prev => [...prev, { url: data.image_url }]); + } + }; + + const removeImage = (index: number) => { + setReferenceImages(prev => prev.filter((_, i) => i !== index)); + }; + + return ( + <div className="container mx-auto p-6 space-y-6"> + <div className="space-y-2"> + <h1 className="text-3xl font-bold">Video Generation Playground</h1> + <p className="text-muted-foreground"> + Generate videos using Google Veo models. Configure detailed parameters below. + </p> + </div> + + <div className="grid grid-cols-1 lg:grid-cols-2 gap-6"> + <Card> + <CardHeader> + <CardTitle>Generation Settings</CardTitle> + <CardDescription>Configure your video generation</CardDescription> + </CardHeader> + <CardContent className="space-y-4"> + + <VideoSettingsControls + modelName={selectedModel} + onModelChange={setSelectedModel} + settings={videoOptions} + onSettingsChange={setVideoOptions} + disabled={isGenerating} + /> + + <div className="space-y-2"> + <Label>Prompt</Label> + <Textarea + placeholder="Describe the video you want to generate..." + value={prompt} + onChange={(e) => setPrompt(e.target.value)} + rows={4} + disabled={isGenerating} + /> + </div> + + <div className="space-y-2"> + <Label>Reference Images (Optional, Max 3)</Label> + <div className="space-y-4"> + <div className="grid grid-cols-3 gap-2"> + {referenceImages.map((img, idx) => ( + <div key={idx} className="relative aspect-video w-full overflow-hidden rounded-md border group"> + <img src={img.url} alt={`Reference ${idx + 1}`} className="object-cover w-full h-full" /> + <Button + variant="destructive" + size="icon" + className="absolute top-1 right-1 h-5 w-5 opacity-0 group-hover:opacity-100 transition-opacity" + onClick={() => removeImage(idx)} + disabled={isGenerating} + > + <AlertCircle className="h-3 w-3" /> + </Button> + </div> + ))} + {referenceImages.length < 3 && ( + <div className="aspect-video w-full border-2 border-dashed rounded-md flex items-center justify-center text-muted-foreground text-xs p-2"> + {3 - referenceImages.length} slots left + </div> + )} + </div> + + <div className="flex gap-2"> + <Button + variant="outline" + onClick={() => fileInputRef.current?.click()} + disabled={isGenerating || referenceImages.length >= 3} + > + <Upload className="mr-2 h-4 w-4" /> + Upload Image + </Button> + <Button + variant="outline" + onClick={() => setShowImagePicker(true)} + disabled={isGenerating || referenceImages.length >= 3} + > + <ImageIcon className="mr-2 h-4 w-4" /> + Pick from Library + </Button> + <input + type="file" + ref={fileInputRef} + className="hidden" + accept="image/*" + onChange={handleFileChange} + /> + </div> + </div> + </div> + + <Button + onClick={handleGenerate} + disabled={isGenerating || !prompt} + className="w-full" + > + {isGenerating ? ( + <> + <Loader2 className="mr-2 h-4 w-4 animate-spin" /> + Generating with {AVAILABLE_VIDEO_MODELS.find(m => m.modelName === selectedModel)?.displayName}... + </> + ) : ( + 'Generate Video' + )} + </Button> + </CardContent> + </Card> + + {/* Preview Panel */} + <Card> + <CardHeader> + <CardTitle>Result</CardTitle> + </CardHeader> + <CardContent> + {generatedVideoUrl ? ( + <VideoCard + videoId="generated-preview" + videoUrl={generatedVideoUrl} + title={prompt.slice(0, 50)} + author={user?.email || 'User'} + authorId={user?.id || 'uid'} + likes={0} + comments={0} + description={prompt} + showPlayButton={true} + /> + ) : isGenerating ? ( + <div className="flex flex-col items-center justify-center h-64 bg-muted rounded-lg border-2 border-dashed"> + <Loader2 className="h-8 w-8 animate-spin text-primary mb-4" /> + <p className="text-muted-foreground">Generating your video...</p> + <p className="text-xs text-muted-foreground mt-2">This usually takes about 30-60 seconds</p> + </div> + ) : ( + <div className="flex items-center justify-center h-64 bg-muted rounded-lg border-2 border-dashed"> + <p className="text-muted-foreground">Generated video will appear here</p> + </div> + )} + + {generatedVideoUrl && ( + <div className="mt-4 p-4 bg-muted/50 rounded-lg text-xs font-mono break-all"> + URL: {generatedVideoUrl} + </div> + )} + </CardContent> + </Card> + </div> + + <ImagePickerDialog + isOpen={showImagePicker} + onClose={() => setShowImagePicker(false)} + onSelect={handleImageSelect} + /> + </div> + ); +}; + +export default VideoGenPlayground; diff --git a/packages/ui/src/pages/VideoPlayerPlayground.tsx b/packages/ui/src/pages/VideoPlayerPlayground.tsx new file mode 100644 index 00000000..f29e9651 --- /dev/null +++ b/packages/ui/src/pages/VideoPlayerPlayground.tsx @@ -0,0 +1,703 @@ +import { useState, useRef, useEffect } from "react"; +import { useLocation } from "react-router-dom"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { Alert, AlertDescription } from "@/components/ui/alert"; +import VideoCard from "@/components/VideoCard"; +import MuxUploader from "@mux/mux-uploader-react"; +import { toast } from "sonner"; +import { supabase } from "@/integrations/supabase/client"; +import { useAuth } from "@/hooks/useAuth"; +import { Loader2, Upload, CheckCircle2, AlertCircle } from "lucide-react"; +import { MuxVideoMetadata, MuxTrack } from "@/types"; + +type UploadStatus = 'idle' | 'uploading' | 'processing' | 'ready' | 'error'; + +interface MuxAsset { + id: string; + status: 'preparing' | 'ready' | 'errored'; + duration?: number; + aspect_ratio?: string; + created_at?: string; + max_stored_resolution?: string; + max_stored_frame_rate?: number; + tracks?: MuxTrack[]; + playback_ids?: Array<{ + id: string; + policy: string; + }>; +} + +const VideoPlayerPlayground = () => { + const { user, session } = useAuth(); + const location = useLocation(); + const [videoUrl, setVideoUrl] = useState("https://files.vidstack.io/sprite-fight/720p.mp4"); + const [title, setTitle] = useState("Sprite Fight"); + const [description, setDescription] = useState(""); + const [thumbnailUrl, setThumbnailUrl] = useState(""); + const [previewKey, setPreviewKey] = useState(0); + + // Mux upload states + const [uploadStatus, setUploadStatus] = useState<UploadStatus>('idle'); + const [uploadId, setUploadId] = useState<string | null>(null); + const [assetId, setAssetId] = useState<string | null>(null); + const [playbackId, setPlaybackId] = useState<string | null>(null); + const [uploadProgress, setUploadProgress] = useState(0); + const uploaderRef = useRef<any>(null); + + // Handle incoming video file from CreationWizard + useEffect(() => { + const state = location.state as { videoFile?: File } | null; + if (state?.videoFile && user) { + const file = state.videoFile; + setTitle(file.name.replace(/\.[^/.]+$/, '')); // Remove extension + setDescription(`Uploaded video: ${file.name}`); + + // Automatically trigger upload + toast.info('Ready to upload: ' + file.name); + + // Note: The actual upload will be triggered when user drags/selects file in MuxUploader + // We can't programmatically upload to MuxUploader, so we just pre-fill the metadata + } + }, [location.state, user]); + + const handleUpdatePreview = () => { + if (!videoUrl.trim()) { + toast.error("Please enter a video URL"); + return; + } + setPreviewKey(prev => prev + 1); + toast.success("Preview updated!"); + }; + + // Function to fetch upload URL from Supabase Edge Function + const fetchUploadUrl = async () => { + if (!session) { + toast.error("Please sign in to upload videos"); + throw new Error("Not authenticated"); + } + + try { + const supabaseUrl = import.meta.env.VITE_SUPABASE_URL; + const response = await fetch( + `${supabaseUrl}/functions/v1/mux-proxy`, + { + method: 'POST', + headers: { + 'Authorization': `Bearer ${session.access_token}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + action: 'create-upload', + }), + } + ); + + const result = await response.json(); + + if (!result.success) { + throw new Error(result.error || 'Failed to create upload'); + } + + setUploadId(result.data.id); + return result.data.url; + } catch (error) { + console.error('Error creating upload:', error); + toast.error('Failed to create upload URL'); + throw error; + } + }; + + // Poll for asset creation + const pollForAsset = async (uploadId: string) => { + let attempts = 0; + const maxAttempts = 60; // Poll for up to 2 minutes + + const poll = async (): Promise<void> => { + if (!session) return; + + try { + const supabaseUrl = import.meta.env.VITE_SUPABASE_URL; + const response = await fetch( + `${supabaseUrl}/functions/v1/mux-proxy`, + { + method: 'POST', + headers: { + 'Authorization': `Bearer ${session.access_token}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + action: 'get-upload', + uploadId, + }), + } + ); + + const result = await response.json(); + + if (result.success && result.data.asset_id) { + // Asset created, now get asset details + await getAssetDetails(result.data.asset_id); + return; + } + + attempts++; + if (attempts < maxAttempts) { + setTimeout(() => poll(), 2000); // Poll every 2 seconds + } else { + setUploadStatus('error'); + toast.error('Upload processing timed out'); + } + } catch (error) { + console.error('Error polling upload:', error); + setUploadStatus('error'); + } + }; + + await poll(); + }; + + // Get asset details including playback ID + const getAssetDetails = async (assetId: string, attempts = 0) => { + if (!session) return; + + const maxAttempts = 60; // Poll for up to 2 minutes + + try { + const supabaseUrl = import.meta.env.VITE_SUPABASE_URL; + const response = await fetch( + `${supabaseUrl}/functions/v1/mux-proxy`, + { + method: 'POST', + headers: { + 'Authorization': `Bearer ${session.access_token}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + action: 'get-asset', + assetId, + }), + } + ); + + const result = await response.json(); + + if (result.success) { + const asset = result.data; + console.log('Asset status:', asset.status, 'Attempt:', attempts + 1); + + // Check if asset is ready + if (asset.status === 'ready' && asset.playback_ids?.[0]) { + const playbackId = asset.playback_ids[0].id; + setAssetId(assetId); + setPlaybackId(playbackId); + setUploadStatus('ready'); + + // Set the video URL to Mux stream + const muxVideoUrl = `https://stream.mux.com/${playbackId}.m3u8`; + const thumbnailUrl = `https://image.mux.com/${playbackId}/thumbnail.jpg`; + + setVideoUrl(muxVideoUrl); + setThumbnailUrl(thumbnailUrl); + setPreviewKey(prev => prev + 1); + + // Auto-save to database with complete Mux metadata + await saveVideoToDatabase(assetId, playbackId, uploadId || '', asset); + + toast.success('Video is ready to play!'); + } else if (asset.status === 'preparing' && attempts < maxAttempts) { + // Still processing, continue polling + // Only show toast every 10 attempts to avoid spam + if (attempts % 10 === 0) { + toast.info(`Still processing... (${Math.round((attempts / maxAttempts) * 100)}%)`, { + duration: 2000, + }); + } + setTimeout(() => getAssetDetails(assetId, attempts + 1), 2000); + } else if (asset.status === 'errored') { + setUploadStatus('error'); + toast.error('Video processing failed'); + } else if (attempts >= maxAttempts) { + setUploadStatus('error'); + toast.error('Video processing timed out. It may still be processing - check your Mux dashboard.'); + } + } else { + throw new Error(result.error || 'Failed to get asset details'); + } + } catch (error) { + console.error('Error getting asset details:', error); + + // Retry a few times for network errors + if (attempts < 5) { + setTimeout(() => getAssetDetails(assetId, attempts + 1), 3000); + } else { + setUploadStatus('error'); + toast.error('Failed to get video details'); + } + } + }; + + const handleUploadStart = () => { + setUploadStatus('uploading'); + setUploadProgress(0); + toast.info('Upload started...'); + }; + + const handleUploadProgress = (event: any) => { + const detail = event?.detail; + if (detail && typeof detail === 'number') { + setUploadProgress(Math.round(detail * 100)); + } + }; + + const handleUploadSuccess = (event: any) => { + const detail = event?.detail; + console.log('Upload success:', detail); + setUploadStatus('processing'); + toast.success('Upload complete! Processing video...'); + + if (uploadId) { + pollForAsset(uploadId); + } + }; + + const handleUploadError = (event: any) => { + const detail = event?.detail; + console.error('Upload error:', detail); + setUploadStatus('error'); + toast.error('Upload failed. Please try again.'); + }; + + const resetUpload = () => { + setUploadStatus('idle'); + setUploadId(null); + setAssetId(null); + setPlaybackId(null); + setUploadProgress(0); + }; + + const saveVideoToDatabase = async (assetId: string, playbackId: string, uploadId: string, asset: MuxAsset) => { + if (!user) { + console.log('No user, skipping auto-save'); + return; + } + + try { + // Check if already saved + const { data: existing } = await supabase + .from('pictures') + .select('id') + .eq('meta->>mux_asset_id', assetId) + .maybeSingle(); + + if (existing) { + console.log('Video already saved to database'); + return; + } + + // Prepare comprehensive metadata from Mux asset + const metadata: MuxVideoMetadata = { + mux_upload_id: uploadId, + mux_asset_id: assetId, + mux_playback_id: playbackId, + duration: asset.duration ?? null, + aspect_ratio: asset.aspect_ratio ?? null, + created_at: asset.created_at ?? new Date().toISOString(), + status: asset.status, + max_stored_resolution: asset.max_stored_resolution ?? null, + max_stored_frame_rate: asset.max_stored_frame_rate ?? null, + tracks: asset.tracks ?? [], + }; + + const { error } = await supabase + .from('pictures') + .insert({ + user_id: user.id, + title: title || 'Uploaded Video', + description: description || null, + image_url: `https://stream.mux.com/${playbackId}.m3u8`, // For videos, image_url stores the HLS URL + thumbnail_url: `https://image.mux.com/${playbackId}/thumbnail.jpg`, + type: 'mux-video', // Mark as video + meta: metadata as any, + }); + + if (error) throw error; + + console.log('Video auto-saved to database!'); + toast.success('Video saved to database!'); + } catch (error) { + console.error('Error saving video:', error); + toast.error('Failed to save video to database'); + } + }; + + const saveToDatabase = async () => { + if (!user || !assetId || !playbackId) { + toast.error('Missing required information'); + return; + } + + try { + // Get latest asset details + const supabaseUrl = import.meta.env.VITE_SUPABASE_URL; + const response = await fetch( + `${supabaseUrl}/functions/v1/mux-proxy`, + { + method: 'POST', + headers: { + 'Authorization': `Bearer ${session?.access_token}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + action: 'get-asset', + assetId, + }), + } + ); + + const result = await response.json(); + if (result.success) { + await saveVideoToDatabase(assetId, playbackId, uploadId || '', result.data); + } + } catch (error) { + console.error('Error saving video:', error); + toast.error('Failed to save video'); + } + }; + + const exampleVideos = [ + { + name: "Sprite Fight (720p)", + url: "https://files.vidstack.io/sprite-fight/720p.mp4", + thumbnail: "https://files.vidstack.io/sprite-fight/poster.webp" + }, + { + name: "Sprite Fight (1080p)", + url: "https://files.vidstack.io/sprite-fight/1080p.mp4", + thumbnail: "https://files.vidstack.io/sprite-fight/poster.webp" + }, + { + name: "Big Buck Bunny", + url: "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4", + thumbnail: "" + }, + { + name: "Elephant's Dream", + url: "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4", + thumbnail: "" + } + ]; + + const loadExample = (video: typeof exampleVideos[0]) => { + setVideoUrl(video.url); + setTitle(video.name); + setThumbnailUrl(video.thumbnail); + setPreviewKey(prev => prev + 1); + toast.success(`Loaded: ${video.name}`); + }; + + return ( + <div className="container mx-auto p-6 space-y-6"> + <div className="space-y-2"> + <h1 className="text-3xl font-bold">Video Player Playground</h1> + <p className="text-muted-foreground"> + Upload videos with Mux or test the Vidstack player with custom URLs + </p> + </div> + + <div className="grid grid-cols-1 lg:grid-cols-2 gap-6"> + {/* Controls Panel */} + <Card> + <CardHeader> + <CardTitle>Video Settings</CardTitle> + <CardDescription>Upload or configure your video</CardDescription> + </CardHeader> + <CardContent className="space-y-4"> + <Tabs defaultValue="upload" className="w-full"> + <TabsList className="grid w-full grid-cols-2"> + <TabsTrigger value="upload">Upload Video</TabsTrigger> + <TabsTrigger value="url">Test with URL</TabsTrigger> + </TabsList> + + <TabsContent value="upload" className="space-y-4"> + {!user && ( + <Alert> + <AlertCircle className="h-4 w-4" /> + <AlertDescription> + Please sign in to upload videos + </AlertDescription> + </Alert> + )} + + {user && ( + <> + <div className="space-y-2"> + <Label htmlFor="upload-title">Video Title</Label> + <Input + id="upload-title" + placeholder="My Awesome Video" + value={title} + onChange={(e) => setTitle(e.target.value)} + /> + </div> + + <div className="space-y-2"> + <Label htmlFor="upload-description">Description</Label> + <Input + id="upload-description" + placeholder="Video description" + value={description} + onChange={(e) => setDescription(e.target.value)} + /> + </div> + + <div className="space-y-2"> + <Label>Upload Video</Label> + <MuxUploader + ref={uploaderRef} + endpoint={fetchUploadUrl} + onUploadStart={handleUploadStart} + onProgress={handleUploadProgress} + onSuccess={handleUploadSuccess} + onError={handleUploadError} + /> + </div> + + {uploadStatus !== 'idle' && ( + <div className="space-y-2"> + {uploadStatus === 'uploading' && ( + <Alert> + <Loader2 className="h-4 w-4 animate-spin" /> + <AlertDescription> + Uploading: {uploadProgress}% + </AlertDescription> + </Alert> + )} + + {uploadStatus === 'processing' && ( + <Alert> + <Loader2 className="h-4 w-4 animate-spin" /> + <AlertDescription> + <div className="space-y-1"> + <p>Processing video... This may take a few minutes.</p> + <p className="text-xs text-muted-foreground"> + Mux is transcoding your video and creating HLS streams. + You'll be notified when it's ready! + </p> + </div> + </AlertDescription> + </Alert> + )} + + {uploadStatus === 'ready' && ( + <Alert> + <CheckCircle2 className="h-4 w-4 text-green-500" /> + <AlertDescription> + <div className="space-y-1"> + <p>✅ Video ready and saved to database!</p> + <p className="text-xs text-muted-foreground"> + Asset ID: {assetId} + </p> + </div> + </AlertDescription> + </Alert> + )} + + {uploadStatus === 'error' && ( + <Alert variant="destructive"> + <AlertCircle className="h-4 w-4" /> + <AlertDescription> + Upload failed. Please try again. + </AlertDescription> + </Alert> + )} + + <div className="flex gap-2"> + <Button + onClick={resetUpload} + variant="outline" + className="w-full" + > + Upload Another Video + </Button> + </div> + </div> + )} + </> + )} + </TabsContent> + + <TabsContent value="url" className="space-y-4"> + <div className="space-y-2"> + <Label htmlFor="video-url">Video URL *</Label> + <Input + id="video-url" + type="url" + placeholder="https://example.com/video.mp4" + value={videoUrl} + onChange={(e) => setVideoUrl(e.target.value)} + /> + </div> + + <div className="space-y-2"> + <Label htmlFor="url-title">Title</Label> + <Input + id="url-title" + placeholder="My Video" + value={title} + onChange={(e) => setTitle(e.target.value)} + /> + </div> + + <div className="space-y-2"> + <Label htmlFor="url-description">Description</Label> + <Input + id="url-description" + placeholder="Video description" + value={description} + onChange={(e) => setDescription(e.target.value)} + /> + </div> + + <div className="space-y-2"> + <Label htmlFor="thumbnail">Thumbnail URL (optional)</Label> + <Input + id="thumbnail" + type="url" + placeholder="https://example.com/thumbnail.jpg" + value={thumbnailUrl} + onChange={(e) => setThumbnailUrl(e.target.value)} + /> + </div> + + <Button onClick={handleUpdatePreview} className="w-full"> + Update Preview + </Button> + + <div className="pt-4 border-t"> + <Label className="mb-2 block">Example Videos</Label> + <div className="space-y-2"> + {exampleVideos.map((video, index) => ( + <Button + key={index} + variant="outline" + size="sm" + onClick={() => loadExample(video)} + className="w-full justify-start text-left" + > + {video.name} + </Button> + ))} + </div> + </div> + </TabsContent> + </Tabs> + </CardContent> + </Card> + + {/* Preview Panel */} + <Card> + <CardHeader> + <CardTitle>Preview</CardTitle> + <CardDescription>See how your video will look</CardDescription> + </CardHeader> + <CardContent> + <VideoCard + key={previewKey} + videoId="preview-video" + videoUrl={videoUrl} + thumbnailUrl={thumbnailUrl || undefined} + title={title || "Untitled Video"} + author="Demo User" + authorId="demo-user-id" + likes={42} + comments={7} + isLiked={false} + description={description} + /> + </CardContent> + </Card> + </div> + + {/* Info Section */} + <Card> + <CardHeader> + <CardTitle>About This Playground</CardTitle> + </CardHeader> + <CardContent className="space-y-4"> + <div> + <h3 className="font-semibold mb-2">Vidstack Player</h3> + <p className="text-sm text-muted-foreground mb-2"> + Uses <strong>@vidstack/react</strong> for modern, customizable video playback. + </p> + <ul className="list-disc list-inside space-y-1 text-sm text-muted-foreground"> + <li>Supports multiple video formats (MP4, WebM, HLS)</li> + <li>Responsive design with mobile and desktop layouts</li> + <li>Built-in controls: play, pause, volume, fullscreen, and more</li> + <li>Keyboard shortcuts and accessibility support</li> + <li>Picture-in-picture mode</li> + </ul> + </div> + + <div className="pt-4 border-t"> + <h3 className="font-semibold mb-2">Mux Upload</h3> + <p className="text-sm text-muted-foreground mb-2"> + Uses <strong>@mux/mux-uploader-react</strong> for professional video upload and streaming. + </p> + <ul className="list-disc list-inside space-y-1 text-sm text-muted-foreground"> + <li>Drag & drop or click to upload</li> + <li>Automatic video processing and optimization</li> + <li>Generates HLS streams for adaptive bitrate playback</li> + <li>Automatic thumbnail generation</li> + <li>Progress tracking and error handling</li> + </ul> + </div> + + {playbackId && ( + <div className="pt-4 border-t"> + <h3 className="font-semibold mb-2">Your Upload Details</h3> + <div className="space-y-2 text-sm"> + <div> + <Label>Asset ID:</Label> + <code className="block bg-muted p-2 rounded text-xs break-all"> + {assetId} + </code> + </div> + <div> + <Label>Playback ID:</Label> + <code className="block bg-muted p-2 rounded text-xs break-all"> + {playbackId} + </code> + </div> + <div> + <Label>Stream URL (HLS):</Label> + <code className="block bg-muted p-2 rounded text-xs break-all"> + https://stream.mux.com/{playbackId}.m3u8 + </code> + </div> + <div> + <Label>Thumbnail URL:</Label> + <code className="block bg-muted p-2 rounded text-xs break-all"> + https://image.mux.com/{playbackId}/thumbnail.jpg + </code> + </div> + <div> + <Label>Mux Player:</Label> + <code className="block bg-muted p-2 rounded text-xs break-all"> + https://player.mux.com/{playbackId} + </code> + </div> + </div> + </div> + )} + </CardContent> + </Card> + </div> + ); +}; + +export default VideoPlayerPlayground; + diff --git a/packages/ui/src/pages/VideoPlayerPlaygroundIntern.tsx b/packages/ui/src/pages/VideoPlayerPlaygroundIntern.tsx new file mode 100644 index 00000000..5117f0a1 --- /dev/null +++ b/packages/ui/src/pages/VideoPlayerPlaygroundIntern.tsx @@ -0,0 +1,306 @@ +import { useState, useRef } from "react"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Alert, AlertDescription } from "@/components/ui/alert"; +import VideoCard from "@/components/VideoCard"; +import { toast } from "sonner"; +import { useAuth } from "@/hooks/useAuth"; +import { Loader2, AlertCircle, CheckCircle2 } from "lucide-react"; + +type UploadStatus = 'idle' | 'uploading' | 'processing' | 'ready' | 'error'; + +interface VideoJob { + id: string; + status: 'created' | 'active' | 'completed' | 'failed'; + progress: number; + resultUrl?: string; + error?: string; +} + +const VideoPlayerPlaygroundIntern = () => { + const { user } = useAuth(); + const [title, setTitle] = useState("My Internal Video"); + const [description, setDescription] = useState(""); + const [file, setFile] = useState<File | null>(null); + + const [uploadStatus, setUploadStatus] = useState<UploadStatus>('idle'); + const [uploadProgress, setUploadProgress] = useState(0); + const [jobId, setJobId] = useState<string | null>(null); + const [dbId, setDbId] = useState<string | null>(null); + const [logs, setLogs] = useState<string[]>([]); + + // Result state + const [videoUrl, setVideoUrl] = useState(""); + const [thumbnailUrl, setThumbnailUrl] = useState(""); + const [meta, setMeta] = useState<any>(null); + const [previewKey, setPreviewKey] = useState(0); + + const fileInputRef = useRef<HTMLInputElement>(null); + + const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => { + if (e.target.files && e.target.files[0]) { + setFile(e.target.files[0]); + setTitle(e.target.files[0].name.replace(/\.[^/.]+$/, '')); + } + }; + + const trackProgress = (id: string) => { + const serverUrl = import.meta.env.VITE_SERVER_IMAGE_API_URL || 'http://192.168.1.11:3333'; + const eventSource = new EventSource(`${serverUrl}/api/videos/jobs/${id}/progress`); + + eventSource.onmessage = (event) => { + try { + const data = JSON.parse(event.data); + if (data.connected) { + console.log('SSE Connected'); + return; + } + if (data.progress !== undefined) { + setUploadProgress(data.progress); + } + if (data.log) { + setLogs(prev => [...prev, data.log]); + } + } catch (e) { + console.error('SSE Parse Error', e); + } + }; + + eventSource.onerror = (err) => { + console.error('SSE Error', err); + eventSource.close(); + }; + + return eventSource; + }; + + const pollJob = async (id: string) => { + const serverUrl = import.meta.env.VITE_SERVER_IMAGE_API_URL || 'http://192.168.1.11:3333'; + let attempts = 0; + const maxAttempts = 60; // 2 minutes + + // Start SSE Tracking + const sse = trackProgress(id); + + const check = async () => { + try { + const res = await fetch(`${serverUrl}/api/videos/jobs/${id}`); + if (!res.ok) throw new Error('Failed to check job status'); + + const data: VideoJob = await res.json(); + console.log('Job status:', data.status); + + if (data.status === 'completed' && data.resultUrl) { + setUploadStatus('ready'); + setVideoUrl(data.resultUrl); + toast.success('Video processing complete!'); + sse.close(); // Close SSE on completion + } else if (data.status === 'failed') { + setUploadStatus('error'); + toast.error(`Processing failed: ${data.error}`); + sse.close(); + } else { + // Pending + if (attempts < maxAttempts) { + attempts++; + setTimeout(check, 2000); + } else { + setUploadStatus('error'); + toast.error('Processing timed out'); + sse.close(); + } + } + } catch (err) { + console.error('Polling error', err); + setUploadStatus('error'); + sse.close(); + } + }; + + check(); + }; + + const handleUpload = async () => { + if (!file || !user) return; + + setUploadStatus('uploading'); + setUploadProgress(0); // Fake progress for now + setLogs([]); + + const formData = new FormData(); + formData.append('file', file); + + const serverUrl = import.meta.env.VITE_SERVER_IMAGE_API_URL || 'http://192.168.1.11:3333'; + + try { + const xhr = new XMLHttpRequest(); + xhr.open('POST', `${serverUrl}/api/videos/upload?userId=${user.id}&title=${encodeURIComponent(title)}&preset=original`); + + xhr.upload.onprogress = (e) => { + if (e.lengthComputable) { + const percent = Math.round((e.loaded / e.total) * 100); + setUploadProgress(percent); + } + }; + + xhr.onload = () => { + if (xhr.status === 200) { + const data = JSON.parse(xhr.responseText); + console.log('Upload success', data); + setJobId(data.jobId); + setDbId(data.dbId); + setThumbnailUrl(data.thumbnailUrl); + setMeta(data.meta); + setUploadStatus('processing'); + pollJob(data.jobId); + toast.success('Upload complete, processing...'); + } else { + console.error('Upload failed', xhr.responseText); + setUploadStatus('error'); + toast.error('Upload failed'); + } + }; + + xhr.onerror = () => { + setUploadStatus('error'); + toast.error('Network error during upload'); + }; + + xhr.send(formData); + + } catch (err) { + console.error(err); + setUploadStatus('error'); + } + }; + + return ( + <div className="container mx-auto p-6 space-y-6"> + <div className="space-y-2"> + <h1 className="text-3xl font-bold">Internal Video Player Playground</h1> + <p className="text-muted-foreground"> + Test internal video upload and processing pipeline (ffmpeg + pg-boss) + </p> + </div> + + <div className="grid grid-cols-1 lg:grid-cols-2 gap-6"> + <Card> + <CardHeader> + <CardTitle>Upload Video</CardTitle> + <CardDescription>Upload to local server storage</CardDescription> + </CardHeader> + <CardContent className="space-y-4"> + <div className="space-y-2"> + <Label>Select File</Label> + <Input type="file" accept="video/*" onChange={handleFileChange} ref={fileInputRef} /> + </div> + + <div className="space-y-2"> + <Label>Title</Label> + <Input value={title} onChange={e => setTitle(e.target.value)} /> + </div> + + <div className="space-y-2"> + <Label>Description</Label> + <Input value={description} onChange={e => setDescription(e.target.value)} /> + </div> + + <Button + onClick={handleUpload} + disabled={!file || !user || uploadStatus === 'uploading' || uploadStatus === 'processing'} + className="w-full" + > + {uploadStatus === 'uploading' ? 'Uploading...' : 'Upload'} + </Button> + + {/* Status Display */} + {uploadStatus !== 'idle' && ( + <div className="space-y-2 pt-4 border-t"> + {uploadStatus === 'uploading' && ( + <Alert> + <Loader2 className="h-4 w-4 animate-spin" /> + <AlertDescription>Uploading: {uploadProgress}%</AlertDescription> + </Alert> + )} + {uploadStatus === 'processing' && ( + <Alert> + <Loader2 className="h-4 w-4 animate-spin" /> + <AlertDescription>Processing video on server: {uploadProgress}%</AlertDescription> + </Alert> + )} + {uploadStatus === 'ready' && ( + <Alert> + <CheckCircle2 className="h-4 w-4 text-green-500" /> + <AlertDescription>Video Ready!</AlertDescription> + </Alert> + )} + {uploadStatus === 'error' && ( + <Alert variant="destructive"> + <AlertCircle className="h-4 w-4" /> + <AlertDescription>Operation failed</AlertDescription> + </Alert> + )} + </div> + )} + </CardContent> + </Card> + + {/* Preview Panel */} + <Card> + <CardHeader> + <CardTitle>Result</CardTitle> + </CardHeader> + <CardContent> + {videoUrl ? ( + <VideoCard + key={previewKey} + videoId={dbId || jobId || 'preview'} + videoUrl={videoUrl} + thumbnailUrl={thumbnailUrl} + title={title} + author={user?.email || 'User'} // email is likely not on user object directly here depending on definition, but acceptable for demo + authorId={user?.id || 'uid'} + likes={0} + comments={0} + isLiked={false} + description={description} + /> + ) : ( + <div className="flex items-center justify-center h-64 bg-muted rounded-lg border-2 border-dashed"> + <p className="text-muted-foreground">Video preview will appear here</p> + </div> + )} + + {/* Debug Info & Logs */} + {(jobId || logs.length > 0) && ( + <div className="mt-4 p-2 bg-muted rounded text-xs"> + {jobId && <p className="font-bold mb-2">Job ID: {jobId}</p>} + + <p className="font-semibold mt-2">FFmpeg Logs:</p> + <div className="h-32 overflow-y-auto font-mono bg-black text-green-400 p-2 rounded text-[10px] whitespace-pre-wrap"> + {logs.map((log, i) => ( + <div key={i}>{log}</div> + ))} + {logs.length === 0 && <span className="text-gray-500">Waiting for logs...</span>} + </div> + + {meta && ( + <div className="mt-2 pt-2 border-t"> + <p className="font-semibold">Metadata:</p> + <pre className="mt-1 p-2 bg-background rounded border overflow-auto text-[10px]"> + {JSON.stringify(meta, null, 2)} + </pre> + </div> + )} + </div> + )} + </CardContent> + </Card> + </div> + </div> + ); +}; + +export default VideoPlayerPlaygroundIntern; diff --git a/packages/ui/src/pages/Wizard.tsx b/packages/ui/src/pages/Wizard.tsx new file mode 100644 index 00000000..fa56c1ab --- /dev/null +++ b/packages/ui/src/pages/Wizard.tsx @@ -0,0 +1,51 @@ +import React from "react"; +import { useAuth } from "@/hooks/useAuth"; +import { Navigate, useNavigate, useLocation } from "react-router-dom"; +import { useWizardContext } from "@/hooks/useWizardContext"; +import ImageWizard from "@/components/ImageWizard"; + +const Wizard = () => { + const { user } = useAuth(); + const navigate = useNavigate(); + const location = useLocation(); + const { wizardReturnPath, clearWizardImage } = useWizardContext(); + + const mode = location.state?.mode || 'default'; + const initialImages = location.state?.initialImages || []; + const postTitle = location.state?.postTitle || ""; + const postDescription = location.state?.postDescription || ""; + const editingPostId = location.state?.editingPostId; + + if (!user) { + return <Navigate to="/auth" replace />; + } + + const handleClose = () => { + // Clear wizard data when closing + clearWizardImage(); + + // Return to the path we came from, or go back + if (wizardReturnPath) { + navigate(wizardReturnPath); + } else { + window.history.back(); + } + }; + + return ( + <div className="pt-4"> {/* Add padding top to account for TopNavigation */} + <ImageWizard + isOpen={true} + onClose={handleClose} + initialImages={initialImages} + mode={mode} + initialPostTitle={postTitle} + initialPostDescription={postDescription} + editingPostId={editingPostId} + /> + </div> + ); +}; + + +export default Wizard; \ No newline at end of file diff --git a/packages/ui/src/stores/navigationStore.ts b/packages/ui/src/stores/navigationStore.ts new file mode 100644 index 00000000..3a7d65f8 --- /dev/null +++ b/packages/ui/src/stores/navigationStore.ts @@ -0,0 +1,222 @@ +import { create } from 'zustand'; +import { persist, createJSONStorage } from 'zustand/middleware'; + +// Types +export interface NavigationPost { + id: string; + title: string; + image_url: string; + user_id: string; +} + +export interface NavigationData { + posts: NavigationPost[]; + currentIndex: number; + source: 'home' | 'collection' | 'tag' | 'search' | 'user' | 'photogrid'; + sourceId?: string; +} + +export interface NavigationHistory { + path: string; + data: NavigationData; + timestamp: number; +} + +export interface WizardInitialImage { + id: string; + src: string; + title: string; + realDatabaseId?: string; + selected: boolean; +} + +interface NavigationStore { + // Current navigation state + navigationData: NavigationData | null; + + // Navigation history stack + history: NavigationHistory[]; + + // Wizard state (replaces sessionStorage) + wizardInitialImage: WizardInitialImage | null; + wizardReturnPath: string | null; + + // Global Creation Wizard state + creationWizardOpen: boolean; + creationWizardMode: 'default' | 'page'; // Add more modes if needed + + // Actions + setNavigationData: (data: NavigationData | null) => void; + updateCurrentIndex: (index: number) => void; + + // History management + pushHistory: (path: string, data: NavigationData) => void; + popHistory: () => NavigationHistory | null; + clearHistory: () => void; + canGoBack: () => boolean; + + // Wizard actions + setWizardImage: (image: WizardInitialImage | null, returnPath?: string) => void; + clearWizardImage: () => void; + setCreationWizardOpen: (open: boolean, mode?: 'default' | 'page') => void; + + // Preloading + preloadImage: (url: string) => void; + + // Reset all + reset: () => void; +} + +// Preload image helper +const preloadImageHelper = (url: string) => { + if (!url) return; + const img = new Image(); + img.src = url; +}; + +export const useNavigationStore = create<NavigationStore>()( + persist( + (set, get) => ({ + // Initial state + navigationData: null, + history: [], + wizardInitialImage: null, + wizardReturnPath: null, + creationWizardOpen: false, + creationWizardMode: 'default', + + // Set navigation data + setNavigationData: (data) => { + set({ navigationData: data }); + }, + + // Update just the current index (faster than full data update) + updateCurrentIndex: (index) => { + const current = get().navigationData; + if (current) { + set({ + navigationData: { ...current, currentIndex: index } + }); + } + }, + + // Push navigation to history stack + pushHistory: (path, data) => { + const state = get(); + const newHistory = [...state.history, { + path, + data, + timestamp: Date.now() + }]; + + // Limit history to 50 entries + const limitedHistory = newHistory.slice(-50); + + set({ + history: limitedHistory, + navigationData: data + }); + }, + + // Pop from history stack + popHistory: () => { + const state = get(); + if (state.history.length === 0) return null; + + const newHistory = [...state.history]; + const previous = newHistory.pop()!; + + const previousData = newHistory.length > 0 + ? newHistory[newHistory.length - 1].data + : null; + + set({ + history: newHistory, + navigationData: previousData + }); + + return previous; + }, + + // Clear history + clearHistory: () => { + set({ history: [] }); + }, + + // Check if can go back + canGoBack: () => { + return get().history.length > 1; + }, + + // Set wizard image (replaces sessionStorage) + setWizardImage: (image, returnPath) => { + set({ + wizardInitialImage: image, + wizardReturnPath: returnPath || null + }); + }, + + // Clear wizard image + clearWizardImage: () => { + set({ + wizardInitialImage: null, + wizardReturnPath: null + }); + }, + + // Set global creation wizard open state + setCreationWizardOpen: (open, mode = 'default') => { + set({ + creationWizardOpen: open, + creationWizardMode: mode + }); + }, + + // Preload image + preloadImage: (url) => { + preloadImageHelper(url); + }, + + // Reset entire store + reset: () => { + set({ + navigationData: null, + history: [], + wizardInitialImage: null, + wizardReturnPath: null, + creationWizardOpen: false, + creationWizardMode: 'default' + }); + } + }), + { + name: 'pm-pics-navigation', // localStorage key + storage: createJSONStorage(() => localStorage), // Use localStorage + + // Only persist certain fields (not history - too large) + partialize: (state) => ({ + navigationData: state.navigationData, + wizardInitialImage: state.wizardInitialImage, + wizardReturnPath: state.wizardReturnPath, + // Don't persist history - it's too large and not needed across sessions + }), + + // Version for migrations + version: 1, + + // Skip hydration on server (if using SSR) + skipHydration: false, + } + ) +); + +// Selectors for better performance (only re-render when needed) +export const selectNavigationData = (state: NavigationStore) => state.navigationData; +export const selectCurrentIndex = (state: NavigationStore) => state.navigationData?.currentIndex; +export const selectPosts = (state: NavigationStore) => state.navigationData?.posts; +export const selectCanGoBack = (state: NavigationStore) => state.canGoBack(); +export const selectWizardImage = (state: NavigationStore) => state.wizardInitialImage; +export const selectWizardReturnPath = (state: NavigationStore) => state.wizardReturnPath; +export const selectCreationWizardOpen = (state: NavigationStore) => state.creationWizardOpen; +export const selectCreationWizardMode = (state: NavigationStore) => state.creationWizardMode; + diff --git a/packages/ui/src/styles/mdx-editor-theme.css b/packages/ui/src/styles/mdx-editor-theme.css new file mode 100644 index 00000000..e62ef1f4 --- /dev/null +++ b/packages/ui/src/styles/mdx-editor-theme.css @@ -0,0 +1,65 @@ +/* MDXEditor Dark Theme Overrides */ +/* Maps MDXEditor variables to our app's Tailwind/CSS variables */ + +.dark-editor { + /* Primary Accent Colors (Purple in your app) */ + --accentBase: hsl(var(--primary)); + --accentBgSubtle: hsl(var(--primary) / 0.1); + --accentBg: hsl(var(--primary) / 0.2); + --accentBgHover: hsl(var(--primary) / 0.3); + --accentBgActive: hsl(var(--primary) / 0.4); + --accentLine: hsl(var(--primary)); + --accentBorder: hsl(var(--primary)); + --accentBorderHover: hsl(var(--primary-glow)); + --accentSolid: hsl(var(--primary)); + --accentSolidHover: hsl(var(--primary-glow)); + --accentText: hsl(var(--primary-foreground)); + --accentTextContrast: hsl(var(--primary-foreground)); + + /* Base Colors (Backgrounds, Text, Borders) */ + --baseBase: hsl(var(--background)); + --baseBgSubtle: hsl(var(--muted)); + --baseBg: hsl(var(--card)); + /* Editor background */ + --baseBgHover: hsl(var(--muted)); + --baseBgActive: hsl(var(--muted) / 0.8); + --baseLine: hsl(var(--border)); + --baseBorder: hsl(var(--border)); + --baseBorderHover: hsl(var(--ring)); + --baseSolid: hsl(var(--foreground)); + --baseSolidHover: hsl(var(--muted-foreground)); + --baseText: hsl(var(--foreground)); + --baseTextContrast: hsl(var(--background)); + + /* Admonitions / Callouts */ + --admonitionTipBg: hsl(var(--accent) / 0.1); + --admonitionTipBorder: hsl(var(--accent)); + --admonitionInfoBg: hsl(var(--primary) / 0.1); + --admonitionInfoBorder: hsl(var(--primary)); + --admonitionCautionBg: hsl(48 96% 89% / 0.1); + /* Hardcoded Amber for now or define --warning */ + --admonitionCautionBorder: hsl(48 96% 89%); + --admonitionDangerBg: hsl(var(--destructive) / 0.1); + --admonitionDangerBorder: hsl(var(--destructive)); + --admonitionNoteBg: hsl(var(--muted)); + --admonitionNoteBorder: hsl(var(--border)); + + /* Font overrides to match app */ + font-family: inherit; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + + color: var(--baseText); + background-color: transparent; + /* Let container background show through or use --baseBg */ +} + +/* Ensure the editor container takes the background color in dark mode */ +.dark-theme .mdxeditor-root-contenteditable { + background-color: transparent; +} + +/* Toolbar dark mode adjustments if needed */ +.dark-theme .mdx-toolbar { + background-color: hsl(var(--card)); + border-color: hsl(var(--border)); +} \ No newline at end of file diff --git a/packages/ui/src/styles/prism-custom-theme.css b/packages/ui/src/styles/prism-custom-theme.css new file mode 100644 index 00000000..918751fa --- /dev/null +++ b/packages/ui/src/styles/prism-custom-theme.css @@ -0,0 +1,171 @@ +/* Custom Prism Theme with CSS Variables for Light/Dark Mode */ + +:root { + /* Default (Light Mode) - Based on Prism Default */ + --prism-bg: #ffffff; + --prism-text: black; + --prism-comment: #708090; + --prism-punctuation: #999; + --prism-tag: #905; + --prism-attr-value: #690; + --prism-operator: #9a6e3a; + --prism-keyword: #07a; + --prism-function: #dd4a68; + --prism-number: #905; + --prism-class-name: #dd4a68; + --prism-regex: #e90; + --prism-variable: #e90; + --prism-header: #999; + /* For Markdown AST if rendered */ +} + +html.dark { + /* Dark Mode - Based on Prism Tomorrow Night */ + --prism-bg: #2d2d2d; + --prism-text: #ccc; + --prism-comment: #999; + --prism-punctuation: #ccc; + --prism-tag: #e2777a; + --prism-attr-value: #7ec699; + --prism-operator: #67cdcc; + --prism-keyword: #cc99cd; + --prism-function: #6196cc; + --prism-number: #f08d49; + --prism-class-name: #f8c555; + --prism-regex: #7ec699; + --prism-variable: #f8c555; + --prism-header: #ccc; +} + +/* Core setup */ +code[class*="language-"], +pre[class*="language-"] { + color: var(--prism-text); + background: none; + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + border-radius: 0.3em; + background: var(--prism-bg); + /* Only pre gets background */ +} + +/* Inline code */ +:not(pre)>code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; + background: var(--prism-bg); +} + +.token.comment, +.token.block-comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: var(--prism-comment); +} + +.token.punctuation { + color: var(--prism-punctuation); +} + +.token.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.constant, +.token.symbol, +.token.deleted { + color: var(--prism-tag); +} + +.token.boolean, +.token.number { + color: var(--prism-number); +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: var(--prism-attr-value); +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: var(--prism-operator); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: var(--prism-keyword); +} + +.token.function, +.token.class-name { + color: var(--prism-function); +} + +.token.regex, +.token.important, +.token.variable { + color: var(--prism-regex); +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +/* Dark mode specific tweaks for specific tokens that need mapping adjustments */ +html.dark .token.operator, +html.dark .token.entity, +html.dark .token.url { + color: var(--prism-operator); + /* #67cdcc */ +} + +html.dark .token.string, +html.dark .token.char, +html.dark .token.attr-value { + color: var(--prism-attr-value); + /* #7ec699 */ +} \ No newline at end of file diff --git a/packages/ui/src/types.ts b/packages/ui/src/types.ts new file mode 100644 index 00000000..204cb5aa --- /dev/null +++ b/packages/ui/src/types.ts @@ -0,0 +1,179 @@ +export interface ImageFile { + path: string; + src: string; + selected?: boolean; + isGenerated?: boolean; + title?: string; + description?: string; +} + +// Media Type Registry +export type MediaType = 'supabase-image' | 'mux-video' | 'youtube' | 'tiktok' | 'video-intern' | 'page-intern' | 'page-external' | null; + +// Unified Media Item (from 'pictures' table) +export interface MediaItem { + id: string; + user_id: string; + title: string; + description: string | null; + image_url: string; // For images: image URL, for videos: HLS stream URL + thumbnail_url: string | null; + type: MediaType; // NULL or 'supabase-image' for images, 'mux-video' for videos + meta: any | null; // Video metadata for mux-video, null for images + created_at: string; + updated_at: string; + likes_count: number | null; + is_selected: boolean; + visible: boolean; + tags: string[] | null; + flags: string[] | null; + organization_id: string | null; + parent_id: string | null; + position: number; + job?: any; + responsive?: any; // To hold server-generated responsive data +} + +// Mux Video Resolution Types +// See: https://www.mux.com/docs/guides/control-playback-resolution +export type MuxResolution = '270p' | '360p' | '480p' | '540p' | '720p' | '1080p' | '1440p' | '2160p'; + +export interface GeneratedImage { + src: string; + filename: string; +} + +export interface PromptTemplate { + name: string; + text: string; +} + +// Mux Video Types + +export interface MuxTrack { + type: 'video' | 'audio' | 'text'; + duration?: number; + encoding?: string; + width?: number; + height?: number; + frame_rate?: number; + sample_rate?: number; + channels?: number; +} + +export interface MuxVideoMetadata { + mux_upload_id: string; + mux_asset_id: string; + mux_playback_id: string; + duration: number | null; + aspect_ratio: string | null; + created_at: string; + status: 'preparing' | 'ready' | 'errored'; + max_stored_resolution: string | null; + max_stored_frame_rate: number | null; + tracks: MuxTrack[]; +} + +export interface VideoFile { + id: string; + user_id: string; + title: string; + description: string | null; + video_url: string; + thumbnail_url: string | null; + meta: MuxVideoMetadata | null; + created_at: string; + updated_at: string; + likes_count: number; + is_selected: boolean; + visible: boolean; + tags: string[] | null; + flags: string[] | null; + organization_id: string | null; + parent_id: string | null; +} + +// Types for User Profile Settings + +export interface WorkflowAction { + id: string; + type: string; + label: string; + description: string; +} + +export interface Workflow { + id: string; + name: string; + actions: WorkflowAction[]; + createdAt: string; +} + +export interface FilterPanelSettings { + model: string; + context: string; + provider: string; + selectionMode: string; +} + +export interface QuickAction { + id: string; + icon: string; + name: string; + prompt: string; +} + +export interface PromptPreset { + id: string; + name: string; + prompt: string; + createdAt: string; +} + +export interface MarkdownWidgetSettings { + model: string; + provider: string; +} + +export interface AITextGeneratorSettings { + model: string; + provider: string; + contextMode: 'clear' | 'selection' | 'all'; + applicationMode: 'replace' | 'insert' | 'append'; + imageToolsEnabled: boolean; +} + +export interface UserSettingsPromptTemplate { + name: string; + template: string; +} + +export interface UserSettings { + workflows?: Workflow[]; + filterPanel?: FilterPanelSettings; + quickActions?: QuickAction[]; + promptHistory?: string[]; + promptPresets?: PromptPreset[]; + markdownWidget?: MarkdownWidgetSettings; + aiTextGenerator?: AITextGeneratorSettings; + promptTemplates?: UserSettingsPromptTemplate[]; +} + +export interface PostNavigationData { + posts: { + id: string; + title: string; + image_url: string; + thumbnail_url?: string | null; + user_id: string; + type?: string; + description?: string | null; + created_at?: string; + meta?: any; + likes_count?: number; + comments_count?: number; + }[]; + currentIndex: number; + source: 'home' | 'collection' | 'tag' | 'search' | 'user' | 'photogrid'; + sourceId?: string; +}